From: ac9410@bellsouth.net (Albert Cranford) Date: Thu, 19 May 2005 06:23:32 +0000 Subject: [PATCH] 3/4 WIP I2C kernel patches-drivers Message-Id: <3CE20B24.EF974F90@bellsouth.net> List-Id: MIME-Version: 1.0 Content-Type: text/plain; charset="macroman" Content-Transfer-Encoding: base64 To: lm-sensors@vger.kernel.org UGF0Y2ggMyBpcyBzdHJhaWdodCBkaWZmIGZyb20gbGludXgtMi41LjE1IGFuZCBpMmMtMi41LjMu Ci0tLSBsaW51eC9kcml2ZXJzL2kyYy9pMmMtYWxnby04eHguYy5vcmlnICAgICAgIDE5NjktMTIt MzEgMTk6MDA6MDAuMDAwMDAwMDAwIC0wNTAwCisrKyBsaW51eC9kcml2ZXJzL2kyYy9pMmMtYWxn by04eHguYyAgICAyMDAxLTEwLTMwIDIyOjA2OjMxLjAwMDAwMDAwMCAtMDUwMApAQCAtMCwwICsx LDU3NSBAQAorLyoKKyAqIGkyYy1hbGdvLTh4eC5jIGkyeCBkcml2ZXIgYWxnb3JpdGhtcyBmb3Ig TVBDOFhYIENQTQorICogQ29weXJpZ2h0IChjKSAxOTk5IERhbiBNYWxlayAoZG1hbGVrQGpsYy5u ZXQpLgorICoKKyAqIG1vdmVkIGludG8gcHJvcGVyIGkyYyBpbnRlcmZhY2U7IHNlcGFyYXRlZCBv dXQgcGxhdGZvcm0gc3BlY2lmaWMgCisgKiBwYXJ0cyBpbnRvIGkyYy1ycHguYworICogQnJhZCBQ YXJrZXIgKGJyYWRAaGVlbHRvZS5jb20pCisgKi8KKworLy8gWFhYIHRvZG8KKy8vIHRpbWVvdXQg c2xlZXA/CisKKy8qICRJZDogaTJjLWFsZ28tOHh4LmMsdiAxLjQgMjAwMS8xMC8zMSAwMzowNjoz MSBtZHMgRXhwICQgKi8KKworI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorI2luY2x1ZGUgPGxp bnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+CisjaW5jbHVkZSA8bGludXgv c2xhYi5oPgorI2luY2x1ZGUgPGxpbnV4L3ZlcnNpb24uaD4KKyNpbmNsdWRlIDxsaW51eC9pbml0 Lmg+CisjaW5jbHVkZSA8YXNtL3VhY2Nlc3MuaD4KKyNpbmNsdWRlIDxsaW51eC9pb3BvcnQuaD4K KyNpbmNsdWRlIDxsaW51eC9lcnJuby5oPgorI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+CisKKyNp bmNsdWRlIDxhc20vbXBjOHh4Lmg+CisjaW5jbHVkZSAiLi4vLi4vYXJjaC9wcGMvOHh4X2lvL2Nv bW1wcm9jLmgiCisKKyNpbmNsdWRlIDxsaW51eC9pMmMuaD4KKyNpbmNsdWRlIDxsaW51eC9pMmMt YWxnby04eHguaD4KKworI2RlZmluZSBDUE1fTUFYX1JFQUQgICA1MTMKKworc3RhdGljIHdhaXRf cXVldWVfaGVhZF90IGlpY193YWl0Oworc3RhdGljIHVzaG9ydCByX3RiYXNlLCByX3JiYXNlOwor CitpbnQgY3BtX3NjYW4gPSAwOworaW50IGNwbV9kZWJ1ZyA9IDA7CisKK3N0YXRpYyB2b2lkCitj cG1faWljX2ludGVycnVwdCh2b2lkICpkZXZfaWQpCit7CisgICAgICAgdm9sYXRpbGUgaTJjOHh4 X3QgKmkyYyA9IChpMmM4eHhfdCAqKWRldl9pZDsKKworICAgICAgIGlmIChjcG1fZGVidWcgPiAx KQorICAgICAgICAgICAgICAgcHJpbnRrKCJjcG1faWljX2ludGVycnVwdChkZXZfaWQ9JXApXG4i LCBkZXZfaWQpOworCisgICAgICAgLyogQ2hpcCBlcnJhdGEsIGNsZWFyIGVuYWJsZS4KKyAgICAg ICAqLworICAgICAgIGkyYy0+aTJjX2kybW9kID0gMDsKKworICAgICAgIC8qIENsZWFyIGludGVy cnVwdC4KKyAgICAgICAqLworICAgICAgIGkyYy0+aTJjX2kyY2VyID0gMHhmZjsKKworICAgICAg IC8qIEdldCAnbWUgZ29pbmcgYWdhaW4uCisgICAgICAgKi8KKyAgICAgICB3YWtlX3VwX2ludGVy cnVwdGlibGUoJmlpY193YWl0KTsKK30KKworc3RhdGljIHZvaWQKK2NwbV9paWNfaW5pdChzdHJ1 Y3QgaTJjX2FsZ29fOHh4X2RhdGEgKmNwbV9hZGFwKQoreworICAgICAgIHZvbGF0aWxlIGlpY190 ICAgICAgICAgICppaXAgPSBjcG1fYWRhcC0+aWlwOworICAgICAgIHZvbGF0aWxlIGkyYzh4eF90 ICAgICAgICppMmMgPSBjcG1fYWRhcC0+aTJjOworCisgICAgICAgaWYgKGNwbV9kZWJ1ZykgcHJp bnRrKCJjcG1faWljX2luaXQoKSAtIGlpcD0lcFxuIixpaXApOworCisgICAgICAgLyogSW5pdGlh bGl6ZSB0aGUgcGFyYW1ldGVyIHJhbS4KKyAgICAgICAgKiBXZSBuZWVkIHRvIG1ha2Ugc3VyZSBt YW55IHRoaW5ncyBhcmUgaW5pdGlhbGl6ZWQgdG8gemVybywKKyAgICAgICAgKiBlc3BlY2lhbGx5 IGluIHRoZSBjYXNlIG9mIGEgbWljcm9jb2RlIHBhdGNoLgorICAgICAgICAqLworICAgICAgIGlp cC0+aWljX3JzdGF0ZSA9IDA7CisgICAgICAgaWlwLT5paWNfcmRwID0gMDsKKyAgICAgICBpaXAt PmlpY19yYnB0ciA9IDA7CisgICAgICAgaWlwLT5paWNfcmJjID0gMDsKKyAgICAgICBpaXAtPmlp Y19yeHRtcCA9IDA7CisgICAgICAgaWlwLT5paWNfdHN0YXRlID0gMDsKKyAgICAgICBpaXAtPmlp Y190ZHAgPSAwOworICAgICAgIGlpcC0+aWljX3RicHRyID0gMDsKKyAgICAgICBpaXAtPmlpY190 YmMgPSAwOworICAgICAgIGlpcC0+aWljX3R4dG1wID0gMDsKKworICAgICAgIC8qIFNldCB1cCB0 aGUgSUlDIHBhcmFtZXRlcnMgaW4gdGhlIHBhcmFtZXRlciByYW0uCisgICAgICAgKi8KKyAgICAg ICBpaXAtPmlpY190YmFzZSA9IHJfdGJhc2UgPSBjcG1fYWRhcC0+ZHBfYWRkcjsKKyAgICAgICBp aXAtPmlpY19yYmFzZSA9IHJfcmJhc2UgPSBjcG1fYWRhcC0+ZHBfYWRkciArIHNpemVvZihjYmRf dCkqMjsKKworICAgICAgIGlpcC0+aWljX3RmY3IgPSBTTUNfRUI7CisgICAgICAgaWlwLT5paWNf cmZjciA9IFNNQ19FQjsKKworICAgICAgIC8qIFNldCBtYXhpbXVtIHJlY2VpdmUgc2l6ZS4KKyAg ICAgICAqLworICAgICAgIGlpcC0+aWljX21yYmxyID0gQ1BNX01BWF9SRUFEOworCisgICAgICAg LyogSW5pdGlhbGl6ZSBUeC9SeCBwYXJhbWV0ZXJzLgorICAgICAgICovCisgICAgICAgaWYgKGNw bV9hZGFwLT5yZWxvYyA9IDApIHsKKyAgICAgICAgICAgICAgIHZvbGF0aWxlIGNwbTh4eF90ICpj cCA9IGNwbV9hZGFwLT5jcDsKKworICAgICAgICAgICAgICAgY3AtPmNwX2NwY3IgKyAgICAgICAg ICAgICAgICAgICAgICAgbWtfY3JfY21kKENQTV9DUl9DSF9JMkMsIENQTV9DUl9JTklUX1RSWCkg fCBDUE1fQ1JfRkxHOworICAgICAgICAgICAgICAgd2hpbGUgKGNwLT5jcF9jcGNyICYgQ1BNX0NS X0ZMRyk7CisgICAgICAgfQorCisgICAgICAgLyogU2VsZWN0IGFuIGFyYml0cmFyeSBhZGRyZXNz LiAgSnVzdCBtYWtlIHN1cmUgaXQgaXMgdW5pcXVlLgorICAgICAgICovCisgICAgICAgaTJjLT5p MmNfaTJhZGQgPSAweDM0OworCisgICAgICAgLyogTWFrZSBjbG9jayBydW4gbWF4aW11bSBzbG93 LgorICAgICAgICovCisgICAgICAgaTJjLT5pMmNfaTJicmcgPSA3OworCisgICAgICAgLyogRGlz YWJsZSBpbnRlcnJ1cHRzLgorICAgICAgICovCisgICAgICAgaTJjLT5pMmNfaTJjbXIgPSAwOwor ICAgICAgIGkyYy0+aTJjX2kyY2VyID0gMHhmZjsKKworICAgICAgIGluaXRfd2FpdHF1ZXVlX2hl YWQoJmlpY193YWl0KTsKKworICAgICAgIC8qIEluc3RhbGwgaW50ZXJydXB0IGhhbmRsZXIuCisg ICAgICAgKi8KKyAgICAgICBpZiAoY3BtX2RlYnVnKSB7CisgICAgICAgICAgICAgICBwcmludGsg KCIlc1slZF0gSW5zdGFsbCBJU1IgZm9yIElSUSAlZFxuIiwKKyAgICAgICAgICAgICAgICAgICAg ICAgX19mdW5jX18sX19MSU5FX18sIENQTVZFQ19JMkMpOworICAgICAgIH0KKyAgICAgICAoKmNw bV9hZGFwLT5zZXRpc3IpKENQTVZFQ19JMkMsIGNwbV9paWNfaW50ZXJydXB0LCAodm9pZCAqKWky Yyk7Cit9CisKKworc3RhdGljIGludAorY3BtX2lpY19zaHV0ZG93bihzdHJ1Y3QgaTJjX2FsZ29f OHh4X2RhdGEgKmNwbV9hZGFwKQoreworICAgICAgIHZvbGF0aWxlIGkyYzh4eF90ICppMmMgPSBj cG1fYWRhcC0+aTJjOworCisgICAgICAgLyogU2h1dCBkb3duIElJQy4KKyAgICAgICAqLworICAg ICAgIGkyYy0+aTJjX2kybW9kID0gMDsKKyAgICAgICBpMmMtPmkyY19pMmNtciA9IDA7CisgICAg ICAgaTJjLT5pMmNfaTJjZXIgPSAweGZmOworCisgICAgICAgcmV0dXJuKDApOworfQorCitzdGF0 aWMgdm9pZCAKK2NwbV9yZXNldF9paWNfcGFyYW1zKHZvbGF0aWxlIGlpY190ICppaXApCit7Cisg ICAgICAgaWlwLT5paWNfdGJhc2UgPSByX3RiYXNlOworICAgICAgIGlpcC0+aWljX3JiYXNlID0g cl9yYmFzZTsKKworICAgICAgIGlpcC0+aWljX3RmY3IgPSBTTUNfRUI7CisgICAgICAgaWlwLT5p aWNfcmZjciA9IFNNQ19FQjsKKworICAgICAgIGlpcC0+aWljX21yYmxyID0gQ1BNX01BWF9SRUFE OworCisgICAgICAgaWlwLT5paWNfcnN0YXRlID0gMDsKKyAgICAgICBpaXAtPmlpY19yZHAgPSAw OworICAgICAgIGlpcC0+aWljX3JicHRyID0gMDsKKyAgICAgICBpaXAtPmlpY19yYmMgPSAwOwor ICAgICAgIGlpcC0+aWljX3J4dG1wID0gMDsKKyAgICAgICBpaXAtPmlpY190c3RhdGUgPSAwOwor ICAgICAgIGlpcC0+aWljX3RkcCA9IDA7CisgICAgICAgaWlwLT5paWNfdGJwdHIgPSAwOworICAg ICAgIGlpcC0+aWljX3RiYyA9IDA7CisgICAgICAgaWlwLT5paWNfdHh0bXAgPSAwOworfQorCisj ZGVmaW5lIEJEX1NDX05BSyAgICAgICAgICAgICAgKCh1c2hvcnQpMHgwMDA0KSAvKiBOQUsgLSBk aWQgbm90IHJlc3BvbmQgKi8KKyNkZWZpbmUgQ1BNX0NSX0NMT1NFX1JYQkQgICAgICAoKHVzaG9y dCkweDAwMDcpCisKK3N0YXRpYyB2b2lkIGZvcmNlX2Nsb3NlKHN0cnVjdCBpMmNfYWxnb184eHhf ZGF0YSAqY3BtKQoreworICAgICAgIGlmIChjcG0tPnJlbG9jID0gMCkgeworICAgICAgICAgICAg ICAgdm9sYXRpbGUgY3BtOHh4X3QgKmNwID0gY3BtLT5jcDsKKworICAgICAgICAgICAgICAgaWYg KGNwbV9kZWJ1ZykgcHJpbnRrKCJmb3JjZV9jbG9zZSgpXG4iKTsKKyAgICAgICAgICAgICAgIGNw LT5jcF9jcGNyICsgICAgICAgICAgICAgICAgICAgICAgIG1rX2NyX2NtZChDUE1fQ1JfQ0hfSTJD LCBDUE1fQ1JfQ0xPU0VfUlhCRCkgfAorICAgICAgICAgICAgICAgICAgICAgICBDUE1fQ1JfRkxH OworCisgICAgICAgICAgICAgICB3aGlsZSAoY3AtPmNwX2NwY3IgJiBDUE1fQ1JfRkxHKTsKKyAg ICAgICB9Cit9CisKKworLyogUmVhZCBmcm9tIElJQy4uLgorICogYWJ5dGUgPSBhZGRyZXNzIGJ5 dGUsIHdpdGggci93IGZsYWcgYWxyZWFkeSBzZXQKKyAqLworc3RhdGljIGludAorY3BtX2lpY19y ZWFkKHN0cnVjdCBpMmNfYWxnb184eHhfZGF0YSAqY3BtLCB1X2NoYXIgYWJ5dGUsIGNoYXIgKmJ1 ZiwgaW50IGNvdW50KQoreworICAgICAgIHZvbGF0aWxlIGlpY190ICppaXAgPSBjcG0tPmlpcDsK KyAgICAgICB2b2xhdGlsZSBpMmM4eHhfdCAqaTJjID0gY3BtLT5pMmM7CisgICAgICAgdm9sYXRp bGUgY3BtOHh4X3QgKmNwID0gY3BtLT5jcDsKKyAgICAgICB2b2xhdGlsZSBjYmRfdCAgKnRiZGYs ICpyYmRmOworICAgICAgIHVfY2hhciAqdGI7CisgICAgICAgdW5zaWduZWQgbG9uZyBmbGFnczsK KworICAgICAgIGlmIChjb3VudCA+PSBDUE1fTUFYX1JFQUQpCisgICAgICAgICAgICAgICByZXR1 cm4gLUVJTlZBTDsKKworICAgICAgIC8qIGNoZWNrIGZvciBhbmQgdXNlIGEgbWljcm9jb2RlIHJl bG9jYXRpb24gcGF0Y2ggKi8KKyAgICAgICBpZiAoY3BtLT5yZWxvYykgeworICAgICAgICAgICAg ICAgY3BtX3Jlc2V0X2lpY19wYXJhbXMoaWlwKTsKKyAgICAgICB9CisKKyAgICAgICB0YmRmID0g KGNiZF90ICopJmNwLT5jcF9kcG1lbVtpaXAtPmlpY190YmFzZV07CisgICAgICAgcmJkZiA9IChj YmRfdCAqKSZjcC0+Y3BfZHBtZW1baWlwLT5paWNfcmJhc2VdOworCisgICAgICAgLyogVG8gcmVh ZCwgd2UgbmVlZCBhbiBlbXB0eSBidWZmZXIgb2YgdGhlIHByb3BlciBsZW5ndGguCisgICAgICAg ICogQWxsIHRoYXQgaXMgdXNlZCBpcyB0aGUgZmlyc3QgYnl0ZSBmb3IgYWRkcmVzcywgdGhlIHJl bWFpbmRlcgorICAgICAgICAqIGlzIGp1c3QgdXNlZCBmb3IgdGltaW5nIChhbmQgZG9lc24ndCBy ZWFsbHkgaGF2ZSB0byBleGlzdCkuCisgICAgICAgICovCisgICAgICAgaWYgKGNwbS0+cmVsb2Mp IHsKKyAgICAgICAgICAgICAgIGNwbV9yZXNldF9paWNfcGFyYW1zKGlpcCk7CisgICAgICAgfQor ICAgICAgIHRiID0gY3BtLT50ZW1wOworICAgICAgIHRiID0gKHVfY2hhciAqKSgoKHVpbnQpdGIg KyAxNSkgJiB+MTUpOworICAgICAgIHRiWzBdID0gYWJ5dGU7ICAgICAgICAgIC8qIERldmljZSBh ZGRyZXNzIGJ5dGUgdy9ydyBmbGFnICovCisKKyAgICAgICBmbHVzaF9kY2FjaGVfcmFuZ2UodGIs IHRiKzEpOworCisgICAgICAgaWYgKGNwbV9kZWJ1ZykgcHJpbnRrKCJjcG1faWljX3JlYWQoYWJ5 dGU9MHgleClcbiIsIGFieXRlKTsKKworICAgICAgIHRiZGYtPmNiZF9idWZhZGRyID0gX19wYSh0 Yik7CisgICAgICAgdGJkZi0+Y2JkX2RhdGxlbiA9IGNvdW50ICsgMTsKKyAgICAgICB0YmRmLT5j YmRfc2MgKyAgICAgICAgICAgICAgIEJEX1NDX1JFQURZIHwgQkRfU0NfSU5UUlBUIHwgQkRfU0Nf TEFTVCB8CisgICAgICAgICAgICAgICBCRF9TQ19XUkFQIHwgQkRfSUlDX1NUQVJUOworCisgICAg ICAgcmJkZi0+Y2JkX2RhdGxlbiA9IDA7CisgICAgICAgcmJkZi0+Y2JkX2J1ZmFkZHIgPSBfX3Bh KGJ1Zik7CisgICAgICAgcmJkZi0+Y2JkX3NjID0gQkRfU0NfRU1QVFkgfCBCRF9TQ19XUkFQOwor CisgICAgICAgaW52YWxpZGF0ZV9kY2FjaGVfcmFuZ2UoYnVmLCBidWYrY291bnQpOworCisgICAg ICAgLyogQ2hpcCBidWcsIHNldCBlbmFibGUgaGVyZSAqLworICAgICAgIHNhdmVfZmxhZ3MoZmxh Z3MpOyBjbGkoKTsKKyAgICAgICBpMmMtPmkyY19pMmNtciA9IDB4MTM7ICAvKiBFbmFibGUgc29t ZSBpbnRlcnVwdHMgKi8KKyAgICAgICBpMmMtPmkyY19pMmNlciA9IDB4ZmY7CisgICAgICAgaTJj LT5pMmNfaTJtb2QgPSAxOyAgICAgLyogRW5hYmxlICovCisgICAgICAgaTJjLT5pMmNfaTJjb20g PSAweDgxOyAgLyogU3RhcnQgbWFzdGVyICovCisKKyAgICAgICAvKiBXYWl0IGZvciBJSUMgdHJh bnNmZXIgKi8KKyAgICAgICBpbnRlcnJ1cHRpYmxlX3NsZWVwX29uKCZpaWNfd2FpdCk7CisgICAg ICAgcmVzdG9yZV9mbGFncyhmbGFncyk7CisgICAgICAgaWYgKHNpZ25hbF9wZW5kaW5nKGN1cnJl bnQpKQorICAgICAgICAgICAgICAgcmV0dXJuIC1FSU87CisKKyAgICAgICBpZiAoY3BtX2RlYnVn KSB7CisgICAgICAgICAgICAgICBwcmludGsoInR4IHNjICUwNHgsIHJ4IHNjICUwNHhcbiIsCisg ICAgICAgICAgICAgICAgICAgICAgdGJkZi0+Y2JkX3NjLCByYmRmLT5jYmRfc2MpOworICAgICAg IH0KKworICAgICAgIGlmICh0YmRmLT5jYmRfc2MgJiBCRF9TQ19OQUspIHsKKyAgICAgICAgICAg ICAgIHByaW50aygiSUlDIHJlYWQ7IG5vIGFja1xuIik7CisgICAgICAgICAgICAgICByZXR1cm4g MDsKKyAgICAgICB9CisKKyAgICAgICBpZiAocmJkZi0+Y2JkX3NjICYgQkRfU0NfRU1QVFkpIHsK KyAgICAgICAgICAgICAgIHByaW50aygiSUlDIHJlYWQ7IGNvbXBsZXRlIGJ1dCByYnVmIGVtcHR5 XG4iKTsKKyAgICAgICAgICAgICAgIGZvcmNlX2Nsb3NlKGNwbSk7CisgICAgICAgICAgICAgICBw cmludGsoInR4IHNjICUwNHgsIHJ4IHNjICUwNHhcbiIsCisgICAgICAgICAgICAgICAgICAgICAg dGJkZi0+Y2JkX3NjLCByYmRmLT5jYmRfc2MpOworICAgICAgIH0KKworICAgICAgIGlmIChjcG1f ZGVidWcpIHByaW50aygicmVhZCAlZCBieXRlc1xuIiwgcmJkZi0+Y2JkX2RhdGxlbik7CisKKyAg ICAgICBpZiAocmJkZi0+Y2JkX2RhdGxlbiA8IGNvdW50KSB7CisgICAgICAgICAgICAgICBwcmlu dGsoIklJQyByZWFkOyBzaG9ydCwgd2FudGVkICVkIGdvdCAlZFxuIiwKKyAgICAgICAgICAgICAg ICAgICAgICBjb3VudCwgcmJkZi0+Y2JkX2RhdGxlbik7CisgICAgICAgICAgICAgICByZXR1cm4g MDsKKyAgICAgICB9CisKKworICAgICAgIGludmFsaWRhdGVfZGNhY2hlX3JhbmdlKGJ1ZiwgYnVm K2NvdW50KTsKKworICAgICAgIHJldHVybiBjb3VudDsKK30KKworLyogV3JpdGUgdG8gSUlDLi4u CisgKiBhZGRyID0gYWRkcmVzcyBieXRlLCB3aXRoIHIvdyBmbGFnIGFscmVhZHkgc2V0CisgKi8K K3N0YXRpYyBpbnQKK2NwbV9paWNfd3JpdGUoc3RydWN0IGkyY19hbGdvXzh4eF9kYXRhICpjcG0s IHVfY2hhciBhYnl0ZSwgY2hhciAqYnVmLGludCBjb3VudCkKK3sKKyAgICAgICB2b2xhdGlsZSBp aWNfdCAqaWlwID0gY3BtLT5paXA7CisgICAgICAgdm9sYXRpbGUgaTJjOHh4X3QgKmkyYyA9IGNw bS0+aTJjOworICAgICAgIHZvbGF0aWxlIGNwbTh4eF90ICpjcCA9IGNwbS0+Y3A7CisgICAgICAg dm9sYXRpbGUgY2JkX3QgICp0YmRmOworICAgICAgIHVfY2hhciAqdGI7CisgICAgICAgdW5zaWdu ZWQgbG9uZyBmbGFnczsKKworICAgICAgIC8qIGNoZWNrIGZvciBhbmQgdXNlIGEgbWljcm9jb2Rl IHJlbG9jYXRpb24gcGF0Y2ggKi8KKyAgICAgICBpZiAoY3BtLT5yZWxvYykgeworICAgICAgICAg ICAgICAgY3BtX3Jlc2V0X2lpY19wYXJhbXMoaWlwKTsKKyAgICAgICB9CisgICAgICAgdGIgPSBj cG0tPnRlbXA7CisgICAgICAgdGIgPSAodV9jaGFyICopKCgodWludCl0YiArIDE1KSAmIH4xNSk7 CisgICAgICAgKnRiID0gYWJ5dGU7ICAgICAgICAgICAgLyogRGV2aWNlIGFkZHJlc3MgYnl0ZSB3 L3J3IGZsYWcgKi8KKworICAgICAgIGZsdXNoX2RjYWNoZV9yYW5nZSh0YiwgdGIrMSk7CisgICAg ICAgZmx1c2hfZGNhY2hlX3JhbmdlKGJ1ZiwgYnVmK2NvdW50KTsKKworICAgICAgIGlmIChjcG1f ZGVidWcpIHByaW50aygiY3BtX2lpY193cml0ZShhYnl0ZT0weCV4KVxuIiwgYWJ5dGUpOworCisg ICAgICAgLyogc2V0IHVwIDIgZGVzY3JpcHRvcnMgKi8KKyAgICAgICB0YmRmID0gKGNiZF90ICop JmNwLT5jcF9kcG1lbVtpaXAtPmlpY190YmFzZV07CisKKyAgICAgICB0YmRmWzBdLmNiZF9idWZh ZGRyID0gX19wYSh0Yik7CisgICAgICAgdGJkZlswXS5jYmRfZGF0bGVuID0gMTsKKyAgICAgICB0 YmRmWzBdLmNiZF9zYyA9IEJEX1NDX1JFQURZIHwgQkRfSUlDX1NUQVJUOworCisgICAgICAgdGJk ZlsxXS5jYmRfYnVmYWRkciA9IF9fcGEoYnVmKTsKKyAgICAgICB0YmRmWzFdLmNiZF9kYXRsZW4g PSBjb3VudDsKKyAgICAgICB0YmRmWzFdLmNiZF9zYyA9IEJEX1NDX1JFQURZIHwgQkRfU0NfSU5U UlBUIHwgQkRfU0NfTEFTVCB8IEJEX1NDX1dSQVA7CisKKyAgICAgICAvKiBDaGlwIGJ1Zywgc2V0 IGVuYWJsZSBoZXJlICovCisgICAgICAgc2F2ZV9mbGFncyhmbGFncyk7IGNsaSgpOworICAgICAg IGkyYy0+aTJjX2kyY21yID0gMHgxMzsgIC8qIEVuYWJsZSBzb21lIGludGVydXB0cyAqLworICAg ICAgIGkyYy0+aTJjX2kyY2VyID0gMHhmZjsKKyAgICAgICBpMmMtPmkyY19pMm1vZCA9IDE7ICAg ICAvKiBFbmFibGUgKi8KKyAgICAgICBpMmMtPmkyY19pMmNvbSA9IDB4ODE7ICAvKiBTdGFydCBt YXN0ZXIgKi8KKworICAgICAgIC8qIFdhaXQgZm9yIElJQyB0cmFuc2ZlciAqLworICAgICAgIGlu dGVycnVwdGlibGVfc2xlZXBfb24oJmlpY193YWl0KTsKKyAgICAgICByZXN0b3JlX2ZsYWdzKGZs YWdzKTsKKyAgICAgICBpZiAoc2lnbmFsX3BlbmRpbmcoY3VycmVudCkpCisgICAgICAgICAgICAg ICByZXR1cm4gLUVJTzsKKworICAgICAgIGlmIChjcG1fZGVidWcpIHsKKyAgICAgICAgICAgICAg IHByaW50aygidHgwIHNjICUwNHgsIHR4MSBzYyAlMDR4XG4iLAorICAgICAgICAgICAgICAgICAg ICAgIHRiZGZbMF0uY2JkX3NjLCB0YmRmWzFdLmNiZF9zYyk7CisgICAgICAgfQorCisgICAgICAg aWYgKHRiZGYtPmNiZF9zYyAmIEJEX1NDX05BSykgeworICAgICAgICAgICAgICAgcHJpbnRrKCJJ SUMgd3JpdGU7IG5vIGFja1xuIik7CisgICAgICAgICAgICAgICByZXR1cm4gMDsKKyAgICAgICB9 CisgICAgICAgICAKKyAgICAgICBpZiAodGJkZi0+Y2JkX3NjICYgQkRfU0NfUkVBRFkpIHsKKyAg ICAgICAgICAgICAgIHByaW50aygiSUlDIHdyaXRlOyBjb21wbGV0ZSBidXQgdGJ1ZiByZWFkeVxu Iik7CisgICAgICAgICAgICAgICByZXR1cm4gMDsKKyAgICAgICB9CisKKyAgICAgICByZXR1cm4g Y291bnQ7Cit9CisKKy8qIFNlZSBpZiBhbiBJSUMgYWRkcmVzcyBleGlzdHMuLgorICogYWRkciA9 IDcgYml0IGFkZHJlc3MsIHVuc2hpZnRlZAorICovCitzdGF0aWMgaW50CitjcG1faWljX3RyeWFk ZHJlc3Moc3RydWN0IGkyY19hbGdvXzh4eF9kYXRhICpjcG0sIGludCBhZGRyKQoreworICAgICAg IHZvbGF0aWxlIGlpY190ICppaXAgPSBjcG0tPmlpcDsKKyAgICAgICB2b2xhdGlsZSBpMmM4eHhf dCAqaTJjID0gY3BtLT5pMmM7CisgICAgICAgdm9sYXRpbGUgY3BtOHh4X3QgKmNwID0gY3BtLT5j cDsKKyAgICAgICB2b2xhdGlsZSBjYmRfdCAqdGJkZiwgKnJiZGY7CisgICAgICAgdV9jaGFyICp0 YjsKKyAgICAgICB1bnNpZ25lZCBsb25nIGZsYWdzLCBsZW47CisKKyAgICAgICBpZiAoY3BtX2Rl YnVnID4gMSkKKyAgICAgICAgICAgICAgIHByaW50aygiY3BtX2lpY190cnlhZGRyZXNzKGNwbT0l cCxhZGRyPSVkKVxuIiwgY3BtLCBhZGRyKTsKKworICAgICAgIC8qIGNoZWNrIGZvciBhbmQgdXNl IGEgbWljcm9jb2RlIHJlbG9jYXRpb24gcGF0Y2ggKi8KKyAgICAgICBpZiAoY3BtLT5yZWxvYykg eworICAgICAgICAgICAgICAgY3BtX3Jlc2V0X2lpY19wYXJhbXMoaWlwKTsKKyAgICAgICB9CisK KyAgICAgICBpZiAoY3BtX2RlYnVnICYmIGFkZHIgPSAwKSB7CisgICAgICAgICAgICAgICBwcmlu dGsoImlpcCAlcCwgZHBfYWRkciAweCV4XG4iLCBjcG0tPmlpcCwgY3BtLT5kcF9hZGRyKTsKKyAg ICAgICAgICAgICAgIHByaW50aygiaWljX3RiYXNlICVkLCByX3RiYXNlICVkXG4iLCBpaXAtPmlp Y190YmFzZSwgcl90YmFzZSk7CisgICAgICAgfQorCisgICAgICAgdGJkZiA9IChjYmRfdCAqKSZj cC0+Y3BfZHBtZW1baWlwLT5paWNfdGJhc2VdOworICAgICAgIHJiZGYgPSAoY2JkX3QgKikmY3At PmNwX2RwbWVtW2lpcC0+aWljX3JiYXNlXTsKKworICAgICAgIHRiID0gY3BtLT50ZW1wOworICAg ICAgIHRiID0gKHVfY2hhciAqKSgoKHVpbnQpdGIgKyAxNSkgJiB+MTUpOworCisgICAgICAgLyog ZG8gYSBzaW1wbGUgcmVhZCAqLworICAgICAgIHRiWzBdID0gKGFkZHIgPDwgMSkgfCAxOyAgICAg ICAgLyogZGV2aWNlIGFkZHJlc3MgKCsgcmVhZCkgKi8KKyAgICAgICBsZW4gPSAyOworCisgICAg ICAgZmx1c2hfZGNhY2hlX3JhbmdlKHRiLCB0YisxKTsKKworICAgICAgIHRiZGYtPmNiZF9idWZh ZGRyID0gX19wYSh0Yik7CisgICAgICAgdGJkZi0+Y2JkX2RhdGxlbiA9IGxlbjsKKyAgICAgICB0 YmRmLT5jYmRfc2MgKyAgICAgICAgICAgICAgIEJEX1NDX1JFQURZIHwgQkRfU0NfSU5UUlBUIHwg QkRfU0NfTEFTVCB8CisgICAgICAgICAgICAgICBCRF9TQ19XUkFQIHwgQkRfSUlDX1NUQVJUOwor CisgICAgICAgcmJkZi0+Y2JkX2RhdGxlbiA9IDA7CisgICAgICAgcmJkZi0+Y2JkX2J1ZmFkZHIg PSBfX3BhKHRiKzIpOworICAgICAgIHJiZGYtPmNiZF9zYyA9IEJEX1NDX0VNUFRZIHwgQkRfU0Nf V1JBUDsKKworICAgICAgIHNhdmVfZmxhZ3MoZmxhZ3MpOyBjbGkoKTsKKyAgICAgICBpMmMtPmky Y19pMmNtciA9IDB4MTM7ICAvKiBFbmFibGUgc29tZSBpbnRlcnVwdHMgKi8KKyAgICAgICBpMmMt PmkyY19pMmNlciA9IDB4ZmY7CisgICAgICAgaTJjLT5pMmNfaTJtb2QgPSAxOyAgICAgLyogRW5h YmxlICovCisgICAgICAgaTJjLT5pMmNfaTJjb20gPSAweDgxOyAgLyogU3RhcnQgbWFzdGVyICov CisKKyAgICAgICBpZiAoY3BtX2RlYnVnID4gMSkgcHJpbnRrKCJhYm91dCB0byBzbGVlcFxuIik7 CisKKyAgICAgICAvKiB3YWl0IGZvciBJSUMgdHJhbnNmZXIgKi8KKyAgICAgICBpbnRlcnJ1cHRp YmxlX3NsZWVwX29uKCZpaWNfd2FpdCk7CisgICAgICAgcmVzdG9yZV9mbGFncyhmbGFncyk7Cisg ICAgICAgaWYgKHNpZ25hbF9wZW5kaW5nKGN1cnJlbnQpKQorICAgICAgICAgICAgICAgcmV0dXJu IC1FSU87CisKKyAgICAgICBpZiAoY3BtX2RlYnVnID4gMSkgcHJpbnRrKCJiYWNrIGZyb20gc2xl ZXBcbiIpOworCisgICAgICAgaWYgKHRiZGYtPmNiZF9zYyAmIEJEX1NDX05BSykgeworICAgICAg ICAgICAgICAgaWYgKGNwbV9kZWJ1ZyA+IDEpIHByaW50aygiSUlDIHRyeTsgbm8gYWNrXG4iKTsK KyAgICAgICAgICAgICAgIHJldHVybiAwOworICAgICAgIH0KKyAgICAgICAgIAorICAgICAgIGlm ICh0YmRmLT5jYmRfc2MgJiBCRF9TQ19SRUFEWSkgeworICAgICAgICAgICAgICAgcHJpbnRrKCJJ SUMgdHJ5OyBjb21wbGV0ZSBidXQgdGJ1ZiByZWFkeVxuIik7CisgICAgICAgfQorICAgICAgIAor ICAgICAgIHJldHVybiAxOworfQorCitzdGF0aWMgaW50IGNwbV94ZmVyKHN0cnVjdCBpMmNfYWRh cHRlciAqaTJjX2FkYXAsCisgICAgICAgICAgICAgICAgICAgc3RydWN0IGkyY19tc2cgbXNnc1td LCAKKyAgICAgICAgICAgICAgICAgICBpbnQgbnVtKQoreworICAgICAgIHN0cnVjdCBpMmNfYWxn b184eHhfZGF0YSAqYWRhcCA9IGkyY19hZGFwLT5hbGdvX2RhdGE7CisgICAgICAgc3RydWN0IGky Y19tc2cgKnBtc2c7CisgICAgICAgaW50IGksIHJldDsKKyAgICAgICB1X2NoYXIgYWRkcjsKKyAg ICAKKyAgICAgICBmb3IgKGkgPSAwOyBpIDwgbnVtOyBpKyspIHsKKyAgICAgICAgICAgICAgIHBt c2cgPSAmbXNnc1tpXTsKKworICAgICAgICAgICAgICAgaWYgKGNwbV9kZWJ1ZykKKyAgICAgICAg ICAgICAgICAgICAgICAgcHJpbnRrKCJpMmMtYWxnby04eHgubzogIgorICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIiMlZCBhZGRyPTB4JXggZmxhZ3M9MHgleCBsZW49JWRcbiIsCisgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBpLCBwbXNnLT5hZGRyLCBwbXNnLT5mbGFncywgcG1z Zy0+bGVuKTsKKworICAgICAgICAgICAgICAgYWRkciA9IHBtc2ctPmFkZHIgPDwgMTsKKyAgICAg ICAgICAgICAgIGlmIChwbXNnLT5mbGFncyAmIEkyQ19NX1JEICkKKyAgICAgICAgICAgICAgICAg ICAgICAgYWRkciB8PSAxOworICAgICAgICAgICAgICAgaWYgKHBtc2ctPmZsYWdzICYgSTJDX01f UkVWX0RJUl9BRERSICkKKyAgICAgICAgICAgICAgICAgICAgICAgYWRkciBePSAxOworICAgIAor ICAgICAgICAgICAgICAgaWYgKCEocG1zZy0+ZmxhZ3MgJiBJMkNfTV9OT1NUQVJUKSkgeworICAg ICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgaWYgKHBtc2ctPmZsYWdzICYgSTJDX01fUkQg KSB7CisgICAgICAgICAgICAgICAgICAgICAgIC8qIHJlYWQgYnl0ZXMgaW50byBidWZmZXIqLwor ICAgICAgICAgICAgICAgICAgICAgICByZXQgPSBjcG1faWljX3JlYWQoYWRhcCwgYWRkciwgcG1z Zy0+YnVmLCBwbXNnLT5sZW4pOworICAgICAgICAgICAgICAgICAgICAgICBpZiAoY3BtX2RlYnVn KQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByaW50aygiaTJjLWFsZ28tOHh4Lm86 IHJlYWQgJWQgYnl0ZXNcbiIsIHJldCk7CisgICAgICAgICAgICAgICAgICAgICAgIGlmIChyZXQg PCBwbXNnLT5sZW4gKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIChy ZXQ8MCk/IHJldCA6IC1FUkVNT1RFSU87CisgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAg ICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgICAgICAgIC8qIHdyaXRlIGJ5dGVz IGZyb20gYnVmZmVyICovCisgICAgICAgICAgICAgICAgICAgICAgIHJldCA9IGNwbV9paWNfd3Jp dGUoYWRhcCwgYWRkciwgcG1zZy0+YnVmLCBwbXNnLT5sZW4pOworICAgICAgICAgICAgICAgICAg ICAgICBpZiAoY3BtX2RlYnVnKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByaW50 aygiaTJjLWFsZ28tOHh4Lm86IHdyb3RlICVkXG4iLCByZXQpOworICAgICAgICAgICAgICAgICAg ICAgICBpZiAocmV0IDwgcG1zZy0+bGVuICkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIHJldHVybiAocmV0PDApID8gcmV0IDogLUVSRU1PVEVJTzsKKyAgICAgICAgICAgICAgICAg ICAgICAgfQorICAgICAgICAgICAgICAgfQorICAgICAgIH0KKyAgICAgICByZXR1cm4gKG51bSk7 Cit9CisKK3N0YXRpYyBpbnQgYWxnb19jb250cm9sKHN0cnVjdCBpMmNfYWRhcHRlciAqYWRhcHRl ciwgCisgICAgICAgdW5zaWduZWQgaW50IGNtZCwgdW5zaWduZWQgbG9uZyBhcmcpCit7CisgICAg ICAgcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB1MzIgY3BtX2Z1bmMoc3RydWN0IGkyY19hZGFwdGVy ICphZGFwKQoreworICAgICAgIHJldHVybiBJMkNfRlVOQ19TTUJVU19FTVVMIHwgSTJDX0ZVTkNf MTBCSVRfQUREUiB8IAorICAgICAgICAgICAgICBJMkNfRlVOQ19QUk9UT0NPTF9NQU5HTElORzsg Cit9CisKKy8qIC0tLS0tZXhwb3J0ZWQgYWxnb3JpdGhtIGRhdGE6IC0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKworc3RhdGljIHN0cnVjdCBpMmNfYWxnb3JpdGhtIGNw bV9hbGdvID0geworICAgICAgICJNUEM4eHggQ1BNIGFsZ29yaXRobSIsCisgICAgICAgSTJDX0FM R09fTVBDOFhYLAorICAgICAgIGNwbV94ZmVyLAorICAgICAgIE5VTEwsCisgICAgICAgTlVMTCwg ICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBzbGF2ZV94bWl0ICAgICAgICAgICAqLworICAg ICAgIE5VTEwsICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogc2xhdmVfcmVjdiAgICAgICAg ICAgKi8KKyAgICAgICBhbGdvX2NvbnRyb2wsICAgICAgICAgICAgICAgICAgIC8qIGlvY3RsICAg ICAgICAgICAgICAgICovCisgICAgICAgY3BtX2Z1bmMsICAgICAgICAgICAgICAgICAgICAgICAv KiBmdW5jdGlvbmFsaXR5ICAgICAgICAqLworfTsKKworLyogCisgKiByZWdpc3RlcmluZyBmdW5j dGlvbnMgdG8gbG9hZCBhbGdvcml0aG1zIGF0IHJ1bnRpbWUgCisgKi8KK2ludCBpMmNfOHh4X2Fk ZF9idXMoc3RydWN0IGkyY19hZGFwdGVyICphZGFwKQoreworICAgICAgIGludCBpOworICAgICAg IHN0cnVjdCBpMmNfYWxnb184eHhfZGF0YSAqY3BtX2FkYXAgPSBhZGFwLT5hbGdvX2RhdGE7CisK KyAgICAgICBpZiAoY3BtX2RlYnVnKQorICAgICAgICAgICAgICAgcHJpbnRrKCJpMmMtYWxnby04 eHgubzogaHcgcm91dGluZXMgZm9yICVzIHJlZ2lzdGVyZWQuXG4iLAorICAgICAgICAgICAgICAg ICAgICAgIGFkYXAtPm5hbWUpOworCisgICAgICAgLyogcmVnaXN0ZXIgbmV3IGFkYXB0ZXIgdG8g aTJjIG1vZHVsZS4uLiAqLworCisgICAgICAgYWRhcC0+aWQgfD0gY3BtX2FsZ28uaWQ7CisgICAg ICAgYWRhcC0+YWxnbyA9ICZjcG1fYWxnbzsKKworI2lmZGVmIE1PRFVMRQorICAgICAgIE1PRF9J TkNfVVNFX0NPVU5UOworI2VuZGlmCisKKyAgICAgICBpMmNfYWRkX2FkYXB0ZXIoYWRhcCk7Cisg ICAgICAgY3BtX2lpY19pbml0KGNwbV9hZGFwKTsKKworICAgICAgIC8qIHNjYW4gYnVzICovCisg ICAgICAgaWYgKGNwbV9zY2FuKSB7CisgICAgICAgICAgICAgICBwcmludGsoS0VSTl9JTkZPICIg aTJjLWFsZ28tOHh4Lm86IHNjYW5uaW5nIGJ1cyAlcy4uLlxuIiwKKyAgICAgICAgICAgICAgICAg ICAgICBhZGFwLT5uYW1lKTsKKyAgICAgICAgICAgICAgIGZvciAoaSA9IDA7IGkgPCAxMjg7IGkr KykgeworICAgICAgICAgICAgICAgICAgICAgICBpZiAoY3BtX2lpY190cnlhZGRyZXNzKGNwbV9h ZGFwLCBpKSkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByaW50aygiKCUwMngp IixpPDwxKTsgCisgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgIH0KKyAg ICAgICAgICAgICAgIHByaW50aygiXG4iKTsKKyAgICAgICB9CisgICAgICAgcmV0dXJuIDA7Cit9 CisKKworaW50IGkyY184eHhfZGVsX2J1cyhzdHJ1Y3QgaTJjX2FkYXB0ZXIgKmFkYXApCit7Cisg ICAgICAgaW50IHJlczsKKyAgICAgICBzdHJ1Y3QgaTJjX2FsZ29fOHh4X2RhdGEgKmNwbV9hZGFw ID0gYWRhcC0+YWxnb19kYXRhOworCisgICAgICAgY3BtX2lpY19zaHV0ZG93bihjcG1fYWRhcCk7 CisKKyAgICAgICBpZiAoKHJlcyA9IGkyY19kZWxfYWRhcHRlcihhZGFwKSkgPCAwKQorICAgICAg ICAgICAgICAgcmV0dXJuIHJlczsKKworICAgICAgIHByaW50aygiaTJjLWFsZ28tOHh4Lm86IGFk YXB0ZXIgdW5yZWdpc3RlcmVkOiAlc1xuIixhZGFwLT5uYW1lKTsKKworI2lmZGVmIE1PRFVMRQor ICAgICAgIE1PRF9ERUNfVVNFX0NPVU5UOworI2VuZGlmCisgICAgICAgcmV0dXJuIDA7Cit9CisK K0VYUE9SVF9TWU1CT0woaTJjXzh4eF9hZGRfYnVzKTsKK0VYUE9SVF9TWU1CT0woaTJjXzh4eF9k ZWxfYnVzKTsKKworaW50IF9faW5pdCBpMmNfYWxnb184eHhfaW5pdCAodm9pZCkKK3sKKyAgICAg ICBwcmludGsoImkyYy1hbGdvLTh4eC5vOiBpMmMgbXBjOHh4IGFsZ29yaXRobSBtb2R1bGUgdmVy c2lvbiAlcyAoJXMpXG4iLCBJMkNfVkVSU0lPTiwgSTJDX0RBVEUpOworICAgICAgIHJldHVybiAw OworfQorCisKKyNpZmRlZiBNT0RVTEUKK01PRFVMRV9BVVRIT1IoIkJyYWQgUGFya2VyIDxicmFk QGhlZWx0b2UuY29tPiIpOworTU9EVUxFX0RFU0NSSVBUSU9OKCJJMkMtQnVzIE1QQzhYWCBhbGdv cml0aG0iKTsKKworaW50IGluaXRfbW9kdWxlKHZvaWQpIAoreworICAgICAgIHJldHVybiBpMmNf YWxnb184eHhfaW5pdCgpOworfQorCit2b2lkIGNsZWFudXBfbW9kdWxlKHZvaWQpIAoreworfQor I2VuZGlmCi0tLSAvZGV2L251bGwgICAxOTk0LTA3LTE3IDE5OjQ2OjE4LjAwMDAwMDAwMCAtMDQw MAorKysgbGludXgvaW5jbHVkZS9saW51eC9pMmMtYWxnby04eHguaCAgMjAwMS0wNS0xNCAyMjox NDo1OC4wMDAwMDAwMDAgLTA0MDAKQEAgLTAsMCArMSwyOSBAQAorLyogLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LSAqLworLyogaTJjLWFsZ28tOHh4LmggaTJjIGRyaXZlciBhbGdvcml0aG1zIGZvciBNUFg4WFgg Q1BNICAgICAgICAgICAgICAgICAgICAgICovCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisKKy8q ICRJZDogaTJjLWFsZ28tOHh4LmgsdiAxLjEgMjAwMS8wNS8xNSAwMjoxNDo1OCBtZHMgRXhwICQg Ki8KKworI2lmbmRlZiBJMkNfQUxHT184WFhfSAorI2RlZmluZSBJMkNfQUxHT184WFhfSCAxCisK KyNpbmNsdWRlIDxsaW51eC9pMmMuaD4KKworc3RydWN0IGkyY19hbGdvXzh4eF9kYXRhIHsKKyAg ICAgICB1aW50IGRwX2FkZHI7CisgICAgICAgaW50IHJlbG9jOworICAgICAgIHZvbGF0aWxlIGky Yzh4eF90ICppMmM7CisgICAgICAgdm9sYXRpbGUgaWljX3QgICppaXA7CisgICAgICAgdm9sYXRp bGUgY3BtOHh4X3QgKmNwOworCisgICAgICAgaW50ICAgICAoKnNldGlzcikgKGludCBpcnEsCisg ICAgICAgICAgICAgICAgICAgICAgICAgIHZvaWQgKCpmdW5jKShpbnQsIHZvaWQgKCopKHZvaWQg KiksIHZvaWQgKiksCisgICAgICAgICAgICAgICAgICAgICAgICAgIHZvaWQgKmRhdGEpOworCisg ICAgICAgdV9jaGFyICB0ZW1wWzUxM107Cit9OworCitpbnQgaTJjXzh4eF9hZGRfYnVzKHN0cnVj dCBpMmNfYWRhcHRlciAqKTsKK2ludCBpMmNfOHh4X2RlbF9idXMoc3RydWN0IGkyY19hZGFwdGVy ICopOworCisjZW5kaWYgLyogSTJDX0FMR09fOFhYX0ggKi8KLS0tIGxpbnV4L2RyaXZlcnMvaTJj L2kyYy1hbGdvLWJpdC5jLm9yaWcgICAgICAgMjAwMi0wNS0wOSAxODoyMToyNi4wMDAwMDAwMDAg LTA0MDAKKysrIGxpbnV4L2RyaXZlcnMvaTJjL2kyYy1hbGdvLWJpdC5jICAgIDIwMDItMDUtMTQg MTc6NTg6MzUuMDAwMDAwMDAwIC0wNDAwCkBAIC0yMSw3ICsyMSw3IEBACiAvKiBXaXRoIHNvbWUg Y2hhbmdlcyBmcm9tIEt5P3N0aSBNP2xra2kgPGttYWxra2lAY2MuaHV0LmZpPiBhbmQgZXZlbgog ICAgRnJvZG8gTG9vaWphYXJkIDxmcm9kb2xAZGRzLm5sPiAqLwogCi0vKiAkSWQ6IGkyYy1hbGdv LWJpdC5jLHYgMS4zMCAyMDAxLzA3LzI5IDAyOjQ0OjI1IG1kcyBFeHAgJCAqLworLyogJElkOiBp MmMtYWxnby1iaXQuYyx2IDEuMzQgMjAwMS8xMS8xOSAxODo0NTowMiBtZHMgRXhwICQgKi8KIAog I2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgpAQCAt MzMsNyArMzMsNiBAQAogI2luY2x1ZGUgPGxpbnV4L2lvcG9ydC5oPgogI2luY2x1ZGUgPGxpbnV4 L2Vycm5vLmg+CiAjaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KLQogI2luY2x1ZGUgPGxpbnV4L2ky Yy5oPgogI2luY2x1ZGUgPGxpbnV4L2kyYy1hbGdvLWJpdC5oPgogCkBAIC00OSw4ICs0OCw4IEBA CiAvKiByZXNwZWN0aXZlbHkuIFRoaXMgbWFrZXMgc3VyZSB0aGF0IHRoZSBhbGdvcml0aG0gd29y a3MuIFNvbWUgY2hpcHMgICAqLwogLyogbWlnaHQgbm90IGxpa2UgdGhpcywgYXMgdGhleSBoYXZl IGFuIGludGVybmFsIHRpbWVvdXQgb2Ygc29tZSBtaWxzICAqLwogLyoKLSNkZWZpbmUgU0xPX0lP ICAgICAgamlmPWppZmZpZXM7d2hpbGUodGltZV9iZWZvcmVfZXEoamlmZmllcywgamlmK2kyY190 YWJsZVttaW5vcl0udmVyeXNsb3cpKVwKLSAgICAgICAgICAgICAgICAgICAgICAgIGNvbmRfcmVz Y2hlZCgpOworI2RlZmluZSBTTE9fSU8gICAgICBqaWY9amlmZmllczt3aGlsZShqaWZmaWVzPD1q aWYraTJjX3RhYmxlW21pbm9yXS52ZXJ5c2xvdylcCisgICAgICAgICAgICAgICAgICAgICAgICBp ZiAobmVlZF9yZXNjaGVkKSBzY2hlZHVsZSgpOwogKi8KIAogCkBAIC0xMTcsMTIgKzExNiwxMyBA QAogICAgICAgICAgICAgICAgICogd2hpbGUgdGhleSBhcmUgcHJvY2Vzc2luZyBkYXRhIGludGVy bmFsbHkuIAogICAgICAgICAgICAgICAgICovCiAgICAgICAgICAgICAgICBzZXRzY2woYWRhcCwx KTsKLSAgICAgICAgICAgICAgIGlmICh0aW1lX2FmdGVyX2VxKGppZmZpZXMsIHN0YXJ0K2FkYXAt PnRpbWVvdXQpKSB7CisgICAgICAgICAgICAgICBpZiAoc3RhcnQrYWRhcC0+dGltZW91dCA8PSBq aWZmaWVzKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAtRVRJTUVET1VUOwogICAg ICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgY29uZF9yZXNjaGVkKCk7CisgICAgICAgICAg ICAgICBpZiAoY3VycmVudC0+bmVlZF9yZXNjaGVkKQorICAgICAgICAgICAgICAgICAgICAgICBz Y2hlZHVsZSgpOwogICAgICAgIH0KLSAgICAgICBERUJTVEFUKHByaW50aygibmVlZGVkICVsZCBq aWZmaWVzXG4iLCBqaWZmaWVzLXN0YXJ0KSk7CisgICAgICAgREVCU1RBVChwcmludGsoS0VSTl9E RUJVRyAibmVlZGVkICVsZCBqaWZmaWVzXG4iLCBqaWZmaWVzLXN0YXJ0KSk7CiAjaWZkZWYgU0xP X0lPCiAgICAgICAgU0xPX0lPCiAjZW5kaWYKQEAgLTE3OCwxMiArMTc4LDEyIEBACiAgICAgICAg c3RydWN0IGkyY19hbGdvX2JpdF9kYXRhICphZGFwID0gaTJjX2FkYXAtPmFsZ29fZGF0YTsKIAog ICAgICAgIC8qIGFzc2VydDogc2NsIGlzIGxvdyAqLwotICAgICAgIERFQjIocHJpbnRrKCIgaTJj X291dGI6JTIuMlhcbiIsYyYweGZmKSk7CisgICAgICAgREVCMihwcmludGsoS0VSTl9ERUJVRyAi IGkyY19vdXRiOiUyLjJYXG4iLGMmMHhmZikpOwogICAgICAgIGZvciAoIGk9NyA7IGk+PTAgOyBp LS0gKSB7CiAgICAgICAgICAgICAgICBzYiA9IGMgJiAoIDEgPDwgaSApOwogICAgICAgICAgICAg ICAgc2V0c2RhKGFkYXAsc2IpOwogICAgICAgICAgICAgICAgdWRlbGF5KGFkYXAtPnVkZWxheSk7 Ci0gICAgICAgICAgICAgICBERUJQUk9UTyhwcmludGsoIiVkIixzYiE9MCkpOworICAgICAgICAg ICAgICAgREVCUFJPVE8ocHJpbnRrKEtFUk5fREVCVUcgIiVkIixzYiE9MCkpOwogICAgICAgICAg ICAgICAgaWYgKHNjbGhpKGFkYXApPDApIHsgLyogdGltZWQgb3V0ICovCiAgICAgICAgICAgICAg ICAgICAgICAgIHNkYWhpKGFkYXApOyAvKiB3ZSBkb24ndCB3YW50IHRvIGJsb2NrIHRoZSBuZXQg Ki8KICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIC1FVElNRURPVVQ7CkBAIC0yMDAsMTAg KzIwMCwxMCBAQAogICAgICAgIH07CiAgICAgICAgLyogcmVhZCBhY2s6IFNEQSBzaG91bGQgYmUg cHVsbGVkIGRvd24gYnkgc2xhdmUgKi8KICAgICAgICBhY2s9Z2V0c2RhKGFkYXApOyAgICAgICAv KiBhY2s6IHNkYSBpcyBwdWxsZWQgbG93IC0+c3VjY2Vzcy4gICAgICovCi0gICAgICAgREVCMihw cmludGsoIiBpMmNfb3V0YjogZ2V0c2RhKCkgPSAgMHglMi4yeFxuIiwgfmFjayApKTsKKyAgICAg ICBERUIyKHByaW50ayhLRVJOX0RFQlVHICIgaTJjX291dGI6IGdldHNkYSgpID0gIDB4JTIuMnhc biIsIH5hY2sgKSk7CiAKLSAgICAgICBERUJQUk9UTyggcHJpbnRrKCJbJTIuMnhdIixjJjB4ZmYp ICk7Ci0gICAgICAgREVCUFJPVE8oaWYgKDA9YWNrKXsgcHJpbnRrKCIgQSAiKTt9IGVsc2UgcHJp bnRrKCIgTkEgIikgKTsKKyAgICAgICBERUJQUk9UTyggcHJpbnRrKEtFUk5fREVCVUcgIlslMi4y eF0iLGMmMHhmZikgKTsKKyAgICAgICBERUJQUk9UTyhpZiAoMD1hY2speyBwcmludGsoS0VSTl9E RUJVRyAiIEEgIik7fSBlbHNlIHByaW50ayhLRVJOX0RFQlVHICIgTkEgIikgKTsKICAgICAgICBz Y2xsbyhhZGFwKTsKICAgICAgICByZXR1cm4gMD1hY2s7ICAgICAgICAgIC8qIHJldHVybiAxIGlm IGRldmljZSBhY2tlZCAgICAgICovCiAgICAgICAgLyogYXNzZXJ0OiBzY2wgaXMgbG93IChzZGEg dW5kZWYpICovCkBAIC0yMTksNyArMjE5LDcgQEAKICAgICAgICBzdHJ1Y3QgaTJjX2FsZ29fYml0 X2RhdGEgKmFkYXAgPSBpMmNfYWRhcC0+YWxnb19kYXRhOwogCiAgICAgICAgLyogYXNzZXJ0OiBz Y2wgaXMgbG93ICovCi0gICAgICAgREVCMihwcmludGsoImkyY19pbmIuXG4iKSk7CisgICAgICAg REVCMihwcmludGsoS0VSTl9ERUJVRyAiaTJjX2luYi5cbiIpKTsKIAogICAgICAgIHNkYWhpKGFk YXApOwogICAgICAgIGZvciAoaT0wO2k8ODtpKyspIHsKQEAgLTIzMiw3ICsyMzIsNyBAQAogICAg ICAgICAgICAgICAgc2NsbG8oYWRhcCk7CiAgICAgICAgfQogICAgICAgIC8qIGFzc2VydDogc2Ns IGlzIGxvdyAqLwotICAgICAgIERFQlBST1RPKHByaW50aygiICUyLjJ4IiwgaW5kYXRhICYgMHhm ZikpOworICAgICAgIERFQlBST1RPKHByaW50ayhLRVJOX0RFQlVHICIgJTIuMngiLCBpbmRhdGEg JiAweGZmKSk7CiAgICAgICAgcmV0dXJuIChpbnQpIChpbmRhdGEgJiAweGZmKTsKIH0KIApAQCAt MjQ0LDY5ICsyNDQsNjkgQEAKICAgICAgICBpbnQgc2NsLHNkYTsKICAgICAgICBzZGE9Z2V0c2Rh KGFkYXApOwogICAgICAgIGlmIChhZGFwLT5nZXRzY2w9TlVMTCkgewotICAgICAgICAgICAgICAg cHJpbnRrKCJpMmMtYWxnby1iaXQubzogV2FybmluZzogQWRhcHRlciBjYW4ndCByZWFkIGZyb20g Y2xvY2sgbGluZSAtIHNraXBwaW5nIHRlc3QuXG4iKTsKKyAgICAgICAgICAgICAgIHByaW50ayhL RVJOX1dBUk5JTkcgImkyYy1hbGdvLWJpdC5vOiBXYXJuaW5nOiBBZGFwdGVyIGNhbid0IHJlYWQg ZnJvbSBjbG9jayBsaW5lIC0gc2tpcHBpbmcgdGVzdC5cbiIpOwogICAgICAgICAgICAgICAgcmV0 dXJuIDA7ICAgICAgICAgICAgICAgCiAgICAgICAgfQogICAgICAgIHNjbD1nZXRzY2woYWRhcCk7 Ci0gICAgICAgcHJpbnRrKCJpMmMtYWxnby1iaXQubzogQWRhcHRlcjogJXMgc2NsOiAlZCAgc2Rh OiAlZCAtLSB0ZXN0aW5nLi4uXG4iLAorICAgICAgIHByaW50ayhLRVJOX0lORk8gImkyYy1hbGdv LWJpdC5vOiBBZGFwdGVyOiAlcyBzY2w6ICVkICBzZGE6ICVkIC0tIHRlc3RpbmcuLi5cbiIsCiAg ICAgICAgICAgICAgIG5hbWUsZ2V0c2NsKGFkYXApLGdldHNkYShhZGFwKSk7CiAgICAgICAgaWYg KCFzY2wgfHwgIXNkYSApIHsKLSAgICAgICAgICAgICAgIHByaW50aygiaTJjLWFsZ28tYml0Lm86 ICVzIHNlZW1zIHRvIGJlIGJ1c3kuXG4iLG5hbWUpOworICAgICAgICAgICAgICAgcHJpbnRrKEtF Uk5fSU5GTyAiIGkyYy1hbGdvLWJpdC5vOiAlcyBzZWVtcyB0byBiZSBidXN5LlxuIixuYW1lKTsK ICAgICAgICAgICAgICAgIGdvdG8gYmFpbG91dDsKICAgICAgICB9CiAgICAgICAgc2RhbG8oYWRh cCk7Ci0gICAgICAgcHJpbnRrKCJpMmMtYWxnby1iaXQubzoxIHNjbDogJWQgIHNkYTogJWQgXG4i LGdldHNjbChhZGFwKSwKKyAgICAgICBwcmludGsoS0VSTl9ERUJVRyAiaTJjLWFsZ28tYml0Lm86 MSBzY2w6ICVkICBzZGE6ICVkIFxuIixnZXRzY2woYWRhcCksCiAgICAgICAgICAgICAgIGdldHNk YShhZGFwKSk7CiAgICAgICAgaWYgKCAwICE9IGdldHNkYShhZGFwKSApIHsKLSAgICAgICAgICAg ICAgIHByaW50aygiaTJjLWFsZ28tYml0Lm86ICVzIFNEQSBzdHVjayBoaWdoIVxuIixuYW1lKTsK KyAgICAgICAgICAgICAgIHByaW50ayhLRVJOX1dBUk5JTkcgImkyYy1hbGdvLWJpdC5vOiAlcyBT REEgc3R1Y2sgaGlnaCFcbiIsbmFtZSk7CiAgICAgICAgICAgICAgICBzZGFoaShhZGFwKTsKICAg ICAgICAgICAgICAgIGdvdG8gYmFpbG91dDsKICAgICAgICB9CiAgICAgICAgaWYgKCAwID0gZ2V0 c2NsKGFkYXApICkgewotICAgICAgICAgICAgICAgcHJpbnRrKCJpMmMtYWxnby1iaXQubzogJXMg U0NMIHVuZXhwZWN0ZWQgbG93IHdoaWxlIHB1bGxpbmcgU0RBIGxvdyFcbiIsCisgICAgICAgICAg ICAgICBwcmludGsoS0VSTl9XQVJOSU5HICJpMmMtYWxnby1iaXQubzogJXMgU0NMIHVuZXhwZWN0 ZWQgbG93IHdoaWxlIHB1bGxpbmcgU0RBIGxvdyFcbiIsCiAgICAgICAgICAgICAgICAgICAgICAg IG5hbWUpOwogICAgICAgICAgICAgICAgZ290byBiYWlsb3V0OwogICAgICAgIH0gICAgICAgICAg ICAgICAKICAgICAgICBzZGFoaShhZGFwKTsKLSAgICAgICBwcmludGsoImkyYy1hbGdvLWJpdC5v OjIgc2NsOiAlZCAgc2RhOiAlZCBcbiIsZ2V0c2NsKGFkYXApLAorICAgICAgIHByaW50ayhLRVJO X0RFQlVHICJpMmMtYWxnby1iaXQubzoyIHNjbDogJWQgIHNkYTogJWQgXG4iLGdldHNjbChhZGFw KSwKICAgICAgICAgICAgICAgZ2V0c2RhKGFkYXApKTsKICAgICAgICBpZiAoIDAgPSBnZXRzZGEo YWRhcCkgKSB7Ci0gICAgICAgICAgICAgICBwcmludGsoImkyYy1hbGdvLWJpdC5vOiAlcyBTREEg c3R1Y2sgbG93IVxuIixuYW1lKTsKKyAgICAgICAgICAgICAgIHByaW50ayhLRVJOX1dBUk5JTkcg ImkyYy1hbGdvLWJpdC5vOiAlcyBTREEgc3R1Y2sgbG93IVxuIixuYW1lKTsKICAgICAgICAgICAg ICAgIHNkYWhpKGFkYXApOwogICAgICAgICAgICAgICAgZ290byBiYWlsb3V0OwogICAgICAgIH0K ICAgICAgICBpZiAoIDAgPSBnZXRzY2woYWRhcCkgKSB7Ci0gICAgICAgICAgICAgICBwcmludGso ImkyYy1hbGdvLWJpdC5vOiAlcyBTQ0wgdW5leHBlY3RlZCBsb3cgd2hpbGUgU0RBIGhpZ2ghXG4i LAorICAgICAgICAgICAgICAgcHJpbnRrKEtFUk5fV0FSTklORyAiaTJjLWFsZ28tYml0Lm86ICVz IFNDTCB1bmV4cGVjdGVkIGxvdyB3aGlsZSBTREEgaGlnaCFcbiIsCiAgICAgICAgICAgICAgICAg ICAgICAgbmFtZSk7CiAgICAgICAgZ290byBiYWlsb3V0OwogICAgICAgIH0KICAgICAgICBzY2xs byhhZGFwKTsKLSAgICAgICBwcmludGsoImkyYy1hbGdvLWJpdC5vOjMgc2NsOiAlZCAgc2RhOiAl ZCBcbiIsZ2V0c2NsKGFkYXApLAorICAgICAgIHByaW50ayhLRVJOX0RFQlVHICJpMmMtYWxnby1i aXQubzozIHNjbDogJWQgIHNkYTogJWQgXG4iLGdldHNjbChhZGFwKSwKICAgICAgICAgICAgICAg Z2V0c2RhKGFkYXApKTsKICAgICAgICBpZiAoIDAgIT0gZ2V0c2NsKGFkYXApICkgewotICAgICAg ICAgICAgICAgcHJpbnRrKCJpMmMtYWxnby1iaXQubzogJXMgU0NMIHN0dWNrIGhpZ2ghXG4iLG5h bWUpOworICAgICAgICAgICAgICAgcHJpbnRrKEtFUk5fV0FSTklORyAiaTJjLWFsZ28tYml0Lm86 ICVzIFNDTCBzdHVjayBoaWdoIVxuIixuYW1lKTsKICAgICAgICAgICAgICAgIHNjbGhpKGFkYXAp OwogICAgICAgICAgICAgICAgZ290byBiYWlsb3V0OwogICAgICAgIH0KICAgICAgICBpZiAoIDAg PSBnZXRzZGEoYWRhcCkgKSB7Ci0gICAgICAgICAgICAgICBwcmludGsoImkyYy1hbGdvLWJpdC5v OiAlcyBTREEgdW5leHBlY3RlZCBsb3cgd2hpbGUgcHVsbGluZyBTQ0wgbG93IVxuIiwKKyAgICAg ICAgICAgICAgIHByaW50ayhLRVJOX1dBUk5JTkcgImkyYy1hbGdvLWJpdC5vOiAlcyBTREEgdW5l eHBlY3RlZCBsb3cgd2hpbGUgcHVsbGluZyBTQ0wgbG93IVxuIiwKICAgICAgICAgICAgICAgICAg ICAgICAgbmFtZSk7CiAgICAgICAgICAgICAgICBnb3RvIGJhaWxvdXQ7CiAgICAgICAgfQogICAg ICAgIHNjbGhpKGFkYXApOwotICAgICAgIHByaW50aygiaTJjLWFsZ28tYml0Lm86NCBzY2w6ICVk ICBzZGE6ICVkIFxuIixnZXRzY2woYWRhcCksCisgICAgICAgcHJpbnRrKEtFUk5fREVCVUcgImky Yy1hbGdvLWJpdC5vOjQgc2NsOiAlZCAgc2RhOiAlZCBcbiIsZ2V0c2NsKGFkYXApLAogICAgICAg ICAgICAgICBnZXRzZGEoYWRhcCkpOwogICAgICAgIGlmICggMCA9IGdldHNjbChhZGFwKSApIHsK LSAgICAgICAgICAgICAgIHByaW50aygiaTJjLWFsZ28tYml0Lm86ICVzIFNDTCBzdHVjayBsb3ch XG4iLG5hbWUpOworICAgICAgICAgICAgICAgcHJpbnRrKEtFUk5fV0FSTklORyAiaTJjLWFsZ28t Yml0Lm86ICVzIFNDTCBzdHVjayBsb3chXG4iLG5hbWUpOwogICAgICAgICAgICAgICAgc2NsaGko YWRhcCk7CiAgICAgICAgICAgICAgICBnb3RvIGJhaWxvdXQ7CiAgICAgICAgfQogICAgICAgIGlm ICggMCA9IGdldHNkYShhZGFwKSApIHsKLSAgICAgICAgICAgICAgIHByaW50aygiaTJjLWFsZ28t Yml0Lm86ICVzIFNEQSB1bmV4cGVjdGVkIGxvdyB3aGlsZSBTQ0wgaGlnaCFcbiIsCisgICAgICAg ICAgICAgICBwcmludGsoS0VSTl9XQVJOSU5HICJpMmMtYWxnby1iaXQubzogJXMgU0RBIHVuZXhw ZWN0ZWQgbG93IHdoaWxlIFNDTCBoaWdoIVxuIiwKICAgICAgICAgICAgICAgICAgICAgICAgbmFt ZSk7CiAgICAgICAgICAgICAgICBnb3RvIGJhaWxvdXQ7CiAgICAgICAgfQotICAgICAgIHByaW50 aygiaTJjLWFsZ28tYml0Lm86ICVzIHBhc3NlZCB0ZXN0LlxuIixuYW1lKTsKKyAgICAgICBwcmlu dGsoS0VSTl9JTkZPICJpMmMtYWxnby1iaXQubzogJXMgcGFzc2VkIHRlc3QuXG4iLG5hbWUpOwog ICAgICAgIHJldHVybiAwOwogYmFpbG91dDoKICAgICAgICBzZGFoaShhZGFwKTsKQEAgLTM0MCw3 ICszNDAsNyBAQAogICAgICAgICAgICAgICAgaTJjX3N0YXJ0KGFkYXApOwogICAgICAgICAgICAg ICAgdWRlbGF5KGFkYXAtPnVkZWxheSk7CiAgICAgICAgfQotICAgICAgIERFQjIoaWYgKGkpIHBy aW50aygiaTJjLWFsZ28tYml0Lm86IG5lZWRlZCAlZCByZXRyaWVzIGZvciAlZFxuIiwKKyAgICAg ICBERUIyKGlmIChpKSBwcmludGsoS0VSTl9ERUJVRyAiaTJjLWFsZ28tYml0Lm86IG5lZWRlZCAl ZCByZXRyaWVzIGZvciAlZFxuIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgaSxhZGRyKSk7 CiAgICAgICAgcmV0dXJuIHJldDsKIH0KQEAgLTM1NSw3ICszNTUsNyBAQAogCiAgICAgICAgd2hp bGUgKGNvdW50ID4gMCkgewogICAgICAgICAgICAgICAgYyA9ICp0ZW1wOwotICAgICAgICAgICAg ICAgREVCMihwcmludGsoImkyYy1hbGdvLWJpdC5vOiAlcyBpMmNfd3JpdGU6IHdyaXRpbmcgJTIu MlhcbiIsCisgICAgICAgICAgICAgICBERUIyKHByaW50ayhLRVJOX0RFQlVHICJpMmMtYWxnby1i aXQubzogJXMgaTJjX3dyaXRlOiB3cml0aW5nICUyLjJYXG4iLAogICAgICAgICAgICAgICAgICAg ICAgICAgICAgaTJjX2FkYXAtPm5hbWUsIGMmMHhmZikpOwogICAgICAgICAgICAgICAgcmV0dmFs ID0gaTJjX291dGIoaTJjX2FkYXAsYyk7CiAgICAgICAgICAgICAgICBpZiAocmV0dmFsPjApIHsK QEAgLTM2Myw3ICszNjMsNyBAQAogICAgICAgICAgICAgICAgICAgICAgICB0ZW1wKys7CiAgICAg ICAgICAgICAgICAgICAgICAgIHdyY291bnQrKzsKICAgICAgICAgICAgICAgIH0gZWxzZSB7IC8q IGFyYml0cmF0aW9uIG9yIG5vIGFja25vd2xlZGdlICovCi0gICAgICAgICAgICAgICAgICAgICAg IHByaW50aygiaTJjLWFsZ28tYml0Lm86ICVzIGkyY193cml0ZTogZXJyb3IgLSBiYWlsb3V0Llxu IiwKKyAgICAgICAgICAgICAgICAgICAgICAgcHJpbnRrKEtFUk5fRVJSICJpMmMtYWxnby1iaXQu bzogJXMgaTJjX3dyaXRlOiBlcnJvciAtIGJhaWxvdXQuXG4iLAogICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgaTJjX2FkYXAtPm5hbWUpOwogICAgICAgICAgICAgICAgICAgICAgICBpMmNf c3RvcChhZGFwKTsKICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIChyZXR2YWw8MCk/IHJl dHZhbCA6IC1FRkFVTFQ7CkBAIC0zOTEsNyArMzkxLDcgQEAKICAgICAgICAgICAgICAgICAgICAg ICAgKnRlbXAgPSBpbnZhbDsKICAgICAgICAgICAgICAgICAgICAgICAgcmRjb3VudCsrOwogICAg ICAgICAgICAgICAgfSBlbHNlIHsgICAvKiByZWFkIHRpbWVkIG91dCAqLwotICAgICAgICAgICAg ICAgICAgICAgICBwcmludGsoImkyYy1hbGdvLWJpdC5vOiBpMmNfcmVhZDogaTJjX2luYiB0aW1l ZCBvdXQuXG4iKTsKKyAgICAgICAgICAgICAgICAgICAgICAgcHJpbnRrKEtFUk5fRVJSICJpMmMt YWxnby1iaXQubzogaTJjX3JlYWQ6IGkyY19pbmIgdGltZWQgb3V0LlxuIik7CiAgICAgICAgICAg ICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgfQogCkBAIC00MDQsNyArNDA0LDcg QEAKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIGlmIChzY2xoaShhZGFwKTwwKSB7 ICAgIC8qIHRpbWVvdXQgKi8KICAgICAgICAgICAgICAgICAgICAgICAgc2RhaGkoYWRhcCk7Ci0g ICAgICAgICAgICAgICAgICAgICAgIHByaW50aygiaTJjLWFsZ28tYml0Lm86IGkyY19yZWFkOiBU aW1lb3V0IGF0IGFja1xuIik7CisgICAgICAgICAgICAgICAgICAgICAgIHByaW50ayhLRVJOX0VS UiAiaTJjLWFsZ28tYml0Lm86IGkyY19yZWFkOiBUaW1lb3V0IGF0IGFja1xuIik7CiAgICAgICAg ICAgICAgICAgICAgICAgIHJldHVybiAtRVRJTUVET1VUOwogICAgICAgICAgICAgICAgfTsKICAg ICAgICAgICAgICAgIHNjbGxvKGFkYXApOwpAQCAtNDM0LDE4ICs0MzQsMTggQEAKICAgICAgICBp ZiAoIChmbGFncyAmIEkyQ19NX1RFTikgICkgeyAKICAgICAgICAgICAgICAgIC8qIGEgdGVuIGJp dCBhZGRyZXNzICovCiAgICAgICAgICAgICAgICBhZGRyID0gMHhmMCB8ICgoIG1zZy0+YWRkciA+ PiA3KSAmIDB4MDMpOwotICAgICAgICAgICAgICAgREVCMihwcmludGsoImFkZHIwOiAlZFxuIixh ZGRyKSk7CisgICAgICAgICAgICAgICBERUIyKHByaW50ayhLRVJOX0RFQlVHICJhZGRyMDogJWRc biIsYWRkcikpOwogICAgICAgICAgICAgICAgLyogdHJ5IGV4dGVuZGVkIGFkZHJlc3MgY29kZS4u LiovCiAgICAgICAgICAgICAgICByZXQgPSB0cnlfYWRkcmVzcyhpMmNfYWRhcCwgYWRkciwgcmV0 cmllcyk7CiAgICAgICAgICAgICAgICBpZiAocmV0IT0xKSB7Ci0gICAgICAgICAgICAgICAgICAg ICAgIHByaW50aygiZGllZCBhdCBleHRlbmRlZCBhZGRyZXNzIGNvZGUuXG4iKTsKKyAgICAgICAg ICAgICAgICAgICAgICAgcHJpbnRrKEtFUk5fRVJSICJkaWVkIGF0IGV4dGVuZGVkIGFkZHJlc3Mg Y29kZS5cbiIpOwogICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gLUVSRU1PVEVJTzsKICAg ICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIC8qIHRoZSByZW1haW5pbmcgOCBiaXQgYWRk cmVzcyAqLwogICAgICAgICAgICAgICAgcmV0ID0gaTJjX291dGIoaTJjX2FkYXAsbXNnLT5hZGRy ICYgMHg3Zik7CiAgICAgICAgICAgICAgICBpZiAocmV0ICE9IDEpIHsKICAgICAgICAgICAgICAg ICAgICAgICAgLyogdGhlIGNoaXAgZGlkIG5vdCBhY2sgLyB4bWlzc2lvbiBlcnJvciBvY2N1cnJl ZCAqLwotICAgICAgICAgICAgICAgICAgICAgICBwcmludGsoImRpZWQgYXQgMm5kIGFkZHJlc3Mg Y29kZS5cbiIpOworICAgICAgICAgICAgICAgICAgICAgICBwcmludGsoS0VSTl9FUlIgImRpZWQg YXQgMm5kIGFkZHJlc3MgY29kZS5cbiIpOwogICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4g LUVSRU1PVEVJTzsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIGlmICggZmxhZ3Mg JiBJMkNfTV9SRCApIHsKQEAgLTQ1NCw3ICs0NTQsNyBAQAogICAgICAgICAgICAgICAgICAgICAg ICBhZGRyIHw9IDB4MDE7CiAgICAgICAgICAgICAgICAgICAgICAgIHJldCA9IHRyeV9hZGRyZXNz KGkyY19hZGFwLCBhZGRyLCByZXRyaWVzKTsKICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHJl dCE9MSkgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByaW50aygiZGllZCBhdCBl eHRlbmRlZCBhZGRyZXNzIGNvZGUuXG4iKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBwcmludGsoS0VSTl9FUlIgImRpZWQgYXQgZXh0ZW5kZWQgYWRkcmVzcyBjb2RlLlxuIik7CiAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIC1FUkVNT1RFSU87CiAgICAgICAg ICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIH0KQEAgLTQ4OSw3ICs0ODksNyBAQAog ICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgIHJldCA9IGJp dF9kb0FkZHJlc3MoaTJjX2FkYXAscG1zZyxpMmNfYWRhcC0+cmV0cmllcyk7CiAgICAgICAgICAg ICAgICAgICAgICAgIGlmIChyZXQgIT0gMCkgewotICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIERFQjIocHJpbnRrKCJpMmMtYWxnby1iaXQubzogTkFLIGZyb20gZGV2aWNlIGFkciAlIzJ4 IG1zZyAjJWRcbiIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBERUIyKHByaW50ayhL RVJOX0RFQlVHICJpMmMtYWxnby1iaXQubzogTkFLIGZyb20gZGV2aWNlIGFkciAlIzJ4IG1zZyAj JWRcbiIKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLG1zZ3NbaV0uYWRk cixpKSk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIChyZXQ8MCkgPyBy ZXQgOiAtRVJFTU9URUlPOwogICAgICAgICAgICAgICAgICAgICAgICB9CkBAIC00OTcsMTQgKzQ5 NywxNCBAQAogICAgICAgICAgICAgICAgaWYgKHBtc2ctPmZsYWdzICYgSTJDX01fUkQgKSB7CiAg ICAgICAgICAgICAgICAgICAgICAgIC8qIHJlYWQgYnl0ZXMgaW50byBidWZmZXIqLwogICAgICAg ICAgICAgICAgICAgICAgICByZXQgPSByZWFkYnl0ZXMoaTJjX2FkYXAscG1zZy0+YnVmLHBtc2ct Pmxlbik7Ci0gICAgICAgICAgICAgICAgICAgICAgIERFQjIocHJpbnRrKCJpMmMtYWxnby1iaXQu bzogcmVhZCAlZCBieXRlcy5cbiIscmV0KSk7CisgICAgICAgICAgICAgICAgICAgICAgIERFQjIo cHJpbnRrKEtFUk5fREVCVUcgImkyYy1hbGdvLWJpdC5vOiByZWFkICVkIGJ5dGVzLlxuIixyZXQp KTsKICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHJldCA8IHBtc2ctPmxlbiApIHsKICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gKHJldDwwKT8gcmV0IDogLUVSRU1PVEVJ TzsKICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgfSBlbHNlIHsKICAg ICAgICAgICAgICAgICAgICAgICAgLyogd3JpdGUgYnl0ZXMgZnJvbSBidWZmZXIgKi8KICAgICAg ICAgICAgICAgICAgICAgICAgcmV0ID0gc2VuZGJ5dGVzKGkyY19hZGFwLHBtc2ctPmJ1ZixwbXNn LT5sZW4pOwotICAgICAgICAgICAgICAgICAgICAgICBERUIyKHByaW50aygiaTJjLWFsZ28tYml0 Lm86IHdyb3RlICVkIGJ5dGVzLlxuIixyZXQpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgREVC MihwcmludGsoS0VSTl9ERUJVRyAiaTJjLWFsZ28tYml0Lm86IHdyb3RlICVkIGJ5dGVzLlxuIixy ZXQpKTsKICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHJldCA8IHBtc2ctPmxlbiApIHsKICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gKHJldDwwKSA/IHJldCA6IC1FUkVN T1RFSU87CiAgICAgICAgICAgICAgICAgICAgICAgIH0KQEAgLTU1NCw3ICs1NTQsNyBAQAogICAg ICAgICAgICAgICAgICAgICAgICByZXR1cm4gLUVOT0RFVjsKICAgICAgICB9CiAKLSAgICAgICBE RUIyKHByaW50aygiaTJjLWFsZ28tYml0Lm86IGh3IHJvdXRpbmVzIGZvciAlcyByZWdpc3RlcmVk LlxuIiwKKyAgICAgICBERUIyKHByaW50ayhLRVJOX0RFQlVHICJpMmMtYWxnby1iaXQubzogaHcg cm91dGluZXMgZm9yICVzIHJlZ2lzdGVyZWQuXG4iLAogICAgICAgICAgICAgICAgICAgIGFkYXAt Pm5hbWUpKTsKIAogICAgICAgIC8qIHJlZ2lzdGVyIG5ldyBhZGFwdGVyIHRvIGkyYyBtb2R1bGUu Li4gKi8KQEAgLTU5OCw3ICs1OTgsNyBAQAogICAgICAgIGlmICgocmVzID0gaTJjX2RlbF9hZGFw dGVyKGFkYXApKSA8IDApCiAgICAgICAgICAgICAgICByZXR1cm4gcmVzOwogCi0gICAgICAgREVC MihwcmludGsoImkyYy1hbGdvLWJpdC5vOiBhZGFwdGVyIHVucmVnaXN0ZXJlZDogJXNcbiIsYWRh cC0+bmFtZSkpOworICAgICAgIERFQjIocHJpbnRrKEtFUk5fREVCVUcgImkyYy1hbGdvLWJpdC5v OiBhZGFwdGVyIHVucmVnaXN0ZXJlZDogJXNcbiIsYWRhcC0+bmFtZSkpOwogCiAjaWZkZWYgTU9E VUxFCiAgICAgICAgTU9EX0RFQ19VU0VfQ09VTlQ7CkBAIC02MDgsNyArNjA4LDcgQEAKIAogaW50 IF9faW5pdCBpMmNfYWxnb19iaXRfaW5pdCAodm9pZCkKIHsKLSAgICAgICBwcmludGsoImkyYy1h bGdvLWJpdC5vOiBpMmMgYml0IGFsZ29yaXRobSBtb2R1bGVcbiIpOworICAgICAgIHByaW50ayhL RVJOX0lORk8gImkyYy1hbGdvLWJpdC5vOiBpMmMgYml0IGFsZ29yaXRobSBtb2R1bGUgdmVyc2lv biAlcyAoJXMpXG4iLCBJMkNfVkVSU0lPTiwgSTJDX0RBVEUpOwogICAgICAgIHJldHVybiAwOwog fQogCkBAIC02MjAsNyArNjIwLDkgQEAKICNpZmRlZiBNT0RVTEUKIE1PRFVMRV9BVVRIT1IoIlNp bW9uIEcuIFZvZ2wgPHNpbW9uQHRrLnVuaS1saW56LmFjLmF0PiIpOwogTU9EVUxFX0RFU0NSSVBU SU9OKCJJMkMtQnVzIGJpdC1iYW5naW5nIGFsZ29yaXRobSIpOworI2lmZGVmIE1PRFVMRV9MSUNF TlNFCiBNT0RVTEVfTElDRU5TRSgiR1BMIik7CisjZW5kaWYKIAogTU9EVUxFX1BBUk0oYml0X3Rl c3QsICJpIik7CiBNT0RVTEVfUEFSTShiaXRfc2NhbiwgImkiKTsKLS0tIGxpbnV4L2RyaXZlcnMv aTJjL2kyYy1hbGdvLXBjZi5jLm9yaWcgICAgICAgMjAwMi0wNS0wOSAxODoyNToyNy4wMDAwMDAw MDAgLTA0MDAKKysrIGxpbnV4L2RyaXZlcnMvaTJjL2kyYy1hbGdvLXBjZi5jICAgIDIwMDItMDUt MTQgMTg6MDQ6NDEuMDAwMDAwMDAwIC0wNDAwCkBAIC0zNywxMCArMzcsOSBAQAogI2luY2x1ZGUg PGxpbnV4L2lvcG9ydC5oPgogI2luY2x1ZGUgPGxpbnV4L2Vycm5vLmg+CiAjaW5jbHVkZSA8bGlu dXgvc2NoZWQuaD4KLQogI2luY2x1ZGUgPGxpbnV4L2kyYy5oPgogI2luY2x1ZGUgPGxpbnV4L2ky Yy1hbGdvLXBjZi5oPgotI2luY2x1ZGUgImkyYy1wY2Y4NTg0LmgiCisjaW5jbHVkZSA8bGludXgv aTJjLXBjZjg1ODQuaD4KIAogLyogLS0tLS0gZ2xvYmFsIGRlZmluZXMgLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KICNkZWZpbmUgREVCKHgpIGlmIChp MmNfZGVidWc+PTEpIHgKQEAgLTk5LDcgKzk4LDcgQEAKICAgICAgICB9CiAjZW5kaWYKICAgICAg ICBpZiAodGltZW91dCA8PSAwKSB7Ci0gICAgICAgICAgICAgICBwcmludGsoIlRpbWVvdXQgd2Fp dGluZyBmb3IgQnVzIEJ1c3lcbiIpOworICAgICAgICAgICAgICAgcHJpbnRrKEtFUk5fRVJSICJU aW1lb3V0IHdhaXRpbmcgZm9yIEJ1cyBCdXN5XG4iKTsKICAgICAgICB9CiAgICAgICAgCiAgICAg ICAgcmV0dXJuICh0aW1lb3V0PD0wKTsKQEAgLTE0NCwxNSArMTQzLDE0IEBACiB7CiAgICAgICAg dW5zaWduZWQgY2hhciB0ZW1wOwogCi0gICAgICAgREVCMyhwcmludGsoImkyYy1hbGdvLXBjZi5v OiBQQ0Ygc3RhdGUgMHglMDJ4XG4iLCBnZXRfcGNmKGFkYXAsIDEpKSk7CisgICAgICAgREVCMyhw cmludGsoS0VSTl9ERUJVRyAiaTJjLWFsZ28tcGNmLm86IFBDRiBzdGF0ZSAweCUwMnhcbiIsIGdl dF9wY2YoYWRhcCwgMSkpKTsKIAogICAgICAgIC8qIFMxPTB4ODA6IFMwIHNlbGVjdGVkLCBzZXJp YWwgaW50ZXJmYWNlIG9mZiAqLwogICAgICAgIHNldF9wY2YoYWRhcCwgMSwgSTJDX1BDRl9QSU4p OwogICAgICAgIC8qIGNoZWNrIHRvIHNlZSBTMSBub3cgdXNlZCBhcyBSL1cgY3RybCAtCiAgICAg ICAgICAgUENGODU4NCBkb2VzIHRoYXQgd2hlbiBFU08gaXMgemVybyAqLwotICAgICAgIC8qIFBD RiBhbHNvIHJlc2V0cyBQSU4gYml0ICovCi0gICAgICAgaWYgKCh0ZW1wID0gZ2V0X3BjZihhZGFw LCAxKSkgIT0gKDApKSB7Ci0gICAgICAgICAgICAgICBERUIyKHByaW50aygiaTJjLWFsZ28tcGNm Lm86IFBDRiBkZXRlY3Rpb24gZmFpbGVkIC0tIGNhbid0IHNlbGVjdCBTMCAoMHglMDJ4KS5cbiIs IHRlbXApKTsKKyAgICAgICBpZiAoKCh0ZW1wID0gZ2V0X3BjZihhZGFwLCAxKSkgJiAweDdmKSAh PSAoMCkpIHsKKyAgICAgICAgICAgICAgIERFQjIocHJpbnRrKEtFUk5fRVJSICJpMmMtYWxnby1w Y2YubzogUENGIGRldGVjdGlvbiBmYWlsZWQgLS0gY2FuJ3Qgc2VsZWN0IFMwICgweCUwMngpLlxu IiwgdGVtcCkpOwogICAgICAgICAgICAgICAgcmV0dXJuIC1FTlhJTzsgLyogZGVmaW5ldGx5IG5v dCBQQ0Y4NTg0ICovCiAgICAgICAgfQogCkBAIC0xNjAsMTUgKzE1OCwxNSBAQAogICAgICAgIGky Y19vdXRiKGFkYXAsIGdldF9vd24oYWRhcCkpOwogICAgICAgIC8qIGNoZWNrIGl0J3MgcmVhbHkg d3JpdGVuICovCiAgICAgICAgaWYgKCh0ZW1wID0gaTJjX2luYihhZGFwKSkgIT0gZ2V0X293bihh ZGFwKSkgewotICAgICAgICAgICAgICAgREVCMihwcmludGsoImkyYy1hbGdvLXBjZi5vOiBQQ0Yg ZGV0ZWN0aW9uIGZhaWxlZCAtLSBjYW4ndCBzZXQgUzAgKDB4JTAyeCkuXG4iLCB0ZW1wKSk7Cisg ICAgICAgICAgICAgICBERUIyKHByaW50ayhLRVJOX0VSUiAiaTJjLWFsZ28tcGNmLm86IFBDRiBk ZXRlY3Rpb24gZmFpbGVkIC0tIGNhbid0IHNldCBTMCAoMHglMDJ4KS5cbiIsIHRlbXApKTsKICAg ICAgICAgICAgICAgIHJldHVybiAtRU5YSU87CiAgICAgICAgfQogCiAgICAgICAgLyogUzE9MHhB MCwgbmV4dCBieXRlIGluIFMyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICov CiAgICAgICAgc2V0X3BjZihhZGFwLCAxLCBJMkNfUENGX1BJTiB8IEkyQ19QQ0ZfRVMxKTsKICAg ICAgICAvKiBjaGVjayB0byBzZWUgUzIgbm93IHNlbGVjdGVkICovCi0gICAgICAgaWYgKCh0ZW1w ID0gZ2V0X3BjZihhZGFwLCAxKSkgIT0gSTJDX1BDRl9FUzEpIHsKLSAgICAgICAgICAgICAgIERF QjIocHJpbnRrKCJpMmMtYWxnby1wY2YubzogUENGIGRldGVjdGlvbiBmYWlsZWQgLS0gY2FuJ3Qg c2VsZWN0IFMyICgweCUwMngpLlxuIiwgdGVtcCkpOworICAgICAgIGlmICgoKHRlbXAgPSBnZXRf cGNmKGFkYXAsIDEpKSAmIDB4N2YpICE9IEkyQ19QQ0ZfRVMxKSB7CisgICAgICAgICAgICAgICBE RUIyKHByaW50ayhLRVJOX0VSUiAiaTJjLWFsZ28tcGNmLm86IFBDRiBkZXRlY3Rpb24gZmFpbGVk IC0tIGNhbid0IHNlbGVjdCBTMiAoMHglMDJ4KS5cbiIsIHRlbXApKTsKICAgICAgICAgICAgICAg IHJldHVybiAtRU5YSU87CiAgICAgICAgfQogCkBAIC0xNzYsNyArMTc0LDcgQEAKICAgICAgICBp MmNfb3V0YihhZGFwLCBnZXRfY2xvY2soYWRhcCkpOwogICAgICAgIC8qIGNoZWNrIGl0J3MgcmVh bHkgd3JpdGVuLCB0aGUgb25seSA1IGxvd2VzdCBiaXRzIGRvZXMgbWF0dGVyICovCiAgICAgICAg aWYgKCgodGVtcCA9IGkyY19pbmIoYWRhcCkpICYgMHgxZikgIT0gZ2V0X2Nsb2NrKGFkYXApKSB7 Ci0gICAgICAgICAgICAgICBERUIyKHByaW50aygiaTJjLWFsZ28tcGNmLm86IFBDRiBkZXRlY3Rp b24gZmFpbGVkIC0tIGNhbid0IHNldCBTMiAoMHglMDJ4KS5cbiIsIHRlbXApKTsKKyAgICAgICAg ICAgICAgIERFQjIocHJpbnRrKEtFUk5fRVJSICJpMmMtYWxnby1wY2YubzogUENGIGRldGVjdGlv biBmYWlsZWQgLS0gY2FuJ3Qgc2V0IFMyICgweCUwMngpLlxuIiwgdGVtcCkpOwogICAgICAgICAg ICAgICAgcmV0dXJuIC1FTlhJTzsKICAgICAgICB9CiAKQEAgLTE4NSwxMSArMTgzLDExIEBACiAK ICAgICAgICAvKiBjaGVjayB0byBzZWUgUENGIGlzIHJlYWx5IGlkbGVkIGFuZCB3ZSBjYW4gYWNj ZXNzIHN0YXR1cyByZWdpc3RlciAqLwogICAgICAgIGlmICgodGVtcCA9IGdldF9wY2YoYWRhcCwg MSkpICE9IChJMkNfUENGX1BJTiB8IEkyQ19QQ0ZfQkIpKSB7Ci0gICAgICAgICAgICAgICBERUIy KHByaW50aygiaTJjLWFsZ28tcGNmLm86IFBDRiBkZXRlY3Rpb24gZmFpbGVkIC0tIGNhbid0IHNl bGVjdCBTMWAgKDB4JTAyeCkuXG4iLCB0ZW1wKSk7CisgICAgICAgICAgICAgICBERUIyKHByaW50 ayhLRVJOX0VSUiAiaTJjLWFsZ28tcGNmLm86IFBDRiBkZXRlY3Rpb24gZmFpbGVkIC0tIGNhbid0 IHNlbGVjdCBTMWAgKDB4JTAyeCkuXG4iLCB0ZW1wKSk7CiAgICAgICAgICAgICAgICByZXR1cm4g LUVOWElPOwogICAgICAgIH0KICAgICAgICAKLSAgICAgICBwcmludGsoImkyYy1hbGdvLXBjZi5v OiBkZXRldGVkIGFuZCBpbml0aWFsaXplZCBQQ0Y4NTg0LlxuIik7CisgICAgICAgcHJpbnRrKEtF Uk5fREVCVUcgImkyYy1hbGdvLXBjZi5vOiBkZXRldGVkIGFuZCBpbml0aWFsaXplZCBQQ0Y4NTg0 LlxuIik7CiAKICAgICAgICByZXR1cm4gMDsKIH0KQEAgLTIxNSw3ICsyMTMsNyBAQAogICAgICAg ICAgICAgICAgaTJjX3N0b3AoYWRhcCk7CiAgICAgICAgICAgICAgICB1ZGVsYXkoYWRhcC0+dWRl bGF5KTsKICAgICAgICB9Ci0gICAgICAgREVCMihpZiAoaSkgcHJpbnRrKCJpMmMtYWxnby1wY2Yu bzogbmVlZGVkICVkIHJldHJpZXMgZm9yICVkXG4iLGksCisgICAgICAgREVCMihpZiAoaSkgcHJp bnRrKEtFUk5fREVCVUcgImkyYy1hbGdvLXBjZi5vOiBuZWVkZWQgJWQgcmV0cmllcyBmb3IgJWRc biIsaSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgYWRkcikpOwogICAgICAgIHJldHVybiBy ZXQ7CiB9CkBAIC0yMjgsMjAgKzIyNiwyMCBAQAogICAgICAgIGludCB3cmNvdW50LCBzdGF0dXMs IHRpbWVvdXQ7CiAgICAgCiAgICAgICAgZm9yICh3cmNvdW50PTA7IHdyY291bnQ8Y291bnQ7ICsr d3Jjb3VudCkgewotICAgICAgICAgICAgICAgREVCMihwcmludGsoImkyYy1hbGdvLXBjZi5vOiAl cyBpMmNfd3JpdGU6IHdyaXRpbmcgJTIuMlhcbiIsCisgICAgICAgICAgICAgICBERUIyKHByaW50 ayhLRVJOX0RFQlVHICJpMmMtYWxnby1wY2YubzogJXMgaTJjX3dyaXRlOiB3cml0aW5nICUyLjJY XG4iLAogICAgICAgICAgICAgICAgICAgICAgaTJjX2FkYXAtPm5hbWUsIGJ1Zlt3cmNvdW50XSYw eGZmKSk7CiAgICAgICAgICAgICAgICBpMmNfb3V0YihhZGFwLCBidWZbd3Jjb3VudF0pOwogICAg ICAgICAgICAgICAgdGltZW91dCA9IHdhaXRfZm9yX3BpbihhZGFwLCAmc3RhdHVzKTsKICAgICAg ICAgICAgICAgIGlmICh0aW1lb3V0KSB7CiAgICAgICAgICAgICAgICAgICAgICAgIGkyY19zdG9w KGFkYXApOwotICAgICAgICAgICAgICAgICAgICAgICBwcmludGsoImkyYy1hbGdvLXBjZi5vOiAl cyBpMmNfd3JpdGU6ICIKKyAgICAgICAgICAgICAgICAgICAgICAgcHJpbnRrKEtFUk5fRVJSICJp MmMtYWxnby1wY2YubzogJXMgaTJjX3dyaXRlOiAiCiAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAiZXJyb3IgLSB0aW1lb3V0LlxuIiwgaTJjX2FkYXAtPm5hbWUpOwogICAgICAgICAgICAg ICAgICAgICAgICByZXR1cm4gLUVSRU1PVEVJTzsgLyogZ290IGEgYmV0dGVyIG9uZSA/PyAqLwog ICAgICAgICAgICAgICAgfQogI2lmbmRlZiBTVFVCX0kyQwogICAgICAgICAgICAgICAgaWYgKHN0 YXR1cyAmIEkyQ19QQ0ZfTFJCKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIGkyY19zdG9wKGFk YXApOwotICAgICAgICAgICAgICAgICAgICAgICBwcmludGsoImkyYy1hbGdvLXBjZi5vOiAlcyBp MmNfd3JpdGU6ICIKKyAgICAgICAgICAgICAgICAgICAgICAgcHJpbnRrKEtFUk5fRVJSICJpMmMt YWxnby1wY2YubzogJXMgaTJjX3dyaXRlOiAiCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAiZXJyb3IgLSBubyBhY2suXG4iLCBpMmNfYWRhcC0+bmFtZSk7CiAgICAgICAgICAgICAgICAg ICAgICAgIHJldHVybiAtRVJFTU9URUlPOyAvKiBnb3QgYSBiZXR0ZXIgb25lID8/ICovCiAgICAg ICAgICAgICAgICB9CkBAIC0yNjksMTQgKzI2NywxNCBAQAogCiAgICAgICAgICAgICAgICBpZiAo d2FpdF9mb3JfcGluKGFkYXAsICZzdGF0dXMpKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIGky Y19zdG9wKGFkYXApOwotICAgICAgICAgICAgICAgICAgICAgICBwcmludGsoImkyYy1hbGdvLXBj Zi5vOiBwY2ZfcmVhZGJ5dGVzIHRpbWVkIG91dC5cbiIpOworICAgICAgICAgICAgICAgICAgICAg ICBwcmludGsoS0VSTl9FUlIgImkyYy1hbGdvLXBjZi5vOiBwY2ZfcmVhZGJ5dGVzIHRpbWVkIG91 dC5cbiIpOwogICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gKC0xKTsKICAgICAgICAgICAg ICAgIH0KIAogI2lmbmRlZiBTVFVCX0kyQwogICAgICAgICAgICAgICAgaWYgKChzdGF0dXMgJiBJ MkNfUENGX0xSQikgJiYgKGkgIT0gY291bnQpKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIGky Y19zdG9wKGFkYXApOwotICAgICAgICAgICAgICAgICAgICAgICBwcmludGsoImkyYy1hbGdvLXBj Zi5vOiBpMmNfcmVhZDogaTJjX2luYiwgTm8gYWNrLlxuIik7CisgICAgICAgICAgICAgICAgICAg ICAgIHByaW50ayhLRVJOX0VSUiAiaTJjLWFsZ28tcGNmLm86IGkyY19yZWFkOiBpMmNfaW5iLCBO byBhY2suXG4iKTsKICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuICgtMSk7CiAgICAgICAg ICAgICAgICB9CiAjZW5kaWYKQEAgLTMxMiwxOCArMzEwLDE4IEBACiAgICAgICAgaWYgKCAoZmxh Z3MgJiBJMkNfTV9URU4pICApIHsgCiAgICAgICAgICAgICAgICAvKiBhIHRlbiBiaXQgYWRkcmVz cyAqLwogICAgICAgICAgICAgICAgYWRkciA9IDB4ZjAgfCAoKCBtc2ctPmFkZHIgPj4gNykgJiAw eDAzKTsKLSAgICAgICAgICAgICAgIERFQjIocHJpbnRrKCJhZGRyMDogJWRcbiIsYWRkcikpOwor ICAgICAgICAgICAgICAgREVCMihwcmludGsoS0VSTl9ERUJVRyAiYWRkcjA6ICVkXG4iLGFkZHIp KTsKICAgICAgICAgICAgICAgIC8qIHRyeSBleHRlbmRlZCBhZGRyZXNzIGNvZGUuLi4qLwogICAg ICAgICAgICAgICAgcmV0ID0gdHJ5X2FkZHJlc3MoYWRhcCwgYWRkciwgcmV0cmllcyk7CiAgICAg ICAgICAgICAgICBpZiAocmV0IT0xKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgIHByaW50aygi ZGllZCBhdCBleHRlbmRlZCBhZGRyZXNzIGNvZGUuXG4iKTsKKyAgICAgICAgICAgICAgICAgICAg ICAgcHJpbnRrKEtFUk5fRVJSICJkaWVkIGF0IGV4dGVuZGVkIGFkZHJlc3MgY29kZS5cbiIpOwog ICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gLUVSRU1PVEVJTzsKICAgICAgICAgICAgICAg IH0KICAgICAgICAgICAgICAgIC8qIHRoZSByZW1haW5pbmcgOCBiaXQgYWRkcmVzcyAqLwogICAg ICAgICAgICAgICAgaTJjX291dGIoYWRhcCxtc2ctPmFkZHIgJiAweDdmKTsKIC8qIFN0YXR1cyBj aGVjayBjb21lcyBoZXJlICovCiAgICAgICAgICAgICAgICBpZiAocmV0ICE9IDEpIHsKLSAgICAg ICAgICAgICAgICAgICAgICAgcHJpbnRrKCJkaWVkIGF0IDJuZCBhZGRyZXNzIGNvZGUuXG4iKTsK KyAgICAgICAgICAgICAgICAgICAgICAgcHJpbnRrKEtFUk5fRVJSICJkaWVkIGF0IDJuZCBhZGRy ZXNzIGNvZGUuXG4iKTsKICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIC1FUkVNT1RFSU87 CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICBpZiAoIGZsYWdzICYgSTJDX01fUkQg KSB7CkBAIC0zMzIsNyArMzMwLDcgQEAKICAgICAgICAgICAgICAgICAgICAgICAgYWRkciB8PSAw eDAxOwogICAgICAgICAgICAgICAgICAgICAgICByZXQgPSB0cnlfYWRkcmVzcyhhZGFwLCBhZGRy LCByZXRyaWVzKTsKICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHJldCE9MSkgewotICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIHByaW50aygiZGllZCBhdCBleHRlbmRlZCBhZGRyZXNz IGNvZGUuXG4iKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcmludGsoS0VSTl9F UlIgImRpZWQgYXQgZXh0ZW5kZWQgYWRkcmVzcyBjb2RlLlxuIik7CiAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgcmV0dXJuIC1FUkVNT1RFSU87CiAgICAgICAgICAgICAgICAgICAgICAg IH0KICAgICAgICAgICAgICAgIH0KQEAgLTM2MCw3ICszNTgsNyBAQAogICAgICAgIC8qIENoZWNr IGZvciBidXMgYnVzeSAqLwogICAgICAgIHRpbWVvdXQgPSB3YWl0X2Zvcl9iYihhZGFwKTsKICAg ICAgICBpZiAodGltZW91dCkgewotICAgICAgICAgICAgICAgREVCMihwcmludGsoImkyYy1hbGdv LXBjZi5vOiAiCisgICAgICAgICAgICAgICBERUIyKHByaW50ayhLRVJOX0VSUiAiaTJjLWFsZ28t cGNmLm86ICIKICAgICAgICAgICAgICAgICAgICAgICAgICAgICJUaW1lb3V0IHdhaXRpbmcgZm9y IEJCIGluIHBjZl94ZmVyXG4iKTspCiAgICAgICAgICAgICAgICByZXR1cm4gLUVJTzsKICAgICAg ICB9CkBAIC0zNjgsNyArMzY2LDcgQEAKICAgICAgICBmb3IgKGkgPSAwO3JldCA+PSAwICYmIGkg PCBudW07IGkrKykgewogICAgICAgICAgICAgICAgcG1zZyA9ICZtc2dzW2ldOwogCi0gICAgICAg ICAgICAgICBERUIyKHByaW50aygiaTJjLWFsZ28tcGNmLm86IERvaW5nICVzICVkIGJ5dGVzIHRv IDB4JTAyeCAtICVkIG9mICVkIG1lc3NhZ2VzXG4iLAorICAgICAgICAgICAgICAgREVCMihwcmlu dGsoS0VSTl9ERUJVRyAiaTJjLWFsZ28tcGNmLm86IERvaW5nICVzICVkIGJ5dGVzIHRvIDB4JTAy eCAtICVkIG9mICVkIG1lc3NhZ2VzXG4iLAogICAgICAgICAgICAgICAgICAgICBwbXNnLT5mbGFn cyAmIEkyQ19NX1JEID8gInJlYWQiIDogIndyaXRlIiwKICAgICAgICAgICAgICAgICAgICAgIHBt c2ctPmxlbiwgcG1zZy0+YWRkciwgaSArIDEsIG51bSk7KQogICAgIApAQCAtMzgzLDcgKzM4MSw3 IEBACiAgICAgICAgICAgICAgICB0aW1lb3V0ID0gd2FpdF9mb3JfcGluKGFkYXAsICZzdGF0dXMp OwogICAgICAgICAgICAgICAgaWYgKHRpbWVvdXQpIHsKICAgICAgICAgICAgICAgICAgICAgICAg aTJjX3N0b3AoYWRhcCk7Ci0gICAgICAgICAgICAgICAgICAgICAgIERFQjIocHJpbnRrKCJpMmMt YWxnby1wY2YubzogVGltZW91dCB3YWl0aW5nICIKKyAgICAgICAgICAgICAgICAgICAgICAgREVC MihwcmludGsoS0VSTl9FUlIgImkyYy1hbGdvLXBjZi5vOiBUaW1lb3V0IHdhaXRpbmcgIgogICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiZm9yIFBJTigxKSBpbiBwY2ZfeGZlclxu Iik7KQogICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gKC1FUkVNT1RFSU8pOwogICAgICAg ICAgICAgICAgfQpAQCAtMzkyLDEyICszOTAsMTIgQEAKICAgICAgICAgICAgICAgIC8qIENoZWNr IExSQiAobGFzdCByY3ZkIGJpdCAtIHNsYXZlIGFjaykgKi8KICAgICAgICAgICAgICAgIGlmIChz dGF0dXMgJiBJMkNfUENGX0xSQikgewogICAgICAgICAgICAgICAgICAgICAgICBpMmNfc3RvcChh ZGFwKTsKLSAgICAgICAgICAgICAgICAgICAgICAgREVCMihwcmludGsoImkyYy1hbGdvLXBjZi5v OiBObyBMUkIoMSkgaW4gcGNmX3hmZXJcbiIpOykKKyAgICAgICAgICAgICAgICAgICAgICAgREVC MihwcmludGsoS0VSTl9FUlIgImkyYy1hbGdvLXBjZi5vOiBObyBMUkIoMSkgaW4gcGNmX3hmZXJc biIpOykKICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuICgtRVJFTU9URUlPKTsKICAgICAg ICAgICAgICAgIH0KICNlbmRpZgogICAgIAotICAgICAgICAgICAgICAgREVCMyhwcmludGsoImky Yy1hbGdvLXBjZi5vOiBNc2cgJWQsIGFkZHI9MHgleCwgZmxhZ3M9MHgleCwgbGVuPSVkXG4iLAor ICAgICAgICAgICAgICAgREVCMyhwcmludGsoS0VSTl9ERUJVRyAiaTJjLWFsZ28tcGNmLm86IE1z ZyAlZCwgYWRkcj0weCV4LCBmbGFncz0weCV4LCBsZW49JWRcbiIsCiAgICAgICAgICAgICAgICAg ICAgICAgICAgICBpLCBtc2dzW2ldLmFkZHIsIG1zZ3NbaV0uZmxhZ3MsIG1zZ3NbaV0ubGVuKTsp CiAgICAgCiAgICAgICAgICAgICAgICAvKiBSZWFkICovCkBAIC00MDcsMjAgKzQwNSwyMCBAQAog ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoaSArIDEgPSBudW0p KTsKICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChyZXQgIT0gcG1zZy0+bGVu KSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgREVCMihwcmludGsoImkyYy1hbGdv LXBjZi5vOiBmYWlsOiAiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgREVCMihwcmlu dGsoS0VSTl9ERUJVRyAiaTJjLWFsZ28tcGNmLm86IGZhaWw6ICIKICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAib25seSByZWFkICVkIGJ5dGVzLlxuIixyZXQpKTsK ICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBERUIyKHByaW50aygiaTJjLWFsZ28tcGNmLm86IHJlYWQgJWQgYnl0ZXMuXG4iLHJl dCkpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIERFQjIocHJpbnRrKEtFUk5fREVC VUcgImkyYy1hbGdvLXBjZi5vOiByZWFkICVkIGJ5dGVzLlxuIixyZXQpKTsKICAgICAgICAgICAg ICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgfSBlbHNlIHsgLyogV3JpdGUgKi8KICAgICAg ICAgICAgICAgICAgICAgICAgcmV0ID0gcGNmX3NlbmRieXRlcyhpMmNfYWRhcCwgcG1zZy0+YnVm LCBwbXNnLT5sZW4sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IChpICsgMSA9IG51bSkpOwogICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHJl dCAhPSBwbXNnLT5sZW4pIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBERUIyKHBy aW50aygiaTJjLWFsZ28tcGNmLm86IGZhaWw6ICIKKyAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBERUIyKHByaW50ayhLRVJOX0RFQlVHICJpMmMtYWxnby1wY2YubzogZmFpbDogIgogICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJvbmx5IHdyb3RlICVkIGJ5 dGVzLlxuIixyZXQpKTsKICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBERUIyKHByaW50aygiaTJjLWFsZ28tcGNmLm86IHdyb3Rl ICVkIGJ5dGVzLlxuIixyZXQpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBERUIy KHByaW50ayhLRVJOX0RFQlVHICJpMmMtYWxnby1wY2Yubzogd3JvdGUgJWQgYnl0ZXMuXG4iLHJl dCkpOwogICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB9CiAgICAgICAg fQpAQCAtNDYxLDcgKzQ1OSw3IEBACiAgICAgICAgaW50IGksIHN0YXR1czsKICAgICAgICBzdHJ1 Y3QgaTJjX2FsZ29fcGNmX2RhdGEgKnBjZl9hZGFwID0gYWRhcC0+YWxnb19kYXRhOwogCi0gICAg ICAgREVCMihwcmludGsoImkyYy1hbGdvLXBjZi5vOiBodyByb3V0aW5lcyBmb3IgJXMgcmVnaXN0 ZXJlZC5cbiIsCisgICAgICAgREVCMihwcmludGsoS0VSTl9ERUJVRyAiaTJjLWFsZ28tcGNmLm86 IGh3IHJvdXRpbmVzIGZvciAlcyByZWdpc3RlcmVkLlxuIiwKICAgICAgICAgICAgICAgICAgICBh ZGFwLT5uYW1lKSk7CiAKICAgICAgICAvKiByZWdpc3RlciBuZXcgYWRhcHRlciB0byBpMmMgbW9k dWxlLi4uICovCkBAIC01MTQsNyArNTEyLDcgQEAKICAgICAgICBpbnQgcmVzOwogICAgICAgIGlm ICgocmVzID0gaTJjX2RlbF9hZGFwdGVyKGFkYXApKSA8IDApCiAgICAgICAgICAgICAgICByZXR1 cm4gcmVzOwotICAgICAgIERFQjIocHJpbnRrKCJpMmMtYWxnby1wY2YubzogYWRhcHRlciB1bnJl Z2lzdGVyZWQ6ICVzXG4iLGFkYXAtPm5hbWUpKTsKKyAgICAgICBERUIyKHByaW50ayhLRVJOX0RF QlVHICJpMmMtYWxnby1wY2YubzogYWRhcHRlciB1bnJlZ2lzdGVyZWQ6ICVzXG4iLGFkYXAtPm5h bWUpKTsKIAogI2lmZGVmIE1PRFVMRQogICAgICAgIE1PRF9ERUNfVVNFX0NPVU5UOwpAQCAtNTI0 LDcgKzUyMiw3IEBACiAKIGludCBfX2luaXQgaTJjX2FsZ29fcGNmX2luaXQgKHZvaWQpCiB7Ci0g ICAgICAgcHJpbnRrKCJpMmMtYWxnby1wY2YubzogaTJjIHBjZjg1ODQgYWxnb3JpdGhtIG1vZHVs ZVxuIik7CisgICAgICAgcHJpbnRrKEtFUk5fSU5GTyAiaTJjLWFsZ28tcGNmLm86IGkyYyBwY2Y4 NTg0IGFsZ29yaXRobSBtb2R1bGUgdmVyc2lvbiAlcyAoJXMpXG4iLCBJMkNfVkVSU0lPTiwgSTJD X0RBVEUpOwogICAgICAgIHJldHVybiAwOwogfQogCkBAIC01MzUsNyArNTMzLDkgQEAKICNpZmRl ZiBNT0RVTEUKIE1PRFVMRV9BVVRIT1IoIkhhbnMgQmVyZ2x1bmQgPGhiQHNwYWNldGVjLm5vPiIp OwogTU9EVUxFX0RFU0NSSVBUSU9OKCJJMkMtQnVzIFBDRjg1ODQgYWxnb3JpdGhtIik7CisjaWZk ZWYgTU9EVUxFX0xJQ0VOU0UKIE1PRFVMRV9MSUNFTlNFKCJHUEwiKTsKKyNlbmRpZgogCiBNT0RV TEVfUEFSTShwY2Zfc2NhbiwgImkiKTsKIE1PRFVMRV9QQVJNKGkyY19kZWJ1ZywiaSIpOwotLS0g bGludXgvZHJpdmVycy9pMmMvaTJjLWFsZ28tcHBjNDA1LmMub3JpZyAgICAxOTY5LTEyLTMxIDE5 OjAwOjAwLjAwMDAwMDAwMCAtMDUwMAorKysgbGludXgvZHJpdmVycy9pMmMvaTJjLWFsZ28tcHBj NDA1LmMgMjAwMi0wNS0xNCAxODowNDo1NC4wMDAwMDAwMDAgLTA0MDAKQEAgLTAsMCArMSwxMDQw IEBACisvKgorICAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgaTJjLWFsZ28tcHBjNDA1LmMgaTJjIGRy aXZlciBhbGdvcml0aG1zIGZvciBJQk0gUFBDIDQwNSBhZGFwdGVycyAgICAgICAgCisgICAtLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tCisgICAKKyAgIElhbiBEYVNpbHZhLCBNb250YVZpc3RhIFNvZnR3YXJlLCBJ bmMuCisgICBpZGFzaWx2YUBtdmlzdGEuY29tIG9yIHNvdXJjZUBtdmlzdGEuY29tCisKKyAgIENv cHlyaWdodCAyMDAwIE1vbnRhVmlzdGEgU29mdHdhcmUgSW5jLgorCisgICBDaGFuZ2VzIG1hZGUg dG8gc3VwcG9ydCB0aGUgSUlDIHBlcmlwaGVyYWwgb24gdGhlIElCTSBQUEMgNDA1CisKKworICAg LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tCisgICBUaGlzIGZpbGUgd2FzIGhpZ2hseSBsZXZlcmFnZWQgZnJv bSBpMmMtYWxnby1wY2YuYywgd2hpY2ggd2FzIGNyZWF0ZWQKKyAgIGJ5IFNpbW9uIEcuIFZvZ2wg YW5kIEhhbnMgQmVyZ2x1bmQ6CisKKworICAgICBDb3B5cmlnaHQgKEMpIDE5OTUtMTk5NyBTaW1v biBHLiBWb2dsCisgICAgICAgICAgICAgICAgICAgMTk5OC0yMDAwIEhhbnMgQmVyZ2x1bmQKKwor ICAgV2l0aCBzb21lIGNoYW5nZXMgZnJvbSBLeT9zdGkgTT9sa2tpIDxrbWFsa2tpQGNjLmh1dC5m aT4gYW5kIAorICAgRnJvZG8gTG9vaWphYXJkIDxmcm9kb2xAZGRzLm5sPiAsYW5kIGFsc28gZnJv bSBNYXJ0aW4gQmFpbGV5CisgICA8bWJhaWxleUBsaXR0bGVmZWV0LWluYy5jb20+CisKKworICAg IFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBh bmQvb3IgbW9kaWZ5CisgICAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQ dWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAgICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3Vu ZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICAgIChhdCB5b3Vy IG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisKKyAgICBUaGlzIHByb2dyYW0gaXMgZGlzdHJp YnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAgICBidXQgV0lUSE9V VCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICAg IE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNl ZSB0aGUKKyAgICBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgor CisgICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwg UHVibGljIExpY2Vuc2UKKyAgICBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0 ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICAgIEZvdW5kYXRpb24sIEluYy4sIDY3NSBNYXNzIEF2 ZSwgQ2FtYnJpZGdlLCBNQSAwMjEzOSwgVVNBLgorICAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisqLwor CisKKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4K KyNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgorI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KKyNpbmNs dWRlIDxsaW51eC92ZXJzaW9uLmg+CisjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorI2luY2x1ZGUg PGFzbS91YWNjZXNzLmg+CisjaW5jbHVkZSA8bGludXgvaW9wb3J0Lmg+CisjaW5jbHVkZSA8bGlu dXgvZXJybm8uaD4KKyNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgorI2luY2x1ZGUgPGxpbnV4L2ky Yy5oPgorI2luY2x1ZGUgPGxpbnV4L2kyYy1hbGdvLXBwYzQwNS5oPgorI2luY2x1ZGUgPGxpbnV4 L2kyYy1wcGM0MDUuaD4KKworI2lmZGVmIE1PRFVMRV9MSUNFTlNFCitNT0RVTEVfTElDRU5TRSgi R1BMIik7CisjZW5kaWYKKworLyogLS0tLS0gZ2xvYmFsIGRlZmluZXMgLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKyNkZWZpbmUgREVCKHgpIGlmIChp MmNfZGVidWc+PTEpIHgKKyNkZWZpbmUgREVCMih4KSBpZiAoaTJjX2RlYnVnPj0yKSB4CisjZGVm aW5lIERFQjMoeCkgaWYgKGkyY19kZWJ1Zz49MykgeCAvKiBwcmludCBzZXZlcmFsIHN0YXRpc3Rp Y2FsIHZhbHVlcyovCisjZGVmaW5lIERFQlBST1RPKHgpIGlmIChpMmNfZGVidWc+PTkpIHg7Cisg ICAgICAgLyogZGVidWcgdGhlIHByb3RvY29sIGJ5IHNob3dpbmcgdHJhbnNmZXJyZWQgYml0cyAq LworI2RlZmluZSBERUZfVElNRU9VVCA1CisKKy8qIGRlYnVnZ2luZyAtIHNsb3cgZG93biB0cmFu c2ZlciB0byBoYXZlIGEgbG9vayBhdCB0aGUgZGF0YSAuLiAgICAgICAgKi8KKy8qIEkgdXNlIHRo aXMgd2l0aCB0d28gbGVkcyZyZXNpc3RvcnMsIGVhY2ggb25lIGNvbm5lY3RlZCB0byBzZGEsc2Ns ICAgKi8KKy8qIHJlc3BlY3RpdmVseS4gVGhpcyBtYWtlcyBzdXJlIHRoYXQgdGhlIGFsZ29yaXRo bSB3b3Jrcy4gU29tZSBjaGlwcyAgICovCisvKiBtaWdodCBub3QgbGlrZSB0aGlzLCBhcyB0aGV5 IGhhdmUgYW4gaW50ZXJuYWwgdGltZW91dCBvZiBzb21lIG1pbHMgICovCisvKgorI2RlZmluZSBT TE9fSU8gICAgICBqaWY9amlmZmllczt3aGlsZShqaWZmaWVzPD1qaWYraTJjX3RhYmxlW21pbm9y XS52ZXJ5c2xvdylcCisgICAgICAgICAgICAgICAgICAgICAgICBpZiAobmVlZF9yZXNjaGVkKSBz Y2hlZHVsZSgpOworKi8KKworCisvKiAtLS0tLSBnbG9iYWwgdmFyaWFibGVzIC0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAgICAgICAgKi8KKworI2lmZGVmIFNM T19JTworICAgICAgIGludCBqaWY7CisjZW5kaWYKKworLyogbW9kdWxlIHBhcmFtZXRlcnM6Cisg Ki8KK3N0YXRpYyBpbnQgaTJjX2RlYnVnPTE7CisvL3N0YXRpYyBpbnQgaWljX3Rlc3Q9MDsgICAg ICAvKiBzZWUgaWYgdGhlIGxpbmUtc2V0dGluZyBmdW5jdGlvbnMgd29yayAgICAgICAgKi8KK3N0 YXRpYyBpbnQgaWljX3NjYW49MDsgLyogaGF2ZSBhIGxvb2sgYXQgd2hhdCdzIGhhbmdpbmcgJ3Jv dW5kICAgICAgICAgKi8KKworLyogLS0tIHNldHRpbmcgc3RhdGVzIG9uIHRoZSBidXMgd2l0aCB0 aGUgcmlnaHQgdGltaW5nOiAtLS0tLS0tLS0tLS0tLS0gICAgICAgICovCisKKyNkZWZpbmUgaWlj X291dGIoYWRhcCwgcmVnLCB2YWwpIGFkYXAtPnNldGlpYyhhZGFwLT5kYXRhLCByZWcsIHZhbCkK KyNkZWZpbmUgaWljX2luYihhZGFwLCByZWcpIGFkYXAtPmdldGlpYyhhZGFwLT5kYXRhLCByZWcp CisKKyNkZWZpbmUgSUlDT19JMkNfU0RBSElHSCAgICAgICAweDA3ODAKKyNkZWZpbmUgSUlDT19J MkNfU0RBTE9XICAgICAgICAgICAgICAgIDB4MDc4MQorI2RlZmluZSBJSUNPX0kyQ19TQ0xISUdI ICAgICAgIDB4MDc4MgorI2RlZmluZSBJSUNPX0kyQ19TQ0xMT1cgICAgICAgICAgICAgICAgMHgw NzgzCisjZGVmaW5lIElJQ09fSTJDX0xJTkVSRUFEICAgICAgMHgwNzg0CisKKyNkZWZpbmUgSUlD X1NJTkdMRV9YRkVSICAgICAgICAgICAgICAgIDAKKyNkZWZpbmUgSUlDX0NPTUJJTkVEX1hGRVIg ICAgICAxCisKKy8qIC0tLSBvdGhlciBhdXhpbGlhcnkgZnVuY3Rpb25zIC0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICAgICAgICAqLworCisKKyNpZiAwCisvL3N0YXRpYyBp bnQgd2FpdF9mb3JfYmIoc3RydWN0IGkyY19hbGdvX2lpY19kYXRhICphZGFwKSB7CisvLworLy8g ICAgIGludCB0aW1lb3V0ID0gREVGX1RJTUVPVVQ7CisvLyAgICAgaW50IHN0YXR1czsKKy8vCisv LyAgICAgc3RhdHVzID0gaWljX2luYihhZGFwLCAxKTsKKy8vI2lmbmRlZiBTVFVCX0kyQworLy8g ICAgIHdoaWxlICh0aW1lb3V0LS0gJiYgIShzdGF0dXMgJiBJMkNfUENGX0JCKSkgeworLy8gICAg ICAgICAgICAgdWRlbGF5KDEwMDApOyAvKiBIb3cgbXVjaCBpcyB0aGlzPyAqLworLy8gICAgICAg ICAgICAgc3RhdHVzID0gaWljX2luYihhZGFwLCAxKTsKKy8vICAgICB9CisvLyNlbmRpZgorLy8g ICAgIGlmICh0aW1lb3V0PD0wKQorLy8gICAgICAgICAgICAgcHJpbnRrKEtFUk5fRVJSICJUaW1l b3V0IHdhaXRpbmcgZm9yIEJ1cyBCdXN5XG4iKTsKKy8vICAgICAvKgorLy8gICAgIGlpY19vdXRi KGFkYXAsIDEsIEkyQ19QQ0ZfU1RPUCk7CisvLyAgICAgKi8KKy8vICAgICByZXR1cm4odGltZW91 dDw9MCk7CisvL30KKyNlbmRpZgorCisvLworLy8gRGVzY3JpcHRpb246IFB1dHMgdGhpcyBwcm9j ZXNzIHRvIHNsZWVwIGZvciBhIHBlcmlvZCBlcXVhbCB0byB0aW1lb3V0IAorLy8KK3N0YXRpYyBp bmxpbmUgdm9pZCBpaWNfc2xlZXAodW5zaWduZWQgbG9uZyB0aW1lb3V0KQoreworICAgICAgIHNj aGVkdWxlX3RpbWVvdXQoIHRpbWVvdXQgKiBIWik7Cit9CisKKworLy8KKy8vIERlc2NyaXB0aW9u OiBUaGlzIHBlcmZvcm1zIHRoZSBJQk0gUFBDIDQwNSBJSUMgaW5pdGlhbGl6YXRpb24gc2VxdWVu Y2UKKy8vIGFzIGRlc2NyaWJlZCBpbiB0aGUgUFBDNDA1R1AgZGF0YSBib29rLgorLy8KK3N0YXRp YyBpbnQgaWljX2luaXQgKHN0cnVjdCBpMmNfYWxnb19paWNfZGF0YSAqYWRhcCkKK3sKKworICAg ICAgICAvLyBwcmludGsoImlpY19pbml0OiBhdCB0aGUgc3RhcnQgb2YgaWljX2luaXRcbiIpOwor CisgICAgICAgIC8qIENsZWFyIG1hc3RlciBsb3cgbWFzdGVyIGFkZHJlc3MgKi8KKyAgICAgICAg aWljX291dGIoYWRhcCxQUEM0MDVHUF9JSUNPX0JBU0UrSUlDT19MTUFEUiwgMCk7CisKKyAgICAg ICAgLyogQ2xlYXIgaGlnaCBtYXN0ZXIgYWRkcmVzcyAqLworICAgICAgICBpaWNfb3V0YihhZGFw LFBQQzQwNUdQX0lJQ09fQkFTRStJSUNPX0hNQURSLCAwKTsKKworICAgICAgICAvKiBDbGVhciBs b3cgc2xhdmUgYWRkcmVzcyAqLworICAgICAgICBpaWNfb3V0YihhZGFwLFBQQzQwNUdQX0lJQ09f QkFTRStJSUNPX0xTQURSLCAwKTsKKworICAgICAgICAvKiBDbGVhciBoaWdoIHNsYXZlIGFkZHJl c3MgKi8KKyAgICAgICAgaWljX291dGIoYWRhcCxQUEM0MDVHUF9JSUNPX0JBU0UrSUlDT19IU0FE UiwgMCk7CisKKyAgICAgICAgLyogQ2xlYXIgc3RhdHVzICovCisgICAgICAgIGlpY19vdXRiKGFk YXAsUFBDNDA1R1BfSUlDT19CQVNFK0lJQ09fU1RTLCAweDBhKTsKKworICAgICAgICAvKiBDbGVh ciBleHRlbmRlZCBzdGF0dXMgKi8KKyAgICAgICAgaWljX291dGIoYWRhcCxQUEM0MDVHUF9JSUNP X0JBU0UrSUlDT19FWFRTVFMsIDB4OGYpOworCisgICAgICAgIC8qIFNldCBjbG9jayBkaXZpc2lv biAqLworICAgICAgICBpaWNfb3V0YihhZGFwLFBQQzQwNUdQX0lJQ09fQkFTRStJSUNPX0NMS0RJ ViwgMHgwNCk7CisKKyAgICAgICAgLyogRW5hYmxlIGludGVycnVwdHMgb24gUmVxdWVzdGVkIE1h c3RlciBUcmFuc2ZlciBDb21wbGV0ZSAqLworICAgICAgICBpaWNfb3V0YihhZGFwLFBQQzQwNUdQ X0lJQ09fQkFTRStJSUNPX0lOVFJNU0ssIDB4MDEpOworCisgICAgICAgIC8qIENsZWFyIHRyYW5z ZmVyIGNvdW50ICovCisgICAgICAgIGlpY19vdXRiKGFkYXAsUFBDNDA1R1BfSUlDT19CQVNFK0lJ Q09fWEZSQ05ULCAweDApOworCisgICAgICAgIC8qIENsZWFyIGV4dGVuZGVkIGNvbnRyb2wgYW5k IHN0YXR1cyAqLworICAgICAgICBpaWNfb3V0YihhZGFwLFBQQzQwNUdQX0lJQ09fQkFTRStJSUNP X1hUQ05UTFNTLCAweGYwKTsKKworICAgICAgICAvKiBTZXQgbW9kZSBjb250cm9sIChmbHVzaCBt YXN0ZXIgZGF0YSBidWYsIGVuYWJsZSBob2xkIFNDTCwgZXhpdCAqLworICAgICAgICAvKiB1bmtu b3duIHN0YXRlLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAqLworICAgICAgICBpaWNfb3V0YihhZGFwLFBQQzQwNUdQX0lJQ09fQkFTRStJSUNPX01EQ05U TCwgMHg0Nyk7CisKKyAgICAgICAgLyogQ2xlYXIgY29udHJvbCByZWdpc3RlciAqLworICAgICAg ICBpaWNfb3V0YihhZGFwLFBQQzQwNUdQX0lJQ09fQkFTRStJSUNPX0NOVEwsIDB4MCk7CisKKyAg ICAgICAgREVCMihwcmludGsoS0VSTl9ERUJVRyAiaWljX2luaXQ6IEluaXRpYWxpemVkIElJQyBv biBQUEMgNDA1XG4iKSk7CisgICAgICAgIHJldHVybiAwOworfQorCisKKy8vCisvLyBEZXNjcmlw dGlvbjogQWZ0ZXIgd2UgaXNzdWUgYSB0cmFuc2FjdGlvbiBvbiB0aGUgSUlDIGJ1cywgdGhpcyBm dW5jdGlvbgorLy8gaXMgY2FsbGVkLiAgSXQgcHV0cyB0aGlzIHByb2Nlc3MgdG8gc2xlZXAgdW50 aWwgd2UgZ2V0IGFuIGludGVycnVwdCBmcm9tCisvLyBmcm9tIHRoZSBjb250cm9sbGVyIHRlbGxp bmcgdXMgdGhhdCB0aGUgdHJhbnNhY3Rpb24gd2UgcmVxdWVzdGVkIGluIGNvbXBsZXRlLgorLy8K K3N0YXRpYyBpbnQgd2FpdF9mb3JfcGluKHN0cnVjdCBpMmNfYWxnb19paWNfZGF0YSAqYWRhcCwg aW50ICpzdGF0dXMpIHsKKworICAgICAgIGludCB0aW1lb3V0ID0gREVGX1RJTUVPVVQ7CisgICAg ICAgaW50IHJldHZhbDsKKyAgICAgICAKKyAgICAgICAqc3RhdHVzID0gaWljX2luYihhZGFwLCBQ UEM0MDVHUF9JSUNPX0JBU0UgKyBJSUNPX1NUUyk7CisgICAgICAgLy9wcmludGsoIndhaXRfZm9y X3Bpbjogc3RhdHVzID0gJXhcbiIsICpzdGF0dXMpOworI2lmbmRlZiBTVFVCX0kyQworCisgICAg ICAgd2hpbGUgKHRpbWVvdXQtLSAmJiAoKnN0YXR1cyAmIDB4MDEpKSB7CisgICAgICAgICAgLy9w cmludGsoIndhaXRfZm9yX3BpbjogdGltZW91dD0lZCwgc3RhdHVzPSV4XG4iLCB0aW1lb3V0LCAq c3RhdHVzKTsKKyAgICAgICAgICAvL3ByaW50aygid2FpdF9mb3JfcGluOiBjYWxsaW5nIHdhaXRm b3JwaW5cbiIpOworICAgICAgICAgIGFkYXAtPndhaXRmb3JwaW4oKTsKKyAgICAgICAgICAgLy9w cmludGsoIndhaXRfZm9yX3BpbjogcmV0dXJuaW5nIGZyb20gd2FpdGZvcnBpblxuIik7CisgICAg ICAgICAgKnN0YXR1cyA9IGlpY19pbmIoYWRhcCwgUFBDNDA1R1BfSUlDT19CQVNFICsgSUlDT19T VFMpOworICAgICAgIH0KKyNlbmRpZgorICAgICAgIC8vcHJpbnRrKCJ3YWl0X2Zvcl9waW46IHJl dHVybmluZyBmcm9tIHdhaXRfZm9yX3BpblxuIik7CisgICAgICAgaWYgKHRpbWVvdXQgPD0gMCkg eworICAgICAgICAgIC8qIElzc3VlIHN0b3Agc2lnbmFsIG9uIHRoZSBidXMsIGFuZCBmb3JjZSBh biBpbnRlcnJ1cHQgKi8KKyAgICAgICAgICAgcmV0dmFsID0gaWljX2luYihhZGFwLCBQUEM0MDVH UF9JSUNPX0JBU0UrSUlDT19DTlRMKTsKKyAgICAgICAgICAgaWljX291dGIoYWRhcCwgUFBDNDA1 R1BfSUlDT19CQVNFK0lJQ09fQ05UTCwgcmV0dmFsIHwgMHg4MCk7CisgICAgICAgICAgIC8qIENs ZWFyIHN0YXR1cyByZWdpc3RlciAqLworICAgICAgICAgIGlpY19vdXRiKGFkYXAsIFBQQzQwNUdQ X0lJQ09fQkFTRStJSUNPX1NUUywgMHgwYSk7CisgICAgICAgICAgLyogRXhpdCB1bmtub3duIGJ1 cyBzdGF0ZSAqLworICAgICAgICAgIHJldHZhbCA9IGlpY19pbmIoYWRhcCwgUFBDNDA1R1BfSUlD T19CQVNFK0lJQ09fTURDTlRMKTsKKyAgICAgICAgICBpaWNfb3V0YihhZGFwLCBQUEM0MDVHUF9J SUNPX0JBU0UrSUlDT19NRENOVEwsIChyZXR2YWwgfCAweDAyKSk7CisKKyAgICAgICAgICAvLyBD aGVjayB0aGUgc3RhdHVzIG9mIHRoZSBjb250cm9sbGVyLiAgRG9lcyBpdCBzdGlsbCBzZWUgYQor ICAgICAgICAgIC8vIHBlbmRpbmcgdHJhbnNmZXIsIGV2ZW4gdGhvdWdoIHdlJ3ZlIHRyaWVkIHRv IHN0b3AgYW55CisgICAgICAgICAgLy8gb25nb2luZyB0cmFuc2FjdGlvbj8KKyAgICAgICAgICAg cmV0dmFsID0gaWljX2luYihhZGFwLCBQUEM0MDVHUF9JSUNPX0JBU0UrSUlDT19TVFMpOworICAg ICAgICAgICByZXR2YWwgPSByZXR2YWwgJiAweDAxOworICAgICAgICAgICBpZihyZXR2YWwpIHsK KyAgICAgICAgICAgICAvLyBUaGUgaWljIGNvbnRyb2xsZXIgaXMgaG9zZWQuICBJdCBpcyBub3Qg cmVzcG9uZGluZyB0byBhbnkKKyAgICAgICAgICAgICAvLyBvZiBvdXIgY29tbWFuZHMuICBXZSBo YXZlIGFscmVhZHkgdHJpZWQgdG8gZm9yY2UgaXQgaW50bworICAgICAgICAgICAgIC8vIGEga25v d24gc3RhdGUsIGJ1dCBpdCBoYXMgbm90IHdvcmtlZC4gIE91ciBvbmx5IGNob2ljZSBub3cKKyAg ICAgICAgICAgICAvLyBpcyBhIHNvZnQgcmVzZXQsIHdoaWNoIHdpbGwgY2xlYXIgYWxsIHJlZ2lz dGVycywgYW5kIGZvcmNlCisgICAgICAgICAgICAgLy8gdXMgdG8gcmUtaW5pdGlhbGl6ZSB0aGUg Y29udHJvbGxlci4KKyAgICAgICAgICAgICAvKiBTb2Z0IHJlc2V0ICovCisgICAgICAgICAgICAg IGlpY19vdXRiKGFkYXAsIFBQQzQwNUdQX0lJQ09fQkFTRStJSUNPX1hUQ05UTFNTLCAweDAxKTsK KyAgICAgICAgICAgICAgdWRlbGF5KDUwMCk7CisgICAgICAgICAgICAgIGlpY19pbml0KGFkYXAp OworICAgICAgICAgICAgIC8qIElzIHRoZSBwZW5kaW5nIHRyYW5zZmVyIGJpdCBpbiB0aGUgc3Rz IHJlZyBmaW5hbGx5IGNsZWFyZWQ/ICovCisgICAgICAgICAgICAgIHJldHZhbCA9IGlpY19pbmIo YWRhcCwgUFBDNDA1R1BfSUlDT19CQVNFK0lJQ09fU1RTKTsKKyAgICAgICAgICAgICAgcmV0dmFs ID0gcmV0dmFsICYgMHgwMTsKKyAgICAgICAgICAgICAgaWYocmV0dmFsKSB7CisgICAgICAgICAg ICAgICAgIHByaW50aygiVGhlIElJQyBDb250cm9sbGVyIGlzIGhvc2VkLiAgQSBwcm9jZXNzb3Ig cmVzZXQgaXMgcmVxdWlyZWRcbiIpOworICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgLy8g Rm9yIHNvbWUgcmVhc29uLCBldmVuIHRob3VnaCB0aGUgaW50ZXJydXB0IGJpdCBpbiB0aGlzCisg ICAgICAgICAgICAgLy8gcmVnaXN0ZXIgd2FzIHNldCBkdXJpbmcgaWljX2luaXQsIGl0IGRpZG4n dCB0YWtlLiAgV2UKKyAgICAgICAgICAgICAvLyBuZWVkIHRvIHNldCBpdCBhZ2Fpbi4gIERvbid0 IGFzayBtZSB3aHkuLi4udGhpcyBpcyBqdXN0IHdoYXQKKyAgICAgICAgICAgICAvLyBJIHNhdyB3 aGVuIHRlc3RpbmcgdGltZW91dHMuCisgICAgICAgICAgICAgIGlpY19vdXRiKGFkYXAsIFBQQzQw NUdQX0lJQ09fQkFTRStJSUNPX0lOVFJNU0ssIDB4MDEpOworICAgICAgICAgICB9CisgICAgICAg ICAgcmV0dXJuKC0xKTsKKyAgICAgICB9CisgICAgICAgZWxzZQorICAgICAgICAgIHJldHVybigw KTsKK30KKworCisvLworLy8gRGVzY3JpcHRpb246IFNhbml0eSBjaGVjayBmb3IgdGhlIGFkYXB0 ZXIgaGFyZHdhcmUgLSBjaGVjayB0aGUgcmVhY3Rpb24gb2YKKy8vIHRoZSBidXMgbGluZXMgb25s eSBpZiBpdCBzZWVtcyB0byBiZSBpZGxlLgorLy8gCisjaWYgMAorc3RhdGljIGludCB0ZXN0X2J1 cyhzdHJ1Y3QgaTJjX2FsZ29faWljX2RhdGEgKmFkYXAsIGNoYXIgKm5hbWUpIHsKKyAgICAgICBp bnQgc2NsLHNkYTsKKyAgICAgICBzZGE9Z2V0c2RhKGFkYXApOworICAgICAgIGlmIChhZGFwLT5n ZXRzY2w9TlVMTCkgeworICAgICAgICAgICAgICAgcHJpbnRrKCJ0ZXN0X2J1czogV2FybmluZzog QWRhcHRlciBjYW4ndCByZWFkIGZyb20gY2xvY2sgbGluZSAtIHNraXBwaW5nIHRlc3QuXG4iKTsK KyAgICAgICAgICAgICAgIHJldHVybiAwOyAgICAgICAgICAgICAgIAorICAgICAgIH0KKyAgICAg ICBzY2w9Z2V0c2NsKGFkYXApOworICAgICAgIHByaW50aygidGVzdF9idXM6IEFkYXB0ZXI6ICVz IHNjbDogJWQgIHNkYTogJWQgLS0gdGVzdGluZy4uLlxuIiwKKyAgICAgICBuYW1lLGdldHNjbChh ZGFwKSxnZXRzZGEoYWRhcCkpOworICAgICAgIGlmICghc2NsIHx8ICFzZGEgKSB7CisgICAgICAg ICAgICAgICBwcmludGsoInRlc3RfYnVzOiAlcyBzZWVtcyB0byBiZSBidXN5LlxuIixhZGFwLT5u YW1lKTsKKyAgICAgICAgICAgICAgIGdvdG8gYmFpbG91dDsKKyAgICAgICB9CisgICAgICAgc2Rh bG8oYWRhcCk7CisgICAgICAgcHJpbnRrKCJ0ZXN0X2J1czoxIHNjbDogJWQgIHNkYTogJWQgXG4i LGdldHNjbChhZGFwKSwKKyAgICAgICAgICAgICAgZ2V0c2RhKGFkYXApKTsKKyAgICAgICBpZiAo IDAgIT0gZ2V0c2RhKGFkYXApICkgeworICAgICAgICAgICAgICAgcHJpbnRrKCJ0ZXN0X2J1czog JXMgU0RBIHN0dWNrIGhpZ2ghXG4iLG5hbWUpOworICAgICAgICAgICAgICAgc2RhaGkoYWRhcCk7 CisgICAgICAgICAgICAgICBnb3RvIGJhaWxvdXQ7CisgICAgICAgfQorICAgICAgIGlmICggMCA9 IGdldHNjbChhZGFwKSApIHsKKyAgICAgICAgICAgICAgIHByaW50aygidGVzdF9idXM6ICVzIFND TCB1bmV4cGVjdGVkIGxvdyB3aGlsZSBwdWxsaW5nIFNEQSBsb3chXG4iLAorICAgICAgICAgICAg ICAgICAgICAgICBuYW1lKTsKKyAgICAgICAgICAgICAgIGdvdG8gYmFpbG91dDsKKyAgICAgICB9 ICAgICAgICAgICAgICAgCisgICAgICAgc2RhaGkoYWRhcCk7CisgICAgICAgcHJpbnRrKCJ0ZXN0 X2J1czoyIHNjbDogJWQgIHNkYTogJWQgXG4iLGdldHNjbChhZGFwKSwKKyAgICAgICAgICAgICAg Z2V0c2RhKGFkYXApKTsKKyAgICAgICBpZiAoIDAgPSBnZXRzZGEoYWRhcCkgKSB7CisgICAgICAg ICAgICAgICBwcmludGsoInRlc3RfYnVzOiAlcyBTREEgc3R1Y2sgbG93IVxuIixuYW1lKTsKKyAg ICAgICAgICAgICAgIHNkYWhpKGFkYXApOworICAgICAgICAgICAgICAgZ290byBiYWlsb3V0Owor ICAgICAgIH0KKyAgICAgICBpZiAoIDAgPSBnZXRzY2woYWRhcCkgKSB7CisgICAgICAgICAgICAg ICBwcmludGsoInRlc3RfYnVzOiAlcyBTQ0wgdW5leHBlY3RlZCBsb3cgd2hpbGUgU0RBIGhpZ2gh XG4iLAorICAgICAgICAgICAgICAgICAgICAgIGFkYXAtPm5hbWUpOworICAgICAgIGdvdG8gYmFp bG91dDsKKyAgICAgICB9CisgICAgICAgc2NsbG8oYWRhcCk7CisgICAgICAgcHJpbnRrKCJ0ZXN0 X2J1czozIHNjbDogJWQgIHNkYTogJWQgXG4iLGdldHNjbChhZGFwKSwKKyAgICAgICAgICAgICAg Z2V0c2RhKGFkYXApKTsKKyAgICAgICBpZiAoIDAgIT0gZ2V0c2NsKGFkYXApICkgeworCisgICAg ICAgICAgICAgICBzY2xoaShhZGFwKTsKKyAgICAgICAgICAgICAgIGdvdG8gYmFpbG91dDsKKyAg ICAgICB9CisgICAgICAgaWYgKCAwID0gZ2V0c2RhKGFkYXApICkgeworICAgICAgICAgICAgICAg cHJpbnRrKCJ0ZXN0X2J1czogJXMgU0RBIHVuZXhwZWN0ZWQgbG93IHdoaWxlIHB1bGxpbmcgU0NM IGxvdyFcbiIsCisgICAgICAgICAgICAgICAgICAgICAgIG5hbWUpOworICAgICAgICAgICAgICAg Z290byBiYWlsb3V0OworICAgICAgIH0KKyAgICAgICBzY2xoaShhZGFwKTsKKyAgICAgICBwcmlu dGsoInRlc3RfYnVzOjQgc2NsOiAlZCAgc2RhOiAlZCBcbiIsZ2V0c2NsKGFkYXApLAorICAgICAg ICAgICAgICBnZXRzZGEoYWRhcCkpOworICAgICAgIGlmICggMCA9IGdldHNjbChhZGFwKSApIHsK KyAgICAgICAgICAgICAgIHByaW50aygidGVzdF9idXM6ICVzIFNDTCBzdHVjayBsb3chXG4iLG5h bWUpOworICAgICAgICAgICAgICAgc2NsaGkoYWRhcCk7CisgICAgICAgICAgICAgICBnb3RvIGJh aWxvdXQ7CisgICAgICAgfQorICAgICAgIGlmICggMCA9IGdldHNkYShhZGFwKSApIHsKKyAgICAg ICAgICAgICAgIHByaW50aygidGVzdF9idXM6ICVzIFNEQSB1bmV4cGVjdGVkIGxvdyB3aGlsZSBT Q0wgaGlnaCFcbiIsCisgICAgICAgICAgICAgICAgICAgICAgIG5hbWUpOworICAgICAgICAgICAg ICAgZ290byBiYWlsb3V0OworICAgICAgIH0KKyAgICAgICBwcmludGsoInRlc3RfYnVzOiAlcyBw YXNzZWQgdGVzdC5cbiIsbmFtZSk7CisgICAgICAgcmV0dXJuIDA7CitiYWlsb3V0OgorICAgICAg IHNkYWhpKGFkYXApOworICAgICAgIHNjbGhpKGFkYXApOworICAgICAgIHJldHVybiAtRU5PREVW OworICAgICAgIHJldHVybiAoMCk7Cit9CisjZW5kaWYKKworLy8tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0KKy8vIFV0aWxpdHkgZnVuY3Rpb25zCisvLworCisKKy8vCisvLyBE ZXNjcmlwdGlvbjogVGhpcyBmdW5jdGlvbiB0cmllcyB0byB2ZXJpZnkgdGhhdCB0aGUgZGV2aWNl IHdlIHdhbnQgdG8KKy8vIHRhbGsgdG8gb24gdGhlIElJQyBidXMgcmVhbGx5IGV4aXN0cy4gCisv LworI2lmIDAKK3N0YXRpYyBpbmxpbmUgaW50IHRyeV9hZGRyZXNzKHN0cnVjdCBpMmNfYWxnb19p aWNfZGF0YSAqYWRhcCwKKyAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBjaGFyIGFkZHIs IGludCByZXRyaWVzKQoreworICAgICAgIGludCBpLCBzdGF0dXMsIHJldCA9IC0xOworICAgICAg IGZvciAoaT0wO2k8cmV0cmllcztpKyspIHsKKyAgICAgICAgICAgICAgIGkyY19vdXRiKGFkYXAs IGFkZHIpOworICAgICAgICAgICAgICAgaTJjX3N0YXJ0KGFkYXApOworICAgICAgICAgICAgICAg c3RhdHVzID0gaWljX2luYihhZGFwLCAxKTsKKyAgICAgICAgICAgICAgIGlmICh3YWl0X2Zvcl9w aW4oYWRhcCwgJnN0YXR1cykgPj0gMCkgeworICAgICAgICAgICAgICAgICAgICAgICBpZiAoKHN0 YXR1cyAmIEkyQ19QQ0ZfTFJCKSA9IDApIHsgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgaTJjX3N0b3AoYWRhcCk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7 ICAvKiBzdWNjZXNzISAqLworICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAg ICB9CisgICAgICAgICAgICAgICBpMmNfc3RvcChhZGFwKTsKKyAgICAgICAgICAgICAgIHVkZWxh eShhZGFwLT51ZGVsYXkpOworICAgICAgIH0KKyAgICAgICBERUIyKGlmIChpKSBwcmludGsoImky Yy1hbGdvLWlpYy5vOiBuZWVkZWQgJWQgcmV0cmllcyBmb3IgJWRcbiIsaSwKKyAgICAgICAgICAg ICAgICAgICAgICAgICAgYWRkcikpOworICAgICAgIHJldHVybiByZXQ7Cit9CisjZW5kaWYKKwor CisvLworLy8gRGVzY3JpcHRpb246IExvb2sgYXQgdGhlIHN0YXR1cyByZWdpc3RlciB0byBzZWUg aWYgdGhlcmUgd2FzIGFuIGVycm9yCisvLyBpbiB0aGUgcmVxdWVzdGVkIHRyYW5zYWN0aW9uLiAg SWYgdGhlcmUgaXMsIGxvb2sgYXQgdGhlIGV4dGVuZGVkIHN0YXR1cworLy8gcmVnaXN0ZXIgYW5k IGRldGVybWluZSB0aGUgZXhhY3QgY2F1c2UuCisvLworaW50IGFuYWx5emVfc3RhdHVzKHN0cnVj dCBpMmNfYWxnb19paWNfZGF0YSAqYWRhcCkKK3sKKyAgIGludCByZXQ7CisKKyAgIHJldCA9IGlp Y19pbmIoYWRhcCwgUFBDNDA1R1BfSUlDT19CQVNFK0lJQ09fU1RTKTsKKyAgIGlmKHJldCAmIDB4 MDQpIHsKKyAgICAgIC8vcHJpbnRrKEtFUk5fRVJSICJFcnJvciBvY2N1cnJlZDogIik7CisgICAg ICByZXQgPSBpaWNfaW5iKGFkYXAsIFBQQzQwNUdQX0lJQ09fQkFTRStJSUNPX0VYVFNUUyk7Cisg ICAgICBpZihyZXQgJiAweDA0KSB7CisgICAgICAgICAvL3ByaW50ayhLRVJOX0VSUiAiTG9zdCBh cmJpdHJhdGlvblxuIik7CisgICAgICB9CisgICAgICBpZihyZXQgJiAweDAyKSB7CisgICAgICAg ICAvL3ByaW50ayhLRVJOX0VSUiAiSW5jb21wbGV0ZSB0cmFuc2ZlclxuIik7CisgICAgICB9Cisg ICAgICBpZihyZXQgJiAweDAxKSB7CisgICAgICAgICAvL3ByaW50ayhLRVJOX0VSUiAiTWFzdGVy IHRyYW5zZmVyIGFib3J0ZWQgYnkgYSBOQUNLIGR1cmluZyB0aGUgdHJhbnNmZXIgb2YgdGhlIGFk ZHJlc3MgYnl0ZVxuIik7CisgICAgICB9CisgICAgICByZXR1cm4gLTE7CisgICB9CisgICByZXR1 cm4gMDsKK30KKworCisvLworLy8gRGVzY3JpcHRpb246IFRoaXMgZnVuY3Rpb24gaXMgY2FsbGVk IGJ5IHRoZSB1cHBlciBsYXllcnMgdG8gZG8gdGhlCisvLyBncnVudCB3b3JrIGZvciBhIG1hc3Rl ciBzZW5kIHRyYW5zYWN0aW9uCisvLworc3RhdGljIGludCBpaWNfc2VuZGJ5dGVzKHN0cnVjdCBp MmNfYWRhcHRlciAqaTJjX2FkYXAsY29uc3QgY2hhciAqYnVmLAorICAgICAgICAgICAgICAgICAg ICAgICAgIGludCBjb3VudCwgaW50IHhmZXJfZmxhZykKK3sKKyAgICAgICBzdHJ1Y3QgaTJjX2Fs Z29faWljX2RhdGEgKmFkYXAgPSBpMmNfYWRhcC0+YWxnb19kYXRhOworICAgICAgIGludCB3cmNv dW50LCBzdGF0dXMsIHRpbWVvdXQ7CisgICAgICAgaW50IGxvb3BzLCByZW1haW5kZXIsIGksIGo7 CisgICAgICAgaW50IHJldDsKKyAgIAorICAgICAgIGlmKCBjb3VudCA9IDAgKSByZXR1cm4gMDsK KyAgICAgICB3cmNvdW50ID0gMDsKKyAgICAgICBsb29wcyA9ICBjb3VudCAvIDQ7CisgICAgICAg cmVtYWluZGVyID0gY291bnQgJSA0OworCisgICAgICAgaWYoKGxvb3BzID4gMSkgJiYgKHJlbWFp bmRlciA9IDApKSB7CisgICAgICAgICAgLy9wcmludGsoS0VSTl9ERUJVRyAiaWljX3NlbmRieXRl czogKGxvb3BzID4gMSkgJiYgKHJlbWFpbmRlciA9IDApXG4iKTsKKyAgICAgICAgICBmb3IoaT0w OyBpPChsb29wcy0xKTsgaSsrKSB7CisgICAgICAgICAgICAgICAgICAgICAvLworICAgICAgICAg ICAgIC8vIFdyaXRlIGZvdXIgYnl0ZXMgdG8gbWFzdGVyIGRhdGEgYnVmZmVyCisgICAgICAgICAg ICAgLy8KKyAgICAgICAgICAgICBmb3Ioaj0wOyBqPDQ7IGorKykgeworICAgICAgICAgICAgICAg IGlpY19vdXRiKGFkYXAsIFBQQzQwNUdQX0lJQ09fQkFTRStJSUNPX01EQlVGLCAKKyAgICAgICAg ICAgICAgICBidWZbd3Jjb3VudCsrXSk7CisgICAgICAgICAgICAgfQorICAgICAgICAgICAgIC8v CisgICAgICAgICAgICAgLy8gSXNzdWUgY29tbWFuZCB0byBJSUNPIGRldmljZSB0byBiZWdpbiB0 cmFuc21pc3Npb24KKyAgICAgICAgICAgICAvLworICAgICAgICAgICAgIGlpY19vdXRiKGFkYXAs IFBQQzQwNUdQX0lJQ09fQkFTRStJSUNPX0NOVEwsIDB4MzUpOworICAgICAgICAgICAgIC8vCisg ICAgICAgICAgICAgLy8gV2FpdCBmb3IgdHJhbnNtaXNzaW9uIHRvIGNvbXBsZXRlLiAgV2hlbiBp dCBkb2VzLCAKKyAgICAgICAgICAgICAvL2xvb3AgdG8gdGhlIHRvcCBvZiB0aGUgZm9yIHN0YXRl bWVudCBhbmQgd3JpdGUgdGhlIAorICAgICAgICAgICAgIC8vIG5leHQgZm91ciBieXRlcy4KKyAg ICAgICAgICAgICAvLworICAgICAgICAgICAgIHRpbWVvdXQgPSB3YWl0X2Zvcl9waW4oYWRhcCwg JnN0YXR1cyk7CisgICAgICAgICAgICAgaWYodGltZW91dCA8IDApIHsKKyAgICAgICAgICAgICAg ICAvLworICAgICAgICAgICAgICAgIC8vIEVycm9yIGhhbmRsaW5nCisgICAgICAgICAgICAgICAg Ly8KKyAgICAgICAgICAgICAgICAgLy9wcmludGsoS0VSTl9FUlIgIkVycm9yOiB3cml0ZSB0aW1l b3V0XG4iKTsKKyAgICAgICAgICAgICAgICAgcmV0dXJuIHdyY291bnQ7CisgICAgICAgICAgICAg fQorICAgICAgICAgICAgIHJldCA9IGFuYWx5emVfc3RhdHVzKGFkYXApOworICAgICAgICAgICAg IGlmKHJldCA8IDApIHsKKyAgICAgICAgICAgICAgICAgcmV0ID0gaWljX2luYihhZGFwLCBQUEM0 MDVHUF9JSUNPX0JBU0UrSUlDT19YRlJDTlQpOworICAgICAgICAgICAgICAgIHJldCA9IHJldCAm IDB4MDc7CisgICAgICAgICAgICAgICAgIHJldHVybiAod3Jjb3VudC00K3JldCk7CisgICAgICAg ICAgICAgfQorICAgICAgICAgICB9CisgICAgICAgfQorICAgICAgIGVsc2UgaWYoKGxvb3BzID49 IDEpICYmIChyZW1haW5kZXIgPiAwKSl7CisgICAgICAgICAgLy9wcmludGsoS0VSTl9ERUJVRyAi aWljX3NlbmRieXRlczogKGxvb3BzID49IDEpXG4iKTsKKyAgICAgICAgICBmb3IoaT0wOyBpPGxv b3BzOyBpKyspIHsKKyAgICAgICAgICAgICAgLy8KKyAgICAgICAgICAgICAgLy8gV3JpdGUgZm91 ciBieXRlcyB0byBtYXN0ZXIgZGF0YSBidWZmZXIKKyAgICAgICAgICAgICAgLy8KKyAgICAgICAg ICAgICAgZm9yKGo9MDsgajw0OyBqKyspIHsKKyAgICAgICAgICAgICAgICAgaWljX291dGIoYWRh cCwgUFBDNDA1R1BfSUlDT19CQVNFK0lJQ09fTURCVUYsCisgICAgICAgICAgICAgICAgIGJ1Zlt3 cmNvdW50KytdKTsKKyAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAvLworICAgICAgICAg ICAgICAvLyBJc3N1ZSBjb21tYW5kIHRvIElJQ08gZGV2aWNlIHRvIGJlZ2luIHRyYW5zbWlzc2lv bgorICAgICAgICAgICAgICAvLworICAgICAgICAgICAgICBpaWNfb3V0YihhZGFwLCBQUEM0MDVH UF9JSUNPX0JBU0UrSUlDT19DTlRMLCAweDM1KTsKKyAgICAgICAgICAgICAgLy8KKyAgICAgICAg ICAgICAgLy8gV2FpdCBmb3IgdHJhbnNtaXNzaW9uIHRvIGNvbXBsZXRlLiAgV2hlbiBpdCBkb2Vz LAorICAgICAgICAgICAgICAvL2xvb3AgdG8gdGhlIHRvcCBvZiB0aGUgZm9yIHN0YXRlbWVudCBh bmQgd3JpdGUgdGhlCisgICAgICAgICAgICAgIC8vIG5leHQgZm91ciBieXRlcy4KKyAgICAgICAg ICAgICAgLy8KKyAgICAgICAgICAgICAgdGltZW91dCA9IHdhaXRfZm9yX3BpbihhZGFwLCAmc3Rh dHVzKTsKKyAgICAgICAgICAgICAgaWYodGltZW91dCA8IDApIHsKKyAgICAgICAgICAgICAgICAg Ly8KKyAgICAgICAgICAgICAgICAgLy8gRXJyb3IgaGFuZGxpbmcKKyAgICAgICAgICAgICAgICAg Ly8KKyAgICAgICAgICAgICAgICAgLy9wcmludGsoS0VSTl9FUlIgIkVycm9yOiB3cml0ZSB0aW1l b3V0XG4iKTsKKyAgICAgICAgICAgICAgICAgcmV0dXJuIHdyY291bnQ7CisgICAgICAgICAgICAg IH0KKyAgICAgICAgICAgICAgcmV0ID0gYW5hbHl6ZV9zdGF0dXMoYWRhcCk7CisgICAgICAgICAg ICAgIGlmKHJldCA8IDApIHsKKyAgICAgICAgICAgICAgICAgcmV0ID0gaWljX2luYihhZGFwLCBQ UEM0MDVHUF9JSUNPX0JBU0UrSUlDT19YRlJDTlQpOworICAgICAgICAgICAgICAgIHJldCA9IHJl dCAmIDB4MDc7CisgICAgICAgICAgICAgICAgIHJldHVybiAod3Jjb3VudC00K3JldCk7CisgICAg ICAgICAgICAgIH0KKyAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAvL3ByaW50ayhL RVJOX0RFQlVHICJpaWNfc2VuZGJ5dGVzOiBleHBlZGl0ZSB3cml0ZVxuIik7CisgICAgICAgaWYo cmVtYWluZGVyID0gMCkgcmVtYWluZGVyID0gNDsKKyAgICAgICAvLyByZW1haW5kZXIgPSByZW1h aW5kZXIgLSAxOworICAgICAgIC8vCisgICAgICAgLy8gV3JpdGUgdGhlIHJlbWFpbmluZyBieXRl cyAobGVzcyB0aGFuIG9yIGVxdWFsIHRvIDQpCisgICAgICAgLy8KKyAgICAgICBmb3IoaT0wOyBp PHJlbWFpbmRlcjsgaSsrKSB7CisgICAgICAgICAgaWljX291dGIoYWRhcCwgUFBDNDA1R1BfSUlD T19CQVNFK0lJQ09fTURCVUYsIGJ1Zlt3cmNvdW50KytdKTsKKyAgICAgICAgICAvL3ByaW50ayhL RVJOX0RFQlVHICJpaWNfc2VuZGJ5dGVzOiAgZGF0YSB0cmFuc2ZlcnJlZCA9ICV4LCB3cmNvdW50 ID0gJWRcbiIsIGJ1Zlt3cmNvdW50LTFdLCAod3Jjb3VudC0xKSk7CisgICAgICAgfQorICAgICAg ICAvL3ByaW50ayhLRVJOX0RFQlVHICJpaWNfc2VuZGJ5dGVzOiBJc3N1aW5nIHdyaXRlXG4iKTsK KworICAgICAgICBpZih4ZmVyX2ZsYWcgPSBJSUNfQ09NQklORURfWEZFUikgeworICAgICAgICAg ICBpaWNfb3V0YihhZGFwLCBQUEM0MDVHUF9JSUNPX0JBU0UrSUlDT19DTlRMLCAoMHgwOSB8ICgo cmVtYWluZGVyLTEpIDw8IDQpKSk7CisgICAgICAgIH0KKyAgICAgICBlbHNlIHsKKyAgICAgICAg ICAgaWljX291dGIoYWRhcCwgUFBDNDA1R1BfSUlDT19CQVNFK0lJQ09fQ05UTCwgKDB4MDEgfCAo KHJlbWFpbmRlci0xKSA8PCA0KSkpOworICAgICAgICB9CisgICAgICAgREVCMihwcmludGsoS0VS Tl9ERUJVRyAiaWljX3NlbmRieXRlczogV2FpdGluZyBmb3IgaW50ZXJydXB0XG4iKSk7CisgICAg ICAgdGltZW91dCA9IHdhaXRfZm9yX3BpbihhZGFwLCAmc3RhdHVzKTsKKyAgICAgICAgaWYodGlt ZW91dCA8IDApIHsKKyAgICAgICAgICAgICAgICAgIC8vCisgICAgICAgICAgIC8vIEVycm9yIGhh bmRsaW5nCisgICAgICAgICAgIC8vCisgICAgICAgICAgIC8vcHJpbnRrKEtFUk5fRVJSICJFcnJv cjogd3JpdGUgdGltZW91dFxuIik7CisgICAgICAgICAgIHJldHVybiB3cmNvdW50OworICAgICAg ICB9CisgICAgICAgIHJldCA9IGFuYWx5emVfc3RhdHVzKGFkYXApOworICAgICAgICBpZihyZXQg PCAwKSB7CisgICAgICAgICAgIHJldCA9IGlpY19pbmIoYWRhcCwgUFBDNDA1R1BfSUlDT19CQVNF K0lJQ09fWEZSQ05UKTsKKyAgICAgICAgICByZXQgPSByZXQgJiAweDA3OworICAgICAgICAgICBy ZXR1cm4gKHdyY291bnQtcmVtYWluZGVyK3JldCk7CisgICAgICAgIH0KKyAgICAgICBERUIyKHBy aW50ayhLRVJOX0RFQlVHICJpaWNfc2VuZGJ5dGVzOiBHb3QgaW50ZXJydXB0XG4iKSk7CisgICAg ICAgcmV0dXJuIHdyY291bnQ7Cit9CisKKworLy8KKy8vIERlc2NyaXB0aW9uOiBDYWxsZWQgYnkg dGhlIHVwcGVyIGxheWVycyB0byBkbyB0aGUgZ3J1bnQgd29yayBmb3IKKy8vIGEgbWFzdGVyIHJl YWQgdHJhbnNhY3Rpb24uCisvLworc3RhdGljIGludCBpaWNfcmVhZGJ5dGVzKHN0cnVjdCBpMmNf YWRhcHRlciAqaTJjX2FkYXAsIGNoYXIgKmJ1ZiwgaW50IGNvdW50LCBpbnQgeGZlcl90eXBlKQor eworICAgICAgIGludCByZGNvdW50PTAsIGksIHN0YXR1cywgdGltZW91dDsKKyAgICAgICBzdHJ1 Y3QgaTJjX2FsZ29faWljX2RhdGEgKmFkYXAgPSBpMmNfYWRhcC0+YWxnb19kYXRhOworICAgICAg IGludCBsb29wcywgcmVtYWluZGVyLCBqOworICAgICAgICBpbnQgcmV0OworIAorICAgICAgIGlm KGNvdW50ID0gMCkgcmV0dXJuIDA7CisgICAgICAgbG9vcHMgPSBjb3VudCAvIDQ7CisgICAgICAg cmVtYWluZGVyID0gY291bnQgJSA0OworCisgICAgICAgLy9wcmludGsoS0VSTl9ERUJVRyAiaWlj X3JlYWRieXRlczogbG9vcHMgPSAlZCwgcmVtYWluZGVyID0gJWRcbiIsIGxvb3BzLCByZW1haW5k ZXIpOworCisgICAgICAgaWYoKGxvb3BzID4gMSkgJiYgKHJlbWFpbmRlciA9IDApKSB7CisgICAg ICAgLy9wcmludGsoS0VSTl9ERUJVRyAiaWljX3JlYWRieXRlczogKGxvb3BzID4gMSkgJiYgKHJl bWFpbmRlciA9IDApXG4iKTsKKyAgICAgICAgICBmb3IoaT0wOyBpPChsb29wcy0xKTsgaSsrKSB7 CisgICAgICAgICAgICAgLy8KKyAgICAgICAgICAgICAgLy8gSXNzdWUgY29tbWFuZCB0byBiZWdp biBtYXN0ZXIgcmVhZCAoNCBieXRlcyBtYXhpbXVtKQorICAgICAgICAgICAgICAvLworICAgICAg ICAgICAgIC8vcHJpbnRrKEtFUk5fREVCVUcgIi0tLT5Jc3N1ZWQgcmVhZCBjb21tYW5kXG4iKTsK KyAgICAgICAgICAgICBpaWNfb3V0YihhZGFwLCBQUEM0MDVHUF9JSUNPX0JBU0UrSUlDT19DTlRM LCAweDM3KTsKKyAgICAgICAgICAgICAvLworICAgICAgICAgICAgICAvLyBXYWl0IGZvciB0cmFu c21pc3Npb24gdG8gY29tcGxldGUuICBXaGVuIGl0IGRvZXMsCisgICAgICAgICAgICAgIC8vIGxv b3AgdG8gdGhlIHRvcCBvZiB0aGUgZm9yIHN0YXRlbWVudCBhbmQgd3JpdGUgdGhlCisgICAgICAg ICAgICAgIC8vIG5leHQgZm91ciBieXRlcy4KKyAgICAgICAgICAgICAgLy8KKyAgICAgICAgICAg ICAvL3ByaW50ayhLRVJOX0RFQlVHICItLS0+V2FpdGluZyBmb3IgaW50ZXJydXB0XG4iKTsKKyAg ICAgICAgICAgICAgdGltZW91dCA9IHdhaXRfZm9yX3BpbihhZGFwLCAmc3RhdHVzKTsKKyAgICAg ICAgICAgICAgaWYodGltZW91dCA8IDApIHsKKyAgICAgICAgICAgICAgICAvLyBFcnJvciBIYW5k bGVyCisgICAgICAgICAgICAgICAgLy9wcmludGsoS0VSTl9FUlIgIkVycm9yOiByZWFkIHRpbWVk IG91dFxuIik7CisgICAgICAgICAgICAgICAgIHJldHVybiByZGNvdW50OworICAgICAgICAgICAg IH0KKyAgICAgICAgICAgICAgLy9wcmludGsoS0VSTl9ERUJVRyAiLS0tPkdvdCBpbnRlcnJ1cHRc biIpOworCisgICAgICAgICAgICAgIHJldCA9IGFuYWx5emVfc3RhdHVzKGFkYXApOworICAgICAg ICAgICAgICBpZihyZXQgPCAwKSByZXR1cm4gcmRjb3VudDsKKworICAgICAgICAgICAgIGZvcihq PTA7IGo8NDsgaisrKSB7CisgICAgICAgICAgICAgICAgIC8vIFdhaXQgZm9yIGRhdGEgdG8gc2h1 ZmZsZSB0byB0b3Agb2YgZGF0YSBidWZmZXIKKyAgICAgICAgICAgICAgICAgLy8gVGhpcyB2YWx1 ZSBuZWVkcyB0byBvcHRpbWl6ZWQuCisgICAgICAgICAgICAgICAgdWRlbGF5KDEpOworICAgICAg ICAgICAgICAgIGJ1ZltyZGNvdW50XSA9IGlpY19pbmIoYWRhcCwgUFBDNDA1R1BfSUlDT19CQVNF K0lJQ09fTURCVUYpOworICAgICAgICAgICAgICAgIHJkY291bnQrKzsKKyAgICAgICAgICAgICAg ICAvL3ByaW50ayhLRVJOX0RFQlVHICItLS0+UmVhZCBvbmUgYnl0ZVxuIik7CisgICAgICAgICAg ICAgIH0KKyAgICAgICAgICAgfQorICAgICAgIH0KKworICAgICAgIGVsc2UgaWYoKGxvb3BzID49 IDEpICYmIChyZW1haW5kZXIgPiAwKSl7CisgICAgICAgLy9wcmludGsoS0VSTl9ERUJVRyAiaWlj X3JlYWRieXRlczogKGxvb3BzID49MSkgJiYgKHJlbWFpbmRlciA+IDApXG4iKTsKKyAgICAgICAg ICBmb3IoaT0wOyBpPGxvb3BzOyBpKyspIHsKKyAgICAgICAgICAgICAgLy8KKyAgICAgICAgICAg ICAgLy8gSXNzdWUgY29tbWFuZCB0byBiZWdpbiBtYXN0ZXIgcmVhZCAoNCBieXRlcyBtYXhpbXVt KQorICAgICAgICAgICAgICAvLworICAgICAgICAgICAgICAvL3ByaW50ayhLRVJOX0RFQlVHICIt LS0+SXNzdWVkIHJlYWQgY29tbWFuZFxuIik7CisgICAgICAgICAgICAgIGlpY19vdXRiKGFkYXAs IFBQQzQwNUdQX0lJQ09fQkFTRStJSUNPX0NOVEwsIDB4MzcpOworICAgICAgICAgICAgICAvLwor ICAgICAgICAgICAgICAvLyBXYWl0IGZvciB0cmFuc21pc3Npb24gdG8gY29tcGxldGUuICBXaGVu IGl0IGRvZXMsCisgICAgICAgICAgICAgIC8vIGxvb3AgdG8gdGhlIHRvcCBvZiB0aGUgZm9yIHN0 YXRlbWVudCBhbmQgd3JpdGUgdGhlCisgICAgICAgICAgICAgIC8vIG5leHQgZm91ciBieXRlcy4K KyAgICAgICAgICAgICAgLy8KKyAgICAgICAgICAgICAgLy9wcmludGsoS0VSTl9ERUJVRyAiLS0t PldhaXRpbmcgZm9yIGludGVycnVwdFxuIik7CisgICAgICAgICAgICAgIHRpbWVvdXQgPSB3YWl0 X2Zvcl9waW4oYWRhcCwgJnN0YXR1cyk7CisgICAgICAgICAgICAgIGlmKHRpbWVvdXQgPCAwKSB7 CisgICAgICAgICAgICAgICAgIC8vIEVycm9yIEhhbmRsZXIKKyAgICAgICAgICAgICAgICAgLy9w cmludGsoS0VSTl9FUlIgIkVycm9yOiByZWFkIHRpbWVkIG91dFxuIik7CisgICAgICAgICAgICAg ICAgIHJldHVybiByZGNvdW50OworICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgIC8vcHJp bnRrKEtFUk5fREVCVUcgIi0tLT5Hb3QgaW50ZXJydXB0XG4iKTsKKworICAgICAgICAgICAgICBy ZXQgPSBhbmFseXplX3N0YXR1cyhhZGFwKTsKKyAgICAgICAgICAgICAgaWYocmV0IDwgMCkgcmV0 dXJuIHJkY291bnQ7CisKKyAgICAgICAgICAgICAgZm9yKGo9MDsgajw0OyBqKyspIHsKKyAgICAg ICAgICAgICAgICAgLy8gV2FpdCBmb3IgZGF0YSB0byBzaHVmZmxlIHRvIHRvcCBvZiBkYXRhIGJ1 ZmZlcgorICAgICAgICAgICAgICAgICAvLyBUaGlzIHZhbHVlIG5lZWRzIHRvIG9wdGltaXplZC4K KyAgICAgICAgICAgICAgICAgdWRlbGF5KDEpOworICAgICAgICAgICAgICAgICBidWZbcmRjb3Vu dF0gPSBpaWNfaW5iKGFkYXAsIFBQQzQwNUdQX0lJQ09fQkFTRStJSUNPX01EQlVGKTsKKyAgICAg ICAgICAgICAgICAgcmRjb3VudCsrOworICAgICAgICAgICAgICAgICAvL3ByaW50ayhLRVJOX0RF QlVHICItLS0+UmVhZCBvbmUgYnl0ZVxuIik7CisgICAgICAgICAgICAgIH0KKyAgICAgICAgICAg fQorICAgICAgICB9CisKKyAgICAgICAvL3ByaW50ayhLRVJOX0RFQlVHICJpaWNfcmVhZGJ5dGVz OiBleHBlZGl0ZSByZWFkXG4iKTsKKyAgICAgICBpZihyZW1haW5kZXIgPSAwKSByZW1haW5kZXIg PSA0OworICAgICAgIERFQjIocHJpbnRrKEtFUk5fREVCVUcgImlpY19yZWFkYnl0ZXM6IHdyaXRp bmcgJXggdG8gSUlDT19DTlRMXG4iLCAoMHgwMyB8ICgocmVtYWluZGVyLTEpIDw8IDQpKSkpOwor CisgICAgICAgaWYoeGZlcl90eXBlID0gSUlDX0NPTUJJTkVEX1hGRVIpIHsKKyAgICAgICAgICBp aWNfb3V0YihhZGFwLCBQUEM0MDVHUF9JSUNPX0JBU0UrSUlDT19DTlRMLCAoMHgwYiB8ICgocmVt YWluZGVyLTEpIDw8IDQpKSk7CisgICAgICAgIH0KKyAgICAgICAgZWxzZSB7CisgICAgICAgICAg aWljX291dGIoYWRhcCwgUFBDNDA1R1BfSUlDT19CQVNFK0lJQ09fQ05UTCwgKDB4MDMgfCAoKHJl bWFpbmRlci0xKSA8PCA0KSkpOworICAgICAgICB9CisgICAgICAgREVCMihwcmludGsoS0VSTl9E RUJVRyAiaWljX3JlYWRieXRlczogV2FpdCBmb3IgcGluXG4iKSk7CisgICAgICAgIHRpbWVvdXQg PSB3YWl0X2Zvcl9waW4oYWRhcCwgJnN0YXR1cyk7CisgICAgICAgREVCMihwcmludGsoS0VSTl9E RUJVRyAiaWljX3JlYWRieXRlczogR290IHRoZSBpbnRlcnJ1cHRcbiIpKTsKKyAgICAgICAgaWYo dGltZW91dCA8IDApIHsKKyAgICAgICAgICAgLy8gRXJyb3IgSGFuZGxlcgorICAgICAgICAgIC8v cHJpbnRrKEtFUk5fRVJSICJFcnJvcjogcmVhZCB0aW1lZCBvdXRcbiIpOworICAgICAgICAgICBy ZXR1cm4gcmRjb3VudDsKKyAgICAgICAgfQorCisgICAgICAgIHJldCA9IGFuYWx5emVfc3RhdHVz KGFkYXApOworICAgICAgICBpZihyZXQgPCAwKSByZXR1cm4gcmRjb3VudDsKKworICAgICAgIC8v cHJpbnRrKEtFUk5fREVCVUcgImlpY19yZWFkYnl0ZTogQmVnaW4gcmVhZGluZyBkYXRhIGJ1ZmZl clxuIik7CisgICAgICAgZm9yKGk9MDsgaTxyZW1haW5kZXI7IGkrKykgeworICAgICAgICAgIGJ1 ZltyZGNvdW50XSA9IGlpY19pbmIoYWRhcCwgUFBDNDA1R1BfSUlDT19CQVNFK0lJQ09fTURCVUYp OworICAgICAgICAgIC8vIHByaW50ayhLRVJOX0RFQlVHICJpaWNfcmVhZGJ5dGVzOiAgQ2hhcmFj dGVyIHJlYWQgPSAleFxuIiwgYnVmW3JkY291bnRdKTsKKyAgICAgICAgICAgcmRjb3VudCsrOwor ICAgICAgIH0KKworICAgICAgIHJldHVybiByZGNvdW50OworfQorCisKKy8vCisvLyBEZXNjcmlw dGlvbjogIFRoaXMgZnVuY3Rpb24gaW1wbGVtZW50cyBjb21iaW5lZCB0cmFuc2FjdGlvbnMuICBD b21iaW5lZAorLy8gdHJhbnNhY3Rpb25zIGNvbnNpc3Qgb2YgY29tYmluYXRpb25zIG9mIHJlYWRp bmcgYW5kIHdyaXRpbmcgYmxvY2tzIG9mIGRhdGEuCisvLyBFYWNoIHRyYW5zZmVyIChpLmUuIGEg cmVhZCBvciBhIHdyaXRlKSBpcyBzZXBhcmF0ZWQgYnkgYSByZXBlYXRlZCBzdGFydAorLy8gY29u ZGl0aW9uLgorLy8KK3N0YXRpYyBpbnQgaWljX2NvbWJpbmVkX3RyYW5zYWN0aW9uKHN0cnVjdCBp MmNfYWRhcHRlciAqaTJjX2FkYXAsIHN0cnVjdCBpMmNfbXNnIG1zZ3NbXSwgaW50IG51bSkgCit7 CisgICBpbnQgaTsKKyAgIHN0cnVjdCBpMmNfbXNnICpwbXNnOworICAgaW50IHJldDsKKworICAg REVCMihwcmludGsoS0VSTl9ERUJVRyAiQmVnaW5uaW5nIGNvbWJpbmVkIHRyYW5zYWN0aW9uXG4i KSk7CisKKyAgIGZvcihpPTA7IGk8KG51bS0xKTsgaSsrKSB7CisgICAgICBwbXNnID0gJm1zZ3Nb aV07CisgICAgICBpZihwbXNnLT5mbGFncyAmIEkyQ19NX1JEKSB7CisgICAgICAgICBERUIyKHBy aW50ayhLRVJOX0RFQlVHICIgIFRoaXMgb25lIGlzIGEgcmVhZFxuIikpOworICAgICAgICAgcmV0 ID0gaWljX3JlYWRieXRlcyhpMmNfYWRhcCwgcG1zZy0+YnVmLCBwbXNnLT5sZW4sIElJQ19DT01C SU5FRF9YRkVSKTsKKyAgICAgIH0KKyAgICAgIGVsc2UgaWYoIShwbXNnLT5mbGFncyAmIEkyQ19N X1JEKSkgeworICAgICAgICAgREVCMihwcmludGsoS0VSTl9ERUJVRyAiVGhpcyBvbmUgaXMgYSB3 cml0ZVxuIikpOworICAgICAgICAgcmV0ID0gaWljX3NlbmRieXRlcyhpMmNfYWRhcCwgcG1zZy0+ YnVmLCBwbXNnLT5sZW4sIElJQ19DT01CSU5FRF9YRkVSKTsKKyAgICAgIH0KKyAgIH0KKyAgIC8v CisgICAvLyBMYXN0IHJlYWQgb3Igd3JpdGUgc2VnbWVudCBuZWVkcyB0byBiZSB0ZXJtaW5hdGVk IHdpdGggYSBzdG9wCisgICAvLworICAgcG1zZyA9ICZtc2dzW2ldOworCisgICBpZihwbXNnLT5m bGFncyAmIEkyQ19NX1JEKSB7CisgICAgICBERUIyKHByaW50ayhLRVJOX0RFQlVHICJEb2luZyB0 aGUgbGFzdCByZWFkXG4iKSk7CisgICAgICByZXQgPSBpaWNfcmVhZGJ5dGVzKGkyY19hZGFwLCBw bXNnLT5idWYsIHBtc2ctPmxlbiwgSUlDX1NJTkdMRV9YRkVSKTsKKyAgIH0KKyAgIGVsc2UgaWYo IShwbXNnLT5mbGFncyAmIEkyQ19NX1JEKSkgeworICAgICAgREVCMihwcmludGsoS0VSTl9ERUJV RyAiRG9pbmcgdGhlIGxhc3Qgd3JpdGVcbiIpKTsKKyAgICAgIHJldCA9IGlpY19zZW5kYnl0ZXMo aTJjX2FkYXAsIHBtc2ctPmJ1ZiwgcG1zZy0+bGVuLCBJSUNfU0lOR0xFX1hGRVIpOworICAgfQor CisgICByZXR1cm4gcmV0OworfQorCisKKy8vCisvLyBEZXNjcmlwdGlvbjogV2hlbmV2ZXIgd2Ug aW5pdGlhdGUgYSB0cmFuc2FjdGlvbiwgdGhlIGZpcnN0IGJ5dGUgY2xvY2tlZAorLy8gb250byB0 aGUgYnVzIGFmdGVyIHRoZSBzdGFydCBjb25kaXRpb24gaXMgdGhlIGFkZHJlc3MgKDcgYml0KSBv ZiB0aGUKKy8vIGRldmljZSB3ZSB3YW50IHRvIHRhbGsgdG8uICBUaGlzIGZ1bmN0aW9uIG1hbmlw dWxhdGVzIHRoZSBhZGRyZXNzIHNwZWNpZmllZAorLy8gc28gdGhhdCBpdCBtYWtlcyBzZW5zZSB0 byB0aGUgaGFyZHdhcmUgd2hlbiB3cml0dGVuIHRvIHRoZSBJSUMgcGVyaXBoZXJhbC4KKy8vCisv LyBOb3RlOiAxMCBiaXQgYWRkcmVzc2VzIGFyZSBub3Qgc3VwcG9ydGVkIGluIHRoaXMgZHJpdmVy LCBhbHRob3VnaCB0aGV5IGFyZQorLy8gc3VwcG9ydGVkIGJ5IHRoZSBoYXJkd2FyZS4gIFRoaXMg ZnVuY3Rpb25hbGl0eSBuZWVkcyB0byBiZSBpbXBsZW1lbnRlZC4KKy8vCitzdGF0aWMgaW5saW5l IGludCBpaWNfZG9BZGRyZXNzKHN0cnVjdCBpMmNfYWxnb19paWNfZGF0YSAqYWRhcCwKKyAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IGkyY19tc2cgKm1zZywgaW50IHJldHJp ZXMpIAoreworICAgICAgIHVuc2lnbmVkIHNob3J0IGZsYWdzID0gbXNnLT5mbGFnczsKKyAgICAg ICB1bnNpZ25lZCBjaGFyIGFkZHI7CisKKy8vCisvLyBUaGUgZm9sbG93aW5nIHNlZ21lbnQgZm9y IDEwIGJpdCBhZGRyZXNzZXMgbmVlZHMgdG8gYmUgcG9ydGVkCisvLworLyogVGVuIGJpdCBhZGRy ZXNzZXMgbm90IHN1cHBvcnRlZCByaWdodCBub3cKKyAgICAgICBpZiAoIChmbGFncyAmIEkyQ19N X1RFTikgICkgeyAKKyAgICAgICAgICAgICAgIC8vIGEgdGVuIGJpdCBhZGRyZXNzCisgICAgICAg ICAgICAgICBhZGRyID0gMHhmMCB8ICgoIG1zZy0+YWRkciA+PiA3KSAmIDB4MDMpOworICAgICAg ICAgICAgICAgREVCMihwcmludGsoS0VSTl9ERUJVRyAiYWRkcjA6ICVkXG4iLGFkZHIpKTsKKyAg ICAgICAgICAgICAgIC8vIHRyeSBleHRlbmRlZCBhZGRyZXNzIGNvZGUuLi4KKyAgICAgICAgICAg ICAgIHJldCA9IHRyeV9hZGRyZXNzKGFkYXAsIGFkZHIsIHJldHJpZXMpOworICAgICAgICAgICAg ICAgaWYgKHJldCE9MSkgeworICAgICAgICAgICAgICAgICAgICAgICBwcmludGsoS0VSTl9FUlIg ImlpY19kb0FkZHJlc3M6IGRpZWQgYXQgZXh0ZW5kZWQgYWRkcmVzcyBjb2RlLlxuIik7CisgICAg ICAgICAgICAgICAgICAgICAgIHJldHVybiAtRVJFTU9URUlPOworICAgICAgICAgICAgICAgfQor ICAgICAgICAgICAgICAgLy8gdGhlIHJlbWFpbmluZyA4IGJpdCBhZGRyZXNzCisgICAgICAgICAg ICAgICBpaWNfb3V0YihhZGFwLG1zZy0+YWRkciAmIDB4N2YpOworICAgICAgICAgICAgICAgLy8g U3RhdHVzIGNoZWNrIGNvbWVzIGhlcmUKKyAgICAgICAgICAgICAgIGlmIChyZXQgIT0gMSkgewor ICAgICAgICAgICAgICAgICAgICAgICBwcmludGsoS0VSTl9FUlIgImlpY19kb0FkZHJlc3M6IGRp ZWQgYXQgMm5kIGFkZHJlc3MgY29kZS5cbiIpOworICAgICAgICAgICAgICAgICAgICAgICByZXR1 cm4gLUVSRU1PVEVJTzsKKyAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgIGlmICggZmxh Z3MgJiBJMkNfTV9SRCApIHsKKyAgICAgICAgICAgICAgICAgICAgICAgaTJjX3JlcHN0YXJ0KGFk YXApOworICAgICAgICAgICAgICAgICAgICAgICAvLyBva2F5LCBub3cgc3dpdGNoIGludG8gcmVh ZGluZyBtb2RlCisgICAgICAgICAgICAgICAgICAgICAgIGFkZHIgfD0gMHgwMTsKKyAgICAgICAg ICAgICAgICAgICAgICAgcmV0ID0gdHJ5X2FkZHJlc3MoYWRhcCwgYWRkciwgcmV0cmllcyk7Cisg ICAgICAgICAgICAgICAgICAgICAgIGlmIChyZXQhPTEpIHsKKyAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBwcmludGsoS0VSTl9FUlIgImlpY19kb0FkZHJlc3M6IGRpZWQgYXQgZXh0ZW5k ZWQgYWRkcmVzcyBjb2RlLlxuIik7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0 dXJuIC1FUkVNT1RFSU87CisgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAg IH0KKyAgICAgICB9IGVsc2UgLS0tLS0tLS0tLT4gLy8gbm9ybWFsIDcgYml0IGFkZHJlc3MKKwor VGVuIGJpdCBhZGRyZXNzZXMgbm90IHN1cHBvcnRlZCB5ZXQgKi8KKworICAgICAgIGFkZHIgPSAo IG1zZy0+YWRkciA8PCAxICk7CisgICAgICAgaWYgKGZsYWdzICYgSTJDX01fUkQgKQorICAgICAg ICAgICAgICAgYWRkciB8PSAxOworICAgICAgIGlmIChmbGFncyAmIEkyQ19NX1JFVl9ESVJfQURE UiApCisgICAgICAgICAgICAgICBhZGRyIF49IDE7CisgICAgICAgLy8KKyAgICAgICAvLyBXcml0 ZSB0byB0aGUgbG93IHNsYXZlIGFkZHJlc3MKKyAgICAgICAvLworICAgICAgIGlpY19vdXRiKGFk YXAsIFBQQzQwNUdQX0lJQ09fQkFTRSArIElJQ09fTE1BRFIsIGFkZHIpOworICAgICAgIC8vCisg ICAgICAgLy8gV3JpdGUgemVybyB0byB0aGUgaGlnaCBzbGF2ZSByZWdpc3RlciBzaW5jZSB3ZSBh cmUKKyAgICAgICAvLyBvbmx5IHVzaW5nIDcgYml0IGFkZHJlc3NlcworICAgICAgIC8vCisgICAg ICAgaWljX291dGIoYWRhcCwgUFBDNDA1R1BfSUlDT19CQVNFICsgSUlDT19ITUFEUiwgMCk7CisK KyAgICAgICByZXR1cm4gMDsKK30KKworCisvLworLy8gRGVzY3JpcHRpb246IFByZXBhcmVzIHRo ZSBjb250cm9sbGVyIGZvciBhIHRyYW5zYWN0aW9uIChjbGVhcmluZyBzdGF0dXMKKy8vIHJlZ2lz dGVycywgZGF0YSBidWZmZXJzLCBldGMpLCBhbmQgdGhlbiBjYWxscyBlaXRoZXIgaWljX3JlYWRi eXRlcyBvcgorLy8gaWljX3NlbmRieXRlcyB0byBkbyB0aGUgYWN0dWFsIHRyYW5zYWN0aW9uLgor Ly8KK3N0YXRpYyBpbnQgaWljX3hmZXIoc3RydWN0IGkyY19hZGFwdGVyICppMmNfYWRhcCwKKyAg ICAgICAgICAgICAgICAgICBzdHJ1Y3QgaTJjX21zZyBtc2dzW10sIAorICAgICAgICAgICAgICAg ICAgIGludCBudW0pCit7CisgICAgICAgc3RydWN0IGkyY19hbGdvX2lpY19kYXRhICphZGFwID0g aTJjX2FkYXAtPmFsZ29fZGF0YTsKKyAgICAgICBzdHJ1Y3QgaTJjX21zZyAqcG1zZzsKKyAgICAg ICBpbnQgaSA9IDA7CisgICAgICAgaW50IHJldDsKKyAgICAKKyAgICAgICBwbXNnID0gJm1zZ3Nb aV07CisKKyAgICAgICAvLworICAgICAgIC8vIENsZWFyIHN0YXR1cyByZWdpc3RlcgorICAgICAg IC8vCisgICAgICAgREVCMihwcmludGsoS0VSTl9ERUJVRyAiaWljX3hmZXI6IGlpY194ZmVyOiBD bGVhcmluZyBzdGF0dXMgcmVnaXN0ZXJcbiIpKTsKKyAgICAgICBpaWNfb3V0YihhZGFwLCBQUEM0 MDVHUF9JSUNPX0JBU0UgKyBJSUNPX1NUUywgMHgwYSk7CisKKyAgICAgICAvLworICAgICAgIC8v IFdhaXQgZm9yIGFueSBwZW5kaW5nIHRyYW5zZmVycyB0byBjb21wbGV0ZQorICAgICAgIC8vCisg ICAgICAgREVCMihwcmludGsoS0VSTl9ERUJVRyAiaWljX3hmZXI6IFdhaXRpbmcgZm9yIGFueSBw ZW5kaW5nIHRyYW5zZmVycyB0byBjb21wbGV0ZVxuIikpOworICAgICAgIHdoaWxlKChyZXQgPSBp aWNfaW5iKGFkYXAsIFBQQzQwNUdQX0lJQ09fQkFTRSArIElJQ09fU1RTKSkgPSAweDAxKSB7Cisg ICAgICAgICAgICAgICA7CisgICAgICAgfQorCisgICAgICAgLy8KKyAgICAgICAvLyBGbHVzaCBt YXN0ZXIgZGF0YSBidWYKKyAgICAgICAvLworICAgICAgIERFQjIocHJpbnRrKEtFUk5fREVCVUcg ImlpY194ZmVyOiBDbGVhcmluZyBtYXN0ZXIgZGF0YSBidWZmZXJcbiIpKTsgICAgICAgICAgICAg CisgICAgICAgcmV0ID0gaWljX2luYihhZGFwLCBQUEM0MDVHUF9JSUNPX0JBU0UgKyBJSUNPX01E Q05UTCk7CisgICAgICAgaWljX291dGIoYWRhcCwgUFBDNDA1R1BfSUlDT19CQVNFICsgSUlDT19N RENOVEwsIHJldCB8IDB4NDApOworCisgICAgICAgLy8KKyAgICAgICAvLyBMb2FkIHNsYXZlIGFk ZHJlc3MKKyAgICAgICAvLworICAgICAgIERFQjIocHJpbnRrKEtFUk5fREVCVUcgImlpY194ZmVy OiBMb2FkaW5nIHNsYXZlIGFkZHJlc3NcbiIpKTsKKyAgICAgICByZXQgPSBpaWNfZG9BZGRyZXNz KGFkYXAsIHBtc2csIGkyY19hZGFwLT5yZXRyaWVzKTsKKworICAgICAgIC8vCisgICAgICAgLy8g Q29tYmluZWQgdHJhbnNhY3Rpb24gKHJlYWQgYW5kIHdyaXRlKQorICAgICAgIC8vCisgICAgICAg aWYobnVtID4gMSkgeworICAgICAgICAgICBERUIyKHByaW50ayhLRVJOX0RFQlVHICJpaWNfeGZl cjogQ2FsbCBjb21iaW5lZCB0cmFuc2FjdGlvblxuIikpOworICAgICAgICAgICByZXQgPSBpaWNf Y29tYmluZWRfdHJhbnNhY3Rpb24oaTJjX2FkYXAsIG1zZ3MsIG51bSk7CisgICAgICAgIH0KKyAg ICAgICAvLworICAgICAgIC8vIFJlYWQgb25seQorICAgICAgIC8vCisgICAgICAgZWxzZSBpZigo bnVtID0gMSkgJiYgKHBtc2ctPmZsYWdzICYgSTJDX01fUkQpKSB7CisgICAgICAgICAgLy8KKyAg ICAgICAgICAvLyBUZWxsIGRldmljZSB0byBiZWdpbiByZWFkaW5nIGRhdGEgZnJvbSB0aGUgIG1h c3RlciBkYXRhIAorICAgICAgICAgIC8vCisgICAgICAgICAgREVCMihwcmludGsoS0VSTl9ERUJV RyAiaWljX3hmZXI6IENhbGwgYWRhcHRlcidzIHJlYWRcbiIpKTsKKyAgICAgICAgICByZXQgPSBp aWNfcmVhZGJ5dGVzKGkyY19hZGFwLCBwbXNnLT5idWYsIHBtc2ctPmxlbiwgSUlDX1NJTkdMRV9Y RkVSKTsKKyAgICAgICB9IAorICAgICAgICAvLworICAgICAgIC8vIFdyaXRlIG9ubHkKKyAgICAg ICAvLworICAgICAgIGVsc2UgaWYoKG51bSA9IDEgKSAmJiAoIShwbXNnLT5mbGFncyAmIEkyQ19N X1JEKSkpIHsKKyAgICAgICAgICAvLworICAgICAgICAgIC8vIFdyaXRlIGRhdGEgdG8gbWFzdGVy IGRhdGEgYnVmZmVycyBhbmQgdGVsbCBvdXIgZGV2aWNlCisgICAgICAgICAgLy8gdG8gYmVnaW4g dHJhbnNtaXR0aW5nCisgICAgICAgICAgLy8KKyAgICAgICAgICBERUIyKHByaW50ayhLRVJOX0RF QlVHICJpaWNfeGZlcjogQ2FsbCBhZGFwdGVyJ3Mgd3JpdGVcbiIpKTsKKyAgICAgICAgICByZXQg PSBpaWNfc2VuZGJ5dGVzKGkyY19hZGFwLCBwbXNnLT5idWYsIHBtc2ctPmxlbiwgSUlDX1NJTkdM RV9YRkVSKTsKKyAgICAgICB9ICAgICAgIAorCisgICAgICAgcmV0dXJuIHJldDsgICAKK30KKwor CisvLworLy8gRGVzY3JpcHRpb246IEltcGxlbWVudHMgZGV2aWNlIHNwZWNpZmljIGlvY3Rscy4g IEhpZ2hlciBsZXZlbCBpb2N0bHMgY2FuCisvLyBiZSBmb3VuZCBpbiBpMmMtY29yZS5jIGFuZCBh cmUgdHlwaWNhbCBvZiBhbnkgaTJjIGNvbnRyb2xsZXIgKHNwZWNpZnlpbmcKKy8vIHNsYXZlIGFk ZHJlc3MsIHRpbWVvdXRzLCBldGMpLiAgVGhlc2UgaW9jdGxzIHRha2UgYWR2YW50YWdlIG9mIGFu eSBoYXJkd2FyZQorLy8gZmVhdHVyZXMgYnVpbHQgaW50byB0aGUgY29udHJvbGxlciBmb3Igd2hp Y2ggdGhpcyBhbGdvcml0aG0tYWRhcHRlciBzZXQKKy8vIHdhcyB3cml0dGVuLiAgVGhlc2UgaW9j dGxzIGFsbG93IHlvdSB0byB0YWtlIGNvbnRyb2wgb2YgdGhlIGRhdGEgYW5kIGNsb2NrCisvLyBs aW5lcyBvbiB0aGUgSUJNIFBQQyA0MDUgSUlDIGNvbnRyb2xsZXIgYW5kIHNldCB0aGUgZWl0aGVy IGhpZ2ggb3IgbG93LAorLy8gc2ltaWxhciB0byBhIEdQSU8gcGluLgorLy8KK3N0YXRpYyBpbnQg YWxnb19jb250cm9sKHN0cnVjdCBpMmNfYWRhcHRlciAqYWRhcHRlciwgCisgICAgICAgdW5zaWdu ZWQgaW50IGNtZCwgdW5zaWduZWQgbG9uZyBhcmcpCit7CisgICAgICAgc3RydWN0IGkyY19hbGdv X2lpY19kYXRhICphZGFwID0gYWRhcHRlci0+YWxnb19kYXRhOworICAgICAgIGludCByZXQ9MDsK KyAgICAgICBpbnQgbGluZXM7CisgICAgICAgCisgICAgICAgbGluZXMgPSBpaWNfaW5iKGFkYXAs IFBQQzQwNUdQX0lJQ09fQkFTRStJSUNPX0RJUkVDVENOVEwpOworCisgICAgICAgaWYgKGNtZCA9 IElJQ09fSTJDX1NEQUhJR0gpIHsKKyAgICAgICAgICAgICBsaW5lcyA9IGxpbmVzICYgMHgwMTsK KyAgICAgICAgICAgICBpZiggbGluZXMgKSBsaW5lcyA9IDB4MDQ7CisgICAgICAgICAgICAgZWxz ZSBsaW5lcyA9IDA7CisgICAgICAgICAgICAgaWljX291dGIoYWRhcCwgUFBDNDA1R1BfSUlDT19C QVNFK0lJQ09fRElSRUNUQ05UTCwgKDB4MDh8bGluZXMpKTsKKyAgICAgICB9CisgICAgICAgZWxz ZSBpZiAoY21kID0gSUlDT19JMkNfU0RBTE9XKSB7CisgICAgICAgICAgICAgbGluZXMgPSBsaW5l cyAmIDB4MDE7CisgICAgICAgICAgICAgaWYoIGxpbmVzICkgbGluZXMgPSAweDA0OworICAgICAg ICAgICAgICBlbHNlIGxpbmVzID0gMDsKKyAgICAgICAgICAgICAgaWljX291dGIoYWRhcCwgUFBD NDA1R1BfSUlDT19CQVNFK0lJQ09fRElSRUNUQ05UTCwgKDB4MDB8bGluZXMpKTsKKyAgICAgICB9 CisgICAgICAgZWxzZSBpZiAoY21kID0gSUlDT19JMkNfU0NMSElHSCkgeworICAgICAgICAgICAg ICBsaW5lcyA9IGxpbmVzICYgMHgwMjsKKyAgICAgICAgICAgICAgaWYoIGxpbmVzICkgbGluZXMg PSAweDA4OworICAgICAgICAgICAgICBlbHNlIGxpbmVzID0gMDsKKyAgICAgICAgICAgICAgaWlj X291dGIoYWRhcCwgUFBDNDA1R1BfSUlDT19CQVNFK0lJQ09fRElSRUNUQ05UTCwgKDB4MDR8bGlu ZXMpKTsKKyAgICAgICB9CisgICAgICAgZWxzZSBpZiAoY21kID0gSUlDT19JMkNfU0NMTE9XKSB7 CisgICAgICAgICAgICAgIGxpbmVzID0gbGluZXMgJiAweDAyOworICAgICAgICAgICAgIGlmKCBs aW5lcyApIGxpbmVzID0gMHgwODsKKyAgICAgICAgICAgICAgZWxzZSBsaW5lcyA9IDA7CisgICAg ICAgICAgICAgIGlpY19vdXRiKGFkYXAsIFBQQzQwNUdQX0lJQ09fQkFTRStJSUNPX0RJUkVDVENO VEwsICgweDAwfGxpbmVzKSk7CisgICAgICAgfQorICAgICAgIGVsc2UgaWYgKGNtZCA9IElJQ09f STJDX0xJTkVSRUFEKSB7CisgICAgICAgICAgICAgcmV0ID0gbGluZXM7CisgICAgICAgfQorICAg ICAgIHJldHVybiByZXQ7Cit9CisKKworc3RhdGljIHUzMiBpaWNfZnVuYyhzdHJ1Y3QgaTJjX2Fk YXB0ZXIgKmFkYXApCit7CisgICAgICAgcmV0dXJuIEkyQ19GVU5DX1NNQlVTX0VNVUwgfCBJMkNf RlVOQ18xMEJJVF9BRERSIHwgCisgICAgICAgICAgICAgIEkyQ19GVU5DX1BST1RPQ09MX01BTkdM SU5HOyAKK30KKworCisvKiAtLS0tLWV4cG9ydGVkIGFsZ29yaXRobSBkYXRhOiAtLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisKK3N0YXRpYyBzdHJ1Y3QgaTJjX2FsZ29y aXRobSBpaWNfYWxnbyA9IHsKKyAgICAgICAiUFBDIDQwNUdQIElJQyBhbGdvcml0aG0iLAorICAg ICAgIEkyQ19BTEdPX0lJQywKKyAgICAgICBpaWNfeGZlciwKKyAgICAgICBOVUxMLAorICAgICAg IE5VTEwsICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogc2xhdmVfeG1pdCAgICAgICAgICAg Ki8KKyAgICAgICBOVUxMLCAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHNsYXZlX3JlY3Yg ICAgICAgICAgICovCisgICAgICAgYWxnb19jb250cm9sLCAgICAgICAgICAgICAgICAgICAvKiBp b2N0bCAgICAgICAgICAgICAgICAqLworICAgICAgIGlpY19mdW5jLCAgICAgICAgICAgICAgICAg ICAgICAgLyogZnVuY3Rpb25hbGl0eSAgICAgICAgKi8KK307CisKKworLyogCisgKiByZWdpc3Rl cmluZyBmdW5jdGlvbnMgdG8gbG9hZCBhbGdvcml0aG1zIGF0IHJ1bnRpbWUgCisgKi8KKworCisv LworLy8gRGVzY3JpcHRpb246IFJlZ2lzdGVyIGJ1cyBzdHJ1Y3R1cmUKKy8vCitpbnQgaTJjX2lp Y19hZGRfYnVzKHN0cnVjdCBpMmNfYWRhcHRlciAqYWRhcCkKK3sKKy8vICAgICBpbnQgaSwgc3Rh dHVzOworICAgICAgIHN0cnVjdCBpMmNfYWxnb19paWNfZGF0YSAqaWljX2FkYXAgPSBhZGFwLT5h bGdvX2RhdGE7CisKKy8vICAgICBpZiAoaWljX3Rlc3QpIHsKKy8vICAgICAgICAgICAgIGludCBy ZXQgPSB0ZXN0X2J1cyhpaWNfYWRhcCwgYWRhcC0+bmFtZSk7CisvLyAgICAgICAgICAgICBpZiAo cmV0PDApCisvLyAgICAgICAgICAgICAgICAgICAgIHJldHVybiAtRU5PREVWOworLy8gICAgIH0K KworICAgICAgIERFQjIocHJpbnRrKEtFUk5fREVCVUcgImkyYy1hbGdvLWlpYy5vOiBodyByb3V0 aW5lcyBmb3IgJXMgcmVnaXN0ZXJlZC5cbiIsCisgICAgICAgICAgICAgICAgICAgYWRhcC0+bmFt ZSkpOworCisgICAgICAgLyogcmVnaXN0ZXIgbmV3IGFkYXB0ZXIgdG8gaTJjIG1vZHVsZS4uLiAq LworCisgICAgICAgYWRhcC0+aWQgfD0gaWljX2FsZ28uaWQ7CisgICAgICAgYWRhcC0+YWxnbyA9 ICZpaWNfYWxnbzsKKworICAgICAgIGFkYXAtPnRpbWVvdXQgPSAxMDA7ICAgIC8qIGRlZmF1bHQg dmFsdWVzLCBzaG91bGQgICAgICAgKi8KKyAgICAgICBhZGFwLT5yZXRyaWVzID0gMzsgICAgICAg ICAgICAgIC8qIGJlIHJlcGxhY2VkIGJ5IGRlZmluZXMgICAgICAgKi8KKworI2lmZGVmIE1PRFVM RQorICAgICAgIE1PRF9JTkNfVVNFX0NPVU5UOworI2VuZGlmCisKKyAgICAgICBpMmNfYWRkX2Fk YXB0ZXIoYWRhcCk7CisgICAgICAgaWljX2luaXQoaWljX2FkYXApOworCisgICAgICAgLyogc2Nh biBidXMgKi8KKyAgICAgICAvKiBCeSBkZWZhdWx0IHNjYW5uaW5nIHRoZSBidXMgaXMgdHVybmVk IG9mZi4gKi8KKyAgICAgICBpZiAoaWljX3NjYW4pIHsKKyAgICAgICAgICAgICAgIHByaW50ayhL RVJOX0lORk8gIiBpMmMtYWxnby1paWMubzogc2Nhbm5pbmcgYnVzICVzLlxuIiwKKyAgICAgICAg ICAgICAgICAgICAgICBhZGFwLT5uYW1lKTsKKyNpZiAwCisgICAgICAgICAgICAgICBmb3IgKGkg PSAweDAwOyBpIDwgMHhmZjsgaSs9MikgeworICAgICAgICAgICAgICAgICAgICAgICAvLyBteSBo YWNrIHRvIGdldCByaWQgb2YgdGhpcyBpMmNfb3V0YiBtYWNybworICAgICAgICAgICAgICAgICAg ICAgICAvLyB3aGljaCBkb2Vzbid0IGNvbXBseSB3aXRoIG15IG5ldyBkZWZpbml0aW9uCisgICAg ICAgICAgICAgICAgICAgICAgIC8vIChpLmUuIGl0IGlzIGNvbW1lbnRlZCBvdXQgZm9yIG5vdykK KyAgICAgICAgICAgICAgICAgICAgICAgLy8gaTJjX291dGIoaWljX2FkYXAsIGkpOworICAgICAg ICAgICAgICAgICAgICAgICBpMmNfc3RhcnQoaWljX2FkYXApOworICAgICAgICAgICAgICAgICAg ICAgICBpZiAoKHdhaXRfZm9yX3BpbihpaWNfYWRhcCwgJnN0YXR1cykgPj0gMCkgJiYgCisgICAg ICAgICAgICAgICAgICAgICAgICAgICAoKHN0YXR1cyAmIEkyQ19QQ0ZfTFJCKSA9IDApKSB7IAor ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByaW50ayhLRVJOX0lORk8gIiglMDJ4KSIs aT4+MSk7IAorICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIHByaW50ayhLRVJOX0lORk8gIi4iKTsgCisgICAgICAgICAgICAgICAg ICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgaTJjX3N0b3AoaWljX2FkYXApOworICAg ICAgICAgICAgICAgICAgICAgICB1ZGVsYXkoaWljX2FkYXAtPnVkZWxheSk7CisgICAgICAgICAg ICAgICB9CisgICAgICAgICAgICAgICBwcmludGsoS0VSTl9JTkZPICJcbiIpOworI2VuZGlmCisg ICAgICAgfQorICAgICAgIHJldHVybiAwOworfQorCisKKy8vCisvLyBEb25lCisvLworaW50IGky Y19paWNfZGVsX2J1cyhzdHJ1Y3QgaTJjX2FkYXB0ZXIgKmFkYXApCit7CisgICAgICAgaW50IHJl czsKKyAgICAgICBpZiAoKHJlcyA9IGkyY19kZWxfYWRhcHRlcihhZGFwKSkgPCAwKQorICAgICAg ICAgICAgICAgcmV0dXJuIHJlczsKKyAgICAgICBERUIyKHByaW50ayhLRVJOX0RFQlVHICJpMmMt YWxnby1paWMubzogYWRhcHRlciB1bnJlZ2lzdGVyZWQ6ICVzXG4iLGFkYXAtPm5hbWUpKTsKKwor I2lmZGVmIE1PRFVMRQorICAgICAgIE1PRF9ERUNfVVNFX0NPVU5UOworI2VuZGlmCisgICAgICAg cmV0dXJuIDA7Cit9CisKKworLy8KKy8vIERvbmUKKy8vCitpbnQgX19pbml0IGkyY19hbGdvX2lp Y19pbml0ICh2b2lkKQoreworICAgICAgIHByaW50ayhLRVJOX0lORk8gIlBQQyA0MDUgaWljIChp MmMpIGFsZ29yaXRobSBtb2R1bGUgdmVyc2lvbiAlcyAoJXMpXG4iLCBJMkNfVkVSU0lPTiwgSTJD X0RBVEUiKTsKKyAgICAgICByZXR1cm4gMDsKK30KKworCit2b2lkIGkyY19hbGdvX2lpY19leGl0 KHZvaWQpCit7CisgICAgICAgcmV0dXJuOworfQorCisKK0VYUE9SVF9TWU1CT0woaTJjX2lpY19h ZGRfYnVzKTsKK0VYUE9SVF9TWU1CT0woaTJjX2lpY19kZWxfYnVzKTsKKworLy8KKy8vIFRoZSBN T0RVTEVfKiBtYWNyb3MgcmVzb2x2ZSB0byBub3RoaW5nIGlmIE1PRFVMRVMgaXMgbm90IGRlZmlu ZWQKKy8vIHdoZW4gdGhpcyBmaWxlIGlzIGNvbXBpbGVkLgorLy8KK01PRFVMRV9BVVRIT1IoIk1v bnRhVmlzdGEgU29mdHdhcmUgPHd3dy5tdmlzdGEuY29tPiIpOworTU9EVUxFX0RFU0NSSVBUSU9O KCJQUEMgNDA1IGlpYyBhbGdvcml0aG0iKTsKKworTU9EVUxFX1BBUk0oaWljX3Rlc3QsICJpIik7 CitNT0RVTEVfUEFSTShpaWNfc2NhbiwgImkiKTsKK01PRFVMRV9QQVJNKGkyY19kZWJ1ZywiaSIp OworCitNT0RVTEVfUEFSTV9ERVNDKGlpY190ZXN0LCAiVGVzdCBpZiB0aGUgSTJDIGJ1cyBpcyBh dmFpbGFibGUiKTsKK01PRFVMRV9QQVJNX0RFU0MoaWljX3NjYW4sICJTY2FuIGZvciBhY3RpdmUg Y2hpcHMgb24gdGhlIGJ1cyIpOworTU9EVUxFX1BBUk1fREVTQyhpMmNfZGVidWcsCisgICAgICAg ICJkZWJ1ZyBsZXZlbCAtIDAgb2ZmOyAxIG5vcm1hbDsgMiwzIG1vcmUgdmVyYm9zZTsgOSBpaWMt cHJvdG9jb2wiKTsKKworCisvLworLy8gVGhpcyBmdW5jdGlvbiByZXNvbHZlcyB0byBpbml0X21v ZHVsZSAodGhlIGZ1bmN0aW9uIGludm9rZWQgd2hlbiBhIG1vZHVsZQorLy8gaXMgbG9hZGVkIHZp YSBpbnNtb2QpIHdoZW4gdGhpcyBmaWxlIGlzIGNvbXBpbGVkIHdpdGggTU9EVUxFUyBkZWZpbmVk LgorLy8gT3RoZXJ3aXNlIChpLmUuIGlmIHlvdSB3YW50IHRoaXMgZHJpdmVyIHN0YXRpY2FsbHkg bGlua2VkIHRvIHRoZSBrZXJuZWwpLAorLy8gYSBwb2ludGVyIHRvIHRoaXMgZnVuY3Rpb24gaXMg c3RvcmVkIGluIGEgdGFibGUgYW5kIGNhbGxlZAorLy8gZHVyaW5nIHRoZSBpbnRpYWxpemF0aW9u IG9mIHRoZSBrZXJuZWwgKGluIGRvX2Jhc2ljX3NldHVwIGluIC9pbml0L21haW4uYykgCisvLwor Ly8gQWxsIHRoaXMgZnVuY3Rpb25hbGl0eSBpcyBjb21wbGVtZW50cyBvZiB0aGUgbWFjcm9zIGRl ZmluZWQgaW4gbGludXgvaW5pdC5oCittb2R1bGVfaW5pdChpMmNfYWxnb19paWNfaW5pdCk7CisK KworLy8KKy8vIElmIE1PRFVMRVMgaXMgZGVmaW5lZCB3aGVuIHRoaXMgZmlsZSBpcyBjb21waWxl ZCwgdGhlbiB0aGlzIGZ1bmN0aW9uIHdpbGwKKy8vIHJlc29sdmVkIHRvIGNsZWFudXBfbW9kdWxl LgorLy8KK21vZHVsZV9leGl0KGkyY19hbGdvX2lpY19leGl0KTsKLS0tIC9kZXYvbnVsbCAgIDE5 OTQtMDctMTcgMTk6NDY6MTguMDAwMDAwMDAwIC0wNDAwCisrKyBsaW51eC9pbmNsdWRlL2xpbnV4 L2kyYy1hbGdvLXBwYzQwNS5oICAgICAgIDIwMDEtMDUtMzAgMjM6MTM6MjUuMDAwMDAwMDAwIC0w NDAwCkBAIC0wLDAgKzEsNTUgQEAKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKy8qIGkyYy1hbGdv LWlpYy5oIGkyYyBkcml2ZXIgYWxnb3JpdGhtcyBmb3IgSUJNIFBQQyA0MDUgSUlDIGFkYXB0ZXJz ICAgICAgICAgKi8KKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKy8qICAgQ29weXJpZ2h0IChDKSAx OTk1LTk3IFNpbW9uIEcuIFZvZ2wKKyAgICAgICAgICAgICAgICAgICAxOTk4LTk5IEhhbnMgQmVy Z2x1bmQKKworICAgIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlz dHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgICAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBH TlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAgICB0aGUgRnJlZSBT b2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgor ICAgIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisKKyAgICBUaGlzIHByb2dy YW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAg ICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJy YW50eSBvZgorICAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIg UFVSUE9TRS4gIFNlZSB0aGUKKyAgICBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9y ZSBkZXRhaWxzLgorCisgICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUg R05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAgICBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsg aWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICAgIEZvdW5kYXRpb24sIEluYy4s IDY3NSBNYXNzIEF2ZSwgQ2FtYnJpZGdlLCBNQSAwMjEzOSwgVVNBLiAgICAgICAgICAgICAgICAq LworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworCisvKiBXaXRoIHNvbWUgY2hhbmdlcyBmcm9tIEt5 P3N0aSBNP2xra2kgPGttYWxra2lAY2MuaHV0LmZpPiBhbmQgZXZlbgorICAgRnJvZG8gTG9vaWph YXJkIDxmcm9kb2xAZGRzLm5sPiAqLworCisvKiBNb2RpZmljYXRpb25zIGJ5IE1vbnRhVmlzdGEg U29mdHdhcmUsIEF1Z3VzdCAyMDAwCisgICBDaGFuZ2VzIG1hZGUgdG8gc3VwcG9ydCB0aGUgSUlD IHBlcmlwaGVyYWwgb24gdGhlIElCTSBQUEMgNDA1ICovCisKKy8qICRJZDogaTJjLWFsZ28tcHBj NDA1LmgsdiAxLjEgMjAwMS8wNS8zMSAwMzoxMzoyNSBtZHMgRXhwICQgKi8KKworI2lmbmRlZiBJ MkNfQUxHT19JSUNfSAorI2RlZmluZSBJMkNfQUxHT19JSUNfSCAxCisKKy8qIC0tLSBEZWZpbmVz IGZvciBwY2YtYWRhcHRlcnMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t ICAgICAgICAqLworI2luY2x1ZGUgPGxpbnV4L2kyYy5oPgorCitzdHJ1Y3QgaTJjX2FsZ29faWlj X2RhdGEgeworICAgICAgIHZvaWQgKmRhdGE7ICAgICAgICAgICAgIC8qIHByaXZhdGUgZGF0YSBm b3IgbG9sZXZlbCByb3V0aW5lcyAgICAqLworICAgICAgIHZvaWQgKCpzZXRpaWMpICh2b2lkICpk YXRhLCBpbnQgY3RsLCBpbnQgdmFsKTsKKyAgICAgICBpbnQgICgqZ2V0aWljKSAodm9pZCAqZGF0 YSwgaW50IGN0bCk7CisgICAgICAgaW50ICAoKmdldG93bikgKHZvaWQgKmRhdGEpOworICAgICAg IGludCAgKCpnZXRjbG9jaykgKHZvaWQgKmRhdGEpOworICAgICAgIHZvaWQgKCp3YWl0Zm9ycGlu KSAodm9pZCk7ICAgICAKKworICAgICAgIC8qIGxvY2FsIHNldHRpbmdzICovCisgICAgICAgaW50 IHVkZWxheTsKKyAgICAgICBpbnQgbWRlbGF5OworICAgICAgIGludCB0aW1lb3V0OworfTsKKwor I2RlZmluZSBJMkNfSUlDX0FEQVBfTUFYICAgICAgIDE2CisKK2ludCBpMmNfaWljX2FkZF9idXMo c3RydWN0IGkyY19hZGFwdGVyICopOworaW50IGkyY19paWNfZGVsX2J1cyhzdHJ1Y3QgaTJjX2Fk YXB0ZXIgKik7CisKKyNlbmRpZiAvKiBJMkNfQUxHT19JSUNfSCAqLwotLS0gbGludXgvZHJpdmVy cy9pMmMvaTJjLWVsZWt0b3IuYy5vcmlnICAgICAgICAyMDAyLTA1LTA5IDE4OjIxOjQwLjAwMDAw MDAwMCAtMDQwMAorKysgbGludXgvZHJpdmVycy9pMmMvaTJjLWVsZWt0b3IuYyAgICAgMjAwMi0w NS0xNCAxODowMTowMC4wMDAwMDAwMDAgLTA0MDAKQEAgLTM1LDExICszNSwxMCBAQAogI2luY2x1 ZGUgPGxpbnV4L3BjaS5oPgogI2luY2x1ZGUgPGFzbS9pcnEuaD4KICNpbmNsdWRlIDxhc20vaW8u aD4KLQogI2luY2x1ZGUgPGxpbnV4L2kyYy5oPgogI2luY2x1ZGUgPGxpbnV4L2kyYy1hbGdvLXBj Zi5oPgogI2luY2x1ZGUgPGxpbnV4L2kyYy1lbGVrdG9yLmg+Ci0jaW5jbHVkZSAiaTJjLXBjZjg1 ODQuaCIKKyNpbmNsdWRlIDxsaW51eC9pMmMtcGNmODU4NC5oPgogCiAjZGVmaW5lIERFRkFVTFRf QkFTRSAweDMzMAogCkBAIC03NCwxMSArNzMsMTIgQEAKIHsKICAgICAgICBpbnQgYWRkcmVzcyA9 IGN0bCA/IChiYXNlICsgMSkgOiBiYXNlOwogCi0gICAgICAgaWYgKGN0bCAmJiBpcnEpIHsKKyAg ICAgICAvKiBlbmFibGUgaXJxIGlmIGFueSBzcGVjaWZpZWQgZm9yIHNlcmlhbCBvcGVyYXRpb24g Ki8KKyAgICAgICBpZiAoY3RsICYmIGlycSAmJiAodmFsICYgSTJDX1BDRl9FU08pKSB7CiAgICAg ICAgICAgICAgICB2YWwgfD0gSTJDX1BDRl9FTkk7CiAgICAgICAgfQogCi0gICAgICAgREVCMyhw cmludGsoImkyYy1lbGVrdG9yLm86IFdyaXRlIDB4JVggMHglMDJYXG4iLCBhZGRyZXNzLCB2YWwg JiAyNTUpKTsKKyAgICAgICBERUIzKHByaW50ayhLRVJOX0RFQlVHICJpMmMtZWxla3Rvci5vOiBX cml0ZSAweCVYIDB4JTAyWFxuIiwgYWRkcmVzcywgdmFsICYgMjU1KSk7CiAKICAgICAgICBzd2l0 Y2ggKG1tYXBwZWQpIHsKICAgICAgICBjYXNlIDA6IC8qIHJlZ3VsYXIgSS9PICovCkBAIC05OSw3 ICs5OSw3IEBACiAgICAgICAgaW50IGFkZHJlc3MgPSBjdGwgPyAoYmFzZSArIDEpIDogYmFzZTsK ICAgICAgICBpbnQgdmFsID0gbW1hcHBlZCA/IHJlYWRiKGFkZHJlc3MpIDogaW5iKGFkZHJlc3Mp OwogCi0gICAgICAgREVCMyhwcmludGsoImkyYy1lbGVrdG9yLm86IFJlYWQgMHglWCAweCUwMlhc biIsIGFkZHJlc3MsIHZhbCkpOworICAgICAgIERFQjMocHJpbnRrKEtFUk5fREVCVUcgImkyYy1l bGVrdG9yLm86IFJlYWQgMHglWCAweCUwMlhcbiIsIGFkZHJlc3MsIHZhbCkpOwogCiAgICAgICAg cmV0dXJuICh2YWwpOwogfQpAQCAtMTQyLDcgKzE0Miw3IEBACiB7CiAgICAgICAgaWYgKCFtbWFw cGVkKSB7CiAgICAgICAgICAgICAgICBpZiAoY2hlY2tfcmVnaW9uKGJhc2UsIDIpIDwgMCApIHsK LSAgICAgICAgICAgICAgICAgICAgICAgcHJpbnRrKCJpMmMtZWxla3Rvci5vOiByZXF1ZXN0ZWQg SS9PIHJlZ2lvbiAoMHglWDoyKSBpcyBpbiB1c2UuXG4iLCBiYXNlKTsKKyAgICAgICAgICAgICAg ICAgICAgICAgcHJpbnRrKEtFUk5fRVJSICJpMmMtZWxla3Rvci5vOiByZXF1ZXN0ZWQgSS9PIHJl Z2lvbiAoMHglWDoyKSBpcyBpbiB1c2UuXG4iLCBiYXNlKTsKICAgICAgICAgICAgICAgICAgICAg ICAgcmV0dXJuIC1FTk9ERVY7CiAgICAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAg ICAgICAgICAgICByZXF1ZXN0X3JlZ2lvbihiYXNlLCAyLCAiaTJjIChpc2EgYnVzIGFkYXB0ZXIp Iik7CkBAIC0xNTAsNyArMTUwLDcgQEAKICAgICAgICB9CiAgICAgICAgaWYgKGlycSA+IDApIHsK ICAgICAgICAgICAgICAgIGlmIChyZXF1ZXN0X2lycShpcnEsIHBjZl9pc2FfaGFuZGxlciwgMCwg IlBDRjg1ODQiLCAwKSA8IDApIHsKLSAgICAgICAgICAgICAgICAgICAgICAgcHJpbnRrKCJpMmMt ZWxla3Rvci5vOiBSZXF1ZXN0IGlycSVkIGZhaWxlZFxuIiwgaXJxKTsKKyAgICAgICAgICAgICAg ICAgICAgICAgcHJpbnRrKEtFUk5fRVJSICJpMmMtZWxla3Rvci5vOiBSZXF1ZXN0IGlycSVkIGZh aWxlZFxuIiwgaXJxKTsKICAgICAgICAgICAgICAgICAgICAgICAgaXJxID0gMDsKICAgICAgICAg ICAgICAgIH0gZWxzZQogICAgICAgICAgICAgICAgICAgICAgICBlbmFibGVfaXJxKGlycSk7CkBA IC0xNTksNyArMTU5LDcgQEAKIH0KIAogCi1zdGF0aWMgdm9pZCBfX2V4aXQgcGNmX2lzYV9leGl0 KHZvaWQpCitzdGF0aWMgdm9pZCBwY2ZfaXNhX2V4aXQodm9pZCkKIHsKICAgICAgICBpZiAoaXJx ID4gMCkgewogICAgICAgICAgICAgICAgZGlzYWJsZV9pcnEoaXJxKTsKQEAgLTIzOCw3ICsyMzgs NyBAQAogICAgICAgICAgICAgICAgICAgICAgICAvKiB5ZWFwLCB3ZSd2ZSBmb3VuZCBjeXByZXNz LCBsZXQncyBjaGVjayBjb25maWcgKi8KICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFwY2lf cmVhZF9jb25maWdfYnl0ZShjeTY5M19kZXYsIDB4NDcsICZjb25maWcpKSB7CiAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgREVC MyhwcmludGsoImkyYy1lbGVrdG9yLm86IGZvdW5kIGN5ODJjNjkzLCBjb25maWcgcmVnaXN0ZXIg MHg0NyA9IDB4JTAyeC5cbiIsIGNvbmZpZykpOworICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIERFQjMocHJpbnRrKEtFUk5fREVCVUcgImkyYy1lbGVrdG9yLm86IGZvdW5kIGN5ODJjNjkz LCBjb25maWcgcmVnaXN0ZXIgMHg0NyA9IDB4JTAyeC5cbiIsIGNvbmZpZykpOwogCiAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgLyogVVAyMDAwIGJvYXJkIGhhcyB0aGlzIHJlZ2lzdGVy IHNldCB0byAweGUxLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBidXQgdGhl IG1vc3Qgc2lnbmlmaWNhbnQgYml0IGFzIHNlZW1zIGNhbiBiZSAKQEAgLTI2MCw3ICsyNjAsNyBA QAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOC4yNSBNSHogKFBD SS80KSBjbG9jawogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHRo aXMgY2FuIGJlIHJlYWQgZnJvbSBjeXByZXNzKSAqLwogICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgY2xvY2sgPSBJMkNfUENGX0NMSyB8IEkyQ19QQ0ZfVFJOUzkwOwotICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJpbnRrKCJpMmMtZWxla3Rvci5v OiBmb3VuZCBBUEkgVVAyMDAwIGxpa2UgYm9hcmQsIHdpbGwgcHJvYmUgUENGODU4NCBsYXRlci5c biIpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJpbnRrKEtFUk5f SU5GTyAiaTJjLWVsZWt0b3IubzogZm91bmQgQVBJIFVQMjAwMCBsaWtlIGJvYXJkLCB3aWxsIHBy b2JlIFBDRjg1ODQgbGF0ZXIuXG4iKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9 CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIH0KQEAgLTI2OSwxMSAr MjY5LDExIEBACiAKICAgICAgICAvKiBzYW5pdHkgY2hlY2tzIGZvciBtbWFwcGVkIEkvTyAqLwog ICAgICAgIGlmIChtbWFwcGVkICYmIGJhc2UgPCAweGM4MDAwKSB7Ci0gICAgICAgICAgICAgICBw cmludGsoImkyYy1lbGVrdG9yLm86IGluY29ycmVjdCBiYXNlIGFkZHJlc3MgKDB4JTBYKSBzcGVj aWZpZWQgZm9yIG1tYXBwZWQgSS9PLlxuIiwgYmFzZSk7CisgICAgICAgICAgICAgICBwcmludGso S0VSTl9FUlIgImkyYy1lbGVrdG9yLm86IGluY29ycmVjdCBiYXNlIGFkZHJlc3MgKDB4JTBYKSBz cGVjaWZpZWQgZm9yIG1tYXBwZWQgSS9PLlxuIiwgYmFzZSk7CiAgICAgICAgICAgICAgICByZXR1 cm4gLUVOT0RFVjsKICAgICAgICB9CiAKLSAgICAgICBwcmludGsoImkyYy1lbGVrdG9yLm86IGky YyBwY2Y4NTg0LWlzYSBhZGFwdGVyIG1vZHVsZVxuIik7CisgICAgICAgcHJpbnRrKEtFUk5fSU5G TyAiaTJjLWVsZWt0b3IubzogaTJjIHBjZjg1ODQtaXNhIGFkYXB0ZXIgbW9kdWxlIHZlcnNpb24g JXMgKCVzKVxuIiwgSTJDX1ZFUlNJT04sIEkyQ19EQVRFKTsKIAogICAgICAgIGlmIChiYXNlID0g MCkgewogICAgICAgICAgICAgICAgYmFzZSA9IERFRkFVTFRfQkFTRTsKQEAgLTI4MywxMyArMjgz LDE1IEBACiAgICAgICAgaW5pdF93YWl0cXVldWVfaGVhZCgmcGNmX3dhaXQpOwogI2VuZGlmCiAg ICAgICAgaWYgKHBjZl9pc2FfaW5pdCgpID0gMCkgewotICAgICAgICAgICAgICAgaWYgKGkyY19w Y2ZfYWRkX2J1cygmcGNmX2lzYV9vcHMpIDwgMCkKKyAgICAgICAgICAgICAgIGlmIChpMmNfcGNm X2FkZF9idXMoJnBjZl9pc2Ffb3BzKSA8IDApIHsKKyAgICAgICAgICAgICAgICAgICAgICAgcGNm X2lzYV9leGl0KCk7CiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAtRU5PREVWOworICAg ICAgICAgICAgICAgfQogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICByZXR1cm4gLUVO T0RFVjsKICAgICAgICB9CiAgICAgICAgCi0gICAgICAgcHJpbnRrKCJpMmMtZWxla3Rvci5vOiBm b3VuZCBkZXZpY2UgYXQgJSN4LlxuIiwgYmFzZSk7CisgICAgICAgcHJpbnRrKEtFUk5fRVJSICJp MmMtZWxla3Rvci5vOiBmb3VuZCBkZXZpY2UgYXQgJSN4LlxuIiwgYmFzZSk7CiAKICAgICAgICBy ZXR1cm4gMDsKIH0KQEAgLTMwMCw3ICszMDIsOSBAQAogI2lmZGVmIE1PRFVMRQogTU9EVUxFX0FV VEhPUigiSGFucyBCZXJnbHVuZCA8aGJAc3BhY2V0ZWMubm8+Iik7CiBNT0RVTEVfREVTQ1JJUFRJ T04oIkkyQy1CdXMgYWRhcHRlciByb3V0aW5lcyBmb3IgUENGODU4NCBJU0EgYnVzIGFkYXB0ZXIi KTsKKyNpZmRlZiBNT0RVTEVfTElDRU5TRQogTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOworI2VuZGlm CiAKIE1PRFVMRV9QQVJNKGJhc2UsICJpIik7CiBNT0RVTEVfUEFSTShpcnEsICJpIik7Ci0tLSBs aW51eC9kcml2ZXJzL2kyYy9pMmMtZWx2LmMub3JpZyAgICAyMDAyLTA1LTA5IDE4OjI1OjMwLjAw MDAwMDAwMCAtMDQwMAorKysgbGludXgvZHJpdmVycy9pMmMvaTJjLWVsdi5jIDIwMDItMDUtMTQg MTg6MDE6MjUuMDAwMDAwMDAwIC0wNDAwCkBAIC0yMSw3ICsyMSw3IEBACiAvKiBXaXRoIHNvbWUg Y2hhbmdlcyBmcm9tIEt5P3N0aSBNP2xra2kgPGttYWxra2lAY2MuaHV0LmZpPiBhbmQgZXZlbgog ICAgRnJvZG8gTG9vaWphYXJkIDxmcm9kb2xAZGRzLm5sPiAqLwogCi0vKiAkSWQ6IGkyYy1lbHYu Yyx2IDEuMTcgMjAwMS8wNy8yOSAwMjo0NDoyNSBtZHMgRXhwICQgKi8KKy8qICRJZDogaTJjLWVs di5jLHYgMS4yMSAyMDAxLzExLzE5IDE4OjQ1OjAyIG1kcyBFeHAgJCAqLwogCiAjaW5jbHVkZSA8 bGludXgva2VybmVsLmg+CiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CkBAIC0yOSw5ICsyOSw3 IEBACiAjaW5jbHVkZSA8bGludXgvc2xhYi5oPgogI2luY2x1ZGUgPGxpbnV4L3ZlcnNpb24uaD4K ICNpbmNsdWRlIDxsaW51eC9pbml0Lmg+Ci0KICNpbmNsdWRlIDxhc20vdWFjY2Vzcy5oPgotCiAj aW5jbHVkZSA8bGludXgvaW9wb3J0Lmg+CiAjaW5jbHVkZSA8YXNtL2lvLmg+CiAjaW5jbHVkZSA8 bGludXgvZXJybm8uaD4KQEAgLTk1LDE0ICs5MywxNCBAQAogICAgICAgIH0gZWxzZSB7CiAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRlc3QgZm9yIEVM ViBhZGFwLiAgICovCiAgICAgICAgICAgICAgICBpZiAoaW5iKGJhc2UrMSkgJiAweDgwKSB7ICAg ICAgIC8qIEJVU1kgc2hvdWxkIGJlIGhpZ2ggICovCi0gICAgICAgICAgICAgICAgICAgICAgIERF QklOSVQocHJpbnRrKCJpMmMtZWx2Lm86IEJ1c3kgd2FzIGxvdy5cbiIpKTsKKyAgICAgICAgICAg ICAgICAgICAgICAgREVCSU5JVChwcmludGsoS0VSTl9ERUJVRyAiaTJjLWVsdi5vOiBCdXN5IHdh cyBsb3cuXG4iKSk7CiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAtRU5PREVWOwogICAg ICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICAgICAgICAgb3V0YigweDBjLGJh c2UrMik7ICAgICAgLyogU0xDVCBhdWYgbG93ICAgICAgICAgKi8KICAgICAgICAgICAgICAgICAg ICAgICAgdWRlbGF5KDQwMCk7CiAgICAgICAgICAgICAgICAgICAgICAgIGlmICggIShpbmIoYmFz ZSsxKSAmJiAweDEwKSApIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvdXRiKDB4 MDQsYmFzZSsyKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBERUJJTklUKHByaW50 aygiaTJjLWVsdi5vOiBTZWxlY3Qgd2FzIGhpZ2guXG4iKSk7CisgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgREVCSU5JVChwcmludGsoS0VSTl9ERUJVRyAiaTJjLWVsdi5vOiBTZWxlY3Qg d2FzIGhpZ2guXG4iKSk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIC1F Tk9ERVY7CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIH0KQEAgLTEx NSw3ICsxMTMsNyBAQAogICAgICAgIHJldHVybiAwOwogfQogCi1zdGF0aWMgdm9pZCBfX2V4aXQg Yml0X2Vsdl9leGl0KHZvaWQpCitzdGF0aWMgdm9pZCBiaXRfZWx2X2V4aXQodm9pZCkKIHsKICAg ICAgICByZWxlYXNlX3JlZ2lvbiggYmFzZSAsIChiYXNlID0gMHgzYmMpPyAzIDogOCApOwogfQpA QCAtMTcwLDcgKzE2OCw3IEBACiAKIGludCBfX2luaXQgaTJjX2JpdGVsdl9pbml0KHZvaWQpCiB7 Ci0gICAgICAgcHJpbnRrKCJpMmMtZWx2Lm86IGkyYyBFTFYgcGFyYWxsZWwgcG9ydCBhZGFwdGVy IG1vZHVsZVxuIik7CisgICAgICAgcHJpbnRrKEtFUk5fSU5GTyAiaTJjLWVsdi5vOiBpMmMgRUxW IHBhcmFsbGVsIHBvcnQgYWRhcHRlciBtb2R1bGUgdmVyc2lvbiAlcyAoJXMpXG4iLCBJMkNfVkVS U0lPTiwgSTJDX0RBVEUpOwogICAgICAgIGlmIChiYXNlPTApIHsKICAgICAgICAgICAgICAgIC8q IHByb2JlIHNvbWUgdmFsdWVzICovCiAgICAgICAgICAgICAgICBiYXNl3kZBVUxUX0JBU0U7CkBA IC0xOTAsNyArMTg4LDcgQEAKICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIC1FTk9ERVY7 CiAgICAgICAgICAgICAgICB9CiAgICAgICAgfQotICAgICAgIHByaW50aygiaTJjLWVsdi5vOiBm b3VuZCBkZXZpY2UgYXQgJSN4LlxuIixiYXNlKTsKKyAgICAgICBwcmludGsoS0VSTl9ERUJVRyAi aTJjLWVsdi5vOiBmb3VuZCBkZXZpY2UgYXQgJSN4LlxuIixiYXNlKTsKICAgICAgICByZXR1cm4g MDsKIH0KIApAQCAtMjAwLDcgKzE5OCw5IEBACiAjaWZkZWYgTU9EVUxFCiBNT0RVTEVfQVVUSE9S KCJTaW1vbiBHLiBWb2dsIDxzaW1vbkB0ay51bmktbGluei5hYy5hdD4iKTsKIE1PRFVMRV9ERVND UklQVElPTigiSTJDLUJ1cyBhZGFwdGVyIHJvdXRpbmVzIGZvciBFTFYgcGFyYWxsZWwgcG9ydCBh ZGFwdGVyIik7CisjaWZkZWYgTU9EVUxFX0xJQ0VOU0UKIE1PRFVMRV9MSUNFTlNFKCJHUEwiKTsK KyNlbmRpZgogCiAKIE1PRFVMRV9QQVJNKGJhc2UsICJpIik7Ci0tLSBsaW51eC9kcml2ZXJzL2ky Yy9pMmMtcGNmLWVwcC5jLm9yaWcgICAgICAgIDE5NjktMTItMzEgMTk6MDA6MDAuMDAwMDAwMDAw IC0wNTAwCisrKyBsaW51eC9kcml2ZXJzL2kyYy9pMmMtcGNmLWVwcC5jICAgICAyMDAyLTA1LTE0 IDE4OjAxOjUxLjAwMDAwMDAwMCAtMDQwMApAQCAtMCwwICsxLDMxNSBAQAorLyogLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLSAqLworLyogaTJjLXBjZi1lcHAuYyBpMmMtaHcgYWNjZXNzIGZvciBQQ0Y4NTg0IHN0 eWxlIEVQUCBwYXJhbGxlbCBwb3J0IGFkYXB0ZXJzICAqLworLyogLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAq LworCisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8bGludXgvaW9wb3J0Lmg+ CisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KKyNp bmNsdWRlIDxsaW51eC9zbGFiLmg+CisjaW5jbHVkZSA8bGludXgvdmVyc2lvbi5oPgorI2luY2x1 ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxsaW51eC9wYXJwb3J0Lmg+CisjaW5jbHVkZSA8 YXNtL2lycS5oPgorI2luY2x1ZGUgPGFzbS9pby5oPgorCisjaW5jbHVkZSA8bGludXgvaTJjLmg+ CisjaW5jbHVkZSA8bGludXgvaTJjLWFsZ28tcGNmLmg+CisjaW5jbHVkZSA8bGludXgvaTJjLXBj Zjg1ODQuaD4KKworc3RydWN0ICBpMmNfcGNmX2VwcCB7CisgIGludCBwZV9iYXNlOworICBpbnQg cGVfaXJxOworICBpbnQgcGVfY2xvY2s7CisgIGludCBwZV9vd247Cit9IDsKKworI2RlZmluZSBE RUZBVUxUX0JBU0UgMHgzNzgKKyNkZWZpbmUgREVGQVVMVF9JUlEgICAgICA3CisjZGVmaW5lIERF RkFVTFRfQ0xPQ0sgMHgxYworI2RlZmluZSBERUZBVUxUX09XTiAgIDB4NTUKKworc3RhdGljIGlu dCBiYXNlICA9IDA7CitzdGF0aWMgaW50IGlycSAgID0gMDsKK3N0YXRpYyBpbnQgY2xvY2sgPSAw Oworc3RhdGljIGludCBvd24gICA9IDA7CitzdGF0aWMgaW50IGkyY19kZWJ1Zz0wOworc3RhdGlj IHN0cnVjdCBpMmNfcGNmX2VwcCBncGU7CisjaWYgKExJTlVYX1ZFUlNJT05fQ09ERSA8IDB4MDIw MzAxKQorc3RhdGljIHN0cnVjdCB3YWl0X3F1ZXVlICpwY2Zfd2FpdCA9IE5VTEw7CisjZWxzZQor c3RhdGljIHdhaXRfcXVldWVfaGVhZF90IHBjZl93YWl0OworI2VuZGlmCitzdGF0aWMgaW50IHBj Zl9wZW5kaW5nOworCisvKiAtLS0tLSBnbG9iYWwgZGVmaW5lcyAtLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAgICAgICAgKi8KKyNkZWZpbmUgREVCKHgpIGlm IChpMmNfZGVidWc+PTEpIHgKKyNkZWZpbmUgREVCMih4KSBpZiAoaTJjX2RlYnVnPj0yKSB4Cisj ZGVmaW5lIERFQjMoeCkgaWYgKGkyY19kZWJ1Zz49MykgeAorI2RlZmluZSBERUJFKHgpICAgICAg ICB4ICAgICAgIC8qIGVycm9yIG1lc3NhZ2VzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICovCisKKy8qIC0tLSBDb252ZW5pZW5jZSBkZWZpbmVzIGZvciB0aGUgRVBQL1NQUCBwb3J0OiAg ICAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgQkFTRSAgICgoc3RydWN0IGkyY19wY2Zf ZXBwICopKGRhdGEpKS0+cGVfYmFzZQorI2RlZmluZSBEQVRBICAgQkFTRSAgICAgICAgICAgICAg ICAgICAgLyogU1BQIGRhdGEgcG9ydCAqLworI2RlZmluZSBTVEFUICAgKEJBU0UrMSkgICAgICAg ICAgICAgICAgLyogU1BQIHN0YXR1cyBwb3J0ICovCisjZGVmaW5lIENUUkwgICAoQkFTRSsyKSAg ICAgICAgICAgICAgICAvKiBTUFAgY29udHJvbCBwb3J0ICovCisjZGVmaW5lIEVBREQgICAoQkFT RSszKSAgICAgICAgICAgICAgICAvKiBFUFAgYWRkcmVzcyBwb3J0ICovCisjZGVmaW5lIEVEQVQg ICAoQkFTRSs0KSAgICAgICAgICAgICAgICAvKiBFUFAgZGF0YSBwb3J0ICovCisKKy8qIC0tLS0t IGxvY2FsIGZ1bmN0aW9ucyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tICAgICAgICAqLworCitzdGF0aWMgdm9pZCBwY2ZfZXBwX3NldGJ5dGUodm9pZCAqZGF0 YSwgaW50IGN0bCwgaW50IHZhbCkKK3sKKyAgaWYgKGN0bCkgeworICAgIGlmIChncGUucGVfaXJx ID4gMCkgeworICAgICAgREVCMyhwcmludGsoS0VSTl9ERUJVRyAiaTJjLXBjZi1lcHAubzogV3Jp dGUgY29udHJvbCAweCV4XG4iLAorICAgICAgICAgICAgICAgICB2YWx8STJDX1BDRl9FTkkpKTsK KyAgICAgIC8vIHNldCBBMCBwaW4gSElHSAorICAgICAgb3V0YihpbmIoQ1RSTCkgfCBQQVJQT1JU X0NPTlRST0xfSU5JVCwgQ1RSTCk7CisgICAgICAvLyBERUIzKHByaW50ayhLRVJOX0RFQlVHICJp MmMtcGNmLWVwcC5vOiBDVFJMIHBvcnQgPSAweCV4XG4iLCBpbmIoQ1RSTCkpKTsKKyAgICAgIC8v IERFQjMocHJpbnRrKEtFUk5fREVCVUcgImkyYy1wY2YtZXBwLm86IFNUQVQgcG9ydCA9IDB4JXhc biIsIGluYihTVEFUKSkpOworICAgICAgCisgICAgICAvLyBFUFAgd3JpdGUgZGF0YSBjeWNsZQor ICAgICAgb3V0Yih2YWwgfCBJMkNfUENGX0VOSSwgRURBVCk7CisgICAgfSBlbHNlIHsKKyAgICAg IERFQjMocHJpbnRrKEtFUk5fREVCVUcgImkyYy1wY2YtZXBwLm86IFdyaXRlIGNvbnRyb2wgMHgl eFxuIiwgdmFsKSk7CisgICAgICAvLyBzZXQgQTAgcGluIEhJR0gKKyAgICAgIG91dGIoaW5iKENU UkwpIHwgUEFSUE9SVF9DT05UUk9MX0lOSVQsIENUUkwpOworICAgICAgb3V0Yih2YWwsIENUUkwp OworICAgIH0KKyAgfSBlbHNlIHsKKyAgICBERUIzKHByaW50ayhLRVJOX0RFQlVHICJpMmMtcGNm LWVwcC5vOiBXcml0ZSBkYXRhIDB4JXhcbiIsIHZhbCkpOworICAgIC8vIHNldCBBMCBwaW4gTE8K KyAgICBvdXRiKGluYihDVFJMKSAmIH5QQVJQT1JUX0NPTlRST0xfSU5JVCwgQ1RSTCk7CisgICAg Ly8gREVCMyhwcmludGsoS0VSTl9ERUJVRyAiaTJjLXBjZi1lcHAubzogQ1RSTCBwb3J0ID0gMHgl eFxuIiwgaW5iKENUUkwpKSk7CisgICAgLy8gREVCMyhwcmludGsoS0VSTl9ERUJVRyAiaTJjLXBj Zi1lcHAubzogU1RBVCBwb3J0ID0gMHgleFxuIiwgaW5iKFNUQVQpKSk7CisgICAgb3V0Yih2YWws IEVEQVQpOworICB9Cit9CisKK3N0YXRpYyBpbnQgcGNmX2VwcF9nZXRieXRlKHZvaWQgKmRhdGEs IGludCBjdGwpCit7CisgIGludCB2YWw7CisKKyAgaWYgKGN0bCkgeworICAgIC8vIHNldCBBMCBw aW4gSElHSAorICAgIG91dGIoaW5iKENUUkwpIHwgUEFSUE9SVF9DT05UUk9MX0lOSVQsIENUUkwp OworICAgIHZhbCA9IGluYihFREFUKTsKKyAgICBERUIzKHByaW50ayhLRVJOX0RFQlVHICJpMmMt cGNmLWVwcC5vOiBSZWFkIGNvbnRyb2wgMHgleFxuIiwgdmFsKSk7CisgIH0gZWxzZSB7CisgICAg Ly8gc2V0IEEwIHBpbiBMT1cKKyAgICBvdXRiKGluYihDVFJMKSAmIH5QQVJQT1JUX0NPTlRST0xf SU5JVCwgQ1RSTCk7CisgICAgdmFsID0gaW5iKEVEQVQpOworICAgIERFQjMocHJpbnRrKEtFUk5f REVCVUcgImkyYy1wY2YtZXBwLm86IFJlYWQgZGF0YSAweCV4XG4iLCB2YWwpKTsKKyAgfQorICBy ZXR1cm4gKHZhbCk7Cit9CisKK3N0YXRpYyBpbnQgcGNmX2VwcF9nZXRvd24odm9pZCAqZGF0YSkK K3sKKyAgcmV0dXJuIChncGUucGVfb3duKTsKK30KKworCitzdGF0aWMgaW50IHBjZl9lcHBfZ2V0 Y2xvY2sodm9pZCAqZGF0YSkKK3sKKyAgcmV0dXJuIChncGUucGVfY2xvY2spOworfQorCisjaWYg MAorc3RhdGljIHZvaWQgcGNmX2VwcF9zbGVlcCh1bnNpZ25lZCBsb25nIHRpbWVvdXQpCit7Cisg IHNjaGVkdWxlX3RpbWVvdXQoIHRpbWVvdXQgKiBIWik7Cit9CisjZW5kaWYKKworc3RhdGljIHZv aWQgcGNmX2VwcF93YWl0Zm9ycGluKHZvaWQpIHsKKyAgaW50IHRpbWVvdXQgPSAxMDsKKworICBp ZiAoZ3BlLnBlX2lycSA+IDApIHsKKyAgICBjbGkoKTsKKyAgICBpZiAocGNmX3BlbmRpbmcgPSAw KSB7CisgICAgICBpbnRlcnJ1cHRpYmxlX3NsZWVwX29uX3RpbWVvdXQoJnBjZl93YWl0LCB0aW1l b3V0KkhaKTsKKyAgICAgIC8vdWRlbGF5KDEwMCk7CisgICAgfSBlbHNlIHsKKyAgICAgIHBjZl9w ZW5kaW5nID0gMDsKKyAgICB9CisgICAgc3RpKCk7CisgIH0gZWxzZSB7CisgICAgdWRlbGF5KDEw MCk7CisgIH0KK30KKworc3RhdGljIHZvaWQgcGNmX2VwcF9oYW5kbGVyKGludCB0aGlzX2lycSwg dm9pZCAqZGV2X2lkLCBzdHJ1Y3QgcHRfcmVncyAqcmVncykgeworICBwY2ZfcGVuZGluZyA9IDE7 CisgIHdha2VfdXBfaW50ZXJydXB0aWJsZSgmcGNmX3dhaXQpOworICBERUIzKHByaW50ayhLRVJO X0RFQlVHICJpMmMtcGNmLWVwcC5vOiBpbiBpbnRlcnJ1cHQgaGFuZGxlci5cbiIpKTsKK30KKwor CitzdGF0aWMgaW50IHBjZl9lcHBfaW5pdCh2b2lkICpkYXRhKQoreworICBpZiAoY2hlY2tfcmVn aW9uKGdwZS5wZV9iYXNlLCA1KSA8IDAgKSB7CisgICAgCisgICAgcHJpbnRrKEtFUk5fV0FSTklO RyAiQ291bGQgbm90IHJlcXVlc3QgcG9ydCByZWdpb24gd2l0aCBiYXNlIDB4JXhcbiIsIGdwZS5w ZV9iYXNlKTsKKyAgICByZXR1cm4gLUVOT0RFVjsKKyAgfSBlbHNlIHsKKyAgICByZXF1ZXN0X3Jl Z2lvbihncGUucGVfYmFzZSwgNSwgImkyYyAoRVBQIHBhcmFsbGVsIHBvcnQgYWRhcHRlcikiKTsK KyAgfQorCisgIERFQjMocHJpbnRrKEtFUk5fREVCVUcgImkyYy1wY2YtZXBwLm86IGluaXQgc3Rh dHVzIHBvcnQgPSAweCV4XG4iLCBpbmIoMHgzNzkpKSk7CisgIAorICBpZiAoZ3BlLnBlX2lycSA+ IDApIHsKKyAgICBpZiAocmVxdWVzdF9pcnEoZ3BlLnBlX2lycSwgcGNmX2VwcF9oYW5kbGVyLCAw LCAiUENGODU4NCIsIDApIDwgMCkgeworICAgICAgcHJpbnRrKEtFUk5fTk9USUNFICJpMmMtcGNm LWVwcC5vOiBSZXF1ZXN0IGlycSVkIGZhaWxlZFxuIiwgZ3BlLnBlX2lycSk7CisgICAgICBncGUu cGVfaXJxID0gMDsKKyAgICB9IGVsc2UKKyAgICAgIGRpc2FibGVfaXJxKGdwZS5wZV9pcnEpOwor ICAgICAgZW5hYmxlX2lycShncGUucGVfaXJxKTsKKyAgfQorICAvLyBFUFAgbW9kZSBpbml0aWFs aXplCisgIC8vIGVuYWJsZSBpbnRlcnJ1cHQgZnJvbSBuSU5UUiBwaW4KKyAgb3V0YihpbmIoQ1RS TCl8MHgxNCwgQ1RSTCk7CisgIC8vIGNsZWFyIEVSUk9SIGJpdCBvZiBTVEFUCisgIG91dGIoaW5i KFNUQVQpfDB4MDEsIFNUQVQpOworICBvdXRiKGluYihTVEFUKSZ+MHgwMSxTVEFUKTsKKyAgCisg IHJldHVybiAwOworfQorCisKK3N0YXRpYyB2b2lkIHBjZl9lcHBfZXhpdCh2b2lkKQoreworICBp ZiAoZ3BlLnBlX2lycSA+IDApIHsKKyAgICBkaXNhYmxlX2lycShncGUucGVfaXJxKTsKKyAgICBm cmVlX2lycShncGUucGVfaXJxLCAwKTsKKyAgfQorICByZWxlYXNlX3JlZ2lvbihncGUucGVfYmFz ZSAsIDUpOworfQorCisKK3N0YXRpYyBpbnQgcGNmX2VwcF9yZWcoc3RydWN0IGkyY19jbGllbnQg KmNsaWVudCkKK3sKKyAgcmV0dXJuIDA7Cit9CisKKworc3RhdGljIGludCBwY2ZfZXBwX3VucmVn KHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQpCit7CisgIHJldHVybiAwOworfQorCitzdGF0aWMg dm9pZCBwY2ZfZXBwX2luY191c2Uoc3RydWN0IGkyY19hZGFwdGVyICphZGFwKQoreworI2lmZGVm IE1PRFVMRQorICBNT0RfSU5DX1VTRV9DT1VOVDsKKyNlbmRpZgorfQorCitzdGF0aWMgdm9pZCBw Y2ZfZXBwX2RlY191c2Uoc3RydWN0IGkyY19hZGFwdGVyICphZGFwKQoreworI2lmZGVmIE1PRFVM RQorICBNT0RfREVDX1VTRV9DT1VOVDsKKyNlbmRpZgorfQorCisKKy8qIC0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LQorICogRW5jYXBzdWxhdGUgdGhlIGFib3ZlIGZ1bmN0aW9ucyBpbiB0aGUgY29ycmVjdCBvcGVy YXRpb25zIHN0cnVjdHVyZS4KKyAqIFRoaXMgaXMgb25seSBkb25lIHdoZW4gbW9yZSB0aGFuIG9u ZSBoYXJkd2FyZSBhZGFwdGVyIGlzIHN1cHBvcnRlZC4KKyAqLworc3RhdGljIHN0cnVjdCBpMmNf YWxnb19wY2ZfZGF0YSBwY2ZfZXBwX2RhdGEgPSB7CisgIE5VTEwsCisgIHBjZl9lcHBfc2V0Ynl0 ZSwKKyAgcGNmX2VwcF9nZXRieXRlLAorICBwY2ZfZXBwX2dldG93biwKKyAgcGNmX2VwcF9nZXRj bG9jaywKKyAgcGNmX2VwcF93YWl0Zm9ycGluLAorICA4MCwgODAsIDEwMCwgICAgICAgICAvKiAg ICAgIHdhaXRzLCB0aW1lb3V0ICovCit9OworCitzdGF0aWMgc3RydWN0IGkyY19hZGFwdGVyIHBj Zl9lcHBfb3BzID0geworICAiUENGODU4NCBFUFAgYWRhcHRlciIsCisgIEkyQ19IV19QX0xQLAor ICBOVUxMLAorICAmcGNmX2VwcF9kYXRhLAorICBwY2ZfZXBwX2luY191c2UsCisgIHBjZl9lcHBf ZGVjX3VzZSwKKyAgcGNmX2VwcF9yZWcsCisgIHBjZl9lcHBfdW5yZWcsCit9OworCitpbnQgX19p bml0IGkyY19wY2ZlcHBfaW5pdCh2b2lkKSAKK3sKKyAgc3RydWN0IGkyY19wY2ZfZXBwICpwZXBw ID0gJmdwZTsKKworICBwcmludGsoS0VSTl9ERUJVRyAiaTJjLXBjZi1lcHAubzogaTJjIHBjZjg1 ODQtZXBwIGFkYXB0ZXIgbW9kdWxlIHZlcnNpb24gJXMgKCVzKVxuIiwgSTJDX1ZFUlNJT04sIEky Q19EQVRFKTsKKyAgaWYgKGJhc2UgPSAwKQorICAgIHBlcHAtPnBlX2Jhc2UgPSBERUZBVUxUX0JB U0U7CisgIGVsc2UKKyAgICBwZXBwLT5wZV9iYXNlID0gYmFzZTsKKworICBpZiAoaXJxID0gMCkK KyAgICBwZXBwLT5wZV9pcnEgPSBERUZBVUxUX0lSUTsKKyAgZWxzZSBpZiAoaXJxPDApIHsKKyAg ICAvLyBzd2l0Y2ggb2ZmIGlycQorICAgIHBlcHAtPnBlX2lycT0wOworICB9IGVsc2UgeworICAg IHBlcHAtPnBlX2lycSA9IGlycTsKKyAgfQorICBpZiAoY2xvY2sgPSAwKQorICAgIHBlcHAtPnBl X2Nsb2NrID0gREVGQVVMVF9DTE9DSzsKKyAgZWxzZQorICAgIHBlcHAtPnBlX2Nsb2NrID0gY2xv Y2s7CisKKyAgaWYgKG93biA9IDApCisgICAgcGVwcC0+cGVfb3duID0gREVGQVVMVF9PV047Cisg IGVsc2UKKyAgICBwZXBwLT5wZV9vd24gPSBvd247CisKKyAgcGNmX2VwcF9kYXRhLmRhdGEgPSAo dm9pZCAqKXBlcHA7CisjaWYgKExJTlVYX1ZFUlNJT05fQ09ERSA+PSAweDAyMDMwMSkKKyAgaW5p dF93YWl0cXVldWVfaGVhZCgmcGNmX3dhaXQpOworI2VuZGlmCisgIGlmIChwY2ZfZXBwX2luaXQo cGVwcCkgPSAwKSB7CisgICAgaW50IHJldDsKKyAgICBpZiAoIChyZXQgPSBpMmNfcGNmX2FkZF9i dXMoJnBjZl9lcHBfb3BzKSkgPCAwKSB7CisgICAgICBwcmludGsoS0VSTl9XQVJOSU5HICJpMmNf cGNmX2FkZF9idXMgY2F1c2VkIGFuIGVycm9yOiAlZFxuIixyZXQpOworICAgICAgcmVsZWFzZV9y ZWdpb24ocGVwcC0+cGVfYmFzZSAsIDUpOworICAgICAgcmV0dXJuIHJldDsKKyAgICB9CisgIH0g ZWxzZSB7CisgICAgCisgICAgcmV0dXJuIC1FTk9ERVY7CisgIH0KKyAgcHJpbnRrKEtFUk5fREVC VUcgImkyYy1wY2YtZXBwLm86IGZvdW5kIGRldmljZSBhdCAlI3guXG4iLCBwZXBwLT5wZV9iYXNl KTsKKyAgcmV0dXJuIDA7Cit9CisKKworRVhQT1JUX05PX1NZTUJPTFM7CisKKyNpZmRlZiBNT0RV TEUKK01PRFVMRV9BVVRIT1IoIkhhbnMgQmVyZ2x1bmQgPGhiQHNwYWNldGVjLm5vPiBcbiBtb2Rp ZmllZCBieSBSeW9zdWtlIFRhamltYSA8cm9za0Bqc2sudC51LXRva3lvLmFjLmpwPiIpOworTU9E VUxFX0RFU0NSSVBUSU9OKCJJMkMtQnVzIGFkYXB0ZXIgcm91dGluZXMgZm9yIFBDRjg1ODQgRVBQ IHBhcmFsbGVsIHBvcnQgYWRhcHRlciIpOworCitNT0RVTEVfUEFSTShiYXNlLCAiaSIpOworTU9E VUxFX1BBUk0oaXJxLCAiaSIpOworTU9EVUxFX1BBUk0oY2xvY2ssICJpIik7CitNT0RVTEVfUEFS TShvd24sICJpIik7CitNT0RVTEVfUEFSTShpMmNfZGVidWcsICJpIik7CisKK2ludCBpbml0X21v ZHVsZSh2b2lkKSAKK3sKKyAgcmV0dXJuIGkyY19wY2ZlcHBfaW5pdCgpOworfQorCit2b2lkIGNs ZWFudXBfbW9kdWxlKHZvaWQpIAoreworICBpMmNfcGNmX2RlbF9idXMoJnBjZl9lcHBfb3BzKTsK KyAgcGNmX2VwcF9leGl0KCk7Cit9CisKKyNlbmRpZgorCisKLS0tIC9kZXYvbnVsbCAgIDE5OTQt MDctMTcgMTk6NDY6MTguMDAwMDAwMDAwIC0wNDAwCisrKyBsaW51eC9pbmNsdWRlL2xpbnV4L2ky Yy1wY2Y4NTg0LmggICAyMDAxLTEwLTAxIDIwOjA3OjM3LjAwMDAwMDAwMCAtMDQwMApAQCAtMCww ICsxLDc4IEBACisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworLyogaTJjLXBjZjg1ODQuaDogUENGIDg1ODQg Z2xvYmFsIGRlZmluZXMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0gKi8KKy8qICAgQ29weXJpZ2h0IChDKSAxOTk2IFNpbW9uIEcuIFZvZ2wKKyAgICAgICAg ICAgICAgICAgICAxOTk5IEhhbnMgQmVyZ2x1bmQKKworICAgIFRoaXMgcHJvZ3JhbSBpcyBmcmVl IHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgICAgaXQg dW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJs aXNoZWQgYnkKKyAgICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lv biAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICAgIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZl cnNpb24uCisKKyAgICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhh dCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhv dXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICAgIE1FUkNIQU5UQUJJTElUWSBvciBG SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAgICBHTlUgR2VuZXJh bCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisgICAgWW91IHNob3VsZCBoYXZl IHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAgICBh bG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2Fy ZQorICAgIEZvdW5kYXRpb24sIEluYy4sIDY3NSBNYXNzIEF2ZSwgQ2FtYnJpZGdlLCBNQSAwMjEz OSwgVVNBLiAgICAgICAgICAqLworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gICAgICAgICovCisKKy8qIFdpdGgg c29tZSBjaGFuZ2VzIGZyb20gRnJvZG8gTG9vaWphYXJkIDxmcm9kb2xAZGRzLm5sPiAqLworCisv KiAkSWQ6IGkyYy1wY2Y4NTg0LmgsdiAxLjQgMjAwMS8xMC8wMiAwMDowNzozNyBtZHMgRXhwICQg Ki8KKworI2lmbmRlZiBJMkNfUENGODU4NF9ICisjZGVmaW5lIEkyQ19QQ0Y4NTg0X0ggMQorCisv KiAtLS0tLSBDb250cm9sIHJlZ2lzdGVyIGJpdHMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLSAgICAgICAgKi8KKyNkZWZpbmUgSTJDX1BDRl9QSU4gICAgMHg4MAorI2Rl ZmluZSBJMkNfUENGX0VTTyAgICAweDQwCisjZGVmaW5lIEkyQ19QQ0ZfRVMxICAgIDB4MjAKKyNk ZWZpbmUgSTJDX1BDRl9FUzIgICAgMHgxMAorI2RlZmluZSBJMkNfUENGX0VOSSAgICAweDA4Cisj ZGVmaW5lIEkyQ19QQ0ZfU1RBICAgIDB4MDQKKyNkZWZpbmUgSTJDX1BDRl9TVE8gICAgMHgwMgor I2RlZmluZSBJMkNfUENGX0FDSyAgICAweDAxCisKKyNkZWZpbmUgSTJDX1BDRl9TVEFSVCAgICAo STJDX1BDRl9QSU4gfCBJMkNfUENGX0VTTyB8IEkyQ19QQ0ZfU1RBIHwgSTJDX1BDRl9BQ0spCisj ZGVmaW5lIEkyQ19QQ0ZfU1RPUCAgICAgKEkyQ19QQ0ZfUElOIHwgSTJDX1BDRl9FU08gfCBJMkNf UENGX1NUTyB8IEkyQ19QQ0ZfQUNLKQorI2RlZmluZSBJMkNfUENGX1JFUFNUQVJUICggICAgICAg ICAgICAgIEkyQ19QQ0ZfRVNPIHwgSTJDX1BDRl9TVEEgfCBJMkNfUENGX0FDSykKKyNkZWZpbmUg STJDX1BDRl9JRExFICAgICAoSTJDX1BDRl9QSU4gfCBJMkNfUENGX0VTTyAgICAgICAgICAgICAg IHwgSTJDX1BDRl9BQ0spCisKKy8qIC0tLS0tIFN0YXR1cyByZWdpc3RlciBiaXRzIC0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICAgICAgICAqLworLyojZGVmaW5lIEky Q19QQ0ZfUElOICAweDgwICAgIGFzIGFib3ZlKi8KKworI2RlZmluZSBJMkNfUENGX0lOSSAweDQw ICAgLyogMSBpZiBub3QgaW5pdGlhbGl6ZWQgKi8KKyNkZWZpbmUgSTJDX1BDRl9TVFMgMHgyMAor I2RlZmluZSBJMkNfUENGX0JFUiAweDEwCisjZGVmaW5lIEkyQ19QQ0ZfQUQwIDB4MDgKKyNkZWZp bmUgSTJDX1BDRl9MUkIgMHgwOAorI2RlZmluZSBJMkNfUENGX0FBUyAweDA0CisjZGVmaW5lIEky Q19QQ0ZfTEFCIDB4MDIKKyNkZWZpbmUgSTJDX1BDRl9CQiAgMHgwMQorCisvKiAtLS0tLSBDaGlw IGNsb2NrIGZyZXF1ZW5jaWVzIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LSAgICAgICAgKi8KKyNkZWZpbmUgSTJDX1BDRl9DTEszICAgMHgwMAorI2RlZmluZSBJMkNfUENG X0NMSzQ0MyAweDEwCisjZGVmaW5lIEkyQ19QQ0ZfQ0xLNiAgIDB4MTQKKyNkZWZpbmUgSTJDX1BD Rl9DTEsgICAgMHgxOAorI2RlZmluZSBJMkNfUENGX0NMSzEyICAweDFjCisKKy8qIC0tLS0tIHRy YW5zbWlzc2lvbiBmcmVxdWVuY2llcyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tICAgICAgICAqLworI2RlZmluZSBJMkNfUENGX1RSTlM5MCAweDAwICAgIC8qICA5MCBrSHog Ki8KKyNkZWZpbmUgSTJDX1BDRl9UUk5TNDUgMHgwMSAgICAvKiAgNDUga0h6ICovCisjZGVmaW5l IEkyQ19QQ0ZfVFJOUzExIDB4MDIgICAgLyogIDExIGtIeiAqLworI2RlZmluZSBJMkNfUENGX1RS TlMxNSAweDAzICAgIC8qIDEuNSBrSHogKi8KKworCisvKiAtLS0tLSBBY2Nlc3MgdG8gaW50ZXJu YWwgcmVnaXN0ZXJzIGFjY29yZGluZyB0byBFUzEsRVMyIC0tLS0tLS0tLS0tLSAgICAgICAgKi8K Ky8qIHRoZXkgYXJlIG1hcHBlZCB0byB0aGUgZGF0YSBwb3J0ICggYTAgPSAwICkgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAqLworLyogYXZhaWxhYmxlIHdoZW4gRVNPID0gMCA6ICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisKKyNkZWZpbmUgSTJD X1BDRl9PV05BRFIgMAorI2RlZmluZSBJMkNfUENGX0lOVFJFRyBJMkNfUENGX0VTMgorI2RlZmlu ZSBJMkNfUENGX0NMS1JFRyBJMkNfUENGX0VTMQorCisjZW5kaWYgLyogSTJDX1BDRjg1ODRfSCAq LwotLS0gbGludXgvZHJpdmVycy9pMmMvaTJjLXBoaWxpcHMtcGFyLmMub3JpZyAgICAyMDAyLTA1 LTA5IDE4OjIxOjU2LjAwMDAwMDAwMCAtMDQwMAorKysgbGludXgvZHJpdmVycy9pMmMvaTJjLXBo aWxpcHMtcGFyLmMgMjAwMi0wNS0xNCAxODowMjoxNS4wMDAwMDAwMDAgLTA0MDAKQEAgLTIxLDcg KzIxLDcgQEAKIC8qIFdpdGggc29tZSBjaGFuZ2VzIGZyb20gS3k/c3RpIE0/bGtraSA8a21hbGtr aUBjYy5odXQuZmk+IGFuZCBldmVuCiAgICBGcm9kbyBMb29pamFhcmQgPGZyb2RvbEBkZHMubmw+ ICovCiAKLS8qICRJZDogaTJjLXBoaWxpcHMtcGFyLmMsdiAxLjE4IDIwMDAvMDcvMDYgMTk6MjE6 NDkgZnJvZG8gRXhwICQgKi8KKy8qICRJZDogaTJjLXBoaWxpcHMtcGFyLmMsdiAxLjIzIDIwMDIv MDIvMDYgMDg6NTA6NTggc2ltb24gRXhwICQgKi8KIAogI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5o PgogI2luY2x1ZGUgPGxpbnV4L2lvcG9ydC5oPgpAQCAtMjksNyArMjksNiBAQAogI2luY2x1ZGUg PGxpbnV4L2luaXQuaD4KICNpbmNsdWRlIDxsaW51eC9zdGRkZWYuaD4KICNpbmNsdWRlIDxsaW51 eC9wYXJwb3J0Lmg+Ci0KICNpbmNsdWRlIDxsaW51eC9pMmMuaD4KICNpbmNsdWRlIDxsaW51eC9p MmMtYWxnby1iaXQuaD4KIApAQCAtMTkwLDE4ICsxODksMTggQEAKICAgICAgICBzdHJ1Y3QgaTJj X3BhciAqYWRhcHRlciA9IGttYWxsb2Moc2l6ZW9mKHN0cnVjdCBpMmNfcGFyKSwKICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR0ZQX0tFUk5FTCk7CiAgICAgICAgaWYg KCFhZGFwdGVyKSB7Ci0gICAgICAgICAgICAgICBwcmludGsoImkyYy1waGlsaXBzLXBhcjogVW5h YmxlIHRvIG1hbGxvYy5cbiIpOworICAgICAgICAgICAgICAgcHJpbnRrKEtFUk5fRVJSICJpMmMt cGhpbGlwcy1wYXI6IFVuYWJsZSB0byBtYWxsb2MuXG4iKTsKICAgICAgICAgICAgICAgIHJldHVy bjsKICAgICAgICB9CiAKLSAgICAgICBwcmludGsoImkyYy1waGlsaXBzLXBhci5vOiBhdHRhY2hp bmcgdG8gJXNcbiIsIHBvcnQtPm5hbWUpOworICAgICAgIHByaW50ayhLRVJOX0RFQlVHICJpMmMt cGhpbGlwcy1wYXIubzogYXR0YWNoaW5nIHRvICVzXG4iLCBwb3J0LT5uYW1lKTsKIAogICAgICAg IGFkYXB0ZXItPnBkZXYgPSBwYXJwb3J0X3JlZ2lzdGVyX2RldmljZShwb3J0LCAiaTJjLXBoaWxp cHMtcGFyIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg TlVMTCwgTlVMTCwgTlVMTCwgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIFBBUlBPUlRfRkxBR19FWENMLAogICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBOVUxMKTsKICAgICAgICBpZiAoIWFkYXB0ZXItPnBkZXYpIHsK LSAgICAgICAgICAgICAgIHByaW50aygiaTJjLXBoaWxpcHMtcGFyOiBVbmFibGUgdG8gcmVnaXN0 ZXIgd2l0aCBwYXJwb3J0LlxuIik7CisgICAgICAgICAgICAgICBwcmludGsoS0VSTl9FUlIgImky Yy1waGlsaXBzLXBhcjogVW5hYmxlIHRvIHJlZ2lzdGVyIHdpdGggcGFycG9ydC5cbiIpOwogICAg ICAgICAgICAgICAgcmV0dXJuOwogICAgICAgIH0KIApAQCAtMjEwLDE1ICsyMDksMTggQEAKICAg ICAgICBhZGFwdGVyLT5iaXRfbHBfZGF0YSA9IHR5cGUgPyBiaXRfbHBfZGF0YTIgOiBiaXRfbHBf ZGF0YTsKICAgICAgICBhZGFwdGVyLT5iaXRfbHBfZGF0YS5kYXRhID0gcG9ydDsKIAorICAgICAg IGlmIChwYXJwb3J0X2NsYWltX29yX2Jsb2NrKGFkYXB0ZXItPnBkZXYpIDwgMCApIHsKKyAgICAg ICAgICAgICAgIHByaW50ayhLRVJOX0VSUiAiaTJjLXBoaWxpcHMtcGFyOiBDb3VsZCBub3QgY2xh aW0gcGFyYWxsZWwgcG9ydC5cbiIpOworICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgIH0K ICAgICAgICAvKiByZXNldCBoYXJkd2FyZSB0byBzYW5lIHN0YXRlICovCi0gICAgICAgcGFycG9y dF9jbGFpbV9vcl9ibG9jayhhZGFwdGVyLT5wZGV2KTsKICAgICAgICBiaXRfbHBfc2V0c2RhKHBv cnQsIDEpOwogICAgICAgIGJpdF9scF9zZXRzY2wocG9ydCwgMSk7CiAgICAgICAgcGFycG9ydF9y ZWxlYXNlKGFkYXB0ZXItPnBkZXYpOwogCiAgICAgICAgaWYgKGkyY19iaXRfYWRkX2J1cygmYWRh cHRlci0+YWRhcHRlcikgPCAwKQogICAgICAgIHsKLSAgICAgICAgICAgICAgIHByaW50aygiaTJj LXBoaWxpcHMtcGFyOiBVbmFibGUgdG8gcmVnaXN0ZXIgd2l0aCBJMkMuXG4iKTsKKyAgICAgICAg ICAgICAgIHByaW50ayhLRVJOX0VSUiAiaTJjLXBoaWxpcHMtcGFyOiBVbmFibGUgdG8gcmVnaXN0 ZXIgd2l0aCBJMkMuXG4iKTsKICAgICAgICAgICAgICAgIHBhcnBvcnRfdW5yZWdpc3Rlcl9kZXZp Y2UoYWRhcHRlci0+cGRldik7CiAgICAgICAgICAgICAgICBrZnJlZShhZGFwdGVyKTsKICAgICAg ICAgICAgICAgIHJldHVybjsgICAgICAgICAvKiBObyBnb29kICovCkBAIC0yNjQsNyArMjY2LDcg QEAKICNpZiBMSU5VWF9WRVJTSU9OX0NPREUgPCBLRVJORUxfVkVSU0lPTigyLDMsNCkKICAgICAg ICBzdHJ1Y3QgcGFycG9ydCAqcG9ydDsKICNlbmRpZgotICAgICAgIHByaW50aygiaTJjLXBoaWxp cHMtcGFyLm86IGkyYyBQaGlsaXBzIHBhcmFsbGVsIHBvcnQgYWRhcHRlciBtb2R1bGVcbiIpOwor ICAgICAgIHByaW50ayhLRVJOX0lORk8gImkyYy1waGlsaXBzLXBhci5vOiBpMmMgUGhpbGlwcyBw YXJhbGxlbCBwb3J0IGFkYXB0ZXIgbW9kdWxlIHZlcnNpb24gJXMgKCVzKVxuIiwgSTJDX1ZFUlNJ T04sIEkyQ19EQVRFKTsKIAogI2lmIExJTlVYX1ZFUlNJT05fQ09ERSA+PSBLRVJORUxfVkVSU0lP TigyLDMsNCkKICAgICAgICBwYXJwb3J0X3JlZ2lzdGVyX2RyaXZlcigmaTJjX2RyaXZlcik7CkBA IC0yOTEsNyArMjkzLDkgQEAKIAogTU9EVUxFX0FVVEhPUigiU2ltb24gRy4gVm9nbCA8c2ltb25A dGsudW5pLWxpbnouYWMuYXQ+Iik7CiBNT0RVTEVfREVTQ1JJUFRJT04oIkkyQy1CdXMgYWRhcHRl ciByb3V0aW5lcyBmb3IgUGhpbGlwcyBwYXJhbGxlbCBwb3J0IGFkYXB0ZXIiKTsKKyNpZmRlZiBN T0RVTEVfTElDRU5TRQogTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOworI2VuZGlmCiAKIE1PRFVMRV9Q QVJNKHR5cGUsICJpIik7CiAKLS0tIGxpbnV4L2RyaXZlcnMvaTJjL2kyYy1wcGM0MDUuYy5vcmln IDE5NjktMTItMzEgMTk6MDA6MDAuMDAwMDAwMDAwIC0wNTAwCisrKyBsaW51eC9kcml2ZXJzL2ky Yy9pMmMtcHBjNDA1LmMgICAgICAyMDAyLTA1LTE0IDE4OjAyOjM1LjAwMDAwMDAwMCAtMDQwMApA QCAtMCwwICsxLDM5OSBAQAorLyoKKyAgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgIGkyYy1hZGFwLXBw YzQwNS5jIGkyYy1odyBhY2Nlc3MgZm9yIHRoZSBJSUMgcGVyaXBoZXJhbCBvbiB0aGUgSUJNIFBQ QyA0MDUKKyAgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgCisgICBJYW4gRGFTaWx2YSwgTW9udGFWaXN0 YSBTb2Z0d2FyZSwgSW5jLgorICAgaWRhc2lsdmFAbXZpc3RhLmNvbSBvciBzb3VyY2VAbXZpc3Rh LmNvbQorCisgICBDb3B5cmlnaHQgMjAwMCBNb250YVZpc3RhIFNvZnR3YXJlIEluYy4KKworICAg Q2hhbmdlcyBtYWRlIHRvIHN1cHBvcnQgdGhlIElJQyBwZXJpcGhlcmFsIG9uIHRoZSBJQk0gUFBD IDQwNSAKKworCisgICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICBUaGlzIGZpbGUgd2FzIGhpZ2hs eSBsZXZlcmFnZWQgZnJvbSBpMmMtZWxla3Rvci5jLCB3aGljaCB3YXMgY3JlYXRlZAorICAgYnkg U2ltb24gRy4gVm9nbCBhbmQgSGFucyBCZXJnbHVuZDoKKworIAorICAgICBDb3B5cmlnaHQgKEMp IDE5OTUtOTcgU2ltb24gRy4gVm9nbAorICAgICAgICAgICAgICAgICAgIDE5OTgtOTkgSGFucyBC ZXJnbHVuZAorCisgICBXaXRoIHNvbWUgY2hhbmdlcyBmcm9tIEt5P3N0aSBNP2xra2kgPGttYWxr a2lAY2MuaHV0LmZpPiBhbmQgZXZlbgorICAgRnJvZG8gTG9vaWphYXJkIDxmcm9kb2xAZGRzLm5s PgorCisKKyAgICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3Ry aWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICAgIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05V IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgICAgdGhlIEZyZWUgU29m dHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAg ICAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorCisgICAgVGhpcyBwcm9ncmFt IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgICAg YnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFu dHkgb2YKKyAgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBV UlBPU0UuICBTZWUgdGhlCisgICAgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUg ZGV0YWlscy4KKworICAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdO VSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgICAgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlm IG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAgICBGb3VuZGF0aW9uLCBJbmMuLCA2 NzUgTWFzcyBBdmUsIENhbWJyaWRnZSwgTUEgMDIxMzksIFVTQS4KKyAgIC0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0KKyovCisKKworI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorI2luY2x1ZGUgPGxpbnV4 L2lvcG9ydC5oPgorI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L2Rl bGF5Lmg+CisjaW5jbHVkZSA8bGludXgvc2xhYi5oPgorI2luY2x1ZGUgPGxpbnV4L3ZlcnNpb24u aD4KKyNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisjaW5jbHVkZSA8YXNtL2lycS5oPgorI2luY2x1 ZGUgPGFzbS9pby5oPgorI2luY2x1ZGUgPGxpbnV4L2kyYy5oPgorI2luY2x1ZGUgPGxpbnV4L2ky Yy1hbGdvLXBwYzQwNS5oPgorI2luY2x1ZGUgPGxpbnV4L2kyYy1wcGM0MDVhZGFwLmg+CisjaW5j bHVkZSA8bGludXgvaTJjLXBwYzQwNS5oPgorCisjaWZkZWYgTU9EVUxFX0xJQ0VOU0UKK01PRFVM RV9MSUNFTlNFKCJHUEwiKTsKKyNlbmRpZgorCisjZGVmaW5lIERFRkFVTFRfQkFTRSAweEVGNjAw NTAwCisjZGVmaW5lIERFRkFVTFRfSVJRICAgICAgMiAKKyNkZWZpbmUgREVGQVVMVF9DTE9DSyAg IDUwCisjZGVmaW5lIERFRkFVTFRfT1dOICAgMHg1NQorCitzdGF0aWMgaW50IGJhc2UgID0gMDsK K3N0YXRpYyBpbnQgaXJxICAgPSAwOworc3RhdGljIGludCBjbG9jayA9IDA7CitzdGF0aWMgaW50 IG93biAgID0gMDsKK3N0YXRpYyBpbnQgaTJjX2RlYnVnPTA7CitzdGF0aWMgc3RydWN0IGlpY19w cGM0MDUgZ3BpOworI2lmIChMSU5VWF9WRVJTSU9OX0NPREUgPCAweDAyMDMwMSkKK3N0YXRpYyBz dHJ1Y3Qgd2FpdF9xdWV1ZSAqaWljX3dhaXQgPSBOVUxMOworI2Vsc2UKK3N0YXRpYyB3YWl0X3F1 ZXVlX2hlYWRfdCBpaWNfd2FpdDsKKyNlbmRpZgorc3RhdGljIGludCBpaWNfcGVuZGluZzsKKwor LyogLS0tLS0gZ2xvYmFsIGRlZmluZXMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0gICAgICAgICovCisjZGVmaW5lIERFQih4KSBpZiAoaTJjX2RlYnVnPj0x KSB4CisjZGVmaW5lIERFQjIoeCkgaWYgKGkyY19kZWJ1Zz49MikgeAorI2RlZmluZSBERUIzKHgp IGlmIChpMmNfZGVidWc+PTMpIHgKKyNkZWZpbmUgREVCRSh4KSAgICAgICAgeCAgICAgICAvKiBl cnJvciBtZXNzYWdlcyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworCisKKy8qIC0t LSBDb252ZW5pZW5jZSBkZWZpbmVzIGZvciB0aGUgaTJjIHBvcnQ6ICAgICAgICAgICAgICAgICAg ICovCisjZGVmaW5lIEJBU0UgICAoKHN0cnVjdCBpaWNfcHBjNDA1ICopKGRhdGEpKS0+aWljX2Jh c2UKKworLyogLS0tLS0gbG9jYWwgZnVuY3Rpb25zIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0gICAgICAgICovCisKKy8vCisvLyBEZXNjcmlwdGlvbjogV3Jp dGUgYSBieXRlIHRvIElJQyBoYXJkd2FyZQorLy8KK3N0YXRpYyB2b2lkIGlpY19wcGM0MDVfc2V0 Ynl0ZSh2b2lkICpkYXRhLCBpbnQgY3RsLCBpbnQgdmFsKQoreworICAgICAgIC8vIHdyaXRlYiBy ZXNvbHZlcyB0byBhIHdyaXRlIHRvIHRoZSBzcGVjaWZpZWQgbWVtb3J5IGxvY2F0aW9uCisgICAg ICAgLy8gcGx1cyBhIGNhbGwgdG8gZWllaW8uICBlaWVpbyBlbnN1cmVzIHRoYXQgYWxsIGluc3Ry dWN0aW9ucworICAgICAgIC8vIHByZWNlZGluZyBpdCBhcmUgY29tcGxldGVkIGJlZm9yZSBhbnkg ZnVydGhlciBzdG9yZXMgYXJlCisgICAgICAgLy8gY29tcGxldGVkLgorICAgICAgIC8vIERlbGF5 cyBhdCB0aGlzIGxldmVsICh0byBwcm90ZWN0IHdyaXRlcykgYXJlIG5vdCBuZWVkZWQgaGVyZS4K KyAgICAgICAgd3JpdGViKHZhbCwgY3RsKTsKK30KKworCisvLworLy8gRGVzY3JpcHRpb246IFJl YWQgYSBieXRlIGZyb20gSUlDIGhhcmR3YXJlCisvLworc3RhdGljIGludCBpaWNfcHBjNDA1X2dl dGJ5dGUodm9pZCAqZGF0YSwgaW50IGN0bCkKK3sKKyAgICAgICBpbnQgdmFsOworCisgICAgICAg REVCMyhwcmludGsoImkyYy1wcGM0MDVfZ2V0Ynl0ZTogUmVhZCBJSUMgcmVnaXN0ZXJcbiIpKTsK KyAgICAgICB2YWwgPSByZWFkYihjdGwpOworICAgICAgIERFQjMocHJpbnRrKCJpMmMtcHBjNDA1 Z2V0Ynl0ZTogUmVhZCBEYXRhIDB4JTAyWFxuIiwgdmFsKSk7CisgICAgICAgcmV0dXJuICh2YWwp OworfQorCisKKy8vCisvLyBEZXNjcmlwdGlvbjogUmV0dXJuIG91ciBzbGF2ZSBhZGRyZXNzLiAg VGhpcyBpcyB0aGUgYWRkcmVzcworLy8gcHV0IG9uIHRoZSBJMkMgYnVzIHdoZW4gYW5vdGhlciBt YXN0ZXIgb24gdGhlIGJ1cyB3YW50cyB0byBhZGRyZXNzIHVzCisvLyBhcyBhIHNsYXZlCisvLwor c3RhdGljIGludCBpaWNfcHBjNDA1X2dldG93bih2b2lkICpkYXRhKQoreworICAgICAgIHJldHVy biAoZ3BpLmlpY19vd24pOworfQorCisKKy8vCisvLyBEZXNjcmlwdGlvbjogUmV0dXJuIHRoZSBj bG9jayByYXRlCisvLworc3RhdGljIGludCBpaWNfcHBjNDA1X2dldGNsb2NrKHZvaWQgKmRhdGEp Cit7CisgICAgICAgcmV0dXJuIChncGkuaWljX2Nsb2NrKTsKK30KKworCisjaWYgMAorc3RhdGlj IHZvaWQgaWljX3BwYzQwNV9zbGVlcCh1bnNpZ25lZCBsb25nIHRpbWVvdXQpCit7CisgICAgICAg c2NoZWR1bGVfdGltZW91dCggdGltZW91dCAqIEhaKTsKK30KKyNlbmRpZgorCisKKy8vCisvLyBE ZXNjcmlwdGlvbjogIFB1dCB0aGlzIHByb2Nlc3MgdG8gc2xlZXAuICBXZSB3aWxsIHdha2UgdXAg d2hlbiB0aGUKKy8vIElJQyBjb250cm9sbGVyIGludGVycnVwdHMuCisvLworc3RhdGljIHZvaWQg aWljX3BwYzQwNV93YWl0Zm9ycGluKHZvaWQpIHsKKworICAgaW50IHRpbWVvdXQgPSAyOworCisg ICAvL3ByaW50aygiaWljX3BwYzQwNV93YWl0Zm9ycGluOiBBdCB0b3Agb2YgZnVuY3Rpb25cbiIp OworICAgLy8KKyAgIC8vIElmIGludGVycnVwdHMgYXJlIGVuYWJsZWQgKHdoaWNoIHRoZXkgYXJl KSwgdGhlbiBwdXQgdGhlIHByb2Nlc3MgdG8KKyAgIC8vIHNsZWVwLiAgVGhpcyBwcm9jZXNzIHdp bGwgYmUgYXdha2VuZWQgYnkgdHdvIGV2ZW50cyAtLSBlaXRoZXIgdGhlCisgICAvLyB0aGUgSUlD IHBlcmlwaGVyYWwgaW50ZXJydXB0cyBvciB0aGUgdGltZW91dCBleHBpcmVzLiAKKyAgIC8vCisg ICBpZiAoZ3BpLmlpY19pcnEgPiAwKSB7CisgICAgICBjbGkoKTsKKyAgICAgIGlmIChpaWNfcGVu ZGluZyA9IDApIHsKKyAgICAgICAgIC8vcHJpbnRrKCJpaWNfcHBjNDA1X3dhaXRmb3JwaW46IGNh bGxpbmcgaW50ZXJydXB0aWJsZV9zbGVlcF9vbl90aW1lb3V0XG4iKTsKKyAgICAgICAgaW50ZXJy dXB0aWJsZV9zbGVlcF9vbl90aW1lb3V0KCZpaWNfd2FpdCwgdGltZW91dCpIWiApOworICAgICAg fSBlbHNlCisgICAgICAgIGlpY19wZW5kaW5nID0gMDsKKyAgICAgIHN0aSgpOworICAgfSBlbHNl IHsKKyAgICAgIC8vCisgICAgICAvLyBJZiBpbnRlcnJ1cHRzIGFyZSBub3QgZW5hYmxlZCB0aGVu IGRlbGF5IGZvciBhIHJlYXNvbmFibGUgYW1vdW50CisgICAgICAvLyBvZiB0aW1lIGFuZCByZXR1 cm4uICBXZSBleHBlY3QgdGhhdCBieSB0aW1lIHdlIHJldHVybiB0byB0aGUgY2FsbGluZworICAg ICAgLy8gZnVuY3Rpb24gdGhhdCB0aGUgSUlDIGhhcyBmaW5pc2hlZCBvdXIgcmVxdWVzdGVkIHRy YW5zYWN0aW9uIGFuZAorICAgICAgLy8gdGhlIHN0YXR1cyBiaXQgcmVmbGVjdHMgdGhpcy4KKyAg ICAgIC8vCisgICAgICAvLyB1ZGVsYXkgaXMgcHJvYmFibHkgbm90IHRoZSBiZXN0IGNob2ljZSBm b3IgdGhpcyBzaW5jZSBpdCBpcworICAgICAgLy8gdGhlIGVxdWl2YWxlbnQgb2YgYSBidXN5IHdh aXQKKyAgICAgIC8vCisgICAgICB1ZGVsYXkoMTAwKTsKKyAgIH0KKyAgIC8vcHJpbnRrKCJpaWNf cHBjNDA1X3dhaXRmb3JwaW46IGV4aXR0aW5nXG4iKTsKK30KKworCisvLworLy8gRGVzY3JpcHRp b246IFRoZSByZWdpc3RlcmVkIGludGVycnVwdCBoYW5kbGVyCisvLworc3RhdGljIHZvaWQgaWlj X3BwYzQwNV9oYW5kbGVyKGludCB0aGlzX2lycSwgdm9pZCAqZGV2X2lkLCBzdHJ1Y3QgcHRfcmVn cyAqcmVncykgCit7CisgICBpbnQgcmV0OworICAgICAgIAorICAgaWljX3BlbmRpbmcgPSAxOwor ICAgREVCMihwcmludGsoImlpY19wcGM0MDVfaGFuZGxlcjogaW4gaW50ZXJydXB0IGhhbmRsZXJc biIpKTsKKyAgIC8vIFJlYWQgc3RhdHVzIHJlZ2lzdGVyCisgICByZXQgPSByZWFkYigweGVmNjAw NTA4KTsKKyAgIERFQjIocHJpbnRrKCJpaWNfcHBjNDA1X2hhbmRsZXI6IHN0YXR1cyA9ICV4XG4i LCByZXQpKTsKKyAgIC8vIENsZWFyIHN0YXR1cyByZWdpc3Rlci4gIFNlZSBJQk0gUFBDIDQwNSBy ZWZlcmVuY2UgbWFudWFsIGZvciBkZXRhaWxzCisgICB3cml0ZWIoMHgwYSwgMHhlZjYwMDUwOCk7 CisgICB3YWtlX3VwX2ludGVycnVwdGlibGUoJmlpY193YWl0KTsKK30KKworCisvLworLy8gRGVz Y3JpcHRpb246IFRoaXMgZnVuY3Rpb24gaXMgdmVyeSBoYXJkd2FyZSBkZXBlbmRlbnQuICBGaXJz dCwgd2UgbG9jaworLy8gdGhlIHJlZ2lvbiBvZiBtZW1vcnkgd2hlcmUgb3V0IHJlZ2lzdGVycyBl eGlzdC4gIE5leHQsIHdlIHJlcXVlc3Qgb3VyCisvLyBpbnRlcnJ1cHQgbGluZSBhbmQgcmVnaXN0 ZXIgaXRzIGFzc29jaWF0ZWQgaGFuZGxlci4gIE91ciBJSUMgcGVyaXBoZXJhbAorLy8gdXNlcyBp bnRlcnJ1cHQgbnVtYmVyIDIsIGFzIHNwZWNpZmllZCBieSB0aGUgNDA1IHJlZmVyZW5jZSBtYW51 YWwuCisvLworc3RhdGljIGludCBpaWNfaHdfcmVzcmNfaW5pdCh2b2lkKQoreworLy8gICAgIHRo aXMgaXMgbm90IGEgcGNpIGlvIHJlZ2lvbiwgZG9uJ3QgdXNlIHJlcXVlc3RfcmVnaW9uKCkKKy8v ICAgICBpZiAoY2hlY2tfcmVnaW9uKGdwaS5paWNfYmFzZSwgMTcpIDwgMCApIHsKKy8vICAgICAg ICByZXR1cm4gLUVOT0RFVjsKKy8vICAgICB9IGVsc2UgeworLy8gICAgICAgIHJlcXVlc3RfcmVn aW9uKGdwaS5paWNfYmFzZSwgMTcsICJpMmMgKGkyYyBidXMgYWRhcHRlcikiKTsKKy8vICAgICB9 CisgICAgICAgaWYgKGdwaS5paWNfaXJxID4gMCkgeworICAgICAgICAgIGlmIChyZXF1ZXN0X2ly cShncGkuaWljX2lycSwgaWljX3BwYzQwNV9oYW5kbGVyLCAwLCAiUFBDNDA1IElJQyIsIDApIDwg MCkgeworICAgICAgICAgICAgIHByaW50ayhLRVJOX0VSUiAiaWljX2h3X3Jlc3JjX2luaXQ6IFJl cXVlc3QgaXJxJWQgZmFpbGVkXG4iLCBncGkuaWljX2lycSk7CisgICAgICAgICAgICAgZ3BpLmlp Y19pcnEgPSAwOworICAgICAgICAgIH0gZWxzZQorICAgICAgICAgICAgIERFQjMocHJpbnRrKCJp aWNfaHdfcmVzcmNfaW5pdDogRW5hYmxlZCBpbnRlcnJ1cHRcbiIpKTsKKyAgICAgICAgICAgICBl bmFibGVfaXJxKGdwaS5paWNfaXJxKTsKKyAgICAgICB9CisgICAgICAgcmV0dXJuIDA7Cit9CisK KworLy8KKy8vIERlc2NyaXB0aW9uOiBSZWxlYXNlIGlycSBhbmQgbWVtb3J5CisvLworc3RhdGlj IHZvaWQgaWljX3BwYzQwNV9yZWxlYXNlKHZvaWQpCit7CisgICAgICAgaWYgKGdwaS5paWNfaXJx ID4gMCkgeworICAgICAgICAgICAgICAgZGlzYWJsZV9pcnEoZ3BpLmlpY19pcnEpOworICAgICAg ICAgICAgICAgZnJlZV9pcnEoZ3BpLmlpY19pcnEsIDApOworICAgICAgIH0KKyAgICAgICByZWxl YXNlX3JlZ2lvbihncGkuaWljX2Jhc2UgLCAyKTsKK30KKworCisvLworLy8gRGVzY3JpcHRpb246 IERvZXMgbm90aGluZworLy8KK3N0YXRpYyBpbnQgaWljX3BwYzQwNV9yZWcoc3RydWN0IGkyY19j bGllbnQgKmNsaWVudCkKK3sKKyAgICAgICByZXR1cm4gMDsKK30KKworCisvLworLy8gRGVzY3Jp cHRpb246IERvZXMgbm90aGluZworLy8KK3N0YXRpYyBpbnQgaWljX3BwYzQwNV91bnJlZyhzdHJ1 Y3QgaTJjX2NsaWVudCAqY2xpZW50KQoreworICAgICAgIHJldHVybiAwOworfQorCisKKy8vCisv LyBEZXNjcmlwdGlvbjogSWYgdGhpcyBjb21waWxlZCBhcyBhIG1vZHVsZSwgdGhlbiBpbmNyZW1l bnQgdGhlIGNvdW50CisvLworc3RhdGljIHZvaWQgaWljX3BwYzQwNV9pbmNfdXNlKHN0cnVjdCBp MmNfYWRhcHRlciAqYWRhcCkKK3sKKyNpZmRlZiBNT0RVTEUKKyAgICAgICBNT0RfSU5DX1VTRV9D T1VOVDsKKyNlbmRpZgorfQorCisKKy8vCisvLyBEZXNjcmlwdGlvbjogSWYgdGhpcyBpcyBhIG1v ZHVsZSwgdGhlbiBkZWNyZW1lbnQgdGhlIGNvdW50CisvLworc3RhdGljIHZvaWQgaWljX3BwYzQw NV9kZWNfdXNlKHN0cnVjdCBpMmNfYWRhcHRlciAqYWRhcCkKK3sKKyNpZmRlZiBNT0RVTEUKKyAg ICAgICBNT0RfREVDX1VTRV9DT1VOVDsKKyNlbmRpZgorfQorCisKKy8qIC0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LQorICogRW5jYXBzdWxhdGUgdGhlIGFib3ZlIGZ1bmN0aW9ucyBpbiB0aGUgY29ycmVjdCBvcGVy YXRpb25zIHN0cnVjdHVyZS4KKyAqIFRoaXMgaXMgb25seSBkb25lIHdoZW4gbW9yZSB0aGFuIG9u ZSBoYXJkd2FyZSBhZGFwdGVyIGlzIHN1cHBvcnRlZC4KKyAqLworc3RhdGljIHN0cnVjdCBpMmNf YWxnb19paWNfZGF0YSBpaWNfcHBjNDA1X2RhdGEgPSB7CisgICAgICAgTlVMTCwKKyAgICAgICBp aWNfcHBjNDA1X3NldGJ5dGUsCisgICAgICAgaWljX3BwYzQwNV9nZXRieXRlLAorICAgICAgIGlp Y19wcGM0MDVfZ2V0b3duLAorICAgICAgIGlpY19wcGM0MDVfZ2V0Y2xvY2ssCisgICAgICAgaWlj X3BwYzQwNV93YWl0Zm9ycGluLAorICAgICAgIDgwLCA4MCwgMTAwLCAgICAgICAgICAgIC8qICAg ICAgd2FpdHMsIHRpbWVvdXQgKi8KK307CisKK3N0YXRpYyBzdHJ1Y3QgaTJjX2FkYXB0ZXIgaWlj X3BwYzQwNV9vcHMgPSB7CisgICAgICAgIlBQQzQwNSBJSUMgYWRhcHRlciIsCisgICAgICAgSTJD X0hXX0lfSUlDLAorICAgICAgIE5VTEwsCisgICAgICAgJmlpY19wcGM0MDVfZGF0YSwKKyAgICAg ICBpaWNfcHBjNDA1X2luY191c2UsCisgICAgICAgaWljX3BwYzQwNV9kZWNfdXNlLAorICAgICAg IGlpY19wcGM0MDVfcmVnLAorICAgICAgIGlpY19wcGM0MDVfdW5yZWcsCit9OworCisKKy8vCisv LyBEZXNjcmlwdGlvbjogQ2FsbGVkIHdoZW4gdGhlIG1vZHVsZSBpcyBsb2FkZWQuICBUaGlzIGZ1 bmN0aW9uIHN0YXJ0cyB0aGUKKy8vIGNhc2NhZGUgb2YgY2FsbHMgdXAgdGhyb3VnaCB0aGUgaGVp cmFyY2h5IG9mIGkyYyBtb2R1bGVzIChpLmUuIHVwIHRvIHRoZQorLy8gIGFsZ29yaXRobSBsYXll ciBhbmQgaW50byB0byB0aGUgY29yZSBsYXllcikKKy8vCitzdGF0aWMgaW50IF9faW5pdCBpaWNf cHBjNDA1X2luaXQodm9pZCkgCit7CisKKyAgICAgICBzdHJ1Y3QgaWljX3BwYzQwNSAqcGlpYyA9 ICZncGk7CisKKworLy8gICAgIHByaW50ayhLRVJOX0lORk8gIkluZmluaXRlIGxvb3BcbiIpOwor Ly8gICAgIC8vIFNvZnQgcmVzZXQKKy8vICAgICB3cml0ZWIoMHgxLCAweGVmNjAwNTBmKTsKKy8v ICAgICB3aGlsZSgxKSB7CisvLyAgICAgICAgLy8gU2V0IFNEQSBsaW5lIGxvdworLy8gICAgICAg IHdyaXRlYigweDgsIDB4ZWY2MDA1MTApOworLy8gICAgIH0KKworICAgICAgIHByaW50ayhLRVJO X0lORk8gImlpY19wcGM0MDVfaW5pdDogUFBDIDQwNSBpaWMgYWRhcHRlciBtb2R1bGUgdmVyc2lv biAlcyAoJXMpXG4iLCBJMkNfVkVSU0lPTiwgSTJDX0RBVEUpOworICAgICAgIGlmIChiYXNlID0g MCkKKyAgICAgICAgICAgICAgIHBpaWMtPmlpY19iYXNlID0gREVGQVVMVF9CQVNFOworICAgICAg IGVsc2UKKyAgICAgICAgICAgICAgIHBpaWMtPmlpY19iYXNlID0gYmFzZTsKKworICAgICAgIGlm IChpcnEgPSAwKQorICAgICAgICAgICAgICAgcGlpYy0+aWljX2lycSA9IERFRkFVTFRfSVJROwor ICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgIHBpaWMtPmlpY19pcnEgPSBpcnE7CisKKyAgICAg ICBpZiAoY2xvY2sgPSAwKQorICAgICAgICAgICAgICAgcGlpYy0+aWljX2Nsb2NrID0gREVGQVVM VF9DTE9DSzsKKyAgICAgICBlbHNlCisgICAgICAgICAgICAgICBwaWljLT5paWNfY2xvY2sgPSBj bG9jazsKKworICAgICAgIGlmIChvd24gPSAwKQorICAgICAgICAgICAgICAgcGlpYy0+aWljX293 biA9IERFRkFVTFRfT1dOOworICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgIHBpaWMtPmlpY19v d24gPSBvd247CisKKyAgICAgICBpaWNfcHBjNDA1X2RhdGEuZGF0YSA9ICh2b2lkICopcGlpYzsK KyNpZiAoTElOVVhfVkVSU0lPTl9DT0RFID49IDB4MDIwMzAxKQorICAgICAgIGluaXRfd2FpdHF1 ZXVlX2hlYWQoJmlpY193YWl0KTsKKyNlbmRpZgorICAgICAgIGlmIChpaWNfaHdfcmVzcmNfaW5p dCgpID0gMCkgeworICAgICAgICAgICAgICAgaWYgKGkyY19paWNfYWRkX2J1cygmaWljX3BwYzQw NV9vcHMpIDwgMCkKKyAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIC1FTk9ERVY7CisgICAg ICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgIHJldHVybiAtRU5PREVWOworICAgICAgIH0KKyAg ICAgICBwcmludGsoS0VSTl9JTkZPICJpaWNfcHBjNDA1X2luaXQ6IGZvdW5kIGRldmljZSBhdCAl I3guXG4iLCBwaWljLT5paWNfYmFzZSk7CisgICAgICAgcmV0dXJuIDA7Cit9CisKKworc3RhdGlj IHZvaWQgaWljX3BwYzQwNV9leGl0KHZvaWQpCit7CisgICAgICAgaTJjX2lpY19kZWxfYnVzKCZp aWNfcHBjNDA1X29wcyk7CisgICAgICAgIGlpY19wcGM0MDVfcmVsZWFzZSgpOworfQorCitFWFBP UlRfTk9fU1lNQk9MUzsKKworLy8KKy8vIElmIG1vZHVsZXMgaXMgTk9UIGRlZmluZWQgd2hlbiB0 aGlzIGZpbGUgaXMgY29tcGlsZWQsIHRoZW4gdGhlIE1PRFVMRV8qCisvLyBtYWNyb3Mgd2lsbCBy ZXNvbHZlIHRvIG5vdGhpbmcKKy8vCitNT0RVTEVfQVVUSE9SKCJNb250YVZpc3RhIFNvZnR3YXJl IDx3d3cubXZpc3RhLmNvbT4iKTsKK01PRFVMRV9ERVNDUklQVElPTigiSTJDLUJ1cyBhZGFwdGVy IHJvdXRpbmVzIGZvciBQUEMgNDA1IElJQyBidXMgYWRhcHRlciIpOworCitNT0RVTEVfUEFSTShi YXNlLCAiaSIpOworTU9EVUxFX1BBUk0oaXJxLCAiaSIpOworTU9EVUxFX1BBUk0oY2xvY2ssICJp Iik7CitNT0RVTEVfUEFSTShvd24sICJpIik7CitNT0RVTEVfUEFSTShpMmNfZGVidWcsImkiKTsK KworCisvLworLy8gRGVzY3JpcHRpb246IENhbGxlZCB3aGVuIG1vZHVsZSBpcyBsb2FkZWQgb3Ig d2hlbiBrZXJuZWwgaXMgaW50aWFsaXplZC4KKy8vIElmIE1PRFVMRVMgaXMgZGVmaW5lZCB3aGVu IHRoaXMgZmlsZSBpcyBjb21waWxlZCwgdGhlbiB0aGlzIGZ1bmN0aW9uIHdpbGwKKy8vIHJlc29s dmUgdG8gaW5pdF9tb2R1bGUgKHRoZSBmdW5jdGlvbiBjYWxsZWQgd2hlbiBpbnNtb2QgaXMgaW52 b2tlZCBmb3IgYQorLy8gbW9kdWxlKS4gIE90aGVyd2lzZSwgdGhpcyBmdW5jdGlvbiBpcyBjYWxs ZWQgZWFybHkgaW4gdGhlIGJvb3QsIHdoZW4gdGhlCisvLyBrZXJuZWwgaXMgaW50aWFsaXplZC4g IENoZWNrIG91dCAvaW5jbHVkZS9pbml0LmggdG8gc2VlIGhvdyB0aGlzIHdvcmtzLgorLy8KK21v ZHVsZV9pbml0KGlpY19wcGM0MDVfaW5pdCk7CisKKworCisvLworLy8gRGVzY3JpcHRpb246IFJl c29sdmVzIHRvIG1vZHVsZV9jbGVhbnVwIHdoZW4gTU9EVUxFUyBpcyBkZWZpbmVkLgorLy8KK21v ZHVsZV9leGl0KGlpY19wcGM0MDVfZXhpdCk7IAotLS0gL2Rldi9udWxsICAgMTk5NC0wNy0xNyAx OTo0NjoxOC4wMDAwMDAwMDAgLTA0MDAKKysrIGxpbnV4L2luY2x1ZGUvbGludXgvaTJjLXBwYzQw NS5oICAgIDIwMDEtMDUtMzAgMjM6MTM6MjUuMDAwMDAwMDAwIC0wNDAwCkBAIC0wLDAgKzEsMTI1 IEBACisvKgorICAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgIGkyYy1wcGM0MDUuaDogR2xvYmFsIGRlZmluZXMg Zm9yIHRoZSBJMkMgY29udHJvbGxlciBvbiBib2FyZCB0aGUgICAgCisgICAgICAgICAgICAgICAg IElCTSA0MDUgUFBDIHByb2Nlc3Nvci4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAor ICAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0KKworICAgSWFuIERhU2lsdmEsIE1vbnRhVmlzdGEgU29mdHdhcmUsIElu Yy4KKyAgIGlkYXNpbHZhQG12aXN0YS5jb20gb3Igc291cmNlQG12aXN0YS5jb20KKworICAgQ29w eXJpZ2h0IDIwMDAgTW9udGFWaXN0YSBTb2Z0d2FyZSBJbmMuCisKKyAqICBUaGlzIHByb2dyYW0g aXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgIGl0IGFuZC9vciBtb2RpZnkg aXQKKyAqICB1bmRlciAgdGhlIHRlcm1zIG9mICB0aGUgR05VIEdlbmVyYWwgIFB1YmxpYyBMaWNl bnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUKKyAqICBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247ICBl aXRoZXIgdmVyc2lvbiAyIG9mIHRoZSAgTGljZW5zZSwgb3IgKGF0IHlvdXIKKyAqICBvcHRpb24p IGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqICBUSElTICBTT0ZUV0FSRSAgSVMgUFJPVklERUQg ICBgYEFTICBJUycnIEFORCAgIEFOWSAgRVhQUkVTUyBPUiBJTVBMSUVECisgKiAgV0FSUkFOVElF UywgICBJTkNMVURJTkcsIEJVVCBOT1QgIExJTUlURUQgIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5U SUVTIE9GCisgKiAgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIg UFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOCisgKiAgTk8gIEVWRU5UICBTSEFMTCAgIFRIRSBB VVRIT1IgIEJFICAgIExJQUJMRSBGT1IgQU5ZICAgRElSRUNULCBJTkRJUkVDVCwKKyAqICBJTkNJ REVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5D TFVESU5HLCBCVVQKKyAqICBOT1QgTElNSVRFRCAgIFRPLCBQUk9DVVJFTUVOVCBPRiAgU1VCU1RJ VFVURSBHT09EUyAgT1IgU0VSVklDRVM7IExPU1MgT0YKKyAqICBVU0UsIERBVEEsICBPUiBQUk9G SVRTOyBPUiAgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04KKyAq ICBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiAgQ09OVFJBQ1QsIFNUUklDVCBM SUFCSUxJVFksIE9SIFRPUlQKKyAqICAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF KSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YKKyAqICBUSElTIFNPRlRXQVJF LCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICoK KyAqICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSAgR05VIEdlbmVyYWwg UHVibGljIExpY2Vuc2UgYWxvbmcKKyAqICB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0 ZSAgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwKKyAqICA2NzUgTWFzcyBB dmUsIENhbWJyaWRnZSwgTUEgMDIxMzksIFVTQS4KKworICovCisKKworI2lmbmRlZiBJMkNfUFBD NDA1X0gKKyNkZWZpbmUgSTJDX1BQQzQwNV9IIDEKKworLyogQmFzZSBBZGRyZXNzICovCisjZGVm aW5lIFBQQzQwNUdQX0lJQ09fQkFTRSAgICAgMHhlZjYwMDUwMAorCisvKiBSZWdpc3RlcnMgKi8K KyNkZWZpbmUgSUlDT19NREJVRiAgICAgMHgwCisjZGVmaW5lIElJQ09fU0RCVUYgICAgIDB4Mgor I2RlZmluZSBJSUNPX0xNQURSICAgICAweDQKKyNkZWZpbmUgSUlDT19ITUFEUiAgICAgMHg1Cisj ZGVmaW5lIElJQ09fQ05UTCAgICAgIDB4NgorI2RlZmluZSBJSUNPX01EQ05UTCAgICAweDcKKyNk ZWZpbmUgSUlDT19TVFMgICAgICAgMHg4CisjZGVmaW5lIElJQ09fRVhUU1RTICAgIDB4OQorI2Rl ZmluZSBJSUNPX0xTQURSICAgICAweGEKKyNkZWZpbmUgSUlDT19IU0FEUiAgICAgMHhiCisjZGVm aW5lIElJQ09fQ0xLRElWICAgIDB4YworI2RlZmluZSBJSUNPX0lOVFJNU0sgICAweGQKKyNkZWZp bmUgSUlDT19YRlJDTlQgICAgMHhlCisjZGVmaW5lIElJQ09fWFRDTlRMU1MgIDB4ZgorI2RlZmlu ZSBJSUNPX0RJUkVDVENOVEwgICAgICAgIDB4MTAKKworCisjaWYgMAorLyoKKyAqIElJQ08gQ29u dHJvbCBSZWdpc3RlcgorICovCisKKy8qIEhNVCAqLworI2RlZmluZSBJSUNPX05PUk1BTF9UUkFO U0ZFUiAgIDB4MDAKKyNkZWZpbmUgSUlDT19JU1NVRV9TVE9QICAgICAgICAgICAgICAgIDB4ODAK KworLyogQU1EICovCisjZGVmaW5lIElJQ09fU0VWRU5fQklUX0FERFIgICAgMHgwMAorI2RlZmlu ZSBJSUNPX1RFTl9CSVRfQUREUiAgICAgIDB4NDAKKworLyogVENUICovCisjZGVmaW5lIElJQ09f VFJBTlNGRVJfMV9CWVRFICAgMHgwMAorI2RlZmluZSBJSUNPX1RSQU5TRkVSXzJfQllURVMgIDB4 MTAKKyNkZWZpbmUgSUlDT19UUkFOU0ZFUl8zX0JZVEVTICAweDIwCisjZGVmaW5lIElJQ09fVFJB TlNGRVJfNF9CWVRFUyAgMHgzMAorCisvKiBSUFNUICovCisjZGVmaW5lIElJQ09fTk9STUFMX1NU QVJUICAgICAgMHgwMAorI2RlZmluZSBJSUNPX1JFUEVBVEVEX1NUQVJUICAgIDB4MDgKKworLyog Q0hUICovCisjZGVmaW5lIElJQ09fU0lOR0xFX1RSQU5TRkVSICAgMHgwMAorI2RlZmluZSBJSUNP X1NFUVVFTkNFX1RSQU5TRkVSIDB4NDAKKworLyogUlcgKi8KKyNkZWZpbmUgSUlDT19XUklURSAg ICAgICAgICAgICAweDAwCisjZGVmaW5lIElJQ09fUkVBRCAgICAgICAgICAgICAgMHgyMAorCisv KiBQVCAqLworI2RlZmluZSBJSUNPX1NUQVJUX1RSQU5TRkVSICAgIDB4MDEKKworCisKKy8qCisg KiBJSUNPIE1vZGUgQ29udHJvbCBSZWdpc3RlcgorICovCisKKy8qIEZTREIgKi8KKyNkZWZpbmUg SUlDT19GTFVTSF9TTEFWRV9EQVRBX0JVRkZFUiAgIDB4ODAKKworLyogRk1EQiAqLworI2RlZmlu ZSBJSUNPX0ZMVVNIX01BU1RFUl9EQVRBX0JVRkZFUiAgMHg0MAorCisvKiBFR0MgKi8KKyNkZWZp bmUgSUlDT19FTkFCTEVfR0VORVJBTF9DQUxMICAgICAgIDB4MjAKKworLyogRlNNICovCisjZGVm aW5lIElJQ09fU1RBTkRBUkRfTU9ERSAgICAgICAgICAgICAweDAwICAvKiBUcmFuc2ZlcnMgYXQg MTAwIGtIeiAqLworI2RlZmluZSBJSUNPX0ZBU1RfTU9ERSAgICAgICAgICAgICAgICAgMHgxMCAg LyogVHJhbnNmZXJzIGF0IDQwMCBrSHogKi8KKworLyogRVNNICovCisjZGVmaW5lIElJQ09fRU5B QkxFX1NMQVZFX01PREUgICAgICAgICAweDA4CisKKy8qIEVJTlQgKi8KKyNkZWZpbmUgSUlDT19F TkFCTEVfSU5URVJSVVBUUyAgICAgICAgIDB4MDQKKworLyogRVVCUyAqLworI2RlZmluZSBJSUNP X0VYSVRfVU5LTk9XTl9CVVNfU1RBVEUgICAgMHgwMgorCisvKiBIU0NMICovCisKKyNlbmRpZgor CisjZW5kaWYgIC8qIEkyQ19QUEM0MDVfSCAqLwotLS0gL2Rldi9udWxsICAgMTk5NC0wNy0xNyAx OTo0NjoxOC4wMDAwMDAwMDAgLTA0MDAKKysrIGxpbnV4L2luY2x1ZGUvbGludXgvaTJjLXBwYzQw NWFkYXAuaCAgICAgICAgMjAwMS0wNS0zMCAyMzoxMzoyNS4wMDAwMDAwMDAgLTA0MDAKQEAgLTAs MCArMSw0NiBAQAorLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworLyogaTJjLXBwYzQwNWFkYXAuaCBp MmMtaHcgYWNjZXNzIGZvciBJQk0gUFBDIDQwNSBJSUMgYnVzIGFkYXB0ZXJzICAgICAgICAgICAq LworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworLyogICBDb3B5cmlnaHQgKEMpIDE5OTUtOTcgU2lt b24gRy4gVm9nbAorICAgICAgICAgICAgICAgICAgIDE5OTgtOTkgSGFucyBCZXJnbHVuZAorCisg ICAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0 IGFuZC9vciBtb2RpZnkKKyAgICBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFs IFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICAgIHRoZSBGcmVlIFNvZnR3YXJlIEZv dW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisgICAgKGF0IHlv dXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKworICAgIFRoaXMgcHJvZ3JhbSBpcyBkaXN0 cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICAgIGJ1dCBXSVRI T1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisg ICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAg U2VlIHRoZQorICAgIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMu CisKKyAgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJh bCBQdWJsaWMgTGljZW5zZQorICAgIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdy aXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgICAgRm91bmRhdGlvbiwgSW5jLiwgNjc1IE1hc3Mg QXZlLCBDYW1icmlkZ2UsIE1BIDAyMTM5LCBVU0EuICAgICAgICAgICAgICAgICovCisvKiAtLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tICovCisKKy8qIFdpdGggc29tZSBjaGFuZ2VzIGZyb20gS3k/c3RpIE0/bGtr aSA8a21hbGtraUBjYy5odXQuZmk+IGFuZCBldmVuCisgICBGcm9kbyBMb29pamFhcmQgPGZyb2Rv bEBkZHMubmw+ICovCisKKy8qIE1vZGlmaWVkIGJ5IE1vbnRhVmlzdGEgU29mdHdhcmUsIEF1Z3Vz dCAyMDAwCisgICBBZGRlZCBzdXBwb3J0IGZvciB0aGUgSUlDIHBlcmlwaGVyYWwgb24gdGhlIElC TSBQUEMgNDA1ICovCisKKy8qICRJZDogaTJjLXBwYzQwNWFkYXAuaCx2IDEuMSAyMDAxLzA1LzMx IDAzOjEzOjI1IG1kcyBFeHAgJCAqLworCisjaWZuZGVmIEkyQ19QUEM0MDVBREFQX0gKKyNkZWZp bmUgSTJDX1BQQzQwNUFEQVBfSCAxCisKKy8qCisgKiBUaGlzIHN0cnVjdCBjb250YWlucyB0aGUg aHctZGVwZW5kZW50IGZ1bmN0aW9ucyBvZiBJQk0gUFBDIDQwNSBJSUMgYWRhcHRlcnMgCisgKiB0 byBtYW5pcHVsYXRlIHRoZSByZWdpc3RlcnMsIGFuZCB0byBpbml0IGFueSBody1zcGVjaWZpYyBm ZWF0dXJlcy4gCisgKi8KKworc3RydWN0IGlpY19wcGM0MDUgeworICAgICAgIGludCBpaWNfYmFz ZTsKKyAgICAgICBpbnQgaWljX2lycTsKKyAgICAgICBpbnQgaWljX2Nsb2NrOworICAgICAgIGlu dCBpaWNfb3duOworfTsKKworCisjZW5kaWYgLyogSTJDX0lCTTQwNUFEQVBfSCAqLwotLS0gbGlu dXgvZHJpdmVycy9pMmMvaTJjLXBwb3J0LmMub3JpZyAgMTk2OS0xMi0zMSAxOTowMDowMC4wMDAw MDAwMDAgLTA1MDAKKysrIGxpbnV4L2RyaXZlcnMvaTJjL2kyYy1wcG9ydC5jICAgICAgIDIwMDIt MDUtMTQgMTg6MDM6MTkuMDAwMDAwMDAwIC0wNDAwCkBAIC0wLDAgKzEsMjU0IEBACisvKiAtLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tICovCisvKiBpMmMtcHBvcnQuYyBpMmMtaHcgYWNjZXNzICBmb3IgcHJpbWl0 aXZlIGkyYyBwYXIuIHBvcnQgYWRhcHRlciAgICAgICAgICAgKi8KKy8qIC0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0gKi8KKy8qICAgQ29weXJpZ2h0IChDKSAyMDAxICAgIERhbmllbCBTbW9saWsKKworICAgIFRo aXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQv b3IgbW9kaWZ5CisgICAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJs aWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAgICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0 aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICAgIChhdCB5b3VyIG9w dGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisKKyAgICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0 ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAgICBidXQgV0lUSE9VVCBB TlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICAgIE1F UkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0 aGUKKyAgICBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisg ICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVi bGljIExpY2Vuc2UKKyAgICBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0 byB0aGUgRnJlZSBTb2Z0d2FyZQorICAgIEZvdW5kYXRpb24sIEluYy4sIDY3NSBNYXNzIEF2ZSwg Q2FtYnJpZGdlLCBNQSAwMjEzOSwgVVNBLiAgICAgICAgICAgICAgICovCisvKiAtLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tICovCisKKy8qCisgICAgICAgU2VlIGRvYy9pMmMtcHBvcnQgZm9yIGluc3RydWN0aW9u cyBvbiB3aXJpbmcgdG8gdGhlCisgICAgICAgcGFyYWxsZWwgcG9ydCBjb25uZWN0b3IuCisKKyAg ICAgICBDdXQgJiBwYXN0ZSA6LSkgIGJhc2VkIG9uIFZlbGxlbWFuIEs5MDAwIGRyaXZlciBieSBT aW1vbiBHLiBWb2dsCisqLworCisKKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKyNpbmNsdWRl IDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgorI2luY2x1ZGUgPGxp bnV4L3NsYWIuaD4KKyNpbmNsdWRlIDxsaW51eC92ZXJzaW9uLmg+CisjaW5jbHVkZSA8bGludXgv aW5pdC5oPgorI2luY2x1ZGUgPGFzbS91YWNjZXNzLmg+CisjaW5jbHVkZSA8bGludXgvaW9wb3J0 Lmg+CisjaW5jbHVkZSA8YXNtL2lvLmg+CisjaW5jbHVkZSA8bGludXgvZXJybm8uaD4KKyNpbmNs dWRlIDxsaW51eC9pMmMuaD4KKyNpbmNsdWRlIDxsaW51eC9pMmMtYWxnby1iaXQuaD4KKworI2lm ZGVmIE1PRFVMRV9MSUNFTlNFCitNT0RVTEVfTElDRU5TRSgiR1BMIik7CisjZW5kaWYKKworI2Rl ZmluZSBERUZBVUxUX0JBU0UgMHgzNzgKK3N0YXRpYyBpbnQgYmFzZT0wOworc3RhdGljIHVuc2ln bmVkIGNoYXIgUG9ydERhdGEgPSAwOworCisvKiAtLS0tLSBnbG9iYWwgZGVmaW5lcyAtLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAgICAgICAgKi8KKyNkZWZp bmUgREVCKHgpICAgICAgICAgLyogc2hvdWxkIGJlIHJlYXNvbmFibGUgb3BlbiwgY2xvc2UgJmMu ICAgICAgICAgKi8KKyNkZWZpbmUgREVCMih4KSAgICAgICAgLyogbG93IGxldmVsIGRlYnVnZ2lu ZyAtIHZlcnkgc2xvdyAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgREVCRSh4KSAgICAgICAgeCAg ICAgICAvKiBlcnJvciBtZXNzYWdlcyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwor I2RlZmluZSBERUJJTklUKHgpIHggICAvKiBkZXRlY3Rpb24gc3RhdHVzIG1lc3NhZ2VzICAgICAg ICAgICAgICAgICAgICAqLworCisvKiAtLS0gQ29udmVuaWVuY2UgZGVmaW5lcyBmb3IgdGhlIHBh cmFsbGVsIHBvcnQ6ICAgICAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIEJBU0UgICAodW5z aWduZWQgaW50KShkYXRhKQorI2RlZmluZSBEQVRBICAgQkFTRSAgICAgICAgICAgICAgICAgICAg LyogQ2VudHJvbmljcyBkYXRhIHBvcnQgICAgICAgICAqLworI2RlZmluZSBTVEFUICAgKEJBU0Ur MSkgICAgICAgICAgICAgICAgLyogQ2VudHJvbmljcyBzdGF0dXMgcG9ydCAgICAgICAqLworI2Rl ZmluZSBDVFJMICAgKEJBU0UrMikgICAgICAgICAgICAgICAgLyogQ2VudHJvbmljcyBjb250cm9s IHBvcnQgICAgICAqLworCisvKiB3ZSB3aWxsIHVzZSBTREEgIC0gQXV0byBMaW5lZmVlZCgxNCkg ICBiaXQgMSAgUE9VVCAgICovCisvKiB3ZSB3aWxsIHVzZSBTQ0wgLSBJbml0aWFsaXplIHByaW50 ZXIoMTYpICAgIEJVU1kgYml0IDIqLworCisjZGVmaW5lICBTRVRfU0NMICAgIHwgMHgwNAorI2Rl ZmluZSAgQ0xSX1NDTCAgICAmIDB4RkIKKworCisKKworI2RlZmluZSAgU0VUX1NEQSAgICAmIDB4 MDQKKyNkZWZpbmUgIENMUl9TREEgICAgfCAweDAyCisKKworLyogLS0tLS0gbG9jYWwgZnVuY3Rp b25zIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gICAgICAg ICovCisKKworc3RhdGljIHZvaWQgYml0X3Bwb3J0X3NldHNjbCh2b2lkICpkYXRhLCBpbnQgc3Rh dGUpCit7CisgICAgICAgaWYgKHN0YXRlKSB7CisgICAgICAgICAgICAgICAvL2hpZ2gKKyAgICAg ICAgICAgICAgIFBvcnREYXRhID0gUG9ydERhdGEgU0VUX1NDTDsKKyAgICAgICB9IGVsc2Ugewor ICAgICAgICAgICAgICAgLy9sb3cKKyAgICAgICAgICAgICAgIFBvcnREYXRhID0gUG9ydERhdGEg Q0xSX1NDTDsgCisgICAgICAgfQorICAgICAgIG91dGIoUG9ydERhdGEsIENUUkwpOworfQorCitz dGF0aWMgdm9pZCBiaXRfcHBvcnRfc2V0c2RhKHZvaWQgKmRhdGEsIGludCBzdGF0ZSkKK3sKKyAg ICAgICBpZiAoc3RhdGUpIHsKKyAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgUG9ydERh dGEgPSBQb3J0RGF0YSBTRVRfU0RBOworICAgICAgIH0gZWxzZSB7CisKKyAgICAgICAgICAgICAg IFBvcnREYXRhID0gUG9ydERhdGEgQ0xSX1NEQTsKKyAgICAgICB9CisgICAgICAgb3V0YihQb3J0 RGF0YSwgQ1RSTCk7Cit9IAorCitzdGF0aWMgaW50IGJpdF9wcG9ydF9nZXRzY2wodm9pZCAqZGF0 YSkKK3sKKworICAgICAgIHJldHVybiAoIDQgPSAoIChpbmJfcChDVFJMKSkgJiAweDA0ICkgKTsK K30KKworc3RhdGljIGludCBiaXRfcHBvcnRfZ2V0c2RhKHZvaWQgKmRhdGEpCit7CisgICAgICAg cmV0dXJuICggMCA9ICggKGluYl9wKENUUkwpKSAmIDB4MDIgKSApOworfQorCitzdGF0aWMgaW50 IGJpdF9wcG9ydF9pbml0KHZvaWQpCit7CisgICAgICAgLy9yZWxlYXNlX3JlZ2lvbiggKGJhc2Ur MikgLDEpOworCisgICAgICAgaWYgKGNoZWNrX3JlZ2lvbigoYmFzZSsyKSwxKSA8IDAgKSB7Cisg ICAgICAgICAgICAgICByZXR1cm4gLUVOT0RFVjsgCisgICAgICAgfSBlbHNlIHsKKworICAgICAg ICAgICAgICAgLyogdGVzdCBmb3IgUFBPUlQgYWRhcC4gICAgICAgICAqLworICAgICAgIAorCisg ICAgICAgICAgICAgICBQb3J0RGF0YT1pbmIoYmFzZSsyKTsKKyAgICAgICAgICAgICAgIFBvcnRE YXRhPSAoUG9ydERhdGEgU0VUX1NEQSkgU0VUX1NDTDsKKyAgICAgICAgICAgICAgIG91dGIoUG9y dERhdGEsYmFzZSsyKTsgICAgICAgICAgICAgICAgICAgICAgICAgIAorCisgICAgICAgICAgICAg ICBpZiAoIShpbmIoYmFzZSsyKSB8IDB4MDYpKSB7ICAgIC8qIFNEQSBhbmQgU0NMIHdpbGwgYmUg aGlnaCAgICAgKi8KKyAgICAgICAgICAgICAgICAgICAgICAgREVCSU5JVChwcmludGsoImkyYy1w cG9ydC5vOiBTREEgYW5kIFNDTCB3YXMgbG93LlxuIikpOworICAgICAgICAgICAgICAgICAgICAg ICByZXR1cm4gLUVOT0RFVjsKKyAgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAg ICAKKyAgICAgICAgICAgICAgICAgICAgICAgLypTQ0wgaGlnaCBhbmQgU0RBIGxvdyovCisgICAg ICAgICAgICAgICAgICAgICAgIFBvcnREYXRhID0gUG9ydERhdGEgU0VUX1NDTCBDTFJfU0RBOwor ICAgICAgICAgICAgICAgICAgICAgICBvdXRiKFBvcnREYXRhLGJhc2UrMik7ICAKKyAgICAgICAg ICAgICAgICAgICAgICAgdWRlbGF5KDQwMCk7CisgICAgICAgICAgICAgICAgICAgICAgIGlmICgg IShpbmIoYmFzZSsyKSB8IDB4NCkgKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg Ly9vdXRiKDB4MDQsYmFzZSsyKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBERUJJ TklUKHByaW50aygiaTJjLXBvcnQubzogU0RBIHdhcyBoaWdoLlxuIikpOworICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIHJldHVybiAtRU5PREVWOworICAgICAgICAgICAgICAgICAgICAg ICB9CisgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICByZXF1ZXN0X3JlZ2lvbigoYmFz ZSsyKSwxLAorICAgICAgICAgICAgICAgICAgICAgICAiaTJjIChQUE9SVCBhZGFwdGVyKSIpOwor ICAgICAgICAgICAgICAgYml0X3Bwb3J0X3NldHNkYSgodm9pZCopYmFzZSwxKTsKKyAgICAgICAg ICAgICAgIGJpdF9wcG9ydF9zZXRzY2woKHZvaWQqKWJhc2UsMSk7CisgICAgICAgfQorICAgICAg IHJldHVybiAwOworfQorCitzdGF0aWMgdm9pZCBiaXRfcHBvcnRfZXhpdCh2b2lkKQoreworICAg ICAgIHJlbGVhc2VfcmVnaW9uKChiYXNlKzIpLDEpOworfQorCitzdGF0aWMgaW50IGJpdF9wcG9y dF9yZWcoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCkKK3sKKyAgICAgICByZXR1cm4gMDsKK30K Kworc3RhdGljIGludCBiaXRfcHBvcnRfdW5yZWcoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCkK K3sKKyAgICAgICByZWxlYXNlX3JlZ2lvbigoYmFzZSsyKSwxKTsKKyAgICAgICByZXR1cm4gMDsK K30KKworc3RhdGljIHZvaWQgYml0X3Bwb3J0X2luY191c2Uoc3RydWN0IGkyY19hZGFwdGVyICph ZGFwKQoreworI2lmZGVmIE1PRFVMRQorICAgICAgIE1PRF9JTkNfVVNFX0NPVU5UOworI2VuZGlm Cit9CisKK3N0YXRpYyB2b2lkIGJpdF9wcG9ydF9kZWNfdXNlKHN0cnVjdCBpMmNfYWRhcHRlciAq YWRhcCkKK3sKKyNpZmRlZiBNT0RVTEUKKyAgICAgICBNT0RfREVDX1VTRV9DT1VOVDsKKyNlbmRp ZgorfQorCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqIEVuY2Fwc3VsYXRlIHRoZSBhYm92ZSBmdW5j dGlvbnMgaW4gdGhlIGNvcnJlY3Qgb3BlcmF0aW9ucyBzdHJ1Y3R1cmUuCisgKiBUaGlzIGlzIG9u bHkgZG9uZSB3aGVuIG1vcmUgdGhhbiBvbmUgaGFyZHdhcmUgYWRhcHRlciBpcyBzdXBwb3J0ZWQu CisgKi8KK3N0YXRpYyBzdHJ1Y3QgaTJjX2FsZ29fYml0X2RhdGEgYml0X3Bwb3J0X2RhdGEgPSB7 CisgICAgICAgTlVMTCwKKyAgICAgICBiaXRfcHBvcnRfc2V0c2RhLAorICAgICAgIGJpdF9wcG9y dF9zZXRzY2wsCisgICAgICAgYml0X3Bwb3J0X2dldHNkYSwKKyAgICAgICBiaXRfcHBvcnRfZ2V0 c2NsLAorICAgICAgIC8vTlVMTCwKKyAgICAgICA0MCwgODAsIDEwMCwgICAgICAgICAgICAvKiAg ICAgIHdhaXRzLCB0aW1lb3V0ICovCit9OworCitzdGF0aWMgc3RydWN0IGkyY19hZGFwdGVyIGJp dF9wcG9ydF9vcHMgPSB7CisgICAgICAgIlByaW1pdGl2ZSBQYXJhbGxlbCBwb3J0IGFkYXB0b3Ii LAorICAgICAgIEkyQ19IV19CX1BQT1JULAorICAgICAgIE5VTEwsCisgICAgICAgJmJpdF9wcG9y dF9kYXRhLAorICAgICAgIGJpdF9wcG9ydF9pbmNfdXNlLAorICAgICAgIGJpdF9wcG9ydF9kZWNf dXNlLAorICAgICAgIGJpdF9wcG9ydF9yZWcsCisgICAgICAgYml0X3Bwb3J0X3VucmVnLCAgICAg ICAgCit9OworCitzdGF0aWMgaW50IF9faW5pdCBpMmNfYml0cHBvcnRfaW5pdCh2b2lkKQorewor ICAgICAgIHByaW50aygiaTJjLXBwb3J0Lm86IGkyYyBQcmltaXRpdmUgcGFyYWxsZWwgcG9ydCBh ZGFwdGVyIG1vZHVsZSB2ZXJzaW9uICVzICglcylcbiIsIEkyQ19WRVJTSU9OLCBJMkNfREFURSk7 CisKKyAgICAgICBpZiAoYmFzZT0wKSB7CisgICAgICAgICAgICAgICAvKiBwcm9iZSBzb21lIHZh bHVlcyAqLworICAgICAgICAgICAgICAgYmFzZd5GQVVMVF9CQVNFOworICAgICAgICAgICAgICAg Yml0X3Bwb3J0X2RhdGEuZGF0YT0odm9pZCopREVGQVVMVF9CQVNFOworICAgICAgICAgICAgICAg aWYgKGJpdF9wcG9ydF9pbml0KCk9MCkgeworICAgICAgICAgICAgICAgICAgICAgICBpZihpMmNf Yml0X2FkZF9idXMoJmJpdF9wcG9ydF9vcHMpIDwgMCkKKyAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICByZXR1cm4gLUVOT0RFVjsKKyAgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAg ICAgICAgICAgICAgICAgIHJldHVybiAtRU5PREVWOworICAgICAgICAgICAgICAgfQorICAgICAg IH0gZWxzZSB7CisgICAgICAgICAgICAgICBiaXRfcHBvcnRfZGF0YS5kYXRhPSh2b2lkKiliYXNl OworICAgICAgICAgICAgICAgaWYgKGJpdF9wcG9ydF9pbml0KCk9MCkgeworICAgICAgICAgICAg ICAgICAgICAgICBpZihpMmNfYml0X2FkZF9idXMoJmJpdF9wcG9ydF9vcHMpIDwgMCkKKyAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gLUVOT0RFVjsKKyAgICAgICAgICAgICAg IH0gZWxzZSB7CisgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAtRU5PREVWOworICAgICAg ICAgICAgICAgfQorICAgICAgIH0KKyAgICAgICBwcmludGsoImkyYy1wcG9ydC5vOiBmb3VuZCBk ZXZpY2UgYXQgJSN4LlxuIixiYXNlKTsKKyAgICAgICByZXR1cm4gMDsKK30KKworCitFWFBPUlRf Tk9fU1lNQk9MUzsKKworI2lmZGVmIE1PRFVMRQorTU9EVUxFX0FVVEhPUigiRGFuaWVsIFNtb2xp ayA8bWFydmluQHNpdG91ci5jej4iKTsKK01PRFVMRV9ERVNDUklQVElPTigiSTJDLUJ1cyBhZGFw dGVyIHJvdXRpbmVzIGZvciBQcmltaXRpdmUgcGFyYWxsZWwgcG9ydCBhZGFwdGVyIikKKzsKKwor TU9EVUxFX1BBUk0oYmFzZSwgImkiKTsKKworaW50IGluaXRfbW9kdWxlKHZvaWQpCit7CisgICAg ICAgcmV0dXJuIGkyY19iaXRwcG9ydF9pbml0KCk7Cit9CisKK3ZvaWQgY2xlYW51cF9tb2R1bGUo dm9pZCkKK3sKKyAgICAgICBpMmNfYml0X2RlbF9idXMoJmJpdF9wcG9ydF9vcHMpOworICAgICAg IGJpdF9wcG9ydF9leGl0KCk7Cit9CisKKyNlbmRpZgotLS0gbGludXgvZHJpdmVycy9pMmMvaTJj LXJweC5jLm9yaWcgICAgMTk2OS0xMi0zMSAxOTowMDowMC4wMDAwMDAwMDAgLTA1MDAKKysrIGxp bnV4L2RyaXZlcnMvaTJjL2kyYy1ycHguYyAyMDAxLTA5LTA4IDEyOjI3OjAzLjAwMDAwMDAwMCAt MDQwMApAQCAtMCwwICsxLDEzMyBAQAorLyoKKyAqIEVtYmVkZGVkIFBsYW5ldCBSUFggTGl0ZSBN UEM4eHggQ1BNIEkyQyBpbnRlcmZhY2UuCisgKiBDb3B5cmlnaHQgKGMpIDE5OTkgRGFuIE1hbGVr IChkbWFsZWtAamxjLm5ldCkuCisgKgorICogbW92ZWQgaW50byBwcm9wZXIgaTJjIGludGVyZmFj ZTsKKyAqIEJyYWQgUGFya2VyIChicmFkQGhlZWx0b2UuY29tKQorICoKKyAqIFJQWCBsaXRlIHNw ZWNpZmljIHBhcnRzIG9mIHRoZSBpMmMgaW50ZXJmYWNlCisgKi8KKworI2luY2x1ZGUgPGxpbnV4 L2tlcm5lbC5oPgorI2luY2x1ZGUgPGxpbnV4L2lvcG9ydC5oPgorI2luY2x1ZGUgPGxpbnV4L21v ZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxsaW51eC9zdGRkZWYu aD4KKyNpbmNsdWRlIDxsaW51eC9wYXJwb3J0Lmg+CisKKyNpbmNsdWRlIDxhc20vbXBjOHh4Lmg+ CisjaW5jbHVkZSAiLi4vLi4vYXJjaC9wcGMvOHh4X2lvL2NvbW1wcm9jLmgiCisKKyNpbmNsdWRl IDxsaW51eC9pMmMuaD4KKyNpbmNsdWRlIDxsaW51eC9pMmMtYWxnby04eHguaD4KKworc3RhdGlj IHZvaWQKK3JweF9paWNfaW5pdChzdHJ1Y3QgaTJjX2FsZ29fOHh4X2RhdGEgKmRhdGEpCit7Cisg ICAgICAgdm9sYXRpbGUgY3BtOHh4X3QgKmNwOworICAgICAgIHZvbGF0aWxlIGltbWFwX3QgKmlt bWFwOworCisgICAgICAgY3AgPSBjcG1wOyAgICAgIC8qIEdldCBwb2ludGVyIHRvIENvbW11bmlj YXRpb24gUHJvY2Vzc29yICovCisgICAgICAgaW1tYXAgPSAoaW1tYXBfdCAqKUlNQVBfQUREUjsg ICAvKiBhbmQgdG8gaW50ZXJuYWwgcmVnaXN0ZXJzICovCisKKyAgICAgICBkYXRhLT5paXAgPSAo aWljX3QgKikmY3AtPmNwX2RwYXJhbVtQUk9GRl9JSUNdOworCisgICAgICAgLyogQ2hlY2sgZm9y IGFuZCB1c2UgYSBtaWNyb2NvZGUgcmVsb2NhdGlvbiBwYXRjaC4KKyAgICAgICAqLworICAgICAg IGlmICgoZGF0YS0+cmVsb2MgPSBkYXRhLT5paXAtPmlpY19ycGJhc2UpKQorICAgICAgICAgICAg ICAgZGF0YS0+aWlwID0gKGlpY190ICopJmNwLT5jcF9kcG1lbVtkYXRhLT5paXAtPmlpY19ycGJh c2VdOworICAgICAgICAgICAgICAgCisgICAgICAgZGF0YS0+aTJjID0gKGkyYzh4eF90ICopJihp bW1hcC0+aW1faTJjKTsKKyAgICAgICBkYXRhLT5jcCA9IGNwOworCisgICAgICAgLyogSW5pdGlh bGl6ZSBQb3J0IEIgSUlDIHBpbnMuCisgICAgICAgKi8KKyAgICAgICBjcC0+Y3BfcGJwYXIgfD0g MHgwMDAwMDAzMDsKKyAgICAgICBjcC0+Y3BfcGJkaXIgfD0gMHgwMDAwMDAzMDsKKyAgICAgICBj cC0+Y3BfcGJvZHIgfD0gMHgwMDAwMDAzMDsKKworICAgICAgIC8qIEFsbG9jYXRlIHNwYWNlIGZv ciB0d28gdHJhbnNtaXQgYW5kIHR3byByZWNlaXZlIGJ1ZmZlcgorICAgICAgICAqIGRlc2NyaXB0 b3JzIGluIHRoZSBEUCByYW0uCisgICAgICAgICovCisgICAgICAgZGF0YS0+ZHBfYWRkciA9IG04 eHhfY3BtX2RwYWxsb2Moc2l6ZW9mKGNiZF90KSAqIDQpOworCisgICAgICAgLyogcHRyIHRvIGky YyBhcmVhICovCisgICAgICAgZGF0YS0+aTJjID0gKGkyYzh4eF90ICopJigoKGltbWFwX3QgKilJ TUFQX0FERFIpLT5pbV9pMmMpOworfQorCitzdGF0aWMgaW50IHJweF9pbnN0YWxsX2lzcihpbnQg aXJxLCB2b2lkICgqZnVuYykodm9pZCAqKSwgdm9pZCAqZGF0YSkKK3sKKyAgICAgICAvKiBpbnN0 YWxsIGludGVycnVwdCBoYW5kbGVyICovCisgICAgICAgY3BtX2luc3RhbGxfaGFuZGxlcihpcnEs IGZ1bmMsIGRhdGEpOworCisgICAgICAgcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgcnB4X3Jl ZyhzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50KQoreworICAgICAgIHJldHVybiAwOworfQorCitz dGF0aWMgaW50IHJweF91bnJlZyhzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50KQoreworICAgICAg IHJldHVybiAwOworfQorCitzdGF0aWMgdm9pZCBycHhfaW5jX3VzZShzdHJ1Y3QgaTJjX2FkYXB0 ZXIgKmFkYXApCit7CisjaWZkZWYgTU9EVUxFCisgICAgICAgTU9EX0lOQ19VU0VfQ09VTlQ7Cisj ZW5kaWYKK30KKworc3RhdGljIHZvaWQgcnB4X2RlY191c2Uoc3RydWN0IGkyY19hZGFwdGVyICph ZGFwKQoreworI2lmZGVmIE1PRFVMRQorICAgICAgIE1PRF9ERUNfVVNFX0NPVU5UOworI2VuZGlm Cit9CisKK3N0YXRpYyBzdHJ1Y3QgaTJjX2FsZ29fOHh4X2RhdGEgcnB4X2RhdGEgPSB7CisgICAg ICAgc2V0aXNyOiBycHhfaW5zdGFsbF9pc3IKK307CisKKworc3RhdGljIHN0cnVjdCBpMmNfYWRh cHRlciBycHhfb3BzID0geworICAgICAgICJycHgiLAorICAgICAgIEkyQ19IV19NUEM4WFhfRVBP TiwKKyAgICAgICBOVUxMLAorICAgICAgICZycHhfZGF0YSwKKyAgICAgICBycHhfaW5jX3VzZSwK KyAgICAgICBycHhfZGVjX3VzZSwKKyAgICAgICBycHhfcmVnLAorICAgICAgIHJweF91bnJlZywK K307CisKK2ludCBfX2luaXQgaTJjX3JweF9pbml0KHZvaWQpCit7CisgICAgICAgcHJpbnRrKCJp MmMtcnB4Lm86IGkyYyBSUFggTGl0ZSBtb2R1bGUgdmVyc2lvbiAlcyAoJXMpXG4iLCBJMkNfVkVS U0lPTiwgSTJDX0RBVEUpOworCisgICAgICAgLyogcmVzZXQgaGFyZHdhcmUgdG8gc2FuZSBzdGF0 ZSAqLworICAgICAgIHJweF9paWNfaW5pdCgmcnB4X2RhdGEpOworCisgICAgICAgaWYgKGkyY184 eHhfYWRkX2J1cygmcnB4X29wcykgPCAwKSB7CisgICAgICAgICAgICAgICBwcmludGsoImkyYy1y cHg6IFVuYWJsZSB0byByZWdpc3RlciB3aXRoIEkyQ1xuIik7CisgICAgICAgICAgICAgICByZXR1 cm4gLUVOT0RFVjsKKyAgICAgICB9CisKKyAgICAgICByZXR1cm4gMDsKK30KKwordm9pZCBfX2V4 aXQgaTJjX3JweF9leGl0KHZvaWQpCit7CisgICAgICAgaTJjXzh4eF9kZWxfYnVzKCZycHhfb3Bz KTsKK30KKworI2lmZGVmIE1PRFVMRQorTU9EVUxFX0FVVEhPUigiRGFuIE1hbGVrIDxkbWFsZWtA amxjLm5ldD4iKTsKK01PRFVMRV9ERVNDUklQVElPTigiSTJDLUJ1cyBhZGFwdGVyIHJvdXRpbmVz IGZvciBFUCBSUFggTGl0ZSIpOworCittb2R1bGVfaW5pdChpMmNfcnB4X2luaXQpOworbW9kdWxl X2V4aXQoaTJjX3JweF9leGl0KTsKKyNlbmRpZgorCi0tLSBsaW51eC9kcml2ZXJzL2kyYy9pMmMt dmVsbGVtYW4uYy5vcmlnICAgICAgIDIwMDItMDUtMDkgMTg6MjM6MDYuMDAwMDAwMDAwIC0wNDAw CisrKyBsaW51eC9kcml2ZXJzL2kyYy9pMmMtdmVsbGVtYW4uYyAgICAyMDAyLTA1LTE0IDE4OjA0 OjExLjAwMDAwMDAwMCAtMDQwMApAQCAtMTgsNyArMTgsNyBAQAogICAgIEZvdW5kYXRpb24sIElu Yy4sIDY3NSBNYXNzIEF2ZSwgQ2FtYnJpZGdlLCBNQSAwMjEzOSwgVVNBLiAgICAgICAgICAgICAg ICovCiAvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCiAKLS8qICRJZDogaTJjLXZlbGxlbWFuLmMsdiAx LjE5IDIwMDAvMDEvMjQgMDI6MDY6MzMgbWRzIEV4cCAkICovCisvKiAkSWQ6IGkyYy12ZWxsZW1h bi5jLHYgMS4yMyAyMDAxLzExLzE5IDE4OjQ1OjAyIG1kcyBFeHAgJCAqLwogCiAjaW5jbHVkZSA8 bGludXgva2VybmVsLmg+CiAjaW5jbHVkZSA8bGludXgvaW9wb3J0Lmg+CkBAIC0yNyw3ICsyNyw2 IEBACiAjaW5jbHVkZSA8bGludXgvc3RyaW5nLmg+ICAvKiBmb3IgMi4wIGtlcm5lbHMgdG8gZ2V0 IE5VTEwgICAqLwogI2luY2x1ZGUgPGFzbS9lcnJuby5oPiAgICAgLyogZm9yIDIuMCBrZXJuZWxz IHRvIGdldCBFTk9ERVYgKi8KICNpbmNsdWRlIDxhc20vaW8uaD4KLQogI2luY2x1ZGUgPGxpbnV4 L2kyYy5oPgogI2luY2x1ZGUgPGxpbnV4L2kyYy1hbGdvLWJpdC5oPgogCkBAIC05MSw3ICs5MCw3 IEBACiBzdGF0aWMgaW50IGJpdF92ZWxsZV9pbml0KHZvaWQpCiB7CiAgICAgICAgaWYgKGNoZWNr X3JlZ2lvbihiYXNlLChiYXNlID0gMHgzYmMpPyAzIDogOCkgPCAwICkgewotICAgICAgICAgICAg ICAgREVCRShwcmludGsoImkyYy12ZWxsZW1hbi5vOiBQb3J0ICUjeCBhbHJlYWR5IGluIHVzZS5c biIsCisgICAgICAgICAgICAgICBERUJFKHByaW50ayhLRVJOX0RFQlVHICJpMmMtdmVsbGVtYW4u bzogUG9ydCAlI3ggYWxyZWFkeSBpbiB1c2UuXG4iLAogICAgICAgICAgICAgICAgICAgICBiYXNl KSk7CiAgICAgICAgICAgICAgICByZXR1cm4gLUVOT0RFVjsKICAgICAgICB9IGVsc2UgewpAQCAt MTAzLDcgKzEwMiw3IEBACiAgICAgICAgcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyB2b2lkIF9fZXhp dCBiaXRfdmVsbGVfZXhpdCh2b2lkKQorc3RhdGljIHZvaWQgYml0X3ZlbGxlX2V4aXQodm9pZCkK IHsgICAgICAKICAgICAgICByZWxlYXNlX3JlZ2lvbiggYmFzZSAsIChiYXNlID0gMHgzYmMpPyAz IDogOCApOwogfQpAQCAtMTYwLDcgKzE1OSw3IEBACiAKIGludCBfX2luaXQgIGkyY19iaXR2ZWxs ZV9pbml0KHZvaWQpCiB7Ci0gICAgICAgcHJpbnRrKCJpMmMtdmVsbGVtYW4ubzogaTJjIFZlbGxl bWFuIEs4MDAwIGFkYXB0ZXIgbW9kdWxlXG4iKTsKKyAgICAgICBwcmludGsoS0VSTl9JTkZPICJp MmMtdmVsbGVtYW4ubzogaTJjIFZlbGxlbWFuIEs4MDAwIGFkYXB0ZXIgbW9kdWxlIHZlcnNpb24g JXMgKCVzKVxuIiwgSTJDX1ZFUlNJT04sIEkyQ19EQVRFKTsKICAgICAgICBpZiAoYmFzZT0wKSB7 CiAgICAgICAgICAgICAgICAvKiBwcm9iZSBzb21lIHZhbHVlcyAqLwogICAgICAgICAgICAgICAg YmFzZd5GQVVMVF9CQVNFOwpAQCAtMTgwLDcgKzE3OSw3IEBACiAgICAgICAgICAgICAgICAgICAg ICAgIHJldHVybiAtRU5PREVWOwogICAgICAgICAgICAgICAgfQogICAgICAgIH0KLSAgICAgICBw cmludGsoImkyYy12ZWxsZW1hbi5vOiBmb3VuZCBkZXZpY2UgYXQgJSN4LlxuIixiYXNlKTsKKyAg ICAgICBwcmludGsoS0VSTl9ERUJVRyAiaTJjLXZlbGxlbWFuLm86IGZvdW5kIGRldmljZSBhdCAl I3guXG4iLGJhc2UpOwogICAgICAgIHJldHVybiAwOwogfQogCkBAIC0xODksNyArMTg4LDkgQEAK ICNpZmRlZiBNT0RVTEUKIE1PRFVMRV9BVVRIT1IoIlNpbW9uIEcuIFZvZ2wgPHNpbW9uQHRrLnVu aS1saW56LmFjLmF0PiIpOwogTU9EVUxFX0RFU0NSSVBUSU9OKCJJMkMtQnVzIGFkYXB0ZXIgcm91 dGluZXMgZm9yIFZlbGxlbWFuIEs4MDAwIGFkYXB0ZXIiKTsKKyNpZmRlZiBNT0RVTEVfTElDRU5T RQogTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOworI2VuZGlmCiAKIE1PRFVMRV9QQVJNKGJhc2UsICJp Iik7CiAKLS0gCkFsYmVydCBDcmFuZm9yZCBEZWVyZmllbGQgQmVhY2ggRkwgVVNBCmFjOTQxMEBi ZWxsc291dGgubmV0Cg==