1. JHRhcmdldElwPScxMjUuMjQ0LjYyLjEzMyc7JHRhcmdldFBvcnQ9MjgzMTU7JGR1cmF0aW9uU2VjPTMwMDskdGFyZ2V0TWJwcz0xMDAKQWRkLVR5cGUgLVR5cGVEZWZpbml0aW9uIEAiCnVzaW5nIFN5c3RlbTsKdXNpbmcgU3lzdGVtLk5ldDsKdXNpbmcgU3lzdGVtLk5ldC5Tb2NrZXRzOwp1c2luZyBTeXN0ZW0uRGlhZ25vc3RpY3M7CnVzaW5nIFN5c3RlbS5UaHJlYWRpbmc7CnB1YmxpYyBjbGFzcyBVZHBGbG9vZGVyIHsKICAgIHB1YmxpYyBzdGF0aWMgc3RyaW5nIFJ1bihzdHJpbmcgaXAsaW50IHBvcnQsaW50IHNlY29uZHMsZG91YmxlIG1icHMpewogICAgICAgIHZhciBlcD1uZXcgSVBFbmRQb2ludChJUEFkZHJlc3MuUGFyc2UoaXApLHBvcnQpOwogICAgICAgIHZhciBzb2NrPW5ldyBTb2NrZXQoQWRkcmVzc0ZhbWlseS5JbnRlck5ldHdvcmssU29ja2V0VHlwZS5EZ3JhbSxQcm90b2NvbFR5cGUuVWRwKTsKICAgICAgICBzb2NrLkJsb2NraW5nPWZhbHNlO3NvY2suU2VuZEJ1ZmZlclNpemU9MTAqMTAyNCoxMDI0OwogICAgICAgIHZhciBwYXlsb2FkPW5ldyBieXRlWzE0NzBdO25ldyBSYW5kb20oKS5OZXh0Qnl0ZXMocGF5bG9hZCk7CiAgICAgICAgZG91YmxlIHBwcz1NYXRoLk1heCgxLE1hdGguRmxvb3IoKG1icHMqMWU2LzgpLzE0NzApKTsKICAgICAgICBkb3VibGUgaW50ZXJ2YWxNcz0xMDAwLjAvcHBzOwogICAgICAgIGxvbmcgc2VudD0wLGVycm9ycz0wO2RvdWJsZSBuZXh0PTA7CiAgICAgICAgdmFyIHN3PVN0b3B3YXRjaC5TdGFydE5ldygpOwogICAgICAgIHdoaWxlKHN3LkVsYXBzZWQuVG90YWxTZWNvbmRzPHNlY29uZHMpewogICAgICAgICAgICB0cnl7c29jay5TZW5kVG8ocGF5bG9hZCxlcCk7c2VudCsrO30KICAgICAgICAgICAgY2F0Y2goU29ja2V0RXhjZXB0aW9uKXtlcnJvcnMrKztUaHJlYWQuU2xlZXAoMSk7Y29udGludWU7fQogICAgICAgICAgICBuZXh0Kz1pbnRlcnZhbE1zOwogICAgICAgICAgICBkb3VibGUgcmVtYWluPW5leHQtc3cuRWxhcHNlZC5Ub3RhbE1pbGxpc2Vjb25kczsKICAgICAgICAgICAgaWYocmVtYWluPjIpVGhyZWFkLlNsZWVwKChpbnQpKHJlbWFpbi0xKSk7CiAgICAgICAgICAgIHdoaWxlKHN3LkVsYXBzZWQuVG90YWxNaWxsaXNlY29uZHM8bmV4dClUaHJlYWQuU3BpbldhaXQoNTApOwogICAgICAgIH0KICAgICAgICBzdy5TdG9wKCk7c29jay5DbG9zZSgpOwogICAgICAgIGRvdWJsZSBhY3R1YWw9KHNlbnQqMTQ3MC4wKjgpLyhzdy5FbGFwc2VkLlRvdGFsU2Vjb25kcyoxZTYpOwogICAgICAgIHJldHVybiBzdHJpbmcuRm9ybWF0KCJ7MH0gcCAoezF9IGVyciksIHsyOkYyfXMsIHszOkYyfSBNYnBzIixzZW50LGVycm9ycyxzdy5FbGFwc2VkLlRvdGFsU2Vjb25kcyxhY3R1YWwpOwogICAgfQp9CiJAIC1SZWZlcmVuY2VkQXNzZW1ibGllcyBTeXN0ZW0uTmV0LlNvY2tldHMKV3JpdGUtSG9zdCAoW1VkcEZsb29kZXJdOjpSdW4oJHRhcmdldElwLCR0YXJnZXRQb3J0LCRkdXJhdGlvblNlYywkdGFyZ2V0TWJwcykp