Lyogdmk6IHNldCBzdz00IHRzPTQ6ICovCi8qIGRtZXNnLmMgLS0gUHJpbnQgb3V0IHRoZSBjb250ZW50cyBvZiB0aGUga2VybmVsIHJpbmcgYnVmZmVyCiAqIENyZWF0ZWQ6IFNhdCBPY3QgIDkgMTY6MTk6NDcgMTk5MwogKiBSZXZpc2VkOiBUaHUgT2N0IDI4IDIxOjUyOjE3IDE5OTMgYnkgZmFpdGhAY3MudW5jLmVkdQogKiBDb3B5cmlnaHQgMTk5MyBUaGVvZG9yZSBUcydvICh0eXRzb0BhdGhlbmEubWl0LmVkdSkKICogVGhpcyBwcm9ncmFtIGNvbWVzIHdpdGggQUJTT0xVVEVMWSBOTyBXQVJSQU5UWS4KICogTW9kaWZpY2F0aW9ucyBieSBSaWNrIFNsYWRrZXkgKGpyc0B3b3JsZC5zdGQuY29tKQogKiBMYXJnZXIgYnVmZmVyc2l6ZSAzIEp1bmUgMTk5OCBieSBOaWNvbGFpIExhbmdmZWxkdCwgYmFzZWQgb24gYSBwYXRjaAogKiBieSBQZWV0ZXIgSm9vdC4gIFRoaXMgd2FzIGFsc28gc3VnZ2VzdGVkIGJ5IEpvaG4gSHVkc29uLgogKiAxOTk5LTAyLTIyIEFya2FkaXVzeiBNabZraWV3aWN6IDxtaXNpZWtAbWlzaWVrLmV1Lm9yZz4KICogLSBhZGRlZCBOYXRpdmUgTGFuZ3VhZ2UgU3VwcG9ydAogKgogKiBmcm9tIHV0aWwtbGludXggLS0gYWRhcHRlZCBmb3IgYnVzeWJveCBieSAKICogRXJpayBBbmRlcnNlbiA8YW5kZXJzZWVAZGViaWFuLm9yZz4uIEkgcmlwcGVkIG91dCBOYXRpdmUgTGFuZ3VhZ2UgCiAqIFN1cHBvcnQsIHJlcGxhY2VkIGdldG9wdCwgYWRkZWQgc29tZSBnb3RvcyBmb3IgcmVkdW5kYW50IHN0dWZmLgogKi8KCiNpbmNsdWRlICJidXN5Ym94LmgiCiNpbmNsdWRlIDxzdGRpby5oPgojaW5jbHVkZSA8c3RkbGliLmg+CgojaWYgX19HTlVfTElCUkFSWV9fIDwgNQoKI2lmbmRlZiBfX2FscGhhX18KIyBkZWZpbmUgX19OUl9rbG9nY3RsIF9fTlJfc3lzbG9nCnN0YXRpYyBpbmxpbmUgX3N5c2NhbGwzKGludCwga2xvZ2N0bCwgaW50LCB0eXBlLCBjaGFyICosIGIsIGludCwgbGVuKTsKI2Vsc2UJCQkJCQkJLyogX19hbHBoYV9fICovCiNkZWZpbmUga2xvZ2N0bCBzeXNsb2cKI2VuZGlmCgojZWxzZQojIGluY2x1ZGUgPHN5cy9rbG9nLmg+CiNlbmRpZgoKaW50IGRtZXNnX21haW4oaW50IGFyZ2MsIGNoYXIgKiphcmd2KQp7CgljaGFyICpidWY7CglpbnQgYzsKCWludCBidWZzaXplID0gODE5NjsKCWludCBpOwoJaW50IG47CglpbnQgbGV2ZWwgPSAwOwoJaW50IGxhc3RjOwoJaW50IGNtZCA9IDM7CgoJd2hpbGUgKChjID0gZ2V0b3B0KGFyZ2MsIGFyZ3YsICJjbjpzOiIpKSAhPSBFT0YpIHsKCQlzd2l0Y2ggKGMpIHsKCQljYXNlICdjJzoKCQkJY21kID0gNDsKCQkJYnJlYWs7CgkJY2FzZSAnbic6CgkJCWNtZCA9IDg7CgkJCWlmIChvcHRhcmcgPT0gTlVMTCkKCQkJCXVzYWdlKGRtZXNnX3VzYWdlKTsKCQkJbGV2ZWwgPSBhdG9pKG9wdGFyZyk7CgkJCWJyZWFrOwoJCWNhc2UgJ3MnOgoJCQlpZiAob3B0YXJnID09IE5VTEwpCgkJCQl1c2FnZShkbWVzZ191c2FnZSk7CgkJCWJ1ZnNpemUgPSBhdG9pKG9wdGFyZyk7CgkJCWJyZWFrOwoJCWRlZmF1bHQ6CgkJCXVzYWdlKGRtZXNnX3VzYWdlKTsKCQl9Cgl9CQkJCgoJaWYgKG9wdGluZCA8IGFyZ2MpIHsKCQlnb3RvIGVuZDsKCX0KCglpZiAoY21kID09IDgpIHsKCQluID0ga2xvZ2N0bChjbWQsIE5VTEwsIGxldmVsKTsKCQlpZiAobiA8IDApIHsKCQkJZ290byBrbG9nY3RsX2Vycm9yOwoJCX0KCQlyZXR1cm4gRVhJVF9TVUNDRVNTOwoJfQoKCWlmIChidWZzaXplIDwgNDA5NikKCQlidWZzaXplID0gNDA5NjsKCWJ1ZiA9IChjaGFyICopIHhtYWxsb2MoYnVmc2l6ZSk7CgluID0ga2xvZ2N0bChjbWQsIGJ1ZiwgYnVmc2l6ZSk7CglpZiAobiA8IDApIHsKCQlnb3RvIGtsb2djdGxfZXJyb3I7Cgl9CgoJbGFzdGMgPSAnXG4nOwoJZm9yIChpID0gMDsgaSA8IG47IGkrKykgewoJCWlmIChsYXN0YyA9PSAnXG4nICYmIGJ1ZltpXSA9PSAnPCcpIHsKCQkJaSsrOwoJCQl3aGlsZSAoYnVmW2ldID49ICcwJyAmJiBidWZbaV0gPD0gJzknKQoJCQkJaSsrOwoJCQlpZiAoYnVmW2ldID09ICc+JykKCQkJCWkrKzsKCQl9CgkJbGFzdGMgPSBidWZbaV07CgkJcHV0Y2hhcihsYXN0Yyk7Cgl9CglpZiAobGFzdGMgIT0gJ1xuJykKCQlwdXRjaGFyKCdcbicpOwoJcmV0dXJuIEVYSVRfU1VDQ0VTUzsKICBlbmQ6Cgl1c2FnZShkbWVzZ191c2FnZSk7CglyZXR1cm4gRVhJVF9GQUlMVVJFOwogIGtsb2djdGxfZXJyb3I6CglwZXJyb3IoImtsb2djdGwiKTsKCXJldHVybiBFWElUX0ZBSUxVUkU7Cn0K