{"remainingRequest":"D:\\jenkins\\workspace\\dataShare-fvue\\node_modules\\vue-loader\\lib\\index.js??vue-loader-options!D:\\jenkins\\workspace\\dataShare-fvue\\src\\components\\control\\HtDialog.vue?vue&type=script&lang=js","dependencies":[{"path":"D:\\jenkins\\workspace\\dataShare-fvue\\src\\components\\control\\HtDialog.vue","mtime":1733309211648},{"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:Ly8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KDQppbXBvcnQgeyBtYXBTdGF0ZSB9IGZyb20gInZ1ZXgiOw0KaW1wb3J0IHV0aWxzIGZyb20gIkAvdXRpbHMuanMiOw0KaW1wb3J0IHsgTWVzc2FnZSB9IGZyb20gImVsZW1lbnQtdWkiOw0KDQpleHBvcnQgZGVmYXVsdCB7DQogIG5hbWU6ICJodC1kaWFsb2ciLA0KICBwcm9wczogWw0KICAgICJ2YWxpZGF0ZSIsDQogICAgInZhbHVlIiwNCiAgICAibmFtZSIsDQogICAgInBlcm1pc3Npb24iLA0KICAgICJhdHRlciIsDQogICAgInNpbmdsZSIsDQogICAgInNlbGVjdG9yY29uZmlnIiwNCiAgICAiY3VzdGRpYWxvZyIsDQogICAgInRvb2x0aXBwbGFjZW1lbnQiLA0KICAgICJwbGFjZWhvbGRlciIsDQogICAgImlzRnJvbUxpc3QiDQogIF0sDQogIGRhdGEoKSB7DQogICAgcmV0dXJuIHsNCiAgICAgIG5vZGVLZXk6IklEXyIsLy/moJHlvaLmlbDmja7niLZJZA0KICAgICAgY3VzdG9tRGlhbG9nU2hvd0xpc3Q6IGZhbHNlLA0KICAgICAgY3VzdG9tRGlhbG9nU2hvd1RyZWU6IGZhbHNlLA0KICAgICAgc2VsZWN0T3JnUHJvcHM6IHsNCiAgICAgICAgbGFiZWw6ICJuYW1lIg0KICAgICAgfSwNCiAgICAgIHN0eWxlOiAiIiwgLy/lr7nor53moYblrr3pq5gNCiAgICAgIHNlbGVjdE9yZ3M6IG51bGwsDQogICAgICBpbnB1dFN1ZmZpeEhlaWdodDogMzAsDQogICAgICBjb25maWc6IG51bGwsDQogICAgICB1cGRhdGluZzogZmFsc2UsDQogICAgICBkaXNwbGF5ZmllbGQ6IFtdLCAvL+aYvuekuuWtl+autQ0KICAgICAgY3VzdG9tRGlhbG9nOiB7fSwgLy8NCiAgICAgIGNvbW1lbnQ6ICIiLA0KICAgICAgcXVlcnlQYXJhbTogIiIsDQogICAgICBwcm9wczE6IFtdLA0KICAgICAgc2hvd0RhdGE6W10sDQogICAgICBjaGVja0JveERhdGFBbGw6IFtdLC8v6YCJ5Lit5a+56LGh55qE6ZuG5ZCIDQogICAgICBkZWZhdWx0UHJvcHM6IHsNCiAgICAgICAgY2hpbGRyZW46ICJjaGlsZHJlbiIsDQogICAgICAgIGxhYmVsOiAibGFiZWwiDQogICAgICB9LA0KICAgICAgcHJvcHNEYXRhOiBbXSwNCiAgICAgIHNlYXJjaEZvcm06IHt9LA0KICAgICAgcXVlcnlzU2hvdzogZmFsc2UsIC8v5piv5ZCm5pi+56S65pCc57Si5qGGDQogICAgICB1bmRlZmluZWRhOiIiLA0KICAgICAgaXNDdXJyZW50Q2hhbmdlOmZhbHNlICAvL+aYr+WQpuS4jeaJp+ihjCBvcmdUYWJsZVNlbGVjdGlvbuaWueazlQ0KICAgIH07DQogIH0sDQogIHdhdGNoOiB7DQogICAgcHJvcHMxOiBmdW5jdGlvbihuZXdWYWwsIG9sZFZhbCkgew0KICAgICAgICAvL+agkeW9og0KICAgICAgICBpZih0aGlzLnNob3dEYXRhIT11bmRlZmluZWQmJnRoaXMuc2hvd0RhdGEubGVuZ3RoPjApew0KICAgICAgICAgIGNvbnN0IHRoaXNfID0gdGhpczsNCiAgICAgICAgICBsZXQgIGRhdGEgPSBbXTsNCiAgICAgICAgICBmb3IobGV0IGkgPTA7aTx0aGlzLnNob3dEYXRhLmxlbmd0aDtpKyspew0KICAgICAgICAgICAgZGF0YS5wdXNoKHRoaXMuc2hvd0RhdGFbaV0pOw0KICAgICAgICAgIH0NCiAgICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHsNCiAgICAgICAgICAgIGZvcihsZXQgaSA9MDtpPGRhdGEubGVuZ3RoO2krKyl7DQogICAgICAgICAgICAgIHRoaXNfLiRyZWZzLnRyZWUuc2V0Q2hlY2tlZChkYXRhW2ldLHRydWUpOw0KICAgICAgICAgICAgfQ0KICAgICAgICAgIH0sMjAwKTsNCiAgICAgICAgfQ0KICAgIH0NCiAgfSwNCiAgY29tcHV0ZWQ6IG1hcFN0YXRlKHsNCiAgICBwYWdpbmF0aW9uOiBzdGF0ZSA9PiBzdGF0ZS5kaWFsb2cucGFnaW5hdGlvbiwNCiAgICB0b3RhbDogc3RhdGUgPT4gc3RhdGUuZGlhbG9nLnRvdGFsLA0KICAgIGRpYWxvZ0RhdGE6IHN0YXRlID0+IHsNCiAgICAgIHJldHVybiBzdGF0ZS5kaWFsb2cucm93czsNCiAgICB9LA0KICAgIGlucHV0VmFsOiBmdW5jdGlvbigpIHsNCiAgICAgIGlmICghdGhpcy52YWx1ZSB8fCB0aGlzLnZhbHVlID09J3x8W10nKSB7DQogICAgICAgIHRoaXMuY2hlY2tCb3hEYXRhQWxsID0gW107DQogICAgICAgIC8vIHRoaXMuc2hvd0RhdGEgPSBbXTsNCiAgICAgICAgcmV0dXJuIG51bGw7DQogICAgICB9IGVsc2Ugew0KICAgICAgICBsZXQgbmFtZUFyeSA9IHRoaXMudmFsdWUuc3BsaXQoIiwiKTsNCiAgICAgICAgaWYoIW5hbWVBcnlbbmFtZUFyeS5sZW5ndGgtMV0pew0KICAgICAgICAgIG5hbWVBcnkuc3BsaWNlKG5hbWVBcnkubGVuZ3RoLTEsMSk7DQogICAgICAgIH0NCiAgICAgICAgaWYodGhpcy52YWx1ZS5pbmRleE9mKCJ8fCIpPjApew0KICAgICAgICAgIG5hbWVBcnk9dGhpcy52YWx1ZS5zcGxpdCgifHwiKVswXS5zcGxpdCgiLCIpOw0KICAgICAgICAgIC8vIHRoaXMuc2hvd0RhdGE9SlNPTi5wYXJzZSh0aGlzLnZhbHVlLnNwbGl0KCJ8fCIpWzFdKTsNCiAgICAgICAgfQ0KICAgICAgICAvLyAgdGhpcy5zaG93RGF0YSA9dGhpcy5zZWxlY3RPcmdzOw0KICAgICAgICBsZXQgaWRBcnkgPSBudWxsOw0KICAgICAgICBsZXQgYWNjb3VudEFyeSA9IG51bGw7DQogICAgICAgIGxldCByZXN1bHQgPSBbXTsNCiAgICAgICAgbmFtZUFyeS5mb3JFYWNoKChtLCBpKSA9PiB7DQogICAgICAgICAgbGV0IG4gPSB7IHZhbHVlOiBtIH07DQogICAgICAgICAgcmVzdWx0LnB1c2gobik7DQogICAgICAgIH0pOw0KICAgICAgICByZXR1cm4gcmVzdWx0Ow0KICAgICAgfQ0KICAgIH0sDQogICAgaW5wdXRXcml0ZWFibGU6IGZ1bmN0aW9uKCkgew0KICAgICAgcmV0dXJuIHV0aWxzLmdldFdyaXRlYWJsZSh0aGlzLnBlcm1pc3Npb24pOw0KICAgIH0sDQogICAgaW5wdXRWYWxpZGF0ZTogZnVuY3Rpb24oKSB7DQogICAgICB2YXIgdmFsaWRhdGVPYmogPSB0aGlzLiRzdG9yZS5zdGF0ZS5pbmRleC52YWxpZGF0ZTsNCiAgICAgIHJldHVybiB1dGlscy5hZGRSZXF1aXJlZE9yTm90KA0KICAgICAgICB0aGlzLnBlcm1pc3Npb24sDQogICAgICAgIHRoaXMudmFsaWRhdGUsDQogICAgICAgIHZhbGlkYXRlT2JqLA0KICAgICAgICB0aGlzDQogICAgICApOw0KICAgIH0sDQogICAgaW5wdXROYW1lOiBmdW5jdGlvbigpIHsNCiAgICAgIGxldCBsYWJlbGRlc2MgPSAiIjsNCiAgICAgIGlmKHRoaXMuJHNsb3RzICYmIHRoaXMuJHNsb3RzLmxhYmVsZGVzYyAmJiB0aGlzLiRzbG90cy5sYWJlbGRlc2NbMF0uY2hpbGRyZW4gJiYgdGhpcy4kc2xvdHMubGFiZWxkZXNjWzBdLmNoaWxkcmVuWzBdLnRleHQpew0KICAgICAgICBsYWJlbGRlc2MgPSB0aGlzLiRzbG90cy5sYWJlbGRlc2NbMF0uY2hpbGRyZW5bMF0udGV4dDsNCiAgICAgICAgcmV0dXJuIHRoaXMubmFtZSA/IHRoaXMubmFtZSA6IHV0aWxzLmdldE5hbWUoKSsgIi0iICtsYWJlbGRlc2M7DQogICAgICB9ZWxzZXsNCiAgICAgICAgcmV0dXJuIHRoaXMubmFtZSA/IHRoaXMubmFtZSA6IHV0aWxzLmdldE5hbWUoKTsNCiAgICAgIH0NCiAgICB9LA0KICAgIC8vIOaYr+WQpuacieWbnuWhq+iuvue9rg0KICAgIGJpbmRTZXQ6IGZ1bmN0aW9uKCkgew0KICAgICAgcmV0dXJuIHRoaXMuc2VsZWN0b3Jjb25maWcgPyB0aGlzLnNlbGVjdG9yY29uZmlnLmJpbmQgOiBudWxsOw0KICAgIH0sDQogICAgZ2V0UGxhY2Vob2xkZXI6IGZ1bmN0aW9uKCkgew0KICAgICAgaWYodGhpcy5wbGFjZWhvbGRlcil7DQogICAgICAgIHJldHVybiB0aGlzLnBsYWNlaG9sZGVyOw0KICAgICAgfQ0KICAgICAgcmV0dXJuIHRoaXMuY3VzdGRpYWxvZy5uYW1lOw0KICAgIH0NCiAgfSksDQogIGNyZWF0ZWQoKSB7DQogICAgdGhpcy4kdmFsaWRhdG9yID0gdGhpcy4kcm9vdC4kdmFsaWRhdG9yOw0KICB9LA0KICBtZXRob2RzOiB7DQogICAgLy/lm57ovabmn6Xor6INCiAgICBzZWFyY2hFbnRlckZ1bjpmdW5jdGlvbihlKXsNCiAgICAgICAgdmFyIGtleUNvZGUgPSB3aW5kb3cuZXZlbnQ/IGUua2V5Q29kZTplLndoaWNoOw0KICAgICAgICBpZihrZXlDb2RlID09IDEzKXsNCiAgICAgICAgICAgIHRoaXMuc2VhcmNoKCk7DQogICAgICAgIH0NCiAgICB9LA0KICAgIGhhbmRsZVNpemVDaGFuZ2U6IGZ1bmN0aW9uKHNpemUpIHsNCiAgICAgIHRoaXMuaXNDdXJyZW50Q2hhbmdlID0gdHJ1ZTsNCiAgICAgIC8v5q+P6aG15LiL5ouJ5pi+56S65pWw5o2uDQogICAgICB0aGlzLiRzdG9yZS5kaXNwYXRjaCgiZGlhbG9nL3NldFBhZ2luYXRpb25TaXplIiwgc2l6ZSkudGhlbigoKT0+ew0KICAgICAgICAgIHRoaXMuc2VhcmNoKCk7DQogICAgICB9KTsNCiAgICB9LA0KICAgIGhhbmRsZUN1cnJlbnRDaGFuZ2U6IGZ1bmN0aW9uKGN1cnJlbnRQYWdlKSB7DQogICAgICBjb25zdCB0aGlzXyA9IHRoaXM7DQogICAgICBpZih0aGlzLnNlbGVjdE9yZ3MhPXVuZGVmaW5lZCYmdGhpcy5zZWxlY3RPcmdzLmxlbmd0aD4wKXsNCiAgICAgICAgdGhpcy5zZWxlY3RPcmdzLmZvckVhY2gocm93ID0+IHsNCiAgICAgICAgICBsZXQgcmVzPXRoaXNfLmluZGV4QXJyYXkodGhpc18uY2hlY2tCb3hEYXRhQWxsLHJvdyk7DQogICAgICAgICAgaWYocmVzPT0tMSl7DQogICAgICAgICAgICB0aGlzXy5jaGVja0JveERhdGFBbGwucHVzaChyb3cpOw0KICAgICAgICAgIH0NCiAgICAgICAgfSk7DQogICAgICB9DQogICAgICB0aGlzLmlzQ3VycmVudENoYW5nZSA9IHRydWU7DQogICAgICAvL+eCueWHu+esrOWHoOmhtQ0KICAgICAgdGhpcy4kc3RvcmUuZGlzcGF0Y2goImRpYWxvZy9zZXRQYWdpbmF0aW9uUGFnZU51bSIsIGN1cnJlbnRQYWdlKS50aGVuKCgpPT57DQogICAgICAgICAgdGhpcy5zZWFyY2goKTsNCiAgICAgIH0pOw0KICAgIH0sDQogICAgY2hlY2tMaXN0KCl7DQogICAgICBjb25zdCB0aGlzXyA9IHRoaXM7DQogICAgICBzZXRUaW1lb3V0KCgpID0+IHsNCiAgICAgICAgLy/liJfooagNCiAgICAgICAgaWYodGhpc18uY2hlY2tCb3hEYXRhQWxsIT11bmRlZmluZWQmJnRoaXNfLmNoZWNrQm94RGF0YUFsbC5sZW5ndGg+MCl7DQogICAgICAgICAgdGhpc18uY2hlY2tCb3hEYXRhQWxsLmZvckVhY2gocm93ID0+IHsNCiAgICAgICAgICAgIGxldCByZXM9dGhpc18uaW5kZXhBcnJheSh0aGlzXy5kaWFsb2dEYXRhLHJvdyk7DQogICAgICAgICAgICB0aGlzXy51bmRlZmluZWRhPXJlczsNCiAgICAgICAgICAgIGlmKHJlcyE9LTEpew0KICAgICAgICAgICAgICAgIHRoaXNfLmlzQ3VycmVudENoYW5nZT10cnVlOw0KICAgICAgICAgICAgICAgIHRoaXNfLnRvZ2dsZVJvd1NlbGVjdGlvbihyZXMsdHJ1ZSk7DQogICAgICAgICAgICB9DQogICAgICAgICAgfSk7DQogICAgICAgIH0NCiAgICAgIH0sIDMwMCk7DQogICAgfSwNCiAgICB0b2dnbGVSb3dTZWxlY3Rpb24ocmVzLHZhbCl7DQogICAgICAgIHRoaXMuJHJlZnMub3JnVGFibGUudG9nZ2xlUm93U2VsZWN0aW9uKHRoaXMuZGlhbG9nRGF0YVtyZXNdLHZhbCk7DQogICAgfSwNCiAgICBzaG93RGlhbG9nKGl0ZW0pIHsNCiAgICAgIGNvbnN0IHRoaXNfID0gdGhpczsNCiAgICAgIHZhciBhbGlhcyA9IHRoaXMuY3VzdGRpYWxvZy5jdXN0RGlhbG9nLmFsaWFzOw0KICAgICAgdGhpcy4kc3RvcmUuZGlzcGF0Y2goImZvcm0vZ2V0QnlBbGlhcyIsIGFsaWFzKS50aGVuKGN1c3RvbURpYWxvZyA9PiB7DQogICAgICAgIGlmICghY3VzdG9tRGlhbG9nIHx8ICFjdXN0b21EaWFsb2cuYWxpYXMpIHsNCiAgICAgICAgICBNZXNzYWdlLmVycm9yKCLlr7nor53moYbliKvlkI3jgJAiICsgYWxpYXMgKyAi44CR5LiN5a2Y5Zyo77yBIik7DQogICAgICAgICAgcmV0dXJuOw0KICAgICAgICB9DQogICAgICAgIGlmKGN1c3RvbURpYWxvZy5zdHlsZT09MSl7DQogICAgICAgICAgdmFyIGRpc3BsYXlsaXN0ID0gSlNPTi5wYXJzZShjdXN0b21EaWFsb2cuZGlzcGxheWZpZWxkKTsNCiAgICAgICAgICB0aGlzXy5ub2RlS2V5ID0gZGlzcGxheWxpc3QuaWQ7DQogICAgICAgIH0NCiAgICAgICAgdmFyIGxpc3QgPSBKU09OLnBhcnNlKGN1c3RvbURpYWxvZy5jb25kaXRpb25maWVsZCk7DQogICAgICAgIHZhciBwYXJhbSA9IHt9Ow0KICAgICAgICBsaXN0LmZvckVhY2goZWxlID0+IHsNCiAgICAgICAgICBpZiAoZWxlLmRlZmF1bHRUeXBlID09ICI0Iikgew0KICAgICAgICAgICAgcGFyYW1bZWxlLmZpZWxkXSA9IGVsZS5jb21tZW50Ow0KICAgICAgICAgIH0NCiAgICAgICAgfSk7DQogICAgICAgIHRoaXMuc3R5bGUgPSAiaGVpZ2h0OiIgKyBjdXN0b21EaWFsb2cuaGVpZ2h0ICsgInB4IjsNCg0KICAgICAgICBpZiAoSlNPTi5zdHJpbmdpZnkocGFyYW0pID09ICJ7fSIpIHsNCiAgICAgICAgICAvL+ayoeacieWKqOaAgeS8oOWFpeeahOWtl+autQ0KICAgICAgICAgIGlmIChjdXN0b21EaWFsb2cuc3R5bGUgPT0gMCkgew0KICAgICAgICAgICAgdGhpcy5jdXN0b21EaWFsb2dTaG93KHsgYWxpYXM6IGFsaWFzLCBjdXN0b21EaWFsb2c6IGN1c3RvbURpYWxvZyB9KTsNCiAgICAgICAgICB9IGVsc2Ugew0KICAgICAgICAgICAgdGhpcy5jdXN0b21EaWFsb2dUcmVlU2hvdyh7DQogICAgICAgICAgICAgIGFsaWFzOiBhbGlhcywNCiAgICAgICAgICAgICAgY3VzdG9tRGlhbG9nOiBjdXN0b21EaWFsb2cNCiAgICAgICAgICAgIH0pOw0KICAgICAgICAgIH0NCiAgICAgICAgfSBlbHNlIHsNCiAgICAgICAgfQ0KICAgICAgfSk7DQogICAgfSwNCiAgICAvL+WIpOaWreaVsOaNruaYr+WQpuWMheWQq+afkOS4quWvueixoe+8jOW5tui/lOWbnuaVsOaNruWMheWQq+WvueixoeeahOS4i+aghw0KICAgIGluZGV4QXJyYXkoYXJyYXksIGl0ZW0pew0KICAgICAgaWYoYXJyYXkubGVuZ3RoPT0wKXsNCiAgICAgICAgcmV0dXJuIC0xOw0KICAgICAgfQ0KICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPGFycmF5Lmxlbmd0aCA7IGkrKykgew0KICAgICAgICBpZihKU09OLnN0cmluZ2lmeShhcnJheVtpXSk9PUpTT04uc3RyaW5naWZ5KGl0ZW0pKXsNCiAgICAgICAgICAgIHJldHVybiBpOw0KICAgICAgICB9DQogICAgICB9DQogICAgICByZXR1cm4gLTE7DQogICAgfSwNCiAgICAvL+eCueWHu+WIl+ihqOafkOS4gOS4quWkjemAieahhuaXtuinpuWPkQ0KICAgIG9uVGFibGVTZWxlY3Qocm93cywgcm93KXsNCiAgICAgICB0aGlzLmlzQ3VycmVudENoYW5nZT1mYWxzZTsNCiAgICAgLy/liKTmlq3ngrnlh7vliJfooajmlbDmja7ml7blpI3pgInmoYbmmK/lkKbli77pgIkgIHNlbGVjdGVk77yadHJ1ZeS4jeWLvumAie+8jGZhbHNl5Yu+6YCJDQogICAgICBsZXQgc2VsZWN0ZWQgPSAodGhpcy5zZWxlY3RPcmdzICYmIHRoaXMuc2VsZWN0T3Jncy5sZW5ndGg+MCkgJiYgdGhpcy5pbmRleEFycmF5KHRoaXMuc2VsZWN0T3Jncyxyb3cpICE9PSAtMTsNCiAgICAgIGlmKHNlbGVjdGVkKXsNCiAgICAgICAgdGhpcy5pc0N1cnJlbnRDaGFuZ2U9dHJ1ZTsNCiAgICAgICAgbGV0IHJlcz10aGlzLmluZGV4QXJyYXkodGhpcy5zZWxlY3RPcmdzLHJvdyk7DQogICAgICAgIHRoaXMuc2VsZWN0T3Jncy5zcGxpY2UocmVzLDEpOw0KICAgICAgfQ0KICAgIH0sDQogICAgLy/ngrnlh7vliJfooajmn5DkuIDmnaHmlbDmja7ml7bop6blj5ENCiAgICBvcmdSb3dDbGljayhyb3csIGNvbHVtbiwgZXZlbnQpIHsNCiAgICAgIGlmKHRoaXMuY3VzdG9tRGlhbG9nLnNlbGVjdE51bSA9PT0gMSl7DQogICAgICAgICQoZXZlbnQuY3VycmVudFRhcmdldC5jaGlsZHJlblswXS5jaGlsZHJlblswXS5jaGlsZHJlblswXSkudHJpZ2dlcigiY2xpY2siKTsNCiAgICAgICAgIHRoaXMuc2VsZWN0T3Jncz1bXTsNCiAgICAgICAgIHRoaXMuc2VsZWN0T3Jncy5wdXNoKHJvdyk7DQogICAgICB9ZWxzZSBpZih0aGlzLmN1c3RvbURpYWxvZy5zZWxlY3ROdW0hPTEpew0KICAgICAgICB0aGlzLmlzQ3VycmVudENoYW5nZT1mYWxzZTsNCiAgICAgICAgLy/liKTmlq3ngrnlh7vliJfooajmlbDmja7ml7blpI3pgInmoYbmmK/lkKbli77pgIkgIHNlbGVjdGVk77yadHJ1ZeS4jeWLvumAie+8jGZhbHNl5Yu+6YCJDQogICAgICAgIGxldCBzZWxlY3RlZCA9ICh0aGlzLnNlbGVjdE9yZ3MgJiYgdGhpcy5zZWxlY3RPcmdzLmxlbmd0aD4wKSAmJiB0aGlzLmluZGV4QXJyYXkodGhpcy5zZWxlY3RPcmdzLHJvdykgIT09IC0xOw0KICAgICAgICBpZihzZWxlY3RlZCl7DQogICAgICAgICAgdGhpcy5pc0N1cnJlbnRDaGFuZ2U9dHJ1ZTsNCiAgICAgICAgICBsZXQgcmVzPXRoaXMuaW5kZXhBcnJheSh0aGlzLnNlbGVjdE9yZ3Mscm93KTsNCiAgICAgICAgICB0aGlzLnNlbGVjdE9yZ3Muc3BsaWNlKHJlcywxKTsNCiAgICAgICAgfQ0KICAgICAgICB0aGlzLiRyZWZzLm9yZ1RhYmxlLnRvZ2dsZVJvd1NlbGVjdGlvbihyb3cpOw0KICAgICAgfQ0KICAgIH0sDQogICAgLy/liJfooajlpI3pgInmoYbmnInmlLnlj5jml7bop6blj5ENCiAgICBvcmdUYWJsZVNlbGVjdGlvbihzZWxlY3Rpb24pIHsNCiAgICAgIC8v5aSa6YCJDQogICAgICBpZih0aGlzLmN1c3RvbURpYWxvZy5zZWxlY3ROdW0hPTEgJiYgIXRoaXMuaXNDdXJyZW50Q2hhbmdlKXsNCiAgICAgICAgIGlmKHNlbGVjdGlvbiAmJiBzZWxlY3Rpb24ubGVuZ3RoPjApew0KICAgICAgICAgICAgaWYoc2VsZWN0aW9uLmxlbmd0aD09MSAmJiAoIXRoaXMuc2VsZWN0T3JncyB8fCB0aGlzLnNlbGVjdE9yZ3MubGVuZ3RoPT0wKSl7DQogICAgICAgICAgICAgICAgdGhpcy5zZWxlY3RPcmdzID0gc2VsZWN0aW9uOw0KICAgICAgICAgICAgfWVsc2UgaWYoKCF0aGlzLnNlbGVjdE9yZ3MgfHwgdGhpcy5zZWxlY3RPcmdzLmxlbmd0aD09MCkgJiYgc2VsZWN0aW9uLmxlbmd0aD4xKXsNCiAgICAgICAgICAgICAgICBpZighdGhpcy5zZWxlY3RPcmdzKXsNCiAgICAgICAgICAgICAgICAgIHRoaXMuc2VsZWN0T3Jncz1bXTsNCiAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgZm9yIChsZXQgaSA9IHNlbGVjdGlvbi5sZW5ndGgtMTsgaSA+PTAgOyBpLS0pIHsNCiAgICAgICAgICAgICAgICAgIHRoaXMuc2VsZWN0T3Jncy5wdXNoKHNlbGVjdGlvbltpXSk7DQogICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgfWVsc2V7DQogICAgICAgICAgICAgICAgZm9yIChsZXQgaSA9IHNlbGVjdGlvbi5sZW5ndGgtMTsgaSA+PTAgOyBpLS0pIHsNCiAgICAgICAgICAgICAgICAgIHRoaXMuc2VsZWN0T3Jncy5wdXNoKHNlbGVjdGlvbltpXSk7DQogICAgICAgICAgICAgICAgICBicmVhazsNCiAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICB9DQogICAgICAgICAgfQ0KICAgICAgfQ0KICAgIH0sDQogICAgZGlhbG9nQ29uZmlybSgpIHsNCiAgICAgIHRoaXMuY3VzdG9tRGlhbG9nU2hvd0xpc3QgPSBmYWxzZTsNCiAgICAgIHRoaXMuY2FsYWNJbnB1dFN1ZmZpeEhlaWdodCgpOw0KICAgICAgdGhpcy5zeW5jSW5wdXRWYWx1ZSgpOw0KICAgICAgLy8gdGhpcy4kc3RvcmUuZGlzcGF0Y2goImRpYWxvZy9zZXREaWFsb2dEYXRhIiwgW10pOw0KICAgIH0sDQogICAgLy/ph43nva4NCiAgICByZXNldCgpIHsNCiAgICAgIHRoaXMucXVlcnlQYXJhbSA9ICIiOw0KICAgICAgdGhpcy5zZWFyY2goKTsNCiAgICB9LA0KICAgIC8v5p+l6K+iDQogICAgc2VhcmNoKCkgew0KICAgICAgbGV0IHF1ZXJ5cyA9IFtdOyAvL+afpeivouadoeS7tg0KICAgICAgbGV0IHF1ZXJ5RmlsdGVyID0ge307DQogICAgICBpZihKU09OLnN0cmluZ2lmeSh0aGlzLnBhZ2luYXRpb24pPT0ie30iKXsNCiAgICAgICAgICAgdGhpcy5wYWdpbmF0aW9uID0geyJwYWdlIjoiMSIsInBhZ2VTaXplIjoiMTAiLCJzaG93VG90YWwiOiJ0cnVlIn07DQogICAgICB9DQogICAgICBsZXQgcGFnZUJlYW4gPSB7IHBhZ2VCZWFuOiB0aGlzLnBhZ2luYXRpb24gfTsNCiAgICAgIGlmICh0aGlzLnF1ZXJ5UGFyYW0gIT0gIiIpIHsNCiAgICAgICAgdmFyIGNvbmRpdGlvbmZpZWxkID0gSlNPTi5wYXJzZSh0aGlzLmN1c3RvbURpYWxvZy5jb25kaXRpb25maWVsZCk7DQogICAgICAgIGNvbmRpdGlvbmZpZWxkLmZvckVhY2goaXRlbSA9PiB7DQogICAgICAgICAgcXVlcnlzLnB1c2goew0KICAgICAgICAgICAgcHJvcGVydHk6IGl0ZW0uZmllbGQsDQogICAgICAgICAgICB2YWx1ZTogdGhpcy5xdWVyeVBhcmFtLA0KICAgICAgICAgICAgZ3JvdXA6ICJtYWluIiwNCiAgICAgICAgICAgIG9wZXJhdGlvbjogIkxJS0UiLA0KICAgICAgICAgICAgcmVsYXRpb246ICJPUiINCiAgICAgICAgICB9KTsNCiAgICAgICAgfSk7DQogICAgICB9DQogICAgICANCiAgICAgLy/lr7nor53moYbmjInooajljZXlrZfmrrXmn6Xor6LvvIjlj4LmlbDkvKDlhaXnmoTvvIkNCiAgICAgICAgbGV0IGJpbmRMaXN0ID0gdGhpcy5jdXN0ZGlhbG9nLmN1c3REaWFsb2cuY29uZGl0aW9uczsNCiAgICAgICAgaWYgKGJpbmRMaXN0Lmxlbmd0aCA+IDApIHsNCiAgICAgICAgICBjb25zdCBwSW5zdCA9IHV0aWxzLmdldEluc3RhbmNlQnlUYWcodGhpcywnaHQtZGF0YXZpZXctcnVudGltZS10ZW1wbGF0ZScpOw0KICAgICAgICAgIGJpbmRMaXN0LmZvckVhY2goZWxlID0+IHsNCiAgICAgICAgICAgIC8v57uR5a6a6KGo5Y2V5a2X5q61DQogICAgICAgICAgICBpZiAoZWxlLmRlZmF1bHRUeXBlID09ICczJyAmJiBlbGUuYmluZCAmJiBwSW5zdC5zZWFyY2hGb3JtKSB7DQogICAgICAgICAgICAgIGxldCB2YWx1ZT0iIjsNCiAgICAgICAgICAgICAgZm9yIChsZXQgaXRlbSBpbiBwSW5zdC5zZWFyY2hGb3JtKXsNCiAgICAgICAgICAgICAgICAgIGlmKGVsZS5iaW5kLnRvTG93ZXJDYXNlKCk9PWl0ZW0udG9Mb3dlckNhc2UoKSl7DQogICAgICAgICAgICAgICAgICAgICB2YWx1ZT1wSW5zdC5zZWFyY2hGb3JtW2l0ZW1dOw0KICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgIGlmKHZhbHVlKXsNCiAgICAgICAgICAgICAgICBxdWVyeXMucHVzaCh7DQogICAgICAgICAgICAgICAgcHJvcGVydHk6IGVsZS5maWVsZCwNCiAgICAgICAgICAgICAgICB2YWx1ZTogdmFsdWUsDQogICAgICAgICAgICAgICAgZ3JvdXA6ICdtYWluJywNCiAgICAgICAgICAgICAgICBvcGVyYXRpb246ICdMSUtFJywNCiAgICAgICAgICAgICAgICByZWxhdGlvbjogJ0FORCcNCiAgICAgICAgICAgICAgICB9KQ0KICAgICAgICAgICAgICB9DQogICAgICAgICAgICB9DQogICAgICAgICAgfSkNCiAgICAgICAgfQ0KDQogICAgICBpZiAocXVlcnlzLmxlbmd0aCA+IDApIHsNCiAgICAgICAgcXVlcnlGaWx0ZXIgPSB7IHBhZ2VCZWFuOiB0aGlzLnBhZ2luYXRpb24sIHF1ZXJ5cyB9Ow0KICAgICAgICB0aGlzLmN1c3RvbURpYWxvZy5wYWdlQmVhbiA9IHF1ZXJ5RmlsdGVyOw0KICAgICAgICB0aGlzLiRzdG9yZS5kaXNwYXRjaCgiZGlhbG9nL2dldGxpc3RKc29uIiwgdGhpcy5jdXN0b21EaWFsb2cpLnRoZW4oKCk9PnsNCiAgICAgICAgICAgIHRoaXMuY2hlY2tMaXN0KCk7DQogICAgICAgIH0pOw0KICAgICAgfSBlbHNlIHsNCiAgICAgICAgdGhpcy5jdXN0b21EaWFsb2cucGFnZUJlYW4gPSBwYWdlQmVhbjsNCiAgICAgICAgdGhpcy4kc3RvcmUuZGlzcGF0Y2goImRpYWxvZy9nZXRsaXN0SnNvbiIsIHRoaXMuY3VzdG9tRGlhbG9nKS50aGVuKCgpPT57DQogICAgICAgICAgICB0aGlzLmNoZWNrTGlzdCgpOw0KICAgICAgICB9KTsNCiAgICAgIH0NCiAgICB9LA0KICAgIC8v5qCR5b2i5p+l6K+iDQogICAgc2VhcmNoVHJlZShyZXF1ZXN0UGFyYW1zKSB7DQogICAgICAvLyBpZiAodGhpcy5wcm9wczEubGVuZ3RoIDwgMSkgew0KICAgICAgICB0aGlzLiRzdG9yZS5kaXNwYXRjaCgiZGlhbG9nL2dldFRyZWVEYXRhIiwgcmVxdWVzdFBhcmFtcykudGhlbihyZXMgPT4gew0KICAgICAgICAgIGlmICh0aGlzLmN1c3RvbURpYWxvZy5kaXNwbGF5ZmllbGQgJiYgdGhpcy5jdXN0b21EaWFsb2cucmVzdWx0ZmllbGQpIHsNCiAgICAgICAgICAgIHZhciBkaXNwbGF5ZmllbGQgPSBKU09OLnBhcnNlKHRoaXMuY3VzdG9tRGlhbG9nLmRpc3BsYXlmaWVsZCk7DQogICAgICAgICAgICB0aGlzLmRpc3BsYXlmaWVsZCA9IGRpc3BsYXlmaWVsZDsNCiAgICAgICAgICAgIHRoaXMuZGVmYXVsdFByb3BzLmxhYmVsPWRpc3BsYXlmaWVsZC5kaXNwbGF5TmFtZTsNCiAgICAgICAgICAgIHZhciByZXN1bHRmaWVsZCA9IEpTT04ucGFyc2UodGhpcy5jdXN0b21EaWFsb2cucmVzdWx0ZmllbGQpOw0KICAgICAgICAgICAgdGhpcy50cmVlRGF0YSA9IHJlczsNCiAgICAgICAgICAgIHRoaXMucHJvcHMxID0gdGhpcy50b1RyZWVEYXRhKA0KICAgICAgICAgICAgICByZXMsDQogICAgICAgICAgICAgIGRpc3BsYXlmaWVsZC5pZCwNCiAgICAgICAgICAgICAgZGlzcGxheWZpZWxkLnBpZCwNCiAgICAgICAgICAgICAgZGlzcGxheWZpZWxkLmRpc3BsYXlOYW1lLA0KICAgICAgICAgICAgICBkaXNwbGF5ZmllbGQucHZhbHVlID8gZGlzcGxheWZpZWxkLnB2YWx1ZSA6ICIwIiwNCiAgICAgICAgICAgICAgcmVzdWx0ZmllbGQNCiAgICAgICAgICAgICk7DQogICAgICAgICAgfQ0KICAgICAgICB9KTsNCiAgICAgIC8vIH0NCiAgICB9LA0KICAgIC8vIOWQjOatpemAieaLqee7k+aenA0KICAgIHN5bmNJbnB1dFZhbHVlKCkgew0KICAgICAgbGV0IHN1YkluZGV4ID0gbnVsbDsNCiAgICAgIGlmICh0aGlzLiRlbCkgew0KICAgICAgICBzdWJJbmRleCA9IHV0aWxzLmdldFNvbWVBdHRyaWJ1dGVGcm9tUGFyZW50RWxlbWVudCgNCiAgICAgICAgICB0aGlzLiRlbCwNCiAgICAgICAgICAiZGF0YS1pbmRleCINCiAgICAgICAgKTsNCiAgICAgIH0NCiAgICAgIHZhciByZXR1cm5TdHIgPSBKU09OLnBhcnNlKHRoaXMuY3VzdG9tRGlhbG9nLnJlc3VsdGZpZWxkKTsNCiAgICAgIC8v5ou/5Yiw6L+U5Zue55qE5a2X5q61DQogICAgICB2YXIgZmllbGQgPSBuZXcgQXJyYXkoW3JldHVyblN0ci5sZW5ndGhdKTsNCiAgICAgIHZhciBjb21tZW50ID0gbmV3IEFycmF5KFtyZXR1cm5TdHIubGVuZ3RoXSk7DQogICAgICB2YXIgc3RyID0gW107DQogICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHJldHVyblN0ci5sZW5ndGg7IGkrKykgew0KICAgICAgICBmaWVsZFtpXSA9DQogICAgICAgICAgdGhpcy5jdXN0b21EaWFsb2cuZHNUeXBlID09ICJkYXRhU291cmNlIg0KICAgICAgICAgICAgPyByZXR1cm5TdHJbaV0uZmllbGQudG9Mb3dlckNhc2UoKQ0KICAgICAgICAgICAgOiByZXR1cm5TdHJbaV0uZmllbGQ7DQogICAgICAgIGNvbW1lbnRbaV0gPQ0KICAgICAgICAgIHRoaXMuY3VzdG9tRGlhbG9nLmRzVHlwZSA9PSAiZGF0YVNvdXJjZSINCiAgICAgICAgICAgID8gcmV0dXJuU3RyW2ldLmNvbW1lbnQudG9Mb3dlckNhc2UoKQ0KICAgICAgICAgICAgOiByZXR1cm5TdHJbaV0uY29tbWVudDsNCiAgICAgIH0NCiAgICAgIGNvbnN0IHRoaXNfID0gdGhpczsNCiAgICAgIHZhciBzID0gIHRoaXMuc2VsZWN0T3JnczsNCiAgICAgIHRoaXMuc2hvd0RhdGEgPSBbLi4udGhpcy5zZWxlY3RPcmdzXTsNCiAgICAgIHRoaXMuY2hlY2tCb3hEYXRhQWxsID0gWy4uLnRoaXMuc2VsZWN0T3Jnc107DQogICAgICBpZih0aGlzLmN1c3RvbURpYWxvZy5zZWxlY3ROdW0gPT09IDEpew0KICAgICAgICBzPXRoaXMuc2VsZWN0T3JnczsNCiAgICAgIH0NCiAgICAgIGlmICh0aGlzLmN1c3RvbURpYWxvZy5zZWxlY3ROdW0gPT09IDEpIHsNCiAgICAgICAgdmFyIHRlbXAgPSAiIjsNCiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBjb21tZW50Lmxlbmd0aDsgaSsrKSB7DQogICAgICAgICAgdGVtcCArPSAnIicgKyBjb21tZW50W2ldICsgJyI6IicgKyBzWzBdW2ZpZWxkW2ldXSArICciLCc7DQogICAgICAgIH0NCiAgICAgICAgaWYgKHRlbXAgIT0gIiIpIHsNCiAgICAgICAgICB0ZW1wID0gInsiICsgdGVtcC5zdWJzdHJpbmcoMCwgdGVtcC5sZW5ndGggLSAxKSArICJ9IjsNCiAgICAgICAgfQ0KICAgICAgICBzdHIucHVzaChKU09OLnBhcnNlKHRlbXApKTsNCg0KICAgICAgfSBlbHNlIHsNCiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBzLmxlbmd0aDsgaSsrKSB7DQogICAgICAgICAgdmFyIHRlbXAgPSAiIjsNCiAgICAgICAgICBmb3IgKHZhciBqID0gMDsgaiA8IGNvbW1lbnQubGVuZ3RoOyBqKyspIHsNCiAgICAgICAgICAgIHRlbXAgKz0gJyInICsgY29tbWVudFtqXSArICciOiInICsgc1tpXVtmaWVsZFtqXV0gKyAnIiwnOw0KICAgICAgICAgIH0NCiAgICAgICAgICBpZiAodGVtcCAhPSAiIikgew0KICAgICAgICAgICAgdGVtcCA9ICJ7IiArIHRlbXAuc3Vic3RyaW5nKDAsIHRlbXAubGVuZ3RoIC0gMSkgKyAifSI7DQogICAgICAgICAgfQ0KICAgICAgICAgIHN0ci5wdXNoKEpTT04ucGFyc2UodGVtcCkpOw0KICAgICAgICB9DQogICAgICB9DQoNCg0KICAgICAgLy8gY29uc3QgcEluc3QgPSB1dGlscy5nZXRPbmxpbmVGb3JtSW5zdGFuY2UodGhpcyk7DQogICAgICBjb25zdCBwSW5zdCA9IHV0aWxzLmdldEluc3RhbmNlQnlUYWcodGhpcyxbJ2h0LWRhdGF2aWV3LXJ1bnRpbWUtdGVtcGxhdGUnLCAiaHQtcnVudGltZS10ZW1wbGF0ZSJdKTsNCiAgICAgIGNvbnN0IF90aGlzID0gdGhpczsNCiAgICAgIHRoaXMuY3VzdGRpYWxvZy5jdXN0RGlhbG9nLm1hcHBpbmdDb25mLmZvckVhY2goY29uID0+IHsNCiAgICAgICAgdmFyIHZhbCA9ICIiOw0KICAgICAgICB2YXIgZnJvbT0iIjsNCiAgICAgICAgaWYoX3RoaXMuY3VzdG9tRGlhbG9nLmRzVHlwZT09InJlc3RmdWwiKSB7DQogICAgICAgICAgZnJvbSA9IGNvbi5mcm9tOw0KICAgICAgICB9ZWxzZXsNCiAgICAgICAgICBmcm9tID0gY29uLmZyb20udG9Mb3dlckNhc2UoKTsNCiAgICAgICAgfQ0KICAgICAgICBzdHIuZm9yRWFjaChpdGVtID0+IHsNCiAgICAgICAgICB2YWwgKz0gaXRlbVtmcm9tXSArICIsIjsNCiAgICAgICAgfSk7DQogICAgICAgIGlmKHZhbCAhPSAiIil7DQogICAgICAgICAgdmFsPXZhbC5zdWJzdHJpbmcoMCwgdmFsLmxlbmd0aCAtIDEpOw0KICAgICAgICB9DQogICAgICAgICB0aGlzLiRlbWl0KCJpbnB1dCIsIHZhbCk7DQogICAgICAgIGlmICh0aGlzLmF0dGVyID09ICJkYXRhLiIgKyBjb25bInRhcmdldCJdWzBdKSB7DQogICAgICAgICAgdXRpbHMuc2V0VmFsdWVCeVBhdGgoDQogICAgICAgICAgICBwSW5zdCwNCiAgICAgICAgICAgICJkYXRhLiIgKyBjb25bInRhcmdldCJdWzBdLHZhbCxzdWJJbmRleA0KICAgICAgICAgICk7DQogICAgICAgIH0gZWxzZSBpZih0aGlzLmF0dGVyLmluZGV4T2YoInNlYXJjaEZvcm0iKSAhPS0xKXsNCiAgICAgICAgIGlmKHRoaXMuaXNGcm9tTGlzdCl7DQogICAgICAgICAgIHBJbnN0LiRzZXQocEluc3Quc2VhcmNoRm9ybSxjb25bInRhcmdldCJdWzBdLCB2YWwpOw0KICAgICAgICAgfWVsc2V7DQogICAgICAgICAgIHV0aWxzLnNldFZhbHVlQnlQYXRoKA0KICAgICAgICAgICAgX3RoaXMsDQogICAgICAgICAgICAic2VhcmNoRm9ybS4iICsgY29uWyJ0YXJnZXQiXVswXSwNCiAgICAgICAgICAgIHZhbC5zdWJzdHJpbmcoMCwgdmFsLmxlbmd0aCAtIDEpLA0KICAgICAgICAgICAgc3ViSW5kZXgNCiAgICAgICAgICApOw0KICAgICAgICAgfQ0KICAgICAgICB9IGVsc2Ugew0KICAgICAgICAgIHV0aWxzLnNldFZhbHVlQnlQYXRoKA0KICAgICAgICAgICAgcEluc3QsDQogICAgICAgICAgICAiZGF0YS4iICsgY29uWyJ0YXJnZXQiXVswXSwNCiAgICAgICAgICAgIHZhbC5zdWJzdHJpbmcoMCwgdmFsLmxlbmd0aCAtIDEpLA0KICAgICAgICAgICAgc3ViSW5kZXgNCiAgICAgICAgICApOw0KICAgICAgICB9DQogICAgICB9KTsNCiAgICB9LA0KICAgIC8v5Y+W5raI5oyJ6ZKuDQogICAgZGlhbG9nQ2FuY2VsKCkgew0KICAgICAgY29uc3QgdGhpc18gPSB0aGlzOw0KICAgICAgdGhpc18uJHN0b3JlLmRpc3BhdGNoKCJkaWFsb2cvc2V0RGlhbG9nRGF0YSIsIFtdKS50aGVuKCgpPT57DQogICAgICAgIHRoaXNfLmN1c3RvbURpYWxvZ1Nob3dMaXN0ID0gZmFsc2U7DQogICAgICAgIC8v5Yik5pat5piv5ZCm5piv54K55Ye75LqG56Gu6K6k5YaN54K55Ye75Y+W5raI55qEICBpbnB1dFZhbOayoeacieWAvOWImeihqOekuuebtOaOpeeCueWHu+eahOWPlua2iA0KICAgICAgICBpZighdGhpc18uaW5wdXRWYWwpew0KICAgICAgICAgIHRoaXNfLnNlbGVjdE9yZ3M9W107DQogICAgICAgIH1lbHNlew0KICAgICAgICAgIHRoaXNfLnNlbGVjdE9yZ3MgPSBbLi4udGhpc18uc2hvd0RhdGFdDQogICAgICAgICAgdGhpcy5jaGVja0JveERhdGFBbGwgPSBbLi4udGhpc18uc2VsZWN0T3Jnc10NCiAgICAgICAgfQ0KICAgICAgfSk7DQogICAgfSwNCiAgICBkaWFsb2dUcmVlQ29uZmlybSgpIHsNCiAgICAgIHRoaXMuY2FsYWNJbnB1dFN1ZmZpeEhlaWdodCgpDQogICAgICBsZXQgc3ViSW5kZXggPSBudWxsOw0KICAgICAgaWYgKHRoaXMuJGVsKSB7DQogICAgICAgIHN1YkluZGV4ID0gdXRpbHMuZ2V0U29tZUF0dHJpYnV0ZUZyb21QYXJlbnRFbGVtZW50KA0KICAgICAgICAgIHRoaXMuJGVsLA0KICAgICAgICAgICJkYXRhLWluZGV4Ig0KICAgICAgICApOw0KICAgICAgfQ0KICAgICAgdGhpcy4kc3RvcmUuZGlzcGF0Y2goImRpYWxvZy9zZXREaWFsb2dEYXRhIiwgW10pOw0KICAgICAgdmFyIHJldHVyblN0ciA9IEpTT04ucGFyc2UodGhpcy5jdXN0b21EaWFsb2cucmVzdWx0ZmllbGQpOw0KICAgICAgdmFyIGZpZWxkID0gbmV3IEFycmF5KFtyZXR1cm5TdHIubGVuZ3RoXSk7DQogICAgICB2YXIgY29tbWVudCA9IG5ldyBBcnJheShbcmV0dXJuU3RyLmxlbmd0aF0pOw0KICAgICAgdmFyIHN0ciA9IFtdOw0KICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCByZXR1cm5TdHIubGVuZ3RoOyBpKyspIHsNCiAgICAgICAgZmllbGRbaV0gPSByZXR1cm5TdHJbaV0uZmllbGQ7DQogICAgICAgIGNvbW1lbnRbaV0gPSByZXR1cm5TdHJbaV0uY29tbWVudDsNCiAgICAgIH0NCiAgICAgIGlmICh0aGlzLmN1c3RvbURpYWxvZy5zZWxlY3ROdW0gPT09IDEpIHsNCiAgICAgICAgdmFyIG5vZGVzID0gdGhpcy5wcm9wc0RhdGFbMF07DQogICAgICAgIHZhciB0ZW1wID0gIiI7DQogICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgY29tbWVudC5sZW5ndGg7IGkrKykgew0KICAgICAgICAgIHRlbXAgKz0gJyInICsgY29tbWVudFtpXSArICciOiInICsgbm9kZXNbZmllbGRbaV1dICsgJyIsJzsNCiAgICAgICAgfQ0KICAgICAgICBpZiAodGVtcCAhPSAiIikgew0KICAgICAgICAgIHRlbXAgPSAieyIgKyB0ZW1wLnN1YnN0cmluZygwLCB0ZW1wLmxlbmd0aCAtIDEpICsgIn0iOw0KICAgICAgICB9DQogICAgICAgIHN0ci5wdXNoKEpTT04ucGFyc2UodGVtcCkpOw0KICAgICAgfSBlbHNlIHsNCiAgICAgICAgdmFyIG5vZGVzID0gdGhpcy5wcm9wc0RhdGE7DQogICAgICAgIG5vZGVzLmZvckVhY2goKGl0ZW0sIGspID0+IHsNCiAgICAgICAgICB2YXIgdGVtcCA9ICIiOw0KICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgY29tbWVudC5sZW5ndGg7IGkrKykgew0KICAgICAgICAgICAgdGVtcCArPSAnIicgKyBjb21tZW50W2ldICsgJyI6IicgKyBub2Rlc1tmaWVsZFtpXV0gKyAnIiwnOw0KICAgICAgICAgICAgdGVtcCArPSAnIicgKyBjb21tZW50W2ldICsgJyI6IicgKyBub2Rlc1trXVtmaWVsZFtpXV0gKyAnIiwnOw0KICAgICAgICAgIH0NCiAgICAgICAgICBpZiAodGVtcCAhPSAiIikgew0KICAgICAgICAgICAgdGVtcCA9ICJ7IiArIHRlbXAuc3Vic3RyaW5nKDAsIHRlbXAubGVuZ3RoIC0gMSkgKyAifSI7DQogICAgICAgICAgfQ0KICAgICAgICAgIHN0ci5wdXNoKEpTT04ucGFyc2UodGVtcCkpOw0KICAgICAgICB9KTsNCiAgICAgIH0NCiAgICAgIC8vIGNvbnN0IHBJbnN0ID0gdXRpbHMuZ2V0T25saW5lRm9ybUluc3RhbmNlKHRoaXMpOw0KICAgICAgY29uc3QgcEluc3QgPSB1dGlscy5nZXRJbnN0YW5jZUJ5VGFnKHRoaXMsWydodC1kYXRhdmlldy1ydW50aW1lLXRlbXBsYXRlJywgImh0LXJ1bnRpbWUtdGVtcGxhdGUiXSk7DQogICAgICB0aGlzLmN1c3RkaWFsb2cuY3VzdERpYWxvZy5tYXBwaW5nQ29uZi5mb3JFYWNoKGNvbiA9PiB7DQogICAgICAgIHZhciB2YWwgPSAiIjsNCiAgICAgICAgc3RyLmZvckVhY2goaXRlbSA9PiB7DQogICAgICAgICAgdmFsICs9IGl0ZW1bY29uLmZyb21dICsgIiwiOw0KICAgICAgICB9KTsNCiAgICAgICAgaWYgKHRoaXMuYXR0ZXIgPT0gImRhdGEuIiArIGNvblsidGFyZ2V0Il1bMF0pIHsNCiAgICAgICAgICB1dGlscy5zZXRWYWx1ZUJ5UGF0aCgNCiAgICAgICAgICAgIHBJbnN0LA0KICAgICAgICAgICAgImRhdGEuIiArIGNvblsidGFyZ2V0Il1bMF0sDQogICAgICAgICAgICB2YWwuc3Vic3RyaW5nKDAsIHZhbC5sZW5ndGggLSAxKSwNCiAgICAgICAgICAgIHN1YkluZGV4DQogICAgICAgICAgKTsNCiAgICAgICAgfSBlbHNlIGlmKHRoaXMuYXR0ZXIgPT0gInNlYXJjaEZvcm0uIiArIGNvblsidGFyZ2V0Il1bMF0pew0KICAgICAgICAgIHV0aWxzLnNldFZhbHVlQnlQYXRoKA0KICAgICAgICAgICAgcEluc3QsDQogICAgICAgICAgICAic2VhcmNoRm9ybS4iICsgY29uWyJ0YXJnZXQiXVswXSwNCiAgICAgICAgICAgIHZhbC5zdWJzdHJpbmcoMCwgdmFsLmxlbmd0aCAtIDEpLA0KICAgICAgICAgICAgc3ViSW5kZXgNCiAgICAgICAgICApOw0KICAgICAgICB9ZWxzZXsNCiAgICAgICAgICB1dGlscy5zZXRWYWx1ZUJ5UGF0aCgNCiAgICAgICAgICAgIHBJbnN0LA0KICAgICAgICAgICAgImRhdGEuIiArIGNvblsidGFyZ2V0Il1bMF0sDQogICAgICAgICAgICB2YWwuc3Vic3RyaW5nKDAsIHZhbC5sZW5ndGggLSAxKSwNCiAgICAgICAgICAgIHN1YkluZGV4DQogICAgICAgICAgKTsNCiAgICAgICAgfQ0KICAgICAgfSk7DQogICAgICAvL3RoaXMuJGVtaXQoImlucHV0IiwgSlNPTi5zdHJpbmdpZnkoc3RyKSk7DQogICAgICB0aGlzLnNob3dEYXRhID0gWy4uLnRoaXMucHJvcHNEYXRhXTsvL+WbnuaYvueahOWAvA0KICAgICAgdGhpcy5jdXN0b21EaWFsb2dTaG93VHJlZSA9IGZhbHNlOw0KICAgIH0sDQogICAgZGlhbG9nQ2FuY2VsVHJlZSgpIHsNCiAgICAgIHRoaXMuJHN0b3JlLmRpc3BhdGNoKCJkaWFsb2cvc2V0RGlhbG9nRGF0YSIsIFtdKTsNCiAgICAgIHRoaXMuY3VzdG9tRGlhbG9nU2hvd1RyZWUgPSBmYWxzZTsNCiAgICB9LA0KICAgIGdldENoZWNrZWQoZGF0YSwgY2hlY2tlZCwgaW5kZXRlcm1pbmF0ZSkgew0KICAgICAgaWYgKHRoaXMuY3VzdG9tRGlhbG9nLnNlbGVjdE51bSA9PT0gMSkgew0KICAgICAgICB0aGlzLnByb3BzRGF0YSA9IFtdOw0KICAgICAgICB0aGlzLnByb3BzRGF0YS5wdXNoKGRhdGEpOw0KICAgICAgfSBlbHNlIHsNCiAgICAgICAgdGhpcy5wcm9wc0RhdGEgPSB0aGlzLiRyZWZzLnRyZWUuZ2V0Q2hlY2tlZE5vZGVzKCk7DQogICAgICB9DQogICAgfSwNCiAgICB0cmVlQ2xpY2soZGF0YSwgbiwgaSl7DQogICAgICBpZiAodGhpcy5jdXN0b21EaWFsb2cuc2VsZWN0TnVtID09PSAxKSB7DQogICAgICAgIHRoaXMucHJvcHNEYXRhID0gW107DQogICAgICAgIHRoaXMucHJvcHNEYXRhLnB1c2goZGF0YSk7DQogICAgICB9DQogICAgfSwNCiAgICBjbGVhckFsbFNlbGVjdE9yZ3MoKSB7DQogICAgICB0aGlzLnNlbGVjdE9yZ3MgPSBudWxsOw0KICAgICAgdGhpcy4kcmVmcy5vcmdUYWJsZS5jbGVhclNlbGVjdGlvbigpOw0KICAgIH0sDQogICAgcmVtb3ZlU2VsZWN0T3JnKGl0ZW0pIHsNCiAgICAgIGlmKHRoaXMuY3VzdG9tRGlhbG9nLnNlbGVjdE51bSA9PT0gMSl7DQogICAgICAgIHRoaXMuJGVtaXQoImlucHV0IiwgIiIpOw0KICAgICAgICB0aGlzLnNlbGVjdE9yZ3Muc3BsaWNlKGl0ZW0sMSk7DQogICAgICAgIHRoaXMuc2hvd0RhdGEuc3BsaWNlKGl0ZW0sMSk7DQogICAgICB9ZWxzZXsNCiAgICAgICAgICB0aGlzLmlucHV0VmFsLnNwbGljZShpdGVtLDEpOw0KICAgICAgICAgIC8vIGxldCByZW1vdmVJZCA9IHRoaXMuc2hvd0RhdGFbaXRlbV07DQogICAgICAgICAgLy/moJHlvaINCiAgICAgICAgICBpZih0aGlzLnByb3BzRGF0YS5sZW5ndGg+MCl7DQogICAgICAgICAgICB0aGlzLnByb3BzRGF0YS5zcGxpY2UoaXRlbSwxKTsNCiAgICAgICAgICB9DQogICAgICAgICAgLy/liJfooagNCiAgICAgICAgICBpZih0aGlzLnNlbGVjdE9yZ3MhPW51bGwpew0KICAgICAgICAgICAgdGhpcy5zZWxlY3RPcmdzLnNwbGljZShpdGVtLDEpOw0KICAgICAgICAgICAgdGhpcy5jaGVja0JveERhdGFBbGwuc3BsaWNlKGl0ZW0sMSk7DQogICAgICAgICAgICB0aGlzLnNlbGVjdE9yZ3MuZm9yRWFjaChyb3cgPT4gew0KICAgICAgICAgICAgICAvLyBpZihpdGVtLmlkID09cmVtb3ZlSWQgKXsNCiAgICAgICAgICAgICAgdGhpcy5pc0N1cnJlbnRDaGFuZ2U9dHJ1ZTsNCiAgICAgICAgICAgICAgdGhpcy50b2dnbGVSb3dTZWxlY3Rpb24ocm93LCBmYWxzZSk7DQogICAgICAgICAgICAvLyB9DQogICAgICAgICAgfSk7DQogICAgICAgICAgfQ0KICAgICAgICAgIHRoaXMuY2FsYWNJbnB1dFN1ZmZpeEhlaWdodCgpOw0KICAgICAgICAgIGxldCB2YWx1ZT0iIjsNCiAgICAgICAgICB0aGlzLmlucHV0VmFsLmZvckVhY2godmFsID0+IHsNCiAgICAgICAgICAgIHZhbHVlICs9IHZhbC52YWx1ZSsgIiwiOw0KICAgICAgICAgIH0pOw0KICAgICAgICAgIGlmKHZhbHVlLmxlbmd0aD4wKXsNCiAgICAgICAgICAgIHZhbHVlPXZhbHVlLnN1YnN0cmluZygwLHZhbHVlLmxlbmd0aC0xKTsNCiAgICAgICAgICB9DQogICAgICAgICAgLyppZih2YWx1ZSE9IiIpew0KICAgICAgICAgICAgdmFsdWU9dmFsdWUrInx8IitKU09OLnN0cmluZ2lmeSh0aGlzLnNob3dEYXRhKTsNCiAgICAgICAgICB9Ki8NCiAgICAgICAgICB0aGlzLiRlbWl0KCJpbnB1dCIsIHZhbHVlKTsNCiAgICAgIH0NCiAgICB9LA0KICAgIGNhbGFjSW5wdXRTdWZmaXhIZWlnaHQoKSB7DQogICAgICBzZXRUaW1lb3V0KCgpID0+IHsNCiAgICAgICAgaWYoIXRoaXMuJHJlZnMudGFnU3BhbnMpIHJldHVybjsNCiAgICAgICAgaWYgKHRoaXMuJHJlZnMudGFnU3BhbnMub2Zmc2V0SGVpZ2h0KSB7DQogICAgICAgICAgdGhpcy5pbnB1dFN1ZmZpeEhlaWdodCA9IHRoaXMuJHJlZnMudGFnU3BhbnMub2Zmc2V0SGVpZ2h0ICsgNTsNCiAgICAgICAgfSBlbHNlIHsNCiAgICAgICAgICB0aGlzLmlucHV0U3VmZml4SGVpZ2h0ID0gMzA7DQogICAgICAgIH0NCiAgICAgICAgLy8g6Kem5Y+R6aqM6K+BDQogICAgICAgIHRoaXMuJHZhbGlkYXRvci52YWxpZGF0ZSgpOw0KICAgICAgfSwgMCk7DQogICAgfSwNCiAgICBjdXN0b21EaWFsb2dTaG93KHBhZ2VQYXJhbSkgew0KICAgICAgdGhpcy5jdXN0b21EaWFsb2dTaG93TGlzdCA9IHRydWU7DQogICAgICB0aGlzLmN1c3RvbURpYWxvZyA9IHBhZ2VQYXJhbS5jdXN0b21EaWFsb2c7DQogICAgICB0aGlzLmN1c3RvbURpYWxvZy5xdWVyeVVybCA9DQogICAgICAgIHRoaXMuY3VzdG9tRGlhbG9nLmRzVHlwZSA9PSAiZGF0YVNvdXJjZSINCiAgICAgICAgICA/ICIke2Zvcm19L2Zvcm0vY3VzdG9tRGlhbG9nL3YxL2dldExpc3REYXRhP2FsaWFzPSIgKw0KICAgICAgICAgICAgdGhpcy5jdXN0b21EaWFsb2cuYWxpYXMgKw0KICAgICAgICAgICAgIiZtYXBQYXJhbT0iICsNCiAgICAgICAgICAgICh0aGlzLmN1c3RvbURpYWxvZy5tYXBQYXJhbSA/IHRoaXMuY3VzdG9tRGlhbG9nLm1hcFBhcmFtIDogIiIpDQogICAgICAgICAgOiB0aGlzLmN1c3RvbURpYWxvZy51cmw7DQoNCiAgICAgIHZhciBjb25kaXRpb25maWVsZCA9IEpTT04ucGFyc2UodGhpcy5jdXN0b21EaWFsb2cuY29uZGl0aW9uZmllbGQpOw0KICAgICAgaWYgKCF0aGlzLmNvbW1lbnQgJiYgY29uZGl0aW9uZmllbGQubGVuZ3RoID4gMCkgew0KICAgICAgICBjb25kaXRpb25maWVsZC5mb3JFYWNoKGl0ZW0gPT4gew0KICAgICAgICAgIGlmIChpdGVtLmNvbnRyb2xsZXJUeXBlID09IDEgJiYgaXRlbS5kZWZhdWx0VHlwZSA9PSAxICYmIGl0ZW0uZGJUeXBlID09ICJ2YXJjaGFyIikgew0KICAgICAgICAgICAgdGhpcy5jb21tZW50ICs9IGl0ZW0uY29tbWVudCArICIsIjsNCiAgICAgICAgICB9DQogICAgICAgIH0pOw0KICAgICAgICBpZiAodGhpcy5jb21tZW50KSB7DQogICAgICAgICAgdGhpcy5xdWVyeXNTaG93ID0gdHJ1ZTsNCiAgICAgICAgICB0aGlzLmNvbW1lbnQgPQ0KICAgICAgICAgICAgIumAmui/hyIgKw0KICAgICAgICAgICAgdGhpcy5jb21tZW50LnN1YnN0cmluZygwLCB0aGlzLmNvbW1lbnQubGVuZ3RoIC0gMSkgKw0KICAgICAgICAgICAgIuafpeivoiI7DQogICAgICAgIH0NCiAgICAgIH0NCiAgICAgIGlmICh0aGlzLmRpYWxvZ0RhdGEubGVuZ3RoIDwgMSkgew0KICAgICAgICB0aGlzLnNlYXJjaCgpOw0KICAgICAgICB0aGlzLmRpc3BsYXlmaWVsZCA9IEpTT04ucGFyc2UocGFnZVBhcmFtLmN1c3RvbURpYWxvZy5kaXNwbGF5ZmllbGQpOw0KICAgICAgICBpZih0aGlzLmN1c3RvbURpYWxvZy5kc1R5cGU9PSdkYXRhU291cmNlJyl7DQogICAgICAgIAlmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMuZGlzcGxheWZpZWxkLmxlbmd0aDsgaSsrKSB7DQogICAgICAgICAgICAgICAgdGhpcy5kaXNwbGF5ZmllbGRbaV0uZmllbGQgPSB0aGlzLmRpc3BsYXlmaWVsZFtpXS5maWVsZC50b0xvd2VyQ2FzZSgpOw0KICAgICAgICAgICAgfQ0KICAgICAgICB9DQogICAgICB9ZWxzZSBpZih0aGlzLmRpYWxvZ0RhdGEubGVuZ3RoPjEpew0KICAgICAgICB0aGlzLnNlYXJjaCgpOw0KICAgICAgfQ0KICAgICAgaWYodGhpcy5kaWFsb2dEYXRhLmxlbmd0aCA+IDAgJiYgdGhpcy5kaXNwbGF5ZmllbGQubGVuZ3RoPT0wKXsNCiAgICAgICAgICB0aGlzLnNlYXJjaCgpOw0KICAgICAgICAgIHRoaXMuZGlzcGxheWZpZWxkID0gSlNPTi5wYXJzZShwYWdlUGFyYW0uY3VzdG9tRGlhbG9nLmRpc3BsYXlmaWVsZCk7DQogICAgICAgICAgaWYodGhpcy5jdXN0b21EaWFsb2cuZHNUeXBlPT0nZGF0YVNvdXJjZScpew0KICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLmRpc3BsYXlmaWVsZC5sZW5ndGg7IGkrKykgew0KICAgICAgICAgICAgICAgICAgdGhpcy5kaXNwbGF5ZmllbGRbaV0uZmllbGQgPSB0aGlzLmRpc3BsYXlmaWVsZFtpXS5maWVsZC50b0xvd2VyQ2FzZSgpOw0KICAgICAgICAgICAgICB9DQogICAgICAgICAgfQ0KICAgICAgfQ0KICAgIH0sDQogICAgY3VzdG9tRGlhbG9nVHJlZVNob3cocGFnZVBhcmFtKSB7DQogICAgICB0aGlzLmN1c3RvbURpYWxvZyA9IHBhZ2VQYXJhbS5jdXN0b21EaWFsb2c7DQogICAgICB2YXIgY3VzdG9tRGlhbG9nID0gdGhpcy5jdXN0b21EaWFsb2c7DQogICAgICB2YXIgbWFwUGFyYW0gPSAiIjsNCiAgICAgIGlmIChwYWdlUGFyYW0ucGFyYW0gIT0gdW5kZWZpbmVkKSB7DQogICAgICAgIG1hcFBhcmFtID0gSlNPTi5zdHJpbmdpZnkocGFnZVBhcmFtLnBhcmFtKTsNCiAgICAgICAgbWFwUGFyYW0gPSBtYXBQYXJhbS5zdWJzdHJpbmcoMSwgbWFwUGFyYW0ubGVuZ3RoIC0gMSk7DQogICAgICB9DQogICAgICB2YXIgcmVxdWVzdFR5cGUgPQ0KICAgICAgICBjdXN0b21EaWFsb2cuZHNUeXBlID09ICJkYXRhU291cmNlIg0KICAgICAgICAgID8gIkdFVCINCiAgICAgICAgICA6IGN1c3RvbURpYWxvZy5yZXF1ZXN0VHlwZQ0KICAgICAgICAgID8gY3VzdG9tRGlhbG9nLnJlcXVlc3RUeXBlDQogICAgICAgICAgOiAiUE9TVCI7DQogICAgICB2YXIgdXJsID0NCiAgICAgICAgIiR7Zm9ybX0vZm9ybS9jdXN0b21EaWFsb2cvdjEvZ2V0VHJlZURhdGE/YWxpYXM9IiArDQogICAgICAgIHBhZ2VQYXJhbS5hbGlhcyArDQogICAgICAgICImbWFwUGFyYW09IiArDQogICAgICAgIG1hcFBhcmFtOw0KICAgICAgdmFyIHBhcmFtc09iaiA9IHt9Ow0KICAgICAgaWYgKGN1c3RvbURpYWxvZy5kc1R5cGUgIT0gImRhdGFTb3VyY2UiKSB7DQogICAgICAgIHVybCA9IGN1c3RvbURpYWxvZy51cmw7DQogICAgICAgIHZhciB0ZW1wbGF0ZVBhID0gY3VzdG9tRGlhbG9nLmRhdGFQYXJhbTsNCiAgICAgICAgaWYgKGN1c3RvbURpYWxvZy5jb25kaXRpb25maWVsZCkgew0KICAgICAgICAgIHZhciBjb25kaXRpb25zID0gSlNPTi5wYXJzZShjdXN0b21EaWFsb2cuY29uZGl0aW9uZmllbGQpOw0KICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgY29uZGl0aW9ucy5sZW5ndGg7IGkrKykgew0KICAgICAgICAgICAgdmFyIGNvbiA9IGNvbmRpdGlvbnNbaV07DQogICAgICAgICAgICBpZiAocmVxdWVzdFR5cGUgPT0gIlBPU1QiKSB7DQogICAgICAgICAgICAgIGlmICh0ZW1wbGF0ZVBhKSB7DQogICAgICAgICAgICAgICAgdGVtcGxhdGVQYSA9IHRlbXBsYXRlUGEucmVwbGFjZSgNCiAgICAgICAgICAgICAgICAgIG5ldyBSZWdFeHAoIlxceyIgKyBjb24uZmllbGQgKyAiXFx9IiwgImciKSwNCiAgICAgICAgICAgICAgICAgIGNvbi5kZWZhdWx0VmFsdWUNCiAgICAgICAgICAgICAgICApOw0KICAgICAgICAgICAgICB9IGVsc2Ugew0KICAgICAgICAgICAgICAgIHBhcmFtc09ialtjb24uZmllbGRdID0gY29uLmRlZmF1bHRWYWx1ZTsNCiAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgfSBlbHNlIHsNCiAgICAgICAgICAgICAgdmFyIGxqQ2hhciA9IHVybC5pbmRleE9mKCI/IikgPT0gLTEgPyAiPyIgOiAiJiI7DQogICAgICAgICAgICAgIHVybCA9IHVybCArIGxqQ2hhciArIGNvbi5maWVsZCArICI9IiArIGNvbi5kZWZhdWx0VmFsdWU7DQogICAgICAgICAgICB9DQogICAgICAgICAgfQ0KICAgICAgICAgIGlmICh0ZW1wbGF0ZVBhKSB7DQogICAgICAgICAgICBwYXJhbXNPYmogPSBKU09OLnBhcnNlKHRlbXBsYXRlUGEpOw0KICAgICAgICAgIH0NCiAgICAgICAgfQ0KICAgICAgfQ0KICAgICAgdmFyIHJlcXVlc3RQYXJhbXMgPSB7fTsNCiAgICAgIHJlcXVlc3RQYXJhbXMucmVxdWVzdFR5cGUgPSByZXF1ZXN0VHlwZTsNCiAgICAgIHJlcXVlc3RQYXJhbXMudXJsID0gdXJsOw0KICAgICAgcmVxdWVzdFBhcmFtcy5wYXJhbXNPYmogPSBwYXJhbXNPYmo7DQogICAgICB0aGlzLnNlYXJjaFRyZWUocmVxdWVzdFBhcmFtcyk7DQogICAgICB0aGlzLmN1c3RvbURpYWxvZ1Nob3dUcmVlID0gdHJ1ZTsNCiAgICB9LA0KICAgIHRvVHJlZURhdGEoZGF0YSwgaWQsIHBpZCwgbmFtZSwgcHZhbHVlLCByZXR1cm5TdHIpIHsNCiAgICAgLy8g5bu656uL5Liq5qCR5b2i57uT5p6ELOmcgOimgeWumuS5ieS4quacgOmhtuWxgueahOeItuiKgueCue+8jHB2YWx1ZeaYrzANCiAgICAgIGxldCBwYXJlbnRzID0gZGF0YS5maWx0ZXIodmFsdWUgPT4gdmFsdWVbaWRdID09IHZhbHVlW3BpZF0gfHwgdmFsdWVbcGlkXSA9PSBudWxsIHx8IHZhbHVlW3BpZF0gPT0gcHZhbHVlKTsNCiAgICAgIGlmICghcGFyZW50cyl7DQogICAgICAgIHBhcmVudHMgPSBkYXRhLmZpbHRlcih2YWx1ZSA9PiB2YWx1ZVtwaWRdICE9PSAndW5kZWZpbmVkJyAmJiB2YWx1ZVtwaWRdICE9IG51bGwgJiYgdmFsdWVbaWRdICE9IHZhbHVlW3BpZF0pOw0KICAgICAgfQ0KICAgICAgcmV0dXJuIHBhcmVudHM7DQogICAgfSwNCiAgICBsb2FkVHJlZShub2RlLCByZXNvbHZlKXsNCiAgICAgIGlmKG5vZGUgJiYgIUFycmF5LmlzQXJyYXkobm9kZS5kYXRhKSl7DQogICAgICAgIGxldCBfdGhpcyA9IHRoaXM7DQogICAgICAgIHJlc29sdmUodGhpcy50cmVlRGF0YS5maWx0ZXIodmFsdWUgPT4gdmFsdWVbX3RoaXMuZGlzcGxheWZpZWxkLnBpZF0gPT09IG5vZGUuZGF0YVtfdGhpcy5kaXNwbGF5ZmllbGQuaWRdKSk7DQogICAgICB9ZWxzZXsNCiAgICAgICAgcmVzb2x2ZShbXSk7DQogICAgICB9DQogICAgfQ0KICB9DQp9Ow0K"},null]}