{"remainingRequest":"D:\\jenkins\\workspace\\xcjy-fvue\\node_modules\\thread-loader\\dist\\cjs.js!D:\\jenkins\\workspace\\xcjy-fvue\\node_modules\\babel-loader\\lib\\index.js!D:\\jenkins\\workspace\\xcjy-fvue\\node_modules\\cache-loader\\dist\\cjs.js??ref--0-0!D:\\jenkins\\workspace\\xcjy-fvue\\node_modules\\vue-loader\\lib\\index.js??vue-loader-options!D:\\jenkins\\workspace\\xcjy-fvue\\src\\views\\patrolAndRescue\\HomePage\\index.vue?vue&type=script&lang=js","dependencies":[{"path":"D:\\jenkins\\workspace\\xcjy-fvue\\src\\views\\patrolAndRescue\\HomePage\\index.vue","mtime":1749816374523},{"path":"D:\\jenkins\\workspace\\xcjy-fvue\\babel.config.js","mtime":1741314102158},{"path":"D:\\jenkins\\workspace\\xcjy-fvue\\node_modules\\cache-loader\\dist\\cjs.js","mtime":499162500000},{"path":"D:\\jenkins\\workspace\\xcjy-fvue\\node_modules\\thread-loader\\dist\\cjs.js","mtime":499162500000},{"path":"D:\\jenkins\\workspace\\xcjy-fvue\\node_modules\\babel-loader\\lib\\index.js","mtime":456789000000},{"path":"D:\\jenkins\\workspace\\xcjy-fvue\\node_modules\\cache-loader\\dist\\cjs.js","mtime":499162500000},{"path":"D:\\jenkins\\workspace\\xcjy-fvue\\node_modules\\vue-loader\\lib\\index.js","mtime":499162500000}],"contextDependencies":[],"result":[{"type":"Buffer","data":"base64:aW1wb3J0IF9yZWdlbmVyYXRvclJ1bnRpbWUgZnJvbSAiRDovamVua2lucy93b3Jrc3BhY2UveGNqeS1mdnVlL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9yZWdlbmVyYXRvclJ1bnRpbWUuanMiOwppbXBvcnQgX2FzeW5jVG9HZW5lcmF0b3IgZnJvbSAiRDovamVua2lucy93b3Jrc3BhY2UveGNqeS1mdnVlL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9hc3luY1RvR2VuZXJhdG9yLmpzIjsKaW1wb3J0ICJjb3JlLWpzL21vZHVsZXMvZXMuYXJyYXkuY29uY2F0LmpzIjsKaW1wb3J0ICJjb3JlLWpzL21vZHVsZXMvZXMuYXJyYXkucHVzaC5qcyI7CmltcG9ydCAiY29yZS1qcy9tb2R1bGVzL2VzLmZ1bmN0aW9uLm5hbWUuanMiOwppbXBvcnQgImNvcmUtanMvbW9kdWxlcy9lcy5pdGVyYXRvci5jb25zdHJ1Y3Rvci5qcyI7CmltcG9ydCAiY29yZS1qcy9tb2R1bGVzL2VzLml0ZXJhdG9yLmZvci1lYWNoLmpzIjsKaW1wb3J0ICJjb3JlLWpzL21vZHVsZXMvZXMub2JqZWN0LmtleXMuanMiOwppbXBvcnQgImNvcmUtanMvbW9kdWxlcy9lcy5vYmplY3QudG8tc3RyaW5nLmpzIjsKaW1wb3J0ICJjb3JlLWpzL21vZHVsZXMvZXMuc3RyaW5nLnBhZC1zdGFydC5qcyI7CmltcG9ydCAiY29yZS1qcy9tb2R1bGVzL3dlYi5kb20tY29sbGVjdGlvbnMuZm9yLWVhY2guanMiOwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwoKaW1wb3J0IHsgZGljdGlvbmFyeUVzY2FwZSB9IGZyb20gJ0AvdXRpbHMvZGljdGlvbmFyeSc7CmltcG9ydCB7IGdldFRyZWUsIHRhYmxlRGF0YWEsIHRhYmxlRGF0YWFMaXN0LCB0YWJsZURhdGFiLCB0YWJsZURhdGFiTGlzdCwgdGFibGVEYXRhYywgdGFibGVEYXRhY0xpc3QgfSBmcm9tICdAL2FwaS9wYXRyb2xBbmRSZXNjdWUvaG9tZVBhZ2UnOwppbXBvcnQgeyBUYWJsZU1peGluIH0gZnJvbSAnQC9taXhpbnMvdGFibGVNaXhpbic7CmltcG9ydCBwYWdpbmF0aW9uIGZyb20gJ0AvY29tcG9uZW50cy9TdXBlclBhZ2luYXRpb24vaW5kZXgudnVlJzsKZXhwb3J0IGRlZmF1bHQgewogIG5hbWU6ICdIb21lUGFnZScsCiAgY29tcG9uZW50czogewogICAgcGFnaW5hdGlvbjogcGFnaW5hdGlvbgogIH0sCiAgbWl4aW5zOiBbVGFibGVNaXhpbl0sCiAgY29tcHV0ZWQ6IHsKICAgIHN0YXR1c1N0eWxlOiBmdW5jdGlvbiBzdGF0dXNTdHlsZSgpIHsKICAgICAgcmV0dXJuIGZ1bmN0aW9uIChpdGVtKSB7CiAgICAgICAgc3dpdGNoIChpdGVtKSB7CiAgICAgICAgICBjYXNlIDA6CiAgICAgICAgICAgIHJldHVybiAnIzkwOTM5OSc7CiAgICAgICAgICBjYXNlIDE6CiAgICAgICAgICAgIHJldHVybiAnIzQwOUVGRic7CiAgICAgICAgICBjYXNlIDI6CiAgICAgICAgICAgIHJldHVybiAnI0U2QTIzQyc7CiAgICAgICAgICBjYXNlIDM6CiAgICAgICAgICAgIHJldHVybiAnIzQwZTJmZic7CiAgICAgICAgICBjYXNlIDQ6CiAgICAgICAgICAgIHJldHVybiAnIzY3QzIzQSc7CiAgICAgICAgICBjYXNlIDU6CiAgICAgICAgICAgIHJldHVybiAnI0Y1NkM2Qyc7CiAgICAgICAgICBkZWZhdWx0OgogICAgICAgICAgICByZXR1cm4gJyc7CiAgICAgICAgfQogICAgICB9OwogICAgfQogIH0sCiAgZGF0YTogZnVuY3Rpb24gZGF0YSgpIHsKICAgIHJldHVybiB7CiAgICAgIHBhZ2VSZXN1bHQ6IHsKICAgICAgICB0eXBlb2Y6IE9iamVjdCwKICAgICAgICBkZWZhdWx0OiBmdW5jdGlvbiBfZGVmYXVsdChfKSB7CiAgICAgICAgICByZXR1cm4gewogICAgICAgICAgICBwYWdlOiAxLAogICAgICAgICAgICBwYWdlU2l6ZTogMjAsCiAgICAgICAgICAgIHRvdGFsOiAwCiAgICAgICAgICB9OwogICAgICAgIH0KICAgICAgfSwKICAgICAgcGFyYW1zOiB7CiAgICAgICAgcGFnZUJlYW46IHsKICAgICAgICAgIHBhZ2VTaXplOiAxMCwKICAgICAgICAgIHBhZ2U6IDEsCiAgICAgICAgICB0b3RhbDogMAogICAgICAgIH0KICAgICAgfSwKICAgICAgdGFza0xpc3RvdGhlcmFhYTogW10sCiAgICAgIC8v5Lu75Yqh5YiX6KGoCiAgICAgIHRhc2tMaXN0b3RoZXJiYmI6IFtdLAogICAgICAvL+S6i+S7tuafpeivouWIl+ihqAogICAgICB0aW1lU2hvdzogJ2RheScsCiAgICAgIC8vIOm7mOiupOmAieaLqeKAnOaXpeKAnQogICAgICB0YXNrTGlzdG90aGVyY2NjOiBbXSwKICAgICAgLy/lvILluLjkv6Hmga/liJfooagKICAgICAgcGFnaW5hdGlvbkFhYTogewogICAgICAgIHBhZ2VTaXplOiAxMCwKICAgICAgICBwYWdlOiAxLAogICAgICAgIHRvdGFsOiAwCiAgICAgIH0sCiAgICAgIC8vIHRhc2tMaXN0b3RoZXJhYWEg55qE5YiG6aG15Y+C5pWwCiAgICAgIHBhZ2luYXRpb25CYmI6IHsKICAgICAgICBwYWdlU2l6ZTogMTAsCiAgICAgICAgcGFnZTogMSwKICAgICAgICB0b3RhbDogMAogICAgICB9LAogICAgICAvLyB0YXNrTGlzdG90aGVyYmJiIOeahOWIhumhteWPguaVsAogICAgICBwYWdpbmF0aW9uQ2NjOiB7CiAgICAgICAgcGFnZVNpemU6IDEwLAogICAgICAgIHBhZ2U6IDEsCiAgICAgICAgdG90YWw6IDAKICAgICAgfSwKICAgICAgLy8gdGFza0xpc3RvdGhlcmNjYyDnmoTliIbpobXlj4LmlbAKICAgICAgZXZlbnRTdGF0dXM6IG51bGwsCiAgICAgIC8vIOW9k+WJjeeCueWHu+eahOS6i+S7tueKtuaAgS3kuovku7bmn6Xor6LliJfooagKICAgICAgY3VycmVudFR5cGU6IDEsCiAgICAgIC8vIOm7mOiupOexu+Wei+S4uuW3oeafpeS7u+WKoQogICAgICBiYWNrZ3JvdW5kSW1hZ2VVcmw6IHJlcXVpcmUoJ0AvYXNzZXRzL2ltZy9ob21lUGFnZS9kYW5nLnBuZycpLAogICAgICB0YWJsZURhdGE6IFtdLAogICAgICBjdXJyZW50TWVudTogJ2hvbWVQYWdlJywKICAgICAgdGFza0xpc3Q6IFtdLAogICAgICAvL+S6i+S7tuafpeivogogICAgICB0YXNrTGlzdG90aGVyOiBbXSwKICAgICAgLy/lvZPliY3ku7vliqEKICAgICAgdGFza0xpc3RvdGhlckxpc3Q6IFtdLAogICAgICAvL+W8guW4uOS/oeaBrwogICAgICBjdXJyZW50QWN0aXZlSW5kZXg6IC0xLAogICAgICAvLyDmlrDlop7lj5jph4/vvIzorrDlvZXlvZPliY3ngrnlh7vnmoTntKLlvJUKICAgICAgb3JnTGlzdDogW10sCiAgICAgIGN1cnJlbnRTdGFydFRpbWU6ICcnLAogICAgICAvLyDmlrDlop7lj5jph4/vvIzlrZjlgqjlvZPliY3lvIDlp4vml7bpl7QKICAgICAgY3VycmVudEVuZFRpbWU6ICcnLAogICAgICAvLyDmlrDlop7lj5jph4/vvIzlrZjlgqjlvZPliY3nu5PmnZ/ml7bpl7QKICAgICAgaGFuZGxlVHlwZTogMAogICAgfTsKICB9LAogIGNyZWF0ZWQ6IGZ1bmN0aW9uIGNyZWF0ZWQoKSB7CiAgICAvLyDliJ3lp4vljJbpu5jorqTpgInkuK3igJzml6XigJ0KICAgIHRoaXMudGltZVNob3cgPSAnZGF5JzsKICAgIC8vIOiOt+WPluW9k+WJjeaXpeacnwogICAgdmFyIG5vdyA9IG5ldyBEYXRlKCk7CiAgICB2YXIgeWVhciA9IG5vdy5nZXRGdWxsWWVhcigpOwogICAgdmFyIG1vbnRoID0gU3RyaW5nKG5vdy5nZXRNb250aCgpICsgMSkucGFkU3RhcnQoMiwgJzAnKTsgLy8g5pyI5Lu95LuOIDAg5byA5aeL77yM6ZyA6KaBICsxCiAgICB2YXIgZGF5ID0gU3RyaW5nKG5vdy5nZXREYXRlKCkpLnBhZFN0YXJ0KDIsICcwJyk7CiAgICB0aGlzLmN1cnJlbnRTdGFydFRpbWUgPSAiIi5jb25jYXQoeWVhciwgIi0iKS5jb25jYXQobW9udGgsICItIikuY29uY2F0KGRheSk7CiAgICB0aGlzLmN1cnJlbnRFbmRUaW1lID0gdGhpcy5jdXJyZW50U3RhcnRUaW1lOwoKICAgIC8vIOm7mOiupOeCueWHu+KAnOS6i+S7tuaAu+aVsCjku7Yp4oCdCiAgICB0aGlzLmhhbmRsZVRhc2tDbGljaygwKTsgLy8gMCDooajnpLrkuovku7bmgLvmlbAKICAgIHRoaXMudGFza0xpc3RvdGhlckRhdGEoKTsKICAgIHRoaXMudGFza0xpc3RvdGhlckxpc3REYXRhKCk7CiAgICB0aGlzLnRhc2tMaXN0RGF0YSh0aGlzLmN1cnJlbnRTdGFydFRpbWUsIHRoaXMuY3VycmVudEVuZFRpbWUpOwogICAgdGhpcy5MaXN0YWFhKCk7CiAgICB0aGlzLkxpc3RiYmIodGhpcy5jdXJyZW50U3RhcnRUaW1lLCB0aGlzLmN1cnJlbnRFbmRUaW1lKTsKICAgIHRoaXMuTGlzdGNjYygpOwogICAgdGhpcy5nZXRPcmdUcmVlRGF0YSgpOwogIH0sCiAgd2F0Y2g6IHsKICAgIC8vIOebkeWQrCB0aW1lU2hvdyDnmoTlj5jljJYKICAgIHRpbWVTaG93OiBmdW5jdGlvbiB0aW1lU2hvdyhuZXdWYWwpIHsKICAgICAgdGhpcy5oYW5kbGVUaW1lQ2hhbmdlKG5ld1ZhbCk7IC8vIOiwg+eUqOaXtumXtOWPmOWMluWkhOeQhuaWueazlQogICAgfSAvLyB0aGlzLm9wZW5QYWdlKCkKICB9LAogIG1vdW50ZWQ6IGZ1bmN0aW9uIG1vdW50ZWQoKSB7CiAgICB2YXIgX3RoaXMgPSB0aGlzOwogICAgdmFyIGN1cnJlbnRVc2VyID0gc2Vzc2lvblN0b3JhZ2UuZ2V0SXRlbSgnY3VycmVudFVzZXJEZXRhaWwnKTsKICAgIHRoaXMubmFtZSA9IEpTT04ucGFyc2UoY3VycmVudFVzZXIpLnVzZXIuZnVsbG5hbWU7CiAgICB0aGlzLmRlcHROYW1lID0gSlNPTi5wYXJzZShjdXJyZW50VXNlcikub3JnWzBdLmRlcHROYW1lOwogICAgdGhpcy5vcmdOYW1lID0gSlNPTi5wYXJzZShjdXJyZW50VXNlcikub3JnWzBdLm9yZ05hbWU7CiAgICB0aGlzLiRidXMuJG9uKCdyZWZyZXNoQWJub3JtYWxMaXN0RXZlbnQnLCBmdW5jdGlvbiAoKSB7CiAgICAgIF90aGlzLkxpc3RjY2MoKTsKICAgICAgLy/liLfmlrDlvILluLgKICAgIH0pOwogIH0sCiAgbWV0aG9kczogewogICAgZGljdGlvbmFyeUVzY2FwZTogZGljdGlvbmFyeUVzY2FwZSwKICAgIC8vIOi3s+i9rOWIsOS6i+S7tueZu+iusOmhtemdogogICAgbmF2aWdhdGVUb0V2ZW50UmVnaXN0cmF0aW9uYTogZnVuY3Rpb24gbmF2aWdhdGVUb0V2ZW50UmVnaXN0cmF0aW9uYSgpIHsKICAgICAgdGhpcy4kcm91dGVyLnB1c2goewogICAgICAgIHBhdGg6ICdwYXRyb2xBbmRSZXNjdWUvcm9hZFdhdGNoL2luc3BlY3Rpb25SZXN1bHRzJwogICAgICB9KTsKICAgIH0sCiAgICBuYXZpZ2F0ZVRvRXZlbnRSZWdpc3RyYXRpb25iOiBmdW5jdGlvbiBuYXZpZ2F0ZVRvRXZlbnRSZWdpc3RyYXRpb25iKCkgewogICAgICB0aGlzLiRyb3V0ZXIucHVzaCh7CiAgICAgICAgcGF0aDogJ3BhdHJvbEFuZFJlc2N1ZS9jb21tYW5kRGlzcGF0Y2gvZXZlbnRSZWdpc3RyYXRpb24nCiAgICAgIH0pOwogICAgfSwKICAgIG5hdmlnYXRlVG9FdmVudFJlZ2lzdHJhdGlvbmM6IGZ1bmN0aW9uIG5hdmlnYXRlVG9FdmVudFJlZ2lzdHJhdGlvbmMoKSB7CiAgICAgIHRoaXMuJHJvdXRlci5wdXNoKHsKICAgICAgICBwYXRoOiAncGF0cm9sQW5kUmVzY3VlL29ic3RhY2xlQ2xlYXJpbmdSZXNjdWUvcmVzY3VlUmVnaXN0cmF0aW9uJwogICAgICB9KTsKICAgIH0sCiAgICAvLyDlpITnkIbml7bpl7Tlj5jljJYKICAgIGhhbmRsZVRpbWVDaGFuZ2U6IGZ1bmN0aW9uIGhhbmRsZVRpbWVDaGFuZ2UodGltZVR5cGUpIHsKICAgICAgdmFyIHN0YXJ0VGltZSA9ICcnOwogICAgICB2YXIgZW5kVGltZSA9ICcnOwogICAgICB2YXIgbm93ID0gbmV3IERhdGUoKTsKICAgICAgdmFyIHllYXIgPSBub3cuZ2V0RnVsbFllYXIoKTsKICAgICAgdmFyIG1vbnRoID0gU3RyaW5nKG5vdy5nZXRNb250aCgpICsgMSkucGFkU3RhcnQoMiwgJzAnKTsgLy8g5pyI5Lu95LuOIDAg5byA5aeL77yM6ZyA6KaBICsxCiAgICAgIHZhciBkYXkgPSBTdHJpbmcobm93LmdldERhdGUoKSkucGFkU3RhcnQoMiwgJzAnKTsKICAgICAgc3dpdGNoICh0aW1lVHlwZSkgewogICAgICAgIGNhc2UgJ2RheSc6CiAgICAgICAgICAvLyDml6UKICAgICAgICAgIHN0YXJ0VGltZSA9ICIiLmNvbmNhdCh5ZWFyLCAiLSIpLmNvbmNhdChtb250aCwgIi0iKS5jb25jYXQoZGF5KTsKICAgICAgICAgIGVuZFRpbWUgPSBzdGFydFRpbWU7IC8vIOW8gOWni+aXtumXtOWSjOe7k+adn+aXtumXtOebuOWQjAogICAgICAgICAgYnJlYWs7CiAgICAgICAgY2FzZSAnbW9udGgnOgogICAgICAgICAgLy8g5pyICiAgICAgICAgICBzdGFydFRpbWUgPSAiIi5jb25jYXQoeWVhciwgIi0iKS5jb25jYXQobW9udGgsICItMDEiKTsgLy8g5b2T5YmN5pyI55qE56ys5LiA5aSpCiAgICAgICAgICBlbmRUaW1lID0gIiIuY29uY2F0KHllYXIsICItIikuY29uY2F0KG1vbnRoLCAiLSIpLmNvbmNhdChuZXcgRGF0ZSh5ZWFyLCBub3cuZ2V0TW9udGgoKSArIDEsIDApLmdldERhdGUoKSk7IC8vIOW9k+WJjeaciOeahOacgOWQjuS4gOWkqQogICAgICAgICAgYnJlYWs7CiAgICAgICAgY2FzZSAneWVhcic6CiAgICAgICAgICAvLyDlubQKICAgICAgICAgIHN0YXJ0VGltZSA9ICIiLmNvbmNhdCh5ZWFyLCAiLTAxLTAxIik7IC8vIOW9k+WJjeW5tOeahOesrOS4gOWkqQogICAgICAgICAgZW5kVGltZSA9ICIiLmNvbmNhdCh5ZWFyLCAiLTEyLTMxIik7IC8vIOW9k+WJjeW5tOeahOacgOWQjuS4gOWkqQogICAgICAgICAgYnJlYWs7CiAgICAgICAgZGVmYXVsdDoKICAgICAgICAgIHN0YXJ0VGltZSA9ICcnOwogICAgICAgICAgZW5kVGltZSA9ICcnOwogICAgICB9CiAgICAgIC8vIOWtmOWCqOW9k+WJjeaXtumXtOiMg+WbtAogICAgICB0aGlzLmN1cnJlbnRTdGFydFRpbWUgPSBzdGFydFRpbWU7CiAgICAgIHRoaXMuY3VycmVudEVuZFRpbWUgPSBlbmRUaW1lOwoKICAgICAgLy8g6LCD55SoIExpc3RiYmIg5pa55rOV77yM5Lyg5YWl5pe26Ze06IyD5Zu0CiAgICAgIHRoaXMuTGlzdGJiYihzdGFydFRpbWUsIGVuZFRpbWUpOwogICAgICAvLyDosIPnlKggdGFza0xpc3REYXRhIOaWueazle+8jOS8oOWFpeaXtumXtOiMg+WbtAogICAgICB0aGlzLnRhc2tMaXN0RGF0YShzdGFydFRpbWUsIGVuZFRpbWUpOwogICAgfSwKICAgIC8v5byC5bi45L+h5oGvCiAgICB0YXNrTGlzdG90aGVyTGlzdERhdGE6IGZ1bmN0aW9uIHRhc2tMaXN0b3RoZXJMaXN0RGF0YSgpIHsKICAgICAgdmFyIF90aGlzMiA9IHRoaXM7CiAgICAgIHJldHVybiBfYXN5bmNUb0dlbmVyYXRvcigvKiNfX1BVUkVfXyovX3JlZ2VuZXJhdG9yUnVudGltZSgpLm1hcmsoZnVuY3Rpb24gX2NhbGxlZSgpIHsKICAgICAgICB2YXIgcmVzcG9uc2U7CiAgICAgICAgcmV0dXJuIF9yZWdlbmVyYXRvclJ1bnRpbWUoKS53cmFwKGZ1bmN0aW9uIF9jYWxsZWUkKF9jb250ZXh0KSB7CiAgICAgICAgICB3aGlsZSAoMSkgc3dpdGNoIChfY29udGV4dC5wcmV2ID0gX2NvbnRleHQubmV4dCkgewogICAgICAgICAgICBjYXNlIDA6CiAgICAgICAgICAgICAgX3RoaXMyLnRhYmxlTG9hZGluZyA9IHRydWU7CiAgICAgICAgICAgICAgX2NvbnRleHQucHJldiA9IDE7CiAgICAgICAgICAgICAgaWYgKCEoIV90aGlzMi5vcmdMaXN0IHx8IF90aGlzMi5vcmdMaXN0Lmxlbmd0aCA9PT0gMCkpIHsKICAgICAgICAgICAgICAgIF9jb250ZXh0Lm5leHQgPSA1OwogICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgfQogICAgICAgICAgICAgIF9jb250ZXh0Lm5leHQgPSA1OwogICAgICAgICAgICAgIHJldHVybiBfdGhpczIuZ2V0T3JnVHJlZURhdGEoKTsKICAgICAgICAgICAgY2FzZSA1OgogICAgICAgICAgICAgIF9jb250ZXh0Lm5leHQgPSA3OwogICAgICAgICAgICAgIHJldHVybiB0YWJsZURhdGFiKF90aGlzMi5vcmdMaXN0KTsKICAgICAgICAgICAgY2FzZSA3OgogICAgICAgICAgICAgIHJlc3BvbnNlID0gX2NvbnRleHQuc2VudDsKICAgICAgICAgICAgICBpZiAocmVzcG9uc2UgJiYgcmVzcG9uc2UudmFsdWUpIHsKICAgICAgICAgICAgICAgIF90aGlzMi50YXNrTGlzdG90aGVyTGlzdCA9IHJlc3BvbnNlLnZhbHVlOyAvLyDlsIbmjqXlj6Pov5Tlm57nmoTmlbDmja7otYvlgLznu5kgdGFza0xpc3RvdGhlcgogICAgICAgICAgICAgIH0KICAgICAgICAgICAgICBfY29udGV4dC5uZXh0ID0gMTQ7CiAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgIGNhc2UgMTE6CiAgICAgICAgICAgICAgX2NvbnRleHQucHJldiA9IDExOwogICAgICAgICAgICAgIF9jb250ZXh0LnQwID0gX2NvbnRleHRbImNhdGNoIl0oMSk7CiAgICAgICAgICAgICAgY29uc29sZS5lcnJvcign6K+35rGC5pWw5o2u5aSx6LSlOicsIF9jb250ZXh0LnQwKTsKICAgICAgICAgICAgY2FzZSAxNDoKICAgICAgICAgICAgICBfY29udGV4dC5wcmV2ID0gMTQ7CiAgICAgICAgICAgICAgX3RoaXMyLnRhYmxlTG9hZGluZyA9IGZhbHNlOwogICAgICAgICAgICAgIHJldHVybiBfY29udGV4dC5maW5pc2goMTQpOwogICAgICAgICAgICBjYXNlIDE3OgogICAgICAgICAgICBjYXNlICJlbmQiOgogICAgICAgICAgICAgIHJldHVybiBfY29udGV4dC5zdG9wKCk7CiAgICAgICAgICB9CiAgICAgICAgfSwgX2NhbGxlZSwgbnVsbCwgW1sxLCAxMSwgMTQsIDE3XV0pOwogICAgICB9KSkoKTsKICAgIH0sCiAgICAvL+S6i+S7tue7n+iuoQogICAgdGFza0xpc3REYXRhOiBmdW5jdGlvbiB0YXNrTGlzdERhdGEoc3RhcnRUaW1lLCBlbmRUaW1lKSB7CiAgICAgIHZhciBfdGhpczMgPSB0aGlzOwogICAgICByZXR1cm4gX2FzeW5jVG9HZW5lcmF0b3IoLyojX19QVVJFX18qL19yZWdlbmVyYXRvclJ1bnRpbWUoKS5tYXJrKGZ1bmN0aW9uIF9jYWxsZWUyKCkgewogICAgICAgIHZhciByZXF1ZXN0Qm9keSwgcmVzcG9uc2U7CiAgICAgICAgcmV0dXJuIF9yZWdlbmVyYXRvclJ1bnRpbWUoKS53cmFwKGZ1bmN0aW9uIF9jYWxsZWUyJChfY29udGV4dDIpIHsKICAgICAgICAgIHdoaWxlICgxKSBzd2l0Y2ggKF9jb250ZXh0Mi5wcmV2ID0gX2NvbnRleHQyLm5leHQpIHsKICAgICAgICAgICAgY2FzZSAwOgogICAgICAgICAgICAgIF90aGlzMy50YWJsZUxvYWRpbmcgPSB0cnVlOwogICAgICAgICAgICAgIF9jb250ZXh0Mi5wcmV2ID0gMTsKICAgICAgICAgICAgICBpZiAoISghX3RoaXMzLm9yZ0xpc3QgfHwgX3RoaXMzLm9yZ0xpc3QubGVuZ3RoID09PSAwKSkgewogICAgICAgICAgICAgICAgX2NvbnRleHQyLm5leHQgPSA1OwogICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgfQogICAgICAgICAgICAgIF9jb250ZXh0Mi5uZXh0ID0gNTsKICAgICAgICAgICAgICByZXR1cm4gX3RoaXMzLmdldE9yZ1RyZWVEYXRhKCk7CiAgICAgICAgICAgIGNhc2UgNToKICAgICAgICAgICAgICAvLyDmnoTpgKDor7fmsYLkvZMKICAgICAgICAgICAgICByZXF1ZXN0Qm9keSA9IHsKICAgICAgICAgICAgICAgIGdyb3VwUmVsYXRpb246ICdBTkQnLAogICAgICAgICAgICAgICAgZ3JvdXBUcmVlOiB7fSwKICAgICAgICAgICAgICAgIHBhZ2VCZWFuOiB7CiAgICAgICAgICAgICAgICAgIHBhZ2U6IDEsCiAgICAgICAgICAgICAgICAgIHBhZ2VTaXplOiAxMCwKICAgICAgICAgICAgICAgICAgc2hvd1RvdGFsOiB0cnVlCiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgcGFyYW1zOiB7CiAgICAgICAgICAgICAgICAgIC8vIHN0YXJ0VGltZTogc3RhcnRUaW1lLCAvLyDlvIDlp4vml7bpl7QKICAgICAgICAgICAgICAgICAgLy8gZW5kVGltZTogZW5kVGltZSAvLyDnu5PmnZ/ml7bpl7QKICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICBxdWVyeXM6IFtdLAogICAgICAgICAgICAgICAgc29ydGVyOiBbewogICAgICAgICAgICAgICAgICBkaXJlY3Rpb246ICdBU0MnLAogICAgICAgICAgICAgICAgICBwcm9wZXJ0eTogJycKICAgICAgICAgICAgICAgIH1dCiAgICAgICAgICAgICAgfTsgLy8g5omT5Y2w6K+35rGC5L2T77yM5qOA5p+l5piv5ZCm5q2j56GuCiAgICAgICAgICAgICAgX2NvbnRleHQyLm5leHQgPSA4OwogICAgICAgICAgICAgIHJldHVybiB0YWJsZURhdGFjKHJlcXVlc3RCb2R5LCBfdGhpczMub3JnTGlzdCwgc3RhcnRUaW1lLCBlbmRUaW1lKTsKICAgICAgICAgICAgY2FzZSA4OgogICAgICAgICAgICAgIHJlc3BvbnNlID0gX2NvbnRleHQyLnNlbnQ7CiAgICAgICAgICAgICAgaWYgKHJlc3BvbnNlICYmIHJlc3BvbnNlLnZhbHVlKSB7CiAgICAgICAgICAgICAgICBfdGhpczMudGFza0xpc3QgPSByZXNwb25zZS52YWx1ZTsgLy8g5bCG5o6l5Y+j6L+U5Zue55qE5pWw5o2u6LWL5YC857uZIHRhc2tMaXN0b3RoZXIKICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgX2NvbnRleHQyLm5leHQgPSAxNTsKICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgY2FzZSAxMjoKICAgICAgICAgICAgICBfY29udGV4dDIucHJldiA9IDEyOwogICAgICAgICAgICAgIF9jb250ZXh0Mi50MCA9IF9jb250ZXh0MlsiY2F0Y2giXSgxKTsKICAgICAgICAgICAgICBjb25zb2xlLmVycm9yKCfor7fmsYLmlbDmja7lpLHotKU6JywgX2NvbnRleHQyLnQwKTsKICAgICAgICAgICAgY2FzZSAxNToKICAgICAgICAgICAgICBfY29udGV4dDIucHJldiA9IDE1OwogICAgICAgICAgICAgIF90aGlzMy50YWJsZUxvYWRpbmcgPSBmYWxzZTsKICAgICAgICAgICAgICByZXR1cm4gX2NvbnRleHQyLmZpbmlzaCgxNSk7CiAgICAgICAgICAgIGNhc2UgMTg6CiAgICAgICAgICAgIGNhc2UgImVuZCI6CiAgICAgICAgICAgICAgcmV0dXJuIF9jb250ZXh0Mi5zdG9wKCk7CiAgICAgICAgICB9CiAgICAgICAgfSwgX2NhbGxlZTIsIG51bGwsIFtbMSwgMTIsIDE1LCAxOF1dKTsKICAgICAgfSkpKCk7CiAgICB9LAogICAgLy/kuovku7bmn6Xor6Lngrnlh7st6K+35rGC5YiX6KGoCiAgICBoYW5kbGVUYXNrQ2xpY2s6IGZ1bmN0aW9uIGhhbmRsZVRhc2tDbGljayhpbmRleCkgewogICAgICB0aGlzLmN1cnJlbnRBY3RpdmVJbmRleCA9IGluZGV4OyAvLyDmm7TmlrDlvZPliY3ngrnlh7vnmoTntKLlvJUKICAgICAgc3dpdGNoIChpbmRleCkgewogICAgICAgIGNhc2UgMDoKICAgICAgICAgIC8vIOS6i+S7tuaAu+aVsAogICAgICAgICAgdGhpcy5ldmVudFN0YXR1cyA9IG51bGw7IC8vIOS4jeS8oCBldmVudFN0YXR1cwogICAgICAgICAgYnJlYWs7CiAgICAgICAgY2FzZSAxOgogICAgICAgICAgLy8g5b6F5o6l5Y2V5LqL5Lu2CiAgICAgICAgICB0aGlzLmV2ZW50U3RhdHVzID0gWy0xLCAwLCAxXTsKICAgICAgICAgIGJyZWFrOwogICAgICAgIGNhc2UgMjoKICAgICAgICAgIC8vIOWkhOe9ruS4reS6i+S7tgogICAgICAgICAgdGhpcy5ldmVudFN0YXR1cyA9IFsyXTsKICAgICAgICAgIGJyZWFrOwogICAgICAgIGNhc2UgMzoKICAgICAgICAgIC8vIOWkhOe9rue7k+adn+S6i+S7tgogICAgICAgICAgdGhpcy5ldmVudFN0YXR1cyA9IFszXTsKICAgICAgICAgIGJyZWFrOwogICAgICAgIGNhc2UgNDoKICAgICAgICAgIC8vIOW3suWKnue7k+S6i+S7tgogICAgICAgICAgdGhpcy5ldmVudFN0YXR1cyA9IFs0XTsKICAgICAgICAgIGJyZWFrOwogICAgICAgIGRlZmF1bHQ6CiAgICAgICAgICB0aGlzLmV2ZW50U3RhdHVzID0gbnVsbDsKICAgICAgfQogICAgICAvLyDkvb/nlKjlvZPliY3ml7bpl7TojIPlm7TosIPnlKggTGlzdGJiYgogICAgICB0aGlzLnBhZ2luYXRpb25CYmIucGFnZSA9IDE7CiAgICAgIHRoaXMuTGlzdGJiYih0aGlzLmN1cnJlbnRTdGFydFRpbWUsIHRoaXMuY3VycmVudEVuZFRpbWUpOwogICAgfSwKICAgIC8v5LqL5Lu25YiX6KGo5p+l6K+iCiAgICBMaXN0YmJiOiBmdW5jdGlvbiBMaXN0YmJiKHN0YXJ0VGltZSwgZW5kVGltZSkgewogICAgICB2YXIgX3RoaXM0ID0gdGhpczsKICAgICAgcmV0dXJuIF9hc3luY1RvR2VuZXJhdG9yKC8qI19fUFVSRV9fKi9fcmVnZW5lcmF0b3JSdW50aW1lKCkubWFyayhmdW5jdGlvbiBfY2FsbGVlMygpIHsKICAgICAgICB2YXIgcmVxdWVzdEJvZHksIHJlc3BvbnNlOwogICAgICAgIHJldHVybiBfcmVnZW5lcmF0b3JSdW50aW1lKCkud3JhcChmdW5jdGlvbiBfY2FsbGVlMyQoX2NvbnRleHQzKSB7CiAgICAgICAgICB3aGlsZSAoMSkgc3dpdGNoIChfY29udGV4dDMucHJldiA9IF9jb250ZXh0My5uZXh0KSB7CiAgICAgICAgICAgIGNhc2UgMDoKICAgICAgICAgICAgICBfdGhpczQudGFibGVMb2FkaW5nID0gdHJ1ZTsKICAgICAgICAgICAgICBfY29udGV4dDMucHJldiA9IDE7CiAgICAgICAgICAgICAgaWYgKCEoIV90aGlzNC5vcmdMaXN0IHx8IF90aGlzNC5vcmdMaXN0Lmxlbmd0aCA9PT0gMCkpIHsKICAgICAgICAgICAgICAgIF9jb250ZXh0My5uZXh0ID0gNTsKICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgIH0KICAgICAgICAgICAgICBfY29udGV4dDMubmV4dCA9IDU7CiAgICAgICAgICAgICAgcmV0dXJuIF90aGlzNC5nZXRPcmdUcmVlRGF0YSgpOwogICAgICAgICAgICBjYXNlIDU6CiAgICAgICAgICAgICAgLy8g5p6E6YCg6K+35rGC5L2TCiAgICAgICAgICAgICAgcmVxdWVzdEJvZHkgPSB7CiAgICAgICAgICAgICAgICBncm91cFJlbGF0aW9uOiAnQU5EJywKICAgICAgICAgICAgICAgIGdyb3VwVHJlZToge30sCiAgICAgICAgICAgICAgICBwYWdlQmVhbjogewogICAgICAgICAgICAgICAgICBwYWdlOiBfdGhpczQucGFnaW5hdGlvbkJiYi5wYWdlLAogICAgICAgICAgICAgICAgICAvLyDlvZPliY3pobXnoIEKICAgICAgICAgICAgICAgICAgcGFnZVNpemU6IF90aGlzNC5wYWdpbmF0aW9uQmJiLnBhZ2VTaXplLAogICAgICAgICAgICAgICAgICAvLyDmr4/pobXmnaHmlbAKICAgICAgICAgICAgICAgICAgc2hvd1RvdGFsOiB0cnVlCiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgcGFyYW1zOiB7CiAgICAgICAgICAgICAgICAgIHN0YXJ0VGltZTogc3RhcnRUaW1lLAogICAgICAgICAgICAgICAgICAvLyDlvIDlp4vml7bpl7QKICAgICAgICAgICAgICAgICAgZW5kVGltZTogZW5kVGltZSAvLyDnu5PmnZ/ml7bpl7QKICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICBxdWVyeXM6IFt7CiAgICAgICAgICAgICAgICAgIGdyb3VwOiAnbWFpbicsCiAgICAgICAgICAgICAgICAgIG9wZXJhdGlvbjogJ0lOJywKICAgICAgICAgICAgICAgICAgcGFyZW50R3JvdXA6ICcnLAogICAgICAgICAgICAgICAgICBwcm9wZXJ0eTogJ2V2ZW50U3RhdHVzJywKICAgICAgICAgICAgICAgICAgcmVsYXRpb246ICdBTkQnLAogICAgICAgICAgICAgICAgICB2YWx1ZTogX3RoaXM0LmV2ZW50U3RhdHVzCiAgICAgICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAgIGdyb3VwOiAnbWFpbicsCiAgICAgICAgICAgICAgICAgIG9wZXJhdGlvbjogJ0lOJywKICAgICAgICAgICAgICAgICAgLy8g5L2/55SoIElOIOaTjeS9nOespgogICAgICAgICAgICAgICAgICBwYXJlbnRHcm91cDogJycsCiAgICAgICAgICAgICAgICAgIHByb3BlcnR5OiAncm9hZF9pZF8nLAogICAgICAgICAgICAgICAgICAvLyDlsZ7mgKflkI0KICAgICAgICAgICAgICAgICAgcmVsYXRpb246ICdBTkQnLAogICAgICAgICAgICAgICAgICB2YWx1ZTogX3RoaXM0Lm9yZ0xpc3QgLy8g5Lyg5YWlIG9yZ0xpc3Qg5pWw57uECiAgICAgICAgICAgICAgICB9XSwKICAgICAgICAgICAgICAgIHNvcnRlcjogW3sKICAgICAgICAgICAgICAgICAgZGlyZWN0aW9uOiAnREVTQycsCiAgICAgICAgICAgICAgICAgIHByb3BlcnR5OiAnJwogICAgICAgICAgICAgICAgfV0KICAgICAgICAgICAgICB9OyAvLyDmiZPljbDor7fmsYLkvZPvvIzmo4Dmn6XmmK/lkKbmraPnoa4KICAgICAgICAgICAgICBfY29udGV4dDMubmV4dCA9IDg7CiAgICAgICAgICAgICAgcmV0dXJuIHRhYmxlRGF0YWJMaXN0KHJlcXVlc3RCb2R5KTsKICAgICAgICAgICAgY2FzZSA4OgogICAgICAgICAgICAgIHJlc3BvbnNlID0gX2NvbnRleHQzLnNlbnQ7CiAgICAgICAgICAgICAgaWYgKHJlc3BvbnNlICYmIHJlc3BvbnNlLnJvd3MpIHsKICAgICAgICAgICAgICAgIF90aGlzNC50YXNrTGlzdG90aGVyYmJiID0gcmVzcG9uc2Uucm93czsgLy8g5bCG5o6l5Y+j6L+U5Zue55qE5pWw5o2u6LWL5YC857uZIHRhc2tMaXN0b3RoZXIKICAgICAgICAgICAgICAgIF90aGlzNC5wYWdpbmF0aW9uQmJiLnRvdGFsID0gcmVzcG9uc2UudG90YWwgfHwgMDsgLy8g5pu05paw5oC75p2h5pWwCiAgICAgICAgICAgICAgfQogICAgICAgICAgICAgIF9jb250ZXh0My5uZXh0ID0gMTU7CiAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgIGNhc2UgMTI6CiAgICAgICAgICAgICAgX2NvbnRleHQzLnByZXYgPSAxMjsKICAgICAgICAgICAgICBfY29udGV4dDMudDAgPSBfY29udGV4dDNbImNhdGNoIl0oMSk7CiAgICAgICAgICAgICAgY29uc29sZS5lcnJvcign6K+35rGC5pWw5o2u5aSx6LSlOicsIF9jb250ZXh0My50MCk7CiAgICAgICAgICAgIGNhc2UgMTU6CiAgICAgICAgICAgICAgX2NvbnRleHQzLnByZXYgPSAxNTsKICAgICAgICAgICAgICBfdGhpczQudGFibGVMb2FkaW5nID0gZmFsc2U7CiAgICAgICAgICAgICAgcmV0dXJuIF9jb250ZXh0My5maW5pc2goMTUpOwogICAgICAgICAgICBjYXNlIDE4OgogICAgICAgICAgICBjYXNlICJlbmQiOgogICAgICAgICAgICAgIHJldHVybiBfY29udGV4dDMuc3RvcCgpOwogICAgICAgICAgfQogICAgICAgIH0sIF9jYWxsZWUzLCBudWxsLCBbWzEsIDEyLCAxNSwgMThdXSk7CiAgICAgIH0pKSgpOwogICAgfSwKICAgIC8v5b2T5YmN5Lu75YqhCiAgICB0YXNrTGlzdG90aGVyRGF0YTogZnVuY3Rpb24gdGFza0xpc3RvdGhlckRhdGEoKSB7CiAgICAgIHZhciBfdGhpczUgPSB0aGlzOwogICAgICByZXR1cm4gX2FzeW5jVG9HZW5lcmF0b3IoLyojX19QVVJFX18qL19yZWdlbmVyYXRvclJ1bnRpbWUoKS5tYXJrKGZ1bmN0aW9uIF9jYWxsZWU0KCkgewogICAgICAgIHZhciByZXNwb25zZTsKICAgICAgICByZXR1cm4gX3JlZ2VuZXJhdG9yUnVudGltZSgpLndyYXAoZnVuY3Rpb24gX2NhbGxlZTQkKF9jb250ZXh0NCkgewogICAgICAgICAgd2hpbGUgKDEpIHN3aXRjaCAoX2NvbnRleHQ0LnByZXYgPSBfY29udGV4dDQubmV4dCkgewogICAgICAgICAgICBjYXNlIDA6CiAgICAgICAgICAgICAgX3RoaXM1LnRhYmxlTG9hZGluZyA9IHRydWU7CiAgICAgICAgICAgICAgX2NvbnRleHQ0LnByZXYgPSAxOwogICAgICAgICAgICAgIGlmICghKCFfdGhpczUub3JnTGlzdCB8fCBfdGhpczUub3JnTGlzdC5sZW5ndGggPT09IDApKSB7CiAgICAgICAgICAgICAgICBfY29udGV4dDQubmV4dCA9IDU7CiAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgX2NvbnRleHQ0Lm5leHQgPSA1OwogICAgICAgICAgICAgIHJldHVybiBfdGhpczUuZ2V0T3JnVHJlZURhdGEoKTsKICAgICAgICAgICAgY2FzZSA1OgogICAgICAgICAgICAgIF9jb250ZXh0NC5uZXh0ID0gNzsKICAgICAgICAgICAgICByZXR1cm4gdGFibGVEYXRhYShfdGhpczUub3JnTGlzdCk7CiAgICAgICAgICAgIGNhc2UgNzoKICAgICAgICAgICAgICByZXNwb25zZSA9IF9jb250ZXh0NC5zZW50OwogICAgICAgICAgICAgIGlmIChyZXNwb25zZSAmJiByZXNwb25zZS52YWx1ZSkgewogICAgICAgICAgICAgICAgX3RoaXM1LnRhc2tMaXN0b3RoZXIgPSByZXNwb25zZS52YWx1ZTsgLy8g5bCG5o6l5Y+j6L+U5Zue55qE5pWw5o2u6LWL5YC857uZIHRhc2tMaXN0b3RoZXIKICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgX2NvbnRleHQ0Lm5leHQgPSAxNDsKICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgY2FzZSAxMToKICAgICAgICAgICAgICBfY29udGV4dDQucHJldiA9IDExOwogICAgICAgICAgICAgIF9jb250ZXh0NC50MCA9IF9jb250ZXh0NFsiY2F0Y2giXSgxKTsKICAgICAgICAgICAgICBjb25zb2xlLmVycm9yKCfor7fmsYLmlbDmja7lpLHotKU6JywgX2NvbnRleHQ0LnQwKTsKICAgICAgICAgICAgY2FzZSAxNDoKICAgICAgICAgICAgICBfY29udGV4dDQucHJldiA9IDE0OwogICAgICAgICAgICAgIF90aGlzNS50YWJsZUxvYWRpbmcgPSBmYWxzZTsKICAgICAgICAgICAgICByZXR1cm4gX2NvbnRleHQ0LmZpbmlzaCgxNCk7CiAgICAgICAgICAgIGNhc2UgMTc6CiAgICAgICAgICAgIGNhc2UgImVuZCI6CiAgICAgICAgICAgICAgcmV0dXJuIF9jb250ZXh0NC5zdG9wKCk7CiAgICAgICAgICB9CiAgICAgICAgfSwgX2NhbGxlZTQsIG51bGwsIFtbMSwgMTEsIDE0LCAxN11dKTsKICAgICAgfSkpKCk7CiAgICB9LAogICAgLy/ku7vliqHngrnlh7st6K+35rGC5YiX6KGoCiAgICB0YXNrQ2hhbmdlOiBmdW5jdGlvbiB0YXNrQ2hhbmdlKGluZGV4KSB7CiAgICAgIHRoaXMucGFnaW5hdGlvbkFhYS5wYWdlID0gMTsKICAgICAgaWYgKGluZGV4ID09PSAwKSB7CiAgICAgICAgdGhpcy5jdXJyZW50VHlwZSA9IDE7IC8vIOW3oeafpeS7u+WKoQogICAgICB9IGVsc2UgaWYgKGluZGV4ID09PSAxKSB7CiAgICAgICAgdGhpcy5jdXJyZW50VHlwZSA9IDI7IC8vIOS6i+S7tuWkhOe9ruS7u+WKoQogICAgICB9IGVsc2UgaWYgKGluZGV4ID09PSAyKSB7CiAgICAgICAgdGhpcy5jdXJyZW50VHlwZSA9IDM7IC8vIOaVkeaPtOS7u+WKoQogICAgICB9CiAgICAgIHRoaXMuTGlzdGFhYSgpOyAvLyDosIPnlKjmjqXlj6PliLfmlrDmlbDmja4KICAgIH0sCiAgICAvLyDmoLnmja4gY3VycmVudFR5cGUg6L+U5Zue5a+55bqU55qE5pe26Ze05a2X5q61CiAgICBnZXRUYXNrVGltZTogZnVuY3Rpb24gZ2V0VGFza1RpbWUodGFzaykgewogICAgICBpZiAodGhpcy5jdXJyZW50VHlwZSA9PT0gMSkgewogICAgICAgIHJldHVybiB0YXNrLmNyZWF0ZVRpbWU7IC8vIOW3oeafpeS7u+WKoQogICAgICB9IGVsc2UgaWYgKHRoaXMuY3VycmVudFR5cGUgPT09IDIpIHsKICAgICAgICByZXR1cm4gdGFzay5ldmVudFRpbWU7IC8vIOS6i+S7tuWkhOe9ruS7u+WKoQogICAgICB9IGVsc2UgaWYgKHRoaXMuY3VycmVudFR5cGUgPT09IDMpIHsKICAgICAgICByZXR1cm4gdGFzay5yZXNjdWVUaW1lOyAvLyDmlZHmj7Tku7vliqEKICAgICAgfQogICAgICByZXR1cm4gJyc7IC8vIOm7mOiupOi/lOWbnuepuuWtl+espuS4sgogICAgfSwKICAgIC8v5Lu75Yqh5YiX6KGoCiAgICBMaXN0YWFhOiBmdW5jdGlvbiBMaXN0YWFhKCkgewogICAgICB2YXIgX3RoaXM2ID0gdGhpczsKICAgICAgcmV0dXJuIF9hc3luY1RvR2VuZXJhdG9yKC8qI19fUFVSRV9fKi9fcmVnZW5lcmF0b3JSdW50aW1lKCkubWFyayhmdW5jdGlvbiBfY2FsbGVlNSgpIHsKICAgICAgICB2YXIgcmVxdWVzdEJvZHksIHJlc3BvbnNlOwogICAgICAgIHJldHVybiBfcmVnZW5lcmF0b3JSdW50aW1lKCkud3JhcChmdW5jdGlvbiBfY2FsbGVlNSQoX2NvbnRleHQ1KSB7CiAgICAgICAgICB3aGlsZSAoMSkgc3dpdGNoIChfY29udGV4dDUucHJldiA9IF9jb250ZXh0NS5uZXh0KSB7CiAgICAgICAgICAgIGNhc2UgMDoKICAgICAgICAgICAgICBfdGhpczYudGFibGVMb2FkaW5nID0gdHJ1ZTsKICAgICAgICAgICAgICBfY29udGV4dDUucHJldiA9IDE7CiAgICAgICAgICAgICAgaWYgKCEoIV90aGlzNi5vcmdMaXN0IHx8IF90aGlzNi5vcmdMaXN0Lmxlbmd0aCA9PT0gMCkpIHsKICAgICAgICAgICAgICAgIF9jb250ZXh0NS5uZXh0ID0gNTsKICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgIH0KICAgICAgICAgICAgICBfY29udGV4dDUubmV4dCA9IDU7CiAgICAgICAgICAgICAgcmV0dXJuIF90aGlzNi5nZXRPcmdUcmVlRGF0YSgpOwogICAgICAgICAgICBjYXNlIDU6CiAgICAgICAgICAgICAgLy8g5p6E6YCg6K+35rGC5L2TCiAgICAgICAgICAgICAgcmVxdWVzdEJvZHkgPSB7CiAgICAgICAgICAgICAgICBncm91cFJlbGF0aW9uOiAnQU5EJywKICAgICAgICAgICAgICAgIGdyb3VwVHJlZToge30sCiAgICAgICAgICAgICAgICBwYWdlQmVhbjogewogICAgICAgICAgICAgICAgICBwYWdlOiBfdGhpczYucGFnaW5hdGlvbkFhYS5wYWdlLAogICAgICAgICAgICAgICAgICAvLyDlvZPliY3pobXnoIEKICAgICAgICAgICAgICAgICAgcGFnZVNpemU6IF90aGlzNi5wYWdpbmF0aW9uQWFhLnBhZ2VTaXplLAogICAgICAgICAgICAgICAgICAvLyDmr4/pobXmnaHmlbAKICAgICAgICAgICAgICAgICAgc2hvd1RvdGFsOiB0cnVlCiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgcGFyYW1zOiB7fSwKICAgICAgICAgICAgICAgIHF1ZXJ5czogW3sKICAgICAgICAgICAgICAgICAgZ3JvdXA6ICdtYWluJywKICAgICAgICAgICAgICAgICAgb3BlcmF0aW9uOiAnSU4nLAogICAgICAgICAgICAgICAgICAvLyDkvb/nlKggSU4g5pON5L2c56ymCiAgICAgICAgICAgICAgICAgIHBhcmVudEdyb3VwOiAnJywKICAgICAgICAgICAgICAgICAgcHJvcGVydHk6ICdyb2FkX2lkXycsCiAgICAgICAgICAgICAgICAgIC8vIOWxnuaAp+WQjQogICAgICAgICAgICAgICAgICByZWxhdGlvbjogJ0FORCcsCiAgICAgICAgICAgICAgICAgIHZhbHVlOiBfdGhpczYub3JnTGlzdCAvLyDkvKDlhaUgb3JnTGlzdCDmlbDnu4QKICAgICAgICAgICAgICAgIH1dLAogICAgICAgICAgICAgICAgc29ydGVyOiBbewogICAgICAgICAgICAgICAgICBkaXJlY3Rpb246ICdERVNDJywKICAgICAgICAgICAgICAgICAgcHJvcGVydHk6IF90aGlzNi5jdXJyZW50VHlwZSA9PT0gMSA/ICdjcmVhdGVUaW1lJyA6IF90aGlzNi5jdXJyZW50VHlwZSA9PT0gMiA/ICdldmVudFRpbWUnIDogJ3Jlc2N1ZVRpbWUnCiAgICAgICAgICAgICAgICB9XQogICAgICAgICAgICAgIH07CiAgICAgICAgICAgICAgX2NvbnRleHQ1Lm5leHQgPSA4OwogICAgICAgICAgICAgIHJldHVybiB0YWJsZURhdGFhTGlzdChyZXF1ZXN0Qm9keSwgX3RoaXM2LmN1cnJlbnRUeXBlKTsKICAgICAgICAgICAgY2FzZSA4OgogICAgICAgICAgICAgIHJlc3BvbnNlID0gX2NvbnRleHQ1LnNlbnQ7CiAgICAgICAgICAgICAgaWYgKHJlc3BvbnNlICYmIHJlc3BvbnNlLnJvd3MpIHsKICAgICAgICAgICAgICAgIF90aGlzNi50YXNrTGlzdG90aGVyYWFhID0gcmVzcG9uc2Uucm93czsgLy8g5bCG5o6l5Y+j6L+U5Zue55qE5pWw5o2u6LWL5YC857uZIHRhc2tMaXN0b3RoZXIKICAgICAgICAgICAgICAgIF90aGlzNi5wYWdpbmF0aW9uQWFhLnRvdGFsID0gcmVzcG9uc2UudG90YWwgfHwgMDsgLy8g5pu05paw5oC75p2h5pWwCiAgICAgICAgICAgICAgfQogICAgICAgICAgICAgIF9jb250ZXh0NS5uZXh0ID0gMTU7CiAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgIGNhc2UgMTI6CiAgICAgICAgICAgICAgX2NvbnRleHQ1LnByZXYgPSAxMjsKICAgICAgICAgICAgICBfY29udGV4dDUudDAgPSBfY29udGV4dDVbImNhdGNoIl0oMSk7CiAgICAgICAgICAgICAgY29uc29sZS5lcnJvcign6K+35rGC5pWw5o2u5aSx6LSlOicsIF9jb250ZXh0NS50MCk7CiAgICAgICAgICAgIGNhc2UgMTU6CiAgICAgICAgICAgICAgX2NvbnRleHQ1LnByZXYgPSAxNTsKICAgICAgICAgICAgICBfdGhpczYudGFibGVMb2FkaW5nID0gZmFsc2U7CiAgICAgICAgICAgICAgcmV0dXJuIF9jb250ZXh0NS5maW5pc2goMTUpOwogICAgICAgICAgICBjYXNlIDE4OgogICAgICAgICAgICBjYXNlICJlbmQiOgogICAgICAgICAgICAgIHJldHVybiBfY29udGV4dDUuc3RvcCgpOwogICAgICAgICAgfQogICAgICAgIH0sIF9jYWxsZWU1LCBudWxsLCBbWzEsIDEyLCAxNSwgMThdXSk7CiAgICAgIH0pKSgpOwogICAgfSwKICAgIC8v5byC5bi454K55Ye7CiAgICBjaGFuZ2U6IGZ1bmN0aW9uIGNoYW5nZShpbmRleCkgewogICAgICB0aGlzLnBhZ2luYXRpb25DY2MucGFnZSA9IDE7CiAgICAgIHZhciBoYW5kbGVUeXBlID0gbnVsbDsKICAgICAgaWYgKGluZGV4ID09PSAxKSB7CiAgICAgICAgaGFuZGxlVHlwZSA9IDE7IC8vIOeOsOWcuuWkhOeQhgogICAgICAgIHRoaXMuaGFuZGxlVHlwZSA9IDE7CiAgICAgIH0gZWxzZSBpZiAoaW5kZXggPT09IDIpIHsKICAgICAgICBoYW5kbGVUeXBlID0gMjsgLy8g5LiK5oql5Lit5b+DCiAgICAgICAgdGhpcy5oYW5kbGVUeXBlID0gMjsKICAgICAgfSBlbHNlIHsKICAgICAgICB0aGlzLmhhbmRsZVR5cGUgPSAwOwogICAgICB9CiAgICAgIHRoaXMuTGlzdGNjYyhoYW5kbGVUeXBlKTsgLy8g6LCD55SoIExpc3RjY2Mg5pa55rOV5bm25Lyg6YCSIGhhbmRsZVR5cGUKICAgIH0sCiAgICAvL+W8guW4uOWIl+ihqAogICAgTGlzdGNjYzogZnVuY3Rpb24gTGlzdGNjYyhoYW5kbGVUeXBlKSB7CiAgICAgIHZhciBfdGhpczcgPSB0aGlzOwogICAgICByZXR1cm4gX2FzeW5jVG9HZW5lcmF0b3IoLyojX19QVVJFX18qL19yZWdlbmVyYXRvclJ1bnRpbWUoKS5tYXJrKGZ1bmN0aW9uIF9jYWxsZWU2KCkgewogICAgICAgIHZhciBub3csIHllYXIsIG1vbnRoLCBkYXksIGZvcm1hdHRlZERhdGUsIHJlcXVlc3RCb2R5LCByZXNwb25zZTsKICAgICAgICByZXR1cm4gX3JlZ2VuZXJhdG9yUnVudGltZSgpLndyYXAoZnVuY3Rpb24gX2NhbGxlZTYkKF9jb250ZXh0NikgewogICAgICAgICAgd2hpbGUgKDEpIHN3aXRjaCAoX2NvbnRleHQ2LnByZXYgPSBfY29udGV4dDYubmV4dCkgewogICAgICAgICAgICBjYXNlIDA6CiAgICAgICAgICAgICAgX3RoaXM3LnRhYmxlTG9hZGluZyA9IHRydWU7CiAgICAgICAgICAgICAgX2NvbnRleHQ2LnByZXYgPSAxOwogICAgICAgICAgICAgIGlmICghKCFfdGhpczcub3JnTGlzdCB8fCBfdGhpczcub3JnTGlzdC5sZW5ndGggPT09IDApKSB7CiAgICAgICAgICAgICAgICBfY29udGV4dDYubmV4dCA9IDU7CiAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgX2NvbnRleHQ2Lm5leHQgPSA1OwogICAgICAgICAgICAgIHJldHVybiBfdGhpczcuZ2V0T3JnVHJlZURhdGEoKTsKICAgICAgICAgICAgY2FzZSA1OgogICAgICAgICAgICAgIC8vIOiOt+WPluW9k+WJjeaXtumXtOW5tuagvOW8j+WMluS4uiBZWVlZLU1NLURECiAgICAgICAgICAgICAgbm93ID0gbmV3IERhdGUoKTsKICAgICAgICAgICAgICB5ZWFyID0gbm93LmdldEZ1bGxZZWFyKCk7CiAgICAgICAgICAgICAgbW9udGggPSBTdHJpbmcobm93LmdldE1vbnRoKCkgKyAxKS5wYWRTdGFydCgyLCAnMCcpOyAvLyDmnIjku73ku44gMCDlvIDlp4vvvIzpnIDopoEgKzEKICAgICAgICAgICAgICBkYXkgPSBTdHJpbmcobm93LmdldERhdGUoKSkucGFkU3RhcnQoMiwgJzAnKTsKICAgICAgICAgICAgICBmb3JtYXR0ZWREYXRlID0gIiIuY29uY2F0KHllYXIsICItIikuY29uY2F0KG1vbnRoLCAiLSIpLmNvbmNhdChkYXkpOyAvLyDmoLzlvI/ljJbkuLogWVlZWS1NTS1ERAogICAgICAgICAgICAgIC8vIOaehOmAoOivt+axguS9kwogICAgICAgICAgICAgIHJlcXVlc3RCb2R5ID0gewogICAgICAgICAgICAgICAgZ3JvdXBSZWxhdGlvbjogJ0FORCcsCiAgICAgICAgICAgICAgICBncm91cFRyZWU6IHt9LAogICAgICAgICAgICAgICAgcGFnZUJlYW46IHsKICAgICAgICAgICAgICAgICAgcGFnZTogX3RoaXM3LnBhZ2luYXRpb25DY2MucGFnZSwKICAgICAgICAgICAgICAgICAgLy8g5b2T5YmN6aG156CBCiAgICAgICAgICAgICAgICAgIHBhZ2VTaXplOiBfdGhpczcucGFnaW5hdGlvbkNjYy5wYWdlU2l6ZSwKICAgICAgICAgICAgICAgICAgLy8g5q+P6aG15p2h5pWwCiAgICAgICAgICAgICAgICAgIHNob3dUb3RhbDogdHJ1ZQogICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgIHBhcmFtczoge30sCiAgICAgICAgICAgICAgICBxdWVyeXM6IFt7CiAgICAgICAgICAgICAgICAgICdncm91cCc6ICdtYWluJywKICAgICAgICAgICAgICAgICAgJ29wZXJhdGlvbic6ICdFUVVBTCcsCiAgICAgICAgICAgICAgICAgICdwYXJlbnRHcm91cCc6ICcnLAogICAgICAgICAgICAgICAgICAncHJvcGVydHknOiAnVEFTS19EQVRFXycsCiAgICAgICAgICAgICAgICAgICdyZWxhdGlvbic6ICdBTkQnLAogICAgICAgICAgICAgICAgICAndmFsdWUnOiBmb3JtYXR0ZWREYXRlCiAgICAgICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAgIGdyb3VwOiAnbWFpbicsCiAgICAgICAgICAgICAgICAgIG9wZXJhdGlvbjogJ0lOJywKICAgICAgICAgICAgICAgICAgLy8g5L2/55SoIElOIOaTjeS9nOespgogICAgICAgICAgICAgICAgICBwYXJlbnRHcm91cDogJycsCiAgICAgICAgICAgICAgICAgIHByb3BlcnR5OiAncm9hZF9pZF8nLAogICAgICAgICAgICAgICAgICAvLyDlsZ7mgKflkI0KICAgICAgICAgICAgICAgICAgcmVsYXRpb246ICdBTkQnLAogICAgICAgICAgICAgICAgICB2YWx1ZTogX3RoaXM3Lm9yZ0xpc3QgLy8g5Lyg5YWlIG9yZ0xpc3Qg5pWw57uECiAgICAgICAgICAgICAgICB9XSwKICAgICAgICAgICAgICAgIHNvcnRlcjogW3sKICAgICAgICAgICAgICAgICAgZGlyZWN0aW9uOiAnREVTQycsCiAgICAgICAgICAgICAgICAgIHByb3BlcnR5OiAnaW5zcGVjdFRpbWUnCiAgICAgICAgICAgICAgICB9XQogICAgICAgICAgICAgIH07IC8vIOWmguaenCBoYW5kbGVUeXBlIOS4jeS4uuepuu+8jOa3u+WKoOWIsCBxdWVyeXMg5LitCiAgICAgICAgICAgICAgaWYgKGhhbmRsZVR5cGUgIT09IG51bGwpIHsKICAgICAgICAgICAgICAgIHJlcXVlc3RCb2R5LnF1ZXJ5cy5wdXNoKHsKICAgICAgICAgICAgICAgICAgZ3JvdXA6ICdtYWluJywKICAgICAgICAgICAgICAgICAgb3BlcmF0aW9uOiAnRVFVQUwnLAogICAgICAgICAgICAgICAgICBwYXJlbnRHcm91cDogJycsCiAgICAgICAgICAgICAgICAgIHByb3BlcnR5OiAnaGFuZGxlVHlwZScsCiAgICAgICAgICAgICAgICAgIHJlbGF0aW9uOiAnQU5EJywKICAgICAgICAgICAgICAgICAgdmFsdWU6IGhhbmRsZVR5cGUKICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAgICAgIH0KICAgICAgICAgICAgICBfY29udGV4dDYubmV4dCA9IDE0OwogICAgICAgICAgICAgIHJldHVybiB0YWJsZURhdGFjTGlzdChyZXF1ZXN0Qm9keSk7CiAgICAgICAgICAgIGNhc2UgMTQ6CiAgICAgICAgICAgICAgcmVzcG9uc2UgPSBfY29udGV4dDYuc2VudDsKICAgICAgICAgICAgICBpZiAocmVzcG9uc2UgJiYgcmVzcG9uc2Uucm93cykgewogICAgICAgICAgICAgICAgX3RoaXM3LnRhc2tMaXN0b3RoZXJjY2MgPSByZXNwb25zZS5yb3dzOyAvLyDlsIbmjqXlj6Pov5Tlm57nmoTmlbDmja7otYvlgLznu5kgdGFza0xpc3RvdGhlcgogICAgICAgICAgICAgICAgX3RoaXM3LnBhZ2luYXRpb25DY2MudG90YWwgPSByZXNwb25zZS50b3RhbCB8fCAwOyAvLyDmm7TmlrDmgLvmnaHmlbAKICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgX2NvbnRleHQ2Lm5leHQgPSAyMTsKICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgY2FzZSAxODoKICAgICAgICAgICAgICBfY29udGV4dDYucHJldiA9IDE4OwogICAgICAgICAgICAgIF9jb250ZXh0Ni50MCA9IF9jb250ZXh0NlsiY2F0Y2giXSgxKTsKICAgICAgICAgICAgICBjb25zb2xlLmVycm9yKCfor7fmsYLmlbDmja7lpLHotKU6JywgX2NvbnRleHQ2LnQwKTsKICAgICAgICAgICAgY2FzZSAyMToKICAgICAgICAgICAgICBfY29udGV4dDYucHJldiA9IDIxOwogICAgICAgICAgICAgIF90aGlzNy50YWJsZUxvYWRpbmcgPSBmYWxzZTsKICAgICAgICAgICAgICByZXR1cm4gX2NvbnRleHQ2LmZpbmlzaCgyMSk7CiAgICAgICAgICAgIGNhc2UgMjQ6CiAgICAgICAgICAgIGNhc2UgImVuZCI6CiAgICAgICAgICAgICAgcmV0dXJuIF9jb250ZXh0Ni5zdG9wKCk7CiAgICAgICAgICB9CiAgICAgICAgfSwgX2NhbGxlZTYsIG51bGwsIFtbMSwgMTgsIDIxLCAyNF1dKTsKICAgICAgfSkpKCk7CiAgICB9LAogICAgLy/liLfmlrDlvILluLjkv6Hmga8KICAgIHJlZnJlc2hBYm5vcm1hbExpc3Q6IGZ1bmN0aW9uIHJlZnJlc2hBYm5vcm1hbExpc3QoKSB7CiAgICAgIHRoaXMuJGJ1cy4kZW1pdCgncmVmcmVzaEFibm9ybWFsTGlzdEV2ZW50Jyk7CiAgICB9LAogICAgLy8g6I635Y+W5YWs5Y+45qCRLeWwhmlk6ZuG5ZCI6LW35p2l5Lyg57uZ5ZCO56uvCiAgICBnZXRPcmdUcmVlRGF0YTogZnVuY3Rpb24gZ2V0T3JnVHJlZURhdGEoY2FsbGJhY2spIHsKICAgICAgdmFyIF90aGlzOCA9IHRoaXM7CiAgICAgIHJldHVybiBfYXN5bmNUb0dlbmVyYXRvcigvKiNfX1BVUkVfXyovX3JlZ2VuZXJhdG9yUnVudGltZSgpLm1hcmsoZnVuY3Rpb24gX2NhbGxlZTcoKSB7CiAgICAgICAgdmFyIHZhbHVlZGF0YSwgYWxsSWRzOwogICAgICAgIHJldHVybiBfcmVnZW5lcmF0b3JSdW50aW1lKCkud3JhcChmdW5jdGlvbiBfY2FsbGVlNyQoX2NvbnRleHQ3KSB7CiAgICAgICAgICB3aGlsZSAoMSkgc3dpdGNoIChfY29udGV4dDcucHJldiA9IF9jb250ZXh0Ny5uZXh0KSB7CiAgICAgICAgICAgIGNhc2UgMDoKICAgICAgICAgICAgICBfY29udGV4dDcucHJldiA9IDA7CiAgICAgICAgICAgICAgX3RoaXM4LnRyZWVMb2FkaW5nID0gdHJ1ZTsKICAgICAgICAgICAgICBfY29udGV4dDcubmV4dCA9IDQ7CiAgICAgICAgICAgICAgcmV0dXJuIGdldFRyZWUoKTsKICAgICAgICAgICAgY2FzZSA0OgogICAgICAgICAgICAgIHZhbHVlZGF0YSA9IF9jb250ZXh0Ny5zZW50OwogICAgICAgICAgICAgIC8vIOaPkOWPluaJgOaciSByb2FkTGlzdCDkuK3nmoQgaWQKICAgICAgICAgICAgICBhbGxJZHMgPSBbXTsKICAgICAgICAgICAgICB2YWx1ZWRhdGEudmFsdWUuZm9yRWFjaChmdW5jdGlvbiAoaXRlbSkgewogICAgICAgICAgICAgICAgaWYgKGl0ZW0ucm9hZExpc3QgJiYgaXRlbS5yb2FkTGlzdC5sZW5ndGggPiAwKSB7CiAgICAgICAgICAgICAgICAgIGl0ZW0ucm9hZExpc3QuZm9yRWFjaChmdW5jdGlvbiAocm9hZCkgewogICAgICAgICAgICAgICAgICAgIGlmIChyb2FkLmlkKSB7CiAgICAgICAgICAgICAgICAgICAgICBhbGxJZHMucHVzaChyb2FkLmlkKTsgLy8g5bCGIGlkIOa3u+WKoOWIsOaVsOe7hOS4rQogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgICAgX3RoaXM4Lm9yZ0xpc3QgPSBhbGxJZHM7CiAgICAgICAgICAgIGNhc2UgODoKICAgICAgICAgICAgICBfY29udGV4dDcucHJldiA9IDg7CiAgICAgICAgICAgICAgX3RoaXM4LnRyZWVMb2FkaW5nID0gZmFsc2U7CiAgICAgICAgICAgICAgY2FsbGJhY2sgJiYgY2FsbGJhY2soX3RoaXM4LnRyZWVEYXRhKTsKICAgICAgICAgICAgICAvLyB0aGlzLnRhYmxlTG9hZGluZyA9IGZhbHNlCiAgICAgICAgICAgICAgcmV0dXJuIF9jb250ZXh0Ny5maW5pc2goOCk7CiAgICAgICAgICAgIGNhc2UgMTI6CiAgICAgICAgICAgIGNhc2UgImVuZCI6CiAgICAgICAgICAgICAgcmV0dXJuIF9jb250ZXh0Ny5zdG9wKCk7CiAgICAgICAgICB9CiAgICAgICAgfSwgX2NhbGxlZTcsIG51bGwsIFtbMCwsIDgsIDEyXV0pOwogICAgICB9KSkoKTsKICAgIH0sCiAgICAvLyDku7vliqHliJfooajliIbpobXkuovku7YKICAgIGhhbmRsZVNpemVDaGFuZ2VBYWE6IGZ1bmN0aW9uIGhhbmRsZVNpemVDaGFuZ2VBYWEocGFnZVNpemUpIHsKICAgICAgdGhpcy5wYWdpbmF0aW9uQWFhLnBhZ2VTaXplID0gcGFnZVNpemU7CiAgICAgIHRoaXMucGFnaW5hdGlvbkFhYS5wYWdlID0gMTsgLy8g6YeN572u5Li656ys5LiA6aG1CiAgICAgIHRoaXMuTGlzdGFhYSgpOyAvLyDph43mlrDor7fmsYLmlbDmja4KICAgIH0sCiAgICBoYW5kbGVDdXJyZW50Q2hhbmdlQWFhOiBmdW5jdGlvbiBoYW5kbGVDdXJyZW50Q2hhbmdlQWFhKHBhZ2UpIHsKICAgICAgdGhpcy5wYWdpbmF0aW9uQWFhLnBhZ2UgPSBwYWdlOwogICAgICB0aGlzLkxpc3RhYWEoKTsgLy8g6YeN5paw6K+35rGC5pWw5o2uCiAgICB9LAogICAgLy8g5LqL5Lu25p+l6K+i5YiX6KGo5YiG6aG15LqL5Lu2CiAgICBoYW5kbGVTaXplQ2hhbmdlQmJiOiBmdW5jdGlvbiBoYW5kbGVTaXplQ2hhbmdlQmJiKHBhZ2VTaXplKSB7CiAgICAgIHRoaXMucGFnaW5hdGlvbkJiYi5wYWdlU2l6ZSA9IHBhZ2VTaXplOwogICAgICB0aGlzLnBhZ2luYXRpb25CYmIucGFnZSA9IDE7IC8vIOmHjee9ruS4uuesrOS4gOmhtQogICAgICB0aGlzLkxpc3RiYmIodGhpcy5jdXJyZW50U3RhcnRUaW1lLCB0aGlzLmN1cnJlbnRFbmRUaW1lKTsgLy8g6YeN5paw6K+35rGC5pWw5o2uCiAgICB9LAogICAgaGFuZGxlQ3VycmVudENoYW5nZUJiYjogZnVuY3Rpb24gaGFuZGxlQ3VycmVudENoYW5nZUJiYihwYWdlKSB7CiAgICAgIHRoaXMucGFnaW5hdGlvbkJiYi5wYWdlID0gcGFnZTsKICAgICAgdGhpcy5MaXN0YmJiKHRoaXMuY3VycmVudFN0YXJ0VGltZSwgdGhpcy5jdXJyZW50RW5kVGltZSk7IC8vIOmHjeaWsOivt+axguaVsOaNrgogICAgfSwKICAgIC8vIOW8guW4uOWIl+ihqOWIhumhteS6i+S7tgogICAgaGFuZGxlU2l6ZUNoYW5nZUNjYzogZnVuY3Rpb24gaGFuZGxlU2l6ZUNoYW5nZUNjYyhwYWdlU2l6ZSkgewogICAgICB0aGlzLnBhZ2luYXRpb25DY2MucGFnZVNpemUgPSBwYWdlU2l6ZTsKICAgICAgdGhpcy5wYWdpbmF0aW9uQ2NjLnBhZ2UgPSAxOyAvLyDph43nva7kuLrnrKzkuIDpobUKICAgICAgdGhpcy5MaXN0Y2NjKCk7IC8vIOmHjeaWsOivt+axguaVsOaNrgogICAgfSwKICAgIGhhbmRsZUN1cnJlbnRDaGFuZ2VDY2M6IGZ1bmN0aW9uIGhhbmRsZUN1cnJlbnRDaGFuZ2VDY2MocGFnZSkgewogICAgICB0aGlzLnBhZ2luYXRpb25DY2MucGFnZSA9IHBhZ2U7CiAgICAgIHRoaXMuTGlzdGNjYygpOyAvLyDph43mlrDor7fmsYLmlbDmja4KICAgIH0KICB9Cn07"},null]}