ZGlmZiAtLWdpdCBhL01BS0VBTEwgYi9NQUtFQUxMCmluZGV4IDg3OWExN2YuLjgxMmMwMDYgMTAwNzU1Ci0tLSBhL01BS0VBTEwKKysrIGIvTUFLRUFMTApAQCAtMTUwLDggKzE1MCw4IEBACiAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCiAKIExJU1RfNzR4eD0iCVwKLQlEQjY0MzYwCQlEQjY0NDYwCQlFVkI2NDI2MAlQM0c0CQlcCi0JUENJUFBDMgkJUENJUFBDNgkJWlVNQQkJCQlcCisJREI2NDM2MAkJREI2NDQ2MAkJRVZCNjQyNjAJbXBjNzQ0OGhwYzIJXAorCVAzRzQgICAgCVBDSVBQQzIJCVBDSVBQQzYJCVpVTUEJCVwKICIKIAogTElTVF83eHg9IglcCmRpZmYgLS1naXQgYS9NYWtlZmlsZSBiL01ha2VmaWxlCmluZGV4IDUzMTY1MDQuLjRkZDAzYjEgMTAwNjQ0Ci0tLSBhL01ha2VmaWxlCisrKyBiL01ha2VmaWxlCkBAIC0xNzE4LDYgKzE3MTgsOSBAQAogRVZCNjQyNjBfNzUwQ1hfY29uZmlnOgl1bmNvbmZpZwogCUAkKE1LQ09ORklHKSBFVkI2NDI2MCBwcGMgNzR4eF83eHggZXZiNjQyNjAKIAorbXBjNzQ0OGhwYzJfY29uZmlnOiAgdW5jb25maWcKKwlALi9ta2NvbmZpZyAkKEA6X2NvbmZpZz0pIHBwYyA3NHh4Xzd4eCBtcGM3NDQ4aHBjMgorCiBQM0c0X2NvbmZpZzogdW5jb25maWcKIAlAJChNS0NPTkZJRykgJChAOl9jb25maWc9KSBwcGMgNzR4eF83eHggZXZiNjQyNjAKIApkaWZmIC0tZ2l0IGEvUkVBRE1FIGIvUkVBRE1FCmluZGV4IGI3OGVhNjEuLmFhMTdlNDYgMTAwNjQ0Ci0tLSBhL1JFQURNRQorKysgYi9SRUFETUUKQEAgLTIzMTIsMTcgKzIzMTIsMTcgQEAKIAljc2IyNzJfY29uZmlnCQlsd21vbl9jb25maWcJCXNiYzgyNjBfY29uZmlnCiAJQ1U4MjRfY29uZmlnCQlNQlg4NjBUX2NvbmZpZwkJc2JjODU2MF8zM19jb25maWcKIAlEVUVUX0FEU19jb25maWcJCU1CWF9jb25maWcJCXNiYzg1NjBfNjZfY29uZmlnCi0JRUJPTllfY29uZmlnCQlNUEM4MjYwQURTX2NvbmZpZwlTTTg1MF9jb25maWcKLQlFTFBUODYwX2NvbmZpZwkJTVBDODU0MEFEU19jb25maWcJU1BEODIzVFNfY29uZmlnCi0JRVNURUVNMTkyRV9jb25maWcJTVBDODU0MEVWQUxfY29uZmlnCXN0eGdwM19jb25maWcKLQlFVFgwOTRfY29uZmlnCQlNUEM4NTYwQURTX2NvbmZpZwlTWE5JODU1VF9jb25maWcKLQlGQURTODIzX2NvbmZpZwkJTkVUVklBX2NvbmZpZwkJVFFNODIzTF9jb25maWcKLQlGQURTODUwU0FSX2NvbmZpZwlvbWFwMTUxMGlubl9jb25maWcJVFFNODUwTF9jb25maWcKLQlGQURTODYwVF9jb25maWcJCW9tYXAxNjEwaDJfY29uZmlnCVRRTTg1NUxfY29uZmlnCi0JRlBTODUwTF9jb25maWcJCW9tYXAxNjEwaW5uX2NvbmZpZwlUUU04NjBMX2NvbmZpZwotCQkJCW9tYXA1OTEyb3NrX2NvbmZpZwl3YWxudXRfY29uZmlnCi0JCQkJb21hcDI0MjBoNF9jb25maWcJWXVrb244MjIwX2NvbmZpZwotCQkJCQkJCVpQQzE5MDBfY29uZmlnCisJRUJPTllfY29uZmlnCQltcGM3NDQ4aHBjMl9jb25maWcJU004NTBfY29uZmlnCisJRUxQVDg2MF9jb25maWcJCU1QQzgyNjBBRFNfY29uZmlnCVNQRDgyM1RTX2NvbmZpZworCUVTVEVFTTE5MkVfY29uZmlnCU1QQzg1NDBBRFNfY29uZmlnCXN0eGdwM19jb25maWcKKwlFVFgwOTRfY29uZmlnCQlNUEM4NTQwRVZBTF9jb25maWcJU1hOSTg1NVRfY29uZmlnCisJRkFEUzgyM19jb25maWcJCU5NUEM4NTYwQURTX2NvbmZpZwlUUU04MjNMX2NvbmZpZworCUZBRFM4NTBTQVJfY29uZmlnCU5FVFZJQV9jb25maWcJCVRRTTg1MExfY29uZmlnCisJRkFEUzg2MFRfY29uZmlnCQlvbWFwMTUxMGlubl9jb25maWcJVFFNODU1TF9jb25maWcKKwlGUFM4NTBMX2NvbmZpZwkJb21hcDE2MTBoMl9jb25maWcJVFFNODYwTF9jb25maWcKKwkJCQlvbWFwMTYxMGlubl9jb25maWcJd2FsbnV0X2NvbmZpZworCQkJCW9tYXA1OTEyb3NrX2NvbmZpZwlZdWtvbjgyMjBfY29uZmlnCisJCQkJb21hcDI0MjBoNF9jb25maWcJWlBDMTkwMF9jb25maWcKIAogTm90ZTogZm9yIHNvbWUgYm9hcmQgc3BlY2lhbCBjb25maWd1cmF0aW9uIG5hbWVzIG1heSBleGlzdDsgY2hlY2sgaWYKICAgICAgIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24gaXMgYXZhaWxhYmxlIGZyb20gdGhlIGJvYXJkIHZlbmRvcjsgZm9yCmRpZmYgLS1naXQgYS9ib2FyZC9tcGM3NDQ4aHBjMi9NYWtlZmlsZSBiL2JvYXJkL21wYzc0NDhocGMyL01ha2VmaWxlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ1ZWQwMWYKLS0tIC9kZXYvbnVsbAorKysgYi9ib2FyZC9tcGM3NDQ4aHBjMi9NYWtlZmlsZQpAQCAtMCwwICsxLDQ4IEBACisjCisjIChDKSBDb3B5cmlnaHQgMjAwMAorIyBXb2xmZ2FuZyBEZW5rLCBERU5YIFNvZnR3YXJlIEVuZ2luZWVyaW5nLCB3ZEBkZW54LmRlLgorIworIyBTZWUgZmlsZSBDUkVESVRTIGZvciBsaXN0IG9mIHBlb3BsZSB3aG8gY29udHJpYnV0ZWQgdG8gdGhpcworIyBwcm9qZWN0LgorIworIyBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisjIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzCisjIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mCisjIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorIworIyBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyMgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyMgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorIyBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorIworIyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorIyBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorIyBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLAorIyBNQSAwMjExMS0xMzA3IFVTQQorIworCitpbmNsdWRlICQoVE9QRElSKS9jb25maWcubWsKKworTElCCT0gbGliJChCT0FSRCkuYQorCitPQkpTCT0gJChCT0FSRCkubyB0c2kxMDhfaW5pdC5vCisKK1NPQkpTCT0gYXNtX2luaXQubworCiskKExJQik6CS5kZXBlbmQgJChPQkpTKSAkKFNPQkpTKQorCSQoQVIpIGNydiAkQCAgJChPQkpTKSAkKFNPQkpTKQorCitjbGVhbjoKKwlybSAtZiAkKFNPQkpTKSAkKE9CSlMpCisKK2Rpc3RjbGVhbjoJY2xlYW4KKwlybSAtZiAkKExJQikgY29yZSAqLmJhayAuZGVwZW5kCisKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKworLmRlcGVuZDoJTWFrZWZpbGUgJChTT0JKUzoubz0uUykgJChPQkpTOi5vPS5jKQorCQkkKENDKSAtTSAkKENGTEFHUykgJChTT0JKUzoubz0uUykgJChPQkpTOi5vPS5jKSA+ICRACisKK3NpbmNsdWRlIC5kZXBlbmQKKworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwpkaWZmIC0tZ2l0IGEvYm9hcmQvbXBjNzQ0OGhwYzIvYXNtX2luaXQuUyBiL2JvYXJkL21wYzc0NDhocGMyL2FzbV9pbml0LlMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGMxNWEzZAotLS0gL2Rldi9udWxsCisrKyBiL2JvYXJkL21wYzc0NDhocGMyL2FzbV9pbml0LlMKQEAgLTAsMCArMSw5NTUgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogKEMpIENvcHlyaWdodCAyMDA0LTA1OyAgVHVuZHJhIFNlbWljb25kdWN0b3IgQ29ycC4KKyAqIAorICogQWRkZWQgYXV0b21hdGljIGRldGVjdCBvZiBTREMgc2V0dGluZ3MKKyAqIENvcHlyaWdodCAoYykgMjAwNSBGcmVlc2NhbGUgU2VtaWNvbmR1Y3RvciwgSW5jLgorICogTWFpbnRhaW5lciB0aWUtZmVpLnphbmdAZnJlZXNjYWxlLmNvbQorICogCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YKKyAqIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLAorICogTUEgMDIxMTEtMTMwNyBVU0EKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqIEZJTEVOQU1FOiBhc21faW5pdC5zCisgKgorICogT3JpZ2luYXRvcjogQWxleCBCb3VuaW5lCisgKgorICogREVTQ1JJUFRJT046CisgKiBJbml0aWFsaXphdGlvbiBjb2RlIGZvciB0aGUgVHVuZHJhIFRzaTEwOCBicmlkZ2UgY2hpcAorICoKKyAqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKworI2luY2x1ZGUgPGNvbmZpZy5oPgorI2luY2x1ZGUgPHZlcnNpb24uaD4KKworI2luY2x1ZGUgPHBwY19hc20udG1wbD4KKyNpbmNsdWRlIDxwcGNfZGVmcy5oPgorI2luY2x1ZGUgPGFzbS9wcm9jZXNzb3IuaD4KKworI2luY2x1ZGUgPHRzaTEwOC5oPgorCisvKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorICogQnVpbGQgQ29uZmlndXJhdGlvbiBPcHRpb25zCisgKi8KKworLyogI2RlZmluZSBESVNBQkxFX1BCTSAgICAgICBkaXNhYmxlcyB1c2FnZSBvZiBQQiBNYXN0ZXIgKi8KKy8qICNkZWZpbmUgU0RDX0hBUkRDT0RFRF9JTklUICBjb25maWcgU0RSQU0gY29udHJvbGxlciB3aXRoIGhhcmRjb2RlZCB2YWx1ZXMgKi8KKy8qICNkZWZpbmUgU0RDX0FVVE9QUkVDSF9FTiAgICBlbmFibGUgU0RSQU0gYXV0byBwcmVjaGFyZ2UgKi8KKworLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisgKiBIYXJkY29kZWQgU0RDIHNldHRpbmdzCisgKi8KKworI2lmZGVmIFNEQ19IQVJEQ09ERURfSU5JVAorCisvKiBNaWNyb24gTVQ5SFRGNjQ3MkFZLTQwRUExIDogVW5idWZmZXJlZCwgNTEyTUIsIDQwMCwgQ0wzLCBTaW5nbGUgUmFuayAqLworCisjZGVmaW5lIFZBTF9TRF9SRUZSRVNIICAoMHg2MUEpCisjZGVmaW5lIFZBTF9TRF9USU1JTkcgICAoMHgwMzA4MzM2YikKKyNkZWZpbmUgVkFMX1NEX0QwX0NUUkwgICgweDA3MTAwMDIxKSAvKiBhdXRvLXByZWNoYXJnZSBkaXNhYmxlZCAqLworI2RlZmluZSBWQUxfU0RfRDBfQkFSICAgKDB4MEZFMDAwMDApIC8qIDUxMk1CIEAgMHgwMDAwMDAwMCAqLworI2RlZmluZSBWQUxfU0RfRDFfQ1RSTCAgKDB4MDcxMDAwMjEpIC8qIGF1dG8tcHJlY2hhcmdlIGRpc2FibGVkICovCisjZGVmaW5lIFZBTF9TRF9EMV9CQVIgICAoMHgwRkUwMDIwMCkgLyogNTEyTUIgQCAweDIwMDAwMDAwICovCisKKyNlbmRpZiAvKiBTRENfSEFSRENPREVEX0lOSVQgKi8KKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyBDUFUgQ29uZmlndXJhdGlvbjoKKworIENQVSBBZGRyZXNzIGFuZCBEYXRhIFBhcml0eSBlbmFibGVzLgorCisjZGVmaW5lIENQVV9BUAorI2RlZmluZSBDUFVfRFAKKworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisgTWFjcm9zCisKKyAhISEgQXR0ZW50aW9uICEhISBNYWNyb3MgTE9BRF9QVFIsIExPQURfVTMyIGFuZCBMT0FEX01FTSBkZWZpbmVkIGJlbG93IGFyZQorIGV4cGVjdGVkIHRvIHdvcmsgY29ycmVjdGx5IGZvciB0aGUgQ1NSIHNwYWNlIHdpdGhpbiAzMktCIHJhbmdlLgorCisgTE9BRF9QVFIgYW5kIExPQURfVTMyIC0gbG9hZCBzcGVjaWZpZWQgcmVnaXN0ZXIgd2l0aCBhIDMyIGJpdCBjb25zdGFudC4KKyBUaGVzZSBtYWNyb3MgYXJlIGFic29sdXRlbHkgaWRlbnRpY2FsIGV4Y2VwdCB0aGVpciBuYW1lcy4gVGhpcyBkaWZmZXJlbmNlCisgaXMgcHJvdmlkZWQgaW50ZW50aW9uYWxseSBmb3IgYmV0dGVyIHJlYWRhYmxlIGNvZGUuCisgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisKKyNkZWZpbmUgTE9BRF9QVFIocmVnLGNvbnN0MzIpIFwKKyAgICAgIGFkZGlzIHJlZyxyMCxjb25zdDMyQGg7IG9yaSByZWcscmVnLGNvbnN0MzJAbAorCisjZGVmaW5lIExPQURfVTMyKHJlZyxjb25zdDMyKSBcCisgICAgICBhZGRpcyByZWcscjAsY29uc3QzMkBoOyBvcmkgcmVnLHJlZyxjb25zdDMyQGwKKworLyogTE9BRE1FTSBpbml0aWFsaXplcyBhIHJlZ2lzdGVyIHdpdGggdGhlIGNvbnRlbnRzIG9mIGEgc3BlY2lmaWVkIDMyLWJpdCBtZW1vcnkKKyBsb2NhdGlvbiwgdXN1YWxseSBhIENTUiB2YWx1ZS4qLworCisjZGVmaW5lIExPQURfTUVNKHJlZyxhZGRyMzIpIFwKKyAgICAgIGFkZGlzIHJlZyxyMCxhZGRyMzJAaGE7IGx3eiByZWcsYWRkcjMyQGwocmVnKQorCisjaWZuZGVmIFNEQ19IQVJEQ09ERURfSU5JVAorc2RjX2Nsa19zeW5jOgorCS8qIE1IejogMCwwLDE4MywxMDAsMTMzLDE2NywyMDAsMjMzICovCisJLmxvbmcJMCwwLCAgNiwgMTAsICA4LCAgNiwgIDUsICA0ICAvKiBuU2VjICovCisjZW5kaWYKKworLyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyBib2FyZF9hc21faW5pdCgpIC0gZWFybHkgaW5pdGlhbGl6YXRpb24gZnVuY3Rpb24uIENvZGVkIHRvIGJlIHBvcnRhYmxlIHRvCisgICAgICAgICAgICAgICAgICAgIGR1YWwtQ1BVIGNvbmZpZ3VyYXRpb24uCisgQ2hlY2tzIENQVSBudW1iZXIgYW5kIHBlcmZvcm1zIGJvYXJkIEhXIGluaXRpYWxpemF0aW9uIGlmIGNhbGxlZCBmb3IgQ1BVMC4KKworIFJlZ2lzdGVycyB1c2VkOiByMyxyNCxyNSxyNixyMTkscjI5Cis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgTk9URTogRm9yIGR1YWwtQ1BVIGNvbmZpZ3VyYXRpb24gb25seSBDUFUwIGlzIGFsbG93ZWQgdG8gY29uZmlndXJlIFRzaTEwOAorICAgICAgIGFuZCB0aGUgcmVzdCBvZiB0aGUgYm9hcmQuIEN1cnJlbnQgaW1wbGVtZW50YXRpb24gZGVtb25zdHJhdGVzIHR3bworICAgICAgIHBvc3NpYmxlIHdheXMgdG8gaWRlbnRpZnkgQ1BVIG51bWJlcjoKKyAgICAgICAgLSBmb3IgTVBDNzR4eCBwbGF0Zm9ybTogdXNlcyBNU1NDUjBbSURdIGJpdCBhcyBkZWZpbmVkIGluIFVNLgorICAgICAgICAtIGZvciBQUEM3NTBGWC9HWCBib2FyZHM6IHVzZXMgV0hPX0FNX0kgYml0IHJlcG9ydGVkIGJ5IFRzaTEwOC4KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisKKyAgICAuZ2xvYmwgYm9hcmRfYXNtX2luaXQKK2JvYXJkX2FzbV9pbml0OgorCisgICAgbWZsciAgICByMTkgICAgICAgICAgLyogU2F2ZSBMUiB0byBiZSBhYmxlIHJldHVybiBsYXRlci4gKi8KKworICAgIGJsIGljYWNoZV9lbmFibGUgICAgIC8qIEVuYWJsZSBpY2FjaGUgdG8gcmVkdWNlIHJlYWRzIGZyb20gZmxhc2guICovCisKKyAgICAvKiBJbml0aWFsaXplIHBvaW50ZXIgdG8gVHNpMTA4IHJlZ2lzdGVyIHNwYWNlCisgICAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisKKyAgICBMT0FEX1BUUihyMjksQ0ZHX1RTSTEwOF9DU1JfUlNUX0JBU0UpLyogcjI5IC0gcG9pbnRlciB0byB0c2kxMDggQ1NSIHNwYWNlICovCisgICAgb3JpIHI0LHIyOSxUU0kxMDhfUEJfUkVHX09GRlNFVAorCisgICAgLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgIENoZWNrIFByb2Nlc3NvciBWZXJzaW9uIE51bWJlciAqLworCisgICAgbWZzcHIgICByMywgUFZSCisgICAgcmx3aW5tICByMyxyMywxNiwxNiwyMyAgLyogZ2V0ICgoUHJvY2Vzc29yIFZlcnNpb24gTnVtYmVyKSAmIDB4RkYwMCkgKi8KKworICAgIGNtcGxpICAgMCwwLHIzLDB4ODAwMCAgIC8qIE1QQzc0eHggKi8KKyAgICBibmUgICAgIGNvbnRfYnJkX2luaXQKKworICAgIC8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgICBGb3IgTVBDNzQ0eC81eCBlbmFibGUgZXh0ZW5kZWQgQkFUc1s0LTddCisgICAgIFNyaTogU2V0IEhJR0hfQkFUX0VOIGFuZCBYQlNFTiwgYW5kIFNQRCA9MQorICAgICAgICAgIHRvIGRpc2FibGUgcHJlZmV0Y2ggCisgICAgICovCisKKyAgICBtZnNwciAgIHI1LCBISUQwCisgICAgb3JpcyAgICByNSwgcjUsIDB4MDA4MCAgLyogU2V0IEhJRDBbSElHSF9CQVRfRU5dIGJpdCAjOCAqLworICAgIG9yaSAgICAgcjUsIHI1LCAweDAzODAgICAgLyogU2V0IFNQRCxYQlNFTixTR0UgYml0cyAjMjIsMjMsMjQgKi8KKyAgICBtdHNwciAgIEhJRDAsIHI1CisgICAgaXN5bmMKKyAgICBzeW5jCisKKyAgICAvKiBBZGRpbmcgY29kZSB0byBkaXNhYmxlIGV4dGVybmFsIGludGVydmVudGlvbnMgaW4gTVBYIGJ1cyBtb2RlICovCisgICAgbWZzcHIgICByMywgMTAxNAorICAgIG9yaXMgICAgcjMsIHIzLCAweDAxMDAgLyogU2V0IHRoZSBFSURJUyBiaXQgaW4gTVNTQ1IwOiAgYml0IDcgKi8KKyAgICBtdHNwciAgIDEwMTQsIHIzCisgICAgaXN5bmMKKyAgICBzeW5jCisKKyAgICAvKiBTcmk6IGNvZGUgdG8gZW5hYmxlIEZQIHVuaXQgKi8KKyAgICBtZm1zciAgIHIzCisgICAgb3JpICAgICByMywgcjMsIDB4MjAwMAorICAgIG10bXNyICAgcjMKKyAgICBpc3luYworICAgIHN5bmMKKworI2lmKDEpIC8qIGRlZiBDT05GSUdfRFVBTF9DUFUKKyAgICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgIEZvciBNUEM3NHh4IHByb2Nlc3NvciwgdXNlIE1TU0NSMFtJRF0gYml0IHRvIGlkZW50aWZ5IENQVSBudW1iZXIuCisgICAgICovCisKKyAgICBtZnNwciAgIHIzLDEwMTQgICAgICAgICAvKiByZWFkIE1TU0NSMCAqLworICAgIHJsd2lubS4gcjMscjMsMjcsMzEsMzEgIC8qIGdldCBwcm9jZXNzb3IgSUQgbnVtYmVyICovCisgICAgbXRzcHIgICBTUFJOX1BJUixyMyAgICAgLyogU2F2ZSBDUFUgSUQgKi8KKyAgICBzeW5jCisgICAgYm5lIGluaXRfZG9uZQorICAgIGIgZG9fdHNpMTA4X2luaXQKKworY29udF9icmRfaW5pdDoKKworICAgIC8qIEFuIGFsdGVybmF0aXZlIG1ldGhvZCBvZiBjaGVja2luZyB0aGUgcHJvY2Vzc29yIG51bWJlciAoaW4gYWRkaXRpb24KKyAgICAgICB0byBjb25maWd1cmF0aW9uIHVzaW5nIE1TU0NSMFtJRF0gYml0IG9uIE1QQzc0eHgpLiAKKyAgICAgICBHb29kIGZvciBJQk0gUFBDNzUwRlgvR1guCisgICAgICovCisKKyAgICBsd3ogcjMsUEJfQlVTX01TX1NFTEVDVChyNCkgLyogcmVhZCBQQl9JRCByZWdpc3RlciAqLworICAgIHJsd2lubS4gcjMscjMsMjQsMzEsMzEgICAgICAvKiBnZXQgcHJvY2Vzc29yIElEIG51bWJlciAqLworCisgICAgYm5lIGluaXRfZG9uZQorCisjZWxzZQorCitjb250X2JyZF9pbml0OgorCisjZW5kaWYgLyogQ09ORklHX0RVQUxfQ1BVICovCisKKyAgICAvKiBJbml0aWFsaXplIFRzaTEwOCBjaGlwCisgICAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgICovCisKK2RvX3RzaTEwOF9pbml0OgorCisgICAgLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgICBBZGp1c3QgSExQL0ZsYXNoIHBhcmFtZXRlcnMuIEJ5IGRlZmF1bHQgYWZ0ZXIgcmVzZXQgdGhlIEhMUCBwb3J0IGlzIHNldAorICAgICB0byBzdXBwb3J0IHNsb3cgZGV2aWNlcy4gQmV0dGVyIHBlcmZvcm1hbmNlIGNhbiBiZSBhY2hpdmVkIHdoZW4gYW4gb3B0aW1hbAorICAgICBwYXJhbWV0ZXJzIGFyZSB1c2VkIGZvciBzcGVjaWZpYyBFUFJPTSBkZXZpY2UuCisgICAgIE5PVEU6IFRoaXMgc2hvdWxkIGJlIHBlcmZvcm1lZCBBU0FQIGZvciB0aGUgZW11bGF0aW9uIHBsYXRmb3JtIGJlY2F1c2UKKyAgICAgaXQgaGFzIDVNSHogSExQIGNsb2NraW5nLgorICAgICAqLworCisjaWZkZWYgQ09ORklHX1RTSTEwOEVNVQorICAgIG9yaSByNCxyMjksVFNJMTA4X0hMUF9SRUdfT0ZGU0VUCisgICAgTE9BRF9VMzIocjUsMHg0MzQ0MjJjMCkKKyAgICBzdHcgcjUsMHgwOChyNCkgICAgICAgICAgICAvKiBzZXQgSExQIEIwX0NUUkwwICovCisgICAgc3luYworICAgIExPQURfVTMyKHI1LDB4ZDAwMTIwMDApCisgICAgc3R3IHI1LDB4MGMocjQpICAgICAgICAgICAgLyogc2V0IEhMUCBCMF9DVFJMMSAqLworICAgIHN5bmMKKyNlbmRpZgorCisgICAgLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgICAqIEluaXRpYWxpemUgUEIgaW50ZXJmYWNlLgorICAgICAqLworCisgICAgb3JpIHI0LHIyOSxUU0kxMDhfUEJfUkVHX09GRlNFVAorCisjaWYgKENGR19UU0kxMDhfQ1NSX0JBU0UgIT0gQ0ZHX1RTSTEwOF9DU1JfUlNUX0JBU0UpCisgICAgLyogUmVsb2NhdGUgKGlmIHJlcXVpcmVkKSBUc2kxMDggcmVnaXN0ZXJzLiBTZXQgbmV3IHZhbHVlIGZvciBQQl9SRUdfQkFSOgorICAgICAqIE5vdGUgd2UgYXJlIGluIHRoZSAzMi1iaXQgYWRkcmVzcyBtb2RlLgorICAgICAqLworICAgIExPQURfVTMyKHI1LChDRkdfVFNJMTA4X0NTUl9CQVNFIHwgMHgwMSkpIC8qIHZhbHVlIGZvciBQQl9SRUdfQkFSOiBCQSArIEVOKi8KKyAgICBzdHcgcjUsUEJfUkVHX0JBUihyNCkKKyAgICBhbmRpcy4gcjI5LHI1LDB4RkZGRgorICAgIHN5bmMKKworICAgIG9yaSByNCxyMjksVFNJMTA4X1BCX1JFR19PRkZTRVQKKyNlbmRpZgorCisgICAgLyogU2V0IFBCIFNsYXZlIGNvbmZpZ3VyYXRpb24gcmVnaXN0ZXIgKi8KKworLyogICAgTE9BRF9VMzIocjUsMHgwMDAwMjRDNykgIHZhbHVlIGZvciBQQl9TQ1I6IFRFQSBlbmFibGVkLEFBQ0sgZGVsYXkgPSA3ICovCisgICAgTE9BRF9VMzIocjUsMHgwMDAwMjQ4MSkgLyogdmFsdWUgZm9yIFBCX1NDUjogVEVBIGVuYWJsZWQsQUFDSyBkZWxheSA9IDEgKi8KKyAgICBsd3ogcjMsIFBCX1JTUihyNCkgICAgICAvKiBnZXQgUEIgYnVzIG1vZGUgKi8KKyAgICB4b3JpIHIzLHIzLDB4MDAwMSAgICAgICAvKiBtYXNrIFBCX0JNT0RFOiByMyAtPiAoMCA9IDYwWCwgMSA9IE1QWCkgKi8KKyAgICBybHdpbWkgIHI1LHIzLDE0LDE3LDE3ICAvKiBmb3IgTVBYOiBzZXQgRFRJX01PREUgYml0ICovCisgICAgc3R3IHI1LFBCX1NDUihyNCkKKyAgICBzeW5jCisKKyAgICAvKiBDb25maWd1cmUgUEIgQXJiaXRlciAqLworCisgICAgbHd6IHI1LFBCX0FSQl9DVFJMKHI0KSAgICAgIC8qIFJlYWQgUEIgQXJiaXRlciBDb250cm9sIFJlZ2lzdGVyICovCisgICAgbGkgcjMsIDB4MDBGMCAgICAgICAgICAgICAgIC8qIEFSQl9QSVBFTElORV9ERVAgbWFzayAqLworI2lmZGVmIERJU0FCTEVfUEJNCisgICAgb3JpIHIzLHIzLDB4MTAwMCAgICAgICAgICAgIC8qIGFkZCBQQk1fRU4gdG8gY2xlYXIgKGVuYWJsZWQgYnkgZGVmYXVsdCkgKi8KKyNlbmRpZgorICAgIGFuZGMgcjUscjUscjMgICAgICAgICAgICAgICAvKiBDbGVhciB0aGUgbWFza2VkIGJpdCBmaWVsZHMgKi8KKy8qICAgIG9yaSByNSxyNSwweDAwNDAgICAgICAgICAgICAgU2V0IHBpcGVsaW5lIGRlcHRoIDQKKyAgICBvcmkgcjUscjUsMHgwMDgwICAgICAgICAgICAgIFNldCBwaXBlbGluZSBkZXB0aCA4CisgICAgb3JpIHI1LHI1LDB4MDAyMCAgICAgICAgICAgICEhIWF2YiBUZXN0aW5nOiBzZXQgcGlwZWxpbmUgZGVwdGggMiAqLworICAgIG9yaSByNSxyNSwweDAwMDEKKyAgICBzdHcgcjUsUEJfQVJCX0NUUkwocjQpCisKKyNpZiAoMCkgLyogY3VycmVudGx5IHVzaW5nIHRoZSBkZWZhdWx0IHNldHRpbmdzIGZvciBQQk0gYWZ0ZXIgcmVzZXQgKi8KKyAgICBMT0FEX1UzMihyNSwweCkgLyogdmFsdWUgZm9yIFBCX01DUiAqLworICAgIHN0dyByNSxQQl9NQ1IocjQpCisgICAgc3luYworCisgICAgTE9BRF9VMzIocjUsMHgpIC8qIHZhbHVlIGZvciBQQl9NQ01EICovCisgICAgc3R3IHI1LFBCX01DTUQocjQpCisgICAgc3luYworI2VuZGlmCisKKy8qIERpc2FibGUgb3IgZW5hYmxlIFBWVCBiYXNlZCBvbiBwcm9jZXNzb3IgYnVzIGZyZXF1ZW5jeQorICAgMS4gUmVhZCBDR19QV1JVUF9TVEFUVVMgcmVnaXN0ZXIgZmllbGQgYml0cyAxOCwxNywxNgorICAgMi4gU2VlIGlmIHRoZSB2YWx1ZSBpcyA8IG9yID4gMTMzbWh6ICgxODoxNiA9IDEwMCkKKyAgIDMuIElmID4gZW5hYmxlIFBWVCAKKyAgICovCisKKyAgICBMT0FEX1UzMihyMywweEMwMDAyMjM0KQorICAgIGx3eiAgcjMsMChyMykKKyAgICBybHdpbm0gIHIzLHIzLDE2LDI5LDMxCisKKyAgICBjbXBpIDAsMCxyMywweDAwMDQKKyAgICBiZ3Qgc2RjX2luaXQKKworI2lmbmRlZiBDT05GSUdfVFNJMTA4RU1VCisgICAvKiBGSVhNRTogICAgRGlzYWJsZSBQQiBjYWxpYnJhdGlvbiBjb250cm9sIGZvciBhbnkgcmVhbCBUc2kxMDggYm9hcmQgKi8KKyAgICBsaSAgcjUsMHgwMTAxIC8qIGRpc2FibGUgY2FsaWJyYXRpb24gY29udHJvbCAqLworICAgIHN0dyByNSxQQl9QVlRfQ1RSTDIocjQpCisgICAgc3luYworI2VuZGlmCisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgSW5pdGlhbGl6ZSBTRFJBTSBjb250cm9sbGVyLgorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisKK3NkY19pbml0OgorCisjaWZuZGVmIFNEQ19IQVJEQ09ERURfSU5JVAorICAgIC8qIGdldCBTREMgY2xvY2sgcHJpb3IgZG9pbmcgc2RyYW0gY29udHJvbGxlciBhdXRvY29uZmlnICovCisgICAgb3JpIHI0LHIyOSxUU0kxMDhfQ0xLX1JFR19PRkZTRVQJLyogcjQgLSBwdHIgdG8gQ0cgcmVnaXN0ZXJzICovCisgICAgbHd6IHIzLCBDR19QV1JVUF9TVEFUVVMocjQpCQkvKiBnZXQgQ0cgY29uZmlndXJhdGlvbiAqLworICAgIHJsd2lubSByMyxyMywxMiwyOSwzMQkJCS8qIHIzIC0gU0QgY2xrICovCisgICAgbGlzIHI1LHNkY19jbGtfc3luY0BoCisgICAgb3JpIHI1LHI1LHNkY19jbGtfc3luY0BsCisgICAgICAgLyogU3JpOiAgQXQgdGhpcyBwb2ludCBjaGVjayBpZiByMyA9IDAwMS4gSWYgeWVzLAorICAgICAgICAqIHRoZSBtZW1vcnkgZnJlcXVlbmN5IHNob3VsZCBiZSBzYW1lIGFzIHRoZSAKKyAgICAgICAgKiBNUFggYnVzIGZyZXF1ZW5jeQorICAgICAgICAqLworICAgIGNtcGkgMCwwLHIzLDB4MDAwMQorICAgIGJuZSBnZXRfbnNlYworICAgIGx3eiByNiwgQ0dfUFdSVVBfU1RBVFVTKHI0KQorICAgIHJsd2lubSByNixyNiwxNiwyOSwzMQorICAgIG1yIHIzLHI2CisKK2dldF9uc2VjOgorICAgIHJsd2lubSByMyxyMywyLDAsMzEKKyAgICBsd3p4IHI5LHI1LHIzCS8qIGdldCBTRCBjbGsgcmF0ZSBpbiBuU2VjICovCisgICAgICAgLyogQVRUTjogcjkgd2lsbCBiZSB1c2VkIGJ5IFNQRCByb3V0aW5lICovCisjZW5kaWYgLyogIVNEQ19IQVJEQ09ERURfSU5JVCAqLworCisgICAgb3JpIHI0LHIyOSxUU0kxMDhfU0RfUkVHX09GRlNFVCAvKiByNCAtIHB0ciB0byBTRFJBTSByZWdpc3RlcnMgKi8KKworICAgIC8qIEluaXRpYWxpemUgU0RSQU0gY29udHJvbGxlci4gU0RSQU0gU2l6ZSA9IDUxMk1CLCBPbmUgRElNTS4gKi8KKworICAgIExPQURfVTMyKHI1LDB4MDApCisgICAgc3R3IHI1LFNEX0lOVF9FTkFCTEUocjQpICAgIC8qIEVuc3VyZSB0aGF0IGludGVycnVwdHMgYXJlIGRpc2FibGVkICovCisjaWZkZWYgRU5BQkxFX1NEUkFNX0VDQworICAgIGxpIHI1LCAweDAxCisjZW5kaWYgLyogRU5BQkxFX1NEUkFNX0VDQyAqLworICAgIHN0dyByNSxTRF9FQ0NfQ1RSTChyNCkgICAgICAvKiBFbmFibGUvRGlzYWJsZSBFQ0MgKi8KKyAgICBzeW5jCisKKyNpZmRlZiBTRENfSEFSRENPREVEX0lOSVQgLyogY29uZmlnIHNkcmFtIGNvbnRyb2xsZXIgd2l0aCBoYXJkY29kZWQgdmFsdWVzICovCisKKyAgICAvKiBGaXJzdCByZWFkIHRoZSBDR19QV1JVUF9TVEFUVVMgcmVnaXN0ZXIgdG8gZ2V0IHRoZQorICAgICAgIG1lbW9yeSBzcGVlZCBmcm9tIGJpdHMgMjIsMjEsMjAgKi8KKworICAgIExPQURfVTMyKHIzLDB4QzAwMDIyMzQpCisgICAgbHd6ICByMywwKHIzKQorICAgIHJsd2lubSAgcjMscjMsMTIsMjksMzEKKworICAgIC8qIE5vdyBmaXJzdCBjaGVjayBmb3IgMTY2LCB0aGVuIDIwMCwgb3IgZGVmYXVsdCAqLworCisgICAgY21waSAwLDAscjMsMHgwMDA1CisgICAgYm5lIGNoZWNrX2Zvcl8yMDBtaHoKKworICAgIC8qIHNldCB2YWx1ZXMgZm9yIDE2NiBNaHogbWVtb3J5IHNwZWVkICovCisKKyAgICAvKiBTZXQgcmVmcmVzaCByYXRlIGFuZCB0aW1pbmcgcGFyYW1ldGVycyAqLworICAgIExPQURfVTMyKHI1LDB4MDAwMDA1MTUpCisgICAgc3R3IHI1LFNEX1JFRlJFU0gocjQpCisgICAgTE9BRF9VMzIocjUsMHgwMzA3MzM2OCkKKyAgICBzdHcgcjUsU0RfVElNSU5HKHI0KQorICAgIHN5bmMKKworICAgIC8qIEluaXRpYWxpemUgRElNTTAgY29udHJvbCBhbmQgQkFSIHJlZ2lzdGVycyAqLworICAgIExPQURfVTMyKHI1LFZBTF9TRF9EMF9DVFJMKSAgIC8qIGF1dG8tcHJlY2hhcmdlIGRpc2FibGVkICovCisjaWZkZWYgU0RDX0FVVE9QUkVDSF9FTgorICAgIG9yaXMgcjUscjUsMHgwMDAxICAgLyogc2V0IGF1dG8gcHJlY2hhcmdlIEVOIGJpdCAqLworI2VuZGlmCisgICAgc3R3IHI1LFNEX0QwX0NUUkwocjQpCisgICAgTE9BRF9VMzIocjUsVkFMX1NEX0QwX0JBUikKKyAgICBzdHcgcjUsU0RfRDBfQkFSKHI0KQorICAgIHN5bmMKKworICAgIC8qIEluaXRpYWxpemUgRElNTTEgY29udHJvbCBhbmQgQkFSIHJlZ2lzdGVycworICAgICAqICAoc2FtZSBhcyBkaW1tIDAsIG5leHQgNTEyTUIsIGRpc2FibGVkKQorICAgICAqLworICAgIExPQURfVTMyKHI1LFZBTF9TRF9EMV9DVFJMKSAgLyogYXV0by1wcmVjaGFyZ2UgZGlzYWJsZWQgKi8KKyNpZmRlZiBTRENfQVVUT1BSRUNIX0VOCisgICAgb3JpcyByNSxyNSwweDAwMDEgICAvKiBzZXQgYXV0byBwcmVjaGFyZ2UgRU4gYml0ICovCisjZW5kaWYKKyAgICBzdHcgcjUsU0RfRDFfQ1RSTChyNCkKKyAgICBMT0FEX1UzMihyNSxWQUxfU0RfRDFfQkFSKQorICAgIHN0dyByNSxTRF9EMV9CQVIocjQpCisgICAgc3luYworCisgICAgYiBzZGNfaW5pdF9kb25lCisKK2NoZWNrX2Zvcl8yMDBtaHo6CisKKyAgICBjbXBpIDAsMCxyMywweDAwMDYKKyAgICBibmUgc2V0X2RlZmF1bHRfdmFsdWVzCisKKyAgICAvKiBzZXQgdmFsdWVzIGZvciAyMDBNaHogbWVtb3J5IHNwZWVkICovCisKKyAgICAvKiBTZXQgcmVmcmVzaCByYXRlIGFuZCB0aW1pbmcgcGFyYW1ldGVycyAqLworICAgIExPQURfVTMyKHI1LDB4MDAwMDA2MWEpCisgICAgc3R3IHI1LFNEX1JFRlJFU0gocjQpCisgICAgTE9BRF9VMzIocjUsMHgwMzA4MzM0OCkKKyAgICBzdHcgcjUsU0RfVElNSU5HKHI0KQorICAgIHN5bmMKKworICAgIC8qIEluaXRpYWxpemUgRElNTTAgY29udHJvbCBhbmQgQkFSIHJlZ2lzdGVycyAqLworICAgIExPQURfVTMyKHI1LFZBTF9TRF9EMF9DVFJMKSAgIC8qIGF1dG8tcHJlY2hhcmdlIGRpc2FibGVkICovCisjaWZkZWYgU0RDX0FVVE9QUkVDSF9FTgorICAgIG9yaXMgcjUscjUsMHgwMDAxICAgLyogc2V0IGF1dG8gcHJlY2hhcmdlIEVOIGJpdCAqLworI2VuZGlmCisgICAgc3R3IHI1LFNEX0QwX0NUUkwocjQpCisgICAgTE9BRF9VMzIocjUsVkFMX1NEX0QwX0JBUikKKyAgICBzdHcgcjUsU0RfRDBfQkFSKHI0KQorICAgIHN5bmMKKworICAgIC8qIEluaXRpYWxpemUgRElNTTEgY29udHJvbCBhbmQgQkFSIHJlZ2lzdGVycworICAgICAqICAoc2FtZSBhcyBkaW1tIDAsIG5leHQgNTEyTUIsIGRpc2FibGVkKQorICAgICAqLworICAgIExPQURfVTMyKHI1LFZBTF9TRF9EMV9DVFJMKSAgLyogYXV0by1wcmVjaGFyZ2UgZGlzYWJsZWQgKi8KKyNpZmRlZiBTRENfQVVUT1BSRUNIX0VOCisgICAgb3JpcyByNSxyNSwweDAwMDEgICAvKiBzZXQgYXV0byBwcmVjaGFyZ2UgRU4gYml0ICovCisjZW5kaWYKKyAgICBzdHcgcjUsU0RfRDFfQ1RSTChyNCkKKyAgICBMT0FEX1UzMihyNSxWQUxfU0RfRDFfQkFSKQorICAgIHN0dyByNSxTRF9EMV9CQVIocjQpCisgICAgc3luYworCisgICAgYiBzZGNfaW5pdF9kb25lCisKK3NldF9kZWZhdWx0X3ZhbHVlczoKKworICAgIC8qIFNldCByZWZyZXNoIHJhdGUgYW5kIHRpbWluZyBwYXJhbWV0ZXJzICovCisgICAgTE9BRF9VMzIocjUsVkFMX1NEX1JFRlJFU0gpCisgICAgc3R3IHI1LFNEX1JFRlJFU0gocjQpCisgICAgTE9BRF9VMzIocjUsVkFMX1NEX1RJTUlORykKKyAgICBzdHcgcjUsU0RfVElNSU5HKHI0KQorICAgIHN5bmMKKworICAgIC8qIEluaXRpYWxpemUgRElNTTAgY29udHJvbCBhbmQgQkFSIHJlZ2lzdGVycyAqLworICAgIExPQURfVTMyKHI1LFZBTF9TRF9EMF9DVFJMKSAgIC8qIGF1dG8tcHJlY2hhcmdlIGRpc2FibGVkICovCisjaWZkZWYgU0RDX0FVVE9QUkVDSF9FTgorICAgIG9yaXMgcjUscjUsMHgwMDAxICAgLyogc2V0IGF1dG8gcHJlY2hhcmdlIEVOIGJpdCAqLworI2VuZGlmCisgICAgc3R3IHI1LFNEX0QwX0NUUkwocjQpCisgICAgTE9BRF9VMzIocjUsVkFMX1NEX0QwX0JBUikKKyAgICBzdHcgcjUsU0RfRDBfQkFSKHI0KQorICAgIHN5bmMKKworICAgIC8qIEluaXRpYWxpemUgRElNTTEgY29udHJvbCBhbmQgQkFSIHJlZ2lzdGVycworICAgICAqICAoc2FtZSBhcyBkaW1tIDAsIG5leHQgNTEyTUIsIGRpc2FibGVkKQorICAgICAqLworICAgIExPQURfVTMyKHI1LFZBTF9TRF9EMV9DVFJMKSAgLyogYXV0by1wcmVjaGFyZ2UgZGlzYWJsZWQgKi8KKyNpZmRlZiBTRENfQVVUT1BSRUNIX0VOCisgICAgb3JpcyByNSxyNSwweDAwMDEgICAvKiBzZXQgYXV0byBwcmVjaGFyZ2UgRU4gYml0ICovCisjZW5kaWYKKyAgICBzdHcgcjUsU0RfRDFfQ1RSTChyNCkKKyAgICBMT0FEX1UzMihyNSxWQUxfU0RfRDFfQkFSKQorICAgIHN0dyByNSxTRF9EMV9CQVIocjQpCisgICAgc3luYworCisjZWxzZSAvKiAhU0RDX0hBUkRDT0RFRF9JTklUICovCisgICAgICAgIAorICAgIGJsIHRzaTEwOF9zZHJhbV9zcGQgCS8qIGF1dG9tYXRpY2FsbHkgZGV0ZWN0IFNEQyBzZXR0aW5ncyAqLworICAgICAKKyNlbmRpZiAvKiBTRENfSEFSRENPREVEX0lOSVQgKi8KKworc2RjX2luaXRfZG9uZToKKworI2lmZGVmIERJU0FCTEVfUEJNCisgICAgTE9BRF9VMzIocjUsMHgwMDAwMDAzMCkgICAgIC8qIFBCX0VOICsgT0NOX0VOICovCisjZWxzZQorICAgIExPQURfVTMyKHI1LDB4MDAwMDAyMzApICAgICAvKiBQQl9FTiArIE9DTl9FTiArIFBCL09DTj04MC8yMCAqLworI2VuZGlmIC8qIERJU0FCTEVfUEJNICovCisKKyNpZmRlZiBDT05GSUdfVFNJMTA4RU1VCisgICAgb3JpcyByNSxyNSwweDAwMTAgICAvKiBzZXQgRU1VTEFUSU9OX01PREUgYml0ICovCisjZW5kaWYKKworICAgIHN0dyByNSxTRF9DVFJMKHI0KQorICAgIGVpZWlvCisgICAgc3luYworCisgICAgLyogRW5hYmxlIFNEUkFNIGFjY2VzcyAqLworCisgICAgb3JpcyByNSxyNSwweDgwMDAgICAvKiBzdGFydCBTREM6IHNldCBTRF9DVFJMW0VOQUJMRV0gYml0ICovCisgICAgc3R3IHI1LFNEX0NUUkwocjQpCisgICAgc3luYworCit3YWl0X2luaXRfY29tcGxldGU6CisgICAgbHd6IHI1LFNEX1NUQVRVUyhyNCkKKyAgICBhbmRpLiAgIHI1LHI1LDB4MDAwMQorICAgIGJlcSB3YWl0X2luaXRfY29tcGxldGUgIC8qIHdhaXQgdW50aWwgU0RSQU0gaW5pdGlhbGl6YXRpb24gaXMgY29tcGxldGUgKi8KKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyBNYXAgU0RSQU0gaW50byB0aGUgcHJvY2Vzc29yIGJ1cyBhZGRyZXNzIHNwYWNlCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworCisgICAgb3JpIHI0LHIyOSxUU0kxMDhfUEJfUkVHX09GRlNFVAorCisgICAgLyogU2V0dXAgQkFScyBhc3NvY2lhdGVkIHdpdGggZGlyZWN0IHBhdGggUEI8LT5TRFJBTSAqLworCisgICAgLyogUEJfU0RSQU1fQkFSMToKKyAgICAgICBwcm92aWRlcyBhIGRpcmVjdCBwYXRoIHRvIHRoZSBtYWluIHN5c3RlbSBtZW1vcnkgKGNhY2hlYWJsZSBTRFJBTSkgKi8KKworICAgIExPQURfVTMyKHI1LCAweDAwMDAwMDExKSAgLyogQkE9MCxTaXplPTUxMk1CLCBFTmFibGUsIE5vIEFkZHIuVHJhbnNsYXRpb24gKi8KKyAgICBzdHcgcjUsUEJfU0RSQU1fQkFSMShyNCkKKyAgICBzeW5jCisKKyAgICAvKiBNYWtlIHN1cmUgdGhhdCBQQl9TRFJBTV9CQVIxIGRlY29kZXIgaXMgc2V0CisgICAgICAgKHRvIGFsbG93IGZvbGxvd2luZyBpbW1lZGlhdGUgcmVhZCBmcm9tIFNEUkFNKSAqLworICAgIGx3eiByNSxQQl9TRFJBTV9CQVIxKHI0KQorICAgIHN5bmMKKworICAgIC8qIFBCX1NEUkFNX0JBUjI6CisgICAgICAgcHJvdmlkZXMgbm9uLWNhY2hlYWJsZSBhbGlhcyAodmlhIHRoZSBkaXJlY3QgcGF0aCkgdG8gbWFpbiBzeXN0ZW0gbWVtb3J5LgorICAgICAgIFNpemUgPSA1MTJNQiwgRU5hYmxlLCBBZGRyLlRyYW5zbGF0aW9uIC0gT04sCisgICAgICAgQkEgPSAweDBfNDAwMDAwMDAsIFRBID0gMHgwXzAwMDAwMDAwICovCisKKyAgICBMT0FEX1UzMihyNSwgMHg0MDAxMDAxMSkKKyAgICBzdHcgcjUsUEJfU0RSQU1fQkFSMihyNCkKKyAgICBzeW5jCisKKyAgICAvKiBNYWtlIHN1cmUgdGhhdCBQQl9TRFJBTV9CQVIyIGRlY29kZXIgaXMgc2V0CisgICAgICAodG8gYWxsb3cgZm9sbG93aW5nIGltbWVkaWF0ZSByZWFkIGZyb20gU0RSQU0pICovCisgICAgbHd6IHI1LFBCX1NEUkFNX0JBUjIocjQpCisgICAgc3luYworCisKK2luaXRfZG9uZToKKworICAgIC8qIEFsbCBkb25lLiBSZXN0b3JlIExSIGFuZCByZXR1cm4uICovCisgICAgbXRsciAgICByMTkKKyAgICBibHIKKworI2lmICgwKQorLyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyBpbml0X2NwdTEKKworIFRoaXMgcm91dGluZSBlbmFibGVzIENQVTEgb24gdGhlIGR1YWwtcHJvY2Vzc29yIHN5c3RlbS4KKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSovCisKKyAgICAuZ2xvYmFsIGVuYWJsZV9jcHUxCitlbmFibGVfY3B1MToKKworICAgIGxpcyByMyxUc2kxMDhfQmFzZUBoYSAgICAgICAvKiBHZXQgR3JlbmRlbCBDU1IgQmFzZSBBZGRyICovCisgICAgYWRkaSAgICByMyxyMyxUc2kxMDhfQmFzZUBsCisgICAgbHd6IHIzLDAocjMpICAgICAgICAgICAgICAgIC8qIFIzID0gQ1NSIEJhc2UgQWRkciAqLworICAgIG9yaSByNCxyMyxUU0kxMDhfUEJfUkVHX09GRlNFVAorICAgIGx3eiByMyxQQl9BUkJfQ1RSTChyNCkgICAgICAvKiBSZWFkIFBCIEFyYml0ZXIgQ29udHJvbCBSZWdpc3RlciAqLworICAgIG9yaSByMyxyMywweDAyMDAgICAgICAgICAgICAvKiBTZXQgTTFfRU4gYml0ICovCisgICAgc3R3IHIzLFBCX0FSQl9DVFJMKHI0KQorCisgICAgYmxyCisjZW5kaWYKKworLyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyBlbmFibGVfRUkKKworIEVuYWJsZSBDUFUgY29yZSBleHRlcm5hbCBpbnRlcnJ1cHQKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSovCisKKyAgICAuZ2xvYmFsIGVuYWJsZV9FSQorZW5hYmxlX0VJOgorICAgIG1mbXNyICAgIHIzCisgICAgb3JpICAgICAgcjMscjMsMHg4MDAwICAgLyogc2V0IEVFIGJpdCAqLworICAgIG10bXNyICAgIHIzCisgICAgYmxyCisKKy8qPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisgZGlzYWJsZV9FSQorCisgRGlzYWJsZSBDUFUgY29yZSBleHRlcm5hbCBpbnRlcnJ1cHQKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSovCisKKyAgICAuZ2xvYmFsIGRpc2FibGVfRUkKK2Rpc2FibGVfRUk6CisgICAgbWZtc3IgICByMworICAgIGxpICByNCwtMzI3NjggICAvKiBha2EgImxpICByNCwweDgwMDAiICovCisgICAgYW5kYyByMyxyMyxyNCAgIC8qIGNsZWFyIEVFIGJpdCAqLworICAgIG10bXNyICAgcjMKKyAgICBibHIKKworI2lmZGVmIEVOQUJMRV9TRFJBTV9FQ0MKKy8qPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisgZW5hYmxlX0VDQworCisgZW5hYmxlcyBTRFJBTSBFQ0MKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSovCisKKyAgICAuZ2xvYmFsIGVuYWJsZV9FQ0MKK2VuYWJsZV9FQ0M6CisgICAgb3JpIHI0LHIyOSxUU0kxMDhfU0RfUkVHX09GRlNFVAorICAgIGx3eiByMyxTRF9FQ0NfQ1RSTChyNCkgICAgICAvKiBSZWFkIFNEUkFNIEVDQyBDb250cm9sIFJlZ2lzdGVyICovCisgICAgb3JpIHIzLHIzLDB4MDAwMSAgICAgICAgICAgIC8qIFNldCBFQ0NfRU4gYml0ICovCisgICAgc3R3IHIzLFNEX0VDQ19DVFJMKHI0KQorICAgIGJscgorCisvKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorIGNsZWFyX0VDQ19lcnIKKworIENsZWFycyBhbGwgcGVuZGluZyBTRFJBTSBFQ0MgZXJyb3JzCisgKG5vcm1hbGx5IGFmdGVyIFNEUkFNIHNjcnViYmluZy9pbml0aWFsaXphdGlvbikKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSovCisKKyAgICAuZ2xvYmFsIGNsZWFyX0VDQ19lcnIKK2NsZWFyX0VDQ19lcnI6CisgICAgb3JpIHI0LHIyOSxUU0kxMDhfU0RfUkVHX09GRlNFVAorLyogICAgbHd6IHIzLFNEX0lOVF9TVEFUVVMocjQpICAgICAgIFJlYWQgU0RSQU0gRUNDIENvbnRyb2wgUmVnaXN0ZXIgKi8KKyAgICBvcmkgcjMscjAsMHgwMDMwICAgICAgICAgICAgICAgIC8qIEVDQ19VRV9JTlQgKyBFQ0NfQ0VfSU5UIGJpdHMgKi8KKyAgICBzdHcgcjMsU0RfSU5UX1NUQVRVUyhyNCkKKyAgICBibHIKKworI2VuZGlmIC8qIEVOQUJMRV9TRFJBTV9FQ0MgKi8KKworI2lmbmRlZiBTRENfSEFSRENPREVEX0lOSVQKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBTRFJBTSBTUEQgU3VwcG9ydAorICovCisKKyNkZWZpbmUJU0RfSTJDX0NUUkwxCSgweDQwMCkKKyNkZWZpbmUJU0RfSTJDX0NUUkwyCSgweDQwNCkKKyNkZWZpbmUgU0RfSTJDX1JEX0RBVEEJKDB4NDA4KQorI2RlZmluZSBTRF9JMkNfV1JfREFUQSAJKDB4NDBDKQorCisvKgorICogU0RSQU0gU1BEIFN1cHBvcnQgTWFjcm9zCisgKi8KKworI2RlZmluZSBTUERfRElNTTAJKDB4MDAwMDAxMDApCisjZGVmaW5lIFNQRF9ESU1NMQkoMHgwMDAwMDIwMCkgLyogU1BEX0RJTU0xIHdhcyAweDAwMDAwMDAwICovCisKKyNkZWZpbmUgU1BEX1JESU1NCQkJKDB4MDEpCisjZGVmaW5lIFNQRF9VRElNTQkJCSgweDAyKQorCisjZGVmaW5lIFNQRF9DQVNfMwkJCTB4OAorI2RlZmluZSBTUERfQ0FTXzQJCQkweDEwCisjZGVmaW5lIFNQRF9DQVNfNQkJCTB4MjAKKworI2RlZmluZSBFUlJfTk9fRElNTV9GT1VORAkJKDB4ZGIwKQorI2RlZmluZSBFUlJfVFJBU19GQUlMCQkJKDB4ZGIxKQorI2RlZmluZSBFUlJfVFJDRF9GQUlMCQkJKDB4ZGIyKQorI2RlZmluZSBFUlJfVFJQX0ZBSUwJCQkoMHhkYjMpCisjZGVmaW5lIEVSUl9UV1JfRkFJTAkJCSgweGRiNCkKKyNkZWZpbmUgRVJSX1VOS05PV05fUEFSVAkJKDB4ZGI1KQorI2RlZmluZSBFUlJfTlJBTktfSU5WQUxJRAkJKDB4ZGI2KQorI2RlZmluZSBFUlJfRElNTV9TSVpFCQkJKDB4ZGI3KQorI2RlZmluZSBFUlJfQUREUl9NT0RFCQkJKDB4ZGI4KQorI2RlZmluZSBFUlJfUkZSU0hfUkFURQkJCSgweGRiOSkKKyNkZWZpbmUgRVJSX0RJTU1fVFlQRQkJCSgweGRiYSkKKyNkZWZpbmUgRVJSX0NMX1ZBTFVFCQkJKDB4ZGJiKQorI2RlZmluZSBFUlJfVFJGQ19GQUlMCQkJKDB4ZGJjKQorCisvKiBSRUFEX1NQRCByZXF1aXJlbWVudHM6CisgKiBieXRlIC0gYnl0ZSBhZGRyZXNzIGluIFNQRCBkZXZpY2UgKDAgLSAyNTUpCisgKiByMyA9IHdpbGwgcmV0dXJuIGRhdGEgcmVhZCBmcm9tIEkyQyBCeXRlIGxvY2F0aW9uCisgKiByNCAtIHVuY2hhbmdlZCAoU0RDIGJhc2UgYWRkcikKKyAqIHI1IC0gY2xvYmJlcmVkIGluIHJvdXRpbmUgKEkyQyBzdGF0dXMpCisgKiByMTAgLSBudW1iZXIgb2YgRERSIHNsb3Qgd2hlcmUgZmlyc3QgU1BEIGRldmljZSBpcyBkZXRlY3RlZAorICovCisKKyNkZWZpbmUgUkVBRF9TUEQoYnl0ZV9udW0pCVwKKwlhZGRpcyByMywgMCwgYnl0ZV9udW1AbDtcCisJb3IJcjMsIHIzLCByMTA7XAorCW9yaSByMywgcjMsIDB4MEE7XAorCXN0dyByMywgU0RfSTJDX0NUUkwxKHI0KTtcCisJbGkgcjMsIEkyQ19DTlRSTDJfU1RBUlQ7XAorCXN0dyByMywgU0RfSTJDX0NUUkwyKHI0KTtcCisJZWllaW87XAorCXN5bmM7XAorCWxpIHIzLCAweDEwMDtcCisxOgkJCQk7XAorCWFkZGljLiByMywgcjMsIC0xO1wKKyAJYm5lIDFiO1wKKzI6CQkgIDtcCisJbHd6IHI1LCBTRF9JMkNfQ1RSTDIocjQpO1wKKwlybHdpbm0uCXIzLHI1LDAsMjMsMjM7XAorCWJuZSAyYjtcCisJcmx3aW5tLglyMyxyNSwwLDMsMztcCisJbHd6IHIzLCBTRF9JMkNfUkRfREFUQShyNCkKKworI2RlZmluZSBTUERfTUlOX1JGUlNICSgweDgwKQorI2RlZmluZSBTUERfTUFYX1JGUlNICSgweDg1KQorCityZWZyZXNoX3JhdGVzOiAvKiBpbiBuU2VjICovCisJLmxvbmcJMTU2MjUJLyogTm9ybWFsICgweDgwKSAqLworCS5sb25nCTM5MDAJLyogUmVkdWNlZCAwLjI1eCAoMHg4MSkgKi8KKwkubG9uZwk3ODAwCS8qIFJlZHVjZWQgMC41eCAoMHg4MikgKi8KKwkubG9uZwkzMTMwMAkvKiBFeHRlbmRlZCAyeCAoMHg4MykgKi8KKwkubG9uZwk2MjUwMAkvKiBFeHRlbmRlZCA0eCAoMHg4NCkgKi8KKwkubG9uZwkxMjUwMDAJLyogRXh0ZW5kZWQgOHggKDB4ODUpICovCisKKy8qPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisgKiB0c2kxMDhfc2RyYW1fc3BkCisgKgorICogSW5pdHRpYWxpemVzIFNEUkFNIENvbnRyb2xsZXIgdXNpbmcgRERSMiBESU1NIFNlcmlhbCBQcmVzZW5jZSBEZXRlY3QgZGF0YQorICogVXNlcyByZWdpc3RlcnM6IHI0IC0gU0RDIGJhc2UgYWRkcmVzcyAobm90IGNoYW5nZWQpCisgKgkJCQkgICByOSAtIFNEQyBjbG9ja2luZyBwZXJpb2QgaW4gblNlYworICogQ2hhbmdlcyByZWdpc3RlcnM6IHIzLHI1LHI2LHI3LHI4LHIxMCxyMTEKKyAqPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0qLworCit0c2kxMDhfc2RyYW1fc3BkOgorCisJbGkgcjEwLFNQRF9ESU1NMAorCXhvcglyMTEscjExLHIxMQkJLyogRElNTSBCYXNlIEFkZHJlc3M6IHN0YXJ0cyBmcm9tIDAgKi8KKworZG9fZmlyc3RfZGltbToKKworCS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorCSAqIFByb2dyYW0gUmVmcmVzaCBSYXRlCVJlZ2lzdGVyCisJICovCisKKwlSRUFEX1NQRCgxMikJLyogZ2V0IFJlZnJlc2ggUmF0ZSAqLworCWJlcSBjaGVja19uZXh0X3Nsb3QKKwlsaSByNSwgRVJSX1JGUlNIX1JBVEUKKwljbXBpIDAsMCxyMyxTUERfTUlOX1JGUlNICisJYmxlIHNwZF9mYWlsCisJY21waSAwLDAscjMsU1BEX01BWF9SRlJTSAorCWJndCBzcGRfZmFpbAorCWFkZGkgcjMscjMsLVNQRF9NSU5fUkZSU0gKKwlybHdpbm0gcjMscjMsMiwwLDMxCisJbGlzIHI1LHJlZnJlc2hfcmF0ZXNAaAorCW9yaSByNSxyNSxyZWZyZXNoX3JhdGVzQGwKKwlsd3p4IHI1LHI1LHIzCS8qIGdldCByZWZyZXNoIHJhdGUgaW4gblNlYyAqLworCWRpdnd1IHI1LHI1LHI5CS8qIGNhbGN1bGF0ZSAjIG9mIFNEQyBjbG9ja3MgKi8KKwlzdHcgcjUsU0RfUkVGUkVTSChyNCkJLyogU2V0IHJlZnJlc2ggcmF0ZSAqLworCXN5bmMKKworCS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorCSAqIFByb2dyYW0gU0QgVGltaW5nIFJlZ2lzdGVyCisJICovCisKKwlsaSByNywgMAkJLyogY2xlYXIgcjcgcHJpb3IgcGFyYW1ldGVyIGNvbGxlY3Rpb24gKi8KKworCVJFQURfU1BEKDIwKQkvKiBnZXQgRElNTSB0eXBlOiBSZWdpc3RlcmVkIG9yIFVuYnVmZmVyZWQgKi8KKwliZXEJc3BkX3JlYWRfZmFpbAorCWxpIHI1LCBFUlJfRElNTV9UWVBFCisJY21waSAwLDAscjMsU1BEX1VESU1NCisJYmVxIGRvX2NsCisJY21waSAwLDAscjMsU1BEX1JESU1NCisJYm5lIHNwZF9mYWlsCisJb3JpcyByNyxyNywweDEwMDAJLyogc2V0IFNEX1RJTUlOR1tESU1NX1RZUEVdIGJpdCAqLworCitkb19jbDoKKwlSRUFEX1NQRCgxOCkJLyogR2V0IENBUyBMYXRlbmN5ICovCisJYmVxCXNwZF9yZWFkX2ZhaWwKKwlsaSByNSxFUlJfQ0xfVkFMVUUKKwlhbmRpLiByNixyMyxTUERfQ0FTXzMKKwliZXEgY2xfNAorCWxpIHI2LDMKKwliIHNldF9jbAorY2xfNDoKKwlhbmRpLiByNixyMyxTUERfQ0FTXzQKKwliZXEgY2xfNQorCWxpIHI2LDQKKwliIHNldF9jbAorY2xfNToKKwlhbmRpLiByNixyMyxTUERfQ0FTXzUKKwliZXEgc3BkX2ZhaWwKKwlsaSByNiw1CitzZXRfY2w6CisJcmx3aW1pIHI3LHI2LDI0LDUsNworCisJUkVBRF9TUEQoMzApCS8qIEdldCB0UkFTICovCisJYmVxCXNwZF9yZWFkX2ZhaWwKKwlkaXZ3dSByNixyMyxyOQorCW11bGx3IHI4LHI2LHI5CisJc3ViZi4gcjgscjgscjMKKwliZXEJc2V0X3RyYXMKKwlhZGRpIHI2LHI2LDEKK3NldF90cmFzOgorCWxpIHI1LEVSUl9UUkFTX0ZBSUwKKwljbXBpIDAsMCxyNiwweDBGCS8qIG1heCBzdXBwb3J0ZWQgdmFsdWUgKi8KKwliZ3Qgc3BkX2ZhaWwKKwlybHdpbWkgcjcscjYsMTYsMTIsMTUKKworCVJFQURfU1BEKDI5KQkvKiBHZXQgdFJDRCAqLworCWJlcQlzcGRfcmVhZF9mYWlsCisJcmx3aW5tIHIzLHIzLDMwLDIsMzEvKiByaWdodCBzaGlmdCB0UkNEIGJ5IDIgYml0cyBhcyBwZXIgRERSMiBzcGVjICovCisJZGl2d3UgcjYscjMscjkKKwltdWxsdyByOCxyNixyOQorCXN1YmYuIHI4LHI4LHIzCisJYmVxCXNldF90cmNkCisJYWRkaSByNixyNiwxCitzZXRfdHJjZDoKKwlsaSByNSxFUlJfVFJDRF9GQUlMCisJY21waSAwLDAscjYsMHgwNwkvKiBtYXggc3VwcG9ydGVkIHZhbHVlICovCisJYmd0IHNwZF9mYWlsCisJcmx3aW1pIHI3LHI2LDEyLDE3LDE5CisKKwlSRUFEX1NQRCgyNykJLyogR2V0IHRSUCB2YWx1ZSAqLworCWJlcQlzcGRfcmVhZF9mYWlsCisJcmx3aW5tIHIzLHIzLDMwLDIsMzEJLyogcmlnaHQgc2hpZnQgdFJQIGJ5IDIgYml0cyBhcyBwZXIgRERSMiBzcGVjICovCisJZGl2d3UgcjYscjMscjkKKwltdWxsdyByOCxyNixyOQorCXN1YmYuIHI4LHI4LHIzCisJYmVxCXNldF90cnAKKwlhZGRpIHI2LHI2LDEKK3NldF90cnA6CisJbGkgcjUsRVJSX1RSUF9GQUlMCisJY21waSAwLDAscjYsMHgwNwkvKiBtYXggc3VwcG9ydGVkIHZhbHVlICovCisJYmd0IHNwZF9mYWlsCisJcmx3aW1pIHI3LHI2LDgsMjEsMjMKKworCVJFQURfU1BEKDM2KQkvKiBHZXQgdFdSIHZhbHVlICovCisJYmVxCXNwZF9yZWFkX2ZhaWwKKwlybHdpbm0gcjMscjMsMzAsMiwzMQkvKiByaWdodCBzaGlmdCB0V1IgYnkgMiBiaXRzIGFzIHBlciBERFIyIHNwZWMgKi8KKwlkaXZ3dSByNixyMyxyOQorCW11bGx3IHI4LHI2LHI5CisJc3ViZi4gcjgscjgscjMKKwliZXEJc2V0X3R3cgorCWFkZGkgcjYscjYsMQorc2V0X3R3cjoKKwlhZGRpIHI2LHI2LC0xCQkvKiBUc2kxMDggU0RDIGFsd2F5cyBnaXZlcyBvbmUgZXh0cmEgY2xvY2sgKi8KKwlsaSByNSxFUlJfVFdSX0ZBSUwKKwljbXBpIDAsMCxyNiwweDA3CS8qIG1heCBzdXBwb3J0ZWQgdmFsdWUgKi8KKwliZ3Qgc3BkX2ZhaWwKKwlybHdpbWkgcjcscjYsNSwyNCwyNgorCisJUkVBRF9TUEQoNDIpCS8qIEdldCB0UkZDICovCisJYmVxCXNwZF9yZWFkX2ZhaWwKKwlsaSByNSwgRVJSX1RSRkNfRkFJTAorCS8qIFRzaTEwOCBzcGVjOiB0UkZDPSh0UkZDICsgMSkvMiAqLworCWFkZGkgcjMscjMsMQorCXJsd2lubS4gcjMscjMsMzEsMSwzMSAvKiBkaXZpZGUgYnkgMiAqLworCWJlcSBzcGRfZmFpbAorCWRpdnd1IHI2LHIzLHI5CisJbXVsbHcgcjgscjYscjkKKwlzdWJmLiByOCxyOCxyMworCWJlcQlzZXRfdHJmYworCWFkZGkgcjYscjYsMQorc2V0X3RyZmM6CisJY21waSAwLDAscjYsMHgxRgkvKiBtYXggc3VwcG9ydGVkIHZhbHVlICovCisJYmd0IHNwZF9mYWlsCisJcmx3aW1pIHI3LHI2LDAsMjcsMzEKKworCXN0dwlyNyxTRF9USU1JTkcocjQpCisJc3luYworCisJLyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKwkgKiBUaGUgZm9sbG93aW5nIHR3byByZWdpc3RlcnMgYXJlIHNldCBvbiBwZXItRElNTSBiYXNpcy4KKwkgKiBUaGUgU0RfUkVGUkVTSCBhbmQgU0RfVElNSU5HIHNldHRpbmdzIGFyZSBjb21tb24gZm9yIGJvdGggRElNTVMKKwkgKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCSAqLworCitkb19lYWNoX2RpbW06CisKKwkvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKwkgKiBQcm9ncmFtIFNEUkFNIERJTU0gQ29udHJvbCBSZWdpc3RlcgorCSAqLworCisJbGkgcjcsIDAJCS8qIGNsZWFyIHI3IHByaW9yIHBhcmFtZXRlciBjb2xsZWN0aW9uICovCisKKwlSRUFEX1NQRCgxMykJCS8qIEdldCBQcmltYXJ5IFNEUkFNIFdpZHRoICovCisJYmVxCXNwZF9yZWFkX2ZhaWwKKwljbXBpIDAsMCxyMyw0CS8qIENoZWNrIGZvciA0LWJpdCBTRFJBTSAqLworCWJlcSBkb19uYmFuaworCW9yaXMgcjcscjcsMHgwMDEwCS8qIFNldCBNRU1fV0lEVEggYml0ICovCisKK2RvX25iYW5rOgorCVJFQURfU1BEKDE3KQkJLyogR2V0IE51bWJlciBvZiBiYW5rcyBvbiBTRFJBTSBkZXZpY2UgKi8KKwliZXEJc3BkX3JlYWRfZmFpbAorCS8qIEdyZW5kZWwgb25seSBkaXN0aW5ndWlzaCBiZXR3LiA0IG9yIDgtYmFuayBtZW1vcnkgcGFydHMgKi8KKwlsaSByNSxFUlJfVU5LTk9XTl9QQVJUCS8qIG5vbi1zdXBwb3J0ZWQgbWVtb3J5IHBhcnQgKi8KKwljbXBpIDAsMCxyMyw0CisJYmVxIGRvX25yYW5rCisJY21waSAwLDAscjMsOAorCWJuZSBzcGRfZmFpbAorCW9yaSByNyxyNywweDEwMDAKKworZG9fbnJhbms6CisJUkVBRF9TUEQoNSkJLyogR2V0ICMgb2YgUmFua3MgKi8KKwliZXEJc3BkX3JlYWRfZmFpbAorCWxpIHI1LEVSUl9OUkFOS19JTlZBTElECisJYW5kaS4gcjYscjMsMHg3CS8qIFVzZSBiaXRzIFsyLi4wXSBvbmx5ICovCisJYmVxIGRvX2FkZHJfbW9kZQorCWNtcGkgMCwwLHI2LDEKKwliZ3Qgc3BkX2ZhaWwKKwlybHdpbWkgcjcscjYsOCwyMywyMworCitkb19hZGRyX21vZGU6CisJUkVBRF9TUEQoNCkJLyogR2V0ICMgb2YgQ29sdW1uIEFkZHJlc3NlcyAqLworCWJlcQlzcGRfcmVhZF9mYWlsCisJbGkgcjUsIEVSUl9BRERSX01PREUKKwlhbmRpLiByMyxyMywweDBmCS8qIGN1dCBvZmYgcmVzZXJ2ZWQgYml0cyAqLworCWNtcGkgMCwwLHIzLDgKKwlibGUgc3BkX2ZhaWwKKwljbXBpIDAsMCxyMywxNQorCWJndCBzcGRfZmFpbAorCWFkZGkgcjYscjMsLTgJLyogY2FsY3VsYXRlIEFERFJfTU9ERSBwYXJhbWV0ZXIgKi8KKwlybHdpbWkgcjcscjYsNCwyNCwyNwkvKiBzZXQgQUREUl9NT0RFIGZpZWxkICovCisKK3NldF9kaW1tX2N0cmw6CisjaWZkZWYgU0RDX0FVVE9QUkVDSF9FTgorICAgIG9yaXMgcjcscjcsMHgwMDAxICAgLyogc2V0IGF1dG8gcHJlY2hhcmdlIEVOIGJpdCAqLworI2VuZGlmCisJb3JpIHI3LHI3LDEJLyogc2V0IEVOQUJMRSBiaXQgKi8KKwljbXBpIDAsMCxyMTAsU1BEX0RJTU0wCisJYm5lIDFmCisJc3R3IHI3LFNEX0QwX0NUUkwocjQpCisJc3luYworCWIgc2V0X2RpbW1fYmFyCisxOgorCXN0dyByNyxTRF9EMV9DVFJMKHI0KQorCXN5bmMKKworCisJLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisJICogUHJvZ3JhbSBTRFJBTSBESU1NeCBCYXNlIEFkZHJlc3MgUmVnaXN0ZXIKKwkgKi8KKworc2V0X2RpbW1fYmFyOgorCVJFQURfU1BEKDUpCQkvKiBnZXQgIyBvZiBSYW5rcyAqLworCWJlcQlzcGRfcmVhZF9mYWlsCisJYW5kaS5yNyxyMywweDcKKwlhZGRpIHI3LHI3LDEKKwlSRUFEX1NQRCgzMSkJLyogUmVhZCBESU1NIHJhbmsgZGVuc2l0eSAqLworCWJlcQlzcGRfcmVhZF9mYWlsCisJcmx3aW5tIHI1LHIzLDI3LDI5LDMxCisJcmx3aW5tIHI2LHIzLDMsMjQsMjgKKwlvciByNSxyNixyNQkJLyogcjUgPSBOb3JtYWxpemVkIFJhbmsgRGVuc2l0eSBieXRlICovCisJbGlzIHI4LCAweDAwODAJCS8qIDEyOE1CID4+IDQgKi8KKwltdWxsdyByOCxyOCxyNQkJLyogcjggPSAocmFua19zaXplID4+IDQpICovCisJbXVsbHcgcjgscjgscjcJCS8qIHI4ID0gKERJTU1fc2l6ZSA+PiA0KSAqLworCW5lZyByNyxyOAorCXJsd2lubSByNyxyNywyOCw0LDMxCisJb3IgcjcscjcscjExCQkvKiBzZXQgQUREUiBmaWVsZCAqLworCXJsd2lubSByOCxyOCwxMiwyMCwzMQorCWFkZCByMTEscjExLHI4CQkvKiBzZXQgQmFzZSBBZGRyIGZvciBuZXh0IERJTU0gKi8KKworCWNtcGkgMCwwLHIxMCxTUERfRElNTTAKKwlibmUgc2V0X2RpbW0xX3NpemUKKwlzdHcgcjcsU0RfRDBfQkFSKHI0KQorCXN5bmMKKwlsaSByMTAsU1BEX0RJTU0xCisJUkVBRF9TUEQoMCkKKwlibmUgZG9fZWFjaF9kaW1tCisJYiBzcGRfZG9uZQorCitzZXRfZGltbTFfc2l6ZToKKwlzdHcgcjcsU0RfRDFfQkFSKHI0KQorCXN5bmMKK3NwZF9kb25lOgorCWJscgorCitjaGVja19uZXh0X3Nsb3Q6CisJY21waSAwLDAscjEwLFNQRF9ESU1NMQorCWJlcSBzcGRfcmVhZF9mYWlsCisJbGkgcjEwLFNQRF9ESU1NMQorCWIgZG9fZmlyc3RfZGltbQorc3BkX3JlYWRfZmFpbDoKKwlvcmkJcjMscjAsMHhkZWFkCisJYiBlcnJfaHVuZworc3BkX2ZhaWw6CisJbGkJcjMsMHgwYmFkCisJc3luYworZXJyX2h1bmc6ICAgLyogaGFuZyBoZXJlIGZvciBkZWJ1Z2dpbmcgKi8KKyAgICBub3AKKyAgICBub3AKKyAgICBiIGVycl9odW5nCisKKyNlbmRpZiAvKiAhU0RDX0hBUkRDT0RFRF9JTklUICovCisgICAgICAgCmRpZmYgLS1naXQgYS9ib2FyZC9tcGM3NDQ4aHBjMi9jb25maWcubWsgYi9ib2FyZC9tcGM3NDQ4aHBjMi9jb25maWcubWsKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmU1ODg1OAotLS0gL2Rldi9udWxsCisrKyBiL2JvYXJkL21wYzc0NDhocGMyL2NvbmZpZy5tawpAQCAtMCwwICsxLDI4IEBACisjCisjIENvcHlyaWdodCAoYykgMjAwNSBGcmVlc2NhbGUgU2VtaWNvbmR1Y3RvciwgSW5jLgorIworIyBTZWUgZmlsZSBDUkVESVRTIGZvciBsaXN0IG9mIHBlb3BsZSB3aG8gY29udHJpYnV0ZWQgdG8gdGhpcworIyBwcm9qZWN0LgorIworIyBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisjIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzCisjIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mCisjIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorIworIyBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyMgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyMgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorIyBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorIworIyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorIyBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorIyBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLAorIyBNQSAwMjExMS0xMzA3IFVTQQorIworCisjIEZsYXNoIGFkZHJlc3MKK1RFWFRfQkFTRSA9IDB4RkYwMDAwMDAKKyMgUkFNIGFkZHJlc3MKKyNURVhUX0JBU0UgPSAweDAwNDAwMDAwCisKK1BMQVRGT1JNX0NQUEZMQUdTICs9IC1EVEVYVF9CQVNFPSQoVEVYVF9CQVNFKSAtbWFsdGl2ZWMgLW1hYmk9YWx0aXZlYyAtbXNvZnQtZmxvYXQKZGlmZiAtLWdpdCBhL2JvYXJkL21wYzc0NDhocGMyL21wYzc0NDhocGMyLmMgYi9ib2FyZC9tcGM3NDQ4aHBjMi9tcGM3NDQ4aHBjMi5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmY5MGE3NTEKLS0tIC9kZXYvbnVsbAorKysgYi9ib2FyZC9tcGM3NDQ4aHBjMi9tcGM3NDQ4aHBjMi5jCkBAIC0wLDAgKzEsNDg5IEBACisvKgorICogKEMpIENvcHlyaWdodCAyMDA1IEZyZWVzY2FsZSBTZW1pY29uZHVjdG9yLCBJbmMuCisgKgorICogUm95IFphbmcgPHRpZS1mZWkuemFuZ0BmcmVlc2NhbGUuY29tPgorICoKKyAqIFNlZSBmaWxlIENSRURJVFMgZm9yIGxpc3Qgb2YgcGVvcGxlIHdobyBjb250cmlidXRlZCB0byB0aGlzCisgKiBwcm9qZWN0LgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZgorICogdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sCisgKiBNQSAwMjExMS0xMzA3IFVTQQorICoKKyAqIG1vZGlmaWNhdGlvbnMgZm9yIHRoZSBUc2kxMDggRW11bCBCb2FyZCBieSBhdmJAVHVuZHJhCisgKi8KKworLyoKKyAqIGJvYXJkIHN1cHBvcnQvaW5pdCBmdW5jdGlvbnMgZm9yIHRoZSAKKyAqIEZyZWVzY2FsZSBNUEM3NDQ4IEhQQzIgKEhpZ2gtUGVyZm9ybWFuY2UgQ29tcHV0aW5nIDIgUGxhdGZvcm0pLgorICovCisKKyNpbmNsdWRlIDxjb21tb24uaD4KKyNpbmNsdWRlIDw3NHh4Xzd4eC5oPgorI2lmIGRlZmluZWQoQ09ORklHX09GX0ZMQVRfVFJFRSkKKyNpbmNsdWRlIDxmdF9idWlsZC5oPgorZXh0ZXJuIHZvaWQgZnRfY3B1X3NldHVwKHZvaWQgKmJsb2IsIGJkX3QgKmJkKTsKKyNlbmRpZgorCisjdW5kZWYJREVCVUcKKworZXh0ZXJuIHZvaWQgZmx1c2hfZGF0YV9jYWNoZSh2b2lkKTsKK2V4dGVybiB2b2lkIGludmFsaWRhdGVfbDFfaW5zdHJ1Y3Rpb25fY2FjaGUodm9pZCk7CitleHRlcm4gdm9pZCB0c2kxMDhfaW5pdF9mKHZvaWQpOworCitpbnQgZGlzcGxheV9tZW1fbWFwKHZvaWQpOworCit2b2lkIGFmdGVyX3JlbG9jKHVsb25nIGRlc3RfYWRkcikKK3sKKwlERUNMQVJFX0dMT0JBTF9EQVRBX1BUUjsKKwkKKwkvKgorCSAqIEp1bXAgdG8gdGhlIG1haW4gVS1Cb290IGJvYXJkIGluaXQgY29kZQorCSAqLworCWJvYXJkX2luaXRfcigoZ2RfdCAqKSBnZCwgZGVzdF9hZGRyKTsKKwkvKiBOT1RSRUFDSEVEICovCit9CisKKy8qCisgKiBDaGVjayBCb2FyZCBJZGVudGl0eToKKyAqCisgKiByZXBvcnQgYm9hcmQgdHlwZQorICovCisKK2ludCBjaGVja2JvYXJkKHZvaWQpCit7CisJaW50IGxfdHlwZSA9IDA7CisKKwlwcmludGYoIkJPQVJEOiAlc1xuIiwgQ0ZHX0JPQVJEX05BTUUpOworCXJldHVybiAobF90eXBlKTsKK30KKworLyoKKyAqIFJlYWQgUHJvY2Vzc29yIElEOgorICoKKyAqIHJlcG9ydCBjYWxsaW5nIHByb2Nlc3NvciBudW1iZXIKKyAqLworCitpbnQgcmVhZF9waWQodm9pZCkKK3sKKwlyZXR1cm4gMDsJCS8qIHdlIGFyZSBvbiBzaW5nbGUgQ1BVIHBsYXRmb3JtIGZvciBhIHdoaWxlICovCit9CisKK2xvbmcgaW50IGRyYW1fc2l6ZShpbnQgYm9hcmRfdHlwZSkKK3sKKwlyZXR1cm4gMHgyMDAwMDAwMDsJLyogMjU2TSBieXRlcyAqLworfQorCitsb25nIGludCBpbml0ZHJhbShpbnQgYm9hcmRfdHlwZSkKK3sKKwlyZXR1cm4gZHJhbV9zaXplKGJvYXJkX3R5cGUpOworfQorCisvKiBEUkFNIGNoZWNrIHJvdXRpbmVzIGNvcGllZCBmcm9tIGd3ODI2MCAqLworCisjaWYgZGVmaW5lZCAoQ0ZHX0RSQU1fVEVTVCkKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qIE5BTUU6ICBtb3ZlNjQoKSAtICBtb3ZlcyBhIGRvdWJsZSB3b3JkICg2NC1iaXQpCQkgICAgICovCisvKgkJCQkJCQkJICAgICAqLworLyogREVTQ1JJUFRJT046CQkJCQkJCSAgICAgKi8KKy8qICAgdGhpcyBmdW5jdGlvbiBwZXJmb3JtcyBhIGRvdWJsZSB3b3JkIG1vdmUgZnJvbSB0aGUgZGF0YSBhdAkgICAgICovCisvKiAgIHRoZSBzb3VyY2UgcG9pbnRlciB0byB0aGUgbG9jYXRpb24gYXQgdGhlIGRlc3RpbmF0aW9uIHBvaW50ZXIuICAqLworLyoJCQkJCQkJCSAgICAgKi8KKy8qIElOUFVUUzoJCQkJCQkJICAgICAqLworLyogICB1bnNpZ25lZCBsb25nIGxvbmcgKnNyYyAgLSBwb2ludGVyIHRvIGRhdGEgdG8gbW92ZQkJICAgICAqLworLyoJCQkJCQkJCSAgICAgKi8KKy8qIE9VVFBVVFM6CQkJCQkJCSAgICAgKi8KKy8qICAgdW5zaWduZWQgbG9uZyBsb25nICpkZXN0IC0gcG9pbnRlciB0byBsb2NhdGUgdG8gbW92ZSBkYXRhCSAgICAgKi8KKy8qCQkJCQkJCQkgICAgICovCisvKiBSRVRVUk5TOgkJCQkJCQkgICAgICovCisvKiAgIE5vbmUJCQkJCQkJICAgICAqLworLyoJCQkJCQkJCSAgICAgKi8KKy8qIFJFU1RSSUNUSU9OUy9MSU1JVEFUSU9OUzoJCQkJCSAgICAgKi8KKy8qICAgTWF5IGNsb29iZXIgZnIwLgkJCQkJCSAgICAgKi8KKy8qCQkJCQkJCQkgICAgICovCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworc3RhdGljIHZvaWQgbW92ZTY0KHVuc2lnbmVkIGxvbmcgbG9uZyAqc3JjLCB1bnNpZ25lZCBsb25nIGxvbmcgKmRlc3QpCit7CisJYXNtKCJsZmQgIDAsIDAoMylcblx0IgkvKiBmcHIwICAgPSAgKnNjciAgICAgICAqLworCSAgICAic3RmZCAwLCAwKDQpIgkvKiAqZGVzdCAgPSAgZnByMCAgICAgICAqLworICAgICAgOiA6IDoiZnIwIik7CQkvKiBDbG9iYmVycyBmcjAgICAgICAgICAqLworCXJldHVybjsKK30KKworI2lmIGRlZmluZWQgKENGR19EUkFNX1RFU1RfREFUQSkKKwordW5zaWduZWQgbG9uZyBsb25nIHBhdHRlcm5bXSA9IHsKKwkweGFhYWFhYWFhYWFhYWFhYWFVTEwsCisJMHhjY2NjY2NjY2NjY2NjY2NjVUxMLAorCTB4ZjBmMGYwZjBmMGYwZjBmMFVMTCwKKwkweGZmMDBmZjAwZmYwMGZmMDBVTEwsCisJMHhmZmZmMDAwMGZmZmYwMDAwVUxMLAorCTB4ZmZmZmZmZmYwMDAwMDAwMFVMTCwKKwkweDAwMDAwMDAwZmZmZmZmZmZVTEwsCisJMHgwMDAwZmZmZjAwMDBmZmZmVUxMLAorCTB4MDBmZjAwZmYwMGZmMDBmZlVMTCwKKwkweDBmMGYwZjBmMGYwZjBmMGZVTEwsCisJMHgzMzMzMzMzMzMzMzMzMzMzVUxMLAorCTB4NTU1NTU1NTU1NTU1NTU1NVVMTAorfTsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qIE5BTUU6ICBtZW1fdGVzdF9kYXRhKCkgLSAgdGVzdCBkYXRhIGxpbmVzIGZvciBzaG9ydHMgYW5kIG9wZW5zICAgICovCisvKgkJCQkJCQkJICAgICAqLworLyogREVTQ1JJUFRJT046CQkJCQkJCSAgICAgKi8KKy8qICAgVGVzdHMgZGF0YSBsaW5lcyBmb3Igc2hvcnRzIGFuZCBvcGVucyBieSBmb3JjaW5nIGFkamFjZW50IGRhdGEgICovCisvKiAgIHRvIG9wcG9zaXRlIHN0YXRlcy4gQmVjYXVzZSB0aGUgZGF0YSBsaW5lcyBjb3VsZCBiZSByb3V0ZWQgaW4gICAqLworLyogICBhbiBhcmJpdHJhcnkgbWFubmVyIHRoZSBtdXN0IGVuc3VyZSB0ZXN0IHBhdHRlcm5zIGVuc3VyZSB0aGF0ICAgKi8KKy8qICAgZXZlcnkgY2FzZSBpcyB0ZXN0ZWQuIEJ5IHVzaW5nIHRoZSBmb2xsb3dpbmcgc2VyaWVzIG9mIGJpbmFyeSAgICovCisvKiAgIHBhdHRlcm5zIGV2ZXJ5IGNvbWJpbmF0aW9uIG9mIGFkamFjZW50IGJpdHMgaXMgdGVzdCByZWdhcmRsZXNzICAqLworLyogICBvZiByb3V0aW5nLgkJCQkJCSAgICAgKi8KKy8qCQkJCQkJCQkgICAgICovCisvKiAgICAgLi4uMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwCQkJCSAgICAgKi8KKy8qICAgICAuLi4xMTAwMTEwMDExMDAxMTAwMTEwMDExMDAJCQkJICAgICAqLworLyogICAgIC4uLjExMTEwMDAwMTExMTAwMDAxMTExMDAwMAkJCQkgICAgICovCisvKiAgICAgLi4uMTExMTExMTEwMDAwMDAwMDExMTExMTExCQkJCSAgICAgKi8KKy8qCQkJCQkJCQkgICAgICovCisvKiAgIENhcnJ5aW5nIHRoaXMgb3V0LCBnaXZlcyB1cyBzaXggaGV4IHBhdHRlcm5zIGFzIGZvbGxvd3M6CSAgICAgKi8KKy8qCQkJCQkJCQkgICAgICovCisvKiAgICAgMHhhYWFhYWFhYWFhYWFhYWFhCQkJCQkgICAgICovCisvKiAgICAgMHhjY2NjY2NjY2NjY2NjY2NjCQkJCQkgICAgICovCisvKiAgICAgMHhmMGYwZjBmMGYwZjBmMGYwCQkJCQkgICAgICovCisvKiAgICAgMHhmZjAwZmYwMGZmMDBmZjAwCQkJCQkgICAgICovCisvKiAgICAgMHhmZmZmMDAwMGZmZmYwMDAwCQkJCQkgICAgICovCisvKiAgICAgMHhmZmZmZmZmZjAwMDAwMDAwCQkJCQkgICAgICovCisvKgkJCQkJCQkJICAgICAqLworLyogICBUaGUgbnVtYmVyIHRlc3QgcGF0dGVybnMgd2lsbCBhbHdheXMgYmUgZ2l2ZW4gYnk6CQkgICAgICovCisvKgkJCQkJCQkJICAgICAqLworLyogICBsb2coYmFzZSAyKShudW1iZXIgZGF0YSBiaXRzKSA9IGxvZzIgKDY0KSA9IDYJCSAgICAgKi8KKy8qCQkJCQkJCQkgICAgICovCisvKiAgIFRvIHRlc3QgZm9yIHNob3J0IGFuZCBvcGVucyB0byBvdGhlciBzaWduYWxzIG9uIG91ciBib2FyZHMuIHdlICAqLworLyogICBzaW1wbHkJCQkJCQkJICAgICAqLworLyogICB0ZXN0IHdpdGggdGhlIDEncyBjb21wbGVtbnQgb2YgdGhlIHBhdGVybnMgYXMgd2VsbC4JICAgICAqLworLyoJCQkJCQkJCSAgICAgKi8KKy8qIE9VVFBVVFM6CQkJCQkJCSAgICAgKi8KKy8qICAgRGlzcGxheXMgZmFpbGluZyB0ZXN0IHBhdHRlcm4JCQkJICAgICAqLworLyoJCQkJCQkJCSAgICAgKi8KKy8qIFJFVFVSTlM6CQkJCQkJCSAgICAgKi8KKy8qICAgMCAtICBQYXNzZWQgdGVzdAkJCQkJCSAgICAgKi8KKy8qICAgMSAtICBGYWlsZWQgdGVzdAkJCQkJCSAgICAgKi8KKy8qCQkJCQkJCQkgICAgICovCisvKiBSRVNUUklDVElPTlMvTElNSVRBVElPTlM6CQkJCQkgICAgICovCisvKiAgQXNzdW1lcyBvbmx5IG9uZSBvbmUgU0RSQU0gYmFuawkJCQkgICAgICovCisvKgkJCQkJCQkJICAgICAqLworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KK2ludCBtZW1fdGVzdF9kYXRhKHZvaWQpCit7CisJdW5zaWduZWQgbG9uZyBsb25nICpwbWVtID0gKHVuc2lnbmVkIGxvbmcgbG9uZyAqKUNGR19NRU1URVNUX1NUQVJUOworCXVuc2lnbmVkIGxvbmcgbG9uZyB0ZW1wNjQ7CisJaW50IG51bV9wYXR0ZXJucyA9IHNpemVvZihwYXR0ZXJuKSAvIHNpemVvZihwYXR0ZXJuWzBdKTsKKwlpbnQgaTsKKwl1bnNpZ25lZCBpbnQgaGksIGxvOworCisJZm9yIChpID0gMDsgaSA8IG51bV9wYXR0ZXJuczsgaSsrKSB7CisJCW1vdmU2NCgmKHBhdHRlcm5baV0pLCBwbWVtKTsKKwkJbW92ZTY0KHBtZW0sICZ0ZW1wNjQpOworCisJCS8qIGhpID0gKHRlbXA2ND4+MzIpICYgMHhmZmZmZmZmZjsgICAgICAgICAgKi8KKwkJLyogbG8gPSB0ZW1wNjQgJiAweGZmZmZmZmZmOyAgICAgICAgICAgICAgICAqLworCQkvKiBwcmludGYoIlxudGVtcDY0ID0gMHglMDh4JTA4eCIsIGhpLCBsbyk7ICovCisKKwkJaGkgPSAocGF0dGVybltpXSA+PiAzMikgJiAweGZmZmZmZmZmOworCQlsbyA9IHBhdHRlcm5baV0gJiAweGZmZmZmZmZmOworCQkvKiBwcmludGYoIlxucGF0dGVyblslZF0gPSAweCUwOHglMDh4IiwgaSwgaGksIGxvKTsgICovCisKKwkJaWYgKHRlbXA2NCAhPSBwYXR0ZXJuW2ldKSB7CisJCQlwcmludGYoIlxuICAgRGF0YSBUZXN0IEZhaWxlZCwgcGF0dGVybiAweCUwOHglMDh4IiwKKwkJCSAgICAgICBoaSwgbG8pOworCQkJcmV0dXJuIDE7CisJCX0KKwl9CisKKwlyZXR1cm4gMDsKK30KKyNlbmRpZgkvKiBDRkdfRFJBTV9URVNUX0RBVEEgKi8KKworI2lmIGRlZmluZWQgKENGR19EUkFNX1RFU1RfQUREUkVTUykKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKiBOQU1FOiAgbWVtX3Rlc3RfYWRkcmVzcygpIC0JdGVzdCBhZGRyZXNzIGxpbmVzCQkgICAgICovCisvKgkJCQkJCQkJICAgICAqLworLyogREVTQ1JJUFRJT046CQkJCQkJCSAgICAgKi8KKy8qICAgVGhpcyBmdW5jdGlvbiBwZXJmb3JtcyBhIHRlc3QgdG8gdmVyaWZ5IHRoYXQgZWFjaCB3b3JkIGltCSAgICAgKi8KKy8qICAgbWVtb3J5IGlzIHVuaXF1bHkgYWRkcmVzc2FibGUuIFRoZSB0ZXN0IHNlcXVlbmNlIGlzIGFzIGZvbGxvd3M6ICovCisvKgkJCQkJCQkJICAgICAqLworLyogICAxKSB3cml0ZSB0aGUgYWRkcmVzcyBvZiBlYWNoIHdvcmQgdG8gZWFjaCB3b3JkLgkJICAgICAqLworLyogICAyKSB2ZXJpZnkgdGhhdCBlYWNoIGxvY2F0aW9uIGVxdWFscyBpdHMgYWRkcmVzcwkJICAgICAqLworLyoJCQkJCQkJCSAgICAgKi8KKy8qIE9VVFBVVFM6CQkJCQkJCSAgICAgKi8KKy8qICAgRGlzcGxheXMgZmFpbGluZyB0ZXN0IHBhdHRlcm4gYW5kIGFkZHJlc3MJCQkgICAgICovCisvKgkJCQkJCQkJICAgICAqLworLyogUkVUVVJOUzoJCQkJCQkJICAgICAqLworLyogICAwIC0gIFBhc3NlZCB0ZXN0CQkJCQkJICAgICAqLworLyogICAxIC0gIEZhaWxlZCB0ZXN0CQkJCQkJICAgICAqLworLyoJCQkJCQkJCSAgICAgKi8KKy8qIFJFU1RSSUNUSU9OUy9MSU1JVEFUSU9OUzoJCQkJCSAgICAgKi8KKy8qCQkJCQkJCQkgICAgICovCisvKgkJCQkJCQkJICAgICAqLworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KK2ludCBtZW1fdGVzdF9hZGRyZXNzKHZvaWQpCit7CisJdm9sYXRpbGUgdW5zaWduZWQgaW50ICpwbWVtID0KKwkgICAgKHZvbGF0aWxlIHVuc2lnbmVkIGludCAqKUNGR19NRU1URVNUX1NUQVJUOworCWNvbnN0IHVuc2lnbmVkIGludCBzaXplID0gKENGR19NRU1URVNUX0VORCAtIENGR19NRU1URVNUX1NUQVJUKSAvIDQ7CisJdW5zaWduZWQgaW50IGk7CisKKwkvKiB3cml0ZSBhZGRyZXNzIHRvIGVhY2ggbG9jYXRpb24gKi8KKwlmb3IgKGkgPSAwOyBpIDwgc2l6ZTsgaSsrKSB7CisJCXBtZW1baV0gPSBpOworCX0KKworCS8qIHZlcmlmeSBlYWNoIGxvYWN0aW9uICovCisJZm9yIChpID0gMDsgaSA8IHNpemU7IGkrKykgeworCQlpZiAocG1lbVtpXSAhPSBpKSB7CisJCQlwcmludGYoIlxuICAgQWRkcmVzcyBUZXN0IEZhaWxlZCBhdCAweCV4IiwgaSk7CisJCQlyZXR1cm4gMTsKKwkJfQorCX0KKwlyZXR1cm4gMDsKK30KKyNlbmRpZgkJCQkvKiBDRkdfRFJBTV9URVNUX0FERFJFU1MgKi8KKworI2lmIGRlZmluZWQgKENGR19EUkFNX1RFU1RfV0FMSykKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKiBOQU1FOiAgIG1lbV9tYXJjaCgpIC0gIG1lbW9yeSBtYXJjaAkJCQkgICAgICovCisvKgkJCQkJCQkJICAgICAqLworLyogREVTQ1JJUFRJT046CQkJCQkJCSAgICAgKi8KKy8qICAgTWFyY2hlcyB1cCB0aHJvdWdoIG1lbW9yeS4gQXQgZWFjaCBsb2NhdGlvbiB2ZXJpZmllcyBybWFzayBpZiAgICovCisvKiAgIHJlYWQgPSAxLiBBdCBlYWNoIGxvY2F0aW9uIHdyaXRlIHdtYXNrIGlmCXdyaXRlID0gMS4gRGlzcGxheXMgICovCisvKiAgIGZhaWxpbmcgYWRkcmVzcyBhbmQgcGF0dGVybi4JCQkJICAgICAqLworLyoJCQkJCQkJCSAgICAgKi8KKy8qIElOUFVUUzoJCQkJCQkJICAgICAqLworLyogICB2b2xhdGlsZSB1bnNpZ25lZCBsb25nIGxvbmcgKiBiYXNlIC0gc3RhcnQgYWRkcmVzcyBvZiB0ZXN0CSAgICAgKi8KKy8qICAgdW5zaWduZWQgaW50IHNpemUgLSBudW1iZXIgb2YgZHdvcmRzKDY0LWJpdCkgdG8gdGVzdAkgICAgICovCisvKiAgIHVuc2lnbmVkIGxvbmcgbG9uZyBybWFzayAtIHJlYWQgdmVyaWZ5IG1hc2sJCSAgICAgKi8KKy8qICAgdW5zaWduZWQgbG9uZyBsb25nIHdtYXNrIC0gd3J0aWUgdmVyaWZ5IG1hc2sJCSAgICAgKi8KKy8qICAgc2hvcnQgcmVhZCAtIHZlcmlmaWVzIHJtYXNrIGlmIHJlYWQgPSAxCQkJICAgICAqLworLyogICBzaG9ydCB3cml0ZSAgLSB3cml0ZXMgd21hc2sgaWYgd3JpdGUgPSAxCQkJICAgICAqLworLyoJCQkJCQkJCSAgICAgKi8KKy8qIE9VVFBVVFM6CQkJCQkJCSAgICAgKi8KKy8qICAgRGlzcGxheXMgZmFpbGluZyB0ZXN0IHBhdHRlcm4gYW5kIGFkZHJlc3MJCQkgICAgICovCisvKgkJCQkJCQkJICAgICAqLworLyogUkVUVVJOUzoJCQkJCQkJICAgICAqLworLyogICAwIC0gIFBhc3NlZCB0ZXN0CQkJCQkJICAgICAqLworLyogICAxIC0gIEZhaWxlZCB0ZXN0CQkJCQkJICAgICAqLworLyoJCQkJCQkJCSAgICAgKi8KKy8qIFJFU1RSSUNUSU9OUy9MSU1JVEFUSU9OUzoJCQkJCSAgICAgKi8KKy8qCQkJCQkJCQkgICAgICovCisvKgkJCQkJCQkJICAgICAqLworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KK2ludCBtZW1fbWFyY2godm9sYXRpbGUgdW5zaWduZWQgbG9uZyBsb25nICpiYXNlLAorCSAgICAgIHVuc2lnbmVkIGludCBzaXplLAorCSAgICAgIHVuc2lnbmVkIGxvbmcgbG9uZyBybWFzaywKKwkgICAgICB1bnNpZ25lZCBsb25nIGxvbmcgd21hc2ssIHNob3J0IHJlYWQsIHNob3J0IHdyaXRlKQoreworCXVuc2lnbmVkIGludCBpOworCXVuc2lnbmVkIGxvbmcgbG9uZyB0ZW1wOworCXVuc2lnbmVkIGludCBoaXRlbXAsIGxvdGVtcCwgaGltYXNrLCBsb21hc2s7CisKKwlmb3IgKGkgPSAwOyBpIDwgc2l6ZTsgaSsrKSB7CisJCWlmIChyZWFkICE9IDApIHsKKwkJCS8qIHRlbXAgPSBiYXNlW2ldOyAqLworCQkJbW92ZTY0KCh1bnNpZ25lZCBsb25nIGxvbmcgKikmKGJhc2VbaV0pLCAmdGVtcCk7CisJCQlpZiAocm1hc2sgIT0gdGVtcCkgeworCQkJCWhpdGVtcCA9ICh0ZW1wID4+IDMyKSAmIDB4ZmZmZmZmZmY7CisJCQkJbG90ZW1wID0gdGVtcCAmIDB4ZmZmZmZmZmY7CisJCQkJaGltYXNrID0gKHJtYXNrID4+IDMyKSAmIDB4ZmZmZmZmZmY7CisJCQkJbG9tYXNrID0gcm1hc2sgJiAweGZmZmZmZmZmOworCisJCQkJcHJpbnRmKCJcbiBXYWxraW5nIG9uZSdzIHRlc3QgZmFpbGVkOglcIAorCQkJCQlhZGRyZXNzID0gMHglMDh4LCIgIlxuXHRleHBlY3RlZCBcCisJCQkJCTB4JTA4eCUwOHgsIGZvdW5kIDB4JTA4eCUwOHgiLCBpIDw8IDMsXAorCQkJCQloaW1hc2ssIGxvbWFzaywgaGl0ZW1wLCBsb3RlbXApOworCQkJCXJldHVybiAxOworCQkJfQorCQl9CisJCWlmICh3cml0ZSAhPSAwKSB7CisJCQkvKiAgYmFzZVtpXSA9IHdtYXNrOyAqLworCQkJbW92ZTY0KCZ3bWFzaywgKHVuc2lnbmVkIGxvbmcgbG9uZyAqKSYoYmFzZVtpXSkpOworCQl9CisJfQorCXJldHVybiAwOworfQorI2VuZGlmCQkJCS8qIENGR19EUkFNX1RFU1RfV0FMSyAqLworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyogTkFNRTogICBtZW1fdGVzdF93YWxrKCkgLSAgYSBzaW1wbGUgd2Fsa2luZyBvbmVzIHRlc3QJICAgICAqLworLyoJCQkJCQkJCSAgICAgKi8KKy8qIERFU0NSSVBUSU9OOgkJCQkJCQkgICAgICovCisvKiAgIFBlcmZvcm1zIGEgd2Fsa2luZyBvbmVzIHRocm91Z2ggZW50aXJlIHBoeXNpY2FsIG1lbW9yeS4gVGhlICAgICAqLworLyogICB0ZXN0IHVzZXMgYXMgc2VyaWVzIG9mIG1lbW9yeSBtYXJjaGVzLCBtZW1fbWFyY2goKSwgdG8gdmVyaWZ5ICAgKi8KKy8qICAgYW5kIHdyaXRlIHRoZSB0ZXN0IHBhdHRlcm5zIHRvIG1lbW9yeS4gVGhlIHRlc3Qgc2VxdWVuY2UgaXMgYXMgICovCisvKiAgIGZvbGxvd3M6CQkJCQkJCSAgICAgKi8KKy8qICAgICAxKSBtYXJjaCB3cml0aW5nIDAwMDAuLi4wMDAxCQkJCSAgICAgKi8KKy8qICAgICAyKSBtYXJjaCB2ZXJpZnlpbmcgMDAwMC4uLjAwMDEgICwgd3JpdGluZyAgMDAwMC4uLjAwMTAJICAgICAqLworLyogICAgIDMpIHJlcGVhdCBzdGVwIDIgc2hpZnRpbmcgbWFza3MgbGVmdCAxIGJpdCBlYWNoIHRpbWUgdW5pdGwgICAgKi8KKy8qCSAgIHRoZSB3cml0ZSBtYXNrIGVxdWFscyAxMDAwLi4uMDAwMAkJCSAgICAgKi8KKy8qICAgICA0KSBtYXJjaCB2ZXJpZnlpbmcgMTAwMC4uLjAwMDAJCQkJICAgICAqLworLyogICBUaGUgdGVzdCBmYWlscyBpZiBhbnkgb2YgdGhlIG1lbW9yeSBtYXJjaGVzIHJldHVybiBhIGZhaWx1cmUuICAgKi8KKy8qCQkJCQkJCQkgICAgICovCisvKiBPVVRQVVRTOgkJCQkJCQkgICAgICovCisvKiAgIERpc3BsYXlzIHdoaWNoIHBhc3Mgb24gdGhlIG1lbW9yeSB0ZXN0IGlzIGV4ZWN1dGluZwkgICAgICovCisvKgkJCQkJCQkJICAgICAqLworLyogUkVUVVJOUzoJCQkJCQkJICAgICAqLworLyogICAwIC0gIFBhc3NlZCB0ZXN0CQkJCQkJICAgICAqLworLyogICAxIC0gIEZhaWxlZCB0ZXN0CQkJCQkJICAgICAqLworLyoJCQkJCQkJCSAgICAgKi8KKy8qIFJFU1RSSUNUSU9OUy9MSU1JVEFUSU9OUzoJCQkJCSAgICAgKi8KKy8qCQkJCQkJCQkgICAgICovCisvKgkJCQkJCQkJICAgICAqLworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KK2ludCBtZW1fdGVzdF93YWxrKHZvaWQpCit7CisJdW5zaWduZWQgbG9uZyBsb25nIG1hc2s7CisJdm9sYXRpbGUgdW5zaWduZWQgbG9uZyBsb25nICpwbWVtID0KKwkgICAgKHZvbGF0aWxlIHVuc2lnbmVkIGxvbmcgbG9uZyAqKUNGR19NRU1URVNUX1NUQVJUOworCWNvbnN0IHVuc2lnbmVkIGxvbmcgc2l6ZSA9IChDRkdfTUVNVEVTVF9FTkQgLSBDRkdfTUVNVEVTVF9TVEFSVCkgLyA4OworCisJdW5zaWduZWQgaW50IGk7CisKKwltYXNrID0gMHgwMTsKKworCXByaW50ZigiSW5pdGlhbCBQYXNzIik7CisJbWVtX21hcmNoKHBtZW0sIHNpemUsIDB4MCwgMHgxLCAwLCAxKTsKKworCXByaW50ZigiXGJcYlxiXGJcYlxiXGJcYlxiXGJcYlxiIik7CisJcHJpbnRmKCIJCSIpOworCXByaW50ZigiICAgICAgICAgIik7CisJcHJpbnRmKCJcYlxiXGJcYlxiXGJcYlxiXGJcYlxiXGIiKTsKKworCWZvciAoaSA9IDA7IGkgPCA2MzsgaSsrKSB7CisJCXByaW50ZigiUGFzcyAlMmQiLCBpICsgMik7CisJCWlmIChtZW1fbWFyY2gocG1lbSwgc2l6ZSwgbWFzaywgbWFzayA8PCAxLCAxLCAxKSAhPSAwKSB7CisJCQkvKnByaW50ZigibWFzazogMHgleCwgcGFzczogJWQsICIsIG1hc2ssIGkpOyAqLworCQkJcmV0dXJuIDE7CisJCX0KKwkJbWFzayA9IG1hc2sgPDwgMTsKKwkJcHJpbnRmKCJcYlxiXGJcYlxiXGJcYiIpOworCX0KKworCXByaW50ZigiTGFzdCBQYXNzIik7CisJaWYgKG1lbV9tYXJjaChwbWVtLCBzaXplLCAwLCBtYXNrLCAwLCAxKSAhPSAwKSB7CisJCS8qIHByaW50ZigibWFzazogMHgleCIsIG1hc2spOyAqLworCQlyZXR1cm4gMTsKKwl9CisJcHJpbnRmKCJcYlxiXGJcYlxiXGJcYlxiXGIiKTsKKwlwcmludGYoIgkgICAgICIpOworCXByaW50ZigiXGJcYlxiXGJcYlxiXGJcYlxiIik7CisKKwlyZXR1cm4gMDsKK30KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qIE5BTUU6ICAgIHRlc3RkcmFtKCkgLSAgY2FsbHMgYW55IGVuYWJsZWQgbWVtb3J5IHRlc3RzCSAgICAgKi8KKy8qCQkJCQkJCQkgICAgICovCisvKiBERVNDUklQVElPTjoJCQkJCQkJICAgICAqLworLyogICBSdW5zIG1lbW9yeSB0ZXN0cyBpZiB0aGUgZW52aXJvbm1lbnQgdGVzdCB2YXJpYWJsZXMgYXJlIHNldCB0byAgKi8KKy8qICAgJ3knLgkJCQkJCQkgICAgICovCisvKgkJCQkJCQkJICAgICAqLworLyogSU5QVVRTOgkJCQkJCQkgICAgICovCisvKiAgIHRlc3RkcmFtZGF0YSAgICAtIElmIHNldCB0byAneScsIGRhdGEgdGVzdCBpcyBydW4uCQkgICAgICovCisvKiAgIHRlc3RkcmFtYWRkcmVzcyAtIElmIHNldCB0byAneScsIGFkZHJlc3MgdGVzdCBpcyBydW4uCSAgICAgKi8KKy8qICAgdGVzdGRyYW13YWxrICAgIC0gSWYgc2V0IHRvICd5Jywgd2Fsa2luZyBvbmVzIHRlc3QgaXMgcnVuCSAgICAgKi8KKy8qCQkJCQkJCQkgICAgICovCisvKiBPVVRQVVRTOgkJCQkJCQkgICAgICovCisvKiAgIE5vbmUJCQkJCQkJICAgICAqLworLyoJCQkJCQkJCSAgICAgKi8KKy8qIFJFVFVSTlM6CQkJCQkJCSAgICAgKi8KKy8qICAgMCAtICBQYXNzZWQgdGVzdAkJCQkJCSAgICAgKi8KKy8qICAgMSAtICBGYWlsZWQgdGVzdAkJCQkJCSAgICAgKi8KKy8qCQkJCQkJCQkgICAgICovCisvKiBSRVNUUklDVElPTlMvTElNSVRBVElPTlM6CQkJCQkgICAgICovCisvKgkJCQkJCQkJICAgICAqLworLyoJCQkJCQkJCSAgICAgKi8KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCitpbnQgdGVzdGRyYW0odm9pZCkKK3sKKwljaGFyICpzOworCWludCBydW5kYXRhLCBydW5hZGRyZXNzLCBydW53YWxrOworCisJcyA9IGdldGVudigidGVzdGRyYW1kYXRhIik7CisJcnVuZGF0YSA9IChzICYmICgqcyA9PSAneScpKSA/IDEgOiAwOworCXMgPSBnZXRlbnYoInRlc3RkcmFtYWRkcmVzcyIpOworCXJ1bmFkZHJlc3MgPSAocyAmJiAoKnMgPT0gJ3knKSkgPyAxIDogMDsKKwlzID0gZ2V0ZW52KCJ0ZXN0ZHJhbXdhbGsiKTsKKwlydW53YWxrID0gKHMgJiYgKCpzID09ICd5JykpID8gMSA6IDA7CisKKy8qICAgIHJ1bmRhdGEgPSAxOyAqLworLyogICAgcnVuYWRkcmVzcyA9IDA7ICovCisvKiAgICBydW53YWxrID0gMDsgKi8KKworCWlmICgocnVuZGF0YSA9PSAxKSB8fCAocnVuYWRkcmVzcyA9PSAxKSB8fCAocnVud2FsayA9PSAxKSkgeworCQlwcmludGYoIlRlc3RpbmcgUkFNIGZyb20gMHglMDh4IHRvIDB4JTA4eCAuLi4gIFwKKwkJCShkb24ndCBwYW5pYy4uLiB0aGF0IHdpbGwgdGFrZSBhIG1vbWVudCAhISEhKVxuIiwgXAorCQkJQ0ZHX01FTVRFU1RfU1RBUlQsIENGR19NRU1URVNUX0VORCk7CisJfQorI2lmZGVmIENGR19EUkFNX1RFU1RfREFUQQorCWlmIChydW5kYXRhID09IDEpIHsKKwkJcHJpbnRmKCJUZXN0IERBVEEgLi4uICAiKTsKKwkJaWYgKG1lbV90ZXN0X2RhdGEgKCkgPT0gMSkgeworCQkJcHJpbnRmKCJmYWlsZWQgXG4iKTsKKwkJCXJldHVybiAxOworCQl9IGVsc2UKKwkJCXByaW50Zigib2sgXG4iKTsKKwl9CisjZW5kaWYKKyNpZmRlZiBDRkdfRFJBTV9URVNUX0FERFJFU1MKKwlpZiAocnVuYWRkcmVzcyA9PSAxKSB7CisJCXByaW50ZigiVGVzdCBBRERSRVNTIC4uLiAgIik7CisJCWlmIChtZW1fdGVzdF9hZGRyZXNzICgpID09IDEpIHsKKwkJCXByaW50ZigiZmFpbGVkIFxuIik7CisJCQlyZXR1cm4gMTsKKwkJfSBlbHNlCisJCQlwcmludGYoIm9rIFxuIik7CisJfQorI2VuZGlmCisjaWZkZWYgQ0ZHX0RSQU1fVEVTVF9XQUxLCisJaWYgKHJ1bndhbGsgPT0gMSkgeworCQlwcmludGYoIlRlc3QgV0FMS0lORyBPTkVzIC4uLiAgIik7CisJCWlmIChtZW1fdGVzdF93YWxrKCkgPT0gMSkgeworCQkJcHJpbnRmKCJmYWlsZWQgXG4iKTsKKwkJCXJldHVybiAxOworCQl9IGVsc2UKKwkJCXByaW50Zigib2sgXG4iKTsKKwl9CisjZW5kaWYKKwlpZiAoKHJ1bmRhdGEgPT0gMSkgfHwgKHJ1bmFkZHJlc3MgPT0gMSkgfHwgKHJ1bndhbGsgPT0gMSkpIHsKKwkJcHJpbnRmKCJwYXNzZWRcbiIpOworCX0KKwlyZXR1cm4gMDsKKworfQorI2VuZGlmIC8qIENGR19EUkFNX1RFU1QgKi8KKworI2lmIGRlZmluZWQoQ09ORklHX09GX0ZMQVRfVFJFRSkgJiYgZGVmaW5lZChDT05GSUdfT0ZfQk9BUkRfU0VUVVApCit2b2lkCitmdF9ib2FyZF9zZXR1cCh2b2lkICpibG9iLCBiZF90ICpiZCkKK3sKKwl1MzIgKnA7CisJaW50IGxlbjsKKworCWZ0X2NwdV9zZXR1cChibG9iLCBiZCk7CisKKwlwID0gZnRfZ2V0X3Byb3AoYmxvYiwgIi9tZW1vcnkvcmVnIiwgJmxlbik7CisJaWYgKHAgIT0gTlVMTCkgeworCQkqcCsrID0gY3B1X3RvX2JlMzIoYmQtPmJpX21lbXN0YXJ0KTsKKwkJKnAgPSBjcHVfdG9fYmUzMihiZC0+YmlfbWVtc2l6ZSk7CisJfQorfQorI2VuZGlmCmRpZmYgLS1naXQgYS9ib2FyZC9tcGM3NDQ4aHBjMi90c2kxMDhfaW5pdC5jIGIvYm9hcmQvbXBjNzQ0OGhwYzIvdHNpMTA4X2luaXQuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42ZjUxN2Y1Ci0tLSAvZGV2L251bGwKKysrIGIvYm9hcmQvbXBjNzQ0OGhwYzIvdHNpMTA4X2luaXQuYwpAQCAtMCwwICsxLDY2MiBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiAoQykgQ29weXJpZ2h0IDIwMDM7ICBUdW5kcmEgU2VtaWNvbmR1Y3RvciBDb3JwLgorICogCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YKKyAqIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLAorICogTUEgMDIxMTEtMTMwNyBVU0EKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKiBGSUxFTkFNRTogdHNpMTA4X2luaXQuYworICoKKyAqIE9yaWdpbmF0b3I6IEFsZXggQm91bmluZQorICoKKyAqIERFU0NSSVBUSU9OOgorICogSW5pdGlhbGl6YXRpb24gY29kZSBmb3IgdGhlIFR1bmRyYSBUc2kxMDggYnJpZGdlIGNoaXAKKyAqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKworI2luY2x1ZGUgPGNvbW1vbi5oPgorI2luY2x1ZGUgPDc0eHhfN3h4Lmg+CisjaW5jbHVkZSA8Y29uZmlnLmg+CisjaW5jbHVkZSA8dmVyc2lvbi5oPgorI2luY2x1ZGUgPGFzbS9wcm9jZXNzb3IuaD4KKyNpbmNsdWRlIDx0c2kxMDguaD4KKworZXh0ZXJuIHZvaWQgbXBpY0luaXQoaW50IHZlcmJvc2UpOworCisvKgorICogQ29uZmlndXJhdGlvbiBPcHRpb25zCisgKi8KKwordHlwZWRlZiBzdHJ1Y3QgeworCXVsb25nIHVwcGVyOworCXVsb25nIGxvd2VyOworfSBQQjJPQ05fTFVUX0VOVFJZOworCitQQjJPQ05fTFVUX0VOVFJZIHBiMm9jbl9sdXQxWzMyXSA9IHsKKwkvKiAwIC0gNyAqLworCXsweDAwMDAwMDAwLCAweDAwMDAwMjAxfSwgLyogUEJBPTB4RTAwMF8wMDAwIC0+IFBDSS9YIChCeXRlLVN3YXApICovCisJezB4MDAwMDAwMDAsIDB4MDAwMDAyMDF9LCAvKiBQQkE9MHhFMTAwXzAwMDAgLT4gUENJL1ggKEJ5dGUtU3dhcCkgKi8KKwl7MHgwMDAwMDAwMCwgMHgwMDAwMDIwMX0sIC8qIFBCQT0weEUyMDBfMDAwMCAtPiBQQ0kvWCAoQnl0ZS1Td2FwKSAqLworCXsweDAwMDAwMDAwLCAweDAwMDAwMjAxfSwgLyogUEJBPTB4RTMwMF8wMDAwIC0+IFBDSS9YIChCeXRlLVN3YXApICovCisJezB4MDAwMDAwMDAsIDB4MDAwMDAyMDF9LCAvKiBQQkE9MHhFNDAwXzAwMDAgLT4gUENJL1ggKEJ5dGUtU3dhcCkgKi8KKwl7MHgwMDAwMDAwMCwgMHgwMDAwMDIwMX0sIC8qIFBCQT0weEU1MDBfMDAwMCAtPiBQQ0kvWCAoQnl0ZS1Td2FwKSAqLworCXsweDAwMDAwMDAwLCAweDAwMDAwMjAxfSwgLyogUEJBPTB4RTYwMF8wMDAwIC0+IFBDSS9YIChCeXRlLVN3YXApICovCisJezB4MDAwMDAwMDAsIDB4MDAwMDAyMDF9LCAvKiBQQkE9MHhFNzAwXzAwMDAgLT4gUENJL1ggKEJ5dGUtU3dhcCkgKi8KKworCS8qIDggLSAxNSAqLworCXsweDAwMDAwMDAwLCAweDAwMDAwMjAxfSwgLyogUEJBPTB4RTgwMF8wMDAwIC0+IFBDSS9YIChCeXRlLVN3YXApICovCisJezB4MDAwMDAwMDAsIDB4MDAwMDAyMDF9LCAvKiBQQkE9MHhFOTAwXzAwMDAgLT4gUENJL1ggKEJ5dGUtU3dhcCkgKi8KKwl7MHgwMDAwMDAwMCwgMHgwMDAwMDIwMX0sIC8qIFBCQT0weEVBMDBfMDAwMCAtPiBQQ0kvWCAoQnl0ZS1Td2FwKSAqLworCXsweDAwMDAwMDAwLCAweDAwMDAwMjAxfSwgLyogUEJBPTB4RUIwMF8wMDAwIC0+IFBDSS9YIChCeXRlLVN3YXApICovCisJezB4MDAwMDAwMDAsIDB4MDAwMDAyMDF9LCAvKiBQQkE9MHhFQzAwXzAwMDAgLT4gUENJL1ggKEJ5dGUtU3dhcCkgKi8KKwl7MHgwMDAwMDAwMCwgMHgwMDAwMDIwMX0sIC8qIFBCQT0weEVEMDBfMDAwMCAtPiBQQ0kvWCAoQnl0ZS1Td2FwKSAqLworCXsweDAwMDAwMDAwLCAweDAwMDAwMjAxfSwgLyogUEJBPTB4RUUwMF8wMDAwIC0+IFBDSS9YIChCeXRlLVN3YXApICovCisJezB4MDAwMDAwMDAsIDB4MDAwMDAyMDF9LCAvKiBQQkE9MHhFRjAwXzAwMDAgLT4gUENJL1ggKEJ5dGUtU3dhcCkgKi8KKworCS8qIDE2IC0gMjMgKi8KKwl7MHgwMDAwMDAwMCwgMHgwMDAwMDIwMX0sIC8qIFBCQT0weEYwMDBfMDAwMCAtPiBQQ0kvWCAoQnl0ZS1Td2FwKSAqLworCXsweDAwMDAwMDAwLCAweDAwMDAwMjAxfSwgLyogUEJBPTB4RjEwMF8wMDAwIC0+IFBDSS9YIChCeXRlLVN3YXApICovCisJezB4MDAwMDAwMDAsIDB4MDAwMDAyMDF9LCAvKiBQQkE9MHhGMjAwXzAwMDAgLT4gUENJL1ggKEJ5dGUtU3dhcCkgKi8KKwl7MHgwMDAwMDAwMCwgMHgwMDAwMDIwMX0sIC8qIFBCQT0weEYzMDBfMDAwMCAtPiBQQ0kvWCAoQnl0ZS1Td2FwKSAqLworCXsweDAwMDAwMDAwLCAweDAwMDAwMjAxfSwgLyogUEJBPTB4RjQwMF8wMDAwIC0+IFBDSS9YIChCeXRlLVN3YXApICovCisJezB4MDAwMDAwMDAsIDB4MDAwMDAyMDF9LCAvKiBQQkE9MHhGNTAwXzAwMDAgLT4gUENJL1ggKEJ5dGUtU3dhcCkgKi8KKwl7MHgwMDAwMDAwMCwgMHgwMDAwMDIwMX0sIC8qIFBCQT0weEY2MDBfMDAwMCAtPiBQQ0kvWCAoQnl0ZS1Td2FwKSAqLworCXsweDAwMDAwMDAwLCAweDAwMDAwMjAxfSwgLyogUEJBPTB4RjcwMF8wMDAwIC0+IFBDSS9YIChCeXRlLVN3YXApICovCisJLyogMjQgLSAzMSAqLworCXsweDAwMDAwMDAwLCAweDAwMDAwMjAxfSwgLyogUEJBPTB4RjgwMF8wMDAwIC0+IFBDSS9YIChCeXRlLVN3YXApICovCisJezB4MDAwMDAwMDAsIDB4MDAwMDAyMDF9LCAvKiBQQkE9MHhGOTAwXzAwMDAgLT4gUENJL1ggKEJ5dGUtU3dhcCkgKi8KKwl7MHgwMDAwMDAwMCwgMHgwMDAwMDIwMX0sIC8qIFBCQT0weEZBMDBfMDAwMCAtPiBQQ0kvWCAgUENJIEkvTyAoQnl0ZS1Td2FwKSAqLworCXsweDAwMDAwMDAwLCAweDAwMDAwMjAxfSwgLyogUEJBPTB4RkIwMF8wMDAwIC0+IFBDSS9YICBQQ0kgQ29uZmlnIChCeXRlLVN3YXApICovCisKKwl7MHgwMDAwMDAwMCwgMHgwMjAwMDI0MH0sIC8qIFBCQT0weEZDMDBfMDAwMCAtPiBITFAgKi8KKwl7MHgwMDAwMDAwMCwgMHgwMTAwMDI0MH0sIC8qIFBCQT0weEZEMDBfMDAwMCAtPiBITFAgKi8KKwl7MHgwMDAwMDAwMCwgMHgwMzAwMDI0MH0sIC8qIFBCQT0weEZFMDBfMDAwMCAtPiBITFAgKi8KKwl7MHgwMDAwMDAwMCwgMHgwMDAwMDI0MH0gIC8qIFBCQT0weEZGMDBfMDAwMCAtPiBITFAgOiAoVHJhbnNsYXRpb24gRW5hYmxlZCArIEJ5dGUtU3dhcCkqLworfTsKKworI2lmZGVmIENGR19DTEtfU1BSRUFECit0eXBlZGVmIHN0cnVjdCB7CisJdWxvbmcgY3RybDA7CisJdWxvbmcgY3RybDE7Cit9IFBMTF9DVFJMX1NFVDsKKworLyoKKyAqIENsb2NrIEdlbmVyYXRvciBTUExMMCBpbml0aWFsaXphdGlvbiB2YWx1ZXMKKyAqIFBMTDAgY29uZmlndXJhdGlvbiB0YWJsZSBmb3IgdmFyaW91cyBQQl9DTEtPIGZyZXEuCisgKiBVc2VzIHByZS1jYWxjdWxhdGVkIHZhbHVlcyBmb3IgRnMgPSAzMCBrSHosIEQgPSAwLjUlCisgKiBGb3V0IGRlcGVuZHMgb24gcmVxdWlyZWQgUEJfQ0xLTy4gQmFzZWQgb24gRnJlZiA9IDMzIE1IegorICovCisKK3N0YXRpYyBQTExfQ1RSTF9TRVQgcGxsMF9jb25maWdbOF0gPSB7CisJezB4MDAwMDAwMDAsIDB4MDAwMDAwMDB9LAkvKiAwOiBieXBhc3MgKi8KKwl7MHgwMDAwMDAwMCwgMHgwMDAwMDAwMH0sCS8qIDE6IHJlc2VydmVkICovCisJezB4MDA0MzAwNDQsIDB4MDAwMDAwNDN9LAkvKiAyOiBDR19QQl9DTEtPID0gMTgzIE1IeiAqLworCXsweDAwNWMwMDQ0LCAweDAwMDAwMDM5fSwJLyogMzogQ0dfUEJfQ0xLTyA9IDEwMCBNSHogKi8KKwl7MHgwMDVjMDA0NCwgMHgwMDAwMDAzOX0sCS8qIDQ6IENHX1BCX0NMS08gPSAxMzMgTUh6ICovCisJezB4MDA0YTAwNDQsIDB4MDAwMDAwNDB9LAkvKiA1OiBDR19QQl9DTEtPID0gMTY3IE1IeiAqLworCXsweDAwNWMwMDQ0LCAweDAwMDAwMDM5fSwJLyogNjogQ0dfUEJfQ0xLTyA9IDIwMCBNSHogKi8KKwl7MHgwMDRmMDA0NCwgMHgwMDAwMDAzZX0JLyogNzogQ0dfUEJfQ0xLTyA9IDIzMyBNSHogKi8KK307CisjZW5kaWYJLyogQ0ZHX0NMS19TUFJFQUQgKi8KKworLyoKKyAqIFByb3Nlc3NvciBCdXMgQ2xvY2sgKGluIE1IeikgZGVmaW5lZCBieSBDR19QQl9TRUxFQ1QKKyAqIChiYXNlZCBvbiByZWNvbW1lbmRlZCBUc2kxMDggcmVmZXJlbmNlIGNsb2NrIDMzTUh6KQorICovCitzdGF0aWMgaW50IHBiX2Nsa19zZWxbOF0gPSB7IDAsIDAsIDE4MywgMTAwLCAxMzMsIDE2NywgMjAwLCAyMzMgfTsKKworLyoKKyAqIGdldF9ib2FyZF9idXNfY2xrKCkKKyAqCisgKiByZXR1cm5zIHRoZSBidXMgY2xvY2sgaW4gSHouCisgKi8KK3Vuc2lnbmVkIGxvbmcgZ2V0X2JvYXJkX2J1c19jbGsodm9pZCkKK3sKKwl1bG9uZyBpOworCisJLyogRGV0ZWN0IFBCIGNsb2NrIGZyZXEuICovCisJaSA9IGluMzIoQ0ZHX1RTSTEwOF9DU1JfQkFTRSArIFRTSTEwOF9DTEtfUkVHX09GRlNFVCArIENHX1BXUlVQX1NUQVRVUyk7CisJaSA9IChpID4+IDE2KSAmIDB4MDc7CS8qIEdldCBQQiBQTEwgbXVsdGlwbGllciAqLworCisJcmV0dXJuIHBiX2Nsa19zZWxbaV0gKiAxMDAwMDAwOworfQorCisvKgorICogYm9hcmRfZWFybHlfaW5pdF9mKCkKKyAqCisgKiBib2FyZC1zcGVjaWZpYyBpbml0aWFsaXphdGlvbiBleGVjdXRlZCBmcm9tIGZsYXNoCisgKi8KKworaW50IGJvYXJkX2Vhcmx5X2luaXRfZih2b2lkKQoreworCURFQ0xBUkVfR0xPQkFMX0RBVEFfUFRSOworCXVsb25nIGk7CisKKwlnZC0+bWVtX2NsayA9IDA7CisJaSA9IGluMzIoQ0ZHX1RTSTEwOF9DU1JfQkFTRSArIFRTSTEwOF9DTEtfUkVHX09GRlNFVCArIENHX1BXUlVQX1NUQVRVUyk7CisJaSA9IChpID4+IDIwKSAmIDB4MDc7CisJc3dpdGNoIChpKSB7CisJY2FzZSAwOgorCQlwcmludGYoIlVzaW5nIGV4dGVybmFsIGNsb2NrXG4iKTsKKwkJYnJlYWs7CisJY2FzZSAxOgorCQlnZC0+bWVtX2NsayA9IGdkLT5idXNfY2xrOworCQlicmVhazsKKwljYXNlIDQ6CisJY2FzZSA1OgorCWNhc2UgNjoKKwkJZ2QtPm1lbV9jbGsgPSBwYl9jbGtfc2VsW2ldICogMTAwMDAwMDsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJcHJpbnRmKCJJbnZhbGlkIEREUjIgY2xvY2sgc2V0dGluZ1xuIik7CisJCXJldHVybiAtMTsKKwl9CisJcHJpbnRmKCJCVVMhICAgJWQgTUh6XG4iLCBnZXRfYm9hcmRfYnVzX2NsaygpIC8gMTAwMDAwMCk7CisJcHJpbnRmKCJNRU0hICAgJWQgTUh6XG4iLCBnZC0+bWVtX2NsayAvIDEwMDAwMDApOworCXJldHVybiAwOworfQorCisvKgorICogYm9hcmRfZWFybHlfaW5pdF9yKCkgLSBUc2kxMDggaW5pdGlhbGl6YXRpb24gZnVuY3Rpb24gZXhlY3V0ZWQgcmlnaHQgYWZ0ZXIKKyAqIHJlbG9jYXRpb24uIENvbnRhaW5zIGNvZGUgdGhhdCBjYW5ub3QgYmUgZXhlY3V0ZWQgZnJvbSBmbGFzaC4KKyAqLworCitpbnQgYm9hcmRfZWFybHlfaW5pdF9yKHZvaWQpCit7CisJdWxvbmcgdGVtcCwgaTsKKwl1bG9uZyByZWdfdmFsOworCXZvbGF0aWxlIHVsb25nICpyZWdfcHRyOworCQorCXJlZ19wdHIgPQorCSAgICAodWxvbmcgKikgKENGR19UU0kxMDhfQ1NSX0JBU0UgKyBUU0kxMDhfUEJfUkVHX09GRlNFVCArIDB4OTAwKTsKKworCWZvciAoaSA9IDA7IGkgPCAzMjsgaSsrKSB7CisJCSpyZWdfcHRyKysgPSAweDAwMDAwMjAxOwkvKiBTV0FQIEVOQUJMRUQgKi8KKwkJKnJlZ19wdHIrKyA9IDB4MDA7CisJfQorCisJX19hc21fXyBfX3ZvbGF0aWxlX18oImVpZWlvIik7CisJX19hc21fXyBfX3ZvbGF0aWxlX18oInN5bmMiKTsKKworCS8qIFNldHVwIFBCX09DTl9CQVIyOiBzaXplIDI1NkIgKyBFTmFibGUgQCAweDBfODAwMDAwMDAgKi8KKworCW91dDMyKENGR19UU0kxMDhfQ1NSX0JBU0UgKyBUU0kxMDhfUEJfUkVHX09GRlNFVCArIFBCX09DTl9CQVIyLAorCSAgICAgIDB4ODAwMDAwMDEpOworCV9fYXNtX18gX192b2xhdGlsZV9fKCJzeW5jIik7CisKKwkvKiBNYWtlIHN1cmUgdGhhdCBPQ05fQkFSMiBkZWNvZGVyIGlzIHNldCAodG8gYWxsb3cgZm9sbG93aW5nIGltbWVkaWF0ZQorCSAqIHJlYWQgZnJvbSBTRFJBTSkgCisJICovCisKKwl0ZW1wID0gaW4zMihDRkdfVFNJMTA4X0NTUl9CQVNFICsgVFNJMTA4X1BCX1JFR19PRkZTRVQgKyBQQl9PQ05fQkFSMik7CisJX19hc21fXyBfX3ZvbGF0aWxlX18oInN5bmMiKTsKKworCS8qCisJICogUmVtYXAgUEJfT0NOX0JBUjEgdG8gYWNjb21vZGF0ZSBQQ0ktYnVzIGFwZXJ0dXJlIGFuZCBFUFJPTSBpbnRvIHRoZQorCSAqIHByb2Nlc3NvciBidXMgYWRkcmVzcyBzcGFjZS4gSW1tZWRpYXRlbHkgYWZ0ZXIgcmVzZXQgTFVUIGFuZCBhZGRyZXNzCisJICogdHJhbnNsYXRpb24gYXJlIGRpc2FibGVkIGZvciB0aGlzIEJBUi4gTm93IHdlIGhhdmUgdG8gaW5pdGlhbGl6ZSBMVVQKKwkgKiBhbmQgc3dpdGNoIGZyb20gdGhlIEJPT1QgbW9kZSB0byB0aGUgbm9ybWFsIG9wZXJhdGlvbiBtb2RlLgorCSAqIAorCSAqIFRoZSBhcGVydHVyZSBkZWZpbmVkIGJ5IFBCX09DTl9CQVIxIHN0YXJ0ZXMgYXQgYWRkcmVzcyAweEUwMDAwMDAwCisJICogYW5kIGNvdmVycyA1MTJNQiBvZiBhZGRyZXNzIHNwYWNlLiBUbyBhbGxvdyBsYXJnZXIgYXBlcnR1cmUgd2UgYWxzbyAKKwkgKiBoYXZlIHRvIHJlbG9jYXRlIHJlZ2lzdGVyIHdpbmRvdyBvZiBUc2kxMDgKKwkgKgorCSAqIEluaXRpYWxpemUgTFVUICgzMi1lbnRyaWVzKSBwcmlvciBzd2l0Y2hpbmcgUEJfT0NOX0JBUjEgZnJvbSBCT09UIAorCSAqIG1vZGUuCisJICogCisJICogaW5pdGlhbGl6ZSBwb2ludGVyIHRvIExVVCBhc3NvY2lhdGVkIHdpdGggUEJfT0NOX0JBUjEKKwkgKi8KKwlyZWdfcHRyID0KKwkgICAgKHVsb25nICopIChDRkdfVFNJMTA4X0NTUl9CQVNFICsgVFNJMTA4X1BCX1JFR19PRkZTRVQgKyAweDgwMCk7CisKKwlmb3IgKGkgPSAwOyBpIDwgMzI7IGkrKykgeworCQkqcmVnX3B0cisrID0gcGIyb2NuX2x1dDFbaV0ubG93ZXI7CisJCSpyZWdfcHRyKysgPSBwYjJvY25fbHV0MVtpXS51cHBlcjsKKwl9CisKKwlfX2FzbV9fIF9fdm9sYXRpbGVfXygic3luYyIpOworCisJLyogQmFzZSBhZGRyZXNzZXMgZm9yIENzMCwgQ1MxLCBDUzIsIENTMyAqLworCisJb3V0MzIoQ0ZHX1RTSTEwOF9DU1JfQkFTRSArIFRTSTEwOF9ITFBfUkVHX09GRlNFVCArIEhMUF9CMF9BRERSLAorCSAgICAgIDB4MDAwMDAwMDApOworCV9fYXNtX18gX192b2xhdGlsZV9fKCJzeW5jIik7CisKKwlvdXQzMihDRkdfVFNJMTA4X0NTUl9CQVNFICsgVFNJMTA4X0hMUF9SRUdfT0ZGU0VUICsgSExQX0IxX0FERFIsCisJICAgICAgMHgwMDEwMDAwMCk7CisJX19hc21fXyBfX3ZvbGF0aWxlX18oInN5bmMiKTsKKworCW91dDMyKENGR19UU0kxMDhfQ1NSX0JBU0UgKyBUU0kxMDhfSExQX1JFR19PRkZTRVQgKyBITFBfQjJfQUREUiwKKwkgICAgICAweDAwMjAwMDAwKTsKKwlfX2FzbV9fIF9fdm9sYXRpbGVfXygic3luYyIpOworCisJb3V0MzIoQ0ZHX1RTSTEwOF9DU1JfQkFTRSArIFRTSTEwOF9ITFBfUkVHX09GRlNFVCArIEhMUF9CM19BRERSLAorCSAgICAgIDB4MDAzMDAwMDApOworCV9fYXNtX18gX192b2xhdGlsZV9fKCJzeW5jIik7CisKKwkvKiBNYXNrcyBmb3IgSExQIGJhbmtzICovCisKKwlvdXQzMihDRkdfVFNJMTA4X0NTUl9CQVNFICsgVFNJMTA4X0hMUF9SRUdfT0ZGU0VUICsgSExQX0IwX01BU0ssCisJICAgICAgMHhGRkYwMDAwMCk7CisJX19hc21fXyBfX3ZvbGF0aWxlX18oInN5bmMiKTsKKworCW91dDMyKENGR19UU0kxMDhfQ1NSX0JBU0UgKyBUU0kxMDhfSExQX1JFR19PRkZTRVQgKyBITFBfQjFfTUFTSywKKwkgICAgICAweEZGRjAwMDAwKTsKKwlfX2FzbV9fIF9fdm9sYXRpbGVfXygic3luYyIpOworCisJb3V0MzIoQ0ZHX1RTSTEwOF9DU1JfQkFTRSArIFRTSTEwOF9ITFBfUkVHX09GRlNFVCArIEhMUF9CMl9NQVNLLAorCSAgICAgIDB4RkZGMDAwMDApOworCV9fYXNtX18gX192b2xhdGlsZV9fKCJzeW5jIik7CisKKwlvdXQzMihDRkdfVFNJMTA4X0NTUl9CQVNFICsgVFNJMTA4X0hMUF9SRUdfT0ZGU0VUICsgSExQX0IzX01BU0ssCisJICAgICAgMHhGRkYwMDAwMCk7CisJX19hc21fXyBfX3ZvbGF0aWxlX18oInN5bmMiKTsKKworCS8qIFNldCBDVFJMMCB2YWx1ZXMgZm9yIGJhbmtzICovCisKKwlvdXQzMihDRkdfVFNJMTA4X0NTUl9CQVNFICsgVFNJMTA4X0hMUF9SRUdfT0ZGU0VUICsgSExQX0IwX0NUUkwwLAorCSAgICAgIDB4N0ZGQzQ0QzIpOworCV9fYXNtX18gX192b2xhdGlsZV9fKCJzeW5jIik7CisKKwlvdXQzMihDRkdfVFNJMTA4X0NTUl9CQVNFICsgVFNJMTA4X0hMUF9SRUdfT0ZGU0VUICsgSExQX0IxX0NUUkwwLAorCSAgICAgIDB4N0ZGQzQ0QzApOworCV9fYXNtX18gX192b2xhdGlsZV9fKCJzeW5jIik7CisKKwlvdXQzMihDRkdfVFNJMTA4X0NTUl9CQVNFICsgVFNJMTA4X0hMUF9SRUdfT0ZGU0VUICsgSExQX0IyX0NUUkwwLAorCSAgICAgIDB4N0ZGQzQ0QzApOworCV9fYXNtX18gX192b2xhdGlsZV9fKCJzeW5jIik7CisKKwlvdXQzMihDRkdfVFNJMTA4X0NTUl9CQVNFICsgVFNJMTA4X0hMUF9SRUdfT0ZGU0VUICsgSExQX0IzX0NUUkwwLAorCSAgICAgIDB4N0ZGQzQ0QzIpOworCV9fYXNtX18gX192b2xhdGlsZV9fKCJzeW5jIik7CisKKwkvKiBTZXQgYmFua3MgdG8gbGF0Y2hlZCBtb2RlLCBlbmFibGVkLCBhbmQgb3RoZXIgZGVmYXVsdCBzZXR0aW5ncyAqLworCisJb3V0MzIoQ0ZHX1RTSTEwOF9DU1JfQkFTRSArIFRTSTEwOF9ITFBfUkVHX09GRlNFVCArIEhMUF9CMF9DVFJMMSwKKwkgICAgICAweDdDMEYyMDAwKTsKKwlfX2FzbV9fIF9fdm9sYXRpbGVfXygic3luYyIpOworCisJb3V0MzIoQ0ZHX1RTSTEwOF9DU1JfQkFTRSArIFRTSTEwOF9ITFBfUkVHX09GRlNFVCArIEhMUF9CMV9DVFJMMSwKKwkgICAgICAweDdDMEYyMDAwKTsKKwlfX2FzbV9fIF9fdm9sYXRpbGVfXygic3luYyIpOworCisJb3V0MzIoQ0ZHX1RTSTEwOF9DU1JfQkFTRSArIFRTSTEwOF9ITFBfUkVHX09GRlNFVCArIEhMUF9CMl9DVFJMMSwKKwkgICAgICAweDdDMEYyMDAwKTsKKwlfX2FzbV9fIF9fdm9sYXRpbGVfXygic3luYyIpOworCisJb3V0MzIoQ0ZHX1RTSTEwOF9DU1JfQkFTRSArIFRTSTEwOF9ITFBfUkVHX09GRlNFVCArIEhMUF9CM19DVFJMMSwKKwkgICAgICAweDdDMEYyMDAwKTsKKwlfX2FzbV9fIF9fdm9sYXRpbGVfXygic3luYyIpOworCQorCS8qCisJICogU2V0IG5ldyB2YWx1ZSBmb3IgUEJfT0NOX0JBUjE6IHN3aXRjaCBmcm9tIEJPT1QgdG8gTFVUIG1vZGUuCisJICogdmFsdWUgZm9yIFBCX09DTl9CQVIxOiAoQkEtMHhFMDAwXzAwMDAgKyBzaXplIDUxMk1CICsgRU5hYmxlKQorCSAqLworCW91dDMyKENGR19UU0kxMDhfQ1NSX0JBU0UgKyBUU0kxMDhfUEJfUkVHX09GRlNFVCArIFBCX09DTl9CQVIxLAorCSAgICAgIDB4RTAwMDAwMTEpOworCV9fYXNtX18gX192b2xhdGlsZV9fKCJzeW5jIik7CisKKwkvKiBNYWtlIHN1cmUgdGhhdCBPQ05fQkFSMiBkZWNvZGVyIGlzIHNldCAodG8gYWxsb3cgZm9sbG93aW5nIAorCSAqIGltbWVkaWF0ZSByZWFkIGZyb20gU0RSQU0pIAorCSAqLworCSAgCisJdGVtcCA9IGluMzIoQ0ZHX1RTSTEwOF9DU1JfQkFTRSArIFRTSTEwOF9QQl9SRUdfT0ZGU0VUICsgUEJfT0NOX0JBUjEpOworCV9fYXNtX18gX192b2xhdGlsZV9fKCJzeW5jIik7CisKKwkvKgorCSAqIFNSSTogQXQgdGhpcyBwb2ludCB3ZSBoYXZlIGVuYWJsZWQgdGhlIEhMUCBiYW5rcy4gVGhhdCBtZWFucyB3ZSBjYW4KKwkgKiBub3cgcmVhZCBmcm9tIHRoZSBOVlJBTSBhbmQgaW5pdGlhbGl6ZSB0aGUgZW52aXJvbm1lbnQgdmFyaWFibGVzLgorCSAqIFdlIHdpbGwgb3Zlci1yaWRlIHRoZSBlbnZfaW5pdCBjYWxsZWQgaW4gYm9hcmRfaW5pdF9mCisJICogVGhpcyBpcyByZWFsbHkgYSB3b3JrLWFyb3VuZCBiZWNhdXNlLCB0aGUgSExQIGJhbmsgMQorCSAqIHdoZXJlIE5WUkFNIHJlc2lkZXMgaXMgbm90IHZpc2libGUgZHVyaW5nIGJvYXJkX2luaXRfZiAKKwkgKiAobGliX3BwYy9ib2FyZC5jKQorCSAqIEFsdGVybmF0aXZlbHksIHdlIGNvdWxkIHVzZSB0aGUgSTJDIEVFUFJPTSBhdCBzdGFydC11cCB0byBjb25maWd1cmUKKwkgKiBhbmQgZW5hYmxlIGFsbCBITFAgYmFua3MgYW5kIG5vdCBqdXN0IEhMUCAwIGFzIGlzIGJlaW5nIGRvbmUgZm9yCisJICogVGFpZ2EgUmV2LiAyLgorCSAqLworCQorCWVudl9pbml0KCk7CisKKyNpZm5kZWYgRElTQUJMRV9QQk0KKwkKKwkvKgorCSAqIEZvciBJQk0gcHJvY2Vzc29ycyB3ZSBoYXZlIHRvIHNldCBBZGRyZXNzLU9ubHkgY29tbWFuZHMgZ2VuZXJhdGVkIAorCSAqIGJ5IFBCTSB0aGF0IGFyZSBkaWZmZXJlbnQgZnJvbSBvbmVzIHNldCBhZnRlciByZXNldC4KKwkgKi8KKworCXRlbXAgPSBnZXRfY3B1X3R5cGUoKTsKKworCWlmICgoQ1BVXzc1MEZYID09IHRlbXApIHx8IChDUFVfNzUwR1ggPT0gdGVtcCkpIHsKKwkJb3V0MzIoQ0ZHX1RTSTEwOF9DU1JfQkFTRSArIFRTSTEwOF9QQl9SRUdfT0ZGU0VUICsgUEJfTUNNRCwKKwkJICAgICAgMHgwMDAwOTk1NSk7CisJfQorI2VuZGlmCS8qIERJU0FCTEVfUEJNICovCisKKyNpZmRlZiBDT05GSUdfUENJCisJLyoKKwkgKiBJbml0aWFsaXplIFBDSS9YIGJsb2NrCisJICovCisKKwkvKiBNYXAgUENJL1ggQ29uZmlndXJhdGlvbiBTcGFjZSAoMTZNQiBAIDB4MF9GRTAwMDAwMCkgKi8KKwlvdXQzMihDRkdfVFNJMTA4X0NTUl9CQVNFICsgVFNJMTA4X1BDSV9SRUdfT0ZGU0VUICsgUENJX1BGQUJfQkFSMF9VUFBFUiwKKwkgICAgICAwKTsKKwlfX2FzbV9fIF9fdm9sYXRpbGVfXygic3luYyIpOworCisJb3V0MzIoQ0ZHX1RTSTEwOF9DU1JfQkFTRSArIFRTSTEwOF9QQ0lfUkVHX09GRlNFVCArIFBDSV9QRkFCX0JBUjAsCisJICAgICAgMHhGQjAwMDAwMSk7CisJX19hc21fXyBfX3ZvbGF0aWxlX18oInN5bmMiKTsKKworCS8qIFNldCBCdXMgTnVtYmVyIGZvciB0aGUgYXR0YWNoZWQgUENJL1ggYnVzICh3ZSB3aWxsIHVzZSAwIGZvciBOQikgKi8KKworCXRlbXAgPQorCSAgICBpbjMyKENGR19UU0kxMDhfQ1NSX0JBU0UgKyBUU0kxMDhfUENJX1JFR19PRkZTRVQgKyBQQ0lfUENJWF9TVEFUKTsKKworCXRlbXAgJj0gfjB4RkYwMDsJLyogQ2xlYXIgdGhlIEJVU19OVU0gZmllbGQgKi8KKworCW91dDMyKENGR19UU0kxMDhfQ1NSX0JBU0UgKyBUU0kxMDhfUENJX1JFR19PRkZTRVQgKyBQQ0lfUENJWF9TVEFULAorCSAgICAgIHRlbXApOworCisJLyogTWFwIFBDSS9YIElPIFNwYWNlICg2NEtCIEAgMHgwX0ZEMDAwMDAwKSB0YWtlcyBvbmUgMTZNQiBMVVQgZW50cnkgKi8KKworCW91dDMyKENGR19UU0kxMDhfQ1NSX0JBU0UgKyBUU0kxMDhfUENJX1JFR19PRkZTRVQgKyBQQ0lfUEZBQl9JT19VUFBFUiwKKwkgICAgICAwKTsKKwlfX2FzbV9fIF9fdm9sYXRpbGVfXygic3luYyIpOworCisJLyogVGhpcyByZWdpc3RlciBpcyBvbiB0aGUgUENJIHNpZGUgdG8gaW50ZXJwcmV0IHRoZSBhZGRyZXNzIGl0IHJlY2VpdmVzCisJICogYW5kIG1hcHMgaXQgYXMgYSBJTyBhZGRyZXNzLiAKKwkgKi8KKworCW91dDMyKENGR19UU0kxMDhfQ1NSX0JBU0UgKyBUU0kxMDhfUENJX1JFR19PRkZTRVQgKyBQQ0lfUEZBQl9JTywKKwkgICAgICAweEZBMDAwMDAxKTsKKwlfX2FzbV9fIF9fdm9sYXRpbGVfXygic3luYyIpOworCisJLyoKKwkgKiBNYXAgUENJL1ggTWVtb3J5IFNwYWNlCisJICoKKwkgKiBUcmFuc2FjdGlvbnMgZGlyZWN0ZWQgZnJvbSBPQ00gdG8gUENJIE1lbW9yeSBTcGFjZSBhcmUgZGlyZWN0ZWQgCisJICogZnJvbSBQQiB0byBQQ0kKKwkgKiB1bmNoYW5nZWQgKGFzIGRlZmluZWQgYnkgUEJfT0NOX0JBUjEsMiBhbmQgTFVUIHNldHRpbmdzKS4KKwkgKiBJZiBhZGRyZXNzIHJlbWFwcGluZyBpcyByZXF1aXJlZCB0aGUgY29ycmVzcG9uZGluZyBQQ0lfUEZBQl9NRU0zMgorCSAqIGFuZCBQQ0lfUEZBQl9QRk14IHJlZ2lzdGVyIGdyb3VwcyBoYXZlIHRvIGJlIGNvbmZpZ3VyZWQuCisJICoKKwkgKiBNYXAgdGhlIHBhdGggZnJvbSB0aGUgUENJL1ggYnVzIGludG8gdGhlIHN5c3RlbSBtZW1vcnkKKwkgKgorCSAqIFRoZSBtZW1vcnkgbWFwcGVkIHdpbmRvdyBhc3NvdGlhdGVkIHdpdGggUENJIFAyT19CQVIyIHByb3ZpZGVzIAorCSAqIGFjY2VzcyB0byB0aGUgc3lzdGVtIG1lbW9yeSB3aXRob3V0IGFkZHJlc3MgcmVtYXBwaW5nLgorCSAqIEFsbCBzeXN0ZW0gbWVtb3J5IGlzIG9wZW5lZCBmb3IgYWNjZXNzZXMgaW5pdGlhdGVkIGJ5IFBDSS9YIGJ1cworCSAqIG1hc3RlcnMuCisJICoKKwkgKiBJbml0aWFsaXplIExVVCBhc3NvY2lhdGVkIHdpdGggUENJIFAyT19CQVIyCisJICoKKwkgKiBzZXQgcG9pbnRlciB0byBMVVQgYXNzb2NpYXRlZCB3aXRoIFBDSSBQMk9fQkFSMgorCSAqLworCisJcmVnX3B0ciA9CisJICAgICh1bG9uZyAqKSAoQ0ZHX1RTSTEwOF9DU1JfQkFTRSArIFRTSTEwOF9QQ0lfUkVHX09GRlNFVCArIDB4NTAwKTsKKworI2lmZGVmIERJU0FCTEVfUEJNCisKKwkvKiBJbiBjYXNlIHdoZW4gUEJNIGlzIGRpc2FibGVkIChubyBIVyBzdXBwb3J0ZWQgY2FjaGUgc25vb3BuZyBvbiBQQikgCisJICogUDJPX0JBUjIgaXMgZGlyZWN0bHkgbWFwcGVkIGludG8gdGhlIHN5c3RlbSBtZW1vcnkgd2l0aG91dCBhZGRyZXNzIAorCSAqIHRyYW5zbGF0aW9uLiAKKwkgKi8KKworCXJlZ192YWwgPSAweDAwMDAwMDA0OwkvKiBTRFJBTSBwb3J0ICsgTk8gQWRkcl9UcmFuc2xhdGlvbiAqLworCisJZm9yIChpID0gMDsgaSA8IDMyOyBpKyspIHsKKwkJKnJlZ19wdHIrKyA9IHJlZ192YWw7CS8qIFAyT19CQVIyX0xVVHggKi8KKwkJKnJlZ19wdHIrKyA9IDA7CQkvKiBQMk9fQkFSMl9MVVRfVVBQRVJ4ICovCisJfQorCisJLyogdmFsdWUgZm9yIFBDSSBCQVIyIChzaXplID0gNTEyTUIsIEVuYWJsZWQsIE5vIEFkZHIuIFRyYW5zbGF0aW9uKSAqLworCXJlZ192YWwgPSAweDAwMDA3NTAwOworI2Vsc2UKKworCXJlZ192YWwgPSAweDAwMDAwMDAyOwkvKiBEZXN0aW5hdGlvbiBwb3J0ID0gUEJNICovCisKKwlmb3IgKGkgPSAwOyBpIDwgMzI7IGkrKykgeworCQkqcmVnX3B0cisrID0gcmVnX3ZhbDsJLyogUDJPX0JBUjJfTFVUeCAqLworLyogUDJPX0JBUjJfTFVUX1VQUEVSeCA6IFNldCBkYXRhIHN3YXBwaW5nIG1vZGUgZm9yIFBCTSAoYnl0ZSBzd2FwcGluZykgKi8KKwkJKnJlZ19wdHIrKyA9IDB4NDAwMDAwMDA7CisvKiBvZmZzZXQgPSAxNk1CLCBhZGRyZXNzIHRyYW5zbGF0aW9uIGlzIGVuYWJsZWQgdG8gYWxsb3cgYnl0ZSBzd2FwcGluZyAqLworCQlyZWdfdmFsICs9IDB4MDEwMDAwMDA7CisJfQorCisvKiB2YWx1ZSBmb3IgUENJIEJBUjIgKHNpemUgPSA1MTJNQiwgRW5hYmxlZCwgQWRkcmVzcyBUcmFuc2xhdGlvbiBFbmFibGVkKSAqLworCXJlZ192YWwgPSAweDAwMDA3MTAwOworI2VuZGlmCisKKwlfX2FzbV9fIF9fdm9sYXRpbGVfXygiZWllaW8iKTsKKwlfX2FzbV9fIF9fdm9sYXRpbGVfXygic3luYyIpOworCisJb3V0MzIoQ0ZHX1RTSTEwOF9DU1JfQkFTRSArIFRTSTEwOF9QQ0lfUkVHX09GRlNFVCArIFBDSV9QMk9fUEFHRV9TSVpFUywKKwkgICAgICByZWdfdmFsKTsKKwlfX2FzbV9fIF9fdm9sYXRpbGVfXygic3luYyIpOworCisJLyogU2V0IDY0LWJpdCBQQ0kgYnVzIGFkZHJlc3MgZm9yIHN5c3RlbSBtZW1vcnkgCisJICogKCAwIGlzIHRoZSBiZXN0IGNob2ljZSBmb3IgZWFzeSBtYXBwaW5nKSAKKwkgKi8KKworCW91dDMyKENGR19UU0kxMDhfQ1NSX0JBU0UgKyBUU0kxMDhfUENJX1JFR19PRkZTRVQgKyBQQ0lfUDJPX0JBUjIsCisJICAgICAgMHgwMDAwMDAwMCk7CisJb3V0MzIoQ0ZHX1RTSTEwOF9DU1JfQkFTRSArIFRTSTEwOF9QQ0lfUkVHX09GRlNFVCArIFBDSV9QMk9fQkFSMl9VUFBFUiwKKwkgICAgICAweDAwMDAwMDAwKTsKKwlfX2FzbV9fIF9fdm9sYXRpbGVfXygic3luYyIpOworCisjaWZuZGVmIERJU0FCTEVfUEJNCisJLyoKKwkgKiAgVGhlIG1lbW9yeSBtYXBwZWQgd2luZG93IGFzc290aWF0ZWQgd2l0aCBQQ0kgUDJPX0JBUjMgcHJvdmlkZXMgCisJICogIGFjY2VzcyB0byB0aGUgc3lzdGVtIG1lbW9yeSB1c2luZyBTRFJBTSBPQ04gcG9ydCBhbmQgYWRkcmVzcyAKKwkgKiAgdHJhbnNsYXRpb24uIFRoaXMgaXMgYWx0ZXJuYXRpdmUgd2F5IHRvIGFjY2VzcyBTRFJBTSBmcm9tIFBDSSAKKwkgKiAgcmVxdWlyZWQgZm9yIFRzaTEwOCBlbXVsYXRpb24gdGVzdGluZy4KKwkgKiAgQWxsIHN5c3RlbSBtZW1vcnkgaXMgb3BlbmVkIGZvciBhY2Nlc3NlcyBpbml0aWF0ZWQgYnkgCisJICogIFBDSS9YIGJ1cyBtYXN0ZXJzLgorCSAqCisJICogIEluaXRpYWxpemUgTFVUIGFzc29jaWF0ZWQgd2l0aCBQQ0kgUDJPX0JBUjMKKwkgKgorCSAqICBzZXQgcG9pbnRlciB0byBMVVQgYXNzb2NpYXRlZCB3aXRoIFBDSSBQMk9fQkFSMworCSAqLworCXJlZ19wdHIgPQorCSAgICAodWxvbmcgKikgKENGR19UU0kxMDhfQ1NSX0JBU0UgKyBUU0kxMDhfUENJX1JFR19PRkZTRVQgKyAweDYwMCk7CisKKwlyZWdfdmFsID0gMHgwMDAwMDAwNDsJLyogRGVzdGluYXRpb24gcG9ydCA9IFNEQyAqLworCisJZm9yIChpID0gMDsgaSA8IDMyOyBpKyspIHsKKwkJKnJlZ19wdHIrKyA9IHJlZ192YWw7CS8qIFAyT19CQVIzX0xVVHggKi8KKwkJCisvKiBQMk9fQkFSM19MVVRfVVBQRVJ4IDogU2V0IGRhdGEgc3dhcHBpbmcgbW9kZSBmb3IgUEJNIChieXRlIHN3YXBwaW5nKSAqLworCQkqcmVnX3B0cisrID0gMDsJCisJCQorLyogb2Zmc2V0ID0gMTZNQiwgYWRkcmVzcyB0cmFuc2xhdGlvbiBpcyBlbmFibGVkIHRvIGFsbG93IGJ5dGUgc3dhcHBpbmcgKi8KKwkJcmVnX3ZhbCArPSAweDAxMDAwMDAwOworCX0KKworCV9fYXNtX18gX192b2xhdGlsZV9fKCJlaWVpbyIpOworCV9fYXNtX18gX192b2xhdGlsZV9fKCJzeW5jIik7CisKKwkvKiBDb25maWd1cmUgUENJIFAyT19CQVIzIChzaXplID0gNTEyTUIsIEVuYWJsZWQpICovCisKKwlyZWdfdmFsID0KKwkgICAgaW4zMihDRkdfVFNJMTA4X0NTUl9CQVNFICsgVFNJMTA4X1BDSV9SRUdfT0ZGU0VUICsKKwkJIFBDSV9QMk9fUEFHRV9TSVpFUyk7CisJcmVnX3ZhbCAmPSB+MHgwMEZGOworCXJlZ192YWwgfD0gMHgwMDcxOworCW91dDMyKENGR19UU0kxMDhfQ1NSX0JBU0UgKyBUU0kxMDhfUENJX1JFR19PRkZTRVQgKyBQQ0lfUDJPX1BBR0VfU0laRVMsCisJICAgICAgcmVnX3ZhbCk7CisJX19hc21fXyBfX3ZvbGF0aWxlX18oInN5bmMiKTsKKworCS8qIFNldCA2NC1iaXQgYmFzZSBQQ0kgYnVzIGFkZHJlc3MgZm9yIHdpbmRvdyAoMHgyMDAwMDAwMCkgKi8KKworCW91dDMyKENGR19UU0kxMDhfQ1NSX0JBU0UgKyBUU0kxMDhfUENJX1JFR19PRkZTRVQgKyBQQ0lfUDJPX0JBUjNfVVBQRVIsCisJICAgICAgMHgwMDAwMDAwMCk7CisJb3V0MzIoQ0ZHX1RTSTEwOF9DU1JfQkFTRSArIFRTSTEwOF9QQ0lfUkVHX09GRlNFVCArIFBDSV9QMk9fQkFSMywKKwkgICAgICAweDIwMDAwMDAwKTsKKwlfX2FzbV9fIF9fdm9sYXRpbGVfXygic3luYyIpOworCisjZW5kaWYJLyogIURJU0FCTEVfUEJNICovCisKKyNpZmRlZiBFTkFCTEVfUENJX0NTUl9CQVIJCisJLyogb3BlbiBpZiByZXF1aXJlZCBhY2Nlc3MgdG8gVHNpMTA4IENTUnMgZnJvbSB0aGUgUENJL1ggYnVzICovCisJLyogZW5hYmxlIEJBUjAgb24gdGhlIFBDSS9YIGJ1cyAqLworCXJlZ192YWwgPQorCSAgICBpbjMyKENGR19UU0kxMDhfQ1NSX0JBU0UgKyBUU0kxMDhfUENJX1JFR19PRkZTRVQgKyBQQ0lfTUlTQ19DU1IpOworCXJlZ192YWwgfD0gMHgwMjsKKwlvdXQzMihDRkdfVFNJMTA4X0NTUl9CQVNFICsgVFNJMTA4X1BDSV9SRUdfT0ZGU0VUICsgUENJX01JU0NfQ1NSLAorCSAgICAgIHJlZ192YWwpOworCV9fYXNtX18gX192b2xhdGlsZV9fKCJzeW5jIik7CisKKwlvdXQzMihDRkdfVFNJMTA4X0NTUl9CQVNFICsgVFNJMTA4X1BDSV9SRUdfT0ZGU0VUICsgUENJX1AyT19CQVIwX1VQUEVSLAorCSAgICAgIDB4MDAwMDAwMDApOworCW91dDMyKENGR19UU0kxMDhfQ1NSX0JBU0UgKyBUU0kxMDhfUENJX1JFR19PRkZTRVQgKyBQQ0lfUDJPX0JBUjAsCisJICAgICAgQ0ZHX1RTSTEwOF9DU1JfQkFTRSk7CisJX19hc21fXyBfX3ZvbGF0aWxlX18oInN5bmMiKTsKKworI2VuZGlmCisKKwkvKgorCSAqIEZpbmFsbHkgZW5hYmxlIFBDSS9YIEJ1cyBNYXN0ZXIgYW5kIE1lbW9yeSBTcGFjZSBhY2Nlc3MKKwkgKi8KKwkKKwlyZWdfdmFsID0gaW4zMihDRkdfVFNJMTA4X0NTUl9CQVNFICsgVFNJMTA4X1BDSV9SRUdfT0ZGU0VUICsgUENJX0NTUik7CisJcmVnX3ZhbCB8PSAweDA2OworCW91dDMyKENGR19UU0kxMDhfQ1NSX0JBU0UgKyBUU0kxMDhfUENJX1JFR19PRkZTRVQgKyBQQ0lfQ1NSLCByZWdfdmFsKTsKKwlfX2FzbV9fIF9fdm9sYXRpbGVfXygic3luYyIpOworCisjZW5kaWYJLyogQ09ORklHX1BDSSAqLworCisJLyoKKwkgKiBJbml0aWFsaXplIE1QSUMgb3V0cHV0cyAoaW50ZXJydXB0IHBpbnMpOgorCSAqIEludGVycnVwdCByb3V0aW5nIG9uIHRoZSBHcmVuZGVsIEVtdWwuIEJvYXJkOgorCSAqICAgIFBCX0lOVFswXSAtPiBJTlQgKENQVTApCisJICogICAgUEJfSU5UWzFdIC0+IElOVCAoQ1BVMSkKKwkgKiAgICBQQl9JTlRbMl0gLT4gTUNQIChDUFUwKQorCSAqICAgIFBCX0lOVFszXSAtPiBNQ1AgKENQVTEpCisJICogU2V0IGludGVycnVwdCBjb250cm9sbGVyIG91dHB1dHMgYXMgTGV2ZWxfU2Vuc2l0aXZlL0FjdGl2ZV9Mb3cKKwkgKi8KKwlvdXQzMihDRkdfVFNJMTA4X0NTUl9CQVNFICsgVFNJMTA4X01QSUNfUkVHX09GRlNFVCArIE1QSUNfQ1NSKDApLCAweDAyKTsKKwlvdXQzMihDRkdfVFNJMTA4X0NTUl9CQVNFICsgVFNJMTA4X01QSUNfUkVHX09GRlNFVCArIE1QSUNfQ1NSKDEpLCAweDAyKTsKKwlvdXQzMihDRkdfVFNJMTA4X0NTUl9CQVNFICsgVFNJMTA4X01QSUNfUkVHX09GRlNFVCArIE1QSUNfQ1NSKDIpLCAweDAyKTsKKwlvdXQzMihDRkdfVFNJMTA4X0NTUl9CQVNFICsgVFNJMTA4X01QSUNfUkVHX09GRlNFVCArIE1QSUNfQ1NSKDMpLCAweDAyKTsKKwlfX2FzbV9fIF9fdm9sYXRpbGVfXygic3luYyIpOworCisJLyoKKwkgKiBFbnN1cmUgdGhhdCBNYWNoaW5lIENoZWNrIGV4Y2VwdGlvbiBpcyBlbmFibGVkCisJICogV2UgbmVlZCBpdCB0byBzdXBwb3J0IFBDSSBCdXMgcHJvYmluZyAoY29uZmlndXJhdGlvbiByZWFkcykKKwkgKi8KKwkKKwlyZWdfdmFsID0gbWZtc3IoKTsKKwltdG1zcihyZWdfdmFsIHwgTVNSX01FKTsKKworCXJldHVybiAwOworfQorCisvKgorICogTmVlZGVkIHRvIHByaW50IG91dCBMMiBjYWNoZSBpbmZvCisgKiB1c2VkIGluIHRoZSBtaXNjX2luaXRfciBmdW5jdGlvbgorICovCisKK3Vuc2lnbmVkIGxvbmcgZ2V0X2wyY3Iodm9pZCkKK3sKKwl1bnNpZ25lZCBsb25nIGwyY29udHJvbHJlZzsKKwlhc20gdm9sYXRpbGUgKCJtZnNwciAlMCwgMTAxNyI6Ij1yIiAobDJjb250cm9scmVnKTopOworCXJldHVybiBsMmNvbnRyb2xyZWc7Cit9CisKKy8qCisgKiBtaXNjX2luaXRfcigpCisgKgorICogdmFyaW91cyB0aGluZ3MgdG8gZG8gYWZ0ZXIgcmVsb2NhdGlvbgorICoKKyAqLworCitpbnQgbWlzY19pbml0X3Iodm9pZCkKK3sKKwlERUNMQVJFX0dMT0JBTF9EQVRBX1BUUjsKKyNpZmRlZiBDRkdfQ0xLX1NQUkVBRAkvKiBJbml0aWFsaXplIFNwcmVhZC1TcGVjdHJ1bSBDbG9jayBnZW5lcmF0aW9uICovCisJdWxvbmcgaTsKKworCS8qIEVuc3VyZSB0aGF0IFNwcmVhZC1TcGVjdHJ1bSBpcyBkaXNhYmxlZCAqLworCW91dDMyKENGR19UU0kxMDhfQ1NSX0JBU0UgKyBUU0kxMDhfQ0xLX1JFR19PRkZTRVQgKyBDR19QTEwwX0NUUkwwLCAwKTsKKwlvdXQzMihDRkdfVFNJMTA4X0NTUl9CQVNFICsgVFNJMTA4X0NMS19SRUdfT0ZGU0VUICsgQ0dfUExMMV9DVFJMMCwgMCk7CisKKwkvKiBJbml0aWFsaXplIFBMTDE6IENHX1BDSV9DTEsgLCBpbnRlcm5hbCBPQ05fQ0xLCisJICogVXNlcyBwcmUtY2FsY3VsYXRlZCB2YWx1ZSBmb3IgRm91dCA9IDgwMCBNSHosIEZzID0gMzAga0h6LCBEID0gMC41JQorCSAqLworCisJb3V0MzIoQ0ZHX1RTSTEwOF9DU1JfQkFTRSArIFRTSTEwOF9DTEtfUkVHX09GRlNFVCArIENHX1BMTDFfQ1RSTDAsIDB4MDAyZTAwNDQpOwkvKiBEID0gMC4yNSUgKi8KKwlvdXQzMihDRkdfVFNJMTA4X0NTUl9CQVNFICsgVFNJMTA4X0NMS19SRUdfT0ZGU0VUICsgQ0dfUExMMV9DVFJMMSwgMHgwMDAwMDAzOSk7CS8qIEJXQURKICovCisKKwkvKiBJbml0aWFsaXplIFBMTDA6IENHX1BCX0NMS08gICovCisJLyogRGV0ZWN0IFBCIGNsb2NrIGZyZXEuICovCisJaSA9IGluMzIoQ0ZHX1RTSTEwOF9DU1JfQkFTRSArIFRTSTEwOF9DTEtfUkVHX09GRlNFVCArIENHX1BXUlVQX1NUQVRVUyk7CisJaSA9IChpID4+IDE2KSAmIDB4MDc7CS8qIEdldCBQQiBQTEwgbXVsdGlwbGllciAqLworCisJb3V0MzIoQ0ZHX1RTSTEwOF9DU1JfQkFTRSArCisJICAgICAgVFNJMTA4X0NMS19SRUdfT0ZGU0VUICsgQ0dfUExMMF9DVFJMMCwgcGxsMF9jb25maWdbaV0uY3RybDApOworCW91dDMyKENGR19UU0kxMDhfQ1NSX0JBU0UgKworCSAgICAgIFRTSTEwOF9DTEtfUkVHX09GRlNFVCArIENHX1BMTDBfQ1RSTDEsIHBsbDBfY29uZmlnW2ldLmN0cmwxKTsKKworCS8qIFdhaXQgYW5kIHNldCBTU0VOIGZvciBib3RoIFBMTDAgYW5kIDEgKi8KKwl1ZGVsYXkoMTAwMCk7CisJb3V0MzIoQ0ZHX1RTSTEwOF9DU1JfQkFTRSArIFRTSTEwOF9DTEtfUkVHX09GRlNFVCArIENHX1BMTDFfQ1RSTDAsIDB4ODAyZTAwNDQpOwkvKiBEPTAuMjUlICovCisJb3V0MzIoQ0ZHX1RTSTEwOF9DU1JfQkFTRSArCisJICAgICAgVFNJMTA4X0NMS19SRUdfT0ZGU0VUICsgQ0dfUExMMF9DVFJMMCwKKwkgICAgICAweDgwMDAwMDAwIHwgcGxsMF9jb25maWdbaV0uY3RybDApOworI2VuZGlmCS8qIENGR19DTEtfU1BSRUFEICovCisKKyNpZmRlZiBDRkdfTDIKKwlsMmNhY2hlX2VuYWJsZSgpOworI2VuZGlmCisJcHJpbnRmKCJCVVM6ICAgJWQgTUh6XG4iLCBnZC0+YnVzX2NsayAvIDEwMDAwMDApOworCXByaW50ZigiTUVNOiAgICVkIE1IelxuIiwgZ2QtPm1lbV9jbGsgLyAxMDAwMDAwKTsKKworCS8qCisJICogQWxsIHRoZSBpbmZvcm1hdGlvbiBuZWVkZWQgdG8gcHJpbnQgdGhlIGNhY2hlIGRldGFpbHMgaXMgYXZhaWJsYWJsZSAKKwkgKiBhdCB0aGlzIHBvaW50IGkuZS4gYWJvdmUgY2FsbCB0byBsMmNhY2hlX2VuYWJsZSBpcyB0aGUgdmVyeSBsYXN0IAorCSAqIHRoaW5nIGRvbmUgd2l0aCByZWdhcmRzIHRvIGVuYWJsaW5nIGRpYWJsaW5nIHRoZSBjYWNoZS4gCisJICogU28gdGhpcyBzZWVtcyBsaWtlIGEgZ29vZCBwbGFjZSB0byBwcmludCBhbGwgdGhpcyBpbmZvcm1hdGlvbgorCSAqLworCQorCXByaW50ZigiQ0FDSEU6ICIpOworCXN3aXRjaCAoZ2V0X2NwdV90eXBlKCkpIHsKKwljYXNlIENQVV83NDQ3QToKKwkJcHJpbnRmKCJMMSBJbnN0cnVjdGlvbiBjYWNoZSAtIDMyS0IgOC13YXkiKTsKKwkJKGdldF9oaWQwKCkgJiAoMSA8PCAxNSkpID8gcHJpbnRmKCIgRU5BQkxFRFxuIikgOgorCQkgICAgcHJpbnRmKCIgRElTQUJMRURcbiIpOworCQlwcmludGYoIiAgICAgICBMMSBEYXRhIGNhY2hlIC0gMzJLQiA4LXdheSIpOworCQkoZ2V0X2hpZDAoKSAmICgxIDw8IDE0KSkgPyBwcmludGYoIiBFTkFCTEVEXG4iKSA6CisJCSAgICBwcmludGYoIiBESVNBQkxFRFxuIik7CisJCXByaW50ZigiICAgICAgIFVuaWZpZWQgTDIgY2FjaGUgLSA1MTJLQiA4LXdheSIpOworCQkoZ2V0X2wyY3IoKSAmICgxIDw8IDMxKSkgPyBwcmludGYoIiBFTkFCTEVEXG4iKSA6CisJCSAgICBwcmludGYoIiBESVNBQkxFRFxuIik7CisJCXByaW50ZigiXG4iKTsKKwkJYnJlYWs7CisKKwljYXNlIENQVV83NDQ4OgorCQlwcmludGYoIkwxIEluc3RydWN0aW9uIGNhY2hlIC0gMzJLQiA4LXdheSIpOworCQkoZ2V0X2hpZDAoKSAmICgxIDw8IDE1KSkgPyBwcmludGYoIiBFTkFCTEVEXG4iKSA6CisJCSAgICBwcmludGYoIiBESVNBQkxFRFxuIik7CisJCXByaW50ZigiICAgICAgIEwxIERhdGEgY2FjaGUgLSAzMktCIDgtd2F5Iik7CisJCShnZXRfaGlkMCgpICYgKDEgPDwgMTQpKSA/IHByaW50ZigiIEVOQUJMRURcbiIpIDoKKwkJICAgIHByaW50ZigiIERJU0FCTEVEXG4iKTsKKwkJcHJpbnRmKCIgICAgICAgVW5pZmllZCBMMiBjYWNoZSAtIDFNQiA4LXdheSIpOworCQkoZ2V0X2wyY3IoKSAmICgxIDw8IDMxKSkgPyBwcmludGYoIiBFTkFCTEVEXG4iKSA6CisJCSAgICBwcmludGYoIiBESVNBQkxFRFxuIik7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCWJyZWFrOworCX0KKwlyZXR1cm4gMDsKK30KZGlmZiAtLWdpdCBhL2JvYXJkL21wYzc0NDhocGMyL3UtYm9vdC5sZHMgYi9ib2FyZC9tcGM3NDQ4aHBjMi91LWJvb3QubGRzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhmMjQyMTMKLS0tIC9kZXYvbnVsbAorKysgYi9ib2FyZC9tcGM3NDQ4aHBjMi91LWJvb3QubGRzCkBAIC0wLDAgKzEsMTM2IEBACisvKgorICogKEMpIENvcHlyaWdodCAyMDAxCisgKiBKb3NoIEh1YmVyIDxodWJlckBtY2x4LmNvbT4sIE1pc3Npb24gQ3JpdGljYWwgTGludXgsIEluYy4KKyAqCisgKiBTZWUgZmlsZSBDUkVESVRTIGZvciBsaXN0IG9mIHBlb3BsZSB3aG8gY29udHJpYnV0ZWQgdG8gdGhpcworICogcHJvamVjdC4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YKKyAqIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLAorICogTUEgMDIxMTEtMTMwNyBVU0EKKyAqLworCisvKgorICogdS1ib290LmxkcyAtIGxpbmtlciBzY3JpcHQgZm9yIFUtQm9vdCBvbiBtcGM3NDQ4aHBjMiBCb2FyZC4KKyAqLworCitPVVRQVVRfQVJDSChwb3dlcnBjKQorU0VBUkNIX0RJUigvbGliKTsgU0VBUkNIX0RJUigvdXNyL2xpYik7IFNFQVJDSF9ESVIoL3Vzci9sb2NhbC9saWIpOyBTRUFSQ0hfRElSKC91c3IvbG9jYWwvcG93ZXJwYy1hbnktZWxmL2xpYik7CisvKiBEbyB3ZSBuZWVkIGFueSBvZiB0aGVzZSBmb3IgZWxmPworICAgX19EWU5BTUlDID0gMDsgICAgKi8KK1NFQ1RJT05TCit7CisgIC8qIFJlYWQtb25seSBzZWN0aW9ucywgbWVyZ2VkIGludG8gdGV4dCBzZWdtZW50OiAqLworICAuID0gKyBTSVpFT0ZfSEVBREVSUzsKKyAgLmludGVycCA6IHsgKiguaW50ZXJwKSB9CisgIC5oYXNoICAgICAgICAgIDogeyAqKC5oYXNoKQkJfQorICAuZHluc3ltICAgICAgICA6IHsgKiguZHluc3ltKQkJfQorICAuZHluc3RyICAgICAgICA6IHsgKiguZHluc3RyKQkJfQorICAucmVsLnRleHQgICAgICA6IHsgKigucmVsLnRleHQpCQl9CisgIC5yZWxhLnRleHQgICAgIDogeyAqKC5yZWxhLnRleHQpIAl9CisgIC5yZWwuZGF0YSAgICAgIDogeyAqKC5yZWwuZGF0YSkJCX0KKyAgLnJlbGEuZGF0YSAgICAgOiB7ICooLnJlbGEuZGF0YSkgCX0KKyAgLnJlbC5yb2RhdGEgICAgOiB7ICooLnJlbC5yb2RhdGEpIAl9CisgIC5yZWxhLnJvZGF0YSAgIDogeyAqKC5yZWxhLnJvZGF0YSkgCX0KKyAgLnJlbC5nb3QgICAgICAgOiB7ICooLnJlbC5nb3QpCQl9CisgIC5yZWxhLmdvdCAgICAgIDogeyAqKC5yZWxhLmdvdCkJCX0KKyAgLnJlbC5jdG9ycyAgICAgOiB7ICooLnJlbC5jdG9ycykJfQorICAucmVsYS5jdG9ycyAgICA6IHsgKigucmVsYS5jdG9ycykJfQorICAucmVsLmR0b3JzICAgICA6IHsgKigucmVsLmR0b3JzKQl9CisgIC5yZWxhLmR0b3JzICAgIDogeyAqKC5yZWxhLmR0b3JzKQl9CisgIC5yZWwuYnNzICAgICAgIDogeyAqKC5yZWwuYnNzKQkJfQorICAucmVsYS5ic3MgICAgICA6IHsgKigucmVsYS5ic3MpCQl9CisgIC5yZWwucGx0ICAgICAgIDogeyAqKC5yZWwucGx0KQkJfQorICAucmVsYS5wbHQgICAgICA6IHsgKigucmVsYS5wbHQpCQl9CisgIC5pbml0ICAgICAgICAgIDogeyAqKC5pbml0KQl9CisgIC5wbHQgOiB7ICooLnBsdCkgfQorICAudGV4dCAgICAgIDoKKyAgeworICAgIGNwdS83NHh4Xzd4eC9zdGFydC5vCSgudGV4dCkKKworLyogc3RvcmUgdGhlIGVudmlyb25tZW50IGluIGEgc2VwZXJhdGUgc2VjdG9yIGluIHRoZSBib290IGZsYXNoICovCisvKiAgICAuID0gZW52X29mZnNldDsgKi8KKy8qICAgIGNvbW1vbi9lbnZpcm9ubWVudC5vKC50ZXh0KSAqLworCisgICAgKigudGV4dCkKKyAgICAqKC5maXh1cCkKKyAgICAqKC5nb3QxKQorICB9CisgIF9ldGV4dCA9IC47CisgIFBST1ZJREUgKGV0ZXh0ID0gLik7CisgIC5yb2RhdGEgICAgOgorICB7CisgICAgKigucm9kYXRhKQorICAgICooLnJvZGF0YTEpCisgICAgKigucm9kYXRhLnN0cjEuNCkKKyAgfQorICAuZmluaSAgICAgIDogeyAqKC5maW5pKSAgICB9ID0wCisgIC5jdG9ycyAgICAgOiB7ICooLmN0b3JzKSAgIH0KKyAgLmR0b3JzICAgICA6IHsgKiguZHRvcnMpICAgfQorCisgIC8qIFJlYWQtd3JpdGUgc2VjdGlvbiwgbWVyZ2VkIGludG8gZGF0YSBzZWdtZW50OiAqLworICAuID0gKC4gKyAweDAwRkYpICYgMHhGRkZGRkYwMDsKKyAgX2Vyb3RleHQgPSAuOworICBQUk9WSURFIChlcm90ZXh0ID0gLik7CisgIC5yZWxvYyAgIDoKKyAgeworICAgICooLmdvdCkKKyAgICBfR09UMl9UQUJMRV8gPSAuOworICAgICooLmdvdDIpCisgICAgX0ZJWFVQX1RBQkxFXyA9IC47CisgICAgKiguZml4dXApCisgIH0KKyAgX19nb3QyX2VudHJpZXMgPSAoX0ZJWFVQX1RBQkxFXyAtIF9HT1QyX1RBQkxFXykgPj4yOworICBfX2ZpeHVwX2VudHJpZXMgPSAoLiAtIF9GSVhVUF9UQUJMRV8pPj4yOworCisgIC5kYXRhICAgIDoKKyAgeworICAgICooLmRhdGEpCisgICAgKiguZGF0YTEpCisgICAgKiguc2RhdGEpCisgICAgKiguc2RhdGEyKQorICAgICooLmR5bmFtaWMpCisgICAgQ09OU1RSVUNUT1JTCisgIH0KKyAgX2VkYXRhICA9ICAuOworICBQUk9WSURFIChlZGF0YSA9IC4pOworCisgIC4gPSAuOworICBfX3VfYm9vdF9jbWRfc3RhcnQgPSAuOworICAudV9ib290X2NtZCA6IHsgKigudV9ib290X2NtZCkgfQorICBfX3VfYm9vdF9jbWRfZW5kID0gLjsKKworICAuID0gLjsKKyAgX19zdGFydF9fX2V4X3RhYmxlID0gLjsKKyAgX19leF90YWJsZSA6IHsgKihfX2V4X3RhYmxlKSB9CisgIF9fc3RvcF9fX2V4X3RhYmxlID0gLjsKKworICAuID0gQUxJR04oMjU2KTsKKyAgX19pbml0X2JlZ2luID0gLjsKKyAgLnRleHQuaW5pdCA6IHsgKigudGV4dC5pbml0KSB9CisgIC5kYXRhLmluaXQgOiB7ICooLmRhdGEuaW5pdCkgfQorICAuID0gQUxJR04oMjU2KTsKKyAgX19pbml0X2VuZCA9IC47CisKKyAgX19ic3Nfc3RhcnQgPSAuOworICAuYnNzICAgICAgIDoKKyAgeworICAgKiguc2JzcykgKiguc2NvbW1vbikKKyAgICooLmR5bmJzcykKKyAgICooLmJzcykKKyAgICooQ09NTU9OKQorICB9CisgIF9lbmQgPSAuIDsKKyAgUFJPVklERSAoZW5kID0gLik7Cit9CmRpZmYgLS1naXQgYS9jcHUvNzR4eF83eHgvY3B1LmMgYi9jcHUvNzR4eF83eHgvY3B1LmMKaW5kZXggY2E0NWUxNy4uYzNhYWRjYSAxMDA2NDQKLS0tIGEvY3B1Lzc0eHhfN3h4L2NwdS5jCisrKyBiL2NwdS83NHh4Xzd4eC9jcHUuYwpAQCAtNDQsNiArNDQsMTAgQEAKICNpbmNsdWRlIDw3NHh4Xzd4eC5oPgogI2luY2x1ZGUgPGFzbS9jYWNoZS5oPgogCisjaWYgZGVmaW5lZChDT05GSUdfT0ZfRkxBVF9UUkVFKQorI2luY2x1ZGUgPGZ0X2J1aWxkLmg+CisjZW5kaWYKKwogI2lmZGVmIENPTkZJR19BTUlHQU9ORUczU0UKICNpbmNsdWRlICIuLi9ib2FyZC9NQUkvQW1pZ2FPbmVHM1NFL3ZpYTY4Ni5oIgogI2luY2x1ZGUgIi4uL2JvYXJkL01BSS9BbWlnYU9uZUczU0UvbWVtaW8uaCIKQEAgLTEwMSw2ICsxMDUsMTQgQEAKIAkJdHlwZSA9IENQVV83NDU3OwogCQlicmVhazsKIAorCWNhc2UgMHg4MDAzOgorCQl0eXBlID0gQ1BVXzc0NDdBOworCQlicmVhazsKKwkJCisJY2FzZSAweDgwMDQ6CisJCXR5cGUgPSBDUFVfNzQ0ODsKKwkJYnJlYWs7CisJCQogCWRlZmF1bHQ6CiAJCWJyZWFrOwogCX0KQEAgLTE2NCw2ICsxNzYsMTQgQEAKIAkJc3RyID0gIk1QQzc0NTciOwogCQlicmVhazsKIAorCWNhc2UgQ1BVXzc0NDdBOgorCQlzdHIgPSAiTVBDNzQ0N0EiOworCQlicmVhazsKKworCWNhc2UgQ1BVXzc0NDg6CisJCXN0ciA9ICJNUEM3NDQ4IjsKKwkJYnJlYWs7CisKIAlkZWZhdWx0OgogCQlwcmludGYoIlVua25vd24gQ1BVIC0tIFBWUjogMHglMDh4XG4iLCBwdnIpOwogCQlyZXR1cm4gLTE7CkBAIC0yNTYsMjAgKzI3NiwxOSBAQAogLyoKICAqIEZvciB0aGUgNzQwMCB0aGUgVEIgY2xvY2sgcnVucyBhdCAxLzQgdGhlIGNwdSBidXMgc3BlZWQuCiAgKi8KLSNpZmRlZiBDT05GSUdfQU1JR0FPTkVHM1NFCisjaWYgZGVmaW5lZChDT05GSUdfQU1JR0FPTkVHM1NFKSB8fCBkZWZpbmVkKENGR19DT05GSUdfQlVTX0NMSykKIHVuc2lnbmVkIGxvbmcgZ2V0X3RiY2xrKHZvaWQpCiB7CiAJcmV0dXJuIChnZC0+YnVzX2NsayAvIDQpOwogfQotI2Vsc2UJLyogISBDT05GSUdfQU1JR0FPTkVHM1NFICovCisjZWxzZQkvKiAhIENPTkZJR19BTUlHQU9ORUczU0UgYW5kICFDRkdfQ09ORklHX0JVU19DTEsqLwogCiB1bnNpZ25lZCBsb25nIGdldF90YmNsayAodm9pZCkKIHsKIAlyZXR1cm4gQ0ZHX0JVU19IWiAvIDQ7CiB9Ci0jZW5kaWYJLyogQ09ORklHX0FNSUdBT05FRzNTRSAqLworI2VuZGlmCS8qIENPTkZJR19BTUlHQU9ORUczU0Ugb3IgQ0ZHX0NPTkZJR19CVVNfQ0xLKi8KIC8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KLQogI2lmIGRlZmluZWQoQ09ORklHX1dBVENIRE9HKQogI2lmICFkZWZpbmVkKENPTkZJR19QQ0lQUEMyKSAmJiAhZGVmaW5lZChDT05GSUdfQkFCN3h4KQogdm9pZApAQCAtMjgxLDMgKzMwMCwzMCBAQAogI2VuZGlmCS8qIENPTkZJR19XQVRDSERPRyAqLwogCiAvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisKKyNpZmRlZiBDT05GSUdfT0ZfRkxBVF9UUkVFCit2b2lkCitmdF9jcHVfc2V0dXAodm9pZCAqYmxvYiwgYmRfdCAqYmQpCit7CisJdTMyICpwOworCXVsb25nIGNsb2NrOworCWludCBsZW47CisJCQorCWNsb2NrID0gYmQtPmJpX2J1c2ZyZXE7CisJCisJcCA9IGZ0X2dldF9wcm9wKGJsb2IsICIvY3B1cy8iIE9GX0NQVSAiL2J1cy1mcmVxdWVuY3kiLCAmbGVuKTsKKwlpZiAocCAhPSBOVUxMKQorCQkqcCA9IGNwdV90b19iZTMyKGNsb2NrKTsKKworI2lmIGRlZmluZWQoQ09ORklHX1RTSTEwOF9FVEgpCisJcCA9IGZ0X2dldF9wcm9wKGJsb2IsICIvIiBPRl9UU0kgIi9ldGhlcm5ldEA2MjAwL2FkZHJlc3MiLCAmbGVuKTsKKwkJbWVtY3B5KHAsIGJkLT5iaV9lbmV0YWRkciwgNik7CisjZW5kaWYKKyAKKyNpZiBkZWZpbmVkKENPTkZJR19IQVNfRVRIMSkKKwlwID0gZnRfZ2V0X3Byb3AoYmxvYiwgIi8iIE9GX1RTSSAiL2V0aGVybmV0QDY2MDAvYWRkcmVzcyIsICZsZW4pOworCQltZW1jcHkocCwgYmQtPmJpX2VuZXQxYWRkciwgNik7CisjZW5kaWYKK30KKyNlbmRpZgorLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwpkaWZmIC0tZ2l0IGEvY3B1Lzc0eHhfN3h4L2NwdV9pbml0LmMgYi9jcHUvNzR4eF83eHgvY3B1X2luaXQuYwppbmRleCA5M2YxODBmLi4xZGQxYjJjIDEwMDY0NAotLS0gYS9jcHUvNzR4eF83eHgvY3B1X2luaXQuYworKysgYi9jcHUvNzR4eF83eHgvY3B1X2luaXQuYwpAQCAtNDMsNiArNDMsOCBAQAogCWNhc2UgQ1BVXzc0NTA6CiAJY2FzZSBDUFVfNzQ1NToKIAljYXNlIENQVV83NDU3OgorCWNhc2UgQ1BVXzc0NDdBOgorCWNhc2UgQ1BVXzc0NDg6CiAJCS8qIGVuYWJsZSB0aGUgdGltZWJhc2UgYml0IGluIEhJRDAgKi8KIAkJc2V0X2hpZDAoZ2V0X2hpZDAoKSB8IDB4NDAwMDAwMCk7CiAJCWJyZWFrOwpkaWZmIC0tZ2l0IGEvY3B1Lzc0eHhfN3h4L3NwZWVkLmMgYi9jcHUvNzR4eF83eHgvc3BlZWQuYwppbmRleCAyZGM1MTA3Li5kNTIwNzk0IDEwMDY0NAotLS0gYS9jcHUvNzR4eF83eHgvc3BlZWQuYworKysgYi9jcHUvNzR4eF83eHgvc3BlZWQuYwpAQCAtMzEsNiArMzEsOCBAQAogCiBERUNMQVJFX0dMT0JBTF9EQVRBX1BUUjsKIAorZXh0ZXJuIHVuc2lnbmVkIGxvbmcgZ2V0X2JvYXJkX2J1c19jbGsodm9pZCk7CisKIHN0YXRpYyBjb25zdCBpbnQgaGlkMV9tdWx0aXBsaWVyc194XzEwW10gPSB7CiAJMjUsCS8qIDAwMDAgLSAyLjV4ICovCiAJNzUsCS8qIDAwMDEgLSA3LjV4ICovCkBAIC01MCw2ICs1Miw0MSBAQAogCTAJLyogMTExMSAtIG9mZiAqLwogfTsKIAorc3RhdGljIGNvbnN0IGludCBoaWQxXzc0NDdBX211bHRpcGxpZXJzX3hfMTBbXSA9IHsKKwkxMTUsICAgIC8qIDAwMDAwIC0gMTEuNXggICovCisJMTcwLCAgICAvKiAwMDAwMSAtIDE3eCAgICAqLworCTc1LCAgICAgLyogMDAwMTAgLSAgNy41eCAgKi8KKwkxNTAsICAgIC8qIDAwMDExIC0gMTV4ICAgICovCisJNzAsICAgICAvKiAwMDEwMCAtICA3eCAgICAqLworCTE4MCwgICAgLyogMDAxMDEgLSAxOHggICAgKi8KKwkxMCwgICAgIC8qIDAwMTEwIC0gYnlwYXNzICovCisJMjAwLCAgICAvKiAwMDExMSAtIDIweCAgICAqLworCTIwLCAgICAgLyogMDEwMDAgLSAgMnggICAgKi8KKwkyMTAsICAgIC8qIDAxMDAxIC0gMjF4ICAgICovCisJNjUsICAgICAvKiAwMTAxMCAtICA2LjV4ICAqLworCTEzMCwgICAgLyogMDEwMTEgLSAxM3ggICAgKi8KKwk4NSwgICAgIC8qIDAxMTAwIC0gIDguNXggICovCisJMjQwLCAgICAvKiAwMTEwMSAtIDEzeCAgICAqLworCTk1LCAgICAgLyogMDExMTAgLSAgOS41eCAgKi8KKwk5MCwgICAgIC8qIDAxMTExIC0gIDl4ICAgICovCisJMzAsICAgICAvKiAxMDAwMCAtICAzeCAgICAqLworCTEwNSwgICAgLyogMTAwMDEgLSAxMC41eCAgKi8KKwk1NSwgICAgIC8qIDEwMDEwIC0gIDUuNXggICovCisJMTEwLCAgICAvKiAxMDAxMSAtIDExeCAgICAqLworCTQwLCAgICAgLyogMTAxMDAgLSAgNHggICAgKi8KKwkxMDAsICAgIC8qIDEwMTAxIC0gMTB4ICAgICovCisJNTAsICAgICAvKiAxMDExMCAtICA1eCAgICAqLworCTEyMCwgICAgLyogMTAxMTEgLSAxMnggICAgKi8KKwk4MCwgICAgIC8qIDExMDAwIC0gIDh4ICAgICovCisJMTQwLCAgICAvKiAxMTAwMSAtIDE0eCAgICAqLworCTYwLCAgICAgLyogMTEwMTAgLSAgNnggICAgKi8KKwkxNjAsICAgIC8qIDExMDExIC0gMTZ4ICAgICovCisJMTM1LCAgICAvKiAxMTEwMCAtIDEzLjV4ICAqLworCTI4MCwgICAgLyogMTExMDEgLSAyOHggICAgKi8KKwkwLCAgICAgIC8qIDExMTEwIC0gb2ZmICAgICovCisJMTI1ICAgICAvKiAxMTExMSAtIDEyLjV4ICAqLworfTsKKwogc3RhdGljIGNvbnN0IGludCBoaWQxX2Z4X211bHRpcGxpZXJzX3hfMTBbXSA9IHsKIAkwMCwJLyogMDAwMCAtIG9mZiAqLwogCTAwLAkvKiAwMDAxIC0gb2ZmICovCkBAIC04OSw4ICsxMjYsMTkgQEAKIHsKIAl1bG9uZyBjbG9jayA9IDA7CiAKKyNpZmRlZiBDRkdfQ09ORklHX0JVU19DTEsKKwlnZC0+YnVzX2NsayA9IGdldF9ib2FyZF9idXNfY2xrKCk7CisjZWxzZQorCWdkLT5idXNfY2xrID0gQ0ZHX0JVU19DTEs7CisjZW5kaWYKKwogCS8qIGNhbGN1bGF0ZSB0aGUgY2xvY2sgZnJlcXVlbmN5IGJhc2VkIHVwb24gdGhlIENQVSB0eXBlICovCiAJc3dpdGNoIChnZXRfY3B1X3R5cGUoKSkgeworCWNhc2UgQ1BVXzc0NDdBOgorCWNhc2UgQ1BVXzc0NDg6CisJCWNsb2NrID0gKGdkLT5idXNfY2xrIC8gMTApICogaGlkMV83NDQ3QV9tdWx0aXBsaWVyc194XzEwWyhnZXRfaGlkMSAoKSA+PiAxMikgJiAweDFGXTsKKwkJYnJlYWs7CisJCQogCWNhc2UgQ1BVXzc0NTU6CiAJY2FzZSBDUFVfNzQ1NzoKIAkJLyoKQEAgLTk4LDEyICsxNDYsMTIgQEAKIAkJICogTWFrZSBzdXJlIGRpdmlzaW9uIGlzIGRvbmUgYmVmb3JlIG11bHRpcGxpY2F0aW9uIHRvIHByZXZlbnQgMzItYml0CiAJCSAqIGFyaXRobWV0aWMgb3ZlcmZsb3dzIHdoaWNoIHdpbGwgY2F1c2UgYSBuZWdhdGl2ZSBudW1iZXIKIAkJICovCi0JCWNsb2NrID0gKENGR19CVVNfQ0xLIC8gMTApICogaGlkMV9tdWx0aXBsaWVyc194XzEwWyhnZXRfaGlkMSAoKSA+PiAxMykgJiAweEZdOworCQljbG9jayA9IChnZC0+YnVzX2NsayAvIDEwKSAqIGhpZDFfbXVsdGlwbGllcnNfeF8xMFsoZ2V0X2hpZDEgKCkgPj4gMTMpICYgMHhGXTsKIAkJYnJlYWs7CiAKIAljYXNlIENQVV83NTBHWDoKIAljYXNlIENQVV83NTBGWDoKLQkJY2xvY2sgPSBDRkdfQlVTX0NMSyAqIGhpZDFfZnhfbXVsdGlwbGllcnNfeF8xMFtnZXRfaGlkMSAoKSA+PiAyN10gLyAxMDsKKwkJY2xvY2sgPSBnZC0+YnVzX2NsayAqIGhpZDFfZnhfbXVsdGlwbGllcnNfeF8xMFtnZXRfaGlkMSAoKSA+PiAyN10gLyAxMDsKIAkJYnJlYWs7CiAKIAljYXNlIENQVV83NDUwOgpAQCAtMTIwLDcgKzE2OCw3IEBACiAJCSAqIE1ha2Ugc3VyZSBkaXZpc2lvbiBpcyBkb25lIGJlZm9yZSBtdWx0aXBsaWNhdGlvbiB0byBwcmV2ZW50IDMyLWJpdAogCQkgKiBhcml0aG1ldGljIG92ZXJmbG93cyB3aGljaCB3aWxsIGNhdXNlIGEgbmVnYXRpdmUgbnVtYmVyCiAJCSAqLwotCQljbG9jayA9IChDRkdfQlVTX0NMSyAvIDEwKSAqIGhpZDFfbXVsdGlwbGllcnNfeF8xMFtnZXRfaGlkMSAoKSA+PiAyOF07CisJCWNsb2NrID0gKGdkLT5idXNfY2xrIC8gMTApICogaGlkMV9tdWx0aXBsaWVyc194XzEwW2dldF9oaWQxICgpID4+IDI4XTsKIAkJYnJlYWs7CiAKIAljYXNlIENQVV9VTktOT1dOOgpAQCAtMTMwLDcgKzE3OCw2IEBACiAJfQogCiAJZ2QtPmNwdV9jbGsgPSBjbG9jazsKLQlnZC0+YnVzX2NsayA9IENGR19CVVNfQ0xLOwogCiAJcmV0dXJuICgwKTsKIH0KZGlmZiAtLWdpdCBhL2RvYy9SRUFETUUubXBjNzQ0OGhwYzIgYi9kb2MvUkVBRE1FLm1wYzc0NDhocGMyCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjUxNDJhMGYKLS0tIC9kZXYvbnVsbAorKysgYi9kb2MvUkVBRE1FLm1wYzc0NDhocGMyCkBAIC0wLDAgKzEsMTkzIEBACitGcmVlc2NhbGUgTVBDNzQ0OGhwYzIgKFRhaWdhKSBib2FyZAorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKworQ3JlYXRlZCAwOC8xMS8yMDA2IFJveSBaYW5nCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorTVBDNzQ0OGhwYzIgKFRhaWdhKSBib2FyZCBpcyBhIGhpZ2gtcGVyZm9ybWFuY2UgUG93ZXJQQyBzZXJ2ZXIgcmVmZXJlbmNlIAorZGVzaWduLCB3aGljaCBpcyBvcHRpbWl6ZWQgZm9yIGhpZ2ggc3BlZWQgdGhyb3VnaHB1dCBiZXR3ZWVuIHRoZSBwcm9jZXNzb3IgYW5kIAordGhlIG1lbW9yeSwgZGlzayBkcml2ZSBhbmQgRXRoZXJuZXQgcG9ydCBzdWJzeXN0ZW1zLgorCitNUEM3NDQ4aHBjMihUYWlnYSkgaXMgZGVzaWduZWQgdG8gdGhlIG1pY3JvLUFUWCBjaGFzc2lzLCBhbGxvd2luZyBpdCB0byBiZSAKK3VzZWQgaW4gMVUgb3IgMlUgcmFjay1tb3VudCBjaGFzc2lzoa8sIGFzIHdlbGwgYXMgaW4gc3RhbmRhcmQgQVRYL01pY3JvLUFUWCAKK2NoYXNzaXMuCisKK0J1aWxkaW5nIFUtQm9vdAorLS0tLS0tLS0tLS0tLS0tLS0tCitUaGUgbXBjNzQ0OGhwYzIgY29kZSBiYXNlIGlzIGtub3duIHRvIGNvbXBpbGUgdXNpbmc6CisgICAgQmludXRpbHMgMi4xNSwgR2NjIDMuNC4zLCBHbGliYyAyLjMuMworCisgICAgJCBtYWtlIG1wYzc0NDhocGMyX2NvbmZpZworICAgIENvbmZpZ3VyaW5nIGZvciBtcGM3NDQ4aHBjMiBib2FyZC4uLgorCisgICAgJCBtYWtlCisKK01lbW9yeSBNYXAKKy0tLS0tLS0tLS0KKworVGhlIG1lbW9yeSBtYXAgaXMgc2V0dXAgZm9yIExpbnV4IHRvIG9wZXJhdGUgcHJvcGVybHkuCisKK1RoZSBtYXBwaW5nIGlzOgorCisgICBSYW5nZSBTdGFydCAgICAgUmFuZ2UgRW5kICAgICAgIERlZmluaXRpb24gICAgICAgICAgICAgIAlTaXplCisKKyAgIDB4MDAwMF8wMDAwICAgICAweDdmZmZfZmZmZiAgICAgRERSICAgICAgICAgICAgICAgICAgICAgCTJHCisgICAweGUwMDBfMDAwMCAgICAgMHhlN2ZmX2ZmZmYgICAgIFBDSSBNZW1vcnkgICAgICAgICAgICAgIAkxMjhNCisgICAweGZhMDBfMDAwMCAgICAgMHhmYWZmX2ZmZmYgICAgIFBDSSBJTyAgICAgICAgICAgICAgICAgIAkxNk0KKyAgIDB4ZmIwMF8wMDAwICAgICAweGZiZmZfZmZmZiAgICAgUENJIENvbmZpZyAgICAgICAgICAgICAgCTE2TQorICAgMHhmYzAwXzAwMDAgICAgIDB4ZmMwZl9mZmZmICAgICBOVlJBTS9DQURNVVMgICAgICAgICAgICAJMU0KKyAgIDB4ZmUwMF8wMDAwCSAgIDB4ZmVmZl9mZmZmCSAgIFByb21KZXQJCSAgIAkxNk0KKyAgIDB4ZmYwMF8wMDAwICAgICAweGZmODBfMDAwMCAgICAgRkxBU0ggKGJvb3QgZmxhc2gpICAgICAgCThNCisgICAweGZmODBfMDAwMCAgICAgMHhmZmZmX2ZmZmYgICAgIEZMQVNIIChzZWNvbmQgaGFsZiBmbGFzaCkJOE0KKworCitVc2luZyBGbGFzaAorLS0tLS0tLS0tLS0KKworVGhlIE1QQzc0NDhocGMyIGJvYXJkIGhhcyB0d28gImJhbmtzIiBvZiBmbGFzaCwgZWFjaCA4TUIgaW4gc2l6ZSAKKygyXjIzID0gMHgwMDgwMDAwMCkuIAorCitOb3RlOiB0aGUgImJhbmsiIGhlcmUgcmVmZXJzIHRvIGhhbGYgb2YgdGhlIGZsYXNoLiBJbiBmYWN0LCB0aGVyZSBpcyBvbmx5IG9uZSAKK2Jhbmsgb2YgZmxhc2gsIHdoaWNoIGlzIGRpdmlkZWQgaW50byBsb3cgYW5kIGhpZ2ggaGFsZi4gRWFjaCBpcyBjb250cm9sbGVkIGJ5Cit0aGUgbW9zdCBzaWduaWZpY2FudCBiaXQgb2YgdGhlIGFkZHJlc3MgYnVzLiBUaGUgc28gY2FsbGVkICJiYW5rIiBpcyBvbmx5IGZvcgorY29udmVuaWVuY2UuCisKK1RoZXJlIGlzIGEgc3dpdGNoIHdoaWNoIGFsbG93cyB0aGUgImJhbmsiIHRvIGJlIHNlbGVjdGVkLiAgVGhlIHN3aXRjaAorc2V0dGluZ3MgZm9yIHVwZGF0aW5nIGZsYXNoIGFyZSBnaXZlbiBiZWxvdy4KKworVGhlIHUtYm9vdCBjb21tYW5kcyBmb3IgY29weWluZyB0aGUgYm9vdC1iYW5rIGludG8gdGhlIHNlY29uZGFyeSBiYW5rIGFyZQorYXMgZm9sbG93czoKKworICAgICBlcmFzZSBmZjgwMDAwMCBmZjg4MDAwMAorICAgICBjcC5iIGZmMDAwMDAwIGZmODAwMDAwIDgwMDAwCisKK1UtYm9vdCBjb21tYW5kcyBmb3IgZG93bmxvYWRpbmcgYW4gaW1hZ2UgdmlhIHRmdHAgYW5kIGZsYXNoaW5nCitpdCBpbnRvIHRoZSBzZWNvbmRhcnkgYmFuazoKKworICAgICB0ZnRwIDEwMDAwIDx1LWJvb3QuYmluLmltYWdlPgorICAgICBlcmFzZSBmZjAwMDAwMCBmZjA4MDAwMAorICAgICBjcC5iIDEwMDAwIGZmMDAwMDAwIDgwMDAwCisKKworQWZ0ZXIgY29weWluZyB0aGUgaW1hZ2UgaW50byB0aGUgc2Vjb25kIGJhbmsgb2YgZmxhc2gsIGJlIHN1cmUgdG8gdG9nZ2xlCitTVzNbNF0gb24gYm9hcmQgYmVmb3JlIHJlc2V0dGluZyB0aGUgYm9hcmQgaW4gb3JkZXIgdG8gc2V0IHRoZQorc2Vjb25kYXJ5IGJhbmsgYXMgdGhlIGJvb3QtYmFuay4KKworCitCb2FyZCBTd2l0Y2hlcworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisKK01vc3Qgc3dpdGNoZXMgb24gdGhlIGJvYXJkIHNob3VsZCBub3QgYmUgY2hhbmdlZC4gIFRoZSBtb3N0IGZyZXF1ZW50Cit1c2VyLXNldHRhYmxlIHN3aXRjaGVzIG9uIHRoZSBib2FyZCBhcmUgdXNlZCB0byBjb25maWd1cmUKK3RoZSBmbGFzaCBiYW5rcyBhbmQgZGV0ZXJtaW5pbmcgdGhlIFBDSSBmcmVxdWVuY3kuCisKK1NXMVsxLTVdOiBQcm9jZXNzb3IgY29yZSB2b2x0YWdlCisKKyAgICAgIDEyMzQ1CQlDb3JlIFZvbHRhZ2UKKyAgICAgIC0tLS0tCisgIFNXMT0wMTExMQkgICAJICAgMS4wMDBWLgorICBTVzE9MDExMDEJICAgCSAgIDEuMTAwVi4KKyAgU1cxPTAxMDExCSAgIAkgICAxLjIwMFYuCisgIFNXMT0wMTAwMQkgICAJICAgMS4zMDBWIG9ubHkgZm9yIE1QQzc0NDdBLgorCisKK1NXMlsxLTZdOiBDUFUgY29yZSBmcmVxdWVuY3kKKworCQkgIENQVSBDb3JlIEZyZXF1ZW5jeSAoTUh6KQorCQkJQnVzIEZyZXF1ZW5jeQorICAgICAgMTIzNDU2CTEwMAkxMzMJMTY3CTIwMAkgUmF0aW8KKwkKKyAgICAgIC0tLS0tLQorICBTVzI9MTAxMTAwCTUwMAk2NjcJODMzCTEwMDAJICAgNXgKKyAgU1cyPTEwMDEwMAk1NTAJNzMzCTkxNwkxMTAwCSAgIDUuNXgKKyAgU1cyPTExMDEwMAk2MDAJODAwCTEwMDAJMTIwMAkgICA2eAorICBTVzI9MDEwMTAwCTY1MAk4NjYJMTA4MwkxMzAwCSAgIDYuNXgKKyAgU1cyPTAwMTAwMAk3MDAJOTMwCTExNjcJMTQwMAkgICA3eAorICBTVzI9MDAwMTAwCTc1MAkxMDAwCTEyNTAJMTUwMAkgICA3LjV4CisgIFNXMj0xMTAwMDAJODAwCTEwNjYJMTMzMwkxNjAwCSAgIDh4CisgIFNXMj0wMTEwMDAJODUwCTEzMzMJMTQxNwkxNzAwCSAgIDguNXggb25seSBmb3IgTVBDNzQ0N0EKKyAgU1cyPTAxMTExMAk5MDAJMTIwMAkxNTAwCTE4MDAJICAgOXgKKworVGhpcyB0YWJsZSBzaG93cyBvbmx5IGEgc3Vic2V0IG9mIGF2YWlsYWJsZSBmcmVxdWVuY3kgb3B0aW9uczsgc2VlIHRoZSBDUFUgCitoYXJkd2FyZSBzcGVjaWZpY2F0aW9ucyBmb3IgbW9yZSBpbmZvcm1hdGlvbi4KKworCitTVzJbNy04XTogQnVzIFByb3RvY29sIGFuZCBDUFUgUmVzZXQgT3B0aW9uCisKKyAgICAgIDcJCQorICAgICAgLQorICBTVzI9MAkgICAJU3lzdGVtIGJ1cyB1c2VzIE1QWCBidXMgcHJvdG9jb2wKKyAgU1cyPTEJCVN5c3RlbSBidXMgdXNlcyA2MHggYnVzIHByb3RvY29sCisKKyAgICAgIDgJCQorICAgICAgLQorICBTVzI9MAkgICAJVFNJMTA4IGNhbiBjYXVzZSBDUFUgcmVzZXQKKyAgU1cyPTEJCVRTSTEwOCBjYW4gbm90IGNhdXNlIENQVSByZXNldAorCisKK1NXM1sxLThdIHN5c3RlbSBvcHRpb25zCisKKyAgICAgIDEyMwkJCisgICAgICAtLS0KKyAgU1czPXh4eAkgICAJQ29ubmVjdGVkIHRvIEdQSU9bMDoyXSBvbiBUU0kxMDgKKworICAgICAgNAkJCisgICAgICAtCisgIFNXMz0wCSAgIAlDUFUgYm9vdHMgZnJvbSBsb3cgaGFsZiBvZiBmbGFzaAorICBTVzM9MQkJQ1BVIGJvb3RzIGZyb20gaGlnaCBoYWxmIG9mIGZsYXNoCisKKyAgICAgIDUJCQorICAgICAgLQorICBTVzM9MAkgICAJU0FUQSBhbmQgc2xvdDIgY29ubmVjdGVkIHRvIFBDSSBidXMKKyAgU1czPTEJCU9ubHkgc2xvdDEgY29ubmVjdGVkIHRvIFBDSSBidXMKKworICAgICAgNgkJCisgICAgICAtCisgIFNXMz0wCSAgIAlVU0IgY29ubmVjdGVkIHRvIFBDSSBidXMKKyAgU1czPTEJCVVTQiBkaXNjb25uZWN0ZWQgZnJvbSBQQ0kgYnVzCisKKyAgICAgIDcJCQorICAgICAgLQorICBTVzM9MAkgICAJRmxhc2ggaXMgd3JpdGUgcHJvdGVjdGVkCisgIFNXMz0xCQlGbGFzaCBpcyBOT1Qgd3JpdGUgcHJvdGVjdGVkCisKKyAgICAgIDgJCQorICAgICAgLQorICBTVzM9MAkgICAJQ1BVIHdpbGwgYm9vdCBmcm9tIGZsYXNoCisgIFNXMz0xCQlDUFUgd2lsbCBib290IGZyb20gUHJvbUpldAorCitTVzRbMS0zXTogU3lzdGVtIGJ1cyBmcmVxdWVuY3kKKworCQkJQnVzIEZyZXF1ZW5jeSAoTUh6KQorICAgICAgLS0tCisgIFNXND0wMTAJCQkxODMKKyAgU1c0PTAxMQkJCTEwMAorICBTVzQ9MTAwCQkJMTMzCisgIFNXND0xMDEJCQkxNjYgb25seSBmb3IgTVBDNzQ0N0EKKyAgU1c0PTExMAkJCTIwMCBvbmx5IGZvciBNUEM3NDQ4CisgIG90aGVycwkJCXJlc2VydmVkCisJCisKK1NXNFs0LTZdOiBERFIyIFNEUkFNIGZyZXF1ZW5jeQorCisJCQlCdXMgRnJlcXVlbmN5IChNSHopCisgICAgICAtLS0KKyAgU1c0PTAwMAkJICAgZXh0ZXJuYWwgY2xvY2sKKyAgU1c0PTAxMQkJICAgc3lzdGVtIGNsb2NrCQorICBTVzQ9MTAwCQkJMTMzCisgIFNXND0xMDEJCQkxNjYKKyAgU1c0PTExMAkJCTIwMAorICBvdGhlcnMJCQlyZXNlcnZlZAorCisKK1NXNFs3LThdOiBQQ0kvUENJLVggZnJlcXVlbmN5IGNvbnRyb2wKKyAgICAgIDcJCQorICAgICAgLQorICBTVzQ9MAkgICAJUENJL1BDSS1YIGJ1cyBvcGVyYXRlcyBub3JtYWxseQorICBTVzQ9MQkJUENJIGJ1cyBmb3JjZWQgdG8gUENJLTMzIG1vZGUKKworICAgICAgOAkJCisgICAgICAtCisgIFNXND0wCSAgIAlQQ0ktWCBtb2RlIGF0IDEzMyBNSHogYWxsb3dlZAorICBTVzQ9MQkJUENJLVggbW9kZSBsaW1pdGVkIHRvIDEwMCBNSHoKKwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9NYWtlZmlsZSBiL2RyaXZlcnMvTWFrZWZpbGUKaW5kZXggNWEzNjlkZi4uNmEzZWE1ZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9NYWtlZmlsZQorKysgYi9kcml2ZXJzL01ha2VmaWxlCkBAIC0zNSw4ICszNSw4IEBACiAJICBsYW45MWM5Ni5vIFwKIAkgIG5hdHNlbWkubyBuZTIwMDAubyBuZXRhcm1fZXRoLm8gbmV0Y29uc29sZS5vIFwKIAkgIG5zMTY1NTAubyBuczgzODJ4Lm8gbnM4NzMwOC5vIG5zNzUyMF9ldGgubyBvbWFwMTUxMF9pMmMubyBcCi0JICBvbWFwMjR4eF9pMmMubyBwY2kubyBwY2lfYXV0by5vIHBjaV9pbmRpcmVjdC5vIFwKLQkgIHBjbmV0Lm8gcGxiMjgwMF9ldGgubyBcCisJICBvbWFwMjR4eF9pMmMubyBwY2kubyBwY2lfYXV0by5vIHBjaV9pbmRpcmVjdC5vIHRzaTEwOF9wY2kub1wKKwkgIHRzaTEwOF9pMmMubyBwY25ldC5vIHBsYjI4MDBfZXRoLm8gXAogCSAgcHMyc2VyLm8gcHMybXVsdC5vIHBjX2tleWIubyBcCiAJICBydGw4MDE5Lm8gcnRsODEzOS5vIHJ0bDgxNjkubyBcCiAJICBzM2M0NTEwYl9ldGgubyBzM2M0NTEwYl91YXJ0Lm8gXApAQCAtNDUsNyArNDUsNyBAQAogCSAgc2VyaWFsX3BsMDEwLm8gc2VyaWFsX3BsMDExLm8gc2VyaWFsX3h1YXJ0bGl0ZS5vIFwKIAkgIHNsODExX3VzYi5vIHNtNTAxLm8gc21jOTExMTEubyBzbWlMeW54RU0ubyBcCiAJICBzdGF0dXNfbGVkLm8gc3ltNTNjOHh4Lm8gYWhjaS5vIFwKLQkgIHRpX3BjaTE0MTBhLm8gdGlnb24zLm8gdHNlYy5vIFwKKwkgIHRpX3BjaTE0MTBhLm8gdGlnb24zLm8gdHNlYy5vIHRzaTEwOF9ldGgub1wKIAkgIHVzYmRjb3JlLm8gdXNiZGNvcmVfZXAwLm8gdXNiZGNvcmVfb21hcDE1MTAubyB1c2J0dHkubyBcCiAJICB2aWRlb21vZGVzLm8gdzgzYzU1M2YubyBcCiAJICBrczg2OTVldGgubyBcCmRpZmYgLS1naXQgYS9kcml2ZXJzL2NmaV9mbGFzaC5jIGIvZHJpdmVycy9jZmlfZmxhc2guYwppbmRleCBmZDBhMTg2Li4zM2E1ODIyIDEwMDY0NAotLS0gYS9kcml2ZXJzL2NmaV9mbGFzaC5jCisrKyBiL2RyaXZlcnMvY2ZpX2ZsYXNoLmMKQEAgLTIsOSArMiwxMiBAQAogICogKEMpIENvcHlyaWdodCAyMDAyLTIwMDQKICAqIEJyYWQgS2VtcCwgU2VyYW5vYSBOZXR3b3JrcywgQnJhZC5LZW1wQHNlcmFub2EuY29tCiAgKgotICogQ29weXJpZ2h0IChDKSAyMDAzIEFyYWJlbGxhIFNvZnR3YXJlIEx0ZC4KKyAqIENvcHlyaWdodCAoQykgMjAwMywgMjAwNiBBcmFiZWxsYSBTb2Z0d2FyZSBMdGQuCiAgKiBZdWxpIEJhcmNvaGVuIDx5dWxpQGFyYWJlbGxhc3cuY29tPgogICogTW9kaWZpZWQgdG8gd29yayB3aXRoIEFNRCBmbGFzaGVzCisgKiBBZGRlZCBzdXBwb3J0IGZvciBieXRlIGxhbmVzIHN3YXAKKyAqIEFkZGVkIHN1cHBvcnQgZm9yIDMyLWJpdCBjaGlwcyBjb25zaXN0aW5nIG9mIHR3byAxNi1iaXQgZGV2aWNlcworICogKGZvciBleGFtcGxlLCBTNzBHTDI1Nk0wMCkKICAqCiAgKiBDb3B5cmlnaHQgKEMpIDIwMDQKICAqIEVkIE9rZXJzb24KQEAgLTQ1LDEwICs0OCwxMyBAQAogLyogI2RlZmluZSBERUJVRwkqLwogCiAjaW5jbHVkZSA8Y29tbW9uLmg+CisKKyNpZmRlZglDRkdfRkxBU0hfQ0ZJX0RSSVZFUgorCisjaW5jbHVkZSA8d2F0Y2hkb2cuaD4KICNpbmNsdWRlIDxhc20vcHJvY2Vzc29yLmg+CiAjaW5jbHVkZSA8YXNtL2J5dGVvcmRlci5oPgogI2luY2x1ZGUgPGVudmlyb25tZW50Lmg+Ci0jaWZkZWYJQ0ZHX0ZMQVNIX0NGSV9EUklWRVIKIAogLyoKICAqIFRoaXMgZmlsZSBpbXBsZW1lbnRzIGEgQ29tbW9uIEZsYXNoIEludGVyZmFjZSAoQ0ZJKSBkcml2ZXIgZm9yIFUtQm9vdC4KQEAgLTcxLDYgKzc3LDEwIEBACiAgKiBWZXJpZnkgZXJhc2UgYW5kIHByb2dyYW0gdGltZW91dHMuCiAgKi8KIAorI2lmIGRlZmluZWQoX19MSVRUTEVfRU5ESUFOKSAmJiAhZGVmaW5lZChDRkdfRkxBU0hfQ0ZJX1NXQVApCisjZGVmaW5lIENGR19GTEFTSF9DRklfU1dBUAorI2VuZGlmCisKICNpZm5kZWYgQ0ZHX0ZMQVNIX0JBTktTX0xJU1QKICNkZWZpbmUgQ0ZHX0ZMQVNIX0JBTktTX0xJU1QgeyBDRkdfRkxBU0hfQkFTRSB9CiAjZW5kaWYKQEAgLTI2OCw3ICsyNzgsNyBAQAogCXVjaGFyICpjcDsKIAogCWNwID0gZmxhc2hfbWFrZV9hZGRyIChpbmZvLCAwLCBvZmZzZXQpOwotI2lmIGRlZmluZWQoX19MSVRUTEVfRU5ESUFOKQorI2lmIGRlZmluZWQoQ0ZHX0ZMQVNIX0NGSV9TV0FQKQogCXJldHVybiAoY3BbMF0pOwogI2Vsc2UKIAlyZXR1cm4gKGNwW2luZm8tPnBvcnR3aWR0aCAtIDFdKTsKQEAgLTI5NSw3ICszMDUsNyBAQAogCQlkZWJ1ZyAoImFkZHJbJXhdID0gMHgleFxuIiwgeCwgYWRkclt4XSk7CiAJfQogI2VuZGlmCi0jaWYgZGVmaW5lZChfX0xJVFRMRV9FTkRJQU4pCisjaWYgZGVmaW5lZChDRkdfRkxBU0hfQ0ZJX1NXQVApCiAJcmV0dmFsID0gKChhZGRyWyhpbmZvLT5wb3J0d2lkdGgpXSA8PCA4KSB8IGFkZHJbMF0pOwogI2Vsc2UKIAlyZXR2YWwgPSAoKGFkZHJbKDIgKiBpbmZvLT5wb3J0d2lkdGgpIC0gMV0gPDwgOCkgfApAQCAtMzI3LDcgKzMzNyw3IEBACiAJCWRlYnVnICgiYWRkclsleF0gPSAweCV4XG4iLCB4LCBhZGRyW3hdKTsKIAl9CiAjZW5kaWYKLSNpZiBkZWZpbmVkKF9fTElUVExFX0VORElBTikKKyNpZiBkZWZpbmVkKENGR19GTEFTSF9DRklfU1dBUCkKIAlyZXR2YWwgPSAoYWRkclswXSA8PCAxNikgfCAoYWRkclsoaW5mby0+cG9ydHdpZHRoKV0gPDwgMjQpIHwKIAkJKGFkZHJbKDIgKiBpbmZvLT5wb3J0d2lkdGgpXSkgfCAoYWRkclsoMyAqIGluZm8tPnBvcnR3aWR0aCldIDw8IDgpOwogI2Vsc2UKQEAgLTg5MiwxMiArOTAyLDIyIEBACiAJaW50IGk7CiAJdWNoYXIgKmNwID0gKHVjaGFyICopIGNtZGJ1ZjsKIAotI2lmIGRlZmluZWQoX19MSVRUTEVfRU5ESUFOKQorI2lmIGRlZmluZWQoQ0ZHX0ZMQVNIX0NGSV9TV0FQKQogCWZvciAoaSA9IGluZm8tPnBvcnR3aWR0aDsgaSA+IDA7IGktLSkKICNlbHNlCiAJZm9yIChpID0gMTsgaSA8PSBpbmZvLT5wb3J0d2lkdGg7IGkrKykKICNlbmRpZgogCQkqY3ArKyA9IChpICYgKGluZm8tPmNoaXB3aWR0aCAtIDEpKSA/ICdcMCcgOiBjbWQ7CisjaWZkZWYgQ0ZHX0ZMQVNIX0NGSV8yeDE2CisJaWYgKChpbmZvLT5wb3J0d2lkdGggPT0gRkxBU0hfQ0ZJXzMyQklUKSAmJiAoaW5mby0+Y2hpcHdpZHRoID09IEZMQVNIX0NGSV9CWTE2KSkKKwl7CisJICAgdWNoYXIgdG1wOworCSAgIGNwID0gKHVjaGFyICopIGNtZGJ1ZjsKKwkgICB0bXAgPSBjcFsxXTsKKwkgICBjcFsxXSA9IGNwWzJdOworCSAgIGNwWzJdID0gdG1wOworCX0KKyNlbmRpZiAvKiBDRkdfRkxBU0hfQ0ZJXzJ4MTYgKi8KIH0KIAogLyoKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdHNpMTA4X2V0aC5jIGIvZHJpdmVycy90c2kxMDhfZXRoLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDk1YTA0NwotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvdHNpMTA4X2V0aC5jCkBAIC0wLDAgKzEsMTA0MyBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKgorICogQ29weXJpZ2h0IChjKSAyMDA1IEZyZWVzY2FsZSBTZW1pY29uZHVjdG9yLCBJbmMuCisgKgorICogU2VlIGZpbGUgQ1JFRElUUyBmb3IgbGlzdCBvZiBwZW9wbGUgd2hvIGNvbnRyaWJ1dGVkIHRvIHRoaXMKKyAqIHByb2plY3QuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mCisgKiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwKKyAqIE1BIDAyMTExLTEzMDcgVVNBCisgKgorICogRGVzY3JpcHRpb246CisgKiAgIEV0aGVybmV0IGludGVyZmFjZSBmb3IgVHVuZHJhIFRTSTEwOCBicmlkZ2UgY2hpcAorICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworI2luY2x1ZGUgPGNvbmZpZy5oPgorCisjaWYgKENPTkZJR19DT01NQU5EUyAmIENGR19DTURfTkVUKSAmJiBkZWZpbmVkKENPTkZJR19ORVRfTVVMVEkpIFwKKwkmJiBkZWZpbmVkKENPTkZJR19UU0kxMDhfRVRIKQorCisjaWYgIWRlZmluZWQoQ09ORklHX1RTSTEwOF9FVEhfTlVNX1BPUlRTKSB8fCAoQ09ORklHX1RTSTEwOF9FVEhfTlVNX1BPUlRTID4gMikKKyNlcnJvciAiQ09ORklHX1RTSTEwOF9FVEhfTlVNX1BPUlRTIG11c3QgYmUgZGVmaW5lZCBhcyAxIG9yIDIiCisjZW5kaWYKKworI2luY2x1ZGUgPGNvbW1vbi5oPgorI2luY2x1ZGUgPG1hbGxvYy5oPgorI2luY2x1ZGUgPG5ldC5oPgorI2luY2x1ZGUgPGFzbS9jYWNoZS5oPgorCisjaWZkZWYgREVCVUcKKyNkZWZpbmUgVFNJMTA4X0VUSF9ERUJVRyA3CisjZWxzZQorI2RlZmluZSBUU0kxMDhfRVRIX0RFQlVHIDAKKyNlbmRpZgorCisjaWYgVFNJMTA4X0VUSF9ERUJVRyA+IDAKKyNkZWZpbmUgZGVidWdfbGV2KGxldiwgZm10LCBhcmdzLi4uKSBpZiAobGV2IDw9IFRTSTEwOF9FVEhfREVCVUcpIHByaW50ZigiJXMgJWQ6ICIgZm10LCBfX0ZVTkNUSU9OX18sIF9fTElORV9fLCAjI2FyZ3MpCisjZWxzZQorI2RlZmluZSBkZWJ1Z19sZXYobGV2LCBmbXQsIGFyZ3MuLi4pIGRve313aGlsZSgwKQorI2VuZGlmCisKKyNkZWZpbmUgUlhfUFJJTlRfRVJST1JTCisjZGVmaW5lIFRYX1BSSU5UX0VSUk9SUworCisjZGVmaW5lIEVUSF9CQVNFICAoQ0ZHX1RTSTEwOF9DU1JfQkFTRSArIDB4NjAwMCkKKworI2RlZmluZSBFVEhfUE9SVF9PRkZTRVQgIDB4NDAwCisKKyNkZWZpbmUgX19SRUczMihiYXNlLCBvZmZzZXQpICgqKCh2b2xhdGlsZSB1MzIgKikoKGNoYXIgKikoYmFzZSkgKyAob2Zmc2V0KSkpKQorCisjZGVmaW5lIHJlZ19NQUNfQ09ORklHXzEoYmFzZSkgICAgICAgICAgICAgICAgIF9fUkVHMzIoYmFzZSwgMHgwMDAwMDAwMCkKKyNkZWZpbmUgTUFDX0NPTkZJR18xX1RYX0VOQUJMRSAgICAgICAgICAgICAgICgweDAwMDAwMDAxKQorI2RlZmluZSBNQUNfQ09ORklHXzFfU1lOQ19UWF9FTkFCTEUgICAgICAgICAgKDB4MDAwMDAwMDIpCisjZGVmaW5lIE1BQ19DT05GSUdfMV9SWF9FTkFCTEUgICAgICAgICAgICAgICAoMHgwMDAwMDAwNCkKKyNkZWZpbmUgTUFDX0NPTkZJR18xX1NZTkNfUlhfRU5BQkxFICAgICAgICAgICgweDAwMDAwMDA4KQorI2RlZmluZSBNQUNfQ09ORklHXzFfVFhfRkxPV19DT05UUk9MICAgICAgICAgKDB4MDAwMDAwMTApCisjZGVmaW5lIE1BQ19DT05GSUdfMV9SWF9GTE9XX0NPTlRST0wgICAgICAgICAoMHgwMDAwMDAyMCkKKyNkZWZpbmUgTUFDX0NPTkZJR18xX0xPT1BfQkFDSyAgICAgICAgICAgICAgICgweDAwMDAwMTAwKQorI2RlZmluZSBNQUNfQ09ORklHXzFfUkVTRVRfVFhfRlVOQ1RJT04gICAgICAgKDB4MDAwMTAwMDApCisjZGVmaW5lIE1BQ19DT05GSUdfMV9SRVNFVF9SWF9GVU5DVElPTiAgICAgICAoMHgwMDAyMDAwMCkKKyNkZWZpbmUgTUFDX0NPTkZJR18xX1JFU0VUX1RYX01BQyAgICAgICAgICAgICgweDAwMDQwMDAwKQorI2RlZmluZSBNQUNfQ09ORklHXzFfUkVTRVRfUlhfTUFDICAgICAgICAgICAgKDB4MDAwODAwMDApCisjZGVmaW5lIE1BQ19DT05GSUdfMV9TSU1fUkVTRVQgICAgICAgICAgICAgICAoMHg0MDAwMDAwMCkKKyNkZWZpbmUgTUFDX0NPTkZJR18xX1NPRlRfUkVTRVQgICAgICAgICAgICAgICgweDgwMDAwMDAwKQorCisjZGVmaW5lIHJlZ19NQUNfQ09ORklHXzIoYmFzZSkgICAgICAgICAgICAgICAgIF9fUkVHMzIoYmFzZSwgMHgwMDAwMDAwNCkKKyNkZWZpbmUgTUFDX0NPTkZJR18yX0ZVTExfRFVQTEVYICAgICAgICAgICgweDAwMDAwMDAxKQorI2RlZmluZSBNQUNfQ09ORklHXzJfQ1JDX0VOQUJMRSAgICAgICAgICAgKDB4MDAwMDAwMDIpCisjZGVmaW5lIE1BQ19DT05GSUdfMl9QQURfQ1JDICAgICAgICAgICAgICAoMHgwMDAwMDAwNCkKKyNkZWZpbmUgTUFDX0NPTkZJR18yX0xFTkdUSF9DSEVDSyAgICAgICAgICgweDAwMDAwMDEwKQorI2RlZmluZSBNQUNfQ09ORklHXzJfSFVHRV9GUkFNRSAgICAgICAgICAgKDB4MDAwMDAwMjApCisjZGVmaW5lIE1BQ19DT05GSUdfMl9JTlRFUkZBQ0VfTU9ERSh2YWwpICAoKCh2YWwpICYgMHgzKSA8PCA4KQorI2RlZmluZSBNQUNfQ09ORklHXzJfUFJFQU1CTEVfTEVOR1RIKHZhbCkgKCgodmFsKSAmIDB4ZikgPDwgMTIpCisjZGVmaW5lIElOVEVSRkFDRV9NT0RFX05JQkJMRSAgICAgICAgICAgICAxCS8qIDEwLzEwMCBNYi9zIE1JSSkgKi8KKyNkZWZpbmUgSU5URVJGQUNFX01PREVfQllURSAgICAgICAgICAgICAgIDIJLyogMTAwMCBNYi9zIEdNSUkvVEJJICovCisKKyNkZWZpbmUgcmVnX01BWElNVU1fRlJBTUVfTEVOR1RIKGJhc2UpICAgICAgICAgX19SRUczMihiYXNlLCAweDAwMDAwMDEwKQorCisjZGVmaW5lIHJlZ19NSUlfTUdNVF9DT05GSUcoYmFzZSkgICAgICAgICAgICAgIF9fUkVHMzIoYmFzZSwgMHgwMDAwMDAyMCkKKyNkZWZpbmUgTUlJX01HTVRfQ09ORklHX01HTVRfQ0xPQ0tfU0VMRUNUKHZhbCkgICAgKCh2YWwpICYgMHg3KQorI2RlZmluZSBNSUlfTUdNVF9DT05GSUdfTk9fUFJFQU1CTEUgICAgICAgICAgICAgICAoMHgwMDAwMDAxMCkKKyNkZWZpbmUgTUlJX01HTVRfQ09ORklHX1NDQU5fSU5DUkVNRU5UICAgICAgICAgICAgKDB4MDAwMDAwMjApCisjZGVmaW5lIE1JSV9NR01UX0NPTkZJR19SRVNFVF9NR01UICAgICAgICAgICAgICAgICgweDgwMDAwMDAwKQorCisjZGVmaW5lIHJlZ19NSUlfTUdNVF9DT01NQU5EKGJhc2UpICAgICAgICAgICAgIF9fUkVHMzIoYmFzZSwgMHgwMDAwMDAyNCkKKyNkZWZpbmUgTUlJX01HTVRfQ09NTUFORF9SRUFEX0NZQ0xFICgweDAwMDAwMDAxKQorI2RlZmluZSBNSUlfTUdNVF9DT01NQU5EX1NDQU5fQ1lDTEUgKDB4MDAwMDAwMDIpCisKKyNkZWZpbmUgcmVnX01JSV9NR01UX0FERFJFU1MoYmFzZSkgICAgICAgICAgICAgX19SRUczMihiYXNlLCAweDAwMDAwMDI4KQorI2RlZmluZSByZWdfTUlJX01HTVRfQ09OVFJPTChiYXNlKSAgICAgICAgICAgICBfX1JFRzMyKGJhc2UsIDB4MDAwMDAwMmMpCisjZGVmaW5lIHJlZ19NSUlfTUdNVF9TVEFUVVMoYmFzZSkgICAgICAgICAgICAgIF9fUkVHMzIoYmFzZSwgMHgwMDAwMDAzMCkKKworI2RlZmluZSByZWdfTUlJX01HTVRfSU5ESUNBVE9SUyhiYXNlKSAgICAgICAgICBfX1JFRzMyKGJhc2UsIDB4MDAwMDAwMzQpCisjZGVmaW5lIE1JSV9NR01UX0lORElDQVRPUlNfQlVTWSAgICAgICgweDAwMDAwMDAxKQorI2RlZmluZSBNSUlfTUdNVF9JTkRJQ0FUT1JTX1NDQU4gICAgICAoMHgwMDAwMDAwMikKKyNkZWZpbmUgTUlJX01HTVRfSU5ESUNBVE9SU19OT1RfVkFMSUQgKDB4MDAwMDAwMDQpCisKKyNkZWZpbmUgcmVnX0lOVEVSRkFDRV9TVEFUVVMoYmFzZSkgICAgICAgICAgICAgX19SRUczMihiYXNlLCAweDAwMDAwMDNjKQorI2RlZmluZSBJTlRFUkZBQ0VfU1RBVFVTX0xJTktfRkFJTCAgICAoMHgwMDAwMDAwOCkKKyNkZWZpbmUgSU5URVJGQUNFX1NUQVRVU19FWENFU1NfREVGRVIgKDB4MDAwMDAyMDApCisKKyNkZWZpbmUgcmVnX1NUQVRJT05fQUREUkVTU18xKGJhc2UpICAgICAgICAgICAgX19SRUczMihiYXNlLCAweDAwMDAwMDQwKQorI2RlZmluZSByZWdfU1RBVElPTl9BRERSRVNTXzIoYmFzZSkgICAgICAgICAgICBfX1JFRzMyKGJhc2UsIDB4MDAwMDAwNDQpCisKKyNkZWZpbmUgcmVnX1BPUlRfQ09OVFJPTChiYXNlKSAgICAgICAgICAgICAgICAgX19SRUczMihiYXNlLCAweDAwMDAwMjAwKQorI2RlZmluZSBQT1JUX0NPTlRST0xfUFJJICAgICAoMHgwMDAwMDAwMSkKKyNkZWZpbmUgUE9SVF9DT05UUk9MX0JQVCAgICAgKDB4MDAwMTAwMDApCisjZGVmaW5lIFBPUlRfQ09OVFJPTF9TUEQgICAgICgweDAwMDQwMDAwKQorI2RlZmluZSBQT1JUX0NPTlRST0xfUkJDICAgICAoMHgwMDA4MDAwMCkKKyNkZWZpbmUgUE9SVF9DT05UUk9MX1BSQiAgICAgKDB4MDAyMDAwMDApCisjZGVmaW5lIFBPUlRfQ09OVFJPTF9ESVMgICAgICgweDAwNDAwMDAwKQorI2RlZmluZSBQT1JUX0NPTlRST0xfVEJJICAgICAoMHgwMDgwMDAwMCkKKyNkZWZpbmUgUE9SVF9DT05UUk9MX1NURSAgICAgKDB4MTAwMDAwMDApCisjZGVmaW5lIFBPUlRfQ09OVFJPTF9aT1IgICAgICgweDIwMDAwMDAwKQorI2RlZmluZSBQT1JUX0NPTlRST0xfQ0xSICAgICAoMHg0MDAwMDAwMCkKKyNkZWZpbmUgUE9SVF9DT05UUk9MX1NSVCAgICAgKDB4ODAwMDAwMDApCisKKyNkZWZpbmUgcmVnX1RYX0NPTkZJRyhiYXNlKSAgICAgICAgICAgICAgICAgICAgX19SRUczMihiYXNlLCAweDAwMDAwMjIwKQorI2RlZmluZSBUWF9DT05GSUdfU1RBUlRfUSAoMHgwMDAwMDAwMykKKyNkZWZpbmUgVFhfQ09ORklHX0VIUCAgICAgKDB4MDA0MDAwMDApCisjZGVmaW5lIFRYX0NPTkZJR19DSFAgICAgICgweDAwODAwMDAwKQorI2RlZmluZSBUWF9DT05GSUdfUlNUICAgICAoMHg4MDAwMDAwMCkKKworI2RlZmluZSByZWdfVFhfQ09OVFJPTChiYXNlKSAgICAgICAgICAgICAgICAgICBfX1JFRzMyKGJhc2UsIDB4MDAwMDAyMjQpCisjZGVmaW5lIFRYX0NPTlRST0xfR08gICAgICgweDAwMDA4MDAwKQorI2RlZmluZSBUWF9DT05UUk9MX01QICAgICAoMHgwMTAwMDAwMCkKKyNkZWZpbmUgVFhfQ09OVFJPTF9FQUkgICAgKDB4MjAwMDAwMDApCisjZGVmaW5lIFRYX0NPTlRST0xfQUJUICAgICgweDQwMDAwMDAwKQorI2RlZmluZSBUWF9DT05UUk9MX0VJSSAgICAoMHg4MDAwMDAwMCkKKworI2RlZmluZSByZWdfVFhfU1RBVFVTKGJhc2UpICAgICAgICAgICAgICAgICAgICBfX1JFRzMyKGJhc2UsIDB4MDAwMDAyMjgpCisjZGVmaW5lIFRYX1NUQVRVU19RVUVVRV9VU0FCTEUgKDB4MDAwMDAwMGYpCisjZGVmaW5lIFRYX1NUQVRVU19DVVJSX1EgICAgICAgKDB4MDAwMDAzMDApCisjZGVmaW5lIFRYX1NUQVRVU19BQ1QgICAgICAgICAgKDB4MDAwMDgwMDApCisjZGVmaW5lIFRYX1NUQVRVU19RVUVVRV9JRExFICAgKDB4MDAwZjAwMDApCisjZGVmaW5lIFRYX1NUQVRVU19FT1FfUEVORElORyAgKDB4MGYwMDAwMDApCisKKyNkZWZpbmUgcmVnX1RYX0VYVEVOREVEX1NUQVRVUyhiYXNlKSAgICAgICAgICAgX19SRUczMihiYXNlLCAweDAwMDAwMjJjKQorI2RlZmluZSBUWF9FWFRFTkRFRF9TVEFUVVNfRU5EX09GX1FVRVVFX0NPTkRJVElPTiAgICAgICAgICgweDAwMDAwMDBmKQorI2RlZmluZSBUWF9FWFRFTkRFRF9TVEFUVVNfRU5EX09GX0ZSQU1FX0NPTkRJVElPTiAgICAgICAgICgweDAwMDAwZjAwKQorI2RlZmluZSBUWF9FWFRFTkRFRF9TVEFUVVNfREVTQ1JJUFRPUl9JTlRFUlJVUFRfQ09ORElUSU9OICgweDAwMGYwMDAwKQorI2RlZmluZSBUWF9FWFRFTkRFRF9TVEFUVVNfRVJST1JfRkxBRyAgICAgICAgICAgICAgICAgICAgICgweDBmMDAwMDAwKQorCisjZGVmaW5lIHJlZ19UWF9USFJFU0hPTERTKGJhc2UpICAgICAgICAgICAgICAgIF9fUkVHMzIoYmFzZSwgMHgwMDAwMDIzMCkKKworI2RlZmluZSByZWdfVFhfRElBR05PU1RJQ19BRERSKGJhc2UpICAgICAgICAgICBfX1JFRzMyKGJhc2UsIDB4MDAwMDAyNzApCisjZGVmaW5lIFRYX0RJQUdOT1NUSUNfQUREUl9JTkRFWCAgICgweDAwMDAwMDdmKQorI2RlZmluZSBUWF9ESUFHTk9TVElDX0FERFJfREZSICAgICAoMHg0MDAwMDAwMCkKKyNkZWZpbmUgVFhfRElBR05PU1RJQ19BRERSX0FJICAgICAgKDB4ODAwMDAwMDApCisKKyNkZWZpbmUgcmVnX1RYX0RJQUdOT1NUSUNfREFUQShiYXNlKSAgICAgICAgICAgX19SRUczMihiYXNlLCAweDAwMDAwMjc0KQorCisjZGVmaW5lIHJlZ19UWF9FUlJPUl9TVEFUVVMoYmFzZSkgICAgICAgICAgICAgIF9fUkVHMzIoYmFzZSwgMHgwMDAwMDI3OCkKKyNkZWZpbmUgVFhfRVJST1JfU1RBVFVTICAgICAgICAgICAgICAgICAgICAgICAgKDB4MDAwMDAyNzgpCisjZGVmaW5lIFRYX0VSUk9SX1NUQVRVU19RVUVVRV8wX0VSUk9SX1JFU1BPTlNFICgweDAwMDAwMDBmKQorI2RlZmluZSBUWF9FUlJPUl9TVEFUVVNfVEVBX09OX1FVRVVFXzAgICAgICAgICAoMHgwMDAwMDAxMCkKKyNkZWZpbmUgVFhfRVJST1JfU1RBVFVTX1JFUl9PTl9RVUVVRV8wICAgICAgICAgKDB4MDAwMDAwMjApCisjZGVmaW5lIFRYX0VSUk9SX1NUQVRVU19URVJfT05fUVVFVUVfMCAgICAgICAgICgweDAwMDAwMDQwKQorI2RlZmluZSBUWF9FUlJPUl9TVEFUVVNfREVSX09OX1FVRVVFXzAgICAgICAgICAoMHgwMDAwMDA4MCkKKyNkZWZpbmUgVFhfRVJST1JfU1RBVFVTX1FVRVVFXzFfRVJST1JfUkVTUE9OU0UgKDB4MDAwMDBmMDApCisjZGVmaW5lIFRYX0VSUk9SX1NUQVRVU19URUFfT05fUVVFVUVfMSAgICAgICAgICgweDAwMDAxMDAwKQorI2RlZmluZSBUWF9FUlJPUl9TVEFUVVNfUkVSX09OX1FVRVVFXzEgICAgICAgICAoMHgwMDAwMjAwMCkKKyNkZWZpbmUgVFhfRVJST1JfU1RBVFVTX1RFUl9PTl9RVUVVRV8xICAgICAgICAgKDB4MDAwMDQwMDApCisjZGVmaW5lIFRYX0VSUk9SX1NUQVRVU19ERVJfT05fUVVFVUVfMSAgICAgICAgICgweDAwMDA4MDAwKQorI2RlZmluZSBUWF9FUlJPUl9TVEFUVVNfUVVFVUVfMl9FUlJPUl9SRVNQT05TRSAoMHgwMDBmMDAwMCkKKyNkZWZpbmUgVFhfRVJST1JfU1RBVFVTX1RFQV9PTl9RVUVVRV8yICAgICAgICAgKDB4MDAxMDAwMDApCisjZGVmaW5lIFRYX0VSUk9SX1NUQVRVU19SRVJfT05fUVVFVUVfMiAgICAgICAgICgweDAwMjAwMDAwKQorI2RlZmluZSBUWF9FUlJPUl9TVEFUVVNfVEVSX09OX1FVRVVFXzIgICAgICAgICAoMHgwMDQwMDAwMCkKKyNkZWZpbmUgVFhfRVJST1JfU1RBVFVTX0RFUl9PTl9RVUVVRV8yICAgICAgICAgKDB4MDA4MDAwMDApCisjZGVmaW5lIFRYX0VSUk9SX1NUQVRVU19RVUVVRV8zX0VSUk9SX1JFU1BPTlNFICgweDBmMDAwMDAwKQorI2RlZmluZSBUWF9FUlJPUl9TVEFUVVNfVEVBX09OX1FVRVVFXzMgICAgICAgICAoMHgxMDAwMDAwMCkKKyNkZWZpbmUgVFhfRVJST1JfU1RBVFVTX1JFUl9PTl9RVUVVRV8zICAgICAgICAgKDB4MjAwMDAwMDApCisjZGVmaW5lIFRYX0VSUk9SX1NUQVRVU19URVJfT05fUVVFVUVfMyAgICAgICAgICgweDQwMDAwMDAwKQorI2RlZmluZSBUWF9FUlJPUl9TVEFUVVNfREVSX09OX1FVRVVFXzMgICAgICAgICAoMHg4MDAwMDAwMCkKKworI2RlZmluZSByZWdfVFhfUVVFVUVfMF9DT05GSUcoYmFzZSkgICAgICAgICAgICBfX1JFRzMyKGJhc2UsIDB4MDAwMDAyODApCisjZGVmaW5lIFRYX1FVRVVFXzBfQ09ORklHX09DTl9QT1JUICgweDAwMDAwMDNmKQorI2RlZmluZSBUWF9RVUVVRV8wX0NPTkZJR19CU1dQICAgICAoMHgwMDAwMDQwMCkKKyNkZWZpbmUgVFhfUVVFVUVfMF9DT05GSUdfV1NXUCAgICAgKDB4MDAwMDA4MDApCisjZGVmaW5lIFRYX1FVRVVFXzBfQ09ORklHX0FNICAgICAgICgweDAwMDA0MDAwKQorI2RlZmluZSBUWF9RVUVVRV8wX0NPTkZJR19HVkkgICAgICAoMHgwMDAwODAwMCkKKyNkZWZpbmUgVFhfUVVFVUVfMF9DT05GSUdfRUVJICAgICAgKDB4MDAwMTAwMDApCisjZGVmaW5lIFRYX1FVRVVFXzBfQ09ORklHX0VMSSAgICAgICgweDAwMDIwMDAwKQorI2RlZmluZSBUWF9RVUVVRV8wX0NPTkZJR19FTkkgICAgICAoMHgwMDA0MDAwMCkKKyNkZWZpbmUgVFhfUVVFVUVfMF9DT05GSUdfRVNJICAgICAgKDB4MDAwODAwMDApCisjZGVmaW5lIFRYX1FVRVVFXzBfQ09ORklHX0VESSAgICAgICgweDAwMTAwMDAwKQorCisjZGVmaW5lIHJlZ19UWF9RVUVVRV8wX0JVRl9DT05GSUcoYmFzZSkgICAgICAgIF9fUkVHMzIoYmFzZSwgMHgwMDAwMDI4NCkKKyNkZWZpbmUgVFhfUVVFVUVfMF9CVUZfQ09ORklHX09DTl9QT1JUICAgICgweDAwMDAwMDNmKQorI2RlZmluZSBUWF9RVUVVRV8wX0JVRl9DT05GSUdfQlVSU1QgICAgICAgKDB4MDAwMDAzMDApCisjZGVmaW5lIFRYX1FVRVVFXzBfQlVGX0NPTkZJR19CU1dQICAgICAgICAoMHgwMDAwMDQwMCkKKyNkZWZpbmUgVFhfUVVFVUVfMF9CVUZfQ09ORklHX1dTV1AgICAgICAgICgweDAwMDAwODAwKQorCisjZGVmaW5lIE9DTl9QT1JUX0hMUCAgICAgICAgICAgICAJMAkvKiBITFAgSW50ZXJmYWNlICovCisjZGVmaW5lIE9DTl9QT1JUX1BDSV9YICAgICAgICAgICAJMQkvKiBQQ0ktWCBJbnRlcmZhY2UgKi8KKyNkZWZpbmUgT0NOX1BPUlRfUFJPQ0VTU09SX01BU1RFUgkyCS8qIFByb2Nlc3NvciBJbnRlcmZhY2UgKG1hc3RlcikgKi8KKyNkZWZpbmUgT0NOX1BPUlRfUFJPQ0VTU09SX1NMQVZFIAkzCS8qIFByb2Nlc3NvciBJbnRlcmZhY2UgKHNsYXZlKSAqLworI2RlZmluZSBPQ05fUE9SVF9NRU1PUlkgICAgICAgICAgCTQJLyogTWVtb3J5IENvbnRyb2xsZXIgKi8KKyNkZWZpbmUgT0NOX1BPUlRfRE1BICAgICAgICAgICAgIAk1CS8qIERNQSBDb250cm9sbGVyICovCisjZGVmaW5lIE9DTl9QT1JUX0VUSEVSTkVUICAgICAgICAJNgkvKiBFdGhlcm5ldCBDb250cm9sbGVyICovCisjZGVmaW5lIE9DTl9QT1JUX1BSSU5UICAgICAgICAgICAJNwkvKiBQcmludCBFbmdpbmUgSW50ZXJmYWNlICovCisKKyNkZWZpbmUgcmVnX1RYX1FVRVVFXzBfUFRSX0xPVyhiYXNlKSAgICAgICAgICAgX19SRUczMihiYXNlLCAweDAwMDAwMjg4KQorCisjZGVmaW5lIHJlZ19UWF9RVUVVRV8wX1BUUl9ISUdIKGJhc2UpICAgICAgICAgIF9fUkVHMzIoYmFzZSwgMHgwMDAwMDI4YykKKyNkZWZpbmUgVFhfUVVFVUVfMF9QVFJfSElHSF9WQUxJRCAgICgweDgwMDAwMDAwKQorCisjZGVmaW5lIHJlZ19SWF9DT05GSUcoYmFzZSkgICAgICAgICAgICAgICAgICAgIF9fUkVHMzIoYmFzZSwgMHgwMDAwMDMyMCkKKyNkZWZpbmUgUlhfQ09ORklHX0RFRl9RICgweDAwMDAwMDAzKQorI2RlZmluZSBSWF9DT05GSUdfRU1GICAgKDB4MDAwMDAxMDApCisjZGVmaW5lIFJYX0NPTkZJR19FVUYgICAoMHgwMDAwMDIwMCkKKyNkZWZpbmUgUlhfQ09ORklHX0JGRSAgICgweDAwMDAwNDAwKQorI2RlZmluZSBSWF9DT05GSUdfTUZFICAgKDB4MDAwMDA4MDApCisjZGVmaW5lIFJYX0NPTkZJR19VRkUgICAoMHgwMDAwMTAwMCkKKyNkZWZpbmUgUlhfQ09ORklHX1NFICAgICgweDAwMDAyMDAwKQorI2RlZmluZSBSWF9DT05GSUdfQUJGICAgKDB4MDAyMDAwMDApCisjZGVmaW5lIFJYX0NPTkZJR19BUEUgICAoMHgwMDQwMDAwMCkKKyNkZWZpbmUgUlhfQ09ORklHX0NIUCAgICgweDAwODAwMDAwKQorI2RlZmluZSBSWF9DT05GSUdfUlNUICAgKDB4ODAwMDAwMDApCisKKyNkZWZpbmUgcmVnX1JYX0NPTlRST0woYmFzZSkgICAgICAgICAgICAgICAgICAgX19SRUczMihiYXNlLCAweDAwMDAwMzI0KQorI2RlZmluZSBHRV9FMF9SWF9DT05UUk9MX1FVRVVFX0VOQUJMRVMgKDB4MDAwMDAwMGYpCisjZGVmaW5lIEdFX0UwX1JYX0NPTlRST0xfR08gICAgICAgICAgICAoMHgwMDAwODAwMCkKKyNkZWZpbmUgR0VfRTBfUlhfQ09OVFJPTF9FQUkgICAgICAgICAgICgweDIwMDAwMDAwKQorI2RlZmluZSBHRV9FMF9SWF9DT05UUk9MX0FCVCAgICAgICAgICAgKDB4NDAwMDAwMDApCisjZGVmaW5lIEdFX0UwX1JYX0NPTlRST0xfRUlJICAgICAgICAgICAoMHg4MDAwMDAwMCkKKworI2RlZmluZSByZWdfUlhfRVhURU5ERURfU1RBVFVTKGJhc2UpICAgICAgICAgICBfX1JFRzMyKGJhc2UsIDB4MDAwMDAzMmMpCisjZGVmaW5lIFJYX0VYVEVOREVEX1NUQVRVUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDB4MDAwMDAzMmMpCisjZGVmaW5lIFJYX0VYVEVOREVEX1NUQVRVU19FT1EgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDB4MDAwMDAwMGYpCisjZGVmaW5lIFJYX0VYVEVOREVEX1NUQVRVU19FT1FfMCAgICAgICAgICAgICAgICAgICAgICAgICAgKDB4MDAwMDAwMDEpCisjZGVmaW5lIFJYX0VYVEVOREVEX1NUQVRVU19FT0YgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDB4MDAwMDBmMDApCisjZGVmaW5lIFJYX0VYVEVOREVEX1NUQVRVU19ERVNDUklQVE9SX0lOVEVSUlVQVF9DT05ESVRJT04gKDB4MDAwZjAwMDApCisjZGVmaW5lIFJYX0VYVEVOREVEX1NUQVRVU19FUlJPUl9GTEFHICAgICAgICAgICAgICAgICAgICAgKDB4MGYwMDAwMDApCisKKyNkZWZpbmUgcmVnX1JYX1RIUkVTSE9MRFMoYmFzZSkgICAgICAgICAgICAgICAgX19SRUczMihiYXNlLCAweDAwMDAwMzMwKQorCisjZGVmaW5lIHJlZ19SWF9ESUFHTk9TVElDX0FERFIoYmFzZSkgICAgICAgICAgIF9fUkVHMzIoYmFzZSwgMHgwMDAwMDM3MCkKKyNkZWZpbmUgUlhfRElBR05PU1RJQ19BRERSX0lOREVYICAgKDB4MDAwMDAwN2YpCisjZGVmaW5lIFJYX0RJQUdOT1NUSUNfQUREUl9ERlIgICAgICgweDQwMDAwMDAwKQorI2RlZmluZSBSWF9ESUFHTk9TVElDX0FERFJfQUkJICAgKDB4ODAwMDAwMDApCisKKyNkZWZpbmUgcmVnX1JYX0RJQUdOT1NUSUNfREFUQShiYXNlKSAgICAgICAgICAgX19SRUczMihiYXNlLCAweDAwMDAwMzc0KQorCisjZGVmaW5lIHJlZ19SWF9RVUVVRV8wX0NPTkZJRyhiYXNlKSAgICAgICAgICAgIF9fUkVHMzIoYmFzZSwgMHgwMDAwMDM4MCkKKyNkZWZpbmUgUlhfUVVFVUVfMF9DT05GSUdfT0NOX1BPUlQgKDB4MDAwMDAwM2YpCisjZGVmaW5lIFJYX1FVRVVFXzBfQ09ORklHX0JTV1AgICAgICgweDAwMDAwNDAwKQorI2RlZmluZSBSWF9RVUVVRV8wX0NPTkZJR19XU1dQICAgICAoMHgwMDAwMDgwMCkKKyNkZWZpbmUgUlhfUVVFVUVfMF9DT05GSUdfQU0gICAgICAgKDB4MDAwMDQwMDApCisjZGVmaW5lIFJYX1FVRVVFXzBfQ09ORklHX0VFSSAgICAgICgweDAwMDEwMDAwKQorI2RlZmluZSBSWF9RVUVVRV8wX0NPTkZJR19FTEkgICAgICAoMHgwMDAyMDAwMCkKKyNkZWZpbmUgUlhfUVVFVUVfMF9DT05GSUdfRU5JICAgICAgKDB4MDAwNDAwMDApCisjZGVmaW5lIFJYX1FVRVVFXzBfQ09ORklHX0VTSSAgICAgICgweDAwMDgwMDAwKQorI2RlZmluZSBSWF9RVUVVRV8wX0NPTkZJR19FREkgICAgICAoMHgwMDEwMDAwMCkKKworI2RlZmluZSByZWdfUlhfUVVFVUVfMF9CVUZfQ09ORklHKGJhc2UpICAgICBfX1JFRzMyKGJhc2UsIDB4MDAwMDAzODQpCisjZGVmaW5lIFJYX1FVRVVFXzBfQlVGX0NPTkZJR19PQ05fUE9SVCAoMHgwMDAwMDAzZikKKyNkZWZpbmUgUlhfUVVFVUVfMF9CVUZfQ09ORklHX0JVUlNUICAgICgweDAwMDAwMzAwKQorI2RlZmluZSBSWF9RVUVVRV8wX0JVRl9DT05GSUdfQlNXUCAgICAgKDB4MDAwMDA0MDApCisjZGVmaW5lIFJYX1FVRVVFXzBfQlVGX0NPTkZJR19XU1dQICAgICAoMHgwMDAwMDgwMCkKKworI2RlZmluZSByZWdfUlhfUVVFVUVfMF9QVFJfTE9XKGJhc2UpICAgICAgICAgICBfX1JFRzMyKGJhc2UsIDB4MDAwMDAzODgpCisKKyNkZWZpbmUgcmVnX1JYX1FVRVVFXzBfUFRSX0hJR0goYmFzZSkgICAgICAgICAgX19SRUczMihiYXNlLCAweDAwMDAwMzhjKQorI2RlZmluZSBSWF9RVUVVRV8wX1BUUl9ISUdIX1ZBTElEICAgKDB4ODAwMDAwMDApCisKKy8qCisgKiAgUEhZIHJlZ2lzdGVyIGRlZmluaXRpb25zCisgKi8KKy8qIHRoZSBmaXJzdCAxNSBQSFkgcmVnaXN0ZXJzIGFyZSBzdGFuZGFyZC4gKi8KKyNkZWZpbmUgUEhZX0NUUkxfUkVHICAgICAgICAgICAgIDAJLyogQ29udHJvbCBSZWdpc3RlciAqLworI2RlZmluZSBQSFlfU1RBVFVTX1JFRyAgICAgICAgICAgMQkvKiBTdGF0dXMgUmVnaXNlciAqLworI2RlZmluZSBQSFlfSUQxX1JFRyAgICAgICAgICAgICAgMgkvKiBQaHkgSWQgUmVnICh3b3JkIDEpICovCisjZGVmaW5lIFBIWV9JRDJfUkVHICAgICAgICAgICAgICAzCS8qIFBoeSBJZCBSZWcgKHdvcmQgMikgKi8KKyNkZWZpbmUgUEhZX0FOX0FEVl9SRUcgICAgICAgICAgIDQJLyogQXV0b25lZyBBZHZlcnRpc2VtZW50ICovCisjZGVmaW5lIFBIWV9MUF9BQklMSVRZX1JFRyAgICAgICA1CS8qIExpbmsgUGFydG5lciBBYmlsaXR5IChCYXNlIFBhZ2UpICovCisjZGVmaW5lIFBIWV9BVVRPTkVHX0VYUF9SRUcgICAgICA2CS8qIEF1dG9uZWcgRXhwYW5zaW9uIFJlZyAqLworI2RlZmluZSBQSFlfTkVYVF9QQUdFX1RYX1JFRyAgICAgNwkvKiBOZXh0IFBhZ2UgVFggKi8KKyNkZWZpbmUgUEhZX0xQX05FWFRfUEFHRV9SRUcgICAgIDgJLyogTGluayBQYXJ0bmVyIE5leHQgUGFnZSAqLworI2RlZmluZSBQSFlfMTAwMFRfQ1RSTF9SRUcgICAgICAgOQkvKiAxMDAwQmFzZS1UIENvbnRyb2wgUmVnICovCisjZGVmaW5lIFBIWV8xMDAwVF9TVEFUVVNfUkVHICAgIDEwCS8qIDEwMDBCYXNlLVQgU3RhdHVzIFJlZyAqLworI2RlZmluZSBQSFlfRVhUX1NUQVRVU19SRUcgICAgICAxMQkvKiBFeHRlbmRlZCBTdGF0dXMgUmVnICovCisKKy8qCisgKiBQSFkgUmVnaXN0ZXIgYml0IG1hc2tzLgorICovCisjZGVmaW5lIFBIWV9DVFJMX1JFU0VUICAgICAgICAgICgxIDw8IDE1KQorI2RlZmluZSBQSFlfQ1RSTF9MT09QQkFDSyAgICAgICAoMSA8PCAxNCkKKyNkZWZpbmUgUEhZX0NUUkxfU1BFRUQwICAgICAgICAgKDEgPDwgMTMpCisjZGVmaW5lIFBIWV9DVFJMX0FOX0VOICAgICAgICAgICgxIDw8IDEyKQorI2RlZmluZSBQSFlfQ1RSTF9QV1JfRE4gICAgICAgICAoMSA8PCAxMSkKKyNkZWZpbmUgUEhZX0NUUkxfSVNPTEFURSAgICAgICAgKDEgPDwgMTApCisjZGVmaW5lIFBIWV9DVFJMX1JFU1RBUlRfQU4gICAgICgxIDw8IDkpCisjZGVmaW5lIFBIWV9DVFJMX0ZVTExfRFVQTEVYICAgICgxIDw8IDgpCisjZGVmaW5lIFBIWV9DVFJMX0NUX0VOICAgICAgICAgICgxIDw8IDcpCisjZGVmaW5lIFBIWV9DVFJMX1NQRUVEMSAgICAgICAgICgxIDw8IDYpCisKKyNkZWZpbmUgUEhZX1NUQVRfMTAwQkFTRV9UNCAgICAgKDEgPDwgMTUpCisjZGVmaW5lIFBIWV9TVEFUXzEwMEJBU0VfWF9GRCAgICgxIDw8IDE0KQorI2RlZmluZSBQSFlfU1RBVF8xMDBCQVNFX1hfSEQgICAoMSA8PCAxMykKKyNkZWZpbmUgUEhZX1NUQVRfMTBCQVNFX1RfRkQgICAgKDEgPDwgMTIpCisjZGVmaW5lIFBIWV9TVEFUXzEwQkFTRV9UX0hEICAgICgxIDw8IDExKQorI2RlZmluZSBQSFlfU1RBVF8xMDBCQVNFX1QyX0ZEICAoMSA8PCAxMCkKKyNkZWZpbmUgUEhZX1NUQVRfMTAwQkFTRV9UMl9IRCAgKDEgPDwgOSkKKyNkZWZpbmUgUEhZX1NUQVRfRVhUX1NUQVQgICAgICAgKDEgPDwgOCkKKyNkZWZpbmUgUEhZX1NUQVRfUkVTRVJWRUQgICAgICAgKDEgPDwgNykKKyNkZWZpbmUgUEhZX1NUQVRfTUZQUyAgICAgICAgICAgKDEgPDwgNikJLyogTWFuYWdlbWVudCBGcmFtZXMgUHJlYW1ibGUgU3VwcHJlc3Npb24gKi8KKyNkZWZpbmUgUEhZX1NUQVRfQU5fQ09NUExFVEUgICAgKDEgPDwgNSkKKyNkZWZpbmUgUEhZX1NUQVRfUkVNX0ZBVUxUICAgICAgKDEgPDwgNCkKKyNkZWZpbmUgUEhZX1NUQVRfQU5fQ0FQICAgICAgICAgKDEgPDwgMykKKyNkZWZpbmUgUEhZX1NUQVRfTElOS19VUCAgICAgICAgKDEgPDwgMikKKyNkZWZpbmUgUEhZX1NUQVRfSkFCQkVSICAgICAgICAgKDEgPDwgMSkKKyNkZWZpbmUgUEhZX1NUQVRfRVhUX0NBUCAgICAgICAgKDEgPDwgMCkKKworI2RlZmluZSBUQklfQ09OVFJPTF8yICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgxMQorI2RlZmluZSBUQklfQ09OVFJPTF8yX0VOQUJMRV9DT01NQV9ERVRFQ1QgICAgICAgICAgICAgICAgMHgwMDAxCisjZGVmaW5lIFRCSV9DT05UUk9MXzJfRU5BQkxFX1dSQVAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDIKKyNkZWZpbmUgVEJJX0NPTlRST0xfMl9HX01JSV9NT0RFICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAxMAorI2RlZmluZSBUQklfQ09OVFJPTF8yX1JFQ0VJVkVfQ0xPQ0tfU0VMRUNUICAgICAgICAgICAgICAgMHgwMDIwCisjZGVmaW5lIFRCSV9DT05UUk9MXzJfQVVUT19ORUdPVElBVElPTl9TRU5TRSAgICAgICAgICAgICAweDAxMDAKKyNkZWZpbmUgVEJJX0NPTlRST0xfMl9ESVNBQkxFX1RSQU5TTUlUX1JVTk5JTkdfRElTUEFSSVRZIDB4MTAwMAorI2RlZmluZSBUQklfQ09OVFJPTF8yX0RJU0FCTEVfUkVDRUlWRV9SVU5OSU5HX0RJU1BBUklUWSAgMHgyMDAwCisjZGVmaW5lIFRCSV9DT05UUk9MXzJfU0hPUlRDVVRfTElOS19USU1FUiAgICAgICAgICAgICAgICAweDQwMDAKKyNkZWZpbmUgVEJJX0NPTlRST0xfMl9TT0ZUX1JFU0VUICAgICAgICAgICAgICAgICAgICAgICAgIDB4ODAwMAorCisvKiBtYXJ2ZWwgc3BlY2lmaWMgKi8KKyNkZWZpbmUgTVYxMTExX0VYVF9DVFJMMV9SRUcgICAgMTYJLyogUEhZIFNwZWNpZmljIENvbnRyb2wgUmVnICovCisjZGVmaW5lIE1WMTExMV9TUEVDX1NUQVRfUkVHICAgIDE3CS8qIFBIWSBTcGVjaWZpYyBTdGF0dXMgUmVnICovCisjZGVmaW5lIE1WMTExMV9FWFRfQ1RSTDJfUkVHICAgIDIwCS8qIEV4dGVuZGVkIFBIWSBTcGVjaWZpYyBDb250cm9sIFJlZyAqLworCisvKgorICogTUFSVkVMTCA4OEUxMTExIFBIWSByZWdpc3RlciBiaXQgbWFza3MKKyAqLworLyogUEhZIFNwZWNpZmljIFN0YXR1cyBSZWdpc3RlciAoTVYxMTExX0VYVF9DVFJMMV9SRUcpICovCisKKyNkZWZpbmUgU1BFQ19TVEFUX1NQRUVEX01BU0sgICAgICgzIDw8IDE0KQorI2RlZmluZSBTUEVDX1NUQVRfRlVMTF9EVVAgICAgICAgKDEgPDwgMTMpCisjZGVmaW5lIFNQRUNfU1RBVF9QQUdFX1JDVkQgICAgICAoMSA8PCAxMikKKyNkZWZpbmUgU1BFQ19TVEFUX1JFU09MVkVEICAgICAgICgxIDw8IDExKQkvKiBTcGVlZCBhbmQgRHVwbGV4IFJlc29sdmVkICovCisjZGVmaW5lIFNQRUNfU1RBVF9MSU5LX1VQICAgICAgICAoMSA8PCAxMCkKKyNkZWZpbmUgU1BFQ19TVEFUX0NBQkxFX0xFTl9NQVNLICg3IDw8IDcpCS8qIENhYmxlIExlbmd0aCAoMTAwLzEwMDAgbW9kZXMgb25seSkgKi8KKyNkZWZpbmUgU1BFQ19TVEFUX01ESVggICAgICAgICAgICgxIDw8IDYpCisjZGVmaW5lIFNQRUNfU1RBVF9QT0xBUklUWSAgICAgICAoMSA8PCAxKQorI2RlZmluZSBTUEVDX1NUQVRfSkFCQkVSICAgICAgICAgKDEgPDwgMCkKKworI2RlZmluZSBTUEVFRF8xMDAwICAgICAgICAgICAoMiA8PCAxNCkKKyNkZWZpbmUgU1BFRURfMTAwICAgICAgICAgICAgKDEgPDwgMTQpCisjZGVmaW5lIFNQRUVEXzEwICAgICAgICAgICAgICgwIDw8IDE0KQorCisjZGVmaW5lIFRCSV9BRERSICAweDFFCQkvKiBUZW4gQml0IEludGVyZmFjZSBhZGRyZXNzICovCisKKy8qIG5lZ290aWF0ZWQgbGluayBwYXJhbWV0ZXJzICovCisjZGVmaW5lIExJTktfU1BFRURfVU5LTk9XTiAgICAgMAorI2RlZmluZSBMSU5LX1NQRUVEXzEwICAgICAgICAgIDEKKyNkZWZpbmUgTElOS19TUEVFRF8xMDAgICAgICAgICAyCisjZGVmaW5lIExJTktfU1BFRURfMTAwMCAgICAgICAgMworCisjZGVmaW5lIExJTktfRFVQTEVYX1VOS05PV04gICAgMAorI2RlZmluZSBMSU5LX0RVUExFWF9IQUxGICAgICAgIDEKKyNkZWZpbmUgTElOS19EVVBMRVhfRlVMTCAgICAgICAyCisKK3N0YXRpYyB1bnNpZ25lZCBpbnQgcGh5X2FkZHJlc3NbXSA9IHsgOCwgOSB9OworCisjZGVmaW5lIHZ1aW50MzIgdm9sYXRpbGUgdTMyCisKKy8qIFRYL1JYIGJ1ZmZlciBkZXNjcmlwdG9ycy4gTVVTVCBiZSBjYWNoZSBsaW5lIGFsaWduZWQgaW4gbWVtb3J5LiAoMzIgYnl0ZSkKKyAqIFRoaXMgc3RydWN0dXJlIGlzIGFjY2Vzc2VkIGJ5IHRoZSBldGhlcm5ldCBETUEgZW5naW5lIHdoaWNoIG1lYW5zIGl0CisgKiBNVVNUIGJlIGluIExJVFRMRSBFTkRJQU4gZm9ybWF0ICovCitzdHJ1Y3QgZG1hX2Rlc2NyaXB0b3IgeworCXZ1aW50MzIgc3RhcnRfYWRkcjA7CS8qIGJ1ZmZlciBhZGRyZXNzLCBsZWFzdCBzaWduaWZpY2FudCBieXRlcy4gKi8KKwl2dWludDMyIHN0YXJ0X2FkZHIxOwkvKiBidWZmZXIgYWRkcmVzcywgbW9zdCBzaWduaWZpY2FudCBieXRlcy4gKi8KKwl2dWludDMyIG5leHRfZGVzY3JfYWRkcjA7LyogbmV4dCBkZXNjcmlwdG9yIGFkZHJlc3MsIGxlYXN0IHNpZ25pZmljYW50IGJ5dGVzLiAgTXVzdCBiZSA2NC1iaXQgYWxpZ25lZC4gKi8KKwl2dWludDMyIG5leHRfZGVzY3JfYWRkcjE7LyogbmV4dCBkZXNjcmlwdG9yIGFkZHJlc3MsIG1vc3Qgc2lnbmlmaWNhbnQgYnl0ZXMuICovCisJdnVpbnQzMiB2bGFuX2J5dGVfY291bnQ7LyogVkxBTiB0YWcodG9wIDIgYnl0ZXMpIGFuZCBieXRlIGNvdW50dCAoYm90dG9tIDIgYnl0ZXMpLiAqLworCXZ1aW50MzIgY29uZmlnX3N0YXR1czsJLyogQ29uZmlndXJhdGlvbi9TdGF0dXMuICovCisJdnVpbnQzMiByZXNlcnZlZDE7CS8qIHJlc2VydmVkIHRvIG1ha2UgdGhlIGRlc2NyaXB0b3IgY2FjaGUgbGluZSBhbGlnbmVkLiAqLworCXZ1aW50MzIgcmVzZXJ2ZWQyOwkvKiByZXNlcnZlZCB0byBtYWtlIHRoZSBkZXNjcmlwdG9yIGNhY2hlIGxpbmUgYWxpZ25lZC4gKi8KK307CisKKy8qIGxhc3QgbmV4dCBkZXNjcmlwdG9yIGFkZHJlc3MgZmxhZyAqLworI2RlZmluZSBETUFfREVTQ1JfTEFTVCAgICAgICAgICgxIDw8IDMxKQorCisvKiBUWCBETUEgZGVzY3JpcHRvciBjb25maWcgc3RhdHVzIGJpdHMgKi8KKyNkZWZpbmUgRE1BX0RFU0NSX1RYX0VPRiAgICAgICAgICAgICgxIDw8ICAwKQkvKiBlbmQgb2YgZnJhbWUgKi8KKyNkZWZpbmUgRE1BX0RFU0NSX1RYX1NPRiAgICAgICAgICAgICgxIDw8ICAxKQkvKiBzdGFydCBvZiBmcmFtZSAqLworI2RlZmluZSBETUFfREVTQ1JfVFhfUEZWTEFOICAgICAgICAgKDEgPDwgIDIpCisjZGVmaW5lIERNQV9ERVNDUl9UWF9IVUdFICAgICAgICAgICAoMSA8PCAgMykKKyNkZWZpbmUgRE1BX0RFU0NSX1RYX1BBRCAgICAgICAgICAgICgxIDw8ICA0KQorI2RlZmluZSBETUFfREVTQ1JfVFhfQ1JDICAgICAgICAgICAgKDEgPDwgIDUpCisjZGVmaW5lIERNQV9ERVNDUl9UWF9ERVNDUl9JTlQgICAgICAoMSA8PCAxNCkKKyNkZWZpbmUgRE1BX0RFU0NSX1RYX1JFVFJZX0NPVU5UICAgIDB4MDAwRjAwMDAKKyNkZWZpbmUgRE1BX0RFU0NSX1RYX09ORV9DT0xMSVNJT04gICgxIDw8IDIwKQorI2RlZmluZSBETUFfREVTQ1JfVFhfTEFURV9DT0xMSVNJT04gKDEgPDwgMjQpCisjZGVmaW5lIERNQV9ERVNDUl9UWF9VTkRFUlJVTiAgICAgICAoMSA8PCAyNSkKKyNkZWZpbmUgRE1BX0RFU0NSX1RYX1JFVFJZX0xJTUlUICAgICgxIDw8IDI2KQorI2RlZmluZSBETUFfREVTQ1JfVFhfT0sgICAgICAgICAgICAgKDEgPDwgMzApCisjZGVmaW5lIERNQV9ERVNDUl9UWF9PV05FUiAgICAgICAgICAoMSA8PCAzMSkKKworLyogUlggRE1BIGRlc2NyaXB0b3Igc3RhdHVzIGJpdHMgKi8KKyNkZWZpbmUgRE1BX0RFU0NSX1JYX0VPRiAgICAgICAgICAgKDEgPDwgIDApCisjZGVmaW5lIERNQV9ERVNDUl9SWF9TT0YgICAgICAgICAgICgxIDw8ICAxKQorI2RlZmluZSBETUFfREVTQ1JfUlhfVlRGICAgICAgICAgICAoMSA8PCAgMikKKyNkZWZpbmUgRE1BX0RFU0NSX1JYX0ZSQU1FX0lTX1RZUEUgKDEgPDwgIDMpCisjZGVmaW5lIERNQV9ERVNDUl9SWF9TSE9SVF9GUkFNRSAgICgxIDw8ICA0KQorI2RlZmluZSBETUFfREVTQ1JfUlhfSEFTSF9NQVRDSCAgICAoMSA8PCAgNykKKyNkZWZpbmUgRE1BX0RFU0NSX1JYX0JBRF9GUkFNRSAgICAgKDEgPDwgIDgpCisjZGVmaW5lIERNQV9ERVNDUl9SWF9PVkVSUlVOICAgICAgICgxIDw8ICA5KQorI2RlZmluZSBETUFfREVTQ1JfUlhfTUFYX0ZSQU1FX0xFTiAoMSA8PCAxMSkKKyNkZWZpbmUgRE1BX0RFU0NSX1JYX0NSQ19FUlJPUiAgICAgKDEgPDwgMTIpCisjZGVmaW5lIERNQV9ERVNDUl9SWF9ERVNDUl9JTlQgICAgICgxIDw8IDEzKQorI2RlZmluZSBETUFfREVTQ1JfUlhfT1dORVIgICAgICAgICAoMSA8PCAxNSkKKworI2RlZmluZSBSWF9CVUZGRVJfU0laRSAgIFBLVFNJWkUKKyNkZWZpbmUgTlVNX1JYX0RFU0MgICAgICBQS1RCVUZTUlgKKworc3RhdGljIHN0cnVjdCBkbWFfZGVzY3JpcHRvciB0eF9kZXNjcmlwdG9yIF9fYXR0cmlidXRlX18gKChhbGlnbmVkKDMyKSkpOworCitzdGF0aWMgc3RydWN0IGRtYV9kZXNjcmlwdG9yIHJ4X2Rlc2NyX2FycmF5W05VTV9SWF9ERVNDXQorICAgIF9fYXR0cmlidXRlX18gKChhbGlnbmVkKDMyKSkpOworCitzdGF0aWMgc3RydWN0IGRtYV9kZXNjcmlwdG9yICpyeF9kZXNjcl9jdXJyZW50OworCitzdGF0aWMgaW50IHRzaTEwOF9ldGhfcHJvYmUoc3RydWN0IGV0aF9kZXZpY2UgKmRldiwgYmRfdCAqIGJpcyk7CitzdGF0aWMgaW50IHRzaTEwOF9ldGhfc2VuZChzdHJ1Y3QgZXRoX2RldmljZSAqZGV2LAorCQkJICAgdm9sYXRpbGUgdm9pZCAqcGFja2V0LCBpbnQgbGVuZ3RoKTsKK3N0YXRpYyBpbnQgdHNpMTA4X2V0aF9yZWN2KHN0cnVjdCBldGhfZGV2aWNlICpkZXYpOworc3RhdGljIHZvaWQgdHNpMTA4X2V0aF9oYWx0KHN0cnVjdCBldGhfZGV2aWNlICpkZXYpOworc3RhdGljIHVuc2lnbmVkIGludCByZWFkX3BoeSh1bnNpZ25lZCBpbnQgYmFzZSwKKwkJCSAgICAgdW5zaWduZWQgaW50IHBoeV9hZGRyLCB1bnNpZ25lZCBpbnQgcGh5X3JlZyk7CitzdGF0aWMgdm9pZCB3cml0ZV9waHkodW5zaWduZWQgaW50IGJhc2UsCisJCSAgICAgIHVuc2lnbmVkIGludCBwaHlfYWRkciwKKwkJICAgICAgdW5zaWduZWQgaW50IHBoeV9yZWcsIHVuc2lnbmVkIGludCBwaHlfZGF0YSk7CisKKyNpZiBUU0kxMDhfRVRIX0RFQlVHID4gMTAwCisvKgorICogcHJpbnQgcGh5IGRlYnVnIGluZm9tYXRpb24KKyAqLworc3RhdGljIHZvaWQgZHVtcF9waHlfcmVncyh1bnNpZ25lZCBpbnQgcGh5X2FkZHIpCit7CisJaW50IGk7CisKKwlwcmludGYoIlBIWSAlZCByZWdpc3RlcnNcbiIsIHBoeV9hZGRyKTsKKwlmb3IgKGkgPSAwOyBpIDw9IDMwOyBpKyspIHsKKwkJcHJpbnRmKCIlMmQgIDB4JTA0eFxuIiwgaSwgcmVhZF9waHkoRVRIX0JBU0UsIHBoeV9hZGRyLCBpKSk7CisJfQorCXByaW50ZigiXG4iKTsKKworfQorI2Vsc2UKKyNkZWZpbmUgZHVtcF9waHlfcmVncyhiYXNlKSBkb3t9d2hpbGUoMCkKKyNlbmRpZgorCisjaWYgVFNJMTA4X0VUSF9ERUJVRyA+IDEwMAorLyoKKyAqIHByaW50IGRlYnVnIGluZm9tYXRpb24KKyAqLworc3RhdGljIHZvaWQgdHhfZGlhZ19yZWdzKHVuc2lnbmVkIGludCBiYXNlKQoreworCWludCBpOworCXVuc2lnbmVkIGxvbmcgZHVtbXk7CisKKwlwcmludGYoIlRYIGRpYWdub3N0aWNzIHJlZ2lzdGVyc1xuIik7CisJcmVnX1RYX0RJQUdOT1NUSUNfQUREUihiYXNlKSA9IDB4MDAgfCBUWF9ESUFHTk9TVElDX0FERFJfQUk7CisJdWRlbGF5KDEwMDApOworCWR1bW15ID0gcmVnX1RYX0RJQUdOT1NUSUNfREFUQShiYXNlKTsKKwlmb3IgKGkgPSAweDAwOyBpIDw9IDB4MDU7IGkrKykgeworCQl1ZGVsYXkoMTAwMCk7CisJCXByaW50ZigiMHglMDJ4ICAweCUwOHhcbiIsIGksIHJlZ19UWF9ESUFHTk9TVElDX0RBVEEoYmFzZSkpOworCX0KKwlyZWdfVFhfRElBR05PU1RJQ19BRERSKGJhc2UpID0gMHg0MCB8IFRYX0RJQUdOT1NUSUNfQUREUl9BSTsKKwl1ZGVsYXkoMTAwMCk7CisJZHVtbXkgPSByZWdfVFhfRElBR05PU1RJQ19EQVRBKGJhc2UpOworCWZvciAoaSA9IDB4NDA7IGkgPD0gMHg0NzsgaSsrKSB7CisJCXVkZWxheSgxMDAwKTsKKwkJcHJpbnRmKCIweCUwMnggIDB4JTA4eFxuIiwgaSwgcmVnX1RYX0RJQUdOT1NUSUNfREFUQShiYXNlKSk7CisJfQorCXByaW50ZigiXG4iKTsKKworfQorI2Vsc2UKKyNkZWZpbmUgdHhfZGlhZ19yZWdzKGJhc2UpIGRve313aGlsZSgwKQorI2VuZGlmCisKKyNpZiBUU0kxMDhfRVRIX0RFQlVHID4gMTAwCisvKgorICogcHJpbnQgZGVidWcgaW5mb21hdGlvbgorICovCitzdGF0aWMgdm9pZCByeF9kaWFnX3JlZ3ModW5zaWduZWQgaW50IGJhc2UpCit7CisJaW50IGk7CisJdW5zaWduZWQgbG9uZyBkdW1teTsKKworCXByaW50ZigiUlggZGlhZ25vc3RpY3MgcmVnaXN0ZXJzXG4iKTsKKwlyZWdfUlhfRElBR05PU1RJQ19BRERSKGJhc2UpID0gMHgwMCB8IFJYX0RJQUdOT1NUSUNfQUREUl9BSTsKKwl1ZGVsYXkoMTAwMCk7CisJZHVtbXkgPSByZWdfUlhfRElBR05PU1RJQ19EQVRBKGJhc2UpOworCWZvciAoaSA9IDB4MDA7IGkgPD0gMHgwNTsgaSsrKSB7CisJCXVkZWxheSgxMDAwKTsKKwkJcHJpbnRmKCIweCUwMnggIDB4JTA4eFxuIiwgaSwgcmVnX1JYX0RJQUdOT1NUSUNfREFUQShiYXNlKSk7CisJfQorCXJlZ19SWF9ESUFHTk9TVElDX0FERFIoYmFzZSkgPSAweDQwIHwgUlhfRElBR05PU1RJQ19BRERSX0FJOworCXVkZWxheSgxMDAwKTsKKwlkdW1teSA9IHJlZ19SWF9ESUFHTk9TVElDX0RBVEEoYmFzZSk7CisJZm9yIChpID0gMHgwODsgaSA8PSAweDBhOyBpKyspIHsKKwkJdWRlbGF5KDEwMDApOworCQlwcmludGYoIjB4JTAyeCAgMHglMDh4XG4iLCBpLCByZWdfUlhfRElBR05PU1RJQ19EQVRBKGJhc2UpKTsKKwl9CisJcHJpbnRmKCJcbiIpOworCit9CisjZWxzZQorI2RlZmluZSByeF9kaWFnX3JlZ3MoYmFzZSkgZG97fXdoaWxlKDApCisjZW5kaWYKKworI2lmIFRTSTEwOF9FVEhfREVCVUcgPiAxMDAKKy8qCisgKiBwcmludCBkZWJ1ZyBpbmZvbWF0aW9uCisgKi8KK3N0YXRpYyB2b2lkIGRlYnVnX21paV9yZWdzKHVuc2lnbmVkIGludCBiYXNlKQoreworCXByaW50ZigiTUlJX01HTVRfQ09ORklHICAgICAweCUwOHhcbiIsIHJlZ19NSUlfTUdNVF9DT05GSUcoYmFzZSkpOworCXByaW50ZigiTUlJX01HTVRfQ09NTUFORCAgICAweCUwOHhcbiIsIHJlZ19NSUlfTUdNVF9DT01NQU5EKGJhc2UpKTsKKwlwcmludGYoIk1JSV9NR01UX0FERFJFU1MgICAgMHglMDh4XG4iLCByZWdfTUlJX01HTVRfQUREUkVTUyhiYXNlKSk7CisJcHJpbnRmKCJNSUlfTUdNVF9DT05UUk9MICAgIDB4JTA4eFxuIiwgcmVnX01JSV9NR01UX0NPTlRST0woYmFzZSkpOworCXByaW50ZigiTUlJX01HTVRfU1RBVFVTICAgICAweCUwOHhcbiIsIHJlZ19NSUlfTUdNVF9TVEFUVVMoYmFzZSkpOworCXByaW50ZigiTUlJX01HTVRfSU5ESUNBVE9SUyAweCUwOHhcbiIsIHJlZ19NSUlfTUdNVF9JTkRJQ0FUT1JTKGJhc2UpKTsKKwlwcmludGYoIlxuIik7CisKK30KKyNlbHNlCisjZGVmaW5lIGRlYnVnX21paV9yZWdzKGJhc2UpIGRve313aGlsZSgwKQorI2VuZGlmCisKKy8qCisgKiBXYWl0IHVudGlsIHRoZSBwaHkgYnVzIGlzIG5vbi1idXN5CisgKi8KK3N0YXRpYyB2b2lkIHBoeV93YWl0KHVuc2lnbmVkIGludCBiYXNlLCB1bnNpZ25lZCBpbnQgY29uZGl0aW9uKQoreworCWludCB0aW1lb3V0OworCisJdGltZW91dCA9IDA7CisJd2hpbGUgKHJlZ19NSUlfTUdNVF9JTkRJQ0FUT1JTKGJhc2UpICYgY29uZGl0aW9uKSB7CisJCXVkZWxheSgxMCk7CisJCWlmICgrK3RpbWVvdXQgPiAxMDAwMCkgeworCQkJcHJpbnRmKCJFUlJPUjogdGltZW91dCB3YWl0aW5nIGZvciBwaHkgYnVzICglZClcbiIsCisJCQkgICAgICAgY29uZGl0aW9uKTsKKwkJCWJyZWFrOworCQl9CisJfQorfQorCisvKgorICogcmVhZCBwaHkgcmVnaXN0ZXIKKyAqLworc3RhdGljIHVuc2lnbmVkIGludCByZWFkX3BoeSh1bnNpZ25lZCBpbnQgYmFzZSwKKwkJCSAgICAgdW5zaWduZWQgaW50IHBoeV9hZGRyLCB1bnNpZ25lZCBpbnQgcGh5X3JlZykKK3sKKwl1bnNpZ25lZCBpbnQgdmFsdWU7CisKKwlwaHlfd2FpdChiYXNlLCBNSUlfTUdNVF9JTkRJQ0FUT1JTX0JVU1kpOworCisJcmVnX01JSV9NR01UX0FERFJFU1MoYmFzZSkgPSAocGh5X2FkZHIgPDwgOCkgfCBwaHlfcmVnOworCisJLyogRW5zdXJlIHRoYXQgdGhlIFJlYWQgQ3ljbGUgYml0IGlzIGNsZWFyZWQgcHJpb3IgdG8gbmV4dCByZWFkIGN5Y2xlICovCisJcmVnX01JSV9NR01UX0NPTU1BTkQoYmFzZSkgPSAwOworCisJLyogc3RhcnQgdGhlIHJlYWQgKi8KKwlyZWdfTUlJX01HTVRfQ09NTUFORChiYXNlKSA9IE1JSV9NR01UX0NPTU1BTkRfUkVBRF9DWUNMRTsKKworCS8qIHdhaXQgZm9yIHRoZSByZWFkIHRvIGNvbXBsZXRlICovCisJcGh5X3dhaXQoYmFzZSwKKwkJIE1JSV9NR01UX0lORElDQVRPUlNfTk9UX1ZBTElEIHwgTUlJX01HTVRfSU5ESUNBVE9SU19CVVNZKTsKKworCXZhbHVlID0gcmVnX01JSV9NR01UX1NUQVRVUyhiYXNlKTsKKworCXJlZ19NSUlfTUdNVF9DT01NQU5EKGJhc2UpID0gMDsKKworCXJldHVybiB2YWx1ZTsKK30KKworLyoKKyAqIHdyaXRlIHBoeSByZWdpc3RlcgorICovCitzdGF0aWMgdm9pZCB3cml0ZV9waHkodW5zaWduZWQgaW50IGJhc2UsCisJCSAgICAgIHVuc2lnbmVkIGludCBwaHlfYWRkciwKKwkJICAgICAgdW5zaWduZWQgaW50IHBoeV9yZWcsIHVuc2lnbmVkIGludCBwaHlfZGF0YSkKK3sKKwlwaHlfd2FpdChiYXNlLCBNSUlfTUdNVF9JTkRJQ0FUT1JTX0JVU1kpOworCisJcmVnX01JSV9NR01UX0FERFJFU1MoYmFzZSkgPSAocGh5X2FkZHIgPDwgOCkgfCBwaHlfcmVnOworCisJLyogRW5zdXJlIHRoYXQgdGhlIFJlYWQgQ3ljbGUgYml0IGlzIGNsZWFyZWQgcHJpb3IgdG8gbmV4dCBjeWNsZSAqLworCXJlZ19NSUlfTUdNVF9DT01NQU5EKGJhc2UpID0gMDsKKworCS8qIHN0YXJ0IHRoZSB3cml0ZSAqLworCXJlZ19NSUlfTUdNVF9DT05UUk9MKGJhc2UpID0gcGh5X2RhdGE7Cit9CisKKy8qCisgKiBjb25maWd1cmUgdGhlIG1hcnZlbGwgODhlMTExMSBwaHkKKyAqLworc3RhdGljIGludCBtYXJ2ZWxsXzg4ZV9waHlfY29uZmlnKHN0cnVjdCBldGhfZGV2aWNlICpkZXYsIGludCAqc3BlZWQsCisJCQkJICBpbnQgKmR1cGxleCkKK3sKKwl1bnNpZ25lZCBsb25nIGJhc2U7CisJdW5zaWduZWQgbG9uZyBwaHlfYWRkcjsKKwl1bnNpZ25lZCBpbnQgcGh5X3N0YXR1czsKKwl1bnNpZ25lZCBpbnQgcGh5X3NwZWNfc3RhdHVzOworCWludCB0aW1lb3V0OworCWludCBwaHlfc3BlZWQ7CisJaW50IHBoeV9kdXBsZXg7CisJdW5zaWduZWQgaW50IHZhbHVlOworCisJcGh5X3NwZWVkID0gTElOS19TUEVFRF9VTktOT1dOOworCXBoeV9kdXBsZXggPSBMSU5LX0RVUExFWF9VTktOT1dOOworCisJYmFzZSA9IGRldi0+aW9iYXNlOworCXBoeV9hZGRyID0gKHVuc2lnbmVkIGxvbmcpZGV2LT5wcml2OworCisJLyogVGFrZSB0aGUgUEhZIG91dCBvZiByZXNldC4gKi8KKwl3cml0ZV9waHkoRVRIX0JBU0UsIHBoeV9hZGRyLCBQSFlfQ1RSTF9SRUcsIFBIWV9DVFJMX1JFU0VUKTsKKworCS8qIFdhaXQgZm9yIHRoZSByZXNldCBwcm9jZXNzIHRvIGNvbXBsZXRlLiAqLworCXVkZWxheSgxMCk7CisJdGltZW91dCA9IDA7CisJd2hpbGUgKChwaHlfc3RhdHVzID0KKwkJcmVhZF9waHkoRVRIX0JBU0UsIHBoeV9hZGRyLCBQSFlfQ1RSTF9SRUcpKSAmIFBIWV9DVFJMX1JFU0VUKSB7CisJCXVkZWxheSgxMCk7CisJCWlmICgrK3RpbWVvdXQgPiAxMDAwMCkgeworCQkJcHJpbnRmKCJFUlJPUjogdGltZW91dCB3YWl0aW5nIGZvciBwaHkgcmVzZXRcbiIpOworCQkJYnJlYWs7CisJCX0KKwl9CisKKwkvKiBUQkkgQ29uZmlndXJhdGlvbi4gKi8KKwl3cml0ZV9waHkoYmFzZSwgVEJJX0FERFIsIFRCSV9DT05UUk9MXzIsIFRCSV9DT05UUk9MXzJfR19NSUlfTU9ERSB8CisJCSAgVEJJX0NPTlRST0xfMl9SRUNFSVZFX0NMT0NLX1NFTEVDVCk7CisJLyogV2FpdCBmb3IgdGhlIGxpbmsgdG8gYmUgZXN0YWJsaXNoZWQuICovCisJdGltZW91dCA9IDA7CisJZG8geworCQl1ZGVsYXkoMjAwMDApOworCQlwaHlfc3RhdHVzID0gcmVhZF9waHkoRVRIX0JBU0UsIHBoeV9hZGRyLCBQSFlfU1RBVFVTX1JFRyk7CisJCWlmICgrK3RpbWVvdXQgPiAxMDApIHsKKwkJCWRlYnVnX2xldigxLCAiRVJST1I6IHVuYWJsZSB0byBlc3RhYmxpc2ggbGluayEhIVxuIik7CisJCQlicmVhazsKKwkJfQorCX0gd2hpbGUgKChwaHlfc3RhdHVzICYgUEhZX1NUQVRfTElOS19VUCkgPT0gMCk7CisKKwlpZiAoKHBoeV9zdGF0dXMgJiBQSFlfU1RBVF9MSU5LX1VQKSA9PSAwKSB7CisJCXJldHVybiAwOworCX0KKworCXZhbHVlID0gMDsKKwlwaHlfc3BlY19zdGF0dXMgPSByZWFkX3BoeShFVEhfQkFTRSwgcGh5X2FkZHIsIE1WMTExMV9TUEVDX1NUQVRfUkVHKTsKKwlpZiAocGh5X3NwZWNfc3RhdHVzICYgU1BFQ19TVEFUX1JFU09MVkVEKSB7CisJCXN3aXRjaCAocGh5X3NwZWNfc3RhdHVzICYgU1BFQ19TVEFUX1NQRUVEX01BU0spIHsKKwkJY2FzZSBTUEVFRF8xMDAwOgorCQkJcGh5X3NwZWVkID0gTElOS19TUEVFRF8xMDAwOworCQkJdmFsdWUgfD0gUEhZX0NUUkxfU1BFRUQxOworCQkJYnJlYWs7CisJCWNhc2UgU1BFRURfMTAwOgorCQkJcGh5X3NwZWVkID0gTElOS19TUEVFRF8xMDA7CisJCQl2YWx1ZSB8PSBQSFlfQ1RSTF9TUEVFRDA7CisJCQlicmVhazsKKwkJY2FzZSBTUEVFRF8xMDoKKwkJCXBoeV9zcGVlZCA9IExJTktfU1BFRURfMTA7CisJCQlicmVhazsKKwkJfQorCQlpZiAocGh5X3NwZWNfc3RhdHVzICYgU1BFQ19TVEFUX0ZVTExfRFVQKSB7CisJCQlwaHlfZHVwbGV4ID0gTElOS19EVVBMRVhfRlVMTDsKKwkJCXZhbHVlIHw9IFBIWV9DVFJMX0ZVTExfRFVQTEVYOworCQl9IGVsc2UgeworCQkJcGh5X2R1cGxleCA9IExJTktfRFVQTEVYX0hBTEY7CisJCX0KKwl9CisJLyogc2V0IFRCSSBzcGVlZCAqLworCXdyaXRlX3BoeShiYXNlLCBUQklfQUREUiwgUEhZX0NUUkxfUkVHLCB2YWx1ZSk7CisJd3JpdGVfcGh5KGJhc2UsIFRCSV9BRERSLCBQSFlfQU5fQURWX1JFRywgMHgwMDYwKTsKKworI2lmIFRTSTEwOF9FVEhfREVCVUcgPiAwCisJcHJpbnRmKCIlcyBsaW5rIGlzIHVwIiwgZGV2LT5uYW1lKTsKKwlwaHlfc3BlY19zdGF0dXMgPSByZWFkX3BoeShFVEhfQkFTRSwgcGh5X2FkZHIsIE1WMTExMV9TUEVDX1NUQVRfUkVHKTsKKwlpZiAocGh5X3NwZWNfc3RhdHVzICYgU1BFQ19TVEFUX1JFU09MVkVEKSB7CisJCXN3aXRjaCAocGh5X3NwZWVkKSB7CisJCWNhc2UgTElOS19TUEVFRF8xMDAwOgorCQkJcHJpbnRmKCIsIDEwMDAgTWJwcyIpOworCQkJYnJlYWs7CisJCWNhc2UgTElOS19TUEVFRF8xMDA6CisJCQlwcmludGYoIiwgMTAwIE1icHMiKTsKKwkJCWJyZWFrOworCQljYXNlIExJTktfU1BFRURfMTA6CisJCQlwcmludGYoIiwgMTAgTWJwcyIpOworCQkJYnJlYWs7CisJCX0KKwkJaWYgKHBoeV9kdXBsZXggPT0gTElOS19EVVBMRVhfRlVMTCkgeworCQkJcHJpbnRmKCIsIEZ1bGwgZHVwbGV4Iik7CisJCX0gZWxzZSB7CisJCQlwcmludGYoIiwgSGFsZiBkdXBsZXgiKTsKKwkJfQorCX0KKwlwcmludGYoIlxuIik7CisjZW5kaWYKKworCWR1bXBfcGh5X3JlZ3MoVEJJX0FERFIpOworCWlmIChzcGVlZCkgeworCQkqc3BlZWQgPSBwaHlfc3BlZWQ7CisJfQorCWlmIChkdXBsZXgpIHsKKwkJKmR1cGxleCA9IHBoeV9kdXBsZXg7CisJfQorCisJcmV0dXJuIDE7Cit9CisKKy8qCisgKiBFeHRlcm5hbCBpbnRlcmZhY2UKKyAqCisgKiByZWdpc3RlciB0aGUgdHNpMTA4IGV0aGVybmV0IGNvbnRyb2xsZXJzIHdpdGggdGhlIG11bHRpLWV0aGVybmV0IHN5c3RlbQorICovCitpbnQgdHNpMTA4X2V0aF9pbml0aWFsaXplKGJkX3QgKiBiaXMpCit7CisJc3RydWN0IGV0aF9kZXZpY2UgKmRldjsKKwlpbnQgaW5kZXg7CisKKwlmb3IgKGluZGV4ID0gMDsgaW5kZXggPCBDT05GSUdfVFNJMTA4X0VUSF9OVU1fUE9SVFM7IGluZGV4KyspIHsKKwkJZGV2ID0gKHN0cnVjdCBldGhfZGV2aWNlICopbWFsbG9jKHNpemVvZihzdHJ1Y3QgZXRoX2RldmljZSkpOworCisJCXNwcmludGYoZGV2LT5uYW1lLCAiVFNJMTA4X2V0aCVkIiwgaW5kZXgpOworCisJCWRldi0+aW9iYXNlID0gRVRIX0JBU0UgKyAoaW5kZXggKiBFVEhfUE9SVF9PRkZTRVQpOworCQlkZXYtPnByaXYgPSAodm9pZCAqKShwaHlfYWRkcmVzc1tpbmRleF0pOworCQlkZXYtPmluaXQgPSB0c2kxMDhfZXRoX3Byb2JlOworCQlkZXYtPmhhbHQgPSB0c2kxMDhfZXRoX2hhbHQ7CisJCWRldi0+c2VuZCA9IHRzaTEwOF9ldGhfc2VuZDsKKwkJZGV2LT5yZWN2ID0gdHNpMTA4X2V0aF9yZWN2OworCisJCWV0aF9yZWdpc3RlcihkZXYpOworCX0KKwlyZXR1cm4gaW5kZXg7Cit9CisKKy8qCisgKiBwcm9iZSBmb3IgYW5kIGluaXRpYWxpemUgYSBzaW5nbGUgZXRoZXJuZXQgaW50ZXJmYWNlCisgKi8KK3N0YXRpYyBpbnQgdHNpMTA4X2V0aF9wcm9iZShzdHJ1Y3QgZXRoX2RldmljZSAqZGV2LCBiZF90ICogYmlzKQoreworCXVuc2lnbmVkIGxvbmcgYmFzZTsKKwl1bnNpZ25lZCBsb25nIHZhbHVlOworCWludCBpbmRleDsKKwlzdHJ1Y3QgZG1hX2Rlc2NyaXB0b3IgKnR4X2Rlc2NyOworCXN0cnVjdCBkbWFfZGVzY3JpcHRvciAqcnhfZGVzY3I7CisJaW50IHNwZWVkOworCWludCBkdXBsZXg7CisKKwliYXNlID0gZGV2LT5pb2Jhc2U7CisKKwlyZWdfUE9SVF9DT05UUk9MKGJhc2UpID0gUE9SVF9DT05UUk9MX1NURSB8IFBPUlRfQ09OVFJPTF9CUFQ7CisKKwkvKiBCcmluZyBETUEvRklGTyBvdXQgb2YgcmVzZXQuICovCisJcmVnX1RYX0NPTkZJRyhiYXNlKSA9IDB4MDAwMDAwMDA7CisJcmVnX1JYX0NPTkZJRyhiYXNlKSA9IDB4MDAwMDAwMDA7CisKKwlyZWdfVFhfVEhSRVNIT0xEUyhiYXNlKSA9ICgxOTIgPDwgMTYpIHwgMTkyOworCXJlZ19SWF9USFJFU0hPTERTKGJhc2UpID0gKDE5MiA8PCAxNikgfCAxMTI7CisKKwkvKiBCcmluZyBNQUMgb3V0IG9mIHJlc2V0LiAqLworCXJlZ19NQUNfQ09ORklHXzEoYmFzZSkgPSAweDAwMDAwMDAwOworCisJLyogRE1BIE1BQyBjb25maWd1cmF0aW9uLiAqLworCXJlZ19NQUNfQ09ORklHXzEoYmFzZSkgPQorCSAgICBNQUNfQ09ORklHXzFfUlhfRU5BQkxFIHwgTUFDX0NPTkZJR18xX1RYX0VOQUJMRTsKKworCXJlZ19NSUlfTUdNVF9DT05GSUcoYmFzZSkgPSBNSUlfTUdNVF9DT05GSUdfTk9fUFJFQU1CTEU7CisJcmVnX01BWElNVU1fRlJBTUVfTEVOR1RIKGJhc2UpID0gUlhfQlVGRkVSX1NJWkU7CisKKwkvKiBOb3RlOiBFYXJseSB0c2kxMDggbWFudWFsIGRpZCBub3QgaGF2ZSBjb3JyZWN0IGJ5dGUgb3JkZXIKKwkgKiBmb3IgdGhlIHN0YXRpb24gYWRkcmVzcy4qLworCXJlZ19TVEFUSU9OX0FERFJFU1NfMShiYXNlKSA9IChkZXYtPmVuZXRhZGRyWzVdIDw8IDI0KSB8CisJICAgIChkZXYtPmVuZXRhZGRyWzRdIDw8IDE2KSB8CisJICAgIChkZXYtPmVuZXRhZGRyWzNdIDw8IDgpIHwgKGRldi0+ZW5ldGFkZHJbMl0gPDwgMCk7CisKKwlyZWdfU1RBVElPTl9BRERSRVNTXzIoYmFzZSkgPSAoZGV2LT5lbmV0YWRkclsxXSA8PCAyNCkgfAorCSAgICAoZGV2LT5lbmV0YWRkclswXSA8PCAxNik7CisKKwlpZiAobWFydmVsbF84OGVfcGh5X2NvbmZpZyhkZXYsICZzcGVlZCwgJmR1cGxleCkgPT0gMCkgeworCQlyZXR1cm4gMDsKKwl9CisKKwl2YWx1ZSA9CisJICAgIE1BQ19DT05GSUdfMl9QUkVBTUJMRV9MRU5HVEgoNykgfCBNQUNfQ09ORklHXzJfUEFEX0NSQyB8CisJICAgIE1BQ19DT05GSUdfMl9DUkNfRU5BQkxFOworCWlmIChzcGVlZCA9PSBMSU5LX1NQRUVEXzEwMDApIHsKKwkJdmFsdWUgfD0gTUFDX0NPTkZJR18yX0lOVEVSRkFDRV9NT0RFKElOVEVSRkFDRV9NT0RFX0JZVEUpOworCX0gZWxzZSB7CisJCXZhbHVlIHw9IE1BQ19DT05GSUdfMl9JTlRFUkZBQ0VfTU9ERShJTlRFUkZBQ0VfTU9ERV9OSUJCTEUpOworCQlyZWdfUE9SVF9DT05UUk9MKGJhc2UpIHw9IFBPUlRfQ09OVFJPTF9TUEQ7CisJfQorCWlmIChkdXBsZXggPT0gTElOS19EVVBMRVhfRlVMTCkgeworCQl2YWx1ZSB8PSBNQUNfQ09ORklHXzJfRlVMTF9EVVBMRVg7CisJCXJlZ19QT1JUX0NPTlRST0woYmFzZSkgJj0gflBPUlRfQ09OVFJPTF9CUFQ7CisJfSBlbHNlIHsKKwkJcmVnX1BPUlRfQ09OVFJPTChiYXNlKSB8PSBQT1JUX0NPTlRST0xfQlBUOworCX0KKwlyZWdfTUFDX0NPTkZJR18yKGJhc2UpID0gdmFsdWU7CisKKwlyZWdfUlhfQ09ORklHKGJhc2UpID0gUlhfQ09ORklHX1NFOworCXJlZ19SWF9RVUVVRV8wX0NPTkZJRyhiYXNlKSA9IE9DTl9QT1JUX01FTU9SWTsKKwlyZWdfUlhfUVVFVUVfMF9CVUZfQ09ORklHKGJhc2UpID0gT0NOX1BPUlRfTUVNT1JZOworCisJLyogaW5pdGlhbGl6ZSB0aGUgUlggRE1BIGRlc2NyaXB0b3JzICovCisJcnhfZGVzY3IgPSAmcnhfZGVzY3JfYXJyYXlbMF07CisJcnhfZGVzY3JfY3VycmVudCA9IHJ4X2Rlc2NyOworCWZvciAoaW5kZXggPSAwOyBpbmRleCA8IE5VTV9SWF9ERVNDOyBpbmRleCsrKSB7CisJCS8qIG1ha2Ugc3VyZSB0aGUgcmVjZWl2ZSBidWZmZXJzIGFyZSBub3QgaW4gY2FjaGUgKi8KKwkJaW52YWxpZGF0ZV9kY2FjaGVfcmFuZ2UoKHVuc2lnbmVkIGxvbmcpTmV0UnhQYWNrZXRzW2luZGV4XSwKKwkJCQkJKHVuc2lnbmVkIGxvbmcpTmV0UnhQYWNrZXRzW2luZGV4XSArCisJCQkJCVJYX0JVRkZFUl9TSVpFKTsKKwkJcnhfZGVzY3ItPnN0YXJ0X2FkZHIwID0KKwkJICAgIGNwdV90b19sZTMyKCh2dWludDMyKSBOZXRSeFBhY2tldHNbaW5kZXhdKTsKKwkJcnhfZGVzY3ItPnN0YXJ0X2FkZHIxID0gMDsKKwkJcnhfZGVzY3ItPm5leHRfZGVzY3JfYWRkcjAgPQorCQkgICAgY3B1X3RvX2xlMzIoKHZ1aW50MzIpIChyeF9kZXNjciArIDEpKTsKKwkJcnhfZGVzY3ItPm5leHRfZGVzY3JfYWRkcjEgPSAwOworCQlyeF9kZXNjci0+dmxhbl9ieXRlX2NvdW50ID0gMDsKKwkJcnhfZGVzY3ItPmNvbmZpZ19zdGF0dXMgPSBjcHVfdG9fbGUzMigoUlhfQlVGRkVSX1NJWkUgPDwgMTYpIHwKKwkJCQkJCSAgICAgIERNQV9ERVNDUl9SWF9PV05FUik7CisJCXJ4X2Rlc2NyKys7CisJfQorCXJ4X2Rlc2NyLS07CisJcnhfZGVzY3ItPm5leHRfZGVzY3JfYWRkcjAgPSAwOworCXJ4X2Rlc2NyLT5uZXh0X2Rlc2NyX2FkZHIxID0gY3B1X3RvX2xlMzIoRE1BX0RFU0NSX0xBU1QpOworCS8qIFB1c2ggdGhlIGRlc2NyaXB0b3JzIHRvIFJBTSBzbyB0aGUgZXRoZXJuZXQgRE1BIGNhbiBzZWUgdGhlbSAqLworCWludmFsaWRhdGVfZGNhY2hlX3JhbmdlKCh1bnNpZ25lZCBsb25nKXJ4X2Rlc2NyX2FycmF5LAorCQkJCSh1bnNpZ25lZCBsb25nKXJ4X2Rlc2NyX2FycmF5ICsKKwkJCQlzaXplb2YocnhfZGVzY3JfYXJyYXkpKTsKKworCS8qIGVuYWJsZSBSWCBxdWV1ZSAqLworCXJlZ19SWF9DT05UUk9MKGJhc2UpID0gVFhfQ09OVFJPTF9HTyB8IDB4MDE7CisJcmVnX1JYX1FVRVVFXzBfUFRSX0xPVyhiYXNlKSA9ICh1MzIpIHJ4X2Rlc2NyX2N1cnJlbnQ7CisJLyogZW5hYmxlIHJlY2VpdmUgRE1BICovCisJcmVnX1JYX1FVRVVFXzBfUFRSX0hJR0goYmFzZSkgPSBSWF9RVUVVRV8wX1BUUl9ISUdIX1ZBTElEOworCisJcmVnX1RYX1FVRVVFXzBfQ09ORklHKGJhc2UpID0gT0NOX1BPUlRfTUVNT1JZOworCXJlZ19UWF9RVUVVRV8wX0JVRl9DT05GSUcoYmFzZSkgPSBPQ05fUE9SVF9NRU1PUlk7CisKKwkvKiBpbml0aWFsaXplIHRoZSBUWCBETUEgZGVzY3JpcHRvciAqLworCXR4X2Rlc2NyID0gJnR4X2Rlc2NyaXB0b3I7CisKKwl0eF9kZXNjci0+c3RhcnRfYWRkcjAgPSAwOworCXR4X2Rlc2NyLT5zdGFydF9hZGRyMSA9IDA7CisJdHhfZGVzY3ItPm5leHRfZGVzY3JfYWRkcjAgPSAwOworCXR4X2Rlc2NyLT5uZXh0X2Rlc2NyX2FkZHIxID0gY3B1X3RvX2xlMzIoRE1BX0RFU0NSX0xBU1QpOworCXR4X2Rlc2NyLT52bGFuX2J5dGVfY291bnQgPSAwOworCXR4X2Rlc2NyLT5jb25maWdfc3RhdHVzID0gY3B1X3RvX2xlMzIoRE1BX0RFU0NSX1RYX09LIHwKKwkJCQkJICAgICAgRE1BX0RFU0NSX1RYX1NPRiB8CisJCQkJCSAgICAgIERNQV9ERVNDUl9UWF9FT0YpOworCS8qIGVuYWJsZSBUWCBxdWV1ZSAqLworCXJlZ19UWF9DT05UUk9MKGJhc2UpID0gVFhfQ09OVFJPTF9HTyB8IDB4MDE7CisKKwlyZXR1cm4gMTsKK30KKworLyoKKyAqIHNlbmQgYSBwYWNrZXQKKyAqLworc3RhdGljIGludCB0c2kxMDhfZXRoX3NlbmQoc3RydWN0IGV0aF9kZXZpY2UgKmRldiwKKwkJCSAgIHZvbGF0aWxlIHZvaWQgKnBhY2tldCwgaW50IGxlbmd0aCkKK3sKKwl1bnNpZ25lZCBsb25nIGJhc2U7CisJaW50IHRpbWVvdXQ7CisJc3RydWN0IGRtYV9kZXNjcmlwdG9yICp0eF9kZXNjcjsKKwl1bnNpZ25lZCBsb25nIHN0YXR1czsKKworCWJhc2UgPSBkZXYtPmlvYmFzZTsKKwl0eF9kZXNjciA9ICZ0eF9kZXNjcmlwdG9yOworCisJLyogV2FpdCB1bnRpbCB0aGUgbGFzdCBwYWNrZXQgaGFzIGJlZW4gdHJhbnNtaXR0ZWQuICovCisJdGltZW91dCA9IDA7CisJZG8geworCQkvKiBtYWtlIHN1cmUgd2Ugc2VlIHRoZSBjaGFuZ2VzIG1hZGUgYnkgdGhlIERNQSBlbmdpbmUgKi8KKwkJaW52YWxpZGF0ZV9kY2FjaGVfcmFuZ2UoKHVuc2lnbmVkIGxvbmcpdHhfZGVzY3IsCisJCQkJCSh1bnNpZ25lZCBsb25nKXR4X2Rlc2NyICsKKwkJCQkJc2l6ZW9mKHN0cnVjdCBkbWFfZGVzY3JpcHRvcikpOworCisJCWlmICh0aW1lb3V0ICE9IDApIHsKKwkJCXVkZWxheSgxNSk7CisJCX0KKwkJaWYgKCsrdGltZW91dCA+IDEwMDAwKSB7CisJCQl0eF9kaWFnX3JlZ3MoYmFzZSk7CisJCQlkZWJ1Z19sZXYoMSwKKwkJCQkgICJFUlJPUjogdGltZW91dCB3YWl0aW5nIGZvciBsYXN0IHRyYW5zbWl0IHBhY2tldCB0byBiZSBzZW50XG4iKTsKKwkJCXJldHVybiAwOworCQl9CisJfSB3aGlsZSAodHhfZGVzY3ItPmNvbmZpZ19zdGF0dXMgJiBjcHVfdG9fbGUzMihETUFfREVTQ1JfVFhfT1dORVIpKTsKKworCXN0YXR1cyA9IGxlMzJfdG9fY3B1KHR4X2Rlc2NyLT5jb25maWdfc3RhdHVzKTsKKwlpZiAoKHN0YXR1cyAmIERNQV9ERVNDUl9UWF9PSykgPT0gMCkgeworI2lmZGVmIFRYX1BSSU5UX0VSUk9SUworCQlwcmludGYoIlRYIHBhY2tldCBlcnJvcjogMHglMDh4XG4gICAgJXMlcyVzJXNcbiIsIHN0YXR1cywKKwkJICAgICAgIHN0YXR1cyAmIERNQV9ERVNDUl9UWF9PSyA/ICJ0eCBlcnJvciwgIiA6ICIiLAorCQkgICAgICAgc3RhdHVzICYgRE1BX0RFU0NSX1RYX1JFVFJZX0xJTUlUID8KKwkJICAgICAgICJyZXRyeSBsaW1pdCByZWFjaGVkLCAiIDogIiIsCisJCSAgICAgICBzdGF0dXMgJiBETUFfREVTQ1JfVFhfVU5ERVJSVU4gPyAidW5kZXJydW4sICIgOiAiIiwKKwkJICAgICAgIHN0YXR1cyAmIERNQV9ERVNDUl9UWF9MQVRFX0NPTExJU0lPTiA/ICJsYXRlIGNvbGxpc2lvbiwgIgorCQkgICAgICAgOiAiIik7CisjZW5kaWYKKwl9CisKKwlkZWJ1Z19sZXYoOSwgInNlbmRpbmcgcGFja2V0ICVkXG4iLCBsZW5ndGgpOworCXR4X2Rlc2NyLT5zdGFydF9hZGRyMCA9IGNwdV90b19sZTMyKCh2dWludDMyKSBwYWNrZXQpOworCXR4X2Rlc2NyLT5zdGFydF9hZGRyMSA9IDA7CisJdHhfZGVzY3ItPm5leHRfZGVzY3JfYWRkcjAgPSAwOworCXR4X2Rlc2NyLT5uZXh0X2Rlc2NyX2FkZHIxID0gY3B1X3RvX2xlMzIoRE1BX0RFU0NSX0xBU1QpOworCXR4X2Rlc2NyLT52bGFuX2J5dGVfY291bnQgPSBjcHVfdG9fbGUzMihsZW5ndGgpOworCXR4X2Rlc2NyLT5jb25maWdfc3RhdHVzID0gY3B1X3RvX2xlMzIoRE1BX0RFU0NSX1RYX09XTkVSIHwKKwkJCQkJICAgICAgRE1BX0RFU0NSX1RYX0NSQyB8CisJCQkJCSAgICAgIERNQV9ERVNDUl9UWF9QQUQgfAorCQkJCQkgICAgICBETUFfREVTQ1JfVFhfU09GIHwKKwkJCQkJICAgICAgRE1BX0RFU0NSX1RYX0VPRik7CisKKwlpbnZhbGlkYXRlX2RjYWNoZV9yYW5nZSgodW5zaWduZWQgbG9uZyl0eF9kZXNjciwKKwkJCQkodW5zaWduZWQgbG9uZyl0eF9kZXNjciArCisJCQkJc2l6ZW9mKHN0cnVjdCBkbWFfZGVzY3JpcHRvcikpOworCisJaW52YWxpZGF0ZV9kY2FjaGVfcmFuZ2UoKHVuc2lnbmVkIGxvbmcpcGFja2V0LAorCQkJCSh1bnNpZ25lZCBsb25nKXBhY2tldCArIGxlbmd0aCk7CisKKwlyZWdfVFhfUVVFVUVfMF9QVFJfTE9XKGJhc2UpID0gKHUzMikgdHhfZGVzY3I7CisJcmVnX1RYX1FVRVVFXzBfUFRSX0hJR0goYmFzZSkgPSBUWF9RVUVVRV8wX1BUUl9ISUdIX1ZBTElEOworCisJcmV0dXJuIGxlbmd0aDsKK30KKworLyoKKyAqIENoZWNrIGZvciByZWNlaXZlZCBwYWNrZXRzIGFuZCBzZW5kIHRoZW0gdXAgdGhlIHByb3RvY2FsIHN0YWNrCisgKi8KK3N0YXRpYyBpbnQgdHNpMTA4X2V0aF9yZWN2KHN0cnVjdCBldGhfZGV2aWNlICpkZXYpCit7CisJc3RydWN0IGRtYV9kZXNjcmlwdG9yICpyeF9kZXNjcjsKKwl1bnNpZ25lZCBsb25nIGJhc2U7CisJaW50IGxlbmd0aCA9IDA7CisJdW5zaWduZWQgbG9uZyBzdGF0dXM7CisJdm9sYXRpbGUgdWNoYXIgKmJ1ZmZlcjsKKworCWJhc2UgPSBkZXYtPmlvYmFzZTsKKworCS8qIG1ha2Ugc3VyZSB3ZSBzZWUgdGhlIGNoYW5nZXMgbWFkZSBieSB0aGUgRE1BIGVuZ2luZSAqLworCWludmFsaWRhdGVfZGNhY2hlX3JhbmdlKCh1bnNpZ25lZCBsb25nKXJ4X2Rlc2NyX2FycmF5LAorCQkJCSh1bnNpZ25lZCBsb25nKXJ4X2Rlc2NyX2FycmF5ICsKKwkJCQlzaXplb2YocnhfZGVzY3JfYXJyYXkpKTsKKworCS8qIHByb2Nlc3MgYWxsIG9mIHRoZSByZWNlaXZlZCBwYWNrZXRzICovCisJcnhfZGVzY3IgPSByeF9kZXNjcl9jdXJyZW50OworCXdoaWxlICgocnhfZGVzY3ItPmNvbmZpZ19zdGF0dXMgJiBjcHVfdG9fbGUzMihETUFfREVTQ1JfUlhfT1dORVIpKSA9PSAwKSB7CisJCS8qIGNoZWNrIGZvciBlcnJvciAqLworCQlzdGF0dXMgPSBsZTMyX3RvX2NwdShyeF9kZXNjci0+Y29uZmlnX3N0YXR1cyk7CisJCWlmIChzdGF0dXMgJiBETUFfREVTQ1JfUlhfQkFEX0ZSQU1FKSB7CisjaWZkZWYgUlhfUFJJTlRfRVJST1JTCisJCQlwcmludGYoIlJYIHBhY2tldCBlcnJvcjogMHglMDh4XG4gICAgJXMlcyVzJXMlcyVzXG4iLAorCQkJICAgICAgIHN0YXR1cywKKwkJCSAgICAgICBzdGF0dXMgJiBETUFfREVTQ1JfUlhfRlJBTUVfSVNfVFlQRSA/ICJ0b28gYmlnLCAiCisJCQkgICAgICAgOiAiIiwKKwkJCSAgICAgICBzdGF0dXMgJiBETUFfREVTQ1JfUlhfU0hPUlRfRlJBTUUgPyAidG9vIHNob3J0LCAiCisJCQkgICAgICAgOiAiIiwKKwkJCSAgICAgICBzdGF0dXMgJiBETUFfREVTQ1JfUlhfQkFEX0ZSQU1FID8gImJhZCBmcmFtZSwgIiA6CisJCQkgICAgICAgIiIsCisJCQkgICAgICAgc3RhdHVzICYgRE1BX0RFU0NSX1JYX09WRVJSVU4gPyAib3ZlcnJ1biwgIiA6ICIiLAorCQkJICAgICAgIHN0YXR1cyAmIERNQV9ERVNDUl9SWF9NQVhfRlJBTUVfTEVOID8KKwkJCSAgICAgICAibWF4IGxlbmd0aCwgIiA6ICIiLAorCQkJICAgICAgIHN0YXR1cyAmIERNQV9ERVNDUl9SWF9DUkNfRVJST1IgPyAiQ1JDIGVycm9yLCAiIDoKKwkJCSAgICAgICAiIik7CisjZW5kaWYKKwkJfSBlbHNlIHsKKwkJCWxlbmd0aCA9CisJCQkgICAgbGUzMl90b19jcHUocnhfZGVzY3ItPnZsYW5fYnl0ZV9jb3VudCkgJiAweEZGRkY7CisKKwkJCS8qKiogcHJvY2VzcyBwYWNrZXQgKioqLworCQkJYnVmZmVyID0KKwkJCSAgICAodm9sYXRpbGUgdWNoYXIKKwkJCSAgICAgKikobGUzMl90b19jcHUocnhfZGVzY3ItPnN0YXJ0X2FkZHIwKSk7CisJCQlOZXRSZWNlaXZlKGJ1ZmZlciwgbGVuZ3RoKTsKKworCQkJaW52YWxpZGF0ZV9kY2FjaGVfcmFuZ2UoKHVuc2lnbmVkIGxvbmcpYnVmZmVyLAorCQkJCQkJKHVuc2lnbmVkIGxvbmcpYnVmZmVyICsKKwkJCQkJCVJYX0JVRkZFUl9TSVpFKTsKKwkJfQorCQkvKiBHaXZlIHRoaXMgYnVmZmVyIGJhY2sgdG8gdGhlIERNQSBlbmdpbmUgKi8KKwkJcnhfZGVzY3ItPnZsYW5fYnl0ZV9jb3VudCA9IDA7CisJCXJ4X2Rlc2NyLT5jb25maWdfc3RhdHVzID0gY3B1X3RvX2xlMzIoKFJYX0JVRkZFUl9TSVpFIDw8IDE2KSB8CisJCQkJCQkgICAgICBETUFfREVTQ1JfUlhfT1dORVIpOworCQkvKiBtb3ZlIGRlc2NyaXB0b3IgcG9pbnRlciBmb3J3YXJkICovCisJCXJ4X2Rlc2NyID0KKwkJICAgIChzdHJ1Y3QgZG1hX2Rlc2NyaXB0b3IKKwkJICAgICAqKShsZTMyX3RvX2NwdShyeF9kZXNjci0+bmV4dF9kZXNjcl9hZGRyMCkpOworCQlpZiAocnhfZGVzY3IgPT0gMCkgeworCQkJcnhfZGVzY3IgPSAmcnhfZGVzY3JfYXJyYXlbMF07CisJCX0KKwl9CisJLyogcmVtZW1iZXIgd2hlcmUgd2UgYXJlIGZvciBuZXh0IHRpbWUgKi8KKwlyeF9kZXNjcl9jdXJyZW50ID0gcnhfZGVzY3I7CisKKwkvKiBJZiB0aGUgRE1BIGVuZ2luZSBoYXMgcmVhY2hlZCB0aGUgZW5kIG9mIHRoZSBxdWV1ZQorCSAqIHN0YXJ0IG92ZXIgYXQgdGhlIGJlZ2luaW5nICovCisJaWYgKHJlZ19SWF9FWFRFTkRFRF9TVEFUVVMoYmFzZSkgJiBSWF9FWFRFTkRFRF9TVEFUVVNfRU9RXzApIHsKKworCQlyZWdfUlhfRVhURU5ERURfU1RBVFVTKGJhc2UpID0gUlhfRVhURU5ERURfU1RBVFVTX0VPUV8wOworCQlyZWdfUlhfUVVFVUVfMF9QVFJfTE9XKGJhc2UpID0gKHUzMikgJiByeF9kZXNjcl9hcnJheVswXTsKKwkJcmVnX1JYX1FVRVVFXzBfUFRSX0hJR0goYmFzZSkgPSBSWF9RVUVVRV8wX1BUUl9ISUdIX1ZBTElEOworCX0KKworCXJldHVybiBsZW5ndGg7Cit9CisKKy8qCisgKiBkaXNhYmxlIGFuIGV0aGVybmV0IGludGVyZmFjZQorICovCitzdGF0aWMgdm9pZCB0c2kxMDhfZXRoX2hhbHQoc3RydWN0IGV0aF9kZXZpY2UgKmRldikKK3sKKwl1bnNpZ25lZCBsb25nIGJhc2U7CisKKwliYXNlID0gZGV2LT5pb2Jhc2U7CisKKwkvKiBQdXQgRE1BL0ZJRk8gaW50byByZXNldCBzdGF0ZS4gKi8KKwlyZWdfVFhfQ09ORklHKGJhc2UpID0gVFhfQ09ORklHX1JTVDsKKwlyZWdfUlhfQ09ORklHKGJhc2UpID0gUlhfQ09ORklHX1JTVDsKKworCS8qIFB1dCBNQUMgaW50byByZXNldCBzdGF0ZS4gKi8KKwlyZWdfTUFDX0NPTkZJR18xKGJhc2UpID0gTUFDX0NPTkZJR18xX1NPRlRfUkVTRVQ7Cit9CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvZHJpdmVycy90c2kxMDhfaTJjLmMgYi9kcml2ZXJzL3RzaTEwOF9pMmMuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wOGU1ZTNiCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy90c2kxMDhfaTJjLmMKQEAgLTAsMCArMSwzMDAgQEAKKy8qCisgKiAoQykgQ29weXJpZ2h0IDIwMDQgVHVuZHJhIFNlbWljb25kdWN0b3IgQ29ycC4KKyAqIEF1dGhvcjogQWxleCBCb3VuaW5lCisgKgorICogU2VlIGZpbGUgQ1JFRElUUyBmb3IgbGlzdCBvZiBwZW9wbGUgd2hvIGNvbnRyaWJ1dGVkIHRvIHRoaXMKKyAqIHByb2plY3QuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mCisgKiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwKKyAqIE1BIDAyMTExLTEzMDcgVVNBCisgKgorICovCisKKyNpbmNsdWRlIDxjb25maWcuaD4KKworI2lmZGVmIENPTkZJR19UU0kxMDhfSTJDCisKKyNpbmNsdWRlIDxjb21tb24uaD4KKyNpbmNsdWRlIDx0c2kxMDguaD4KKworI2lmIChDT05GSUdfQ09NTUFORFMgJiBDRkdfQ01EX0kyQykKKworI2RlZmluZSBJMkNfREVMQVkgICAgICAgICAgIDEwMDAwMAorI3VuZGVmICBERUJVR19JMkMKKworI2lmZGVmIERFQlVHX0kyQworI2RlZmluZSBEUFJJTlQoeCkgcHJpbnRmKHgpCisjZWxzZQorI2RlZmluZSBEUFJJTlQoeCkKKyNlbmRpZgorCisvKiBBbGwgZnVuY3Rpb25zIGFzc3VtZSB0aGF0IFRzaTEwOCBJMkMgYmxvY2sgaXMgdGhlIG9ubHkgbWFzdGVyIG9uIHRoZSBidXMgKi8KKy8qIEkyQyByZWFkIGhlbHBlciBmdW5jdGlvbiAqLworCitzdGF0aWMgaW50IGkyY19yZWFkX2J5dGUoCisJCXVpbnQgaTJjX2NoYW4sCS8qIEkyQyBjaGFubmVsIG51bWJlcjogMCAtIG1haW4sIDEgLSBTREMgU1BEICovCisJCXVjaGFyIGNoaXBfYWRkciwvKiBJMkMgZGV2aWNlIGFkZHJlc3Mgb24gdGhlIGJ1cyAqLworCQl1aW50IGJ5dGVfYWRkciwJLyogQnl0ZSBhZGRyZXNzIHdpdGhpbiBJMkMgZGV2aWNlICovCisJCXVjaGFyICogYnVmZmVyCS8qIHBvaW50ZXIgdG8gZGF0YSBidWZmZXIgKi8KKwkJKQoreworCXUzMiB0ZW1wOworCXUzMiB0b19jb3VudCA9IEkyQ19ERUxBWTsKKwl1MzIgb3Bfc3RhdHVzID0gVFNJMTA4X0kyQ19USU1FT1VUX0VSUjsKKwl1MzIgY2hhbl9vZmZzZXQgPSBUU0kxMDhfSTJDX09GRlNFVDsKKworCURQUklOVCgoIkkyQyByZWFkX2J5dGUoKSAlZCAweCUwMnggMHglMDJ4XG4iLAorCQlpMmNfY2hhbiwgY2hpcF9hZGRyLCBieXRlX2FkZHIpKTsKKworCWlmICgwICE9IGkyY19jaGFuKSB7CisJCWNoYW5fb2Zmc2V0ID0gVFNJMTA4X0kyQ19TRFJBTV9PRkZTRVQ7CisJfQorCisJLyogQ2hlY2sgaWYgSTJDIG9wZXJhdGlvbiBpcyBpbiBwcm9ncmVzcyAqLworCXRlbXAgPSAqKHUzMiAqKSAoQ0ZHX1RTSTEwOF9DU1JfQkFTRSArIGNoYW5fb2Zmc2V0ICsgSTJDX0NOVFJMMik7CisKKwlpZiAoMCA9PSAodGVtcCAmIChJMkNfQ05UUkwyX1JEX1NUQVRVUyB8IEkyQ19DTlRSTDJfV1JfU1RBVFVTIHwKKwkJCSAgSTJDX0NOVFJMMl9TVEFSVCkpCisJICAgICkgeworCQkvKiBTZXQgZGV2aWNlIGFkZHJlc3MgYW5kIG9wZXJhdGlvbiAocmVhZCA9IDApICovCisJCXRlbXAgPSAoYnl0ZV9hZGRyIDw8IDE2KSB8ICgoY2hpcF9hZGRyICYgMHgwNykgPDwgOCkgfAorCQkgICAgKChjaGlwX2FkZHIgPj4gMykgJiAweDBGKTsKKwkJKih1MzIgKikgKENGR19UU0kxMDhfQ1NSX0JBU0UgKyBjaGFuX29mZnNldCArIEkyQ19DTlRSTDEpID0KKwkJICAgIHRlbXA7CisKKwkJLyogSXNzdWUgdGhlIHJlYWQgY29tbWFuZAorCQkgKiAoYXQgdGhpcyBtb21lbnQgYWxsIG90aGVyIHBhcmFtZXRlcnMgYXJlIDAgCisJCSAqIChzaXplID0gMSBieXRlLCBsYW5lID0gMCkKKwkJICovCisKKwkJKih1MzIgKikgKENGR19UU0kxMDhfQ1NSX0JBU0UgKyBjaGFuX29mZnNldCArIEkyQ19DTlRSTDIpID0KKwkJICAgIChJMkNfQ05UUkwyX1NUQVJUKTsKKworCQkvKiBXYWl0IHVudGlsIG9wZXJhdGlvbiBjb21wbGV0ZWQgKi8KKwkJZG8geworCQkJLyogUmVhZCBJMkMgb3BlcmF0aW9uIHN0YXR1cyAqLworCQkJdGVtcCA9CisJCQkgICAgKih1MzIgKikgKENGR19UU0kxMDhfQ1NSX0JBU0UgKyBjaGFuX29mZnNldCArCisJCQkJICAgICAgSTJDX0NOVFJMMik7CisKKwkJCWlmICgwID09CisJCQkgICAgKHRlbXAgJiAoSTJDX0NOVFJMMl9SRF9TVEFUVVMgfCBJMkNfQ05UUkwyX1NUQVJUKSkpCisJCQl7CisJCQkJaWYgKDAgPT0KKwkJCQkgICAgKHRlbXAgJgorCQkJCSAgICAgKEkyQ19DTlRSTDJfSTJDX0NGR0VSUiB8CisJCQkJICAgICAgSTJDX0NOVFJMMl9JMkNfVE9fRVJSKSkKKwkJCQkgICAgKSB7CisJCQkJCW9wX3N0YXR1cyA9IFRTSTEwOF9JMkNfU1VDQ0VTUzsKKworCQkJCQl0ZW1wID0gKih1MzIgKikgKENGR19UU0kxMDhfQ1NSX0JBU0UgKworCQkJCQkJCSBjaGFuX29mZnNldCArCisJCQkJCQkJIEkyQ19SRF9EQVRBKTsKKworCQkJCQkqYnVmZmVyID0gKHU4KSAodGVtcCAmIDB4RkYpOworCQkJCX0gZWxzZSB7CisJCQkJCS8qIHJlcG9ydCBIVyBlcnJvciAqLworCQkJCQlvcF9zdGF0dXMgPSBUU0kxMDhfSTJDX0lGX0VSUk9SOworCisJCQkJCURQUklOVCgoIkkyQyBIVyBlcnJvciByZXBvcnRlZDogMHglMDJ4XG4iLCB0ZW1wKSk7CisJCQkJfQorCisJCQkJYnJlYWs7CisJCQl9CisJCX0gd2hpbGUgKHRvX2NvdW50LS0pOworCX0gZWxzZSB7CisJCW9wX3N0YXR1cyA9IFRTSTEwOF9JMkNfSUZfQlVTWTsKKworCQlEUFJJTlQoKCJJMkMgVHJhbnNhY3Rpb24gc3RhcnQgZmFpbGVkOiAweCUwMnhcbiIsIHRlbXApKTsKKwl9CisKKwlEUFJJTlQoKCJJMkMgcmVhZF9ieXRlKCkgc3RhdHVzOiAweCUwMnhcbiIsIG9wX3N0YXR1cykpOworCXJldHVybiBvcF9zdGF0dXM7Cit9CisKKy8qIAorICogSTJDIFJlYWQgaW50ZXJmYWNlIGFzIGRlZmluZWQgaW4gImluY2x1ZGUvaTJjLmgiIDoKKyAqICAgY2hpcF9hZGRyOiBJMkMgY2hpcCBhZGRyZXNzLCByYW5nZSAwLi4xMjcKKyAqICAgICAgICAgICAgICAgICAgKHRvIHJlYWQgZnJvbSBTUEQgY2hhbm5lbCBFRVBST00gdXNlICgweEQwIC4uLiAweEQ3KQorICogICAgICAgICAgICAgIE5PVEU6IFRoZSBiaXQgNyBpbiB0aGUgY2hpcF9hZGRyIHNlcnZlcyBhcyBhIGNoYW5uZWwgc2VsZWN0LgorICogICAgICAgICAgICAgIFRoaXMgaGFjayBpcyBmb3IgZW5hYmxpbmcgImlzZHJhbSIgY29tbWFuZCBvbiBUc2kxMDggYm9hcmRzCisgKiAgICAgICAgICAgICAgd2l0aG91dCBjaGFuZ2VzIHRvIGNvbW1vbiBjb2RlLiBVc2VkIGZvciBJMkMgcmVhZHMgb25seS4gCisgKiAgIGJ5dGVfYWRkcjogTWVtb3J5IG9yIHJlZ2lzdGVyIGFkZHJlc3Mgd2l0aGluIHRoZSBjaGlwCisgKiAgIGFsZW46ICAgICAgTnVtYmVyIG9mIGJ5dGVzIHRvIHVzZSBmb3IgYWRkciAodHlwaWNhbGx5IDEsIDIgZm9yIGxhcmdlcgorICogICAgICAgICAgICAgIG1lbW9yaWVzLCAwIGZvciByZWdpc3RlciB0eXBlIGRldmljZXMgd2l0aCBvbmx5IG9uZQorICogICAgICAgICAgICAgIHJlZ2lzdGVyKQorICogICBidWZmZXI6ICAgIFBvaW50ZXIgdG8gZGVzdGluYXRpb24gYnVmZmVyIGZvciBkYXRhIHRvIGJlIHJlYWQKKyAqICAgbGVuOiAgICAgICBIb3cgbWFueSBieXRlcyB0byByZWFkCisgKgorICogICBSZXR1cm5zOiAwIG9uIHN1Y2Nlc3MsIG5vdCAwIG9uIGZhaWx1cmUKKyAqLworCitpbnQgaTJjX3JlYWQodWNoYXIgY2hpcF9hZGRyLCB1aW50IGJ5dGVfYWRkciwgaW50IGFsZW4sIHVjaGFyICogYnVmZmVyLCBpbnQgbGVuKQoreworCXUzMiBvcF9zdGF0dXMgPSBUU0kxMDhfSTJDX1BBUkFNX0VSUjsKKwl1MzIgaTJjX2lmID0gMDsKKworCS8qIEhhY2sgdG8gc3VwcG9ydCBzZWNvbmQgKFNQRCkgSTJDIGNvbnRyb2xsZXIgKFNQRCBFRVBST00gcmVhZCBvbmx5KS4qLworCWlmICgweEQwID09IChjaGlwX2FkZHIgJiB+MHgwNykpIHsKKwkJaTJjX2lmID0gMTsKKwkJY2hpcF9hZGRyICY9IDB4N0Y7CisJfQorCS8qIENoZWNrIGZvciB2YWxpZCBJMkMgYWRkcmVzcyAqLworCWlmIChjaGlwX2FkZHIgPD0gMHg3RiAmJiAoYnl0ZV9hZGRyICsgbGVuKSA8PSAoMHgwMSA8PCAoYWxlbiAqIDgpKSkgeworCQl3aGlsZSAobGVuLS0pIHsKKwkJCW9wX3N0YXR1cyA9CisJCQkgICAgaTJjX3JlYWRfYnl0ZShpMmNfaWYsIGNoaXBfYWRkciwgYnl0ZV9hZGRyKyssCisJCQkJCSAgYnVmZmVyKyspOworCisJCQlpZiAoVFNJMTA4X0kyQ19TVUNDRVNTICE9IG9wX3N0YXR1cykgeworCQkJCURQUklOVCgoIkkyQyByZWFkX2J5dGUoKSBmYWlsZWQ6IDB4JTAyeCAoJWQgbGVmdClcbiIsIG9wX3N0YXR1cywgbGVuKSk7CisKKwkJCQlicmVhazsKKwkJCX0KKwkJfQorCX0KKworCURQUklOVCgoIkkyQyByZWFkKCkgc3RhdHVzOiAweCUwMnhcbiIsIG9wX3N0YXR1cykpOworCXJldHVybiBvcF9zdGF0dXM7Cit9CisKKy8qIEkyQyB3cml0ZSBoZWxwZXIgZnVuY3Rpb24gKi8KKworc3RhdGljIGludCBpMmNfd3JpdGVfYnl0ZSh1Y2hhciBjaGlwX2FkZHIsLyogSTJDIGRldmljZSBhZGRyZXNzIG9uIHRoZSBidXMgKi8KKwkJCSAgdWludCBieXRlX2FkZHIsIC8qIEJ5dGUgYWRkcmVzcyB3aXRoaW4gSTJDIGRldmljZSAqLworCQkJICB1Y2hhciAqIGJ1ZmZlciAgLyogIHBvaW50ZXIgdG8gZGF0YSBidWZmZXIgKi8KKwkJCSAgKQoreworCXUzMiB0ZW1wOworCXUzMiB0b19jb3VudCA9IEkyQ19ERUxBWTsKKwl1MzIgb3Bfc3RhdHVzID0gVFNJMTA4X0kyQ19USU1FT1VUX0VSUjsKKworCS8qIENoZWNrIGlmIEkyQyBvcGVyYXRpb24gaXMgaW4gcHJvZ3Jlc3MgKi8KKwl0ZW1wID0gKih1MzIgKikgKENGR19UU0kxMDhfQ1NSX0JBU0UgKyBUU0kxMDhfSTJDX09GRlNFVCArIEkyQ19DTlRSTDIpOworCisJaWYgKDAgPT0KKwkgICAgKHRlbXAgJgorCSAgICAgKEkyQ19DTlRSTDJfUkRfU1RBVFVTIHwgSTJDX0NOVFJMMl9XUl9TVEFUVVMgfCBJMkNfQ05UUkwyX1NUQVJUKSkpCisJeworCQkvKiBQbGFjZSBkYXRhIGludG8gdGhlIEkyQyBUeCBSZWdpc3RlciAqLworCQkqKHUzMiAqKSAoQ0ZHX1RTSTEwOF9DU1JfQkFTRSArIFRTSTEwOF9JMkNfT0ZGU0VUICsKKwkJCSAgSTJDX1RYX0RBVEEpID0gKHUzMikgKiBidWZmZXI7CisKKwkJLyogU2V0IGRldmljZSBhZGRyZXNzIGFuZCBvcGVyYXRpb24gICovCisJCXRlbXAgPQorCQkgICAgSTJDX0NOVFJMMV9JMkNXUklURSB8IChieXRlX2FkZHIgPDwgMTYpIHwKKwkJICAgICgoY2hpcF9hZGRyICYgMHgwNykgPDwgOCkgfCAoKGNoaXBfYWRkciA+PiAzKSAmIDB4MEYpOworCQkqKHUzMiAqKSAoQ0ZHX1RTSTEwOF9DU1JfQkFTRSArIFRTSTEwOF9JMkNfT0ZGU0VUICsKKwkJCSAgSTJDX0NOVFJMMSkgPSB0ZW1wOworCisJCS8qIElzc3VlIHRoZSB3cml0ZSBjb21tYW5kIChhdCB0aGlzIG1vbWVudCBhbGwgb3RoZXIgcGFyYW1ldGVycworCQkgKiBhcmUgMCAoc2l6ZSA9IDEgYnl0ZSwgbGFuZSA9IDApCisJCSAqLworCQkKKwkJKih1MzIgKikgKENGR19UU0kxMDhfQ1NSX0JBU0UgKyBUU0kxMDhfSTJDX09GRlNFVCArCisJCQkgIEkyQ19DTlRSTDIpID0gKEkyQ19DTlRSTDJfU1RBUlQpOworCisJCW9wX3N0YXR1cyA9IFRTSTEwOF9JMkNfVElNRU9VVF9FUlI7CisKKwkJLyogV2FpdCB1bnRpbCBvcGVyYXRpb24gY29tcGxldGVkICovCisJCWRvIHsKKwkJCS8vIFJlYWQgSTJDIG9wZXJhdGlvbiBzdGF0dXMKKwkJCXRlbXAgPQorCQkJICAgICoodTMyICopIChDRkdfVFNJMTA4X0NTUl9CQVNFICsgVFNJMTA4X0kyQ19PRkZTRVQgKworCQkJCSAgICAgIEkyQ19DTlRSTDIpOworCisJCQlpZiAoMCA9PQorCQkJICAgICh0ZW1wICYgKEkyQ19DTlRSTDJfV1JfU1RBVFVTIHwgSTJDX0NOVFJMMl9TVEFSVCkpKQorCQkJeworCQkJCWlmICgwID09CisJCQkJICAgICh0ZW1wICYKKwkJCQkgICAgIChJMkNfQ05UUkwyX0kyQ19DRkdFUlIgfAorCQkJCSAgICAgIEkyQ19DTlRSTDJfSTJDX1RPX0VSUikpKSB7CisJCQkJCW9wX3N0YXR1cyA9IFRTSTEwOF9JMkNfU1VDQ0VTUzsKKwkJCQl9IGVsc2UgeworCQkJCQkvKiByZXBvcnQgZGV0ZWN0ZWQgSFcgZXJyb3IgKi8KKwkJCQkJb3Bfc3RhdHVzID0gVFNJMTA4X0kyQ19JRl9FUlJPUjsKKworCQkJCQlEUFJJTlQoKCJJMkMgSFcgZXJyb3IgcmVwb3J0ZWQ6IDB4JTAyeFxuIiwgdGVtcCkpOworCQkJCX0KKworCQkJCWJyZWFrOworCQkJfQorCisJCX0gd2hpbGUgKHRvX2NvdW50LS0pOworCX0gZWxzZSB7CisJCW9wX3N0YXR1cyA9IFRTSTEwOF9JMkNfSUZfQlVTWTsKKworCQlEUFJJTlQoKCJJMkMgVHJhbnNhY3Rpb24gc3RhcnQgZmFpbGVkOiAweCUwMnhcbiIsIHRlbXApKTsKKwl9CisKKwlyZXR1cm4gb3Bfc3RhdHVzOworfQorCisvKiAKKyAqIEkyQyBXcml0ZSBpbnRlcmZhY2UgYXMgZGVmaW5lZCBpbiAiaW5jbHVkZS9pMmMuaCIgOgorICogICBjaGlwX2FkZHI6IEkyQyBjaGlwIGFkZHJlc3MsIHJhbmdlIDAuLjEyNworICogICBieXRlX2FkZHI6IE1lbW9yeSBvciByZWdpc3RlciBhZGRyZXNzIHdpdGhpbiB0aGUgY2hpcAorICogICBhbGVuOiAgICAgIE51bWJlciBvZiBieXRlcyB0byB1c2UgZm9yIGFkZHIgKHR5cGljYWxseSAxLCAyIGZvciBsYXJnZXIKKyAqICAgICAgICAgICAgICBtZW1vcmllcywgMCBmb3IgcmVnaXN0ZXIgdHlwZSBkZXZpY2VzIHdpdGggb25seSBvbmUKKyAqICAgICAgICAgICAgICByZWdpc3RlcikKKyAqICAgYnVmZmVyOiAgICBQb2ludGVyIHRvIGRhdGEgdG8gYmUgd3JpdHRlbgorICogICBsZW46ICAgICAgIEhvdyBtYW55IGJ5dGVzIHRvIHdyaXRlCisgKgorICogICBSZXR1cm5zOiAwIG9uIHN1Y2Nlc3MsIG5vdCAwIG9uIGZhaWx1cmUKKyAqLworCitpbnQgaTJjX3dyaXRlKHVjaGFyIGNoaXBfYWRkciwgdWludCBieXRlX2FkZHIsIGludCBhbGVuLCB1Y2hhciAqIGJ1ZmZlciwKKwkgICAgICBpbnQgbGVuKQoreworCXUzMiBvcF9zdGF0dXMgPSBUU0kxMDhfSTJDX1BBUkFNX0VSUjsKKworCS8qIENoZWNrIGZvciB2YWxpZCBJMkMgYWRkcmVzcyAqLworCWlmIChjaGlwX2FkZHIgPD0gMHg3RiAmJiAoYnl0ZV9hZGRyICsgbGVuKSA8PSAoMHgwMSA8PCAoYWxlbiAqIDgpKSkgeworCQl3aGlsZSAobGVuLS0pIHsKKwkJCW9wX3N0YXR1cyA9CisJCQkgICAgaTJjX3dyaXRlX2J5dGUoY2hpcF9hZGRyLCBieXRlX2FkZHIrKywgYnVmZmVyKyspOworCisJCQlpZiAoVFNJMTA4X0kyQ19TVUNDRVNTICE9IG9wX3N0YXR1cykgeworCQkJCURQUklOVCgoIkkyQyB3cml0ZV9ieXRlKCkgZmFpbGVkOiAweCUwMnggKCVkIGxlZnQpXG4iLCBvcF9zdGF0dXMsIGxlbikpOworCisJCQkJYnJlYWs7CisJCQl9CisJCX0KKwl9CisKKwlyZXR1cm4gb3Bfc3RhdHVzOworfQorCisvKiAKKyAqIEkyQyBpbnRlcmZhY2UgZnVuY3Rpb24gYXMgZGVmaW5lZCBpbiAiaW5jbHVkZS9pMmMuaCIuCisgKiBQcm9iZSB0aGUgZ2l2ZW4gSTJDIGNoaXAgYWRkcmVzcyBieSByZWFkaW5nIHNpbmdsZSBieXRlIGZyb20gb2Zmc2V0IDAuCisgKiBSZXR1cm5zIDAgaWYgYSBjaGlwIHJlc3BvbmRlZCwgbm90IDAgb24gZmFpbHVyZS4KKyAqLworCitpbnQgaTJjX3Byb2JlKHVjaGFyIGNoaXApCit7CisJdTMyIHRtcDsKKworCS8qCisJICogVHJ5IHRvIHJlYWQgdGhlIGZpcnN0IGxvY2F0aW9uIG9mIHRoZSBjaGlwLgorCSAqIFRoZSBUc2kxMDggSFcgZG9lc24ndCBzdXBwb3J0IHNlbmRpbmcganVzdCB0aGUgY2hpcCBhZGRyZXNzCisJICogYW5kIGNoZWNrb25nIGZvciBhbiA8QUNLPiBiYWNrLgorCSAqLworCXJldHVybiBpMmNfcmVhZChjaGlwLCAwLCAxLCAoY2hhciAqKSZ0bXAsIDEpOworfQorCisjZW5kaWYJCQkJLyogKENPTkZJR19DT01NQU5EUyAmIENGR19DTURfSTJDKSAqLworI2VuZGlmIC8qIENPTkZJR19UU0kxMDhfSTJDICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL3RzaTEwOF9wY2kuYyBiL2RyaXZlcnMvdHNpMTA4X3BjaS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmYzNzRlZGUKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3RzaTEwOF9wY2kuYwpAQCAtMCwwICsxLDE3OCBAQAorLyoKKyAqIChDKSBDb3B5cmlnaHQgMjAwNCBUdW5kcmEgU2VtaWNvbmR1Y3RvciBDb3JwLgorICogQWxleCBCb3VuaW5lIDxhbGV4YW5kcmViQHR1bmRyYS5jb20+CisgKgorICogU2VlIGZpbGUgQ1JFRElUUyBmb3IgbGlzdCBvZiBwZW9wbGUgd2hvIGNvbnRyaWJ1dGVkIHRvIHRoaXMKKyAqIHByb2plY3QuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mCisgKiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwKKyAqIE1BIDAyMTExLTEzMDcgVVNBCisgKi8KKworLyoKKyAqIFBDSSBpbml0aWFsaXNhdGlvbiBmb3IgdGhlIFRzaTEwOCBFTVUgYm9hcmQuCisgKi8KKworI2luY2x1ZGUgPGNvbmZpZy5oPgorCisjaWZkZWYgQ09ORklHX1RTSTEwOF9QQ0kKKworI2luY2x1ZGUgPGNvbW1vbi5oPgorI2luY2x1ZGUgPHBjaS5oPgorI2luY2x1ZGUgPGFzbS9pby5oPgorI2luY2x1ZGUgPHRzaTEwOC5oPgorCitzdHJ1Y3QgcGNpX2NvbnRyb2xsZXIgbG9jYWxfaG9zZTsKKwordm9pZCB0c2kxMDhfY2xlYXJfcGNpX2Vycm9yKHZvaWQpCit7CisJdTMyIGVycl9zdGF0LCBlcnJfYWRkciwgcGNpX3N0YXQ7CisKKwkvKgorCSAqIFF1aWV0bHkgY2xlYXIgZXJyb3JzIHNpZ25hbGxlZCBhcyByZXN1bHQgb2YgUENJL1ggY29uZmlndXJhdGlvbiByZWFkCisJICogcmVxdWVzdHMuCisJICovCisJLyogUmVhZCBQQiBFcnJvciBMb2cgUmVnaXN0ZXJzICovCisJZXJyX3N0YXQgPSAqKHZvbGF0aWxlIHUzMiAqKShDRkdfVFNJMTA4X0NTUl9CQVNFICsKKwkJCQkgICAgIFRTSTEwOF9QQl9SRUdfT0ZGU0VUICsgUEJfRVJSQ1MpOworCWVycl9hZGRyID0gKih2b2xhdGlsZSB1MzIgKikoQ0ZHX1RTSTEwOF9DU1JfQkFTRSArCisJCQkJICAgICBUU0kxMDhfUEJfUkVHX09GRlNFVCArIFBCX0FFUlIpOworCWlmIChlcnJfc3RhdCAmIFBCX0VSUkNTX0VTKSB7CisJCS8qIENsZWFyIFBDSS9YIGJ1cyBlcnJvcnMgaWYgYXBwbGljYWJsZSAqLworCQlpZiAoKGVycl9hZGRyICYgMHhGRjAwMDAwMCkgPT0gQ0ZHX1BDSV9DRkdfQkFTRSkgeworCQkJLyogQ2xlYXIgZXJyb3IgZmxhZyAqLworCQkJKih1MzIgKikgKENGR19UU0kxMDhfQ1NSX0JBU0UgKworCQkJCSAgVFNJMTA4X1BCX1JFR19PRkZTRVQgKyBQQl9FUlJDUykgPQorCQkJICAgIFBCX0VSUkNTX0VTOworCisJCQkvKiBDbGVhciByZWFkIGVycm9yIHJlcG9ydGVkIGluIFBCX0lTUiAqLworCQkJKih1MzIgKikgKENGR19UU0kxMDhfQ1NSX0JBU0UgKworCQkJCSAgVFNJMTA4X1BCX1JFR19PRkZTRVQgKyBQQl9JU1IpID0KKwkJCSAgICBQQl9JU1JfUEJTX1JEX0VSUjsKKworCQkvKiBDbGVhciBlcnJvcnMgcmVwb3J0ZWQgYnkgUENJIENTUiAoTm9ybWFsbHkgTWFzdGVyIEFib3J0KSAqLworCQkJcGNpX3N0YXQgPSAqKHZvbGF0aWxlIHUzMiAqKShDRkdfVFNJMTA4X0NTUl9CQVNFICsKKwkJCQkJCSAgICAgVFNJMTA4X1BDSV9SRUdfT0ZGU0VUICsKKwkJCQkJCSAgICAgUENJX0NTUik7CisJCQkqKHZvbGF0aWxlIHUzMiAqKShDRkdfVFNJMTA4X0NTUl9CQVNFICsKKwkJCQkJICBUU0kxMDhfUENJX1JFR19PRkZTRVQgKyBQQ0lfQ1NSKSA9CisJCQkgICAgcGNpX3N0YXQ7CisKKwkJCSoodm9sYXRpbGUgdTMyICopKENGR19UU0kxMDhfQ1NSX0JBU0UgKworCQkJCQkgIFRTSTEwOF9QQ0lfUkVHX09GRlNFVCArCisJCQkJCSAgUENJX0lSUF9TVEFUKSA9IFBDSV9JUlBfU1RBVF9QX0NTUjsKKwkJfQorCX0KKworCXJldHVybjsKK30KKwordW5zaWduZWQgaW50IF9fZ2V0X3BjaV9jb25maWdfZHdvcmQodTMyIGFkZHIpCit7CisJdW5zaWduZWQgaW50IHJldHZhbDsKKworCV9fYXNtX18gX192b2xhdGlsZV9fKCIgICAgICAgbHdicnggJTAsMCwlMVxuIgorCQkJICAgICAiMTogICAgIGVpZWlvXG4iCisJCQkgICAgICIyOlxuIgorCQkJICAgICAiLnNlY3Rpb24gLmZpeHVwLFwiYXhcIlxuIgorCQkJICAgICAiMzogICAgIGxpICUwLC0xXG4iCisJCQkgICAgICIgICAgICAgYiAyYlxuIgorCQkJICAgICAiLnNlY3Rpb24gX19leF90YWJsZSxcImFcIlxuIgorCQkJICAgICAiICAgICAgIC5hbGlnbiAyXG4iCisJCQkgICAgICIgICAgICAgLmxvbmcgMWIsM2JcbiIKKwkJCSAgICAgIi50ZXh0IjoiPXIiKHJldHZhbCk6InIiKGFkZHIpKTsKKworCXJldHVybiAocmV0dmFsKTsKK30KKworc3RhdGljIGludCB0c2kxMDhfcmVhZF9jb25maWdfZHdvcmQoc3RydWN0IHBjaV9jb250cm9sbGVyICpob3NlLAorCQkJCSAgICBwY2lfZGV2X3QgZGV2LCBpbnQgb2Zmc2V0LCB1MzIgKiB2YWx1ZSkKK3sKKwlkZXYgJj0gKENGR19QQ0lfQ0ZHX1NJWkUgLSAxKTsKKwlkZXYgfD0gKENGR19QQ0lfQ0ZHX0JBU0UgfCAob2Zmc2V0ICYgMHhmYykpOworCSp2YWx1ZSA9IF9fZ2V0X3BjaV9jb25maWdfZHdvcmQoZGV2KTsKKwlpZiAoMHhGRkZGRkZGRiA9PSAqdmFsdWUpCisJCXRzaTEwOF9jbGVhcl9wY2lfZXJyb3IoKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCB0c2kxMDhfd3JpdGVfY29uZmlnX2R3b3JkKHN0cnVjdCBwY2lfY29udHJvbGxlciAqaG9zZSwKKwkJCQkgICAgIHBjaV9kZXZfdCBkZXYsIGludCBvZmZzZXQsIHUzMiB2YWx1ZSkKK3sKKwlkZXYgJj0gKENGR19QQ0lfQ0ZHX1NJWkUgLSAxKTsKKwlkZXYgfD0gKENGR19QQ0lfQ0ZHX0JBU0UgfCAob2Zmc2V0ICYgMHhmYykpOworCisJb3V0X2xlMzIoKHZvbGF0aWxlIHVuc2lnbmVkICopZGV2LCB2YWx1ZSk7CisKKwlyZXR1cm4gMDsKK30KKwordm9pZCBwY2lfaW5pdF9ib2FyZCh2b2lkKQoreworCXN0cnVjdCBwY2lfY29udHJvbGxlciAqaG9zZSA9IChzdHJ1Y3QgcGNpX2NvbnRyb2xsZXIgKikmbG9jYWxfaG9zZTsKKworCWhvc2UtPmZpcnN0X2J1c25vID0gMDsKKwlob3NlLT5sYXN0X2J1c25vID0gMHhmZjsKKworCXBjaV9zZXRfcmVnaW9uKGhvc2UtPnJlZ2lvbnMgKyAwLAorCQkgICAgICAgQ0ZHX1BDSV9NRU1PUllfQlVTLAorCQkgICAgICAgQ0ZHX1BDSV9NRU1PUllfUEhZUywKKwkJICAgICAgIENGR19QQ0lfTUVNT1JZX1NJWkUsIFBDSV9SRUdJT05fTUVNIHwgUENJX1JFR0lPTl9NRU1PUlkpOworCisJLyogUENJIG1lbW9yeSBzcGFjZSAqLworCXBjaV9zZXRfcmVnaW9uKGhvc2UtPnJlZ2lvbnMgKyAxLAorCQkgICAgICAgQ0ZHX1BDSV9NRU1fQlVTLAorCQkgICAgICAgQ0ZHX1BDSV9NRU1fUEhZUywgQ0ZHX1BDSV9NRU1fU0laRSwgUENJX1JFR0lPTl9NRU0pOworCisJLyogUENJIEkvTyBzcGFjZSAqLworCXBjaV9zZXRfcmVnaW9uKGhvc2UtPnJlZ2lvbnMgKyAyLAorCQkgICAgICAgQ0ZHX1BDSV9JT19CVVMsCisJCSAgICAgICBDRkdfUENJX0lPX1BIWVMsIENGR19QQ0lfSU9fU0laRSwgUENJX1JFR0lPTl9JTyk7CisKKwlob3NlLT5yZWdpb25fY291bnQgPSAzOworCisJcGNpX3NldF9vcHMoaG9zZSwKKwkJICAgIHBjaV9ob3NlX3JlYWRfY29uZmlnX2J5dGVfdmlhX2R3b3JkLAorCQkgICAgcGNpX2hvc2VfcmVhZF9jb25maWdfd29yZF92aWFfZHdvcmQsCisJCSAgICB0c2kxMDhfcmVhZF9jb25maWdfZHdvcmQsCisJCSAgICBwY2lfaG9zZV93cml0ZV9jb25maWdfYnl0ZV92aWFfZHdvcmQsCisJCSAgICBwY2lfaG9zZV93cml0ZV9jb25maWdfd29yZF92aWFfZHdvcmQsCisJCSAgICB0c2kxMDhfd3JpdGVfY29uZmlnX2R3b3JkKTsKKworCXBjaV9yZWdpc3Rlcl9ob3NlKGhvc2UpOworCisJaG9zZS0+bGFzdF9idXNubyA9IHBjaV9ob3NlX3NjYW4oaG9zZSk7CisKKwlkZWJ1ZygiRG9uZSBQQ0kgaW5pdGlhbGl6YXRpb25cbiIpOworCXJldHVybjsKK30KKworI2lmZGVmIENPTkZJR19PRl9GTEFUX1RSRUUKK3ZvaWQKK2Z0X3BjaV9zZXR1cCh2b2lkICpibG9iLCBiZF90ICpiZCkKK3sKKwl1MzIgKnA7CisJaW50IGxlbjsKKworCXAgPSAodTMyICopZnRfZ2V0X3Byb3AoYmxvYiwgIi8iIE9GX1RTSSAiL3BjaUAxMDAwL2J1cy1yYW5nZSIsICZsZW4pOworCWlmIChwICE9IE5VTEwpIHsKKwkJcFswXSA9IGxvY2FsX2hvc2UuZmlyc3RfYnVzbm87CisJCXBbMV0gPSBsb2NhbF9ob3NlLmxhc3RfYnVzbm87CisJfQorCit9CisjZW5kaWYKKworI2VuZGlmCS8qIENPTkZJR19UU0kxMDhfUENJICovCmRpZmYgLS1naXQgYS9pbmNsdWRlLzc0eHhfN3h4LmggYi9pbmNsdWRlLzc0eHhfN3h4LmgKaW5kZXggYTYyODc5OC4uN2NkMmYxMCAxMDA2NDQKLS0tIGEvaW5jbHVkZS83NHh4Xzd4eC5oCisrKyBiL2luY2x1ZGUvNzR4eF83eHguaApAQCAtMTEyLDYgKzExMiw3IEBACiAJQ1BVXzc0MDAsCiAJQ1BVXzc0MTAsCiAJQ1BVXzc0NTAsIENQVV83NDU1LCBDUFVfNzQ1NywKKwlDUFVfNzQ0N0EsIENQVV83NDQ4LAogCUNQVV9VTktOT1dOfSBjcHVfdDsKIAogZXh0ZXJuIGNwdV90IGdldF9jcHVfdHlwZSh2b2lkKTsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXBwYy9nbG9iYWxfZGF0YS5oIGIvaW5jbHVkZS9hc20tcHBjL2dsb2JhbF9kYXRhLmgKaW5kZXggYjczYWY5Ni4uMTY2YWZiZSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tcHBjL2dsb2JhbF9kYXRhLmgKKysrIGIvaW5jbHVkZS9hc20tcHBjL2dsb2JhbF9kYXRhLmgKQEAgLTQ5LDYgKzQ5LDkgQEAKIAl1bnNpZ25lZCBsb25nCXNjY19jbGs7CiAJdW5zaWduZWQgbG9uZwlicmdfY2xrOwogI2VuZGlmCisjaWYgZGVmaW5lZChDT05GSUdfTVBDNzQ0OEhQQzIpCisJdW5zaWduZWQgbG9uZyAgIG1lbV9jbGs7CisjZW5kaWYKICNpZiBkZWZpbmVkKENPTkZJR19NUEM4M1hYKQogCS8qIFRoZXJlIGFyZSBvdGhlciBjbG9ja3MgaW4gdGhlIE1QQzgzWFggKi8KIAl1MzIgY3NiX2NsazsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvY29uZmlncy9tcGM3NDQ4aHBjMi5oIGIvaW5jbHVkZS9jb25maWdzL21wYzc0NDhocGMyLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjRjYzg2YgotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvY29uZmlncy9tcGM3NDQ4aHBjMi5oCkBAIC0wLDAgKzEsNDQ0IEBACisvKgorICogQ29weXJpZ2h0IChjKSAyMDA1IEZyZWVzY2FsZSBTZW1pY29uZHVjdG9yLCBJbmMuCisgKgorICogKEMpIENvcHlyaWdodCAyMDA2CisgKiBBbGV4IEJvdW5pbmUgLCBUdW5kcmEgU2VtaWNvbmR1Y3RvciBDb3JwLgorICogUm95IFphbmcJLCBGcmVlc2NhbGUgQ29ycC4KKyAqCisgKiBTZWUgZmlsZSBDUkVESVRTIGZvciBsaXN0IG9mIHBlb3BsZSB3aG8gY29udHJpYnV0ZWQgdG8gdGhpcworICogcHJvamVjdC4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YKKyAqIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4JIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLAorICogTUEgMDIxMTEtMTMwNyBVU0EKKyAqLworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoKKyAqIGJvYXJkIHNwZWNpZmljIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBmb3IgRnJlZXNjYWxlCisgKiBNUEM3NDQ4SFBDMiAoSGlnaC1QZXJmb3JtYW5jZSBDb21wdXRpbmcgSUkpIChUYWlnYSkgYm9hcmQKKyAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworI2lmbmRlZiBfX0NPTkZJR19ICisjZGVmaW5lIF9fQ09ORklHX0gKKworI3VuZGVmIERFQlVHCisKKy8qIEJvYXJkIENvbmZpZ3VyYXRpb24gRGVmaW5pdGlvbnMgKi8KKy8qIE1QQzc0NDhIUEMyIChIaWdoLVBlcmZvcm1hbmNlIENvbXB1dGluZyBJSSkgKFRhaWdhKSBib2FyZCAqLworCisjZGVmaW5lIENPTkZJR19NUEM3NDQ4SFBDMgorCisjZGVmaW5lIENPTkZJR183NHh4CisjZGVmaW5lIENPTkZJR183NTBGWAkJLyogdGhpcyBvcHRpb24gdG8gZW5hYmxlIGluaXQgb2YgZXh0ZW5kZWQgQkFUcyAqLworI2RlZmluZSBDT05GSUdfQUxUSVZFQwkJLyogdW5kZWYgdG8gZGlzYWJsZSAqLworCisjZGVmaW5lIENGR19CT0FSRF9OQU1FICAgICAgICJNUEM3NDQ4IEhQQyBJSSIKKyNkZWZpbmUgQ09ORklHX0lERU5UX1NUUklORyAgIiBGcmVlc2NhbGUgTVBDNzQ0OCBIUEMgSUkiCisKKyNkZWZpbmUgQ0ZHX09DTl9DTEsgICAgICAgICAxMzMwMDAwMDAJLyogMTMzIE1IeiAqLworI2RlZmluZSBDRkdfQ09ORklHX0JVU19DTEsgICAgICAgICAxMzMwMDAwMDAKKworI2RlZmluZSBDRkdfQ0xLX1NQUkVBRAkJLyogRW5hYmxlIFNwcmVhZC1TcGVjdHJ1bSBDbG9jayBnZW5lcmF0aW9uICovCisKKyN1bmRlZiAgQ09ORklHX0VDQwkJLyogZGlzYWJsZSBFQ0Mgc3VwcG9ydCAqLworCisvKiBCb2FyZC1zcGVjaWZpYyBJbml0aWFsaXphdGlvbiBGdW5jdGlvbnMgdG8gYmUgY2FsbGVkICovCisjZGVmaW5lIENGR19CT0FSRF9BU01fSU5JVAorI2RlZmluZSBDT05GSUdfQk9BUkRfRUFSTFlfSU5JVF9GCisjZGVmaW5lIENPTkZJR19CT0FSRF9FQVJMWV9JTklUX1IKKyNkZWZpbmUgQ09ORklHX01JU0NfSU5JVF9SCisKKy8qIERlZmF1bHQgTUFDIEFkZHJlc3NlcyBmb3Igb24tY2hpcCBHSUdFIENvbnRyb2xsZXIgKi8KKworI2RlZmluZSBDT05GSUdfRVRIQUREUiAgICAgIDAwOjA2OkQyOjAwOjAwOjAxCisKKyNkZWZpbmUgQ09ORklHX0hBU19FVEgxCisjZGVmaW5lIENPTkZJR19FVEgxQUREUiAgICAgMDA6MDY6RDI6MDA6MDA6MDIKKworI2RlZmluZSBDT05GSUdfRU5WX09WRVJXUklURQorCisvKgorICogSGlnaCBMZXZlbCBDb25maWd1cmF0aW9uIE9wdGlvbnMKKyAqIChlYXN5IHRvIGNoYW5nZSkKKyAqLworCisjZGVmaW5lIENPTkZJR19CQVVEUkFURSAgICAxMTUyMDAJLyogY29uc29sZSBiYXVkcmF0ZSA9IDExNTAwMCAqLworCisvKiNkZWZpbmUgQ0ZHX0hVU0hfUEFSU0VSICovCisjdW5kZWYgQ0ZHX0hVU0hfUEFSU0VSCisKKyNkZWZpbmUgQ0ZHX1BST01QVF9IVVNIX1BTMiAgIj4gIgorCisvKiBQYXNzIG9wZW4gZmlybXdhcmUgZmxhdCB0cmVlICovCisjZGVmaW5lIENPTkZJR19PRl9GTEFUX1RSRUUJMQorI2RlZmluZSBDT05GSUdfT0ZfQk9BUkRfU0VUVVAJMQorCisvKiBtYXhpbXVtIHNpemUgb2YgdGhlIGZsYXQgdHJlZSAoOEspICovCisjZGVmaW5lIE9GX0ZMQVRfVFJFRV9NQVhfU0laRQk4MTkyCisKKyNkZWZpbmUgT0ZfQ1BVCQkJIlBvd2VyUEMsNzQ0OEAwIgorI2RlZmluZSBPRl9UU0kJCQkidHNpMTA4QGMwMDAwMDAwIgorI2RlZmluZSBPRl9UQkNMSwkJKGJkLT5iaV9idXNmcmVxIC8gOCkKKyNkZWZpbmUgT0ZfU1RET1VUX1BBVEgJCSIvdHNpMTA4QGMwMDAwMDAwL3NlcmlhbEA3ODA4IgorCisvKgorICogVGhlIGZvbGxvd2luZyBkZWZpbmVzIGxldCB5b3Ugc2VsZWN0IHdoYXQgc2VyaWFsIHlvdSB3YW50IHRvIHVzZQorICogZm9yIHlvdXIgY29uc29sZSBkcml2ZXIuCisgKgorICogd2hhdCB0byBkbzoKKyAqIElmIHlvdSBoYXZlIGhhY2tlZCBhIHNlcmlhbCBjYWJsZSBvbnRvIHRoZSBzZWNvbmQgRFVBUlQgY2hhbm5lbCwgY2hhbmdlIHRoZSBDRkdfRFVBUlQgcG9ydCBmcm9tIDEKKyAqIHRvIDAgYmVsb3cuCisgKgorICovCisKKyNkZWZpbmUgQ09ORklHX0NPTlNfSU5ERVggICAgIDEKKyNkZWZpbmUgQ0ZHX05TMTY1NTAKKyNkZWZpbmUgQ0ZHX05TMTY1NTBfU0VSSUFMCisjZGVmaW5lIENGR19OUzE2NTUwX1JFR19TSVpFICAgIDEKKyNkZWZpbmUgQ0ZHX05TMTY1NTBfQ0xLCQlDRkdfT0NOX0NMSyAqIDgKKworI2RlZmluZSBDRkdfTlMxNjU1MF9DT00xICAgICAgICAoQ0ZHX1RTSTEwOF9DU1JfUlNUX0JBU0UrMHg3ODA4KQorI2RlZmluZSBDRkdfTlMxNjU1MF9DT00yICAgICAgICAoQ0ZHX1RTSTEwOF9DU1JfUlNUX0JBU0UrMHg3QzA4KQorI2RlZmluZSBDRkdfQkFVRFJBVEVfVEFCTEUJeyA5NjAwLCAxOTIwMCwgMzg0MDAsIDU3NjAwLCAxMTUyMDAgfQorCisjZGVmaW5lIENPTkZJR19CT09UREVMQVkgICAgIDMJLyogYXV0b2Jvb3QgYWZ0ZXIgMyBzZWNvbmRzICovCisjZGVmaW5lIENPTkZJR19aRVJPX0JPT1RERUxBWV9DSEVDSworCisjdW5kZWYgQ09ORklHX0JPT1RBUkdTCisvKiNkZWZpbmUgQ09ORklHX1BSRUJPT1QgICJlY2hvO2VjaG8gVHlwZSBcInJ1biBmbGFzaF9uZnNcIiB0byBtb3VudCByb290IGZpbGVzeXN0ZW0gb3ZlciBORlM7ZWNobyIgKi8KKworI2lmIChDT05GSUdfQk9PVERFTEFZID49IDApCisjZGVmaW5lIENPTkZJR19CT09UQ09NTUFORCAgICAgICJ0ZnRwYm9vdCAweDQwMDAwMCB6SW1hZ2UuaW5pdHJkLmVsZjtcCisgc2V0ZW52IGJvb3RhcmdzICQoYm9vdGFyZ3MpICQoYm9vdGFyZ3Nfcm9vdCkgbmZzcm9vdD0kKHNlcnZlcmlwKTokKHJvb3RwYXRoKSBcCisgaXA9JChpcGFkZHIpOiQoc2VydmVyaXApJChib290YXJnc19lbmQpOyAgYm9vdG0gMHg0MDAwMDA7ICIKKworI2RlZmluZSBDT05GSUdfQk9PVEFSR1MgImNvbnNvbGU9dHR5UzAsMTE1MjAwIgorI2VuZGlmCisKKyN1bmRlZiBDT05GSUdfRVhUUkFfRU5WX1NFVFRJTkdTCisKKyNkZWZpbmUgQ09ORklHX1NFUklBTCAgICAiTm8uIDEiCisKKy8qIE5ldHdvcmtpbmcgQ29uZmlndXJhdGlvbiAqLworCisjZGVmaW5lIEtTRUcxQUREUihhKSAgIChhKQkvKiBOZWVkZWQgYnkgdGhlIHJ0bDgxMzkgZHJpdmVyICovCisKKyNkZWZpbmUgQ09ORklHX1RTSTEwOF9FVEgKKyNkZWZpbmUgQ09ORklHX1RTSTEwOF9FVEhfTlVNX1BPUlRTIDIKKworI2RlZmluZSBDT05GSUdfTkVUX01VTFRJCisKKyNkZWZpbmUgQ09ORklHX0lQQUREUiAgICAgICAxNzIuMjcuMjM0LjQ4CisjZGVmaW5lIENPTkZJR19TRVJWRVJJUCAgICAgMTcyLjI3LjIzNC4xMAorI2RlZmluZSBDT05GSUdfTkVUTUFTSyAgICAgIDI1NS4yNTUuMC4wCisjZGVmaW5lIENPTkZJR19HQVRFV0FZSVAgICAgMTcyLjI3LjI1NS4yNTQKKworI2RlZmluZSBDT05GSUdfQk9PVEZJTEUgICAgIHpJbWFnZS5pbml0cmQuZWxmCisjZGVmaW5lIENPTkZJR19MT0FEQUREUiAgICAgMHg0MDAwMDAKKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworCisjZGVmaW5lIENPTkZJR19MT0FEU19FQ0hPICAgMAkvKiBlY2hvIG9mZiBmb3Igc2VyaWFsIGRvd25sb2FkICovCisjZGVmaW5lIENGR19MT0FEU19CQVVEX0NIQU5HRQkvKiBhbGxvdyBiYXVkcmF0ZSBjaGFuZ2VzICovCisKKyN1bmRlZiBDT05GSUdfV0FUQ0hET0cJCS8qIHdhdGNoZG9nIGRpc2FibGVkICovCisKKyNkZWZpbmUgQ09ORklHX0JPT1RQX01BU0sgIChDT05GSUdfQk9PVFBfREVGQVVMVCB8IFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBDT05GSUdfQk9PVFBfQk9PVEZJTEVTSVpFKQorCisjZGVmaW5lIENPTkZJR19DT01NQU5EUyAoQ09ORklHX0NNRF9ERkwgXAorCQl8IENGR19DTURfQVNLRU5WIFwKKwkJfCBDRkdfQ01EX0NBQ0hFIFwKKwkJfCBDRkdfQ01EX1BDSSBcCisJCXwgQ0ZHX0NNRF9JMkMgXAorCQl8IENGR19DTURfU0RSQU0gXAorCQl8IENGR19DTURfRUVQUk9NIFwKKwkJfCBDRkdfQ01EX0ZMQVNIIFwKKwkJfCBDRkdfQ01EX0VOViBcCisJCXwgQ0ZHX0NNRF9CU1AgXAorCQl8IENGR19DTURfREhDUCBcCisJCXwgQ0ZHX0NNRF9QSU5HIFwKKwkJfCBDRkdfQ01EX0RBVEUpCisKKy8qIHRoaXMgbXVzdCBiZSBpbmNsdWRlZCBBRlRFUiB0aGUgZGVmaW5pdGlvbiBvZiBDT05GSUdfQ09NTUFORFMgKGlmIGFueSkgKi8KKyNpbmNsdWRlIDxjbWRfY29uZmRlZnMuaD4KKworLypzZXQgZGF0ZSBpbiB1LWJvb3QqLworI2RlZmluZSBDT05GSUdfUlRDX000OFQzNUEKKyNkZWZpbmUgQ0ZHX05WUkFNX0JBU0VfQUREUiAweGZjMDAwMDAwCisjZGVmaW5lIENGR19OVlJBTV9TSVpFIDB4ODAwMAorLyoKKyAqIE1pc2NlbGxhbmVvdXMgY29uZmlndXJhYmxlIG9wdGlvbnMKKyAqLworI2RlZmluZSBDT05GSUdfVkVSU0lPTl9WQVJJQUJMRSAxCisjZGVmaW5lIENPTkZJR19UU0kxMDhfSTJDCisKKyNkZWZpbmUgQ0ZHX0kyQ19FRVBST01fQUREUiAgICAgIDB4NTAJLyogSTJDIEVFUFJPTSBwYWdlIDEgKi8KKyNkZWZpbmUgQ0ZHX0kyQ19FRVBST01fQUREUl9MRU4gICAgIDEJLyogQnl0ZXMgb2YgYWRkcmVzcyAqLworCisjZGVmaW5lIENGR19MT05HSEVMUAkJLyogdW5kZWYgdG8gc2F2ZSBtZW1vcnkgKi8KKyNkZWZpbmUgQ0ZHX1BST01QVAkiPT4gIgkvKiBNb25pdG9yIENvbW1hbmQgUHJvbXB0ICovCisKKyNpZiAoQ09ORklHX0NPTU1BTkRTICYgQ0ZHX0NNRF9LR0RCKQorI2RlZmluZSBDRkdfQ0JTSVpFICAgICAgICAgICAgICAgMTAyNAkvKiBDb25zb2xlIEkvTyBCdWZmZXIgU2l6ZSAqLworI2RlZmluZSBDT05GSUdfS0dEQl9CQVVEUkFURSAgIDExNTIwMAkvKiBzcGVlZCB0byBydW4ga2dkYiBzZXJpYWwgcG9ydCBhdCAqLworI2Vsc2UKKyNkZWZpbmUgQ0ZHX0NCU0laRSAgICAgICAgICAgICAgIDI1NgkvKiBDb25zb2xlIEkvTyBCdWZmZXIgU2l6ZSAqLworI2VuZGlmCisKKyNkZWZpbmUgQ0ZHX1BCU0laRSAoQ0ZHX0NCU0laRStzaXplb2YoQ0ZHX1BST01QVCkrMTYpCS8qIFByaW50IEJ1ZmZlciBTaXplICovCisjZGVmaW5lIENGR19NQVhBUkdTICAgICAxNgkvKiBtYXggbnVtYmVyIG9mIGNvbW1hbmQgYXJncyAqLworI2RlZmluZSBDRkdfQkFSR1NJWkUgICAgQ0ZHX0NCU0laRQkvKiBCb290IEFyZ3VtZW50IEJ1ZmZlciBTaXplICovCisKKy8qCisjZGVmaW5lIENGR19EUkFNX1RFU1QKKyAqIERSQU0gdGVzdHMKKyAqICAgQ0ZHX0RSQU1fVEVTVCAtIGVuYWJsZXMgdGhlIGZvbGxvd2luZyB0ZXN0cy4KKyAqCisgKiAgIENGR19EUkFNX1RFU1RfREFUQSAtIEVuYWJsZXMgdGVzdCBmb3Igc2hvcnRlZCBvciBvcGVuIGRhdGEgbGluZXMKKyAqCQkJICBFbnZpcm9ubWVudCB2YXJpYWJsZSAndGVzdF9kcmFtX2RhdGEnIG11c3QgYmUKKyAqCQkJICBzZXQgdG8gJ3knLgorICogICBDRkdfRFJBTV9URVNUX0FERFJFU1MgLSBFbmFibGVzIHRlc3QgdG8gdmVyaWZ5IHRoYXQgZWFjaCB3b3JkIGlzIHVuaXF1ZWx5CisgKgkJCSAgYWRkcmVzc2FibGUuIEVudmlyb25tZW50IHZhcmlhYmxlCisgKgkJCSAgJ3Rlc3RfZHJhbV9hZGRyZXNzJyBtdXN0IGJlIHNldCB0byAneScuCisgKiAgIENGR19EUkFNX1RFU1RfV0FMSyAtIEVuYWJsZXMgdGVzdCBhIDY0LWJpdCB3YWxraW5nIG9uZXMgcGF0dGVybiB0ZXN0LgorICoJCQkgIFRoaXMgdGVzdCB0YWtlcyBhYm91dCA2IG1pbnV0ZXMgdG8gdGVzdCA2NCBNQi4KKyAqCQkJICBFbnZpcm9ubWVudCB2YXJpYWJsZSAndGVzdF9kcmFtX3dhbGsnIG11c3QgYmUKKyAqCQkJICBzZXQgdG8gJ3knLgorICovCisjdW5kZWYgQ0ZHX0RSQU1fVEVTVAorI2RlZmluZSBDRkdfTUVNVEVTVF9TVEFSVCAgICAgICAweDAwNDAwMDAwCS8qIG1lbXRlc3Qgd29ya3Mgb24gKi8KKyNkZWZpbmUgQ0ZHX01FTVRFU1RfRU5EICAgICAgICAgMHgwN2MwMDAwMAkvKiA0IC4uLiAxMjQgTUIgaW4gRFJBTSAqLworI2lmIGRlZmluZWQoQ0ZHX0RSQU1fVEVTVCkKKyNkZWZpbmUgQ0ZHX0RSQU1fVEVTVF9EQVRBCisjZGVmaW5lIENGR19EUkFNX1RFU1RfQUREUkVTUworI2RlZmluZSBDRkdfRFJBTV9URVNUX1dBTEsKKyNlbmRpZgkJCQkvKiBDRkdfRFJBTV9URVNUICovCisKKyNkZWZpbmUgQ0ZHX0xPQURfQUREUiAgICAgICAgICAgMHgwMDQwMDAwMAkvKiBkZWZhdWx0IGxvYWQgYWRkcmVzcyAqLworCisjZGVmaW5lIENGR19IWiAgICAgICAgICAgICAgICAgIDEwMDAJLyogZGVjciBmcmVxOiAxbXMgdGlja3MgKi8KKworLyoKKyAqIExvdyBMZXZlbCBDb25maWd1cmF0aW9uIFNldHRpbmdzCisgKiAoYWRkcmVzcyBtYXBwaW5ncywgcmVnaXN0ZXIgaW5pdGlhbCB2YWx1ZXMsIGV0Yy4pCisgKiBZb3Ugc2hvdWxkIGtub3cgd2hhdCB5b3UgYXJlIGRvaW5nIGlmIHlvdSBtYWtlIGNoYW5nZXMgaGVyZS4KKyAqLworCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKiBEZWZpbml0aW9ucyBmb3IgaW5pdGlhbCBzdGFjayBwb2ludGVyIGFuZCBkYXRhIGFyZWEKKyAqLworCisvKgorICogV2hlbiBsb2NraW5nIGRhdGEgaW4gY2FjaGUgeW91IHNob3VsZCBwb2ludCB0aGUgQ0ZHX0lOSVRfUkFNX0FERFJFU1MKKyAqIFRvIGFuIHVudXNlZCBtZW1vcnkgcmVnaW9uLiBUaGUgc3RhY2sgd2lsbCByZW1haW4gaW4gY2FjaGUgdW50aWwgUkFNCisgKiBpcyBpbml0aWFsaXplZAorKi8KKyN1bmRlZiAgQ0ZHX0lOSVRfUkFNX0xPQ0sKKyNkZWZpbmUgQ0ZHX0lOSVRfUkFNX0FERFIgICAweDA3ZDAwMDAwCS8qIHVudXNlZCBtZW1vcnkgcmVnaW9uICovCisjZGVmaW5lIENGR19JTklUX1JBTV9FTkQgMHg0MDAwCS8qIGxhcmdlciBzcGFjZSAtIHdlIGhhdmUgU0RSQU0gaW5pdGlhbGl6ZWQgKi8KKworI2RlZmluZSBDRkdfR0JMX0RBVEFfU0laRSAgIDEyOAkvKiBzaXplIGluIGJ5dGVzIHJlc2VydmVkIGZvciBpbml0IGRhdGEgKi8KKyNkZWZpbmUgQ0ZHX0dCTF9EQVRBX09GRlNFVCAoQ0ZHX0lOSVRfUkFNX0VORCAtIENGR19HQkxfREFUQV9TSVpFKQorCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKiBTdGFydCBhZGRyZXNzZXMgZm9yIHRoZSBmaW5hbCBtZW1vcnkgY29uZmlndXJhdGlvbgorICogKFNldCB1cCBieSB0aGUgc3RhcnR1cCBjb2RlKQorICogUGxlYXNlIG5vdGUgdGhhdCBDRkdfU0RSQU1fQkFTRSBfbXVzdF8gc3RhcnQgYXQgMAorICovCisKKyNkZWZpbmUgQ0ZHX1NEUkFNX0JBU0UgICAgICAgMHgwMDAwMDAwMAkvKiBmaXJzdCAyNTYgTUIgb2YgU0RSQU0gKi8KKyNkZWZpbmUgQ0ZHX1NEUkFNMV9CQVNFICAgICAgMHgxMDAwMDAwMAkvKiBuZXh0IDI1Nk1CIG9mIFNEUkFNICovCisKKyNkZWZpbmUgQ0ZHX1NEUkFNMl9CQVNFICAgICAgMHg0MDAwMDAwMAkvKiBiZWdpbm5pbmcgb2Ygbm9uLWNhY2hlYWJsZSBhbGlhcyBmb3IgU0RSQU0gLSBmaXJzdCAyNTZNQiAqLworI2RlZmluZSBDRkdfU0RSQU0zX0JBU0UgICAgICAweDUwMDAwMDAwCS8qIG5leHQgTm9uLUNhY2hlYWJsZSAyNTZNQiBvZiBTRFJBTSAqLworCisjZGVmaW5lIENGR19QQ0lfUEZNX0JBU0UgICAgIDB4ODAwMDAwMDAJLyogUHJlZmV0Y2hhYmxlIChjYWNoZWFibGUpIFBDSS9YIFBGTSBhbmQgU0RSQU0gT0NOICgxMjhNQisxMjhNQikgKi8KKworI2RlZmluZSBDRkdfUENJX01FTTMyX0JBU0UgICAweEUwMDAwMDAwCS8qIE5vbi1DYWNoZWFibGUgUENJL1ggTUVNIGFuZCBTRFJBTSBPQ04gKDEyOE1CKzEyOE1CKSAqLworCisjZGVmaW5lIENGR19NSVNDX1JFR0lPTl9CQVNFIDB4ZjAwMDAwMDAJLyogQmFzZSBBZGRyZXNzIGZvciAoUENJL1ggKyBGbGFzaCkgcmVnaW9uICovCisKKyNkZWZpbmUgQ0ZHX0ZMQVNIX0JBU0UgICAgICAgMHhmZjAwMDAwMAkvKiBCYXNlIEFkZHJlc3Mgb2YgRmxhc2ggZGV2aWNlICovCisjZGVmaW5lIENGR19GTEFTSF9CQVNFMiAgICAgIDB4ZmUwMDAwMDAJLyogQWx0ZXJuYXRlIEZsYXNoIEJhc2UgQWRkcmVzcyAqLworCisjZGVmaW5lIENPTkZJR19WRVJZX0JJR19SQU0JLyogd2Ugd2lsbCB1c2UgdXAgdG8gMjU2TSBtZW1vcnkgZm9yIGNhdXNlIHdlIGFyZSBzaG9ydCBvZiBCQVRTICovCisKKyNkZWZpbmUgUENJMF9JT19CQVNFX0JPT1RNICAgMHhmZDAwMDAwMAorCisjZGVmaW5lIENGR19SRVNFVF9BRERSRVNTICAweDNmZmZmZjAwCisjZGVmaW5lIENGR19NT05JVE9SX0xFTiAgICAoMjU2IDw8IDEwKQkvKiBSZXNlcnZlIDI1NiBrQiBmb3IgTW9uaXRvciAqLworI2RlZmluZSBDRkdfTU9OSVRPUl9CQVNFICAgVEVYVF9CQVNFCS8qIHUtYm9vdCBjb2RlIGJhc2UgKi8KKyNkZWZpbmUgQ0ZHX01BTExPQ19MRU4gICAgICgyNTYgPDwgMTApCS8qIFJlc2VydmUgMjU2IGtCIGZvciBtYWxsb2MgKi8KKworLyogUGVyaXBoZXJhbCBEZXZpY2Ugc2VjdGlvbiAqLworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogUmVzb3VyY2VzIG9uIHRoZSBUc2kxMDgKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisjZGVmaW5lIENGR19UU0kxMDhfQ1NSX1JTVF9CQVNFIDB4QzAwMDAwMDAJLyogVHNpMTA4IENTUiBiYXNlIGFmdGVyIHJlc2V0ICovCisjZGVmaW5lIENGR19UU0kxMDhfQ1NSX0JBU0UgICAgIENGR19UU0kxMDhfQ1NSX1JTVF9CQVNFCS8qIFJ1bnRpbWUgVHNpMTA4IENTUiBiYXNlICovCisKKyNkZWZpbmUgRU5BQkxFX1BDSV9DU1JfQkFSCS8qIGVuYWJsZXMgYWNjZXNzIHRvIFRzaTEwOCBDU1JzIGZyb20gdGhlIFBDSS9YIGJ1cyAqLworCisjdW5kZWYgIERJU0FCTEVfUEJNCisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqIFBDSSBzdHVmZgorICotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICovCisKKyNkZWZpbmUgQ09ORklHX1BDSQkJLyogaW5jbHVkZSBwY2kgc3VwcG9ydCAqLworI2RlZmluZSBDT05GSUdfVFNJMTA4X1BDSQkvKiBpbmNsdWRlIHRzaTEwOCBwY2kgc3VwcG9ydCAqLworCisjZGVmaW5lIFBDSV9IT1NUX0FEQVBURVIgIDAJLyogY29uZmlndXJlIGFzIHBjaSBhZGFwdGVyICovCisjZGVmaW5lIFBDSV9IT1NUX0ZPUkNFICAgIDEJLyogY29uZmlndXJlIGFzIHBjaSBob3N0ICovCisjZGVmaW5lIFBDSV9IT1NUX0FVVE8gICAgIDIJLyogZGV0ZWN0ZWQgdmlhIGFyYml0ZXIgZW5hYmxlICovCisKKyNkZWZpbmUgQ09ORklHX1BDSV9IT1NUIFBDSV9IT1NUX0ZPUkNFCS8qIHNlbGVjdCBwY2kgaG9zdCBmdW5jdGlvbiAqLworI2RlZmluZSBDT05GSUdfUENJX1BOUAkJLyogZG8gcGNpIHBsdWctYW5kLXBsYXkgKi8KKworLyogUENJIE1FTU9SWSBNQVAgc2VjdGlvbiAqLworCisvKiBQQ0kgdmlldyBvZiBTeXN0ZW0gTWVtb3J5ICovCisjZGVmaW5lIENGR19QQ0lfTUVNT1JZX0JVUyAgICAgIDB4MDAwMDAwMDAKKyNkZWZpbmUgQ0ZHX1BDSV9NRU1PUllfUEhZUyAgICAgMHgwMDAwMDAwMAorI2RlZmluZSBDRkdfUENJX01FTU9SWV9TSVpFICAgICAweDgwMDAwMDAwCQorCisvKiBQQ0kgTWVtb3J5IFNwYWNlICovCisjZGVmaW5lIENGR19QQ0lfTUVNX0JVUyAgICAgICAgIChDRkdfUENJX01FTV9QSFlTKQorI2RlZmluZSBDRkdfUENJX01FTV9QSFlTICAgICAgICAoQ0ZHX1BDSV9NRU0zMl9CQVNFKQkvL0NGR19QQ0lfTUVNMzJfQkFTRSA9IDB4RTAwMDAwMDAKKyNkZWZpbmUgQ0ZHX1BDSV9NRU1fU0laRSAgICAgICAgMHgxMDAwMDAwMAkvKiAyNTYgTUIgc3BhY2UgZm9yIFBDSS9YIE1lbSArIFNEUkFNIE9DTiAqLworCisvKiBQQ0kgSS9PIFNwYWNlICovCisjZGVmaW5lIENGR19QQ0lfSU9fQlVTICAgICAgICAgIDB4MDAwMDAwMDAKKyNkZWZpbmUgQ0ZHX1BDSV9JT19QSFlTICAgICAgICAgMHhmYTAwMDAwMAkvKiBDaGFuZ2VkIGZyb20gZmQwMDAwMDAgKi8KKworI2RlZmluZSBDRkdfUENJX0lPX1NJWkUgICAgICAgICAweDAxMDAwMDAwCS8qIDE2TUIgKi8KKworI2RlZmluZSBfSU9fQkFTRQkJMHgwMDAwMDAwMAkvKiBwb2ludHMgdG8gUENJIEkvTyBzcGFjZSAgICAgICovCisKKy8qIFBDSSBDb25maWcgU3BhY2UgbWFwcGluZyAqLworI2RlZmluZSBDRkdfUENJX0NGR19CQVNFCTB4ZmIwMDAwMDAJLyogQ2hhbmdlZCBmcm9tIEZFMDAwMDAwICovCisjZGVmaW5lIENGR19QQ0lfQ0ZHX1NJWkUJMHgwMTAwMDAwMAkvKiAxNk1CICovCisKKyNkZWZpbmUgQ0ZHX0lCQVQwVSAgMHhGRTAwMDNGRgorI2RlZmluZSBDRkdfSUJBVDBMICAweEZFMDAwMDAyCisKKyNkZWZpbmUgQ0ZHX0lCQVQxVSAgMHgwMDAwN0ZGRgorI2RlZmluZSBDRkdfSUJBVDFMICAweDAwMDAwMDEyCisKKyNkZWZpbmUgQ0ZHX0lCQVQyVSAgMHg4MDAwN0ZGRgorI2RlZmluZSBDRkdfSUJBVDJMICAweDgwMDAwMDIyCisKKyNkZWZpbmUgQ0ZHX0lCQVQzVSAgMHgwMDAwMDAwMAorI2RlZmluZSBDRkdfSUJBVDNMICAweDAwMDAwMDAwCisKKyNkZWZpbmUgQ0ZHX0lCQVQ0VSAgMHgwMDAwMDAwMAorI2RlZmluZSBDRkdfSUJBVDRMICAweDAwMDAwMDAwCisKKyNkZWZpbmUgQ0ZHX0lCQVQ1VSAgMHgwMDAwMDAwMAorI2RlZmluZSBDRkdfSUJBVDVMICAweDAwMDAwMDAwCisKKyNkZWZpbmUgQ0ZHX0lCQVQ2VSAgMHgwMDAwMDAwMAorI2RlZmluZSBDRkdfSUJBVDZMICAweDAwMDAwMDAwCisKKyNkZWZpbmUgQ0ZHX0lCQVQ3VSAgMHgwMDAwMDAwMAorI2RlZmluZSBDRkdfSUJBVDdMICAweDAwMDAwMDAwCisKKyNkZWZpbmUgQ0ZHX0RCQVQwVSAgMHhFMDAwM0ZGRgorI2RlZmluZSBDRkdfREJBVDBMICAweEUwMDAwMDJBCisKKyNkZWZpbmUgQ0ZHX0RCQVQxVSAgMHgwMDAwN0ZGRgorI2RlZmluZSBDRkdfREJBVDFMICAweDAwMDAwMDEyCisKKyNkZWZpbmUgQ0ZHX0RCQVQyVSAgMHgwMDAwMDAwMAorI2RlZmluZSBDRkdfREJBVDJMICAweDAwMDAwMDAwCisKKyNkZWZpbmUgQ0ZHX0RCQVQzVSAgMHhDMDAwMDAwMworI2RlZmluZSBDRkdfREJBVDNMICAweEMwMDAwMDJBCisKKyNkZWZpbmUgQ0ZHX0RCQVQ0VSAgMHgwMDAwMDAwMAorI2RlZmluZSBDRkdfREJBVDRMICAweDAwMDAwMDAwCisKKyNkZWZpbmUgQ0ZHX0RCQVQ1VSAgMHgwMDAwMDAwMAorI2RlZmluZSBDRkdfREJBVDVMICAweDAwMDAwMDAwCisKKyNkZWZpbmUgQ0ZHX0RCQVQ2VSAgMHgwMDAwMDAwMAorI2RlZmluZSBDRkdfREJBVDZMICAweDAwMDAwMDAwCisKKyNkZWZpbmUgQ0ZHX0RCQVQ3VSAgMHgwMDAwMDAwMAorI2RlZmluZSBDRkdfREJBVDdMICAweDAwMDAwMDAwCisKKy8qIEkyQyBhZGRyZXNzZXMgZm9yIHRoZSB0d28gRElNTSBTUEQgY2hpcHMgKi8KKyNkZWZpbmUgRElNTTBfSTJDX0FERFIgICAgMHg1MQorI2RlZmluZSBESU1NMV9JMkNfQUREUiAgICAweDUyCisKKy8qCisgKiBGb3IgYm9vdGluZyBMaW51eCwgdGhlIGJvYXJkIGluZm8gYW5kIGNvbW1hbmQgbGluZSBkYXRhCisgKiBoYXZlIHRvIGJlIGluIHRoZSBmaXJzdCA4IE1CIG9mIG1lbW9yeSwgc2luY2UgdGhpcyBpcworICogdGhlIG1heGltdW0gbWFwcGVkIGJ5IHRoZSBMaW51eCBrZXJuZWwgZHVyaW5nIGluaXRpYWxpemF0aW9uLgorICovCisjZGVmaW5lIENGR19CT09UTUFQU1ogICAgKDg8PDIwKQkvKiBJbml0aWFsIE1lbW9yeSBtYXAgZm9yIExpbnV4ICovCisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqIEZMQVNIIG9yZ2FuaXphdGlvbgorICovCisjZGVmaW5lIENGR19NQVhfRkxBU0hfQkFOS1MgIDEJLyogRmxhc2ggY2FuIGJlIGF0IG9uZSBvZiB0d28gYWRkcmVzc2VzICovCisjZGVmaW5lIEZMQVNIX0JBTktfU0laRSAgICAgIDB4MDEwMDAwMDAJLyogMTYgTUIgVG90YWwgKi8KKyNkZWZpbmUgQ0ZHX0ZMQVNIX0JBTktTX0xJU1Qge0NGR19GTEFTSF9CQVNFLCBDRkdfRkxBU0hfQkFTRTJ9CisKKyNkZWZpbmUgQ0ZHX0ZMQVNIX0NGSV9EUklWRVIKKyNkZWZpbmUgQ0ZHX0ZMQVNIX0NGSQorI2RlZmluZSBDRkdfRkxBU0hfQ0ZJX1NXQVAKKworI2RlZmluZSBQSFlTX0ZMQVNIX1NJWkUgICAgIDB4MDEwMDAwMDAKKyNkZWZpbmUgQ0ZHX01BWF9GTEFTSF9TRUNUICAoMTI4KQorCisjZGVmaW5lIENGR19FTlZfSVNfSU5fTlZSQU0KKyNkZWZpbmUgQ0ZHX0VOVl9BRERSICAgICAgICAgMHhGQzAwMDAwMAorCisjZGVmaW5lIENGR19FTlZfT0ZGU0VUICAgICAgMHgwMDAwMDAwMAkvKiBPZmZzZXQgb2YgRW52aXJvbm1lbnQgU2VjdG9yICovCisjZGVmaW5lIENGR19FTlZfU0laRSAgICAgICAgMHgwMDAwMDQwMAkvKiBUb3RhbCBTaXplIG9mIEVudmlyb25tZW50IFNwYWNlICovCisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqIENhY2hlIENvbmZpZ3VyYXRpb24KKyAqLworI2RlZmluZSBDRkdfQ0FDSEVMSU5FX1NJWkUgICAzMgkvKiBGb3IgYWxsIE1QQzc0eHggQ1BVcyAqLworI2lmIChDT05GSUdfQ09NTUFORFMgJiBDRkdfQ01EX0tHREIpCisjZGVmaW5lIENGR19DQUNIRUxJTkVfU0hJRlQgICA1CS8qIGxvZyBiYXNlIDIgb2YgdGhlIGFib3ZlIHZhbHVlICovCisjZW5kaWYKKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICogTDJDUiBzZXR1cCAtLSBtYWtlIHN1cmUgdGhpcyBpcyByaWdodCBmb3IgeW91ciBib2FyZCEKKyAqIGxvb2sgaW4gaW5jbHVkZS9tcGM3NHh4LmggZm9yIHRoZSBkZWZpbmVzIHVzZWQgaGVyZQorICovCisjdW5kZWYgQ0ZHX0wyCisKKyNkZWZpbmUgTDJfSU5JVCAgMAorI2RlZmluZSBMMl9FTkFCTEUgIChMMl9JTklUIHwgTDJDUl9MMkUpCisKKy8qCisgKiBJbnRlcm5hbCBEZWZpbml0aW9ucworICoKKyAqIEJvb3QgRmxhZ3MKKyAqLworI2RlZmluZSBCT09URkxBR19DT0xEICAgIDB4MDEJLyogTm9ybWFsIFBvd2VyLU9uOiBCb290IGZyb20gRkxBU0ggKi8KKyNkZWZpbmUgQk9PVEZMQUdfV0FSTSAgICAweDAyCS8qIFNvZnR3YXJlIHJlYm9vdCAqLworI2RlZmluZSBDRkdfRVhDRVBUSU9OX0FGVEVSX1JFTE9DQVRFCisjZGVmaW5lIENGR19TRVJJQUxfSEFOR19JTl9FWENFUFRJT04KKyNlbmRpZgkJCQkvKiBfX0NPTkZJR19IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL3RzaTEwOC5oIGIvaW5jbHVkZS90c2kxMDguaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wNzJkYWEwCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS90c2kxMDguaApAQCAtMCwwICsxLDIyMSBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiAoQykgQ29weXJpZ2h0IDIwMDM7ICBUdW5kcmEgU2VtaWNvbmR1Y3RvciBDb3JwLgorICogKEMpIENvcHlyaWdodCAyMDA2OyAgRnJlZXNjYWxlIFNlbWljb25kdWN0b3IgQ29ycC4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YKKyAqIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLAorICogTUEgMDIxMTEtMTMwNyBVU0EKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworLyoKKyAqIEZJTEVOQU1FOiB0c2kxMDguaAorICoKKyAqIE9yaWdpbmF0b3I6IEFsZXggQm91bmluZQorICoKKyAqIERFU0NSSVBUSU9OOgorICogQ29tbW9uIGRlZmluaXRpb25zIGZvciB0aGUgVHVuZHJhIFRzaTEwOCBicmlkZ2UgY2hpcAorICoKKyAqLworCisjaWZuZGVmIF9UU0kxMDhfSF8KKyNkZWZpbmUgX1RTSTEwOF9IXworCisjZGVmaW5lIFRTSTEwOF9ITFBfUkVHX09GRlNFVCAoMHgwMDAwKQorI2RlZmluZSBUU0kxMDhfUENJX1JFR19PRkZTRVQgKDB4MTAwMCkKKyNkZWZpbmUgVFNJMTA4X0NMS19SRUdfT0ZGU0VUICgweDIwMDApCisjZGVmaW5lIFRTSTEwOF9QQl9SRUdfT0ZGU0VUICAoMHgzMDAwKQorI2RlZmluZSBUU0kxMDhfU0RfUkVHX09GRlNFVCAgKDB4NDAwMCkKKyNkZWZpbmUgVFNJMTA4X01QSUNfUkVHX09GRlNFVCAgKDB4NzQwMCkKKworI2RlZmluZSBQQl9JRCAgICAgICAgICAgICAgICgweDAwMCkKKyNkZWZpbmUgUEJfUlNSICAgICAgICAgICAgICAoMHgwMDQpCisjZGVmaW5lIFBCX0JVU19NU19TRUxFQ1QgICAgKDB4MDA4KQorI2RlZmluZSBQQl9JU1IgICAgICAgICAgICAgICgweDAwQykKKyNkZWZpbmUgUEJfQVJCX0NUUkwgICAgICAgICAoMHgwMTgpCisjZGVmaW5lIFBCX1BWVF9DVFJMMiAgICAgICAgKDB4MDM0KQorI2RlZmluZSBQQl9TQ1IgICAgICAgICAgICAgICgweDQwMCkKKyNkZWZpbmUgUEJfRVJSQ1MgICAgICAgICAgICAoMHg0MDQpCisjZGVmaW5lIFBCX0FFUlIgICAgICAgICAgICAgKDB4NDA4KQorI2RlZmluZSBQQl9SRUdfQkFSICAgICAgICAgICgweDQxMCkKKyNkZWZpbmUgUEJfT0NOX0JBUjEgICAgICAgICAoMHg0MTQpCisjZGVmaW5lIFBCX09DTl9CQVIyICAgICAgICAgKDB4NDE4KQorI2RlZmluZSBQQl9TRFJBTV9CQVIxICAgICAgICgweDQxQykKKyNkZWZpbmUgUEJfU0RSQU1fQkFSMiAgICAgICAoMHg0MjApCisjZGVmaW5lIFBCX01DUiAgICAgICAgICAgICAgKDB4QzAwKQorI2RlZmluZSBQQl9NQ01EICAgICAgICAgICAgICgweEMwNCkKKworI2RlZmluZSBITFBfQjBfQUREUiAgICAgICAgICgweDAwMCkKKyNkZWZpbmUgSExQX0IxX0FERFIgICAgICAgICAoMHgwMTApCisjZGVmaW5lIEhMUF9CMl9BRERSICAgICAgICAgKDB4MDIwKQorI2RlZmluZSBITFBfQjNfQUREUiAgICAgICAgICgweDAzMCkKKworI2RlZmluZSBITFBfQjBfTUFTSyAgICAgICAgICgweDAwNCkKKyNkZWZpbmUgSExQX0IxX01BU0sgICAgICAgICAoMHgwMTQpCisjZGVmaW5lIEhMUF9CMl9NQVNLICAgICAgICAgKDB4MDI0KQorI2RlZmluZSBITFBfQjNfTUFTSyAgICAgICAgICgweDAzNCkKKworI2RlZmluZSBITFBfQjBfQ1RSTDAgICAgICAgICgweDAwOCkKKyNkZWZpbmUgSExQX0IxX0NUUkwwICAgICAgICAoMHgwMTgpCisjZGVmaW5lIEhMUF9CMl9DVFJMMCAgICAgICAgKDB4MDI4KQorI2RlZmluZSBITFBfQjNfQ1RSTDAgICAgICAgICgweDAzOCkKKworI2RlZmluZSBITFBfQjBfQ1RSTDEgICAgICAgICgweDAwQykKKyNkZWZpbmUgSExQX0IxX0NUUkwxICAgICAgICAoMHgwMUMpCisjZGVmaW5lIEhMUF9CMl9DVFJMMSAgICAgICAgKDB4MDJDKQorI2RlZmluZSBITFBfQjNfQ1RSTDEgICAgICAgICgweDAzQykKKworI2RlZmluZSBQQ0lfQ1NSICAgICAgICAgICAgICgweDAwNCkKKyNkZWZpbmUgUENJX1AyT19CQVIwICAgICAgICAoMHgwMTApCisjZGVmaW5lIFBDSV9QMk9fQkFSMF9VUFBFUiAgKDB4MDE0KQorI2RlZmluZSBQQ0lfUDJPX0JBUjIgICAgICAgICgweDAxOCkKKyNkZWZpbmUgUENJX1AyT19CQVIyX1VQUEVSICAoMHgwMUMpCisjZGVmaW5lIFBDSV9QMk9fQkFSMyAgICAgICAgKDB4MDIwKQorI2RlZmluZSBQQ0lfUDJPX0JBUjNfVVBQRVIgICgweDAyNCkKKworI2RlZmluZSBQQ0lfTUlTQ19DU1IgICAgICAgICgweDA0MCkKKyNkZWZpbmUgUENJX1AyT19QQUdFX1NJWkVTICAoMHgwNEMpCisKKyNkZWZpbmUgUENJX1BDSVhfU1RBVCAgICAgICAoMHgwRjQpCisKKyNkZWZpbmUgUENJX0lSUF9TVEFUICAgICAgICAoMHgxODQpCisKKyNkZWZpbmUgUENJX1BGQUJfQkFSMCAgICAgICAoMHgyMDQpCisjZGVmaW5lIFBDSV9QRkFCX0JBUjBfVVBQRVIgKDB4MjA4KQorI2RlZmluZSBQQ0lfUEZBQl9JTyAgICAgICAgICgweDIwQykKKyNkZWZpbmUgUENJX1BGQUJfSU9fVVBQRVIgICAoMHgyMTApCisKKyNkZWZpbmUgUENJX1BGQUJfTUVNMzIgICAgICAgICAgKDB4MjE0KQorI2RlZmluZSBQQ0lfUEZBQl9NRU0zMl9SRU1BUCAgICAoMHgyMTgpCisjZGVmaW5lIFBDSV9QRkFCX01FTTMyX01BU0sgICAgICgweDIxQykKKworI2RlZmluZSBDR19QTEwwX0NUUkwwICAgICAgICgweDIxMCkKKyNkZWZpbmUgQ0dfUExMMF9DVFJMMSAgICAgICAoMHgyMTQpCisjZGVmaW5lIENHX1BMTDFfQ1RSTDAgICAgICAgKDB4MjIwKQorI2RlZmluZSBDR19QTEwxX0NUUkwxICAgICAgICgweDIyNCkKKyNkZWZpbmUgQ0dfUFdSVVBfU1RBVFVTICAgICAoMHgyMzQpCisKKyNkZWZpbmUgTVBJQ19DU1IobikgKDB4MzBDICsgKG4gKiAweDQwKSkKKworI2RlZmluZSBTRF9DVFJMICAgICAgICAgKDB4MDAwKQorI2RlZmluZSBTRF9TVEFUVVMgICAgICAgKDB4MDA0KQorI2RlZmluZSBTRF9USU1JTkcgICAgICAgKDB4MDA4KQorI2RlZmluZSBTRF9SRUZSRVNIICAgICAgKDB4MDBDKQorI2RlZmluZSBTRF9JTlRfU1RBVFVTICAgKDB4MDEwKQorI2RlZmluZSBTRF9JTlRfRU5BQkxFICAgKDB4MDE0KQorI2RlZmluZSBTRF9JTlRfU0VUICAgICAgKDB4MDE4KQorI2RlZmluZSBTRF9EMF9DVFJMICAgICAgKDB4MDIwKQorI2RlZmluZSBTRF9EMV9DVFJMICAgICAgKDB4MDI0KQorI2RlZmluZSBTRF9EMF9CQVIgICAgICAgKDB4MDI4KQorI2RlZmluZSBTRF9EMV9CQVIgICAgICAgKDB4MDJDKQorI2RlZmluZSBTRF9FQ0NfQ1RSTCAgICAgKDB4MDQwKQorI2RlZmluZSBTRF9ETExfU1RBVFVTICAgKDB4MjUwKQorCisjZGVmaW5lIFRTX1NEX0NUUkxfRU5BQkxFICAoMSA8PCAzMSkKKworI2RlZmluZSBQQl9FUlJDU19FUyAgICAgICAgICgxIDw8IDEpCisjZGVmaW5lIFBCX0lTUl9QQlNfUkRfRVJSICAgKDEgPDwgOCkKKyNkZWZpbmUgUENJX0lSUF9TVEFUX1BfQ1NSICAoMSA8PCAyMykKKworLyogCisgKiBJMkMgOiBSZWdpc3RlciBhZGRyZXNzIG9mZnNldCBkZWZpbml0aW9ucworICovCisjZGVmaW5lIEkyQ19DTlRSTDEJCQkJCQkoMHgwMDAwMDAwMCkKKyNkZWZpbmUgSTJDX0NOVFJMMgkJCQkJCSgweDAwMDAwMDA0KQorI2RlZmluZSBJMkNfUkRfREFUQQkJCQkJCSgweDAwMDAwMDA4KQorI2RlZmluZSBJMkNfVFhfREFUQQkJCQkJCSgweDAwMDAwMDBjKQorCisvKgorICogSTJDIDogUmVnaXN0ZXIgQml0IE1hc2tzIGFuZCBSZXNldCBWYWx1ZXMKKyAqICAgICAgICAgICBkZWZpbml0aW9ucyBmb3IgZXZlcnkgcmVnaXN0ZXIgCisgKi8KKworLyogSTJDX0NOVFJMMSA6IFJlc2V0IFZhbHVlICovCisjZGVmaW5lIEkyQ19DTlRSTDFfUkVTRVRfVkFMVUUJCQkJCSgweDAwMDAwMDBhKQorCisvKiBJMkNfQ05UUkwxIDogUmVnaXN0ZXIgQml0cyBNYXNrcyBEZWZpbml0aW9ucyAqLworI2RlZmluZSBJMkNfQ05UUkwxX0RFVkNPREUJCQkJCSgweDAwMDAwMDBmKQorI2RlZmluZSBJMkNfQ05UUkwxX1BBR0UJCQkJCQkoMHgwMDAwMDcwMCkKKyNkZWZpbmUgSTJDX0NOVFJMMV9CWVRBRERSCQkJCQkoMHgwMGZmMDAwMCkKKyNkZWZpbmUgSTJDX0NOVFJMMV9JMkNXUklURQkJCQkJKDB4MDEwMDAwMDApCisKKy8qIEkyQ19DTlRSTDEgOiBSZWFkL1dyaXRlIEJpdCBNYXNrIERlZmluaXRpb24gKi8KKyNkZWZpbmUgSTJDX0NOVFJMMV9SV01BU0sJCQkJCSgweDAxZmYwNzBmKQorCisvKiBJMkNfQ05UUkwxIDogVW51c2VkL1Jlc2VydmVkIGJpdHMgRGVmaW5pdGlvbiAqLworI2RlZmluZSBJMkNfQ05UUkwxX1JFU0VSVkVECQkJCQkoMHhmZTAwZjhmMCkKKworLyogSTJDX0NOVFJMMiA6IFJlc2V0IFZhbHVlICovCisjZGVmaW5lIEkyQ19DTlRSTDJfUkVTRVRfVkFMVUUJCQkJCSgweDAwMDAwMDAwKQorCisvKiBJMkNfQ05UUkwyIDogUmVnaXN0ZXIgQml0cyBNYXNrcyBEZWZpbml0aW9ucyAqLworI2RlZmluZSBJMkNfQ05UUkwyX1NJWkUJCQkJCQkoMHgwMDAwMDAwMykKKyNkZWZpbmUgSTJDX0NOVFJMMl9MQU5FCQkJCQkJKDB4MDAwMDAwMGMpCisjZGVmaW5lIEkyQ19DTlRSTDJfTVVMVElCWVRFCQkJCQkoMHgwMDAwMDAxMCkKKyNkZWZpbmUgSTJDX0NOVFJMMl9TVEFSVAkJCQkJKDB4MDAwMDAxMDApCisjZGVmaW5lIEkyQ19DTlRSTDJfV1JfU1RBVFVTCQkJCQkoMHgwMDAxMDAwMCkKKyNkZWZpbmUgSTJDX0NOVFJMMl9SRF9TVEFUVVMJCQkJCSgweDAwMDIwMDAwKQorI2RlZmluZSBJMkNfQ05UUkwyX0kyQ19UT19FUlIJCQkJCSgweDA0MDAwMDAwKQorI2RlZmluZSBJMkNfQ05UUkwyX0kyQ19DRkdFUlIJCQkJCSgweDA4MDAwMDAwKQorI2RlZmluZSBJMkNfQ05UUkwyX0kyQ19DTVBMVAkJCQkJKDB4MTAwMDAwMDApCisKKy8qIEkyQ19DTlRSTDIgOiBSZWFkL1dyaXRlIEJpdCBNYXNrIERlZmluaXRpb24gKi8KKyNkZWZpbmUgSTJDX0NOVFJMMl9SV01BU0sJCQkJCSgweDAwMDAwMTFmKQorCisvKiBJMkNfQ05UUkwyIDogVW51c2VkL1Jlc2VydmVkIGJpdHMgRGVmaW5pdGlvbiAqLworI2RlZmluZSBJMkNfQ05UUkwyX1JFU0VSVkVECQkJCQkoMHhlM2ZjZmVlMCkKKworLyogSTJDX1JEX0RBVEEgOiBSZXNldCBWYWx1ZSAqLworI2RlZmluZSBJMkNfUkRfREFUQV9SRVNFVF9WQUxVRQkJCQkJKDB4MDAwMDAwMDApCisKKy8qIEkyQ19SRF9EQVRBIDogUmVnaXN0ZXIgQml0cyBNYXNrcyBEZWZpbml0aW9ucyAqLworI2RlZmluZSBJMkNfUkRfREFUQV9SQllURTAJCQkJCSgweDAwMDAwMGZmKQorI2RlZmluZSBJMkNfUkRfREFUQV9SQllURTEJCQkJCSgweDAwMDBmZjAwKQorI2RlZmluZSBJMkNfUkRfREFUQV9SQllURTIJCQkJCSgweDAwZmYwMDAwKQorI2RlZmluZSBJMkNfUkRfREFUQV9SQllURTMJCQkJCSgweGZmMDAwMDAwKQorCisvKiBJMkNfUkRfREFUQSA6IFJlYWQvV3JpdGUgQml0IE1hc2sgRGVmaW5pdGlvbiAqLworI2RlZmluZSBJMkNfUkRfREFUQV9SV01BU0sJCQkJCSgweDAwMDAwMDAwKQorCisvKiBJMkNfUkRfREFUQSA6IFVudXNlZC9SZXNlcnZlZCBiaXRzIERlZmluaXRpb24gKi8KKyNkZWZpbmUgSTJDX1JEX0RBVEFfUkVTRVJWRUQJCQkJCSgweDAwMDAwMDAwKQorCisvKiBJMkNfVFhfREFUQSA6IFJlc2V0IFZhbHVlICovCisjZGVmaW5lIEkyQ19UWF9EQVRBX1JFU0VUX1ZBTFVFCQkJCQkoMHgwMDAwMDAwMCkKKworLyogSTJDX1RYX0RBVEEgOiBSZWdpc3RlciBCaXRzIE1hc2tzIERlZmluaXRpb25zICovCisjZGVmaW5lIEkyQ19UWF9EQVRBX1RCWVRFMAkJCQkJKDB4MDAwMDAwZmYpCisjZGVmaW5lIEkyQ19UWF9EQVRBX1RCWVRFMQkJCQkJKDB4MDAwMGZmMDApCisjZGVmaW5lIEkyQ19UWF9EQVRBX1RCWVRFMgkJCQkJKDB4MDBmZjAwMDApCisjZGVmaW5lIEkyQ19UWF9EQVRBX1RCWVRFMwkJCQkJKDB4ZmYwMDAwMDApCisKKy8qIEkyQ19UWF9EQVRBIDogUmVhZC9Xcml0ZSBCaXQgTWFzayBEZWZpbml0aW9uICovCisjZGVmaW5lIEkyQ19UWF9EQVRBX1JXTUFTSwkJCQkJKDB4ZmZmZmZmZmYpCisKKy8qIEkyQ19UWF9EQVRBIDogVW51c2VkL1Jlc2VydmVkIGJpdHMgRGVmaW5pdGlvbiAqLworI2RlZmluZSBJMkNfVFhfREFUQV9SRVNFUlZFRAkJCQkJKDB4MDAwMDAwMDApCisKKyNkZWZpbmUgVFNJMTA4X0kyQ19PRkZTRVQgICAgICAgMHg3MDAwCS8qIHJlZ2lzdGVyIGJsb2NrIG9mZnNldCBmb3IgZ2VuZXJhbCB1c2UgSTJDIGNoYW5uZWwgKi8KKyNkZWZpbmUgVFNJMTA4X0kyQ19TRFJBTV9PRkZTRVQgMHg0NDAwCS8qIHJlZ2lzdGVyIGJsb2NrIG9mZnNldCBmb3IgU1BEIEkyQyBjaGFubmVsICovCisKKyNkZWZpbmUgSTJDX0VFUFJPTV9ERVZDT0RFIDB4QQkvKiBzdGFuZGFyZCBJMkMgRUVQUk9NIGRldmljZSBjb2RlICovCisKKy8qIEkyQyBzdGF0dXMgY29kZXMgKi8KKworI2RlZmluZSBUU0kxMDhfSTJDX1NVQ0NFU1MgICAgICAwCisjZGVmaW5lIFRTSTEwOF9JMkNfUEFSQU1fRVJSICAgIDEKKyNkZWZpbmUgVFNJMTA4X0kyQ19USU1FT1VUX0VSUiAgMgorI2RlZmluZSBUU0kxMDhfSTJDX0lGX0JVU1kgICAgICAzCisjZGVmaW5lIFRTSTEwOF9JMkNfSUZfRVJST1IgICAgIDQKKworI2VuZGlmCQkvKiBfVFNJMTA4X0hfICovCmRpZmYgLS1naXQgYS9saWJfcHBjL2V4dGFibGUuYyBiL2xpYl9wcGMvZXh0YWJsZS5jCmluZGV4IGQ5MmYxNDIuLjM0YjVkNDYgMTAwNjQ0Ci0tLSBhL2xpYl9wcGMvZXh0YWJsZS5jCisrKyBiL2xpYl9wcGMvZXh0YWJsZS5jCkBAIC01MCwxNCArNTAsMjIgQEAKIAkJIGNvbnN0IHN0cnVjdCBleGNlcHRpb25fdGFibGVfZW50cnkgKmxhc3QsCiAJCSB1bnNpZ25lZCBsb25nIHZhbHVlKQogeworCURFQ0xBUkVfR0xPQkFMX0RBVEFfUFRSOworCiAJd2hpbGUgKGZpcnN0IDw9IGxhc3QpIHsKIAkJY29uc3Qgc3RydWN0IGV4Y2VwdGlvbl90YWJsZV9lbnRyeSAqbWlkOwogCQlsb25nIGRpZmY7CiAKIAkJbWlkID0gKGxhc3QgLSBmaXJzdCkgLyAyICsgZmlyc3Q7CisjaWZkZWYgQ0ZHX0VYQ0VQVElPTl9BRlRFUl9SRUxPQ0FURQorCQlkaWZmID0gKG1pZC0+aW5zbiArIGdkLT5yZWxvY19vZmYpIC0gdmFsdWU7CisJCWlmIChkaWZmID09IDApCisJCQlyZXR1cm4gKG1pZC0+Zml4dXAgKyBnZC0+cmVsb2Nfb2ZmKTsKKyNlbHNlCiAJCWRpZmYgPSBtaWQtPmluc24gLSB2YWx1ZTsKIAkJaWYgKGRpZmYgPT0gMCkKIAkJCXJldHVybiBtaWQtPmZpeHVwOworI2VuZGlmCiAJCWVsc2UgaWYgKGRpZmYgPCAwKQogCQkJZmlyc3QgPSBtaWQrMTsKIAkJZWxzZQpAQCAtNzUsOCArODMsMTAgQEAKIAogCS8qIFRoZXJlIGlzIG9ubHkgdGhlIGtlcm5lbCB0byBzZWFyY2guICAqLwogCXJldCA9IHNlYXJjaF9vbmVfdGFibGUoX19zdGFydF9fX2V4X3RhYmxlLCBfX3N0b3BfX19leF90YWJsZS0xLCBhZGRyKTsKKyNpZiAhZGVmaW5lZChDRkdfU0VSSUFMX0hBTkdfSU5fRVhDRVBUSU9OKQogCWlmIChleF90YWJfbWVzc2FnZSkKIAkJcHJpbnRmKCJCdXMgRmF1bHQgQCAweCUwOGx4LCBmaXh1cCAweCUwOGx4XG4iLCBhZGRyLCByZXQpOworI2VuZGlmCiAJaWYgKHJldCkgcmV0dXJuIHJldDsKIAogCXJldHVybiAwOwpkaWZmIC0tZ2l0IGEvbmV0L2V0aC5jIGIvbmV0L2V0aC5jCmluZGV4IGU4YWMyNTEuLmMyOTFmMTkgMTAwNjQ0Ci0tLSBhL25ldC9ldGguYworKysgYi9uZXQvZXRoLmMKQEAgLTUyLDYgKzUyLDcgQEAKIGV4dGVybiBpbnQgcnRsODE2OV9pbml0aWFsaXplKGJkX3QqKTsKIGV4dGVybiBpbnQgc2NjX2luaXRpYWxpemUoYmRfdCopOwogZXh0ZXJuIGludCBza2dlX2luaXRpYWxpemUoYmRfdCopOworZXh0ZXJuIGludCB0c2kxMDhfZXRoX2luaXRpYWxpemUoYmRfdCopOwogZXh0ZXJuIGludCB0c2VjX2luaXRpYWxpemUoYmRfdCosIGludCwgY2hhciAqKTsKIGV4dGVybiBpbnQgbnBlX2luaXRpYWxpemUoYmRfdCAqKTsKIApAQCAtMjQ1LDYgKzI0Niw5IEBACiAjaWZkZWYgQ09ORklHX05TODM4MlgKIAluczgzODJ4X2luaXRpYWxpemUoYmlzKTsKICNlbmRpZgorI2lmIGRlZmluZWQoQ09ORklHX1RTSTEwOF9FVEgpCisJdHNpMTA4X2V0aF9pbml0aWFsaXplKGJpcyk7CisjZW5kaWYKICNpZiBkZWZpbmVkKENPTkZJR19SVEw4MTM5KQogCXJ0bDgxMzlfaW5pdGlhbGl6ZShiaXMpOwogI2VuZGlmCg==