forked from liweijie/education
1 line
24 KiB
JSON
1 line
24 KiB
JSON
{"remainingRequest":"C:\\Users\\Admin\\Desktop\\education\\frontend\\node_modules\\thread-loader\\dist\\cjs.js!C:\\Users\\Admin\\Desktop\\education\\frontend\\node_modules\\babel-loader\\lib\\index.js!C:\\Users\\Admin\\Desktop\\education\\frontend\\node_modules\\quill\\core\\selection.js","dependencies":[{"path":"C:\\Users\\Admin\\Desktop\\education\\frontend\\node_modules\\quill\\core\\selection.js","mtime":1787309795760},{"path":"C:\\Users\\Admin\\Desktop\\education\\frontend\\babel.config.js","mtime":1787567871334},{"path":"C:\\Users\\Admin\\Desktop\\education\\frontend\\node_modules\\cache-loader\\dist\\cjs.js","mtime":1787309791955},{"path":"C:\\Users\\Admin\\Desktop\\education\\frontend\\node_modules\\thread-loader\\dist\\cjs.js","mtime":1787309791954},{"path":"C:\\Users\\Admin\\Desktop\\education\\frontend\\node_modules\\babel-loader\\lib\\index.js","mtime":1787309793142}],"contextDependencies":[],"result":[{"type":"Buffer","data":"base64:aW1wb3J0IF90b0NvbnN1bWFibGVBcnJheSBmcm9tICJDOi9Vc2Vycy9BZG1pbi9EZXNrdG9wL2VkdWNhdGlvbi9mcm9udGVuZC9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vdG9Db25zdW1hYmxlQXJyYXkuanMiOwppbXBvcnQgX3NsaWNlZFRvQXJyYXkgZnJvbSAiQzovVXNlcnMvQWRtaW4vRGVza3RvcC9lZHVjYXRpb24vZnJvbnRlbmQvbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL3NsaWNlZFRvQXJyYXkuanMiOwppbXBvcnQgX2NyZWF0ZUNsYXNzIGZyb20gIkM6L1VzZXJzL0FkbWluL0Rlc2t0b3AvZWR1Y2F0aW9uL2Zyb250ZW5kL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9jcmVhdGVDbGFzcy5qcyI7CmltcG9ydCBfY2xhc3NDYWxsQ2hlY2sgZnJvbSAiQzovVXNlcnMvQWRtaW4vRGVza3RvcC9lZHVjYXRpb24vZnJvbnRlbmQvbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL2NsYXNzQ2FsbENoZWNrLmpzIjsKaW1wb3J0ICJjb3JlLWpzL21vZHVsZXMvZXMuYXJyYXkuY29uY2F0LmpzIjsKaW1wb3J0ICJjb3JlLWpzL21vZHVsZXMvZXMuYXJyYXkuZmluZC5qcyI7CmltcG9ydCAiY29yZS1qcy9tb2R1bGVzL2VzLmFycmF5LmZyb20uanMiOwppbXBvcnQgImNvcmUtanMvbW9kdWxlcy9lcy5hcnJheS5tYXAuanMiOwppbXBvcnQgImNvcmUtanMvbW9kdWxlcy9lcy5hcnJheS5wdXNoLmpzIjsKaW1wb3J0ICJjb3JlLWpzL21vZHVsZXMvZXMub2JqZWN0LnRvLXN0cmluZy5qcyI7CmltcG9ydCAiY29yZS1qcy9tb2R1bGVzL2VzLnJlZ2V4cC5leGVjLmpzIjsKaW1wb3J0ICJjb3JlLWpzL21vZHVsZXMvZXMuc3RyaW5nLml0ZXJhdG9yLmpzIjsKaW1wb3J0ICJjb3JlLWpzL21vZHVsZXMvZXMuc3RyaW5nLnNwbGl0LmpzIjsKaW1wb3J0ICJjb3JlLWpzL21vZHVsZXMvZXNuZXh0Lml0ZXJhdG9yLmNvbnN0cnVjdG9yLmpzIjsKaW1wb3J0ICJjb3JlLWpzL21vZHVsZXMvZXNuZXh0Lml0ZXJhdG9yLmZpbmQuanMiOwppbXBvcnQgImNvcmUtanMvbW9kdWxlcy9lc25leHQuaXRlcmF0b3Iuc29tZS5qcyI7CmltcG9ydCB7IExlYWZCbG90LCBTY29wZSB9IGZyb20gJ3BhcmNobWVudCc7CmltcG9ydCB7IGNsb25lRGVlcCwgaXNFcXVhbCB9IGZyb20gJ2xvZGFzaC1lcyc7CmltcG9ydCBFbWl0dGVyIGZyb20gJy4vZW1pdHRlci5qcyc7CmltcG9ydCBsb2dnZXIgZnJvbSAnLi9sb2dnZXIuanMnOwp2YXIgZGVidWcgPSBsb2dnZXIoJ3F1aWxsOnNlbGVjdGlvbicpOwpleHBvcnQgdmFyIFJhbmdlID0gLyojX19QVVJFX18qL19jcmVhdGVDbGFzcyhmdW5jdGlvbiBSYW5nZShpbmRleCkgewogIF9jbGFzc0NhbGxDaGVjayh0aGlzLCBSYW5nZSk7CiAgdmFyIGxlbmd0aCA9IGFyZ3VtZW50cy5sZW5ndGggPiAxICYmIGFyZ3VtZW50c1sxXSAhPT0gdW5kZWZpbmVkID8gYXJndW1lbnRzWzFdIDogMDsKICB0aGlzLmluZGV4ID0gaW5kZXg7CiAgdGhpcy5sZW5ndGggPSBsZW5ndGg7Cn0pOwp2YXIgU2VsZWN0aW9uID0gLyojX19QVVJFX18qL2Z1bmN0aW9uICgpIHsKICBmdW5jdGlvbiBTZWxlY3Rpb24oc2Nyb2xsLCBlbWl0dGVyKSB7CiAgICB2YXIgX3RoaXMgPSB0aGlzOwogICAgX2NsYXNzQ2FsbENoZWNrKHRoaXMsIFNlbGVjdGlvbik7CiAgICB0aGlzLmVtaXR0ZXIgPSBlbWl0dGVyOwogICAgdGhpcy5zY3JvbGwgPSBzY3JvbGw7CiAgICB0aGlzLmNvbXBvc2luZyA9IGZhbHNlOwogICAgdGhpcy5tb3VzZURvd24gPSBmYWxzZTsKICAgIHRoaXMucm9vdCA9IHRoaXMuc2Nyb2xsLmRvbU5vZGU7CiAgICAvLyBAdHMtZXhwZWN0LWVycm9yCiAgICB0aGlzLmN1cnNvciA9IHRoaXMuc2Nyb2xsLmNyZWF0ZSgnY3Vyc29yJywgdGhpcyk7CiAgICAvLyBzYXZlZFJhbmdlIGlzIGxhc3Qgbm9uLW51bGwgcmFuZ2UKICAgIHRoaXMuc2F2ZWRSYW5nZSA9IG5ldyBSYW5nZSgwLCAwKTsKICAgIHRoaXMubGFzdFJhbmdlID0gdGhpcy5zYXZlZFJhbmdlOwogICAgdGhpcy5sYXN0TmF0aXZlID0gbnVsbDsKICAgIHRoaXMuaGFuZGxlQ29tcG9zaXRpb24oKTsKICAgIHRoaXMuaGFuZGxlRHJhZ2dpbmcoKTsKICAgIHRoaXMuZW1pdHRlci5saXN0ZW5ET00oJ3NlbGVjdGlvbmNoYW5nZScsIGRvY3VtZW50LCBmdW5jdGlvbiAoKSB7CiAgICAgIGlmICghX3RoaXMubW91c2VEb3duICYmICFfdGhpcy5jb21wb3NpbmcpIHsKICAgICAgICBzZXRUaW1lb3V0KF90aGlzLnVwZGF0ZS5iaW5kKF90aGlzLCBFbWl0dGVyLnNvdXJjZXMuVVNFUiksIDEpOwogICAgICB9CiAgICB9KTsKICAgIHRoaXMuZW1pdHRlci5vbihFbWl0dGVyLmV2ZW50cy5TQ1JPTExfQkVGT1JFX1VQREFURSwgZnVuY3Rpb24gKCkgewogICAgICBpZiAoIV90aGlzLmhhc0ZvY3VzKCkpIHJldHVybjsKICAgICAgdmFyIG5hdGl2ZSA9IF90aGlzLmdldE5hdGl2ZVJhbmdlKCk7CiAgICAgIGlmIChuYXRpdmUgPT0gbnVsbCkgcmV0dXJuOwogICAgICBpZiAobmF0aXZlLnN0YXJ0Lm5vZGUgPT09IF90aGlzLmN1cnNvci50ZXh0Tm9kZSkgcmV0dXJuOyAvLyBjdXJzb3IucmVzdG9yZSgpIHdpbGwgaGFuZGxlCiAgICAgIF90aGlzLmVtaXR0ZXIub25jZShFbWl0dGVyLmV2ZW50cy5TQ1JPTExfVVBEQVRFLCBmdW5jdGlvbiAoc291cmNlLCBtdXRhdGlvbnMpIHsKICAgICAgICB0cnkgewogICAgICAgICAgaWYgKF90aGlzLnJvb3QuY29udGFpbnMobmF0aXZlLnN0YXJ0Lm5vZGUpICYmIF90aGlzLnJvb3QuY29udGFpbnMobmF0aXZlLmVuZC5ub2RlKSkgewogICAgICAgICAgICBfdGhpcy5zZXROYXRpdmVSYW5nZShuYXRpdmUuc3RhcnQubm9kZSwgbmF0aXZlLnN0YXJ0Lm9mZnNldCwgbmF0aXZlLmVuZC5ub2RlLCBuYXRpdmUuZW5kLm9mZnNldCk7CiAgICAgICAgICB9CiAgICAgICAgICB2YXIgdHJpZ2dlcmVkQnlUeXBpbmcgPSBtdXRhdGlvbnMuc29tZShmdW5jdGlvbiAobXV0YXRpb24pIHsKICAgICAgICAgICAgcmV0dXJuIG11dGF0aW9uLnR5cGUgPT09ICdjaGFyYWN0ZXJEYXRhJyB8fCBtdXRhdGlvbi50eXBlID09PSAnY2hpbGRMaXN0JyB8fCBtdXRhdGlvbi50eXBlID09PSAnYXR0cmlidXRlcycgJiYgbXV0YXRpb24udGFyZ2V0ID09PSBfdGhpcy5yb290OwogICAgICAgICAgfSk7CiAgICAgICAgICBfdGhpcy51cGRhdGUodHJpZ2dlcmVkQnlUeXBpbmcgPyBFbWl0dGVyLnNvdXJjZXMuU0lMRU5UIDogc291cmNlKTsKICAgICAgICB9IGNhdGNoIChpZ25vcmVkKSB7CiAgICAgICAgICAvLyBpZ25vcmUKICAgICAgICB9CiAgICAgIH0pOwogICAgfSk7CiAgICB0aGlzLmVtaXR0ZXIub24oRW1pdHRlci5ldmVudHMuU0NST0xMX09QVElNSVpFLCBmdW5jdGlvbiAobXV0YXRpb25zLCBjb250ZXh0KSB7CiAgICAgIGlmIChjb250ZXh0LnJhbmdlKSB7CiAgICAgICAgdmFyIF9jb250ZXh0JHJhbmdlID0gY29udGV4dC5yYW5nZSwKICAgICAgICAgIHN0YXJ0Tm9kZSA9IF9jb250ZXh0JHJhbmdlLnN0YXJ0Tm9kZSwKICAgICAgICAgIHN0YXJ0T2Zmc2V0ID0gX2NvbnRleHQkcmFuZ2Uuc3RhcnRPZmZzZXQsCiAgICAgICAgICBlbmROb2RlID0gX2NvbnRleHQkcmFuZ2UuZW5kTm9kZSwKICAgICAgICAgIGVuZE9mZnNldCA9IF9jb250ZXh0JHJhbmdlLmVuZE9mZnNldDsKICAgICAgICBfdGhpcy5zZXROYXRpdmVSYW5nZShzdGFydE5vZGUsIHN0YXJ0T2Zmc2V0LCBlbmROb2RlLCBlbmRPZmZzZXQpOwogICAgICAgIF90aGlzLnVwZGF0ZShFbWl0dGVyLnNvdXJjZXMuU0lMRU5UKTsKICAgICAgfQogICAgfSk7CiAgICB0aGlzLnVwZGF0ZShFbWl0dGVyLnNvdXJjZXMuU0lMRU5UKTsKICB9CiAgcmV0dXJuIF9jcmVhdGVDbGFzcyhTZWxlY3Rpb24sIFt7CiAgICBrZXk6ICJoYW5kbGVDb21wb3NpdGlvbiIsCiAgICB2YWx1ZTogZnVuY3Rpb24gaGFuZGxlQ29tcG9zaXRpb24oKSB7CiAgICAgIHZhciBfdGhpczIgPSB0aGlzOwogICAgICB0aGlzLmVtaXR0ZXIub24oRW1pdHRlci5ldmVudHMuQ09NUE9TSVRJT05fQkVGT1JFX1NUQVJULCBmdW5jdGlvbiAoKSB7CiAgICAgICAgX3RoaXMyLmNvbXBvc2luZyA9IHRydWU7CiAgICAgIH0pOwogICAgICB0aGlzLmVtaXR0ZXIub24oRW1pdHRlci5ldmVudHMuQ09NUE9TSVRJT05fRU5ELCBmdW5jdGlvbiAoKSB7CiAgICAgICAgX3RoaXMyLmNvbXBvc2luZyA9IGZhbHNlOwogICAgICAgIGlmIChfdGhpczIuY3Vyc29yLnBhcmVudCkgewogICAgICAgICAgdmFyIHJhbmdlID0gX3RoaXMyLmN1cnNvci5yZXN0b3JlKCk7CiAgICAgICAgICBpZiAoIXJhbmdlKSByZXR1cm47CiAgICAgICAgICBzZXRUaW1lb3V0KGZ1bmN0aW9uICgpIHsKICAgICAgICAgICAgX3RoaXMyLnNldE5hdGl2ZVJhbmdlKHJhbmdlLnN0YXJ0Tm9kZSwgcmFuZ2Uuc3RhcnRPZmZzZXQsIHJhbmdlLmVuZE5vZGUsIHJhbmdlLmVuZE9mZnNldCk7CiAgICAgICAgICB9LCAxKTsKICAgICAgICB9CiAgICAgIH0pOwogICAgfQogIH0sIHsKICAgIGtleTogImhhbmRsZURyYWdnaW5nIiwKICAgIHZhbHVlOiBmdW5jdGlvbiBoYW5kbGVEcmFnZ2luZygpIHsKICAgICAgdmFyIF90aGlzMyA9IHRoaXM7CiAgICAgIHRoaXMuZW1pdHRlci5saXN0ZW5ET00oJ21vdXNlZG93bicsIGRvY3VtZW50LmJvZHksIGZ1bmN0aW9uICgpIHsKICAgICAgICBfdGhpczMubW91c2VEb3duID0gdHJ1ZTsKICAgICAgfSk7CiAgICAgIHRoaXMuZW1pdHRlci5saXN0ZW5ET00oJ21vdXNldXAnLCBkb2N1bWVudC5ib2R5LCBmdW5jdGlvbiAoKSB7CiAgICAgICAgX3RoaXMzLm1vdXNlRG93biA9IGZhbHNlOwogICAgICAgIF90aGlzMy51cGRhdGUoRW1pdHRlci5zb3VyY2VzLlVTRVIpOwogICAgICB9KTsKICAgIH0KICB9LCB7CiAgICBrZXk6ICJmb2N1cyIsCiAgICB2YWx1ZTogZnVuY3Rpb24gZm9jdXMoKSB7CiAgICAgIGlmICh0aGlzLmhhc0ZvY3VzKCkpIHJldHVybjsKICAgICAgdGhpcy5yb290LmZvY3VzKHsKICAgICAgICBwcmV2ZW50U2Nyb2xsOiB0cnVlCiAgICAgIH0pOwogICAgICB0aGlzLnNldFJhbmdlKHRoaXMuc2F2ZWRSYW5nZSk7CiAgICB9CiAgfSwgewogICAga2V5OiAiZm9ybWF0IiwKICAgIHZhbHVlOiBmdW5jdGlvbiBmb3JtYXQoX2Zvcm1hdCwgdmFsdWUpIHsKICAgICAgdGhpcy5zY3JvbGwudXBkYXRlKCk7CiAgICAgIHZhciBuYXRpdmVSYW5nZSA9IHRoaXMuZ2V0TmF0aXZlUmFuZ2UoKTsKICAgICAgaWYgKG5hdGl2ZVJhbmdlID09IG51bGwgfHwgIW5hdGl2ZVJhbmdlLm5hdGl2ZS5jb2xsYXBzZWQgfHwgdGhpcy5zY3JvbGwucXVlcnkoX2Zvcm1hdCwgU2NvcGUuQkxPQ0spKSByZXR1cm47CiAgICAgIGlmIChuYXRpdmVSYW5nZS5zdGFydC5ub2RlICE9PSB0aGlzLmN1cnNvci50ZXh0Tm9kZSkgewogICAgICAgIHZhciBibG90ID0gdGhpcy5zY3JvbGwuZmluZChuYXRpdmVSYW5nZS5zdGFydC5ub2RlLCBmYWxzZSk7CiAgICAgICAgaWYgKGJsb3QgPT0gbnVsbCkgcmV0dXJuOwogICAgICAgIC8vIFRPRE8gR2l2ZSBibG90IGFiaWxpdHkgdG8gbm90IHNwbGl0CiAgICAgICAgaWYgKGJsb3QgaW5zdGFuY2VvZiBMZWFmQmxvdCkgewogICAgICAgICAgdmFyIGFmdGVyID0gYmxvdC5zcGxpdChuYXRpdmVSYW5nZS5zdGFydC5vZmZzZXQpOwogICAgICAgICAgYmxvdC5wYXJlbnQuaW5zZXJ0QmVmb3JlKHRoaXMuY3Vyc29yLCBhZnRlcik7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgIC8vIEB0cy1leHBlY3QtZXJyb3IgVE9ETzogbmF0aXZlUmFuZ2Uuc3RhcnQubm9kZSBkb2Vzbid0IHNlZW0gdG8gbWF0Y2ggZnVuY3Rpb24gc2lnbmF0dXJlCiAgICAgICAgICBibG90Lmluc2VydEJlZm9yZSh0aGlzLmN1cnNvciwgbmF0aXZlUmFuZ2Uuc3RhcnQubm9kZSk7IC8vIFNob3VsZCBuZXZlciBoYXBwZW4KICAgICAgICB9CiAgICAgICAgdGhpcy5jdXJzb3IuYXR0YWNoKCk7CiAgICAgIH0KICAgICAgdGhpcy5jdXJzb3IuZm9ybWF0KF9mb3JtYXQsIHZhbHVlKTsKICAgICAgdGhpcy5zY3JvbGwub3B0aW1pemUoKTsKICAgICAgdGhpcy5zZXROYXRpdmVSYW5nZSh0aGlzLmN1cnNvci50ZXh0Tm9kZSwgdGhpcy5jdXJzb3IudGV4dE5vZGUuZGF0YS5sZW5ndGgpOwogICAgICB0aGlzLnVwZGF0ZSgpOwogICAgfQogIH0sIHsKICAgIGtleTogImdldEJvdW5kcyIsCiAgICB2YWx1ZTogZnVuY3Rpb24gZ2V0Qm91bmRzKGluZGV4KSB7CiAgICAgIHZhciBsZW5ndGggPSBhcmd1bWVudHMubGVuZ3RoID4gMSAmJiBhcmd1bWVudHNbMV0gIT09IHVuZGVmaW5lZCA/IGFyZ3VtZW50c1sxXSA6IDA7CiAgICAgIHZhciBzY3JvbGxMZW5ndGggPSB0aGlzLnNjcm9sbC5sZW5ndGgoKTsKICAgICAgaW5kZXggPSBNYXRoLm1pbihpbmRleCwgc2Nyb2xsTGVuZ3RoIC0gMSk7CiAgICAgIGxlbmd0aCA9IE1hdGgubWluKGluZGV4ICsgbGVuZ3RoLCBzY3JvbGxMZW5ndGggLSAxKSAtIGluZGV4OwogICAgICB2YXIgbm9kZTsKICAgICAgdmFyIF90aGlzJHNjcm9sbCRsZWFmID0gdGhpcy5zY3JvbGwubGVhZihpbmRleCksCiAgICAgICAgX3RoaXMkc2Nyb2xsJGxlYWYyID0gX3NsaWNlZFRvQXJyYXkoX3RoaXMkc2Nyb2xsJGxlYWYsIDIpLAogICAgICAgIGxlYWYgPSBfdGhpcyRzY3JvbGwkbGVhZjJbMF0sCiAgICAgICAgb2Zmc2V0ID0gX3RoaXMkc2Nyb2xsJGxlYWYyWzFdOwogICAgICBpZiAobGVhZiA9PSBudWxsKSByZXR1cm4gbnVsbDsKICAgICAgaWYgKGxlbmd0aCA+IDAgJiYgb2Zmc2V0ID09PSBsZWFmLmxlbmd0aCgpKSB7CiAgICAgICAgdmFyIF90aGlzJHNjcm9sbCRsZWFmMyA9IHRoaXMuc2Nyb2xsLmxlYWYoaW5kZXggKyAxKSwKICAgICAgICAgIF90aGlzJHNjcm9sbCRsZWFmNCA9IF9zbGljZWRUb0FycmF5KF90aGlzJHNjcm9sbCRsZWFmMywgMSksCiAgICAgICAgICBuZXh0ID0gX3RoaXMkc2Nyb2xsJGxlYWY0WzBdOwogICAgICAgIGlmIChuZXh0KSB7CiAgICAgICAgICB2YXIgX3RoaXMkc2Nyb2xsJGxpbmUgPSB0aGlzLnNjcm9sbC5saW5lKGluZGV4KSwKICAgICAgICAgICAgX3RoaXMkc2Nyb2xsJGxpbmUyID0gX3NsaWNlZFRvQXJyYXkoX3RoaXMkc2Nyb2xsJGxpbmUsIDEpLAogICAgICAgICAgICBsaW5lID0gX3RoaXMkc2Nyb2xsJGxpbmUyWzBdOwogICAgICAgICAgdmFyIF90aGlzJHNjcm9sbCRsaW5lMyA9IHRoaXMuc2Nyb2xsLmxpbmUoaW5kZXggKyAxKSwKICAgICAgICAgICAgX3RoaXMkc2Nyb2xsJGxpbmU0ID0gX3NsaWNlZFRvQXJyYXkoX3RoaXMkc2Nyb2xsJGxpbmUzLCAxKSwKICAgICAgICAgICAgbmV4dExpbmUgPSBfdGhpcyRzY3JvbGwkbGluZTRbMF07CiAgICAgICAgICBpZiAobGluZSA9PT0gbmV4dExpbmUpIHsKICAgICAgICAgICAgbGVhZiA9IG5leHQ7CiAgICAgICAgICAgIG9mZnNldCA9IDA7CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICB9CiAgICAgIHZhciBfbGVhZiRwb3NpdGlvbiA9IGxlYWYucG9zaXRpb24ob2Zmc2V0LCB0cnVlKTsKICAgICAgdmFyIF9sZWFmJHBvc2l0aW9uMiA9IF9zbGljZWRUb0FycmF5KF9sZWFmJHBvc2l0aW9uLCAyKTsKICAgICAgbm9kZSA9IF9sZWFmJHBvc2l0aW9uMlswXTsKICAgICAgb2Zmc2V0ID0gX2xlYWYkcG9zaXRpb24yWzFdOwogICAgICB2YXIgcmFuZ2UgPSBkb2N1bWVudC5jcmVhdGVSYW5nZSgpOwogICAgICBpZiAobGVuZ3RoID4gMCkgewogICAgICAgIHJhbmdlLnNldFN0YXJ0KG5vZGUsIG9mZnNldCk7CiAgICAgICAgdmFyIF90aGlzJHNjcm9sbCRsZWFmNSA9IHRoaXMuc2Nyb2xsLmxlYWYoaW5kZXggKyBsZW5ndGgpOwogICAgICAgIHZhciBfdGhpcyRzY3JvbGwkbGVhZjYgPSBfc2xpY2VkVG9BcnJheShfdGhpcyRzY3JvbGwkbGVhZjUsIDIpOwogICAgICAgIGxlYWYgPSBfdGhpcyRzY3JvbGwkbGVhZjZbMF07CiAgICAgICAgb2Zmc2V0ID0gX3RoaXMkc2Nyb2xsJGxlYWY2WzFdOwogICAgICAgIGlmIChsZWFmID09IG51bGwpIHJldHVybiBudWxsOwogICAgICAgIHZhciBfbGVhZiRwb3NpdGlvbjMgPSBsZWFmLnBvc2l0aW9uKG9mZnNldCwgdHJ1ZSk7CiAgICAgICAgdmFyIF9sZWFmJHBvc2l0aW9uNCA9IF9zbGljZWRUb0FycmF5KF9sZWFmJHBvc2l0aW9uMywgMik7CiAgICAgICAgbm9kZSA9IF9sZWFmJHBvc2l0aW9uNFswXTsKICAgICAgICBvZmZzZXQgPSBfbGVhZiRwb3NpdGlvbjRbMV07CiAgICAgICAgcmFuZ2Uuc2V0RW5kKG5vZGUsIG9mZnNldCk7CiAgICAgICAgcmV0dXJuIHJhbmdlLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpOwogICAgICB9CiAgICAgIHZhciBzaWRlID0gJ2xlZnQnOwogICAgICB2YXIgcmVjdDsKICAgICAgaWYgKG5vZGUgaW5zdGFuY2VvZiBUZXh0KSB7CiAgICAgICAgLy8gUmV0dXJuIG51bGwgaWYgdGhlIHRleHQgbm9kZSBpcyBlbXB0eSBiZWNhdXNlIGl0IGlzCiAgICAgICAgLy8gbm90IGFibGUgdG8gZ2V0IGEgdXNlZnVsIGNsaWVudCByZWN0OgogICAgICAgIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS93M2MvY3Nzd2ctZHJhZnRzL2lzc3Vlcy8yNTE0LgogICAgICAgIC8vIEVtcHR5IHRleHQgbm9kZXMgYXJlIG1vc3QgbGlrZWx5IGNhdXNlZCBieSBUZXh0QmxvdCNvcHRpbWl6ZSgpCiAgICAgICAgLy8gbm90IGdldHRpbmcgY2FsbGVkIHdoZW4gZWRpdG9yIGNvbnRlbnQgY2hhbmdlcy4KICAgICAgICBpZiAoIW5vZGUuZGF0YS5sZW5ndGgpIHsKICAgICAgICAgIHJldHVybiBudWxsOwogICAgICAgIH0KICAgICAgICBpZiAob2Zmc2V0IDwgbm9kZS5kYXRhLmxlbmd0aCkgewogICAgICAgICAgcmFuZ2Uuc2V0U3RhcnQobm9kZSwgb2Zmc2V0KTsKICAgICAgICAgIHJhbmdlLnNldEVuZChub2RlLCBvZmZzZXQgKyAxKTsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgcmFuZ2Uuc2V0U3RhcnQobm9kZSwgb2Zmc2V0IC0gMSk7CiAgICAgICAgICByYW5nZS5zZXRFbmQobm9kZSwgb2Zmc2V0KTsKICAgICAgICAgIHNpZGUgPSAncmlnaHQnOwogICAgICAgIH0KICAgICAgICByZWN0ID0gcmFuZ2UuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7CiAgICAgIH0gZWxzZSB7CiAgICAgICAgaWYgKCEobGVhZi5kb21Ob2RlIGluc3RhbmNlb2YgRWxlbWVudCkpIHJldHVybiBudWxsOwogICAgICAgIHJlY3QgPSBsZWFmLmRvbU5vZGUuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7CiAgICAgICAgaWYgKG9mZnNldCA+IDApIHNpZGUgPSAncmlnaHQnOwogICAgICB9CiAgICAgIHJldHVybiB7CiAgICAgICAgYm90dG9tOiByZWN0LnRvcCArIHJlY3QuaGVpZ2h0LAogICAgICAgIGhlaWdodDogcmVjdC5oZWlnaHQsCiAgICAgICAgbGVmdDogcmVjdFtzaWRlXSwKICAgICAgICByaWdodDogcmVjdFtzaWRlXSwKICAgICAgICB0b3A6IHJlY3QudG9wLAogICAgICAgIHdpZHRoOiAwCiAgICAgIH07CiAgICB9CiAgfSwgewogICAga2V5OiAiZ2V0TmF0aXZlUmFuZ2UiLAogICAgdmFsdWU6IGZ1bmN0aW9uIGdldE5hdGl2ZVJhbmdlKCkgewogICAgICB2YXIgc2VsZWN0aW9uID0gZG9jdW1lbnQuZ2V0U2VsZWN0aW9uKCk7CiAgICAgIGlmIChzZWxlY3Rpb24gPT0gbnVsbCB8fCBzZWxlY3Rpb24ucmFuZ2VDb3VudCA8PSAwKSByZXR1cm4gbnVsbDsKICAgICAgdmFyIG5hdGl2ZVJhbmdlID0gc2VsZWN0aW9uLmdldFJhbmdlQXQoMCk7CiAgICAgIGlmIChuYXRpdmVSYW5nZSA9PSBudWxsKSByZXR1cm4gbnVsbDsKICAgICAgdmFyIHJhbmdlID0gdGhpcy5ub3JtYWxpemVOYXRpdmUobmF0aXZlUmFuZ2UpOwogICAgICBkZWJ1Zy5pbmZvKCdnZXROYXRpdmVSYW5nZScsIHJhbmdlKTsKICAgICAgcmV0dXJuIHJhbmdlOwogICAgfQogIH0sIHsKICAgIGtleTogImdldFJhbmdlIiwKICAgIHZhbHVlOiBmdW5jdGlvbiBnZXRSYW5nZSgpIHsKICAgICAgdmFyIHJvb3QgPSB0aGlzLnNjcm9sbC5kb21Ob2RlOwogICAgICBpZiAoJ2lzQ29ubmVjdGVkJyBpbiByb290ICYmICFyb290LmlzQ29ubmVjdGVkKSB7CiAgICAgICAgLy8gZG9jdW1lbnQuZ2V0U2VsZWN0aW9uKCkgZm9yY2VzIGxheW91dCBvbiBCbGluaywgc28gd2UgdHJlbmQgdG8KICAgICAgICAvLyBub3QgY2FsbGluZyBpdC4KICAgICAgICByZXR1cm4gW251bGwsIG51bGxdOwogICAgICB9CiAgICAgIHZhciBub3JtYWxpemVkID0gdGhpcy5nZXROYXRpdmVSYW5nZSgpOwogICAgICBpZiAobm9ybWFsaXplZCA9PSBudWxsKSByZXR1cm4gW251bGwsIG51bGxdOwogICAgICB2YXIgcmFuZ2UgPSB0aGlzLm5vcm1hbGl6ZWRUb1JhbmdlKG5vcm1hbGl6ZWQpOwogICAgICByZXR1cm4gW3JhbmdlLCBub3JtYWxpemVkXTsKICAgIH0KICB9LCB7CiAgICBrZXk6ICJoYXNGb2N1cyIsCiAgICB2YWx1ZTogZnVuY3Rpb24gaGFzRm9jdXMoKSB7CiAgICAgIHJldHVybiBkb2N1bWVudC5hY3RpdmVFbGVtZW50ID09PSB0aGlzLnJvb3QgfHwgZG9jdW1lbnQuYWN0aXZlRWxlbWVudCAhPSBudWxsICYmIGNvbnRhaW5zKHRoaXMucm9vdCwgZG9jdW1lbnQuYWN0aXZlRWxlbWVudCk7CiAgICB9CiAgfSwgewogICAga2V5OiAibm9ybWFsaXplZFRvUmFuZ2UiLAogICAgdmFsdWU6IGZ1bmN0aW9uIG5vcm1hbGl6ZWRUb1JhbmdlKHJhbmdlKSB7CiAgICAgIHZhciBfdGhpczQgPSB0aGlzOwogICAgICB2YXIgcG9zaXRpb25zID0gW1tyYW5nZS5zdGFydC5ub2RlLCByYW5nZS5zdGFydC5vZmZzZXRdXTsKICAgICAgaWYgKCFyYW5nZS5uYXRpdmUuY29sbGFwc2VkKSB7CiAgICAgICAgcG9zaXRpb25zLnB1c2goW3JhbmdlLmVuZC5ub2RlLCByYW5nZS5lbmQub2Zmc2V0XSk7CiAgICAgIH0KICAgICAgdmFyIGluZGV4ZXMgPSBwb3NpdGlvbnMubWFwKGZ1bmN0aW9uIChwb3NpdGlvbikgewogICAgICAgIHZhciBfcG9zaXRpb24gPSBfc2xpY2VkVG9BcnJheShwb3NpdGlvbiwgMiksCiAgICAgICAgICBub2RlID0gX3Bvc2l0aW9uWzBdLAogICAgICAgICAgb2Zmc2V0ID0gX3Bvc2l0aW9uWzFdOwogICAgICAgIHZhciBibG90ID0gX3RoaXM0LnNjcm9sbC5maW5kKG5vZGUsIHRydWUpOwogICAgICAgIC8vIEB0cy1leHBlY3QtZXJyb3IgRml4IG1lIGxhdGVyCiAgICAgICAgdmFyIGluZGV4ID0gYmxvdC5vZmZzZXQoX3RoaXM0LnNjcm9sbCk7CiAgICAgICAgaWYgKG9mZnNldCA9PT0gMCkgewogICAgICAgICAgcmV0dXJuIGluZGV4OwogICAgICAgIH0KICAgICAgICBpZiAoYmxvdCBpbnN0YW5jZW9mIExlYWZCbG90KSB7CiAgICAgICAgICByZXR1cm4gaW5kZXggKyBibG90LmluZGV4KG5vZGUsIG9mZnNldCk7CiAgICAgICAgfQogICAgICAgIC8vIEB0cy1leHBlY3QtZXJyb3IgRml4IG1lIGxhdGVyCiAgICAgICAgcmV0dXJuIGluZGV4ICsgYmxvdC5sZW5ndGgoKTsKICAgICAgfSk7CiAgICAgIHZhciBlbmQgPSBNYXRoLm1pbihNYXRoLm1heC5hcHBseShNYXRoLCBfdG9Db25zdW1hYmxlQXJyYXkoaW5kZXhlcykpLCB0aGlzLnNjcm9sbC5sZW5ndGgoKSAtIDEpOwogICAgICB2YXIgc3RhcnQgPSBNYXRoLm1pbi5hcHBseShNYXRoLCBbZW5kXS5jb25jYXQoX3RvQ29uc3VtYWJsZUFycmF5KGluZGV4ZXMpKSk7CiAgICAgIHJldHVybiBuZXcgUmFuZ2Uoc3RhcnQsIGVuZCAtIHN0YXJ0KTsKICAgIH0KICB9LCB7CiAgICBrZXk6ICJub3JtYWxpemVOYXRpdmUiLAogICAgdmFsdWU6IGZ1bmN0aW9uIG5vcm1hbGl6ZU5hdGl2ZShuYXRpdmVSYW5nZSkgewogICAgICBpZiAoIWNvbnRhaW5zKHRoaXMucm9vdCwgbmF0aXZlUmFuZ2Uuc3RhcnRDb250YWluZXIpIHx8ICFuYXRpdmVSYW5nZS5jb2xsYXBzZWQgJiYgIWNvbnRhaW5zKHRoaXMucm9vdCwgbmF0aXZlUmFuZ2UuZW5kQ29udGFpbmVyKSkgewogICAgICAgIHJldHVybiBudWxsOwogICAgICB9CiAgICAgIHZhciByYW5nZSA9IHsKICAgICAgICBzdGFydDogewogICAgICAgICAgbm9kZTogbmF0aXZlUmFuZ2Uuc3RhcnRDb250YWluZXIsCiAgICAgICAgICBvZmZzZXQ6IG5hdGl2ZVJhbmdlLnN0YXJ0T2Zmc2V0CiAgICAgICAgfSwKICAgICAgICBlbmQ6IHsKICAgICAgICAgIG5vZGU6IG5hdGl2ZVJhbmdlLmVuZENvbnRhaW5lciwKICAgICAgICAgIG9mZnNldDogbmF0aXZlUmFuZ2UuZW5kT2Zmc2V0CiAgICAgICAgfSwKICAgICAgICBuYXRpdmU6IG5hdGl2ZVJhbmdlCiAgICAgIH07CiAgICAgIFtyYW5nZS5zdGFydCwgcmFuZ2UuZW5kXS5mb3JFYWNoKGZ1bmN0aW9uIChwb3NpdGlvbikgewogICAgICAgIHZhciBub2RlID0gcG9zaXRpb24ubm9kZSwKICAgICAgICAgIG9mZnNldCA9IHBvc2l0aW9uLm9mZnNldDsKICAgICAgICB3aGlsZSAoIShub2RlIGluc3RhbmNlb2YgVGV4dCkgJiYgbm9kZS5jaGlsZE5vZGVzLmxlbmd0aCA+IDApIHsKICAgICAgICAgIGlmIChub2RlLmNoaWxkTm9kZXMubGVuZ3RoID4gb2Zmc2V0KSB7CiAgICAgICAgICAgIG5vZGUgPSBub2RlLmNoaWxkTm9kZXNbb2Zmc2V0XTsKICAgICAgICAgICAgb2Zmc2V0ID0gMDsKICAgICAgICAgIH0gZWxzZSBpZiAobm9kZS5jaGlsZE5vZGVzLmxlbmd0aCA9PT0gb2Zmc2V0KSB7CiAgICAgICAgICAgIC8vIEB0cy1leHBlY3QtZXJyb3IgRml4IG1lIGxhdGVyCiAgICAgICAgICAgIG5vZGUgPSBub2RlLmxhc3RDaGlsZDsKICAgICAgICAgICAgaWYgKG5vZGUgaW5zdGFuY2VvZiBUZXh0KSB7CiAgICAgICAgICAgICAgb2Zmc2V0ID0gbm9kZS5kYXRhLmxlbmd0aDsKICAgICAgICAgICAgfSBlbHNlIGlmIChub2RlLmNoaWxkTm9kZXMubGVuZ3RoID4gMCkgewogICAgICAgICAgICAgIC8vIENvbnRhaW5lciBjYXNlCiAgICAgICAgICAgICAgb2Zmc2V0ID0gbm9kZS5jaGlsZE5vZGVzLmxlbmd0aDsKICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAvLyBFbWJlZCBjYXNlCiAgICAgICAgICAgICAgb2Zmc2V0ID0gbm9kZS5jaGlsZE5vZGVzLmxlbmd0aCArIDE7CiAgICAgICAgICAgIH0KICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgfQogICAgICAgIH0KICAgICAgICBwb3NpdGlvbi5ub2RlID0gbm9kZTsKICAgICAgICBwb3NpdGlvbi5vZmZzZXQgPSBvZmZzZXQ7CiAgICAgIH0pOwogICAgICByZXR1cm4gcmFuZ2U7CiAgICB9CiAgfSwgewogICAga2V5OiAicmFuZ2VUb05hdGl2ZSIsCiAgICB2YWx1ZTogZnVuY3Rpb24gcmFuZ2VUb05hdGl2ZShyYW5nZSkgewogICAgICB2YXIgX3RoaXM1ID0gdGhpczsKICAgICAgdmFyIHNjcm9sbExlbmd0aCA9IHRoaXMuc2Nyb2xsLmxlbmd0aCgpOwogICAgICB2YXIgZ2V0UG9zaXRpb24gPSBmdW5jdGlvbiBnZXRQb3NpdGlvbihpbmRleCwgaW5jbHVzaXZlKSB7CiAgICAgICAgaW5kZXggPSBNYXRoLm1pbihzY3JvbGxMZW5ndGggLSAxLCBpbmRleCk7CiAgICAgICAgdmFyIF90aGlzNSRzY3JvbGwkbGVhZiA9IF90aGlzNS5zY3JvbGwubGVhZihpbmRleCksCiAgICAgICAgICBfdGhpczUkc2Nyb2xsJGxlYWYyID0gX3NsaWNlZFRvQXJyYXkoX3RoaXM1JHNjcm9sbCRsZWFmLCAyKSwKICAgICAgICAgIGxlYWYgPSBfdGhpczUkc2Nyb2xsJGxlYWYyWzBdLAogICAgICAgICAgbGVhZk9mZnNldCA9IF90aGlzNSRzY3JvbGwkbGVhZjJbMV07CiAgICAgICAgcmV0dXJuIGxlYWYgPyBsZWFmLnBvc2l0aW9uKGxlYWZPZmZzZXQsIGluY2x1c2l2ZSkgOiBbbnVsbCwgLTFdOwogICAgICB9OwogICAgICByZXR1cm4gW10uY29uY2F0KF90b0NvbnN1bWFibGVBcnJheShnZXRQb3NpdGlvbihyYW5nZS5pbmRleCwgZmFsc2UpKSwgX3RvQ29uc3VtYWJsZUFycmF5KGdldFBvc2l0aW9uKHJhbmdlLmluZGV4ICsgcmFuZ2UubGVuZ3RoLCB0cnVlKSkpOwogICAgfQogIH0sIHsKICAgIGtleTogInNldE5hdGl2ZVJhbmdlIiwKICAgIHZhbHVlOiBmdW5jdGlvbiBzZXROYXRpdmVSYW5nZShzdGFydE5vZGUsIHN0YXJ0T2Zmc2V0KSB7CiAgICAgIHZhciBlbmROb2RlID0gYXJndW1lbnRzLmxlbmd0aCA+IDIgJiYgYXJndW1lbnRzWzJdICE9PSB1bmRlZmluZWQgPyBhcmd1bWVudHNbMl0gOiBzdGFydE5vZGU7CiAgICAgIHZhciBlbmRPZmZzZXQgPSBhcmd1bWVudHMubGVuZ3RoID4gMyAmJiBhcmd1bWVudHNbM10gIT09IHVuZGVmaW5lZCA/IGFyZ3VtZW50c1szXSA6IHN0YXJ0T2Zmc2V0OwogICAgICB2YXIgZm9yY2UgPSBhcmd1bWVudHMubGVuZ3RoID4gNCAmJiBhcmd1bWVudHNbNF0gIT09IHVuZGVmaW5lZCA/IGFyZ3VtZW50c1s0XSA6IGZhbHNlOwogICAgICBkZWJ1Zy5pbmZvKCdzZXROYXRpdmVSYW5nZScsIHN0YXJ0Tm9kZSwgc3RhcnRPZmZzZXQsIGVuZE5vZGUsIGVuZE9mZnNldCk7CiAgICAgIGlmIChzdGFydE5vZGUgIT0gbnVsbCAmJiAodGhpcy5yb290LnBhcmVudE5vZGUgPT0gbnVsbCB8fCBzdGFydE5vZGUucGFyZW50Tm9kZSA9PSBudWxsIHx8CiAgICAgIC8vIEB0cy1leHBlY3QtZXJyb3IgRml4IG1lIGxhdGVyCiAgICAgIGVuZE5vZGUucGFyZW50Tm9kZSA9PSBudWxsKSkgewogICAgICAgIHJldHVybjsKICAgICAgfQogICAgICB2YXIgc2VsZWN0aW9uID0gZG9jdW1lbnQuZ2V0U2VsZWN0aW9uKCk7CiAgICAgIGlmIChzZWxlY3Rpb24gPT0gbnVsbCkgcmV0dXJuOwogICAgICBpZiAoc3RhcnROb2RlICE9IG51bGwpIHsKICAgICAgICBpZiAoIXRoaXMuaGFzRm9jdXMoKSkgdGhpcy5yb290LmZvY3VzKHsKICAgICAgICAgIHByZXZlbnRTY3JvbGw6IHRydWUKICAgICAgICB9KTsKICAgICAgICB2YXIgX3JlZiA9IHRoaXMuZ2V0TmF0aXZlUmFuZ2UoKSB8fCB7fSwKICAgICAgICAgIG5hdGl2ZSA9IF9yZWYubmF0aXZlOwogICAgICAgIGlmIChuYXRpdmUgPT0gbnVsbCB8fCBmb3JjZSB8fCBzdGFydE5vZGUgIT09IG5hdGl2ZS5zdGFydENvbnRhaW5lciB8fCBzdGFydE9mZnNldCAhPT0gbmF0aXZlLnN0YXJ0T2Zmc2V0IHx8IGVuZE5vZGUgIT09IG5hdGl2ZS5lbmRDb250YWluZXIgfHwgZW5kT2Zmc2V0ICE9PSBuYXRpdmUuZW5kT2Zmc2V0KSB7CiAgICAgICAgICBpZiAoc3RhcnROb2RlIGluc3RhbmNlb2YgRWxlbWVudCAmJiBzdGFydE5vZGUudGFnTmFtZSA9PT0gJ0JSJykgewogICAgICAgICAgICAvLyBAdHMtZXhwZWN0LWVycm9yIEZpeCBtZSBsYXRlcgogICAgICAgICAgICBzdGFydE9mZnNldCA9IEFycmF5LmZyb20oc3RhcnROb2RlLnBhcmVudE5vZGUuY2hpbGROb2RlcykuaW5kZXhPZihzdGFydE5vZGUpOwogICAgICAgICAgICBzdGFydE5vZGUgPSBzdGFydE5vZGUucGFyZW50Tm9kZTsKICAgICAgICAgIH0KICAgICAgICAgIGlmIChlbmROb2RlIGluc3RhbmNlb2YgRWxlbWVudCAmJiBlbmROb2RlLnRhZ05hbWUgPT09ICdCUicpIHsKICAgICAgICAgICAgLy8gQHRzLWV4cGVjdC1lcnJvciBGaXggbWUgbGF0ZXIKICAgICAgICAgICAgZW5kT2Zmc2V0ID0gQXJyYXkuZnJvbShlbmROb2RlLnBhcmVudE5vZGUuY2hpbGROb2RlcykuaW5kZXhPZihlbmROb2RlKTsKICAgICAgICAgICAgZW5kTm9kZSA9IGVuZE5vZGUucGFyZW50Tm9kZTsKICAgICAgICAgIH0KICAgICAgICAgIHZhciByYW5nZSA9IGRvY3VtZW50LmNyZWF0ZVJhbmdlKCk7CiAgICAgICAgICAvLyBAdHMtZXhwZWN0LWVycm9yIEZpeCBtZSBsYXRlcgogICAgICAgICAgcmFuZ2Uuc2V0U3RhcnQoc3RhcnROb2RlLCBzdGFydE9mZnNldCk7CiAgICAgICAgICAvLyBAdHMtZXhwZWN0LWVycm9yIEZpeCBtZSBsYXRlcgogICAgICAgICAgcmFuZ2Uuc2V0RW5kKGVuZE5vZGUsIGVuZE9mZnNldCk7CiAgICAgICAgICBzZWxlY3Rpb24ucmVtb3ZlQWxsUmFuZ2VzKCk7CiAgICAgICAgICBzZWxlY3Rpb24uYWRkUmFuZ2UocmFuZ2UpOwogICAgICAgIH0KICAgICAgfSBlbHNlIHsKICAgICAgICBzZWxlY3Rpb24ucmVtb3ZlQWxsUmFuZ2VzKCk7CiAgICAgICAgdGhpcy5yb290LmJsdXIoKTsKICAgICAgfQogICAgfQogIH0sIHsKICAgIGtleTogInNldFJhbmdlIiwKICAgIHZhbHVlOiBmdW5jdGlvbiBzZXRSYW5nZShyYW5nZSkgewogICAgICB2YXIgZm9yY2UgPSBhcmd1bWVudHMubGVuZ3RoID4gMSAmJiBhcmd1bWVudHNbMV0gIT09IHVuZGVmaW5lZCA/IGFyZ3VtZW50c1sxXSA6IGZhbHNlOwogICAgICB2YXIgc291cmNlID0gYXJndW1lbnRzLmxlbmd0aCA+IDIgJiYgYXJndW1lbnRzWzJdICE9PSB1bmRlZmluZWQgPyBhcmd1bWVudHNbMl0gOiBFbWl0dGVyLnNvdXJjZXMuQVBJOwogICAgICBpZiAodHlwZW9mIGZvcmNlID09PSAnc3RyaW5nJykgewogICAgICAgIHNvdXJjZSA9IGZvcmNlOwogICAgICAgIGZvcmNlID0gZmFsc2U7CiAgICAgIH0KICAgICAgZGVidWcuaW5mbygnc2V0UmFuZ2UnLCByYW5nZSk7CiAgICAgIGlmIChyYW5nZSAhPSBudWxsKSB7CiAgICAgICAgdmFyIGFyZ3MgPSB0aGlzLnJhbmdlVG9OYXRpdmUocmFuZ2UpOwogICAgICAgIHRoaXMuc2V0TmF0aXZlUmFuZ2UuYXBwbHkodGhpcywgX3RvQ29uc3VtYWJsZUFycmF5KGFyZ3MpLmNvbmNhdChbZm9yY2VdKSk7CiAgICAgIH0gZWxzZSB7CiAgICAgICAgdGhpcy5zZXROYXRpdmVSYW5nZShudWxsKTsKICAgICAgfQogICAgICB0aGlzLnVwZGF0ZShzb3VyY2UpOwogICAgfQogIH0sIHsKICAgIGtleTogInVwZGF0ZSIsCiAgICB2YWx1ZTogZnVuY3Rpb24gdXBkYXRlKCkgewogICAgICB2YXIgc291cmNlID0gYXJndW1lbnRzLmxlbmd0aCA+IDAgJiYgYXJndW1lbnRzWzBdICE9PSB1bmRlZmluZWQgPyBhcmd1bWVudHNbMF0gOiBFbWl0dGVyLnNvdXJjZXMuVVNFUjsKICAgICAgdmFyIG9sZFJhbmdlID0gdGhpcy5sYXN0UmFuZ2U7CiAgICAgIHZhciBfdGhpcyRnZXRSYW5nZSA9IHRoaXMuZ2V0UmFuZ2UoKSwKICAgICAgICBfdGhpcyRnZXRSYW5nZTIgPSBfc2xpY2VkVG9BcnJheShfdGhpcyRnZXRSYW5nZSwgMiksCiAgICAgICAgbGFzdFJhbmdlID0gX3RoaXMkZ2V0UmFuZ2UyWzBdLAogICAgICAgIG5hdGl2ZVJhbmdlID0gX3RoaXMkZ2V0UmFuZ2UyWzFdOwogICAgICB0aGlzLmxhc3RSYW5nZSA9IGxhc3RSYW5nZTsKICAgICAgdGhpcy5sYXN0TmF0aXZlID0gbmF0aXZlUmFuZ2U7CiAgICAgIGlmICh0aGlzLmxhc3RSYW5nZSAhPSBudWxsKSB7CiAgICAgICAgdGhpcy5zYXZlZFJhbmdlID0gdGhpcy5sYXN0UmFuZ2U7CiAgICAgIH0KICAgICAgaWYgKCFpc0VxdWFsKG9sZFJhbmdlLCB0aGlzLmxhc3RSYW5nZSkpIHsKICAgICAgICB2YXIgX3RoaXMkZW1pdHRlcjsKICAgICAgICBpZiAoIXRoaXMuY29tcG9zaW5nICYmIG5hdGl2ZVJhbmdlICE9IG51bGwgJiYgbmF0aXZlUmFuZ2UubmF0aXZlLmNvbGxhcHNlZCAmJiBuYXRpdmVSYW5nZS5zdGFydC5ub2RlICE9PSB0aGlzLmN1cnNvci50ZXh0Tm9kZSkgewogICAgICAgICAgdmFyIHJhbmdlID0gdGhpcy5jdXJzb3IucmVzdG9yZSgpOwogICAgICAgICAgaWYgKHJhbmdlKSB7CiAgICAgICAgICAgIHRoaXMuc2V0TmF0aXZlUmFuZ2UocmFuZ2Uuc3RhcnROb2RlLCByYW5nZS5zdGFydE9mZnNldCwgcmFuZ2UuZW5kTm9kZSwgcmFuZ2UuZW5kT2Zmc2V0KTsKICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgdmFyIGFyZ3MgPSBbRW1pdHRlci5ldmVudHMuU0VMRUNUSU9OX0NIQU5HRSwgY2xvbmVEZWVwKHRoaXMubGFzdFJhbmdlKSwgY2xvbmVEZWVwKG9sZFJhbmdlKSwgc291cmNlXTsKICAgICAgICAoX3RoaXMkZW1pdHRlciA9IHRoaXMuZW1pdHRlcikuZW1pdC5hcHBseShfdGhpcyRlbWl0dGVyLCBbRW1pdHRlci5ldmVudHMuRURJVE9SX0NIQU5HRV0uY29uY2F0KGFyZ3MpKTsKICAgICAgICBpZiAoc291cmNlICE9PSBFbWl0dGVyLnNvdXJjZXMuU0lMRU5UKSB7CiAgICAgICAgICB2YXIgX3RoaXMkZW1pdHRlcjI7CiAgICAgICAgICAoX3RoaXMkZW1pdHRlcjIgPSB0aGlzLmVtaXR0ZXIpLmVtaXQuYXBwbHkoX3RoaXMkZW1pdHRlcjIsIGFyZ3MpOwogICAgICAgIH0KICAgICAgfQogICAgfQogIH1dKTsKfSgpOwpmdW5jdGlvbiBjb250YWlucyhwYXJlbnQsIGRlc2NlbmRhbnQpIHsKICB0cnkgewogICAgLy8gRmlyZWZveCBpbnNlcnRzIGluYWNjZXNzaWJsZSBub2RlcyBhcm91bmQgdmlkZW8gZWxlbWVudHMKICAgIGRlc2NlbmRhbnQucGFyZW50Tm9kZTsgLy8gZXNsaW50LWRpc2FibGUtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tdW51c2VkLWV4cHJlc3Npb25zCiAgfSBjYXRjaCAoZSkgewogICAgcmV0dXJuIGZhbHNlOwogIH0KICByZXR1cm4gcGFyZW50LmNvbnRhaW5zKGRlc2NlbmRhbnQpOwp9CmV4cG9ydCBkZWZhdWx0IFNlbGVjdGlvbjs="},null]} |