ZGlmZiAtLWdpdCBhL2FyY2gvYXJtL0tjb25maWcgYi9hcmNoL2FybS9LY29uZmlnCmluZGV4IGVjNzc3MjEuLjNkZjdjYmQgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL0tjb25maWcKKysrIGIvYXJjaC9hcm0vS2NvbmZpZwpAQCAtMjM5LDYgKzIzOSw4IEBACiAKIHNvdXJjZSAiYXJjaC9hcm0vbWFjaC1vbWFwMS9LY29uZmlnIgogCitzb3VyY2UgImFyY2gvYXJtL21hY2gtb21hcDIvS2NvbmZpZyIKKwogc291cmNlICJhcmNoL2FybS9tYWNoLXMzYzI0MTAvS2NvbmZpZyIKIAogc291cmNlICJhcmNoL2FybS9tYWNoLWxoN2E0MHgvS2NvbmZpZyIKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL01ha2VmaWxlIGIvYXJjaC9hcm0vTWFrZWZpbGUKaW5kZXggMTE0Y2RhN2YuLjgxYmQyMTkgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL01ha2VmaWxlCisrKyBiL2FyY2gvYXJtL01ha2VmaWxlCkBAIC05Myw2ICs5Myw3IEBACiAgbWFjaGluZS0kKENPTkZJR19BUkNIX0lYUDRYWCkJICAgOj0gaXhwNHh4CiAgbWFjaGluZS0kKENPTkZJR19BUkNIX0lYUDIwMDApICAgIDo9IGl4cDIwMDAKICBtYWNoaW5lLSQoQ09ORklHX0FSQ0hfT01BUDEpCSAgIDo9IG9tYXAxCisgbWFjaGluZS0kKENPTkZJR19BUkNIX09NQVAyKQkgICA6PSBvbWFwMgogICBpbmNkaXItJChDT05GSUdfQVJDSF9PTUFQKQkgICA6PSBvbWFwCiAgbWFjaGluZS0kKENPTkZJR19BUkNIX1MzQzI0MTApCSAgIDo9IHMzYzI0MTAKICBtYWNoaW5lLSQoQ09ORklHX0FSQ0hfTEg3QTQwWCkJICAgOj0gbGg3YTQweApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1vbWFwMi9LY29uZmlnIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi9LY29uZmlnCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU3ODg4MDkKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2FybS9tYWNoLW9tYXAyL0tjb25maWcKQEAgLTAsMCArMSwyMiBAQAorY29tbWVudCAiT01BUCBDb3JlIFR5cGUiCisJZGVwZW5kcyBvbiBBUkNIX09NQVAyCisKK2NvbmZpZyBBUkNIX09NQVAyNFhYCisJYm9vbCAiT01BUDI0eHggQmFzZWQgU3lzdGVtIgorCWRlcGVuZHMgb24gQVJDSF9PTUFQMgorCitjb25maWcgQVJDSF9PTUFQMjQyMAorCWJvb2wgIk9NQVAyNDIwIHN1cHBvcnQiCisJZGVwZW5kcyBvbiBBUkNIX09NQVAyNFhYCisKK2NvbW1lbnQgIk9NQVAgQm9hcmQgVHlwZSIKKwlkZXBlbmRzIG9uIEFSQ0hfT01BUDIKKworY29uZmlnIE1BQ0hfT01BUF9HRU5FUklDCisJYm9vbCAiR2VuZXJpYyBPTUFQIGJvYXJkIgorCWRlcGVuZHMgb24gQVJDSF9PTUFQMiAmJiBBUkNIX09NQVAyNFhYCisKK2NvbmZpZyBNQUNIX09NQVBfSDQKKwlib29sICJPTUFQIDI0MjAgSDQgYm9hcmQiCisJZGVwZW5kcyBvbiBBUkNIX09NQVAyICYmIEFSQ0hfT01BUDI0WFgKKwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1vbWFwMi9NYWtlZmlsZSBiL2FyY2gvYXJtL21hY2gtb21hcDIvTWFrZWZpbGUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDIwNDExNgotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXJtL21hY2gtb21hcDIvTWFrZWZpbGUKQEAgLTAsMCArMSwxMyBAQAorIworIyBNYWtlZmlsZSBmb3IgdGhlIGxpbnV4IGtlcm5lbC4KKyMKKworIyBDb21tb24gc3VwcG9ydAorb2JqLXkgOj0gaXJxLm8gaWQubyBpby5vIHNyYW0tZm4ubyBjbG9jay5vIG11eC5vIGRldmljZXMubyBzZXJpYWwubworCitvYmotJChDT05GSUdfT01BUF9NUFVfVElNRVIpCQkrPSB0aW1lci1ncC5vCisKKyMgU3BlY2lmaWMgYm9hcmQgc3VwcG9ydAorb2JqLSQoQ09ORklHX01BQ0hfT01BUF9HRU5FUklDKQkJKz0gYm9hcmQtZ2VuZXJpYy5vCitvYmotJChDT05GSUdfTUFDSF9PTUFQX0g0KQkJKz0gYm9hcmQtaDQubworCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW9tYXAyL01ha2VmaWxlLmJvb3QgYi9hcmNoL2FybS9tYWNoLW9tYXAyL01ha2VmaWxlLmJvb3QKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTY1YWZmNwotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXJtL21hY2gtb21hcDIvTWFrZWZpbGUuYm9vdApAQCAtMCwwICsxLDMgQEAKKyAgenJlbGFkZHIteQkJOj0gMHg4MDAwODAwMAorcGFyYW1zX3BoeXMteQkJOj0gMHg4MDAwMDEwMAoraW5pdHJkX3BoeXMteQkJOj0gMHg4MDgwMDAwMApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1vbWFwMi9ib2FyZC1nZW5lcmljLmMgYi9hcmNoL2FybS9tYWNoLW9tYXAyL2JvYXJkLWdlbmVyaWMuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jNjAyZTdhCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi9ib2FyZC1nZW5lcmljLmMKQEAgLTAsMCArMSw4MCBAQAorLyoKKyAqIGxpbnV4L2FyY2gvYXJtL21hY2gtb21hcC9vbWFwMi9ib2FyZC1nZW5lcmljLmMKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDUgTm9raWEgQ29ycG9yYXRpb24KKyAqIEF1dGhvcjogUGF1bCBNdW5kdCA8cGF1bC5tdW5kdEBub2tpYS5jb20+CisgKgorICogTW9kaWZpZWQgZnJvbSBtYWNoLW9tYXAvb21hcDEvYm9hcmQtZ2VuZXJpYy5jCisgKgorICogQ29kZSBmb3IgZ2VuZXJpYyBPTUFQMiBib2FyZC4gU2hvdWxkIHdvcmsgb24gbWFueSBPTUFQMiBzeXN0ZW1zIHdoZXJlCisgKiB0aGUgYm9vdGxvYWRlciBwYXNzZXMgdGhlIGJvYXJkLXNwZWNpZmljIGRhdGEgdG8gdGhlIGtlcm5lbC4KKyAqIERvIG5vdCBwdXQgYW55IGJvYXJkIHNwZWNpZmljIGNvZGUgdG8gdGhpcyBmaWxlOyBjcmVhdGUgYSBuZXcgbWFjaGluZQorICogdHlwZSBpZiB5b3UgbmVlZCBjdXN0b20gbG93LWxldmVsIGluaXRpYWxpemF0aW9ucy4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICovCisKKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKyNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisjaW5jbHVkZSA8bGludXgvZGV2aWNlLmg+CisKKyNpbmNsdWRlIDxhc20vaGFyZHdhcmUuaD4KKyNpbmNsdWRlIDxhc20vbWFjaC10eXBlcy5oPgorI2luY2x1ZGUgPGFzbS9tYWNoL2FyY2guaD4KKyNpbmNsdWRlIDxhc20vbWFjaC9tYXAuaD4KKworI2luY2x1ZGUgPGFzbS9hcmNoL2dwaW8uaD4KKyNpbmNsdWRlIDxhc20vYXJjaC9tdXguaD4KKyNpbmNsdWRlIDxhc20vYXJjaC91c2IuaD4KKyNpbmNsdWRlIDxhc20vYXJjaC9ib2FyZC5oPgorI2luY2x1ZGUgPGFzbS9hcmNoL2NvbW1vbi5oPgorCitzdGF0aWMgdm9pZCBfX2luaXQgb21hcF9nZW5lcmljX2luaXRfaXJxKHZvaWQpCit7CisJb21hcF9pbml0X2lycSgpOworfQorCitzdGF0aWMgc3RydWN0IG9tYXBfdWFydF9jb25maWcgZ2VuZXJpY191YXJ0X2NvbmZpZyBfX2luaXRkYXRhID0geworCS5lbmFibGVkX3VhcnRzID0gKCgxIDw8IDApIHwgKDEgPDwgMSkgfCAoMSA8PCAyKSksCit9OworCitzdGF0aWMgc3RydWN0IG9tYXBfbW1jX2NvbmZpZyBnZW5lcmljX21tY19jb25maWcgX19pbml0ZGF0YSA9IHsKKwkubW1jIFswXSA9IHsKKwkJLmVuYWJsZWQgCT0gMCwKKwkJLndpcmU0CQk9IDAsCisJCS53cF9waW4JCT0gLTEsCisJCS5wb3dlcl9waW4JPSAtMSwKKwkJLnN3aXRjaF9waW4JPSAtMSwKKwl9LAorfTsKKworc3RhdGljIHN0cnVjdCBvbWFwX2JvYXJkX2NvbmZpZ19rZXJuZWwgZ2VuZXJpY19jb25maWdbXSA9IHsKKwl7IE9NQVBfVEFHX1VBUlQsCSZnZW5lcmljX3VhcnRfY29uZmlnIH0sCisJeyBPTUFQX1RBR19NTUMsCQkmZ2VuZXJpY19tbWNfY29uZmlnIH0sCit9OworCitzdGF0aWMgdm9pZCBfX2luaXQgb21hcF9nZW5lcmljX2luaXQodm9pZCkKK3sKKwlvbWFwX2JvYXJkX2NvbmZpZyA9IGdlbmVyaWNfY29uZmlnOworCW9tYXBfYm9hcmRfY29uZmlnX3NpemUgPSBBUlJBWV9TSVpFKGdlbmVyaWNfY29uZmlnKTsKKwlvbWFwX3NlcmlhbF9pbml0KCk7Cit9CisKK3N0YXRpYyB2b2lkIF9faW5pdCBvbWFwX2dlbmVyaWNfbWFwX2lvKHZvaWQpCit7CisJb21hcF9tYXBfY29tbW9uX2lvKCk7Cit9CisKK01BQ0hJTkVfU1RBUlQoT01BUF9HRU5FUklDLCAiR2VuZXJpYyBPTUFQMjR4eCIpCisJLyogTWFpbnRhaW5lcjogUGF1bCBNdW5kdCA8cGF1bC5tdW5kdEBub2tpYS5jb20+ICovCisJLnBoeXNfcmFtCT0gMHg4MDAwMDAwMCwKKwkucGh5c19pbwk9IDB4NDgwMDAwMDAsCisJLmlvX3BnX29mZnN0CT0gKCgweGQ4MDAwMDAwKSA+PiAxOCkgJiAweGZmZmMsCisJLmJvb3RfcGFyYW1zCT0gMHg4MDAwMDEwMCwKKwkubWFwX2lvCQk9IG9tYXBfZ2VuZXJpY19tYXBfaW8sCisJLmluaXRfaXJxCT0gb21hcF9nZW5lcmljX2luaXRfaXJxLAorCS5pbml0X21hY2hpbmUJPSBvbWFwX2dlbmVyaWNfaW5pdCwKKwkudGltZXIJCT0gJm9tYXBfdGltZXIsCitNQUNISU5FX0VORApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1vbWFwMi9ib2FyZC1oNC5jIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi9ib2FyZC1oNC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmYyNTU0NDYKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2FybS9tYWNoLW9tYXAyL2JvYXJkLWg0LmMKQEAgLTAsMCArMSwxOTcgQEAKKy8qCisgKiBsaW51eC9hcmNoL2FybS9tYWNoLW9tYXAvb21hcDIvYm9hcmQtaDQuYworICoKKyAqIENvcHlyaWdodCAoQykgMjAwNSBOb2tpYSBDb3Jwb3JhdGlvbgorICogQXV0aG9yOiBQYXVsIE11bmR0IDxwYXVsLm11bmR0QG5va2lhLmNvbT4KKyAqCisgKiBNb2RpZmllZCBmcm9tIG1hY2gtb21hcC9vbWFwMS9ib2FyZC1nZW5lcmljLmMKKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICovCisKKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKyNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisjaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+CisjaW5jbHVkZSA8bGludXgvbXRkL210ZC5oPgorI2luY2x1ZGUgPGxpbnV4L210ZC9wYXJ0aXRpb25zLmg+CisjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KKworI2luY2x1ZGUgPGFzbS9oYXJkd2FyZS5oPgorI2luY2x1ZGUgPGFzbS9tYWNoLXR5cGVzLmg+CisjaW5jbHVkZSA8YXNtL21hY2gvYXJjaC5oPgorI2luY2x1ZGUgPGFzbS9tYWNoL21hcC5oPgorI2luY2x1ZGUgPGFzbS9tYWNoL2ZsYXNoLmg+CisKKyNpbmNsdWRlIDxhc20vYXJjaC9ncGlvLmg+CisjaW5jbHVkZSA8YXNtL2FyY2gvbXV4Lmg+CisjaW5jbHVkZSA8YXNtL2FyY2gvdXNiLmg+CisjaW5jbHVkZSA8YXNtL2FyY2gvYm9hcmQuaD4KKyNpbmNsdWRlIDxhc20vYXJjaC9jb21tb24uaD4KKyNpbmNsdWRlIDxhc20vYXJjaC9wcmNtLmg+CisKKyNpbmNsdWRlIDxhc20vaW8uaD4KKyNpbmNsdWRlIDxhc20vZGVsYXkuaD4KKworc3RhdGljIHN0cnVjdCBtdGRfcGFydGl0aW9uIGg0X3BhcnRpdGlvbnNbXSA9IHsKKwkvKiBib290bG9hZGVyIChVLUJvb3QsIGV0YykgaW4gZmlyc3Qgc2VjdG9yICovCisJeworCSAgICAgIC5uYW1lCQk9ICJib290bG9hZGVyIiwKKwkgICAgICAub2Zmc2V0CQk9IDAsCisJICAgICAgLnNpemUJCT0gU1pfMTI4SywKKwkgICAgICAubWFza19mbGFncwk9IE1URF9XUklURUFCTEUsIC8qIGZvcmNlIHJlYWQtb25seSAqLworCX0sCisJLyogYm9vdGxvYWRlciBwYXJhbXMgaW4gdGhlIG5leHQgc2VjdG9yICovCisJeworCSAgICAgIC5uYW1lCQk9ICJwYXJhbXMiLAorCSAgICAgIC5vZmZzZXQJCT0gTVREUEFSVF9PRlNfQVBQRU5ELAorCSAgICAgIC5zaXplCQk9IFNaXzEyOEssCisJICAgICAgLm1hc2tfZmxhZ3MJPSAwLAorCX0sCisJLyoga2VybmVsICovCisJeworCSAgICAgIC5uYW1lCQk9ICJrZXJuZWwiLAorCSAgICAgIC5vZmZzZXQJCT0gTVREUEFSVF9PRlNfQVBQRU5ELAorCSAgICAgIC5zaXplCQk9IFNaXzJNLAorCSAgICAgIC5tYXNrX2ZsYWdzCT0gMAorCX0sCisJLyogZmlsZSBzeXN0ZW0gKi8KKwl7CisJICAgICAgLm5hbWUJCT0gImZpbGVzeXN0ZW0iLAorCSAgICAgIC5vZmZzZXQJCT0gTVREUEFSVF9PRlNfQVBQRU5ELAorCSAgICAgIC5zaXplCQk9IE1URFBBUlRfU0laX0ZVTEwsCisJICAgICAgLm1hc2tfZmxhZ3MJPSAwCisJfQorfTsKKworc3RhdGljIHN0cnVjdCBmbGFzaF9wbGF0Zm9ybV9kYXRhIGg0X2ZsYXNoX2RhdGEgPSB7CisJLm1hcF9uYW1lCT0gImNmaV9wcm9iZSIsCisJLndpZHRoCQk9IDIsCisJLnBhcnRzCQk9IGg0X3BhcnRpdGlvbnMsCisJLm5yX3BhcnRzCT0gQVJSQVlfU0laRShoNF9wYXJ0aXRpb25zKSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgcmVzb3VyY2UgaDRfZmxhc2hfcmVzb3VyY2UgPSB7CisJLnN0YXJ0CQk9IEg0X0NTMF9CQVNFLAorCS5lbmQJCT0gSDRfQ1MwX0JBU0UgKyBTWl82NE0gLSAxLAorCS5mbGFncwkJPSBJT1JFU09VUkNFX01FTSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIGg0X2ZsYXNoX2RldmljZSA9IHsKKwkubmFtZQkJPSAib21hcGZsYXNoIiwKKwkuaWQJCT0gMCwKKwkuZGV2CQk9IHsKKwkJLnBsYXRmb3JtX2RhdGEJPSAmaDRfZmxhc2hfZGF0YSwKKwl9LAorCS5udW1fcmVzb3VyY2VzCT0gMSwKKwkucmVzb3VyY2UJPSAmaDRfZmxhc2hfcmVzb3VyY2UsCit9OworCitzdGF0aWMgc3RydWN0IHJlc291cmNlIGg0X3NtYzkxeF9yZXNvdXJjZXNbXSA9IHsKKwlbMF0gPSB7CisJCS5zdGFydCAgPSBPTUFQMjRYWF9FVEhSX1NUQVJULCAgICAgICAgICAvKiBQaHlzaWNhbCAqLworCQkuZW5kICAgID0gT01BUDI0WFhfRVRIUl9TVEFSVCArIDB4ZiwKKwkJLmZsYWdzICA9IElPUkVTT1VSQ0VfTUVNLAorCX0sCisJWzFdID0geworCQkuc3RhcnQgID0gT01BUF9HUElPX0lSUShPTUFQMjRYWF9FVEhSX0dQSU9fSVJRKSwKKwkJLmVuZCAgICA9IE9NQVBfR1BJT19JUlEoT01BUDI0WFhfRVRIUl9HUElPX0lSUSksCisJCS5mbGFncyAgPSBJT1JFU09VUkNFX0lSUSwKKwl9LAorfTsKKworc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgaDRfc21jOTF4X2RldmljZSA9IHsKKwkubmFtZQkJPSAic21jOTF4IiwKKwkuaWQJCT0gLTEsCisJLm51bV9yZXNvdXJjZXMJPSBBUlJBWV9TSVpFKGg0X3NtYzkxeF9yZXNvdXJjZXMpLAorCS5yZXNvdXJjZQk9IGg0X3NtYzkxeF9yZXNvdXJjZXMsCit9OworCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSAqaDRfZGV2aWNlc1tdIF9faW5pdGRhdGEgPSB7CisJJmg0X3NtYzkxeF9kZXZpY2UsCisJJmg0X2ZsYXNoX2RldmljZSwKK307CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBfX2luaXQgaDRfaW5pdF9zbWM5MXgodm9pZCkKK3sKKwkvKiBNYWtlIHN1cmUgQ1MxIHRpbWluZ3MgYXJlIGNvcnJlY3QgKi8KKwlHUE1DX0NPTkZJRzFfMSA9IDB4MDAwMTEyMDA7CisJR1BNQ19DT05GSUcyXzEgPSAweDAwMWYxZjAxOworCUdQTUNfQ09ORklHM18xID0gMHgwMDA4MDgwMzsKKwlHUE1DX0NPTkZJRzRfMSA9IDB4MWMwOTFjMDk7CisJR1BNQ19DT05GSUc1XzEgPSAweDA0MWYxZjFmOworCUdQTUNfQ09ORklHNl8xID0gMHgwMDAwMDRjNDsKKwlHUE1DX0NPTkZJRzdfMSA9IDB4MDAwMDBmNDAgfCAoMHgwODAwMDAwMCA+PiAyNCk7CisJdWRlbGF5KDEwMCk7CisKKwlvbWFwX2NmZ19yZWcoTTE1XzI0WFhfR1BJTzkyKTsKKwlpZiAob21hcF9yZXF1ZXN0X2dwaW8oT01BUDI0WFhfRVRIUl9HUElPX0lSUSkgPCAwKSB7CisJCXByaW50ayhLRVJOX0VSUiAiRmFpbGVkIHRvIHJlcXVlc3QgR1BJTyVkIGZvciBzbWM5MXggSVJRXG4iLAorCQkJT01BUDI0WFhfRVRIUl9HUElPX0lSUSk7CisJCXJldHVybjsKKwl9CisJb21hcF9zZXRfZ3Bpb19kaXJlY3Rpb24oT01BUDI0WFhfRVRIUl9HUElPX0lSUSwgMSk7Cit9CisKK3N0YXRpYyB2b2lkIF9faW5pdCBvbWFwX2g0X2luaXRfaXJxKHZvaWQpCit7CisJb21hcF9pbml0X2lycSgpOworCW9tYXBfZ3Bpb19pbml0KCk7CisJaDRfaW5pdF9zbWM5MXgoKTsKK30KKworc3RhdGljIHN0cnVjdCBvbWFwX3VhcnRfY29uZmlnIGg0X3VhcnRfY29uZmlnIF9faW5pdGRhdGEgPSB7CisJLmVuYWJsZWRfdWFydHMgPSAoKDEgPDwgMCkgfCAoMSA8PCAxKSB8ICgxIDw8IDIpKSwKK307CisKK3N0YXRpYyBzdHJ1Y3Qgb21hcF9tbWNfY29uZmlnIGg0X21tY19jb25maWcgX19pbml0ZGF0YSA9IHsKKwkubW1jIFswXSA9IHsKKwkJLmVuYWJsZWQJPSAxLAorCQkud2lyZTQJCT0gMSwKKwkJLndwX3BpbgkJPSAtMSwKKwkJLnBvd2VyX3Bpbgk9IC0xLAorCQkuc3dpdGNoX3Bpbgk9IC0xLAorCX0sCit9OworCitzdGF0aWMgc3RydWN0IG9tYXBfbGNkX2NvbmZpZyBoNF9sY2RfY29uZmlnIF9faW5pdGRhdGEgPSB7CisJLnBhbmVsX25hbWUJPSAiaDQiLAorCS5jdHJsX25hbWUJPSAiaW50ZXJuYWwiLAorfTsKKworc3RhdGljIHN0cnVjdCBvbWFwX2JvYXJkX2NvbmZpZ19rZXJuZWwgaDRfY29uZmlnW10gPSB7CisJeyBPTUFQX1RBR19VQVJULAkmaDRfdWFydF9jb25maWcgfSwKKwl7IE9NQVBfVEFHX01NQywJCSZoNF9tbWNfY29uZmlnIH0sCisJeyBPTUFQX1RBR19MQ0QsCQkmaDRfbGNkX2NvbmZpZyB9LAorfTsKKworc3RhdGljIHZvaWQgX19pbml0IG9tYXBfaDRfaW5pdCh2b2lkKQoreworCS8qCisJICogTWFrZSBzdXJlIHRoZSBzZXJpYWwgcG9ydHMgYXJlIG11eGVkIG9uIGF0IHRoaXMgcG9pbnQuCisJICogWW91IGhhdmUgdG8gbXV4IHRoZW0gb2ZmIGluIGRldmljZSBkcml2ZXJzIGxhdGVyIG9uCisJICogaWYgbm90IG5lZWRlZC4KKwkgKi8KKwlwbGF0Zm9ybV9hZGRfZGV2aWNlcyhoNF9kZXZpY2VzLCBBUlJBWV9TSVpFKGg0X2RldmljZXMpKTsKKwlvbWFwX2JvYXJkX2NvbmZpZyA9IGg0X2NvbmZpZzsKKwlvbWFwX2JvYXJkX2NvbmZpZ19zaXplID0gQVJSQVlfU0laRShoNF9jb25maWcpOworCW9tYXBfc2VyaWFsX2luaXQoKTsKK30KKworc3RhdGljIHZvaWQgX19pbml0IG9tYXBfaDRfbWFwX2lvKHZvaWQpCit7CisJb21hcF9tYXBfY29tbW9uX2lvKCk7Cit9CisKK01BQ0hJTkVfU1RBUlQoT01BUF9INCwgIk9NQVAyNDIwIEg0IGJvYXJkIikKKwkvKiBNYWludGFpbmVyOiBQYXVsIE11bmR0IDxwYXVsLm11bmR0QG5va2lhLmNvbT4gKi8KKwkucGh5c19yYW0JPSAweDgwMDAwMDAwLAorCS5waHlzX2lvCT0gMHg0ODAwMDAwMCwKKwkuaW9fcGdfb2Zmc3QJPSAoKDB4ZDgwMDAwMDApID4+IDE4KSAmIDB4ZmZmYywKKwkuYm9vdF9wYXJhbXMJPSAweDgwMDAwMTAwLAorCS5tYXBfaW8JCT0gb21hcF9oNF9tYXBfaW8sCisJLmluaXRfaXJxCT0gb21hcF9oNF9pbml0X2lycSwKKwkuaW5pdF9tYWNoaW5lCT0gb21hcF9oNF9pbml0LAorCS50aW1lcgkJPSAmb21hcF90aW1lciwKK01BQ0hJTkVfRU5ECmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW9tYXAyL2RldmljZXMuYyBiL2FyY2gvYXJtL21hY2gtb21hcDIvZGV2aWNlcy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjcxODFlZGIKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2FybS9tYWNoLW9tYXAyL2RldmljZXMuYwpAQCAtMCwwICsxLDg5IEBACisvKgorICogbGludXgvYXJjaC9hcm0vbWFjaC1vbWFwMi9kZXZpY2VzLmMKKyAqCisgKiBPTUFQMiBwbGF0Zm9ybSBkZXZpY2Ugc2V0dXAvaW5pdGlhbGl6YXRpb24KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisgKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICovCisKKyNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKyNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisjaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+CisKKyNpbmNsdWRlIDxhc20vaGFyZHdhcmUuaD4KKyNpbmNsdWRlIDxhc20vaW8uaD4KKyNpbmNsdWRlIDxhc20vbWFjaC10eXBlcy5oPgorI2luY2x1ZGUgPGFzbS9tYWNoL21hcC5oPgorCisjaW5jbHVkZSA8YXNtL2FyY2gvdGMuaD4KKyNpbmNsdWRlIDxhc20vYXJjaC9ib2FyZC5oPgorI2luY2x1ZGUgPGFzbS9hcmNoL211eC5oPgorI2luY2x1ZGUgPGFzbS9hcmNoL2dwaW8uaD4KKworZXh0ZXJuIHZvaWQgb21hcF9ub3BfcmVsZWFzZShzdHJ1Y3QgZGV2aWNlICpkZXYpOworCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworCisjaWYgCWRlZmluZWQoQ09ORklHX0kyQ19PTUFQKSB8fCBkZWZpbmVkKENPTkZJR19JMkNfT01BUF9NT0RVTEUpCisKKyNkZWZpbmUgT01BUDJfSTJDX0JBU0UyCQkweDQ4MDcyMDAwCisjZGVmaW5lIE9NQVAyX0kyQ19JTlQyCQk1NworCitzdGF0aWMgc3RydWN0IHJlc291cmNlIGkyY19yZXNvdXJjZXMyW10gPSB7CisJeworCQkuc3RhcnQJCT0gT01BUDJfSTJDX0JBU0UyLAorCQkuZW5kCQk9IE9NQVAyX0kyQ19CQVNFMiArIDB4M2YsCisJCS5mbGFncwkJPSBJT1JFU09VUkNFX01FTSwKKwl9LAorCXsKKwkJLnN0YXJ0CQk9IE9NQVAyX0kyQ19JTlQyLAorCQkuZmxhZ3MJCT0gSU9SRVNPVVJDRV9JUlEsCisJfSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIG9tYXBfaTJjX2RldmljZTIgPSB7CisgICAgICAgIC5uYW1lICAgICAgICAgICA9ICJpMmNfb21hcCIsCisgICAgICAgIC5pZCAgICAgICAgICAgICA9IDIsCisgICAgICAgIC5kZXYgPSB7CisgICAgICAgICAgICAgICAgLnJlbGVhc2UgICAgICAgID0gb21hcF9ub3BfcmVsZWFzZSwKKyAgICAgICAgfSwKKwkubnVtX3Jlc291cmNlcwk9IEFSUkFZX1NJWkUoaTJjX3Jlc291cmNlczIpLAorCS5yZXNvdXJjZQk9IGkyY19yZXNvdXJjZXMyLAorfTsKKworLyogU2VlIGFsc28gYXJjaC9hcm0vcGxhdC1vbWFwL2RldmljZXMuYyBmb3IgZmlyc3QgSTJDIG9uIDI0eHggKi8KK3N0YXRpYyB2b2lkIG9tYXBfaW5pdF9pMmModm9pZCkKK3sKKwkvKiBSRVZJU0lUOiBTZWNvbmQgSTJDIG5vdCBpbiB1c2Ugb24gSDQ/ICovCisJaWYgKG1hY2hpbmVfaXNfb21hcF9oNCgpKQorCQlyZXR1cm47CisKKwlvbWFwX2NmZ19yZWcoSjE1XzI0WFhfSTJDMl9TQ0wpOworCW9tYXBfY2ZnX3JlZyhIMTlfMjRYWF9JMkMyX1NEQSk7CisJKHZvaWQpIHBsYXRmb3JtX2RldmljZV9yZWdpc3Rlcigmb21hcF9pMmNfZGV2aWNlMik7Cit9CisKKyNlbHNlCisKK3N0YXRpYyB2b2lkIG9tYXBfaW5pdF9pMmModm9pZCkge30KKworI2VuZGlmCisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisKK3N0YXRpYyBpbnQgX19pbml0IG9tYXAyX2luaXRfZGV2aWNlcyh2b2lkKQoreworCS8qIHBsZWFzZSBrZWVwIHRoZXNlIGNhbGxzLCBhbmQgdGhlaXIgaW1wbGVtZW50YXRpb25zIGFib3ZlLAorCSAqIGluIGFscGhhYmV0aWNhbCBvcmRlciBzbyB0aGV5J3JlIGVhc2llciB0byBzb3J0IHRocm91Z2guCisJICovCisJb21hcF9pbml0X2kyYygpOworCisJcmV0dXJuIDA7Cit9CithcmNoX2luaXRjYWxsKG9tYXAyX2luaXRfZGV2aWNlcyk7CisKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtb21hcDIvaWQuYyBiL2FyY2gvYXJtL21hY2gtb21hcDIvaWQuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43NjE4NzMwCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi9pZC5jCkBAIC0wLDAgKzEsMTI0IEBACisvKgorICogbGludXgvYXJjaC9hcm0vbWFjaC1vbWFwMi9pZC5jCisgKgorICogT01BUDIgQ1BVIGlkZW50aWZpY2F0aW9uIGNvZGUKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDUgTm9raWEgQ29ycG9yYXRpb24KKyAqIFdyaXR0ZW4gYnkgVG9ueSBMaW5kZ3JlbiA8dG9ueUBhdG9taWRlLmNvbT4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICovCisKKyNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKyNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisKKyNpbmNsdWRlIDxhc20vaW8uaD4KKworI2RlZmluZSBPTUFQMjRYWF9UQVBfQkFTRQlpb19wMnYoMHg0ODAxNDAwMCkKKworI2RlZmluZSBPTUFQX1RBUF9JRENPREUJCTB4MDIwNAorI2RlZmluZSBPTUFQX1RBUF9QUk9EX0lECTB4MDIwOAorCisjZGVmaW5lIE9NQVBfVEFQX0RJRV9JRF8wCTB4MDIxOAorI2RlZmluZSBPTUFQX1RBUF9ESUVfSURfMQkweDAyMUMKKyNkZWZpbmUgT01BUF9UQVBfRElFX0lEXzIJMHgwMjIwCisjZGVmaW5lIE9NQVBfVEFQX0RJRV9JRF8zCTB4MDIyNAorCisvKiBzeXN0ZW1fcmV2IGZpZWxkcyBmb3IgT01BUDIgcHJvY2Vzc29yczoKKyAqICAgQ1BVIGlkIGJpdHMgICAgIFszMToxNl0sCisgKiAgIENQVSBkZXZpY2UgdHlwZSBbMTU6MTJdLCAodW5wcmcsbm9ybWFsLFBPUCkKKyAqICAgQ1BVIHJldmlzaW9uICAgIFsxMTowOF0KKyAqICAgQ1BVIGNsYXNzIGJpdHMgIFswNzowMF0KKyAqLworCitzdHJ1Y3Qgb21hcF9pZCB7CisJdTE2CWhhd2tleWU7CS8qIFNpbGljb24gdHlwZSAoSGF3a2V5ZSBpZCkgKi8KKwl1OAlkZXY7CQkvKiBEZXZpY2UgdHlwZSBmcm9tIHByb2R1Y3Rpb25faWQgcmVnICovCisJdTMyCXR5cGU7CQkvKiBjb21iaW5lZCB0eXBlIGlkIGNvcGllZCB0byBzeXN0ZW1fcmV2ICovCit9OworCisvKiBSZWdpc3RlciB2YWx1ZXMgdG8gZGV0ZWN0IHRoZSBPTUFQIHZlcnNpb24gKi8KK3N0YXRpYyBzdHJ1Y3Qgb21hcF9pZCBvbWFwX2lkc1tdIF9faW5pdGRhdGEgPSB7CisJeyAuaGF3a2V5ZSA9IDB4YjVkOSwgLmRldiA9IDB4MCwgLnR5cGUgPSAweDI0MjAwMDAwIH0sCisJeyAuaGF3a2V5ZSA9IDB4YjVkOSwgLmRldiA9IDB4MSwgLnR5cGUgPSAweDI0MjAxMDAwIH0sCisJeyAuaGF3a2V5ZSA9IDB4YjVkOSwgLmRldiA9IDB4MiwgLnR5cGUgPSAweDI0MjAyMDAwIH0sCisJeyAuaGF3a2V5ZSA9IDB4YjVkOSwgLmRldiA9IDB4NCwgLnR5cGUgPSAweDI0MjIwMDAwIH0sCisJeyAuaGF3a2V5ZSA9IDB4YjVkOSwgLmRldiA9IDB4OCwgLnR5cGUgPSAweDI0MjMwMDAwIH0sCisJeyAuaGF3a2V5ZSA9IDB4YjY4YSwgLmRldiA9IDB4MCwgLnR5cGUgPSAweDI0MzAwMDAwIH0sCit9OworCitzdGF0aWMgdTMyIF9faW5pdCByZWFkX3RhcF9yZWcoaW50IHJlZykKK3sKKwlyZXR1cm4gX19yYXdfcmVhZGwoT01BUDI0WFhfVEFQX0JBU0UgKyByZWcpOworfQorCit2b2lkIF9faW5pdCBvbWFwMl9jaGVja19yZXZpc2lvbih2b2lkKQoreworCWludCBpLCBqOworCXUzMiBpZGNvZGU7CisJdTMyIHByb2RfaWQ7CisJdTE2IGhhd2tleWU7CisJdTggIGRldl90eXBlOworCXU4ICByZXY7CisKKwlpZGNvZGUgPSByZWFkX3RhcF9yZWcoT01BUF9UQVBfSURDT0RFKTsKKwlwcm9kX2lkID0gcmVhZF90YXBfcmVnKE9NQVBfVEFQX1BST0RfSUQpOworCWhhd2tleWUgPSAoaWRjb2RlID4+IDEyKSAmIDB4ZmZmZjsKKwlyZXYgPSAoaWRjb2RlID4+IDI4KSAmIDB4MGY7CisJZGV2X3R5cGUgPSAocHJvZF9pZCA+PiAxNikgJiAweDBmOworCisjaWZkZWYgREVCVUcKKwlwcmludGsoS0VSTl9ERUJVRyAiT01BUF9UQVBfSURDT0RFIDB4JTA4eCBSRVYgJWkgSEFXS0VZRSAweCUwNHggTUFORiAlMDN4XG4iLAorCQlpZGNvZGUsIHJldiwgaGF3a2V5ZSwgKGlkY29kZSA+PiAxKSAmIDB4N2ZmKTsKKwlwcmludGsoS0VSTl9ERUJVRyAiT01BUF9UQVBfRElFX0lEXzA6IDB4JTA4eFxuIiwKKwkJcmVhZF90YXBfcmVnKE9NQVBfVEFQX0RJRV9JRF8wKSk7CisJcHJpbnRrKEtFUk5fREVCVUcgIk9NQVBfVEFQX0RJRV9JRF8xOiAweCUwOHggREVWX1JFVjogJWlcbiIsCisJCXJlYWRfdGFwX3JlZyhPTUFQX1RBUF9ESUVfSURfMSksCisJICAgICAgIChyZWFkX3RhcF9yZWcoT01BUF9UQVBfRElFX0lEXzEpID4+IDI4KSAmIDB4Zik7CisJcHJpbnRrKEtFUk5fREVCVUcgIk9NQVBfVEFQX0RJRV9JRF8yOiAweCUwOHhcbiIsCisJCXJlYWRfdGFwX3JlZyhPTUFQX1RBUF9ESUVfSURfMikpOworCXByaW50ayhLRVJOX0RFQlVHICJPTUFQX1RBUF9ESUVfSURfMzogMHglMDh4XG4iLAorCQlyZWFkX3RhcF9yZWcoT01BUF9UQVBfRElFX0lEXzMpKTsKKwlwcmludGsoS0VSTl9ERUJVRyAiT01BUF9UQVBfUFJPRF9JRF8wOiAweCUwOHggREVWX1RZUEU6ICVpXG4iLAorCQlwcm9kX2lkLCBkZXZfdHlwZSk7CisjZW5kaWYKKworCS8qIENoZWNrIGhhd2tleWUgaWRzICovCisJZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUob21hcF9pZHMpOyBpKyspIHsKKwkJaWYgKGhhd2tleWUgPT0gb21hcF9pZHNbaV0uaGF3a2V5ZSkKKwkJCWJyZWFrOworCX0KKworCWlmIChpID09IEFSUkFZX1NJWkUob21hcF9pZHMpKSB7CisJCXByaW50ayhLRVJOX0VSUiAiVW5rbm93biBPTUFQIENQVSBpZFxuIik7CisJCXJldHVybjsKKwl9CisKKwlmb3IgKGogPSBpOyBqIDwgQVJSQVlfU0laRShvbWFwX2lkcyk7IGorKykgeworCQlpZiAoZGV2X3R5cGUgPT0gb21hcF9pZHNbal0uZGV2KQorCQkJYnJlYWs7CisJfQorCisJaWYgKGogPT0gQVJSQVlfU0laRShvbWFwX2lkcykpIHsKKwkJcHJpbnRrKEtFUk5fRVJSICJVbmtub3duIE9NQVAgZGV2aWNlIHR5cGUuICIKKwkJCQkiSGFuZGxpbmcgaXQgYXMgT01BUCUwNHhcbiIsCisJCQkJb21hcF9pZHNbaV0udHlwZSA+PiAxNik7CisJCWogPSBpOworCX0KKwlzeXN0ZW1fcmV2ID0gb21hcF9pZHNbal0udHlwZTsKKworCXN5c3RlbV9yZXYgfD0gcmV2IDw8IDg7CisKKwkvKiBBZGQgdGhlIGNwdSBjbGFzcyBpbmZvICgyNHh4KSAqLworCXN5c3RlbV9yZXYgfD0gMHgyNDsKKworCXByX2luZm8oIk9NQVAlMDR4Iiwgc3lzdGVtX3JldiA+PiAxNik7CisJaWYgKChzeXN0ZW1fcmV2ID4+IDgpICYgMHgwZikKKwkJcHJpbnRrKCIleCIsIChzeXN0ZW1fcmV2ID4+IDgpICYgMHgwZik7CisJcHJpbnRrKCJcbiIpOworfQorCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW9tYXAyL2lvLmMgYi9hcmNoL2FybS9tYWNoLW9tYXAyL2lvLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGVhNjdiZgotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXJtL21hY2gtb21hcDIvaW8uYwpAQCAtMCwwICsxLDUzIEBACisvKgorICogbGludXgvYXJjaC9hcm0vbWFjaC1vbWFwMi9pby5jCisgKgorICogT01BUDIgSS9PIG1hcHBpbmcgY29kZQorICoKKyAqIENvcHlyaWdodCAoQykgMjAwNSBOb2tpYSBDb3Jwb3JhdGlvbgorICogQXV0aG9yOiBKdWhhIFlyavZs5CA8anVoYS55cmpvbGFAbm9raWEuY29tPgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgorI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKworI2luY2x1ZGUgPGFzbS9tYWNoL21hcC5oPgorI2luY2x1ZGUgPGFzbS9pby5oPgorI2luY2x1ZGUgPGFzbS9hcmNoL211eC5oPgorCitleHRlcm4gdm9pZCBvbWFwX3NyYW1faW5pdCh2b2lkKTsKK2V4dGVybiBpbnQgb21hcDJfY2xrX2luaXQodm9pZCk7CitleHRlcm4gdm9pZCBvbWFwMl9jaGVja19yZXZpc2lvbih2b2lkKTsKKworLyoKKyAqIFRoZSBtYWNoaW5lIHNwZWNpZmljIGNvZGUgbWF5IHByb3ZpZGUgdGhlIGV4dHJhIG1hcHBpbmcgYmVzaWRlcyB0aGUKKyAqIGRlZmF1bHQgbWFwcGluZyBwcm92aWRlZCBoZXJlLgorICovCitzdGF0aWMgc3RydWN0IG1hcF9kZXNjIG9tYXAyX2lvX2Rlc2NbXSBfX2luaXRkYXRhID0geworCXsKKwkJLnZpcnR1YWwJPSBMM18yNFhYX1ZJUlQsCisJCS5wZm4JCT0gX19waHlzX3RvX3BmbihMM18yNFhYX1BIWVMpLAorCQkubGVuZ3RoCQk9IEwzXzI0WFhfU0laRSwKKwkJLnR5cGUJCT0gTVRfREVWSUNFCisJfSwKKwl7CisJCS52aXJ0dWFsCT0gTDRfMjRYWF9WSVJULAorCQkucGZuCQk9IF9fcGh5c190b19wZm4oTDRfMjRYWF9QSFlTKSwKKwkJLmxlbmd0aAkJPSBMNF8yNFhYX1NJWkUsCisJCS50eXBlCQk9IE1UX0RFVklDRQorCX0KK307CisKK3ZvaWQgX19pbml0IG9tYXBfbWFwX2NvbW1vbl9pbyh2b2lkKQoreworCWlvdGFibGVfaW5pdChvbWFwMl9pb19kZXNjLCBBUlJBWV9TSVpFKG9tYXAyX2lvX2Rlc2MpKTsKKwlvbWFwMl9jaGVja19yZXZpc2lvbigpOworCW9tYXBfc3JhbV9pbml0KCk7CisJb21hcDJfbXV4X2luaXQoKTsKKwlvbWFwMl9jbGtfaW5pdCgpOworfQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1vbWFwMi9pcnEuYyBiL2FyY2gvYXJtL21hY2gtb21hcDIvaXJxLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDdiYWZmNgotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXJtL21hY2gtb21hcDIvaXJxLmMKQEAgLTAsMCArMSwxNDkgQEAKKy8qCisgKiBsaW51eC9hcmNoL2FybS9tYWNoLW9tYXAvb21hcDIvaXJxLmMKKyAqCisgKiBJbnRlcnJ1cHQgaGFuZGxlciBmb3IgT01BUDIgYm9hcmRzLgorICoKKyAqIENvcHlyaWdodCAoQykgMjAwNSBOb2tpYSBDb3Jwb3JhdGlvbgorICogQXV0aG9yOiBQYXVsIE11bmR0IDxwYXVsLm11bmR0QG5va2lhLmNvbT4KKyAqCisgKiBUaGlzIGZpbGUgaXMgc3ViamVjdCB0byB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZS4gU2VlIHRoZSBmaWxlICJDT1BZSU5HIiBpbiB0aGUgbWFpbiBkaXJlY3Rvcnkgb2YgdGhpcyBhcmNoaXZlCisgKiBmb3IgbW9yZSBkZXRhaWxzLgorICovCisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgorI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgorI2luY2x1ZGUgPGFzbS9oYXJkd2FyZS5oPgorI2luY2x1ZGUgPGFzbS9tYWNoL2lycS5oPgorI2luY2x1ZGUgPGFzbS9pcnEuaD4KKyNpbmNsdWRlIDxhc20vaW8uaD4KKworI2RlZmluZSBJTlRDX1JFVklTSU9OCTB4MDAwMAorI2RlZmluZSBJTlRDX1NZU0NPTkZJRwkweDAwMTAKKyNkZWZpbmUgSU5UQ19TWVNTVEFUVVMJMHgwMDE0CisjZGVmaW5lIElOVENfQ09OVFJPTAkweDAwNDgKKyNkZWZpbmUgSU5UQ19NSVJfQ0xFQVIwCTB4MDA4OAorI2RlZmluZSBJTlRDX01JUl9TRVQwCTB4MDA4YworCisvKgorICogT01BUDIgaGFzIGEgbnVtYmVyIG9mIGRpZmZlcmVudCBpbnRlcnJ1cHQgY29udHJvbGxlcnMsIGVhY2ggaW50ZXJydXB0CisgKiBjb250cm9sbGVyIGlzIGlkZW50aWZpZWQgYXMgaXRzIG93biAiYmFuayIuIFJlZ2lzdGVyIGRlZmluaXRpb25zIGFyZQorICogZmFpcmx5IGNvbnNpc3RlbnQgZm9yIGVhY2ggYmFuaywgYnV0IG5vdCBhbGwgcmVnaXN0ZXJzIGFyZSBpbXBsZW1lbnRlZAorICogZm9yIGVhY2ggYmFuay4uIHdoZW4gaW4gZG91YnQsIGNvbnN1bHQgdGhlIFRSTS4KKyAqLworc3RhdGljIHN0cnVjdCBvbWFwX2lycV9iYW5rIHsKKwl1bnNpZ25lZCBsb25nIGJhc2VfcmVnOworCXVuc2lnbmVkIGludCBucl9pcnFzOworfSBfX2F0dHJpYnV0ZV9fICgoYWxpZ25lZCg0KSkpIGlycV9iYW5rc1tdID0geworCXsKKwkJLyogTVBVIElOVEMgKi8KKwkJLmJhc2VfcmVnCT0gT01BUDI0WFhfSUNfQkFTRSwKKwkJLm5yX2lycXMJPSA5NiwKKwl9LCB7CisJCS8qIFhYWDogRFNQIElOVEMgKi8KKworI2lmIDAKKwkvKgorCSAqIENvbW1lbnRlZCBvdXQgZm9yIG5vdyB1bnRpbCB3ZSBmaXggdGhlIElWQSBjbG9ja2luZworCSAqLworI2lmZGVmIENPTkZJR19BUkNIX09NQVAyNDIwCisJfSwgeworCQkvKiBJVkEgSU5UQyAoMjQyMCBvbmx5KSAqLworCQkuYmFzZV9yZWcJPSBPTUFQMjRYWF9JVkFfSU5UQ19CQVNFLAorCQkubnJfaXJxcwk9IDE2LAkvKiBBY3R1YWxseSAzMiwgYnV0IG9ubHkgMTYgYXJlIHVzZWQgKi8KKyNlbmRpZgorI2VuZGlmCisJfQorfTsKKworLyogWFhYOiBGSVEgYW5kIGFkZGl0aW9uYWwgSU5UQyBzdXBwb3J0IChvbmx5IE1QVSBhdCB0aGUgbW9tZW50KSAqLworc3RhdGljIHZvaWQgb21hcF9hY2tfaXJxKHVuc2lnbmVkIGludCBpcnEpCit7CisJb21hcF93cml0ZWwoMHgxLCBpcnFfYmFua3NbMF0uYmFzZV9yZWcgKyBJTlRDX0NPTlRST0wpOworfQorCitzdGF0aWMgdm9pZCBvbWFwX21hc2tfaXJxKHVuc2lnbmVkIGludCBpcnEpCit7CisJaW50IG9mZnNldCA9IChpcnEgPj4gNSkgPDwgNTsKKworCWlmIChpcnEgPj0gNjQpIHsKKwkJaXJxICU9IDY0OworCX0gZWxzZSBpZiAoaXJxID49IDMyKSB7CisJCWlycSAlPSAzMjsKKwl9CisKKwlvbWFwX3dyaXRlbCgxIDw8IGlycSwgaXJxX2JhbmtzWzBdLmJhc2VfcmVnICsgSU5UQ19NSVJfU0VUMCArIG9mZnNldCk7Cit9CisKK3N0YXRpYyB2b2lkIG9tYXBfdW5tYXNrX2lycSh1bnNpZ25lZCBpbnQgaXJxKQoreworCWludCBvZmZzZXQgPSAoaXJxID4+IDUpIDw8IDU7CisKKwlpZiAoaXJxID49IDY0KSB7CisJCWlycSAlPSA2NDsKKwl9IGVsc2UgaWYgKGlycSA+PSAzMikgeworCQlpcnEgJT0gMzI7CisJfQorCisJb21hcF93cml0ZWwoMSA8PCBpcnEsIGlycV9iYW5rc1swXS5iYXNlX3JlZyArIElOVENfTUlSX0NMRUFSMCArIG9mZnNldCk7Cit9CisKK3N0YXRpYyB2b2lkIG9tYXBfbWFza19hY2tfaXJxKHVuc2lnbmVkIGludCBpcnEpCit7CisJb21hcF9tYXNrX2lycShpcnEpOworCW9tYXBfYWNrX2lycShpcnEpOworfQorCitzdGF0aWMgc3RydWN0IGlycWNoaXAgb21hcF9pcnFfY2hpcCA9IHsKKwkuYWNrCT0gb21hcF9tYXNrX2Fja19pcnEsCisJLm1hc2sJPSBvbWFwX21hc2tfaXJxLAorCS51bm1hc2sJPSBvbWFwX3VubWFza19pcnEsCit9OworCitzdGF0aWMgdm9pZCBfX2luaXQgb21hcF9pcnFfYmFua19pbml0X29uZShzdHJ1Y3Qgb21hcF9pcnFfYmFuayAqYmFuaykKK3sKKwl1bnNpZ25lZCBsb25nIHRtcDsKKworCXRtcCA9IG9tYXBfcmVhZGwoYmFuay0+YmFzZV9yZWcgKyBJTlRDX1JFVklTSU9OKSAmIDB4ZmY7CisJcHJpbnRrKEtFUk5fSU5GTyAiSVJROiBGb3VuZCBhbiBJTlRDIGF0IDB4JTA4bHggIgorCQkJICIocmV2aXNpb24gJWxkLiVsZCkgd2l0aCAlZCBpbnRlcnJ1cHRzXG4iLAorCQkJIGJhbmstPmJhc2VfcmVnLCB0bXAgPj4gNCwgdG1wICYgMHhmLCBiYW5rLT5ucl9pcnFzKTsKKworCXRtcCA9IG9tYXBfcmVhZGwoYmFuay0+YmFzZV9yZWcgKyBJTlRDX1NZU0NPTkZJRyk7CisJdG1wIHw9IDEgPDwgMTsJLyogc29mdCByZXNldCAqLworCW9tYXBfd3JpdGVsKHRtcCwgYmFuay0+YmFzZV9yZWcgKyBJTlRDX1NZU0NPTkZJRyk7CisKKwl3aGlsZSAoIShvbWFwX3JlYWRsKGJhbmstPmJhc2VfcmVnICsgSU5UQ19TWVNTVEFUVVMpICYgMHgxKSkKKwkJLyogV2FpdCBmb3IgcmVzZXQgdG8gY29tcGxldGUgKi87Cit9CisKK3ZvaWQgX19pbml0IG9tYXBfaW5pdF9pcnEodm9pZCkKK3sKKwl1bnNpZ25lZCBsb25nIG5yX2lycXMgPSAwOworCXVuc2lnbmVkIGludCBucl9iYW5rcyA9IDA7CisJaW50IGk7CisKKwlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShpcnFfYmFua3MpOyBpKyspIHsKKwkJc3RydWN0IG9tYXBfaXJxX2JhbmsgKmJhbmsgPSBpcnFfYmFua3MgKyBpOworCisJCS8qIFhYWCAqLworCQlpZiAoIWJhbmstPmJhc2VfcmVnKQorCQkJY29udGludWU7CisKKwkJb21hcF9pcnFfYmFua19pbml0X29uZShiYW5rKTsKKworCQlucl9pcnFzICs9IGJhbmstPm5yX2lycXM7CisJCW5yX2JhbmtzKys7CisJfQorCisJcHJpbnRrKEtFUk5fSU5GTyAiVG90YWwgb2YgJWxkIGludGVycnVwdHMgb24gJWQgYWN0aXZlIGNvbnRyb2xsZXIlc1xuIiwKKwkgICAgICAgbnJfaXJxcywgbnJfYmFua3MsIG5yX2JhbmtzID4gMSA/ICJzIiA6ICIiKTsKKworCWZvciAoaSA9IDA7IGkgPCBucl9pcnFzOyBpKyspIHsKKwkJc2V0X2lycV9jaGlwKGksICZvbWFwX2lycV9jaGlwKTsKKwkJc2V0X2lycV9oYW5kbGVyKGksIGRvX2xldmVsX0lSUSk7CisJCXNldF9pcnFfZmxhZ3MoaSwgSVJRRl9WQUxJRCk7CisJfQorfQorCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW9tYXAyL211eC5jIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi9tdXguYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lYTQ2NTQ4Ci0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi9tdXguYwpAQCAtMCwwICsxLDY1IEBACisvKgorICogbGludXgvYXJjaC9hcm0vbWFjaC1vbWFwMi9tdXguYworICoKKyAqIE9NQVAxIHBpbiBtdWx0aXBsZXhpbmcgY29uZmlndXJhdGlvbnMKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDMgLSAyMDA1IE5va2lhIENvcnBvcmF0aW9uCisgKgorICogV3JpdHRlbiBieSBUb255IExpbmRncmVuIDx0b255LmxpbmRncmVuQG5va2lhLmNvbT4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisgKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcgVVNBCisgKgorICovCisjaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorI2luY2x1ZGUgPGFzbS9zeXN0ZW0uaD4KKyNpbmNsdWRlIDxhc20vaW8uaD4KKyNpbmNsdWRlIDxsaW51eC9zcGlubG9jay5oPgorCisjaW5jbHVkZSA8YXNtL2FyY2gvbXV4Lmg+CisKKyNpZmRlZiBDT05GSUdfT01BUF9NVVgKKworLyogTk9URTogU2VlIG11eC5oIGZvciB0aGUgZW51bWVyYXRpb24gKi8KKworc3RydWN0IHBpbl9jb25maWcgX19pbml0ZGF0YV9vcl9tb2R1bGUgb21hcDI0eHhfcGluc1tdID0geworLyoKKyAqCWRlc2NyaXB0aW9uCQkJbXV4CW11eAlwdWxsCXB1bGwJZGVidWcKKyAqCQkJCQlvZmZzZXQJbW9kZQllbmEJdHlwZQorICovCisKKy8qIDI0eHggSTJDICovCitNVVhfQ0ZHXzI0WFgoIk0xOV8yNFhYX0kyQzFfU0NMIiwJMHgxMTEsCTAsCTAsCTAsCTEpCitNVVhfQ0ZHXzI0WFgoIkwxNV8yNFhYX0kyQzFfU0RBIiwJMHgxMTIsCTAsCTAsCTAsCTEpCitNVVhfQ0ZHXzI0WFgoIkoxNV8yNFhYX0kyQzJfU0NMIiwJMHgxMTMsCTAsCTAsCTAsCTEpCitNVVhfQ0ZHXzI0WFgoIkgxOV8yNFhYX0kyQzJfU0RBIiwJMHgxMTQsCTAsCTAsCTAsCTEpCisKKy8qIE1lbmVsYXVzIGludGVycnVwdCAqLworTVVYX0NGR18yNFhYKCJXMTlfMjRYWF9TWVNfTklSUSIsCTB4MTJjLAkwLAkxLAkxLAkxKQorCisvKiAyNHh4IEdQSU8gKi8KK01VWF9DRkdfMjRYWCgiWTIwXzI0WFhfR1BJTzYwIiwJCTB4MTJjLAkzLAkwLAkwLAkxKQorTVVYX0NGR18yNFhYKCJNMTVfMjRYWF9HUElPOTIiLAkJMHgxMGEsCTMsCTAsCTAsCTEpCisKK307CisKK2ludCBfX2luaXQgb21hcDJfbXV4X2luaXQodm9pZCkKK3sKKwlvbWFwX211eF9yZWdpc3RlcihvbWFwMjR4eF9waW5zLCBBUlJBWV9TSVpFKG9tYXAyNHh4X3BpbnMpKTsKKwlyZXR1cm4gMDsKK30KKworI2VuZGlmCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW9tYXAyL3ByY20uaCBiL2FyY2gvYXJtL21hY2gtb21hcDIvcHJjbS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJlYjg5YjkKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2FybS9tYWNoLW9tYXAyL3ByY20uaApAQCAtMCwwICsxLDQxOSBAQAorLyoKKyAqIHByY20uaCAtIEFjY2VzcyBkZWZpbmF0aW9ucyBmb3IgdXNlIGluIE9NQVAyNFhYIGNsb2NrIGFuZCBwb3dlciBtYW5hZ2VtZW50CisgKgorICogQ29weXJpZ2h0IChDKSAyMDA1IFRleGFzIEluc3RydW1lbnRzLCBJbmMuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3IFVTQQorICovCisKKyNpZm5kZWYgX19BU01fQVJNX0FSQ0hfRFBNX1BSQ01fSAorI2RlZmluZSBfX0FTTV9BUk1fQVJDSF9EUE1fUFJDTV9ICisKKy8qIFNFVF9QRVJGT1JNQU5DRV9MRVZFTCBQQVJBTUVURVJTICovCisjZGVmaW5lIFBSQ01fSEFMRl9TUEVFRCAxCisjZGVmaW5lIFBSQ01fRlVMTF9TUEVFRCAyCisKKyNpZm5kZWYgX19BU1NFTUJMRVJfXworCisjZGVmaW5lIFBSQ01fUkVHMzIob2Zmc2V0KQlfX1JFRzMyKE9NQVAyNFhYX1BSQ01fQkFTRSArIChvZmZzZXQpKQorCisjZGVmaW5lIFBSQ01fUkVWSVNJT04JCVBSQ01fUkVHMzIoMHgwMDApCisjZGVmaW5lIFBSQ01fU1lTQ09ORklHCQlQUkNNX1JFRzMyKDB4MDEwKQorI2RlZmluZSBQUkNNX0lSUVNUQVRVU19NUFUJUFJDTV9SRUczMigweDAxOCkKKyNkZWZpbmUgUFJDTV9JUlFFTkFCTEVfTVBVCVBSQ01fUkVHMzIoMHgwMUMpCisjZGVmaW5lIFBSQ01fVk9MVENUUkwJCVBSQ01fUkVHMzIoMHgwNTApCisjZGVmaW5lIFBSQ01fVk9MVFNUCQlQUkNNX1JFRzMyKDB4MDU0KQorI2RlZmluZSBQUkNNX0NMS1NSQ19DVFJMCVBSQ01fUkVHMzIoMHgwNjApCisjZGVmaW5lIFBSQ01fQ0xLT1VUX0NUUkwJUFJDTV9SRUczMigweDA3MCkKKyNkZWZpbmUgUFJDTV9DTEtFTVVMX0NUUkwJUFJDTV9SRUczMigweDA3OCkKKyNkZWZpbmUgUFJDTV9DTEtDRkdfQ1RSTAlQUkNNX1JFRzMyKDB4MDgwKQorI2RlZmluZSBQUkNNX0NMS0NGR19TVEFUVVMJUFJDTV9SRUczMigweDA4NCkKKyNkZWZpbmUgUFJDTV9WT0xUU0VUVVAJCVBSQ01fUkVHMzIoMHgwOTApCisjZGVmaW5lIFBSQ01fQ0xLU1NFVFVQCQlQUkNNX1JFRzMyKDB4MDk0KQorI2RlZmluZSBQUkNNX1BPTENUUkwJCVBSQ01fUkVHMzIoMHgwOTgpCisKKy8qIEdFTkVSQUwgUFVSUE9TRSAqLworI2RlZmluZSBHRU5FUkFMX1BVUlBPU0UxCVBSQ01fUkVHMzIoMHgwQjApCisjZGVmaW5lIEdFTkVSQUxfUFVSUE9TRTIJUFJDTV9SRUczMigweDBCNCkKKyNkZWZpbmUgR0VORVJBTF9QVVJQT1NFMwlQUkNNX1JFRzMyKDB4MEI4KQorI2RlZmluZSBHRU5FUkFMX1BVUlBPU0U0CVBSQ01fUkVHMzIoMHgwQkMpCisjZGVmaW5lIEdFTkVSQUxfUFVSUE9TRTUJUFJDTV9SRUczMigweDBDMCkKKyNkZWZpbmUgR0VORVJBTF9QVVJQT1NFNglQUkNNX1JFRzMyKDB4MEM0KQorI2RlZmluZSBHRU5FUkFMX1BVUlBPU0U3CVBSQ01fUkVHMzIoMHgwQzgpCisjZGVmaW5lIEdFTkVSQUxfUFVSUE9TRTgJUFJDTV9SRUczMigweDBDQykKKyNkZWZpbmUgR0VORVJBTF9QVVJQT1NFOQlQUkNNX1JFRzMyKDB4MEQwKQorI2RlZmluZSBHRU5FUkFMX1BVUlBPU0UxMAlQUkNNX1JFRzMyKDB4MEQ0KQorI2RlZmluZSBHRU5FUkFMX1BVUlBPU0UxMQlQUkNNX1JFRzMyKDB4MEQ4KQorI2RlZmluZSBHRU5FUkFMX1BVUlBPU0UxMglQUkNNX1JFRzMyKDB4MERDKQorI2RlZmluZSBHRU5FUkFMX1BVUlBPU0UxMwlQUkNNX1JFRzMyKDB4MEUwKQorI2RlZmluZSBHRU5FUkFMX1BVUlBPU0UxNAlQUkNNX1JFRzMyKDB4MEU0KQorI2RlZmluZSBHRU5FUkFMX1BVUlBPU0UxNQlQUkNNX1JFRzMyKDB4MEU4KQorI2RlZmluZSBHRU5FUkFMX1BVUlBPU0UxNglQUkNNX1JFRzMyKDB4MEVDKQorI2RlZmluZSBHRU5FUkFMX1BVUlBPU0UxNwlQUkNNX1JFRzMyKDB4MEYwKQorI2RlZmluZSBHRU5FUkFMX1BVUlBPU0UxOAlQUkNNX1JFRzMyKDB4MEY0KQorI2RlZmluZSBHRU5FUkFMX1BVUlBPU0UxOQlQUkNNX1JFRzMyKDB4MEY4KQorI2RlZmluZSBHRU5FUkFMX1BVUlBPU0UyMAlQUkNNX1JFRzMyKDB4MEZDKQorCisvKiBNUFUgKi8KKyNkZWZpbmUgQ01fQ0xLU0VMX01QVQkJUFJDTV9SRUczMigweDE0MCkKKyNkZWZpbmUgQ01fQ0xLU1RDVFJMX01QVQlQUkNNX1JFRzMyKDB4MTQ4KQorI2RlZmluZSBSTV9SU1RTVF9NUFUJCVBSQ01fUkVHMzIoMHgxNTgpCisjZGVmaW5lIFBNX1dLREVQX01QVQkJUFJDTV9SRUczMigweDFDOCkKKyNkZWZpbmUgUE1fRVZHRU5DVFJMX01QVQlQUkNNX1JFRzMyKDB4MUQ0KQorI2RlZmluZSBQTV9FVkVHRU5PTlRJTV9NUFUJUFJDTV9SRUczMigweDFEOCkKKyNkZWZpbmUgUE1fRVZFR0VOT0ZGVElNX01QVQlQUkNNX1JFRzMyKDB4MURDKQorI2RlZmluZSBQTV9QV1NUQ1RSTF9NUFUJCVBSQ01fUkVHMzIoMHgxRTApCisjZGVmaW5lIFBNX1BXU1RTVF9NUFUJCVBSQ01fUkVHMzIoMHgxRTQpCisKKy8qIENPUkUgKi8KKyNkZWZpbmUgQ01fRkNMS0VOMV9DT1JFCQlQUkNNX1JFRzMyKDB4MjAwKQorI2RlZmluZSBDTV9GQ0xLRU4yX0NPUkUJCVBSQ01fUkVHMzIoMHgyMDQpCisjZGVmaW5lIENNX0ZDTEtFTjNfQ09SRQkJUFJDTV9SRUczMigweDIwOCkKKyNkZWZpbmUgQ01fSUNMS0VOMV9DT1JFCQlQUkNNX1JFRzMyKDB4MjEwKQorI2RlZmluZSBDTV9JQ0xLRU4yX0NPUkUJCVBSQ01fUkVHMzIoMHgyMTQpCisjZGVmaW5lIENNX0lDTEtFTjNfQ09SRQkJUFJDTV9SRUczMigweDIxOCkKKyNkZWZpbmUgQ01fSUNMS0VONF9DT1JFCQlQUkNNX1JFRzMyKDB4MjFDKQorI2RlZmluZSBDTV9JRExFU1QxX0NPUkUJCVBSQ01fUkVHMzIoMHgyMjApCisjZGVmaW5lIENNX0lETEVTVDJfQ09SRQkJUFJDTV9SRUczMigweDIyNCkKKyNkZWZpbmUgQ01fSURMRVNUM19DT1JFCQlQUkNNX1JFRzMyKDB4MjI4KQorI2RlZmluZSBDTV9JRExFU1Q0X0NPUkUJCVBSQ01fUkVHMzIoMHgyMkMpCisjZGVmaW5lIENNX0FVVE9JRExFMV9DT1JFCVBSQ01fUkVHMzIoMHgyMzApCisjZGVmaW5lIENNX0FVVE9JRExFMl9DT1JFCVBSQ01fUkVHMzIoMHgyMzQpCisjZGVmaW5lIENNX0FVVE9JRExFM19DT1JFCVBSQ01fUkVHMzIoMHgyMzgpCisjZGVmaW5lIENNX0FVVE9JRExFNF9DT1JFCVBSQ01fUkVHMzIoMHgyM0MpCisjZGVmaW5lIENNX0NMS1NFTDFfQ09SRQkJUFJDTV9SRUczMigweDI0MCkKKyNkZWZpbmUgQ01fQ0xLU0VMMl9DT1JFCQlQUkNNX1JFRzMyKDB4MjQ0KQorI2RlZmluZSBDTV9DTEtTVENUUkxfQ09SRQlQUkNNX1JFRzMyKDB4MjQ4KQorI2RlZmluZSBQTV9XS0VOMV9DT1JFCQlQUkNNX1JFRzMyKDB4MkEwKQorI2RlZmluZSBQTV9XS0VOMl9DT1JFCQlQUkNNX1JFRzMyKDB4MkE0KQorI2RlZmluZSBQTV9XS1NUMV9DT1JFCQlQUkNNX1JFRzMyKDB4MkIwKQorI2RlZmluZSBQTV9XS1NUMl9DT1JFCQlQUkNNX1JFRzMyKDB4MkI0KQorI2RlZmluZSBQTV9XS0RFUF9DT1JFCQlQUkNNX1JFRzMyKDB4MkM4KQorI2RlZmluZSBQTV9QV1NUQ1RSTF9DT1JFCVBSQ01fUkVHMzIoMHgyRTApCisjZGVmaW5lIFBNX1BXU1RTVF9DT1JFCQlQUkNNX1JFRzMyKDB4MkU0KQorCisvKiBHRlggKi8KKyNkZWZpbmUgQ01fRkNMS0VOX0dGWAkJUFJDTV9SRUczMigweDMwMCkKKyNkZWZpbmUgQ01fSUNMS0VOX0dGWAkJUFJDTV9SRUczMigweDMxMCkKKyNkZWZpbmUgQ01fSURMRVNUX0dGWAkJUFJDTV9SRUczMigweDMyMCkKKyNkZWZpbmUgQ01fQ0xLU0VMX0dGWAkJUFJDTV9SRUczMigweDM0MCkKKyNkZWZpbmUgQ01fQ0xLU1RDVFJMX0dGWAlQUkNNX1JFRzMyKDB4MzQ4KQorI2RlZmluZSBSTV9SU1RDVFJMX0dGWAkJUFJDTV9SRUczMigweDM1MCkKKyNkZWZpbmUgUk1fUlNUU1RfR0ZYCQlQUkNNX1JFRzMyKDB4MzU4KQorI2RlZmluZSBQTV9XS0RFUF9HRlgJCVBSQ01fUkVHMzIoMHgzQzgpCisjZGVmaW5lIFBNX1BXU1RDVFJMX0dGWAkJUFJDTV9SRUczMigweDNFMCkKKyNkZWZpbmUgUE1fUFdTVFNUX0dGWAkJUFJDTV9SRUczMigweDNFNCkKKworLyogV0FLRS1VUCAqLworI2RlZmluZSBDTV9GQ0xLRU5fV0tVUAkJUFJDTV9SRUczMigweDQwMCkKKyNkZWZpbmUgQ01fSUNMS0VOX1dLVVAJCVBSQ01fUkVHMzIoMHg0MTApCisjZGVmaW5lIENNX0lETEVTVF9XS1VQCQlQUkNNX1JFRzMyKDB4NDIwKQorI2RlZmluZSBDTV9BVVRPSURMRV9XS1VQCVBSQ01fUkVHMzIoMHg0MzApCisjZGVmaW5lIENNX0NMS1NFTF9XS1VQCQlQUkNNX1JFRzMyKDB4NDQwKQorI2RlZmluZSBSTV9SU1RDVFJMX1dLVVAJCVBSQ01fUkVHMzIoMHg0NTApCisjZGVmaW5lIFJNX1JTVFRJTUVfV0tVUAkJUFJDTV9SRUczMigweDQ1NCkKKyNkZWZpbmUgUk1fUlNUU1RfV0tVUAkJUFJDTV9SRUczMigweDQ1OCkKKyNkZWZpbmUgUE1fV0tFTl9XS1VQCQlQUkNNX1JFRzMyKDB4NEEwKQorI2RlZmluZSBQTV9XS1NUX1dLVVAJCVBSQ01fUkVHMzIoMHg0QjApCisKKy8qIENMT0NLUyAqLworI2RlZmluZSBDTV9DTEtFTl9QTEwJCVBSQ01fUkVHMzIoMHg1MDApCisjZGVmaW5lIENNX0lETEVTVF9DS0dFTgkJUFJDTV9SRUczMigweDUyMCkKKyNkZWZpbmUgQ01fQVVUT0lETEVfUExMCQlQUkNNX1JFRzMyKDB4NTMwKQorI2RlZmluZSBDTV9DTEtTRUwxX1BMTAkJUFJDTV9SRUczMigweDU0MCkKKyNkZWZpbmUgQ01fQ0xLU0VMMl9QTEwJCVBSQ01fUkVHMzIoMHg1NDQpCisKKy8qIERTUCAqLworI2RlZmluZSBDTV9GQ0xLRU5fRFNQCQlQUkNNX1JFRzMyKDB4ODAwKQorI2RlZmluZSBDTV9JQ0xLRU5fRFNQCQlQUkNNX1JFRzMyKDB4ODEwKQorI2RlZmluZSBDTV9JRExFU1RfRFNQCQlQUkNNX1JFRzMyKDB4ODIwKQorI2RlZmluZSBDTV9BVVRPSURMRV9EU1AJCVBSQ01fUkVHMzIoMHg4MzApCisjZGVmaW5lIENNX0NMS1NFTF9EU1AJCVBSQ01fUkVHMzIoMHg4NDApCisjZGVmaW5lIENNX0NMS1NUQ1RSTF9EU1AJUFJDTV9SRUczMigweDg0OCkKKyNkZWZpbmUgUk1fUlNUQ1RSTF9EU1AJCVBSQ01fUkVHMzIoMHg4NTApCisjZGVmaW5lIFJNX1JTVFNUX0RTUAkJUFJDTV9SRUczMigweDg1OCkKKyNkZWZpbmUgUE1fV0tFTl9EU1AJCVBSQ01fUkVHMzIoMHg4QTApCisjZGVmaW5lIFBNX1dLREVQX0RTUAkJUFJDTV9SRUczMigweDhDOCkKKyNkZWZpbmUgUE1fUFdTVENUUkxfRFNQCQlQUkNNX1JFRzMyKDB4OEUwKQorI2RlZmluZSBQTV9QV1NUU1RfRFNQCQlQUkNNX1JFRzMyKDB4OEU0KQorI2RlZmluZSBQUkNNX0lSUVNUQVRVU19EU1AJUFJDTV9SRUczMigweDhGMCkKKyNkZWZpbmUgUFJDTV9JUlFFTkFCTEVfRFNQCVBSQ01fUkVHMzIoMHg4RjQpCisKKy8qIElWQSAqLworI2RlZmluZSBQUkNNX0lSUVNUQVRVU19JVkEJUFJDTV9SRUczMigweDhGOCkKKyNkZWZpbmUgUFJDTV9JUlFFTkFCTEVfSVZBCVBSQ01fUkVHMzIoMHg4RkMpCisKKy8qIE1vZGVtIG9uIDI0MzAgKi8KKyNkZWZpbmUgQ01fRkNMS0VOX01ETQkJUFJDTV9SRUczMigweEMwMCkKKyNkZWZpbmUgQ01fSUNMS0VOX01ETQkJUFJDTV9SRUczMigweEMxMCkKKyNkZWZpbmUgQ01fSURMRVNUX01ETQkJUFJDTV9SRUczMigweEMyMCkKKyNkZWZpbmUgQ01fQ0xLU0VMX01ETQkJUFJDTV9SRUczMigweEM0MCkKKworLyogRklYTUU6IE1vdmUgdG8gaGVhZGVyIGZvciAyNDMwICovCisjZGVmaW5lIERJU1BfQkFTRQkJKE9NQVAyNFhYX0w0X0lPX0JBU0UrMHg1MDAwMCkKKyNkZWZpbmUgRElTUF9SRUczMihvZmZzZXQpCV9fUkVHMzIoRElTUF9CQVNFICsgKG9mZnNldCkpCisKKyNkZWZpbmUgR1BNQ19CQVNFCQkoT01BUDI0WFhfR1BNQ19CQVNFKQorI2RlZmluZSBHUE1DX1JFRzMyKG9mZnNldCkJX19SRUczMihHUE1DX0JBU0UgKyAob2Zmc2V0KSkKKworI2RlZmluZSBHUFQxX0JBU0UJCShPTUFQMjRYWF9HUFQxKQorI2RlZmluZSBHUFQxX1JFRzMyKG9mZnNldCkJX19SRUczMihHUFQxX0JBU0UgKyAob2Zmc2V0KSkKKworLyogTWlzYyBzeXNjb25maWcgKi8KKyNkZWZpbmUgRElTUENfU1lTQ09ORklHCQlESVNQX1JFRzMyKDB4NDEwKQorI2RlZmluZSBTUElfQkFTRQkJKE9NQVAyNFhYX0w0X0lPX0JBU0UrMHg5ODAwMCkKKyNkZWZpbmUgTUNTUEkxX1NZU0NPTkZJRwlfX1JFRzMyKFNQSV9CQVNFICsgMHgxMCkKKyNkZWZpbmUgTUNTUEkyX1NZU0NPTkZJRwlfX1JFRzMyKFNQSV9CQVNFKzB4MjAwMCArIDB4MTApCisKKy8vI2RlZmluZSBEU1BfTU1VX1NZU0NPTkZJRwkweDVBMDAwMDEwCisjZGVmaW5lIENBTUVSQV9NTVVfU1lTQ09ORklHCV9fUkVHMzIoRElTUF9CQVNFKzB4MkMxMCkKKy8vI2RlZmluZSBJVkFfTU1VX1NZU0NPTkZJRwkweDVEMDAwMDEwCisvLyNkZWZpbmUgRFNQX0RNQV9TWVNDT05GSUcJMHgwMEZDQzAyQworI2RlZmluZSBDQU1FUkFfRE1BX1NZU0NPTkZJRwlfX1JFRzMyKERJU1BfQkFTRSsweDI4MkMpCisjZGVmaW5lIFNZU1RFTV9ETUFfU1lTQ09ORklHCV9fUkVHMzIoRElTUF9CQVNFKzB4NjAyQykKKyNkZWZpbmUgR1BNQ19TWVNDT05GSUcJCUdQTUNfUkVHMzIoMHgwMTApCisjZGVmaW5lIE1BSUxCT1hFU19TWVNDT05GSUcJX19SRUczMihPTUFQMjRYWF9MNF9JT19CQVNFKzB4OTQwMTApCisjZGVmaW5lIFVBUlQxX1NZU0NPTkZJRwkJX19SRUczMihPTUFQMjRYWF9MNF9JT19CQVNFKzB4NkEwNTQpCisjZGVmaW5lIFVBUlQyX1NZU0NPTkZJRwkJX19SRUczMihPTUFQMjRYWF9MNF9JT19CQVNFKzB4NkMwNTQpCisjZGVmaW5lIFVBUlQzX1NZU0NPTkZJRwkJX19SRUczMihPTUFQMjRYWF9MNF9JT19CQVNFKzB4NkUwNTQpCisvLyNkZWZpbmUgSVZBX1NZU0NPTkZJRwkJMHg1QzA2MDAxMAorI2RlZmluZSBTRFJDX1NZU0NPTkZJRwkJX19SRUczMihPTUFQMjRYWF9TRFJDX0JBU0UrMHgxMCkKKyNkZWZpbmUgU01TX1NZU0NPTkZJRwkJX19SRUczMihPTUFQMjRYWF9TTVNfQkFTRSsweDEwKQorI2RlZmluZSBTU0lfU1lTQ09ORklHCQlfX1JFRzMyKERJU1BfQkFTRSsweDgwMTApCisvLyNkZWZpbmUgVkxZTlFfU1lTQ09ORklHCTB4NjdGRkZFMTAKKworLyogcmt3IC0gZ29vZCBjYW5uaWRhdGVzIGZvciBQTV8gdG8gc3RhcnQgd2hhdCBubSB3YXMgdHJ5aW5nICovCisjZGVmaW5lIE9NQVAyNFhYX0dQVDIJCShPTUFQMjRYWF9MNF9JT19CQVNFKzB4MkEwMDApCisjZGVmaW5lIE9NQVAyNFhYX0dQVDMJCShPTUFQMjRYWF9MNF9JT19CQVNFKzB4NzgwMDApCisjZGVmaW5lIE9NQVAyNFhYX0dQVDQJCShPTUFQMjRYWF9MNF9JT19CQVNFKzB4N0EwMDApCisjZGVmaW5lIE9NQVAyNFhYX0dQVDUJCShPTUFQMjRYWF9MNF9JT19CQVNFKzB4N0MwMDApCisjZGVmaW5lIE9NQVAyNFhYX0dQVDYJCShPTUFQMjRYWF9MNF9JT19CQVNFKzB4N0UwMDApCisjZGVmaW5lIE9NQVAyNFhYX0dQVDcJCShPTUFQMjRYWF9MNF9JT19CQVNFKzB4ODAwMDApCisjZGVmaW5lIE9NQVAyNFhYX0dQVDgJCShPTUFQMjRYWF9MNF9JT19CQVNFKzB4ODIwMDApCisjZGVmaW5lIE9NQVAyNFhYX0dQVDkJCShPTUFQMjRYWF9MNF9JT19CQVNFKzB4ODQwMDApCisjZGVmaW5lIE9NQVAyNFhYX0dQVDEwCQkoT01BUDI0WFhfTDRfSU9fQkFTRSsweDg2MDAwKQorI2RlZmluZSBPTUFQMjRYWF9HUFQxMQkJKE9NQVAyNFhYX0w0X0lPX0JBU0UrMHg4ODAwMCkKKyNkZWZpbmUgT01BUDI0WFhfR1BUMTIJCShPTUFQMjRYWF9MNF9JT19CQVNFKzB4OEEwMDApCisKKyNkZWZpbmUgR1BUSU1FUjFfU1lTQ09ORklHCUdQVDFfUkVHMzIoMHgwMTApCisjZGVmaW5lIEdQVElNRVIyX1NZU0NPTkZJRwlfX1JFRzMyKE9NQVAyNFhYX0dQVDIgKyAweDEwKQorI2RlZmluZSBHUFRJTUVSM19TWVNDT05GSUcJX19SRUczMihPTUFQMjRYWF9HUFQzICsgMHgxMCkKKyNkZWZpbmUgR1BUSU1FUjRfU1lTQ09ORklHCV9fUkVHMzIoT01BUDI0WFhfR1BUNCArIDB4MTApCisjZGVmaW5lIEdQVElNRVI1X1NZU0NPTkZJRwlfX1JFRzMyKE9NQVAyNFhYX0dQVDUgKyAweDEwKQorI2RlZmluZSBHUFRJTUVSNl9TWVNDT05GSUcJX19SRUczMihPTUFQMjRYWF9HUFQ2ICsgMHgxMCkKKyNkZWZpbmUgR1BUSU1FUjdfU1lTQ09ORklHCV9fUkVHMzIoT01BUDI0WFhfR1BUNyArIDB4MTApCisjZGVmaW5lIEdQVElNRVI4X1NZU0NPTkZJRwlfX1JFRzMyKE9NQVAyNFhYX0dQVDggKyAweDEwKQorI2RlZmluZSBHUFRJTUVSOV9TWVNDT05GSUcJX19SRUczMihPTUFQMjRYWF9HUFQ5ICsgMHgxMCkKKyNkZWZpbmUgR1BUSU1FUjEwX1NZU0NPTkZJRwlfX1JFRzMyKE9NQVAyNFhYX0dQVDEwICsgMHgxMCkKKyNkZWZpbmUgR1BUSU1FUjExX1NZU0NPTkZJRwlfX1JFRzMyKE9NQVAyNFhYX0dQVDExICsgMHgxMCkKKyNkZWZpbmUgR1BUSU1FUjEyX1NZU0NPTkZJRwlfX1JFRzMyKE9NQVAyNFhYX0dQVDEyICsgMHgxMCkKKworI2RlZmluZSBHUElPWF9CQVNFKFgpCQkoT01BUDI0WFhfR1BJT19CQVNFKygweDIwMDAqKChYKS0xKSkpCisKKyNkZWZpbmUgR1BJTzFfU1lTQ09ORklHCQlfX1JFRzMyKChHUElPWF9CQVNFKDEpKzB4MTApKQorI2RlZmluZSBHUElPMl9TWVNDT05GSUcJCV9fUkVHMzIoKEdQSU9YX0JBU0UoMikrMHgxMCkpCisjZGVmaW5lIEdQSU8zX1NZU0NPTkZJRwkJX19SRUczMigoR1BJT1hfQkFTRSgzKSsweDEwKSkKKyNkZWZpbmUgR1BJTzRfU1lTQ09ORklHCQlfX1JFRzMyKChHUElPWF9CQVNFKDQpKzB4MTApKQorCisvKiBHUCBUSU1FUiAxICovCisjZGVmaW5lIEdQVElNRVIxX1RJU1RBVAkJR1BUMV9SRUczMigweDAxNCkKKyNkZWZpbmUgR1BUSU1FUjFfVElTUgkJR1BUMV9SRUczMigweDAxOCkKKyNkZWZpbmUgR1BUSU1FUjFfVElFUgkJR1BUMV9SRUczMigweDAxQykKKyNkZWZpbmUgR1BUSU1FUjFfVFdFUgkJR1BUMV9SRUczMigweDAyMCkKKyNkZWZpbmUgR1BUSU1FUjFfVENMUgkJR1BUMV9SRUczMigweDAyNCkKKyNkZWZpbmUgR1BUSU1FUjFfVENSUgkJR1BUMV9SRUczMigweDAyOCkKKyNkZWZpbmUgR1BUSU1FUjFfVExEUgkJR1BUMV9SRUczMigweDAyQykKKyNkZWZpbmUgR1BUSU1FUjFfVFRHUgkJR1BUMV9SRUczMigweDAzMCkKKyNkZWZpbmUgR1BUSU1FUjFfVFdQUwkJR1BUMV9SRUczMigweDAzNCkKKyNkZWZpbmUgR1BUSU1FUjFfVE1BUgkJR1BUMV9SRUczMigweDAzOCkKKyNkZWZpbmUgR1BUSU1FUjFfVENBUjEJCUdQVDFfUkVHMzIoMHgwM0MpCisjZGVmaW5lIEdQVElNRVIxX1RTSUNSCQlHUFQxX1JFRzMyKDB4MDQwKQorI2RlZmluZSBHUFRJTUVSMV9UQ0FSMgkJR1BUMV9SRUczMigweDA0NCkKKworLyogcmt3IC0tIGJhc2UgZml4IHVwIHBsZWFzZS4uLiAqLworI2RlZmluZSBHUFRJTUVSM19USVNSCQlfX1JFRzMyKE9NQVAyNFhYX0w0X0lPX0JBU0UrMHg3ODAxOCkKKworLyogU0RSQyAqLworI2RlZmluZSBTRFJDX0RMTEFfQ1RSTAkJX19SRUczMihPTUFQMjRYWF9TRFJDX0JBU0UrMHgwNjApCisjZGVmaW5lIFNEUkNfRExMQV9TVEFUVVMJX19SRUczMihPTUFQMjRYWF9TRFJDX0JBU0UrMHgwNjQpCisjZGVmaW5lIFNEUkNfRExMQl9DVFJMCQlfX1JFRzMyKE9NQVAyNFhYX1NEUkNfQkFTRSsweDA2OCkKKyNkZWZpbmUgU0RSQ19ETExCX1NUQVRVUwlfX1JFRzMyKE9NQVAyNFhYX1NEUkNfQkFTRSsweDA2QykKKyNkZWZpbmUgU0RSQ19QT1dFUgkJX19SRUczMihPTUFQMjRYWF9TRFJDX0JBU0UrMHgwNzApCisjZGVmaW5lIFNEUkNfTVJfMAkJX19SRUczMihPTUFQMjRYWF9TRFJDX0JBU0UrMHgwODQpCisKKy8qIEdQSU8gMSAqLworI2RlZmluZSBHUElPMV9CQVNFCQlHUElPWF9CQVNFKDEpCisjZGVmaW5lIEdQSU8xX1JFRzMyKG9mZnNldCkJX19SRUczMihHUElPMV9CQVNFICsgKG9mZnNldCkpCisjZGVmaW5lIEdQSU8xX0lSUUVOQUJMRTEJR1BJTzFfUkVHMzIoMHgwMUMpCisjZGVmaW5lIEdQSU8xX0lSUVNUQVRVUzEJR1BJTzFfUkVHMzIoMHgwMTgpCisjZGVmaW5lIEdQSU8xX0lSUUVOQUJMRTIJR1BJTzFfUkVHMzIoMHgwMkMpCisjZGVmaW5lIEdQSU8xX0lSUVNUQVRVUzIJR1BJTzFfUkVHMzIoMHgwMjgpCisjZGVmaW5lIEdQSU8xX1dBS0VVUEVOQUJMRQlHUElPMV9SRUczMigweDAyMCkKKyNkZWZpbmUgR1BJTzFfUklTSU5HREVURUNUCUdQSU8xX1JFRzMyKDB4MDQ4KQorI2RlZmluZSBHUElPMV9EQVRBSU4JCUdQSU8xX1JFRzMyKDB4MDM4KQorI2RlZmluZSBHUElPMV9PRQkJR1BJTzFfUkVHMzIoMHgwMzQpCisjZGVmaW5lIEdQSU8xX0RBVEFPVVQJCUdQSU8xX1JFRzMyKDB4MDNDKQorCisvKiBHUElPMiAqLworI2RlZmluZSBHUElPMl9CQVNFCQlHUElPWF9CQVNFKDIpCisjZGVmaW5lIEdQSU8yX1JFRzMyKG9mZnNldCkJX19SRUczMihHUElPMl9CQVNFICsgKG9mZnNldCkpCisjZGVmaW5lIEdQSU8yX0lSUUVOQUJMRTEJR1BJTzJfUkVHMzIoMHgwMUMpCisjZGVmaW5lIEdQSU8yX0lSUVNUQVRVUzEJR1BJTzJfUkVHMzIoMHgwMTgpCisjZGVmaW5lIEdQSU8yX0lSUUVOQUJMRTIJR1BJTzJfUkVHMzIoMHgwMkMpCisjZGVmaW5lIEdQSU8yX0lSUVNUQVRVUzIJR1BJTzJfUkVHMzIoMHgwMjgpCisjZGVmaW5lIEdQSU8yX1dBS0VVUEVOQUJMRQlHUElPMl9SRUczMigweDAyMCkKKyNkZWZpbmUgR1BJTzJfUklTSU5HREVURUNUCUdQSU8yX1JFRzMyKDB4MDQ4KQorI2RlZmluZSBHUElPMl9EQVRBSU4JCUdQSU8yX1JFRzMyKDB4MDM4KQorI2RlZmluZSBHUElPMl9PRQkJR1BJTzJfUkVHMzIoMHgwMzQpCisjZGVmaW5lIEdQSU8yX0RBVEFPVVQJCUdQSU8yX1JFRzMyKDB4MDNDKQorCisvKiBHUElPIDMgKi8KKyNkZWZpbmUgR1BJTzNfQkFTRQkJR1BJT1hfQkFTRSgzKQorI2RlZmluZSBHUElPM19SRUczMihvZmZzZXQpCV9fUkVHMzIoR1BJTzNfQkFTRSArIChvZmZzZXQpKQorI2RlZmluZSBHUElPM19JUlFFTkFCTEUxCUdQSU8zX1JFRzMyKDB4MDFDKQorI2RlZmluZSBHUElPM19JUlFTVEFUVVMxCUdQSU8zX1JFRzMyKDB4MDE4KQorI2RlZmluZSBHUElPM19JUlFFTkFCTEUyCUdQSU8zX1JFRzMyKDB4MDJDKQorI2RlZmluZSBHUElPM19JUlFTVEFUVVMyCUdQSU8zX1JFRzMyKDB4MDI4KQorI2RlZmluZSBHUElPM19XQUtFVVBFTkFCTEUJR1BJTzNfUkVHMzIoMHgwMjApCisjZGVmaW5lIEdQSU8zX1JJU0lOR0RFVEVDVAlHUElPM19SRUczMigweDA0OCkKKyNkZWZpbmUgR1BJTzNfRkFMTElOR0RFVEVDVAlHUElPM19SRUczMigweDA0QykKKyNkZWZpbmUgR1BJTzNfREFUQUlOCQlHUElPM19SRUczMigweDAzOCkKKyNkZWZpbmUgR1BJTzNfT0UJCUdQSU8zX1JFRzMyKDB4MDM0KQorI2RlZmluZSBHUElPM19EQVRBT1VUCQlHUElPM19SRUczMigweDAzQykKKyNkZWZpbmUgR1BJTzNfREVCT1VOQ0VOQUJMRQlHUElPM19SRUczMigweDA1MCkKKyNkZWZpbmUgR1BJTzNfREVCT1VOQ0lOR1RJTUUJR1BJTzNfUkVHMzIoMHgwNTQpCisKKy8qIEdQSU8gNCAqLworI2RlZmluZSBHUElPNF9CQVNFCQlHUElPWF9CQVNFKDQpCisjZGVmaW5lIEdQSU80X1JFRzMyKG9mZnNldCkJX19SRUczMihHUElPNF9CQVNFICsgKG9mZnNldCkpCisjZGVmaW5lIEdQSU80X0lSUUVOQUJMRTEJR1BJTzRfUkVHMzIoMHgwMUMpCisjZGVmaW5lIEdQSU80X0lSUVNUQVRVUzEJR1BJTzRfUkVHMzIoMHgwMTgpCisjZGVmaW5lIEdQSU80X0lSUUVOQUJMRTIJR1BJTzRfUkVHMzIoMHgwMkMpCisjZGVmaW5lIEdQSU80X0lSUVNUQVRVUzIJR1BJTzRfUkVHMzIoMHgwMjgpCisjZGVmaW5lIEdQSU80X1dBS0VVUEVOQUJMRQlHUElPNF9SRUczMigweDAyMCkKKyNkZWZpbmUgR1BJTzRfUklTSU5HREVURUNUCUdQSU80X1JFRzMyKDB4MDQ4KQorI2RlZmluZSBHUElPNF9GQUxMSU5HREVURUNUCUdQSU80X1JFRzMyKDB4MDRDKQorI2RlZmluZSBHUElPNF9EQVRBSU4JCUdQSU80X1JFRzMyKDB4MDM4KQorI2RlZmluZSBHUElPNF9PRQkJR1BJTzRfUkVHMzIoMHgwMzQpCisjZGVmaW5lIEdQSU80X0RBVEFPVVQJCUdQSU80X1JFRzMyKDB4MDNDKQorI2RlZmluZSBHUElPNF9ERUJPVU5DRU5BQkxFCUdQSU80X1JFRzMyKDB4MDUwKQorI2RlZmluZSBHUElPNF9ERUJPVU5DSU5HVElNRQlHUElPNF9SRUczMigweDA1NCkKKworCisvKiBJTyBDT05GSUcgKi8KKyNkZWZpbmUgQ09OVFJPTF9CQVNFCQkoT01BUDI0WFhfQ1RSTF9CQVNFKQorI2RlZmluZSBDT05UUk9MX1JFRzMyKG9mZnNldCkJX19SRUczMihDT05UUk9MX0JBU0UgKyAob2Zmc2V0KSkKKworI2RlZmluZSBDT05UUk9MX1BBRENPTkZfU1BJMV9OQ1MyCUNPTlRST0xfUkVHMzIoMHgxMDQpCisjZGVmaW5lIENPTlRST0xfUEFEQ09ORl9TWVNfWFRBTE9VVAlDT05UUk9MX1JFRzMyKDB4MTM0KQorI2RlZmluZSBDT05UUk9MX1BBRENPTkZfVUFSVDFfUlgJQ09OVFJPTF9SRUczMigweDBDOCkKKyNkZWZpbmUgQ09OVFJPTF9QQURDT05GX01DQlNQMV9EWAlDT05UUk9MX1JFRzMyKDB4MTBDKQorI2RlZmluZSBDT05UUk9MX1BBRENPTkZfR1BNQ19OQ1M0CUNPTlRST0xfUkVHMzIoMHgwOTApCisjZGVmaW5lIENPTlRST0xfUEFEQ09ORl9EU1NfRDUJCUNPTlRST0xfUkVHMzIoMHgwQjgpCisjZGVmaW5lIENPTlRST0xfUEFEQ09ORl9EU1NfRDkJCUNPTlRST0xfUkVHMzIoMHgwQkMpCisjZGVmaW5lIENPTlRST0xfUEFEQ09ORl9EU1NfRDEzCQlDT05UUk9MX1JFRzMyKDB4MEMwKQorI2RlZmluZSBDT05UUk9MX1BBRENPTkZfRFNTX1ZTWU5DCUNPTlRST0xfUkVHMzIoMHgwQ0MpCisKKy8qIENPTlRST0wgKi8KKyNkZWZpbmUgQ09OVFJPTF9ERVZDT05GCQlDT05UUk9MX1JFRzMyKDB4Mjc0KQorCisvKiBJTlRFUlJVUFQgQ09OVFJPTExFUiAqLworI2RlZmluZSBJTlRDX0JBU0UJCShPTUFQMjRYWF9MNF9JT19CQVNFKzB4ZmUwMDApCisjZGVmaW5lIElOVENfUkVHMzIob2Zmc2V0KQlfX1JFRzMyKElOVENfQkFTRSArIChvZmZzZXQpKQorCisjZGVmaW5lIElOVEMxX1VfQkFTRQkJSU5UQ19SRUczMigweDAwMCkKKyNkZWZpbmUgSU5UQ19NSVIwCQlJTlRDX1JFRzMyKDB4MDg0KQorI2RlZmluZSBJTlRDX01JUl9TRVQwCQlJTlRDX1JFRzMyKDB4MDhDKQorI2RlZmluZSBJTlRDX01JUl9DTEVBUjAJCUlOVENfUkVHMzIoMHgwODgpCisjZGVmaW5lIElOVENfSVNSX0NMRUFSMAkJSU5UQ19SRUczMigweDA5NCkKKyNkZWZpbmUgSU5UQ19NSVIxCQlJTlRDX1JFRzMyKDB4MEE0KQorI2RlZmluZSBJTlRDX01JUl9TRVQxCQlJTlRDX1JFRzMyKDB4MEFDKQorI2RlZmluZSBJTlRDX01JUl9DTEVBUjEJCUlOVENfUkVHMzIoMHgwQTgpCisjZGVmaW5lIElOVENfSVNSX0NMRUFSMQkJSU5UQ19SRUczMigweDBCNCkKKyNkZWZpbmUgSU5UQ19NSVIyCQlJTlRDX1JFRzMyKDB4MEM0KQorI2RlZmluZSBJTlRDX01JUl9TRVQyCQlJTlRDX1JFRzMyKDB4MENDKQorI2RlZmluZSBJTlRDX01JUl9DTEVBUjIJCUlOVENfUkVHMzIoMHgwQzgpCisjZGVmaW5lIElOVENfSVNSX0NMRUFSMgkJSU5UQ19SRUczMigweDBENCkKKyNkZWZpbmUgSU5UQ19TSVJfSVJRCQlJTlRDX1JFRzMyKDB4MDQwKQorI2RlZmluZSBJTlRDX0NPTlRST0wJCUlOVENfUkVHMzIoMHgwNDgpCisjZGVmaW5lIElOVENfSUxSMTEJCUlOVENfUkVHMzIoMHgxMkMpCisjZGVmaW5lIElOVENfSUxSMzIJCUlOVENfUkVHMzIoMHgxODApCisjZGVmaW5lIElOVENfSUxSMzcJCUlOVENfUkVHMzIoMHgxOTQpCisjZGVmaW5lIElOVENfU1lTQ09ORklHCQlJTlRDX1JFRzMyKDB4MDEwKQorCisvKiBSQU0gRklSRVdBTEwgKi8KKyNkZWZpbmUgUkFNRldfQkFTRQkJKDB4NjgwMDUwMDApCisjZGVmaW5lIFJBTUZXX1JFRzMyKG9mZnNldCkJX19SRUczMihSQU1GV19CQVNFICsgKG9mZnNldCkpCisKKyNkZWZpbmUgUkFNRldfUkVRSU5GT1BFUk0wCVJBTUZXX1JFRzMyKDB4MDQ4KQorI2RlZmluZSBSQU1GV19SRUFEUEVSTTAJCVJBTUZXX1JFRzMyKDB4MDUwKQorI2RlZmluZSBSQU1GV19XUklURVBFUk0wCVJBTUZXX1JFRzMyKDB4MDU4KQorCisvKiBHUE1DIENTMSBGUEdBIE9OIFVTRVIgSU5URVJGQUNFIE1PRFVMRSAqLworLy8jZGVmaW5lIERFQlVHX0JPQVJEX0xFRF9SRUdJU1RFUiAweDA0MDAwMDE0CisKKy8qIEdQTUMgQ1MwICovCisjZGVmaW5lIEdQTUNfQ09ORklHMV8wCQlHUE1DX1JFRzMyKDB4MDYwKQorI2RlZmluZSBHUE1DX0NPTkZJRzJfMAkJR1BNQ19SRUczMigweDA2NCkKKyNkZWZpbmUgR1BNQ19DT05GSUczXzAJCUdQTUNfUkVHMzIoMHgwNjgpCisjZGVmaW5lIEdQTUNfQ09ORklHNF8wCQlHUE1DX1JFRzMyKDB4MDZDKQorI2RlZmluZSBHUE1DX0NPTkZJRzVfMAkJR1BNQ19SRUczMigweDA3MCkKKyNkZWZpbmUgR1BNQ19DT05GSUc2XzAJCUdQTUNfUkVHMzIoMHgwNzQpCisjZGVmaW5lIEdQTUNfQ09ORklHN18wCQlHUE1DX1JFRzMyKDB4MDc4KQorCisvKiBEU1MgKi8KKyNkZWZpbmUgRFNTX0NPTlRST0wJCURJU1BfUkVHMzIoMHgwNDApCisjZGVmaW5lIERJU1BDX0NPTlRST0wJCURJU1BfUkVHMzIoMHg0NDApCisjZGVmaW5lIERJU1BDX1NZU1NUQVRVUwkJRElTUF9SRUczMigweDQxNCkKKyNkZWZpbmUgRElTUENfSVJRU1RBVFVTCQlESVNQX1JFRzMyKDB4NDE4KQorI2RlZmluZSBESVNQQ19JUlFFTkFCTEUJCURJU1BfUkVHMzIoMHg0MUMpCisjZGVmaW5lIERJU1BDX0NPTkZJRwkJRElTUF9SRUczMigweDQ0NCkKKyNkZWZpbmUgRElTUENfREVGQVVMVF9DT0xPUjAJRElTUF9SRUczMigweDQ0QykKKyNkZWZpbmUgRElTUENfREVGQVVMVF9DT0xPUjEJRElTUF9SRUczMigweDQ1MCkKKyNkZWZpbmUgRElTUENfVFJBTlNfQ09MT1IwCURJU1BfUkVHMzIoMHg0NTQpCisjZGVmaW5lIERJU1BDX1RSQU5TX0NPTE9SMQlESVNQX1JFRzMyKDB4NDU4KQorI2RlZmluZSBESVNQQ19MSU5FX05VTUJFUglESVNQX1JFRzMyKDB4NDYwKQorI2RlZmluZSBESVNQQ19USU1JTkdfSAkJRElTUF9SRUczMigweDQ2NCkKKyNkZWZpbmUgRElTUENfVElNSU5HX1YJCURJU1BfUkVHMzIoMHg0NjgpCisjZGVmaW5lIERJU1BDX1BPTF9GUkVRCQlESVNQX1JFRzMyKDB4NDZDKQorI2RlZmluZSBESVNQQ19ESVZJU09SCQlESVNQX1JFRzMyKDB4NDcwKQorI2RlZmluZSBESVNQQ19TSVpFX0RJRwkJRElTUF9SRUczMigweDQ3OCkKKyNkZWZpbmUgRElTUENfU0laRV9MQ0QJCURJU1BfUkVHMzIoMHg0N0MpCisjZGVmaW5lIERJU1BDX0dGWF9CQTAJCURJU1BfUkVHMzIoMHg0ODApCisjZGVmaW5lIERJU1BDX0dGWF9CQTEJCURJU1BfUkVHMzIoMHg0ODQpCisjZGVmaW5lIERJU1BDX0dGWF9QT1NJVElPTglESVNQX1JFRzMyKDB4NDg4KQorI2RlZmluZSBESVNQQ19HRlhfU0laRQkJRElTUF9SRUczMigweDQ4QykKKyNkZWZpbmUgRElTUENfR0ZYX0FUVFJJQlVURVMJRElTUF9SRUczMigweDRBMCkKKyNkZWZpbmUgRElTUENfR0ZYX0ZJRk9fVEhSRVNIT0xECURJU1BfUkVHMzIoMHg0QTQpCisjZGVmaW5lIERJU1BDX0dGWF9ST1dfSU5DCURJU1BfUkVHMzIoMHg0QUMpCisjZGVmaW5lIERJU1BDX0dGWF9QSVhFTF9JTkMJRElTUF9SRUczMigweDRCMCkKKyNkZWZpbmUgRElTUENfR0ZYX1dJTkRPV19TS0lQCURJU1BfUkVHMzIoMHg0QjQpCisjZGVmaW5lIERJU1BDX0dGWF9UQUJMRV9CQQlESVNQX1JFRzMyKDB4NEI4KQorI2RlZmluZSBESVNQQ19EQVRBX0NZQ0xFMQlESVNQX1JFRzMyKDB4NUQ0KQorI2RlZmluZSBESVNQQ19EQVRBX0NZQ0xFMglESVNQX1JFRzMyKDB4NUQ4KQorI2RlZmluZSBESVNQQ19EQVRBX0NZQ0xFMwlESVNQX1JFRzMyKDB4NURDKQorCisvKiBXYWtlIHVwIGRlZmluZSBmb3IgYm9hcmQgKi8KKyNkZWZpbmUgR1BJTzk3CQkJKDEgPDwgMSkKKyNkZWZpbmUgR1BJTzg4CQkJKDEgPDwgMjQpCisKKyNlbmRpZiAvKiBfX0FTU0VNQkxFUl9fICovCisKKyNlbmRpZgorCisKKworCisKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtb21hcDIvc2VyaWFsLmMgYi9hcmNoL2FybS9tYWNoLW9tYXAyL3NlcmlhbC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmY0ZGYwNGYKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2FybS9tYWNoLW9tYXAyL3NlcmlhbC5jCkBAIC0wLDAgKzEsMTgwIEBACisvKgorICogYXJjaC9hcm0vbWFjaC1vbWFwL29tYXAyL3NlcmlhbC5jCisgKgorICogT01BUDIgc2VyaWFsIHN1cHBvcnQuCisgKgorICogQ29weXJpZ2h0IChDKSAyMDA1IE5va2lhIENvcnBvcmF0aW9uCisgKiBBdXRob3I6IFBhdWwgTXVuZHQgPHBhdWwubXVuZHRAbm9raWEuY29tPgorICoKKyAqIEJhc2VkIG9mZiBvZiBhcmNoL2FybS9tYWNoLW9tYXAvb21hcDEvc2VyaWFsLmMKKyAqCisgKiBUaGlzIGZpbGUgaXMgc3ViamVjdCB0byB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZS4gU2VlIHRoZSBmaWxlICJDT1BZSU5HIiBpbiB0aGUgbWFpbiBkaXJlY3Rvcnkgb2YgdGhpcyBhcmNoaXZlCisgKiBmb3IgbW9yZSBkZXRhaWxzLgorICovCisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorI2luY2x1ZGUgPGxpbnV4L3NlcmlhbF84MjUwLmg+CisjaW5jbHVkZSA8bGludXgvc2VyaWFsX3JlZy5oPgorCisjaW5jbHVkZSA8YXNtL2lvLmg+CisjaW5jbHVkZSA8YXNtL2hhcmR3YXJlL2Nsb2NrLmg+CisKKyNpbmNsdWRlIDxhc20vYXJjaC9jb21tb24uaD4KKyNpbmNsdWRlIDxhc20vYXJjaC9ib2FyZC5oPgorCitzdGF0aWMgc3RydWN0IGNsayAqIHVhcnQxX2ljayA9IE5VTEw7CitzdGF0aWMgc3RydWN0IGNsayAqIHVhcnQxX2ZjayA9IE5VTEw7CitzdGF0aWMgc3RydWN0IGNsayAqIHVhcnQyX2ljayA9IE5VTEw7CitzdGF0aWMgc3RydWN0IGNsayAqIHVhcnQyX2ZjayA9IE5VTEw7CitzdGF0aWMgc3RydWN0IGNsayAqIHVhcnQzX2ljayA9IE5VTEw7CitzdGF0aWMgc3RydWN0IGNsayAqIHVhcnQzX2ZjayA9IE5VTEw7CisKK3N0YXRpYyBzdHJ1Y3QgcGxhdF9zZXJpYWw4MjUwX3BvcnQgc2VyaWFsX3BsYXRmb3JtX2RhdGFbXSA9IHsKKwl7CisJCS5tZW1iYXNlCT0gKGNoYXIgKilJT19BRERSRVNTKE9NQVBfVUFSVDFfQkFTRSksCisJCS5tYXBiYXNlCT0gKHVuc2lnbmVkIGxvbmcpT01BUF9VQVJUMV9CQVNFLAorCQkuaXJxCQk9IDcyLAorCQkuZmxhZ3MJCT0gVVBGX0JPT1RfQVVUT0NPTkYsCisJCS5pb3R5cGUJCT0gVVBJT19NRU0sCisJCS5yZWdzaGlmdAk9IDIsCisJCS51YXJ0Y2xrCT0gT01BUDE2WFhfQkFTRV9CQVVEICogMTYsCisJfSwgeworCQkubWVtYmFzZQk9IChjaGFyICopSU9fQUREUkVTUyhPTUFQX1VBUlQyX0JBU0UpLAorCQkubWFwYmFzZQk9ICh1bnNpZ25lZCBsb25nKU9NQVBfVUFSVDJfQkFTRSwKKwkJLmlycQkJPSA3MywKKwkJLmZsYWdzCQk9IFVQRl9CT09UX0FVVE9DT05GLAorCQkuaW90eXBlCQk9IFVQSU9fTUVNLAorCQkucmVnc2hpZnQJPSAyLAorCQkudWFydGNsawk9IE9NQVAxNlhYX0JBU0VfQkFVRCAqIDE2LAorCX0sIHsKKwkJLm1lbWJhc2UJPSAoY2hhciAqKUlPX0FERFJFU1MoT01BUF9VQVJUM19CQVNFKSwKKwkJLm1hcGJhc2UJPSAodW5zaWduZWQgbG9uZylPTUFQX1VBUlQzX0JBU0UsCisJCS5pcnEJCT0gNzQsCisJCS5mbGFncwkJPSBVUEZfQk9PVF9BVVRPQ09ORiwKKwkJLmlvdHlwZQkJPSBVUElPX01FTSwKKwkJLnJlZ3NoaWZ0CT0gMiwKKwkJLnVhcnRjbGsJPSBPTUFQMTZYWF9CQVNFX0JBVUQgKiAxNiwKKwl9LCB7CisJCS5mbGFncwkJPSAwCisJfQorfTsKKworc3RhdGljIGlubGluZSB1bnNpZ25lZCBpbnQgc2VyaWFsX3JlYWRfcmVnKHN0cnVjdCBwbGF0X3NlcmlhbDgyNTBfcG9ydCAqdXAsCisJCQkJCSAgIGludCBvZmZzZXQpCit7CisJb2Zmc2V0IDw8PSB1cC0+cmVnc2hpZnQ7CisJcmV0dXJuICh1bnNpZ25lZCBpbnQpX19yYXdfcmVhZGIodXAtPm1lbWJhc2UgKyBvZmZzZXQpOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgc2VyaWFsX3dyaXRlX3JlZyhzdHJ1Y3QgcGxhdF9zZXJpYWw4MjUwX3BvcnQgKnAsIGludCBvZmZzZXQsCisJCQkJICAgIGludCB2YWx1ZSkKK3sKKwlvZmZzZXQgPDw9IHAtPnJlZ3NoaWZ0OworCV9fcmF3X3dyaXRlYih2YWx1ZSwgKHVuc2lnbmVkIGxvbmcpKHAtPm1lbWJhc2UgKyBvZmZzZXQpKTsKK30KKworLyoKKyAqIEludGVybmFsIFVBUlRzIG5lZWQgdG8gYmUgaW5pdGlhbGl6ZWQgZm9yIHRoZSA4MjUwIGF1dG9jb25maWcgdG8gd29yaworICogcHJvcGVybHkuIE5vdGUgdGhhdCB0aGUgVFggd2F0ZXJtYXJrIGluaXRpYWxpemF0aW9uIG1heSBub3QgYmUgbmVlZGVkCisgKiBvbmNlIHRoZSA4MjUwLmMgd2F0ZXJtYXJrIGhhbmRsaW5nIGNvZGUgaXMgbWVyZ2VkLgorICovCitzdGF0aWMgaW5saW5lIHZvaWQgX19pbml0IG9tYXBfc2VyaWFsX3Jlc2V0KHN0cnVjdCBwbGF0X3NlcmlhbDgyNTBfcG9ydCAqcCkKK3sKKwlzZXJpYWxfd3JpdGVfcmVnKHAsIFVBUlRfT01BUF9NRFIxLCAweDA3KTsKKwlzZXJpYWxfd3JpdGVfcmVnKHAsIFVBUlRfT01BUF9TQ1IsIDB4MDgpOworCXNlcmlhbF93cml0ZV9yZWcocCwgVUFSVF9PTUFQX01EUjEsIDB4MDApOworCXNlcmlhbF93cml0ZV9yZWcocCwgVUFSVF9PTUFQX1NZU0MsIDB4MDEpOworfQorCit2b2lkIF9faW5pdCBvbWFwX3NlcmlhbF9pbml0KCkKK3sKKwlpbnQgaTsKKwljb25zdCBzdHJ1Y3Qgb21hcF91YXJ0X2NvbmZpZyAqaW5mbzsKKworCS8qCisJICogTWFrZSBzdXJlIHRoZSBzZXJpYWwgcG9ydHMgYXJlIG11eGVkIG9uIGF0IHRoaXMgcG9pbnQuCisJICogWW91IGhhdmUgdG8gbXV4IHRoZW0gb2ZmIGluIGRldmljZSBkcml2ZXJzIGxhdGVyIG9uCisJICogaWYgbm90IG5lZWRlZC4KKwkgKi8KKworCWluZm8gPSBvbWFwX2dldF9jb25maWcoT01BUF9UQUdfVUFSVCwKKwkJCSAgICAgICBzdHJ1Y3Qgb21hcF91YXJ0X2NvbmZpZyk7CisKKwlpZiAoaW5mbyA9PSBOVUxMKQorCQlyZXR1cm47CisKKwlmb3IgKGkgPSAwOyBpIDwgT01BUF9NQVhfTlJfUE9SVFM7IGkrKykgeworCQlzdHJ1Y3QgcGxhdF9zZXJpYWw4MjUwX3BvcnQgKnAgPSBzZXJpYWxfcGxhdGZvcm1fZGF0YSArIGk7CisKKwkJaWYgKCEoaW5mby0+ZW5hYmxlZF91YXJ0cyAmICgxIDw8IGkpKSkgeworCQkJcC0+bWVtYmFzZSA9IDA7CisJCQlwLT5tYXBiYXNlID0gMDsKKwkJCWNvbnRpbnVlOworCQl9CisKKwkJc3dpdGNoIChpKSB7CisJCWNhc2UgMDoKKwkJCXVhcnQxX2ljayA9IGNsa19nZXQoTlVMTCwgInVhcnQxX2ljayIpOworCQkJaWYgKElTX0VSUih1YXJ0MV9pY2spKQorCQkJCXByaW50aygiQ291bGQgbm90IGdldCB1YXJ0MV9pY2tcbiIpOworCQkJZWxzZSB7CisJCQkJY2xrX3VzZSh1YXJ0MV9pY2spOworCQkJfQorCisJCQl1YXJ0MV9mY2sgPSBjbGtfZ2V0KE5VTEwsICJ1YXJ0MV9mY2siKTsKKwkJCWlmIChJU19FUlIodWFydDFfZmNrKSkKKwkJCQlwcmludGsoIkNvdWxkIG5vdCBnZXQgdWFydDFfZmNrXG4iKTsKKwkJCWVsc2UgeworCQkJCWNsa191c2UodWFydDFfZmNrKTsKKwkJCX0KKwkJCWJyZWFrOworCQljYXNlIDE6CisJCQl1YXJ0Ml9pY2sgPSBjbGtfZ2V0KE5VTEwsICJ1YXJ0Ml9pY2siKTsKKwkJCWlmIChJU19FUlIodWFydDJfaWNrKSkKKwkJCQlwcmludGsoIkNvdWxkIG5vdCBnZXQgdWFydDJfaWNrXG4iKTsKKwkJCWVsc2UgeworCQkJCWNsa191c2UodWFydDJfaWNrKTsKKwkJCX0KKworCQkJdWFydDJfZmNrID0gY2xrX2dldChOVUxMLCAidWFydDJfZmNrIik7CisJCQlpZiAoSVNfRVJSKHVhcnQyX2ZjaykpCisJCQkJcHJpbnRrKCJDb3VsZCBub3QgZ2V0IHVhcnQyX2Zja1xuIik7CisJCQllbHNlIHsKKwkJCQljbGtfdXNlKHVhcnQyX2Zjayk7CisJCQl9CisJCQlicmVhazsKKwkJY2FzZSAyOgorCQkJdWFydDNfaWNrID0gY2xrX2dldChOVUxMLCAidWFydDNfaWNrIik7CisJCQlpZiAoSVNfRVJSKHVhcnQzX2ljaykpCisJCQkJcHJpbnRrKCJDb3VsZCBub3QgZ2V0IHVhcnQzX2lja1xuIik7CisJCQllbHNlIHsKKwkJCQljbGtfdXNlKHVhcnQzX2ljayk7CisJCQl9CisKKwkJCXVhcnQzX2ZjayA9IGNsa19nZXQoTlVMTCwgInVhcnQzX2ZjayIpOworCQkJaWYgKElTX0VSUih1YXJ0M19mY2spKQorCQkJCXByaW50aygiQ291bGQgbm90IGdldCB1YXJ0M19mY2tcbiIpOworCQkJZWxzZSB7CisJCQkJY2xrX3VzZSh1YXJ0M19mY2spOworCQkJfQorCQkJYnJlYWs7CisJCX0KKworCQlvbWFwX3NlcmlhbF9yZXNldChwKTsKKwl9Cit9CisKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIHNlcmlhbF9kZXZpY2UgPSB7CisJLm5hbWUJCQk9ICJzZXJpYWw4MjUwIiwKKwkuaWQJCQk9IDAsCisJLmRldgkJCT0geworCQkucGxhdGZvcm1fZGF0YQk9IHNlcmlhbF9wbGF0Zm9ybV9kYXRhLAorCX0sCit9OworCitzdGF0aWMgaW50IF9faW5pdCBvbWFwX2luaXQodm9pZCkKK3sKKwlyZXR1cm4gcGxhdGZvcm1fZGV2aWNlX3JlZ2lzdGVyKCZzZXJpYWxfZGV2aWNlKTsKK30KK2FyY2hfaW5pdGNhbGwob21hcF9pbml0KTsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtb21hcDIvc3JhbS1mbi5TIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi9zcmFtLWZuLlMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmE4NjllMgotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXJtL21hY2gtb21hcDIvc3JhbS1mbi5TCkBAIC0wLDAgKzEsMzMzIEBACisvKgorICogbGludXgvYXJjaC9hcm0vbWFjaC1vbWFwMS9zcmFtLlMKKyAqCisgKiBPbWFwMiBzcGVjaWZpYyBmdW5jdGlvbnMgdGhhdCBuZWVkIHRvIGJlIHJ1biBpbiBpbnRlcm5hbCBTUkFNCisgKgorICogKEMpIENvcHlyaWdodCAyMDA0CisgKiBUZXhhcyBJbnN0cnVtZW50cywgPHd3dy50aS5jb20+CisgKiBSaWNoYXJkIFdvb2RydWZmIDxyLXdvb2RydWZmMkB0aS5jb20+CisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mCisgKiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIC9QVVJQT1NFLiBTZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwKKyAqIE1BIDAyMTExLTEzMDcgVVNBCisgKi8KKyNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KKyNpbmNsdWRlIDxsaW51eC9saW5rYWdlLmg+CisjaW5jbHVkZSA8YXNtL2Fzc2VtYmxlci5oPgorI2luY2x1ZGUgPGFzbS9hcmNoL2lvLmg+CisjaW5jbHVkZSA8YXNtL2hhcmR3YXJlLmg+CisKKyNpbmNsdWRlIDxhc20vYXJjaC9wcmNtLmg+CisKKyNkZWZpbmUgVElNRVJfMzJLU1lOQ1RfQ1JfVglJT19BRERSRVNTKE9NQVAyNFhYXzMyS1NZTkNUX0JBU0UgKyAweDAxMCkKKworI2RlZmluZSBDTV9DTEtTRUwyX1BMTF9WCUlPX0FERFJFU1MoT01BUDI0WFhfUFJDTV9CQVNFICsgMHg1NDQpCisjZGVmaW5lIFBSQ01fVk9MVENUUkxfVgkJSU9fQUREUkVTUyhPTUFQMjRYWF9QUkNNX0JBU0UgKyAweDA1MCkKKyNkZWZpbmUgUFJDTV9DTEtDRkdfQ1RSTF9WCUlPX0FERFJFU1MoT01BUDI0WFhfUFJDTV9CQVNFICsgMHgwODApCisjZGVmaW5lIENNX0NMS0VOX1BMTF9WCQlJT19BRERSRVNTKE9NQVAyNFhYX1BSQ01fQkFTRSArIDB4NTAwKQorI2RlZmluZSBDTV9JRExFU1RfQ0tHRU5fVglJT19BRERSRVNTKE9NQVAyNFhYX1BSQ01fQkFTRSArIDB4NTIwKQorI2RlZmluZSBDTV9DTEtTRUwxX1BMTF9WCUlPX0FERFJFU1MoT01BUDI0WFhfUFJDTV9CQVNFICsgMHg1NDApCisKKyNkZWZpbmUgU0RSQ19ETExBX0NUUkxfVglJT19BRERSRVNTKE9NQVAyNFhYX1NEUkNfQkFTRSArIDB4MDYwKQorI2RlZmluZSBTRFJDX1JGUl9DVFJMX1YJCUlPX0FERFJFU1MoT01BUDI0WFhfU0RSQ19CQVNFICsgMHgwYTQpCisKKwkudGV4dAorCitFTlRSWShzcmFtX2Rkcl9pbml0KQorCXN0bWZkCXNwISwge3IwIC0gcjEyLCBscn0JQCBzYXZlIHJlZ2lzdGVycyBvbiBzdGFjaworCisJbW92CXIxMiwgcjIJCQlAIGNhcHR1cmUgQ1MxIHZzIENTMAorCW1vdglyOCwgcjMJCQlAIGNhcHR1cmUgZm9yY2UgcGFyYW1ldGVyCisKKwkvKiBmcmVxdWVuY3kgc2hpZnQgZG93biAqLworCWxkcglyMiwgY21fY2xrc2VsMl9wbGwJQCBnZXQgYWRkcmVzcyBvZiBkcGxsb3V0IHJlZworCW1vdglyMywgIzB4MQkJQCB2YWx1ZSBmb3IgMXggb3BlcmF0aW9uCisJc3RyCXIzLCBbcjJdCQlAIGdvIHRvIEwxLWZyZXEgb3BlcmF0aW9uCisKKwkvKiB2b2x0YWdlIHNoaWZ0IGRvd24gKi8KKwltb3YgcjksICMweDEJCQlAIHNldCB1cCBmb3IgTDEgdm9sdGFnZSBjYWxsCisJYmwgdm9sdGFnZV9zaGlmdAkJQCBnbyBkcm9wIHZvbHRhZ2UKKworCS8qIGRsbCBsb2NrIG1vZGUgKi8KKwlsZHIJcjExLCBzZHJjX2RsbGFfY3RybAlAIGFkZHIgb2YgZGxsYSBjdHJsCisJbGRyCXIxMCwgW3IxMV0JCUAgZ2V0IGN1cnJlbnQgdmFsCisJY21wCXIxMiwgIzB4MQkJQCBjczEgYmFzZSAoMjQyMiBlczIuMDUvMSkKKwlhZGRlcQlyMTEsIHIxMSwgIzB4OAkJQCBpZiBjczEgYmFzZSwgbW92ZSB0byBETExCCisJbXZuCXI5LCAjMHg0CQlAIG1hc2sgdG8gZ2V0IGNsZWFyIGJpdDIKKwlhbmQJcjEwLCByMTAsIHI5CQlAIGNsZWFyIGJpdDIgZm9yIGxvY2sgbW9kZS4KKwlvcnIJcjEwLCByMTAsICMweDgJCUAgbWFrZSBzdXJlIERMTCBvbiAoZXMyIGJpdCBwb3MpCisJb3JyCXIxMCwgcjEwLCAjMHgyCQlAIDkwIGRlZ3JlZSBwaGFzZSBmb3IgYWxsIGJlbG93IDEzM01oegorCXN0cglyMTAsIFtyMTFdCQlAIGNvbW1pdCB0byBETExBX0NUUkwKKwlibAlpX2RsbF93YWl0CQlAIHdhaXQgZm9yIGRsbCB0byBsb2NrCisKKwkvKiBnZXQgZGxsIHZhbHVlICovCisJYWRkCXIxMSwgcjExLCAjMHg0CQlAIGdldCBhZGRyIG9mIHN0YXR1cyByZWcKKwlsZHIJcjEwLCBbcjExXQkJQCBnZXQgbG9ja2VkIHZhbHVlCisKKwkvKiB2b2x0YWdlIHNoaWZ0IHVwICovCisJbW92IHI5LCAjMHgwCQkJQCBzaGlmdCBiYWNrIHRvIEwwLXZvbHRhZ2UKKwlibCB2b2x0YWdlX3NoaWZ0CQlAIGdvIHJhaXNlIHZvbHRhZ2UKKworCS8qIGZyZXF1ZW5jeSBzaGlmdCB1cCAqLworCW1vdglyMywgIzB4MgkJQCB2YWx1ZSBmb3IgMnggb3BlcmF0aW9uCisJc3RyCXIzLCBbcjJdCQlAIGdvIHRvIEwwLWZyZXEgb3BlcmF0aW9uCisKKwkvKiByZXNldCBlbnRyeSBtb2RlIGZvciBkbGxjdHJsICovCisJc3ViCXIxMSwgcjExLCAjMHg0CQlAIG1vdmUgZnJvbSBzdGF0dXMgdG8gY3RybAorCWNtcAlyMTIsICMweDEJCUAgbm9ybWFsaXplIGlmIGNzMSBiYXNlZAorCXN1YmVxCXIxMSwgcjExLCAjMHg4CQlAIHBvc3NpYmx5IGJhY2sgdG8gRExMQQorCWNtcAlyOCwgIzB4MQkJQCBpZiBmb3JjZWQgdW5sb2NrIGV4aXQKKwlvcnJlcQlyMSwgcjEsICMweDQJCUAgbWFrZSBzdXJlIGV4aXQgd2l0aCB1bmxvY2tlZCB2YWx1ZQorCXN0cglyMSwgW3IxMV0JCUAgcmVzdG9yZSBETExBX0NUUkwgaGlnaCB2YWx1ZQorCWFkZAlyMTEsIHIxMSwgIzB4OAkJQCBtb3ZlIHRvIERMTEJfQ1RSTCBhZGRyCisJc3RyCXIxLCBbcjExXQkJQCBzZXQgdmFsdWUgRExMQl9DVFJMCisJYmwJaV9kbGxfd2FpdAkJQCB3YWl0IGZvciBwb3NzaWJsZSBsb2NrCisKKwkvKiBzZXQgdXAgZm9yIHJldHVybiwgRERSIHNob3VsZCBiZSBnb29kICovCisJc3RyIHIxMCwgW3IwXQkJCUAgd3JpdGUgZGxsX3N0YXR1cyBhbmQgcmV0dXJuIGNvdW50ZXIKKwlsZG1mZAlzcCEsIHtyMCAtIHIxMiwgcGN9CUAgcmVzdG9yZSByZWdzIGFuZCByZXR1cm4KKworCS8qIGVuc3VyZSB0aGUgRExMIGhhcyByZWxvY2tlZCAqLworaV9kbGxfd2FpdDoKKwltb3YJcjQsICMweDgwMAkJQCBkZWxheSBETEwgcmVsb2NrLCBtaW4gMHg0MDAgTDMgY2xvY2tzCitpX2RsbF9kZWxheToKKwlzdWJzCXI0LCByNCwgIzB4MQorCWJuZQlpX2RsbF9kZWxheQorCW1vdglwYywgbHIKKworCS8qCisJICogc2hpZnQgdXAgb3IgZG93biB2b2x0YWdlLCB1c2UgUjkgYXMgaW5wdXQgdG8gdGVsbCBsZXZlbC4KKwkgKiB3YWl0IGZvciBpdCB0byBmaW5pc2gsIHVzZSAzMmsgc3luYyBjb3VudGVyLCAxdGljaz0zMXVTLgorCSAqLwordm9sdGFnZV9zaGlmdDoKKwlsZHIJcjQsIHByY21fdm9sdGN0cmwJQCBnZXQgYWRkciBvZiB2b2x0IGN0cmwuCisJbGRyCXI1LCBbcjRdCQlAIGdldCB2YWx1ZS4KKwlsZHIJcjYsIHByY21fbWFza192YWwJQCBnZXQgdmFsdWUgb2YgbWFzaworCWFuZAlyNSwgcjUsIHI2CQlAIGFwcGx5IG1hc2sgdG8gY2xlYXIgYml0cworCW9ycglyNSwgcjUsIHI5CQlAIGJ1bGxkIHZhbHVlIGZvciBMMC9MMS12b2x0IG9wZXJhdGlvbi4KKwlzdHIJcjUsIFtyNF0JCUAgc2V0IHVwIGZvciBjaGFuZ2UuCisJbW92CXIzLCAjMHg0MDAwCQlAIGdldCB2YWwgZm9yIGZvcmNlCisJb3JyCXI1LCByNSwgcjMJCUAgYnVpbGQgdmFsdWUgZm9yIGZvcmNlCisJc3RyCXI1LCBbcjRdCQlAIEZvcmNlIHRyYW5zaXRpb24gdG8gTDEKKworCWxkcglyMywgdGltZXJfMzJrc3luY3RfY3IJQCBnZXQgYWRkciBvZiBjb3VudGVyCisJbGRyCXI1LCBbcjNdCQlAIGdldCB2YWx1ZQorCWFkZAlyNSwgcjUsICMweDMJCUAgZ2l2ZSBpdCBhdCBtb3N0IDkzdVMKK3ZvbHRfZGVsYXk6CisJbGRyCXI3LCBbcjNdCQlAIGdldCB0aW1lciB2YWx1ZQorCWNtcAlyNSwgcjcJCQlAIHRpbWUgdXA/CisJYmhpCXZvbHRfZGVsYXkJCUAgbm90IHlldC0+YnJhbmNoCisJbW92CXBjLCBscgkJCUAgYmFjayB0byBjYWxsZXIuCisKKy8qIHJlbGF0aXZlIGxvYWQgY29uc3RhbnRzICovCitjbV9jbGtzZWwyX3BsbDoKKwkud29yZCBDTV9DTEtTRUwyX1BMTF9WCitzZHJjX2RsbGFfY3RybDoKKwkud29yZCBTRFJDX0RMTEFfQ1RSTF9WCitwcmNtX3ZvbHRjdHJsOgorCS53b3JkIFBSQ01fVk9MVENUUkxfVgorcHJjbV9tYXNrX3ZhbDoKKwkud29yZCAweEZGRkYzRkZDCit0aW1lcl8zMmtzeW5jdF9jcjoKKwkud29yZCBUSU1FUl8zMktTWU5DVF9DUl9WCitFTlRSWShzcmFtX2Rkcl9pbml0X3N6KQorCS53b3JkCS4gLSBzcmFtX2Rkcl9pbml0CisKKy8qCisgKiBSZXByb2dyYW1zIG1lbW9yeSB0aW1pbmdzLgorICogcjAgPSBbUFJDTV9GVUxMIHwgUFJDTV9IQUxGXSByMSA9IFNEUkNfRExMQV9DVFJMIHZhbHVlIHIyID0gW0REUiB8IFNEUl0KKyAqIFBSQ01fRlVMTCA9IDIsIFBSQ01fSEFMRiA9IDEsIEREUiA9IDEsIFNEUiA9IDAKKyAqLworRU5UUlkoc3JhbV9yZXByb2dyYW1fc2RyYykKKwlzdG1mZAlzcCEsIHtyMCAtIHIxMCwgbHJ9CUAgc2F2ZSByZWdpc3RlcnMgb24gc3RhY2sKKwltb3YJcjMsICMweDAJCUAgY2xlYXIgZm9yIG1yYyBjYWxsCisJbWNyCXAxNSwgMCwgcjMsIGM3LCBjMTAsIDQJQCBtZW1vcnkgYmFycmllciwgZmluaXNoIEFSTSBTRFIvRERSCisJbm9wCisJbm9wCisJbGRyCXI2LCBkZHJfc2RyY19yZnJfY3RybAlAIGdldCBhZGRyIG9mIHJlZnJlc2ggcmVnCisJbGRyCXI1LCBbcjZdCQlAIGdldCB2YWx1ZQorCW1vdglyNSwgcjUsIGxzciAjOAkJQCBpc29sYXRlIHJmciBmaWVsZCBhbmQgZHJvcCBidXJzdAorCisJY21wCXIwLCAjMHgxCQlAIGdvaW5nIHRvIGhhbGYgc3BlZWQ/CisJbW92bmUJcjksICMweDAJCUAgaWYgdXAgc2V0IGZsYWcgdXAgZm9yIHByZSB1cCwgaGkgdm9sdAorCisJYmxuZQl2b2x0YWdlX3NoaWZ0X2MJCUAgYWRqdXN0IHZvbHRhZ2UKKworCWNtcAlyMCwgIzB4MQkJQCBnb2luZyB0byBoYWxmIHNwZWVkIChwb3N0IGJyYW5jaCBsaW5rKQorCW1vdmVxCXI1LCByNSwgbHNyICMxCQlAIGRpdmlkZSBieSAyIGlmIHRvIGhhbGYKKwltb3ZuZQlyNSwgcjUsIGxzbCAjMQkJQCBtdWx0IGJ5IDIgaWYgdG8gZnVsbAorCW1vdglyNSwgcjUsIGxzbCAjOAkJQCBwdXQgcmZyIGZpZWxkIGJhY2sgaW50byBwbGFjZQorCWFkZAlyNSwgcjUsICMweDEJCUAgdHVybiBvbiBidXJzdCBvZiAxCisJbGRyCXI0LCBkZHJfY21fY2xrc2VsMl9wbGwJQCBnZXQgYWRkcmVzcyBvZiBvdXQgcmVnCisJbGRyCXIzLCBbcjRdCQlAIGdldCBjdXJyIHZhbHVlCisJb3JyCXIzLCByMywgIzB4MworCWJpYwlyMywgcjMsICMweDMJCUAgY2xlYXIgbG93ZXIgYml0cworCW9ycglyMywgcjMsIHIwCQlAIG5ldyBzdGF0ZSB2YWx1ZQorCXN0cglyMywgW3I0XQkJQCBzZXQgbmV3IHN0YXRlIChwbGwveCwgeD0xIG9yIDIpCisJbm9wCisJbm9wCisKKwltb3ZlcQlyOSwgIzB4MQkJQCBpZiBzcGVlZCBkb3duLCBwb3N0IGRvd24sIGRyb3Agdm9sdAorCWJsZXEJdm9sdGFnZV9zaGlmdF9jCisKKwltY3IJcDE1LCAwLCByMywgYzcsIGMxMCwgNAlAIG1lbW9yeSBiYXJyaWVyCisJc3RyCXI1LCBbcjZdCQlAIHNldCBuZXcgUkZSXzEgdmFsdWUKKwlhZGQJcjYsIHI2LCAjMHgzMAkJQCBnZXQgUkZSXzIgYWRkcgorCXN0cglyNSwgW3I2XQkJQCBzZXQgUkZSXzIKKwlub3AKKwljbXAJcjIsICMweDEJCUAgKFNEUiBvciBERFIpIGRvIHdlIG5lZWQgdG8gYWRqdXN0IERMTAorCWJuZQlmcmVxX291dAkJQCBsZWF2ZSBpZiBTRFIsIG5vIERMTCBmdW5jdGlvbgorCisJLyogV2l0aCBERFIsIHdlIG5lZWQgdG8gdGFrZSBjYXJlIG9mIHRoZSBETEwgZm9yIHRoZSBmcmVxdWVuY3kgY2hhbmdlICovCisJbGRyCXIyLCBkZHJfc2RyY19kbGxhX2N0cmwJQCBhZGRyIG9mIGRsbGEgY3RybAorCXN0cglyMSwgW3IyXQkJQCB3cml0ZSBvdXQgbmV3IFNEUkNfRExMQV9DVFJMCisJYWRkCXIyLCByMiwgIzB4OAkJQCBhZGRyIHRvIFNEUkNfRExMQl9DVFJMCisJc3RyCXIxLCBbcjJdCQlAIGNvbW1pdCB0byBTRFJDX0RMTEJfQ1RSTAorCW1vdglyMSwgIzB4MjAwMAkJQCB3YWl0IERMTCByZWxvY2ssIG1pbiAweDQwMCBMMyBjbG9ja3MKK2RsbF93YWl0OgorCXN1YnMJcjEsIHIxLCAjMHgxCisJYm5lCWRsbF93YWl0CitmcmVxX291dDoKKwlsZG1mZAlzcCEsIHtyMCAtIHIxMCwgcGN9CUAgcmVzdG9yZSByZWdzIGFuZCByZXR1cm4KKworICAgIC8qCisgICAgICogc2hpZnQgdXAgb3IgZG93biB2b2x0YWdlLCB1c2UgUjkgYXMgaW5wdXQgdG8gdGVsbCBsZXZlbC4KKyAgICAgKgl3YWl0IGZvciBpdCB0byBmaW5pc2gsIHVzZSAzMmsgc3luYyBjb3VudGVyLCAxdGljaz0zMXVTLgorICAgICAqLwordm9sdGFnZV9zaGlmdF9jOgorCWxkcglyMTAsIGRkcl9wcmNtX3ZvbHRjdHJsCUAgZ2V0IGFkZHIgb2Ygdm9sdCBjdHJsCisJbGRyCXI4LCBbcjEwXQkJQCBnZXQgdmFsdWUKKwlsZHIJcjcsIGRkcl9wcmNtX21hc2tfdmFsCUAgZ2V0IHZhbHVlIG9mIG1hc2sKKwlhbmQJcjgsIHI4LCByNwkJQCBhcHBseSBtYXNrIHRvIGNsZWFyIGJpdHMKKwlvcnIJcjgsIHI4LCByOQkJQCBidWxsZCB2YWx1ZSBmb3IgTDAvTDEtdm9sdCBvcGVyYXRpb24uCisJc3RyCXI4LCBbcjEwXQkJQCBzZXQgdXAgZm9yIGNoYW5nZS4KKwltb3YJcjcsICMweDQwMDAJCUAgZ2V0IHZhbCBmb3IgZm9yY2UKKwlvcnIJcjgsIHI4LCByNwkJQCBidWlsZCB2YWx1ZSBmb3IgZm9yY2UKKwlzdHIJcjgsIFtyMTBdCQlAIEZvcmNlIHRyYW5zaXRpb24gdG8gTDEKKworCWxkcglyMTAsIGRkcl90aW1lcl8zMmtzeW5jdAlAIGdldCBhZGRyIG9mIGNvdW50ZXIKKwlsZHIJcjgsIFtyMTBdCQlAIGdldCB2YWx1ZQorCWFkZAlyOCwgcjgsICMweDIJCUAgZ2l2ZSBpdCBhdCBtb3N0IDYydVMgKG1pbiAzMSspCit2b2x0X2RlbGF5X2M6CisJbGRyCXI3LCBbcjEwXQkJQCBnZXQgdGltZXIgdmFsdWUKKwljbXAJcjgsIHI3CQkJQCB0aW1lIHVwPworCWJoaQl2b2x0X2RlbGF5X2MJCUAgbm90IHlldC0+YnJhbmNoCisJbW92CXBjLCBscgkJCUAgYmFjayB0byBjYWxsZXIKKworZGRyX2NtX2Nsa3NlbDJfcGxsOgorCS53b3JkIENNX0NMS1NFTDJfUExMX1YKK2Rkcl9zZHJjX2RsbGFfY3RybDoKKwkud29yZCBTRFJDX0RMTEFfQ1RSTF9WCitkZHJfc2RyY19yZnJfY3RybDoKKwkud29yZCBTRFJDX1JGUl9DVFJMX1YKK2Rkcl9wcmNtX3ZvbHRjdHJsOgorCS53b3JkIFBSQ01fVk9MVENUUkxfVgorZGRyX3ByY21fbWFza192YWw6CisJLndvcmQgMHhGRkZGM0ZGQworZGRyX3RpbWVyXzMya3N5bmN0OgorCS53b3JkIFRJTUVSXzMyS1NZTkNUX0NSX1YKKworRU5UUlkoc3JhbV9yZXByb2dyYW1fc2RyY19zeikKKwkud29yZAkuIC0gc3JhbV9yZXByb2dyYW1fc2RyYworCisvKgorICogU2V0IGRpdmlkZXJzIGFuZCBwbGwuIEFsc28gcmVjYWxjdWxhdGUgRExMIHZhbHVlIGZvciBERFIgYW5kIHVubG9jayBtb2RlLgorICovCitFTlRSWShzcmFtX3NldF9wcmNtKQorCXN0bWZkCXNwISwge3IwLXIxMiwgbHJ9CUAgcmVncyB0byBzdGFjaworCWFkcglyNCwgcGJlZ2luCQlAIGFkZHIgb2YgcHJlbG9hZCBzdGFydAorCWFkcglyOCwgcGVuZAkJQCBhZGRyIG9mIHByZWxvYWQgZW5kCisJbWNycglwMTUsIDEsIHI4LCByNCwgYzEyCUAgcHJlbG9hZCBpbnRvIGljYWNoZQorcGJlZ2luOgorCS8qIG1vdmUgaW50byBmYXN0IHJlbG9jayBieXBhc3MgKi8KKwlsZHIJcjgsIHBsbF9jdGwJCUAgZ2V0IGFkZHIKKwlsZHIJcjUsIFtyOF0JCUAgZ2V0IHZhbAorCW12bglyNiwgIzB4MwkJQCBjbGVhciBtYXNrCisJYW5kCXI1LCByNSwgcjYJCUAgY2xlYXIgZmllbGQKKwlvcnIJcjcsIHI1LCAjMHgyCQlAIGZhc3QgcmVsb2NrIHZhbAorCXN0cglyNywgW3I4XQkJQCBnbyB0byBmYXN0IHJlbG9jaworCWxkcglyNCwgcGxsX3N0YXQJCUAgYWRkciBvZiBzdGF0CitibG9jazoKKwkvKiB3YWl0IGZvciBieXBhc3MgKi8KKwlsZHIJcjgsIFtyNF0JCUAgc3RhdCB2YWx1ZQorCWFuZAlyOCwgcjgsICMweDMJCUAgbWFzayBmb3Igc3RhdAorCWNtcAlyOCwgIzB4MQkJQCB0aGVyZSB5ZXQKKwlibmUJYmxvY2sJCQlAIGxvb3AgaWYgbm90CisKKwkvKiBzZXQgbmV3IGRwbGwgZGl2aWRlcnMgX2FmdGVyXyBpbiBieXBhc3MgKi8KKwlsZHIJcjQsIHBsbF9kaXYJCUAgZ2V0IGFkZHIKKwlzdHIJcjAsIFtyNF0JCUAgc2V0IGRwbGwgY3RybCB2YWwKKworCWxkcglyNCwgc2V0X2NvbmZpZwkJQCBnZXQgYWRkcgorCW1vdglyOCwgIzEJCQlAIHZhbGlkIGNmZyBtc2sKKwlzdHIJcjgsIFtyNF0JCUAgbWFrZSBkaXZpZGVycyB0YWtlCisKKwltb3YJcjQsICMxMDAJCUAgZGVhZCBzcGluIGEgYml0Cit3YWl0X2FfYml0OgorCXN1YnMJcjQsIHI0LCAjMQkJQCBkZWMgbG9vcAorCWJuZQl3YWl0X2FfYml0CQlAIGRlbGF5IGRvbmU/CisKKwkvKiBjaGVjayBpZiBzdGF5aW5nIGluIGJ5cGFzcyAqLworCWNtcAlyMiwgIzB4MQkJQCBzdGF5IGluIGJ5cGFzcz8KKwliZXEJcGVuZAkJCUAganVtcCBvdmVyIGRwbGwgcmVsb2NrCisKKwkvKiByZWxvY2sgRFBMTCB3aXRoIG5ldyB2YWxzICovCisJbGRyCXI1LCBwbGxfc3RhdAkJQCBnZXQgYWRkcgorCWxkcglyNCwgcGxsX2N0bAkJQCBnZXQgYWRkcgorCW9ycglyOCwgcjcsICMweDMJCUAgdmFsIGZvciBsb2NrIGRwbGwKKwlzdHIJcjgsIFtyNF0JCUAgc2V0IHZhbAorCW1vdglyMCwgIzEwMDAJCUAgZGVhZCBzcGluIGEgYml0Cit3YWl0X21vcmU6CisJc3VicwlyMCwgcjAsICMxCQlAIGRlYyBsb29wCisJYm5lCXdhaXRfbW9yZQkJQCBkZWxheSBkb25lPword2FpdF9sb2NrOgorCWxkcglyOCwgW3I1XQkJQCBnZXQgbG9jayB2YWwKKwlhbmQJcjgsIHI4LCAjMwkJQCBpc29sYXRlIGZpZWxkCisJY21wCXI4LCAjMgkJCUAgbG9ja2VkPworCWJuZQl3YWl0X2xvY2sJCUAgd2FpdCBpZiBub3QKK3BlbmQ6CisJLyogdXBkYXRlIG1lbW9yeSB0aW1pbmdzICYgYnJpZWZseSBsb2NrIGRsbCAqLworCWxkcglyNCwgc2RyY19yZnIJCUAgZ2V0IGFkZHIKKwlzdHIJcjEsIFtyNF0JCUAgdXBkYXRlIHJlZnJlc2ggdGltaW5nCisJbGRyCXIxMSwgZGxsYV9jdHJsCQlAIGdldCBhZGRyIG9mIERMTEEgY3RybAorCWxkcglyMTAsIFtyMTFdCQlAIGdldCBjdXJyZW50IHZhbAorCW12bglyOSwgIzB4NAkJQCBtYXNrIHRvIGdldCBjbGVhciBiaXQyCisJYW5kCXIxMCwgcjEwLCByOQkJQCBjbGVhciBiaXQyIGZvciBsb2NrIG1vZGUKKwlvcnIJcjEwLCByMTAsICMweDgJCUAgbWFrZSBzdXJlIERMTCBvbiAoZXMyIGJpdCBwb3MpCisJc3RyCXIxMCwgW3IxMV0JCUAgY29tbWl0IHRvIERMTEFfQ1RSTAorCWFkZAlyMTEsIHIxMSwgIzB4OAkJQCBtb3ZlIHRvIGRsbGIKKwlzdHIJcjEwLCBbcjExXQkJQCBoaXQgRExMQiBhbHNvCisKKwltb3YJcjQsICMweDgwMAkJQCByZWxvY2sgdGltZSAobWluIDB4NDAwIEwzIGNsb2NrcykKK3dhaXRfZGxsX2xvY2s6CisJc3VicwlyNCwgcjQsICMweDEKKwlibmUJd2FpdF9kbGxfbG9jaworCW5vcAorCWxkbWZkCXNwISwge3IwLXIxMiwgcGN9CUAgcmVzdG9yZSByZWdzIGFuZCByZXR1cm4KKworc2V0X2NvbmZpZzoKKwkud29yZCBQUkNNX0NMS0NGR19DVFJMX1YKK3BsbF9jdGw6CisJLndvcmQgQ01fQ0xLRU5fUExMX1YKK3BsbF9zdGF0OgorCS53b3JkIENNX0lETEVTVF9DS0dFTl9WCitwbGxfZGl2OgorCS53b3JkIENNX0NMS1NFTDFfUExMX1YKK3NkcmNfcmZyOgorCS53b3JkIFNEUkNfUkZSX0NUUkxfVgorZGxsYV9jdHJsOgorCS53b3JkIFNEUkNfRExMQV9DVFJMX1YKKworRU5UUlkoc3JhbV9zZXRfcHJjbV9zeikKKwkud29yZAkuIC0gc3JhbV9zZXRfcHJjbQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1vbWFwMi90aW1lci1ncC5jIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi90aW1lci1ncC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjllYzExNDQKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2FybS9tYWNoLW9tYXAyL3RpbWVyLWdwLmMKQEAgLTAsMCArMSwxMjYgQEAKKy8qCisgKiBsaW51eC9hcmNoL2FybS9tYWNoLW9tYXAyL3RpbWVyLWdwLmMKKyAqCisgKiBPTUFQMiBHUCB0aW1lciBzdXBwb3J0LgorICoKKyAqIENvcHlyaWdodCAoQykgMjAwNSBOb2tpYSBDb3Jwb3JhdGlvbgorICogQXV0aG9yOiBQYXVsIE11bmR0IDxwYXVsLm11bmR0QG5va2lhLmNvbT4KKyAqICAgICAgICAgSnVoYSBZcmr2bOQgPGp1aGEueXJqb2xhQG5va2lhLmNvbT4KKyAqCisgKiBTb21lIHBhcnRzIGJhc2VkIG9mZiBvZiBUSSdzIDI0eHggY29kZToKKyAqCisgKiAgIENvcHlyaWdodCAoQykgMjAwNCBUZXhhcyBJbnN0cnVtZW50cywgSW5jLgorICoKKyAqIFJvdWdobHkgbW9kZWxsZWQgYWZ0ZXIgdGhlIE9NQVAxIE1QVSB0aW1lciBjb2RlLgorICoKKyAqIFRoaXMgZmlsZSBpcyBzdWJqZWN0IHRvIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlLiBTZWUgdGhlIGZpbGUgIkNPUFlJTkciIGluIHRoZSBtYWluIGRpcmVjdG9yeSBvZiB0aGlzIGFyY2hpdmUKKyAqIGZvciBtb3JlIGRldGFpbHMuCisgKi8KKyNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisjaW5jbHVkZSA8bGludXgvdGltZS5oPgorI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgorI2luY2x1ZGUgPGxpbnV4L2Vyci5oPgorI2luY2x1ZGUgPGFzbS9tYWNoL3RpbWUuaD4KKyNpbmNsdWRlIDxhc20vZGVsYXkuaD4KKyNpbmNsdWRlIDxhc20vaW8uaD4KKyNpbmNsdWRlIDxhc20vaGFyZHdhcmUvY2xvY2suaD4KKworI2RlZmluZSBPTUFQMl9HUF9USU1FUjFfQkFTRQkweDQ4MDI4MDAwCisjZGVmaW5lIE9NQVAyX0dQX1RJTUVSMl9CQVNFCTB4NDgwMmEwMDAKKyNkZWZpbmUgT01BUDJfR1BfVElNRVIzX0JBU0UJMHg0ODA3ODAwMAorI2RlZmluZSBPTUFQMl9HUF9USU1FUjRfQkFTRQkweDQ4MDdhMDAwCisKKyNkZWZpbmUgR1BfVElNRVJfVElEUgkJMHgwMAorI2RlZmluZSBHUF9USU1FUl9USVNSCQkweDE4CisjZGVmaW5lIEdQX1RJTUVSX1RJRVIJCTB4MWMKKyNkZWZpbmUgR1BfVElNRVJfVENMUgkJMHgyNAorI2RlZmluZSBHUF9USU1FUl9UQ1JSCQkweDI4CisjZGVmaW5lIEdQX1RJTUVSX1RMRFIJCTB4MmMKKyNkZWZpbmUgR1BfVElNRVJfVFNJQ1IJCTB4NDAKKworI2RlZmluZSBPU19USU1FUl9OUgkJMSAgLyogR1AgdGltZXIgMiAqLworCitzdGF0aWMgdW5zaWduZWQgbG9uZyB0aW1lcl9iYXNlW10gPSB7CisJSU9fQUREUkVTUyhPTUFQMl9HUF9USU1FUjFfQkFTRSksCisJSU9fQUREUkVTUyhPTUFQMl9HUF9USU1FUjJfQkFTRSksCisJSU9fQUREUkVTUyhPTUFQMl9HUF9USU1FUjNfQkFTRSksCisJSU9fQUREUkVTUyhPTUFQMl9HUF9USU1FUjRfQkFTRSksCit9OworCitzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGludCB0aW1lcl9yZWFkX3JlZyhpbnQgbnIsIHVuc2lnbmVkIGludCByZWcpCit7CisJcmV0dXJuIF9fcmF3X3JlYWRsKHRpbWVyX2Jhc2VbbnJdICsgcmVnKTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIHRpbWVyX3dyaXRlX3JlZyhpbnQgbnIsIHVuc2lnbmVkIGludCByZWcsIHVuc2lnbmVkIGludCB2YWwpCit7CisJX19yYXdfd3JpdGVsKHZhbCwgdGltZXJfYmFzZVtucl0gKyByZWcpOworfQorCisvKiBOb3RlIHRoYXQgd2UgYWx3YXlzIGVuYWJsZSB0aGUgY2xvY2sgcHJlc2NhbGUgZGl2aWRlciBiaXQgKi8KK3N0YXRpYyBpbmxpbmUgdm9pZCBvbWFwMl9ncF90aW1lcl9zdGFydChpbnQgbnIsIHVuc2lnbmVkIGxvbmcgbG9hZF92YWwpCit7CisJdW5zaWduZWQgaW50IHRtcDsKKworCXRtcCA9IDB4ZmZmZmZmZmYgLSBsb2FkX3ZhbDsKKworCXRpbWVyX3dyaXRlX3JlZyhuciwgR1BfVElNRVJfVExEUiwgdG1wKTsKKwl0aW1lcl93cml0ZV9yZWcobnIsIEdQX1RJTUVSX1RDUlIsIHRtcCk7CisJdGltZXJfd3JpdGVfcmVnKG5yLCBHUF9USU1FUl9USUVSLCAxIDw8IDEpOworCXRpbWVyX3dyaXRlX3JlZyhuciwgR1BfVElNRVJfVENMUiwgKDEgPDwgNSkgfCAoMSA8PCAxKSB8IDEpOworfQorCitzdGF0aWMgaXJxcmV0dXJuX3Qgb21hcDJfZ3BfdGltZXJfaW50ZXJydXB0KGludCBpcnEsIHZvaWQgKmRldl9pZCwKKwkJCQkJICAgIHN0cnVjdCBwdF9yZWdzICpyZWdzKQoreworCXdyaXRlX3NlcWxvY2soJnh0aW1lX2xvY2spOworCisJdGltZXJfd3JpdGVfcmVnKE9TX1RJTUVSX05SLCBHUF9USU1FUl9USVNSLCAxIDw8IDEpOworCXRpbWVyX3RpY2socmVncyk7CisKKwl3cml0ZV9zZXF1bmxvY2soJnh0aW1lX2xvY2spOworCisJcmV0dXJuIElSUV9IQU5ETEVEOworfQorCitzdGF0aWMgc3RydWN0IGlycWFjdGlvbiBvbWFwMl9ncF90aW1lcl9pcnEgPSB7CisJLm5hbWUJCT0gImdwIHRpbWVyIiwKKwkuZmxhZ3MJCT0gU0FfSU5URVJSVVBULAorCS5oYW5kbGVyCT0gb21hcDJfZ3BfdGltZXJfaW50ZXJydXB0LAorfTsKKworc3RhdGljIHZvaWQgX19pbml0IG9tYXAyX2dwX3RpbWVyX2luaXQodm9pZCkKK3sKKwlzdHJ1Y3QgY2xrICogc3lzX2NrOworCXUzMiB0aWNrX3BlcmlvZCA9IDEyMDAwMDsKKwl1MzIgbDsKKworCS8qIFJlc2V0IGNsb2NrIGFuZCBwcmVzY2FsZSB2YWx1ZSAqLworCXRpbWVyX3dyaXRlX3JlZyhPU19USU1FUl9OUiwgR1BfVElNRVJfVENMUiwgMCk7CisKKwlzeXNfY2sgPSBjbGtfZ2V0KE5VTEwsICJzeXNfY2siKTsKKwlpZiAoSVNfRVJSKHN5c19jaykpCisJCXByaW50ayhLRVJOX0VSUiAiQ291bGQgbm90IGdldCBzeXNfY2tcbiIpOworCWVsc2UgeworCQljbGtfdXNlKHN5c19jayk7CisJCXRpY2tfcGVyaW9kID0gY2xrX2dldF9yYXRlKHN5c19jaykgLyAxMDA7CisJCWNsa19wdXQoc3lzX2NrKTsKKwl9CisKKwl0aWNrX3BlcmlvZCAvPSAyOwkvKiBNaW5pbXVtIHByZXNjYWxlIGRpdmlkZXIgaXMgMiAqLworCXRpY2tfcGVyaW9kIC09IDE7CisKKwlsID0gdGltZXJfcmVhZF9yZWcoT1NfVElNRVJfTlIsIEdQX1RJTUVSX1RJRFIpOworCXByaW50ayhLRVJOX0lORk8gIk9NQVAyIEdQIHRpbWVyIChIVyB2ZXJzaW9uICVkLiVkKVxuIiwKKwkgICAgICAgKGwgPj4gNCkgJiAweDBmLCBsICYgMHgwZik7CisKKwlzZXR1cF9pcnEoMzgsICZvbWFwMl9ncF90aW1lcl9pcnEpOworCisJb21hcDJfZ3BfdGltZXJfc3RhcnQoT1NfVElNRVJfTlIsIHRpY2tfcGVyaW9kKTsKK30KKworc3RydWN0IHN5c190aW1lciBvbWFwX3RpbWVyID0geworCS5pbml0CT0gb21hcDJfZ3BfdGltZXJfaW5pdCwKK307CisKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21tL0tjb25maWcgYi9hcmNoL2FybS9tbS9LY29uZmlnCmluZGV4IDRlOGQxOTMuLmU4NGZkZGUgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21tL0tjb25maWcKKysrIGIvYXJjaC9hcm0vbW0vS2NvbmZpZwpAQCAtMjQyLDcgKzI0Miw3IEBACiAjIEFSTXY2CiBjb25maWcgQ1BVX1Y2CiAJYm9vbCAiU3VwcG9ydCBBUk0gVjYgcHJvY2Vzc29yIgotCWRlcGVuZHMgb24gQVJDSF9JTlRFR1JBVE9SIHx8IE1BQ0hfUkVBTFZJRVdfRUIKKwlkZXBlbmRzIG9uIEFSQ0hfSU5URUdSQVRPUiB8fCBNQUNIX1JFQUxWSUVXX0VCIHx8IEFSQ0hfT01BUDIKIAlzZWxlY3QgQ1BVXzMydjYKIAlzZWxlY3QgQ1BVX0FCUlRfRVY2CiAJc2VsZWN0IENQVV9DQUNIRV9WNgo=