path-terminal-init 0.2.3 → 0.2.6
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/cli.js +2 -2
- package/dist/init.js +1 -1
- package/package.json +1 -1
- package/rules/android/path-integration-android.mdc +30 -4
- package/rules/ios/path-integration.mdc +16 -0
- package/rules/windows-10/path-integration-windows10.mdc +15 -0
- package/rules/windows-11/path-integration-windows11.mdc +15 -0
package/dist/cli.js
CHANGED
|
@@ -34,7 +34,7 @@ const ANDROID_SDK_GITHUB_URL = "https://github.com/keyman12/path-terminal-sdk-an
|
|
|
34
34
|
const SDK_VERSION = "0.1.0";
|
|
35
35
|
const PATH_MAVEN_URL = "https://mcp.path2ai.tech/maven";
|
|
36
36
|
const ANDROID_SDK_GROUP = "tech.path2ai.sdk";
|
|
37
|
-
const ANDROID_SDK_VERSION = "1.
|
|
37
|
+
const ANDROID_SDK_VERSION = "1.5.0";
|
|
38
38
|
const ANDROID_SDK_MODULES = ["path-core-models", "path-terminal-sdk", "path-emulator-adapter", "path-psdk-adapter"];
|
|
39
39
|
const MCP_SERVER_URL = "https://mcp.path2ai.tech/sse";
|
|
40
40
|
const RULES_FETCH_URL = "https://mcp.path2ai.tech/rules";
|
|
@@ -723,4 +723,4 @@ import_commander.program.name("path-terminal-init").description(
|
|
|
723
723
|
printSummary(agent, platform, actions, warnings, manualSteps);
|
|
724
724
|
});
|
|
725
725
|
import_commander.program.parse(process.argv);
|
|
726
|
-
//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vc3JjL2NsaS50cyJdLAogICJzb3VyY2VzQ29udGVudCI6IFsiIyEvdXNyL2Jpbi9lbnYgbm9kZVxuXG5pbXBvcnQgeyBwcm9ncmFtIH0gZnJvbSBcImNvbW1hbmRlclwiO1xuaW1wb3J0IGNoYWxrIGZyb20gXCJjaGFsa1wiO1xuaW1wb3J0ICogYXMgZnMgZnJvbSBcImZzXCI7XG5pbXBvcnQgKiBhcyBwYXRoIGZyb20gXCJwYXRoXCI7XG5pbXBvcnQgKiBhcyByZWFkbGluZSBmcm9tIFwicmVhZGxpbmVcIjtcbmltcG9ydCB7IGV4ZWNTeW5jIH0gZnJvbSBcImNoaWxkX3Byb2Nlc3NcIjtcbmltcG9ydCBvcmEgZnJvbSBcIm9yYVwiO1xuXG5jb25zdCBTREtfR0lUSFVCX1VSTCA9IFwiaHR0cHM6Ly9naXRodWIuY29tL2tleW1hbjEyL3BhdGgtdGVybWluYWwtc2RrXCI7XG5jb25zdCBBTkRST0lEX1NES19HSVRIVUJfVVJMID0gXCJodHRwczovL2dpdGh1Yi5jb20va2V5bWFuMTIvcGF0aC10ZXJtaW5hbC1zZGstYW5kcm9pZFwiO1xuY29uc3QgU0RLX1ZFUlNJT04gPSBcIjAuMS4wXCI7IC8vIG1pbmltdW0gdmVyc2lvbiB0byByZWZlcmVuY2Vcbi8vIEFuZHJvaWQgU0RLIGlzIHNlcnZlZCBmcm9tIHRoZSBQYXRoLWhvc3RlZCBNYXZlbiByZXBvIChvbmUgVVJMLCBpbmNsLiB0aGUgVmVyaWZvbmVcbi8vIGJhY2tlbmQgKyBpdHMgLmFhcikuIE5vIEppdFBhY2ssIG5vIHNpYmxpbmcgY2hlY2tvdXQgXHUyMDE0IG1pcnJvcnMgdGhlIGlPUyBTUE0tVVJMIG1vZGVsLlxuY29uc3QgUEFUSF9NQVZFTl9VUkwgPSBcImh0dHBzOi8vbWNwLnBhdGgyYWkudGVjaC9tYXZlblwiO1xuY29uc3QgQU5EUk9JRF9TREtfR1JPVVAgPSBcInRlY2gucGF0aDJhaS5zZGtcIjtcbmNvbnN0IEFORFJPSURfU0RLX1ZFUlNJT04gPSBcIjEuNC4wXCI7XG5jb25zdCBBTkRST0lEX1NES19NT0RVTEVTID0gW1wicGF0aC1jb3JlLW1vZGVsc1wiLCBcInBhdGgtdGVybWluYWwtc2RrXCIsIFwicGF0aC1lbXVsYXRvci1hZGFwdGVyXCIsIFwicGF0aC1wc2RrLWFkYXB0ZXJcIl07XG5jb25zdCBNQ1BfU0VSVkVSX1VSTCA9IFwiaHR0cHM6Ly9tY3AucGF0aDJhaS50ZWNoL3NzZVwiO1xuY29uc3QgUlVMRVNfRkVUQ0hfVVJMID0gXCJodHRwczovL21jcC5wYXRoMmFpLnRlY2gvcnVsZXNcIjtcbmNvbnN0IEFORFJPSURfUlVMRVNfRkVUQ0hfVVJMID0gXCJodHRwczovL21jcC5wYXRoMmFpLnRlY2gvcnVsZXMvYW5kcm9pZFwiO1xuY29uc3QgV0lORE9XUzExX1JVTEVTX0ZFVENIX1VSTCA9IFwiaHR0cHM6Ly9tY3AucGF0aDJhaS50ZWNoL3J1bGVzL3dpbmRvd3MxMVwiO1xuY29uc3QgV0lORE9XUzEwX1JVTEVTX0ZFVENIX1VSTCA9IFwiaHR0cHM6Ly9tY3AucGF0aDJhaS50ZWNoL3J1bGVzL3dpbmRvd3MxMFwiO1xuXG5jb25zdCBSVUxFU19TT1VSQ0UgPSBwYXRoLmpvaW4oX19kaXJuYW1lLCBcIi4uL3J1bGVzL2lvcy9wYXRoLWludGVncmF0aW9uLm1kY1wiKTtcbmNvbnN0IEFORFJPSURfUlVMRVNfU09VUkNFID0gcGF0aC5qb2luKF9fZGlybmFtZSwgXCIuLi9ydWxlcy9hbmRyb2lkL3BhdGgtaW50ZWdyYXRpb24tYW5kcm9pZC5tZGNcIik7XG5jb25zdCBXSU5ET1dTMTFfUlVMRVNfU09VUkNFID0gcGF0aC5qb2luKF9fZGlybmFtZSwgXCIuLi9ydWxlcy93aW5kb3dzLTExL3BhdGgtaW50ZWdyYXRpb24td2luZG93czExLm1kY1wiKTtcbmNvbnN0IFdJTkRPV1MxMF9SVUxFU19TT1VSQ0UgPSBwYXRoLmpvaW4oX19kaXJuYW1lLCBcIi4uL3J1bGVzL3dpbmRvd3MtMTAvcGF0aC1pbnRlZ3JhdGlvbi13aW5kb3dzMTAubWRjXCIpO1xuXG4vLyBUaGUgV2luZG93cyBTREsgaXMgY29uc3VtZWQgYnkgcmVsYXRpdmUgUHJvamVjdFJlZmVyZW5jZSB0byB0aGlzIHNpYmxpbmcgY2xvbmVcbi8vIChvbmUgcmVwbyBzZXJ2ZXMgYm90aCB0aGUgV2luVUkgMyAvIC5ORVQgMTAgYW5kIFdQRiAvIC5ORVQgRlcgNC44IHN0YWNrcykuXG5jb25zdCBXSU5ET1dTX1NES19SRVBPID0gXCJQYXRoLXRlcm1pbmFsLXNkay13aW5kb3dzMTFcIjtcblxudHlwZSBBZ2VudFR5cGUgPSBcImN1cnNvclwiIHwgXCJjbGF1ZGVcIjtcbnR5cGUgUGxhdGZvcm0gPSBcImlvc1wiIHwgXCJhbmRyb2lkXCIgfCBcIndpbmRvd3MxMVwiIHwgXCJ3aW5kb3dzMTBcIjtcblxuLy8gXHUyNTAwXHUyNTAwXHUyNTAwIFV0aWxpdGllcyBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcblxuZnVuY3Rpb24gYXNrKHF1ZXN0aW9uOiBzdHJpbmcpOiBQcm9taXNlPHN0cmluZz4ge1xuICBjb25zdCBybCA9IHJlYWRsaW5lLmNyZWF0ZUludGVyZmFjZSh7IGlucHV0OiBwcm9jZXNzLnN0ZGluLCBvdXRwdXQ6IHByb2Nlc3Muc3Rkb3V0IH0pO1xuICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUpID0+IHtcbiAgICBybC5xdWVzdGlvbihxdWVzdGlvbiwgKGFuc3dlcikgPT4ge1xuICAgICAgcmwuY2xvc2UoKTtcbiAgICAgIHJlc29sdmUoYW5zd2VyLnRyaW0oKSk7XG4gICAgfSk7XG4gIH0pO1xufVxuXG5mdW5jdGlvbiBmaW5kWGNvZGVQcm9qZWN0KGRpcjogc3RyaW5nKTogc3RyaW5nIHwgbnVsbCB7XG4gIGNvbnN0IGlzWGNvZGVBcnRpZmFjdCA9IChlOiBzdHJpbmcpID0+XG4gICAgZS5lbmRzV2l0aChcIi54Y29kZXByb2pcIikgfHwgZS5lbmRzV2l0aChcIi54Y3dvcmtzcGFjZVwiKTtcblxuICAvLyBDaGVjayB0aGUgY3VycmVudCBkaXJlY3RvcnkgZmlyc3RcbiAgY29uc3QgZW50cmllcyA9IGZzLnJlYWRkaXJTeW5jKGRpcik7XG4gIGNvbnN0IHByb2ogPSBlbnRyaWVzLmZpbmQoaXNYY29kZUFydGlmYWN0KTtcbiAgaWYgKHByb2opIHJldHVybiBwYXRoLmpvaW4oZGlyLCBwcm9qKTtcblxuICAvLyBTZWFyY2ggb25lIGxldmVsIGRlZXAgaW4gc3ViZGlyZWN0b3JpZXMgKGhhbmRsZXMgcmVwb3Mgd2hlcmUgdGhlXG4gIC8vIFhjb2RlIHByb2plY3Qgc2l0cyBpbnNpZGUgYSBuYW1lZCBzdWJmb2xkZXIsIGUuZy4gT3JkZXJjaGFtcGlvbkVQT1MvKVxuICBmb3IgKGNvbnN0IGVudHJ5IG9mIGVudHJpZXMpIHtcbiAgICBpZiAoZW50cnkuc3RhcnRzV2l0aChcIi5cIikpIGNvbnRpbnVlO1xuICAgIGNvbnN0IHN1YiA9IHBhdGguam9pbihkaXIsIGVudHJ5KTtcbiAgICB0cnkge1xuICAgICAgaWYgKGZzLnN0YXRTeW5jKHN1YikuaXNEaXJlY3RvcnkoKSkge1xuICAgICAgICBjb25zdCBzdWJFbnRyaWVzID0gZnMucmVhZGRpclN5bmMoc3ViKTtcbiAgICAgICAgY29uc3Qgc3ViUHJvaiA9IHN1YkVudHJpZXMuZmluZChpc1hjb2RlQXJ0aWZhY3QpO1xuICAgICAgICBpZiAoc3ViUHJvaikgcmV0dXJuIHBhdGguam9pbihzdWIsIHN1YlByb2opO1xuICAgICAgfVxuICAgIH0gY2F0Y2ggeyAvKiBza2lwIHVucmVhZGFibGUgZGlycyAqLyB9XG4gIH1cblxuICByZXR1cm4gbnVsbDtcbn1cblxuZnVuY3Rpb24gZmluZFBhY2thZ2VTd2lmdChkaXI6IHN0cmluZyk6IHN0cmluZyB8IG51bGwge1xuICBjb25zdCBwID0gcGF0aC5qb2luKGRpciwgXCJQYWNrYWdlLnN3aWZ0XCIpO1xuICByZXR1cm4gZnMuZXhpc3RzU3luYyhwKSA/IHAgOiBudWxsO1xufVxuXG5mdW5jdGlvbiBoYXNTREtEZXBlbmRlbmN5KHBhY2thZ2VTd2lmdDogc3RyaW5nKTogYm9vbGVhbiB7XG4gIGNvbnN0IGNvbnRlbnQgPSBmcy5yZWFkRmlsZVN5bmMocGFja2FnZVN3aWZ0LCBcInV0Zi04XCIpO1xuICByZXR1cm4gY29udGVudC5pbmNsdWRlcyhcInBhdGgtdGVybWluYWwtc2RrXCIpIHx8IGNvbnRlbnQuaW5jbHVkZXMoXCJQYXRoVGVybWluYWxTREtcIik7XG59XG5cbmZ1bmN0aW9uIGhhc1hjb2RlUHJvamVjdFNES0RlcGVuZGVuY3koeGNvZGVQcm9qZWN0OiBzdHJpbmcpOiBib29sZWFuIHtcbiAgLy8gWGNvZGUgc3RvcmVzIHJlc29sdmVkIFNQTSBwYWNrYWdlcyBpbiB0aGUgd29ya3NwYWNlJ3MgUGFja2FnZS5yZXNvbHZlZFxuICBjb25zdCByZXNvbHZlZFBhdGhzID0gW1xuICAgIHBhdGguam9pbih4Y29kZVByb2plY3QsIFwicHJvamVjdC54Y3dvcmtzcGFjZVwiLCBcInhjc2hhcmVkZGF0YVwiLCBcInN3aWZ0cG1cIiwgXCJQYWNrYWdlLnJlc29sdmVkXCIpLFxuICAgIHBhdGguam9pbih4Y29kZVByb2plY3QsIFwieGNzaGFyZWRkYXRhXCIsIFwic3dpZnRwbVwiLCBcIlBhY2thZ2UucmVzb2x2ZWRcIiksXG4gIF07XG4gIGZvciAoY29uc3QgcCBvZiByZXNvbHZlZFBhdGhzKSB7XG4gICAgaWYgKGZzLmV4aXN0c1N5bmMocCkpIHtcbiAgICAgIGNvbnN0IGNvbnRlbnQgPSBmcy5yZWFkRmlsZVN5bmMocCwgXCJ1dGYtOFwiKTtcbiAgICAgIGlmIChjb250ZW50LmluY2x1ZGVzKFwicGF0aC10ZXJtaW5hbC1zZGtcIikgfHwgY29udGVudC5pbmNsdWRlcyhcIlBhdGhUZXJtaW5hbFNES1wiKSkge1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbiAgcmV0dXJuIGZhbHNlO1xufVxuXG5mdW5jdGlvbiBpbmplY3RTUE1EZXBlbmRlbmN5KHBhY2thZ2VTd2lmdFBhdGg6IHN0cmluZyk6IGJvb2xlYW4ge1xuICBsZXQgY29udGVudCA9IGZzLnJlYWRGaWxlU3luYyhwYWNrYWdlU3dpZnRQYXRoLCBcInV0Zi04XCIpO1xuXG4gIC8vIEFscmVhZHkgcHJlc2VudD9cbiAgaWYgKGhhc1NES0RlcGVuZGVuY3kocGFja2FnZVN3aWZ0UGF0aCkpIHJldHVybiBmYWxzZTtcblxuICAvLyBBZGQgdGhlIHBhY2thZ2UgZGVwZW5kZW5jeSBcdTIwMTQgZmluZCB0aGUgZGVwZW5kZW5jaWVzOiBbIGFycmF5XG4gIGNvbnN0IGRlcHNSZWdleCA9IC8oZGVwZW5kZW5jaWVzOlxccypcXFspLztcbiAgaWYgKCFkZXBzUmVnZXgudGVzdChjb250ZW50KSkge1xuICAgIHJldHVybiBmYWxzZTsgLy8gQ2FuJ3Qgc2FmZWx5IGluamVjdCBcdTIwMTQgc3RydWN0dXJlIG5vdCByZWNvZ25pc2VkXG4gIH1cblxuICBjb25zdCBkZXBFbnRyeSA9IGBcXG4gICAgICAgIC5wYWNrYWdlKHVybDogXCIke1NES19HSVRIVUJfVVJMfVwiLCBmcm9tOiBcIiR7U0RLX1ZFUlNJT059XCIpLGA7XG4gIGNvbnRlbnQgPSBjb250ZW50LnJlcGxhY2UoZGVwc1JlZ2V4LCBgJDEke2RlcEVudHJ5fWApO1xuICBmcy53cml0ZUZpbGVTeW5jKHBhY2thZ2VTd2lmdFBhdGgsIGNvbnRlbnQsIFwidXRmLThcIik7XG4gIHJldHVybiB0cnVlO1xufVxuXG4vLyBcdTI1MDBcdTI1MDBcdTI1MDAgQ3Vyc29yLXNwZWNpZmljIGNvbmZpZyBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcblxuZnVuY3Rpb24gd3JpdGVDdXJzb3JNY3BDb25maWcoZGlyOiBzdHJpbmcpOiB7IHdyaXR0ZW46IGJvb2xlYW47IG1lcmdlZDogYm9vbGVhbiB9IHtcbiAgY29uc3QgY3Vyc29yRGlyID0gcGF0aC5qb2luKGRpciwgXCIuY3Vyc29yXCIpO1xuICBjb25zdCBjb25maWdQYXRoID0gcGF0aC5qb2luKGN1cnNvckRpciwgXCJtY3AuanNvblwiKTtcblxuICBmcy5ta2RpclN5bmMoY3Vyc29yRGlyLCB7IHJlY3Vyc2l2ZTogdHJ1ZSB9KTtcblxuICBjb25zdCBwYXRoRW50cnkgPSB7XG4gICAgXCJwYXRoLXRlcm1pbmFsXCI6IHsgdXJsOiBNQ1BfU0VSVkVSX1VSTCB9LFxuICB9O1xuXG4gIGlmIChmcy5leGlzdHNTeW5jKGNvbmZpZ1BhdGgpKSB7XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IGV4aXN0aW5nID0gSlNPTi5wYXJzZShmcy5yZWFkRmlsZVN5bmMoY29uZmlnUGF0aCwgXCJ1dGYtOFwiKSk7XG4gICAgICBpZiAoIWV4aXN0aW5nLm1jcFNlcnZlcnMpIGV4aXN0aW5nLm1jcFNlcnZlcnMgPSB7fTtcbiAgICAgIGlmIChleGlzdGluZy5tY3BTZXJ2ZXJzW1wicGF0aC10ZXJtaW5hbFwiXSkge1xuICAgICAgICByZXR1cm4geyB3cml0dGVuOiBmYWxzZSwgbWVyZ2VkOiBmYWxzZSB9OyAvLyBhbHJlYWR5IHByZXNlbnRcbiAgICAgIH1cbiAgICAgIGV4aXN0aW5nLm1jcFNlcnZlcnNbXCJwYXRoLXRlcm1pbmFsXCJdID0gcGF0aEVudHJ5W1wicGF0aC10ZXJtaW5hbFwiXTtcbiAgICAgIGZzLndyaXRlRmlsZVN5bmMoY29uZmlnUGF0aCwgSlNPTi5zdHJpbmdpZnkoZXhpc3RpbmcsIG51bGwsIDIpLCBcInV0Zi04XCIpO1xuICAgICAgcmV0dXJuIHsgd3JpdHRlbjogdHJ1ZSwgbWVyZ2VkOiB0cnVlIH07XG4gICAgfSBjYXRjaCB7XG4gICAgICAvLyBGaWxlIGV4aXN0cyBidXQgaXMgbm90IHZhbGlkIEpTT04gXHUyMDE0IGRvbid0IG92ZXJ3cml0ZVxuICAgICAgcmV0dXJuIHsgd3JpdHRlbjogZmFsc2UsIG1lcmdlZDogZmFsc2UgfTtcbiAgICB9XG4gIH1cblxuICBjb25zdCBjb25maWcgPSB7IG1jcFNlcnZlcnM6IHBhdGhFbnRyeSB9O1xuICBmcy53cml0ZUZpbGVTeW5jKGNvbmZpZ1BhdGgsIEpTT04uc3RyaW5naWZ5KGNvbmZpZywgbnVsbCwgMiksIFwidXRmLThcIik7XG4gIHJldHVybiB7IHdyaXR0ZW46IHRydWUsIG1lcmdlZDogZmFsc2UgfTtcbn1cblxuZnVuY3Rpb24gd3JpdGVDdXJzb3JSdWxlc0ZpbGUoZGlyOiBzdHJpbmcsIHJ1bGVzU291cmNlOiBzdHJpbmcgPSBSVUxFU19TT1VSQ0UsIGZpbGVuYW1lOiBzdHJpbmcgPSBcInBhdGgtaW50ZWdyYXRpb24ubWRjXCIsIGZhbGxiYWNrVXJsPzogc3RyaW5nKTogeyB3cml0dGVuOiBib29sZWFuOyBza2lwcGVkOiBib29sZWFuIH0ge1xuICBjb25zdCBydWxlc0RpciA9IHBhdGguam9pbihkaXIsIFwiLmN1cnNvclwiLCBcInJ1bGVzXCIpO1xuICBjb25zdCBkZXN0UGF0aCA9IHBhdGguam9pbihydWxlc0RpciwgZmlsZW5hbWUpO1xuXG4gIGZzLm1rZGlyU3luYyhydWxlc0RpciwgeyByZWN1cnNpdmU6IHRydWUgfSk7XG5cbiAgaWYgKGZzLmV4aXN0c1N5bmMoZGVzdFBhdGgpKSB7XG4gICAgcmV0dXJuIHsgd3JpdHRlbjogZmFsc2UsIHNraXBwZWQ6IHRydWUgfTtcbiAgfVxuXG4gIGNvbnN0IGNvbnRlbnQgPSBsb2FkUnVsZXNDb250ZW50KHJ1bGVzU291cmNlLCBmYWxsYmFja1VybCk7XG4gIGlmICghY29udGVudCkgcmV0dXJuIHsgd3JpdHRlbjogZmFsc2UsIHNraXBwZWQ6IGZhbHNlIH07XG5cbiAgZnMud3JpdGVGaWxlU3luYyhkZXN0UGF0aCwgY29udGVudCwgXCJ1dGYtOFwiKTtcbiAgcmV0dXJuIHsgd3JpdHRlbjogdHJ1ZSwgc2tpcHBlZDogZmFsc2UgfTtcbn1cblxuLy8gXHUyNTAwXHUyNTAwXHUyNTAwIENsYXVkZSBDb2RlLXNwZWNpZmljIGNvbmZpZyBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcblxuZnVuY3Rpb24gd3JpdGVDbGF1ZGVNY3BDb25maWcoZGlyOiBzdHJpbmcpOiB7IHdyaXR0ZW46IGJvb2xlYW47IG1lcmdlZDogYm9vbGVhbiB9IHtcbiAgLy8gQ2xhdWRlIENvZGUgcmVhZHMgLm1jcC5qc29uIGF0IHRoZSBwcm9qZWN0IHJvb3QgKHNhbWUgbWNwU2VydmVycyBmb3JtYXQgYXMgQ3Vyc29yKVxuICBjb25zdCBjb25maWdQYXRoID0gcGF0aC5qb2luKGRpciwgXCIubWNwLmpzb25cIik7XG5cbiAgY29uc3Qgc2VydmVyRW50cnkgPSB7XG4gICAgdHlwZTogXCJzc2VcIixcbiAgICB1cmw6IE1DUF9TRVJWRVJfVVJMLFxuICB9O1xuXG4gIGlmIChmcy5leGlzdHNTeW5jKGNvbmZpZ1BhdGgpKSB7XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IGV4aXN0aW5nID0gSlNPTi5wYXJzZShmcy5yZWFkRmlsZVN5bmMoY29uZmlnUGF0aCwgXCJ1dGYtOFwiKSk7XG4gICAgICBpZiAoIWV4aXN0aW5nLm1jcFNlcnZlcnMpIGV4aXN0aW5nLm1jcFNlcnZlcnMgPSB7fTtcbiAgICAgIGlmIChleGlzdGluZy5tY3BTZXJ2ZXJzW1wicGF0aC10ZXJtaW5hbFwiXSkge1xuICAgICAgICByZXR1cm4geyB3cml0dGVuOiBmYWxzZSwgbWVyZ2VkOiBmYWxzZSB9OyAvLyBhbHJlYWR5IHByZXNlbnRcbiAgICAgIH1cbiAgICAgIGV4aXN0aW5nLm1jcFNlcnZlcnNbXCJwYXRoLXRlcm1pbmFsXCJdID0gc2VydmVyRW50cnk7XG4gICAgICBmcy53cml0ZUZpbGVTeW5jKGNvbmZpZ1BhdGgsIEpTT04uc3RyaW5naWZ5KGV4aXN0aW5nLCBudWxsLCAyKSwgXCJ1dGYtOFwiKTtcbiAgICAgIHJldHVybiB7IHdyaXR0ZW46IHRydWUsIG1lcmdlZDogdHJ1ZSB9O1xuICAgIH0gY2F0Y2gge1xuICAgICAgcmV0dXJuIHsgd3JpdHRlbjogZmFsc2UsIG1lcmdlZDogZmFsc2UgfTtcbiAgICB9XG4gIH1cblxuICBjb25zdCBjb25maWcgPSB7XG4gICAgbWNwU2VydmVyczoge1xuICAgICAgXCJwYXRoLXRlcm1pbmFsXCI6IHNlcnZlckVudHJ5LFxuICAgIH0sXG4gIH07XG4gIGZzLndyaXRlRmlsZVN5bmMoY29uZmlnUGF0aCwgSlNPTi5zdHJpbmdpZnkoY29uZmlnLCBudWxsLCAyKSwgXCJ1dGYtOFwiKTtcbiAgcmV0dXJuIHsgd3JpdHRlbjogdHJ1ZSwgbWVyZ2VkOiBmYWxzZSB9O1xufVxuXG4vLyBQcmUtYXBwcm92ZSB0aGUgcGF0aC10ZXJtaW5hbCBNQ1Agc2VydmVyIGluIC5jbGF1ZGUvc2V0dGluZ3MuanNvbiBzbyBDbGF1ZGVcbi8vIENvZGUgbG9hZHMgaXRzIHRvb2xzIG9uIHRoZSB2ZXJ5IGZpcnN0IHNlc3Npb24gd2l0aG91dCB0aGUgdXNlciBoYXZpbmcgdG9cbi8vIGNsaWNrIHRocm91Z2ggYW4gYXBwcm92YWwgcHJvbXB0ICh3aGljaCBpcyBlYXN5IHRvIG1pc3MgYW5kIGxlYXZlcyB0aGUgYWdlbnRcbi8vIHJ1bm5pbmcgd2l0aG91dCBNQ1AgdG9vbHMpLlxuZnVuY3Rpb24gd3JpdGVDbGF1ZGVTZXR0aW5ncyhkaXI6IHN0cmluZyk6IHsgd3JpdHRlbjogYm9vbGVhbjsgbWVyZ2VkOiBib29sZWFuOyBhbHJlYWR5QXBwcm92ZWQ6IGJvb2xlYW4gfSB7XG4gIGNvbnN0IGNsYXVkZURpciA9IHBhdGguam9pbihkaXIsIFwiLmNsYXVkZVwiKTtcbiAgY29uc3Qgc2V0dGluZ3NQYXRoID0gcGF0aC5qb2luKGNsYXVkZURpciwgXCJzZXR0aW5ncy5qc29uXCIpO1xuICBjb25zdCBNQ1BfTkFNRSA9IFwicGF0aC10ZXJtaW5hbFwiO1xuXG4gIGlmICghZnMuZXhpc3RzU3luYyhjbGF1ZGVEaXIpKSB7XG4gICAgZnMubWtkaXJTeW5jKGNsYXVkZURpciwgeyByZWN1cnNpdmU6IHRydWUgfSk7XG4gIH1cblxuICBpZiAoZnMuZXhpc3RzU3luYyhzZXR0aW5nc1BhdGgpKSB7XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IGV4aXN0aW5nID0gSlNPTi5wYXJzZShmcy5yZWFkRmlsZVN5bmMoc2V0dGluZ3NQYXRoLCBcInV0Zi04XCIpKTtcbiAgICAgIGNvbnN0IGN1cnJlbnQ6IHN0cmluZ1tdID0gQXJyYXkuaXNBcnJheShleGlzdGluZy5lbmFibGVkTWNwanNvblNlcnZlcnMpID8gZXhpc3RpbmcuZW5hYmxlZE1jcGpzb25TZXJ2ZXJzIDogW107XG4gICAgICBpZiAoY3VycmVudC5pbmNsdWRlcyhNQ1BfTkFNRSkpIHtcbiAgICAgICAgcmV0dXJuIHsgd3JpdHRlbjogZmFsc2UsIG1lcmdlZDogZmFsc2UsIGFscmVhZHlBcHByb3ZlZDogdHJ1ZSB9O1xuICAgICAgfVxuICAgICAgZXhpc3RpbmcuZW5hYmxlZE1jcGpzb25TZXJ2ZXJzID0gWy4uLmN1cnJlbnQsIE1DUF9OQU1FXTtcbiAgICAgIGZzLndyaXRlRmlsZVN5bmMoc2V0dGluZ3NQYXRoLCBKU09OLnN0cmluZ2lmeShleGlzdGluZywgbnVsbCwgMiksIFwidXRmLThcIik7XG4gICAgICByZXR1cm4geyB3cml0dGVuOiB0cnVlLCBtZXJnZWQ6IHRydWUsIGFscmVhZHlBcHByb3ZlZDogZmFsc2UgfTtcbiAgICB9IGNhdGNoIHtcbiAgICAgIHJldHVybiB7IHdyaXR0ZW46IGZhbHNlLCBtZXJnZWQ6IGZhbHNlLCBhbHJlYWR5QXBwcm92ZWQ6IGZhbHNlIH07XG4gICAgfVxuICB9XG5cbiAgY29uc3QgY29uZmlnID0ge1xuICAgIGVuYWJsZWRNY3Bqc29uU2VydmVyczogW01DUF9OQU1FXSxcbiAgfTtcbiAgZnMud3JpdGVGaWxlU3luYyhzZXR0aW5nc1BhdGgsIEpTT04uc3RyaW5naWZ5KGNvbmZpZywgbnVsbCwgMiksIFwidXRmLThcIik7XG4gIHJldHVybiB7IHdyaXR0ZW46IHRydWUsIG1lcmdlZDogZmFsc2UsIGFscmVhZHlBcHByb3ZlZDogZmFsc2UgfTtcbn1cblxuZnVuY3Rpb24gd3JpdGVDbGF1ZGVSdWxlc0ZpbGUoZGlyOiBzdHJpbmcsIHJ1bGVzU291cmNlOiBzdHJpbmcgPSBSVUxFU19TT1VSQ0UsIGZhbGxiYWNrVXJsPzogc3RyaW5nKTogeyB3cml0dGVuOiBib29sZWFuOyBza2lwcGVkOiBib29sZWFuIH0ge1xuICBjb25zdCBkZXN0UGF0aCA9IHBhdGguam9pbihkaXIsIFwiQ0xBVURFLm1kXCIpO1xuXG4gIC8vIERvbid0IG92ZXJ3cml0ZSBhbiBleGlzdGluZyBDTEFVREUubWQgXHUyMDE0IGl0IG1heSBoYXZlIGN1c3RvbSBpbnN0cnVjdGlvbnNcbiAgaWYgKGZzLmV4aXN0c1N5bmMoZGVzdFBhdGgpKSB7XG4gICAgY29uc3QgY29udGVudCA9IGZzLnJlYWRGaWxlU3luYyhkZXN0UGF0aCwgXCJ1dGYtOFwiKTtcbiAgICBpZiAoY29udGVudC5pbmNsdWRlcyhcIlBhdGggVGVybWluYWwgU0RLXCIpKSB7XG4gICAgICByZXR1cm4geyB3cml0dGVuOiBmYWxzZSwgc2tpcHBlZDogdHJ1ZSB9O1xuICAgIH1cbiAgICAvLyBBcHBlbmQgdG8gZXhpc3RpbmcgQ0xBVURFLm1kXG4gICAgY29uc3QgcnVsZXMgPSBsb2FkUnVsZXNDb250ZW50KHJ1bGVzU291cmNlLCBmYWxsYmFja1VybCk7XG4gICAgaWYgKCFydWxlcykgcmV0dXJuIHsgd3JpdHRlbjogZmFsc2UsIHNraXBwZWQ6IGZhbHNlIH07XG4gICAgZnMuYXBwZW5kRmlsZVN5bmMoZGVzdFBhdGgsIFwiXFxuXFxuXCIgKyBydWxlcywgXCJ1dGYtOFwiKTtcbiAgICByZXR1cm4geyB3cml0dGVuOiB0cnVlLCBza2lwcGVkOiBmYWxzZSB9O1xuICB9XG5cbiAgY29uc3QgcnVsZXMgPSBsb2FkUnVsZXNDb250ZW50KHJ1bGVzU291cmNlLCBmYWxsYmFja1VybCk7XG4gIGlmICghcnVsZXMpIHJldHVybiB7IHdyaXR0ZW46IGZhbHNlLCBza2lwcGVkOiBmYWxzZSB9O1xuICBmcy53cml0ZUZpbGVTeW5jKGRlc3RQYXRoLCBydWxlcywgXCJ1dGYtOFwiKTtcbiAgcmV0dXJuIHsgd3JpdHRlbjogdHJ1ZSwgc2tpcHBlZDogZmFsc2UgfTtcbn1cblxuZnVuY3Rpb24gbG9hZFJ1bGVzQ29udGVudChydWxlc1NvdXJjZTogc3RyaW5nID0gUlVMRVNfU09VUkNFLCBmYWxsYmFja1VybD86IHN0cmluZyk6IHN0cmluZyB8IG51bGwge1xuICBsZXQgcmF3OiBzdHJpbmcgfCBudWxsID0gbnVsbDtcblxuICBpZiAoZnMuZXhpc3RzU3luYyhydWxlc1NvdXJjZSkpIHtcbiAgICByYXcgPSBmcy5yZWFkRmlsZVN5bmMocnVsZXNTb3VyY2UsIFwidXRmLThcIik7XG4gIH0gZWxzZSBpZiAoZmFsbGJhY2tVcmwpIHtcbiAgICB0cnkge1xuICAgICAgcmF3ID0gZXhlY1N5bmMoYGN1cmwgLXNmIC0tbWF4LXRpbWUgMTAgXCIke2ZhbGxiYWNrVXJsfVwiYCwgeyBlbmNvZGluZzogXCJ1dGYtOFwiIH0pO1xuICAgIH0gY2F0Y2gge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuICB9XG5cbiAgaWYgKCFyYXcpIHJldHVybiBudWxsO1xuXG4gIC8vIFN0cmlwIHRoZSBZQU1MIGZyb250bWF0dGVyICgtLS0gLi4uIC0tLSkgdGhhdCBDdXJzb3IgdXNlc1xuICBjb25zdCBzdHJpcHBlZCA9IHJhdy5yZXBsYWNlKC9eLS0tW1xcc1xcU10qPy0tLVxccyovLCBcIlwiKTtcbiAgcmV0dXJuIHN0cmlwcGVkLnRyaW0oKTtcbn1cblxuLy8gXHUyNTAwXHUyNTAwXHUyNTAwIFNoYXJlZCBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcblxuZnVuY3Rpb24gY2hlY2tJbmZvUGxpc3QoZGlyOiBzdHJpbmcpOiBzdHJpbmdbXSB7XG4gIGNvbnN0IGlzc3Vlczogc3RyaW5nW10gPSBbXTtcbiAgY29uc3QgcGxpc3RGaWxlczogc3RyaW5nW10gPSBbXTtcblxuICBmdW5jdGlvbiBmaW5kUGxpc3RzKGQ6IHN0cmluZywgZGVwdGg6IG51bWJlciA9IDApIHtcbiAgICBpZiAoZGVwdGggPiA0KSByZXR1cm47XG4gICAgY29uc3QgZW50cmllcyA9IGZzLnJlYWRkaXJTeW5jKGQpO1xuICAgIGZvciAoY29uc3QgZSBvZiBlbnRyaWVzKSB7XG4gICAgICBpZiAoZSA9PT0gXCJub2RlX21vZHVsZXNcIiB8fCBlLnN0YXJ0c1dpdGgoXCIuXCIpKSBjb250aW51ZTtcbiAgICAgIGNvbnN0IGZ1bGwgPSBwYXRoLmpvaW4oZCwgZSk7XG4gICAgICBjb25zdCBzdGF0ID0gZnMuc3RhdFN5bmMoZnVsbCk7XG4gICAgICBpZiAoc3RhdC5pc0RpcmVjdG9yeSgpKSBmaW5kUGxpc3RzKGZ1bGwsIGRlcHRoICsgMSk7XG4gICAgICBlbHNlIGlmIChlID09PSBcIkluZm8ucGxpc3RcIikgcGxpc3RGaWxlcy5wdXNoKGZ1bGwpO1xuICAgIH1cbiAgfVxuXG4gIGZpbmRQbGlzdHMoZGlyKTtcblxuICBmb3IgKGNvbnN0IHBsaXN0IG9mIHBsaXN0RmlsZXMpIHtcbiAgICBjb25zdCBjb250ZW50ID0gZnMucmVhZEZpbGVTeW5jKHBsaXN0LCBcInV0Zi04XCIpO1xuICAgIGlmICghY29udGVudC5pbmNsdWRlcyhcIk5TQmx1ZXRvb3RoQWx3YXlzVXNhZ2VEZXNjcmlwdGlvblwiKSkge1xuICAgICAgaXNzdWVzLnB1c2gocGxpc3QpO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBpc3N1ZXM7XG59XG5cbi8vIFx1MjUwMFx1MjUwMFx1MjUwMCBBbmRyb2lkIGhlbHBlcnMgXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXG5cbmZ1bmN0aW9uIGZpbmRBbmRyb2lkUHJvamVjdChkaXI6IHN0cmluZyk6IGJvb2xlYW4ge1xuICByZXR1cm4gZnMuZXhpc3RzU3luYyhwYXRoLmpvaW4oZGlyLCBcInNldHRpbmdzLmdyYWRsZS5rdHNcIikpICYmXG4gICAgICAgICBmcy5leGlzdHNTeW5jKHBhdGguam9pbihkaXIsIFwiYXBwXCIsIFwiYnVpbGQuZ3JhZGxlLmt0c1wiKSk7XG59XG5cbmZ1bmN0aW9uIGhhc0FuZHJvaWRTREtEZXBlbmRlbmN5KGRpcjogc3RyaW5nKTogYm9vbGVhbiB7XG4gIC8vIEluc3RhbGxlZCA9IHRoZSBQYXRoIE1hdmVuIHJlcG8gaXMgcmVnaXN0ZXJlZCBBTkQgYSB0ZWNoLnBhdGgyYWkuc2RrIGRlcCBpcyBwcmVzZW50LlxuICBjb25zdCBzZXR0aW5nc1BhdGggPSBwYXRoLmpvaW4oZGlyLCBcInNldHRpbmdzLmdyYWRsZS5rdHNcIik7XG4gIGlmICghZnMuZXhpc3RzU3luYyhzZXR0aW5nc1BhdGgpKSByZXR1cm4gZmFsc2U7XG4gIGNvbnN0IHNldHRpbmdzID0gZnMucmVhZEZpbGVTeW5jKHNldHRpbmdzUGF0aCwgXCJ1dGYtOFwiKTtcbiAgaWYgKCFzZXR0aW5ncy5pbmNsdWRlcyhQQVRIX01BVkVOX1VSTCkpIHJldHVybiBmYWxzZTtcbiAgY29uc3QgYnVpbGRQYXRoID0gcGF0aC5qb2luKGRpciwgXCJhcHBcIiwgXCJidWlsZC5ncmFkbGUua3RzXCIpO1xuICBpZiAoIWZzLmV4aXN0c1N5bmMoYnVpbGRQYXRoKSkgcmV0dXJuIHRydWU7XG4gIGNvbnN0IGJ1aWxkID0gZnMucmVhZEZpbGVTeW5jKGJ1aWxkUGF0aCwgXCJ1dGYtOFwiKTtcbiAgcmV0dXJuIC9eXFxzKmltcGxlbWVudGF0aW9uXFwoXCJ0ZWNoXFwucGF0aDJhaVxcLnNkazpwYXRoLXRlcm1pbmFsLXNkay9tLnRlc3QoYnVpbGQpO1xufVxuXG5mdW5jdGlvbiBpbmplY3RQYXRoTWF2ZW5SZXBvKGRpcjogc3RyaW5nKTogYm9vbGVhbiB7XG4gIGNvbnN0IHNldHRpbmdzUGF0aCA9IHBhdGguam9pbihkaXIsIFwic2V0dGluZ3MuZ3JhZGxlLmt0c1wiKTtcbiAgaWYgKCFmcy5leGlzdHNTeW5jKHNldHRpbmdzUGF0aCkpIHJldHVybiBmYWxzZTtcbiAgbGV0IGNvbnRlbnQgPSBmcy5yZWFkRmlsZVN5bmMoc2V0dGluZ3NQYXRoLCBcInV0Zi04XCIpO1xuICBpZiAoY29udGVudC5pbmNsdWRlcyhQQVRIX01BVkVOX1VSTCkpIHJldHVybiB0cnVlOyAvLyBhbHJlYWR5IHByZXNlbnRcbiAgLy8gQWRkIHRoZSBQYXRoIE1hdmVuIHJlcG8gaW5zaWRlIGRlcGVuZGVuY3lSZXNvbHV0aW9uTWFuYWdlbWVudCByZXBvc2l0b3JpZXMgYmxvY2tcbiAgY29uc3QgcmVwb1JlZ2V4ID0gLyhkZXBlbmRlbmN5UmVzb2x1dGlvbk1hbmFnZW1lbnRcXHMqXFx7W159XSpyZXBvc2l0b3JpZXNcXHMqXFx7KS9zO1xuICBpZiAoIXJlcG9SZWdleC50ZXN0KGNvbnRlbnQpKSByZXR1cm4gZmFsc2U7XG4gIGNvbnRlbnQgPSBjb250ZW50LnJlcGxhY2UocmVwb1JlZ2V4LCBgJDFcXG4gICAgICAgIG1hdmVuIHsgdXJsID0gdXJpKFwiJHtQQVRIX01BVkVOX1VSTH1cIikgfWApO1xuICBmcy53cml0ZUZpbGVTeW5jKHNldHRpbmdzUGF0aCwgY29udGVudCwgXCJ1dGYtOFwiKTtcbiAgcmV0dXJuIHRydWU7XG59XG5cbmZ1bmN0aW9uIGluamVjdEdyYWRsZURlcGVuZGVuY2llcyhkaXI6IHN0cmluZyk6IGJvb2xlYW4ge1xuICBjb25zdCBidWlsZFBhdGggPSBwYXRoLmpvaW4oZGlyLCBcImFwcFwiLCBcImJ1aWxkLmdyYWRsZS5rdHNcIik7XG4gIGlmICghZnMuZXhpc3RzU3luYyhidWlsZFBhdGgpKSByZXR1cm4gZmFsc2U7XG4gIGxldCBjb250ZW50ID0gZnMucmVhZEZpbGVTeW5jKGJ1aWxkUGF0aCwgXCJ1dGYtOFwiKTtcblxuICAvLyBBbHJlYWR5IHByZXNlbnQgYW5kIHVuY29tbWVudGVkIFx1MjAxNCBub3RoaW5nIHRvIGRvXG4gIGlmICgvXlxccyppbXBsZW1lbnRhdGlvblxcKFwidGVjaFxcLnBhdGgyYWlcXC5zZGs6cGF0aC10ZXJtaW5hbC1zZGsvbS50ZXN0KGNvbnRlbnQpKSByZXR1cm4gdHJ1ZTtcblxuICBjb25zdCBkZXBzID0gQU5EUk9JRF9TREtfTU9EVUxFU1xuICAgIC5tYXAoKG0pID0+IGAgICAgaW1wbGVtZW50YXRpb24oXCIke0FORFJPSURfU0RLX0dST1VQfToke219OiR7QU5EUk9JRF9TREtfVkVSU0lPTn1cIilgKVxuICAgIC5qb2luKFwiXFxuXCIpICsgXCJcXG5cIjtcblxuICAvLyBQcmVzZW50IGJ1dCBjb21tZW50ZWQgb3V0IChvbGRlciBoYXJuZXNzIHNjYWZmb2xkcykgXHUyMDE0IHVuY29tbWVudC9yZXBsYWNlIHRob3NlIGxpbmVzXG4gIGlmICgvcGF0aC10ZXJtaW5hbC1zZGstYW5kcm9pZHx0ZWNoXFwucGF0aDJhaVxcLnNkay8udGVzdChjb250ZW50KSkge1xuICAgIGZvciAoY29uc3QgbSBvZiBBTkRST0lEX1NES19NT0RVTEVTKSB7XG4gICAgICBjb25zdCBjb21tZW50ZWQgPSBuZXcgUmVnRXhwKGBeXFxcXHMqLy9cXFxccyppbXBsZW1lbnRhdGlvblxcXFwoKD86XCJ8JykoPzpjb21cXFxcLmdpdGh1YlxcXFwua2V5bWFuMTJcXFxcLnBhdGgtdGVybWluYWwtc2RrLWFuZHJvaWR8dGVjaFxcXFwucGF0aDJhaVxcXFwuc2RrKToke219W15cIicpXSooPzpcInwnKVxcXFwpYCwgXCJnbVwiKTtcbiAgICAgIGNvbnRlbnQgPSBjb250ZW50LnJlcGxhY2UoY29tbWVudGVkLCBgICAgIGltcGxlbWVudGF0aW9uKFwiJHtBTkRST0lEX1NES19HUk9VUH06JHttfToke0FORFJPSURfU0RLX1ZFUlNJT059XCIpYCk7XG4gICAgfVxuICAgIC8vIElmIHBhdGgtcHNkay1hZGFwdGVyIHdhc24ndCBpbiB0aGUgb2xkIHNjYWZmb2xkLCBhZGQgdGhlIHdob2xlIGJsb2NrIG9uY2UuXG4gICAgaWYgKCEvdGVjaFxcLnBhdGgyYWlcXC5zZGs6cGF0aC1wc2RrLWFkYXB0ZXIvLnRlc3QoY29udGVudCkpIHtcbiAgICAgIGNvbnRlbnQgPSBjb250ZW50LnJlcGxhY2UoLyhkZXBlbmRlbmNpZXNcXHMqXFx7KS8sIGAkMVxcbiR7ZGVwc31gKTtcbiAgICB9XG4gICAgZnMud3JpdGVGaWxlU3luYyhidWlsZFBhdGgsIGNvbnRlbnQsIFwidXRmLThcIik7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cblxuICAvLyBOb3QgcHJlc2VudCBhdCBhbGwgXHUyMDE0IGluamVjdCBhZnRlciB0aGUgZGVwZW5kZW5jaWVzIHsgb3BlbmluZyBicmFjZVxuICBjb25zdCBkZXBzUmVnZXggPSAvKGRlcGVuZGVuY2llc1xccypcXHspLztcbiAgaWYgKCFkZXBzUmVnZXgudGVzdChjb250ZW50KSkgcmV0dXJuIGZhbHNlO1xuICBjb250ZW50ID0gY29udGVudC5yZXBsYWNlKGRlcHNSZWdleCwgYCQxXFxuJHtkZXBzfWApO1xuICBmcy53cml0ZUZpbGVTeW5jKGJ1aWxkUGF0aCwgY29udGVudCwgXCJ1dGYtOFwiKTtcbiAgcmV0dXJuIHRydWU7XG59XG5cbmZ1bmN0aW9uIGNoZWNrQW5kcm9pZE1hbmlmZXN0KGRpcjogc3RyaW5nKTogc3RyaW5nW10ge1xuICBjb25zdCBpc3N1ZXM6IHN0cmluZ1tdID0gW107XG4gIGZ1bmN0aW9uIGZpbmRNYW5pZmVzdHMoZDogc3RyaW5nLCBkZXB0aDogbnVtYmVyID0gMCkge1xuICAgIGlmIChkZXB0aCA+IDQpIHJldHVybjtcbiAgICBmb3IgKGNvbnN0IGUgb2YgZnMucmVhZGRpclN5bmMoZCkpIHtcbiAgICAgIGlmIChlLnN0YXJ0c1dpdGgoXCIuXCIpIHx8IGUgPT09IFwiYnVpbGRcIikgY29udGludWU7XG4gICAgICBjb25zdCBmdWxsID0gcGF0aC5qb2luKGQsIGUpO1xuICAgICAgY29uc3Qgc3RhdCA9IGZzLnN0YXRTeW5jKGZ1bGwpO1xuICAgICAgaWYgKHN0YXQuaXNEaXJlY3RvcnkoKSkgZmluZE1hbmlmZXN0cyhmdWxsLCBkZXB0aCArIDEpO1xuICAgICAgZWxzZSBpZiAoZSA9PT0gXCJBbmRyb2lkTWFuaWZlc3QueG1sXCIpIHtcbiAgICAgICAgY29uc3QgY29udGVudCA9IGZzLnJlYWRGaWxlU3luYyhmdWxsLCBcInV0Zi04XCIpO1xuICAgICAgICBpZiAoIWNvbnRlbnQuaW5jbHVkZXMoXCJCTFVFVE9PVEhfU0NBTlwiKSkgaXNzdWVzLnB1c2goZnVsbCk7XG4gICAgICB9XG4gICAgfVxuICB9XG4gIGZpbmRNYW5pZmVzdHMoZGlyKTtcbiAgcmV0dXJuIGlzc3Vlcztcbn1cblxuLy8gXHUyNTAwXHUyNTAwXHUyNTAwIFdpbmRvd3MgaGVscGVycyAoLk5FVCBcdTIwMTQgV2luVUkgMyAvIC5ORVQgMTAgYW5kIFdQRiAvIC5ORVQgRlcgNC44KSBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcblxuLy8gQ29sbGVjdCAuY3Nwcm9qIGZpbGUgcGF0aHMgaW4gY3dkIGFuZCBvbmUgbGV2ZWwgZGVlcC5cbmZ1bmN0aW9uIGZpbmRDc3Byb2pGaWxlcyhkaXI6IHN0cmluZyk6IHN0cmluZ1tdIHtcbiAgY29uc3QgZm91bmQ6IHN0cmluZ1tdID0gW107XG4gIGNvbnN0IHdhbGsgPSAoZDogc3RyaW5nLCBkZXB0aDogbnVtYmVyKSA9PiB7XG4gICAgaWYgKGRlcHRoID4gMSkgcmV0dXJuO1xuICAgIGxldCBlbnRyaWVzOiBzdHJpbmdbXSA9IFtdO1xuICAgIHRyeSB7IGVudHJpZXMgPSBmcy5yZWFkZGlyU3luYyhkKTsgfSBjYXRjaCB7IHJldHVybjsgfVxuICAgIGZvciAoY29uc3QgZSBvZiBlbnRyaWVzKSB7XG4gICAgICBpZiAoZS5zdGFydHNXaXRoKFwiLlwiKSB8fCBlID09PSBcImJpblwiIHx8IGUgPT09IFwib2JqXCIpIGNvbnRpbnVlO1xuICAgICAgY29uc3QgZnVsbCA9IHBhdGguam9pbihkLCBlKTtcbiAgICAgIHRyeSB7XG4gICAgICAgIGNvbnN0IHN0ID0gZnMuc3RhdFN5bmMoZnVsbCk7XG4gICAgICAgIGlmIChzdC5pc0RpcmVjdG9yeSgpKSB3YWxrKGZ1bGwsIGRlcHRoICsgMSk7XG4gICAgICAgIGVsc2UgaWYgKGUuZW5kc1dpdGgoXCIuY3Nwcm9qXCIpKSBmb3VuZC5wdXNoKGZ1bGwpO1xuICAgICAgfSBjYXRjaCB7IC8qIHNraXAgKi8gfVxuICAgIH1cbiAgfTtcbiAgd2FsayhkaXIsIDApO1xuICByZXR1cm4gZm91bmQ7XG59XG5cbi8vIEEgV2luZG93cyBwcm9qZWN0ID0gYSAuc2xuIG9yIGEgLmNzcHJvaiBpbiBjd2Qgb3Igb25lIGxldmVsIGRlZXAuXG5mdW5jdGlvbiBmaW5kV2luZG93c1Byb2plY3QoZGlyOiBzdHJpbmcpOiBib29sZWFuIHtcbiAgbGV0IGVudHJpZXM6IHN0cmluZ1tdID0gW107XG4gIHRyeSB7IGVudHJpZXMgPSBmcy5yZWFkZGlyU3luYyhkaXIpOyB9IGNhdGNoIHsgcmV0dXJuIGZhbHNlOyB9XG4gIGlmIChlbnRyaWVzLnNvbWUoKGUpID0+IGUuZW5kc1dpdGgoXCIuc2xuXCIpKSkgcmV0dXJuIHRydWU7XG4gIHJldHVybiBmaW5kQ3Nwcm9qRmlsZXMoZGlyKS5sZW5ndGggPiAwO1xufVxuXG4vLyBXaW4xMSA9IFdpblVJIDMgLyAuTkVUIDEwIChuZXQxMC4wLXdpbmRvd3MpOyBXaW4xMCA9IFdQRiAvIC5ORVQgRnJhbWV3b3JrIDQuOCAobmV0NDgpLlxuLy8gRGVmYXVsdCB0byBXaW5kb3dzIDExICh0aGUgbW9kZXJuIHN0YWNrKSB3aGVuIHRoZSBzaWduYWwgaXMgYW1iaWd1b3VzLlxuZnVuY3Rpb24gZGV0ZWN0V2luZG93c0ZsYXZvdXIoZGlyOiBzdHJpbmcpOiBcIndpbmRvd3MxMVwiIHwgXCJ3aW5kb3dzMTBcIiB7XG4gIGNvbnN0IGJsb2IgPSBmaW5kQ3Nwcm9qRmlsZXMoZGlyKS5tYXAoKGYpID0+IHtcbiAgICB0cnkgeyByZXR1cm4gZnMucmVhZEZpbGVTeW5jKGYsIFwidXRmLThcIik7IH0gY2F0Y2ggeyByZXR1cm4gXCJcIjsgfVxuICB9KS5qb2luKFwiXFxuXCIpLnRvTG93ZXJDYXNlKCk7XG4gIGlmIChibG9iLmluY2x1ZGVzKFwibmV0NDhcIikgfHwgYmxvYi5pbmNsdWRlcyhcIjx1c2V3cGY+dHJ1ZVwiKSB8fCBibG9iLmluY2x1ZGVzKFwidjQuOFwiKSkgcmV0dXJuIFwid2luZG93czEwXCI7XG4gIHJldHVybiBcIndpbmRvd3MxMVwiO1xufVxuXG5mdW5jdGlvbiBoYXNXaW5kb3dzU0RLRGVwZW5kZW5jeShkaXI6IHN0cmluZyk6IGJvb2xlYW4ge1xuICByZXR1cm4gZmluZENzcHJvakZpbGVzKGRpcikuc29tZSgoZikgPT4ge1xuICAgIHRyeSB7IHJldHVybiAvUGF0aFxcLlRlcm1pbmFsXFwuU2RrLy50ZXN0KGZzLnJlYWRGaWxlU3luYyhmLCBcInV0Zi04XCIpKTsgfSBjYXRjaCB7IHJldHVybiBmYWxzZTsgfVxuICB9KTtcbn1cblxuLy8gXHUyNTAwXHUyNTAwXHUyNTAwIFN1bW1hcnkgaGVscGVycyBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcblxuZnVuY3Rpb24gcGxhdGZvcm1MYWJlbChwbGF0Zm9ybTogUGxhdGZvcm0pOiBzdHJpbmcge1xuICBzd2l0Y2ggKHBsYXRmb3JtKSB7XG4gICAgY2FzZSBcImFuZHJvaWRcIjogcmV0dXJuIFwiQW5kcm9pZFwiO1xuICAgIGNhc2UgXCJ3aW5kb3dzMTFcIjogcmV0dXJuIFwiV2luZG93cyAxMSAoV2luVUkgMyAvIC5ORVQgMTApXCI7XG4gICAgY2FzZSBcIndpbmRvd3MxMFwiOiByZXR1cm4gXCJXaW5kb3dzIDEwIChXUEYgLyAuTkVUIEZXIDQuOClcIjtcbiAgICBkZWZhdWx0OiByZXR1cm4gXCJpT1NcIjtcbiAgfVxufVxuXG5mdW5jdGlvbiBwcmludFN1bW1hcnkoYWdlbnQ6IEFnZW50VHlwZSwgcGxhdGZvcm06IFBsYXRmb3JtLCBhY3Rpb25zOiBzdHJpbmdbXSwgd2FybmluZ3M6IHN0cmluZ1tdLCBtYW51YWxTdGVwczogc3RyaW5nW10pIHtcbiAgY29uc3QgaXNBbmRyb2lkID0gcGxhdGZvcm0gPT09IFwiYW5kcm9pZFwiO1xuICBjb25zdCBpc1dpbmRvd3MgPSBwbGF0Zm9ybSA9PT0gXCJ3aW5kb3dzMTFcIiB8fCBwbGF0Zm9ybSA9PT0gXCJ3aW5kb3dzMTBcIjtcbiAgY29uc29sZS5sb2coXCJcXG5cIiArIGNoYWxrLmJvbGQoXCJcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcIikpO1xuICBjb25zb2xlLmxvZyhjaGFsay5ib2xkKGAgIFBhdGggVGVybWluYWwgU0RLIFx1MjAxNCBTZXR1cCBDb21wbGV0ZSAoJHtwbGF0Zm9ybUxhYmVsKHBsYXRmb3JtKX0pYCkpO1xuICBjb25zb2xlLmxvZyhjaGFsay5ib2xkKFwiXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXFxuXCIpKTtcblxuICBpZiAoYWN0aW9ucy5sZW5ndGggPiAwKSB7XG4gICAgY29uc29sZS5sb2coY2hhbGsuZ3JlZW4oXCJcdTI3MTMgRG9uZTpcIikpO1xuICAgIGFjdGlvbnMuZm9yRWFjaCgoYSkgPT4gY29uc29sZS5sb2coY2hhbGsuZ3JlZW4oYCAgXHUyMDIyICR7YX1gKSkpO1xuICAgIGNvbnNvbGUubG9nKCk7XG4gIH1cblxuICBpZiAobWFudWFsU3RlcHMubGVuZ3RoID4gMCkge1xuICAgIGNvbnNvbGUubG9nKGNoYWxrLnllbGxvdyhcIlx1MjZBMCBNYW51YWwgc3RlcHMgcmVxdWlyZWQ6XCIpKTtcbiAgICBtYW51YWxTdGVwcy5mb3JFYWNoKChzLCBpKSA9PiBjb25zb2xlLmxvZyhjaGFsay55ZWxsb3coYCAgJHtpICsgMX0uICR7c31gKSkpO1xuICAgIGNvbnNvbGUubG9nKCk7XG4gIH1cblxuICBpZiAod2FybmluZ3MubGVuZ3RoID4gMCkge1xuICAgIGNvbnNvbGUubG9nKGNoYWxrLmRpbShcIlx1MjEzOSBOb3RlczpcIikpO1xuICAgIHdhcm5pbmdzLmZvckVhY2goKHcpID0+IGNvbnNvbGUubG9nKGNoYWxrLmRpbShgICBcdTIwMjIgJHt3fWApKSk7XG4gICAgY29uc29sZS5sb2coKTtcbiAgfVxuXG4gIC8vIENhbm9uaWNhbCBmaXJzdC1wcm9tcHQgdGV4dCBcdTIwMTQgaWRlbnRpY2FsIGZvciBDbGF1ZGUgQ29kZSBhbmQgQ3Vyc29yIHNvIHRoZVxuICAvLyBhZ2VudCByZWNlaXZlcyB0aGUgc2FtZSBkaXJlY3RpdmUgcmVnYXJkbGVzcyBvZiB0aGUgZGV2ZWxvcGVyJ3MgSURFLlxuICBjb25zdCBtY3BQcm9tcHQgPVxuICAgIHBsYXRmb3JtID09PSBcImFuZHJvaWRcIiA/IFwiaW50ZWdyYXRlLXBhdGgtYW5kcm9pZFwiIDpcbiAgICBwbGF0Zm9ybSA9PT0gXCJ3aW5kb3dzMTFcIiA/IFwiaW50ZWdyYXRlLXBhdGgtd2luZG93czExXCIgOlxuICAgIHBsYXRmb3JtID09PSBcIndpbmRvd3MxMFwiID8gXCJpbnRlZ3JhdGUtcGF0aC13aW5kb3dzMTBcIiA6XG4gICAgXCJpbnRlZ3JhdGUtcGF0aC1zYWxlXCI7XG4gIGNvbnN0IGZpcnN0UHJvbXB0ID1cbiAgICAnICBcIkludGVncmF0ZSB0aGUgUGF0aCBUZXJtaW5hbCBTREsgaW50byB0aGlzIEVQT1MgYXBwLiBSZWFkIENMQVVERS5tZFxcbicgK1xuICAgICcgICBmb3IgdGhlIGludGVncmF0aW9uIHJ1bGVzLCB0aGVuIHVzZSB0aGUgUGF0aCBNQ1AgJyArIG1jcFByb21wdCArICdcXG4nICtcbiAgICAnICAgcHJvbXB0IHRvIGFkZCBhIFBhdGggUE9TIEFkYXB0ZXIgaW4gU2V0dGluZ3MgXHUyMDE0IGEgYmFja2VuZCBzd2l0Y2hlciBmb3IgdGhlXFxuJyArXG4gICAgJyAgIFBhdGggUE9TIEVtdWxhdG9yIChXaS1GaS9JUCBvciBCbHVldG9vdGgpIGFuZCBhIHJlYWwgVmVyaWZvbmUgdGVybWluYWwuXCInO1xuXG4gIGlmIChhZ2VudCA9PT0gXCJjbGF1ZGVcIikge1xuICAgIGNvbnNvbGUubG9nKGNoYWxrLmJvbGQoXCJcdUQ4M0RcdURFODAgU3RhcnQgQ2xhdWRlIENvZGUgaW4gdGhpcyBkaXJlY3Rvcnk6XCIpKTtcbiAgICBjb25zb2xlLmxvZyhjaGFsay5jeWFuKFwiICBjbGF1ZGUgLS1tb2RlbCBzb25uZXRcIikpO1xuICAgIGNvbnNvbGUubG9nKCk7XG4gICAgY29uc29sZS5sb2coY2hhbGsuYm9sZChcIiAgVGhlbiBwYXN0ZSB0aGlzIHByb21wdDpcIikpO1xuICAgIGNvbnNvbGUubG9nKGNoYWxrLmN5YW4oZmlyc3RQcm9tcHQpKTtcbiAgfSBlbHNlIHtcbiAgICBjb25zb2xlLmxvZyhjaGFsay5ib2xkKFwiXHVEODNEXHVERTgwIFlvdXIgZmlyc3QgcHJvbXB0IGluIEN1cnNvcjpcIikpO1xuICAgIGNvbnNvbGUubG9nKGNoYWxrLmN5YW4oZmlyc3RQcm9tcHQpKTtcbiAgfVxuXG4gIGNvbnNvbGUubG9nKCk7XG4gIGNvbnNvbGUubG9nKGNoYWxrLmRpbShgICBNQ1Agc2VydmVyOiAke01DUF9TRVJWRVJfVVJMfWApKTtcbiAgY29uc29sZS5sb2coY2hhbGsuZGltKFwiICBEb2NzOiAgICAgICBodHRwczovL21jcC5wYXRoMmFpLnRlY2gvaGVhbHRoXCIpKTtcbiAgY29uc29sZS5sb2coKTtcbn1cblxuLy8gXHUyNTAwXHUyNTAwXHUyNTAwIE1haW4gXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXG5cbnByb2dyYW1cbiAgLm5hbWUoXCJwYXRoLXRlcm1pbmFsLWluaXRcIilcbiAgLmRlc2NyaXB0aW9uKFxuICAgIFwiU2V0IHVwIHRoZSBQYXRoIFRlcm1pbmFsIFNESyBpbnRlZ3JhdGlvbiBhc3Npc3RhbnQgZm9yIHlvdXIgRVBPUyBwcm9qZWN0LlxcblwiICtcbiAgICAgIFwiQXV0by1kZXRlY3RzIHBsYXRmb3JtIChpT1MsIEFuZHJvaWQsIG9yIFdpbmRvd3MpIGZyb20gdGhlIGN1cnJlbnQgZGlyZWN0b3J5LlxcblwiICtcbiAgICAgIFwiQ29uZmlndXJlcyBNQ1Agc2VydmVyIGFjY2VzcywgZHJvcHMgdGhlIGludGVncmF0aW9uIHJlY2lwZSwgYW5kIG9wdGlvbmFsbHlcXG5cIiArXG4gICAgICBcImFkZHMgdGhlIFNESyBkZXBlbmRlbmN5LlxcblxcblwiICtcbiAgICAgIFwiU3VwcG9ydGVkIGFnZW50czogY2xhdWRlIChkZWZhdWx0KSwgY3Vyc29yXFxuXCIgK1xuICAgICAgXCJTdXBwb3J0ZWQgcGxhdGZvcm1zOiBpb3MgKGRlZmF1bHQpLCBhbmRyb2lkLCB3aW5kb3dzMTEgKFdpblVJIDMgLyAuTkVUIDEwKSxcXG5cIiArXG4gICAgICBcIndpbmRvd3MxMCAoV1BGIC8gLk5FVCBGVyA0LjgpLiBVc2UgJ3dpbmRvd3MnIHRvIGF1dG8tcGljayB0aGUgV2luZG93cyBmbGF2b3VyLlwiXG4gIClcbiAgLnZlcnNpb24oXCIwLjIuMFwiKVxuICAub3B0aW9uKFwiLS10b29scy1vbmx5XCIsIFwiT25seSBjb25maWd1cmUgTUNQICsgcnVsZXMuIFNraXAgU0RLIGluc3RhbGxhdGlvbi5cIilcbiAgLm9wdGlvbihcIi0tYWdlbnQgPG5hbWU+XCIsIFwiQUkgYWdlbnQgdG8gY29uZmlndXJlOiAnY2xhdWRlJyAoZGVmYXVsdCkgb3IgJ2N1cnNvcicuXCIsIFwiY2xhdWRlXCIpXG4gIC5vcHRpb24oXCItLXBsYXRmb3JtIDxuYW1lPlwiLCBcIlBsYXRmb3JtOiBpb3MgfCBhbmRyb2lkIHwgd2luZG93cyB8IHdpbmRvd3MxMSB8IHdpbmRvd3MxMC4gQXV0by1kZXRlY3RlZCBpZiBub3Qgc3BlY2lmaWVkLlwiKVxuICAuYWN0aW9uKGFzeW5jIChvcHRpb25zKSA9PiB7XG4gICAgY29uc3QgdG9vbHNPbmx5OiBib29sZWFuID0gb3B0aW9ucy50b29sc09ubHkgPz8gZmFsc2U7XG4gICAgY29uc3QgYWdlbnQ6IEFnZW50VHlwZSA9IChvcHRpb25zLmFnZW50ID8/IFwiY2xhdWRlXCIpIGFzIEFnZW50VHlwZTtcbiAgICBjb25zdCBjd2QgPSBwcm9jZXNzLmN3ZCgpO1xuXG4gICAgLy8gQXV0by1kZXRlY3QgcGxhdGZvcm0uIE9yZGVyOiBBbmRyb2lkIChHcmFkbGUpIFx1MjE5MiBXaW5kb3dzICguY3Nwcm9qLy5zbG4pIFx1MjE5MiBpT1MgKGRlZmF1bHQpLlxuICAgIGNvbnN0IHJhd1BsYXRmb3JtOiBzdHJpbmcgPSBvcHRpb25zLnBsYXRmb3JtID8/IFwiYXV0b1wiO1xuICAgIGNvbnN0IFZBTElEX1BMQVRGT1JNUyA9IFtcImlvc1wiLCBcImFuZHJvaWRcIiwgXCJ3aW5kb3dzXCIsIFwid2luZG93czExXCIsIFwid2luZG93czEwXCJdO1xuICAgIGxldCBwbGF0Zm9ybTogUGxhdGZvcm07XG4gICAgaWYgKHJhd1BsYXRmb3JtID09PSBcImF1dG9cIiB8fCAhVkFMSURfUExBVEZPUk1TLmluY2x1ZGVzKHJhd1BsYXRmb3JtKSkge1xuICAgICAgaWYgKGZpbmRBbmRyb2lkUHJvamVjdChjd2QpKSBwbGF0Zm9ybSA9IFwiYW5kcm9pZFwiO1xuICAgICAgZWxzZSBpZiAoZmluZFdpbmRvd3NQcm9qZWN0KGN3ZCkpIHBsYXRmb3JtID0gZGV0ZWN0V2luZG93c0ZsYXZvdXIoY3dkKTtcbiAgICAgIGVsc2UgcGxhdGZvcm0gPSBcImlvc1wiO1xuICAgIH0gZWxzZSBpZiAocmF3UGxhdGZvcm0gPT09IFwid2luZG93c1wiKSB7XG4gICAgICAvLyBFeHBsaWNpdCBXaW5kb3dzLCBidXQgbGV0IHRoZSAuY3Nwcm9qIGRlY2lkZSBXaW4xMSAoV2luVUkgMykgdnMgV2luMTAgKFdQRikuXG4gICAgICBwbGF0Zm9ybSA9IGRldGVjdFdpbmRvd3NGbGF2b3VyKGN3ZCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHBsYXRmb3JtID0gcmF3UGxhdGZvcm0gYXMgUGxhdGZvcm07XG4gICAgfVxuICAgIGNvbnN0IGlzQW5kcm9pZCA9IHBsYXRmb3JtID09PSBcImFuZHJvaWRcIjtcbiAgICBjb25zdCBpc1dpbmRvd3MgPSBwbGF0Zm9ybSA9PT0gXCJ3aW5kb3dzMTFcIiB8fCBwbGF0Zm9ybSA9PT0gXCJ3aW5kb3dzMTBcIjtcblxuICAgIGNvbnNvbGUubG9nKCk7XG4gICAgY29uc29sZS5sb2coY2hhbGsuYm9sZChcIiAgUGF0aCBUZXJtaW5hbCBTREsgXHUyMDE0IEludGVncmF0aW9uIEFzc2lzdGFudCBTZXR1cFwiKSk7XG4gICAgY29uc29sZS5sb2coY2hhbGsuZGltKFwiICBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcIikpO1xuICAgIGNvbnNvbGUubG9nKGNoYWxrLmRpbShgICBBZ2VudDogICAgJHthZ2VudH1gKSk7XG4gICAgY29uc29sZS5sb2coY2hhbGsuZGltKGAgIFBsYXRmb3JtOiAke3BsYXRmb3JtfSR7b3B0aW9ucy5wbGF0Zm9ybSA/IFwiXCIgOiBcIiAoYXV0by1kZXRlY3RlZClcIn1gKSk7XG4gICAgY29uc29sZS5sb2coKTtcblxuICAgIGlmIChhZ2VudCAhPT0gXCJjdXJzb3JcIiAmJiBhZ2VudCAhPT0gXCJjbGF1ZGVcIikge1xuICAgICAgY29uc29sZS5sb2coXG4gICAgICAgIGNoYWxrLnllbGxvdyhcbiAgICAgICAgICBgXHUyNkEwIEFnZW50ICcke2FnZW50fScgaXMgbm90IHN1cHBvcnRlZC4gVXNlICdjdXJzb3InIG9yICdjbGF1ZGUnLmBcbiAgICAgICAgKVxuICAgICAgKTtcbiAgICAgIHByb2Nlc3MuZXhpdCgxKTtcbiAgICB9XG5cbiAgICBjb25zdCBhY3Rpb25zOiBzdHJpbmdbXSA9IFtdO1xuICAgIGNvbnN0IHdhcm5pbmdzOiBzdHJpbmdbXSA9IFtdO1xuICAgIGNvbnN0IG1hbnVhbFN0ZXBzOiBzdHJpbmdbXSA9IFtdO1xuXG4gICAgLy8gXHUyNTAwXHUyNTAwIDEuIFNESyBpbnN0YWxsYXRpb24gXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXG4gICAgaWYgKCF0b29sc09ubHkpIHtcbiAgICAgIGlmIChpc0FuZHJvaWQpIHtcbiAgICAgICAgLy8gXHUyNTAwXHUyNTAwIEFuZHJvaWQ6IEppdFBhY2sgKyBHcmFkbGUgXHUyNTAwXHUyNTAwXG4gICAgICAgIGNvbnN0IHNwaW5uZXIgPSBvcmEoXCJDaGVja2luZyBBbmRyb2lkIHByb2plY3RcdTIwMjZcIikuc3RhcnQoKTtcblxuICAgICAgICBpZiAoIWZpbmRBbmRyb2lkUHJvamVjdChjd2QpKSB7XG4gICAgICAgICAgc3Bpbm5lci53YXJuKFwiTm8gQW5kcm9pZCBwcm9qZWN0IGZvdW5kIChzZXR0aW5ncy5ncmFkbGUua3RzIG9yIGFwcC9idWlsZC5ncmFkbGUua3RzIG1pc3NpbmcpLlwiKTtcbiAgICAgICAgICBjb25zdCBhbnN3ZXIgPSBhd2FpdCBhc2soXG4gICAgICAgICAgICBjaGFsay55ZWxsb3coXCIgIENvbnRpbnVlIHdpdGggdG9vbHMtb25seSBzZXR1cD8gKHkvbik6IFwiKVxuICAgICAgICAgICk7XG4gICAgICAgICAgaWYgKGFuc3dlci50b0xvd2VyQ2FzZSgpICE9PSBcInlcIikge1xuICAgICAgICAgICAgY29uc29sZS5sb2coY2hhbGsuZGltKFwiXFxuICBSdW4gdGhpcyBmcm9tIHlvdXIgQW5kcm9pZCBwcm9qZWN0IHJvb3QgZGlyZWN0b3J5LlxcblwiKSk7XG4gICAgICAgICAgICBwcm9jZXNzLmV4aXQoMCk7XG4gICAgICAgICAgfVxuICAgICAgICAgIHdhcm5pbmdzLnB1c2goXCJSYW4gaW4gdG9vbHMtb25seSBtb2RlIFx1MjAxNCBubyBBbmRyb2lkIHByb2plY3QgZm91bmQuXCIpO1xuICAgICAgICB9IGVsc2UgaWYgKGhhc0FuZHJvaWRTREtEZXBlbmRlbmN5KGN3ZCkpIHtcbiAgICAgICAgICBzcGlubmVyLnN1Y2NlZWQoXCJQYXRoIFRlcm1pbmFsIFNESyBhbHJlYWR5IHByZXNlbnQgaW4gc2V0dGluZ3MuZ3JhZGxlLmt0cy5cIik7XG4gICAgICAgICAgYWN0aW9ucy5wdXNoKFwiU0RLIGRlcGVuZGVuY3kgYWxyZWFkeSBwcmVzZW50IFx1MjAxNCBubyBjaGFuZ2UgbmVlZGVkLlwiKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBzcGlubmVyLnRleHQgPSBcIkFkZGluZyB0aGUgUGF0aCBNYXZlbiByZXBvc2l0b3J5IHRvIHNldHRpbmdzLmdyYWRsZS5rdHNcdTIwMjZcIjtcbiAgICAgICAgICBjb25zdCBzZXR0aW5nc09rID0gaW5qZWN0UGF0aE1hdmVuUmVwbyhjd2QpO1xuICAgICAgICAgIGNvbnN0IGRlcHNPayA9IGluamVjdEdyYWRsZURlcGVuZGVuY2llcyhjd2QpO1xuXG4gICAgICAgICAgaWYgKHNldHRpbmdzT2spIHtcbiAgICAgICAgICAgIHNwaW5uZXIuc3VjY2VlZChcIlBhdGggTWF2ZW4gcmVwb3NpdG9yeSBhZGRlZCB0byBzZXR0aW5ncy5ncmFkbGUua3RzLlwiKTtcbiAgICAgICAgICAgIGFjdGlvbnMucHVzaChgUGF0aCBNYXZlbiByZXBvIGFkZGVkIHRvIHNldHRpbmdzLmdyYWRsZS5rdHMgKCR7UEFUSF9NQVZFTl9VUkx9KWApO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBtYW51YWxTdGVwcy5wdXNoKFxuICAgICAgICAgICAgICBgQWRkIHRoZSBQYXRoIE1hdmVuIHJlcG8gdG8gc2V0dGluZ3MuZ3JhZGxlLmt0cyAoZGVwZW5kZW5jeVJlc29sdXRpb25NYW5hZ2VtZW50IHsgcmVwb3NpdG9yaWVzIHsgXHUyMDI2IH0gfSk6XFxuYCArXG4gICAgICAgICAgICAgIGAgICAgIG1hdmVuIHsgdXJsID0gdXJpKFwiJHtQQVRIX01BVkVOX1VSTH1cIikgfWBcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgfVxuICAgICAgICAgIGlmIChkZXBzT2spIHtcbiAgICAgICAgICAgIHNwaW5uZXIuc3VjY2VlZChcIlNESyBkZXBlbmRlbmNpZXMgYWRkZWQgdG8gYXBwL2J1aWxkLmdyYWRsZS5rdHMgKGluY2wuIFZlcmlmb25lKS5cIik7XG4gICAgICAgICAgICBhY3Rpb25zLnB1c2goYFNESyBkZXBzIGFkZGVkIHRvIGFwcC9idWlsZC5ncmFkbGUua3RzOiAke0FORFJPSURfU0RLX01PRFVMRVMuam9pbihcIiwgXCIpfWApO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBzcGlubmVyLndhcm4oXCJDb3VsZCBub3QgYXV0by1pbmplY3QgZGVwZW5kZW5jaWVzIGludG8gYXBwL2J1aWxkLmdyYWRsZS5rdHMuXCIpO1xuICAgICAgICAgICAgbWFudWFsU3RlcHMucHVzaChcbiAgICAgICAgICAgICAgYEFkZCB0byBhcHAvYnVpbGQuZ3JhZGxlLmt0cyBkZXBlbmRlbmNpZXMge306XFxuYCArXG4gICAgICAgICAgICAgIEFORFJPSURfU0RLX01PRFVMRVMubWFwKChtKSA9PiBgICAgICBpbXBsZW1lbnRhdGlvbihcIiR7QU5EUk9JRF9TREtfR1JPVVB9OiR7bX06JHtBTkRST0lEX1NES19WRVJTSU9OfVwiKWApLmpvaW4oXCJcXG5cIilcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9IGVsc2UgaWYgKGlzV2luZG93cykge1xuICAgICAgICAvLyBcdTI1MDBcdTI1MDAgV2luZG93czogUHJvamVjdFJlZmVyZW5jZSB0byB0aGUgc2libGluZyBTREsgXHUyNTAwXHUyNTAwXG4gICAgICAgIGNvbnN0IHNwaW5uZXIgPSBvcmEoXCJDaGVja2luZyBXaW5kb3dzICguTkVUKSBwcm9qZWN0XHUyMDI2XCIpLnN0YXJ0KCk7XG4gICAgICAgIGlmICghZmluZFdpbmRvd3NQcm9qZWN0KGN3ZCkpIHtcbiAgICAgICAgICBzcGlubmVyLndhcm4oXCJObyBXaW5kb3dzIHByb2plY3QgZm91bmQgKC5zbG4gb3IgLmNzcHJvaikuXCIpO1xuICAgICAgICAgIGNvbnN0IGFuc3dlciA9IGF3YWl0IGFzayhjaGFsay55ZWxsb3coXCIgIENvbnRpbnVlIHdpdGggdG9vbHMtb25seSBzZXR1cD8gKHkvbik6IFwiKSk7XG4gICAgICAgICAgaWYgKGFuc3dlci50b0xvd2VyQ2FzZSgpICE9PSBcInlcIikge1xuICAgICAgICAgICAgY29uc29sZS5sb2coY2hhbGsuZGltKFwiXFxuICBSdW4gdGhpcyBmcm9tIHlvdXIgV2luZG93cyBFUE9TIHByb2plY3Qgcm9vdC5cXG5cIikpO1xuICAgICAgICAgICAgcHJvY2Vzcy5leGl0KDApO1xuICAgICAgICAgIH1cbiAgICAgICAgICB3YXJuaW5ncy5wdXNoKFwiUmFuIGluIHRvb2xzLW9ubHkgbW9kZSBcdTIwMTQgbm8gV2luZG93cyBwcm9qZWN0IGZvdW5kLlwiKTtcbiAgICAgICAgfSBlbHNlIGlmIChoYXNXaW5kb3dzU0RLRGVwZW5kZW5jeShjd2QpKSB7XG4gICAgICAgICAgc3Bpbm5lci5zdWNjZWVkKFwiUGF0aCBUZXJtaW5hbCBTREsgYWxyZWFkeSByZWZlcmVuY2VkIGluIHRoZSBwcm9qZWN0LlwiKTtcbiAgICAgICAgICBhY3Rpb25zLnB1c2goXCJTREsgUHJvamVjdFJlZmVyZW5jZSBhbHJlYWR5IHByZXNlbnQgXHUyMDE0IG5vIGNoYW5nZSBuZWVkZWQuXCIpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHNwaW5uZXIuaW5mbyhcIlBhdGggU0RLIGlzIHdpcmVkIGJ5IFByb2plY3RSZWZlcmVuY2UgXHUyMDE0IHRoZSBpbnRlZ3JhdGlvbiByZWNpcGUgKFN0ZXAgMCkgZG9lcyB0aGlzLlwiKTtcbiAgICAgICAgICBtYW51YWxTdGVwcy5wdXNoKFxuICAgICAgICAgICAgYEFkZCB0aGUgUGF0aCBTREsgUHJvamVjdFJlZmVyZW5jZXMgdG8geW91ciAuY3Nwcm9qIFx1MjAxNCB0aGUgaW50ZWdyYXRpb24gcmVjaXBlJ3MgU3RlcCAwIGxpc3RzIGFsbCBzaXggYCArXG4gICAgICAgICAgICBgKENvcmVNb2RlbHMsIFNkaywgRW11bGF0b3JBZGFwdGVyLCBNb2NrQWRhcHRlciwgRGlhZ25vc3RpY3MsIFBzZGtBZGFwdGVyKS4gYCArXG4gICAgICAgICAgICBgQ2xvbmUgJHtXSU5ET1dTX1NES19SRVBPfSBhcyBhIFNJQkxJTkcgZm9sZGVyIG9mIHRoaXMgcHJvamVjdCBmaXJzdC5gXG4gICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgLy8gXHUyNTAwXHUyNTAwIGlPUzogU1BNIC8gWGNvZGUgXHUyNTAwXHUyNTAwXG4gICAgICAgIGNvbnN0IHNwaW5uZXIgPSBvcmEoXCJDaGVja2luZyBmb3IgWGNvZGUgcHJvamVjdFx1MjAyNlwiKS5zdGFydCgpO1xuXG4gICAgICAgIGNvbnN0IHhjb2RlUHJvamVjdCA9IGZpbmRYY29kZVByb2plY3QoY3dkKTtcbiAgICAgICAgY29uc3QgcGFja2FnZVN3aWZ0ID0gZmluZFBhY2thZ2VTd2lmdChjd2QpO1xuXG4gICAgICAgIGlmIChwYWNrYWdlU3dpZnQpIHtcbiAgICAgICAgICBzcGlubmVyLnRleHQgPSBcIkZvdW5kIFBhY2thZ2Uuc3dpZnQgXHUyMDE0IGFkZGluZyBQYXRoVGVybWluYWxTREsgZGVwZW5kZW5jeVx1MjAyNlwiO1xuICAgICAgICAgIGlmIChoYXNTREtEZXBlbmRlbmN5KHBhY2thZ2VTd2lmdCkpIHtcbiAgICAgICAgICAgIHNwaW5uZXIuc3VjY2VlZChcIlBhdGhUZXJtaW5hbFNESyBhbHJlYWR5IHByZXNlbnQgaW4gUGFja2FnZS5zd2lmdC5cIik7XG4gICAgICAgICAgICBhY3Rpb25zLnB1c2goXCJQYXRoVGVybWluYWxTREsgZGVwZW5kZW5jeSBhbHJlYWR5IHByZXNlbnQgXHUyMDE0IG5vIGNoYW5nZSBuZWVkZWQuXCIpO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBjb25zdCBpbmplY3RlZCA9IGluamVjdFNQTURlcGVuZGVuY3kocGFja2FnZVN3aWZ0KTtcbiAgICAgICAgICAgIGlmIChpbmplY3RlZCkge1xuICAgICAgICAgICAgICBzcGlubmVyLnN1Y2NlZWQoXCJQYXRoVGVybWluYWxTREsgYWRkZWQgdG8gUGFja2FnZS5zd2lmdC5cIik7XG4gICAgICAgICAgICAgIGFjdGlvbnMucHVzaChcIlBhdGhUZXJtaW5hbFNESyBhZGRlZCB0byBQYWNrYWdlLnN3aWZ0XCIpO1xuICAgICAgICAgICAgICBtYW51YWxTdGVwcy5wdXNoKFxuICAgICAgICAgICAgICAgIGBPcGVuIFhjb2RlIGFuZCBsaW5rIGFsbCBmb3VyIHRhcmdldHMgdG8geW91ciBhcHA6IFBhdGhUZXJtaW5hbFNESywgUGF0aEVtdWxhdG9yQWRhcHRlciwgUGF0aENvcmVNb2RlbHMsIFBhdGhWZXJpZm9uZVBTREtBZGFwdGVyLmBcbiAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIHNwaW5uZXIud2FybihcIkNvdWxkIG5vdCBhdXRvbWF0aWNhbGx5IG1vZGlmeSBQYWNrYWdlLnN3aWZ0IFx1MjAxNCBtYW51YWwgc3RlcCByZXF1aXJlZC5cIik7XG4gICAgICAgICAgICAgIG1hbnVhbFN0ZXBzLnB1c2goXG4gICAgICAgICAgICAgICAgYEFkZCBQYXRoVGVybWluYWxTREsgbWFudWFsbHkgdG8gUGFja2FnZS5zd2lmdDpcXG5gICtcbiAgICAgICAgICAgICAgICAgIGAgICAgIC5wYWNrYWdlKHVybDogXCIke1NES19HSVRIVUJfVVJMfVwiLCBmcm9tOiBcIiR7U0RLX1ZFUlNJT059XCIpYFxuICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIGlmICh4Y29kZVByb2plY3QpIHtcbiAgICAgICAgICBzcGlubmVyLnN1Y2NlZWQoYEZvdW5kIFhjb2RlIHByb2plY3Q6ICR7cGF0aC5iYXNlbmFtZSh4Y29kZVByb2plY3QpfWApO1xuICAgICAgICAgIGlmIChoYXNYY29kZVByb2plY3RTREtEZXBlbmRlbmN5KHhjb2RlUHJvamVjdCkpIHtcbiAgICAgICAgICAgIHNwaW5uZXIuc3VjY2VlZChcIlBhdGhUZXJtaW5hbFNESyBhbHJlYWR5IHByZXNlbnQgaW4gWGNvZGUgcHJvamVjdC5cIik7XG4gICAgICAgICAgICBhY3Rpb25zLnB1c2goXCJQYXRoVGVybWluYWxTREsgZGVwZW5kZW5jeSBhbHJlYWR5IHByZXNlbnQgXHUyMDE0IG5vIGNoYW5nZSBuZWVkZWQuXCIpO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBjb25zb2xlLmxvZyhcbiAgICAgICAgICAgICAgY2hhbGsueWVsbG93KFxuICAgICAgICAgICAgICAgIFwiXFxuICBcdTI2QTAgQXV0b21hdGljIFNQTSBpbmplY3Rpb24gaW50byAueGNvZGVwcm9qIGlzIG5vdCBzdXBwb3J0ZWQgKFhjb2RlIG1hbmFnZXMgdGhpcykuXCJcbiAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIGNvbnNvbGUubG9nKGNoYWxrLmJvbGQoXCJcXG4gIFRvIGFkZCBQYXRoVGVybWluYWxTREsgaW4gWGNvZGU6XCIpKTtcbiAgICAgICAgICAgIGNvbnNvbGUubG9nKFwiICAxLiBPcGVuIHlvdXIgcHJvamVjdCBpbiBYY29kZVwiKTtcbiAgICAgICAgICAgIGNvbnNvbGUubG9nKFwiICAyLiBGaWxlIFx1MjE5MiBBZGQgUGFja2FnZSBEZXBlbmRlbmNpZXNcdTIwMjZcIik7XG4gICAgICAgICAgICBjb25zb2xlLmxvZyhgICAzLiBFbnRlciBVUkw6ICR7Y2hhbGsuY3lhbihTREtfR0lUSFVCX1VSTCl9YCk7XG4gICAgICAgICAgICBjb25zb2xlLmxvZyhcbiAgICAgICAgICAgICAgXCIgIDQuIEluIHRoZSAnQ2hvb3NlIFBhY2thZ2UgUHJvZHVjdHMnIGRpYWxvZywgc2V0IGFsbCBmb3VyIHRvIHlvdXIgYXBwIHRhcmdldDpcIlxuICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIGNvbnNvbGUubG9nKGNoYWxrLmN5YW4oXCIgICAgICAgUGF0aFRlcm1pbmFsU0RLICAgICAgICBcdTIxOTIgeW91ciBhcHAgdGFyZ2V0XCIpKTtcbiAgICAgICAgICAgIGNvbnNvbGUubG9nKGNoYWxrLmN5YW4oXCIgICAgICAgUGF0aEVtdWxhdG9yQWRhcHRlciAgICBcdTIxOTIgeW91ciBhcHAgdGFyZ2V0XCIpKTtcbiAgICAgICAgICAgIGNvbnNvbGUubG9nKGNoYWxrLmN5YW4oXCIgICAgICAgUGF0aENvcmVNb2RlbHMgICAgICAgICBcdTIxOTIgeW91ciBhcHAgdGFyZ2V0XCIpKTtcbiAgICAgICAgICAgIGNvbnNvbGUubG9nKGNoYWxrLmN5YW4oXCIgICAgICAgUGF0aFZlcmlmb25lUFNES0FkYXB0ZXIgXHUyMTkyIHlvdXIgYXBwIHRhcmdldFwiKSk7XG4gICAgICAgICAgICBjb25zb2xlLmxvZyhjaGFsay5kaW0oXCIgICAgIChQYXRoVmVyaWZvbmVQU0RLQWRhcHRlciBpcyByZXF1aXJlZCBmb3IgdGhlIFZlcmlmb25lIGJhY2tlbmQ7IFBhdGhEaWFnbm9zdGljcyBjYW4gYmUgbGVmdCBhcyBOb25lKVwiKSk7XG4gICAgICAgICAgICBjb25zb2xlLmxvZyhcIiAgNS4gQ2xpY2sgQWRkIFBhY2thZ2VcXG5cIik7XG4gICAgICAgICAgICBjb25zdCBjb25maXJtZWQgPSBhd2FpdCBhc2soXG4gICAgICAgICAgICAgIGNoYWxrLmJvbGQoXCIgIFByZXNzIEVudGVyIG9uY2UgeW91IGhhdmUgYWRkZWQgdGhlIHBhY2thZ2UsIG9yIHR5cGUgJ3NraXAnIHRvIGRvIHRoaXMgbGF0ZXI6IFwiKVxuICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIGlmIChjb25maXJtZWQudG9Mb3dlckNhc2UoKSAhPT0gXCJza2lwXCIpIHtcbiAgICAgICAgICAgICAgYWN0aW9ucy5wdXNoKGBQYXRoVGVybWluYWxTREsgYWRkZWQgdG8gWGNvZGUgcHJvamVjdCAoY29uZmlybWVkIGJ5IHVzZXIpYCk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICBtYW51YWxTdGVwcy5wdXNoKFxuICAgICAgICAgICAgICAgIGBBZGQgUGF0aFRlcm1pbmFsU0RLIHZpYSBYY29kZTogRmlsZSBcdTIxOTIgQWRkIFBhY2thZ2UgRGVwZW5kZW5jaWVzIFx1MjE5MiAke1NES19HSVRIVUJfVVJMfWBcbiAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgc3Bpbm5lci53YXJuKFwiTm8gWGNvZGUgcHJvamVjdCBmb3VuZCBpbiBjdXJyZW50IGRpcmVjdG9yeS5cIik7XG4gICAgICAgICAgY29uc3QgYW5zd2VyID0gYXdhaXQgYXNrKFxuICAgICAgICAgICAgY2hhbGsueWVsbG93KFxuICAgICAgICAgICAgICBcIiAgTm8gLnhjb2RlcHJvaiBvciBQYWNrYWdlLnN3aWZ0IGZvdW5kLiBDb250aW51ZSB3aXRoIHRvb2xzLW9ubHkgc2V0dXA/ICh5L24pOiBcIlxuICAgICAgICAgICAgKVxuICAgICAgICAgICk7XG4gICAgICAgICAgaWYgKGFuc3dlci50b0xvd2VyQ2FzZSgpICE9PSBcInlcIikge1xuICAgICAgICAgICAgY29uc29sZS5sb2coXG4gICAgICAgICAgICAgIGNoYWxrLmRpbShcIlxcbiAgUnVuIHRoaXMgY29tbWFuZCBmcm9tIHlvdXIgWGNvZGUgcHJvamVjdCBkaXJlY3RvcnksIG9yIHVzZSAtLXRvb2xzLW9ubHkuXFxuXCIpXG4gICAgICAgICAgICApO1xuICAgICAgICAgICAgcHJvY2Vzcy5leGl0KDApO1xuICAgICAgICAgIH1cbiAgICAgICAgICB3YXJuaW5ncy5wdXNoKFwiUmFuIGluIHRvb2xzLW9ubHkgbW9kZSBcdTIwMTQgbm8gWGNvZGUgcHJvamVjdCBmb3VuZC5cIik7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgYWN0aW9ucy5wdXNoKFwiU2tpcHBlZCBTREsgaW5zdGFsbGF0aW9uICgtLXRvb2xzLW9ubHkgbW9kZSlcIik7XG4gICAgfVxuXG4gICAgLy8gXHUyNTAwXHUyNTAwIDIuIE1DUCBjb25maWcgXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXG4gICAge1xuICAgICAgY29uc3Qgc3Bpbm5lciA9IG9yYShcIldyaXRpbmcgTUNQIHNlcnZlciBjb25maWdcdTIwMjZcIikuc3RhcnQoKTtcblxuICAgICAgbGV0IHJlc3VsdDogeyB3cml0dGVuOiBib29sZWFuOyBtZXJnZWQ6IGJvb2xlYW4gfTtcbiAgICAgIGxldCBjb25maWdGaWxlOiBzdHJpbmc7XG5cbiAgICAgIGlmIChhZ2VudCA9PT0gXCJjbGF1ZGVcIikge1xuICAgICAgICByZXN1bHQgPSB3cml0ZUNsYXVkZU1jcENvbmZpZyhjd2QpO1xuICAgICAgICBjb25maWdGaWxlID0gXCIubWNwLmpzb25cIjtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJlc3VsdCA9IHdyaXRlQ3Vyc29yTWNwQ29uZmlnKGN3ZCk7XG4gICAgICAgIGNvbmZpZ0ZpbGUgPSBcIi5jdXJzb3IvbWNwLmpzb25cIjtcbiAgICAgIH1cblxuICAgICAgaWYgKHJlc3VsdC53cml0dGVuICYmIHJlc3VsdC5tZXJnZWQpIHtcbiAgICAgICAgc3Bpbm5lci5zdWNjZWVkKGBNQ1AgY29uZmlnIG1lcmdlZCBpbnRvIGV4aXN0aW5nICR7Y29uZmlnRmlsZX0uYCk7XG4gICAgICAgIGFjdGlvbnMucHVzaChgcGF0aC10ZXJtaW5hbCBlbnRyeSBtZXJnZWQgaW50byAke2NvbmZpZ0ZpbGV9YCk7XG4gICAgICB9IGVsc2UgaWYgKHJlc3VsdC53cml0dGVuKSB7XG4gICAgICAgIHNwaW5uZXIuc3VjY2VlZChgTUNQIGNvbmZpZyB3cml0dGVuIHRvICR7Y29uZmlnRmlsZX0uYCk7XG4gICAgICAgIGFjdGlvbnMucHVzaChgTUNQIHNlcnZlciBjb25maWd1cmVkOiAke2NvbmZpZ0ZpbGV9YCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBzcGlubmVyLmluZm8oXCJNQ1AgY29uZmlnIGFscmVhZHkgcHJlc2VudCBcdTIwMTQgbm8gY2hhbmdlIG5lZWRlZC5cIik7XG4gICAgICAgIGFjdGlvbnMucHVzaChcIk1DUCBjb25maWcgYWxyZWFkeSBwcmVzZW50IFx1MjAxNCBubyBjaGFuZ2UgbmVlZGVkLlwiKTtcbiAgICAgIH1cblxuICAgICAgLy8gRm9yIENsYXVkZSBDb2RlLCBhbHNvIHByZS1hcHByb3ZlIHRoZSBNQ1Agc2VydmVyIGluIC5jbGF1ZGUvc2V0dGluZ3MuanNvbi5cbiAgICAgIC8vIFdpdGhvdXQgdGhpcywgQ2xhdWRlIENvZGUgc2hvd3MgYW4gaW50ZXJhY3RpdmUgXCJBbGxvdyB0aGlzIE1DUCBzZXJ2ZXI/XCJcbiAgICAgIC8vIHByb21wdCBvbiBmaXJzdCBsYXVuY2ggXHUyMDE0IGVhc3kgdG8gbWlzcywgYW5kIHRoZSBhZ2VudCBlbmRzIHVwIHJ1bm5pbmdcbiAgICAgIC8vIHdpdGhvdXQgTUNQIHRvb2xzIGlmIHRoZSB1c2VyIGRpc21pc3NlcyBpdC5cbiAgICAgIGlmIChhZ2VudCA9PT0gXCJjbGF1ZGVcIikge1xuICAgICAgICBjb25zdCBhcHByb3ZlU3Bpbm5lciA9IG9yYShcIlByZS1hcHByb3ZpbmcgUGF0aCBNQ1Agc2VydmVyIGZvciBDbGF1ZGUgQ29kZVx1MjAyNlwiKS5zdGFydCgpO1xuICAgICAgICBjb25zdCBhcHByb3ZlID0gd3JpdGVDbGF1ZGVTZXR0aW5ncyhjd2QpO1xuICAgICAgICBpZiAoYXBwcm92ZS5hbHJlYWR5QXBwcm92ZWQpIHtcbiAgICAgICAgICBhcHByb3ZlU3Bpbm5lci5pbmZvKFwiUGF0aCBNQ1Agc2VydmVyIGFscmVhZHkgcHJlLWFwcHJvdmVkIFx1MjAxNCBubyBjaGFuZ2UgbmVlZGVkLlwiKTtcbiAgICAgICAgfSBlbHNlIGlmIChhcHByb3ZlLndyaXR0ZW4gJiYgYXBwcm92ZS5tZXJnZWQpIHtcbiAgICAgICAgICBhcHByb3ZlU3Bpbm5lci5zdWNjZWVkKFwicGF0aC10ZXJtaW5hbCBhZGRlZCB0byBleGlzdGluZyAuY2xhdWRlL3NldHRpbmdzLmpzb24uXCIpO1xuICAgICAgICAgIGFjdGlvbnMucHVzaChcInBhdGgtdGVybWluYWwgcHJlLWFwcHJvdmVkIGluIC5jbGF1ZGUvc2V0dGluZ3MuanNvblwiKTtcbiAgICAgICAgfSBlbHNlIGlmIChhcHByb3ZlLndyaXR0ZW4pIHtcbiAgICAgICAgICBhcHByb3ZlU3Bpbm5lci5zdWNjZWVkKFwiUHJlLWFwcHJvdmFsIHdyaXR0ZW4gdG8gLmNsYXVkZS9zZXR0aW5ncy5qc29uLlwiKTtcbiAgICAgICAgICBhY3Rpb25zLnB1c2goXCJDbGF1ZGUgQ29kZSBwcmUtYXBwcm92YWw6IC5jbGF1ZGUvc2V0dGluZ3MuanNvblwiKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBhcHByb3ZlU3Bpbm5lci53YXJuKFwiQ291bGQgbm90IHdyaXRlIC5jbGF1ZGUvc2V0dGluZ3MuanNvbiBcdTIwMTQgeW91IG1heSBzZWUgYW4gXFxcIkFsbG93IE1DUCBzZXJ2ZXI/XFxcIiBwcm9tcHQgb24gZmlyc3QgQ2xhdWRlIENvZGUgbGF1bmNoLiBBY2NlcHQgaXQuXCIpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gXHUyNTAwXHUyNTAwIDMuIFJ1bGVzIGZpbGUgXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXG4gICAge1xuICAgICAgY29uc3Qgc3Bpbm5lciA9IG9yYShgV3JpdGluZyAke2FnZW50ID09PSBcImNsYXVkZVwiID8gXCJDTEFVREUubWRcIiA6IFwiQ3Vyc29yIHJ1bGVzXCJ9IGZpbGVcdTIwMjZgKS5zdGFydCgpO1xuXG4gICAgICBsZXQgcmVzdWx0OiB7IHdyaXR0ZW46IGJvb2xlYW47IHNraXBwZWQ6IGJvb2xlYW4gfTtcbiAgICAgIGxldCBydWxlc0ZpbGU6IHN0cmluZztcblxuICAgICAgLy8gUGVyLXBsYXRmb3JtIHJlY2lwZSBzb3VyY2UgKyBmZXRjaCBVUkwgKyBmaWxlbmFtZS5cbiAgICAgIGNvbnN0IHJ1bGVzQnlQbGF0Zm9ybSA9IHtcbiAgICAgICAgaW9zOiAgICAgICB7IHNyYzogUlVMRVNfU09VUkNFLCAgICAgICAgICB1cmw6IFJVTEVTX0ZFVENIX1VSTCwgICAgICAgICAgZmlsZTogXCJwYXRoLWludGVncmF0aW9uLm1kY1wiIH0sXG4gICAgICAgIGFuZHJvaWQ6ICAgeyBzcmM6IEFORFJPSURfUlVMRVNfU09VUkNFLCAgIHVybDogQU5EUk9JRF9SVUxFU19GRVRDSF9VUkwsICAgZmlsZTogXCJwYXRoLWludGVncmF0aW9uLWFuZHJvaWQubWRjXCIgfSxcbiAgICAgICAgd2luZG93czExOiB7IHNyYzogV0lORE9XUzExX1JVTEVTX1NPVVJDRSwgdXJsOiBXSU5ET1dTMTFfUlVMRVNfRkVUQ0hfVVJMLCBmaWxlOiBcInBhdGgtaW50ZWdyYXRpb24td2luZG93czExLm1kY1wiIH0sXG4gICAgICAgIHdpbmRvd3MxMDogeyBzcmM6IFdJTkRPV1MxMF9SVUxFU19TT1VSQ0UsIHVybDogV0lORE9XUzEwX1JVTEVTX0ZFVENIX1VSTCwgZmlsZTogXCJwYXRoLWludGVncmF0aW9uLXdpbmRvd3MxMC5tZGNcIiB9LFxuICAgICAgfSBhcyBjb25zdDtcbiAgICAgIGNvbnN0IGFjdGl2ZVJ1bGVzID0gcnVsZXNCeVBsYXRmb3JtW3BsYXRmb3JtXTtcbiAgICAgIGNvbnN0IGFjdGl2ZUZldGNoVXJsID0gYWN0aXZlUnVsZXMudXJsO1xuXG4gICAgICBpZiAoYWdlbnQgPT09IFwiY2xhdWRlXCIpIHtcbiAgICAgICAgcmVzdWx0ID0gd3JpdGVDbGF1ZGVSdWxlc0ZpbGUoY3dkLCBhY3RpdmVSdWxlcy5zcmMsIGFjdGl2ZUZldGNoVXJsKTtcbiAgICAgICAgcnVsZXNGaWxlID0gXCJDTEFVREUubWRcIjtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJlc3VsdCA9IHdyaXRlQ3Vyc29yUnVsZXNGaWxlKGN3ZCwgYWN0aXZlUnVsZXMuc3JjLCBhY3RpdmVSdWxlcy5maWxlLCBhY3RpdmVGZXRjaFVybCk7XG4gICAgICAgIHJ1bGVzRmlsZSA9IGAuY3Vyc29yL3J1bGVzLyR7YWN0aXZlUnVsZXMuZmlsZX1gO1xuICAgICAgfVxuXG4gICAgICBpZiAocmVzdWx0LndyaXR0ZW4pIHtcbiAgICAgICAgc3Bpbm5lci5zdWNjZWVkKGBSdWxlcyBmaWxlIHdyaXR0ZW4gdG8gJHtydWxlc0ZpbGV9LmApO1xuICAgICAgICBhY3Rpb25zLnB1c2goYEludGVncmF0aW9uIHJ1bGVzIGZpbGU6ICR7cnVsZXNGaWxlfWApO1xuICAgICAgfSBlbHNlIGlmIChyZXN1bHQuc2tpcHBlZCkge1xuICAgICAgICBzcGlubmVyLmluZm8oXG4gICAgICAgICAgYCR7cnVsZXNGaWxlfSBhbHJlYWR5IGV4aXN0cyBcdTIwMTQgc2tpcHBlZCB0byBwcmVzZXJ2ZSB5b3VyIGN1c3RvbWlzYXRpb25zLmBcbiAgICAgICAgKTtcbiAgICAgICAgd2FybmluZ3MucHVzaChcbiAgICAgICAgICBgJHtydWxlc0ZpbGV9IGFscmVhZHkgZXhpc3RzIFx1MjAxNCBub3Qgb3ZlcndyaXR0ZW4uYFxuICAgICAgICApO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgc3Bpbm5lci53YXJuKFwiQ291bGQgbm90IHdyaXRlIHJ1bGVzIGZpbGUgXHUyMDE0IGNoZWNrIG5ldHdvcmsgY29ubmVjdGl2aXR5LlwiKTtcbiAgICAgICAgbWFudWFsU3RlcHMucHVzaChcbiAgICAgICAgICBgRG93bmxvYWQgJHthY3RpdmVSdWxlcy5maWxlfSBtYW51YWxseSBmcm9tOiAke2FjdGl2ZUZldGNoVXJsfWBcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBcdTI1MDBcdTI1MDAgNC4gUGVybWlzc2lvbiBjaGVjayBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcbiAgICBpZiAoIXRvb2xzT25seSkge1xuICAgICAgaWYgKGlzQW5kcm9pZCkge1xuICAgICAgICBjb25zdCBzcGlubmVyID0gb3JhKFwiQ2hlY2tpbmcgQW5kcm9pZE1hbmlmZXN0LnhtbCBCTEUgcGVybWlzc2lvbnNcdTIwMjZcIikuc3RhcnQoKTtcbiAgICAgICAgY29uc3QgbWFuaWZlc3RzV2l0aElzc3VlcyA9IGNoZWNrQW5kcm9pZE1hbmlmZXN0KGN3ZCk7XG4gICAgICAgIGlmIChtYW5pZmVzdHNXaXRoSXNzdWVzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICAgIHNwaW5uZXIuc3VjY2VlZChcIkJMRSBwZXJtaXNzaW9ucyBmb3VuZCBpbiBBbmRyb2lkTWFuaWZlc3QueG1sLlwiKTtcbiAgICAgICAgICBhY3Rpb25zLnB1c2goXCJCTEUgcGVybWlzc2lvbnMgdmVyaWZpZWQgaW4gQW5kcm9pZE1hbmlmZXN0LnhtbFwiKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBzcGlubmVyLndhcm4oXG4gICAgICAgICAgICBgQkxVRVRPT1RIX1NDQU4gbWlzc2luZyBmcm9tICR7bWFuaWZlc3RzV2l0aElzc3Vlcy5sZW5ndGh9IEFuZHJvaWRNYW5pZmVzdC54bWwgZmlsZShzKS5gXG4gICAgICAgICAgKTtcbiAgICAgICAgICBtYW5pZmVzdHNXaXRoSXNzdWVzLmZvckVhY2goKHApID0+IHtcbiAgICAgICAgICAgIGNvbnN0IHJlbGF0aXZlID0gcGF0aC5yZWxhdGl2ZShjd2QsIHApO1xuICAgICAgICAgICAgbWFudWFsU3RlcHMucHVzaChcbiAgICAgICAgICAgICAgYEFkZCBCTEUgcGVybWlzc2lvbnMgdG8gJHtyZWxhdGl2ZX06XFxuYCArXG4gICAgICAgICAgICAgIGAgICAgIChBc2sgdGhlIE1DUDogXCJnZXRfbWFuaWZlc3RfcmVxdWlyZW1lbnRzXCIgZm9yIHRoZSBmdWxsIFhNTClgXG4gICAgICAgICAgICApO1xuICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICB9IGVsc2UgaWYgKGlzV2luZG93cykge1xuICAgICAgICAvLyBXaW5kb3dzIHJlYWNoZXMgQkxFIHZpYSBXaW5SVCBcdTIwMTQgbm8gbWFuaWZlc3QgY2FwYWJpbGl0eSB0byBhZGQgKHVucGFja2FnZWRcbiAgICAgICAgLy8gV2luVUkgMyAvIFdQRikuIFRoZSBXaS1GaS9JUCBhbmQgVmVyaWZvbmUgYmFja2VuZHMgdXNlIG5vIEJsdWV0b290aCBhdCBhbGwuXG4gICAgICAgIGFjdGlvbnMucHVzaChcIkJsdWV0b290aCBuZWVkcyBubyBtYW5pZmVzdCBlbnRyeSBvbiBXaW5kb3dzIChXaW5SVCkuXCIpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgY29uc3Qgc3Bpbm5lciA9IG9yYShcIkNoZWNraW5nIEluZm8ucGxpc3QgQkxFIHBlcm1pc3Npb25zXHUyMDI2XCIpLnN0YXJ0KCk7XG4gICAgICAgIGNvbnN0IHBsaXN0c1dpdGhJc3N1ZXMgPSBjaGVja0luZm9QbGlzdChjd2QpO1xuICAgICAgICBpZiAocGxpc3RzV2l0aElzc3Vlcy5sZW5ndGggPT09IDApIHtcbiAgICAgICAgICBzcGlubmVyLnN1Y2NlZWQoXCJCTEUgcGVybWlzc2lvbnMgZm91bmQgaW4gSW5mby5wbGlzdC5cIik7XG4gICAgICAgICAgYWN0aW9ucy5wdXNoKFwiQkxFIHBlcm1pc3Npb25zIHZlcmlmaWVkIGluIEluZm8ucGxpc3RcIik7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgc3Bpbm5lci53YXJuKFxuICAgICAgICAgICAgYE5TQmx1ZXRvb3RoQWx3YXlzVXNhZ2VEZXNjcmlwdGlvbiBtaXNzaW5nIGZyb20gJHtwbGlzdHNXaXRoSXNzdWVzLmxlbmd0aH0gSW5mby5wbGlzdCBmaWxlKHMpLmBcbiAgICAgICAgICApO1xuICAgICAgICAgIHBsaXN0c1dpdGhJc3N1ZXMuZm9yRWFjaCgocCkgPT4ge1xuICAgICAgICAgICAgY29uc3QgcmVsYXRpdmUgPSBwYXRoLnJlbGF0aXZlKGN3ZCwgcCk7XG4gICAgICAgICAgICBtYW51YWxTdGVwcy5wdXNoKFxuICAgICAgICAgICAgICBgQWRkIEJMRSBwZXJtaXNzaW9uIHRvICR7cmVsYXRpdmV9OlxcbmAgK1xuICAgICAgICAgICAgICAgIGAgICAgIDxrZXk+TlNCbHVldG9vdGhBbHdheXNVc2FnZURlc2NyaXB0aW9uPC9rZXk+XFxuYCArXG4gICAgICAgICAgICAgICAgYCAgICAgPHN0cmluZz5UaGlzIGFwcCBjb25uZWN0cyB0byBhIFBhdGggcGF5bWVudCB0ZXJtaW5hbCB2aWEgQmx1ZXRvb3RoLjwvc3RyaW5nPlxcbmAgK1xuICAgICAgICAgICAgICAgIGAgICAgIChBc2sgdGhlIE1DUDogXCJnZXRfaW5mb19wbGlzdF9yZXF1aXJlbWVudHNcIiBmb3IgdGhlIGZ1bGwgWE1MKWBcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBcdTI1MDBcdTI1MDAgNS4gU3VtbWFyeSBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcbiAgICBwcmludFN1bW1hcnkoYWdlbnQsIHBsYXRmb3JtLCBhY3Rpb25zLCB3YXJuaW5ncywgbWFudWFsU3RlcHMpO1xuICB9KTtcblxucHJvZ3JhbS5wYXJzZShwcm9jZXNzLmFyZ3YpO1xuIl0sCiAgIm1hcHBpbmdzIjogIjs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBRUEsdUJBQXdCO0FBQ3hCLG1CQUFrQjtBQUNsQixTQUFvQjtBQUNwQixXQUFzQjtBQUN0QixlQUEwQjtBQUMxQiwyQkFBeUI7QUFDekIsaUJBQWdCO0FBRWhCLE1BQU0saUJB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Y0FBYztBQUNwRixrQkFBWSxpQkFBaUIsWUFBWSxJQUFJO0FBQUEsSUFDL0M7QUFFQSxRQUFJLE9BQU8sU0FBUztBQUNsQixjQUFRLFFBQVEseUJBQXlCLFNBQVMsR0FBRztBQUNyRCxjQUFRLEtBQUssMkJBQTJCLFNBQVMsRUFBRTtBQUFBLElBQ3JELFdBQVcsT0FBTyxTQUFTO0FBQ3pCLGNBQVE7QUFBQSxRQUNOLEdBQUcsU0FBUztBQUFBLE1BQ2Q7QUFDQSxlQUFTO0FBQUEsUUFDUCxHQUFHLFNBQVM7QUFBQSxNQUNkO0FBQUEsSUFDRixPQUFPO0FBQ0wsY0FBUSxLQUFLLCtEQUEwRDtBQUN2RSxrQkFBWTtBQUFBLFFBQ1YsWUFBWSxZQUFZLElBQUksbUJBQW1CLGNBQWM7QUFBQSxNQUMvRDtBQUFBLElBQ0Y7QUFBQSxFQUNGO0FBR0EsTUFBSSxDQUFDLFdBQVc7QUFDZCxRQUFJLFdBQVc7QUFDYixZQUFNLGNBQVUsV0FBQUEsU0FBSSxvREFBK0MsRUFBRSxNQUFNO0FBQzNFLFlBQU0sc0JBQXNCLHFCQUFxQixHQUFHO0FBQ3BELFVBQUksb0JBQW9CLFdBQVcsR0FBRztBQUNwQyxnQkFBUSxRQUFRLCtDQUErQztBQUMvRCxnQkFBUSxLQUFLLGlEQUFpRDtBQUFBLE1BQ2hFLE9BQU87QUFDTCxnQkFBUTtBQUFBLFVBQ04sK0JBQStCLG9CQUFvQixNQUFNO0FBQUEsUUFDM0Q7QUFDQSw0QkFBb0IsUUFBUSxDQUFDLE1BQU07QUFDakMsZ0JBQU0sV0FBVyxLQUFLLFNBQVMsS0FBSyxDQUFDO0FBQ3JDLHNCQUFZO0FBQUEsWUFDViwwQkFBMEIsUUFBUTtBQUFBO0FBQUEsVUFFcEM7QUFBQSxRQUNGLENBQUM7QUFBQSxNQUNIO0FBQUEsSUFDRixXQUFXLFdBQVc7QUFHcEIsY0FBUSxLQUFLLHVEQUF1RDtBQUFBLElBQ3RFLE9BQU87QUFDTCxZQUFNLGNBQVUsV0FBQUEsU0FBSSwyQ0FBc0MsRUFBRSxNQUFNO0FBQ2xFLFlBQU0sbUJBQW1CLGVBQWUsR0FBRztBQUMzQyxVQUFJLGlCQUFpQixXQUFXLEdBQUc7QUFDakMsZ0JBQVEsUUFBUSxzQ0FBc0M7QUFDdEQsZ0JBQVEsS0FBSyx3Q0FBd0M7QUFBQSxNQUN2RCxPQUFPO0FBQ0wsZ0JBQVE7QUFBQSxVQUNOLGtEQUFrRCxpQkFBaUIsTUFBTTtBQUFBLFFBQzNFO0FBQ0EseUJBQWlCLFFBQVEsQ0FBQyxNQUFNO0FBQzlCLGdCQUFNLFdBQVcsS0FBSyxTQUFTLEtBQUssQ0FBQztBQUNyQyxzQkFBWTtBQUFBLFlBQ1YseUJBQXlCLFFBQVE7QUFBQTtBQUFBO0FBQUE7QUFBQSxVQUluQztBQUFBLFFBQ0YsQ0FBQztBQUFBLE1BQ0g7QUFBQSxJQUNGO0FBQUEsRUFDRjtBQUdBLGVBQWEsT0FBTyxVQUFVLFNBQVMsVUFBVSxXQUFXO0FBQzlELENBQUM7QUFFSCx5QkFBUSxNQUFNLFFBQVEsSUFBSTsiLAogICJuYW1lcyI6IFsicnVsZXMiLCAiY2hhbGsiLCAib3JhIl0KfQo=
|
|
726
|
+
//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vc3JjL2NsaS50cyJdLAogICJzb3VyY2VzQ29udGVudCI6IFsiIyEvdXNyL2Jpbi9lbnYgbm9kZVxuXG5pbXBvcnQgeyBwcm9ncmFtIH0gZnJvbSBcImNvbW1hbmRlclwiO1xuaW1wb3J0IGNoYWxrIGZyb20gXCJjaGFsa1wiO1xuaW1wb3J0ICogYXMgZnMgZnJvbSBcImZzXCI7XG5pbXBvcnQgKiBhcyBwYXRoIGZyb20gXCJwYXRoXCI7XG5pbXBvcnQgKiBhcyByZWFkbGluZSBmcm9tIFwicmVhZGxpbmVcIjtcbmltcG9ydCB7IGV4ZWNTeW5jIH0gZnJvbSBcImNoaWxkX3Byb2Nlc3NcIjtcbmltcG9ydCBvcmEgZnJvbSBcIm9yYVwiO1xuXG5jb25zdCBTREtfR0lUSFVCX1VSTCA9IFwiaHR0cHM6Ly9naXRodWIuY29tL2tleW1hbjEyL3BhdGgtdGVybWluYWwtc2RrXCI7XG5jb25zdCBBTkRST0lEX1NES19HSVRIVUJfVVJMID0gXCJodHRwczovL2dpdGh1Yi5jb20va2V5bWFuMTIvcGF0aC10ZXJtaW5hbC1zZGstYW5kcm9pZFwiO1xuY29uc3QgU0RLX1ZFUlNJT04gPSBcIjAuMS4wXCI7IC8vIG1pbmltdW0gdmVyc2lvbiB0byByZWZlcmVuY2Vcbi8vIEFuZHJvaWQgU0RLIGlzIHNlcnZlZCBmcm9tIHRoZSBQYXRoLWhvc3RlZCBNYXZlbiByZXBvIChvbmUgVVJMLCBpbmNsLiB0aGUgVmVyaWZvbmVcbi8vIGJhY2tlbmQgKyBpdHMgLmFhcikuIE5vIEppdFBhY2ssIG5vIHNpYmxpbmcgY2hlY2tvdXQgXHUyMDE0IG1pcnJvcnMgdGhlIGlPUyBTUE0tVVJMIG1vZGVsLlxuY29uc3QgUEFUSF9NQVZFTl9VUkwgPSBcImh0dHBzOi8vbWNwLnBhdGgyYWkudGVjaC9tYXZlblwiO1xuY29uc3QgQU5EUk9JRF9TREtfR1JPVVAgPSBcInRlY2gucGF0aDJhaS5zZGtcIjtcbmNvbnN0IEFORFJPSURfU0RLX1ZFUlNJT04gPSBcIjEuNS4wXCI7XG5jb25zdCBBTkRST0lEX1NES19NT0RVTEVTID0gW1wicGF0aC1jb3JlLW1vZGVsc1wiLCBcInBhdGgtdGVybWluYWwtc2RrXCIsIFwicGF0aC1lbXVsYXRvci1hZGFwdGVyXCIsIFwicGF0aC1wc2RrLWFkYXB0ZXJcIl07XG5jb25zdCBNQ1BfU0VSVkVSX1VSTCA9IFwiaHR0cHM6Ly9tY3AucGF0aDJhaS50ZWNoL3NzZVwiO1xuY29uc3QgUlVMRVNfRkVUQ0hfVVJMID0gXCJodHRwczovL21jcC5wYXRoMmFpLnRlY2gvcnVsZXNcIjtcbmNvbnN0IEFORFJPSURfUlVMRVNfRkVUQ0hfVVJMID0gXCJodHRwczovL21jcC5wYXRoMmFpLnRlY2gvcnVsZXMvYW5kcm9pZFwiO1xuY29uc3QgV0lORE9XUzExX1JVTEVTX0ZFVENIX1VSTCA9IFwiaHR0cHM6Ly9tY3AucGF0aDJhaS50ZWNoL3J1bGVzL3dpbmRvd3MxMVwiO1xuY29uc3QgV0lORE9XUzEwX1JVTEVTX0ZFVENIX1VSTCA9IFwiaHR0cHM6Ly9tY3AucGF0aDJhaS50ZWNoL3J1bGVzL3dpbmRvd3MxMFwiO1xuXG5jb25zdCBSVUxFU19TT1VSQ0UgPSBwYXRoLmpvaW4oX19kaXJuYW1lLCBcIi4uL3J1bGVzL2lvcy9wYXRoLWludGVncmF0aW9uLm1kY1wiKTtcbmNvbnN0IEFORFJPSURfUlVMRVNfU09VUkNFID0gcGF0aC5qb2luKF9fZGlybmFtZSwgXCIuLi9ydWxlcy9hbmRyb2lkL3BhdGgtaW50ZWdyYXRpb24tYW5kcm9pZC5tZGNcIik7XG5jb25zdCBXSU5ET1dTMTFfUlVMRVNfU09VUkNFID0gcGF0aC5qb2luKF9fZGlybmFtZSwgXCIuLi9ydWxlcy93aW5kb3dzLTExL3BhdGgtaW50ZWdyYXRpb24td2luZG93czExLm1kY1wiKTtcbmNvbnN0IFdJTkRPV1MxMF9SVUxFU19TT1VSQ0UgPSBwYXRoLmpvaW4oX19kaXJuYW1lLCBcIi4uL3J1bGVzL3dpbmRvd3MtMTAvcGF0aC1pbnRlZ3JhdGlvbi13aW5kb3dzMTAubWRjXCIpO1xuXG4vLyBUaGUgV2luZG93cyBTREsgaXMgY29uc3VtZWQgYnkgcmVsYXRpdmUgUHJvamVjdFJlZmVyZW5jZSB0byB0aGlzIHNpYmxpbmcgY2xvbmVcbi8vIChvbmUgcmVwbyBzZXJ2ZXMgYm90aCB0aGUgV2luVUkgMyAvIC5ORVQgMTAgYW5kIFdQRiAvIC5ORVQgRlcgNC44IHN0YWNrcykuXG5jb25zdCBXSU5ET1dTX1NES19SRVBPID0gXCJQYXRoLXRlcm1pbmFsLXNkay13aW5kb3dzMTFcIjtcblxudHlwZSBBZ2VudFR5cGUgPSBcImN1cnNvclwiIHwgXCJjbGF1ZGVcIjtcbnR5cGUgUGxhdGZvcm0gPSBcImlvc1wiIHwgXCJhbmRyb2lkXCIgfCBcIndpbmRvd3MxMVwiIHwgXCJ3aW5kb3dzMTBcIjtcblxuLy8gXHUyNTAwXHUyNTAwXHUyNTAwIFV0aWxpdGllcyBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcblxuZnVuY3Rpb24gYXNrKHF1ZXN0aW9uOiBzdHJpbmcpOiBQcm9taXNlPHN0cmluZz4ge1xuICBjb25zdCBybCA9IHJlYWRsaW5lLmNyZWF0ZUludGVyZmFjZSh7IGlucHV0OiBwcm9jZXNzLnN0ZGluLCBvdXRwdXQ6IHByb2Nlc3Muc3Rkb3V0IH0pO1xuICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUpID0+IHtcbiAgICBybC5xdWVzdGlvbihxdWVzdGlvbiwgKGFuc3dlcikgPT4ge1xuICAgICAgcmwuY2xvc2UoKTtcbiAgICAgIHJlc29sdmUoYW5zd2VyLnRyaW0oKSk7XG4gICAgfSk7XG4gIH0pO1xufVxuXG5mdW5jdGlvbiBmaW5kWGNvZGVQcm9qZWN0KGRpcjogc3RyaW5nKTogc3RyaW5nIHwgbnVsbCB7XG4gIGNvbnN0IGlzWGNvZGVBcnRpZmFjdCA9IChlOiBzdHJpbmcpID0+XG4gICAgZS5lbmRzV2l0aChcIi54Y29kZXByb2pcIikgfHwgZS5lbmRzV2l0aChcIi54Y3dvcmtzcGFjZVwiKTtcblxuICAvLyBDaGVjayB0aGUgY3VycmVudCBkaXJlY3RvcnkgZmlyc3RcbiAgY29uc3QgZW50cmllcyA9IGZzLnJlYWRkaXJTeW5jKGRpcik7XG4gIGNvbnN0IHByb2ogPSBlbnRyaWVzLmZpbmQoaXNYY29kZUFydGlmYWN0KTtcbiAgaWYgKHByb2opIHJldHVybiBwYXRoLmpvaW4oZGlyLCBwcm9qKTtcblxuICAvLyBTZWFyY2ggb25lIGxldmVsIGRlZXAgaW4gc3ViZGlyZWN0b3JpZXMgKGhhbmRsZXMgcmVwb3Mgd2hlcmUgdGhlXG4gIC8vIFhjb2RlIHByb2plY3Qgc2l0cyBpbnNpZGUgYSBuYW1lZCBzdWJmb2xkZXIsIGUuZy4gT3JkZXJjaGFtcGlvbkVQT1MvKVxuICBmb3IgKGNvbnN0IGVudHJ5IG9mIGVudHJpZXMpIHtcbiAgICBpZiAoZW50cnkuc3RhcnRzV2l0aChcIi5cIikpIGNvbnRpbnVlO1xuICAgIGNvbnN0IHN1YiA9IHBhdGguam9pbihkaXIsIGVudHJ5KTtcbiAgICB0cnkge1xuICAgICAgaWYgKGZzLnN0YXRTeW5jKHN1YikuaXNEaXJlY3RvcnkoKSkge1xuICAgICAgICBjb25zdCBzdWJFbnRyaWVzID0gZnMucmVhZGRpclN5bmMoc3ViKTtcbiAgICAgICAgY29uc3Qgc3ViUHJvaiA9IHN1YkVudHJpZXMuZmluZChpc1hjb2RlQXJ0aWZhY3QpO1xuICAgICAgICBpZiAoc3ViUHJvaikgcmV0dXJuIHBhdGguam9pbihzdWIsIHN1YlByb2opO1xuICAgICAgfVxuICAgIH0gY2F0Y2ggeyAvKiBza2lwIHVucmVhZGFibGUgZGlycyAqLyB9XG4gIH1cblxuICByZXR1cm4gbnVsbDtcbn1cblxuZnVuY3Rpb24gZmluZFBhY2thZ2VTd2lmdChkaXI6IHN0cmluZyk6IHN0cmluZyB8IG51bGwge1xuICBjb25zdCBwID0gcGF0aC5qb2luKGRpciwgXCJQYWNrYWdlLnN3aWZ0XCIpO1xuICByZXR1cm4gZnMuZXhpc3RzU3luYyhwKSA/IHAgOiBudWxsO1xufVxuXG5mdW5jdGlvbiBoYXNTREtEZXBlbmRlbmN5KHBhY2thZ2VTd2lmdDogc3RyaW5nKTogYm9vbGVhbiB7XG4gIGNvbnN0IGNvbnRlbnQgPSBmcy5yZWFkRmlsZVN5bmMocGFja2FnZVN3aWZ0LCBcInV0Zi04XCIpO1xuICByZXR1cm4gY29udGVudC5pbmNsdWRlcyhcInBhdGgtdGVybWluYWwtc2RrXCIpIHx8IGNvbnRlbnQuaW5jbHVkZXMoXCJQYXRoVGVybWluYWxTREtcIik7XG59XG5cbmZ1bmN0aW9uIGhhc1hjb2RlUHJvamVjdFNES0RlcGVuZGVuY3koeGNvZGVQcm9qZWN0OiBzdHJpbmcpOiBib29sZWFuIHtcbiAgLy8gWGNvZGUgc3RvcmVzIHJlc29sdmVkIFNQTSBwYWNrYWdlcyBpbiB0aGUgd29ya3NwYWNlJ3MgUGFja2FnZS5yZXNvbHZlZFxuICBjb25zdCByZXNvbHZlZFBhdGhzID0gW1xuICAgIHBhdGguam9pbih4Y29kZVByb2plY3QsIFwicHJvamVjdC54Y3dvcmtzcGFjZVwiLCBcInhjc2hhcmVkZGF0YVwiLCBcInN3aWZ0cG1cIiwgXCJQYWNrYWdlLnJlc29sdmVkXCIpLFxuICAgIHBhdGguam9pbih4Y29kZVByb2plY3QsIFwieGNzaGFyZWRkYXRhXCIsIFwic3dpZnRwbVwiLCBcIlBhY2thZ2UucmVzb2x2ZWRcIiksXG4gIF07XG4gIGZvciAoY29uc3QgcCBvZiByZXNvbHZlZFBhdGhzKSB7XG4gICAgaWYgKGZzLmV4aXN0c1N5bmMocCkpIHtcbiAgICAgIGNvbnN0IGNvbnRlbnQgPSBmcy5yZWFkRmlsZVN5bmMocCwgXCJ1dGYtOFwiKTtcbiAgICAgIGlmIChjb250ZW50LmluY2x1ZGVzKFwicGF0aC10ZXJtaW5hbC1zZGtcIikgfHwgY29udGVudC5pbmNsdWRlcyhcIlBhdGhUZXJtaW5hbFNES1wiKSkge1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbiAgcmV0dXJuIGZhbHNlO1xufVxuXG5mdW5jdGlvbiBpbmplY3RTUE1EZXBlbmRlbmN5KHBhY2thZ2VTd2lmdFBhdGg6IHN0cmluZyk6IGJvb2xlYW4ge1xuICBsZXQgY29udGVudCA9IGZzLnJlYWRGaWxlU3luYyhwYWNrYWdlU3dpZnRQYXRoLCBcInV0Zi04XCIpO1xuXG4gIC8vIEFscmVhZHkgcHJlc2VudD9cbiAgaWYgKGhhc1NES0RlcGVuZGVuY3kocGFja2FnZVN3aWZ0UGF0aCkpIHJldHVybiBmYWxzZTtcblxuICAvLyBBZGQgdGhlIHBhY2thZ2UgZGVwZW5kZW5jeSBcdTIwMTQgZmluZCB0aGUgZGVwZW5kZW5jaWVzOiBbIGFycmF5XG4gIGNvbnN0IGRlcHNSZWdleCA9IC8oZGVwZW5kZW5jaWVzOlxccypcXFspLztcbiAgaWYgKCFkZXBzUmVnZXgudGVzdChjb250ZW50KSkge1xuICAgIHJldHVybiBmYWxzZTsgLy8gQ2FuJ3Qgc2FmZWx5IGluamVjdCBcdTIwMTQgc3RydWN0dXJlIG5vdCByZWNvZ25pc2VkXG4gIH1cblxuICBjb25zdCBkZXBFbnRyeSA9IGBcXG4gICAgICAgIC5wYWNrYWdlKHVybDogXCIke1NES19HSVRIVUJfVVJMfVwiLCBmcm9tOiBcIiR7U0RLX1ZFUlNJT059XCIpLGA7XG4gIGNvbnRlbnQgPSBjb250ZW50LnJlcGxhY2UoZGVwc1JlZ2V4LCBgJDEke2RlcEVudHJ5fWApO1xuICBmcy53cml0ZUZpbGVTeW5jKHBhY2thZ2VTd2lmdFBhdGgsIGNvbnRlbnQsIFwidXRmLThcIik7XG4gIHJldHVybiB0cnVlO1xufVxuXG4vLyBcdTI1MDBcdTI1MDBcdTI1MDAgQ3Vyc29yLXNwZWNpZmljIGNvbmZpZyBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcblxuZnVuY3Rpb24gd3JpdGVDdXJzb3JNY3BDb25maWcoZGlyOiBzdHJpbmcpOiB7IHdyaXR0ZW46IGJvb2xlYW47IG1lcmdlZDogYm9vbGVhbiB9IHtcbiAgY29uc3QgY3Vyc29yRGlyID0gcGF0aC5qb2luKGRpciwgXCIuY3Vyc29yXCIpO1xuICBjb25zdCBjb25maWdQYXRoID0gcGF0aC5qb2luKGN1cnNvckRpciwgXCJtY3AuanNvblwiKTtcblxuICBmcy5ta2RpclN5bmMoY3Vyc29yRGlyLCB7IHJlY3Vyc2l2ZTogdHJ1ZSB9KTtcblxuICBjb25zdCBwYXRoRW50cnkgPSB7XG4gICAgXCJwYXRoLXRlcm1pbmFsXCI6IHsgdXJsOiBNQ1BfU0VSVkVSX1VSTCB9LFxuICB9O1xuXG4gIGlmIChmcy5leGlzdHNTeW5jKGNvbmZpZ1BhdGgpKSB7XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IGV4aXN0aW5nID0gSlNPTi5wYXJzZShmcy5yZWFkRmlsZVN5bmMoY29uZmlnUGF0aCwgXCJ1dGYtOFwiKSk7XG4gICAgICBpZiAoIWV4aXN0aW5nLm1jcFNlcnZlcnMpIGV4aXN0aW5nLm1jcFNlcnZlcnMgPSB7fTtcbiAgICAgIGlmIChleGlzdGluZy5tY3BTZXJ2ZXJzW1wicGF0aC10ZXJtaW5hbFwiXSkge1xuICAgICAgICByZXR1cm4geyB3cml0dGVuOiBmYWxzZSwgbWVyZ2VkOiBmYWxzZSB9OyAvLyBhbHJlYWR5IHByZXNlbnRcbiAgICAgIH1cbiAgICAgIGV4aXN0aW5nLm1jcFNlcnZlcnNbXCJwYXRoLXRlcm1pbmFsXCJdID0gcGF0aEVudHJ5W1wicGF0aC10ZXJtaW5hbFwiXTtcbiAgICAgIGZzLndyaXRlRmlsZVN5bmMoY29uZmlnUGF0aCwgSlNPTi5zdHJpbmdpZnkoZXhpc3RpbmcsIG51bGwsIDIpLCBcInV0Zi04XCIpO1xuICAgICAgcmV0dXJuIHsgd3JpdHRlbjogdHJ1ZSwgbWVyZ2VkOiB0cnVlIH07XG4gICAgfSBjYXRjaCB7XG4gICAgICAvLyBGaWxlIGV4aXN0cyBidXQgaXMgbm90IHZhbGlkIEpTT04gXHUyMDE0IGRvbid0IG92ZXJ3cml0ZVxuICAgICAgcmV0dXJuIHsgd3JpdHRlbjogZmFsc2UsIG1lcmdlZDogZmFsc2UgfTtcbiAgICB9XG4gIH1cblxuICBjb25zdCBjb25maWcgPSB7IG1jcFNlcnZlcnM6IHBhdGhFbnRyeSB9O1xuICBmcy53cml0ZUZpbGVTeW5jKGNvbmZpZ1BhdGgsIEpTT04uc3RyaW5naWZ5KGNvbmZpZywgbnVsbCwgMiksIFwidXRmLThcIik7XG4gIHJldHVybiB7IHdyaXR0ZW46IHRydWUsIG1lcmdlZDogZmFsc2UgfTtcbn1cblxuZnVuY3Rpb24gd3JpdGVDdXJzb3JSdWxlc0ZpbGUoZGlyOiBzdHJpbmcsIHJ1bGVzU291cmNlOiBzdHJpbmcgPSBSVUxFU19TT1VSQ0UsIGZpbGVuYW1lOiBzdHJpbmcgPSBcInBhdGgtaW50ZWdyYXRpb24ubWRjXCIsIGZhbGxiYWNrVXJsPzogc3RyaW5nKTogeyB3cml0dGVuOiBib29sZWFuOyBza2lwcGVkOiBib29sZWFuIH0ge1xuICBjb25zdCBydWxlc0RpciA9IHBhdGguam9pbihkaXIsIFwiLmN1cnNvclwiLCBcInJ1bGVzXCIpO1xuICBjb25zdCBkZXN0UGF0aCA9IHBhdGguam9pbihydWxlc0RpciwgZmlsZW5hbWUpO1xuXG4gIGZzLm1rZGlyU3luYyhydWxlc0RpciwgeyByZWN1cnNpdmU6IHRydWUgfSk7XG5cbiAgaWYgKGZzLmV4aXN0c1N5bmMoZGVzdFBhdGgpKSB7XG4gICAgcmV0dXJuIHsgd3JpdHRlbjogZmFsc2UsIHNraXBwZWQ6IHRydWUgfTtcbiAgfVxuXG4gIGNvbnN0IGNvbnRlbnQgPSBsb2FkUnVsZXNDb250ZW50KHJ1bGVzU291cmNlLCBmYWxsYmFja1VybCk7XG4gIGlmICghY29udGVudCkgcmV0dXJuIHsgd3JpdHRlbjogZmFsc2UsIHNraXBwZWQ6IGZhbHNlIH07XG5cbiAgZnMud3JpdGVGaWxlU3luYyhkZXN0UGF0aCwgY29udGVudCwgXCJ1dGYtOFwiKTtcbiAgcmV0dXJuIHsgd3JpdHRlbjogdHJ1ZSwgc2tpcHBlZDogZmFsc2UgfTtcbn1cblxuLy8gXHUyNTAwXHUyNTAwXHUyNTAwIENsYXVkZSBDb2RlLXNwZWNpZmljIGNvbmZpZyBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcblxuZnVuY3Rpb24gd3JpdGVDbGF1ZGVNY3BDb25maWcoZGlyOiBzdHJpbmcpOiB7IHdyaXR0ZW46IGJvb2xlYW47IG1lcmdlZDogYm9vbGVhbiB9IHtcbiAgLy8gQ2xhdWRlIENvZGUgcmVhZHMgLm1jcC5qc29uIGF0IHRoZSBwcm9qZWN0IHJvb3QgKHNhbWUgbWNwU2VydmVycyBmb3JtYXQgYXMgQ3Vyc29yKVxuICBjb25zdCBjb25maWdQYXRoID0gcGF0aC5qb2luKGRpciwgXCIubWNwLmpzb25cIik7XG5cbiAgY29uc3Qgc2VydmVyRW50cnkgPSB7XG4gICAgdHlwZTogXCJzc2VcIixcbiAgICB1cmw6IE1DUF9TRVJWRVJfVVJMLFxuICB9O1xuXG4gIGlmIChmcy5leGlzdHNTeW5jKGNvbmZpZ1BhdGgpKSB7XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IGV4aXN0aW5nID0gSlNPTi5wYXJzZShmcy5yZWFkRmlsZVN5bmMoY29uZmlnUGF0aCwgXCJ1dGYtOFwiKSk7XG4gICAgICBpZiAoIWV4aXN0aW5nLm1jcFNlcnZlcnMpIGV4aXN0aW5nLm1jcFNlcnZlcnMgPSB7fTtcbiAgICAgIGlmIChleGlzdGluZy5tY3BTZXJ2ZXJzW1wicGF0aC10ZXJtaW5hbFwiXSkge1xuICAgICAgICByZXR1cm4geyB3cml0dGVuOiBmYWxzZSwgbWVyZ2VkOiBmYWxzZSB9OyAvLyBhbHJlYWR5IHByZXNlbnRcbiAgICAgIH1cbiAgICAgIGV4aXN0aW5nLm1jcFNlcnZlcnNbXCJwYXRoLXRlcm1pbmFsXCJdID0gc2VydmVyRW50cnk7XG4gICAgICBmcy53cml0ZUZpbGVTeW5jKGNvbmZpZ1BhdGgsIEpTT04uc3RyaW5naWZ5KGV4aXN0aW5nLCBudWxsLCAyKSwgXCJ1dGYtOFwiKTtcbiAgICAgIHJldHVybiB7IHdyaXR0ZW46IHRydWUsIG1lcmdlZDogdHJ1ZSB9O1xuICAgIH0gY2F0Y2gge1xuICAgICAgcmV0dXJuIHsgd3JpdHRlbjogZmFsc2UsIG1lcmdlZDogZmFsc2UgfTtcbiAgICB9XG4gIH1cblxuICBjb25zdCBjb25maWcgPSB7XG4gICAgbWNwU2VydmVyczoge1xuICAgICAgXCJwYXRoLXRlcm1pbmFsXCI6IHNlcnZlckVudHJ5LFxuICAgIH0sXG4gIH07XG4gIGZzLndyaXRlRmlsZVN5bmMoY29uZmlnUGF0aCwgSlNPTi5zdHJpbmdpZnkoY29uZmlnLCBudWxsLCAyKSwgXCJ1dGYtOFwiKTtcbiAgcmV0dXJuIHsgd3JpdHRlbjogdHJ1ZSwgbWVyZ2VkOiBmYWxzZSB9O1xufVxuXG4vLyBQcmUtYXBwcm92ZSB0aGUgcGF0aC10ZXJtaW5hbCBNQ1Agc2VydmVyIGluIC5jbGF1ZGUvc2V0dGluZ3MuanNvbiBzbyBDbGF1ZGVcbi8vIENvZGUgbG9hZHMgaXRzIHRvb2xzIG9uIHRoZSB2ZXJ5IGZpcnN0IHNlc3Npb24gd2l0aG91dCB0aGUgdXNlciBoYXZpbmcgdG9cbi8vIGNsaWNrIHRocm91Z2ggYW4gYXBwcm92YWwgcHJvbXB0ICh3aGljaCBpcyBlYXN5IHRvIG1pc3MgYW5kIGxlYXZlcyB0aGUgYWdlbnRcbi8vIHJ1bm5pbmcgd2l0aG91dCBNQ1AgdG9vbHMpLlxuZnVuY3Rpb24gd3JpdGVDbGF1ZGVTZXR0aW5ncyhkaXI6IHN0cmluZyk6IHsgd3JpdHRlbjogYm9vbGVhbjsgbWVyZ2VkOiBib29sZWFuOyBhbHJlYWR5QXBwcm92ZWQ6IGJvb2xlYW4gfSB7XG4gIGNvbnN0IGNsYXVkZURpciA9IHBhdGguam9pbihkaXIsIFwiLmNsYXVkZVwiKTtcbiAgY29uc3Qgc2V0dGluZ3NQYXRoID0gcGF0aC5qb2luKGNsYXVkZURpciwgXCJzZXR0aW5ncy5qc29uXCIpO1xuICBjb25zdCBNQ1BfTkFNRSA9IFwicGF0aC10ZXJtaW5hbFwiO1xuXG4gIGlmICghZnMuZXhpc3RzU3luYyhjbGF1ZGVEaXIpKSB7XG4gICAgZnMubWtkaXJTeW5jKGNsYXVkZURpciwgeyByZWN1cnNpdmU6IHRydWUgfSk7XG4gIH1cblxuICBpZiAoZnMuZXhpc3RzU3luYyhzZXR0aW5nc1BhdGgpKSB7XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IGV4aXN0aW5nID0gSlNPTi5wYXJzZShmcy5yZWFkRmlsZVN5bmMoc2V0dGluZ3NQYXRoLCBcInV0Zi04XCIpKTtcbiAgICAgIGNvbnN0IGN1cnJlbnQ6IHN0cmluZ1tdID0gQXJyYXkuaXNBcnJheShleGlzdGluZy5lbmFibGVkTWNwanNvblNlcnZlcnMpID8gZXhpc3RpbmcuZW5hYmxlZE1jcGpzb25TZXJ2ZXJzIDogW107XG4gICAgICBpZiAoY3VycmVudC5pbmNsdWRlcyhNQ1BfTkFNRSkpIHtcbiAgICAgICAgcmV0dXJuIHsgd3JpdHRlbjogZmFsc2UsIG1lcmdlZDogZmFsc2UsIGFscmVhZHlBcHByb3ZlZDogdHJ1ZSB9O1xuICAgICAgfVxuICAgICAgZXhpc3RpbmcuZW5hYmxlZE1jcGpzb25TZXJ2ZXJzID0gWy4uLmN1cnJlbnQsIE1DUF9OQU1FXTtcbiAgICAgIGZzLndyaXRlRmlsZVN5bmMoc2V0dGluZ3NQYXRoLCBKU09OLnN0cmluZ2lmeShleGlzdGluZywgbnVsbCwgMiksIFwidXRmLThcIik7XG4gICAgICByZXR1cm4geyB3cml0dGVuOiB0cnVlLCBtZXJnZWQ6IHRydWUsIGFscmVhZHlBcHByb3ZlZDogZmFsc2UgfTtcbiAgICB9IGNhdGNoIHtcbiAgICAgIHJldHVybiB7IHdyaXR0ZW46IGZhbHNlLCBtZXJnZWQ6IGZhbHNlLCBhbHJlYWR5QXBwcm92ZWQ6IGZhbHNlIH07XG4gICAgfVxuICB9XG5cbiAgY29uc3QgY29uZmlnID0ge1xuICAgIGVuYWJsZWRNY3Bqc29uU2VydmVyczogW01DUF9OQU1FXSxcbiAgfTtcbiAgZnMud3JpdGVGaWxlU3luYyhzZXR0aW5nc1BhdGgsIEpTT04uc3RyaW5naWZ5KGNvbmZpZywgbnVsbCwgMiksIFwidXRmLThcIik7XG4gIHJldHVybiB7IHdyaXR0ZW46IHRydWUsIG1lcmdlZDogZmFsc2UsIGFscmVhZHlBcHByb3ZlZDogZmFsc2UgfTtcbn1cblxuZnVuY3Rpb24gd3JpdGVDbGF1ZGVSdWxlc0ZpbGUoZGlyOiBzdHJpbmcsIHJ1bGVzU291cmNlOiBzdHJpbmcgPSBSVUxFU19TT1VSQ0UsIGZhbGxiYWNrVXJsPzogc3RyaW5nKTogeyB3cml0dGVuOiBib29sZWFuOyBza2lwcGVkOiBib29sZWFuIH0ge1xuICBjb25zdCBkZXN0UGF0aCA9IHBhdGguam9pbihkaXIsIFwiQ0xBVURFLm1kXCIpO1xuXG4gIC8vIERvbid0IG92ZXJ3cml0ZSBhbiBleGlzdGluZyBDTEFVREUubWQgXHUyMDE0IGl0IG1heSBoYXZlIGN1c3RvbSBpbnN0cnVjdGlvbnNcbiAgaWYgKGZzLmV4aXN0c1N5bmMoZGVzdFBhdGgpKSB7XG4gICAgY29uc3QgY29udGVudCA9IGZzLnJlYWRGaWxlU3luYyhkZXN0UGF0aCwgXCJ1dGYtOFwiKTtcbiAgICBpZiAoY29udGVudC5pbmNsdWRlcyhcIlBhdGggVGVybWluYWwgU0RLXCIpKSB7XG4gICAgICByZXR1cm4geyB3cml0dGVuOiBmYWxzZSwgc2tpcHBlZDogdHJ1ZSB9O1xuICAgIH1cbiAgICAvLyBBcHBlbmQgdG8gZXhpc3RpbmcgQ0xBVURFLm1kXG4gICAgY29uc3QgcnVsZXMgPSBsb2FkUnVsZXNDb250ZW50KHJ1bGVzU291cmNlLCBmYWxsYmFja1VybCk7XG4gICAgaWYgKCFydWxlcykgcmV0dXJuIHsgd3JpdHRlbjogZmFsc2UsIHNraXBwZWQ6IGZhbHNlIH07XG4gICAgZnMuYXBwZW5kRmlsZVN5bmMoZGVzdFBhdGgsIFwiXFxuXFxuXCIgKyBydWxlcywgXCJ1dGYtOFwiKTtcbiAgICByZXR1cm4geyB3cml0dGVuOiB0cnVlLCBza2lwcGVkOiBmYWxzZSB9O1xuICB9XG5cbiAgY29uc3QgcnVsZXMgPSBsb2FkUnVsZXNDb250ZW50KHJ1bGVzU291cmNlLCBmYWxsYmFja1VybCk7XG4gIGlmICghcnVsZXMpIHJldHVybiB7IHdyaXR0ZW46IGZhbHNlLCBza2lwcGVkOiBmYWxzZSB9O1xuICBmcy53cml0ZUZpbGVTeW5jKGRlc3RQYXRoLCBydWxlcywgXCJ1dGYtOFwiKTtcbiAgcmV0dXJuIHsgd3JpdHRlbjogdHJ1ZSwgc2tpcHBlZDogZmFsc2UgfTtcbn1cblxuZnVuY3Rpb24gbG9hZFJ1bGVzQ29udGVudChydWxlc1NvdXJjZTogc3RyaW5nID0gUlVMRVNfU09VUkNFLCBmYWxsYmFja1VybD86IHN0cmluZyk6IHN0cmluZyB8IG51bGwge1xuICBsZXQgcmF3OiBzdHJpbmcgfCBudWxsID0gbnVsbDtcblxuICBpZiAoZnMuZXhpc3RzU3luYyhydWxlc1NvdXJjZSkpIHtcbiAgICByYXcgPSBmcy5yZWFkRmlsZVN5bmMocnVsZXNTb3VyY2UsIFwidXRmLThcIik7XG4gIH0gZWxzZSBpZiAoZmFsbGJhY2tVcmwpIHtcbiAgICB0cnkge1xuICAgICAgcmF3ID0gZXhlY1N5bmMoYGN1cmwgLXNmIC0tbWF4LXRpbWUgMTAgXCIke2ZhbGxiYWNrVXJsfVwiYCwgeyBlbmNvZGluZzogXCJ1dGYtOFwiIH0pO1xuICAgIH0gY2F0Y2gge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuICB9XG5cbiAgaWYgKCFyYXcpIHJldHVybiBudWxsO1xuXG4gIC8vIFN0cmlwIHRoZSBZQU1MIGZyb250bWF0dGVyICgtLS0gLi4uIC0tLSkgdGhhdCBDdXJzb3IgdXNlc1xuICBjb25zdCBzdHJpcHBlZCA9IHJhdy5yZXBsYWNlKC9eLS0tW1xcc1xcU10qPy0tLVxccyovLCBcIlwiKTtcbiAgcmV0dXJuIHN0cmlwcGVkLnRyaW0oKTtcbn1cblxuLy8gXHUyNTAwXHUyNTAwXHUyNTAwIFNoYXJlZCBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcblxuZnVuY3Rpb24gY2hlY2tJbmZvUGxpc3QoZGlyOiBzdHJpbmcpOiBzdHJpbmdbXSB7XG4gIGNvbnN0IGlzc3Vlczogc3RyaW5nW10gPSBbXTtcbiAgY29uc3QgcGxpc3RGaWxlczogc3RyaW5nW10gPSBbXTtcblxuICBmdW5jdGlvbiBmaW5kUGxpc3RzKGQ6IHN0cmluZywgZGVwdGg6IG51bWJlciA9IDApIHtcbiAgICBpZiAoZGVwdGggPiA0KSByZXR1cm47XG4gICAgY29uc3QgZW50cmllcyA9IGZzLnJlYWRkaXJTeW5jKGQpO1xuICAgIGZvciAoY29uc3QgZSBvZiBlbnRyaWVzKSB7XG4gICAgICBpZiAoZSA9PT0gXCJub2RlX21vZHVsZXNcIiB8fCBlLnN0YXJ0c1dpdGgoXCIuXCIpKSBjb250aW51ZTtcbiAgICAgIGNvbnN0IGZ1bGwgPSBwYXRoLmpvaW4oZCwgZSk7XG4gICAgICBjb25zdCBzdGF0ID0gZnMuc3RhdFN5bmMoZnVsbCk7XG4gICAgICBpZiAoc3RhdC5pc0RpcmVjdG9yeSgpKSBmaW5kUGxpc3RzKGZ1bGwsIGRlcHRoICsgMSk7XG4gICAgICBlbHNlIGlmIChlID09PSBcIkluZm8ucGxpc3RcIikgcGxpc3RGaWxlcy5wdXNoKGZ1bGwpO1xuICAgIH1cbiAgfVxuXG4gIGZpbmRQbGlzdHMoZGlyKTtcblxuICBmb3IgKGNvbnN0IHBsaXN0IG9mIHBsaXN0RmlsZXMpIHtcbiAgICBjb25zdCBjb250ZW50ID0gZnMucmVhZEZpbGVTeW5jKHBsaXN0LCBcInV0Zi04XCIpO1xuICAgIGlmICghY29udGVudC5pbmNsdWRlcyhcIk5TQmx1ZXRvb3RoQWx3YXlzVXNhZ2VEZXNjcmlwdGlvblwiKSkge1xuICAgICAgaXNzdWVzLnB1c2gocGxpc3QpO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBpc3N1ZXM7XG59XG5cbi8vIFx1MjUwMFx1MjUwMFx1MjUwMCBBbmRyb2lkIGhlbHBlcnMgXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXG5cbmZ1bmN0aW9uIGZpbmRBbmRyb2lkUHJvamVjdChkaXI6IHN0cmluZyk6IGJvb2xlYW4ge1xuICByZXR1cm4gZnMuZXhpc3RzU3luYyhwYXRoLmpvaW4oZGlyLCBcInNldHRpbmdzLmdyYWRsZS5rdHNcIikpICYmXG4gICAgICAgICBmcy5leGlzdHNTeW5jKHBhdGguam9pbihkaXIsIFwiYXBwXCIsIFwiYnVpbGQuZ3JhZGxlLmt0c1wiKSk7XG59XG5cbmZ1bmN0aW9uIGhhc0FuZHJvaWRTREtEZXBlbmRlbmN5KGRpcjogc3RyaW5nKTogYm9vbGVhbiB7XG4gIC8vIEluc3RhbGxlZCA9IHRoZSBQYXRoIE1hdmVuIHJlcG8gaXMgcmVnaXN0ZXJlZCBBTkQgYSB0ZWNoLnBhdGgyYWkuc2RrIGRlcCBpcyBwcmVzZW50LlxuICBjb25zdCBzZXR0aW5nc1BhdGggPSBwYXRoLmpvaW4oZGlyLCBcInNldHRpbmdzLmdyYWRsZS5rdHNcIik7XG4gIGlmICghZnMuZXhpc3RzU3luYyhzZXR0aW5nc1BhdGgpKSByZXR1cm4gZmFsc2U7XG4gIGNvbnN0IHNldHRpbmdzID0gZnMucmVhZEZpbGVTeW5jKHNldHRpbmdzUGF0aCwgXCJ1dGYtOFwiKTtcbiAgaWYgKCFzZXR0aW5ncy5pbmNsdWRlcyhQQVRIX01BVkVOX1VSTCkpIHJldHVybiBmYWxzZTtcbiAgY29uc3QgYnVpbGRQYXRoID0gcGF0aC5qb2luKGRpciwgXCJhcHBcIiwgXCJidWlsZC5ncmFkbGUua3RzXCIpO1xuICBpZiAoIWZzLmV4aXN0c1N5bmMoYnVpbGRQYXRoKSkgcmV0dXJuIHRydWU7XG4gIGNvbnN0IGJ1aWxkID0gZnMucmVhZEZpbGVTeW5jKGJ1aWxkUGF0aCwgXCJ1dGYtOFwiKTtcbiAgcmV0dXJuIC9eXFxzKmltcGxlbWVudGF0aW9uXFwoXCJ0ZWNoXFwucGF0aDJhaVxcLnNkazpwYXRoLXRlcm1pbmFsLXNkay9tLnRlc3QoYnVpbGQpO1xufVxuXG5mdW5jdGlvbiBpbmplY3RQYXRoTWF2ZW5SZXBvKGRpcjogc3RyaW5nKTogYm9vbGVhbiB7XG4gIGNvbnN0IHNldHRpbmdzUGF0aCA9IHBhdGguam9pbihkaXIsIFwic2V0dGluZ3MuZ3JhZGxlLmt0c1wiKTtcbiAgaWYgKCFmcy5leGlzdHNTeW5jKHNldHRpbmdzUGF0aCkpIHJldHVybiBmYWxzZTtcbiAgbGV0IGNvbnRlbnQgPSBmcy5yZWFkRmlsZVN5bmMoc2V0dGluZ3NQYXRoLCBcInV0Zi04XCIpO1xuICBpZiAoY29udGVudC5pbmNsdWRlcyhQQVRIX01BVkVOX1VSTCkpIHJldHVybiB0cnVlOyAvLyBhbHJlYWR5IHByZXNlbnRcbiAgLy8gQWRkIHRoZSBQYXRoIE1hdmVuIHJlcG8gaW5zaWRlIGRlcGVuZGVuY3lSZXNvbHV0aW9uTWFuYWdlbWVudCByZXBvc2l0b3JpZXMgYmxvY2tcbiAgY29uc3QgcmVwb1JlZ2V4ID0gLyhkZXBlbmRlbmN5UmVzb2x1dGlvbk1hbmFnZW1lbnRcXHMqXFx7W159XSpyZXBvc2l0b3JpZXNcXHMqXFx7KS9zO1xuICBpZiAoIXJlcG9SZWdleC50ZXN0KGNvbnRlbnQpKSByZXR1cm4gZmFsc2U7XG4gIGNvbnRlbnQgPSBjb250ZW50LnJlcGxhY2UocmVwb1JlZ2V4LCBgJDFcXG4gICAgICAgIG1hdmVuIHsgdXJsID0gdXJpKFwiJHtQQVRIX01BVkVOX1VSTH1cIikgfWApO1xuICBmcy53cml0ZUZpbGVTeW5jKHNldHRpbmdzUGF0aCwgY29udGVudCwgXCJ1dGYtOFwiKTtcbiAgcmV0dXJuIHRydWU7XG59XG5cbmZ1bmN0aW9uIGluamVjdEdyYWRsZURlcGVuZGVuY2llcyhkaXI6IHN0cmluZyk6IGJvb2xlYW4ge1xuICBjb25zdCBidWlsZFBhdGggPSBwYXRoLmpvaW4oZGlyLCBcImFwcFwiLCBcImJ1aWxkLmdyYWRsZS5rdHNcIik7XG4gIGlmICghZnMuZXhpc3RzU3luYyhidWlsZFBhdGgpKSByZXR1cm4gZmFsc2U7XG4gIGxldCBjb250ZW50ID0gZnMucmVhZEZpbGVTeW5jKGJ1aWxkUGF0aCwgXCJ1dGYtOFwiKTtcblxuICAvLyBBbHJlYWR5IHByZXNlbnQgYW5kIHVuY29tbWVudGVkIFx1MjAxNCBub3RoaW5nIHRvIGRvXG4gIGlmICgvXlxccyppbXBsZW1lbnRhdGlvblxcKFwidGVjaFxcLnBhdGgyYWlcXC5zZGs6cGF0aC10ZXJtaW5hbC1zZGsvbS50ZXN0KGNvbnRlbnQpKSByZXR1cm4gdHJ1ZTtcblxuICBjb25zdCBkZXBzID0gQU5EUk9JRF9TREtfTU9EVUxFU1xuICAgIC5tYXAoKG0pID0+IGAgICAgaW1wbGVtZW50YXRpb24oXCIke0FORFJPSURfU0RLX0dST1VQfToke219OiR7QU5EUk9JRF9TREtfVkVSU0lPTn1cIilgKVxuICAgIC5qb2luKFwiXFxuXCIpICsgXCJcXG5cIjtcblxuICAvLyBQcmVzZW50IGJ1dCBjb21tZW50ZWQgb3V0IChvbGRlciBoYXJuZXNzIHNjYWZmb2xkcykgXHUyMDE0IHVuY29tbWVudC9yZXBsYWNlIHRob3NlIGxpbmVzXG4gIGlmICgvcGF0aC10ZXJtaW5hbC1zZGstYW5kcm9pZHx0ZWNoXFwucGF0aDJhaVxcLnNkay8udGVzdChjb250ZW50KSkge1xuICAgIGZvciAoY29uc3QgbSBvZiBBTkRST0lEX1NES19NT0RVTEVTKSB7XG4gICAgICBjb25zdCBjb21tZW50ZWQgPSBuZXcgUmVnRXhwKGBeXFxcXHMqLy9cXFxccyppbXBsZW1lbnRhdGlvblxcXFwoKD86XCJ8JykoPzpjb21cXFxcLmdpdGh1YlxcXFwua2V5bWFuMTJcXFxcLnBhdGgtdGVybWluYWwtc2RrLWFuZHJvaWR8dGVjaFxcXFwucGF0aDJhaVxcXFwuc2RrKToke219W15cIicpXSooPzpcInwnKVxcXFwpYCwgXCJnbVwiKTtcbiAgICAgIGNvbnRlbnQgPSBjb250ZW50LnJlcGxhY2UoY29tbWVudGVkLCBgICAgIGltcGxlbWVudGF0aW9uKFwiJHtBTkRST0lEX1NES19HUk9VUH06JHttfToke0FORFJPSURfU0RLX1ZFUlNJT059XCIpYCk7XG4gICAgfVxuICAgIC8vIElmIHBhdGgtcHNkay1hZGFwdGVyIHdhc24ndCBpbiB0aGUgb2xkIHNjYWZmb2xkLCBhZGQgdGhlIHdob2xlIGJsb2NrIG9uY2UuXG4gICAgaWYgKCEvdGVjaFxcLnBhdGgyYWlcXC5zZGs6cGF0aC1wc2RrLWFkYXB0ZXIvLnRlc3QoY29udGVudCkpIHtcbiAgICAgIGNvbnRlbnQgPSBjb250ZW50LnJlcGxhY2UoLyhkZXBlbmRlbmNpZXNcXHMqXFx7KS8sIGAkMVxcbiR7ZGVwc31gKTtcbiAgICB9XG4gICAgZnMud3JpdGVGaWxlU3luYyhidWlsZFBhdGgsIGNvbnRlbnQsIFwidXRmLThcIik7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cblxuICAvLyBOb3QgcHJlc2VudCBhdCBhbGwgXHUyMDE0IGluamVjdCBhZnRlciB0aGUgZGVwZW5kZW5jaWVzIHsgb3BlbmluZyBicmFjZVxuICBjb25zdCBkZXBzUmVnZXggPSAvKGRlcGVuZGVuY2llc1xccypcXHspLztcbiAgaWYgKCFkZXBzUmVnZXgudGVzdChjb250ZW50KSkgcmV0dXJuIGZhbHNlO1xuICBjb250ZW50ID0gY29udGVudC5yZXBsYWNlKGRlcHNSZWdleCwgYCQxXFxuJHtkZXBzfWApO1xuICBmcy53cml0ZUZpbGVTeW5jKGJ1aWxkUGF0aCwgY29udGVudCwgXCJ1dGYtOFwiKTtcbiAgcmV0dXJuIHRydWU7XG59XG5cbmZ1bmN0aW9uIGNoZWNrQW5kcm9pZE1hbmlmZXN0KGRpcjogc3RyaW5nKTogc3RyaW5nW10ge1xuICBjb25zdCBpc3N1ZXM6IHN0cmluZ1tdID0gW107XG4gIGZ1bmN0aW9uIGZpbmRNYW5pZmVzdHMoZDogc3RyaW5nLCBkZXB0aDogbnVtYmVyID0gMCkge1xuICAgIGlmIChkZXB0aCA+IDQpIHJldHVybjtcbiAgICBmb3IgKGNvbnN0IGUgb2YgZnMucmVhZGRpclN5bmMoZCkpIHtcbiAgICAgIGlmIChlLnN0YXJ0c1dpdGgoXCIuXCIpIHx8IGUgPT09IFwiYnVpbGRcIikgY29udGludWU7XG4gICAgICBjb25zdCBmdWxsID0gcGF0aC5qb2luKGQsIGUpO1xuICAgICAgY29uc3Qgc3RhdCA9IGZzLnN0YXRTeW5jKGZ1bGwpO1xuICAgICAgaWYgKHN0YXQuaXNEaXJlY3RvcnkoKSkgZmluZE1hbmlmZXN0cyhmdWxsLCBkZXB0aCArIDEpO1xuICAgICAgZWxzZSBpZiAoZSA9PT0gXCJBbmRyb2lkTWFuaWZlc3QueG1sXCIpIHtcbiAgICAgICAgY29uc3QgY29udGVudCA9IGZzLnJlYWRGaWxlU3luYyhmdWxsLCBcInV0Zi04XCIpO1xuICAgICAgICBpZiAoIWNvbnRlbnQuaW5jbHVkZXMoXCJCTFVFVE9PVEhfU0NBTlwiKSkgaXNzdWVzLnB1c2goZnVsbCk7XG4gICAgICB9XG4gICAgfVxuICB9XG4gIGZpbmRNYW5pZmVzdHMoZGlyKTtcbiAgcmV0dXJuIGlzc3Vlcztcbn1cblxuLy8gXHUyNTAwXHUyNTAwXHUyNTAwIFdpbmRvd3MgaGVscGVycyAoLk5FVCBcdTIwMTQgV2luVUkgMyAvIC5ORVQgMTAgYW5kIFdQRiAvIC5ORVQgRlcgNC44KSBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcblxuLy8gQ29sbGVjdCAuY3Nwcm9qIGZpbGUgcGF0aHMgaW4gY3dkIGFuZCBvbmUgbGV2ZWwgZGVlcC5cbmZ1bmN0aW9uIGZpbmRDc3Byb2pGaWxlcyhkaXI6IHN0cmluZyk6IHN0cmluZ1tdIHtcbiAgY29uc3QgZm91bmQ6IHN0cmluZ1tdID0gW107XG4gIGNvbnN0IHdhbGsgPSAoZDogc3RyaW5nLCBkZXB0aDogbnVtYmVyKSA9PiB7XG4gICAgaWYgKGRlcHRoID4gMSkgcmV0dXJuO1xuICAgIGxldCBlbnRyaWVzOiBzdHJpbmdbXSA9IFtdO1xuICAgIHRyeSB7IGVudHJpZXMgPSBmcy5yZWFkZGlyU3luYyhkKTsgfSBjYXRjaCB7IHJldHVybjsgfVxuICAgIGZvciAoY29uc3QgZSBvZiBlbnRyaWVzKSB7XG4gICAgICBpZiAoZS5zdGFydHNXaXRoKFwiLlwiKSB8fCBlID09PSBcImJpblwiIHx8IGUgPT09IFwib2JqXCIpIGNvbnRpbnVlO1xuICAgICAgY29uc3QgZnVsbCA9IHBhdGguam9pbihkLCBlKTtcbiAgICAgIHRyeSB7XG4gICAgICAgIGNvbnN0IHN0ID0gZnMuc3RhdFN5bmMoZnVsbCk7XG4gICAgICAgIGlmIChzdC5pc0RpcmVjdG9yeSgpKSB3YWxrKGZ1bGwsIGRlcHRoICsgMSk7XG4gICAgICAgIGVsc2UgaWYgKGUuZW5kc1dpdGgoXCIuY3Nwcm9qXCIpKSBmb3VuZC5wdXNoKGZ1bGwpO1xuICAgICAgfSBjYXRjaCB7IC8qIHNraXAgKi8gfVxuICAgIH1cbiAgfTtcbiAgd2FsayhkaXIsIDApO1xuICByZXR1cm4gZm91bmQ7XG59XG5cbi8vIEEgV2luZG93cyBwcm9qZWN0ID0gYSAuc2xuIG9yIGEgLmNzcHJvaiBpbiBjd2Qgb3Igb25lIGxldmVsIGRlZXAuXG5mdW5jdGlvbiBmaW5kV2luZG93c1Byb2plY3QoZGlyOiBzdHJpbmcpOiBib29sZWFuIHtcbiAgbGV0IGVudHJpZXM6IHN0cmluZ1tdID0gW107XG4gIHRyeSB7IGVudHJpZXMgPSBmcy5yZWFkZGlyU3luYyhkaXIpOyB9IGNhdGNoIHsgcmV0dXJuIGZhbHNlOyB9XG4gIGlmIChlbnRyaWVzLnNvbWUoKGUpID0+IGUuZW5kc1dpdGgoXCIuc2xuXCIpKSkgcmV0dXJuIHRydWU7XG4gIHJldHVybiBmaW5kQ3Nwcm9qRmlsZXMoZGlyKS5sZW5ndGggPiAwO1xufVxuXG4vLyBXaW4xMSA9IFdpblVJIDMgLyAuTkVUIDEwIChuZXQxMC4wLXdpbmRvd3MpOyBXaW4xMCA9IFdQRiAvIC5ORVQgRnJhbWV3b3JrIDQuOCAobmV0NDgpLlxuLy8gRGVmYXVsdCB0byBXaW5kb3dzIDExICh0aGUgbW9kZXJuIHN0YWNrKSB3aGVuIHRoZSBzaWduYWwgaXMgYW1iaWd1b3VzLlxuZnVuY3Rpb24gZGV0ZWN0V2luZG93c0ZsYXZvdXIoZGlyOiBzdHJpbmcpOiBcIndpbmRvd3MxMVwiIHwgXCJ3aW5kb3dzMTBcIiB7XG4gIGNvbnN0IGJsb2IgPSBmaW5kQ3Nwcm9qRmlsZXMoZGlyKS5tYXAoKGYpID0+IHtcbiAgICB0cnkgeyByZXR1cm4gZnMucmVhZEZpbGVTeW5jKGYsIFwidXRmLThcIik7IH0gY2F0Y2ggeyByZXR1cm4gXCJcIjsgfVxuICB9KS5qb2luKFwiXFxuXCIpLnRvTG93ZXJDYXNlKCk7XG4gIGlmIChibG9iLmluY2x1ZGVzKFwibmV0NDhcIikgfHwgYmxvYi5pbmNsdWRlcyhcIjx1c2V3cGY+dHJ1ZVwiKSB8fCBibG9iLmluY2x1ZGVzKFwidjQuOFwiKSkgcmV0dXJuIFwid2luZG93czEwXCI7XG4gIHJldHVybiBcIndpbmRvd3MxMVwiO1xufVxuXG5mdW5jdGlvbiBoYXNXaW5kb3dzU0RLRGVwZW5kZW5jeShkaXI6IHN0cmluZyk6IGJvb2xlYW4ge1xuICByZXR1cm4gZmluZENzcHJvakZpbGVzKGRpcikuc29tZSgoZikgPT4ge1xuICAgIHRyeSB7IHJldHVybiAvUGF0aFxcLlRlcm1pbmFsXFwuU2RrLy50ZXN0KGZzLnJlYWRGaWxlU3luYyhmLCBcInV0Zi04XCIpKTsgfSBjYXRjaCB7IHJldHVybiBmYWxzZTsgfVxuICB9KTtcbn1cblxuLy8gXHUyNTAwXHUyNTAwXHUyNTAwIFN1bW1hcnkgaGVscGVycyBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcblxuZnVuY3Rpb24gcGxhdGZvcm1MYWJlbChwbGF0Zm9ybTogUGxhdGZvcm0pOiBzdHJpbmcge1xuICBzd2l0Y2ggKHBsYXRmb3JtKSB7XG4gICAgY2FzZSBcImFuZHJvaWRcIjogcmV0dXJuIFwiQW5kcm9pZFwiO1xuICAgIGNhc2UgXCJ3aW5kb3dzMTFcIjogcmV0dXJuIFwiV2luZG93cyAxMSAoV2luVUkgMyAvIC5ORVQgMTApXCI7XG4gICAgY2FzZSBcIndpbmRvd3MxMFwiOiByZXR1cm4gXCJXaW5kb3dzIDEwIChXUEYgLyAuTkVUIEZXIDQuOClcIjtcbiAgICBkZWZhdWx0OiByZXR1cm4gXCJpT1NcIjtcbiAgfVxufVxuXG5mdW5jdGlvbiBwcmludFN1bW1hcnkoYWdlbnQ6IEFnZW50VHlwZSwgcGxhdGZvcm06IFBsYXRmb3JtLCBhY3Rpb25zOiBzdHJpbmdbXSwgd2FybmluZ3M6IHN0cmluZ1tdLCBtYW51YWxTdGVwczogc3RyaW5nW10pIHtcbiAgY29uc3QgaXNBbmRyb2lkID0gcGxhdGZvcm0gPT09IFwiYW5kcm9pZFwiO1xuICBjb25zdCBpc1dpbmRvd3MgPSBwbGF0Zm9ybSA9PT0gXCJ3aW5kb3dzMTFcIiB8fCBwbGF0Zm9ybSA9PT0gXCJ3aW5kb3dzMTBcIjtcbiAgY29uc29sZS5sb2coXCJcXG5cIiArIGNoYWxrLmJvbGQoXCJcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcIikpO1xuICBjb25zb2xlLmxvZyhjaGFsay5ib2xkKGAgIFBhdGggVGVybWluYWwgU0RLIFx1MjAxNCBTZXR1cCBDb21wbGV0ZSAoJHtwbGF0Zm9ybUxhYmVsKHBsYXRmb3JtKX0pYCkpO1xuICBjb25zb2xlLmxvZyhjaGFsay5ib2xkKFwiXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXFxuXCIpKTtcblxuICBpZiAoYWN0aW9ucy5sZW5ndGggPiAwKSB7XG4gICAgY29uc29sZS5sb2coY2hhbGsuZ3JlZW4oXCJcdTI3MTMgRG9uZTpcIikpO1xuICAgIGFjdGlvbnMuZm9yRWFjaCgoYSkgPT4gY29uc29sZS5sb2coY2hhbGsuZ3JlZW4oYCAgXHUyMDIyICR7YX1gKSkpO1xuICAgIGNvbnNvbGUubG9nKCk7XG4gIH1cblxuICBpZiAobWFudWFsU3RlcHMubGVuZ3RoID4gMCkge1xuICAgIGNvbnNvbGUubG9nKGNoYWxrLnllbGxvdyhcIlx1MjZBMCBNYW51YWwgc3RlcHMgcmVxdWlyZWQ6XCIpKTtcbiAgICBtYW51YWxTdGVwcy5mb3JFYWNoKChzLCBpKSA9PiBjb25zb2xlLmxvZyhjaGFsay55ZWxsb3coYCAgJHtpICsgMX0uICR7c31gKSkpO1xuICAgIGNvbnNvbGUubG9nKCk7XG4gIH1cblxuICBpZiAod2FybmluZ3MubGVuZ3RoID4gMCkge1xuICAgIGNvbnNvbGUubG9nKGNoYWxrLmRpbShcIlx1MjEzOSBOb3RlczpcIikpO1xuICAgIHdhcm5pbmdzLmZvckVhY2goKHcpID0+IGNvbnNvbGUubG9nKGNoYWxrLmRpbShgICBcdTIwMjIgJHt3fWApKSk7XG4gICAgY29uc29sZS5sb2coKTtcbiAgfVxuXG4gIC8vIENhbm9uaWNhbCBmaXJzdC1wcm9tcHQgdGV4dCBcdTIwMTQgaWRlbnRpY2FsIGZvciBDbGF1ZGUgQ29kZSBhbmQgQ3Vyc29yIHNvIHRoZVxuICAvLyBhZ2VudCByZWNlaXZlcyB0aGUgc2FtZSBkaXJlY3RpdmUgcmVnYXJkbGVzcyBvZiB0aGUgZGV2ZWxvcGVyJ3MgSURFLlxuICBjb25zdCBtY3BQcm9tcHQgPVxuICAgIHBsYXRmb3JtID09PSBcImFuZHJvaWRcIiA/IFwiaW50ZWdyYXRlLXBhdGgtYW5kcm9pZFwiIDpcbiAgICBwbGF0Zm9ybSA9PT0gXCJ3aW5kb3dzMTFcIiA/IFwiaW50ZWdyYXRlLXBhdGgtd2luZG93czExXCIgOlxuICAgIHBsYXRmb3JtID09PSBcIndpbmRvd3MxMFwiID8gXCJpbnRlZ3JhdGUtcGF0aC13aW5kb3dzMTBcIiA6XG4gICAgXCJpbnRlZ3JhdGUtcGF0aC1zYWxlXCI7XG4gIGNvbnN0IGZpcnN0UHJvbXB0ID1cbiAgICAnICBcIkludGVncmF0ZSB0aGUgUGF0aCBUZXJtaW5hbCBTREsgaW50byB0aGlzIEVQT1MgYXBwLiBSZWFkIENMQVVERS5tZFxcbicgK1xuICAgICcgICBmb3IgdGhlIGludGVncmF0aW9uIHJ1bGVzLCB0aGVuIHVzZSB0aGUgUGF0aCBNQ1AgJyArIG1jcFByb21wdCArICdcXG4nICtcbiAgICAnICAgcHJvbXB0IHRvIGFkZCBhIFBhdGggUE9TIEFkYXB0ZXIgaW4gU2V0dGluZ3MgXHUyMDE0IGEgYmFja2VuZCBzd2l0Y2hlciBmb3IgdGhlXFxuJyArXG4gICAgJyAgIFBhdGggUE9TIEVtdWxhdG9yIChXaS1GaS9JUCBvciBCbHVldG9vdGgpIGFuZCBhIHJlYWwgVmVyaWZvbmUgdGVybWluYWwuXCInO1xuXG4gIGlmIChhZ2VudCA9PT0gXCJjbGF1ZGVcIikge1xuICAgIGNvbnNvbGUubG9nKGNoYWxrLmJvbGQoXCJcdUQ4M0RcdURFODAgU3RhcnQgQ2xhdWRlIENvZGUgaW4gdGhpcyBkaXJlY3Rvcnk6XCIpKTtcbiAgICBjb25zb2xlLmxvZyhjaGFsay5jeWFuKFwiICBjbGF1ZGUgLS1tb2RlbCBzb25uZXRcIikpO1xuICAgIGNvbnNvbGUubG9nKCk7XG4gICAgY29uc29sZS5sb2coY2hhbGsuYm9sZChcIiAgVGhlbiBwYXN0ZSB0aGlzIHByb21wdDpcIikpO1xuICAgIGNvbnNvbGUubG9nKGNoYWxrLmN5YW4oZmlyc3RQcm9tcHQpKTtcbiAgfSBlbHNlIHtcbiAgICBjb25zb2xlLmxvZyhjaGFsay5ib2xkKFwiXHVEODNEXHVERTgwIFlvdXIgZmlyc3QgcHJvbXB0IGluIEN1cnNvcjpcIikpO1xuICAgIGNvbnNvbGUubG9nKGNoYWxrLmN5YW4oZmlyc3RQcm9tcHQpKTtcbiAgfVxuXG4gIGNvbnNvbGUubG9nKCk7XG4gIGNvbnNvbGUubG9nKGNoYWxrLmRpbShgICBNQ1Agc2VydmVyOiAke01DUF9TRVJWRVJfVVJMfWApKTtcbiAgY29uc29sZS5sb2coY2hhbGsuZGltKFwiICBEb2NzOiAgICAgICBodHRwczovL21jcC5wYXRoMmFpLnRlY2gvaGVhbHRoXCIpKTtcbiAgY29uc29sZS5sb2coKTtcbn1cblxuLy8gXHUyNTAwXHUyNTAwXHUyNTAwIE1haW4gXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXG5cbnByb2dyYW1cbiAgLm5hbWUoXCJwYXRoLXRlcm1pbmFsLWluaXRcIilcbiAgLmRlc2NyaXB0aW9uKFxuICAgIFwiU2V0IHVwIHRoZSBQYXRoIFRlcm1pbmFsIFNESyBpbnRlZ3JhdGlvbiBhc3Npc3RhbnQgZm9yIHlvdXIgRVBPUyBwcm9qZWN0LlxcblwiICtcbiAgICAgIFwiQXV0by1kZXRlY3RzIHBsYXRmb3JtIChpT1MsIEFuZHJvaWQsIG9yIFdpbmRvd3MpIGZyb20gdGhlIGN1cnJlbnQgZGlyZWN0b3J5LlxcblwiICtcbiAgICAgIFwiQ29uZmlndXJlcyBNQ1Agc2VydmVyIGFjY2VzcywgZHJvcHMgdGhlIGludGVncmF0aW9uIHJlY2lwZSwgYW5kIG9wdGlvbmFsbHlcXG5cIiArXG4gICAgICBcImFkZHMgdGhlIFNESyBkZXBlbmRlbmN5LlxcblxcblwiICtcbiAgICAgIFwiU3VwcG9ydGVkIGFnZW50czogY2xhdWRlIChkZWZhdWx0KSwgY3Vyc29yXFxuXCIgK1xuICAgICAgXCJTdXBwb3J0ZWQgcGxhdGZvcm1zOiBpb3MgKGRlZmF1bHQpLCBhbmRyb2lkLCB3aW5kb3dzMTEgKFdpblVJIDMgLyAuTkVUIDEwKSxcXG5cIiArXG4gICAgICBcIndpbmRvd3MxMCAoV1BGIC8gLk5FVCBGVyA0LjgpLiBVc2UgJ3dpbmRvd3MnIHRvIGF1dG8tcGljayB0aGUgV2luZG93cyBmbGF2b3VyLlwiXG4gIClcbiAgLnZlcnNpb24oXCIwLjIuMFwiKVxuICAub3B0aW9uKFwiLS10b29scy1vbmx5XCIsIFwiT25seSBjb25maWd1cmUgTUNQICsgcnVsZXMuIFNraXAgU0RLIGluc3RhbGxhdGlvbi5cIilcbiAgLm9wdGlvbihcIi0tYWdlbnQgPG5hbWU+XCIsIFwiQUkgYWdlbnQgdG8gY29uZmlndXJlOiAnY2xhdWRlJyAoZGVmYXVsdCkgb3IgJ2N1cnNvcicuXCIsIFwiY2xhdWRlXCIpXG4gIC5vcHRpb24oXCItLXBsYXRmb3JtIDxuYW1lPlwiLCBcIlBsYXRmb3JtOiBpb3MgfCBhbmRyb2lkIHwgd2luZG93cyB8IHdpbmRvd3MxMSB8IHdpbmRvd3MxMC4gQXV0by1kZXRlY3RlZCBpZiBub3Qgc3BlY2lmaWVkLlwiKVxuICAuYWN0aW9uKGFzeW5jIChvcHRpb25zKSA9PiB7XG4gICAgY29uc3QgdG9vbHNPbmx5OiBib29sZWFuID0gb3B0aW9ucy50b29sc09ubHkgPz8gZmFsc2U7XG4gICAgY29uc3QgYWdlbnQ6IEFnZW50VHlwZSA9IChvcHRpb25zLmFnZW50ID8/IFwiY2xhdWRlXCIpIGFzIEFnZW50VHlwZTtcbiAgICBjb25zdCBjd2QgPSBwcm9jZXNzLmN3ZCgpO1xuXG4gICAgLy8gQXV0by1kZXRlY3QgcGxhdGZvcm0uIE9yZGVyOiBBbmRyb2lkIChHcmFkbGUpIFx1MjE5MiBXaW5kb3dzICguY3Nwcm9qLy5zbG4pIFx1MjE5MiBpT1MgKGRlZmF1bHQpLlxuICAgIGNvbnN0IHJhd1BsYXRmb3JtOiBzdHJpbmcgPSBvcHRpb25zLnBsYXRmb3JtID8/IFwiYXV0b1wiO1xuICAgIGNvbnN0IFZBTElEX1BMQVRGT1JNUyA9IFtcImlvc1wiLCBcImFuZHJvaWRcIiwgXCJ3aW5kb3dzXCIsIFwid2luZG93czExXCIsIFwid2luZG93czEwXCJdO1xuICAgIGxldCBwbGF0Zm9ybTogUGxhdGZvcm07XG4gICAgaWYgKHJhd1BsYXRmb3JtID09PSBcImF1dG9cIiB8fCAhVkFMSURfUExBVEZPUk1TLmluY2x1ZGVzKHJhd1BsYXRmb3JtKSkge1xuICAgICAgaWYgKGZpbmRBbmRyb2lkUHJvamVjdChjd2QpKSBwbGF0Zm9ybSA9IFwiYW5kcm9pZFwiO1xuICAgICAgZWxzZSBpZiAoZmluZFdpbmRvd3NQcm9qZWN0KGN3ZCkpIHBsYXRmb3JtID0gZGV0ZWN0V2luZG93c0ZsYXZvdXIoY3dkKTtcbiAgICAgIGVsc2UgcGxhdGZvcm0gPSBcImlvc1wiO1xuICAgIH0gZWxzZSBpZiAocmF3UGxhdGZvcm0gPT09IFwid2luZG93c1wiKSB7XG4gICAgICAvLyBFeHBsaWNpdCBXaW5kb3dzLCBidXQgbGV0IHRoZSAuY3Nwcm9qIGRlY2lkZSBXaW4xMSAoV2luVUkgMykgdnMgV2luMTAgKFdQRikuXG4gICAgICBwbGF0Zm9ybSA9IGRldGVjdFdpbmRvd3NGbGF2b3VyKGN3ZCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHBsYXRmb3JtID0gcmF3UGxhdGZvcm0gYXMgUGxhdGZvcm07XG4gICAgfVxuICAgIGNvbnN0IGlzQW5kcm9pZCA9IHBsYXRmb3JtID09PSBcImFuZHJvaWRcIjtcbiAgICBjb25zdCBpc1dpbmRvd3MgPSBwbGF0Zm9ybSA9PT0gXCJ3aW5kb3dzMTFcIiB8fCBwbGF0Zm9ybSA9PT0gXCJ3aW5kb3dzMTBcIjtcblxuICAgIGNvbnNvbGUubG9nKCk7XG4gICAgY29uc29sZS5sb2coY2hhbGsuYm9sZChcIiAgUGF0aCBUZXJtaW5hbCBTREsgXHUyMDE0IEludGVncmF0aW9uIEFzc2lzdGFudCBTZXR1cFwiKSk7XG4gICAgY29uc29sZS5sb2coY2hhbGsuZGltKFwiICBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcIikpO1xuICAgIGNvbnNvbGUubG9nKGNoYWxrLmRpbShgICBBZ2VudDogICAgJHthZ2VudH1gKSk7XG4gICAgY29uc29sZS5sb2coY2hhbGsuZGltKGAgIFBsYXRmb3JtOiAke3BsYXRmb3JtfSR7b3B0aW9ucy5wbGF0Zm9ybSA/IFwiXCIgOiBcIiAoYXV0by1kZXRlY3RlZClcIn1gKSk7XG4gICAgY29uc29sZS5sb2coKTtcblxuICAgIGlmIChhZ2VudCAhPT0gXCJjdXJzb3JcIiAmJiBhZ2VudCAhPT0gXCJjbGF1ZGVcIikge1xuICAgICAgY29uc29sZS5sb2coXG4gICAgICAgIGNoYWxrLnllbGxvdyhcbiAgICAgICAgICBgXHUyNkEwIEFnZW50ICcke2FnZW50fScgaXMgbm90IHN1cHBvcnRlZC4gVXNlICdjdXJzb3InIG9yICdjbGF1ZGUnLmBcbiAgICAgICAgKVxuICAgICAgKTtcbiAgICAgIHByb2Nlc3MuZXhpdCgxKTtcbiAgICB9XG5cbiAgICBjb25zdCBhY3Rpb25zOiBzdHJpbmdbXSA9IFtdO1xuICAgIGNvbnN0IHdhcm5pbmdzOiBzdHJpbmdbXSA9IFtdO1xuICAgIGNvbnN0IG1hbnVhbFN0ZXBzOiBzdHJpbmdbXSA9IFtdO1xuXG4gICAgLy8gXHUyNTAwXHUyNTAwIDEuIFNESyBpbnN0YWxsYXRpb24gXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXG4gICAgaWYgKCF0b29sc09ubHkpIHtcbiAgICAgIGlmIChpc0FuZHJvaWQpIHtcbiAgICAgICAgLy8gXHUyNTAwXHUyNTAwIEFuZHJvaWQ6IEppdFBhY2sgKyBHcmFkbGUgXHUyNTAwXHUyNTAwXG4gICAgICAgIGNvbnN0IHNwaW5uZXIgPSBvcmEoXCJDaGVja2luZyBBbmRyb2lkIHByb2plY3RcdTIwMjZcIikuc3RhcnQoKTtcblxuICAgICAgICBpZiAoIWZpbmRBbmRyb2lkUHJvamVjdChjd2QpKSB7XG4gICAgICAgICAgc3Bpbm5lci53YXJuKFwiTm8gQW5kcm9pZCBwcm9qZWN0IGZvdW5kIChzZXR0aW5ncy5ncmFkbGUua3RzIG9yIGFwcC9idWlsZC5ncmFkbGUua3RzIG1pc3NpbmcpLlwiKTtcbiAgICAgICAgICBjb25zdCBhbnN3ZXIgPSBhd2FpdCBhc2soXG4gICAgICAgICAgICBjaGFsay55ZWxsb3coXCIgIENvbnRpbnVlIHdpdGggdG9vbHMtb25seSBzZXR1cD8gKHkvbik6IFwiKVxuICAgICAgICAgICk7XG4gICAgICAgICAgaWYgKGFuc3dlci50b0xvd2VyQ2FzZSgpICE9PSBcInlcIikge1xuICAgICAgICAgICAgY29uc29sZS5sb2coY2hhbGsuZGltKFwiXFxuICBSdW4gdGhpcyBmcm9tIHlvdXIgQW5kcm9pZCBwcm9qZWN0IHJvb3QgZGlyZWN0b3J5LlxcblwiKSk7XG4gICAgICAgICAgICBwcm9jZXNzLmV4aXQoMCk7XG4gICAgICAgICAgfVxuICAgICAgICAgIHdhcm5pbmdzLnB1c2goXCJSYW4gaW4gdG9vbHMtb25seSBtb2RlIFx1MjAxNCBubyBBbmRyb2lkIHByb2plY3QgZm91bmQuXCIpO1xuICAgICAgICB9IGVsc2UgaWYgKGhhc0FuZHJvaWRTREtEZXBlbmRlbmN5KGN3ZCkpIHtcbiAgICAgICAgICBzcGlubmVyLnN1Y2NlZWQoXCJQYXRoIFRlcm1pbmFsIFNESyBhbHJlYWR5IHByZXNlbnQgaW4gc2V0dGluZ3MuZ3JhZGxlLmt0cy5cIik7XG4gICAgICAgICAgYWN0aW9ucy5wdXNoKFwiU0RLIGRlcGVuZGVuY3kgYWxyZWFkeSBwcmVzZW50IFx1MjAxNCBubyBjaGFuZ2UgbmVlZGVkLlwiKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBzcGlubmVyLnRleHQgPSBcIkFkZGluZyB0aGUgUGF0aCBNYXZlbiByZXBvc2l0b3J5IHRvIHNldHRpbmdzLmdyYWRsZS5rdHNcdTIwMjZcIjtcbiAgICAgICAgICBjb25zdCBzZXR0aW5nc09rID0gaW5qZWN0UGF0aE1hdmVuUmVwbyhjd2QpO1xuICAgICAgICAgIGNvbnN0IGRlcHNPayA9IGluamVjdEdyYWRsZURlcGVuZGVuY2llcyhjd2QpO1xuXG4gICAgICAgICAgaWYgKHNldHRpbmdzT2spIHtcbiAgICAgICAgICAgIHNwaW5uZXIuc3VjY2VlZChcIlBhdGggTWF2ZW4gcmVwb3NpdG9yeSBhZGRlZCB0byBzZXR0aW5ncy5ncmFkbGUua3RzLlwiKTtcbiAgICAgICAgICAgIGFjdGlvbnMucHVzaChgUGF0aCBNYXZlbiByZXBvIGFkZGVkIHRvIHNldHRpbmdzLmdyYWRsZS5rdHMgKCR7UEFUSF9NQVZFTl9VUkx9KWApO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBtYW51YWxTdGVwcy5wdXNoKFxuICAgICAgICAgICAgICBgQWRkIHRoZSBQYXRoIE1hdmVuIHJlcG8gdG8gc2V0dGluZ3MuZ3JhZGxlLmt0cyAoZGVwZW5kZW5jeVJlc29sdXRpb25NYW5hZ2VtZW50IHsgcmVwb3NpdG9yaWVzIHsgXHUyMDI2IH0gfSk6XFxuYCArXG4gICAgICAgICAgICAgIGAgICAgIG1hdmVuIHsgdXJsID0gdXJpKFwiJHtQQVRIX01BVkVOX1VSTH1cIikgfWBcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgfVxuICAgICAgICAgIGlmIChkZXBzT2spIHtcbiAgICAgICAgICAgIHNwaW5uZXIuc3VjY2VlZChcIlNESyBkZXBlbmRlbmNpZXMgYWRkZWQgdG8gYXBwL2J1aWxkLmdyYWRsZS5rdHMgKGluY2wuIFZlcmlmb25lKS5cIik7XG4gICAgICAgICAgICBhY3Rpb25zLnB1c2goYFNESyBkZXBzIGFkZGVkIHRvIGFwcC9idWlsZC5ncmFkbGUua3RzOiAke0FORFJPSURfU0RLX01PRFVMRVMuam9pbihcIiwgXCIpfWApO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBzcGlubmVyLndhcm4oXCJDb3VsZCBub3QgYXV0by1pbmplY3QgZGVwZW5kZW5jaWVzIGludG8gYXBwL2J1aWxkLmdyYWRsZS5rdHMuXCIpO1xuICAgICAgICAgICAgbWFudWFsU3RlcHMucHVzaChcbiAgICAgICAgICAgICAgYEFkZCB0byBhcHAvYnVpbGQuZ3JhZGxlLmt0cyBkZXBlbmRlbmNpZXMge306XFxuYCArXG4gICAgICAgICAgICAgIEFORFJPSURfU0RLX01PRFVMRVMubWFwKChtKSA9PiBgICAgICBpbXBsZW1lbnRhdGlvbihcIiR7QU5EUk9JRF9TREtfR1JPVVB9OiR7bX06JHtBTkRST0lEX1NES19WRVJTSU9OfVwiKWApLmpvaW4oXCJcXG5cIilcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9IGVsc2UgaWYgKGlzV2luZG93cykge1xuICAgICAgICAvLyBcdTI1MDBcdTI1MDAgV2luZG93czogUHJvamVjdFJlZmVyZW5jZSB0byB0aGUgc2libGluZyBTREsgXHUyNTAwXHUyNTAwXG4gICAgICAgIGNvbnN0IHNwaW5uZXIgPSBvcmEoXCJDaGVja2luZyBXaW5kb3dzICguTkVUKSBwcm9qZWN0XHUyMDI2XCIpLnN0YXJ0KCk7XG4gICAgICAgIGlmICghZmluZFdpbmRvd3NQcm9qZWN0KGN3ZCkpIHtcbiAgICAgICAgICBzcGlubmVyLndhcm4oXCJObyBXaW5kb3dzIHByb2plY3QgZm91bmQgKC5zbG4gb3IgLmNzcHJvaikuXCIpO1xuICAgICAgICAgIGNvbnN0IGFuc3dlciA9IGF3YWl0IGFzayhjaGFsay55ZWxsb3coXCIgIENvbnRpbnVlIHdpdGggdG9vbHMtb25seSBzZXR1cD8gKHkvbik6IFwiKSk7XG4gICAgICAgICAgaWYgKGFuc3dlci50b0xvd2VyQ2FzZSgpICE9PSBcInlcIikge1xuICAgICAgICAgICAgY29uc29sZS5sb2coY2hhbGsuZGltKFwiXFxuICBSdW4gdGhpcyBmcm9tIHlvdXIgV2luZG93cyBFUE9TIHByb2plY3Qgcm9vdC5cXG5cIikpO1xuICAgICAgICAgICAgcHJvY2Vzcy5leGl0KDApO1xuICAgICAgICAgIH1cbiAgICAgICAgICB3YXJuaW5ncy5wdXNoKFwiUmFuIGluIHRvb2xzLW9ubHkgbW9kZSBcdTIwMTQgbm8gV2luZG93cyBwcm9qZWN0IGZvdW5kLlwiKTtcbiAgICAgICAgfSBlbHNlIGlmIChoYXNXaW5kb3dzU0RLRGVwZW5kZW5jeShjd2QpKSB7XG4gICAgICAgICAgc3Bpbm5lci5zdWNjZWVkKFwiUGF0aCBUZXJtaW5hbCBTREsgYWxyZWFkeSByZWZlcmVuY2VkIGluIHRoZSBwcm9qZWN0LlwiKTtcbiAgICAgICAgICBhY3Rpb25zLnB1c2goXCJTREsgUHJvamVjdFJlZmVyZW5jZSBhbHJlYWR5IHByZXNlbnQgXHUyMDE0IG5vIGNoYW5nZSBuZWVkZWQuXCIpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHNwaW5uZXIuaW5mbyhcIlBhdGggU0RLIGlzIHdpcmVkIGJ5IFByb2plY3RSZWZlcmVuY2UgXHUyMDE0IHRoZSBpbnRlZ3JhdGlvbiByZWNpcGUgKFN0ZXAgMCkgZG9lcyB0aGlzLlwiKTtcbiAgICAgICAgICBtYW51YWxTdGVwcy5wdXNoKFxuICAgICAgICAgICAgYEFkZCB0aGUgUGF0aCBTREsgUHJvamVjdFJlZmVyZW5jZXMgdG8geW91ciAuY3Nwcm9qIFx1MjAxNCB0aGUgaW50ZWdyYXRpb24gcmVjaXBlJ3MgU3RlcCAwIGxpc3RzIGFsbCBzaXggYCArXG4gICAgICAgICAgICBgKENvcmVNb2RlbHMsIFNkaywgRW11bGF0b3JBZGFwdGVyLCBNb2NrQWRhcHRlciwgRGlhZ25vc3RpY3MsIFBzZGtBZGFwdGVyKS4gYCArXG4gICAgICAgICAgICBgQ2xvbmUgJHtXSU5ET1dTX1NES19SRVBPfSBhcyBhIFNJQkxJTkcgZm9sZGVyIG9mIHRoaXMgcHJvamVjdCBmaXJzdC5gXG4gICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgLy8gXHUyNTAwXHUyNTAwIGlPUzogU1BNIC8gWGNvZGUgXHUyNTAwXHUyNTAwXG4gICAgICAgIGNvbnN0IHNwaW5uZXIgPSBvcmEoXCJDaGVja2luZyBmb3IgWGNvZGUgcHJvamVjdFx1MjAyNlwiKS5zdGFydCgpO1xuXG4gICAgICAgIGNvbnN0IHhjb2RlUHJvamVjdCA9IGZpbmRYY29kZVByb2plY3QoY3dkKTtcbiAgICAgICAgY29uc3QgcGFja2FnZVN3aWZ0ID0gZmluZFBhY2thZ2VTd2lmdChjd2QpO1xuXG4gICAgICAgIGlmIChwYWNrYWdlU3dpZnQpIHtcbiAgICAgICAgICBzcGlubmVyLnRleHQgPSBcIkZvdW5kIFBhY2thZ2Uuc3dpZnQgXHUyMDE0IGFkZGluZyBQYXRoVGVybWluYWxTREsgZGVwZW5kZW5jeVx1MjAyNlwiO1xuICAgICAgICAgIGlmIChoYXNTREtEZXBlbmRlbmN5KHBhY2thZ2VTd2lmdCkpIHtcbiAgICAgICAgICAgIHNwaW5uZXIuc3VjY2VlZChcIlBhdGhUZXJtaW5hbFNESyBhbHJlYWR5IHByZXNlbnQgaW4gUGFja2FnZS5zd2lmdC5cIik7XG4gICAgICAgICAgICBhY3Rpb25zLnB1c2goXCJQYXRoVGVybWluYWxTREsgZGVwZW5kZW5jeSBhbHJlYWR5IHByZXNlbnQgXHUyMDE0IG5vIGNoYW5nZSBuZWVkZWQuXCIpO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBjb25zdCBpbmplY3RlZCA9IGluamVjdFNQTURlcGVuZGVuY3kocGFja2FnZVN3aWZ0KTtcbiAgICAgICAgICAgIGlmIChpbmplY3RlZCkge1xuICAgICAgICAgICAgICBzcGlubmVyLnN1Y2NlZWQoXCJQYXRoVGVybWluYWxTREsgYWRkZWQgdG8gUGFja2FnZS5zd2lmdC5cIik7XG4gICAgICAgICAgICAgIGFjdGlvbnMucHVzaChcIlBhdGhUZXJtaW5hbFNESyBhZGRlZCB0byBQYWNrYWdlLnN3aWZ0XCIpO1xuICAgICAgICAgICAgICBtYW51YWxTdGVwcy5wdXNoKFxuICAgICAgICAgICAgICAgIGBPcGVuIFhjb2RlIGFuZCBsaW5rIGFsbCBmb3VyIHRhcmdldHMgdG8geW91ciBhcHA6IFBhdGhUZXJtaW5hbFNESywgUGF0aEVtdWxhdG9yQWRhcHRlciwgUGF0aENvcmVNb2RlbHMsIFBhdGhWZXJpZm9uZVBTREtBZGFwdGVyLmBcbiAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIHNwaW5uZXIud2FybihcIkNvdWxkIG5vdCBhdXRvbWF0aWNhbGx5IG1vZGlmeSBQYWNrYWdlLnN3aWZ0IFx1MjAxNCBtYW51YWwgc3RlcCByZXF1aXJlZC5cIik7XG4gICAgICAgICAgICAgIG1hbnVhbFN0ZXBzLnB1c2goXG4gICAgICAgICAgICAgICAgYEFkZCBQYXRoVGVybWluYWxTREsgbWFudWFsbHkgdG8gUGFja2FnZS5zd2lmdDpcXG5gICtcbiAgICAgICAgICAgICAgICAgIGAgICAgIC5wYWNrYWdlKHVybDogXCIke1NES19HSVRIVUJfVVJMfVwiLCBmcm9tOiBcIiR7U0RLX1ZFUlNJT059XCIpYFxuICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIGlmICh4Y29kZVByb2plY3QpIHtcbiAgICAgICAgICBzcGlubmVyLnN1Y2NlZWQoYEZvdW5kIFhjb2RlIHByb2plY3Q6ICR7cGF0aC5iYXNlbmFtZSh4Y29kZVByb2plY3QpfWApO1xuICAgICAgICAgIGlmIChoYXNYY29kZVByb2plY3RTREtEZXBlbmRlbmN5KHhjb2RlUHJvamVjdCkpIHtcbiAgICAgICAgICAgIHNwaW5uZXIuc3VjY2VlZChcIlBhdGhUZXJtaW5hbFNESyBhbHJlYWR5IHByZXNlbnQgaW4gWGNvZGUgcHJvamVjdC5cIik7XG4gICAgICAgICAgICBhY3Rpb25zLnB1c2goXCJQYXRoVGVybWluYWxTREsgZGVwZW5kZW5jeSBhbHJlYWR5IHByZXNlbnQgXHUyMDE0IG5vIGNoYW5nZSBuZWVkZWQuXCIpO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBjb25zb2xlLmxvZyhcbiAgICAgICAgICAgICAgY2hhbGsueWVsbG93KFxuICAgICAgICAgICAgICAgIFwiXFxuICBcdTI2QTAgQXV0b21hdGljIFNQTSBpbmplY3Rpb24gaW50byAueGNvZGVwcm9qIGlzIG5vdCBzdXBwb3J0ZWQgKFhjb2RlIG1hbmFnZXMgdGhpcykuXCJcbiAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIGNvbnNvbGUubG9nKGNoYWxrLmJvbGQoXCJcXG4gIFRvIGFkZCBQYXRoVGVybWluYWxTREsgaW4gWGNvZGU6XCIpKTtcbiAgICAgICAgICAgIGNvbnNvbGUubG9nKFwiICAxLiBPcGVuIHlvdXIgcHJvamVjdCBpbiBYY29kZVwiKTtcbiAgICAgICAgICAgIGNvbnNvbGUubG9nKFwiICAyLiBGaWxlIFx1MjE5MiBBZGQgUGFja2FnZSBEZXBlbmRlbmNpZXNcdTIwMjZcIik7XG4gICAgICAgICAgICBjb25zb2xlLmxvZyhgICAzLiBFbnRlciBVUkw6ICR7Y2hhbGsuY3lhbihTREtfR0lUSFVCX1VSTCl9YCk7XG4gICAgICAgICAgICBjb25zb2xlLmxvZyhcbiAgICAgICAgICAgICAgXCIgIDQuIEluIHRoZSAnQ2hvb3NlIFBhY2thZ2UgUHJvZHVjdHMnIGRpYWxvZywgc2V0IGFsbCBmb3VyIHRvIHlvdXIgYXBwIHRhcmdldDpcIlxuICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIGNvbnNvbGUubG9nKGNoYWxrLmN5YW4oXCIgICAgICAgUGF0aFRlcm1pbmFsU0RLICAgICAgICBcdTIxOTIgeW91ciBhcHAgdGFyZ2V0XCIpKTtcbiAgICAgICAgICAgIGNvbnNvbGUubG9nKGNoYWxrLmN5YW4oXCIgICAgICAgUGF0aEVtdWxhdG9yQWRhcHRlciAgICBcdTIxOTIgeW91ciBhcHAgdGFyZ2V0XCIpKTtcbiAgICAgICAgICAgIGNvbnNvbGUubG9nKGNoYWxrLmN5YW4oXCIgICAgICAgUGF0aENvcmVNb2RlbHMgICAgICAgICBcdTIxOTIgeW91ciBhcHAgdGFyZ2V0XCIpKTtcbiAgICAgICAgICAgIGNvbnNvbGUubG9nKGNoYWxrLmN5YW4oXCIgICAgICAgUGF0aFZlcmlmb25lUFNES0FkYXB0ZXIgXHUyMTkyIHlvdXIgYXBwIHRhcmdldFwiKSk7XG4gICAgICAgICAgICBjb25zb2xlLmxvZyhjaGFsay5kaW0oXCIgICAgIChQYXRoVmVyaWZvbmVQU0RLQWRhcHRlciBpcyByZXF1aXJlZCBmb3IgdGhlIFZlcmlmb25lIGJhY2tlbmQ7IFBhdGhEaWFnbm9zdGljcyBjYW4gYmUgbGVmdCBhcyBOb25lKVwiKSk7XG4gICAgICAgICAgICBjb25zb2xlLmxvZyhcIiAgNS4gQ2xpY2sgQWRkIFBhY2thZ2VcXG5cIik7XG4gICAgICAgICAgICBjb25zdCBjb25maXJtZWQgPSBhd2FpdCBhc2soXG4gICAgICAgICAgICAgIGNoYWxrLmJvbGQoXCIgIFByZXNzIEVudGVyIG9uY2UgeW91IGhhdmUgYWRkZWQgdGhlIHBhY2thZ2UsIG9yIHR5cGUgJ3NraXAnIHRvIGRvIHRoaXMgbGF0ZXI6IFwiKVxuICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIGlmIChjb25maXJtZWQudG9Mb3dlckNhc2UoKSAhPT0gXCJza2lwXCIpIHtcbiAgICAgICAgICAgICAgYWN0aW9ucy5wdXNoKGBQYXRoVGVybWluYWxTREsgYWRkZWQgdG8gWGNvZGUgcHJvamVjdCAoY29uZmlybWVkIGJ5IHVzZXIpYCk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICBtYW51YWxTdGVwcy5wdXNoKFxuICAgICAgICAgICAgICAgIGBBZGQgUGF0aFRlcm1pbmFsU0RLIHZpYSBYY29kZTogRmlsZSBcdTIxOTIgQWRkIFBhY2thZ2UgRGVwZW5kZW5jaWVzIFx1MjE5MiAke1NES19HSVRIVUJfVVJMfWBcbiAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgc3Bpbm5lci53YXJuKFwiTm8gWGNvZGUgcHJvamVjdCBmb3VuZCBpbiBjdXJyZW50IGRpcmVjdG9yeS5cIik7XG4gICAgICAgICAgY29uc3QgYW5zd2VyID0gYXdhaXQgYXNrKFxuICAgICAgICAgICAgY2hhbGsueWVsbG93KFxuICAgICAgICAgICAgICBcIiAgTm8gLnhjb2RlcHJvaiBvciBQYWNrYWdlLnN3aWZ0IGZvdW5kLiBDb250aW51ZSB3aXRoIHRvb2xzLW9ubHkgc2V0dXA/ICh5L24pOiBcIlxuICAgICAgICAgICAgKVxuICAgICAgICAgICk7XG4gICAgICAgICAgaWYgKGFuc3dlci50b0xvd2VyQ2FzZSgpICE9PSBcInlcIikge1xuICAgICAgICAgICAgY29uc29sZS5sb2coXG4gICAgICAgICAgICAgIGNoYWxrLmRpbShcIlxcbiAgUnVuIHRoaXMgY29tbWFuZCBmcm9tIHlvdXIgWGNvZGUgcHJvamVjdCBkaXJlY3RvcnksIG9yIHVzZSAtLXRvb2xzLW9ubHkuXFxuXCIpXG4gICAgICAgICAgICApO1xuICAgICAgICAgICAgcHJvY2Vzcy5leGl0KDApO1xuICAgICAgICAgIH1cbiAgICAgICAgICB3YXJuaW5ncy5wdXNoKFwiUmFuIGluIHRvb2xzLW9ubHkgbW9kZSBcdTIwMTQgbm8gWGNvZGUgcHJvamVjdCBmb3VuZC5cIik7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgYWN0aW9ucy5wdXNoKFwiU2tpcHBlZCBTREsgaW5zdGFsbGF0aW9uICgtLXRvb2xzLW9ubHkgbW9kZSlcIik7XG4gICAgfVxuXG4gICAgLy8gXHUyNTAwXHUyNTAwIDIuIE1DUCBjb25maWcgXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXG4gICAge1xuICAgICAgY29uc3Qgc3Bpbm5lciA9IG9yYShcIldyaXRpbmcgTUNQIHNlcnZlciBjb25maWdcdTIwMjZcIikuc3RhcnQoKTtcblxuICAgICAgbGV0IHJlc3VsdDogeyB3cml0dGVuOiBib29sZWFuOyBtZXJnZWQ6IGJvb2xlYW4gfTtcbiAgICAgIGxldCBjb25maWdGaWxlOiBzdHJpbmc7XG5cbiAgICAgIGlmIChhZ2VudCA9PT0gXCJjbGF1ZGVcIikge1xuICAgICAgICByZXN1bHQgPSB3cml0ZUNsYXVkZU1jcENvbmZpZyhjd2QpO1xuICAgICAgICBjb25maWdGaWxlID0gXCIubWNwLmpzb25cIjtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJlc3VsdCA9IHdyaXRlQ3Vyc29yTWNwQ29uZmlnKGN3ZCk7XG4gICAgICAgIGNvbmZpZ0ZpbGUgPSBcIi5jdXJzb3IvbWNwLmpzb25cIjtcbiAgICAgIH1cblxuICAgICAgaWYgKHJlc3VsdC53cml0dGVuICYmIHJlc3VsdC5tZXJnZWQpIHtcbiAgICAgICAgc3Bpbm5lci5zdWNjZWVkKGBNQ1AgY29uZmlnIG1lcmdlZCBpbnRvIGV4aXN0aW5nICR7Y29uZmlnRmlsZX0uYCk7XG4gICAgICAgIGFjdGlvbnMucHVzaChgcGF0aC10ZXJtaW5hbCBlbnRyeSBtZXJnZWQgaW50byAke2NvbmZpZ0ZpbGV9YCk7XG4gICAgICB9IGVsc2UgaWYgKHJlc3VsdC53cml0dGVuKSB7XG4gICAgICAgIHNwaW5uZXIuc3VjY2VlZChgTUNQIGNvbmZpZyB3cml0dGVuIHRvICR7Y29uZmlnRmlsZX0uYCk7XG4gICAgICAgIGFjdGlvbnMucHVzaChgTUNQIHNlcnZlciBjb25maWd1cmVkOiAke2NvbmZpZ0ZpbGV9YCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBzcGlubmVyLmluZm8oXCJNQ1AgY29uZmlnIGFscmVhZHkgcHJlc2VudCBcdTIwMTQgbm8gY2hhbmdlIG5lZWRlZC5cIik7XG4gICAgICAgIGFjdGlvbnMucHVzaChcIk1DUCBjb25maWcgYWxyZWFkeSBwcmVzZW50IFx1MjAxNCBubyBjaGFuZ2UgbmVlZGVkLlwiKTtcbiAgICAgIH1cblxuICAgICAgLy8gRm9yIENsYXVkZSBDb2RlLCBhbHNvIHByZS1hcHByb3ZlIHRoZSBNQ1Agc2VydmVyIGluIC5jbGF1ZGUvc2V0dGluZ3MuanNvbi5cbiAgICAgIC8vIFdpdGhvdXQgdGhpcywgQ2xhdWRlIENvZGUgc2hvd3MgYW4gaW50ZXJhY3RpdmUgXCJBbGxvdyB0aGlzIE1DUCBzZXJ2ZXI/XCJcbiAgICAgIC8vIHByb21wdCBvbiBmaXJzdCBsYXVuY2ggXHUyMDE0IGVhc3kgdG8gbWlzcywgYW5kIHRoZSBhZ2VudCBlbmRzIHVwIHJ1bm5pbmdcbiAgICAgIC8vIHdpdGhvdXQgTUNQIHRvb2xzIGlmIHRoZSB1c2VyIGRpc21pc3NlcyBpdC5cbiAgICAgIGlmIChhZ2VudCA9PT0gXCJjbGF1ZGVcIikge1xuICAgICAgICBjb25zdCBhcHByb3ZlU3Bpbm5lciA9IG9yYShcIlByZS1hcHByb3ZpbmcgUGF0aCBNQ1Agc2VydmVyIGZvciBDbGF1ZGUgQ29kZVx1MjAyNlwiKS5zdGFydCgpO1xuICAgICAgICBjb25zdCBhcHByb3ZlID0gd3JpdGVDbGF1ZGVTZXR0aW5ncyhjd2QpO1xuICAgICAgICBpZiAoYXBwcm92ZS5hbHJlYWR5QXBwcm92ZWQpIHtcbiAgICAgICAgICBhcHByb3ZlU3Bpbm5lci5pbmZvKFwiUGF0aCBNQ1Agc2VydmVyIGFscmVhZHkgcHJlLWFwcHJvdmVkIFx1MjAxNCBubyBjaGFuZ2UgbmVlZGVkLlwiKTtcbiAgICAgICAgfSBlbHNlIGlmIChhcHByb3ZlLndyaXR0ZW4gJiYgYXBwcm92ZS5tZXJnZWQpIHtcbiAgICAgICAgICBhcHByb3ZlU3Bpbm5lci5zdWNjZWVkKFwicGF0aC10ZXJtaW5hbCBhZGRlZCB0byBleGlzdGluZyAuY2xhdWRlL3NldHRpbmdzLmpzb24uXCIpO1xuICAgICAgICAgIGFjdGlvbnMucHVzaChcInBhdGgtdGVybWluYWwgcHJlLWFwcHJvdmVkIGluIC5jbGF1ZGUvc2V0dGluZ3MuanNvblwiKTtcbiAgICAgICAgfSBlbHNlIGlmIChhcHByb3ZlLndyaXR0ZW4pIHtcbiAgICAgICAgICBhcHByb3ZlU3Bpbm5lci5zdWNjZWVkKFwiUHJlLWFwcHJvdmFsIHdyaXR0ZW4gdG8gLmNsYXVkZS9zZXR0aW5ncy5qc29uLlwiKTtcbiAgICAgICAgICBhY3Rpb25zLnB1c2goXCJDbGF1ZGUgQ29kZSBwcmUtYXBwcm92YWw6IC5jbGF1ZGUvc2V0dGluZ3MuanNvblwiKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBhcHByb3ZlU3Bpbm5lci53YXJuKFwiQ291bGQgbm90IHdyaXRlIC5jbGF1ZGUvc2V0dGluZ3MuanNvbiBcdTIwMTQgeW91IG1heSBzZWUgYW4gXFxcIkFsbG93IE1DUCBzZXJ2ZXI/XFxcIiBwcm9tcHQgb24gZmlyc3QgQ2xhdWRlIENvZGUgbGF1bmNoLiBBY2NlcHQgaXQuXCIpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gXHUyNTAwXHUyNTAwIDMuIFJ1bGVzIGZpbGUgXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXG4gICAge1xuICAgICAgY29uc3Qgc3Bpbm5lciA9IG9yYShgV3JpdGluZyAke2FnZW50ID09PSBcImNsYXVkZVwiID8gXCJDTEFVREUubWRcIiA6IFwiQ3Vyc29yIHJ1bGVzXCJ9IGZpbGVcdTIwMjZgKS5zdGFydCgpO1xuXG4gICAgICBsZXQgcmVzdWx0OiB7IHdyaXR0ZW46IGJvb2xlYW47IHNraXBwZWQ6IGJvb2xlYW4gfTtcbiAgICAgIGxldCBydWxlc0ZpbGU6IHN0cmluZztcblxuICAgICAgLy8gUGVyLXBsYXRmb3JtIHJlY2lwZSBzb3VyY2UgKyBmZXRjaCBVUkwgKyBmaWxlbmFtZS5cbiAgICAgIGNvbnN0IHJ1bGVzQnlQbGF0Zm9ybSA9IHtcbiAgICAgICAgaW9zOiAgICAgICB7IHNyYzogUlVMRVNfU09VUkNFLCAgICAgICAgICB1cmw6IFJVTEVTX0ZFVENIX1VSTCwgICAgICAgICAgZmlsZTogXCJwYXRoLWludGVncmF0aW9uLm1kY1wiIH0sXG4gICAgICAgIGFuZHJvaWQ6ICAgeyBzcmM6IEFORFJPSURfUlVMRVNfU09VUkNFLCAgIHVybDogQU5EUk9JRF9SVUxFU19GRVRDSF9VUkwsICAgZmlsZTogXCJwYXRoLWludGVncmF0aW9uLWFuZHJvaWQubWRjXCIgfSxcbiAgICAgICAgd2luZG93czExOiB7IHNyYzogV0lORE9XUzExX1JVTEVTX1NPVVJDRSwgdXJsOiBXSU5ET1dTMTFfUlVMRVNfRkVUQ0hfVVJMLCBmaWxlOiBcInBhdGgtaW50ZWdyYXRpb24td2luZG93czExLm1kY1wiIH0sXG4gICAgICAgIHdpbmRvd3MxMDogeyBzcmM6IFdJTkRPV1MxMF9SVUxFU19TT1VSQ0UsIHVybDogV0lORE9XUzEwX1JVTEVTX0ZFVENIX1VSTCwgZmlsZTogXCJwYXRoLWludGVncmF0aW9uLXdpbmRvd3MxMC5tZGNcIiB9LFxuICAgICAgfSBhcyBjb25zdDtcbiAgICAgIGNvbnN0IGFjdGl2ZVJ1bGVzID0gcnVsZXNCeVBsYXRmb3JtW3BsYXRmb3JtXTtcbiAgICAgIGNvbnN0IGFjdGl2ZUZldGNoVXJsID0gYWN0aXZlUnVsZXMudXJsO1xuXG4gICAgICBpZiAoYWdlbnQgPT09IFwiY2xhdWRlXCIpIHtcbiAgICAgICAgcmVzdWx0ID0gd3JpdGVDbGF1ZGVSdWxlc0ZpbGUoY3dkLCBhY3RpdmVSdWxlcy5zcmMsIGFjdGl2ZUZldGNoVXJsKTtcbiAgICAgICAgcnVsZXNGaWxlID0gXCJDTEFVREUubWRcIjtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJlc3VsdCA9IHdyaXRlQ3Vyc29yUnVsZXNGaWxlKGN3ZCwgYWN0aXZlUnVsZXMuc3JjLCBhY3RpdmVSdWxlcy5maWxlLCBhY3RpdmVGZXRjaFVybCk7XG4gICAgICAgIHJ1bGVzRmlsZSA9IGAuY3Vyc29yL3J1bGVzLyR7YWN0aXZlUnVsZXMuZmlsZX1gO1xuICAgICAgfVxuXG4gICAgICBpZiAocmVzdWx0LndyaXR0ZW4pIHtcbiAgICAgICAgc3Bpbm5lci5zdWNjZWVkKGBSdWxlcyBmaWxlIHdyaXR0ZW4gdG8gJHtydWxlc0ZpbGV9LmApO1xuICAgICAgICBhY3Rpb25zLnB1c2goYEludGVncmF0aW9uIHJ1bGVzIGZpbGU6ICR7cnVsZXNGaWxlfWApO1xuICAgICAgfSBlbHNlIGlmIChyZXN1bHQuc2tpcHBlZCkge1xuICAgICAgICBzcGlubmVyLmluZm8oXG4gICAgICAgICAgYCR7cnVsZXNGaWxlfSBhbHJlYWR5IGV4aXN0cyBcdTIwMTQgc2tpcHBlZCB0byBwcmVzZXJ2ZSB5b3VyIGN1c3RvbWlzYXRpb25zLmBcbiAgICAgICAgKTtcbiAgICAgICAgd2FybmluZ3MucHVzaChcbiAgICAgICAgICBgJHtydWxlc0ZpbGV9IGFscmVhZHkgZXhpc3RzIFx1MjAxNCBub3Qgb3ZlcndyaXR0ZW4uYFxuICAgICAgICApO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgc3Bpbm5lci53YXJuKFwiQ291bGQgbm90IHdyaXRlIHJ1bGVzIGZpbGUgXHUyMDE0IGNoZWNrIG5ldHdvcmsgY29ubmVjdGl2aXR5LlwiKTtcbiAgICAgICAgbWFudWFsU3RlcHMucHVzaChcbiAgICAgICAgICBgRG93bmxvYWQgJHthY3RpdmVSdWxlcy5maWxlfSBtYW51YWxseSBmcm9tOiAke2FjdGl2ZUZldGNoVXJsfWBcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBcdTI1MDBcdTI1MDAgNC4gUGVybWlzc2lvbiBjaGVjayBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcbiAgICBpZiAoIXRvb2xzT25seSkge1xuICAgICAgaWYgKGlzQW5kcm9pZCkge1xuICAgICAgICBjb25zdCBzcGlubmVyID0gb3JhKFwiQ2hlY2tpbmcgQW5kcm9pZE1hbmlmZXN0LnhtbCBCTEUgcGVybWlzc2lvbnNcdTIwMjZcIikuc3RhcnQoKTtcbiAgICAgICAgY29uc3QgbWFuaWZlc3RzV2l0aElzc3VlcyA9IGNoZWNrQW5kcm9pZE1hbmlmZXN0KGN3ZCk7XG4gICAgICAgIGlmIChtYW5pZmVzdHNXaXRoSXNzdWVzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICAgIHNwaW5uZXIuc3VjY2VlZChcIkJMRSBwZXJtaXNzaW9ucyBmb3VuZCBpbiBBbmRyb2lkTWFuaWZlc3QueG1sLlwiKTtcbiAgICAgICAgICBhY3Rpb25zLnB1c2goXCJCTEUgcGVybWlzc2lvbnMgdmVyaWZpZWQgaW4gQW5kcm9pZE1hbmlmZXN0LnhtbFwiKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBzcGlubmVyLndhcm4oXG4gICAgICAgICAgICBgQkxVRVRPT1RIX1NDQU4gbWlzc2luZyBmcm9tICR7bWFuaWZlc3RzV2l0aElzc3Vlcy5sZW5ndGh9IEFuZHJvaWRNYW5pZmVzdC54bWwgZmlsZShzKS5gXG4gICAgICAgICAgKTtcbiAgICAgICAgICBtYW5pZmVzdHNXaXRoSXNzdWVzLmZvckVhY2goKHApID0+IHtcbiAgICAgICAgICAgIGNvbnN0IHJlbGF0aXZlID0gcGF0aC5yZWxhdGl2ZShjd2QsIHApO1xuICAgICAgICAgICAgbWFudWFsU3RlcHMucHVzaChcbiAgICAgICAgICAgICAgYEFkZCBCTEUgcGVybWlzc2lvbnMgdG8gJHtyZWxhdGl2ZX06XFxuYCArXG4gICAgICAgICAgICAgIGAgICAgIChBc2sgdGhlIE1DUDogXCJnZXRfbWFuaWZlc3RfcmVxdWlyZW1lbnRzXCIgZm9yIHRoZSBmdWxsIFhNTClgXG4gICAgICAgICAgICApO1xuICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICB9IGVsc2UgaWYgKGlzV2luZG93cykge1xuICAgICAgICAvLyBXaW5kb3dzIHJlYWNoZXMgQkxFIHZpYSBXaW5SVCBcdTIwMTQgbm8gbWFuaWZlc3QgY2FwYWJpbGl0eSB0byBhZGQgKHVucGFja2FnZWRcbiAgICAgICAgLy8gV2luVUkgMyAvIFdQRikuIFRoZSBXaS1GaS9JUCBhbmQgVmVyaWZvbmUgYmFja2VuZHMgdXNlIG5vIEJsdWV0b290aCBhdCBhbGwuXG4gICAgICAgIGFjdGlvbnMucHVzaChcIkJsdWV0b290aCBuZWVkcyBubyBtYW5pZmVzdCBlbnRyeSBvbiBXaW5kb3dzIChXaW5SVCkuXCIpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgY29uc3Qgc3Bpbm5lciA9IG9yYShcIkNoZWNraW5nIEluZm8ucGxpc3QgQkxFIHBlcm1pc3Npb25zXHUyMDI2XCIpLnN0YXJ0KCk7XG4gICAgICAgIGNvbnN0IHBsaXN0c1dpdGhJc3N1ZXMgPSBjaGVja0luZm9QbGlzdChjd2QpO1xuICAgICAgICBpZiAocGxpc3RzV2l0aElzc3Vlcy5sZW5ndGggPT09IDApIHtcbiAgICAgICAgICBzcGlubmVyLnN1Y2NlZWQoXCJCTEUgcGVybWlzc2lvbnMgZm91bmQgaW4gSW5mby5wbGlzdC5cIik7XG4gICAgICAgICAgYWN0aW9ucy5wdXNoKFwiQkxFIHBlcm1pc3Npb25zIHZlcmlmaWVkIGluIEluZm8ucGxpc3RcIik7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgc3Bpbm5lci53YXJuKFxuICAgICAgICAgICAgYE5TQmx1ZXRvb3RoQWx3YXlzVXNhZ2VEZXNjcmlwdGlvbiBtaXNzaW5nIGZyb20gJHtwbGlzdHNXaXRoSXNzdWVzLmxlbmd0aH0gSW5mby5wbGlzdCBmaWxlKHMpLmBcbiAgICAgICAgICApO1xuICAgICAgICAgIHBsaXN0c1dpdGhJc3N1ZXMuZm9yRWFjaCgocCkgPT4ge1xuICAgICAgICAgICAgY29uc3QgcmVsYXRpdmUgPSBwYXRoLnJlbGF0aXZlKGN3ZCwgcCk7XG4gICAgICAgICAgICBtYW51YWxTdGVwcy5wdXNoKFxuICAgICAgICAgICAgICBgQWRkIEJMRSBwZXJtaXNzaW9uIHRvICR7cmVsYXRpdmV9OlxcbmAgK1xuICAgICAgICAgICAgICAgIGAgICAgIDxrZXk+TlNCbHVldG9vdGhBbHdheXNVc2FnZURlc2NyaXB0aW9uPC9rZXk+XFxuYCArXG4gICAgICAgICAgICAgICAgYCAgICAgPHN0cmluZz5UaGlzIGFwcCBjb25uZWN0cyB0byBhIFBhdGggcGF5bWVudCB0ZXJtaW5hbCB2aWEgQmx1ZXRvb3RoLjwvc3RyaW5nPlxcbmAgK1xuICAgICAgICAgICAgICAgIGAgICAgIChBc2sgdGhlIE1DUDogXCJnZXRfaW5mb19wbGlzdF9yZXF1aXJlbWVudHNcIiBmb3IgdGhlIGZ1bGwgWE1MKWBcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBcdTI1MDBcdTI1MDAgNS4gU3VtbWFyeSBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcbiAgICBwcmludFN1bW1hcnkoYWdlbnQsIHBsYXRmb3JtLCBhY3Rpb25zLCB3YXJuaW5ncywgbWFudWFsU3RlcHMpO1xuICB9KTtcblxucHJvZ3JhbS5wYXJzZShwcm9jZXNzLmFyZ3YpO1xuIl0sCiAgIm1hcHBpbmdzIjogIjs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBRUEsdUJBQXdCO0FBQ3hCLG1CQUFrQjtBQUNsQixTQUFvQjtBQUNwQixXQUFzQjtBQUN0QixlQUEwQjtBQUMxQiwyQkFBeUI7QUFDekIsaUJBQWdCO0FBRWhCLE1BQU0saUJB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Y0FBYztBQUNwRixrQkFBWSxpQkFBaUIsWUFBWSxJQUFJO0FBQUEsSUFDL0M7QUFFQSxRQUFJLE9BQU8sU0FBUztBQUNsQixjQUFRLFFBQVEseUJBQXlCLFNBQVMsR0FBRztBQUNyRCxjQUFRLEtBQUssMkJBQTJCLFNBQVMsRUFBRTtBQUFBLElBQ3JELFdBQVcsT0FBTyxTQUFTO0FBQ3pCLGNBQVE7QUFBQSxRQUNOLEdBQUcsU0FBUztBQUFBLE1BQ2Q7QUFDQSxlQUFTO0FBQUEsUUFDUCxHQUFHLFNBQVM7QUFBQSxNQUNkO0FBQUEsSUFDRixPQUFPO0FBQ0wsY0FBUSxLQUFLLCtEQUEwRDtBQUN2RSxrQkFBWTtBQUFBLFFBQ1YsWUFBWSxZQUFZLElBQUksbUJBQW1CLGNBQWM7QUFBQSxNQUMvRDtBQUFBLElBQ0Y7QUFBQSxFQUNGO0FBR0EsTUFBSSxDQUFDLFdBQVc7QUFDZCxRQUFJLFdBQVc7QUFDYixZQUFNLGNBQVUsV0FBQUEsU0FBSSxvREFBK0MsRUFBRSxNQUFNO0FBQzNFLFlBQU0sc0JBQXNCLHFCQUFxQixHQUFHO0FBQ3BELFVBQUksb0JBQW9CLFdBQVcsR0FBRztBQUNwQyxnQkFBUSxRQUFRLCtDQUErQztBQUMvRCxnQkFBUSxLQUFLLGlEQUFpRDtBQUFBLE1BQ2hFLE9BQU87QUFDTCxnQkFBUTtBQUFBLFVBQ04sK0JBQStCLG9CQUFvQixNQUFNO0FBQUEsUUFDM0Q7QUFDQSw0QkFBb0IsUUFBUSxDQUFDLE1BQU07QUFDakMsZ0JBQU0sV0FBVyxLQUFLLFNBQVMsS0FBSyxDQUFDO0FBQ3JDLHNCQUFZO0FBQUEsWUFDViwwQkFBMEIsUUFBUTtBQUFBO0FBQUEsVUFFcEM7QUFBQSxRQUNGLENBQUM7QUFBQSxNQUNIO0FBQUEsSUFDRixXQUFXLFdBQVc7QUFHcEIsY0FBUSxLQUFLLHVEQUF1RDtBQUFBLElBQ3RFLE9BQU87QUFDTCxZQUFNLGNBQVUsV0FBQUEsU0FBSSwyQ0FBc0MsRUFBRSxNQUFNO0FBQ2xFLFlBQU0sbUJBQW1CLGVBQWUsR0FBRztBQUMzQyxVQUFJLGlCQUFpQixXQUFXLEdBQUc7QUFDakMsZ0JBQVEsUUFBUSxzQ0FBc0M7QUFDdEQsZ0JBQVEsS0FBSyx3Q0FBd0M7QUFBQSxNQUN2RCxPQUFPO0FBQ0wsZ0JBQVE7QUFBQSxVQUNOLGtEQUFrRCxpQkFBaUIsTUFBTTtBQUFBLFFBQzNFO0FBQ0EseUJBQWlCLFFBQVEsQ0FBQyxNQUFNO0FBQzlCLGdCQUFNLFdBQVcsS0FBSyxTQUFTLEtBQUssQ0FBQztBQUNyQyxzQkFBWTtBQUFBLFlBQ1YseUJBQXlCLFFBQVE7QUFBQTtBQUFBO0FBQUE7QUFBQSxVQUluQztBQUFBLFFBQ0YsQ0FBQztBQUFBLE1BQ0g7QUFBQSxJQUNGO0FBQUEsRUFDRjtBQUdBLGVBQWEsT0FBTyxVQUFVLFNBQVMsVUFBVSxXQUFXO0FBQzlELENBQUM7QUFFSCx5QkFBUSxNQUFNLFFBQVEsSUFBSTsiLAogICJuYW1lcyI6IFsicnVsZXMiLCAiY2hhbGsiLCAib3JhIl0KfQo=
|
package/dist/init.js
CHANGED
|
@@ -6115,7 +6115,7 @@ var SDK_GITHUB_URL = "https://github.com/keyman12/path-terminal-sdk";
|
|
|
6115
6115
|
var SDK_VERSION = "0.1.0";
|
|
6116
6116
|
var PATH_MAVEN_URL = "https://mcp.path2ai.tech/maven";
|
|
6117
6117
|
var ANDROID_SDK_GROUP = "tech.path2ai.sdk";
|
|
6118
|
-
var ANDROID_SDK_VERSION = "1.
|
|
6118
|
+
var ANDROID_SDK_VERSION = "1.5.0";
|
|
6119
6119
|
var ANDROID_SDK_MODULES = ["path-core-models", "path-terminal-sdk", "path-emulator-adapter", "path-psdk-adapter"];
|
|
6120
6120
|
var MCP_SERVER_URL = "https://mcp.path2ai.tech/sse";
|
|
6121
6121
|
var RULES_FETCH_URL = "https://mcp.path2ai.tech/rules";
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "path-terminal-init",
|
|
3
|
-
"version": "0.2.
|
|
3
|
+
"version": "0.2.6",
|
|
4
4
|
"description": "One-line setup for the Path Terminal SDK integration assistant — connects the user's AI agent to the Path MCP server and installs the per-OS integration recipe (iOS, Android, Windows). The single source of truth for the bootstrap CLI and the recipes.",
|
|
5
5
|
"bin": {
|
|
6
6
|
"path-terminal-init": "dist/cli.js"
|
|
@@ -56,10 +56,10 @@ maven { url = uri("https://mcp.path2ai.tech/maven") }
|
|
|
56
56
|
|
|
57
57
|
2. **app/build.gradle.kts** — add to `dependencies {}`:
|
|
58
58
|
```kotlin
|
|
59
|
-
implementation("tech.path2ai.sdk:path-core-models:1.
|
|
60
|
-
implementation("tech.path2ai.sdk:path-terminal-sdk:1.
|
|
61
|
-
implementation("tech.path2ai.sdk:path-emulator-adapter:1.
|
|
62
|
-
implementation("tech.path2ai.sdk:path-psdk-adapter:1.
|
|
59
|
+
implementation("tech.path2ai.sdk:path-core-models:1.5.0")
|
|
60
|
+
implementation("tech.path2ai.sdk:path-terminal-sdk:1.5.0")
|
|
61
|
+
implementation("tech.path2ai.sdk:path-emulator-adapter:1.5.0")
|
|
62
|
+
implementation("tech.path2ai.sdk:path-psdk-adapter:1.5.0") // Verifone backend (Step 2c)
|
|
63
63
|
```
|
|
64
64
|
The Verifone backend's `.aar` uses data binding, so enable it in the same file:
|
|
65
65
|
```kotlin
|
|
@@ -248,6 +248,32 @@ Call `validate_integration` with platform='android' on your code before finalisi
|
|
|
248
248
|
|
|
249
249
|
---
|
|
250
250
|
|
|
251
|
+
### Step 3.5 — Compile the changes (check the environment first)
|
|
252
|
+
|
|
253
|
+
Confirm your code compiles against the SDK's **real** API — this catches wrong method
|
|
254
|
+
names / signatures the examples can't guarantee. But **probe the build toolchain first**,
|
|
255
|
+
and treat a missing one as an environment limitation to advise on, **never as a failure**:
|
|
256
|
+
|
|
257
|
+
1. Probe (non-fatal — just checking):
|
|
258
|
+
- `command -v java && java -version` — a JDK 17+ on PATH?
|
|
259
|
+
- `echo "$ANDROID_HOME"`, `ls ~/Library/Android/sdk 2>/dev/null`, or an Android Studio
|
|
260
|
+
install — is the Android SDK available?
|
|
261
|
+
|
|
262
|
+
2. **Toolchain present** → run `./gradlew assembleDebug` (or `compileDebugKotlin` for speed).
|
|
263
|
+
Fix any real API mismatches, then continue to Step 4.
|
|
264
|
+
|
|
265
|
+
3. **Toolchain absent** → the integration code is complete; you simply can't compile *here*.
|
|
266
|
+
Do **not** report this as an error or a failed install. Instead:
|
|
267
|
+
- Check `command -v brew`. If Homebrew is available, **offer** (don't assume) to install the
|
|
268
|
+
toolchain — `brew install openjdk@21` plus the Android command-line tools — explaining
|
|
269
|
+
what it does and that it's optional.
|
|
270
|
+
- If Homebrew is absent, or the developer would rather not, tell them plainly:
|
|
271
|
+
*"The integration code is done — I can't compile in this environment. Open the project in
|
|
272
|
+
Android Studio and build; paste back any errors and I'll fix them."* Then summarise every
|
|
273
|
+
file you changed so they can review and build with confidence.
|
|
274
|
+
|
|
275
|
+
Frame a missing build toolchain as **"here's how to verify"**, never as a failure of the work.
|
|
276
|
+
|
|
251
277
|
### Step 4 — Verify it works end to end
|
|
252
278
|
|
|
253
279
|
1. Confirm the Application/MainActivity injects `PathTerminalAdapter` (not the old adapter).
|
|
@@ -311,6 +311,22 @@ If `PathPaymentTerminalAdapter.swift` does not exist, create it:
|
|
|
311
311
|
|
|
312
312
|
---
|
|
313
313
|
|
|
314
|
+
### Step 3.5 — Build to catch API mismatches (check the environment first)
|
|
315
|
+
|
|
316
|
+
Confirm your Swift compiles against the SDK's **real** API. **Probe the toolchain first**, and
|
|
317
|
+
treat a missing one as an environment limitation to advise on, **never as a failure:**
|
|
318
|
+
|
|
319
|
+
1. `xcodebuild -version` — is Xcode (or its command-line tools) available?
|
|
320
|
+
2. **Present** → you may run a build (e.g. `xcodebuild -scheme <App> -destination 'generic/platform=iOS' build`)
|
|
321
|
+
to surface Swift errors, then fix real API mismatches. (Full runtime verification is the
|
|
322
|
+
developer's step below — it needs Xcode + a device/simulator.)
|
|
323
|
+
3. **Absent** → the integration code is complete; you just can't build *here*. Do **not** report a
|
|
324
|
+
failure. Tell the developer plainly: *"The code is done — open the project in Xcode and build;
|
|
325
|
+
paste back any errors and I'll fix them,"* and summarise every file you changed. (Xcode installs
|
|
326
|
+
from the App Store, not a package manager — don't offer to install it.)
|
|
327
|
+
|
|
328
|
+
Frame a missing build toolchain as **"here's how to verify"**, never as a failure of the work.
|
|
329
|
+
|
|
314
330
|
### Step 4 — Verify it works end to end
|
|
315
331
|
|
|
316
332
|
1. Confirm the app entry point injects `PathPaymentTerminalAdapter()`.
|
|
@@ -180,6 +180,21 @@ Confirm the transaction methods map correctly:
|
|
|
180
180
|
|
|
181
181
|
---
|
|
182
182
|
|
|
183
|
+
### Step 3.5 — Build to catch API mismatches (check the environment first)
|
|
184
|
+
|
|
185
|
+
Confirm your C# compiles against the SDK's **real** API. **Probe the toolchain first**, and
|
|
186
|
+
treat a missing one as an environment limitation to advise on, **never as a failure:**
|
|
187
|
+
|
|
188
|
+
1. `dotnet --version` — is the .NET SDK / MSBuild available? (net48 builds need it.)
|
|
189
|
+
2. **Present** → run `dotnet build src\Path.Epos.TestHarness.Wpf\Path.Epos.TestHarness.Wpf.csproj`,
|
|
190
|
+
fix any real API mismatches, then continue to Step 4.
|
|
191
|
+
3. **Absent** → the code is complete; you just can't build *here*. Do **not** report a failure.
|
|
192
|
+
If a package manager is present, **offer** to install the .NET SDK (`winget install Microsoft.DotNet.SDK.8`
|
|
193
|
+
or `choco install dotnet-sdk`); otherwise tell the developer: *"The code is done — build in Visual
|
|
194
|
+
Studio or with `dotnet build` and paste back any errors,"* and summarise the files you changed.
|
|
195
|
+
|
|
196
|
+
Frame a missing build toolchain as **"here's how to verify"**, never as a failure of the work.
|
|
197
|
+
|
|
183
198
|
### Step 4 — Verify it works end to end
|
|
184
199
|
|
|
185
200
|
1. Confirm the app composes the Path-backed service, not `OCPayTerminalAdapter`.
|
|
@@ -174,6 +174,21 @@ Confirm the transaction methods map correctly:
|
|
|
174
174
|
|
|
175
175
|
---
|
|
176
176
|
|
|
177
|
+
### Step 3.5 — Build to catch API mismatches (check the environment first)
|
|
178
|
+
|
|
179
|
+
Confirm your C# compiles against the SDK's **real** API. **Probe the toolchain first**, and
|
|
180
|
+
treat a missing one as an environment limitation to advise on, **never as a failure:**
|
|
181
|
+
|
|
182
|
+
1. `dotnet --version` — is the .NET 10 SDK available?
|
|
183
|
+
2. **Present** → run `dotnet build Path.Epos.TestHarness.sln -c Debug`, fix any real API
|
|
184
|
+
mismatches, then continue to Step 4.
|
|
185
|
+
3. **Absent** → the code is complete; you just can't build *here*. Do **not** report a failure.
|
|
186
|
+
If a package manager is present, **offer** to install the .NET 10 SDK (`winget install Microsoft.DotNet.SDK.10`);
|
|
187
|
+
otherwise tell the developer: *"The code is done — build in Visual Studio or with `dotnet build`
|
|
188
|
+
and paste back any errors,"* and summarise the files you changed.
|
|
189
|
+
|
|
190
|
+
Frame a missing build toolchain as **"here's how to verify"**, never as a failure of the work.
|
|
191
|
+
|
|
177
192
|
### Step 4 — Verify it works end to end
|
|
178
193
|
|
|
179
194
|
1. Confirm the app root composes the Path-backed manager, not `OCPayTerminalAdapter`.
|