{"remainingRequest":"D:\\jenkins\\workspace\\bzzgj-fvue\\node_modules\\@vue\\cli-plugin-babel\\node_modules\\thread-loader\\dist\\cjs.js!D:\\jenkins\\workspace\\bzzgj-fvue\\node_modules\\babel-loader\\lib\\index.js!D:\\jenkins\\workspace\\bzzgj-fvue\\node_modules\\eslint-loader\\index.js??ref--13-0!D:\\jenkins\\workspace\\bzzgj-fvue\\src\\formulas.js","dependencies":[{"path":"D:\\jenkins\\workspace\\bzzgj-fvue\\src\\formulas.js","mtime":1667545182254},{"path":"D:\\jenkins\\workspace\\bzzgj-fvue\\babel.config.js","mtime":1725536844935},{"path":"D:\\jenkins\\workspace\\bzzgj-fvue\\node_modules\\@vue\\cli-plugin-babel\\node_modules\\cache-loader\\dist\\cjs.js","mtime":499162500000},{"path":"D:\\jenkins\\workspace\\bzzgj-fvue\\node_modules\\@vue\\cli-plugin-babel\\node_modules\\thread-loader\\dist\\cjs.js","mtime":499162500000},{"path":"D:\\jenkins\\workspace\\bzzgj-fvue\\node_modules\\babel-loader\\lib\\index.js","mtime":456789000000},{"path":"D:\\jenkins\\workspace\\bzzgj-fvue\\node_modules\\eslint-loader\\index.js","mtime":499162500000}],"contextDependencies":[],"result":[{"type":"Buffer","data":"base64:aW1wb3J0IF90eXBlb2YgZnJvbSAiRDovamVua2lucy93b3Jrc3BhY2UvYnp6Z2otZnZ1ZS9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vdHlwZW9mLmpzIjsKaW1wb3J0IF90b0NvbnN1bWFibGVBcnJheSBmcm9tICJEOi9qZW5raW5zL3dvcmtzcGFjZS9ienpnai1mdnVlL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS90b0NvbnN1bWFibGVBcnJheS5qcyI7CmltcG9ydCAiY29yZS1qcy9tb2R1bGVzL2VzLmFycmF5Lm1hcC5qcyI7CmltcG9ydCAiY29yZS1qcy9tb2R1bGVzL2VzLmFycmF5LnB1c2guanMiOwppbXBvcnQgImNvcmUtanMvbW9kdWxlcy9lcy5hcnJheS5zb3J0LmpzIjsKaW1wb3J0ICJjb3JlLWpzL21vZHVsZXMvZXMuaXRlcmF0b3IuY29uc3RydWN0b3IuanMiOwppbXBvcnQgImNvcmUtanMvbW9kdWxlcy9lcy5pdGVyYXRvci5mb3ItZWFjaC5qcyI7CmltcG9ydCAiY29yZS1qcy9tb2R1bGVzL2VzLml0ZXJhdG9yLm1hcC5qcyI7CmltcG9ydCAiY29yZS1qcy9tb2R1bGVzL2VzLm51bWJlci5jb25zdHJ1Y3Rvci5qcyI7CmltcG9ydCAiY29yZS1qcy9tb2R1bGVzL2VzLm51bWJlci50by1maXhlZC5qcyI7CmltcG9ydCAiY29yZS1qcy9tb2R1bGVzL2VzLm9iamVjdC50by1zdHJpbmcuanMiOwppbXBvcnQgImNvcmUtanMvbW9kdWxlcy9lcy5yZWdleHAuZXhlYy5qcyI7CmltcG9ydCAiY29yZS1qcy9tb2R1bGVzL2VzLnJlZ2V4cC50by1zdHJpbmcuanMiOwppbXBvcnQgImNvcmUtanMvbW9kdWxlcy9lcy5zdHJpbmcucmVwbGFjZS5qcyI7CmltcG9ydCAiY29yZS1qcy9tb2R1bGVzL2VzLnN0cmluZy5zcGxpdC5qcyI7CmltcG9ydCAiY29yZS1qcy9tb2R1bGVzL2VzLnN0cmluZy5zdGFydHMtd2l0aC5qcyI7CmltcG9ydCAiY29yZS1qcy9tb2R1bGVzL2VzLnN0cmluZy50cmltLmpzIjsKaW1wb3J0ICJjb3JlLWpzL21vZHVsZXMvd2ViLmRvbS1jb2xsZWN0aW9ucy5mb3ItZWFjaC5qcyI7CmltcG9ydCB7IEZvcm0sIE5vdGlmaWNhdGlvbiB9IGZyb20gJ2VsZW1lbnQtdWknOwppbXBvcnQgdXRpbHMgZnJvbSAiQC91dGlscy5qcyI7CnZhciBGb3JtdWxhcyA9IHsKICBkMTkwMDogbmV3IERhdGUoRGF0ZS5VVEMoMTkwMCwgMCwgMSkpLAogIFdFRUtfU1RBUlRTOiBbdW5kZWZpbmVkLCAwLCAxLCB1bmRlZmluZWQsIHVuZGVmaW5lZCwgdW5kZWZpbmVkLCB1bmRlZmluZWQsIHVuZGVmaW5lZCwgdW5kZWZpbmVkLCB1bmRlZmluZWQsIHVuZGVmaW5lZCwgdW5kZWZpbmVkLCAxLCAyLCAzLCA0LCA1LCA2LCAwXSwKICAvKioNCiAgKiDlhoDkuK3og73mupDkuJrliqHlvIDlj5HnmoTorqHnrpflhazlvI8NCiAgICovCiAgLy/moLnmja7kvKDlhaXnmoTlubTmnIjlvpfliLDkuIrmnIjnmoTmnIjku70KICBMYXN0TW9udGg6IGZ1bmN0aW9uIExhc3RNb250aCh5LCBtKSB7CiAgICBtID0gcGFyc2VJbnQobSk7CiAgICB5ID0gcGFyc2VJbnQoeSk7CiAgICBpZiAobSA+IDAgJiYgbSA8IDEzICYmIHkgPiAwKSB7CiAgICAgIGlmIChtID09PSAxKSB7CiAgICAgICAgcmV0dXJuIDEyOwogICAgICB9CiAgICAgIHZhciB2ID0gbSAtIDE7CiAgICAgIGlmICh2IDwgMTApIHsKICAgICAgICB2ID0gIjAiICsgdjsKICAgICAgfQogICAgICByZXR1cm4gdjsKICAgIH0KICB9LAogIC8v5qC55o2u5Lyg5YWl55qE5bm05pyI5b6X5Yiw5LiK5Liq5pyI55qE5bm05Lu9CiAgTGFzdFllYXI6IGZ1bmN0aW9uIExhc3RZZWFyKHksIG0pIHsKICAgIG0gPSBwYXJzZUludChtKTsKICAgIHkgPSBwYXJzZUludCh5KTsKICAgIGlmIChtID4gMCAmJiBtIDwgMTMgJiYgeSA+IDApIHsKICAgICAgaWYgKG0gPT09IDEpIHsKICAgICAgICByZXR1cm4geSAtIDE7CiAgICAgIH0KICAgICAgcmV0dXJuIHk7CiAgICB9CiAgfSwKICAvKioNCiAgICog5pWw5a2m5YWs5byPDQogICAqLwogIEFCUzogZnVuY3Rpb24gQUJTKG51bWJlcikgewogICAgbnVtYmVyID0gRm9ybXVsYXMucGFyc2VOdW1iZXIobnVtYmVyKTsKICAgIHJldHVybiBNYXRoLmFicyhudW1iZXIpOwogIH0sCiAgQVZFUkFHRTogZnVuY3Rpb24gQVZFUkFHRSgpIHsKICAgIHZhciBhdmcgPSAwOwogICAgZm9yICh2YXIgX2xlbiA9IGFyZ3VtZW50cy5sZW5ndGgsIG51bWJlciA9IG5ldyBBcnJheShfbGVuKSwgX2tleSA9IDA7IF9rZXkgPCBfbGVuOyBfa2V5KyspIHsKICAgICAgbnVtYmVyW19rZXldID0gYXJndW1lbnRzW19rZXldOwogICAgfQogICAgbnVtYmVyLmZvckVhY2goZnVuY3Rpb24gKGl0ZW0pIHsKICAgICAgYXZnICs9IEZvcm11bGFzLnBhcnNlTnVtYmVyKGl0ZW0pOwogICAgfSk7CiAgICBpZiAobnVtYmVyLmxlbmd0aCA9PT0gMCkgcmV0dXJuIDA7CiAgICByZXR1cm4gYXZnIC8gbnVtYmVyLmxlbmd0aDsKICB9LAogIEFWRVJBR0VTVUI6IGZ1bmN0aW9uIEFWRVJBR0VTVUIob2JqKSB7CiAgICB2YXIgYXJyYXkgPSBGb3JtdWxhcy5nZXRBcnJheUJ5UGF0aChvYmopOwogICAgcmV0dXJuIEZvcm11bGFzLkFWRVJBR0UuYXBwbHkoRm9ybXVsYXMsIF90b0NvbnN1bWFibGVBcnJheShhcnJheSkpOwogIH0sCiAgQ0VJTElORzogZnVuY3Rpb24gQ0VJTElORyhudW1iZXIsIHNpZ25pZmljYW5jZSkgewogICAgbnVtYmVyID0gRm9ybXVsYXMucGFyc2VOdW1iZXIobnVtYmVyKTsKICAgIHNpZ25pZmljYW5jZSA9IEZvcm11bGFzLkFCUyhzaWduaWZpY2FuY2UpOwogICAgaWYgKHNpZ25pZmljYW5jZSA9PT0gMCkgewogICAgICByZXR1cm4gMDsKICAgIH0KICAgIHZhciBwcmVjaXNpb24gPSAtTWF0aC5mbG9vcihNYXRoLmxvZyhzaWduaWZpY2FuY2UpIC8gTWF0aC5sb2coMTApKTsKICAgIGlmIChudW1iZXIgPiAwKSB7CiAgICAgIHJldHVybiBGb3JtdWxhcy5ST1VORChNYXRoLmNlaWwobnVtYmVyIC8gc2lnbmlmaWNhbmNlKSAqIHNpZ25pZmljYW5jZSwgcHJlY2lzaW9uKTsKICAgIH0gZWxzZSB7CiAgICAgIHJldHVybiBGb3JtdWxhcy5ST1VORChNYXRoLmZsb29yKG51bWJlciAvIHNpZ25pZmljYW5jZSkgKiBzaWduaWZpY2FuY2UsIHByZWNpc2lvbik7CiAgICB9CiAgfSwKICBDT1VOVDogZnVuY3Rpb24gQ09VTlQoKSB7CiAgICByZXR1cm4gYXJndW1lbnRzLmxlbmd0aDsKICB9LAogIENPVU5UU1VCOiBmdW5jdGlvbiBDT1VOVFNVQihvYmopIHsKICAgIHZhciBhcnJheSA9IG9iai5kYXRhOwogICAgcmV0dXJuIGFycmF5Lmxlbmd0aDsKICB9LAogIENPVU5USUY6IGZ1bmN0aW9uIENPVU5USUYobGlzdCwgY29uZGl0aW9uKSB7CiAgICBpZiAoIWNvbmRpdGlvbi5zdGFydHNXaXRoKCI+IikgJiYgIWNvbmRpdGlvbi5zdGFydHNXaXRoKCI8IikpIHsKICAgICAgaWYgKGlzTmFOKGNvbmRpdGlvbikpIHsKICAgICAgICBjb25kaXRpb24gPSAiPT09JyIgKyBjb25kaXRpb24gKyAiJyI7CiAgICAgIH0gZWxzZSB7CiAgICAgICAgY29uZGl0aW9uID0gIj09PSIgKyBjb25kaXRpb247CiAgICAgIH0KICAgIH0KICAgIHZhciBpID0gMDsKICAgIGxpc3QuZm9yRWFjaChmdW5jdGlvbiAoaXRlbSkgewogICAgICBpZiAoZXZhbCgnaXRlbScgKyBjb25kaXRpb24pKSB7CiAgICAgICAgaSsrOwogICAgICB9CiAgICB9KTsKICAgIHJldHVybiBpOwogIH0sCiAgQ09VTlRJRlNVQjogZnVuY3Rpb24gQ09VTlRJRlNVQihvYmosIGNvbmRpdGlvbikgewogICAgdmFyIGFycmF5ID0gRm9ybXVsYXMuZ2V0QXJyYXlCeVBhdGgob2JqKTsKICAgIHJldHVybiBGb3JtdWxhcy5DT1VOVElGKGFycmF5LCBjb25kaXRpb24pOwogIH0sCiAgRklYRUQ6IGZ1bmN0aW9uIEZJWEVEKGRlY2ltYWwsIGRpZ2l0cykgewogICAgZGVjaW1hbCA9IEZvcm11bGFzLnBhcnNlTnVtYmVyKGRlY2ltYWwpOwogICAgZGlnaXRzID0gRm9ybXVsYXMucGFyc2VOdW1iZXIoZGlnaXRzKTsKICAgIHJldHVybiBOdW1iZXIoZGVjaW1hbCkudG9GaXhlZChkaWdpdHMpOwogIH0sCiAgRkxPT1I6IGZ1bmN0aW9uIEZMT09SKG51bWJlciwgc2lnbmlmaWNhbmNlKSB7CiAgICBudW1iZXIgPSBGb3JtdWxhcy5wYXJzZU51bWJlcihudW1iZXIpOwogICAgc2lnbmlmaWNhbmNlID0gRm9ybXVsYXMuQUJTKHNpZ25pZmljYW5jZSk7CiAgICBpZiAoc2lnbmlmaWNhbmNlID09PSAwKSB7CiAgICAgIHJldHVybiAwOwogICAgfQogICAgdmFyIHByZWNpc2lvbiA9IC1NYXRoLmZsb29yKE1hdGgubG9nKHNpZ25pZmljYW5jZSkgLyBNYXRoLmxvZygxMCkpOwogICAgaWYgKG51bWJlciA+IDApIHsKICAgICAgcmV0dXJuIEZvcm11bGFzLlJPVU5EKE1hdGguZmxvb3IobnVtYmVyIC8gc2lnbmlmaWNhbmNlKSAqIHNpZ25pZmljYW5jZSwgcHJlY2lzaW9uKTsKICAgIH0gZWxzZSB7CiAgICAgIHJldHVybiBGb3JtdWxhcy5ST1VORChNYXRoLmNlaWwobnVtYmVyIC8gc2lnbmlmaWNhbmNlKSAqIHNpZ25pZmljYW5jZSwgcHJlY2lzaW9uKTsKICAgIH0KICB9LAogIElOVDogZnVuY3Rpb24gSU5UKG51bWJlcikgewogICAgbnVtYmVyID0gRm9ybXVsYXMucGFyc2VOdW1iZXIobnVtYmVyKTsKICAgIHJldHVybiBwYXJzZUludChudW1iZXIpOwogIH0sCiAgTEFSR0U6IGZ1bmN0aW9uIExBUkdFKGFycmF5LCBpbmRleCkgewogICAgaW5kZXggPSBGb3JtdWxhcy5wYXJzZU51bWJlcihpbmRleCk7CiAgICByZXR1cm4gYXJyYXkuc29ydChmdW5jdGlvbiAoYSwgYikgewogICAgICByZXR1cm4gYiAtIGE7CiAgICB9KVtpbmRleCAtIDFdOwogIH0sCiAgTEFSR0VTVUI6IGZ1bmN0aW9uIExBUkdFU1VCKG9iaiwgaW5kZXgpIHsKICAgIHZhciBhcnJheSA9IEZvcm11bGFzLmdldEFycmF5QnlQYXRoKG9iaik7CiAgICByZXR1cm4gRm9ybXVsYXMuTEFSR0UoYXJyYXksIGluZGV4KTsKICB9LAogIExPRzogZnVuY3Rpb24gTE9HKG51bWJlciwgYmFzZSkgewogICAgbnVtYmVyID0gRm9ybXVsYXMucGFyc2VOdW1iZXIobnVtYmVyKTsKICAgIGJhc2UgPSBGb3JtdWxhcy5wYXJzZU51bWJlcihiYXNlKTsKICAgIGlmIChiYXNlID09PSAwKSByZXR1cm4gMDsKICAgIHJldHVybiBNYXRoLmxvZyhudW1iZXIpIC8gTWF0aC5sb2coYmFzZSk7CiAgfSwKICBNQVg6IGZ1bmN0aW9uIE1BWCgpIHsKICAgIGZvciAodmFyIF9sZW4yID0gYXJndW1lbnRzLmxlbmd0aCwgYXJncyA9IG5ldyBBcnJheShfbGVuMiksIF9rZXkyID0gMDsgX2tleTIgPCBfbGVuMjsgX2tleTIrKykgewogICAgICBhcmdzW19rZXkyXSA9IGFyZ3VtZW50c1tfa2V5Ml07CiAgICB9CiAgICBhcmdzID0gRm9ybXVsYXMucGFyc2VOdW1iZXJBcnJheShhcmdzKTsKICAgIGlmIChhcmdzLmxlbmd0aCA9PT0gMCkgewogICAgICByZXR1cm4gMDsKICAgIH0KICAgIHJldHVybiBNYXRoLm1heC5hcHBseShNYXRoLCBfdG9Db25zdW1hYmxlQXJyYXkoYXJncykpOwogIH0sCiAgTUFYU1VCOiBmdW5jdGlvbiBNQVhTVUIob2JqKSB7CiAgICB2YXIgYXJyYXkgPSBGb3JtdWxhcy5nZXRBcnJheUJ5UGF0aChvYmopOwogICAgcmV0dXJuIEZvcm11bGFzLk1BWC5hcHBseShGb3JtdWxhcywgX3RvQ29uc3VtYWJsZUFycmF5KGFycmF5KSk7CiAgfSwKICBNSU46IGZ1bmN0aW9uIE1JTigpIHsKICAgIGZvciAodmFyIF9sZW4zID0gYXJndW1lbnRzLmxlbmd0aCwgYXJncyA9IG5ldyBBcnJheShfbGVuMyksIF9rZXkzID0gMDsgX2tleTMgPCBfbGVuMzsgX2tleTMrKykgewogICAgICBhcmdzW19rZXkzXSA9IGFyZ3VtZW50c1tfa2V5M107CiAgICB9CiAgICBhcmdzID0gRm9ybXVsYXMucGFyc2VOdW1iZXJBcnJheShhcmdzKTsKICAgIGlmIChhcmdzLmxlbmd0aCA9PT0gMCkgewogICAgICByZXR1cm4gMDsKICAgIH0KICAgIHJldHVybiBNYXRoLm1pbi5hcHBseShNYXRoLCBfdG9Db25zdW1hYmxlQXJyYXkoYXJncykpOwogIH0sCiAgTUlOU1VCOiBmdW5jdGlvbiBNSU5TVUIob2JqKSB7CiAgICB2YXIgYXJyYXkgPSBGb3JtdWxhcy5nZXRBcnJheUJ5UGF0aChvYmopOwogICAgcmV0dXJuIEZvcm11bGFzLk1JTi5hcHBseShGb3JtdWxhcywgX3RvQ29uc3VtYWJsZUFycmF5KGFycmF5KSk7CiAgfSwKICBNT0Q6IGZ1bmN0aW9uIE1PRChkaXZpZGVuZCwgZGl2aXNvcikgewogICAgZGl2aWRlbmQgPSBGb3JtdWxhcy5wYXJzZU51bWJlcihkaXZpZGVuZCk7CiAgICBkaXZpc29yID0gRm9ybXVsYXMucGFyc2VOdW1iZXIoZGl2aXNvcik7CiAgICB2YXIgbW9kdWxlcyA9IE1hdGguYWJzKGRpdmlkZW5kICUgZGl2aXNvcik7CiAgICByZXR1cm4gZGl2aXNvciA+IDAgPyBtb2R1bGVzIDogLW1vZHVsZXM7CiAgfSwKICBQT1dFUjogZnVuY3Rpb24gUE9XRVIobnVtYmVyLCBwb3dlcikgewogICAgbnVtYmVyID0gRm9ybXVsYXMucGFyc2VOdW1iZXIobnVtYmVyKTsKICAgIHBvd2VyID0gRm9ybXVsYXMucGFyc2VOdW1iZXIocG93ZXIpOwogICAgcmV0dXJuIE1hdGgucG93KG51bWJlciwgcG93ZXIpOwogIH0sCiAgUFJPRFVDVDogZnVuY3Rpb24gUFJPRFVDVCgpIHsKICAgIHZhciB0b3RhbCA9IDE7CiAgICBmb3IgKHZhciBfbGVuNCA9IGFyZ3VtZW50cy5sZW5ndGgsIGFyZ3MgPSBuZXcgQXJyYXkoX2xlbjQpLCBfa2V5NCA9IDA7IF9rZXk0IDwgX2xlbjQ7IF9rZXk0KyspIHsKICAgICAgYXJnc1tfa2V5NF0gPSBhcmd1bWVudHNbX2tleTRdOwogICAgfQogICAgYXJncy5mb3JFYWNoKGZ1bmN0aW9uIChpdGVtKSB7CiAgICAgIGl0ZW0gPSBGb3JtdWxhcy5wYXJzZU51bWJlcihpdGVtKTsKICAgICAgdG90YWwgKj0gaXRlbTsKICAgIH0pOwogICAgcmV0dXJuIGFyZ3MubGVuZ3RoID09PSAwID8gMCA6IHRvdGFsOwogIH0sCiAgUFJPRFVDVFNVQjogZnVuY3Rpb24gUFJPRFVDVFNVQihvYmopIHsKICAgIHZhciBhcnJheSA9IEZvcm11bGFzLmdldEFycmF5QnlQYXRoKG9iaik7CiAgICByZXR1cm4gRm9ybXVsYXMuUFJPRFVDVC5hcHBseShGb3JtdWxhcywgX3RvQ29uc3VtYWJsZUFycmF5KGFycmF5KSk7CiAgfSwKICBSQU5EOiBmdW5jdGlvbiBSQU5EKCkgewogICAgcmV0dXJuIE1hdGgucmFuZG9tKCk7CiAgfSwKICBST1VORDogZnVuY3Rpb24gUk9VTkQobnVtYmVyLCBkaWdpdCkgewogICAgcmV0dXJuIE1hdGgucm91bmQobnVtYmVyICogTWF0aC5wb3coMTAsIGRpZ2l0KSkgLyBNYXRoLnBvdygxMCwgZGlnaXQpOwogIH0sCiAgU01BTEw6IGZ1bmN0aW9uIFNNQUxMKGFycmF5LCBpbmRleCkgewogICAgYXJyYXkgPSBGb3JtdWxhcy5wYXJzZU51bWJlckFycmF5KGFycmF5KTsKICAgIHJldHVybiBhcnJheS5zb3J0KGZ1bmN0aW9uIChhLCBiKSB7CiAgICAgIHJldHVybiBhIC0gYjsKICAgIH0pW2luZGV4IC0gMV07CiAgfSwKICBTTUFMTFNVQjogZnVuY3Rpb24gU01BTExTVUIob2JqLCBpbmRleCkgewogICAgdmFyIGFycmF5ID0gRm9ybXVsYXMuZ2V0QXJyYXlCeVBhdGgob2JqKTsKICAgIHJldHVybiBGb3JtdWxhcy5TTUFMTChhcnJheSwgaW5kZXgpOwogIH0sCiAgU1FSVDogZnVuY3Rpb24gU1FSVChudW1iZXIpIHsKICAgIG51bWJlciA9IEZvcm11bGFzLnBhcnNlTnVtYmVyKG51bWJlcik7CiAgICByZXR1cm4gTWF0aC5zcXJ0KG51bWJlcik7CiAgfSwKICBTVU06IGZ1bmN0aW9uIFNVTSgpIHsKICAgIHZhciBudW0gPSAwOwogICAgZm9yICh2YXIgX2xlbjUgPSBhcmd1bWVudHMubGVuZ3RoLCBhcmdzID0gbmV3IEFycmF5KF9sZW41KSwgX2tleTUgPSAwOyBfa2V5NSA8IF9sZW41OyBfa2V5NSsrKSB7CiAgICAgIGFyZ3NbX2tleTVdID0gYXJndW1lbnRzW19rZXk1XTsKICAgIH0KICAgIGFyZ3MuZm9yRWFjaChmdW5jdGlvbiAoaXRlbSkgewogICAgICBpdGVtID0gRm9ybXVsYXMucGFyc2VOdW1iZXIoaXRlbSk7CiAgICAgIG51bSArPSBpdGVtOwogICAgfSk7CiAgICByZXR1cm4gbnVtOwogIH0sCiAgU1VNU1VCOiBmdW5jdGlvbiBTVU1TVUIob2JqKSB7CiAgICB2YXIgYXJyYXkgPSBGb3JtdWxhcy5nZXRBcnJheUJ5UGF0aChvYmopOwogICAgcmV0dXJuIEZvcm11bGFzLlNVTS5hcHBseShGb3JtdWxhcywgX3RvQ29uc3VtYWJsZUFycmF5KGFycmF5KSk7CiAgfSwKICBTVU1QUk9EVUNUOiBmdW5jdGlvbiBTVU1QUk9EVUNUKCkgewogICAgZm9yICh2YXIgX2xlbjYgPSBhcmd1bWVudHMubGVuZ3RoLCBhcnJheXMgPSBuZXcgQXJyYXkoX2xlbjYpLCBfa2V5NiA9IDA7IF9rZXk2IDwgX2xlbjY7IF9rZXk2KyspIHsKICAgICAgYXJyYXlzW19rZXk2XSA9IGFyZ3VtZW50c1tfa2V5Nl07CiAgICB9CiAgICBpZiAoIWFycmF5cykgcmV0dXJuIDA7CiAgICB2YXIgbWluID0gTnVtYmVyLk1BWF9WQUxVRTsKICAgIHZhciB0b3RhbCA9IDA7CiAgICBhcnJheXMuZm9yRWFjaChmdW5jdGlvbiAoYXJyYXkpIHsKICAgICAgaWYgKGFycmF5Lmxlbmd0aCA8IG1pbikgewogICAgICAgIG1pbiA9IGFycmF5Lmxlbmd0aDsKICAgICAgfQogICAgfSk7CiAgICBmb3IgKHZhciBpID0gMDsgaSA8IG1pbjsgaSsrKSB7CiAgICAgIHZhciBwID0gMTsKICAgICAgZm9yICh2YXIgaiA9IDA7IGogPCBhcnJheXMubGVuZ3RoOyBqKyspIHsKICAgICAgICBwICo9IEZvcm11bGFzLnBhcnNlTnVtYmVyKGFycmF5c1tqXVtpXSk7CiAgICAgIH0KICAgICAgdG90YWwgKz0gcDsKICAgIH0KICAgIHJldHVybiB0b3RhbDsKICB9LAogIFNVTVBST0RVQ1RTVUI6IGZ1bmN0aW9uIFNVTVBST0RVQ1RTVUIoKSB7CiAgICBmb3IgKHZhciBfbGVuNyA9IGFyZ3VtZW50cy5sZW5ndGgsIGFycmF5cyA9IG5ldyBBcnJheShfbGVuNyksIF9rZXk3ID0gMDsgX2tleTcgPCBfbGVuNzsgX2tleTcrKykgewogICAgICBhcnJheXNbX2tleTddID0gYXJndW1lbnRzW19rZXk3XTsKICAgIH0KICAgIGlmICghYXJyYXlzKSByZXR1cm4gMDsKICAgIHZhciBuZXdBcnJheXMgPSBbXTsKICAgIGFycmF5cy5mb3JFYWNoKGZ1bmN0aW9uIChvYmopIHsKICAgICAgbmV3QXJyYXlzLnB1c2goRm9ybXVsYXMuZ2V0QXJyYXlCeVBhdGgob2JqKSk7CiAgICB9KTsKICAgIHJldHVybiBGb3JtdWxhcy5TVU1QUk9EVUNULmFwcGx5KEZvcm11bGFzLCBuZXdBcnJheXMpOwogIH0sCiAgLyoqDQogICAqIOaWh+acrOWHveaVsA0KICAgKiBAcGFyYW0gYXJncw0KICAgKiBAcmV0dXJucyB7c3RyaW5nfQ0KICAgKiBAY29uc3RydWN0b3INCiAgICovCiAgQ09OQ0FURU5BVEU6IGZ1bmN0aW9uIENPTkNBVEVOQVRFKCkgewogICAgdmFyIHN0ciA9ICIiOwogICAgZm9yICh2YXIgX2xlbjggPSBhcmd1bWVudHMubGVuZ3RoLCBhcmdzID0gbmV3IEFycmF5KF9sZW44KSwgX2tleTggPSAwOyBfa2V5OCA8IF9sZW44OyBfa2V5OCsrKSB7CiAgICAgIGFyZ3NbX2tleThdID0gYXJndW1lbnRzW19rZXk4XTsKICAgIH0KICAgIGFyZ3MuZm9yRWFjaChmdW5jdGlvbiAoaXRlbSkgewogICAgICBpZiAoaXRlbSkgewogICAgICAgIHN0ciArPSBpdGVtOwogICAgICB9CiAgICB9KTsKICAgIHJldHVybiBzdHI7CiAgfSwKICBDSEFSOiBmdW5jdGlvbiBDSEFSKG51bWJlcikgewogICAgbnVtYmVyID0gRm9ybXVsYXMucGFyc2VOdW1iZXIobnVtYmVyKTsKICAgIHJldHVybiBTdHJpbmcuZnJvbUNoYXJDb2RlKG51bWJlcik7CiAgfSwKICBFWEFDVDogZnVuY3Rpb24gRVhBQ1Qoc3RyMSwgc3RyMikgewogICAgcmV0dXJuIHN0cjEgPT09IHN0cjI7CiAgfSwKICBJU0VNUFRZOiBmdW5jdGlvbiBJU0VNUFRZKHN0cikgewogICAgcmV0dXJuIHN0ciA/IHRydWUgOiBmYWxzZTsKICB9LAogIExFRlQ6IGZ1bmN0aW9uIExFRlQoc3RyLCBudW1iZXIpIHsKICAgIG51bWJlciA9IEZvcm11bGFzLnBhcnNlTnVtYmVyKG51bWJlcik7CiAgICByZXR1cm4gc3RyLnN1YnN0cihzdHIsIG51bWJlcik7CiAgfSwKICBMRU46IGZ1bmN0aW9uIExFTihzdHIpIHsKICAgIHJldHVybiBzdHIubGVuZ3RoOwogIH0sCiAgTE9XRVI6IGZ1bmN0aW9uIExPV0VSKHN0cikgewogICAgcmV0dXJuIHN0ci50b0xvd2VyQ2FzZSgpOwogIH0sCiAgTUlEOiBmdW5jdGlvbiBNSUQoc3RyLCBzdGFydCwgbGVuZ3RoKSB7CiAgICByZXR1cm4gc3RyLnN1YnN0cihzdGFydCAtIDEsIGxlbmd0aCk7CiAgfSwKICBSRVBMQUNFOiBmdW5jdGlvbiBSRVBMQUNFKHN0ciwgc3RhcnQsIGxlbmd0aCwgbmV3U3RyKSB7CiAgICB2YXIgcmVwbGFjZVN0ciA9IEZvcm11bGFzLk1JRChzdHIsIHN0YXJ0LCBsZW5ndGgpOwogICAgaWYgKCFyZXBsYWNlU3RyKSByZXR1cm4gc3RyICsgbmV3U3RyOwogICAgcmV0dXJuIHN0ci5yZXBsYWNlKHJlcGxhY2VTdHIsIG5ld1N0cik7CiAgfSwKICBSRVBUOiBmdW5jdGlvbiBSRVBUKHN0ciwgY291bnQpIHsKICAgIHZhciByZXN1bHQgPSAiIjsKICAgIGZvciAodmFyIGkgPSAwOyBpIDwgRm9ybXVsYXMucGFyc2VOdW1iZXIoY291bnQpOyBpKyspIHsKICAgICAgcmVzdWx0ICs9IHN0cjsKICAgIH0KICAgIHJldHVybiByZXN1bHQ7CiAgfSwKICBSSUdIVDogZnVuY3Rpb24gUklHSFQoc3RyLCBsZW5ndGgpIHsKICAgIHJldHVybiBzdHIuc3Vic3RyKHN0ci5sZW5ndGggLSBsZW5ndGgsIHN0ci5sZW5ndGgpOwogIH0sCiAgVVBQRVI6IGZ1bmN0aW9uIFVQUEVSKHN0cikgewogICAgcmV0dXJuIHN0ci50b1VwcGVyQ2FzZSgpOwogIH0sCiAgVEVYVDogZnVuY3Rpb24gVEVYVChudW1iZXIpIHsKICAgIHJldHVybiBudW1iZXIgKyAiIjsKICB9LAogIFZBTFVFOiBmdW5jdGlvbiBWQUxVRShzdHIpIHsKICAgIHJldHVybiBGb3JtdWxhcy5wYXJzZU51bWJlcihzdHIpOwogIH0sCiAgVFJJTTogZnVuY3Rpb24gVFJJTShzdHIpIHsKICAgIHJldHVybiBzdHIudHJpbSgpOwogIH0sCiAgQ09VTlROTzogZnVuY3Rpb24gQ09VTlROTyhmaWVsZCwgY2hhcikgewogICAgaWYgKGZpZWxkID09ICIiKSB7CiAgICAgIHJldHVybiAwOwogICAgfSBlbHNlIGlmIChmaWVsZC5pbmRleE9mKGNoYXIpID4gLTEpIHsKICAgICAgcmV0dXJuIGZpZWxkLnNwbGl0KGNoYXIpLmxlbmd0aDsKICAgIH0gZWxzZSB7CiAgICAgIHJldHVybiAxOwogICAgfQogIH0sCiAgLy/pgLvovpHlh73mlbAKICBBTkQ6IGZ1bmN0aW9uIEFORCgpIHsKICAgIHZhciByZXN1bHQgPSB0cnVlOwogICAgZm9yICh2YXIgX2xlbjkgPSBhcmd1bWVudHMubGVuZ3RoLCBhcmdzID0gbmV3IEFycmF5KF9sZW45KSwgX2tleTkgPSAwOyBfa2V5OSA8IF9sZW45OyBfa2V5OSsrKSB7CiAgICAgIGFyZ3NbX2tleTldID0gYXJndW1lbnRzW19rZXk5XTsKICAgIH0KICAgIGFyZ3MuZm9yRWFjaChmdW5jdGlvbiAoYXJnKSB7CiAgICAgIGlmICghYXJnKSB7CiAgICAgICAgcmVzdWx0ID0gZmFsc2U7CiAgICAgIH0KICAgIH0pOwogICAgcmV0dXJuIHJlc3VsdDsKICB9LAogIEZBTFNFOiBmdW5jdGlvbiBGQUxTRSgpIHsKICAgIHJldHVybiBmYWxzZTsKICB9LAogIElGOiBmdW5jdGlvbiBJRihhcmcsIHRoZW5fdmFsdWUsIG90aGVyd2lzZV92YWx1ZSkgewogICAgcmV0dXJuIGFyZyA/IHRoZW5fdmFsdWUgOiBvdGhlcndpc2VfdmFsdWU7CiAgfSwKICBOT1Q6IGZ1bmN0aW9uIE5PVChhcmcpIHsKICAgIHJldHVybiAhYXJnOwogIH0sCiAgT1I6IGZ1bmN0aW9uIE9SKCkgewogICAgdmFyIHJlc3VsdCA9IGZhbHNlOwogICAgZm9yICh2YXIgX2xlbjEwID0gYXJndW1lbnRzLmxlbmd0aCwgYXJncyA9IG5ldyBBcnJheShfbGVuMTApLCBfa2V5MTAgPSAwOyBfa2V5MTAgPCBfbGVuMTA7IF9rZXkxMCsrKSB7CiAgICAgIGFyZ3NbX2tleTEwXSA9IGFyZ3VtZW50c1tfa2V5MTBdOwogICAgfQogICAgYXJncy5mb3JFYWNoKGZ1bmN0aW9uIChhcmcpIHsKICAgICAgaWYgKGFyZykgewogICAgICAgIHJlc3VsdCA9IHRydWU7CiAgICAgIH0KICAgIH0pOwogICAgcmV0dXJuIHJlc3VsdDsKICB9LAogIFRSVUU6IGZ1bmN0aW9uIFRSVUUoKSB7CiAgICByZXR1cm4gdHJ1ZTsKICB9LAogIFhPUjogZnVuY3Rpb24gWE9SKCkgewogICAgdmFyIGNvdW50ID0gMDsKICAgIGZvciAodmFyIF9sZW4xMSA9IGFyZ3VtZW50cy5sZW5ndGgsIGFyZ3MgPSBuZXcgQXJyYXkoX2xlbjExKSwgX2tleTExID0gMDsgX2tleTExIDwgX2xlbjExOyBfa2V5MTErKykgewogICAgICBhcmdzW19rZXkxMV0gPSBhcmd1bWVudHNbX2tleTExXTsKICAgIH0KICAgIGFyZ3MuZm9yRWFjaChmdW5jdGlvbiAoYXJnKSB7CiAgICAgIGlmICghYXJnKSB7CiAgICAgICAgY291bnQrKzsKICAgICAgfQogICAgfSk7CiAgICByZXR1cm4gY291bnQgIT09IGFyZ3MubGVuZ3RoICYmIGNvdW50ICE9PSAwOwogIH0sCiAgLy/ml7bpl7Tlh73mlbAKICBEQVRFOiBmdW5jdGlvbiBEQVRFKHRpbWVzdGFtcCkgewogICAgdmFyIGRhdGUgPSBGb3JtdWxhcy5wYXJzZURhdGUodGltZXN0YW1wKTsKICAgIGlmIChkYXRlID09ICdJbnZhbGlkIERhdGUnKSB7CiAgICAgIE5vdGlmaWNhdGlvbi5lcnJvcih7CiAgICAgICAgdGl0bGU6ICfplJnor68nLAogICAgICAgIG1lc3NhZ2U6ICfml6DmlYjml6XmnJ8nCiAgICAgIH0pOwogICAgICByZXR1cm47CiAgICB9CiAgICByZXR1cm4gZGF0ZTsKICB9LAogIERBVEVERUxUQTogZnVuY3Rpb24gREFURURFTFRBKHN0cmluZywgZGF5cykgewogICAgdmFyIHRpbWVzdGFtcCA9IG5ldyBEYXRlKHN0cmluZykuZ2V0VGltZSgpOwogICAgdGltZXN0YW1wICs9IGRheXMgKiA4NjQwMDAwMDsKICAgIHJldHVybiBGb3JtdWxhcy5EQVRFKHRpbWVzdGFtcCk7CiAgfSwKICBIQUxGREFZOiBmdW5jdGlvbiBIQUxGREFZKHN0YXJ0RGF0ZSwgZW5kRGF0ZSkgewogICAgdmFyIGhhbGYgPSAwLjU7CiAgICB2YXIgc3RhcnREYXkgPSBGb3JtdWxhcy5zZWNvbmQoRm9ybXVsYXMucGFyc2VTdHJpbmdUb0RhdGUoc3RhcnREYXRlKSk7CiAgICB2YXIgZW5kRGF5ID0gRm9ybXVsYXMuc2Vjb25kKEZvcm11bGFzLnBhcnNlU3RyaW5nVG9EYXRlKGVuZERhdGUpKTsKICAgIGlmIChpc05hTihzdGFydERheSkgfHwgaXNOYU4oZW5kRGF5KSkgewogICAgICByZXR1cm4gIiI7CiAgICB9CiAgICB2YXIgaGFsZkRheSA9IE1hdGguY2VpbCgoZW5kRGF5IC0gc3RhcnREYXkpIC8gNDMyMDApOwogICAgcmV0dXJuIGhhbGZEYXkgKiBoYWxmOwogIH0sCiAgQ09VTlRIT1VSUzogZnVuY3Rpb24gQ09VTlRIT1VSUyhzdGFydERhdGUsIGVuZERhdGUpIHsKICAgIHZhciBzdGFydERheSA9IEZvcm11bGFzLnNlY29uZChGb3JtdWxhcy5wYXJzZVN0cmluZ1RvRGF0ZShzdGFydERhdGUpKTsKICAgIHZhciBlbmREYXkgPSBGb3JtdWxhcy5zZWNvbmQoRm9ybXVsYXMucGFyc2VTdHJpbmdUb0RhdGUoZW5kRGF0ZSkpOwogICAgaWYgKGlzTmFOKHN0YXJ0RGF5KSB8fCBpc05hTihlbmREYXkpKSB7CiAgICAgIHJldHVybiAiIjsKICAgIH0KICAgIHZhciBob3VycyA9IE1hdGguY2VpbCgoZW5kRGF5IC0gc3RhcnREYXkpIC8gMzYwMCk7CiAgICByZXR1cm4gaG91cnM7CiAgfSwKICBEQVk6IGZ1bmN0aW9uIERBWSh0aW1lc3RhbXApIHsKICAgIHZhciBkYXRlID0gRm9ybXVsYXMuREFURSh0aW1lc3RhbXApOwogICAgcmV0dXJuIGRhdGUuZ2V0RGF0ZSgpOwogIH0sCiAgREFZUzogZnVuY3Rpb24gREFZUyhzdGFydERhdGUsIGVuZERhdGUpIHsKICAgIHZhciBzdGFydERheSA9IEZvcm11bGFzLnNlcmlhbChGb3JtdWxhcy5wYXJzZVN0cmluZ1RvRGF0ZShzdGFydERhdGUpKTsKICAgIHZhciBlbmREYXkgPSBGb3JtdWxhcy5zZXJpYWwoRm9ybXVsYXMucGFyc2VTdHJpbmdUb0RhdGUoZW5kRGF0ZSkpOwogICAgaWYgKGlzTmFOKHN0YXJ0RGF5KSB8fCBpc05hTihlbmREYXkpKSB7CiAgICAgIHJldHVybiAiIjsKICAgIH0KICAgIHJldHVybiBlbmREYXkgLSBzdGFydERheTsKICB9LAogIERBWVMzNjA6IGZ1bmN0aW9uIERBWVMzNjAoc3RhcnREYXRlLCBlbmREYXRlLCBtZXRob2QpIHsKICAgIGlmICghc3RhcnREYXRlIHx8ICFlbmREYXRlKSB7CiAgICAgIHJldHVybiAwOwogICAgfQogICAgc3RhcnREYXRlID0gRm9ybXVsYXMucGFyc2VTdHJpbmdUb0RhdGUoc3RhcnREYXRlKTsKICAgIGVuZERhdGUgPSBGb3JtdWxhcy5wYXJzZVN0cmluZ1RvRGF0ZShlbmREYXRlKTsKICAgIHZhciBzbSA9IHN0YXJ0RGF0ZS5nZXRNb250aCgpOwogICAgdmFyIGVtID0gZW5kRGF0ZS5nZXRNb250aCgpOwogICAgdmFyIHNkLCBlZDsKICAgIGlmIChtZXRob2QpIHsKICAgICAgc2QgPSBzdGFydERhdGUuZ2V0RGF0ZSgpID09PSAzMSA/IDMwIDogc3RhcnREYXRlLmdldERhdGUoKTsKICAgICAgZWQgPSBlbmREYXRlLmdldERhdGUoKSA9PT0gMzEgPyAzMCA6IGVuZERhdGUuZ2V0RGF0ZSgpOwogICAgfSBlbHNlIHsKICAgICAgdmFyIHNtZCA9IG5ldyBEYXRlKHN0YXJ0RGF0ZS5nZXRGdWxsWWVhcigpLCBzbSArIDEsIDApLmdldERhdGUoKTsKICAgICAgdmFyIGVtZCA9IG5ldyBEYXRlKGVuZERhdGUuZ2V0RnVsbFllYXIoKSwgZW0gKyAxLCAwKS5nZXREYXRlKCk7CiAgICAgIHNkID0gc3RhcnREYXRlLmdldERhdGUoKSA9PT0gc21kID8gMzAgOiBzdGFydERhdGUuZ2V0RGF0ZSgpOwogICAgICBpZiAoZW5kRGF0ZS5nZXREYXRlKCkgPT09IGVtZCkgewogICAgICAgIGlmIChzZCA8IDMwKSB7CiAgICAgICAgICBlbSsrOwogICAgICAgICAgZWQgPSAxOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICBlZCA9IDMwOwogICAgICAgIH0KICAgICAgfSBlbHNlIHsKICAgICAgICBlZCA9IGVuZERhdGUuZ2V0RGF0ZSgpOwogICAgICB9CiAgICB9CiAgICByZXR1cm4gMzYwICogKGVuZERhdGUuZ2V0RnVsbFllYXIoKSAtIHN0YXJ0RGF0ZS5nZXRGdWxsWWVhcigpKSArIDMwICogKGVtIC0gc20pICsgKGVkIC0gc2QpOwogIH0sCiAgSE9VUjogZnVuY3Rpb24gSE9VUih0aW1lc3RhbXApIHsKICAgIHZhciBkYXRlID0gRm9ybXVsYXMuREFURSh0aW1lc3RhbXApOwogICAgcmV0dXJuIGRhdGUuZ2V0SG91cnMoKTsKICB9LAogIElTT1dFRUtOVU06IGZ1bmN0aW9uIElTT1dFRUtOVU0oZGF0ZSkgewogICAgZGF0ZSA9IEZvcm11bGFzLnBhcnNlU3RyaW5nVG9EYXRlKGRhdGUpOwogICAgZGF0ZS5zZXRIb3VycygwLCAwLCAwKTsKICAgIGRhdGUuc2V0RGF0ZShkYXRlLmdldERhdGUoKSArIDQgLSAoZGF0ZS5nZXREYXkoKSB8fCA3KSk7CiAgICB2YXIgeWVhclN0YXJ0ID0gbmV3IERhdGUoZGF0ZS5nZXRGdWxsWWVhcigpLCAwLCAxKTsKICAgIHJldHVybiBNYXRoLmNlaWwoKChkYXRlIC0geWVhclN0YXJ0KSAvIDg2NDAwMDAwICsgMSkgLyA3KTsKICB9LAogIE1JTlVURTogZnVuY3Rpb24gTUlOVVRFKHRpbWVzdGFtcCkgewogICAgdmFyIGRhdGUgPSBGb3JtdWxhcy5EQVRFKHRpbWVzdGFtcCk7CiAgICByZXR1cm4gZGF0ZS5nZXRNaW51dGVzKCk7CiAgfSwKICBNT05USDogZnVuY3Rpb24gTU9OVEgodGltZXN0YW1wKSB7CiAgICB2YXIgZGF0ZSA9IEZvcm11bGFzLkRBVEUodGltZXN0YW1wKTsKICAgIHJldHVybiBkYXRlLmdldE1vbnRoKCkgKyAxOwogIH0sCiAgTk9XOiBmdW5jdGlvbiBOT1coKSB7CiAgICByZXR1cm4gRm9ybXVsYXMucGFyc2VEYXRlKG5ldyBEYXRlKCkuZ2V0VGltZSgpKTsKICB9LAogIFNFQ09ORDogZnVuY3Rpb24gU0VDT05EKHRpbWVzdGFtcCkgewogICAgdmFyIGRhdGUgPSBGb3JtdWxhcy5EQVRFKHRpbWVzdGFtcCk7CiAgICByZXR1cm4gZGF0ZS5nZXRTZWNvbmRzKCk7CiAgfSwKICBTWVNUSU1FOiBmdW5jdGlvbiBTWVNUSU1FKCkgewogICAgLy90b2RvCiAgfSwKICBUSU1FOiBmdW5jdGlvbiBUSU1FKGhvdXIsIG1pbnV0ZSwgc2Vjb25kKSB7CiAgICBob3VyID0gRm9ybXVsYXMucGFyc2VOdW1iZXIoaG91cik7CiAgICBtaW51dGUgPSBGb3JtdWxhcy5wYXJzZU51bWJlcihtaW51dGUpOwogICAgc2Vjb25kID0gRm9ybXVsYXMucGFyc2VOdW1iZXIoc2Vjb25kKTsKICAgIGhvdXIgPSBob3VyIDwgMCA/IDAgOiBob3VyOwogICAgbWludXRlID0gbWludXRlIDwgMCA/IDAgOiBtaW51dGU7CiAgICBzZWNvbmQgPSBzZWNvbmQgPCAwID8gMCA6IHNlY29uZDsKICAgIHJldHVybiAoMzYwMCAqIGhvdXIgKyA2MCAqIG1pbnV0ZSArIHNlY29uZCkgLyA4NjQwMDsKICB9LAogIFRJTUVTVEFNUDogZnVuY3Rpb24gVElNRVNUQU1QKGRhdGUpIHsKICAgIGlmIChkYXRlKSB7CiAgICAgIGRhdGUgPSBGb3JtdWxhcy5wYXJzZVN0cmluZ1RvRGF0ZShkYXRlKTsKICAgICAgcmV0dXJuIGRhdGUuZ2V0VGltZSgpOwogICAgfQogIH0sCiAgVE9EQVk6IGZ1bmN0aW9uIFRPREFZKCkgewogICAgcmV0dXJuIG5ldyBEYXRlKCkudG9Mb2NhbGVEYXRlU3RyaW5nKCk7CiAgfSwKICBXRUVLTlVNOiBmdW5jdGlvbiBXRUVLTlVNKGRhdGUsIHJldHVyblR5cGUpIHsKICAgIGRhdGUgPSBGb3JtdWxhcy5wYXJzZVN0cmluZ1RvRGF0ZShkYXRlKTsKICAgIGlmIChyZXR1cm5UeXBlID09PSB1bmRlZmluZWQpIHsKICAgICAgcmV0dXJuVHlwZSA9IDE7CiAgICB9CiAgICBpZiAocmV0dXJuVHlwZSA9PT0gMjEpIHJldHVybiBGb3JtdWxhcy5JU09XRUVLTlVNKGRhdGUpOwogICAgdmFyIHdlZWtfc3RhcnQgPSBGb3JtdWxhcy5XRUVLX1NUQVJUU1tyZXR1cm5UeXBlXTsKICAgIHZhciBqYW4gPSBuZXcgRGF0ZShkYXRlLmdldEZ1bGxZZWFyKCksIDAsIDEpOwogICAgdmFyIGluYyA9IGphbi5nZXREYXkoKSA8IHdlZWtfc3RhcnQgPyAxIDogMDsKICAgIGphbiAtPSBNYXRoLmFicyhqYW4uZ2V0RGF5KCkgLSB3ZWVrX3N0YXJ0KSAqIDI0ICogNjAgKiA2MCAqIDEwMDA7CiAgICByZXR1cm4gTWF0aC5mbG9vcigoZGF0ZSAtIGphbikgLyAoMTAwMCAqIDYwICogNjAgKiAyNCkgLyA3ICsgMSkgKyBpbmM7CiAgfSwKICBZRUFSOiBmdW5jdGlvbiBZRUFSKHRpbWVzdGFtcCkgewogICAgdmFyIGRhdGUgPSBuZXcgRGF0ZSh0aW1lc3RhbXApOwogICAgcmV0dXJuIGRhdGUuZ2V0RnVsbFllYXIoKTsKICB9LAogIFVVSUQ6IGZ1bmN0aW9uIFVVSUQoKSB7CiAgICBmdW5jdGlvbiB1NCgpIHsKICAgICAgcmV0dXJuICgoMSArIE1hdGgucmFuZG9tKCkpICogMHgxMDAwMCB8IDApLnRvU3RyaW5nKDE2KS5zdWJzdHJpbmcoMSk7CiAgICB9CiAgICByZXR1cm4gdTQoKSArIHU0KCkgKyAiLSIgKyB1NCgpICsgIi0iICsgdTQoKSArICItIiArIHU0KCkgKyAiLSIgKyB1NCgpICsgdTQoKSArIHU0KCk7CiAgfSwKICAvL+mrmOe6p+WHveaVsDoKICBDVVJSRU5DWTogZnVuY3Rpb24gQ1VSUkVOQ1koeCkgewogICAgdmFyIHRtcCA9IEZvcm11bGFzLnBhcnNlTnVtYmVyKHgpOwogICAgLy9UT0RPIOi9rOaNouS4uuS6uuawkeW4geWkp+WGmQogICAgcmV0dXJuIHV0aWxzLmNvbnZlcnRDdXJyZW5jeSh0bXApOwogIH0sCiAgVEhPVVNBTkQ6IGZ1bmN0aW9uIFRIT1VTQU5EKHgpIHsKICAgIGlmICh4IHx8IHggPT09IDApIHsKICAgICAgeCA9IHggKyAiIjsKICAgIH0KICAgIC8vbGV0IHRtcCA9IEZvcm11bGFzLnBhcnNlTnVtYmVyKHgpOwogICAgdmFyIHJlZyA9IC8oXGQpKD89KD86XGR7M30pK1xiKS9nOwogICAgcmV0dXJuIHgucmVwbGFjZShyZWcsICckMSwnKTsKICB9LAogIC8qKg0KICAgKiDlvILluLjnu5/kuIDlpITnkIYNCiAgICogQHBhcmFtIHsqfSBlcnINCiAgICogQHBhcmFtIHsqfSB0eXBlTmFtZQ0KICAgKi8KICB0aHJvd0VycjogZnVuY3Rpb24gdGhyb3dFcnIoZXJyLCB0eXBlTmFtZSkgewogICAgTm90aWZpY2F0aW9uLmVycm9yKHsKICAgICAgdGl0bGU6IHR5cGVOYW1lICsgJ+WFrOW8j+i/kOeul+mUmeivrycsCiAgICAgIG1lc3NhZ2U6IGVycgogICAgfSk7CiAgICBpZiAoaXNOYU4oc3RhcnREYXkpIHx8IGlzTmFOKGVuZERheSkpIHsKICAgICAgcmV0dXJuICIiOwogICAgfQogICAgdGhyb3cgZXJyOwogIH0sCiAgLyoqDQogICAqIOexu+Wei+WIpOaWrQ0KICAgKiBAcGFyYW0geyp9IHZhbHVlDQogICAqIEBwYXJhbSB7Kn0gdHlwZQ0KICAgKi8KICB0eXBlb2ZUeXBlOiBmdW5jdGlvbiB0eXBlb2ZUeXBlKHZhbHVlLCB0eXBlKSB7CiAgICBpZiAodmFsdWUgIT09ICIiICYmIF90eXBlb2YodmFsdWUpICE9IHR5cGUpIHsKICAgICAgdGhyb3cgIuS8oOWFpeWPguaVsOW/hemhu+aYryIgKyB0eXBlICsgIuexu+WeiyI7CiAgICB9CiAgfSwKICBwYXJzZU51bWJlcjogZnVuY3Rpb24gcGFyc2VOdW1iZXIobnVtYmVyKSB7CiAgICBudW1iZXIgPSBwYXJzZUZsb2F0KG51bWJlcik7CiAgICBpZiAoaXNOYU4obnVtYmVyKSkgcmV0dXJuIDA7CiAgICByZXR1cm4gbnVtYmVyOwogIH0sCiAgcGFyc2VOdW1iZXJBcnJheTogZnVuY3Rpb24gcGFyc2VOdW1iZXJBcnJheShhcnJheSkgewogICAgcmV0dXJuIGFycmF5Lm1hcChmdW5jdGlvbiAoaXRlbSkgewogICAgICByZXR1cm4gRm9ybXVsYXMucGFyc2VOdW1iZXIoaXRlbSk7CiAgICB9KTsKICB9LAogIHBhcnNlRGF0ZTogZnVuY3Rpb24gcGFyc2VEYXRlKHRpbWVzdGFtcCkgewogICAgdGltZXN0YW1wID0gRm9ybXVsYXMucGFyc2VOdW1iZXIodGltZXN0YW1wKTsKICAgIHJldHVybiBuZXcgRGF0ZSh0aW1lc3RhbXApOwogIH0sCiAgcGFyc2VTdHJpbmdUb0RhdGU6IGZ1bmN0aW9uIHBhcnNlU3RyaW5nVG9EYXRlKHN0cikgewogICAgaWYgKCFzdHIpIHsKICAgICAgcmV0dXJuIG5ldyBEYXRlKCIiKTsKICAgIH0KICAgIHJldHVybiBuZXcgRGF0ZShEYXRlLnBhcnNlKHN0ci5yZXBsYWNlKC8tL2csICIvIikpKTsKICB9LAogIGdldEFycmF5QnlQYXRoOiBmdW5jdGlvbiBnZXRBcnJheUJ5UGF0aChvYmopIHsKICAgIHZhciBhcnJheSA9IFtdOwogICAgaWYgKCFvYmouZGF0YSkgcmV0dXJuIGFycmF5OwogICAgb2JqLmRhdGEuZm9yRWFjaChmdW5jdGlvbiAoaXRlbSkgewogICAgICBhcnJheS5wdXNoKEZvcm11bGFzLnBhcnNlTnVtYmVyKGl0ZW1bb2JqLnBhdGhdKSk7CiAgICB9KTsKICAgIHJldHVybiBhcnJheTsKICB9LAogIHNlcmlhbDogZnVuY3Rpb24gc2VyaWFsKGRhdGUpIHsKICAgIHZhciBhZGRPbiA9IGRhdGUgPiAtMjIwMzg5MTIwMDAwMCA/IDIgOiAxOwogICAgcmV0dXJuIE1hdGguY2VpbCgoZGF0ZSAtIEZvcm11bGFzLmQxOTAwKSAvIDg2NDAwMDAwKSArIGFkZE9uOwogIH0sCiAgc2Vjb25kOiBmdW5jdGlvbiBzZWNvbmQoZGF0ZSkgewogICAgdmFyIGFkZE9uID0gZGF0ZSA+IC0yMjAzODkxMjAwMDAwID8gMiA6IDE7CiAgICByZXR1cm4gTWF0aC5jZWlsKChkYXRlIC0gRm9ybXVsYXMuZDE5MDApIC8gMTAwMCkgKyBhZGRPbjsKICB9Cn07CkZvcm11bGFzLmluc3RhbGwgPSBmdW5jdGlvbiAoVnVlKSB7CiAgVnVlLnByb3RvdHlwZS4kRm9ybXVsYXMgPSBGb3JtdWxhczsKfTsKZXhwb3J0IGRlZmF1bHQgRm9ybXVsYXM7"},null]}