{"remainingRequest":"D:\\jenkins\\workspace\\dataShare-fvue\\node_modules\\vue-loader\\lib\\index.js??vue-loader-options!D:\\jenkins\\workspace\\dataShare-fvue\\src\\components\\eipControl\\EipTreeselect.vue?vue&type=script&lang=js","dependencies":[{"path":"D:\\jenkins\\workspace\\dataShare-fvue\\src\\components\\eipControl\\EipTreeselect.vue","mtime":1733309211938},{"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:Ly8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KDQppbXBvcnQgdXRpbHMgZnJvbSAiQC91dGlscy5qcyI7DQppbXBvcnQgaG90ZW50VXRpbHMgZnJvbSAiQC9ob3RlbnQtdWktdXRpbC5qcyI7DQppbXBvcnQgc3ViX3Bpb19taXhpbiBmcm9tICJAL3N1Yi1wZXJtaXNzaW9uLW1peGluLmpzIjsNCmltcG9ydCByZXEgZnJvbSAiQC9yZXF1ZXN0LmpzIjsNCmV4cG9ydCBkZWZhdWx0IHsNCiAgbmFtZTogImVpcC10cmVlc2VsZWN0IiwNCiAgcHJvcHM6IFsNCiAgICAidmFsaWRhdGUiLA0KICAgICJ2YWx1ZSIsDQogICAgIm5hbWUiLA0KICAgICJwZXJtaXNzaW9uIiwNCiAgICAibXVsdGlwbGUiLA0KICAgICJzZWxlY3RsaXN0IiwNCiAgICAiZ2FuZ2VkIiwNCiAgICAiZmlsdGVyYWJsZSIsDQogICAgImFsbG93Q3JlYXRlIiwNCiAgICAic3R5bGVzIiwNCiAgICAiY3VzdG9tUXVlcnkiDQogIF0sDQogIG1peGluczogW3N1Yl9waW9fbWl4aW5dLC8v5re35YWl5pa55byP5byV5YWl6KGo5Y2V57uE5Lu25Lit5YWs5YWx5bGe5oCn77yM5aSE55CG5a2Q6KGo44CB5a2Z6KGo6KGM5YaF6IGU5Yqo77yI5YiH6Z2i5L+u5pS5cGVybWlzc2lvbl9zdWJfc3Vi77yJDQogIGRhdGEoKSB7DQogICAgcmV0dXJuIHsNCiAgICAgIGNvbmZpZzoge30sDQogICAgICB0b3RhbDogMTAsDQogICAgICBwYWdlU2l6ZTogNSwNCiAgICAgIGN1cnJlbnRQYWdlOiAxLA0KICAgICAgb3B0aW9uczogW10sDQogICAgICB0ZW1wb3B0aW9uczogW10sDQogICAgICB2YWx1ZURlc2M6ICIiLA0KICAgICAgdGFnRm9ybWF0VmFsdWU6IFtdLA0KICAgICAgZGVmYXVsdFByb3BzOiB7DQogICAgICAgIGNoaWxkcmVuOiAiY2hpbGRyZW4iLA0KICAgICAgICBsYWJlbDogInZhbHVlIg0KICAgICAgfSwNCiAgICAgIG5ld1ZhbGlkYXRlOiBudWxsLA0KICAgICAgY3VyU3ViSW5kZXg6IG51bGwNCiAgICB9Ow0KICB9LA0KICB3YXRjaDogew0KICAgIHZhbHVlRGVzYzogZnVuY3Rpb24obmV3VmFsLCBvbGRWYWwpIHsNCiAgICAgIGlmIChuZXdWYWwgJiYgbmV3VmFsICE9IG9sZFZhbCkgew0KICAgICAgICB0aGlzLnRhZ0Zvcm1hdFZhbHVlID0gbmV3VmFsLnNwbGl0KCIsIik7DQogICAgICB9DQogICAgfQ0KICB9LA0KICBjb21wdXRlZDogew0KICAgIGlucHV0VmFsOiB7DQogICAgICBnZXQoKSB7DQogICAgICAgIGlmICh0aGlzLm11bHRpcGxlKSB7DQogICAgICAgICAgaWYgKHRoaXMudmFsdWUpIHsNCiAgICAgICAgICAgIGlmICh0aGlzLiRyZWZzLnRyZWVzZWxlY3RFbFRyZWUpIHsNCiAgICAgICAgICAgICAgbGV0IGNoZWNrZWROb2RlcyA9IHRoaXMuJHJlZnMudHJlZXNlbGVjdEVsVHJlZS5nZXRDaGVja2VkTm9kZXMoKTsNCiAgICAgICAgICAgICAgZm9yIChsZXQgZGF0YSBvZiBjaGVja2VkTm9kZXMpIHsNCiAgICAgICAgICAgICAgICBpZiAoIXRoaXMudmFsdWUuc3BsaXQoIiwiKS5pbmNsdWRlcyhkYXRhLmtleSkpIHsNCiAgICAgICAgICAgICAgICAgIHRoaXMuJHJlZnMudHJlZXNlbGVjdEVsVHJlZS5zZXRDaGVja2VkKGRhdGEsIGZhbHNlKTsNCiAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgIH0NCiAgICAgICAgICAgIH0NCiAgICAgICAgICAgIHJldHVybiB0aGlzLnZhbHVlLnNwbGl0KCIsIik7DQogICAgICAgICAgfSBlbHNlIHsNCiAgICAgICAgICAgIGlmICh0aGlzLiRyZWZzLnRyZWVzZWxlY3RFbFRyZWUpIHsNCiAgICAgICAgICAgICAgbGV0IGNoZWNrZWROb2RlcyA9IHRoaXMuJHJlZnMudHJlZXNlbGVjdEVsVHJlZS5nZXRDaGVja2VkTm9kZXMoKTsNCiAgICAgICAgICAgICAgZm9yIChsZXQgZGF0YSBvZiBjaGVja2VkTm9kZXMpIHsNCiAgICAgICAgICAgICAgICB0aGlzLiRyZWZzLnRyZWVzZWxlY3RFbFRyZWUuc2V0Q2hlY2tlZChkYXRhLCBmYWxzZSk7DQogICAgICAgICAgICAgIH0NCiAgICAgICAgICAgIH0NCiAgICAgICAgICAgIHJldHVybiBbXTsNCiAgICAgICAgICB9DQogICAgICAgIH0gZWxzZSBpZiAodGhpcy52YWx1ZSB8fCB0aGlzLnZhbHVlID09PSAwKSB7DQogICAgICAgICAgcmV0dXJuIHRoaXMudmFsdWUgKyAiIjsNCiAgICAgICAgfSBlbHNlIHsNCiAgICAgICAgICByZXR1cm4gdGhpcy52YWx1ZTsNCiAgICAgICAgfQ0KICAgICAgfSwNCiAgICAgIHNldCh2YWwpIHsNCiAgICAgICAgaWYgKHRoaXMubXVsdGlwbGUpIHsNCiAgICAgICAgICB0aGlzLiRlbWl0KCJpbnB1dCIsIHZhbC5qb2luKCIsIikpOw0KICAgICAgICB9IGVsc2Ugew0KICAgICAgICAgIHRoaXMuJGVtaXQoImlucHV0IiwgdmFsKTsNCiAgICAgICAgICBpZiAoIXRoaXMubXVsdGlwbGUgJiYgdmFsKSB7DQogICAgICAgICAgICAvL+WIpOaWreWvueivneahhuaYr+WQpue7keWumuS6huWFs+iBlOafpeivog0KICAgICAgICAgICAgaWYodGhpcy5jdXN0b21RdWVyeSYmdGhpcy5jdXN0b21RdWVyeS5jdXN0UXVlcnlKc29uJiZ0aGlzLmN1c3RvbVF1ZXJ5LmN1c3RRdWVyeUpzb24ubGVuZ3RoPjApew0KICAgICAgICAgICAgICBsZXQgY3VzdFF1ZXJ5SnNvbiA9IHRoaXMuY3VzdG9tUXVlcnkuY3VzdFF1ZXJ5SnNvbjsNCiAgICAgICAgICAgICAgZm9yKGxldCBpPTA7aTxjdXN0UXVlcnlKc29uLmxlbmd0aDtpKyspew0KICAgICAgICAgICAgICAgIGlmKGN1c3RRdWVyeUpzb25baV0uY29uZGl0aW9uZmllbGQubGVuZ3RoPjApew0KICAgICAgICAgICAgICAgICAgdGhpcy5kb1F1ZXJ5KGN1c3RRdWVyeUpzb25baV0pOw0KICAgICAgICAgICAgICAgIH1lbHNlew0KICAgICAgICAgICAgICAgICAgY29uc29sZS5lcnJvcigiWyIrY3VzdFF1ZXJ5SnNvbltpXS5jb21tZW50KyJd5YWz6IGU5p+l6K+i5Y+W5YC85Y+C5pWw5pyq57uR5a6a6KGo5Y2V5a2X5q61Iik7DQogICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICB9DQogICAgICAgICAgICB9DQogICAgICAgICAgfQ0KICAgICAgICB9DQogICAgICB9DQogICAgfSwNCiAgICBpbnB1dFdyaXRlYWJsZTogZnVuY3Rpb24oKSB7DQogICAgICByZXR1cm4gdXRpbHMuZ2V0V3JpdGVhYmxlKHRoaXMucGVybWlzc2lvbl9zdWIpOw0KICAgIH0sDQogICAgaW5wdXRWYWxpZGF0ZTogZnVuY3Rpb24oKSB7DQogICAgICBpZiAodGhpcy5uZXdWYWxpZGF0ZSkgew0KICAgICAgICByZXR1cm4gdGhpcy5uZXdWYWxpZGF0ZTsNCiAgICAgIH0NCiAgICAgIHZhciB2YWxpZGF0ZU9iaiA9IHRoaXMuJHN0b3JlLnN0YXRlLmluZGV4LnZhbGlkYXRlOw0KICAgICAgcmV0dXJuIHV0aWxzLmFkZFJlcXVpcmVkT3JOb3QoDQogICAgICAgIHRoaXMucGVybWlzc2lvbl9zdWIsDQogICAgICAgIHRoaXMudmFsaWRhdGUsDQogICAgICAgIHZhbGlkYXRlT2JqLA0KICAgICAgICB0aGlzDQogICAgICApOw0KICAgIH0sDQogICAgaW5wdXROYW1lOiBmdW5jdGlvbigpIHsNCiAgICAgIGxldCBsYWJlbGRlc2MgPSAiIjsNCiAgICAgIGlmICgNCiAgICAgICAgdGhpcy4kc2xvdHMgJiYNCiAgICAgICAgdGhpcy4kc2xvdHMubGFiZWxkZXNjICYmDQogICAgICAgIHRoaXMuJHNsb3RzLmxhYmVsZGVzY1swXS5jaGlsZHJlbiAmJg0KICAgICAgICB0aGlzLiRzbG90cy5sYWJlbGRlc2NbMF0uY2hpbGRyZW5bMF0udGV4dA0KICAgICAgKSB7DQogICAgICAgIGxhYmVsZGVzYyA9IHRoaXMuJHNsb3RzLmxhYmVsZGVzY1swXS5jaGlsZHJlblswXS50ZXh0Ow0KICAgICAgICByZXR1cm4gdGhpcy5uYW1lID8gdGhpcy5uYW1lIDogdXRpbHMuZ2V0TmFtZSgpICsgIi0iICsgbGFiZWxkZXNjOw0KICAgICAgfSBlbHNlIHsNCiAgICAgICAgcmV0dXJuIHRoaXMubmFtZSA/IHRoaXMubmFtZSA6IHV0aWxzLmdldE5hbWUoKTsNCiAgICAgIH0NCiAgICB9DQogIH0sDQogIG1vdW50ZWQoKSB7DQogICAgdGhpcy5vcHRpb25zID0gdGhpcy5zZWxlY3RsaXN0ID8gdGhpcy5zZWxlY3RsaXN0IDogW107DQogICAgY29uc3QgX21lID0gdGhpczsNCiAgICBsZXQgeyBzdWJTY29wZUVsIH0gPSBob3RlbnRVdGlscy5nZXRTdWJTY29wZUVsQW5kSW5kZXgoX21lLiRlbCk7DQogICAgaWYgKHN1YlNjb3BlRWwpIHsNCiAgICAgIHRoaXMuY3VyU3ViSW5kZXggPSBzdWJTY29wZUVsLmRhdGFzZXRbImluZGV4Il07DQogICAgfQ0KICAgIGNvbnN0IGdhbmdlZCA9IHRoaXMuZ2FuZ2VkOw0KICAgIC8v5Yik5pat5piv5ZCm5pyJ5Y+C5pWw57uR5a6aDQogICAgaWYgKA0KICAgICAgZ2FuZ2VkICYmDQogICAgICBnYW5nZWQuYmluZCAmJg0KICAgICAgSlNPTi5zdHJpbmdpZnkoZ2FuZ2VkLmJpbmQpICE9ICJ7fSIgJiYNCiAgICAgIHRoaXMuY29uZmlnDQogICAgKSB7DQogICAgICBjb25zdCBiaW5kID0gZ2FuZ2VkLmJpbmQ7DQogICAgICBjb25zdCBmb3JtVm0gPSB1dGlscy5nZXRPbmxpbmVGb3JtSW5zdGFuY2UoX21lKTsNCiAgICAgIGZvciAodmFyIGtleSBpbiBiaW5kKSB7DQogICAgICAgIGxldCBwYXJhbURvbSA9IG51bGw7DQogICAgICAgIGlmICh0aGlzLmN1clN1YkluZGV4ID09IG51bGwpIHsNCiAgICAgICAgICBwYXJhbURvbSA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoJ1ttb2RlbC1uYW1lPSInICsgYmluZFtrZXldICsgJyJdJyk7DQogICAgICAgIH0gZWxzZSB7DQogICAgICAgICAgbGV0IHN1YkZpbGVkTmFtZSA9IGJpbmRba2V5XS5zcGxpdCgiLiIpWzNdOw0KICAgICAgICAgIHBhcmFtRG9tID0gc3ViU2NvcGVFbC5xdWVyeVNlbGVjdG9yKA0KICAgICAgICAgICAgJ1ttb2RlbC1uYW1lPSJpdGVtLicgKyBzdWJGaWxlZE5hbWUgKyAnIl0nDQogICAgICAgICAgKTsNCiAgICAgICAgfQ0KICAgICAgICBpZiAocGFyYW1Eb20gJiYgcGFyYW1Eb20uX192dWVfXykgew0KICAgICAgICAgIHBhcmFtRG9tLl9fdnVlX18uJHdhdGNoKCJ2YWx1ZSIsIGZ1bmN0aW9uKG5ld1ZhbCwgb2xkVmFsKSB7DQogICAgICAgICAgICBpZiAobmV3VmFsICE9IG9sZFZhbCkgew0KICAgICAgICAgICAgICBfbWUuc2VhcmNoKGZhbHNlLCBuZXdWYWwsIHRydWUpOw0KICAgICAgICAgICAgfQ0KICAgICAgICAgIH0pOw0KICAgICAgICB9DQogICAgICB9DQogICAgfQ0KICB9LA0KICBjcmVhdGVkKCkgew0KICAgIHRoaXMub3B0aW9ucyA9IHRoaXMuc2VsZWN0bGlzdCA/IHRoaXMuc2VsZWN0bGlzdCA6IFtdOw0KICAgIC8v5Yqo5oCB5Lyg5YWlDQogICAgaWYgKA0KICAgICAgdGhpcy5nYW5nZWQgJiYNCiAgICAgIHRoaXMuZ2FuZ2VkLmFsaWFzICYmDQogICAgICB0aGlzLm9wdGlvbnMubGVuZ3RoIDwgMSAmJg0KICAgICAgdGhpcy5nYW5nZWQNCiAgICApIHsNCiAgICAgIGNvbnN0IHRoaXNfID0gdGhpczsNCiAgICAgIHRoaXNfLiRzdG9yZS5kaXNwYXRjaCgiZm9ybS9nZXRCeUFsaWFzQ3EiLCB0aGlzXy5nYW5nZWQuYWxpYXMpLnRoZW4ocmVzID0+IHsNCiAgICAgICAgdGhpc18uY29uZmlnID0gcmVzOw0KICAgICAgICBsZXQgb2JqSXNFbXB0eSA9IHRoaXNfLm9iaklzRW1wdHkodGhpc18uZ2FuZ2VkLmJpbmQpOw0KICAgICAgICBpZiAodGhpc18uZ2FuZ2VkICYmICFvYmpJc0VtcHR5KSB7DQogICAgICAgICAgdGhpc18uaGFuZGVsSW5pdEdhbmdlZHNlYXJjaCgpOw0KICAgICAgICB9IGVsc2Ugew0KICAgICAgICAgIHRoaXNfLnNlYXJjaChmYWxzZSwgIiIpOw0KICAgICAgICB9DQogICAgICB9KTsNCiAgICB9DQogICAgdGhpcy4kdmFsaWRhdG9yID0gdGhpcy4kcm9vdC4kdmFsaWRhdG9yOw0KICB9LA0KICBtZXRob2RzOiB7DQogICAgLy/liKTmlq3lr7nosaHph4zpnaLnmoTlgLzmmK/lkKbkuLrnqboNCiAgICBvYmpJc0VtcHR5KG9iail7DQogICAgICBmb3IobGV0IGtleSBpbiBvYmopew0KICAgICAgICBpZihvYmpba2V5XSl7DQogICAgICAgICAgcmV0dXJuIGZhbHNlOw0KICAgICAgICB9DQogICAgICB9DQogICAgICByZXR1cm4gdHJ1ZTsNCiAgICB9LA0KICAgIGFzeW5jIGRvUXVlcnkocGFyYW0pew0KICAgICAgbGV0IHBhcmFtTG9hZERhdGEgPSBbXTsNCiAgICAgIGNvbnN0IHBJbnN0ID0gdXRpbHMuZ2V0T25saW5lRm9ybUluc3RhbmNlKHRoaXMpOw0KICAgICAgLy/ojrflj5blhbPogZTmn6Xor6Lnu5HlrprnmoTooajljZXlj4LmlbANCiAgICAgIGZvcihsZXQgaT0wO2k8cGFyYW0uY29uZGl0aW9uZmllbGQubGVuZ3RoO2krKyl7DQogICAgICAgIGlmKHBhcmFtLmNvbmRpdGlvbmZpZWxkW2ldLmZpZWxkUGF0aCE9IiIpew0KICAgICAgICAgIGxldCBiaW5kVmFsID0gdXRpbHMuZ2V0VmFsdWVCeVBhdGgocEluc3QsIHBhcmFtLmNvbmRpdGlvbmZpZWxkW2ldLmZpZWxkUGF0aCwgbnVsbCk7DQogICAgICAgICAgbGV0IG9iaiA9IHtrZXk6IHBhcmFtLmNvbmRpdGlvbmZpZWxkW2ldLmZpZWxkLCB2YWx1ZTogYmluZFZhbH07DQogICAgICAgICAgcGFyYW1Mb2FkRGF0YS5wdXNoKG9iaik7DQogICAgICAgIH0NCiAgICAgIH0NCg0KICAgICAgbGV0IHF1ZXJ5VXJsID0gcGFyYW0uZHNUeXBlPT0iZGF0YVNvdXJjZSI/IiR7Zm9ybX0vZm9ybS9jdXN0b21RdWVyeS92MS9kb1F1ZXJ5P2FsaWFzPSIrcGFyYW0uYWxpYXMrIiZwYWdlPTEiOnBhcmFtLnVybDsNCiAgICAgIGxldCByZXF1ZXN0TWV0aG9kID0iUE9TVCI7DQogICAgICAvL+WmguaenOWFs+iBlOaVsOaNruWIl+ihqOafpeivouaVsOaNruS4jeaYr+aVsOaNrua6kOWImeivt+axguaWueazleS4unJlc3RmdWzphY3nva7nmoTor7fmsYLmlrnlvI8NCiAgICAgIGlmKHBhcmFtLmRzVHlwZSE9J2RhdGFTb3VyY2UnKXsNCiAgICAgICAgICByZXF1ZXN0TWV0aG9kID0gcGFyYW0ucmVxdWVzdFR5cGU7DQogICAgICB9DQogICAgICAvL+afpeivouaVsOaNrg0KICAgICAgcmVxLnJlcXVlc3Qoe3VybDogcXVlcnlVcmwsbWV0aG9kOiByZXF1ZXN0TWV0aG9kLGRhdGE6cGFyYW1Mb2FkRGF0YX0pLnRoZW4ocmVzID0+IHsNCiAgICAgICAgLy/liKTmlq3mmK/lkKbmnInlhbPogZTmn6Xor6LmlbDmja7ov5Tlm54NCiAgICAgICAgaWYocmVzLmRhdGEucm93cy5sZW5ndGg+MCl7DQogICAgICAgICAgLy/ojrflj5blhbPogZTmn6Xor6Lov5Tlm57nmoTooajljZXlj4LmlbANCiAgICAgICAgICBmb3IobGV0IGk9MDtpPHBhcmFtLnJlc3VsdGZpZWxkLmxlbmd0aDtpKyspew0KICAgICAgICAgICAgaWYocGFyYW0ucmVzdWx0ZmllbGRbaV0uZmllbGRQYXRoIT0iIil7DQogICAgICAgICAgICAgIGxldCB2YWwgPSAiIjsNCiAgICAgICAgICAgICAgZm9yKGxldCBqID0wO2o8cmVzLmRhdGEucm93cy5sZW5ndGg7aisrKXsNCiAgICAgICAgICAgICAgICBpZihyZXMuZGF0YS5yb3dzW2pdW3BhcmFtLnJlc3VsdGZpZWxkW2ldLmNvbW1lbnRdKXsNCiAgICAgICAgICAgICAgICAgIHZhbCA9IHZhbCArIHJlcy5kYXRhLnJvd3Nbal1bcGFyYW0ucmVzdWx0ZmllbGRbaV0uY29tbWVudF0rIiwiOw0KICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICB2YWwgPSB2YWwuc3Vic3RyaW5nKDAsdmFsLmxlbmd0aC0xKTsNCiAgICAgICAgICAgICAgLy/otYvlgLznu5nnu5HlrprnmoTlrZfmrrUNCiAgICAgICAgICAgICAgdXRpbHMuc2V0VmFsdWVCeVBhdGgocEluc3QsIHBhcmFtLnJlc3VsdGZpZWxkW2ldLmZpZWxkUGF0aCx2YWwsIG51bGwpOw0KICAgICAgICAgICAgfQ0KICAgICAgICAgIH0NCiAgICAgICAgfWVsc2V7DQogICAgICAgICAgLy/ojrflj5blhbPogZTmn6Xor6Lov5Tlm57nmoTooajljZXlj4LmlbANCiAgICAgICAgICBmb3IobGV0IGk9MDtpPHBhcmFtLnJlc3VsdGZpZWxkLmxlbmd0aDtpKyspew0KICAgICAgICAgICAgaWYocGFyYW0ucmVzdWx0ZmllbGRbaV0uZmllbGRQYXRoIT0iIil7DQogICAgICAgICAgICAgIC8v6LWL5YC857uZ57uR5a6a55qE5a2X5q61DQogICAgICAgICAgICAgIHV0aWxzLnNldFZhbHVlQnlQYXRoKHBJbnN0LCBwYXJhbS5yZXN1bHRmaWVsZFtpXS5maWVsZFBhdGgsIiIsIG51bGwpOw0KICAgICAgICAgICAgfQ0KICAgICAgICAgIH0NCiAgICAgICAgfQ0KICAgICAgfSk7DQogICAgfSwNCiAgICBoYW5kZWxJbml0R2FuZ2Vkc2VhcmNoOiBmdW5jdGlvbigpIHsNCiAgICAgIGNvbnN0IF9tZSA9IHRoaXM7DQogICAgICBsZXQgeyBzdWJTY29wZUVsIH0gPSBob3RlbnRVdGlscy5nZXRTdWJTY29wZUVsQW5kSW5kZXgoX21lLiRlbCk7DQogICAgICBpZiAoc3ViU2NvcGVFbCkgew0KICAgICAgICB0aGlzLmN1clN1YkluZGV4ID0gc3ViU2NvcGVFbC5kYXRhc2V0WyJpbmRleCJdOw0KICAgICAgfQ0KICAgICAgY29uc3QgZ2FuZ2VkID0gdGhpcy5nYW5nZWQ7DQogICAgICAvL+WIpOaWreaYr+WQpuacieWPguaVsOe7keWumg0KICAgICAgaWYgKGdhbmdlZCAmJiBKU09OLnN0cmluZ2lmeShnYW5nZWQuYmluZCkgIT0gInt9IiAmJiB0aGlzLmNvbmZpZykgew0KICAgICAgICBjb25zdCBiaW5kID0gZ2FuZ2VkLmJpbmQ7DQogICAgICAgIGNvbnN0IGZvcm1WbSA9IHV0aWxzLmdldE9ubGluZUZvcm1JbnN0YW5jZShfbWUpOw0KICAgICAgICBpZiAodGhpcy5jdXJTdWJJbmRleCA9PSBudWxsKSB7DQogICAgICAgICAgZm9yICh2YXIga2V5IGluIGJpbmQpIHsNCiAgICAgICAgICAgIGNvbnN0IHBJbnN0ID0gdXRpbHMuZ2V0T25saW5lRm9ybUluc3RhbmNlKF9tZSk7DQogICAgICAgICAgICBjb25zdCB2YWwgPSB1dGlscy5nZXRWYWx1ZUJ5UGF0aChwSW5zdCwgYmluZFtrZXldKTsNCiAgICAgICAgICAgIF9tZS5zZWFyY2goZmFsc2UsIHZhbCk7DQogICAgICAgICAgfQ0KICAgICAgICB9IGVsc2Ugew0KICAgICAgICAgIGZvciAodmFyIGtleSBpbiBiaW5kKSB7DQogICAgICAgICAgICBsZXQgc3ViRmlsZWROYW1lID0gYmluZFtrZXldLnNwbGl0KCIuIilbM107DQogICAgICAgICAgICBsZXQgcGFyYW1Eb20gPSBzdWJTY29wZUVsLnF1ZXJ5U2VsZWN0b3IoDQogICAgICAgICAgICAgICdbbW9kZWwtbmFtZT0iaXRlbS4nICsgc3ViRmlsZWROYW1lICsgJyJdJw0KICAgICAgICAgICAgKTsNCiAgICAgICAgICAgIGlmIChwYXJhbURvbSAmJiBwYXJhbURvbS5fX3Z1ZV9fICYmIHBhcmFtRG9tLl9fdnVlX18udmFsdWUpIHsNCiAgICAgICAgICAgICAgbGV0IG5ld1ZhbCA9IHBhcmFtRG9tLl9fdnVlX18udmFsdWUgKyAiIjsNCiAgICAgICAgICAgICAgX21lLnNlYXJjaChmYWxzZSwgbmV3VmFsKTsNCiAgICAgICAgICAgIH0NCiAgICAgICAgICB9DQogICAgICAgIH0NCiAgICAgIH0NCiAgICB9LA0KICAgIGNsZWFyKCkgew0KICAgICAgaWYgKHRoaXMubXVsdGlwbGUpIHsNCiAgICAgICAgdGhpcy50ZW1wb3B0aW9ucyA9IFtdOw0KICAgICAgICB0aGlzLiRuZXh0VGljayhmdW5jdGlvbigpIHsNCiAgICAgICAgICB0aGlzLiRyZWZzLnRyZWVzZWxlY3RFbFRyZWUuc2V0Q2hlY2tlZEtleXMoW10sIHRydWUpOw0KICAgICAgICB9KTsNCiAgICAgIH0gZWxzZSB7DQogICAgICAgIHRoaXMuJHJlZnMudHJlZXNlbGVjdEVsVHJlZS5zZXRDdXJyZW50Tm9kZSh7fSk7DQogICAgICB9DQogICAgfSwNCiAgICBjbGlja05hdGl2ZTogZnVuY3Rpb24oKSB7DQogICAgICAvL+WKqOaAgeS8oOWFpQ0KICAgICAgaWYgKHRoaXMuZ2FuZ2VkICYmIHRoaXMuZ2FuZ2VkLmFsaWFzICYmIHRoaXMub3B0aW9ucy5sZW5ndGggPCAxKSB7DQogICAgICAgIHRoaXMuJHN0b3JlDQogICAgICAgICAgLmRpc3BhdGNoKCJmb3JtL2dldEJ5QWxpYXNDcSIsIHRoaXMuZ2FuZ2VkLmFsaWFzKQ0KICAgICAgICAgIC50aGVuKHJlcyA9PiB7DQogICAgICAgICAgICB0aGlzLmNvbmZpZyA9IHJlczsNCiAgICAgICAgICAgIHRoaXMuc2VhcmNoKCk7DQogICAgICAgICAgfSk7DQogICAgICB9DQogICAgfSwNCiAgICBzZWxlY3RCbHVyOiBmdW5jdGlvbih2YWwpIHsNCiAgICAgIHRoaXMuc2VhcmNoKCk7DQogICAgfSwNCiAgICBoYW5kbGVDaGVja0NoYW5nZShkYXRhKSB7DQogICAgICBpZiAodGhpcy5tdWx0aXBsZSkgew0KICAgICAgICBsZXQgY2hlY2tlZE5vZGVzID0gdGhpcy4kcmVmcy50cmVlc2VsZWN0RWxUcmVlLmdldENoZWNrZWROb2RlcygpOw0KICAgICAgICBsZXQgbW9kZWxWYWx1ZSA9IFtdOw0KICAgICAgICB0aGlzLnRlbXBvcHRpb25zID0gY2hlY2tlZE5vZGVzOw0KICAgICAgICBmb3IgKGxldCBkYXRhIG9mIGNoZWNrZWROb2Rlcykgew0KICAgICAgICAgIG1vZGVsVmFsdWUucHVzaChkYXRhLmtleSk7DQogICAgICAgIH0NCiAgICAgICAgdGhpcy4kZW1pdCgiaW5wdXQiLCBtb2RlbFZhbHVlLmpvaW4oIiwiKSk7DQogICAgICB9DQogICAgfSwNCiAgICBoYW5kbGVOb2RlQ2xpY2soZGF0YSkgew0KICAgICAgdGhpcy4kcmVmcy50cmVlc2VsZWN0RWxUcmVlLnNldENoZWNrZWQoZGF0YSwgdHJ1ZSk7DQogICAgICBpZiAoIXRoaXMubXVsdGlwbGUpIHsNCiAgICAgICAgdGhpcy4kZW1pdCgiaW5wdXQiLCBkYXRhLmtleSk7DQogICAgICAgIGlmIChkYXRhLmtleSkgew0KICAgICAgICAgIC8v5Yik5pat5a+56K+d5qGG5piv5ZCm57uR5a6a5LqG5YWz6IGU5p+l6K+iDQogICAgICAgICAgaWYodGhpcy5jdXN0b21RdWVyeSYmdGhpcy5jdXN0b21RdWVyeS5jdXN0UXVlcnlKc29uJiZ0aGlzLmN1c3RvbVF1ZXJ5LmN1c3RRdWVyeUpzb24ubGVuZ3RoPjApew0KICAgICAgICAgICAgbGV0IGN1c3RRdWVyeUpzb24gPSB0aGlzLmN1c3RvbVF1ZXJ5LmN1c3RRdWVyeUpzb247DQogICAgICAgICAgICBmb3IobGV0IGk9MDtpPGN1c3RRdWVyeUpzb24ubGVuZ3RoO2krKyl7DQogICAgICAgICAgICAgIGlmKGN1c3RRdWVyeUpzb25baV0uY29uZGl0aW9uZmllbGQubGVuZ3RoPjApew0KICAgICAgICAgICAgICAgIHRoaXMuZG9RdWVyeShjdXN0UXVlcnlKc29uW2ldKTsNCiAgICAgICAgICAgICAgfWVsc2V7DQogICAgICAgICAgICAgICAgY29uc29sZS5lcnJvcigiWyIrY3VzdFF1ZXJ5SnNvbltpXS5jb21tZW50KyJd5YWz6IGU5p+l6K+i5Y+W5YC85Y+C5pWw5pyq57uR5a6a6KGo5Y2V5a2X5q61Iik7DQogICAgICAgICAgICAgIH0NCiAgICAgICAgICAgIH0NCiAgICAgICAgICB9DQogICAgICAgIH0NCiAgICAgICAgdGhpcy4kcmVmcy50cmVlc2VsZWN0LmJsdXIoKTsNCiAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7DQogICAgICAgICAgdGhpcy4kdmFsaWRhdG9yLnZhbGlkYXRlKCk7DQogICAgICAgIH0pOw0KICAgICAgfSBlbHNlIGlmICh0aGlzLm11bHRpcGxlKSB7DQogICAgICAgIGxldCBjaGVja2VkTm9kZXMgPSB0aGlzLiRyZWZzLnRyZWVzZWxlY3RFbFRyZWUuZ2V0Q2hlY2tlZE5vZGVzKCk7DQogICAgICAgIGxldCBtb2RlbFZhbHVlID0gW107DQogICAgICAgIHRoaXMudGVtcG9wdGlvbnMgPSBjaGVja2VkTm9kZXM7DQogICAgICAgIGZvciAobGV0IGRhdGEgb2YgY2hlY2tlZE5vZGVzKSB7DQogICAgICAgICAgbW9kZWxWYWx1ZS5wdXNoKGRhdGEua2V5KTsNCiAgICAgICAgfQ0KICAgICAgICB0aGlzLiRlbWl0KCJpbnB1dCIsIG1vZGVsVmFsdWUuam9pbigiLCIpKTsNCiAgICAgIH0NCiAgICB9LA0KICAgIGZpbHRlck5vZGUodmFsdWUsIGRhdGEpIHsNCiAgICAgIGlmICghdmFsdWUpIHJldHVybiB0cnVlOw0KICAgICAgcmV0dXJuIGRhdGEudmFsdWUuaW5kZXhPZih2YWx1ZSkgIT09IC0xOw0KICAgIH0sDQogICAgZmlsdGVyTWV0aG9kKHF1ZXJ5KSB7DQogICAgICB0aGlzLiRyZWZzLnRyZWVzZWxlY3RFbFRyZWUuZmlsdGVyKHF1ZXJ5KTsNCiAgICB9LA0KICAgIHJlbW90ZU1ldGhvZDogZnVuY3Rpb24odmFsKSB7DQogICAgICBpZiAodmFsKSB7DQogICAgICAgIHRoaXMuc2VhcmNoKGZhbHNlLCB2YWwpOw0KICAgICAgfSBlbHNlIHsNCiAgICAgICAgdGhpcy5wYXJhbSA9ICIiOw0KICAgICAgICB0aGlzLnNlYXJjaCgpOw0KICAgICAgfQ0KICAgIH0sDQogICAgaGFuZGxlQ3VycmVudENoYW5nZTogZnVuY3Rpb24oY3VycmVudFBhZ2UpIHsNCiAgICAgIHRoaXMuY3VycmVudFBhZ2UgPSBjdXJyZW50UGFnZTsNCiAgICAgIHRoaXMuc2VhcmNoKGN1cnJlbnRQYWdlKTsNCiAgICB9LA0KICAgIHNlYXJjaChjdXJyZW50UGFnZSwgcGFyYW0sIGdhbmdlZENoYW5nZSkgew0KICAgICAgdGhpcy5vcHRpb25zID0gW107DQogICAgICBpZiAoZ2FuZ2VkQ2hhbmdlKSB7DQogICAgICAgIHRoaXMuJGVtaXQoImlucHV0IiwgIiIpOw0KICAgICAgfQ0KICAgICAgbGV0IG9iaklzRW1wdHkgPSB0aGlzLm9iaklzRW1wdHkodGhpcy5nYW5nZWQuYmluZCk7DQogICAgICBpZiAoDQogICAgICAgICF0aGlzLmNvbmZpZyB8fA0KICAgICAgICAodGhpcy5nYW5nZWQuYmluZCAmJiAhb2JqSXNFbXB0eSAmJiAhcGFyYW0pDQogICAgICApDQogICAgICAgIHJldHVybjsNCiAgICAgIHZhciBzdHIgPSB0aGlzLmNvbmZpZzsNCiAgICAgIGNvbnN0IF90aGlzID0gdGhpczsNCiAgICAgIHZhciBnYW5nZWQgPSB0aGlzLmdhbmdlZDsNCiAgICAgIHRoaXMucGFnZVNpemUgPSBzdHIucGFnZVNpemU7DQogICAgICAvLyBpZihzdHIubmVlZFBhZ2UgPT09IDEpew0KICAgICAgdmFyIHBhZ2VCZWFuID0gew0KICAgICAgICBwYWdlQmVhbjogew0KICAgICAgICAgIHBhZ2U6IGN1cnJlbnRQYWdlID8gY3VycmVudFBhZ2UgOiAxLA0KICAgICAgICAgIHBhZ2VTaXplOiBzdHIucGFnZVNpemUsDQogICAgICAgICAgc2hvd1RvdGFsOiAidHJ1ZSINCiAgICAgICAgfQ0KICAgICAgfTsNCiAgICAgIGlmIChwYXJhbSkgew0KICAgICAgICBpZiAoc3RyLmRzVHlwZSA9PSAiZGF0YVNvdXJjZSIpIHsNCiAgICAgICAgICBsZXQgQmFzZTY0ID0gcmVxdWlyZSgianMtYmFzZTY0IikuQmFzZTY0Ow0KICAgICAgICAgIHN0ci5jdXJyZW50UGFnZSA9IGN1cnJlbnRQYWdlID8gY3VycmVudFBhZ2UgOiAxOw0KICAgICAgICAgIGlmIChKU09OLnN0cmluZ2lmeShnYW5nZWQuYmluZCkgPT09ICJ7fSIpIHsNCiAgICAgICAgICAgIHN0ci5xdWVyeURhdGEgPSBCYXNlNjQuZW5jb2RlKA0KICAgICAgICAgICAgICBKU09OLnN0cmluZ2lmeShbeyBrZXk6IGdhbmdlZC52YWx1ZUJpbmQsIHZhbHVlOiBwYXJhbSB9XSkNCiAgICAgICAgICAgICk7DQogICAgICAgICAgfSBlbHNlIHsNCiAgICAgICAgICAgIHZhciBxdWVyeURhdGEgPSBbXTsNCiAgICAgICAgICAgIGZvciAodmFyIGtleSBpbiBnYW5nZWQuYmluZCkgew0KICAgICAgICAgICAgICBjb25zdCBwSW5zdCA9IHV0aWxzLmdldE9ubGluZUZvcm1JbnN0YW5jZShfdGhpcyk7DQogICAgICAgICAgICAgIGNvbnN0IHZhbCA9IHV0aWxzLmdldFZhbHVlQnlQYXRoKA0KICAgICAgICAgICAgICAgIHBJbnN0LA0KICAgICAgICAgICAgICAgIGdhbmdlZC5iaW5kW2tleV0sDQogICAgICAgICAgICAgICAgdGhpcy5jdXJTdWJJbmRleA0KICAgICAgICAgICAgICApOw0KICAgICAgICAgICAgICBpZiAodmFsKSB7DQogICAgICAgICAgICAgICAgcXVlcnlEYXRhLnB1c2goeyBrZXk6IGtleSwgdmFsdWU6IHZhbCB9KTsNCiAgICAgICAgICAgICAgfSBlbHNlIHsNCiAgICAgICAgICAgICAgICBxdWVyeURhdGEucHVzaCh7IGtleToga2V5LCB2YWx1ZTogcGFyYW0gfSk7DQogICAgICAgICAgICAgIH0NCiAgICAgICAgICAgIH0NCiAgICAgICAgICAgIHN0ci5xdWVyeURhdGEgPSBCYXNlNjQuZW5jb2RlKEpTT04uc3RyaW5naWZ5KHF1ZXJ5RGF0YSkpOw0KICAgICAgICAgIH0NCiAgICAgICAgfSBlbHNlIHsNCiAgICAgICAgICB2YXIgdGVtcGxhdGVQYSA9IHRoaXMuY29uZmlnLmRhdGFQYXJhbTsNCiAgICAgICAgICBpZiAodGhpcy5jb25maWcucmVxdWVzdFR5cGUgPT0gIlBPU1QiICYmIHRlbXBsYXRlUGEpIHsNCiAgICAgICAgICAgIHZhciBjb25kaXRpb25maWVsZCA9IEpTT04ucGFyc2Uoc3RyLmNvbmRpdGlvbmZpZWxkKTsNCiAgICAgICAgICAgIGNvbmRpdGlvbmZpZWxkLmZvckVhY2goZWxlID0+IHsNCiAgICAgICAgICAgICAgY29uc3QgcEluc3QgPSB1dGlscy5nZXRPbmxpbmVGb3JtSW5zdGFuY2UoX3RoaXMpOw0KICAgICAgICAgICAgICBjb25zdCB2YWwgPSB1dGlscy5nZXRWYWx1ZUJ5UGF0aChwSW5zdCwgZ2FuZ2VkLmJpbmRbZWxlLmZpZWxkXSk7DQogICAgICAgICAgICAgIGlmICh2YWwpIHsNCiAgICAgICAgICAgICAgICB0ZW1wbGF0ZVBhID0gdGVtcGxhdGVQYS5yZXBsYWNlKA0KICAgICAgICAgICAgICAgICAgbmV3IFJlZ0V4cCgiXFx7IiArIGVsZS5maWVsZCArICJcXH0iLCAiZyIpLA0KICAgICAgICAgICAgICAgICAgdmFsDQogICAgICAgICAgICAgICAgKTsNCiAgICAgICAgICAgICAgfSBlbHNlIHsNCiAgICAgICAgICAgICAgICB0ZW1wbGF0ZVBhID0gdGVtcGxhdGVQYS5yZXBsYWNlKA0KICAgICAgICAgICAgICAgICAgbmV3IFJlZ0V4cCgiXFx7IiArIGVsZS5maWVsZCArICJcXH0iLCAiZyIpLA0KICAgICAgICAgICAgICAgICAgcGFyYW0NCiAgICAgICAgICAgICAgICApOw0KICAgICAgICAgICAgICB9DQogICAgICAgICAgICB9KTsNCiAgICAgICAgICB9IGVsc2Ugew0KICAgICAgICAgIH0NCiAgICAgICAgICBzdHIucGFnZUJlYW4gPSB1dGlscy5wYXJzZVRvSnNvbih0ZW1wbGF0ZVBhKTsNCiAgICAgICAgfQ0KICAgICAgfSBlbHNlIHsNCiAgICAgICAgc3RyLnBhZ2VCZWFuID0gcGFnZUJlYW47DQogICAgICAgIHN0ci5jdXJyZW50UGFnZSA9IGN1cnJlbnRQYWdlID8gY3VycmVudFBhZ2UgOiAxOw0KICAgICAgICBzdHIucXVlcnlEYXRhID0gIiI7DQogICAgICB9DQogICAgICAvL30NCiAgICAgIHRoaXMuJHN0b3JlLmRpc3BhdGNoKCJmb3JtL3NlbGVjdFF1ZXJ5Iiwgc3RyKS50aGVuKHJlcyA9PiB7DQogICAgICAgIGlmICh0aGlzLmNvbmZpZyAmJiB0aGlzLmNvbmZpZy5kc1R5cGUgPT09ICJyZXN0ZnVsIikgew0KICAgICAgICAgIF90aGlzLm9wdGlvbnMgPSByZXMucm93czsNCiAgICAgICAgICAvL3RyZWXmlbDnu4TovaxsaXN0DQogICAgICAgICAgdGhpcy5hZGRTZWxlY3RMaXN0KF90aGlzLm9wdGlvbnMpOw0KICAgICAgICAgIC8v5aSE55CG5Y+q6K+75Zue5aGr5pi+56S6DQogICAgICAgICAgaWYgKA0KICAgICAgICAgICAgX3RoaXMuaW5wdXRWYWwgJiYNCiAgICAgICAgICAgIF90aGlzLmlucHV0VmFsLmNvbnN0cnVjdG9yID09IEFycmF5ICYmDQogICAgICAgICAgICBfdGhpcy5pbnB1dFZhbC5sZW5ndGggPiAwDQogICAgICAgICAgKSB7DQogICAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IF90aGlzLmlucHV0VmFsLmxlbmd0aDsgaSsrKSB7DQogICAgICAgICAgICAgIHRoaXMuZmluZERlc2MoX3RoaXMub3B0aW9ucywgX3RoaXMuaW5wdXRWYWxbaV0pOw0KICAgICAgICAgICAgfQ0KICAgICAgICAgICAgLy/pu5jorqTpgInkuK3moJHoioLngrkNCiAgICAgICAgICAgIGlmICh0aGlzLmlucHV0V3JpdGVhYmxlKSB7DQogICAgICAgICAgICAgIHRoaXMuJHJlZnMudHJlZXNlbGVjdEVsVHJlZS5zZXRDaGVja2VkS2V5cyhfdGhpcy5pbnB1dFZhbCk7DQogICAgICAgICAgICB9DQogICAgICAgICAgfSBlbHNlIHsNCiAgICAgICAgICAgIHRoaXMuZmluZERlc2MoX3RoaXMub3B0aW9ucywgX3RoaXMuaW5wdXRWYWwpOw0KICAgICAgICAgIH0NCiAgICAgICAgICBpZiAodGhpcy52YWx1ZURlc2MgIT0gIiIpIHsNCiAgICAgICAgICAgIHRoaXMudmFsdWVEZXNjID0gdGhpcy52YWx1ZURlc2Muc3Vic3RyaW5nKA0KICAgICAgICAgICAgICAwLA0KICAgICAgICAgICAgICB0aGlzLnZhbHVlRGVzYy5sZW5ndGggLSAxDQogICAgICAgICAgICApOw0KICAgICAgICAgIH0NCg0KICAgICAgICAgIHJldHVybjsNCiAgICAgICAgfQ0KICAgICAgICBfdGhpcy50b3RhbCA9IHJlcy50b3RhbDsNCiAgICAgICAgX3RoaXMub3B0aW9ucyA9IFtdOw0KICAgICAgICByZXMucm93cy5mb3JFYWNoKG0gPT4gew0KICAgICAgICAgIHZhciBvcHRpb24gPSB7fTsNCiAgICAgICAgICBpZiAoX3RoaXMuZ2FuZ2VkLnZhbHVlQmluZCkgew0KICAgICAgICAgICAgb3B0aW9uLmtleSA9IG1bZ2FuZ2VkLnZhbHVlQmluZF0gKyAiIjsNCiAgICAgICAgICB9DQogICAgICAgICAgaWYgKF90aGlzLmdhbmdlZC5sYWJlbEJpbmQpIHsNCiAgICAgICAgICAgIG9wdGlvbi52YWx1ZSA9IG1bZ2FuZ2VkLmxhYmVsQmluZF07DQogICAgICAgICAgfQ0KICAgICAgICAgIF90aGlzLm9wdGlvbnMucHVzaChvcHRpb24pOw0KICAgICAgICB9KTsNCg0KICAgICAgICAvL3RyZWXmlbDnu4TovaxsaXN0DQogICAgICAgIHRoaXMuYWRkU2VsZWN0TGlzdChfdGhpcy5vcHRpb25zKTsNCiAgICAgICAgaWYgKA0KICAgICAgICAgIF90aGlzLmlucHV0VmFsICYmDQogICAgICAgICAgX3RoaXMuaW5wdXRWYWwuY29uc3RydWN0b3IgPT0gQXJyYXkgJiYNCiAgICAgICAgICBfdGhpcy5pbnB1dFZhbC5sZW5ndGggPiAwDQogICAgICAgICkgew0KICAgICAgICAgIGZvciAobGV0IGogPSAwOyBqIDwgX3RoaXMuaW5wdXRWYWwubGVuZ3RoOyBqKyspIHsNCiAgICAgICAgICAgIHRoaXMuZmluZERlc2MoX3RoaXMub3B0aW9ucywgX3RoaXMuaW5wdXRWYWxbal0pOw0KICAgICAgICAgIH0NCiAgICAgICAgICAvL+m7mOiupOmAieS4reagkeiKgueCuQ0KICAgICAgICAgIHRoaXMuJG5leHRUaWNrKCgpPT57DQogICAgICAgICAgICBfdGhpcy4kcmVmcy50cmVlc2VsZWN0RWxUcmVlICYmIF90aGlzLiRyZWZzLnRyZWVzZWxlY3RFbFRyZWUuc2V0Q2hlY2tlZEtleXMoX3RoaXMuaW5wdXRWYWwpOw0KICAgICAgICAgIH0pDQogICAgICAgIH0gZWxzZSB7DQogICAgICAgICAgdGhpcy5maW5kRGVzYyhfdGhpcy5vcHRpb25zLCBfdGhpcy5pbnB1dFZhbCk7DQogICAgICAgIH0NCiAgICAgICAgaWYgKHRoaXMudmFsdWVEZXNjICE9ICIiKSB7DQogICAgICAgICAgdGhpcy52YWx1ZURlc2MgPSB0aGlzLnZhbHVlRGVzYy5zdWJzdHJpbmcoDQogICAgICAgICAgICAwLA0KICAgICAgICAgICAgdGhpcy52YWx1ZURlc2MubGVuZ3RoIC0gMQ0KICAgICAgICAgICk7DQogICAgICAgIH0NCiAgICAgIH0pOw0KICAgIH0sDQogICAgZmluZERlc2MobGlzdCwga2V5KSB7DQogICAgICBpZiAobGlzdCAmJiBsaXN0Lmxlbmd0aCA+IDApIHsNCiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBsaXN0Lmxlbmd0aDsgaSsrKSB7DQogICAgICAgICAgaWYgKGxpc3RbaV0ua2V5ID09IGtleSkgew0KICAgICAgICAgICAgdGhpcy52YWx1ZURlc2MgKz0gbGlzdFtpXS52YWx1ZSArICIsIjsNCiAgICAgICAgICAgIHJldHVybjsNCiAgICAgICAgICB9DQogICAgICAgICAgaWYgKGxpc3RbaV0uY2hpbGRyZW4pIHsNCiAgICAgICAgICAgIHRoaXMuZmluZERlc2MobGlzdFtpXS5jaGlsZHJlbiwga2V5KTsNCiAgICAgICAgICB9DQogICAgICAgIH0NCiAgICAgIH0NCiAgICB9LA0KICAgIGFkZFNlbGVjdExpc3QobGlzdCkgew0KICAgICAgaWYgKGxpc3QgJiYgbGlzdC5sZW5ndGggPiAwKSB7DQogICAgICAgIGxpc3QuZm9yRWFjaChsID0+IHsNCiAgICAgICAgICB0aGlzLnRlbXBvcHRpb25zLnB1c2gobCk7DQogICAgICAgICAgaWYgKGwuY2hpbGRyZW4pIHsNCiAgICAgICAgICAgIHRoaXMuYWRkU2VsZWN0TGlzdChsLmNoaWxkcmVuKTsNCiAgICAgICAgICB9DQogICAgICAgIH0pOw0KICAgICAgfQ0KICAgIH0NCiAgfQ0KfTsNCg=="},null]}