appium-webdriveragent 4.4.0 → 4.4.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/WebDriverAgentRunner-Runner.app.zip +0 -0
- package/build/index.js +1 -1
- package/build/lib/check-dependencies.js +1 -1
- package/build/lib/constants.js +1 -1
- package/build/lib/logger.js +1 -1
- package/build/lib/no-session-proxy.js +1 -1
- package/build/lib/utils.js +1 -1
- package/build/lib/webdriveragent.js +9 -2
- package/build/lib/xcodebuild.js +1 -1
- package/lib/webdriveragent.js +7 -1
- package/package.json +7 -6
- package/WebDriverAgent.xcodeproj/project.xcworkspace/xcuserdata/elf.xcuserdatad/UserInterfaceState.xcuserstate +0 -0
- package/WebDriverAgent.xcodeproj/xcuserdata/elf.xcuserdatad/xcdebugger/Breakpoints_v2.xcbkptlist +0 -91
- package/WebDriverAgent.xcodeproj/xcuserdata/elf.xcuserdatad/xcschemes/xcschememanagement.plist +0 -59
|
Binary file
|
package/build/index.js
CHANGED
|
@@ -57,4 +57,4 @@ if (require.main === module) {
|
|
|
57
57
|
}require('source-map-support').install();
|
|
58
58
|
|
|
59
59
|
|
|
60
|
-
//# sourceMappingURL=data:application/json;charset=utf8;base64,
|
|
60
|
+
//# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJuYW1lcyI6WyJjaGVja0ZvckRlcGVuZGVuY2llcyIsImJ1bmRsZVdEQVNpbSIsImRlcGVuZGVuY2llcyIsIk5vU2Vzc2lvblByb3h5IiwicHJveGllcyIsIldlYkRyaXZlckFnZW50IiwiZHJpdmVyIiwiQk9PVFNUUkFQX1BBVEgiLCJXREFfQkFTRV9VUkwiLCJXREFfUlVOTkVSX0JVTkRMRV9JRCIsIlBST0pFQ1RfRklMRSIsImNvbnN0YW50cyIsInJlc2V0VGVzdFByb2Nlc3NlcyIsInV0aWxzIiwicmVxdWlyZSIsIm1haW4iLCJtb2R1bGUiXSwic291cmNlUm9vdCI6Ii4uIiwic291cmNlcyI6WyJpbmRleC5qcyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgKiBhcyBkZXBlbmRlbmNpZXMgZnJvbSAnLi9saWIvY2hlY2stZGVwZW5kZW5jaWVzJztcbmltcG9ydCAqIGFzIHByb3hpZXMgZnJvbSAnLi9saWIvbm8tc2Vzc2lvbi1wcm94eSc7XG5pbXBvcnQgKiBhcyBkcml2ZXIgZnJvbSAnLi9saWIvd2ViZHJpdmVyYWdlbnQnO1xuaW1wb3J0ICogYXMgY29uc3RhbnRzIGZyb20gJy4vbGliL2NvbnN0YW50cyc7XG5pbXBvcnQgKiBhcyB1dGlscyBmcm9tICcuL2xpYi91dGlscyc7XG5pbXBvcnQgeyBhc3luY2lmeSB9IGZyb20gJ2FzeW5jYm94JztcblxuXG5jb25zdCB7IGNoZWNrRm9yRGVwZW5kZW5jaWVzLCBidW5kbGVXREFTaW0gfSA9IGRlcGVuZGVuY2llcztcbmNvbnN0IHsgTm9TZXNzaW9uUHJveHkgfSA9IHByb3hpZXM7XG5jb25zdCB7IFdlYkRyaXZlckFnZW50IH0gPSBkcml2ZXI7XG5jb25zdCB7IEJPT1RTVFJBUF9QQVRILCBXREFfQkFTRV9VUkwsIFdEQV9SVU5ORVJfQlVORExFX0lELCBQUk9KRUNUX0ZJTEUgfSA9IGNvbnN0YW50cztcbmNvbnN0IHsgcmVzZXRUZXN0UHJvY2Vzc2VzIH0gPSB1dGlscztcblxuXG4vLyBXaGVuIHJ1biBhcyBhIGNvbW1hbmQgbGluZSB1dGlsaXR5LCB0aGlzIHNob3VsZCBjaGVjayBmb3IgdGhlIGRlcGVuZGVuY2llc1xuaWYgKHJlcXVpcmUubWFpbiA9PT0gbW9kdWxlKSB7XG4gIGFzeW5jaWZ5KGNoZWNrRm9yRGVwZW5kZW5jaWVzKTtcbn1cblxuZXhwb3J0IHtcbiAgV2ViRHJpdmVyQWdlbnQsXG4gIE5vU2Vzc2lvblByb3h5LFxuICBjaGVja0ZvckRlcGVuZGVuY2llcywgYnVuZGxlV0RBU2ltLFxuICByZXNldFRlc3RQcm9jZXNzZXMsXG4gIEJPT1RTVFJBUF9QQVRILFxuICBXREFfUlVOTkVSX0JVTkRMRV9JRCwgUFJPSkVDVF9GSUxFLFxuICBXREFfQkFTRV9VUkwsXG59O1xuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7QUFBQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFDQTs7Ozs7O0FBR0EsTUFBTTtFQUFFQSxvQkFBRjtFQUF3QkM7QUFBeEIsSUFBeUNDLFlBQS9DOzs7QUFDQSxNQUFNO0VBQUVDO0FBQUYsSUFBcUJDLE9BQTNCOztBQUNBLE1BQU07RUFBRUM7QUFBRixJQUFxQkMsTUFBM0I7O0FBQ0EsTUFBTTtFQUFFQyxjQUFGO0VBQWtCQyxZQUFsQjtFQUFnQ0Msb0JBQWhDO0VBQXNEQztBQUF0RCxJQUF1RUMsU0FBN0U7Ozs7O0FBQ0EsTUFBTTtFQUFFQztBQUFGLElBQXlCQyxLQUEvQjs7O0FBSUEsSUFBSUMsT0FBTyxDQUFDQyxJQUFSLEtBQWlCQyxNQUFyQixFQUE2QjtFQUMzQix3QkFBU2hCLG9CQUFUO0FBQ0QifQ==
|
|
@@ -55,4 +55,4 @@ async function bundleWDASim(xcodebuild, opts = {}) {
|
|
|
55
55
|
}require('source-map-support').install();
|
|
56
56
|
|
|
57
57
|
|
|
58
|
-
//# sourceMappingURL=data:application/json;charset=utf8;base64,
|
|
58
|
+
//# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibGliL2NoZWNrLWRlcGVuZGVuY2llcy5qcyIsIm5hbWVzIjpbImJ1aWxkV0RBU2ltIiwiYXJncyIsIldEQV9QUk9KRUNUIiwiV0RBX1NDSEVNRSIsIlNES19TSU1VTEFUT1IiLCJjaGVja0ZvckRlcGVuZGVuY2llcyIsImxvZyIsImRlYnVnIiwiYnVuZGxlV0RBU2ltIiwieGNvZGVidWlsZCIsIm9wdHMiLCJfIiwiaXNGdW5jdGlvbiIsInJldHJpZXZlRGVyaXZlZERhdGFQYXRoIiwiWGNvZGVCdWlsZCIsImRlcml2ZWREYXRhUGF0aCIsIndkYUJ1bmRsZVBhdGgiLCJwYXRoIiwiam9pbiIsIldEQV9SVU5ORVJfQVBQIiwiZnMiLCJleGlzdHMiXSwic291cmNlUm9vdCI6Ii4uLy4uIiwic291cmNlcyI6WyJsaWIvY2hlY2stZGVwZW5kZW5jaWVzLmpzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGZzIH0gZnJvbSAnQGFwcGl1bS9zdXBwb3J0JztcbmltcG9ydCBfIGZyb20gJ2xvZGFzaCc7XG5pbXBvcnQgeyBleGVjIH0gZnJvbSAndGVlbl9wcm9jZXNzJztcbmltcG9ydCBwYXRoIGZyb20gJ3BhdGgnO1xuaW1wb3J0IFhjb2RlQnVpbGQgZnJvbSAnLi94Y29kZWJ1aWxkJztcbmltcG9ydCB7XG4gIFdEQV9QUk9KRUNULCBXREFfU0NIRU1FLCBTREtfU0lNVUxBVE9SLCBXREFfUlVOTkVSX0FQUFxufSBmcm9tICcuL2NvbnN0YW50cyc7XG5pbXBvcnQgbG9nIGZyb20gJy4vbG9nZ2VyJztcblxuYXN5bmMgZnVuY3Rpb24gYnVpbGRXREFTaW0gKCkge1xuICBjb25zdCBhcmdzID0gW1xuICAgICctcHJvamVjdCcsIFdEQV9QUk9KRUNULFxuICAgICctc2NoZW1lJywgV0RBX1NDSEVNRSxcbiAgICAnLXNkaycsIFNES19TSU1VTEFUT1IsXG4gICAgJ0NPREVfU0lHTl9JREVOVElUWT1cIlwiJyxcbiAgICAnQ09ERV9TSUdOSU5HX1JFUVVJUkVEPVwiTk9cIicsXG4gICAgJ0dDQ19UUkVBVF9XQVJOSU5HU19BU19FUlJPUlM9MCcsXG4gIF07XG4gIGF3YWl0IGV4ZWMoJ3hjb2RlYnVpbGQnLCBhcmdzKTtcbn1cblxuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIHJlcXVpcmUtYXdhaXRcbmFzeW5jIGZ1bmN0aW9uIGNoZWNrRm9yRGVwZW5kZW5jaWVzICgpIHtcbiAgbG9nLmRlYnVnKCdEZXBlbmRlbmNpZXMgYXJlIHVwIHRvIGRhdGUnKTtcbiAgcmV0dXJuIGZhbHNlO1xufVxuXG5hc3luYyBmdW5jdGlvbiBidW5kbGVXREFTaW0gKHhjb2RlYnVpbGQsIG9wdHMgPSB7fSkge1xuICBpZiAoeGNvZGVidWlsZCAmJiAhXy5pc0Z1bmN0aW9uKHhjb2RlYnVpbGQucmV0cmlldmVEZXJpdmVkRGF0YVBhdGgpKSB7XG4gICAgeGNvZGVidWlsZCA9IG5ldyBYY29kZUJ1aWxkKCk7XG4gICAgb3B0cyA9IHhjb2RlYnVpbGQ7XG4gIH1cblxuICBjb25zdCBkZXJpdmVkRGF0YVBhdGggPSBhd2FpdCB4Y29kZWJ1aWxkLnJldHJpZXZlRGVyaXZlZERhdGFQYXRoKCk7XG4gIGNvbnN0IHdkYUJ1bmRsZVBhdGggPSBwYXRoLmpvaW4oZGVyaXZlZERhdGFQYXRoLCAnQnVpbGQnLCAnUHJvZHVjdHMnLCAnRGVidWctaXBob25lc2ltdWxhdG9yJywgV0RBX1JVTk5FUl9BUFApO1xuICBpZiAoYXdhaXQgZnMuZXhpc3RzKHdkYUJ1bmRsZVBhdGgpKSB7XG4gICAgcmV0dXJuIHdkYUJ1bmRsZVBhdGg7XG4gIH1cbiAgYXdhaXQgY2hlY2tGb3JEZXBlbmRlbmNpZXMob3B0cyk7XG4gIGF3YWl0IGJ1aWxkV0RBU2ltKHhjb2RlYnVpbGQsIG9wdHMpO1xuICByZXR1cm4gd2RhQnVuZGxlUGF0aDtcbn1cblxuZXhwb3J0IHsgY2hlY2tGb3JEZXBlbmRlbmNpZXMsIGJ1bmRsZVdEQVNpbSB9O1xuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7QUFBQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFHQTs7QUFFQSxlQUFlQSxXQUFmLEdBQThCO0VBQzVCLE1BQU1DLElBQUksR0FBRyxDQUNYLFVBRFcsRUFDQ0Msc0JBREQsRUFFWCxTQUZXLEVBRUFDLHFCQUZBLEVBR1gsTUFIVyxFQUdIQyx3QkFIRyxFQUlYLHVCQUpXLEVBS1gsNEJBTFcsRUFNWCxnQ0FOVyxDQUFiO0VBUUEsTUFBTSx3QkFBSyxZQUFMLEVBQW1CSCxJQUFuQixDQUFOO0FBQ0Q7O0FBR0QsZUFBZUksb0JBQWYsR0FBdUM7RUFDckNDLGdCQUFJQyxLQUFKLENBQVUsNkJBQVY7O0VBQ0EsT0FBTyxLQUFQO0FBQ0Q7O0FBRUQsZUFBZUMsWUFBZixDQUE2QkMsVUFBN0IsRUFBeUNDLElBQUksR0FBRyxFQUFoRCxFQUFvRDtFQUNsRCxJQUFJRCxVQUFVLElBQUksQ0FBQ0UsZ0JBQUVDLFVBQUYsQ0FBYUgsVUFBVSxDQUFDSSx1QkFBeEIsQ0FBbkIsRUFBcUU7SUFDbkVKLFVBQVUsR0FBRyxJQUFJSyxtQkFBSixFQUFiO0lBQ0FKLElBQUksR0FBR0QsVUFBUDtFQUNEOztFQUVELE1BQU1NLGVBQWUsR0FBRyxNQUFNTixVQUFVLENBQUNJLHVCQUFYLEVBQTlCOztFQUNBLE1BQU1HLGFBQWEsR0FBR0MsY0FBS0MsSUFBTCxDQUFVSCxlQUFWLEVBQTJCLE9BQTNCLEVBQW9DLFVBQXBDLEVBQWdELHVCQUFoRCxFQUF5RUkseUJBQXpFLENBQXRCOztFQUNBLElBQUksTUFBTUMsWUFBR0MsTUFBSCxDQUFVTCxhQUFWLENBQVYsRUFBb0M7SUFDbEMsT0FBT0EsYUFBUDtFQUNEOztFQUNELE1BQU1YLG9CQUFvQixDQUFDSyxJQUFELENBQTFCO0VBQ0EsTUFBTVYsV0FBVyxDQUFDUyxVQUFELEVBQWFDLElBQWIsQ0FBakI7RUFDQSxPQUFPTSxhQUFQO0FBQ0QifQ==
|
package/build/lib/constants.js
CHANGED
|
@@ -45,4 +45,4 @@ const WDA_UPGRADE_TIMESTAMP_PATH = _path.default.join('.appium', 'webdriveragent
|
|
|
45
45
|
exports.WDA_UPGRADE_TIMESTAMP_PATH = WDA_UPGRADE_TIMESTAMP_PATH;require('source-map-support').install();
|
|
46
46
|
|
|
47
47
|
|
|
48
|
-
//# sourceMappingURL=data:application/json;charset=utf8;base64,
|
|
48
|
+
//# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibGliL2NvbnN0YW50cy5qcyIsIm5hbWVzIjpbIkJPT1RTVFJBUF9QQVRIIiwiX19kaXJuYW1lIiwiZW5kc1dpdGgiLCJwYXRoIiwicmVzb2x2ZSIsIldEQV9QUk9KRUNUIiwiam9pbiIsIldEQV9TQ1JJUFRTX1JPT1QiLCJXREFfUlVOTkVSX0JVTkRMRV9JRCIsIldEQV9SVU5ORVJfQVBQIiwiV0RBX1NDSEVNRSIsIlBST0pFQ1RfRklMRSIsIldEQV9CQVNFX1VSTCIsIlBMQVRGT1JNX05BTUVfVFZPUyIsIlBMQVRGT1JNX05BTUVfSU9TIiwiU0RLX1NJTVVMQVRPUiIsIlNES19ERVZJQ0UiLCJXREFfVVBHUkFERV9USU1FU1RBTVBfUEFUSCJdLCJzb3VyY2VSb290IjoiLi4vLi4iLCJzb3VyY2VzIjpbImxpYi9jb25zdGFudHMuanMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHBhdGggZnJvbSAncGF0aCc7XG5cblxuY29uc3QgQk9PVFNUUkFQX1BBVEggPSBfX2Rpcm5hbWUuZW5kc1dpdGgoJ2J1aWxkJylcbiAgPyBwYXRoLnJlc29sdmUoX19kaXJuYW1lLCAnLi4nLCAnLi4nLCAnLi4nKVxuICA6IHBhdGgucmVzb2x2ZShfX2Rpcm5hbWUsICcuLicsICcuLicpO1xuY29uc3QgV0RBX1BST0pFQ1QgPSBwYXRoLmpvaW4oQk9PVFNUUkFQX1BBVEgsICdXZWJEcml2ZXJBZ2VudC54Y29kZXByb2onKTtcbmNvbnN0IFdEQV9TQ1JJUFRTX1JPT1QgPSBwYXRoLmpvaW4oQk9PVFNUUkFQX1BBVEgsICdTY3JpcHRzJyk7XG5jb25zdCBXREFfUlVOTkVSX0JVTkRMRV9JRCA9ICdjb20uZmFjZWJvb2suV2ViRHJpdmVyQWdlbnRSdW5uZXInO1xuY29uc3QgV0RBX1JVTk5FUl9BUFAgPSAnV2ViRHJpdmVyQWdlbnRSdW5uZXItUnVubmVyLmFwcCc7XG5jb25zdCBXREFfU0NIRU1FID0gJ1dlYkRyaXZlckFnZW50UnVubmVyJztcbmNvbnN0IFBST0pFQ1RfRklMRSA9ICdwcm9qZWN0LnBieHByb2onO1xuY29uc3QgV0RBX0JBU0VfVVJMID0gJ2h0dHA6Ly8xMjcuMC4wLjEnO1xuXG5jb25zdCBQTEFURk9STV9OQU1FX1RWT1MgPSAndHZPUyc7XG5jb25zdCBQTEFURk9STV9OQU1FX0lPUyA9ICdpT1MnO1xuXG5jb25zdCBTREtfU0lNVUxBVE9SID0gJ2lwaG9uZXNpbXVsYXRvcic7XG5jb25zdCBTREtfREVWSUNFID0gJ2lwaG9uZW9zJztcblxuY29uc3QgV0RBX1VQR1JBREVfVElNRVNUQU1QX1BBVEggPSBwYXRoLmpvaW4oJy5hcHBpdW0nLCAnd2ViZHJpdmVyYWdlbnQnLCAndXBncmFkZS50aW1lJyk7XG5cbmV4cG9ydCB7XG4gIEJPT1RTVFJBUF9QQVRILFxuICBXREFfUlVOTkVSX0JVTkRMRV9JRCwgV0RBX1JVTk5FUl9BUFAsIFBST0pFQ1RfRklMRSxcbiAgV0RBX1BST0pFQ1QsIFdEQV9TQ0hFTUUsXG4gIFBMQVRGT1JNX05BTUVfVFZPUywgUExBVEZPUk1fTkFNRV9JT1MsXG4gIFNES19TSU1VTEFUT1IsIFNES19ERVZJQ0UsXG4gIFdEQV9CQVNFX1VSTCwgV0RBX1NDUklQVFNfUk9PVCwgV0RBX1VQR1JBREVfVElNRVNUQU1QX1BBVEhcbn07XG4iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7O0FBQUE7O0FBR0EsTUFBTUEsY0FBYyxHQUFHQyxTQUFTLENBQUNDLFFBQVYsQ0FBbUIsT0FBbkIsSUFDbkJDLGNBQUtDLE9BQUwsQ0FBYUgsU0FBYixFQUF3QixJQUF4QixFQUE4QixJQUE5QixFQUFvQyxJQUFwQyxDQURtQixHQUVuQkUsY0FBS0MsT0FBTCxDQUFhSCxTQUFiLEVBQXdCLElBQXhCLEVBQThCLElBQTlCLENBRko7OztBQUdBLE1BQU1JLFdBQVcsR0FBR0YsY0FBS0csSUFBTCxDQUFVTixjQUFWLEVBQTBCLDBCQUExQixDQUFwQjs7OztBQUNBLE1BQU1PLGdCQUFnQixHQUFHSixjQUFLRyxJQUFMLENBQVVOLGNBQVYsRUFBMEIsU0FBMUIsQ0FBekI7OztBQUNBLE1BQU1RLG9CQUFvQixHQUFHLG1DQUE3Qjs7QUFDQSxNQUFNQyxjQUFjLEdBQUcsaUNBQXZCOztBQUNBLE1BQU1DLFVBQVUsR0FBRyxzQkFBbkI7O0FBQ0EsTUFBTUMsWUFBWSxHQUFHLGlCQUFyQjs7QUFDQSxNQUFNQyxZQUFZLEdBQUcsa0JBQXJCOztBQUVBLE1BQU1DLGtCQUFrQixHQUFHLE1BQTNCOztBQUNBLE1BQU1DLGlCQUFpQixHQUFHLEtBQTFCOztBQUVBLE1BQU1DLGFBQWEsR0FBRyxpQkFBdEI7O0FBQ0EsTUFBTUMsVUFBVSxHQUFHLFVBQW5COzs7QUFFQSxNQUFNQywwQkFBMEIsR0FBR2QsY0FBS0csSUFBTCxDQUFVLFNBQVYsRUFBcUIsZ0JBQXJCLEVBQXVDLGNBQXZDLENBQW5DIn0=
|
package/build/lib/logger.js
CHANGED
|
@@ -15,4 +15,4 @@ var _default = log;
|
|
|
15
15
|
exports.default = _default;require('source-map-support').install();
|
|
16
16
|
|
|
17
17
|
|
|
18
|
-
//# sourceMappingURL=data:application/json;charset=utf8;base64,
|
|
18
|
+
//# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibGliL2xvZ2dlci5qcyIsIm5hbWVzIjpbImxvZyIsImxvZ2dlciIsImdldExvZ2dlciJdLCJzb3VyY2VSb290IjoiLi4vLi4iLCJzb3VyY2VzIjpbImxpYi9sb2dnZXIuanMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgbG9nZ2VyIH0gZnJvbSAnQGFwcGl1bS9zdXBwb3J0JztcblxuY29uc3QgbG9nID0gbG9nZ2VyLmdldExvZ2dlcignV2ViRHJpdmVyQWdlbnQnKTtcblxuZXhwb3J0IGRlZmF1bHQgbG9nO1xuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7QUFBQTs7QUFFQSxNQUFNQSxHQUFHLEdBQUdDLGdCQUFPQyxTQUFQLENBQWlCLGdCQUFqQixDQUFaOztlQUVlRixHIn0=
|
|
@@ -39,4 +39,4 @@ var _default = NoSessionProxy;
|
|
|
39
39
|
exports.default = _default;require('source-map-support').install();
|
|
40
40
|
|
|
41
41
|
|
|
42
|
-
//# sourceMappingURL=data:application/json;charset=utf8;base64,
|
|
42
|
+
//# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibGliL25vLXNlc3Npb24tcHJveHkuanMiLCJuYW1lcyI6WyJOb1Nlc3Npb25Qcm94eSIsIkpXUHJveHkiLCJjb25zdHJ1Y3RvciIsIm9wdHMiLCJnZXRVcmxGb3JQcm94eSIsInVybCIsInByb3h5QmFzZSIsInNjaGVtZSIsInNlcnZlciIsInBvcnQiLCJiYXNlIiwicmVtYWluaW5nVXJsIiwiUmVnRXhwIiwidGVzdCIsIkVycm9yIiwicmVwbGFjZSJdLCJzb3VyY2VSb290IjoiLi4vLi4iLCJzb3VyY2VzIjpbImxpYi9uby1zZXNzaW9uLXByb3h5LmpzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEpXUHJveHkgfSBmcm9tICdAYXBwaXVtL2Jhc2UtZHJpdmVyJztcblxuXG5jbGFzcyBOb1Nlc3Npb25Qcm94eSBleHRlbmRzIEpXUHJveHkge1xuICBjb25zdHJ1Y3RvciAob3B0cyA9IHt9KSB7XG4gICAgc3VwZXIob3B0cyk7XG4gIH1cblxuICBnZXRVcmxGb3JQcm94eSAodXJsKSB7XG4gICAgaWYgKHVybCA9PT0gJycpIHtcbiAgICAgIHVybCA9ICcvJztcbiAgICB9XG4gICAgY29uc3QgcHJveHlCYXNlID0gYCR7dGhpcy5zY2hlbWV9Oi8vJHt0aGlzLnNlcnZlcn06JHt0aGlzLnBvcnR9JHt0aGlzLmJhc2V9YDtcbiAgICBsZXQgcmVtYWluaW5nVXJsID0gJyc7XG4gICAgaWYgKChuZXcgUmVnRXhwKCdeLycpKS50ZXN0KHVybCkpIHtcbiAgICAgIHJlbWFpbmluZ1VybCA9IHVybDtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBEaWQgbm90IGtub3cgd2hhdCB0byBkbyB3aXRoIHVybCAnJHt1cmx9J2ApO1xuICAgIH1cbiAgICByZW1haW5pbmdVcmwgPSByZW1haW5pbmdVcmwucmVwbGFjZSgvXFwvJC8sICcnKTsgLy8gY2FuJ3QgaGF2ZSB0cmFpbGluZyBzbGFzaGVzXG4gICAgcmV0dXJuIHByb3h5QmFzZSArIHJlbWFpbmluZ1VybDtcbiAgfVxufVxuXG5leHBvcnQgeyBOb1Nlc3Npb25Qcm94eSB9O1xuZXhwb3J0IGRlZmF1bHQgTm9TZXNzaW9uUHJveHk7XG4iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7OztBQUFBOztBQUdBLE1BQU1BLGNBQU4sU0FBNkJDLG1CQUE3QixDQUFxQztFQUNuQ0MsV0FBVyxDQUFFQyxJQUFJLEdBQUcsRUFBVCxFQUFhO0lBQ3RCLE1BQU1BLElBQU47RUFDRDs7RUFFREMsY0FBYyxDQUFFQyxHQUFGLEVBQU87SUFDbkIsSUFBSUEsR0FBRyxLQUFLLEVBQVosRUFBZ0I7TUFDZEEsR0FBRyxHQUFHLEdBQU47SUFDRDs7SUFDRCxNQUFNQyxTQUFTLEdBQUksR0FBRSxLQUFLQyxNQUFPLE1BQUssS0FBS0MsTUFBTyxJQUFHLEtBQUtDLElBQUssR0FBRSxLQUFLQyxJQUFLLEVBQTNFO0lBQ0EsSUFBSUMsWUFBWSxHQUFHLEVBQW5COztJQUNBLElBQUssSUFBSUMsTUFBSixDQUFXLElBQVgsQ0FBRCxDQUFtQkMsSUFBbkIsQ0FBd0JSLEdBQXhCLENBQUosRUFBa0M7TUFDaENNLFlBQVksR0FBR04sR0FBZjtJQUNELENBRkQsTUFFTztNQUNMLE1BQU0sSUFBSVMsS0FBSixDQUFXLHFDQUFvQ1QsR0FBSSxHQUFuRCxDQUFOO0lBQ0Q7O0lBQ0RNLFlBQVksR0FBR0EsWUFBWSxDQUFDSSxPQUFiLENBQXFCLEtBQXJCLEVBQTRCLEVBQTVCLENBQWY7SUFDQSxPQUFPVCxTQUFTLEdBQUdLLFlBQW5CO0VBQ0Q7O0FBbEJrQzs7O2VBc0J0QlgsYyJ9
|
package/build/lib/utils.js
CHANGED
|
@@ -314,4 +314,4 @@ async function getPIDsListeningOnPort(port, filteringFunc = null) {
|
|
|
314
314
|
}require('source-map-support').install();
|
|
315
315
|
|
|
316
316
|
|
|
317
|
-
//# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImxpYi91dGlscy5qcyJdLCJuYW1lcyI6WyJST09UX0RJUiIsInBhdGgiLCJiYXNlbmFtZSIsIl9fZGlybmFtZSIsInJlc29sdmUiLCJwcm9jZXNzIiwiZW52IiwiTk9fUFJFQ09NUElMRSIsIlBST0pFQ1RfRklMRSIsImdldFBJRHNVc2luZ1BhdHRlcm4iLCJwYXR0ZXJuIiwiYXJncyIsInN0ZG91dCIsInNwbGl0IiwibWFwIiwieCIsInBhcnNlSW50IiwiZmlsdGVyIiwiXyIsImlzSW50ZWdlciIsImVyciIsImxvZyIsImRlYnVnIiwiam9pbiIsImNvZGUiLCJraWxsQXBwVXNpbmdQYXR0ZXJuIiwicGdyZXBQYXR0ZXJuIiwic2lnbmFscyIsInNpZ25hbCIsIm1hdGNoZWRQaWRzIiwiaXNFbXB0eSIsIm1lc3NhZ2UiLCJsYXN0IiwicGlkQ2hlY2tQcm9taXNlcyIsInBpZCIsInRoZW4iLCJjYXRjaCIsIkIiLCJhbGwiLCJldmVyeSIsIndhaXRNcyIsImludGVydmFsTXMiLCJpZ24iLCJpc1R2T1MiLCJwbGF0Zm9ybU5hbWUiLCJ0b0xvd2VyIiwiUExBVEZPUk1fTkFNRV9UVk9TIiwicmVwbGFjZUluRmlsZSIsImZpbGUiLCJmaW5kIiwicmVwbGFjZSIsImNvbnRlbnRzIiwiZnMiLCJyZWFkRmlsZSIsIm5ld0NvbnRlbnRzIiwid3JpdGVGaWxlIiwidXBkYXRlUHJvamVjdEZpbGUiLCJhZ2VudFBhdGgiLCJuZXdCdW5kbGVJZCIsInByb2plY3RGaWxlUGF0aCIsImNvcHlGaWxlIiwiUmVnRXhwIiwiZXNjYXBlUmVnRXhwIiwiV0RBX1JVTk5FUl9CVU5ETEVfSUQiLCJ3YXJuIiwicmVzZXRQcm9qZWN0RmlsZSIsImV4aXN0cyIsIm12Iiwic2V0UmVhbERldmljZVNlY3VyaXR5Iiwia2V5Y2hhaW5QYXRoIiwia2V5Y2hhaW5QYXNzd29yZCIsImdlbmVyYXRlWGNvZGVDb25maWdGaWxlIiwib3JnSWQiLCJzaWduaW5nSWQiLCJ4Y2NvbmZpZ1BhdGgiLCJ0ZW1wRGlyIiwic2V0WGN0ZXN0cnVuRmlsZSIsImRldmljZUluZm8iLCJzZGtWZXJzaW9uIiwiYm9vdHN0cmFwUGF0aCIsIndkYVJlbW90ZVBvcnQiLCJ4Y3Rlc3RydW5GaWxlUGF0aCIsImdldFhjdGVzdHJ1bkZpbGVQYXRoIiwieGN0ZXN0UnVuQ29udGVudCIsInBsaXN0IiwicGFyc2VQbGlzdEZpbGUiLCJ1cGRhdGVXREFQb3J0IiwiZ2V0QWRkaXRpb25hbFJ1bkNvbnRlbnQiLCJuZXdYY3Rlc3RSdW5Db250ZW50IiwibWVyZ2UiLCJ1cGRhdGVQbGlzdEZpbGUiLCJydW5uZXIiLCJFbnZpcm9ubWVudFZhcmlhYmxlcyIsIlVTRV9QT1JUIiwic2RrQmFzZWQiLCJ1ZGlkIiwicGxhdGZvcm1CYXNlZCIsInBsYXRmb3JtVmVyc2lvbiIsImZpbGVQYXRoIiwidmVyc2lvbiIsImluZm8iLCJvcmlnaW5hbFhjdGVzdHJ1bkZpbGUiLCJnZXRYY3Rlc3RydW5GaWxlTmFtZSIsImVycm9yQW5kVGhyb3ciLCJpc1JlYWxEZXZpY2UiLCJraWxsUHJvY2VzcyIsIm5hbWUiLCJwcm9jIiwiaXNSdW5uaW5nIiwic3RvcCIsImluY2x1ZGVzIiwicmFuZG9tSW50IiwibG93IiwiaGlnaCIsIk1hdGgiLCJmbG9vciIsInJhbmRvbSIsImdldFdEQVVwZ3JhZGVUaW1lc3RhbXAiLCJwYWNrYWdlTWFuaWZlc3QiLCJtdGltZSIsInN0YXQiLCJnZXRUaW1lIiwicmVzZXRUZXN0UHJvY2Vzc2VzIiwiaXNTaW11bGF0b3IiLCJwcm9jZXNzUGF0dGVybnMiLCJwdXNoIiwiZ2V0UElEc0xpc3RlbmluZ09uUG9ydCIsInBvcnQiLCJmaWx0ZXJpbmdGdW5jIiwicmVzdWx0IiwidHJpbSIsImUiLCJzdGRlcnIiLCJpc0Z1bmN0aW9uIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQUE7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBRUEsTUFBTUEsUUFBUSxHQUFHQyxjQUFLQyxR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QUFDLENBQUMzRyxJQUFGLEtBQVcsQ0FBZixFQUFrQjtBQUVoQixlQUFPLEtBQVA7QUFDRDs7QUFDRCxZQUFNMkcsQ0FBTjtBQUNEOztBQUNELFdBQU8sTUFBTUgsYUFBYSxDQUFDcEgsTUFBRCxDQUExQjtBQUNELEdBWlksQ0FBYjtBQWFEIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgZnMsIHRlbXBEaXIsIHBsaXN0IH0gZnJvbSAnQGFwcGl1bS9zdXBwb3J0JztcbmltcG9ydCB7IGV4ZWMgfSBmcm9tICd0ZWVuX3Byb2Nlc3MnO1xuaW1wb3J0IHBhdGggZnJvbSAncGF0aCc7XG5pbXBvcnQgbG9nIGZyb20gJy4vbG9nZ2VyJztcbmltcG9ydCBfIGZyb20gJ2xvZGFzaCc7XG5pbXBvcnQgeyBXREFfUlVOTkVSX0JVTkRMRV9JRCwgUExBVEZPUk1fTkFNRV9UVk9TIH0gZnJvbSAnLi9jb25zdGFudHMnO1xuaW1wb3J0IEIgZnJvbSAnYmx1ZWJpcmQnO1xuaW1wb3J0IHsgd2FpdEZvckNvbmRpdGlvbiB9IGZyb20gJ2FzeW5jYm94JztcblxuY29uc3QgUk9PVF9ESVIgPSBwYXRoLmJhc2VuYW1lKF9fZGlybmFtZSkgPT09ICdsaWInXG4gID8gcGF0aC5yZXNvbHZlKF9fZGlybmFtZSwgcHJvY2Vzcy5lbnYuTk9fUFJFQ09NUElMRSA/ICcuLicgOiAnLi4vLi4nKVxuICA6IF9fZGlybmFtZTtcbmNvbnN0IFBST0pFQ1RfRklMRSA9ICdwcm9qZWN0LnBieHByb2onO1xuXG5hc3luYyBmdW5jdGlvbiBnZXRQSURzVXNpbmdQYXR0ZXJuIChwYXR0ZXJuKSB7XG4gIGNvbnN0IGFyZ3MgPSBbXG4gICAgJy1pZicsIC8vIGNhc2UgaW5zZW5zaXRpdmUsIGZ1bGwgY21kbGluZSBtYXRjaFxuICAgIHBhdHRlcm4sXG4gIF07XG4gIHRyeSB7XG4gICAgY29uc3Qge3N0ZG91dH0gPSBhd2FpdCBleGVjKCdwZ3JlcCcsIGFyZ3MpO1xuICAgIHJldHVybiBzdGRvdXQuc3BsaXQoL1xccysvKVxuICAgICAgLm1hcCgoeCkgPT4gcGFyc2VJbnQoeCwgMTApKVxuICAgICAgLmZpbHRlcihfLmlzSW50ZWdlcilcbiAgICAgIC5tYXAoKHgpID0+IGAke3h9YCk7XG4gIH0gY2F0Y2ggKGVycikge1xuICAgIGxvZy5kZWJ1ZyhgJ3BncmVwICR7YXJncy5qb2luKCcgJyl9JyBkaWRuJ3QgZGV0ZWN0IGFueSBtYXRjaGluZyBwcm9jZXNzZXMuIFJldHVybiBjb2RlOiAke2Vyci5jb2RlfWApO1xuICAgIHJldHVybiBbXTtcbiAgfVxufVxuXG5hc3luYyBmdW5jdGlvbiBraWxsQXBwVXNpbmdQYXR0ZXJuIChwZ3JlcFBhdHRlcm4pIHtcbiAgY29uc3Qgc2lnbmFscyA9IFsyLCAxNSwgOV07XG4gIGZvciAoY29uc3Qgc2lnbmFsIG9mIHNpZ25hbHMpIHtcbiAgICBjb25zdCBtYXRjaGVkUGlkcyA9IGF3YWl0IGdldFBJRHNVc2luZ1BhdHRlcm4ocGdyZXBQYXR0ZXJuKTtcbiAgICBpZiAoXy5pc0VtcHR5KG1hdGNoZWRQaWRzKSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBjb25zdCBhcmdzID0gW2AtJHtzaWduYWx9YCwgLi4ubWF0Y2hlZFBpZHNdO1xuICAgIHRyeSB7XG4gICAgICBhd2FpdCBleGVjKCdraWxsJywgYXJncyk7XG4gICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICBsb2cuZGVidWcoYGtpbGwgJHthcmdzLmpvaW4oJyAnKX0gLT4gJHtlcnIubWVzc2FnZX1gKTtcbiAgICB9XG4gICAgaWYgKHNpZ25hbCA9PT0gXy5sYXN0KHNpZ25hbHMpKSB7XG4gICAgICAvLyB0aGVyZSBpcyBubyBuZWVkIHRvIHdhaXQgYWZ0ZXIgU0lHS0lMTFxuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICB0cnkge1xuICAgICAgYXdhaXQgd2FpdEZvckNvbmRpdGlvbihhc3luYyAoKSA9PiB7XG4gICAgICAgIGNvbnN0IHBpZENoZWNrUHJvbWlzZXMgPSBtYXRjaGVkUGlkc1xuICAgICAgICAgIC5tYXAoKHBpZCkgPT4gZXhlYygna2lsbCcsIFsnLTAnLCBwaWRdKVxuICAgICAgICAgICAgLy8gdGhlIHByb2Nlc3MgaXMgc3RpbGwgYWxpdmVcbiAgICAgICAgICAgIC50aGVuKCgpID0+IGZhbHNlKVxuICAgICAgICAgICAgLy8gdGhlIHByb2Nlc3MgaXMgZGVhZFxuICAgICAgICAgICAgLmNhdGNoKCgpID0+IHRydWUpXG4gICAgICAgICAgKTtcbiAgICAgICAgcmV0dXJuIChhd2FpdCBCLmFsbChwaWRDaGVja1Byb21pc2VzKSlcbiAgICAgICAgICAuZXZlcnkoKHgpID0+IHggPT09IHRydWUpO1xuICAgICAgfSwge1xuICAgICAgICB3YWl0TXM6IDEwMDAsXG4gICAgICAgIGludGVydmFsTXM6IDEwMCxcbiAgICAgIH0pO1xuICAgICAgcmV0dXJuO1xuICAgIH0gY2F0Y2ggKGlnbikge1xuICAgICAgLy8gdHJ5IHRoZSBuZXh0IHNpZ25hbFxuICAgIH1cbiAgfVxufVxuXG4vKipcbiAqIFJldHVybiB0cnVlIGlmIHRoZSBwbGF0Zm9ybU5hbWUgaXMgdHZPU1xuICogQHBhcmFtIHtzdHJpbmd9IHBsYXRmb3JtTmFtZSBUaGUgbmFtZSBvZiB0aGUgcGxhdG9ybVxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybiB0cnVlIGlmIHRoZSBwbGF0Zm9ybU5hbWUgaXMgdHZPU1xuICovXG5mdW5jdGlvbiBpc1R2T1MgKHBsYXRmb3JtTmFtZSkge1xuICByZXR1cm4gXy50b0xvd2VyKHBsYXRmb3JtTmFtZSkgPT09IF8udG9Mb3dlcihQTEFURk9STV9OQU1FX1RWT1MpO1xufVxuXG5hc3luYyBmdW5jdGlvbiByZXBsYWNlSW5GaWxlIChmaWxlLCBmaW5kLCByZXBsYWNlKSB7XG4gIGxldCBjb250ZW50cyA9IGF3YWl0IGZzLnJlYWRGaWxlKGZpbGUsICd1dGY4Jyk7XG5cbiAgbGV0IG5ld0NvbnRlbnRzID0gY29udGVudHMucmVwbGFjZShmaW5kLCByZXBsYWNlKTtcbiAgaWYgKG5ld0NvbnRlbnRzICE9PSBjb250ZW50cykge1xuICAgIGF3YWl0IGZzLndyaXRlRmlsZShmaWxlLCBuZXdDb250ZW50cywgJ3V0ZjgnKTtcbiAgfVxufVxuXG4vKipcbiAqIFVwZGF0ZSBXZWJEcml2ZXJBZ2VudFJ1bm5lciBwcm9qZWN0IGJ1bmRsZSBJRCB3aXRoIG5ld0J1bmRsZUlkLlxuICogVGhpcyBtZXRob2QgYXNzdW1lcyBwcm9qZWN0IGZpbGUgaXMgaW4gdGhlIGNvcnJlY3Qgc3RhdGUuXG4gKiBAcGFyYW0ge3N0cmluZ30gYWdlbnRQYXRoIC0gUGF0aCB0byB0aGUgLnhjb2RlcHJvaiBkaXJlY3RvcnkuXG4gKiBAcGFyYW0ge3N0cmluZ30gbmV3QnVuZGxlSWQgdGhlIG5ldyBidW5kbGUgSUQgdXNlZCB0byB1cGRhdGUuXG4gKi9cbmFzeW5jIGZ1bmN0aW9uIHVwZGF0ZVByb2plY3RGaWxlIChhZ2VudFBhdGgsIG5ld0J1bmRsZUlkKSB7XG4gIGxldCBwcm9qZWN0RmlsZVBhdGggPSBwYXRoLnJlc29sdmUoYWdlbnRQYXRoLCBQUk9KRUNUX0ZJTEUpO1xuICB0cnkge1xuICAgIC8vIEFzc3VtaW5nIHByb2plY3RGaWxlUGF0aCBpcyBpbiB0aGUgY29ycmVjdCBzdGF0ZSwgY3JlYXRlIC5vbGQgZnJvbSBwcm9qZWN0RmlsZVBhdGhcbiAgICBhd2FpdCBmcy5jb3B5RmlsZShwcm9qZWN0RmlsZVBhdGgsIGAke3Byb2plY3RGaWxlUGF0aH0ub2xkYCk7XG4gICAgYXdhaXQgcmVwbGFjZUluRmlsZShwcm9qZWN0RmlsZVBhdGgsIG5ldyBSZWdFeHAoXy5lc2NhcGVSZWdFeHAoV0RBX1JVTk5FUl9CVU5ETEVfSUQpLCAnZycpLCBuZXdCdW5kbGVJZCk7IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8tdXNlbGVzcy1lc2NhcGVcbiAgICBsb2cuZGVidWcoYFN1Y2Nlc3NmdWxseSB1cGRhdGVkICcke3Byb2plY3RGaWxlUGF0aH0nIHdpdGggYnVuZGxlIGlkICcke25ld0J1bmRsZUlkfSdgKTtcbiAgfSBjYXRjaCAoZXJyKSB7XG4gICAgbG9nLmRlYnVnKGBFcnJvciB1cGRhdGluZyBwcm9qZWN0IGZpbGU6ICR7ZXJyLm1lc3NhZ2V9YCk7XG4gICAgbG9nLndhcm4oYFVuYWJsZSB0byB1cGRhdGUgcHJvamVjdCBmaWxlICcke3Byb2plY3RGaWxlUGF0aH0nIHdpdGggYCArXG4gICAgICBgYnVuZGxlIGlkICcke25ld0J1bmRsZUlkfScuIFdlYkRyaXZlckFnZW50IG1heSBub3Qgc3RhcnRgKTtcbiAgfVxufVxuXG4vKipcbiAqIFJlc2V0IFdlYkRyaXZlckFnZW50UnVubmVyIHByb2plY3QgYnVuZGxlIElEIHRvIGNvcnJlY3Qgc3RhdGUuXG4gKiBAcGFyYW0ge3N0cmluZ30gYWdlbnRQYXRoIC0gUGF0aCB0byB0aGUgLnhjb2RlcHJvaiBkaXJlY3RvcnkuXG4gKi9cbmFzeW5jIGZ1bmN0aW9uIHJlc2V0UHJvamVjdEZpbGUgKGFnZW50UGF0aCkge1xuICBjb25zdCBwcm9qZWN0RmlsZVBhdGggPSBwYXRoLmpvaW4oYWdlbnRQYXRoLCBQUk9KRUNUX0ZJTEUpO1xuICB0cnkge1xuICAgIC8vIHJlc3RvcmUgcHJvamVjdEZpbGVQYXRoIGZyb20gLm9sZCBmaWxlXG4gICAgaWYgKCFhd2FpdCBmcy5leGlzdHMoYCR7cHJvamVjdEZpbGVQYXRofS5vbGRgKSkge1xuICAgICAgcmV0dXJuOyAvLyBubyBuZWVkIHRvIHJlc2V0XG4gICAgfVxuICAgIGF3YWl0IGZzLm12KGAke3Byb2plY3RGaWxlUGF0aH0ub2xkYCwgcHJvamVjdEZpbGVQYXRoKTtcbiAgICBsb2cuZGVidWcoYFN1Y2Nlc3NmdWxseSByZXNldCAnJHtwcm9qZWN0RmlsZVBhdGh9JyB3aXRoIGJ1bmRsZSBpZCAnJHtXREFfUlVOTkVSX0JVTkRMRV9JRH0nYCk7XG4gIH0gY2F0Y2ggKGVycikge1xuICAgIGxvZy5kZWJ1ZyhgRXJyb3IgcmVzZXR0aW5nIHByb2plY3QgZmlsZTogJHtlcnIubWVzc2FnZX1gKTtcbiAgICBsb2cud2FybihgVW5hYmxlIHRvIHJlc2V0IHByb2plY3QgZmlsZSAnJHtwcm9qZWN0RmlsZVBhdGh9JyB3aXRoIGAgK1xuICAgICAgYGJ1bmRsZSBpZCAnJHtXREFfUlVOTkVSX0JVTkRMRV9JRH0nLiBXZWJEcml2ZXJBZ2VudCBoYXMgYmVlbiBgICtcbiAgICAgIGBtb2RpZmllZCBhbmQgbm90IHJldHVybmVkIHRvIHRoZSBvcmlnaW5hbCBzdGF0ZS5gKTtcbiAgfVxufVxuXG5hc3luYyBmdW5jdGlvbiBzZXRSZWFsRGV2aWNlU2VjdXJpdHkgKGtleWNoYWluUGF0aCwga2V5Y2hhaW5QYXNzd29yZCkge1xuICBsb2cuZGVidWcoJ1NldHRpbmcgc2VjdXJpdHkgZm9yIGlPUyBkZXZpY2UnKTtcbiAgYXdhaXQgZXhlYygnc2VjdXJpdHknLCBbJy12JywgJ2xpc3Qta2V5Y2hhaW5zJywgJy1zJywga2V5Y2hhaW5QYXRoXSk7XG4gIGF3YWl0IGV4ZWMoJ3NlY3VyaXR5JywgWyctdicsICd1bmxvY2sta2V5Y2hhaW4nLCAnLXAnLCBrZXljaGFpblBhc3N3b3JkLCBrZXljaGFpblBhdGhdKTtcbiAgYXdhaXQgZXhlYygnc2VjdXJpdHknLCBbJ3NldC1rZXljaGFpbi1zZXR0aW5ncycsICctdCcsICczNjAwJywgJy1sJywga2V5Y2hhaW5QYXRoXSk7XG59XG5cbmFzeW5jIGZ1bmN0aW9uIGdlbmVyYXRlWGNvZGVDb25maWdGaWxlIChvcmdJZCwgc2lnbmluZ0lkKSB7XG4gIGxvZy5kZWJ1ZyhgR2VuZXJhdGluZyB4Y29kZSBjb25maWcgZmlsZSBmb3Igb3JnSWQgJyR7b3JnSWR9JyBhbmQgc2lnbmluZ0lkIGAgK1xuICAgICAgICAgICAgYCcke3NpZ25pbmdJZH0nYCk7XG4gIGNvbnN0IGNvbnRlbnRzID0gYERFVkVMT1BNRU5UX1RFQU0gPSAke29yZ0lkfVxuQ09ERV9TSUdOX0lERU5USVRZID0gJHtzaWduaW5nSWR9XG5gO1xuICBjb25zdCB4Y2NvbmZpZ1BhdGggPSBhd2FpdCB0ZW1wRGlyLnBhdGgoJ2FwcGl1bS10ZW1wLnhjY29uZmlnJyk7XG4gIGxvZy5kZWJ1ZyhgV3JpdGluZyB4Y29kZSBjb25maWcgZmlsZSB0byAke3hjY29uZmlnUGF0aH1gKTtcbiAgYXdhaXQgZnMud3JpdGVGaWxlKHhjY29uZmlnUGF0aCwgY29udGVudHMsICd1dGY4Jyk7XG4gIHJldHVybiB4Y2NvbmZpZ1BhdGg7XG59XG5cbi8qKlxuICogSW5mb3JtYXRpb24gb2YgdGhlIGRldmljZSB1bmRlciB0ZXN0XG4gKiBAdHlwZWRlZiB7T2JqZWN0fSBEZXZpY2VJbmZvXG4gKiBAcHJvcGVydHkge3N0cmluZ30gaXNSZWFsRGV2aWNlIC0gRXF1YWxzIHRvIHRydWUgaWYgdGhlIGN1cnJlbnQgZGV2aWNlIGlzIGEgcmVhbCBkZXZpY2VcbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSB1ZGlkIC0gVGhlIGRldmljZSBVRElELlxuICogQHByb3BlcnR5IHtzdHJpbmd9IHBsYXRmb3JtVmVyc2lvbiAtIFRoZSBwbGF0Zm9ybSB2ZXJzaW9uIG9mIE9TLlxuICogQHByb3BlcnR5IHtzdHJpbmd9IHBsYXRmb3JtTmFtZSAtIFRoZSBwbGF0Zm9ybSBuYW1lIG9mIGlPUywgdHZPU1xuKi9cbi8qKlxuICogQ3JlYXRlcyB4Y3Rlc3RydW4gZmlsZSBwZXIgZGV2aWNlICYgcGxhdGZvcm0gdmVyc2lvbi5cbiAqIFdlIGV4cGVjdHMgdG8gaGF2ZSBXZWJEcml2ZXJBZ2VudFJ1bm5lcl9pcGhvbmVvcyR7c2RrVmVyc2lvbnxwbGF0Zm9ybVZlcnNpb259LWFybTY0LnhjdGVzdHJ1biBmb3IgcmVhbCBkZXZpY2VcbiAqIGFuZCBXZWJEcml2ZXJBZ2VudFJ1bm5lcl9pcGhvbmVzaW11bGF0b3Ike3Nka1ZlcnNpb258cGxhdGZvcm1WZXJzaW9ufS14ODZfNjQueGN0ZXN0cnVuIGZvciBzaW11bGF0b3IgbG9jYXRlZCBAYm9vdHN0cmFwUGF0aFxuICogTmV3ZXIgWGNvZGUgKFhjb2RlIDEwLjAgYXQgbGVhc3QpIGdlbmVyYXRlIHhjdGVzdHJ1biBmaWxlIGZvbGxvd2luZyBzZGtWZXJzaW9uLlxuICogZS5nLiBYY29kZSB3aGljaCBoYXMgaU9TIFNESyBWZXJzaW9uIDEyLjIgZ2VuZXJhdGUgV2ViRHJpdmVyQWdlbnRSdW5uZXJfaXBob25lc2ltdWxhdG9yLjIteDg2XzY0LnhjdGVzdHJ1blxuICogICAgICBldmVuIGlmIHRoZSBjYXAgaGFzIHBsYXRmb3JtIHZlcnNpb24gMTEuNFxuICpcbiAqIEBwYXJhbSB7RGV2aWNlSW5mb30gZGV2aWNlSW5mb1xuICogQHBhcmFtIHtzdHJpbmd9IHNka1ZlcnNpb24gLSBUaGUgWGNvZGUgU0RLIHZlcnNpb24gb2YgT1MuXG4gKiBAcGFyYW0ge3N0cmluZ30gYm9vdHN0cmFwUGF0aCAtIFRoZSBmb2xkZXIgcGF0aCBjb250YWluaW5nIHhjdGVzdHJ1biBmaWxlLlxuICogQHBhcmFtIHtzdHJpbmd9IHdkYVJlbW90ZVBvcnQgLSBUaGUgcmVtb3RlIHBvcnQgV0RBIGlzIGxpc3RlbmluZyBvbi5cbiAqIEByZXR1cm4ge3N0cmluZ30gcmV0dXJucyB4Y3Rlc3RydW5GaWxlUGF0aCBmb3IgZ2l2ZW4gZGV2aWNlXG4gKiBAdGhyb3dzIGlmIFdlYkRyaXZlckFnZW50UnVubmVyX2lwaG9uZW9zJHtzZGtWZXJzaW9ufHBsYXRmb3JtVmVyc2lvbn0tYXJtNjQueGN0ZXN0cnVuIGZvciByZWFsIGRldmljZVxuICogb3IgV2ViRHJpdmVyQWdlbnRSdW5uZXJfaXBob25lc2ltdWxhdG9yJHtzZGtWZXJzaW9ufHBsYXRmb3JtVmVyc2lvbn0teDg2XzY0LnhjdGVzdHJ1biBmb3Igc2ltdWxhdG9yIGlzIG5vdCBmb3VuZCBAYm9vdHN0cmFwUGF0aCxcbiAqIHRoZW4gaXQgd2lsbCB0aHJvdyBmaWxlIG5vdCBmb3VuZCBleGNlcHRpb25cbiAqL1xuYXN5bmMgZnVuY3Rpb24gc2V0WGN0ZXN0cnVuRmlsZSAoZGV2aWNlSW5mbywgc2RrVmVyc2lvbiwgYm9vdHN0cmFwUGF0aCwgd2RhUmVtb3RlUG9ydCkge1xuICBjb25zdCB4Y3Rlc3RydW5GaWxlUGF0aCA9IGF3YWl0IGdldFhjdGVzdHJ1bkZpbGVQYXRoKGRldmljZUluZm8sIHNka1ZlcnNpb24sIGJvb3RzdHJhcFBhdGgpO1xuICBjb25zdCB4Y3Rlc3RSdW5Db250ZW50ID0gYXdhaXQgcGxpc3QucGFyc2VQbGlzdEZpbGUoeGN0ZXN0cnVuRmlsZVBhdGgpO1xuICBjb25zdCB1cGRhdGVXREFQb3J0ID0gZ2V0QWRkaXRpb25hbFJ1bkNvbnRlbnQoZGV2aWNlSW5mby5wbGF0Zm9ybU5hbWUsIHdkYVJlbW90ZVBvcnQpO1xuICBjb25zdCBuZXdYY3Rlc3RSdW5Db250ZW50ID0gXy5tZXJnZSh4Y3Rlc3RSdW5Db250ZW50LCB1cGRhdGVXREFQb3J0KTtcbiAgYXdhaXQgcGxpc3QudXBkYXRlUGxpc3RGaWxlKHhjdGVzdHJ1bkZpbGVQYXRoLCBuZXdYY3Rlc3RSdW5Db250ZW50LCB0cnVlKTtcblxuICByZXR1cm4geGN0ZXN0cnVuRmlsZVBhdGg7XG59XG5cbi8qKlxuICogUmV0dXJuIHRoZSBXREEgb2JqZWN0IHdoaWNoIGFwcGVuZHMgZXhpc3RpbmcgeGN0ZXN0IHJ1bm5lciBjb250ZW50XG4gKiBAcGFyYW0ge3N0cmluZ30gcGxhdGZvcm1OYW1lIC0gVGhlIG5hbWUgb2YgdGhlIHBsYXRmb3JtXG4gKiBAcGFyYW0ge3N0cmluZ30gdmVyc2lvbiAtIFRoZSBYY29kZSBTREsgdmVyc2lvbiBvZiBPUy5cbiAqIEByZXR1cm4ge29iamVjdH0gcmV0dXJucyBhIHJ1bm5lciBvYmplY3Qgd2hpY2ggaGFzIFVTRV9QT1JUXG4gKi9cbmZ1bmN0aW9uIGdldEFkZGl0aW9uYWxSdW5Db250ZW50IChwbGF0Zm9ybU5hbWUsIHdkYVJlbW90ZVBvcnQpIHtcbiAgY29uc3QgcnVubmVyID0gYFdlYkRyaXZlckFnZW50UnVubmVyJHtpc1R2T1MocGxhdGZvcm1OYW1lKSA/ICdfdHZPUycgOiAnJ31gO1xuXG4gIHJldHVybiB7XG4gICAgW3J1bm5lcl06IHtcbiAgICAgIEVudmlyb25tZW50VmFyaWFibGVzOiB7XG4gICAgICAgIC8vIFVTRV9QT1JUIG11c3QgYmUgJ3N0cmluZydcbiAgICAgICAgVVNFX1BPUlQ6IGAke3dkYVJlbW90ZVBvcnR9YFxuICAgICAgfVxuICAgIH1cbiAgfTtcbn1cblxuLyoqXG4gKiBSZXR1cm4gdGhlIHBhdGggb2YgeGN0ZXN0cnVuIGlmIGl0IGV4aXN0c1xuICogQHBhcmFtIHtEZXZpY2VJbmZvfSBkZXZpY2VJbmZvXG4gKiBAcGFyYW0ge3N0cmluZ30gc2RrVmVyc2lvbiAtIFRoZSBYY29kZSBTREsgdmVyc2lvbiBvZiBPUy5cbiAqIEBwYXJhbSB7c3RyaW5nfSBib290c3RyYXBQYXRoIC0gVGhlIGZvbGRlciBwYXRoIGNvbnRhaW5pbmcgeGN0ZXN0cnVuIGZpbGUuXG4gKi9cbmFzeW5jIGZ1bmN0aW9uIGdldFhjdGVzdHJ1bkZpbGVQYXRoIChkZXZpY2VJbmZvLCBzZGtWZXJzaW9uLCBib290c3RyYXBQYXRoKSB7XG4gIC8vIEZpcnN0IHRyeSB0aGUgU0RLIHBhdGgsIGZvciBYY29kZSAxMCAoYXQgbGVhc3QpXG4gIGNvbnN0IHNka0Jhc2VkID0gW1xuICAgIHBhdGgucmVzb2x2ZShib290c3RyYXBQYXRoLCBgJHtkZXZpY2VJbmZvLnVkaWR9XyR7c2RrVmVyc2lvbn0ueGN0ZXN0cnVuYCksXG4gICAgc2RrVmVyc2lvbixcbiAgXTtcbiAgLy8gTmV4dCB0cnkgUGxhdGZvcm0gcGF0aCwgZm9yIGVhcmxpZXIgWGNvZGUgdmVyc2lvbnNcbiAgY29uc3QgcGxhdGZvcm1CYXNlZCA9IFtcbiAgICBwYXRoLnJlc29sdmUoYm9vdHN0cmFwUGF0aCwgYCR7ZGV2aWNlSW5mby51ZGlkfV8ke2RldmljZUluZm8ucGxhdGZvcm1WZXJzaW9ufS54Y3Rlc3RydW5gKSxcbiAgICBkZXZpY2VJbmZvLnBsYXRmb3JtVmVyc2lvbixcbiAgXTtcblxuICBmb3IgKGNvbnN0IFtmaWxlUGF0aCwgdmVyc2lvbl0gb2YgW3Nka0Jhc2VkLCBwbGF0Zm9ybUJhc2VkXSkge1xuICAgIGlmIChhd2FpdCBmcy5leGlzdHMoZmlsZVBhdGgpKSB7XG4gICAgICBsb2cuaW5mbyhgVXNpbmcgJyR7ZmlsZVBhdGh9JyBhcyB4Y3Rlc3RydW4gZmlsZWApO1xuICAgICAgcmV0dXJuIGZpbGVQYXRoO1xuICAgIH1cbiAgICBjb25zdCBvcmlnaW5hbFhjdGVzdHJ1bkZpbGUgPSBwYXRoLnJlc29sdmUoYm9vdHN0cmFwUGF0aCwgZ2V0WGN0ZXN0cnVuRmlsZU5hbWUoZGV2aWNlSW5mbywgdmVyc2lvbikpO1xuICAgIGlmIChhd2FpdCBmcy5leGlzdHMob3JpZ2luYWxYY3Rlc3RydW5GaWxlKSkge1xuICAgICAgLy8gSWYgdGhpcyBpcyBmaXJzdCB0aW1lIHJ1biBmb3IgZ2l2ZW4gZGV2aWNlLCB0aGVuIGZpcnN0IGdlbmVyYXRlIHhjdGVzdHJ1biBmaWxlIGZvciBkZXZpY2UuXG4gICAgICAvLyBXZSBuZWVkIHRvIGhhdmUgYSB4Y3Rlc3RydW4gZmlsZSAqKnBlciBkZXZpY2UqKiBiZWNhdXNlIHdlIGNhbnQgbm90IGhhdmUgc2FtZSB3ZGEgcG9ydCBmb3IgYWxsIGRldmljZXMuXG4gICAgICBhd2FpdCBmcy5jb3B5RmlsZShvcmlnaW5hbFhjdGVzdHJ1bkZpbGUsIGZpbGVQYXRoKTtcbiAgICAgIGxvZy5pbmZvKGBVc2luZyAnJHtmaWxlUGF0aH0nIGFzIHhjdGVzdHJ1biBmaWxlIGNvcGllZCBieSAnJHtvcmlnaW5hbFhjdGVzdHJ1bkZpbGV9J2ApO1xuICAgICAgcmV0dXJuIGZpbGVQYXRoO1xuICAgIH1cbiAgfVxuXG4gIGxvZy5lcnJvckFuZFRocm93KGBJZiB5b3UgYXJlIHVzaW5nICd1c2VYY3Rlc3RydW5GaWxlJyBjYXBhYmlsaXR5IHRoZW4geW91IGAgK1xuICAgIGBuZWVkIHRvIGhhdmUgYSB4Y3Rlc3RydW4gZmlsZSAoZXhwZWN0ZWQ6IGAgK1xuICAgIGAnJHtwYXRoLnJlc29sdmUoYm9vdHN0cmFwUGF0aCwgZ2V0WGN0ZXN0cnVuRmlsZU5hbWUoZGV2aWNlSW5mbywgc2RrVmVyc2lvbikpfScpYCk7XG59XG5cblxuLyoqXG4gKiBSZXR1cm4gdGhlIG5hbWUgb2YgeGN0ZXN0cnVuIGZpbGVcbiAqIEBwYXJhbSB7RGV2aWNlSW5mb30gZGV2aWNlSW5mb1xuICogQHBhcmFtIHtzdHJpbmd9IHZlcnNpb24gLSBUaGUgWGNvZGUgU0RLIHZlcnNpb24gb2YgT1MuXG4gKiBAcmV0dXJuIHtzdHJpbmd9IHJldHVybnMgeGN0ZXN0cnVuRmlsZVBhdGggZm9yIGdpdmVuIGRldmljZVxuICovXG5mdW5jdGlvbiBnZXRYY3Rlc3RydW5GaWxlTmFtZSAoZGV2aWNlSW5mbywgdmVyc2lvbikge1xuICByZXR1cm4gaXNUdk9TKGRldmljZUluZm8ucGxhdGZvcm1OYW1lKVxuICAgID8gYFdlYkRyaXZlckFnZW50UnVubmVyX3R2T1NfYXBwbGV0diR7ZGV2aWNlSW5mby5pc1JlYWxEZXZpY2UgPyBgb3Mke3ZlcnNpb259LWFybTY0YCA6IGBzaW11bGF0b3Ike3ZlcnNpb259LXg4Nl82NGB9LnhjdGVzdHJ1bmBcbiAgICA6IGBXZWJEcml2ZXJBZ2VudFJ1bm5lcl9pcGhvbmUke2RldmljZUluZm8uaXNSZWFsRGV2aWNlID8gYG9zJHt2ZXJzaW9ufS1hcm02NGAgOiBgc2ltdWxhdG9yJHt2ZXJzaW9ufS14ODZfNjRgfS54Y3Rlc3RydW5gO1xufVxuXG5hc3luYyBmdW5jdGlvbiBraWxsUHJvY2VzcyAobmFtZSwgcHJvYykge1xuICBpZiAoIXByb2MgfHwgIXByb2MuaXNSdW5uaW5nKSB7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgbG9nLmluZm8oYFNodXR0aW5nIGRvd24gJyR7bmFtZX0nIHByb2Nlc3MgKHBpZCAnJHtwcm9jLnByb2MucGlkfScpYCk7XG5cbiAgbG9nLmluZm8oYFNlbmRpbmcgJ1NJR1RFUk0nLi4uYCk7XG4gIHRyeSB7XG4gICAgYXdhaXQgcHJvYy5zdG9wKCdTSUdURVJNJywgMTAwMCk7XG4gICAgcmV0dXJuO1xuICB9IGNhdGNoIChlcnIpIHtcbiAgICBpZiAoIWVyci5tZXNzYWdlLmluY2x1ZGVzKGBQcm9jZXNzIGRpZG4ndCBlbmQgYWZ0ZXJgKSkge1xuICAgICAgdGhyb3cgZXJyO1xuICAgIH1cbiAgICBsb2cuZGVidWcoYCR7bmFtZX0gcHJvY2VzcyBkaWQgbm90IGVuZCBpbiBhIHRpbWVseSBmYXNoaW9uOiAnJHtlcnIubWVzc2FnZX0nLmApO1xuICB9XG5cbiAgbG9nLmluZm8oYFNlbmRpbmcgJ1NJR0tJTEwnLi4uYCk7XG4gIHRyeSB7XG4gICAgYXdhaXQgcHJvYy5zdG9wKCdTSUdLSUxMJyk7XG4gIH0gY2F0Y2ggKGVycikge1xuICAgIGlmIChlcnIubWVzc2FnZS5pbmNsdWRlcygnbm90IGN1cnJlbnRseSBydW5uaW5nJykpIHtcbiAgICAgIC8vIHRoZSBwcm9jZXNzIGVuZGVkIGJ1dCBmb3Igc29tZSByZWFzb24gd2Ugd2VyZSBub3QgaW5mb3JtZWRcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgdGhyb3cgZXJyO1xuICB9XG59XG5cbi8qKlxuICogR2VuZXJhdGUgYSByYW5kb20gaW50ZWdlci5cbiAqXG4gKiBAcmV0dXJuIHtudW1iZXJ9IEEgcmFuZG9tIGludGVnZXIgbnVtYmVyIGluIHJhbmdlIFtsb3csIGhpZ2h0KS4gYGxvd2BgIGlzIGluY2x1c2l2ZSBhbmQgYGhpZ2hgIGlzIGV4Y2x1c2l2ZS5cbiAqL1xuZnVuY3Rpb24gcmFuZG9tSW50IChsb3csIGhpZ2gpIHtcbiAgcmV0dXJuIE1hdGguZmxvb3IoTWF0aC5yYW5kb20oKSAqIChoaWdoIC0gbG93KSArIGxvdyk7XG59XG5cbi8qKlxuICogUmV0cmlldmVzIFdEQSB1cGdyYWRlIHRpbWVzdGFtcFxuICpcbiAqIEByZXR1cm4gez9udW1iZXJ9IFRoZSBVTklYIHRpbWVzdGFtcCBvZiB0aGUgcGFja2FnZSBtYW5pZmVzdC4gVGhlIG1hbmlmZXN0IG9ubHkgZ2V0cyBtb2RpZmllZCBvblxuICogcGFja2FnZSB1cGdyYWRlLlxuICovXG5hc3luYyBmdW5jdGlvbiBnZXRXREFVcGdyYWRlVGltZXN0YW1wICgpIHtcbiAgY29uc3QgcGFja2FnZU1hbmlmZXN0ID0gcGF0aC5yZXNvbHZlKFJPT1RfRElSLCAncGFja2FnZS5qc29uJyk7XG4gIGlmICghYXdhaXQgZnMuZXhpc3RzKHBhY2thZ2VNYW5pZmVzdCkpIHtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuICBjb25zdCB7bXRpbWV9ID0gYXdhaXQgZnMuc3RhdChwYWNrYWdlTWFuaWZlc3QpO1xuICByZXR1cm4gbXRpbWUuZ2V0VGltZSgpO1xufVxuXG4vKipcbiAqIEtpbGxzIHJ1bm5pbmcgWENUZXN0IHByb2Nlc3NlcyBmb3IgdGhlIHBhcnRpY3VsYXIgZGV2aWNlLlxuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSB1ZGlkIC0gVGhlIGRldmljZSBVRElELlxuICogQHBhcmFtIHtib29sZWFufSBpc1NpbXVsYXRvciAtIEVxdWFscyB0byB0cnVlIGlmIHRoZSBjdXJyZW50IGRldmljZSBpcyBhIFNpbXVsYXRvclxuICovXG5hc3luYyBmdW5jdGlvbiByZXNldFRlc3RQcm9jZXNzZXMgKHVkaWQsIGlzU2ltdWxhdG9yKSB7XG4gIGNvbnN0IHByb2Nlc3NQYXR0ZXJucyA9IFtgeGNvZGVidWlsZC4qJHt1ZGlkfWBdO1xuICBpZiAoaXNTaW11bGF0b3IpIHtcbiAgICBwcm9jZXNzUGF0dGVybnMucHVzaChgJHt1ZGlkfS4qWENUUnVubmVyYCk7XG4gICAgLy8gVGhlIHBhdHRlcm4gdG8gZmluZCBpbiBjYXNlIGlkYiB3YXMgdXNlZFxuICAgIHByb2Nlc3NQYXR0ZXJucy5wdXNoKGB4Y3Rlc3QuKiR7dWRpZH1gKTtcbiAgfVxuICBsb2cuZGVidWcoYEtpbGxpbmcgcnVubmluZyBwcm9jZXNzZXMgJyR7cHJvY2Vzc1BhdHRlcm5zLmpvaW4oJywgJyl9JyBmb3IgdGhlIGRldmljZSAke3VkaWR9Li4uYCk7XG4gIGF3YWl0IEIuYWxsKHByb2Nlc3NQYXR0ZXJucy5tYXAoa2lsbEFwcFVzaW5nUGF0dGVybikpO1xufVxuXG4vKipcbiAqIEdldCB0aGUgSURzIG9mIHByb2Nlc3NlcyBsaXN0ZW5pbmcgb24gdGhlIHBhcnRpY3VsYXIgc3lzdGVtIHBvcnQuXG4gKiBJdCBpcyBhbHNvIHBvc3NpYmxlIHRvIGFwcGx5IGFkZGl0aW9uYWwgZmlsdGVyaW5nIGJhc2VkIG9uIHRoZVxuICogcHJvY2VzcyBjb21tYW5kIGxpbmUuXG4gKlxuICogQHBhcmFtIHtzdHJpbmd8bnVtYmVyfSBwb3J0IC0gVGhlIHBvcnQgbnVtYmVyLlxuICogQHBhcmFtIHs/RnVuY3Rpb259IGZpbHRlcmluZ0Z1bmMgLSBPcHRpb25hbCBsYW1iZGEgZnVuY3Rpb24sIHdoaWNoXG4gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlY2VpdmVzIGNvbW1hbmQgbGluZSBzdHJpbmcgb2YgdGhlIHBhcnRpY3VsYXIgcHJvY2Vzc1xuICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsaXN0ZW5pbmcgb24gZ2l2ZW4gcG9ydCwgYW5kIGlzIGV4cGVjdGVkIHRvIHJldHVyblxuICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlaXRoZXIgdHJ1ZSBvciBmYWxzZSB0byBpbmNsdWRlL2V4Y2x1ZGUgdGhlIGNvcnJlc3BvbmRpbmcgUElEXG4gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZyb20gdGhlIHJlc3VsdGluZyBhcnJheS5cbiAqIEByZXR1cm5zIHtBcnJheTxzdHJpbmc+fSAtIHRoZSBsaXN0IG9mIG1hdGNoZWQgcHJvY2VzcyBpZHMuXG4gKi9cbmFzeW5jIGZ1bmN0aW9uIGdldFBJRHNMaXN0ZW5pbmdPblBvcnQgKHBvcnQsIGZpbHRlcmluZ0Z1bmMgPSBudWxsKSB7XG4gIGNvbnN0IHJlc3VsdCA9IFtdO1xuICB0cnkge1xuICAgIC8vIFRoaXMgb25seSB3b3JrcyBzaW5jZSBNYWMgT1MgWCBFbCBDYXBpdGFuXG4gICAgY29uc3Qge3N0ZG91dH0gPSBhd2FpdCBleGVjKCdsc29mJywgWyctdGknLCBgdGNwOiR7cG9ydH1gXSk7XG4gICAgcmVzdWx0LnB1c2goLi4uKHN0ZG91dC50cmltKCkuc3BsaXQoL1xcbisvKSkpO1xuICB9IGNhdGNoIChlKSB7XG4gICAgaWYgKGUuY29kZSAhPT0gMSkge1xuICAgICAgLy8gY29kZSAxIG1lYW5zIG5vIHByb2Nlc3Nlcy4gT3RoZXIgZXJyb3JzIG5lZWQgcmVwb3J0aW5nXG4gICAgICBsb2cuZGVidWcoYEVycm9yIGdldHRpbmcgcHJvY2Vzc2VzIGxpc3RlbmluZyBvbiBwb3J0ICcke3BvcnR9JzogJHtlLnN0ZGVyciB8fCBlLm1lc3NhZ2V9YCk7XG4gICAgfVxuICAgIHJldHVybiByZXN1bHQ7XG4gIH1cblxuICBpZiAoIV8uaXNGdW5jdGlvbihmaWx0ZXJpbmdGdW5jKSkge1xuICAgIHJldHVybiByZXN1bHQ7XG4gIH1cbiAgcmV0dXJuIGF3YWl0IEIuZmlsdGVyKHJlc3VsdCwgYXN5bmMgKHBpZCkgPT4ge1xuICAgIGxldCBzdGRvdXQ7XG4gICAgdHJ5IHtcbiAgICAgICh7c3Rkb3V0fSA9IGF3YWl0IGV4ZWMoJ3BzJywgWyctcCcsIHBpZCwgJy1vJywgJ2NvbW1hbmQnXSkpO1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIGlmIChlLmNvZGUgPT09IDEpIHtcbiAgICAgICAgLy8gVGhlIHByb2Nlc3MgZG9lcyBub3QgZXhpc3QgYW55bW9yZSwgdGhlcmUncyBub3RoaW5nIHRvIGZpbHRlclxuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICB9XG4gICAgICB0aHJvdyBlO1xuICAgIH1cbiAgICByZXR1cm4gYXdhaXQgZmlsdGVyaW5nRnVuYyhzdGRvdXQpO1xuICB9KTtcbn1cblxuZXhwb3J0IHsgdXBkYXRlUHJvamVjdEZpbGUsIHJlc2V0UHJvamVjdEZpbGUsIHNldFJlYWxEZXZpY2VTZWN1cml0eSxcbiAgZ2V0QWRkaXRpb25hbFJ1bkNvbnRlbnQsIGdldFhjdGVzdHJ1bkZpbGVOYW1lLCBnZW5lcmF0ZVhjb2RlQ29uZmlnRmlsZSxcbiAgc2V0WGN0ZXN0cnVuRmlsZSwgZ2V0WGN0ZXN0cnVuRmlsZVBhdGgsIGtpbGxQcm9jZXNzLCByYW5kb21JbnQsXG4gIGdldFdEQVVwZ3JhZGVUaW1lc3RhbXAsIHJlc2V0VGVzdFByb2Nlc3NlcyxcbiAgZ2V0UElEc0xpc3RlbmluZ09uUG9ydCwga2lsbEFwcFVzaW5nUGF0dGVybiwgaXNUdk9TLFxufTtcbiJdLCJmaWxlIjoibGliL3V0aWxzLmpzIiwic291cmNlUm9vdCI6Ii4uLy4uIn0=
|
|
317
|
+
//# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibGliL3V0aWxzLmpzIiwibmFtZXMiOlsiUk9PVF9ESVIiLCJwYXRoIiwiYmFzZW5hbWUiLCJfX2Rpcm5hbWUiLCJyZXNvbHZlIiwicHJvY2VzcyIsImVudiIsIk5PX1BSRUNPTVBJTEUiLCJQUk9KRUNUX0ZJTEUiLCJnZXRQSURzVXNpbmdQYXR0ZXJuIiwicGF0dGVybiIsImFyZ3MiLCJzdGRvdXQiLCJzcGxpdCIsIm1hcCIsIngiLCJwYXJzZUludCIsImZpbHRlciIsIl8iLCJpc0ludGVnZXIiLCJlcnIiLCJsb2ciLCJkZWJ1ZyIsImpvaW4iLCJjb2RlIiwia2lsbEFwcFVzaW5nUGF0dGVybiIsInBncmVwUGF0dGVybiIsInNpZ25hbHMiLCJzaWduYWwiLCJtYXRjaGVkUGlkcyIsImlzRW1wdHkiLCJtZXNzYWdlIiwibGFzdCIsInBpZENoZWNrUHJvbWlzZXMiLCJwaWQiLCJ0aGVuIiwiY2F0Y2giLCJCIiwiYWxsIiwiZXZlcnkiLCJ3YWl0TXMiLCJpbnRlcnZhbE1zIiwiaWduIiwiaXNUdk9TIiwicGxhdGZvcm1OYW1lIiwidG9Mb3dlciIsIlBMQVRGT1JNX05BTUVfVFZPUyIsInJlcGxhY2VJbkZpbGUiLCJmaWxlIiwiZmluZCIsInJlcGxhY2UiLCJjb250ZW50cyIsImZzIiwicmVhZEZpbGUiLCJuZXdDb250ZW50cyIsIndyaXRlRmlsZSIsInVwZGF0ZVByb2plY3RGaWxlIiwiYWdlbnRQYXRoIiwibmV3QnVuZGxlSWQiLCJwcm9qZWN0RmlsZVBhdGgiLCJjb3B5RmlsZSIsIlJlZ0V4cCIsImVzY2FwZVJlZ0V4cCIsIldEQV9SVU5ORVJfQlVORExFX0lEIiwid2FybiIsInJlc2V0UHJvamVjdEZpbGUiLCJleGlzdHMiLCJtdiIsInNldFJlYWxEZXZpY2VTZWN1cml0eSIsImtleWNoYWluUGF0aCIsImtleWNoYWluUGFzc3dvcmQiLCJnZW5lcmF0ZVhjb2RlQ29uZmlnRmlsZSIsIm9yZ0lkIiwic2lnbmluZ0lkIiwieGNjb25maWdQYXRoIiwidGVtcERpciIsInNldFhjdGVzdHJ1bkZpbGUiLCJkZXZpY2VJbmZvIiwic2RrVmVyc2lvbiIsImJvb3RzdHJhcFBhdGgiLCJ3ZGFSZW1vdGVQb3J0IiwieGN0ZXN0cnVuRmlsZVBhdGgiLCJnZXRYY3Rlc3RydW5GaWxlUGF0aCIsInhjdGVzdFJ1bkNvbnRlbnQiLCJwbGlzdCIsInBhcnNlUGxpc3RGaWxlIiwidXBkYXRlV0RBUG9ydCIsImdldEFkZGl0aW9uYWxSdW5Db250ZW50IiwibmV3WGN0ZXN0UnVuQ29udGVudCIsIm1lcmdlIiwidXBkYXRlUGxpc3RGaWxlIiwicnVubmVyIiwiRW52aXJvbm1lbnRWYXJpYWJsZXMiLCJVU0VfUE9SVCIsInNka0Jhc2VkIiwidWRpZCIsInBsYXRmb3JtQmFzZWQiLCJwbGF0Zm9ybVZlcnNpb24iLCJmaWxlUGF0aCIsInZlcnNpb24iLCJpbmZvIiwib3JpZ2luYWxYY3Rlc3RydW5GaWxlIiwiZ2V0WGN0ZXN0cnVuRmlsZU5hbWUiLCJlcnJvckFuZFRocm93IiwiaXNSZWFsRGV2aWNlIiwia2lsbFByb2Nlc3MiLCJuYW1lIiwicHJvYyIsImlzUnVubmluZyIsInN0b3AiLCJpbmNsdWRlcyIsInJhbmRvbUludCIsImxvdyIsImhpZ2giLCJNYXRoIiwiZmxvb3IiLCJyYW5kb20iLCJnZXRXREFVcGdyYWRlVGltZXN0YW1wIiwicGFja2FnZU1hbmlmZXN0IiwibXRpbWUiLCJzdGF0IiwiZ2V0VGltZSIsInJlc2V0VGVzdFByb2Nlc3NlcyIsImlzU2ltdWxhdG9yIiwicHJvY2Vzc1BhdHRlcm5zIiwicHVzaCIsImdldFBJRHNMaXN0ZW5pbmdPblBvcnQiLCJwb3J0IiwiZmlsdGVyaW5nRnVuYyIsInJlc3VsdCIsInRyaW0iLCJlIiwic3RkZXJyIiwiaXNGdW5jdGlvbiJdLCJzb3VyY2VSb290IjoiLi4vLi4iLCJzb3VyY2VzIjpbImxpYi91dGlscy5qcyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBmcywgdGVtcERpciwgcGxpc3QgfSBmcm9tICdAYXBwaXVtL3N1cHBvcnQnO1xuaW1wb3J0IHsgZXhlYyB9IGZyb20gJ3RlZW5fcHJvY2Vzcyc7XG5pbXBvcnQgcGF0aCBmcm9tICdwYXRoJztcbmltcG9ydCBsb2cgZnJvbSAnLi9sb2dnZXInO1xuaW1wb3J0IF8gZnJvbSAnbG9kYXNoJztcbmltcG9ydCB7IFdEQV9SVU5ORVJfQlVORExFX0lELCBQTEFURk9STV9OQU1FX1RWT1MgfSBmcm9tICcuL2NvbnN0YW50cyc7XG5pbXBvcnQgQiBmcm9tICdibHVlYmlyZCc7XG5pbXBvcnQgeyB3YWl0Rm9yQ29uZGl0aW9uIH0gZnJvbSAnYXN5bmNib3gnO1xuXG5jb25zdCBST09UX0RJUiA9IHBhdGguYmFzZW5hbWUoX19kaXJuYW1lKSA9PT0gJ2xpYidcbiAgPyBwYXRoLnJlc29sdmUoX19kaXJuYW1lLCBwcm9jZXNzLmVudi5OT19QUkVDT01QSUxFID8gJy4uJyA6ICcuLi8uLicpXG4gIDogX19kaXJuYW1lO1xuY29uc3QgUFJPSkVDVF9GSUxFID0gJ3Byb2plY3QucGJ4cHJvaic7XG5cbmFzeW5jIGZ1bmN0aW9uIGdldFBJRHNVc2luZ1BhdHRlcm4gKHBhdHRlcm4pIHtcbiAgY29uc3QgYXJncyA9IFtcbiAgICAnLWlmJywgLy8gY2FzZSBpbnNlbnNpdGl2ZSwgZnVsbCBjbWRsaW5lIG1hdGNoXG4gICAgcGF0dGVybixcbiAgXTtcbiAgdHJ5IHtcbiAgICBjb25zdCB7c3Rkb3V0fSA9IGF3YWl0IGV4ZWMoJ3BncmVwJywgYXJncyk7XG4gICAgcmV0dXJuIHN0ZG91dC5zcGxpdCgvXFxzKy8pXG4gICAgICAubWFwKCh4KSA9PiBwYXJzZUludCh4LCAxMCkpXG4gICAgICAuZmlsdGVyKF8uaXNJbnRlZ2VyKVxuICAgICAgLm1hcCgoeCkgPT4gYCR7eH1gKTtcbiAgfSBjYXRjaCAoZXJyKSB7XG4gICAgbG9nLmRlYnVnKGAncGdyZXAgJHthcmdzLmpvaW4oJyAnKX0nIGRpZG4ndCBkZXRlY3QgYW55IG1hdGNoaW5nIHByb2Nlc3Nlcy4gUmV0dXJuIGNvZGU6ICR7ZXJyLmNvZGV9YCk7XG4gICAgcmV0dXJuIFtdO1xuICB9XG59XG5cbmFzeW5jIGZ1bmN0aW9uIGtpbGxBcHBVc2luZ1BhdHRlcm4gKHBncmVwUGF0dGVybikge1xuICBjb25zdCBzaWduYWxzID0gWzIsIDE1LCA5XTtcbiAgZm9yIChjb25zdCBzaWduYWwgb2Ygc2lnbmFscykge1xuICAgIGNvbnN0IG1hdGNoZWRQaWRzID0gYXdhaXQgZ2V0UElEc1VzaW5nUGF0dGVybihwZ3JlcFBhdHRlcm4pO1xuICAgIGlmIChfLmlzRW1wdHkobWF0Y2hlZFBpZHMpKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGNvbnN0IGFyZ3MgPSBbYC0ke3NpZ25hbH1gLCAuLi5tYXRjaGVkUGlkc107XG4gICAgdHJ5IHtcbiAgICAgIGF3YWl0IGV4ZWMoJ2tpbGwnLCBhcmdzKTtcbiAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgIGxvZy5kZWJ1Zyhga2lsbCAke2FyZ3Muam9pbignICcpfSAtPiAke2Vyci5tZXNzYWdlfWApO1xuICAgIH1cbiAgICBpZiAoc2lnbmFsID09PSBfLmxhc3Qoc2lnbmFscykpIHtcbiAgICAgIC8vIHRoZXJlIGlzIG5vIG5lZWQgdG8gd2FpdCBhZnRlciBTSUdLSUxMXG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIHRyeSB7XG4gICAgICBhd2FpdCB3YWl0Rm9yQ29uZGl0aW9uKGFzeW5jICgpID0+IHtcbiAgICAgICAgY29uc3QgcGlkQ2hlY2tQcm9taXNlcyA9IG1hdGNoZWRQaWRzXG4gICAgICAgICAgLm1hcCgocGlkKSA9PiBleGVjKCdraWxsJywgWyctMCcsIHBpZF0pXG4gICAgICAgICAgICAvLyB0aGUgcHJvY2VzcyBpcyBzdGlsbCBhbGl2ZVxuICAgICAgICAgICAgLnRoZW4oKCkgPT4gZmFsc2UpXG4gICAgICAgICAgICAvLyB0aGUgcHJvY2VzcyBpcyBkZWFkXG4gICAgICAgICAgICAuY2F0Y2goKCkgPT4gdHJ1ZSlcbiAgICAgICAgICApO1xuICAgICAgICByZXR1cm4gKGF3YWl0IEIuYWxsKHBpZENoZWNrUHJvbWlzZXMpKVxuICAgICAgICAgIC5ldmVyeSgoeCkgPT4geCA9PT0gdHJ1ZSk7XG4gICAgICB9LCB7XG4gICAgICAgIHdhaXRNczogMTAwMCxcbiAgICAgICAgaW50ZXJ2YWxNczogMTAwLFxuICAgICAgfSk7XG4gICAgICByZXR1cm47XG4gICAgfSBjYXRjaCAoaWduKSB7XG4gICAgICAvLyB0cnkgdGhlIG5leHQgc2lnbmFsXG4gICAgfVxuICB9XG59XG5cbi8qKlxuICogUmV0dXJuIHRydWUgaWYgdGhlIHBsYXRmb3JtTmFtZSBpcyB0dk9TXG4gKiBAcGFyYW0ge3N0cmluZ30gcGxhdGZvcm1OYW1lIFRoZSBuYW1lIG9mIHRoZSBwbGF0b3JtXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJuIHRydWUgaWYgdGhlIHBsYXRmb3JtTmFtZSBpcyB0dk9TXG4gKi9cbmZ1bmN0aW9uIGlzVHZPUyAocGxhdGZvcm1OYW1lKSB7XG4gIHJldHVybiBfLnRvTG93ZXIocGxhdGZvcm1OYW1lKSA9PT0gXy50b0xvd2VyKFBMQVRGT1JNX05BTUVfVFZPUyk7XG59XG5cbmFzeW5jIGZ1bmN0aW9uIHJlcGxhY2VJbkZpbGUgKGZpbGUsIGZpbmQsIHJlcGxhY2UpIHtcbiAgbGV0IGNvbnRlbnRzID0gYXdhaXQgZnMucmVhZEZpbGUoZmlsZSwgJ3V0ZjgnKTtcblxuICBsZXQgbmV3Q29udGVudHMgPSBjb250ZW50cy5yZXBsYWNlKGZpbmQsIHJlcGxhY2UpO1xuICBpZiAobmV3Q29udGVudHMgIT09IGNvbnRlbnRzKSB7XG4gICAgYXdhaXQgZnMud3JpdGVGaWxlKGZpbGUsIG5ld0NvbnRlbnRzLCAndXRmOCcpO1xuICB9XG59XG5cbi8qKlxuICogVXBkYXRlIFdlYkRyaXZlckFnZW50UnVubmVyIHByb2plY3QgYnVuZGxlIElEIHdpdGggbmV3QnVuZGxlSWQuXG4gKiBUaGlzIG1ldGhvZCBhc3N1bWVzIHByb2plY3QgZmlsZSBpcyBpbiB0aGUgY29ycmVjdCBzdGF0ZS5cbiAqIEBwYXJhbSB7c3RyaW5nfSBhZ2VudFBhdGggLSBQYXRoIHRvIHRoZSAueGNvZGVwcm9qIGRpcmVjdG9yeS5cbiAqIEBwYXJhbSB7c3RyaW5nfSBuZXdCdW5kbGVJZCB0aGUgbmV3IGJ1bmRsZSBJRCB1c2VkIHRvIHVwZGF0ZS5cbiAqL1xuYXN5bmMgZnVuY3Rpb24gdXBkYXRlUHJvamVjdEZpbGUgKGFnZW50UGF0aCwgbmV3QnVuZGxlSWQpIHtcbiAgbGV0IHByb2plY3RGaWxlUGF0aCA9IHBhdGgucmVzb2x2ZShhZ2VudFBhdGgsIFBST0pFQ1RfRklMRSk7XG4gIHRyeSB7XG4gICAgLy8gQXNzdW1pbmcgcHJvamVjdEZpbGVQYXRoIGlzIGluIHRoZSBjb3JyZWN0IHN0YXRlLCBjcmVhdGUgLm9sZCBmcm9tIHByb2plY3RGaWxlUGF0aFxuICAgIGF3YWl0IGZzLmNvcHlGaWxlKHByb2plY3RGaWxlUGF0aCwgYCR7cHJvamVjdEZpbGVQYXRofS5vbGRgKTtcbiAgICBhd2FpdCByZXBsYWNlSW5GaWxlKHByb2plY3RGaWxlUGF0aCwgbmV3IFJlZ0V4cChfLmVzY2FwZVJlZ0V4cChXREFfUlVOTkVSX0JVTkRMRV9JRCksICdnJyksIG5ld0J1bmRsZUlkKTsgLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby11c2VsZXNzLWVzY2FwZVxuICAgIGxvZy5kZWJ1ZyhgU3VjY2Vzc2Z1bGx5IHVwZGF0ZWQgJyR7cHJvamVjdEZpbGVQYXRofScgd2l0aCBidW5kbGUgaWQgJyR7bmV3QnVuZGxlSWR9J2ApO1xuICB9IGNhdGNoIChlcnIpIHtcbiAgICBsb2cuZGVidWcoYEVycm9yIHVwZGF0aW5nIHByb2plY3QgZmlsZTogJHtlcnIubWVzc2FnZX1gKTtcbiAgICBsb2cud2FybihgVW5hYmxlIHRvIHVwZGF0ZSBwcm9qZWN0IGZpbGUgJyR7cHJvamVjdEZpbGVQYXRofScgd2l0aCBgICtcbiAgICAgIGBidW5kbGUgaWQgJyR7bmV3QnVuZGxlSWR9Jy4gV2ViRHJpdmVyQWdlbnQgbWF5IG5vdCBzdGFydGApO1xuICB9XG59XG5cbi8qKlxuICogUmVzZXQgV2ViRHJpdmVyQWdlbnRSdW5uZXIgcHJvamVjdCBidW5kbGUgSUQgdG8gY29ycmVjdCBzdGF0ZS5cbiAqIEBwYXJhbSB7c3RyaW5nfSBhZ2VudFBhdGggLSBQYXRoIHRvIHRoZSAueGNvZGVwcm9qIGRpcmVjdG9yeS5cbiAqL1xuYXN5bmMgZnVuY3Rpb24gcmVzZXRQcm9qZWN0RmlsZSAoYWdlbnRQYXRoKSB7XG4gIGNvbnN0IHByb2plY3RGaWxlUGF0aCA9IHBhdGguam9pbihhZ2VudFBhdGgsIFBST0pFQ1RfRklMRSk7XG4gIHRyeSB7XG4gICAgLy8gcmVzdG9yZSBwcm9qZWN0RmlsZVBhdGggZnJvbSAub2xkIGZpbGVcbiAgICBpZiAoIWF3YWl0IGZzLmV4aXN0cyhgJHtwcm9qZWN0RmlsZVBhdGh9Lm9sZGApKSB7XG4gICAgICByZXR1cm47IC8vIG5vIG5lZWQgdG8gcmVzZXRcbiAgICB9XG4gICAgYXdhaXQgZnMubXYoYCR7cHJvamVjdEZpbGVQYXRofS5vbGRgLCBwcm9qZWN0RmlsZVBhdGgpO1xuICAgIGxvZy5kZWJ1ZyhgU3VjY2Vzc2Z1bGx5IHJlc2V0ICcke3Byb2plY3RGaWxlUGF0aH0nIHdpdGggYnVuZGxlIGlkICcke1dEQV9SVU5ORVJfQlVORExFX0lEfSdgKTtcbiAgfSBjYXRjaCAoZXJyKSB7XG4gICAgbG9nLmRlYnVnKGBFcnJvciByZXNldHRpbmcgcHJvamVjdCBmaWxlOiAke2Vyci5tZXNzYWdlfWApO1xuICAgIGxvZy53YXJuKGBVbmFibGUgdG8gcmVzZXQgcHJvamVjdCBmaWxlICcke3Byb2plY3RGaWxlUGF0aH0nIHdpdGggYCArXG4gICAgICBgYnVuZGxlIGlkICcke1dEQV9SVU5ORVJfQlVORExFX0lEfScuIFdlYkRyaXZlckFnZW50IGhhcyBiZWVuIGAgK1xuICAgICAgYG1vZGlmaWVkIGFuZCBub3QgcmV0dXJuZWQgdG8gdGhlIG9yaWdpbmFsIHN0YXRlLmApO1xuICB9XG59XG5cbmFzeW5jIGZ1bmN0aW9uIHNldFJlYWxEZXZpY2VTZWN1cml0eSAoa2V5Y2hhaW5QYXRoLCBrZXljaGFpblBhc3N3b3JkKSB7XG4gIGxvZy5kZWJ1ZygnU2V0dGluZyBzZWN1cml0eSBmb3IgaU9TIGRldmljZScpO1xuICBhd2FpdCBleGVjKCdzZWN1cml0eScsIFsnLXYnLCAnbGlzdC1rZXljaGFpbnMnLCAnLXMnLCBrZXljaGFpblBhdGhdKTtcbiAgYXdhaXQgZXhlYygnc2VjdXJpdHknLCBbJy12JywgJ3VubG9jay1rZXljaGFpbicsICctcCcsIGtleWNoYWluUGFzc3dvcmQsIGtleWNoYWluUGF0aF0pO1xuICBhd2FpdCBleGVjKCdzZWN1cml0eScsIFsnc2V0LWtleWNoYWluLXNldHRpbmdzJywgJy10JywgJzM2MDAnLCAnLWwnLCBrZXljaGFpblBhdGhdKTtcbn1cblxuYXN5bmMgZnVuY3Rpb24gZ2VuZXJhdGVYY29kZUNvbmZpZ0ZpbGUgKG9yZ0lkLCBzaWduaW5nSWQpIHtcbiAgbG9nLmRlYnVnKGBHZW5lcmF0aW5nIHhjb2RlIGNvbmZpZyBmaWxlIGZvciBvcmdJZCAnJHtvcmdJZH0nIGFuZCBzaWduaW5nSWQgYCArXG4gICAgICAgICAgICBgJyR7c2lnbmluZ0lkfSdgKTtcbiAgY29uc3QgY29udGVudHMgPSBgREVWRUxPUE1FTlRfVEVBTSA9ICR7b3JnSWR9XG5DT0RFX1NJR05fSURFTlRJVFkgPSAke3NpZ25pbmdJZH1cbmA7XG4gIGNvbnN0IHhjY29uZmlnUGF0aCA9IGF3YWl0IHRlbXBEaXIucGF0aCgnYXBwaXVtLXRlbXAueGNjb25maWcnKTtcbiAgbG9nLmRlYnVnKGBXcml0aW5nIHhjb2RlIGNvbmZpZyBmaWxlIHRvICR7eGNjb25maWdQYXRofWApO1xuICBhd2FpdCBmcy53cml0ZUZpbGUoeGNjb25maWdQYXRoLCBjb250ZW50cywgJ3V0ZjgnKTtcbiAgcmV0dXJuIHhjY29uZmlnUGF0aDtcbn1cblxuLyoqXG4gKiBJbmZvcm1hdGlvbiBvZiB0aGUgZGV2aWNlIHVuZGVyIHRlc3RcbiAqIEB0eXBlZGVmIHtPYmplY3R9IERldmljZUluZm9cbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBpc1JlYWxEZXZpY2UgLSBFcXVhbHMgdG8gdHJ1ZSBpZiB0aGUgY3VycmVudCBkZXZpY2UgaXMgYSByZWFsIGRldmljZVxuICogQHByb3BlcnR5IHtzdHJpbmd9IHVkaWQgLSBUaGUgZGV2aWNlIFVESUQuXG4gKiBAcHJvcGVydHkge3N0cmluZ30gcGxhdGZvcm1WZXJzaW9uIC0gVGhlIHBsYXRmb3JtIHZlcnNpb24gb2YgT1MuXG4gKiBAcHJvcGVydHkge3N0cmluZ30gcGxhdGZvcm1OYW1lIC0gVGhlIHBsYXRmb3JtIG5hbWUgb2YgaU9TLCB0dk9TXG4qL1xuLyoqXG4gKiBDcmVhdGVzIHhjdGVzdHJ1biBmaWxlIHBlciBkZXZpY2UgJiBwbGF0Zm9ybSB2ZXJzaW9uLlxuICogV2UgZXhwZWN0cyB0byBoYXZlIFdlYkRyaXZlckFnZW50UnVubmVyX2lwaG9uZW9zJHtzZGtWZXJzaW9ufHBsYXRmb3JtVmVyc2lvbn0tYXJtNjQueGN0ZXN0cnVuIGZvciByZWFsIGRldmljZVxuICogYW5kIFdlYkRyaXZlckFnZW50UnVubmVyX2lwaG9uZXNpbXVsYXRvciR7c2RrVmVyc2lvbnxwbGF0Zm9ybVZlcnNpb259LXg4Nl82NC54Y3Rlc3RydW4gZm9yIHNpbXVsYXRvciBsb2NhdGVkIEBib290c3RyYXBQYXRoXG4gKiBOZXdlciBYY29kZSAoWGNvZGUgMTAuMCBhdCBsZWFzdCkgZ2VuZXJhdGUgeGN0ZXN0cnVuIGZpbGUgZm9sbG93aW5nIHNka1ZlcnNpb24uXG4gKiBlLmcuIFhjb2RlIHdoaWNoIGhhcyBpT1MgU0RLIFZlcnNpb24gMTIuMiBnZW5lcmF0ZSBXZWJEcml2ZXJBZ2VudFJ1bm5lcl9pcGhvbmVzaW11bGF0b3IuMi14ODZfNjQueGN0ZXN0cnVuXG4gKiAgICAgIGV2ZW4gaWYgdGhlIGNhcCBoYXMgcGxhdGZvcm0gdmVyc2lvbiAxMS40XG4gKlxuICogQHBhcmFtIHtEZXZpY2VJbmZvfSBkZXZpY2VJbmZvXG4gKiBAcGFyYW0ge3N0cmluZ30gc2RrVmVyc2lvbiAtIFRoZSBYY29kZSBTREsgdmVyc2lvbiBvZiBPUy5cbiAqIEBwYXJhbSB7c3RyaW5nfSBib290c3RyYXBQYXRoIC0gVGhlIGZvbGRlciBwYXRoIGNvbnRhaW5pbmcgeGN0ZXN0cnVuIGZpbGUuXG4gKiBAcGFyYW0ge3N0cmluZ30gd2RhUmVtb3RlUG9ydCAtIFRoZSByZW1vdGUgcG9ydCBXREEgaXMgbGlzdGVuaW5nIG9uLlxuICogQHJldHVybiB7c3RyaW5nfSByZXR1cm5zIHhjdGVzdHJ1bkZpbGVQYXRoIGZvciBnaXZlbiBkZXZpY2VcbiAqIEB0aHJvd3MgaWYgV2ViRHJpdmVyQWdlbnRSdW5uZXJfaXBob25lb3Mke3Nka1ZlcnNpb258cGxhdGZvcm1WZXJzaW9ufS1hcm02NC54Y3Rlc3RydW4gZm9yIHJlYWwgZGV2aWNlXG4gKiBvciBXZWJEcml2ZXJBZ2VudFJ1bm5lcl9pcGhvbmVzaW11bGF0b3Ike3Nka1ZlcnNpb258cGxhdGZvcm1WZXJzaW9ufS14ODZfNjQueGN0ZXN0cnVuIGZvciBzaW11bGF0b3IgaXMgbm90IGZvdW5kIEBib290c3RyYXBQYXRoLFxuICogdGhlbiBpdCB3aWxsIHRocm93IGZpbGUgbm90IGZvdW5kIGV4Y2VwdGlvblxuICovXG5hc3luYyBmdW5jdGlvbiBzZXRYY3Rlc3RydW5GaWxlIChkZXZpY2VJbmZvLCBzZGtWZXJzaW9uLCBib290c3RyYXBQYXRoLCB3ZGFSZW1vdGVQb3J0KSB7XG4gIGNvbnN0IHhjdGVzdHJ1bkZpbGVQYXRoID0gYXdhaXQgZ2V0WGN0ZXN0cnVuRmlsZVBhdGgoZGV2aWNlSW5mbywgc2RrVmVyc2lvbiwgYm9vdHN0cmFwUGF0aCk7XG4gIGNvbnN0IHhjdGVzdFJ1bkNvbnRlbnQgPSBhd2FpdCBwbGlzdC5wYXJzZVBsaXN0RmlsZSh4Y3Rlc3RydW5GaWxlUGF0aCk7XG4gIGNvbnN0IHVwZGF0ZVdEQVBvcnQgPSBnZXRBZGRpdGlvbmFsUnVuQ29udGVudChkZXZpY2VJbmZvLnBsYXRmb3JtTmFtZSwgd2RhUmVtb3RlUG9ydCk7XG4gIGNvbnN0IG5ld1hjdGVzdFJ1bkNvbnRlbnQgPSBfLm1lcmdlKHhjdGVzdFJ1bkNvbnRlbnQsIHVwZGF0ZVdEQVBvcnQpO1xuICBhd2FpdCBwbGlzdC51cGRhdGVQbGlzdEZpbGUoeGN0ZXN0cnVuRmlsZVBhdGgsIG5ld1hjdGVzdFJ1bkNvbnRlbnQsIHRydWUpO1xuXG4gIHJldHVybiB4Y3Rlc3RydW5GaWxlUGF0aDtcbn1cblxuLyoqXG4gKiBSZXR1cm4gdGhlIFdEQSBvYmplY3Qgd2hpY2ggYXBwZW5kcyBleGlzdGluZyB4Y3Rlc3QgcnVubmVyIGNvbnRlbnRcbiAqIEBwYXJhbSB7c3RyaW5nfSBwbGF0Zm9ybU5hbWUgLSBUaGUgbmFtZSBvZiB0aGUgcGxhdGZvcm1cbiAqIEBwYXJhbSB7c3RyaW5nfSB2ZXJzaW9uIC0gVGhlIFhjb2RlIFNESyB2ZXJzaW9uIG9mIE9TLlxuICogQHJldHVybiB7b2JqZWN0fSByZXR1cm5zIGEgcnVubmVyIG9iamVjdCB3aGljaCBoYXMgVVNFX1BPUlRcbiAqL1xuZnVuY3Rpb24gZ2V0QWRkaXRpb25hbFJ1bkNvbnRlbnQgKHBsYXRmb3JtTmFtZSwgd2RhUmVtb3RlUG9ydCkge1xuICBjb25zdCBydW5uZXIgPSBgV2ViRHJpdmVyQWdlbnRSdW5uZXIke2lzVHZPUyhwbGF0Zm9ybU5hbWUpID8gJ190dk9TJyA6ICcnfWA7XG5cbiAgcmV0dXJuIHtcbiAgICBbcnVubmVyXToge1xuICAgICAgRW52aXJvbm1lbnRWYXJpYWJsZXM6IHtcbiAgICAgICAgLy8gVVNFX1BPUlQgbXVzdCBiZSAnc3RyaW5nJ1xuICAgICAgICBVU0VfUE9SVDogYCR7d2RhUmVtb3RlUG9ydH1gXG4gICAgICB9XG4gICAgfVxuICB9O1xufVxuXG4vKipcbiAqIFJldHVybiB0aGUgcGF0aCBvZiB4Y3Rlc3RydW4gaWYgaXQgZXhpc3RzXG4gKiBAcGFyYW0ge0RldmljZUluZm99IGRldmljZUluZm9cbiAqIEBwYXJhbSB7c3RyaW5nfSBzZGtWZXJzaW9uIC0gVGhlIFhjb2RlIFNESyB2ZXJzaW9uIG9mIE9TLlxuICogQHBhcmFtIHtzdHJpbmd9IGJvb3RzdHJhcFBhdGggLSBUaGUgZm9sZGVyIHBhdGggY29udGFpbmluZyB4Y3Rlc3RydW4gZmlsZS5cbiAqL1xuYXN5bmMgZnVuY3Rpb24gZ2V0WGN0ZXN0cnVuRmlsZVBhdGggKGRldmljZUluZm8sIHNka1ZlcnNpb24sIGJvb3RzdHJhcFBhdGgpIHtcbiAgLy8gRmlyc3QgdHJ5IHRoZSBTREsgcGF0aCwgZm9yIFhjb2RlIDEwIChhdCBsZWFzdClcbiAgY29uc3Qgc2RrQmFzZWQgPSBbXG4gICAgcGF0aC5yZXNvbHZlKGJvb3RzdHJhcFBhdGgsIGAke2RldmljZUluZm8udWRpZH1fJHtzZGtWZXJzaW9ufS54Y3Rlc3RydW5gKSxcbiAgICBzZGtWZXJzaW9uLFxuICBdO1xuICAvLyBOZXh0IHRyeSBQbGF0Zm9ybSBwYXRoLCBmb3IgZWFybGllciBYY29kZSB2ZXJzaW9uc1xuICBjb25zdCBwbGF0Zm9ybUJhc2VkID0gW1xuICAgIHBhdGgucmVzb2x2ZShib290c3RyYXBQYXRoLCBgJHtkZXZpY2VJbmZvLnVkaWR9XyR7ZGV2aWNlSW5mby5wbGF0Zm9ybVZlcnNpb259LnhjdGVzdHJ1bmApLFxuICAgIGRldmljZUluZm8ucGxhdGZvcm1WZXJzaW9uLFxuICBdO1xuXG4gIGZvciAoY29uc3QgW2ZpbGVQYXRoLCB2ZXJzaW9uXSBvZiBbc2RrQmFzZWQsIHBsYXRmb3JtQmFzZWRdKSB7XG4gICAgaWYgKGF3YWl0IGZzLmV4aXN0cyhmaWxlUGF0aCkpIHtcbiAgICAgIGxvZy5pbmZvKGBVc2luZyAnJHtmaWxlUGF0aH0nIGFzIHhjdGVzdHJ1biBmaWxlYCk7XG4gICAgICByZXR1cm4gZmlsZVBhdGg7XG4gICAgfVxuICAgIGNvbnN0IG9yaWdpbmFsWGN0ZXN0cnVuRmlsZSA9IHBhdGgucmVzb2x2ZShib290c3RyYXBQYXRoLCBnZXRYY3Rlc3RydW5GaWxlTmFtZShkZXZpY2VJbmZvLCB2ZXJzaW9uKSk7XG4gICAgaWYgKGF3YWl0IGZzLmV4aXN0cyhvcmlnaW5hbFhjdGVzdHJ1bkZpbGUpKSB7XG4gICAgICAvLyBJZiB0aGlzIGlzIGZpcnN0IHRpbWUgcnVuIGZvciBnaXZlbiBkZXZpY2UsIHRoZW4gZmlyc3QgZ2VuZXJhdGUgeGN0ZXN0cnVuIGZpbGUgZm9yIGRldmljZS5cbiAgICAgIC8vIFdlIG5lZWQgdG8gaGF2ZSBhIHhjdGVzdHJ1biBmaWxlICoqcGVyIGRldmljZSoqIGJlY2F1c2Ugd2UgY2FudCBub3QgaGF2ZSBzYW1lIHdkYSBwb3J0IGZvciBhbGwgZGV2aWNlcy5cbiAgICAgIGF3YWl0IGZzLmNvcHlGaWxlKG9yaWdpbmFsWGN0ZXN0cnVuRmlsZSwgZmlsZVBhdGgpO1xuICAgICAgbG9nLmluZm8oYFVzaW5nICcke2ZpbGVQYXRofScgYXMgeGN0ZXN0cnVuIGZpbGUgY29waWVkIGJ5ICcke29yaWdpbmFsWGN0ZXN0cnVuRmlsZX0nYCk7XG4gICAgICByZXR1cm4gZmlsZVBhdGg7XG4gICAgfVxuICB9XG5cbiAgbG9nLmVycm9yQW5kVGhyb3coYElmIHlvdSBhcmUgdXNpbmcgJ3VzZVhjdGVzdHJ1bkZpbGUnIGNhcGFiaWxpdHkgdGhlbiB5b3UgYCArXG4gICAgYG5lZWQgdG8gaGF2ZSBhIHhjdGVzdHJ1biBmaWxlIChleHBlY3RlZDogYCArXG4gICAgYCcke3BhdGgucmVzb2x2ZShib290c3RyYXBQYXRoLCBnZXRYY3Rlc3RydW5GaWxlTmFtZShkZXZpY2VJbmZvLCBzZGtWZXJzaW9uKSl9JylgKTtcbn1cblxuXG4vKipcbiAqIFJldHVybiB0aGUgbmFtZSBvZiB4Y3Rlc3RydW4gZmlsZVxuICogQHBhcmFtIHtEZXZpY2VJbmZvfSBkZXZpY2VJbmZvXG4gKiBAcGFyYW0ge3N0cmluZ30gdmVyc2lvbiAtIFRoZSBYY29kZSBTREsgdmVyc2lvbiBvZiBPUy5cbiAqIEByZXR1cm4ge3N0cmluZ30gcmV0dXJucyB4Y3Rlc3RydW5GaWxlUGF0aCBmb3IgZ2l2ZW4gZGV2aWNlXG4gKi9cbmZ1bmN0aW9uIGdldFhjdGVzdHJ1bkZpbGVOYW1lIChkZXZpY2VJbmZvLCB2ZXJzaW9uKSB7XG4gIHJldHVybiBpc1R2T1MoZGV2aWNlSW5mby5wbGF0Zm9ybU5hbWUpXG4gICAgPyBgV2ViRHJpdmVyQWdlbnRSdW5uZXJfdHZPU19hcHBsZXR2JHtkZXZpY2VJbmZvLmlzUmVhbERldmljZSA/IGBvcyR7dmVyc2lvbn0tYXJtNjRgIDogYHNpbXVsYXRvciR7dmVyc2lvbn0teDg2XzY0YH0ueGN0ZXN0cnVuYFxuICAgIDogYFdlYkRyaXZlckFnZW50UnVubmVyX2lwaG9uZSR7ZGV2aWNlSW5mby5pc1JlYWxEZXZpY2UgPyBgb3Mke3ZlcnNpb259LWFybTY0YCA6IGBzaW11bGF0b3Ike3ZlcnNpb259LXg4Nl82NGB9LnhjdGVzdHJ1bmA7XG59XG5cbmFzeW5jIGZ1bmN0aW9uIGtpbGxQcm9jZXNzIChuYW1lLCBwcm9jKSB7XG4gIGlmICghcHJvYyB8fCAhcHJvYy5pc1J1bm5pbmcpIHtcbiAgICByZXR1cm47XG4gIH1cblxuICBsb2cuaW5mbyhgU2h1dHRpbmcgZG93biAnJHtuYW1lfScgcHJvY2VzcyAocGlkICcke3Byb2MucHJvYy5waWR9JylgKTtcblxuICBsb2cuaW5mbyhgU2VuZGluZyAnU0lHVEVSTScuLi5gKTtcbiAgdHJ5IHtcbiAgICBhd2FpdCBwcm9jLnN0b3AoJ1NJR1RFUk0nLCAxMDAwKTtcbiAgICByZXR1cm47XG4gIH0gY2F0Y2ggKGVycikge1xuICAgIGlmICghZXJyLm1lc3NhZ2UuaW5jbHVkZXMoYFByb2Nlc3MgZGlkbid0IGVuZCBhZnRlcmApKSB7XG4gICAgICB0aHJvdyBlcnI7XG4gICAgfVxuICAgIGxvZy5kZWJ1ZyhgJHtuYW1lfSBwcm9jZXNzIGRpZCBub3QgZW5kIGluIGEgdGltZWx5IGZhc2hpb246ICcke2Vyci5tZXNzYWdlfScuYCk7XG4gIH1cblxuICBsb2cuaW5mbyhgU2VuZGluZyAnU0lHS0lMTCcuLi5gKTtcbiAgdHJ5IHtcbiAgICBhd2FpdCBwcm9jLnN0b3AoJ1NJR0tJTEwnKTtcbiAgfSBjYXRjaCAoZXJyKSB7XG4gICAgaWYgKGVyci5tZXNzYWdlLmluY2x1ZGVzKCdub3QgY3VycmVudGx5IHJ1bm5pbmcnKSkge1xuICAgICAgLy8gdGhlIHByb2Nlc3MgZW5kZWQgYnV0IGZvciBzb21lIHJlYXNvbiB3ZSB3ZXJlIG5vdCBpbmZvcm1lZFxuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICB0aHJvdyBlcnI7XG4gIH1cbn1cblxuLyoqXG4gKiBHZW5lcmF0ZSBhIHJhbmRvbSBpbnRlZ2VyLlxuICpcbiAqIEByZXR1cm4ge251bWJlcn0gQSByYW5kb20gaW50ZWdlciBudW1iZXIgaW4gcmFuZ2UgW2xvdywgaGlnaHQpLiBgbG93YGAgaXMgaW5jbHVzaXZlIGFuZCBgaGlnaGAgaXMgZXhjbHVzaXZlLlxuICovXG5mdW5jdGlvbiByYW5kb21JbnQgKGxvdywgaGlnaCkge1xuICByZXR1cm4gTWF0aC5mbG9vcihNYXRoLnJhbmRvbSgpICogKGhpZ2ggLSBsb3cpICsgbG93KTtcbn1cblxuLyoqXG4gKiBSZXRyaWV2ZXMgV0RBIHVwZ3JhZGUgdGltZXN0YW1wXG4gKlxuICogQHJldHVybiB7P251bWJlcn0gVGhlIFVOSVggdGltZXN0YW1wIG9mIHRoZSBwYWNrYWdlIG1hbmlmZXN0LiBUaGUgbWFuaWZlc3Qgb25seSBnZXRzIG1vZGlmaWVkIG9uXG4gKiBwYWNrYWdlIHVwZ3JhZGUuXG4gKi9cbmFzeW5jIGZ1bmN0aW9uIGdldFdEQVVwZ3JhZGVUaW1lc3RhbXAgKCkge1xuICBjb25zdCBwYWNrYWdlTWFuaWZlc3QgPSBwYXRoLnJlc29sdmUoUk9PVF9ESVIsICdwYWNrYWdlLmpzb24nKTtcbiAgaWYgKCFhd2FpdCBmcy5leGlzdHMocGFja2FnZU1hbmlmZXN0KSkge1xuICAgIHJldHVybiBudWxsO1xuICB9XG4gIGNvbnN0IHttdGltZX0gPSBhd2FpdCBmcy5zdGF0KHBhY2thZ2VNYW5pZmVzdCk7XG4gIHJldHVybiBtdGltZS5nZXRUaW1lKCk7XG59XG5cbi8qKlxuICogS2lsbHMgcnVubmluZyBYQ1Rlc3QgcHJvY2Vzc2VzIGZvciB0aGUgcGFydGljdWxhciBkZXZpY2UuXG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IHVkaWQgLSBUaGUgZGV2aWNlIFVESUQuXG4gKiBAcGFyYW0ge2Jvb2xlYW59IGlzU2ltdWxhdG9yIC0gRXF1YWxzIHRvIHRydWUgaWYgdGhlIGN1cnJlbnQgZGV2aWNlIGlzIGEgU2ltdWxhdG9yXG4gKi9cbmFzeW5jIGZ1bmN0aW9uIHJlc2V0VGVzdFByb2Nlc3NlcyAodWRpZCwgaXNTaW11bGF0b3IpIHtcbiAgY29uc3QgcHJvY2Vzc1BhdHRlcm5zID0gW2B4Y29kZWJ1aWxkLioke3VkaWR9YF07XG4gIGlmIChpc1NpbXVsYXRvcikge1xuICAgIHByb2Nlc3NQYXR0ZXJucy5wdXNoKGAke3VkaWR9LipYQ1RSdW5uZXJgKTtcbiAgICAvLyBUaGUgcGF0dGVybiB0byBmaW5kIGluIGNhc2UgaWRiIHdhcyB1c2VkXG4gICAgcHJvY2Vzc1BhdHRlcm5zLnB1c2goYHhjdGVzdC4qJHt1ZGlkfWApO1xuICB9XG4gIGxvZy5kZWJ1ZyhgS2lsbGluZyBydW5uaW5nIHByb2Nlc3NlcyAnJHtwcm9jZXNzUGF0dGVybnMuam9pbignLCAnKX0nIGZvciB0aGUgZGV2aWNlICR7dWRpZH0uLi5gKTtcbiAgYXdhaXQgQi5hbGwocHJvY2Vzc1BhdHRlcm5zLm1hcChraWxsQXBwVXNpbmdQYXR0ZXJuKSk7XG59XG5cbi8qKlxuICogR2V0IHRoZSBJRHMgb2YgcHJvY2Vzc2VzIGxpc3RlbmluZyBvbiB0aGUgcGFydGljdWxhciBzeXN0ZW0gcG9ydC5cbiAqIEl0IGlzIGFsc28gcG9zc2libGUgdG8gYXBwbHkgYWRkaXRpb25hbCBmaWx0ZXJpbmcgYmFzZWQgb24gdGhlXG4gKiBwcm9jZXNzIGNvbW1hbmQgbGluZS5cbiAqXG4gKiBAcGFyYW0ge3N0cmluZ3xudW1iZXJ9IHBvcnQgLSBUaGUgcG9ydCBudW1iZXIuXG4gKiBAcGFyYW0gez9GdW5jdGlvbn0gZmlsdGVyaW5nRnVuYyAtIE9wdGlvbmFsIGxhbWJkYSBmdW5jdGlvbiwgd2hpY2hcbiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVjZWl2ZXMgY29tbWFuZCBsaW5lIHN0cmluZyBvZiB0aGUgcGFydGljdWxhciBwcm9jZXNzXG4gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxpc3RlbmluZyBvbiBnaXZlbiBwb3J0LCBhbmQgaXMgZXhwZWN0ZWQgdG8gcmV0dXJuXG4gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVpdGhlciB0cnVlIG9yIGZhbHNlIHRvIGluY2x1ZGUvZXhjbHVkZSB0aGUgY29ycmVzcG9uZGluZyBQSURcbiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZnJvbSB0aGUgcmVzdWx0aW5nIGFycmF5LlxuICogQHJldHVybnMge0FycmF5PHN0cmluZz59IC0gdGhlIGxpc3Qgb2YgbWF0Y2hlZCBwcm9jZXNzIGlkcy5cbiAqL1xuYXN5bmMgZnVuY3Rpb24gZ2V0UElEc0xpc3RlbmluZ09uUG9ydCAocG9ydCwgZmlsdGVyaW5nRnVuYyA9IG51bGwpIHtcbiAgY29uc3QgcmVzdWx0ID0gW107XG4gIHRyeSB7XG4gICAgLy8gVGhpcyBvbmx5IHdvcmtzIHNpbmNlIE1hYyBPUyBYIEVsIENhcGl0YW5cbiAgICBjb25zdCB7c3Rkb3V0fSA9IGF3YWl0IGV4ZWMoJ2xzb2YnLCBbJy10aScsIGB0Y3A6JHtwb3J0fWBdKTtcbiAgICByZXN1bHQucHVzaCguLi4oc3Rkb3V0LnRyaW0oKS5zcGxpdCgvXFxuKy8pKSk7XG4gIH0gY2F0Y2ggKGUpIHtcbiAgICBpZiAoZS5jb2RlICE9PSAxKSB7XG4gICAgICAvLyBjb2RlIDEgbWVhbnMgbm8gcHJvY2Vzc2VzLiBPdGhlciBlcnJvcnMgbmVlZCByZXBvcnRpbmdcbiAgICAgIGxvZy5kZWJ1ZyhgRXJyb3IgZ2V0dGluZyBwcm9jZXNzZXMgbGlzdGVuaW5nIG9uIHBvcnQgJyR7cG9ydH0nOiAke2Uuc3RkZXJyIHx8IGUubWVzc2FnZX1gKTtcbiAgICB9XG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfVxuXG4gIGlmICghXy5pc0Z1bmN0aW9uKGZpbHRlcmluZ0Z1bmMpKSB7XG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfVxuICByZXR1cm4gYXdhaXQgQi5maWx0ZXIocmVzdWx0LCBhc3luYyAocGlkKSA9PiB7XG4gICAgbGV0IHN0ZG91dDtcbiAgICB0cnkge1xuICAgICAgKHtzdGRvdXR9ID0gYXdhaXQgZXhlYygncHMnLCBbJy1wJywgcGlkLCAnLW8nLCAnY29tbWFuZCddKSk7XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgaWYgKGUuY29kZSA9PT0gMSkge1xuICAgICAgICAvLyBUaGUgcHJvY2VzcyBkb2VzIG5vdCBleGlzdCBhbnltb3JlLCB0aGVyZSdzIG5vdGhpbmcgdG8gZmlsdGVyXG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIH1cbiAgICAgIHRocm93IGU7XG4gICAgfVxuICAgIHJldHVybiBhd2FpdCBmaWx0ZXJpbmdGdW5jKHN0ZG91dCk7XG4gIH0pO1xufVxuXG5leHBvcnQgeyB1cGRhdGVQcm9qZWN0RmlsZSwgcmVzZXRQcm9qZWN0RmlsZSwgc2V0UmVhbERldmljZVNlY3VyaXR5LFxuICBnZXRBZGRpdGlvbmFsUnVuQ29udGVudCwgZ2V0WGN0ZXN0cnVuRmlsZU5hbWUsIGdlbmVyYXRlWGNvZGVDb25maWdGaWxlLFxuICBzZXRYY3Rlc3RydW5GaWxlLCBnZXRYY3Rlc3RydW5GaWxlUGF0aCwga2lsbFByb2Nlc3MsIHJhbmRvbUludCxcbiAgZ2V0V0RBVXBncmFkZVRpbWVzdGFtcCwgcmVzZXRUZXN0UHJvY2Vzc2VzLFxuICBnZXRQSURzTGlzdGVuaW5nT25Qb3J0LCBraWxsQXBwVXNpbmdQYXR0ZXJuLCBpc1R2T1MsXG59O1xuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQUE7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBRUEsTUFBTUEsUUFBUSxHQUFHQyxjQUFLQyxR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
|
|
@@ -184,7 +184,9 @@ class WebDriverAgent {
|
|
|
184
184
|
|
|
185
185
|
const timestampPath = _path.default.resolve(homeFolder, _constants.WDA_UPGRADE_TIMESTAMP_PATH);
|
|
186
186
|
|
|
187
|
-
|
|
187
|
+
const didTimestampExist = await _support.fs.exists(timestampPath);
|
|
188
|
+
|
|
189
|
+
if (didTimestampExist) {
|
|
188
190
|
try {
|
|
189
191
|
await _support.fs.access(timestampPath, _support.fs.W_OK);
|
|
190
192
|
} catch (ign) {
|
|
@@ -215,6 +217,11 @@ class WebDriverAgent {
|
|
|
215
217
|
return;
|
|
216
218
|
}
|
|
217
219
|
|
|
220
|
+
if (!didTimestampExist) {
|
|
221
|
+
this.log.info('There is no need to perform the project cleanup. A fresh install has been detected');
|
|
222
|
+
return;
|
|
223
|
+
}
|
|
224
|
+
|
|
218
225
|
try {
|
|
219
226
|
await this.xcodebuild.cleanProject();
|
|
220
227
|
} catch (e) {
|
|
@@ -444,4 +451,4 @@ var _default = WebDriverAgent;
|
|
|
444
451
|
exports.default = _default;require('source-map-support').install();
|
|
445
452
|
|
|
446
453
|
|
|
447
|
-
//# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImxpYi93ZWJkcml2ZXJhZ2VudC5qcyJdLCJuYW1lcyI6WyJXREFfTEFVTkNIX1RJTUVPVVQiLCJXREFfQUdFTlRfUE9SVCIsIldEQV9DRl9CVU5ETEVfTkFNRSIsIlNIQVJFRF9SRVNPVVJDRVNfR1VBUkQiLCJBc3luY0xvY2siLCJXZWJEcml2ZXJBZ2VudCIsImNvbnN0cnVjdG9yIiwieGNvZGVWZXJzaW9uIiwiYXJncyIsImxvZyIsIl8iLCJjbG9uZSIsImRlZmF1bHRMb2dnZXIiLCJkZXZpY2UiLCJwbGF0Zm9ybVZlcnNpb24iLCJwbGF0Zm9ybU5hbWUiLCJpb3NTZGtWZXJzaW9uIiwiaG9zdCIsImlzUmVhbERldmljZSIsInJlYWxEZXZpY2UiLCJpZGIiLCJ3ZGFCdW5kbGVQYXRoIiwic2V0V0RBUGF0aHMiLCJib290c3RyYXBQYXRoIiwiYWdlbnRQYXRoIiwid2RhTG9jYWxQb3J0Iiwid2RhUmVtb3RlUG9ydCIsIndkYUJhc2VVcmwiLCJXREFfQkFTRV9VUkwiLCJwcmVidWlsZFdEQSIsIndlYkRyaXZlckFnZW50VXJsIiwic3RhcnRlZCIsIndkYUNvbm5lY3Rpb25UaW1lb3V0IiwidXNlWGN0ZXN0cnVuRmlsZSIsInVzZVByZWJ1aWx0V0RBIiwiZGVyaXZlZERhdGFQYXRoIiwibWpwZWdTZXJ2ZXJQb3J0IiwidXBkYXRlZFdEQUJ1bmRsZUlkIiwieGNvZGVidWlsZCIsIlhjb2RlQnVpbGQiLCJzaG93WGNvZGVMb2ciLCJ4Y29kZUNvbmZpZ0ZpbGUiLCJ4Y29kZU9yZ0lkIiwieGNvZGVTaWduaW5nSWQiLCJrZXljaGFpblBhdGgiLCJrZXljaGFpblBhc3N3b3JkIiwidXNlU2ltcGxlQnVpbGRUZXN0IiwibGF1bmNoVGltZW91dCIsIndkYUxhdW5jaFRpbWVvdXQiLCJhbGxvd1Byb3Zpc2lvbmluZ0RldmljZVJlZ2lzdHJhdGlvbiIsInJlc3VsdEJ1bmRsZVBhdGgiLCJyZXN1bHRCdW5kbGVWZXJzaW9uIiwiQk9PVFNUUkFQX1BBVEgiLCJpbmZvIiwicGF0aCIsInJlc29sdmUiLCJjbGVhbnVwT2Jzb2xldGVQcm9jZXNzZXMiLCJvYnNvbGV0ZVBpZHMiLCJ1cmwiLCJwb3J0IiwiY21kTGluZSIsImluY2x1ZGVzIiwidG9Mb3dlckNhc2UiLCJ1ZGlkIiwiaXNFbXB0eSIsImRlYnVnIiwibGVuZ3RoIiwiZSIsIndhcm4iLCJtZXNzYWdlIiwiaXNSdW5uaW5nIiwiZ2V0U3RhdHVzIiwiYmFzZVBhdGgiLCJub1Nlc3Npb25Qcm94eSIsIk5vU2Vzc2lvblByb3h5Iiwic2VydmVyIiwiaG9zdG5hbWUiLCJiYXNlIiwidGltZW91dCIsImNvbW1hbmQiLCJlcnIiLCJocmVmIiwidW5pbnN0YWxsIiwiYnVuZGxlSWRzIiwiZ2V0VXNlckluc3RhbGxlZEJ1bmRsZUlkc0J5QnVuZGxlTmFtZSIsImJ1bmRsZUlkIiwicmVtb3ZlQXBwIiwiX2NsZWFudXBQcm9qZWN0SWZGcmVzaCIsImhvbWVGb2xkZXIiLCJwcm9jZXNzIiwiZW52IiwiSE9NRSIsImN1cnJlbnRVcGdyYWRlVGltZXN0YW1wIiwiaXNJbnRlZ2VyIiwidGltZXN0YW1wUGF0aCIsIldEQV9VUEdSQURFX1RJTUVTVEFNUF9QQVRIIiwiZnMiLCJleGlzdHMiLCJhY2Nlc3MiLCJXX09LIiwiaWduIiwicmVjZW50VXBncmFkZVRpbWVzdGFtcCIsInBhcnNlSW50IiwicmVhZEZpbGUiLCJkaXJuYW1lIiwid3JpdGVGaWxlIiwiY2xlYW5Qcm9qZWN0IiwibGF1bmNoIiwic2Vzc2lvbklkIiwic2V0dXBQcm94aWVzIiwiRXJyb3IiLCJzeW5jaHJvbml6YXRpb25LZXkiLCJub3JtYWxpemUiLCJhY3F1aXJlIiwic3RhcnRXaXRoSURCIiwiaW5pdCIsInByZWJ1aWxkIiwic3RhcnQiLCJ3ZGFCdW5kbGVJZCIsInRlc3RCdW5kbGVJZCIsInByZXBhcmVXREEiLCJVU0VfUE9SVCIsIldEQV9QUk9EVUNUX0JVTkRMRV9JREVOVElGSUVSIiwiTUpQRUdfU0VSVkVSX1BPUlQiLCJydW5YQ1VJVGVzdCIsInBhcnNlQnVuZGxlSWQiLCJpbmZvUGxpc3RQYXRoIiwiam9pbiIsImluZm9QbGlzdCIsInBsaXN0IiwicGFyc2VQbGlzdCIsIkNGQnVuZGxlSWRlbnRpZmllciIsImZldGNoV0RBQnVuZGxlIiwiaXNBcHBJbnN0YWxsZWQiLCJpbnN0YWxsQXBwIiwiaW5zdGFsbFhDVGVzdEJ1bmRsZSIsIndkYUJ1bmRsZVBhdGhzIiwiZ2xvYiIsIldEQV9SVU5ORVJfQVBQIiwiYWJzb2x1dGUiLCJpc1NvdXJjZUZyZXNoIiwiZXhpc3RzUHJvbWlzZXMiLCJzZXAiLCJtYXAiLCJzdWJQYXRoIiwiQiIsImFsbCIsInNvbWUiLCJ2IiwicHJveHlPcHRzIiwia2VlcEFsaXZlIiwiandwcm94eSIsIkpXUHJveHkiLCJwcm94eVJlcVJlcyIsImJpbmQiLCJxdWl0IiwicmVzZXQiLCJfdXJsIiwicGFyc2UiLCJwcm90b2NvbCIsImZ1bGx5U3RhcnRlZCIsInJldHJpZXZlRGVyaXZlZERhdGFQYXRoIiwic2V0dXBDYWNoaW5nIiwic3RhdHVzIiwiYnVpbGQiLCJwcm9kdWN0QnVuZGxlSWRlbnRpZmllciIsInVwZ3JhZGVkQXQiLCJ1dGlsIiwiaGFzVmFsdWUiLCJXREFfUlVOTkVSX0JVTkRMRV9JRCIsImFjdHVhbFVwZ3JhZGVUaW1lc3RhbXAiLCJ0b0xvd2VyIiwicXVpdEFuZFVuaW5zdGFsbCJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7QUFBQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFHQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFLQSxNQUFNQSxrQkFBa0IsR0FBRyxLQUFLLElBQWhDO0FBQ0EsTUFBTUMsY0FBYyxHQUFHLElBQXZCO0FBQ0EsTUFBTUMsa0JBQWtCLEdBQUcsNkJBQTNCO0FBQ0EsTUFBTUMsc0JBQXNCLEdBQUcsSUFBSUMsa0JBQUosRUFBL0I7O0FBRUEsTUFBTUMsY0FBTixDQUFxQjtBQUNuQkMsRUFBQUEsV0FBVyxDQUFFQyxZQUFGLEVBQWdCQyxJQUFJLEdBQUcs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Z0QsS0FBSzNHLEdBQUwsQ0FBU3VCLElBQUssR0FGbkU7QUFHQSxTQUFLeEUsR0FBTCxDQUFTNEMsSUFBVCxDQUFlLEdBQUVnQixPQUFRLCtEQUE4RCxLQUFLWCxHQUFMLENBQVNDLElBQUssb0NBQXJHO0FBQ0EsU0FBSzdCLGlCQUFMLEdBQXlCLEtBQUs0QixHQUFMLENBQVN1QixJQUFsQztBQUNEOztBQUtxQixRQUFoQjJGLGdCQUFnQixHQUFJO0FBQ3hCLFVBQU0sS0FBS2pCLElBQUwsRUFBTjtBQUNBLFVBQU0sS0FBS3pFLFNBQUwsRUFBTjtBQUNEOztBQS9ja0I7OztlQWtkTjdFLGMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgXyBmcm9tICdsb2Rhc2gnO1xuaW1wb3J0IHBhdGggZnJvbSAncGF0aCc7XG5pbXBvcnQgdXJsIGZyb20gJ3VybCc7XG5pbXBvcnQgQiBmcm9tICdibHVlYmlyZCc7XG5pbXBvcnQgeyBKV1Byb3h5IH0gZnJvbSAnQGFwcGl1bS9iYXNlLWRyaXZlcic7XG5pbXBvcnQgeyBmcywgdXRpbCwgcGxpc3QsIG1rZGlycCB9IGZyb20gJ0BhcHBpdW0vc3VwcG9ydCc7XG5pbXBvcnQgZGVmYXVsdExvZ2dlciBmcm9tICcuL2xvZ2dlcic7XG5pbXBvcnQgeyBOb1Nlc3Npb25Qcm94eSB9IGZyb20gJy4vbm8tc2Vzc2lvbi1wcm94eSc7XG5pbXBvcnQge1xuICBnZXRXREFVcGdyYWRlVGltZXN0YW1wLCByZXNldFRlc3RQcm9jZXNzZXMsIGdldFBJRHNMaXN0ZW5pbmdPblBvcnRcbn0gZnJvbSAnLi91dGlscyc7XG5pbXBvcnQgWGNvZGVCdWlsZCBmcm9tICcuL3hjb2RlYnVpbGQnO1xuaW1wb3J0IEFzeW5jTG9jayBmcm9tICdhc3luYy1sb2NrJztcbmltcG9ydCB7IGV4ZWMgfSBmcm9tICd0ZWVuX3Byb2Nlc3MnO1xuaW1wb3J0IHsgYnVuZGxlV0RBU2ltIH0gZnJvbSAnLi9jaGVjay1kZXBlbmRlbmNpZXMnO1xuaW1wb3J0IHtcbiAgQk9PVFNUUkFQX1BBVEgsIFdEQV9SVU5ORVJfQlVORExFX0lELCBXREFfUlVOTkVSX0FQUCxcbiAgV0RBX0JBU0VfVVJMLCBXREFfVVBHUkFERV9USU1FU1RBTVBfUEFUSCxcbn0gZnJvbSAnLi9jb25zdGFudHMnO1xuXG5jb25zdCBXREFfTEFVTkNIX1RJTUVPVVQgPSA2MCAqIDEwMDA7XG5jb25zdCBXREFfQUdFTlRfUE9SVCA9IDgxMDA7XG5jb25zdCBXREFfQ0ZfQlVORExFX05BTUUgPSAnV2ViRHJpdmVyQWdlbnRSdW5uZXItUnVubmVyJztcbmNvbnN0IFNIQVJFRF9SRVNPVVJDRVNfR1VBUkQgPSBuZXcgQXN5bmNMb2NrKCk7XG5cbmNsYXNzIFdlYkRyaXZlckFnZW50IHtcbiAgY29uc3RydWN0b3IgKHhjb2RlVmVyc2lvbiwgYXJncyA9IHt9LCBsb2cgPSBudWxsKSB7XG4gICAgdGhpcy54Y29kZVZlcnNpb24gPSB4Y29kZVZlcnNpb247XG5cbiAgICB0aGlzLmFyZ3MgPSBfLmNsb25lKGFyZ3MpO1xuICAgIHRoaXMubG9nID0gbG9nID8/IGRlZmF1bHRMb2dnZXI7XG5cbiAgICB0aGlzLmRldmljZSA9IGFyZ3MuZGV2aWNlO1xuICAgIHRoaXMucGxhdGZvcm1WZXJzaW9uID0gYXJncy5wbGF0Zm9ybVZlcnNpb247XG4gICAgdGhpcy5wbGF0Zm9ybU5hbWUgPSBhcmdzLnBsYXRmb3JtTmFtZTtcbiAgICB0aGlzLmlvc1Nka1ZlcnNpb24gPSBhcmdzLmlvc1Nka1ZlcnNpb247XG4gICAgdGhpcy5ob3N0ID0gYXJncy5ob3N0O1xuICAgIHRoaXMuaXNSZWFsRGV2aWNlID0gISFhcmdzLnJlYWxEZXZpY2U7XG4gICAgdGhpcy5pZGIgPSAoYXJncy5kZXZpY2UgfHwge30pLmlkYjtcbiAgICB0aGlzLndkYUJ1bmRsZVBhdGggPSBhcmdzLndkYUJ1bmRsZVBhdGg7XG5cbiAgICB0aGlzLnNldFdEQVBhdGhzKGFyZ3MuYm9vdHN0cmFwUGF0aCwgYXJncy5hZ2VudFBhdGgpO1xuXG4gICAgdGhpcy53ZGFMb2NhbFBvcnQgPSBhcmdzLndkYUxvY2FsUG9ydDtcbiAgICB0aGlzLndkYVJlbW90ZVBvcnQgPSBhcmdzLndkYUxvY2FsUG9ydCB8fCBXREFfQUdFTlRfUE9SVDtcbiAgICB0aGlzLndkYUJhc2VVcmwgPSBhcmdzLndkYUJhc2VVcmwgfHwgV0RBX0JBU0VfVVJMO1xuXG4gICAgdGhpcy5wcmVidWlsZFdEQSA9IGFyZ3MucHJlYnVpbGRXREE7XG5cbiAgICB0aGlzLndlYkRyaXZlckFnZW50VXJsID0gYXJncy53ZWJEcml2ZXJBZ2VudFVybDtcblxuICAgIHRoaXMuc3RhcnRlZCA9IGZhbHNlO1xuXG4gICAgdGhpcy53ZGFDb25uZWN0aW9uVGltZW91dCA9IGFyZ3Mud2RhQ29ubmVjdGlvblRpbWVvdXQ7XG5cbiAgICB0aGlzLnVzZVhjdGVzdHJ1bkZpbGUgPSBhcmdzLnVzZVhjdGVzdHJ1bkZpbGU7XG4gICAgdGhpcy51c2VQcmVidWlsdFdEQSA9IGFyZ3MudXNlUHJlYnVpbHRXREE7XG4gICAgdGhpcy5kZXJpdmVkRGF0YVBhdGggPSBhcmdzLmRlcml2ZWREYXRhUGF0aDtcbiAgICB0aGlzLm1qcGVnU2VydmVyUG9ydCA9IGFyZ3MubWpwZWdTZXJ2ZXJQb3J0O1xuXG4gICAgdGhpcy51cGRhdGVkV0RBQnVuZGxlSWQgPSBhcmdzLnVwZGF0ZWRXREFCdW5kbGVJZDtcblxuICAgIHRoaXMueGNvZGVidWlsZCA9IG5ldyBYY29kZUJ1aWxkKHRoaXMueGNvZGVWZXJzaW9uLCB0aGlzLmRldmljZSwge1xuICAgICAgcGxhdGZvcm1WZXJzaW9uOiB0aGlzLnBsYXRmb3JtVmVyc2lvbixcbiAgICAgIHBsYXRmb3JtTmFtZTogdGhpcy5wbGF0Zm9ybU5hbWUsXG4gICAgICBpb3NTZGtWZXJzaW9uOiB0aGlzLmlvc1Nka1ZlcnNpb24sXG4gICAgICBhZ2VudFBhdGg6IHRoaXMuYWdlbnRQYXRoLFxuICAgICAgYm9vdHN0cmFwUGF0aDogdGhpcy5ib290c3RyYXBQYXRoLFxuICAgICAgcmVhbERldmljZTogdGhpcy5pc1JlYWxEZXZpY2UsXG4gICAgICBzaG93WGNvZGVMb2c6IGFyZ3Muc2hvd1hjb2RlTG9nLFxuICAgICAgeGNvZGVDb25maWdGaWxlOiBhcmdzLnhjb2RlQ29uZmlnRmlsZSxcbiAgICAgIHhjb2RlT3JnSWQ6IGFyZ3MueGNvZGVPcmdJZCxcbiAgICAgIHhjb2RlU2lnbmluZ0lkOiBhcmdzLnhjb2RlU2lnbmluZ0lkLFxuICAgICAga2V5Y2hhaW5QYXRoOiBhcmdzLmtleWNoYWluUGF0aCxcbiAgICAgIGtleWNoYWluUGFzc3dvcmQ6IGFyZ3Mua2V5Y2hhaW5QYXNzd29yZCxcbiAgICAgIHVzZVNpbXBsZUJ1aWxkVGVzdDogYXJncy51c2VTaW1wbGVCdWlsZFRlc3QsXG4gICAgICB1c2VQcmVidWlsdFdEQTogYXJncy51c2VQcmVidWlsdFdEQSxcbiAgICAgIHVwZGF0ZWRXREFCdW5kbGVJZDogdGhpcy51cGRhdGVkV0RBQnVuZGxlSWQsXG4gICAgICBsYXVuY2hUaW1lb3V0OiBhcmdzLndkYUxhdW5jaFRpbWVvdXQgfHwgV0RBX0xBVU5DSF9USU1FT1VULFxuICAgICAgd2RhUmVtb3RlUG9ydDogdGhpcy53ZGFSZW1vdGVQb3J0LFxuICAgICAgdXNlWGN0ZXN0cnVuRmlsZTogdGhpcy51c2VYY3Rlc3RydW5GaWxlLFxuICAgICAgZGVyaXZlZERhdGFQYXRoOiBhcmdzLmRlcml2ZWREYXRhUGF0aCxcbiAgICAgIG1qcGVnU2VydmVyUG9ydDogdGhpcy5tanBlZ1NlcnZlclBvcnQsXG4gICAgICBhbGxvd1Byb3Zpc2lvbmluZ0RldmljZVJlZ2lzdHJhdGlvbjogYXJncy5hbGxvd1Byb3Zpc2lvbmluZ0RldmljZVJlZ2lzdHJhdGlvbixcbiAgICAgIHJlc3VsdEJ1bmRsZVBhdGg6IGFyZ3MucmVzdWx0QnVuZGxlUGF0aCxcbiAgICAgIHJlc3VsdEJ1bmRsZVZlcnNpb246IGFyZ3MucmVzdWx0QnVuZGxlVmVyc2lvbixcbiAgICB9LCB0aGlzLmxvZyk7XG4gIH1cblxuICBzZXRXREFQYXRocyAoYm9vdHN0cmFwUGF0aCwgYWdlbnRQYXRoKSB7XG4gICAgLy8gYWxsb3cgdGhlIHVzZXIgdG8gc3BlY2lmeSBhIHBsYWNlIGZvciBXREEuIFRoaXMgaXMgdW5kb2N1bWVudGVkIGFuZFxuICAgIC8vIG9ubHkgaGVyZSBmb3IgdGhlIHB1cnBvc2VzIG9mIHRlc3RpbmcgZGV2ZWxvcG1lbnQgb2YgV0RBXG4gICAgdGhpcy5ib290c3RyYXBQYXRoID0gYm9vdHN0cmFwUGF0aCB8fCBCT09UU1RSQVBfUEFUSDtcbiAgICB0aGlzLmxvZy5pbmZvKGBVc2luZyBXREEgcGF0aDogJyR7dGhpcy5ib290c3RyYXBQYXRofSdgKTtcblxuICAgIC8vIGZvciBiYWNrd2FyZCBjb21wYXRpYmlsaXR5IHdlIG5lZWQgdG8gYmUgYWJsZSB0byBzcGVjaWZ5IGFnZW50UGF0aCB0b29cbiAgICB0aGlzLmFnZW50UGF0aCA9IGFnZW50UGF0aCB8fCBwYXRoLnJlc29sdmUodGhpcy5ib290c3RyYXBQYXRoLCAnV2ViRHJpdmVyQWdlbnQueGNvZGVwcm9qJyk7XG4gICAgdGhpcy5sb2cuaW5mbyhgVXNpbmcgV0RBIGFnZW50OiAnJHt0aGlzLmFnZW50UGF0aH0nYCk7XG4gIH1cblxuICBhc3luYyBjbGVhbnVwT2Jzb2xldGVQcm9jZXNzZXMgKCkge1xuICAgIGNvbnN0IG9ic29sZXRlUGlkcyA9IGF3YWl0IGdldFBJRHNMaXN0ZW5pbmdPblBvcnQodGhpcy51cmwucG9ydCxcbiAgICAgIChjbWRMaW5lKSA9PiBjbWRMaW5lLmluY2x1ZGVzKCcvV2ViRHJpdmVyQWdlbnRSdW5uZXInKSAmJlxuICAgICAgICAhY21kTGluZS50b0xvd2VyQ2FzZSgpLmluY2x1ZGVzKHRoaXMuZGV2aWNlLnVkaWQudG9Mb3dlckNhc2UoKSkpO1xuXG4gICAgaWYgKF8uaXNFbXB0eShvYnNvbGV0ZVBpZHMpKSB7XG4gICAgICB0aGlzLmxvZy5kZWJ1ZyhgTm8gb2Jzb2xldGUgY2FjaGVkIHByb2Nlc3NlcyBmcm9tIHByZXZpb3VzIFdEQSBzZXNzaW9ucyBgICtcbiAgICAgICAgYGxpc3RlbmluZyBvbiBwb3J0ICR7dGhpcy51cmwucG9ydH0gaGF2ZSBiZWVuIGZvdW5kYCk7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdGhpcy5sb2cuaW5mbyhgRGV0ZWN0ZWQgJHtvYnNvbGV0ZVBpZHMubGVuZ3RofSBvYnNvbGV0ZSBjYWNoZWQgcHJvY2VzcyR7b2Jzb2xldGVQaWRzLmxlbmd0aCA9PT0gMSA/ICcnIDogJ2VzJ30gYCArXG4gICAgICBgZnJvbSBwcmV2aW91cyBXREEgc2Vzc2lvbnMuIENsZWFuaW5nIHRoZW0gdXBgKTtcbiAgICB0cnkge1xuICAgICAgYXdhaXQgZXhlYygna2lsbCcsIG9ic29sZXRlUGlkcyk7XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgdGhpcy5sb2cud2FybihgRmFpbGVkIHRvIGtpbGwgb2Jzb2xldGUgY2FjaGVkIHByb2Nlc3Mke29ic29sZXRlUGlkcy5sZW5ndGggPT09IDEgPyAnJyA6ICdlcyd9ICcke29ic29sZXRlUGlkc30nLiBgICtcbiAgICAgICAgYE9yaWdpbmFsIGVycm9yOiAke2UubWVzc2FnZX1gKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogUmV0dXJuIGJvb2xlYW4gaWYgV0RBIGlzIHJ1bm5pbmcgb3Igbm90XG4gICAqIEByZXR1cm4ge2Jvb2xlYW59IFRydWUgaWYgV0RBIGlzIHJ1bm5pbmdcbiAgICogQHRocm93cyB7RXJyb3J9IElmIHRoZXJlIHdhcyBpbnZhbGlkIHJlc3BvbnNlIGNvZGUgb3IgYm9keVxuICAgKi9cbiAgYXN5bmMgaXNSdW5uaW5nICgpIHtcbiAgICByZXR1cm4gISEoYXdhaXQgdGhpcy5nZXRTdGF0dXMoKSk7XG4gIH1cblxuICBnZXQgYmFzZVBhdGggKCkge1xuICAgIGlmICh0aGlzLnVybC5wYXRoID09PSAnLycpIHtcbiAgICAgIHJldHVybiAnJztcbiAgICB9XG4gICAgcmV0dXJuIHRoaXMudXJsLnBhdGggfHwgJyc7XG4gIH1cblxuICAvKipcbiAgICogUmV0dXJuIGN1cnJlbnQgcnVubmluZyBXREEncyBzdGF0dXMgbGlrZSBiZWxvd1xuICAgKiB7XG4gICAqICAgXCJzdGF0ZVwiOiBcInN1Y2Nlc3NcIixcbiAgICogICBcIm9zXCI6IHtcbiAgICogICAgIFwibmFtZVwiOiBcImlPU1wiLFxuICAgKiAgICAgXCJ2ZXJzaW9uXCI6IFwiMTEuNFwiLFxuICAgKiAgICAgXCJzZGtWZXJzaW9uXCI6IFwiMTEuM1wiXG4gICAqICAgfSxcbiAgICogICBcImlvc1wiOiB7XG4gICAqICAgICBcInNpbXVsYXRvclZlcnNpb25cIjogXCIxMS40XCIsXG4gICAqICAgICBcImlwXCI6IFwiMTcyLjI1NC45OS4zNFwiXG4gICAqICAgfSxcbiAgICogICBcImJ1aWxkXCI6IHtcbiAgICogICAgIFwidGltZVwiOiBcIkp1biAyNCAyMDE4IDE3OjA4OjIxXCIsXG4gICAqICAgICBcInByb2R1Y3RCdW5kbGVJZGVudGlmaWVyXCI6IFwiY29tLmZhY2Vib29rLldlYkRyaXZlckFnZW50UnVubmVyXCJcbiAgICogICB9XG4gICAqIH1cbiAgICpcbiAgICogQHJldHVybiB7P29iamVjdH0gU3RhdGUgT2JqZWN0XG4gICAqIEB0aHJvd3Mge0Vycm9yfSBJZiB0aGVyZSB3YXMgaW52YWxpZCByZXNwb25zZSBjb2RlIG9yIGJvZHlcbiAgICovXG4gIGFzeW5jIGdldFN0YXR1cyAoKSB7XG4gICAgY29uc3Qgbm9TZXNzaW9uUHJveHkgPSBuZXcgTm9TZXNzaW9uUHJveHkoe1xuICAgICAgc2VydmVyOiB0aGlzLnVybC5ob3N0bmFtZSxcbiAgICAgIHBvcnQ6IHRoaXMudXJsLnBvcnQsXG4gICAgICBiYXNlOiB0aGlzLmJhc2VQYXRoLFxuICAgICAgdGltZW91dDogMzAwMCxcbiAgICB9KTtcbiAgICB0cnkge1xuICAgICAgcmV0dXJuIGF3YWl0IG5vU2Vzc2lvblByb3h5LmNvbW1hbmQoJy9zdGF0dXMnLCAnR0VUJyk7XG4gICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICB0aGlzLmxvZy5kZWJ1ZyhgV0RBIGlzIG5vdCBsaXN0ZW5pbmcgYXQgJyR7dGhpcy51cmwuaHJlZn0nYCk7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogVW5pbnN0YWxsIFdEQXMgZnJvbSB0aGUgdGVzdCBkZXZpY2UuXG4gICAqIE92ZXIgWGNvZGUgMTEsIG11bHRpcGxlIFdEQSBjYW4gYmUgaW4gdGhlIGRldmljZSBzaW5jZSBYY29kZSAxMSBnZW5lcmF0ZXMgZGlmZmVyZW50IFdEQS5cbiAgICogQXBwaXVtIGRvZXMgbm90IGV4cGVjdCBtdWx0aXBsZSBXREFzIGFyZSBydW5uaW5nIG9uIGEgZGV2aWNlLlxuICAgKi9cbiAgYXN5bmMgdW5pbnN0YWxsICgpIHtcbiAgICB0cnkge1xuICAgICAgY29uc3QgYnVuZGxlSWRzID0gYXdhaXQgdGhpcy5kZXZpY2UuZ2V0VXNlckluc3RhbGxlZEJ1bmRsZUlkc0J5QnVuZGxlTmFtZShXREFfQ0ZfQlVORExFX05BTUUpO1xuICAgICAgaWYgKF8uaXNFbXB0eShidW5kbGVJZHMpKSB7XG4gICAgICAgIHRoaXMubG9nLmRlYnVnKCdObyBXREFzIG9uIHRoZSBkZXZpY2UuJyk7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgdGhpcy5sb2cuZGVidWcoYFVuaW5zdGFsbGluZyBXREFzOiAnJHtidW5kbGVJZHN9J2ApO1xuICAgICAgZm9yIChjb25zdCBidW5kbGVJZCBvZiBidW5kbGVJZHMpIHtcbiAgICAgICAgYXdhaXQgdGhpcy5kZXZpY2UucmVtb3ZlQXBwKGJ1bmRsZUlkKTtcbiAgICAgIH1cbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICB0aGlzLmxvZy5kZWJ1ZyhlKTtcbiAgICAgIHRoaXMubG9nLndhcm4oYFdlYkRyaXZlckFnZW50IHVuaW5zdGFsbCBmYWlsZWQuIFBlcmhhcHMsIGl0IGlzIGFscmVhZHkgdW5pbnN0YWxsZWQ/IGAgK1xuICAgICAgICBgT3JpZ2luYWwgZXJyb3I6ICR7ZS5tZXNzYWdlfWApO1xuICAgIH1cbiAgfVxuXG4gIGFzeW5jIF9jbGVhbnVwUHJvamVjdElmRnJlc2ggKCkge1xuICAgIGNvbnN0IGhvbWVGb2xkZXIgPSBwcm9jZXNzLmVudi5IT01FO1xuICAgIGlmICghaG9tZUZvbGRlcikge1xuICAgICAgdGhpcy5sb2cuaW5mbygnVGhlIEhPTUUgZm9sZGVyIHBhdGggY2Fubm90IGJlIGRldGVybWluZWQnKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb25zdCBjdXJyZW50VXBncmFkZVRpbWVzdGFtcCA9IGF3YWl0IGdldFdEQVVwZ3JhZGVUaW1lc3RhbXAoKTtcbiAgICBpZiAoIV8uaXNJbnRlZ2VyKGN1cnJlbnRVcGdyYWRlVGltZXN0YW1wKSkge1xuICAgICAgdGhpcy5sb2cuaW5mbygnSXQgaXMgaW1wb3NzaWJsZSB0byBkZXRlcm1pbmUgdGhlIHRpbWVzdGFtcCBvZiB0aGUgcGFja2FnZScpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvbnN0IHRpbWVzdGFtcFBhdGggPSBwYXRoLnJlc29sdmUoaG9tZUZvbGRlciwgV0RBX1VQR1JBREVfVElNRVNUQU1QX1BBVEgpO1xuICAgIGlmIChhd2FpdCBmcy5leGlzdHModGltZXN0YW1wUGF0aCkpIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIGF3YWl0IGZzLmFjY2Vzcyh0aW1lc3RhbXBQYXRoLCBmcy5XX09LKTtcbiAgICAgIH0gY2F0Y2ggKGlnbikge1xuICAgICAgICB0aGlzLmxvZy5pbmZvKGBXZWJEcml2ZXJBZ2VudCB1cGdyYWRlIHRpbWVzdGFtcCBhdCAnJHt0aW1lc3RhbXBQYXRofScgaXMgbm90IHdyaXRlYWJsZS4gYCArXG4gICAgICAgICAgYFNraXBwaW5nIHNvdXJjZXMgY2xlYW51cGApO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICBjb25zdCByZWNlbnRVcGdyYWRlVGltZXN0YW1wID0gcGFyc2VJbnQoYXdhaXQgZnMucmVhZEZpbGUodGltZXN0YW1wUGF0aCwgJ3V0ZjgnKSwgMTApO1xuICAgICAgaWYgKF8uaXNJbnRlZ2VyKHJlY2VudFVwZ3JhZGVUaW1lc3RhbXApKSB7XG4gICAgICAgIGlmIChyZWNlbnRVcGdyYWRlVGltZXN0YW1wID49IGN1cnJlbnRVcGdyYWRlVGltZXN0YW1wKSB7XG4gICAgICAgICAgdGhpcy5sb2cuaW5mbyhgV2ViRHJpdmVyQWdlbnQgZG9lcyBub3QgbmVlZCBhIGNsZWFudXAuIFRoZSBzb3VyY2VzIGFyZSB1cCB0byBkYXRlIGAgK1xuICAgICAgICAgICAgYCgke3JlY2VudFVwZ3JhZGVUaW1lc3RhbXB9ID49ICR7Y3VycmVudFVwZ3JhZGVUaW1lc3RhbXB9KWApO1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmxvZy5pbmZvKGBXZWJEcml2ZXJBZ2VudCBzb3VyY2VzIGhhdmUgYmVlbiB1cGdyYWRlZCBgICtcbiAgICAgICAgICBgKCR7cmVjZW50VXBncmFkZVRpbWVzdGFtcH0gPCAke2N1cnJlbnRVcGdyYWRlVGltZXN0YW1wfSlgKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMubG9nLndhcm4oYFRoZSByZWNlbnQgdXBncmFkZSB0aW1lc3RhbXAgYXQgJyR7dGltZXN0YW1wUGF0aH0nIGlzIGNvcnJ1cHRlZC4gVHJ5aW5nIHRvIGZpeCBpdGApO1xuICAgICAgfVxuICAgIH1cblxuICAgIHRyeSB7XG4gICAgICBhd2FpdCBta2RpcnAocGF0aC5kaXJuYW1lKHRpbWVzdGFtcFBhdGgpKTtcbiAgICAgIGF3YWl0IGZzLndyaXRlRmlsZSh0aW1lc3RhbXBQYXRoLCBgJHtjdXJyZW50VXBncmFkZVRpbWVzdGFtcH1gLCAndXRmOCcpO1xuICAgICAgdGhpcy5sb2cuZGVidWcoYFN0b3JlZCB0aGUgcmVjZW50IFdlYkRyaXZlckFnZW50IHVwZ3JhZGUgdGltZXN0YW1wICR7Y3VycmVudFVwZ3JhZGVUaW1lc3RhbXB9IGAgK1xuICAgICAgICBgYXQgJyR7dGltZXN0YW1wUGF0aH0nYCk7XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgdGhpcy5sb2cuaW5mbyhgVW5hYmxlIHRvIGNyZWF0ZSB0aGUgcmVjZW50IFdlYkRyaXZlckFnZW50IHVwZ3JhZGUgdGltZXN0YW1wIGF0ICcke3RpbWVzdGFtcFBhdGh9Jy4gYCArXG4gICAgICAgIGBPcmlnaW5hbCBlcnJvcjogJHtlLm1lc3NhZ2V9YCk7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdHJ5IHtcbiAgICAgIGF3YWl0IHRoaXMueGNvZGVidWlsZC5jbGVhblByb2plY3QoKTtcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICB0aGlzLmxvZy53YXJuKGBDYW5ub3QgcGVyZm9ybSBXZWJEcml2ZXJBZ2VudCBwcm9qZWN0IGNsZWFudXAuIE9yaWdpbmFsIGVycm9yOiAke2UubWVzc2FnZX1gKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogUmV0dXJuIGN1cnJlbnQgcnVubmluZyBXREEncyBzdGF0dXMgbGlrZSBiZWxvdyBhZnRlciBsYXVuY2hpbmcgV0RBXG4gICAqIHtcbiAgICogICBcInN0YXRlXCI6IFwic3VjY2Vzc1wiLFxuICAgKiAgIFwib3NcIjoge1xuICAgKiAgICAgXCJuYW1lXCI6IFwiaU9TXCIsXG4gICAqICAgICBcInZlcnNpb25cIjogXCIxMS40XCIsXG4gICAqICAgICBcInNka1ZlcnNpb25cIjogXCIxMS4zXCJcbiAgICogICB9LFxuICAgKiAgIFwiaW9zXCI6IHtcbiAgICogICAgIFwic2ltdWxhdG9yVmVyc2lvblwiOiBcIjExLjRcIixcbiAgICogICAgIFwiaXBcIjogXCIxNzIuMjU0Ljk5LjM0XCJcbiAgICogICB9LFxuICAgKiAgIFwiYnVpbGRcIjoge1xuICAgKiAgICAgXCJ0aW1lXCI6IFwiSnVuIDI0IDIwMTggMTc6MDg6MjFcIixcbiAgICogICAgIFwicHJvZHVjdEJ1bmRsZUlkZW50aWZpZXJcIjogXCJjb20uZmFjZWJvb2suV2ViRHJpdmVyQWdlbnRSdW5uZXJcIlxuICAgKiAgIH1cbiAgICogfVxuICAgKlxuICAgKiBAcGFyYW0ge3N0cmluZ30gc2Vzc2lvbklkIExhdW5jaCBXREEgYW5kIGVzdGFibGlzaCB0aGUgc2Vzc2lvbiB3aXRoIHRoaXMgc2Vzc2lvbklkXG4gICAqIEByZXR1cm4gez9vYmplY3R9IFN0YXRlIE9iamVjdFxuICAgKiBAdGhyb3dzIHtFcnJvcn0gSWYgdGhlcmUgd2FzIGludmFsaWQgcmVzcG9uc2UgY29kZSBvciBib2R5XG4gICAqL1xuICBhc3luYyBsYXVuY2ggKHNlc3Npb25JZCkge1xuICAgIGlmICh0aGlzLndlYkRyaXZlckFnZW50VXJsKSB7XG4gICAgICB0aGlzLmxvZy5pbmZvKGBVc2luZyBwcm92aWRlZCBXZWJkcml2ZXJBZ2VudCBhdCAnJHt0aGlzLndlYkRyaXZlckFnZW50VXJsfSdgKTtcbiAgICAgIHRoaXMudXJsID0gdGhpcy53ZWJEcml2ZXJBZ2VudFVybDtcbiAgICAgIHRoaXMuc2V0dXBQcm94aWVzKHNlc3Npb25JZCk7XG4gICAgICByZXR1cm4gYXdhaXQgdGhpcy5nZXRTdGF0dXMoKTtcbiAgICB9XG5cbiAgICB0aGlzLmxvZy5pbmZvKCdMYXVuY2hpbmcgV2ViRHJpdmVyQWdlbnQgb24gdGhlIGRldmljZScpO1xuXG4gICAgdGhpcy5zZXR1cFByb3hpZXMoc2Vzc2lvbklkKTtcblxuICAgIGlmICghdGhpcy51c2VYY3Rlc3RydW5GaWxlICYmICFhd2FpdCBmcy5leGlzdHModGhpcy5hZ2VudFBhdGgpKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYFRyeWluZyB0byB1c2UgV2ViRHJpdmVyQWdlbnQgcHJvamVjdCBhdCAnJHt0aGlzLmFnZW50UGF0aH0nIGJ1dCB0aGUgYCArXG4gICAgICAgICAgICAgICAgICAgICAgJ2ZpbGUgZG9lcyBub3QgZXhpc3QnKTtcbiAgICB9XG5cbiAgICAvLyB1c2VYY3Rlc3RydW5GaWxlIGFuZCB1c2VQcmVidWlsdFdEQSB1c2UgZXhpc3RpbmcgZGVwZW5kZW5jaWVzXG4gICAgLy8gSXQgZGVwZW5kcyBvbiB1c2VyIHNpZGVcbiAgICBpZiAodGhpcy5pZGIgfHwgdGhpcy51c2VYY3Rlc3RydW5GaWxlIHx8ICh0aGlzLmRlcml2ZWREYXRhUGF0aCAmJiB0aGlzLnVzZVByZWJ1aWx0V0RBKSkge1xuICAgICAgdGhpcy5sb2cuaW5mbygnU2tpcHBlZCBXREEgcHJvamVjdCBjbGVhbnVwIGFjY29yZGluZyB0byB0aGUgcHJvdmlkZWQgY2FwYWJpbGl0aWVzJyk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGNvbnN0IHN5bmNocm9uaXphdGlvbktleSA9IHBhdGgubm9ybWFsaXplKHRoaXMuYm9vdHN0cmFwUGF0aCk7XG4gICAgICBhd2FpdCBTSEFSRURfUkVTT1VSQ0VTX0dVQVJELmFjcXVpcmUoc3luY2hyb25pemF0aW9uS2V5LFxuICAgICAgICBhc3luYyAoKSA9PiBhd2FpdCB0aGlzLl9jbGVhbnVwUHJvamVjdElmRnJlc2goKSk7XG4gICAgfVxuXG4gICAgLy8gV2UgbmVlZCB0byBwcm92aWRlIFdEQSBsb2NhbCBwb3J0LCBiZWNhdXNlIGl0IG1pZ2h0IGJlIG9jY3VwaWVkXG4gICAgYXdhaXQgcmVzZXRUZXN0UHJvY2Vzc2VzKHRoaXMuZGV2aWNlLnVkaWQsICF0aGlzLmlzUmVhbERldmljZSk7XG5cbiAgICBpZiAodGhpcy5pZGIpIHtcbiAgICAgIHJldHVybiBhd2FpdCB0aGlzLnN0YXJ0V2l0aElEQigpO1xuICAgIH1cblxuICAgIGF3YWl0IHRoaXMueGNvZGVidWlsZC5pbml0KHRoaXMubm9TZXNzaW9uUHJveHkpO1xuXG4gICAgLy8gU3RhcnQgdGhlIHhjb2RlYnVpbGQgcHJvY2Vzc1xuICAgIGlmICh0aGlzLnByZWJ1aWxkV0RBKSB7XG4gICAgICBhd2FpdCB0aGlzLnhjb2RlYnVpbGQucHJlYnVpbGQoKTtcbiAgICB9XG4gICAgcmV0dXJuIGF3YWl0IHRoaXMueGNvZGVidWlsZC5zdGFydCgpO1xuICB9XG5cbiAgYXN5bmMgc3RhcnRXaXRoSURCICgpIHtcbiAgICB0aGlzLmxvZy5pbmZvKCdXaWxsIGxhdW5jaCBXREEgd2l0aCBpZGIgaW5zdGVhZCBvZiB4Y29kZWJ1aWxkIHNpbmNlIHRoZSBjb3JyZXNwb25kaW5nIGZsYWcgaXMgZW5hYmxlZCcpO1xuICAgIGNvbnN0IHt3ZGFCdW5kbGVJZCwgdGVzdEJ1bmRsZUlkfSA9IGF3YWl0IHRoaXMucHJlcGFyZVdEQSgpO1xuICAgIGNvbnN0IGVudiA9IHtcbiAgICAgIFVTRV9QT1JUOiB0aGlzLndkYVJlbW90ZVBvcnQsXG4gICAgICBXREFfUFJPRFVDVF9CVU5ETEVfSURFTlRJRklFUjogdGhpcy51cGRhdGVkV0RBQnVuZGxlSWQsXG4gICAgfTtcbiAgICBpZiAodGhpcy5tanBlZ1NlcnZlclBvcnQpIHtcbiAgICAgIGVudi5NSlBFR19TRVJWRVJfUE9SVCA9IHRoaXMubWpwZWdTZXJ2ZXJQb3J0O1xuICAgIH1cblxuICAgIHJldHVybiBhd2FpdCB0aGlzLmlkYi5ydW5YQ1VJVGVzdCh3ZGFCdW5kbGVJZCwgd2RhQnVuZGxlSWQsIHRlc3RCdW5kbGVJZCwge2Vudn0pO1xuICB9XG5cbiAgYXN5bmMgcGFyc2VCdW5kbGVJZCAod2RhQnVuZGxlUGF0aCkge1xuICAgIGNvbnN0IGluZm9QbGlzdFBhdGggPSBwYXRoLmpvaW4od2RhQnVuZGxlUGF0aCwgJ0luZm8ucGxpc3QnKTtcbiAgICBjb25zdCBpbmZvUGxpc3QgPSBhd2FpdCBwbGlzdC5wYXJzZVBsaXN0KGF3YWl0IGZzLnJlYWRGaWxlKGluZm9QbGlzdFBhdGgpKTtcbiAgICBpZiAoIWluZm9QbGlzdC5DRkJ1bmRsZUlkZW50aWZpZXIpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgQ291bGQgbm90IGZpbmQgYnVuZGxlIGlkIGluICcke2luZm9QbGlzdFBhdGh9J2ApO1xuICAgIH1cbiAgICByZXR1cm4gaW5mb1BsaXN0LkNGQnVuZGxlSWRlbnRpZmllcjtcbiAgfVxuXG4gIGFzeW5jIHByZXBhcmVXREEgKCkge1xuICAgIGNvbnN0IHdkYUJ1bmRsZVBhdGggPSB0aGlzLndkYUJ1bmRsZVBhdGggfHwgYXdhaXQgdGhpcy5mZXRjaFdEQUJ1bmRsZSgpO1xuICAgIGNvbnN0IHdkYUJ1bmRsZUlkID0gYXdhaXQgdGhpcy5wYXJzZUJ1bmRsZUlkKHdkYUJ1bmRsZVBhdGgpO1xuICAgIGlmICghYXdhaXQgdGhpcy5kZXZpY2UuaXNBcHBJbnN0YWxsZWQod2RhQnVuZGxlSWQpKSB7XG4gICAgICBhd2FpdCB0aGlzLmRldmljZS5pbnN0YWxsQXBwKHdkYUJ1bmRsZVBhdGgpO1xuICAgIH1cbiAgICBjb25zdCB0ZXN0QnVuZGxlSWQgPSBhd2FpdCB0aGlzLmlkYi5pbnN0YWxsWENUZXN0QnVuZGxlKHBhdGguam9pbih3ZGFCdW5kbGVQYXRoLCAnUGx1Z0lucycsICdXZWJEcml2ZXJBZ2VudFJ1bm5lci54Y3Rlc3QnKSk7XG4gICAgcmV0dXJuIHt3ZGFCdW5kbGVJZCwgdGVzdEJ1bmRsZUlkLCB3ZGFCdW5kbGVQYXRofTtcbiAgfVxuXG4gIGFzeW5jIGZldGNoV0RBQnVuZGxlICgpIHtcbiAgICBpZiAoIXRoaXMuZGVyaXZlZERhdGFQYXRoKSB7XG4gICAgICByZXR1cm4gYXdhaXQgYnVuZGxlV0RBU2ltKHRoaXMueGNvZGVidWlsZCk7XG4gICAgfVxuICAgIGNvbnN0IHdkYUJ1bmRsZVBhdGhzID0gYXdhaXQgZnMuZ2xvYihgJHt0aGlzLmRlcml2ZWREYXRhUGF0aH0vKiovKiR7V0RBX1JVTk5FUl9BUFB9L2AsIHtcbiAgICAgIGFic29sdXRlOiB0cnVlLFxuICAgIH0pO1xuICAgIGlmIChfLmlzRW1wdHkod2RhQnVuZGxlUGF0aHMpKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYENvdWxkIG5vdCBmaW5kIHRoZSBXREEgYnVuZGxlIGluICcke3RoaXMuZGVyaXZlZERhdGFQYXRofSdgKTtcbiAgICB9XG4gICAgcmV0dXJuIHdkYUJ1bmRsZVBhdGhzWzBdO1xuICB9XG5cbiAgYXN5bmMgaXNTb3VyY2VGcmVzaCAoKSB7XG4gICAgY29uc3QgZXhpc3RzUHJvbWlzZXMgPSBbXG4gICAgICAnUmVzb3VyY2VzJyxcbiAgICAgIGBSZXNvdXJjZXMke3BhdGguc2VwfVdlYkRyaXZlckFnZW50LmJ1bmRsZWAsXG4gICAgXS5tYXAoKHN1YlBhdGgpID0+IGZzLmV4aXN0cyhwYXRoLnJlc29sdmUodGhpcy5ib290c3RyYXBQYXRoLCBzdWJQYXRoKSkpO1xuICAgIHJldHVybiAoYXdhaXQgQi5hbGwoZXhpc3RzUHJvbWlzZXMpKS5zb21lKCh2KSA9PiB2ID09PSBmYWxzZSk7XG4gIH1cblxuICBzZXR1cFByb3hpZXMgKHNlc3Npb25JZCkge1xuICAgIGNvbnN0IHByb3h5T3B0cyA9IHtcbiAgICAgIGxvZzogdGhpcy5sb2csXG4gICAgICBzZXJ2ZXI6IHRoaXMudXJsLmhvc3RuYW1lLFxuICAgICAgcG9ydDogdGhpcy51cmwucG9ydCxcbiAgICAgIGJhc2U6IHRoaXMuYmFzZVBhdGgsXG4gICAgICB0aW1lb3V0OiB0aGlzLndkYUNvbm5lY3Rpb25UaW1lb3V0LFxuICAgICAga2VlcEFsaXZlOiB0cnVlLFxuICAgIH07XG5cbiAgICB0aGlzLmp3cHJveHkgPSBuZXcgSldQcm94eShwcm94eU9wdHMpO1xuICAgIHRoaXMuandwcm94eS5zZXNzaW9uSWQgPSBzZXNzaW9uSWQ7XG4gICAgdGhpcy5wcm94eVJlcVJlcyA9IHRoaXMuandwcm94eS5wcm94eVJlcVJlcy5iaW5kKHRoaXMuandwcm94eSk7XG5cbiAgICB0aGlzLm5vU2Vzc2lvblByb3h5ID0gbmV3IE5vU2Vzc2lvblByb3h5KHByb3h5T3B0cyk7XG4gIH1cblxuICBhc3luYyBxdWl0ICgpIHtcbiAgICB0aGlzLmxvZy5pbmZvKCdTaHV0dGluZyBkb3duIHN1Yi1wcm9jZXNzZXMnKTtcblxuICAgIGF3YWl0IHRoaXMueGNvZGVidWlsZC5xdWl0KCk7XG4gICAgYXdhaXQgdGhpcy54Y29kZWJ1aWxkLnJlc2V0KCk7XG5cbiAgICBpZiAodGhpcy5qd3Byb3h5KSB7XG4gICAgICB0aGlzLmp3cHJveHkuc2Vzc2lvbklkID0gbnVsbDtcbiAgICB9XG5cbiAgICB0aGlzLnN0YXJ0ZWQgPSBmYWxzZTtcblxuICAgIGlmICghdGhpcy5hcmdzLndlYkRyaXZlckFnZW50VXJsKSB7XG4gICAgICAvLyBpZiB3ZSBwb3B1bGF0ZWQgdGhlIHVybCBvdXJzZWx2ZXMgKGR1cmluZyBgc2V0dXBDYWNoaW5nYCBjYWxsLCBmb3IgaW5zdGFuY2UpXG4gICAgICAvLyB0aGVuIGNsZWFuIHRoYXQgdXAuIElmIHRoZSB1cmwgd2FzIHN1cHBsaWVkLCB3ZSB3YW50IHRvIGtlZXAgaXRcbiAgICAgIHRoaXMud2ViRHJpdmVyQWdlbnRVcmwgPSBudWxsO1xuICAgIH1cbiAgfVxuXG4gIGdldCB1cmwgKCkge1xuICAgIGlmICghdGhpcy5fdXJsKSB7XG4gICAgICBpZiAodGhpcy53ZWJEcml2ZXJBZ2VudFVybCkge1xuICAgICAgICB0aGlzLl91cmwgPSB1cmwucGFyc2UodGhpcy53ZWJEcml2ZXJBZ2VudFVybCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBjb25zdCBwb3J0ID0gdGhpcy53ZGFMb2NhbFBvcnQgfHwgV0RBX0FHRU5UX1BPUlQ7XG4gICAgICAgIGNvbnN0IHtwcm90b2NvbCwgaG9zdG5hbWV9ID0gdXJsLnBhcnNlKHRoaXMud2RhQmFzZVVybCB8fCBXREFfQkFTRV9VUkwpO1xuICAgICAgICB0aGlzLl91cmwgPSB1cmwucGFyc2UoYCR7cHJvdG9jb2x9Ly8ke2hvc3RuYW1lfToke3BvcnR9YCk7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiB0aGlzLl91cmw7XG4gIH1cblxuICBzZXQgdXJsIChfdXJsKSB7XG4gICAgdGhpcy5fdXJsID0gdXJsLnBhcnNlKF91cmwpO1xuICB9XG5cbiAgZ2V0IGZ1bGx5U3RhcnRlZCAoKSB7XG4gICAgcmV0dXJuIHRoaXMuc3RhcnRlZDtcbiAgfVxuXG4gIHNldCBmdWxseVN0YXJ0ZWQgKHN0YXJ0ZWQgPSBmYWxzZSkge1xuICAgIHRoaXMuc3RhcnRlZCA9IHN0YXJ0ZWQ7XG4gIH1cblxuICBhc3luYyByZXRyaWV2ZURlcml2ZWREYXRhUGF0aCAoKSB7XG4gICAgcmV0dXJuIGF3YWl0IHRoaXMueGNvZGVidWlsZC5yZXRyaWV2ZURlcml2ZWREYXRhUGF0aCgpO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldXNlIHJ1bm5pbmcgV0RBIGlmIGl0IGhhcyB0aGUgc2FtZSBidW5kbGUgaWQgd2l0aCB1cGRhdGVkV0RBQnVuZGxlSWQuXG4gICAqIE9yIHJldXNlIGl0IGlmIGl0IGhhcyB0aGUgZGVmYXVsdCBpZCB3aXRob3V0IHVwZGF0ZWRXREFCdW5kbGVJZC5cbiAgICogVW5pbnN0YWxsIGl0IGlmIHRoZSBtZXRob2QgZmFjZXMgYW4gZXhjZXB0aW9uIGZvciB0aGUgYWJvdmUgc2l0dWF0aW9uLlxuICAgKlxuICAgKiBAcGFyYW0ge3N0cmluZ30gdXBkYXRlZFdEQUJ1bmRsZUlkIEJ1bmRsZUlkIHlvdSdkIGxpa2UgdG8gdXNlXG4gICAqL1xuICBhc3luYyBzZXR1cENhY2hpbmcgKCkge1xuICAgIGNvbnN0IHN0YXR1cyA9IGF3YWl0IHRoaXMuZ2V0U3RhdHVzKCk7XG4gICAgaWYgKCFzdGF0dXMgfHwgIXN0YXR1cy5idWlsZCkge1xuICAgICAgdGhpcy5sb2cuZGVidWcoJ1dEQSBpcyBjdXJyZW50bHkgbm90IHJ1bm5pbmcuIFRoZXJlIGlzIG5vdGhpbmcgdG8gY2FjaGUnKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb25zdCB7XG4gICAgICBwcm9kdWN0QnVuZGxlSWRlbnRpZmllcixcbiAgICAgIHVwZ3JhZGVkQXQsXG4gICAgfSA9IHN0YXR1cy5idWlsZDtcbiAgICAvLyBmb3IgcmVhbCBkZXZpY2VcbiAgICBpZiAodXRpbC5oYXNWYWx1ZShwcm9kdWN0QnVuZGxlSWRlbnRpZmllcikgJiYgdXRpbC5oYXNWYWx1ZSh0aGlzLnVwZGF0ZWRXREFCdW5kbGVJZCkgJiYgdGhpcy51cGRhdGVkV0RBQnVuZGxlSWQgIT09IHByb2R1Y3RCdW5kbGVJZGVudGlmaWVyKSB7XG4gICAgICB0aGlzLmxvZy5pbmZvKGBXaWxsIHVuaW5zdGFsbCBydW5uaW5nIFdEQSBzaW5jZSBpdCBoYXMgZGlmZmVyZW50IGJ1bmRsZSBpZC4gVGhlIGFjdHVhbCB2YWx1ZSBpcyAnJHtwcm9kdWN0QnVuZGxlSWRlbnRpZmllcn0nLmApO1xuICAgICAgcmV0dXJuIGF3YWl0IHRoaXMudW5pbnN0YWxsKCk7XG4gICAgfVxuICAgIC8vIGZvciBzaW11bGF0b3JcbiAgICBpZiAodXRpbC5oYXNWYWx1ZShwcm9kdWN0QnVuZGxlSWRlbnRpZmllcikgJiYgIXV0aWwuaGFzVmFsdWUodGhpcy51cGRhdGVkV0RBQnVuZGxlSWQpICYmIFdEQV9SVU5ORVJfQlVORExFX0lEICE9PSBwcm9kdWN0QnVuZGxlSWRlbnRpZmllcikge1xuICAgICAgdGhpcy5sb2cuaW5mbyhgV2lsbCB1bmluc3RhbGwgcnVubmluZyBXREEgc2luY2UgaXRzIGJ1bmRsZSBpZCBpcyBub3QgZXF1YWwgdG8gdGhlIGRlZmF1bHQgdmFsdWUgJHtXREFfUlVOTkVSX0JVTkRMRV9JRH1gKTtcbiAgICAgIHJldHVybiBhd2FpdCB0aGlzLnVuaW5zdGFsbCgpO1xuICAgIH1cblxuICAgIGNvbnN0IGFjdHVhbFVwZ3JhZGVUaW1lc3RhbXAgPSBhd2FpdCBnZXRXREFVcGdyYWRlVGltZXN0YW1wKCk7XG4gICAgdGhpcy5sb2cuZGVidWcoYFVwZ3JhZGUgdGltZXN0YW1wIG9mIHRoZSBjdXJyZW50bHkgYnVuZGxlZCBXREE6ICR7YWN0dWFsVXBncmFkZVRpbWVzdGFtcH1gKTtcbiAgICB0aGlzLmxvZy5kZWJ1ZyhgVXBncmFkZSB0aW1lc3RhbXAgb2YgdGhlIFdEQSBvbiB0aGUgZGV2aWNlOiAke3VwZ3JhZGVkQXR9YCk7XG4gICAgaWYgKGFjdHVhbFVwZ3JhZGVUaW1lc3RhbXAgJiYgdXBncmFkZWRBdCAmJiBfLnRvTG93ZXIoYCR7YWN0dWFsVXBncmFkZVRpbWVzdGFtcH1gKSAhPT0gXy50b0xvd2VyKGAke3VwZ3JhZGVkQXR9YCkpIHtcbiAgICAgIHRoaXMubG9nLmluZm8oJ1dpbGwgdW5pbnN0YWxsIHJ1bm5pbmcgV0RBIHNpbmNlIGl0IGhhcyBkaWZmZXJlbnQgdmVyc2lvbiBpbiBjb21wYXJpc29uIHRvIHRoZSBvbmUgJyArXG4gICAgICAgIGB3aGljaCBpcyBidW5kbGVkIHdpdGggYXBwaXVtLXhjdWl0ZXN0LWRyaXZlciBtb2R1bGUgKCR7YWN0dWFsVXBncmFkZVRpbWVzdGFtcH0gIT0gJHt1cGdyYWRlZEF0fSlgKTtcbiAgICAgIHJldHVybiBhd2FpdCB0aGlzLnVuaW5zdGFsbCgpO1xuICAgIH1cblxuICAgIGNvbnN0IG1lc3NhZ2UgPSB1dGlsLmhhc1ZhbHVlKHByb2R1Y3RCdW5kbGVJZGVudGlmaWVyKVxuICAgICAgPyBgV2lsbCByZXVzZSBwcmV2aW91c2x5IGNhY2hlZCBXREEgaW5zdGFuY2UgYXQgJyR7dGhpcy51cmwuaHJlZn0nIHdpdGggJyR7cHJvZHVjdEJ1bmRsZUlkZW50aWZpZXJ9J2BcbiAgICAgIDogYFdpbGwgcmV1c2UgcHJldmlvdXNseSBjYWNoZWQgV0RBIGluc3RhbmNlIGF0ICcke3RoaXMudXJsLmhyZWZ9J2A7XG4gICAgdGhpcy5sb2cuaW5mbyhgJHttZXNzYWdlfS4gU2V0IHRoZSB3ZGFMb2NhbFBvcnQgY2FwYWJpbGl0eSB0byBhIHZhbHVlIGRpZmZlcmVudCBmcm9tICR7dGhpcy51cmwucG9ydH0gaWYgdGhpcyBpcyBhbiB1bmRlc2lyZWQgYmVoYXZpb3IuYCk7XG4gICAgdGhpcy53ZWJEcml2ZXJBZ2VudFVybCA9IHRoaXMudXJsLmhyZWY7XG4gIH1cblxuICAvKipcbiAgICogUXVpdCBhbmQgdW5pbnN0YWxsIHJ1bm5pbmcgV0RBLlxuICAgKi9cbiAgYXN5bmMgcXVpdEFuZFVuaW5zdGFsbCAoKSB7XG4gICAgYXdhaXQgdGhpcy5xdWl0KCk7XG4gICAgYXdhaXQgdGhpcy51bmluc3RhbGwoKTtcbiAgfVxufVxuXG5leHBvcnQgZGVmYXVsdCBXZWJEcml2ZXJBZ2VudDtcbmV4cG9ydCB7IFdlYkRyaXZlckFnZW50IH07XG4iXSwiZmlsZSI6ImxpYi93ZWJkcml2ZXJhZ2VudC5qcyIsInNvdXJjZVJvb3QiOiIuLi8uLiJ9
|
|
454
|
+
//# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibGliL3dlYmRyaXZlcmFnZW50LmpzIiwibmFtZXMiOlsiV0RBX0xBVU5DSF9USU1FT1VUIiwiV0RBX0FHRU5UX1BPUlQiLCJXREFfQ0ZfQlVORExFX05BTUUiLCJTSEFSRURfUkVTT1VSQ0VTX0dVQVJEIiwiQXN5bmNMb2NrIiwiV2ViRHJpdmVyQWdlbnQiLCJjb25zdHJ1Y3RvciIsInhjb2RlVmVyc2lvbiIsImFyZ3MiLCJsb2ciLCJfIiwiY2xvbmUiLCJkZWZhdWx0TG9nZ2VyIiwiZGV2aWNlIiwicGxhdGZvcm1WZXJzaW9uIiwicGxhdGZvcm1OYW1lIiwiaW9zU2RrVmVyc2lvbiIsImhvc3QiLCJpc1JlYWxEZXZpY2UiLCJyZWFsRGV2aWNlIiwiaWRiIiwid2RhQnVuZGxlUGF0aCIsInNldFdEQVBhdGhzIiwiYm9vdHN0cmFwUGF0aCIsImFnZW50UGF0aCIsIndkYUxvY2FsUG9ydCIsIndkYVJlbW90ZVBvcnQiLCJ3ZGFCYXNlVXJsIiwiV0RBX0JBU0VfVVJMIiwicHJlYnVpbGRXREEiLCJ3ZWJEcml2ZXJBZ2VudFVybCIsInN0YXJ0ZWQiLCJ3ZGFDb25uZWN0aW9uVGltZW91dCIsInVzZVhjdGVzdHJ1bkZpbGUiLCJ1c2VQcmVidWlsdFdEQSIsImRlcml2ZWREYXRhUGF0aCIsIm1qcGVnU2VydmVyUG9ydCIsInVwZGF0ZWRXREFCdW5kbGVJZCIsInhjb2RlYnVpbGQiLCJYY29kZUJ1aWxkIiwic2hvd1hjb2RlTG9nIiwieGNvZGVDb25maWdGaWxlIiwieGNvZGVPcmdJZCIsInhjb2RlU2lnbmluZ0lkIiwia2V5Y2hhaW5QYXRoIiwia2V5Y2hhaW5QYXNzd29yZCIsInVzZVNpbXBsZUJ1aWxkVGVzdCIsImxhdW5jaFRpbWVvdXQiLCJ3ZGFMYXVuY2hUaW1lb3V0IiwiYWxsb3dQcm92aXNpb25pbmdEZXZpY2VSZWdpc3RyYXRpb24iLCJyZXN1bHRCdW5kbGVQYXRoIiwicmVzdWx0QnVuZGxlVmVyc2lvbiIsIkJPT1RTVFJBUF9QQVRIIiwiaW5mbyIsInBhdGgiLCJyZXNvbHZlIiwiY2xlYW51cE9ic29sZXRlUHJvY2Vzc2VzIiwib2Jzb2xldGVQaWRzIiwidXJsIiwicG9ydCIsImNtZExpbmUiLCJpbmNsdWRlcyIsInRvTG93ZXJDYXNlIiwidWRpZCIsImlzRW1wdHkiLCJkZWJ1ZyIsImxlbmd0aCIsImUiLCJ3YXJuIiwibWVzc2FnZSIsImlzUnVubmluZyIsImdldFN0YXR1cyIsImJhc2VQYXRoIiwibm9TZXNzaW9uUHJveHkiLCJOb1Nlc3Npb25Qcm94eSIsInNlcnZlciIsImhvc3RuYW1lIiwiYmFzZSIsInRpbWVvdXQiLCJjb21tYW5kIiwiZXJyIiwiaHJlZiIsInVuaW5zdGFsbCIsImJ1bmRsZUlkcyIsImdldFVzZXJJbnN0YWxsZWRCdW5kbGVJZHNCeUJ1bmRsZU5hbWUiLCJidW5kbGVJZCIsInJlbW92ZUFwcCIsIl9jbGVhbnVwUHJvamVjdElmRnJlc2giLCJob21lRm9sZGVyIiwicHJvY2VzcyIsImVudiIsIkhPTUUiLCJjdXJyZW50VXBncmFkZVRpbWVzdGFtcCIsImlzSW50ZWdlciIsInRpbWVzdGFtcFBhdGgiLCJXREFfVVBHUkFERV9USU1FU1RBTVBfUEFUSCIsImRpZFRpbWVzdGFtcEV4aXN0IiwiZnMiLCJleGlzdHMiLCJhY2Nlc3MiLCJXX09LIiwiaWduIiwicmVjZW50VXBncmFkZVRpbWVzdGFtcCIsInBhcnNlSW50IiwicmVhZEZpbGUiLCJkaXJuYW1lIiwid3JpdGVGaWxlIiwiY2xlYW5Qcm9qZWN0IiwibGF1bmNoIiwic2Vzc2lvbklkIiwic2V0dXBQcm94aWVzIiwiRXJyb3IiLCJzeW5jaHJvbml6YXRpb25LZXkiLCJub3JtYWxpemUiLCJhY3F1aXJlIiwic3RhcnRXaXRoSURCIiwiaW5pdCIsInByZWJ1aWxkIiwic3RhcnQiLCJ3ZGFCdW5kbGVJZCIsInRlc3RCdW5kbGVJZCIsInByZXBhcmVXREEiLCJVU0VfUE9SVCIsIldEQV9QUk9EVUNUX0JVTkRMRV9JREVOVElGSUVSIiwiTUpQRUdfU0VSVkVSX1BPUlQiLCJydW5YQ1VJVGVzdCIsInBhcnNlQnVuZGxlSWQiLCJpbmZvUGxpc3RQYXRoIiwiam9pbiIsImluZm9QbGlzdCIsInBsaXN0IiwicGFyc2VQbGlzdCIsIkNGQnVuZGxlSWRlbnRpZmllciIsImZldGNoV0RBQnVuZGxlIiwiaXNBcHBJbnN0YWxsZWQiLCJpbnN0YWxsQXBwIiwiaW5zdGFsbFhDVGVzdEJ1bmRsZSIsIndkYUJ1bmRsZVBhdGhzIiwiZ2xvYiIsIldEQV9SVU5ORVJfQVBQIiwiYWJzb2x1dGUiLCJpc1NvdXJjZUZyZXNoIiwiZXhpc3RzUHJvbWlzZXMiLCJzZXAiLCJtYXAiLCJzdWJQYXRoIiwiQiIsImFsbCIsInNvbWUiLCJ2IiwicHJveHlPcHRzIiwia2VlcEFsaXZlIiwiandwcm94eSIsIkpXUHJveHkiLCJwcm94eVJlcVJlcyIsImJpbmQiLCJxdWl0IiwicmVzZXQiLCJfdXJsIiwicGFyc2UiLCJwcm90b2NvbCIsImZ1bGx5U3RhcnRlZCIsInJldHJpZXZlRGVyaXZlZERhdGFQYXRoIiwic2V0dXBDYWNoaW5nIiwic3RhdHVzIiwiYnVpbGQiLCJwcm9kdWN0QnVuZGxlSWRlbnRpZmllciIsInVwZ3JhZGVkQXQiLCJ1dGlsIiwiaGFzVmFsdWUiLCJXREFfUlVOTkVSX0JVTkRMRV9JRCIsImFjdHVhbFVwZ3JhZGVUaW1lc3RhbXAiLCJ0b0xvd2VyIiwicXVpdEFuZFVuaW5zdGFsbCJdLCJzb3VyY2VSb290IjoiLi4vLi4iLCJzb3VyY2VzIjpbImxpYi93ZWJkcml2ZXJhZ2VudC5qcyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgXyBmcm9tICdsb2Rhc2gnO1xuaW1wb3J0IHBhdGggZnJvbSAncGF0aCc7XG5pbXBvcnQgdXJsIGZyb20gJ3VybCc7XG5pbXBvcnQgQiBmcm9tICdibHVlYmlyZCc7XG5pbXBvcnQgeyBKV1Byb3h5IH0gZnJvbSAnQGFwcGl1bS9iYXNlLWRyaXZlcic7XG5pbXBvcnQgeyBmcywgdXRpbCwgcGxpc3QsIG1rZGlycCB9IGZyb20gJ0BhcHBpdW0vc3VwcG9ydCc7XG5pbXBvcnQgZGVmYXVsdExvZ2dlciBmcm9tICcuL2xvZ2dlcic7XG5pbXBvcnQgeyBOb1Nlc3Npb25Qcm94eSB9IGZyb20gJy4vbm8tc2Vzc2lvbi1wcm94eSc7XG5pbXBvcnQge1xuICBnZXRXREFVcGdyYWRlVGltZXN0YW1wLCByZXNldFRlc3RQcm9jZXNzZXMsIGdldFBJRHNMaXN0ZW5pbmdPblBvcnRcbn0gZnJvbSAnLi91dGlscyc7XG5pbXBvcnQgWGNvZGVCdWlsZCBmcm9tICcuL3hjb2RlYnVpbGQnO1xuaW1wb3J0IEFzeW5jTG9jayBmcm9tICdhc3luYy1sb2NrJztcbmltcG9ydCB7IGV4ZWMgfSBmcm9tICd0ZWVuX3Byb2Nlc3MnO1xuaW1wb3J0IHsgYnVuZGxlV0RBU2ltIH0gZnJvbSAnLi9jaGVjay1kZXBlbmRlbmNpZXMnO1xuaW1wb3J0IHtcbiAgQk9PVFNUUkFQX1BBVEgsIFdEQV9SVU5ORVJfQlVORExFX0lELCBXREFfUlVOTkVSX0FQUCxcbiAgV0RBX0JBU0VfVVJMLCBXREFfVVBHUkFERV9USU1FU1RBTVBfUEFUSCxcbn0gZnJvbSAnLi9jb25zdGFudHMnO1xuXG5jb25zdCBXREFfTEFVTkNIX1RJTUVPVVQgPSA2MCAqIDEwMDA7XG5jb25zdCBXREFfQUdFTlRfUE9SVCA9IDgxMDA7XG5jb25zdCBXREFfQ0ZfQlVORExFX05BTUUgPSAnV2ViRHJpdmVyQWdlbnRSdW5uZXItUnVubmVyJztcbmNvbnN0IFNIQVJFRF9SRVNPVVJDRVNfR1VBUkQgPSBuZXcgQXN5bmNMb2NrKCk7XG5cbmNsYXNzIFdlYkRyaXZlckFnZW50IHtcbiAgY29uc3RydWN0b3IgKHhjb2RlVmVyc2lvbiwgYXJncyA9IHt9LCBsb2cgPSBudWxsKSB7XG4gICAgdGhpcy54Y29kZVZlcnNpb24gPSB4Y29kZVZlcnNpb247XG5cbiAgICB0aGlzLmFyZ3MgPSBfLmNsb25lKGFyZ3MpO1xuICAgIHRoaXMubG9nID0gbG9nID8/IGRlZmF1bHRMb2dnZXI7XG5cbiAgICB0aGlzLmRldmljZSA9IGFyZ3MuZGV2aWNlO1xuICAgIHRoaXMucGxhdGZvcm1WZXJzaW9uID0gYXJncy5wbGF0Zm9ybVZlcnNpb247XG4gICAgdGhpcy5wbGF0Zm9ybU5hbWUgPSBhcmdzLnBsYXRmb3JtTmFtZTtcbiAgICB0aGlzLmlvc1Nka1ZlcnNpb24gPSBhcmdzLmlvc1Nka1ZlcnNpb247XG4gICAgdGhpcy5ob3N0ID0gYXJncy5ob3N0O1xuICAgIHRoaXMuaXNSZWFsRGV2aWNlID0gISFhcmdzLnJlYWxEZXZpY2U7XG4gICAgdGhpcy5pZGIgPSAoYXJncy5kZXZpY2UgfHwge30pLmlkYjtcbiAgICB0aGlzLndkYUJ1bmRsZVBhdGggPSBhcmdzLndkYUJ1bmRsZVBhdGg7XG5cbiAgICB0aGlzLnNldFdEQVBhdGhzKGFyZ3MuYm9vdHN0cmFwUGF0aCwgYXJncy5hZ2VudFBhdGgpO1xuXG4gICAgdGhpcy53ZGFMb2NhbFBvcnQgPSBhcmdzLndkYUxvY2FsUG9ydDtcbiAgICB0aGlzLndkYVJlbW90ZVBvcnQgPSBhcmdzLndkYUxvY2FsUG9ydCB8fCBXREFfQUdFTlRfUE9SVDtcbiAgICB0aGlzLndkYUJhc2VVcmwgPSBhcmdzLndkYUJhc2VVcmwgfHwgV0RBX0JBU0VfVVJMO1xuXG4gICAgdGhpcy5wcmVidWlsZFdEQSA9IGFyZ3MucHJlYnVpbGRXREE7XG5cbiAgICB0aGlzLndlYkRyaXZlckFnZW50VXJsID0gYXJncy53ZWJEcml2ZXJBZ2VudFVybDtcblxuICAgIHRoaXMuc3RhcnRlZCA9IGZhbHNlO1xuXG4gICAgdGhpcy53ZGFDb25uZWN0aW9uVGltZW91dCA9IGFyZ3Mud2RhQ29ubmVjdGlvblRpbWVvdXQ7XG5cbiAgICB0aGlzLnVzZVhjdGVzdHJ1bkZpbGUgPSBhcmdzLnVzZVhjdGVzdHJ1bkZpbGU7XG4gICAgdGhpcy51c2VQcmVidWlsdFdEQSA9IGFyZ3MudXNlUHJlYnVpbHRXREE7XG4gICAgdGhpcy5kZXJpdmVkRGF0YVBhdGggPSBhcmdzLmRlcml2ZWREYXRhUGF0aDtcbiAgICB0aGlzLm1qcGVnU2VydmVyUG9ydCA9IGFyZ3MubWpwZWdTZXJ2ZXJQb3J0O1xuXG4gICAgdGhpcy51cGRhdGVkV0RBQnVuZGxlSWQgPSBhcmdzLnVwZGF0ZWRXREFCdW5kbGVJZDtcblxuICAgIHRoaXMueGNvZGVidWlsZCA9IG5ldyBYY29kZUJ1aWxkKHRoaXMueGNvZGVWZXJzaW9uLCB0aGlzLmRldmljZSwge1xuICAgICAgcGxhdGZvcm1WZXJzaW9uOiB0aGlzLnBsYXRmb3JtVmVyc2lvbixcbiAgICAgIHBsYXRmb3JtTmFtZTogdGhpcy5wbGF0Zm9ybU5hbWUsXG4gICAgICBpb3NTZGtWZXJzaW9uOiB0aGlzLmlvc1Nka1ZlcnNpb24sXG4gICAgICBhZ2VudFBhdGg6IHRoaXMuYWdlbnRQYXRoLFxuICAgICAgYm9vdHN0cmFwUGF0aDogdGhpcy5ib290c3RyYXBQYXRoLFxuICAgICAgcmVhbERldmljZTogdGhpcy5pc1JlYWxEZXZpY2UsXG4gICAgICBzaG93WGNvZGVMb2c6IGFyZ3Muc2hvd1hjb2RlTG9nLFxuICAgICAgeGNvZGVDb25maWdGaWxlOiBhcmdzLnhjb2RlQ29uZmlnRmlsZSxcbiAgICAgIHhjb2RlT3JnSWQ6IGFyZ3MueGNvZGVPcmdJZCxcbiAgICAgIHhjb2RlU2lnbmluZ0lkOiBhcmdzLnhjb2RlU2lnbmluZ0lkLFxuICAgICAga2V5Y2hhaW5QYXRoOiBhcmdzLmtleWNoYWluUGF0aCxcbiAgICAgIGtleWNoYWluUGFzc3dvcmQ6IGFyZ3Mua2V5Y2hhaW5QYXNzd29yZCxcbiAgICAgIHVzZVNpbXBsZUJ1aWxkVGVzdDogYXJncy51c2VTaW1wbGVCdWlsZFRlc3QsXG4gICAgICB1c2VQcmVidWlsdFdEQTogYXJncy51c2VQcmVidWlsdFdEQSxcbiAgICAgIHVwZGF0ZWRXREFCdW5kbGVJZDogdGhpcy51cGRhdGVkV0RBQnVuZGxlSWQsXG4gICAgICBsYXVuY2hUaW1lb3V0OiBhcmdzLndkYUxhdW5jaFRpbWVvdXQgfHwgV0RBX0xBVU5DSF9USU1FT1VULFxuICAgICAgd2RhUmVtb3RlUG9ydDogdGhpcy53ZGFSZW1vdGVQb3J0LFxuICAgICAgdXNlWGN0ZXN0cnVuRmlsZTogdGhpcy51c2VYY3Rlc3RydW5GaWxlLFxuICAgICAgZGVyaXZlZERhdGFQYXRoOiBhcmdzLmRlcml2ZWREYXRhUGF0aCxcbiAgICAgIG1qcGVnU2VydmVyUG9ydDogdGhpcy5tanBlZ1NlcnZlclBvcnQsXG4gICAgICBhbGxvd1Byb3Zpc2lvbmluZ0RldmljZVJlZ2lzdHJhdGlvbjogYXJncy5hbGxvd1Byb3Zpc2lvbmluZ0RldmljZVJlZ2lzdHJhdGlvbixcbiAgICAgIHJlc3VsdEJ1bmRsZVBhdGg6IGFyZ3MucmVzdWx0QnVuZGxlUGF0aCxcbiAgICAgIHJlc3VsdEJ1bmRsZVZlcnNpb246IGFyZ3MucmVzdWx0QnVuZGxlVmVyc2lvbixcbiAgICB9LCB0aGlzLmxvZyk7XG4gIH1cblxuICBzZXRXREFQYXRocyAoYm9vdHN0cmFwUGF0aCwgYWdlbnRQYXRoKSB7XG4gICAgLy8gYWxsb3cgdGhlIHVzZXIgdG8gc3BlY2lmeSBhIHBsYWNlIGZvciBXREEuIFRoaXMgaXMgdW5kb2N1bWVudGVkIGFuZFxuICAgIC8vIG9ubHkgaGVyZSBmb3IgdGhlIHB1cnBvc2VzIG9mIHRlc3RpbmcgZGV2ZWxvcG1lbnQgb2YgV0RBXG4gICAgdGhpcy5ib290c3RyYXBQYXRoID0gYm9vdHN0cmFwUGF0aCB8fCBCT09UU1RSQVBfUEFUSDtcbiAgICB0aGlzLmxvZy5pbmZvKGBVc2luZyBXREEgcGF0aDogJyR7dGhpcy5ib290c3RyYXBQYXRofSdgKTtcblxuICAgIC8vIGZvciBiYWNrd2FyZCBjb21wYXRpYmlsaXR5IHdlIG5lZWQgdG8gYmUgYWJsZSB0byBzcGVjaWZ5IGFnZW50UGF0aCB0b29cbiAgICB0aGlzLmFnZW50UGF0aCA9IGFnZW50UGF0aCB8fCBwYXRoLnJlc29sdmUodGhpcy5ib290c3RyYXBQYXRoLCAnV2ViRHJpdmVyQWdlbnQueGNvZGVwcm9qJyk7XG4gICAgdGhpcy5sb2cuaW5mbyhgVXNpbmcgV0RBIGFnZW50OiAnJHt0aGlzLmFnZW50UGF0aH0nYCk7XG4gIH1cblxuICBhc3luYyBjbGVhbnVwT2Jzb2xldGVQcm9jZXNzZXMgKCkge1xuICAgIGNvbnN0IG9ic29sZXRlUGlkcyA9IGF3YWl0IGdldFBJRHNMaXN0ZW5pbmdPblBvcnQodGhpcy51cmwucG9ydCxcbiAgICAgIChjbWRMaW5lKSA9PiBjbWRMaW5lLmluY2x1ZGVzKCcvV2ViRHJpdmVyQWdlbnRSdW5uZXInKSAmJlxuICAgICAgICAhY21kTGluZS50b0xvd2VyQ2FzZSgpLmluY2x1ZGVzKHRoaXMuZGV2aWNlLnVkaWQudG9Mb3dlckNhc2UoKSkpO1xuXG4gICAgaWYgKF8uaXNFbXB0eShvYnNvbGV0ZVBpZHMpKSB7XG4gICAgICB0aGlzLmxvZy5kZWJ1ZyhgTm8gb2Jzb2xldGUgY2FjaGVkIHByb2Nlc3NlcyBmcm9tIHByZXZpb3VzIFdEQSBzZXNzaW9ucyBgICtcbiAgICAgICAgYGxpc3RlbmluZyBvbiBwb3J0ICR7dGhpcy51cmwucG9ydH0gaGF2ZSBiZWVuIGZvdW5kYCk7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdGhpcy5sb2cuaW5mbyhgRGV0ZWN0ZWQgJHtvYnNvbGV0ZVBpZHMubGVuZ3RofSBvYnNvbGV0ZSBjYWNoZWQgcHJvY2VzcyR7b2Jzb2xldGVQaWRzLmxlbmd0aCA9PT0gMSA/ICcnIDogJ2VzJ30gYCArXG4gICAgICBgZnJvbSBwcmV2aW91cyBXREEgc2Vzc2lvbnMuIENsZWFuaW5nIHRoZW0gdXBgKTtcbiAgICB0cnkge1xuICAgICAgYXdhaXQgZXhlYygna2lsbCcsIG9ic29sZXRlUGlkcyk7XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgdGhpcy5sb2cud2FybihgRmFpbGVkIHRvIGtpbGwgb2Jzb2xldGUgY2FjaGVkIHByb2Nlc3Mke29ic29sZXRlUGlkcy5sZW5ndGggPT09IDEgPyAnJyA6ICdlcyd9ICcke29ic29sZXRlUGlkc30nLiBgICtcbiAgICAgICAgYE9yaWdpbmFsIGVycm9yOiAke2UubWVzc2FnZX1gKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogUmV0dXJuIGJvb2xlYW4gaWYgV0RBIGlzIHJ1bm5pbmcgb3Igbm90XG4gICAqIEByZXR1cm4ge2Jvb2xlYW59IFRydWUgaWYgV0RBIGlzIHJ1bm5pbmdcbiAgICogQHRocm93cyB7RXJyb3J9IElmIHRoZXJlIHdhcyBpbnZhbGlkIHJlc3BvbnNlIGNvZGUgb3IgYm9keVxuICAgKi9cbiAgYXN5bmMgaXNSdW5uaW5nICgpIHtcbiAgICByZXR1cm4gISEoYXdhaXQgdGhpcy5nZXRTdGF0dXMoKSk7XG4gIH1cblxuICBnZXQgYmFzZVBhdGggKCkge1xuICAgIGlmICh0aGlzLnVybC5wYXRoID09PSAnLycpIHtcbiAgICAgIHJldHVybiAnJztcbiAgICB9XG4gICAgcmV0dXJuIHRoaXMudXJsLnBhdGggfHwgJyc7XG4gIH1cblxuICAvKipcbiAgICogUmV0dXJuIGN1cnJlbnQgcnVubmluZyBXREEncyBzdGF0dXMgbGlrZSBiZWxvd1xuICAgKiB7XG4gICAqICAgXCJzdGF0ZVwiOiBcInN1Y2Nlc3NcIixcbiAgICogICBcIm9zXCI6IHtcbiAgICogICAgIFwibmFtZVwiOiBcImlPU1wiLFxuICAgKiAgICAgXCJ2ZXJzaW9uXCI6IFwiMTEuNFwiLFxuICAgKiAgICAgXCJzZGtWZXJzaW9uXCI6IFwiMTEuM1wiXG4gICAqICAgfSxcbiAgICogICBcImlvc1wiOiB7XG4gICAqICAgICBcInNpbXVsYXRvclZlcnNpb25cIjogXCIxMS40XCIsXG4gICAqICAgICBcImlwXCI6IFwiMTcyLjI1NC45OS4zNFwiXG4gICAqICAgfSxcbiAgICogICBcImJ1aWxkXCI6IHtcbiAgICogICAgIFwidGltZVwiOiBcIkp1biAyNCAyMDE4IDE3OjA4OjIxXCIsXG4gICAqICAgICBcInByb2R1Y3RCdW5kbGVJZGVudGlmaWVyXCI6IFwiY29tLmZhY2Vib29rLldlYkRyaXZlckFnZW50UnVubmVyXCJcbiAgICogICB9XG4gICAqIH1cbiAgICpcbiAgICogQHJldHVybiB7P29iamVjdH0gU3RhdGUgT2JqZWN0XG4gICAqIEB0aHJvd3Mge0Vycm9yfSBJZiB0aGVyZSB3YXMgaW52YWxpZCByZXNwb25zZSBjb2RlIG9yIGJvZHlcbiAgICovXG4gIGFzeW5jIGdldFN0YXR1cyAoKSB7XG4gICAgY29uc3Qgbm9TZXNzaW9uUHJveHkgPSBuZXcgTm9TZXNzaW9uUHJveHkoe1xuICAgICAgc2VydmVyOiB0aGlzLnVybC5ob3N0bmFtZSxcbiAgICAgIHBvcnQ6IHRoaXMudXJsLnBvcnQsXG4gICAgICBiYXNlOiB0aGlzLmJhc2VQYXRoLFxuICAgICAgdGltZW91dDogMzAwMCxcbiAgICB9KTtcbiAgICB0cnkge1xuICAgICAgcmV0dXJuIGF3YWl0IG5vU2Vzc2lvblByb3h5LmNvbW1hbmQoJy9zdGF0dXMnLCAnR0VUJyk7XG4gICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICB0aGlzLmxvZy5kZWJ1ZyhgV0RBIGlzIG5vdCBsaXN0ZW5pbmcgYXQgJyR7dGhpcy51cmwuaHJlZn0nYCk7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogVW5pbnN0YWxsIFdEQXMgZnJvbSB0aGUgdGVzdCBkZXZpY2UuXG4gICAqIE92ZXIgWGNvZGUgMTEsIG11bHRpcGxlIFdEQSBjYW4gYmUgaW4gdGhlIGRldmljZSBzaW5jZSBYY29kZSAxMSBnZW5lcmF0ZXMgZGlmZmVyZW50IFdEQS5cbiAgICogQXBwaXVtIGRvZXMgbm90IGV4cGVjdCBtdWx0aXBsZSBXREFzIGFyZSBydW5uaW5nIG9uIGEgZGV2aWNlLlxuICAgKi9cbiAgYXN5bmMgdW5pbnN0YWxsICgpIHtcbiAgICB0cnkge1xuICAgICAgY29uc3QgYnVuZGxlSWRzID0gYXdhaXQgdGhpcy5kZXZpY2UuZ2V0VXNlckluc3RhbGxlZEJ1bmRsZUlkc0J5QnVuZGxlTmFtZShXREFfQ0ZfQlVORExFX05BTUUpO1xuICAgICAgaWYgKF8uaXNFbXB0eShidW5kbGVJZHMpKSB7XG4gICAgICAgIHRoaXMubG9nLmRlYnVnKCdObyBXREFzIG9uIHRoZSBkZXZpY2UuJyk7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgdGhpcy5sb2cuZGVidWcoYFVuaW5zdGFsbGluZyBXREFzOiAnJHtidW5kbGVJZHN9J2ApO1xuICAgICAgZm9yIChjb25zdCBidW5kbGVJZCBvZiBidW5kbGVJZHMpIHtcbiAgICAgICAgYXdhaXQgdGhpcy5kZXZpY2UucmVtb3ZlQXBwKGJ1bmRsZUlkKTtcbiAgICAgIH1cbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICB0aGlzLmxvZy5kZWJ1ZyhlKTtcbiAgICAgIHRoaXMubG9nLndhcm4oYFdlYkRyaXZlckFnZW50IHVuaW5zdGFsbCBmYWlsZWQuIFBlcmhhcHMsIGl0IGlzIGFscmVhZHkgdW5pbnN0YWxsZWQ/IGAgK1xuICAgICAgICBgT3JpZ2luYWwgZXJyb3I6ICR7ZS5tZXNzYWdlfWApO1xuICAgIH1cbiAgfVxuXG4gIGFzeW5jIF9jbGVhbnVwUHJvamVjdElmRnJlc2ggKCkge1xuICAgIGNvbnN0IGhvbWVGb2xkZXIgPSBwcm9jZXNzLmVudi5IT01FO1xuICAgIGlmICghaG9tZUZvbGRlcikge1xuICAgICAgdGhpcy5sb2cuaW5mbygnVGhlIEhPTUUgZm9sZGVyIHBhdGggY2Fubm90IGJlIGRldGVybWluZWQnKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb25zdCBjdXJyZW50VXBncmFkZVRpbWVzdGFtcCA9IGF3YWl0IGdldFdEQVVwZ3JhZGVUaW1lc3RhbXAoKTtcbiAgICBpZiAoIV8uaXNJbnRlZ2VyKGN1cnJlbnRVcGdyYWRlVGltZXN0YW1wKSkge1xuICAgICAgdGhpcy5sb2cuaW5mbygnSXQgaXMgaW1wb3NzaWJsZSB0byBkZXRlcm1pbmUgdGhlIHRpbWVzdGFtcCBvZiB0aGUgcGFja2FnZScpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvbnN0IHRpbWVzdGFtcFBhdGggPSBwYXRoLnJlc29sdmUoaG9tZUZvbGRlciwgV0RBX1VQR1JBREVfVElNRVNUQU1QX1BBVEgpO1xuICAgIGNvbnN0IGRpZFRpbWVzdGFtcEV4aXN0ID0gYXdhaXQgZnMuZXhpc3RzKHRpbWVzdGFtcFBhdGgpO1xuICAgIGlmIChkaWRUaW1lc3RhbXBFeGlzdCkge1xuICAgICAgdHJ5IHtcbiAgICAgICAgYXdhaXQgZnMuYWNjZXNzKHRpbWVzdGFtcFBhdGgsIGZzLldfT0spO1xuICAgICAgfSBjYXRjaCAoaWduKSB7XG4gICAgICAgIHRoaXMubG9nLmluZm8oYFdlYkRyaXZlckFnZW50IHVwZ3JhZGUgdGltZXN0YW1wIGF0ICcke3RpbWVzdGFtcFBhdGh9JyBpcyBub3Qgd3JpdGVhYmxlLiBgICtcbiAgICAgICAgICBgU2tpcHBpbmcgc291cmNlcyBjbGVhbnVwYCk7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIGNvbnN0IHJlY2VudFVwZ3JhZGVUaW1lc3RhbXAgPSBwYXJzZUludChhd2FpdCBmcy5yZWFkRmlsZSh0aW1lc3RhbXBQYXRoLCAndXRmOCcpLCAxMCk7XG4gICAgICBpZiAoXy5pc0ludGVnZXIocmVjZW50VXBncmFkZVRpbWVzdGFtcCkpIHtcbiAgICAgICAgaWYgKHJlY2VudFVwZ3JhZGVUaW1lc3RhbXAgPj0gY3VycmVudFVwZ3JhZGVUaW1lc3RhbXApIHtcbiAgICAgICAgICB0aGlzLmxvZy5pbmZvKGBXZWJEcml2ZXJBZ2VudCBkb2VzIG5vdCBuZWVkIGEgY2xlYW51cC4gVGhlIHNvdXJjZXMgYXJlIHVwIHRvIGRhdGUgYCArXG4gICAgICAgICAgICBgKCR7cmVjZW50VXBncmFkZVRpbWVzdGFtcH0gPj0gJHtjdXJyZW50VXBncmFkZVRpbWVzdGFtcH0pYCk7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMubG9nLmluZm8oYFdlYkRyaXZlckFnZW50IHNvdXJjZXMgaGF2ZSBiZWVuIHVwZ3JhZGVkIGAgK1xuICAgICAgICAgIGAoJHtyZWNlbnRVcGdyYWRlVGltZXN0YW1wfSA8ICR7Y3VycmVudFVwZ3JhZGVUaW1lc3RhbXB9KWApO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5sb2cud2FybihgVGhlIHJlY2VudCB1cGdyYWRlIHRpbWVzdGFtcCBhdCAnJHt0aW1lc3RhbXBQYXRofScgaXMgY29ycnVwdGVkLiBUcnlpbmcgdG8gZml4IGl0YCk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgdHJ5IHtcbiAgICAgIGF3YWl0IG1rZGlycChwYXRoLmRpcm5hbWUodGltZXN0YW1wUGF0aCkpO1xuICAgICAgYXdhaXQgZnMud3JpdGVGaWxlKHRpbWVzdGFtcFBhdGgsIGAke2N1cnJlbnRVcGdyYWRlVGltZXN0YW1wfWAsICd1dGY4Jyk7XG4gICAgICB0aGlzLmxvZy5kZWJ1ZyhgU3RvcmVkIHRoZSByZWNlbnQgV2ViRHJpdmVyQWdlbnQgdXBncmFkZSB0aW1lc3RhbXAgJHtjdXJyZW50VXBncmFkZVRpbWVzdGFtcH0gYCArXG4gICAgICAgIGBhdCAnJHt0aW1lc3RhbXBQYXRofSdgKTtcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICB0aGlzLmxvZy5pbmZvKGBVbmFibGUgdG8gY3JlYXRlIHRoZSByZWNlbnQgV2ViRHJpdmVyQWdlbnQgdXBncmFkZSB0aW1lc3RhbXAgYXQgJyR7dGltZXN0YW1wUGF0aH0nLiBgICtcbiAgICAgICAgYE9yaWdpbmFsIGVycm9yOiAke2UubWVzc2FnZX1gKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBpZiAoIWRpZFRpbWVzdGFtcEV4aXN0KSB7XG4gICAgICB0aGlzLmxvZy5pbmZvKCdUaGVyZSBpcyBubyBuZWVkIHRvIHBlcmZvcm0gdGhlIHByb2plY3QgY2xlYW51cC4gQSBmcmVzaCBpbnN0YWxsIGhhcyBiZWVuIGRldGVjdGVkJyk7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdHJ5IHtcbiAgICAgIGF3YWl0IHRoaXMueGNvZGVidWlsZC5jbGVhblByb2plY3QoKTtcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICB0aGlzLmxvZy53YXJuKGBDYW5ub3QgcGVyZm9ybSBXZWJEcml2ZXJBZ2VudCBwcm9qZWN0IGNsZWFudXAuIE9yaWdpbmFsIGVycm9yOiAke2UubWVzc2FnZX1gKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogUmV0dXJuIGN1cnJlbnQgcnVubmluZyBXREEncyBzdGF0dXMgbGlrZSBiZWxvdyBhZnRlciBsYXVuY2hpbmcgV0RBXG4gICAqIHtcbiAgICogICBcInN0YXRlXCI6IFwic3VjY2Vzc1wiLFxuICAgKiAgIFwib3NcIjoge1xuICAgKiAgICAgXCJuYW1lXCI6IFwiaU9TXCIsXG4gICAqICAgICBcInZlcnNpb25cIjogXCIxMS40XCIsXG4gICAqICAgICBcInNka1ZlcnNpb25cIjogXCIxMS4zXCJcbiAgICogICB9LFxuICAgKiAgIFwiaW9zXCI6IHtcbiAgICogICAgIFwic2ltdWxhdG9yVmVyc2lvblwiOiBcIjExLjRcIixcbiAgICogICAgIFwiaXBcIjogXCIxNzIuMjU0Ljk5LjM0XCJcbiAgICogICB9LFxuICAgKiAgIFwiYnVpbGRcIjoge1xuICAgKiAgICAgXCJ0aW1lXCI6IFwiSnVuIDI0IDIwMTggMTc6MDg6MjFcIixcbiAgICogICAgIFwicHJvZHVjdEJ1bmRsZUlkZW50aWZpZXJcIjogXCJjb20uZmFjZWJvb2suV2ViRHJpdmVyQWdlbnRSdW5uZXJcIlxuICAgKiAgIH1cbiAgICogfVxuICAgKlxuICAgKiBAcGFyYW0ge3N0cmluZ30gc2Vzc2lvbklkIExhdW5jaCBXREEgYW5kIGVzdGFibGlzaCB0aGUgc2Vzc2lvbiB3aXRoIHRoaXMgc2Vzc2lvbklkXG4gICAqIEByZXR1cm4gez9vYmplY3R9IFN0YXRlIE9iamVjdFxuICAgKiBAdGhyb3dzIHtFcnJvcn0gSWYgdGhlcmUgd2FzIGludmFsaWQgcmVzcG9uc2UgY29kZSBvciBib2R5XG4gICAqL1xuICBhc3luYyBsYXVuY2ggKHNlc3Npb25JZCkge1xuICAgIGlmICh0aGlzLndlYkRyaXZlckFnZW50VXJsKSB7XG4gICAgICB0aGlzLmxvZy5pbmZvKGBVc2luZyBwcm92aWRlZCBXZWJkcml2ZXJBZ2VudCBhdCAnJHt0aGlzLndlYkRyaXZlckFnZW50VXJsfSdgKTtcbiAgICAgIHRoaXMudXJsID0gdGhpcy53ZWJEcml2ZXJBZ2VudFVybDtcbiAgICAgIHRoaXMuc2V0dXBQcm94aWVzKHNlc3Npb25JZCk7XG4gICAgICByZXR1cm4gYXdhaXQgdGhpcy5nZXRTdGF0dXMoKTtcbiAgICB9XG5cbiAgICB0aGlzLmxvZy5pbmZvKCdMYXVuY2hpbmcgV2ViRHJpdmVyQWdlbnQgb24gdGhlIGRldmljZScpO1xuXG4gICAgdGhpcy5zZXR1cFByb3hpZXMoc2Vzc2lvbklkKTtcblxuICAgIGlmICghdGhpcy51c2VYY3Rlc3RydW5GaWxlICYmICFhd2FpdCBmcy5leGlzdHModGhpcy5hZ2VudFBhdGgpKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYFRyeWluZyB0byB1c2UgV2ViRHJpdmVyQWdlbnQgcHJvamVjdCBhdCAnJHt0aGlzLmFnZW50UGF0aH0nIGJ1dCB0aGUgYCArXG4gICAgICAgICAgICAgICAgICAgICAgJ2ZpbGUgZG9lcyBub3QgZXhpc3QnKTtcbiAgICB9XG5cbiAgICAvLyB1c2VYY3Rlc3RydW5GaWxlIGFuZCB1c2VQcmVidWlsdFdEQSB1c2UgZXhpc3RpbmcgZGVwZW5kZW5jaWVzXG4gICAgLy8gSXQgZGVwZW5kcyBvbiB1c2VyIHNpZGVcbiAgICBpZiAodGhpcy5pZGIgfHwgdGhpcy51c2VYY3Rlc3RydW5GaWxlIHx8ICh0aGlzLmRlcml2ZWREYXRhUGF0aCAmJiB0aGlzLnVzZVByZWJ1aWx0V0RBKSkge1xuICAgICAgdGhpcy5sb2cuaW5mbygnU2tpcHBlZCBXREEgcHJvamVjdCBjbGVhbnVwIGFjY29yZGluZyB0byB0aGUgcHJvdmlkZWQgY2FwYWJpbGl0aWVzJyk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGNvbnN0IHN5bmNocm9uaXphdGlvbktleSA9IHBhdGgubm9ybWFsaXplKHRoaXMuYm9vdHN0cmFwUGF0aCk7XG4gICAgICBhd2FpdCBTSEFSRURfUkVTT1VSQ0VTX0dVQVJELmFjcXVpcmUoc3luY2hyb25pemF0aW9uS2V5LFxuICAgICAgICBhc3luYyAoKSA9PiBhd2FpdCB0aGlzLl9jbGVhbnVwUHJvamVjdElmRnJlc2goKSk7XG4gICAgfVxuXG4gICAgLy8gV2UgbmVlZCB0byBwcm92aWRlIFdEQSBsb2NhbCBwb3J0LCBiZWNhdXNlIGl0IG1pZ2h0IGJlIG9jY3VwaWVkXG4gICAgYXdhaXQgcmVzZXRUZXN0UHJvY2Vzc2VzKHRoaXMuZGV2aWNlLnVkaWQsICF0aGlzLmlzUmVhbERldmljZSk7XG5cbiAgICBpZiAodGhpcy5pZGIpIHtcbiAgICAgIHJldHVybiBhd2FpdCB0aGlzLnN0YXJ0V2l0aElEQigpO1xuICAgIH1cblxuICAgIGF3YWl0IHRoaXMueGNvZGVidWlsZC5pbml0KHRoaXMubm9TZXNzaW9uUHJveHkpO1xuXG4gICAgLy8gU3RhcnQgdGhlIHhjb2RlYnVpbGQgcHJvY2Vzc1xuICAgIGlmICh0aGlzLnByZWJ1aWxkV0RBKSB7XG4gICAgICBhd2FpdCB0aGlzLnhjb2RlYnVpbGQucHJlYnVpbGQoKTtcbiAgICB9XG4gICAgcmV0dXJuIGF3YWl0IHRoaXMueGNvZGVidWlsZC5zdGFydCgpO1xuICB9XG5cbiAgYXN5bmMgc3RhcnRXaXRoSURCICgpIHtcbiAgICB0aGlzLmxvZy5pbmZvKCdXaWxsIGxhdW5jaCBXREEgd2l0aCBpZGIgaW5zdGVhZCBvZiB4Y29kZWJ1aWxkIHNpbmNlIHRoZSBjb3JyZXNwb25kaW5nIGZsYWcgaXMgZW5hYmxlZCcpO1xuICAgIGNvbnN0IHt3ZGFCdW5kbGVJZCwgdGVzdEJ1bmRsZUlkfSA9IGF3YWl0IHRoaXMucHJlcGFyZVdEQSgpO1xuICAgIGNvbnN0IGVudiA9IHtcbiAgICAgIFVTRV9QT1JUOiB0aGlzLndkYVJlbW90ZVBvcnQsXG4gICAgICBXREFfUFJPRFVDVF9CVU5ETEVfSURFTlRJRklFUjogdGhpcy51cGRhdGVkV0RBQnVuZGxlSWQsXG4gICAgfTtcbiAgICBpZiAodGhpcy5tanBlZ1NlcnZlclBvcnQpIHtcbiAgICAgIGVudi5NSlBFR19TRVJWRVJfUE9SVCA9IHRoaXMubWpwZWdTZXJ2ZXJQb3J0O1xuICAgIH1cblxuICAgIHJldHVybiBhd2FpdCB0aGlzLmlkYi5ydW5YQ1VJVGVzdCh3ZGFCdW5kbGVJZCwgd2RhQnVuZGxlSWQsIHRlc3RCdW5kbGVJZCwge2Vudn0pO1xuICB9XG5cbiAgYXN5bmMgcGFyc2VCdW5kbGVJZCAod2RhQnVuZGxlUGF0aCkge1xuICAgIGNvbnN0IGluZm9QbGlzdFBhdGggPSBwYXRoLmpvaW4od2RhQnVuZGxlUGF0aCwgJ0luZm8ucGxpc3QnKTtcbiAgICBjb25zdCBpbmZvUGxpc3QgPSBhd2FpdCBwbGlzdC5wYXJzZVBsaXN0KGF3YWl0IGZzLnJlYWRGaWxlKGluZm9QbGlzdFBhdGgpKTtcbiAgICBpZiAoIWluZm9QbGlzdC5DRkJ1bmRsZUlkZW50aWZpZXIpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgQ291bGQgbm90IGZpbmQgYnVuZGxlIGlkIGluICcke2luZm9QbGlzdFBhdGh9J2ApO1xuICAgIH1cbiAgICByZXR1cm4gaW5mb1BsaXN0LkNGQnVuZGxlSWRlbnRpZmllcjtcbiAgfVxuXG4gIGFzeW5jIHByZXBhcmVXREEgKCkge1xuICAgIGNvbnN0IHdkYUJ1bmRsZVBhdGggPSB0aGlzLndkYUJ1bmRsZVBhdGggfHwgYXdhaXQgdGhpcy5mZXRjaFdEQUJ1bmRsZSgpO1xuICAgIGNvbnN0IHdkYUJ1bmRsZUlkID0gYXdhaXQgdGhpcy5wYXJzZUJ1bmRsZUlkKHdkYUJ1bmRsZVBhdGgpO1xuICAgIGlmICghYXdhaXQgdGhpcy5kZXZpY2UuaXNBcHBJbnN0YWxsZWQod2RhQnVuZGxlSWQpKSB7XG4gICAgICBhd2FpdCB0aGlzLmRldmljZS5pbnN0YWxsQXBwKHdkYUJ1bmRsZVBhdGgpO1xuICAgIH1cbiAgICBjb25zdCB0ZXN0QnVuZGxlSWQgPSBhd2FpdCB0aGlzLmlkYi5pbnN0YWxsWENUZXN0QnVuZGxlKHBhdGguam9pbih3ZGFCdW5kbGVQYXRoLCAnUGx1Z0lucycsICdXZWJEcml2ZXJBZ2VudFJ1bm5lci54Y3Rlc3QnKSk7XG4gICAgcmV0dXJuIHt3ZGFCdW5kbGVJZCwgdGVzdEJ1bmRsZUlkLCB3ZGFCdW5kbGVQYXRofTtcbiAgfVxuXG4gIGFzeW5jIGZldGNoV0RBQnVuZGxlICgpIHtcbiAgICBpZiAoIXRoaXMuZGVyaXZlZERhdGFQYXRoKSB7XG4gICAgICByZXR1cm4gYXdhaXQgYnVuZGxlV0RBU2ltKHRoaXMueGNvZGVidWlsZCk7XG4gICAgfVxuICAgIGNvbnN0IHdkYUJ1bmRsZVBhdGhzID0gYXdhaXQgZnMuZ2xvYihgJHt0aGlzLmRlcml2ZWREYXRhUGF0aH0vKiovKiR7V0RBX1JVTk5FUl9BUFB9L2AsIHtcbiAgICAgIGFic29sdXRlOiB0cnVlLFxuICAgIH0pO1xuICAgIGlmIChfLmlzRW1wdHkod2RhQnVuZGxlUGF0aHMpKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYENvdWxkIG5vdCBmaW5kIHRoZSBXREEgYnVuZGxlIGluICcke3RoaXMuZGVyaXZlZERhdGFQYXRofSdgKTtcbiAgICB9XG4gICAgcmV0dXJuIHdkYUJ1bmRsZVBhdGhzWzBdO1xuICB9XG5cbiAgYXN5bmMgaXNTb3VyY2VGcmVzaCAoKSB7XG4gICAgY29uc3QgZXhpc3RzUHJvbWlzZXMgPSBbXG4gICAgICAnUmVzb3VyY2VzJyxcbiAgICAgIGBSZXNvdXJjZXMke3BhdGguc2VwfVdlYkRyaXZlckFnZW50LmJ1bmRsZWAsXG4gICAgXS5tYXAoKHN1YlBhdGgpID0+IGZzLmV4aXN0cyhwYXRoLnJlc29sdmUodGhpcy5ib290c3RyYXBQYXRoLCBzdWJQYXRoKSkpO1xuICAgIHJldHVybiAoYXdhaXQgQi5hbGwoZXhpc3RzUHJvbWlzZXMpKS5zb21lKCh2KSA9PiB2ID09PSBmYWxzZSk7XG4gIH1cblxuICBzZXR1cFByb3hpZXMgKHNlc3Npb25JZCkge1xuICAgIGNvbnN0IHByb3h5T3B0cyA9IHtcbiAgICAgIGxvZzogdGhpcy5sb2csXG4gICAgICBzZXJ2ZXI6IHRoaXMudXJsLmhvc3RuYW1lLFxuICAgICAgcG9ydDogdGhpcy51cmwucG9ydCxcbiAgICAgIGJhc2U6IHRoaXMuYmFzZVBhdGgsXG4gICAgICB0aW1lb3V0OiB0aGlzLndkYUNvbm5lY3Rpb25UaW1lb3V0LFxuICAgICAga2VlcEFsaXZlOiB0cnVlLFxuICAgIH07XG5cbiAgICB0aGlzLmp3cHJveHkgPSBuZXcgSldQcm94eShwcm94eU9wdHMpO1xuICAgIHRoaXMuandwcm94eS5zZXNzaW9uSWQgPSBzZXNzaW9uSWQ7XG4gICAgdGhpcy5wcm94eVJlcVJlcyA9IHRoaXMuandwcm94eS5wcm94eVJlcVJlcy5iaW5kKHRoaXMuandwcm94eSk7XG5cbiAgICB0aGlzLm5vU2Vzc2lvblByb3h5ID0gbmV3IE5vU2Vzc2lvblByb3h5KHByb3h5T3B0cyk7XG4gIH1cblxuICBhc3luYyBxdWl0ICgpIHtcbiAgICB0aGlzLmxvZy5pbmZvKCdTaHV0dGluZyBkb3duIHN1Yi1wcm9jZXNzZXMnKTtcblxuICAgIGF3YWl0IHRoaXMueGNvZGVidWlsZC5xdWl0KCk7XG4gICAgYXdhaXQgdGhpcy54Y29kZWJ1aWxkLnJlc2V0KCk7XG5cbiAgICBpZiAodGhpcy5qd3Byb3h5KSB7XG4gICAgICB0aGlzLmp3cHJveHkuc2Vzc2lvbklkID0gbnVsbDtcbiAgICB9XG5cbiAgICB0aGlzLnN0YXJ0ZWQgPSBmYWxzZTtcblxuICAgIGlmICghdGhpcy5hcmdzLndlYkRyaXZlckFnZW50VXJsKSB7XG4gICAgICAvLyBpZiB3ZSBwb3B1bGF0ZWQgdGhlIHVybCBvdXJzZWx2ZXMgKGR1cmluZyBgc2V0dXBDYWNoaW5nYCBjYWxsLCBmb3IgaW5zdGFuY2UpXG4gICAgICAvLyB0aGVuIGNsZWFuIHRoYXQgdXAuIElmIHRoZSB1cmwgd2FzIHN1cHBsaWVkLCB3ZSB3YW50IHRvIGtlZXAgaXRcbiAgICAgIHRoaXMud2ViRHJpdmVyQWdlbnRVcmwgPSBudWxsO1xuICAgIH1cbiAgfVxuXG4gIGdldCB1cmwgKCkge1xuICAgIGlmICghdGhpcy5fdXJsKSB7XG4gICAgICBpZiAodGhpcy53ZWJEcml2ZXJBZ2VudFVybCkge1xuICAgICAgICB0aGlzLl91cmwgPSB1cmwucGFyc2UodGhpcy53ZWJEcml2ZXJBZ2VudFVybCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBjb25zdCBwb3J0ID0gdGhpcy53ZGFMb2NhbFBvcnQgfHwgV0RBX0FHRU5UX1BPUlQ7XG4gICAgICAgIGNvbnN0IHtwcm90b2NvbCwgaG9zdG5hbWV9ID0gdXJsLnBhcnNlKHRoaXMud2RhQmFzZVVybCB8fCBXREFfQkFTRV9VUkwpO1xuICAgICAgICB0aGlzLl91cmwgPSB1cmwucGFyc2UoYCR7cHJvdG9jb2x9Ly8ke2hvc3RuYW1lfToke3BvcnR9YCk7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiB0aGlzLl91cmw7XG4gIH1cblxuICBzZXQgdXJsIChfdXJsKSB7XG4gICAgdGhpcy5fdXJsID0gdXJsLnBhcnNlKF91cmwpO1xuICB9XG5cbiAgZ2V0IGZ1bGx5U3RhcnRlZCAoKSB7XG4gICAgcmV0dXJuIHRoaXMuc3RhcnRlZDtcbiAgfVxuXG4gIHNldCBmdWxseVN0YXJ0ZWQgKHN0YXJ0ZWQgPSBmYWxzZSkge1xuICAgIHRoaXMuc3RhcnRlZCA9IHN0YXJ0ZWQ7XG4gIH1cblxuICBhc3luYyByZXRyaWV2ZURlcml2ZWREYXRhUGF0aCAoKSB7XG4gICAgcmV0dXJuIGF3YWl0IHRoaXMueGNvZGVidWlsZC5yZXRyaWV2ZURlcml2ZWREYXRhUGF0aCgpO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldXNlIHJ1bm5pbmcgV0RBIGlmIGl0IGhhcyB0aGUgc2FtZSBidW5kbGUgaWQgd2l0aCB1cGRhdGVkV0RBQnVuZGxlSWQuXG4gICAqIE9yIHJldXNlIGl0IGlmIGl0IGhhcyB0aGUgZGVmYXVsdCBpZCB3aXRob3V0IHVwZGF0ZWRXREFCdW5kbGVJZC5cbiAgICogVW5pbnN0YWxsIGl0IGlmIHRoZSBtZXRob2QgZmFjZXMgYW4gZXhjZXB0aW9uIGZvciB0aGUgYWJvdmUgc2l0dWF0aW9uLlxuICAgKlxuICAgKiBAcGFyYW0ge3N0cmluZ30gdXBkYXRlZFdEQUJ1bmRsZUlkIEJ1bmRsZUlkIHlvdSdkIGxpa2UgdG8gdXNlXG4gICAqL1xuICBhc3luYyBzZXR1cENhY2hpbmcgKCkge1xuICAgIGNvbnN0IHN0YXR1cyA9IGF3YWl0IHRoaXMuZ2V0U3RhdHVzKCk7XG4gICAgaWYgKCFzdGF0dXMgfHwgIXN0YXR1cy5idWlsZCkge1xuICAgICAgdGhpcy5sb2cuZGVidWcoJ1dEQSBpcyBjdXJyZW50bHkgbm90IHJ1bm5pbmcuIFRoZXJlIGlzIG5vdGhpbmcgdG8gY2FjaGUnKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb25zdCB7XG4gICAgICBwcm9kdWN0QnVuZGxlSWRlbnRpZmllcixcbiAgICAgIHVwZ3JhZGVkQXQsXG4gICAgfSA9IHN0YXR1cy5idWlsZDtcbiAgICAvLyBmb3IgcmVhbCBkZXZpY2VcbiAgICBpZiAodXRpbC5oYXNWYWx1ZShwcm9kdWN0QnVuZGxlSWRlbnRpZmllcikgJiYgdXRpbC5oYXNWYWx1ZSh0aGlzLnVwZGF0ZWRXREFCdW5kbGVJZCkgJiYgdGhpcy51cGRhdGVkV0RBQnVuZGxlSWQgIT09IHByb2R1Y3RCdW5kbGVJZGVudGlmaWVyKSB7XG4gICAgICB0aGlzLmxvZy5pbmZvKGBXaWxsIHVuaW5zdGFsbCBydW5uaW5nIFdEQSBzaW5jZSBpdCBoYXMgZGlmZmVyZW50IGJ1bmRsZSBpZC4gVGhlIGFjdHVhbCB2YWx1ZSBpcyAnJHtwcm9kdWN0QnVuZGxlSWRlbnRpZmllcn0nLmApO1xuICAgICAgcmV0dXJuIGF3YWl0IHRoaXMudW5pbnN0YWxsKCk7XG4gICAgfVxuICAgIC8vIGZvciBzaW11bGF0b3JcbiAgICBpZiAodXRpbC5oYXNWYWx1ZShwcm9kdWN0QnVuZGxlSWRlbnRpZmllcikgJiYgIXV0aWwuaGFzVmFsdWUodGhpcy51cGRhdGVkV0RBQnVuZGxlSWQpICYmIFdEQV9SVU5ORVJfQlVORExFX0lEICE9PSBwcm9kdWN0QnVuZGxlSWRlbnRpZmllcikge1xuICAgICAgdGhpcy5sb2cuaW5mbyhgV2lsbCB1bmluc3RhbGwgcnVubmluZyBXREEgc2luY2UgaXRzIGJ1bmRsZSBpZCBpcyBub3QgZXF1YWwgdG8gdGhlIGRlZmF1bHQgdmFsdWUgJHtXREFfUlVOTkVSX0JVTkRMRV9JRH1gKTtcbiAgICAgIHJldHVybiBhd2FpdCB0aGlzLnVuaW5zdGFsbCgpO1xuICAgIH1cblxuICAgIGNvbnN0IGFjdHVhbFVwZ3JhZGVUaW1lc3RhbXAgPSBhd2FpdCBnZXRXREFVcGdyYWRlVGltZXN0YW1wKCk7XG4gICAgdGhpcy5sb2cuZGVidWcoYFVwZ3JhZGUgdGltZXN0YW1wIG9mIHRoZSBjdXJyZW50bHkgYnVuZGxlZCBXREE6ICR7YWN0dWFsVXBncmFkZVRpbWVzdGFtcH1gKTtcbiAgICB0aGlzLmxvZy5kZWJ1ZyhgVXBncmFkZSB0aW1lc3RhbXAgb2YgdGhlIFdEQSBvbiB0aGUgZGV2aWNlOiAke3VwZ3JhZGVkQXR9YCk7XG4gICAgaWYgKGFjdHVhbFVwZ3JhZGVUaW1lc3RhbXAgJiYgdXBncmFkZWRBdCAmJiBfLnRvTG93ZXIoYCR7YWN0dWFsVXBncmFkZVRpbWVzdGFtcH1gKSAhPT0gXy50b0xvd2VyKGAke3VwZ3JhZGVkQXR9YCkpIHtcbiAgICAgIHRoaXMubG9nLmluZm8oJ1dpbGwgdW5pbnN0YWxsIHJ1bm5pbmcgV0RBIHNpbmNlIGl0IGhhcyBkaWZmZXJlbnQgdmVyc2lvbiBpbiBjb21wYXJpc29uIHRvIHRoZSBvbmUgJyArXG4gICAgICAgIGB3aGljaCBpcyBidW5kbGVkIHdpdGggYXBwaXVtLXhjdWl0ZXN0LWRyaXZlciBtb2R1bGUgKCR7YWN0dWFsVXBncmFkZVRpbWVzdGFtcH0gIT0gJHt1cGdyYWRlZEF0fSlgKTtcbiAgICAgIHJldHVybiBhd2FpdCB0aGlzLnVuaW5zdGFsbCgpO1xuICAgIH1cblxuICAgIGNvbnN0IG1lc3NhZ2UgPSB1dGlsLmhhc1ZhbHVlKHByb2R1Y3RCdW5kbGVJZGVudGlmaWVyKVxuICAgICAgPyBgV2lsbCByZXVzZSBwcmV2aW91c2x5IGNhY2hlZCBXREEgaW5zdGFuY2UgYXQgJyR7dGhpcy51cmwuaHJlZn0nIHdpdGggJyR7cHJvZHVjdEJ1bmRsZUlkZW50aWZpZXJ9J2BcbiAgICAgIDogYFdpbGwgcmV1c2UgcHJldmlvdXNseSBjYWNoZWQgV0RBIGluc3RhbmNlIGF0ICcke3RoaXMudXJsLmhyZWZ9J2A7XG4gICAgdGhpcy5sb2cuaW5mbyhgJHttZXNzYWdlfS4gU2V0IHRoZSB3ZGFMb2NhbFBvcnQgY2FwYWJpbGl0eSB0byBhIHZhbHVlIGRpZmZlcmVudCBmcm9tICR7dGhpcy51cmwucG9ydH0gaWYgdGhpcyBpcyBhbiB1bmRlc2lyZWQgYmVoYXZpb3IuYCk7XG4gICAgdGhpcy53ZWJEcml2ZXJBZ2VudFVybCA9IHRoaXMudXJsLmhyZWY7XG4gIH1cblxuICAvKipcbiAgICogUXVpdCBhbmQgdW5pbnN0YWxsIHJ1bm5pbmcgV0RBLlxuICAgKi9cbiAgYXN5bmMgcXVpdEFuZFVuaW5zdGFsbCAoKSB7XG4gICAgYXdhaXQgdGhpcy5xdWl0KCk7XG4gICAgYXdhaXQgdGhpcy51bmluc3RhbGwoKTtcbiAgfVxufVxuXG5leHBvcnQgZGVmYXVsdCBXZWJEcml2ZXJBZ2VudDtcbmV4cG9ydCB7IFdlYkRyaXZlckFnZW50IH07XG4iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7O0FBQUE7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBR0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBS0EsTUFBTUEsa0JBQWtCLEdBQUcsS0FBSyxJQUFoQztBQUNBLE1BQU1DLGNBQWMsR0FBRyxJQUF2QjtBQUNBLE1BQU1DLGtCQUFrQixHQUFHLDZCQUEzQjtBQUNBLE1BQU1DLHNCQUFzQixHQUFHLElBQUlDLGtCQUFKLEVBQS9COztBQUVBLE1BQU1DLGNBQU4sQ0FBcUI7RUFDbkJDLFdBQVcsQ0FBRUMsWUFBRixFQUFnQkMsSUFBSSxHQUFHLEVBQXZCLEVBQTJCQyxHQUFHLEdBQUcsSUFBakMsRUFBdUM7SUFDaEQsS0FBS0YsWUFBTCxHQUFv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
|
package/build/lib/xcodebuild.js
CHANGED
|
@@ -393,4 +393,4 @@ var _default = XcodeBuild;
|
|
|
393
393
|
exports.default = _default;require('source-map-support').install();
|
|
394
394
|
|
|
395
395
|
|
|
396
|
-
//# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImxpYi94Y29kZWJ1aWxkLmpzIl0sIm5hbWVzIjpbIkRFRkFVTFRfU0lHTklOR19JRCIsIlBSRUJVSUxEX0RFTEFZIiwiUlVOTkVSX1NDSEVNRV9JT1MiLCJMSUJfU0NIRU1FX0lPUyIsIkVSUk9SX1dSSVRJTkdfQVRUQUNITUVOVCIsIkVSUk9SX0NPUFlJTkdfQVRUQUNITUVOVCIsIklHTk9SRURfRVJST1JTIiwiUlVOTkVSX1NDSEVNRV9UViIsIkxJQl9TQ0hFTUVfVFYiLCJ4Y29kZUxvZyIsImxvZ2dlciIsImdldExvZ2dlciIsIlhjb2RlQnVpbGQiLCJjb25zdHJ1Y3RvciIsInhjb2RlVmVyc2lvbiIsImRldmljZSIsImFyZ3MiLCJsb2ciLCJkZWZhdWx0TG9nZ2VyIiwicmVhbERldmljZSIsImFnZW50UGF0aCIsImJvb3RzdHJhcFBhdGgiLCJwbGF0Zm9ybVZlcnNpb24iLCJwbGF0Zm9ybU5hbWUiLCJpb3NTZGtWZXJzaW9uIiwic2hvd1hjb2RlTG9nIiwieGNvZGVDb25maWdGaWxlIiwieGNvZGVPcmdJZCIsInhjb2RlU2lnbmluZ0lkIiwia2V5Y2hhaW5QYXRoIiwia2V5Y2hhaW5QYXNzd29yZCIsInByZWJ1aWxkV0RBIiwidXNlUHJlYnVpbHRXREEiLCJ1c2VTaW1wbGVCdWlsZFRlc3QiLCJ1c2VYY3Rlc3RydW5GaWxlIiwibGF1bmNoVGltZW91dCIsIndkYVJlbW90ZVBvcnQiLCJ1cGRhdGVkV0RBQnVuZGxlSWQiLCJkZXJpdmVkRGF0YVBhdGgiLCJtanBlZ1NlcnZlclBvcnQiLCJwcmVidWlsZERlbGF5IiwiXyIsImlzTnVtYmVyIiwiYWxsb3dQcm92aXNpb25pbmdEZXZpY2VSZWdpc3RyYXRpb24iLCJyZXN1bHRCdW5kbGVQYXRoIiwicmVzdWx0QnVuZGxlVmVyc2lvbiIsImluaXQiLCJub1Nlc3Npb25Qcm94eSIsImRldml2ZUluZm8iLCJpc1JlYWxEZXZpY2UiLCJ1ZGlkIiwieGN0ZXN0cnVuRmlsZVBhdGgiLCJyZXRyaWV2ZURlcml2ZWREYXRhUGF0aCIsIl9kZXJpdmVkRGF0YVBhdGhQcm9taXNlIiwic3Rkb3V0IiwiZXJyIiwid2FybiIsIm1lc3NhZ2UiLCJwYXR0ZXJuIiwibWF0Y2giLCJleGVjIiwidHJ1bmNhdGUiLCJsZW5ndGgiLCJkZWJ1ZyIsInBhdGgiLCJkaXJuYW1lIiwibm9ybWFsaXplIiwicmVzZXQiLCJwcmVidWlsZCIsInN0YXJ0IiwieGNvZGVidWlsZCIsIkIiLCJkZWxheSIsImNsZWFuUHJvamVjdCIsInRtcElzVHZPUyIsImxpYlNjaGVtZSIsInJ1bm5lclNjaGVtZSIsInNjaGVtZSIsImdldENvbW1hbmQiLCJidWlsZE9ubHkiLCJjbWQiLCJidWlsZENtZCIsInRlc3RDbWQiLCJwdXNoIiwidmVyc2lvbk1hdGNoIiwiUmVnRXhwIiwicHJvY2VzcyIsImVudiIsIkFQUElVTV9YQ1VJVEVTVF9UUkVBVF9XQVJOSU5HU19BU19FUlJPUlMiLCJjcmVhdGVTdWJQcm9jZXNzIiwiam9pbiIsIk9iamVjdCIsImFzc2lnbiIsIlVTRV9QT1JUIiwiV0RBX1BST0RVQ1RfQlVORExFX0lERU5USUZJRVIiLCJXREFfUlVOTkVSX0JVTkRMRV9JRCIsIk1KUEVHX1NFUlZFUl9QT1JUIiwidXBncmFkZVRpbWVzdGFtcCIsIlVQR1JBREVfVElNRVNUQU1QIiwiU3ViUHJvY2VzcyIsImN3ZCIsImRldGFjaGVkIiwic3RkaW8iLCJsb2dYY29kZU91dHB1dCIsImxvZ01zZyIsImlzQm9vbGVhbiIsIm9uIiwic3RkZXJyIiwib3V0IiwiaW5jbHVkZXMiLCJsb2dMb2NhdGlvbiIsImZpcnN0IiwicmVtb3ZlIiwidHJpbSIsInNwbGl0IiwidiIsInN0YXJ0c1dpdGgiLCJzZXAiLCJpZ25vcmVFcnJvciIsInNvbWUiLCJ4IiwiX3dkYV9lcnJvcl9vY2N1cnJlZCIsImxpbmUiLCJFT0wiLCJlcnJvciIsIl93ZGFfZXJyb3JfbWVzc2FnZSIsInJlc29sdmUiLCJyZWplY3QiLCJjb2RlIiwic2lnbmFsIiwiZGF0YSIsImZzIiwicmVhZEZpbGUiLCJwcm9jZXNzRXhpdGVkIiwiRXJyb3IiLCJ0aW1lciIsInRpbWluZyIsIlRpbWVyIiwic3RhdHVzIiwid2FpdEZvclN0YXJ0IiwibXNnIiwiY3VycmVudFN0YXR1cyIsInJldHJpZXMiLCJwYXJzZUludCIsInByb3h5VGltZW91dCIsInRpbWVvdXQiLCJjb21tYW5kIiwiaW9zIiwiaXAiLCJhZ2VudFVybCIsIkpTT04iLCJzdHJpbmdpZnkiLCJnZXREdXJhdGlvbiIsImFzTWlsbGlTZWNvbmRzIiwidG9GaXhlZCIsInF1aXQiXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7O0FBQUE7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBSUE7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBR0EsTUFBTUEsa0JBQWtCLEdBQUcsa0JBQTNCO0FBQ0EsTUFBTUMsY0FBYyxHQUFHLENBQXZCO0FBQ0EsTUFBTUMsaUJBQWlCLEdBQUcsc0JBQTFCO0FBQ0EsTUFBTUMsY0FBYyxHQUFHLG1CQUF2QjtBQUVBLE1BQU1DLHdCQUF3QixHQUFHLHVDQUFqQztBQUNBLE1BQU1DLHdCQUF3QixHQUFHLGtDQUFqQztBQUNBLE1BQU1DLGNBQWMsR0FBRyxDQUNyQkYsd0JBRHFCLEVBRXJCQyx3QkFGcUIsRUFHckIscUNBSHFCLENBQXZCO0FBTUEsTUFBTUUsZ0JBQWdCLEdBQUcsMkJBQXpCO0FBQ0EsTUFBTUMsYUFBYSxHQUFHLHdCQUF0Qjs7QUFFQSxNQUFNQyxRQUFRLEdBQUdDLGdCQUFPQyxTQUFQLENBQWlCLE9BQWpCLENBQWpCOztBQUdBLE1BQU1DLFVBQU4sQ0FBaUI7QUFDZkMsRUFBQUEsV0FBVyxDQUFFQyxZQUFGLEVBQWdCQyxNQUFoQixFQUF3QkMsSUFBSSxHQUFHLEVBQS9CLEVBQW1DQyxHQUFHLEdBQUcsSUFBekMsRUFBK0M7QUFDeEQsU0FBS0gsWUFBTCxHQUFvQkEsWUFBcEI7QUFFQSxTQUFLQyxNQUFMLEdBQWNBLE1BQWQ7QUFDQSxTQUFLRSxHQUFMLEdBQVdBLEdBQVgsYUFBV0EsR0FBWCxjQUFXQSxHQUFYLEdB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Q0QsZUFBS25JLEdBQUwsQ0FBUzhDLEtBQVQsQ0FBZ0IsNkJBQWhCO0FBQ0EsZUFBSzlDLEdBQUwsQ0FBUzhDLEtBQVQsQ0FBZXVGLElBQUksQ0FBQ0MsU0FBTCxDQUFlVixhQUFmLEVBQThCLElBQTlCLEVBQW9DLENBQXBDLENBQWY7QUFDRCxTQVBELENBT0UsT0FBT3RGLEdBQVAsRUFBWTtBQUNaLGdCQUFNLElBQUkrRSxLQUFKLENBQVcsZ0RBQStDL0UsR0FBRyxDQUFDRSxPQUFRLEVBQXRFLENBQU47QUFDRCxTQVRELFNBU1U7QUFDUixlQUFLVixjQUFMLENBQW9Ca0csT0FBcEIsR0FBOEJELFlBQTlCO0FBQ0Q7QUFDRixPQW5CSyxDQUFOOztBQXFCQSxVQUFJLEtBQUsxRSxVQUFMLENBQWdCK0QsYUFBcEIsRUFBbUM7QUFFakMsZUFBT1EsYUFBUDtBQUNEOztBQUVELFdBQUs1SCxHQUFMLENBQVM4QyxLQUFULENBQWdCLDZDQUE0Q3dFLEtBQUssQ0FBQ2lCLFdBQU4sR0FBb0JDLGNBQXBCLENBQW1DQyxPQUFuQyxDQUEyQyxDQUEzQyxDQUE4QyxJQUExRztBQUNELEtBN0JELENBNkJFLE9BQU9uRyxHQUFQLEVBQVk7QUFHWixXQUFLdEMsR0FBTCxDQUFTOEMsS0FBVCxDQUFlUixHQUFHLENBQUNFLE9BQW5CO0FBQ0EsV0FBS3hDLEdBQUwsQ0FBU3VDLElBQVQsQ0FBZSxrRUFBZjtBQUNEOztBQUNELFdBQU9xRixhQUFQO0FBQ0Q7O0FBRVMsUUFBSmMsSUFBSSxHQUFJO0FBQ1osVUFBTSx3QkFBWSxZQUFaLEVBQTBCLEtBQUtyRixVQUEvQixDQUFOO0FBQ0Q7O0FBclhjOzs7ZUF5WEYxRCxVIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgcmV0cnlJbnRlcnZhbCB9IGZyb20gJ2FzeW5jYm94JztcbmltcG9ydCB7IFN1YlByb2Nlc3MsIGV4ZWMgfSBmcm9tICd0ZWVuX3Byb2Nlc3MnO1xuaW1wb3J0IHsgZnMsIGxvZ2dlciwgdGltaW5nIH0gZnJvbSAnQGFwcGl1bS9zdXBwb3J0JztcbmltcG9ydCBkZWZhdWx0TG9nZ2VyIGZyb20gJy4vbG9nZ2VyJztcbmltcG9ydCBCIGZyb20gJ2JsdWViaXJkJztcbmltcG9ydCB7XG4gIHNldFJlYWxEZXZpY2VTZWN1cml0eSwgZ2VuZXJhdGVYY29kZUNvbmZpZ0ZpbGUsIHNldFhjdGVzdHJ1bkZpbGUsXG4gIHVwZGF0ZVByb2plY3RGaWxlLCByZXNldFByb2plY3RGaWxlLCBraWxsUHJvY2VzcyxcbiAgZ2V0V0RBVXBncmFkZVRpbWVzdGFtcCwgaXNUdk9TIH0gZnJvbSAnLi91dGlscyc7XG5pbXBvcnQgXyBmcm9tICdsb2Rhc2gnO1xuaW1wb3J0IHBhdGggZnJvbSAncGF0aCc7XG5pbXBvcnQgeyBFT0wgfSBmcm9tICdvcyc7XG5pbXBvcnQgeyBXREFfUlVOTkVSX0JVTkRMRV9JRCB9IGZyb20gJy4vY29uc3RhbnRzJztcblxuXG5jb25zdCBERUZBVUxUX1NJR05JTkdfSUQgPSAnaVBob25lIERldmVsb3Blcic7XG5jb25zdCBQUkVCVUlMRF9ERUxBWSA9IDA7XG5jb25zdCBSVU5ORVJfU0NIRU1FX0lPUyA9ICdXZWJEcml2ZXJBZ2VudFJ1bm5lcic7XG5jb25zdCBMSUJfU0NIRU1FX0lPUyA9ICdXZWJEcml2ZXJBZ2VudExpYic7XG5cbmNvbnN0IEVSUk9SX1dSSVRJTkdfQVRUQUNITUVOVCA9ICdFcnJvciB3cml0aW5nIGF0dGFjaG1lbnQgZGF0YSB0byBmaWxlJztcbmNvbnN0IEVSUk9SX0NPUFlJTkdfQVRUQUNITUVOVCA9ICdFcnJvciBjb3B5aW5nIHRlc3RpbmcgYXR0YWNobWVudCc7XG5jb25zdCBJR05PUkVEX0VSUk9SUyA9IFtcbiAgRVJST1JfV1JJVElOR19BVFRBQ0hNRU5ULFxuICBFUlJPUl9DT1BZSU5HX0FUVEFDSE1FTlQsXG4gICdGYWlsZWQgdG8gcmVtb3ZlIHNjcmVlbnNob3QgYXQgcGF0aCcsXG5dO1xuXG5jb25zdCBSVU5ORVJfU0NIRU1FX1RWID0gJ1dlYkRyaXZlckFnZW50UnVubmVyX3R2T1MnO1xuY29uc3QgTElCX1NDSEVNRV9UViA9ICdXZWJEcml2ZXJBZ2VudExpYl90dk9TJztcblxuY29uc3QgeGNvZGVMb2cgPSBsb2dnZXIuZ2V0TG9nZ2VyKCdYY29kZScpO1xuXG5cbmNsYXNzIFhjb2RlQnVpbGQge1xuICBjb25zdHJ1Y3RvciAoeGNvZGVWZXJzaW9uLCBkZXZpY2UsIGFyZ3MgPSB7fSwgbG9nID0gbnVsbCkge1xuICAgIHRoaXMueGNvZGVWZXJzaW9uID0geGNvZGVWZXJzaW9uO1xuXG4gICAgdGhpcy5kZXZpY2UgPSBkZXZpY2U7XG4gICAgdGhpcy5sb2cgPSBsb2cgPz8gZGVmYXVsdExvZ2dlcjtcblxuICAgIHRoaXMucmVhbERldmljZSA9IGFyZ3MucmVhbERldmljZTtcblxuICAgIHRoaXMuYWdlbnRQYXRoID0gYXJncy5hZ2VudFBhdGg7XG4gICAgdGhpcy5ib290c3RyYXBQYXRoID0gYXJncy5ib290c3RyYXBQYXRoO1xuXG4gICAgdGhpcy5wbGF0Zm9ybVZlcnNpb24gPSBhcmdzLnBsYXRmb3JtVmVyc2lvbjtcbiAgICB0aGlzLnBsYXRmb3JtTmFtZSA9IGFyZ3MucGxhdGZvcm1OYW1lO1xuICAgIHRoaXMuaW9zU2RrVmVyc2lvbiA9IGFyZ3MuaW9zU2RrVmVyc2lvbjtcblxuICAgIHRoaXMuc2hvd1hjb2RlTG9nID0gYXJncy5zaG93WGNvZGVMb2c7XG5cbiAgICB0aGlzLnhjb2RlQ29uZmlnRmlsZSA9IGFyZ3MueGNvZGVDb25maWdGaWxlO1xuICAgIHRoaXMueGNvZGVPcmdJZCA9IGFyZ3MueGNvZGVPcmdJZDtcbiAgICB0aGlzLnhjb2RlU2lnbmluZ0lkID0gYXJncy54Y29kZVNpZ25pbmdJZCB8fCBERUZBVUxUX1NJR05JTkdfSUQ7XG4gICAgdGhpcy5rZXljaGFpblBhdGggPSBhcmdzLmtleWNoYWluUGF0aDtcbiAgICB0aGlzLmtleWNoYWluUGFzc3dvcmQgPSBhcmdzLmtleWNoYWluUGFzc3dvcmQ7XG5cbiAgICB0aGlzLnByZWJ1aWxkV0RBID0gYXJncy5wcmVidWlsZFdEQTtcbiAgICB0aGlzLnVzZVByZWJ1aWx0V0RBID0gYXJncy51c2VQcmVidWlsdFdEQTtcbiAgICB0aGlzLnVzZVNpbXBsZUJ1aWxkVGVzdCA9IGFyZ3MudXNlU2ltcGxlQnVpbGRUZXN0O1xuXG4gICAgdGhpcy51c2VYY3Rlc3RydW5GaWxlID0gYXJncy51c2VYY3Rlc3RydW5GaWxlO1xuXG4gICAgdGhpcy5sYXVuY2hUaW1lb3V0ID0gYXJncy5sYXVuY2hUaW1lb3V0O1xuXG4gICAgdGhpcy53ZGFSZW1vdGVQb3J0ID0gYXJncy53ZGFSZW1vdGVQb3J0O1xuXG4gICAgdGhpcy51cGRhdGVkV0RBQnVuZGxlSWQgPSBhcmdzLnVwZGF0ZWRXREFCdW5kbGVJZDtcbiAgICB0aGlzLmRlcml2ZWREYXRhUGF0aCA9IGFyZ3MuZGVyaXZlZERhdGFQYXRoO1xuXG4gICAgdGhpcy5tanBlZ1NlcnZlclBvcnQgPSBhcmdzLm1qcGVnU2VydmVyUG9ydDtcblxuICAgIHRoaXMucHJlYnVpbGREZWxheSA9IF8uaXNOdW1iZXIoYXJncy5wcmVidWlsZERlbGF5KSA/IGFyZ3MucHJlYnVpbGREZWxheSA6IFBSRUJVSUxEX0RFTEFZO1xuXG4gICAgdGhpcy5hbGxvd1Byb3Zpc2lvbmluZ0RldmljZVJlZ2lzdHJhdGlvbiA9IGFyZ3MuYWxsb3dQcm92aXNpb25pbmdEZXZpY2VSZWdpc3RyYXRpb247XG5cbiAgICB0aGlzLnJlc3VsdEJ1bmRsZVBhdGggPSBhcmdzLnJlc3VsdEJ1bmRsZVBhdGg7XG4gICAgdGhpcy5yZXN1bHRCdW5kbGVWZXJzaW9uID0gYXJncy5yZXN1bHRCdW5kbGVWZXJzaW9uO1xuICB9XG5cbiAgYXN5bmMgaW5pdCAobm9TZXNzaW9uUHJveHkpIHtcbiAgICB0aGlzLm5vU2Vzc2lvblByb3h5ID0gbm9TZXNzaW9uUHJveHk7XG5cbiAgICBpZiAodGhpcy51c2VYY3Rlc3RydW5GaWxlKSB7XG4gICAgICBjb25zdCBkZXZpdmVJbmZvID0ge1xuICAgICAgICBpc1JlYWxEZXZpY2U6IHRoaXMucmVhbERldmljZSxcbiAgICAgICAgdWRpZDogdGhpcy5kZXZpY2UudWRpZCxcbiAgICAgICAgcGxhdGZvcm1WZXJzaW9uOiB0aGlzLnBsYXRmb3JtVmVyc2lvbixcbiAgICAgICAgcGxhdGZvcm1OYW1lOiB0aGlzLnBsYXRmb3JtTmFtZVxuICAgICAgfTtcbiAgICAgIHRoaXMueGN0ZXN0cnVuRmlsZVBhdGggPSBhd2FpdCBzZXRYY3Rlc3RydW5GaWxlKGRldml2ZUluZm8sIHRoaXMuaW9zU2RrVmVyc2lvbiwgdGhpcy5ib290c3RyYXBQYXRoLCB0aGlzLndkYVJlbW90ZVBvcnQpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIC8vIGlmIG5lY2Vzc2FyeSwgdXBkYXRlIHRoZSBidW5kbGVJZCB0byB1c2VyJ3Mgc3BlY2lmaWNhdGlvblxuICAgIGlmICh0aGlzLnJlYWxEZXZpY2UpIHtcbiAgICAgIC8vIEluIGNhc2UgdGhlIHByb2plY3Qgc3RpbGwgaGFzIHRoZSB1c2VyIHNwZWNpZmljIGJ1bmRsZSBJRCwgcmVzZXQgdGhlIHByb2plY3QgZmlsZSBmaXJzdC5cbiAgICAgIC8vIC0gV2UgZG8gdGhpcyByZXNldCBldmVuIGlmIHVwZGF0ZWRXREFCdW5kbGVJZCBpcyBub3Qgc3BlY2lmaWVkLFxuICAgICAgLy8gICBzaW5jZSB0aGUgcHJldmlvdXMgdXBkYXRlZFdEQUJ1bmRsZUlkIHRlc3QgaGFzIGdlbmVyYXRlZCB0aGUgdXNlciBzcGVjaWZpYyBidW5kbGUgSUQgcHJvamVjdCBmaWxlLlxuICAgICAgLy8gLSBXZSBkb24ndCBjYWxsIHJlc2V0UHJvamVjdEZpbGUgZm9yIHNpbXVsYXRvcixcbiAgICAgIC8vICAgc2luY2Ugc2ltdWxhdG9yIHRlc3QgcnVuIHdpbGwgd29yayB3aXRoIGFueSB1c2VyIHNwZWNpZmljIGJ1bmRsZSBJRC5cbiAgICAgIGF3YWl0IHJlc2V0UHJvamVjdEZpbGUodGhpcy5hZ2VudFBhdGgpO1xuICAgICAgaWYgKHRoaXMudXBkYXRlZFdEQUJ1bmRsZUlkKSB7XG4gICAgICAgIGF3YWl0IHVwZGF0ZVByb2plY3RGaWxlKHRoaXMuYWdlbnRQYXRoLCB0aGlzLnVwZGF0ZWRXREFCdW5kbGVJZCk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgYXN5bmMgcmV0cmlldmVEZXJpdmVkRGF0YVBhdGggKCkge1xuICAgIGlmICh0aGlzLmRlcml2ZWREYXRhUGF0aCkge1xuICAgICAgcmV0dXJuIHRoaXMuZGVyaXZlZERhdGFQYXRoO1xuICAgIH1cblxuICAgIC8vIGF2b2lkIHJhY2UgY29uZGl0aW9uc1xuICAgIGlmICh0aGlzLl9kZXJpdmVkRGF0YVBhdGhQcm9taXNlKSB7XG4gICAgICByZXR1cm4gYXdhaXQgdGhpcy5fZGVyaXZlZERhdGFQYXRoUHJvbWlzZTtcbiAgICB9XG5cbiAgICB0aGlzLl9kZXJpdmVkRGF0YVBhdGhQcm9taXNlID0gKGFzeW5jICgpID0+IHtcbiAgICAgIGxldCBzdGRvdXQ7XG4gICAgICB0cnkge1xuICAgICAgICAoe3N0ZG91dH0gPSBhd2FpdCBleGVjKCd4Y29kZWJ1aWxkJywgWyctcHJvamVjdCcsIHRoaXMuYWdlbnRQYXRoLCAnLXNob3dCdWlsZFNldHRpbmdzJ10pKTtcbiAgICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgICB0aGlzLmxvZy53YXJuKGBDYW5ub3QgcmV0cmlldmUgV0RBIGJ1aWxkIHNldHRpbmdzLiBPcmlnaW5hbCBlcnJvcjogJHtlcnIubWVzc2FnZX1gKTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICBjb25zdCBwYXR0ZXJuID0gL15cXHMqQlVJTERfRElSXFxzKz1cXHMrKFxcLy4qKS9tO1xuICAgICAgY29uc3QgbWF0Y2ggPSBwYXR0ZXJuLmV4ZWMoc3Rkb3V0KTtcbiAgICAgIGlmICghbWF0Y2gpIHtcbiAgICAgICAgdGhpcy5sb2cud2FybihgQ2Fubm90IHBhcnNlIFdEQSBidWlsZCBkaXIgZnJvbSAke18udHJ1bmNhdGUoc3Rkb3V0LCB7bGVuZ3RoOiAzMDB9KX1gKTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgdGhpcy5sb2cuZGVidWcoYFBhcnNlZCBCVUlMRF9ESVIgY29uZmlndXJhdGlvbiB2YWx1ZTogJyR7bWF0Y2hbMV19J2ApO1xuICAgICAgLy8gRGVyaXZlZCBkYXRhIHJvb3QgaXMgdHdvIGxldmVscyBoaWdoZXIgb3ZlciB0aGUgYnVpbGQgZGlyXG4gICAgICB0aGlzLmRlcml2ZWREYXRhUGF0aCA9IHBhdGguZGlybmFtZShwYXRoLmRpcm5hbWUocGF0aC5ub3JtYWxpemUobWF0Y2hbMV0pKSk7XG4gICAgICB0aGlzLmxvZy5kZWJ1ZyhgR290IGRlcml2ZWQgZGF0YSByb290OiAnJHt0aGlzLmRlcml2ZWREYXRhUGF0aH0nYCk7XG4gICAgICByZXR1cm4gdGhpcy5kZXJpdmVkRGF0YVBhdGg7XG4gICAgfSkoKTtcbiAgICByZXR1cm4gYXdhaXQgdGhpcy5fZGVyaXZlZERhdGFQYXRoUHJvbWlzZTtcbiAgfVxuXG4gIGFzeW5jIHJlc2V0ICgpIHtcbiAgICAvLyBpZiBuZWNlc3NhcnksIHJlc2V0IHRoZSBidW5kbGVJZCB0byBvcmlnaW5hbCB2YWx1ZVxuICAgIGlmICh0aGlzLnJlYWxEZXZpY2UgJiYgdGhpcy51cGRhdGVkV0RBQnVuZGxlSWQpIHtcbiAgICAgIGF3YWl0IHJlc2V0UHJvamVjdEZpbGUodGhpcy5hZ2VudFBhdGgpO1xuICAgIH1cbiAgfVxuXG4gIGFzeW5jIHByZWJ1aWxkICgpIHtcbiAgICAvLyBmaXJzdCBkbyBhIGJ1aWxkIHBoYXNlXG4gICAgdGhpcy5sb2cuZGVidWcoJ1ByZS1idWlsZGluZyBXREEgYmVmb3JlIGxhdW5jaGluZyB0ZXN0Jyk7XG4gICAgdGhpcy51c2VQcmVidWlsdFdEQSA9IHRydWU7XG4gICAgYXdhaXQgdGhpcy5zdGFydCh0cnVlKTtcblxuICAgIHRoaXMueGNvZGVidWlsZCA9IG51bGw7XG5cbiAgICAvLyBwYXVzZSBhIG1vbWVudFxuICAgIGF3YWl0IEIuZGVsYXkodGhpcy5wcmVidWlsZERlbGF5KTtcbiAgfVxuXG4gIGFzeW5jIGNsZWFuUHJvamVjdCAoKSB7XG4gICAgY29uc3QgdG1wSXNUdk9TID0gaXNUdk9TKHRoaXMucGxhdGZvcm1OYW1lKTtcbiAgICBjb25zdCBsaWJTY2hlbWUgPSB0bXBJc1R2T1MgPyBMSUJfU0NIRU1FX1RWIDogTElCX1NDSEVNRV9JT1M7XG4gICAgY29uc3QgcnVubmVyU2NoZW1lID0gdG1wSXNUdk9TID8gUlVOTkVSX1NDSEVNRV9UViA6IFJVTk5FUl9TQ0hFTUVfSU9TO1xuXG4gICAgZm9yIChjb25zdCBzY2hlbWUgb2YgW2xpYlNjaGVtZSwgcnVubmVyU2NoZW1lXSkge1xuICAgICAgdGhpcy5sb2cuZGVidWcoYENsZWFuaW5nIHRoZSBwcm9qZWN0IHNjaGVtZSAnJHtzY2hlbWV9JyB0byBtYWtlIHN1cmUgdGhlcmUgYXJlIG5vIGxlZnRvdmVycyBmcm9tIHByZXZpb3VzIGluc3RhbGxzYCk7XG4gICAgICBhd2FpdCBleGVjKCd4Y29kZWJ1aWxkJywgW1xuICAgICAgICAnY2xlYW4nLFxuICAgICAgICAnLXByb2plY3QnLCB0aGlzLmFnZW50UGF0aCxcbiAgICAgICAgJy1zY2hlbWUnLCBzY2hlbWUsXG4gICAgICBdKTtcbiAgICB9XG4gIH1cblxuICBnZXRDb21tYW5kIChidWlsZE9ubHkgPSBmYWxzZSkge1xuICAgIGxldCBjbWQgPSAneGNvZGVidWlsZCc7XG4gICAgbGV0IGFyZ3M7XG5cbiAgICAvLyBmaWd1cmUgb3V0IHRoZSB0YXJnZXRzIGZvciB4Y29kZWJ1aWxkXG4gICAgY29uc3QgW2J1aWxkQ21kLCB0ZXN0Q21kXSA9IHRoaXMudXNlU2ltcGxlQnVpbGRUZXN0ID8gWydidWlsZCcsICd0ZXN0J10gOiBbJ2J1aWxkLWZvci10ZXN0aW5nJywgJ3Rlc3Qtd2l0aG91dC1idWlsZGluZyddO1xuICAgIGlmIChidWlsZE9ubHkpIHtcbiAgICAgIGFyZ3MgPSBbYnVpbGRDbWRdO1xuICAgIH0gZWxzZSBpZiAodGhpcy51c2VQcmVidWlsdFdEQSB8fCB0aGlzLnVzZVhjdGVzdHJ1bkZpbGUpIHtcbiAgICAgIGFyZ3MgPSBbdGVzdENtZF07XG4gICAgfSBlbHNlIHtcbiAgICAgIGFyZ3MgPSBbYnVpbGRDbWQsIHRlc3RDbWRdO1xuICAgIH1cblxuICAgIGlmICh0aGlzLmFsbG93UHJvdmlzaW9uaW5nRGV2aWNlUmVnaXN0cmF0aW9uKSB7XG4gICAgICAvLyBUbyAtYWxsb3dQcm92aXNpb25pbmdEZXZpY2VSZWdpc3RyYXRpb24gZmxhZyB0YWtlcyBlZmZlY3QsIC1hbGxvd1Byb3Zpc2lvbmluZ1VwZGF0ZXMgbmVlZHMgdG8gYmUgcGFzc2VkIGFzIHdlbGwuXG4gICAgICBhcmdzLnB1c2goJy1hbGxvd1Byb3Zpc2lvbmluZ1VwZGF0ZXMnLCAnLWFsbG93UHJvdmlzaW9uaW5nRGV2aWNlUmVnaXN0cmF0aW9uJyk7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMucmVzdWx0QnVuZGxlUGF0aCkge1xuICAgICAgYXJncy5wdXNoKCctcmVzdWx0QnVuZGxlUGF0aCcsIHRoaXMucmVzdWx0QnVuZGxlUGF0aCk7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMucmVzdWx0QnVuZGxlVmVyc2lvbikge1xuICAgICAgYXJncy5wdXNoKCctcmVzdWx0QnVuZGxlVmVyc2lvbicsIHRoaXMucmVzdWx0QnVuZGxlVmVyc2lvbik7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMudXNlWGN0ZXN0cnVuRmlsZSkge1xuICAgICAgYXJncy5wdXNoKCcteGN0ZXN0cnVuJywgdGhpcy54Y3Rlc3RydW5GaWxlUGF0aCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGNvbnN0IHJ1bm5lclNjaGVtZSA9IGlzVHZPUyh0aGlzLnBsYXRmb3JtTmFtZSkgPyBSVU5ORVJfU0NIRU1FX1RWIDogUlVOTkVSX1NDSEVNRV9JT1M7XG4gICAgICBhcmdzLnB1c2goJy1wcm9qZWN0JywgdGhpcy5hZ2VudFBhdGgsICctc2NoZW1lJywgcnVubmVyU2NoZW1lKTtcbiAgICAgIGlmICh0aGlzLmRlcml2ZWREYXRhUGF0aCkge1xuICAgICAgICBhcmdzLnB1c2goJy1kZXJpdmVkRGF0YVBhdGgnLCB0aGlzLmRlcml2ZWREYXRhUGF0aCk7XG4gICAgICB9XG4gICAgfVxuICAgIGFyZ3MucHVzaCgnLWRlc3RpbmF0aW9uJywgYGlkPSR7dGhpcy5kZXZpY2UudWRpZH1gKTtcblxuICAgIGNvbnN0IHZlcnNpb25NYXRjaCA9IG5ldyBSZWdFeHAoL14oXFxkKylcXC4oXFxkKykvKS5leGVjKHRoaXMucGxhdGZvcm1WZXJzaW9uKTtcbiAgICBpZiAodmVyc2lvbk1hdGNoKSB7XG4gICAgICBhcmdzLnB1c2goYElQSE9ORU9TX0RFUExPWU1FTlRfVEFSR0VUPSR7dmVyc2lvbk1hdGNoWzFdfS4ke3ZlcnNpb25NYXRjaFsyXX1gKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5sb2cud2FybihgQ2Fubm90IHBhcnNlIG1ham9yIGFuZCBtaW5vciB2ZXJzaW9uIG51bWJlcnMgZnJvbSBwbGF0Zm9ybVZlcnNpb24gXCIke3RoaXMucGxhdGZvcm1WZXJzaW9ufVwiLiBgICtcbiAgICAgICAgJ1dpbGwgYnVpbGQgZm9yIHRoZSBkZWZhdWx0IHBsYXRmb3JtIGluc3RlYWQnKTtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5yZWFsRGV2aWNlICYmIHRoaXMueGNvZGVDb25maWdGaWxlKSB7XG4gICAgICB0aGlzLmxvZy5kZWJ1ZyhgVXNpbmcgWGNvZGUgY29uZmlndXJhdGlvbiBmaWxlOiAnJHt0aGlzLnhjb2RlQ29uZmlnRmlsZX0nYCk7XG4gICAgICBhcmdzLnB1c2goJy14Y2NvbmZpZycsIHRoaXMueGNvZGVDb25maWdGaWxlKTtcbiAgICB9XG5cbiAgICBpZiAoIXByb2Nlc3MuZW52LkFQUElVTV9YQ1VJVEVTVF9UUkVBVF9XQVJOSU5HU19BU19FUlJPUlMpIHtcbiAgICAgIC8vIFRoaXMgc29tZXRpbWVzIGhlbHBzIHRvIHN1cnZpdmUgWGNvZGUgdXBkYXRlc1xuICAgICAgYXJncy5wdXNoKCdHQ0NfVFJFQVRfV0FSTklOR1NfQVNfRVJST1JTPTAnKTtcbiAgICB9XG5cbiAgICAvLyBCZWxvdyBvcHRpb24gc2xpZ2h0bHkgcmVkdWNlcyBidWlsZCB0aW1lIGluIGRlYnVnIGJ1aWxkXG4gICAgLy8gd2l0aCBwcmV2ZW50aW5nIHRvIGdlbmVyYXRlIGAvSW5kZXgvRGF0YVN0b3JlYCB3aGljaCBpcyB1c2VkIGJ5IGRldmVsb3BtZW50XG4gICAgYXJncy5wdXNoKCdDT01QSUxFUl9JTkRFWF9TVE9SRV9FTkFCTEU9Tk8nKTtcblxuICAgIHJldHVybiB7Y21kLCBhcmdzfTtcbiAgfVxuXG4gIGFzeW5jIGNyZWF0ZVN1YlByb2Nlc3MgKGJ1aWxkT25seSA9IGZhbHNlKSB7XG4gICAgaWYgKCF0aGlzLnVzZVhjdGVzdHJ1bkZpbGUgJiYgdGhpcy5yZWFsRGV2aWNlKSB7XG4gICAgICBpZiAodGhpcy5rZXljaGFpblBhdGggJiYgdGhpcy5rZXljaGFpblBhc3N3b3JkKSB7XG4gICAgICAgIGF3YWl0IHNldFJlYWxEZXZpY2VTZWN1cml0eSh0aGlzLmtleWNoYWluUGF0aCwgdGhpcy5rZXljaGFpblBhc3N3b3JkKTtcbiAgICAgIH1cbiAgICAgIGlmICh0aGlzLnhjb2RlT3JnSWQgJiYgdGhpcy54Y29kZVNpZ25pbmdJZCAmJiAhdGhpcy54Y29kZUNvbmZpZ0ZpbGUpIHtcbiAgICAgICAgdGhpcy54Y29kZUNvbmZpZ0ZpbGUgPSBhd2FpdCBnZW5lcmF0ZVhjb2RlQ29uZmlnRmlsZSh0aGlzLnhjb2RlT3JnSWQsIHRoaXMueGNvZGVTaWduaW5nSWQpO1xuICAgICAgfVxuICAgIH1cblxuICAgIGNvbnN0IHtjbWQsIGFyZ3N9ID0gdGhpcy5nZXRDb21tYW5kKGJ1aWxkT25seSk7XG4gICAgdGhpcy5sb2cuZGVidWcoYEJlZ2lubmluZyAke2J1aWxkT25seSA/ICdidWlsZCcgOiAndGVzdCd9IHdpdGggY29tbWFuZCAnJHtjbWR9ICR7YXJncy5qb2luKCcgJyl9JyBgICtcbiAgICAgIGBpbiBkaXJlY3RvcnkgJyR7dGhpcy5ib290c3RyYXBQYXRofSdgKTtcbiAgICBjb25zdCBlbnYgPSBPYmplY3QuYXNzaWduKHt9LCBwcm9jZXNzLmVudiwge1xuICAgICAgVVNFX1BPUlQ6IHRoaXMud2RhUmVtb3RlUG9ydCxcbiAgICAgIFdEQV9QUk9EVUNUX0JVTkRMRV9JREVOVElGSUVSOiB0aGlzLnVwZGF0ZWRXREFCdW5kbGVJZCB8fCBXREFfUlVOTkVSX0JVTkRMRV9JRCxcbiAgICB9KTtcbiAgICBpZiAodGhpcy5tanBlZ1NlcnZlclBvcnQpIHtcbiAgICAgIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS9hcHBpdW0vV2ViRHJpdmVyQWdlbnQvcHVsbC8xMDVcbiAgICAgIGVudi5NSlBFR19TRVJWRVJfUE9SVCA9IHRoaXMubWpwZWdTZXJ2ZXJQb3J0O1xuICAgIH1cbiAgICBjb25zdCB1cGdyYWRlVGltZXN0YW1wID0gYXdhaXQgZ2V0V0RBVXBncmFkZVRpbWVzdGFtcCh0aGlzLmJvb3RzdHJhcFBhdGgpO1xuICAgIGlmICh1cGdyYWRlVGltZXN0YW1wKSB7XG4gICAgICBlbnYuVVBHUkFERV9USU1FU1RBTVAgPSB1cGdyYWRlVGltZXN0YW1wO1xuICAgIH1cbiAgICBjb25zdCB4Y29kZWJ1aWxkID0gbmV3IFN1YlByb2Nlc3MoY21kLCBhcmdzLCB7XG4gICAgICBjd2Q6IHRoaXMuYm9vdHN0cmFwUGF0aCxcbiAgICAgIGVudixcbiAgICAgIGRldGFjaGVkOiB0cnVlLFxuICAgICAgc3RkaW86IFsnaWdub3JlJywgJ3BpcGUnLCAncGlwZSddLFxuICAgIH0pO1xuXG4gICAgbGV0IGxvZ1hjb2RlT3V0cHV0ID0gISF0aGlzLnNob3dYY29kZUxvZztcbiAgICBjb25zdCBsb2dNc2cgPSBfLmlzQm9vbGVhbih0aGlzLnNob3dYY29kZUxvZylcbiAgICAgID8gYE91dHB1dCBmcm9tIHhjb2RlYnVpbGQgJHt0aGlzLnNob3dYY29kZUxvZyA/ICd3aWxsJyA6ICd3aWxsIG5vdCd9IGJlIGxvZ2dlZGBcbiAgICAgIDogJ091dHB1dCBmcm9tIHhjb2RlYnVpbGQgd2lsbCBvbmx5IGJlIGxvZ2dlZCBpZiBhbnkgZXJyb3JzIGFyZSBwcmVzZW50IHRoZXJlJztcbiAgICB0aGlzLmxvZy5kZWJ1ZyhgJHtsb2dNc2d9LiBUbyBjaGFuZ2UgdGhpcywgdXNlICdzaG93WGNvZGVMb2cnIGRlc2lyZWQgY2FwYWJpbGl0eWApO1xuICAgIHhjb2RlYnVpbGQub24oJ291dHB1dCcsIChzdGRvdXQsIHN0ZGVycikgPT4ge1xuICAgICAgbGV0IG91dCA9IHN0ZG91dCB8fCBzdGRlcnI7XG4gICAgICAvLyB3ZSB3YW50IHRvIHB1bGwgb3V0IHRoZSBsb2cgZmlsZSB0aGF0IGlzIGNyZWF0ZWQsIGFuZCBoaWdobGlnaHQgaXRcbiAgICAgIC8vIGZvciBkaWFnbm9zdGljIHB1cnBvc2VzXG4gICAgICBpZiAob3V0LmluY2x1ZGVzKCdXcml0aW5nIGRpYWdub3N0aWMgbG9nIGZvciB0ZXN0IHNlc3Npb24gdG8nKSkge1xuICAgICAgICAvLyBwdWxsIG91dCB0aGUgZmlyc3QgbGluZSB0aGF0IGJlZ2lucyB3aXRoIHRoZSBwYXRoIHNlcGFyYXRvclxuICAgICAgICAvLyB3aGljaCAqc2hvdWxkKiBiZSB0aGUgbGluZSBpbmRpY2F0aW5nIHRoZSBsb2cgZmlsZSBnZW5lcmF0ZWRcbiAgICAgICAgeGNvZGVidWlsZC5sb2dMb2NhdGlvbiA9IF8uZmlyc3QoXy5yZW1vdmUob3V0LnRyaW0oKS5zcGxpdCgnXFxuJyksICh2KSA9PiB2LnN0YXJ0c1dpdGgocGF0aC5zZXApKSk7XG4gICAgICAgIHhjb2RlTG9nLmRlYnVnKGBMb2cgZmlsZSBmb3IgeGNvZGVidWlsZCB0ZXN0OiAke3hjb2RlYnVpbGQubG9nTG9jYXRpb259YCk7XG4gICAgICB9XG5cbiAgICAgIC8vIGlmIHdlIGhhdmUgYW4gZXJyb3Igd2Ugd2FudCB0byBvdXRwdXQgdGhlIGxvZ3NcbiAgICAgIC8vIG90aGVyd2lzZSB0aGUgZmFpbHVyZSBpcyBpbnNjcnV0aWJsZVxuICAgICAgLy8gYnV0IGRvIG5vdCBsb2cgcGVybWlzc2lvbiBlcnJvcnMgZnJvbSB0cnlpbmcgdG8gd3JpdGUgdG8gYXR0YWNobWVudHMgZm9sZGVyXG4gICAgICBjb25zdCBpZ25vcmVFcnJvciA9IElHTk9SRURfRVJST1JTLnNvbWUoKHgpID0+IG91dC5pbmNsdWRlcyh4KSk7XG4gICAgICBpZiAodGhpcy5zaG93WGNvZGVMb2cgIT09IGZhbHNlICYmIG91dC5pbmNsdWRlcygnRXJyb3IgRG9tYWluPScpICYmICFpZ25vcmVFcnJvcikge1xuICAgICAgICBsb2dYY29kZU91dHB1dCA9IHRydWU7XG5cbiAgICAgICAgLy8gdGVycmlibGUgaGFjayB0byBoYW5kbGUgY2FzZSB3aGVyZSB4Y29kZSByZXR1cm4gMCBidXQgaXMgZmFpbGluZ1xuICAgICAgICB4Y29kZWJ1aWxkLl93ZGFfZXJyb3Jfb2NjdXJyZWQgPSB0cnVlO1xuICAgICAgfVxuXG4gICAgICAvLyBkbyBub3QgbG9nIHBlcm1pc3Npb24gZXJyb3JzIGZyb20gdHJ5aW5nIHRvIHdyaXRlIHRvIGF0dGFjaG1lbnRzIGZvbGRlclxuICAgICAgaWYgKGxvZ1hjb2RlT3V0cHV0ICYmICFpZ25vcmVFcnJvcikge1xuICAgICAgICBmb3IgKGNvbnN0IGxpbmUgb2Ygb3V0LnNwbGl0KEVPTCkpIHtcbiAgICAgICAgICB4Y29kZUxvZy5lcnJvcihsaW5lKTtcbiAgICAgICAgICBpZiAobGluZSkge1xuICAgICAgICAgICAgeGNvZGVidWlsZC5fd2RhX2Vycm9yX21lc3NhZ2UgKz0gYCR7RU9MfSR7bGluZX1gO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0pO1xuXG4gICAgcmV0dXJuIHhjb2RlYnVpbGQ7XG4gIH1cblxuICBhc3luYyBzdGFydCAoYnVpbGRPbmx5ID0gZmFsc2UpIHtcbiAgICB0aGlzLnhjb2RlYnVpbGQgPSBhd2FpdCB0aGlzLmNyZWF0ZVN1YlByb2Nlc3MoYnVpbGRPbmx5KTtcbiAgICAvLyBTdG9yZSB4Y29kZWJ1aWxkIG1lc3NhZ2VcbiAgICB0aGlzLnhjb2RlYnVpbGQuX3dkYV9lcnJvcl9tZXNzYWdlID0gJyc7XG5cbiAgICAvLyB3cmFwIHRoZSBzdGFydCBwcm9jZWR1cmUgaW4gYSBwcm9taXNlIHNvIHRoYXQgd2UgY2FuIGNhdGNoLCBhbmQgcmVwb3J0LFxuICAgIC8vIGFueSBzdGFydHVwIGVycm9ycyB0aGF0IGFyZSB0aHJvd24gYXMgZXZlbnRzXG4gICAgcmV0dXJuIGF3YWl0IG5ldyBCKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgIHRoaXMueGNvZGVidWlsZC5vbignZXhpdCcsIGFzeW5jIChjb2RlLCBzaWduYWwpID0+IHtcbiAgICAgICAgeGNvZGVMb2cuZXJyb3IoYHhjb2RlYnVpbGQgZXhpdGVkIHdpdGggY29kZSAnJHtjb2RlfScgYW5kIHNpZ25hbCAnJHtzaWduYWx9J2ApO1xuICAgICAgICAvLyBwcmludCBvdXQgdGhlIHhjb2RlYnVpbGQgZmlsZSBpZiB1c2VycyBoYXZlIGFza2VkIGZvciBpdFxuICAgICAgICBpZiAodGhpcy5zaG93WGNvZGVMb2cgJiYgdGhpcy54Y29kZWJ1aWxkLmxvZ0xvY2F0aW9uKSB7XG4gICAgICAgICAgeGNvZGVMb2cuZXJyb3IoYENvbnRlbnRzIG9mIHhjb2RlYnVpbGQgbG9nIGZpbGUgJyR7dGhpcy54Y29kZWJ1aWxkLmxvZ0xvY2F0aW9ufSc6YCk7XG4gICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIGxldCBkYXRhID0gYXdhaXQgZnMucmVhZEZpbGUodGhpcy54Y29kZWJ1aWxkLmxvZ0xvY2F0aW9uLCAndXRmOCcpO1xuICAgICAgICAgICAgZm9yIChsZXQgbGluZSBvZiBkYXRhLnNwbGl0KCdcXG4nKSkge1xuICAgICAgICAgICAgICB4Y29kZUxvZy5lcnJvcihsaW5lKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgICAgICAgIHhjb2RlTG9nLmVycm9yKGBVbmFibGUgdG8gYWNjZXNzIHhjb2RlYnVpbGQgbG9nIGZpbGU6ICcke2Vyci5tZXNzYWdlfSdgKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy54Y29kZWJ1aWxkLnByb2Nlc3NFeGl0ZWQgPSB0cnVlO1xuICAgICAgICBpZiAodGhpcy54Y29kZWJ1aWxkLl93ZGFfZXJyb3Jfb2NjdXJyZWQgfHwgKCFzaWduYWwgJiYgY29kZSAhPT0gMCkpIHtcbiAgICAgICAgICByZXR1cm4gcmVqZWN0KG5ldyBFcnJvcihgeGNvZGVidWlsZCBmYWlsZWQgd2l0aCBjb2RlICR7Y29kZX0ke0VPTH1gICtcbiAgICAgICAgICAgIGB4Y29kZWJ1aWxkIGVycm9yIG1lc3NhZ2U6JHtFT0x9JHt0aGlzLnhjb2RlYnVpbGQuX3dkYV9lcnJvcl9tZXNzYWdlfWApKTtcbiAgICAgICAgfVxuICAgICAgICAvLyBpbiB0aGUgY2FzZSBvZiBqdXN0IGJ1aWxkaW5nLCB0aGUgcHJvY2VzcyB3aWxsIGV4aXQgYW5kIHRoYXQgaXMgb3VyIGZpbmlzaFxuICAgICAgICBpZiAoYnVpbGRPbmx5KSB7XG4gICAgICAgICAgcmV0dXJuIHJlc29sdmUoKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG5cbiAgICAgIHJldHVybiAoYXN5bmMgKCkgPT4ge1xuICAgICAgICB0cnkge1xuICAgICAgICAgIGNvbnN0IHRpbWVyID0gbmV3IHRpbWluZy5UaW1lcigpLnN0YXJ0KCk7XG4gICAgICAgICAgYXdhaXQgdGhpcy54Y29kZWJ1aWxkLnN0YXJ0KHRydWUpO1xuICAgICAgICAgIGlmICghYnVpbGRPbmx5KSB7XG4gICAgICAgICAgICBsZXQgc3RhdHVzID0gYXdhaXQgdGhpcy53YWl0Rm9yU3RhcnQodGltZXIpO1xuICAgICAgICAgICAgcmVzb2x2ZShzdGF0dXMpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICAgICAgbGV0IG1zZyA9IGBVbmFibGUgdG8gc3RhcnQgV2ViRHJpdmVyQWdlbnQ6ICR7ZXJyfWA7XG4gICAgICAgICAgdGhpcy5sb2cuZXJyb3IobXNnKTtcbiAgICAgICAgICByZWplY3QobmV3IEVycm9yKG1zZykpO1xuICAgICAgICB9XG4gICAgICB9KSgpO1xuICAgIH0pO1xuICB9XG5cbiAgYXN5bmMgd2FpdEZvclN0YXJ0ICh0aW1lcikge1xuICAgIC8vIHRyeSB0byBjb25uZWN0IG9uY2UgZXZlcnkgMC41IHNlY29uZHMsIHVudGlsIGBsYXVuY2hUaW1lb3V0YCBpcyB1cFxuICAgIHRoaXMubG9nLmRlYnVnKGBXYWl0aW5nIHVwIHRvICR7dGhpcy5sYXVuY2hUaW1lb3V0fW1zIGZvciBXZWJEcml2ZXJBZ2VudCB0byBzdGFydGApO1xuICAgIGxldCBjdXJyZW50U3RhdHVzID0gbnVsbDtcbiAgICB0cnkge1xuICAgICAgbGV0IHJldHJpZXMgPSBwYXJzZUludCh0aGlzLmxhdW5jaFRpbWVvdXQgLyA1MDAsIDEwKTtcbiAgICAgIGF3YWl0IHJldHJ5SW50ZXJ2YWwocmV0cmllcywgMTAwMCwgYXN5bmMgKCkgPT4ge1xuICAgICAgICBpZiAodGhpcy54Y29kZWJ1aWxkLnByb2Nlc3NFeGl0ZWQpIHtcbiAgICAgICAgICAvLyB0aGVyZSBoYXMgYmVlbiBhbiBlcnJvciBlbHNld2hlcmUgYW5kIHdlIG5lZWQgdG8gc2hvcnQtY2lyY3VpdFxuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBwcm94eVRpbWVvdXQgPSB0aGlzLm5vU2Vzc2lvblByb3h5LnRpbWVvdXQ7XG4gICAgICAgIHRoaXMubm9TZXNzaW9uUHJveHkudGltZW91dCA9IDEwMDA7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgY3VycmVudFN0YXR1cyA9IGF3YWl0IHRoaXMubm9TZXNzaW9uUHJveHkuY29tbWFuZCgnL3N0YXR1cycsICdHRVQnKTtcbiAgICAgICAgICBpZiAoY3VycmVudFN0YXR1cyAmJiBjdXJyZW50U3RhdHVzLmlvcyAmJiBjdXJyZW50U3RhdHVzLmlvcy5pcCkge1xuICAgICAgICAgICAgdGhpcy5hZ2VudFVybCA9IGN1cnJlbnRTdGF0dXMuaW9zLmlwO1xuICAgICAgICAgIH1cbiAgICAgICAgICB0aGlzLmxvZy5kZWJ1ZyhgV2ViRHJpdmVyQWdlbnQgaW5mb3JtYXRpb246YCk7XG4gICAgICAgICAgdGhpcy5sb2cuZGVidWcoSlNPTi5zdHJpbmdpZnkoY3VycmVudFN0YXR1cywgbnVsbCwgMikpO1xuICAgICAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYFVuYWJsZSB0byBjb25uZWN0IHRvIHJ1bm5pbmcgV2ViRHJpdmVyQWdlbnQ6ICR7ZXJyLm1lc3NhZ2V9YCk7XG4gICAgICAgIH0gZmluYWxseSB7XG4gICAgICAgICAgdGhpcy5ub1Nlc3Npb25Qcm94eS50aW1lb3V0ID0gcHJveHlUaW1lb3V0O1xuICAgICAgICB9XG4gICAgICB9KTtcblxuICAgICAgaWYgKHRoaXMueGNvZGVidWlsZC5wcm9jZXNzRXhpdGVkKSB7XG4gICAgICAgIC8vIHRoZXJlIGhhcyBiZWVuIGFuIGVycm9yIGVsc2V3aGVyZSBhbmQgd2UgbmVlZCB0byBzaG9ydC1jaXJjdWl0XG4gICAgICAgIHJldHVybiBjdXJyZW50U3RhdHVzO1xuICAgICAgfVxuXG4gICAgICB0aGlzLmxvZy5kZWJ1ZyhgV2ViRHJpdmVyQWdlbnQgc3VjY2Vzc2Z1bGx5IHN0YXJ0ZWQgYWZ0ZXIgJHt0aW1lci5nZXREdXJhdGlvbigpLmFzTWlsbGlTZWNvbmRzLnRvRml4ZWQoMCl9bXNgKTtcbiAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgIC8vIGF0IHRoaXMgcG9pbnQsIGlmIHdlIGhhdmUgbm90IGhhZCBhbnkgZXJyb3JzIGZyb20geGNvZGUgaXRzZWxmIChyZXBvcnRlZFxuICAgICAgLy8gZWxzZXdoZXJlKSwgd2UgY2FuIGxldCB0aGlzIGdvIHRocm91Z2ggYW5kIHRyeSB0byBjcmVhdGUgdGhlIHNlc3Npb25cbiAgICAgIHRoaXMubG9nLmRlYnVnKGVyci5tZXNzYWdlKTtcbiAgICAgIHRoaXMubG9nLndhcm4oYEdldHRpbmcgc3RhdHVzIG9mIFdlYkRyaXZlckFnZW50IG9uIGRldmljZSB0aW1lZCBvdXQuIENvbnRpbnVpbmdgKTtcbiAgICB9XG4gICAgcmV0dXJuIGN1cnJlbnRTdGF0dXM7XG4gIH1cblxuICBhc3luYyBxdWl0ICgpIHtcbiAgICBhd2FpdCBraWxsUHJvY2VzcygneGNvZGVidWlsZCcsIHRoaXMueGNvZGVidWlsZCk7XG4gIH1cbn1cblxuZXhwb3J0IHsgWGNvZGVCdWlsZCB9O1xuZXhwb3J0IGRlZmF1bHQgWGNvZGVCdWlsZDtcbiJdLCJmaWxlIjoibGliL3hjb2RlYnVpbGQuanMiLCJzb3VyY2VSb290IjoiLi4vLi4ifQ==
|
|
396
|
+
//# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibGliL3hjb2RlYnVpbGQuanMiLCJuYW1lcyI6WyJERUZBVUxUX1NJR05JTkdfSUQiLCJQUkVCVUlMRF9ERUxBWSIsIlJVTk5FUl9TQ0hFTUVfSU9TIiwiTElCX1NDSEVNRV9JT1MiLCJFUlJPUl9XUklUSU5HX0FUVEFDSE1FTlQiLCJFUlJPUl9DT1BZSU5HX0FUVEFDSE1FTlQiLCJJR05PUkVEX0VSUk9SUyIsIlJVTk5FUl9TQ0hFTUVfVFYiLCJMSUJfU0NIRU1FX1RWIiwieGNvZGVMb2ciLCJsb2dnZXIiLCJnZXRMb2dnZXIiLCJYY29kZUJ1aWxkIiwiY29uc3RydWN0b3IiLCJ4Y29kZVZlcnNpb24iLCJkZXZpY2UiLCJhcmdzIiwibG9nIiwiZGVmYXVsdExvZ2dlciIsInJlYWxEZXZpY2UiLCJhZ2VudFBhdGgiLCJib290c3RyYXBQYXRoIiwicGxhdGZvcm1WZXJzaW9uIiwicGxhdGZvcm1OYW1lIiwiaW9zU2RrVmVyc2lvbiIsInNob3dYY29kZUxvZyIsInhjb2RlQ29uZmlnRmlsZSIsInhjb2RlT3JnSWQiLCJ4Y29kZVNpZ25pbmdJZCIsImtleWNoYWluUGF0aCIsImtleWNoYWluUGFzc3dvcmQiLCJwcmVidWlsZFdEQSIsInVzZVByZWJ1aWx0V0RBIiwidXNlU2ltcGxlQnVpbGRUZXN0IiwidXNlWGN0ZXN0cnVuRmlsZSIsImxhdW5jaFRpbWVvdXQiLCJ3ZGFSZW1vdGVQb3J0IiwidXBkYXRlZFdEQUJ1bmRsZUlkIiwiZGVyaXZlZERhdGFQYXRoIiwibWpwZWdTZXJ2ZXJQb3J0IiwicHJlYnVpbGREZWxheSIsIl8iLCJpc051bWJlciIsImFsbG93UHJvdmlzaW9uaW5nRGV2aWNlUmVnaXN0cmF0aW9uIiwicmVzdWx0QnVuZGxlUGF0aCIsInJlc3VsdEJ1bmRsZVZlcnNpb24iLCJpbml0Iiwibm9TZXNzaW9uUHJveHkiLCJkZXZpdmVJbmZvIiwiaXNSZWFsRGV2aWNlIiwidWRpZCIsInhjdGVzdHJ1bkZpbGVQYXRoIiwicmV0cmlldmVEZXJpdmVkRGF0YVBhdGgiLCJfZGVyaXZlZERhdGFQYXRoUHJvbWlzZSIsInN0ZG91dCIsImVyciIsIndhcm4iLCJtZXNzYWdlIiwicGF0dGVybiIsIm1hdGNoIiwiZXhlYyIsInRydW5jYXRlIiwibGVuZ3RoIiwiZGVidWciLCJwYXRoIiwiZGlybmFtZSIsIm5vcm1hbGl6ZSIsInJlc2V0IiwicHJlYnVpbGQiLCJzdGFydCIsInhjb2RlYnVpbGQiLCJCIiwiZGVsYXkiLCJjbGVhblByb2plY3QiLCJ0bXBJc1R2T1MiLCJsaWJTY2hlbWUiLCJydW5uZXJTY2hlbWUiLCJzY2hlbWUiLCJnZXRDb21tYW5kIiwiYnVpbGRPbmx5IiwiY21kIiwiYnVpbGRDbWQiLCJ0ZXN0Q21kIiwicHVzaCIsInZlcnNpb25NYXRjaCIsIlJlZ0V4cCIsInByb2Nlc3MiLCJlbnYiLCJBUFBJVU1fWENVSVRFU1RfVFJFQVRfV0FSTklOR1NfQVNfRVJST1JTIiwiY3JlYXRlU3ViUHJvY2VzcyIsImpvaW4iLCJPYmplY3QiLCJhc3NpZ24iLCJVU0VfUE9SVCIsIldEQV9QUk9EVUNUX0JVTkRMRV9JREVOVElGSUVSIiwiV0RBX1JVTk5FUl9CVU5ETEVfSUQiLCJNSlBFR19TRVJWRVJfUE9SVCIsInVwZ3JhZGVUaW1lc3RhbXAiLCJVUEdSQURFX1RJTUVTVEFNUCIsIlN1YlByb2Nlc3MiLCJjd2QiLCJkZXRhY2hlZCIsInN0ZGlvIiwibG9nWGNvZGVPdXRwdXQiLCJsb2dNc2ciLCJpc0Jvb2xlYW4iLCJvbiIsInN0ZGVyciIsIm91dCIsImluY2x1ZGVzIiwibG9nTG9jYXRpb24iLCJmaXJzdCIsInJlbW92ZSIsInRyaW0iLCJzcGxpdCIsInYiLCJzdGFydHNXaXRoIiwic2VwIiwiaWdub3JlRXJyb3IiLCJzb21lIiwieCIsIl93ZGFfZXJyb3Jfb2NjdXJyZWQiLCJsaW5lIiwiRU9MIiwiZXJyb3IiLCJfd2RhX2Vycm9yX21lc3NhZ2UiLCJyZXNvbHZlIiwicmVqZWN0IiwiY29kZSIsInNpZ25hbCIsImRhdGEiLCJmcyIsInJlYWRGaWxlIiwicHJvY2Vzc0V4aXRlZCIsIkVycm9yIiwidGltZXIiLCJ0aW1pbmciLCJUaW1lciIsInN0YXR1cyIsIndhaXRGb3JTdGFydCIsIm1zZyIsImN1cnJlbnRTdGF0dXMiLCJyZXRyaWVzIiwicGFyc2VJbnQiLCJwcm94eVRpbWVvdXQiLCJ0aW1lb3V0IiwiY29tbWFuZCIsImlvcyIsImlwIiwiYWdlbnRVcmwiLCJKU09OIiwic3RyaW5naWZ5IiwiZ2V0RHVyYXRpb24iLCJhc01pbGxpU2Vjb25kcyIsInRvRml4ZWQiLCJxdWl0Il0sInNvdXJjZVJvb3QiOiIuLi8uLiIsInNvdXJjZXMiOlsibGliL3hjb2RlYnVpbGQuanMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgcmV0cnlJbnRlcnZhbCB9IGZyb20gJ2FzeW5jYm94JztcbmltcG9ydCB7IFN1YlByb2Nlc3MsIGV4ZWMgfSBmcm9tICd0ZWVuX3Byb2Nlc3MnO1xuaW1wb3J0IHsgZnMsIGxvZ2dlciwgdGltaW5nIH0gZnJvbSAnQGFwcGl1bS9zdXBwb3J0JztcbmltcG9ydCBkZWZhdWx0TG9nZ2VyIGZyb20gJy4vbG9nZ2VyJztcbmltcG9ydCBCIGZyb20gJ2JsdWViaXJkJztcbmltcG9ydCB7XG4gIHNldFJlYWxEZXZpY2VTZWN1cml0eSwgZ2VuZXJhdGVYY29kZUNvbmZpZ0ZpbGUsIHNldFhjdGVzdHJ1bkZpbGUsXG4gIHVwZGF0ZVByb2plY3RGaWxlLCByZXNldFByb2plY3RGaWxlLCBraWxsUHJvY2VzcyxcbiAgZ2V0V0RBVXBncmFkZVRpbWVzdGFtcCwgaXNUdk9TIH0gZnJvbSAnLi91dGlscyc7XG5pbXBvcnQgXyBmcm9tICdsb2Rhc2gnO1xuaW1wb3J0IHBhdGggZnJvbSAncGF0aCc7XG5pbXBvcnQgeyBFT0wgfSBmcm9tICdvcyc7XG5pbXBvcnQgeyBXREFfUlVOTkVSX0JVTkRMRV9JRCB9IGZyb20gJy4vY29uc3RhbnRzJztcblxuXG5jb25zdCBERUZBVUxUX1NJR05JTkdfSUQgPSAnaVBob25lIERldmVsb3Blcic7XG5jb25zdCBQUkVCVUlMRF9ERUxBWSA9IDA7XG5jb25zdCBSVU5ORVJfU0NIRU1FX0lPUyA9ICdXZWJEcml2ZXJBZ2VudFJ1bm5lcic7XG5jb25zdCBMSUJfU0NIRU1FX0lPUyA9ICdXZWJEcml2ZXJBZ2VudExpYic7XG5cbmNvbnN0IEVSUk9SX1dSSVRJTkdfQVRUQUNITUVOVCA9ICdFcnJvciB3cml0aW5nIGF0dGFjaG1lbnQgZGF0YSB0byBmaWxlJztcbmNvbnN0IEVSUk9SX0NPUFlJTkdfQVRUQUNITUVOVCA9ICdFcnJvciBjb3B5aW5nIHRlc3RpbmcgYXR0YWNobWVudCc7XG5jb25zdCBJR05PUkVEX0VSUk9SUyA9IFtcbiAgRVJST1JfV1JJVElOR19BVFRBQ0hNRU5ULFxuICBFUlJPUl9DT1BZSU5HX0FUVEFDSE1FTlQsXG4gICdGYWlsZWQgdG8gcmVtb3ZlIHNjcmVlbnNob3QgYXQgcGF0aCcsXG5dO1xuXG5jb25zdCBSVU5ORVJfU0NIRU1FX1RWID0gJ1dlYkRyaXZlckFnZW50UnVubmVyX3R2T1MnO1xuY29uc3QgTElCX1NDSEVNRV9UViA9ICdXZWJEcml2ZXJBZ2VudExpYl90dk9TJztcblxuY29uc3QgeGNvZGVMb2cgPSBsb2dnZXIuZ2V0TG9nZ2VyKCdYY29kZScpO1xuXG5cbmNsYXNzIFhjb2RlQnVpbGQge1xuICBjb25zdHJ1Y3RvciAoeGNvZGVWZXJzaW9uLCBkZXZpY2UsIGFyZ3MgPSB7fSwgbG9nID0gbnVsbCkge1xuICAgIHRoaXMueGNvZGVWZXJzaW9uID0geGNvZGVWZXJzaW9uO1xuXG4gICAgdGhpcy5kZXZpY2UgPSBkZXZpY2U7XG4gICAgdGhpcy5sb2cgPSBsb2cgPz8gZGVmYXVsdExvZ2dlcjtcblxuICAgIHRoaXMucmVhbERldmljZSA9IGFyZ3MucmVhbERldmljZTtcblxuICAgIHRoaXMuYWdlbnRQYXRoID0gYXJncy5hZ2VudFBhdGg7XG4gICAgdGhpcy5ib290c3RyYXBQYXRoID0gYXJncy5ib290c3RyYXBQYXRoO1xuXG4gICAgdGhpcy5wbGF0Zm9ybVZlcnNpb24gPSBhcmdzLnBsYXRmb3JtVmVyc2lvbjtcbiAgICB0aGlzLnBsYXRmb3JtTmFtZSA9IGFyZ3MucGxhdGZvcm1OYW1lO1xuICAgIHRoaXMuaW9zU2RrVmVyc2lvbiA9IGFyZ3MuaW9zU2RrVmVyc2lvbjtcblxuICAgIHRoaXMuc2hvd1hjb2RlTG9nID0gYXJncy5zaG93WGNvZGVMb2c7XG5cbiAgICB0aGlzLnhjb2RlQ29uZmlnRmlsZSA9IGFyZ3MueGNvZGVDb25maWdGaWxlO1xuICAgIHRoaXMueGNvZGVPcmdJZCA9IGFyZ3MueGNvZGVPcmdJZDtcbiAgICB0aGlzLnhjb2RlU2lnbmluZ0lkID0gYXJncy54Y29kZVNpZ25pbmdJZCB8fCBERUZBVUxUX1NJR05JTkdfSUQ7XG4gICAgdGhpcy5rZXljaGFpblBhdGggPSBhcmdzLmtleWNoYWluUGF0aDtcbiAgICB0aGlzLmtleWNoYWluUGFzc3dvcmQgPSBhcmdzLmtleWNoYWluUGFzc3dvcmQ7XG5cbiAgICB0aGlzLnByZWJ1aWxkV0RBID0gYXJncy5wcmVidWlsZFdEQTtcbiAgICB0aGlzLnVzZVByZWJ1aWx0V0RBID0gYXJncy51c2VQcmVidWlsdFdEQTtcbiAgICB0aGlzLnVzZVNpbXBsZUJ1aWxkVGVzdCA9IGFyZ3MudXNlU2ltcGxlQnVpbGRUZXN0O1xuXG4gICAgdGhpcy51c2VYY3Rlc3RydW5GaWxlID0gYXJncy51c2VYY3Rlc3RydW5GaWxlO1xuXG4gICAgdGhpcy5sYXVuY2hUaW1lb3V0ID0gYXJncy5sYXVuY2hUaW1lb3V0O1xuXG4gICAgdGhpcy53ZGFSZW1vdGVQb3J0ID0gYXJncy53ZGFSZW1vdGVQb3J0O1xuXG4gICAgdGhpcy51cGRhdGVkV0RBQnVuZGxlSWQgPSBhcmdzLnVwZGF0ZWRXREFCdW5kbGVJZDtcbiAgICB0aGlzLmRlcml2ZWREYXRhUGF0aCA9IGFyZ3MuZGVyaXZlZERhdGFQYXRoO1xuXG4gICAgdGhpcy5tanBlZ1NlcnZlclBvcnQgPSBhcmdzLm1qcGVnU2VydmVyUG9ydDtcblxuICAgIHRoaXMucHJlYnVpbGREZWxheSA9IF8uaXNOdW1iZXIoYXJncy5wcmVidWlsZERlbGF5KSA/IGFyZ3MucHJlYnVpbGREZWxheSA6IFBSRUJVSUxEX0RFTEFZO1xuXG4gICAgdGhpcy5hbGxvd1Byb3Zpc2lvbmluZ0RldmljZVJlZ2lzdHJhdGlvbiA9IGFyZ3MuYWxsb3dQcm92aXNpb25pbmdEZXZpY2VSZWdpc3RyYXRpb247XG5cbiAgICB0aGlzLnJlc3VsdEJ1bmRsZVBhdGggPSBhcmdzLnJlc3VsdEJ1bmRsZVBhdGg7XG4gICAgdGhpcy5yZXN1bHRCdW5kbGVWZXJzaW9uID0gYXJncy5yZXN1bHRCdW5kbGVWZXJzaW9uO1xuICB9XG5cbiAgYXN5bmMgaW5pdCAobm9TZXNzaW9uUHJveHkpIHtcbiAgICB0aGlzLm5vU2Vzc2lvblByb3h5ID0gbm9TZXNzaW9uUHJveHk7XG5cbiAgICBpZiAodGhpcy51c2VYY3Rlc3RydW5GaWxlKSB7XG4gICAgICBjb25zdCBkZXZpdmVJbmZvID0ge1xuICAgICAgICBpc1JlYWxEZXZpY2U6IHRoaXMucmVhbERldmljZSxcbiAgICAgICAgdWRpZDogdGhpcy5kZXZpY2UudWRpZCxcbiAgICAgICAgcGxhdGZvcm1WZXJzaW9uOiB0aGlzLnBsYXRmb3JtVmVyc2lvbixcbiAgICAgICAgcGxhdGZvcm1OYW1lOiB0aGlzLnBsYXRmb3JtTmFtZVxuICAgICAgfTtcbiAgICAgIHRoaXMueGN0ZXN0cnVuRmlsZVBhdGggPSBhd2FpdCBzZXRYY3Rlc3RydW5GaWxlKGRldml2ZUluZm8sIHRoaXMuaW9zU2RrVmVyc2lvbiwgdGhpcy5ib290c3RyYXBQYXRoLCB0aGlzLndkYVJlbW90ZVBvcnQpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIC8vIGlmIG5lY2Vzc2FyeSwgdXBkYXRlIHRoZSBidW5kbGVJZCB0byB1c2VyJ3Mgc3BlY2lmaWNhdGlvblxuICAgIGlmICh0aGlzLnJlYWxEZXZpY2UpIHtcbiAgICAgIC8vIEluIGNhc2UgdGhlIHByb2plY3Qgc3RpbGwgaGFzIHRoZSB1c2VyIHNwZWNpZmljIGJ1bmRsZSBJRCwgcmVzZXQgdGhlIHByb2plY3QgZmlsZSBmaXJzdC5cbiAgICAgIC8vIC0gV2UgZG8gdGhpcyByZXNldCBldmVuIGlmIHVwZGF0ZWRXREFCdW5kbGVJZCBpcyBub3Qgc3BlY2lmaWVkLFxuICAgICAgLy8gICBzaW5jZSB0aGUgcHJldmlvdXMgdXBkYXRlZFdEQUJ1bmRsZUlkIHRlc3QgaGFzIGdlbmVyYXRlZCB0aGUgdXNlciBzcGVjaWZpYyBidW5kbGUgSUQgcHJvamVjdCBmaWxlLlxuICAgICAgLy8gLSBXZSBkb24ndCBjYWxsIHJlc2V0UHJvamVjdEZpbGUgZm9yIHNpbXVsYXRvcixcbiAgICAgIC8vICAgc2luY2Ugc2ltdWxhdG9yIHRlc3QgcnVuIHdpbGwgd29yayB3aXRoIGFueSB1c2VyIHNwZWNpZmljIGJ1bmRsZSBJRC5cbiAgICAgIGF3YWl0IHJlc2V0UHJvamVjdEZpbGUodGhpcy5hZ2VudFBhdGgpO1xuICAgICAgaWYgKHRoaXMudXBkYXRlZFdEQUJ1bmRsZUlkKSB7XG4gICAgICAgIGF3YWl0IHVwZGF0ZVByb2plY3RGaWxlKHRoaXMuYWdlbnRQYXRoLCB0aGlzLnVwZGF0ZWRXREFCdW5kbGVJZCk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgYXN5bmMgcmV0cmlldmVEZXJpdmVkRGF0YVBhdGggKCkge1xuICAgIGlmICh0aGlzLmRlcml2ZWREYXRhUGF0aCkge1xuICAgICAgcmV0dXJuIHRoaXMuZGVyaXZlZERhdGFQYXRoO1xuICAgIH1cblxuICAgIC8vIGF2b2lkIHJhY2UgY29uZGl0aW9uc1xuICAgIGlmICh0aGlzLl9kZXJpdmVkRGF0YVBhdGhQcm9taXNlKSB7XG4gICAgICByZXR1cm4gYXdhaXQgdGhpcy5fZGVyaXZlZERhdGFQYXRoUHJvbWlzZTtcbiAgICB9XG5cbiAgICB0aGlzLl9kZXJpdmVkRGF0YVBhdGhQcm9taXNlID0gKGFzeW5jICgpID0+IHtcbiAgICAgIGxldCBzdGRvdXQ7XG4gICAgICB0cnkge1xuICAgICAgICAoe3N0ZG91dH0gPSBhd2FpdCBleGVjKCd4Y29kZWJ1aWxkJywgWyctcHJvamVjdCcsIHRoaXMuYWdlbnRQYXRoLCAnLXNob3dCdWlsZFNldHRpbmdzJ10pKTtcbiAgICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgICB0aGlzLmxvZy53YXJuKGBDYW5ub3QgcmV0cmlldmUgV0RBIGJ1aWxkIHNldHRpbmdzLiBPcmlnaW5hbCBlcnJvcjogJHtlcnIubWVzc2FnZX1gKTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICBjb25zdCBwYXR0ZXJuID0gL15cXHMqQlVJTERfRElSXFxzKz1cXHMrKFxcLy4qKS9tO1xuICAgICAgY29uc3QgbWF0Y2ggPSBwYXR0ZXJuLmV4ZWMoc3Rkb3V0KTtcbiAgICAgIGlmICghbWF0Y2gpIHtcbiAgICAgICAgdGhpcy5sb2cud2FybihgQ2Fubm90IHBhcnNlIFdEQSBidWlsZCBkaXIgZnJvbSAke18udHJ1bmNhdGUoc3Rkb3V0LCB7bGVuZ3RoOiAzMDB9KX1gKTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgdGhpcy5sb2cuZGVidWcoYFBhcnNlZCBCVUlMRF9ESVIgY29uZmlndXJhdGlvbiB2YWx1ZTogJyR7bWF0Y2hbMV19J2ApO1xuICAgICAgLy8gRGVyaXZlZCBkYXRhIHJvb3QgaXMgdHdvIGxldmVscyBoaWdoZXIgb3ZlciB0aGUgYnVpbGQgZGlyXG4gICAgICB0aGlzLmRlcml2ZWREYXRhUGF0aCA9IHBhdGguZGlybmFtZShwYXRoLmRpcm5hbWUocGF0aC5ub3JtYWxpemUobWF0Y2hbMV0pKSk7XG4gICAgICB0aGlzLmxvZy5kZWJ1ZyhgR290IGRlcml2ZWQgZGF0YSByb290OiAnJHt0aGlzLmRlcml2ZWREYXRhUGF0aH0nYCk7XG4gICAgICByZXR1cm4gdGhpcy5kZXJpdmVkRGF0YVBhdGg7XG4gICAgfSkoKTtcbiAgICByZXR1cm4gYXdhaXQgdGhpcy5fZGVyaXZlZERhdGFQYXRoUHJvbWlzZTtcbiAgfVxuXG4gIGFzeW5jIHJlc2V0ICgpIHtcbiAgICAvLyBpZiBuZWNlc3NhcnksIHJlc2V0IHRoZSBidW5kbGVJZCB0byBvcmlnaW5hbCB2YWx1ZVxuICAgIGlmICh0aGlzLnJlYWxEZXZpY2UgJiYgdGhpcy51cGRhdGVkV0RBQnVuZGxlSWQpIHtcbiAgICAgIGF3YWl0IHJlc2V0UHJvamVjdEZpbGUodGhpcy5hZ2VudFBhdGgpO1xuICAgIH1cbiAgfVxuXG4gIGFzeW5jIHByZWJ1aWxkICgpIHtcbiAgICAvLyBmaXJzdCBkbyBhIGJ1aWxkIHBoYXNlXG4gICAgdGhpcy5sb2cuZGVidWcoJ1ByZS1idWlsZGluZyBXREEgYmVmb3JlIGxhdW5jaGluZyB0ZXN0Jyk7XG4gICAgdGhpcy51c2VQcmVidWlsdFdEQSA9IHRydWU7XG4gICAgYXdhaXQgdGhpcy5zdGFydCh0cnVlKTtcblxuICAgIHRoaXMueGNvZGVidWlsZCA9IG51bGw7XG5cbiAgICAvLyBwYXVzZSBhIG1vbWVudFxuICAgIGF3YWl0IEIuZGVsYXkodGhpcy5wcmVidWlsZERlbGF5KTtcbiAgfVxuXG4gIGFzeW5jIGNsZWFuUHJvamVjdCAoKSB7XG4gICAgY29uc3QgdG1wSXNUdk9TID0gaXNUdk9TKHRoaXMucGxhdGZvcm1OYW1lKTtcbiAgICBjb25zdCBsaWJTY2hlbWUgPSB0bXBJc1R2T1MgPyBMSUJfU0NIRU1FX1RWIDogTElCX1NDSEVNRV9JT1M7XG4gICAgY29uc3QgcnVubmVyU2NoZW1lID0gdG1wSXNUdk9TID8gUlVOTkVSX1NDSEVNRV9UViA6IFJVTk5FUl9TQ0hFTUVfSU9TO1xuXG4gICAgZm9yIChjb25zdCBzY2hlbWUgb2YgW2xpYlNjaGVtZSwgcnVubmVyU2NoZW1lXSkge1xuICAgICAgdGhpcy5sb2cuZGVidWcoYENsZWFuaW5nIHRoZSBwcm9qZWN0IHNjaGVtZSAnJHtzY2hlbWV9JyB0byBtYWtlIHN1cmUgdGhlcmUgYXJlIG5vIGxlZnRvdmVycyBmcm9tIHByZXZpb3VzIGluc3RhbGxzYCk7XG4gICAgICBhd2FpdCBleGVjKCd4Y29kZWJ1aWxkJywgW1xuICAgICAgICAnY2xlYW4nLFxuICAgICAgICAnLXByb2plY3QnLCB0aGlzLmFnZW50UGF0aCxcbiAgICAgICAgJy1zY2hlbWUnLCBzY2hlbWUsXG4gICAgICBdKTtcbiAgICB9XG4gIH1cblxuICBnZXRDb21tYW5kIChidWlsZE9ubHkgPSBmYWxzZSkge1xuICAgIGxldCBjbWQgPSAneGNvZGVidWlsZCc7XG4gICAgbGV0IGFyZ3M7XG5cbiAgICAvLyBmaWd1cmUgb3V0IHRoZSB0YXJnZXRzIGZvciB4Y29kZWJ1aWxkXG4gICAgY29uc3QgW2J1aWxkQ21kLCB0ZXN0Q21kXSA9IHRoaXMudXNlU2ltcGxlQnVpbGRUZXN0ID8gWydidWlsZCcsICd0ZXN0J10gOiBbJ2J1aWxkLWZvci10ZXN0aW5nJywgJ3Rlc3Qtd2l0aG91dC1idWlsZGluZyddO1xuICAgIGlmIChidWlsZE9ubHkpIHtcbiAgICAgIGFyZ3MgPSBbYnVpbGRDbWRdO1xuICAgIH0gZWxzZSBpZiAodGhpcy51c2VQcmVidWlsdFdEQSB8fCB0aGlzLnVzZVhjdGVzdHJ1bkZpbGUpIHtcbiAgICAgIGFyZ3MgPSBbdGVzdENtZF07XG4gICAgfSBlbHNlIHtcbiAgICAgIGFyZ3MgPSBbYnVpbGRDbWQsIHRlc3RDbWRdO1xuICAgIH1cblxuICAgIGlmICh0aGlzLmFsbG93UHJvdmlzaW9uaW5nRGV2aWNlUmVnaXN0cmF0aW9uKSB7XG4gICAgICAvLyBUbyAtYWxsb3dQcm92aXNpb25pbmdEZXZpY2VSZWdpc3RyYXRpb24gZmxhZyB0YWtlcyBlZmZlY3QsIC1hbGxvd1Byb3Zpc2lvbmluZ1VwZGF0ZXMgbmVlZHMgdG8gYmUgcGFzc2VkIGFzIHdlbGwuXG4gICAgICBhcmdzLnB1c2goJy1hbGxvd1Byb3Zpc2lvbmluZ1VwZGF0ZXMnLCAnLWFsbG93UHJvdmlzaW9uaW5nRGV2aWNlUmVnaXN0cmF0aW9uJyk7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMucmVzdWx0QnVuZGxlUGF0aCkge1xuICAgICAgYXJncy5wdXNoKCctcmVzdWx0QnVuZGxlUGF0aCcsIHRoaXMucmVzdWx0QnVuZGxlUGF0aCk7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMucmVzdWx0QnVuZGxlVmVyc2lvbikge1xuICAgICAgYXJncy5wdXNoKCctcmVzdWx0QnVuZGxlVmVyc2lvbicsIHRoaXMucmVzdWx0QnVuZGxlVmVyc2lvbik7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMudXNlWGN0ZXN0cnVuRmlsZSkge1xuICAgICAgYXJncy5wdXNoKCcteGN0ZXN0cnVuJywgdGhpcy54Y3Rlc3RydW5GaWxlUGF0aCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGNvbnN0IHJ1bm5lclNjaGVtZSA9IGlzVHZPUyh0aGlzLnBsYXRmb3JtTmFtZSkgPyBSVU5ORVJfU0NIRU1FX1RWIDogUlVOTkVSX1NDSEVNRV9JT1M7XG4gICAgICBhcmdzLnB1c2goJy1wcm9qZWN0JywgdGhpcy5hZ2VudFBhdGgsICctc2NoZW1lJywgcnVubmVyU2NoZW1lKTtcbiAgICAgIGlmICh0aGlzLmRlcml2ZWREYXRhUGF0aCkge1xuICAgICAgICBhcmdzLnB1c2goJy1kZXJpdmVkRGF0YVBhdGgnLCB0aGlzLmRlcml2ZWREYXRhUGF0aCk7XG4gICAgICB9XG4gICAgfVxuICAgIGFyZ3MucHVzaCgnLWRlc3RpbmF0aW9uJywgYGlkPSR7dGhpcy5kZXZpY2UudWRpZH1gKTtcblxuICAgIGNvbnN0IHZlcnNpb25NYXRjaCA9IG5ldyBSZWdFeHAoL14oXFxkKylcXC4oXFxkKykvKS5leGVjKHRoaXMucGxhdGZvcm1WZXJzaW9uKTtcbiAgICBpZiAodmVyc2lvbk1hdGNoKSB7XG4gICAgICBhcmdzLnB1c2goYElQSE9ORU9TX0RFUExPWU1FTlRfVEFSR0VUPSR7dmVyc2lvbk1hdGNoWzFdfS4ke3ZlcnNpb25NYXRjaFsyXX1gKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5sb2cud2FybihgQ2Fubm90IHBhcnNlIG1ham9yIGFuZCBtaW5vciB2ZXJzaW9uIG51bWJlcnMgZnJvbSBwbGF0Zm9ybVZlcnNpb24gXCIke3RoaXMucGxhdGZvcm1WZXJzaW9ufVwiLiBgICtcbiAgICAgICAgJ1dpbGwgYnVpbGQgZm9yIHRoZSBkZWZhdWx0IHBsYXRmb3JtIGluc3RlYWQnKTtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5yZWFsRGV2aWNlICYmIHRoaXMueGNvZGVDb25maWdGaWxlKSB7XG4gICAgICB0aGlzLmxvZy5kZWJ1ZyhgVXNpbmcgWGNvZGUgY29uZmlndXJhdGlvbiBmaWxlOiAnJHt0aGlzLnhjb2RlQ29uZmlnRmlsZX0nYCk7XG4gICAgICBhcmdzLnB1c2goJy14Y2NvbmZpZycsIHRoaXMueGNvZGVDb25maWdGaWxlKTtcbiAgICB9XG5cbiAgICBpZiAoIXByb2Nlc3MuZW52LkFQUElVTV9YQ1VJVEVTVF9UUkVBVF9XQVJOSU5HU19BU19FUlJPUlMpIHtcbiAgICAgIC8vIFRoaXMgc29tZXRpbWVzIGhlbHBzIHRvIHN1cnZpdmUgWGNvZGUgdXBkYXRlc1xuICAgICAgYXJncy5wdXNoKCdHQ0NfVFJFQVRfV0FSTklOR1NfQVNfRVJST1JTPTAnKTtcbiAgICB9XG5cbiAgICAvLyBCZWxvdyBvcHRpb24gc2xpZ2h0bHkgcmVkdWNlcyBidWlsZCB0aW1lIGluIGRlYnVnIGJ1aWxkXG4gICAgLy8gd2l0aCBwcmV2ZW50aW5nIHRvIGdlbmVyYXRlIGAvSW5kZXgvRGF0YVN0b3JlYCB3aGljaCBpcyB1c2VkIGJ5IGRldmVsb3BtZW50XG4gICAgYXJncy5wdXNoKCdDT01QSUxFUl9JTkRFWF9TVE9SRV9FTkFCTEU9Tk8nKTtcblxuICAgIHJldHVybiB7Y21kLCBhcmdzfTtcbiAgfVxuXG4gIGFzeW5jIGNyZWF0ZVN1YlByb2Nlc3MgKGJ1aWxkT25seSA9IGZhbHNlKSB7XG4gICAgaWYgKCF0aGlzLnVzZVhjdGVzdHJ1bkZpbGUgJiYgdGhpcy5yZWFsRGV2aWNlKSB7XG4gICAgICBpZiAodGhpcy5rZXljaGFpblBhdGggJiYgdGhpcy5rZXljaGFpblBhc3N3b3JkKSB7XG4gICAgICAgIGF3YWl0IHNldFJlYWxEZXZpY2VTZWN1cml0eSh0aGlzLmtleWNoYWluUGF0aCwgdGhpcy5rZXljaGFpblBhc3N3b3JkKTtcbiAgICAgIH1cbiAgICAgIGlmICh0aGlzLnhjb2RlT3JnSWQgJiYgdGhpcy54Y29kZVNpZ25pbmdJZCAmJiAhdGhpcy54Y29kZUNvbmZpZ0ZpbGUpIHtcbiAgICAgICAgdGhpcy54Y29kZUNvbmZpZ0ZpbGUgPSBhd2FpdCBnZW5lcmF0ZVhjb2RlQ29uZmlnRmlsZSh0aGlzLnhjb2RlT3JnSWQsIHRoaXMueGNvZGVTaWduaW5nSWQpO1xuICAgICAgfVxuICAgIH1cblxuICAgIGNvbnN0IHtjbWQsIGFyZ3N9ID0gdGhpcy5nZXRDb21tYW5kKGJ1aWxkT25seSk7XG4gICAgdGhpcy5sb2cuZGVidWcoYEJlZ2lubmluZyAke2J1aWxkT25seSA/ICdidWlsZCcgOiAndGVzdCd9IHdpdGggY29tbWFuZCAnJHtjbWR9ICR7YXJncy5qb2luKCcgJyl9JyBgICtcbiAgICAgIGBpbiBkaXJlY3RvcnkgJyR7dGhpcy5ib290c3RyYXBQYXRofSdgKTtcbiAgICBjb25zdCBlbnYgPSBPYmplY3QuYXNzaWduKHt9LCBwcm9jZXNzLmVudiwge1xuICAgICAgVVNFX1BPUlQ6IHRoaXMud2RhUmVtb3RlUG9ydCxcbiAgICAgIFdEQV9QUk9EVUNUX0JVTkRMRV9JREVOVElGSUVSOiB0aGlzLnVwZGF0ZWRXREFCdW5kbGVJZCB8fCBXREFfUlVOTkVSX0JVTkRMRV9JRCxcbiAgICB9KTtcbiAgICBpZiAodGhpcy5tanBlZ1NlcnZlclBvcnQpIHtcbiAgICAgIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS9hcHBpdW0vV2ViRHJpdmVyQWdlbnQvcHVsbC8xMDVcbiAgICAgIGVudi5NSlBFR19TRVJWRVJfUE9SVCA9IHRoaXMubWpwZWdTZXJ2ZXJQb3J0O1xuICAgIH1cbiAgICBjb25zdCB1cGdyYWRlVGltZXN0YW1wID0gYXdhaXQgZ2V0V0RBVXBncmFkZVRpbWVzdGFtcCh0aGlzLmJvb3RzdHJhcFBhdGgpO1xuICAgIGlmICh1cGdyYWRlVGltZXN0YW1wKSB7XG4gICAgICBlbnYuVVBHUkFERV9USU1FU1RBTVAgPSB1cGdyYWRlVGltZXN0YW1wO1xuICAgIH1cbiAgICBjb25zdCB4Y29kZWJ1aWxkID0gbmV3IFN1YlByb2Nlc3MoY21kLCBhcmdzLCB7XG4gICAgICBjd2Q6IHRoaXMuYm9vdHN0cmFwUGF0aCxcbiAgICAgIGVudixcbiAgICAgIGRldGFjaGVkOiB0cnVlLFxuICAgICAgc3RkaW86IFsnaWdub3JlJywgJ3BpcGUnLCAncGlwZSddLFxuICAgIH0pO1xuXG4gICAgbGV0IGxvZ1hjb2RlT3V0cHV0ID0gISF0aGlzLnNob3dYY29kZUxvZztcbiAgICBjb25zdCBsb2dNc2cgPSBfLmlzQm9vbGVhbih0aGlzLnNob3dYY29kZUxvZylcbiAgICAgID8gYE91dHB1dCBmcm9tIHhjb2RlYnVpbGQgJHt0aGlzLnNob3dYY29kZUxvZyA/ICd3aWxsJyA6ICd3aWxsIG5vdCd9IGJlIGxvZ2dlZGBcbiAgICAgIDogJ091dHB1dCBmcm9tIHhjb2RlYnVpbGQgd2lsbCBvbmx5IGJlIGxvZ2dlZCBpZiBhbnkgZXJyb3JzIGFyZSBwcmVzZW50IHRoZXJlJztcbiAgICB0aGlzLmxvZy5kZWJ1ZyhgJHtsb2dNc2d9LiBUbyBjaGFuZ2UgdGhpcywgdXNlICdzaG93WGNvZGVMb2cnIGRlc2lyZWQgY2FwYWJpbGl0eWApO1xuICAgIHhjb2RlYnVpbGQub24oJ291dHB1dCcsIChzdGRvdXQsIHN0ZGVycikgPT4ge1xuICAgICAgbGV0IG91dCA9IHN0ZG91dCB8fCBzdGRlcnI7XG4gICAgICAvLyB3ZSB3YW50IHRvIHB1bGwgb3V0IHRoZSBsb2cgZmlsZSB0aGF0IGlzIGNyZWF0ZWQsIGFuZCBoaWdobGlnaHQgaXRcbiAgICAgIC8vIGZvciBkaWFnbm9zdGljIHB1cnBvc2VzXG4gICAgICBpZiAob3V0LmluY2x1ZGVzKCdXcml0aW5nIGRpYWdub3N0aWMgbG9nIGZvciB0ZXN0IHNlc3Npb24gdG8nKSkge1xuICAgICAgICAvLyBwdWxsIG91dCB0aGUgZmlyc3QgbGluZSB0aGF0IGJlZ2lucyB3aXRoIHRoZSBwYXRoIHNlcGFyYXRvclxuICAgICAgICAvLyB3aGljaCAqc2hvdWxkKiBiZSB0aGUgbGluZSBpbmRpY2F0aW5nIHRoZSBsb2cgZmlsZSBnZW5lcmF0ZWRcbiAgICAgICAgeGNvZGVidWlsZC5sb2dMb2NhdGlvbiA9IF8uZmlyc3QoXy5yZW1vdmUob3V0LnRyaW0oKS5zcGxpdCgnXFxuJyksICh2KSA9PiB2LnN0YXJ0c1dpdGgocGF0aC5zZXApKSk7XG4gICAgICAgIHhjb2RlTG9nLmRlYnVnKGBMb2cgZmlsZSBmb3IgeGNvZGVidWlsZCB0ZXN0OiAke3hjb2RlYnVpbGQubG9nTG9jYXRpb259YCk7XG4gICAgICB9XG5cbiAgICAgIC8vIGlmIHdlIGhhdmUgYW4gZXJyb3Igd2Ugd2FudCB0byBvdXRwdXQgdGhlIGxvZ3NcbiAgICAgIC8vIG90aGVyd2lzZSB0aGUgZmFpbHVyZSBpcyBpbnNjcnV0aWJsZVxuICAgICAgLy8gYnV0IGRvIG5vdCBsb2cgcGVybWlzc2lvbiBlcnJvcnMgZnJvbSB0cnlpbmcgdG8gd3JpdGUgdG8gYXR0YWNobWVudHMgZm9sZGVyXG4gICAgICBjb25zdCBpZ25vcmVFcnJvciA9IElHTk9SRURfRVJST1JTLnNvbWUoKHgpID0+IG91dC5pbmNsdWRlcyh4KSk7XG4gICAgICBpZiAodGhpcy5zaG93WGNvZGVMb2cgIT09IGZhbHNlICYmIG91dC5pbmNsdWRlcygnRXJyb3IgRG9tYWluPScpICYmICFpZ25vcmVFcnJvcikge1xuICAgICAgICBsb2dYY29kZU91dHB1dCA9IHRydWU7XG5cbiAgICAgICAgLy8gdGVycmlibGUgaGFjayB0byBoYW5kbGUgY2FzZSB3aGVyZSB4Y29kZSByZXR1cm4gMCBidXQgaXMgZmFpbGluZ1xuICAgICAgICB4Y29kZWJ1aWxkLl93ZGFfZXJyb3Jfb2NjdXJyZWQgPSB0cnVlO1xuICAgICAgfVxuXG4gICAgICAvLyBkbyBub3QgbG9nIHBlcm1pc3Npb24gZXJyb3JzIGZyb20gdHJ5aW5nIHRvIHdyaXRlIHRvIGF0dGFjaG1lbnRzIGZvbGRlclxuICAgICAgaWYgKGxvZ1hjb2RlT3V0cHV0ICYmICFpZ25vcmVFcnJvcikge1xuICAgICAgICBmb3IgKGNvbnN0IGxpbmUgb2Ygb3V0LnNwbGl0KEVPTCkpIHtcbiAgICAgICAgICB4Y29kZUxvZy5lcnJvcihsaW5lKTtcbiAgICAgICAgICBpZiAobGluZSkge1xuICAgICAgICAgICAgeGNvZGVidWlsZC5fd2RhX2Vycm9yX21lc3NhZ2UgKz0gYCR7RU9MfSR7bGluZX1gO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0pO1xuXG4gICAgcmV0dXJuIHhjb2RlYnVpbGQ7XG4gIH1cblxuICBhc3luYyBzdGFydCAoYnVpbGRPbmx5ID0gZmFsc2UpIHtcbiAgICB0aGlzLnhjb2RlYnVpbGQgPSBhd2FpdCB0aGlzLmNyZWF0ZVN1YlByb2Nlc3MoYnVpbGRPbmx5KTtcbiAgICAvLyBTdG9yZSB4Y29kZWJ1aWxkIG1lc3NhZ2VcbiAgICB0aGlzLnhjb2RlYnVpbGQuX3dkYV9lcnJvcl9tZXNzYWdlID0gJyc7XG5cbiAgICAvLyB3cmFwIHRoZSBzdGFydCBwcm9jZWR1cmUgaW4gYSBwcm9taXNlIHNvIHRoYXQgd2UgY2FuIGNhdGNoLCBhbmQgcmVwb3J0LFxuICAgIC8vIGFueSBzdGFydHVwIGVycm9ycyB0aGF0IGFyZSB0aHJvd24gYXMgZXZlbnRzXG4gICAgcmV0dXJuIGF3YWl0IG5ldyBCKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgIHRoaXMueGNvZGVidWlsZC5vbignZXhpdCcsIGFzeW5jIChjb2RlLCBzaWduYWwpID0+IHtcbiAgICAgICAgeGNvZGVMb2cuZXJyb3IoYHhjb2RlYnVpbGQgZXhpdGVkIHdpdGggY29kZSAnJHtjb2RlfScgYW5kIHNpZ25hbCAnJHtzaWduYWx9J2ApO1xuICAgICAgICAvLyBwcmludCBvdXQgdGhlIHhjb2RlYnVpbGQgZmlsZSBpZiB1c2VycyBoYXZlIGFza2VkIGZvciBpdFxuICAgICAgICBpZiAodGhpcy5zaG93WGNvZGVMb2cgJiYgdGhpcy54Y29kZWJ1aWxkLmxvZ0xvY2F0aW9uKSB7XG4gICAgICAgICAgeGNvZGVMb2cuZXJyb3IoYENvbnRlbnRzIG9mIHhjb2RlYnVpbGQgbG9nIGZpbGUgJyR7dGhpcy54Y29kZWJ1aWxkLmxvZ0xvY2F0aW9ufSc6YCk7XG4gICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIGxldCBkYXRhID0gYXdhaXQgZnMucmVhZEZpbGUodGhpcy54Y29kZWJ1aWxkLmxvZ0xvY2F0aW9uLCAndXRmOCcpO1xuICAgICAgICAgICAgZm9yIChsZXQgbGluZSBvZiBkYXRhLnNwbGl0KCdcXG4nKSkge1xuICAgICAgICAgICAgICB4Y29kZUxvZy5lcnJvcihsaW5lKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgICAgICAgIHhjb2RlTG9nLmVycm9yKGBVbmFibGUgdG8gYWNjZXNzIHhjb2RlYnVpbGQgbG9nIGZpbGU6ICcke2Vyci5tZXNzYWdlfSdgKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy54Y29kZWJ1aWxkLnByb2Nlc3NFeGl0ZWQgPSB0cnVlO1xuICAgICAgICBpZiAodGhpcy54Y29kZWJ1aWxkLl93ZGFfZXJyb3Jfb2NjdXJyZWQgfHwgKCFzaWduYWwgJiYgY29kZSAhPT0gMCkpIHtcbiAgICAgICAgICByZXR1cm4gcmVqZWN0KG5ldyBFcnJvcihgeGNvZGVidWlsZCBmYWlsZWQgd2l0aCBjb2RlICR7Y29kZX0ke0VPTH1gICtcbiAgICAgICAgICAgIGB4Y29kZWJ1aWxkIGVycm9yIG1lc3NhZ2U6JHtFT0x9JHt0aGlzLnhjb2RlYnVpbGQuX3dkYV9lcnJvcl9tZXNzYWdlfWApKTtcbiAgICAgICAgfVxuICAgICAgICAvLyBpbiB0aGUgY2FzZSBvZiBqdXN0IGJ1aWxkaW5nLCB0aGUgcHJvY2VzcyB3aWxsIGV4aXQgYW5kIHRoYXQgaXMgb3VyIGZpbmlzaFxuICAgICAgICBpZiAoYnVpbGRPbmx5KSB7XG4gICAgICAgICAgcmV0dXJuIHJlc29sdmUoKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG5cbiAgICAgIHJldHVybiAoYXN5bmMgKCkgPT4ge1xuICAgICAgICB0cnkge1xuICAgICAgICAgIGNvbnN0IHRpbWVyID0gbmV3IHRpbWluZy5UaW1lcigpLnN0YXJ0KCk7XG4gICAgICAgICAgYXdhaXQgdGhpcy54Y29kZWJ1aWxkLnN0YXJ0KHRydWUpO1xuICAgICAgICAgIGlmICghYnVpbGRPbmx5KSB7XG4gICAgICAgICAgICBsZXQgc3RhdHVzID0gYXdhaXQgdGhpcy53YWl0Rm9yU3RhcnQodGltZXIpO1xuICAgICAgICAgICAgcmVzb2x2ZShzdGF0dXMpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICAgICAgbGV0IG1zZyA9IGBVbmFibGUgdG8gc3RhcnQgV2ViRHJpdmVyQWdlbnQ6ICR7ZXJyfWA7XG4gICAgICAgICAgdGhpcy5sb2cuZXJyb3IobXNnKTtcbiAgICAgICAgICByZWplY3QobmV3IEVycm9yKG1zZykpO1xuICAgICAgICB9XG4gICAgICB9KSgpO1xuICAgIH0pO1xuICB9XG5cbiAgYXN5bmMgd2FpdEZvclN0YXJ0ICh0aW1lcikge1xuICAgIC8vIHRyeSB0byBjb25uZWN0IG9uY2UgZXZlcnkgMC41IHNlY29uZHMsIHVudGlsIGBsYXVuY2hUaW1lb3V0YCBpcyB1cFxuICAgIHRoaXMubG9nLmRlYnVnKGBXYWl0aW5nIHVwIHRvICR7dGhpcy5sYXVuY2hUaW1lb3V0fW1zIGZvciBXZWJEcml2ZXJBZ2VudCB0byBzdGFydGApO1xuICAgIGxldCBjdXJyZW50U3RhdHVzID0gbnVsbDtcbiAgICB0cnkge1xuICAgICAgbGV0IHJldHJpZXMgPSBwYXJzZUludCh0aGlzLmxhdW5jaFRpbWVvdXQgLyA1MDAsIDEwKTtcbiAgICAgIGF3YWl0IHJldHJ5SW50ZXJ2YWwocmV0cmllcywgMTAwMCwgYXN5bmMgKCkgPT4ge1xuICAgICAgICBpZiAodGhpcy54Y29kZWJ1aWxkLnByb2Nlc3NFeGl0ZWQpIHtcbiAgICAgICAgICAvLyB0aGVyZSBoYXMgYmVlbiBhbiBlcnJvciBlbHNld2hlcmUgYW5kIHdlIG5lZWQgdG8gc2hvcnQtY2lyY3VpdFxuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBwcm94eVRpbWVvdXQgPSB0aGlzLm5vU2Vzc2lvblByb3h5LnRpbWVvdXQ7XG4gICAgICAgIHRoaXMubm9TZXNzaW9uUHJveHkudGltZW91dCA9IDEwMDA7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgY3VycmVudFN0YXR1cyA9IGF3YWl0IHRoaXMubm9TZXNzaW9uUHJveHkuY29tbWFuZCgnL3N0YXR1cycsICdHRVQnKTtcbiAgICAgICAgICBpZiAoY3VycmVudFN0YXR1cyAmJiBjdXJyZW50U3RhdHVzLmlvcyAmJiBjdXJyZW50U3RhdHVzLmlvcy5pcCkge1xuICAgICAgICAgICAgdGhpcy5hZ2VudFVybCA9IGN1cnJlbnRTdGF0dXMuaW9zLmlwO1xuICAgICAgICAgIH1cbiAgICAgICAgICB0aGlzLmxvZy5kZWJ1ZyhgV2ViRHJpdmVyQWdlbnQgaW5mb3JtYXRpb246YCk7XG4gICAgICAgICAgdGhpcy5sb2cuZGVidWcoSlNPTi5zdHJpbmdpZnkoY3VycmVudFN0YXR1cywgbnVsbCwgMikpO1xuICAgICAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYFVuYWJsZSB0byBjb25uZWN0IHRvIHJ1bm5pbmcgV2ViRHJpdmVyQWdlbnQ6ICR7ZXJyLm1lc3NhZ2V9YCk7XG4gICAgICAgIH0gZmluYWxseSB7XG4gICAgICAgICAgdGhpcy5ub1Nlc3Npb25Qcm94eS50aW1lb3V0ID0gcHJveHlUaW1lb3V0O1xuICAgICAgICB9XG4gICAgICB9KTtcblxuICAgICAgaWYgKHRoaXMueGNvZGVidWlsZC5wcm9jZXNzRXhpdGVkKSB7XG4gICAgICAgIC8vIHRoZXJlIGhhcyBiZWVuIGFuIGVycm9yIGVsc2V3aGVyZSBhbmQgd2UgbmVlZCB0byBzaG9ydC1jaXJjdWl0XG4gICAgICAgIHJldHVybiBjdXJyZW50U3RhdHVzO1xuICAgICAgfVxuXG4gICAgICB0aGlzLmxvZy5kZWJ1ZyhgV2ViRHJpdmVyQWdlbnQgc3VjY2Vzc2Z1bGx5IHN0YXJ0ZWQgYWZ0ZXIgJHt0aW1lci5nZXREdXJhdGlvbigpLmFzTWlsbGlTZWNvbmRzLnRvRml4ZWQoMCl9bXNgKTtcbiAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgIC8vIGF0IHRoaXMgcG9pbnQsIGlmIHdlIGhhdmUgbm90IGhhZCBhbnkgZXJyb3JzIGZyb20geGNvZGUgaXRzZWxmIChyZXBvcnRlZFxuICAgICAgLy8gZWxzZXdoZXJlKSwgd2UgY2FuIGxldCB0aGlzIGdvIHRocm91Z2ggYW5kIHRyeSB0byBjcmVhdGUgdGhlIHNlc3Npb25cbiAgICAgIHRoaXMubG9nLmRlYnVnKGVyci5tZXNzYWdlKTtcbiAgICAgIHRoaXMubG9nLndhcm4oYEdldHRpbmcgc3RhdHVzIG9mIFdlYkRyaXZlckFnZW50IG9uIGRldmljZSB0aW1lZCBvdXQuIENvbnRpbnVpbmdgKTtcbiAgICB9XG4gICAgcmV0dXJuIGN1cnJlbnRTdGF0dXM7XG4gIH1cblxuICBhc3luYyBxdWl0ICgpIHtcbiAgICBhd2FpdCBraWxsUHJvY2VzcygneGNvZGVidWlsZCcsIHRoaXMueGNvZGVidWlsZCk7XG4gIH1cbn1cblxuZXhwb3J0IHsgWGNvZGVCdWlsZCB9O1xuZXhwb3J0IGRlZmF1bHQgWGNvZGVCdWlsZDtcbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7QUFBQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFJQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFHQSxNQUFNQSxrQkFBa0IsR0FBRyxrQkFBM0I7QUFDQSxNQUFNQyxjQUFjLEdBQUcsQ0FBdkI7QUFDQSxNQUFNQyxpQkFBaUIsR0FBRyxzQkFBMUI7QUFDQSxNQUFNQyxjQUFjLEdBQUcsbUJBQXZCO0FBRUEsTUFBTUMsd0JBQXdCLEdBQUcsdUNBQWpDO0FBQ0EsTUFBTUMsd0JBQXdCLEdBQUcs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
|
package/lib/webdriveragent.js
CHANGED
|
@@ -210,7 +210,8 @@ class WebDriverAgent {
|
|
|
210
210
|
}
|
|
211
211
|
|
|
212
212
|
const timestampPath = path.resolve(homeFolder, WDA_UPGRADE_TIMESTAMP_PATH);
|
|
213
|
-
|
|
213
|
+
const didTimestampExist = await fs.exists(timestampPath);
|
|
214
|
+
if (didTimestampExist) {
|
|
214
215
|
try {
|
|
215
216
|
await fs.access(timestampPath, fs.W_OK);
|
|
216
217
|
} catch (ign) {
|
|
@@ -243,6 +244,11 @@ class WebDriverAgent {
|
|
|
243
244
|
return;
|
|
244
245
|
}
|
|
245
246
|
|
|
247
|
+
if (!didTimestampExist) {
|
|
248
|
+
this.log.info('There is no need to perform the project cleanup. A fresh install has been detected');
|
|
249
|
+
return;
|
|
250
|
+
}
|
|
251
|
+
|
|
246
252
|
try {
|
|
247
253
|
await this.xcodebuild.cleanProject();
|
|
248
254
|
} catch (e) {
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "appium-webdriveragent",
|
|
3
|
-
"version": "4.4.
|
|
3
|
+
"version": "4.4.3",
|
|
4
4
|
"description": "Package bundling WebDriverAgent",
|
|
5
5
|
"main": "build/index.js",
|
|
6
6
|
"scripts": {
|
|
@@ -43,20 +43,21 @@
|
|
|
43
43
|
},
|
|
44
44
|
"homepage": "https://github.com/appium/WebDriverAgent#readme",
|
|
45
45
|
"devDependencies": {
|
|
46
|
-
"@appium/gulp-plugins": "^
|
|
47
|
-
"@appium/eslint-config-appium": "^
|
|
46
|
+
"@appium/gulp-plugins": "^7.0.0",
|
|
47
|
+
"@appium/eslint-config-appium": "^6.0.0",
|
|
48
48
|
"@appium/test-support": "^1.0.0",
|
|
49
49
|
"@semantic-release/git": "^10.0.1",
|
|
50
50
|
"appium-xcode": "^4.0.0",
|
|
51
51
|
"chai": "^4.2.0",
|
|
52
52
|
"chai-as-promised": "^7.1.1",
|
|
53
|
-
"
|
|
53
|
+
"eslint-config-prettier": "^8.5.0",
|
|
54
|
+
"glob": "^8.0.1",
|
|
54
55
|
"gulp": "^4.0.2",
|
|
55
56
|
"ios-uicatalog": "^3.5.0",
|
|
56
|
-
"mocha": "^
|
|
57
|
+
"mocha": "^10.0.0",
|
|
57
58
|
"pre-commit": "^1.2.2",
|
|
58
59
|
"semantic-release": "^19.0.2",
|
|
59
|
-
"sinon": "^
|
|
60
|
+
"sinon": "^14.0.0"
|
|
60
61
|
},
|
|
61
62
|
"dependencies": {
|
|
62
63
|
"@appium/base-driver": "^8.3.0",
|
|
Binary file
|
package/WebDriverAgent.xcodeproj/xcuserdata/elf.xcuserdatad/xcdebugger/Breakpoints_v2.xcbkptlist
DELETED
|
@@ -1,91 +0,0 @@
|
|
|
1
|
-
<?xml version="1.0" encoding="UTF-8"?>
|
|
2
|
-
<Bucket
|
|
3
|
-
uuid = "2F0174F2-ED3F-4D11-9A17-7C590053D796"
|
|
4
|
-
type = "1"
|
|
5
|
-
version = "2.0">
|
|
6
|
-
<Breakpoints>
|
|
7
|
-
<BreakpointProxy
|
|
8
|
-
BreakpointExtensionID = "Xcode.Breakpoint.ExceptionBreakpoint">
|
|
9
|
-
<BreakpointContent
|
|
10
|
-
uuid = "471ECA8C-2C53-4C59-88DB-1C1CB3D61601"
|
|
11
|
-
shouldBeEnabled = "No"
|
|
12
|
-
ignoreCount = "0"
|
|
13
|
-
continueAfterRunningActions = "No"
|
|
14
|
-
breakpointStackSelectionBehavior = "1"
|
|
15
|
-
scope = "1"
|
|
16
|
-
stopOnStyle = "0">
|
|
17
|
-
</BreakpointContent>
|
|
18
|
-
</BreakpointProxy>
|
|
19
|
-
<BreakpointProxy
|
|
20
|
-
BreakpointExtensionID = "Xcode.Breakpoint.FileBreakpoint">
|
|
21
|
-
<BreakpointContent
|
|
22
|
-
uuid = "C2E06865-6A52-4686-9771-279AF13ABF8A"
|
|
23
|
-
shouldBeEnabled = "Yes"
|
|
24
|
-
ignoreCount = "0"
|
|
25
|
-
continueAfterRunningActions = "No"
|
|
26
|
-
filePath = "WebDriverAgentLib/Categories/XCUIElement+FBUtilities.m"
|
|
27
|
-
timestampString = "0"
|
|
28
|
-
startingColumnNumber = "9223372036854775807"
|
|
29
|
-
endingColumnNumber = "9223372036854775807"
|
|
30
|
-
startingLineNumber = "264"
|
|
31
|
-
endingLineNumber = "264">
|
|
32
|
-
</BreakpointContent>
|
|
33
|
-
</BreakpointProxy>
|
|
34
|
-
<BreakpointProxy
|
|
35
|
-
BreakpointExtensionID = "Xcode.Breakpoint.FileBreakpoint">
|
|
36
|
-
<BreakpointContent
|
|
37
|
-
uuid = "54216FE6-E240-47F1-88D3-D450CF0AF44E"
|
|
38
|
-
shouldBeEnabled = "Yes"
|
|
39
|
-
ignoreCount = "0"
|
|
40
|
-
continueAfterRunningActions = "No"
|
|
41
|
-
filePath = "WebDriverAgentLib/Categories/XCUIElement+FBResolve.m"
|
|
42
|
-
startingColumnNumber = "9223372036854775807"
|
|
43
|
-
endingColumnNumber = "9223372036854775807"
|
|
44
|
-
startingLineNumber = "37"
|
|
45
|
-
endingLineNumber = "37"
|
|
46
|
-
landmarkName = "-fb_stableInstance"
|
|
47
|
-
landmarkType = "7">
|
|
48
|
-
<Locations>
|
|
49
|
-
<Location
|
|
50
|
-
uuid = "54216FE6-E240-47F1-88D3-D450CF0AF44E - b09f4ce1ce926e6"
|
|
51
|
-
shouldBeEnabled = "Yes"
|
|
52
|
-
ignoreCount = "0"
|
|
53
|
-
continueAfterRunningActions = "No"
|
|
54
|
-
symbolName = "-[XCUIElement(FBResolve) fb_stableInstance]"
|
|
55
|
-
moduleName = "WebDriverAgentLib"
|
|
56
|
-
usesParentBreakpointCondition = "Yes"
|
|
57
|
-
urlString = "file:///Users/elf/code/WebDriverAgent/WebDriverAgentLib/Categories/XCUIElement+FBResolve.m"
|
|
58
|
-
startingColumnNumber = "9223372036854775807"
|
|
59
|
-
endingColumnNumber = "9223372036854775807"
|
|
60
|
-
startingLineNumber = "37"
|
|
61
|
-
endingLineNumber = "37"
|
|
62
|
-
offsetFromSymbolStart = "19">
|
|
63
|
-
</Location>
|
|
64
|
-
<Location
|
|
65
|
-
shouldBeEnabled = "Yes"
|
|
66
|
-
ignoreCount = "0"
|
|
67
|
-
continueAfterRunningActions = "No"
|
|
68
|
-
usesParentBreakpointCondition = "Yes"
|
|
69
|
-
offsetFromSymbolStart = "0">
|
|
70
|
-
</Location>
|
|
71
|
-
</Locations>
|
|
72
|
-
</BreakpointContent>
|
|
73
|
-
</BreakpointProxy>
|
|
74
|
-
<BreakpointProxy
|
|
75
|
-
BreakpointExtensionID = "Xcode.Breakpoint.FileBreakpoint">
|
|
76
|
-
<BreakpointContent
|
|
77
|
-
uuid = "D3009B57-42BC-4905-99BC-70232544FAFB"
|
|
78
|
-
shouldBeEnabled = "Yes"
|
|
79
|
-
ignoreCount = "0"
|
|
80
|
-
continueAfterRunningActions = "No"
|
|
81
|
-
filePath = "WebDriverAgentTests/IntegrationTests/FBAlertTests.m"
|
|
82
|
-
startingColumnNumber = "5"
|
|
83
|
-
endingColumnNumber = "64"
|
|
84
|
-
startingLineNumber = "32"
|
|
85
|
-
endingLineNumber = "32"
|
|
86
|
-
landmarkName = "-setUp"
|
|
87
|
-
landmarkType = "7">
|
|
88
|
-
</BreakpointContent>
|
|
89
|
-
</BreakpointProxy>
|
|
90
|
-
</Breakpoints>
|
|
91
|
-
</Bucket>
|
package/WebDriverAgent.xcodeproj/xcuserdata/elf.xcuserdatad/xcschemes/xcschememanagement.plist
DELETED
|
@@ -1,59 +0,0 @@
|
|
|
1
|
-
<?xml version="1.0" encoding="UTF-8"?>
|
|
2
|
-
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
|
|
3
|
-
<plist version="1.0">
|
|
4
|
-
<dict>
|
|
5
|
-
<key>SchemeUserState</key>
|
|
6
|
-
<dict>
|
|
7
|
-
<key>IntegrationApp.xcscheme_^#shared#^_</key>
|
|
8
|
-
<dict>
|
|
9
|
-
<key>orderHint</key>
|
|
10
|
-
<integer>0</integer>
|
|
11
|
-
</dict>
|
|
12
|
-
<key>IntegrationTests_1.xcscheme_^#shared#^_</key>
|
|
13
|
-
<dict>
|
|
14
|
-
<key>orderHint</key>
|
|
15
|
-
<integer>1</integer>
|
|
16
|
-
</dict>
|
|
17
|
-
<key>IntegrationTests_2.xcscheme_^#shared#^_</key>
|
|
18
|
-
<dict>
|
|
19
|
-
<key>orderHint</key>
|
|
20
|
-
<integer>2</integer>
|
|
21
|
-
</dict>
|
|
22
|
-
<key>IntegrationTests_3.xcscheme_^#shared#^_</key>
|
|
23
|
-
<dict>
|
|
24
|
-
<key>orderHint</key>
|
|
25
|
-
<integer>3</integer>
|
|
26
|
-
</dict>
|
|
27
|
-
<key>WebDriverAgentLib copy.xcscheme_^#shared#^_</key>
|
|
28
|
-
<dict>
|
|
29
|
-
<key>orderHint</key>
|
|
30
|
-
<integer>9</integer>
|
|
31
|
-
</dict>
|
|
32
|
-
<key>WebDriverAgentLib.xcscheme_^#shared#^_</key>
|
|
33
|
-
<dict>
|
|
34
|
-
<key>orderHint</key>
|
|
35
|
-
<integer>4</integer>
|
|
36
|
-
</dict>
|
|
37
|
-
<key>WebDriverAgentLib_tvOS.xcscheme_^#shared#^_</key>
|
|
38
|
-
<dict>
|
|
39
|
-
<key>orderHint</key>
|
|
40
|
-
<integer>5</integer>
|
|
41
|
-
</dict>
|
|
42
|
-
<key>WebDriverAgentRunner-nodebug.xcscheme_^#shared#^_</key>
|
|
43
|
-
<dict>
|
|
44
|
-
<key>orderHint</key>
|
|
45
|
-
<integer>7</integer>
|
|
46
|
-
</dict>
|
|
47
|
-
<key>WebDriverAgentRunner.xcscheme_^#shared#^_</key>
|
|
48
|
-
<dict>
|
|
49
|
-
<key>orderHint</key>
|
|
50
|
-
<integer>6</integer>
|
|
51
|
-
</dict>
|
|
52
|
-
<key>WebDriverAgentRunner_tvOS.xcscheme_^#shared#^_</key>
|
|
53
|
-
<dict>
|
|
54
|
-
<key>orderHint</key>
|
|
55
|
-
<integer>8</integer>
|
|
56
|
-
</dict>
|
|
57
|
-
</dict>
|
|
58
|
-
</dict>
|
|
59
|
-
</plist>
|