Lyogdmk6IHNldCBzdz00IHRzPTQ6ICovCi8qIGRtZXNnLmMgLS0gUHJpbnQgb3V0IHRoZSBjb250ZW50cyBvZiB0aGUga2VybmVsIHJpbmcgYnVmZmVyCiAqIENyZWF0ZWQ6IFNhdCBPY3QgIDkgMTY6MTk6NDcgMTk5MwogKiBSZXZpc2VkOiBUaHUgT2N0IDI4IDIxOjUyOjE3IDE5OTMgYnkgZmFpdGhAY3MudW5jLmVkdQogKiBDb3B5cmlnaHQgMTk5MyBUaGVvZG9yZSBUcydvICh0eXRzb0BhdGhlbmEubWl0LmVkdSkKICogVGhpcyBwcm9ncmFtIGNvbWVzIHdpdGggQUJTT0xVVEVMWSBOTyBXQVJSQU5UWS4KICogTW9kaWZpY2F0aW9ucyBieSBSaWNrIFNsYWRrZXkgKGpyc0B3b3JsZC5zdGQuY29tKQogKiBMYXJnZXIgYnVmZmVyc2l6ZSAzIEp1bmUgMTk5OCBieSBOaWNvbGFpIExhbmdmZWxkdCwgYmFzZWQgb24gYSBwYXRjaAogKiBieSBQZWV0ZXIgSm9vdC4gIFRoaXMgd2FzIGFsc28gc3VnZ2VzdGVkIGJ5IEpvaG4gSHVkc29uLgogKiAxOTk5LTAyLTIyIEFya2FkaXVzeiBNabZraWV3aWN6IDxtaXNpZWtAbWlzaWVrLmV1Lm9yZz4KICogLSBhZGRlZCBOYXRpdmUgTGFuZ3VhZ2UgU3VwcG9ydAogKgogKiBmcm9tIHV0aWwtbGludXggLS0gYWRhcHRlZCBmb3IgYnVzeWJveCBieSAKICogRXJpayBBbmRlcnNlbiA8YW5kZXJzZWVAZGViaWFuLm9yZz4uIEkgcmlwcGVkIG91dCBOYXRpdmUgTGFuZ3VhZ2UgCiAqIFN1cHBvcnQsIHJlcGxhY2VkIGdldG9wdCwgYWRkZWQgc29tZSBnb3RvcyBmb3IgcmVkdW5kYW50IHN0dWZmLgogKi8KCiNpbmNsdWRlICJpbnRlcm5hbC5oIgojaW5jbHVkZSA8c3RkaW8uaD4KI2luY2x1ZGUgPHN0ZGxpYi5oPgoKI2lmIF9fR05VX0xJQlJBUllfXyA8IDUKCiNpZm5kZWYgX19hbHBoYV9fCiMgZGVmaW5lIF9fTlJfa2xvZ2N0bCBfX05SX3N5c2xvZwpzdGF0aWMgaW5saW5lIF9zeXNjYWxsMyhpbnQsIGtsb2djdGwsIGludCwgdHlwZSwgY2hhciAqLCBiLCBpbnQsIGxlbik7CiNlbHNlCQkJCQkJCS8qIF9fYWxwaGFfXyAqLwojZGVmaW5lIGtsb2djdGwgc3lzbG9nCiNlbmRpZgoKI2Vsc2UKIyBpbmNsdWRlIDxzeXMva2xvZy5oPgojZW5kaWYKCmludCBkbWVzZ19tYWluKGludCBhcmdjLCBjaGFyICoqYXJndikKewoJY2hhciAqYnVmOwoJaW50IGM7CglpbnQgYnVmc2l6ZSA9IDgxOTY7CglpbnQgaTsKCWludCBuOwoJaW50IGxldmVsID0gMDsKCWludCBsYXN0YzsKCWludCBjbWQgPSAzOwoKCXdoaWxlICgoYyA9IGdldG9wdChhcmdjLCBhcmd2LCAiY246czoiKSkgIT0gRU9GKSB7CgkJc3dpdGNoIChjKSB7CgkJY2FzZSAnYyc6CgkJCWNtZCA9IDQ7CgkJCWJyZWFrOwoJCWNhc2UgJ24nOgoJCQljbWQgPSA4OwoJCQlpZiAob3B0YXJnID09IE5VTEwpCgkJCQl1c2FnZShkbWVzZ191c2FnZSk7CgkJCWxldmVsID0gYXRvaShvcHRhcmcpOwoJCQlicmVhazsKCQljYXNlICdzJzoKCQkJaWYgKG9wdGFyZyA9PSBOVUxMKQoJCQkJdXNhZ2UoZG1lc2dfdXNhZ2UpOwoJCQlidWZzaXplID0gYXRvaShvcHRhcmcpOwoJCQlicmVhazsKCQlkZWZhdWx0OgoJCQl1c2FnZShkbWVzZ191c2FnZSk7CgkJfQoJfQkJCQoKCWlmIChvcHRpbmQgPCBhcmdjKSB7CgkJZ290byBlbmQ7Cgl9CgoJaWYgKGNtZCA9PSA4KSB7CgkJbiA9IGtsb2djdGwoY21kLCBOVUxMLCBsZXZlbCk7CgkJaWYgKG4gPCAwKSB7CgkJCWdvdG8ga2xvZ2N0bF9lcnJvcjsKCQl9CgkJZXhpdChUUlVFKTsKCX0KCglpZiAoYnVmc2l6ZSA8IDQwOTYpCgkJYnVmc2l6ZSA9IDQwOTY7CglidWYgPSAoY2hhciAqKSB4bWFsbG9jKGJ1ZnNpemUpOwoJbiA9IGtsb2djdGwoY21kLCBidWYsIGJ1ZnNpemUpOwoJaWYgKG4gPCAwKSB7CgkJZ290byBrbG9nY3RsX2Vycm9yOwoJfQoKCWxhc3RjID0gJ1xuJzsKCWZvciAoaSA9IDA7IGkgPCBuOyBpKyspIHsKCQlpZiAoKGkgPT0gMCB8fCBidWZbaSAtIDFdID09ICdcbicpICYmIGJ1ZltpXSA9PSAnPCcpIHsKCQkJaSsrOwoJCQl3aGlsZSAoYnVmW2ldID49ICcwJyAmJiBidWZbaV0gPD0gJzknKQoJCQkJaSsrOwoJCQlpZiAoYnVmW2ldID09ICc+JykKCQkJCWkrKzsKCQl9CgkJbGFzdGMgPSBidWZbaV07CgkJcHV0Y2hhcihsYXN0Yyk7Cgl9CglpZiAobGFzdGMgIT0gJ1xuJykKCQlwdXRjaGFyKCdcbicpOwoJZXhpdChUUlVFKTsKICBlbmQ6Cgl1c2FnZShkbWVzZ191c2FnZSk7CglleGl0KEZBTFNFKTsKICBrbG9nY3RsX2Vycm9yOgoJcGVycm9yKCJrbG9nY3RsIik7CglyZXR1cm4oRkFMU0UpOwp9Cg==