{"remainingRequest":"D:\\jenkins\\workspace\\xcjy-fvue\\node_modules\\thread-loader\\dist\\cjs.js!D:\\jenkins\\workspace\\xcjy-fvue\\node_modules\\babel-loader\\lib\\index.js!D:\\jenkins\\workspace\\xcjy-fvue\\node_modules\\eslint-loader\\index.js??ref--13-0!D:\\jenkins\\workspace\\xcjy-fvue\\src\\directive.js","dependencies":[{"path":"D:\\jenkins\\workspace\\xcjy-fvue\\src\\directive.js","mtime":1744834107642},{"path":"D:\\jenkins\\workspace\\xcjy-fvue\\babel.config.js","mtime":1741314102158},{"path":"D:\\jenkins\\workspace\\xcjy-fvue\\node_modules\\cache-loader\\dist\\cjs.js","mtime":499162500000},{"path":"D:\\jenkins\\workspace\\xcjy-fvue\\node_modules\\thread-loader\\dist\\cjs.js","mtime":499162500000},{"path":"D:\\jenkins\\workspace\\xcjy-fvue\\node_modules\\babel-loader\\lib\\index.js","mtime":456789000000},{"path":"D:\\jenkins\\workspace\\xcjy-fvue\\node_modules\\eslint-loader\\index.js","mtime":499162500000}],"contextDependencies":[],"result":[{"type":"Buffer","data":"base64:aW1wb3J0ICJjb3JlLWpzL21vZHVsZXMvZXMuYXJyYXkuY29uY2F0LmpzIjsKaW1wb3J0ICJjb3JlLWpzL21vZHVsZXMvZXMuYXJyYXkuaW5jbHVkZXMuanMiOwppbXBvcnQgImNvcmUtanMvbW9kdWxlcy9lcy5hcnJheS5qb2luLmpzIjsKaW1wb3J0ICJjb3JlLWpzL21vZHVsZXMvZXMuZnVuY3Rpb24ubmFtZS5qcyI7CmltcG9ydCAiY29yZS1qcy9tb2R1bGVzL2VzLml0ZXJhdG9yLmNvbnN0cnVjdG9yLmpzIjsKaW1wb3J0ICJjb3JlLWpzL21vZHVsZXMvZXMuaXRlcmF0b3IuZm9yLWVhY2guanMiOwppbXBvcnQgImNvcmUtanMvbW9kdWxlcy9lcy5pdGVyYXRvci5zb21lLmpzIjsKaW1wb3J0ICJjb3JlLWpzL21vZHVsZXMvZXMuanNvbi5zdHJpbmdpZnkuanMiOwppbXBvcnQgImNvcmUtanMvbW9kdWxlcy9lcy5tYXAuanMiOwppbXBvcnQgImNvcmUtanMvbW9kdWxlcy9lcy5udW1iZXIuY29uc3RydWN0b3IuanMiOwppbXBvcnQgImNvcmUtanMvbW9kdWxlcy9lcy5vYmplY3Qua2V5cy5qcyI7CmltcG9ydCAiY29yZS1qcy9tb2R1bGVzL2VzLm9iamVjdC50by1zdHJpbmcuanMiOwppbXBvcnQgImNvcmUtanMvbW9kdWxlcy9lcy5yZWdleHAuZXhlYy5qcyI7CmltcG9ydCAiY29yZS1qcy9tb2R1bGVzL2VzLnJlZ2V4cC50ZXN0LmpzIjsKaW1wb3J0ICJjb3JlLWpzL21vZHVsZXMvZXMuc3RyaW5nLmluY2x1ZGVzLmpzIjsKaW1wb3J0ICJjb3JlLWpzL21vZHVsZXMvZXMuc3RyaW5nLml0ZXJhdG9yLmpzIjsKaW1wb3J0ICJjb3JlLWpzL21vZHVsZXMvZXMuc3RyaW5nLnJlcGxhY2UuanMiOwppbXBvcnQgImNvcmUtanMvbW9kdWxlcy93ZWIuZG9tLWNvbGxlY3Rpb25zLmZvci1lYWNoLmpzIjsKaW1wb3J0ICJjb3JlLWpzL21vZHVsZXMvd2ViLmRvbS1jb2xsZWN0aW9ucy5pdGVyYXRvci5qcyI7CmltcG9ydCBWdWUgZnJvbSAndnVlJzsKaW1wb3J0IHV0aWxzIGZyb20gJ0AvaG90ZW50LXVpLXV0aWwuanMnOwppbXBvcnQgRm9ybU1hdGggZnJvbSAnQC91dGlscy9tYXRoLmpzJzsKaW1wb3J0IGRpYWxvZyBmcm9tICdAL2FwaS9kaWFsb2dBcGkuanMnOwovLyBpbXBvcnQgQ3VzdG9tUXVlcnkgZnJvbSAiQC9jb21wb25lbnRzL2VpcENvbnRyb2wvYnVzL0N1c3RvbVF1ZXJ5LmpzIjsKaW1wb3J0IF8gZnJvbSAnbG9kYXNoJzsKaW1wb3J0IHJlcSBmcm9tICdAL3JlcXVlc3QnOwppbXBvcnQgYXBwIGZyb20gJ0AvbWFpbi5qcyc7CgovLyDooajljZV0cuS4reagueaNrumakOiXj+Wtl+auteWKqOaAgeWQiOW5tuWNleWFg+agvOeahOaMh+S7pApWdWUuZGlyZWN0aXZlKCdwaW55aW4nLCB7CiAgLy8g5oyH5Luk55qE5a6a5LmJCiAgY29tcG9uZW50VXBkYXRlZDogZnVuY3Rpb24gY29tcG9uZW50VXBkYXRlZChlbCwgYmluZGluZywgdm5vZGUpIHsKICAgIHZhciBjb250ZXh0ID0gdm5vZGUuY29udGV4dDsKICAgIC8vIOmYsuaKlgogICAgdmFyIGRlYm91bmNlR2V0UGlueWluID0gXy5kZWJvdW5jZShmdW5jdGlvbiAobmV3VmFsKSB7CiAgICAgIC8vIGRpc2FibGVkIOaIluiAhSByZWFkb25seSDml7Yg5LiN6ZyA6KaB6K+35rGCCiAgICAgIGlmIChlbC5fX3Z1ZV9fLmRpc2FibGVkIHx8IGVsLl9fdnVlX18ucmVhZG9ubHkpIHJldHVybjsKICAgICAgcmVxLnJlcXVlc3QoewogICAgICAgIHVybDogIiIuY29uY2F0KHdpbmRvdy5jb250ZXh0LnVjLCAiL2Jhc2UvdG9vbHMvdjEvZ2V0UGlueWluIiksCiAgICAgICAgbWV0aG9kOiAnR0VUJywKICAgICAgICBwYXJhbXM6IHsKICAgICAgICAgIGNoaW5lc2U6IG5ld1ZhbCwKICAgICAgICAgIHR5cGU6ICIiLmNvbmNhdChiaW5kaW5nLm1vZGlmaWVycy5mdWxsID8gMSA6IDApCiAgICAgICAgfQogICAgICB9KS50aGVuKGZ1bmN0aW9uIChyZXMpIHsKICAgICAgICBpZiAocmVzLmRhdGEuc3RhdGUpIHsKICAgICAgICAgIHZhciBtb2RlbEV4cCA9IHZub2RlLmRhdGEubW9kZWwuZXhwcmVzc2lvbi5yZXBsYWNlKC9cW1x3Ky4/XCRcdytcXS9nLCAnWycgKyBiaW5kaW5nLmFyZyArICddJyk7CiAgICAgICAgICB1dGlscy5zZXRWYWx1ZUJ5UGF0aChjb250ZXh0LCBtb2RlbEV4cCwgcmVzLmRhdGEudmFsdWUpOwogICAgICAgICAgYXBwLiRuZXh0VGljayhmdW5jdGlvbiAoKSB7CiAgICAgICAgICAgIGFwcC4kdmFsaWRhdG9yLnZhbGlkYXRlKCk7CiAgICAgICAgICB9KTsKICAgICAgICB9CiAgICAgIH0pLmZpbmFsbHkoZnVuY3Rpb24gKCkge30pOwogICAgfSwgMzAwKTsKICAgIGlmIChiaW5kaW5nLnZhbHVlICYmIGJpbmRpbmcudmFsdWUgIT0gYmluZGluZy5vbGRWYWx1ZSkgewogICAgICBkZWJvdW5jZUdldFBpbnlpbihiaW5kaW5nLnZhbHVlKTsKICAgIH0KCiAgICAvLyBjb250ZXh0LiR3YXRjaCh3YXRjaEV4cCgpLCBmdW5jdGlvbiAobmV3VmFsLCBvbGRWYWwpIHsKICAgIC8vIAlpZiAobmV3VmFsICYmIG5ld1ZhbCAhPSBvbGRWYWwpIHsKICAgIC8vIAkJZGVib3VuY2VHZXRQaW55aW4obmV3VmFsKTsKICAgIC8vIAl9CiAgICAvLyB9LCB7CiAgICAvLyAJZGVlcDogdHJ1ZSwKICAgIC8vIAlpbW1lZGlhdGU6IGZhbHNlCiAgICAvLyB9KTsKICB9Cn0pOwpWdWUuZGlyZWN0aXZlKCdwZXJtaXQnLCB7CiAgY29tcG9uZW50VXBkYXRlZDogZnVuY3Rpb24gY29tcG9uZW50VXBkYXRlZChlbCwgYmluZGluZykgewogICAgaWYgKGVsLnRhZ05hbWUgIT09ICdUUicpIHsKICAgICAgdGhyb3cgJ3YtcGVybWl05oyH5Luk5Y+q6IO955So5ZyodHLlhYPntKDkuIouJzsKICAgIH0KICAgIGlmICghYmluZGluZy52YWx1ZSB8fCBiaW5kaW5nLnZhbHVlLmNvbnN0cnVjdG9yICE9PSBOdW1iZXIpIHsKICAgICAgdGhyb3cgJ3YtcGVybWl05oyH5Luk55qE5YC85Y+q6IO95piv5aSn5LqOMOeahOaVsOWtly4nOwogICAgfQogICAgZWwucmVtb3ZlQXR0cmlidXRlKCdoaWRkZW4nKTsKCiAgICAvLyB0cuS4reayoeacieWtkOWFg+e0oOaXtu+8jOWIoOmZpHRy6Ieq6LqrCiAgICBpZiAoZWwuY2VsbHMubGVuZ3RoID09IDApIHsKICAgICAgZWwuc2V0QXR0cmlidXRlKCdoaWRkZW4nLCAnaGlkZGVuJyk7CiAgICB9IGVsc2UgaWYgKGVsLmNlbGxzLmxlbmd0aCA8IGJpbmRpbmcudmFsdWUpIHsKICAgICAgdmFyIGNvbHNwYW4gPSBiaW5kaW5nLnZhbHVlIC0gZWwuY2VsbHMubGVuZ3RoICsgMTsKICAgICAgLy8g6K6+572uY29sc3BhbuWunueOsOWNleWFg+agvOWQiOW5tgogICAgICBlbC5jZWxsc1tlbC5jZWxscy5sZW5ndGggLSAxXS5zZXRBdHRyaWJ1dGUoJ2NvbHNwYW4nLCBjb2xzcGFuKTsKICAgIH0gZWxzZSBpZiAoZWwuY2VsbHMubGVuZ3RoID09PSBiaW5kaW5nLnZhbHVlKSB7CiAgICAgIGZvciAodmFyIGkgPSAwLCBjOyBjID0gZWwuY2VsbHNbaSsrXTspIHsKICAgICAgICBjLnJlbW92ZUF0dHJpYnV0ZSgnY29sc3BhbicpOwogICAgICB9CiAgICB9CiAgfQp9KTsKCi8vIOihqOWNleaMh+S7pO+8jOS8muWcqOihqOWNleeahHZ1ZeWunuS+i+S4iua3u+WKoOS4gOS4qm1hcO+8jOeUqOS7peWtmOaUvuaVsOWtpui/kOeul+eahOihqOi+vuW8jwpWdWUuZGlyZWN0aXZlKCdmb3JtJywgewogIGJpbmQ6IGZ1bmN0aW9uIGJpbmQoZWwsIGJpbmRpbmcsIHZub2RlKSB7CiAgICB2YXIgaW5zdCA9IHZub2RlLmNvbnRleHQ7CiAgICBpZiAoaW5zdCAmJiAhaW5zdC5oYXNPd25Qcm9wZXJ0eSgnd2F0Y2hNYXAnKSkgewogICAgICBpbnN0Wyd3YXRjaE1hcCddID0gbmV3IE1hcCgpOwogICAgfQogIH0KfSk7CgovLyDliKTmlq3ovpPlhaXmoYbmmK/lkKbkvZzkuLrorqHnrpflrZfmrrXvvIzmmK/liJnmt7vliqDnm5HlkKwKVnVlLmRpcmVjdGl2ZSgnZXhwcmVzcycsIHsKICBjb21wb25lbnRVcGRhdGVkOiBmdW5jdGlvbiBjb21wb25lbnRVcGRhdGVkKGVsLCBiaW5kaW5nLCB2bm9kZSkgewogICAgdmFyIGluc3QgPSB2bm9kZS5jb250ZXh0OwogICAgaWYgKCFpbnN0LiR2bm9kZS5kYXRhLm1vZGVsKSB7CiAgICAgIHJldHVybjsKICAgIH0KICAgIHZhciBlbEF0dHIgPSBpbnN0LiR2bm9kZS5jb21wb25lbnRPcHRpb25zLnByb3BzRGF0YS5tb2RlbEV4cHJlc3Npb247CiAgICBpZiAoZWxBdHRyICYmICFpbnN0Ll9leHByZXNzSW5pdCkgewogICAgICBpbnN0Ll9leHByZXNzSW5pdCA9IHRydWU7CiAgICAgIC8vIOWtkOihqOavj+S4gOihjOaVsOaNruS9nOeUqOWfn+aJgOWcqOeahGRvbeWFg+e0oAogICAgICB2YXIgX3V0aWxzJGdldFN1YlNjb3BlRWxBID0gdXRpbHMuZ2V0U3ViU2NvcGVFbEFuZEluZGV4KGVsKSwKICAgICAgICBzdWJTY29wZUVsID0gX3V0aWxzJGdldFN1YlNjb3BlRWxBLnN1YlNjb3BlRWw7CiAgICAgIHZhciBzdWJuYW1lID0gbnVsbDsKICAgICAgdmFyIGFsaWFzRWxBdHRyID0gbnVsbDsKICAgICAgLy8g5a2Q6KGo5pWw5o2u77yM6ZyA6KaB5om+5Yiw6YWN572u5LqGZGF0YS1zdWJuYW1l55qE5YWD57SgCiAgICAgIGlmIChzdWJTY29wZUVsKSB7CiAgICAgICAgc3VibmFtZSA9IHN1YlNjb3BlRWwuZGF0YXNldFsnc3VibmFtZSddOwogICAgICAgIGlmICghc3VibmFtZSkgewogICAgICAgICAgdGhyb3cgJ+aXoOazleiOt+WPluWIsOW9k+WJjeWtkOihqOWJjee8gCc7CiAgICAgICAgfQogICAgICAgIHZhciBlbEF0dHJBcnkgPSBlbEF0dHIuc3BsaXQoJy4nKSwKICAgICAgICAgIGVsQXR0ckFyeVNpemUgPSBlbEF0dHJBcnkubGVuZ3RoOwogICAgICAgIGlmIChlbEF0dHJBcnlTaXplIDwgMSkgewogICAgICAgICAgdGhyb3cgIlx1NUI1MFx1ODg2OFx1NEUyRFx1NzY4NFx1NjU3MFx1NjM2RVx1N0VEMVx1NUI5QVx1ODg2OFx1OEZCRVx1NUYwRiIuY29uY2F0KGVsQXR0ciwgIlx1OTUxOVx1OEJFRiIpOwogICAgICAgIH0KICAgICAgICBhbGlhc0VsQXR0ciA9ICIiLmNvbmNhdChzdWJuYW1lLCAiLiIpLmNvbmNhdChlbEF0dHJBcnlbZWxBdHRyQXJ5U2l6ZSAtIDFdKTsKICAgICAgfQogICAgICB2YXIgcCA9IHV0aWxzLmdldE9ubGluZUZvcm1JbnN0YW5jZShpbnN0KTsKICAgICAgaWYgKHAud2F0Y2hNYXAgJiYgKHAud2F0Y2hNYXAuaGFzKGVsQXR0cikgfHwgcC53YXRjaE1hcC5oYXMoYWxpYXNFbEF0dHIpKSkgewogICAgICAgIGlmICghaW5zdC5fd2F0Y2hlcnMuc29tZShmdW5jdGlvbiAobSkgewogICAgICAgICAgcmV0dXJuIG0uZXhwcmVzc2lvbiA9PT0gJ2lucHV0VmFsJzsKICAgICAgICB9KSkgewogICAgICAgICAgaW5zdC4kd2F0Y2goJ2lucHV0VmFsJywgZnVuY3Rpb24gKG5ld1ZhbCwgb2xkVmFsLCBmYXJld2VsbCkgewogICAgICAgICAgICBpZiAobmV3VmFsICE9PSBvbGRWYWwpIHsKICAgICAgICAgICAgICB2YXIgZXhwTGlzdCA9IHAud2F0Y2hNYXAuZ2V0KGVsQXR0cikgfHwgcC53YXRjaE1hcC5nZXQoYWxpYXNFbEF0dHIpOwogICAgICAgICAgICAgIGV4cExpc3QuZm9yRWFjaChmdW5jdGlvbiAoaXRlbSkgewogICAgICAgICAgICAgICAgdmFyIHJlc3VsdCA9IDA7CiAgICAgICAgICAgICAgICB2YXIgdCA9IGl0ZW0udGFyZ2V0OwogICAgICAgICAgICAgICAgLy8g5b2T5Zyo5a2Q6KGo5Y2V6KGM5Lit5pe277yM6ICM5LiU5LiN5piv5a+55a2Q6KGo6L+b6KGM5YiX6L+Q566X5pe277yM5Yik5a6a5Li65a2Q6KGo5b2T5YmN6KGM5YaF6L+Q566XCiAgICAgICAgICAgICAgICBpZiAoc3ViU2NvcGVFbCAmJiAhLy4qP1xbXHsuKj9cfVxdLio/Ly50ZXN0KGl0ZW0uZXhwKSkgewogICAgICAgICAgICAgICAgICAvLyDnu4Tku7bplIDmr4Hml7bvvIzkuI3lho3orqHnrpflrZDooajljZXooYznmoTlhazlvI8KICAgICAgICAgICAgICAgICAgaWYgKGZhcmV3ZWxsKSB7CiAgICAgICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgIHZhciBpbmRleCA9IHN1YlNjb3BlRWwuZGF0YXNldFsnaW5kZXgnXTsKICAgICAgICAgICAgICAgICAgaWYgKGluZGV4ID09PSB1bmRlZmluZWQpIHsKICAgICAgICAgICAgICAgICAgICB0aHJvdyAn6I635Y+W5LiN5Yiw5b2T5YmN5a2Q6KGo6KGM55qE57Si5byV77yM5peg5rOV5a6M5oiQ6K6h566XLic7CiAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgcmVzdWx0ID0gRm9ybU1hdGguY2FsY1N1YkV4cFZhbHVlKGl0ZW0uZXhwLCBwLCBzdWJuYW1lLCBpbmRleCk7CiAgICAgICAgICAgICAgICAgIHAuJGVtaXQodCwgewogICAgICAgICAgICAgICAgICAgIHJlc3VsdDogcmVzdWx0LAogICAgICAgICAgICAgICAgICAgIGluZGV4OiBpbmRleAogICAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgIHJlc3VsdCA9IEZvcm1NYXRoLmNhbGNFeHBWYWx1ZShpdGVtLmV4cCwgcCk7CiAgICAgICAgICAgICAgICAgIHAuJGVtaXQodCwgewogICAgICAgICAgICAgICAgICAgIHJlc3VsdDogcmVzdWx0CiAgICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgIH0pOwogICAgICAgICAgICB9CiAgICAgICAgICB9LCB7CiAgICAgICAgICAgIGltbWVkaWF0ZTogdHJ1ZQogICAgICAgICAgfSk7CiAgICAgICAgfQogICAgICB9CiAgICB9CiAgfQp9KTsKCi8vIOiHquWumuS5ieWvueivneahhiB2LWF1dGgtc2V0LWV2ZW50ClZ1ZS5kaXJlY3RpdmUoJ2F1dGgtc2V0LWV2ZW50JywgewogIGJpbmQ6IGZ1bmN0aW9uIGJpbmQoZWwsIGJpbmRpbmdzLCB2bm9kZSkgewogICAgdmFyIGh0QXV0aFNldEV2ZW50ID0gZWwuZ2V0QXR0cmlidXRlKCdhdHRyJyk7CiAgICBpZiAoIWh0QXV0aFNldEV2ZW50KSByZXR1cm47CiAgICB2YXIgZGVmYXVsdFBlcm1pc3Npb25MaXN0ID0gW107CiAgICBkaWFsb2cuZ2V0UGVybWlzc2lvbkxpc3QoZnVuY3Rpb24gKHJlc3VsdCkgewogICAgICBkZWZhdWx0UGVybWlzc2lvbkxpc3QgPSByZXN1bHQ7CiAgICB9KTsKICAgIC8qKg0KICAgICAqIOiuvue9ruiuvue9ruadg+mZkOOAgg0KICAgICAqIG93bmVyTmFtZUpzb24g5qC85byP44CCDQogICAgICogW3t0eXBlOiJldmVyeW9uZSIsdGl0bGU6IuaJgOacieS6uiJ9LHt0eXBlOiJ1c2VyIix0aXRsZToi55So5oi3IixpZDoiMSwyIixuYW1lOiJyYXksdG9tIn1dDQogICAgICovCiAgICB2YXIgc2V0QXV0aCA9IGZ1bmN0aW9uIHNldEF1dGgoKSB7CiAgICAgIHZhciBjb25mID0gewogICAgICAgIHJpZ2h0OiBvd25lck5hbWVKc29uLAogICAgICAgIHBlcm1pc3Npb25MaXN0OiBkZWZhdWx0UGVybWlzc2lvbkxpc3QKICAgICAgfTsKICAgICAgLy/mjojmnYPpgInmi6nlmagKICAgICAgdm5vZGUuY2hpbGQuQXV0aFNldHRpbmdTaG93KGNvbmYpOwogICAgfTsKICAgIHZhciBvd25lck5hbWVKc29uID0gW107CiAgICB2YXIgaW5pdERhdGEgPSBiaW5kaW5ncy52YWx1ZTsKICAgIGlmIChpbml0RGF0YSkgewogICAgICBvd25lck5hbWVKc29uID0gSlNPTi5wYXJzZShpbml0RGF0YSk7CgogICAgICAvLyBzaG93TGFibGUob3duZXJOYW1lSnNvbik7CiAgICB9CiAgICAvL+WvueivneahhuWIneWni+WMluebkeWQrAogICAgZWwuY2hpbGROb2Rlc1syXS5vbmNsaWNrID0gZnVuY3Rpb24gKCkgewogICAgICBzZXRBdXRoKCk7CiAgICB9OwogIH0KfSk7ClZ1ZS5kaXJlY3RpdmUoJ3BhcnNlVGVtcGxldGUnLCB7CiAgYmluZDogZnVuY3Rpb24gYmluZChlbCwgYmluZGluZywgdm5vZGUpIHsKICAgIHZhciBzID0gSlNPTi5zdHJpbmdpZnk7CiAgICBlbC5pbm5lckhUTUwgPSAnbmFtZTogJyArIHMoYmluZGluZy5uYW1lKSArICc8YnI+JyArICd2YWx1ZTogJyArIHMoYmluZGluZy52YWx1ZSkgKyAnPGJyPicgKyAnZXhwcmVzc2lvbjogJyArIHMoYmluZGluZy5leHByZXNzaW9uKSArICc8YnI+JyArICdhcmd1bWVudDogJyArIHMoYmluZGluZy5hcmcpICsgJzxicj4nICsgJ21vZGlmaWVyczogJyArIHMoYmluZGluZy5tb2RpZmllcnMpICsgJzxicj4nICsgJ3Zub2RlIGtleXM6ICcgKyBPYmplY3Qua2V5cyh2bm9kZSkuam9pbignLCAnKTsKICB9Cn0pOwpWdWUuZGlyZWN0aXZlKCdhbHNDaGFydHMnLCB7CiAgaW5zZXJ0ZWQ6IGZ1bmN0aW9uIGluc2VydGVkKGVsLCBiaW5kaW5nLCB2bm9kZSkgewogICAgdmFyIGluc3QgPSBiaW5kaW5nLmNvbnRleHQ7CiAgICBmdW5jdGlvbiBpbml0KGRhdGEpIHsKICAgICAgaWYgKCEoZGF0YS52YWx1ZSAmJiBkYXRhLnZhbHVlICE9PSB0cnVlICYmIGRhdGEudmFsdWUuY29uc3RydWN0b3IgPT0gQXJyYXkgJiYgZGF0YS52YWx1ZVswXS5sZWdlbmQpKSB7CiAgICAgICAgcmV0dXJuOwogICAgICB9CiAgICAgIHZhciBvcHRpb25zID0gZGF0YS52YWx1ZVswXTsKICAgICAgdmFyIGhlaWdodCA9IGdldERpdkhlaWdodChlbCkgLSAzNTsKICAgICAgdmFyIHdyYXAgPSAkKCc8ZGl2PjwvZGl2PicpLmNzcyh7CiAgICAgICAgd2lkdGg6ICcxMDAlJywKICAgICAgICBoZWlnaHQ6IGhlaWdodAogICAgICB9KTsKICAgICAgJChlbCkuY3NzKHsKICAgICAgICBkaXNwbGF5OiAnYmxvY2snLAogICAgICAgIHdpZHRoOiAnMTAwJScsCiAgICAgICAgaGVpZ2h0OiBoZWlnaHQKICAgICAgfSk7CiAgICAgIC8vIGNvbnN0IGVjaGFydHMgPSByZXF1aXJlKCdlY2hhcnRzJyk7CiAgICAgIC8vIHZhciBteUNoYXJ0ID0gZWNoYXJ0cy5pbml0KGVsKTsKICAgICAgLy8gaW5zdC4kcm9vdC4kb24oInJlc2l6ZSIsICgpID0+IHsKICAgICAgLy8gICAgIG15Q2hhcnQucmVzaXplKCk7Ly/nm5HmtYvlm77ooajoh6rpgILlupQKICAgICAgLy8gfSk7CiAgICAgIHZhciBvcHRpb24gPSB7CiAgICAgICAgdGl0bGU6IHsKICAgICAgICAgIHRleHQ6IG9wdGlvbnMubmFtZSwKICAgICAgICAgIHN1YnRleHQ6IG9wdGlvbnMuc3VidGV4dCwKICAgICAgICAgIHRvcDogMTIKICAgICAgICB9LAogICAgICAgIHRvb2x0aXA6IHsKICAgICAgICAgIHRyaWdnZXI6ICdheGlzJywKICAgICAgICAgIGF4aXNQb2ludGVyOiB7CiAgICAgICAgICAgIHR5cGU6ICdzaGFkb3cnCiAgICAgICAgICB9CiAgICAgICAgfSwKICAgICAgICBsZWdlbmQ6IHsKICAgICAgICAgIHg6ICdyaWdodCcsCiAgICAgICAgICBkYXRhOiBvcHRpb25zLmxlZ2VuZAogICAgICAgIH0sCiAgICAgICAgdG9vbGJveDogewogICAgICAgICAgc2hvdzogdHJ1ZSwKICAgICAgICAgIG9yaWVudDogJ3ZlcnRpY2FsJywKICAgICAgICAgIHk6ICdjZW50ZXInLAogICAgICAgICAgcmlnaHQ6IDIwLAogICAgICAgICAgaXRlbUdhcDogMTMsCiAgICAgICAgICBmZWF0dXJlOiB7CiAgICAgICAgICAgIG1hcms6IHsKICAgICAgICAgICAgICBzaG93OiB0cnVlCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIG1hZ2ljVHlwZTogewogICAgICAgICAgICAgIHNob3c6IHRydWUsCiAgICAgICAgICAgICAgdHlwZTogWydsaW5lJywgJ2JhcicsICdzdGFjaycsICd0aWxlZCddCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIHJlc3RvcmU6IHsKICAgICAgICAgICAgICBzaG93OiB0cnVlCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIHNhdmVBc0ltYWdlOiB7CiAgICAgICAgICAgICAgc2hvdzogdHJ1ZQogICAgICAgICAgICB9LAogICAgICAgICAgICBkYXRhWm9vbTogewogICAgICAgICAgICAgIHlBeGlzSW5kZXg6ICdub25lJwogICAgICAgICAgICB9LAogICAgICAgICAgICBkYXRhVmlldzogewogICAgICAgICAgICAgIHNob3c6IHRydWUsCiAgICAgICAgICAgICAgcmVhZE9ubHk6IHRydWUsCiAgICAgICAgICAgICAgb3B0aW9uVG9Db250ZW50OiBmdW5jdGlvbiBvcHRpb25Ub0NvbnRlbnQob3B0KSB7CiAgICAgICAgICAgICAgICAvL2NvbnNvbGUuaW5mbyhvcHQpOwogICAgICAgICAgICAgICAgdmFyIGF4aXNEYXRhID0gb3B0LnhBeGlzWzBdLmRhdGE7CiAgICAgICAgICAgICAgICB2YXIgc2VyaWVzID0gb3B0LnNlcmllczsKICAgICAgICAgICAgICAgIHZhciB0ZEhlYWRlcnMgPSAnPHRoPjwvdGg+JzsgLy/ooajlpLQKICAgICAgICAgICAgICAgIHNlcmllcy5mb3JFYWNoKGZ1bmN0aW9uIChpdGVtKSB7CiAgICAgICAgICAgICAgICAgIHRkSGVhZGVycyArPSAnPHRoIHN0eWxlPSJwYWRkaW5nOiA4cHggMTBweDtiYWNrZ3JvdW5kLWNvbG9yOiNGNUY1RjU7Ij4nICsgaXRlbS5uYW1lICsgJzwvdGg+JzsgLy/nu4Too4XooajlpLQKICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAgICAgICAgdmFyIHRhYmxlID0gJzxkaXY+PHRhYmxlIGNlbGxzcGFjaW5nPSIyMCIgY2VsbHNwYWNpbmc9IjAiICBzdHlsZT0idGV4dC1hbGlnbjpjZW50ZXI7Ym9yZGVyOjFweCBzb2xpZCBibGFjaztib3JkZXItY29sbGFwc2U6Y29sbGFwc2U7IiBydWxlcz0iYWxsIj48dGJvZHk+PHRyPicgKyB0ZEhlYWRlcnMgKyAnPC90cj4nOwogICAgICAgICAgICAgICAgdmFyIHRkQm9keXMgPSAnJzsgLy/mlbDmja4KICAgICAgICAgICAgICAgIHZhciBjb2xvcnMgPSBbJyNGRkZGRkYnLCAnI0Y1RjVGNSddOwogICAgICAgICAgICAgICAgZm9yICh2YXIgaSA9IDAsIGwgPSBheGlzRGF0YS5sZW5ndGg7IGkgPCBsOyBpKyspIHsKICAgICAgICAgICAgICAgICAgZm9yICh2YXIgaiA9IDA7IGogPCBzZXJpZXMubGVuZ3RoOyBqKyspIHsKICAgICAgICAgICAgICAgICAgICB0ZEJvZHlzICs9ICc8dGQ+JyArIHNlcmllc1tqXS5kYXRhW2ldICsgJzwvdGQ+JzsgLy/nu4Too4XooajmlbDmja4KICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICB2YXIgY3VyQ29sb3IgPSBjb2xvcnNbaSAlIDJdOwogICAgICAgICAgICAgICAgICB0YWJsZSArPSAnPHRyIHN0eWxlPSJiYWNrZ3JvdW5kLWNvbG9yOicgKyBjdXJDb2xvciArICciPjx0ZCBzdHlsZT0icGFkZGluZzogOHB4IDEwcHg7Ij4nICsgYXhpc0RhdGFbaV0gKyAnPC90ZD4nICsgdGRCb2R5cyArICc8L3RyPic7CiAgICAgICAgICAgICAgICAgIHRkQm9keXMgPSAnJzsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIHRhYmxlICs9ICc8L3Rib2R5PjwvdGFibGU+PC9kaXY+JzsKICAgICAgICAgICAgICAgIHJldHVybiB0YWJsZTsKICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICAgIH0KICAgICAgICB9LAogICAgICAgIGNhbGN1bGFibGU6IHRydWUsCiAgICAgICAgZ3JpZDogewogICAgICAgICAgeTogODAsCiAgICAgICAgICB5MjogNDAsCiAgICAgICAgICB4MjogNDAKICAgICAgICB9LAogICAgICAgIHhBeGlzOiBbewogICAgICAgICAgdHlwZTogJ2NhdGVnb3J5JywKICAgICAgICAgIGRhdGE6IG9wdGlvbnMueEF4aXMKICAgICAgICB9XSwKICAgICAgICB5QXhpczogW3sKICAgICAgICAgIHR5cGU6ICd2YWx1ZScsCiAgICAgICAgICBzY2FsZTogdHJ1ZQogICAgICAgIH1dLAogICAgICAgIC8veOi9tOaVsOaNruWMuuWfn+e8qeaUvue7hOS7ti0t5pqC5pe25LiN5re75YqgCiAgICAgICAgLypkYXRhWm9vbTogWw0KICAgICAgICAgICAgew0KICAgICAgICAgICAgICAgIHR5cGU6ICdzbGlkZXInLA0KICAgICAgICAgICAgICAgIHNob3c6IHRydWUsDQogICAgICAgICAgICAgICAgeEF4aXNJbmRleDogWzBdLA0KICAgICAgICAgICAgICAgIHN0YXJ0OiAxLA0KICAgICAgICAgICAgICAgIGVuZDogMzUNCiAgICAgICAgICAgIH0sDQogICAgICAgICAgICB7DQogICAgICAgICAgICAgICAgdHlwZTogJ2luc2lkZScsDQogICAgICAgICAgICAgICAgeEF4aXNJbmRleDogWzBdLA0KICAgICAgICAgICAgICAgIHN0YXJ0OiAxLA0KICAgICAgICAgICAgICAgIGVuZDogMzUNCiAgICAgICAgICAgIH0sDQogICAgICAgIF0sKi8KICAgICAgICBzZXJpZXM6IG9wdGlvbnMuc2VyaWVzCiAgICAgIH07CiAgICAgIC8vIG15Q2hhcnQuc2V0T3B0aW9uKG9wdGlvbiwgdHJ1ZSk7CiAgICB9CgogICAgLy/ojrflj5blvZPliY3moI/nm67nmoTpq5jluqYKICAgIGZ1bmN0aW9uIGdldERpdkhlaWdodChlbCkgewogICAgICBpZiAoZWwpIHsKICAgICAgICB2YXIgcEhlaWdodCA9ICQoZWwpLnBhcmVudCgpLmhlaWdodCgpOwogICAgICAgIGlmIChwSGVpZ2h0IDwgMSkgewogICAgICAgICAgcmV0dXJuIGdldERpdkhlaWdodCgkKGVsKS5wYXJlbnQoKSk7CiAgICAgICAgfQogICAgICB9IGVsc2UgewogICAgICAgIHJldHVybiAzNDA7CiAgICAgIH0KICAgICAgcmV0dXJuIHBIZWlnaHQ7CiAgICB9CiAgICBpbml0KGJpbmRpbmcpOwogIH0KfSk7ClZ1ZS5kaXJlY3RpdmUoJ29waW5pb24nLCB7CiAgYmluZDogZnVuY3Rpb24gYmluZChlbCwgYmluZGluZywgdm5vZGUpIHsKICAgIGlmIChiaW5kaW5nLnZhbHVlKSB7CiAgICAgIHdoaWxlIChiaW5kaW5nLnZhbHVlLmluZGV4T2YoJ1xuJykgIT0gLTEpIHsKICAgICAgICBiaW5kaW5nLnZhbHVlID0gYmluZGluZy52YWx1ZS5yZXBsYWNlKCdcbicsICc8YnI+Jyk7CiAgICAgIH0KICAgICAgZWwuaW5uZXJIVE1MID0gYmluZGluZy52YWx1ZTsKICAgIH0KICB9Cn0pOwpWdWUuZGlyZWN0aXZlKCdpZnJhbWV0cmlnZ2VyJywgewogIGJpbmQ6IGZ1bmN0aW9uIGJpbmQoZWwsIGJpbmRpbmcsIHZub2RlKSB7CiAgICBlbC5vbmxvYWQgPSBmdW5jdGlvbiAoKSB7CiAgICAgICQoJ2JvZHknKS50cmlnZ2VyKCdmb3JtTG9hZGVkJyk7CiAgICB9OwogICAgJCgnYm9keScpLmJpbmQoJ2Zvcm1Mb2FkZWQnLCBmdW5jdGlvbiAoZSkgewogICAgICB2YXIgZnJtID0gJCgnI2ZybUZyYW1lJylbMF07CiAgICAgIHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKCdtZXNzYWdlJywgZnVuY3Rpb24gKGUpIHsKICAgICAgICBpZiAoZS5kYXRhICYmIGUuZGF0YS5jb25zdHJ1Y3RvciA9PT0gT2JqZWN0ICYmIGUuZGF0YS50eXBlID09PSAnaGVpZ2h0JykgewogICAgICAgICAgZnJtLnN0eWxlLnZpc2liaWxpdHkgPSAnaGlkZGVuJzsKICAgICAgICAgIC8vIOaPkOWJjei/mOWOn+mrmOW6pgogICAgICAgICAgZnJtLnNldEF0dHJpYnV0ZSgnaGVpZ2h0JywgJ2F1dG8nKTsKICAgICAgICAgIHNldFRpbWVvdXQoZnVuY3Rpb24gKCkgewogICAgICAgICAgICBmcm0uc2V0QXR0cmlidXRlKCdoZWlnaHQnLCBlLmRhdGEuaGVpZ2h0KTsKICAgICAgICAgICAgZnJtLnN0eWxlLnZpc2liaWxpdHkgPSAndmlzaWJsZSc7CiAgICAgICAgICAgICQoZnJtKS50cmlnZ2VyKCdtb3VzZW92ZXInKTsKICAgICAgICAgIH0sIDApOwogICAgICAgIH0KICAgICAgfSk7CiAgICB9KTsKICB9Cn0pOwpWdWUuZGlyZWN0aXZlKCdtZXRob2RhdXRoJywgewogIGJpbmQ6IGZ1bmN0aW9uIGJpbmQoZWwsIGJpbmRpbmcsIHZub2RlKSB7CiAgICB2YXIgYWxsTWV0aG9kID0gd2luZG93LnNlc3Npb25TdG9yYWdlLmFsbE1ldGhvZDsKICAgIHZhciBtZXRob2RBdXRoID0gd2luZG93LnNlc3Npb25TdG9yYWdlLm1ldGhvZEF1dGg7CiAgICB2YXIgZWxBdXRoID0gYmluZGluZy5leHByZXNzaW9uOwogICAgdmFyIGFsbE1ldGhvZEFycmF5ID0gYWxsTWV0aG9kLnNwbGl0KCcsJyk7CiAgICB2YXIgbWV0aG9kQXV0aEFycmF5ID0gbWV0aG9kQXV0aC5zcGxpdCgnLCcpOwogICAgLy8g5peg5p2D6ZmQ5YiZ6ZqQ6JeP5oyJ6ZKuCiAgICBpZiAoIW1ldGhvZEF1dGhBcnJheS5pbmNsdWRlcyhlbEF1dGgpICYmICFhbGxNZXRob2RBcnJheS5pbmNsdWRlcyhlbEF1dGgpKSB7CiAgICAgIGVsLnN0eWxlLmRpc3BsYXkgPSAnbm9uZSc7CiAgICB9CiAgfQp9KTsKCi8vIOazqOWGjOWFqOWxgOWFrOW8j+iuoeeul+e7hOS7tgpWdWUuZGlyZWN0aXZlKCdmb3JtdWxhJywgewogIGJpbmQ6IGZ1bmN0aW9uIGJpbmQoZWwsIGJpbmRpbmcsIHZub2RlKSB7CiAgICB2YXIgcHJvcHNEYXRhID0gdm5vZGUuY29udGV4dC4kb3B0aW9ucy5wcm9wc0RhdGE7CiAgICAvL+WIneWni+WMlueahOaXtuWAme+8jOWmguaenOayoeacieWAvO+8jOWImeeUqOWFrOW8j+eahOiuoeeul+e7k+aenOadpei1i+WAvOe7meW9k+WJjeWtl+autQogICAgdmFyIG9sZFZhbCA9IHV0aWxzLmdldFZhbHVlQnlQYXRoKHByb3BzRGF0YSwgYmluZGluZy52YWx1ZS5iaW5kUGF0aCk7CiAgICBpZiAocHJvcHNEYXRhICYmICFvbGRWYWwpIHsKICAgICAgdXRpbHMuc2V0VmFsdWVCeVBhdGgocHJvcHNEYXRhLCBiaW5kaW5nLnZhbHVlLmJpbmRQYXRoLCBiaW5kaW5nLnZhbHVlLnZhbHVlKTsKICAgICAgdm5vZGUuY29udGV4dC4kZm9yY2VVcGRhdGUoKTsKICAgIH0KICB9LAogIHVwZGF0ZTogZnVuY3Rpb24gdXBkYXRlKGVsLCBiaW5kaW5nLCB2bm9kZSwgb2xkVm5vZGUpIHsKICAgIGlmIChiaW5kaW5nLm9sZFZhbHVlLnZhbHVlIGluc3RhbmNlb2YgRGF0ZSkgewogICAgICBpZiAoYmluZGluZy5vbGRWYWx1ZS52YWx1ZS5nZXRUaW1lKCkgIT09IGJpbmRpbmcudmFsdWUudmFsdWUuZ2V0VGltZSgpKSB7CiAgICAgICAgdXRpbHMuc2V0VmFsdWVCeVBhdGgodm5vZGUuY29udGV4dC4kb3B0aW9ucy5wcm9wc0RhdGEsIGJpbmRpbmcudmFsdWUuYmluZFBhdGgsIGJpbmRpbmcudmFsdWUudmFsdWUpOwogICAgICAgIHZub2RlLmNvbnRleHQuJGZvcmNlVXBkYXRlKCk7CiAgICAgIH0KICAgIH0gZWxzZSB7CiAgICAgIGlmIChiaW5kaW5nLm9sZFZhbHVlLnZhbHVlICE9IGJpbmRpbmcudmFsdWUudmFsdWUpIHsKICAgICAgICB1dGlscy5zZXRWYWx1ZUJ5UGF0aCh2bm9kZS5jb250ZXh0LiRvcHRpb25zLnByb3BzRGF0YSwgYmluZGluZy52YWx1ZS5iaW5kUGF0aCwgYmluZGluZy52YWx1ZS52YWx1ZSk7CiAgICAgICAgdm5vZGUuY29udGV4dC4kZm9yY2VVcGRhdGUoKTsKICAgICAgfQogICAgfQogIH0KfSk7ClZ1ZS5kaXJlY3RpdmUoJ21hcHBpbmcnLCB7CiAgdXBkYXRlOiBmdW5jdGlvbiB1cGRhdGUoZWwsIGJpbmRpbmcsIHZub2RlLCBvbGRWbm9kZSkgewogICAgaWYgKGJpbmRpbmcub2xkVmFsdWUgIT09IGJpbmRpbmcudmFsdWUpIHsKICAgICAgVnVlLnNldChlbC5fX3Z1ZV9fLCAnaW5wdXRWYWwnLCBiaW5kaW5nLnZhbHVlKTsKICAgIH0KICB9Cn0pOwoKLy8gVnVlLmRpcmVjdGl2ZSgiZHluYW1pYy1vcHRpb25zIiwgewovLyAgICAgYmluZChlbCwgYmluZGluZywgdm5vZGUpIHsKLy8gICAgICAgICBsZXQgZXhwID0gbnVsbDsKLy8gICAgICAgICBpZiAoYmluZGluZy5leHByZXNzaW9uKSB7Ci8vICAgICAgICAgICAgIGV4cCA9IHV0aWxzLnBhcnNlVG9Kc29uKGJpbmRpbmcuZXhwcmVzc2lvbik7Ci8vICAgICAgICAgfQovLyAgICAgICAgIGNvbnN0IGluc3QgPSB2bm9kZS5jb250ZXh0OwovLyAgICAgICAgIGlmIChpbnN0KSB7Ci8vICAgICAgICAgICAgIC8vIOS4iuS4gOasoeWKqOaAgemAiemhueafpeivouadoeS7tgovLyAgICAgICAgICAgICBpbnN0LnByZUR5bmFtaWNMb2FkUGFyYW1zID0gbnVsbDsKLy8gICAgICAgICAgICAgaW5zdC4kb24oImR5bmFtaWMtb3B0aW9uczpsb2FkIiwgKGFsaWFzLCBwYXJhbXMpID0+IHsKLy8gICAgICAgICAgICAgICAgIHBhcmFtcyA9IHBhcmFtcyB8fCB7fTsKLy8gICAgICAgICAgICAgICAgIC8vIOaYr+WQpuaJp+ihjOafpeivogovLyAgICAgICAgICAgICAgICAgbGV0IGRvTG9hZCA9IHRydWU7Ci8vICAgICAgICAgICAgICAgICBpZiAoZXhwICYmIGV4cC5jYWNoZSkgewovLyAgICAgICAgICAgICAgICAgICAgIC8vIOebuOavlOS4iuS4gOasoe+8jOafpeivouWPguaVsOaYr+WQpuacieWPmOWMlgovLyAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYW5nZWQgPSAhdXRpbHMub2JqZWN0RXF1YWxzKGluc3QucHJlRHluYW1pY0xvYWRQYXJhbXMsIHBhcmFtcyk7Ci8vICAgICAgICAgICAgICAgICAgICAgaWYgKGNoYW5nZWQpIHsKLy8gICAgICAgICAgICAgICAgICAgICAgICAgZG9Mb2FkID0gdHJ1ZTsKLy8gICAgICAgICAgICAgICAgICAgICAgICAgaW5zdC5wcmVEeW5hbWljTG9hZFBhcmFtcyA9IHBhcmFtczsKLy8gICAgICAgICAgICAgICAgICAgICB9Ci8vICAgICAgICAgICAgICAgICAgICAgZWxzZSB7Ci8vICAgICAgICAgICAgICAgICAgICAgICAgIGRvTG9hZCA9IGZhbHNlOwovLyAgICAgICAgICAgICAgICAgICAgIH0KLy8gICAgICAgICAgICAgICAgIH0KLy8gICAgICAgICAgICAgICAgIGRvTG9hZCAmJiBDdXN0b21RdWVyeS5sb2FkKGFsaWFzLCBwYXJhbXMpLnRoZW4oKGRhdGEpID0+IHsKLy8gICAgICAgICAgICAgICAgICAgICBpbnN0LiRlbWl0KCJkeW5hbWljLW9wdGlvbnM6dXBkYXRlIiwgYWxpYXMsIGRhdGEpOwovLyAgICAgICAgICAgICAgICAgfSk7Ci8vICAgICAgICAgICAgIH0pOwovLyAgICAgICAgIH0KLy8gICAgIH0KLy8gfSk7Ci8v55So5LqO5LiK57qn5YC85Y+Y5YyW5ZCO77yM5LiL57qn5YaF5a656ZyA6KaB5riF56m6ClZ1ZS5kaXJlY3RpdmUoJ3dhdGNoLXBhcmVudCcsIHsKICB1cGRhdGU6IGZ1bmN0aW9uIHVwZGF0ZShlbCwgYmluZGluZywgdm5vZGUpIHsKICAgIGlmIChiaW5kaW5nLnZhbHVlICYmIGJpbmRpbmcudmFsdWUucGlkKSB7CiAgICAgIHZhciBfbG9vcCA9IGZ1bmN0aW9uIF9sb29wKCkgewogICAgICAgIHZhciBpbnN0ID0gdm5vZGUuY29udGV4dDsKICAgICAgICB2YXIgaW5zdFBhcmVudCA9IHV0aWxzLmdldE9ubGluZUZvcm1JbnN0YW5jZShpbnN0KTsKICAgICAgICBpbnN0UGFyZW50LiR3YXRjaChmdW5jdGlvbiAoKSB7CiAgICAgICAgICByZXR1cm4gdXRpbHMuZ2V0VmFsdWVCeVBhdGgoaW5zdFBhcmVudCwgYmluZGluZy52YWx1ZS5waWRba2V5XSwgYmluZGluZy52YWx1ZS5pbmRleCk7CiAgICAgICAgfSwgZnVuY3Rpb24gKG5ld1ZhbCwgb2xkVmFsLCBmYXJld2VsbCkgewogICAgICAgICAgaWYgKG5ld1ZhbCAhPT0gb2xkVmFsKSB7CiAgICAgICAgICAgIGluc3QuaW5wdXRWYWwgPSAnJzsKICAgICAgICAgIH0KICAgICAgICB9KTsKICAgICAgfTsKICAgICAgZm9yICh2YXIga2V5IGluIGJpbmRpbmcudmFsdWUucGlkKSB7CiAgICAgICAgX2xvb3AoKTsKICAgICAgfQogICAgfQogIH0KfSk7Ci8vIFZ1ZS5kaXJlY3RpdmUoInJlbGF0ZWQtcXVlcnkiLCB7Ci8vICAgICBiaW5kKGVsLCBiaW5kaW5nLCB2bm9kZSkgewovLyAgICAgICAgIGNvbnN0IGluc3QgPSB2bm9kZS5jb250ZXh0OwovLyAgICAgICAgIGxldCBleHAgPSBudWxsOwovLyAgICAgICAgIGlmIChiaW5kaW5nLmV4cHJlc3Npb24pIHsKLy8gICAgICAgICAgICAgZXhwID0gdXRpbHMucGFyc2VUb0pzb24oYmluZGluZy5leHByZXNzaW9uKTsKLy8gICAgICAgICB9Ci8vICAgICAgICAgaWYgKGluc3QpIHsKLy8gICAgICAgICAgICAgLy8g5LiK5LiA5qyh5YWz6IGU5p+l6K+i5p2h5Lu277yI5LiA5Liq57uE5Lu25Y+v5Lul57uR5a6a5aSa5Liq5YWz6IGU5p+l6K+i77yM77yJCi8vICAgICAgICAgICAgIGluc3QucHJlUmVsYXRlZFF1ZXJ5UGFyYW1zID0ge307Ci8vICAgICAgICAgICAgIGluc3QuJG9uKCJyZWxhdGVkLXF1ZXJ5OmxvYWQiLCAoYWxpYXMsIHBhcmFtcywgcmVzdWx0QmluZCkgPT4gewovLyAgICAgICAgICAgICAgICAgcGFyYW1zID0gcGFyYW1zIHx8IHt9OwovLyAgICAgICAgICAgICAgICAgLy8g5piv5ZCm5omn6KGM5p+l6K+iCi8vICAgICAgICAgICAgICAgICBsZXQgZG9Mb2FkID0gdHJ1ZTsKLy8gICAgICAgICAgICAgICAgIGlmIChleHAgJiYgZXhwLmNhY2hlKSB7Ci8vICAgICAgICAgICAgICAgICAgICAgLy8g55u45q+U5LiK5LiA5qyh77yM5p+l6K+i5Y+C5pWw5piv5ZCm5pyJ5Y+Y5YyWCi8vICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhbmdlZCA9ICF1dGlscy5vYmplY3RFcXVhbHMoaW5zdC5wcmVSZWxhdGVkUXVlcnlQYXJhbXNbYWxpYXNdLCBwYXJhbXMpOwovLyAgICAgICAgICAgICAgICAgICAgIGlmIChjaGFuZ2VkKSB7Ci8vICAgICAgICAgICAgICAgICAgICAgICAgIGRvTG9hZCA9IHRydWU7Ci8vICAgICAgICAgICAgICAgICAgICAgICAgIGluc3QucHJlUmVsYXRlZFF1ZXJ5UGFyYW1zW2FsaWFzXSA9IHBhcmFtczsKLy8gICAgICAgICAgICAgICAgICAgICB9Ci8vICAgICAgICAgICAgICAgICAgICAgZWxzZSB7Ci8vICAgICAgICAgICAgICAgICAgICAgICAgIGRvTG9hZCA9IGZhbHNlOwovLyAgICAgICAgICAgICAgICAgICAgIH0KLy8gICAgICAgICAgICAgICAgIH0KLy8gICAgICAgICAgICAgICAgIGRvTG9hZCAmJiBDdXN0b21RdWVyeS5sb2FkKGFsaWFzLCBwYXJhbXMpLnRoZW4oKGRhdGEpID0+IHsKLy8gICAgICAgICAgICAgICAgICAgICBpZiAoZGF0YSAmJiBkYXRhLmNvbnN0cnVjdG9yID09IEFycmF5ICYmIGRhdGEubGVuZ3RoID4gMCAmJiByZXN1bHRCaW5kICYmIHJlc3VsdEJpbmQuY29uc3RydWN0b3IgPT0gT2JqZWN0KSB7Ci8vICAgICAgICAgICAgICAgICAgICAgICAgIC8vIOiOt+WPluW9k+WJjeaOp+S7tuaYr+WQpuWcqOWtkOihqOafkOihjOS4rQovLyAgICAgICAgICAgICAgICAgICAgICAgICBsZXQgeyBpbmRleCB9ID0gdXRpbHMuZ2V0U3ViU2NvcGVFbEFuZEluZGV4KGVsKTsKCi8vICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHBJbnN0ID0gdXRpbHMuZ2V0T25saW5lRm9ybUluc3RhbmNlKGluc3QpOwovLyAgICAgICAgICAgICAgICAgICAgICAgICAvLyDlhbPogZTmn6Xor6LlgLzlm57nu5Hml7bvvIzpu5jorqTojrflj5bov5Tlm57nmoTnrKzkuIDmnaHorrDlvZUKLy8gICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgc2luZ2xlRGF0YSA9IGRhdGFbMF07Ci8vICAgICAgICAgICAgICAgICAgICAgICAgIE9iamVjdC5rZXlzKHJlc3VsdEJpbmQpLmZvckVhY2goayA9PiB7Ci8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBwYXRoID0gcmVzdWx0QmluZFtrXTsKLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIOS4u+ihqAovLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGluZGV4ID09IG51bGwpIHsKLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1dGlscy5zZXRWYWx1ZUJ5UGF0aChwSW5zdCwgcGF0aCwgc2luZ2xlRGF0YVtrXSk7Ci8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9Ci8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyDlrZDooagKLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UgewovLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHV0aWxzLnNldFZhbHVlQnlQYXRoKHBJbnN0LCBwYXRoLCBzaW5nbGVEYXRhW2tdLCBpbmRleCk7Ci8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9Ci8vICAgICAgICAgICAgICAgICAgICAgICAgIH0pOwovLyAgICAgICAgICAgICAgICAgICAgIH0KLy8gICAgICAgICAgICAgICAgIH0pOwovLyAgICAgICAgICAgICB9KTsKLy8gICAgICAgICB9Ci8vICAgICB9Ci8vIH0pOwovL+ihqOagvOaoquWQkeaLluaLvQpWdWUuZGlyZWN0aXZlKCd0YWJsZURyYWcnLCB7CiAgaW5zZXJ0ZWQ6IGZ1bmN0aW9uIGluc2VydGVkKGVsKSB7CiAgICB2YXIgY3VycmVudEVsZW1lbnQgPSBlbC5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKCdlbC10YWJsZV9fYm9keS13cmFwcGVyJylbMF0gfHwgZWw7CiAgICB2YXIgdGFnTmFtZXMgPSBbJ3NwYW4nLCAnaW5wdXQnLCAndGV4dGFyZWEnLCAnYXNpZGUnXTsKICAgIGlmIChjdXJyZW50RWxlbWVudCkgewogICAgICBjdXJyZW50RWxlbWVudC5vbm1vdXNlZG93biA9IGZ1bmN0aW9uIChldmVudCkgewogICAgICAgIHZhciBjdXJyZW50VGFnTmFtZXMgPSBldmVudC50YXJnZXQudGFnTmFtZS50b0xvd2VyQ2FzZSgpOwogICAgICAgIGlmICh0YWdOYW1lcy5pbmNsdWRlcyhjdXJyZW50VGFnTmFtZXMpKSByZXR1cm47CiAgICAgICAgY3VycmVudEVsZW1lbnQuc3R5bGUuY3Vyc29yID0gJ2dyYWInOwogICAgICAgIHZhciBnYXBYID0gZXZlbnQuY2xpZW50WDsKICAgICAgICB2YXIgc3RhcnRYID0gZWwuc2Nyb2xsTGVmdDsKICAgICAgICBkb2N1bWVudC5vbm1vdXNlbW92ZSA9IGZ1bmN0aW9uIChlKSB7CiAgICAgICAgICB2YXIgeCA9IGUuY2xpZW50WCAtIGdhcFg7CiAgICAgICAgICBjdXJyZW50RWxlbWVudC5zY3JvbGxMZWZ0ID0gc3RhcnRYIC0geDsKICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICB9OwogICAgICAgIGRvY3VtZW50Lm9ubW91c2V1cCA9IGZ1bmN0aW9uIChlKSB7CiAgICAgICAgICBkb2N1bWVudC5vbm1vdXNlbW92ZSA9IG51bGw7CiAgICAgICAgICBkb2N1bWVudC5vbm1vdXNldXAgPSBudWxsOwogICAgICAgIH07CiAgICAgIH07CiAgICB9CiAgfQp9KTsKCi8v55So5LqO5o6n5Yi25a2Q6KGo5oiW5a2Z6KGo5Y2V6KGMcGVybWlzc2lvbgpWdWUuZGlyZWN0aXZlKCdwZXJtaXNzaW9uLWxpbmUnLCB7CiAgYmluZDogZnVuY3Rpb24gYmluZChlbCwgYmluZGluZywgdm5vZGUpIHsKICAgIGlmIChiaW5kaW5nLnZhbHVlKSB7CiAgICAgIHZhciBpbnN0ID0gdm5vZGUuY29udGV4dDsKICAgICAgdmFyIGlkeE9iaiA9IHV0aWxzLmdldFN1YlNjb3BlRWxBbmRJbmRleChlbCk7CiAgICAgIHZhciBwYXRocyA9IGJpbmRpbmcudmFsdWUuc3BsaXQoJ18nKTsKICAgICAgdmFyIGJvVHlwZSA9IHBhdGhzWzBdOwogICAgICB2YXIgaWRTdHIgPSBiaW5kaW5nLnZhbHVlICsgJ18nICsgaWR4T2JqLmluZGV4OwogICAgICAvL+WtmeihqOaXtu+8jOiOt+WPluWtmeihqOaJgOWxnuWtkOihqOW6j+WPtwogICAgICBpZiAoYm9UeXBlID09ICdzdW4nICYmIGlkeE9iai5zdWJTY29wZUVsKSB7CiAgICAgICAgdmFyIHN1YklkeE9iaiA9IHV0aWxzLmdldFN1YlNjb3BlRWxBbmRJbmRleChpZHhPYmouc3ViU2NvcGVFbC5wYXJlbnRFbGVtZW50KTsKICAgICAgICBpZFN0ciA9IGJpbmRpbmcudmFsdWUgKyAnXycgKyBzdWJJZHhPYmouaW5kZXggKyAnXycgKyBpZHhPYmouaW5kZXg7CiAgICAgIH0KICAgICAgaWYgKGluc3QucGVybWlzc2lvbiAmJiBpbnN0LnBlcm1pc3Npb25bJ3N1YkZpZWxkcyddICYmIGluc3QucGVybWlzc2lvblsnc3ViRmllbGRzJ11baWRTdHJdKSB7CiAgICAgICAgc2V0VGltZW91dChmdW5jdGlvbiAoKSB7CiAgICAgICAgICBpZiAoZWwuX192dWVfXykgewogICAgICAgICAgICBlbC5fX3Z1ZV9fLnBlcm1pc3Npb25fc3ViID0gaW5zdC5wZXJtaXNzaW9uWydzdWJGaWVsZHMnXVtpZFN0cl07CiAgICAgICAgICAgIGVsLl9fdnVlX18uc3ViX3dvcmsgPSB0cnVlOwogICAgICAgICAgfQogICAgICAgIH0sIDApOwogICAgICB9CiAgICB9CiAgfSwKICB1cGRhdGU6IGZ1bmN0aW9uIHVwZGF0ZShlbCwgYmluZGluZywgdm5vZGUpIHsKICAgIGlmIChiaW5kaW5nLnZhbHVlKSB7CiAgICAgIHZhciBpbnN0ID0gdm5vZGUuY29udGV4dDsKICAgICAgdmFyIGlkeE9iaiA9IHV0aWxzLmdldFN1YlNjb3BlRWxBbmRJbmRleChlbCk7CiAgICAgIHZhciBwYXRocyA9IGJpbmRpbmcudmFsdWUuc3BsaXQoJ18nKTsKICAgICAgdmFyIGJvVHlwZSA9IHBhdGhzWzBdOwogICAgICB2YXIgaWRTdHIgPSBiaW5kaW5nLnZhbHVlICsgJ18nICsgaWR4T2JqLmluZGV4OwogICAgICAvL+WtmeihqOaXtu+8jOiOt+WPluWtmeihqOaJgOWxnuWtkOihqOW6j+WPtwogICAgICBpZiAoYm9UeXBlID09PSAnc3VuJyAmJiBpZHhPYmouc3ViU2NvcGVFbCkgewogICAgICAgIHZhciBzdWJJZHhPYmogPSB1dGlscy5nZXRTdWJTY29wZUVsQW5kSW5kZXgoaWR4T2JqLnN1YlNjb3BlRWwucGFyZW50RWxlbWVudCk7CiAgICAgICAgaWRTdHIgPSBiaW5kaW5nLnZhbHVlICsgJ18nICsgc3ViSWR4T2JqLmluZGV4ICsgJ18nICsgaWR4T2JqLmluZGV4OwogICAgICB9CiAgICAgIGlmIChpbnN0LnBlcm1pc3Npb24gJiYgaW5zdC5wZXJtaXNzaW9uWydzdWJGaWVsZHMnXSAmJiBpbnN0LnBlcm1pc3Npb25bJ3N1YkZpZWxkcyddW2lkU3RyXSkgewogICAgICAgIHNldFRpbWVvdXQoZnVuY3Rpb24gKCkgewogICAgICAgICAgaWYgKGVsLl9fdnVlX18pIHsKICAgICAgICAgICAgZWwuX192dWVfXy5wZXJtaXNzaW9uX3N1YiA9IGluc3QucGVybWlzc2lvblsnc3ViRmllbGRzJ11baWRTdHJdOwogICAgICAgICAgfQogICAgICAgIH0sIDApOwogICAgICB9CiAgICB9CiAgfQp9KTsKLy/nlKjkuo7mjqfliLblrZDooajmiJblrZnooajljZXooYxwZXJtaXNzaW9uIGxhYmxl5qCH562+ClZ1ZS5kaXJlY3RpdmUoJ3Blcm1pc3Npb24tbGluZS1sYWJsZScsIHsKICBiaW5kOiBmdW5jdGlvbiBiaW5kKGVsLCBiaW5kaW5nLCB2bm9kZSkgewogICAgaWYgKGJpbmRpbmcudmFsdWUpIHsKICAgICAgdmFyIGluc3QgPSB2bm9kZS5jb250ZXh0OwogICAgICB2YXIgaWR4T2JqID0gdXRpbHMuZ2V0U3ViU2NvcGVFbEFuZEluZGV4KGVsKTsKICAgICAgdmFyIHBhdGhzID0gYmluZGluZy52YWx1ZS5zcGxpdCgnXycpOwogICAgICB2YXIgYm9UeXBlID0gcGF0aHNbMF07CiAgICAgIHZhciBpZFN0ciA9IGJpbmRpbmcudmFsdWUgKyAnXycgKyBpZHhPYmouaW5kZXg7CiAgICAgIC8v5a2Z6KGo5pe277yM6I635Y+W5a2Z6KGo5omA5bGe5a2Q6KGo5bqP5Y+3CiAgICAgIGlmIChib1R5cGUgPT0gJ3N1bicgJiYgaWR4T2JqLnN1YlNjb3BlRWwpIHsKICAgICAgICB2YXIgc3ViSWR4T2JqID0gdXRpbHMuZ2V0U3ViU2NvcGVFbEFuZEluZGV4KGlkeE9iai5zdWJTY29wZUVsLnBhcmVudEVsZW1lbnQpOwogICAgICAgIGlkU3RyID0gYmluZGluZy52YWx1ZSArICdfJyArIHN1YklkeE9iai5pbmRleCArICdfJyArIGlkeE9iai5pbmRleDsKICAgICAgfQogICAgICBpZiAoaW5zdC5wZXJtaXNzaW9uICYmIGluc3QucGVybWlzc2lvblsnc3ViRmllbGRzJ10gJiYgaW5zdC5wZXJtaXNzaW9uWydzdWJGaWVsZHMnXVtpZFN0cl0pIHsKICAgICAgICBzZXRUaW1lb3V0KGZ1bmN0aW9uICgpIHsKICAgICAgICAgIGVsLnBhcmVudEVsZW1lbnQuaGlkZGVuID0gaW5zdC5wZXJtaXNzaW9uWydzdWJGaWVsZHMnXVtpZFN0cl0gPT0gJ24nID8gdHJ1ZSA6IGZhbHNlOwogICAgICAgIH0sIDApOwogICAgICB9CiAgICB9CiAgfSwKICB1cGRhdGU6IGZ1bmN0aW9uIHVwZGF0ZShlbCwgYmluZGluZywgdm5vZGUpIHsKICAgIGlmIChiaW5kaW5nLnZhbHVlKSB7CiAgICAgIHZhciBpbnN0ID0gdm5vZGUuY29udGV4dDsKICAgICAgdmFyIGlkeE9iaiA9IHV0aWxzLmdldFN1YlNjb3BlRWxBbmRJbmRleChlbCk7CiAgICAgIHZhciBwYXRocyA9IGJpbmRpbmcudmFsdWUuc3BsaXQoJ18nKTsKICAgICAgdmFyIGJvVHlwZSA9IHBhdGhzWzBdOwogICAgICB2YXIgaWRTdHIgPSBiaW5kaW5nLnZhbHVlICsgJ18nICsgaWR4T2JqLmluZGV4OwogICAgICAvL+WtmeihqOaXtu+8jOiOt+WPluWtmeihqOaJgOWxnuWtkOihqOW6j+WPtwogICAgICBpZiAoYm9UeXBlID09ICdzdW4nICYmIGlkeE9iai5zdWJTY29wZUVsKSB7CiAgICAgICAgdmFyIHN1YklkeE9iaiA9IHV0aWxzLmdldFN1YlNjb3BlRWxBbmRJbmRleChpZHhPYmouc3ViU2NvcGVFbC5wYXJlbnRFbGVtZW50KTsKICAgICAgICBpZFN0ciA9IGJpbmRpbmcudmFsdWUgKyAnXycgKyBzdWJJZHhPYmouaW5kZXggKyAnXycgKyBpZHhPYmouaW5kZXg7CiAgICAgIH0KICAgICAgaWYgKGluc3QucGVybWlzc2lvbiAmJiBpbnN0LnBlcm1pc3Npb25bJ3N1YkZpZWxkcyddICYmIGluc3QucGVybWlzc2lvblsnc3ViRmllbGRzJ11baWRTdHJdKSB7CiAgICAgICAgc2V0VGltZW91dChmdW5jdGlvbiAoKSB7CiAgICAgICAgICBlbC5wYXJlbnRFbGVtZW50LmhpZGRlbiA9IGluc3QucGVybWlzc2lvblsnc3ViRmllbGRzJ11baWRTdHJdID09ICduJyA/IHRydWUgOiBmYWxzZTsKICAgICAgICB9LCAwKTsKICAgICAgfQogICAgfQogIH0KfSk7CgovLyDnlKjkuo7ngrnlh7vmjIflrprljLrln5/lpJbmiafooYzmn5Dlip/og70KVnVlLmRpcmVjdGl2ZSgnY2xpY2stb3V0c2lkZScsIHsKICBiaW5kOiBmdW5jdGlvbiBiaW5kKGVsLCBiaW5kaW5ncywgdm5vZGUpIHsKICAgIGVsLmhhbmRsZXIgPSBmdW5jdGlvbiAoZSkgewogICAgICBpZiAoIWVsLmNvbnRhaW5zKGUudGFyZ2V0KSkgewogICAgICAgIHZhciBtZXRob2QgPSBiaW5kaW5ncy5leHByZXNzaW9uOwogICAgICAgIHZub2RlLmNvbnRleHRbbWV0aG9kXSgpOwogICAgICB9CiAgICB9OwogICAgZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcignY2xpY2snLCBlbC5oYW5kbGVyKTsKICB9LAogIHVuYmluZDogZnVuY3Rpb24gdW5iaW5kKGVsKSB7CiAgICAvLyDlj6/nlKjkuo7op6PpmaTkuovku7bnu5HlrpoKICAgIGRvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgZWwuaGFuZGxlcik7CiAgfQp9KTsKdmFyIGRpcmVjdGl2ZSA9IHt9OwpleHBvcnQgZGVmYXVsdCBkaXJlY3RpdmU7"},null]}