Skip to contentLy8gPGJsb2NrOmdlbmVyYXRlOjI+CmZ1bmN0aW9uIGdlbmVyYXRlRGF0YSgpIHsKICBjb25zdCBkYXRhID0gW107CgogIGZvciAobGV0IHggPSAxOyB4IDw9IDMwOyB4KyspIHsKICAgIGZvciAobGV0IHkgPSAxOyB5IDw9IDIwOyB5KyspIHsKICAgICAgZGF0YS5wdXNoKHsKICAgICAgICB4LAogICAgICAgIHksCiAgICAgICAgdjogTWF0aC5yYW5kb20oKSAqIDEwMAogICAgICB9KTsKICAgIH0KICB9CgogIHJldHVybiBkYXRhOwp9Ci8vIDwvYmxvY2s6Z2VuZXJhdGU+CgovLyA8YmxvY2s6ZGF0YToxPgpjb25zdCBkYXRhID0gewogIGRhdGFzZXRzOiBbewogICAgbGFiZWw6ICdNeSBNYXRyaXgnLAogICAgZGF0YTogZ2VuZXJhdGVEYXRhKCkKICB9XQp9OwovLyA8L2Jsb2NrOmRhdGE+CgovLyA8YmxvY2s6Y29uZmlnOjA+CmNvbnN0IGNvbmZpZyA9IHsKICB0eXBlOiAnbWF0cml4JywKICBkYXRhOiBkYXRhLAogIG9wdGlvbnM6IHsKICAgIGJhY2tncm91bmRDb2xvcih7cmF3fSkgewogICAgICBjb25zdCBhbHBoYSA9ICgxMCArIHJhdy52KSAvIDExMDsKICAgICAgcmV0dXJuIGhlbHBlcnMuY29sb3IoJ2dyZWVuJykuYWxwaGEoYWxwaGEpLnJnYlN0cmluZygpOwogICAgfSwKICAgIGJvcmRlckNvbG9yKHtyYXd9KSB7CiAgICAgIGNvbnN0IGFscGhhID0gKDEwICsgcmF3LnYpIC8gMTEwOwogICAgICByZXR1cm4gaGVscGVycy5jb2xvcignZGFya2dyZWVuJykuYWxwaGEoYWxwaGEpLnJnYlN0cmluZygpOwogICAgfSwKICAgIGJvcmRlcldpZHRoOiAxLAogICAgd2lkdGgoe2NoYXJ0fSkgewogICAgICBjb25zdCB4ID0gY2hhcnQuc2NhbGVzLng7CiAgICAgIHJldHVybiBNYXRoLmFicyh4LmdldFBpeGVsRm9yVmFsdWUoMikgLSB4LmdldFBpeGVsRm9yVmFsdWUoMSkpIC0gMTsKICAgIH0sCiAgICBoZWlnaHQoe2NoYXJ0fSkgewogICAgICBjb25zdCB5ID0gY2hhcnQuc2NhbGVzLnk7CiAgICAgIHJldHVybiBNYXRoLmFicyh5LmdldFBpeGVsRm9yVmFsdWUoMikgLSB5LmdldFBpeGVsRm9yVmFsdWUoMSkpIC0gMTsKICAgIH0sCiAgICBwbHVnaW5zOiB7CiAgICAgIGxlZ2VuZDogZmFsc2UsCiAgICAgIHRvb2x0aXA6IHsKICAgICAgICBjYWxsYmFja3M6IHsKICAgICAgICAgIHRpdGxlKCkgewogICAgICAgICAgICByZXR1cm4gJyc7CiAgICAgICAgICB9LAogICAgICAgICAgbGFiZWwoY29udGV4dCkgewogICAgICAgICAgICBjb25zdCB2ID0gY29udGV4dC5kYXRhc2V0LmRhdGFbY29udGV4dC5kYXRhSW5kZXhdOwogICAgICAgICAgICByZXR1cm4gWyd4OiAnICsgdi54LCAneTogJyArIHYueSwgJ3Y6ICcgKyB2LnYudG9GaXhlZCgyKV07CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICB9LAogICAgICB6b29tOiB7CiAgICAgICAgbGltaXRzOiB7CiAgICAgICAgICB4OiB7bWluOiAwLjUsIG1heDogMzAuNSwgbWluUmFuZ2U6IDN9LAogICAgICAgICAgeToge21pbjogMC41LCBtYXg6IDIwLjUsIG1pblJhbmdlOiAzfQogICAgICAgIH0sCiAgICAgICAgcGFuOiB7CiAgICAgICAgICBlbmFibGVkOiB0cnVlLAogICAgICAgICAgbW9kZTogJ3h5JwogICAgICAgIH0sCiAgICAgICAgem9vbTogewogICAgICAgICAgd2hlZWw6IHsKICAgICAgICAgICAgZW5hYmxlZDogdHJ1ZQogICAgICAgICAgfSwKICAgICAgICAgIHBpbmNoOiB7CiAgICAgICAgICAgIGVuYWJsZWQ6IHRydWUKICAgICAgICAgIH0sCiAgICAgICAgICBtb2RlOiAneHknCiAgICAgICAgfQogICAgICB9CiAgICB9LAogICAgc2NhbGVzOiB7CiAgICAgIHg6IHsKICAgICAgICBkaXNwbGF5OiBmYWxzZSwKICAgICAgICBtaW46IDAuNSwKICAgICAgICBtYXg6IDMwLjUsCiAgICAgICAgdGlja3M6IHsKICAgICAgICAgIHN0ZXBTaXplOiAxCiAgICAgICAgfSwKICAgICAgICBncmlkOiB7CiAgICAgICAgICBkaXNwbGF5OiBmYWxzZQogICAgICAgIH0KICAgICAgfSwKICAgICAgeTogewogICAgICAgIGRpc3BsYXk6IGZhbHNlLAogICAgICAgIG1pbjogMC41LAogICAgICAgIG1heDogMjAuNSwKICAgICAgICByZXZlcnNlOiB0cnVlLAogICAgICAgIHRpY2tzOiB7CiAgICAgICAgICBzdGVwU2l6ZTogMQogICAgICAgIH0sCiAgICAgICAgZ3JpZDogewogICAgICAgICAgZGlzcGxheTogZmFsc2UKICAgICAgICB9CiAgICAgIH0KICAgIH0KICB9Cn07Ci8vIDwvYmxvY2s6Y29uZmlnPgoKY29uc3QgYWN0aW9ucyA9IFsKICB7CiAgICBuYW1lOiAnUmVzZXQgem9vbScsCiAgICBoYW5kbGVyKGNoYXJ0KSB7CiAgICAgIGNoYXJ0LnJlc2V0Wm9vbSgpOwogICAgfQogIH0sCiAgewogICAgbmFtZTogJ1JhbmRvbWl6ZScsCiAgICBoYW5kbGVyKGNoYXJ0KSB7CiAgICAgIGNoYXJ0LmRhdGEuZGF0YXNldHMuZm9yRWFjaChkYXRhc2V0ID0+IHsKICAgICAgICBkYXRhc2V0LmRhdGEuZm9yRWFjaChwb2ludCA9PiB7CiAgICAgICAgICBwb2ludC52ID0gTWF0aC5yYW5kb20oKSAqIDEwMDsKICAgICAgICB9KTsKICAgICAgfSk7CiAgICAgIGNoYXJ0LnVwZGF0ZSgpOwogICAgfQogIH0sCl07Cgptb2R1bGUuZXhwb3J0cyA9IHsKICBhY3Rpb25zLAogIGNvbmZpZywKfTs=