Ly8gUmV2ZXJzZSBQb2xpc2ggTm90YXRpb24sIG1haW4uawovLyCpIDIwMDEsIE1pY2hhZWwgUGllZmVsIDxwaWVmZWxAaW5mb3JtYXRpay5odS1iZXJsaW4uZGU+CgolewojaW5jbHVkZSA8aW9zdHJlYW0+CiNpbmNsdWRlICJrLmgiCiNpbmNsdWRlICJyay5oIgojaW5jbHVkZSAidW5way5oIgojaW5jbHVkZSAiY3NnaW9rLmgiCgppbnQgeXlwYXJzZSgpOwpsaW5lIFRoZUxpbmU7CiV9CiV7IEtDX1RZUEVTX0hFQURFUgpleHRlcm4gbGluZSBUaGVMaW5lOwolfQoKLy8gWWVzLCBjcmVhdGUgWVlTVFlQRSB1bmlvbiBmb3IgdGhlIGJpc29uIHBhcnNlci4KJW9wdGlvbiB5eXN0eXBlCgovLyBUcml2aWFsIHByaW50ZXIgZnVuY3Rpb24gKGlnbm9yZXMgdmlldykKdm9pZApwcmludGVyKGNvbnN0IGNoYXIgKnMsIHV2aWV3IHYpCnsKCXN0ZDo6Y291dCA8PCBzOwp9CgppbnQKbWFpbihpbnQgYXJnYywgY2hhciAqKmFyZ3YpCnsKCUZJTEUqIGY7CgoJc3RkOjpjb3V0IDw8ICIgUlBOIFBhcnNlciBhbmQgcmVmb3JtYXR0ZXIgIiA8PCBzdGQ6OmVuZGw7CgkvLyBJZiBhIHNhdmVkIHRyZWUgaXMgZ2l2ZW4gb24gY29tbWFuZCBsaW5lLCByZWFkIGl0CglpZiAoYXJnYz09MikgewoJICAgIGY9Zm9wZW4oYXJndlsxXSwgInIiKTsKCSAgICBrYzo6Q1NHSU9yZWFkKGYsIFRoZUxpbmUpOwoJICAgIGZjbG9zZShmKTsKCX0gZWxzZSB5eXBhcnNlKCk7CgoJbGluZSBUaGVDYW5vbkxpbmU9VGhlTGluZS0+cmV3cml0ZShjYW5vbik7CglsaW5lIFRoZVNob3J0TGluZT1UaGVDYW5vbkxpbmUtPnJld3JpdGUoY2FsY3VsYXRlKTsKCglzdGQ6OmNvdXQgPDwgIlxuSW5maXggbm90YXRpb246XG4iOwoJVGhlQ2Fub25MaW5lLT51bnBhcnNlKHByaW50ZXIsIGluZml4KTsKCglzdGQ6OmNvdXQgPDwgIlxuXG5DYW5vbmljYWwgcG9zdGZpeCBub3RhdGlvbjpcbiI7CglUaGVDYW5vbkxpbmUtPnVucGFyc2UocHJpbnRlciwgcG9zdGZpeCk7CgoJc3RkOjpjb3V0IDw8ICJcblxuQ2FsY3VsYXRlZCBpbmZpeCBub3RhdGlvbjpcbiI7CglUaGVTaG9ydExpbmUtPnVucGFyc2UocHJpbnRlciwgaW5maXgpOwoKCXN0ZDo6Y291dCA8PCAiXG5cbkNhbGN1bGF0ZWQgY2Fub25pY2FsIHBvc3RmaXggbm90YXRpb246XG4iOwoJVGhlU2hvcnRMaW5lLT51bnBhcnNlKHByaW50ZXIsIHBvc3RmaXgpOwoKCXN0ZDo6Y291dCA8PCBzdGQ6OmVuZGw7Cn0KCg==