Ly8geyBkZy1kbyBydW4gfQovLyB7IGRnLXhmYWlsLWlmICIiIHsgIiotKi1ocHV4MTEuMjMiIH0geyAiKiIgfSB7ICIiIH0gfSAqLwovLyB7IGRnLW9wdGlvbnMgIi1maW5wdXQtY2hhcnNldD1JU084ODU5LTEiIH0KLy8geyBkZy1yZXF1aXJlLWljb252ICJJU084ODU5LTEiIH0KLy8geyBkZy1yZXF1aXJlLW5hbWVkbG9jYWxlICIiIH0KCi8vIDIwMDEtMDgtMTUgQmVuamFtaW4gS29zbmlrICA8YmtvekByZWRoYXQuY29tPgoKLy8gQ29weXJpZ2h0IChDKSAyMDAxLCAyMDAyLCAyMDAzLCAyMDA1IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbgovLwovLyBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgR05VIElTTyBDKysgTGlicmFyeS4gIFRoaXMgbGlicmFyeSBpcyBmcmVlCi8vIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0IHVuZGVyIHRoZQovLyB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZQovLyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIsIG9yIChhdCB5b3VyIG9wdGlvbikKLy8gYW55IGxhdGVyIHZlcnNpb24uCgovLyBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLy8gYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLy8gTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQovLyBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgoKLy8gWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcKLy8gd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLiAgSWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZQovLyBTb2Z0d2FyZSBGb3VuZGF0aW9uLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BIDAyMTEwLTEzMDEsCi8vIFVTQS4KCi8vIDIyLjIuNC4xLjEgY29sbGF0ZSBtZW1iZXJzCgojaW5jbHVkZSA8bG9jYWxlPgojaW5jbHVkZSA8dGVzdHN1aXRlX2hvb2tzLmg+CgovLyBDaGVjayBHZXJtYW4gImRlX0RFIiBsb2NhbGUuCnZvaWQgdGVzdDAyKCkKewogIHVzaW5nIG5hbWVzcGFjZSBzdGQ7CiAgdHlwZWRlZiBzdGQ6OmNvbGxhdGU8d2NoYXJfdD46OnN0cmluZ190eXBlIHN0cmluZ190eXBlOwoKICBib29sIHRlc3QgX19hdHRyaWJ1dGVfXygodW51c2VkKSkgPSB0cnVlOwoKICAvLyBiYXNpYyBjb25zdHJ1Y3Rpb24KICBsb2NhbGUgbG9jX2MgPSBsb2NhbGU6OmNsYXNzaWMoKTsKICBsb2NhbGUgbG9jX3VzID0gbG9jYWxlKCJlbl9VUyIpOwogIGxvY2FsZSBsb2NfZnIgPSBsb2NhbGUoImZyX0ZSIik7CiAgbG9jYWxlIGxvY19kZSA9IGxvY2FsZSgiZGVfREUiKTsKICBWRVJJRlkoIGxvY19jICE9IGxvY19kZSApOwogIFZFUklGWSggbG9jX3VzICE9IGxvY19mciApOwogIFZFUklGWSggbG9jX3VzICE9IGxvY19kZSApOwogIFZFUklGWSggbG9jX2RlICE9IGxvY19mciApOwoKICAvLyBjYWNoZSB0aGUgY29sbGF0ZSBmYWNldHMKICBjb25zdCBjb2xsYXRlPHdjaGFyX3Q+JiBjb2xsX2RlID0gdXNlX2ZhY2V0PGNvbGxhdGU8d2NoYXJfdD4gPihsb2NfZGUpOyAKCiAgLy8gaW50IGNvbXBhcmUoY29uc3QgY2hhclQqLCBjb25zdCBjaGFyVCosIGNvbnN0IGNoYXJUKiwgY29uc3QgY2hhclQqKSBjb25zdAoKICBjb25zdCB3Y2hhcl90KiBzdHJsaXQxID0gTCJtb25rZXkgcGlja2VkIHRpa3VhbnlpbiBvb2xvbmciOwogIGNvbnN0IHdjaGFyX3QqIHN0cmxpdDMgPSBMIsR1Z2xlaW4gQXVnbWVudCI7IC8vICJDIiA9PSAiQXVnbWVudCDEdWdsZWluIgogIGNvbnN0IHdjaGFyX3QqIHN0cmxpdDQgPSBMIkJhc2UgYmHfIEJh3yBCYXN0IjsgLy8gIkMiID09ICJCYXNlIGJh3yBCYd8gQmFzdCIKCiAgaW50IGkxOwogIGludCBpMjsKICBpbnQgc2l6ZTEgPSBjaGFyX3RyYWl0czx3Y2hhcl90Pjo6bGVuZ3RoKHN0cmxpdDEpIC0gMTsKICBpbnQgc2l6ZTMgPSBjaGFyX3RyYWl0czx3Y2hhcl90Pjo6bGVuZ3RoKHN0cmxpdDMpIC0gMTsKICBpbnQgc2l6ZTQgPSBjaGFyX3RyYWl0czx3Y2hhcl90Pjo6bGVuZ3RoKHN0cmxpdDQpIC0gMTsKCiAgaTEgPSBjb2xsX2RlLmNvbXBhcmUoc3RybGl0Mywgc3RybGl0MyArIHNpemUzLCBzdHJsaXQzLCBzdHJsaXQzICsgNyk7CiAgVkVSSUZZICggaTEgPT0gMSApOwogIGkxID0gY29sbF9kZS5jb21wYXJlKHN0cmxpdDMsIHN0cmxpdDMgKyA3LCBzdHJsaXQzLCBzdHJsaXQzICsgc2l6ZTEpOwogIFZFUklGWSAoIGkxID09IC0xICk7CiAgaTEgPSBjb2xsX2RlLmNvbXBhcmUoc3RybGl0Mywgc3RybGl0MyArIDcsIHN0cmxpdDMsIHN0cmxpdDMgKyA3KTsKICBWRVJJRlkgKCBpMSA9PSAwICk7CgogIGkxID0gY29sbF9kZS5jb21wYXJlKHN0cmxpdDMsIHN0cmxpdDMgKyA2LCBzdHJsaXQzICsgOCwgc3RybGl0MyArIDE0KTsKICBWRVJJRlkgKCBpMSA9PSAtMSApOwoKICBpMiA9IGNvbGxfZGUuY29tcGFyZShzdHJsaXQ0LCBzdHJsaXQ0ICsgc2l6ZTQsIHN0cmxpdDQsIHN0cmxpdDQgKyAxMyk7CiAgVkVSSUZZICggaTIgPT0gMSApOwogIGkyID0gY29sbF9kZS5jb21wYXJlKHN0cmxpdDQsIHN0cmxpdDQgKyAxMywgc3RybGl0NCwgc3RybGl0NCArIHNpemU0KTsKICBWRVJJRlkgKCBpMiA9PSAtMSApOwogIGkyID0gY29sbF9kZS5jb21wYXJlKHN0cmxpdDQsIHN0cmxpdDQgKyBzaXplNCwgc3RybGl0NCwgc3RybGl0NCArIHNpemU0KTsKICBWRVJJRlkgKCBpMiA9PSAwICk7Cn0KCmludCBtYWluKCkKewogIHRlc3QwMigpOwogIHJldHVybiAwOwp9Cg==