{"remainingRequest":"D:\\jenkins\\workspace\\dataShare-fvue\\node_modules\\@vue\\cli-plugin-babel\\node_modules\\thread-loader\\dist\\cjs.js!D:\\jenkins\\workspace\\dataShare-fvue\\node_modules\\babel-loader\\lib\\index.js!D:\\jenkins\\workspace\\dataShare-fvue\\node_modules\\@vue\\cli-plugin-babel\\node_modules\\cache-loader\\dist\\cjs.js??ref--0-0!D:\\jenkins\\workspace\\dataShare-fvue\\node_modules\\vue-loader\\lib\\index.js??vue-loader-options!D:\\jenkins\\workspace\\dataShare-fvue\\src\\components\\querySql\\DynamicView.vue?vue&type=script&lang=js","dependencies":[{"path":"D:\\jenkins\\workspace\\dataShare-fvue\\src\\components\\querySql\\DynamicView.vue","mtime":1733309212345},{"path":"D:\\jenkins\\workspace\\dataShare-fvue\\babel.config.js","mtime":1733906004399},{"path":"D:\\jenkins\\workspace\\dataShare-fvue\\node_modules\\@vue\\cli-plugin-babel\\node_modules\\cache-loader\\dist\\cjs.js","mtime":499162500000},{"path":"D:\\jenkins\\workspace\\dataShare-fvue\\node_modules\\@vue\\cli-plugin-babel\\node_modules\\thread-loader\\dist\\cjs.js","mtime":499162500000},{"path":"D:\\jenkins\\workspace\\dataShare-fvue\\node_modules\\babel-loader\\lib\\index.js","mtime":456789000000},{"path":"D:\\jenkins\\workspace\\dataShare-fvue\\node_modules\\@vue\\cli-plugin-babel\\node_modules\\cache-loader\\dist\\cjs.js","mtime":499162500000},{"path":"D:\\jenkins\\workspace\\dataShare-fvue\\node_modules\\vue-loader\\lib\\index.js","mtime":499162500000}],"contextDependencies":[],"result":[{"type":"Buffer","data":"base64:aW1wb3J0IF90b0NvbnN1bWFibGVBcnJheSBmcm9tICJEOi9qZW5raW5zL3dvcmtzcGFjZS9kYXRhU2hhcmUtZnZ1ZS9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vdG9Db25zdW1hYmxlQXJyYXkuanMiOwppbXBvcnQgX2NyZWF0ZUZvck9mSXRlcmF0b3JIZWxwZXIgZnJvbSAiRDovamVua2lucy93b3Jrc3BhY2UvZGF0YVNoYXJlLWZ2dWUvbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL2NyZWF0ZUZvck9mSXRlcmF0b3JIZWxwZXIuanMiOwppbXBvcnQgImNvcmUtanMvbW9kdWxlcy9lcy5hcnJheS5maWx0ZXIuanMiOwppbXBvcnQgImNvcmUtanMvbW9kdWxlcy9lcy5hcnJheS5pbmNsdWRlcy5qcyI7CmltcG9ydCAiY29yZS1qcy9tb2R1bGVzL2VzLmFycmF5LmpvaW4uanMiOwppbXBvcnQgImNvcmUtanMvbW9kdWxlcy9lcy5hcnJheS5tYXAuanMiOwppbXBvcnQgImNvcmUtanMvbW9kdWxlcy9lcy5hcnJheS5wdXNoLmpzIjsKaW1wb3J0ICJjb3JlLWpzL21vZHVsZXMvZXMuYXJyYXkucmVkdWNlLmpzIjsKaW1wb3J0ICJjb3JlLWpzL21vZHVsZXMvZXMuYXJyYXkuc3BsaWNlLmpzIjsKaW1wb3J0ICJjb3JlLWpzL21vZHVsZXMvZXMuZnVuY3Rpb24ubmFtZS5qcyI7CmltcG9ydCAiY29yZS1qcy9tb2R1bGVzL2VzLm51bWJlci5jb25zdHJ1Y3Rvci5qcyI7CmltcG9ydCAiY29yZS1qcy9tb2R1bGVzL2VzLm51bWJlci50by1maXhlZC5qcyI7CmltcG9ydCAiY29yZS1qcy9tb2R1bGVzL2VzLm9iamVjdC5rZXlzLmpzIjsKaW1wb3J0ICJjb3JlLWpzL21vZHVsZXMvZXMub2JqZWN0LnRvLXN0cmluZy5qcyI7CmltcG9ydCAiY29yZS1qcy9tb2R1bGVzL2VzLnJlZ2V4cC5leGVjLmpzIjsKaW1wb3J0ICJjb3JlLWpzL21vZHVsZXMvZXMuc3RyaW5nLmluY2x1ZGVzLmpzIjsKaW1wb3J0ICJjb3JlLWpzL21vZHVsZXMvZXMuc3RyaW5nLnJlcGxhY2UuanMiOwppbXBvcnQgImNvcmUtanMvbW9kdWxlcy9lcy5zdHJpbmcuc2VhcmNoLmpzIjsKaW1wb3J0ICJjb3JlLWpzL21vZHVsZXMvZXNuZXh0Lml0ZXJhdG9yLmNvbnN0cnVjdG9yLmpzIjsKaW1wb3J0ICJjb3JlLWpzL21vZHVsZXMvZXNuZXh0Lml0ZXJhdG9yLmV2ZXJ5LmpzIjsKaW1wb3J0ICJjb3JlLWpzL21vZHVsZXMvZXNuZXh0Lml0ZXJhdG9yLmZpbHRlci5qcyI7CmltcG9ydCAiY29yZS1qcy9tb2R1bGVzL2VzbmV4dC5pdGVyYXRvci5mb3ItZWFjaC5qcyI7CmltcG9ydCAiY29yZS1qcy9tb2R1bGVzL2VzbmV4dC5pdGVyYXRvci5tYXAuanMiOwppbXBvcnQgImNvcmUtanMvbW9kdWxlcy9lc25leHQuaXRlcmF0b3IucmVkdWNlLmpzIjsKaW1wb3J0ICJjb3JlLWpzL21vZHVsZXMvd2ViLmRvbS1jb2xsZWN0aW9ucy5mb3ItZWFjaC5qcyI7Ci8vCi8vCi8vCi8vCgppbXBvcnQgeyBtYXBTdGF0ZSwgbWFwQWN0aW9ucyB9IGZyb20gInZ1ZXgiOwppbXBvcnQgeyBNZXNzYWdlIH0gZnJvbSAiZWxlbWVudC11aSI7CmltcG9ydCB7IExvYWRpbmcgfSBmcm9tICJlbGVtZW50LXVpIjsKaW1wb3J0IEh0Q2hlY2tib3ggZnJvbSAiQC9jb21wb25lbnRzL2NvbnRyb2wvSHRDaGVja2JveC52dWUiOwppbXBvcnQgSHREaWFsb2cgZnJvbSAiQC9jb21wb25lbnRzL2NvbnRyb2wvSHREaWFsb2cudnVlIjsKaW1wb3J0IEh0RGlhbG9nQnRuIGZyb20gIkAvY29tcG9uZW50cy9jb250cm9sL2h0RGlhbG9nQnRuLnZ1ZSI7CmltcG9ydCB1dGlscyBmcm9tICJAL3V0aWxzLmpzIjsKaW1wb3J0IHJlcSBmcm9tICJAL3JlcXVlc3QuanMiOwppbXBvcnQgeyBCYXNlNjQgfSBmcm9tICJqcy1iYXNlNjQiOwppbXBvcnQgVnVlIGZyb20gInZ1ZSI7CmV4cG9ydCBkZWZhdWx0IHsKICBuYW1lOiAiZHluYW1pYy12aWV3IiwKICBwcm9wczogewogICAgc2luZ2xlOiBTdHJpbmcsCiAgICBzcWxBbGlhczogU3RyaW5nLAogICAgYWxpYXM6IFN0cmluZywKICAgIGh0bWw6IFN0cmluZywKICAgIHF1ZXJ5VmlldzogT2JqZWN0CiAgfSwKICBjcmVhdGVkOiBmdW5jdGlvbiBjcmVhdGVkKCkgewogICAgdGhpcy5pbml0KCk7CiAgfSwKICB3YXRjaDogewogICAgaHRtbDogZnVuY3Rpb24gaHRtbChuZXdWYWwpIHsKICAgICAgaWYgKG5ld1ZhbCkgewogICAgICAgIHRoaXMuaW5pdCgpOwogICAgICB9CiAgICB9CiAgfSwKICBtZXRob2RzOiB7CiAgICBpbml0OiBmdW5jdGlvbiBpbml0KCkgewogICAgICBWdWUuY29tcG9uZW50KCJodC1ydW50aW1lLXRlbXBsYXRlIiwgewogICAgICAgIHByb3BzOiB7CiAgICAgICAgICBzaW5nbGU6IFN0cmluZywKICAgICAgICAgIHNxbEFsaWFzOiBTdHJpbmcsCiAgICAgICAgICBhbGlhczogU3RyaW5nLAogICAgICAgICAgaHRtbDogU3RyaW5nLAogICAgICAgICAgcXVlcnlWaWV3OiBPYmplY3QKICAgICAgICB9LAogICAgICAgIHRlbXBsYXRlOiB0aGlzLmh0bWwsCiAgICAgICAgZGF0YTogZnVuY3Rpb24gZGF0YSgpIHsKICAgICAgICAgIHJldHVybiB7CiAgICAgICAgICAgIGJwbVJ1blRpbWU6IHdpbmRvdy5jb250ZXh0LmJwbVJ1blRpbWUsCiAgICAgICAgICAgIGZpbGVMaXN0OiBbXSwKICAgICAgICAgICAgdGFibGVEYXRhOiB7CiAgICAgICAgICAgICAgc2VsZWN0Um93czogW10sCiAgICAgICAgICAgICAgcXVlcnlzOiAiIgogICAgICAgICAgICB9LAogICAgICAgICAgICBkaWFsb2dFeHBvcnRWaXNpYmxlOiBmYWxzZSwKICAgICAgICAgICAgZXhwb3J0RGF0YTogewogICAgICAgICAgICAgIGdldFR5cGU6ICJhbGwiLAogICAgICAgICAgICAgIGV4cEZpZWxkOiBbXQogICAgICAgICAgICB9LAogICAgICAgICAgICBleHBvcnRTZWxsZWN0aW9uOiBbXSwKICAgICAgICAgICAgc2VhcmNoRm9ybToge30sCiAgICAgICAgICAgIGRpc3BsYXlGaWVsZHM6IFtdLAogICAgICAgICAgICBhbGFybVNldHRpbmdNYXA6IHt9LAogICAgICAgICAgICBzdW1tYXJ5VHlwZU1hcDoge30sCiAgICAgICAgICAgIHF1ZXJ5Rm9ybTogewogICAgICAgICAgICAgIHF1ZXJ5RGF0YTogIiIKICAgICAgICAgICAgfSwKICAgICAgICAgICAgdXBsb2FkUGFyYW1zOiB7CiAgICAgICAgICAgICAgaWQ6IFtdCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIGZvcm1UeXBlOiBmYWxzZSwKICAgICAgICAgICAgbGFiZWxQb3NpdGlvbjogImxlZnQiLAogICAgICAgICAgICBpbmNvbnM6ICJlbC1pY29uLWFycm93LWRvd24iLAogICAgICAgICAgICBmb3JtYXR0ZXJNYXA6IHt9LAogICAgICAgICAgICBvcHRpb25zOiB7CiAgICAgICAgICAgICAgZnVsbHNjcmVlbjogdHJ1ZSwKICAgICAgICAgICAgICBsb2NrOiB0cnVlCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIHVwbG9hZEVycm9yOiAiL3J1bnRpbWUvcGhvdG9FcnJvckNzdi92MS91cGxvYWRFcnJvckxpc3QiLAogICAgICAgICAgICB1cG9hZFBkZlRvQXp1cmU6IHdpbmRvdy5jb250ZXh0LmJwbVJ1blRpbWUgKyAiL3J1bnRpbWUvYmxvYi92MS91cG9hZFBkZlRvQXp1cmUiLAogICAgICAgICAgICB1cGxvYWRVbnByZXBhcmU6ICIvcnVudGltZS9ibG9iL3YxL3Vwb2FkVG9BenVyZSIsCiAgICAgICAgICAgIHN1bW1hcnlTZXR0aW5nOiBbXSwKICAgICAgICAgICAgYWN0aXZlTmFtZXM6IFsnMSddCiAgICAgICAgICB9OwogICAgICAgIH0sCiAgICAgICAgY29tcHV0ZWQ6IG1hcFN0YXRlKHsKICAgICAgICAgIHJvd3M6IGZ1bmN0aW9uIHJvd3Moc3RhdGUpIHsKICAgICAgICAgICAgcmV0dXJuIHN0YXRlLmZvcm0ucXVlcnlTcWxWaWV3Um93czsKICAgICAgICAgIH0sCiAgICAgICAgICBwYWdpbmF0aW9uOiBmdW5jdGlvbiBwYWdpbmF0aW9uKHN0YXRlKSB7CiAgICAgICAgICAgIHJldHVybiBzdGF0ZS5mb3JtLnF1ZXJ5U3FsVmlld1BhZ2luYXRpb247CiAgICAgICAgICB9LAogICAgICAgICAgdG90YWw6IGZ1bmN0aW9uIHRvdGFsKHN0YXRlKSB7CiAgICAgICAgICAgIHJldHVybiBzdGF0ZS5mb3JtLnF1ZXJ5U3FsVmlld1RvdGFsOwogICAgICAgICAgfSwKICAgICAgICAgIHVwbG9hZEhlYWRlcnM6IGZ1bmN0aW9uIHVwbG9hZEhlYWRlcnMoc3RhdGUpIHsKICAgICAgICAgICAgcmV0dXJuIHsKICAgICAgICAgICAgICBBdXRob3JpemF0aW9uOiAiQmVhcmVyICIuY29uY2F0KHN0YXRlLmxvZ2luLmN1cnJlbnRVc2VyLnRva2VuKQogICAgICAgICAgICB9OwogICAgICAgICAgfSwKICAgICAgICAgIHVwbG9hZEVycm9ySHR0cDogZnVuY3Rpb24gdXBsb2FkRXJyb3JIdHRwKCkgewogICAgICAgICAgICByZXR1cm4gdGhpcy5icG1SdW5UaW1lICsgdGhpcy51cGxvYWRFcnJvcjsKICAgICAgICAgIH0sCiAgICAgICAgICB1cGxvYWRVbnByZXBhcmVIdHRwOiBmdW5jdGlvbiB1cGxvYWRVbnByZXBhcmVIdHRwKCkgewogICAgICAgICAgICByZXR1cm4gdGhpcy5icG1SdW5UaW1lICsgdGhpcy51cGxvYWRVbnByZXBhcmU7CiAgICAgICAgICB9CiAgICAgICAgfSksCiAgICAgICAgY29tcG9uZW50czogewogICAgICAgICAgSHRDaGVja2JveDogSHRDaGVja2JveCwKICAgICAgICAgIEh0RGlhbG9nOiBIdERpYWxvZywKICAgICAgICAgIEh0RGlhbG9nQnRuOiBIdERpYWxvZ0J0bgogICAgICAgIH0sCiAgICAgICAgd2F0Y2g6IHsKICAgICAgICAgIGZvcm1LZXk6IGZ1bmN0aW9uIGZvcm1LZXkobmV3VmFsKSB7CiAgICAgICAgICAgIGlmIChuZXdWYWwpIHsKICAgICAgICAgICAgICB0aGlzLmluaXQoKTsKICAgICAgICAgICAgfQogICAgICAgICAgfSwKICAgICAgICAgICJ0YWJsZURhdGEuc2VsZWN0Um93cyI6IGZ1bmN0aW9uIHRhYmxlRGF0YVNlbGVjdFJvd3MobmV3VmFsKSB7CiAgICAgICAgICAgIGlmIChuZXdWYWwubGVuZ3RoID4gMCkgewogICAgICAgICAgICAgIHZhciBtZV8gPSB0aGlzOwogICAgICAgICAgICAgIG1lXy51cGxvYWRQYXJhbXMuaWQgPSBbXTsKICAgICAgICAgICAgICBuZXdWYWwuZm9yRWFjaChmdW5jdGlvbiAoaXRlbSkgewogICAgICAgICAgICAgICAgbWVfLnVwbG9hZFBhcmFtcy5pZC5wdXNoKGl0ZW0uSU5TVElEKTsKICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgfQogICAgICAgICAgfSwKICAgICAgICAgICRyb3V0ZTogImluaXQiLAogICAgICAgICAgcXVlcnlWaWV3OiB7CiAgICAgICAgICAgIGhhbmRsZXI6IGZ1bmN0aW9uIGhhbmRsZXIobmV3VmFsLCBvbGRWYWwpIHsKICAgICAgICAgICAgICBpZiAobmV3VmFsLnNob3dzKSB7CiAgICAgICAgICAgICAgICB2YXIgZGlzcGxheUZpZWxkID0gdXRpbHMucGFyc2VUb0pzb24obmV3VmFsLnNob3dzKTsKICAgICAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgZGlzcGxheUZpZWxkLmxlbmd0aDsgaSsrKSB7CiAgICAgICAgICAgICAgICAgIGlmIChkaXNwbGF5RmllbGRbaV0uaGlkZGVuID09IDApIHsKICAgICAgICAgICAgICAgICAgICB0aGlzLmRpc3BsYXlGaWVsZHMucHVzaChkaXNwbGF5RmllbGRbaV0pOwogICAgICAgICAgICAgICAgICAgIGlmIChkaXNwbGF5RmllbGRbaV0uc3VtbWFyeVR5cGUpIHsKICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc3VtbWFyeVR5cGVNYXBbZGlzcGxheUZpZWxkW2ldLmZpZWxkTmFtZV0gPSBkaXNwbGF5RmllbGRbaV0uc3VtbWFyeVR5cGU7CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgIGlmIChkaXNwbGF5RmllbGRbaV0uZm9ybWF0ZXIpIHsKICAgICAgICAgICAgICAgICAgICB0aGlzLmZvcm1hdHRlck1hcFtkaXNwbGF5RmllbGRbaV0uZmllbGROYW1lXSA9IGRpc3BsYXlGaWVsZFtpXS5mb3JtYXRlcjsKICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICBpZiAoZGlzcGxheUZpZWxkW2ldLmFsYXJtU2V0dGluZykgewogICAgICAgICAgICAgICAgICAgIHRoaXMuYWxhcm1TZXR0aW5nTWFwW2Rpc3BsYXlGaWVsZFtpXS5maWVsZE5hbWVdID0gZGlzcGxheUZpZWxkW2ldLmFsYXJtU2V0dGluZzsKICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgIH0KICAgICAgICAgICAgICBpZiAobmV3VmFsLnN1bW1hcnlTZXR0aW5nKSB7CiAgICAgICAgICAgICAgICB0aGlzLnN1bW1hcnlTZXR0aW5nID0gSlNPTi5wYXJzZShuZXdWYWwuc3VtbWFyeVNldHRpbmcpOwogICAgICAgICAgICAgIH0KICAgICAgICAgICAgfSwKICAgICAgICAgICAgaW1tZWRpYXRlOiB0cnVlCiAgICAgICAgICB9CiAgICAgICAgfSwKICAgICAgICBtZXRob2RzOiB7CiAgICAgICAgICAvL+aJk+WNsAogICAgICAgICAgcHJpbnRMaXN0OiBmdW5jdGlvbiBwcmludExpc3QoKSB7CiAgICAgICAgICAgIGRvY3VtZW50LmJvZHkuaW5uZXJIVE1MID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoInByaW50RGF0YSIpLmlubmVySFRNTDsKICAgICAgICAgICAgd2luZG93LnByaW50KCk7CiAgICAgICAgICAgIGxvY2F0aW9uLnJlbG9hZCgpOwogICAgICAgICAgfSwKICAgICAgICAgIC8v55Sf5oiQ5LqM57u056CBCiAgICAgICAgICAvL+i3r+eUsei3s+i9rAogICAgICAgICAgcm91dGVyUHVzaDogZnVuY3Rpb24gcm91dGVyUHVzaCh1cmwpIHsKICAgICAgICAgICAgdGhpcy4kcm91dGVyLnB1c2godXJsKTsKICAgICAgICAgIH0sCiAgICAgICAgICAvL+afpeeci+S4juWkhOeQhua1geeoi+aMiemSrgogICAgICAgICAgZGlzcG9zZTogZnVuY3Rpb24gZGlzcG9zZShyb3cpIHsKICAgICAgICAgICAgdmFyIHVybDsKICAgICAgICAgICAgaWYgKHJvdy5UQVNLSUQpIHsKICAgICAgICAgICAgICAvL+WuoeaJueS7u+WKoQogICAgICAgICAgICAgIHVybCA9ICIvdGFzay8iICsgcm93LlRBU0tJRDsKICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAvL+afpeeci+a1geeoi+WunuS+iwogICAgICAgICAgICAgIHVybCA9ICIvaW5zdC8iICsgcm93LklOU1RJRDsKICAgICAgICAgICAgfQogICAgICAgICAgICB0aGlzLiRyb3V0ZXIucHVzaCh1cmwpOwogICAgICAgICAgfSwKICAgICAgICAgIGhhbmRsZVNpemVDaGFuZ2U6IGZ1bmN0aW9uIGhhbmRsZVNpemVDaGFuZ2Uoc2l6ZSkgewogICAgICAgICAgICAvL+avj+mhteS4i+aLieaYvuekuuaVsOaNrgogICAgICAgICAgICB0aGlzLiRzdG9yZS5kaXNwYXRjaCgiZm9ybS9zZXRRdWVyeVNxbFZpZXdQYWdpbmF0aW9uU2l6ZSIsIHNpemUpOwogICAgICAgICAgICB0aGlzLnNlYXJjaCgpOwogICAgICAgICAgfSwKICAgICAgICAgIGhhbmRsZUN1cnJlbnRDaGFuZ2U6IGZ1bmN0aW9uIGhhbmRsZUN1cnJlbnRDaGFuZ2UoY3VycmVudFBhZ2UpIHsKICAgICAgICAgICAgLy/ngrnlh7vnrKzlh6DpobUKICAgICAgICAgICAgdGhpcy4kc3RvcmUuZGlzcGF0Y2goImZvcm0vc2V0UXVlcnlTcWxWaWV3UGFnaW5hdGlvblBhZ2VOdW0iLCBjdXJyZW50UGFnZSk7CiAgICAgICAgICAgIHRoaXMuc2VhcmNoKCk7CiAgICAgICAgICB9LAogICAgICAgICAgLy/lm57ovabmn6Xor6IKICAgICAgICAgIHNlYXJjaEVudGVyRnVuOiBmdW5jdGlvbiBzZWFyY2hFbnRlckZ1bihlKSB7CiAgICAgICAgICAgIHZhciBrZXlDb2RlID0gd2luZG93LmV2ZW50ID8gZS5rZXlDb2RlIDogZS53aGljaDsKICAgICAgICAgICAgaWYgKGtleUNvZGUgPT0gMTMpIHsKICAgICAgICAgICAgICB0aGlzLnNlYXJjaCgnZmluZCcpOwogICAgICAgICAgICB9CiAgICAgICAgICB9LAogICAgICAgICAgc2VhcmNoOiBmdW5jdGlvbiBzZWFyY2goc3RyKSB7CiAgICAgICAgICAgIHZhciBsb2FkaW5nID0gdGhpcy4kbG9hZGluZyh0aGlzLm9wdGlvbnMpOwogICAgICAgICAgICB2YXIgcGFyYW1zID0ge307CiAgICAgICAgICAgIGlmIChzdHIgPT0gImZpbmQiKSB7CiAgICAgICAgICAgICAgdGhpcy4kc3RvcmUuZGlzcGF0Y2goImZvcm0vc2V0UXVlcnlTcWxWaWV3UGFnaW5hdGlvblBhZ2VOdW0iLCAxKTsKICAgICAgICAgICAgfQogICAgICAgICAgICAvL+WIpOaWreS4uuWQiOW5tuafpeivoui/mOaYr+WIhuW8gOafpeivogogICAgICAgICAgICBpZiAodGhpcy5mb3JtVHlwZSkgewogICAgICAgICAgICAgIHBhcmFtcyA9IHRoaXMuZ2V0UXVlcnlGaWx0ZXIoKTsKICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAvL+WIpOaWreaYr+WQpumFjee9ruS6huWQiOW5tuafpeivogogICAgICAgICAgICAgIGlmICgkKCIuc2VhcmNoLXF1ZXJ5IikubGVuZ3RoID4gMCkgewogICAgICAgICAgICAgICAgcGFyYW1zID0gdGhpcy5nZXRDb25kaXRpb25RdWVyeSgpOwogICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICBwYXJhbXMgPSB0aGlzLmdldFF1ZXJ5RmlsdGVyKCk7CiAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgICAgIGlmICgkLmlzRW1wdHlPYmplY3QodGhpcy5zZWFyY2hGb3JtKSkgewogICAgICAgICAgICAgIHRoaXMuJHN0b3JlLmRpc3BhdGNoKCJmb3JtL2dldFF1ZXJ5U3FsVmlld0J5UGFnaW5hdGlvbiIsIHBhcmFtcykudGhlbihmdW5jdGlvbiAoKSB7CiAgICAgICAgICAgICAgICBsb2FkaW5nLmNsb3NlKCk7CiAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgdGhpcy4kc3RvcmUuZGlzcGF0Y2goImZvcm0vZ2V0UXVlcnlTcWxWaWV3QnlQYWdpbmF0aW9uIiwgcGFyYW1zKS50aGVuKGZ1bmN0aW9uICgpIHsKICAgICAgICAgICAgICAgIGxvYWRpbmcuY2xvc2UoKTsKICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgfQogICAgICAgICAgfSwKICAgICAgICAgIGdldFF1ZXJ5RmlsdGVyOiBmdW5jdGlvbiBnZXRRdWVyeUZpbHRlcigpIHsKICAgICAgICAgICAgdmFyIG9wZXJhdGlvbk1hcCA9IHRoaXMuZ2V0U2VhcmNoSXRlbXMoKTsgLy/mn6Xor6LmnaHku7bnsbvlnosKICAgICAgICAgICAgdmFyIGZpZWxkUXVlcnlNYXAgPSB0aGlzLmdldEZpZWxkUXVlcnkoKTsgLy/mn6Xor6LmnaHku7blrZfmrrUKICAgICAgICAgICAgdmFyIHNwZWNpYWxNYXAgPSB0aGlzLmdldFNwZWNpYWxNYXAoKTsgLy/ojrflj5bnibnmrormn6Xor6Lmg4XlhrXvvIjoh6rlrprkuYnlr7nor53moYbvvIkKICAgICAgICAgICAgdmFyIHF1ZXJ5cyA9IFtdOyAvL+afpeivouadoeS7tgogICAgICAgICAgICB2YXIgcXVlcnlGaWx0ZXIgPSB7fTsKICAgICAgICAgICAgdmFyIHBhZ2VCZWFuID0gewogICAgICAgICAgICAgIHBhZ2VCZWFuOiB0aGlzLnBhZ2luYXRpb24KICAgICAgICAgICAgfTsKICAgICAgICAgICAgdmFyIHBhcmFtcyA9IHsKICAgICAgICAgICAgICBzcWxBbGlhczogdGhpcy5zcWxBbGlhcywKICAgICAgICAgICAgICBhbGlhczogdGhpcy5hbGlhcwogICAgICAgICAgICB9OwogICAgICAgICAgICBwYXJhbXMucGFnaW5hdGlvbiA9IHBhZ2VCZWFuOwogICAgICAgICAgICBpZiAoJC5pc0VtcHR5T2JqZWN0KHRoaXMuc2VhcmNoRm9ybSkpIHsKICAgICAgICAgICAgICByZXR1cm4gcGFyYW1zOwogICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgIGZvciAodmFyIGtleSBpbiB0aGlzLnNlYXJjaEZvcm0pIHsKICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgdGhpcy5zZWFyY2hGb3JtW2tleV0gIT0gInVuZGVmaW5lZCIgJiYgdGhpcy5zZWFyY2hGb3JtW2tleV0gIT0gIiIpIHsKICAgICAgICAgICAgICAgICAgaWYgKHRoaXMuc2VhcmNoRm9ybVtrZXldIGluc3RhbmNlb2YgQXJyYXkpIHsKICAgICAgICAgICAgICAgICAgICBpZiAob3BlcmF0aW9uTWFwW2tleV0gPT09ICJCRVRXRUVOIikgewogICAgICAgICAgICAgICAgICAgICAgdmFyIHZhbHVlQXJyYXkgPSBbXTsKICAgICAgICAgICAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5zZWFyY2hGb3JtW2tleV0ubGVuZ3RoOyBpKyspIHsKICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWVBcnJheS5wdXNoKHRoaXMuc2VhcmNoRm9ybVtrZXldW2ldKTsKICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgIHF1ZXJ5cy5wdXNoKHsKICAgICAgICAgICAgICAgICAgICAgICAgcHJvcGVydHk6IGtleSwKICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWU6IHZhbHVlQXJyYXkuam9pbigiLCIpLAogICAgICAgICAgICAgICAgICAgICAgICBncm91cDogIm1haW4iLAogICAgICAgICAgICAgICAgICAgICAgICBvcGVyYXRpb246IG9wZXJhdGlvbk1hcFtrZXldLAogICAgICAgICAgICAgICAgICAgICAgICByZWxhdGlvbjogIkFORCIKICAgICAgICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgICBmb3IgKHZhciBfaSA9IDA7IF9pIDwgdGhpcy5zZWFyY2hGb3JtW2tleV0ubGVuZ3RoOyBfaSsrKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIHF1ZXJ5cy5wdXNoKHsKICAgICAgICAgICAgICAgICAgICAgICAgICBwcm9wZXJ0eToga2V5LAogICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlOiB0aGlzLnNlYXJjaEZvcm1ba2V5XVtfaV0sCiAgICAgICAgICAgICAgICAgICAgICAgICAgZ3JvdXA6ICJtYWluIiwKICAgICAgICAgICAgICAgICAgICAgICAgICBvcGVyYXRpb246IG9wZXJhdGlvbk1hcFtrZXldLAogICAgICAgICAgICAgICAgICAgICAgICAgIHJlbGF0aW9uOiAiQU5EIgogICAgICAgICAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAodGhpcy5zZWFyY2hGb3JtW2tleV0uaW5jbHVkZXMoIiwiKSAmJiAhc3BlY2lhbE1hcFtrZXldKSB7CiAgICAgICAgICAgICAgICAgICAgdmFyIGFyciA9IHRoaXMuc2VhcmNoRm9ybVtrZXldLnNwbGl0KCIsIik7CiAgICAgICAgICAgICAgICAgICAgZm9yICh2YXIgX2kyID0gMDsgX2kyIDwgYXJyLmxlbmd0aDsgX2kyKyspIHsKICAgICAgICAgICAgICAgICAgICAgIGlmIChhcnJbX2kyXSA9PSAiIiB8fCBhcnJbX2kyXSA9PSBudWxsIHx8IHR5cGVvZiBhcnJbX2kyXSA9PSAidW5kZWZpbmVkIikgewogICAgICAgICAgICAgICAgICAgICAgICBhcnIuc3BsaWNlKF9pMiwgMSk7CiAgICAgICAgICAgICAgICAgICAgICAgIF9pMiA9IF9pMiAtIDE7CiAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgIGFyci5mb3JFYWNoKGZ1bmN0aW9uICh2KSB7CiAgICAgICAgICAgICAgICAgICAgICBxdWVyeXMucHVzaCh7CiAgICAgICAgICAgICAgICAgICAgICAgIHByb3BlcnR5OiBrZXksCiAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlOiB2LAogICAgICAgICAgICAgICAgICAgICAgICBncm91cDogIm1haW4iLAogICAgICAgICAgICAgICAgICAgICAgICBvcGVyYXRpb246IG9wZXJhdGlvbk1hcFtrZXldLAogICAgICAgICAgICAgICAgICAgICAgICByZWxhdGlvbjogIkFORCIKICAgICAgICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgICAgIHF1ZXJ5cy5wdXNoKHsKICAgICAgICAgICAgICAgICAgICAgIHByb3BlcnR5OiBrZXksCiAgICAgICAgICAgICAgICAgICAgICB2YWx1ZTogdGhpcy5zZWFyY2hGb3JtW2tleV0sCiAgICAgICAgICAgICAgICAgICAgICBncm91cDogIm1haW4iLAogICAgICAgICAgICAgICAgICAgICAgb3BlcmF0aW9uOiBvcGVyYXRpb25NYXBba2V5XSwKICAgICAgICAgICAgICAgICAgICAgIHJlbGF0aW9uOiAiQU5EIgogICAgICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgfQogICAgICAgICAgICAgIHF1ZXJ5RmlsdGVyID0gewogICAgICAgICAgICAgICAgcGFnZUJlYW46IHRoaXMucGFnaW5hdGlvbiwKICAgICAgICAgICAgICAgIHF1ZXJ5czogcXVlcnlzCiAgICAgICAgICAgICAgfTsKICAgICAgICAgICAgICBwYXJhbXMucGFnaW5hdGlvbiA9IHF1ZXJ5RmlsdGVyOwogICAgICAgICAgICAgIHJldHVybiBwYXJhbXM7CiAgICAgICAgICAgIH0KICAgICAgICAgIH0sCiAgICAgICAgICAvL+iOt+WPluafpeivouadoeS7tuexu+WeiwogICAgICAgICAgZ2V0U2VhcmNoSXRlbXM6IGZ1bmN0aW9uIGdldFNlYXJjaEl0ZW1zKCkgewogICAgICAgICAgICB2YXIgc2VhcmNoSXRlbXMgPSAkKCIuc2VhcmNoLWl0ZW0iKTsKICAgICAgICAgICAgdmFyIG9wZXJhdGlvbk1hcCA9IHt9OyAvL+afpeivouadoeS7tuexu+WeiwogICAgICAgICAgICB2YXIgb3BlcmF0aW9uVHlwZSA9IHsKICAgICAgICAgICAgICBMSzogIkxJS0UiLAogICAgICAgICAgICAgIEVROiAiRVFVQUwiLAogICAgICAgICAgICAgIGJldHdlZW46ICJCRVRXRUVOIiwKICAgICAgICAgICAgICBMRks6ICJMRUZUX0xJS0UiLAogICAgICAgICAgICAgIFJISzogIlJJR0hUX0xJS0UiLAogICAgICAgICAgICAgIE5FOiAiTk9UX0VRVUFMIiwKICAgICAgICAgICAgICBMVDogIkxFU1MiLAogICAgICAgICAgICAgIExFOiAiTEVTU19FUVVBTCIsCiAgICAgICAgICAgICAgR1Q6ICJHUkVBVCIsCiAgICAgICAgICAgICAgR0U6ICJHUkVBVF9FUVVBTCIKICAgICAgICAgICAgfTsKICAgICAgICAgICAgaWYgKHNlYXJjaEl0ZW1zKSB7CiAgICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBzZWFyY2hJdGVtcy5sZW5ndGg7IGkrKykgewogICAgICAgICAgICAgICAgdmFyIG9wZXJhdGlvbiA9ICI9IjsKICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgJChzZWFyY2hJdGVtc1tpXSkuYXR0cigiaHQtcXVlcnkiKSAhPSAidW5kZWZpbmVkIikgewogICAgICAgICAgICAgICAgICAvL+afpeivouadoeS7tuexu+WeiwogICAgICAgICAgICAgICAgICBvcGVyYXRpb24gPSAkKHNlYXJjaEl0ZW1zW2ldKS5hdHRyKCJvcGVyYXRpb24iKTsKICAgICAgICAgICAgICAgICAgb3BlcmF0aW9uTWFwWyQoc2VhcmNoSXRlbXNbaV0pLmF0dHIoImh0LXF1ZXJ5IildID0gdHlwZW9mIG9wZXJhdGlvblR5cGVbb3BlcmF0aW9uXSAhPSAidW5kZWZpbmVkIiA/IG9wZXJhdGlvblR5cGVbb3BlcmF0aW9uXSA6IG9wZXJhdGlvbjsKICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAodHlwZW9mICQoc2VhcmNoSXRlbXNbaV0pLmNoaWxkcmVuKCkuYXR0cigiaHQtcXVlcnkiKSAhPSAidW5kZWZpbmVkIikgewogICAgICAgICAgICAgICAgICAvL+afpeivouadoeS7tuexu+WeiwogICAgICAgICAgICAgICAgICBvcGVyYXRpb24gPSAkKHNlYXJjaEl0ZW1zW2ldKS5jaGlsZHJlbigpLmF0dHIoIm9wZXJhdGlvbiIpOwogICAgICAgICAgICAgICAgICBvcGVyYXRpb25NYXBbJChzZWFyY2hJdGVtc1tpXSkuY2hpbGRyZW4oKS5hdHRyKCJodC1xdWVyeSIpXSA9IHR5cGVvZiBvcGVyYXRpb25UeXBlW29wZXJhdGlvbl0gIT0gInVuZGVmaW5lZCIgPyBvcGVyYXRpb25UeXBlW29wZXJhdGlvbl0gOiBvcGVyYXRpb247CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgICAgIHJldHVybiBvcGVyYXRpb25NYXA7CiAgICAgICAgICB9LAogICAgICAgICAgLy/ojrflj5bmn6Xor6LmnaHku7blrZfmrrUKICAgICAgICAgIGdldEZpZWxkUXVlcnk6IGZ1bmN0aW9uIGdldEZpZWxkUXVlcnkoKSB7CiAgICAgICAgICAgIHZhciBzZWFyY2hJdGVtcyA9ICQoIi5zZWFyY2gtaXRlbSIpOwogICAgICAgICAgICB2YXIgZmllbGRRdWVyeU1hcCA9IHt9OyAvL+afpeivouadoeS7tuWtl+autQoKICAgICAgICAgICAgaWYgKHNlYXJjaEl0ZW1zKSB7CiAgICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBzZWFyY2hJdGVtcy5sZW5ndGg7IGkrKykgewogICAgICAgICAgICAgICAgaWYgKHR5cGVvZiAkKHNlYXJjaEl0ZW1zW2ldKS5hdHRyKCJodC1xdWVyeSIpICE9ICJ1bmRlZmluZWQiKSB7CiAgICAgICAgICAgICAgICAgIC8v5p+l6K+i5p2h5Lu25a2X5q61CiAgICAgICAgICAgICAgICAgIGZpZWxkUXVlcnlNYXBbJChzZWFyY2hJdGVtc1tpXSkuYXR0cigiaHQtcXVlcnkiKV0gPSAkKHNlYXJjaEl0ZW1zW2ldKS5hdHRyKCJmaWVsZC1xdWVyeSIpOwogICAgICAgICAgICAgICAgfSBlbHNlIGlmICh0eXBlb2YgJChzZWFyY2hJdGVtc1tpXSkuY2hpbGRyZW4oKS5hdHRyKCJodC1xdWVyeSIpICE9ICJ1bmRlZmluZWQiKSB7CiAgICAgICAgICAgICAgICAgIC8v5p+l6K+i5p2h5Lu25a2X5q61CiAgICAgICAgICAgICAgICAgIGZpZWxkUXVlcnlNYXBbJChzZWFyY2hJdGVtc1tpXSkuY2hpbGRyZW4oKS5hdHRyKCJodC1xdWVyeSIpXSA9ICQoc2VhcmNoSXRlbXNbaV0pLmNoaWxkcmVuKCkuYXR0cigiZmllbGQtcXVlcnkiKTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICAgICAgcmV0dXJuIGZpZWxkUXVlcnlNYXA7CiAgICAgICAgICB9LAogICAgICAgICAgLy/ojrflj5bnibnmrormn6Xor6Lmg4XlhrXvvIjoh6rlrprkuYnlr7nor53moYbvvIkKICAgICAgICAgIGdldFNwZWNpYWxNYXA6IGZ1bmN0aW9uIGdldFNwZWNpYWxNYXAoKSB7CiAgICAgICAgICAgIHZhciBzZWFyY2hJdGVtcyA9ICQoIi5zZWFyY2gtaXRlbSIpOwogICAgICAgICAgICB2YXIgZmllbGRRdWVyeU1hcCA9IHt9OyAvL+afpeivouadoeS7tuWtl+autQoKICAgICAgICAgICAgaWYgKHNlYXJjaEl0ZW1zKSB7CiAgICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBzZWFyY2hJdGVtcy5sZW5ndGg7IGkrKykgewogICAgICAgICAgICAgICAgaWYgKHR5cGVvZiAkKHNlYXJjaEl0ZW1zW2ldKS5hdHRyKCJodC1xdWVyeSIpICE9ICJ1bmRlZmluZWQiKSB7CiAgICAgICAgICAgICAgICAgIC8v5p+l6K+i5p2h5Lu25a2X5q61CiAgICAgICAgICAgICAgICAgIGZpZWxkUXVlcnlNYXBbJChzZWFyY2hJdGVtc1tpXSkuYXR0cigiaHQtcXVlcnkiKV0gPSB0eXBlb2YgJChzZWFyY2hJdGVtc1tpXSkuYXR0cigic3BlY2lhbC1xdWVyeSIpICE9ICJ1bmRlZmluZWQiID8gdHJ1ZSA6IGZhbHNlOwogICAgICAgICAgICAgICAgfSBlbHNlIGlmICh0eXBlb2YgJChzZWFyY2hJdGVtc1tpXSkuY2hpbGRyZW4oKS5hdHRyKCJodC1xdWVyeSIpICE9ICJ1bmRlZmluZWQiKSB7CiAgICAgICAgICAgICAgICAgIC8v5p+l6K+i5p2h5Lu25a2X5q61CiAgICAgICAgICAgICAgICAgIGZpZWxkUXVlcnlNYXBbJChzZWFyY2hJdGVtc1tpXSkuY2hpbGRyZW4oKS5hdHRyKCJodC1xdWVyeSIpXSA9IHR5cGVvZiAkKHNlYXJjaEl0ZW1zW2ldKS5jaGlsZHJlbigpLmF0dHIoInNwZWNpYWwtcXVlcnkiKSAhPSAidW5kZWZpbmVkIiA/IHRydWUgOiBmYWxzZTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICAgICAgcmV0dXJuIGZpZWxkUXVlcnlNYXA7CiAgICAgICAgICB9LAogICAgICAgICAgZ2V0Q29uZGl0aW9uUXVlcnk6IGZ1bmN0aW9uIGdldENvbmRpdGlvblF1ZXJ5KCkgewogICAgICAgICAgICB2YXIgc2VhcmNoQWxsID0gJCgiLnNlYXJjaC1xdWVyeSIpOwogICAgICAgICAgICB2YXIgdmFsdWVzID0gIiI7CiAgICAgICAgICAgIHZhciBxdWVyeXMgPSBbXTsgLy/mn6Xor6LmnaHku7YKICAgICAgICAgICAgdmFyIHF1ZXJ5RmlsdGVyID0ge307CiAgICAgICAgICAgIHZhciBwYWdlQmVhbiA9IHsKICAgICAgICAgICAgICBwYWdlQmVhbjogdGhpcy5wYWdpbmF0aW9uCiAgICAgICAgICAgIH07CiAgICAgICAgICAgIHZhciBwYXJhbXMgPSB7CiAgICAgICAgICAgICAgc3FsQWxpYXM6IHRoaXMuc3FsQWxpYXMsCiAgICAgICAgICAgICAgYWxpYXM6IHRoaXMuYWxpYXMKICAgICAgICAgICAgfTsKICAgICAgICAgICAgcGFyYW1zLnBhZ2luYXRpb24gPSBwYWdlQmVhbjsKICAgICAgICAgICAgaWYgKHRoaXMucXVlcnlGb3JtLnF1ZXJ5RGF0YSA9PSAiIikgewogICAgICAgICAgICAgIHJldHVybiBwYXJhbXM7CiAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgaWYgKHR5cGVvZiAkKCQoc2VhcmNoQWxsWzBdKS5jaGlsZHJlbigpWzBdKS5hdHRyKCJodC1xdWljay1zZWFyY2giKSAhPSAidW5kZWZpbmVkIikgewogICAgICAgICAgICAgICAgdmFsdWVzID0gJCgkKHNlYXJjaEFsbFswXSkuY2hpbGRyZW4oKVswXSkuYXR0cigiaHQtcXVpY2stc2VhcmNoIik7CiAgICAgICAgICAgICAgICB2YXIgYXJyID0gdmFsdWVzLnNwbGl0KCIsIik7CiAgICAgICAgICAgICAgICB2YXIgX2l0ZXJhdG9yID0gX2NyZWF0ZUZvck9mSXRlcmF0b3JIZWxwZXIoYXJyKSwKICAgICAgICAgICAgICAgICAgX3N0ZXA7CiAgICAgICAgICAgICAgICB0cnkgewogICAgICAgICAgICAgICAgICBmb3IgKF9pdGVyYXRvci5zKCk7ICEoX3N0ZXAgPSBfaXRlcmF0b3IubigpKS5kb25lOykgewogICAgICAgICAgICAgICAgICAgIHZhciB2YWx1ZSA9IF9zdGVwLnZhbHVlOwogICAgICAgICAgICAgICAgICAgIHF1ZXJ5cy5wdXNoKHsKICAgICAgICAgICAgICAgICAgICAgIHByb3BlcnR5OiB2YWx1ZSwKICAgICAgICAgICAgICAgICAgICAgIHZhbHVlOiB0aGlzLnF1ZXJ5Rm9ybS5xdWVyeURhdGEsCiAgICAgICAgICAgICAgICAgICAgICBncm91cDogIm1haW4iLAogICAgICAgICAgICAgICAgICAgICAgb3BlcmF0aW9uOiAiTElLRSIsCiAgICAgICAgICAgICAgICAgICAgICByZWxhdGlvbjogIk9SIgogICAgICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB9IGNhdGNoIChlcnIpIHsKICAgICAgICAgICAgICAgICAgX2l0ZXJhdG9yLmUoZXJyKTsKICAgICAgICAgICAgICAgIH0gZmluYWxseSB7CiAgICAgICAgICAgICAgICAgIF9pdGVyYXRvci5mKCk7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgICAgIHF1ZXJ5RmlsdGVyID0gewogICAgICAgICAgICAgIHBhZ2VCZWFuOiB0aGlzLnBhZ2luYXRpb24sCiAgICAgICAgICAgICAgcXVlcnlzOiBxdWVyeXMKICAgICAgICAgICAgfTsKICAgICAgICAgICAgcGFyYW1zLnBhZ2luYXRpb24gPSBxdWVyeUZpbHRlcjsKICAgICAgICAgICAgcmV0dXJuIHBhcmFtczsKICAgICAgICAgIH0sCiAgICAgICAgICAvL+aJk+W8gOmrmOe6p+ajgOe0ogogICAgICAgICAgYWR2YW5jZWQ6IGZ1bmN0aW9uIGFkdmFuY2VkKCkgewogICAgICAgICAgICB0aGlzLmZvcm1UeXBlID0gIXRoaXMuZm9ybVR5cGU7CiAgICAgICAgICAgIGlmICh0aGlzLmZvcm1UeXBlKSB7CiAgICAgICAgICAgICAgdGhpcy5pbmNvbnMgPSAiZWwtaWNvbi1hcnJvdy11cCI7CiAgICAgICAgICAgICAgdGhpcy5xdWVyeUZvcm0ucXVlcnlEYXRhID0gIiI7CiAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgdGhpcy5pbmNvbnMgPSAiZWwtaWNvbi1hcnJvdy1kb3duIjsKICAgICAgICAgICAgICB0aGlzLnNlYXJjaEZvcm0gPSB7fTsKICAgICAgICAgICAgfQogICAgICAgICAgfSwKICAgICAgICAgIHJlc2V0OiBmdW5jdGlvbiByZXNldCgpIHsKICAgICAgICAgICAgdGhpcy5xdWVyeUZvcm0ucXVlcnlEYXRhID0gIiI7CiAgICAgICAgICAgIHRoaXMuc2VhcmNoRm9ybSA9IHt9OwogICAgICAgICAgICB0aGlzLnNlYXJjaCgnZmluZCcpOwogICAgICAgICAgfSwKICAgICAgICAgIGhhbmRsZVNlbGVjdGlvbkNoYW5nZTogZnVuY3Rpb24gaGFuZGxlU2VsZWN0aW9uQ2hhbmdlKHZhbCkgewogICAgICAgICAgICB0aGlzLnRhYmxlRGF0YS5zZWxlY3RSb3dzID0gdmFsOwogICAgICAgICAgfSwKICAgICAgICAgIHNlbGVjdGFibGU6IGZ1bmN0aW9uIHNlbGVjdGFibGUocm93LCBpbmRleCkgewogICAgICAgICAgICBpZiAocm93LkJBVENIX0NPVkVSX0ZMQUcgIT0gIllFUyIgJiYgcm93Lk5PREVJRCA9PSAiVXNlclRhc2sxNzEiKSB7CiAgICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICAgfSwKICAgICAgICAgIC8v54K55Ye75a+85Ye65oyJ6ZKuCiAgICAgICAgICBleHBvcnRzOiBmdW5jdGlvbiBleHBvcnRzKCkgewogICAgICAgICAgICB0aGlzLmRpYWxvZ0V4cG9ydFZpc2libGUgPSB0cnVlOwogICAgICAgICAgfSwKICAgICAgICAgIHB1bmNoT3JkZXI6IGZ1bmN0aW9uIHB1bmNoT3JkZXIoKSB7CiAgICAgICAgICAgIHRoaXMuJHN0b3JlLmRpc3BhdGNoKCJzdG9yZVByb2Nlc3MvZG93bkxvYWRUb0ZpbGUiLCAiQmF0Y2hrZWlqeW8iKS50aGVuKGZ1bmN0aW9uIChyZXMpIHt9KTsKICAgICAgICAgIH0sCiAgICAgICAgICBoYW5kbGVSZW1vdmU6IGZ1bmN0aW9uIGhhbmRsZVJlbW92ZShmaWxlLCBmaWxlTGlzdCkgewogICAgICAgICAgICBjb25zb2xlLmxvZyhmaWxlLCBmaWxlTGlzdCk7CiAgICAgICAgICB9LAogICAgICAgICAgYmVmb3JlQXZhdGFyVXBsb2FkOiBmdW5jdGlvbiBiZWZvcmVBdmF0YXJVcGxvYWQoZmlsZSkgewogICAgICAgICAgICB2YXIgZmlsZU5hbWUgPSBuZXcgQXJyYXkoKTsKICAgICAgICAgICAgZmlsZU5hbWUgPSBmaWxlLm5hbWUuc3BsaXQoIi4iKTsKICAgICAgICAgICAgdmFyIGV4dGVuc2lvbiA9IGZpbGVOYW1lW2ZpbGVOYW1lLmxlbmd0aCAtIDFdID09PSAicGRmIjsKICAgICAgICAgICAgaWYgKCFleHRlbnNpb24pIHsKICAgICAgICAgICAgICB0aGlzLiRtZXNzYWdlKHsKICAgICAgICAgICAgICAgIG1lc3NhZ2U6ICLkuIrkvKDmqKHmnb/lj6rog73mmK9QREbmoLzlvI8hIiwKICAgICAgICAgICAgICAgIHR5cGU6ICJ3YXJuaW5nIgogICAgICAgICAgICAgIH0pOwogICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgICAgfQogICAgICAgICAgICBpZiAodGhpcy50YWJsZURhdGEuc2VsZWN0Um93cy5sZW5ndGggPT0gMCkgewogICAgICAgICAgICAgIHRoaXMuJG1lc3NhZ2UoewogICAgICAgICAgICAgICAgdHlwZTogIndhcm5pbmciLAogICAgICAgICAgICAgICAgbWVzc2FnZTogIuivt+mAieaLqeimgeS4iuS8oOmAgeS7mOeKtueahOahiOS7tiIKICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgICB9LAogICAgICAgICAgb25TdWNjZXNzVXBsb2FkOiBmdW5jdGlvbiBvblN1Y2Nlc3NVcGxvYWQocmVzcG9uc2UsIGZpbGUsIGZpbGVMaXMpIHsKICAgICAgICAgICAgdGhpcy4kbWVzc2FnZS5zdWNjZXNzKCLpgIHku5jnirbmiJDlip8iKTsKICAgICAgICAgICAgd2luZG93LmxvY2F0aW9uLnJlbG9hZCgpOwogICAgICAgICAgfSwKICAgICAgICAgIGhhbmRsZVByZXZpZXc6IGZ1bmN0aW9uIGhhbmRsZVByZXZpZXcoZmlsZSkge30sCiAgICAgICAgICAvL+ehruWumuWvvOWHugogICAgICAgICAgc3VibWl0RXhwb3J0OiBmdW5jdGlvbiBzdWJtaXRFeHBvcnQoKSB7CiAgICAgICAgICAgIHZhciBfdGhpcyA9IHRoaXM7CiAgICAgICAgICAgIGlmICghdGhpcy5leHBvcnREYXRhIHx8IHRoaXMuZXhwb3J0RGF0YS5leHBGaWVsZC5sZW5ndGggPCAxKSB7CiAgICAgICAgICAgICAgdGhpcy4kbWVzc2FnZSh7CiAgICAgICAgICAgICAgICB0eXBlOiAiaW5mbyIsCiAgICAgICAgICAgICAgICBtZXNzYWdlOiAi6K+36YCJ5oup6KaB5a+85Ye655qE5a2X5q6177yBIgogICAgICAgICAgICAgIH0pOwogICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgfQogICAgICAgICAgICB2YXIgZXhwRmllbGQgPSAiIjsKICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLmV4cG9ydERhdGEuZXhwRmllbGQubGVuZ3RoOyBpKyspIHsKICAgICAgICAgICAgICBpZiAoaSA+IDApIHsKICAgICAgICAgICAgICAgIGV4cEZpZWxkICs9ICIsIjsKICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgZXhwRmllbGQgKz0gdGhpcy5leHBvcnREYXRhLmV4cEZpZWxkW2ldLmZpZWxkTmFtZTsKICAgICAgICAgICAgfQogICAgICAgICAgICBleHBGaWVsZCA9IEJhc2U2NC5lbmNvZGUoZXhwRmllbGQpLnJlcGxhY2UoL1wrL2csICIlMkIiKTsKICAgICAgICAgICAgdmFyIHBhcmFtcyA9IHsKICAgICAgICAgICAgICBzcWxBbGlhczogdGhpcy5zcWxBbGlhcywKICAgICAgICAgICAgICBhbGlhczogdGhpcy5hbGlhcwogICAgICAgICAgICB9OwogICAgICAgICAgICB2YXIgZGF0YSA9IHsKICAgICAgICAgICAgICBzcWxBbGlhczogdGhpcy5zcWxBbGlhcywKICAgICAgICAgICAgICBhbGlhczogdGhpcy5hbGlhcywKICAgICAgICAgICAgICBnZXRUeXBlOiB0aGlzLmV4cG9ydERhdGEuZ2V0VHlwZSwKICAgICAgICAgICAgICBleHBGaWVsZDogZXhwRmllbGQKICAgICAgICAgICAgfTsKICAgICAgICAgICAgZGF0YS5xdWVyeSA9IHRoaXMuZ2V0UXVlcnlGaWx0ZXIoKS5wYWdpbmF0aW9uOwogICAgICAgICAgICB2YXIgbG9hZGluZ0luc3RhbmNlID0gTG9hZGluZy5zZXJ2aWNlKHsKICAgICAgICAgICAgICBmdWxsc2NyZWVuOiB0cnVlCiAgICAgICAgICAgIH0pOyAvL+W8gOWniwogICAgICAgICAgICB0aGlzLiRzdG9yZS5kaXNwYXRjaCgiZm9ybS9xdWVyeVNxbFZpZXdFeHBvcnQiLCBkYXRhKS50aGVuKGZ1bmN0aW9uICgpIHsKICAgICAgICAgICAgICBsb2FkaW5nSW5zdGFuY2UuY2xvc2UoKTsgLy8g57uT5p2fCiAgICAgICAgICAgICAgX3RoaXMuZGlhbG9nRXhwb3J0VmlzaWJsZSA9IGZhbHNlOwogICAgICAgICAgICB9KTsKICAgICAgICAgIH0sCiAgICAgICAgICAvL+WPlua2iOWvvOWHugogICAgICAgICAgZXhwb3J0Q2FuY2VsOiBmdW5jdGlvbiBleHBvcnRDYW5jZWwoKSB7CiAgICAgICAgICAgIHRoaXMuZGlhbG9nRXhwb3J0VmlzaWJsZSA9IGZhbHNlOwogICAgICAgICAgICB0aGlzLmV4cG9ydERhdGEuZXhwRmllbGQgPSBbXTsKICAgICAgICAgIH0sCiAgICAgICAgICBoYW5kbGVFeHBvcnRTZWxlY3Rpb25DaGFuZ2U6IGZ1bmN0aW9uIGhhbmRsZUV4cG9ydFNlbGVjdGlvbkNoYW5nZSh2YWwpIHsKICAgICAgICAgICAgdGhpcy5leHBvcnREYXRhLmV4cEZpZWxkID0gW107CiAgICAgICAgICAgIGlmICh2YWwpIHsKICAgICAgICAgICAgICB0aGlzLmV4cG9ydERhdGEuZXhwRmllbGQgPSB2YWw7CiAgICAgICAgICAgIH0KICAgICAgICAgIH0sCiAgICAgICAgICAvL+WFqOmAiQogICAgICAgICAgaGFuZGxlRXhwb3J0U2VsZWN0QWxsOiBmdW5jdGlvbiBoYW5kbGVFeHBvcnRTZWxlY3RBbGwoKSB7CiAgICAgICAgICAgIHRoaXMuZXhwb3J0RGF0YS5leHBGaWVsZCA9IHRoaXMuZGlzcGxheUZpZWxkczsKICAgICAgICAgIH0sCiAgICAgICAgICAvL+aOkuW6jwogICAgICAgICAgc29ydDogZnVuY3Rpb24gc29ydChpbmRleCwgdHlwZSkgewogICAgICAgICAgICBpZiAoInVwIiA9PSB0eXBlKSB7CiAgICAgICAgICAgICAgaWYgKGluZGV4ID09PSAwKSB7CiAgICAgICAgICAgICAgICB0aGlzLiRtZXNzYWdlKHsKICAgICAgICAgICAgICAgICAgbWVzc2FnZTogIuW3sue7j+aYr+WIl+ihqOS4reesrOS4gOS9jSIsCiAgICAgICAgICAgICAgICAgIHR5cGU6ICJ3YXJuaW5nIgogICAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgIHZhciB0ZW1wID0gdGhpcy5kaXNwbGF5RmllbGRzW2luZGV4IC0gMV07CiAgICAgICAgICAgICAgICBWdWUuc2V0KHRoaXMuZGlzcGxheUZpZWxkcywgaW5kZXggLSAxLCB0aGlzLmRpc3BsYXlGaWVsZHNbaW5kZXhdKTsKICAgICAgICAgICAgICAgIFZ1ZS5zZXQodGhpcy5kaXNwbGF5RmllbGRzLCBpbmRleCwgdGVtcCk7CiAgICAgICAgICAgICAgfQogICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgIGlmIChpbmRleCA9PT0gdGhpcy5kaXNwbGF5RmllbGRzLmxlbmd0aCAtIDEpIHsKICAgICAgICAgICAgICAgIHRoaXMuJG1lc3NhZ2UoewogICAgICAgICAgICAgICAgICBtZXNzYWdlOiAi5bey57uP5piv5YiX6KGo5Lit5pyA5ZCO5LiA5L2NIiwKICAgICAgICAgICAgICAgICAgdHlwZTogIndhcm5pbmciCiAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgdGhpcy5pc1RyYW5zaXRpb24gPSB0cnVlOwogICAgICAgICAgICAgICAgdmFyIGkgPSB0aGlzLmRpc3BsYXlGaWVsZHNbaW5kZXggKyAxXTsKICAgICAgICAgICAgICAgIFZ1ZS5zZXQodGhpcy5kaXNwbGF5RmllbGRzLCBpbmRleCArIDEsIHRoaXMuZGlzcGxheUZpZWxkc1tpbmRleF0pOwogICAgICAgICAgICAgICAgVnVlLnNldCh0aGlzLmRpc3BsYXlGaWVsZHMsIGluZGV4LCBpKTsKICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICAgIH0sCiAgICAgICAgICBnZXRTdWJFbnRzQnlGb3JtS2V5OiBmdW5jdGlvbiBnZXRTdWJFbnRzQnlGb3JtS2V5KHJlZklkKSB7CiAgICAgICAgICAgIHZhciBfdGhpczIgPSB0aGlzOwogICAgICAgICAgICB2YXIgX21lID0gdGhpczsKICAgICAgICAgICAgX21lLnRhYnMgPSBbXTsKICAgICAgICAgICAgaWYgKCFfbWUuZW50cyB8fCBfbWUuZW50cy5sZW5ndGggPCAxKSB7CiAgICAgICAgICAgICAgdGhpcy4kc3RvcmUuZGlzcGF0Y2goImZvcm0vZ2V0U3ViRW50c0J5Rm9ybUtleSIsIHRoaXMudGVtcGxhdGVJbmZvLmFsaWFzKS50aGVuKGZ1bmN0aW9uIChlbnRzKSB7CiAgICAgICAgICAgICAgICBfbWUuZW50cyA9IGVudHM7CiAgICAgICAgICAgICAgICBfdGhpczIuZ2V0U3ViRGF0YShfbWUsIHJlZklkKTsKICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICB0aGlzLmdldFN1YkRhdGEoX21lLCByZWZJZCk7CiAgICAgICAgICAgIH0KICAgICAgICAgIH0sCiAgICAgICAgICBnZXRTdW1tYXJpZXM6IGZ1bmN0aW9uIGdldFN1bW1hcmllcyhwYXJhbSkgewogICAgICAgICAgICB2YXIgX3N1bW1hcnlUeXBlTWFwID0gdGhpcy5zdW1tYXJ5VHlwZU1hcDsKICAgICAgICAgICAgdmFyIGNvbHVtbnMgPSBwYXJhbS5jb2x1bW5zLAogICAgICAgICAgICAgIGRhdGEgPSBwYXJhbS5kYXRhOwogICAgICAgICAgICB2YXIgc3VtcyA9IFtdOwogICAgICAgICAgICBjb2x1bW5zLmZvckVhY2goZnVuY3Rpb24gKGNvbHVtbiwgaW5kZXgpIHsKICAgICAgICAgICAgICBpZiAoaW5kZXggPT09IDApIHsKICAgICAgICAgICAgICAgIHN1bXNbaW5kZXhdID0gIuWQiOiuoSI7CiAgICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgICAgfQogICAgICAgICAgICAgIGlmIChfc3VtbWFyeVR5cGVNYXBbY29sdW1uLnByb3BlcnR5XSAmJiBfc3VtbWFyeVR5cGVNYXBbY29sdW1uLnByb3BlcnR5XSA9PSAic3VtIikgewogICAgICAgICAgICAgICAgdmFyIHZhbHVlcyA9IGRhdGEubWFwKGZ1bmN0aW9uIChpdGVtKSB7CiAgICAgICAgICAgICAgICAgIHJldHVybiBOdW1iZXIoaXRlbVtjb2x1bW4ucHJvcGVydHldKTsKICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAgICAgICAgaWYgKCF2YWx1ZXMuZXZlcnkoZnVuY3Rpb24gKHZhbHVlKSB7CiAgICAgICAgICAgICAgICAgIHJldHVybiBpc05hTih2YWx1ZSk7CiAgICAgICAgICAgICAgICB9KSkgewogICAgICAgICAgICAgICAgICBzdW1zW2luZGV4XSA9IHZhbHVlcy5yZWR1Y2UoZnVuY3Rpb24gKHByZXYsIGN1cnIpIHsKICAgICAgICAgICAgICAgICAgICB2YXIgdmFsdWUgPSBOdW1iZXIoY3Vycik7CiAgICAgICAgICAgICAgICAgICAgaWYgKCFpc05hTih2YWx1ZSkpIHsKICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBwcmV2ICsgY3VycjsKICAgICAgICAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHByZXY7CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICB9LCAwKTsKICAgICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgIHN1bXNbaW5kZXhdID0gIk4vQSI7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgfQogICAgICAgICAgICB9KTsKICAgICAgICAgICAgcmV0dXJuIHN1bXM7CiAgICAgICAgICB9LAogICAgICAgICAgY29sdW1uRm9ybWF0dGVyOiBmdW5jdGlvbiBjb2x1bW5Gb3JtYXR0ZXIocm93LCBjb2x1bW4sIGNlbGxWYWx1ZSkgewogICAgICAgICAgICB2YXIgZm9ybWF0dGVyID0gdGhpcy5mb3JtYXR0ZXJNYXBbY29sdW1uLnByb3BlcnR5XTsKICAgICAgICAgICAgaWYgKGZvcm1hdHRlcikgewogICAgICAgICAgICAgIHRyeSB7CiAgICAgICAgICAgICAgICB2YXIgc2NyaXB0ID0gInZhciBmb3JtYXR0ZXJGdW5jdGlvbiA9IGZ1bmN0aW9uKHJvdyxjb2x1bW4sY2VsbFZhbHVlKXsgIiArIGZvcm1hdHRlciArICJ9OyI7CiAgICAgICAgICAgICAgICB2YXIgcmVzdWx0ID0gZXZhbChzY3JpcHQgKyAiZm9ybWF0dGVyRnVuY3Rpb24ocm93LGNvbHVtbixjZWxsVmFsdWUpOyIpOwogICAgICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDsKICAgICAgICAgICAgICB9IGNhdGNoIChlKSB7CiAgICAgICAgICAgICAgICByZXR1cm4gY2VsbFZhbHVlOwogICAgICAgICAgICAgIH0KICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICByZXR1cm4gY2VsbFZhbHVlOwogICAgICAgICAgICB9CiAgICAgICAgICB9LAogICAgICAgICAgZGF0ZUZvcm1hdHRlcjogZnVuY3Rpb24gZGF0ZUZvcm1hdHRlcihyb3csIGNvbHVtbiwgY2VsbFZhbHVlKSB7CiAgICAgICAgICAgIGlmIChjZWxsVmFsdWUpIHsKICAgICAgICAgICAgICByZXR1cm4gY2VsbFZhbHVlLnJlcGxhY2UoIi4wIiwgIiIpOwogICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgIHJldHVybiBjZWxsVmFsdWU7CiAgICAgICAgICAgIH0KICAgICAgICAgIH0sCiAgICAgICAgICBnZXRBbGFybUNvbG9yOiBmdW5jdGlvbiBnZXRBbGFybUNvbG9yKGZpZWxkLCBjZWxsVmFsdWUpIHsKICAgICAgICAgICAgdmFyIGFsYXJtU2V0dGluZyA9IHRoaXMuYWxhcm1TZXR0aW5nTWFwW2ZpZWxkXTsKICAgICAgICAgICAgdmFyIHR5cGUgPSAiIjsKICAgICAgICAgICAgdGhpcy5kaXNwbGF5RmllbGRzLmZvckVhY2goZnVuY3Rpb24gKGl0ZW0pIHsKICAgICAgICAgICAgICBpZiAoaXRlbS5maWVsZE5hbWUgPT09IGZpZWxkKSB7CiAgICAgICAgICAgICAgICB0eXBlID0gaXRlbS5kYXRhVHlwZTsKICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0pOwogICAgICAgICAgICBpZiAoYWxhcm1TZXR0aW5nKSB7CiAgICAgICAgICAgICAgdHJ5IHsKICAgICAgICAgICAgICAgIHZhciBhbGFybVNldHRpbmdKc29uID0gdXRpbHMucGFyc2VUb0pzb24oYWxhcm1TZXR0aW5nKTsKICAgICAgICAgICAgICAgIHZhciBhbGFybVNjcmlwdCA9ICIiOwogICAgICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBhbGFybVNldHRpbmdKc29uLmxlbmd0aDsgaSsrKSB7CiAgICAgICAgICAgICAgICAgIHZhciBhbGFybSA9IGFsYXJtU2V0dGluZ0pzb25baV07CiAgICAgICAgICAgICAgICAgIHZhciBjb25kaXRpb24gPSBhbGFybS5jb25kaXRpb247CiAgICAgICAgICAgICAgICAgIHZhciBjb25kaXRpb25TdHIgPSAiIjsKICAgICAgICAgICAgICAgICAgZm9yICh2YXIgbSA9IDA7IG0gPCBjb25kaXRpb24ubGVuZ3RoOyBtKyspIHsKICAgICAgICAgICAgICAgICAgICBpZiAobSA+IDApIHsKICAgICAgICAgICAgICAgICAgICAgIGNvbmRpdGlvblN0ciArPSAiICYmICI7CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgIGlmICh0eXBlID09PSAnbnVtYmVyJyB8fCB0eXBlID09PSAnYmlnaW50JyB8fCB0eXBlID09PSAnaW50JykgewogICAgICAgICAgICAgICAgICAgICAgaWYgKGNvbmRpdGlvblttXS5vcCA9PSAnaW5kZXhPZicgJiYgY29uZGl0aW9uW21dLnZhbCkgewogICAgICAgICAgICAgICAgICAgICAgICBjb25kaXRpb25TdHIgPSBjb25kaXRpb25TdHIgKyAiJyIgKyBjZWxsVmFsdWUgKyAiJy5pbmRleE9mKCciICsgY29uZGl0aW9uW21dLnZhbCArICInKSE9LTEiOwogICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChjb25kaXRpb25bbV0ub3AgPT0gJ25vdEluZGV4T2YnKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIGNvbmRpdGlvblN0ciA9IGNvbmRpdGlvblN0ciArICInIiArIGNlbGxWYWx1ZSArICInLmluZGV4T2YoJyIgKyBjb25kaXRpb25bbV0udmFsICsgIicpPT0tMSI7CiAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgICAgICAgICBjb25kaXRpb25TdHIgPSBjb25kaXRpb25TdHIgKyBjZWxsVmFsdWUgKyBjb25kaXRpb25bbV0ub3AgKyBjb25kaXRpb25bbV0udmFsOwogICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgICBpZiAoY29uZGl0aW9uW21dLm9wID09ICdpbmRleE9mJyAmJiBjb25kaXRpb25bbV0udmFsKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIGNvbmRpdGlvblN0ciA9IGNvbmRpdGlvblN0ciArICInIiArIGNlbGxWYWx1ZSArICInLmluZGV4T2YoJyIgKyBjb25kaXRpb25bbV0udmFsICsgIicpIT0tMSI7CiAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGNvbmRpdGlvblttXS5vcCA9PSAnbm90SW5kZXhPZicpIHsKICAgICAgICAgICAgICAgICAgICAgICAgY29uZGl0aW9uU3RyID0gY29uZGl0aW9uU3RyICsgIiciICsgY2VsbFZhbHVlICsgIicuaW5kZXhPZignIiArIGNvbmRpdGlvblttXS52YWwgKyAiJyk9PS0xIjsKICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgICAgIGNvbmRpdGlvblN0ciA9IGNvbmRpdGlvblN0ciArICInIiArIGNlbGxWYWx1ZSArICInIiArIGNvbmRpdGlvblttXS5vcCArICInIiArIGNvbmRpdGlvblttXS52YWwgKyAiJyI7CiAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgIC8vY29uZGl0aW9uU3RyID0gY29uZGl0aW9uU3RyK2NlbGxWYWx1ZStjb25kaXRpb25bbV0ub3ArY29uZGl0aW9uW21dLnZhbDsKICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICBpZiAoaSA+IDApIHsKICAgICAgICAgICAgICAgICAgICBhbGFybVNjcmlwdCArPSAiIGVsc2UgIjsKICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICB2YXIgY29sb3JTdHIgPSAiY29sb3I6IiArIGFsYXJtLmNvbG9yICsgIiI7CiAgICAgICAgICAgICAgICAgIGFsYXJtU2NyaXB0ID0gYWxhcm1TY3JpcHQgKyAiaWYoIiArIGNvbmRpdGlvblN0ciArICIpe3JldHVybiAnIiArIGNvbG9yU3RyICsgIic7fSI7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICBpZiAoYWxhcm1TY3JpcHQpIHsKICAgICAgICAgICAgICAgICAgYWxhcm1TY3JpcHQgKz0gJ2Vsc2V7IHJldHVybiAiIjt9JzsKICAgICAgICAgICAgICAgICAgdmFyIHNjcmlwdCA9ICJ2YXIgYWxhcm1GdW5jdGlvbiA9IGZ1bmN0aW9uKCl7ICIgKyBhbGFybVNjcmlwdCArICJ9OyI7CiAgICAgICAgICAgICAgICAgIHZhciByZXN1bHQgPSBldmFsKHNjcmlwdCArICJhbGFybUZ1bmN0aW9uKCk7Iik7CiAgICAgICAgICAgICAgICAgIHJldHVybiByZXN1bHQ7CiAgICAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgICByZXR1cm4gIiI7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgfSBjYXRjaCAoZSkgewogICAgICAgICAgICAgICAgcmV0dXJuICIiOwogICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgICAgfSwKICAgICAgICAgIHN1bW1hcnk6IGZ1bmN0aW9uIHN1bW1hcnkobWV0aG9kLCBmaWVsZCwgZGVjaW1hbCkgewogICAgICAgICAgICB2YXIgbGlzdCA9IHRoaXMucm93cy5maWx0ZXIoZnVuY3Rpb24gKGl0ZW0pIHsKICAgICAgICAgICAgICByZXR1cm4gaXRlbVtmaWVsZF0gIT09IHVuZGVmaW5lZCAmJiBpdGVtW2ZpZWxkXSAhPT0gIiI7CiAgICAgICAgICAgIH0pLm1hcChmdW5jdGlvbiAoaXRlbSkgewogICAgICAgICAgICAgIHJldHVybiBuZXcgTnVtYmVyKGl0ZW1bZmllbGRdKTsKICAgICAgICAgICAgfSk7CiAgICAgICAgICAgIGlmIChtZXRob2QgPT09ICJjb3VudCIpIHsKICAgICAgICAgICAgICByZXR1cm4gbGlzdC5sZW5ndGg7CiAgICAgICAgICAgIH0gZWxzZSBpZiAobWV0aG9kID09PSAic3VtIikgewogICAgICAgICAgICAgIHJldHVybiBsaXN0LnJlZHVjZShmdW5jdGlvbiAoYSwgYikgewogICAgICAgICAgICAgICAgcmV0dXJuIGEgKyBiOwogICAgICAgICAgICAgIH0pLnRvRml4ZWQoZGVjaW1hbCk7CiAgICAgICAgICAgIH0gZWxzZSBpZiAobWV0aG9kID09PSAibWluIikgewogICAgICAgICAgICAgIHJldHVybiBNYXRoLm1pbi5hcHBseShNYXRoLCBfdG9Db25zdW1hYmxlQXJyYXkobGlzdCkpLnRvRml4ZWQoZGVjaW1hbCk7CiAgICAgICAgICAgIH0gZWxzZSBpZiAobWV0aG9kID09PSAibWF4IikgewogICAgICAgICAgICAgIHJldHVybiBNYXRoLm1heC5hcHBseShNYXRoLCBfdG9Db25zdW1hYmxlQXJyYXkobGlzdCkpLnRvRml4ZWQoZGVjaW1hbCk7CiAgICAgICAgICAgIH0gZWxzZSBpZiAobWV0aG9kID09PSAiYXZnIikgewogICAgICAgICAgICAgIHJldHVybiAobGlzdC5yZWR1Y2UoZnVuY3Rpb24gKGEsIGIpIHsKICAgICAgICAgICAgICAgIHJldHVybiBhICsgYjsKICAgICAgICAgICAgICB9KSAvIGxpc3QubGVuZ3RoKS50b0ZpeGVkKGRlY2ltYWwpOwogICAgICAgICAgICB9CiAgICAgICAgICB9LAogICAgICAgICAgc2hvd1NlYXJjaFBhbmU6IGZ1bmN0aW9uIHNob3dTZWFyY2hQYW5lKCkgewogICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICAgIH0KICAgICAgICB9CiAgICAgIH0pOwogICAgfQogIH0KfTs="},null]}