{"remainingRequest":"D:\\jenkins\\workspace\\ljzc-fvue\\node_modules\\@vue\\cli-plugin-babel\\node_modules\\thread-loader\\dist\\cjs.js!D:\\jenkins\\workspace\\ljzc-fvue\\node_modules\\babel-loader\\lib\\index.js!D:\\jenkins\\workspace\\ljzc-fvue\\node_modules\\@vue\\cli-plugin-babel\\node_modules\\cache-loader\\dist\\cjs.js??ref--0-0!D:\\jenkins\\workspace\\ljzc-fvue\\node_modules\\vue-loader\\lib\\index.js??vue-loader-options!D:\\jenkins\\workspace\\ljzc-fvue\\src\\components\\control\\HtUserSelector.vue?vue&type=script&lang=js&","dependencies":[{"path":"D:\\jenkins\\workspace\\ljzc-fvue\\src\\components\\control\\HtUserSelector.vue","mtime":1701311300928},{"path":"D:\\jenkins\\workspace\\ljzc-fvue\\babel.config.js","mtime":1701311296006},{"path":"D:\\jenkins\\workspace\\ljzc-fvue\\node_modules\\@vue\\cli-plugin-babel\\node_modules\\cache-loader\\dist\\cjs.js","mtime":499162500000},{"path":"D:\\jenkins\\workspace\\ljzc-fvue\\node_modules\\@vue\\cli-plugin-babel\\node_modules\\thread-loader\\dist\\cjs.js","mtime":499162500000},{"path":"D:\\jenkins\\workspace\\ljzc-fvue\\node_modules\\babel-loader\\lib\\index.js","mtime":456789000000},{"path":"D:\\jenkins\\workspace\\ljzc-fvue\\node_modules\\@vue\\cli-plugin-babel\\node_modules\\cache-loader\\dist\\cjs.js","mtime":499162500000},{"path":"D:\\jenkins\\workspace\\ljzc-fvue\\node_modules\\vue-loader\\lib\\index.js","mtime":499162500000}],"contextDependencies":[],"result":[{"type":"Buffer","data":"base64:aW1wb3J0IF90b0NvbnN1bWFibGVBcnJheSBmcm9tICJEOi9qZW5raW5zL3dvcmtzcGFjZS9sanpjLWZ2dWUvbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL3RvQ29uc3VtYWJsZUFycmF5LmpzIjsKaW1wb3J0ICJjb3JlLWpzL21vZHVsZXMvZXMub2JqZWN0LnRvLXN0cmluZy5qcyI7CmltcG9ydCAiY29yZS1qcy9tb2R1bGVzL3dlYi5kb20tY29sbGVjdGlvbnMuZm9yLWVhY2guanMiOwppbXBvcnQgImNvcmUtanMvbW9kdWxlcy9lcy5hcnJheS5wdXNoLmpzIjsKaW1wb3J0ICJjb3JlLWpzL21vZHVsZXMvZXMuZnVuY3Rpb24ubmFtZS5qcyI7CmltcG9ydCAiY29yZS1qcy9tb2R1bGVzL2VzLnJlZ2V4cC5leGVjLmpzIjsKaW1wb3J0ICJjb3JlLWpzL21vZHVsZXMvZXMuc3RyaW5nLnNlYXJjaC5qcyI7CmltcG9ydCAiY29yZS1qcy9tb2R1bGVzL2VzLmFycmF5LmZpbHRlci5qcyI7CmltcG9ydCAiY29yZS1qcy9tb2R1bGVzL2VzLmFycmF5LmNvbmNhdC5qcyI7CmltcG9ydCAiY29yZS1qcy9tb2R1bGVzL2VzLmFycmF5LmpvaW4uanMiOwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwoKaW1wb3J0IFZ1ZSBmcm9tICJ2dWUiOwppbXBvcnQgeyBtYXBTdGF0ZSB9IGZyb20gInZ1ZXgiOwppbXBvcnQgdXRpbHMgZnJvbSAiQC91dGlscy5qcyI7CmV4cG9ydCBkZWZhdWx0IHsKICBuYW1lOiAiaHQtdXNlci1zZWxlY3RvciIsCiAgcHJvcHM6IFsidmFsaWRhdGUiLCAidmFsdWUiLCAibmFtZSIsICJwZXJtaXNzaW9uIiwgInNpbmdsZSIsICJzZWxlY3RvcmNvbmZpZyIsICJ0b29sdGlwcGxhY2VtZW50Il0sCiAgZGF0YTogZnVuY3Rpb24gZGF0YSgpIHsKICAgIHJldHVybiB7CiAgICAgIHRhYmxlRGF0YTogIiIsCiAgICAgIG9yZ0lkOiAiIiwKICAgICAgdXNlckRpYWxvZ1Zpc2libGU6IGZhbHNlLAogICAgICBkZWZhdWx0UHJvcHM6IHsKICAgICAgICBjaGlsZHJlbjogImNoaWxkcmVuIiwKICAgICAgICBsYWJlbDogIm5hbWUiCiAgICAgIH0sCiAgICAgIHNlbGVjdFVzZXJQcm9wczogewogICAgICAgIGxhYmVsOiAiZnVsbG5hbWUiCiAgICAgIH0sCiAgICAgIHNlbGVjdFVzZXJzOiBudWxsLAogICAgICBjdXJyZW50RGltZW5zaW9uOiBudWxsLAogICAgICBpbnB1dFN1ZmZpeEhlaWdodDogMzAsCiAgICAgIGNvbmZpZzogbnVsbCwKICAgICAgdXBkYXRpbmc6IGZhbHNlLAogICAgICBjdXJyZW50VXNlcjogbnVsbCwKICAgICAgc2luZ2xlU2VsZWN0SWQ6IG51bGwKICAgIH07CiAgfSwKICBjb21wdXRlZDogbWFwU3RhdGUoewogICAgcGFnaW5hdGlvbjogZnVuY3Rpb24gcGFnaW5hdGlvbihzdGF0ZSkgewogICAgICByZXR1cm4gc3RhdGUudXNlci5wYWdpbmF0aW9uOwogICAgfSwKICAgIHRvdGFsOiBmdW5jdGlvbiB0b3RhbChzdGF0ZSkgewogICAgICByZXR1cm4gc3RhdGUudXNlci50b3RhbDsKICAgIH0sCiAgICBkaW1lbnNpb25zOiBmdW5jdGlvbiBkaW1lbnNpb25zKHN0YXRlKSB7CiAgICAgIHJldHVybiBzdGF0ZS51c2VyLmRpbWVuc2lvbnM7CiAgICB9LAogICAgLy8g5bem5L6n57uE57uH5qCR55qE5pWw5o2uCiAgICBvcmdzOiBmdW5jdGlvbiBvcmdzKHN0YXRlKSB7CiAgICAgIHJldHVybiBzdGF0ZS51c2VyLm9yZ3M7CiAgICB9LAogICAgLy8g5Lit6Ze055So5oi36KGo5qC855qE5pWw5o2uCiAgICB1c2VyczogZnVuY3Rpb24gdXNlcnMoc3RhdGUpIHsKICAgICAgcmV0dXJuIHN0YXRlLnVzZXIudXNlcnM7CiAgICB9LAogICAgaXNTaW5nbGU6IGZ1bmN0aW9uIGlzU2luZ2xlKCkgewogICAgICBpZiAodGhpcy5zaW5nbGUgPT09IHVuZGVmaW5lZCB8fCB0aGlzLnNpbmdsZSA9PT0gbnVsbCkgewogICAgICAgIGlmICh0aGlzLnNlbGVjdG9yY29uZmlnKSB7CiAgICAgICAgICByZXR1cm4gdGhpcy5zZWxlY3RvcmNvbmZpZy5pc1NpbmdsZTsKICAgICAgICB9CiAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICB9CiAgICAgIGlmICh0aGlzLnNpbmdsZSA9PT0gIiIpIHsKICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgfQogICAgICByZXR1cm4gISF0aGlzLnNpbmdsZTsKICAgIH0sCiAgICBpbnB1dFZhbDogZnVuY3Rpb24gaW5wdXRWYWwoKSB7CiAgICAgIGlmICghdGhpcy52YWx1ZSkgewogICAgICAgIHJldHVybiBudWxsOwogICAgICB9IGVsc2UgaWYgKHRoaXMuYmluZFNldCkgewogICAgICAgIGlmICghdXRpbHMuZ2V0QW5kVmFsaWRQYXRoKHRoaXMuYmluZFNldCwgImZ1bGxuYW1lIikpIHsKICAgICAgICAgIHRocm93ICJodC11c2VyLXNlbGVjdG9y55qEYmluZOWxnuaAp+S4reW/hemhu+mFjee9rmZ1bGxuYW1l5bGe5oCnLiI7CiAgICAgICAgfQogICAgICAgIGlmICh0aGlzLnZhbHVlLmNvbnN0cnVjdG9yICE9IFN0cmluZykgewogICAgICAgICAgdGhyb3cgImh0LXVzZXItc2VsZWN0b3LkuK3mnIliaW5k5bGe5oCn5pe277yMZnVsbG5hbWXlv4XpobvmmK/lrZfnrKbkuLIuIjsKICAgICAgICB9CiAgICAgICAgdmFyIHN1YkluZGV4ID0gbnVsbDsKICAgICAgICBpZiAodGhpcy4kZWwpIHsKICAgICAgICAgIHN1YkluZGV4ID0gdXRpbHMuZ2V0U29tZUF0dHJpYnV0ZUZyb21QYXJlbnRFbGVtZW50KHRoaXMuJGVsLCAiZGF0YS1pbmRleCIpOwogICAgICAgIH0KICAgICAgICB2YXIgbmFtZUFyeSA9IHRoaXMudmFsdWUuc3BsaXQoIiwiKTsKICAgICAgICB2YXIgaWRBcnkgPSBudWxsOwogICAgICAgIHZhciBhY2NvdW50QXJ5ID0gbnVsbDsKICAgICAgICB2YXIgZW1haWxBcnkgPSBbXTsKICAgICAgICB2YXIgbW9iaWxlQXJ5ID0gW107CiAgICAgICAgdmFyIGlkUGF0aCA9IHV0aWxzLmdldEFuZFZhbGlkUGF0aCh0aGlzLmJpbmRTZXQsICJpZCIpOwogICAgICAgIGlmIChpZFBhdGgpIHsKICAgICAgICAgIHZhciBpZFZhbCA9IHV0aWxzLmdldFZhbHVlQnlQYXRoKHRoaXMuJHBhcmVudCwgaWRQYXRoLCBzdWJJbmRleCk7CiAgICAgICAgICBpZiAoIWlkVmFsIHx8IGlkVmFsLmNvbnN0cnVjdG9yICE9IFN0cmluZykgewogICAgICAgICAgICB0aHJvdyAiaHQtdXNlci1zZWxlY3RvcuS4reaciWJpbmTlsZ7mgKfkuK1pZOeahOWAvOW/hemhu+aYr+mdnuepuueahOWtl+espuS4si4iOwogICAgICAgICAgfQogICAgICAgICAgaWRBcnkgPSBpZFZhbC5zcGxpdCgiLCIpOwogICAgICAgIH0KICAgICAgICB2YXIgYWNjb3VudFBhdGggPSB1dGlscy5nZXRBbmRWYWxpZFBhdGgodGhpcy5iaW5kU2V0LCAiYWNjb3VudCIpOwogICAgICAgIGlmIChhY2NvdW50UGF0aCkgewogICAgICAgICAgdmFyIGFjY291bnRWYWwgPSB1dGlscy5nZXRWYWx1ZUJ5UGF0aCh0aGlzLiRwYXJlbnQsIGFjY291bnRQYXRoLCBzdWJJbmRleCk7CiAgICAgICAgICBpZiAoIWFjY291bnRWYWwgfHwgYWNjb3VudFZhbC5jb25zdHJ1Y3RvciAhPSBTdHJpbmcpIHsKICAgICAgICAgICAgdGhyb3cgImh0LXVzZXItc2VsZWN0b3LkuK3mnIliaW5k5bGe5oCn5LitYWNjb3VudOeahOWAvOW/hemhu+aYr+mdnuepuueahOWtl+espuS4si4iOwogICAgICAgICAgfQogICAgICAgICAgYWNjb3VudEFyeSA9IGFjY291bnRWYWwuc3BsaXQoIiwiKTsKICAgICAgICB9CiAgICAgICAgdmFyIGVtYWlsUGF0aCA9IHV0aWxzLmdldEFuZFZhbGlkUGF0aCh0aGlzLmJpbmRTZXQsICJlbWFpbCIpOwogICAgICAgIGlmIChlbWFpbFBhdGgpIHsKICAgICAgICAgIHZhciBlbWFpbFZhbCA9IHV0aWxzLmdldFZhbHVlQnlQYXRoKHRoaXMuJHBhcmVudCwgZW1haWxQYXRoLCBzdWJJbmRleCk7CiAgICAgICAgICBpZiAoZW1haWxWYWwgJiYgZW1haWxWYWwuY29uc3RydWN0b3IgPT0gU3RyaW5nKSB7CiAgICAgICAgICAgIGVtYWlsQXJ5ID0gZW1haWxWYWwuc3BsaXQoIiwiKTsKICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgdmFyIG1vYmlsZVBhdGggPSB1dGlscy5nZXRBbmRWYWxpZFBhdGgodGhpcy5iaW5kU2V0LCAibW9iaWxlIik7CiAgICAgICAgaWYgKG1vYmlsZVBhdGgpIHsKICAgICAgICAgIHZhciBtb2JpbGVWYWwgPSB1dGlscy5nZXRWYWx1ZUJ5UGF0aCh0aGlzLiRwYXJlbnQsIG1vYmlsZVBhdGgsIHN1YkluZGV4KTsKICAgICAgICAgIGlmIChtb2JpbGVWYWwgJiYgbW9iaWxlVmFsLmNvbnN0cnVjdG9yID09IFN0cmluZykgewogICAgICAgICAgICBtb2JpbGVBcnkgPSBtb2JpbGVWYWwuc3BsaXQoIiwiKTsKICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgdmFyIHJlc3VsdCA9IFtdOwogICAgICAgIG5hbWVBcnkuZm9yRWFjaChmdW5jdGlvbiAobSwgaSkgewogICAgICAgICAgdmFyIG4gPSB7CiAgICAgICAgICAgIGZ1bGxuYW1lOiBtCiAgICAgICAgICB9OwogICAgICAgICAgaWYgKGlkQXJ5KSB7CiAgICAgICAgICAgIG5bImlkIl0gPSBpZEFyeVtpXTsKICAgICAgICAgIH0KICAgICAgICAgIGlmIChhY2NvdW50QXJ5KSB7CiAgICAgICAgICAgIG5bImFjY291bnQiXSA9IGFjY291bnRBcnlbaV07CiAgICAgICAgICB9CiAgICAgICAgICBpZiAoZW1haWxBcnkpIHsKICAgICAgICAgICAgblsiZW1haWwiXSA9IGVtYWlsQXJ5W2ldOwogICAgICAgICAgfQogICAgICAgICAgaWYgKG1vYmlsZUFyeSkgewogICAgICAgICAgICBuWyJtb2JpbGUiXSA9IG1vYmlsZUFyeVtpXTsKICAgICAgICAgIH0KICAgICAgICAgIHJlc3VsdC5wdXNoKG4pOwogICAgICAgIH0pOwogICAgICAgIHJldHVybiByZXN1bHQ7CiAgICAgIH0gZWxzZSBpZiAodGhpcy52YWx1ZS5jb25zdHJ1Y3RvciA9PSBBcnJheSkgewogICAgICAgIHJldHVybiB0aGlzLnZhbHVlOwogICAgICB9IGVsc2UgewogICAgICAgIHJldHVybiBudWxsOwogICAgICB9CiAgICB9LAogICAgaW5wdXRXcml0ZWFibGU6IGZ1bmN0aW9uIGlucHV0V3JpdGVhYmxlKCkgewogICAgICByZXR1cm4gdXRpbHMuZ2V0V3JpdGVhYmxlKHRoaXMucGVybWlzc2lvbik7CiAgICB9LAogICAgaW5wdXRWYWxpZGF0ZTogZnVuY3Rpb24gaW5wdXRWYWxpZGF0ZSgpIHsKICAgICAgdmFyIHZhbGlkYXRlT2JqID0gdGhpcy4kc3RvcmUuc3RhdGUuaW5kZXgudmFsaWRhdGU7CiAgICAgIHJldHVybiB1dGlscy5hZGRSZXF1aXJlZE9yTm90KHRoaXMucGVybWlzc2lvbiwgdGhpcy52YWxpZGF0ZSwgdmFsaWRhdGVPYmosIHRoaXMpOwogICAgfSwKICAgIGlucHV0TmFtZTogZnVuY3Rpb24gaW5wdXROYW1lKCkgewogICAgICB2YXIgbGFiZWxkZXNjID0gIiI7CiAgICAgIGlmICh0aGlzLiRzbG90cyAmJiB0aGlzLiRzbG90cy5sYWJlbGRlc2MgJiYgdGhpcy4kc2xvdHMubGFiZWxkZXNjWzBdLmNoaWxkcmVuICYmIHRoaXMuJHNsb3RzLmxhYmVsZGVzY1swXS5jaGlsZHJlblswXS50ZXh0KSB7CiAgICAgICAgbGFiZWxkZXNjID0gdGhpcy4kc2xvdHMubGFiZWxkZXNjWzBdLmNoaWxkcmVuWzBdLnRleHQ7CiAgICAgICAgcmV0dXJuIHRoaXMubmFtZSA/IHRoaXMubmFtZSA6IHV0aWxzLmdldE5hbWUoKSArICItIiArIGxhYmVsZGVzYzsKICAgICAgfSBlbHNlIHsKICAgICAgICByZXR1cm4gdGhpcy5uYW1lID8gdGhpcy5uYW1lIDogdXRpbHMuZ2V0TmFtZSgpOwogICAgICB9CiAgICB9LAogICAgLy8g5piv5ZCm5pi+56S65b2T5YmN55So5oi3CiAgICBzZWxlY3RDdXJyZW50OiBmdW5jdGlvbiBzZWxlY3RDdXJyZW50KCkgewogICAgICByZXR1cm4gdGhpcy5zZWxlY3RvcmNvbmZpZyA/IHRoaXMuc2VsZWN0b3Jjb25maWcuc2VsZWN0Q3VycmVudCA6IGZhbHNlOwogICAgfSwKICAgIC8vIOaYr+WQpuacieWbnuWhq+iuvue9rgogICAgYmluZFNldDogZnVuY3Rpb24gYmluZFNldCgpIHsKICAgICAgcmV0dXJuIHRoaXMuc2VsZWN0b3Jjb25maWcgPyB0aGlzLnNlbGVjdG9yY29uZmlnLmJpbmQgOiBudWxsOwogICAgfQogIH0pLAogIG1vdW50ZWQ6IGZ1bmN0aW9uIG1vdW50ZWQoKSB7CiAgICB2YXIgX3RoaXMgPSB0aGlzOwogICAgLy8g5rKh5pyJ5YC86ICM5LiU6ZyA6KaB5pi+56S65b2T5YmN55So5oi3CiAgICBpZiAoIXRoaXMuaW5wdXRWYWwgJiYgdGhpcy5zZWxlY3RDdXJyZW50KSB7CiAgICAgIGlmICh0aGlzLiRzdG9yZS5zdGF0ZS51c2VyLmN1cnJlbnRVc2VyRGV0YWlsID09IG51bGwpIHsKICAgICAgICB0aGlzLiRzdG9yZS5kaXNwYXRjaCgidXNlci9sb2FkQ3VycmVudFVzZXJEZXRhaWwiKS50aGVuKGZ1bmN0aW9uIChjdXJyZW50VXNlckRldGFpbCkgewogICAgICAgICAgX3RoaXMuY3VycmVudFVzZXIgPSBjdXJyZW50VXNlckRldGFpbC51c2VyOwogICAgICAgICAgX3RoaXMuc2VsZWN0VXNlcnMgPSBbY3VycmVudFVzZXJEZXRhaWwudXNlcl07CiAgICAgICAgICBfdGhpcy5zeW5jSW5wdXRWYWx1ZSgpOwogICAgICAgICAgX3RoaXMuY2FsYWNJbnB1dFN1ZmZpeEhlaWdodCgpOwogICAgICAgIH0pOwogICAgICB9IGVsc2UgewogICAgICAgIHRoaXMuY3VycmVudFVzZXIgPSB0aGlzLiRzdG9yZS5zdGF0ZS51c2VyLmN1cnJlbnRVc2VyRGV0YWlsLnVzZXI7CiAgICAgICAgdGhpcy5zZWxlY3RVc2VycyA9IFt0aGlzLmN1cnJlbnRVc2VyXTsKICAgICAgICB0aGlzLnN5bmNJbnB1dFZhbHVlKCk7CiAgICAgICAgdGhpcy5jYWxhY0lucHV0U3VmZml4SGVpZ2h0KCk7CiAgICAgIH0KICAgIH0KICB9LAogIGNyZWF0ZWQ6IGZ1bmN0aW9uIGNyZWF0ZWQoKSB7CiAgICB0aGlzLiR2YWxpZGF0b3IgPSB0aGlzLiRyb290LiR2YWxpZGF0b3I7CiAgICB2YXIgcGFnZUJlYW4gPSB7CiAgICAgIHBhZ2VCZWFuOiB7CiAgICAgICAgcGFnZTogIjEiLAogICAgICAgIHBhZ2VTaXplOiAiMTAiLAogICAgICAgIHNob3dUb3RhbDogInRydWUiCiAgICAgIH0KICAgIH07CiAgICAvL+WIneasoeWKoOi9vem7mOiupHBhZ2VCZWFuCiAgICB0aGlzLiRzdG9yZS5kaXNwYXRjaCgidXNlci9sb2FkRGltZW5zaW9uIik7CiAgICB0aGlzLiRzdG9yZS5kaXNwYXRjaCgidXNlci9sb2FkVXNlcnNCeU9yZ0lkIiwgcGFnZUJlYW4pOwogIH0sCiAgd2F0Y2g6IHsKICAgIHVzZXJEaWFsb2dWaXNpYmxlOiBmdW5jdGlvbiB1c2VyRGlhbG9nVmlzaWJsZShuZXdWYWwpIHsKICAgICAgaWYgKG5ld1ZhbCkgewogICAgICAgIGlmICh0aGlzLmlucHV0VmFsICYmIHRoaXMuaW5wdXRWYWwuY29uc3RydWN0b3IgPT0gQXJyYXkpIHsKICAgICAgICAgIHRoaXMuc2VsZWN0VXNlcnMgPSBfdG9Db25zdW1hYmxlQXJyYXkodGhpcy5pbnB1dFZhbCk7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgIHRoaXMuc2VsZWN0VXNlcnMgPSBbXTsKICAgICAgICB9CiAgICAgICAgdGhpcy5zeW5jQ2hlY2tlZFN0YXR1cygpOwogICAgICB9CiAgICB9CiAgfSwKICBtZXRob2RzOiB7CiAgICBsb2FkT3JnVHJlZTogZnVuY3Rpb24gbG9hZE9yZ1RyZWUobm9kZSwgcmVzb2x2ZSkgewogICAgICBpZiAobm9kZSAmJiBub2RlLmRhdGEgJiYgbm9kZS5kYXRhLmlzUGFyZW50KSB7CiAgICAgICAgaWYgKG5vZGUuZGF0YS5jaGlsZHJlbikgewogICAgICAgICAgcmVzb2x2ZShub2RlLmRhdGEuY2hpbGRyZW4pOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICB0aGlzLiRzdG9yZS5kaXNwYXRjaCgidXNlci9sb2FkT3Jnc0J5UGFyZW50SWQiLCBub2RlLmRhdGEuaWQpLnRoZW4oZnVuY3Rpb24gKHJlcCkgewogICAgICAgICAgICByZXNvbHZlKHJlcCk7CiAgICAgICAgICB9KTsKICAgICAgICB9CiAgICAgIH0gZWxzZSB7CiAgICAgICAgcmVzb2x2ZShbXSk7CiAgICAgIH0KICAgIH0sCiAgICAvL+eCueWHu+e7hOe7h+afpeivoueUqOaItwogICAgaGFuZGxlTm9kZUNsaWNrOiBmdW5jdGlvbiBoYW5kbGVOb2RlQ2xpY2soZGF0YSwgbm9kZSwgdnVlY29tcG9uZW50KSB7CiAgICAgIGlmIChkYXRhLmlkKSB7CiAgICAgICAgdGhpcy5vcmdJZCA9IGRhdGEuaWQ7CiAgICAgIH0KICAgICAgdmFyIHBhZ2VCZWFuID0gewogICAgICAgIHBhZ2VCZWFuOiB7CiAgICAgICAgICBwYWdlOiAiMSIsCiAgICAgICAgICBwYWdlU2l6ZTogIjEwIiwKICAgICAgICAgIHNob3dUb3RhbDogInRydWUiCiAgICAgICAgfQogICAgICB9OwogICAgICB2YXIgcXVlcnlzID0gW3sKICAgICAgICBwcm9wZXJ0eTogIm9yZ19pZF8iLAogICAgICAgIHZhbHVlOiB0aGlzLm9yZ0lkLAogICAgICAgIGdyb3VwOiAibWFpbiIsCiAgICAgICAgb3BlcmF0aW9uOiAiRVFVQUwiLAogICAgICAgIHJlbGF0aW9uOiAiQU5EIgogICAgICB9XTsKICAgICAgdmFyIHF1ZXJ5RmlsdGVyID0gewogICAgICAgIHBhZ2VCZWFuOiBwYWdlQmVhbiwKICAgICAgICBxdWVyeXM6IHF1ZXJ5cwogICAgICB9OwogICAgICB0aGlzLiRzdG9yZS5kaXNwYXRjaCgidXNlci9sb2FkVXNlcnNCeU9yZ0lkIiwgcXVlcnlGaWx0ZXIpOwogICAgfSwKICAgIGhhbmRsZVNpemVDaGFuZ2U6IGZ1bmN0aW9uIGhhbmRsZVNpemVDaGFuZ2Uoc2l6ZSkgewogICAgICAvL+avj+mhteS4i+aLieaYvuekuuaVsOaNrgogICAgICB0aGlzLiRzdG9yZS5kaXNwYXRjaCgidXNlci9zZXRQYWdpbmF0aW9uU2l6ZSIsIHNpemUpOwogICAgICB0aGlzLnNlYXJjaCgpOwogICAgfSwKICAgIGhhbmRsZUN1cnJlbnRDaGFuZ2U6IGZ1bmN0aW9uIGhhbmRsZUN1cnJlbnRDaGFuZ2UoY3VycmVudFBhZ2UpIHsKICAgICAgLy/ngrnlh7vnrKzlh6DpobUKICAgICAgdGhpcy4kc3RvcmUuZGlzcGF0Y2goInVzZXIvc2V0UGFnaW5hdGlvblBhZ2VOdW0iLCBjdXJyZW50UGFnZSk7CiAgICAgIHRoaXMuc2VhcmNoKCk7CiAgICB9LAogICAgLy/lm57ovabmn6Xor6IKICAgIHNlYXJjaEVudGVyRnVuOiBmdW5jdGlvbiBzZWFyY2hFbnRlckZ1bihlKSB7CiAgICAgIHZhciBrZXlDb2RlID0gd2luZG93LmV2ZW50ID8gZS5rZXlDb2RlIDogZS53aGljaDsKICAgICAgaWYgKGtleUNvZGUgPT0gMTMpIHsKICAgICAgICB0aGlzLnNlYXJjaCgiZmluZCIpOwogICAgICB9CiAgICB9LAogICAgLy8g5p+l6K+iCiAgICBzZWFyY2g6IGZ1bmN0aW9uIHNlYXJjaChzdHIpIHsKICAgICAgdmFyIF90aGlzMiA9IHRoaXM7CiAgICAgIGlmIChzdHIgPT0gImZpbmQiKSB7CiAgICAgICAgdGhpcy4kc3RvcmUuZGlzcGF0Y2goInVzZXIvc2V0UGFnaW5hdGlvblBhZ2VOdW0iLCAxKTsKICAgICAgfQogICAgICB2YXIgcXVlcnlzID0gW107IC8v5p+l6K+i5p2h5Lu2CiAgICAgIHZhciBxdWVyeUZpbHRlciA9IHt9OwogICAgICB2YXIgcGFnZUJlYW4gPSB7CiAgICAgICAgcGFnZUJlYW46IHRoaXMucGFnaW5hdGlvbgogICAgICB9OwogICAgICBpZiAodGhpcy50YWJsZURhdGEgPT0gIiIgJiYgdGhpcy5vcmdJZCA9PSAiIikgewogICAgICAgIHRoaXMuJHN0b3JlLmRpc3BhdGNoKCJ1c2VyL2xvYWRVc2Vyc0J5T3JnSWQiLCBwYWdlQmVhbikudGhlbihmdW5jdGlvbiAoKSB7CiAgICAgICAgICBfdGhpczIuc3luY0NoZWNrZWRTdGF0dXMoKTsKICAgICAgICB9KTsKICAgICAgfSBlbHNlIHsKICAgICAgICBpZiAodGhpcy5vcmdJZCAmJiB0aGlzLnRhYmxlRGF0YSA9PSAiIikgewogICAgICAgICAgcXVlcnlzLnB1c2goewogICAgICAgICAgICBwcm9wZXJ0eTogIm9yZ19pZF8iLAogICAgICAgICAgICB2YWx1ZTogdGhpcy5vcmdJZCwKICAgICAgICAgICAgZ3JvdXA6ICJtYWluMSIsCiAgICAgICAgICAgIG9wZXJhdGlvbjogIkVRVUFMIiwKICAgICAgICAgICAgcmVsYXRpb246ICJBTkQiCiAgICAgICAgICB9KTsKICAgICAgICB9IGVsc2UgaWYgKHRoaXMub3JnSWQgJiYgdGhpcy50YWJsZURhdGEgIT0gIiIpIHsKICAgICAgICAgIHF1ZXJ5cyA9IFt7CiAgICAgICAgICAgIHByb3BlcnR5OiAib3JnX2lkXyIsCiAgICAgICAgICAgIHZhbHVlOiB0aGlzLm9yZ0lkLAogICAgICAgICAgICBncm91cDogIm1haW4xIiwKICAgICAgICAgICAgb3BlcmF0aW9uOiAiRVFVQUwiLAogICAgICAgICAgICByZWxhdGlvbjogIkFORCIKICAgICAgICAgIH0sIHsKICAgICAgICAgICAgcHJvcGVydHk6ICJmdWxsbmFtZSIsCiAgICAgICAgICAgIHZhbHVlOiB0aGlzLnRhYmxlRGF0YSwKICAgICAgICAgICAgZ3JvdXA6ICJtYWluIiwKICAgICAgICAgICAgb3BlcmF0aW9uOiAiTElLRSIsCiAgICAgICAgICAgIHJlbGF0aW9uOiAiT1IiCiAgICAgICAgICB9LCB7CiAgICAgICAgICAgIHByb3BlcnR5OiAiYWNjb3VudCIsCiAgICAgICAgICAgIHZhbHVlOiB0aGlzLnRhYmxlRGF0YSwKICAgICAgICAgICAgZ3JvdXA6ICJtYWluIiwKICAgICAgICAgICAgb3BlcmF0aW9uOiAiTElLRSIsCiAgICAgICAgICAgIHJlbGF0aW9uOiAiT1IiCiAgICAgICAgICB9LCB7CiAgICAgICAgICAgIHByb3BlcnR5OiAiZW1haWwiLAogICAgICAgICAgICB2YWx1ZTogdGhpcy50YWJsZURhdGEsCiAgICAgICAgICAgIGdyb3VwOiAibWFpbiIsCiAgICAgICAgICAgIG9wZXJhdGlvbjogIkxJS0UiLAogICAgICAgICAgICByZWxhdGlvbjogIk9SIgogICAgICAgICAgfSwgewogICAgICAgICAgICBwcm9wZXJ0eTogIm1vYmlsZSIsCiAgICAgICAgICAgIHZhbHVlOiB0aGlzLnRhYmxlRGF0YSwKICAgICAgICAgICAgZ3JvdXA6ICJtYWluIiwKICAgICAgICAgICAgb3BlcmF0aW9uOiAiTElLRSIsCiAgICAgICAgICAgIHJlbGF0aW9uOiAiT1IiCiAgICAgICAgICB9XTsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgcXVlcnlzID0gW3sKICAgICAgICAgICAgcHJvcGVydHk6ICJmdWxsbmFtZSIsCiAgICAgICAgICAgIHZhbHVlOiB0aGlzLnRhYmxlRGF0YSwKICAgICAgICAgICAgZ3JvdXA6ICJtYWluIiwKICAgICAgICAgICAgb3BlcmF0aW9uOiAiTElLRSIsCiAgICAgICAgICAgIHJlbGF0aW9uOiAiT1IiCiAgICAgICAgICB9LCB7CiAgICAgICAgICAgIHByb3BlcnR5OiAiYWNjb3VudCIsCiAgICAgICAgICAgIHZhbHVlOiB0aGlzLnRhYmxlRGF0YSwKICAgICAgICAgICAgZ3JvdXA6ICJtYWluIiwKICAgICAgICAgICAgb3BlcmF0aW9uOiAiTElLRSIsCiAgICAgICAgICAgIHJlbGF0aW9uOiAiT1IiCiAgICAgICAgICB9LCB7CiAgICAgICAgICAgIHByb3BlcnR5OiAiZW1haWwiLAogICAgICAgICAgICB2YWx1ZTogdGhpcy50YWJsZURhdGEsCiAgICAgICAgICAgIGdyb3VwOiAibWFpbiIsCiAgICAgICAgICAgIG9wZXJhdGlvbjogIkxJS0UiLAogICAgICAgICAgICByZWxhdGlvbjogIk9SIgogICAgICAgICAgfSwgewogICAgICAgICAgICBwcm9wZXJ0eTogIm1vYmlsZSIsCiAgICAgICAgICAgIHZhbHVlOiB0aGlzLnRhYmxlRGF0YSwKICAgICAgICAgICAgZ3JvdXA6ICJtYWluIiwKICAgICAgICAgICAgb3BlcmF0aW9uOiAiTElLRSIsCiAgICAgICAgICAgIHJlbGF0aW9uOiAiT1IiCiAgICAgICAgICB9XTsKICAgICAgICB9CiAgICAgICAgcXVlcnlGaWx0ZXIgPSB7CiAgICAgICAgICBwYWdlQmVhbjogdGhpcy5wYWdpbmF0aW9uLAogICAgICAgICAgcXVlcnlzOiBxdWVyeXMKICAgICAgICB9OwogICAgICAgIHRoaXMuJHN0b3JlLmRpc3BhdGNoKCJ1c2VyL2xvYWRVc2Vyc0J5T3JnSWQiLCBxdWVyeUZpbHRlcikudGhlbihmdW5jdGlvbiAoKSB7CiAgICAgICAgICBfdGhpczIuc3luY0NoZWNrZWRTdGF0dXMoKTsKICAgICAgICB9KTsKICAgICAgfQogICAgfSwKICAgIC8v6YeN572uCiAgICByZXNldDogZnVuY3Rpb24gcmVzZXQoKSB7CiAgICAgIHRoaXMudGFibGVEYXRhID0gIiI7CiAgICAgIHRoaXMub3JnSWQgPSAiIjsKICAgICAgaWYgKHRoaXMuJHJlZnMudHJlZSkgewogICAgICAgIHRoaXMuJHJlZnMudHJlZS5zZXRDdXJyZW50S2V5KG51bGwpOwogICAgICB9CiAgICAgIHRoaXMuc2VhcmNoKCJmaW5kIik7CiAgICB9LAogICAgc2hvd0RpYWxvZzogZnVuY3Rpb24gc2hvd0RpYWxvZygpIHsKICAgICAgdGhpcy5yZXNldCgpOwogICAgICB0aGlzLnVzZXJEaWFsb2dWaXNpYmxlID0gdHJ1ZTsKICAgIH0sCiAgICAvL+mAmui/h+e7tOW6puiOt+WPlue7hOe7hwogICAgY2hhbmdlRGltZW5zaW9uOiBmdW5jdGlvbiBjaGFuZ2VEaW1lbnNpb24odmFsKSB7CiAgICAgIHRoaXMuJHN0b3JlLmRpc3BhdGNoKCJ1c2VyL2xvYWRPcmdzQnlEaW1lbnNpb24iLCB2YWwpOwogICAgfSwKICAgIHJhZGlvQ2hhbmdlSGFuZGxlcjogZnVuY3Rpb24gcmFkaW9DaGFuZ2VIYW5kbGVyKGluZGV4KSB7CiAgICAgIHRoaXMuc2VsZWN0VXNlcnMgPSBbdGhpcy51c2Vyc1tpbmRleF1dOwogICAgfSwKICAgIHVzZXJTZWxlY3Rpb25DaGFuZ2U6IGZ1bmN0aW9uIHVzZXJTZWxlY3Rpb25DaGFuZ2UoKSB7CiAgICAgICF0aGlzLnVwZGF0aW5nICYmIHRoaXMuc3luY1NlbGVjdGlvbjJzZWxlY3RVc2VycygpOwogICAgfSwKICAgIHVzZXJSb3dDbGljazogZnVuY3Rpb24gdXNlclJvd0NsaWNrKHJvdywgY29sdW1uLCBldmVudCkgewogICAgICB2YXIgX3RoaXMzID0gdGhpczsKICAgICAgLy8g5Y2V6YCJCiAgICAgIGlmICh0aGlzLmlzU2luZ2xlKSB7CiAgICAgICAgdGhpcy5zZWxlY3RVc2VycyA9IFtyb3ddOwogICAgICAgIHRoaXMuc2luZ2xlU2VsZWN0SWQgPSByb3cuaWQ7CiAgICAgIH0KICAgICAgLy8g5aSa6YCJCiAgICAgIGVsc2UgewogICAgICAgIHZhciBhcmcgPSB0aGlzLmdldFVuaXF1ZUFyZygpOwogICAgICAgIHZhciBfdGFnID0gdHJ1ZTsKICAgICAgICB0aGlzLiRyZWZzLnVzZXJUYWJsZSAmJiB0aGlzLiRyZWZzLnVzZXJUYWJsZS5zZWxlY3Rpb24gJiYgdGhpcy4kcmVmcy51c2VyVGFibGUuc2VsZWN0aW9uLmZvckVhY2goZnVuY3Rpb24gKG0pIHsKICAgICAgICAgIGlmIChtID09PSByb3cpIHsKICAgICAgICAgICAgLy8g5a+55LqO5bey6YCJ5Lit6K+l6KGM5pe277yM5Y+W5raI6YCJ5Lit54q25oCBCiAgICAgICAgICAgIF90aGlzMy4kcmVmcy51c2VyVGFibGUudG9nZ2xlUm93U2VsZWN0aW9uKHJvdywgZmFsc2UpOwogICAgICAgICAgICBfdGFnID0gZmFsc2U7CiAgICAgICAgICB9CiAgICAgICAgfSk7CiAgICAgICAgLy8g5a+55LqO5pyq6YCJ5Lit6K+l6KGM5pe277yM5YiH5o2i5Li66YCJ5Lit54q25oCBCiAgICAgICAgdGhpcy4kcmVmcy51c2VyVGFibGUgJiYgX3RhZyAmJiB0aGlzLiRyZWZzLnVzZXJUYWJsZS50b2dnbGVSb3dTZWxlY3Rpb24ocm93KTsKICAgICAgICB0aGlzLnN5bmNTZWxlY3Rpb24yc2VsZWN0VXNlcnMoKTsKICAgICAgfQogICAgfSwKICAgIC8vIOiOt+WPluW9k+WJjeeUqOS9nOWUr+S4gOmUrueahOWPguaVsAogICAgZ2V0VW5pcXVlQXJnOiBmdW5jdGlvbiBnZXRVbmlxdWVBcmcoKSB7CiAgICAgIHZhciBhcmcgPSAiZnVsbG5hbWUiOwogICAgICBpZiAodXRpbHMuZ2V0QW5kVmFsaWRQYXRoKHRoaXMuYmluZFNldCwgImlkIikpIHsKICAgICAgICBhcmcgPSAiaWQiOwogICAgICB9IGVsc2UgaWYgKHV0aWxzLmdldEFuZFZhbGlkUGF0aCh0aGlzLmJpbmRTZXQsICJhY2NvdW50IikpIHsKICAgICAgICBhcmcgPSAiYWNjb3VudCI7CiAgICAgIH0KICAgICAgcmV0dXJuIGFyZzsKICAgIH0sCiAgICBkaWFsb2dDb25maXJtOiBmdW5jdGlvbiBkaWFsb2dDb25maXJtKCkgewogICAgICB0aGlzLnVzZXJEaWFsb2dWaXNpYmxlID0gZmFsc2U7CiAgICAgIHRoaXMuc3luY0lucHV0VmFsdWUoKTsKICAgIH0sCiAgICAvLyDlkIzmraV1c2VyVGFibGXkuK3lt7LpgInooYzliLDlt7LpgInmlbDmja7kuK3ljrsKICAgIHN5bmNTZWxlY3Rpb24yc2VsZWN0VXNlcnM6IGZ1bmN0aW9uIHN5bmNTZWxlY3Rpb24yc2VsZWN0VXNlcnMoKSB7CiAgICAgIHZhciBfdGhpczQgPSB0aGlzOwogICAgICB2YXIgYXJnID0gdGhpcy5nZXRVbmlxdWVBcmcoKTsKICAgICAgLy8g5b2T5YmN5YiG6aG155qEb3JnVGFibGXooYzkuK3lt7LooqvpgInmi6nnmoTmlbDmja4KICAgICAgdmFyIGN1clBhZ2VBcnkgPSB0aGlzLnNlbGVjdFVzZXJzLmZpbHRlcihmdW5jdGlvbiAobSkgewogICAgICAgIHJldHVybiBfdGhpczQudXNlcnMuc29tZShmdW5jdGlvbiAobikgewogICAgICAgICAgcmV0dXJuIG1bYXJnXSA9PT0gblthcmddOwogICAgICAgIH0pOwogICAgICB9KTsKICAgICAgY3VyUGFnZUFyeS5mb3JFYWNoKGZ1bmN0aW9uIChpdGVtKSB7CiAgICAgICAgX3RoaXM0LnNlbGVjdFVzZXJzLnJlbW92ZShpdGVtKTsKICAgICAgfSk7CiAgICAgIHRoaXMuc2VsZWN0VXNlcnMgPSBbXS5jb25jYXQoX3RvQ29uc3VtYWJsZUFycmF5KHRoaXMuc2VsZWN0VXNlcnMpLCBfdG9Db25zdW1hYmxlQXJyYXkodGhpcy4kcmVmcy51c2VyVGFibGUuc2VsZWN0aW9uKSk7CiAgICB9LAogICAgLy8g5ZCM5q2l5bey6YCJ5pWw5o2u5Zyob3JnVGFibGXkuK3nmoRjaGVja2JveOWSjHJhZGlv55qE6YCJ5Lit54q25oCBCiAgICBzeW5jQ2hlY2tlZFN0YXR1czogZnVuY3Rpb24gc3luY0NoZWNrZWRTdGF0dXMoKSB7CiAgICAgIHZhciBhcmcgPSB0aGlzLmdldFVuaXF1ZUFyZygpOwogICAgICB2YXIgX21lID0gdGhpczsKICAgICAgc2V0VGltZW91dChmdW5jdGlvbiAoKSB7CiAgICAgICAgX21lLnVwZGF0aW5nID0gdHJ1ZTsKICAgICAgICBfbWUuc2luZ2xlU2VsZWN0SWQgPSBudWxsOwogICAgICAgIF9tZS4kcmVmcy51c2VyVGFibGUgJiYgX21lLiRyZWZzLnVzZXJUYWJsZS5jbGVhclNlbGVjdGlvbigpOwogICAgICAgIF9tZS51c2VycyAmJiBfbWUudXNlcnMuZm9yRWFjaChmdW5jdGlvbiAobSkgewogICAgICAgICAgaWYgKF9tZS5zZWxlY3RVc2VycyAmJiBfbWUuc2VsZWN0VXNlcnMuc29tZShmdW5jdGlvbiAobikgewogICAgICAgICAgICByZXR1cm4gblthcmddID09PSBtW2FyZ107CiAgICAgICAgICB9KSkgewogICAgICAgICAgICBfbWUuc2luZ2xlU2VsZWN0SWQgPSBtLmlkOwogICAgICAgICAgICBpZiAoIV9tZS5pc1NpbmdsZSAmJiBfbWUuJHJlZnMudXNlclRhYmxlKSB7CiAgICAgICAgICAgICAgX21lLiRyZWZzLnVzZXJUYWJsZS50b2dnbGVSb3dTZWxlY3Rpb24obSk7CiAgICAgICAgICAgIH0KICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgIGlmICghX21lLmlzU2luZ2xlICYmIF9tZS4kcmVmcy51c2VyVGFibGUpIHsKICAgICAgICAgICAgICBfbWUuJHJlZnMudXNlclRhYmxlLnRvZ2dsZVJvd1NlbGVjdGlvbihtLCBmYWxzZSk7CiAgICAgICAgICAgIH0KICAgICAgICAgIH0KICAgICAgICB9KTsKICAgICAgICBfbWUudXBkYXRpbmcgPSBmYWxzZTsKICAgICAgfSwgMjAwKTsKICAgIH0sCiAgICAvLyDlkIzmraXpgInmi6nnu5PmnpzliLDooajljZXkuIrvvIjkvJroh6rliqjkv67mraPooajljZXkuIrovpPlhaXmoYbnmoTpq5jluqbvvIkKICAgIHN5bmNJbnB1dFZhbHVlOiBmdW5jdGlvbiBzeW5jSW5wdXRWYWx1ZShpdGVtKSB7CiAgICAgIGlmIChpdGVtKSB7CiAgICAgICAgaWYgKHRoaXMuaW5wdXRWYWwgJiYgdGhpcy5pbnB1dFZhbC5jb25zdHJ1Y3RvciA9PSBBcnJheSkgewogICAgICAgICAgdGhpcy5zZWxlY3RVc2VycyA9IF90b0NvbnN1bWFibGVBcnJheSh0aGlzLmlucHV0VmFsKTsKICAgICAgICB9CiAgICAgICAgLy8g5Zyo6KGo5Y2V5LiK54K55Ye7WOWIoOmZpOW3sumAieaVsOaNrgogICAgICAgIHRoaXMuc2VsZWN0VXNlcnMucmVtb3ZlKGl0ZW0pOwogICAgICB9CiAgICAgIHZhciBzdWJJbmRleCA9IG51bGw7CiAgICAgIGlmICh0aGlzLiRlbCkgewogICAgICAgIHN1YkluZGV4ID0gdXRpbHMuZ2V0U29tZUF0dHJpYnV0ZUZyb21QYXJlbnRFbGVtZW50KHRoaXMuJGVsLCAiZGF0YS1pbmRleCIpOwogICAgICB9CiAgICAgIHRoaXMudXBkYXRpbmcgPSB0cnVlOwogICAgICBpZiAodGhpcy5iaW5kU2V0KSB7CiAgICAgICAgaWYgKCF1dGlscy5nZXRBbmRWYWxpZFBhdGgodGhpcy5iaW5kU2V0LCAiZnVsbG5hbWUiKSkgewogICAgICAgICAgdGhyb3cgImh0LXVzZXItc2VsZWN0b3LnmoRiaW5k5bGe5oCn5Lit5b+F6aG76YWN572uZnVsbG5hbWXlsZ7mgKcuIjsKICAgICAgICB9CiAgICAgICAgdmFyIG5hbWVBcnkgPSBbXTsKICAgICAgICB2YXIgaWRBcnkgPSBbXTsKICAgICAgICB2YXIgYWNjb3VudEFyeSA9IFtdOwogICAgICAgIHZhciBtb2JpbGVBcnIgPSBbXTsKICAgICAgICB2YXIgZW1haWxBcnIgPSBbXTsKICAgICAgICB0aGlzLnNlbGVjdFVzZXJzICYmIHRoaXMuc2VsZWN0VXNlcnMuZm9yRWFjaChmdW5jdGlvbiAobSkgewogICAgICAgICAgbmFtZUFyeS5wdXNoKG0uZnVsbG5hbWUpOwogICAgICAgICAgaWRBcnkucHVzaChtLmlkKTsKICAgICAgICAgIGFjY291bnRBcnkucHVzaChtLmFjY291bnQpOwogICAgICAgICAgbW9iaWxlQXJyLnB1c2gobS5tb2JpbGUpOwogICAgICAgICAgZW1haWxBcnIucHVzaChtLmVtYWlsKTsKICAgICAgICB9KTsKICAgICAgICB2YXIgaWRQYXRoID0gdXRpbHMuZ2V0QW5kVmFsaWRQYXRoKHRoaXMuYmluZFNldCwgImlkIik7CiAgICAgICAgaWRQYXRoICYmIHV0aWxzLnNldFZhbHVlQnlQYXRoKHRoaXMuJHBhcmVudCwgaWRQYXRoLCBpZEFyeS5qb2luKCIsIiksIHN1YkluZGV4KTsKICAgICAgICB2YXIgYWNjb3VudFBhdGggPSB1dGlscy5nZXRBbmRWYWxpZFBhdGgodGhpcy5iaW5kU2V0LCAiYWNjb3VudCIpOwogICAgICAgIGFjY291bnRQYXRoICYmIHV0aWxzLnNldFZhbHVlQnlQYXRoKHRoaXMuJHBhcmVudCwgYWNjb3VudFBhdGgsIGFjY291bnRBcnkuam9pbigiLCIpLCBzdWJJbmRleCk7CiAgICAgICAgdmFyIG1vYmlsZVBhdGggPSB1dGlscy5nZXRBbmRWYWxpZFBhdGgodGhpcy5iaW5kU2V0LCAibW9iaWxlIik7CiAgICAgICAgbW9iaWxlUGF0aCAmJiB1dGlscy5zZXRWYWx1ZUJ5UGF0aCh0aGlzLiRwYXJlbnQsIG1vYmlsZVBhdGgsIG1vYmlsZUFyci5qb2luKCIsIiksIHN1YkluZGV4KTsKICAgICAgICB2YXIgZW1haWxQYXRoID0gdXRpbHMuZ2V0QW5kVmFsaWRQYXRoKHRoaXMuYmluZFNldCwgImVtYWlsIik7CiAgICAgICAgZW1haWxQYXRoICYmIHV0aWxzLnNldFZhbHVlQnlQYXRoKHRoaXMuJHBhcmVudCwgZW1haWxQYXRoLCBlbWFpbEFyci5qb2luKCIsIiksIHN1YkluZGV4KTsKICAgICAgICB0aGlzLiRlbWl0KCJpbnB1dCIsIG5hbWVBcnkuam9pbigiLCIpKTsKICAgICAgfSBlbHNlIHsKICAgICAgICB0aGlzLiRlbWl0KCJpbnB1dCIsIHRoaXMuc2VsZWN0VXNlcnMpOwogICAgICB9CiAgICAgIHRoaXMudXBkYXRpbmcgPSBmYWxzZTsKICAgICAgdGhpcy5jYWxhY0lucHV0U3VmZml4SGVpZ2h0KCk7CiAgICB9LAogICAgZGlhbG9nQ2FuY2VsOiBmdW5jdGlvbiBkaWFsb2dDYW5jZWwoKSB7CiAgICAgIHRoaXMudXNlckRpYWxvZ1Zpc2libGUgPSBmYWxzZTsKICAgIH0sCiAgICBjbGVhckFsbFNlbGVjdFVzZXJzOiBmdW5jdGlvbiBjbGVhckFsbFNlbGVjdFVzZXJzKCkgewogICAgICB0aGlzLnNlbGVjdFVzZXJzID0gW107CiAgICAgIHRoaXMuc3luY0NoZWNrZWRTdGF0dXMoKTsKICAgICAgdGhpcy5zaW5nbGVTZWxlY3RJZCA9IG51bGw7CiAgICB9LAogICAgLy8g6LCD5pW05bey6YCJ5YiX6KGo5Lit5YWD57Sg55qE6aG65bqPCiAgICBtb3ZlU2VsZWN0VXNlcjogZnVuY3Rpb24gbW92ZVNlbGVjdFVzZXIoZGlyZWN0KSB7CiAgICAgIHZhciBfdGhpczUgPSB0aGlzOwogICAgICB2YXIgYXJ5ID0gdGhpcy4kcmVmcy5zZWxlY3RUcmVlLmdldENoZWNrZWROb2RlcygpOwogICAgICBpZiAoZGlyZWN0ID09ICJ1cCIpIHsKICAgICAgICBhcnkuZm9yRWFjaChmdW5jdGlvbiAobSkgewogICAgICAgICAgdmFyIGluZGV4ID0gX3RoaXM1LnNlbGVjdFVzZXJzLmluZGV4T2YobSwgMSk7CiAgICAgICAgICBpZiAoaW5kZXggPiAwKSB7CiAgICAgICAgICAgIHZhciBuZXdBcnkgPSBfdG9Db25zdW1hYmxlQXJyYXkoX3RoaXM1LnNlbGVjdFVzZXJzKTsKICAgICAgICAgICAgbmV3QXJ5W2luZGV4IC0gMV0gPSBfdGhpczUuc2VsZWN0VXNlcnNbaW5kZXhdOwogICAgICAgICAgICBuZXdBcnlbaW5kZXhdID0gX3RoaXM1LnNlbGVjdFVzZXJzW2luZGV4IC0gMV07CiAgICAgICAgICAgIF90aGlzNS5zZWxlY3RVc2VycyA9IG5ld0FyeTsKICAgICAgICAgIH0KICAgICAgICB9KTsKICAgICAgfSBlbHNlIGlmIChkaXJlY3QgPT0gImRvd24iKSB7CiAgICAgICAgZm9yICh2YXIgaSA9IGFyeS5sZW5ndGggLSAxLCBtOyBtID0gYXJ5W2ktLV07KSB7CiAgICAgICAgICB2YXIgaW5kZXggPSB0aGlzLnNlbGVjdFVzZXJzLmluZGV4T2YobSwgMCk7CiAgICAgICAgICBpZiAoaW5kZXggPiAtMSAmJiBpbmRleCA8IHRoaXMuc2VsZWN0VXNlcnMubGVuZ3RoIC0gMSkgewogICAgICAgICAgICB2YXIgbmV3QXJ5ID0gX3RvQ29uc3VtYWJsZUFycmF5KHRoaXMuc2VsZWN0VXNlcnMpOwogICAgICAgICAgICBuZXdBcnlbaW5kZXggKyAxXSA9IHRoaXMuc2VsZWN0VXNlcnNbaW5kZXhdOwogICAgICAgICAgICBuZXdBcnlbaW5kZXhdID0gdGhpcy5zZWxlY3RVc2Vyc1tpbmRleCArIDFdOwogICAgICAgICAgICB0aGlzLnNlbGVjdFVzZXJzID0gbmV3QXJ5OwogICAgICAgICAgfQogICAgICAgIH0KICAgICAgfQogICAgICBzZXRUaW1lb3V0KGZ1bmN0aW9uICgpIHsKICAgICAgICBfdGhpczUuJHJlZnMuc2VsZWN0VHJlZS5zZXRDaGVja2VkTm9kZXMoYXJ5KTsKICAgICAgfSk7CiAgICB9LAogICAgLy8g5Zyo5by55qGG5Lit55qE5bey6YCJ5pWw5o2u5Lit5Yig6Zmk5Yu+6YCJ55qE6aG5CiAgICByZW1vdmVTZWxlY3RVc2VyczogZnVuY3Rpb24gcmVtb3ZlU2VsZWN0VXNlcnMoKSB7CiAgICAgIHZhciBfdGhpczYgPSB0aGlzOwogICAgICB2YXIgYXJ5ID0gdGhpcy4kcmVmcy5zZWxlY3RUcmVlLmdldENoZWNrZWROb2RlcygpOwogICAgICBhcnkuZm9yRWFjaChmdW5jdGlvbiAoaXRlbSkgewogICAgICAgIF90aGlzNi5zZWxlY3RVc2Vycy5yZW1vdmUoaXRlbSk7CiAgICAgIH0pOwogICAgICB0aGlzLnN5bmNDaGVja2VkU3RhdHVzKCk7CiAgICB9LAogICAgLy8g5Zyo6KGo5Y2V55qE6L6T5YWl5qGG5Lit54K55Ye7WOWIoOmZpOS4gOadoeW3sumAieaVsOaNrgogICAgcmVtb3ZlU2VsZWN0VXNlcjogZnVuY3Rpb24gcmVtb3ZlU2VsZWN0VXNlcihpdGVtKSB7CiAgICAgIHRoaXMuc3luY0lucHV0VmFsdWUoaXRlbSk7CiAgICB9LAogICAgY2FsYWNJbnB1dFN1ZmZpeEhlaWdodDogZnVuY3Rpb24gY2FsYWNJbnB1dFN1ZmZpeEhlaWdodCgpIHsKICAgICAgdmFyIF90aGlzNyA9IHRoaXM7CiAgICAgIHNldFRpbWVvdXQoZnVuY3Rpb24gKCkgewogICAgICAgIGlmICghX3RoaXM3LiRyZWZzLnRhZ1NwYW5zKSByZXR1cm47CiAgICAgICAgaWYgKF90aGlzNy4kcmVmcy50YWdTcGFucy5vZmZzZXRIZWlnaHQpIHsKICAgICAgICAgIF90aGlzNy5pbnB1dFN1ZmZpeEhlaWdodCA9IF90aGlzNy4kcmVmcy50YWdTcGFucy5vZmZzZXRIZWlnaHQgKyA1OwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICBfdGhpczcuaW5wdXRTdWZmaXhIZWlnaHQgPSAzMDsKICAgICAgICB9CiAgICAgICAgLy8g6Kem5Y+R6aqM6K+BCiAgICAgICAgX3RoaXM3LiR2YWxpZGF0b3IudmFsaWRhdGUoKTsKICAgICAgfSwgMCk7CiAgICB9CiAgfQp9Ow=="},null]}