1 |
- {"remainingRequest":"E:\\boman-framwork\\ruoyi-ui\\node_modules\\thread-loader\\dist\\cjs.js!E:\\boman-framwork\\ruoyi-ui\\node_modules\\babel-loader\\lib\\index.js!E:\\boman-framwork\\ruoyi-ui\\node_modules\\cache-loader\\dist\\cjs.js??ref--0-0!E:\\boman-framwork\\ruoyi-ui\\node_modules\\vue-loader\\lib\\index.js??vue-loader-options!E:\\boman-framwork\\ruoyi-ui\\src\\views\\tool\\gen\\editTable.vue?vue&type=script&lang=js&","dependencies":[{"path":"E:\\boman-framwork\\ruoyi-ui\\src\\views\\tool\\gen\\editTable.vue","mtime":1621578953096},{"path":"E:\\boman-framwork\\ruoyi-ui\\node_modules\\cache-loader\\dist\\cjs.js","mtime":499162500000},{"path":"E:\\boman-framwork\\ruoyi-ui\\node_modules\\thread-loader\\dist\\cjs.js","mtime":499162500000},{"path":"E:\\boman-framwork\\ruoyi-ui\\node_modules\\babel-loader\\lib\\index.js","mtime":315532800000},{"path":"E:\\boman-framwork\\ruoyi-ui\\node_modules\\cache-loader\\dist\\cjs.js","mtime":499162500000},{"path":"E:\\boman-framwork\\ruoyi-ui\\node_modules\\vue-loader\\lib\\index.js","mtime":499162500000}],"contextDependencies":[],"result":[{"type":"Buffer","data":"base64:aW1wb3J0IF9jcmVhdGVGb3JPZkl0ZXJhdG9ySGVscGVyIGZyb20gIkU6L2JvbWFuLWZyYW13b3JrL3J1b3lpLXVpL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9jcmVhdGVGb3JPZkl0ZXJhdG9ySGVscGVyIjsKaW1wb3J0ICJjb3JlLWpzL21vZHVsZXMvZXMuYXJyYXkuZmlsdGVyLmpzIjsKaW1wb3J0ICJjb3JlLWpzL21vZHVsZXMvZXMuZnVuY3Rpb24ubmFtZS5qcyI7CmltcG9ydCAiY29yZS1qcy9tb2R1bGVzL2VzLmFycmF5LmNvbmNhdC5qcyI7CmltcG9ydCAiY29yZS1qcy9tb2R1bGVzL2VzLm9iamVjdC50by1zdHJpbmcuanMiOwppbXBvcnQgImNvcmUtanMvbW9kdWxlcy9lcy5zdHJpbmcuaXRlcmF0b3IuanMiOwppbXBvcnQgImNvcmUtanMvbW9kdWxlcy93ZWIuZG9tLWNvbGxlY3Rpb25zLml0ZXJhdG9yLmpzIjsKaW1wb3J0ICJjb3JlLWpzL21vZHVsZXMvZXMuYXJyYXkubWFwLmpzIjsKaW1wb3J0ICJjb3JlLWpzL21vZHVsZXMvZXMuYXJyYXkuc3BsaWNlLmpzIjsKLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KaW1wb3J0IHsgZ2V0R2VuVGFibGUsIHVwZGF0ZUdlblRhYmxlLCBkZWxQb3N0LCB0YWJMaXN0IGFzIF90YWJMaXN0LCBsaXN0VGFibGUsIGFkZEdlblRhYmxlLCBzZXRHZW5UYWJsZSwgZGVsR2VuVGFibGUsIGxpc3RBbGxDb2x1bW5zQnlUYWJsZUlkLCBnZW5UYWJsZUNvbHVtbkxpc3QsIHRhYmxlU3FsLCB6eEltcGxlbWVudCwgZ2V0UmVsb2FkLCBhZGRHZW5UYWJsZUNvbHVtbiwgZGVsR2VuVGFibGVDb2x1bW4sIHNldEdlblRhYmxlQ29sdW1uLCBnZXRHZW5UYWJsZUNvbHVtbiwgZ2V0QnlJZFdpdGhGb3JlaWduS2V5LCBsaXN0SW5kZXhmb3UsIHRhYmxlUXVlcnksIHF1ckdlblRhYmxlIH0gZnJvbSAiQC9hcGkvdG9vbC9nZW4iOwppbXBvcnQgeyBvcHRpb25zZWxlY3QgYXMgZ2V0RGljdE9wdGlvbnNlbGVjdCB9IGZyb20gIkAvYXBpL3N5c3RlbS9kaWN0L3R5cGUiOwppbXBvcnQgeyBsaXN0TWVudSBhcyBnZXRNZW51VHJlZXNlbGVjdCB9IGZyb20gIkAvYXBpL3N5c3RlbS9tZW51IjsKaW1wb3J0IGJhc2ljSW5mb0Zvcm0gZnJvbSAiLi9iYXNpY0luZm9Gb3JtIjsKaW1wb3J0IGdlbkluZm9Gb3JtIGZyb20gIi4vZ2VuSW5mb0Zvcm0iOwppbXBvcnQgU29ydGFibGUgZnJvbSAnc29ydGFibGVqcyc7CnZhciBfdGhpcyA9ICcnOwpleHBvcnQgZGVmYXVsdCB7CiAgbmFtZTogIkdlbkVkaXQiLAogIGNvbXBvbmVudHM6IHsKICAgIGJhc2ljSW5mb0Zvcm06IGJhc2ljSW5mb0Zvcm0sCiAgICBnZW5JbmZvRm9ybTogZ2VuSW5mb0Zvcm0KICB9LAogIGRhdGE6IGZ1bmN0aW9uIGRhdGEoKSB7CiAgICBfdGhpcyA9IHRoaXM7CiAgICByZXR1cm4gewogICAgICBGb3JlTmFtZTogJycsCiAgICAgIHRvdGFscXVlcnk6IDAsCiAgICAgIC8vIOWkmuihjOafpeivogogICAgICB0aXRsZW9wZW5xdWVyeTogJ+W/q+mAn+afpeivoicsCiAgICAgIC8vIOiOt+WPlui+k+WFpeahhueahOWPguaVsAogICAgICBxdWVyeUxpc3I6IHsKICAgICAgICB0YWJsZTogJ2dlbl90YWJsZV9jb2x1bW4nCiAgICAgIH0sCiAgICAgIGFsaWVtZzogewogICAgICAgIHRhYmxlOiAnZ2VuX3RhYmxlX2NvbHVtbicsCiAgICAgICAgb3JkZXJCeTogJ2NyZWF0ZV90aW1lIGRlc2MnLAogICAgICAgIHBhZ2VObzogMSwKICAgICAgICBwYWdlU2l6ZTogMTAsCiAgICAgICAgZml4ZWREYXRhOiB7CiAgICAgICAgICBjb25kaXRpb246ICcnCiAgICAgICAgfQogICAgICB9LAogICAgICBwb3N0TGlzdHF1ZXJ5OiB7fSwKICAgICAgcXVlcnlEYXRhOiB7fSwKICAgICAgb3BlbnF1ZXJ5OiBmYWxzZSwKICAgICAgZm9ybXF1ZXJ5OiB7fSwKICAgICAgLy8g5a2X5q615L+h5oGvCiAgICAgIHRhYmxlU3FsRGF0YTogW10sCiAgICAgIGNvbHVtTGlzdDogW10sCiAgICAgIGNvbHVtSFJMaXN0OiBbXSwKICAgICAgZm9yZWlnbktleTogW10sCiAgICAgIG9wZW5aZDogZmFsc2UsCiAgICAgIGZvcm1aZDoge30sCiAgICAgIHJ1bGVzWmQ6IHsKICAgICAgICBjb2x1bW5OYW1lOiBbewogICAgICAgICAgcmVxdWlyZWQ6IHRydWUsCiAgICAgICAgICBtZXNzYWdlOiAi6K+36L6T5YWl5a2X5q615ZCNIiwKICAgICAgICAgIHRyaWdnZXI6ICJibHVyIgogICAgICAgIH1dLAogICAgICAgIGNvbHVtbkNvbW1lbnQ6IFt7CiAgICAgICAgICByZXF1aXJlZDogdHJ1ZSwKICAgICAgICAgIG1lc3NhZ2U6ICLor7fovpPlhaXlrZfmrrXmj4/ov7AiLAogICAgICAgICAgdHJpZ2dlcjogImJsdXIiCiAgICAgICAgfV0sCiAgICAgICAgY29sdW1uVHlwZTogW3sKICAgICAgICAgIHJlcXVpcmVkOiB0cnVlLAogICAgICAgICAgbWVzc2FnZTogIuivt+i+k+WFpeeJqeeQhuexu+WeiyIsCiAgICAgICAgICB0cmlnZ2VyOiAiYmx1ciIKICAgICAgICB9XSwKICAgICAgICBtYXNrOiBbewogICAgICAgICAgcmVxdWlyZWQ6IHRydWUsCiAgICAgICAgICBtZXNzYWdlOiAi6K+36L6T5YWl5a2X5q615pi+56S66KeE5YiZIiwKICAgICAgICAgIHRyaWdnZXI6ICJibHVyIgogICAgICAgIH1dLAogICAgICAgIHNvcnQ6IFt7CiAgICAgICAgICByZXF1aXJlZDogdHJ1ZSwKICAgICAgICAgIG1lc3NhZ2U6ICLor7fovpPlhaXluo/lj7ciLAogICAgICAgICAgdHJpZ2dlcjogImJsdXIiCiAgICAgICAgfV0KICAgICAgfSwKICAgICAgbG9hZGluZ1pkOiAnJywKICAgICAgLy8g5YWz6IGU6KGoCiAgICAgIHRpdGxlOiAiIiwKICAgICAgbG9hZGluZzogZmFsc2UsCiAgICAgIG9wZW46IGZhbHNlLAogICAgICBmb3JtOiB7fSwKICAgICAgcnVsZXM6IHsKICAgICAgICByZWxhdGlvblBhcmVudElkOiBbewogICAgICAgICAgcmVxdWlyZWQ6IHRydWUsCiAgICAgICAgICBtZXNzYWdlOiAi6K+36YCJ5oup5YWz6IGU6KGoIiwKICAgICAgICAgIHRyaWdnZXI6ICJibHVyIgogICAgICAgIH1dLAogICAgICAgIHJlbGF0aW9uQ2hpbGRJZDogW3sKICAgICAgICAgIHJlcXVpcmVkOiB0cnVlLAogICAgICAgICAgbWVzc2FnZTogIuivt+mAieaLqeWtl+autSIsCiAgICAgICAgICB0cmlnZ2VyOiAiYmx1ciIKICAgICAgICB9XSwKICAgICAgICByZWxhdGlvblR5cGU6IFt7CiAgICAgICAgICByZXF1aXJlZDogdHJ1ZSwKICAgICAgICAgIG1lc3NhZ2U6ICLor7fpgInmi6nlhbPogZTmnaHku7YiLAogICAgICAgICAgdHJpZ2dlcjogImJsdXIiCiAgICAgICAgfV0KICAgICAgfSwKICAgICAgcG9zdExpc3Q6IFtdLAogICAgICB0b3RhbDogMSwKICAgICAgdGFibGVMaXN0OiB7fSwKICAgICAgLy8g5YWz6IGU5pa55byPCiAgICAgIC8vIOWGheW1jOe8lui+kQogICAgICBnZW5MaXN0OiBbXSwKICAgICAgZ2xiUGFyYW1zOiB7CiAgICAgICAgcGFnZU51bTogMSwKICAgICAgICBwYWdlU2l6ZTogMTAwMDAwMDAKICAgICAgfSwKICAgICAgLy8g5YWz6IGU6KGo5p+l6K+i5Y+C5pWwCiAgICAgIHF1ZXJ5UGFyYW1zOiB7CiAgICAgICAgcmVsYXRpb25QYXJlbnRJZDogdGhpcy4kcm91dGUucGFyYW1zICYmIHRoaXMuJHJvdXRlLnBhcmFtcy50YWJsZUlkLAogICAgICAgIHBhZ2VOdW06IDEsCiAgICAgICAgcGFnZVNpemU6IDEwCiAgICAgIH0sCiAgICAgIC8vIOmAieS4remAiemhueWNoeeahCBuYW1lCiAgICAgIGFjdGl2ZU5hbWU6ICJiYXNpYyIsCiAgICAgIC8vIOihqOagvOeahOmrmOW6pgogICAgICB0YWJsZUhlaWdodDogZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LnNjcm9sbEhlaWdodCAtIDI0NSArICJweCIsCiAgICAgIC8vIOihqOS/oeaBrwogICAgICB0YWJsZXM6IFtdLAogICAgICAvLyDooajliJfkv6Hmga8KICAgICAgY2xvdW1uczogW10sCiAgICAgIC8vIOWtl+WFuOS/oeaBrwogICAgICBkaWN0T3B0aW9uczogW10sCiAgICAgIC8vIOiPnOWNleS/oeaBrwogICAgICBtZW51czogW10sCiAgICAgIC8vIOihqOivpue7huS/oeaBrwogICAgICBpbmZvOiB7fSwKICAgICAgLy8g6YCJ5Lit5pWw57uECiAgICAgIGlkczogW10sCiAgICAgIGlkczE6IFtdLAogICAgICAvLyDpnZ7ljZXkuKrnpoHnlKgKICAgICAgc2luZ2xlOiB0cnVlLAogICAgICBzaW5nbGUxOiB0cnVlLAogICAgICAvLyDpnZ7lpJrkuKrnpoHnlKgKICAgICAgbXVsdGlwbGU6IHRydWUsCiAgICAgIG11bHRpcGxlMTogdHJ1ZSwKICAgICAgLy8g5YWz6IGU5pa55byPCiAgICAgIHJlbGF0aW9uVHlwZTogW10sCiAgICAgIC8vIOWGheW1jOe8lui+kQogICAgICBlbWJlZEVkaXQ6IFtdCiAgICB9OwogIH0sCiAgZmlsdGVyczogewogICAgemRGbjogZnVuY3Rpb24gemRGbihkYXRhKSB7CiAgICAgIHZhciBpcyA9ICcnOwoKICAgICAgdmFyIF9pdGVyYXRvciA9IF9jcmVhdGVGb3JPZkl0ZXJhdG9ySGVscGVyKF90aGlzLmNvbHVtTGlzdCksCiAgICAgICAgICBfc3RlcDsKCiAgICAgIHRyeSB7CiAgICAgICAgZm9yIChfaXRlcmF0b3IucygpOyAhKF9zdGVwID0gX2l0ZXJhdG9yLm4oKSkuZG9uZTspIHsKICAgICAgICAgIHZhciBpdGVtID0gX3N0ZXAudmFsdWU7CgogICAgICAgICAgaWYgKGl0ZW0uY29sdW1uSWQgPT0gZGF0YSkgewogICAgICAgICAgICBpcyA9IGl0ZW0uY29sdW1uTmFtZTsKICAgICAgICAgIH0KICAgICAgICB9CiAgICAgIH0gY2F0Y2ggKGVycikgewogICAgICAgIF9pdGVyYXRvci5lKGVycik7CiAgICAgIH0gZmluYWxseSB7CiAgICAgICAgX2l0ZXJhdG9yLmYoKTsKICAgICAgfQoKICAgICAgcmV0dXJuIGlzOwogICAgfSwKICAgIHJlbGF0aW9uVHlwZUZuOiBmdW5jdGlvbiByZWxhdGlvblR5cGVGbihkYXRhKSB7CiAgICAgIHZhciBpcyA9ICcnOwoKICAgICAgdmFyIF9pdGVyYXRvcjIgPSBfY3JlYXRlRm9yT2ZJdGVyYXRvckhlbHBlcihfdGhpcy5yZWxhdGlvblR5cGUpLAogICAgICAgICAgX3N0ZXAyOwoKICAgICAgdHJ5IHsKICAgICAgICBmb3IgKF9pdGVyYXRvcjIucygpOyAhKF9zdGVwMiA9IF9pdGVyYXRvcjIubigpKS5kb25lOykgewogICAgICAgICAgdmFyIGl0ZW0gPSBfc3RlcDIudmFsdWU7CgogICAgICAgICAgaWYgKGl0ZW0uZGljdFZhbHVlID09IGRhdGEpIHsKICAgICAgICAgICAgaXMgPSBpdGVtLmRpY3RMYWJlbDsKICAgICAgICAgIH0KICAgICAgICB9CiAgICAgIH0gY2F0Y2ggKGVycikgewogICAgICAgIF9pdGVyYXRvcjIuZShlcnIpOwogICAgICB9IGZpbmFsbHkgewogICAgICAgIF9pdGVyYXRvcjIuZigpOwogICAgICB9CgogICAgICByZXR1cm4gaXM7CiAgICB9LAogICAgZW1iZWRFZGl0Rm46IGZ1bmN0aW9uIGVtYmVkRWRpdEZuKGRhdGEpIHsKICAgICAgdmFyIGlzID0gJyc7CgogICAgICB2YXIgX2l0ZXJhdG9yMyA9IF9jcmVhdGVGb3JPZkl0ZXJhdG9ySGVscGVyKF90aGlzLmVtYmVkRWRpdCksCiAgICAgICAgICBfc3RlcDM7CgogICAgICB0cnkgewogICAgICAgIGZvciAoX2l0ZXJhdG9yMy5zKCk7ICEoX3N0ZXAzID0gX2l0ZXJhdG9yMy5uKCkpLmRvbmU7KSB7CiAgICAgICAgICB2YXIgaXRlbSA9IF9zdGVwMy52YWx1ZTsKCiAgICAgICAgICBpZiAoaXRlbS5kaWN0VmFsdWUgPT0gZGF0YSkgewogICAgICAgICAgICBpcyA9IGl0ZW0uZGljdExhYmVsOwogICAgICAgICAgfQogICAgICAgIH0KICAgICAgfSBjYXRjaCAoZXJyKSB7CiAgICAgICAgX2l0ZXJhdG9yMy5lKGVycik7CiAgICAgIH0gZmluYWxseSB7CiAgICAgICAgX2l0ZXJhdG9yMy5mKCk7CiAgICAgIH0KCiAgICAgIHJldHVybiBpczsKICAgIH0KICB9LAogIGNyZWF0ZWQ6IGZ1bmN0aW9uIGNyZWF0ZWQoKSB7CiAgICB2YXIgX3RoaXMyID0gdGhpczsKCiAgICB2YXIgdGFibGVJZCA9IHRoaXMuJHJvdXRlLnBhcmFtcyAmJiB0aGlzLiRyb3V0ZS5wYXJhbXMudGFibGVJZDsKCiAgICBpZiAodGFibGVJZCkgewogICAgICAvLyDojrflj5booajor6bnu4bkv6Hmga8KICAgICAgZ2V0R2VuVGFibGUodGFibGVJZCkudGhlbihmdW5jdGlvbiAocmVzKSB7CiAgICAgICAgX3RoaXMyLmNsb3VtbnMgPSByZXMuZGF0YS5yb3dzOwogICAgICAgIF90aGlzMi5pbmZvID0gcmVzLmRhdGEuaW5mbzsKICAgICAgICBjb25zb2xlLmxvZyhfdGhpczIuaW5mbywgMzM0NTYpOwogICAgICAgIF90aGlzMi50YWJsZXMgPSByZXMuZGF0YS50YWJsZXM7CiAgICAgIH0pOyAvL+afpeivouaVsOaNruW6k3NxbAoKICAgICAgdGFibGVTcWwodGFibGVJZCkudGhlbihmdW5jdGlvbiAocmVzKSB7CiAgICAgICAgaWYgKHJlcy5kYXRhKSB7CiAgICAgICAgICBfdGhpczIudGFibGVTcWxEYXRhID0gcmVzLmRhdGE7CiAgICAgICAgfQogICAgICB9KTsKICAgICAgLyoqIOafpeivouWtl+WFuOS4i+aLieWIl+ihqCAqLwoKICAgICAgZ2V0RGljdE9wdGlvbnNlbGVjdCgpLnRoZW4oZnVuY3Rpb24gKHJlc3BvbnNlKSB7CiAgICAgICAgX3RoaXMyLmRpY3RPcHRpb25zID0gcmVzcG9uc2UuZGF0YTsKICAgICAgfSk7IC8vIOWFs+iBlEhS5a2X5q61CgogICAgICBnZW5UYWJsZUNvbHVtbkxpc3QoewogICAgICAgIHRhYmxlSWQ6IHRhYmxlSWQsCiAgICAgICAgaHRtbFR5cGU6ICdIUicKICAgICAgfSkudGhlbihmdW5jdGlvbiAocmVzcG9uc2UpIHsKICAgICAgICBfdGhpczIuY29sdW1IUkxpc3QgPSByZXNwb25zZS5yb3dzOwogICAgICB9KTsgLy8g5YWz6IGU5a2X5q61CgogICAgICBsaXN0QWxsQ29sdW1uc0J5VGFibGVJZCh7CiAgICAgICAgaWQ6IHRhYmxlSWQKICAgICAgfSkudGhlbihmdW5jdGlvbiAocmVzcG9uc2UpIHsKICAgICAgICBfdGhpczIuY29sdW1MaXN0ID0gcmVzcG9uc2UuZGF0YTsKICAgICAgfSk7IC8vIOWFs+iBlOihqOaVsOaNrgoKICAgICAgbGlzdFRhYmxlKHRoaXMuZ2xiUGFyYW1zKS50aGVuKGZ1bmN0aW9uIChyZXNwb25zZSkgewogICAgICAgIF90aGlzMi50YWJsZUxpc3QgPSByZXNwb25zZTsKICAgICAgfSk7CiAgICAgIC8qKiDmn6Xor6Loj5zljZXkuIvmi4nliJfooaggKi8KICAgICAgLy8gZ2V0TWVudVRyZWVzZWxlY3QoKS50aGVuKHJlc3BvbnNlID0+IHsKICAgICAgLy8gICB0aGlzLm1lbnVzID0gdGhpcy5oYW5kbGVUcmVlKHJlc3BvbnNlLmRhdGEsICJtZW51SWQiKTsKICAgICAgLy8gfSk7CiAgICAgIC8vIOWFs+iBlOaWueW8jwoKICAgICAgdGhpcy5nZXREaWN0cygicmVsYXRpb25fdHlwZSIpLnRoZW4oZnVuY3Rpb24gKHJlc3BvbnNlKSB7CiAgICAgICAgX3RoaXMyLnJlbGF0aW9uVHlwZSA9IHJlc3BvbnNlLmRhdGE7CiAgICAgIH0pOyAvLyDlhoXltYznvJbovpEKCiAgICAgIHRoaXMuZ2V0RGljdHMoImVtYmVkX2VkaXQiKS50aGVuKGZ1bmN0aW9uIChyZXNwb25zZSkgewogICAgICAgIF90aGlzMi5lbWJlZEVkaXQgPSByZXNwb25zZS5kYXRhOwogICAgICB9KTsKICAgIH0KCiAgICB0aGlzLnRhYkxpc3QoKTsKICB9LAogIG1ldGhvZHM6IHsKICAgIHRhYmxlQnRuOiBmdW5jdGlvbiB0YWJsZUJ0bihyb3cpIHsKICAgICAgdGhpcy5vcGVucXVlcnkgPSBmYWxzZTsKICAgICAgdGhpcy5Gb3JlTmFtZSA9IHJvdy5jb2x1bW5fbmFtZTsKICAgICAgdGhpcy5mb3JtWmQuZm9yZWlnbktleSA9IHJvdy5pZDsKICAgIH0sCiAgICBma3pkRm46IGZ1bmN0aW9uIGZremRGbigpIHsKICAgICAgdGhpcy5xdWVyeWVkaXQoKTsKICAgICAgdGhpcy5nZXRMaXNhaWwoKTsKICAgICAgdGhpcy5vcGVucXVlcnkgPSB0cnVlOwogICAgfSwKICAgIGNoYW5nZUZuOiBmdW5jdGlvbiBjaGFuZ2VGbihvYmopIHsKICAgICAgY29uc29sZS5sb2cob2JqKTsKCiAgICAgIGZvciAodmFyIGtleSBpbiBvYmopIHsKICAgICAgICB0aGlzLmZvcm1xdWVyeS5maXhlZERhdGFba2V5XSA9IG9ialtrZXldOwogICAgICB9CiAgICB9LAogICAgLy8g5b+r6YCf5p+l6K+iCiAgICBxdWVyeWVkaXQ6IGZ1bmN0aW9uIHF1ZXJ5ZWRpdCgpIHsKICAgICAgdmFyIF90aGlzMyA9IHRoaXM7CgogICAgICB0aGlzLmxvYWRpbmcgPSB0cnVlOwogICAgICB0YWJsZVF1ZXJ5KHRoaXMucXVlcnlMaXNyKS50aGVuKGZ1bmN0aW9uIChyZXNwb25zZSkgewogICAgICAgIHZhciBkYXRhID0gcmVzcG9uc2UuZGF0YTsKICAgICAgICBfdGhpczMucXVlcnlEYXRhID0gZGF0YTsKICAgICAgICBfdGhpczMubG9hZGluZyA9IGZhbHNlOwogICAgICB9KTsKICAgIH0sCiAgICBoYW5kbGVRdWVyeTogZnVuY3Rpb24gaGFuZGxlUXVlcnkoKSB7CiAgICAgIHZhciBfaXRlcmF0b3I0ID0gX2NyZWF0ZUZvck9mSXRlcmF0b3JIZWxwZXIodGhpcy5xdWVyeURhdGEucXVlcnlMaXN0KSwKICAgICAgICAgIF9zdGVwNDsKCiAgICAgIHRyeSB7CiAgICAgICAgZm9yIChfaXRlcmF0b3I0LnMoKTsgIShfc3RlcDQgPSBfaXRlcmF0b3I0Lm4oKSkuZG9uZTspIHsKICAgICAgICAgIHZhciBpdGVtID0gX3N0ZXA0LnZhbHVlOwoKICAgICAgICAgIGlmIChpdGVtLmh0bWxUeXBlID09ICdjaGVja2JveCcgfHwgaXRlbS5odG1sVHlwZSA9PSAnaW1hZ2VVcGxvYWQnIHx8IGl0ZW0uaHRtbFR5cGUgPT0gJ2ZpbGVVcGxvYWQnKSB7CiAgICAgICAgICAgIHRoaXMuZm9ybXF1ZXJ5W2l0ZW0uY29sdW1uTmFtZV0gPSB0aGlzLiRyZWZzW2l0ZW0uY29sdW1uTmFtZV1bMF0uY29uZmlnOwogICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgdGhpcy5mb3JtcXVlcnlbaXRlbS5jb2x1bW5OYW1lXSA9IHRoaXMuJHJlZnNbaXRlbS5jb2x1bW5OYW1lXVswXS5jb25maWdbaXRlbS5jb2x1bW5OYW1lXTsKICAgICAgICAgIH0KICAgICAgICB9CiAgICAgIH0gY2F0Y2ggKGVycikgewogICAgICAgIF9pdGVyYXRvcjQuZShlcnIpOwogICAgICB9IGZpbmFsbHkgewogICAgICAgIF9pdGVyYXRvcjQuZigpOwogICAgICB9CgogICAgICB0aGlzLmFsaWVtZy5maXhlZERhdGEuY29uZGl0aW9uID0gdGhpcy5mb3JtcXVlcnk7CiAgICAgIHRoaXMuZ2V0TGlzYWlsKCk7CiAgICB9LAogICAgLy8g5b+r6YCf5p+l6K+i5YiX6KGoCiAgICBnZXRMaXNhaWw6IGZ1bmN0aW9uIGdldExpc2FpbCgpIHsKICAgICAgdmFyIF90aGlzNCA9IHRoaXM7CgogICAgICB0aGlzLmxvYWRpbmcgPSB0cnVlOwogICAgICBsaXN0SW5kZXhmb3UodGhpcy5hbGllbWcpLnRoZW4oZnVuY3Rpb24gKHJlc3BvbnNlKSB7CiAgICAgICAgaWYgKHJlc3BvbnNlLmRhdGEpIHsKICAgICAgICAgIC8vIHRoaXMudGFibGVEYXRhYWxpZCA9IHJlc3BvbnNlLmRhdGEudGFibGVIZWFkTGlzdDsKICAgICAgICAgIF90aGlzNC5wb3N0TGlzdHF1ZXJ5ID0gcmVzcG9uc2UuZGF0YTsKCiAgICAgICAgICBfdGhpczQucG9zdExpc3RxdWVyeS5yb3dzLmZpbHRlcihmdW5jdGlvbiAocm91dGUpIHsKICAgICAgICAgICAgaWYgKHJvdXRlLnRhYmxlX2lkKSB7CiAgICAgICAgICAgICAgcm91dGUudGFibGVfaWQgPSByb3V0ZS50YWJsZV9pZC5uYW1lOwogICAgICAgICAgICB9CiAgICAgICAgICB9KTsKCiAgICAgICAgICBfdGhpczQudG90YWxxdWVyeSA9IHJlc3BvbnNlLmRhdGEudG90YWw7CiAgICAgICAgfQoKICAgICAgICBfdGhpczQubG9hZGluZyA9IGZhbHNlOwogICAgICB9KTsKICAgIH0sCiAgICBzdWJtaXRGb3JtWmQ6IGZ1bmN0aW9uIHN1Ym1pdEZvcm1aZCgpIHsKICAgICAgdmFyIF90aGlzNSA9IHRoaXM7CgogICAgICB0aGlzLiRyZWZzWyJmb3JtWmQiXS52YWxpZGF0ZShmdW5jdGlvbiAodmFsaWQpIHsKICAgICAgICBpZiAodmFsaWQpIHsKICAgICAgICAgIHZhciB0YWJsZUlkID0gX3RoaXM1LiRyb3V0ZS5wYXJhbXMgJiYgX3RoaXM1LiRyb3V0ZS5wYXJhbXMudGFibGVJZDsKICAgICAgICAgIF90aGlzNS5mb3JtWmQudGFibGVJZCA9IHRhYmxlSWQ7CgogICAgICAgICAgaWYgKF90aGlzNS5mb3JtWmQuaWQgIT0gdW5kZWZpbmVkKSB7CiAgICAgICAgICAgIHNldEdlblRhYmxlQ29sdW1uKF90aGlzNS5mb3JtWmQpLnRoZW4oZnVuY3Rpb24gKHJlc3BvbnNlKSB7CiAgICAgICAgICAgICAgX3RoaXM1Lm1zZ1N1Y2Nlc3MoIuS/ruaUueaIkOWKnyIpOwoKICAgICAgICAgICAgICBfdGhpczUub3BlblpkID0gZmFsc2U7IC8vIOiOt+WPluihqOivpue7huS/oeaBrwoKICAgICAgICAgICAgICBnZXRHZW5UYWJsZSh0YWJsZUlkKS50aGVuKGZ1bmN0aW9uIChyZXMpIHsKICAgICAgICAgICAgICAgIF90aGlzNS5jbG91bW5zID0gcmVzLmRhdGEucm93czsKICAgICAgICAgICAgICAgIF90aGlzNS5pbmZvID0gcmVzLmRhdGEuaW5mbzsKICAgICAgICAgICAgICAgIF90aGlzNS50YWJsZXMgPSByZXMuZGF0YS50YWJsZXM7CiAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgIH0pOwogICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgYWRkR2VuVGFibGVDb2x1bW4oX3RoaXM1LmZvcm1aZCkudGhlbihmdW5jdGlvbiAocmVzcG9uc2UpIHsKICAgICAgICAgICAgICBfdGhpczUubXNnU3VjY2Vzcygi5paw5aKe5oiQ5YqfIik7CgogICAgICAgICAgICAgIF90aGlzNS5vcGVuWmQgPSBmYWxzZTsgLy8g6I635Y+W6KGo6K+m57uG5L+h5oGvCgogICAgICAgICAgICAgIGdldEdlblRhYmxlKHRhYmxlSWQpLnRoZW4oZnVuY3Rpb24gKHJlcykgewogICAgICAgICAgICAgICAgX3RoaXM1LmNsb3VtbnMgPSByZXMuZGF0YS5yb3dzOwogICAgICAgICAgICAgICAgX3RoaXM1LmluZm8gPSByZXMuZGF0YS5pbmZvOwogICAgICAgICAgICAgICAgX3RoaXM1LnRhYmxlcyA9IHJlcy5kYXRhLnRhYmxlczsKICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgfSk7CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICB9KTsKICAgIH0sCiAgICBzeENyZWFCdG46IGZ1bmN0aW9uIHN4Q3JlYUJ0bigpIHsKICAgICAgdmFyIF90aGlzNiA9IHRoaXM7CgogICAgICB2YXIgdGFibGVJZCA9IHRoaXMuJHJvdXRlLnBhcmFtcyAmJiB0aGlzLiRyb3V0ZS5wYXJhbXMudGFibGVJZDsKICAgICAgZ2V0UmVsb2FkKHsKICAgICAgICB0YWJsZUlkOiB0YWJsZUlkLAogICAgICAgIGNyZWF0ZVNxbDogdGhpcy50YWJsZVNxbERhdGEuY3JlYXRlU3FsLAogICAgICAgIGNyZWF0ZUxvZzogdGhpcy50YWJsZVNxbERhdGEuY3JlYXRlTG9nLAogICAgICAgIGlkOiB0aGlzLnRhYmxlU3FsRGF0YS5pZAogICAgICB9KS50aGVuKGZ1bmN0aW9uIChyZXMpIHsKICAgICAgICBfdGhpczYubXNnU3VjY2Vzcygn5Yi35paw5oiQ5YqfJyk7IC8v5p+l6K+i5pWw5o2u5bqTc3FsCgoKICAgICAgICB0YWJsZVNxbCh0YWJsZUlkKS50aGVuKGZ1bmN0aW9uIChyZXMpIHsKICAgICAgICAgIGlmIChyZXMuZGF0YSkgewogICAgICAgICAgICBfdGhpczYudGFibGVTcWxEYXRhID0gcmVzLmRhdGE7CiAgICAgICAgICB9CiAgICAgICAgfSk7CiAgICAgIH0pOwogICAgfSwKICAgIHp4Q3JlYUJ0bjogZnVuY3Rpb24genhDcmVhQnRuKCkgewogICAgICB2YXIgX3RoaXMgPSB0aGlzOwoKICAgICAgdGhpcy4kY29uZmlybSgn5piv5ZCm56Gu6K6k5omn6KGM5Yib5bu66K+t5Y+lPycsICLorablkYoiLCB7CiAgICAgICAgY29uZmlybUJ1dHRvblRleHQ6ICLnoa7lrpoiLAogICAgICAgIGNhbmNlbEJ1dHRvblRleHQ6ICLlj5bmtogiLAogICAgICAgIHR5cGU6ICJ3YXJuaW5nIgogICAgICB9KS50aGVuKGZ1bmN0aW9uICgpIHsKICAgICAgICByZXR1cm4genhJbXBsZW1lbnQoewogICAgICAgICAgdGFibGVJZDogX3RoaXMuJHJvdXRlLnBhcmFtcyAmJiBfdGhpcy4kcm91dGUucGFyYW1zLnRhYmxlSWQsCiAgICAgICAgICBjcmVhdGVTcWw6IF90aGlzLnRhYmxlU3FsRGF0YS5jcmVhdGVTcWwsCiAgICAgICAgICBjcmVhdGVMb2c6IF90aGlzLnRhYmxlU3FsRGF0YS5jcmVhdGVMb2csCiAgICAgICAgICBpZDogX3RoaXMudGFibGVTcWxEYXRhLmlkCiAgICAgICAgfSk7CiAgICAgIH0pLnRoZW4oZnVuY3Rpb24gKHJlcykgewogICAgICAgIF90aGlzLm1zZ1N1Y2Nlc3MoJ+aJp+ihjOaIkOWKnycpOwogICAgICB9KTsKICAgIH0sCiAgICBkYlNlbGVjdGVkWmQ6IGZ1bmN0aW9uIGRiU2VsZWN0ZWRaZChyb3cpIHsKICAgICAgdmFyIF90aGlzNyA9IHRoaXM7CgogICAgICB0aGlzLnJlc2V0KCk7CiAgICAgIHZhciBpZCA9IHJvdy5pZDsKICAgICAgZ2V0QnlJZFdpdGhGb3JlaWduS2V5KGlkKS50aGVuKGZ1bmN0aW9uIChyZXNwb25zZSkgewogICAgICAgIHZhciBkYXRhID0gcmVzcG9uc2UuZGF0YTsKICAgICAgICBkYXRhLmZvcmVpZ25LZXkgPSBkYXRhLmZvcmVpZ25LZXkgPyBkYXRhLmZvcmVpZ25LZXkgLSAwIDogJyc7CiAgICAgICAgX3RoaXM3LmZvcm1aZCA9IGRhdGE7CgogICAgICAgIGlmIChkYXRhLmZrSW5mbykgewogICAgICAgICAgX3RoaXM3LkZvcmVOYW1lID0gZGF0YS5ma0luZm8udmFsdWU7CiAgICAgICAgfQoKICAgICAgICBfdGhpczcub3BlblpkID0gdHJ1ZTsKICAgICAgICBfdGhpczcudGl0bGUgPSAi5L+u5pS55a2X5q615L+h5oGvIjsKICAgICAgfSk7CiAgICB9LAogICAgZGJTZWxlY3RlZDogZnVuY3Rpb24gZGJTZWxlY3RlZChyb3cpIHsKICAgICAgdmFyIF90aGlzOCA9IHRoaXM7CgogICAgICB0aGlzLnJlc2V0KCk7CiAgICAgIHZhciBpZCA9IHJvdy5pZDsKICAgICAgcXVyR2VuVGFibGUoaWQpLnRoZW4oZnVuY3Rpb24gKHJlc3BvbnNlKSB7CiAgICAgICAgdmFyIGRhdGEgPSByZXNwb25zZS5kYXRhOwogICAgICAgIGRhdGEucmVsYXRpb25UeXBlID0gZGF0YS5yZWxhdGlvblR5cGUgKyAiIjsKICAgICAgICBkYXRhLmVtYmVkRWRpdCA9IGRhdGEuZW1iZWRFZGl0ID8gZGF0YS5lbWJlZEVkaXQgKyAiIiA6IGRhdGEuZW1iZWRFZGl0OwogICAgICAgIGdldEdlblRhYmxlKGRhdGEucmVsYXRpb25QYXJlbnRJZCkudGhlbihmdW5jdGlvbiAocmVzKSB7CiAgICAgICAgICBfdGhpczguZ2VuTGlzdCA9IHJlcy5kYXRhLnJvd3M7CiAgICAgICAgICBfdGhpczguZm9ybSA9IGRhdGE7CiAgICAgICAgICBfdGhpczgub3BlbiA9IHRydWU7CiAgICAgICAgICBfdGhpczgudGl0bGUgPSAi5L+u5pS55YWz6IGU6KGoIjsKICAgICAgICB9KTsKICAgICAgfSk7CiAgICB9LAogICAgYWRkR2xmbjogZnVuY3Rpb24gYWRkR2xmbigpIHsKICAgICAgdmFyIF90aGlzOSA9IHRoaXM7CgogICAgICB0aGlzLiRyZWZzWyJmb3JtIl0udmFsaWRhdGUoZnVuY3Rpb24gKHZhbGlkKSB7CiAgICAgICAgaWYgKHZhbGlkKSB7CiAgICAgICAgICB2YXIgZGF0YXMgPSBKU09OLnBhcnNlKEpTT04uc3RyaW5naWZ5KF90aGlzOS5mb3JtKSk7CiAgICAgICAgICBkYXRhcy5yZWxhdGlvblBhcmVudElkID0gX3RoaXM5LmluZm8uaWQ7CiAgICAgICAgICBjb25zb2xlLmxvZyhkYXRhcywgX3RoaXM5LmluZm8uaWQsIDk5OTgpOwoKICAgICAgICAgIGlmIChfdGhpczkuZm9ybS5pZCAhPSB1bmRlZmluZWQpIHsKICAgICAgICAgICAgc2V0R2VuVGFibGUoZGF0YXMpLnRoZW4oZnVuY3Rpb24gKHJlc3BvbnNlKSB7CiAgICAgICAgICAgICAgX3RoaXM5Lm1zZ1N1Y2Nlc3MoIuS/ruaUueaIkOWKnyIpOwoKICAgICAgICAgICAgICBfdGhpczkub3BlbiA9IGZhbHNlOwoKICAgICAgICAgICAgICBfdGhpczkudGFiTGlzdCgpOwogICAgICAgICAgICB9KTsKICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgIGFkZEdlblRhYmxlKGRhdGFzKS50aGVuKGZ1bmN0aW9uIChyZXNwb25zZSkgewogICAgICAgICAgICAgIF90aGlzOS5tc2dTdWNjZXNzKCLmlrDlop7miJDlip8iKTsKCiAgICAgICAgICAgICAgX3RoaXM5Lm9wZW4gPSBmYWxzZTsKCiAgICAgICAgICAgICAgX3RoaXM5LnRhYkxpc3QoKTsKICAgICAgICAgICAgfSk7CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICB9KTsKICAgIH0sCiAgICByZWxhdGlvbkZuOiBmdW5jdGlvbiByZWxhdGlvbkZuKGRhdGEpIHsKICAgICAgdmFyIF90aGlzMTAgPSB0aGlzOwoKICAgICAgZ2V0R2VuVGFibGUoZGF0YSkudGhlbihmdW5jdGlvbiAocmVzKSB7CiAgICAgICAgX3RoaXMxMC5nZW5MaXN0ID0gcmVzLmRhdGEucm93czsKICAgICAgfSk7CiAgICB9LAogICAgbG9hZE1vcmU6IGZ1bmN0aW9uIGxvYWRNb3JlKCkgewogICAgICB2YXIgX3RoaXMgPSB0aGlzOwoKICAgICAgdmFyIG51bSA9IF90aGlzLnRhYmxlTGlzdC50b3RhbCAlIDEwID09IDAgPyBfdGhpcy50YWJsZUxpc3QudG90YWwgLyAxMCA6IChfdGhpcy50YWJsZUxpc3QudG90YWwgLSBfdGhpcy50YWJsZUxpc3QudG90YWwgJSAxMCkgLyAxMCArIDE7CiAgICAgIGNvbnNvbGUubG9nKG51bSwgMSk7CgogICAgICBpZiAodGhpcy5nbGJQYXJhbXMucGFnZU51bSA8IG51bSkgewogICAgICAgIHRoaXMuZ2xiUGFyYW1zLnBhZ2VOdW0rKzsgLy8g5YWz6IGU6KGo5pWw5o2uCgogICAgICAgIGxpc3RUYWJsZSh0aGlzLmdsYlBhcmFtcykudGhlbihmdW5jdGlvbiAocmVzcG9uc2UpIHsKICAgICAgICAgIHZhciBkYXRhID0gcmVzcG9uc2U7CiAgICAgICAgICBkYXRhLnJvd3MgPSBfdGhpcy50YWJsZUxpc3Qucm93cy5jb25jYXQoZGF0YS5yb3dzKTsKICAgICAgICAgIF90aGlzLnRhYmxlTGlzdCA9IGRhdGE7CiAgICAgICAgfSk7CiAgICAgIH0KICAgIH0sCiAgICAvLyDlj5bmtojmjInpkq4KICAgIGNhbmNlbDogZnVuY3Rpb24gY2FuY2VsKCkgewogICAgICB0aGlzLm9wZW4gPSBmYWxzZTsKICAgICAgdGhpcy5yZXNldCgpOwogICAgICB0aGlzLm9wZW5aZCA9IGZhbHNlOwogICAgICB0aGlzLnJlc2V0WmQoKTsKICAgIH0sCiAgICAvLyDlhbPogZTooajmlbDmja4KICAgIHRhYkxpc3Q6IGZ1bmN0aW9uIHRhYkxpc3QoKSB7CiAgICAgIHZhciBfdGhpczExID0gdGhpczsKCiAgICAgIHRoaXMubG9hZGluZyA9IHRydWU7CgogICAgICBfdGFiTGlzdCh0aGlzLnF1ZXJ5UGFyYW1zKS50aGVuKGZ1bmN0aW9uIChyZXNwb25zZSkgewogICAgICAgIF90aGlzMTEucG9zdExpc3QgPSByZXNwb25zZS5yb3dzOwogICAgICAgIF90aGlzMTEudG90YWwgPSByZXNwb25zZS50b3RhbDsKICAgICAgICBfdGhpczExLmxvYWRpbmcgPSBmYWxzZTsKICAgICAgfSk7CiAgICB9LAoKICAgIC8qKiDmlrDlop7mjInpkq7mk43kvZwgKi8KICAgIGhhbmRsZUFkZF9nbDogZnVuY3Rpb24gaGFuZGxlQWRkX2dsKCkgewogICAgICB0aGlzLnJlc2V0KCk7CiAgICAgIHRoaXMub3BlbiA9IHRydWU7CiAgICAgIGNvbnNvbGUubG9nKHRoaXMuZm9ybSk7CiAgICAgIHRoaXMudGl0bGUgPSAi5paw5aKe5YWz6IGU6KGoIjsKICAgIH0sCiAgICBoYW5kbGVEZWxfZ2w6IGZ1bmN0aW9uIGhhbmRsZURlbF9nbChyb3cpIHsKICAgICAgdmFyIF90aGlzMTIgPSB0aGlzOwoKICAgICAgdmFyIGlkcyA9IHJvdy5pZCB8fCB0aGlzLmlkczE7CiAgICAgIHRoaXMuJGNvbmZpcm0oJ+aYr+WQpuehruiupOWIoOmZpGlk5Li6IicgKyBpZHMgKyAnIueahOaVsOaNrumhuT8nLCAi6K2m5ZGKIiwgewogICAgICAgIGNvbmZpcm1CdXR0b25UZXh0OiAi56Gu5a6aIiwKICAgICAgICBjYW5jZWxCdXR0b25UZXh0OiAi5Y+W5raIIiwKICAgICAgICB0eXBlOiAid2FybmluZyIKICAgICAgfSkudGhlbihmdW5jdGlvbiAoKSB7CiAgICAgICAgcmV0dXJuIGRlbEdlblRhYmxlKGlkcyk7CiAgICAgIH0pLnRoZW4oZnVuY3Rpb24gKCkgewogICAgICAgIF90aGlzMTIudGFiTGlzdCgpOwoKICAgICAgICBfdGhpczEyLm1zZ1N1Y2Nlc3MoIuWIoOmZpOaIkOWKnyIpOwogICAgICB9KTsKICAgIH0sCiAgICAvLyDooajljZXph43nva4KICAgIHJlc2V0OiBmdW5jdGlvbiByZXNldCgpIHsKICAgICAgdGhpcy5mb3JtID0gewogICAgICAgIGlzRGVsOiAnTicKICAgICAgfTsKICAgICAgdGhpcy5yZXNldEZvcm0oImZvcm0iKTsKICAgIH0sCiAgICByZXNldFpkOiBmdW5jdGlvbiByZXNldFpkKCkgewogICAgICB0aGlzLmZvcm1aZCA9IHt9OwogICAgICB0aGlzLnJlc2V0Rm9ybSgiZm9ybVpkIik7CiAgICB9LAoKICAgIC8qKiDmj5DkuqTmjInpkq4gKi8KICAgIHN1Ym1pdEZvcm06IGZ1bmN0aW9uIHN1Ym1pdEZvcm0oKSB7CiAgICAgIHZhciBfdGhpczEzID0gdGhpczsKCiAgICAgIHZhciBpc0luRmxhZyA9IDA7CiAgICAgIHZhciBpc091dEZsYWcgPSAwOwoKICAgICAgdmFyIF9pdGVyYXRvcjUgPSBfY3JlYXRlRm9yT2ZJdGVyYXRvckhlbHBlcih0aGlzLmNsb3VtbnMpLAogICAgICAgICAgX3N0ZXA1OwoKICAgICAgdHJ5IHsKICAgICAgICBmb3IgKF9pdGVyYXRvcjUucygpOyAhKF9zdGVwNSA9IF9pdGVyYXRvcjUubigpKS5kb25lOykgewogICAgICAgICAgdmFyIGl0ZW0gPSBfc3RlcDUudmFsdWU7CgogICAgICAgICAgaWYgKGl0ZW0uaXNJbiA9PSAnWScpIHsKICAgICAgICAgICAgaXNJbkZsYWcrKzsKICAgICAgICAgIH0KCiAgICAgICAgICBpZiAoaXRlbS5pc091dCA9PSAnWScpIHsKICAgICAgICAgICAgaXNPdXRGbGFnKys7CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICB9IGNhdGNoIChlcnIpIHsKICAgICAgICBfaXRlcmF0b3I1LmUoZXJyKTsKICAgICAgfSBmaW5hbGx5IHsKICAgICAgICBfaXRlcmF0b3I1LmYoKTsKICAgICAgfQoKICAgICAgaWYgKGlzSW5GbGFnID4gMSkgewogICAgICAgIHRoaXMubXNnRXJyb3IoJyLovpPlhaXlrZfmrrUi5pyA5aSa5Y+q6IO96YCJ5oup5LiA5LiqIScpOwogICAgICAgIHJldHVybjsKICAgICAgfQoKICAgICAgaWYgKGlzT3V0RmxhZyA+IDEpIHsKICAgICAgICB0aGlzLm1zZ0Vycm9yKCci5pi+56S65a2X5q61IuacgOWkmuWPquiDvemAieaLqeS4gOS4qiEnKTsKICAgICAgICByZXR1cm47CiAgICAgIH0KCiAgICAgIHZhciBiYXNpY0Zvcm0gPSB0aGlzLiRyZWZzLmJhc2ljSW5mby4kcmVmcy5iYXNpY0luZm9Gb3JtOwogICAgICB2YXIgdGFibnVtID0gT2JqZWN0LmFzc2lnbih7fSwgYmFzaWNGb3JtLm1vZGVsKTsKICAgICAgY29uc29sZS5sb2codGFibnVtLnRhYmxlQ29sdW1uLCAyMzQpOwoKICAgICAgaWYgKHRhYm51bS50YWJsZUNvbHVtbiA+IDQpIHsKICAgICAgICB0aGlzLm1zZ0Vycm9yKCfliJfmlbDmnIDlpKflj6rog73ovpPlhaU0Jyk7CiAgICAgICAgcmV0dXJuOwogICAgICB9CgogICAgICBpZiAodGFibnVtLnRhYmxlQ29sdW1uIDwgMSkgewogICAgICAgIHRoaXMubXNnRXJyb3IoJ+acgOWwj+WPquiDvei+k+WFpTEnKTsKICAgICAgICByZXR1cm47CiAgICAgIH0gLy8gY29uc3QgZ2VuRm9ybSA9IHRoaXMuJHJlZnMuZ2VuSW5mby4kcmVmcy5nZW5JbmZvRm9ybTsKCgogICAgICBQcm9taXNlLmFsbChbYmFzaWNGb3JtXS5tYXAodGhpcy5nZXRGb3JtUHJvbWlzZSkpLnRoZW4oZnVuY3Rpb24gKHJlcykgewogICAgICAgIHZhciB2YWxpZGF0ZVJlc3VsdCA9IHJlcy5ldmVyeShmdW5jdGlvbiAoaXRlbSkgewogICAgICAgICAgcmV0dXJuICEhaXRlbTsKICAgICAgICB9KTsKCiAgICAgICAgaWYgKHZhbGlkYXRlUmVzdWx0KSB7CiAgICAgICAgICB2YXIgZ2VuVGFibGUgPSBPYmplY3QuYXNzaWduKHt9LCBiYXNpY0Zvcm0ubW9kZWwpOwogICAgICAgICAgZ2VuVGFibGUuY29sdW1ucyA9IF90aGlzMTMuY2xvdW1uczsgLy8gZ2VuVGFibGUucGFyYW1zID0gewogICAgICAgICAgLy8gICB0cmVlQ29kZTogZ2VuVGFibGUudHJlZUNvZGUsCiAgICAgICAgICAvLyAgIHRyZWVOYW1lOiBnZW5UYWJsZS50cmVlTmFtZSwKICAgICAgICAgIC8vICAgdHJlZVBhcmVudENvZGU6IGdlblRhYmxlLnRyZWVQYXJlbnRDb2RlLAogICAgICAgICAgLy8gICBwYXJlbnRNZW51SWQ6IGdlblRhYmxlLnBhcmVudE1lbnVJZAogICAgICAgICAgLy8gfTsKCiAgICAgICAgICBjb25zb2xlLmxvZyhnZW5UYWJsZSk7CgogICAgICAgICAgaWYgKF90aGlzMTMuYWN0aXZlTmFtZSA9PSAnYmFzaWMnKSB7CiAgICAgICAgICAgIGdlblRhYmxlLnVwZGF0ZVR5cGUgPSAnMSc7CiAgICAgICAgICB9CgogICAgICAgICAgaWYgKF90aGlzMTMuYWN0aXZlTmFtZSA9PSAnY2xvdW0nKSB7CiAgICAgICAgICAgIGdlblRhYmxlLnVwZGF0ZVR5cGUgPSAnMic7CiAgICAgICAgICB9CgogICAgICAgICAgdXBkYXRlR2VuVGFibGUoZ2VuVGFibGUpLnRoZW4oZnVuY3Rpb24gKHJlcykgewogICAgICAgICAgICBfdGhpczEzLm1zZ1N1Y2Nlc3MocmVzLm1zZyk7CgogICAgICAgICAgICBpZiAocmVzLmNvZGUgPT09IDIwMCkgewogICAgICAgICAgICAgIF90aGlzMTMuY2xvc2UoKTsKICAgICAgICAgICAgfQogICAgICAgICAgfSk7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgIF90aGlzMTMubXNnRXJyb3IoIuihqOWNleagoemqjOacqumAmui/h++8jOivt+mHjeaWsOajgOafpeaPkOS6pOWGheWuuSIpOwogICAgICAgIH0KICAgICAgfSk7CiAgICB9LAogICAgZ2V0Rm9ybVByb21pc2U6IGZ1bmN0aW9uIGdldEZvcm1Qcm9taXNlKGZvcm0pIHsKICAgICAgcmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uIChyZXNvbHZlKSB7CiAgICAgICAgZm9ybS52YWxpZGF0ZShmdW5jdGlvbiAocmVzKSB7CiAgICAgICAgICByZXNvbHZlKHJlcyk7CiAgICAgICAgfSk7CiAgICAgIH0pOwogICAgfSwKCiAgICAvKiog5YWz6Zet5oyJ6ZKuICovCiAgICBjbG9zZTogZnVuY3Rpb24gY2xvc2UoKSB7CiAgICAgIHRoaXMuJHN0b3JlLmRpc3BhdGNoKCJ0YWdzVmlldy9kZWxWaWV3IiwgdGhpcy4kcm91dGUpOwogICAgICB0aGlzLiRyb3V0ZXIucHVzaCh7CiAgICAgICAgcGF0aDogIi90b29sL2dlbiIsCiAgICAgICAgcXVlcnk6IHsKICAgICAgICAgIHQ6IERhdGUubm93KCkKICAgICAgICB9CiAgICAgIH0pOwogICAgfSwKICAgIC8vIOWkmumAieahhumAieS4reaVsOaNrgogICAgaGFuZGxlU2VsZWN0aW9uQ2hhbmdlOiBmdW5jdGlvbiBoYW5kbGVTZWxlY3Rpb25DaGFuZ2Uoc2VsZWN0aW9uKSB7CiAgICAgIHRoaXMuaWRzID0gc2VsZWN0aW9uLm1hcChmdW5jdGlvbiAoaXRlbSkgewogICAgICAgIHJldHVybiBpdGVtLmlkOwogICAgICB9KTsKICAgICAgdGhpcy5zaW5nbGUgPSBzZWxlY3Rpb24ubGVuZ3RoICE9IDE7CiAgICAgIHRoaXMubXVsdGlwbGUgPSAhc2VsZWN0aW9uLmxlbmd0aDsKICAgIH0sCiAgICAvLyDlpJrpgInmoYbpgInkuK3mlbDmja4KICAgIGhhbmRsZVNlbGVjdGlvbkNoYW5nZTE6IGZ1bmN0aW9uIGhhbmRsZVNlbGVjdGlvbkNoYW5nZTEoc2VsZWN0aW9uKSB7CiAgICAgIHRoaXMuaWRzMSA9IHNlbGVjdGlvbi5tYXAoZnVuY3Rpb24gKGl0ZW0pIHsKICAgICAgICByZXR1cm4gaXRlbS5pZDsKICAgICAgfSk7CiAgICAgIHRoaXMuc2luZ2xlMSA9IHNlbGVjdGlvbi5sZW5ndGggIT0gMTsKICAgICAgdGhpcy5tdWx0aXBsZTEgPSAhc2VsZWN0aW9uLmxlbmd0aDsKICAgIH0sCgogICAgLyoqIOWIoOmZpOaMiemSruaTjeS9nCAqLwogICAgaGFuZGxlRGVsZXRlOiBmdW5jdGlvbiBoYW5kbGVEZWxldGUocm93KSB7CiAgICAgIHZhciBfdGhpczE0ID0gdGhpczsKCiAgICAgIHZhciBpZHMgPSByb3cuaWQgfHwgdGhpcy5pZHM7CiAgICAgIHZhciB0YWJsZUlkID0gdGhpcy4kcm91dGUucGFyYW1zICYmIHRoaXMuJHJvdXRlLnBhcmFtcy50YWJsZUlkOwogICAgICB0aGlzLiRjb25maXJtKCfmmK/lkKbnoa7orqTliKDpmaTlrZfmrrXnvJblj7fkuLoiJyArIGlkcyArICci55qE5pWw5o2u6aG5PycsICLorablkYoiLCB7CiAgICAgICAgY29uZmlybUJ1dHRvblRleHQ6ICLnoa7lrpoiLAogICAgICAgIGNhbmNlbEJ1dHRvblRleHQ6ICLlj5bmtogiLAogICAgICAgIHR5cGU6ICJ3YXJuaW5nIgogICAgICB9KS50aGVuKGZ1bmN0aW9uICgpIHsKICAgICAgICByZXR1cm4gZGVsR2VuVGFibGVDb2x1bW4oaWRzKTsKICAgICAgfSkudGhlbihmdW5jdGlvbiAoKSB7CiAgICAgICAgLy8g6I635Y+W6KGo6K+m57uG5L+h5oGvCiAgICAgICAgZ2V0R2VuVGFibGUodGFibGVJZCkudGhlbihmdW5jdGlvbiAocmVzKSB7CiAgICAgICAgICBfdGhpczE0LmNsb3VtbnMgPSByZXMuZGF0YS5yb3dzOwogICAgICAgICAgX3RoaXMxNC5pbmZvID0gcmVzLmRhdGEuaW5mbzsKICAgICAgICAgIF90aGlzMTQudGFibGVzID0gcmVzLmRhdGEudGFibGVzOwogICAgICAgIH0pOwoKICAgICAgICBfdGhpczE0Lm1zZ1N1Y2Nlc3MoIuWIoOmZpOaIkOWKnyIpOwogICAgICB9KTsKICAgIH0sCiAgICBoYW5kbGVBZGQ6IGZ1bmN0aW9uIGhhbmRsZUFkZCgpIHsKICAgICAgdGhpcy5yZXNldFpkKCk7CiAgICAgIHRoaXMub3BlblpkID0gdHJ1ZTsKICAgICAgdGhpcy50aXRsZSA9ICLmlrDlop7lrZfmrrXkv6Hmga8iOwogICAgfQogIH0sCiAgbW91bnRlZDogZnVuY3Rpb24gbW91bnRlZCgpIHsKICAgIHZhciBfdGhpczE1ID0gdGhpczsKCiAgICB2YXIgZWwgPSB0aGlzLiRyZWZzLmRyYWdUYWJsZS4kZWwucXVlcnlTZWxlY3RvckFsbCgiLmVsLXRhYmxlX19ib2R5LXdyYXBwZXIgPiB0YWJsZSA+IHRib2R5IilbMF07CiAgICB2YXIgc29ydGFibGUgPSBTb3J0YWJsZS5jcmVhdGUoZWwsIHsKICAgICAgaGFuZGxlOiAiLmFsbG93RHJhZyIsCiAgICAgIG9uRW5kOiBmdW5jdGlvbiBvbkVuZChldnQpIHsKICAgICAgICB2YXIgdGFyZ2V0Um93ID0gX3RoaXMxNS5jbG91bW5zLnNwbGljZShldnQub2xkSW5kZXgsIDEpWzBdOwoKICAgICAgICBfdGhpczE1LmNsb3VtbnMuc3BsaWNlKGV2dC5uZXdJbmRleCwgMCwgdGFyZ2V0Um93KTsKCiAgICAgICAgZm9yICh2YXIgaW5kZXggaW4gX3RoaXMxNS5jbG91bW5zKSB7CiAgICAgICAgICBfdGhpczE1LmNsb3VtbnNbaW5kZXhdLnNvcnQgPSBwYXJzZUludChpbmRleCkgKyAxOwogICAgICAgIH0KICAgICAgfQogICAgfSk7CiAgfQp9Ow=="},null]}
|