Ly8gIENvcHlyaWdodCAoYykgMjAwMS0yMDEwIEhhcnRtdXQgS2Fpc2VyCi8vIAovLyAgRGlzdHJpYnV0ZWQgdW5kZXIgdGhlIEJvb3N0IFNvZnR3YXJlIExpY2Vuc2UsIFZlcnNpb24gMS4wLiAoU2VlIGFjY29tcGFueWluZyAKLy8gIGZpbGUgTElDRU5TRV8xXzAudHh0IG9yIGNvcHkgYXQgaHR0cDovL3d3dy5ib29zdC5vcmcvTElDRU5TRV8xXzAudHh0KQoKLy8gdGhpcyBmaWxlIGludGVudGlvbmFsbHkgY29udGFpbnMgbm9uLWFzY2lpIGNoYXJhY3RlcnMKLy8gYm9vc3RpbnNwZWN0Om5vYXNjaWkKCiNpbmNsdWRlIDxib29zdC9jb25maWcvd2FybmluZ19kaXNhYmxlLmhwcD4KI2luY2x1ZGUgPGJvb3N0L2RldGFpbC9saWdodHdlaWdodF90ZXN0LmhwcD4KI2luY2x1ZGUgPGJvb3N0L2RldGFpbC93b3JrYXJvdW5kLmhwcD4KCiNpbmNsdWRlIDxib29zdC9zcGlyaXQvaW5jbHVkZS9rYXJtYV9jaGFyLmhwcD4KI2luY2x1ZGUgPGJvb3N0L3NwaXJpdC9pbmNsdWRlL2thcm1hX3N0cmluZy5ocHA+CiNpbmNsdWRlIDxib29zdC9zcGlyaXQvaW5jbHVkZS9rYXJtYV9nZW5lcmF0ZS5ocHA+CiNpbmNsdWRlIDxib29zdC9zcGlyaXQvaW5jbHVkZS9rYXJtYV9kaXJlY3RpdmUuaHBwPgoKI2luY2x1ZGUgInRlc3QuaHBwIgoKdXNpbmcgbmFtZXNwYWNlIHNwaXJpdF90ZXN0OwoKLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLwppbnQKbWFpbigpCnsKICAgIHVzaW5nIG5hbWVzcGFjZSBib29zdDo6c3Bpcml0OwoKICAgIHsKICAgICAgICB1c2luZyBuYW1lc3BhY2UgYm9vc3Q6OnNwaXJpdDo6YXNjaWk7CgogICAgICAgIEJPT1NUX1RFU1QodGVzdCgieCIsIGxvd2VyWydYJ10pKTsKICAgICAgICBCT09TVF9URVNUKHRlc3QoIngiLCBsb3dlclsneCddKSk7CgogICAgICAgIEJPT1NUX1RFU1QodGVzdCgieCIsIGxvd2VyW2NoYXJfXSwgJ1gnKSk7CiAgICAgICAgQk9PU1RfVEVTVCh0ZXN0KCJ4IiwgbG93ZXJbY2hhcl9dLCAneCcpKTsKICAgICAgICBCT09TVF9URVNUKHRlc3QoIngiLCBsb3dlcltjaGFyXygnWCcpXSkpOwogICAgICAgIEJPT1NUX1RFU1QodGVzdCgieCIsIGxvd2VyW2NoYXJfKCd4JyldKSk7CgogICAgICAgIEJPT1NUX1RFU1QodGVzdCgiICIsIGxvd2VyW3NwYWNlXSkpOwogICAgICAgIEJPT1NUX1RFU1QodGVzdCgiXHQiLCBsb3dlcltzcGFjZV0sICdcdCcpKTsKCiAgICAgICAgQk9PU1RfVEVTVCh0ZXN0KCJ4IiwgbG93ZXJbbG93ZXJbJ1gnXV0pKTsKICAgICAgICBCT09TVF9URVNUKHRlc3QoIngiLCBsb3dlcltsb3dlclsneCddXSkpOwoKICAgICAgICBCT09TVF9URVNUKHRlc3QoIngiLCBsb3dlcltsb3dlcltjaGFyX11dLCAnWCcpKTsKICAgICAgICBCT09TVF9URVNUKHRlc3QoIngiLCBsb3dlcltsb3dlcltjaGFyX11dLCAneCcpKTsKICAgICAgICBCT09TVF9URVNUKHRlc3QoIngiLCBsb3dlcltsb3dlcltjaGFyXygnWCcpXV0pKTsKICAgICAgICBCT09TVF9URVNUKHRlc3QoIngiLCBsb3dlcltsb3dlcltjaGFyXygneCcpXV0pKTsKCiAgICAgICAgQk9PU1RfVEVTVCh0ZXN0KCIgIiwgbG93ZXJbbG93ZXJbc3BhY2VdXSkpOwogICAgICAgIEJPT1NUX1RFU1QodGVzdCgiXHQiLCBsb3dlcltsb3dlcltzcGFjZV1dLCAnXHQnKSk7CgogICAgICAgIEJPT1NUX1RFU1QodGVzdCgiWCIsIHVwcGVyW2xvd2VyWydYJ11dKSk7CiAgICAgICAgQk9PU1RfVEVTVCh0ZXN0KCJYIiwgdXBwZXJbbG93ZXJbJ3gnXV0pKTsKCiAgICAgICAgQk9PU1RfVEVTVCh0ZXN0KCJYIiwgdXBwZXJbbG93ZXJbY2hhcl9dXSwgJ1gnKSk7CiAgICAgICAgQk9PU1RfVEVTVCh0ZXN0KCJYIiwgdXBwZXJbbG93ZXJbY2hhcl9dXSwgJ3gnKSk7CiAgICAgICAgQk9PU1RfVEVTVCh0ZXN0KCJYIiwgdXBwZXJbbG93ZXJbY2hhcl8oJ1gnKV1dKSk7CiAgICAgICAgQk9PU1RfVEVTVCh0ZXN0KCJYIiwgdXBwZXJbbG93ZXJbY2hhcl8oJ3gnKV1dKSk7CgogICAgICAgIEJPT1NUX1RFU1QodGVzdCgiICIsIHVwcGVyW2xvd2VyW3NwYWNlXV0pKTsKICAgICAgICBCT09TVF9URVNUKHRlc3QoIlx0IiwgdXBwZXJbbG93ZXJbc3BhY2VdXSwgJ1x0JykpOwoKICAgICAgICBCT09TVF9URVNUKHRlc3QoIlgiLCB1cHBlclsnWCddKSk7CiAgICAgICAgQk9PU1RfVEVTVCh0ZXN0KCJYIiwgdXBwZXJbJ3gnXSkpOwoKICAgICAgICBCT09TVF9URVNUKHRlc3QoIlgiLCB1cHBlcltjaGFyX10sICdYJykpOwogICAgICAgIEJPT1NUX1RFU1QodGVzdCgiWCIsIHVwcGVyW2NoYXJfXSwgJ3gnKSk7CiAgICAgICAgQk9PU1RfVEVTVCh0ZXN0KCJYIiwgdXBwZXJbY2hhcl8oJ1gnKV0pKTsKICAgICAgICBCT09TVF9URVNUKHRlc3QoIlgiLCB1cHBlcltjaGFyXygneCcpXSkpOwoKICAgICAgICBCT09TVF9URVNUKHRlc3QoIiAiLCB1cHBlcltzcGFjZV0pKTsKICAgICAgICBCT09TVF9URVNUKHRlc3QoIlx0IiwgdXBwZXJbc3BhY2VdLCAnXHQnKSk7CgogICAgICAgIEJPT1NUX1RFU1QodGVzdCgieCIsIGxvd2VyW3VwcGVyWydYJ11dKSk7CiAgICAgICAgQk9PU1RfVEVTVCh0ZXN0KCJ4IiwgbG93ZXJbdXBwZXJbJ3gnXV0pKTsKCiAgICAgICAgQk9PU1RfVEVTVCh0ZXN0KCJ4IiwgbG93ZXJbdXBwZXJbY2hhcl9dXSwgJ1gnKSk7CiAgICAgICAgQk9PU1RfVEVTVCh0ZXN0KCJ4IiwgbG93ZXJbdXBwZXJbY2hhcl9dXSwgJ3gnKSk7CiAgICAgICAgQk9PU1RfVEVTVCh0ZXN0KCJ4IiwgbG93ZXJbdXBwZXJbY2hhcl8oJ1gnKV1dKSk7CiAgICAgICAgQk9PU1RfVEVTVCh0ZXN0KCJ4IiwgbG93ZXJbdXBwZXJbY2hhcl8oJ3gnKV1dKSk7CgogICAgICAgIEJPT1NUX1RFU1QodGVzdCgiICIsIGxvd2VyW3VwcGVyW3NwYWNlXV0pKTsKICAgICAgICBCT09TVF9URVNUKHRlc3QoIlx0IiwgbG93ZXJbdXBwZXJbc3BhY2VdXSwgJ1x0JykpOwoKICAgICAgICBCT09TVF9URVNUKHRlc3QoIlgiLCB1cHBlclt1cHBlclsnWCddXSkpOwogICAgICAgIEJPT1NUX1RFU1QodGVzdCgiWCIsIHVwcGVyW3VwcGVyWyd4J11dKSk7CgogICAgICAgIEJPT1NUX1RFU1QodGVzdCgiWCIsIHVwcGVyW3VwcGVyW2NoYXJfXV0sICdYJykpOwogICAgICAgIEJPT1NUX1RFU1QodGVzdCgiWCIsIHVwcGVyW3VwcGVyW2NoYXJfXV0sICd4JykpOwogICAgICAgIEJPT1NUX1RFU1QodGVzdCgiWCIsIHVwcGVyW3VwcGVyW2NoYXJfKCdYJyldXSkpOwogICAgICAgIEJPT1NUX1RFU1QodGVzdCgiWCIsIHVwcGVyW3VwcGVyW2NoYXJfKCd4JyldXSkpOwoKICAgICAgICBCT09TVF9URVNUKHRlc3QoIiAiLCB1cHBlclt1cHBlcltzcGFjZV1dKSk7CiAgICAgICAgQk9PU1RfVEVTVCh0ZXN0KCJcdCIsIHVwcGVyW3VwcGVyW3NwYWNlXV0sICdcdCcpKTsKICAgIH0KCiAgICB7CiAgICAgICAgdXNpbmcgbmFtZXNwYWNlIGJvb3N0OjpzcGlyaXQ6OnN0YW5kYXJkX3dpZGU7CgogICAgICAgIEJPT1NUX1RFU1QodGVzdChMIngiLCBsb3dlcltMJ1gnXSkpOwogICAgICAgIEJPT1NUX1RFU1QodGVzdChMIngiLCBsb3dlcltMJ3gnXSkpOwoKICAgICAgICBCT09TVF9URVNUKHRlc3QoTCJ4IiwgbG93ZXJbY2hhcl9dLCBMJ1gnKSk7CiAgICAgICAgQk9PU1RfVEVTVCh0ZXN0KEwieCIsIGxvd2VyW2NoYXJfXSwgTCd4JykpOwogICAgICAgIEJPT1NUX1RFU1QodGVzdChMIngiLCBsb3dlcltjaGFyXyhMJ1gnKV0pKTsKICAgICAgICBCT09TVF9URVNUKHRlc3QoTCJ4IiwgbG93ZXJbY2hhcl8oTCd4JyldKSk7CgogICAgICAgIEJPT1NUX1RFU1QodGVzdChMIiAiLCBsb3dlcltzcGFjZV0pKTsKICAgICAgICBCT09TVF9URVNUKHRlc3QoTCJcdCIsIGxvd2VyW3NwYWNlXSwgTCdcdCcpKTsKCiAgICAgICAgQk9PU1RfVEVTVCh0ZXN0KEwieCIsIGxvd2VyW2xvd2VyW0wnWCddXSkpOwogICAgICAgIEJPT1NUX1RFU1QodGVzdChMIngiLCBsb3dlcltsb3dlcltMJ3gnXV0pKTsKCiAgICAgICAgQk9PU1RfVEVTVCh0ZXN0KEwieCIsIGxvd2VyW2xvd2VyW2NoYXJfXV0sIEwnWCcpKTsKICAgICAgICBCT09TVF9URVNUKHRlc3QoTCJ4IiwgbG93ZXJbbG93ZXJbY2hhcl9dXSwgTCd4JykpOwogICAgICAgIEJPT1NUX1RFU1QodGVzdChMIngiLCBsb3dlcltsb3dlcltjaGFyXyhMJ1gnKV1dKSk7CiAgICAgICAgQk9PU1RfVEVTVCh0ZXN0KEwieCIsIGxvd2VyW2xvd2VyW2NoYXJfKEwneCcpXV0pKTsKCiAgICAgICAgQk9PU1RfVEVTVCh0ZXN0KEwiICIsIGxvd2VyW2xvd2VyW3NwYWNlXV0pKTsKICAgICAgICBCT09TVF9URVNUKHRlc3QoTCJcdCIsIGxvd2VyW2xvd2VyW3NwYWNlXV0sIEwnXHQnKSk7CgogICAgICAgIEJPT1NUX1RFU1QodGVzdChMIlgiLCB1cHBlcltsb3dlcltMJ1gnXV0pKTsKICAgICAgICBCT09TVF9URVNUKHRlc3QoTCJYIiwgdXBwZXJbbG93ZXJbTCd4J11dKSk7CgogICAgICAgIEJPT1NUX1RFU1QodGVzdChMIlgiLCB1cHBlcltsb3dlcltjaGFyX11dLCBMJ1gnKSk7CiAgICAgICAgQk9PU1RfVEVTVCh0ZXN0KEwiWCIsIHVwcGVyW2xvd2VyW2NoYXJfXV0sIEwneCcpKTsKICAgICAgICBCT09TVF9URVNUKHRlc3QoTCJYIiwgdXBwZXJbbG93ZXJbY2hhcl8oTCdYJyldXSkpOwogICAgICAgIEJPT1NUX1RFU1QodGVzdChMIlgiLCB1cHBlcltsb3dlcltjaGFyXyhMJ3gnKV1dKSk7CgogICAgICAgIEJPT1NUX1RFU1QodGVzdChMIiAiLCB1cHBlcltsb3dlcltzcGFjZV1dKSk7CiAgICAgICAgQk9PU1RfVEVTVCh0ZXN0KEwiXHQiLCB1cHBlcltsb3dlcltzcGFjZV1dLCBMJ1x0JykpOwoKICAgICAgICBCT09TVF9URVNUKHRlc3QoTCJYIiwgdXBwZXJbTCdYJ10pKTsKICAgICAgICBCT09TVF9URVNUKHRlc3QoTCJYIiwgdXBwZXJbTCd4J10pKTsKCiAgICAgICAgQk9PU1RfVEVTVCh0ZXN0KEwiWCIsIHVwcGVyW2NoYXJfXSwgTCdYJykpOwogICAgICAgIEJPT1NUX1RFU1QodGVzdChMIlgiLCB1cHBlcltjaGFyX10sIEwneCcpKTsKICAgICAgICBCT09TVF9URVNUKHRlc3QoTCJYIiwgdXBwZXJbY2hhcl8oTCdYJyldKSk7CiAgICAgICAgQk9PU1RfVEVTVCh0ZXN0KEwiWCIsIHVwcGVyW2NoYXJfKEwneCcpXSkpOwoKICAgICAgICBCT09TVF9URVNUKHRlc3QoTCIgIiwgdXBwZXJbc3BhY2VdKSk7CiAgICAgICAgQk9PU1RfVEVTVCh0ZXN0KEwiXHQiLCB1cHBlcltzcGFjZV0sIEwnXHQnKSk7CgogICAgICAgIEJPT1NUX1RFU1QodGVzdChMIngiLCBsb3dlclt1cHBlcltMJ1gnXV0pKTsKICAgICAgICBCT09TVF9URVNUKHRlc3QoTCJ4IiwgbG93ZXJbdXBwZXJbTCd4J11dKSk7CgogICAgICAgIEJPT1NUX1RFU1QodGVzdChMIngiLCBsb3dlclt1cHBlcltjaGFyX11dLCBMJ1gnKSk7CiAgICAgICAgQk9PU1RfVEVTVCh0ZXN0KEwieCIsIGxvd2VyW3VwcGVyW2NoYXJfXV0sIEwneCcpKTsKICAgICAgICBCT09TVF9URVNUKHRlc3QoTCJ4IiwgbG93ZXJbdXBwZXJbY2hhcl8oTCdYJyldXSkpOwogICAgICAgIEJPT1NUX1RFU1QodGVzdChMIngiLCBsb3dlclt1cHBlcltjaGFyXyhMJ3gnKV1dKSk7CgogICAgICAgIEJPT1NUX1RFU1QodGVzdChMIiAiLCBsb3dlclt1cHBlcltzcGFjZV1dKSk7CiAgICAgICAgQk9PU1RfVEVTVCh0ZXN0KEwiXHQiLCBsb3dlclt1cHBlcltzcGFjZV1dLCBMJ1x0JykpOwoKICAgICAgICBCT09TVF9URVNUKHRlc3QoTCJYIiwgdXBwZXJbdXBwZXJbTCdYJ11dKSk7CiAgICAgICAgQk9PU1RfVEVTVCh0ZXN0KEwiWCIsIHVwcGVyW3VwcGVyW0wneCddXSkpOwoKICAgICAgICBCT09TVF9URVNUKHRlc3QoTCJYIiwgdXBwZXJbdXBwZXJbY2hhcl9dXSwgTCdYJykpOwogICAgICAgIEJPT1NUX1RFU1QodGVzdChMIlgiLCB1cHBlclt1cHBlcltjaGFyX11dLCBMJ3gnKSk7CiAgICAgICAgQk9PU1RfVEVTVCh0ZXN0KEwiWCIsIHVwcGVyW3VwcGVyW2NoYXJfKEwnWCcpXV0pKTsKICAgICAgICBCT09TVF9URVNUKHRlc3QoTCJYIiwgdXBwZXJbdXBwZXJbY2hhcl8oTCd4JyldXSkpOwoKICAgICAgICBCT09TVF9URVNUKHRlc3QoTCIgIiwgdXBwZXJbdXBwZXJbc3BhY2VdXSkpOwogICAgICAgIEJPT1NUX1RFU1QodGVzdChMIlx0IiwgdXBwZXJbdXBwZXJbc3BhY2VdXSwgTCdcdCcpKTsKICAgIH0KCi8vIG5lZWRlZCBmb3IgVkM3LjEgb25seQojaWYgQk9PU1RfV09SS0FST1VORChCT09TVF9NU1ZDLCBCT09TVF9URVNURURfQVQoMTMxMCkpCiNwcmFnbWEgc2V0bG9jYWxlKCJnZXJtYW4iKQojZW5kaWYKICAgIHsKICAgICAgICB1c2luZyBuYW1lc3BhY2UgYm9vc3Q6OnNwaXJpdDo6aXNvODg1OV8xOwoKICAgICAgICBCT09TVF9URVNUKHRlc3QoIuQiLCBsb3dlclsnxCddKSk7CiAgICAgICAgQk9PU1RfVEVTVCh0ZXN0KCLkIiwgbG93ZXJbJ+QnXSkpOwoKICAgICAgICBCT09TVF9URVNUKHRlc3QoIsQiLCB1cHBlclsnxCddKSk7CiAgICAgICAgQk9PU1RfVEVTVCh0ZXN0KCLEIiwgdXBwZXJbJ+QnXSkpOwogICAgfQojaWYgQk9PU1RfV09SS0FST1VORChCT09TVF9NU1ZDLCBCT09TVF9URVNURURfQVQoMTMxMCkpCiNwcmFnbWEgc2V0bG9jYWxlKCIiKQojZW5kaWYKCiAgICB7CiAgICAgICAgdXNpbmcgbmFtZXNwYWNlIGJvb3N0OjpzcGlyaXQ6OmFzY2lpOwoKICAgICAgICBCT09TVF9URVNUKHRlc3QoImExLSAiLCBsb3dlclsiYTEtICJdKSk7CiAgICAgICAgQk9PU1RfVEVTVCh0ZXN0KCJhMS0gIiwgbG93ZXJbImExLSAiXSkpOwogICAgICAgIEJPT1NUX1RFU1QodGVzdCgiYTEtICIsIGxvd2VyWyJhMS0gIl0pKTsKICAgICAgICBCT09TVF9URVNUKHRlc3QoImExLSAiLCBsb3dlclsiQTEtICJdKSk7CgogICAgICAgIEJPT1NUX1RFU1QodGVzdCgiYTEtICIsIGxvd2VyW3N0cmluZ10sICJhMS0gIikpOwogICAgICAgIEJPT1NUX1RFU1QodGVzdCgiYTEtICIsIGxvd2VyW3N0cmluZ10sICJBMS0gIikpOwogICAgICAgIEJPT1NUX1RFU1QodGVzdCgiYTEtICIsIGxvd2VyW2xpdCgiYTEtICIpXSkpOwogICAgICAgIEJPT1NUX1RFU1QodGVzdCgiYTEtICIsIGxvd2VyW2xpdCgiQTEtICIpXSkpOwogICAgICAgIEJPT1NUX1RFU1QodGVzdCgiYTEtICIsIGxvd2VyW3N0cmluZygiYTEtICIpXSkpOwogICAgICAgIEJPT1NUX1RFU1QodGVzdCgiYTEtICIsIGxvd2VyW3N0cmluZygiQTEtICIpXSkpOwoKICAgICAgICBCT09TVF9URVNUKHRlc3QoImExLSAiLCBsb3dlcltsb3dlclsiYTEtICJdXSkpOwogICAgICAgIEJPT1NUX1RFU1QodGVzdCgiYTEtICIsIGxvd2VyW2xvd2VyWyJhMS0gIl1dKSk7CiAgICAgICAgQk9PU1RfVEVTVCh0ZXN0KCJhMS0gIiwgbG93ZXJbbG93ZXJbImExLSAiXV0pKTsKICAgICAgICBCT09TVF9URVNUKHRlc3QoImExLSAiLCBsb3dlcltsb3dlclsiQTEtICJdXSkpOwoKICAgICAgICBCT09TVF9URVNUKHRlc3QoImExLSAiLCBsb3dlcltsb3dlcltzdHJpbmddXSwgImExLSAiKSk7CiAgICAgICAgQk9PU1RfVEVTVCh0ZXN0KCJhMS0gIiwgbG93ZXJbbG93ZXJbc3RyaW5nXV0sICJBMS0gIikpOwogICAgICAgIEJPT1NUX1RFU1QodGVzdCgiYTEtICIsIGxvd2VyW2xvd2VyW2xpdCgiYTEtICIpXV0pKTsKICAgICAgICBCT09TVF9URVNUKHRlc3QoImExLSAiLCBsb3dlcltsb3dlcltsaXQoIkExLSAiKV1dKSk7CiAgICAgICAgQk9PU1RfVEVTVCh0ZXN0KCJhMS0gIiwgbG93ZXJbbG93ZXJbc3RyaW5nKCJhMS0gIildXSkpOwogICAgICAgIEJPT1NUX1RFU1QodGVzdCgiYTEtICIsIGxvd2VyW2xvd2VyW3N0cmluZygiQTEtICIpXV0pKTsKCiAgICAgICAgQk9PU1RfVEVTVCh0ZXN0KCJBMS0gIiwgdXBwZXJbbG93ZXJbImExLSAiXV0pKTsKICAgICAgICBCT09TVF9URVNUKHRlc3QoIkExLSAiLCB1cHBlcltsb3dlclsiYTEtICJdXSkpOwogICAgICAgIEJPT1NUX1RFU1QodGVzdCgiQTEtICIsIHVwcGVyW2xvd2VyWyJhMS0gIl1dKSk7CiAgICAgICAgQk9PU1RfVEVTVCh0ZXN0KCJBMS0gIiwgdXBwZXJbbG93ZXJbIkExLSAiXV0pKTsKCiAgICAgICAgQk9PU1RfVEVTVCh0ZXN0KCJBMS0gIiwgdXBwZXJbbG93ZXJbc3RyaW5nXV0sICJhMS0gIikpOwogICAgICAgIEJPT1NUX1RFU1QodGVzdCgiQTEtICIsIHVwcGVyW2xvd2VyW3N0cmluZ11dLCAiQTEtICIpKTsKICAgICAgICBCT09TVF9URVNUKHRlc3QoIkExLSAiLCB1cHBlcltsb3dlcltsaXQoImExLSAiKV1dKSk7CiAgICAgICAgQk9PU1RfVEVTVCh0ZXN0KCJBMS0gIiwgdXBwZXJbbG93ZXJbbGl0KCJBMS0gIildXSkpOwogICAgICAgIEJPT1NUX1RFU1QodGVzdCgiQTEtICIsIHVwcGVyW2xvd2VyW3N0cmluZygiYTEtICIpXV0pKTsKICAgICAgICBCT09TVF9URVNUKHRlc3QoIkExLSAiLCB1cHBlcltsb3dlcltzdHJpbmcoIkExLSAiKV1dKSk7CgogICAgICAgIEJPT1NUX1RFU1QodGVzdCgiQTEtICIsIHVwcGVyWyJhMS0gIl0pKTsKICAgICAgICBCT09TVF9URVNUKHRlc3QoIkExLSAiLCB1cHBlclsiYTEtICJdKSk7CiAgICAgICAgQk9PU1RfVEVTVCh0ZXN0KCJBMS0gIiwgdXBwZXJbImExLSAiXSkpOwogICAgICAgIEJPT1NUX1RFU1QodGVzdCgiQTEtICIsIHVwcGVyWyJBMS0gIl0pKTsKCiAgICAgICAgQk9PU1RfVEVTVCh0ZXN0KCJBMS0gIiwgdXBwZXJbc3RyaW5nXSwgImExLSAiKSk7CiAgICAgICAgQk9PU1RfVEVTVCh0ZXN0KCJBMS0gIiwgdXBwZXJbc3RyaW5nXSwgIkExLSAiKSk7CiAgICAgICAgQk9PU1RfVEVTVCh0ZXN0KCJBMS0gIiwgdXBwZXJbbGl0KCJhMS0gIildKSk7CiAgICAgICAgQk9PU1RfVEVTVCh0ZXN0KCJBMS0gIiwgdXBwZXJbbGl0KCJBMS0gIildKSk7CgogICAgICAgIEJPT1NUX1RFU1QodGVzdCgiYTEtICIsIGxvd2VyW3VwcGVyWyJhMS0gIl1dKSk7CiAgICAgICAgQk9PU1RfVEVTVCh0ZXN0KCJhMS0gIiwgbG93ZXJbdXBwZXJbImExLSAiXV0pKTsKICAgICAgICBCT09TVF9URVNUKHRlc3QoImExLSAiLCBsb3dlclt1cHBlclsiYTEtICJdXSkpOwogICAgICAgIEJPT1NUX1RFU1QodGVzdCgiYTEtICIsIGxvd2VyW3VwcGVyWyJBMS0gIl1dKSk7CgogICAgICAgIEJPT1NUX1RFU1QodGVzdCgiYTEtICIsIGxvd2VyW3VwcGVyW3N0cmluZ11dLCAiYTEtICIpKTsKICAgICAgICBCT09TVF9URVNUKHRlc3QoImExLSAiLCBsb3dlclt1cHBlcltzdHJpbmddXSwgIkExLSAiKSk7CiAgICAgICAgQk9PU1RfVEVTVCh0ZXN0KCJhMS0gIiwgbG93ZXJbdXBwZXJbbGl0KCJhMS0gIildXSkpOwogICAgICAgIEJPT1NUX1RFU1QodGVzdCgiYTEtICIsIGxvd2VyW3VwcGVyW2xpdCgiQTEtICIpXV0pKTsKICAgICAgICBCT09TVF9URVNUKHRlc3QoImExLSAiLCBsb3dlclt1cHBlcltzdHJpbmcoImExLSAiKV1dKSk7CiAgICAgICAgQk9PU1RfVEVTVCh0ZXN0KCJhMS0gIiwgbG93ZXJbdXBwZXJbc3RyaW5nKCJBMS0gIildXSkpOwoKICAgICAgICBCT09TVF9URVNUKHRlc3QoIkExLSAiLCB1cHBlclt1cHBlclsiYTEtICJdXSkpOwogICAgICAgIEJPT1NUX1RFU1QodGVzdCgiQTEtICIsIHVwcGVyW3VwcGVyWyJhMS0gIl1dKSk7CiAgICAgICAgQk9PU1RfVEVTVCh0ZXN0KCJBMS0gIiwgdXBwZXJbdXBwZXJbImExLSAiXV0pKTsKICAgICAgICBCT09TVF9URVNUKHRlc3QoIkExLSAiLCB1cHBlclt1cHBlclsiQTEtICJdXSkpOwoKICAgICAgICBCT09TVF9URVNUKHRlc3QoIkExLSAiLCB1cHBlclt1cHBlcltzdHJpbmddXSwgImExLSAiKSk7CiAgICAgICAgQk9PU1RfVEVTVCh0ZXN0KCJBMS0gIiwgdXBwZXJbdXBwZXJbc3RyaW5nXV0sICJBMS0gIikpOwogICAgICAgIEJPT1NUX1RFU1QodGVzdCgiQTEtICIsIHVwcGVyW3VwcGVyW2xpdCgiYTEtICIpXV0pKTsKICAgICAgICBCT09TVF9URVNUKHRlc3QoIkExLSAiLCB1cHBlclt1cHBlcltsaXQoIkExLSAiKV1dKSk7CiAgICAgICAgQk9PU1RfVEVTVCh0ZXN0KCJBMS0gIiwgdXBwZXJbdXBwZXJbc3RyaW5nKCJhMS0gIildXSkpOwogICAgICAgIEJPT1NUX1RFU1QodGVzdCgiQTEtICIsIHVwcGVyW3VwcGVyW3N0cmluZygiQTEtICIpXV0pKTsKICAgIH0KCi8vIG5lZWRlZCBmb3IgVkM3LjEgb25seQojaWYgQk9PU1RfV09SS0FST1VORChCT09TVF9NU1ZDLCBCT09TVF9URVNURURfQVQoMTMxMCkpCiNwcmFnbWEgc2V0bG9jYWxlKCJnZXJtYW4iKQojZW5kaWYKICAgIHsKICAgICAgICB1c2luZyBuYW1lc3BhY2UgYm9vc3Q6OnNwaXJpdDo6aXNvODg1OV8xOwoKICAgICAgICBCT09TVF9URVNUKHRlc3QoIuTkIiwgbG93ZXJbIsTkIl0pKTsKICAgICAgICBCT09TVF9URVNUKHRlc3QoIuTkIiwgbG93ZXJbIsTkIl0pKTsKCiAgICAgICAgQk9PU1RfVEVTVCh0ZXN0KCLExCIsIHVwcGVyWyLE5CJdKSk7CiAgICAgICAgQk9PU1RfVEVTVCh0ZXN0KCLExCIsIHVwcGVyWyLE5CJdKSk7CiAgICB9CiNpZiBCT09TVF9XT1JLQVJPVU5EKEJPT1NUX01TVkMsIEJPT1NUX1RFU1RFRF9BVCgxMzEwKSkKI3ByYWdtYSBzZXRsb2NhbGUoIiIpCiNlbmRpZgoKICAgIHsKICAgICAgICB1c2luZyBuYW1lc3BhY2UgYm9vc3Q6OnNwaXJpdDo6YXNjaWk7CiAgICAgICAgdXNpbmcgYm9vc3Q6OnBob2VuaXg6OnZhbDsKCiAgICAgICAgQk9PU1RfVEVTVCh0ZXN0KCJ4IiwgbG93ZXJbdmFsKCdYJyldKSk7CiAgICAgICAgQk9PU1RfVEVTVCh0ZXN0KCJ4IiwgbG93ZXJbdmFsKCd4JyldKSk7CiAgICB9CgogICAgcmV0dXJuIGJvb3N0OjpyZXBvcnRfZXJyb3JzKCk7Cn0K