ZGlmZiAtLWdpdCBhL0NIQU5HRUxPRy5tZCBiL0NIQU5HRUxPRy5tZAppbmRleCAwYWU3NWUxLi5iY2Y4MTYwIDEwMDY0NAotLS0gYS9DSEFOR0VMT0cubWQKKysrIGIvQ0hBTkdFTE9HLm1kCkBAIC05LDYgKzksMTAgQEAKIAogIyMjIEFQSSBhZGRpdGlvbnMKIAorKiBZb3UgY2FuIG5vdyBzZXQgdGhlIGRlZmF1bHQgc2hhcmUgbW9kZSBvbiBXaW5kb3dzIGZvciBvcGVuaW5nIGZpbGVzIHVzaW5nCisgIGBHSVRfT1BUX1NFVF9XSU5ET1dTX1NIQVJFTU9ERWAgb3B0aW9uIHdpdGggYGdpdF9saWJnaXQyX29wdHMoKWAuCisgIFlvdSBjYW4gcXVlcnkgdGhlIGN1cnJlbnQgc2hhcmUgbW9kZSB3aXRoIGBHSVRfT1BUX0dFVF9XSU5ET1dTX1NIQVJFTU9ERWAuCisKICMjIyBBUEkgcmVtb3ZhbHMKIAogIyMjIEJyZWFraW5nIEFQSSBjaGFuZ2VzCmRpZmYgLS1naXQgYS9DTWFrZUxpc3RzLnR4dCBiL0NNYWtlTGlzdHMudHh0CmluZGV4IDRiZmQxYjQuLjM1NGFlM2UgMTAwNjQ0Ci0tLSBhL0NNYWtlTGlzdHMudHh0CisrKyBiL0NNYWtlTGlzdHMudHh0CkBAIC0zNyw2ICszNyw3IEBACiBPUFRJT04oIEVOQUJMRV9UUkFDRQkJIkVuYWJsZXMgdHJhY2luZyBzdXBwb3J0IgkJCQlPRkYgKQogT1BUSU9OKCBMSUJHSVQyX0ZJTEVOQU1FCSJOYW1lIG9mIHRoZSBwcm9kdWNlZCBiaW5hcnkiCQkJT0ZGICkKIAorT1BUSU9OKCBVU0VfU0hBMURDCQkJIlVzZSBTSEEtMSB3aXRoIGNvbGxpc2lvbiBkZXRlY3Rpb24iCU9GRiApCiBPUFRJT04oIFVTRV9JQ09OVgkJCSJMaW5rIHdpdGggYW5kIHVzZSBpY29udiBsaWJyYXJ5IiAJCU9GRiApCiBPUFRJT04oIFVTRV9TU0gJCQkJIkxpbmsgd2l0aCBsaWJzc2ggdG8gZW5hYmxlIFNTSCBzdXBwb3J0IiBPTiApCiBPUFRJT04oIFVTRV9HU1NBUEkJCQkiTGluayB3aXRoIGxpYmdzc2FwaSBmb3IgU1BORUdPIGF1dGgiICAgT0ZGICkKQEAgLTIzNyw2ICsyMzgsNyBAQAogCiBJRiAoV0lOMzIgQU5EIFdJTkhUVFApCiAJQUREX0RFRklOSVRJT05TKC1ER0lUX1dJTkhUVFApCisJQUREX0RFRklOSVRJT05TKC1ER0lUX0hUVFBTKQogCiAJIyBTaW5jZSBNaW5HVyBkb2VzIG5vdCBjb21lIHdpdGggaGVhZGVycyBvciBhbiBpbXBvcnQgbGlicmFyeSBmb3Igd2luaHR0cCwKIAkjIHdlIGhhdmUgdG8gaW5jbHVkZSBhIHByaXZhdGUgaGVhZGVyIGFuZCBnZW5lcmF0ZSBvdXIgb3duIGltcG9ydCBsaWJyYXJ5CkBAIC0yOTIsMTMgKzI5NCwxOSBAQAogRU5ESUYoKQogCiAjIFNwZWNpZnkgc2hhMSBpbXBsZW1lbnRhdGlvbgotSUYgKFdJTjMyIEFORCBOT1QgTUlOR1cgQU5EIE5PVCBTSEExX1RZUEUgU1RSRVFVQUwgImJ1aWx0aW4iKQotCUFERF9ERUZJTklUSU9OUygtRFdJTjMyX1NIQTEpCitJRiAoVVNFX1NIQTFEQykKKwlBRERfREVGSU5JVElPTlMoLURHSVRfU0hBMV9DT0xMSVNJT05ERVRFQ1QpCisJQUREX0RFRklOSVRJT05TKC1EU0hBMURDX05PX1NUQU5EQVJEX0lOQ0xVREVTPTEpCisJQUREX0RFRklOSVRJT05TKC1EU0hBMURDX0NVU1RPTV9JTkNMVURFX1NIQTFfQz1cImNvbW1vbi5oXCIpCisJQUREX0RFRklOSVRJT05TKC1EU0hBMURDX0NVU1RPTV9JTkNMVURFX1VCQ19DSEVDS19DPVwiY29tbW9uLmhcIikKKwlGSUxFKEdMT0IgU1JDX1NIQTEgc3JjL2hhc2gvaGFzaF9jb2xsaXNpb25kZXRlY3QuYyBzcmMvaGFzaC9zaGExZGMvKikKK0VMU0VJRiAoV0lOMzIgQU5EIE5PVCBNSU5HVykKKwlBRERfREVGSU5JVElPTlMoLURHSVRfU0hBMV9XSU4zMikKIAlGSUxFKEdMT0IgU1JDX1NIQTEgc3JjL2hhc2gvaGFzaF93aW4zMi5jKQogRUxTRUlGICgke0NNQUtFX1NZU1RFTV9OQU1FfSBNQVRDSEVTICJEYXJ3aW4iKQotCUFERF9ERUZJTklUSU9OUygtREdJVF9DT01NT05fQ1JZUFRPKQotRUxTRUlGIChPUEVOU1NMX0ZPVU5EIEFORCBOT1QgU0hBMV9UWVBFIFNUUkVRVUFMICJidWlsdGluIikKLQlBRERfREVGSU5JVElPTlMoLURPUEVOU1NMX1NIQTEpCisJQUREX0RFRklOSVRJT05TKC1ER0lUX1NIQTFfQ09NTU9OX0NSWVBUTykKK0VMU0VJRiAoT1BFTlNTTF9GT1VORCkKKwlBRERfREVGSU5JVElPTlMoLURHSVRfU0hBMV9PUEVOU1NMKQogCUlGIChDTUFLRV9TWVNURU1fTkFNRSBNQVRDSEVTICJGcmVlQlNEIikKIAkJTElTVChBUFBFTkQgTElCR0lUMl9QQ19MSUJTICItbHNzbCIpCiAJRUxTRSgpCkBAIC00NjQsNyArNDcyLDEwIEBACiAgICAjIFByZWNvbXBpbGVkIGhlYWRlcnMKIAogRUxTRSAoKQotCVNFVChDTUFLRV9DX0ZMQUdTICItRF9HTlVfU09VUkNFIC1XYWxsIC1XZXh0cmEgJHtDTUFLRV9DX0ZMQUdTfSIpCisJU0VUKENNQUtFX0NfRkxBR1MgIi1EX0dOVV9TT1VSQ0UgJHtDTUFLRV9DX0ZMQUdTfSIpCisKKwlBRERfQ19GTEFHX0lGX1NVUFBPUlRFRCgtV2FsbCkKKwlBRERfQ19GTEFHX0lGX1NVUFBPUlRFRCgtV2V4dHJhKQogCiAJSUYgKENNQUtFX1NZU1RFTV9OQU1FIE1BVENIRVMgIihTb2xhcmlzfFN1bk9TKSIpCiAJCVNFVChDTUFLRV9DX0ZMQUdTICItc3RkPWM5OSAtRF9QT1NJWF9DX1NPVVJDRT0yMDAxMTJMIC1EX19FWFRFTlNJT05TX18gLURfUE9TSVhfUFRIUkVBRF9TRU1BTlRJQ1MgJHtDTUFLRV9DX0ZMQUdTfSIpCkBAIC01MzksMTEgKzU1MCwxMyBAQAogCiBJRiAoU0VDVVJJVFlfRk9VTkQpCiAgIEFERF9ERUZJTklUSU9OUygtREdJVF9TRUNVUkVfVFJBTlNQT1JUKQorICBBRERfREVGSU5JVElPTlMoLURHSVRfSFRUUFMpCiAgIElOQ0xVREVfRElSRUNUT1JJRVMoJHtTRUNVUklUWV9JTkNMVURFX0RJUn0pCiBFTkRJRiAoKQogCiBJRiAoT1BFTlNTTF9GT1VORCkKICAgQUREX0RFRklOSVRJT05TKC1ER0lUX09QRU5TU0wpCisgIEFERF9ERUZJTklUSU9OUygtREdJVF9IVFRQUykKICAgSU5DTFVERV9ESVJFQ1RPUklFUygke09QRU5TU0xfSU5DTFVERV9ESVJ9KQogICBTRVQoU1NMX0xJQlJBUklFUyAke09QRU5TU0xfTElCUkFSSUVTfSkKIEVORElGKCkKQEAgLTY5Niw5ICs3MDksOSBAQAogCiAJRU5BQkxFX1RFU1RJTkcoKQogCUlGIChXSU5IVFRQIE9SIE9QRU5TU0xfRk9VTkQgT1IgU0VDVVJJVFlfRk9VTkQpCi0JCUFERF9URVNUKGxpYmdpdDJfY2xhciBsaWJnaXQyX2NsYXIgLWlvbmxpbmUpCisJCUFERF9URVNUKGxpYmdpdDJfY2xhciBsaWJnaXQyX2NsYXIgLWlvbmxpbmUgLXhjbG9uZTo6bG9jYWw6OmdpdF9zdHlsZV91bmNfcGF0aHMgLXhjbG9uZTo6bG9jYWw6OnN0YW5kYXJkX3VuY19wYXRoc19hcmVfd3JpdHRlbl9naXRfc3R5bGUpCiAJRUxTRSAoKQotCQlBRERfVEVTVChsaWJnaXQyX2NsYXIgbGliZ2l0Ml9jbGFyIC12KQorCQlBRERfVEVTVChsaWJnaXQyX2NsYXIgbGliZ2l0Ml9jbGFyIC12IC14Y2xvbmU6OmxvY2FsOjpnaXRfc3R5bGVfdW5jX3BhdGhzIC14Y2xvbmU6OmxvY2FsOjpzdGFuZGFyZF91bmNfcGF0aHNfYXJlX3dyaXR0ZW5fZ2l0X3N0eWxlKQogCUVORElGICgpCiAKIAkjIEFkZCBhIHRlc3QgdGFyZ2V0IHdoaWNoIHJ1bnMgdGhlIGNyZWQgY2FsbGJhY2sgdGVzdHMsIHRvIGJlCmRpZmYgLS1naXQgYS9DT05WRU5USU9OUy5tZCBiL0NPTlZFTlRJT05TLm1kCmluZGV4IDBiZTRiMzMuLmZmYjY5NmEgMTAwNjQ0Ci0tLSBhL0NPTlZFTlRJT05TLm1kCisrKyBiL0NPTlZFTlRJT05TLm1kCkBAIC0xOCwxMSArMTgsMTEgQEAKICAtIElmIGEgZnVuY3Rpb24gcmV0dXJucyBhbiBvYmplY3QgYXMgYSByZXR1cm4gdmFsdWUsIHRoYXQgZnVuY3Rpb24gaXMKICAgIGEgZ2V0dGVyIGFuZCB0aGUgb2JqZWN0J3MgbGlmZXRpbWUgaXMgdGllZCB0byB0aGUgcGFyZW50CiAgICBvYmplY3QuIE9iamVjdHMgd2hpY2ggYXJlIHJldHVybmVkIGFzIHRoZSBmaXJzdCBhcmd1bWVudCBhcyBhCi0gICBwb2ludGVyLXRvLXBvaW50ZXIgYXJlIG93bmVkIGJ5IHRoZSBjYWxsZXIgYW5kIGl0IGlzIHJlcHNwb25zaWJsZQorICAgcG9pbnRlci10by1wb2ludGVyIGFyZSBvd25lZCBieSB0aGUgY2FsbGVyIGFuZCBpdCBpcyByZXNwb25zaWJsZQogICAgZm9yIGZyZWVpbmcgaXQuIFN0cmluZ3MgYXJlIHJldHVybmVkIHZpYSBgZ2l0X2J1ZmAgaW4gb3JkZXIgdG8KICAgIGFsbG93IGZvciByZS11c2UgYW5kIHNhZmUgZnJlZWluZy4KIAotIC0gTW9zdCBvZiB3aGF0IGxpYmdpdDIgZG9lcyByZWxhdGVzIHRvIEkvTyBzbyB5b3UgYXMgYSBnZW5lcmFsIHJ1bGUKKyAtIE1vc3Qgb2Ygd2hhdCBsaWJnaXQyIGRvZXMgcmVsYXRlcyB0byBJL08gc28gYXMgYSBnZW5lcmFsIHJ1bGUKICAgIHlvdSBzaG91bGQgYXNzdW1lIHRoYXQgYW55IGZ1bmN0aW9uIGNhbiBmYWlsIGR1ZSB0byBlcnJvcnMgYXMgZXZlbgogICAgZ2V0dGluZyBkYXRhIGZyb20gdGhlIGZpbGVzeXN0ZW0gY2FuIHJlc3VsdCBpbiBhbGwgc29ydHMgb2YgZXJyb3JzCiAgICBhbmQgY29tcGxleCBmYWlsdXJlIGNhc2VzLgpkaWZmIC0tZ2l0IGEvQ09QWUlORyBiL0NPUFlJTkcKaW5kZXggMWI4OGI5Yi4uZGE2OTVlYiAxMDA2NDQKLS0tIGEvQ09QWUlORworKysgYi9DT1BZSU5HCkBAIC05NTgsMyArOTU4LDM2IEBACiBUaGF0J3MgYWxsIHRoZXJlIGlzIHRvIGl0IQogCiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK1RoZSBidW5kbGVkIFNIQTEgY29sbGlzaW9uIGRldGVjdGlvbiBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgbGljZW5zZToKKworTUlUIExpY2Vuc2UKKworQ29weXJpZ2h0IChjKSAyMDE3OgorICAgIE1hcmMgU3RldmVucworICAgIENyeXB0b2xvZ3kgR3JvdXAKKyAgICBDZW50cnVtIFdpc2t1bmRlICYgSW5mb3JtYXRpY2EKKyAgICBQLk8uIEJveCA5NDA3OSwgMTA5MCBHQiBBbXN0ZXJkYW0sIE5ldGhlcmxhbmRzCisgICAgbWFyY0BtYXJjLXN0ZXZlbnMubmwKKworICAgIERhbiBTaHVtb3cKKyAgICBNaWNyb3NvZnQgUmVzZWFyY2gKKyAgICBkYW5zaHVAbWljcm9zb2Z0LmNvbQorCitQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSBjb3B5CitvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAiU29mdHdhcmUiKSwgdG8gZGVhbAoraW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cwordG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbAorY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzCitmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOgorCitUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCBpbiBhbGwKK2NvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuCisKK1RIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SCitJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSwKK0ZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRQorQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUgorTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwKK09VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFCitTT0ZUV0FSRS4KZGlmZiAtLWdpdCBhL1JFQURNRS5tZCBiL1JFQURNRS5tZAppbmRleCAxOWQyNGRlLi4xYmJkMzcxIDEwMDY0NAotLS0gYS9SRUFETUUubWQKKysrIGIvUkVBRE1FLm1kCkBAIC00MywxMCArNDMsOSBAQAogV2hhdCBJdCBDYW4gRG8KID09PT09PT09PT09PT09CiAKLVRoZSBnb2FsIG9mIHRoaXMgbGlicmFyeSBpcyB0byBhbGxvdyBpdHMgdXNlcnMgdGhlIGFiaWxpdHkgdG8gaGFuZGxlIEdpdCBkYXRhIGluCi10aGVpciBhcHBsaWNhdGlvbnMgZnJvbSB0aGVpciBwcm9ncmFtbWluZyBsYW5ndWFnZSBvZiBjaG9pY2UsIGFzIGlzIHVzZWQgaW4KLXByb2R1Y3Rpb24gZm9yIG1hbnkgYXBwbGljYXRpb25zIGluY2x1ZGluZyB0aGUgR2l0SHViLmNvbSBzaXRlLCBpbiBQbGFzdGljIFNDTQotYW5kIGFsc28gcG93ZXJpbmcgTWljcm9zb2Z0J3MgVmlzdWFsIFN0dWRpbyB0b29scyBmb3IgR2l0LgorbGliZ2l0MiBwcm92aWRlcyB5b3Ugd2l0aCB0aGUgYWJpbGl0eSB0byBtYW5hZ2UgR2l0IHJlcG9zaXRvcmllcyBpbiB0aGUKK3Byb2dyYW1taW5nIGxhbmd1YWdlIG9mIHlvdXIgY2hvaWNlLiAgSXQncyB1c2VkIGluIHByb2R1Y3Rpb24gdG8gcG93ZXIgbWFueQorYXBwbGljYXRpb25zIGluY2x1ZGluZyBHaXRIdWIuY29tLCBQbGFzdGljIFNDTSBhbmQgVmlzdWFsIFN0dWRpbyBUZWFtIFNlcnZpY2VzLgogCiBJdCBkb2VzIG5vdCBhaW0gdG8gcmVwbGFjZSB0aGUgZ2l0IHRvb2wgb3IgaXRzIHVzZXItZmFjaW5nIGNvbW1hbmRzLiBTb21lIEFQSXMKIHJlc2VtYmxlIHRoZSBwbHVtYmluZyBjb21tYW5kcyBhcyB0aG9zZSBhbGlnbiBjbG9zZWx5IHdpdGggdGhlIGNvbmNlcHRzIG9mIHRoZQpAQCAtNjgsNiArNjcsMTYgQEAKICogZGVzY3JpcHRpdmUgYW5kIGRldGFpbGVkIGVycm9yIG1lc3NhZ2VzCiAqIC4uLmFuZCBtb3JlIChvdmVyIDE3NSBkaWZmZXJlbnQgQVBJIGNhbGxzKQogCitBcyBsaWJnaXQyIGlzIHB1cmVseSBhIGNvbnN1bWVyIG9mIHRoZSBHaXQgc3lzdGVtLCB3ZSBoYXZlIHRvCithZGp1c3QgdG8gY2hhbmdlcyBtYWRlIHVwc3RyZWFtLiBUaGlzIGhhcyB0d28gbWFqb3IgY29uc2VxdWVuY2VzOgorCisqIFNvbWUgY2hhbmdlcyBtYXkgcmVxdWlyZSB1cyB0byBjaGFuZ2UgcHJvdmlkZWQgaW50ZXJmYWNlcy4gV2hpbGUgd2UgdHJ5IHRvCisgIGltcGxlbWVudCBmdW5jdGlvbnMgaW4gYSBnZW5lcmljIHdheSBzbyB0aGF0IG5vIGZ1dHVyZSBjaGFuZ2VzIGFyZSByZXF1aXJlZCwKKyAgd2UgY2Fubm90IHByb21pc2UgYSBjb21wbGV0ZWx5IHN0YWJsZSBBUEkuCisqIEFzIHdlIGhhdmUgdG8ga2VlcCB1cCB3aXRoIGNoYW5nZXMgaW4gYmVoYXZpb3IgbWFkZSB1cHN0cmVhbSwgd2UgbWF5IGxhZworICBiZWhpbmQgaW4gc29tZSBhcmVhcy4gV2UgdXN1YWxseSB0byBkb2N1bWVudCB0aGVzZSBpbmNvbXBhdGliaWxpdGllcyBpbiBvdXIKKyAgaXNzdWUgdHJhY2tlciB3aXRoIHRoZSBsYWJlbCAiZ2l0IGNoYW5nZSIuCisKIE9wdGlvbmFsIGRlcGVuZGVuY2llcwogPT09PT09PT09PT09PT09PT09PT09CiAKQEAgLTEyNCw2ICsxMzMsMTQgQEAKIAogQWx0ZXJuYXRpdmVseSB5b3UgY2FuIHBvaW50IHRoZSBDTWFrZSBHVUkgdG9vbCB0byB0aGUgQ01ha2VMaXN0cy50eHQgZmlsZSBhbmQgZ2VuZXJhdGUgcGxhdGZvcm0gc3BlY2lmaWMgYnVpbGQgcHJvamVjdCBvciBJREUgd29ya3NwYWNlLgogCitPbmNlIGJ1aWx0LCB5b3UgY2FuIHJ1biB0aGUgdGVzdHMgZnJvbSB0aGUgYGJ1aWxkYCBkaXJlY3Rvcnkgd2l0aCB0aGUgY29tbWFuZAorCisJJCBtYWtlIHRlc3QKKworQWx0ZXJuYXRpdmVseSB5b3UgY2FuIHJ1biB0aGUgdGVzdCBzdWl0ZSBkaXJlY3RseSB1c2luZywKKworCSQgLi9saWJnaXQyX2NsYXIKKwogVG8gaW5zdGFsbCB0aGUgbGlicmFyeSB5b3UgY2FuIHNwZWNpZnkgdGhlIGluc3RhbGwgcHJlZml4IGJ5IHNldHRpbmc6CiAKIAkkIGNtYWtlIC4uIC1EQ01BS0VfSU5TVEFMTF9QUkVGSVg9L2luc3RhbGwvcHJlZml4CmRpZmYgLS1naXQgYS9hcHB2ZXlvci55bWwgYi9hcHB2ZXlvci55bWwKaW5kZXggOWU5NGMwNy4uZmIzZmZmNyAxMDA2NDQKLS0tIGEvYXBwdmV5b3IueW1sCisrKyBiL2FwcHZleW9yLnltbApAQCAtMiw2ICsyLDcgQEAKIGJyYW5jaGVzOgogICBvbmx5OgogICAtIG1hc3RlcgorICAtIGFwcHZleW9yCiAgIC0gL15tYWludC4qLwogZW52aXJvbm1lbnQ6CiAgIEdJVFRFU1RfSU5WQVNJVkVfRlNfU1RSVUNUVVJFOiAxCmRpZmYgLS1naXQgYS9leGFtcGxlcy9uZXR3b3JrL2NvbW1vbi5jIGIvZXhhbXBsZXMvbmV0d29yay9jb21tb24uYwppbmRleCBkMTIzZWVkLi4xYTgxYTEwIDEwMDY0NAotLS0gYS9leGFtcGxlcy9uZXR3b3JrL2NvbW1vbi5jCisrKyBiL2V4YW1wbGVzL25ldHdvcmsvY29tbW9uLmMKQEAgLTEsNSArMSw3IEBACiAjaW5jbHVkZSAiY29tbW9uLmgiCiAjaW5jbHVkZSA8c3RkaW8uaD4KKyNpbmNsdWRlIDxzdHJpbmcuaD4KKyNpbmNsdWRlIDxlcnJuby5oPgogCiAvKiBTaGFtZWxlc3NseSBib3Jyb3dlZCBmcm9tIGh0dHA6Ly9zdGFja292ZXJmbG93LmNvbS9xdWVzdGlvbnMvMzQxNzgzNy8KICAqIHdpdGggcGVybWlzc2lvbiBvZiB0aGUgb3JpZ2luYWwgYXV0aG9yLCBNYXJ0aW4gUG9vbC4KQEAgLTIwLDE1ICsyMiwyNyBAQAogCQl1bnNpZ25lZCBpbnQgVU5VU0VEKGFsbG93ZWRfdHlwZXMpLAogCQl2b2lkICogVU5VU0VEKHBheWxvYWQpKQogewotCWNoYXIgdXNlcm5hbWVbMTI4XSA9IHswfTsKLQljaGFyIHBhc3N3b3JkWzEyOF0gPSB7MH07CisJY2hhciAqdXNlcm5hbWUgPSBOVUxMLCAqcGFzc3dvcmQgPSBOVUxMOworCWludCBlcnJvcjsKIAogCXByaW50ZigiVXNlcm5hbWU6ICIpOwotCXNjYW5mKCIlcyIsIHVzZXJuYW1lKTsKKwlpZiAoZ2V0bGluZSgmdXNlcm5hbWUsIE5VTEwsIHN0ZGluKSA8IDApIHsKKwkJZnByaW50ZihzdGRlcnIsICJVbmFibGUgdG8gcmVhZCB1c2VybmFtZTogJXMiLCBzdHJlcnJvcihlcnJubykpOworCQlyZXR1cm4gLTE7CisJfQogCiAJLyogWXVwLiBSaWdodCB0aGVyZSBvbiB5b3VyIHRlcm1pbmFsLiBDYXJlZnVsIHdoZXJlIHlvdSBjb3B5L3Bhc3RlIG91dHB1dC4gKi8KIAlwcmludGYoIlBhc3N3b3JkOiAiKTsKLQlzY2FuZigiJXMiLCBwYXNzd29yZCk7CisJaWYgKGdldGxpbmUoJnBhc3N3b3JkLCBOVUxMLCBzdGRpbikgPCAwKSB7CisJCWZwcmludGYoc3RkZXJyLCAiVW5hYmxlIHRvIHJlYWQgcGFzc3dvcmQ6ICVzIiwgc3RyZXJyb3IoZXJybm8pKTsKKwkJZnJlZSh1c2VybmFtZSk7CisJCXJldHVybiAtMTsKKwl9CiAKLQlyZXR1cm4gZ2l0X2NyZWRfdXNlcnBhc3NfcGxhaW50ZXh0X25ldyhvdXQsIHVzZXJuYW1lLCBwYXNzd29yZCk7CisJZXJyb3IgPSBnaXRfY3JlZF91c2VycGFzc19wbGFpbnRleHRfbmV3KG91dCwgdXNlcm5hbWUsIHBhc3N3b3JkKTsKKworCWZyZWUodXNlcm5hbWUpOworCWZyZWUocGFzc3dvcmQpOworCisJcmV0dXJuIGVycm9yOwogfQpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9naXQyL2JyYW5jaC5oIGIvaW5jbHVkZS9naXQyL2JyYW5jaC5oCmluZGV4IDM0MzU0ZjQuLjg4ZmU3MjMgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvZ2l0Mi9icmFuY2guaAorKysgYi9pbmNsdWRlL2dpdDIvYnJhbmNoLmgKQEAgLTI0Niw2ICsyNDYsMTggQEAKIAljb25zdCBnaXRfcmVmZXJlbmNlICpicmFuY2gpOwogCiAvKioKKyAqIERldGVybWluZSBpZiB0aGUgY3VycmVudCBicmFuY2ggaXMgY2hlY2tlZCBvdXQgaW4gYW55IGxpbmtlZAorICogcmVwb3NpdG9yeS4KKyAqCisgKiBAcGFyYW0gYnJhbmNoIFJlZmVyZW5jZSB0byB0aGUgYnJhbmNoLgorICoKKyAqIEByZXR1cm4gMSBpZiBicmFuY2ggaXMgY2hlY2tlZCBvdXQsIDAgaWYgaXQgaXNuJ3QsCisgKiBlcnJvciBjb2RlIG90aGVyd2lzZS4KKyAqLworR0lUX0VYVEVSTihpbnQpIGdpdF9icmFuY2hfaXNfY2hlY2tlZF9vdXQoCisJY29uc3QgZ2l0X3JlZmVyZW5jZSAqYnJhbmNoKTsKKworLyoqCiAgKiBSZXR1cm4gdGhlIG5hbWUgb2YgcmVtb3RlIHRoYXQgdGhlIHJlbW90ZSB0cmFja2luZyBicmFuY2ggYmVsb25ncyB0by4KICAqCiAgKiBAcGFyYW0gb3V0IFBvaW50ZXIgdG8gdGhlIHVzZXItYWxsb2NhdGVkIGdpdF9idWYgd2hpY2ggd2lsbCBiZSBmaWxsZWQgd2l0aCB0aGUgbmFtZSBvZiB0aGUgcmVtb3RlLgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9naXQyL2NvbW1pdC5oIGIvaW5jbHVkZS9naXQyL2NvbW1pdC5oCmluZGV4IDRjYzYzNzQuLjY5MmIzYmQgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvZ2l0Mi9jb21taXQuaAorKysgYi9pbmNsdWRlL2dpdDIvY29tbWl0LmgKQEAgLTI1NSw3ICsyNTUsOCBAQAogLyoqCiAgKiBHZXQgYW4gYXJiaXRyYXJ5IGhlYWRlciBmaWVsZAogICoKLSAqIEBwYXJhbSBvdXQgdGhlIGJ1ZmZlciB0byBmaWxsCisgKiBAcGFyYW0gb3V0IHRoZSBidWZmZXIgdG8gZmlsbDsgZXhpc3RpbmcgY29udGVudCB3aWxsIGJlCisgKiBvdmVyd3JpdHRlbgogICogQHBhcmFtIGNvbW1pdCB0aGUgY29tbWl0IHRvIGxvb2sgaW4KICAqIEBwYXJhbSBmaWVsZCB0aGUgaGVhZGVyIGZpZWxkIHRvIHJldHVybgogICogQHJldHVybiAwIG9uIHN1Y2NlZXNzLCBHSVRfRU5PVEZPVU5EIGlmIHRoZSBmaWVsZCBkb2VzIG5vdCBleGlzdCwKQEAgLTI3MCw4ICsyNzEsMTAgQEAKICAqIGBHSVRFUlJfSU5WQUxJRGAuIElmIHRoZSBjb21taXQgZG9lcyBub3QgaGF2ZSBhIHNpZ25hdHVyZSwgdGhlCiAgKiBlcnJvciBjbGFzcyB3aWxsIGJlIGBHSVRFUlJfT0JKRUNUYC4KICAqCi0gKiBAcGFyYW0gc2lnbmF0dXJlIHRoZSBzaWduYXR1cmUgYmxvY2sKLSAqIEBwYXJhbSBzaWduZWRfZGF0YSBzaWduZWQgZGF0YTsgdGhpcyBpcyB0aGUgY29tbWl0IGNvbnRlbnRzIG1pbnVzIHRoZSBzaWduYXR1cmUgYmxvY2sKKyAqIEBwYXJhbSBzaWduYXR1cmUgdGhlIHNpZ25hdHVyZSBibG9jazsgZXhpc3RpbmcgY29udGVudCB3aWxsIGJlCisgKiBvdmVyd3JpdHRlbgorICogQHBhcmFtIHNpZ25lZF9kYXRhIHNpZ25lZCBkYXRhOyB0aGlzIGlzIHRoZSBjb21taXQgY29udGVudHMgbWludXMgdGhlIHNpZ25hdHVyZSBibG9jazsKKyAqIGV4aXN0aW5nIGNvbnRlbnQgd2lsbCBiZSBvdmVyd3JpdHRlbgogICogQHBhcmFtIHJlcG8gdGhlIHJlcG9zaXRvcnkgaW4gd2hpY2ggdGhlIGNvbW1pdCBleGlzdHMKICAqIEBwYXJhbSBjb21taXRfaWQgdGhlIGNvbW1pdCBmcm9tIHdoaWNoIHRvIGV4dHJhY3QgdGhlIGRhdGEKICAqIEBwYXJhbSBmaWVsZCB0aGUgbmFtZSBvZiB0aGUgaGVhZGVyIGZpZWxkIGNvbnRhaW5pbmcgdGhlIHNpZ25hdHVyZQpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9naXQyL2NvbW1vbi5oIGIvaW5jbHVkZS9naXQyL2NvbW1vbi5oCmluZGV4IDViZTdmYjYuLmY2NWNmZGQgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvZ2l0Mi9jb21tb24uaAorKysgYi9pbmNsdWRlL2dpdDIvY29tbW9uLmgKQEAgLTE3OCw2ICsxNzgsMTEgQEAKIAlHSVRfT1BUX0VOQUJMRV9TVFJJQ1RfU1lNQk9MSUNfUkVGX0NSRUFUSU9OLAogCUdJVF9PUFRfU0VUX1NTTF9DSVBIRVJTLAogCUdJVF9PUFRfR0VUX1VTRVJfQUdFTlQsCisJR0lUX09QVF9FTkFCTEVfT0ZTX0RFTFRBLAorCUdJVF9PUFRfRU5BQkxFX0ZTWU5DX0dJVERJUiwKKwlHSVRfT1BUX0dFVF9XSU5ET1dTX1NIQVJFTU9ERSwKKwlHSVRfT1BUX1NFVF9XSU5ET1dTX1NIQVJFTU9ERSwKKwlHSVRfT1BUX0VOQUJMRV9TVFJJQ1RfSEFTSF9WRVJJRklDQVRJT04sCiB9IGdpdF9saWJnaXQyX29wdF90OwogCiAvKioKQEAgLTI4Miw2ICsyODcsMTcgQEAKICAqCQk+IC0gYHVzZXJfYWdlbnRgIGlzIHRoZSB2YWx1ZSB0aGF0IHdpbGwgYmUgZGVsaXZlcmVkIGFzIHRoZQogICoJCT4gICBVc2VyLUFnZW50IGhlYWRlciBvbiBIVFRQIHJlcXVlc3RzLgogICoKKyAqCSogb3B0cyhHSVRfT1BUX1NFVF9XSU5ET1dTX1NIQVJFTU9ERSwgdW5zaWduZWQgbG9uZyB2YWx1ZSkKKyAqCisgKgkJPiBTZXQgdGhlIHNoYXJlIG1vZGUgdXNlZCB3aGVuIG9wZW5pbmcgZmlsZXMgb24gV2luZG93cy4KKyAqCQk+IEZvciBtb3JlIGluZm9ybWF0aW9uLCBzZWUgdGhlIGRvY3VtZW50YXRpb24gZm9yIENyZWF0ZUZpbGUuCisgKgkJPiBUaGUgZGVmYXVsdCBpczogRklMRV9TSEFSRV9SRUFEIHwgRklMRV9TSEFSRV9XUklURS4gIFRoaXMgaXMKKyAqCQk+IGlnbm9yZWQgYW5kIHVudXNlZCBvbiBub24tV2luZG93cyBwbGF0Zm9ybXMuCisgKgorICoJKiBvcHRzKEdJVF9PUFRfR0VUX1dJTkRPV1NfU0hBUkVNT0RFLCB1bnNpZ25lZCBsb25nICp2YWx1ZSkKKyAqCisgKgkJPiBHZXQgdGhlIHNoYXJlIG1vZGUgdXNlZCB3aGVuIG9wZW5pbmcgZmlsZXMgb24gV2luZG93cy4KKyAqCiAgKgkqIG9wdHMoR0lUX09QVF9FTkFCTEVfU1RSSUNUX09CSkVDVF9DUkVBVElPTiwgaW50IGVuYWJsZWQpCiAgKgogICoJCT4gRW5hYmxlIHN0cmljdCBpbnB1dCB2YWxpZGF0aW9uIHdoZW4gY3JlYXRpbmcgbmV3IG9iamVjdHMKQEAgLTMwNSw2ICszMjEsMzAgQEAKICAqCQk+CiAgKgkJPiAtIGBjaXBoZXJzYCBpcyB0aGUgbGlzdCBvZiBjaXBoZXJzIHRoYXQgYXJlIGVhbmJsZWQuCiAgKgorICoJKiBvcHRzKEdJVF9PUFRfRU5BQkxFX09GU19ERUxUQSwgaW50IGVuYWJsZWQpCisgKgorICoJCT4gRW5hYmxlIG9yIGRpc2FibGUgdGhlIHVzZSBvZiAib2Zmc2V0IGRlbHRhcyIgd2hlbiBjcmVhdGluZyBwYWNrZmlsZXMsCisgKgkJPiBhbmQgdGhlIG5lZ290aWF0aW9uIG9mIHRoZW0gd2hlbiB0YWxraW5nIHRvIGEgcmVtb3RlIHNlcnZlci4KKyAqCQk+IE9mZnNldCBkZWx0YXMgc3RvcmUgYSBkZWx0YSBiYXNlIGxvY2F0aW9uIGFzIGFuIG9mZnNldCBpbnRvIHRoZQorICoJCT4gcGFja2ZpbGUgZnJvbSB0aGUgY3VycmVudCBsb2NhdGlvbiwgd2hpY2ggcHJvdmlkZXMgYSBzaG9ydGVyIGVuY29kaW5nCisgKgkJPiBhbmQgdGh1cyBzbWFsbGVyIHJlc3VsdGFudCBwYWNrZmlsZXMuCisgKgkJPiBQYWNrZmlsZXMgY29udGFpbmluZyBvZmZzZXQgZGVsdGFzIGNhbiBzdGlsbCBiZSByZWFkLgorICoJCT4gVGhpcyBkZWZhdWx0cyB0byBlbmFibGVkLgorICoKKyAqCSogb3B0cyhHSVRfT1BUX0VOQUJMRV9GU1lOQ19HSVRESVIsIGludCBlbmFibGVkKQorICoKKyAqCQk+IEVuYWJsZSBzeW5jaHJvbml6ZWQgd3JpdGVzIG9mIGZpbGVzIGluIHRoZSBnaXRkaXIgdXNpbmcgYGZzeW5jYAorICoJCT4gKG9yIHRoZSBwbGF0Zm9ybSBlcXVpdmFsZW50KSB0byBlbnN1cmUgdGhhdCBuZXcgb2JqZWN0IGRhdGEKKyAqCQk+IGlzIHdyaXR0ZW4gdG8gcGVybWFuZW50IHN0b3JhZ2UsIG5vdCBzaW1wbHkgY2FjaGVkLiAgVGhpcworICoJCT4gZGVmYXVsdHMgdG8gZGlzYWJsZWQuCisgKgorICoJIG9wdHMoR0lUX09QVF9FTkFCTEVfU1RSSUNUX0hBU0hfVkVSSUZJQ0FUSU9OLCBpbnQgZW5hYmxlZCkKKyAqCisgKgkJPiBFbmFibGUgc3RyaWN0IHZlcmlmaWNhdGlvbiBvZiBvYmplY3QgaGFzaHN1bXMgd2hlbiByZWFkaW5nCisgKgkJPiBvYmplY3RzIGZyb20gZGlzay4gVGhpcyBtYXkgaW1wYWN0IHBlcmZvcm1hbmNlIGR1ZSB0byBhbgorICoJCT4gYWRkaXRpb25hbCBjaGVja3N1bSBjYWxjdWxhdGlvbiBvbiBlYWNoIG9iamVjdC4gVGhpcyBkZWZhdWx0cworICoJCT4gdG8gZW5hYmxlZC4KKyAqCiAgKiBAcGFyYW0gb3B0aW9uIE9wdGlvbiBrZXkKICAqIEBwYXJhbSAuLi4gdmFsdWUgdG8gc2V0IHRoZSBvcHRpb24KICAqIEByZXR1cm4gMCBvbiBzdWNjZXNzLCA8MCBvbiBmYWlsdXJlCmRpZmYgLS1naXQgYS9pbmNsdWRlL2dpdDIvZXJyb3JzLmggYi9pbmNsdWRlL2dpdDIvZXJyb3JzLmgKaW5kZXggZTk1OWZmZC4uNmY1NTgwMiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9naXQyL2Vycm9ycy5oCisrKyBiL2luY2x1ZGUvZ2l0Mi9lcnJvcnMuaApAQCAtNTMsNiArNTMsOCBAQAogCiAJR0lUX1BBU1NUSFJPVUdIICAgICA9IC0zMCwJLyoqPCBJbnRlcm5hbCBvbmx5ICovCiAJR0lUX0lURVJPVkVSICAgICAgICA9IC0zMSwJLyoqPCBTaWduYWxzIGVuZCBvZiBpdGVyYXRpb24gd2l0aCBpdGVyYXRvciAqLworCUdJVF9SRVRSWSAgICAgICAgICAgPSAtMzIsCS8qKjwgSW50ZXJuYWwgb25seSAqLworCUdJVF9FTUlTTUFUQ0ggICAgICAgPSAtMzMsCS8qKjwgSGFzaHN1bSBtaXNtYXRjaCBpbiBvYmplY3QgKi8KIH0gZ2l0X2Vycm9yX2NvZGU7CiAKIC8qKgpAQCAtMTAwLDYgKzEwMiw4IEBACiAJR0lURVJSX1JFQkFTRSwKIAlHSVRFUlJfRklMRVNZU1RFTSwKIAlHSVRFUlJfUEFUQ0gsCisJR0lURVJSX1dPUktUUkVFLAorCUdJVEVSUl9TSEExCiB9IGdpdF9lcnJvcl90OwogCiAvKioKZGlmZiAtLWdpdCBhL2luY2x1ZGUvZ2l0Mi9nbG9iYWwuaCBiL2luY2x1ZGUvZ2l0Mi9nbG9iYWwuaAppbmRleCBjZTViZGY0Li4yYTg3ZTEwIDEwMDY0NAotLS0gYS9pbmNsdWRlL2dpdDIvZ2xvYmFsLmgKKysrIGIvaW5jbHVkZS9naXQyL2dsb2JhbC5oCkBAIC0xNCw3ICsxNCw3IEBACiAvKioKICAqIEluaXQgdGhlIGdsb2JhbCBzdGF0ZQogICoKLSAqIFRoaXMgZnVuY3Rpb24gbXVzdCB0aGUgY2FsbGVkIGJlZm9yZSBhbnkgb3RoZXIgbGliZ2l0MiBmdW5jdGlvbiBpbgorICogVGhpcyBmdW5jdGlvbiBtdXN0IGJlIGNhbGxlZCBiZWZvcmUgYW55IG90aGVyIGxpYmdpdDIgZnVuY3Rpb24gaW4KICAqIG9yZGVyIHRvIHNldCB1cCBnbG9iYWwgc3RhdGUgYW5kIHRocmVhZGluZy4KICAqCiAgKiBUaGlzIGZ1bmN0aW9uIG1heSBiZSBjYWxsZWQgbXVsdGlwbGUgdGltZXMgLSBpdCB3aWxsIHJldHVybiB0aGUgbnVtYmVyCmRpZmYgLS1naXQgYS9pbmNsdWRlL2dpdDIvaW5kZXguaCBiL2luY2x1ZGUvZ2l0Mi9pbmRleC5oCmluZGV4IGU1OGIzMjguLjM1YWYyZTUgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvZ2l0Mi9pbmRleC5oCisrKyBiL2luY2x1ZGUvZ2l0Mi9pbmRleC5oCkBAIC01NzUsMTUgKzU3NSwxNiBAQAogICogVGhpcyBtZXRob2Qgd2lsbCBmYWlsIGluIGJhcmUgaW5kZXggaW5zdGFuY2VzLgogICoKICAqIFRoZSBgcGF0aHNwZWNgIGlzIGEgbGlzdCBvZiBmaWxlIG5hbWVzIG9yIHNoZWxsIGdsb2IgcGF0dGVybnMgdGhhdCB3aWxsCi0gKiBtYXRjaGVkIGFnYWluc3QgZmlsZXMgaW4gdGhlIHJlcG9zaXRvcnkncyB3b3JraW5nIGRpcmVjdG9yeS4gIEVhY2ggZmlsZQotICogdGhhdCBtYXRjaGVzIHdpbGwgYmUgYWRkZWQgdG8gdGhlIGluZGV4IChlaXRoZXIgdXBkYXRpbmcgYW4gZXhpc3RpbmcKLSAqIGVudHJ5IG9yIGFkZGluZyBhIG5ldyBlbnRyeSkuICBZb3UgY2FuIGRpc2FibGUgZ2xvYiBleHBhbnNpb24gYW5kIGZvcmNlCi0gKiBleGFjdCBtYXRjaGluZyB3aXRoIHRoZSBgR0lUX0lOREVYX0FERF9ESVNBQkxFX1BBVEhTUEVDX01BVENIYCBmbGFnLgorICogYmUgbWF0Y2hlZCBhZ2FpbnN0IGZpbGVzIGluIHRoZSByZXBvc2l0b3J5J3Mgd29ya2luZyBkaXJlY3RvcnkuICBFYWNoCisgKiBmaWxlIHRoYXQgbWF0Y2hlcyB3aWxsIGJlIGFkZGVkIHRvIHRoZSBpbmRleCAoZWl0aGVyIHVwZGF0aW5nIGFuCisgKiBleGlzdGluZyBlbnRyeSBvciBhZGRpbmcgYSBuZXcgZW50cnkpLiAgWW91IGNhbiBkaXNhYmxlIGdsb2IgZXhwYW5zaW9uCisgKiBhbmQgZm9yY2UgZXhhY3QgbWF0Y2hpbmcgd2l0aCB0aGUgYEdJVF9JTkRFWF9BRERfRElTQUJMRV9QQVRIU1BFQ19NQVRDSGAKKyAqIGZsYWcuCiAgKgogICogRmlsZXMgdGhhdCBhcmUgaWdub3JlZCB3aWxsIGJlIHNraXBwZWQgKHVubGlrZSBgZ2l0X2luZGV4X2FkZF9ieXBhdGhgKS4KICAqIElmIGEgZmlsZSBpcyBhbHJlYWR5IHRyYWNrZWQgaW4gdGhlIGluZGV4LCB0aGVuIGl0ICp3aWxsKiBiZSB1cGRhdGVkCi0gKiBldmVuIGlmIGl0IGlzIGlnbm9yZWQuICBQYXNzIHRoZSBgR0lUX0lOREVYX0FERF9GT1JDRWAgZmxhZyB0bwotICogc2tpcCB0aGUgY2hlY2tpbmcgb2YgaWdub3JlIHJ1bGVzLgorICogZXZlbiBpZiBpdCBpcyBpZ25vcmVkLiAgUGFzcyB0aGUgYEdJVF9JTkRFWF9BRERfRk9SQ0VgIGZsYWcgdG8gc2tpcAorICogdGhlIGNoZWNraW5nIG9mIGlnbm9yZSBydWxlcy4KICAqCiAgKiBUbyBlbXVsYXRlIGBnaXQgYWRkIC1BYCBhbmQgZ2VuZXJhdGUgYW4gZXJyb3IgaWYgdGhlIHBhdGhzcGVjIGNvbnRhaW5zCiAgKiB0aGUgZXhhY3QgcGF0aCBvZiBhbiBpZ25vcmVkIGZpbGUgKHdoZW4gbm90IHVzaW5nIEZPUkNFKSwgYWRkIHRoZQpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9naXQyL29kYi5oIGIvaW5jbHVkZS9naXQyL29kYi5oCmluZGV4IGIzZWQyNzAuLmI3ZGMwYzUgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvZ2l0Mi9vZGIuaAorKysgYi9pbmNsdWRlL2dpdDIvb2RiLmgKQEAgLTQ4OCw3ICs0ODgsNyBAQAogICogVGhlIGJhY2tlbmRzIGFyZSBjaGVja2VkIGluIHJlbGF0aXZlIG9yZGVyaW5nLCBiYXNlZCBvbiB0aGUKICAqIHZhbHVlIG9mIHRoZSBgcHJpb3JpdHlgIHBhcmFtZXRlci4KICAqCi0gKiBSZWFkIDxvZGJfYmFja2VuZHMuaD4gZm9yIG1vcmUgaW5mb3JtYXRpb24uCisgKiBSZWFkIDxzeXMvb2RiX2JhY2tlbmQuaD4gZm9yIG1vcmUgaW5mb3JtYXRpb24uCiAgKgogICogQHBhcmFtIG9kYiBkYXRhYmFzZSB0byBhZGQgdGhlIGJhY2tlbmQgdG8KICAqIEBwYXJhbSBiYWNrZW5kIHBvaW50ZXIgdG8gYSBnaXRfb2RiX2JhY2tlbmQgaW5zdGFuY2UKQEAgLTUwOSw3ICs1MDksNyBAQAogICoKICAqIFdyaXRpbmcgaXMgZGlzYWJsZWQgb24gYWx0ZXJuYXRlIGJhY2tlbmRzLgogICoKLSAqIFJlYWQgPG9kYl9iYWNrZW5kcy5oPiBmb3IgbW9yZSBpbmZvcm1hdGlvbi4KKyAqIFJlYWQgPHN5cy9vZGJfYmFja2VuZC5oPiBmb3IgbW9yZSBpbmZvcm1hdGlvbi4KICAqCiAgKiBAcGFyYW0gb2RiIGRhdGFiYXNlIHRvIGFkZCB0aGUgYmFja2VuZCB0bwogICogQHBhcmFtIGJhY2tlbmQgcG9pbnRlciB0byBhIGdpdF9vZGJfYmFja2VuZCBpbnN0YW5jZQpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9naXQyL29kYl9iYWNrZW5kLmggYi9pbmNsdWRlL2dpdDIvb2RiX2JhY2tlbmQuaAppbmRleCBiMTdjZmQ4Li45MTk5NTM4IDEwMDY0NAotLS0gYS9pbmNsdWRlL2dpdDIvb2RiX2JhY2tlbmQuaAorKysgYi9pbmNsdWRlL2dpdDIvb2RiX2JhY2tlbmQuaApAQCAtMzksNyArMzksNyBAQAogICogQHBhcmFtIG91dCBsb2NhdGlvbiB0byBzdG9yZSB0aGUgb2RiIGJhY2tlbmQgcG9pbnRlcgogICogQHBhcmFtIG9iamVjdHNfZGlyIHRoZSBHaXQgcmVwb3NpdG9yeSdzIG9iamVjdHMgZGlyZWN0b3J5CiAgKiBAcGFyYW0gY29tcHJlc3Npb25fbGV2ZWwgemxpYiBjb21wcmVzc2lvbiBsZXZlbCB0byB1c2UKLSAqIEBwYXJhbSBkb19mc3luYyB3aGV0aGVyIHRvIGRvIGFuIGZzeW5jKCkgYWZ0ZXIgd3JpdGluZyAoY3VycmVudGx5IGlnbm9yZWQpCisgKiBAcGFyYW0gZG9fZnN5bmMgd2hldGhlciB0byBkbyBhbiBmc3luYygpIGFmdGVyIHdyaXRpbmcKICAqIEBwYXJhbSBkaXJfbW9kZSBwZXJtaXNzaW9ucyB0byB1c2UgY3JlYXRpbmcgYSBkaXJlY3Rvcnkgb3IgMCBmb3IgZGVmYXVsdHMKICAqIEBwYXJhbSBmaWxlX21vZGUgcGVybWlzc2lvbnMgdG8gdXNlIGNyZWF0aW5nIGEgZmlsZSBvciAwIGZvciBkZWZhdWx0cwogICoKZGlmZiAtLWdpdCBhL2luY2x1ZGUvZ2l0Mi9vaWQuaCBiL2luY2x1ZGUvZ2l0Mi9vaWQuaAppbmRleCA4YWQ1MWM4Li5hYWE2NzhjIDEwMDY0NAotLS0gYS9pbmNsdWRlL2dpdDIvb2lkLmgKKysrIGIvaW5jbHVkZS9naXQyL29pZC5oCkBAIC01MCwxNyArNTAsMTYgQEAKICAqIFBhcnNlIGEgaGV4IGZvcm1hdHRlZCBudWxsLXRlcm1pbmF0ZWQgc3RyaW5nIGludG8gYSBnaXRfb2lkLgogICoKICAqIEBwYXJhbSBvdXQgb2lkIHN0cnVjdHVyZSB0aGUgcmVzdWx0IGlzIHdyaXR0ZW4gaW50by4KLSAqIEBwYXJhbSBzdHIgaW5wdXQgaGV4IHN0cmluZzsgbXVzdCBiZSBhdCBsZWFzdCA0IGNoYXJhY3RlcnMKLSAqICAgICAgbG9uZyBhbmQgbnVsbC10ZXJtaW5hdGVkLgorICogQHBhcmFtIHN0ciBpbnB1dCBoZXggc3RyaW5nOyBtdXN0IGJlIG51bGwtdGVybWluYXRlZC4KICAqIEByZXR1cm4gMCBvciBhbiBlcnJvciBjb2RlCiAgKi8KIEdJVF9FWFRFUk4oaW50KSBnaXRfb2lkX2Zyb21zdHJwKGdpdF9vaWQgKm91dCwgY29uc3QgY2hhciAqc3RyKTsKIAogLyoqCi0gKiBQYXJzZSBOIGNoYXJhY3RlcnMgb2YgYSBoZXggZm9ybWF0dGVkIG9iamVjdCBpZCBpbnRvIGEgZ2l0X29pZAorICogUGFyc2UgTiBjaGFyYWN0ZXJzIG9mIGEgaGV4IGZvcm1hdHRlZCBvYmplY3QgaWQgaW50byBhIGdpdF9vaWQuCiAgKgotICogSWYgTiBpcyBvZGQsIE4tMSBjaGFyYWN0ZXJzIHdpbGwgYmUgcGFyc2VkIGluc3RlYWQuCi0gKiBUaGUgcmVtYWluaW5nIHNwYWNlIGluIHRoZSBnaXRfb2lkIHdpbGwgYmUgc2V0IHRvIHplcm8uCisgKiBJZiBOIGlzIG9kZCwgdGhlIGxhc3QgYnl0ZSdzIGhpZ2ggbmliYmxlIHdpbGwgYmUgcmVhZCBpbiBhbmQgdGhlCisgKiBsb3cgbmliYmxlIHNldCB0byB6ZXJvLgogICoKICAqIEBwYXJhbSBvdXQgb2lkIHN0cnVjdHVyZSB0aGUgcmVzdWx0IGlzIHdyaXR0ZW4gaW50by4KICAqIEBwYXJhbSBzdHIgaW5wdXQgaGV4IHN0cmluZyBvZiBhdCBsZWFzdCBzaXplIGBsZW5ndGhgCmRpZmYgLS1naXQgYS9pbmNsdWRlL2dpdDIvcmVtb3RlLmggYi9pbmNsdWRlL2dpdDIvcmVtb3RlLmgKaW5kZXggNjkxMTE0MS4uZTllNGU1YiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9naXQyL3JlbW90ZS5oCisrKyBiL2luY2x1ZGUvZ2l0Mi9yZW1vdGUuaApAQCAtNzE1LDggKzcxNSw4IEBACiAgKiBQZWZvcm0gYWxsIHRoZSBzdGVwcyBmcm9tIGEgcHVzaC4KICAqCiAgKiBAcGFyYW0gcmVtb3RlIHRoZSByZW1vdGUgdG8gcHVzaCB0bwotICogQHBhcmFtIHJlZnNwZWNzIHRoZSByZWZzcGVjcyB0byB1c2UgZm9yIHB1c2hpbmcuIElmIG5vbmUgYXJlCi0gKiBwYXNzZWQsIHRoZSBjb25maWd1cmVkIHJlZnNwZWNzIHdpbGwgYmUgdXNlZAorICogQHBhcmFtIHJlZnNwZWNzIHRoZSByZWZzcGVjcyB0byB1c2UgZm9yIHB1c2hpbmcuIElmIE5VTEwgb3IgYW4gZW1wdHkKKyAqICAgICAgICAgICAgICAgICBhcnJheSwgdGhlIGNvbmZpZ3VyZWQgcmVmc3BlY3Mgd2lsbCBiZSB1c2VkCiAgKiBAcGFyYW0gb3B0cyBvcHRpb25zIHRvIHVzZSBmb3IgdGhpcyBwdXNoCiAgKi8KIEdJVF9FWFRFUk4oaW50KSBnaXRfcmVtb3RlX3B1c2goZ2l0X3JlbW90ZSAqcmVtb3RlLApAQCAtNzk2LDcgKzc5Niw3IEBACiAqIGZvciB0aGUgcmVtb3RlIHdpbGwgYmUgcmVtb3ZlZC4KICoKICogQHBhcmFtIHJlcG8gdGhlIHJlcG9zaXRvcnkgaW4gd2hpY2ggdG8gYWN0Ci0qIEBwYXJhbSBuYW1lIHRoZSBuYW1lIG9mIHRoZSByZW1vdmUgdG8gZGVsZXRlCisqIEBwYXJhbSBuYW1lIHRoZSBuYW1lIG9mIHRoZSByZW1vdGUgdG8gZGVsZXRlCiAqIEByZXR1cm4gMCBvbiBzdWNjZXNzLCBvciBhbiBlcnJvciBjb2RlLgogKi8KIEdJVF9FWFRFUk4oaW50KSBnaXRfcmVtb3RlX2RlbGV0ZShnaXRfcmVwb3NpdG9yeSAqcmVwbywgY29uc3QgY2hhciAqbmFtZSk7CmRpZmYgLS1naXQgYS9pbmNsdWRlL2dpdDIvcmVwb3NpdG9yeS5oIGIvaW5jbHVkZS9naXQyL3JlcG9zaXRvcnkuaAppbmRleCAzZDcwZDFiLi5hMzk2YTU0IDEwMDY0NAotLS0gYS9pbmNsdWRlL2dpdDIvcmVwb3NpdG9yeS5oCisrKyBiL2luY2x1ZGUvZ2l0Mi9yZXBvc2l0b3J5LmgKQEAgLTM1LDYgKzM1LDE3IEBACiAgKiBAcmV0dXJuIDAgb3IgYW4gZXJyb3IgY29kZQogICovCiBHSVRfRVhURVJOKGludCkgZ2l0X3JlcG9zaXRvcnlfb3BlbihnaXRfcmVwb3NpdG9yeSAqKm91dCwgY29uc3QgY2hhciAqcGF0aCk7CisvKioKKyAqIE9wZW4gd29ya2luZyB0cmVlIGFzIGEgcmVwb3NpdG9yeQorICoKKyAqIE9wZW4gdGhlIHdvcmtpbmcgZGlyZWN0b3J5IG9mIHRoZSB3b3JraW5nIHRyZWUgYXMgYSBub3JtYWwKKyAqIHJlcG9zaXRvcnkgdGhhdCBjYW4gdGhlbiBiZSB3b3JrZWQgb24uCisgKgorICogQHBhcmFtIG91dCBPdXRwdXQgcG9pbnRlciBjb250YWluaW5nIG9wZW5lZCByZXBvc2l0b3J5CisgKiBAcGFyYW0gd3QgV29ya2luZyB0cmVlIHRvIG9wZW4KKyAqIEByZXR1cm4gMCBvciBhbiBlcnJvciBjb2RlCisgKi8KK0dJVF9FWFRFUk4oaW50KSBnaXRfcmVwb3NpdG9yeV9vcGVuX2Zyb21fd29ya3RyZWUoZ2l0X3JlcG9zaXRvcnkgKipvdXQsIGdpdF93b3JrdHJlZSAqd3QpOwogCiAvKioKICAqIENyZWF0ZSBhICJmYWtlIiByZXBvc2l0b3J5IHRvIHdyYXAgYW4gb2JqZWN0IGRhdGFiYXNlCkBAIC0zMzUsNiArMzQ2LDE3IEBACiBHSVRfRVhURVJOKGludCkgZ2l0X3JlcG9zaXRvcnlfaGVhZChnaXRfcmVmZXJlbmNlICoqb3V0LCBnaXRfcmVwb3NpdG9yeSAqcmVwbyk7CiAKIC8qKgorICogUmV0cmlldmUgdGhlIHJlZmVyZW5jZWQgSEVBRCBmb3IgdGhlIHdvcmt0cmVlCisgKgorICogQHBhcmFtIG91dCBwb2ludGVyIHRvIHRoZSByZWZlcmVuY2Ugd2hpY2ggd2lsbCBiZSByZXRyaWV2ZWQKKyAqIEBwYXJhbSByZXBvIGEgcmVwb3NpdG9yeSBvYmplY3QKKyAqIEBwYXJhbSBuYW1lIG5hbWUgb2YgdGhlIHdvcmt0cmVlIHRvIHJldHJpZXZlIEhFQUQgZm9yCisgKiBAcmV0dXJuIDAgd2hlbiBzdWNjZXNzZnVsLCBlcnJvci1jb2RlIG90aGVyd2lzZQorICovCitHSVRfRVhURVJOKGludCkgZ2l0X3JlcG9zaXRvcnlfaGVhZF9mb3Jfd29ya3RyZWUoZ2l0X3JlZmVyZW5jZSAqKm91dCwgZ2l0X3JlcG9zaXRvcnkgKnJlcG8sCisJY29uc3QgY2hhciAqbmFtZSk7CisKKy8qKgogICogQ2hlY2sgaWYgYSByZXBvc2l0b3J5J3MgSEVBRCBpcyBkZXRhY2hlZAogICoKICAqIEEgcmVwb3NpdG9yeSdzIEhFQUQgaXMgZGV0YWNoZWQgd2hlbiBpdCBwb2ludHMgZGlyZWN0bHkgdG8gYSBjb21taXQKQEAgLTM0Niw2ICszNjgsMjAgQEAKICAqLwogR0lUX0VYVEVSTihpbnQpIGdpdF9yZXBvc2l0b3J5X2hlYWRfZGV0YWNoZWQoZ2l0X3JlcG9zaXRvcnkgKnJlcG8pOwogCisvKgorICogQ2hlY2sgaWYgYSB3b3JrdHJlZSdzIEhFQUQgaXMgZGV0YWNoZWQKKyAqCisgKiBBIHdvcmt0cmVlJ3MgSEVBRCBpcyBkZXRhY2hlZCB3aGVuIGl0IHBvaW50cyBkaXJlY3RseSB0byBhCisgKiBjb21taXQgaW5zdGVhZCBvZiBhIGJyYW5jaC4KKyAqCisgKiBAcGFyYW0gcmVwbyBhIHJlcG9zaXRvcnkgb2JqZWN0CisgKiBAcGFyYW0gbmFtZSBuYW1lIG9mIHRoZSB3b3JrdHJlZSB0byByZXRyaWV2ZSBIRUFEIGZvcgorICogQHJldHVybiAxIGlmIEhFQUQgaXMgZGV0YWNoZWQsIDAgaWYgaXRzIG5vdDsgZXJyb3IgY29kZSBpZgorICogIHRoZXJlIHdhcyBhbiBlcnJvcgorICovCitHSVRfRVhURVJOKGludCkgZ2l0X3JlcG9zaXRvcnlfaGVhZF9kZXRhY2hlZF9mb3Jfd29ya3RyZWUoZ2l0X3JlcG9zaXRvcnkgKnJlcG8sCisJY29uc3QgY2hhciAqbmFtZSk7CisKIC8qKgogICogQ2hlY2sgaWYgdGhlIGN1cnJlbnQgYnJhbmNoIGlzIHVuYm9ybgogICoKQEAgLTM3MSw2ICs0MDcsNDIgQEAKIEdJVF9FWFRFUk4oaW50KSBnaXRfcmVwb3NpdG9yeV9pc19lbXB0eShnaXRfcmVwb3NpdG9yeSAqcmVwbyk7CiAKIC8qKgorICogTGlzdCBvZiBpdGVtcyB3aGljaCBiZWxvbmcgdG8gdGhlIGdpdCByZXBvc2l0b3J5IGxheW91dAorICovCit0eXBlZGVmIGVudW0geworCUdJVF9SRVBPU0lUT1JZX0lURU1fR0lURElSLAorCUdJVF9SRVBPU0lUT1JZX0lURU1fV09SS0RJUiwKKwlHSVRfUkVQT1NJVE9SWV9JVEVNX0NPTU1PTkRJUiwKKwlHSVRfUkVQT1NJVE9SWV9JVEVNX0lOREVYLAorCUdJVF9SRVBPU0lUT1JZX0lURU1fT0JKRUNUUywKKwlHSVRfUkVQT1NJVE9SWV9JVEVNX1JFRlMsCisJR0lUX1JFUE9TSVRPUllfSVRFTV9QQUNLRURfUkVGUywKKwlHSVRfUkVQT1NJVE9SWV9JVEVNX1JFTU9URVMsCisJR0lUX1JFUE9TSVRPUllfSVRFTV9DT05GSUcsCisJR0lUX1JFUE9TSVRPUllfSVRFTV9JTkZPLAorCUdJVF9SRVBPU0lUT1JZX0lURU1fSE9PS1MsCisJR0lUX1JFUE9TSVRPUllfSVRFTV9MT0dTLAorCUdJVF9SRVBPU0lUT1JZX0lURU1fTU9EVUxFUywKKwlHSVRfUkVQT1NJVE9SWV9JVEVNX1dPUktUUkVFUworfSBnaXRfcmVwb3NpdG9yeV9pdGVtX3Q7CisKKy8qKgorICogR2V0IHRoZSBsb2NhdGlvbiBvZiBhIHNwZWNpZmljIHJlcG9zaXRvcnkgZmlsZSBvciBkaXJlY3RvcnkKKyAqCisgKiBUaGlzIGZ1bmN0aW9uIHdpbGwgcmV0cmlldmUgdGhlIHBhdGggb2YgYSBzcGVjaWZpYyByZXBvc2l0b3J5CisgKiBpdGVtLiBJdCB3aWxsIHRoZXJlYnkgaG9ub3IgdGhpbmdzIGxpa2UgdGhlIHJlcG9zaXRvcnkncworICogY29tbW9uIGRpcmVjdG9yeSwgZ2l0ZGlyLCBldGMuIEluIGNhc2UgYSBmaWxlIHBhdGggY2Fubm90CisgKiBleGlzdCBmb3IgYSBnaXZlbiBpdGVtIChlLmcuIHRoZSB3b3JraW5nIGRpcmVjdG9yeSBvZiBhIGJhcmUKKyAqIHJlcG9zaXRvcnkpLCBhbiBlcnJvciBpcyByZXR1cm5lZC4KKyAqCisgKiBAcGFyYW0gb3V0IEJ1ZmZlciB0byBzdG9yZSB0aGUgcGF0aCBhdAorICogQHBhcmFtIHJlcG8gUmVwb3NpdG9yeSB0byBnZXQgcGF0aCBmb3IKKyAqIEBwYXJhbSBpdGVtIFRoZSByZXBvc2l0b3J5IGl0ZW0gZm9yIHdoaWNoIHRvIHJldHJpZXZlIHRoZSBwYXRoCisgKiBAcmV0dXJuIDAgb24gc3VjY2Vzcywgb3RoZXJ3aXNlIGEgbmVnYXRpdmUgdmFsdWUKKyAqLworR0lUX0VYVEVSTihpbnQpIGdpdF9yZXBvc2l0b3J5X2l0ZW1fcGF0aChnaXRfYnVmICpvdXQsIGdpdF9yZXBvc2l0b3J5ICpyZXBvLCBnaXRfcmVwb3NpdG9yeV9pdGVtX3QgaXRlbSk7CisKKy8qKgogICogR2V0IHRoZSBwYXRoIG9mIHRoaXMgcmVwb3NpdG9yeQogICoKICAqIFRoaXMgaXMgdGhlIHBhdGggb2YgdGhlIGAuZ2l0YCBmb2xkZXIgZm9yIG5vcm1hbCByZXBvc2l0b3JpZXMsCkBAIC0zOTMsNiArNDY1LDE3IEBACiBHSVRfRVhURVJOKGNvbnN0IGNoYXIgKikgZ2l0X3JlcG9zaXRvcnlfd29ya2RpcihnaXRfcmVwb3NpdG9yeSAqcmVwbyk7CiAKIC8qKgorICogR2V0IHRoZSBwYXRoIG9mIHRoZSBzaGFyZWQgY29tbW9uIGRpcmVjdG9yeSBmb3IgdGhpcyByZXBvc2l0b3J5CisgKgorICogSWYgdGhlIHJlcG9zaXRvcnkgaXMgYmFyZSBpcyBub3QgYSB3b3JrdHJlZSwgdGhlIGdpdCBkaXJlY3RvcnkKKyAqIHBhdGggaXMgcmV0dXJuZWQuCisgKgorICogQHBhcmFtIHJlcG8gQSByZXBvc2l0b3J5IG9iamVjdAorICogQHJldHVybiB0aGUgcGF0aCB0byB0aGUgY29tbW9uIGRpcgorICovCitHSVRfRVhURVJOKGNvbnN0IGNoYXIgKikgZ2l0X3JlcG9zaXRvcnlfY29tbW9uZGlyKGdpdF9yZXBvc2l0b3J5ICpyZXBvKTsKKworLyoqCiAgKiBTZXQgdGhlIHBhdGggdG8gdGhlIHdvcmtpbmcgZGlyZWN0b3J5IGZvciB0aGlzIHJlcG9zaXRvcnkKICAqCiAgKiBUaGUgd29ya2luZyBkaXJlY3RvcnkgZG9lc24ndCBuZWVkIHRvIGJlIHRoZSBzYW1lIG9uZQpAQCAtNDIxLDYgKzUwNCwxNCBAQAogR0lUX0VYVEVSTihpbnQpIGdpdF9yZXBvc2l0b3J5X2lzX2JhcmUoZ2l0X3JlcG9zaXRvcnkgKnJlcG8pOwogCiAvKioKKyAqIENoZWNrIGlmIGEgcmVwb3NpdG9yeSBpcyBhIGxpbmtlZCB3b3JrIHRyZWUKKyAqCisgKiBAcGFyYW0gcmVwbyBSZXBvIHRvIHRlc3QKKyAqIEByZXR1cm4gMSBpZiB0aGUgcmVwb3NpdG9yeSBpcyBhIGxpbmtlZCB3b3JrIHRyZWUsIDAgb3RoZXJ3aXNlLgorICovCitHSVRfRVhURVJOKGludCkgZ2l0X3JlcG9zaXRvcnlfaXNfd29ya3RyZWUoZ2l0X3JlcG9zaXRvcnkgKnJlcG8pOworCisvKioKICAqIEdldCB0aGUgY29uZmlndXJhdGlvbiBmaWxlIGZvciB0aGlzIHJlcG9zaXRvcnkuCiAgKgogICogSWYgYSBjb25maWd1cmF0aW9uIGZpbGUgaGFzIG5vdCBiZWVuIHNldCwgdGhlIGRlZmF1bHQKZGlmZiAtLWdpdCBhL2luY2x1ZGUvZ2l0Mi9yZXNldC5oIGIvaW5jbHVkZS9naXQyL3Jlc2V0LmgKaW5kZXggNzkwNzUyOS4uYmQyOWM2OSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9naXQyL3Jlc2V0LmgKKysrIGIvaW5jbHVkZS9naXQyL3Jlc2V0LmgKQEAgLTUzLDcgKzUzLDcgQEAKICAqCiAgKiBAcGFyYW0gcmVzZXRfdHlwZSBLaW5kIG9mIHJlc2V0IG9wZXJhdGlvbiB0byBwZXJmb3JtLgogICoKLSAqIEBwYXJhbSBjaGVja291dF9vcHRzIENoZWNrb3V0IG9wdGlvbnMgdG8gYmUgdXNlZCBmb3IgYSBIQVJEIHJlc2V0LgorICogQHBhcmFtIGNoZWNrb3V0X29wdHMgT3B0aW9uYWwgY2hlY2tvdXQgb3B0aW9ucyB0byBiZSB1c2VkIGZvciBhIEhBUkQgcmVzZXQuCiAgKiBUaGUgY2hlY2tvdXRfc3RyYXRlZ3kgZmllbGQgd2lsbCBiZSBvdmVycmlkZGVuIChiYXNlZCBvbiByZXNldF90eXBlKS4KICAqIFRoaXMgcGFyYW1ldGVyIGNhbiBiZSB1c2VkIHRvIHByb3BhZ2F0ZSBub3RpZnkgYW5kIHByb2dyZXNzIGNhbGxiYWNrcy4KICAqCmRpZmYgLS1naXQgYS9pbmNsdWRlL2dpdDIvcmV2ZXJ0LmggYi9pbmNsdWRlL2dpdDIvcmV2ZXJ0LmgKaW5kZXggMmRlMTk0Mi4uODJkYmFkYyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9naXQyL3JldmVydC5oCisrKyBiL2luY2x1ZGUvZ2l0Mi9yZXZlcnQuaApAQCAtNzUsNyArNzUsNyBAQAogICoKICAqIEBwYXJhbSByZXBvIHRoZSByZXBvc2l0b3J5IHRvIHJldmVydAogICogQHBhcmFtIGNvbW1pdCB0aGUgY29tbWl0IHRvIHJldmVydAotICogQHBhcmFtIGdpdmVuX29wdHMgbWVyZ2UgZmxhZ3MKKyAqIEBwYXJhbSBnaXZlbl9vcHRzIHRoZSByZXZlcnQgb3B0aW9ucyAob3IgbnVsbCBmb3IgZGVmYXVsdHMpCiAgKiBAcmV0dXJuIHplcm8gb24gc3VjY2VzcywgLTEgb24gZmFpbHVyZS4KICAqLwogR0lUX0VYVEVSTihpbnQpIGdpdF9yZXZlcnQoCmRpZmYgLS1naXQgYS9pbmNsdWRlL2dpdDIvc3Rhc2guaCBiL2luY2x1ZGUvZ2l0Mi9zdGFzaC5oCmluZGV4IDczM2Q3NWEuLjNhZjljZGUgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvZ2l0Mi9zdGFzaC5oCisrKyBiL2luY2x1ZGUvZ2l0Mi9zdGFzaC5oCkBAIC0xNzMsNyArMTczLDcgQEAKICAqIEBwYXJhbSByZXBvIFRoZSBvd25pbmcgcmVwb3NpdG9yeS4KICAqIEBwYXJhbSBpbmRleCBUaGUgcG9zaXRpb24gd2l0aGluIHRoZSBzdGFzaCBsaXN0LiAwIHBvaW50cyB0byB0aGUKICAqICAgICAgICAgICAgICBtb3N0IHJlY2VudCBzdGFzaGVkIHN0YXRlLgotICogQHBhcmFtIG9wdGlvbnMgT3B0aW9ucyB0byBjb250cm9sIGhvdyBzdGFzaGVzIGFyZSBhcHBsaWVkLgorICogQHBhcmFtIG9wdGlvbnMgT3B0aW9uYWwgb3B0aW9ucyB0byBjb250cm9sIGhvdyBzdGFzaGVzIGFyZSBhcHBsaWVkLgogICoKICAqIEByZXR1cm4gMCBvbiBzdWNjZXNzLCBHSVRfRU5PVEZPVU5EIGlmIHRoZXJlJ3Mgbm8gc3Rhc2hlZCBzdGF0ZSBmb3IgdGhlCiAgKiAgICAgICAgIGdpdmVuIGluZGV4LCBHSVRfRU1FUkdFQ09ORkxJQ1QgaWYgY2hhbmdlcyBleGlzdCBpbiB0aGUgd29ya2luZwpAQCAtMjQyLDcgKzI0Miw3IEBACiAgKiBAcGFyYW0gcmVwbyBUaGUgb3duaW5nIHJlcG9zaXRvcnkuCiAgKiBAcGFyYW0gaW5kZXggVGhlIHBvc2l0aW9uIHdpdGhpbiB0aGUgc3Rhc2ggbGlzdC4gMCBwb2ludHMgdG8gdGhlCiAgKiAgICAgICAgICAgICAgbW9zdCByZWNlbnQgc3Rhc2hlZCBzdGF0ZS4KLSAqIEBwYXJhbSBvcHRpb25zIE9wdGlvbnMgdG8gY29udHJvbCBob3cgc3Rhc2hlcyBhcmUgYXBwbGllZC4KKyAqIEBwYXJhbSBvcHRpb25zIE9wdGlvbmFsIG9wdGlvbnMgdG8gY29udHJvbCBob3cgc3Rhc2hlcyBhcmUgYXBwbGllZC4KICAqCiAgKiBAcmV0dXJuIDAgb24gc3VjY2VzcywgR0lUX0VOT1RGT1VORCBpZiB0aGVyZSdzIG5vIHN0YXNoZWQgc3RhdGUgZm9yIHRoZSBnaXZlbgogICogaW5kZXgsIG9yIGVycm9yIGNvZGUuIChzZWUgZ2l0X3N0YXNoX2FwcGx5KCkgYWJvdmUgZm9yIGRldGFpbHMpCmRpZmYgLS1naXQgYS9pbmNsdWRlL2dpdDIvc3lzL21lcmdlLmggYi9pbmNsdWRlL2dpdDIvc3lzL21lcmdlLmgKaW5kZXggMDMxOTQxMC4uZWVkMTA2YyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9naXQyL3N5cy9tZXJnZS5oCisrKyBiL2luY2x1ZGUvZ2l0Mi9zeXMvbWVyZ2UuaApAQCAtMzYsMjMgKzM2LDIzIEBACiB0eXBlZGVmIHN0cnVjdCBnaXRfbWVyZ2VfZHJpdmVyX3NvdXJjZSBnaXRfbWVyZ2VfZHJpdmVyX3NvdXJjZTsKIAogLyoqIEdldCB0aGUgcmVwb3NpdG9yeSB0aGF0IHRoZSBzb3VyY2UgZGF0YSBpcyBjb21pbmcgZnJvbS4gKi8KLUdJVF9FWFRFUk4oZ2l0X3JlcG9zaXRvcnkgKikgZ2l0X21lcmdlX2RyaXZlcl9zb3VyY2VfcmVwbygKK0dJVF9FWFRFUk4oY29uc3QgZ2l0X3JlcG9zaXRvcnkgKikgZ2l0X21lcmdlX2RyaXZlcl9zb3VyY2VfcmVwbygKIAljb25zdCBnaXRfbWVyZ2VfZHJpdmVyX3NvdXJjZSAqc3JjKTsKIAogLyoqIEdldHMgdGhlIGFuY2VzdG9yIG9mIHRoZSBmaWxlIHRvIG1lcmdlLiAqLwotR0lUX0VYVEVSTihnaXRfaW5kZXhfZW50cnkgKikgZ2l0X21lcmdlX2RyaXZlcl9zb3VyY2VfYW5jZXN0b3IoCitHSVRfRVhURVJOKGNvbnN0IGdpdF9pbmRleF9lbnRyeSAqKSBnaXRfbWVyZ2VfZHJpdmVyX3NvdXJjZV9hbmNlc3RvcigKIAljb25zdCBnaXRfbWVyZ2VfZHJpdmVyX3NvdXJjZSAqc3JjKTsKIAogLyoqIEdldHMgdGhlIG91cnMgc2lkZSBvZiB0aGUgZmlsZSB0byBtZXJnZS4gKi8KLUdJVF9FWFRFUk4oZ2l0X2luZGV4X2VudHJ5ICopIGdpdF9tZXJnZV9kcml2ZXJfc291cmNlX291cnMoCitHSVRfRVhURVJOKGNvbnN0IGdpdF9pbmRleF9lbnRyeSAqKSBnaXRfbWVyZ2VfZHJpdmVyX3NvdXJjZV9vdXJzKAogCWNvbnN0IGdpdF9tZXJnZV9kcml2ZXJfc291cmNlICpzcmMpOwogCiAvKiogR2V0cyB0aGUgdGhlaXJzIHNpZGUgb2YgdGhlIGZpbGUgdG8gbWVyZ2UuICovCi1HSVRfRVhURVJOKGdpdF9pbmRleF9lbnRyeSAqKSBnaXRfbWVyZ2VfZHJpdmVyX3NvdXJjZV90aGVpcnMoCitHSVRfRVhURVJOKGNvbnN0IGdpdF9pbmRleF9lbnRyeSAqKSBnaXRfbWVyZ2VfZHJpdmVyX3NvdXJjZV90aGVpcnMoCiAJY29uc3QgZ2l0X21lcmdlX2RyaXZlcl9zb3VyY2UgKnNyYyk7CiAKIC8qKiBHZXRzIHRoZSBtZXJnZSBmaWxlIG9wdGlvbnMgdGhhdCB0aGUgbWVyZ2Ugd2FzIGludm9rZWQgd2l0aCAqLwotR0lUX0VYVEVSTihnaXRfbWVyZ2VfZmlsZV9vcHRpb25zICopIGdpdF9tZXJnZV9kcml2ZXJfc291cmNlX2ZpbGVfb3B0aW9ucygKK0dJVF9FWFRFUk4oY29uc3QgZ2l0X21lcmdlX2ZpbGVfb3B0aW9ucyAqKSBnaXRfbWVyZ2VfZHJpdmVyX3NvdXJjZV9maWxlX29wdGlvbnMoCiAJY29uc3QgZ2l0X21lcmdlX2RyaXZlcl9zb3VyY2UgKnNyYyk7CiAKIApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9naXQyL3N5cy90cmFuc3BvcnQuaCBiL2luY2x1ZGUvZ2l0Mi9zeXMvdHJhbnNwb3J0LmgKaW5kZXggNjBlMzhiMi4uYTM5NWRlNSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9naXQyL3N5cy90cmFuc3BvcnQuaAorKysgYi9pbmNsdWRlL2dpdDIvc3lzL3RyYW5zcG9ydC5oCkBAIC0yNDEsNiArMjQxLDE2IEBACiAgKi8KIEdJVF9FWFRFUk4oaW50KSBnaXRfdHJhbnNwb3J0X3NtYXJ0X2NyZWRlbnRpYWxzKGdpdF9jcmVkICoqb3V0LCBnaXRfdHJhbnNwb3J0ICp0cmFuc3BvcnQsIGNvbnN0IGNoYXIgKnVzZXIsIGludCBtZXRob2RzKTsKIAorLyoqCisgKiBHZXQgYSBjb3B5IG9mIHRoZSBwcm94eSBvcHRpb25zCisgKgorICogVGhlIHVybCBpcyBjb3BpZWQgYW5kIG11c3QgYmUgZnJlZWQgYnkgdGhlIGNhbGxlci4KKyAqCisgKiBAcGFyYW0gb3V0IG9wdGlvbnMgc3RydWN0IHRvIGZpbGwKKyAqIEBwYXJhbSB0cmFuc3BvcnQgdGhlIHRyYW5zcG9ydCB0byBleHRyYWN0IHRoZSBkYXRhIGZyb20uCisgKi8KK0dJVF9FWFRFUk4oaW50KSBnaXRfdHJhbnNwb3J0X3NtYXJ0X3Byb3h5X29wdGlvbnMoZ2l0X3Byb3h5X29wdGlvbnMgKm91dCwgZ2l0X3RyYW5zcG9ydCAqdHJhbnNwb3J0KTsKKwogLyoKICAqKiogRW5kIG9mIGJhc2UgdHJhbnNwb3J0IGludGVyZmFjZSAqKioKICAqKiogQmVnaW4gaW50ZXJmYWNlIGZvciBzdWJ0cmFuc3BvcnRzIGZvciB0aGUgc21hcnQgdHJhbnNwb3J0ICoqKgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9naXQyL3RyYW5zcG9ydC5oIGIvaW5jbHVkZS9naXQyL3RyYW5zcG9ydC5oCmluZGV4IDBlYzI0MTYuLjBjMzcxYmYgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvZ2l0Mi90cmFuc3BvcnQuaAorKysgYi9pbmNsdWRlL2dpdDIvdHJhbnNwb3J0LmgKQEAgLTMyMSwxMyArMzIxLDEzIEBACiAvKioKICAqIFNpZ25hdHVyZSBvZiBhIGZ1bmN0aW9uIHdoaWNoIGFjcXVpcmVzIGEgY3JlZGVudGlhbCBvYmplY3QuCiAgKgotICogLSBjcmVkOiBUaGUgbmV3bHkgY3JlYXRlZCBjcmVkZW50aWFsIG9iamVjdC4KLSAqIC0gdXJsOiBUaGUgcmVzb3VyY2UgZm9yIHdoaWNoIHdlIGFyZSBkZW1hbmRpbmcgYSBjcmVkZW50aWFsLgotICogLSB1c2VybmFtZV9mcm9tX3VybDogVGhlIHVzZXJuYW1lIHRoYXQgd2FzIGVtYmVkZGVkIGluIGEgInVzZXJcQGhvc3QiCisgKiBAcGFyYW0gY3JlZCBUaGUgbmV3bHkgY3JlYXRlZCBjcmVkZW50aWFsIG9iamVjdC4KKyAqIEBwYXJhbSB1cmwgVGhlIHJlc291cmNlIGZvciB3aGljaCB3ZSBhcmUgZGVtYW5kaW5nIGEgY3JlZGVudGlhbC4KKyAqIEBwYXJhbSB1c2VybmFtZV9mcm9tX3VybCBUaGUgdXNlcm5hbWUgdGhhdCB3YXMgZW1iZWRkZWQgaW4gYSAidXNlclxAaG9zdCIKICAqICAgICAgICAgICAgICAgICAgICAgICAgICByZW1vdGUgdXJsLCBvciBOVUxMIGlmIG5vdCBpbmNsdWRlZC4KLSAqIC0gYWxsb3dlZF90eXBlczogQSBiaXRtYXNrIHN0YXRpbmcgd2hpY2ggY3JlZCB0eXBlcyBhcmUgT0sgdG8gcmV0dXJuLgotICogLSBwYXlsb2FkOiBUaGUgcGF5bG9hZCBwcm92aWRlZCB3aGVuIHNwZWNpZnlpbmcgdGhpcyBjYWxsYmFjay4KLSAqIC0gcmV0dXJucyAwIGZvciBzdWNjZXNzLCA8IDAgdG8gaW5kaWNhdGUgYW4gZXJyb3IsID4gMCB0byBpbmRpY2F0ZQorICogQHBhcmFtIGFsbG93ZWRfdHlwZXMgQSBiaXRtYXNrIHN0YXRpbmcgd2hpY2ggY3JlZCB0eXBlcyBhcmUgT0sgdG8gcmV0dXJuLgorICogQHBhcmFtIHBheWxvYWQgVGhlIHBheWxvYWQgcHJvdmlkZWQgd2hlbiBzcGVjaWZ5aW5nIHRoaXMgY2FsbGJhY2suCisgKiBAcmV0dXJuIDAgZm9yIHN1Y2Nlc3MsIDwgMCB0byBpbmRpY2F0ZSBhbiBlcnJvciwgPiAwIHRvIGluZGljYXRlCiAgKiAgICAgICBubyBjcmVkZW50aWFsIHdhcyBhY3F1aXJlZAogICovCiB0eXBlZGVmIGludCAoKmdpdF9jcmVkX2FjcXVpcmVfY2IpKApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9naXQyL3R5cGVzLmggYi9pbmNsdWRlL2dpdDIvdHlwZXMuaAppbmRleCA2ZjQxMDE0Li5kZmRhYTI5IDEwMDY0NAotLS0gYS9pbmNsdWRlL2dpdDIvdHlwZXMuaAorKysgYi9pbmNsdWRlL2dpdDIvdHlwZXMuaApAQCAtMTA0LDYgKzEwNCw5IEBACiAgKi8KIHR5cGVkZWYgc3RydWN0IGdpdF9yZXBvc2l0b3J5IGdpdF9yZXBvc2l0b3J5OwogCisvKiogUmVwcmVzZW50YXRpb24gb2YgYSB3b3JraW5nIHRyZWUgKi8KK3R5cGVkZWYgc3RydWN0IGdpdF93b3JrdHJlZSBnaXRfd29ya3RyZWU7CisKIC8qKiBSZXByZXNlbnRhdGlvbiBvZiBhIGdlbmVyaWMgb2JqZWN0IGluIGEgcmVwb3NpdG9yeSAqLwogdHlwZWRlZiBzdHJ1Y3QgZ2l0X29iamVjdCBnaXRfb2JqZWN0OwogCmRpZmYgLS1naXQgYS9pbmNsdWRlL2dpdDIvd29ya3RyZWUuaCBiL2luY2x1ZGUvZ2l0Mi93b3JrdHJlZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQzZmE4OGUKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2dpdDIvd29ya3RyZWUuaApAQCAtMCwwICsxLDIyMCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgdGhlIGxpYmdpdDIgY29udHJpYnV0b3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIGxpYmdpdDIsIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBHTlUgR1BMIHYyIHdpdGgKKyAqIGEgTGlua2luZyBFeGNlcHRpb24uIEZvciBmdWxsIHRlcm1zIHNlZSB0aGUgaW5jbHVkZWQgQ09QWUlORyBmaWxlLgorICovCisjaWZuZGVmIElOQ0xVREVfZ2l0X3dvcmt0cmVlX2hfXworI2RlZmluZSBJTkNMVURFX2dpdF93b3JrdHJlZV9oX18KKworI2luY2x1ZGUgImNvbW1vbi5oIgorI2luY2x1ZGUgImJ1ZmZlci5oIgorI2luY2x1ZGUgInR5cGVzLmgiCisjaW5jbHVkZSAic3RyYXJyYXkuaCIKKworLyoqCisgKiBAZmlsZSBnaXQyL3dvcmt0cmVlcy5oCisgKiBAYnJpZWYgR2l0IHdvcmt0cmVlIHJlbGF0ZWQgZnVuY3Rpb25zCisgKiBAZGVmZ3JvdXAgZ2l0X2NvbW1pdCBHaXQgd29ya3RyZWUgcmVsYXRlZCBmdW5jdGlvbnMKKyAqIEBpbmdyb3VwIEdpdAorICogQHsKKyAqLworR0lUX0JFR0lOX0RFQ0wKKworLyoqCisgKiBMaXN0IG5hbWVzIG9mIGxpbmtlZCB3b3JraW5nIHRyZWVzCisgKgorICogVGhlIHJldHVybmVkIGxpc3Qgc2hvdWxkIGJlIHJlbGVhc2VkIHdpdGggYGdpdF9zdHJhcnJheV9mcmVlYAorICogd2hlbiBubyBsb25nZXIgbmVlZGVkLgorICoKKyAqIEBwYXJhbSBvdXQgcG9pbnRlciB0byB0aGUgYXJyYXkgb2Ygd29ya2luZyB0cmVlIG5hbWVzCisgKiBAcGFyYW0gcmVwbyB0aGUgcmVwbyB0byB1c2Ugd2hlbiBsaXN0aW5nIHdvcmtpbmcgdHJlZXMKKyAqIEByZXR1cm4gMCBvciBhbiBlcnJvciBjb2RlCisgKi8KK0dJVF9FWFRFUk4oaW50KSBnaXRfd29ya3RyZWVfbGlzdChnaXRfc3RyYXJyYXkgKm91dCwgZ2l0X3JlcG9zaXRvcnkgKnJlcG8pOworCisvKioKKyAqIExvb2t1cCBhIHdvcmtpbmcgdHJlZSBieSBpdHMgbmFtZSBmb3IgYSBnaXZlbiByZXBvc2l0b3J5CisgKgorICogQHBhcmFtIG91dCBPdXRwdXQgcG9pbnRlciB0byBsb29rZWQgdXAgd29ya3RyZWUgb3IgYE5VTExgCisgKiBAcGFyYW0gcmVwbyBUaGUgcmVwb3NpdG9yeSBjb250YWluaW5nIHdvcmt0cmVlcworICogQHBhcmFtIG5hbWUgTmFtZSBvZiB0aGUgd29ya2luZyB0cmVlIHRvIGxvb2sgdXAKKyAqIEByZXR1cm4gMCBvciBhbiBlcnJvciBjb2RlCisgKi8KK0dJVF9FWFRFUk4oaW50KSBnaXRfd29ya3RyZWVfbG9va3VwKGdpdF93b3JrdHJlZSAqKm91dCwgZ2l0X3JlcG9zaXRvcnkgKnJlcG8sIGNvbnN0IGNoYXIgKm5hbWUpOworCisvKioKKyAqIE9wZW4gYSB3b3JrdHJlZSBvZiBhIGdpdmVuIHJlcG9zaXRvcnkKKyAqCisgKiBJZiBhIHJlcG9zaXRvcnkgaXMgbm90IHRoZSBtYWluIHRyZWUgYnV0IGEgd29ya3RyZWUsIHRoaXMKKyAqIGZ1bmN0aW9uIHdpbGwgbG9vayB1cCB0aGUgd29ya3RyZWUgaW5zaWRlIHRoZSBwYXJlbnQKKyAqIHJlcG9zaXRvcnkgYW5kIGNyZWF0ZSBhIG5ldyBgZ2l0X3dvcmt0cmVlYCBzdHJ1Y3R1cmUuCisgKgorICogQHBhcmFtIG91dCBPdXQtcG9pbnRlciBmb3IgdGhlIG5ld2x5IGFsbG9jYXRlZCB3b3JrdHJlZQorICogQHBhcmFtIHJlcG8gUmVwb3NpdG9yeSB0byBsb29rIHVwIHdvcmt0cmVlIGZvcgorICovCitHSVRfRVhURVJOKGludCkgZ2l0X3dvcmt0cmVlX29wZW5fZnJvbV9yZXBvc2l0b3J5KGdpdF93b3JrdHJlZSAqKm91dCwgZ2l0X3JlcG9zaXRvcnkgKnJlcG8pOworCisvKioKKyAqIEZyZWUgYSBwcmV2aW91c2x5IGFsbG9jYXRlZCB3b3JrdHJlZQorICoKKyAqIEBwYXJhbSB3dCB3b3JrdHJlZSBoYW5kbGUgdG8gY2xvc2UuIElmIE5VTEwgbm90aGluZyBvY2N1cnMuCisgKi8KK0dJVF9FWFRFUk4odm9pZCkgZ2l0X3dvcmt0cmVlX2ZyZWUoZ2l0X3dvcmt0cmVlICp3dCk7CisKKy8qKgorICogQ2hlY2sgaWYgd29ya3RyZWUgaXMgdmFsaWQKKyAqCisgKiBBIHZhbGlkIHdvcmt0cmVlIHJlcXVpcmVzIGJvdGggdGhlIGdpdCBkYXRhIHN0cnVjdHVyZXMgaW5zaWRlCisgKiB0aGUgbGlua2VkIHBhcmVudCByZXBvc2l0b3J5IGFuZCB0aGUgbGlua2VkIHdvcmtpbmcgY29weSB0byBiZQorICogcHJlc2VudC4KKyAqCisgKiBAcGFyYW0gd3QgV29ya3RyZWUgdG8gY2hlY2sKKyAqIEByZXR1cm4gMCB3aGVuIHdvcmt0cmVlIGlzIHZhbGlkLCBlcnJvci1jb2RlIG90aGVyd2lzZQorICovCitHSVRfRVhURVJOKGludCkgZ2l0X3dvcmt0cmVlX3ZhbGlkYXRlKGNvbnN0IGdpdF93b3JrdHJlZSAqd3QpOworCit0eXBlZGVmIHN0cnVjdCBnaXRfd29ya3RyZWVfYWRkX29wdGlvbnMgeworCXVuc2lnbmVkIGludCB2ZXJzaW9uOworCisJaW50IGxvY2s7IC8qKjwgbG9jayBuZXdseSBjcmVhdGVkIHdvcmt0cmVlICovCit9IGdpdF93b3JrdHJlZV9hZGRfb3B0aW9uczsKKworI2RlZmluZSBHSVRfV09SS1RSRUVfQUREX09QVElPTlNfVkVSU0lPTiAxCisjZGVmaW5lIEdJVF9XT1JLVFJFRV9BRERfT1BUSU9OU19JTklUIHtHSVRfV09SS1RSRUVfQUREX09QVElPTlNfVkVSU0lPTiwwfQorCisvKioKKyAqIEluaXRpYWxpemVzIGEgYGdpdF93b3JrdHJlZV9hZGRfb3B0aW9uc2Agd2l0aCBkZWZhdWx0IHZhdWxlcy4KKyAqIEVxdWl2YWxlbnQgdG8gY3JlYXRpbmcgYW4gaW5zdGFuY2Ugd2l0aAorICogR0lUX1dPUktUUkVFX0FERF9PUFRJT05TX0lOSVQuCisgKgorICogQHBhcmFtIG9wdHMgdGhlIHN0cnVjdCB0byBpbml0aWFsaXplCisgKiBAcGFyYW0gdmVyc2lvbiBWZXJpc29uIG9mIHN0cnVjdDsgcGFzcyBgR0lUX1dPUktUUkVFX0FERF9PUFRJT05TX1ZFUlNJT05gCisgKiBAcmV0dXJuIFplcm8gb24gc3VjY2VzczsgLTEgb24gZmFpbHVyZS4KKyAqLworaW50IGdpdF93b3JrdHJlZV9hZGRfaW5pdF9vcHRpb25zKGdpdF93b3JrdHJlZV9hZGRfb3B0aW9ucyAqb3B0cywKKwl1bnNpZ25lZCBpbnQgdmVyc2lvbik7CisKKy8qKgorICogQWRkIGEgbmV3IHdvcmtpbmcgdHJlZQorICoKKyAqIEFkZCBhIG5ldyB3b3JraW5nIHRyZWUgZm9yIHRoZSByZXBvc2l0b3J5LCB0aGF0IGlzIGNyZWF0ZSB0aGUKKyAqIHJlcXVpcmVkIGRhdGEgc3RydWN0dXJlcyBpbnNpZGUgdGhlIHJlcG9zaXRvcnkgYW5kIGNoZWNrIG91dAorICogdGhlIGN1cnJlbnQgSEVBRCBhdCBgcGF0aGAKKyAqCisgKiBAcGFyYW0gb3V0IE91dHB1dCBwb2ludGVyIGNvbnRhaW5pbmcgbmV3IHdvcmtpbmcgdHJlZQorICogQHBhcmFtIHJlcG8gUmVwb3NpdG9yeSB0byBjcmVhdGUgd29ya2luZyB0cmVlIGZvcgorICogQHBhcmFtIG5hbWUgTmFtZSBvZiB0aGUgd29ya2luZyB0cmVlCisgKiBAcGFyYW0gcGF0aCBQYXRoIHRvIGNyZWF0ZSB3b3JraW5nIHRyZWUgYXQKKyAqIEBwYXJhbSBvcHRzIE9wdGlvbnMgdG8gbW9kaWZ5IGRlZmF1bHQgYmVoYXZpb3IuIE1heSBiZSBOVUxMCisgKiBAcmV0dXJuIDAgb3IgYW4gZXJyb3IgY29kZQorICovCitHSVRfRVhURVJOKGludCkgZ2l0X3dvcmt0cmVlX2FkZChnaXRfd29ya3RyZWUgKipvdXQsIGdpdF9yZXBvc2l0b3J5ICpyZXBvLAorCWNvbnN0IGNoYXIgKm5hbWUsIGNvbnN0IGNoYXIgKnBhdGgsCisJY29uc3QgZ2l0X3dvcmt0cmVlX2FkZF9vcHRpb25zICpvcHRzKTsKKworLyoqCisgKiBMb2NrIHdvcmt0cmVlIGlmIG5vdCBhbHJlYWR5IGxvY2tlZAorICoKKyAqIExvY2sgYSB3b3JrdHJlZSwgb3B0aW9uYWxseSBzcGVjaWZ5aW5nIGEgcmVhc29uIHdoeSB0aGUgbGlua2VkCisgKiB3b3JraW5nIHRyZWUgaXMgYmVpbmcgbG9ja2VkLgorICoKKyAqIEBwYXJhbSB3dCBXb3JrdHJlZSB0byBsb2NrCisgKiBAcGFyYW0gcmVhc29uIFJlYXNvbiB3aHkgdGhlIHdvcmtpbmcgdHJlZSBpcyBiZWluZyBsb2NrZWQKKyAqIEByZXR1cm4gMCBvbiBzdWNjZXNzLCBub24temVybyBvdGhlcndpc2UKKyAqLworR0lUX0VYVEVSTihpbnQpIGdpdF93b3JrdHJlZV9sb2NrKGdpdF93b3JrdHJlZSAqd3QsIGNoYXIgKnJlYXNvbik7CisKKy8qKgorICogVW5sb2NrIGEgbG9ja2VkIHdvcmt0cmVlCisgKgorICogQHBhcmFtIHd0IFdvcmt0cmVlIHRvIHVubG9jaworICogQHJldHVybiAwIG9uIHN1Y2Nlc3MsIDEgaWYgd29ya3RyZWUgd2FzIG5vdCBsb2NrZWQsIGVycm9yLWNvZGUKKyAqICBvdGhlcndpc2UKKyAqLworR0lUX0VYVEVSTihpbnQpIGdpdF93b3JrdHJlZV91bmxvY2soZ2l0X3dvcmt0cmVlICp3dCk7CisKKy8qKgorICogQ2hlY2sgaWYgd29ya3RyZWUgaXMgbG9ja2VkCisgKgorICogQSB3b3JrdHJlZSBtYXkgYmUgbG9ja2VkIGlmIHRoZSBsaW5rZWQgd29ya2luZyB0cmVlIGlzIHN0b3JlZAorICogb24gYSBwb3J0YWJsZSBkZXZpY2Ugd2hpY2ggaXMgbm90IGF2YWlsYWJsZS4KKyAqCisgKiBAcGFyYW0gcmVhc29uIEJ1ZmZlciB0byBzdG9yZSByZWFzb24gaW4uIElmIE5VTEwgbm8gcmVhc29uIGlzIHN0b3JlZC4KKyAqIEBwYXJhbSB3dCBXb3JrdHJlZSB0byBjaGVjaworICogQHJldHVybiAwIHdoZW4gdGhlIHdvcmtpbmcgdHJlZSBub3QgbG9ja2VkLCBhIHZhbHVlIGdyZWF0ZXIKKyAqICB0aGFuIHplcm8gaWYgaXQgaXMgbG9ja2VkLCBsZXNzIHRoYW4gemVybyBpZiB0aGVyZSB3YXMgYW4KKyAqICBlcnJvcgorICovCitHSVRfRVhURVJOKGludCkgZ2l0X3dvcmt0cmVlX2lzX2xvY2tlZChnaXRfYnVmICpyZWFzb24sIGNvbnN0IGdpdF93b3JrdHJlZSAqd3QpOworCisvKioKKyAqIEZsYWdzIHdoaWNoIGNhbiBiZSBwYXNzZWQgdG8gZ2l0X3dvcmt0cmVlX3BydW5lIHRvIGFsdGVyIGl0cworICogYmVoYXZpb3IuCisgKi8KK3R5cGVkZWYgZW51bSB7CisJLyogUHJ1bmUgd29ya2luZyB0cmVlIGV2ZW4gaWYgd29ya2luZyB0cmVlIGlzIHZhbGlkICovCisJR0lUX1dPUktUUkVFX1BSVU5FX1ZBTElEID0gMXUgPDwgMCwKKwkvKiBQcnVuZSB3b3JraW5nIHRyZWUgZXZlbiBpZiBpdCBpcyBsb2NrZWQgKi8KKwlHSVRfV09SS1RSRUVfUFJVTkVfTE9DS0VEID0gMXUgPDwgMSwKKwkvKiBQcnVuZSBjaGVja2VkIG91dCB3b3JraW5nIHRyZWUgKi8KKwlHSVRfV09SS1RSRUVfUFJVTkVfV09SS0lOR19UUkVFID0gMXUgPDwgMiwKK30gZ2l0X3dvcmt0cmVlX3BydW5lX3Q7CisKK3R5cGVkZWYgc3RydWN0IGdpdF93b3JrdHJlZV9wcnVuZV9vcHRpb25zIHsKKwl1bnNpZ25lZCBpbnQgdmVyc2lvbjsKKworCXVpbnQzMl90IGZsYWdzOworfSBnaXRfd29ya3RyZWVfcHJ1bmVfb3B0aW9uczsKKworI2RlZmluZSBHSVRfV09SS1RSRUVfUFJVTkVfT1BUSU9OU19WRVJTSU9OIDEKKyNkZWZpbmUgR0lUX1dPUktUUkVFX1BSVU5FX09QVElPTlNfSU5JVCB7R0lUX1dPUktUUkVFX1BSVU5FX09QVElPTlNfVkVSU0lPTiwwfQorCisvKioKKyAqIEluaXRpYWxpemVzIGEgYGdpdF93b3JrdHJlZV9wcnVuZV9vcHRpb25zYCB3aXRoIGRlZmF1bHQgdmF1bGVzLgorICogRXF1aXZhbGVudCB0byBjcmVhdGluZyBhbiBpbnN0YW5jZSB3aXRoCisgKiBHSVRfV09SS1RSRUVfUFJVTkVfT1BUSU9OU19JTklULgorICoKKyAqIEBwYXJhbSBvcHRzIHRoZSBzdHJ1Y3QgdG8gaW5pdGlhbGl6ZQorICogQHBhcmFtIHZlcnNpb24gVmVyaXNvbiBvZiBzdHJ1Y3Q7IHBhc3MgYEdJVF9XT1JLVFJFRV9QUlVORV9PUFRJT05TX1ZFUlNJT05gCisgKiBAcmV0dXJuIFplcm8gb24gc3VjY2VzczsgLTEgb24gZmFpbHVyZS4KKyAqLworR0lUX0VYVEVSTihpbnQpIGdpdF93b3JrdHJlZV9wcnVuZV9pbml0X29wdGlvbnMoCisJZ2l0X3dvcmt0cmVlX3BydW5lX29wdGlvbnMgKm9wdHMsCisJdW5zaWduZWQgaW50IHZlcnNpb24pOworCisvKioKKyAqIElzIHRoZSB3b3JrdHJlZSBwcnVuYWJsZSB3aXRoIHRoZSBnaXZlbiBvcHRpb25zPworICoKKyAqIEEgd29ya3RyZWUgaXMgbm90IHBydW5hYmxlIGluIHRoZSBmb2xsb3dpbmcgc2NlbmFyaW9zOgorICoKKyAqIC0gdGhlIHdvcmt0cmVlIGlzIGxpbmtpbmcgdG8gYSB2YWxpZCBvbi1kaXNrIHdvcmt0cmVlLiBUaGUKKyAqICAgYHZhbGlkYCBtZW1iZXIgd2lsbCBjYXVzZSB0aGlzIGNoZWNrIHRvIGJlIGlnbm9yZWQuCisgKiAtIHRoZSB3b3JrdHJlZSBpcyBsb2NrZWQuIFRoZSBgbG9ja2VkYCBmbGFnIHdpbGwgY2F1c2UgdGhpcworICogICBjaGVjayB0byBiZSBpZ25vcmVkLgorICoKKyAqIElmIHRoZSB3b3JrdHJlZSBpcyBub3QgdmFsaWQgYW5kIG5vdCBsb2NrZWQgb3IgaWYgdGhlIGFib3ZlCisgKiBmbGFncyBoYXZlIGJlZW4gcGFzc2VkIGluLCB0aGlzIGZ1bmN0aW9uIHdpbGwgcmV0dXJuIGEKKyAqIHBvc2l0aXZlIHZhbHVlLgorICovCitHSVRfRVhURVJOKGludCkgZ2l0X3dvcmt0cmVlX2lzX3BydW5hYmxlKGdpdF93b3JrdHJlZSAqd3QsCisJZ2l0X3dvcmt0cmVlX3BydW5lX29wdGlvbnMgKm9wdHMpOworCisvKioKKyAqIFBydW5lIHdvcmtpbmcgdHJlZQorICoKKyAqIFBydW5lIHRoZSB3b3JraW5nIHRyZWUsIHRoYXQgaXMgcmVtb3ZlIHRoZSBnaXQgZGF0YQorICogc3RydWN0dXJlcyBvbiBkaXNrLiBUaGUgcmVwb3NpdG9yeSB3aWxsIG9ubHkgYmUgcHJ1bmVkIG9mCisgKiBgZ2l0X3dvcmt0cmVlX2lzX3BydW5hYmxlYCBzdWNjZWVkcy4KKyAqCisgKiBAcGFyYW0gd3QgV29ya3RyZWUgdG8gcHJ1bmUKKyAqIEBwYXJhbSBvcHRzIFNwZWNpZmllcyB3aGljaCBjaGVja3MgdG8gb3ZlcnJpZGUuIFNlZQorICogICAgICAgIGBnaXRfd29ya3RyZWVfaXNfcHJ1bmFibGVgLiBNYXkgYmUgTlVMTAorICogQHJldHVybiAwIG9yIGFuIGVycm9yIGNvZGUKKyAqLworR0lUX0VYVEVSTihpbnQpIGdpdF93b3JrdHJlZV9wcnVuZShnaXRfd29ya3RyZWUgKnd0LAorCWdpdF93b3JrdHJlZV9wcnVuZV9vcHRpb25zICpvcHRzKTsKKworLyoqIEB9ICovCitHSVRfRU5EX0RFQ0wKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvbGliZ2l0Mi5wYy5pbiBiL2xpYmdpdDIucGMuaW4KaW5kZXggMzI5YTU2MC4uOTZiOTY1OSAxMDA2NDQKLS0tIGEvbGliZ2l0Mi5wYy5pbgorKysgYi9saWJnaXQyLnBjLmluCkBAIC0xLDQgKzEsNCBAQAotcHJlZml4PUBQS0dDT05GSUdfUFJFRklYQAorcHJlZml4PSJAUEtHQ09ORklHX1BSRUZJWEAiCiBsaWJkaXI9QFBLR0NPTkZJR19MSUJESVJACiBpbmNsdWRlZGlyPUBQS0dDT05GSUdfSU5DTFVERURJUkAKIApAQCAtNiw3ICs2LDcgQEAKIERlc2NyaXB0aW9uOiBUaGUgZ2l0IGxpYnJhcnksIHRha2UgMgogVmVyc2lvbjogQExJQkdJVDJfVkVSU0lPTl9TVFJJTkdACiAKLUxpYnM6IC1MIiR7bGliZGlyfSIgLWxnaXQyCitMaWJzOiAtTCR7bGliZGlyfSAtbGdpdDIKIExpYnMucHJpdmF0ZTogQExJQkdJVDJfUENfTElCU0AKIFJlcXVpcmVzLnByaXZhdGU6IEBMSUJHSVQyX1BDX1JFUVVJUkVTQAogCmRpZmYgLS1naXQgYS9zY3JpcHQvYXBwdmV5b3ItbWluZ3cuc2ggYi9zY3JpcHQvYXBwdmV5b3ItbWluZ3cuc2gKaW5kZXggMTk4ODAxOC4uZDE3MWE3MiAxMDA3NTUKLS0tIGEvc2NyaXB0L2FwcHZleW9yLW1pbmd3LnNoCisrKyBiL3NjcmlwdC9hcHB2ZXlvci1taW5ndy5zaApAQCAtNywxNSArNywxNyBAQAogICAgIGN1cmwgLUxzU08gaHR0cDovL3NvdXJjZWZvcmdlLm5ldC9wcm9qZWN0cy9taW5ndy13NjQvZmlsZXMvVG9vbGNoYWlucyUyMHRhcmdldHRpbmclMjBXaW4zMi9QZXJzb25hbCUyMEJ1aWxkcy9taW5ndy1idWlsZHMvNC45LjIvdGhyZWFkcy13aW4zMi9zamxqLyRmCiAgIGZpCiAgIDd6IHggJGYgPiAvZGV2L251bGwKLSAgbXYgbWluZ3czMiAvTWluR1cKKyAgZXhwb3J0IFBBVEg9YHB3ZGAvbWluZ3czMi9iaW46JFBBVEgKIGVsc2UKICAgZj14ODZfNjQtNC45LjItcmVsZWFzZS13aW4zMi1zZWgtcnRfdjMtcmV2MS43egogICBpZiAhIFsgLWUgJGYgXTsgdGhlbgogICAgIGN1cmwgLUxzU08gaHR0cDovL3NvdXJjZWZvcmdlLm5ldC9wcm9qZWN0cy9taW5ndy13NjQvZmlsZXMvVG9vbGNoYWlucyUyMHRhcmdldHRpbmclMjBXaW42NC9QZXJzb25hbCUyMEJ1aWxkcy9taW5ndy1idWlsZHMvNC45LjIvdGhyZWFkcy13aW4zMi9zZWgvJGYKICAgZmkKICAgN3ogeCAkZiA+IC9kZXYvbnVsbAotICBtdiBtaW5ndzY0IC9NaW5HVworICBleHBvcnQgUEFUSD1gcHdkYC9taW5ndzY0L2JpbjokUEFUSAogZmkKIGNkIGJ1aWxkCitnY2MgLS12ZXJzaW9uCitjbWFrZSAtLXZlcnNpb24KIGNtYWtlIC1EIEVOQUJMRV9UUkFDRT1PTiAtRCBCVUlMRF9DTEFSPU9OIC4uIC1HIiRHRU5FUkFUT1IiCiBjbWFrZSAtLWJ1aWxkIC4gLS1jb25maWcgUmVsV2l0aERlYkluZm8KZGlmZiAtLWdpdCBhL3NyYy9hdHRyLmMgYi9zcmMvYXR0ci5jCmluZGV4IGQ0M2ExNWYuLjk5OWY0MTMgMTAwNjQ0Ci0tLSBhL3NyYy9hdHRyLmMKKysrIGIvc3JjL2F0dHIuYwpAQCAtNyw4ICs3LDYgQEAKICNpbmNsdWRlICJnaXQyL29pZC5oIgogI2luY2x1ZGUgPGN0eXBlLmg+CiAKLUdJVF9fVVNFX1NUUk1BUAotCiBjb25zdCBjaGFyICpnaXRfYXR0cl9fdHJ1ZSAgPSAiW2ludGVybmFsXV9fVFJVRV9fIjsKIGNvbnN0IGNoYXIgKmdpdF9hdHRyX19mYWxzZSA9ICJbaW50ZXJuYWxdX19GQUxTRV9fIjsKIGNvbnN0IGNoYXIgKmdpdF9hdHRyX191bnNldCA9ICJbaW50ZXJuYWxdX19VTlNFVF9fIjsKQEAgLTIwOSw3ICsyMDcsNyBAQAogCQkJCWlmIChnaXRfc3RybWFwX2V4aXN0cyhzZWVuLCBhc3NpZ24tPm5hbWUpKQogCQkJCQljb250aW51ZTsKIAotCQkJCWdpdF9zdHJtYXBfaW5zZXJ0KHNlZW4sIGFzc2lnbi0+bmFtZSwgYXNzaWduLCBlcnJvcik7CisJCQkJZ2l0X3N0cm1hcF9pbnNlcnQoc2VlbiwgYXNzaWduLT5uYW1lLCBhc3NpZ24sICZlcnJvcik7CiAJCQkJaWYgKGVycm9yIDwgMCkKIAkJCQkJZ290byBjbGVhbnVwOwogCkBAIC0yOTIsNyArMjkwLDcgQEAKIAlpbnQgZXJyb3IgPSAwOwogCWNvbnN0IGNoYXIgKndvcmtkaXIgPSBnaXRfcmVwb3NpdG9yeV93b3JrZGlyKHJlcG8pOwogCWdpdF9pbmRleCAqaWR4ID0gTlVMTDsKLQlnaXRfYnVmIHN5cyA9IEdJVF9CVUZfSU5JVDsKKwlnaXRfYnVmIHBhdGggPSBHSVRfQlVGX0lOSVQ7CiAKIAlpZiAoYXR0cl9zZXNzaW9uICYmIGF0dHJfc2Vzc2lvbi0+aW5pdF9zZXR1cCkKIAkJcmV0dXJuIDA7CkBAIC0zMDQsNDAgKzMwMiw0NSBAQAogCSAqIGRlZmluaXRpb25zIHdpbGwgYmUgYXZhaWxhYmxlIGZvciBsYXRlciBmaWxlIHBhcnNpbmcKIAkgKi8KIAotCWVycm9yID0gc3lzdGVtX2F0dHJfZmlsZSgmc3lzLCBhdHRyX3Nlc3Npb24pOworCWVycm9yID0gc3lzdGVtX2F0dHJfZmlsZSgmcGF0aCwgYXR0cl9zZXNzaW9uKTsKIAogCWlmIChlcnJvciA9PSAwKQogCQllcnJvciA9IHByZWxvYWRfYXR0cl9maWxlKAotCQkJcmVwbywgYXR0cl9zZXNzaW9uLCBHSVRfQVRUUl9GSUxFX19GUk9NX0ZJTEUsIE5VTEwsIHN5cy5wdHIpOworCQkJcmVwbywgYXR0cl9zZXNzaW9uLCBHSVRfQVRUUl9GSUxFX19GUk9NX0ZJTEUsIE5VTEwsIHBhdGgucHRyKTsKIAogCWlmIChlcnJvciAhPSBHSVRfRU5PVEZPVU5EKQotCQlyZXR1cm4gZXJyb3I7Ci0KLQlnaXRfYnVmX2ZyZWUoJnN5cyk7CisJCWdvdG8gb3V0OwogCiAJaWYgKChlcnJvciA9IHByZWxvYWRfYXR0cl9maWxlKAogCQkJcmVwbywgYXR0cl9zZXNzaW9uLCBHSVRfQVRUUl9GSUxFX19GUk9NX0ZJTEUsCiAJCQlOVUxMLCBnaXRfcmVwb3NpdG9yeV9hdHRyX2NhY2hlKHJlcG8pLT5jZmdfYXR0cl9maWxlKSkgPCAwKQotCQlyZXR1cm4gZXJyb3I7CisJCWdvdG8gb3V0OworCisJaWYgKChlcnJvciA9IGdpdF9yZXBvc2l0b3J5X2l0ZW1fcGF0aCgmcGF0aCwKKwkJCXJlcG8sIEdJVF9SRVBPU0lUT1JZX0lURU1fSU5GTykpIDwgMCkKKwkJZ290byBvdXQ7CiAKIAlpZiAoKGVycm9yID0gcHJlbG9hZF9hdHRyX2ZpbGUoCiAJCQlyZXBvLCBhdHRyX3Nlc3Npb24sIEdJVF9BVFRSX0ZJTEVfX0ZST01fRklMRSwKLQkJCWdpdF9yZXBvc2l0b3J5X3BhdGgocmVwbyksIEdJVF9BVFRSX0ZJTEVfSU5SRVBPKSkgPCAwKQotCQlyZXR1cm4gZXJyb3I7CisJCQlwYXRoLnB0ciwgR0lUX0FUVFJfRklMRV9JTlJFUE8pKSA8IDApCisJCWdvdG8gb3V0OwogCiAJaWYgKHdvcmtkaXIgIT0gTlVMTCAmJgogCQkoZXJyb3IgPSBwcmVsb2FkX2F0dHJfZmlsZSgKIAkJCXJlcG8sIGF0dHJfc2Vzc2lvbiwgR0lUX0FUVFJfRklMRV9fRlJPTV9GSUxFLCB3b3JrZGlyLCBHSVRfQVRUUl9GSUxFKSkgPCAwKQotCQlyZXR1cm4gZXJyb3I7CisJCWdvdG8gb3V0OwogCiAJaWYgKChlcnJvciA9IGdpdF9yZXBvc2l0b3J5X2luZGV4X193ZWFrcHRyKCZpZHgsIHJlcG8pKSA8IDAgfHwKIAkJKGVycm9yID0gcHJlbG9hZF9hdHRyX2ZpbGUoCiAJCQlyZXBvLCBhdHRyX3Nlc3Npb24sIEdJVF9BVFRSX0ZJTEVfX0ZST01fSU5ERVgsIE5VTEwsIEdJVF9BVFRSX0ZJTEUpKSA8IDApCi0JCXJldHVybiBlcnJvcjsKKwkJZ290byBvdXQ7CiAKIAlpZiAoYXR0cl9zZXNzaW9uKQogCQlhdHRyX3Nlc3Npb24tPmluaXRfc2V0dXAgPSAxOwogCitvdXQ6CisJZ2l0X2J1Zl9mcmVlKCZwYXRoKTsKKwogCXJldHVybiBlcnJvcjsKIH0KIApAQCAtNDcyLDcgKzQ3NSw3IEBACiAJZ2l0X3ZlY3RvciAqZmlsZXMpCiB7CiAJaW50IGVycm9yID0gMDsKLQlnaXRfYnVmIGRpciA9IEdJVF9CVUZfSU5JVDsKKwlnaXRfYnVmIGRpciA9IEdJVF9CVUZfSU5JVCwgYXR0cmZpbGUgPSBHSVRfQlVGX0lOSVQ7CiAJY29uc3QgY2hhciAqd29ya2RpciA9IGdpdF9yZXBvc2l0b3J5X3dvcmtkaXIocmVwbyk7CiAJYXR0cl93YWxrX3VwX2luZm8gaW5mbyA9IHsgTlVMTCB9OwogCkBAIC00OTQsOSArNDk3LDEzIEBACiAJICogLSAkR0lUX1BSRUZJWC9ldGMvZ2l0YXR0cmlidXRlcwogCSAqLwogCisJZXJyb3IgPSBnaXRfcmVwb3NpdG9yeV9pdGVtX3BhdGgoJmF0dHJmaWxlLCByZXBvLCBHSVRfUkVQT1NJVE9SWV9JVEVNX0lORk8pOworCWlmIChlcnJvciA8IDApCisJCWdvdG8gY2xlYW51cDsKKwogCWVycm9yID0gcHVzaF9hdHRyX2ZpbGUoCiAJCXJlcG8sIGF0dHJfc2Vzc2lvbiwgZmlsZXMsIEdJVF9BVFRSX0ZJTEVfX0ZST01fRklMRSwKLQkJZ2l0X3JlcG9zaXRvcnlfcGF0aChyZXBvKSwgR0lUX0FUVFJfRklMRV9JTlJFUE8pOworCQlhdHRyZmlsZS5wdHIsIEdJVF9BVFRSX0ZJTEVfSU5SRVBPKTsKIAlpZiAoZXJyb3IgPCAwKQogCQlnb3RvIGNsZWFudXA7CiAKQEAgLTUzOCw2ICs1NDUsNyBAQAogIGNsZWFudXA6CiAJaWYgKGVycm9yIDwgMCkKIAkJcmVsZWFzZV9hdHRyX2ZpbGVzKGZpbGVzKTsKKwlnaXRfYnVmX2ZyZWUoJmF0dHJmaWxlKTsKIAlnaXRfYnVmX2ZyZWUoJmRpcik7CiAKIAlyZXR1cm4gZXJyb3I7CmRpZmYgLS1naXQgYS9zcmMvYXR0cl9maWxlLmMgYi9zcmMvYXR0cl9maWxlLmMKaW5kZXggMGJiNzYxZC4uZTMwZWE1ZSAxMDA2NDQKLS0tIGEvc3JjL2F0dHJfZmlsZS5jCisrKyBiL3NyYy9hdHRyX2ZpbGUuYwpAQCAtMzk1LDkgKzM5NSwxMyBAQAogCWlmICgobWF0Y2gtPmZsYWdzICYgR0lUX0FUVFJfRk5NQVRDSF9ESVJFQ1RPUlkpICYmICFwYXRoLT5pc19kaXIpIHsKIAkJYm9vbCBzYW1lbmFtZTsKIAotCQkvKiBmb3IgYXR0cmlidXRlIGNoZWNrcyBvciByb290IGlnbm9yZSBjaGVja3MsIGZhaWwgbWF0Y2ggKi8KKwkJLyoKKwkJICogZm9yIGF0dHJpYnV0ZSBjaGVja3Mgb3IgY2hlY2tzIGF0IHRoZSByb290IG9mIHRoaXMgbWF0Y2gncworCQkgKiBjb250YWluaW5nX2RpciAob3Igcm9vdCBvZiB0aGUgcmVwb3NpdG9yeSBpZiBubyBjb250YWluaW5nX2RpciksCisJCSAqIGRvIG5vdCBtYXRjaC4KKwkJICovCiAJCWlmICghKG1hdGNoLT5mbGFncyAmIEdJVF9BVFRSX0ZOTUFUQ0hfSUdOT1JFKSB8fAotCQkJcGF0aC0+YmFzZW5hbWUgPT0gcGF0aC0+cGF0aCkKKwkJCXBhdGgtPmJhc2VuYW1lID09IHJlbHBhdGgpCiAJCQlyZXR1cm4gZmFsc2U7CiAKIAkJZmxhZ3MgfD0gRk5NX0xFQURJTkdfRElSOwpkaWZmIC0tZ2l0IGEvc3JjL2F0dHJfZmlsZS5oIGIvc3JjL2F0dHJfZmlsZS5oCmluZGV4IDM4OGVjZjQuLmE5YWYyNDAgMTAwNjQ0Ci0tLSBhL3NyYy9hdHRyX2ZpbGUuaAorKysgYi9zcmMvYXR0cl9maWxlLmgKQEAgLTE1LDcgKzE1LDcgQEAKICNpbmNsdWRlICJmaWxlb3BzLmgiCiAKICNkZWZpbmUgR0lUX0FUVFJfRklMRQkJCSIuZ2l0YXR0cmlidXRlcyIKLSNkZWZpbmUgR0lUX0FUVFJfRklMRV9JTlJFUE8JImluZm8vYXR0cmlidXRlcyIKKyNkZWZpbmUgR0lUX0FUVFJfRklMRV9JTlJFUE8JImF0dHJpYnV0ZXMiCiAjZGVmaW5lIEdJVF9BVFRSX0ZJTEVfU1lTVEVNCSJnaXRhdHRyaWJ1dGVzIgogI2RlZmluZSBHSVRfQVRUUl9GSUxFX1hERwkJImF0dHJpYnV0ZXMiCiAKZGlmZiAtLWdpdCBhL3NyYy9hdHRyY2FjaGUuYyBiL3NyYy9hdHRyY2FjaGUuYwppbmRleCAwYWRlMzhjLi41NDE2MTg5IDEwMDY0NAotLS0gYS9zcmMvYXR0cmNhY2hlLmMKKysrIGIvc3JjL2F0dHJjYWNoZS5jCkBAIC01LDggKzUsNiBAQAogI2luY2x1ZGUgInN5c2Rpci5oIgogI2luY2x1ZGUgImlnbm9yZS5oIgogCi1HSVRfX1VTRV9TVFJNQVAKLQogR0lUX0lOTElORShpbnQpIGF0dHJfY2FjaGVfbG9jayhnaXRfYXR0cl9jYWNoZSAqY2FjaGUpCiB7CiAJR0lUX1VOVVNFRChjYWNoZSk7IC8qIGF2b2lkIHdhcm5pbmcgaWYgdGhyZWFkaW5nIGlzIG9mZiAqLwpAQCAtODIsNyArODAsNyBAQAogCQkmZW50cnksIGdpdF9yZXBvc2l0b3J5X3dvcmtkaXIocmVwbyksIHBhdGgsICZjYWNoZS0+cG9vbCk7CiAKIAlpZiAoIWVycm9yKSB7Ci0JCWdpdF9zdHJtYXBfaW5zZXJ0KGNhY2hlLT5maWxlcywgZW50cnktPnBhdGgsIGVudHJ5LCBlcnJvcik7CisJCWdpdF9zdHJtYXBfaW5zZXJ0KGNhY2hlLT5maWxlcywgZW50cnktPnBhdGgsIGVudHJ5LCAmZXJyb3IpOwogCQlpZiAoZXJyb3IgPiAwKQogCQkJZXJyb3IgPSAwOwogCX0KQEAgLTEwNSw4ICsxMDMsMTEgQEAKIAlHSVRfUkVGQ09VTlRfT1dOKGZpbGUsIGVudHJ5KTsKIAlHSVRfUkVGQ09VTlRfSU5DKGZpbGUpOwogCi0Jb2xkID0gZ2l0X19jb21wYXJlX2FuZF9zd2FwKAotCQkmZW50cnktPmZpbGVbZmlsZS0+c291cmNlXSwgZW50cnktPmZpbGVbZmlsZS0+c291cmNlXSwgZmlsZSk7CisJLyoKKwkgKiBSZXBsYWNlIHRoZSBleGlzdGluZyB2YWx1ZSBpZiBhbm90aGVyIHRocmVhZCBoYXMKKwkgKiBjcmVhdGVkIGl0IGluIHRoZSBtZWFudGltZS4KKwkgKi8KKwlvbGQgPSBnaXRfX3N3YXAoZW50cnktPmZpbGVbZmlsZS0+c291cmNlXSwgZmlsZSk7CiAKIAlpZiAob2xkKSB7CiAJCUdJVF9SRUZDT1VOVF9PV04ob2xkLCBOVUxMKTsKQEAgLTEyMSwyMCArMTIyLDIyIEBACiB7CiAJaW50IGVycm9yID0gMDsKIAlnaXRfYXR0cl9maWxlX2VudHJ5ICplbnRyeTsKKwlnaXRfYXR0cl9maWxlICpvbGQgPSBOVUxMOwogCiAJaWYgKCFmaWxlKQogCQlyZXR1cm4gMDsKKwogCWlmICgoZXJyb3IgPSBhdHRyX2NhY2hlX2xvY2soY2FjaGUpKSA8IDApCiAJCXJldHVybiBlcnJvcjsKIAogCWlmICgoZW50cnkgPSBhdHRyX2NhY2hlX2xvb2t1cF9lbnRyeShjYWNoZSwgZmlsZS0+ZW50cnktPnBhdGgpKSAhPSBOVUxMKQotCQlmaWxlID0gZ2l0X19jb21wYXJlX2FuZF9zd2FwKCZlbnRyeS0+ZmlsZVtmaWxlLT5zb3VyY2VdLCBmaWxlLCBOVUxMKTsKKwkJb2xkID0gZ2l0X19jb21wYXJlX2FuZF9zd2FwKCZlbnRyeS0+ZmlsZVtmaWxlLT5zb3VyY2VdLCBmaWxlLCBOVUxMKTsKIAogCWF0dHJfY2FjaGVfdW5sb2NrKGNhY2hlKTsKIAotCWlmIChmaWxlKSB7Ci0JCUdJVF9SRUZDT1VOVF9PV04oZmlsZSwgTlVMTCk7Ci0JCWdpdF9hdHRyX2ZpbGVfX2ZyZWUoZmlsZSk7CisJaWYgKG9sZCkgeworCQlHSVRfUkVGQ09VTlRfT1dOKG9sZCwgTlVMTCk7CisJCWdpdF9hdHRyX2ZpbGVfX2ZyZWUob2xkKTsKIAl9CiAKIAlyZXR1cm4gZXJyb3I7CkBAIC0yODcsMTQgKzI5MCwxNiBAQAogCQljb25zdCBjaGFyICpjZmd2YWwgPSBlbnRyeS0+dmFsdWU7CiAKIAkJLyogZXhwYW5kIGxlYWRpbmcgfi8gYXMgbmVlZGVkICovCi0JCWlmIChjZmd2YWwgJiYgY2ZndmFsWzBdID09ICd+JyAmJiBjZmd2YWxbMV0gPT0gJy8nICYmCi0JCQkhZ2l0X3N5c2Rpcl9maW5kX2dsb2JhbF9maWxlKCZidWYsICZjZmd2YWxbMl0pKQotCQkJKm91dCA9IGdpdF9idWZfZGV0YWNoKCZidWYpOwotCQllbHNlIGlmIChjZmd2YWwpCisJCWlmIChjZmd2YWwgJiYgY2ZndmFsWzBdID09ICd+JyAmJiBjZmd2YWxbMV0gPT0gJy8nKSB7CisJCQlpZiAoISAoZXJyb3IgPSBnaXRfc3lzZGlyX2V4cGFuZF9nbG9iYWxfZmlsZSgmYnVmLCAmY2ZndmFsWzJdKSkpCisJCQkJKm91dCA9IGdpdF9idWZfZGV0YWNoKCZidWYpOworCQl9IGVsc2UgaWYgKGNmZ3ZhbCkgewogCQkJKm91dCA9IGdpdF9fc3RyZHVwKGNmZ3ZhbCk7CisJCX0KIAl9Ci0JZWxzZSBpZiAoIWdpdF9zeXNkaXJfZmluZF94ZGdfZmlsZSgmYnVmLCBmYWxsYmFjaykpCisJZWxzZSBpZiAoIWdpdF9zeXNkaXJfZmluZF94ZGdfZmlsZSgmYnVmLCBmYWxsYmFjaykpIHsKIAkJKm91dCA9IGdpdF9idWZfZGV0YWNoKCZidWYpOworCX0KIAogCWdpdF9jb25maWdfZW50cnlfZnJlZShlbnRyeSk7CiAJZ2l0X2J1Zl9mcmVlKCZidWYpOwpAQCAtMzA5LDcgKzMxNCw3IEBACiAJaWYgKCFjYWNoZSkKIAkJcmV0dXJuOwogCi0JdW5sb2NrID0gKGdpdF9tdXRleF9sb2NrKCZjYWNoZS0+bG9jaykgPT0gMCk7CisJdW5sb2NrID0gKGF0dHJfY2FjaGVfbG9jayhjYWNoZSkgPT0gMCk7CiAKIAlpZiAoY2FjaGUtPmZpbGVzICE9IE5VTEwpIHsKIAkJZ2l0X2F0dHJfZmlsZV9lbnRyeSAqZW50cnk7CkBAIC0zNDUsMTMgKzM1MCwxMyBAQAogCWNhY2hlLT5jZmdfZXhjbF9maWxlID0gTlVMTDsKIAogCWlmICh1bmxvY2spCi0JCWdpdF9tdXRleF91bmxvY2soJmNhY2hlLT5sb2NrKTsKKwkJYXR0cl9jYWNoZV91bmxvY2soY2FjaGUpOwogCWdpdF9tdXRleF9mcmVlKCZjYWNoZS0+bG9jayk7CiAKIAlnaXRfX2ZyZWUoY2FjaGUpOwogfQogCi1pbnQgZ2l0X2F0dHJfY2FjaGVfX2RvX2luaXQoZ2l0X3JlcG9zaXRvcnkgKnJlcG8pCitpbnQgZ2l0X2F0dHJfY2FjaGVfX2luaXQoZ2l0X3JlcG9zaXRvcnkgKnJlcG8pCiB7CiAJaW50IHJldCA9IDA7CiAJZ2l0X2F0dHJfY2FjaGUgKmNhY2hlID0gZ2l0X3JlcG9zaXRvcnlfYXR0cl9jYWNoZShyZXBvKTsKQEAgLTQyOSwxMSArNDM0LDExIEBACiAJaWYgKG1hY3JvLT5hc3NpZ25zLmxlbmd0aCA9PSAwKQogCQlyZXR1cm4gMDsKIAotCWlmIChnaXRfbXV0ZXhfbG9jaygmY2FjaGUtPmxvY2spIDwgMCkgeworCWlmIChhdHRyX2NhY2hlX2xvY2soY2FjaGUpIDwgMCkgewogCQlnaXRlcnJfc2V0KEdJVEVSUl9PUywgInVuYWJsZSB0byBnZXQgYXR0ciBjYWNoZSBsb2NrIik7CiAJCWVycm9yID0gLTE7CiAJfSBlbHNlIHsKLQkJZ2l0X3N0cm1hcF9pbnNlcnQobWFjcm9zLCBtYWNyby0+bWF0Y2gucGF0dGVybiwgbWFjcm8sIGVycm9yKTsKKwkJZ2l0X3N0cm1hcF9pbnNlcnQobWFjcm9zLCBtYWNyby0+bWF0Y2gucGF0dGVybiwgbWFjcm8sICZlcnJvcik7CiAJCWdpdF9tdXRleF91bmxvY2soJmNhY2hlLT5sb2NrKTsKIAl9CiAKZGlmZiAtLWdpdCBhL3NyYy9hdHRyY2FjaGUuaCBiL3NyYy9hdHRyY2FjaGUuaAppbmRleCA0NGUxZmZkLi5iOTFlZGQzIDEwMDY0NAotLS0gYS9zcmMvYXR0cmNhY2hlLmgKKysrIGIvc3JjL2F0dHJjYWNoZS5oCkBAIC0yMiwxMCArMjIsNyBAQAogCWdpdF9wb29sICBwb29sOwogfSBnaXRfYXR0cl9jYWNoZTsKIAotZXh0ZXJuIGludCBnaXRfYXR0cl9jYWNoZV9fZG9faW5pdChnaXRfcmVwb3NpdG9yeSAqcmVwbyk7Ci0KLSNkZWZpbmUgZ2l0X2F0dHJfY2FjaGVfX2luaXQoUkVQTykgXAotCShnaXRfcmVwb3NpdG9yeV9hdHRyX2NhY2hlKFJFUE8pID8gMCA6IGdpdF9hdHRyX2NhY2hlX19kb19pbml0KFJFUE8pKQorZXh0ZXJuIGludCBnaXRfYXR0cl9jYWNoZV9faW5pdChnaXRfcmVwb3NpdG9yeSAqcmVwbyk7CiAKIC8qIGdldCBmaWxlIC0gbG9hZGluZyBhbmQgcmVsb2FkIGFzIG5lZWRlZCAqLwogZXh0ZXJuIGludCBnaXRfYXR0cl9jYWNoZV9fZ2V0KApkaWZmIC0tZ2l0IGEvc3JjL2JsYW1lX2dpdC5jIGIvc3JjL2JsYW1lX2dpdC5jCmluZGV4IDk2Nzg1YzcuLjEzZjVjYjQgMTAwNjQ0Ci0tLSBhL3NyYy9ibGFtZV9naXQuYworKysgYi9zcmMvYmxhbWVfZ2l0LmMKQEAgLTQ3OCwxNCArNDc4LDE1IEBACiAgKiBUaGUgYmxvYnMgb2Ygb3JpZ2luIGFuZCBwb3JpZ2luIGV4YWN0bHkgbWF0Y2gsIHNvIGV2ZXJ5dGhpbmcgb3JpZ2luIGlzCiAgKiBzdXNwZWN0ZWQgZm9yIGNhbiBiZSBibGFtZWQgb24gdGhlIHBhcmVudC4KICAqLwotc3RhdGljIHZvaWQgcGFzc193aG9sZV9ibGFtZShnaXRfYmxhbWUgKmJsYW1lLAorc3RhdGljIGludCBwYXNzX3dob2xlX2JsYW1lKGdpdF9ibGFtZSAqYmxhbWUsCiAJCWdpdF9ibGFtZV9fb3JpZ2luICpvcmlnaW4sIGdpdF9ibGFtZV9fb3JpZ2luICpwb3JpZ2luKQogewogCWdpdF9ibGFtZV9fZW50cnkgKmU7CiAKLQlpZiAoIXBvcmlnaW4tPmJsb2IpCi0JCWdpdF9vYmplY3RfbG9va3VwKChnaXRfb2JqZWN0KiopJnBvcmlnaW4tPmJsb2IsIGJsYW1lLT5yZXBvc2l0b3J5LAotCQkJCWdpdF9ibG9iX2lkKG9yaWdpbi0+YmxvYiksIEdJVF9PQkpfQkxPQik7CisJaWYgKCFwb3JpZ2luLT5ibG9iICYmCisJICAgIGdpdF9vYmplY3RfbG9va3VwKChnaXRfb2JqZWN0KiopJnBvcmlnaW4tPmJsb2IsIGJsYW1lLT5yZXBvc2l0b3J5LAorCQkJCWdpdF9ibG9iX2lkKG9yaWdpbi0+YmxvYiksIEdJVF9PQkpfQkxPQikgPCAwKQorCQlyZXR1cm4gLTE7CiAJZm9yIChlPWJsYW1lLT5lbnQ7IGU7IGU9ZS0+bmV4dCkgewogCQlpZiAoIXNhbWVfc3VzcGVjdChlLT5zdXNwZWN0LCBvcmlnaW4pKQogCQkJY29udGludWU7CkBAIC00OTMsNiArNDk0LDggQEAKIAkJb3JpZ2luX2RlY3JlZihlLT5zdXNwZWN0KTsKIAkJZS0+c3VzcGVjdCA9IHBvcmlnaW47CiAJfQorCisJcmV0dXJuIDA7CiB9CiAKIHN0YXRpYyBpbnQgcGFzc19ibGFtZShnaXRfYmxhbWUgKmJsYW1lLCBnaXRfYmxhbWVfX29yaWdpbiAqb3JpZ2luLCB1aW50MzJfdCBvcHQpCkBAIC01MTQsMTEgKzUxNywxMiBAQAogCWlmICghbnVtX3BhcmVudHMpIHsKIAkJZ2l0X29pZF9jcHkoJmJsYW1lLT5vcHRpb25zLm9sZGVzdF9jb21taXQsIGdpdF9jb21taXRfaWQoY29tbWl0KSk7CiAJCWdvdG8gZmluaXNoOwotCX0KLQllbHNlIGlmIChudW1fcGFyZW50cyA8IChpbnQpQVJSQVlfU0laRShzZ19idWYpKQorCX0gZWxzZSBpZiAobnVtX3BhcmVudHMgPCAoaW50KUFSUkFZX1NJWkUoc2dfYnVmKSkKIAkJbWVtc2V0KHNnX2J1ZiwgMCwgc2l6ZW9mKHNnX2J1ZikpOwotCWVsc2UKKwllbHNlIHsKIAkJc2dfb3JpZ2luID0gZ2l0X19jYWxsb2MobnVtX3BhcmVudHMsIHNpemVvZigqc2dfb3JpZ2luKSk7CisJCUdJVEVSUl9DSEVDS19BTExPQyhzZ19vcmlnaW4pOworCX0KIAogCWZvciAoaT0wOyBpPG51bV9wYXJlbnRzOyBpKyspIHsKIAkJZ2l0X2NvbW1pdCAqcDsKQEAgLTU0Myw3ICs1NDcsNyBAQAogCQl9CiAJCWlmIChwb3JpZ2luLT5ibG9iICYmIG9yaWdpbi0+YmxvYiAmJgogCQkgICAgIWdpdF9vaWRfY21wKGdpdF9ibG9iX2lkKHBvcmlnaW4tPmJsb2IpLCBnaXRfYmxvYl9pZChvcmlnaW4tPmJsb2IpKSkgewotCQkJcGFzc193aG9sZV9ibGFtZShibGFtZSwgb3JpZ2luLCBwb3JpZ2luKTsKKwkJCWVycm9yID0gcGFzc193aG9sZV9ibGFtZShibGFtZSwgb3JpZ2luLCBwb3JpZ2luKTsKIAkJCW9yaWdpbl9kZWNyZWYocG9yaWdpbik7CiAJCQlnb3RvIGZpbmlzaDsKIAkJfQpkaWZmIC0tZ2l0IGEvc3JjL2Jsb2IuYyBiL3NyYy9ibG9iLmMKaW5kZXggY2Q1ZGYzNS4uMTlkMzAzOSAxMDA2NDQKLS0tIGEvc3JjL2Jsb2IuYworKysgYi9zcmMvYmxvYi5jCkBAIC0zMjYsOCArMzI2LDggQEAKIAlzdHJlYW0tPnBhcmVudC5jbG9zZSA9IGJsb2Jfd3JpdGVzdHJlYW1fY2xvc2U7CiAJc3RyZWFtLT5wYXJlbnQuZnJlZSAgPSBibG9iX3dyaXRlc3RyZWFtX2ZyZWU7CiAKLQlpZiAoKGVycm9yID0gZ2l0X2J1Zl9qb2lucGF0aCgmcGF0aCwKLQkJCQkgICAgICBnaXRfcmVwb3NpdG9yeV9wYXRoKHJlcG8pLCBHSVRfT0JKRUNUU19ESVIgInN0cmVhbWVkIikpIDwgMCkKKwlpZiAoKGVycm9yID0gZ2l0X3JlcG9zaXRvcnlfaXRlbV9wYXRoKCZwYXRoLCByZXBvLCBHSVRfUkVQT1NJVE9SWV9JVEVNX09CSkVDVFMpKSA8IDAKKwkJfHwgKGVycm9yID0gZ2l0X2J1Zl9qb2lucGF0aCgmcGF0aCwgcGF0aC5wdHIsICJzdHJlYW1lZCIpKSA8IDApCiAJCWdvdG8gY2xlYW51cDsKIAogCWlmICgoZXJyb3IgPSBnaXRfZmlsZWJ1Zl9vcGVuX3dpdGhzaXplKCZzdHJlYW0tPmZidWYsIGdpdF9idWZfY3N0cigmcGF0aCksIEdJVF9GSUxFQlVGX1RFTVBPUkFSWSwKZGlmZiAtLWdpdCBhL3NyYy9icmFuY2guYyBiL3NyYy9icmFuY2guYwppbmRleCA3ZGRjYjNkLi5mZTQ5NTVhIDEwMDY0NAotLS0gYS9zcmMvYnJhbmNoLmMKKysrIGIvc3JjL2JyYW5jaC5jCkBAIC0xMyw2ICsxMyw3IEBACiAjaW5jbHVkZSAicmVmcy5oIgogI2luY2x1ZGUgInJlbW90ZS5oIgogI2luY2x1ZGUgImFubm90YXRlZF9jb21taXQuaCIKKyNpbmNsdWRlICJ3b3JrdHJlZS5oIgogCiAjaW5jbHVkZSAiZ2l0Mi9icmFuY2guaCIKIApAQCAtMTI2LDYgKzEyNywzMSBAQAogCQlyZXBvc2l0b3J5LCBicmFuY2hfbmFtZSwgY29tbWl0LT5jb21taXQsIGNvbW1pdC0+ZGVzY3JpcHRpb24sIGZvcmNlKTsKIH0KIAorc3RhdGljIGludCBicmFuY2hfZXF1YWxzKGdpdF9yZXBvc2l0b3J5ICpyZXBvLCBjb25zdCBjaGFyICpwYXRoLCB2b2lkICpwYXlsb2FkKQoreworCWdpdF9yZWZlcmVuY2UgKmJyYW5jaCA9IChnaXRfcmVmZXJlbmNlICopIHBheWxvYWQ7CisJZ2l0X3JlZmVyZW5jZSAqaGVhZCA9IE5VTEw7CisJaW50IGVxdWFsID0gMDsKKworCWlmIChnaXRfcmVmZXJlbmNlX19yZWFkX2hlYWQoJmhlYWQsIHJlcG8sIHBhdGgpIDwgMCB8fAorCQlnaXRfcmVmZXJlbmNlX3R5cGUoaGVhZCkgIT0gR0lUX1JFRl9TWU1CT0xJQykKKwkJZ290byBkb25lOworCisJZXF1YWwgPSAhZ2l0X19zdHJjbXAoaGVhZC0+dGFyZ2V0LnN5bWJvbGljLCBicmFuY2gtPm5hbWUpOworCitkb25lOgorCWdpdF9yZWZlcmVuY2VfZnJlZShoZWFkKTsKKwlyZXR1cm4gZXF1YWw7Cit9CisKK2ludCBnaXRfYnJhbmNoX2lzX2NoZWNrZWRfb3V0KGNvbnN0IGdpdF9yZWZlcmVuY2UgKmJyYW5jaCkKK3sKKwlhc3NlcnQoYnJhbmNoICYmIGdpdF9yZWZlcmVuY2VfaXNfYnJhbmNoKGJyYW5jaCkpOworCisJcmV0dXJuIGdpdF9yZXBvc2l0b3J5X2ZvcmVhY2hfaGVhZChnaXRfcmVmZXJlbmNlX293bmVyKGJyYW5jaCksCisJCWJyYW5jaF9lcXVhbHMsICh2b2lkICopIGJyYW5jaCkgPT0gMTsKK30KKwogaW50IGdpdF9icmFuY2hfZGVsZXRlKGdpdF9yZWZlcmVuY2UgKmJyYW5jaCkKIHsKIAlpbnQgaXNfaGVhZDsKQEAgLTE0OSw2ICsxNzUsMTIgQEAKIAkJcmV0dXJuIC0xOwogCX0KIAorCWlmIChnaXRfcmVmZXJlbmNlX2lzX2JyYW5jaChicmFuY2gpICYmIGdpdF9icmFuY2hfaXNfY2hlY2tlZF9vdXQoYnJhbmNoKSkgeworCQlnaXRlcnJfc2V0KEdJVEVSUl9SRUZFUkVOQ0UsICJDYW5ub3QgZGVsZXRlIGJyYW5jaCAnJXMnIGFzIGl0IGlzICIKKwkJCSJ0aGUgY3VycmVudCBIRUFEIG9mIGEgbGlua2VkIHJlcG9zaXRvcnkuIiwgZ2l0X3JlZmVyZW5jZV9uYW1lKGJyYW5jaCkpOworCQlyZXR1cm4gLTE7CisJfQorCiAJaWYgKGdpdF9idWZfam9pbigmY29uZmlnX3NlY3Rpb24sICcuJywgImJyYW5jaCIsCiAJCQlnaXRfcmVmZXJlbmNlX25hbWUoYnJhbmNoKSArIHN0cmxlbihHSVRfUkVGU19IRUFEU19ESVIpKSA8IDApCiAJCWdvdG8gb25fZXJyb3I7CmRpZmYgLS1naXQgYS9zcmMvYnVmZmVyLmMgYi9zcmMvYnVmZmVyLmMKaW5kZXggZmRiNzMyZC4uNmRmY2JmYiAxMDA2NDQKLS0tIGEvc3JjL2J1ZmZlci5jCisrKyBiL3NyYy9idWZmZXIuYwpAQCAtMTgsMTggKzE4LDE5IEBACiBjaGFyIGdpdF9idWZfX29vbVsxXTsKIAogI2RlZmluZSBFTlNVUkVfU0laRShiLCBkKSBcCi0JaWYgKChkKSA+IGJ1Zi0+YXNpemUgJiYgZ2l0X2J1Zl9ncm93KGIsIChkKSkgPCAwKVwKKwlpZiAoKGQpID4gKGIpLT5hc2l6ZSAmJiBnaXRfYnVmX2dyb3coKGIpLCAoZCkpIDwgMClcCiAJCXJldHVybiAtMTsKIAogCi12b2lkIGdpdF9idWZfaW5pdChnaXRfYnVmICpidWYsIHNpemVfdCBpbml0aWFsX3NpemUpCitpbnQgZ2l0X2J1Zl9pbml0KGdpdF9idWYgKmJ1Ziwgc2l6ZV90IGluaXRpYWxfc2l6ZSkKIHsKIAlidWYtPmFzaXplID0gMDsKIAlidWYtPnNpemUgPSAwOwogCWJ1Zi0+cHRyID0gZ2l0X2J1Zl9faW5pdGJ1ZjsKIAotCWlmIChpbml0aWFsX3NpemUpCi0JCWdpdF9idWZfZ3JvdyhidWYsIGluaXRpYWxfc2l6ZSk7CisJRU5TVVJFX1NJWkUoYnVmLCBpbml0aWFsX3NpemUpOworCisJcmV0dXJuIDA7CiB9CiAKIGludCBnaXRfYnVmX3RyeV9ncm93KApAQCAtNTc3LDcgKzU3OCw3IEBACiAJcmV0dXJuIGRhdGE7CiB9CiAKLXZvaWQgZ2l0X2J1Zl9hdHRhY2goZ2l0X2J1ZiAqYnVmLCBjaGFyICpwdHIsIHNpemVfdCBhc2l6ZSkKK2ludCBnaXRfYnVmX2F0dGFjaChnaXRfYnVmICpidWYsIGNoYXIgKnB0ciwgc2l6ZV90IGFzaXplKQogewogCWdpdF9idWZfZnJlZShidWYpOwogCkBAIC01ODgsOSArNTg5LDEwIEBACiAJCQlidWYtPmFzaXplID0gKGFzaXplIDwgYnVmLT5zaXplKSA/IGJ1Zi0+c2l6ZSArIDEgOiBhc2l6ZTsKIAkJZWxzZSAvKiBwYXNzIDAgdG8gZmFsbCBiYWNrIG9uIHN0cmxlbiArIDEgKi8KIAkJCWJ1Zi0+YXNpemUgPSBidWYtPnNpemUgKyAxOwotCX0gZWxzZSB7Ci0JCWdpdF9idWZfZ3JvdyhidWYsIGFzaXplKTsKIAl9CisKKwlFTlNVUkVfU0laRShidWYsIGFzaXplKTsKKwlyZXR1cm4gMDsKIH0KIAogdm9pZCBnaXRfYnVmX2F0dGFjaF9ub3Rvd25lZChnaXRfYnVmICpidWYsIGNvbnN0IGNoYXIgKnB0ciwgc2l6ZV90IHNpemUpCkBAIC03MjQsOSArNzI2LDcgQEAKIAlHSVRFUlJfQ0hFQ0tfQUxMT0NfQUREKCZhbGxvY19sZW4sIHN0cmxlbl9hLCBzdHJsZW5fYik7CiAJR0lURVJSX0NIRUNLX0FMTE9DX0FERCgmYWxsb2NfbGVuLCBhbGxvY19sZW4sIG5lZWRfc2VwKTsKIAlHSVRFUlJfQ0hFQ0tfQUxMT0NfQUREKCZhbGxvY19sZW4sIGFsbG9jX2xlbiwgMSk7Ci0JaWYgKGdpdF9idWZfZ3JvdyhidWYsIGFsbG9jX2xlbikgPCAwKQotCQlyZXR1cm4gLTE7Ci0JYXNzZXJ0KGJ1Zi0+cHRyKTsKKwlFTlNVUkVfU0laRShidWYsIGFsbG9jX2xlbik7CiAKIAkvKiBmaXggdXAgaW50ZXJuYWwgcG9pbnRlcnMgKi8KIAlpZiAob2Zmc2V0X2EgPj0gMCkKQEAgLTc4MCw4ICs3ODAsNyBAQAogCUdJVEVSUl9DSEVDS19BTExPQ19BREQoJmxlbl90b3RhbCwgbGVuX3RvdGFsLCBzZXBfYik7CiAJR0lURVJSX0NIRUNLX0FMTE9DX0FERCgmbGVuX3RvdGFsLCBsZW5fdG90YWwsIGxlbl9jKTsKIAlHSVRFUlJfQ0hFQ0tfQUxMT0NfQUREKCZsZW5fdG90YWwsIGxlbl90b3RhbCwgMSk7Ci0JaWYgKGdpdF9idWZfZ3JvdyhidWYsIGxlbl90b3RhbCkgPCAwKQotCQlyZXR1cm4gLTE7CisJRU5TVVJFX1NJWkUoYnVmLCBsZW5fdG90YWwpOwogCiAJdGd0ID0gYnVmLT5wdHI7CiAKZGlmZiAtLWdpdCBhL3NyYy9idWZmZXIuaCBiL3NyYy9idWZmZXIuaAppbmRleCBjZGZjYTZkLi5iMGFlY2U0IDEwMDY0NAotLS0gYS9zcmMvYnVmZmVyLmgKKysrIGIvc3JjL2J1ZmZlci5oCkBAIC0zNCw3ICszNCw3IEBACiAgKiBGb3IgdGhlIGNhc2VzIHdoZXJlIEdJVF9CVUZfSU5JVCBjYW5ub3QgYmUgdXNlZCB0byBkbyBzdGF0aWMKICAqIGluaXRpYWxpemF0aW9uLgogICovCi1leHRlcm4gdm9pZCBnaXRfYnVmX2luaXQoZ2l0X2J1ZiAqYnVmLCBzaXplX3QgaW5pdGlhbF9zaXplKTsKK2V4dGVybiBpbnQgZ2l0X2J1Zl9pbml0KGdpdF9idWYgKmJ1Ziwgc2l6ZV90IGluaXRpYWxfc2l6ZSk7CiAKIC8qKgogICogUmVzaXplIHRoZSBidWZmZXIgYWxsb2NhdGlvbiB0byBtYWtlIG1vcmUgc3BhY2UuCkBAIC02NiwxMyArNjYsMTQgQEAKICAqIGxpYnJhcnksIHdoZW4gcHJvdmlkaW5nIGdpdF9idWYncywgbWF5IHdpc2ggdG8gcHJvdmlkZSBhIE5VTEwgcHRyIGZvcgogICogZWFzZSBvZiBoYW5kbGluZy4gIFRoZSBidWZmZXIgcm91dGluZXMsIGhvd2V2ZXIsIGV4cGVjdCBhIG5vbi1OVUxMIHB0cgogICogYWx3YXlzLiAgVGhpcyBoZWxwZXIgbWV0aG9kIHNpbXBseSBoYW5kbGVzIE5VTEwgaW5wdXQsIGNvbnZlcnRpbmcgdG8gYQotICogZ2l0X2J1Zl9faW5pdGJ1Zi4KKyAqIGdpdF9idWZfX2luaXRidWYuIElmIGEgYnVmZmVyIHdpdGggYSBub24tTlVMTCBwdHIgaXMgcGFzc2VkIGluLCB0aGlzIG1ldGhvZAorICogYXNzdXJlcyB0aGF0IHRoZSBidWZmZXIgaXMgJ1wwJy10ZXJtaW5hdGVkLgogICovCiBleHRlcm4gdm9pZCBnaXRfYnVmX3Nhbml0aXplKGdpdF9idWYgKmJ1Zik7CiAKIGV4dGVybiB2b2lkIGdpdF9idWZfc3dhcChnaXRfYnVmICpidWZfYSwgZ2l0X2J1ZiAqYnVmX2IpOwogZXh0ZXJuIGNoYXIgKmdpdF9idWZfZGV0YWNoKGdpdF9idWYgKmJ1Zik7Ci1leHRlcm4gdm9pZCBnaXRfYnVmX2F0dGFjaChnaXRfYnVmICpidWYsIGNoYXIgKnB0ciwgc2l6ZV90IGFzaXplKTsKK2V4dGVybiBpbnQgZ2l0X2J1Zl9hdHRhY2goZ2l0X2J1ZiAqYnVmLCBjaGFyICpwdHIsIHNpemVfdCBhc2l6ZSk7CiAKIC8qIFBvcHVsYXRlcyBhIGBnaXRfYnVmYCB3aGVyZSB0aGUgY29udGVudHMgYXJlIG5vdCAib3duZWQiIGJ5IHRoZQogICogYnVmZmVyLCBhbmQgY2FsbHMgdG8gYGdpdF9idWZfZnJlZWAgd2lsbCBub3QgZnJlZSB0aGUgZ2l2ZW4gYnVmLgpkaWZmIC0tZ2l0IGEvc3JjL2NhY2hlLmMgYi9zcmMvY2FjaGUuYwppbmRleCAxNmFlOWIzLi5jOTJhM2E3IDEwMDY0NAotLS0gYS9zcmMvY2FjaGUuYworKysgYi9zcmMvY2FjaGUuYwpAQCAtMTUsOCArMTUsNiBAQAogI2luY2x1ZGUgIm9iamVjdC5oIgogI2luY2x1ZGUgImdpdDIvb2lkLmgiCiAKLUdJVF9fVVNFX09JRE1BUAotCiBib29sIGdpdF9jYWNoZV9fZW5hYmxlZCA9IHRydWU7CiBzc2l6ZV90IGdpdF9jYWNoZV9fbWF4X3N0b3JhZ2UgPSAoMjU2ICogMTAyNCAqIDEwMjQpOwogZ2l0X2F0b21pY19zc2l6ZSBnaXRfY2FjaGVfX2N1cnJlbnRfc3RvcmFnZSA9IHswfTsKQEAgLTQ3LDEzICs0NSwxMyBAQAogewogCWdpdF9jYWNoZWRfb2JqICpvYmplY3Q7CiAKLQlpZiAoa2hfc2l6ZShjYWNoZS0+bWFwKSA9PSAwKQorCWlmIChnaXRfY2FjaGVfc2l6ZShjYWNoZSkgPT0gMCkKIAkJcmV0dXJuOwogCi0JcHJpbnRmKCJDYWNoZSAlcDogJWQgaXRlbXMgY2FjaGVkLCAlIlBSSWRaIiBieXRlc1xuIiwKLQkJY2FjaGUsIGtoX3NpemUoY2FjaGUtPm1hcCksIGNhY2hlLT51c2VkX21lbW9yeSk7CisJcHJpbnRmKCJDYWNoZSAlcDogJSJQUkl1WiIgaXRlbXMgY2FjaGVkLCAlIlBSSWRaIiBieXRlc1xuIiwKKwkJY2FjaGUsIGdpdF9jYWNoZV9zaXplKGNhY2hlKSwgY2FjaGUtPnVzZWRfbWVtb3J5KTsKIAotCWtoX2ZvcmVhY2hfdmFsdWUoY2FjaGUtPm1hcCwgb2JqZWN0LCB7CisJZ2l0X29pZG1hcF9mb3JlYWNoX3ZhbHVlKGNhY2hlLT5tYXAsIG9iamVjdCwgewogCQljaGFyIG9pZF9zdHJbOV07CiAJCXByaW50ZigiICVzJWMgJXMgKCUiUFJJdVoiKVxuIiwKIAkJCWdpdF9vYmplY3RfdHlwZTJzdHJpbmcob2JqZWN0LT50eXBlKSwKQEAgLTgxLDE0ICs3OSwxNCBAQAogewogCWdpdF9jYWNoZWRfb2JqICpldmljdCA9IE5VTEw7CiAKLQlpZiAoa2hfc2l6ZShjYWNoZS0+bWFwKSA9PSAwKQorCWlmIChnaXRfY2FjaGVfc2l6ZShjYWNoZSkgPT0gMCkKIAkJcmV0dXJuOwogCi0Ja2hfZm9yZWFjaF92YWx1ZShjYWNoZS0+bWFwLCBldmljdCwgeworCWdpdF9vaWRtYXBfZm9yZWFjaF92YWx1ZShjYWNoZS0+bWFwLCBldmljdCwgewogCQlnaXRfY2FjaGVkX29ial9kZWNyZWYoZXZpY3QpOwogCX0pOwogCi0Ja2hfY2xlYXIob2lkLCBjYWNoZS0+bWFwKTsKKwlnaXRfb2lkbWFwX2NsZWFyKGNhY2hlLT5tYXApOwogCWdpdF9hdG9taWNfc3NpemVfYWRkKCZnaXRfY2FjaGVfX2N1cnJlbnRfc3RvcmFnZSwgLWNhY2hlLT51c2VkX21lbW9yeSk7CiAJY2FjaGUtPnVzZWRfbWVtb3J5ID0gMDsKIH0KQEAgLTExOSwyMiArMTE3LDIyIEBACiAJc3NpemVfdCBldmljdGVkX21lbW9yeSA9IDA7CiAKIAkvKiBkbyBub3QgaW5maW5pdGUgbG9vcCBpZiB0aGVyZSdzIG5vdCBlbm91Z2ggZW50cmllcyB0byBldmljdCAgKi8KLQlpZiAoZXZpY3RfY291bnQgPiBraF9zaXplKGNhY2hlLT5tYXApKSB7CisJaWYgKGV2aWN0X2NvdW50ID4gZ2l0X2NhY2hlX3NpemUoY2FjaGUpKSB7CiAJCWNsZWFyX2NhY2hlKGNhY2hlKTsKIAkJcmV0dXJuOwogCX0KIAogCXdoaWxlIChldmljdF9jb3VudCA+IDApIHsKLQkJa2hpdGVyX3QgcG9zID0gc2VlZCsrICUga2hfZW5kKGNhY2hlLT5tYXApOworCQlraGl0ZXJfdCBwb3MgPSBzZWVkKysgJSBnaXRfb2lkbWFwX2VuZChjYWNoZS0+bWFwKTsKIAotCQlpZiAoa2hfZXhpc3QoY2FjaGUtPm1hcCwgcG9zKSkgewotCQkJZ2l0X2NhY2hlZF9vYmogKmV2aWN0ID0ga2hfdmFsKGNhY2hlLT5tYXAsIHBvcyk7CisJCWlmIChnaXRfb2lkbWFwX2hhc19kYXRhKGNhY2hlLT5tYXAsIHBvcykpIHsKKwkJCWdpdF9jYWNoZWRfb2JqICpldmljdCA9IGdpdF9vaWRtYXBfdmFsdWVfYXQoY2FjaGUtPm1hcCwgcG9zKTsKIAogCQkJZXZpY3RfY291bnQtLTsKIAkJCWV2aWN0ZWRfbWVtb3J5ICs9IGV2aWN0LT5zaXplOwogCQkJZ2l0X2NhY2hlZF9vYmpfZGVjcmVmKGV2aWN0KTsKIAotCQkJa2hfZGVsKG9pZCwgY2FjaGUtPm1hcCwgcG9zKTsKKwkJCWdpdF9vaWRtYXBfZGVsZXRlX2F0KGNhY2hlLT5tYXAsIHBvcyk7CiAJCX0KIAl9CiAKQEAgLTE1Niw5ICsxNTQsOSBAQAogCWlmICghZ2l0X2NhY2hlX19lbmFibGVkIHx8IGdpdF9yd2xvY2tfcmRsb2NrKCZjYWNoZS0+bG9jaykgPCAwKQogCQlyZXR1cm4gTlVMTDsKIAotCXBvcyA9IGtoX2dldChvaWQsIGNhY2hlLT5tYXAsIG9pZCk7Ci0JaWYgKHBvcyAhPSBraF9lbmQoY2FjaGUtPm1hcCkpIHsKLQkJZW50cnkgPSBraF92YWwoY2FjaGUtPm1hcCwgcG9zKTsKKwlwb3MgPSBnaXRfb2lkbWFwX2xvb2t1cF9pbmRleChjYWNoZS0+bWFwLCBvaWQpOworCWlmIChnaXRfb2lkbWFwX3ZhbGlkX2luZGV4KGNhY2hlLT5tYXAsIHBvcykpIHsKKwkJZW50cnkgPSBnaXRfb2lkbWFwX3ZhbHVlX2F0KGNhY2hlLT5tYXAsIHBvcyk7CiAKIAkJaWYgKGZsYWdzICYmIGVudHJ5LT5mbGFncyAhPSBmbGFncykgewogCQkJZW50cnkgPSBOVUxMOwpAQCAtMTkzLDE2ICsxOTEsMTQgQEAKIAlpZiAoZ2l0X2NhY2hlX19jdXJyZW50X3N0b3JhZ2UudmFsID4gZ2l0X2NhY2hlX19tYXhfc3RvcmFnZSkKIAkJY2FjaGVfZXZpY3RfZW50cmllcyhjYWNoZSk7CiAKLQlwb3MgPSBraF9nZXQob2lkLCBjYWNoZS0+bWFwLCAmZW50cnktPm9pZCk7CisJcG9zID0gZ2l0X29pZG1hcF9sb29rdXBfaW5kZXgoY2FjaGUtPm1hcCwgJmVudHJ5LT5vaWQpOwogCiAJLyogbm90IGZvdW5kICovCi0JaWYgKHBvcyA9PSBraF9lbmQoY2FjaGUtPm1hcCkpIHsKKwlpZiAoIWdpdF9vaWRtYXBfdmFsaWRfaW5kZXgoY2FjaGUtPm1hcCwgcG9zKSkgewogCQlpbnQgcnZhbDsKIAotCQlwb3MgPSBraF9wdXQob2lkLCBjYWNoZS0+bWFwLCAmZW50cnktPm9pZCwgJnJ2YWwpOworCQlnaXRfb2lkbWFwX2luc2VydChjYWNoZS0+bWFwLCAmZW50cnktPm9pZCwgZW50cnksICZydmFsKTsKIAkJaWYgKHJ2YWwgPj0gMCkgewotCQkJa2hfa2V5KGNhY2hlLT5tYXAsIHBvcykgPSAmZW50cnktPm9pZDsKLQkJCWtoX3ZhbChjYWNoZS0+bWFwLCBwb3MpID0gZW50cnk7CiAJCQlnaXRfY2FjaGVkX29ial9pbmNyZWYoZW50cnkpOwogCQkJY2FjaGUtPnVzZWRfbWVtb3J5ICs9IGVudHJ5LT5zaXplOwogCQkJZ2l0X2F0b21pY19zc2l6ZV9hZGQoJmdpdF9jYWNoZV9fY3VycmVudF9zdG9yYWdlLCAoc3NpemVfdCllbnRyeS0+c2l6ZSk7CkBAIC0yMTAsNyArMjA2LDcgQEAKIAl9CiAJLyogZm91bmQgKi8KIAllbHNlIHsKLQkJZ2l0X2NhY2hlZF9vYmogKnN0b3JlZF9lbnRyeSA9IGtoX3ZhbChjYWNoZS0+bWFwLCBwb3MpOworCQlnaXRfY2FjaGVkX29iaiAqc3RvcmVkX2VudHJ5ID0gZ2l0X29pZG1hcF92YWx1ZV9hdChjYWNoZS0+bWFwLCBwb3MpOwogCiAJCWlmIChzdG9yZWRfZW50cnktPmZsYWdzID09IGVudHJ5LT5mbGFncykgewogCQkJZ2l0X2NhY2hlZF9vYmpfZGVjcmVmKGVudHJ5KTsKQEAgLTIyMSw4ICsyMTcsOCBAQAogCQkJZ2l0X2NhY2hlZF9vYmpfZGVjcmVmKHN0b3JlZF9lbnRyeSk7CiAJCQlnaXRfY2FjaGVkX29ial9pbmNyZWYoZW50cnkpOwogCi0JCQlraF9rZXkoY2FjaGUtPm1hcCwgcG9zKSA9ICZlbnRyeS0+b2lkOwotCQkJa2hfdmFsKGNhY2hlLT5tYXAsIHBvcykgPSBlbnRyeTsKKwkJCWdpdF9vaWRtYXBfc2V0X2tleV9hdChjYWNoZS0+bWFwLCBwb3MsICZlbnRyeS0+b2lkKTsKKwkJCWdpdF9vaWRtYXBfc2V0X3ZhbHVlX2F0KGNhY2hlLT5tYXAsIHBvcywgZW50cnkpOwogCQl9IGVsc2UgewogCQkJLyogTk8gT1AgKi8KIAkJfQpkaWZmIC0tZ2l0IGEvc3JjL2NhY2hlLmggYi9zcmMvY2FjaGUuaAppbmRleCA2OTcxMjM3Li4wZjBiZmNmIDEwMDY0NAotLS0gYS9zcmMvY2FjaGUuaAorKysgYi9zcmMvY2FjaGUuaApAQCAtNTMsNyArNTMsNyBAQAogCiBHSVRfSU5MSU5FKHNpemVfdCkgZ2l0X2NhY2hlX3NpemUoZ2l0X2NhY2hlICpjYWNoZSkKIHsKLQlyZXR1cm4gKHNpemVfdClraF9zaXplKGNhY2hlLT5tYXApOworCXJldHVybiAoc2l6ZV90KWdpdF9vaWRtYXBfc2l6ZShjYWNoZS0+bWFwKTsKIH0KIAogR0lUX0lOTElORSh2b2lkKSBnaXRfY2FjaGVkX29ial9pbmNyZWYodm9pZCAqX29iaikKZGlmZiAtLWdpdCBhL3NyYy9jaGVja291dC5jIGIvc3JjL2NoZWNrb3V0LmMKaW5kZXggYjcwZDVhYi4uMjUwMThkMiAxMDA2NDQKLS0tIGEvc3JjL2NoZWNrb3V0LmMKKysrIGIvc3JjL2NoZWNrb3V0LmMKQEAgLTM1LDggKzM1LDYgQEAKICNpbmNsdWRlICJwb29sLmgiCiAjaW5jbHVkZSAic3RybWFwLmgiCiAKLUdJVF9fVVNFX1NUUk1BUAotCiAvKiBTZWUgZG9jcy9jaGVja291dC1pbnRlcm5hbHMubWQgZm9yIG1vcmUgaW5mb3JtYXRpb24gKi8KIAogZW51bSB7CkBAIC0zNzIsMTAgKzM3MCw4IEBACiAJCQkgKi8KIAkJCWNvbnN0IGdpdF9pbmRleF9lbnRyeSAqZSA9IGdpdF9pbmRleF9nZXRfYnlpbmRleChkYXRhLT5pbmRleCwgcG9zKTsKIAotCQkJaWYgKGUgIT0gTlVMTCAmJiBkYXRhLT5kaWZmLT5wZnhjb21wKGUtPnBhdGgsIHdkLT5wYXRoKSA9PSAwKSB7Ci0JCQkJbm90aWZ5ID0gR0lUX0NIRUNLT1VUX05PVElGWV9ESVJUWTsKLQkJCQlyZW1vdmUgPSAoKGRhdGEtPnN0cmF0ZWd5ICYgR0lUX0NIRUNLT1VUX0ZPUkNFKSAhPSAwKTsKLQkJCX0KKwkJCWlmIChlICE9IE5VTEwgJiYgZGF0YS0+ZGlmZi0+cGZ4Y29tcChlLT5wYXRoLCB3ZC0+cGF0aCkgPT0gMCkKKwkJCQlyZXR1cm4gZ2l0X2l0ZXJhdG9yX2FkdmFuY2VfaW50byh3ZGl0ZW0sIHdvcmtkaXIpOwogCQl9CiAJfQogCkBAIC0yMzIxLDggKzIzMTcsNiBAQAogCWdpdF9fZnJlZShkYXRhLT5wZngpOwogCWRhdGEtPnBmeCA9IE5VTEw7CiAKLQlnaXRfc3RybWFwX2ZyZWUoZGF0YS0+bWtkaXJfbWFwKTsKLQogCWdpdF9idWZfZnJlZSgmZGF0YS0+dGFyZ2V0X3BhdGgpOwogCWdpdF9idWZfZnJlZSgmZGF0YS0+dG1wKTsKIApAQCAtMjMzMCw2ICsyMzI0LDcgQEAKIAlkYXRhLT5pbmRleCA9IE5VTEw7CiAKIAlnaXRfc3RybWFwX2ZyZWUoZGF0YS0+bWtkaXJfbWFwKTsKKwlkYXRhLT5ta2Rpcl9tYXAgPSBOVUxMOwogCiAJZ2l0X2F0dHJfc2Vzc2lvbl9fZnJlZSgmZGF0YS0+YXR0cl9zZXNzaW9uKTsKIH0KZGlmZiAtLWdpdCBhL3NyYy9jaGVycnlwaWNrLmMgYi9zcmMvY2hlcnJ5cGljay5jCmluZGV4IGFiMDY3MzMuLmQ4YjY4NTggMTAwNjQ0Ci0tLSBhL3NyYy9jaGVycnlwaWNrLmMKKysrIGIvc3JjL2NoZXJyeXBpY2suYwpAQCAtMjgsNyArMjgsNyBAQAogCWdpdF9idWYgZmlsZV9wYXRoID0gR0lUX0JVRl9JTklUOwogCWludCBlcnJvciA9IDA7CiAKLQlpZiAoKGVycm9yID0gZ2l0X2J1Zl9qb2lucGF0aCgmZmlsZV9wYXRoLCByZXBvLT5wYXRoX3JlcG9zaXRvcnksIEdJVF9DSEVSUllQSUNLX0hFQURfRklMRSkpID49IDAgJiYKKwlpZiAoKGVycm9yID0gZ2l0X2J1Zl9qb2lucGF0aCgmZmlsZV9wYXRoLCByZXBvLT5naXRkaXIsIEdJVF9DSEVSUllQSUNLX0hFQURfRklMRSkpID49IDAgJiYKIAkJKGVycm9yID0gZ2l0X2ZpbGVidWZfb3BlbigmZmlsZSwgZmlsZV9wYXRoLnB0ciwgR0lUX0ZJTEVCVUZfRk9SQ0UsIEdJVF9DSEVSUllQSUNLX0ZJTEVfTU9ERSkpID49IDAgJiYKIAkJKGVycm9yID0gZ2l0X2ZpbGVidWZfcHJpbnRmKCZmaWxlLCAiJXNcbiIsIGNvbW1pdF9vaWRzdHIpKSA+PSAwKQogCQllcnJvciA9IGdpdF9maWxlYnVmX2NvbW1pdCgmZmlsZSk7CkBAIC00OSw3ICs0OSw3IEBACiAJZ2l0X2J1ZiBmaWxlX3BhdGggPSBHSVRfQlVGX0lOSVQ7CiAJaW50IGVycm9yID0gMDsKIAotCWlmICgoZXJyb3IgPSBnaXRfYnVmX2pvaW5wYXRoKCZmaWxlX3BhdGgsIHJlcG8tPnBhdGhfcmVwb3NpdG9yeSwgR0lUX01FUkdFX01TR19GSUxFKSkgPCAwIHx8CisJaWYgKChlcnJvciA9IGdpdF9idWZfam9pbnBhdGgoJmZpbGVfcGF0aCwgcmVwby0+Z2l0ZGlyLCBHSVRfTUVSR0VfTVNHX0ZJTEUpKSA8IDAgfHwKIAkJKGVycm9yID0gZ2l0X2ZpbGVidWZfb3BlbigmZmlsZSwgZmlsZV9wYXRoLnB0ciwgR0lUX0ZJTEVCVUZfRk9SQ0UsIEdJVF9DSEVSUllQSUNLX0ZJTEVfTU9ERSkpIDwgMCB8fAogCQkoZXJyb3IgPSBnaXRfZmlsZWJ1Zl9wcmludGYoJmZpbGUsICIlcyIsIGNvbW1pdF9tc2cpKSA8IDApCiAJCWdvdG8gY2xlYW51cDsKZGlmZiAtLWdpdCBhL3NyYy9jbG9uZS5jIGIvc3JjL2Nsb25lLmMKaW5kZXggMGQ0NzU2ZS4uMTZkZGZhYyAxMDA2NDQKLS0tIGEvc3JjL2Nsb25lLmMKKysrIGIvc3JjL2Nsb25lLmMKQEAgLTUxMyw5ICs1MTMsOCBAQAogCQlyZXR1cm4gZXJyb3I7CiAJfQogCi0JZ2l0X2J1Zl9qb2lucGF0aCgmc3JjX29kYiwgZ2l0X3JlcG9zaXRvcnlfcGF0aChzcmMpLCBHSVRfT0JKRUNUU19ESVIpOwotCWdpdF9idWZfam9pbnBhdGgoJmRzdF9vZGIsIGdpdF9yZXBvc2l0b3J5X3BhdGgocmVwbyksIEdJVF9PQkpFQ1RTX0RJUik7Ci0JaWYgKGdpdF9idWZfb29tKCZzcmNfb2RiKSB8fCBnaXRfYnVmX29vbSgmZHN0X29kYikpIHsKKwlpZiAoZ2l0X3JlcG9zaXRvcnlfaXRlbV9wYXRoKCZzcmNfb2RiLCBzcmMsIEdJVF9SRVBPU0lUT1JZX0lURU1fT0JKRUNUUykgPCAwCisJCXx8IGdpdF9yZXBvc2l0b3J5X2l0ZW1fcGF0aCgmZHN0X29kYiwgcmVwbywgR0lUX1JFUE9TSVRPUllfSVRFTV9PQkpFQ1RTKSA8IDApIHsKIAkJZXJyb3IgPSAtMTsKIAkJZ290byBjbGVhbnVwOwogCX0KZGlmZiAtLWdpdCBhL3NyYy9jb21taXQuYyBiL3NyYy9jb21taXQuYwppbmRleCA4N2FiMmFiLi40YTM0MDA1IDEwMDY0NAotLS0gYS9zcmMvY29tbWl0LmMKKysrIGIvc3JjL2NvbW1pdC5jCkBAIC0xNTksNiArMTU5LDkgQEAKIAlpZiAoZ2l0X3JlcG9zaXRvcnlfb2RiX193ZWFrcHRyKCZvZGIsIHJlcG8pIDwgMCkKIAkJZ290byBjbGVhbnVwOwogCisJaWYgKGdpdF9vZGJfX2ZyZXNoZW4ob2RiLCB0cmVlKSA8IDApCisJCWdvdG8gY2xlYW51cDsKKwogCWlmIChnaXRfb2RiX3dyaXRlKGlkLCBvZGIsIGJ1Zi5wdHIsIGJ1Zi5zaXplLCBHSVRfT0JKX0NPTU1JVCkgPCAwKQogCQlnb3RvIGNsZWFudXA7CiAKQEAgLTY0Miw3ICs2NDUsNyBAQAogewogCWNvbnN0IGNoYXIgKmVvbCwgKmJ1ZiA9IGNvbW1pdC0+cmF3X2hlYWRlcjsKIAotCWdpdF9idWZfc2FuaXRpemUob3V0KTsKKwlnaXRfYnVmX2NsZWFyKG91dCk7CiAKIAl3aGlsZSAoKGVvbCA9IHN0cmNocihidWYsICdcbicpKSkgewogCQkvKiBXZSBjYW4gc2tpcCBjb250aW51YXRpb25zIGhlcmUgKi8KQEAgLTcwNiw4ICs3MDksOCBAQAogCWNvbnN0IGNoYXIgKmgsICplb2w7CiAJaW50IGVycm9yOwogCi0JZ2l0X2J1Zl9zYW5pdGl6ZShzaWduYXR1cmUpOwotCWdpdF9idWZfc2FuaXRpemUoc2lnbmVkX2RhdGEpOworCWdpdF9idWZfY2xlYXIoc2lnbmF0dXJlKTsKKwlnaXRfYnVmX2NsZWFyKHNpZ25lZF9kYXRhKTsKIAogCWlmICghZmllbGQpCiAJCWZpZWxkID0gImdwZ3NpZyI7CkBAIC03NjYsOCArNzY5LDkgQEAKIAkJaWYgKGdpdF9idWZfb29tKHNpZ25hdHVyZSkpCiAJCQlnb3RvIG9vbTsKIAorCQllcnJvciA9IGdpdF9idWZfcHV0cyhzaWduZWRfZGF0YSwgZW9sKzEpOwogCQlnaXRfb2RiX29iamVjdF9mcmVlKG9iaik7Ci0JCXJldHVybiBnaXRfYnVmX3B1dHMoc2lnbmVkX2RhdGEsIGVvbCsxKTsKKwkJcmV0dXJuIGVycm9yOwogCX0KIAogCWdpdGVycl9zZXQoR0lURVJSX09CSkVDVCwgInRoaXMgY29tbWl0IGlzIG5vdCBzaWduZWQiKTsKZGlmZiAtLWdpdCBhL3NyYy9jb25maWcuYyBiL3NyYy9jb25maWcuYwppbmRleCAwZDczYWQyLi4xNjlhNjI4IDEwMDY0NAotLS0gYS9zcmMvY29uZmlnLmMKKysrIGIvc3JjL2NvbmZpZy5jCkBAIC01NzYsMjIgKzU3Niw1MCBAQAogICogU2V0dGVycwogICoqKioqKioqKioqKioqLwogCi1zdGF0aWMgaW50IGNvbmZpZ19lcnJvcl9ub2ZpbGVzKGNvbnN0IGNoYXIgKm5hbWUpCit0eXBlZGVmIGVudW0geworCUJBQ0tFTkRfVVNFX1NFVCwKKwlCQUNLRU5EX1VTRV9ERUxFVEUKK30gYmFja2VuZF91c2U7CisKK3N0YXRpYyBjb25zdCBjaGFyICp1c2VzW10gPSB7CisgICAgInNldCIsCisgICAgImRlbGV0ZSIKK307CisKK3N0YXRpYyBpbnQgZ2V0X2JhY2tlbmRfZm9yX3VzZShnaXRfY29uZmlnX2JhY2tlbmQgKipvdXQsCisJZ2l0X2NvbmZpZyAqY2ZnLCBjb25zdCBjaGFyICpuYW1lLCBiYWNrZW5kX3VzZSB1c2UpCiB7CisJc2l6ZV90IGk7CisJZmlsZV9pbnRlcm5hbCAqZjsKKworCSpvdXQgPSBOVUxMOworCisJaWYgKGdpdF92ZWN0b3JfbGVuZ3RoKCZjZmctPmZpbGVzKSA9PSAwKSB7CisJCWdpdGVycl9zZXQoR0lURVJSX0NPTkZJRywKKwkJCSJjYW5ub3QgJXMgdmFsdWUgZm9yICclcycgd2hlbiBubyBjb25maWcgZmlsZXMgZXhpc3QiLAorCQkJdXNlc1t1c2VdLCBuYW1lKTsKKwkJcmV0dXJuIEdJVF9FTk9URk9VTkQ7CisJfQorCisJZ2l0X3ZlY3Rvcl9mb3JlYWNoKCZjZmctPmZpbGVzLCBpLCBmKSB7CisJCWlmICghZi0+ZmlsZS0+cmVhZG9ubHkpIHsKKwkJCSpvdXQgPSBmLT5maWxlOworCQkJcmV0dXJuIDA7CisJCX0KKwl9CisKIAlnaXRlcnJfc2V0KEdJVEVSUl9DT05GSUcsCi0JCSJjYW5ub3Qgc2V0IHZhbHVlIGZvciAnJXMnIHdoZW4gbm8gY29uZmlnIGZpbGVzIGV4aXN0IiwgbmFtZSk7CisJCSJjYW5ub3QgJXMgdmFsdWUgZm9yICclcycgd2hlbiBhbGwgY29uZmlnIGZpbGVzIGFyZSByZWFkb25seSIsCisJCXVzZXNbdXNlXSwgbmFtZSk7CiAJcmV0dXJuIEdJVF9FTk9URk9VTkQ7CiB9CiAKIGludCBnaXRfY29uZmlnX2RlbGV0ZV9lbnRyeShnaXRfY29uZmlnICpjZmcsIGNvbnN0IGNoYXIgKm5hbWUpCiB7CiAJZ2l0X2NvbmZpZ19iYWNrZW5kICpmaWxlOwotCWZpbGVfaW50ZXJuYWwgKmludGVybmFsOwogCi0JaW50ZXJuYWwgPSBnaXRfdmVjdG9yX2dldCgmY2ZnLT5maWxlcywgMCk7Ci0JaWYgKCFpbnRlcm5hbCB8fCAhaW50ZXJuYWwtPmZpbGUpCi0JCXJldHVybiBjb25maWdfZXJyb3Jfbm9maWxlcyhuYW1lKTsKLQlmaWxlID0gaW50ZXJuYWwtPmZpbGU7CisJaWYgKGdldF9iYWNrZW5kX2Zvcl91c2UoJmZpbGUsIGNmZywgbmFtZSwgQkFDS0VORF9VU0VfREVMRVRFKSA8IDApCisJCXJldHVybiBHSVRfRU5PVEZPVU5EOwogCiAJcmV0dXJuIGZpbGUtPmRlbChmaWxlLCBuYW1lKTsKIH0KQEAgLTYxNywxNyArNjQ1LDE0IEBACiB7CiAJaW50IGVycm9yOwogCWdpdF9jb25maWdfYmFja2VuZCAqZmlsZTsKLQlmaWxlX2ludGVybmFsICppbnRlcm5hbDsKIAogCWlmICghdmFsdWUpIHsKIAkJZ2l0ZXJyX3NldChHSVRFUlJfQ09ORklHLCAidGhlIHZhbHVlIHRvIHNldCBjYW5ub3QgYmUgTlVMTCIpOwogCQlyZXR1cm4gLTE7CiAJfQogCi0JaW50ZXJuYWwgPSBnaXRfdmVjdG9yX2dldCgmY2ZnLT5maWxlcywgMCk7Ci0JaWYgKCFpbnRlcm5hbCB8fCAhaW50ZXJuYWwtPmZpbGUpCi0JCXJldHVybiBjb25maWdfZXJyb3Jfbm9maWxlcyhuYW1lKTsKLQlmaWxlID0gaW50ZXJuYWwtPmZpbGU7CisJaWYgKGdldF9iYWNrZW5kX2Zvcl91c2UoJmZpbGUsIGNmZywgbmFtZSwgQkFDS0VORF9VU0VfU0VUKSA8IDApCisJCXJldHVybiBHSVRfRU5PVEZPVU5EOwogCiAJZXJyb3IgPSBmaWxlLT5zZXQoZmlsZSwgbmFtZSwgdmFsdWUpOwogCkBAIC0xMDMyLDEyICsxMDU3LDkgQEAKIGludCBnaXRfY29uZmlnX3NldF9tdWx0aXZhcihnaXRfY29uZmlnICpjZmcsIGNvbnN0IGNoYXIgKm5hbWUsIGNvbnN0IGNoYXIgKnJlZ2V4cCwgY29uc3QgY2hhciAqdmFsdWUpCiB7CiAJZ2l0X2NvbmZpZ19iYWNrZW5kICpmaWxlOwotCWZpbGVfaW50ZXJuYWwgKmludGVybmFsOwogCi0JaW50ZXJuYWwgPSBnaXRfdmVjdG9yX2dldCgmY2ZnLT5maWxlcywgMCk7Ci0JaWYgKCFpbnRlcm5hbCB8fCAhaW50ZXJuYWwtPmZpbGUpCi0JCXJldHVybiBjb25maWdfZXJyb3Jfbm9maWxlcyhuYW1lKTsKLQlmaWxlID0gaW50ZXJuYWwtPmZpbGU7CisJaWYgKGdldF9iYWNrZW5kX2Zvcl91c2UoJmZpbGUsIGNmZywgbmFtZSwgQkFDS0VORF9VU0VfREVMRVRFKSA8IDApCisJCXJldHVybiBHSVRfRU5PVEZPVU5EOwogCiAJcmV0dXJuIGZpbGUtPnNldF9tdWx0aXZhcihmaWxlLCBuYW1lLCByZWdleHAsIHZhbHVlKTsKIH0KQEAgLTEwNDUsMTIgKzEwNjcsOSBAQAogaW50IGdpdF9jb25maWdfZGVsZXRlX211bHRpdmFyKGdpdF9jb25maWcgKmNmZywgY29uc3QgY2hhciAqbmFtZSwgY29uc3QgY2hhciAqcmVnZXhwKQogewogCWdpdF9jb25maWdfYmFja2VuZCAqZmlsZTsKLQlmaWxlX2ludGVybmFsICppbnRlcm5hbDsKIAotCWludGVybmFsID0gZ2l0X3ZlY3Rvcl9nZXQoJmNmZy0+ZmlsZXMsIDApOwotCWlmICghaW50ZXJuYWwgfHwgIWludGVybmFsLT5maWxlKQotCQlyZXR1cm4gY29uZmlnX2Vycm9yX25vZmlsZXMobmFtZSk7Ci0JZmlsZSA9IGludGVybmFsLT5maWxlOworCWlmIChnZXRfYmFja2VuZF9mb3JfdXNlKCZmaWxlLCBjZmcsIG5hbWUsIEJBQ0tFTkRfVVNFX0RFTEVURSkgPCAwKQorCQlyZXR1cm4gR0lUX0VOT1RGT1VORDsKIAogCXJldHVybiBmaWxlLT5kZWxfbXVsdGl2YXIoZmlsZSwgbmFtZSwgcmVnZXhwKTsKIH0KQEAgLTEzMzksOSArMTM1OCw2IEBACiAKIGludCBnaXRfY29uZmlnX3BhcnNlX3BhdGgoZ2l0X2J1ZiAqb3V0LCBjb25zdCBjaGFyICp2YWx1ZSkKIHsKLQlpbnQgZXJyb3IgPSAwOwotCWNvbnN0IGdpdF9idWYgKmhvbWU7Ci0KIAlhc3NlcnQob3V0ICYmIHZhbHVlKTsKIAogCWdpdF9idWZfc2FuaXRpemUob3V0KTsKQEAgLTEzNTIsMTYgKzEzNjgsNyBAQAogCQkJcmV0dXJuIC0xOwogCQl9CiAKLQkJaWYgKChlcnJvciA9IGdpdF9zeXNkaXJfZ2V0KCZob21lLCBHSVRfU1lTRElSX0dMT0JBTCkpIDwgMCkKLQkJCXJldHVybiBlcnJvcjsKLQotCQlnaXRfYnVmX3NldHMob3V0LCBob21lLT5wdHIpOwotCQlnaXRfYnVmX3B1dHMob3V0LCB2YWx1ZSArIDEpOwotCi0JCWlmIChnaXRfYnVmX29vbShvdXQpKQotCQkJcmV0dXJuIC0xOwotCi0JCXJldHVybiAwOworCQlyZXR1cm4gZ2l0X3N5c2Rpcl9leHBhbmRfZ2xvYmFsX2ZpbGUob3V0LCB2YWx1ZVsxXSA/ICZ2YWx1ZVsyXSA6IE5VTEwpOwogCX0KIAogCXJldHVybiBnaXRfYnVmX3NldHMob3V0LCB2YWx1ZSk7CmRpZmYgLS1naXQgYS9zcmMvY29uZmlnX2NhY2hlLmMgYi9zcmMvY29uZmlnX2NhY2hlLmMKaW5kZXggZGJlYTg3MS4uODQwNzIyMiAxMDA2NDQKLS0tIGEvc3JjL2NvbmZpZ19jYWNoZS5jCisrKyBiL3NyYy9jb25maWdfY2FjaGUuYwpAQCAtNzgsNiArNzgsNyBAQAogCXsiY29yZS5sb2dhbGxyZWZ1cGRhdGVzIiwgTlVMTCwgMCwgR0lUX0xPR0FMTFJFRlVQREFURVNfREVGQVVMVCB9LAogCXsiY29yZS5wcm90ZWN0aGZzIiwgTlVMTCwgMCwgR0lUX1BST1RFQ1RIRlNfREVGQVVMVCB9LAogCXsiY29yZS5wcm90ZWN0bnRmcyIsIE5VTEwsIDAsIEdJVF9QUk9URUNUTlRGU19ERUZBVUxUIH0sCisJeyJjb3JlLmZzeW5jb2JqZWN0ZmlsZXMiLCBOVUxMLCAwLCBHSVRfRlNZTkNPQkpFQ1RGSUxFU19ERUZBVUxUIH0sCiB9OwogCiBpbnQgZ2l0X2NvbmZpZ19fY3ZhcihpbnQgKm91dCwgZ2l0X2NvbmZpZyAqY29uZmlnLCBnaXRfY3Zhcl9jYWNoZWQgY3ZhcikKZGlmZiAtLWdpdCBhL3NyYy9jb25maWdfZmlsZS5jIGIvc3JjL2NvbmZpZ19maWxlLmMKaW5kZXggMmUzZDU2OC4uZTE1ZDU3YiAxMDA2NDQKLS0tIGEvc3JjL2NvbmZpZ19maWxlLmMKKysrIGIvc3JjL2NvbmZpZ19maWxlLmMKQEAgLTIxLDggKzIxLDYgQEAKICNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KICNpbmNsdWRlIDxyZWdleC5oPgogCi1HSVRfX1VTRV9TVFJNQVAKLQogdHlwZWRlZiBzdHJ1Y3QgY3Zhcl90IHsKIAlzdHJ1Y3QgY3Zhcl90ICpuZXh0OwogCWdpdF9jb25maWdfZW50cnkgKmVudHJ5OwpAQCAtMTc5LDcgKzE3Nyw3IEBACiAKIAlwb3MgPSBnaXRfc3RybWFwX2xvb2t1cF9pbmRleCh2YWx1ZXMsIHZhci0+ZW50cnktPm5hbWUpOwogCWlmICghZ2l0X3N0cm1hcF92YWxpZF9pbmRleCh2YWx1ZXMsIHBvcykpIHsKLQkJZ2l0X3N0cm1hcF9pbnNlcnQodmFsdWVzLCB2YXItPmVudHJ5LT5uYW1lLCB2YXIsIGVycm9yKTsKKwkJZ2l0X3N0cm1hcF9pbnNlcnQodmFsdWVzLCB2YXItPmVudHJ5LT5uYW1lLCB2YXIsICZlcnJvcik7CiAJfSBlbHNlIHsKIAkJZXhpc3RpbmcgPSBnaXRfc3RybWFwX3ZhbHVlX2F0KHZhbHVlcywgcG9zKTsKIAkJd2hpbGUgKGV4aXN0aW5nLT5uZXh0ICE9IE5VTEwpIHsKQEAgLTEwMjksNyArMTAyNyw3IEBACiAJZmlyc3RfcXVvdGUgPSBzdHJjaHIobGluZSwgJyInKTsKIAlpZiAoZmlyc3RfcXVvdGUgPT0gTlVMTCkgewogCQlzZXRfcGFyc2VfZXJyb3IocmVhZGVyLCAwLCAiTWlzc2luZyBxdW90YXRpb24gbWFya3MgaW4gc2VjdGlvbiBoZWFkZXIiKTsKLQkJcmV0dXJuIC0xOworCQlnb3RvIGVuZF9lcnJvcjsKIAl9CiAKIAlsYXN0X3F1b3RlID0gc3RycmNocihsaW5lLCAnIicpOwpAQCAtMTAzNywxNCArMTAzNSwxNSBAQAogCiAJaWYgKHF1b3RlZF9sZW4gPT0gMCkgewogCQlzZXRfcGFyc2VfZXJyb3IocmVhZGVyLCAwLCAiTWlzc2luZyBjbG9zaW5nIHF1b3RhdGlvbiBtYXJrIGluIHNlY3Rpb24gaGVhZGVyIik7Ci0JCXJldHVybiAtMTsKKwkJZ290byBlbmRfZXJyb3I7CiAJfQogCiAJR0lURVJSX0NIRUNLX0FMTE9DX0FERCgmYWxsb2NfbGVuLCBiYXNlX25hbWVfbGVuLCBxdW90ZWRfbGVuKTsKIAlHSVRFUlJfQ0hFQ0tfQUxMT0NfQUREKCZhbGxvY19sZW4sIGFsbG9jX2xlbiwgMik7CiAKLQlnaXRfYnVmX2dyb3coJmJ1ZiwgYWxsb2NfbGVuKTsKLQlnaXRfYnVmX3ByaW50ZigmYnVmLCAiJXMuIiwgYmFzZV9uYW1lKTsKKwlpZiAoZ2l0X2J1Zl9ncm93KCZidWYsIGFsbG9jX2xlbikgPCAwIHx8CisJICAgIGdpdF9idWZfcHJpbnRmKCZidWYsICIlcy4iLCBiYXNlX25hbWUpIDwgMCkKKwkJZ290byBlbmRfZXJyb3I7CiAKIAlycG9zID0gMDsKIApAQCAtMTA2MCw4ICsxMDU5LDcgQEAKIAkJc3dpdGNoIChjKSB7CiAJCWNhc2UgMDoKIAkJCXNldF9wYXJzZV9lcnJvcihyZWFkZXIsIDAsICJVbmV4cGVjdGVkIGVuZC1vZi1saW5lIGluIHNlY3Rpb24gaGVhZGVyIik7Ci0JCQlnaXRfYnVmX2ZyZWUoJmJ1Zik7Ci0JCQlyZXR1cm4gLTE7CisJCQlnb3RvIGVuZF9lcnJvcjsKIAogCQljYXNlICciJzoKIAkJCWdvdG8gZW5kX3BhcnNlOwpAQCAtMTA3MSw4ICsxMDY5LDcgQEAKIAogCQkJaWYgKGMgPT0gMCkgewogCQkJCXNldF9wYXJzZV9lcnJvcihyZWFkZXIsIHJwb3MsICJVbmV4cGVjdGVkIGVuZC1vZi1saW5lIGluIHNlY3Rpb24gaGVhZGVyIik7Ci0JCQkJZ2l0X2J1Zl9mcmVlKCZidWYpOwotCQkJCXJldHVybiAtMTsKKwkJCQlnb3RvIGVuZF9lcnJvcjsKIAkJCX0KIAogCQlkZWZhdWx0OgpAQCAtMTA4NCw2ICsxMDgxLDkgQEAKIAl9IHdoaWxlIChsaW5lICsgcnBvcyA8IGxhc3RfcXVvdGUpOwogCiBlbmRfcGFyc2U6CisJaWYgKGdpdF9idWZfb29tKCZidWYpKQorCQlnb3RvIGVuZF9lcnJvcjsKKwogCWlmIChsaW5lW3Jwb3NdICE9ICciJyB8fCBsaW5lW3Jwb3MgKyAxXSAhPSAnXScpIHsKIAkJc2V0X3BhcnNlX2Vycm9yKHJlYWRlciwgcnBvcywgIlVuZXhwZWN0ZWQgdGV4dCBhZnRlciBjbG9zaW5nIHF1b3RlcyIpOwogCQlnaXRfYnVmX2ZyZWUoJmJ1Zik7CkBAIC0xMDkyLDYgKzEwOTIsMTEgQEAKIAogCSpzZWN0aW9uX25hbWUgPSBnaXRfYnVmX2RldGFjaCgmYnVmKTsKIAlyZXR1cm4gMDsKKworZW5kX2Vycm9yOgorCWdpdF9idWZfZnJlZSgmYnVmKTsKKworCXJldHVybiAtMTsKIH0KIAogc3RhdGljIGludCBwYXJzZV9zZWN0aW9uX2hlYWRlcihzdHJ1Y3QgcmVhZGVyICpyZWFkZXIsIGNoYXIgKipzZWN0aW9uX291dCkKQEAgLTEyNTEsNyArMTI1Niw3IEBACiB7CiAJLyogRnJvbSB0aGUgdXNlcidzIGhvbWUgKi8KIAlpZiAocGF0aFswXSA9PSAnficgJiYgcGF0aFsxXSA9PSAnLycpCi0JCXJldHVybiBnaXRfc3lzZGlyX2ZpbmRfZ2xvYmFsX2ZpbGUob3V0LCAmcGF0aFsxXSk7CisJCXJldHVybiBnaXRfc3lzZGlyX2V4cGFuZF9nbG9iYWxfZmlsZShvdXQsICZwYXRoWzFdKTsKIAogCXJldHVybiBnaXRfcGF0aF9qb2luX3Vucm9vdGVkKG91dCwgcGF0aCwgZGlyLCBOVUxMKTsKIH0KQEAgLTEyNjIsNyArMTI2Nyw3IEBACiAvKiBFc2NhcGUgdGhlIHZhbHVlcyB0byB3cml0ZSB0aGVtIHRvIHRoZSBmaWxlICovCiBzdGF0aWMgY2hhciAqZXNjYXBlX3ZhbHVlKGNvbnN0IGNoYXIgKnB0cikKIHsKLQlnaXRfYnVmIGJ1ZiA9IEdJVF9CVUZfSU5JVDsKKwlnaXRfYnVmIGJ1ZjsKIAlzaXplX3QgbGVuOwogCWNvbnN0IGNoYXIgKmVzYzsKIApAQCAtMTI3Miw3ICsxMjc3LDggQEAKIAlpZiAoIWxlbikKIAkJcmV0dXJuIGdpdF9fY2FsbG9jKDEsIHNpemVvZihjaGFyKSk7CiAKLQlnaXRfYnVmX2dyb3coJmJ1ZiwgbGVuKTsKKwlpZiAoZ2l0X2J1Zl9pbml0KCZidWYsIGxlbikgPCAwKQorCQlyZXR1cm4gTlVMTDsKIAogCXdoaWxlICgqcHRyICE9ICdcMCcpIHsKIAkJaWYgKChlc2MgPSBzdHJjaHIoZXNjYXBlZCwgKnB0cikpICE9IE5VTEwpIHsKZGlmZiAtLWdpdCBhL3NyYy9jb25maWdfZmlsZS5oIGIvc3JjL2NvbmZpZ19maWxlLmgKaW5kZXggMWM1Mjg5Mi4uNjU0ZTZjYSAxMDA2NDQKLS0tIGEvc3JjL2NvbmZpZ19maWxlLmgKKysrIGIvc3JjL2NvbmZpZ19maWxlLmgKQEAgLTcsNiArNyw3IEBACiAjaWZuZGVmIElOQ0xVREVfY29uZmlnX2ZpbGVfaF9fCiAjZGVmaW5lIElOQ0xVREVfY29uZmlnX2ZpbGVfaF9fCiAKKyNpbmNsdWRlICJnaXQyL3N5cy9jb25maWcuaCIKICNpbmNsdWRlICJnaXQyL2NvbmZpZy5oIgogCiBHSVRfSU5MSU5FKGludCkgZ2l0X2NvbmZpZ19maWxlX29wZW4oZ2l0X2NvbmZpZ19iYWNrZW5kICpjZmcsIHVuc2lnbmVkIGludCBsZXZlbCkKZGlmZiAtLWdpdCBhL3NyYy9kZXNjcmliZS5jIGIvc3JjL2Rlc2NyaWJlLmMKaW5kZXggMTZlMTk1NS4uNGExZTI1MyAxMDA2NDQKLS0tIGEvc3JjL2Rlc2NyaWJlLmMKKysrIGIvc3JjL2Rlc2NyaWJlLmMKQEAgLTE5LDggKzE5LDYgQEAKICNpbmNsdWRlICJ2ZWN0b3IuaCIKICNpbmNsdWRlICJyZXBvc2l0b3J5LmgiCiAKLUdJVF9fVVNFX09JRE1BUAotCiAvKiBQb3J0ZWQgZnJvbSBodHRwczovL2dpdGh1Yi5jb20vZ2l0L2dpdC9ibG9iLzg5ZGRlNzg4MmY3MWY4NDZjY2QwMzU5NzU2ZDI3YmViYzMxMTA4ZGUvYnVpbHRpbi9kZXNjcmliZS5jICovCiAKIHN0cnVjdCBjb21taXRfbmFtZSB7CkBAIC0xMjcsNyArMTI1LDcgQEAKIAkJaWYgKCFmb3VuZCkgewogCQkJaW50IHJldDsKIAotCQkJZ2l0X29pZG1hcF9pbnNlcnQobmFtZXMsICZlLT5wZWVsZWQsIGUsIHJldCk7CisJCQlnaXRfb2lkbWFwX2luc2VydChuYW1lcywgJmUtPnBlZWxlZCwgZSwgJnJldCk7CiAJCQlpZiAocmV0IDwgMCkKIAkJCQlyZXR1cm4gLTE7CiAJCX0KZGlmZiAtLWdpdCBhL3NyYy9kaWZmLmMgYi9zcmMvZGlmZi5jCmluZGV4IDMxN2Q0OTUuLmE5M2JkNGMgMTAwNjQ0Ci0tLSBhL3NyYy9kaWZmLmMKKysrIGIvc3JjL2RpZmYuYwpAQCAtMTIwLDYgKzEyMCw0MSBAQAogCXJldHVybiAwOwogfQogCitpbnQgZ2l0X2RpZmZfZm9yZWFjaCgKKwlnaXRfZGlmZiAqZGlmZiwKKwlnaXRfZGlmZl9maWxlX2NiIGZpbGVfY2IsCisJZ2l0X2RpZmZfYmluYXJ5X2NiIGJpbmFyeV9jYiwKKwlnaXRfZGlmZl9odW5rX2NiIGh1bmtfY2IsCisJZ2l0X2RpZmZfbGluZV9jYiBkYXRhX2NiLAorCXZvaWQgKnBheWxvYWQpCit7CisJaW50IGVycm9yID0gMDsKKwlnaXRfZGlmZl9kZWx0YSAqZGVsdGE7CisJc2l6ZV90IGlkeDsKKworCWFzc2VydChkaWZmKTsKKworCWdpdF92ZWN0b3JfZm9yZWFjaCgmZGlmZi0+ZGVsdGFzLCBpZHgsIGRlbHRhKSB7CisJCWdpdF9wYXRjaCAqcGF0Y2g7CisKKwkJLyogY2hlY2sgZmxhZ3MgYWdhaW5zdCBwYXRjaCBzdGF0dXMgKi8KKwkJaWYgKGdpdF9kaWZmX2RlbHRhX19zaG91bGRfc2tpcCgmZGlmZi0+b3B0cywgZGVsdGEpKQorCQkJY29udGludWU7CisKKwkJaWYgKChlcnJvciA9IGdpdF9wYXRjaF9mcm9tX2RpZmYoJnBhdGNoLCBkaWZmLCBpZHgpKSAhPSAwKQorCQkJYnJlYWs7CisKKwkJZXJyb3IgPSBnaXRfcGF0Y2hfX2ludm9rZV9jYWxsYmFja3MocGF0Y2gsIGZpbGVfY2IsIGJpbmFyeV9jYiwKKwkJCQkJCSAgICBodW5rX2NiLCBkYXRhX2NiLCBwYXlsb2FkKTsKKwkJZ2l0X3BhdGNoX2ZyZWUocGF0Y2gpOworCisJCWlmIChlcnJvcikKKwkJCWJyZWFrOworCX0KKworCXJldHVybiBlcnJvcjsKK30KKwogaW50IGdpdF9kaWZmX2Zvcm1hdF9lbWFpbF9fYXBwZW5kX2hlYWRlcl90b2J1ZigKIAlnaXRfYnVmICpvdXQsCiAJY29uc3QgZ2l0X29pZCAqaWQsCmRpZmYgLS1naXQgYS9zcmMvZGlmZl9kcml2ZXIuYyBiL3NyYy9kaWZmX2RyaXZlci5jCmluZGV4IDBhZGY3MDQuLjkxMDlmMzEgMTAwNjQ0Ci0tLSBhL3NyYy9kaWZmX2RyaXZlci5jCisrKyBiL3NyYy9kaWZmX2RyaXZlci5jCkBAIC0xNiw4ICsxNiw2IEBACiAjaW5jbHVkZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAicmVwb3NpdG9yeS5oIgogCi1HSVRfX1VTRV9TVFJNQVAKLQogdHlwZWRlZiBlbnVtIHsKIAlESUZGX0RSSVZFUl9BVVRPID0gMCwKIAlESUZGX0RSSVZFUl9CSU5BUlkgPSAxLApAQCAtMjE3LDcgKzIxNSw3IEBACiAJCWdvdG8gZG9uZTsKIAl9CiAKLQlnaXRfc3RybWFwX2luc2VydChyZWctPmRyaXZlcnMsIGRydi0+bmFtZSwgZHJ2LCBlcnJvcik7CisJZ2l0X3N0cm1hcF9pbnNlcnQocmVnLT5kcml2ZXJzLCBkcnYtPm5hbWUsIGRydiwgJmVycm9yKTsKIAlpZiAoZXJyb3IgPiAwKQogCQllcnJvciA9IDA7CiAKQEAgLTMzMSw3ICszMjksNyBAQAogCQlnb3RvIGRvbmU7CiAKIAkvKiBzdG9yZSBkcml2ZXIgaW4gcmVnaXN0cnkgKi8KLQlnaXRfc3RybWFwX2luc2VydChyZWctPmRyaXZlcnMsIGRydi0+bmFtZSwgZHJ2LCBlcnJvcik7CisJZ2l0X3N0cm1hcF9pbnNlcnQocmVnLT5kcml2ZXJzLCBkcnYtPm5hbWUsIGRydiwgJmVycm9yKTsKIAlpZiAoZXJyb3IgPCAwKQogCQlnb3RvIGRvbmU7CiAJZXJyb3IgPSAwOwpkaWZmIC0tZ2l0IGEvc3JjL2RpZmZfcGFyc2UuYyBiL3NyYy9kaWZmX3BhcnNlLmMKaW5kZXggZTY0MDA2My4uNWUzYTdhMSAxMDA2NDQKLS0tIGEvc3JjL2RpZmZfcGFyc2UuYworKysgYi9zcmMvZGlmZl9wYXJzZS5jCkBAIC0zNyw3ICszNyw2IEBACiAKIAlHSVRfUkVGQ09VTlRfSU5DKGRpZmYpOwogCWRpZmYtPmJhc2UudHlwZSA9IEdJVF9ESUZGX1RZUEVfUEFSU0VEOwotCWRpZmYtPmJhc2Uub3B0cy5mbGFncyAmPSB+R0lUX0RJRkZfSUdOT1JFX0NBU0U7CiAJZGlmZi0+YmFzZS5zdHJjb21wID0gZ2l0X19zdHJjbXA7CiAJZGlmZi0+YmFzZS5zdHJuY29tcCA9IGdpdF9fc3RybmNtcDsKIAlkaWZmLT5iYXNlLnBmeGNvbXAgPSBnaXRfX3ByZWZpeGNtcDsKQEAgLTQ1LDYgKzQ0LDEzIEBACiAJZGlmZi0+YmFzZS5wYXRjaF9mbiA9IGdpdF9wYXRjaF9wYXJzZWRfZnJvbV9kaWZmOwogCWRpZmYtPmJhc2UuZnJlZV9mbiA9IGRpZmZfcGFyc2VkX2ZyZWU7CiAKKwlpZiAoZ2l0X2RpZmZfaW5pdF9vcHRpb25zKCZkaWZmLT5iYXNlLm9wdHMsIEdJVF9ESUZGX09QVElPTlNfVkVSU0lPTikgPCAwKSB7CisJCWdpdF9fZnJlZShkaWZmKTsKKwkJcmV0dXJuIE5VTEw7CisJfQorCisJZGlmZi0+YmFzZS5vcHRzLmZsYWdzICY9IH5HSVRfRElGRl9JR05PUkVfQ0FTRTsKKwogCWdpdF9wb29sX2luaXQoJmRpZmYtPmJhc2UucG9vbCwgMSk7CiAKIAlpZiAoZ2l0X3ZlY3Rvcl9pbml0KCZkaWZmLT5wYXRjaGVzLCAwLCBOVUxMKSA8IDAgfHwKZGlmZiAtLWdpdCBhL3NyYy9kaWZmX3Rmb3JtLmMgYi9zcmMvZGlmZl90Zm9ybS5jCmluZGV4IGYyZmYxNDcuLmIwMDRkZGQgMTAwNjQ0Ci0tLSBhL3NyYy9kaWZmX3Rmb3JtLmMKKysrIGIvc3JjL2RpZmZfdGZvcm0uYwpAQCAtNTUzLDggKzU1Myw4IEBACiAKIAkqc2NvcmUgPSAtMTsKIAotCS8qIGRvbid0IHRyeSB0byBjb21wYXJlIGZpbGVzIG9mIGRpZmZlcmVudCB0eXBlcyAqLwotCWlmIChHSVRfTU9ERV9UWVBFKGFfZmlsZS0+bW9kZSkgIT0gR0lUX01PREVfVFlQRShiX2ZpbGUtPm1vZGUpKQorCS8qIGRvbid0IHRyeSB0byBjb21wYXJlIHRoaW5ncyB0aGF0IGFyZW4ndCBmaWxlcyAqLworCWlmICghR0lUX01PREVfSVNCTE9CKGFfZmlsZS0+bW9kZSkgfHwgIUdJVF9NT0RFX0lTQkxPQihiX2ZpbGUtPm1vZGUpKQogCQlyZXR1cm4gMDsKIAogCS8qIGlmIGV4YWN0IG1hdGNoIGlzIHJlcXVlc3RlZCwgZm9yY2UgY2FsY3VsYXRpb24gb2YgbWlzc2luZyBPSURzIG5vdyAqLwpkaWZmIC0tZ2l0IGEvc3JjL2ZldGNoaGVhZC5jIGIvc3JjL2ZldGNoaGVhZC5jCmluZGV4IDBkOWFiMmMuLjZlNmYzZWIgMTAwNjQ0Ci0tLSBhL3NyYy9mZXRjaGhlYWQuYworKysgYi9zcmMvZmV0Y2hoZWFkLmMKQEAgLTExNSw3ICsxMTUsNyBAQAogCiAJYXNzZXJ0KHJlcG8gJiYgZmV0Y2hoZWFkX3JlZnMpOwogCi0JaWYgKGdpdF9idWZfam9pbnBhdGgoJnBhdGgsIHJlcG8tPnBhdGhfcmVwb3NpdG9yeSwgR0lUX0ZFVENIX0hFQURfRklMRSkgPCAwKQorCWlmIChnaXRfYnVmX2pvaW5wYXRoKCZwYXRoLCByZXBvLT5naXRkaXIsIEdJVF9GRVRDSF9IRUFEX0ZJTEUpIDwgMCkKIAkJcmV0dXJuIC0xOwogCiAJaWYgKGdpdF9maWxlYnVmX29wZW4oJmZpbGUsIHBhdGgucHRyLCBHSVRfRklMRUJVRl9GT1JDRSwgR0lUX1JFRlNfRklMRV9NT0RFKSA8IDApIHsKQEAgLTI0OSw3ICsyNDksNyBAQAogCiAJYXNzZXJ0KHJlcG8gJiYgY2IpOwogCi0JaWYgKGdpdF9idWZfam9pbnBhdGgoJnBhdGgsIHJlcG8tPnBhdGhfcmVwb3NpdG9yeSwgR0lUX0ZFVENIX0hFQURfRklMRSkgPCAwKQorCWlmIChnaXRfYnVmX2pvaW5wYXRoKCZwYXRoLCByZXBvLT5naXRkaXIsIEdJVF9GRVRDSF9IRUFEX0ZJTEUpIDwgMCkKIAkJcmV0dXJuIC0xOwogCiAJaWYgKChlcnJvciA9IGdpdF9mdXRpbHNfcmVhZGJ1ZmZlcigmZmlsZSwgZ2l0X2J1Zl9jc3RyKCZwYXRoKSkpIDwgMCkKZGlmZiAtLWdpdCBhL3NyYy9maWxlYnVmLmMgYi9zcmMvZmlsZWJ1Zi5jCmluZGV4IGVmNjhiMTYuLjgwMjUwY2MgMTAwNjQ0Ci0tLSBhL3NyYy9maWxlYnVmLmMKKysrIGIvc3JjL2ZpbGVidWYuYwpAQCAtMjQ2LDcgKzI0Niw3IEBACiAKIAkJcm9vdCA9IGdpdF9wYXRoX3Jvb3QodGFyZ2V0LnB0cik7CiAJCWlmIChyb290ID49IDApIHsKLQkJCWlmICgoZXJyb3IgPSBnaXRfYnVmX3B1dHMoJmN1cnBhdGgsIHRhcmdldC5wdHIpKSA8IDApCisJCQlpZiAoKGVycm9yID0gZ2l0X2J1Zl9zZXRzKCZjdXJwYXRoLCB0YXJnZXQucHRyKSkgPCAwKQogCQkJCWdvdG8gY2xlYW51cDsKIAkJfSBlbHNlIHsKIAkJCWdpdF9idWYgZGlyID0gR0lUX0JVRl9JTklUOwpAQCAtMjkxLDYgKzI5MSw5IEBACiAJaWYgKGZsYWdzICYgR0lUX0ZJTEVCVUZfRE9fTk9UX0JVRkZFUikKIAkJZmlsZS0+ZG9fbm90X2J1ZmZlciA9IHRydWU7CiAKKwlpZiAoZmxhZ3MgJiBHSVRfRklMRUJVRl9GU1lOQykKKwkJZmlsZS0+ZG9fZnN5bmMgPSB0cnVlOworCiAJZmlsZS0+YnVmX3NpemUgPSBzaXplOwogCWZpbGUtPmJ1Zl9wb3MgPSAwOwogCWZpbGUtPmZkID0gLTE7CkBAIC00MjUsNiArNDI4LDExIEBACiAKIAlmaWxlLT5mZF9pc19vcGVuID0gZmFsc2U7CiAKKwlpZiAoZmlsZS0+ZG9fZnN5bmMgJiYgcF9mc3luYyhmaWxlLT5mZCkgPCAwKSB7CisJCWdpdGVycl9zZXQoR0lURVJSX09TLCAiZmFpbGVkIHRvIGZzeW5jICclcyciLCBmaWxlLT5wYXRoX2xvY2spOworCQlnb3RvIG9uX2Vycm9yOworCX0KKwogCWlmIChwX2Nsb3NlKGZpbGUtPmZkKSA8IDApIHsKIAkJZ2l0ZXJyX3NldChHSVRFUlJfT1MsICJmYWlsZWQgdG8gY2xvc2UgZmlsZSBhdCAnJXMnIiwgZmlsZS0+cGF0aF9sb2NrKTsKIAkJZ290byBvbl9lcnJvcjsKQEAgLTQzNyw2ICs0NDUsOSBAQAogCQlnb3RvIG9uX2Vycm9yOwogCX0KIAorCWlmIChmaWxlLT5kb19mc3luYyAmJiBnaXRfZnV0aWxzX2ZzeW5jX3BhcmVudChmaWxlLT5wYXRoX29yaWdpbmFsKSA8IDApCisJCWdvdG8gb25fZXJyb3I7CisKIAlmaWxlLT5kaWRfcmVuYW1lID0gdHJ1ZTsKIAogCWdpdF9maWxlYnVmX2NsZWFudXAoZmlsZSk7CmRpZmYgLS1naXQgYS9zcmMvZmlsZWJ1Zi5oIGIvc3JjL2ZpbGVidWYuaAppbmRleCA0Njc3MDhkLi5jNjVhZWE3IDEwMDY0NAotLS0gYS9zcmMvZmlsZWJ1Zi5oCisrKyBiL3NyYy9maWxlYnVmLmgKQEAgLTIwLDcgKzIwLDggQEAKICNkZWZpbmUgR0lUX0ZJTEVCVUZfRk9SQ0UJCQkJKDEgPDwgMykKICNkZWZpbmUgR0lUX0ZJTEVCVUZfVEVNUE9SQVJZCQkJKDEgPDwgNCkKICNkZWZpbmUgR0lUX0ZJTEVCVUZfRE9fTk9UX0JVRkZFUgkJKDEgPDwgNSkKLSNkZWZpbmUgR0lUX0ZJTEVCVUZfREVGTEFURV9TSElGVAkJKDYpCisjZGVmaW5lIEdJVF9GSUxFQlVGX0ZTWU5DCQkJCSgxIDw8IDYpCisjZGVmaW5lIEdJVF9GSUxFQlVGX0RFRkxBVEVfU0hJRlQJCSg3KQogCiAjZGVmaW5lIEdJVF9GSUxFTE9DS19FWFRFTlNJT04gIi5sb2NrXDAiCiAjZGVmaW5lIEdJVF9GSUxFTE9DS19FWFRMRU5HVEggNgpAQCAtNDcsNiArNDgsNyBAQAogCWJvb2wgY3JlYXRlZF9sb2NrOwogCWJvb2wgZGlkX3JlbmFtZTsKIAlib29sIGRvX25vdF9idWZmZXI7CisJYm9vbCBkb19mc3luYzsKIAlpbnQgbGFzdF9lcnJvcjsKIH07CiAKZGlmZiAtLWdpdCBhL3NyYy9maWxlb3BzLmMgYi9zcmMvZmlsZW9wcy5jCmluZGV4IDdhODczMzIuLjJmM2Y1OGQgMTAwNjQ0Ci0tLSBhL3NyYy9maWxlb3BzLmMKKysrIGIvc3JjL2ZpbGVvcHMuYwpAQCAtMTMsOCArMTMsNiBAQAogI2luY2x1ZGUgIndpbjMyL2ZpbmRmaWxlLmgiCiAjZW5kaWYKIAotR0lUX19VU0VfU1RSTUFQCi0KIGludCBnaXRfZnV0aWxzX21rcGF0aDJmaWxlKGNvbnN0IGNoYXIgKmZpbGVfcGF0aCwgY29uc3QgbW9kZV90IG1vZGUpCiB7CiAJcmV0dXJuIGdpdF9mdXRpbHNfbWtkaXIoCkBAIC02OCw4ICs2Niw4IEBACiAKIGludCBnaXRfZnV0aWxzX2NyZWF0X2xvY2tlZChjb25zdCBjaGFyICpwYXRoLCBjb25zdCBtb2RlX3QgbW9kZSkKIHsKLQlpbnQgZmQgPSBwX29wZW4ocGF0aCwgT19XUk9OTFkgfCBPX0NSRUFUIHwgT19UUlVOQyB8Ci0JCU9fRVhDTCB8IE9fQklOQVJZIHwgT19DTE9FWEVDLCBtb2RlKTsKKwlpbnQgZmQgPSBwX29wZW4ocGF0aCwgT19XUk9OTFkgfCBPX0NSRUFUIHwgT19FWENMIHwgT19CSU5BUlkgfCBPX0NMT0VYRUMsCisJCW1vZGUpOwogCiAJaWYgKGZkIDwgMCkgewogCQlpbnQgZXJyb3IgPSBlcnJubzsKQEAgLTE5OCwyOCArMTk2LDI5IEBACiAKIAlwX2Nsb3NlKGZkKTsKIAotCWlmICgoZXJyb3IgPSBnaXRfaGFzaF9idWYoJmNoZWNrc3VtX25ldywgYnVmLnB0ciwgYnVmLnNpemUpKSA8IDApIHsKLQkJZ2l0X2J1Zl9mcmVlKCZidWYpOwotCQlyZXR1cm4gZXJyb3I7Ci0JfQorCWlmIChjaGVja3N1bSkgeworCQlpZiAoKGVycm9yID0gZ2l0X2hhc2hfYnVmKCZjaGVja3N1bV9uZXcsIGJ1Zi5wdHIsIGJ1Zi5zaXplKSkgPCAwKSB7CisJCQlnaXRfYnVmX2ZyZWUoJmJ1Zik7CisJCQlyZXR1cm4gZXJyb3I7CisJCX0KIAotCS8qCi0JICogSWYgd2Ugd2VyZSBnaXZlbiBhIGNoZWNrc3VtLCB3ZSBvbmx5IHdhbnQgdG8gdXNlIGl0IGlmIGl0J3MgZGlmZmVyZW50Ci0JICovCi0JaWYgKGNoZWNrc3VtICYmICFnaXRfb2lkX19jbXAoY2hlY2tzdW0sICZjaGVja3N1bV9uZXcpKSB7Ci0JCWdpdF9idWZfZnJlZSgmYnVmKTsKLQkJaWYgKHVwZGF0ZWQpCi0JCQkqdXBkYXRlZCA9IDA7CisJCS8qCisJCSAqIElmIHdlIHdlcmUgZ2l2ZW4gYSBjaGVja3N1bSwgd2Ugb25seSB3YW50IHRvIHVzZSBpdCBpZiBpdCdzIGRpZmZlcmVudAorCQkgKi8KKwkJaWYgKCFnaXRfb2lkX19jbXAoY2hlY2tzdW0sICZjaGVja3N1bV9uZXcpKSB7CisJCQlnaXRfYnVmX2ZyZWUoJmJ1Zik7CisJCQlpZiAodXBkYXRlZCkKKwkJCQkqdXBkYXRlZCA9IDA7CiAKLQkJcmV0dXJuIDA7CisJCQlyZXR1cm4gMDsKKwkJfQorCisJCWdpdF9vaWRfY3B5KGNoZWNrc3VtLCAmY2hlY2tzdW1fbmV3KTsKIAl9CiAKIAkvKgogCSAqIElmIHdlJ3JlIGhlcmUsIHRoZSBmaWxlIGRpZCBjaGFuZ2UsIG9yIHRoZSB1c2VyIGRpZG4ndCBoYXZlIGFuIG9sZCB2ZXJzaW9uCiAJICovCi0JaWYgKGNoZWNrc3VtKQotCQlnaXRfb2lkX2NweShjaGVja3N1bSwgJmNoZWNrc3VtX25ldyk7Ci0KIAlpZiAodXBkYXRlZCAhPSBOVUxMKQogCQkqdXBkYXRlZCA9IDE7CiAKQEAgLTIzNywxMCArMjM2LDE2IEBACiBpbnQgZ2l0X2Z1dGlsc193cml0ZWJ1ZmZlcigKIAljb25zdCBnaXRfYnVmICpidWYsCWNvbnN0IGNoYXIgKnBhdGgsIGludCBmbGFncywgbW9kZV90IG1vZGUpCiB7Ci0JaW50IGZkLCBlcnJvciA9IDA7CisJaW50IGZkLCBkb19mc3luYyA9IDAsIGVycm9yID0gMDsKIAotCWlmIChmbGFncyA8PSAwKQorCWlmICghZmxhZ3MpCiAJCWZsYWdzID0gT19DUkVBVCB8IE9fVFJVTkMgfCBPX1dST05MWTsKKworCWlmICgoZmxhZ3MgJiBPX0ZTWU5DKSAhPSAwKQorCQlkb19mc3luYyA9IDE7CisKKwlmbGFncyAmPSB+T19GU1lOQzsKKwogCWlmICghbW9kZSkKIAkJbW9kZSA9IEdJVF9GSUxFTU9ERV9CTE9COwogCkBAIC0yNTUsOCArMjYwLDE5IEBACiAJCXJldHVybiBlcnJvcjsKIAl9CiAKLQlpZiAoKGVycm9yID0gcF9jbG9zZShmZCkpIDwgMCkKKwlpZiAoZG9fZnN5bmMgJiYgKGVycm9yID0gcF9mc3luYyhmZCkpIDwgMCkgeworCQlnaXRlcnJfc2V0KEdJVEVSUl9PUywgImNvdWxkIG5vdCBmc3luYyAnJXMnIiwgcGF0aCk7CisJCXBfY2xvc2UoZmQpOworCQlyZXR1cm4gZXJyb3I7CisJfQorCisJaWYgKChlcnJvciA9IHBfY2xvc2UoZmQpKSA8IDApIHsKIAkJZ2l0ZXJyX3NldChHSVRFUlJfT1MsICJlcnJvciB3aGlsZSBjbG9zaW5nICclcyciLCBwYXRoKTsKKwkJcmV0dXJuIGVycm9yOworCX0KKworCWlmIChkb19mc3luYyAmJiAoZmxhZ3MgJiBPX0NSRUFUKSkKKwkJZXJyb3IgPSBnaXRfZnV0aWxzX2ZzeW5jX3BhcmVudChwYXRoKTsKIAogCXJldHVybiBlcnJvcjsKIH0KQEAgLTI4OCwxMyArMzA0LDE5IEBACiAJaWYgKGZkIDwgMCkKIAkJcmV0dXJuIGZkOwogCi0JbGVuID0gZ2l0X2Z1dGlsc19maWxlc2l6ZShmZCk7CisJaWYgKChsZW4gPSBnaXRfZnV0aWxzX2ZpbGVzaXplKGZkKSkgPCAwKSB7CisJCXJlc3VsdCA9IC0xOworCQlnb3RvIG91dDsKKwl9CisKIAlpZiAoIWdpdF9faXNfc2l6ZXQobGVuKSkgewogCQlnaXRlcnJfc2V0KEdJVEVSUl9PUywgImZpbGUgYCVzYCB0b28gbGFyZ2UgdG8gbW1hcCIsIHBhdGgpOwotCQlyZXR1cm4gLTE7CisJCXJlc3VsdCA9IC0xOworCQlnb3RvIG91dDsKIAl9CiAKIAlyZXN1bHQgPSBnaXRfZnV0aWxzX21tYXBfcm8ob3V0LCBmZCwgMCwgKHNpemVfdClsZW4pOworb3V0OgogCXBfY2xvc2UoZmQpOwogCXJldHVybiByZXN1bHQ7CiB9CkBAIC02MDcsNyArNjI5LDcgQEAKIAogCQkJbWVtY3B5KGNhY2hlX3BhdGgsIG1ha2VfcGF0aC5wdHIsIG1ha2VfcGF0aC5zaXplICsgMSk7CiAKLQkJCWdpdF9zdHJtYXBfaW5zZXJ0KG9wdHMtPmRpcl9tYXAsIGNhY2hlX3BhdGgsIGNhY2hlX3BhdGgsIGVycm9yKTsKKwkJCWdpdF9zdHJtYXBfaW5zZXJ0KG9wdHMtPmRpcl9tYXAsIGNhY2hlX3BhdGgsIGNhY2hlX3BhdGgsICZlcnJvcik7CiAJCQlpZiAoZXJyb3IgPCAwKQogCQkJCWdvdG8gZG9uZTsKIAkJfQpAQCAtNzQ4LDYgKzc3MCw5IEBACiAKIAkJaWYgKGVuID09IEVOT0VOVCB8fCBlbiA9PSBFTk9URElSKSB7CiAJCQkvKiBkbyBub3RoaW5nICovCisJCX0gZWxzZSBpZiAoKGRhdGEtPmZsYWdzICYgR0lUX1JNRElSX1NLSVBfTk9ORU1QVFkpID09IDAgJiYKKwkJCWVuID09IEVCVVNZKSB7CisJCQllcnJvciA9IGdpdF9wYXRoX3NldF9lcnJvcihlcnJubywgcGF0aCwgInJtZGlyIik7CiAJCX0gZWxzZSBpZiAoZW4gPT0gRU5PVEVNUFRZIHx8IGVuID09IEVFWElTVCB8fCBlbiA9PSBFQlVTWSkgewogCQkJZXJyb3IgPSBHSVRfSVRFUk9WRVI7CiAJCX0gZWxzZSB7CkBAIC0xMTA5LDMgKzExMzQsMzcgQEAKIAkJbWVtc2V0KHN0YW1wLCAwLCBzaXplb2YoKnN0YW1wKSk7CiAJfQogfQorCitpbnQgZ2l0X2Z1dGlsc19mc3luY19kaXIoY29uc3QgY2hhciAqcGF0aCkKK3sKKyNpZmRlZiBHSVRfV0lOMzIKKwlHSVRfVU5VU0VEKHBhdGgpOworCXJldHVybiAwOworI2Vsc2UKKwlpbnQgZmQsIGVycm9yID0gLTE7CisKKwlpZiAoKGZkID0gcF9vcGVuKHBhdGgsIE9fUkRPTkxZKSkgPCAwKSB7CisJCWdpdGVycl9zZXQoR0lURVJSX09TLCAiZmFpbGVkIHRvIG9wZW4gZGlyZWN0b3J5ICclcycgZm9yIGZzeW5jIiwgcGF0aCk7CisJCXJldHVybiAtMTsKKwl9CisKKwlpZiAoKGVycm9yID0gcF9mc3luYyhmZCkpIDwgMCkKKwkJZ2l0ZXJyX3NldChHSVRFUlJfT1MsICJmYWlsZWQgdG8gZnN5bmMgZGlyZWN0b3J5ICclcyciLCBwYXRoKTsKKworCXBfY2xvc2UoZmQpOworCXJldHVybiBlcnJvcjsKKyNlbmRpZgorfQorCitpbnQgZ2l0X2Z1dGlsc19mc3luY19wYXJlbnQoY29uc3QgY2hhciAqcGF0aCkKK3sKKwljaGFyICpwYXJlbnQ7CisJaW50IGVycm9yOworCisJaWYgKChwYXJlbnQgPSBnaXRfcGF0aF9kaXJuYW1lKHBhdGgpKSA9PSBOVUxMKQorCQlyZXR1cm4gLTE7CisKKwllcnJvciA9IGdpdF9mdXRpbHNfZnN5bmNfZGlyKHBhcmVudCk7CisJZ2l0X19mcmVlKHBhcmVudCk7CisJcmV0dXJuIGVycm9yOworfQpkaWZmIC0tZ2l0IGEvc3JjL2ZpbGVvcHMuaCBiL3NyYy9maWxlb3BzLmgKaW5kZXggNjVjOTZhNi4uNDY4ODZiMCAxMDA2NDQKLS0tIGEvc3JjL2ZpbGVvcHMuaAorKysgYi9zcmMvZmlsZW9wcy5oCkBAIC0yNSw2ICsyNSwxMyBAQAogCWdpdF9idWYgKm9iaiwgY29uc3QgY2hhciAqcGF0aCwgZ2l0X29pZCAqY2hlY2tzdW0sIGludCAqdXBkYXRlZCk7CiBleHRlcm4gaW50IGdpdF9mdXRpbHNfcmVhZGJ1ZmZlcl9mZChnaXRfYnVmICpvYmosIGdpdF9maWxlIGZkLCBzaXplX3QgbGVuKTsKIAorLyogQWRkaXRpb25hbCBjb25zdGFudHMgZm9yIGBnaXRfZnV0aWxzX3dyaXRlYnVmZmVyYCdzIGBvcGVuX2ZsYWdzYC4gIFdlCisgKiBzdXBwb3J0IHRoZXNlIGludGVybmFsbHkgYW5kIHRoZXkgd2lsbCBiZSByZW1vdmVkIGJlZm9yZSB0aGUgYG9wZW5gIGNhbGwuCisgKi8KKyNpZm5kZWYgT19GU1lOQworIyBkZWZpbmUgT19GU1lOQyAoMSA8PCAzMSkKKyNlbmRpZgorCiBleHRlcm4gaW50IGdpdF9mdXRpbHNfd3JpdGVidWZmZXIoCiAJY29uc3QgZ2l0X2J1ZiAqYnVmLCBjb25zdCBjaGFyICpwYXRoLCBpbnQgb3Blbl9mbGFncywgbW9kZV90IG1vZGUpOwogCkBAIC0zNTYsNCArMzYzLDIyIEBACiBleHRlcm4gdm9pZCBnaXRfZnV0aWxzX2ZpbGVzdGFtcF9zZXRfZnJvbV9zdGF0KAogCWdpdF9mdXRpbHNfZmlsZXN0YW1wICpzdGFtcCwgc3RydWN0IHN0YXQgKnN0KTsKIAorLyoqCisgKiBgZnN5bmNgIHRoZSBwYXJlbnQgZGlyZWN0b3J5IG9mIHRoZSBnaXZlbiBwYXRoLCBpZiBgZnN5bmNgIGlzCisgKiBzdXBwb3J0ZWQgZm9yIGRpcmVjdG9yaWVzIG9uIHRoaXMgcGxhdGZvcm0uCisgKgorICogQHBhcmFtIHBhdGggUGF0aCBvZiB0aGUgZGlyZWN0b3J5IHRvIHN5bmMuCisgKiBAcmV0dXJuIDAgb24gc3VjY2VzcywgLTEgb24gZXJyb3IKKyAqLworZXh0ZXJuIGludCBnaXRfZnV0aWxzX2ZzeW5jX2Rpcihjb25zdCBjaGFyICpwYXRoKTsKKworLyoqCisgKiBgZnN5bmNgIHRoZSBwYXJlbnQgZGlyZWN0b3J5IG9mIHRoZSBnaXZlbiBwYXRoLCBpZiBgZnN5bmNgIGlzCisgKiBzdXBwb3J0ZWQgZm9yIGRpcmVjdG9yaWVzIG9uIHRoaXMgcGxhdGZvcm0uCisgKgorICogQHBhcmFtIHBhdGggUGF0aCBvZiB0aGUgZmlsZSB3aG9zZSBwYXJlbnQgZGlyZWN0b3J5IHNob3VsZCBiZSBzeW5jZWQuCisgKiBAcmV0dXJuIDAgb24gc3VjY2VzcywgLTEgb24gZXJyb3IKKyAqLworZXh0ZXJuIGludCBnaXRfZnV0aWxzX2ZzeW5jX3BhcmVudChjb25zdCBjaGFyICpwYXRoKTsKKwogI2VuZGlmIC8qIElOQ0xVREVfZmlsZW9wc19oX18gKi8KZGlmZiAtLWdpdCBhL3NyYy9maWx0ZXIuYyBiL3NyYy9maWx0ZXIuYwppbmRleCAwZDg4MzFlLi5lNzRjYzEwIDEwMDY0NAotLS0gYS9zcmMvZmlsdGVyLmMKKysrIGIvc3JjL2ZpbHRlci5jCkBAIC05MTEsMTQgKzkxMSwxOSBAQAogCQkJCWxhc3Rfc3RyZWFtKTsKIAogCQlpZiAoZXJyb3IgPCAwKQotCQkJcmV0dXJuIGVycm9yOworCQkJZ290byBvdXQ7CiAKIAkJZ2l0X3ZlY3Rvcl9pbnNlcnQoc3RyZWFtcywgZmlsdGVyX3N0cmVhbSk7CiAJCWxhc3Rfc3RyZWFtID0gZmlsdGVyX3N0cmVhbTsKIAl9CiAKLQkqb3V0ID0gbGFzdF9zdHJlYW07Ci0JcmV0dXJuIDA7CitvdXQ6CisJaWYgKGVycm9yKQorCQlsYXN0X3N0cmVhbS0+Y2xvc2UobGFzdF9zdHJlYW0pOworCWVsc2UKKwkJKm91dCA9IGxhc3Rfc3RyZWFtOworCisJcmV0dXJuIGVycm9yOwogfQogCiB2b2lkIHN0cmVhbV9saXN0X2ZyZWUoZ2l0X3ZlY3RvciAqc3RyZWFtcykKQEAgLTk0MywxMiArOTQ4LDEzIEBACiAJZ2l0X3ZlY3RvciBmaWx0ZXJfc3RyZWFtcyA9IEdJVF9WRUNUT1JfSU5JVDsKIAlnaXRfd3JpdGVzdHJlYW0gKnN0cmVhbV9zdGFydDsKIAlzc2l6ZV90IHJlYWRsZW47Ci0JaW50IGZkID0gLTEsIGVycm9yOworCWludCBmZCA9IC0xLCBlcnJvciwgaW5pdGlhbGl6ZWQgPSAwOwogCiAJaWYgKChlcnJvciA9IHN0cmVhbV9saXN0X2luaXQoCiAJCQkmc3RyZWFtX3N0YXJ0LCAmZmlsdGVyX3N0cmVhbXMsIGZpbHRlcnMsIHRhcmdldCkpIDwgMCB8fAogCQkoZXJyb3IgPSBnaXRfcGF0aF9qb2luX3Vucm9vdGVkKCZhYnNwYXRoLCBwYXRoLCBiYXNlLCBOVUxMKSkgPCAwKQogCQlnb3RvIGRvbmU7CisJaW5pdGlhbGl6ZWQgPSAxOwogCiAJaWYgKChmZCA9IGdpdF9mdXRpbHNfb3Blbl9ybyhhYnNwYXRoLnB0cikpIDwgMCkgewogCQllcnJvciA9IGZkOwpAQCAtOTYwLDEzICs5NjYsMTMgQEAKIAkJCWdvdG8gZG9uZTsKIAl9CiAKLQlpZiAoIXJlYWRsZW4pCi0JCWVycm9yID0gc3RyZWFtX3N0YXJ0LT5jbG9zZShzdHJlYW1fc3RhcnQpOwotCWVsc2UgaWYgKHJlYWRsZW4gPCAwKQorCWlmIChyZWFkbGVuIDwgMCkKIAkJZXJyb3IgPSByZWFkbGVuOwogCi0KIGRvbmU6CisJaWYgKGluaXRpYWxpemVkKQorCQllcnJvciB8PSBzdHJlYW1fc3RhcnQtPmNsb3NlKHN0cmVhbV9zdGFydCk7CisKIAlpZiAoZmQgPj0gMCkKIAkJcF9jbG9zZShmZCk7CiAJc3RyZWFtX2xpc3RfZnJlZSgmZmlsdGVyX3N0cmVhbXMpOwpAQCAtOTgxLDIwICs5ODcsMjQgQEAKIHsKIAlnaXRfdmVjdG9yIGZpbHRlcl9zdHJlYW1zID0gR0lUX1ZFQ1RPUl9JTklUOwogCWdpdF93cml0ZXN0cmVhbSAqc3RyZWFtX3N0YXJ0OwotCWludCBlcnJvciA9IDAsIGNsb3NlX2Vycm9yOworCWludCBlcnJvciwgaW5pdGlhbGl6ZWQgPSAwOwogCiAJZ2l0X2J1Zl9zYW5pdGl6ZShkYXRhKTsKIAogCWlmICgoZXJyb3IgPSBzdHJlYW1fbGlzdF9pbml0KCZzdHJlYW1fc3RhcnQsICZmaWx0ZXJfc3RyZWFtcywgZmlsdGVycywgdGFyZ2V0KSkgPCAwKQogCQlnb3RvIG91dDsKKwlpbml0aWFsaXplZCA9IDE7CiAKLQllcnJvciA9IHN0cmVhbV9zdGFydC0+d3JpdGUoc3RyZWFtX3N0YXJ0LCBkYXRhLT5wdHIsIGRhdGEtPnNpemUpOworCWlmICgoZXJyb3IgPSBzdHJlYW1fc3RhcnQtPndyaXRlKAorCQkJc3RyZWFtX3N0YXJ0LCBkYXRhLT5wdHIsIGRhdGEtPnNpemUpKSA8IDApCisJCWdvdG8gb3V0OwogCiBvdXQ6Ci0JY2xvc2VfZXJyb3IgPSBzdHJlYW1fc3RhcnQtPmNsb3NlKHN0cmVhbV9zdGFydCk7CisJaWYgKGluaXRpYWxpemVkKQorCQllcnJvciB8PSBzdHJlYW1fc3RhcnQtPmNsb3NlKHN0cmVhbV9zdGFydCk7CisKIAlzdHJlYW1fbGlzdF9mcmVlKCZmaWx0ZXJfc3RyZWFtcyk7Ci0JLyogcHJvcGFnYXRlIHRoZSBzdHJlYW0gaW5pdCBvciB3cml0ZSBlcnJvciAqLwotCXJldHVybiBlcnJvciA8IDAgPyBlcnJvciA6IGNsb3NlX2Vycm9yOworCXJldHVybiBlcnJvcjsKIH0KIAogaW50IGdpdF9maWx0ZXJfbGlzdF9zdHJlYW1fYmxvYigKZGlmZiAtLWdpdCBhL3NyYy9nbG9iYWwuYyBiL3NyYy9nbG9iYWwuYwppbmRleCBlMmFkOGZlLi5hZmE1N2UxIDEwMDY0NAotLS0gYS9zcmMvZ2xvYmFsLmMKKysrIGIvc3JjL2dsb2JhbC5jCkBAIC0yMiw3ICsyMiw3IEBACiAKIGdpdF9tdXRleCBnaXRfX213aW5kb3dfbXV0ZXg7CiAKLSNkZWZpbmUgTUFYX1NIVVRET1dOX0NCIDgKKyNkZWZpbmUgTUFYX1NIVVRET1dOX0NCIDkKIAogc3RhdGljIGdpdF9nbG9iYWxfc2h1dGRvd25fZm4gZ2l0X19zaHV0ZG93bl9jYWxsYmFja3NbTUFYX1NIVVRET1dOX0NCXTsKIHN0YXRpYyBnaXRfYXRvbWljIGdpdF9fbl9zaHV0ZG93bl9jYWxsYmFja3M7CmRpZmYgLS1naXQgYS9zcmMvaGFzaC5oIGIvc3JjL2hhc2guaAppbmRleCAwYmMwMmE4Li4wZGIwMzM5IDEwMDY0NAotLS0gYS9zcmMvaGFzaC5oCisrKyBiL3NyYy9oYXNoLmgKQEAgLTE2LDExICsxNiwxMyBAQAogaW50IGdpdF9oYXNoX2N0eF9pbml0KGdpdF9oYXNoX2N0eCAqY3R4KTsKIHZvaWQgZ2l0X2hhc2hfY3R4X2NsZWFudXAoZ2l0X2hhc2hfY3R4ICpjdHgpOwogCi0jaWYgZGVmaW5lZChHSVRfQ09NTU9OX0NSWVBUTykKKyNpZiBkZWZpbmVkKEdJVF9TSEExX0NPTExJU0lPTkRFVEVDVCkKKyMgaW5jbHVkZSAiaGFzaC9oYXNoX2NvbGxpc2lvbmRldGVjdC5oIgorI2VsaWYgZGVmaW5lZChHSVRfU0hBMV9DT01NT05fQ1JZUFRPKQogIyBpbmNsdWRlICJoYXNoL2hhc2hfY29tbW9uX2NyeXB0by5oIgotI2VsaWYgZGVmaW5lZChPUEVOU1NMX1NIQTEpCisjZWxpZiBkZWZpbmVkKEdJVF9TSEExX09QRU5TU0wpCiAjIGluY2x1ZGUgImhhc2gvaGFzaF9vcGVuc3NsLmgiCi0jZWxpZiBkZWZpbmVkKFdJTjMyX1NIQTEpCisjZWxpZiBkZWZpbmVkKEdJVF9TSEExX1dJTjMyKQogIyBpbmNsdWRlICJoYXNoL2hhc2hfd2luMzIuaCIKICNlbHNlCiAjIGluY2x1ZGUgImhhc2gvaGFzaF9nZW5lcmljLmgiCmRpZmYgLS1naXQgYS9zcmMvaGFzaC9oYXNoX2NvbGxpc2lvbmRldGVjdC5oIGIvc3JjL2hhc2gvaGFzaF9jb2xsaXNpb25kZXRlY3QuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41ZmRhZThkCi0tLSAvZGV2L251bGwKKysrIGIvc3JjL2hhc2gvaGFzaF9jb2xsaXNpb25kZXRlY3QuaApAQCAtMCwwICsxLDQ3IEBACisvKgorICogQ29weXJpZ2h0IChDKSB0aGUgbGliZ2l0MiBjb250cmlidXRvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogVGhpcyBmaWxlIGlzIHBhcnQgb2YgbGliZ2l0MiwgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIEdOVSBHUEwgdjIgd2l0aAorICogYSBMaW5raW5nIEV4Y2VwdGlvbi4gRm9yIGZ1bGwgdGVybXMgc2VlIHRoZSBpbmNsdWRlZCBDT1BZSU5HIGZpbGUuCisgKi8KKworI2lmbmRlZiBJTkNMVURFX2hhc2hfY29sbGlzaW9uZGV0ZWN0X2hfXworI2RlZmluZSBJTkNMVURFX2hhc2hfY29sbGlzaW9uZGV0ZWN0X2hfXworCisjaW5jbHVkZSAiaGFzaC5oIgorI2luY2x1ZGUgInNoYTFkYy9zaGExLmgiCisKK3N0cnVjdCBnaXRfaGFzaF9jdHggeworCVNIQTFfQ1RYIGM7Cit9OworCisjZGVmaW5lIGdpdF9oYXNoX2dsb2JhbF9pbml0KCkgMAorI2RlZmluZSBnaXRfaGFzaF9jdHhfaW5pdChjdHgpIGdpdF9oYXNoX2luaXQoY3R4KQorI2RlZmluZSBnaXRfaGFzaF9jdHhfY2xlYW51cChjdHgpCisKK0dJVF9JTkxJTkUoaW50KSBnaXRfaGFzaF9pbml0KGdpdF9oYXNoX2N0eCAqY3R4KQoreworCWFzc2VydChjdHgpOworCVNIQTFEQ0luaXQoJmN0eC0+Yyk7CisJcmV0dXJuIDA7Cit9CisKK0dJVF9JTkxJTkUoaW50KSBnaXRfaGFzaF91cGRhdGUoZ2l0X2hhc2hfY3R4ICpjdHgsIGNvbnN0IHZvaWQgKmRhdGEsIHNpemVfdCBsZW4pCit7CisJYXNzZXJ0KGN0eCk7CisJU0hBMURDVXBkYXRlKCZjdHgtPmMsIGRhdGEsIGxlbik7CisJcmV0dXJuIDA7Cit9CisKK0dJVF9JTkxJTkUoaW50KSBnaXRfaGFzaF9maW5hbChnaXRfb2lkICpvdXQsIGdpdF9oYXNoX2N0eCAqY3R4KQoreworCWFzc2VydChjdHgpOworCWlmIChTSEExRENGaW5hbChvdXQtPmlkLCAmY3R4LT5jKSkgeworCQlnaXRlcnJfc2V0KEdJVEVSUl9TSEExLCAiU0hBMSBjb2xsaXNpb24gYXR0YWNrIGRldGVjdGVkIik7CisJCXJldHVybiAtMTsKKwl9CisKKwlyZXR1cm4gMDsKK30KKworI2VuZGlmIC8qIElOQ0xVREVfaGFzaF9jb2xsaXNpb25kZXRlY3RfaF9fICovCmRpZmYgLS1naXQgYS9zcmMvaGFzaC9zaGExZGMvc2hhMS5jIGIvc3JjL2hhc2gvc2hhMWRjL3NoYTEuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mYWNlYTFiCi0tLSAvZGV2L251bGwKKysrIGIvc3JjL2hhc2gvc2hhMWRjL3NoYTEuYwpAQCAtMCwwICsxLDE4NTYgQEAKKy8qKioKKyogQ29weXJpZ2h0IDIwMTcgTWFyYyBTdGV2ZW5zIDxtYXJjQG1hcmMtc3RldmVucy5ubD4sIERhbiBTaHVtb3cgKGRhbnNodUBtaWNyb3NvZnQuY29tKQorKiBEaXN0cmlidXRlZCB1bmRlciB0aGUgTUlUIFNvZnR3YXJlIExpY2Vuc2UuCisqIFNlZSBhY2NvbXBhbnlpbmcgZmlsZSBMSUNFTlNFLnR4dCBvciBjb3B5IGF0CisqIGh0dHBzOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvTUlUCisqKiovCisKKyNpZm5kZWYgU0hBMURDX05PX1NUQU5EQVJEX0lOQ0xVREVTCisjaW5jbHVkZSA8c3RyaW5nLmg+CisjaW5jbHVkZSA8bWVtb3J5Lmg+CisjaW5jbHVkZSA8c3RkaW8uaD4KKyNpbmNsdWRlIDxzdGRsaWIuaD4KKyNlbmRpZgorCisjaWZkZWYgU0hBMURDX0NVU1RPTV9JTkNMVURFX1NIQTFfQworI2luY2x1ZGUgU0hBMURDX0NVU1RPTV9JTkNMVURFX1NIQTFfQworI2VuZGlmCisKKyNpZm5kZWYgU0hBMURDX0lOSVRfU0FGRV9IQVNIX0RFRkFVTFQKKyNkZWZpbmUgU0hBMURDX0lOSVRfU0FGRV9IQVNIX0RFRkFVTFQgMQorI2VuZGlmCisKKyNpbmNsdWRlICJzaGExLmgiCisjaW5jbHVkZSAidWJjX2NoZWNrLmgiCisKKworLyoKKyAgIEJlY2F1c2UgTGl0dGxlLUVuZGlhbiBhcmNoaXRlY3R1cmVzIGFyZSBtb3N0IGNvbW1vbiwKKyAgIHdlIG9ubHkgc2V0IFNIQTFEQ19CSUdFTkRJQU4gaWYgb25lIG9mIHRoZXNlIGNvbmRpdGlvbnMgaXMgbWV0LgorICAgTm90ZSB0aGF0IGFsbCBNU0ZUIHBsYXRmb3JtcyBhcmUgbGl0dGxlIGVuZGlhbiwKKyAgIHNvIG5vbmUgb2YgdGhlc2Ugd2lsbCBiZSBkZWZpbmVkIHVuZGVyIHRoZSBNU0MgY29tcGlsZXIuCisgICBJZiB5b3UgYXJlIGNvbXBpbGluZyBvbiBhIGJpZyBlbmRpYW4gcGxhdGZvcm0gYW5kIHlvdXIgY29tcGlsZXIgZG9lcyBub3QgZGVmaW5lIG9uZSBvZiB0aGVzZSwKKyAgIHlvdSB3aWxsIGhhdmUgdG8gYWRkIHdoYXRldmVyIG1hY3JvcyB5b3VyIHRvb2wgY2hhaW4gZGVmaW5lcyB0byBpbmRpY2F0ZSBCaWctRW5kaWFubmVzcy4KKyAqLworI2lmZGVmIFNIQTFEQ19CSUdFTkRJQU4KKyN1bmRlZiBTSEExRENfQklHRU5ESUFOCisjZW5kaWYKKworI2lmIChkZWZpbmVkKF9CWVRFX09SREVSKSB8fCBkZWZpbmVkKF9fQllURV9PUkRFUikgfHwgZGVmaW5lZChfX0JZVEVfT1JERVJfXykpCisKKyNpZiAoKGRlZmluZWQoX0JZVEVfT1JERVIpICYmIChfQllURV9PUkRFUiA9PSBfQklHX0VORElBTikpIHx8IFwKKyAgICAgKGRlZmluZWQoX19CWVRFX09SREVSKSAmJiAoX19CWVRFX09SREVSID09IF9fQklHX0VORElBTikpIHx8IFwKKyAgICAgKGRlZmluZWQoX19CWVRFX09SREVSX18pICYmIChfX0JZVEVfT1JERVJfXyA9PSBfX0JJR19FTkRJQU5fXykpICkKKyNkZWZpbmUgU0hBMURDX0JJR0VORElBTgorI2VuZGlmCisKKyNlbHNlCisKKyNpZiAoZGVmaW5lZChfQklHX0VORElBTikgfHwgZGVmaW5lZChfX0JJR19FTkRJQU4pIHx8IGRlZmluZWQoX19CSUdfRU5ESUFOX18pIHx8IFwKKyAgICAgZGVmaW5lZChfX0FSTUVCX18pIHx8IGRlZmluZWQoX19USFVNQkVCX18pIHx8IGRlZmluZWQoX19BQVJDSDY0RUJfXykgfHwgXAorICAgICBkZWZpbmVkKF9fTUlQU0VCX18pIHx8IGRlZmluZWQoX19NSVBTRUIpIHx8IGRlZmluZWQoX01JUFNFQikgfHwgXAorICAgICBkZWZpbmVkKF9fc3BhcmMpKQorI2RlZmluZSBTSEExRENfQklHRU5ESUFOCisjZW5kaWYKKworI2VuZGlmCisKKyNpZiAoZGVmaW5lZChTSEExRENfRk9SQ0VfTElUVExFRU5ESUFOKSAmJiBkZWZpbmVkKFNIQTFEQ19CSUdFTkRJQU4pKQorI3VuZGVmIFNIQTFEQ19CSUdFTkRJQU4KKyNlbmRpZgorI2lmIChkZWZpbmVkKFNIQTFEQ19GT1JDRV9CSUdFTkRJQU4pICYmICFkZWZpbmVkKFNIQTFEQ19CSUdFTkRJQU4pKQorI2RlZmluZSBTSEExRENfQklHRU5ESUFOCisjZW5kaWYKKy8qRU5ESUFOTkVTUyBTRUxFQ1RJT04qLworCisjaWYgKGRlZmluZWQgU0hBMURDX0ZPUkNFX1VOQUxJR05FRF9BQ0NFU1MgfHwgXAorICAgICBkZWZpbmVkKF9fYW1kNjRfXykgfHwgZGVmaW5lZChfX2FtZDY0KSB8fCBkZWZpbmVkKF9feDg2XzY0X18pIHx8IGRlZmluZWQoX194ODZfNjQpIHx8IFwKKyAgICAgZGVmaW5lZChpMzg2KSB8fCBkZWZpbmVkKF9faTM4NikgfHwgZGVmaW5lZChfX2kzODZfXykgfHwgZGVmaW5lZChfX2k0ODZfXykgIHx8IFwKKyAgICAgZGVmaW5lZChfX2k1ODZfXykgfHwgZGVmaW5lZChfX2k2ODZfXykgfHwgZGVmaW5lZChfTV9JWDg2KSB8fCBkZWZpbmVkKF9fWDg2X18pIHx8IFwKKyAgICAgZGVmaW5lZChfWDg2XykgfHwgZGVmaW5lZChfX1RIV19JTlRFTF9fKSB8fCBkZWZpbmVkKF9fSTg2X18pIHx8IGRlZmluZWQoX19JTlRFTF9fKSB8fCBcCisgICAgIGRlZmluZWQoX18zODYpIHx8IGRlZmluZWQoX01fWDY0KSB8fCBkZWZpbmVkKF9NX0FNRDY0KSkKKworI2RlZmluZSBTSEExRENfQUxMT1dfVU5BTElHTkVEX0FDQ0VTUworCisjZW5kaWYgLypVTkFMSUdOTUVOVCBERVRFQ1RJT04qLworCisKKyNkZWZpbmUgcm90YXRlX3JpZ2h0KHgsbikgKCgoeCk+PihuKSl8KCh4KTw8KDMyLShuKSkpKQorI2RlZmluZSByb3RhdGVfbGVmdCh4LG4pICAoKCh4KTw8KG4pKXwoKHgpPj4oMzItKG4pKSkpCisKKyNkZWZpbmUgc2hhMV9ic3dhcDMyKHgpIFwKKwl7eCA9ICgoeCA8PCA4KSAmIDB4RkYwMEZGMDApIHwgKCh4ID4+IDgpICYgMHhGRjAwRkYpOyB4ID0gKHggPDwgMTYpIHwgKHggPj4gMTYpO30KKworI2RlZmluZSBzaGExX21peChXLCB0KSAgKHJvdGF0ZV9sZWZ0KFdbdCAtIDNdIF4gV1t0IC0gOF0gXiBXW3QgLSAxNF0gXiBXW3QgLSAxNl0sIDEpKQorCisjaWZkZWYgU0hBMURDX0JJR0VORElBTgorCSNkZWZpbmUgc2hhMV9sb2FkKG0sIHQsIHRlbXApICB7IHRlbXAgPSBtW3RdOyB9CisjZWxzZQorCSNkZWZpbmUgc2hhMV9sb2FkKG0sIHQsIHRlbXApICB7IHRlbXAgPSBtW3RdOyBzaGExX2Jzd2FwMzIodGVtcCk7IH0KKyNlbmRpZgorCisjZGVmaW5lIHNoYTFfc3RvcmUoVywgdCwgeCkJKih2b2xhdGlsZSB1aW50MzJfdCAqKSZXW3RdID0geAorCisjZGVmaW5lIHNoYTFfZjEoYixjLGQpICgoZCleKChiKSYoKGMpXihkKSkpKQorI2RlZmluZSBzaGExX2YyKGIsYyxkKSAoKGIpXihjKV4oZCkpCisjZGVmaW5lIHNoYTFfZjMoYixjLGQpICgoKGIpJihjKSkrKChkKSYoKGIpXihjKSkpKQorI2RlZmluZSBzaGExX2Y0KGIsYyxkKSAoKGIpXihjKV4oZCkpCisKKyNkZWZpbmUgSEFTSENMQVNIX1NIQTFDT01QUkVTU19ST1VORDFfU1RFUChhLCBiLCBjLCBkLCBlLCBtLCB0KSBcCisJeyBlICs9IHJvdGF0ZV9sZWZ0KGEsIDUpICsgc2hhMV9mMShiLGMsZCkgKyAweDVBODI3OTk5ICsgbVt0XTsgYiA9IHJvdGF0ZV9sZWZ0KGIsIDMwKTsgfQorI2RlZmluZSBIQVNIQ0xBU0hfU0hBMUNPTVBSRVNTX1JPVU5EMl9TVEVQKGEsIGIsIGMsIGQsIGUsIG0sIHQpIFwKKwl7IGUgKz0gcm90YXRlX2xlZnQoYSwgNSkgKyBzaGExX2YyKGIsYyxkKSArIDB4NkVEOUVCQTEgKyBtW3RdOyBiID0gcm90YXRlX2xlZnQoYiwgMzApOyB9CisjZGVmaW5lIEhBU0hDTEFTSF9TSEExQ09NUFJFU1NfUk9VTkQzX1NURVAoYSwgYiwgYywgZCwgZSwgbSwgdCkgXAorCXsgZSArPSByb3RhdGVfbGVmdChhLCA1KSArIHNoYTFfZjMoYixjLGQpICsgMHg4RjFCQkNEQyArIG1bdF07IGIgPSByb3RhdGVfbGVmdChiLCAzMCk7IH0KKyNkZWZpbmUgSEFTSENMQVNIX1NIQTFDT01QUkVTU19ST1VORDRfU1RFUChhLCBiLCBjLCBkLCBlLCBtLCB0KSBcCisJeyBlICs9IHJvdGF0ZV9sZWZ0KGEsIDUpICsgc2hhMV9mNChiLGMsZCkgKyAweENBNjJDMUQ2ICsgbVt0XTsgYiA9IHJvdGF0ZV9sZWZ0KGIsIDMwKTsgfQorCisjZGVmaW5lIEhBU0hDTEFTSF9TSEExQ09NUFJFU1NfUk9VTkQxX1NURVBfQlcoYSwgYiwgYywgZCwgZSwgbSwgdCkgXAorCXsgYiA9IHJvdGF0ZV9yaWdodChiLCAzMCk7IGUgLT0gcm90YXRlX2xlZnQoYSwgNSkgKyBzaGExX2YxKGIsYyxkKSArIDB4NUE4Mjc5OTkgKyBtW3RdOyB9CisjZGVmaW5lIEhBU0hDTEFTSF9TSEExQ09NUFJFU1NfUk9VTkQyX1NURVBfQlcoYSwgYiwgYywgZCwgZSwgbSwgdCkgXAorCXsgYiA9IHJvdGF0ZV9yaWdodChiLCAzMCk7IGUgLT0gcm90YXRlX2xlZnQoYSwgNSkgKyBzaGExX2YyKGIsYyxkKSArIDB4NkVEOUVCQTEgKyBtW3RdOyB9CisjZGVmaW5lIEhBU0hDTEFTSF9TSEExQ09NUFJFU1NfUk9VTkQzX1NURVBfQlcoYSwgYiwgYywgZCwgZSwgbSwgdCkgXAorCXsgYiA9IHJvdGF0ZV9yaWdodChiLCAzMCk7IGUgLT0gcm90YXRlX2xlZnQoYSwgNSkgKyBzaGExX2YzKGIsYyxkKSArIDB4OEYxQkJDREMgKyBtW3RdOyB9CisjZGVmaW5lIEhBU0hDTEFTSF9TSEExQ09NUFJFU1NfUk9VTkQ0X1NURVBfQlcoYSwgYiwgYywgZCwgZSwgbSwgdCkgXAorCXsgYiA9IHJvdGF0ZV9yaWdodChiLCAzMCk7IGUgLT0gcm90YXRlX2xlZnQoYSwgNSkgKyBzaGExX2Y0KGIsYyxkKSArIDB4Q0E2MkMxRDYgKyBtW3RdOyB9CisKKyNkZWZpbmUgU0hBMUNPTVBSRVNTX0ZVTExfUk9VTkQxX1NURVBfTE9BRChhLCBiLCBjLCBkLCBlLCBtLCBXLCB0LCB0ZW1wKSBcCisJe3NoYTFfbG9hZChtLCB0LCB0ZW1wKTsgc2hhMV9zdG9yZShXLCB0LCB0ZW1wKTsgZSArPSB0ZW1wICsgcm90YXRlX2xlZnQoYSwgNSkgKyBzaGExX2YxKGIsYyxkKSArIDB4NUE4Mjc5OTk7IGIgPSByb3RhdGVfbGVmdChiLCAzMCk7fQorCisjZGVmaW5lIFNIQTFDT01QUkVTU19GVUxMX1JPVU5EMV9TVEVQX0VYUEFORChhLCBiLCBjLCBkLCBlLCBXLCB0LCB0ZW1wKSBcCisJe3RlbXAgPSBzaGExX21peChXLCB0KTsgc2hhMV9zdG9yZShXLCB0LCB0ZW1wKTsgZSArPSB0ZW1wICsgcm90YXRlX2xlZnQoYSwgNSkgKyBzaGExX2YxKGIsYyxkKSArIDB4NUE4Mjc5OTk7IGIgPSByb3RhdGVfbGVmdChiLCAzMCk7IH0KKworI2RlZmluZSBTSEExQ09NUFJFU1NfRlVMTF9ST1VORDJfU1RFUChhLCBiLCBjLCBkLCBlLCBXLCB0LCB0ZW1wKSBcCisJe3RlbXAgPSBzaGExX21peChXLCB0KTsgc2hhMV9zdG9yZShXLCB0LCB0ZW1wKTsgZSArPSB0ZW1wICsgcm90YXRlX2xlZnQoYSwgNSkgKyBzaGExX2YyKGIsYyxkKSArIDB4NkVEOUVCQTE7IGIgPSByb3RhdGVfbGVmdChiLCAzMCk7IH0KKworI2RlZmluZSBTSEExQ09NUFJFU1NfRlVMTF9ST1VORDNfU1RFUChhLCBiLCBjLCBkLCBlLCBXLCB0LCB0ZW1wKSBcCisJe3RlbXAgPSBzaGExX21peChXLCB0KTsgc2hhMV9zdG9yZShXLCB0LCB0ZW1wKTsgZSArPSB0ZW1wICsgcm90YXRlX2xlZnQoYSwgNSkgKyBzaGExX2YzKGIsYyxkKSArIDB4OEYxQkJDREM7IGIgPSByb3RhdGVfbGVmdChiLCAzMCk7IH0KKworI2RlZmluZSBTSEExQ09NUFJFU1NfRlVMTF9ST1VORDRfU1RFUChhLCBiLCBjLCBkLCBlLCBXLCB0LCB0ZW1wKSBcCisJe3RlbXAgPSBzaGExX21peChXLCB0KTsgc2hhMV9zdG9yZShXLCB0LCB0ZW1wKTsgZSArPSB0ZW1wICsgcm90YXRlX2xlZnQoYSwgNSkgKyBzaGExX2Y0KGIsYyxkKSArIDB4Q0E2MkMxRDY7IGIgPSByb3RhdGVfbGVmdChiLCAzMCk7IH0KKworCisjZGVmaW5lIFNIQTFfU1RPUkVfU1RBVEUoaSkgc3RhdGVzW2ldWzBdID0gYTsgc3RhdGVzW2ldWzFdID0gYjsgc3RhdGVzW2ldWzJdID0gYzsgc3RhdGVzW2ldWzNdID0gZDsgc3RhdGVzW2ldWzRdID0gZTsKKworI2lmZGVmIEJVSUxETk9DT0xMREVURUNUU0hBMUNPTVBSRVNTSU9OCit2b2lkIHNoYTFfY29tcHJlc3Npb24odWludDMyX3QgaWh2WzVdLCBjb25zdCB1aW50MzJfdCBtWzE2XSkKK3sKKwl1aW50MzJfdCBXWzgwXTsKKwl1aW50MzJfdCBhLGIsYyxkLGU7CisJdW5zaWduZWQgaTsKKworCW1lbWNweShXLCBtLCAxNiAqIDQpOworCWZvciAoaSA9IDE2OyBpIDwgODA7ICsraSkKKwkJV1tpXSA9IHNoYTFfbWl4KFcsIGkpOworCisJYSA9IGlodlswXTsgYiA9IGlodlsxXTsgYyA9IGlodlsyXTsgZCA9IGlodlszXTsgZSA9IGlodls0XTsKKworCUhBU0hDTEFTSF9TSEExQ09NUFJFU1NfUk9VTkQxX1NURVAoYSwgYiwgYywgZCwgZSwgVywgMCk7CisJSEFTSENMQVNIX1NIQTFDT01QUkVTU19ST1VORDFfU1RFUChlLCBhLCBiLCBjLCBkLCBXLCAxKTsKKwlIQVNIQ0xBU0hfU0hBMUNPTVBSRVNTX1JPVU5EMV9TVEVQKGQsIGUsIGEsIGIsIGMsIFcsIDIpOworCUhBU0hDTEFTSF9TSEExQ09NUFJFU1NfUk9VTkQxX1NURVAoYywgZCwgZSwgYSwgYiwgVywgMyk7CisJSEFTSENMQVNIX1NIQTFDT01QUkVTU19ST1VORDFfU1RFUChiLCBjLCBkLCBlLCBhLCBXLCA0KTsKKwlIQVNIQ0xBU0hfU0hBMUNPTVBSRVNTX1JPVU5EMV9TVEVQKGEsIGIsIGMsIGQsIGUsIFcsIDUpOworCUhBU0hDTEFTSF9TSEExQ09NUFJFU1NfUk9VTkQxX1NURVAoZSwgYSwgYiwgYywgZCwgVywgNik7CisJSEFTSENMQVNIX1NIQTFDT01QUkVTU19ST1VORDFfU1RFUChkLCBlLCBhLCBiLCBjLCBXLCA3KTsKKwlIQVNIQ0xBU0hfU0hBMUNPTVBSRVNTX1JPVU5EMV9TVEVQKGMsIGQsIGUsIGEsIGIsIFcsIDgpOworCUhBU0hDTEFTSF9TSEExQ09NUFJFU1NfUk9VTkQxX1NURVAoYiwgYywgZCwgZSwgYSwgVywgOSk7CisJSEFTSENMQVNIX1NIQTFDT01QUkVTU19ST1VORDFfU1RFUChhLCBiLCBjLCBkLCBlLCBXLCAxMCk7CisJSEFTSENMQVNIX1NIQTFDT01QUkVTU19ST1VORDFfU1RFUChlLCBhLCBiLCBjLCBkLCBXLCAxMSk7CisJSEFTSENMQVNIX1NIQTFDT01QUkVTU19ST1VORDFfU1RFUChkLCBlLCBhLCBiLCBjLCBXLCAxMik7CisJSEFTSENMQVNIX1NIQTFDT01QUkVTU19ST1VORDFfU1RFUChjLCBkLCBlLCBhLCBiLCBXLCAxMyk7CisJSEFTSENMQVNIX1NIQTFDT01QUkVTU19ST1VORDFfU1RFUChiLCBjLCBkLCBlLCBhLCBXLCAxNCk7CisJSEFTSENMQVNIX1NIQTFDT01QUkVTU19ST1VORDFfU1RFUChhLCBiLCBjLCBkLCBlLCBXLCAxNSk7CisJSEFTSENMQVNIX1NIQTFDT01QUkVTU19ST1VORDFfU1RFUChlLCBhLCBiLCBjLCBkLCBXLCAxNik7CisJSEFTSENMQVNIX1NIQTFDT01QUkVTU19ST1VORDFfU1RFUChkLCBlLCBhLCBiLCBjLCBXLCAxNyk7CisJSEFTSENMQVNIX1NIQTFDT01QUkVTU19ST1VORDFfU1RFUChjLCBkLCBlLCBhLCBiLCBXLCAxOCk7CisJSEFTSENMQVNIX1NIQTFDT01QUkVTU19ST1VORDFfU1RFUChiLCBjLCBkLCBlLCBhLCBXLCAxOSk7CisKKwlIQVNIQ0xBU0hfU0hBMUNPTVBSRVNTX1JPVU5EMl9TVEVQKGEsIGIsIGMsIGQsIGUsIFcsIDIwKTsKKwlIQVNIQ0xBU0hfU0hBMUNPTVBSRVNTX1JPVU5EMl9TVEVQKGUsIGEsIGIsIGMsIGQsIFcsIDIxKTsKKwlIQVNIQ0xBU0hfU0hBMUNPTVBSRVNTX1JPVU5EMl9TVEVQKGQsIGUsIGEsIGIsIGMsIFcsIDIyKTsKKwlIQVNIQ0xBU0hfU0hBMUNPTVBSRVNTX1JPVU5EMl9TVEVQKGMsIGQsIGUsIGEsIGIsIFcsIDIzKTsKKwlIQVNIQ0xBU0hfU0hBMUNPTVBSRVNTX1JPVU5EMl9TVEVQKGIsIGMsIGQsIGUsIGEsIFcsIDI0KTsKKwlIQVNIQ0xBU0hfU0hBMUNPTVBSRVNTX1JPVU5EMl9TVEVQKGEsIGIsIGMsIGQsIGUsIFcsIDI1KTsKKwlIQVNIQ0xBU0hfU0hBMUNPTVBSRVNTX1JPVU5EMl9TVEVQKGUsIGEsIGIsIGMsIGQsIFcsIDI2KTsKKwlIQVNIQ0xBU0hfU0hBMUNPTVBSRVNTX1JPVU5EMl9TVEVQKGQsIGUsIGEsIGIsIGMsIFcsIDI3KTsKKwlIQVNIQ0xBU0hfU0hBMUNPTVBSRVNTX1JPVU5EMl9TVEVQKGMsIGQsIGUsIGEsIGIsIFcsIDI4KTsKKwlIQVNIQ0xBU0hfU0hBMUNPTVBSRVNTX1JPVU5EMl9TVEVQKGIsIGMsIGQsIGUsIGEsIFcsIDI5KTsKKwlIQVNIQ0xBU0hfU0hBMUNPTVBSRVNTX1JPVU5EMl9TVEVQKGEsIGIsIGMsIGQsIGUsIFcsIDMwKTsKKwlIQVNIQ0xBU0hfU0hBMUNPTVBSRVNTX1JPVU5EMl9TVEVQKGUsIGEsIGIsIGMsIGQsIFcsIDMxKTsKKwlIQVNIQ0xBU0hfU0hBMUNPTVBSRVNTX1JPVU5EMl9TVEVQKGQsIGUsIGEsIGIsIGMsIFcsIDMyKTsKKwlIQVNIQ0xBU0hfU0hBMUNPTVBSRVNTX1JPVU5EMl9TVEVQKGMsIGQsIGUsIGEsIGIsIFcsIDMzKTsKKwlIQVNIQ0xBU0hfU0hBMUNPTVBSRVNTX1JPVU5EMl9TVEVQKGIsIGMsIGQsIGUsIGEsIFcsIDM0KTsKKwlIQVNIQ0xBU0hfU0hBMUNPTVBSRVNTX1JPVU5EMl9TVEVQKGEsIGIsIGMsIGQsIGUsIFcsIDM1KTsKKwlIQVNIQ0xBU0hfU0hBMUNPTVBSRVNTX1JPVU5EMl9TVEVQKGUsIGEsIGIsIGMsIGQsIFcsIDM2KTsKKwlIQVNIQ0xBU0hfU0hBMUNPTVBSRVNTX1JPVU5EMl9TVEVQKGQsIGUsIGEsIGIsIGMsIFcsIDM3KTsKKwlIQVNIQ0xBU0hfU0hBMUNPTVBSRVNTX1JPVU5EMl9TVEVQKGMsIGQsIGUsIGEsIGIsIFcsIDM4KTsKKwlIQVNIQ0xBU0hfU0hBMUNPTVBSRVNTX1JPVU5EMl9TVEVQKGIsIGMsIGQsIGUsIGEsIFcsIDM5KTsKKworCUhBU0hDTEFTSF9TSEExQ09NUFJFU1NfUk9VTkQzX1NURVAoYSwgYiwgYywgZCwgZSwgVywgNDApOworCUhBU0hDTEFTSF9TSEExQ09NUFJFU1NfUk9VTkQzX1NURVAoZSwgYSwgYiwgYywgZCwgVywgNDEpOworCUhBU0hDTEFTSF9TSEExQ09NUFJFU1NfUk9VTkQzX1NURVAoZCwgZSwgYSwgYiwgYywgVywgNDIpOworCUhBU0hDTEFTSF9TSEExQ09NUFJFU1NfUk9VTkQzX1NURVAoYywgZCwgZSwgYSwgYiwgVywgNDMpOworCUhBU0hDTEFTSF9TSEExQ09NUFJFU1NfUk9VTkQzX1NURVAoYiwgYywgZCwgZSwgYSwgVywgNDQpOworCUhBU0hDTEFTSF9TSEExQ09NUFJFU1NfUk9VTkQzX1NURVAoYSwgYiwgYywgZCwgZSwgVywgNDUpOworCUhBU0hDTEFTSF9TSEExQ09NUFJFU1NfUk9VTkQzX1NURVAoZSwgYSwgYiwgYywgZCwgVywgNDYpOworCUhBU0hDTEFTSF9TSEExQ09NUFJFU1NfUk9VTkQzX1NURVAoZCwgZSwgYSwgYiwgYywgVywgNDcpOworCUhBU0hDTEFTSF9TSEExQ09NUFJFU1NfUk9VTkQzX1NURVAoYywgZCwgZSwgYSwgYiwgVywgNDgpOworCUhBU0hDTEFTSF9TSEExQ09NUFJFU1NfUk9VTkQzX1NURVAoYiwgYywgZCwgZSwgYSwgVywgNDkpOworCUhBU0hDTEFTSF9TSEExQ09NUFJFU1NfUk9VTkQzX1NURVAoYSwgYiwgYywgZCwgZSwgVywgNTApOworCUhBU0hDTEFTSF9TSEExQ09NUFJFU1NfUk9VTkQzX1NURVAoZSwgYSwgYiwgYywgZCwgVywgNTEpOworCUhBU0hDTEFTSF9TSEExQ09NUFJFU1NfUk9VTkQzX1NURVAoZCwgZSwgYSwgYiwgYywgVywgNTIpOworCUhBU0hDTEFTSF9TSEExQ09NUFJFU1NfUk9VTkQzX1NURVAoYywgZCwgZSwgYSwgYiwgVywgNTMpOworCUhBU0hDTEFTSF9TSEExQ09NUFJFU1NfUk9VTkQzX1NURVAoYiwgYywgZCwgZSwgYSwgVywgNTQpOworCUhBU0hDTEFTSF9TSEExQ09NUFJFU1NfUk9VTkQzX1NURVAoYSwgYiwgYywgZCwgZSwgVywgNTUpOworCUhBU0hDTEFTSF9TSEExQ09NUFJFU1NfUk9VTkQzX1NURVAoZSwgYSwgYiwgYywgZCwgVywgNTYpOworCUhBU0hDTEFTSF9TSEExQ09NUFJFU1NfUk9VTkQzX1NURVAoZCwgZSwgYSwgYiwgYywgVywgNTcpOworCUhBU0hDTEFTSF9TSEExQ09NUFJFU1NfUk9VTkQzX1NURVAoYywgZCwgZSwgYSwgYiwgVywgNTgpOworCUhBU0hDTEFTSF9TSEExQ09NUFJFU1NfUk9VTkQzX1NURVAoYiwgYywgZCwgZSwgYSwgVywgNTkpOworCisJSEFTSENMQVNIX1NIQTFDT01QUkVTU19ST1VORDRfU1RFUChhLCBiLCBjLCBkLCBlLCBXLCA2MCk7CisJSEFTSENMQVNIX1NIQTFDT01QUkVTU19ST1VORDRfU1RFUChlLCBhLCBiLCBjLCBkLCBXLCA2MSk7CisJSEFTSENMQVNIX1NIQTFDT01QUkVTU19ST1VORDRfU1RFUChkLCBlLCBhLCBiLCBjLCBXLCA2Mik7CisJSEFTSENMQVNIX1NIQTFDT01QUkVTU19ST1VORDRfU1RFUChjLCBkLCBlLCBhLCBiLCBXLCA2Myk7CisJSEFTSENMQVNIX1NIQTFDT01QUkVTU19ST1VORDRfU1RFUChiLCBjLCBkLCBlLCBhLCBXLCA2NCk7CisJSEFTSENMQVNIX1NIQTFDT01QUkVTU19ST1VORDRfU1RFUChhLCBiLCBjLCBkLCBlLCBXLCA2NSk7CisJSEFTSENMQVNIX1NIQTFDT01QUkVTU19ST1VORDRfU1RFUChlLCBhLCBiLCBjLCBkLCBXLCA2Nik7CisJSEFTSENMQVNIX1NIQTFDT01QUkVTU19ST1VORDRfU1RFUChkLCBlLCBhLCBiLCBjLCBXLCA2Nyk7CisJSEFTSENMQVNIX1NIQTFDT01QUkVTU19ST1VORDRfU1RFUChjLCBkLCBlLCBhLCBiLCBXLCA2OCk7CisJSEFTSENMQVNIX1NIQTFDT01QUkVTU19ST1VORDRfU1RFUChiLCBjLCBkLCBlLCBhLCBXLCA2OSk7CisJSEFTSENMQVNIX1NIQTFDT01QUkVTU19ST1VORDRfU1RFUChhLCBiLCBjLCBkLCBlLCBXLCA3MCk7CisJSEFTSENMQVNIX1NIQTFDT01QUkVTU19ST1VORDRfU1RFUChlLCBhLCBiLCBjLCBkLCBXLCA3MSk7CisJSEFTSENMQVNIX1NIQTFDT01QUkVTU19ST1VORDRfU1RFUChkLCBlLCBhLCBiLCBjLCBXLCA3Mik7CisJSEFTSENMQVNIX1NIQTFDT01QUkVTU19ST1VORDRfU1RFUChjLCBkLCBlLCBhLCBiLCBXLCA3Myk7CisJSEFTSENMQVNIX1NIQTFDT01QUkVTU19ST1VORDRfU1RFUChiLCBjLCBkLCBlLCBhLCBXLCA3NCk7CisJSEFTSENMQVNIX1NIQTFDT01QUkVTU19ST1VORDRfU1RFUChhLCBiLCBjLCBkLCBlLCBXLCA3NSk7CisJSEFTSENMQVNIX1NIQTFDT01QUkVTU19ST1VORDRfU1RFUChlLCBhLCBiLCBjLCBkLCBXLCA3Nik7CisJSEFTSENMQVNIX1NIQTFDT01QUkVTU19ST1VORDRfU1RFUChkLCBlLCBhLCBiLCBjLCBXLCA3Nyk7CisJSEFTSENMQVNIX1NIQTFDT01QUkVTU19ST1VORDRfU1RFUChjLCBkLCBlLCBhLCBiLCBXLCA3OCk7CisJSEFTSENMQVNIX1NIQTFDT01QUkVTU19ST1VORDRfU1RFUChiLCBjLCBkLCBlLCBhLCBXLCA3OSk7CisKKwlpaHZbMF0gKz0gYTsgaWh2WzFdICs9IGI7IGlodlsyXSArPSBjOyBpaHZbM10gKz0gZDsgaWh2WzRdICs9IGU7Cit9CisjZW5kaWYgLypCVUlMRE5PQ09MTERFVEVDVFNIQTFDT01QUkVTU0lPTiovCisKKworc3RhdGljIHZvaWQgc2hhMV9jb21wcmVzc2lvbl9XKHVpbnQzMl90IGlodls1XSwgY29uc3QgdWludDMyX3QgV1s4MF0pCit7CisJdWludDMyX3QgYSA9IGlodlswXSwgYiA9IGlodlsxXSwgYyA9IGlodlsyXSwgZCA9IGlodlszXSwgZSA9IGlodls0XTsKKworCUhBU0hDTEFTSF9TSEExQ09NUFJFU1NfUk9VTkQxX1NURVAoYSwgYiwgYywgZCwgZSwgVywgMCk7CisJSEFTSENMQVNIX1NIQTFDT01QUkVTU19ST1VORDFfU1RFUChlLCBhLCBiLCBjLCBkLCBXLCAxKTsKKwlIQVNIQ0xBU0hfU0hBMUNPTVBSRVNTX1JPVU5EMV9TVEVQKGQsIGUsIGEsIGIsIGMsIFcsIDIpOworCUhBU0hDTEFTSF9TSEExQ09NUFJFU1NfUk9VTkQxX1NURVAoYywgZCwgZSwgYSwgYiwgVywgMyk7CisJSEFTSENMQVNIX1NIQTFDT01QUkVTU19ST1VORDFfU1RFUChiLCBjLCBkLCBlLCBhLCBXLCA0KTsKKwlIQVNIQ0xBU0hfU0hBMUNPTVBSRVNTX1JPVU5EMV9TVEVQKGEsIGIsIGMsIGQsIGUsIFcsIDUpOworCUhBU0hDTEFTSF9TSEExQ09NUFJFU1NfUk9VTkQxX1NURVAoZSwgYSwgYiwgYywgZCwgVywgNik7CisJSEFTSENMQVNIX1NIQTFDT01QUkVTU19ST1VORDFfU1RFUChkLCBlLCBhLCBiLCBjLCBXLCA3KTsKKwlIQVNIQ0xBU0hfU0hBMUNPTVBSRVNTX1JPVU5EMV9TVEVQKGMsIGQsIGUsIGEsIGIsIFcsIDgpOworCUhBU0hDTEFTSF9TSEExQ09NUFJFU1NfUk9VTkQxX1NURVAoYiwgYywgZCwgZSwgYSwgVywgOSk7CisJSEFTSENMQVNIX1NIQTFDT01QUkVTU19ST1VORDFfU1RFUChhLCBiLCBjLCBkLCBlLCBXLCAxMCk7CisJSEFTSENMQVNIX1NIQTFDT01QUkVTU19ST1VORDFfU1RFUChlLCBhLCBiLCBjLCBkLCBXLCAxMSk7CisJSEFTSENMQVNIX1NIQTFDT01QUkVTU19ST1VORDFfU1RFUChkLCBlLCBhLCBiLCBjLCBXLCAxMik7CisJSEFTSENMQVNIX1NIQTFDT01QUkVTU19ST1VORDFfU1RFUChjLCBkLCBlLCBhLCBiLCBXLCAxMyk7CisJSEFTSENMQVNIX1NIQTFDT01QUkVTU19ST1VORDFfU1RFUChiLCBjLCBkLCBlLCBhLCBXLCAxNCk7CisJSEFTSENMQVNIX1NIQTFDT01QUkVTU19ST1VORDFfU1RFUChhLCBiLCBjLCBkLCBlLCBXLCAxNSk7CisJSEFTSENMQVNIX1NIQTFDT01QUkVTU19ST1VORDFfU1RFUChlLCBhLCBiLCBjLCBkLCBXLCAxNik7CisJSEFTSENMQVNIX1NIQTFDT01QUkVTU19ST1VORDFfU1RFUChkLCBlLCBhLCBiLCBjLCBXLCAxNyk7CisJSEFTSENMQVNIX1NIQTFDT01QUkVTU19ST1VORDFfU1RFUChjLCBkLCBlLCBhLCBiLCBXLCAxOCk7CisJSEFTSENMQVNIX1NIQTFDT01QUkVTU19ST1VORDFfU1RFUChiLCBjLCBkLCBlLCBhLCBXLCAxOSk7CisKKwlIQVNIQ0xBU0hfU0hBMUNPTVBSRVNTX1JPVU5EMl9TVEVQKGEsIGIsIGMsIGQsIGUsIFcsIDIwKTsKKwlIQVNIQ0xBU0hfU0hBMUNPTVBSRVNTX1JPVU5EMl9TVEVQKGUsIGEsIGIsIGMsIGQsIFcsIDIxKTsKKwlIQVNIQ0xBU0hfU0hBMUNPTVBSRVNTX1JPVU5EMl9TVEVQKGQsIGUsIGEsIGIsIGMsIFcsIDIyKTsKKwlIQVNIQ0xBU0hfU0hBMUNPTVBSRVNTX1JPVU5EMl9TVEVQKGMsIGQsIGUsIGEsIGIsIFcsIDIzKTsKKwlIQVNIQ0xBU0hfU0hBMUNPTVBSRVNTX1JPVU5EMl9TVEVQKGIsIGMsIGQsIGUsIGEsIFcsIDI0KTsKKwlIQVNIQ0xBU0hfU0hBMUNPTVBSRVNTX1JPVU5EMl9TVEVQKGEsIGIsIGMsIGQsIGUsIFcsIDI1KTsKKwlIQVNIQ0xBU0hfU0hBMUNPTVBSRVNTX1JPVU5EMl9TVEVQKGUsIGEsIGIsIGMsIGQsIFcsIDI2KTsKKwlIQVNIQ0xBU0hfU0hBMUNPTVBSRVNTX1JPVU5EMl9TVEVQKGQsIGUsIGEsIGIsIGMsIFcsIDI3KTsKKwlIQVNIQ0xBU0hfU0hBMUNPTVBSRVNTX1JPVU5EMl9TVEVQKGMsIGQsIGUsIGEsIGIsIFcsIDI4KTsKKwlIQVNIQ0xBU0hfU0hBMUNPTVBSRVNTX1JPVU5EMl9TVEVQKGIsIGMsIGQsIGUsIGEsIFcsIDI5KTsKKwlIQVNIQ0xBU0hfU0hBMUNPTVBSRVNTX1JPVU5EMl9TVEVQKGEsIGIsIGMsIGQsIGUsIFcsIDMwKTsKKwlIQVNIQ0xBU0hfU0hBMUNPTVBSRVNTX1JPVU5EMl9TVEVQKGUsIGEsIGIsIGMsIGQsIFcsIDMxKTsKKwlIQVNIQ0xBU0hfU0hBMUNPTVBSRVNTX1JPVU5EMl9TVEVQKGQsIGUsIGEsIGIsIGMsIFcsIDMyKTsKKwlIQVNIQ0xBU0hfU0hBMUNPTVBSRVNTX1JPVU5EMl9TVEVQKGMsIGQsIGUsIGEsIGIsIFcsIDMzKTsKKwlIQVNIQ0xBU0hfU0hBMUNPTVBSRVNTX1JPVU5EMl9TVEVQKGIsIGMsIGQsIGUsIGEsIFcsIDM0KTsKKwlIQVNIQ0xBU0hfU0hBMUNPTVBSRVNTX1JPVU5EMl9TVEVQKGEsIGIsIGMsIGQsIGUsIFcsIDM1KTsKKwlIQVNIQ0xBU0hfU0hBMUNPTVBSRVNTX1JPVU5EMl9TVEVQKGUsIGEsIGIsIGMsIGQsIFcsIDM2KTsKKwlIQVNIQ0xBU0hfU0hBMUNPTVBSRVNTX1JPVU5EMl9TVEVQKGQsIGUsIGEsIGIsIGMsIFcsIDM3KTsKKwlIQVNIQ0xBU0hfU0hBMUNPTVBSRVNTX1JPVU5EMl9TVEVQKGMsIGQsIGUsIGEsIGIsIFcsIDM4KTsKKwlIQVNIQ0xBU0hfU0hBMUNPTVBSRVNTX1JPVU5EMl9TVEVQKGIsIGMsIGQsIGUsIGEsIFcsIDM5KTsKKworCUhBU0hDTEFTSF9TSEExQ09NUFJFU1NfUk9VTkQzX1NURVAoYSwgYiwgYywgZCwgZSwgVywgNDApOworCUhBU0hDTEFTSF9TSEExQ09NUFJFU1NfUk9VTkQzX1NURVAoZSwgYSwgYiwgYywgZCwgVywgNDEpOworCUhBU0hDTEFTSF9TSEExQ09NUFJFU1NfUk9VTkQzX1NURVAoZCwgZSwgYSwgYiwgYywgVywgNDIpOworCUhBU0hDTEFTSF9TSEExQ09NUFJFU1NfUk9VTkQzX1NURVAoYywgZCwgZSwgYSwgYiwgVywgNDMpOworCUhBU0hDTEFTSF9TSEExQ09NUFJFU1NfUk9VTkQzX1NURVAoYiwgYywgZCwgZSwgYSwgVywgNDQpOworCUhBU0hDTEFTSF9TSEExQ09NUFJFU1NfUk9VTkQzX1NURVAoYSwgYiwgYywgZCwgZSwgVywgNDUpOworCUhBU0hDTEFTSF9TSEExQ09NUFJFU1NfUk9VTkQzX1NURVAoZSwgYSwgYiwgYywgZCwgVywgNDYpOworCUhBU0hDTEFTSF9TSEExQ09NUFJFU1NfUk9VTkQzX1NURVAoZCwgZSwgYSwgYiwgYywgVywgNDcpOworCUhBU0hDTEFTSF9TSEExQ09NUFJFU1NfUk9VTkQzX1NURVAoYywgZCwgZSwgYSwgYiwgVywgNDgpOworCUhBU0hDTEFTSF9TSEExQ09NUFJFU1NfUk9VTkQzX1NURVAoYiwgYywgZCwgZSwgYSwgVywgNDkpOworCUhBU0hDTEFTSF9TSEExQ09NUFJFU1NfUk9VTkQzX1NURVAoYSwgYiwgYywgZCwgZSwgVywgNTApOworCUhBU0hDTEFTSF9TSEExQ09NUFJFU1NfUk9VTkQzX1NURVAoZSwgYSwgYiwgYywgZCwgVywgNTEpOworCUhBU0hDTEFTSF9TSEExQ09NUFJFU1NfUk9VTkQzX1NURVAoZCwgZSwgYSwgYiwgYywgVywgNTIpOworCUhBU0hDTEFTSF9TSEExQ09NUFJFU1NfUk9VTkQzX1NURVAoYywgZCwgZSwgYSwgYiwgVywgNTMpOworCUhBU0hDTEFTSF9TSEExQ09NUFJFU1NfUk9VTkQzX1NURVAoYiwgYywgZCwgZSwgYSwgVywgNTQpOworCUhBU0hDTEFTSF9TSEExQ09NUFJFU1NfUk9VTkQzX1NURVAoYSwgYiwgYywgZCwgZSwgVywgNTUpOworCUhBU0hDTEFTSF9TSEExQ09NUFJFU1NfUk9VTkQzX1NURVAoZSwgYSwgYiwgYywgZCwgVywgNTYpOworCUhBU0hDTEFTSF9TSEExQ09NUFJFU1NfUk9VTkQzX1NURVAoZCwgZSwgYSwgYiwgYywgVywgNTcpOworCUhBU0hDTEFTSF9TSEExQ09NUFJFU1NfUk9VTkQzX1NURVAoYywgZCwgZSwgYSwgYiwgVywgNTgpOworCUhBU0hDTEFTSF9TSEExQ09NUFJFU1NfUk9VTkQzX1NURVAoYiwgYywgZCwgZSwgYSwgVywgNTkpOworCisJSEFTSENMQVNIX1NIQTFDT01QUkVTU19ST1VORDRfU1RFUChhLCBiLCBjLCBkLCBlLCBXLCA2MCk7CisJSEFTSENMQVNIX1NIQTFDT01QUkVTU19ST1VORDRfU1RFUChlLCBhLCBiLCBjLCBkLCBXLCA2MSk7CisJSEFTSENMQVNIX1NIQTFDT01QUkVTU19ST1VORDRfU1RFUChkLCBlLCBhLCBiLCBjLCBXLCA2Mik7CisJSEFTSENMQVNIX1NIQTFDT01QUkVTU19ST1VORDRfU1RFUChjLCBkLCBlLCBhLCBiLCBXLCA2Myk7CisJSEFTSENMQVNIX1NIQTFDT01QUkVTU19ST1VORDRfU1RFUChiLCBjLCBkLCBlLCBhLCBXLCA2NCk7CisJSEFTSENMQVNIX1NIQTFDT01QUkVTU19ST1VORDRfU1RFUChhLCBiLCBjLCBkLCBlLCBXLCA2NSk7CisJSEFTSENMQVNIX1NIQTFDT01QUkVTU19ST1VORDRfU1RFUChlLCBhLCBiLCBjLCBkLCBXLCA2Nik7CisJSEFTSENMQVNIX1NIQTFDT01QUkVTU19ST1VORDRfU1RFUChkLCBlLCBhLCBiLCBjLCBXLCA2Nyk7CisJSEFTSENMQVNIX1NIQTFDT01QUkVTU19ST1VORDRfU1RFUChjLCBkLCBlLCBhLCBiLCBXLCA2OCk7CisJSEFTSENMQVNIX1NIQTFDT01QUkVTU19ST1VORDRfU1RFUChiLCBjLCBkLCBlLCBhLCBXLCA2OSk7CisJSEFTSENMQVNIX1NIQTFDT01QUkVTU19ST1VORDRfU1RFUChhLCBiLCBjLCBkLCBlLCBXLCA3MCk7CisJSEFTSENMQVNIX1NIQTFDT01QUkVTU19ST1VORDRfU1RFUChlLCBhLCBiLCBjLCBkLCBXLCA3MSk7CisJSEFTSENMQVNIX1NIQTFDT01QUkVTU19ST1VORDRfU1RFUChkLCBlLCBhLCBiLCBjLCBXLCA3Mik7CisJSEFTSENMQVNIX1NIQTFDT01QUkVTU19ST1VORDRfU1RFUChjLCBkLCBlLCBhLCBiLCBXLCA3Myk7CisJSEFTSENMQVNIX1NIQTFDT01QUkVTU19ST1VORDRfU1RFUChiLCBjLCBkLCBlLCBhLCBXLCA3NCk7CisJSEFTSENMQVNIX1NIQTFDT01QUkVTU19ST1VORDRfU1RFUChhLCBiLCBjLCBkLCBlLCBXLCA3NSk7CisJSEFTSENMQVNIX1NIQTFDT01QUkVTU19ST1VORDRfU1RFUChlLCBhLCBiLCBjLCBkLCBXLCA3Nik7CisJSEFTSENMQVNIX1NIQTFDT01QUkVTU19ST1VORDRfU1RFUChkLCBlLCBhLCBiLCBjLCBXLCA3Nyk7CisJSEFTSENMQVNIX1NIQTFDT01QUkVTU19ST1VORDRfU1RFUChjLCBkLCBlLCBhLCBiLCBXLCA3OCk7CisJSEFTSENMQVNIX1NIQTFDT01QUkVTU19ST1VORDRfU1RFUChiLCBjLCBkLCBlLCBhLCBXLCA3OSk7CisKKwlpaHZbMF0gKz0gYTsgaWh2WzFdICs9IGI7IGlodlsyXSArPSBjOyBpaHZbM10gKz0gZDsgaWh2WzRdICs9IGU7Cit9CisKKworCit2b2lkIHNoYTFfY29tcHJlc3Npb25fc3RhdGVzKHVpbnQzMl90IGlodls1XSwgY29uc3QgdWludDMyX3QgbVsxNl0sIHVpbnQzMl90IFdbODBdLCB1aW50MzJfdCBzdGF0ZXNbODBdWzVdKQoreworCXVpbnQzMl90IGEgPSBpaHZbMF0sIGIgPSBpaHZbMV0sIGMgPSBpaHZbMl0sIGQgPSBpaHZbM10sIGUgPSBpaHZbNF07CisJdWludDMyX3QgdGVtcDsKKworI2lmZGVmIERPU1RPUkVTVEFURTAwCisJU0hBMV9TVE9SRV9TVEFURSgwKQorI2VuZGlmCisJU0hBMUNPTVBSRVNTX0ZVTExfUk9VTkQxX1NURVBfTE9BRChhLCBiLCBjLCBkLCBlLCBtLCBXLCAwLCB0ZW1wKTsKKworI2lmZGVmIERPU1RPUkVTVEFURTAxCisJU0hBMV9TVE9SRV9TVEFURSgxKQorI2VuZGlmCisJU0hBMUNPTVBSRVNTX0ZVTExfUk9VTkQxX1NURVBfTE9BRChlLCBhLCBiLCBjLCBkLCBtLCBXLCAxLCB0ZW1wKTsKKworI2lmZGVmIERPU1RPUkVTVEFURTAyCisJU0hBMV9TVE9SRV9TVEFURSgyKQorI2VuZGlmCisJU0hBMUNPTVBSRVNTX0ZVTExfUk9VTkQxX1NURVBfTE9BRChkLCBlLCBhLCBiLCBjLCBtLCBXLCAyLCB0ZW1wKTsKKworI2lmZGVmIERPU1RPUkVTVEFURTAzCisJU0hBMV9TVE9SRV9TVEFURSgzKQorI2VuZGlmCisJU0hBMUNPTVBSRVNTX0ZVTExfUk9VTkQxX1NURVBfTE9BRChjLCBkLCBlLCBhLCBiLCBtLCBXLCAzLCB0ZW1wKTsKKworI2lmZGVmIERPU1RPUkVTVEFURTA0CisJU0hBMV9TVE9SRV9TVEFURSg0KQorI2VuZGlmCisJU0hBMUNPTVBSRVNTX0ZVTExfUk9VTkQxX1NURVBfTE9BRChiLCBjLCBkLCBlLCBhLCBtLCBXLCA0LCB0ZW1wKTsKKworI2lmZGVmIERPU1RPUkVTVEFURTA1CisJU0hBMV9TVE9SRV9TVEFURSg1KQorI2VuZGlmCisJU0hBMUNPTVBSRVNTX0ZVTExfUk9VTkQxX1NURVBfTE9BRChhLCBiLCBjLCBkLCBlLCBtLCBXLCA1LCB0ZW1wKTsKKworI2lmZGVmIERPU1RPUkVTVEFURTA2CisJU0hBMV9TVE9SRV9TVEFURSg2KQorI2VuZGlmCisJU0hBMUNPTVBSRVNTX0ZVTExfUk9VTkQxX1NURVBfTE9BRChlLCBhLCBiLCBjLCBkLCBtLCBXLCA2LCB0ZW1wKTsKKworI2lmZGVmIERPU1RPUkVTVEFURTA3CisJU0hBMV9TVE9SRV9TVEFURSg3KQorI2VuZGlmCisJU0hBMUNPTVBSRVNTX0ZVTExfUk9VTkQxX1NURVBfTE9BRChkLCBlLCBhLCBiLCBjLCBtLCBXLCA3LCB0ZW1wKTsKKworI2lmZGVmIERPU1RPUkVTVEFURTA4CisJU0hBMV9TVE9SRV9TVEFURSg4KQorI2VuZGlmCisJU0hBMUNPTVBSRVNTX0ZVTExfUk9VTkQxX1NURVBfTE9BRChjLCBkLCBlLCBhLCBiLCBtLCBXLCA4LCB0ZW1wKTsKKworI2lmZGVmIERPU1RPUkVTVEFURTA5CisJU0hBMV9TVE9SRV9TVEFURSg5KQorI2VuZGlmCisJU0hBMUNPTVBSRVNTX0ZVTExfUk9VTkQxX1NURVBfTE9BRChiLCBjLCBkLCBlLCBhLCBtLCBXLCA5LCB0ZW1wKTsKKworI2lmZGVmIERPU1RPUkVTVEFURTEwCisJU0hBMV9TVE9SRV9TVEFURSgxMCkKKyNlbmRpZgorCVNIQTFDT01QUkVTU19GVUxMX1JPVU5EMV9TVEVQX0xPQUQoYSwgYiwgYywgZCwgZSwgbSwgVywgMTAsIHRlbXApOworCisjaWZkZWYgRE9TVE9SRVNUQVRFMTEKKwlTSEExX1NUT1JFX1NUQVRFKDExKQorI2VuZGlmCisJU0hBMUNPTVBSRVNTX0ZVTExfUk9VTkQxX1NURVBfTE9BRChlLCBhLCBiLCBjLCBkLCBtLCBXLCAxMSwgdGVtcCk7CisKKyNpZmRlZiBET1NUT1JFU1RBVEUxMgorCVNIQTFfU1RPUkVfU1RBVEUoMTIpCisjZW5kaWYKKwlTSEExQ09NUFJFU1NfRlVMTF9ST1VORDFfU1RFUF9MT0FEKGQsIGUsIGEsIGIsIGMsIG0sIFcsIDEyLCB0ZW1wKTsKKworI2lmZGVmIERPU1RPUkVTVEFURTEzCisJU0hBMV9TVE9SRV9TVEFURSgxMykKKyNlbmRpZgorCVNIQTFDT01QUkVTU19GVUxMX1JPVU5EMV9TVEVQX0xPQUQoYywgZCwgZSwgYSwgYiwgbSwgVywgMTMsIHRlbXApOworCisjaWZkZWYgRE9TVE9SRVNUQVRFMTQKKwlTSEExX1NUT1JFX1NUQVRFKDE0KQorI2VuZGlmCisJU0hBMUNPTVBSRVNTX0ZVTExfUk9VTkQxX1NURVBfTE9BRChiLCBjLCBkLCBlLCBhLCBtLCBXLCAxNCwgdGVtcCk7CisKKyNpZmRlZiBET1NUT1JFU1RBVEUxNQorCVNIQTFfU1RPUkVfU1RBVEUoMTUpCisjZW5kaWYKKwlTSEExQ09NUFJFU1NfRlVMTF9ST1VORDFfU1RFUF9MT0FEKGEsIGIsIGMsIGQsIGUsIG0sIFcsIDE1LCB0ZW1wKTsKKworI2lmZGVmIERPU1RPUkVTVEFURTE2CisJU0hBMV9TVE9SRV9TVEFURSgxNikKKyNlbmRpZgorCVNIQTFDT01QUkVTU19GVUxMX1JPVU5EMV9TVEVQX0VYUEFORChlLCBhLCBiLCBjLCBkLCBXLCAxNiwgdGVtcCk7CisKKyNpZmRlZiBET1NUT1JFU1RBVEUxNworCVNIQTFfU1RPUkVfU1RBVEUoMTcpCisjZW5kaWYKKwlTSEExQ09NUFJFU1NfRlVMTF9ST1VORDFfU1RFUF9FWFBBTkQoZCwgZSwgYSwgYiwgYywgVywgMTcsIHRlbXApOworCisjaWZkZWYgRE9TVE9SRVNUQVRFMTgKKwlTSEExX1NUT1JFX1NUQVRFKDE4KQorI2VuZGlmCisJU0hBMUNPTVBSRVNTX0ZVTExfUk9VTkQxX1NURVBfRVhQQU5EKGMsIGQsIGUsIGEsIGIsIFcsIDE4LCB0ZW1wKTsKKworI2lmZGVmIERPU1RPUkVTVEFURTE5CisJU0hBMV9TVE9SRV9TVEFURSgxOSkKKyNlbmRpZgorCVNIQTFDT01QUkVTU19GVUxMX1JPVU5EMV9TVEVQX0VYUEFORChiLCBjLCBkLCBlLCBhLCBXLCAxOSwgdGVtcCk7CisKKworCisjaWZkZWYgRE9TVE9SRVNUQVRFMjAKKwlTSEExX1NUT1JFX1NUQVRFKDIwKQorI2VuZGlmCisJU0hBMUNPTVBSRVNTX0ZVTExfUk9VTkQyX1NURVAoYSwgYiwgYywgZCwgZSwgVywgMjAsIHRlbXApOworCisjaWZkZWYgRE9TVE9SRVNUQVRFMjEKKwlTSEExX1NUT1JFX1NUQVRFKDIxKQorI2VuZGlmCisJU0hBMUNPTVBSRVNTX0ZVTExfUk9VTkQyX1NURVAoZSwgYSwgYiwgYywgZCwgVywgMjEsIHRlbXApOworCisjaWZkZWYgRE9TVE9SRVNUQVRFMjIKKwlTSEExX1NUT1JFX1NUQVRFKDIyKQorI2VuZGlmCisJU0hBMUNPTVBSRVNTX0ZVTExfUk9VTkQyX1NURVAoZCwgZSwgYSwgYiwgYywgVywgMjIsIHRlbXApOworCisjaWZkZWYgRE9TVE9SRVNUQVRFMjMKKwlTSEExX1NUT1JFX1NUQVRFKDIzKQorI2VuZGlmCisJU0hBMUNPTVBSRVNTX0ZVTExfUk9VTkQyX1NURVAoYywgZCwgZSwgYSwgYiwgVywgMjMsIHRlbXApOworCisjaWZkZWYgRE9TVE9SRVNUQVRFMjQKKwlTSEExX1NUT1JFX1NUQVRFKDI0KQorI2VuZGlmCisJU0hBMUNPTVBSRVNTX0ZVTExfUk9VTkQyX1NURVAoYiwgYywgZCwgZSwgYSwgVywgMjQsIHRlbXApOworCisjaWZkZWYgRE9TVE9SRVNUQVRFMjUKKwlTSEExX1NUT1JFX1NUQVRFKDI1KQorI2VuZGlmCisJU0hBMUNPTVBSRVNTX0ZVTExfUk9VTkQyX1NURVAoYSwgYiwgYywgZCwgZSwgVywgMjUsIHRlbXApOworCisjaWZkZWYgRE9TVE9SRVNUQVRFMjYKKwlTSEExX1NUT1JFX1NUQVRFKDI2KQorI2VuZGlmCisJU0hBMUNPTVBSRVNTX0ZVTExfUk9VTkQyX1NURVAoZSwgYSwgYiwgYywgZCwgVywgMjYsIHRlbXApOworCisjaWZkZWYgRE9TVE9SRVNUQVRFMjcKKwlTSEExX1NUT1JFX1NUQVRFKDI3KQorI2VuZGlmCisJU0hBMUNPTVBSRVNTX0ZVTExfUk9VTkQyX1NURVAoZCwgZSwgYSwgYiwgYywgVywgMjcsIHRlbXApOworCisjaWZkZWYgRE9TVE9SRVNUQVRFMjgKKwlTSEExX1NUT1JFX1NUQVRFKDI4KQorI2VuZGlmCisJU0hBMUNPTVBSRVNTX0ZVTExfUk9VTkQyX1NURVAoYywgZCwgZSwgYSwgYiwgVywgMjgsIHRlbXApOworCisjaWZkZWYgRE9TVE9SRVNUQVRFMjkKKwlTSEExX1NUT1JFX1NUQVRFKDI5KQorI2VuZGlmCisJU0hBMUNPTVBSRVNTX0ZVTExfUk9VTkQyX1NURVAoYiwgYywgZCwgZSwgYSwgVywgMjksIHRlbXApOworCisjaWZkZWYgRE9TVE9SRVNUQVRFMzAKKwlTSEExX1NUT1JFX1NUQVRFKDMwKQorI2VuZGlmCisJU0hBMUNPTVBSRVNTX0ZVTExfUk9VTkQyX1NURVAoYSwgYiwgYywgZCwgZSwgVywgMzAsIHRlbXApOworCisjaWZkZWYgRE9TVE9SRVNUQVRFMzEKKwlTSEExX1NUT1JFX1NUQVRFKDMxKQorI2VuZGlmCisJU0hBMUNPTVBSRVNTX0ZVTExfUk9VTkQyX1NURVAoZSwgYSwgYiwgYywgZCwgVywgMzEsIHRlbXApOworCisjaWZkZWYgRE9TVE9SRVNUQVRFMzIKKwlTSEExX1NUT1JFX1NUQVRFKDMyKQorI2VuZGlmCisJU0hBMUNPTVBSRVNTX0ZVTExfUk9VTkQyX1NURVAoZCwgZSwgYSwgYiwgYywgVywgMzIsIHRlbXApOworCisjaWZkZWYgRE9TVE9SRVNUQVRFMzMKKwlTSEExX1NUT1JFX1NUQVRFKDMzKQorI2VuZGlmCisJU0hBMUNPTVBSRVNTX0ZVTExfUk9VTkQyX1NURVAoYywgZCwgZSwgYSwgYiwgVywgMzMsIHRlbXApOworCisjaWZkZWYgRE9TVE9SRVNUQVRFMzQKKwlTSEExX1NUT1JFX1NUQVRFKDM0KQorI2VuZGlmCisJU0hBMUNPTVBSRVNTX0ZVTExfUk9VTkQyX1NURVAoYiwgYywgZCwgZSwgYSwgVywgMzQsIHRlbXApOworCisjaWZkZWYgRE9TVE9SRVNUQVRFMzUKKwlTSEExX1NUT1JFX1NUQVRFKDM1KQorI2VuZGlmCisJU0hBMUNPTVBSRVNTX0ZVTExfUk9VTkQyX1NURVAoYSwgYiwgYywgZCwgZSwgVywgMzUsIHRlbXApOworCisjaWZkZWYgRE9TVE9SRVNUQVRFMzYKKwlTSEExX1NUT1JFX1NUQVRFKDM2KQorI2VuZGlmCisJU0hBMUNPTVBSRVNTX0ZVTExfUk9VTkQyX1NURVAoZSwgYSwgYiwgYywgZCwgVywgMzYsIHRlbXApOworCisjaWZkZWYgRE9TVE9SRVNUQVRFMzcKKwlTSEExX1NUT1JFX1NUQVRFKDM3KQorI2VuZGlmCisJU0hBMUNPTVBSRVNTX0ZVTExfUk9VTkQyX1NURVAoZCwgZSwgYSwgYiwgYywgVywgMzcsIHRlbXApOworCisjaWZkZWYgRE9TVE9SRVNUQVRFMzgKKwlTSEExX1NUT1JFX1NUQVRFKDM4KQorI2VuZGlmCisJU0hBMUNPTVBSRVNTX0ZVTExfUk9VTkQyX1NURVAoYywgZCwgZSwgYSwgYiwgVywgMzgsIHRlbXApOworCisjaWZkZWYgRE9TVE9SRVNUQVRFMzkKKwlTSEExX1NUT1JFX1NUQVRFKDM5KQorI2VuZGlmCisJU0hBMUNPTVBSRVNTX0ZVTExfUk9VTkQyX1NURVAoYiwgYywgZCwgZSwgYSwgVywgMzksIHRlbXApOworCisKKworI2lmZGVmIERPU1RPUkVTVEFURTQwCisJU0hBMV9TVE9SRV9TVEFURSg0MCkKKyNlbmRpZgorCVNIQTFDT01QUkVTU19GVUxMX1JPVU5EM19TVEVQKGEsIGIsIGMsIGQsIGUsIFcsIDQwLCB0ZW1wKTsKKworI2lmZGVmIERPU1RPUkVTVEFURTQxCisJU0hBMV9TVE9SRV9TVEFURSg0MSkKKyNlbmRpZgorCVNIQTFDT01QUkVTU19GVUxMX1JPVU5EM19TVEVQKGUsIGEsIGIsIGMsIGQsIFcsIDQxLCB0ZW1wKTsKKworI2lmZGVmIERPU1RPUkVTVEFURTQyCisJU0hBMV9TVE9SRV9TVEFURSg0MikKKyNlbmRpZgorCVNIQTFDT01QUkVTU19GVUxMX1JPVU5EM19TVEVQKGQsIGUsIGEsIGIsIGMsIFcsIDQyLCB0ZW1wKTsKKworI2lmZGVmIERPU1RPUkVTVEFURTQzCisJU0hBMV9TVE9SRV9TVEFURSg0MykKKyNlbmRpZgorCVNIQTFDT01QUkVTU19GVUxMX1JPVU5EM19TVEVQKGMsIGQsIGUsIGEsIGIsIFcsIDQzLCB0ZW1wKTsKKworI2lmZGVmIERPU1RPUkVTVEFURTQ0CisJU0hBMV9TVE9SRV9TVEFURSg0NCkKKyNlbmRpZgorCVNIQTFDT01QUkVTU19GVUxMX1JPVU5EM19TVEVQKGIsIGMsIGQsIGUsIGEsIFcsIDQ0LCB0ZW1wKTsKKworI2lmZGVmIERPU1RPUkVTVEFURTQ1CisJU0hBMV9TVE9SRV9TVEFURSg0NSkKKyNlbmRpZgorCVNIQTFDT01QUkVTU19GVUxMX1JPVU5EM19TVEVQKGEsIGIsIGMsIGQsIGUsIFcsIDQ1LCB0ZW1wKTsKKworI2lmZGVmIERPU1RPUkVTVEFURTQ2CisJU0hBMV9TVE9SRV9TVEFURSg0NikKKyNlbmRpZgorCVNIQTFDT01QUkVTU19GVUxMX1JPVU5EM19TVEVQKGUsIGEsIGIsIGMsIGQsIFcsIDQ2LCB0ZW1wKTsKKworI2lmZGVmIERPU1RPUkVTVEFURTQ3CisJU0hBMV9TVE9SRV9TVEFURSg0NykKKyNlbmRpZgorCVNIQTFDT01QUkVTU19GVUxMX1JPVU5EM19TVEVQKGQsIGUsIGEsIGIsIGMsIFcsIDQ3LCB0ZW1wKTsKKworI2lmZGVmIERPU1RPUkVTVEFURTQ4CisJU0hBMV9TVE9SRV9TVEFURSg0OCkKKyNlbmRpZgorCVNIQTFDT01QUkVTU19GVUxMX1JPVU5EM19TVEVQKGMsIGQsIGUsIGEsIGIsIFcsIDQ4LCB0ZW1wKTsKKworI2lmZGVmIERPU1RPUkVTVEFURTQ5CisJU0hBMV9TVE9SRV9TVEFURSg0OSkKKyNlbmRpZgorCVNIQTFDT01QUkVTU19GVUxMX1JPVU5EM19TVEVQKGIsIGMsIGQsIGUsIGEsIFcsIDQ5LCB0ZW1wKTsKKworI2lmZGVmIERPU1RPUkVTVEFURTUwCisJU0hBMV9TVE9SRV9TVEFURSg1MCkKKyNlbmRpZgorCVNIQTFDT01QUkVTU19GVUxMX1JPVU5EM19TVEVQKGEsIGIsIGMsIGQsIGUsIFcsIDUwLCB0ZW1wKTsKKworI2lmZGVmIERPU1RPUkVTVEFURTUxCisJU0hBMV9TVE9SRV9TVEFURSg1MSkKKyNlbmRpZgorCVNIQTFDT01QUkVTU19GVUxMX1JPVU5EM19TVEVQKGUsIGEsIGIsIGMsIGQsIFcsIDUxLCB0ZW1wKTsKKworI2lmZGVmIERPU1RPUkVTVEFURTUyCisJU0hBMV9TVE9SRV9TVEFURSg1MikKKyNlbmRpZgorCVNIQTFDT01QUkVTU19GVUxMX1JPVU5EM19TVEVQKGQsIGUsIGEsIGIsIGMsIFcsIDUyLCB0ZW1wKTsKKworI2lmZGVmIERPU1RPUkVTVEFURTUzCisJU0hBMV9TVE9SRV9TVEFURSg1MykKKyNlbmRpZgorCVNIQTFDT01QUkVTU19GVUxMX1JPVU5EM19TVEVQKGMsIGQsIGUsIGEsIGIsIFcsIDUzLCB0ZW1wKTsKKworI2lmZGVmIERPU1RPUkVTVEFURTU0CisJU0hBMV9TVE9SRV9TVEFURSg1NCkKKyNlbmRpZgorCVNIQTFDT01QUkVTU19GVUxMX1JPVU5EM19TVEVQKGIsIGMsIGQsIGUsIGEsIFcsIDU0LCB0ZW1wKTsKKworI2lmZGVmIERPU1RPUkVTVEFURTU1CisJU0hBMV9TVE9SRV9TVEFURSg1NSkKKyNlbmRpZgorCVNIQTFDT01QUkVTU19GVUxMX1JPVU5EM19TVEVQKGEsIGIsIGMsIGQsIGUsIFcsIDU1LCB0ZW1wKTsKKworI2lmZGVmIERPU1RPUkVTVEFURTU2CisJU0hBMV9TVE9SRV9TVEFURSg1NikKKyNlbmRpZgorCVNIQTFDT01QUkVTU19GVUxMX1JPVU5EM19TVEVQKGUsIGEsIGIsIGMsIGQsIFcsIDU2LCB0ZW1wKTsKKworI2lmZGVmIERPU1RPUkVTVEFURTU3CisJU0hBMV9TVE9SRV9TVEFURSg1NykKKyNlbmRpZgorCVNIQTFDT01QUkVTU19GVUxMX1JPVU5EM19TVEVQKGQsIGUsIGEsIGIsIGMsIFcsIDU3LCB0ZW1wKTsKKworI2lmZGVmIERPU1RPUkVTVEFURTU4CisJU0hBMV9TVE9SRV9TVEFURSg1OCkKKyNlbmRpZgorCVNIQTFDT01QUkVTU19GVUxMX1JPVU5EM19TVEVQKGMsIGQsIGUsIGEsIGIsIFcsIDU4LCB0ZW1wKTsKKworI2lmZGVmIERPU1RPUkVTVEFURTU5CisJU0hBMV9TVE9SRV9TVEFURSg1OSkKKyNlbmRpZgorCVNIQTFDT01QUkVTU19GVUxMX1JPVU5EM19TVEVQKGIsIGMsIGQsIGUsIGEsIFcsIDU5LCB0ZW1wKTsKKworCisKKworI2lmZGVmIERPU1RPUkVTVEFURTYwCisJU0hBMV9TVE9SRV9TVEFURSg2MCkKKyNlbmRpZgorCVNIQTFDT01QUkVTU19GVUxMX1JPVU5ENF9TVEVQKGEsIGIsIGMsIGQsIGUsIFcsIDYwLCB0ZW1wKTsKKworI2lmZGVmIERPU1RPUkVTVEFURTYxCisJU0hBMV9TVE9SRV9TVEFURSg2MSkKKyNlbmRpZgorCVNIQTFDT01QUkVTU19GVUxMX1JPVU5ENF9TVEVQKGUsIGEsIGIsIGMsIGQsIFcsIDYxLCB0ZW1wKTsKKworI2lmZGVmIERPU1RPUkVTVEFURTYyCisJU0hBMV9TVE9SRV9TVEFURSg2MikKKyNlbmRpZgorCVNIQTFDT01QUkVTU19GVUxMX1JPVU5ENF9TVEVQKGQsIGUsIGEsIGIsIGMsIFcsIDYyLCB0ZW1wKTsKKworI2lmZGVmIERPU1RPUkVTVEFURTYzCisJU0hBMV9TVE9SRV9TVEFURSg2MykKKyNlbmRpZgorCVNIQTFDT01QUkVTU19GVUxMX1JPVU5ENF9TVEVQKGMsIGQsIGUsIGEsIGIsIFcsIDYzLCB0ZW1wKTsKKworI2lmZGVmIERPU1RPUkVTVEFURTY0CisJU0hBMV9TVE9SRV9TVEFURSg2NCkKKyNlbmRpZgorCVNIQTFDT01QUkVTU19GVUxMX1JPVU5ENF9TVEVQKGIsIGMsIGQsIGUsIGEsIFcsIDY0LCB0ZW1wKTsKKworI2lmZGVmIERPU1RPUkVTVEFURTY1CisJU0hBMV9TVE9SRV9TVEFURSg2NSkKKyNlbmRpZgorCVNIQTFDT01QUkVTU19GVUxMX1JPVU5ENF9TVEVQKGEsIGIsIGMsIGQsIGUsIFcsIDY1LCB0ZW1wKTsKKworI2lmZGVmIERPU1RPUkVTVEFURTY2CisJU0hBMV9TVE9SRV9TVEFURSg2NikKKyNlbmRpZgorCVNIQTFDT01QUkVTU19GVUxMX1JPVU5ENF9TVEVQKGUsIGEsIGIsIGMsIGQsIFcsIDY2LCB0ZW1wKTsKKworI2lmZGVmIERPU1RPUkVTVEFURTY3CisJU0hBMV9TVE9SRV9TVEFURSg2NykKKyNlbmRpZgorCVNIQTFDT01QUkVTU19GVUxMX1JPVU5ENF9TVEVQKGQsIGUsIGEsIGIsIGMsIFcsIDY3LCB0ZW1wKTsKKworI2lmZGVmIERPU1RPUkVTVEFURTY4CisJU0hBMV9TVE9SRV9TVEFURSg2OCkKKyNlbmRpZgorCVNIQTFDT01QUkVTU19GVUxMX1JPVU5ENF9TVEVQKGMsIGQsIGUsIGEsIGIsIFcsIDY4LCB0ZW1wKTsKKworI2lmZGVmIERPU1RPUkVTVEFURTY5CisJU0hBMV9TVE9SRV9TVEFURSg2OSkKKyNlbmRpZgorCVNIQTFDT01QUkVTU19GVUxMX1JPVU5ENF9TVEVQKGIsIGMsIGQsIGUsIGEsIFcsIDY5LCB0ZW1wKTsKKworI2lmZGVmIERPU1RPUkVTVEFURTcwCisJU0hBMV9TVE9SRV9TVEFURSg3MCkKKyNlbmRpZgorCVNIQTFDT01QUkVTU19GVUxMX1JPVU5ENF9TVEVQKGEsIGIsIGMsIGQsIGUsIFcsIDcwLCB0ZW1wKTsKKworI2lmZGVmIERPU1RPUkVTVEFURTcxCisJU0hBMV9TVE9SRV9TVEFURSg3MSkKKyNlbmRpZgorCVNIQTFDT01QUkVTU19GVUxMX1JPVU5ENF9TVEVQKGUsIGEsIGIsIGMsIGQsIFcsIDcxLCB0ZW1wKTsKKworI2lmZGVmIERPU1RPUkVTVEFURTcyCisJU0hBMV9TVE9SRV9TVEFURSg3MikKKyNlbmRpZgorCVNIQTFDT01QUkVTU19GVUxMX1JPVU5ENF9TVEVQKGQsIGUsIGEsIGIsIGMsIFcsIDcyLCB0ZW1wKTsKKworI2lmZGVmIERPU1RPUkVTVEFURTczCisJU0hBMV9TVE9SRV9TVEFURSg3MykKKyNlbmRpZgorCVNIQTFDT01QUkVTU19GVUxMX1JPVU5ENF9TVEVQKGMsIGQsIGUsIGEsIGIsIFcsIDczLCB0ZW1wKTsKKworI2lmZGVmIERPU1RPUkVTVEFURTc0CisJU0hBMV9TVE9SRV9TVEFURSg3NCkKKyNlbmRpZgorCVNIQTFDT01QUkVTU19GVUxMX1JPVU5ENF9TVEVQKGIsIGMsIGQsIGUsIGEsIFcsIDc0LCB0ZW1wKTsKKworI2lmZGVmIERPU1RPUkVTVEFURTc1CisJU0hBMV9TVE9SRV9TVEFURSg3NSkKKyNlbmRpZgorCVNIQTFDT01QUkVTU19GVUxMX1JPVU5ENF9TVEVQKGEsIGIsIGMsIGQsIGUsIFcsIDc1LCB0ZW1wKTsKKworI2lmZGVmIERPU1RPUkVTVEFURTc2CisJU0hBMV9TVE9SRV9TVEFURSg3NikKKyNlbmRpZgorCVNIQTFDT01QUkVTU19GVUxMX1JPVU5ENF9TVEVQKGUsIGEsIGIsIGMsIGQsIFcsIDc2LCB0ZW1wKTsKKworI2lmZGVmIERPU1RPUkVTVEFURTc3CisJU0hBMV9TVE9SRV9TVEFURSg3NykKKyNlbmRpZgorCVNIQTFDT01QUkVTU19GVUxMX1JPVU5ENF9TVEVQKGQsIGUsIGEsIGIsIGMsIFcsIDc3LCB0ZW1wKTsKKworI2lmZGVmIERPU1RPUkVTVEFURTc4CisJU0hBMV9TVE9SRV9TVEFURSg3OCkKKyNlbmRpZgorCVNIQTFDT01QUkVTU19GVUxMX1JPVU5ENF9TVEVQKGMsIGQsIGUsIGEsIGIsIFcsIDc4LCB0ZW1wKTsKKworI2lmZGVmIERPU1RPUkVTVEFURTc5CisJU0hBMV9TVE9SRV9TVEFURSg3OSkKKyNlbmRpZgorCVNIQTFDT01QUkVTU19GVUxMX1JPVU5ENF9TVEVQKGIsIGMsIGQsIGUsIGEsIFcsIDc5LCB0ZW1wKTsKKworCisKKwlpaHZbMF0gKz0gYTsgaWh2WzFdICs9IGI7IGlodlsyXSArPSBjOyBpaHZbM10gKz0gZDsgaWh2WzRdICs9IGU7Cit9CisKKworCisKKyNkZWZpbmUgU0hBMV9SRUNPTVBSRVNTKHQpIFwKK3N0YXRpYyB2b2lkIHNoYTFyZWNvbXByZXNzX2Zhc3RfICMjIHQgKHVpbnQzMl90IGlodmluWzVdLCB1aW50MzJfdCBpaHZvdXRbNV0sIGNvbnN0IHVpbnQzMl90IG1lMls4MF0sIGNvbnN0IHVpbnQzMl90IHN0YXRlWzVdKSBcCit7IFwKKwl1aW50MzJfdCBhID0gc3RhdGVbMF0sIGIgPSBzdGF0ZVsxXSwgYyA9IHN0YXRlWzJdLCBkID0gc3RhdGVbM10sIGUgPSBzdGF0ZVs0XTsgXAorCWlmICh0ID4gNzkpIEhBU0hDTEFTSF9TSEExQ09NUFJFU1NfUk9VTkQ0X1NURVBfQlcoYiwgYywgZCwgZSwgYSwgbWUyLCA3OSk7IFwKKwlpZiAodCA+IDc4KSBIQVNIQ0xBU0hfU0hBMUNPTVBSRVNTX1JPVU5ENF9TVEVQX0JXKGMsIGQsIGUsIGEsIGIsIG1lMiwgNzgpOyBcCisJaWYgKHQgPiA3NykgSEFTSENMQVNIX1NIQTFDT01QUkVTU19ST1VORDRfU1RFUF9CVyhkLCBlLCBhLCBiLCBjLCBtZTIsIDc3KTsgXAorCWlmICh0ID4gNzYpIEhBU0hDTEFTSF9TSEExQ09NUFJFU1NfUk9VTkQ0X1NURVBfQlcoZSwgYSwgYiwgYywgZCwgbWUyLCA3Nik7IFwKKwlpZiAodCA+IDc1KSBIQVNIQ0xBU0hfU0hBMUNPTVBSRVNTX1JPVU5ENF9TVEVQX0JXKGEsIGIsIGMsIGQsIGUsIG1lMiwgNzUpOyBcCisJaWYgKHQgPiA3NCkgSEFTSENMQVNIX1NIQTFDT01QUkVTU19ST1VORDRfU1RFUF9CVyhiLCBjLCBkLCBlLCBhLCBtZTIsIDc0KTsgXAorCWlmICh0ID4gNzMpIEhBU0hDTEFTSF9TSEExQ09NUFJFU1NfUk9VTkQ0X1NURVBfQlcoYywgZCwgZSwgYSwgYiwgbWUyLCA3Myk7IFwKKwlpZiAodCA+IDcyKSBIQVNIQ0xBU0hfU0hBMUNPTVBSRVNTX1JPVU5ENF9TVEVQX0JXKGQsIGUsIGEsIGIsIGMsIG1lMiwgNzIpOyBcCisJaWYgKHQgPiA3MSkgSEFTSENMQVNIX1NIQTFDT01QUkVTU19ST1VORDRfU1RFUF9CVyhlLCBhLCBiLCBjLCBkLCBtZTIsIDcxKTsgXAorCWlmICh0ID4gNzApIEhBU0hDTEFTSF9TSEExQ09NUFJFU1NfUk9VTkQ0X1NURVBfQlcoYSwgYiwgYywgZCwgZSwgbWUyLCA3MCk7IFwKKwlpZiAodCA+IDY5KSBIQVNIQ0xBU0hfU0hBMUNPTVBSRVNTX1JPVU5ENF9TVEVQX0JXKGIsIGMsIGQsIGUsIGEsIG1lMiwgNjkpOyBcCisJaWYgKHQgPiA2OCkgSEFTSENMQVNIX1NIQTFDT01QUkVTU19ST1VORDRfU1RFUF9CVyhjLCBkLCBlLCBhLCBiLCBtZTIsIDY4KTsgXAorCWlmICh0ID4gNjcpIEhBU0hDTEFTSF9TSEExQ09NUFJFU1NfUk9VTkQ0X1NURVBfQlcoZCwgZSwgYSwgYiwgYywgbWUyLCA2Nyk7IFwKKwlpZiAodCA+IDY2KSBIQVNIQ0xBU0hfU0hBMUNPTVBSRVNTX1JPVU5ENF9TVEVQX0JXKGUsIGEsIGIsIGMsIGQsIG1lMiwgNjYpOyBcCisJaWYgKHQgPiA2NSkgSEFTSENMQVNIX1NIQTFDT01QUkVTU19ST1VORDRfU1RFUF9CVyhhLCBiLCBjLCBkLCBlLCBtZTIsIDY1KTsgXAorCWlmICh0ID4gNjQpIEhBU0hDTEFTSF9TSEExQ09NUFJFU1NfUk9VTkQ0X1NURVBfQlcoYiwgYywgZCwgZSwgYSwgbWUyLCA2NCk7IFwKKwlpZiAodCA+IDYzKSBIQVNIQ0xBU0hfU0hBMUNPTVBSRVNTX1JPVU5ENF9TVEVQX0JXKGMsIGQsIGUsIGEsIGIsIG1lMiwgNjMpOyBcCisJaWYgKHQgPiA2MikgSEFTSENMQVNIX1NIQTFDT01QUkVTU19ST1VORDRfU1RFUF9CVyhkLCBlLCBhLCBiLCBjLCBtZTIsIDYyKTsgXAorCWlmICh0ID4gNjEpIEhBU0hDTEFTSF9TSEExQ09NUFJFU1NfUk9VTkQ0X1NURVBfQlcoZSwgYSwgYiwgYywgZCwgbWUyLCA2MSk7IFwKKwlpZiAodCA+IDYwKSBIQVNIQ0xBU0hfU0hBMUNPTVBSRVNTX1JPVU5ENF9TVEVQX0JXKGEsIGIsIGMsIGQsIGUsIG1lMiwgNjApOyBcCisJaWYgKHQgPiA1OSkgSEFTSENMQVNIX1NIQTFDT01QUkVTU19ST1VORDNfU1RFUF9CVyhiLCBjLCBkLCBlLCBhLCBtZTIsIDU5KTsgXAorCWlmICh0ID4gNTgpIEhBU0hDTEFTSF9TSEExQ09NUFJFU1NfUk9VTkQzX1NURVBfQlcoYywgZCwgZSwgYSwgYiwgbWUyLCA1OCk7IFwKKwlpZiAodCA+IDU3KSBIQVNIQ0xBU0hfU0hBMUNPTVBSRVNTX1JPVU5EM19TVEVQX0JXKGQsIGUsIGEsIGIsIGMsIG1lMiwgNTcpOyBcCisJaWYgKHQgPiA1NikgSEFTSENMQVNIX1NIQTFDT01QUkVTU19ST1VORDNfU1RFUF9CVyhlLCBhLCBiLCBjLCBkLCBtZTIsIDU2KTsgXAorCWlmICh0ID4gNTUpIEhBU0hDTEFTSF9TSEExQ09NUFJFU1NfUk9VTkQzX1NURVBfQlcoYSwgYiwgYywgZCwgZSwgbWUyLCA1NSk7IFwKKwlpZiAodCA+IDU0KSBIQVNIQ0xBU0hfU0hBMUNPTVBSRVNTX1JPVU5EM19TVEVQX0JXKGIsIGMsIGQsIGUsIGEsIG1lMiwgNTQpOyBcCisJaWYgKHQgPiA1MykgSEFTSENMQVNIX1NIQTFDT01QUkVTU19ST1VORDNfU1RFUF9CVyhjLCBkLCBlLCBhLCBiLCBtZTIsIDUzKTsgXAorCWlmICh0ID4gNTIpIEhBU0hDTEFTSF9TSEExQ09NUFJFU1NfUk9VTkQzX1NURVBfQlcoZCwgZSwgYSwgYiwgYywgbWUyLCA1Mik7IFwKKwlpZiAodCA+IDUxKSBIQVNIQ0xBU0hfU0hBMUNPTVBSRVNTX1JPVU5EM19TVEVQX0JXKGUsIGEsIGIsIGMsIGQsIG1lMiwgNTEpOyBcCisJaWYgKHQgPiA1MCkgSEFTSENMQVNIX1NIQTFDT01QUkVTU19ST1VORDNfU1RFUF9CVyhhLCBiLCBjLCBkLCBlLCBtZTIsIDUwKTsgXAorCWlmICh0ID4gNDkpIEhBU0hDTEFTSF9TSEExQ09NUFJFU1NfUk9VTkQzX1NURVBfQlcoYiwgYywgZCwgZSwgYSwgbWUyLCA0OSk7IFwKKwlpZiAodCA+IDQ4KSBIQVNIQ0xBU0hfU0hBMUNPTVBSRVNTX1JPVU5EM19TVEVQX0JXKGMsIGQsIGUsIGEsIGIsIG1lMiwgNDgpOyBcCisJaWYgKHQgPiA0NykgSEFTSENMQVNIX1NIQTFDT01QUkVTU19ST1VORDNfU1RFUF9CVyhkLCBlLCBhLCBiLCBjLCBtZTIsIDQ3KTsgXAorCWlmICh0ID4gNDYpIEhBU0hDTEFTSF9TSEExQ09NUFJFU1NfUk9VTkQzX1NURVBfQlcoZSwgYSwgYiwgYywgZCwgbWUyLCA0Nik7IFwKKwlpZiAodCA+IDQ1KSBIQVNIQ0xBU0hfU0hBMUNPTVBSRVNTX1JPVU5EM19TVEVQX0JXKGEsIGIsIGMsIGQsIGUsIG1lMiwgNDUpOyBcCisJaWYgKHQgPiA0NCkgSEFTSENMQVNIX1NIQTFDT01QUkVTU19ST1VORDNfU1RFUF9CVyhiLCBjLCBkLCBlLCBhLCBtZTIsIDQ0KTsgXAorCWlmICh0ID4gNDMpIEhBU0hDTEFTSF9TSEExQ09NUFJFU1NfUk9VTkQzX1NURVBfQlcoYywgZCwgZSwgYSwgYiwgbWUyLCA0Myk7IFwKKwlpZiAodCA+IDQyKSBIQVNIQ0xBU0hfU0hBMUNPTVBSRVNTX1JPVU5EM19TVEVQX0JXKGQsIGUsIGEsIGIsIGMsIG1lMiwgNDIpOyBcCisJaWYgKHQgPiA0MSkgSEFTSENMQVNIX1NIQTFDT01QUkVTU19ST1VORDNfU1RFUF9CVyhlLCBhLCBiLCBjLCBkLCBtZTIsIDQxKTsgXAorCWlmICh0ID4gNDApIEhBU0hDTEFTSF9TSEExQ09NUFJFU1NfUk9VTkQzX1NURVBfQlcoYSwgYiwgYywgZCwgZSwgbWUyLCA0MCk7IFwKKwlpZiAodCA+IDM5KSBIQVNIQ0xBU0hfU0hBMUNPTVBSRVNTX1JPVU5EMl9TVEVQX0JXKGIsIGMsIGQsIGUsIGEsIG1lMiwgMzkpOyBcCisJaWYgKHQgPiAzOCkgSEFTSENMQVNIX1NIQTFDT01QUkVTU19ST1VORDJfU1RFUF9CVyhjLCBkLCBlLCBhLCBiLCBtZTIsIDM4KTsgXAorCWlmICh0ID4gMzcpIEhBU0hDTEFTSF9TSEExQ09NUFJFU1NfUk9VTkQyX1NURVBfQlcoZCwgZSwgYSwgYiwgYywgbWUyLCAzNyk7IFwKKwlpZiAodCA+IDM2KSBIQVNIQ0xBU0hfU0hBMUNPTVBSRVNTX1JPVU5EMl9TVEVQX0JXKGUsIGEsIGIsIGMsIGQsIG1lMiwgMzYpOyBcCisJaWYgKHQgPiAzNSkgSEFTSENMQVNIX1NIQTFDT01QUkVTU19ST1VORDJfU1RFUF9CVyhhLCBiLCBjLCBkLCBlLCBtZTIsIDM1KTsgXAorCWlmICh0ID4gMzQpIEhBU0hDTEFTSF9TSEExQ09NUFJFU1NfUk9VTkQyX1NURVBfQlcoYiwgYywgZCwgZSwgYSwgbWUyLCAzNCk7IFwKKwlpZiAodCA+IDMzKSBIQVNIQ0xBU0hfU0hBMUNPTVBSRVNTX1JPVU5EMl9TVEVQX0JXKGMsIGQsIGUsIGEsIGIsIG1lMiwgMzMpOyBcCisJaWYgKHQgPiAzMikgSEFTSENMQVNIX1NIQTFDT01QUkVTU19ST1VORDJfU1RFUF9CVyhkLCBlLCBhLCBiLCBjLCBtZTIsIDMyKTsgXAorCWlmICh0ID4gMzEpIEhBU0hDTEFTSF9TSEExQ09NUFJFU1NfUk9VTkQyX1NURVBfQlcoZSwgYSwgYiwgYywgZCwgbWUyLCAzMSk7IFwKKwlpZiAodCA+IDMwKSBIQVNIQ0xBU0hfU0hBMUNPTVBSRVNTX1JPVU5EMl9TVEVQX0JXKGEsIGIsIGMsIGQsIGUsIG1lMiwgMzApOyBcCisJaWYgKHQgPiAyOSkgSEFTSENMQVNIX1NIQTFDT01QUkVTU19ST1VORDJfU1RFUF9CVyhiLCBjLCBkLCBlLCBhLCBtZTIsIDI5KTsgXAorCWlmICh0ID4gMjgpIEhBU0hDTEFTSF9TSEExQ09NUFJFU1NfUk9VTkQyX1NURVBfQlcoYywgZCwgZSwgYSwgYiwgbWUyLCAyOCk7IFwKKwlpZiAodCA+IDI3KSBIQVNIQ0xBU0hfU0hBMUNPTVBSRVNTX1JPVU5EMl9TVEVQX0JXKGQsIGUsIGEsIGIsIGMsIG1lMiwgMjcpOyBcCisJaWYgKHQgPiAyNikgSEFTSENMQVNIX1NIQTFDT01QUkVTU19ST1VORDJfU1RFUF9CVyhlLCBhLCBiLCBjLCBkLCBtZTIsIDI2KTsgXAorCWlmICh0ID4gMjUpIEhBU0hDTEFTSF9TSEExQ09NUFJFU1NfUk9VTkQyX1NURVBfQlcoYSwgYiwgYywgZCwgZSwgbWUyLCAyNSk7IFwKKwlpZiAodCA+IDI0KSBIQVNIQ0xBU0hfU0hBMUNPTVBSRVNTX1JPVU5EMl9TVEVQX0JXKGIsIGMsIGQsIGUsIGEsIG1lMiwgMjQpOyBcCisJaWYgKHQgPiAyMykgSEFTSENMQVNIX1NIQTFDT01QUkVTU19ST1VORDJfU1RFUF9CVyhjLCBkLCBlLCBhLCBiLCBtZTIsIDIzKTsgXAorCWlmICh0ID4gMjIpIEhBU0hDTEFTSF9TSEExQ09NUFJFU1NfUk9VTkQyX1NURVBfQlcoZCwgZSwgYSwgYiwgYywgbWUyLCAyMik7IFwKKwlpZiAodCA+IDIxKSBIQVNIQ0xBU0hfU0hBMUNPTVBSRVNTX1JPVU5EMl9TVEVQX0JXKGUsIGEsIGIsIGMsIGQsIG1lMiwgMjEpOyBcCisJaWYgKHQgPiAyMCkgSEFTSENMQVNIX1NIQTFDT01QUkVTU19ST1VORDJfU1RFUF9CVyhhLCBiLCBjLCBkLCBlLCBtZTIsIDIwKTsgXAorCWlmICh0ID4gMTkpIEhBU0hDTEFTSF9TSEExQ09NUFJFU1NfUk9VTkQxX1NURVBfQlcoYiwgYywgZCwgZSwgYSwgbWUyLCAxOSk7IFwKKwlpZiAodCA+IDE4KSBIQVNIQ0xBU0hfU0hBMUNPTVBSRVNTX1JPVU5EMV9TVEVQX0JXKGMsIGQsIGUsIGEsIGIsIG1lMiwgMTgpOyBcCisJaWYgKHQgPiAxNykgSEFTSENMQVNIX1NIQTFDT01QUkVTU19ST1VORDFfU1RFUF9CVyhkLCBlLCBhLCBiLCBjLCBtZTIsIDE3KTsgXAorCWlmICh0ID4gMTYpIEhBU0hDTEFTSF9TSEExQ09NUFJFU1NfUk9VTkQxX1NURVBfQlcoZSwgYSwgYiwgYywgZCwgbWUyLCAxNik7IFwKKwlpZiAodCA+IDE1KSBIQVNIQ0xBU0hfU0hBMUNPTVBSRVNTX1JPVU5EMV9TVEVQX0JXKGEsIGIsIGMsIGQsIGUsIG1lMiwgMTUpOyBcCisJaWYgKHQgPiAxNCkgSEFTSENMQVNIX1NIQTFDT01QUkVTU19ST1VORDFfU1RFUF9CVyhiLCBjLCBkLCBlLCBhLCBtZTIsIDE0KTsgXAorCWlmICh0ID4gMTMpIEhBU0hDTEFTSF9TSEExQ09NUFJFU1NfUk9VTkQxX1NURVBfQlcoYywgZCwgZSwgYSwgYiwgbWUyLCAxMyk7IFwKKwlpZiAodCA+IDEyKSBIQVNIQ0xBU0hfU0hBMUNPTVBSRVNTX1JPVU5EMV9TVEVQX0JXKGQsIGUsIGEsIGIsIGMsIG1lMiwgMTIpOyBcCisJaWYgKHQgPiAxMSkgSEFTSENMQVNIX1NIQTFDT01QUkVTU19ST1VORDFfU1RFUF9CVyhlLCBhLCBiLCBjLCBkLCBtZTIsIDExKTsgXAorCWlmICh0ID4gMTApIEhBU0hDTEFTSF9TSEExQ09NUFJFU1NfUk9VTkQxX1NURVBfQlcoYSwgYiwgYywgZCwgZSwgbWUyLCAxMCk7IFwKKwlpZiAodCA+IDkpIEhBU0hDTEFTSF9TSEExQ09NUFJFU1NfUk9VTkQxX1NURVBfQlcoYiwgYywgZCwgZSwgYSwgbWUyLCA5KTsgXAorCWlmICh0ID4gOCkgSEFTSENMQVNIX1NIQTFDT01QUkVTU19ST1VORDFfU1RFUF9CVyhjLCBkLCBlLCBhLCBiLCBtZTIsIDgpOyBcCisJaWYgKHQgPiA3KSBIQVNIQ0xBU0hfU0hBMUNPTVBSRVNTX1JPVU5EMV9TVEVQX0JXKGQsIGUsIGEsIGIsIGMsIG1lMiwgNyk7IFwKKwlpZiAodCA+IDYpIEhBU0hDTEFTSF9TSEExQ09NUFJFU1NfUk9VTkQxX1NURVBfQlcoZSwgYSwgYiwgYywgZCwgbWUyLCA2KTsgXAorCWlmICh0ID4gNSkgSEFTSENMQVNIX1NIQTFDT01QUkVTU19ST1VORDFfU1RFUF9CVyhhLCBiLCBjLCBkLCBlLCBtZTIsIDUpOyBcCisJaWYgKHQgPiA0KSBIQVNIQ0xBU0hfU0hBMUNPTVBSRVNTX1JPVU5EMV9TVEVQX0JXKGIsIGMsIGQsIGUsIGEsIG1lMiwgNCk7IFwKKwlpZiAodCA+IDMpIEhBU0hDTEFTSF9TSEExQ09NUFJFU1NfUk9VTkQxX1NURVBfQlcoYywgZCwgZSwgYSwgYiwgbWUyLCAzKTsgXAorCWlmICh0ID4gMikgSEFTSENMQVNIX1NIQTFDT01QUkVTU19ST1VORDFfU1RFUF9CVyhkLCBlLCBhLCBiLCBjLCBtZTIsIDIpOyBcCisJaWYgKHQgPiAxKSBIQVNIQ0xBU0hfU0hBMUNPTVBSRVNTX1JPVU5EMV9TVEVQX0JXKGUsIGEsIGIsIGMsIGQsIG1lMiwgMSk7IFwKKwlpZiAodCA+IDApIEhBU0hDTEFTSF9TSEExQ09NUFJFU1NfUk9VTkQxX1NURVBfQlcoYSwgYiwgYywgZCwgZSwgbWUyLCAwKTsgXAorCWlodmluWzBdID0gYTsgaWh2aW5bMV0gPSBiOyBpaHZpblsyXSA9IGM7IGlodmluWzNdID0gZDsgaWh2aW5bNF0gPSBlOyBcCisJYSA9IHN0YXRlWzBdOyBiID0gc3RhdGVbMV07IGMgPSBzdGF0ZVsyXTsgZCA9IHN0YXRlWzNdOyBlID0gc3RhdGVbNF07IFwKKwlpZiAodCA8PSAwKSBIQVNIQ0xBU0hfU0hBMUNPTVBSRVNTX1JPVU5EMV9TVEVQKGEsIGIsIGMsIGQsIGUsIG1lMiwgMCk7IFwKKwlpZiAodCA8PSAxKSBIQVNIQ0xBU0hfU0hBMUNPTVBSRVNTX1JPVU5EMV9TVEVQKGUsIGEsIGIsIGMsIGQsIG1lMiwgMSk7IFwKKwlpZiAodCA8PSAyKSBIQVNIQ0xBU0hfU0hBMUNPTVBSRVNTX1JPVU5EMV9TVEVQKGQsIGUsIGEsIGIsIGMsIG1lMiwgMik7IFwKKwlpZiAodCA8PSAzKSBIQVNIQ0xBU0hfU0hBMUNPTVBSRVNTX1JPVU5EMV9TVEVQKGMsIGQsIGUsIGEsIGIsIG1lMiwgMyk7IFwKKwlpZiAodCA8PSA0KSBIQVNIQ0xBU0hfU0hBMUNPTVBSRVNTX1JPVU5EMV9TVEVQKGIsIGMsIGQsIGUsIGEsIG1lMiwgNCk7IFwKKwlpZiAodCA8PSA1KSBIQVNIQ0xBU0hfU0hBMUNPTVBSRVNTX1JPVU5EMV9TVEVQKGEsIGIsIGMsIGQsIGUsIG1lMiwgNSk7IFwKKwlpZiAodCA8PSA2KSBIQVNIQ0xBU0hfU0hBMUNPTVBSRVNTX1JPVU5EMV9TVEVQKGUsIGEsIGIsIGMsIGQsIG1lMiwgNik7IFwKKwlpZiAodCA8PSA3KSBIQVNIQ0xBU0hfU0hBMUNPTVBSRVNTX1JPVU5EMV9TVEVQKGQsIGUsIGEsIGIsIGMsIG1lMiwgNyk7IFwKKwlpZiAodCA8PSA4KSBIQVNIQ0xBU0hfU0hBMUNPTVBSRVNTX1JPVU5EMV9TVEVQKGMsIGQsIGUsIGEsIGIsIG1lMiwgOCk7IFwKKwlpZiAodCA8PSA5KSBIQVNIQ0xBU0hfU0hBMUNPTVBSRVNTX1JPVU5EMV9TVEVQKGIsIGMsIGQsIGUsIGEsIG1lMiwgOSk7IFwKKwlpZiAodCA8PSAxMCkgSEFTSENMQVNIX1NIQTFDT01QUkVTU19ST1VORDFfU1RFUChhLCBiLCBjLCBkLCBlLCBtZTIsIDEwKTsgXAorCWlmICh0IDw9IDExKSBIQVNIQ0xBU0hfU0hBMUNPTVBSRVNTX1JPVU5EMV9TVEVQKGUsIGEsIGIsIGMsIGQsIG1lMiwgMTEpOyBcCisJaWYgKHQgPD0gMTIpIEhBU0hDTEFTSF9TSEExQ09NUFJFU1NfUk9VTkQxX1NURVAoZCwgZSwgYSwgYiwgYywgbWUyLCAxMik7IFwKKwlpZiAodCA8PSAxMykgSEFTSENMQVNIX1NIQTFDT01QUkVTU19ST1VORDFfU1RFUChjLCBkLCBlLCBhLCBiLCBtZTIsIDEzKTsgXAorCWlmICh0IDw9IDE0KSBIQVNIQ0xBU0hfU0hBMUNPTVBSRVNTX1JPVU5EMV9TVEVQKGIsIGMsIGQsIGUsIGEsIG1lMiwgMTQpOyBcCisJaWYgKHQgPD0gMTUpIEhBU0hDTEFTSF9TSEExQ09NUFJFU1NfUk9VTkQxX1NURVAoYSwgYiwgYywgZCwgZSwgbWUyLCAxNSk7IFwKKwlpZiAodCA8PSAxNikgSEFTSENMQVNIX1NIQTFDT01QUkVTU19ST1VORDFfU1RFUChlLCBhLCBiLCBjLCBkLCBtZTIsIDE2KTsgXAorCWlmICh0IDw9IDE3KSBIQVNIQ0xBU0hfU0hBMUNPTVBSRVNTX1JPVU5EMV9TVEVQKGQsIGUsIGEsIGIsIGMsIG1lMiwgMTcpOyBcCisJaWYgKHQgPD0gMTgpIEhBU0hDTEFTSF9TSEExQ09NUFJFU1NfUk9VTkQxX1NURVAoYywgZCwgZSwgYSwgYiwgbWUyLCAxOCk7IFwKKwlpZiAodCA8PSAxOSkgSEFTSENMQVNIX1NIQTFDT01QUkVTU19ST1VORDFfU1RFUChiLCBjLCBkLCBlLCBhLCBtZTIsIDE5KTsgXAorCWlmICh0IDw9IDIwKSBIQVNIQ0xBU0hfU0hBMUNPTVBSRVNTX1JPVU5EMl9TVEVQKGEsIGIsIGMsIGQsIGUsIG1lMiwgMjApOyBcCisJaWYgKHQgPD0gMjEpIEhBU0hDTEFTSF9TSEExQ09NUFJFU1NfUk9VTkQyX1NURVAoZSwgYSwgYiwgYywgZCwgbWUyLCAyMSk7IFwKKwlpZiAodCA8PSAyMikgSEFTSENMQVNIX1NIQTFDT01QUkVTU19ST1VORDJfU1RFUChkLCBlLCBhLCBiLCBjLCBtZTIsIDIyKTsgXAorCWlmICh0IDw9IDIzKSBIQVNIQ0xBU0hfU0hBMUNPTVBSRVNTX1JPVU5EMl9TVEVQKGMsIGQsIGUsIGEsIGIsIG1lMiwgMjMpOyBcCisJaWYgKHQgPD0gMjQpIEhBU0hDTEFTSF9TSEExQ09NUFJFU1NfUk9VTkQyX1NURVAoYiwgYywgZCwgZSwgYSwgbWUyLCAyNCk7IFwKKwlpZiAodCA8PSAyNSkgSEFTSENMQVNIX1NIQTFDT01QUkVTU19ST1VORDJfU1RFUChhLCBiLCBjLCBkLCBlLCBtZTIsIDI1KTsgXAorCWlmICh0IDw9IDI2KSBIQVNIQ0xBU0hfU0hBMUNPTVBSRVNTX1JPVU5EMl9TVEVQKGUsIGEsIGIsIGMsIGQsIG1lMiwgMjYpOyBcCisJaWYgKHQgPD0gMjcpIEhBU0hDTEFTSF9TSEExQ09NUFJFU1NfUk9VTkQyX1NURVAoZCwgZSwgYSwgYiwgYywgbWUyLCAyNyk7IFwKKwlpZiAodCA8PSAyOCkgSEFTSENMQVNIX1NIQTFDT01QUkVTU19ST1VORDJfU1RFUChjLCBkLCBlLCBhLCBiLCBtZTIsIDI4KTsgXAorCWlmICh0IDw9IDI5KSBIQVNIQ0xBU0hfU0hBMUNPTVBSRVNTX1JPVU5EMl9TVEVQKGIsIGMsIGQsIGUsIGEsIG1lMiwgMjkpOyBcCisJaWYgKHQgPD0gMzApIEhBU0hDTEFTSF9TSEExQ09NUFJFU1NfUk9VTkQyX1NURVAoYSwgYiwgYywgZCwgZSwgbWUyLCAzMCk7IFwKKwlpZiAodCA8PSAzMSkgSEFTSENMQVNIX1NIQTFDT01QUkVTU19ST1VORDJfU1RFUChlLCBhLCBiLCBjLCBkLCBtZTIsIDMxKTsgXAorCWlmICh0IDw9IDMyKSBIQVNIQ0xBU0hfU0hBMUNPTVBSRVNTX1JPVU5EMl9TVEVQKGQsIGUsIGEsIGIsIGMsIG1lMiwgMzIpOyBcCisJaWYgKHQgPD0gMzMpIEhBU0hDTEFTSF9TSEExQ09NUFJFU1NfUk9VTkQyX1NURVAoYywgZCwgZSwgYSwgYiwgbWUyLCAzMyk7IFwKKwlpZiAodCA8PSAzNCkgSEFTSENMQVNIX1NIQTFDT01QUkVTU19ST1VORDJfU1RFUChiLCBjLCBkLCBlLCBhLCBtZTIsIDM0KTsgXAorCWlmICh0IDw9IDM1KSBIQVNIQ0xBU0hfU0hBMUNPTVBSRVNTX1JPVU5EMl9TVEVQKGEsIGIsIGMsIGQsIGUsIG1lMiwgMzUpOyBcCisJaWYgKHQgPD0gMzYpIEhBU0hDTEFTSF9TSEExQ09NUFJFU1NfUk9VTkQyX1NURVAoZSwgYSwgYiwgYywgZCwgbWUyLCAzNik7IFwKKwlpZiAodCA8PSAzNykgSEFTSENMQVNIX1NIQTFDT01QUkVTU19ST1VORDJfU1RFUChkLCBlLCBhLCBiLCBjLCBtZTIsIDM3KTsgXAorCWlmICh0IDw9IDM4KSBIQVNIQ0xBU0hfU0hBMUNPTVBSRVNTX1JPVU5EMl9TVEVQKGMsIGQsIGUsIGEsIGIsIG1lMiwgMzgpOyBcCisJaWYgKHQgPD0gMzkpIEhBU0hDTEFTSF9TSEExQ09NUFJFU1NfUk9VTkQyX1NURVAoYiwgYywgZCwgZSwgYSwgbWUyLCAzOSk7IFwKKwlpZiAodCA8PSA0MCkgSEFTSENMQVNIX1NIQTFDT01QUkVTU19ST1VORDNfU1RFUChhLCBiLCBjLCBkLCBlLCBtZTIsIDQwKTsgXAorCWlmICh0IDw9IDQxKSBIQVNIQ0xBU0hfU0hBMUNPTVBSRVNTX1JPVU5EM19TVEVQKGUsIGEsIGIsIGMsIGQsIG1lMiwgNDEpOyBcCisJaWYgKHQgPD0gNDIpIEhBU0hDTEFTSF9TSEExQ09NUFJFU1NfUk9VTkQzX1NURVAoZCwgZSwgYSwgYiwgYywgbWUyLCA0Mik7IFwKKwlpZiAodCA8PSA0MykgSEFTSENMQVNIX1NIQTFDT01QUkVTU19ST1VORDNfU1RFUChjLCBkLCBlLCBhLCBiLCBtZTIsIDQzKTsgXAorCWlmICh0IDw9IDQ0KSBIQVNIQ0xBU0hfU0hBMUNPTVBSRVNTX1JPVU5EM19TVEVQKGIsIGMsIGQsIGUsIGEsIG1lMiwgNDQpOyBcCisJaWYgKHQgPD0gNDUpIEhBU0hDTEFTSF9TSEExQ09NUFJFU1NfUk9VTkQzX1NURVAoYSwgYiwgYywgZCwgZSwgbWUyLCA0NSk7IFwKKwlpZiAodCA8PSA0NikgSEFTSENMQVNIX1NIQTFDT01QUkVTU19ST1VORDNfU1RFUChlLCBhLCBiLCBjLCBkLCBtZTIsIDQ2KTsgXAorCWlmICh0IDw9IDQ3KSBIQVNIQ0xBU0hfU0hBMUNPTVBSRVNTX1JPVU5EM19TVEVQKGQsIGUsIGEsIGIsIGMsIG1lMiwgNDcpOyBcCisJaWYgKHQgPD0gNDgpIEhBU0hDTEFTSF9TSEExQ09NUFJFU1NfUk9VTkQzX1NURVAoYywgZCwgZSwgYSwgYiwgbWUyLCA0OCk7IFwKKwlpZiAodCA8PSA0OSkgSEFTSENMQVNIX1NIQTFDT01QUkVTU19ST1VORDNfU1RFUChiLCBjLCBkLCBlLCBhLCBtZTIsIDQ5KTsgXAorCWlmICh0IDw9IDUwKSBIQVNIQ0xBU0hfU0hBMUNPTVBSRVNTX1JPVU5EM19TVEVQKGEsIGIsIGMsIGQsIGUsIG1lMiwgNTApOyBcCisJaWYgKHQgPD0gNTEpIEhBU0hDTEFTSF9TSEExQ09NUFJFU1NfUk9VTkQzX1NURVAoZSwgYSwgYiwgYywgZCwgbWUyLCA1MSk7IFwKKwlpZiAodCA8PSA1MikgSEFTSENMQVNIX1NIQTFDT01QUkVTU19ST1VORDNfU1RFUChkLCBlLCBhLCBiLCBjLCBtZTIsIDUyKTsgXAorCWlmICh0IDw9IDUzKSBIQVNIQ0xBU0hfU0hBMUNPTVBSRVNTX1JPVU5EM19TVEVQKGMsIGQsIGUsIGEsIGIsIG1lMiwgNTMpOyBcCisJaWYgKHQgPD0gNTQpIEhBU0hDTEFTSF9TSEExQ09NUFJFU1NfUk9VTkQzX1NURVAoYiwgYywgZCwgZSwgYSwgbWUyLCA1NCk7IFwKKwlpZiAodCA8PSA1NSkgSEFTSENMQVNIX1NIQTFDT01QUkVTU19ST1VORDNfU1RFUChhLCBiLCBjLCBkLCBlLCBtZTIsIDU1KTsgXAorCWlmICh0IDw9IDU2KSBIQVNIQ0xBU0hfU0hBMUNPTVBSRVNTX1JPVU5EM19TVEVQKGUsIGEsIGIsIGMsIGQsIG1lMiwgNTYpOyBcCisJaWYgKHQgPD0gNTcpIEhBU0hDTEFTSF9TSEExQ09NUFJFU1NfUk9VTkQzX1NURVAoZCwgZSwgYSwgYiwgYywgbWUyLCA1Nyk7IFwKKwlpZiAodCA8PSA1OCkgSEFTSENMQVNIX1NIQTFDT01QUkVTU19ST1VORDNfU1RFUChjLCBkLCBlLCBhLCBiLCBtZTIsIDU4KTsgXAorCWlmICh0IDw9IDU5KSBIQVNIQ0xBU0hfU0hBMUNPTVBSRVNTX1JPVU5EM19TVEVQKGIsIGMsIGQsIGUsIGEsIG1lMiwgNTkpOyBcCisJaWYgKHQgPD0gNjApIEhBU0hDTEFTSF9TSEExQ09NUFJFU1NfUk9VTkQ0X1NURVAoYSwgYiwgYywgZCwgZSwgbWUyLCA2MCk7IFwKKwlpZiAodCA8PSA2MSkgSEFTSENMQVNIX1NIQTFDT01QUkVTU19ST1VORDRfU1RFUChlLCBhLCBiLCBjLCBkLCBtZTIsIDYxKTsgXAorCWlmICh0IDw9IDYyKSBIQVNIQ0xBU0hfU0hBMUNPTVBSRVNTX1JPVU5ENF9TVEVQKGQsIGUsIGEsIGIsIGMsIG1lMiwgNjIpOyBcCisJaWYgKHQgPD0gNjMpIEhBU0hDTEFTSF9TSEExQ09NUFJFU1NfUk9VTkQ0X1NURVAoYywgZCwgZSwgYSwgYiwgbWUyLCA2Myk7IFwKKwlpZiAodCA8PSA2NCkgSEFTSENMQVNIX1NIQTFDT01QUkVTU19ST1VORDRfU1RFUChiLCBjLCBkLCBlLCBhLCBtZTIsIDY0KTsgXAorCWlmICh0IDw9IDY1KSBIQVNIQ0xBU0hfU0hBMUNPTVBSRVNTX1JPVU5ENF9TVEVQKGEsIGIsIGMsIGQsIGUsIG1lMiwgNjUpOyBcCisJaWYgKHQgPD0gNjYpIEhBU0hDTEFTSF9TSEExQ09NUFJFU1NfUk9VTkQ0X1NURVAoZSwgYSwgYiwgYywgZCwgbWUyLCA2Nik7IFwKKwlpZiAodCA8PSA2NykgSEFTSENMQVNIX1NIQTFDT01QUkVTU19ST1VORDRfU1RFUChkLCBlLCBhLCBiLCBjLCBtZTIsIDY3KTsgXAorCWlmICh0IDw9IDY4KSBIQVNIQ0xBU0hfU0hBMUNPTVBSRVNTX1JPVU5ENF9TVEVQKGMsIGQsIGUsIGEsIGIsIG1lMiwgNjgpOyBcCisJaWYgKHQgPD0gNjkpIEhBU0hDTEFTSF9TSEExQ09NUFJFU1NfUk9VTkQ0X1NURVAoYiwgYywgZCwgZSwgYSwgbWUyLCA2OSk7IFwKKwlpZiAodCA8PSA3MCkgSEFTSENMQVNIX1NIQTFDT01QUkVTU19ST1VORDRfU1RFUChhLCBiLCBjLCBkLCBlLCBtZTIsIDcwKTsgXAorCWlmICh0IDw9IDcxKSBIQVNIQ0xBU0hfU0hBMUNPTVBSRVNTX1JPVU5ENF9TVEVQKGUsIGEsIGIsIGMsIGQsIG1lMiwgNzEpOyBcCisJaWYgKHQgPD0gNzIpIEhBU0hDTEFTSF9TSEExQ09NUFJFU1NfUk9VTkQ0X1NURVAoZCwgZSwgYSwgYiwgYywgbWUyLCA3Mik7IFwKKwlpZiAodCA8PSA3MykgSEFTSENMQVNIX1NIQTFDT01QUkVTU19ST1VORDRfU1RFUChjLCBkLCBlLCBhLCBiLCBtZTIsIDczKTsgXAorCWlmICh0IDw9IDc0KSBIQVNIQ0xBU0hfU0hBMUNPTVBSRVNTX1JPVU5ENF9TVEVQKGIsIGMsIGQsIGUsIGEsIG1lMiwgNzQpOyBcCisJaWYgKHQgPD0gNzUpIEhBU0hDTEFTSF9TSEExQ09NUFJFU1NfUk9VTkQ0X1NURVAoYSwgYiwgYywgZCwgZSwgbWUyLCA3NSk7IFwKKwlpZiAodCA8PSA3NikgSEFTSENMQVNIX1NIQTFDT01QUkVTU19ST1VORDRfU1RFUChlLCBhLCBiLCBjLCBkLCBtZTIsIDc2KTsgXAorCWlmICh0IDw9IDc3KSBIQVNIQ0xBU0hfU0hBMUNPTVBSRVNTX1JPVU5ENF9TVEVQKGQsIGUsIGEsIGIsIGMsIG1lMiwgNzcpOyBcCisJaWYgKHQgPD0gNzgpIEhBU0hDTEFTSF9TSEExQ09NUFJFU1NfUk9VTkQ0X1NURVAoYywgZCwgZSwgYSwgYiwgbWUyLCA3OCk7IFwKKwlpZiAodCA8PSA3OSkgSEFTSENMQVNIX1NIQTFDT01QUkVTU19ST1VORDRfU1RFUChiLCBjLCBkLCBlLCBhLCBtZTIsIDc5KTsgXAorCWlodm91dFswXSA9IGlodmluWzBdICsgYTsgaWh2b3V0WzFdID0gaWh2aW5bMV0gKyBiOyBpaHZvdXRbMl0gPSBpaHZpblsyXSArIGM7IGlodm91dFszXSA9IGlodmluWzNdICsgZDsgaWh2b3V0WzRdID0gaWh2aW5bNF0gKyBlOyBcCit9CisKKyNpZmRlZiBfTVNDX1ZFUgorI3ByYWdtYSB3YXJuaW5nKHB1c2gpCisjcHJhZ21hIHdhcm5pbmcoZGlzYWJsZTogNDEyNykgIC8qIENvbXBsaWVyIGNvbXBsYWlucyBhYm91dCB0aGUgY2hlY2tzIGluIHRoZSBhYm92ZSBtYWNybyBiZWluZyBjb25zdGFudC4gKi8KKyNlbmRpZgorCisjaWZkZWYgRE9TVE9SRVNUQVRFMAorU0hBMV9SRUNPTVBSRVNTKDApCisjZW5kaWYKKworI2lmZGVmIERPU1RPUkVTVEFURTEKK1NIQTFfUkVDT01QUkVTUygxKQorI2VuZGlmCisKKyNpZmRlZiBET1NUT1JFU1RBVEUyCitTSEExX1JFQ09NUFJFU1MoMikKKyNlbmRpZgorCisjaWZkZWYgRE9TVE9SRVNUQVRFMworU0hBMV9SRUNPTVBSRVNTKDMpCisjZW5kaWYKKworI2lmZGVmIERPU1RPUkVTVEFURTQKK1NIQTFfUkVDT01QUkVTUyg0KQorI2VuZGlmCisKKyNpZmRlZiBET1NUT1JFU1RBVEU1CitTSEExX1JFQ09NUFJFU1MoNSkKKyNlbmRpZgorCisjaWZkZWYgRE9TVE9SRVNUQVRFNgorU0hBMV9SRUNPTVBSRVNTKDYpCisjZW5kaWYKKworI2lmZGVmIERPU1RPUkVTVEFURTcKK1NIQTFfUkVDT01QUkVTUyg3KQorI2VuZGlmCisKKyNpZmRlZiBET1NUT1JFU1RBVEU4CitTSEExX1JFQ09NUFJFU1MoOCkKKyNlbmRpZgorCisjaWZkZWYgRE9TVE9SRVNUQVRFOQorU0hBMV9SRUNPTVBSRVNTKDkpCisjZW5kaWYKKworI2lmZGVmIERPU1RPUkVTVEFURTEwCitTSEExX1JFQ09NUFJFU1MoMTApCisjZW5kaWYKKworI2lmZGVmIERPU1RPUkVTVEFURTExCitTSEExX1JFQ09NUFJFU1MoMTEpCisjZW5kaWYKKworI2lmZGVmIERPU1RPUkVTVEFURTEyCitTSEExX1JFQ09NUFJFU1MoMTIpCisjZW5kaWYKKworI2lmZGVmIERPU1RPUkVTVEFURTEzCitTSEExX1JFQ09NUFJFU1MoMTMpCisjZW5kaWYKKworI2lmZGVmIERPU1RPUkVTVEFURTE0CitTSEExX1JFQ09NUFJFU1MoMTQpCisjZW5kaWYKKworI2lmZGVmIERPU1RPUkVTVEFURTE1CitTSEExX1JFQ09NUFJFU1MoMTUpCisjZW5kaWYKKworI2lmZGVmIERPU1RPUkVTVEFURTE2CitTSEExX1JFQ09NUFJFU1MoMTYpCisjZW5kaWYKKworI2lmZGVmIERPU1RPUkVTVEFURTE3CitTSEExX1JFQ09NUFJFU1MoMTcpCisjZW5kaWYKKworI2lmZGVmIERPU1RPUkVTVEFURTE4CitTSEExX1JFQ09NUFJFU1MoMTgpCisjZW5kaWYKKworI2lmZGVmIERPU1RPUkVTVEFURTE5CitTSEExX1JFQ09NUFJFU1MoMTkpCisjZW5kaWYKKworI2lmZGVmIERPU1RPUkVTVEFURTIwCitTSEExX1JFQ09NUFJFU1MoMjApCisjZW5kaWYKKworI2lmZGVmIERPU1RPUkVTVEFURTIxCitTSEExX1JFQ09NUFJFU1MoMjEpCisjZW5kaWYKKworI2lmZGVmIERPU1RPUkVTVEFURTIyCitTSEExX1JFQ09NUFJFU1MoMjIpCisjZW5kaWYKKworI2lmZGVmIERPU1RPUkVTVEFURTIzCitTSEExX1JFQ09NUFJFU1MoMjMpCisjZW5kaWYKKworI2lmZGVmIERPU1RPUkVTVEFURTI0CitTSEExX1JFQ09NUFJFU1MoMjQpCisjZW5kaWYKKworI2lmZGVmIERPU1RPUkVTVEFURTI1CitTSEExX1JFQ09NUFJFU1MoMjUpCisjZW5kaWYKKworI2lmZGVmIERPU1RPUkVTVEFURTI2CitTSEExX1JFQ09NUFJFU1MoMjYpCisjZW5kaWYKKworI2lmZGVmIERPU1RPUkVTVEFURTI3CitTSEExX1JFQ09NUFJFU1MoMjcpCisjZW5kaWYKKworI2lmZGVmIERPU1RPUkVTVEFURTI4CitTSEExX1JFQ09NUFJFU1MoMjgpCisjZW5kaWYKKworI2lmZGVmIERPU1RPUkVTVEFURTI5CitTSEExX1JFQ09NUFJFU1MoMjkpCisjZW5kaWYKKworI2lmZGVmIERPU1RPUkVTVEFURTMwCitTSEExX1JFQ09NUFJFU1MoMzApCisjZW5kaWYKKworI2lmZGVmIERPU1RPUkVTVEFURTMxCitTSEExX1JFQ09NUFJFU1MoMzEpCisjZW5kaWYKKworI2lmZGVmIERPU1RPUkVTVEFURTMyCitTSEExX1JFQ09NUFJFU1MoMzIpCisjZW5kaWYKKworI2lmZGVmIERPU1RPUkVTVEFURTMzCitTSEExX1JFQ09NUFJFU1MoMzMpCisjZW5kaWYKKworI2lmZGVmIERPU1RPUkVTVEFURTM0CitTSEExX1JFQ09NUFJFU1MoMzQpCisjZW5kaWYKKworI2lmZGVmIERPU1RPUkVTVEFURTM1CitTSEExX1JFQ09NUFJFU1MoMzUpCisjZW5kaWYKKworI2lmZGVmIERPU1RPUkVTVEFURTM2CitTSEExX1JFQ09NUFJFU1MoMzYpCisjZW5kaWYKKworI2lmZGVmIERPU1RPUkVTVEFURTM3CitTSEExX1JFQ09NUFJFU1MoMzcpCisjZW5kaWYKKworI2lmZGVmIERPU1RPUkVTVEFURTM4CitTSEExX1JFQ09NUFJFU1MoMzgpCisjZW5kaWYKKworI2lmZGVmIERPU1RPUkVTVEFURTM5CitTSEExX1JFQ09NUFJFU1MoMzkpCisjZW5kaWYKKworI2lmZGVmIERPU1RPUkVTVEFURTQwCitTSEExX1JFQ09NUFJFU1MoNDApCisjZW5kaWYKKworI2lmZGVmIERPU1RPUkVTVEFURTQxCitTSEExX1JFQ09NUFJFU1MoNDEpCisjZW5kaWYKKworI2lmZGVmIERPU1RPUkVTVEFURTQyCitTSEExX1JFQ09NUFJFU1MoNDIpCisjZW5kaWYKKworI2lmZGVmIERPU1RPUkVTVEFURTQzCitTSEExX1JFQ09NUFJFU1MoNDMpCisjZW5kaWYKKworI2lmZGVmIERPU1RPUkVTVEFURTQ0CitTSEExX1JFQ09NUFJFU1MoNDQpCisjZW5kaWYKKworI2lmZGVmIERPU1RPUkVTVEFURTQ1CitTSEExX1JFQ09NUFJFU1MoNDUpCisjZW5kaWYKKworI2lmZGVmIERPU1RPUkVTVEFURTQ2CitTSEExX1JFQ09NUFJFU1MoNDYpCisjZW5kaWYKKworI2lmZGVmIERPU1RPUkVTVEFURTQ3CitTSEExX1JFQ09NUFJFU1MoNDcpCisjZW5kaWYKKworI2lmZGVmIERPU1RPUkVTVEFURTQ4CitTSEExX1JFQ09NUFJFU1MoNDgpCisjZW5kaWYKKworI2lmZGVmIERPU1RPUkVTVEFURTQ5CitTSEExX1JFQ09NUFJFU1MoNDkpCisjZW5kaWYKKworI2lmZGVmIERPU1RPUkVTVEFURTUwCitTSEExX1JFQ09NUFJFU1MoNTApCisjZW5kaWYKKworI2lmZGVmIERPU1RPUkVTVEFURTUxCitTSEExX1JFQ09NUFJFU1MoNTEpCisjZW5kaWYKKworI2lmZGVmIERPU1RPUkVTVEFURTUyCitTSEExX1JFQ09NUFJFU1MoNTIpCisjZW5kaWYKKworI2lmZGVmIERPU1RPUkVTVEFURTUzCitTSEExX1JFQ09NUFJFU1MoNTMpCisjZW5kaWYKKworI2lmZGVmIERPU1RPUkVTVEFURTU0CitTSEExX1JFQ09NUFJFU1MoNTQpCisjZW5kaWYKKworI2lmZGVmIERPU1RPUkVTVEFURTU1CitTSEExX1JFQ09NUFJFU1MoNTUpCisjZW5kaWYKKworI2lmZGVmIERPU1RPUkVTVEFURTU2CitTSEExX1JFQ09NUFJFU1MoNTYpCisjZW5kaWYKKworI2lmZGVmIERPU1RPUkVTVEFURTU3CitTSEExX1JFQ09NUFJFU1MoNTcpCisjZW5kaWYKKworI2lmZGVmIERPU1RPUkVTVEFURTU4CitTSEExX1JFQ09NUFJFU1MoNTgpCisjZW5kaWYKKworI2lmZGVmIERPU1RPUkVTVEFURTU5CitTSEExX1JFQ09NUFJFU1MoNTkpCisjZW5kaWYKKworI2lmZGVmIERPU1RPUkVTVEFURTYwCitTSEExX1JFQ09NUFJFU1MoNjApCisjZW5kaWYKKworI2lmZGVmIERPU1RPUkVTVEFURTYxCitTSEExX1JFQ09NUFJFU1MoNjEpCisjZW5kaWYKKworI2lmZGVmIERPU1RPUkVTVEFURTYyCitTSEExX1JFQ09NUFJFU1MoNjIpCisjZW5kaWYKKworI2lmZGVmIERPU1RPUkVTVEFURTYzCitTSEExX1JFQ09NUFJFU1MoNjMpCisjZW5kaWYKKworI2lmZGVmIERPU1RPUkVTVEFURTY0CitTSEExX1JFQ09NUFJFU1MoNjQpCisjZW5kaWYKKworI2lmZGVmIERPU1RPUkVTVEFURTY1CitTSEExX1JFQ09NUFJFU1MoNjUpCisjZW5kaWYKKworI2lmZGVmIERPU1RPUkVTVEFURTY2CitTSEExX1JFQ09NUFJFU1MoNjYpCisjZW5kaWYKKworI2lmZGVmIERPU1RPUkVTVEFURTY3CitTSEExX1JFQ09NUFJFU1MoNjcpCisjZW5kaWYKKworI2lmZGVmIERPU1RPUkVTVEFURTY4CitTSEExX1JFQ09NUFJFU1MoNjgpCisjZW5kaWYKKworI2lmZGVmIERPU1RPUkVTVEFURTY5CitTSEExX1JFQ09NUFJFU1MoNjkpCisjZW5kaWYKKworI2lmZGVmIERPU1RPUkVTVEFURTcwCitTSEExX1JFQ09NUFJFU1MoNzApCisjZW5kaWYKKworI2lmZGVmIERPU1RPUkVTVEFURTcxCitTSEExX1JFQ09NUFJFU1MoNzEpCisjZW5kaWYKKworI2lmZGVmIERPU1RPUkVTVEFURTcyCitTSEExX1JFQ09NUFJFU1MoNzIpCisjZW5kaWYKKworI2lmZGVmIERPU1RPUkVTVEFURTczCitTSEExX1JFQ09NUFJFU1MoNzMpCisjZW5kaWYKKworI2lmZGVmIERPU1RPUkVTVEFURTc0CitTSEExX1JFQ09NUFJFU1MoNzQpCisjZW5kaWYKKworI2lmZGVmIERPU1RPUkVTVEFURTc1CitTSEExX1JFQ09NUFJFU1MoNzUpCisjZW5kaWYKKworI2lmZGVmIERPU1RPUkVTVEFURTc2CitTSEExX1JFQ09NUFJFU1MoNzYpCisjZW5kaWYKKworI2lmZGVmIERPU1RPUkVTVEFURTc3CitTSEExX1JFQ09NUFJFU1MoNzcpCisjZW5kaWYKKworI2lmZGVmIERPU1RPUkVTVEFURTc4CitTSEExX1JFQ09NUFJFU1MoNzgpCisjZW5kaWYKKworI2lmZGVmIERPU1RPUkVTVEFURTc5CitTSEExX1JFQ09NUFJFU1MoNzkpCisjZW5kaWYKKworI2lmZGVmIF9NU0NfVkVSCisjcHJhZ21hIHdhcm5pbmcocG9wKQorI2VuZGlmCisKK3N0YXRpYyB2b2lkIHNoYTFfcmVjb21wcmVzc2lvbl9zdGVwKHVpbnQzMl90IHN0ZXAsIHVpbnQzMl90IGlodmluWzVdLCB1aW50MzJfdCBpaHZvdXRbNV0sIGNvbnN0IHVpbnQzMl90IG1lMls4MF0sIGNvbnN0IHVpbnQzMl90IHN0YXRlWzVdKQoreworCXN3aXRjaCAoc3RlcCkKKwl7CisjaWZkZWYgRE9TVE9SRVNUQVRFMAorCWNhc2UgMDoKKwkJc2hhMXJlY29tcHJlc3NfZmFzdF8wKGlodmluLCBpaHZvdXQsIG1lMiwgc3RhdGUpOworCQlicmVhazsKKyNlbmRpZgorI2lmZGVmIERPU1RPUkVTVEFURTEKKwljYXNlIDE6CisJCXNoYTFyZWNvbXByZXNzX2Zhc3RfMShpaHZpbiwgaWh2b3V0LCBtZTIsIHN0YXRlKTsKKwkJYnJlYWs7CisjZW5kaWYKKyNpZmRlZiBET1NUT1JFU1RBVEUyCisJY2FzZSAyOgorCQlzaGExcmVjb21wcmVzc19mYXN0XzIoaWh2aW4sIGlodm91dCwgbWUyLCBzdGF0ZSk7CisJCWJyZWFrOworI2VuZGlmCisjaWZkZWYgRE9TVE9SRVNUQVRFMworCWNhc2UgMzoKKwkJc2hhMXJlY29tcHJlc3NfZmFzdF8zKGlodmluLCBpaHZvdXQsIG1lMiwgc3RhdGUpOworCQlicmVhazsKKyNlbmRpZgorI2lmZGVmIERPU1RPUkVTVEFURTQKKwljYXNlIDQ6CisJCXNoYTFyZWNvbXByZXNzX2Zhc3RfNChpaHZpbiwgaWh2b3V0LCBtZTIsIHN0YXRlKTsKKwkJYnJlYWs7CisjZW5kaWYKKyNpZmRlZiBET1NUT1JFU1RBVEU1CisJY2FzZSA1OgorCQlzaGExcmVjb21wcmVzc19mYXN0XzUoaWh2aW4sIGlodm91dCwgbWUyLCBzdGF0ZSk7CisJCWJyZWFrOworI2VuZGlmCisjaWZkZWYgRE9TVE9SRVNUQVRFNgorCWNhc2UgNjoKKwkJc2hhMXJlY29tcHJlc3NfZmFzdF82KGlodmluLCBpaHZvdXQsIG1lMiwgc3RhdGUpOworCQlicmVhazsKKyNlbmRpZgorI2lmZGVmIERPU1RPUkVTVEFURTcKKwljYXNlIDc6CisJCXNoYTFyZWNvbXByZXNzX2Zhc3RfNyhpaHZpbiwgaWh2b3V0LCBtZTIsIHN0YXRlKTsKKwkJYnJlYWs7CisjZW5kaWYKKyNpZmRlZiBET1NUT1JFU1RBVEU4CisJY2FzZSA4OgorCQlzaGExcmVjb21wcmVzc19mYXN0XzgoaWh2aW4sIGlodm91dCwgbWUyLCBzdGF0ZSk7CisJCWJyZWFrOworI2VuZGlmCisjaWZkZWYgRE9TVE9SRVNUQVRFOQorCWNhc2UgOToKKwkJc2hhMXJlY29tcHJlc3NfZmFzdF85KGlodmluLCBpaHZvdXQsIG1lMiwgc3RhdGUpOworCQlicmVhazsKKyNlbmRpZgorI2lmZGVmIERPU1RPUkVTVEFURTEwCisJY2FzZSAxMDoKKwkJc2hhMXJlY29tcHJlc3NfZmFzdF8xMChpaHZpbiwgaWh2b3V0LCBtZTIsIHN0YXRlKTsKKwkJYnJlYWs7CisjZW5kaWYKKyNpZmRlZiBET1NUT1JFU1RBVEUxMQorCWNhc2UgMTE6CisJCXNoYTFyZWNvbXByZXNzX2Zhc3RfMTEoaWh2aW4sIGlodm91dCwgbWUyLCBzdGF0ZSk7CisJCWJyZWFrOworI2VuZGlmCisjaWZkZWYgRE9TVE9SRVNUQVRFMTIKKwljYXNlIDEyOgorCQlzaGExcmVjb21wcmVzc19mYXN0XzEyKGlodmluLCBpaHZvdXQsIG1lMiwgc3RhdGUpOworCQlicmVhazsKKyNlbmRpZgorI2lmZGVmIERPU1RPUkVTVEFURTEzCisJY2FzZSAxMzoKKwkJc2hhMXJlY29tcHJlc3NfZmFzdF8xMyhpaHZpbiwgaWh2b3V0LCBtZTIsIHN0YXRlKTsKKwkJYnJlYWs7CisjZW5kaWYKKyNpZmRlZiBET1NUT1JFU1RBVEUxNAorCWNhc2UgMTQ6CisJCXNoYTFyZWNvbXByZXNzX2Zhc3RfMTQoaWh2aW4sIGlodm91dCwgbWUyLCBzdGF0ZSk7CisJCWJyZWFrOworI2VuZGlmCisjaWZkZWYgRE9TVE9SRVNUQVRFMTUKKwljYXNlIDE1OgorCQlzaGExcmVjb21wcmVzc19mYXN0XzE1KGlodmluLCBpaHZvdXQsIG1lMiwgc3RhdGUpOworCQlicmVhazsKKyNlbmRpZgorI2lmZGVmIERPU1RPUkVTVEFURTE2CisJY2FzZSAxNjoKKwkJc2hhMXJlY29tcHJlc3NfZmFzdF8xNihpaHZpbiwgaWh2b3V0LCBtZTIsIHN0YXRlKTsKKwkJYnJlYWs7CisjZW5kaWYKKyNpZmRlZiBET1NUT1JFU1RBVEUxNworCWNhc2UgMTc6CisJCXNoYTFyZWNvbXByZXNzX2Zhc3RfMTcoaWh2aW4sIGlodm91dCwgbWUyLCBzdGF0ZSk7CisJCWJyZWFrOworI2VuZGlmCisjaWZkZWYgRE9TVE9SRVNUQVRFMTgKKwljYXNlIDE4OgorCQlzaGExcmVjb21wcmVzc19mYXN0XzE4KGlodmluLCBpaHZvdXQsIG1lMiwgc3RhdGUpOworCQlicmVhazsKKyNlbmRpZgorI2lmZGVmIERPU1RPUkVTVEFURTE5CisJY2FzZSAxOToKKwkJc2hhMXJlY29tcHJlc3NfZmFzdF8xOShpaHZpbiwgaWh2b3V0LCBtZTIsIHN0YXRlKTsKKwkJYnJlYWs7CisjZW5kaWYKKyNpZmRlZiBET1NUT1JFU1RBVEUyMAorCWNhc2UgMjA6CisJCXNoYTFyZWNvbXByZXNzX2Zhc3RfMjAoaWh2aW4sIGlodm91dCwgbWUyLCBzdGF0ZSk7CisJCWJyZWFrOworI2VuZGlmCisjaWZkZWYgRE9TVE9SRVNUQVRFMjEKKwljYXNlIDIxOgorCQlzaGExcmVjb21wcmVzc19mYXN0XzIxKGlodmluLCBpaHZvdXQsIG1lMiwgc3RhdGUpOworCQlicmVhazsKKyNlbmRpZgorI2lmZGVmIERPU1RPUkVTVEFURTIyCisJY2FzZSAyMjoKKwkJc2hhMXJlY29tcHJlc3NfZmFzdF8yMihpaHZpbiwgaWh2b3V0LCBtZTIsIHN0YXRlKTsKKwkJYnJlYWs7CisjZW5kaWYKKyNpZmRlZiBET1NUT1JFU1RBVEUyMworCWNhc2UgMjM6CisJCXNoYTFyZWNvbXByZXNzX2Zhc3RfMjMoaWh2aW4sIGlodm91dCwgbWUyLCBzdGF0ZSk7CisJCWJyZWFrOworI2VuZGlmCisjaWZkZWYgRE9TVE9SRVNUQVRFMjQKKwljYXNlIDI0OgorCQlzaGExcmVjb21wcmVzc19mYXN0XzI0KGlodmluLCBpaHZvdXQsIG1lMiwgc3RhdGUpOworCQlicmVhazsKKyNlbmRpZgorI2lmZGVmIERPU1RPUkVTVEFURTI1CisJY2FzZSAyNToKKwkJc2hhMXJlY29tcHJlc3NfZmFzdF8yNShpaHZpbiwgaWh2b3V0LCBtZTIsIHN0YXRlKTsKKwkJYnJlYWs7CisjZW5kaWYKKyNpZmRlZiBET1NUT1JFU1RBVEUyNgorCWNhc2UgMjY6CisJCXNoYTFyZWNvbXByZXNzX2Zhc3RfMjYoaWh2aW4sIGlodm91dCwgbWUyLCBzdGF0ZSk7CisJCWJyZWFrOworI2VuZGlmCisjaWZkZWYgRE9TVE9SRVNUQVRFMjcKKwljYXNlIDI3OgorCQlzaGExcmVjb21wcmVzc19mYXN0XzI3KGlodmluLCBpaHZvdXQsIG1lMiwgc3RhdGUpOworCQlicmVhazsKKyNlbmRpZgorI2lmZGVmIERPU1RPUkVTVEFURTI4CisJY2FzZSAyODoKKwkJc2hhMXJlY29tcHJlc3NfZmFzdF8yOChpaHZpbiwgaWh2b3V0LCBtZTIsIHN0YXRlKTsKKwkJYnJlYWs7CisjZW5kaWYKKyNpZmRlZiBET1NUT1JFU1RBVEUyOQorCWNhc2UgMjk6CisJCXNoYTFyZWNvbXByZXNzX2Zhc3RfMjkoaWh2aW4sIGlodm91dCwgbWUyLCBzdGF0ZSk7CisJCWJyZWFrOworI2VuZGlmCisjaWZkZWYgRE9TVE9SRVNUQVRFMzAKKwljYXNlIDMwOgorCQlzaGExcmVjb21wcmVzc19mYXN0XzMwKGlodmluLCBpaHZvdXQsIG1lMiwgc3RhdGUpOworCQlicmVhazsKKyNlbmRpZgorI2lmZGVmIERPU1RPUkVTVEFURTMxCisJY2FzZSAzMToKKwkJc2hhMXJlY29tcHJlc3NfZmFzdF8zMShpaHZpbiwgaWh2b3V0LCBtZTIsIHN0YXRlKTsKKwkJYnJlYWs7CisjZW5kaWYKKyNpZmRlZiBET1NUT1JFU1RBVEUzMgorCWNhc2UgMzI6CisJCXNoYTFyZWNvbXByZXNzX2Zhc3RfMzIoaWh2aW4sIGlodm91dCwgbWUyLCBzdGF0ZSk7CisJCWJyZWFrOworI2VuZGlmCisjaWZkZWYgRE9TVE9SRVNUQVRFMzMKKwljYXNlIDMzOgorCQlzaGExcmVjb21wcmVzc19mYXN0XzMzKGlodmluLCBpaHZvdXQsIG1lMiwgc3RhdGUpOworCQlicmVhazsKKyNlbmRpZgorI2lmZGVmIERPU1RPUkVTVEFURTM0CisJY2FzZSAzNDoKKwkJc2hhMXJlY29tcHJlc3NfZmFzdF8zNChpaHZpbiwgaWh2b3V0LCBtZTIsIHN0YXRlKTsKKwkJYnJlYWs7CisjZW5kaWYKKyNpZmRlZiBET1NUT1JFU1RBVEUzNQorCWNhc2UgMzU6CisJCXNoYTFyZWNvbXByZXNzX2Zhc3RfMzUoaWh2aW4sIGlodm91dCwgbWUyLCBzdGF0ZSk7CisJCWJyZWFrOworI2VuZGlmCisjaWZkZWYgRE9TVE9SRVNUQVRFMzYKKwljYXNlIDM2OgorCQlzaGExcmVjb21wcmVzc19mYXN0XzM2KGlodmluLCBpaHZvdXQsIG1lMiwgc3RhdGUpOworCQlicmVhazsKKyNlbmRpZgorI2lmZGVmIERPU1RPUkVTVEFURTM3CisJY2FzZSAzNzoKKwkJc2hhMXJlY29tcHJlc3NfZmFzdF8zNyhpaHZpbiwgaWh2b3V0LCBtZTIsIHN0YXRlKTsKKwkJYnJlYWs7CisjZW5kaWYKKyNpZmRlZiBET1NUT1JFU1RBVEUzOAorCWNhc2UgMzg6CisJCXNoYTFyZWNvbXByZXNzX2Zhc3RfMzgoaWh2aW4sIGlodm91dCwgbWUyLCBzdGF0ZSk7CisJCWJyZWFrOworI2VuZGlmCisjaWZkZWYgRE9TVE9SRVNUQVRFMzkKKwljYXNlIDM5OgorCQlzaGExcmVjb21wcmVzc19mYXN0XzM5KGlodmluLCBpaHZvdXQsIG1lMiwgc3RhdGUpOworCQlicmVhazsKKyNlbmRpZgorI2lmZGVmIERPU1RPUkVTVEFURTQwCisJY2FzZSA0MDoKKwkJc2hhMXJlY29tcHJlc3NfZmFzdF80MChpaHZpbiwgaWh2b3V0LCBtZTIsIHN0YXRlKTsKKwkJYnJlYWs7CisjZW5kaWYKKyNpZmRlZiBET1NUT1JFU1RBVEU0MQorCWNhc2UgNDE6CisJCXNoYTFyZWNvbXByZXNzX2Zhc3RfNDEoaWh2aW4sIGlodm91dCwgbWUyLCBzdGF0ZSk7CisJCWJyZWFrOworI2VuZGlmCisjaWZkZWYgRE9TVE9SRVNUQVRFNDIKKwljYXNlIDQyOgorCQlzaGExcmVjb21wcmVzc19mYXN0XzQyKGlodmluLCBpaHZvdXQsIG1lMiwgc3RhdGUpOworCQlicmVhazsKKyNlbmRpZgorI2lmZGVmIERPU1RPUkVTVEFURTQzCisJY2FzZSA0MzoKKwkJc2hhMXJlY29tcHJlc3NfZmFzdF80MyhpaHZpbiwgaWh2b3V0LCBtZTIsIHN0YXRlKTsKKwkJYnJlYWs7CisjZW5kaWYKKyNpZmRlZiBET1NUT1JFU1RBVEU0NAorCWNhc2UgNDQ6CisJCXNoYTFyZWNvbXByZXNzX2Zhc3RfNDQoaWh2aW4sIGlodm91dCwgbWUyLCBzdGF0ZSk7CisJCWJyZWFrOworI2VuZGlmCisjaWZkZWYgRE9TVE9SRVNUQVRFNDUKKwljYXNlIDQ1OgorCQlzaGExcmVjb21wcmVzc19mYXN0XzQ1KGlodmluLCBpaHZvdXQsIG1lMiwgc3RhdGUpOworCQlicmVhazsKKyNlbmRpZgorI2lmZGVmIERPU1RPUkVTVEFURTQ2CisJY2FzZSA0NjoKKwkJc2hhMXJlY29tcHJlc3NfZmFzdF80NihpaHZpbiwgaWh2b3V0LCBtZTIsIHN0YXRlKTsKKwkJYnJlYWs7CisjZW5kaWYKKyNpZmRlZiBET1NUT1JFU1RBVEU0NworCWNhc2UgNDc6CisJCXNoYTFyZWNvbXByZXNzX2Zhc3RfNDcoaWh2aW4sIGlodm91dCwgbWUyLCBzdGF0ZSk7CisJCWJyZWFrOworI2VuZGlmCisjaWZkZWYgRE9TVE9SRVNUQVRFNDgKKwljYXNlIDQ4OgorCQlzaGExcmVjb21wcmVzc19mYXN0XzQ4KGlodmluLCBpaHZvdXQsIG1lMiwgc3RhdGUpOworCQlicmVhazsKKyNlbmRpZgorI2lmZGVmIERPU1RPUkVTVEFURTQ5CisJY2FzZSA0OToKKwkJc2hhMXJlY29tcHJlc3NfZmFzdF80OShpaHZpbiwgaWh2b3V0LCBtZTIsIHN0YXRlKTsKKwkJYnJlYWs7CisjZW5kaWYKKyNpZmRlZiBET1NUT1JFU1RBVEU1MAorCWNhc2UgNTA6CisJCXNoYTFyZWNvbXByZXNzX2Zhc3RfNTAoaWh2aW4sIGlodm91dCwgbWUyLCBzdGF0ZSk7CisJCWJyZWFrOworI2VuZGlmCisjaWZkZWYgRE9TVE9SRVNUQVRFNTEKKwljYXNlIDUxOgorCQlzaGExcmVjb21wcmVzc19mYXN0XzUxKGlodmluLCBpaHZvdXQsIG1lMiwgc3RhdGUpOworCQlicmVhazsKKyNlbmRpZgorI2lmZGVmIERPU1RPUkVTVEFURTUyCisJY2FzZSA1MjoKKwkJc2hhMXJlY29tcHJlc3NfZmFzdF81MihpaHZpbiwgaWh2b3V0LCBtZTIsIHN0YXRlKTsKKwkJYnJlYWs7CisjZW5kaWYKKyNpZmRlZiBET1NUT1JFU1RBVEU1MworCWNhc2UgNTM6CisJCXNoYTFyZWNvbXByZXNzX2Zhc3RfNTMoaWh2aW4sIGlodm91dCwgbWUyLCBzdGF0ZSk7CisJCWJyZWFrOworI2VuZGlmCisjaWZkZWYgRE9TVE9SRVNUQVRFNTQKKwljYXNlIDU0OgorCQlzaGExcmVjb21wcmVzc19mYXN0XzU0KGlodmluLCBpaHZvdXQsIG1lMiwgc3RhdGUpOworCQlicmVhazsKKyNlbmRpZgorI2lmZGVmIERPU1RPUkVTVEFURTU1CisJY2FzZSA1NToKKwkJc2hhMXJlY29tcHJlc3NfZmFzdF81NShpaHZpbiwgaWh2b3V0LCBtZTIsIHN0YXRlKTsKKwkJYnJlYWs7CisjZW5kaWYKKyNpZmRlZiBET1NUT1JFU1RBVEU1NgorCWNhc2UgNTY6CisJCXNoYTFyZWNvbXByZXNzX2Zhc3RfNTYoaWh2aW4sIGlodm91dCwgbWUyLCBzdGF0ZSk7CisJCWJyZWFrOworI2VuZGlmCisjaWZkZWYgRE9TVE9SRVNUQVRFNTcKKwljYXNlIDU3OgorCQlzaGExcmVjb21wcmVzc19mYXN0XzU3KGlodmluLCBpaHZvdXQsIG1lMiwgc3RhdGUpOworCQlicmVhazsKKyNlbmRpZgorI2lmZGVmIERPU1RPUkVTVEFURTU4CisJY2FzZSA1ODoKKwkJc2hhMXJlY29tcHJlc3NfZmFzdF81OChpaHZpbiwgaWh2b3V0LCBtZTIsIHN0YXRlKTsKKwkJYnJlYWs7CisjZW5kaWYKKyNpZmRlZiBET1NUT1JFU1RBVEU1OQorCWNhc2UgNTk6CisJCXNoYTFyZWNvbXByZXNzX2Zhc3RfNTkoaWh2aW4sIGlodm91dCwgbWUyLCBzdGF0ZSk7CisJCWJyZWFrOworI2VuZGlmCisjaWZkZWYgRE9TVE9SRVNUQVRFNjAKKwljYXNlIDYwOgorCQlzaGExcmVjb21wcmVzc19mYXN0XzYwKGlodmluLCBpaHZvdXQsIG1lMiwgc3RhdGUpOworCQlicmVhazsKKyNlbmRpZgorI2lmZGVmIERPU1RPUkVTVEFURTYxCisJY2FzZSA2MToKKwkJc2hhMXJlY29tcHJlc3NfZmFzdF82MShpaHZpbiwgaWh2b3V0LCBtZTIsIHN0YXRlKTsKKwkJYnJlYWs7CisjZW5kaWYKKyNpZmRlZiBET1NUT1JFU1RBVEU2MgorCWNhc2UgNjI6CisJCXNoYTFyZWNvbXByZXNzX2Zhc3RfNjIoaWh2aW4sIGlodm91dCwgbWUyLCBzdGF0ZSk7CisJCWJyZWFrOworI2VuZGlmCisjaWZkZWYgRE9TVE9SRVNUQVRFNjMKKwljYXNlIDYzOgorCQlzaGExcmVjb21wcmVzc19mYXN0XzYzKGlodmluLCBpaHZvdXQsIG1lMiwgc3RhdGUpOworCQlicmVhazsKKyNlbmRpZgorI2lmZGVmIERPU1RPUkVTVEFURTY0CisJY2FzZSA2NDoKKwkJc2hhMXJlY29tcHJlc3NfZmFzdF82NChpaHZpbiwgaWh2b3V0LCBtZTIsIHN0YXRlKTsKKwkJYnJlYWs7CisjZW5kaWYKKyNpZmRlZiBET1NUT1JFU1RBVEU2NQorCWNhc2UgNjU6CisJCXNoYTFyZWNvbXByZXNzX2Zhc3RfNjUoaWh2aW4sIGlodm91dCwgbWUyLCBzdGF0ZSk7CisJCWJyZWFrOworI2VuZGlmCisjaWZkZWYgRE9TVE9SRVNUQVRFNjYKKwljYXNlIDY2OgorCQlzaGExcmVjb21wcmVzc19mYXN0XzY2KGlodmluLCBpaHZvdXQsIG1lMiwgc3RhdGUpOworCQlicmVhazsKKyNlbmRpZgorI2lmZGVmIERPU1RPUkVTVEFURTY3CisJY2FzZSA2NzoKKwkJc2hhMXJlY29tcHJlc3NfZmFzdF82NyhpaHZpbiwgaWh2b3V0LCBtZTIsIHN0YXRlKTsKKwkJYnJlYWs7CisjZW5kaWYKKyNpZmRlZiBET1NUT1JFU1RBVEU2OAorCWNhc2UgNjg6CisJCXNoYTFyZWNvbXByZXNzX2Zhc3RfNjgoaWh2aW4sIGlodm91dCwgbWUyLCBzdGF0ZSk7CisJCWJyZWFrOworI2VuZGlmCisjaWZkZWYgRE9TVE9SRVNUQVRFNjkKKwljYXNlIDY5OgorCQlzaGExcmVjb21wcmVzc19mYXN0XzY5KGlodmluLCBpaHZvdXQsIG1lMiwgc3RhdGUpOworCQlicmVhazsKKyNlbmRpZgorI2lmZGVmIERPU1RPUkVTVEFURTcwCisJY2FzZSA3MDoKKwkJc2hhMXJlY29tcHJlc3NfZmFzdF83MChpaHZpbiwgaWh2b3V0LCBtZTIsIHN0YXRlKTsKKwkJYnJlYWs7CisjZW5kaWYKKyNpZmRlZiBET1NUT1JFU1RBVEU3MQorCWNhc2UgNzE6CisJCXNoYTFyZWNvbXByZXNzX2Zhc3RfNzEoaWh2aW4sIGlodm91dCwgbWUyLCBzdGF0ZSk7CisJCWJyZWFrOworI2VuZGlmCisjaWZkZWYgRE9TVE9SRVNUQVRFNzIKKwljYXNlIDcyOgorCQlzaGExcmVjb21wcmVzc19mYXN0XzcyKGlodmluLCBpaHZvdXQsIG1lMiwgc3RhdGUpOworCQlicmVhazsKKyNlbmRpZgorI2lmZGVmIERPU1RPUkVTVEFURTczCisJY2FzZSA3MzoKKwkJc2hhMXJlY29tcHJlc3NfZmFzdF83MyhpaHZpbiwgaWh2b3V0LCBtZTIsIHN0YXRlKTsKKwkJYnJlYWs7CisjZW5kaWYKKyNpZmRlZiBET1NUT1JFU1RBVEU3NAorCWNhc2UgNzQ6CisJCXNoYTFyZWNvbXByZXNzX2Zhc3RfNzQoaWh2aW4sIGlodm91dCwgbWUyLCBzdGF0ZSk7CisJCWJyZWFrOworI2VuZGlmCisjaWZkZWYgRE9TVE9SRVNUQVRFNzUKKwljYXNlIDc1OgorCQlzaGExcmVjb21wcmVzc19mYXN0Xzc1KGlodmluLCBpaHZvdXQsIG1lMiwgc3RhdGUpOworCQlicmVhazsKKyNlbmRpZgorI2lmZGVmIERPU1RPUkVTVEFURTc2CisJY2FzZSA3NjoKKwkJc2hhMXJlY29tcHJlc3NfZmFzdF83NihpaHZpbiwgaWh2b3V0LCBtZTIsIHN0YXRlKTsKKwkJYnJlYWs7CisjZW5kaWYKKyNpZmRlZiBET1NUT1JFU1RBVEU3NworCWNhc2UgNzc6CisJCXNoYTFyZWNvbXByZXNzX2Zhc3RfNzcoaWh2aW4sIGlodm91dCwgbWUyLCBzdGF0ZSk7CisJCWJyZWFrOworI2VuZGlmCisjaWZkZWYgRE9TVE9SRVNUQVRFNzgKKwljYXNlIDc4OgorCQlzaGExcmVjb21wcmVzc19mYXN0Xzc4KGlodmluLCBpaHZvdXQsIG1lMiwgc3RhdGUpOworCQlicmVhazsKKyNlbmRpZgorI2lmZGVmIERPU1RPUkVTVEFURTc5CisJY2FzZSA3OToKKwkJc2hhMXJlY29tcHJlc3NfZmFzdF83OShpaHZpbiwgaWh2b3V0LCBtZTIsIHN0YXRlKTsKKwkJYnJlYWs7CisjZW5kaWYKKwlkZWZhdWx0OgorCQlhYm9ydCgpOworCX0KKworfQorCisKKworc3RhdGljIHZvaWQgc2hhMV9wcm9jZXNzKFNIQTFfQ1RYKiBjdHgsIGNvbnN0IHVpbnQzMl90IGJsb2NrWzE2XSkKK3sKKwl1bnNpZ25lZCBpLCBqOworCXVpbnQzMl90IHViY19kdl9tYXNrW0RWTUFTS1NJWkVdID0geyAweEZGRkZGRkZGIH07CisJdWludDMyX3QgaWh2dG1wWzVdOworCisJY3R4LT5paHYxWzBdID0gY3R4LT5paHZbMF07CisJY3R4LT5paHYxWzFdID0gY3R4LT5paHZbMV07CisJY3R4LT5paHYxWzJdID0gY3R4LT5paHZbMl07CisJY3R4LT5paHYxWzNdID0gY3R4LT5paHZbM107CisJY3R4LT5paHYxWzRdID0gY3R4LT5paHZbNF07CisKKwlzaGExX2NvbXByZXNzaW9uX3N0YXRlcyhjdHgtPmlodiwgYmxvY2ssIGN0eC0+bTEsIGN0eC0+c3RhdGVzKTsKKworCWlmIChjdHgtPmRldGVjdF9jb2xsKQorCXsKKwkJaWYgKGN0eC0+dWJjX2NoZWNrKQorCQl7CisJCQl1YmNfY2hlY2soY3R4LT5tMSwgdWJjX2R2X21hc2spOworCQl9CisKKwkJaWYgKHViY19kdl9tYXNrWzBdICE9IDApCisJCXsKKwkJCWZvciAoaSA9IDA7IHNoYTFfZHZzW2ldLmR2VHlwZSAhPSAwOyArK2kpCisJCQl7CisJCQkJaWYgKHViY19kdl9tYXNrWzBdICYgKCh1aW50MzJfdCkoMSkgPDwgc2hhMV9kdnNbaV0ubWFza2IpKQorCQkJCXsKKwkJCQkJZm9yIChqID0gMDsgaiA8IDgwOyArK2opCisJCQkJCQljdHgtPm0yW2pdID0gY3R4LT5tMVtqXSBeIHNoYTFfZHZzW2ldLmRtW2pdOworCisJCQkJCXNoYTFfcmVjb21wcmVzc2lvbl9zdGVwKHNoYTFfZHZzW2ldLnRlc3R0LCBjdHgtPmlodjIsIGlodnRtcCwgY3R4LT5tMiwgY3R4LT5zdGF0ZXNbc2hhMV9kdnNbaV0udGVzdHRdKTsKKworCQkJCQkvKiB0byB2ZXJpZnkgU0hBLTEgY29sbGlzaW9uIGRldGVjdGlvbiBjb2RlIHdpdGggY29sbGlzaW9ucyBmb3IgcmVkdWNlZC1zdGVwIFNIQS0xICovCisJCQkJCWlmICgoMCA9PSAoKGlodnRtcFswXSBeIGN0eC0+aWh2WzBdKSB8IChpaHZ0bXBbMV0gXiBjdHgtPmlodlsxXSkgfCAoaWh2dG1wWzJdIF4gY3R4LT5paHZbMl0pIHwgKGlodnRtcFszXSBeIGN0eC0+aWh2WzNdKSB8IChpaHZ0bXBbNF0gXiBjdHgtPmlodls0XSkpKQorCQkJCQkJfHwgKGN0eC0+cmVkdWNlZF9yb3VuZF9jb2xsICYmIDA9PSgoY3R4LT5paHYxWzBdIF4gY3R4LT5paHYyWzBdKSB8IChjdHgtPmlodjFbMV0gXiBjdHgtPmlodjJbMV0pIHwgKGN0eC0+aWh2MVsyXSBeIGN0eC0+aWh2MlsyXSkgfCAoY3R4LT5paHYxWzNdIF4gY3R4LT5paHYyWzNdKSB8IChjdHgtPmlodjFbNF0gXiBjdHgtPmlodjJbNF0pKSkpCisJCQkJCXsKKwkJCQkJCWN0eC0+Zm91bmRfY29sbGlzaW9uID0gMTsKKworCQkJCQkJaWYgKGN0eC0+c2FmZV9oYXNoKQorCQkJCQkJeworCQkJCQkJCXNoYTFfY29tcHJlc3Npb25fVyhjdHgtPmlodiwgY3R4LT5tMSk7CisJCQkJCQkJc2hhMV9jb21wcmVzc2lvbl9XKGN0eC0+aWh2LCBjdHgtPm0xKTsKKwkJCQkJCX0KKworCQkJCQkJYnJlYWs7CisJCQkJCX0KKwkJCQl9CisJCQl9CisJCX0KKwl9Cit9CisKK3ZvaWQgU0hBMURDSW5pdChTSEExX0NUWCogY3R4KQoreworCWN0eC0+dG90YWwgPSAwOworCWN0eC0+aWh2WzBdID0gMHg2NzQ1MjMwMTsKKwljdHgtPmlodlsxXSA9IDB4RUZDREFCODk7CisJY3R4LT5paHZbMl0gPSAweDk4QkFEQ0ZFOworCWN0eC0+aWh2WzNdID0gMHgxMDMyNTQ3NjsKKwljdHgtPmlodls0XSA9IDB4QzNEMkUxRjA7CisJY3R4LT5mb3VuZF9jb2xsaXNpb24gPSAwOworCWN0eC0+c2FmZV9oYXNoID0gU0hBMURDX0lOSVRfU0FGRV9IQVNIX0RFRkFVTFQ7CisJY3R4LT51YmNfY2hlY2sgPSAxOworCWN0eC0+ZGV0ZWN0X2NvbGwgPSAxOworCWN0eC0+cmVkdWNlZF9yb3VuZF9jb2xsID0gMDsKKwljdHgtPmNhbGxiYWNrID0gTlVMTDsKK30KKwordm9pZCBTSEExRENTZXRTYWZlSGFzaChTSEExX0NUWCogY3R4LCBpbnQgc2FmZWhhc2gpCit7CisJaWYgKHNhZmVoYXNoKQorCQljdHgtPnNhZmVfaGFzaCA9IDE7CisJZWxzZQorCQljdHgtPnNhZmVfaGFzaCA9IDA7Cit9CisKKwordm9pZCBTSEExRENTZXRVc2VVQkMoU0hBMV9DVFgqIGN0eCwgaW50IHViY19jaGVjaykKK3sKKwlpZiAodWJjX2NoZWNrKQorCQljdHgtPnViY19jaGVjayA9IDE7CisJZWxzZQorCQljdHgtPnViY19jaGVjayA9IDA7Cit9CisKK3ZvaWQgU0hBMURDU2V0VXNlRGV0ZWN0Q29sbChTSEExX0NUWCogY3R4LCBpbnQgZGV0ZWN0X2NvbGwpCit7CisJaWYgKGRldGVjdF9jb2xsKQorCQljdHgtPmRldGVjdF9jb2xsID0gMTsKKwllbHNlCisJCWN0eC0+ZGV0ZWN0X2NvbGwgPSAwOworfQorCit2b2lkIFNIQTFEQ1NldERldGVjdFJlZHVjZWRSb3VuZENvbGxpc2lvbihTSEExX0NUWCogY3R4LCBpbnQgcmVkdWNlZF9yb3VuZF9jb2xsKQoreworCWlmIChyZWR1Y2VkX3JvdW5kX2NvbGwpCisJCWN0eC0+cmVkdWNlZF9yb3VuZF9jb2xsID0gMTsKKwllbHNlCisJCWN0eC0+cmVkdWNlZF9yb3VuZF9jb2xsID0gMDsKK30KKwordm9pZCBTSEExRENTZXRDYWxsYmFjayhTSEExX0NUWCogY3R4LCBjb2xsaXNpb25fYmxvY2tfY2FsbGJhY2sgY2FsbGJhY2spCit7CisJY3R4LT5jYWxsYmFjayA9IGNhbGxiYWNrOworfQorCit2b2lkIFNIQTFEQ1VwZGF0ZShTSEExX0NUWCogY3R4LCBjb25zdCBjaGFyKiBidWYsIHNpemVfdCBsZW4pCit7CisJdW5zaWduZWQgbGVmdCwgZmlsbDsKKworCWlmIChsZW4gPT0gMCkKKwkJcmV0dXJuOworCisJbGVmdCA9IGN0eC0+dG90YWwgJiA2MzsKKwlmaWxsID0gNjQgLSBsZWZ0OworCisJaWYgKGxlZnQgJiYgbGVuID49IGZpbGwpCisJeworCQljdHgtPnRvdGFsICs9IGZpbGw7CisJCW1lbWNweShjdHgtPmJ1ZmZlciArIGxlZnQsIGJ1ZiwgZmlsbCk7CisJCXNoYTFfcHJvY2VzcyhjdHgsICh1aW50MzJfdCopKGN0eC0+YnVmZmVyKSk7CisJCWJ1ZiArPSBmaWxsOworCQlsZW4gLT0gZmlsbDsKKwkJbGVmdCA9IDA7CisJfQorCXdoaWxlIChsZW4gPj0gNjQpCisJeworCQljdHgtPnRvdGFsICs9IDY0OworCisjaWYgZGVmaW5lZChTSEExRENfQUxMT1dfVU5BTElHTkVEX0FDQ0VTUykKKwkJc2hhMV9wcm9jZXNzKGN0eCwgKHVpbnQzMl90KikoYnVmKSk7CisjZWxzZQorCQltZW1jcHkoY3R4LT5idWZmZXIsIGJ1ZiwgNjQpOworCQlzaGExX3Byb2Nlc3MoY3R4LCAodWludDMyX3QqKShjdHgtPmJ1ZmZlcikpOworI2VuZGlmIC8qIGRlZmluZWQoU0hBMURDX0FMTE9XX1VOQUxJR05FRF9BQ0NFU1MpICovCisJCWJ1ZiArPSA2NDsKKwkJbGVuIC09IDY0OworCX0KKwlpZiAobGVuID4gMCkKKwl7CisJCWN0eC0+dG90YWwgKz0gbGVuOworCQltZW1jcHkoY3R4LT5idWZmZXIgKyBsZWZ0LCBidWYsIGxlbik7CisJfQorfQorCitzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBzaGExX3BhZGRpbmdbNjRdID0KK3sKKwkweDgwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLAorCTAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsCisJMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwKKwkwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwCit9OworCitpbnQgU0hBMURDRmluYWwodW5zaWduZWQgY2hhciBvdXRwdXRbMjBdLCBTSEExX0NUWCAqY3R4KQoreworCXVpbnQzMl90IGxhc3QgPSBjdHgtPnRvdGFsICYgNjM7CisJdWludDMyX3QgcGFkbiA9IChsYXN0IDwgNTYpID8gKDU2IC0gbGFzdCkgOiAoMTIwIC0gbGFzdCk7CisJdWludDY0X3QgdG90YWw7CisJU0hBMURDVXBkYXRlKGN0eCwgKGNvbnN0IGNoYXIqKShzaGExX3BhZGRpbmcpLCBwYWRuKTsKKworCXRvdGFsID0gY3R4LT50b3RhbCAtIHBhZG47CisJdG90YWwgPDw9IDM7CisJY3R4LT5idWZmZXJbNTZdID0gKHVuc2lnbmVkIGNoYXIpKHRvdGFsID4+IDU2KTsKKwljdHgtPmJ1ZmZlcls1N10gPSAodW5zaWduZWQgY2hhcikodG90YWwgPj4gNDgpOworCWN0eC0+YnVmZmVyWzU4XSA9ICh1bnNpZ25lZCBjaGFyKSh0b3RhbCA+PiA0MCk7CisJY3R4LT5idWZmZXJbNTldID0gKHVuc2lnbmVkIGNoYXIpKHRvdGFsID4+IDMyKTsKKwljdHgtPmJ1ZmZlcls2MF0gPSAodW5zaWduZWQgY2hhcikodG90YWwgPj4gMjQpOworCWN0eC0+YnVmZmVyWzYxXSA9ICh1bnNpZ25lZCBjaGFyKSh0b3RhbCA+PiAxNik7CisJY3R4LT5idWZmZXJbNjJdID0gKHVuc2lnbmVkIGNoYXIpKHRvdGFsID4+IDgpOworCWN0eC0+YnVmZmVyWzYzXSA9ICh1bnNpZ25lZCBjaGFyKSh0b3RhbCk7CisJc2hhMV9wcm9jZXNzKGN0eCwgKHVpbnQzMl90KikoY3R4LT5idWZmZXIpKTsKKwlvdXRwdXRbMF0gPSAodW5zaWduZWQgY2hhcikoY3R4LT5paHZbMF0gPj4gMjQpOworCW91dHB1dFsxXSA9ICh1bnNpZ25lZCBjaGFyKShjdHgtPmlodlswXSA+PiAxNik7CisJb3V0cHV0WzJdID0gKHVuc2lnbmVkIGNoYXIpKGN0eC0+aWh2WzBdID4+IDgpOworCW91dHB1dFszXSA9ICh1bnNpZ25lZCBjaGFyKShjdHgtPmlodlswXSk7CisJb3V0cHV0WzRdID0gKHVuc2lnbmVkIGNoYXIpKGN0eC0+aWh2WzFdID4+IDI0KTsKKwlvdXRwdXRbNV0gPSAodW5zaWduZWQgY2hhcikoY3R4LT5paHZbMV0gPj4gMTYpOworCW91dHB1dFs2XSA9ICh1bnNpZ25lZCBjaGFyKShjdHgtPmlodlsxXSA+PiA4KTsKKwlvdXRwdXRbN10gPSAodW5zaWduZWQgY2hhcikoY3R4LT5paHZbMV0pOworCW91dHB1dFs4XSA9ICh1bnNpZ25lZCBjaGFyKShjdHgtPmlodlsyXSA+PiAyNCk7CisJb3V0cHV0WzldID0gKHVuc2lnbmVkIGNoYXIpKGN0eC0+aWh2WzJdID4+IDE2KTsKKwlvdXRwdXRbMTBdID0gKHVuc2lnbmVkIGNoYXIpKGN0eC0+aWh2WzJdID4+IDgpOworCW91dHB1dFsxMV0gPSAodW5zaWduZWQgY2hhcikoY3R4LT5paHZbMl0pOworCW91dHB1dFsxMl0gPSAodW5zaWduZWQgY2hhcikoY3R4LT5paHZbM10gPj4gMjQpOworCW91dHB1dFsxM10gPSAodW5zaWduZWQgY2hhcikoY3R4LT5paHZbM10gPj4gMTYpOworCW91dHB1dFsxNF0gPSAodW5zaWduZWQgY2hhcikoY3R4LT5paHZbM10gPj4gOCk7CisJb3V0cHV0WzE1XSA9ICh1bnNpZ25lZCBjaGFyKShjdHgtPmlodlszXSk7CisJb3V0cHV0WzE2XSA9ICh1bnNpZ25lZCBjaGFyKShjdHgtPmlodls0XSA+PiAyNCk7CisJb3V0cHV0WzE3XSA9ICh1bnNpZ25lZCBjaGFyKShjdHgtPmlodls0XSA+PiAxNik7CisJb3V0cHV0WzE4XSA9ICh1bnNpZ25lZCBjaGFyKShjdHgtPmlodls0XSA+PiA4KTsKKwlvdXRwdXRbMTldID0gKHVuc2lnbmVkIGNoYXIpKGN0eC0+aWh2WzRdKTsKKwlyZXR1cm4gY3R4LT5mb3VuZF9jb2xsaXNpb247Cit9CisKKyNpZmRlZiBTSEExRENfQ1VTVE9NX1RSQUlMSU5HX0lOQ0xVREVfU0hBMV9DCisjaW5jbHVkZSBTSEExRENfQ1VTVE9NX1RSQUlMSU5HX0lOQ0xVREVfU0hBMV9DCisjZW5kaWYKZGlmZiAtLWdpdCBhL3NyYy9oYXNoL3NoYTFkYy9zaGExLmggYi9zcmMvaGFzaC9zaGExZGMvc2hhMS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjFlNGU5NGIKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvaGFzaC9zaGExZGMvc2hhMS5oCkBAIC0wLDAgKzEsMTEwIEBACisvKioqCisqIENvcHlyaWdodCAyMDE3IE1hcmMgU3RldmVucyA8bWFyY0BtYXJjLXN0ZXZlbnMubmw+LCBEYW4gU2h1bW93IDxkYW5zaHVAbWljcm9zb2Z0LmNvbT4KKyogRGlzdHJpYnV0ZWQgdW5kZXIgdGhlIE1JVCBTb2Z0d2FyZSBMaWNlbnNlLgorKiBTZWUgYWNjb21wYW55aW5nIGZpbGUgTElDRU5TRS50eHQgb3IgY29weSBhdAorKiBodHRwczovL29wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL01JVAorKioqLworCisjaWZuZGVmIFNIQTFEQ19TSEExX0gKKyNkZWZpbmUgU0hBMURDX1NIQTFfSAorCisjaWYgZGVmaW5lZChfX2NwbHVzcGx1cykKK2V4dGVybiAiQyIgeworI2VuZGlmCisKKyNpZm5kZWYgU0hBMURDX05PX1NUQU5EQVJEX0lOQ0xVREVTCisjaW5jbHVkZSA8c3RkaW50Lmg+CisjZW5kaWYKKworLyogc2hhLTEgY29tcHJlc3Npb24gZnVuY3Rpb24gdGhhdCB0YWtlcyBhbiBhbHJlYWR5IGV4cGFuZGVkIG1lc3NhZ2UsIGFuZCBhZGRpdGlvbmFsbHkgc3RvcmUgaW50ZXJtZWRpYXRlIHN0YXRlcyAqLworLyogb25seSBzdG9yZXMgc3RhdGVzIGlpICh0aGUgc3RhdGUgYmV0d2VlbiBzdGVwIGlpLTEgYW5kIHN0ZXAgaWkpIHdoZW4gRE9TVE9SRVNUQVRFaWkgaXMgZGVmaW5lZCBpbiB1YmNfY2hlY2suaCAqLwordm9pZCBzaGExX2NvbXByZXNzaW9uX3N0YXRlcyh1aW50MzJfdFs1XSwgY29uc3QgdWludDMyX3RbMTZdLCB1aW50MzJfdFs4MF0sIHVpbnQzMl90WzgwXVs1XSk7CisKKy8qCisvLyBGdW5jdGlvbiB0eXBlIGZvciBzaGExX3JlY29tcHJlc3Npb25fc3RlcF9UICh1aW50MzJfdCBpaHZpbls1XSwgdWludDMyX3QgaWh2b3V0WzVdLCBjb25zdCB1aW50MzJfdCBtZTJbODBdLCBjb25zdCB1aW50MzJfdCBzdGF0ZVs1XSkuCisvLyBXaGVyZSAwIDw9IFQgPCA4MAorLy8gICAgICAgbWUyIGlzIGFuIGV4cGFuZGVkIG1lc3NhZ2UgKHRoZSBleHBhbnNpb24gb2YgYW4gb3JpZ2luYWwgbWVzc2FnZSBibG9jayBYT1InZWQgd2l0aCBhIGRpc3R1cmJhbmNlIHZlY3RvcidzIG1lc3NhZ2UgYmxvY2sgZGlmZmVyZW5jZS4pCisvLyAgICAgICBzdGF0ZSBpcyB0aGUgaW50ZXJuYWwgc3RhdGUgKGEsYixjLGQsZSkgYmVmb3JlIHN0ZXAgVCBvZiB0aGUgU0hBLTEgY29tcHJlc3Npb24gZnVuY3Rpb24gd2hpbGUgcHJvY2Vzc2luZyB0aGUgb3JpZ2luYWwgbWVzc2FnZSBibG9jay4KKy8vIFRoZSBmdW5jdGlvbiB3aWxsIHJldHVybjoKKy8vICAgICAgIGlodmluOiBUaGUgcmVjb25zdHJ1Y3RlZCBpbnB1dCBjaGFpbmluZyB2YWx1ZS4KKy8vICAgICAgIGlodm91dDogVGhlIHJlY29uc3RydWN0ZWQgb3V0cHV0IGNoYWluaW5nIHZhbHVlLgorKi8KK3R5cGVkZWYgdm9pZCgqc2hhMV9yZWNvbXByZXNzaW9uX3R5cGUpKHVpbnQzMl90KiwgdWludDMyX3QqLCBjb25zdCB1aW50MzJfdCosIGNvbnN0IHVpbnQzMl90Kik7CisKKy8qIEEgY2FsbGJhY2sgZnVuY3Rpb24gdHlwZSB0aGF0IGNhbiBiZSBzZXQgdG8gYmUgY2FsbGVkIHdoZW4gYSBjb2xsaXNpb24gYmxvY2sgaGFzIGJlZW4gZm91bmQ6ICovCisvKiB2b2lkIGNvbGxpc2lvbl9ibG9ja19jYWxsYmFjayh1aW50NjRfdCBieXRlb2Zmc2V0LCBjb25zdCB1aW50MzJfdCBpaHZpbjFbNV0sIGNvbnN0IHVpbnQzMl90IGlodmluMls1XSwgY29uc3QgdWludDMyX3QgbTFbODBdLCBjb25zdCB1aW50MzJfdCBtMls4MF0pICovCit0eXBlZGVmIHZvaWQoKmNvbGxpc2lvbl9ibG9ja19jYWxsYmFjaykodWludDY0X3QsIGNvbnN0IHVpbnQzMl90KiwgY29uc3QgdWludDMyX3QqLCBjb25zdCB1aW50MzJfdCosIGNvbnN0IHVpbnQzMl90Kik7CisKKy8qIFRoZSBTSEEtMSBjb250ZXh0LiAqLwordHlwZWRlZiBzdHJ1Y3QgeworCXVpbnQ2NF90IHRvdGFsOworCXVpbnQzMl90IGlodls1XTsKKwl1bnNpZ25lZCBjaGFyIGJ1ZmZlcls2NF07CisJaW50IGZvdW5kX2NvbGxpc2lvbjsKKwlpbnQgc2FmZV9oYXNoOworCWludCBkZXRlY3RfY29sbDsKKwlpbnQgdWJjX2NoZWNrOworCWludCByZWR1Y2VkX3JvdW5kX2NvbGw7CisJY29sbGlzaW9uX2Jsb2NrX2NhbGxiYWNrIGNhbGxiYWNrOworCisJdWludDMyX3QgaWh2MVs1XTsKKwl1aW50MzJfdCBpaHYyWzVdOworCXVpbnQzMl90IG0xWzgwXTsKKwl1aW50MzJfdCBtMls4MF07CisJdWludDMyX3Qgc3RhdGVzWzgwXVs1XTsKK30gU0hBMV9DVFg7CisKKy8qIEluaXRpYWxpemUgU0hBLTEgY29udGV4dC4gKi8KK3ZvaWQgU0hBMURDSW5pdChTSEExX0NUWCopOworCisvKgorICAgIEZ1bmN0aW9uIHRvIGVuYWJsZSBzYWZlIFNIQS0xIGhhc2hpbmc6CisgICAgQ29sbGlzaW9uIGF0dGFja3MgYXJlIHRod2FydGVkIGJ5IGhhc2hpbmcgYSBkZXRlY3RlZCBuZWFyLWNvbGxpc2lvbiBibG9jayAzIHRpbWVzLgorICAgIFRoaW5rIG9mIGl0IGFzIGV4dGVuZGluZyBTSEEtMSBmcm9tIDgwLXN0ZXBzIHRvIDI0MC1zdGVwcyBmb3Igc3VjaCBibG9ja3M6CisgICAgICAgIFRoZSBiZXN0IGNvbGxpc2lvbiBhdHRhY2tzIGFnYWluc3QgU0hBLTEgaGF2ZSBjb21wbGV4aXR5IGFib3V0IDJeNjAsCisgICAgICAgIHRodXMgZm9yIDI0MC1zdGVwcyBhbiBpbW1lZGlhdGUgbG93ZXItYm91bmQgZm9yIHRoZSBiZXN0IGNyeXB0YW5hbHl0aWMgYXR0YWNrcyB3b3VsZCBiZSAyXjE4MC4KKyAgICAgICAgQW4gYXR0YWNrZXIgd291bGQgYmUgYmV0dGVyIG9mZiB1c2luZyBhIGdlbmVyaWMgYmlydGhkYXkgc2VhcmNoIG9mIGNvbXBsZXhpdHkgMl44MC4KKworICAgRW5hYmxpbmcgc2FmZSBTSEEtMSBoYXNoaW5nIHdpbGwgcmVzdWx0IGluIHRoZSBjb3JyZWN0IFNIQS0xIGhhc2ggZm9yIG1lc3NhZ2VzIHdoZXJlIG5vIGNvbGxpc2lvbiBhdHRhY2sgd2FzIGRldGVjdGVkLAorICAgYnV0IGl0IHdpbGwgcmVzdWx0IGluIGEgZGlmZmVyZW50IFNIQS0xIGhhc2ggZm9yIG1lc3NhZ2VzIHdoZXJlIGEgY29sbGlzaW9uIGF0dGFjayB3YXMgZGV0ZWN0ZWQuCisgICBUaGlzIHdpbGwgYXV0b21hdGljYWxseSBpbnZhbGlkYXRlIFNIQS0xIGJhc2VkIGRpZ2l0YWwgc2lnbmF0dXJlIGZvcmdlcmllcy4KKyAgIEVuYWJsZWQgYnkgZGVmYXVsdC4KKyovCit2b2lkIFNIQTFEQ1NldFNhZmVIYXNoKFNIQTFfQ1RYKiwgaW50KTsKKworLyoKKyAgICBGdW5jdGlvbiB0byBkaXNhYmxlIG9yIGVuYWJsZSB0aGUgdXNlIG9mIFVuYXZvaWRhYmxlIEJpdGNvbmRpdGlvbnMgKHByb3ZpZGVzIGEgc2lnbmlmaWNhbnQgc3BlZWQgdXApLgorICAgIEVuYWJsZWQgYnkgZGVmYXVsdAorICovCit2b2lkIFNIQTFEQ1NldFVzZVVCQyhTSEExX0NUWCosIGludCk7CisKKy8qCisgICAgRnVuY3Rpb24gdG8gZGlzYWJsZSBvciBlbmFibGUgdGhlIHVzZSBvZiBDb2xsaXNpb24gRGV0ZWN0aW9uLgorICAgIEVuYWJsZWQgYnkgZGVmYXVsdC4KKyAqLwordm9pZCBTSEExRENTZXRVc2VEZXRlY3RDb2xsKFNIQTFfQ1RYKiwgaW50KTsKKworLyogZnVuY3Rpb24gdG8gZGlzYWJsZSBvciBlbmFibGUgdGhlIGRldGVjdGlvbiBvZiByZWR1Y2VkLXJvdW5kIFNIQS0xIGNvbGxpc2lvbnMgKi8KKy8qIGRpc2FibGVkIGJ5IGRlZmF1bHQgKi8KK3ZvaWQgU0hBMURDU2V0RGV0ZWN0UmVkdWNlZFJvdW5kQ29sbGlzaW9uKFNIQTFfQ1RYKiwgaW50KTsKKworLyogZnVuY3Rpb24gdG8gc2V0IGEgY2FsbGJhY2sgZnVuY3Rpb24sIHBhc3MgTlVMTCB0byBkaXNhYmxlICovCisvKiBieSBkZWZhdWx0IG5vIGNhbGxiYWNrIHNldCAqLwordm9pZCBTSEExRENTZXRDYWxsYmFjayhTSEExX0NUWCosIGNvbGxpc2lvbl9ibG9ja19jYWxsYmFjayk7CisKKy8qIHVwZGF0ZSBTSEEtMSBjb250ZXh0IHdpdGggYnVmZmVyIGNvbnRlbnRzICovCit2b2lkIFNIQTFEQ1VwZGF0ZShTSEExX0NUWCosIGNvbnN0IGNoYXIqLCBzaXplX3QpOworCisvKiBvYnRhaW4gU0hBLTEgaGFzaCBmcm9tIFNIQS0xIGNvbnRleHQgKi8KKy8qIHJldHVybnM6IDAgPSBubyBjb2xsaXNpb24gZGV0ZWN0ZWQsIG90aGVyd2lzZSA9IGNvbGxpc2lvbiBmb3VuZCA9PiB3YXJuIHVzZXIgZm9yIGFjdGl2ZSBhdHRhY2sgKi8KK2ludCAgU0hBMURDRmluYWwodW5zaWduZWQgY2hhclsyMF0sIFNIQTFfQ1RYKik7CisKKyNpZiBkZWZpbmVkKF9fY3BsdXNwbHVzKQorfQorI2VuZGlmCisKKyNpZmRlZiBTSEExRENfQ1VTVE9NX1RSQUlMSU5HX0lOQ0xVREVfU0hBMV9ICisjaW5jbHVkZSBTSEExRENfQ1VTVE9NX1RSQUlMSU5HX0lOQ0xVREVfU0hBMV9ICisjZW5kaWYKKworI2VuZGlmCmRpZmYgLS1naXQgYS9zcmMvaGFzaC9zaGExZGMvdWJjX2NoZWNrLmMgYi9zcmMvaGFzaC9zaGExZGMvdWJjX2NoZWNrLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjNiZWZmMgotLS0gL2Rldi9udWxsCisrKyBiL3NyYy9oYXNoL3NoYTFkYy91YmNfY2hlY2suYwpAQCAtMCwwICsxLDM3MiBAQAorLyoqKgorKiBDb3B5cmlnaHQgMjAxNyBNYXJjIFN0ZXZlbnMgPG1hcmNAbWFyYy1zdGV2ZW5zLm5sPiwgRGFuIFNodW1vdyA8ZGFuc2h1QG1pY3Jvc29mdC5jb20+CisqIERpc3RyaWJ1dGVkIHVuZGVyIHRoZSBNSVQgU29mdHdhcmUgTGljZW5zZS4KKyogU2VlIGFjY29tcGFueWluZyBmaWxlIExJQ0VOU0UudHh0IG9yIGNvcHkgYXQKKyogaHR0cHM6Ly9vcGVuc291cmNlLm9yZy9saWNlbnNlcy9NSVQKKyoqKi8KKworLyoKKy8vIHRoaXMgZmlsZSB3YXMgZ2VuZXJhdGVkIGJ5IHRoZSAncGFyc2VfYml0cmVsJyBwcm9ncmFtIGluIHRoZSB0b29scyBzZWN0aW9uCisvLyB1c2luZyB0aGUgZGF0YSBmaWxlcyBmcm9tIGRpcmVjdG9yeSAndG9vbHMvZGF0YS8zNTY1JworLy8KKy8vIHNoYTFfZHZzIGNvbnRhaW5zIGEgbGlzdCBvZiBTSEEtMSBEaXN0dXJiYW5jZSBWZWN0b3JzIChEVikgdG8gY2hlY2sKKy8vIGR2VHlwZSwgZHZLIGFuZCBkdkIgZGVmaW5lIHRoZSBEVjogSShLLEIpIG9yIElJKEssQikgKHNlZSB0aGUgcGFwZXIpCisvLyBkbVs4MF0gaXMgdGhlIGV4cGFuZGVkIG1lc3NhZ2UgYmxvY2sgWE9SLWRpZmZlcmVuY2UgZGVmaW5lZCBieSB0aGUgRFYKKy8vIHRlc3R0IGlzIHRoZSBzdGVwIHRvIGRvIHRoZSByZWNvbXByZXNzaW9uIGZyb20gZm9yIGNvbGxpc2lvbiBkZXRlY3Rpb24KKy8vIG1hc2tpIGFuZCBtYXNrYiBkZWZpbmUgdGhlIGJpdCB0byBjaGVjayBmb3IgZWFjaCBEViBpbiB0aGUgZHZtYXNrIHJldHVybmVkIGJ5IHViY19jaGVjaworLy8KKy8vIHViY19jaGVjayB0YWtlcyBhcyBpbnB1dCBhbiBleHBhbmRlZCBtZXNzYWdlIGJsb2NrIGFuZCB2ZXJpZmllcyB0aGUgdW5hdm9pZGFibGUgYml0Y29uZGl0aW9ucyBmb3IgYWxsIGxpc3RlZCBEVnMKKy8vIGl0IHJldHVybnMgYSBkdm1hc2sgd2hlcmUgZWFjaCBiaXQgYmVsb25naW5nIHRvIGEgRFYgaXMgc2V0IGlmIGFsbCB1bmF2b2lkYWJsZSBiaXRjb25kaXRpb25zIGZvciB0aGF0IERWIGhhdmUgYmVlbiBtZXQKKy8vIHRodXMgb25lIG5lZWRzIHRvIGRvIHRoZSByZWNvbXByZXNzaW9uIGNoZWNrIGZvciBlYWNoIERWIHRoYXQgaGFzIGl0cyBiaXQgc2V0CisvLworLy8gdWJjX2NoZWNrIGlzIHByb2dyYW1tYXRpY2FsbHkgZ2VuZXJhdGVkIGFuZCB0aGUgdW5hdm9pZGFibGUgYml0Y29uZGl0aW9ucyBoYXZlIGJlZW4gaGFyZGNvZGVkCisvLyBhIGRpcmVjdGx5IHZlcmlmaWFibGUgdmVyc2lvbiBuYW1lZCB1YmNfY2hlY2tfdmVyaWZ5IGNhbiBiZSBmb3VuZCBpbiB1YmNfY2hlY2tfdmVyaWZ5LmMKKy8vIHViY19jaGVjayBoYXMgYmVlbiB2ZXJpZmllZCBhZ2FpbnN0IHViY19jaGVja192ZXJpZnkgdXNpbmcgdGhlICd1YmNfY2hlY2tfdGVzdCcgcHJvZ3JhbSBpbiB0aGUgdG9vbHMgc2VjdGlvbgorKi8KKworI2lmbmRlZiBTSEExRENfTk9fU1RBTkRBUkRfSU5DTFVERVMKKyNpbmNsdWRlIDxzdGRpbnQuaD4KKyNlbmRpZgorI2lmZGVmIFNIQTFEQ19DVVNUT01fSU5DTFVERV9VQkNfQ0hFQ0tfQworI2luY2x1ZGUgU0hBMURDX0NVU1RPTV9JTkNMVURFX1VCQ19DSEVDS19DCisjZW5kaWYKKyNpbmNsdWRlICJ1YmNfY2hlY2suaCIKKworc3RhdGljIGNvbnN0IHVpbnQzMl90IERWX0lfNDNfMF9iaXQgCT0gKHVpbnQzMl90KSgxKSA8PCAwOworc3RhdGljIGNvbnN0IHVpbnQzMl90IERWX0lfNDRfMF9iaXQgCT0gKHVpbnQzMl90KSgxKSA8PCAxOworc3RhdGljIGNvbnN0IHVpbnQzMl90IERWX0lfNDVfMF9iaXQgCT0gKHVpbnQzMl90KSgxKSA8PCAyOworc3RhdGljIGNvbnN0IHVpbnQzMl90IERWX0lfNDZfMF9iaXQgCT0gKHVpbnQzMl90KSgxKSA8PCAzOworc3RhdGljIGNvbnN0IHVpbnQzMl90IERWX0lfNDZfMl9iaXQgCT0gKHVpbnQzMl90KSgxKSA8PCA0Oworc3RhdGljIGNvbnN0IHVpbnQzMl90IERWX0lfNDdfMF9iaXQgCT0gKHVpbnQzMl90KSgxKSA8PCA1Oworc3RhdGljIGNvbnN0IHVpbnQzMl90IERWX0lfNDdfMl9iaXQgCT0gKHVpbnQzMl90KSgxKSA8PCA2Oworc3RhdGljIGNvbnN0IHVpbnQzMl90IERWX0lfNDhfMF9iaXQgCT0gKHVpbnQzMl90KSgxKSA8PCA3Oworc3RhdGljIGNvbnN0IHVpbnQzMl90IERWX0lfNDhfMl9iaXQgCT0gKHVpbnQzMl90KSgxKSA8PCA4Oworc3RhdGljIGNvbnN0IHVpbnQzMl90IERWX0lfNDlfMF9iaXQgCT0gKHVpbnQzMl90KSgxKSA8PCA5Oworc3RhdGljIGNvbnN0IHVpbnQzMl90IERWX0lfNDlfMl9iaXQgCT0gKHVpbnQzMl90KSgxKSA8PCAxMDsKK3N0YXRpYyBjb25zdCB1aW50MzJfdCBEVl9JXzUwXzBfYml0IAk9ICh1aW50MzJfdCkoMSkgPDwgMTE7CitzdGF0aWMgY29uc3QgdWludDMyX3QgRFZfSV81MF8yX2JpdCAJPSAodWludDMyX3QpKDEpIDw8IDEyOworc3RhdGljIGNvbnN0IHVpbnQzMl90IERWX0lfNTFfMF9iaXQgCT0gKHVpbnQzMl90KSgxKSA8PCAxMzsKK3N0YXRpYyBjb25zdCB1aW50MzJfdCBEVl9JXzUxXzJfYml0IAk9ICh1aW50MzJfdCkoMSkgPDwgMTQ7CitzdGF0aWMgY29uc3QgdWludDMyX3QgRFZfSV81Ml8wX2JpdCAJPSAodWludDMyX3QpKDEpIDw8IDE1Oworc3RhdGljIGNvbnN0IHVpbnQzMl90IERWX0lJXzQ1XzBfYml0IAk9ICh1aW50MzJfdCkoMSkgPDwgMTY7CitzdGF0aWMgY29uc3QgdWludDMyX3QgRFZfSUlfNDZfMF9iaXQgCT0gKHVpbnQzMl90KSgxKSA8PCAxNzsKK3N0YXRpYyBjb25zdCB1aW50MzJfdCBEVl9JSV80Nl8yX2JpdCAJPSAodWludDMyX3QpKDEpIDw8IDE4Oworc3RhdGljIGNvbnN0IHVpbnQzMl90IERWX0lJXzQ3XzBfYml0IAk9ICh1aW50MzJfdCkoMSkgPDwgMTk7CitzdGF0aWMgY29uc3QgdWludDMyX3QgRFZfSUlfNDhfMF9iaXQgCT0gKHVpbnQzMl90KSgxKSA8PCAyMDsKK3N0YXRpYyBjb25zdCB1aW50MzJfdCBEVl9JSV80OV8wX2JpdCAJPSAodWludDMyX3QpKDEpIDw8IDIxOworc3RhdGljIGNvbnN0IHVpbnQzMl90IERWX0lJXzQ5XzJfYml0IAk9ICh1aW50MzJfdCkoMSkgPDwgMjI7CitzdGF0aWMgY29uc3QgdWludDMyX3QgRFZfSUlfNTBfMF9iaXQgCT0gKHVpbnQzMl90KSgxKSA8PCAyMzsKK3N0YXRpYyBjb25zdCB1aW50MzJfdCBEVl9JSV81MF8yX2JpdCAJPSAodWludDMyX3QpKDEpIDw8IDI0Oworc3RhdGljIGNvbnN0IHVpbnQzMl90IERWX0lJXzUxXzBfYml0IAk9ICh1aW50MzJfdCkoMSkgPDwgMjU7CitzdGF0aWMgY29uc3QgdWludDMyX3QgRFZfSUlfNTFfMl9iaXQgCT0gKHVpbnQzMl90KSgxKSA8PCAyNjsKK3N0YXRpYyBjb25zdCB1aW50MzJfdCBEVl9JSV81Ml8wX2JpdCAJPSAodWludDMyX3QpKDEpIDw8IDI3Oworc3RhdGljIGNvbnN0IHVpbnQzMl90IERWX0lJXzUzXzBfYml0IAk9ICh1aW50MzJfdCkoMSkgPDwgMjg7CitzdGF0aWMgY29uc3QgdWludDMyX3QgRFZfSUlfNTRfMF9iaXQgCT0gKHVpbnQzMl90KSgxKSA8PCAyOTsKK3N0YXRpYyBjb25zdCB1aW50MzJfdCBEVl9JSV81NV8wX2JpdCAJPSAodWludDMyX3QpKDEpIDw8IDMwOworc3RhdGljIGNvbnN0IHVpbnQzMl90IERWX0lJXzU2XzBfYml0IAk9ICh1aW50MzJfdCkoMSkgPDwgMzE7CisKK2R2X2luZm9fdCBzaGExX2R2c1tdID0KK3sKKyAgezEsNDMsMCw1OCwwLDAsIHsgMHgwODAwMDAwMCwweDk4MDAwMDBjLDB4ZDgwMDAwMTAsMHgwODAwMDAxMCwweGI4MDAwMDEwLDB4OTgwMDAwMDAsMHg2MDAwMDAwMCwweDAwMDAwMDA4LDB4YzAwMDAwMDAsMHg5MDAwMDAxNCwweDEwMDAwMDEwLDB4YjgwMDAwMTQsMHgyODAwMDAwMCwweDIwMDAwMDEwLDB4NDgwMDAwMDAsMHgwODAwMDAxOCwweDYwMDAwMDAwLDB4OTAwMDAwMTAsMHhmMDAwMDAxMCwweDkwMDAwMDA4LDB4YzAwMDAwMDAsMHg5MDAwMDAxMCwweGYwMDAwMDEwLDB4YjAwMDAwMDgsMHg0MDAwMDAwMCwweDkwMDAwMDAwLDB4ZjAwMDAwMTAsMHg5MDAwMDAxOCwweDYwMDAwMDAwLDB4OTAwMDAwMTAsMHg5MDAwMDAxMCwweDkwMDAwMDAwLDB4ODAwMDAwMDAsMHgwMDAwMDAxMCwweGEwMDAwMDAwLDB4MjAwMDAwMDAsMHhhMDAwMDAwMCwweDIwMDAwMDEwLDB4MDAwMDAwMDAsMHgyMDAwMDAxMCwweDIwMDAwMDAwLDB4MDAwMDAwMTAsMHgyMDAwMDAwMCwweDAwMDAwMDEwLDB4YTAwMDAwMDAsMHgwMDAwMDAwMCwweDIwMDAwMDAwLDB4MjAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDAwMDAxLDB4MDAwMDAwMjAsMHgwMDAwMDAwMSwweDQwMDAwMDAyLDB4NDAwMDAwNDAsMHg0MDAwMDAwMiwweDgwMDAwMDA0LDB4ODAwMDAwODAsMHg4MDAwMDAwNiwweDAwMDAwMDQ5LDB4MDAwMDAxMDMsMHg4MDAwMDAwOSwweDgwMDAwMDEyLDB4ODAwMDAyMDIsMHgwMDAwMDAxOCwweDAwMDAwMTY0LDB4MDAwMDA0MDgsMHg4MDAwMDBlNiwweDgwMDAwMDRjLDB4MDAwMDA4MDMsMHg4MDAwMDE2MSwweDgwMDAwNTk5IH0gfQorLCB7MSw0NCwwLDU4LDAsMSwgeyAweGI0MDAwMDA4LDB4MDgwMDAwMDAsMHg5ODAwMDAwYywweGQ4MDAwMDEwLDB4MDgwMDAwMTAsMHhiODAwMDAxMCwweDk4MDAwMDAwLDB4NjAwMDAwMDAsMHgwMDAwMDAwOCwweGMwMDAwMDAwLDB4OTAwMDAwMTQsMHgxMDAwMDAxMCwweGI4MDAwMDE0LDB4MjgwMDAwMDAsMHgyMDAwMDAxMCwweDQ4MDAwMDAwLDB4MDgwMDAwMTgsMHg2MDAwMDAwMCwweDkwMDAwMDEwLDB4ZjAwMDAwMTAsMHg5MDAwMDAwOCwweGMwMDAwMDAwLDB4OTAwMDAwMTAsMHhmMDAwMDAxMCwweGIwMDAwMDA4LDB4NDAwMDAwMDAsMHg5MDAwMDAwMCwweGYwMDAwMDEwLDB4OTAwMDAwMTgsMHg2MDAwMDAwMCwweDkwMDAwMDEwLDB4OTAwMDAwMTAsMHg5MDAwMDAwMCwweDgwMDAwMDAwLDB4MDAwMDAwMTAsMHhhMDAwMDAwMCwweDIwMDAwMDAwLDB4YTAwMDAwMDAsMHgyMDAwMDAxMCwweDAwMDAwMDAwLDB4MjAwMDAwMTAsMHgyMDAwMDAwMCwweDAwMDAwMDEwLDB4MjAwMDAwMDAsMHgwMDAwMDAxMCwweGEwMDAwMDAwLDB4MDAwMDAwMDAsMHgyMDAwMDAwMCwweDIwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMSwweDAwMDAwMDIwLDB4MDAwMDAwMDEsMHg0MDAwMDAwMiwweDQwMDAwMDQwLDB4NDAwMDAwMDIsMHg4MDAwMDAwNCwweDgwMDAwMDgwLDB4ODAwMDAwMDYsMHgwMDAwMDA0OSwweDAwMDAwMTAzLDB4ODAwMDAwMDksMHg4MDAwMDAxMiwweDgwMDAwMjAyLDB4MDAwMDAwMTgsMHgwMDAwMDE2NCwweDAwMDAwNDA4LDB4ODAwMDAwZTYsMHg4MDAwMDA0YywweDAwMDAwODAzLDB4ODAwMDAxNjEgfSB9CissIHsxLDQ1LDAsNTgsMCwyLCB7IDB4ZjQwMDAwMTQsMHhiNDAwMDAwOCwweDA4MDAwMDAwLDB4OTgwMDAwMGMsMHhkODAwMDAxMCwweDA4MDAwMDEwLDB4YjgwMDAwMTAsMHg5ODAwMDAwMCwweDYwMDAwMDAwLDB4MDAwMDAwMDgsMHhjMDAwMDAwMCwweDkwMDAwMDE0LDB4MTAwMDAwMTAsMHhiODAwMDAxNCwweDI4MDAwMDAwLDB4MjAwMDAwMTAsMHg0ODAwMDAwMCwweDA4MDAwMDE4LDB4NjAwMDAwMDAsMHg5MDAwMDAxMCwweGYwMDAwMDEwLDB4OTAwMDAwMDgsMHhjMDAwMDAwMCwweDkwMDAwMDEwLDB4ZjAwMDAwMTAsMHhiMDAwMDAwOCwweDQwMDAwMDAwLDB4OTAwMDAwMDAsMHhmMDAwMDAxMCwweDkwMDAwMDE4LDB4NjAwMDAwMDAsMHg5MDAwMDAxMCwweDkwMDAwMDEwLDB4OTAwMDAwMDAsMHg4MDAwMDAwMCwweDAwMDAwMDEwLDB4YTAwMDAwMDAsMHgyMDAwMDAwMCwweGEwMDAwMDAwLDB4MjAwMDAwMTAsMHgwMDAwMDAwMCwweDIwMDAwMDEwLDB4MjAwMDAwMDAsMHgwMDAwMDAxMCwweDIwMDAwMDAwLDB4MDAwMDAwMTAsMHhhMDAwMDAwMCwweDAwMDAwMDAwLDB4MjAwMDAwMDAsMHgyMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDEsMHgwMDAwMDAyMCwweDAwMDAwMDAxLDB4NDAwMDAwMDIsMHg0MDAwMDA0MCwweDQwMDAwMDAyLDB4ODAwMDAwMDQsMHg4MDAwMDA4MCwweDgwMDAwMDA2LDB4MDAwMDAwNDksMHgwMDAwMDEwMywweDgwMDAwMDA5LDB4ODAwMDAwMTIsMHg4MDAwMDIwMiwweDAwMDAwMDE4LDB4MDAwMDAxNjQsMHgwMDAwMDQwOCwweDgwMDAwMGU2LDB4ODAwMDAwNGMsMHgwMDAwMDgwMyB9IH0KKywgezEsNDYsMCw1OCwwLDMsIHsgMHgyYzAwMDAxMCwweGY0MDAwMDE0LDB4YjQwMDAwMDgsMHgwODAwMDAwMCwweDk4MDAwMDBjLDB4ZDgwMDAwMTAsMHgwODAwMDAxMCwweGI4MDAwMDEwLDB4OTgwMDAwMDAsMHg2MDAwMDAwMCwweDAwMDAwMDA4LDB4YzAwMDAwMDAsMHg5MDAwMDAxNCwweDEwMDAwMDEwLDB4YjgwMDAwMTQsMHgyODAwMDAwMCwweDIwMDAwMDEwLDB4NDgwMDAwMDAsMHgwODAwMDAxOCwweDYwMDAwMDAwLDB4OTAwMDAwMTAsMHhmMDAwMDAxMCwweDkwMDAwMDA4LDB4YzAwMDAwMDAsMHg5MDAwMDAxMCwweGYwMDAwMDEwLDB4YjAwMDAwMDgsMHg0MDAwMDAwMCwweDkwMDAwMDAwLDB4ZjAwMDAwMTAsMHg5MDAwMDAxOCwweDYwMDAwMDAwLDB4OTAwMDAwMTAsMHg5MDAwMDAxMCwweDkwMDAwMDAwLDB4ODAwMDAwMDAsMHgwMDAwMDAxMCwweGEwMDAwMDAwLDB4MjAwMDAwMDAsMHhhMDAwMDAwMCwweDIwMDAwMDEwLDB4MDAwMDAwMDAsMHgyMDAwMDAxMCwweDIwMDAwMDAwLDB4MDAwMDAwMTAsMHgyMDAwMDAwMCwweDAwMDAwMDEwLDB4YTAwMDAwMDAsMHgwMDAwMDAwMCwweDIwMDAwMDAwLDB4MjAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDAwMDAxLDB4MDAwMDAwMjAsMHgwMDAwMDAwMSwweDQwMDAwMDAyLDB4NDAwMDAwNDAsMHg0MDAwMDAwMiwweDgwMDAwMDA0LDB4ODAwMDAwODAsMHg4MDAwMDAwNiwweDAwMDAwMDQ5LDB4MDAwMDAxMDMsMHg4MDAwMDAwOSwweDgwMDAwMDEyLDB4ODAwMDAyMDIsMHgwMDAwMDAxOCwweDAwMDAwMTY0LDB4MDAwMDA0MDgsMHg4MDAwMDBlNiwweDgwMDAwMDRjIH0gfQorLCB7MSw0NiwyLDU4LDAsNCwgeyAweGIwMDAwMDQwLDB4ZDAwMDAwNTMsMHhkMDAwMDAyMiwweDIwMDAwMDAwLDB4NjAwMDAwMzIsMHg2MDAwMDA0MywweDIwMDAwMDQwLDB4ZTAwMDAwNDIsMHg2MDAwMDAwMiwweDgwMDAwMDAxLDB4MDAwMDAwMjAsMHgwMDAwMDAwMywweDQwMDAwMDUyLDB4NDAwMDAwNDAsMHhlMDAwMDA1MiwweGEwMDAwMDAwLDB4ODAwMDAwNDAsMHgyMDAwMDAwMSwweDIwMDAwMDYwLDB4ODAwMDAwMDEsMHg0MDAwMDA0MiwweGMwMDAwMDQzLDB4NDAwMDAwMjIsMHgwMDAwMDAwMywweDQwMDAwMDQyLDB4YzAwMDAwNDMsMHhjMDAwMDAyMiwweDAwMDAwMDAxLDB4NDAwMDAwMDIsMHhjMDAwMDA0MywweDQwMDAwMDYyLDB4ODAwMDAwMDEsMHg0MDAwMDA0MiwweDQwMDAwMDQyLDB4NDAwMDAwMDIsMHgwMDAwMDAwMiwweDAwMDAwMDQwLDB4ODAwMDAwMDIsMHg4MDAwMDAwMCwweDgwMDAwMDAyLDB4ODAwMDAwNDAsMHgwMDAwMDAwMCwweDgwMDAwMDQwLDB4ODAwMDAwMDAsMHgwMDAwMDA0MCwweDgwMDAwMDAwLDB4MDAwMDAwNDAsMHg4MDAwMDAwMiwweDAwMDAwMDAwLDB4ODAwMDAwMDAsMHg4MDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDQsMHgwMDAwMDA4MCwweDAwMDAwMDA0LDB4MDAwMDAwMDksMHgwMDAwMDEwMSwweDAwMDAwMDA5LDB4MDAwMDAwMTIsMHgwMDAwMDIwMiwweDAwMDAwMDFhLDB4MDAwMDAxMjQsMHgwMDAwMDQwYywweDAwMDAwMDI2LDB4MDAwMDAwNGEsMHgwMDAwMDgwYSwweDAwMDAwMDYwLDB4MDAwMDA1OTAsMHgwMDAwMTAyMCwweDAwMDAwMzlhLDB4MDAwMDAxMzIgfSB9CissIHsxLDQ3LDAsNTgsMCw1LCB7IDB4YzgwMDAwMTAsMHgyYzAwMDAxMCwweGY0MDAwMDE0LDB4YjQwMDAwMDgsMHgwODAwMDAwMCwweDk4MDAwMDBjLDB4ZDgwMDAwMTAsMHgwODAwMDAxMCwweGI4MDAwMDEwLDB4OTgwMDAwMDAsMHg2MDAwMDAwMCwweDAwMDAwMDA4LDB4YzAwMDAwMDAsMHg5MDAwMDAxNCwweDEwMDAwMDEwLDB4YjgwMDAwMTQsMHgyODAwMDAwMCwweDIwMDAwMDEwLDB4NDgwMDAwMDAsMHgwODAwMDAxOCwweDYwMDAwMDAwLDB4OTAwMDAwMTAsMHhmMDAwMDAxMCwweDkwMDAwMDA4LDB4YzAwMDAwMDAsMHg5MDAwMDAxMCwweGYwMDAwMDEwLDB4YjAwMDAwMDgsMHg0MDAwMDAwMCwweDkwMDAwMDAwLDB4ZjAwMDAwMTAsMHg5MDAwMDAxOCwweDYwMDAwMDAwLDB4OTAwMDAwMTAsMHg5MDAwMDAxMCwweDkwMDAwMDAwLDB4ODAwMDAwMDAsMHgwMDAwMDAxMCwweGEwMDAwMDAwLDB4MjAwMDAwMDAsMHhhMDAwMDAwMCwweDIwMDAwMDEwLDB4MDAwMDAwMDAsMHgyMDAwMDAxMCwweDIwMDAwMDAwLDB4MDAwMDAwMTAsMHgyMDAwMDAwMCwweDAwMDAwMDEwLDB4YTAwMDAwMDAsMHgwMDAwMDAwMCwweDIwMDAwMDAwLDB4MjAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDAwMDAxLDB4MDAwMDAwMjAsMHgwMDAwMDAwMSwweDQwMDAwMDAyLDB4NDAwMDAwNDAsMHg0MDAwMDAwMiwweDgwMDAwMDA0LDB4ODAwMDAwODAsMHg4MDAwMDAwNiwweDAwMDAwMDQ5LDB4MDAwMDAxMDMsMHg4MDAwMDAwOSwweDgwMDAwMDEyLDB4ODAwMDAyMDIsMHgwMDAwMDAxOCwweDAwMDAwMTY0LDB4MDAwMDA0MDgsMHg4MDAwMDBlNiB9IH0KKywgezEsNDcsMiw1OCwwLDYsIHsgMHgyMDAwMDA0MywweGIwMDAwMDQwLDB4ZDAwMDAwNTMsMHhkMDAwMDAyMiwweDIwMDAwMDAwLDB4NjAwMDAwMzIsMHg2MDAwMDA0MywweDIwMDAwMDQwLDB4ZTAwMDAwNDIsMHg2MDAwMDAwMiwweDgwMDAwMDAxLDB4MDAwMDAwMjAsMHgwMDAwMDAwMywweDQwMDAwMDUyLDB4NDAwMDAwNDAsMHhlMDAwMDA1MiwweGEwMDAwMDAwLDB4ODAwMDAwNDAsMHgyMDAwMDAwMSwweDIwMDAwMDYwLDB4ODAwMDAwMDEsMHg0MDAwMDA0MiwweGMwMDAwMDQzLDB4NDAwMDAwMjIsMHgwMDAwMDAwMywweDQwMDAwMDQyLDB4YzAwMDAwNDMsMHhjMDAwMDAyMiwweDAwMDAwMDAxLDB4NDAwMDAwMDIsMHhjMDAwMDA0MywweDQwMDAwMDYyLDB4ODAwMDAwMDEsMHg0MDAwMDA0MiwweDQwMDAwMDQyLDB4NDAwMDAwMDIsMHgwMDAwMDAwMiwweDAwMDAwMDQwLDB4ODAwMDAwMDIsMHg4MDAwMDAwMCwweDgwMDAwMDAyLDB4ODAwMDAwNDAsMHgwMDAwMDAwMCwweDgwMDAwMDQwLDB4ODAwMDAwMDAsMHgwMDAwMDA0MCwweDgwMDAwMDAwLDB4MDAwMDAwNDAsMHg4MDAwMDAwMiwweDAwMDAwMDAwLDB4ODAwMDAwMDAsMHg4MDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDQsMHgwMDAwMDA4MCwweDAwMDAwMDA0LDB4MDAwMDAwMDksMHgwMDAwMDEwMSwweDAwMDAwMDA5LDB4MDAwMDAwMTIsMHgwMDAwMDIwMiwweDAwMDAwMDFhLDB4MDAwMDAxMjQsMHgwMDAwMDQwYywweDAwMDAwMDI2LDB4MDAwMDAwNGEsMHgwMDAwMDgwYSwweDAwMDAwMDYwLDB4MDAwMDA1OTAsMHgwMDAwMTAyMCwweDAwMDAwMzlhIH0gfQorLCB7MSw0OCwwLDU4LDAsNywgeyAweGI4MDAwMDBhLDB4YzgwMDAwMTAsMHgyYzAwMDAxMCwweGY0MDAwMDE0LDB4YjQwMDAwMDgsMHgwODAwMDAwMCwweDk4MDAwMDBjLDB4ZDgwMDAwMTAsMHgwODAwMDAxMCwweGI4MDAwMDEwLDB4OTgwMDAwMDAsMHg2MDAwMDAwMCwweDAwMDAwMDA4LDB4YzAwMDAwMDAsMHg5MDAwMDAxNCwweDEwMDAwMDEwLDB4YjgwMDAwMTQsMHgyODAwMDAwMCwweDIwMDAwMDEwLDB4NDgwMDAwMDAsMHgwODAwMDAxOCwweDYwMDAwMDAwLDB4OTAwMDAwMTAsMHhmMDAwMDAxMCwweDkwMDAwMDA4LDB4YzAwMDAwMDAsMHg5MDAwMDAxMCwweGYwMDAwMDEwLDB4YjAwMDAwMDgsMHg0MDAwMDAwMCwweDkwMDAwMDAwLDB4ZjAwMDAwMTAsMHg5MDAwMDAxOCwweDYwMDAwMDAwLDB4OTAwMDAwMTAsMHg5MDAwMDAxMCwweDkwMDAwMDAwLDB4ODAwMDAwMDAsMHgwMDAwMDAxMCwweGEwMDAwMDAwLDB4MjAwMDAwMDAsMHhhMDAwMDAwMCwweDIwMDAwMDEwLDB4MDAwMDAwMDAsMHgyMDAwMDAxMCwweDIwMDAwMDAwLDB4MDAwMDAwMTAsMHgyMDAwMDAwMCwweDAwMDAwMDEwLDB4YTAwMDAwMDAsMHgwMDAwMDAwMCwweDIwMDAwMDAwLDB4MjAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDAwMDAxLDB4MDAwMDAwMjAsMHgwMDAwMDAwMSwweDQwMDAwMDAyLDB4NDAwMDAwNDAsMHg0MDAwMDAwMiwweDgwMDAwMDA0LDB4ODAwMDAwODAsMHg4MDAwMDAwNiwweDAwMDAwMDQ5LDB4MDAwMDAxMDMsMHg4MDAwMDAwOSwweDgwMDAwMDEyLDB4ODAwMDAyMDIsMHgwMDAwMDAxOCwweDAwMDAwMTY0LDB4MDAwMDA0MDggfSB9CissIHsxLDQ4LDIsNTgsMCw4LCB7IDB4ZTAwMDAwMmEsMHgyMDAwMDA0MywweGIwMDAwMDQwLDB4ZDAwMDAwNTMsMHhkMDAwMDAyMiwweDIwMDAwMDAwLDB4NjAwMDAwMzIsMHg2MDAwMDA0MywweDIwMDAwMDQwLDB4ZTAwMDAwNDIsMHg2MDAwMDAwMiwweDgwMDAwMDAxLDB4MDAwMDAwMjAsMHgwMDAwMDAwMywweDQwMDAwMDUyLDB4NDAwMDAwNDAsMHhlMDAwMDA1MiwweGEwMDAwMDAwLDB4ODAwMDAwNDAsMHgyMDAwMDAwMSwweDIwMDAwMDYwLDB4ODAwMDAwMDEsMHg0MDAwMDA0MiwweGMwMDAwMDQzLDB4NDAwMDAwMjIsMHgwMDAwMDAwMywweDQwMDAwMDQyLDB4YzAwMDAwNDMsMHhjMDAwMDAyMiwweDAwMDAwMDAxLDB4NDAwMDAwMDIsMHhjMDAwMDA0MywweDQwMDAwMDYyLDB4ODAwMDAwMDEsMHg0MDAwMDA0MiwweDQwMDAwMDQyLDB4NDAwMDAwMDIsMHgwMDAwMDAwMiwweDAwMDAwMDQwLDB4ODAwMDAwMDIsMHg4MDAwMDAwMCwweDgwMDAwMDAyLDB4ODAwMDAwNDAsMHgwMDAwMDAwMCwweDgwMDAwMDQwLDB4ODAwMDAwMDAsMHgwMDAwMDA0MCwweDgwMDAwMDAwLDB4MDAwMDAwNDAsMHg4MDAwMDAwMiwweDAwMDAwMDAwLDB4ODAwMDAwMDAsMHg4MDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDQsMHgwMDAwMDA4MCwweDAwMDAwMDA0LDB4MDAwMDAwMDksMHgwMDAwMDEwMSwweDAwMDAwMDA5LDB4MDAwMDAwMTIsMHgwMDAwMDIwMiwweDAwMDAwMDFhLDB4MDAwMDAxMjQsMHgwMDAwMDQwYywweDAwMDAwMDI2LDB4MDAwMDAwNGEsMHgwMDAwMDgwYSwweDAwMDAwMDYwLDB4MDAwMDA1OTAsMHgwMDAwMTAyMCB9IH0KKywgezEsNDksMCw1OCwwLDksIHsgMHgxODAwMDAwMCwweGI4MDAwMDBhLDB4YzgwMDAwMTAsMHgyYzAwMDAxMCwweGY0MDAwMDE0LDB4YjQwMDAwMDgsMHgwODAwMDAwMCwweDk4MDAwMDBjLDB4ZDgwMDAwMTAsMHgwODAwMDAxMCwweGI4MDAwMDEwLDB4OTgwMDAwMDAsMHg2MDAwMDAwMCwweDAwMDAwMDA4LDB4YzAwMDAwMDAsMHg5MDAwMDAxNCwweDEwMDAwMDEwLDB4YjgwMDAwMTQsMHgyODAwMDAwMCwweDIwMDAwMDEwLDB4NDgwMDAwMDAsMHgwODAwMDAxOCwweDYwMDAwMDAwLDB4OTAwMDAwMTAsMHhmMDAwMDAxMCwweDkwMDAwMDA4LDB4YzAwMDAwMDAsMHg5MDAwMDAxMCwweGYwMDAwMDEwLDB4YjAwMDAwMDgsMHg0MDAwMDAwMCwweDkwMDAwMDAwLDB4ZjAwMDAwMTAsMHg5MDAwMDAxOCwweDYwMDAwMDAwLDB4OTAwMDAwMTAsMHg5MDAwMDAxMCwweDkwMDAwMDAwLDB4ODAwMDAwMDAsMHgwMDAwMDAxMCwweGEwMDAwMDAwLDB4MjAwMDAwMDAsMHhhMDAwMDAwMCwweDIwMDAwMDEwLDB4MDAwMDAwMDAsMHgyMDAwMDAxMCwweDIwMDAwMDAwLDB4MDAwMDAwMTAsMHgyMDAwMDAwMCwweDAwMDAwMDEwLDB4YTAwMDAwMDAsMHgwMDAwMDAwMCwweDIwMDAwMDAwLDB4MjAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDAwMDAxLDB4MDAwMDAwMjAsMHgwMDAwMDAwMSwweDQwMDAwMDAyLDB4NDAwMDAwNDAsMHg0MDAwMDAwMiwweDgwMDAwMDA0LDB4ODAwMDAwODAsMHg4MDAwMDAwNiwweDAwMDAwMDQ5LDB4MDAwMDAxMDMsMHg4MDAwMDAwOSwweDgwMDAwMDEyLDB4ODAwMDAyMDIsMHgwMDAwMDAxOCwweDAwMDAwMTY0IH0gfQorLCB7MSw0OSwyLDU4LDAsMTAsIHsgMHg2MDAwMDAwMCwweGUwMDAwMDJhLDB4MjAwMDAwNDMsMHhiMDAwMDA0MCwweGQwMDAwMDUzLDB4ZDAwMDAwMjIsMHgyMDAwMDAwMCwweDYwMDAwMDMyLDB4NjAwMDAwNDMsMHgyMDAwMDA0MCwweGUwMDAwMDQyLDB4NjAwMDAwMDIsMHg4MDAwMDAwMSwweDAwMDAwMDIwLDB4MDAwMDAwMDMsMHg0MDAwMDA1MiwweDQwMDAwMDQwLDB4ZTAwMDAwNTIsMHhhMDAwMDAwMCwweDgwMDAwMDQwLDB4MjAwMDAwMDEsMHgyMDAwMDA2MCwweDgwMDAwMDAxLDB4NDAwMDAwNDIsMHhjMDAwMDA0MywweDQwMDAwMDIyLDB4MDAwMDAwMDMsMHg0MDAwMDA0MiwweGMwMDAwMDQzLDB4YzAwMDAwMjIsMHgwMDAwMDAwMSwweDQwMDAwMDAyLDB4YzAwMDAwNDMsMHg0MDAwMDA2MiwweDgwMDAwMDAxLDB4NDAwMDAwNDIsMHg0MDAwMDA0MiwweDQwMDAwMDAyLDB4MDAwMDAwMDIsMHgwMDAwMDA0MCwweDgwMDAwMDAyLDB4ODAwMDAwMDAsMHg4MDAwMDAwMiwweDgwMDAwMDQwLDB4MDAwMDAwMDAsMHg4MDAwMDA0MCwweDgwMDAwMDAwLDB4MDAwMDAwNDAsMHg4MDAwMDAwMCwweDAwMDAwMDQwLDB4ODAwMDAwMDIsMHgwMDAwMDAwMCwweDgwMDAwMDAwLDB4ODAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDAwMDA0LDB4MDAwMDAwODAsMHgwMDAwMDAwNCwweDAwMDAwMDA5LDB4MDAwMDAxMDEsMHgwMDAwMDAwOSwweDAwMDAwMDEyLDB4MDAwMDAyMDIsMHgwMDAwMDAxYSwweDAwMDAwMTI0LDB4MDAwMDA0MGMsMHgwMDAwMDAyNiwweDAwMDAwMDRhLDB4MDAwMDA4MGEsMHgwMDAwMDA2MCwweDAwMDAwNTkwIH0gfQorLCB7MSw1MCwwLDY1LDAsMTEsIHsgMHgwODAwMDAwYywweDE4MDAwMDAwLDB4YjgwMDAwMGEsMHhjODAwMDAxMCwweDJjMDAwMDEwLDB4ZjQwMDAwMTQsMHhiNDAwMDAwOCwweDA4MDAwMDAwLDB4OTgwMDAwMGMsMHhkODAwMDAxMCwweDA4MDAwMDEwLDB4YjgwMDAwMTAsMHg5ODAwMDAwMCwweDYwMDAwMDAwLDB4MDAwMDAwMDgsMHhjMDAwMDAwMCwweDkwMDAwMDE0LDB4MTAwMDAwMTAsMHhiODAwMDAxNCwweDI4MDAwMDAwLDB4MjAwMDAwMTAsMHg0ODAwMDAwMCwweDA4MDAwMDE4LDB4NjAwMDAwMDAsMHg5MDAwMDAxMCwweGYwMDAwMDEwLDB4OTAwMDAwMDgsMHhjMDAwMDAwMCwweDkwMDAwMDEwLDB4ZjAwMDAwMTAsMHhiMDAwMDAwOCwweDQwMDAwMDAwLDB4OTAwMDAwMDAsMHhmMDAwMDAxMCwweDkwMDAwMDE4LDB4NjAwMDAwMDAsMHg5MDAwMDAxMCwweDkwMDAwMDEwLDB4OTAwMDAwMDAsMHg4MDAwMDAwMCwweDAwMDAwMDEwLDB4YTAwMDAwMDAsMHgyMDAwMDAwMCwweGEwMDAwMDAwLDB4MjAwMDAwMTAsMHgwMDAwMDAwMCwweDIwMDAwMDEwLDB4MjAwMDAwMDAsMHgwMDAwMDAxMCwweDIwMDAwMDAwLDB4MDAwMDAwMTAsMHhhMDAwMDAwMCwweDAwMDAwMDAwLDB4MjAwMDAwMDAsMHgyMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDEsMHgwMDAwMDAyMCwweDAwMDAwMDAxLDB4NDAwMDAwMDIsMHg0MDAwMDA0MCwweDQwMDAwMDAyLDB4ODAwMDAwMDQsMHg4MDAwMDA4MCwweDgwMDAwMDA2LDB4MDAwMDAwNDksMHgwMDAwMDEwMywweDgwMDAwMDA5LDB4ODAwMDAwMTIsMHg4MDAwMDIwMiwweDAwMDAwMDE4IH0gfQorLCB7MSw1MCwyLDY1LDAsMTIsIHsgMHgyMDAwMDAzMCwweDYwMDAwMDAwLDB4ZTAwMDAwMmEsMHgyMDAwMDA0MywweGIwMDAwMDQwLDB4ZDAwMDAwNTMsMHhkMDAwMDAyMiwweDIwMDAwMDAwLDB4NjAwMDAwMzIsMHg2MDAwMDA0MywweDIwMDAwMDQwLDB4ZTAwMDAwNDIsMHg2MDAwMDAwMiwweDgwMDAwMDAxLDB4MDAwMDAwMjAsMHgwMDAwMDAwMywweDQwMDAwMDUyLDB4NDAwMDAwNDAsMHhlMDAwMDA1MiwweGEwMDAwMDAwLDB4ODAwMDAwNDAsMHgyMDAwMDAwMSwweDIwMDAwMDYwLDB4ODAwMDAwMDEsMHg0MDAwMDA0MiwweGMwMDAwMDQzLDB4NDAwMDAwMjIsMHgwMDAwMDAwMywweDQwMDAwMDQyLDB4YzAwMDAwNDMsMHhjMDAwMDAyMiwweDAwMDAwMDAxLDB4NDAwMDAwMDIsMHhjMDAwMDA0MywweDQwMDAwMDYyLDB4ODAwMDAwMDEsMHg0MDAwMDA0MiwweDQwMDAwMDQyLDB4NDAwMDAwMDIsMHgwMDAwMDAwMiwweDAwMDAwMDQwLDB4ODAwMDAwMDIsMHg4MDAwMDAwMCwweDgwMDAwMDAyLDB4ODAwMDAwNDAsMHgwMDAwMDAwMCwweDgwMDAwMDQwLDB4ODAwMDAwMDAsMHgwMDAwMDA0MCwweDgwMDAwMDAwLDB4MDAwMDAwNDAsMHg4MDAwMDAwMiwweDAwMDAwMDAwLDB4ODAwMDAwMDAsMHg4MDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDQsMHgwMDAwMDA4MCwweDAwMDAwMDA0LDB4MDAwMDAwMDksMHgwMDAwMDEwMSwweDAwMDAwMDA5LDB4MDAwMDAwMTIsMHgwMDAwMDIwMiwweDAwMDAwMDFhLDB4MDAwMDAxMjQsMHgwMDAwMDQwYywweDAwMDAwMDI2LDB4MDAwMDAwNGEsMHgwMDAwMDgwYSwweDAwMDAwMDYwIH0gfQorLCB7MSw1MSwwLDY1LDAsMTMsIHsgMHhlODAwMDAwMCwweDA4MDAwMDBjLDB4MTgwMDAwMDAsMHhiODAwMDAwYSwweGM4MDAwMDEwLDB4MmMwMDAwMTAsMHhmNDAwMDAxNCwweGI0MDAwMDA4LDB4MDgwMDAwMDAsMHg5ODAwMDAwYywweGQ4MDAwMDEwLDB4MDgwMDAwMTAsMHhiODAwMDAxMCwweDk4MDAwMDAwLDB4NjAwMDAwMDAsMHgwMDAwMDAwOCwweGMwMDAwMDAwLDB4OTAwMDAwMTQsMHgxMDAwMDAxMCwweGI4MDAwMDE0LDB4MjgwMDAwMDAsMHgyMDAwMDAxMCwweDQ4MDAwMDAwLDB4MDgwMDAwMTgsMHg2MDAwMDAwMCwweDkwMDAwMDEwLDB4ZjAwMDAwMTAsMHg5MDAwMDAwOCwweGMwMDAwMDAwLDB4OTAwMDAwMTAsMHhmMDAwMDAxMCwweGIwMDAwMDA4LDB4NDAwMDAwMDAsMHg5MDAwMDAwMCwweGYwMDAwMDEwLDB4OTAwMDAwMTgsMHg2MDAwMDAwMCwweDkwMDAwMDEwLDB4OTAwMDAwMTAsMHg5MDAwMDAwMCwweDgwMDAwMDAwLDB4MDAwMDAwMTAsMHhhMDAwMDAwMCwweDIwMDAwMDAwLDB4YTAwMDAwMDAsMHgyMDAwMDAxMCwweDAwMDAwMDAwLDB4MjAwMDAwMTAsMHgyMDAwMDAwMCwweDAwMDAwMDEwLDB4MjAwMDAwMDAsMHgwMDAwMDAxMCwweGEwMDAwMDAwLDB4MDAwMDAwMDAsMHgyMDAwMDAwMCwweDIwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMSwweDAwMDAwMDIwLDB4MDAwMDAwMDEsMHg0MDAwMDAwMiwweDQwMDAwMDQwLDB4NDAwMDAwMDIsMHg4MDAwMDAwNCwweDgwMDAwMDgwLDB4ODAwMDAwMDYsMHgwMDAwMDA0OSwweDAwMDAwMTAzLDB4ODAwMDAwMDksMHg4MDAwMDAxMiwweDgwMDAwMjAyIH0gfQorLCB7MSw1MSwyLDY1LDAsMTQsIHsgMHhhMDAwMDAwMywweDIwMDAwMDMwLDB4NjAwMDAwMDAsMHhlMDAwMDAyYSwweDIwMDAwMDQzLDB4YjAwMDAwNDAsMHhkMDAwMDA1MywweGQwMDAwMDIyLDB4MjAwMDAwMDAsMHg2MDAwMDAzMiwweDYwMDAwMDQzLDB4MjAwMDAwNDAsMHhlMDAwMDA0MiwweDYwMDAwMDAyLDB4ODAwMDAwMDEsMHgwMDAwMDAyMCwweDAwMDAwMDAzLDB4NDAwMDAwNTIsMHg0MDAwMDA0MCwweGUwMDAwMDUyLDB4YTAwMDAwMDAsMHg4MDAwMDA0MCwweDIwMDAwMDAxLDB4MjAwMDAwNjAsMHg4MDAwMDAwMSwweDQwMDAwMDQyLDB4YzAwMDAwNDMsMHg0MDAwMDAyMiwweDAwMDAwMDAzLDB4NDAwMDAwNDIsMHhjMDAwMDA0MywweGMwMDAwMDIyLDB4MDAwMDAwMDEsMHg0MDAwMDAwMiwweGMwMDAwMDQzLDB4NDAwMDAwNjIsMHg4MDAwMDAwMSwweDQwMDAwMDQyLDB4NDAwMDAwNDIsMHg0MDAwMDAwMiwweDAwMDAwMDAyLDB4MDAwMDAwNDAsMHg4MDAwMDAwMiwweDgwMDAwMDAwLDB4ODAwMDAwMDIsMHg4MDAwMDA0MCwweDAwMDAwMDAwLDB4ODAwMDAwNDAsMHg4MDAwMDAwMCwweDAwMDAwMDQwLDB4ODAwMDAwMDAsMHgwMDAwMDA0MCwweDgwMDAwMDAyLDB4MDAwMDAwMDAsMHg4MDAwMDAwMCwweDgwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwNCwweDAwMDAwMDgwLDB4MDAwMDAwMDQsMHgwMDAwMDAwOSwweDAwMDAwMTAxLDB4MDAwMDAwMDksMHgwMDAwMDAxMiwweDAwMDAwMjAyLDB4MDAwMDAwMWEsMHgwMDAwMDEyNCwweDAwMDAwNDBjLDB4MDAwMDAwMjYsMHgwMDAwMDA0YSwweDAwMDAwODBhIH0gfQorLCB7MSw1MiwwLDY1LDAsMTUsIHsgMHgwNDAwMDAxMCwweGU4MDAwMDAwLDB4MDgwMDAwMGMsMHgxODAwMDAwMCwweGI4MDAwMDBhLDB4YzgwMDAwMTAsMHgyYzAwMDAxMCwweGY0MDAwMDE0LDB4YjQwMDAwMDgsMHgwODAwMDAwMCwweDk4MDAwMDBjLDB4ZDgwMDAwMTAsMHgwODAwMDAxMCwweGI4MDAwMDEwLDB4OTgwMDAwMDAsMHg2MDAwMDAwMCwweDAwMDAwMDA4LDB4YzAwMDAwMDAsMHg5MDAwMDAxNCwweDEwMDAwMDEwLDB4YjgwMDAwMTQsMHgyODAwMDAwMCwweDIwMDAwMDEwLDB4NDgwMDAwMDAsMHgwODAwMDAxOCwweDYwMDAwMDAwLDB4OTAwMDAwMTAsMHhmMDAwMDAxMCwweDkwMDAwMDA4LDB4YzAwMDAwMDAsMHg5MDAwMDAxMCwweGYwMDAwMDEwLDB4YjAwMDAwMDgsMHg0MDAwMDAwMCwweDkwMDAwMDAwLDB4ZjAwMDAwMTAsMHg5MDAwMDAxOCwweDYwMDAwMDAwLDB4OTAwMDAwMTAsMHg5MDAwMDAxMCwweDkwMDAwMDAwLDB4ODAwMDAwMDAsMHgwMDAwMDAxMCwweGEwMDAwMDAwLDB4MjAwMDAwMDAsMHhhMDAwMDAwMCwweDIwMDAwMDEwLDB4MDAwMDAwMDAsMHgyMDAwMDAxMCwweDIwMDAwMDAwLDB4MDAwMDAwMTAsMHgyMDAwMDAwMCwweDAwMDAwMDEwLDB4YTAwMDAwMDAsMHgwMDAwMDAwMCwweDIwMDAwMDAwLDB4MjAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDAwMDAxLDB4MDAwMDAwMjAsMHgwMDAwMDAwMSwweDQwMDAwMDAyLDB4NDAwMDAwNDAsMHg0MDAwMDAwMiwweDgwMDAwMDA0LDB4ODAwMDAwODAsMHg4MDAwMDAwNiwweDAwMDAwMDQ5LDB4MDAwMDAxMDMsMHg4MDAwMDAwOSwweDgwMDAwMDEyIH0gfQorLCB7Miw0NSwwLDU4LDAsMTYsIHsgMHhlYzAwMDAxNCwweDBjMDAwMDAyLDB4YzAwMDAwMTAsMHhiNDAwMDAxYywweDJjMDAwMDA0LDB4YmMwMDAwMTgsMHhiMDAwMDAxMCwweDAwMDAwMDBjLDB4YjgwMDAwMTAsMHgwODAwMDAxOCwweDc4MDAwMDEwLDB4MDgwMDAwMTQsMHg3MDAwMDAxMCwweGI4MDAwMDFjLDB4ZTgwMDAwMDAsMHhiMDAwMDAwNCwweDU4MDAwMDEwLDB4YjAwMDAwMGMsMHg0ODAwMDAwMCwweGIwMDAwMDAwLDB4YjgwMDAwMTAsMHg5ODAwMDAxMCwweGEwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDIwMDAwMDAwLDB4ODAwMDAwMDAsMHgwMDAwMDAxMCwweDAwMDAwMDAwLDB4MjAwMDAwMTAsMHgyMDAwMDAwMCwweDAwMDAwMDEwLDB4NjAwMDAwMDAsMHgwMDAwMDAxOCwweGUwMDAwMDAwLDB4OTAwMDAwMDAsMHgzMDAwMDAxMCwweGIwMDAwMDAwLDB4MjAwMDAwMDAsMHgyMDAwMDAwMCwweGEwMDAwMDAwLDB4MDAwMDAwMTAsMHg4MDAwMDAwMCwweDIwMDAwMDAwLDB4MjAwMDAwMDAsMHgyMDAwMDAwMCwweDgwMDAwMDAwLDB4MDAwMDAwMTAsMHgwMDAwMDAwMCwweDIwMDAwMDEwLDB4YTAwMDAwMDAsMHgwMDAwMDAwMCwweDIwMDAwMDAwLDB4MjAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMSwweDAwMDAwMDIwLDB4MDAwMDAwMDEsMHg0MDAwMDAwMiwweDQwMDAwMDQxLDB4NDAwMDAwMjIsMHg4MDAwMDAwNSwweGMwMDAwMDgyLDB4YzAwMDAwNDYsMHg0MDAwMDA0YiwweDgwMDAwMTA3LDB4MDAwMDAwODksMHgwMDAwMDAxNCwweDgwMDAwMjRiLDB4MDAwMDAxMWIsMHg4MDAwMDE2ZCwweDgwMDAwNDFhLDB4MDAwMDAyZTQsMHg4MDAwMDA1NCwweDAwMDAwOTY3IH0gfQorLCB7Miw0NiwwLDU4LDAsMTcsIHsgMHgyNDAwMDAxYywweGVjMDAwMDE0LDB4MGMwMDAwMDIsMHhjMDAwMDAxMCwweGI0MDAwMDFjLDB4MmMwMDAwMDQsMHhiYzAwMDAxOCwweGIwMDAwMDEwLDB4MDAwMDAwMGMsMHhiODAwMDAxMCwweDA4MDAwMDE4LDB4NzgwMDAwMTAsMHgwODAwMDAxNCwweDcwMDAwMDEwLDB4YjgwMDAwMWMsMHhlODAwMDAwMCwweGIwMDAwMDA0LDB4NTgwMDAwMTAsMHhiMDAwMDAwYywweDQ4MDAwMDAwLDB4YjAwMDAwMDAsMHhiODAwMDAxMCwweDk4MDAwMDEwLDB4YTAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MjAwMDAwMDAsMHg4MDAwMDAwMCwweDAwMDAwMDEwLDB4MDAwMDAwMDAsMHgyMDAwMDAxMCwweDIwMDAwMDAwLDB4MDAwMDAwMTAsMHg2MDAwMDAwMCwweDAwMDAwMDE4LDB4ZTAwMDAwMDAsMHg5MDAwMDAwMCwweDMwMDAwMDEwLDB4YjAwMDAwMDAsMHgyMDAwMDAwMCwweDIwMDAwMDAwLDB4YTAwMDAwMDAsMHgwMDAwMDAxMCwweDgwMDAwMDAwLDB4MjAwMDAwMDAsMHgyMDAwMDAwMCwweDIwMDAwMDAwLDB4ODAwMDAwMDAsMHgwMDAwMDAxMCwweDAwMDAwMDAwLDB4MjAwMDAwMTAsMHhhMDAwMDAwMCwweDAwMDAwMDAwLDB4MjAwMDAwMDAsMHgyMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDAwMDAxLDB4MDAwMDAwMjAsMHgwMDAwMDAwMSwweDQwMDAwMDAyLDB4NDAwMDAwNDEsMHg0MDAwMDAyMiwweDgwMDAwMDA1LDB4YzAwMDAwODIsMHhjMDAwMDA0NiwweDQwMDAwMDRiLDB4ODAwMDAxMDcsMHgwMDAwMDA4OSwweDAwMDAwMDE0LDB4ODAwMDAyNGIsMHgwMDAwMDExYiwweDgwMDAwMTZkLDB4ODAwMDA0MWEsMHgwMDAwMDJlNCwweDgwMDAwMDU0IH0gfQorLCB7Miw0NiwyLDU4LDAsMTgsIHsgMHg5MDAwMDA3MCwweGIwMDAwMDUzLDB4MzAwMDAwMDgsMHgwMDAwMDA0MywweGQwMDAwMDcyLDB4YjAwMDAwMTAsMHhmMDAwMDA2MiwweGMwMDAwMDQyLDB4MDAwMDAwMzAsMHhlMDAwMDA0MiwweDIwMDAwMDYwLDB4ZTAwMDAwNDEsMHgyMDAwMDA1MCwweGMwMDAwMDQxLDB4ZTAwMDAwNzIsMHhhMDAwMDAwMywweGMwMDAwMDEyLDB4NjAwMDAwNDEsMHhjMDAwMDAzMiwweDIwMDAwMDAxLDB4YzAwMDAwMDIsMHhlMDAwMDA0MiwweDYwMDAwMDQyLDB4ODAwMDAwMDIsMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4ODAwMDAwMDAsMHgwMDAwMDAwMiwweDAwMDAwMDQwLDB4MDAwMDAwMDAsMHg4MDAwMDA0MCwweDgwMDAwMDAwLDB4MDAwMDAwNDAsMHg4MDAwMDAwMSwweDAwMDAwMDYwLDB4ODAwMDAwMDMsMHg0MDAwMDAwMiwweGMwMDAwMDQwLDB4YzAwMDAwMDIsMHg4MDAwMDAwMCwweDgwMDAwMDAwLDB4ODAwMDAwMDIsMHgwMDAwMDA0MCwweDAwMDAwMDAyLDB4ODAwMDAwMDAsMHg4MDAwMDAwMCwweDgwMDAwMDAwLDB4MDAwMDAwMDIsMHgwMDAwMDA0MCwweDAwMDAwMDAwLDB4ODAwMDAwNDAsMHg4MDAwMDAwMiwweDAwMDAwMDAwLDB4ODAwMDAwMDAsMHg4MDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDAwMDA0LDB4MDAwMDAwODAsMHgwMDAwMDAwNCwweDAwMDAwMDA5LDB4MDAwMDAxMDUsMHgwMDAwMDA4OSwweDAwMDAwMDE2LDB4MDAwMDAyMGIsMHgwMDAwMDExYiwweDAwMDAwMTJkLDB4MDAwMDA0MWUsMHgwMDAwMDIyNCwweDAwMDAwMDUwLDB4MDAwMDA5MmUsMHgwMDAwMDQ2YywweDAwMDAwNWI2LDB4MDAwMDEwNmEsMHgwMDAwMGI5MCwweDAwMDAwMTUyIH0gfQorLCB7Miw0NywwLDU4LDAsMTksIHsgMHgyMDAwMDAxMCwweDI0MDAwMDFjLDB4ZWMwMDAwMTQsMHgwYzAwMDAwMiwweGMwMDAwMDEwLDB4YjQwMDAwMWMsMHgyYzAwMDAwNCwweGJjMDAwMDE4LDB4YjAwMDAwMTAsMHgwMDAwMDAwYywweGI4MDAwMDEwLDB4MDgwMDAwMTgsMHg3ODAwMDAxMCwweDA4MDAwMDE0LDB4NzAwMDAwMTAsMHhiODAwMDAxYywweGU4MDAwMDAwLDB4YjAwMDAwMDQsMHg1ODAwMDAxMCwweGIwMDAwMDBjLDB4NDgwMDAwMDAsMHhiMDAwMDAwMCwweGI4MDAwMDEwLDB4OTgwMDAwMTAsMHhhMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgyMDAwMDAwMCwweDgwMDAwMDAwLDB4MDAwMDAwMTAsMHgwMDAwMDAwMCwweDIwMDAwMDEwLDB4MjAwMDAwMDAsMHgwMDAwMDAxMCwweDYwMDAwMDAwLDB4MDAwMDAwMTgsMHhlMDAwMDAwMCwweDkwMDAwMDAwLDB4MzAwMDAwMTAsMHhiMDAwMDAwMCwweDIwMDAwMDAwLDB4MjAwMDAwMDAsMHhhMDAwMDAwMCwweDAwMDAwMDEwLDB4ODAwMDAwMDAsMHgyMDAwMDAwMCwweDIwMDAwMDAwLDB4MjAwMDAwMDAsMHg4MDAwMDAwMCwweDAwMDAwMDEwLDB4MDAwMDAwMDAsMHgyMDAwMDAxMCwweGEwMDAwMDAwLDB4MDAwMDAwMDAsMHgyMDAwMDAwMCwweDIwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDEsMHgwMDAwMDAyMCwweDAwMDAwMDAxLDB4NDAwMDAwMDIsMHg0MDAwMDA0MSwweDQwMDAwMDIyLDB4ODAwMDAwMDUsMHhjMDAwMDA4MiwweGMwMDAwMDQ2LDB4NDAwMDAwNGIsMHg4MDAwMDEwNywweDAwMDAwMDg5LDB4MDAwMDAwMTQsMHg4MDAwMDI0YiwweDAwMDAwMTFiLDB4ODAwMDAxNmQsMHg4MDAwMDQxYSwweDAwMDAwMmU0IH0gfQorLCB7Miw0OCwwLDU4LDAsMjAsIHsgMHhiYzAwMDAxYSwweDIwMDAwMDEwLDB4MjQwMDAwMWMsMHhlYzAwMDAxNCwweDBjMDAwMDAyLDB4YzAwMDAwMTAsMHhiNDAwMDAxYywweDJjMDAwMDA0LDB4YmMwMDAwMTgsMHhiMDAwMDAxMCwweDAwMDAwMDBjLDB4YjgwMDAwMTAsMHgwODAwMDAxOCwweDc4MDAwMDEwLDB4MDgwMDAwMTQsMHg3MDAwMDAxMCwweGI4MDAwMDFjLDB4ZTgwMDAwMDAsMHhiMDAwMDAwNCwweDU4MDAwMDEwLDB4YjAwMDAwMGMsMHg0ODAwMDAwMCwweGIwMDAwMDAwLDB4YjgwMDAwMTAsMHg5ODAwMDAxMCwweGEwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDIwMDAwMDAwLDB4ODAwMDAwMDAsMHgwMDAwMDAxMCwweDAwMDAwMDAwLDB4MjAwMDAwMTAsMHgyMDAwMDAwMCwweDAwMDAwMDEwLDB4NjAwMDAwMDAsMHgwMDAwMDAxOCwweGUwMDAwMDAwLDB4OTAwMDAwMDAsMHgzMDAwMDAxMCwweGIwMDAwMDAwLDB4MjAwMDAwMDAsMHgyMDAwMDAwMCwweGEwMDAwMDAwLDB4MDAwMDAwMTAsMHg4MDAwMDAwMCwweDIwMDAwMDAwLDB4MjAwMDAwMDAsMHgyMDAwMDAwMCwweDgwMDAwMDAwLDB4MDAwMDAwMTAsMHgwMDAwMDAwMCwweDIwMDAwMDEwLDB4YTAwMDAwMDAsMHgwMDAwMDAwMCwweDIwMDAwMDAwLDB4MjAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMSwweDAwMDAwMDIwLDB4MDAwMDAwMDEsMHg0MDAwMDAwMiwweDQwMDAwMDQxLDB4NDAwMDAwMjIsMHg4MDAwMDAwNSwweGMwMDAwMDgyLDB4YzAwMDAwNDYsMHg0MDAwMDA0YiwweDgwMDAwMTA3LDB4MDAwMDAwODksMHgwMDAwMDAxNCwweDgwMDAwMjRiLDB4MDAwMDAxMWIsMHg4MDAwMDE2ZCwweDgwMDAwNDFhIH0gfQorLCB7Miw0OSwwLDU4LDAsMjEsIHsgMHgzYzAwMDAwNCwweGJjMDAwMDFhLDB4MjAwMDAwMTAsMHgyNDAwMDAxYywweGVjMDAwMDE0LDB4MGMwMDAwMDIsMHhjMDAwMDAxMCwweGI0MDAwMDFjLDB4MmMwMDAwMDQsMHhiYzAwMDAxOCwweGIwMDAwMDEwLDB4MDAwMDAwMGMsMHhiODAwMDAxMCwweDA4MDAwMDE4LDB4NzgwMDAwMTAsMHgwODAwMDAxNCwweDcwMDAwMDEwLDB4YjgwMDAwMWMsMHhlODAwMDAwMCwweGIwMDAwMDA0LDB4NTgwMDAwMTAsMHhiMDAwMDAwYywweDQ4MDAwMDAwLDB4YjAwMDAwMDAsMHhiODAwMDAxMCwweDk4MDAwMDEwLDB4YTAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MjAwMDAwMDAsMHg4MDAwMDAwMCwweDAwMDAwMDEwLDB4MDAwMDAwMDAsMHgyMDAwMDAxMCwweDIwMDAwMDAwLDB4MDAwMDAwMTAsMHg2MDAwMDAwMCwweDAwMDAwMDE4LDB4ZTAwMDAwMDAsMHg5MDAwMDAwMCwweDMwMDAwMDEwLDB4YjAwMDAwMDAsMHgyMDAwMDAwMCwweDIwMDAwMDAwLDB4YTAwMDAwMDAsMHgwMDAwMDAxMCwweDgwMDAwMDAwLDB4MjAwMDAwMDAsMHgyMDAwMDAwMCwweDIwMDAwMDAwLDB4ODAwMDAwMDAsMHgwMDAwMDAxMCwweDAwMDAwMDAwLDB4MjAwMDAwMTAsMHhhMDAwMDAwMCwweDAwMDAwMDAwLDB4MjAwMDAwMDAsMHgyMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDAwMDAxLDB4MDAwMDAwMjAsMHgwMDAwMDAwMSwweDQwMDAwMDAyLDB4NDAwMDAwNDEsMHg0MDAwMDAyMiwweDgwMDAwMDA1LDB4YzAwMDAwODIsMHhjMDAwMDA0NiwweDQwMDAwMDRiLDB4ODAwMDAxMDcsMHgwMDAwMDA4OSwweDAwMDAwMDE0LDB4ODAwMDAyNGIsMHgwMDAwMDExYiwweDgwMDAwMTZkIH0gfQorLCB7Miw0OSwyLDU4LDAsMjIsIHsgMHhmMDAwMDAxMCwweGYwMDAwMDZhLDB4ODAwMDAwNDAsMHg5MDAwMDA3MCwweGIwMDAwMDUzLDB4MzAwMDAwMDgsMHgwMDAwMDA0MywweGQwMDAwMDcyLDB4YjAwMDAwMTAsMHhmMDAwMDA2MiwweGMwMDAwMDQyLDB4MDAwMDAwMzAsMHhlMDAwMDA0MiwweDIwMDAwMDYwLDB4ZTAwMDAwNDEsMHgyMDAwMDA1MCwweGMwMDAwMDQxLDB4ZTAwMDAwNzIsMHhhMDAwMDAwMywweGMwMDAwMDEyLDB4NjAwMDAwNDEsMHhjMDAwMDAzMiwweDIwMDAwMDAxLDB4YzAwMDAwMDIsMHhlMDAwMDA0MiwweDYwMDAwMDQyLDB4ODAwMDAwMDIsMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4ODAwMDAwMDAsMHgwMDAwMDAwMiwweDAwMDAwMDQwLDB4MDAwMDAwMDAsMHg4MDAwMDA0MCwweDgwMDAwMDAwLDB4MDAwMDAwNDAsMHg4MDAwMDAwMSwweDAwMDAwMDYwLDB4ODAwMDAwMDMsMHg0MDAwMDAwMiwweGMwMDAwMDQwLDB4YzAwMDAwMDIsMHg4MDAwMDAwMCwweDgwMDAwMDAwLDB4ODAwMDAwMDIsMHgwMDAwMDA0MCwweDAwMDAwMDAyLDB4ODAwMDAwMDAsMHg4MDAwMDAwMCwweDgwMDAwMDAwLDB4MDAwMDAwMDIsMHgwMDAwMDA0MCwweDAwMDAwMDAwLDB4ODAwMDAwNDAsMHg4MDAwMDAwMiwweDAwMDAwMDAwLDB4ODAwMDAwMDAsMHg4MDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDAwMDA0LDB4MDAwMDAwODAsMHgwMDAwMDAwNCwweDAwMDAwMDA5LDB4MDAwMDAxMDUsMHgwMDAwMDA4OSwweDAwMDAwMDE2LDB4MDAwMDAyMGIsMHgwMDAwMDExYiwweDAwMDAwMTJkLDB4MDAwMDA0MWUsMHgwMDAwMDIyNCwweDAwMDAwMDUwLDB4MDAwMDA5MmUsMHgwMDAwMDQ2YywweDAwMDAwNWI2IH0gfQorLCB7Miw1MCwwLDY1LDAsMjMsIHsgMHhiNDAwMDAxYywweDNjMDAwMDA0LDB4YmMwMDAwMWEsMHgyMDAwMDAxMCwweDI0MDAwMDFjLDB4ZWMwMDAwMTQsMHgwYzAwMDAwMiwweGMwMDAwMDEwLDB4YjQwMDAwMWMsMHgyYzAwMDAwNCwweGJjMDAwMDE4LDB4YjAwMDAwMTAsMHgwMDAwMDAwYywweGI4MDAwMDEwLDB4MDgwMDAwMTgsMHg3ODAwMDAxMCwweDA4MDAwMDE0LDB4NzAwMDAwMTAsMHhiODAwMDAxYywweGU4MDAwMDAwLDB4YjAwMDAwMDQsMHg1ODAwMDAxMCwweGIwMDAwMDBjLDB4NDgwMDAwMDAsMHhiMDAwMDAwMCwweGI4MDAwMDEwLDB4OTgwMDAwMTAsMHhhMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgyMDAwMDAwMCwweDgwMDAwMDAwLDB4MDAwMDAwMTAsMHgwMDAwMDAwMCwweDIwMDAwMDEwLDB4MjAwMDAwMDAsMHgwMDAwMDAxMCwweDYwMDAwMDAwLDB4MDAwMDAwMTgsMHhlMDAwMDAwMCwweDkwMDAwMDAwLDB4MzAwMDAwMTAsMHhiMDAwMDAwMCwweDIwMDAwMDAwLDB4MjAwMDAwMDAsMHhhMDAwMDAwMCwweDAwMDAwMDEwLDB4ODAwMDAwMDAsMHgyMDAwMDAwMCwweDIwMDAwMDAwLDB4MjAwMDAwMDAsMHg4MDAwMDAwMCwweDAwMDAwMDEwLDB4MDAwMDAwMDAsMHgyMDAwMDAxMCwweGEwMDAwMDAwLDB4MDAwMDAwMDAsMHgyMDAwMDAwMCwweDIwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDEsMHgwMDAwMDAyMCwweDAwMDAwMDAxLDB4NDAwMDAwMDIsMHg0MDAwMDA0MSwweDQwMDAwMDIyLDB4ODAwMDAwMDUsMHhjMDAwMDA4MiwweGMwMDAwMDQ2LDB4NDAwMDAwNGIsMHg4MDAwMDEwNywweDAwMDAwMDg5LDB4MDAwMDAwMTQsMHg4MDAwMDI0YiwweDAwMDAwMTFiIH0gfQorLCB7Miw1MCwyLDY1LDAsMjQsIHsgMHhkMDAwMDA3MiwweGYwMDAwMDEwLDB4ZjAwMDAwNmEsMHg4MDAwMDA0MCwweDkwMDAwMDcwLDB4YjAwMDAwNTMsMHgzMDAwMDAwOCwweDAwMDAwMDQzLDB4ZDAwMDAwNzIsMHhiMDAwMDAxMCwweGYwMDAwMDYyLDB4YzAwMDAwNDIsMHgwMDAwMDAzMCwweGUwMDAwMDQyLDB4MjAwMDAwNjAsMHhlMDAwMDA0MSwweDIwMDAwMDUwLDB4YzAwMDAwNDEsMHhlMDAwMDA3MiwweGEwMDAwMDAzLDB4YzAwMDAwMTIsMHg2MDAwMDA0MSwweGMwMDAwMDMyLDB4MjAwMDAwMDEsMHhjMDAwMDAwMiwweGUwMDAwMDQyLDB4NjAwMDAwNDIsMHg4MDAwMDAwMiwweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHg4MDAwMDAwMCwweDAwMDAwMDAyLDB4MDAwMDAwNDAsMHgwMDAwMDAwMCwweDgwMDAwMDQwLDB4ODAwMDAwMDAsMHgwMDAwMDA0MCwweDgwMDAwMDAxLDB4MDAwMDAwNjAsMHg4MDAwMDAwMywweDQwMDAwMDAyLDB4YzAwMDAwNDAsMHhjMDAwMDAwMiwweDgwMDAwMDAwLDB4ODAwMDAwMDAsMHg4MDAwMDAwMiwweDAwMDAwMDQwLDB4MDAwMDAwMDIsMHg4MDAwMDAwMCwweDgwMDAwMDAwLDB4ODAwMDAwMDAsMHgwMDAwMDAwMiwweDAwMDAwMDQwLDB4MDAwMDAwMDAsMHg4MDAwMDA0MCwweDgwMDAwMDAyLDB4MDAwMDAwMDAsMHg4MDAwMDAwMCwweDgwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDQsMHgwMDAwMDA4MCwweDAwMDAwMDA0LDB4MDAwMDAwMDksMHgwMDAwMDEwNSwweDAwMDAwMDg5LDB4MDAwMDAwMTYsMHgwMDAwMDIwYiwweDAwMDAwMTFiLDB4MDAwMDAxMmQsMHgwMDAwMDQxZSwweDAwMDAwMjI0LDB4MDAwMDAwNTAsMHgwMDAwMDkyZSwweDAwMDAwNDZjIH0gfQorLCB7Miw1MSwwLDY1LDAsMjUsIHsgMHhjMDAwMDAxMCwweGI0MDAwMDFjLDB4M2MwMDAwMDQsMHhiYzAwMDAxYSwweDIwMDAwMDEwLDB4MjQwMDAwMWMsMHhlYzAwMDAxNCwweDBjMDAwMDAyLDB4YzAwMDAwMTAsMHhiNDAwMDAxYywweDJjMDAwMDA0LDB4YmMwMDAwMTgsMHhiMDAwMDAxMCwweDAwMDAwMDBjLDB4YjgwMDAwMTAsMHgwODAwMDAxOCwweDc4MDAwMDEwLDB4MDgwMDAwMTQsMHg3MDAwMDAxMCwweGI4MDAwMDFjLDB4ZTgwMDAwMDAsMHhiMDAwMDAwNCwweDU4MDAwMDEwLDB4YjAwMDAwMGMsMHg0ODAwMDAwMCwweGIwMDAwMDAwLDB4YjgwMDAwMTAsMHg5ODAwMDAxMCwweGEwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDIwMDAwMDAwLDB4ODAwMDAwMDAsMHgwMDAwMDAxMCwweDAwMDAwMDAwLDB4MjAwMDAwMTAsMHgyMDAwMDAwMCwweDAwMDAwMDEwLDB4NjAwMDAwMDAsMHgwMDAwMDAxOCwweGUwMDAwMDAwLDB4OTAwMDAwMDAsMHgzMDAwMDAxMCwweGIwMDAwMDAwLDB4MjAwMDAwMDAsMHgyMDAwMDAwMCwweGEwMDAwMDAwLDB4MDAwMDAwMTAsMHg4MDAwMDAwMCwweDIwMDAwMDAwLDB4MjAwMDAwMDAsMHgyMDAwMDAwMCwweDgwMDAwMDAwLDB4MDAwMDAwMTAsMHgwMDAwMDAwMCwweDIwMDAwMDEwLDB4YTAwMDAwMDAsMHgwMDAwMDAwMCwweDIwMDAwMDAwLDB4MjAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMSwweDAwMDAwMDIwLDB4MDAwMDAwMDEsMHg0MDAwMDAwMiwweDQwMDAwMDQxLDB4NDAwMDAwMjIsMHg4MDAwMDAwNSwweGMwMDAwMDgyLDB4YzAwMDAwNDYsMHg0MDAwMDA0YiwweDgwMDAwMTA3LDB4MDAwMDAwODksMHgwMDAwMDAxNCwweDgwMDAwMjRiIH0gfQorLCB7Miw1MSwyLDY1LDAsMjYsIHsgMHgwMDAwMDA0MywweGQwMDAwMDcyLDB4ZjAwMDAwMTAsMHhmMDAwMDA2YSwweDgwMDAwMDQwLDB4OTAwMDAwNzAsMHhiMDAwMDA1MywweDMwMDAwMDA4LDB4MDAwMDAwNDMsMHhkMDAwMDA3MiwweGIwMDAwMDEwLDB4ZjAwMDAwNjIsMHhjMDAwMDA0MiwweDAwMDAwMDMwLDB4ZTAwMDAwNDIsMHgyMDAwMDA2MCwweGUwMDAwMDQxLDB4MjAwMDAwNTAsMHhjMDAwMDA0MSwweGUwMDAwMDcyLDB4YTAwMDAwMDMsMHhjMDAwMDAxMiwweDYwMDAwMDQxLDB4YzAwMDAwMzIsMHgyMDAwMDAwMSwweGMwMDAwMDAyLDB4ZTAwMDAwNDIsMHg2MDAwMDA0MiwweDgwMDAwMDAyLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDgwMDAwMDAwLDB4MDAwMDAwMDIsMHgwMDAwMDA0MCwweDAwMDAwMDAwLDB4ODAwMDAwNDAsMHg4MDAwMDAwMCwweDAwMDAwMDQwLDB4ODAwMDAwMDEsMHgwMDAwMDA2MCwweDgwMDAwMDAzLDB4NDAwMDAwMDIsMHhjMDAwMDA0MCwweGMwMDAwMDAyLDB4ODAwMDAwMDAsMHg4MDAwMDAwMCwweDgwMDAwMDAyLDB4MDAwMDAwNDAsMHgwMDAwMDAwMiwweDgwMDAwMDAwLDB4ODAwMDAwMDAsMHg4MDAwMDAwMCwweDAwMDAwMDAyLDB4MDAwMDAwNDAsMHgwMDAwMDAwMCwweDgwMDAwMDQwLDB4ODAwMDAwMDIsMHgwMDAwMDAwMCwweDgwMDAwMDAwLDB4ODAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwNCwweDAwMDAwMDgwLDB4MDAwMDAwMDQsMHgwMDAwMDAwOSwweDAwMDAwMTA1LDB4MDAwMDAwODksMHgwMDAwMDAxNiwweDAwMDAwMjBiLDB4MDAwMDAxMWIsMHgwMDAwMDEyZCwweDAwMDAwNDFlLDB4MDAwMDAyMjQsMHgwMDAwMDA1MCwweDAwMDAwOTJlIH0gfQorLCB7Miw1MiwwLDY1LDAsMjcsIHsgMHgwYzAwMDAwMiwweGMwMDAwMDEwLDB4YjQwMDAwMWMsMHgzYzAwMDAwNCwweGJjMDAwMDFhLDB4MjAwMDAwMTAsMHgyNDAwMDAxYywweGVjMDAwMDE0LDB4MGMwMDAwMDIsMHhjMDAwMDAxMCwweGI0MDAwMDFjLDB4MmMwMDAwMDQsMHhiYzAwMDAxOCwweGIwMDAwMDEwLDB4MDAwMDAwMGMsMHhiODAwMDAxMCwweDA4MDAwMDE4LDB4NzgwMDAwMTAsMHgwODAwMDAxNCwweDcwMDAwMDEwLDB4YjgwMDAwMWMsMHhlODAwMDAwMCwweGIwMDAwMDA0LDB4NTgwMDAwMTAsMHhiMDAwMDAwYywweDQ4MDAwMDAwLDB4YjAwMDAwMDAsMHhiODAwMDAxMCwweDk4MDAwMDEwLDB4YTAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MjAwMDAwMDAsMHg4MDAwMDAwMCwweDAwMDAwMDEwLDB4MDAwMDAwMDAsMHgyMDAwMDAxMCwweDIwMDAwMDAwLDB4MDAwMDAwMTAsMHg2MDAwMDAwMCwweDAwMDAwMDE4LDB4ZTAwMDAwMDAsMHg5MDAwMDAwMCwweDMwMDAwMDEwLDB4YjAwMDAwMDAsMHgyMDAwMDAwMCwweDIwMDAwMDAwLDB4YTAwMDAwMDAsMHgwMDAwMDAxMCwweDgwMDAwMDAwLDB4MjAwMDAwMDAsMHgyMDAwMDAwMCwweDIwMDAwMDAwLDB4ODAwMDAwMDAsMHgwMDAwMDAxMCwweDAwMDAwMDAwLDB4MjAwMDAwMTAsMHhhMDAwMDAwMCwweDAwMDAwMDAwLDB4MjAwMDAwMDAsMHgyMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDAwMDAxLDB4MDAwMDAwMjAsMHgwMDAwMDAwMSwweDQwMDAwMDAyLDB4NDAwMDAwNDEsMHg0MDAwMDAyMiwweDgwMDAwMDA1LDB4YzAwMDAwODIsMHhjMDAwMDA0NiwweDQwMDAwMDRiLDB4ODAwMDAxMDcsMHgwMDAwMDA4OSwweDAwMDAwMDE0IH0gfQorLCB7Miw1MywwLDY1LDAsMjgsIHsgMHhjYzAwMDAxNCwweDBjMDAwMDAyLDB4YzAwMDAwMTAsMHhiNDAwMDAxYywweDNjMDAwMDA0LDB4YmMwMDAwMWEsMHgyMDAwMDAxMCwweDI0MDAwMDFjLDB4ZWMwMDAwMTQsMHgwYzAwMDAwMiwweGMwMDAwMDEwLDB4YjQwMDAwMWMsMHgyYzAwMDAwNCwweGJjMDAwMDE4LDB4YjAwMDAwMTAsMHgwMDAwMDAwYywweGI4MDAwMDEwLDB4MDgwMDAwMTgsMHg3ODAwMDAxMCwweDA4MDAwMDE0LDB4NzAwMDAwMTAsMHhiODAwMDAxYywweGU4MDAwMDAwLDB4YjAwMDAwMDQsMHg1ODAwMDAxMCwweGIwMDAwMDBjLDB4NDgwMDAwMDAsMHhiMDAwMDAwMCwweGI4MDAwMDEwLDB4OTgwMDAwMTAsMHhhMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgyMDAwMDAwMCwweDgwMDAwMDAwLDB4MDAwMDAwMTAsMHgwMDAwMDAwMCwweDIwMDAwMDEwLDB4MjAwMDAwMDAsMHgwMDAwMDAxMCwweDYwMDAwMDAwLDB4MDAwMDAwMTgsMHhlMDAwMDAwMCwweDkwMDAwMDAwLDB4MzAwMDAwMTAsMHhiMDAwMDAwMCwweDIwMDAwMDAwLDB4MjAwMDAwMDAsMHhhMDAwMDAwMCwweDAwMDAwMDEwLDB4ODAwMDAwMDAsMHgyMDAwMDAwMCwweDIwMDAwMDAwLDB4MjAwMDAwMDAsMHg4MDAwMDAwMCwweDAwMDAwMDEwLDB4MDAwMDAwMDAsMHgyMDAwMDAxMCwweGEwMDAwMDAwLDB4MDAwMDAwMDAsMHgyMDAwMDAwMCwweDIwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDEsMHgwMDAwMDAyMCwweDAwMDAwMDAxLDB4NDAwMDAwMDIsMHg0MDAwMDA0MSwweDQwMDAwMDIyLDB4ODAwMDAwMDUsMHhjMDAwMDA4MiwweGMwMDAwMDQ2LDB4NDAwMDAwNGIsMHg4MDAwMDEwNywweDAwMDAwMDg5IH0gfQorLCB7Miw1NCwwLDY1LDAsMjksIHsgMHgwNDAwMDAxYywweGNjMDAwMDE0LDB4MGMwMDAwMDIsMHhjMDAwMDAxMCwweGI0MDAwMDFjLDB4M2MwMDAwMDQsMHhiYzAwMDAxYSwweDIwMDAwMDEwLDB4MjQwMDAwMWMsMHhlYzAwMDAxNCwweDBjMDAwMDAyLDB4YzAwMDAwMTAsMHhiNDAwMDAxYywweDJjMDAwMDA0LDB4YmMwMDAwMTgsMHhiMDAwMDAxMCwweDAwMDAwMDBjLDB4YjgwMDAwMTAsMHgwODAwMDAxOCwweDc4MDAwMDEwLDB4MDgwMDAwMTQsMHg3MDAwMDAxMCwweGI4MDAwMDFjLDB4ZTgwMDAwMDAsMHhiMDAwMDAwNCwweDU4MDAwMDEwLDB4YjAwMDAwMGMsMHg0ODAwMDAwMCwweGIwMDAwMDAwLDB4YjgwMDAwMTAsMHg5ODAwMDAxMCwweGEwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDIwMDAwMDAwLDB4ODAwMDAwMDAsMHgwMDAwMDAxMCwweDAwMDAwMDAwLDB4MjAwMDAwMTAsMHgyMDAwMDAwMCwweDAwMDAwMDEwLDB4NjAwMDAwMDAsMHgwMDAwMDAxOCwweGUwMDAwMDAwLDB4OTAwMDAwMDAsMHgzMDAwMDAxMCwweGIwMDAwMDAwLDB4MjAwMDAwMDAsMHgyMDAwMDAwMCwweGEwMDAwMDAwLDB4MDAwMDAwMTAsMHg4MDAwMDAwMCwweDIwMDAwMDAwLDB4MjAwMDAwMDAsMHgyMDAwMDAwMCwweDgwMDAwMDAwLDB4MDAwMDAwMTAsMHgwMDAwMDAwMCwweDIwMDAwMDEwLDB4YTAwMDAwMDAsMHgwMDAwMDAwMCwweDIwMDAwMDAwLDB4MjAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMSwweDAwMDAwMDIwLDB4MDAwMDAwMDEsMHg0MDAwMDAwMiwweDQwMDAwMDQxLDB4NDAwMDAwMjIsMHg4MDAwMDAwNSwweGMwMDAwMDgyLDB4YzAwMDAwNDYsMHg0MDAwMDA0YiwweDgwMDAwMTA3IH0gfQorLCB7Miw1NSwwLDY1LDAsMzAsIHsgMHgwMDAwMDAxMCwweDA0MDAwMDFjLDB4Y2MwMDAwMTQsMHgwYzAwMDAwMiwweGMwMDAwMDEwLDB4YjQwMDAwMWMsMHgzYzAwMDAwNCwweGJjMDAwMDFhLDB4MjAwMDAwMTAsMHgyNDAwMDAxYywweGVjMDAwMDE0LDB4MGMwMDAwMDIsMHhjMDAwMDAxMCwweGI0MDAwMDFjLDB4MmMwMDAwMDQsMHhiYzAwMDAxOCwweGIwMDAwMDEwLDB4MDAwMDAwMGMsMHhiODAwMDAxMCwweDA4MDAwMDE4LDB4NzgwMDAwMTAsMHgwODAwMDAxNCwweDcwMDAwMDEwLDB4YjgwMDAwMWMsMHhlODAwMDAwMCwweGIwMDAwMDA0LDB4NTgwMDAwMTAsMHhiMDAwMDAwYywweDQ4MDAwMDAwLDB4YjAwMDAwMDAsMHhiODAwMDAxMCwweDk4MDAwMDEwLDB4YTAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MjAwMDAwMDAsMHg4MDAwMDAwMCwweDAwMDAwMDEwLDB4MDAwMDAwMDAsMHgyMDAwMDAxMCwweDIwMDAwMDAwLDB4MDAwMDAwMTAsMHg2MDAwMDAwMCwweDAwMDAwMDE4LDB4ZTAwMDAwMDAsMHg5MDAwMDAwMCwweDMwMDAwMDEwLDB4YjAwMDAwMDAsMHgyMDAwMDAwMCwweDIwMDAwMDAwLDB4YTAwMDAwMDAsMHgwMDAwMDAxMCwweDgwMDAwMDAwLDB4MjAwMDAwMDAsMHgyMDAwMDAwMCwweDIwMDAwMDAwLDB4ODAwMDAwMDAsMHgwMDAwMDAxMCwweDAwMDAwMDAwLDB4MjAwMDAwMTAsMHhhMDAwMDAwMCwweDAwMDAwMDAwLDB4MjAwMDAwMDAsMHgyMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDAwMDAxLDB4MDAwMDAwMjAsMHgwMDAwMDAwMSwweDQwMDAwMDAyLDB4NDAwMDAwNDEsMHg0MDAwMDAyMiwweDgwMDAwMDA1LDB4YzAwMDAwODIsMHhjMDAwMDA0NiwweDQwMDAwMDRiIH0gfQorLCB7Miw1NiwwLDY1LDAsMzEsIHsgMHgyNjAwMDAxYSwweDAwMDAwMDEwLDB4MDQwMDAwMWMsMHhjYzAwMDAxNCwweDBjMDAwMDAyLDB4YzAwMDAwMTAsMHhiNDAwMDAxYywweDNjMDAwMDA0LDB4YmMwMDAwMWEsMHgyMDAwMDAxMCwweDI0MDAwMDFjLDB4ZWMwMDAwMTQsMHgwYzAwMDAwMiwweGMwMDAwMDEwLDB4YjQwMDAwMWMsMHgyYzAwMDAwNCwweGJjMDAwMDE4LDB4YjAwMDAwMTAsMHgwMDAwMDAwYywweGI4MDAwMDEwLDB4MDgwMDAwMTgsMHg3ODAwMDAxMCwweDA4MDAwMDE0LDB4NzAwMDAwMTAsMHhiODAwMDAxYywweGU4MDAwMDAwLDB4YjAwMDAwMDQsMHg1ODAwMDAxMCwweGIwMDAwMDBjLDB4NDgwMDAwMDAsMHhiMDAwMDAwMCwweGI4MDAwMDEwLDB4OTgwMDAwMTAsMHhhMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgyMDAwMDAwMCwweDgwMDAwMDAwLDB4MDAwMDAwMTAsMHgwMDAwMDAwMCwweDIwMDAwMDEwLDB4MjAwMDAwMDAsMHgwMDAwMDAxMCwweDYwMDAwMDAwLDB4MDAwMDAwMTgsMHhlMDAwMDAwMCwweDkwMDAwMDAwLDB4MzAwMDAwMTAsMHhiMDAwMDAwMCwweDIwMDAwMDAwLDB4MjAwMDAwMDAsMHhhMDAwMDAwMCwweDAwMDAwMDEwLDB4ODAwMDAwMDAsMHgyMDAwMDAwMCwweDIwMDAwMDAwLDB4MjAwMDAwMDAsMHg4MDAwMDAwMCwweDAwMDAwMDEwLDB4MDAwMDAwMDAsMHgyMDAwMDAxMCwweGEwMDAwMDAwLDB4MDAwMDAwMDAsMHgyMDAwMDAwMCwweDIwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDEsMHgwMDAwMDAyMCwweDAwMDAwMDAxLDB4NDAwMDAwMDIsMHg0MDAwMDA0MSwweDQwMDAwMDIyLDB4ODAwMDAwMDUsMHhjMDAwMDA4MiwweGMwMDAwMDQ2IH0gfQorLCB7MCwwLDAsMCwwLDAsIHswLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDB9fQorfTsKK3ZvaWQgdWJjX2NoZWNrKGNvbnN0IHVpbnQzMl90IFdbODBdLCB1aW50MzJfdCBkdm1hc2tbMV0pCit7CisJdWludDMyX3QgbWFzayA9IH4oKHVpbnQzMl90KSgwKSk7CisJbWFzayAmPSAoKCgoKFdbNDRdXldbNDVdKT4+MjkpJjEpLTEpIHwgfihEVl9JXzQ4XzBfYml0fERWX0lfNTFfMF9iaXR8RFZfSV81Ml8wX2JpdHxEVl9JSV80NV8wX2JpdHxEVl9JSV80Nl8wX2JpdHxEVl9JSV81MF8wX2JpdHxEVl9JSV81MV8wX2JpdCkpOworCW1hc2sgJj0gKCgoKChXWzQ5XV5XWzUwXSk+PjI5KSYxKS0xKSB8IH4oRFZfSV80Nl8wX2JpdHxEVl9JSV80NV8wX2JpdHxEVl9JSV81MF8wX2JpdHxEVl9JSV81MV8wX2JpdHxEVl9JSV81NV8wX2JpdHxEVl9JSV81Nl8wX2JpdCkpOworCW1hc2sgJj0gKCgoKChXWzQ4XV5XWzQ5XSk+PjI5KSYxKS0xKSB8IH4oRFZfSV80NV8wX2JpdHxEVl9JXzUyXzBfYml0fERWX0lJXzQ5XzBfYml0fERWX0lJXzUwXzBfYml0fERWX0lJXzU0XzBfYml0fERWX0lJXzU1XzBfYml0KSk7CisJbWFzayAmPSAoKCgoV1s0N11eKFdbNTBdPj4yNSkpJigxPDw0KSktKDE8PDQpKSB8IH4oRFZfSV80N18wX2JpdHxEVl9JXzQ5XzBfYml0fERWX0lfNTFfMF9iaXR8RFZfSUlfNDVfMF9iaXR8RFZfSUlfNTFfMF9iaXR8RFZfSUlfNTZfMF9iaXQpKTsKKwltYXNrICY9ICgoKCgoV1s0N11eV1s0OF0pPj4yOSkmMSktMSkgfCB+KERWX0lfNDRfMF9iaXR8RFZfSV81MV8wX2JpdHxEVl9JSV80OF8wX2JpdHxEVl9JSV80OV8wX2JpdHxEVl9JSV81M18wX2JpdHxEVl9JSV81NF8wX2JpdCkpOworCW1hc2sgJj0gKCgoKChXWzQ2XT4+NCleKFdbNDldPj4yOSkpJjEpLTEpIHwgfihEVl9JXzQ2XzBfYml0fERWX0lfNDhfMF9iaXR8RFZfSV81MF8wX2JpdHxEVl9JXzUyXzBfYml0fERWX0lJXzUwXzBfYml0fERWX0lJXzU1XzBfYml0KSk7CisJbWFzayAmPSAoKCgoKFdbNDZdXldbNDddKT4+MjkpJjEpLTEpIHwgfihEVl9JXzQzXzBfYml0fERWX0lfNTBfMF9iaXR8RFZfSUlfNDdfMF9iaXR8RFZfSUlfNDhfMF9iaXR8RFZfSUlfNTJfMF9iaXR8RFZfSUlfNTNfMF9iaXQpKTsKKwltYXNrICY9ICgoKCgoV1s0NV0+PjQpXihXWzQ4XT4+MjkpKSYxKS0xKSB8IH4oRFZfSV80NV8wX2JpdHxEVl9JXzQ3XzBfYml0fERWX0lfNDlfMF9iaXR8RFZfSV81MV8wX2JpdHxEVl9JSV80OV8wX2JpdHxEVl9JSV81NF8wX2JpdCkpOworCW1hc2sgJj0gKCgoKChXWzQ1XV5XWzQ2XSk+PjI5KSYxKS0xKSB8IH4oRFZfSV80OV8wX2JpdHxEVl9JXzUyXzBfYml0fERWX0lJXzQ2XzBfYml0fERWX0lJXzQ3XzBfYml0fERWX0lJXzUxXzBfYml0fERWX0lJXzUyXzBfYml0KSk7CisJbWFzayAmPSAoKCgoKFdbNDRdPj40KV4oV1s0N10+PjI5KSkmMSktMSkgfCB+KERWX0lfNDRfMF9iaXR8RFZfSV80Nl8wX2JpdHxEVl9JXzQ4XzBfYml0fERWX0lfNTBfMF9iaXR8RFZfSUlfNDhfMF9iaXR8RFZfSUlfNTNfMF9iaXQpKTsKKwltYXNrICY9ICgoKCgoV1s0M10+PjQpXihXWzQ2XT4+MjkpKSYxKS0xKSB8IH4oRFZfSV80M18wX2JpdHxEVl9JXzQ1XzBfYml0fERWX0lfNDdfMF9iaXR8RFZfSV80OV8wX2JpdHxEVl9JSV80N18wX2JpdHxEVl9JSV81Ml8wX2JpdCkpOworCW1hc2sgJj0gKCgoKChXWzQzXV5XWzQ0XSk+PjI5KSYxKS0xKSB8IH4oRFZfSV80N18wX2JpdHxEVl9JXzUwXzBfYml0fERWX0lfNTFfMF9iaXR8RFZfSUlfNDVfMF9iaXR8RFZfSUlfNDlfMF9iaXR8RFZfSUlfNTBfMF9iaXQpKTsKKwltYXNrICY9ICgoKCgoV1s0Ml0+PjQpXihXWzQ1XT4+MjkpKSYxKS0xKSB8IH4oRFZfSV80NF8wX2JpdHxEVl9JXzQ2XzBfYml0fERWX0lfNDhfMF9iaXR8RFZfSV81Ml8wX2JpdHxEVl9JSV80Nl8wX2JpdHxEVl9JSV81MV8wX2JpdCkpOworCW1hc2sgJj0gKCgoKChXWzQxXT4+NCleKFdbNDRdPj4yOSkpJjEpLTEpIHwgfihEVl9JXzQzXzBfYml0fERWX0lfNDVfMF9iaXR8RFZfSV80N18wX2JpdHxEVl9JXzUxXzBfYml0fERWX0lJXzQ1XzBfYml0fERWX0lJXzUwXzBfYml0KSk7CisJbWFzayAmPSAoKCgoKFdbNDBdXldbNDFdKT4+MjkpJjEpLTEpIHwgfihEVl9JXzQ0XzBfYml0fERWX0lfNDdfMF9iaXR8RFZfSV80OF8wX2JpdHxEVl9JSV80Nl8wX2JpdHxEVl9JSV80N18wX2JpdHxEVl9JSV81Nl8wX2JpdCkpOworCW1hc2sgJj0gKCgoKChXWzU0XV5XWzU1XSk+PjI5KSYxKS0xKSB8IH4oRFZfSV81MV8wX2JpdHxEVl9JSV80N18wX2JpdHxEVl9JSV81MF8wX2JpdHxEVl9JSV81NV8wX2JpdHxEVl9JSV81Nl8wX2JpdCkpOworCW1hc2sgJj0gKCgoKChXWzUzXV5XWzU0XSk+PjI5KSYxKS0xKSB8IH4oRFZfSV81MF8wX2JpdHxEVl9JSV80Nl8wX2JpdHxEVl9JSV80OV8wX2JpdHxEVl9JSV81NF8wX2JpdHxEVl9JSV81NV8wX2JpdCkpOworCW1hc2sgJj0gKCgoKChXWzUyXV5XWzUzXSk+PjI5KSYxKS0xKSB8IH4oRFZfSV80OV8wX2JpdHxEVl9JSV80NV8wX2JpdHxEVl9JSV80OF8wX2JpdHxEVl9JSV81M18wX2JpdHxEVl9JSV81NF8wX2JpdCkpOworCW1hc2sgJj0gKCgoKFdbNTBdXihXWzUzXT4+MjUpKSYoMTw8NCkpLSgxPDw0KSkgfCB+KERWX0lfNTBfMF9iaXR8RFZfSV81Ml8wX2JpdHxEVl9JSV80Nl8wX2JpdHxEVl9JSV80OF8wX2JpdHxEVl9JSV81NF8wX2JpdCkpOworCW1hc2sgJj0gKCgoKChXWzUwXV5XWzUxXSk+PjI5KSYxKS0xKSB8IH4oRFZfSV80N18wX2JpdHxEVl9JSV80Nl8wX2JpdHxEVl9JSV81MV8wX2JpdHxEVl9JSV81Ml8wX2JpdHxEVl9JSV81Nl8wX2JpdCkpOworCW1hc2sgJj0gKCgoKFdbNDldXihXWzUyXT4+MjUpKSYoMTw8NCkpLSgxPDw0KSkgfCB+KERWX0lfNDlfMF9iaXR8RFZfSV81MV8wX2JpdHxEVl9JSV80NV8wX2JpdHxEVl9JSV80N18wX2JpdHxEVl9JSV81M18wX2JpdCkpOworCW1hc2sgJj0gKCgoKFdbNDhdXihXWzUxXT4+MjUpKSYoMTw8NCkpLSgxPDw0KSkgfCB+KERWX0lfNDhfMF9iaXR8RFZfSV81MF8wX2JpdHxEVl9JXzUyXzBfYml0fERWX0lJXzQ2XzBfYml0fERWX0lJXzUyXzBfYml0KSk7CisJbWFzayAmPSAoKCgoKFdbNDJdXldbNDNdKT4+MjkpJjEpLTEpIHwgfihEVl9JXzQ2XzBfYml0fERWX0lfNDlfMF9iaXR8RFZfSV81MF8wX2JpdHxEVl9JSV80OF8wX2JpdHxEVl9JSV80OV8wX2JpdCkpOworCW1hc2sgJj0gKCgoKChXWzQxXV5XWzQyXSk+PjI5KSYxKS0xKSB8IH4oRFZfSV80NV8wX2JpdHxEVl9JXzQ4XzBfYml0fERWX0lfNDlfMF9iaXR8RFZfSUlfNDdfMF9iaXR8RFZfSUlfNDhfMF9iaXQpKTsKKwltYXNrICY9ICgoKCgoV1s0MF0+PjQpXihXWzQzXT4+MjkpKSYxKS0xKSB8IH4oRFZfSV80NF8wX2JpdHxEVl9JXzQ2XzBfYml0fERWX0lfNTBfMF9iaXR8RFZfSUlfNDlfMF9iaXR8RFZfSUlfNTZfMF9iaXQpKTsKKwltYXNrICY9ICgoKCgoV1szOV0+PjQpXihXWzQyXT4+MjkpKSYxKS0xKSB8IH4oRFZfSV80M18wX2JpdHxEVl9JXzQ1XzBfYml0fERWX0lfNDlfMF9iaXR8RFZfSUlfNDhfMF9iaXR8RFZfSUlfNTVfMF9iaXQpKTsKKwlpZiAobWFzayAmIChEVl9JXzQ0XzBfYml0fERWX0lfNDhfMF9iaXR8RFZfSUlfNDdfMF9iaXR8RFZfSUlfNTRfMF9iaXR8RFZfSUlfNTZfMF9iaXQpKQorCQltYXNrICY9ICgoKCgoV1szOF0+PjQpXihXWzQxXT4+MjkpKSYxKS0xKSB8IH4oRFZfSV80NF8wX2JpdHxEVl9JXzQ4XzBfYml0fERWX0lJXzQ3XzBfYml0fERWX0lJXzU0XzBfYml0fERWX0lJXzU2XzBfYml0KSk7CisJbWFzayAmPSAoKCgoKFdbMzddPj40KV4oV1s0MF0+PjI5KSkmMSktMSkgfCB+KERWX0lfNDNfMF9iaXR8RFZfSV80N18wX2JpdHxEVl9JSV80Nl8wX2JpdHxEVl9JSV81M18wX2JpdHxEVl9JSV81NV8wX2JpdCkpOworCWlmIChtYXNrICYgKERWX0lfNTJfMF9iaXR8RFZfSUlfNDhfMF9iaXR8RFZfSUlfNTFfMF9iaXR8RFZfSUlfNTZfMF9iaXQpKQorCQltYXNrICY9ICgoKCgoV1s1NV1eV1s1Nl0pPj4yOSkmMSktMSkgfCB+KERWX0lfNTJfMF9iaXR8RFZfSUlfNDhfMF9iaXR8RFZfSUlfNTFfMF9iaXR8RFZfSUlfNTZfMF9iaXQpKTsKKwlpZiAobWFzayAmIChEVl9JXzUyXzBfYml0fERWX0lJXzQ4XzBfYml0fERWX0lJXzUwXzBfYml0fERWX0lJXzU2XzBfYml0KSkKKwkJbWFzayAmPSAoKCgoV1s1Ml1eKFdbNTVdPj4yNSkpJigxPDw0KSktKDE8PDQpKSB8IH4oRFZfSV81Ml8wX2JpdHxEVl9JSV80OF8wX2JpdHxEVl9JSV81MF8wX2JpdHxEVl9JSV81Nl8wX2JpdCkpOworCWlmIChtYXNrICYgKERWX0lfNTFfMF9iaXR8RFZfSUlfNDdfMF9iaXR8RFZfSUlfNDlfMF9iaXR8RFZfSUlfNTVfMF9iaXQpKQorCQltYXNrICY9ICgoKChXWzUxXV4oV1s1NF0+PjI1KSkmKDE8PDQpKS0oMTw8NCkpIHwgfihEVl9JXzUxXzBfYml0fERWX0lJXzQ3XzBfYml0fERWX0lJXzQ5XzBfYml0fERWX0lJXzU1XzBfYml0KSk7CisJaWYgKG1hc2sgJiAoRFZfSV80OF8wX2JpdHxEVl9JSV80N18wX2JpdHxEVl9JSV81Ml8wX2JpdHxEVl9JSV81M18wX2JpdCkpCisJCW1hc2sgJj0gKCgoKChXWzUxXV5XWzUyXSk+PjI5KSYxKS0xKSB8IH4oRFZfSV80OF8wX2JpdHxEVl9JSV80N18wX2JpdHxEVl9JSV81Ml8wX2JpdHxEVl9JSV81M18wX2JpdCkpOworCWlmIChtYXNrICYgKERWX0lfNDZfMF9iaXR8RFZfSV80OV8wX2JpdHxEVl9JSV80NV8wX2JpdHxEVl9JSV80OF8wX2JpdCkpCisJCW1hc2sgJj0gKCgoKChXWzM2XT4+NCleKFdbNDBdPj4yOSkpJjEpLTEpIHwgfihEVl9JXzQ2XzBfYml0fERWX0lfNDlfMF9iaXR8RFZfSUlfNDVfMF9iaXR8RFZfSUlfNDhfMF9iaXQpKTsKKwlpZiAobWFzayAmIChEVl9JXzUyXzBfYml0fERWX0lJXzQ4XzBfYml0fERWX0lJXzQ5XzBfYml0KSkKKwkJbWFzayAmPSAoKDAtKCgoV1s1M11eV1s1Nl0pPj4yOSkmMSkpIHwgfihEVl9JXzUyXzBfYml0fERWX0lJXzQ4XzBfYml0fERWX0lJXzQ5XzBfYml0KSk7CisJaWYgKG1hc2sgJiAoRFZfSV81MF8wX2JpdHxEVl9JSV80Nl8wX2JpdHxEVl9JSV80N18wX2JpdCkpCisJCW1hc2sgJj0gKCgwLSgoKFdbNTFdXldbNTRdKT4+MjkpJjEpKSB8IH4oRFZfSV81MF8wX2JpdHxEVl9JSV80Nl8wX2JpdHxEVl9JSV80N18wX2JpdCkpOworCWlmIChtYXNrICYgKERWX0lfNDlfMF9iaXR8RFZfSV81MV8wX2JpdHxEVl9JSV80NV8wX2JpdCkpCisJCW1hc2sgJj0gKCgwLSgoKFdbNTBdXldbNTJdKT4+MjkpJjEpKSB8IH4oRFZfSV80OV8wX2JpdHxEVl9JXzUxXzBfYml0fERWX0lJXzQ1XzBfYml0KSk7CisJaWYgKG1hc2sgJiAoRFZfSV80OF8wX2JpdHxEVl9JXzUwXzBfYml0fERWX0lfNTJfMF9iaXQpKQorCQltYXNrICY9ICgoMC0oKChXWzQ5XV5XWzUxXSk+PjI5KSYxKSkgfCB+KERWX0lfNDhfMF9iaXR8RFZfSV81MF8wX2JpdHxEVl9JXzUyXzBfYml0KSk7CisJaWYgKG1hc2sgJiAoRFZfSV80N18wX2JpdHxEVl9JXzQ5XzBfYml0fERWX0lfNTFfMF9iaXQpKQorCQltYXNrICY9ICgoMC0oKChXWzQ4XV5XWzUwXSk+PjI5KSYxKSkgfCB+KERWX0lfNDdfMF9iaXR8RFZfSV80OV8wX2JpdHxEVl9JXzUxXzBfYml0KSk7CisJaWYgKG1hc2sgJiAoRFZfSV80Nl8wX2JpdHxEVl9JXzQ4XzBfYml0fERWX0lfNTBfMF9iaXQpKQorCQltYXNrICY9ICgoMC0oKChXWzQ3XV5XWzQ5XSk+PjI5KSYxKSkgfCB+KERWX0lfNDZfMF9iaXR8RFZfSV80OF8wX2JpdHxEVl9JXzUwXzBfYml0KSk7CisJaWYgKG1hc2sgJiAoRFZfSV80NV8wX2JpdHxEVl9JXzQ3XzBfYml0fERWX0lfNDlfMF9iaXQpKQorCQltYXNrICY9ICgoMC0oKChXWzQ2XV5XWzQ4XSk+PjI5KSYxKSkgfCB+KERWX0lfNDVfMF9iaXR8RFZfSV80N18wX2JpdHxEVl9JXzQ5XzBfYml0KSk7CisJbWFzayAmPSAoKCgoV1s0NV1eV1s0N10pJigxPDw2KSktKDE8PDYpKSB8IH4oRFZfSV80N18yX2JpdHxEVl9JXzQ5XzJfYml0fERWX0lfNTFfMl9iaXQpKTsKKwlpZiAobWFzayAmIChEVl9JXzQ0XzBfYml0fERWX0lfNDZfMF9iaXR8RFZfSV80OF8wX2JpdCkpCisJCW1hc2sgJj0gKCgwLSgoKFdbNDVdXldbNDddKT4+MjkpJjEpKSB8IH4oRFZfSV80NF8wX2JpdHxEVl9JXzQ2XzBfYml0fERWX0lfNDhfMF9iaXQpKTsKKwltYXNrICY9ICgoKCgoV1s0NF1eV1s0Nl0pPj42KSYxKS0xKSB8IH4oRFZfSV80Nl8yX2JpdHxEVl9JXzQ4XzJfYml0fERWX0lfNTBfMl9iaXQpKTsKKwlpZiAobWFzayAmIChEVl9JXzQzXzBfYml0fERWX0lfNDVfMF9iaXR8RFZfSV80N18wX2JpdCkpCisJCW1hc2sgJj0gKCgwLSgoKFdbNDRdXldbNDZdKT4+MjkpJjEpKSB8IH4oRFZfSV80M18wX2JpdHxEVl9JXzQ1XzBfYml0fERWX0lfNDdfMF9iaXQpKTsKKwltYXNrICY9ICgoMC0oKFdbNDFdXihXWzQyXT4+NSkpJigxPDwxKSkpIHwgfihEVl9JXzQ4XzJfYml0fERWX0lJXzQ2XzJfYml0fERWX0lJXzUxXzJfYml0KSk7CisJbWFzayAmPSAoKDAtKChXWzQwXV4oV1s0MV0+PjUpKSYoMTw8MSkpKSB8IH4oRFZfSV80N18yX2JpdHxEVl9JXzUxXzJfYml0fERWX0lJXzUwXzJfYml0KSk7CisJaWYgKG1hc2sgJiAoRFZfSV80NF8wX2JpdHxEVl9JXzQ2XzBfYml0fERWX0lJXzU2XzBfYml0KSkKKwkJbWFzayAmPSAoKDAtKCgoV1s0MF1eV1s0Ml0pPj40KSYxKSkgfCB+KERWX0lfNDRfMF9iaXR8RFZfSV80Nl8wX2JpdHxEVl9JSV81Nl8wX2JpdCkpOworCW1hc2sgJj0gKCgwLSgoV1szOV1eKFdbNDBdPj41KSkmKDE8PDEpKSkgfCB+KERWX0lfNDZfMl9iaXR8RFZfSV81MF8yX2JpdHxEVl9JSV80OV8yX2JpdCkpOworCWlmIChtYXNrICYgKERWX0lfNDNfMF9iaXR8RFZfSV80NV8wX2JpdHxEVl9JSV81NV8wX2JpdCkpCisJCW1hc2sgJj0gKCgwLSgoKFdbMzldXldbNDFdKT4+NCkmMSkpIHwgfihEVl9JXzQzXzBfYml0fERWX0lfNDVfMF9iaXR8RFZfSUlfNTVfMF9iaXQpKTsKKwlpZiAobWFzayAmIChEVl9JXzQ0XzBfYml0fERWX0lJXzU0XzBfYml0fERWX0lJXzU2XzBfYml0KSkKKwkJbWFzayAmPSAoKDAtKCgoV1szOF1eV1s0MF0pPj40KSYxKSkgfCB+KERWX0lfNDRfMF9iaXR8RFZfSUlfNTRfMF9iaXR8RFZfSUlfNTZfMF9iaXQpKTsKKwlpZiAobWFzayAmIChEVl9JXzQzXzBfYml0fERWX0lJXzUzXzBfYml0fERWX0lJXzU1XzBfYml0KSkKKwkJbWFzayAmPSAoKDAtKCgoV1szN11eV1szOV0pPj40KSYxKSkgfCB+KERWX0lfNDNfMF9iaXR8RFZfSUlfNTNfMF9iaXR8RFZfSUlfNTVfMF9iaXQpKTsKKwltYXNrICY9ICgoMC0oKFdbMzZdXihXWzM3XT4+NSkpJigxPDwxKSkpIHwgfihEVl9JXzQ3XzJfYml0fERWX0lfNTBfMl9iaXR8RFZfSUlfNDZfMl9iaXQpKTsKKwlpZiAobWFzayAmIChEVl9JXzQ1XzBfYml0fERWX0lfNDhfMF9iaXR8RFZfSUlfNDdfMF9iaXQpKQorCQltYXNrICY9ICgoKCgoV1szNV0+PjQpXihXWzM5XT4+MjkpKSYxKS0xKSB8IH4oRFZfSV80NV8wX2JpdHxEVl9JXzQ4XzBfYml0fERWX0lJXzQ3XzBfYml0KSk7CisJaWYgKG1hc2sgJiAoRFZfSV80OF8wX2JpdHxEVl9JSV80OF8wX2JpdCkpCisJCW1hc2sgJj0gKCgwLSgoV1s2M11eKFdbNjRdPj41KSkmKDE8PDApKSkgfCB+KERWX0lfNDhfMF9iaXR8RFZfSUlfNDhfMF9iaXQpKTsKKwlpZiAobWFzayAmIChEVl9JXzQ1XzBfYml0fERWX0lJXzQ1XzBfYml0KSkKKwkJbWFzayAmPSAoKDAtKChXWzYzXV4oV1s2NF0+PjUpKSYoMTw8MSkpKSB8IH4oRFZfSV80NV8wX2JpdHxEVl9JSV80NV8wX2JpdCkpOworCWlmIChtYXNrICYgKERWX0lfNDdfMF9iaXR8RFZfSUlfNDdfMF9iaXQpKQorCQltYXNrICY9ICgoMC0oKFdbNjJdXihXWzYzXT4+NSkpJigxPDwwKSkpIHwgfihEVl9JXzQ3XzBfYml0fERWX0lJXzQ3XzBfYml0KSk7CisJaWYgKG1hc2sgJiAoRFZfSV80Nl8wX2JpdHxEVl9JSV80Nl8wX2JpdCkpCisJCW1hc2sgJj0gKCgwLSgoV1s2MV1eKFdbNjJdPj41KSkmKDE8PDApKSkgfCB+KERWX0lfNDZfMF9iaXR8RFZfSUlfNDZfMF9iaXQpKTsKKwltYXNrICY9ICgoMC0oKFdbNjFdXihXWzYyXT4+NSkpJigxPDwyKSkpIHwgfihEVl9JXzQ2XzJfYml0fERWX0lJXzQ2XzJfYml0KSk7CisJaWYgKG1hc2sgJiAoRFZfSV80NV8wX2JpdHxEVl9JSV80NV8wX2JpdCkpCisJCW1hc2sgJj0gKCgwLSgoV1s2MF1eKFdbNjFdPj41KSkmKDE8PDApKSkgfCB+KERWX0lfNDVfMF9iaXR8RFZfSUlfNDVfMF9iaXQpKTsKKwlpZiAobWFzayAmIChEVl9JSV81MV8wX2JpdHxEVl9JSV81NF8wX2JpdCkpCisJCW1hc2sgJj0gKCgoKChXWzU4XV5XWzU5XSk+PjI5KSYxKS0xKSB8IH4oRFZfSUlfNTFfMF9iaXR8RFZfSUlfNTRfMF9iaXQpKTsKKwlpZiAobWFzayAmIChEVl9JSV81MF8wX2JpdHxEVl9JSV81M18wX2JpdCkpCisJCW1hc2sgJj0gKCgoKChXWzU3XV5XWzU4XSk+PjI5KSYxKS0xKSB8IH4oRFZfSUlfNTBfMF9iaXR8RFZfSUlfNTNfMF9iaXQpKTsKKwlpZiAobWFzayAmIChEVl9JSV81Ml8wX2JpdHxEVl9JSV81NF8wX2JpdCkpCisJCW1hc2sgJj0gKCgoKFdbNTZdXihXWzU5XT4+MjUpKSYoMTw8NCkpLSgxPDw0KSkgfCB+KERWX0lJXzUyXzBfYml0fERWX0lJXzU0XzBfYml0KSk7CisJaWYgKG1hc2sgJiAoRFZfSUlfNTFfMF9iaXR8RFZfSUlfNTJfMF9iaXQpKQorCQltYXNrICY9ICgoMC0oKChXWzU2XV5XWzU5XSk+PjI5KSYxKSkgfCB+KERWX0lJXzUxXzBfYml0fERWX0lJXzUyXzBfYml0KSk7CisJaWYgKG1hc2sgJiAoRFZfSUlfNDlfMF9iaXR8RFZfSUlfNTJfMF9iaXQpKQorCQltYXNrICY9ICgoKCgoV1s1Nl1eV1s1N10pPj4yOSkmMSktMSkgfCB+KERWX0lJXzQ5XzBfYml0fERWX0lJXzUyXzBfYml0KSk7CisJaWYgKG1hc2sgJiAoRFZfSUlfNTFfMF9iaXR8RFZfSUlfNTNfMF9iaXQpKQorCQltYXNrICY9ICgoKChXWzU1XV4oV1s1OF0+PjI1KSkmKDE8PDQpKS0oMTw8NCkpIHwgfihEVl9JSV81MV8wX2JpdHxEVl9JSV81M18wX2JpdCkpOworCWlmIChtYXNrICYgKERWX0lJXzUwXzBfYml0fERWX0lJXzUyXzBfYml0KSkKKwkJbWFzayAmPSAoKCgoV1s1NF1eKFdbNTddPj4yNSkpJigxPDw0KSktKDE8PDQpKSB8IH4oRFZfSUlfNTBfMF9iaXR8RFZfSUlfNTJfMF9iaXQpKTsKKwlpZiAobWFzayAmIChEVl9JSV80OV8wX2JpdHxEVl9JSV81MV8wX2JpdCkpCisJCW1hc2sgJj0gKCgoKFdbNTNdXihXWzU2XT4+MjUpKSYoMTw8NCkpLSgxPDw0KSkgfCB+KERWX0lJXzQ5XzBfYml0fERWX0lJXzUxXzBfYml0KSk7CisJbWFzayAmPSAoKCgoV1s1MV1eKFdbNTBdPj41KSkmKDE8PDEpKS0oMTw8MSkpIHwgfihEVl9JXzUwXzJfYml0fERWX0lJXzQ2XzJfYml0KSk7CisJbWFzayAmPSAoKCgoV1s0OF1eV1s1MF0pJigxPDw2KSktKDE8PDYpKSB8IH4oRFZfSV81MF8yX2JpdHxEVl9JSV80Nl8yX2JpdCkpOworCWlmIChtYXNrICYgKERWX0lfNTFfMF9iaXR8RFZfSV81Ml8wX2JpdCkpCisJCW1hc2sgJj0gKCgwLSgoKFdbNDhdXldbNTVdKT4+MjkpJjEpKSB8IH4oRFZfSV81MV8wX2JpdHxEVl9JXzUyXzBfYml0KSk7CisJbWFzayAmPSAoKCgoV1s0N11eV1s0OV0pJigxPDw2KSktKDE8PDYpKSB8IH4oRFZfSV80OV8yX2JpdHxEVl9JXzUxXzJfYml0KSk7CisJbWFzayAmPSAoKCgoV1s0OF1eKFdbNDddPj41KSkmKDE8PDEpKS0oMTw8MSkpIHwgfihEVl9JXzQ3XzJfYml0fERWX0lJXzUxXzJfYml0KSk7CisJbWFzayAmPSAoKCgoV1s0Nl1eV1s0OF0pJigxPDw2KSktKDE8PDYpKSB8IH4oRFZfSV80OF8yX2JpdHxEVl9JXzUwXzJfYml0KSk7CisJbWFzayAmPSAoKCgoV1s0N11eKFdbNDZdPj41KSkmKDE8PDEpKS0oMTw8MSkpIHwgfihEVl9JXzQ2XzJfYml0fERWX0lJXzUwXzJfYml0KSk7CisJbWFzayAmPSAoKDAtKChXWzQ0XV4oV1s0NV0+PjUpKSYoMTw8MSkpKSB8IH4oRFZfSV81MV8yX2JpdHxEVl9JSV80OV8yX2JpdCkpOworCW1hc2sgJj0gKCgoKFdbNDNdXldbNDVdKSYoMTw8NikpLSgxPDw2KSkgfCB+KERWX0lfNDdfMl9iaXR8RFZfSV80OV8yX2JpdCkpOworCW1hc2sgJj0gKCgoKChXWzQyXV5XWzQ0XSk+PjYpJjEpLTEpIHwgfihEVl9JXzQ2XzJfYml0fERWX0lfNDhfMl9iaXQpKTsKKwltYXNrICY9ICgoKChXWzQzXV4oV1s0Ml0+PjUpKSYoMTw8MSkpLSgxPDwxKSkgfCB+KERWX0lJXzQ2XzJfYml0fERWX0lJXzUxXzJfYml0KSk7CisJbWFzayAmPSAoKCgoV1s0Ml1eKFdbNDFdPj41KSkmKDE8PDEpKS0oMTw8MSkpIHwgfihEVl9JXzUxXzJfYml0fERWX0lJXzUwXzJfYml0KSk7CisJbWFzayAmPSAoKCgoV1s0MV1eKFdbNDBdPj41KSkmKDE8PDEpKS0oMTw8MSkpIHwgfihEVl9JXzUwXzJfYml0fERWX0lJXzQ5XzJfYml0KSk7CisJaWYgKG1hc2sgJiAoRFZfSV81Ml8wX2JpdHxEVl9JSV81MV8wX2JpdCkpCisJCW1hc2sgJj0gKCgoKFdbMzldXihXWzQzXT4+MjUpKSYoMTw8NCkpLSgxPDw0KSkgfCB+KERWX0lfNTJfMF9iaXR8RFZfSUlfNTFfMF9iaXQpKTsKKwlpZiAobWFzayAmIChEVl9JXzUxXzBfYml0fERWX0lJXzUwXzBfYml0KSkKKwkJbWFzayAmPSAoKCgoV1szOF1eKFdbNDJdPj4yNSkpJigxPDw0KSktKDE8PDQpKSB8IH4oRFZfSV81MV8wX2JpdHxEVl9JSV81MF8wX2JpdCkpOworCWlmIChtYXNrICYgKERWX0lfNDhfMl9iaXR8RFZfSV81MV8yX2JpdCkpCisJCW1hc2sgJj0gKCgwLSgoV1szN11eKFdbMzhdPj41KSkmKDE8PDEpKSkgfCB+KERWX0lfNDhfMl9iaXR8RFZfSV81MV8yX2JpdCkpOworCWlmIChtYXNrICYgKERWX0lfNTBfMF9iaXR8RFZfSUlfNDlfMF9iaXQpKQorCQltYXNrICY9ICgoKChXWzM3XV4oV1s0MV0+PjI1KSkmKDE8PDQpKS0oMTw8NCkpIHwgfihEVl9JXzUwXzBfYml0fERWX0lJXzQ5XzBfYml0KSk7CisJaWYgKG1hc2sgJiAoRFZfSUlfNTJfMF9iaXR8RFZfSUlfNTRfMF9iaXQpKQorCQltYXNrICY9ICgoMC0oKFdbMzZdXldbMzhdKSYoMTw8NCkpKSB8IH4oRFZfSUlfNTJfMF9iaXR8RFZfSUlfNTRfMF9iaXQpKTsKKwltYXNrICY9ICgoMC0oKFdbMzVdXihXWzM2XT4+NSkpJigxPDwxKSkpIHwgfihEVl9JXzQ2XzJfYml0fERWX0lfNDlfMl9iaXQpKTsKKwlpZiAobWFzayAmIChEVl9JXzUxXzBfYml0fERWX0lJXzQ3XzBfYml0KSkKKwkJbWFzayAmPSAoKCgoV1szNV1eKFdbMzldPj4yNSkpJigxPDwzKSktKDE8PDMpKSB8IH4oRFZfSV81MV8wX2JpdHxEVl9JSV80N18wX2JpdCkpOworaWYgKG1hc2spIHsKKworCWlmIChtYXNrICYgRFZfSV80M18wX2JpdCkKKwkJIGlmICgKKwkJCSAgICAhKChXWzYxXV4oV1s2Ml0+PjUpKSAmICgxPDwxKSkKKwkJCSB8fCAhKCEoKFdbNTldXihXWzYzXT4+MjUpKSAmICgxPDw1KSkpCisJCQkgfHwgISgoV1s1OF1eKFdbNjNdPj4zMCkpICYgKDE8PDApKQorCQkgKSAgbWFzayAmPSB+RFZfSV80M18wX2JpdDsKKwlpZiAobWFzayAmIERWX0lfNDRfMF9iaXQpCisJCSBpZiAoCisJCQkgICAgISgoV1s2Ml1eKFdbNjNdPj41KSkgJiAoMTw8MSkpCisJCQkgfHwgISghKChXWzYwXV4oV1s2NF0+PjI1KSkgJiAoMTw8NSkpKQorCQkJIHx8ICEoKFdbNTldXihXWzY0XT4+MzApKSAmICgxPDwwKSkKKwkJICkgIG1hc2sgJj0gfkRWX0lfNDRfMF9iaXQ7CisJaWYgKG1hc2sgJiBEVl9JXzQ2XzJfYml0KQorCQltYXNrICY9ICgofigoV1s0MF1eV1s0Ml0pPj4yKSkgfCB+RFZfSV80Nl8yX2JpdCk7CisJaWYgKG1hc2sgJiBEVl9JXzQ3XzJfYml0KQorCQkgaWYgKAorCQkJICAgICEoKFdbNjJdXihXWzYzXT4+NSkpICYgKDE8PDIpKQorCQkJIHx8ICEoISgoV1s0MV1eV1s0M10pICYgKDE8PDYpKSkKKwkJICkgIG1hc2sgJj0gfkRWX0lfNDdfMl9iaXQ7CisJaWYgKG1hc2sgJiBEVl9JXzQ4XzJfYml0KQorCQkgaWYgKAorCQkJICAgICEoKFdbNjNdXihXWzY0XT4+NSkpICYgKDE8PDIpKQorCQkJIHx8ICEoISgoV1s0OF1eKFdbNDldPDw1KSkgJiAoMTw8NikpKQorCQkgKSAgbWFzayAmPSB+RFZfSV80OF8yX2JpdDsKKwlpZiAobWFzayAmIERWX0lfNDlfMl9iaXQpCisJCSBpZiAoCisJCQkgICAgISghKChXWzQ5XV4oV1s1MF08PDUpKSAmICgxPDw2KSkpCisJCQkgfHwgISgoV1s0Ml1eV1s1MF0pICYgKDE8PDEpKQorCQkJIHx8ICEoISgoV1szOV1eKFdbNDBdPDw1KSkgJiAoMTw8NikpKQorCQkJIHx8ICEoKFdbMzhdXldbNDBdKSAmICgxPDwxKSkKKwkJICkgIG1hc2sgJj0gfkRWX0lfNDlfMl9iaXQ7CisJaWYgKG1hc2sgJiBEVl9JXzUwXzBfYml0KQorCQltYXNrICY9ICgoKChXWzM2XV5XWzM3XSk8PDcpKSB8IH5EVl9JXzUwXzBfYml0KTsKKwlpZiAobWFzayAmIERWX0lfNTBfMl9iaXQpCisJCW1hc2sgJj0gKCgoKFdbNDNdXldbNTFdKTw8MTEpKSB8IH5EVl9JXzUwXzJfYml0KTsKKwlpZiAobWFzayAmIERWX0lfNTFfMF9iaXQpCisJCW1hc2sgJj0gKCgoKFdbMzddXldbMzhdKTw8OSkpIHwgfkRWX0lfNTFfMF9iaXQpOworCWlmIChtYXNrICYgRFZfSV81MV8yX2JpdCkKKwkJIGlmICgKKwkJCSAgICAhKCEoKFdbNTFdXihXWzUyXTw8NSkpICYgKDE8PDYpKSkKKwkJCSB8fCAhKCEoKFdbNDldXldbNTFdKSAmICgxPDw2KSkpCisJCQkgfHwgISghKChXWzM3XV4oV1szN10+PjUpKSAmICgxPDwxKSkpCisJCQkgfHwgISghKChXWzM1XV4oV1szOV0+PjI1KSkgJiAoMTw8NSkpKQorCQkgKSAgbWFzayAmPSB+RFZfSV81MV8yX2JpdDsKKwlpZiAobWFzayAmIERWX0lfNTJfMF9iaXQpCisJCW1hc2sgJj0gKCgoKFdbMzhdXldbMzldKTw8MTEpKSB8IH5EVl9JXzUyXzBfYml0KTsKKwlpZiAobWFzayAmIERWX0lJXzQ2XzJfYml0KQorCQltYXNrICY9ICgoKChXWzQ3XV5XWzUxXSk8PDE3KSkgfCB+RFZfSUlfNDZfMl9iaXQpOworCWlmIChtYXNrICYgRFZfSUlfNDhfMF9iaXQpCisJCSBpZiAoCisJCQkgICAgISghKChXWzM2XV4oV1s0MF0+PjI1KSkgJiAoMTw8MykpKQorCQkJIHx8ICEoKFdbMzVdXihXWzQwXTw8MikpICYgKDE8PDMwKSkKKwkJICkgIG1hc2sgJj0gfkRWX0lJXzQ4XzBfYml0OworCWlmIChtYXNrICYgRFZfSUlfNDlfMF9iaXQpCisJCSBpZiAoCisJCQkgICAgISghKChXWzM3XV4oV1s0MV0+PjI1KSkgJiAoMTw8MykpKQorCQkJIHx8ICEoKFdbMzZdXihXWzQxXTw8MikpICYgKDE8PDMwKSkKKwkJICkgIG1hc2sgJj0gfkRWX0lJXzQ5XzBfYml0OworCWlmIChtYXNrICYgRFZfSUlfNDlfMl9iaXQpCisJCSBpZiAoCisJCQkgICAgISghKChXWzUzXV4oV1s1NF08PDUpKSAmICgxPDw2KSkpCisJCQkgfHwgISghKChXWzUxXV5XWzUzXSkgJiAoMTw8NikpKQorCQkJIHx8ICEoKFdbNTBdXldbNTRdKSAmICgxPDwxKSkKKwkJCSB8fCAhKCEoKFdbNDVdXihXWzQ2XTw8NSkpICYgKDE8PDYpKSkKKwkJCSB8fCAhKCEoKFdbMzddXihXWzQxXT4+MjUpKSAmICgxPDw1KSkpCisJCQkgfHwgISgoV1szNl1eKFdbNDFdPj4zMCkpICYgKDE8PDApKQorCQkgKSAgbWFzayAmPSB+RFZfSUlfNDlfMl9iaXQ7CisJaWYgKG1hc2sgJiBEVl9JSV81MF8wX2JpdCkKKwkJIGlmICgKKwkJCSAgICAhKChXWzU1XV5XWzU4XSkgJiAoMTw8MjkpKQorCQkJIHx8ICEoISgoV1szOF1eKFdbNDJdPj4yNSkpICYgKDE8PDMpKSkKKwkJCSB8fCAhKChXWzM3XV4oV1s0Ml08PDIpKSAmICgxPDwzMCkpCisJCSApICBtYXNrICY9IH5EVl9JSV81MF8wX2JpdDsKKwlpZiAobWFzayAmIERWX0lJXzUwXzJfYml0KQorCQkgaWYgKAorCQkJICAgICEoISgoV1s1NF1eKFdbNTVdPDw1KSkgJiAoMTw8NikpKQorCQkJIHx8ICEoISgoV1s1Ml1eV1s1NF0pICYgKDE8PDYpKSkKKwkJCSB8fCAhKChXWzUxXV5XWzU1XSkgJiAoMTw8MSkpCisJCQkgfHwgISgoV1s0NV1eV1s0N10pICYgKDE8PDEpKQorCQkJIHx8ICEoISgoV1szOF1eKFdbNDJdPj4yNSkpICYgKDE8PDUpKSkKKwkJCSB8fCAhKChXWzM3XV4oV1s0Ml0+PjMwKSkgJiAoMTw8MCkpCisJCSApICBtYXNrICY9IH5EVl9JSV81MF8yX2JpdDsKKwlpZiAobWFzayAmIERWX0lJXzUxXzBfYml0KQorCQkgaWYgKAorCQkJICAgICEoISgoV1szOV1eKFdbNDNdPj4yNSkpICYgKDE8PDMpKSkKKwkJCSB8fCAhKChXWzM4XV4oV1s0M108PDIpKSAmICgxPDwzMCkpCisJCSApICBtYXNrICY9IH5EVl9JSV81MV8wX2JpdDsKKwlpZiAobWFzayAmIERWX0lJXzUxXzJfYml0KQorCQkgaWYgKAorCQkJICAgICEoISgoV1s1NV1eKFdbNTZdPDw1KSkgJiAoMTw8NikpKQorCQkJIHx8ICEoISgoV1s1M11eV1s1NV0pICYgKDE8PDYpKSkKKwkJCSB8fCAhKChXWzUyXV5XWzU2XSkgJiAoMTw8MSkpCisJCQkgfHwgISgoV1s0Nl1eV1s0OF0pICYgKDE8PDEpKQorCQkJIHx8ICEoISgoV1szOV1eKFdbNDNdPj4yNSkpICYgKDE8PDUpKSkKKwkJCSB8fCAhKChXWzM4XV4oV1s0M10+PjMwKSkgJiAoMTw8MCkpCisJCSApICBtYXNrICY9IH5EVl9JSV81MV8yX2JpdDsKKwlpZiAobWFzayAmIERWX0lJXzUyXzBfYml0KQorCQkgaWYgKAorCQkJICAgICEoISgoV1s1OV1eV1s2MF0pICYgKDE8PDI5KSkpCisJCQkgfHwgISghKChXWzQwXV4oV1s0NF0+PjI1KSkgJiAoMTw8MykpKQorCQkJIHx8ICEoISgoV1s0MF1eKFdbNDRdPj4yNSkpICYgKDE8PDQpKSkKKwkJCSB8fCAhKChXWzM5XV4oV1s0NF08PDIpKSAmICgxPDwzMCkpCisJCSApICBtYXNrICY9IH5EVl9JSV81Ml8wX2JpdDsKKwlpZiAobWFzayAmIERWX0lJXzUzXzBfYml0KQorCQkgaWYgKAorCQkJICAgICEoKFdbNThdXldbNjFdKSAmICgxPDwyOSkpCisJCQkgfHwgISghKChXWzU3XV4oV1s2MV0+PjI1KSkgJiAoMTw8NCkpKQorCQkJIHx8ICEoISgoV1s0MV1eKFdbNDVdPj4yNSkpICYgKDE8PDMpKSkKKwkJCSB8fCAhKCEoKFdbNDFdXihXWzQ1XT4+MjUpKSAmICgxPDw0KSkpCisJCSApICBtYXNrICY9IH5EVl9JSV81M18wX2JpdDsKKwlpZiAobWFzayAmIERWX0lJXzU0XzBfYml0KQorCQkgaWYgKAorCQkJICAgICEoISgoV1s1OF1eKFdbNjJdPj4yNSkpICYgKDE8PDQpKSkKKwkJCSB8fCAhKCEoKFdbNDJdXihXWzQ2XT4+MjUpKSAmICgxPDwzKSkpCisJCQkgfHwgISghKChXWzQyXV4oV1s0Nl0+PjI1KSkgJiAoMTw8NCkpKQorCQkgKSAgbWFzayAmPSB+RFZfSUlfNTRfMF9iaXQ7CisJaWYgKG1hc2sgJiBEVl9JSV81NV8wX2JpdCkKKwkJIGlmICgKKwkJCSAgICAhKCEoKFdbNTldXihXWzYzXT4+MjUpKSAmICgxPDw0KSkpCisJCQkgfHwgISghKChXWzU3XV4oV1s1OV0+PjI1KSkgJiAoMTw8NCkpKQorCQkJIHx8ICEoISgoV1s0M11eKFdbNDddPj4yNSkpICYgKDE8PDMpKSkKKwkJCSB8fCAhKCEoKFdbNDNdXihXWzQ3XT4+MjUpKSAmICgxPDw0KSkpCisJCSApICBtYXNrICY9IH5EVl9JSV81NV8wX2JpdDsKKwlpZiAobWFzayAmIERWX0lJXzU2XzBfYml0KQorCQkgaWYgKAorCQkJICAgICEoISgoV1s2MF1eKFdbNjRdPj4yNSkpICYgKDE8PDQpKSkKKwkJCSB8fCAhKCEoKFdbNDRdXihXWzQ4XT4+MjUpKSAmICgxPDwzKSkpCisJCQkgfHwgISghKChXWzQ0XV4oV1s0OF0+PjI1KSkgJiAoMTw8NCkpKQorCQkgKSAgbWFzayAmPSB+RFZfSUlfNTZfMF9iaXQ7Cit9CisKKwlkdm1hc2tbMF09bWFzazsKK30KKworI2lmZGVmIFNIQTFEQ19DVVNUT01fVFJBSUxJTkdfSU5DTFVERV9VQkNfQ0hFQ0tfQworI2luY2x1ZGUgU0hBMURDX0NVU1RPTV9UUkFJTElOR19JTkNMVURFX1VCQ19DSEVDS19DCisjZW5kaWYKZGlmZiAtLWdpdCBhL3NyYy9oYXNoL3NoYTFkYy91YmNfY2hlY2suaCBiL3NyYy9oYXNoL3NoYTFkYy91YmNfY2hlY2suaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kN2UxN2RjCi0tLSAvZGV2L251bGwKKysrIGIvc3JjL2hhc2gvc2hhMWRjL3ViY19jaGVjay5oCkBAIC0wLDAgKzEsNTIgQEAKKy8qKioKKyogQ29weXJpZ2h0IDIwMTcgTWFyYyBTdGV2ZW5zIDxtYXJjQG1hcmMtc3RldmVucy5ubD4sIERhbiBTaHVtb3cgPGRhbnNodUBtaWNyb3NvZnQuY29tPgorKiBEaXN0cmlidXRlZCB1bmRlciB0aGUgTUlUIFNvZnR3YXJlIExpY2Vuc2UuCisqIFNlZSBhY2NvbXBhbnlpbmcgZmlsZSBMSUNFTlNFLnR4dCBvciBjb3B5IGF0CisqIGh0dHBzOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvTUlUCisqKiovCisKKy8qCisvLyB0aGlzIGZpbGUgd2FzIGdlbmVyYXRlZCBieSB0aGUgJ3BhcnNlX2JpdHJlbCcgcHJvZ3JhbSBpbiB0aGUgdG9vbHMgc2VjdGlvbgorLy8gdXNpbmcgdGhlIGRhdGEgZmlsZXMgZnJvbSBkaXJlY3RvcnkgJ3Rvb2xzL2RhdGEvMzU2NScKKy8vCisvLyBzaGExX2R2cyBjb250YWlucyBhIGxpc3Qgb2YgU0hBLTEgRGlzdHVyYmFuY2UgVmVjdG9ycyAoRFYpIHRvIGNoZWNrCisvLyBkdlR5cGUsIGR2SyBhbmQgZHZCIGRlZmluZSB0aGUgRFY6IEkoSyxCKSBvciBJSShLLEIpIChzZWUgdGhlIHBhcGVyKQorLy8gZG1bODBdIGlzIHRoZSBleHBhbmRlZCBtZXNzYWdlIGJsb2NrIFhPUi1kaWZmZXJlbmNlIGRlZmluZWQgYnkgdGhlIERWCisvLyB0ZXN0dCBpcyB0aGUgc3RlcCB0byBkbyB0aGUgcmVjb21wcmVzc2lvbiBmcm9tIGZvciBjb2xsaXNpb24gZGV0ZWN0aW9uCisvLyBtYXNraSBhbmQgbWFza2IgZGVmaW5lIHRoZSBiaXQgdG8gY2hlY2sgZm9yIGVhY2ggRFYgaW4gdGhlIGR2bWFzayByZXR1cm5lZCBieSB1YmNfY2hlY2sKKy8vCisvLyB1YmNfY2hlY2sgdGFrZXMgYXMgaW5wdXQgYW4gZXhwYW5kZWQgbWVzc2FnZSBibG9jayBhbmQgdmVyaWZpZXMgdGhlIHVuYXZvaWRhYmxlIGJpdGNvbmRpdGlvbnMgZm9yIGFsbCBsaXN0ZWQgRFZzCisvLyBpdCByZXR1cm5zIGEgZHZtYXNrIHdoZXJlIGVhY2ggYml0IGJlbG9uZ2luZyB0byBhIERWIGlzIHNldCBpZiBhbGwgdW5hdm9pZGFibGUgYml0Y29uZGl0aW9ucyBmb3IgdGhhdCBEViBoYXZlIGJlZW4gbWV0CisvLyB0aHVzIG9uZSBuZWVkcyB0byBkbyB0aGUgcmVjb21wcmVzc2lvbiBjaGVjayBmb3IgZWFjaCBEViB0aGF0IGhhcyBpdHMgYml0IHNldAorKi8KKworI2lmbmRlZiBTSEExRENfVUJDX0NIRUNLX0gKKyNkZWZpbmUgU0hBMURDX1VCQ19DSEVDS19ICisKKyNpZiBkZWZpbmVkKF9fY3BsdXNwbHVzKQorZXh0ZXJuICJDIiB7CisjZW5kaWYKKworI2lmbmRlZiBTSEExRENfTk9fU1RBTkRBUkRfSU5DTFVERVMKKyNpbmNsdWRlIDxzdGRpbnQuaD4KKyNlbmRpZgorCisjZGVmaW5lIERWTUFTS1NJWkUgMQordHlwZWRlZiBzdHJ1Y3QgeyBpbnQgZHZUeXBlOyBpbnQgZHZLOyBpbnQgZHZCOyBpbnQgdGVzdHQ7IGludCBtYXNraTsgaW50IG1hc2tiOyB1aW50MzJfdCBkbVs4MF07IH0gZHZfaW5mb190OworZXh0ZXJuIGR2X2luZm9fdCBzaGExX2R2c1tdOwordm9pZCB1YmNfY2hlY2soY29uc3QgdWludDMyX3QgV1s4MF0sIHVpbnQzMl90IGR2bWFza1tEVk1BU0tTSVpFXSk7CisKKyNkZWZpbmUgRE9TVE9SRVNUQVRFNTgKKyNkZWZpbmUgRE9TVE9SRVNUQVRFNjUKKworI2RlZmluZSBDSEVDS19EVk1BU0soX0RWTUFTSykgKDAgIT0gX0RWTUFTS1swXSkKKworI2lmIGRlZmluZWQoX19jcGx1c3BsdXMpCit9CisjZW5kaWYKKworI2lmZGVmIFNIQTFEQ19DVVNUT01fVFJBSUxJTkdfSU5DTFVERV9VQkNfQ0hFQ0tfSAorI2luY2x1ZGUgU0hBMURDX0NVU1RPTV9UUkFJTElOR19JTkNMVURFX1VCQ19DSEVDS19ICisjZW5kaWYKKworI2VuZGlmCmRpZmYgLS1naXQgYS9zcmMvaWR4bWFwLmMgYi9zcmMvaWR4bWFwLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDVmMGMyMgotLS0gL2Rldi9udWxsCisrKyBiL3NyYy9pZHhtYXAuYwpAQCAtMCwwICsxLDEzMyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgdGhlIGxpYmdpdDIgY29udHJpYnV0b3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIGxpYmdpdDIsIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBHTlUgR1BMIHYyIHdpdGgKKyAqIGEgTGlua2luZyBFeGNlcHRpb24uIEZvciBmdWxsIHRlcm1zIHNlZSB0aGUgaW5jbHVkZWQgQ09QWUlORyBmaWxlLgorICovCisKKyNpbmNsdWRlICJpZHhtYXAuaCIKKworLyogVGhpcyBpcyBfX2FjX1gzMV9oYXNoX3N0cmluZyBidXQgd2l0aCB0b2xvd2VyIGFuZCBpdCB0YWtlcyB0aGUgZW50cnkncyBzdGFnZSBpbnRvIGFjY291bnQgKi8KK3N0YXRpYyBraF9pbmxpbmUga2hpbnRfdCBpZHhlbnRyeV9oYXNoKGNvbnN0IGdpdF9pbmRleF9lbnRyeSAqZSkKK3sKKwljb25zdCBjaGFyICpzID0gZS0+cGF0aDsKKwlraGludF90IGggPSAoa2hpbnRfdClnaXRfX3RvbG93ZXIoKnMpOworCWlmIChoKSBmb3IgKCsrcyA7ICpzOyArK3MpIGggPSAoaCA8PCA1KSAtIGggKyAoa2hpbnRfdClnaXRfX3RvbG93ZXIoKnMpOworCXJldHVybiBoICsgR0lUX0lEWEVOVFJZX1NUQUdFKGUpOworfQorCisjZGVmaW5lIGlkeGVudHJ5X2VxdWFsKGEsIGIpIChHSVRfSURYRU5UUllfU1RBR0UoYSkgPT0gR0lUX0lEWEVOVFJZX1NUQUdFKGIpICYmIHN0cmNtcChhLT5wYXRoLCBiLT5wYXRoKSA9PSAwKQorI2RlZmluZSBpZHhlbnRyeV9pY2FzZV9lcXVhbChhLCBiKSAoR0lUX0lEWEVOVFJZX1NUQUdFKGEpID09IEdJVF9JRFhFTlRSWV9TVEFHRShiKSAmJiBzdHJjYXNlY21wKGEtPnBhdGgsIGItPnBhdGgpID09IDApCisKK19fS0hBU0hfSU1QTChpZHgsIHN0YXRpYyBraF9pbmxpbmUsIGNvbnN0IGdpdF9pbmRleF9lbnRyeSAqLCBnaXRfaW5kZXhfZW50cnkgKiwgMSwgaWR4ZW50cnlfaGFzaCwgaWR4ZW50cnlfZXF1YWwpCitfX0tIQVNIX0lNUEwoaWR4aWNhc2UsIHN0YXRpYyBraF9pbmxpbmUsIGNvbnN0IGdpdF9pbmRleF9lbnRyeSAqLCBnaXRfaW5kZXhfZW50cnkgKiwgMSwgaWR4ZW50cnlfaGFzaCwgaWR4ZW50cnlfaWNhc2VfZXF1YWwpCisKK2ludCBnaXRfaWR4bWFwX2FsbG9jKGdpdF9pZHhtYXAgKiptYXApCit7CisJaWYgKCgqbWFwID0ga2hfaW5pdChpZHgpKSA9PSBOVUxMKSB7CisJCWdpdGVycl9zZXRfb29tKCk7CisJCXJldHVybiAtMTsKKwl9CisKKwlyZXR1cm4gMDsKK30KKworaW50IGdpdF9pZHhtYXBfaWNhc2VfYWxsb2MoZ2l0X2lkeG1hcF9pY2FzZSAqKm1hcCkKK3sKKwlpZiAoKCptYXAgPSBraF9pbml0KGlkeGljYXNlKSkgPT0gTlVMTCkgeworCQlnaXRlcnJfc2V0X29vbSgpOworCQlyZXR1cm4gLTE7CisJfQorCisJcmV0dXJuIDA7Cit9CisKK3ZvaWQgZ2l0X2lkeG1hcF9pbnNlcnQoZ2l0X2lkeG1hcCAqbWFwLCBjb25zdCBnaXRfaW5kZXhfZW50cnkgKmtleSwgdm9pZCAqdmFsdWUsIGludCAqcnZhbCkKK3sKKwlraGl0ZXJfdCBpZHggPSBraF9wdXQoaWR4LCBtYXAsIGtleSwgcnZhbCk7CisKKwlpZiAoKCpydmFsKSA+PSAwKSB7CisJCWlmICgoKnJ2YWwpID09IDApCisJCQlraF9rZXkobWFwLCBpZHgpID0ga2V5OworCQlraF92YWwobWFwLCBpZHgpID0gdmFsdWU7CisJfQorfQorCit2b2lkIGdpdF9pZHhtYXBfaWNhc2VfaW5zZXJ0KGdpdF9pZHhtYXBfaWNhc2UgKm1hcCwgY29uc3QgZ2l0X2luZGV4X2VudHJ5ICprZXksIHZvaWQgKnZhbHVlLCBpbnQgKnJ2YWwpCit7CisJa2hpdGVyX3QgaWR4ID0ga2hfcHV0KGlkeGljYXNlLCBtYXAsIGtleSwgcnZhbCk7CisKKwlpZiAoKCpydmFsKSA+PSAwKSB7CisJCWlmICgoKnJ2YWwpID09IDApCisJCQlraF9rZXkobWFwLCBpZHgpID0ga2V5OworCQlraF92YWwobWFwLCBpZHgpID0gdmFsdWU7CisJfQorfQorCitzaXplX3QgZ2l0X2lkeG1hcF9sb29rdXBfaW5kZXgoZ2l0X2lkeG1hcCAqbWFwLCBjb25zdCBnaXRfaW5kZXhfZW50cnkgKmtleSkKK3sKKwlyZXR1cm4ga2hfZ2V0KGlkeCwgbWFwLCBrZXkpOworfQorCitzaXplX3QgZ2l0X2lkeG1hcF9pY2FzZV9sb29rdXBfaW5kZXgoZ2l0X2lkeG1hcF9pY2FzZSAqbWFwLCBjb25zdCBnaXRfaW5kZXhfZW50cnkgKmtleSkKK3sKKwlyZXR1cm4ga2hfZ2V0KGlkeGljYXNlLCBtYXAsIGtleSk7Cit9CisKK3ZvaWQgKmdpdF9pZHhtYXBfdmFsdWVfYXQoZ2l0X2lkeG1hcCAqbWFwLCBzaXplX3QgaWR4KQoreworCXJldHVybiBraF92YWwobWFwLCBpZHgpOworfQorCitpbnQgZ2l0X2lkeG1hcF92YWxpZF9pbmRleChnaXRfaWR4bWFwICptYXAsIHNpemVfdCBpZHgpCit7CisJcmV0dXJuIGlkeCAhPSBraF9lbmQobWFwKTsKK30KKworaW50IGdpdF9pZHhtYXBfaGFzX2RhdGEoZ2l0X2lkeG1hcCAqbWFwLCBzaXplX3QgaWR4KQoreworCXJldHVybiBraF9leGlzdChtYXAsIGlkeCk7Cit9CisKK3ZvaWQgZ2l0X2lkeG1hcF9yZXNpemUoZ2l0X2lkeG1hcCAqbWFwLCBzaXplX3Qgc2l6ZSkKK3sKKwlraF9yZXNpemUoaWR4LCBtYXAsIHNpemUpOworfQorCit2b2lkIGdpdF9pZHhtYXBfaWNhc2VfcmVzaXplKGdpdF9pZHhtYXBfaWNhc2UgKm1hcCwgc2l6ZV90IHNpemUpCit7CisJa2hfcmVzaXplKGlkeGljYXNlLCBtYXAsIHNpemUpOworfQorCit2b2lkIGdpdF9pZHhtYXBfZnJlZShnaXRfaWR4bWFwICptYXApCit7CisJa2hfZGVzdHJveShpZHgsIG1hcCk7Cit9CisKK3ZvaWQgZ2l0X2lkeG1hcF9jbGVhcihnaXRfaWR4bWFwICptYXApCit7CisJa2hfY2xlYXIoaWR4LCBtYXApOworfQorCit2b2lkIGdpdF9pZHhtYXBfZGVsZXRlX2F0KGdpdF9pZHhtYXAgKm1hcCwgc2l6ZV90IGlkeCkKK3sKKwlraF9kZWwoaWR4LCBtYXAsIGlkeCk7Cit9CisKK3ZvaWQgZ2l0X2lkeG1hcF9pY2FzZV9kZWxldGVfYXQoZ2l0X2lkeG1hcF9pY2FzZSAqbWFwLCBzaXplX3QgaWR4KQoreworCWtoX2RlbChpZHhpY2FzZSwgbWFwLCBpZHgpOworfQorCit2b2lkIGdpdF9pZHhtYXBfZGVsZXRlKGdpdF9pZHhtYXAgKm1hcCwgY29uc3QgZ2l0X2luZGV4X2VudHJ5ICprZXkpCit7CisJa2hpdGVyX3QgaWR4ID0gZ2l0X2lkeG1hcF9sb29rdXBfaW5kZXgobWFwLCBrZXkpOworCWlmIChnaXRfaWR4bWFwX3ZhbGlkX2luZGV4KG1hcCwgaWR4KSkKKwkJZ2l0X2lkeG1hcF9kZWxldGVfYXQobWFwLCBpZHgpOworfQordm9pZCBnaXRfaWR4bWFwX2ljYXNlX2RlbGV0ZShnaXRfaWR4bWFwX2ljYXNlICptYXAsIGNvbnN0IGdpdF9pbmRleF9lbnRyeSAqa2V5KQoreworCWtoaXRlcl90IGlkeCA9IGdpdF9pZHhtYXBfaWNhc2VfbG9va3VwX2luZGV4KG1hcCwga2V5KTsKKwlpZiAoZ2l0X2lkeG1hcF92YWxpZF9pbmRleCgoZ2l0X2lkeG1hcCAqKW1hcCwgaWR4KSkKKwkJZ2l0X2lkeG1hcF9pY2FzZV9kZWxldGVfYXQobWFwLCBpZHgpOworfQpkaWZmIC0tZ2l0IGEvc3JjL2lkeG1hcC5oIGIvc3JjL2lkeG1hcC5oCmluZGV4IDQxMjJhODkuLmRjNzAyYzMgMTAwNjQ0Ci0tLSBhL3NyYy9pZHhtYXAuaAorKysgYi9zcmMvaWR4bWFwLmgKQEAgLTI2LDY2ICsyNiwyNyBAQAogCiB0eXBlZGVmIGtoaXRlcl90IGdpdF9pZHhtYXBfaXRlcjsKIAotLyogVGhpcyBpcyBfX2FjX1gzMV9oYXNoX3N0cmluZyBidXQgd2l0aCB0b2xvd2VyIGFuZCBpdCB0YWtlcyB0aGUgZW50cnkncyBzdGFnZSBpbnRvIGFjY291bnQgKi8KLXN0YXRpYyBraF9pbmxpbmUga2hpbnRfdCBpZHhlbnRyeV9oYXNoKGNvbnN0IGdpdF9pbmRleF9lbnRyeSAqZSkKLXsKLQljb25zdCBjaGFyICpzID0gZS0+cGF0aDsKLQlraGludF90IGggPSAoa2hpbnRfdClnaXRfX3RvbG93ZXIoKnMpOwotCWlmIChoKSBmb3IgKCsrcyA7ICpzOyArK3MpIGggPSAoaCA8PCA1KSAtIGggKyAoa2hpbnRfdClnaXRfX3RvbG93ZXIoKnMpOwotCXJldHVybiBoICsgR0lUX0lEWEVOVFJZX1NUQUdFKGUpOwotfQoraW50IGdpdF9pZHhtYXBfYWxsb2MoZ2l0X2lkeG1hcCAqKm1hcCk7CitpbnQgZ2l0X2lkeG1hcF9pY2FzZV9hbGxvYyhnaXRfaWR4bWFwX2ljYXNlICoqbWFwKTsKK3ZvaWQgZ2l0X2lkeG1hcF9pbnNlcnQoZ2l0X2lkeG1hcCAqbWFwLCBjb25zdCBnaXRfaW5kZXhfZW50cnkgKmtleSwgdm9pZCAqdmFsdWUsIGludCAqcnZhbCk7Cit2b2lkIGdpdF9pZHhtYXBfaWNhc2VfaW5zZXJ0KGdpdF9pZHhtYXBfaWNhc2UgKm1hcCwgY29uc3QgZ2l0X2luZGV4X2VudHJ5ICprZXksIHZvaWQgKnZhbHVlLCBpbnQgKnJ2YWwpOwogCi0jZGVmaW5lIGlkeGVudHJ5X2VxdWFsKGEsIGIpIChHSVRfSURYRU5UUllfU1RBR0UoYSkgPT0gR0lUX0lEWEVOVFJZX1NUQUdFKGIpICYmIHN0cmNtcChhLT5wYXRoLCBiLT5wYXRoKSA9PSAwKQotI2RlZmluZSBpZHhlbnRyeV9pY2FzZV9lcXVhbChhLCBiKSAoR0lUX0lEWEVOVFJZX1NUQUdFKGEpID09IEdJVF9JRFhFTlRSWV9TVEFHRShiKSAmJiBzdHJjYXNlY21wKGEtPnBhdGgsIGItPnBhdGgpID09IDApCitzaXplX3QgZ2l0X2lkeG1hcF9sb29rdXBfaW5kZXgoZ2l0X2lkeG1hcCAqbWFwLCBjb25zdCBnaXRfaW5kZXhfZW50cnkgKmtleSk7CitzaXplX3QgZ2l0X2lkeG1hcF9pY2FzZV9sb29rdXBfaW5kZXgoZ2l0X2lkeG1hcF9pY2FzZSAqbWFwLCBjb25zdCBnaXRfaW5kZXhfZW50cnkgKmtleSk7Cit2b2lkICpnaXRfaWR4bWFwX3ZhbHVlX2F0KGdpdF9pZHhtYXAgKm1hcCwgc2l6ZV90IGlkeCk7CitpbnQgZ2l0X2lkeG1hcF92YWxpZF9pbmRleChnaXRfaWR4bWFwICptYXAsIHNpemVfdCBpZHgpOworaW50IGdpdF9pZHhtYXBfaGFzX2RhdGEoZ2l0X2lkeG1hcCAqbWFwLCBzaXplX3QgaWR4KTsKIAotI2RlZmluZSBHSVRfX1VTRV9JRFhNQVAgXAotCV9fS0hBU0hfSU1QTChpZHgsIHN0YXRpYyBraF9pbmxpbmUsIGNvbnN0IGdpdF9pbmRleF9lbnRyeSAqLCBnaXRfaW5kZXhfZW50cnkgKiwgMSwgaWR4ZW50cnlfaGFzaCwgaWR4ZW50cnlfZXF1YWwpCit2b2lkIGdpdF9pZHhtYXBfcmVzaXplKGdpdF9pZHhtYXAgKm1hcCwgc2l6ZV90IHNpemUpOwordm9pZCBnaXRfaWR4bWFwX2ljYXNlX3Jlc2l6ZShnaXRfaWR4bWFwX2ljYXNlICptYXAsIHNpemVfdCBzaXplKTsKK3ZvaWQgZ2l0X2lkeG1hcF9mcmVlKGdpdF9pZHhtYXAgKm1hcCk7Cit2b2lkIGdpdF9pZHhtYXBfY2xlYXIoZ2l0X2lkeG1hcCAqbWFwKTsKIAotI2RlZmluZSBHSVRfX1VTRV9JRFhNQVBfSUNBU0UgXAotCV9fS0hBU0hfSU1QTChpZHhpY2FzZSwgc3RhdGljIGtoX2lubGluZSwgY29uc3QgZ2l0X2luZGV4X2VudHJ5ICosIGdpdF9pbmRleF9lbnRyeSAqLCAxLCBpZHhlbnRyeV9oYXNoLCBpZHhlbnRyeV9pY2FzZV9lcXVhbCkKK3ZvaWQgZ2l0X2lkeG1hcF9kZWxldGVfYXQoZ2l0X2lkeG1hcCAqbWFwLCBzaXplX3QgaWR4KTsKK3ZvaWQgZ2l0X2lkeG1hcF9pY2FzZV9kZWxldGVfYXQoZ2l0X2lkeG1hcF9pY2FzZSAqbWFwLCBzaXplX3QgaWR4KTsKIAotI2RlZmluZSBnaXRfaWR4bWFwX2FsbG9jKGhwKSBcCi0JKCgqKGhwKSA9IGtoX2luaXQoaWR4KSkgPT0gTlVMTCkgPyBnaXRlcnJfc2V0X29vbSgpLCAtMSA6IDAKLQotI2RlZmluZSBnaXRfaWR4bWFwX2ljYXNlX2FsbG9jKGhwKSBcCi0JKCgqKGhwKSA9IGtoX2luaXQoaWR4aWNhc2UpKSA9PSBOVUxMKSA/IGdpdGVycl9zZXRfb29tKCksIC0xIDogMAotCi0jZGVmaW5lIGdpdF9pZHhtYXBfaW5zZXJ0KGgsIGtleSwgdmFsLCBydmFsKSBkbyB7IFwKLQlraGl0ZXJfdCBfX3BvcyA9IGtoX3B1dChpZHgsIGgsIGtleSwgJnJ2YWwpOyBcCi0JaWYgKHJ2YWwgPj0gMCkgeyBcCi0JCWlmIChydmFsID09IDApIGtoX2tleShoLCBfX3BvcykgPSBrZXk7IFwKLQkJa2hfdmFsKGgsIF9fcG9zKSA9IHZhbDsgXAotCX0gfSB3aGlsZSAoMCkKLQotI2RlZmluZSBnaXRfaWR4bWFwX2ljYXNlX2luc2VydChoLCBrZXksIHZhbCwgcnZhbCkgZG8geyBcCi0Ja2hpdGVyX3QgX19wb3MgPSBraF9wdXQoaWR4aWNhc2UsIGgsIGtleSwgJnJ2YWwpOyBcCi0JaWYgKHJ2YWwgPj0gMCkgeyBcCi0JCWlmIChydmFsID09IDApIGtoX2tleShoLCBfX3BvcykgPSBrZXk7IFwKLQkJa2hfdmFsKGgsIF9fcG9zKSA9IHZhbDsgXAotCX0gfSB3aGlsZSAoMCkKLQotI2RlZmluZSBnaXRfaWR4bWFwX2xvb2t1cF9pbmRleChoLCBrKSAga2hfZ2V0KGlkeCwgaCwgaykKLSNkZWZpbmUgZ2l0X2lkeG1hcF9pY2FzZV9sb29rdXBfaW5kZXgoaCwgaykgIGtoX2dldChpZHhpY2FzZSwgaCwgaykKLSNkZWZpbmUgZ2l0X2lkeG1hcF92YWx1ZV9hdChoLCBpZHgpICAgICAgICBraF92YWwoaCwgaWR4KQotI2RlZmluZSBnaXRfaWR4bWFwX3ZhbGlkX2luZGV4KGgsIGlkeCkgKGlkeCAhPSBraF9lbmQoaCkpCi0jZGVmaW5lIGdpdF9pZHhtYXBfaGFzX2RhdGEoaCwgaWR4KSBraF9leGlzdChoLCBpZHgpCi0KLSNkZWZpbmUgZ2l0X2lkeG1hcF9yZXNpemUoaCxzKSAga2hfcmVzaXplKGlkeCwgaCwgcykKLSNkZWZpbmUgZ2l0X2lkeG1hcF9mcmVlKGgpICBraF9kZXN0cm95KGlkeCwgaCksIGggPSBOVUxMCi0jZGVmaW5lIGdpdF9pZHhtYXBfY2xlYXIoaCkga2hfY2xlYXIoaWR4LCBoKQotCi0jZGVmaW5lIGdpdF9pZHhtYXBfZGVsZXRlX2F0KGgsIGlkKSAgICAgICBraF9kZWwoaWR4LCBoLCBpZCkKLSNkZWZpbmUgZ2l0X2lkeG1hcF9pY2FzZV9kZWxldGVfYXQoaCwgaWQpICAgICAgIGtoX2RlbChpZHhpY2FzZSwgaCwgaWQpCi0KLSNkZWZpbmUgZ2l0X2lkeG1hcF9kZWxldGUoaCwga2V5KSBkbyB7IFwKLQlraGl0ZXJfdCBfX3BvcyA9IGdpdF9pZHhtYXBfbG9va3VwX2luZGV4KGgsIGtleSk7IFwKLQlpZiAoZ2l0X2lkeG1hcF92YWxpZF9pbmRleChoLCBfX3BvcykpIFwKLQkJZ2l0X2lkeG1hcF9kZWxldGVfYXQoaCwgX19wb3MpOyB9IHdoaWxlICgwKQotCi0jZGVmaW5lIGdpdF9pZHhtYXBfaWNhc2VfZGVsZXRlKGgsIGtleSkgZG8geyBcCi0Ja2hpdGVyX3QgX19wb3MgPSBnaXRfaWR4bWFwX2ljYXNlX2xvb2t1cF9pbmRleChoLCBrZXkpOyBcCi0JaWYgKGdpdF9pZHhtYXBfdmFsaWRfaW5kZXgoaCwgX19wb3MpKSBcCi0JCWdpdF9pZHhtYXBfaWNhc2VfZGVsZXRlX2F0KGgsIF9fcG9zKTsgfSB3aGlsZSAoMCkKK3ZvaWQgZ2l0X2lkeG1hcF9kZWxldGUoZ2l0X2lkeG1hcCAqbWFwLCBjb25zdCBnaXRfaW5kZXhfZW50cnkgKmtleSk7Cit2b2lkIGdpdF9pZHhtYXBfaWNhc2VfZGVsZXRlKGdpdF9pZHhtYXBfaWNhc2UgKm1hcCwgY29uc3QgZ2l0X2luZGV4X2VudHJ5ICprZXkpOwogCiAjZGVmaW5lIGdpdF9pZHhtYXBfYmVnaW4JCWtoX2JlZ2luCiAjZGVmaW5lIGdpdF9pZHhtYXBfZW5kCQlraF9lbmQKZGlmZiAtLWdpdCBhL3NyYy9pZ25vcmUuYyBiL3NyYy9pZ25vcmUuYwppbmRleCBjYzllMDhlLi5jMzI0ZDRkIDEwMDY0NAotLS0gYS9zcmMvaWdub3JlLmMKKysrIGIvc3JjL2lnbm9yZS5jCkBAIC0yNzcsNiArMjc3LDcgQEAKIHsKIAlpbnQgZXJyb3IgPSAwOwogCWNvbnN0IGNoYXIgKndvcmtkaXIgPSBnaXRfcmVwb3NpdG9yeV93b3JrZGlyKHJlcG8pOworCWdpdF9idWYgaW5mb3BhdGggPSBHSVRfQlVGX0lOSVQ7CiAKIAlhc3NlcnQocmVwbyAmJiBpZ25vcmVzICYmIHBhdGgpOwogCkBAIC0zMjIsMTAgKzMyMywxNCBAQAogCQkJZ290byBjbGVhbnVwOwogCX0KIAorCWlmICgoZXJyb3IgPSBnaXRfcmVwb3NpdG9yeV9pdGVtX3BhdGgoJmluZm9wYXRoLAorCQkJcmVwbywgR0lUX1JFUE9TSVRPUllfSVRFTV9JTkZPKSkgPCAwKQorCQlnb3RvIGNsZWFudXA7CisKIAkvKiBsb2FkIC5naXQvaW5mby9leGNsdWRlICovCiAJZXJyb3IgPSBwdXNoX2lnbm9yZV9maWxlKAogCQlpZ25vcmVzLCAmaWdub3Jlcy0+aWduX2dsb2JhbCwKLQkJZ2l0X3JlcG9zaXRvcnlfcGF0aChyZXBvKSwgR0lUX0lHTk9SRV9GSUxFX0lOUkVQTyk7CisJCWluZm9wYXRoLnB0ciwgR0lUX0lHTk9SRV9GSUxFX0lOUkVQTyk7CiAJaWYgKGVycm9yIDwgMCkKIAkJZ290byBjbGVhbnVwOwogCkBAIC0zMzYsNiArMzQxLDcgQEAKIAkJCWdpdF9yZXBvc2l0b3J5X2F0dHJfY2FjaGUocmVwbyktPmNmZ19leGNsX2ZpbGUpOwogCiBjbGVhbnVwOgorCWdpdF9idWZfZnJlZSgmaW5mb3BhdGgpOwogCWlmIChlcnJvciA8IDApCiAJCWdpdF9pZ25vcmVfX2ZyZWUoaWdub3Jlcyk7CiAKZGlmZiAtLWdpdCBhL3NyYy9pZ25vcmUuaCBiL3NyYy9pZ25vcmUuaAppbmRleCBkNDBiZDYwLi44NzZjOGUwIDEwMDY0NAotLS0gYS9zcmMvaWdub3JlLmgKKysrIGIvc3JjL2lnbm9yZS5oCkBAIC0xMiw3ICsxMiw3IEBACiAjaW5jbHVkZSAiYXR0cl9maWxlLmgiCiAKICNkZWZpbmUgR0lUX0lHTk9SRV9GSUxFCQkJIi5naXRpZ25vcmUiCi0jZGVmaW5lIEdJVF9JR05PUkVfRklMRV9JTlJFUE8JImluZm8vZXhjbHVkZSIKKyNkZWZpbmUgR0lUX0lHTk9SRV9GSUxFX0lOUkVQTwkiZXhjbHVkZSIKICNkZWZpbmUgR0lUX0lHTk9SRV9GSUxFX1hERwkJImlnbm9yZSIKIAogLyogVGhlIGdpdF9pZ25vcmVzIHN0cnVjdHVyZSBtYWludGFpbnMgdGhyZWUgc2V0cyBvZiBpZ25vcmVzOgpkaWZmIC0tZ2l0IGEvc3JjL2luZGV4LmMgYi9zcmMvaW5kZXguYwppbmRleCBmMjdmYTE2Li5jMjllOTBmIDEwMDY0NAotLS0gYS9zcmMvaW5kZXguYworKysgYi9zcmMvaW5kZXguYwpAQCAtMjcsOSArMjcsNiBAQAogI2luY2x1ZGUgImdpdDIvY29uZmlnLmgiCiAjaW5jbHVkZSAiZ2l0Mi9zeXMvaW5kZXguaCIKIAotR0lUX19VU0VfSURYTUFQCi1HSVRfX1VTRV9JRFhNQVBfSUNBU0UKLQogI2RlZmluZSBJTlNFUlRfSU5fTUFQX0VYKGlkeCwgbWFwLCBlLCBlcnIpIGRvIHsJCQkJXAogCQlpZiAoKGlkeCktPmlnbm9yZV9jYXNlKQkJCQkJXAogCQkJZ2l0X2lkeG1hcF9pY2FzZV9pbnNlcnQoKGtoYXNoX3QoaWR4aWNhc2UpICopIChtYXApLCAoZSksIChlKSwgKGVycikpOyBcCkBAIC01NywxMCArNTQsNiBAQAogCQkJCSAgdW5zaWduZWQgaW50IGZsYWdzLAogCQkJCSAgZ2l0X2luZGV4X21hdGNoZWRfcGF0aF9jYiBjYiwgdm9pZCAqcGF5bG9hZCk7CiAKLSNkZWZpbmUgZW50cnlfc2l6ZSh0eXBlLGxlbikgKChvZmZzZXRvZih0eXBlLCBwYXRoKSArIChsZW4pICsgOCkgJiB+NykKLSNkZWZpbmUgc2hvcnRfZW50cnlfc2l6ZShsZW4pIGVudHJ5X3NpemUoc3RydWN0IGVudHJ5X3Nob3J0LCBsZW4pCi0jZGVmaW5lIGxvbmdfZW50cnlfc2l6ZShsZW4pIGVudHJ5X3NpemUoc3RydWN0IGVudHJ5X2xvbmcsIGxlbikKLQogI2RlZmluZSBtaW5pbWFsX2VudHJ5X3NpemUgKG9mZnNldG9mKHN0cnVjdCBlbnRyeV9zaG9ydCwgcGF0aCkpCiAKIHN0YXRpYyBjb25zdCBzaXplX3QgSU5ERVhfRk9PVEVSX1NJWkUgPSBHSVRfT0lEX1JBV1NaOwpAQCAtMTM2NSw3ICsxMzU4LDcgQEAKIAkJZXJyb3IgPSBnaXRfdmVjdG9yX2luc2VydF9zb3J0ZWQoJmluZGV4LT5lbnRyaWVzLCBlbnRyeSwgaW5kZXhfbm9fZHVwcyk7CiAKIAkJaWYgKGVycm9yID09IDApIHsKLQkJCUlOU0VSVF9JTl9NQVAoaW5kZXgsIGVudHJ5LCBlcnJvcik7CisJCQlJTlNFUlRfSU5fTUFQKGluZGV4LCBlbnRyeSwgJmVycm9yKTsKIAkJfQogCX0KIApAQCAtMTU5Miw3ICsxNTg1LDcgQEAKIAkJaWYgKChyZXQgPSBnaXRfdmVjdG9yX2luc2VydCgmaW5kZXgtPmVudHJpZXMsIGVudHJ5KSkgPCAwKQogCQkJYnJlYWs7CiAKLQkJSU5TRVJUX0lOX01BUChpbmRleCwgZW50cnksIHJldCk7CisJCUlOU0VSVF9JTl9NQVAoaW5kZXgsIGVudHJ5LCAmcmV0KTsKIAkJaWYgKHJldCA8IDApCiAJCQlicmVhazsKIAl9CkBAIC0yMjg1LDEyICsyMjc4LDI5IEBACiAJcmV0dXJuIDA7CiB9CiAKK3N0YXRpYyBzaXplX3QgaW5kZXhfZW50cnlfc2l6ZShzaXplX3QgcGF0aF9sZW4sIHNpemVfdCB2YXJpbnRfbGVuLCB1aW50MzJfdCBmbGFncykKK3sKKwlpZiAodmFyaW50X2xlbikgeworCQlpZiAoZmxhZ3MgJiBHSVRfSURYRU5UUllfRVhURU5ERUQpCisJCQlyZXR1cm4gb2Zmc2V0b2Yoc3RydWN0IGVudHJ5X2xvbmcsIHBhdGgpICsgcGF0aF9sZW4gKyAxICsgdmFyaW50X2xlbjsKKwkJZWxzZQorCQkJcmV0dXJuIG9mZnNldG9mKHN0cnVjdCBlbnRyeV9zaG9ydCwgcGF0aCkgKyBwYXRoX2xlbiArIDEgKyB2YXJpbnRfbGVuOworCX0gZWxzZSB7CisjZGVmaW5lIGVudHJ5X3NpemUodHlwZSxsZW4pICgob2Zmc2V0b2YodHlwZSwgcGF0aCkgKyAobGVuKSArIDgpICYgfjcpCisJCWlmIChmbGFncyAmIEdJVF9JRFhFTlRSWV9FWFRFTkRFRCkKKwkJCXJldHVybiBlbnRyeV9zaXplKHN0cnVjdCBlbnRyeV9sb25nLCBwYXRoX2xlbik7CisJCWVsc2UKKwkJCXJldHVybiBlbnRyeV9zaXplKHN0cnVjdCBlbnRyeV9zaG9ydCwgcGF0aF9sZW4pOworI3VuZGVmIGVudHJ5X3NpemUKKwl9Cit9CisKIHN0YXRpYyBzaXplX3QgcmVhZF9lbnRyeSgKIAlnaXRfaW5kZXhfZW50cnkgKipvdXQsCiAJZ2l0X2luZGV4ICppbmRleCwKIAljb25zdCB2b2lkICpidWZmZXIsCiAJc2l6ZV90IGJ1ZmZlcl9zaXplLAotCWNvbnN0IGNoYXIgKipsYXN0KQorCWNvbnN0IGNoYXIgKmxhc3QpCiB7CiAJc2l6ZV90IHBhdGhfbGVuZ3RoLCBlbnRyeV9zaXplOwogCWNvbnN0IGNoYXIgKnBhdGhfcHRyOwpAQCAtMjM0NywzNSArMjM1NywzNCBAQAogCQkJcGF0aF9sZW5ndGggPSBwYXRoX2VuZCAtIHBhdGhfcHRyOwogCQl9CiAKLQkJaWYgKGVudHJ5LmZsYWdzICYgR0lUX0lEWEVOVFJZX0VYVEVOREVEKQotCQkJZW50cnlfc2l6ZSA9IGxvbmdfZW50cnlfc2l6ZShwYXRoX2xlbmd0aCk7Ci0JCWVsc2UKLQkJCWVudHJ5X3NpemUgPSBzaG9ydF9lbnRyeV9zaXplKHBhdGhfbGVuZ3RoKTsKLQotCQlpZiAoSU5ERVhfRk9PVEVSX1NJWkUgKyBlbnRyeV9zaXplID4gYnVmZmVyX3NpemUpCi0JCQlyZXR1cm4gMDsKLQorCQllbnRyeV9zaXplID0gaW5kZXhfZW50cnlfc2l6ZShwYXRoX2xlbmd0aCwgMCwgZW50cnkuZmxhZ3MpOwogCQllbnRyeS5wYXRoID0gKGNoYXIgKilwYXRoX3B0cjsKIAl9IGVsc2UgewogCQlzaXplX3QgdmFyaW50X2xlbjsKLQkJc2l6ZV90IHNoYXJlZCA9IGdpdF9kZWNvZGVfdmFyaW50KChjb25zdCB1bnNpZ25lZCBjaGFyICopcGF0aF9wdHIsIAotCQkJCQkJICAmdmFyaW50X2xlbik7Ci0JCXNpemVfdCBsZW4gPSBzdHJsZW4ocGF0aF9wdHIgKyB2YXJpbnRfbGVuKTsKLQkJc2l6ZV90IGxhc3RfbGVuID0gc3RybGVuKCpsYXN0KTsKLQkJc2l6ZV90IHRtcF9wYXRoX2xlbjsKKwkJc2l6ZV90IHN0cmlwX2xlbiA9IGdpdF9kZWNvZGVfdmFyaW50KChjb25zdCB1bnNpZ25lZCBjaGFyICopcGF0aF9wdHIsCisJCQkJCQkgICAgICZ2YXJpbnRfbGVuKTsKKwkJc2l6ZV90IGxhc3RfbGVuID0gc3RybGVuKGxhc3QpOworCQlzaXplX3QgcHJlZml4X2xlbiA9IGxhc3RfbGVuIC0gc3RyaXBfbGVuOworCQlzaXplX3Qgc3VmZml4X2xlbiA9IHN0cmxlbihwYXRoX3B0ciArIHZhcmludF9sZW4pOworCQlzaXplX3QgcGF0aF9sZW47CiAKIAkJaWYgKHZhcmludF9sZW4gPT0gMCkKIAkJCXJldHVybiBpbmRleF9lcnJvcl9pbnZhbGlkKCJpbmNvcnJlY3QgcHJlZml4IGxlbmd0aCIpOwogCi0JCUdJVEVSUl9DSEVDS19BTExPQ19BREQoJnRtcF9wYXRoX2xlbiwgc2hhcmVkLCBsZW4gKyAxKTsKLQkJdG1wX3BhdGggPSBnaXRfX21hbGxvYyh0bXBfcGF0aF9sZW4pOworCQlHSVRFUlJfQ0hFQ0tfQUxMT0NfQUREKCZwYXRoX2xlbiwgcHJlZml4X2xlbiwgc3VmZml4X2xlbik7CisJCUdJVEVSUl9DSEVDS19BTExPQ19BREQoJnBhdGhfbGVuLCBwYXRoX2xlbiwgMSk7CisJCXRtcF9wYXRoID0gZ2l0X19tYWxsb2MocGF0aF9sZW4pOwogCQlHSVRFUlJfQ0hFQ0tfQUxMT0ModG1wX3BhdGgpOwotCQltZW1jcHkodG1wX3BhdGgsIGxhc3QsIGxhc3RfbGVuKTsKLQkJbWVtY3B5KHRtcF9wYXRoICsgbGFzdF9sZW4sIHBhdGhfcHRyICsgdmFyaW50X2xlbiwgbGVuKTsKLQkJZW50cnlfc2l6ZSA9IGxvbmdfZW50cnlfc2l6ZShzaGFyZWQgKyBsZW4pOworCisJCW1lbWNweSh0bXBfcGF0aCwgbGFzdCwgcHJlZml4X2xlbik7CisJCW1lbWNweSh0bXBfcGF0aCArIHByZWZpeF9sZW4sIHBhdGhfcHRyICsgdmFyaW50X2xlbiwgc3VmZml4X2xlbiArIDEpOworCQllbnRyeV9zaXplID0gaW5kZXhfZW50cnlfc2l6ZShzdWZmaXhfbGVuLCB2YXJpbnRfbGVuLCBlbnRyeS5mbGFncyk7CiAJCWVudHJ5LnBhdGggPSB0bXBfcGF0aDsKIAl9CiAKKwlpZiAoSU5ERVhfRk9PVEVSX1NJWkUgKyBlbnRyeV9zaXplID4gYnVmZmVyX3NpemUpCisJCXJldHVybiAwOworCiAJaWYgKGluZGV4X2VudHJ5X2R1cChvdXQsIGluZGV4LCAmZW50cnkpIDwgMCkgewogCQlnaXRfX2ZyZWUodG1wX3BhdGgpOwogCQlyZXR1cm4gMDsKQEAgLTI0NDgsNyArMjQ1Nyw3IEBACiAJdW5zaWduZWQgaW50IGk7CiAJc3RydWN0IGluZGV4X2hlYWRlciBoZWFkZXIgPSB7IDAgfTsKIAlnaXRfb2lkIGNoZWNrc3VtX2NhbGN1bGF0ZWQsIGNoZWNrc3VtX2V4cGVjdGVkOwotCWNvbnN0IGNoYXIgKipsYXN0ID0gTlVMTDsKKwljb25zdCBjaGFyICpsYXN0ID0gTlVMTDsKIAljb25zdCBjaGFyICplbXB0eSA9ICIiOwogCiAjZGVmaW5lIHNlZWtfZm9yd2FyZChfaW5jcmVhc2UpIHsgXApAQCAtMjQ3MiwxNiArMjQ4MSwxNiBAQAogCiAJaW5kZXgtPnZlcnNpb24gPSBoZWFkZXIudmVyc2lvbjsKIAlpZiAoaW5kZXgtPnZlcnNpb24gPj0gSU5ERVhfVkVSU0lPTl9OVU1CRVJfQ09NUCkKLQkJbGFzdCA9ICZlbXB0eTsKKwkJbGFzdCA9IGVtcHR5OwogCiAJc2Vla19mb3J3YXJkKElOREVYX0hFQURFUl9TSVpFKTsKIAogCWFzc2VydCghaW5kZXgtPmVudHJpZXMubGVuZ3RoKTsKIAogCWlmIChpbmRleC0+aWdub3JlX2Nhc2UpCi0JCWtoX3Jlc2l6ZShpZHhpY2FzZSwgKGtoYXNoX3QoaWR4aWNhc2UpICopIGluZGV4LT5lbnRyaWVzX21hcCwgaGVhZGVyLmVudHJ5X2NvdW50KTsKKwkJZ2l0X2lkeG1hcF9pY2FzZV9yZXNpemUoKGtoYXNoX3QoaWR4aWNhc2UpICopIGluZGV4LT5lbnRyaWVzX21hcCwgaGVhZGVyLmVudHJ5X2NvdW50KTsKIAllbHNlCi0JCWtoX3Jlc2l6ZShpZHgsIGluZGV4LT5lbnRyaWVzX21hcCwgaGVhZGVyLmVudHJ5X2NvdW50KTsKKwkJZ2l0X2lkeG1hcF9yZXNpemUoaW5kZXgtPmVudHJpZXNfbWFwLCBoZWFkZXIuZW50cnlfY291bnQpOwogCiAJLyogUGFyc2UgYWxsIHRoZSBlbnRyaWVzICovCiAJZm9yIChpID0gMDsgaSA8IGhlYWRlci5lbnRyeV9jb3VudCAmJiBidWZmZXJfc2l6ZSA+IElOREVYX0ZPT1RFUl9TSVpFOyArK2kpIHsKQEAgLTI0OTksNyArMjUwOCw3IEBACiAJCQlnb3RvIGRvbmU7CiAJCX0KIAotCQlJTlNFUlRfSU5fTUFQKGluZGV4LCBlbnRyeSwgZXJyb3IpOworCQlJTlNFUlRfSU5fTUFQKGluZGV4LCBlbnRyeSwgJmVycm9yKTsKIAogCQlpZiAoZXJyb3IgPCAwKSB7CiAJCQlpbmRleF9lbnRyeV9mcmVlKGVudHJ5KTsKQEAgLTI1MDcsNiArMjUxNiw5IEBACiAJCX0KIAkJZXJyb3IgPSAwOwogCisJCWlmIChpbmRleC0+dmVyc2lvbiA+PSBJTkRFWF9WRVJTSU9OX05VTUJFUl9DT01QKQorCQkJbGFzdCA9IGVudHJ5LT5wYXRoOworCiAJCXNlZWtfZm9yd2FyZChlbnRyeV9zaXplKTsKIAl9CiAKQEAgLTI1NzcsMTEgKzI1ODksMTIgQEAKIAlyZXR1cm4gKGV4dGVuZGVkID4gMCk7CiB9CiAKLXN0YXRpYyBpbnQgd3JpdGVfZGlza19lbnRyeShnaXRfZmlsZWJ1ZiAqZmlsZSwgZ2l0X2luZGV4X2VudHJ5ICplbnRyeSwgY29uc3QgY2hhciAqKmxhc3QpCitzdGF0aWMgaW50IHdyaXRlX2Rpc2tfZW50cnkoZ2l0X2ZpbGVidWYgKmZpbGUsIGdpdF9pbmRleF9lbnRyeSAqZW50cnksIGNvbnN0IGNoYXIgKmxhc3QpCiB7CiAJdm9pZCAqbWVtID0gTlVMTDsKIAlzdHJ1Y3QgZW50cnlfc2hvcnQgKm9uZGlzazsKIAlzaXplX3QgcGF0aF9sZW4sIGRpc2tfc2l6ZTsKKwlpbnQgdmFyaW50X2xlbiA9IDA7CiAJY2hhciAqcGF0aDsKIAljb25zdCBjaGFyICpwYXRoX3N0YXJ0ID0gZW50cnktPnBhdGg7CiAJc2l6ZV90IHNhbWVfbGVuID0gMDsKQEAgLTI1ODksNyArMjYwMiw3IEBACiAJcGF0aF9sZW4gPSAoKHN0cnVjdCBlbnRyeV9pbnRlcm5hbCAqKWVudHJ5KS0+cGF0aGxlbjsKIAogCWlmIChsYXN0KSB7Ci0JCWNvbnN0IGNoYXIgKmxhc3RfYyA9ICpsYXN0OworCQljb25zdCBjaGFyICpsYXN0X2MgPSBsYXN0OwogCiAJCXdoaWxlICgqcGF0aF9zdGFydCA9PSAqbGFzdF9jKSB7CiAJCQlpZiAoISpwYXRoX3N0YXJ0IHx8ICEqbGFzdF9jKQpAQCAtMjU5OSwxMyArMjYxMiwxMCBAQAogCQkJKytzYW1lX2xlbjsKIAkJfQogCQlwYXRoX2xlbiAtPSBzYW1lX2xlbjsKLQkJKmxhc3QgPSBlbnRyeS0+cGF0aDsKKwkJdmFyaW50X2xlbiA9IGdpdF9lbmNvZGVfdmFyaW50KE5VTEwsIDAsIHNhbWVfbGVuKTsKIAl9CiAKLQlpZiAoZW50cnktPmZsYWdzICYgR0lUX0lEWEVOVFJZX0VYVEVOREVEKQotCQlkaXNrX3NpemUgPSBsb25nX2VudHJ5X3NpemUocGF0aF9sZW4pOwotCWVsc2UKLQkJZGlza19zaXplID0gc2hvcnRfZW50cnlfc2l6ZShwYXRoX2xlbik7CisJZGlza19zaXplID0gaW5kZXhfZW50cnlfc2l6ZShwYXRoX2xlbiwgdmFyaW50X2xlbiwgZW50cnktPmZsYWdzKTsKIAogCWlmIChnaXRfZmlsZWJ1Zl9yZXNlcnZlKGZpbGUsICZtZW0sIGRpc2tfc2l6ZSkgPCAwKQogCQlyZXR1cm4gLTE7CkBAIC0yNjQ1LDE2ICsyNjU1LDM0IEBACiAJCW9uZGlza19leHQtPmZsYWdzX2V4dGVuZGVkID0gaHRvbnMoZW50cnktPmZsYWdzX2V4dGVuZGVkICYKIAkJCUdJVF9JRFhFTlRSWV9FWFRFTkRFRF9GTEFHUyk7CiAJCXBhdGggPSBvbmRpc2tfZXh0LT5wYXRoOwotCX0KLQllbHNlCisJCWRpc2tfc2l6ZSAtPSBvZmZzZXRvZihzdHJ1Y3QgZW50cnlfbG9uZywgcGF0aCk7CisJfSBlbHNlIHsKIAkJcGF0aCA9IG9uZGlzay0+cGF0aDsKKwkJZGlza19zaXplIC09IG9mZnNldG9mKHN0cnVjdCBlbnRyeV9zaG9ydCwgcGF0aCk7CisJfQogCiAJaWYgKGxhc3QpIHsKLQkJcGF0aCArPSBnaXRfZW5jb2RlX3ZhcmludCgodW5zaWduZWQgY2hhciAqKSBwYXRoLAotCQkJCQkgIGRpc2tfc2l6ZSwKLQkJCQkJICBwYXRoX2xlbiAtIHNhbWVfbGVuKTsKKwkJdmFyaW50X2xlbiA9IGdpdF9lbmNvZGVfdmFyaW50KCh1bnNpZ25lZCBjaGFyICopIHBhdGgsCisJCQkJCSAgZGlza19zaXplLCBzYW1lX2xlbik7CisJCWFzc2VydCh2YXJpbnRfbGVuID4gMCk7CisJCXBhdGggKz0gdmFyaW50X2xlbjsKKwkJZGlza19zaXplIC09IHZhcmludF9sZW47CisKKwkJLyoKKwkJICogSWYgdXNpbmcgcGF0aCBjb21wcmVzc2lvbiwgd2UgYXJlIG5vdCBhbGxvd2VkCisJCSAqIHRvIGhhdmUgYWRkaXRpb25hbCB0cmFpbGluZyBOVUxzLgorCQkgKi8KKwkJYXNzZXJ0KGRpc2tfc2l6ZSA9PSBwYXRoX2xlbiArIDEpOworCX0gZWxzZSB7CisJCS8qCisJCSAqIElmIG5vIHBhdGggY29tcHJlc3Npb24gaXMgdXNlZCwgd2UgZG8gaGF2ZQorCQkgKiBOVUxzIGFzIHBhZGRpbmcuIEFzIHN1Y2gsIHNpbXBseSBhc3NlcnQgdGhhdAorCQkgKiB3ZSBoYXZlIGVub3VnaCBzcGFjZSBsZWZ0IHRvIHdyaXRlIHRoZSBwYXRoLgorCQkgKi8KKwkJYXNzZXJ0KGRpc2tfc2l6ZSA+IHBhdGhfbGVuKTsKIAl9Ci0JbWVtY3B5KHBhdGgsIHBhdGhfc3RhcnQsIHBhdGhfbGVuKTsKKworCW1lbWNweShwYXRoLCBwYXRoX3N0YXJ0LCBwYXRoX2xlbiArIDEpOwogCiAJcmV0dXJuIDA7CiB9CkBAIC0yNjY1LDggKzI2OTMsNyBAQAogCXNpemVfdCBpOwogCWdpdF92ZWN0b3IgY2FzZV9zb3J0ZWQsICplbnRyaWVzOwogCWdpdF9pbmRleF9lbnRyeSAqZW50cnk7Ci0JY29uc3QgY2hhciAqKmxhc3QgPSBOVUxMOwotCWNvbnN0IGNoYXIgKmVtcHR5ID0gIiI7CisJY29uc3QgY2hhciAqbGFzdCA9IE5VTEw7CiAKIAkvKiBJZiBpbmRleC0+ZW50cmllcyBpcyBzb3J0ZWQgY2FzZS1pbnNlbnNpdGl2ZWx5LCB0aGVuIHdlIG5lZWQKIAkgKiB0byByZS1zb3J0IGl0IGNhc2Utc2Vuc2l0aXZlbHkgYmVmb3JlIHdyaXRpbmcgKi8KQEAgLTI2NzksMTEgKzI3MDYsMTQgQEAKIAl9CiAKIAlpZiAoaW5kZXgtPnZlcnNpb24gPj0gSU5ERVhfVkVSU0lPTl9OVU1CRVJfQ09NUCkKLQkJbGFzdCA9ICZlbXB0eTsKKwkJbGFzdCA9ICIiOwogCi0JZ2l0X3ZlY3Rvcl9mb3JlYWNoKGVudHJpZXMsIGksIGVudHJ5KQorCWdpdF92ZWN0b3JfZm9yZWFjaChlbnRyaWVzLCBpLCBlbnRyeSkgewogCQlpZiAoKGVycm9yID0gd3JpdGVfZGlza19lbnRyeShmaWxlLCBlbnRyeSwgbGFzdCkpIDwgMCkKIAkJCWJyZWFrOworCQlpZiAoaW5kZXgtPnZlcnNpb24gPj0gSU5ERVhfVkVSU0lPTl9OVU1CRVJfQ09NUCkKKwkJCWxhc3QgPSBlbnRyeS0+cGF0aDsKKwl9CiAKIAlpZiAoaW5kZXgtPmlnbm9yZV9jYXNlKQogCQlnaXRfdmVjdG9yX2ZyZWUoJmNhc2Vfc29ydGVkKTsKQEAgLTI5NzksMTIgKzMwMDksMTIgQEAKIAkJZ290byBjbGVhbnVwOwogCiAJaWYgKGluZGV4LT5pZ25vcmVfY2FzZSkKLQkJa2hfcmVzaXplKGlkeGljYXNlLCAoa2hhc2hfdChpZHhpY2FzZSkgKikgZW50cmllc19tYXAsIGVudHJpZXMubGVuZ3RoKTsKKwkJZ2l0X2lkeG1hcF9pY2FzZV9yZXNpemUoKGtoYXNoX3QoaWR4aWNhc2UpICopIGVudHJpZXNfbWFwLCBlbnRyaWVzLmxlbmd0aCk7CiAJZWxzZQotCQlraF9yZXNpemUoaWR4LCBlbnRyaWVzX21hcCwgZW50cmllcy5sZW5ndGgpOworCQlnaXRfaWR4bWFwX3Jlc2l6ZShlbnRyaWVzX21hcCwgZW50cmllcy5sZW5ndGgpOwogCiAJZ2l0X3ZlY3Rvcl9mb3JlYWNoKCZlbnRyaWVzLCBpLCBlKSB7Ci0JCUlOU0VSVF9JTl9NQVBfRVgoaW5kZXgsIGVudHJpZXNfbWFwLCBlLCBlcnJvcik7CisJCUlOU0VSVF9JTl9NQVBfRVgoaW5kZXgsIGVudHJpZXNfbWFwLCBlLCAmZXJyb3IpOwogCiAJCWlmIChlcnJvciA8IDApIHsKIAkJCWdpdGVycl9zZXQoR0lURVJSX0lOREVYLCAiZmFpbGVkIHRvIGluc2VydCBlbnRyeSBpbnRvIG1hcCIpOwpAQCAtMzAzNyw5ICszMDY3LDkgQEAKIAkJZ290byBkb25lOwogCiAJaWYgKGluZGV4LT5pZ25vcmVfY2FzZSAmJiBuZXdfbGVuZ3RoX2hpbnQpCi0JCWtoX3Jlc2l6ZShpZHhpY2FzZSwgKGtoYXNoX3QoaWR4aWNhc2UpICopIG5ld19lbnRyaWVzX21hcCwgbmV3X2xlbmd0aF9oaW50KTsKKwkJZ2l0X2lkeG1hcF9pY2FzZV9yZXNpemUoKGtoYXNoX3QoaWR4aWNhc2UpICopIG5ld19lbnRyaWVzX21hcCwgbmV3X2xlbmd0aF9oaW50KTsKIAllbHNlIGlmIChuZXdfbGVuZ3RoX2hpbnQpCi0JCWtoX3Jlc2l6ZShpZHgsIG5ld19lbnRyaWVzX21hcCwgbmV3X2xlbmd0aF9oaW50KTsKKwkJZ2l0X2lkeG1hcF9yZXNpemUobmV3X2VudHJpZXNfbWFwLCBuZXdfbGVuZ3RoX2hpbnQpOwogCiAJb3B0cy5mbGFncyA9IEdJVF9JVEVSQVRPUl9ET05UX0lHTk9SRV9DQVNFIHwKIAkJR0lUX0lURVJBVE9SX0lOQ0xVREVfQ09ORkxJQ1RTOwpAQCAtMzEwMyw3ICszMTMzLDcgQEAKIAogCQlpZiAoYWRkX2VudHJ5KSB7CiAJCQlpZiAoKGVycm9yID0gZ2l0X3ZlY3Rvcl9pbnNlcnQoJm5ld19lbnRyaWVzLCBhZGRfZW50cnkpKSA9PSAwKQotCQkJCUlOU0VSVF9JTl9NQVBfRVgoaW5kZXgsIG5ld19lbnRyaWVzX21hcCwgYWRkX2VudHJ5LCBlcnJvcik7CisJCQkJSU5TRVJUX0lOX01BUF9FWChpbmRleCwgbmV3X2VudHJpZXNfbWFwLCBhZGRfZW50cnksICZlcnJvcik7CiAJCX0KIAogCQlpZiAocmVtb3ZlX2VudHJ5ICYmIGVycm9yID49IDApCmRpZmYgLS1naXQgYS9zcmMvaW5kZXhlci5jIGIvc3JjL2luZGV4ZXIuYwppbmRleCAwYWQ3ODY5Li4xNWY2Y2MyIDEwMDY0NAotLS0gYS9zcmMvaW5kZXhlci5jCisrKyBiL3NyYy9pbmRleGVyLmMKQEAgLTE3LDggKzE3LDcgQEAKICNpbmNsdWRlICJvaWQuaCIKICNpbmNsdWRlICJvaWRtYXAuaCIKICNpbmNsdWRlICJ6c3RyZWFtLmgiCi0KLUdJVF9fVVNFX09JRE1BUAorI2luY2x1ZGUgIm9iamVjdC5oIgogCiBleHRlcm4gZ2l0X211dGV4IGdpdF9fbXdpbmRvd19tdXRleDsKIApAQCAtMzUsNyArMzQsOCBAQAogCXVuc2lnbmVkIGludCBwYXJzZWRfaGVhZGVyIDoxLAogCQlwYWNrX2NvbW1pdHRlZCA6MSwKIAkJaGF2ZV9zdHJlYW0gOjEsCi0JCWhhdmVfZGVsdGEgOjE7CisJCWhhdmVfZGVsdGEgOjEsCisJCWRvX2ZzeW5jIDoxOwogCXN0cnVjdCBnaXRfcGFja19oZWFkZXIgaGRyOwogCXN0cnVjdCBnaXRfcGFja19maWxlICpwYWNrOwogCXVuc2lnbmVkIGludCBtb2RlOwpAQCAtMTI1LDYgKzEyNSw5IEBACiAJZ2l0X2hhc2hfY3R4X2luaXQoJmlkeC0+aGFzaF9jdHgpOwogCWdpdF9oYXNoX2N0eF9pbml0KCZpZHgtPnRyYWlsZXIpOwogCisJaWYgKGdpdF9yZXBvc2l0b3J5X19mc3luY19naXRkaXIpCisJCWlkeC0+ZG9fZnN5bmMgPSAxOworCiAJZXJyb3IgPSBnaXRfYnVmX2pvaW5wYXRoKCZwYXRoLCBwcmVmaXgsIHN1ZmYpOwogCWlmIChlcnJvciA8IDApCiAJCWdvdG8gY2xlYW51cDsKQEAgLTE2Myw2ICsxNjYsMTEgQEAKIAlyZXR1cm4gLTE7CiB9CiAKK3ZvaWQgZ2l0X2luZGV4ZXJfX3NldF9mc3luYyhnaXRfaW5kZXhlciAqaWR4LCBpbnQgZG9fZnN5bmMpCit7CisJaWR4LT5kb19mc3luYyA9ICEhZG9fZnN5bmM7Cit9CisKIC8qIFRyeSB0byBzdG9yZSB0aGUgZGVsdGEgc28gd2UgY2FuIHRyeSB0byByZXNvbHZlIGl0IGxhdGVyICovCiBzdGF0aWMgaW50IHN0b3JlX2RlbHRhKGdpdF9pbmRleGVyICppZHgpCiB7CkBAIC0yOTQsNyArMzAyLDcgQEAKIAlnaXRfb2lkX2NweSgmcGVudHJ5LT5zaGExLCAmb2lkKTsKIAlwZW50cnktPm9mZnNldCA9IGVudHJ5X3N0YXJ0OwogCi0JayA9IGtoX3B1dChvaWQsIGlkeC0+cGFjay0+aWR4X2NhY2hlLCAmcGVudHJ5LT5zaGExLCAmZXJyb3IpOworCWsgPSBnaXRfb2lkbWFwX3B1dChpZHgtPnBhY2stPmlkeF9jYWNoZSwgJnBlbnRyeS0+c2hhMSwgJmVycm9yKTsKIAlpZiAoZXJyb3IgPT0gLTEpIHsKIAkJZ2l0X19mcmVlKHBlbnRyeSk7CiAJCWdpdGVycl9zZXRfb29tKCk7CkBAIC0zMDgsNyArMzE2LDcgQEAKIAl9CiAKIAotCWtoX3ZhbHVlKGlkeC0+cGFjay0+aWR4X2NhY2hlLCBrKSA9IHBlbnRyeTsKKwlnaXRfb2lkbWFwX3NldF92YWx1ZV9hdChpZHgtPnBhY2stPmlkeF9jYWNoZSwgaywgcGVudHJ5KTsKIAogCWdpdF9vaWRfY3B5KCZlbnRyeS0+b2lkLCAmb2lkKTsKIApAQCAtMzMzLDkgKzM0MSw3IEBACiAKIEdJVF9JTkxJTkUoYm9vbCkgaGFzX2VudHJ5KGdpdF9pbmRleGVyICppZHgsIGdpdF9vaWQgKmlkKQogewotCWtoaXRlcl90IGs7Ci0JayA9IGtoX2dldChvaWQsIGlkeC0+cGFjay0+aWR4X2NhY2hlLCBpZCk7Ci0JcmV0dXJuIChrICE9IGtoX2VuZChpZHgtPnBhY2stPmlkeF9jYWNoZSkpOworCXJldHVybiBnaXRfb2lkbWFwX2V4aXN0cyhpZHgtPnBhY2stPmlkeF9jYWNoZSwgaWQpOwogfQogCiBzdGF0aWMgaW50IHNhdmVfZW50cnkoZ2l0X2luZGV4ZXIgKmlkeCwgc3RydWN0IGVudHJ5ICplbnRyeSwgc3RydWN0IGdpdF9wYWNrX2VudHJ5ICpwZW50cnksIGdpdF9vZmZfdCBlbnRyeV9zdGFydCkKQEAgLTM1MSwxNCArMzU3LDE0IEBACiAJfQogCiAJcGVudHJ5LT5vZmZzZXQgPSBlbnRyeV9zdGFydDsKLQlrID0ga2hfcHV0KG9pZCwgaWR4LT5wYWNrLT5pZHhfY2FjaGUsICZwZW50cnktPnNoYTEsICZlcnJvcik7CisJayA9IGdpdF9vaWRtYXBfcHV0KGlkeC0+cGFjay0+aWR4X2NhY2hlLCAmcGVudHJ5LT5zaGExLCAmZXJyb3IpOwogCiAJaWYgKGVycm9yIDw9IDApIHsKIAkJZ2l0ZXJyX3NldChHSVRFUlJfSU5ERVhFUiwgImNhbm5vdCBpbnNlcnQgb2JqZWN0IGludG8gcGFjayIpOwogCQlyZXR1cm4gLTE7CiAJfQogCi0Ja2hfdmFsdWUoaWR4LT5wYWNrLT5pZHhfY2FjaGUsIGspID0gcGVudHJ5OworCWdpdF9vaWRtYXBfc2V0X3ZhbHVlX2F0KGlkeC0+cGFjay0+aWR4X2NhY2hlLCBrLCBwZW50cnkpOwogCiAJLyogQWRkIHRoZSBvYmplY3QgdG8gdGhlIGxpc3QgKi8KIAlpZiAoZ2l0X3ZlY3Rvcl9pbnNlcnQoJmlkeC0+b2JqZWN0cywgZW50cnkpIDwgMCkKQEAgLTk5Myw3ICs5OTksOSBAQAogCQlyZXR1cm4gLTE7CiAKIAlpZiAoZ2l0X2ZpbGVidWZfb3BlbigmaW5kZXhfZmlsZSwgZmlsZW5hbWUucHRyLAotCQlHSVRfRklMRUJVRl9IQVNIX0NPTlRFTlRTLCBpZHgtPm1vZGUpIDwgMCkKKwkJR0lUX0ZJTEVCVUZfSEFTSF9DT05URU5UUyB8CisJCShpZHgtPmRvX2ZzeW5jID8gR0lUX0ZJTEVCVUZfRlNZTkMgOiAwKSwKKwkJaWR4LT5tb2RlKSA8IDApCiAJCWdvdG8gb25fZXJyb3I7CiAKIAkvKiBXcml0ZSBvdXQgdGhlIGhlYWRlciAqLwpAQCAtMTA2OCw2ICsxMDc2LDExIEBACiAJCXJldHVybiAtMTsKIAl9CiAKKwlpZiAoaWR4LT5kb19mc3luYyAmJiBwX2ZzeW5jKGlkeC0+cGFjay0+bXdmLmZkKSA8IDApIHsKKwkJZ2l0ZXJyX3NldChHSVRFUlJfT1MsICJmYWlsZWQgdG8gZnN5bmMgcGFja2ZpbGUiKTsKKwkJZ290byBvbl9lcnJvcjsKKwl9CisKIAkvKiBXZSBuZWVkIHRvIGNsb3NlIHRoZSBkZXNjcmlwdG9yIGhlcmUgc28gV2luZG93cyBkb2Vzbid0IGNob2tlIG9uIGNvbW1pdF9hdCAqLwogCWlmIChwX2Nsb3NlKGlkeC0+cGFjay0+bXdmLmZkKSA8IDApIHsKIAkJZ2l0ZXJyX3NldChHSVRFUlJfT1MsICJmYWlsZWQgdG8gY2xvc2UgcGFja2ZpbGUiKTsKQEAgLTEwODAsNyArMTA5MywxNCBAQAogCQlnb3RvIG9uX2Vycm9yOwogCiAJLyogQW5kIGRvbid0IGZvcmdldCB0byByZW5hbWUgdGhlIHBhY2tmaWxlIHRvIGl0cyBuZXcgcGxhY2UuICovCi0JcF9yZW5hbWUoaWR4LT5wYWNrLT5wYWNrX25hbWUsIGdpdF9idWZfY3N0cigmZmlsZW5hbWUpKTsKKwlpZiAocF9yZW5hbWUoaWR4LT5wYWNrLT5wYWNrX25hbWUsIGdpdF9idWZfY3N0cigmZmlsZW5hbWUpKSA8IDApCisJCWdvdG8gb25fZXJyb3I7CisKKwkvKiBBbmQgZnN5bmMgdGhlIHBhcmVudCBkaXJlY3RvcnkgaWYgd2UncmUgYXNrZWQgdG8uICovCisJaWYgKGlkeC0+ZG9fZnN5bmMgJiYKKwkJZ2l0X2Z1dGlsc19mc3luY19wYXJlbnQoZ2l0X2J1Zl9jc3RyKCZmaWxlbmFtZSkpIDwgMCkKKwkJZ290byBvbl9lcnJvcjsKKwogCWlkeC0+cGFja19jb21taXR0ZWQgPSAxOwogCiAJZ2l0X2J1Zl9mcmVlKCZmaWxlbmFtZSk7CkBAIC0xMTAyLDggKzExMjIsOSBAQAogCiAJaWYgKGlkeC0+cGFjay0+aWR4X2NhY2hlKSB7CiAJCXN0cnVjdCBnaXRfcGFja19lbnRyeSAqcGVudHJ5OwotCQlraF9mb3JlYWNoX3ZhbHVlKAotCQkJaWR4LT5wYWNrLT5pZHhfY2FjaGUsIHBlbnRyeSwgeyBnaXRfX2ZyZWUocGVudHJ5KTsgfSk7CisJCWdpdF9vaWRtYXBfZm9yZWFjaF92YWx1ZShpZHgtPnBhY2stPmlkeF9jYWNoZSwgcGVudHJ5LCB7CisJCQlnaXRfX2ZyZWUocGVudHJ5KTsKKwkJfSk7CiAKIAkJZ2l0X29pZG1hcF9mcmVlKGlkeC0+cGFjay0+aWR4X2NhY2hlKTsKIAl9CmRpZmYgLS1naXQgYS9zcmMvaW5kZXhlci5oIGIvc3JjL2luZGV4ZXIuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43MDI2OTRiCi0tLSAvZGV2L251bGwKKysrIGIvc3JjL2luZGV4ZXIuaApAQCAtMCwwICsxLDEyIEBACisvKgorICogQ29weXJpZ2h0IChDKSB0aGUgbGliZ2l0MiBjb250cmlidXRvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogVGhpcyBmaWxlIGlzIHBhcnQgb2YgbGliZ2l0MiwgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIEdOVSBHUEwgdjIgd2l0aAorICogYSBMaW5raW5nIEV4Y2VwdGlvbi4gRm9yIGZ1bGwgdGVybXMgc2VlIHRoZSBpbmNsdWRlZCBDT1BZSU5HIGZpbGUuCisgKi8KKyNpZm5kZWYgSU5DTFVERV9pbmRleGVyX2hfXworI2RlZmluZSBJTkNMVURFX2luZGV4ZXJfaF9fCisKK2V4dGVybiBpbnQgZ2l0X2luZGV4ZXJfX3NldF9mc3luYyhnaXRfaW5kZXhlciAqaWR4LCBpbnQgZG9fZnN5bmMpOworCisjZW5kaWYKZGlmZiAtLWdpdCBhL3NyYy9pbnRlZ2VyLmggYi9zcmMvaW50ZWdlci5oCmluZGV4IGIwODA5NGMuLjYxNzEyY2UgMTAwNjQ0Ci0tLSBhL3NyYy9pbnRlZ2VyLmgKKysrIGIvc3JjL2ludGVnZXIuaApAQCAtNTUsMTYgKzU1LDE2IEBACiB9CiAKIC8qIFVzZSBjbGFuZy9nY2MgY29tcGlsZXIgaW50cmluc2ljcyB3aGVuZXZlciBwb3NzaWJsZSAqLwotI2lmIChTSVpFX01BWCA9PSBVSU5UX01BWCkgJiYgX19oYXNfYnVpbHRpbihfX2J1aWx0aW5fdWFkZF9vdmVyZmxvdykKLSMgZGVmaW5lIGdpdF9fYWRkX3NpemV0X292ZXJmbG93KG91dCwgb25lLCB0d28pIFwKLQlfX2J1aWx0aW5fdWFkZF9vdmVyZmxvdyhvbmUsIHR3bywgb3V0KQotIyBkZWZpbmUgZ2l0X19tdWx0aXBseV9zaXpldF9vdmVyZmxvdyhvdXQsIG9uZSwgdHdvKSBcCi0JX19idWlsdGluX3VtdWxfb3ZlcmZsb3cob25lLCB0d28sIG91dCkKLSNlbGlmIChTSVpFX01BWCA9PSBVTE9OR19NQVgpICYmIF9faGFzX2J1aWx0aW4oX19idWlsdGluX3VhZGRsX292ZXJmbG93KQorI2lmIChTSVpFX01BWCA9PSBVTE9OR19NQVgpICYmIF9faGFzX2J1aWx0aW4oX19idWlsdGluX3VhZGRsX292ZXJmbG93KQogIyBkZWZpbmUgZ2l0X19hZGRfc2l6ZXRfb3ZlcmZsb3cob3V0LCBvbmUsIHR3bykgXAogCV9fYnVpbHRpbl91YWRkbF9vdmVyZmxvdyhvbmUsIHR3bywgb3V0KQogIyBkZWZpbmUgZ2l0X19tdWx0aXBseV9zaXpldF9vdmVyZmxvdyhvdXQsIG9uZSwgdHdvKSBcCiAJX19idWlsdGluX3VtdWxsX292ZXJmbG93KG9uZSwgdHdvLCBvdXQpCisjZWxpZiAoU0laRV9NQVggPT0gVUlOVF9NQVgpICYmIF9faGFzX2J1aWx0aW4oX19idWlsdGluX3VhZGRfb3ZlcmZsb3cpCisjIGRlZmluZSBnaXRfX2FkZF9zaXpldF9vdmVyZmxvdyhvdXQsIG9uZSwgdHdvKSBcCisJX19idWlsdGluX3VhZGRfb3ZlcmZsb3cob25lLCB0d28sIG91dCkKKyMgZGVmaW5lIGdpdF9fbXVsdGlwbHlfc2l6ZXRfb3ZlcmZsb3cob3V0LCBvbmUsIHR3bykgXAorCV9fYnVpbHRpbl91bXVsX292ZXJmbG93KG9uZSwgdHdvLCBvdXQpCiAjZWxzZQogCiAvKioKZGlmZiAtLWdpdCBhL3NyYy9tZXJnZS5jIGIvc3JjL21lcmdlLmMKaW5kZXggMDg3MTc4YS4uNmUwMGI1YSAxMDA2NDQKLS0tIGEvc3JjL21lcmdlLmMKKysrIGIvc3JjL21lcmdlLmMKQEAgLTU2Miw3ICs1NjIsNyBAQAogCiAJYXNzZXJ0KHJlcG8gJiYgY2IpOwogCi0JaWYgKChlcnJvciA9IGdpdF9idWZfam9pbnBhdGgoJm1lcmdlX2hlYWRfcGF0aCwgcmVwby0+cGF0aF9yZXBvc2l0b3J5LAorCWlmICgoZXJyb3IgPSBnaXRfYnVmX2pvaW5wYXRoKCZtZXJnZV9oZWFkX3BhdGgsIHJlcG8tPmdpdGRpciwKIAkJR0lUX01FUkdFX0hFQURfRklMRSkpIDwgMCkKIAkJcmV0dXJuIGVycm9yOwogCkBAIC0xMDc1LDcgKzEwNzUsNyBAQAogCWludCBzY29yZSA9IDA7CiAJaW50IGVycm9yID0gMDsKIAotCWlmIChHSVRfTU9ERV9UWVBFKGEtPm1vZGUpICE9IEdJVF9NT0RFX1RZUEUoYi0+bW9kZSkpCisJaWYgKCFHSVRfTU9ERV9JU0JMT0IoYS0+bW9kZSkgfHwgIUdJVF9NT0RFX0lTQkxPQihiLT5tb2RlKSkKIAkJcmV0dXJuIDA7CiAKIAkvKiB1cGRhdGUgc2lnbmF0dXJlIGNhY2hlIGlmIG5lZWRlZCAqLwpAQCAtMjAxOCw2ICsyMDE4LDI2IEBACiAJZ2l0X2l0ZXJhdG9yX29wdGlvbnMgaXRlcl9vcHRzID0gR0lUX0lURVJBVE9SX09QVElPTlNfSU5JVDsKIAlpbnQgZXJyb3I7CiAKKwlhc3NlcnQob3V0ICYmIHJlcG8pOworCisJLyogaWYgb25lIHNpZGUgaXMgdHJlZXNhbWUgdG8gdGhlIGFuY2VzdG9yLCB0YWtlIHRoZSBvdGhlciBzaWRlICovCisJaWYgKGFuY2VzdG9yX3RyZWUgJiYgbWVyZ2Vfb3B0cyAmJiAobWVyZ2Vfb3B0cy0+ZmxhZ3MgJiBHSVRfTUVSR0VfU0tJUF9SRVVDKSkgeworCQljb25zdCBnaXRfdHJlZSAqcmVzdWx0ID0gTlVMTDsKKwkJY29uc3QgZ2l0X29pZCAqYW5jZXN0b3JfdHJlZV9pZCA9IGdpdF90cmVlX2lkKGFuY2VzdG9yX3RyZWUpOworCisJCWlmIChvdXJfdHJlZSAmJiAhZ2l0X29pZF9jbXAoYW5jZXN0b3JfdHJlZV9pZCwgZ2l0X3RyZWVfaWQob3VyX3RyZWUpKSkKKwkJCXJlc3VsdCA9IHRoZWlyX3RyZWU7CisJCWVsc2UgaWYgKHRoZWlyX3RyZWUgJiYgIWdpdF9vaWRfY21wKGFuY2VzdG9yX3RyZWVfaWQsIGdpdF90cmVlX2lkKHRoZWlyX3RyZWUpKSkKKwkJCXJlc3VsdCA9IG91cl90cmVlOworCisJCWlmIChyZXN1bHQpIHsKKwkJCWlmICgoZXJyb3IgPSBnaXRfaW5kZXhfbmV3KG91dCkpID09IDApCisgICAgCQkJZXJyb3IgPSBnaXRfaW5kZXhfcmVhZF90cmVlKCpvdXQsIHJlc3VsdCk7CisKKwkJCXJldHVybiBlcnJvcjsKKwkJfQorCX0KKwogCWl0ZXJfb3B0cy5mbGFncyA9IEdJVF9JVEVSQVRPUl9ET05UX0lHTk9SRV9DQVNFOwogCiAJaWYgKChlcnJvciA9IGdpdF9pdGVyYXRvcl9mb3JfdHJlZSgKQEAgLTIyNzcsNyArMjI5Nyw3IEBACiAKIAlhc3NlcnQocmVwbyAmJiBoZWFkcyk7CiAKLQlpZiAoKGVycm9yID0gZ2l0X2J1Zl9qb2lucGF0aCgmZmlsZV9wYXRoLCByZXBvLT5wYXRoX3JlcG9zaXRvcnksIEdJVF9NRVJHRV9IRUFEX0ZJTEUpKSA8IDAgfHwKKwlpZiAoKGVycm9yID0gZ2l0X2J1Zl9qb2lucGF0aCgmZmlsZV9wYXRoLCByZXBvLT5naXRkaXIsIEdJVF9NRVJHRV9IRUFEX0ZJTEUpKSA8IDAgfHwKIAkJKGVycm9yID0gZ2l0X2ZpbGVidWZfb3BlbigmZmlsZSwgZmlsZV9wYXRoLnB0ciwgR0lUX0ZJTEVCVUZfRk9SQ0UsIEdJVF9NRVJHRV9GSUxFX01PREUpKSA8IDApCiAJCWdvdG8gY2xlYW51cDsKIApAQCAtMjMwNSw3ICsyMzI1LDcgQEAKIAogCWFzc2VydChyZXBvKTsKIAotCWlmICgoZXJyb3IgPSBnaXRfYnVmX2pvaW5wYXRoKCZmaWxlX3BhdGgsIHJlcG8tPnBhdGhfcmVwb3NpdG9yeSwgR0lUX01FUkdFX01PREVfRklMRSkpIDwgMCB8fAorCWlmICgoZXJyb3IgPSBnaXRfYnVmX2pvaW5wYXRoKCZmaWxlX3BhdGgsIHJlcG8tPmdpdGRpciwgR0lUX01FUkdFX01PREVfRklMRSkpIDwgMCB8fAogCQkoZXJyb3IgPSBnaXRfZmlsZWJ1Zl9vcGVuKCZmaWxlLCBmaWxlX3BhdGgucHRyLCBHSVRfRklMRUJVRl9GT1JDRSwgR0lUX01FUkdFX0ZJTEVfTU9ERSkpIDwgMCkKIAkJZ290byBjbGVhbnVwOwogCkBAIC0yNTM2LDcgKzI1NTYsNyBAQAogCWZvciAoaSA9IDA7IGkgPCBoZWFkc19sZW47IGkrKykKIAkJZW50cmllc1tpXS5tZXJnZV9oZWFkID0gaGVhZHNbaV07CiAKLQlpZiAoKGVycm9yID0gZ2l0X2J1Zl9qb2lucGF0aCgmZmlsZV9wYXRoLCByZXBvLT5wYXRoX3JlcG9zaXRvcnksIEdJVF9NRVJHRV9NU0dfRklMRSkpIDwgMCB8fAorCWlmICgoZXJyb3IgPSBnaXRfYnVmX2pvaW5wYXRoKCZmaWxlX3BhdGgsIHJlcG8tPmdpdGRpciwgR0lUX01FUkdFX01TR19GSUxFKSkgPCAwIHx8CiAJCShlcnJvciA9IGdpdF9maWxlYnVmX29wZW4oJmZpbGUsIGZpbGVfcGF0aC5wdHIsIEdJVF9GSUxFQlVGX0ZPUkNFLCBHSVRfTUVSR0VfRklMRV9NT0RFKSkgPCAwIHx8CiAJCShlcnJvciA9IGdpdF9maWxlYnVmX3dyaXRlKCZmaWxlLCAiTWVyZ2UgIiwgNikpIDwgMCkKIAkJZ290byBjbGVhbnVwOwpAQCAtMjkxNCw3ICsyOTM0LDcgQEAKIAlpZiAoIWdpdF9pbmRleF9oYXNfY29uZmxpY3RzKGluZGV4KSkKIAkJcmV0dXJuIDA7CiAKLQlpZiAoKGVycm9yID0gZ2l0X2J1Zl9qb2lucGF0aCgmZmlsZV9wYXRoLCByZXBvLT5wYXRoX3JlcG9zaXRvcnksIEdJVF9NRVJHRV9NU0dfRklMRSkpIDwgMCB8fAorCWlmICgoZXJyb3IgPSBnaXRfYnVmX2pvaW5wYXRoKCZmaWxlX3BhdGgsIHJlcG8tPmdpdGRpciwgR0lUX01FUkdFX01TR19GSUxFKSkgPCAwIHx8CiAJCShlcnJvciA9IGdpdF9maWxlYnVmX29wZW4oJmZpbGUsIGZpbGVfcGF0aC5wdHIsIEdJVF9GSUxFQlVGX0FQUEVORCwgR0lUX01FUkdFX0ZJTEVfTU9ERSkpIDwgMCkKIAkJZ290byBjbGVhbnVwOwogCmRpZmYgLS1naXQgYS9zcmMvbWVyZ2VfZHJpdmVyLmMgYi9zcmMvbWVyZ2VfZHJpdmVyLmMKaW5kZXggODhhNTNlYy4uMGYzNWQyMyAxMDA2NDQKLS0tIGEvc3JjL21lcmdlX2RyaXZlci5jCisrKyBiL3NyYy9tZXJnZV9kcml2ZXIuYwpAQCAtMzIsNiArMzIsMzUgQEAKIAogc3RhdGljIHZvaWQgZ2l0X21lcmdlX2RyaXZlcl9nbG9iYWxfc2h1dGRvd24odm9pZCk7CiAKK2NvbnN0IGdpdF9yZXBvc2l0b3J5KiBnaXRfbWVyZ2VfZHJpdmVyX3NvdXJjZV9yZXBvKGNvbnN0IGdpdF9tZXJnZV9kcml2ZXJfc291cmNlICpzcmMpCit7CisJYXNzZXJ0KHNyYyk7CisJcmV0dXJuIHNyYy0+cmVwbzsKK30KKworY29uc3QgZ2l0X2luZGV4X2VudHJ5KiBnaXRfbWVyZ2VfZHJpdmVyX3NvdXJjZV9hbmNlc3Rvcihjb25zdCBnaXRfbWVyZ2VfZHJpdmVyX3NvdXJjZSAqc3JjKQoreworCWFzc2VydChzcmMpOworCXJldHVybiBzcmMtPmFuY2VzdG9yOworfQorCitjb25zdCBnaXRfaW5kZXhfZW50cnkqIGdpdF9tZXJnZV9kcml2ZXJfc291cmNlX291cnMoY29uc3QgZ2l0X21lcmdlX2RyaXZlcl9zb3VyY2UgKnNyYykKK3sKKwlhc3NlcnQoc3JjKTsKKwlyZXR1cm4gc3JjLT5vdXJzOworfQorCitjb25zdCBnaXRfaW5kZXhfZW50cnkqIGdpdF9tZXJnZV9kcml2ZXJfc291cmNlX3RoZWlycyhjb25zdCBnaXRfbWVyZ2VfZHJpdmVyX3NvdXJjZSAqc3JjKQoreworCWFzc2VydChzcmMpOworCXJldHVybiBzcmMtPnRoZWlyczsKK30KKworY29uc3QgZ2l0X21lcmdlX2ZpbGVfb3B0aW9ucyogZ2l0X21lcmdlX2RyaXZlcl9zb3VyY2VfZmlsZV9vcHRpb25zKGNvbnN0IGdpdF9tZXJnZV9kcml2ZXJfc291cmNlICpzcmMpCit7CisJYXNzZXJ0KHNyYyk7CisJcmV0dXJuIHNyYy0+ZmlsZV9vcHRzOworfQogCiBpbnQgZ2l0X21lcmdlX2RyaXZlcl9fYnVpbHRpbl9hcHBseSgKIAlnaXRfbWVyZ2VfZHJpdmVyICpzZWxmLApkaWZmIC0tZ2l0IGEvc3JjL213aW5kb3cuYyBiL3NyYy9td2luZG93LmMKaW5kZXggNTIwZTc2OC4uN2JiOWRiYiAxMDA2NDQKLS0tIGEvc3JjL213aW5kb3cuYworKysgYi9zcmMvbXdpbmRvdy5jCkBAIC0xNCw4ICsxNCw2IEBACiAjaW5jbHVkZSAic3RybWFwLmgiCiAjaW5jbHVkZSAicGFjay5oIgogCi1HSVRfX1VTRV9TVFJNQVAKLQogI2RlZmluZSBERUZBVUxUX1dJTkRPV19TSVpFIFwKIAkoc2l6ZW9mKHZvaWQqKSA+PSA4IFwKIAkJPyAxICogMTAyNCAqIDEwMjQgKiAxMDI0IFwKQEAgLTg0LDcgKzgyLDcgQEAKIAogCWdpdF9hdG9taWNfaW5jKCZwYWNrLT5yZWZjb3VudCk7CiAKLQlnaXRfc3RybWFwX2luc2VydChnaXRfX3BhY2tfY2FjaGUsIHBhY2stPnBhY2tfbmFtZSwgcGFjaywgZXJyb3IpOworCWdpdF9zdHJtYXBfaW5zZXJ0KGdpdF9fcGFja19jYWNoZSwgcGFjay0+cGFja19uYW1lLCBwYWNrLCAmZXJyb3IpOwogCWdpdF9tdXRleF91bmxvY2soJmdpdF9fbXdpbmRvd19tdXRleCk7CiAKIAlpZiAoZXJyb3IgPCAwKSB7CmRpZmYgLS1naXQgYS9zcmMvb2RiLmMgYi9zcmMvb2RiLmMKaW5kZXggZGM5OGE2Zi4uYjY2MzI0ZiAxMDA2NDQKLS0tIGEvc3JjL29kYi5jCisrKyBiL3NyYy9vZGIuYwpAQCAtMzEsNiArMzEsOCBAQAogCiAjZGVmaW5lIEdJVF9BTFRFUk5BVEVTX01BWF9ERVBUSCA1CiAKK2Jvb2wgZ2l0X29kYl9fc3RyaWN0X2hhc2hfdmVyaWZpY2F0aW9uID0gdHJ1ZTsKKwogdHlwZWRlZiBzdHJ1Y3QKIHsKIAlnaXRfb2RiX2JhY2tlbmQgKmJhY2tlbmQ7CkBAIC00OTYsNyArNDk4LDcgQEAKIAlyZXR1cm4gR0lUX0VOT1RGT1VORDsKIH0KIAotc3RhdGljIGludCBhZGRfZGVmYXVsdF9iYWNrZW5kcygKK2ludCBnaXRfb2RiX19hZGRfZGVmYXVsdF9iYWNrZW5kcygKIAlnaXRfb2RiICpkYiwgY29uc3QgY2hhciAqb2JqZWN0c19kaXIsCiAJYm9vbCBhc19hbHRlcm5hdGVzLCBpbnQgYWx0ZXJuYXRlX2RlcHRoKQogewpAQCAtNTMxLDcgKzUzMyw3IEBACiAjZW5kaWYKIAogCS8qIGFkZCB0aGUgbG9vc2Ugb2JqZWN0IGJhY2tlbmQgKi8KLQlpZiAoZ2l0X29kYl9iYWNrZW5kX2xvb3NlKCZsb29zZSwgb2JqZWN0c19kaXIsIC0xLCAwLCAwLCAwKSA8IDAgfHwKKwlpZiAoZ2l0X29kYl9iYWNrZW5kX2xvb3NlKCZsb29zZSwgb2JqZWN0c19kaXIsIC0xLCBkYi0+ZG9fZnN5bmMsIDAsIDApIDwgMCB8fAogCQlhZGRfYmFja2VuZF9pbnRlcm5hbChkYiwgbG9vc2UsIEdJVF9MT09TRV9QUklPUklUWSwgYXNfYWx0ZXJuYXRlcywgaW5vZGUpIDwgMCkKIAkJcmV0dXJuIC0xOwogCkBAIC01ODYsNyArNTg4LDcgQEAKIAkJCWFsdGVybmF0ZSA9IGdpdF9idWZfY3N0cigmYWx0ZXJuYXRlc19wYXRoKTsKIAkJfQogCi0JCWlmICgocmVzdWx0ID0gYWRkX2RlZmF1bHRfYmFja2VuZHMob2RiLCBhbHRlcm5hdGUsIHRydWUsIGFsdGVybmF0ZV9kZXB0aCArIDEpKSA8IDApCisJCWlmICgocmVzdWx0ID0gZ2l0X29kYl9fYWRkX2RlZmF1bHRfYmFja2VuZHMob2RiLCBhbHRlcm5hdGUsIHRydWUsIGFsdGVybmF0ZV9kZXB0aCArIDEpKSA8IDApCiAJCQlicmVhazsKIAl9CiAKQEAgLTU5OCw3ICs2MDAsNyBAQAogCiBpbnQgZ2l0X29kYl9hZGRfZGlza19hbHRlcm5hdGUoZ2l0X29kYiAqb2RiLCBjb25zdCBjaGFyICpwYXRoKQogewotCXJldHVybiBhZGRfZGVmYXVsdF9iYWNrZW5kcyhvZGIsIHBhdGgsIHRydWUsIDApOworCXJldHVybiBnaXRfb2RiX19hZGRfZGVmYXVsdF9iYWNrZW5kcyhvZGIsIHBhdGgsIHRydWUsIDApOwogfQogCiBpbnQgZ2l0X29kYl9vcGVuKGdpdF9vZGIgKipvdXQsIGNvbnN0IGNoYXIgKm9iamVjdHNfZGlyKQpAQCAtNjEyLDcgKzYxNCw3IEBACiAJaWYgKGdpdF9vZGJfbmV3KCZkYikgPCAwKQogCQlyZXR1cm4gLTE7CiAKLQlpZiAoYWRkX2RlZmF1bHRfYmFja2VuZHMoZGIsIG9iamVjdHNfZGlyLCAwLCAwKSA8IDApIHsKKwlpZiAoZ2l0X29kYl9fYWRkX2RlZmF1bHRfYmFja2VuZHMoZGIsIG9iamVjdHNfZGlyLCAwLCAwKSA8IDApIHsKIAkJZ2l0X29kYl9mcmVlKGRiKTsKIAkJcmV0dXJuIC0xOwogCX0KQEAgLTYyMSw2ICs2MjMsMjQgQEAKIAlyZXR1cm4gMDsKIH0KIAoraW50IGdpdF9vZGJfX3NldF9jYXBzKGdpdF9vZGIgKm9kYiwgaW50IGNhcHMpCit7CisJaWYgKGNhcHMgPT0gR0lUX09EQl9DQVBfRlJPTV9PV05FUikgeworCQlnaXRfcmVwb3NpdG9yeSAqcmVwbyA9IG9kYi0+cmMub3duZXI7CisJCWludCB2YWw7CisKKwkJaWYgKCFyZXBvKSB7CisJCQlnaXRlcnJfc2V0KEdJVEVSUl9PREIsICJjYW5ub3QgYWNjZXNzIHJlcG9zaXRvcnkgdG8gc2V0IG9kYiBjYXBzIik7CisJCQlyZXR1cm4gLTE7CisJCX0KKworCQlpZiAoIWdpdF9yZXBvc2l0b3J5X19jdmFyKCZ2YWwsIHJlcG8sIEdJVF9DVkFSX0ZTWU5DT0JKRUNURklMRVMpKQorCQkJb2RiLT5kb19mc3luYyA9ICEhdmFsOworCX0KKworCXJldHVybiAwOworfQorCiBzdGF0aWMgdm9pZCBvZGJfZnJlZShnaXRfb2RiICpkYikKIHsKIAlzaXplX3QgaTsKQEAgLTY5NSw3ICs3MTUsNyBAQAogCXJldHVybiAoaW50KWZvdW5kOwogfQogCi1zdGF0aWMgaW50IG9kYl9mcmVzaGVuKGdpdF9vZGIgKmRiLCBjb25zdCBnaXRfb2lkICppZCkKK2ludCBnaXRfb2RiX19mcmVzaGVuKGdpdF9vZGIgKmRiLCBjb25zdCBnaXRfb2lkICppZCkKIHsKIAlhc3NlcnQoZGIgJiYgaWQpOwogCkBAIC05ODAsNyArMTAwMCw5IEBACiAJc2l6ZV90IGk7CiAJZ2l0X3Jhd29iaiByYXc7CiAJZ2l0X29kYl9vYmplY3QgKm9iamVjdDsKKwlnaXRfb2lkIGhhc2hlZDsKIAlib29sIGZvdW5kID0gZmFsc2U7CisJaW50IGVycm9yID0gMDsKIAogCWlmICghb25seV9yZWZyZXNoZWQgJiYgb2RiX3JlYWRfaGFyZGNvZGVkKCZyYXcsIGlkKSA9PSAwKQogCQlmb3VuZCA9IHRydWU7CkBAIC05OTMsNyArMTAxNSw3IEBACiAJCQljb250aW51ZTsKIAogCQlpZiAoYi0+cmVhZCAhPSBOVUxMKSB7Ci0JCQlpbnQgZXJyb3IgPSBiLT5yZWFkKCZyYXcuZGF0YSwgJnJhdy5sZW4sICZyYXcudHlwZSwgYiwgaWQpOworCQkJZXJyb3IgPSBiLT5yZWFkKCZyYXcuZGF0YSwgJnJhdy5sZW4sICZyYXcudHlwZSwgYiwgaWQpOwogCQkJaWYgKGVycm9yID09IEdJVF9QQVNTVEhST1VHSCB8fCBlcnJvciA9PSBHSVRfRU5PVEZPVU5EKQogCQkJCWNvbnRpbnVlOwogCkBAIC0xMDA3LDEyICsxMDI5LDI2IEBACiAJaWYgKCFmb3VuZCkKIAkJcmV0dXJuIEdJVF9FTk9URk9VTkQ7CiAKKwlpZiAoZ2l0X29kYl9fc3RyaWN0X2hhc2hfdmVyaWZpY2F0aW9uKSB7CisJCWlmICgoZXJyb3IgPSBnaXRfb2RiX2hhc2goJmhhc2hlZCwgcmF3LmRhdGEsIHJhdy5sZW4sIHJhdy50eXBlKSkgPCAwKQorCQkJZ290byBvdXQ7CisKKwkJaWYgKCFnaXRfb2lkX2VxdWFsKGlkLCAmaGFzaGVkKSkgeworCQkJZXJyb3IgPSBnaXRfb2RiX19lcnJvcl9taXNtYXRjaChpZCwgJmhhc2hlZCk7CisJCQlnb3RvIG91dDsKKwkJfQorCX0KKwogCWdpdGVycl9jbGVhcigpOwogCWlmICgob2JqZWN0ID0gb2RiX29iamVjdF9fYWxsb2MoaWQsICZyYXcpKSA9PSBOVUxMKQotCQlyZXR1cm4gLTE7CisJCWdvdG8gb3V0OwogCiAJKm91dCA9IGdpdF9jYWNoZV9zdG9yZV9yYXcob2RiX2NhY2hlKGRiKSwgb2JqZWN0KTsKLQlyZXR1cm4gMDsKKworb3V0OgorCWlmIChlcnJvcikKKwkJZ2l0X19mcmVlKHJhdy5kYXRhKTsKKwlyZXR1cm4gZXJyb3I7CiB9CiAKIGludCBnaXRfb2RiX3JlYWQoZ2l0X29kYl9vYmplY3QgKipvdXQsIGdpdF9vZGIgKmRiLCBjb25zdCBnaXRfb2lkICppZCkKQEAgLTEwNjMsOSArMTA5OSw5IEBACiAJCWNvbnN0IGdpdF9vaWQgKmtleSwgc2l6ZV90IGxlbiwgYm9vbCBvbmx5X3JlZnJlc2hlZCkKIHsKIAlzaXplX3QgaTsKLQlpbnQgZXJyb3IgPSBHSVRfRU5PVEZPVU5EOworCWludCBlcnJvciA9IDA7CiAJZ2l0X29pZCBmb3VuZF9mdWxsX29pZCA9IHt7MH19OwotCWdpdF9yYXdvYmogcmF3OworCWdpdF9yYXdvYmogcmF3ID0gezB9OwogCXZvaWQgKmRhdGEgPSBOVUxMOwogCWJvb2wgZm91bmQgPSBmYWxzZTsKIAlnaXRfb2RiX29iamVjdCAqb2JqZWN0OwpAQCAtMTA4NCwxNCArMTEyMCwyMiBAQAogCQkJCWNvbnRpbnVlOwogCiAJCQlpZiAoZXJyb3IpCi0JCQkJcmV0dXJuIGVycm9yOworCQkJCWdvdG8gb3V0OwogCiAJCQlnaXRfX2ZyZWUoZGF0YSk7CiAJCQlkYXRhID0gcmF3LmRhdGE7CiAKIAkJCWlmIChmb3VuZCAmJiBnaXRfb2lkX19jbXAoJmZ1bGxfb2lkLCAmZm91bmRfZnVsbF9vaWQpKSB7Ci0JCQkJZ2l0X19mcmVlKHJhdy5kYXRhKTsKLQkJCQlyZXR1cm4gZ2l0X29kYl9fZXJyb3JfYW1iaWd1b3VzKCJtdWx0aXBsZSBtYXRjaGVzIGZvciBwcmVmaXgiKTsKKwkJCQlnaXRfYnVmIGJ1ZiA9IEdJVF9CVUZfSU5JVDsKKworCQkJCWdpdF9idWZfcHJpbnRmKCZidWYsICJtdWx0aXBsZSBtYXRjaGVzIGZvciBwcmVmaXg6ICVzIiwKKwkJCQkJZ2l0X29pZF90b3N0cl9zKCZmdWxsX29pZCkpOworCQkJCWdpdF9idWZfcHJpbnRmKCZidWYsICIgJXMiLAorCQkJCQlnaXRfb2lkX3Rvc3RyX3MoJmZvdW5kX2Z1bGxfb2lkKSk7CisKKwkJCQllcnJvciA9IGdpdF9vZGJfX2Vycm9yX2FtYmlndW91cyhidWYucHRyKTsKKwkJCQlnaXRfYnVmX2ZyZWUoJmJ1Zik7CisJCQkJZ290byBvdXQ7CiAJCQl9CiAKIAkJCWZvdW5kX2Z1bGxfb2lkID0gZnVsbF9vaWQ7CkBAIC0xMTAyLDExICsxMTQ2LDI4IEBACiAJaWYgKCFmb3VuZCkKIAkJcmV0dXJuIEdJVF9FTk9URk9VTkQ7CiAKKwlpZiAoZ2l0X29kYl9fc3RyaWN0X2hhc2hfdmVyaWZpY2F0aW9uKSB7CisJCWdpdF9vaWQgaGFzaDsKKworCQlpZiAoKGVycm9yID0gZ2l0X29kYl9oYXNoKCZoYXNoLCByYXcuZGF0YSwgcmF3LmxlbiwgcmF3LnR5cGUpKSA8IDApCisJCQlnb3RvIG91dDsKKworCQlpZiAoIWdpdF9vaWRfZXF1YWwoJmZvdW5kX2Z1bGxfb2lkLCAmaGFzaCkpIHsKKwkJCWVycm9yID0gZ2l0X29kYl9fZXJyb3JfbWlzbWF0Y2goJmZvdW5kX2Z1bGxfb2lkLCAmaGFzaCk7CisJCQlnb3RvIG91dDsKKwkJfQorCX0KKwogCWlmICgob2JqZWN0ID0gb2RiX29iamVjdF9fYWxsb2MoJmZvdW5kX2Z1bGxfb2lkLCAmcmF3KSkgPT0gTlVMTCkKLQkJcmV0dXJuIC0xOworCQlnb3RvIG91dDsKIAogCSpvdXQgPSBnaXRfY2FjaGVfc3RvcmVfcmF3KG9kYl9jYWNoZShkYiksIG9iamVjdCk7Ci0JcmV0dXJuIDA7CisKK291dDoKKwlpZiAoZXJyb3IpCisJCWdpdF9fZnJlZShyYXcuZGF0YSk7CisKKwlyZXR1cm4gZXJyb3I7CiB9CiAKIGludCBnaXRfb2RiX3JlYWRfcHJlZml4KApAQCAtMTE2Nyw3ICsxMjI4LDcgQEAKIAlhc3NlcnQob2lkICYmIGRiKTsKIAogCWdpdF9vZGJfaGFzaChvaWQsIGRhdGEsIGxlbiwgdHlwZSk7Ci0JaWYgKG9kYl9mcmVzaGVuKGRiLCBvaWQpKQorCWlmIChnaXRfb2RiX19mcmVzaGVuKGRiLCBvaWQpKQogCQlyZXR1cm4gMDsKIAogCWZvciAoaSA9IDA7IGkgPCBkYi0+YmFja2VuZHMubGVuZ3RoICYmIGVycm9yIDwgMDsgKytpKSB7CkBAIC0xMjY1LDkgKzEzMjYsOSBAQAogewogCWdpdGVycl9zZXQoR0lURVJSX09EQiwKIAkJImNhbm5vdCAlcyAtICIKLQkJIkludmFsaWQgbGVuZ3RoLiAlIlBSSXVaIiB3YXMgZXhwZWN0ZWQuIFRoZSAiCi0JCSJ0b3RhbCBzaXplIG9mIHRoZSByZWNlaXZlZCBjaHVua3MgYW1vdW50cyB0byAlIlBSSXVaIi4iLAotCQlhY3Rpb24sIHN0cmVhbS0+ZGVjbGFyZWRfc2l6ZSwgc3RyZWFtLT5yZWNlaXZlZF9ieXRlcyk7CQkKKwkJIkludmFsaWQgbGVuZ3RoLiAlIlBSSWRaIiB3YXMgZXhwZWN0ZWQuIFRoZSAiCisJCSJ0b3RhbCBzaXplIG9mIHRoZSByZWNlaXZlZCBjaHVua3MgYW1vdW50cyB0byAlIlBSSWRaIi4iLAorCQlhY3Rpb24sIHN0cmVhbS0+ZGVjbGFyZWRfc2l6ZSwgc3RyZWFtLT5yZWNlaXZlZF9ieXRlcyk7CiAKIAlyZXR1cm4gLTE7CiB9CkBAIC0xMjkzLDcgKzEzNTQsNyBAQAogCiAJZ2l0X2hhc2hfZmluYWwob3V0LCBzdHJlYW0tPmhhc2hfY3R4KTsKIAotCWlmIChvZGJfZnJlc2hlbihzdHJlYW0tPmJhY2tlbmQtPm9kYiwgb3V0KSkKKwlpZiAoZ2l0X29kYl9fZnJlc2hlbihzdHJlYW0tPmJhY2tlbmQtPm9kYiwgb3V0KSkKIAkJcmV0dXJuIDA7CiAKIAlyZXR1cm4gc3RyZWFtLT5maW5hbGl6ZV93cml0ZShzdHJlYW0sIG91dCk7CkBAIC0xMzkzLDYgKzE0NTQsMTkgQEAKIAlyZXR1cm4gMDsKIH0KIAoraW50IGdpdF9vZGJfX2Vycm9yX21pc21hdGNoKGNvbnN0IGdpdF9vaWQgKmV4cGVjdGVkLCBjb25zdCBnaXRfb2lkICphY3R1YWwpCit7CisJY2hhciBleHBlY3RlZF9vaWRbR0lUX09JRF9IRVhTWiArIDFdLCBhY3R1YWxfb2lkW0dJVF9PSURfSEVYU1ogKyAxXTsKKworCWdpdF9vaWRfdG9zdHIoZXhwZWN0ZWRfb2lkLCBzaXplb2YoZXhwZWN0ZWRfb2lkKSwgZXhwZWN0ZWQpOworCWdpdF9vaWRfdG9zdHIoYWN0dWFsX29pZCwgc2l6ZW9mKGFjdHVhbF9vaWQpLCBhY3R1YWwpOworCisJZ2l0ZXJyX3NldChHSVRFUlJfT0RCLCAib2JqZWN0IGhhc2ggbWlzbWF0Y2ggLSBleHBlY3RlZCAlcyBidXQgZ290ICVzIiwKKwkJZXhwZWN0ZWRfb2lkLCBhY3R1YWxfb2lkKTsKKworCXJldHVybiBHSVRfRU1JU01BVENIOworfQorCiBpbnQgZ2l0X29kYl9fZXJyb3Jfbm90Zm91bmQoCiAJY29uc3QgY2hhciAqbWVzc2FnZSwgY29uc3QgZ2l0X29pZCAqb2lkLCBzaXplX3Qgb2lkX2xlbikKIHsKZGlmZiAtLWdpdCBhL3NyYy9vZGIuaCBiL3NyYy9vZGIuaAppbmRleCAzMWE5ZmQxLi42MWQ2ODdhIDEwMDY0NAotLS0gYS9zcmMvb2RiLmgKKysrIGIvc3JjL29kYi5oCkBAIC0yMCw2ICsyMCw4IEBACiAjZGVmaW5lIEdJVF9PQkpFQ1RfRElSX01PREUgMDc3NwogI2RlZmluZSBHSVRfT0JKRUNUX0ZJTEVfTU9ERSAwNDQ0CiAKK2V4dGVybiBib29sIGdpdF9vZGJfX3N0cmljdF9oYXNoX3ZlcmlmaWNhdGlvbjsKKwogLyogRE8gTk9UIEVYUE9SVCAqLwogdHlwZWRlZiBzdHJ1Y3QgewogCXZvaWQgKmRhdGE7CQkJLyoqPCBSYXcsIGRlY29tcHJlc3NlZCBvYmplY3QgZGF0YS4gKi8KQEAgLTM4LDggKzQwLDI1IEBACiAJZ2l0X3JlZmNvdW50IHJjOwogCWdpdF92ZWN0b3IgYmFja2VuZHM7CiAJZ2l0X2NhY2hlIG93bl9jYWNoZTsKKwl1bnNpZ25lZCBpbnQgZG9fZnN5bmMgOjE7CiB9OwogCit0eXBlZGVmIGVudW0geworCUdJVF9PREJfQ0FQX0ZST01fT1dORVIgPSAtMSwKK30gZ2l0X29kYl9jYXBfdDsKKworLyoKKyAqIFNldCB0aGUgY2FwYWJpbGl0aWVzIGZvciB0aGUgb2JqZWN0IGRhdGFiYXNlLgorICovCitpbnQgZ2l0X29kYl9fc2V0X2NhcHMoZ2l0X29kYiAqb2RiLCBpbnQgY2Fwcyk7CisKKy8qCisgKiBBZGQgdGhlIGRlZmF1bHQgbG9vc2UgYW5kIHBhY2tlZCBiYWNrZW5kcyBmb3IgYSBkYXRhYmFzZS4KKyAqLworaW50IGdpdF9vZGJfX2FkZF9kZWZhdWx0X2JhY2tlbmRzKAorCWdpdF9vZGIgKmRiLCBjb25zdCBjaGFyICpvYmplY3RzX2RpciwKKwlib29sIGFzX2FsdGVybmF0ZXMsIGludCBhbHRlcm5hdGVfZGVwdGgpOworCiAvKgogICogSGFzaCBhIGdpdF9yYXdvYmogaW50ZXJuYWxseS4KICAqIFRoZSBgZ2l0X3Jhd29iamAgaXMgc3VwcG9zZWQgdG8gYmUgcHJldmlvdXNseSBpbml0aWFsaXplZApAQCAtNzksNiArOTgsMTIgQEAKICAqLwogaW50IGdpdF9vZGJfX2hhc2hsaW5rKGdpdF9vaWQgKm91dCwgY29uc3QgY2hhciAqcGF0aCk7CiAKKy8qKgorICogR2VuZXJhdGUgYSBHSVRfRU1JU01BVENIIGVycm9yIGZvciB0aGUgT0RCLgorICovCitpbnQgZ2l0X29kYl9fZXJyb3JfbWlzbWF0Y2goCisJY29uc3QgZ2l0X29pZCAqZXhwZWN0ZWQsIGNvbnN0IGdpdF9vaWQgKmFjdHVhbCk7CisKIC8qCiAgKiBHZW5lcmF0ZSBhIEdJVF9FTk9URk9VTkQgZXJyb3IgZm9yIHRoZSBPREIuCiAgKi8KQEAgLTk4LDYgKzEyMyw5IEBACiAJZ2l0X29kYl9vYmplY3QgKipvdXQsIHNpemVfdCAqbGVuX3AsIGdpdF9vdHlwZSAqdHlwZV9wLAogCWdpdF9vZGIgKmRiLCBjb25zdCBnaXRfb2lkICppZCk7CiAKKy8qIGZyZXNoZW4gYW4gZW50cnkgaW4gdGhlIG9iamVjdCBkYXRhYmFzZSAqLworaW50IGdpdF9vZGJfX2ZyZXNoZW4oZ2l0X29kYiAqZGIsIGNvbnN0IGdpdF9vaWQgKmlkKTsKKwogLyogZnVsbHkgZnJlZSB0aGUgb2JqZWN0OyBpbnRlcm5hbCBtZXRob2QsIERPIE5PVCBFWFBPUlQgKi8KIHZvaWQgZ2l0X29kYl9vYmplY3RfX2ZyZWUodm9pZCAqb2JqZWN0KTsKIApkaWZmIC0tZ2l0IGEvc3JjL29kYl9sb29zZS5jIGIvc3JjL29kYl9sb29zZS5jCmluZGV4IGIyZTJmMWYuLjk5ZmRjYjQgMTAwNjQ0Ci0tLSBhL3NyYy9vZGJfbG9vc2UuYworKysgYi9zcmMvb2RiX2xvb3NlLmMKQEAgLTE0LDYgKzE0LDcgQEAKICNpbmNsdWRlICJvZGIuaCIKICNpbmNsdWRlICJkZWx0YS5oIgogI2luY2x1ZGUgImZpbGVidWYuaCIKKyNpbmNsdWRlICJvYmplY3QuaCIKIAogI2luY2x1ZGUgImdpdDIvb2RiX2JhY2tlbmQuaCIKICNpbmNsdWRlICJnaXQyL3R5cGVzLmgiCkBAIC0yMDQsNiArMjA1LDExIEBACiAJcmV0dXJuIGluZmxhdGUocywgMCk7CiB9CiAKK3N0YXRpYyB2b2lkIGFib3J0X2luZmxhdGUoel9zdHJlYW0gKnMpCit7CisJaW5mbGF0ZUVuZChzKTsKK30KKwogc3RhdGljIGludCBmaW5pc2hfaW5mbGF0ZSh6X3N0cmVhbSAqcykKIHsKIAlpbnQgc3RhdHVzID0gWl9PSzsKQEAgLTM2Niw2ICszNzIsNyBAQAogCQkodXNlZCA9IGdldF9vYmplY3RfaGVhZGVyKCZoZHIsIGhlYWQpKSA9PSAwIHx8CiAJCSFnaXRfb2JqZWN0X3R5cGVpc2xvb3NlKGhkci50eXBlKSkKIAl7CisJCWFib3J0X2luZmxhdGUoJnpzKTsKIAkJZ2l0ZXJyX3NldChHSVRFUlJfT0RCLCAiZmFpbGVkIHRvIGluZmxhdGUgZGlzayBvYmplY3QiKTsKIAkJcmV0dXJuIC0xOwogCX0KQEAgLTgzOCw2ICs4NDUsMTcgQEAKIAlnaXRfX2ZyZWUoc3RyZWFtKTsKIH0KIAorc3RhdGljIGludCBmaWxlYnVmX2ZsYWdzKGxvb3NlX2JhY2tlbmQgKmJhY2tlbmQpCit7CisJaW50IGZsYWdzID0gR0lUX0ZJTEVCVUZfVEVNUE9SQVJZIHwKKwkJKGJhY2tlbmQtPm9iamVjdF96bGliX2xldmVsIDw8IEdJVF9GSUxFQlVGX0RFRkxBVEVfU0hJRlQpOworCisJaWYgKGJhY2tlbmQtPmZzeW5jX29iamVjdF9maWxlcyB8fCBnaXRfcmVwb3NpdG9yeV9fZnN5bmNfZ2l0ZGlyKQorCQlmbGFncyB8PSBHSVRfRklMRUJVRl9GU1lOQzsKKworCXJldHVybiBmbGFnczsKK30KKwogc3RhdGljIGludCBsb29zZV9iYWNrZW5kX19zdHJlYW0oZ2l0X29kYl9zdHJlYW0gKipzdHJlYW1fb3V0LCBnaXRfb2RiX2JhY2tlbmQgKl9iYWNrZW5kLCBnaXRfb2ZmX3QgbGVuZ3RoLCBnaXRfb3R5cGUgdHlwZSkKIHsKIAlsb29zZV9iYWNrZW5kICpiYWNrZW5kOwpAQCAtODY0LDkgKzg4Miw3IEBACiAJc3RyZWFtLT5zdHJlYW0ubW9kZSA9IEdJVF9TVFJFQU1fV1JPTkxZOwogCiAJaWYgKGdpdF9idWZfam9pbnBhdGgoJnRtcF9wYXRoLCBiYWNrZW5kLT5vYmplY3RzX2RpciwgInRtcF9vYmplY3QiKSA8IDAgfHwKLQkJZ2l0X2ZpbGVidWZfb3Blbigmc3RyZWFtLT5mYnVmLCB0bXBfcGF0aC5wdHIsCi0JCQlHSVRfRklMRUJVRl9URU1QT1JBUlkgfAotCQkJKGJhY2tlbmQtPm9iamVjdF96bGliX2xldmVsIDw8IEdJVF9GSUxFQlVGX0RFRkxBVEVfU0hJRlQpLAorCQlnaXRfZmlsZWJ1Zl9vcGVuKCZzdHJlYW0tPmZidWYsIHRtcF9wYXRoLnB0ciwgZmlsZWJ1Zl9mbGFncyhiYWNrZW5kKSwKIAkJCWJhY2tlbmQtPm9iamVjdF9maWxlX21vZGUpIDwgMCB8fAogCQlzdHJlYW0tPnN0cmVhbS53cml0ZSgoZ2l0X29kYl9zdHJlYW0gKilzdHJlYW0sIGhkciwgaGRybGVuKSA8IDApCiAJewpAQCAtODk0LDkgKzkxMCw3IEBACiAJaGVhZGVyX2xlbiA9IGdpdF9vZGJfX2Zvcm1hdF9vYmplY3RfaGVhZGVyKGhlYWRlciwgc2l6ZW9mKGhlYWRlciksIGxlbiwgdHlwZSk7CiAKIAlpZiAoZ2l0X2J1Zl9qb2lucGF0aCgmZmluYWxfcGF0aCwgYmFja2VuZC0+b2JqZWN0c19kaXIsICJ0bXBfb2JqZWN0IikgPCAwIHx8Ci0JCWdpdF9maWxlYnVmX29wZW4oJmZidWYsIGZpbmFsX3BhdGgucHRyLAotCQkJR0lUX0ZJTEVCVUZfVEVNUE9SQVJZIHwKLQkJCShiYWNrZW5kLT5vYmplY3RfemxpYl9sZXZlbCA8PCBHSVRfRklMRUJVRl9ERUZMQVRFX1NISUZUKSwKKwkJZ2l0X2ZpbGVidWZfb3BlbigmZmJ1ZiwgZmluYWxfcGF0aC5wdHIsIGZpbGVidWZfZmxhZ3MoYmFja2VuZCksCiAJCQliYWNrZW5kLT5vYmplY3RfZmlsZV9tb2RlKSA8IDApCiAJewogCQllcnJvciA9IC0xOwpkaWZmIC0tZ2l0IGEvc3JjL29kYl9tZW1wYWNrLmMgYi9zcmMvb2RiX21lbXBhY2suYwppbmRleCA4NGVkOWMxLi5kNmYyZmI0IDEwMDY0NAotLS0gYS9zcmMvb2RiX21lbXBhY2suYworKysgYi9zcmMvb2RiX21lbXBhY2suYwpAQCAtMTgsOCArMTgsNiBAQAogI2luY2x1ZGUgImdpdDIvdHlwZXMuaCIKICNpbmNsdWRlICJnaXQyL3BhY2suaCIKIAotR0lUX19VU0VfT0lETUFQCi0KIHN0cnVjdCBtZW1vYmplY3QgewogCWdpdF9vaWQgb2lkOwogCXNpemVfdCBsZW47CkBAIC00MSw3ICszOSw3IEBACiAJc2l6ZV90IGFsbG9jX2xlbjsKIAlpbnQgcnZhbDsKIAotCXBvcyA9IGtoX3B1dChvaWQsIGRiLT5vYmplY3RzLCBvaWQsICZydmFsKTsKKwlwb3MgPSBnaXRfb2lkbWFwX3B1dChkYi0+b2JqZWN0cywgb2lkLCAmcnZhbCk7CiAJaWYgKHJ2YWwgPCAwKQogCQlyZXR1cm4gLTE7CiAKQEAgLTU3LDggKzU1LDggQEAKIAlvYmotPmxlbiA9IGxlbjsKIAlvYmotPnR5cGUgPSB0eXBlOwogCi0Ja2hfa2V5KGRiLT5vYmplY3RzLCBwb3MpID0gJm9iai0+b2lkOwotCWtoX3ZhbChkYi0+b2JqZWN0cywgcG9zKSA9IG9iajsKKwlnaXRfb2lkbWFwX3NldF9rZXlfYXQoZGItPm9iamVjdHMsIHBvcywgJm9iai0+b2lkKTsKKwlnaXRfb2lkbWFwX3NldF92YWx1ZV9hdChkYi0+b2JqZWN0cywgcG9zLCBvYmopOwogCiAJaWYgKHR5cGUgPT0gR0lUX09CSl9DT01NSVQpIHsKIAkJc3RydWN0IG1lbW9iamVjdCAqKnN0b3JlID0gZ2l0X2FycmF5X2FsbG9jKGRiLT5jb21taXRzKTsKQEAgLTcyLDEzICs3MCw4IEBACiBzdGF0aWMgaW50IGltcGxfX2V4aXN0cyhnaXRfb2RiX2JhY2tlbmQgKmJhY2tlbmQsIGNvbnN0IGdpdF9vaWQgKm9pZCkKIHsKIAlzdHJ1Y3QgbWVtb3J5X3BhY2tlcl9kYiAqZGIgPSAoc3RydWN0IG1lbW9yeV9wYWNrZXJfZGIgKiliYWNrZW5kOwotCWtoaXRlcl90IHBvczsKIAotCXBvcyA9IGtoX2dldChvaWQsIGRiLT5vYmplY3RzLCBvaWQpOwotCWlmIChwb3MgIT0ga2hfZW5kKGRiLT5vYmplY3RzKSkKLQkJcmV0dXJuIDE7Ci0KLQlyZXR1cm4gMDsKKwlyZXR1cm4gZ2l0X29pZG1hcF9leGlzdHMoZGItPm9iamVjdHMsIG9pZCk7CiB9CiAKIHN0YXRpYyBpbnQgaW1wbF9fcmVhZCh2b2lkICoqYnVmZmVyX3AsIHNpemVfdCAqbGVuX3AsIGdpdF9vdHlwZSAqdHlwZV9wLCBnaXRfb2RiX2JhY2tlbmQgKmJhY2tlbmQsIGNvbnN0IGdpdF9vaWQgKm9pZCkKQEAgLTg3LDExICs4MCwxMSBAQAogCXN0cnVjdCBtZW1vYmplY3QgKm9iaiA9IE5VTEw7CiAJa2hpdGVyX3QgcG9zOwogCi0JcG9zID0ga2hfZ2V0KG9pZCwgZGItPm9iamVjdHMsIG9pZCk7Ci0JaWYgKHBvcyA9PSBraF9lbmQoZGItPm9iamVjdHMpKQorCXBvcyA9IGdpdF9vaWRtYXBfbG9va3VwX2luZGV4KGRiLT5vYmplY3RzLCBvaWQpOworCWlmICghZ2l0X29pZG1hcF92YWxpZF9pbmRleChkYi0+b2JqZWN0cywgcG9zKSkKIAkJcmV0dXJuIEdJVF9FTk9URk9VTkQ7CiAKLQlvYmogPSBraF92YWwoZGItPm9iamVjdHMsIHBvcyk7CisJb2JqID0gZ2l0X29pZG1hcF92YWx1ZV9hdChkYi0+b2JqZWN0cywgcG9zKTsKIAogCSpsZW5fcCA9IG9iai0+bGVuOwogCSp0eXBlX3AgPSBvYmotPnR5cGU7CkBAIC0xMDgsMTEgKzEwMSwxMSBAQAogCXN0cnVjdCBtZW1vYmplY3QgKm9iaiA9IE5VTEw7CiAJa2hpdGVyX3QgcG9zOwogCi0JcG9zID0ga2hfZ2V0KG9pZCwgZGItPm9iamVjdHMsIG9pZCk7Ci0JaWYgKHBvcyA9PSBraF9lbmQoZGItPm9iamVjdHMpKQorCXBvcyA9IGdpdF9vaWRtYXBfbG9va3VwX2luZGV4KGRiLT5vYmplY3RzLCBvaWQpOworCWlmICghZ2l0X29pZG1hcF92YWxpZF9pbmRleChkYi0+b2JqZWN0cywgcG9zKSkKIAkJcmV0dXJuIEdJVF9FTk9URk9VTkQ7CiAKLQlvYmogPSBraF92YWwoZGItPm9iamVjdHMsIHBvcyk7CisJb2JqID0gZ2l0X29pZG1hcF92YWx1ZV9hdChkYi0+b2JqZWN0cywgcG9zKTsKIAogCSpsZW5fcCA9IG9iai0+bGVuOwogCSp0eXBlX3AgPSBvYmotPnR5cGU7CkBAIC0xNDksNyArMTQyLDcgQEAKIAlzdHJ1Y3QgbWVtb3J5X3BhY2tlcl9kYiAqZGIgPSAoc3RydWN0IG1lbW9yeV9wYWNrZXJfZGIgKilfYmFja2VuZDsKIAlzdHJ1Y3QgbWVtb2JqZWN0ICpvYmplY3QgPSBOVUxMOwogCi0Ja2hfZm9yZWFjaF92YWx1ZShkYi0+b2JqZWN0cywgb2JqZWN0LCB7CisJZ2l0X29pZG1hcF9mb3JlYWNoX3ZhbHVlKGRiLT5vYmplY3RzLCBvYmplY3QsIHsKIAkJZ2l0X19mcmVlKG9iamVjdCk7CiAJfSk7CiAKZGlmZiAtLWdpdCBhL3NyYy9vZGJfcGFjay5jIGIvc3JjL29kYl9wYWNrLmMKaW5kZXggYjgwZDAzMy4uNTE3NzBhOCAxMDA2NDQKLS0tIGEvc3JjL29kYl9wYWNrLmMKKysrIGIvc3JjL29kYl9wYWNrLmMKQEAgLTQyOCw3ICs0MjgsNyBAQAogCQkJZ2l0X29pZF9jcHkob3V0X29pZCwgc2hvcnRfb2lkKTsKIAl9IGVsc2UgewogCQlzdHJ1Y3QgZ2l0X3BhY2tfZW50cnkgZTsKLQkJZ2l0X3Jhd29iaiByYXc7CisJCWdpdF9yYXdvYmogcmF3ID0ge05VTEx9OwogCiAJCWlmICgoZXJyb3IgPSBwYWNrX2VudHJ5X2ZpbmRfcHJlZml4KAogCQkJCSZlLCAoc3RydWN0IHBhY2tfYmFja2VuZCAqKWJhY2tlbmQsIHNob3J0X29pZCwgbGVuKSkgPT0gMCAmJgpkaWZmIC0tZ2l0IGEvc3JjL29mZm1hcC5jIGIvc3JjL29mZm1hcC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFiNjY0OTYKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvb2ZmbWFwLmMKQEAgLTAsMCArMSw4MyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgdGhlIGxpYmdpdDIgY29udHJpYnV0b3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIGxpYmdpdDIsIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBHTlUgR1BMIHYyIHdpdGgKKyAqIGEgTGlua2luZyBFeGNlcHRpb24uIEZvciBmdWxsIHRlcm1zIHNlZSB0aGUgaW5jbHVkZWQgQ09QWUlORyBmaWxlLgorICovCisKKyNpbmNsdWRlICJvZmZtYXAuaCIKKworX19LSEFTSF9JTVBMKG9mZiwgc3RhdGljIGtoX2lubGluZSwgZ2l0X29mZl90LCB2b2lkICosIDEsIGtoX2ludDY0X2hhc2hfZnVuYywga2hfaW50NjRfaGFzaF9lcXVhbCkKKworZ2l0X29mZm1hcCAqZ2l0X29mZm1hcF9hbGxvYyh2b2lkKQoreworCXJldHVybiBraF9pbml0KG9mZik7Cit9CisKK3ZvaWQgZ2l0X29mZm1hcF9mcmVlKGdpdF9vZmZtYXAgKm1hcCkKK3sKKwlraF9kZXN0cm95KG9mZiwgbWFwKTsKK30KKwordm9pZCBnaXRfb2ZmbWFwX2NsZWFyKGdpdF9vZmZtYXAgKm1hcCkKK3sKKwlraF9jbGVhcihvZmYsIG1hcCk7Cit9CisKK3NpemVfdCBnaXRfb2ZmbWFwX251bV9lbnRyaWVzKGdpdF9vZmZtYXAgKm1hcCkKK3sKKwlyZXR1cm4ga2hfc2l6ZShtYXApOworfQorCitzaXplX3QgZ2l0X29mZm1hcF9sb29rdXBfaW5kZXgoZ2l0X29mZm1hcCAqbWFwLCBjb25zdCBnaXRfb2ZmX3Qga2V5KQoreworCXJldHVybiBraF9nZXQob2ZmLCBtYXAsIGtleSk7Cit9CisKK2ludCBnaXRfb2ZmbWFwX3ZhbGlkX2luZGV4KGdpdF9vZmZtYXAgKm1hcCwgc2l6ZV90IGlkeCkKK3sKKwlyZXR1cm4gaWR4ICE9IGtoX2VuZChtYXApOworfQorCitpbnQgZ2l0X29mZm1hcF9leGlzdHMoZ2l0X29mZm1hcCAqbWFwLCBjb25zdCBnaXRfb2ZmX3Qga2V5KQoreworCXJldHVybiBraF9nZXQob2ZmLCBtYXAsIGtleSkgIT0ga2hfZW5kKG1hcCk7Cit9CisKK3ZvaWQgKmdpdF9vZmZtYXBfdmFsdWVfYXQoZ2l0X29mZm1hcCAqbWFwLCBzaXplX3QgaWR4KQoreworCXJldHVybiBraF92YWwobWFwLCBpZHgpOworfQorCit2b2lkIGdpdF9vZmZtYXBfc2V0X3ZhbHVlX2F0KGdpdF9vZmZtYXAgKm1hcCwgc2l6ZV90IGlkeCwgdm9pZCAqdmFsdWUpCit7CisJa2hfdmFsKG1hcCwgaWR4KSA9IHZhbHVlOworfQorCit2b2lkIGdpdF9vZmZtYXBfZGVsZXRlX2F0KGdpdF9vZmZtYXAgKm1hcCwgc2l6ZV90IGlkeCkKK3sKKwlraF9kZWwob2ZmLCBtYXAsIGlkeCk7Cit9CisKK2ludCBnaXRfb2ZmbWFwX3B1dChnaXRfb2ZmbWFwICptYXAsIGNvbnN0IGdpdF9vZmZfdCBrZXksIGludCAqZXJyKQoreworCXJldHVybiBraF9wdXQob2ZmLCBtYXAsIGtleSwgZXJyKTsKK30KKwordm9pZCBnaXRfb2ZmbWFwX2luc2VydChnaXRfb2ZmbWFwICptYXAsIGNvbnN0IGdpdF9vZmZfdCBrZXksIHZvaWQgKnZhbHVlLCBpbnQgKnJ2YWwpCit7CisJa2hpdGVyX3QgaWR4ID0ga2hfcHV0KG9mZiwgbWFwLCBrZXksIHJ2YWwpOworCisJaWYgKCgqcnZhbCkgPj0gMCkgeworCQlpZiAoKCpydmFsKSA9PSAwKQorCQkJa2hfa2V5KG1hcCwgaWR4KSA9IGtleTsKKwkJa2hfdmFsKG1hcCwgaWR4KSA9IHZhbHVlOworCX0KK30KKwordm9pZCBnaXRfb2ZmbWFwX2RlbGV0ZShnaXRfb2ZmbWFwICptYXAsIGNvbnN0IGdpdF9vZmZfdCBrZXkpCit7CisJa2hpdGVyX3QgaWR4ID0gZ2l0X29mZm1hcF9sb29rdXBfaW5kZXgobWFwLCBrZXkpOworCWlmIChnaXRfb2ZmbWFwX3ZhbGlkX2luZGV4KG1hcCwgaWR4KSkKKwkJZ2l0X29mZm1hcF9kZWxldGVfYXQobWFwLCBpZHgpOworfQpkaWZmIC0tZ2l0IGEvc3JjL29mZm1hcC5oIGIvc3JjL29mZm1hcC5oCmluZGV4IDBkMGU1MTIuLmY5ZDI0ODMgMTAwNjQ0Ci0tLSBhL3NyYy9vZmZtYXAuaAorKysgYi9zcmMvb2ZmbWFwLmgKQEAgLTIwLDQ1ICsyMCwyNCBAQAogX19LSEFTSF9UWVBFKG9mZiwgZ2l0X29mZl90LCB2b2lkICopCiB0eXBlZGVmIGtoYXNoX3Qob2ZmKSBnaXRfb2ZmbWFwOwogCi0jZGVmaW5lIEdJVF9fVVNFX09GRk1BUCBcCi0JX19LSEFTSF9JTVBMKG9mZiwgc3RhdGljIGtoX2lubGluZSwgZ2l0X29mZl90LCB2b2lkICosIDEsIGtoX2ludDY0X2hhc2hfZnVuYywga2hfaW50NjRfaGFzaF9lcXVhbCkKK2dpdF9vZmZtYXAgKmdpdF9vZmZtYXBfYWxsb2Modm9pZCk7Cit2b2lkIGdpdF9vZmZtYXBfZnJlZShnaXRfb2ZmbWFwICptYXApOwordm9pZCBnaXRfb2ZmbWFwX2NsZWFyKGdpdF9vZmZtYXAgKm1hcCk7CiAKLSNkZWZpbmUgZ2l0X29mZm1hcF9hbGxvYygpICBraF9pbml0KG9mZikKLSNkZWZpbmUgZ2l0X29mZm1hcF9mcmVlKGgpICBraF9kZXN0cm95KG9mZiwgaCksIGggPSBOVUxMCi0jZGVmaW5lIGdpdF9vZmZtYXBfY2xlYXIoaCkga2hfY2xlYXIob2ZmLCBoKQorc2l6ZV90IGdpdF9vZmZtYXBfbnVtX2VudHJpZXMoZ2l0X29mZm1hcCAqbWFwKTsKIAotI2RlZmluZSBnaXRfb2ZmbWFwX251bV9lbnRyaWVzKGgpIGtoX3NpemUoaCkKK3NpemVfdCBnaXRfb2ZmbWFwX2xvb2t1cF9pbmRleChnaXRfb2ZmbWFwICptYXAsIGNvbnN0IGdpdF9vZmZfdCBrZXkpOworaW50IGdpdF9vZmZtYXBfdmFsaWRfaW5kZXgoZ2l0X29mZm1hcCAqbWFwLCBzaXplX3QgaWR4KTsKIAotI2RlZmluZSBnaXRfb2ZmbWFwX2xvb2t1cF9pbmRleChoLCBrKSAga2hfZ2V0KG9mZiwgaCwgaykKLSNkZWZpbmUgZ2l0X29mZm1hcF92YWxpZF9pbmRleChoLCBpZHgpIChpZHggIT0ga2hfZW5kKGgpKQoraW50IGdpdF9vZmZtYXBfZXhpc3RzKGdpdF9vZmZtYXAgKm1hcCwgY29uc3QgZ2l0X29mZl90IGtleSk7CiAKLSNkZWZpbmUgZ2l0X29mZm1hcF9leGlzdHMoaCwgaykgKGtoX2dldChvZmYsIGgsIGspICE9IGtoX2VuZChoKSkKK3ZvaWQgKmdpdF9vZmZtYXBfdmFsdWVfYXQoZ2l0X29mZm1hcCAqbWFwLCBzaXplX3QgaWR4KTsKK3ZvaWQgZ2l0X29mZm1hcF9zZXRfdmFsdWVfYXQoZ2l0X29mZm1hcCAqbWFwLCBzaXplX3QgaWR4LCB2b2lkICp2YWx1ZSk7Cit2b2lkIGdpdF9vZmZtYXBfZGVsZXRlX2F0KGdpdF9vZmZtYXAgKm1hcCwgc2l6ZV90IGlkeCk7CiAKLSNkZWZpbmUgZ2l0X29mZm1hcF92YWx1ZV9hdChoLCBpZHgpICAgICAgICBraF92YWwoaCwgaWR4KQotI2RlZmluZSBnaXRfb2ZmbWFwX3NldF92YWx1ZV9hdChoLCBpZHgsIHYpIGtoX3ZhbChoLCBpZHgpID0gdgotI2RlZmluZSBnaXRfb2ZmbWFwX2RlbGV0ZV9hdChoLCBpZHgpICAgICAgIGtoX2RlbChvZmYsIGgsIGlkeCkKLQotI2RlZmluZSBnaXRfb2ZmbWFwX2luc2VydChoLCBrZXksIHZhbCwgcnZhbCkgZG8geyBcCi0Ja2hpdGVyX3QgX19wb3MgPSBraF9wdXQob2ZmLCBoLCBrZXksICZydmFsKTsgXAotCWlmIChydmFsID49IDApIHsgXAotCQlpZiAocnZhbCA9PSAwKSBraF9rZXkoaCwgX19wb3MpID0ga2V5OyBcCi0JCWtoX3ZhbChoLCBfX3BvcykgPSB2YWw7IFwKLQl9IH0gd2hpbGUgKDApCi0KLSNkZWZpbmUgZ2l0X29mZm1hcF9pbnNlcnQyKGgsIGtleSwgdmFsLCBvbGR2LCBydmFsKSBkbyB7IFwKLQlraGl0ZXJfdCBfX3BvcyA9IGtoX3B1dChvZmYsIGgsIGtleSwgJnJ2YWwpOyBcCi0JaWYgKHJ2YWwgPj0gMCkgeyBcCi0JCWlmIChydmFsID09IDApIHsgXAotCQkJb2xkdiA9IGtoX3ZhbChoLCBfX3Bvcyk7IFwKLQkJCWtoX2tleShoLCBfX3BvcykgPSBrZXk7IFwKLQkJfSBlbHNlIHsgb2xkdiA9IE5VTEw7IH0gXAotCQlraF92YWwoaCwgX19wb3MpID0gdmFsOyBcCi0JfSB9IHdoaWxlICgwKQotCi0jZGVmaW5lIGdpdF9vZmZtYXBfZGVsZXRlKGgsIGtleSkgZG8geyBcCi0Ja2hpdGVyX3QgX19wb3MgPSBnaXRfb2ZmbWFwX2xvb2t1cF9pbmRleChoLCBrZXkpOyBcCi0JaWYgKGdpdF9vZmZtYXBfdmFsaWRfaW5kZXgoaCwgX19wb3MpKSBcCi0JCWdpdF9vZmZtYXBfZGVsZXRlX2F0KGgsIF9fcG9zKTsgfSB3aGlsZSAoMCkKK2ludCBnaXRfb2ZmbWFwX3B1dChnaXRfb2ZmbWFwICptYXAsIGNvbnN0IGdpdF9vZmZfdCBrZXksIGludCAqZXJyKTsKK3ZvaWQgZ2l0X29mZm1hcF9pbnNlcnQoZ2l0X29mZm1hcCAqbWFwLCBjb25zdCBnaXRfb2ZmX3Qga2V5LCB2b2lkICp2YWx1ZSwgaW50ICpydmFsKTsKK3ZvaWQgZ2l0X29mZm1hcF9kZWxldGUoZ2l0X29mZm1hcCAqbWFwLCBjb25zdCBnaXRfb2ZmX3Qga2V5KTsKIAogI2RlZmluZSBnaXRfb2ZmbWFwX2ZvcmVhY2gJCWtoX2ZvcmVhY2gKICNkZWZpbmUgZ2l0X29mZm1hcF9mb3JlYWNoX3ZhbHVlCWtoX2ZvcmVhY2hfdmFsdWUKZGlmZiAtLWdpdCBhL3NyYy9vaWRtYXAuYyBiL3NyYy9vaWRtYXAuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41ZjE1NmExCi0tLSAvZGV2L251bGwKKysrIGIvc3JjL29pZG1hcC5jCkBAIC0wLDAgKzEsMTA1IEBACisvKgorICogQ29weXJpZ2h0IChDKSB0aGUgbGliZ2l0MiBjb250cmlidXRvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogVGhpcyBmaWxlIGlzIHBhcnQgb2YgbGliZ2l0MiwgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIEdOVSBHUEwgdjIgd2l0aAorICogYSBMaW5raW5nIEV4Y2VwdGlvbi4gRm9yIGZ1bGwgdGVybXMgc2VlIHRoZSBpbmNsdWRlZCBDT1BZSU5HIGZpbGUuCisgKi8KKworI2luY2x1ZGUgIm9pZG1hcC5oIgorCitHSVRfSU5MSU5FKGtoaW50X3QpIGdpdF9vaWRtYXBfaGFzaChjb25zdCBnaXRfb2lkICpvaWQpCit7CisJa2hpbnRfdCBoOworCW1lbWNweSgmaCwgb2lkLCBzaXplb2Yoa2hpbnRfdCkpOworCXJldHVybiBoOworfQorCitfX0tIQVNIX0lNUEwob2lkLCBzdGF0aWMga2hfaW5saW5lLCBjb25zdCBnaXRfb2lkICosIHZvaWQgKiwgMSwgZ2l0X29pZG1hcF9oYXNoLCBnaXRfb2lkX2VxdWFsKQorCitnaXRfb2lkbWFwICpnaXRfb2lkbWFwX2FsbG9jKCkKK3sKKwlyZXR1cm4ga2hfaW5pdChvaWQpOworfQorCit2b2lkIGdpdF9vaWRtYXBfZnJlZShnaXRfb2lkbWFwICptYXApCit7CisJa2hfZGVzdHJveShvaWQsIG1hcCk7Cit9CisKK3ZvaWQgZ2l0X29pZG1hcF9jbGVhcihnaXRfb2lkbWFwICptYXApCit7CisJa2hfY2xlYXIob2lkLCBtYXApOworfQorCitzaXplX3QgZ2l0X29pZG1hcF9zaXplKGdpdF9vaWRtYXAgKm1hcCkKK3sKKwlyZXR1cm4ga2hfc2l6ZShtYXApOworfQorCitzaXplX3QgZ2l0X29pZG1hcF9sb29rdXBfaW5kZXgoZ2l0X29pZG1hcCAqbWFwLCBjb25zdCBnaXRfb2lkICprZXkpCit7CisJcmV0dXJuIGtoX2dldChvaWQsIG1hcCwga2V5KTsKK30KKworaW50IGdpdF9vaWRtYXBfdmFsaWRfaW5kZXgoZ2l0X29pZG1hcCAqbWFwLCBzaXplX3QgaWR4KQoreworCXJldHVybiBpZHggIT0ga2hfZW5kKG1hcCk7Cit9CisKK2ludCBnaXRfb2lkbWFwX2V4aXN0cyhnaXRfb2lkbWFwICptYXAsIGNvbnN0IGdpdF9vaWQgKmtleSkKK3sKKwlyZXR1cm4ga2hfZ2V0KG9pZCwgbWFwLCBrZXkpICE9IGtoX2VuZChtYXApOworfQorCitpbnQgZ2l0X29pZG1hcF9oYXNfZGF0YShnaXRfb2lkbWFwICptYXAsIHNpemVfdCBpZHgpCit7CisJcmV0dXJuIGtoX2V4aXN0KG1hcCwgaWR4KTsKK30KKworY29uc3QgZ2l0X29pZCAqZ2l0X29pZG1hcF9rZXkoZ2l0X29pZG1hcCAqbWFwLCBzaXplX3QgaWR4KQoreworCXJldHVybiBraF9rZXkobWFwLCBpZHgpOworfQorCit2b2lkIGdpdF9vaWRtYXBfc2V0X2tleV9hdChnaXRfb2lkbWFwICptYXAsIHNpemVfdCBpZHgsIGdpdF9vaWQgKmtleSkKK3sKKwlraF9rZXkobWFwLCBpZHgpID0ga2V5OworfQorCit2b2lkICpnaXRfb2lkbWFwX3ZhbHVlX2F0KGdpdF9vaWRtYXAgKm1hcCwgc2l6ZV90IGlkeCkKK3sKKwlyZXR1cm4ga2hfdmFsKG1hcCwgaWR4KTsKK30KKwordm9pZCBnaXRfb2lkbWFwX3NldF92YWx1ZV9hdChnaXRfb2lkbWFwICptYXAsIHNpemVfdCBpZHgsIHZvaWQgKnZhbHVlKQoreworCWtoX3ZhbChtYXAsIGlkeCkgPSB2YWx1ZTsKK30KKwordm9pZCBnaXRfb2lkbWFwX2RlbGV0ZV9hdChnaXRfb2lkbWFwICptYXAsIHNpemVfdCBpZHgpCit7CisJa2hfZGVsKG9pZCwgbWFwLCBpZHgpOworfQorCitpbnQgZ2l0X29pZG1hcF9wdXQoZ2l0X29pZG1hcCAqbWFwLCBjb25zdCBnaXRfb2lkICprZXksIGludCAqZXJyKQoreworCXJldHVybiBraF9wdXQob2lkLCBtYXAsIGtleSwgZXJyKTsKK30KKwordm9pZCBnaXRfb2lkbWFwX2luc2VydChnaXRfb2lkbWFwICptYXAsIGNvbnN0IGdpdF9vaWQgKmtleSwgdm9pZCAqdmFsdWUsIGludCAqcnZhbCkKK3sKKwlraGl0ZXJfdCBpZHggPSBraF9wdXQob2lkLCBtYXAsIGtleSwgcnZhbCk7CisKKwlpZiAoKCpydmFsKSA+PSAwKSB7CisJCWlmICgoKnJ2YWwpID09IDApCisJCQlraF9rZXkobWFwLCBpZHgpID0ga2V5OworCQlraF92YWwobWFwLCBpZHgpID0gdmFsdWU7CisJfQorfQorCit2b2lkIGdpdF9vaWRtYXBfZGVsZXRlKGdpdF9vaWRtYXAgKm1hcCwgY29uc3QgZ2l0X29pZCAqa2V5KQoreworCWtoaXRlcl90IGlkeCA9IGdpdF9vaWRtYXBfbG9va3VwX2luZGV4KG1hcCwga2V5KTsKKwlpZiAoZ2l0X29pZG1hcF92YWxpZF9pbmRleChtYXAsIGlkeCkpCisJCWdpdF9vaWRtYXBfZGVsZXRlX2F0KG1hcCwgaWR4KTsKK30KZGlmZiAtLWdpdCBhL3NyYy9vaWRtYXAuaCBiL3NyYy9vaWRtYXAuaAppbmRleCAyY2YyMDhmLi41NjMyMjI0IDEwMDY0NAotLS0gYS9zcmMvb2lkbWFwLmgKKysrIGIvc3JjL29pZG1hcC5oCkBAIC0yMCwzNSArMjAsMzEgQEAKIF9fS0hBU0hfVFlQRShvaWQsIGNvbnN0IGdpdF9vaWQgKiwgdm9pZCAqKQogdHlwZWRlZiBraGFzaF90KG9pZCkgZ2l0X29pZG1hcDsKIAotR0lUX0lOTElORShraGludF90KSBnaXRfb2lkbWFwX2hhc2goY29uc3QgZ2l0X29pZCAqb2lkKQotewotCWtoaW50X3QgaDsKLQltZW1jcHkoJmgsIG9pZCwgc2l6ZW9mKGtoaW50X3QpKTsKLQlyZXR1cm4gaDsKLX0KK2dpdF9vaWRtYXAgKmdpdF9vaWRtYXBfYWxsb2Modm9pZCk7Cit2b2lkIGdpdF9vaWRtYXBfZnJlZShnaXRfb2lkbWFwICptYXApOwordm9pZCBnaXRfb2lkbWFwX2NsZWFyKGdpdF9vaWRtYXAgKm1hcCk7CiAKLSNkZWZpbmUgR0lUX19VU0VfT0lETUFQIFwKLQlfX0tIQVNIX0lNUEwob2lkLCBzdGF0aWMga2hfaW5saW5lLCBjb25zdCBnaXRfb2lkICosIHZvaWQgKiwgMSwgZ2l0X29pZG1hcF9oYXNoLCBnaXRfb2lkX2VxdWFsKQorc2l6ZV90IGdpdF9vaWRtYXBfc2l6ZShnaXRfb2lkbWFwICptYXApOwogCi0jZGVmaW5lIGdpdF9vaWRtYXBfYWxsb2MoKSBraF9pbml0KG9pZCkKLSNkZWZpbmUgZ2l0X29pZG1hcF9mcmVlKGgpIGtoX2Rlc3Ryb3kob2lkLGgpLCBoID0gTlVMTAorc2l6ZV90IGdpdF9vaWRtYXBfbG9va3VwX2luZGV4KGdpdF9vaWRtYXAgKm1hcCwgY29uc3QgZ2l0X29pZCAqa2V5KTsKK2ludCBnaXRfb2lkbWFwX3ZhbGlkX2luZGV4KGdpdF9vaWRtYXAgKm1hcCwgc2l6ZV90IGlkeCk7CiAKLSNkZWZpbmUgZ2l0X29pZG1hcF9sb29rdXBfaW5kZXgoaCwgaykga2hfZ2V0KG9pZCwgaCwgaykKLSNkZWZpbmUgZ2l0X29pZG1hcF92YWxpZF9pbmRleChoLCBpZHgpIChpZHggIT0ga2hfZW5kKGgpKQoraW50IGdpdF9vaWRtYXBfZXhpc3RzKGdpdF9vaWRtYXAgKm1hcCwgY29uc3QgZ2l0X29pZCAqa2V5KTsKK2ludCBnaXRfb2lkbWFwX2hhc19kYXRhKGdpdF9vaWRtYXAgKm1hcCwgc2l6ZV90IGlkeCk7CiAKLSNkZWZpbmUgZ2l0X29pZG1hcF92YWx1ZV9hdChoLCBpZHgpIGtoX3ZhbChoLCBpZHgpCitjb25zdCBnaXRfb2lkICpnaXRfb2lkbWFwX2tleShnaXRfb2lkbWFwICptYXAsIHNpemVfdCBpZHgpOwordm9pZCBnaXRfb2lkbWFwX3NldF9rZXlfYXQoZ2l0X29pZG1hcCAqbWFwLCBzaXplX3QgaWR4LCBnaXRfb2lkICprZXkpOwordm9pZCAqZ2l0X29pZG1hcF92YWx1ZV9hdChnaXRfb2lkbWFwICptYXAsIHNpemVfdCBpZHgpOwordm9pZCBnaXRfb2lkbWFwX3NldF92YWx1ZV9hdChnaXRfb2lkbWFwICptYXAsIHNpemVfdCBpZHgsIHZvaWQgKnZhbHVlKTsKK3ZvaWQgZ2l0X29pZG1hcF9kZWxldGVfYXQoZ2l0X29pZG1hcCAqbWFwLCBzaXplX3QgaWR4KTsKIAotI2RlZmluZSBnaXRfb2lkbWFwX2luc2VydChoLCBrZXksIHZhbCwgcnZhbCkgZG8geyBcCi0Ja2hpdGVyX3QgX19wb3MgPSBraF9wdXQob2lkLCBoLCBrZXksICZydmFsKTsgXAotCWlmIChydmFsID49IDApIHsgXAotCQlpZiAocnZhbCA9PSAwKSBraF9rZXkoaCwgX19wb3MpID0ga2V5OyBcCi0JCWtoX3ZhbChoLCBfX3BvcykgPSB2YWw7IFwKLQl9IH0gd2hpbGUgKDApCitpbnQgZ2l0X29pZG1hcF9wdXQoZ2l0X29pZG1hcCAqbWFwLCBjb25zdCBnaXRfb2lkICprZXksIGludCAqZXJyKTsKK3ZvaWQgZ2l0X29pZG1hcF9pbnNlcnQoZ2l0X29pZG1hcCAqbWFwLCBjb25zdCBnaXRfb2lkICprZXksIHZvaWQgKnZhbHVlLCBpbnQgKnJ2YWwpOwordm9pZCBnaXRfb2lkbWFwX2RlbGV0ZShnaXRfb2lkbWFwICptYXAsIGNvbnN0IGdpdF9vaWQgKmtleSk7CiAKICNkZWZpbmUgZ2l0X29pZG1hcF9mb3JlYWNoX3ZhbHVlIGtoX2ZvcmVhY2hfdmFsdWUKIAotI2RlZmluZSBnaXRfb2lkbWFwX3NpemUoaCkga2hfc2l6ZShoKQotCi0jZGVmaW5lIGdpdF9vaWRtYXBfY2xlYXIoaCkga2hfY2xlYXIob2lkLCBoKQorI2RlZmluZSBnaXRfb2lkbWFwX2JlZ2luCWtoX2JlZ2luCisjZGVmaW5lIGdpdF9vaWRtYXBfZW5kCQlraF9lbmQKIAogI2VuZGlmCmRpZmYgLS1naXQgYS9zcmMvb3BlbnNzbF9zdHJlYW0uYyBiL3NyYy9vcGVuc3NsX3N0cmVhbS5jCmluZGV4IGJiOWIzMmMuLjc1OWM1MDEgMTAwNjQ0Ci0tLSBhL3NyYy9vcGVuc3NsX3N0cmVhbS5jCisrKyBiL3NyYy9vcGVuc3NsX3N0cmVhbS5jCkBAIC0zNyw3ICszNyw3IEBACiAKICNkZWZpbmUgR0lUX1NTTF9ERUZBVUxUX0NJUEhFUlMgIkVDREhFLUVDRFNBLUFFUzEyOC1HQ00tU0hBMjU2OkVDREhFLVJTQS1BRVMxMjgtR0NNLVNIQTI1NjpFQ0RIRS1FQ0RTQS1BRVMyNTYtR0NNLVNIQTM4NDpFQ0RIRS1SU0EtQUVTMjU2LUdDTS1TSEEzODQ6REhFLVJTQS1BRVMxMjgtR0NNLVNIQTI1NjpESEUtRFNTLUFFUzEyOC1HQ00tU0hBMjU2OkRIRS1SU0EtQUVTMjU2LUdDTS1TSEEzODQ6REhFLURTUy1BRVMyNTYtR0NNLVNIQTM4NDpFQ0RIRS1FQ0RTQS1BRVMxMjgtU0hBMjU2OkVDREhFLVJTQS1BRVMxMjgtU0hBMjU2OkVDREhFLUVDRFNBLUFFUzEyOC1TSEE6RUNESEUtUlNBLUFFUzEyOC1TSEE6RUNESEUtRUNEU0EtQUVTMjU2LVNIQTM4NDpFQ0RIRS1SU0EtQUVTMjU2LVNIQTM4NDpFQ0RIRS1FQ0RTQS1BRVMyNTYtU0hBOkVDREhFLVJTQS1BRVMyNTYtU0hBOkRIRS1SU0EtQUVTMTI4LVNIQTI1NjpESEUtUlNBLUFFUzI1Ni1TSEEyNTY6REhFLVJTQS1BRVMxMjgtU0hBOkRIRS1SU0EtQUVTMjU2LVNIQTpESEUtRFNTLUFFUzEyOC1TSEEyNTY6REhFLURTUy1BRVMyNTYtU0hBMjU2OkRIRS1EU1MtQUVTMTI4LVNIQTpESEUtRFNTLUFFUzI1Ni1TSEE6QUVTMTI4LUdDTS1TSEEyNTY6QUVTMjU2LUdDTS1TSEEzODQ6QUVTMTI4LVNIQTI1NjpBRVMyNTYtU0hBMjU2OkFFUzEyOC1TSEE6QUVTMjU2LVNIQSIKIAotI2lmZGVmIEdJVF9USFJFQURTCisjaWYgZGVmaW5lZChHSVRfVEhSRUFEUykgJiYgT1BFTlNTTF9WRVJTSU9OX05VTUJFUiA8IDB4MTAxMDAwMDBMCiAKIHN0YXRpYyBnaXRfbXV0ZXggKm9wZW5zc2xfbG9ja3M7CiAKQEAgLTY2LDExICs2NiwxMSBAQAogCUNSWVBUT19zZXRfbG9ja2luZ19jYWxsYmFjayhOVUxMKTsKIAogCWZvciAoaSA9IDA7IGkgPCBudW1fbG9ja3M7ICsraSkKLQkJZ2l0X211dGV4X2ZyZWUob3BlbnNzbF9sb2Nrcyk7CisJCWdpdF9tdXRleF9mcmVlKCZvcGVuc3NsX2xvY2tzW2ldKTsKIAlnaXRfX2ZyZWUob3BlbnNzbF9sb2Nrcyk7CiB9CiAKLSNlbmRpZiAvKiBHSVRfVEhSRUFEUyAqLworI2VuZGlmIC8qIEdJVF9USFJFQURTICYmIE9QRU5TU0xfVkVSU0lPTl9OVU1CRVIgPCAweDEwMTAwMDAwTCAqLwogCiBzdGF0aWMgQklPX01FVEhPRCAqZ2l0X3N0cmVhbV9iaW9fbWV0aG9kOwogc3RhdGljIGludCBpbml0X2Jpb19tZXRob2Qodm9pZCk7CkBAIC0xMDMsOCArMTAzLDEzIEBACiAJc3NsX29wdHMgfD0gU1NMX09QX05PX0NPTVBSRVNTSU9OOwogI2VuZGlmCiAKKyNpZiBPUEVOU1NMX1ZFUlNJT05fTlVNQkVSIDwgMHgxMDEwMDAwMEwgfHwgZGVmaW5lZChMSUJSRVNTTF9WRVJTSU9OX05VTUJFUikKIAlTU0xfbG9hZF9lcnJvcl9zdHJpbmdzKCk7CiAJT3BlblNTTF9hZGRfc3NsX2FsZ29yaXRobXMoKTsKKyNlbHNlCisJT1BFTlNTTF9pbml0X3NzbCgwLCBOVUxMKTsKKyNlbmRpZgorCiAJLyoKIAkgKiBMb2FkIFNTTHZ7MiwzfSBhbmQgVExTdjEgc28gdGhhdCB3ZSBjYW4gdGFsayB3aXRoIHNlcnZlcnMKIAkgKiB3aGljaCB1c2UgdGhlIFNTTCBoZWxsb3MsIHdoaWNoIGFyZSBvZnRlbiB1c2VkIGZvcgpAQCAtMTQ2LDcgKzE1MSw3IEBACiAKIGludCBnaXRfb3BlbnNzbF9zZXRfbG9ja2luZyh2b2lkKQogewotI2lmZGVmIEdJVF9USFJFQURTCisjaWYgZGVmaW5lZChHSVRfVEhSRUFEUykgJiYgT1BFTlNTTF9WRVJTSU9OX05VTUJFUiA8IDB4MTAxMDAwMDBMCiAJaW50IG51bV9sb2NrcywgaTsKIAogCW51bV9sb2NrcyA9IENSWVBUT19udW1fbG9ja3MoKTsKQEAgLTE2Myw2ICsxNjgsOCBAQAogCUNSWVBUT19zZXRfbG9ja2luZ19jYWxsYmFjayhvcGVuc3NsX2xvY2tpbmdfZnVuY3Rpb24pOwogCWdpdF9fb25fc2h1dGRvd24oc2h1dGRvd25fc3NsX2xvY2tpbmcpOwogCXJldHVybiAwOworI2VsaWYgT1BFTlNTTF9WRVJTSU9OX05VTUJFUiA+PSAweDEwMTAwMDAwTAorCXJldHVybiAwOwogI2Vsc2UKIAlnaXRlcnJfc2V0KEdJVEVSUl9USFJFQUQsICJsaWJnaXQyIHdhcyBub3QgYnVpbHQgd2l0aCB0aHJlYWRzIik7CiAJcmV0dXJuIC0xOwpkaWZmIC0tZ2l0IGEvc3JjL3BhY2stb2JqZWN0cy5jIGIvc3JjL3BhY2stb2JqZWN0cy5jCmluZGV4IDJlNWRlOTguLmVmMjcyZTggMTAwNjQ0Ci0tLSBhL3NyYy9wYWNrLW9iamVjdHMuYworKysgYi9zcmMvcGFjay1vYmplY3RzLmMKQEAgLTQxLDggKzQxLDYgQEAKIAlnaXRfdHJhbnNmZXJfcHJvZ3Jlc3MgKnN0YXRzOwogfTsKIAotR0lUX19VU0VfT0lETUFQCi0KICNpZmRlZiBHSVRfVEhSRUFEUwogCiAjZGVmaW5lIEdJVF9QQUNLQlVJTERFUl9fTVVURVhfT1AocGIsIG10eCwgb3ApIGRvIHsgXApAQCAtMTk3LDEwICsxOTUsMTAgQEAKIAlzaXplX3QgaTsKIAlpbnQgcmV0OwogCi0Ja2hfY2xlYXIob2lkLCBwYi0+b2JqZWN0X2l4KTsKKwlnaXRfb2lkbWFwX2NsZWFyKHBiLT5vYmplY3RfaXgpOwogCWZvciAoaSA9IDAsIHBvID0gcGItPm9iamVjdF9saXN0OyBpIDwgcGItPm5yX29iamVjdHM7IGkrKywgcG8rKykgewotCQlwb3MgPSBraF9wdXQob2lkLCBwYi0+b2JqZWN0X2l4LCAmcG8tPmlkLCAmcmV0KTsKLQkJa2hfdmFsdWUocGItPm9iamVjdF9peCwgcG9zKSA9IHBvOworCQlwb3MgPSBnaXRfb2lkbWFwX3B1dChwYi0+b2JqZWN0X2l4LCAmcG8tPmlkLCAmcmV0KTsKKwkJZ2l0X29pZG1hcF9zZXRfdmFsdWVfYXQocGItPm9iamVjdF9peCwgcG9zLCBwbyk7CiAJfQogfQogCkBAIC0yMTYsOCArMjE0LDcgQEAKIAogCS8qIElmIHRoZSBvYmplY3QgYWxyZWFkeSBleGlzdHMgaW4gdGhlIGhhc2ggdGFibGUsIHRoZW4gd2UgZG9uJ3QKIAkgKiBoYXZlIGFueSB3b3JrIHRvIGRvICovCi0JcG9zID0ga2hfZ2V0KG9pZCwgcGItPm9iamVjdF9peCwgb2lkKTsKLQlpZiAocG9zICE9IGtoX2VuZChwYi0+b2JqZWN0X2l4KSkKKwlpZiAoZ2l0X29pZG1hcF9leGlzdHMocGItPm9iamVjdF9peCwgb2lkKSkKIAkJcmV0dXJuIDA7CiAKIAlpZiAocGItPm5yX29iamVjdHMgPj0gcGItPm5yX2FsbG9jKSB7CkBAIC0yNDcsMTMgKzI0NCwxMyBAQAogCWdpdF9vaWRfY3B5KCZwby0+aWQsIG9pZCk7CiAJcG8tPmhhc2ggPSBuYW1lX2hhc2gobmFtZSk7CiAKLQlwb3MgPSBraF9wdXQob2lkLCBwYi0+b2JqZWN0X2l4LCAmcG8tPmlkLCAmcmV0KTsKKwlwb3MgPSBnaXRfb2lkbWFwX3B1dChwYi0+b2JqZWN0X2l4LCAmcG8tPmlkLCAmcmV0KTsKIAlpZiAocmV0IDwgMCkgewogCQlnaXRlcnJfc2V0X29vbSgpOwogCQlyZXR1cm4gcmV0OwogCX0KIAlhc3NlcnQocmV0ICE9IDApOwotCWtoX3ZhbHVlKHBiLT5vYmplY3RfaXgsIHBvcykgPSBwbzsKKwlnaXRfb2lkbWFwX3NldF92YWx1ZV9hdChwYi0+b2JqZWN0X2l4LCBwb3MsIHBvKTsKIAogCXBiLT5kb25lID0gZmFsc2U7CiAKQEAgLTUxNywxMSArNTE0LDExIEBACiAKIAlHSVRfVU5VU0VEKG5hbWUpOwogCi0JcG9zID0ga2hfZ2V0KG9pZCwgcGItPm9iamVjdF9peCwgb2lkKTsKLQlpZiAocG9zID09IGtoX2VuZChwYi0+b2JqZWN0X2l4KSkKKwlwb3MgPSBnaXRfb2lkbWFwX2xvb2t1cF9pbmRleChwYi0+b2JqZWN0X2l4LCBvaWQpOworCWlmICghZ2l0X29pZG1hcF92YWxpZF9pbmRleChwYi0+b2JqZWN0X2l4LCBwb3MpKQogCQlyZXR1cm4gMDsKIAotCXBvID0ga2hfdmFsdWUocGItPm9iamVjdF9peCwgcG9zKTsKKwlwbyA9IGdpdF9vaWRtYXBfdmFsdWVfYXQocGItPm9iamVjdF9peCwgcG9zKTsKIAlwby0+dGFnZ2VkID0gMTsKIAogCS8qIFRPRE86IHBlZWwgb2JqZWN0cyAqLwpAQCAtMTM4OCw2ICsxMzg1LDcgQEAKIAlnaXRfaW5kZXhlciAqaW5kZXhlcjsKIAlnaXRfdHJhbnNmZXJfcHJvZ3Jlc3Mgc3RhdHM7CiAJc3RydWN0IHBhY2tfd3JpdGVfY29udGV4dCBjdHg7CisJaW50IHQ7CiAKIAlQUkVQQVJFX1BBQ0s7CiAKQEAgLTEzOTUsNiArMTM5Myw5IEBACiAJCSZpbmRleGVyLCBwYXRoLCBtb2RlLCBwYi0+b2RiLCBwcm9ncmVzc19jYiwgcHJvZ3Jlc3NfY2JfcGF5bG9hZCkgPCAwKQogCQlyZXR1cm4gLTE7CiAKKwlpZiAoIWdpdF9yZXBvc2l0b3J5X19jdmFyKCZ0LCBwYi0+cmVwbywgR0lUX0NWQVJfRlNZTkNPQkpFQ1RGSUxFUykgJiYgdCkKKwkJZ2l0X2luZGV4ZXJfX3NldF9mc3luYyhpbmRleGVyLCAxKTsKKwogCWN0eC5pbmRleGVyID0gaW5kZXhlcjsKIAljdHguc3RhdHMgPSAmc3RhdHM7CiAKQEAgLTE1NDEsNyArMTU0Miw3IEBACiAJCWlmICgoZXJyb3IgPSBsb29rdXBfd2Fsa19vYmplY3QoJm9iaiwgcGIsIGlkKSkgPCAwKQogCQkJcmV0dXJuIGVycm9yOwogCi0JCWdpdF9vaWRtYXBfaW5zZXJ0KHBiLT53YWxrX29iamVjdHMsICZvYmotPmlkLCBvYmosIGVycm9yKTsKKwkJZ2l0X29pZG1hcF9pbnNlcnQocGItPndhbGtfb2JqZWN0cywgJm9iai0+aWQsIG9iaiwgJmVycm9yKTsKIAl9CiAKIAkqb3V0ID0gb2JqOwpkaWZmIC0tZ2l0IGEvc3JjL3BhY2stb2JqZWN0cy5oIGIvc3JjL3BhY2stb2JqZWN0cy5oCmluZGV4IDVhODRmNDEuLmUxZTBlZTMgMTAwNjQ0Ci0tLSBhL3NyYy9wYWNrLW9iamVjdHMuaAorKysgYi9zcmMvcGFjay1vYmplY3RzLmgKQEAgLTE2LDYgKzE2LDcgQEAKICNpbmNsdWRlICJuZXRvcHMuaCIKICNpbmNsdWRlICJ6c3RyZWFtLmgiCiAjaW5jbHVkZSAicG9vbC5oIgorI2luY2x1ZGUgImluZGV4ZXIuaCIKIAogI2luY2x1ZGUgImdpdDIvb2lkLmgiCiAjaW5jbHVkZSAiZ2l0Mi9wYWNrLmgiCmRpZmYgLS1naXQgYS9zcmMvcGFjay5jIGIvc3JjL3BhY2suYwppbmRleCAyNDM3MTlkLi5mOGQwZGM5IDEwMDY0NAotLS0gYS9zcmMvcGFjay5jCisrKyBiL3NyYy9wYWNrLmMKQEAgLTE2LDkgKzE2LDYgQEAKIAogI2luY2x1ZGUgPHpsaWIuaD4KIAotR0lUX19VU0VfT0ZGTUFQCi1HSVRfX1VTRV9PSURNQVAKLQogc3RhdGljIGludCBwYWNrZmlsZV9vcGVuKHN0cnVjdCBnaXRfcGFja19maWxlICpwKTsKIHN0YXRpYyBnaXRfb2ZmX3QgbnRoX3BhY2tlZF9vYmplY3Rfb2Zmc2V0KGNvbnN0IHN0cnVjdCBnaXRfcGFja19maWxlICpwLCB1aW50MzJfdCBuKTsKIHN0YXRpYyBpbnQgcGFja2ZpbGVfdW5wYWNrX2NvbXByZXNzZWQoCkBAIC03OCwxMyArNzUsMTIgQEAKIAogc3RhdGljIHZvaWQgY2FjaGVfZnJlZShnaXRfcGFja19jYWNoZSAqY2FjaGUpCiB7Ci0Ja2hpdGVyX3QgazsKKwlnaXRfcGFja19jYWNoZV9lbnRyeSAqZW50cnk7CiAKIAlpZiAoY2FjaGUtPmVudHJpZXMpIHsKLQkJZm9yIChrID0ga2hfYmVnaW4oY2FjaGUtPmVudHJpZXMpOyBrICE9IGtoX2VuZChjYWNoZS0+ZW50cmllcyk7IGsrKykgewotCQkJaWYgKGtoX2V4aXN0KGNhY2hlLT5lbnRyaWVzLCBrKSkKLQkJCQlmcmVlX2NhY2hlX29iamVjdChraF92YWx1ZShjYWNoZS0+ZW50cmllcywgaykpOwotCQl9CisJCWdpdF9vZmZtYXBfZm9yZWFjaF92YWx1ZShjYWNoZS0+ZW50cmllcywgZW50cnksIHsKKwkJCWZyZWVfY2FjaGVfb2JqZWN0KGVudHJ5KTsKKwkJfSk7CiAKIAkJZ2l0X29mZm1hcF9mcmVlKGNhY2hlLT5lbnRyaWVzKTsKIAkJY2FjaGUtPmVudHJpZXMgPSBOVUxMOwpAQCAtMTE4LDkgKzExNCw5IEBACiAJaWYgKGdpdF9tdXRleF9sb2NrKCZjYWNoZS0+bG9jaykgPCAwKQogCQlyZXR1cm4gTlVMTDsKIAotCWsgPSBraF9nZXQob2ZmLCBjYWNoZS0+ZW50cmllcywgb2Zmc2V0KTsKLQlpZiAoayAhPSBraF9lbmQoY2FjaGUtPmVudHJpZXMpKSB7IC8qIGZvdW5kIGl0ICovCi0JCWVudHJ5ID0ga2hfdmFsdWUoY2FjaGUtPmVudHJpZXMsIGspOworCWsgPSBnaXRfb2ZmbWFwX2xvb2t1cF9pbmRleChjYWNoZS0+ZW50cmllcywgb2Zmc2V0KTsKKwlpZiAoZ2l0X29mZm1hcF92YWxpZF9pbmRleChjYWNoZS0+ZW50cmllcywgaykpIHsgLyogZm91bmQgaXQgKi8KKwkJZW50cnkgPSBnaXRfb2ZmbWFwX3ZhbHVlX2F0KGNhY2hlLT5lbnRyaWVzLCBrKTsKIAkJZ2l0X2F0b21pY19pbmMoJmVudHJ5LT5yZWZjb3VudCk7CiAJCWVudHJ5LT5sYXN0X3VzYWdlID0gY2FjaGUtPnVzZV9jdHIrKzsKIAl9CkBAIC0xMzIsMjEgKzEyOCwxNiBAQAogLyogUnVuIHdpdGggdGhlIGNhY2hlIGxvY2sgaGVsZCAqLwogc3RhdGljIHZvaWQgZnJlZV9sb3dlc3RfZW50cnkoZ2l0X3BhY2tfY2FjaGUgKmNhY2hlKQogeworCWdpdF9vZmZfdCBvZmZzZXQ7CiAJZ2l0X3BhY2tfY2FjaGVfZW50cnkgKmVudHJ5OwotCWtoaXRlcl90IGs7CiAKLQlmb3IgKGsgPSBraF9iZWdpbihjYWNoZS0+ZW50cmllcyk7IGsgIT0ga2hfZW5kKGNhY2hlLT5lbnRyaWVzKTsgaysrKSB7Ci0JCWlmICgha2hfZXhpc3QoY2FjaGUtPmVudHJpZXMsIGspKQotCQkJY29udGludWU7Ci0KLQkJZW50cnkgPSBraF92YWx1ZShjYWNoZS0+ZW50cmllcywgayk7Ci0KKwlnaXRfb2ZmbWFwX2ZvcmVhY2goY2FjaGUtPmVudHJpZXMsIG9mZnNldCwgZW50cnksIHsKIAkJaWYgKGVudHJ5ICYmIGVudHJ5LT5yZWZjb3VudC52YWwgPT0gMCkgewogCQkJY2FjaGUtPm1lbW9yeV91c2VkIC09IGVudHJ5LT5yYXcubGVuOwotCQkJa2hfZGVsKG9mZiwgY2FjaGUtPmVudHJpZXMsIGspOworCQkJZ2l0X29mZm1hcF9kZWxldGUoY2FjaGUtPmVudHJpZXMsIG9mZnNldCk7CiAJCQlmcmVlX2NhY2hlX29iamVjdChlbnRyeSk7CiAJCX0KLQl9CisJfSk7CiB9CiAKIHN0YXRpYyBpbnQgY2FjaGVfYWRkKApAQCAtMTcwLDE0ICsxNjEsMTQgQEAKIAkJCXJldHVybiAtMTsKIAkJfQogCQkvKiBBZGQgaXQgdG8gdGhlIGNhY2hlIGlmIG5vYm9keSBlbHNlIGhhcyAqLwotCQlleGlzdHMgPSBraF9nZXQob2ZmLCBjYWNoZS0+ZW50cmllcywgb2Zmc2V0KSAhPSBraF9lbmQoY2FjaGUtPmVudHJpZXMpOworCQlleGlzdHMgPSBnaXRfb2ZmbWFwX2V4aXN0cyhjYWNoZS0+ZW50cmllcywgb2Zmc2V0KTsKIAkJaWYgKCFleGlzdHMpIHsKIAkJCXdoaWxlIChjYWNoZS0+bWVtb3J5X3VzZWQgKyBiYXNlLT5sZW4gPiBjYWNoZS0+bWVtb3J5X2xpbWl0KQogCQkJCWZyZWVfbG93ZXN0X2VudHJ5KGNhY2hlKTsKIAotCQkJayA9IGtoX3B1dChvZmYsIGNhY2hlLT5lbnRyaWVzLCBvZmZzZXQsICZlcnJvcik7CisJCQlrID0gZ2l0X29mZm1hcF9wdXQoY2FjaGUtPmVudHJpZXMsIG9mZnNldCwgJmVycm9yKTsKIAkJCWFzc2VydChlcnJvciAhPSAwKTsKLQkJCWtoX3ZhbHVlKGNhY2hlLT5lbnRyaWVzLCBrKSA9IGVudHJ5OworCQkJZ2l0X29mZm1hcF9zZXRfdmFsdWVfYXQoY2FjaGUtPmVudHJpZXMsIGssIGVudHJ5KTsKIAkJCWNhY2hlLT5tZW1vcnlfdXNlZCArPSBlbnRyeS0+cmF3LmxlbjsKIAogCQkJKmNhY2hlZF9vdXQgPSBlbnRyeTsKQEAgLTMyMSw3ICszMTIsNyBAQAogewogCWludCBlcnJvciA9IDA7CiAJc2l6ZV90IG5hbWVfbGVuOwotCWdpdF9idWYgaWR4X25hbWUgPSBHSVRfQlVGX0lOSVQ7CisJZ2l0X2J1ZiBpZHhfbmFtZTsKIAogCWlmIChwLT5pbmRleF92ZXJzaW9uID4gLTEpCiAJCXJldHVybiAwOwpAQCAtMzI5LDExICszMjAsMTMgQEAKIAluYW1lX2xlbiA9IHN0cmxlbihwLT5wYWNrX25hbWUpOwogCWFzc2VydChuYW1lX2xlbiA+IHN0cmxlbigiLnBhY2siKSk7IC8qIGNoZWNrZWQgYnkgZ2l0X3BhY2tfZmlsZSBhbGxvYyAqLwogCi0JZ2l0X2J1Zl9ncm93KCZpZHhfbmFtZSwgbmFtZV9sZW4pOworCWlmIChnaXRfYnVmX2luaXQoJmlkeF9uYW1lLCBuYW1lX2xlbikgPCAwKQorCQlyZXR1cm4gLTE7CisKIAlnaXRfYnVmX3B1dCgmaWR4X25hbWUsIHAtPnBhY2tfbmFtZSwgbmFtZV9sZW4gLSBzdHJsZW4oIi5wYWNrIikpOwogCWdpdF9idWZfcHV0cygmaWR4X25hbWUsICIuaWR4Iik7CiAJaWYgKGdpdF9idWZfb29tKCZpZHhfbmFtZSkpIHsKLQkJZ2l0ZXJyX3NldF9vb20oKTsKKwkJZ2l0X2J1Zl9mcmVlKCZpZHhfbmFtZSk7CiAJCXJldHVybiAtMTsKIAl9CiAKQEAgLTk2MiwxMCArOTU1LDEwIEBACiAJCQlnaXRfb2lkIG9pZDsKIAogCQkJZ2l0X29pZF9mcm9tcmF3KCZvaWQsIGJhc2VfaW5mbyk7Ci0JCQlrID0ga2hfZ2V0KG9pZCwgcC0+aWR4X2NhY2hlLCAmb2lkKTsKLQkJCWlmIChrICE9IGtoX2VuZChwLT5pZHhfY2FjaGUpKSB7CisJCQlrID0gZ2l0X29pZG1hcF9sb29rdXBfaW5kZXgocC0+aWR4X2NhY2hlLCAmb2lkKTsKKwkJCWlmIChnaXRfb2lkbWFwX3ZhbGlkX2luZGV4KHAtPmlkeF9jYWNoZSwgaykpIHsKIAkJCQkqY3VycG9zICs9IDIwOwotCQkJCXJldHVybiAoKHN0cnVjdCBnaXRfcGFja19lbnRyeSAqKWtoX3ZhbHVlKHAtPmlkeF9jYWNoZSwgaykpLT5vZmZzZXQ7CisJCQkJcmV0dXJuICgoc3RydWN0IGdpdF9wYWNrX2VudHJ5ICopZ2l0X29pZG1hcF92YWx1ZV9hdChwLT5pZHhfY2FjaGUsIGspKS0+b2Zmc2V0OwogCQkJfSBlbHNlIHsKIAkJCQkvKiBJZiB3ZSdyZSBidWlsZGluZyBhbiBpbmRleCwgZG9uJ3QgdHJ5IHRvIGZpbmQgdGhlIHBhY2sKIAkJCQkgKiBlbnRyeTsgd2UganVzdCBoYXZlbid0IHNlZW4gaXQgeWV0LiAgV2UnbGwgbWFrZQpkaWZmIC0tZ2l0IGEvc3JjL3BhdGNoX2dlbmVyYXRlLmMgYi9zcmMvcGF0Y2hfZ2VuZXJhdGUuYwppbmRleCBhYjY4ZjU4Li44MDRmYzBlIDEwMDY0NAotLS0gYS9zcmMvcGF0Y2hfZ2VuZXJhdGUuYworKysgYi9zcmMvcGF0Y2hfZ2VuZXJhdGUuYwpAQCAtMjA2LDM1ICsyMDYsMTQgQEAKIAkJICgocGF0Y2gtPm5maWxlLmZsYWdzICYgR0lUX0RJRkZfRkxBR19fTk9fREFUQSkgIT0gMCB8fAogCQkgIChwYXRjaC0+bmZpbGUuZmlsZS0+ZmxhZ3MgJiBHSVRfRElGRl9GTEFHX1ZBTElEX0lEKSAhPSAwKSk7CiAKLQkvKiBhbHdheXMgdHJ5IHRvIGxvYWQgd29ya2RpciBjb250ZW50IGZpcnN0IGJlY2F1c2UgZmlsdGVyaW5nIG1heQotCSAqIG5lZWQgMnggZGF0YSBzaXplIGFuZCB0aGlzIG1pbmltaXplcyBwZWFrIG1lbW9yeSBmb290cHJpbnQKLQkgKi8KLQlpZiAocGF0Y2gtPm9maWxlLnNyYyA9PSBHSVRfSVRFUkFUT1JfVFlQRV9XT1JLRElSKSB7Ci0JCWlmICgoZXJyb3IgPSBnaXRfZGlmZl9maWxlX2NvbnRlbnRfX2xvYWQoCi0JCQkJJnBhdGNoLT5vZmlsZSwgJnBhdGNoLT5iYXNlLmRpZmZfb3B0cykpIDwgMCB8fAotCQkJc2hvdWxkX3NraXBfYmluYXJ5KHBhdGNoLCBwYXRjaC0+b2ZpbGUuZmlsZSkpCi0JCQlnb3RvIGNsZWFudXA7Ci0JfQotCWlmIChwYXRjaC0+bmZpbGUuc3JjID09IEdJVF9JVEVSQVRPUl9UWVBFX1dPUktESVIpIHsKLQkJaWYgKChlcnJvciA9IGdpdF9kaWZmX2ZpbGVfY29udGVudF9fbG9hZCgKLQkJCQkmcGF0Y2gtPm5maWxlLCAmcGF0Y2gtPmJhc2UuZGlmZl9vcHRzKSkgPCAwIHx8Ci0JCQlzaG91bGRfc2tpcF9iaW5hcnkocGF0Y2gsIHBhdGNoLT5uZmlsZS5maWxlKSkKLQkJCWdvdG8gY2xlYW51cDsKLQl9Ci0KLQkvKiBvbmNlIHdvcmtkaXIgaGFzIGJlZW4gdHJpZWQsIGxvYWQgb3RoZXIgZGF0YSBhcyBuZWVkZWQgKi8KLQlpZiAocGF0Y2gtPm9maWxlLnNyYyAhPSBHSVRfSVRFUkFUT1JfVFlQRV9XT1JLRElSKSB7Ci0JCWlmICgoZXJyb3IgPSBnaXRfZGlmZl9maWxlX2NvbnRlbnRfX2xvYWQoCi0JCQkJJnBhdGNoLT5vZmlsZSwgJnBhdGNoLT5iYXNlLmRpZmZfb3B0cykpIDwgMCB8fAotCQkJc2hvdWxkX3NraXBfYmluYXJ5KHBhdGNoLCBwYXRjaC0+b2ZpbGUuZmlsZSkpCi0JCQlnb3RvIGNsZWFudXA7Ci0JfQotCWlmIChwYXRjaC0+bmZpbGUuc3JjICE9IEdJVF9JVEVSQVRPUl9UWVBFX1dPUktESVIpIHsKLQkJaWYgKChlcnJvciA9IGdpdF9kaWZmX2ZpbGVfY29udGVudF9fbG9hZCgKLQkJCQkmcGF0Y2gtPm5maWxlLCAmcGF0Y2gtPmJhc2UuZGlmZl9vcHRzKSkgPCAwIHx8Ci0JCQlzaG91bGRfc2tpcF9iaW5hcnkocGF0Y2gsIHBhdGNoLT5uZmlsZS5maWxlKSkKLQkJCWdvdG8gY2xlYW51cDsKLQl9CisJaWYgKChlcnJvciA9IGdpdF9kaWZmX2ZpbGVfY29udGVudF9fbG9hZCgKKwkJCSZwYXRjaC0+b2ZpbGUsICZwYXRjaC0+YmFzZS5kaWZmX29wdHMpKSA8IDAgfHwKKwkJc2hvdWxkX3NraXBfYmluYXJ5KHBhdGNoLCBwYXRjaC0+b2ZpbGUuZmlsZSkpCisJCWdvdG8gY2xlYW51cDsKKwlpZiAoKGVycm9yID0gZ2l0X2RpZmZfZmlsZV9jb250ZW50X19sb2FkKAorCQkJJnBhdGNoLT5uZmlsZSwgJnBhdGNoLT5iYXNlLmRpZmZfb3B0cykpIDwgMCB8fAorCQlzaG91bGRfc2tpcF9iaW5hcnkocGF0Y2gsIHBhdGNoLT5uZmlsZS5maWxlKSkKKwkJZ290byBjbGVhbnVwOwogCiAJLyogaWYgcHJldmlvdXNseSBtaXNzaW5nIGFuIG9pZCwgYW5kIG5vdyB0aGF0IHdlIGhhdmUgaXQgdGhlIHR3byBzaWRlcwogCSAqIGFyZSB0aGUgc2FtZSAoYW5kIG5vdCBzdWJtb2R1bGVzKSwgdXBkYXRlIE1PRElGSUVEIC0+IFVOTU9ESUZJRUQKQEAgLTQyMSw1NiArNDAwLDYgQEAKIAlyZXR1cm4gLTE7CiB9CiAKLWludCBnaXRfZGlmZl9mb3JlYWNoKAotCWdpdF9kaWZmICpkaWZmLAotCWdpdF9kaWZmX2ZpbGVfY2IgZmlsZV9jYiwKLQlnaXRfZGlmZl9iaW5hcnlfY2IgYmluYXJ5X2NiLAotCWdpdF9kaWZmX2h1bmtfY2IgaHVua19jYiwKLQlnaXRfZGlmZl9saW5lX2NiIGRhdGFfY2IsCi0Jdm9pZCAqcGF5bG9hZCkKLXsKLQlpbnQgZXJyb3IgPSAwOwotCWdpdF94ZGlmZl9vdXRwdXQgeG87Ci0Jc2l6ZV90IGlkeDsKLQlnaXRfcGF0Y2hfZ2VuZXJhdGVkIHBhdGNoOwotCi0JaWYgKChlcnJvciA9IGRpZmZfcmVxdWlyZWQoZGlmZiwgImdpdF9kaWZmX2ZvcmVhY2giKSkgPCAwKQotCQlyZXR1cm4gZXJyb3I7Ci0KLQltZW1zZXQoJnhvLCAwLCBzaXplb2YoeG8pKTsKLQltZW1zZXQoJnBhdGNoLCAwLCBzaXplb2YocGF0Y2gpKTsKLQlkaWZmX291dHB1dF9pbml0KAotCQkmeG8ub3V0cHV0LCAmZGlmZi0+b3B0cywgZmlsZV9jYiwgYmluYXJ5X2NiLCBodW5rX2NiLCBkYXRhX2NiLCBwYXlsb2FkKTsKLQlnaXRfeGRpZmZfaW5pdCgmeG8sICZkaWZmLT5vcHRzKTsKLQotCWdpdF92ZWN0b3JfZm9yZWFjaCgmZGlmZi0+ZGVsdGFzLCBpZHgsIHBhdGNoLmJhc2UuZGVsdGEpIHsKLQotCQkvKiBjaGVjayBmbGFncyBhZ2FpbnN0IHBhdGNoIHN0YXR1cyAqLwotCQlpZiAoZ2l0X2RpZmZfZGVsdGFfX3Nob3VsZF9za2lwKCZkaWZmLT5vcHRzLCBwYXRjaC5iYXNlLmRlbHRhKSkKLQkJCWNvbnRpbnVlOwotCi0JCWlmIChiaW5hcnlfY2IgfHwgaHVua19jYiB8fCBkYXRhX2NiKSB7Ci0JCQlpZiAoKGVycm9yID0gcGF0Y2hfZ2VuZXJhdGVkX2luaXQoJnBhdGNoLCBkaWZmLCBpZHgpKSAhPSAwIHx8Ci0JCQkJKGVycm9yID0gcGF0Y2hfZ2VuZXJhdGVkX2xvYWQoJnBhdGNoLCAmeG8ub3V0cHV0KSkgIT0gMCkgewotCQkJCWdpdF9wYXRjaF9mcmVlKCZwYXRjaC5iYXNlKTsKLQkJCQlyZXR1cm4gZXJyb3I7Ci0JCQl9Ci0JCX0KLQotCQlpZiAoKGVycm9yID0gcGF0Y2hfZ2VuZXJhdGVkX2ludm9rZV9maWxlX2NhbGxiYWNrKCZwYXRjaCwgJnhvLm91dHB1dCkpID09IDApIHsKLQkJCWlmIChiaW5hcnlfY2IgfHwgaHVua19jYiB8fCBkYXRhX2NiKQotCQkJCQllcnJvciA9IHBhdGNoX2dlbmVyYXRlZF9jcmVhdGUoJnBhdGNoLCAmeG8ub3V0cHV0KTsKLQkJfQotCi0JCWdpdF9wYXRjaF9mcmVlKCZwYXRjaC5iYXNlKTsKLQotCQlpZiAoZXJyb3IpCi0JCQlicmVhazsKLQl9Ci0KLQlyZXR1cm4gZXJyb3I7Ci19Ci0KIHR5cGVkZWYgc3RydWN0IHsKIAlnaXRfcGF0Y2hfZ2VuZXJhdGVkIHBhdGNoOwogCWdpdF9kaWZmX2RlbHRhIGRlbHRhOwpkaWZmIC0tZ2l0IGEvc3JjL3BhdGNoX3BhcnNlLmMgYi9zcmMvcGF0Y2hfcGFyc2UuYwppbmRleCBmNTI3NTk0Li4wYTllZGNkIDEwMDY0NAotLS0gYS9zcmMvcGF0Y2hfcGFyc2UuYworKysgYi9zcmMvcGF0Y2hfcGFyc2UuYwpAQCAtNDQ0LDkgKzQ0NCw5IEBACiAJCQkJZ290byBkb25lOwogCiAJCQlwYXJzZV9hZHZhbmNlX3dzKGN0eCk7Ci0JCQlwYXJzZV9hZHZhbmNlX2V4cGVjdGVkX3N0cihjdHgsICJcbiIpOwogCi0JCQlpZiAoY3R4LT5saW5lX2xlbiA+IDApIHsKKwkJCWlmIChwYXJzZV9hZHZhbmNlX2V4cGVjdGVkX3N0cihjdHgsICJcbiIpIDwgMCB8fAorCQkJICAgIGN0eC0+bGluZV9sZW4gPiAwKSB7CiAJCQkJZXJyb3IgPSBwYXJzZV9lcnIoInRyYWlsaW5nIGRhdGEgYXQgbGluZSAlIlBSSXVaLCBjdHgtPmxpbmVfbnVtKTsKIAkJCQlnb3RvIGRvbmU7CiAJCQl9CkBAIC01NjIsOCArNTYyLDkgQEAKIAlpbnQgbmV3bGluZXMgPSBodW5rLT5odW5rLm5ld19saW5lczsKIAogCWZvciAoOwotCQljdHgtPnJlbWFpbl9sZW4gPiA0ICYmIChvbGRsaW5lcyB8fCBuZXdsaW5lcykgJiYKLQkJbWVtY21wKGN0eC0+bGluZSwgIkBAIC0iLCA0KSAhPSAwOworCQljdHgtPnJlbWFpbl9sZW4gPiAxICYmCisJCShvbGRsaW5lcyB8fCBuZXdsaW5lcykgJiYKKwkJKGN0eC0+cmVtYWluX2xlbiA8PSA0IHx8IG1lbWNtcChjdHgtPmxpbmUsICJAQCAtIiwgNCkgIT0gMCk7CiAJCXBhcnNlX2FkdmFuY2VfbGluZShjdHgpKSB7CiAKIAkJaW50IG9yaWdpbjsKZGlmZiAtLWdpdCBhL3NyYy9wYXRoLmMgYi9zcmMvcGF0aC5jCmluZGV4IGJmZmRlOTMuLjVmYzdhMDUgMTAwNjQ0Ci0tLSBhL3NyYy9wYXRoLmMKKysrIGIvc3JjL3BhdGguYwpAQCAtMTExLDEzICsxMTEsNDEgQEAKIH0KIAogLyoKKyAqIERldGVybWluZSBpZiB0aGUgcGF0aCBpcyBhIFdpbmRvd3MgcHJlZml4IGFuZCwgaWYgc28sIHJldHVybnMKKyAqIGl0cyBhY3R1YWwgbGVudGdoLiBJZiBpdCBpcyBub3QgYSBwcmVmaXgsIHJldHVybnMgLTEuCisgKi8KK3N0YXRpYyBpbnQgd2luMzJfcHJlZml4X2xlbmd0aChjb25zdCBjaGFyICpwYXRoLCBpbnQgbGVuKQoreworI2lmbmRlZiBHSVRfV0lOMzIKKwlHSVRfVU5VU0VEKHBhdGgpOworCUdJVF9VTlVTRUQobGVuKTsKKyNlbHNlCisJLyoKKwkgKiBNaW1pYyB1bml4IGJlaGF2aW9yIHdoZXJlICcvLmdpdCcgcmV0dXJucyAnLyc6ICdDOi8uZ2l0JyB3aWxsIHJldHVybgorCSAqICdDOi8nIGhlcmUKKwkgKi8KKwlpZiAobGVuID09IDIgJiYgTE9PS1NfTElLRV9EUklWRV9QUkVGSVgocGF0aCkpCisJCXJldHVybiAyOworCisJLyoKKwkgKiBTaW1pbGFybHkgY2hlY2tzIGlmIHdlJ3JlIGRlYWxpbmcgd2l0aCBhIG5ldHdvcmsgY29tcHV0ZXIgbmFtZQorCSAqICcvL2NvbXB1dGVybmFtZS8uZ2l0JyB3aWxsIHJldHVybiAnLy9jb21wdXRlcm5hbWUvJworCSAqLworCWlmIChsb29rc19saWtlX25ldHdvcmtfY29tcHV0ZXJfbmFtZShwYXRoLCBsZW4pKQorCQlyZXR1cm4gbGVuOworI2VuZGlmCisKKwlyZXR1cm4gLTE7Cit9CisKKy8qCiAgKiBCYXNlZCBvbiB0aGUgQW5kcm9pZCBpbXBsZW1lbnRhdGlvbiwgQlNEIGxpY2Vuc2VkLgogICogQ2hlY2sgaHR0cDovL2FuZHJvaWQuZ2l0Lmtlcm5lbC5vcmcvCiAgKi8KIGludCBnaXRfcGF0aF9kaXJuYW1lX3IoZ2l0X2J1ZiAqYnVmZmVyLCBjb25zdCBjaGFyICpwYXRoKQogewogCWNvbnN0IGNoYXIgKmVuZHA7Ci0JaW50IHJlc3VsdCwgbGVuOworCWludCBpc19wcmVmaXggPSAwLCBsZW47CiAKIAkvKiBFbXB0eSBvciBOVUxMIHN0cmluZyBnZXRzIHRyZWF0ZWQgYXMgIi4iICovCiAJaWYgKHBhdGggPT0gTlVMTCB8fCAqcGF0aCA9PSAnXDAnKSB7CkBAIC0xMzEsNiArMTU5LDExIEBACiAJd2hpbGUgKGVuZHAgPiBwYXRoICYmICplbmRwID09ICcvJykKIAkJZW5kcC0tOwogCisJaWYgKChsZW4gPSB3aW4zMl9wcmVmaXhfbGVuZ3RoKHBhdGgsIGVuZHAgLSBwYXRoICsgMSkpID4gMCkgeworCQlpc19wcmVmaXggPSAxOworCQlnb3RvIEV4aXQ7CisJfQorCiAJLyogRmluZCB0aGUgc3RhcnQgb2YgdGhlIGRpciAqLwogCXdoaWxlIChlbmRwID4gcGF0aCAmJiAqZW5kcCAhPSAnLycpCiAJCWVuZHAtLTsKQEAgLTE0NiwzNSArMTc5LDIzIEBACiAJCWVuZHAtLTsKIAl9IHdoaWxlIChlbmRwID4gcGF0aCAmJiAqZW5kcCA9PSAnLycpOwogCisJaWYgKChsZW4gPSB3aW4zMl9wcmVmaXhfbGVuZ3RoKHBhdGgsIGVuZHAgLSBwYXRoICsgMSkpID4gMCkgeworCQlpc19wcmVmaXggPSAxOworCQlnb3RvIEV4aXQ7CisJfQorCiAJLyogQ2FzdCBpcyBzYWZlIGJlY2F1c2UgbWF4IHBhdGggPCBtYXggaW50ICovCiAJbGVuID0gKGludCkoZW5kcCAtIHBhdGggKyAxKTsKIAotI2lmZGVmIEdJVF9XSU4zMgotCS8qIE1pbWljIHVuaXggYmVoYXZpb3Igd2hlcmUgJy8uZ2l0JyByZXR1cm5zICcvJzogJ0M6Ly5naXQnIHdpbGwgcmV0dXJuCi0JCSdDOi8nIGhlcmUgKi8KLQotCWlmIChsZW4gPT0gMiAmJiBMT09LU19MSUtFX0RSSVZFX1BSRUZJWChwYXRoKSkgewotCQlsZW4gPSAzOwotCQlnb3RvIEV4aXQ7Ci0JfQotCi0JLyogU2ltaWxhcmx5IGNoZWNrcyBpZiB3ZSdyZSBkZWFsaW5nIHdpdGggYSBuZXR3b3JrIGNvbXB1dGVyIG5hbWUKLQkJJy8vY29tcHV0ZXJuYW1lLy5naXQnIHdpbGwgcmV0dXJuICcvL2NvbXB1dGVybmFtZS8nICovCi0KLQlpZiAobG9va3NfbGlrZV9uZXR3b3JrX2NvbXB1dGVyX25hbWUocGF0aCwgbGVuKSkgewotCQlsZW4rKzsKLQkJZ290byBFeGl0OwotCX0KLQotI2VuZGlmCi0KIEV4aXQ6Ci0JcmVzdWx0ID0gbGVuOworCWlmIChidWZmZXIpIHsKKwkJaWYgKGdpdF9idWZfc2V0KGJ1ZmZlciwgcGF0aCwgbGVuKSA8IDApCisJCQlyZXR1cm4gLTE7CisJCWlmIChpc19wcmVmaXggJiYgZ2l0X2J1Zl9wdXRjKGJ1ZmZlciwgJy8nKSA8IDApCisJCQlyZXR1cm4gLTE7CisJfQogCi0JaWYgKGJ1ZmZlciAhPSBOVUxMICYmIGdpdF9idWZfc2V0KGJ1ZmZlciwgcGF0aCwgbGVuKSA8IDApCi0JCXJldHVybiAtMTsKLQotCXJldHVybiByZXN1bHQ7CisJcmV0dXJuIGxlbjsKIH0KIAogCkBAIC02NzksNyArNzAwLDggQEAKIAkJcmV0dXJuIGZhbHNlOwogCiAJLyogc2F2ZSBleGN1cnNpb24gKi8KLQlnaXRfYnVmX2pvaW5wYXRoKGRpciwgZGlyLT5wdHIsIHN1Yik7CisJaWYgKGdpdF9idWZfam9pbnBhdGgoZGlyLCBkaXItPnB0ciwgc3ViKSA8IDApCisJCXJldHVybiBmYWxzZTsKIAogCXJlc3VsdCA9IHByZWRpY2F0ZShkaXItPnB0cik7CiAKQEAgLTgwNCw4ICs4MjYsOCBAQAogCiBpbnQgZ2l0X3BhdGhfYXBwbHlfcmVsYXRpdmUoZ2l0X2J1ZiAqdGFyZ2V0LCBjb25zdCBjaGFyICpyZWxwYXRoKQogewotCWdpdF9idWZfam9pbnBhdGgodGFyZ2V0LCBnaXRfYnVmX2NzdHIodGFyZ2V0KSwgcmVscGF0aCk7Ci0JcmV0dXJuIGdpdF9wYXRoX3Jlc29sdmVfcmVsYXRpdmUodGFyZ2V0LCAwKTsKKwlyZXR1cm4gZ2l0X2J1Zl9qb2lucGF0aCh0YXJnZXQsIGdpdF9idWZfY3N0cih0YXJnZXQpLCByZWxwYXRoKSB8fAorCSAgICBnaXRfcGF0aF9yZXNvbHZlX3JlbGF0aXZlKHRhcmdldCwgMCk7CiB9CiAKIGludCBnaXRfcGF0aF9jbXAoCkBAIC0xNjg2LDYgKzE3MDgsNyBAQAogCXVuc2lnbmVkIGludCBmbGFncykKIHsKIAlpbnQgcHJvdGVjdEhGUyA9IDAsIHByb3RlY3ROVEZTID0gMDsKKwlpbnQgZXJyb3IgPSAwOwogCiAJZmxhZ3MgfD0gR0lUX1BBVEhfUkVKRUNUX0RPVF9HSVRfTElURVJBTDsKIApAQCAtMTY5OCwxMyArMTcyMSwxMyBAQAogI2VuZGlmCiAKIAlpZiAocmVwbyAmJiAhcHJvdGVjdEhGUykKLQkJZ2l0X3JlcG9zaXRvcnlfX2N2YXIoJnByb3RlY3RIRlMsIHJlcG8sIEdJVF9DVkFSX1BST1RFQ1RIRlMpOwotCWlmIChwcm90ZWN0SEZTKQorCQllcnJvciA9IGdpdF9yZXBvc2l0b3J5X19jdmFyKCZwcm90ZWN0SEZTLCByZXBvLCBHSVRfQ1ZBUl9QUk9URUNUSEZTKTsKKwlpZiAoIWVycm9yICYmIHByb3RlY3RIRlMpCiAJCWZsYWdzIHw9IEdJVF9QQVRIX1JFSkVDVF9ET1RfR0lUX0hGUzsKIAogCWlmIChyZXBvICYmICFwcm90ZWN0TlRGUykKLQkJZ2l0X3JlcG9zaXRvcnlfX2N2YXIoJnByb3RlY3ROVEZTLCByZXBvLCBHSVRfQ1ZBUl9QUk9URUNUTlRGUyk7Ci0JaWYgKHByb3RlY3ROVEZTKQorCQllcnJvciA9IGdpdF9yZXBvc2l0b3J5X19jdmFyKCZwcm90ZWN0TlRGUywgcmVwbywgR0lUX0NWQVJfUFJPVEVDVE5URlMpOworCWlmICghZXJyb3IgJiYgcHJvdGVjdE5URlMpCiAJCWZsYWdzIHw9IEdJVF9QQVRIX1JFSkVDVF9ET1RfR0lUX05URlM7CiAKIAlyZXR1cm4gZmxhZ3M7CmRpZmYgLS1naXQgYS9zcmMvcG9zaXguYyBiL3NyYy9wb3NpeC5jCmluZGV4IGU2OGYzMjQuLjk0ZGViNmEgMTAwNjQ0Ci0tLSBhL3NyYy9wb3NpeC5jCisrKyBiL3NyYy9wb3NpeC5jCkBAIC0xMCw2ICsxMCw4IEBACiAjaW5jbHVkZSA8c3RkaW8uaD4KICNpbmNsdWRlIDxjdHlwZS5oPgogCitzaXplX3QgcF9mc3luY19fY250ID0gMDsKKwogI2lmbmRlZiBHSVRfV0lOMzIKIAogI2lmZGVmIE5PX0FERFJJTkZPCmRpZmYgLS1naXQgYS9zcmMvcG9zaXguaCBiL3NyYy9wb3NpeC5oCmluZGV4IGYyMDQ3NTEuLmQyNjM3MWIgMTAwNjQ0Ci0tLSBhL3NyYy9wb3NpeC5oCisrKyBiL3NyYy9wb3NpeC5oCkBAIC0yNCw2ICsyNCwxMCBAQAogI2RlZmluZSBfU19JRkxOSyBTX0lGTE5LCiAjZW5kaWYKIAorI2lmbmRlZiBTX0lXVVNSCisjZGVmaW5lIFNfSVdVU1IgMDAyMDAKKyNlbmRpZgorCiAjaWZuZGVmIFNfSVhVU1IKICNkZWZpbmUgU19JWFVTUiAwMDEwMAogI2VuZGlmCkBAIC0xMTEsNiArMTE1LDEyIEBACiBleHRlcm4gaW50IGdpdF9fcGFnZV9zaXplKHNpemVfdCAqcGFnZV9zaXplKTsKIGV4dGVybiBpbnQgZ2l0X19tbWFwX2FsaWdubWVudChzaXplX3QgKnBhZ2Vfc2l6ZSk7CiAKKy8qIFRoZSBudW1iZXIgb2YgdGltZXMgYHBfZnN5bmNgIGhhcyBiZWVuIGNhbGxlZC4gIE5vdGUgdGhhdCB0aGlzIGlzIGZvcgorICogdGVzdCBjb2RlIG9ubHk7IGl0IGl0IG5vdCBuZWNlc3NhcmlseSB0aHJlYWQtc2FmZSBhbmQgc2hvdWxkIG5vdCBiZQorICogcmVsaWVkIHVwb24gaW4gcHJvZHVjdGlvbi4KKyAqLworZXh0ZXJuIHNpemVfdCBwX2ZzeW5jX19jbnQ7CisKIC8qKgogICogUGxhdGZvcm0tZGVwZW5kZW50IG1ldGhvZHMKICAqLwpkaWZmIC0tZ2l0IGEvc3JjL3JlYmFzZS5jIGIvc3JjL3JlYmFzZS5jCmluZGV4IGIyMDI0YTQuLmY1MjgwMzEgMTAwNjQ0Ci0tLSBhL3NyYy9yZWJhc2UuYworKysgYi9zcmMvcmViYXNlLmMKQEAgLTkyLDcgKzkyLDcgQEAKIAlnaXRfYnVmIHBhdGggPSBHSVRfQlVGX0lOSVQ7CiAJZ2l0X3JlYmFzZV90eXBlX3QgdHlwZSA9IEdJVF9SRUJBU0VfVFlQRV9OT05FOwogCi0JaWYgKGdpdF9idWZfam9pbnBhdGgoJnBhdGgsIHJlcG8tPnBhdGhfcmVwb3NpdG9yeSwgUkVCQVNFX0FQUExZX0RJUikgPCAwKQorCWlmIChnaXRfYnVmX2pvaW5wYXRoKCZwYXRoLCByZXBvLT5naXRkaXIsIFJFQkFTRV9BUFBMWV9ESVIpIDwgMCkKIAkJcmV0dXJuIC0xOwogCiAJaWYgKGdpdF9wYXRoX2lzZGlyKGdpdF9idWZfY3N0cigmcGF0aCkpKSB7CkBAIC0xMDEsNyArMTAxLDcgQEAKIAl9CiAKIAlnaXRfYnVmX2NsZWFyKCZwYXRoKTsKLQlpZiAoZ2l0X2J1Zl9qb2lucGF0aCgmcGF0aCwgcmVwby0+cGF0aF9yZXBvc2l0b3J5LCBSRUJBU0VfTUVSR0VfRElSKSA8IDApCisJaWYgKGdpdF9idWZfam9pbnBhdGgoJnBhdGgsIHJlcG8tPmdpdGRpciwgUkVCQVNFX01FUkdFX0RJUikgPCAwKQogCQlyZXR1cm4gLTE7CiAKIAlpZiAoZ2l0X3BhdGhfaXNkaXIoZ2l0X2J1Zl9jc3RyKCZwYXRoKSkpIHsKQEAgLTQ0Nyw4ICs0NDcsOCBAQAogCXNpemVfdCBpOwogCWludCBlcnJvciA9IDA7CiAKLQlpZiAoKGVycm9yID0gcmViYXNlX3NldHVwZmlsZShyZWJhc2UsIEVORF9GSUxFLCAtMSwgIiUiIFBSSXVaICJcbiIsIGdpdF9hcnJheV9zaXplKHJlYmFzZS0+b3BlcmF0aW9ucykpKSA8IDAgfHwKLQkJKGVycm9yID0gcmViYXNlX3NldHVwZmlsZShyZWJhc2UsIE9OVE9fTkFNRV9GSUxFLCAtMSwgIiVzXG4iLCByZWJhc2UtPm9udG9fbmFtZSkpIDwgMCkKKwlpZiAoKGVycm9yID0gcmViYXNlX3NldHVwZmlsZShyZWJhc2UsIEVORF9GSUxFLCAwLCAiJSIgUFJJdVogIlxuIiwgZ2l0X2FycmF5X3NpemUocmViYXNlLT5vcGVyYXRpb25zKSkpIDwgMCB8fAorCQkoZXJyb3IgPSByZWJhc2Vfc2V0dXBmaWxlKHJlYmFzZSwgT05UT19OQU1FX0ZJTEUsIDAsICIlc1xuIiwgcmViYXNlLT5vbnRvX25hbWUpKSA8IDApCiAJCWdvdG8gZG9uZTsKIAogCWZvciAoaSA9IDA7IGkgPCBnaXRfYXJyYXlfc2l6ZShyZWJhc2UtPm9wZXJhdGlvbnMpOyBpKyspIHsKQEAgLTQ1OSw3ICs0NTksNyBAQAogCiAJCWdpdF9vaWRfZm10KGlkX3N0ciwgJm9wZXJhdGlvbi0+aWQpOwogCi0JCWlmICgoZXJyb3IgPSByZWJhc2Vfc2V0dXBmaWxlKHJlYmFzZSwgY29tbWl0X2ZpbGVuYW1lLnB0ciwgLTEsCisJCWlmICgoZXJyb3IgPSByZWJhc2Vfc2V0dXBmaWxlKHJlYmFzZSwgY29tbWl0X2ZpbGVuYW1lLnB0ciwgMCwKIAkJCQkiJS4qc1xuIiwgR0lUX09JRF9IRVhTWiwgaWRfc3RyKSkgPCAwKQogCQkJZ290byBkb25lOwogCX0KQEAgLTQ4NiwxMCArNDg2LDEwIEBACiAJCXJlYmFzZS0+b3JpZ19oZWFkX25hbWU7CiAKIAlpZiAoZ2l0X3JlcG9zaXRvcnlfX3NldF9vcmlnX2hlYWQocmViYXNlLT5yZXBvLCAmcmViYXNlLT5vcmlnX2hlYWRfaWQpIDwgMCB8fAotCQlyZWJhc2Vfc2V0dXBmaWxlKHJlYmFzZSwgSEVBRF9OQU1FX0ZJTEUsIC0xLCAiJXNcbiIsIG9yaWdfaGVhZF9uYW1lKSA8IDAgfHwKLQkJcmViYXNlX3NldHVwZmlsZShyZWJhc2UsIE9OVE9fRklMRSwgLTEsICIlLipzXG4iLCBHSVRfT0lEX0hFWFNaLCBvbnRvKSA8IDAgfHwKLQkJcmViYXNlX3NldHVwZmlsZShyZWJhc2UsIE9SSUdfSEVBRF9GSUxFLCAtMSwgIiUuKnNcbiIsIEdJVF9PSURfSEVYU1osIG9yaWdfaGVhZCkgPCAwIHx8Ci0JCXJlYmFzZV9zZXR1cGZpbGUocmViYXNlLCBRVUlFVF9GSUxFLCAtMSwgcmViYXNlLT5xdWlldCA/ICJ0XG4iIDogIlxuIikgPCAwKQorCQlyZWJhc2Vfc2V0dXBmaWxlKHJlYmFzZSwgSEVBRF9OQU1FX0ZJTEUsIDAsICIlc1xuIiwgb3JpZ19oZWFkX25hbWUpIDwgMCB8fAorCQlyZWJhc2Vfc2V0dXBmaWxlKHJlYmFzZSwgT05UT19GSUxFLCAwLCAiJS4qc1xuIiwgR0lUX09JRF9IRVhTWiwgb250bykgPCAwIHx8CisJCXJlYmFzZV9zZXR1cGZpbGUocmViYXNlLCBPUklHX0hFQURfRklMRSwgMCwgIiUuKnNcbiIsIEdJVF9PSURfSEVYU1osIG9yaWdfaGVhZCkgPCAwIHx8CisJCXJlYmFzZV9zZXR1cGZpbGUocmViYXNlLCBRVUlFVF9GSUxFLCAwLCByZWJhc2UtPnF1aWV0ID8gInRcbiIgOiAiXG4iKSA8IDApCiAJCXJldHVybiAtMTsKIAogCXJldHVybiByZWJhc2Vfc2V0dXBmaWxlc19tZXJnZShyZWJhc2UpOwpAQCAtNTQ2LDcgKzU0Niw5IEBACiAJfQogCiAJaWYgKGNoZWNrX3dvcmtkaXIpIHsKLQkJaWYgKChlcnJvciA9IGdpdF9kaWZmX2luZGV4X3RvX3dvcmtkaXIoJmRpZmYsIHJlcG8sIGluZGV4LCBOVUxMKSkgPCAwKQorCQlnaXRfZGlmZl9vcHRpb25zIGRpZmZfb3B0cyA9IEdJVF9ESUZGX09QVElPTlNfSU5JVDsKKwkJZGlmZl9vcHRzLmlnbm9yZV9zdWJtb2R1bGVzID0gR0lUX1NVQk1PRFVMRV9JR05PUkVfVU5UUkFDS0VEOworCQlpZiAoKGVycm9yID0gZ2l0X2RpZmZfaW5kZXhfdG9fd29ya2RpcigmZGlmZiwgcmVwbywgaW5kZXgsICZkaWZmX29wdHMpKSA8IDApCiAJCQlnb3RvIGRvbmU7CiAKIAkJaWYgKGdpdF9kaWZmX251bV9kZWx0YXMoZGlmZikgPiAwKSB7CkBAIC02MjQsNyArNjI2LDcgQEAKIAogCUdJVF9VTlVTRUQodXBzdHJlYW0pOwogCi0JaWYgKChlcnJvciA9IGdpdF9idWZfam9pbnBhdGgoJnN0YXRlX3BhdGgsIHJlcG8tPnBhdGhfcmVwb3NpdG9yeSwgUkVCQVNFX01FUkdFX0RJUikpIDwgMCkKKwlpZiAoKGVycm9yID0gZ2l0X2J1Zl9qb2lucGF0aCgmc3RhdGVfcGF0aCwgcmVwby0+Z2l0ZGlyLCBSRUJBU0VfTUVSR0VfRElSKSkgPCAwKQogCQlnb3RvIGRvbmU7CiAKIAlyZWJhc2UtPnN0YXRlX3BhdGggPSBnaXRfYnVmX2RldGFjaCgmc3RhdGVfcGF0aCk7CkBAIC04MjEsOCArODIzLDggQEAKIAlub3JtYWxpemVfY2hlY2tvdXRfb3B0aW9uc19mb3JfYXBwbHkoJmNoZWNrb3V0X29wdHMsIHJlYmFzZSwgY3VycmVudF9jb21taXQpOwogCiAJaWYgKChlcnJvciA9IGdpdF9pbmRleHdyaXRlcl9pbml0X2Zvcl9vcGVyYXRpb24oJmluZGV4d3JpdGVyLCByZWJhc2UtPnJlcG8sICZjaGVja291dF9vcHRzLmNoZWNrb3V0X3N0cmF0ZWd5KSkgPCAwIHx8Ci0JCShlcnJvciA9IHJlYmFzZV9zZXR1cGZpbGUocmViYXNlLCBNU0dOVU1fRklMRSwgLTEsICIlIiBQUkl1WiAiXG4iLCByZWJhc2UtPmN1cnJlbnQrMSkpIDwgMCB8fAotCQkoZXJyb3IgPSByZWJhc2Vfc2V0dXBmaWxlKHJlYmFzZSwgQ1VSUkVOVF9GSUxFLCAtMSwgIiUuKnNcbiIsIEdJVF9PSURfSEVYU1osIGN1cnJlbnRfaWRzdHIpKSA8IDAgfHwKKwkJKGVycm9yID0gcmViYXNlX3NldHVwZmlsZShyZWJhc2UsIE1TR05VTV9GSUxFLCAwLCAiJSIgUFJJdVogIlxuIiwgcmViYXNlLT5jdXJyZW50KzEpKSA8IDAgfHwKKwkJKGVycm9yID0gcmViYXNlX3NldHVwZmlsZShyZWJhc2UsIENVUlJFTlRfRklMRSwgMCwgIiUuKnNcbiIsIEdJVF9PSURfSEVYU1osIGN1cnJlbnRfaWRzdHIpKSA8IDAgfHwKIAkJKGVycm9yID0gZ2l0X21lcmdlX3RyZWVzKCZpbmRleCwgcmViYXNlLT5yZXBvLCBwYXJlbnRfdHJlZSwgaGVhZF90cmVlLCBjdXJyZW50X3RyZWUsICZyZWJhc2UtPm9wdGlvbnMubWVyZ2Vfb3B0aW9ucykpIDwgMCB8fAogCQkoZXJyb3IgPSBnaXRfbWVyZ2VfX2NoZWNrX3Jlc3VsdChyZWJhc2UtPnJlcG8sIGluZGV4KSkgPCAwIHx8CiAJCShlcnJvciA9IGdpdF9jaGVja291dF9pbmRleChyZWJhc2UtPnJlcG8sIGluZGV4LCAmY2hlY2tvdXRfb3B0cykpIDwgMCB8fApkaWZmIC0tZ2l0IGEvc3JjL3JlZmRiX2ZzLmMgYi9zcmMvcmVmZGJfZnMuYwppbmRleCBlNDBmNDhiLi5lYjEzNWRjIDEwMDY0NAotLS0gYS9zcmMvcmVmZGJfZnMuYworKysgYi9zcmMvcmVmZGJfZnMuYwpAQCAtMjYsOCArMjYsNiBAQAogI2luY2x1ZGUgPGdpdDIvc3lzL3JlZnMuaD4KICNpbmNsdWRlIDxnaXQyL3N5cy9yZWZsb2cuaD4KIAotR0lUX19VU0VfU1RSTUFQCi0KICNkZWZpbmUgREVGQVVMVF9ORVNUSU5HX0xFVkVMCTUKICNkZWZpbmUgTUFYX05FU1RJTkdfTEVWRUwJCTEwCiAKQEAgLTU1LDEyICs1MywxNiBAQAogCWdpdF9yZWZkYl9iYWNrZW5kIHBhcmVudDsKIAogCWdpdF9yZXBvc2l0b3J5ICpyZXBvOwotCWNoYXIgKnBhdGg7CisJLyogcGF0aCB0byBnaXQgZGlyZWN0b3J5ICovCisJY2hhciAqZ2l0cGF0aDsKKwkvKiBwYXRoIHRvIGNvbW1vbiBvYmplY3RzJyBkaXJlY3RvcnkgKi8KKwljaGFyICpjb21tb25wYXRoOwogCiAJZ2l0X3NvcnRlZGNhY2hlICpyZWZjYWNoZTsKIAlpbnQgcGVlbGluZ19tb2RlOwogCWdpdF9pdGVyYXRvcl9mbGFnX3QgaXRlcmF0b3JfZmxhZ3M7CiAJdWludDMyX3QgZGlyZWFjaF9mbGFnczsKKwlpbnQgZnN5bmM7CiB9IHJlZmRiX2ZzX2JhY2tlbmQ7CiAKIHN0YXRpYyBpbnQgcmVmZGJfcmVmbG9nX2ZzX19kZWxldGUoZ2l0X3JlZmRiX2JhY2tlbmQgKl9iYWNrZW5kLCBjb25zdCBjaGFyICpuYW1lKTsKQEAgLTc3LDcgKzc5LDcgQEAKIAlnaXRfYnVmIHBhY2tlZHJlZnMgPSBHSVRfQlVGX0lOSVQ7CiAJY2hhciAqc2NhbiwgKmVvZiwgKmVvbDsKIAotCWlmICghYmFja2VuZC0+cGF0aCkKKwlpZiAoIWJhY2tlbmQtPmdpdHBhdGgpCiAJCXJldHVybiAwOwogCiAJZXJyb3IgPSBnaXRfc29ydGVkY2FjaGVfbG9ja2FuZGxvYWQoYmFja2VuZC0+cmVmY2FjaGUsICZwYWNrZWRyZWZzKTsKQEAgLTIzOCw3ICsyNDAsNyBAQAogCS8qIGlmIHdlIGZhaWwgdG8gbG9hZCB0aGUgbG9vc2UgcmVmZXJlbmNlLCBhc3N1bWUgc29tZW9uZSBjaGFuZ2VkCiAJICogdGhlIGZpbGVzeXN0ZW0gdW5kZXIgdXMgYW5kIHNraXAgaXQuLi4KIAkgKi8KLQlpZiAobG9vc2VfcmVhZGJ1ZmZlcigmcmVmX2ZpbGUsIGJhY2tlbmQtPnBhdGgsIG5hbWUpIDwgMCkgeworCWlmIChsb29zZV9yZWFkYnVmZmVyKCZyZWZfZmlsZSwgYmFja2VuZC0+Z2l0cGF0aCwgbmFtZSkgPCAwKSB7CiAJCWdpdGVycl9jbGVhcigpOwogCQlnb3RvIGRvbmU7CiAJfQpAQCAtMjg3LDcgKzI4OSw3IEBACiAJCXJldHVybiBlcnJvcjsKIAl9CiAKLQlmaWxlX3BhdGggPSBmdWxsX3BhdGgtPnB0ciArIHN0cmxlbihiYWNrZW5kLT5wYXRoKTsKKwlmaWxlX3BhdGggPSBmdWxsX3BhdGgtPnB0ciArIHN0cmxlbihiYWNrZW5kLT5naXRwYXRoKTsKIAogCXJldHVybiBsb29zZV9sb29rdXBfdG9fcGFja2ZpbGUoYmFja2VuZCwgZmlsZV9wYXRoKTsKIH0KQEAgLTMwMyw3ICszMDUsNyBAQAogCWludCBlcnJvcjsKIAlnaXRfYnVmIHJlZnNfcGF0aCA9IEdJVF9CVUZfSU5JVDsKIAotCWlmIChnaXRfYnVmX2pvaW5wYXRoKCZyZWZzX3BhdGgsIGJhY2tlbmQtPnBhdGgsIEdJVF9SRUZTX0RJUikgPCAwKQorCWlmIChnaXRfYnVmX2pvaW5wYXRoKCZyZWZzX3BhdGgsIGJhY2tlbmQtPmdpdHBhdGgsIEdJVF9SRUZTX0RJUikgPCAwKQogCQlyZXR1cm4gLTE7CiAKIAkvKgpAQCAtMzMxLDcgKzMzMyw3IEBACiAJYXNzZXJ0KGJhY2tlbmQpOwogCiAJaWYgKChlcnJvciA9IHBhY2tlZF9yZWxvYWQoYmFja2VuZCkpIDwgMCB8fAotCQkoZXJyb3IgPSBnaXRfYnVmX2pvaW5wYXRoKCZyZWZfcGF0aCwgYmFja2VuZC0+cGF0aCwgcmVmX25hbWUpKSA8IDApCisJCShlcnJvciA9IGdpdF9idWZfam9pbnBhdGgoJnJlZl9wYXRoLCBiYWNrZW5kLT5naXRwYXRoLCByZWZfbmFtZSkpIDwgMCkKIAkJcmV0dXJuIGVycm9yOwogCiAJKmV4aXN0cyA9IGdpdF9wYXRoX2lzZmlsZShyZWZfcGF0aC5wdHIpIHx8CkBAIC0zNjIsNiArMzY0LDE5IEBACiAJcmV0dXJuIHJlZm5hbWVfc3RhcnQ7CiB9CiAKKy8qCisgKiBSZXR1cm5zIHdoZXRoZXIgYSByZWZlcmVuY2UgaXMgc3RvcmVkIHBlciB3b3JrdHJlZSBvciBub3QuCisgKiBQZXItd29ya3RyZWUgcmVmZXJlbmNlcyBhcmU6CisgKgorICogLSBhbGwgcHNldWRvcmVmcywgZS5nLiBIRUFEIGFuZCBNRVJHRV9IRUFECisgKiAtIGFsbCByZWZlcmVuY2VzIHN0b3JlZCBpbnNpZGUgb2YgInJlZnMvYmlzZWN0LyIKKyAqLworc3RhdGljIGJvb2wgaXNfcGVyX3dvcmt0cmVlX3JlZihjb25zdCBjaGFyICpyZWZfbmFtZSkKK3sKKwlyZXR1cm4gZ2l0X19wcmVmaXhjbXAocmVmX25hbWUsICJyZWZzLyIpICE9IDAgfHwKKwkgICAgZ2l0X19wcmVmaXhjbXAocmVmX25hbWUsICJyZWZzL2Jpc2VjdC8iKSA9PSAwOworfQorCiBzdGF0aWMgaW50IGxvb3NlX2xvb2t1cCgKIAlnaXRfcmVmZXJlbmNlICoqb3V0LAogCXJlZmRiX2ZzX2JhY2tlbmQgKmJhY2tlbmQsCkBAIC0zNjksMTEgKzM4NCwxNyBAQAogewogCWdpdF9idWYgcmVmX2ZpbGUgPSBHSVRfQlVGX0lOSVQ7CiAJaW50IGVycm9yID0gMDsKKwljb25zdCBjaGFyICpyZWZfZGlyOwogCiAJaWYgKG91dCkKIAkJKm91dCA9IE5VTEw7CiAKLQlpZiAoKGVycm9yID0gbG9vc2VfcmVhZGJ1ZmZlcigmcmVmX2ZpbGUsIGJhY2tlbmQtPnBhdGgsIHJlZl9uYW1lKSkgPCAwKQorCWlmIChpc19wZXJfd29ya3RyZWVfcmVmKHJlZl9uYW1lKSkKKwkJcmVmX2RpciA9IGJhY2tlbmQtPmdpdHBhdGg7CisJZWxzZQorCQlyZWZfZGlyID0gYmFja2VuZC0+Y29tbW9ucGF0aDsKKworCWlmICgoZXJyb3IgPSBsb29zZV9yZWFkYnVmZmVyKCZyZWZfZmlsZSwgcmVmX2RpciwgcmVmX25hbWUpKSA8IDApCiAJCS8qIGNhbm5vdCByZWFkIGxvb3NlIHJlZiBmaWxlIC0gZ2FoICovOwogCWVsc2UgaWYgKGdpdF9fcHJlZml4Y21wKGdpdF9idWZfY3N0cigmcmVmX2ZpbGUpLCBHSVRfU1lNUkVGKSA9PSAwKSB7CiAJCWNvbnN0IGNoYXIgKnRhcmdldDsKQEAgLTQ4NCwxMiArNTA1LDEyIEBACiAJZ2l0X2l0ZXJhdG9yX29wdGlvbnMgZnNpdF9vcHRzID0gR0lUX0lURVJBVE9SX09QVElPTlNfSU5JVDsKIAljb25zdCBnaXRfaW5kZXhfZW50cnkgKmVudHJ5ID0gTlVMTDsKIAotCWlmICghYmFja2VuZC0+cGF0aCkgLyogZG8gbm90aGluZyBpZiBubyBwYXRoIGZvciBsb29zZSByZWZzICovCisJaWYgKCFiYWNrZW5kLT5jb21tb25wYXRoKSAvKiBkbyBub3RoaW5nIGlmIG5vIGNvbW1vbnBhdGggZm9yIGxvb3NlIHJlZnMgKi8KIAkJcmV0dXJuIDA7CiAKIAlmc2l0X29wdHMuZmxhZ3MgPSBiYWNrZW5kLT5pdGVyYXRvcl9mbGFnczsKIAotCWlmICgoZXJyb3IgPSBnaXRfYnVmX3ByaW50ZigmcGF0aCwgIiVzL3JlZnMiLCBiYWNrZW5kLT5wYXRoKSkgPCAwIHx8CisJaWYgKChlcnJvciA9IGdpdF9idWZfcHJpbnRmKCZwYXRoLCAiJXMvcmVmcyIsIGJhY2tlbmQtPmNvbW1vbnBhdGgpKSA8IDAgfHwKIAkJKGVycm9yID0gZ2l0X2l0ZXJhdG9yX2Zvcl9maWxlc3lzdGVtKCZmc2l0LCBwYXRoLnB0ciwgJmZzaXRfb3B0cykpIDwgMCkgewogCQlnaXRfYnVmX2ZyZWUoJnBhdGgpOwogCQlyZXR1cm4gZXJyb3I7CkBAIC03MTYsOCArNzM3LDkgQEAKIAogc3RhdGljIGludCBsb29zZV9sb2NrKGdpdF9maWxlYnVmICpmaWxlLCByZWZkYl9mc19iYWNrZW5kICpiYWNrZW5kLCBjb25zdCBjaGFyICpuYW1lKQogewotCWludCBlcnJvcjsKKwlpbnQgZXJyb3IsIGZpbGVidWZfZmxhZ3M7CiAJZ2l0X2J1ZiByZWZfcGF0aCA9IEdJVF9CVUZfSU5JVDsKKwljb25zdCBjaGFyICpiYXNlZGlyOwogCiAJYXNzZXJ0KGZpbGUgJiYgYmFja2VuZCAmJiBuYW1lKTsKIApAQCAtNzI2LDE2ICs3NDgsMjUgQEAKIAkJcmV0dXJuIEdJVF9FSU5WQUxJRFNQRUM7CiAJfQogCisJaWYgKGlzX3Blcl93b3JrdHJlZV9yZWYobmFtZSkpCisJCWJhc2VkaXIgPSBiYWNrZW5kLT5naXRwYXRoOworCWVsc2UKKwkJYmFzZWRpciA9IGJhY2tlbmQtPmNvbW1vbnBhdGg7CisKIAkvKiBSZW1vdmUgYSBwb3NzaWJseSBleGlzdGluZyBlbXB0eSBkaXJlY3RvcnkgaGllcmFyY2h5CiAJICogd2hpY2ggbmFtZSB3b3VsZCBjb2xsaWRlIHdpdGggdGhlIHJlZmVyZW5jZSBuYW1lCiAJICovCi0JaWYgKChlcnJvciA9IGdpdF9mdXRpbHNfcm1kaXJfcihuYW1lLCBiYWNrZW5kLT5wYXRoLCBHSVRfUk1ESVJfU0tJUF9OT05FTVBUWSkpIDwgMCkKKwlpZiAoKGVycm9yID0gZ2l0X2Z1dGlsc19ybWRpcl9yKG5hbWUsIGJhc2VkaXIsIEdJVF9STURJUl9TS0lQX05PTkVNUFRZKSkgPCAwKQogCQlyZXR1cm4gZXJyb3I7CiAKLQlpZiAoZ2l0X2J1Zl9qb2lucGF0aCgmcmVmX3BhdGgsIGJhY2tlbmQtPnBhdGgsIG5hbWUpIDwgMCkKKwlpZiAoZ2l0X2J1Zl9qb2lucGF0aCgmcmVmX3BhdGgsIGJhc2VkaXIsIG5hbWUpIDwgMCkKIAkJcmV0dXJuIC0xOwogCi0JZXJyb3IgPSBnaXRfZmlsZWJ1Zl9vcGVuKGZpbGUsIHJlZl9wYXRoLnB0ciwgR0lUX0ZJTEVCVUZfRk9SQ0UsIEdJVF9SRUZTX0ZJTEVfTU9ERSk7CisJZmlsZWJ1Zl9mbGFncyA9IEdJVF9GSUxFQlVGX0ZPUkNFOworCWlmIChiYWNrZW5kLT5mc3luYykKKwkJZmlsZWJ1Zl9mbGFncyB8PSBHSVRfRklMRUJVRl9GU1lOQzsKKworCWVycm9yID0gZ2l0X2ZpbGVidWZfb3BlbihmaWxlLCByZWZfcGF0aC5wdHIsIGZpbGVidWZfZmxhZ3MsIEdJVF9SRUZTX0ZJTEVfTU9ERSk7CiAKIAlpZiAoZXJyb3IgPT0gR0lUX0VESVJFQ1RPUlkpCiAJCWdpdGVycl9zZXQoR0lURVJSX1JFRkVSRU5DRSwgImNhbm5vdCBsb2NrIHJlZiAnJXMnLCB0aGVyZSBhcmUgcmVmcyBiZW5lYXRoIHRoYXQgZm9sZGVyIiwgbmFtZSk7CkBAIC05NzAsMTUgKzEwMDEsMTggQEAKIHsKIAlnaXRfc29ydGVkY2FjaGUgKnJlZmNhY2hlID0gYmFja2VuZC0+cmVmY2FjaGU7CiAJZ2l0X2ZpbGVidWYgcGFja19maWxlID0gR0lUX0ZJTEVCVUZfSU5JVDsKLQlpbnQgZXJyb3I7CisJaW50IGVycm9yLCBvcGVuX2ZsYWdzID0gMDsKIAlzaXplX3QgaTsKIAogCS8qIGxvY2sgdGhlIGNhY2hlIHRvIHVwZGF0ZXMgd2hpbGUgd2UgZG8gdGhpcyAqLwogCWlmICgoZXJyb3IgPSBnaXRfc29ydGVkY2FjaGVfd2xvY2socmVmY2FjaGUpKSA8IDApCiAJCXJldHVybiBlcnJvcjsKIAorCWlmIChiYWNrZW5kLT5mc3luYykKKwkJb3Blbl9mbGFncyA9IEdJVF9GSUxFQlVGX0ZTWU5DOworCiAJLyogT3BlbiB0aGUgZmlsZSEgKi8KLQlpZiAoKGVycm9yID0gZ2l0X2ZpbGVidWZfb3BlbigmcGFja19maWxlLCBnaXRfc29ydGVkY2FjaGVfcGF0aChyZWZjYWNoZSksIDAsIEdJVF9QQUNLRURSRUZTX0ZJTEVfTU9ERSkpIDwgMCkKKwlpZiAoKGVycm9yID0gZ2l0X2ZpbGVidWZfb3BlbigmcGFja19maWxlLCBnaXRfc29ydGVkY2FjaGVfcGF0aChyZWZjYWNoZSksIG9wZW5fZmxhZ3MsIEdJVF9QQUNLRURSRUZTX0ZJTEVfTU9ERSkpIDwgMCkKIAkJZ290byBmYWlsOwogCiAJLyogUGFja2ZpbGVzIGhhdmUgYSBoZWFkZXIuLi4gYXBwYXJlbnRseQpAQCAtMTEwNiw3ICsxMTQwLDcgQEAKIHN0YXRpYyBpbnQgbWF5YmVfYXBwZW5kX2hlYWQocmVmZGJfZnNfYmFja2VuZCAqYmFja2VuZCwgY29uc3QgZ2l0X3JlZmVyZW5jZSAqcmVmLCBjb25zdCBnaXRfc2lnbmF0dXJlICp3aG8sIGNvbnN0IGNoYXIgKm1lc3NhZ2UpCiB7CiAJaW50IGVycm9yOwotCWdpdF9vaWQgb2xkX2lkID0ge3swfX07CisJZ2l0X29pZCBvbGRfaWQ7CiAJZ2l0X3JlZmVyZW5jZSAqdG1wID0gTlVMTCwgKmhlYWQgPSBOVUxMLCAqcGVlbGVkID0gTlVMTDsKIAljb25zdCBjaGFyICpuYW1lOwogCkBAIC0xMTE0LDcgKzExNDgsOCBAQAogCQlyZXR1cm4gMDsKIAogCS8qIGlmIHdlIGNhbid0IHJlc29sdmUsIHdlIHVzZSB7MH0qNDAgYXMgb2xkIGlkICovCi0JZ2l0X3JlZmVyZW5jZV9uYW1lX3RvX2lkKCZvbGRfaWQsIGJhY2tlbmQtPnJlcG8sIHJlZi0+bmFtZSk7CisJaWYgKGdpdF9yZWZlcmVuY2VfbmFtZV90b19pZCgmb2xkX2lkLCBiYWNrZW5kLT5yZXBvLCByZWYtPm5hbWUpIDwgMCkKKwkJbWVtc2V0KCZvbGRfaWQsIDAsIHNpemVvZihvbGRfaWQpKTsKIAogCWlmICgoZXJyb3IgPSBnaXRfcmVmZXJlbmNlX2xvb2t1cCgmaGVhZCwgYmFja2VuZC0+cmVwbywgR0lUX0hFQURfRklMRSkpIDwgMCkKIAkJcmV0dXJuIGVycm9yOwpAQCAtMTI4Myw3ICsxMzE4LDcgQEAKIAl9CiAKIAkvKiBJZiBhIGxvb3NlIHJlZmVyZW5jZSBleGlzdHMsIHJlbW92ZSBpdCBmcm9tIHRoZSBmaWxlc3lzdGVtICovCi0JaWYgKGdpdF9idWZfam9pbnBhdGgoJmxvb3NlX3BhdGgsIGJhY2tlbmQtPnBhdGgsIHJlZl9uYW1lKSA8IDApCisJaWYgKGdpdF9idWZfam9pbnBhdGgoJmxvb3NlX3BhdGgsIGJhY2tlbmQtPmdpdHBhdGgsIHJlZl9uYW1lKSA8IDApCiAJCXJldHVybiAtMTsKIAogCkBAIC0xNDA4LDI4ICsxNDQzLDMwIEBACiAJYXNzZXJ0KGJhY2tlbmQpOwogCiAJZ2l0X3NvcnRlZGNhY2hlX2ZyZWUoYmFja2VuZC0+cmVmY2FjaGUpOwotCWdpdF9fZnJlZShiYWNrZW5kLT5wYXRoKTsKKwlnaXRfX2ZyZWUoYmFja2VuZC0+Z2l0cGF0aCk7CisJZ2l0X19mcmVlKGJhY2tlbmQtPmNvbW1vbnBhdGgpOwogCWdpdF9fZnJlZShiYWNrZW5kKTsKIH0KIAotc3RhdGljIGludCBzZXR1cF9uYW1lc3BhY2UoZ2l0X2J1ZiAqcGF0aCwgZ2l0X3JlcG9zaXRvcnkgKnJlcG8pCitzdGF0aWMgY2hhciAqc2V0dXBfbmFtZXNwYWNlKGdpdF9yZXBvc2l0b3J5ICpyZXBvLCBjb25zdCBjaGFyICppbikKIHsKLQljaGFyICpwYXJ0cywgKnN0YXJ0LCAqZW5kOworCWdpdF9idWYgcGF0aCA9IEdJVF9CVUZfSU5JVDsKKwljaGFyICpwYXJ0cywgKnN0YXJ0LCAqZW5kLCAqb3V0ID0gTlVMTDsKIAotCS8qIE5vdCBhbGwgcmVwb3NpdG9yaWVzIGhhdmUgYSBwYXRoICovCi0JaWYgKHJlcG8tPnBhdGhfcmVwb3NpdG9yeSA9PSBOVUxMKQotCQlyZXR1cm4gMDsKKwlpZiAoIWluKQorCQlnb3RvIGRvbmU7CiAKLQkvKiBMb2FkIHRoZSBwYXRoIHRvIHRoZSByZXBvIGZpcnN0ICovCi0JZ2l0X2J1Zl9wdXRzKHBhdGgsIHJlcG8tPnBhdGhfcmVwb3NpdG9yeSk7CisJZ2l0X2J1Zl9wdXRzKCZwYXRoLCBpbik7CiAKIAkvKiBpZiB0aGUgcmVwbyBpcyBub3QgbmFtZXNwYWNlZCwgbm90aGluZyBlbHNlIHRvIGRvICovCi0JaWYgKHJlcG8tPm5hbWVzcGFjZSA9PSBOVUxMKQotCQlyZXR1cm4gMDsKKwlpZiAocmVwby0+bmFtZXNwYWNlID09IE5VTEwpIHsKKwkJb3V0ID0gZ2l0X2J1Zl9kZXRhY2goJnBhdGgpOworCQlnb3RvIGRvbmU7CisJfQogCiAJcGFydHMgPSBlbmQgPSBnaXRfX3N0cmR1cChyZXBvLT5uYW1lc3BhY2UpOwogCWlmIChwYXJ0cyA9PSBOVUxMKQotCQlyZXR1cm4gLTE7CisJCWdvdG8gZG9uZTsKIAogCS8qCiAJICogRnJvbSBgbWFuIGdpdG5hbWVzcGFjZXNgOgpAQCAtMTQzNywyMSArMTQ3NCwyNCBAQAogCSAqICBvZiBuYW1lc3BhY2VzOyBmb3IgZXhhbXBsZSwgR0lUX05BTUVTUEFDRT1mb28vYmFyIHdpbGwgc3RvcmUKIAkgKiAgcmVmcyB1bmRlciByZWZzL25hbWVzcGFjZXMvZm9vL3JlZnMvbmFtZXNwYWNlcy9iYXIvCiAJICovCi0Jd2hpbGUgKChzdGFydCA9IGdpdF9fc3Ryc2VwKCZlbmQsICIvIikpICE9IE5VTEwpIHsKLQkJZ2l0X2J1Zl9wcmludGYocGF0aCwgInJlZnMvbmFtZXNwYWNlcy8lcy8iLCBzdGFydCk7Ci0JfQorCXdoaWxlICgoc3RhcnQgPSBnaXRfX3N0cnNlcCgmZW5kLCAiLyIpKSAhPSBOVUxMKQorCQlnaXRfYnVmX3ByaW50ZigmcGF0aCwgInJlZnMvbmFtZXNwYWNlcy8lcy8iLCBzdGFydCk7CiAKLQlnaXRfYnVmX3ByaW50ZihwYXRoLCAicmVmcy9uYW1lc3BhY2VzLyVzL3JlZnMiLCBlbmQpOworCWdpdF9idWZfcHJpbnRmKCZwYXRoLCAicmVmcy9uYW1lc3BhY2VzLyVzL3JlZnMiLCBlbmQpOwogCWdpdF9fZnJlZShwYXJ0cyk7CiAKIAkvKiBNYWtlIHN1cmUgdGhhdCB0aGUgZm9sZGVyIHdpdGggdGhlIG5hbWVzcGFjZSBleGlzdHMgKi8KLQlpZiAoZ2l0X2Z1dGlsc19ta2Rpcl9yZWxhdGl2ZShnaXRfYnVmX2NzdHIocGF0aCksIHJlcG8tPnBhdGhfcmVwb3NpdG9yeSwKLQkJCTA3NzcsIEdJVF9NS0RJUl9QQVRILCBOVUxMKSA8IDApCi0JCXJldHVybiAtMTsKKwlpZiAoZ2l0X2Z1dGlsc19ta2Rpcl9yZWxhdGl2ZShnaXRfYnVmX2NzdHIoJnBhdGgpLCBpbiwgMDc3NywKKwkJCUdJVF9NS0RJUl9QQVRILCBOVUxMKSA8IDApCisJCWdvdG8gZG9uZTsKIAotCS8qIFJldHVybiByb290IG9mIHRoZSBuYW1lc3BhY2VkIHBhdGgsIGkuZS4gd2l0aG91dCB0aGUgdHJhaWxpbmcgJy9yZWZzJyAqLwotCWdpdF9idWZfcnRydW5jYXRlX2F0X2NoYXIocGF0aCwgJy8nKTsKLQlyZXR1cm4gMDsKKwkvKiBSZXR1cm4gcm9vdCBvZiB0aGUgbmFtZXNwYWNlZCBnaXRwYXRoLCBpLmUuIHdpdGhvdXQgdGhlIHRyYWlsaW5nICcvcmVmcycgKi8KKwlnaXRfYnVmX3J0cnVuY2F0ZV9hdF9jaGFyKCZwYXRoLCAnLycpOworCW91dCA9IGdpdF9idWZfZGV0YWNoKCZwYXRoKTsKKworZG9uZToKKwlnaXRfYnVmX2ZyZWUoJnBhdGgpOworCXJldHVybiBvdXQ7CiB9CiAKIHN0YXRpYyBpbnQgcmVmbG9nX2FsbG9jKGdpdF9yZWZsb2cgKipyZWZsb2csIGNvbnN0IGNoYXIgKm5hbWUpCkBAIC0xNTYyLDcgKzE2MDIsNyBAQAogCiBHSVRfSU5MSU5FKGludCkgcmV0cmlldmVfcmVmbG9nX3BhdGgoZ2l0X2J1ZiAqcGF0aCwgZ2l0X3JlcG9zaXRvcnkgKnJlcG8sIGNvbnN0IGNoYXIgKm5hbWUpCiB7Ci0JcmV0dXJuIGdpdF9idWZfam9pbjMocGF0aCwgJy8nLCByZXBvLT5wYXRoX3JlcG9zaXRvcnksIEdJVF9SRUZMT0dfRElSLCBuYW1lKTsKKwlyZXR1cm4gZ2l0X2J1Zl9qb2luMyhwYXRoLCAnLycsIHJlcG8tPmNvbW1vbmRpciwgR0lUX1JFRkxPR19ESVIsIG5hbWUpOwogfQogCiBzdGF0aWMgaW50IHJlZmRiX3JlZmxvZ19mc19fZW5zdXJlX2xvZyhnaXRfcmVmZGJfYmFja2VuZCAqX2JhY2tlbmQsIGNvbnN0IGNoYXIgKm5hbWUpCkBAIC0xNzYxLDcgKzE4MDEsNyBAQAogLyogQXBwZW5kIHRvIHRoZSByZWZsb2csIG11c3QgYmUgY2FsbGVkIHVuZGVyIHJlZmVyZW5jZSBsb2NrICovCiBzdGF0aWMgaW50IHJlZmxvZ19hcHBlbmQocmVmZGJfZnNfYmFja2VuZCAqYmFja2VuZCwgY29uc3QgZ2l0X3JlZmVyZW5jZSAqcmVmLCBjb25zdCBnaXRfb2lkICpvbGQsIGNvbnN0IGdpdF9vaWQgKm5ldywgY29uc3QgZ2l0X3NpZ25hdHVyZSAqd2hvLCBjb25zdCBjaGFyICptZXNzYWdlKQogewotCWludCBlcnJvciwgaXNfc3ltYm9saWM7CisJaW50IGVycm9yLCBpc19zeW1ib2xpYywgb3Blbl9mbGFnczsKIAlnaXRfb2lkIG9sZF9pZCA9IHt7MH19LCBuZXdfaWQgPSB7ezB9fTsKIAlnaXRfYnVmIGJ1ZiA9IEdJVF9CVUZfSU5JVCwgcGF0aCA9IEdJVF9CVUZfSU5JVDsKIAlnaXRfcmVwb3NpdG9yeSAqcmVwbyA9IGJhY2tlbmQtPnJlcG87CkBAIC0xODI5LDcgKzE4NjksMTIgQEAKIAkJCWdvdG8gY2xlYW51cDsKIAl9CiAKLQllcnJvciA9IGdpdF9mdXRpbHNfd3JpdGVidWZmZXIoJmJ1ZiwgZ2l0X2J1Zl9jc3RyKCZwYXRoKSwgT19XUk9OTFl8T19DUkVBVHxPX0FQUEVORCwgR0lUX1JFRkxPR19GSUxFX01PREUpOworCW9wZW5fZmxhZ3MgPSBPX1dST05MWSB8IE9fQ1JFQVQgfCBPX0FQUEVORDsKKworCWlmIChiYWNrZW5kLT5mc3luYykKKwkJb3Blbl9mbGFncyB8PSBPX0ZTWU5DOworCisJZXJyb3IgPSBnaXRfZnV0aWxzX3dyaXRlYnVmZmVyKCZidWYsIGdpdF9idWZfY3N0cigmcGF0aCksIG9wZW5fZmxhZ3MsIEdJVF9SRUZMT0dfRklMRV9NT0RFKTsKIAogY2xlYW51cDoKIAlnaXRfYnVmX2ZyZWUoJmJ1Zik7CkBAIC0xODU3LDcgKzE5MDIsNyBAQAogCQkmbm9ybWFsaXplZCwgbmV3X25hbWUsIEdJVF9SRUZfRk9STUFUX0FMTE9XX09ORUxFVkVMKSkgPCAwKQogCQkJcmV0dXJuIGVycm9yOwogCi0JaWYgKGdpdF9idWZfam9pbnBhdGgoJnRlbXBfcGF0aCwgcmVwby0+cGF0aF9yZXBvc2l0b3J5LCBHSVRfUkVGTE9HX0RJUikgPCAwKQorCWlmIChnaXRfYnVmX2pvaW5wYXRoKCZ0ZW1wX3BhdGgsIHJlcG8tPmdpdGRpciwgR0lUX1JFRkxPR19ESVIpIDwgMCkKIAkJcmV0dXJuIC0xOwogCiAJaWYgKGdpdF9idWZfam9pbnBhdGgoJm9sZF9wYXRoLCBnaXRfYnVmX2NzdHIoJnRlbXBfcGF0aCksIG9sZF9uYW1lKSA8IDApCkBAIC0xOTQ4LDcgKzE5OTMsNyBAQAogCWdpdF9yZXBvc2l0b3J5ICpyZXBvc2l0b3J5KQogewogCWludCB0ID0gMDsKLQlnaXRfYnVmIHBhdGggPSBHSVRfQlVGX0lOSVQ7CisJZ2l0X2J1ZiBnaXRwYXRoID0gR0lUX0JVRl9JTklUOwogCXJlZmRiX2ZzX2JhY2tlbmQgKmJhY2tlbmQ7CiAKIAliYWNrZW5kID0gZ2l0X19jYWxsb2MoMSwgc2l6ZW9mKHJlZmRiX2ZzX2JhY2tlbmQpKTsKQEAgLTE5NTYsMTggKzIwMDEsMjcgQEAKIAogCWJhY2tlbmQtPnJlcG8gPSByZXBvc2l0b3J5OwogCi0JaWYgKHNldHVwX25hbWVzcGFjZSgmcGF0aCwgcmVwb3NpdG9yeSkgPCAwKQotCQlnb3RvIGZhaWw7CisJaWYgKHJlcG9zaXRvcnktPmdpdGRpcikgeworCQliYWNrZW5kLT5naXRwYXRoID0gc2V0dXBfbmFtZXNwYWNlKHJlcG9zaXRvcnksIHJlcG9zaXRvcnktPmdpdGRpcik7CiAKLQliYWNrZW5kLT5wYXRoID0gZ2l0X2J1Zl9kZXRhY2goJnBhdGgpOworCQlpZiAoYmFja2VuZC0+Z2l0cGF0aCA9PSBOVUxMKQorCQkJZ290byBmYWlsOworCX0KIAotCWlmIChnaXRfYnVmX2pvaW5wYXRoKCZwYXRoLCBiYWNrZW5kLT5wYXRoLCBHSVRfUEFDS0VEUkVGU19GSUxFKSA8IDAgfHwKKwlpZiAocmVwb3NpdG9yeS0+Y29tbW9uZGlyKSB7CisJCWJhY2tlbmQtPmNvbW1vbnBhdGggPSBzZXR1cF9uYW1lc3BhY2UocmVwb3NpdG9yeSwgcmVwb3NpdG9yeS0+Y29tbW9uZGlyKTsKKworCQlpZiAoYmFja2VuZC0+Y29tbW9ucGF0aCA9PSBOVUxMKQorCQkJZ290byBmYWlsOworCX0KKworCWlmIChnaXRfYnVmX2pvaW5wYXRoKCZnaXRwYXRoLCBiYWNrZW5kLT5jb21tb25wYXRoLCBHSVRfUEFDS0VEUkVGU19GSUxFKSA8IDAgfHwKIAkJZ2l0X3NvcnRlZGNhY2hlX25ldygKIAkJCSZiYWNrZW5kLT5yZWZjYWNoZSwgb2Zmc2V0b2Yoc3RydWN0IHBhY2tyZWYsIG5hbWUpLAotCQkJTlVMTCwgTlVMTCwgcGFja3JlZl9jbXAsIGdpdF9idWZfY3N0cigmcGF0aCkpIDwgMCkKKwkJCU5VTEwsIE5VTEwsIHBhY2tyZWZfY21wLCBnaXRfYnVmX2NzdHIoJmdpdHBhdGgpKSA8IDApCiAJCWdvdG8gZmFpbDsKIAotCWdpdF9idWZfZnJlZSgmcGF0aCk7CisJZ2l0X2J1Zl9mcmVlKCZnaXRwYXRoKTsKIAogCWlmICghZ2l0X3JlcG9zaXRvcnlfX2N2YXIoJnQsIGJhY2tlbmQtPnJlcG8sIEdJVF9DVkFSX0lHTk9SRUNBU0UpICYmIHQpIHsKIAkJYmFja2VuZC0+aXRlcmF0b3JfZmxhZ3MgfD0gR0lUX0lURVJBVE9SX0lHTk9SRV9DQVNFOwpAQCAtMTk3Nyw2ICsyMDMxLDkgQEAKIAkJYmFja2VuZC0+aXRlcmF0b3JfZmxhZ3MgfD0gR0lUX0lURVJBVE9SX1BSRUNPTVBPU0VfVU5JQ09ERTsKIAkJYmFja2VuZC0+ZGlyZWFjaF9mbGFncyAgfD0gR0lUX1BBVEhfRElSX1BSRUNPTVBPU0VfVU5JQ09ERTsKIAl9CisJaWYgKCghZ2l0X3JlcG9zaXRvcnlfX2N2YXIoJnQsIGJhY2tlbmQtPnJlcG8sIEdJVF9DVkFSX0ZTWU5DT0JKRUNURklMRVMpICYmIHQpIHx8CisJCWdpdF9yZXBvc2l0b3J5X19mc3luY19naXRkaXIpCisJCWJhY2tlbmQtPmZzeW5jID0gMTsKIAogCWJhY2tlbmQtPnBhcmVudC5leGlzdHMgPSAmcmVmZGJfZnNfYmFja2VuZF9fZXhpc3RzOwogCWJhY2tlbmQtPnBhcmVudC5sb29rdXAgPSAmcmVmZGJfZnNfYmFja2VuZF9fbG9va3VwOwpAQCAtMTk5OSw4ICsyMDU2LDkgQEAKIAlyZXR1cm4gMDsKIAogZmFpbDoKLQlnaXRfYnVmX2ZyZWUoJnBhdGgpOwotCWdpdF9fZnJlZShiYWNrZW5kLT5wYXRoKTsKKwlnaXRfYnVmX2ZyZWUoJmdpdHBhdGgpOworCWdpdF9fZnJlZShiYWNrZW5kLT5naXRwYXRoKTsKKwlnaXRfX2ZyZWUoYmFja2VuZC0+Y29tbW9ucGF0aCk7CiAJZ2l0X19mcmVlKGJhY2tlbmQpOwogCXJldHVybiAtMTsKIH0KZGlmZiAtLWdpdCBhL3NyYy9yZWZzLmMgYi9zcmMvcmVmcy5jCmluZGV4IDE0MGIxNzUuLmY3MTIwZDkgMTAwNjQ0Ci0tLSBhL3NyYy9yZWZzLmMKKysrIGIvc3JjL3JlZnMuYwpAQCAtMjYsOCArMjYsNiBAQAogCiBib29sIGdpdF9yZWZlcmVuY2VfX2VuYWJsZV9zeW1ib2xpY19yZWZfdGFyZ2V0X3ZhbGlkYXRpb24gPSB0cnVlOwogCi1HSVRfX1VTRV9TVFJNQVAKLQogI2RlZmluZSBERUZBVUxUX05FU1RJTkdfTEVWRUwJNQogI2RlZmluZSBNQVhfTkVTVElOR19MRVZFTAkJMTAKIApAQCAtMjUxLDYgKzI0OSw0MCBAQAogCXJldHVybiAwOwogfQogCitpbnQgZ2l0X3JlZmVyZW5jZV9fcmVhZF9oZWFkKAorCWdpdF9yZWZlcmVuY2UgKipvdXQsCisJZ2l0X3JlcG9zaXRvcnkgKnJlcG8sCisJY29uc3QgY2hhciAqcGF0aCkKK3sKKwlnaXRfYnVmIHJlZmVyZW5jZSA9IEdJVF9CVUZfSU5JVDsKKwljaGFyICpuYW1lID0gTlVMTDsKKwlpbnQgZXJyb3I7CisKKwlpZiAoKGVycm9yID0gZ2l0X2Z1dGlsc19yZWFkYnVmZmVyKCZyZWZlcmVuY2UsIHBhdGgpKSA8IDApCisJCWdvdG8gb3V0OworCWdpdF9idWZfcnRyaW0oJnJlZmVyZW5jZSk7CisKKwlpZiAoZ2l0X19zdHJuY21wKHJlZmVyZW5jZS5wdHIsIEdJVF9TWU1SRUYsIHN0cmxlbihHSVRfU1lNUkVGKSkgPT0gMCkgeworCQlnaXRfYnVmX2NvbnN1bWUoJnJlZmVyZW5jZSwgcmVmZXJlbmNlLnB0ciArIHN0cmxlbihHSVRfU1lNUkVGKSk7CisKKwkJbmFtZSA9IGdpdF9wYXRoX2Jhc2VuYW1lKHBhdGgpOworCisJCWlmICgoKm91dCA9IGdpdF9yZWZlcmVuY2VfX2FsbG9jX3N5bWJvbGljKG5hbWUsIHJlZmVyZW5jZS5wdHIpKSA9PSBOVUxMKSB7CisJCQllcnJvciA9IC0xOworCQkJZ290byBvdXQ7CisJCX0KKwl9IGVsc2UgeworCQlpZiAoKGVycm9yID0gZ2l0X3JlZmVyZW5jZV9sb29rdXAob3V0LCByZXBvLCByZWZlcmVuY2UucHRyKSkgPCAwKQorCQkJZ290byBvdXQ7CisJfQorCitvdXQ6CisJZ2l0X19mcmVlKG5hbWUpOworCWdpdF9idWZfZnJlZSgmcmVmZXJlbmNlKTsKKworCXJldHVybiBlcnJvcjsKK30KKwogaW50IGdpdF9yZWZlcmVuY2VfZHdpbShnaXRfcmVmZXJlbmNlICoqb3V0LCBnaXRfcmVwb3NpdG9yeSAqcmVwbywgY29uc3QgY2hhciAqcmVmbmFtZSkKIHsKIAlpbnQgZXJyb3IgPSAwLCBpOwpAQCAtNTgyLDE5ICs2MTQsNjIgQEAKIAkJb3V0LCByZWYtPmRiLT5yZXBvLCByZWYtPm5hbWUsIHRhcmdldCwgMSwgcmVmLT50YXJnZXQuc3ltYm9saWMsIGxvZ19tZXNzYWdlKTsKIH0KIAordHlwZWRlZiBzdHJ1Y3QgeworICAgIGNvbnN0IGNoYXIgKm9sZF9uYW1lOworICAgIGdpdF9yZWZuYW1lX3QgbmV3X25hbWU7Cit9IHJlbmFtZV9jYl9kYXRhOworCitzdGF0aWMgaW50IHVwZGF0ZV93dF9oZWFkcyhnaXRfcmVwb3NpdG9yeSAqcmVwbywgY29uc3QgY2hhciAqcGF0aCwgdm9pZCAqcGF5bG9hZCkKK3sKKwlyZW5hbWVfY2JfZGF0YSAqZGF0YSA9IChyZW5hbWVfY2JfZGF0YSAqKSBwYXlsb2FkOworCWdpdF9yZWZlcmVuY2UgKmhlYWQgPSBOVUxMOworCWNoYXIgKmdpdGRpciA9IE5VTEw7CisJaW50IGVycm9yOworCisJaWYgKChlcnJvciA9IGdpdF9yZWZlcmVuY2VfX3JlYWRfaGVhZCgmaGVhZCwgcmVwbywgcGF0aCkpIDwgMCkgeworCQlnaXRlcnJfc2V0KEdJVEVSUl9SRUZFUkVOQ0UsICJjb3VsZCBub3QgcmVhZCBIRUFEIHdoZW4gcmVuYW1pbmcgcmVmZXJlbmNlcyIpOworCQlnb3RvIG91dDsKKwl9CisKKwlpZiAoKGdpdGRpciA9IGdpdF9wYXRoX2Rpcm5hbWUocGF0aCkpID09IE5VTEwpIHsKKwkJZXJyb3IgPSAtMTsKKwkJZ290byBvdXQ7CisJfQorCisJaWYgKGdpdF9yZWZlcmVuY2VfdHlwZShoZWFkKSAhPSBHSVRfUkVGX1NZTUJPTElDIHx8CisJICAgIGdpdF9fc3RyY21wKGhlYWQtPnRhcmdldC5zeW1ib2xpYywgZGF0YS0+b2xkX25hbWUpICE9IDApIHsKKwkJZXJyb3IgPSAwOworCQlnb3RvIG91dDsKKwl9CisKKwkvKiBVcGRhdGUgSEVBRCBpdCB3YXMgcG9pbnRpbmcgdG8gdGhlIHJlZmVyZW5jZSBiZWluZyByZW5hbWVkICovCisJaWYgKChlcnJvciA9IGdpdF9yZXBvc2l0b3J5X2NyZWF0ZV9oZWFkKGdpdGRpciwgZGF0YS0+bmV3X25hbWUpKSA8IDApIHsKKwkJZ2l0ZXJyX3NldChHSVRFUlJfUkVGRVJFTkNFLCAiZmFpbGVkIHRvIHVwZGF0ZSBIRUFEIGFmdGVyIHJlbmFtaW5nIHJlZmVyZW5jZSIpOworCQlnb3RvIG91dDsKKwl9CisKK291dDoKKwlnaXRfcmVmZXJlbmNlX2ZyZWUoaGVhZCk7CisJZ2l0X19mcmVlKGdpdGRpcik7CisKKwlyZXR1cm4gZXJyb3I7Cit9CisKIHN0YXRpYyBpbnQgcmVmZXJlbmNlX19yZW5hbWUoZ2l0X3JlZmVyZW5jZSAqKm91dCwgZ2l0X3JlZmVyZW5jZSAqcmVmLCBjb25zdCBjaGFyICpuZXdfbmFtZSwgaW50IGZvcmNlLAogCQkJCSBjb25zdCBnaXRfc2lnbmF0dXJlICpzaWduYXR1cmUsIGNvbnN0IGNoYXIgKm1lc3NhZ2UpCiB7CisJZ2l0X3JlcG9zaXRvcnkgKnJlcG87CiAJZ2l0X3JlZm5hbWVfdCBub3JtYWxpemVkOwogCWJvb2wgc2hvdWxkX2hlYWRfYmVfdXBkYXRlZCA9IGZhbHNlOwogCWludCBlcnJvciA9IDA7CiAKIAlhc3NlcnQocmVmICYmIG5ld19uYW1lICYmIHNpZ25hdHVyZSk7CiAKLQlpZiAoKGVycm9yID0gcmVmZXJlbmNlX25vcm1hbGl6ZV9mb3JfcmVwbygKLQkJbm9ybWFsaXplZCwgZ2l0X3JlZmVyZW5jZV9vd25lcihyZWYpLCBuZXdfbmFtZSwgdHJ1ZSkpIDwgMCkKLQkJcmV0dXJuIGVycm9yOworCXJlcG8gPSBnaXRfcmVmZXJlbmNlX293bmVyKHJlZik7CiAKKwlpZiAoKGVycm9yID0gcmVmZXJlbmNlX25vcm1hbGl6ZV9mb3JfcmVwbygKKwkJbm9ybWFsaXplZCwgcmVwbywgbmV3X25hbWUsIHRydWUpKSA8IDApCisJCXJldHVybiBlcnJvcjsKIAogCS8qIENoZWNrIGlmIHdlIGhhdmUgdG8gdXBkYXRlIEhFQUQuICovCiAJaWYgKChlcnJvciA9IGdpdF9icmFuY2hfaXNfaGVhZChyZWYpKSA8IDApCkBAIC02MDUsMTQgKzY4MCwxOCBAQAogCWlmICgoZXJyb3IgPSBnaXRfcmVmZGJfcmVuYW1lKG91dCwgcmVmLT5kYiwgcmVmLT5uYW1lLCBub3JtYWxpemVkLCBmb3JjZSwgc2lnbmF0dXJlLCBtZXNzYWdlKSkgPCAwKQogCQlyZXR1cm4gZXJyb3I7CiAKLQkvKiBVcGRhdGUgSEVBRCBpdCB3YXMgcG9pbnRpbmcgdG8gdGhlIHJlZmVyZW5jZSBiZWluZyByZW5hbWVkICovCi0JaWYgKHNob3VsZF9oZWFkX2JlX3VwZGF0ZWQgJiYKLQkJKGVycm9yID0gZ2l0X3JlcG9zaXRvcnlfc2V0X2hlYWQocmVmLT5kYi0+cmVwbywgbm9ybWFsaXplZCkpIDwgMCkgewotCQlnaXRlcnJfc2V0KEdJVEVSUl9SRUZFUkVOQ0UsICJmYWlsZWQgdG8gdXBkYXRlIEhFQUQgYWZ0ZXIgcmVuYW1pbmcgcmVmZXJlbmNlIik7Ci0JCXJldHVybiBlcnJvcjsKKwkvKiBVcGRhdGUgSEVBRCBpZiBpdCB3YXMgcG9pbnRpbmcgdG8gdGhlIHJlZmVyZW5jZSBiZWluZyByZW5hbWVkICovCisJaWYgKHNob3VsZF9oZWFkX2JlX3VwZGF0ZWQpIHsKKwkJZXJyb3IgPSBnaXRfcmVwb3NpdG9yeV9zZXRfaGVhZChyZWYtPmRiLT5yZXBvLCBub3JtYWxpemVkKTsKKwl9IGVsc2UgeworCQlyZW5hbWVfY2JfZGF0YSBwYXlsb2FkOworCQlwYXlsb2FkLm9sZF9uYW1lID0gcmVmLT5uYW1lOworCQltZW1jcHkoJnBheWxvYWQubmV3X25hbWUsICZub3JtYWxpemVkLCBzaXplb2Yobm9ybWFsaXplZCkpOworCisJCWVycm9yID0gZ2l0X3JlcG9zaXRvcnlfZm9yZWFjaF9oZWFkKHJlcG8sIHVwZGF0ZV93dF9oZWFkcywgJnBheWxvYWQpOwogCX0KIAotCXJldHVybiAwOworCXJldHVybiBlcnJvcjsKIH0KIAogCkBAIC0xMTMyLDYgKzEyMTEsMTggQEAKIAlyZXR1cm4gZXJyb3I7CiB9CiAKK3N0YXRpYyBjb25zdCBjaGFyICpjb21taXRfdHlwZShjb25zdCBnaXRfY29tbWl0ICpjb21taXQpCit7CisJdW5zaWduZWQgaW50IGNvdW50ID0gZ2l0X2NvbW1pdF9wYXJlbnRjb3VudChjb21taXQpOworCisJaWYgKGNvdW50ID49IDIpCisJCXJldHVybiAiIChtZXJnZSkiOworCWVsc2UgaWYgKGNvdW50ID09IDApCisJCXJldHVybiAiIChpbml0aWFsKSI7CisJZWxzZQorCQlyZXR1cm4gIiI7Cit9CisKIGludCBnaXRfcmVmZXJlbmNlX191cGRhdGVfZm9yX2NvbW1pdCgKIAlnaXRfcmVwb3NpdG9yeSAqcmVwbywKIAlnaXRfcmVmZXJlbmNlICpyZWYsCkBAIC0xMTQ4LDcgKzEyMzksNyBAQAogCWlmICgoZXJyb3IgPSBnaXRfY29tbWl0X2xvb2t1cCgmY29tbWl0LCByZXBvLCBpZCkpIDwgMCB8fAogCQkoZXJyb3IgPSBnaXRfYnVmX3ByaW50ZigmcmVmbG9nX21zZywgIiVzJXM6ICVzIiwKIAkJCW9wZXJhdGlvbiA/IG9wZXJhdGlvbiA6ICJjb21taXQiLAotCQkJZ2l0X2NvbW1pdF9wYXJlbnRjb3VudChjb21taXQpID09IDAgPyAiIChpbml0aWFsKSIgOiAiIiwKKwkJCWNvbW1pdF90eXBlKGNvbW1pdCksCiAJCQlnaXRfY29tbWl0X3N1bW1hcnkoY29tbWl0KSkpIDwgMCkKIAkJZ290byBkb25lOwogCmRpZmYgLS1naXQgYS9zcmMvcmVmcy5oIGIvc3JjL3JlZnMuaAppbmRleCA4MGU2NTVhLi4wYzkwZGIzIDEwMDY0NAotLS0gYS9zcmMvcmVmcy5oCisrKyBiL3NyYy9yZWZzLmgKQEAgLTEwNyw2ICsxMDcsMjAgQEAKIAljb25zdCBjaGFyICpuYW1lLAogCWludCBtYXhfZGVyZWYpOwogCisvKioKKyAqIFJlYWQgcmVmZXJlbmNlIGZyb20gYSBmaWxlLgorICoKKyAqIFRoaXMgZnVuY3Rpb24gd2lsbCByZWFkIGluIHRoZSBmaWxlIGF0IGBwYXRoYC4gSWYgaXQgaXMgYQorICogc3ltcmVmLCBpdCB3aWxsIHJldHVybiBhIG5ldyB1bnJlc29sdmVkIHN5bWJvbGljIHJlZmVyZW5jZQorICogd2l0aCB0aGUgZ2l2ZW4gbmFtZSBwb2ludGluZyB0byB0aGUgcmVmZXJlbmNlIHBvaW50ZWQgdG8gYnkKKyAqIHRoZSBmaWxlLiBJZiBpdCBpcyBub3QgYSBzeW1ib2xpYyByZWZlcmVuY2UsIGl0IHdpbGwgcmV0dXJuCisgKiB0aGUgcmVzb2x2ZWQgcmVmZXJlbmNlLgorICovCitpbnQgZ2l0X3JlZmVyZW5jZV9fcmVhZF9oZWFkKAorCWdpdF9yZWZlcmVuY2UgKipvdXQsCisJZ2l0X3JlcG9zaXRvcnkgKnJlcG8sCisJY29uc3QgY2hhciAqcGF0aCk7CisKIGludCBnaXRfcmVmZXJlbmNlX19sb2dfc2lnbmF0dXJlKGdpdF9zaWduYXR1cmUgKipvdXQsIGdpdF9yZXBvc2l0b3J5ICpyZXBvKTsKIAogLyoqIFVwZGF0ZSBhIHJlZmVyZW5jZSBhZnRlciBhIGNvbW1pdC4gKi8KZGlmZiAtLWdpdCBhL3NyYy9yZW1vdGUuYyBiL3NyYy9yZW1vdGUuYwppbmRleCA4ZGE3MzQ2Li5iZDhiM2NmIDEwMDY0NAotLS0gYS9zcmMvcmVtb3RlLmMKKysrIGIvc3JjL3JlbW90ZS5jCkBAIC0xOTIsNyArMTkyLDcgQEAKIHN0YXRpYyBpbnQgY3JlYXRlX2ludGVybmFsKGdpdF9yZW1vdGUgKipvdXQsIGdpdF9yZXBvc2l0b3J5ICpyZXBvLCBjb25zdCBjaGFyICpuYW1lLCBjb25zdCBjaGFyICp1cmwsIGNvbnN0IGNoYXIgKmZldGNoKQogewogCWdpdF9yZW1vdGUgKnJlbW90ZTsKLQlnaXRfY29uZmlnICpjb25maWcgPSBOVUxMOworCWdpdF9jb25maWcgKmNvbmZpZ19ybyA9IE5VTEwsICpjb25maWdfcnc7CiAJZ2l0X2J1ZiBjYW5vbmljYWxfdXJsID0gR0lUX0JVRl9JTklUOwogCWdpdF9idWYgdmFyID0gR0lUX0JVRl9JTklUOwogCWludCBlcnJvciA9IC0xOwpAQCAtMjAwLDcgKzIwMCw3IEBACiAJLyogbmFtZSBpcyBvcHRpb25hbCAqLwogCWFzc2VydChvdXQgJiYgcmVwbyAmJiB1cmwpOwogCi0JaWYgKChlcnJvciA9IGdpdF9yZXBvc2l0b3J5X2NvbmZpZ19fd2Vha3B0cigmY29uZmlnLCByZXBvKSkgPCAwKQorCWlmICgoZXJyb3IgPSBnaXRfcmVwb3NpdG9yeV9jb25maWdfc25hcHNob3QoJmNvbmZpZ19ybywgcmVwbykpIDwgMCkKIAkJcmV0dXJuIGVycm9yOwogCiAJcmVtb3RlID0gZ2l0X19jYWxsb2MoMSwgc2l6ZW9mKGdpdF9yZW1vdGUpKTsKQEAgLTIxMiw3ICsyMTIsOCBAQAogCQkoZXJyb3IgPSBjYW5vbmljYWxpemVfdXJsKCZjYW5vbmljYWxfdXJsLCB1cmwpKSA8IDApCiAJCWdvdG8gb25fZXJyb3I7CiAKLQlyZW1vdGUtPnVybCA9IGFwcGx5X2luc3RlYWRvZihyZXBvLT5fY29uZmlnLCBjYW5vbmljYWxfdXJsLnB0ciwgR0lUX0RJUkVDVElPTl9GRVRDSCk7CisJcmVtb3RlLT51cmwgPSBhcHBseV9pbnN0ZWFkb2YoY29uZmlnX3JvLCBjYW5vbmljYWxfdXJsLnB0ciwgR0lUX0RJUkVDVElPTl9GRVRDSCk7CisJR0lURVJSX0NIRUNLX0FMTE9DKHJlbW90ZS0+dXJsKTsKIAogCWlmIChuYW1lICE9IE5VTEwpIHsKIAkJcmVtb3RlLT5uYW1lID0gZ2l0X19zdHJkdXAobmFtZSk7CkBAIC0yMjEsNyArMjIyLDggQEAKIAkJaWYgKChlcnJvciA9IGdpdF9idWZfcHJpbnRmKCZ2YXIsIENPTkZJR19VUkxfRk1ULCBuYW1lKSkgPCAwKQogCQkJZ290byBvbl9lcnJvcjsKIAotCQlpZiAoKGVycm9yID0gZ2l0X2NvbmZpZ19zZXRfc3RyaW5nKGNvbmZpZywgdmFyLnB0ciwgY2Fub25pY2FsX3VybC5wdHIpKSA8IDApCisJCWlmICgoZXJyb3IgPSBnaXRfcmVwb3NpdG9yeV9jb25maWdfX3dlYWtwdHIoJmNvbmZpZ19ydywgcmVwbykpIDwgMCB8fAorCQkJKGVycm9yID0gZ2l0X2NvbmZpZ19zZXRfc3RyaW5nKGNvbmZpZ19ydywgdmFyLnB0ciwgY2Fub25pY2FsX3VybC5wdHIpKSA8IDApCiAJCQlnb3RvIG9uX2Vycm9yOwogCX0KIApAQCAtMjMzLDEwICsyMzUsNyBAQAogCQlpZiAobmFtZSAmJiAoZXJyb3IgPSB3cml0ZV9hZGRfcmVmc3BlYyhyZXBvLCBuYW1lLCBmZXRjaCwgdHJ1ZSkpIDwgMCkKIAkJCWdvdG8gb25fZXJyb3I7CiAKLQkJaWYgKChlcnJvciA9IGdpdF9yZXBvc2l0b3J5X2NvbmZpZ19zbmFwc2hvdCgmY29uZmlnLCByZXBvKSkgPCAwKQotCQkJZ290byBvbl9lcnJvcjsKLQotCQlpZiAoKGVycm9yID0gbG9va3VwX3JlbW90ZV9wcnVuZV9jb25maWcocmVtb3RlLCBjb25maWcsIG5hbWUpKSA8IDApCisJCWlmICgoZXJyb3IgPSBsb29rdXBfcmVtb3RlX3BydW5lX2NvbmZpZyhyZW1vdGUsIGNvbmZpZ19ybywgbmFtZSkpIDwgMCkKIAkJCWdvdG8gb25fZXJyb3I7CiAKIAkJLyogTW92ZSB0aGUgZGF0YSBvdmVyIHRvIHdoZXJlIHRoZSBtYXRjaGluZyBmdW5jdGlvbnMgY2FuIGZpbmQgdGhlbSAqLwpAQCAtMjYwLDcgKzI1OSw3IEBACiAJaWYgKGVycm9yKQogCQlnaXRfcmVtb3RlX2ZyZWUocmVtb3RlKTsKIAotCWdpdF9jb25maWdfZnJlZShjb25maWcpOworCWdpdF9jb25maWdfZnJlZShjb25maWdfcm8pOwogCWdpdF9idWZfZnJlZSgmY2Fub25pY2FsX3VybCk7CiAJZ2l0X2J1Zl9mcmVlKCZ2YXIpOwogCXJldHVybiBlcnJvcjsKQEAgLTc3MCw4ICs3NjksMTIgQEAKIAkJZ290byBmb3VuZDsKIAl9CiAKLQkvKiBIVFRQX1BST1hZIC8gSFRUUFNfUFJPWFkgZW52aXJvbm1lbnQgdmFyaWFibGVzICovCi0JZXJyb3IgPSBnaXRfX2dldGVudigmdmFsLCB1c2Vfc3NsID8gIkhUVFBTX1BST1hZIiA6ICJIVFRQX1BST1hZIik7CisJLyogaHR0cF9wcm94eSAvIGh0dHBzX3Byb3h5IGVudmlyb25tZW50IHZhcmlhYmxlcyAqLworCWVycm9yID0gZ2l0X19nZXRlbnYoJnZhbCwgdXNlX3NzbCA/ICJodHRwc19wcm94eSIgOiAiaHR0cF9wcm94eSIpOworCisJLyogdHJ5IHVwcGVyY2FzZSBlbnZpcm9ubWVudCB2YXJpYWJsZXMgKi8KKwlpZiAoZXJyb3IgPT0gR0lUX0VOT1RGT1VORCkKKwkJZXJyb3IgPSBnaXRfX2dldGVudigmdmFsLCB1c2Vfc3NsID8gIkhUVFBTX1BST1hZIiA6ICJIVFRQX1BST1hZIik7CiAKIAlpZiAoZXJyb3IgPCAwKSB7CiAJCWlmIChlcnJvciA9PSBHSVRfRU5PVEZPVU5EKSB7CkBAIC0yNDA4LDcgKzI0MTEsNyBAQAogCQlwcm94eSA9ICZvcHRzLT5wcm94eV9vcHRzOwogCX0KIAotCWFzc2VydChyZW1vdGUgJiYgcmVmc3BlY3MpOworCWFzc2VydChyZW1vdGUpOwogCiAJaWYgKChlcnJvciA9IGdpdF9yZW1vdGVfY29ubmVjdChyZW1vdGUsIEdJVF9ESVJFQ1RJT05fUFVTSCwgY2JzLCBwcm94eSwgY3VzdG9tX2hlYWRlcnMpKSA8IDApCiAJCXJldHVybiBlcnJvcjsKZGlmZiAtLWdpdCBhL3NyYy9yZXBvc2l0b3J5LmMgYi9zcmMvcmVwb3NpdG9yeS5jCmluZGV4IDIxODU2MzIuLmM3YjQwZmQgMTAwNjQ0Ci0tLSBhL3NyYy9yZXBvc2l0b3J5LmMKKysrIGIvc3JjL3JlcG9zaXRvcnkuYwpAQCAtMjgsMTYgKzI4LDQyIEBACiAjaW5jbHVkZSAiZGlmZl9kcml2ZXIuaCIKICNpbmNsdWRlICJhbm5vdGF0ZWRfY29tbWl0LmgiCiAjaW5jbHVkZSAic3VibW9kdWxlLmgiCisjaW5jbHVkZSAid29ya3RyZWUuaCIKIAotR0lUX19VU0VfU1RSTUFQCiAjaW5jbHVkZSAic3RybWFwLmgiCiAKICNpZmRlZiBHSVRfV0lOMzIKICMgaW5jbHVkZSAid2luMzIvdzMyX3V0aWwuaCIKICNlbmRpZgogCitib29sIGdpdF9yZXBvc2l0b3J5X19mc3luY19naXRkaXIgPSBmYWxzZTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCB7CisgICAgZ2l0X3JlcG9zaXRvcnlfaXRlbV90IHBhcmVudDsKKyAgICBjb25zdCBjaGFyICpuYW1lOworICAgIGJvb2wgZGlyZWN0b3J5OworfSBpdGVtc1tdID0geworCXsgR0lUX1JFUE9TSVRPUllfSVRFTV9HSVRESVIsIE5VTEwsIHRydWUgfSwKKwl7IEdJVF9SRVBPU0lUT1JZX0lURU1fV09SS0RJUiwgTlVMTCwgdHJ1ZSB9LAorCXsgR0lUX1JFUE9TSVRPUllfSVRFTV9DT01NT05ESVIsIE5VTEwsIHRydWUgfSwKKwl7IEdJVF9SRVBPU0lUT1JZX0lURU1fR0lURElSLCAiaW5kZXgiLCBmYWxzZSB9LAorCXsgR0lUX1JFUE9TSVRPUllfSVRFTV9DT01NT05ESVIsICJvYmplY3RzIiwgdHJ1ZSB9LAorCXsgR0lUX1JFUE9TSVRPUllfSVRFTV9DT01NT05ESVIsICJyZWZzIiwgdHJ1ZSB9LAorCXsgR0lUX1JFUE9TSVRPUllfSVRFTV9DT01NT05ESVIsICJwYWNrZWQtcmVmcyIsIGZhbHNlIH0sCisJeyBHSVRfUkVQT1NJVE9SWV9JVEVNX0NPTU1PTkRJUiwgInJlbW90ZXMiLCB0cnVlIH0sCisJeyBHSVRfUkVQT1NJVE9SWV9JVEVNX0NPTU1PTkRJUiwgImNvbmZpZyIsIGZhbHNlIH0sCisJeyBHSVRfUkVQT1NJVE9SWV9JVEVNX0NPTU1PTkRJUiwgImluZm8iLCB0cnVlIH0sCisJeyBHSVRfUkVQT1NJVE9SWV9JVEVNX0NPTU1PTkRJUiwgImhvb2tzIiwgdHJ1ZSB9LAorCXsgR0lUX1JFUE9TSVRPUllfSVRFTV9DT01NT05ESVIsICJsb2dzIiwgdHJ1ZSB9LAorCXsgR0lUX1JFUE9TSVRPUllfSVRFTV9HSVRESVIsICJtb2R1bGVzIiwgdHJ1ZSB9LAorCXsgR0lUX1JFUE9TSVRPUllfSVRFTV9DT01NT05ESVIsICJ3b3JrdHJlZXMiLCB0cnVlIH0KK307CisKIHN0YXRpYyBpbnQgY2hlY2tfcmVwb3NpdG9yeWZvcm1hdHZlcnNpb24oZ2l0X2NvbmZpZyAqY29uZmlnKTsKIAorI2RlZmluZSBHSVRfQ09NTU9ORElSX0ZJTEUgImNvbW1vbmRpciIKKyNkZWZpbmUgR0lUX0dJVERJUl9GSUxFICJnaXRkaXIiCisKICNkZWZpbmUgR0lUX0ZJTEVfQ09OVEVOVF9QUkVGSVggImdpdGRpcjoiCiAKICNkZWZpbmUgR0lUX0JSQU5DSF9NQVNURVIgIm1hc3RlciIKQEAgLTE0MSw4ICsxNjcsOSBAQAogCQlnaXRfYnVmX2ZyZWUoZ2l0X2FycmF5X2dldChyZXBvLT5yZXNlcnZlZF9uYW1lcywgaSkpOwogCWdpdF9hcnJheV9jbGVhcihyZXBvLT5yZXNlcnZlZF9uYW1lcyk7CiAKLQlnaXRfX2ZyZWUocmVwby0+cGF0aF9naXRsaW5rKTsKLQlnaXRfX2ZyZWUocmVwby0+cGF0aF9yZXBvc2l0b3J5KTsKKwlnaXRfX2ZyZWUocmVwby0+Z2l0bGluayk7CisJZ2l0X19mcmVlKHJlcG8tPmdpdGRpcik7CisJZ2l0X19mcmVlKHJlcG8tPmNvbW1vbmRpcik7CiAJZ2l0X19mcmVlKHJlcG8tPndvcmtkaXIpOwogCWdpdF9fZnJlZShyZXBvLT5uYW1lc3BhY2UpOwogCWdpdF9fZnJlZShyZXBvLT5pZGVudF9uYW1lKTsKQEAgLTE1NywxNyArMTg0LDQxIEBACiAgKgogICogT3BlbiBhIHJlcG9zaXRvcnkgb2JqZWN0IGZyb20gaXRzIHBhdGgKICAqLwotc3RhdGljIGJvb2wgdmFsaWRfcmVwb3NpdG9yeV9wYXRoKGdpdF9idWYgKnJlcG9zaXRvcnlfcGF0aCkKK3N0YXRpYyBib29sIHZhbGlkX3JlcG9zaXRvcnlfcGF0aChnaXRfYnVmICpyZXBvc2l0b3J5X3BhdGgsIGdpdF9idWYgKmNvbW1vbl9wYXRoKQogewotCS8qIENoZWNrIE9CSkVDVFNfRElSIGZpcnN0LCBzaW5jZSBpdCB3aWxsIGdlbmVyYXRlIHRoZSBsb25nZXN0IHBhdGggbmFtZSAqLwotCWlmIChnaXRfcGF0aF9jb250YWluc19kaXIocmVwb3NpdG9yeV9wYXRoLCBHSVRfT0JKRUNUU19ESVIpID09IGZhbHNlKQotCQlyZXR1cm4gZmFsc2U7CisJLyogQ2hlY2sgaWYgd2UgaGF2ZSBhIHNlcGFyYXRlIGNvbW1vbmRpciAoZS5nLiB3ZSBoYXZlIGEKKwkgKiB3b3JrdHJlZSkgKi8KKwlpZiAoZ2l0X3BhdGhfY29udGFpbnNfZmlsZShyZXBvc2l0b3J5X3BhdGgsIEdJVF9DT01NT05ESVJfRklMRSkpIHsKKwkJZ2l0X2J1ZiBjb21tb25fbGluayAgPSBHSVRfQlVGX0lOSVQ7CisJCWdpdF9idWZfam9pbnBhdGgoJmNvbW1vbl9saW5rLCByZXBvc2l0b3J5X3BhdGgtPnB0ciwgR0lUX0NPTU1PTkRJUl9GSUxFKTsKKworCQlnaXRfZnV0aWxzX3JlYWRidWZmZXIoJmNvbW1vbl9saW5rLCBjb21tb25fbGluay5wdHIpOworCQlnaXRfYnVmX3J0cmltKCZjb21tb25fbGluayk7CisKKwkJaWYgKGdpdF9wYXRoX2lzX3JlbGF0aXZlKGNvbW1vbl9saW5rLnB0cikpIHsKKwkJCWdpdF9idWZfam9pbnBhdGgoY29tbW9uX3BhdGgsIHJlcG9zaXRvcnlfcGF0aC0+cHRyLCBjb21tb25fbGluay5wdHIpOworCQl9IGVsc2UgeworCQkJZ2l0X2J1Zl9zd2FwKGNvbW1vbl9wYXRoLCAmY29tbW9uX2xpbmspOworCQl9CisKKwkJZ2l0X2J1Zl9mcmVlKCZjb21tb25fbGluayk7CisJfQorCWVsc2UgeworCQlnaXRfYnVmX3NldChjb21tb25fcGF0aCwgcmVwb3NpdG9yeV9wYXRoLT5wdHIsIHJlcG9zaXRvcnlfcGF0aC0+c2l6ZSk7CisJfQorCisJLyogTWFrZSBzdXJlIHRoZSBjb21tb25kaXIgcGF0aCBhbHdheXMgaGFzIGEgdHJhaWxpbmcgKiBzbGFzaCAqLworCWlmIChnaXRfYnVmX3JmaW5kKGNvbW1vbl9wYXRoLCAnLycpICE9IChzc2l6ZV90KWNvbW1vbl9wYXRoLT5zaXplIC0gMSkKKwkJZ2l0X2J1Zl9wdXRjKGNvbW1vbl9wYXRoLCAnLycpOwogCiAJLyogRW5zdXJlIEhFQUQgZmlsZSBleGlzdHMgKi8KIAlpZiAoZ2l0X3BhdGhfY29udGFpbnNfZmlsZShyZXBvc2l0b3J5X3BhdGgsIEdJVF9IRUFEX0ZJTEUpID09IGZhbHNlKQogCQlyZXR1cm4gZmFsc2U7CiAKLQlpZiAoZ2l0X3BhdGhfY29udGFpbnNfZGlyKHJlcG9zaXRvcnlfcGF0aCwgR0lUX1JFRlNfRElSKSAgPT0gZmFsc2UpCisJLyogQ2hlY2sgZmlsZXMgaW4gY29tbW9uIGRpciAqLworCWlmIChnaXRfcGF0aF9jb250YWluc19kaXIoY29tbW9uX3BhdGgsIEdJVF9PQkpFQ1RTX0RJUikgPT0gZmFsc2UpCisJCXJldHVybiBmYWxzZTsKKwlpZiAoZ2l0X3BhdGhfY29udGFpbnNfZGlyKGNvbW1vbl9wYXRoLCBHSVRfUkVGU19ESVIpID09IGZhbHNlKQogCQlyZXR1cm4gZmFsc2U7CiAKIAlyZXR1cm4gdHJ1ZTsKQEAgLTIwNiw2ICsyNTcsNyBAQAogCUdJVEVSUl9DSEVDS19BTExPQyhyZXBvKTsKIAogCXJlcG8tPmlzX2JhcmUgPSAxOworCXJlcG8tPmlzX3dvcmt0cmVlID0gMDsKIAogCXJldHVybiAwOwogfQpAQCAtMjI1LDkgKzI3NywxMCBAQAogCiBzdGF0aWMgaW50IGxvYWRfd29ya2RpcihnaXRfcmVwb3NpdG9yeSAqcmVwbywgZ2l0X2NvbmZpZyAqY29uZmlnLCBnaXRfYnVmICpwYXJlbnRfcGF0aCkKIHsKLQlpbnQgICAgICAgICBlcnJvcjsKKwlpbnQgZXJyb3I7CiAJZ2l0X2NvbmZpZ19lbnRyeSAqY2U7Ci0JZ2l0X2J1ZiAgICAgd29ya3RyZWUgPSBHSVRfQlVGX0lOSVQ7CisJZ2l0X2J1ZiB3b3JrdHJlZSA9IEdJVF9CVUZfSU5JVDsKKwlnaXRfYnVmIHBhdGggPSBHSVRfQlVGX0lOSVQ7CiAKIAlpZiAocmVwby0+aXNfYmFyZSkKIAkJcmV0dXJuIDA7CkBAIC0yMzYsOSArMjg5LDI2IEBACiAJCQkmY2UsIGNvbmZpZywgImNvcmUud29ya3RyZWUiLCBmYWxzZSkpIDwgMCkKIAkJcmV0dXJuIGVycm9yOwogCi0JaWYgKGNlICYmIGNlLT52YWx1ZSkgeworCWlmIChyZXBvLT5pc193b3JrdHJlZSkgeworCQljaGFyICpnaXRsaW5rID0gZ2l0X3dvcmt0cmVlX19yZWFkX2xpbmsocmVwby0+Z2l0ZGlyLCBHSVRfR0lURElSX0ZJTEUpOworCQlpZiAoIWdpdGxpbmspIHsKKwkJCWVycm9yID0gLTE7CisJCQlnb3RvIGNsZWFudXA7CisJCX0KKworCQlnaXRfYnVmX2F0dGFjaCgmd29ya3RyZWUsIGdpdGxpbmssIDApOworCisJCWlmICgoZ2l0X3BhdGhfZGlybmFtZV9yKCZ3b3JrdHJlZSwgd29ya3RyZWUucHRyKSkgPCAwIHx8CisJCSAgICBnaXRfcGF0aF90b19kaXIoJndvcmt0cmVlKSA8IDApIHsKKwkJCWVycm9yID0gLTE7CisJCQlnb3RvIGNsZWFudXA7CisJCX0KKworCQlyZXBvLT53b3JrZGlyID0gZ2l0X2J1Zl9kZXRhY2goJndvcmt0cmVlKTsKKwl9CisJZWxzZSBpZiAoY2UgJiYgY2UtPnZhbHVlKSB7CiAJCWlmICgoZXJyb3IgPSBnaXRfcGF0aF9wcmV0dGlmeV9kaXIoCi0JCQkJJndvcmt0cmVlLCBjZS0+dmFsdWUsIHJlcG8tPnBhdGhfcmVwb3NpdG9yeSkpIDwgMCkKKwkJCQkmd29ya3RyZWUsIGNlLT52YWx1ZSwgcmVwby0+Z2l0ZGlyKSkgPCAwKQogCQkJZ290byBjbGVhbnVwOwogCiAJCXJlcG8tPndvcmtkaXIgPSBnaXRfYnVmX2RldGFjaCgmd29ya3RyZWUpOwpAQCAtMjQ2LDcgKzMxNiw3IEBACiAJZWxzZSBpZiAocGFyZW50X3BhdGggJiYgZ2l0X3BhdGhfaXNkaXIocGFyZW50X3BhdGgtPnB0cikpCiAJCXJlcG8tPndvcmtkaXIgPSBnaXRfYnVmX2RldGFjaChwYXJlbnRfcGF0aCk7CiAJZWxzZSB7Ci0JCWlmIChnaXRfcGF0aF9kaXJuYW1lX3IoJndvcmt0cmVlLCByZXBvLT5wYXRoX3JlcG9zaXRvcnkpIDwgMCB8fAorCQlpZiAoZ2l0X3BhdGhfZGlybmFtZV9yKCZ3b3JrdHJlZSwgcmVwby0+Z2l0ZGlyKSA8IDAgfHwKIAkJICAgIGdpdF9wYXRoX3RvX2Rpcigmd29ya3RyZWUpIDwgMCkgewogCQkJZXJyb3IgPSAtMTsKIAkJCWdvdG8gY2xlYW51cDsKQEAgLTI1Nyw2ICszMjcsNyBAQAogCiAJR0lURVJSX0NIRUNLX0FMTE9DKHJlcG8tPndvcmtkaXIpOwogY2xlYW51cDoKKwlnaXRfYnVmX2ZyZWUoJnBhdGgpOwogCWdpdF9jb25maWdfZW50cnlfZnJlZShjZSk7CiAJcmV0dXJuIGVycm9yOwogfQpAQCAtMzUzLDkgKzQyNCwxMCBAQAogfQogCiBzdGF0aWMgaW50IGZpbmRfcmVwbygKLQlnaXRfYnVmICpyZXBvX3BhdGgsCi0JZ2l0X2J1ZiAqcGFyZW50X3BhdGgsCi0JZ2l0X2J1ZiAqbGlua19wYXRoLAorCWdpdF9idWYgKmdpdGRpcl9wYXRoLAorCWdpdF9idWYgKndvcmtkaXJfcGF0aCwKKwlnaXRfYnVmICpnaXRsaW5rX3BhdGgsCisJZ2l0X2J1ZiAqY29tbW9uZGlyX3BhdGgsCiAJY29uc3QgY2hhciAqc3RhcnRfcGF0aCwKIAl1aW50MzJfdCBmbGFncywKIAljb25zdCBjaGFyICpjZWlsaW5nX2RpcnMpCkBAIC0zNjMsMTMgKzQzNSwxNCBAQAogCWludCBlcnJvcjsKIAlnaXRfYnVmIHBhdGggPSBHSVRfQlVGX0lOSVQ7CiAJZ2l0X2J1ZiByZXBvX2xpbmsgPSBHSVRfQlVGX0lOSVQ7CisJZ2l0X2J1ZiBjb21tb25fbGluayA9IEdJVF9CVUZfSU5JVDsKIAlzdHJ1Y3Qgc3RhdCBzdDsKIAlkZXZfdCBpbml0aWFsX2RldmljZSA9IDA7CiAJaW50IG1pbl9pdGVyYXRpb25zOwogCWJvb2wgaW5fZG90X2dpdDsKIAlzaXplX3QgY2VpbGluZ19vZmZzZXQgPSAwOwogCi0JZ2l0X2J1Zl9mcmVlKHJlcG9fcGF0aCk7CisJZ2l0X2J1Zl9jbGVhcihnaXRkaXJfcGF0aCk7CiAKIAllcnJvciA9IGdpdF9wYXRoX3ByZXR0aWZ5KCZwYXRoLCBzdGFydF9wYXRoLCBOVUxMKTsKIAlpZiAoZXJyb3IgPCAwKQpAQCAtNDA5LDkgKzQ4MiwxNiBAQAogCQkJCWJyZWFrOwogCiAJCQlpZiAoU19JU0RJUihzdC5zdF9tb2RlKSkgewotCQkJCWlmICh2YWxpZF9yZXBvc2l0b3J5X3BhdGgoJnBhdGgpKSB7CisJCQkJaWYgKHZhbGlkX3JlcG9zaXRvcnlfcGF0aCgmcGF0aCwgJmNvbW1vbl9saW5rKSkgewogCQkJCQlnaXRfcGF0aF90b19kaXIoJnBhdGgpOwotCQkJCQlnaXRfYnVmX3NldChyZXBvX3BhdGgsIHBhdGgucHRyLCBwYXRoLnNpemUpOworCQkJCQlnaXRfYnVmX3NldChnaXRkaXJfcGF0aCwgcGF0aC5wdHIsIHBhdGguc2l6ZSk7CisKKwkJCQkJaWYgKGdpdGxpbmtfcGF0aCkKKwkJCQkJCWdpdF9idWZfYXR0YWNoKGdpdGxpbmtfcGF0aCwKKwkJCQkJCQlnaXRfd29ya3RyZWVfX3JlYWRfbGluayhwYXRoLnB0ciwgR0lUX0dJVERJUl9GSUxFKSwgMCk7CisJCQkJCWlmIChjb21tb25kaXJfcGF0aCkKKwkJCQkJCWdpdF9idWZfc3dhcCgmY29tbW9uX2xpbmssIGNvbW1vbmRpcl9wYXRoKTsKKwogCQkJCQlicmVhazsKIAkJCQl9CiAJCQl9CkBAIC00MTksMTEgKzQ5OSwxMyBAQAogCQkJCWVycm9yID0gcmVhZF9naXRmaWxlKCZyZXBvX2xpbmssIHBhdGgucHRyKTsKIAkJCQlpZiAoZXJyb3IgPCAwKQogCQkJCQlicmVhazsKLQkJCQlpZiAodmFsaWRfcmVwb3NpdG9yeV9wYXRoKCZyZXBvX2xpbmspKSB7Ci0JCQkJCWdpdF9idWZfc3dhcChyZXBvX3BhdGgsICZyZXBvX2xpbmspOworCQkJCWlmICh2YWxpZF9yZXBvc2l0b3J5X3BhdGgoJnJlcG9fbGluaywgJmNvbW1vbl9saW5rKSkgeworCQkJCQlnaXRfYnVmX3N3YXAoZ2l0ZGlyX3BhdGgsICZyZXBvX2xpbmspOwogCi0JCQkJCWlmIChsaW5rX3BhdGgpCi0JCQkJCQllcnJvciA9IGdpdF9idWZfcHV0KGxpbmtfcGF0aCwgcGF0aC5wdHIsIHBhdGguc2l6ZSk7CisJCQkJCWlmIChnaXRsaW5rX3BhdGgpCisJCQkJCQllcnJvciA9IGdpdF9idWZfcHV0KGdpdGxpbmtfcGF0aCwgcGF0aC5wdHIsIHBhdGguc2l6ZSk7CisJCQkJCWlmIChjb21tb25kaXJfcGF0aCkKKwkJCQkJCWdpdF9idWZfc3dhcCgmY29tbW9uX2xpbmssIGNvbW1vbmRpcl9wYXRoKTsKIAkJCQl9CiAJCQkJYnJlYWs7CiAJCQl9CkBAIC00NDksMjAgKzUzMSwyMCBAQAogCQkJYnJlYWs7CiAJfQogCi0JaWYgKCFlcnJvciAmJiBwYXJlbnRfcGF0aCAmJiAhKGZsYWdzICYgR0lUX1JFUE9TSVRPUllfT1BFTl9CQVJFKSkgewotCQlpZiAoIWdpdF9idWZfbGVuKHJlcG9fcGF0aCkpCi0JCQlnaXRfYnVmX2NsZWFyKHBhcmVudF9wYXRoKTsKKwlpZiAoIWVycm9yICYmIHdvcmtkaXJfcGF0aCAmJiAhKGZsYWdzICYgR0lUX1JFUE9TSVRPUllfT1BFTl9CQVJFKSkgeworCQlpZiAoIWdpdF9idWZfbGVuKGdpdGRpcl9wYXRoKSkKKwkJCWdpdF9idWZfY2xlYXIod29ya2Rpcl9wYXRoKTsKIAkJZWxzZSB7Ci0JCQlnaXRfcGF0aF9kaXJuYW1lX3IocGFyZW50X3BhdGgsIHBhdGgucHRyKTsKLQkJCWdpdF9wYXRoX3RvX2RpcihwYXJlbnRfcGF0aCk7CisJCQlnaXRfcGF0aF9kaXJuYW1lX3Iod29ya2Rpcl9wYXRoLCBwYXRoLnB0cik7CisJCQlnaXRfcGF0aF90b19kaXIod29ya2Rpcl9wYXRoKTsKIAkJfQotCQlpZiAoZ2l0X2J1Zl9vb20ocGFyZW50X3BhdGgpKQorCQlpZiAoZ2l0X2J1Zl9vb20od29ya2Rpcl9wYXRoKSkKIAkJCXJldHVybiAtMTsKIAl9CiAKIAkvKiBJZiB3ZSBkaWRuJ3QgZmluZCB0aGUgcmVwb3NpdG9yeSwgYW5kIHdlIGRvbid0IGhhdmUgYW55IG90aGVyIGVycm9yCiAJICogdG8gcmVwb3J0LCByZXBvcnQgdGhhdC4gKi8KLQlpZiAoIWdpdF9idWZfbGVuKHJlcG9fcGF0aCkgJiYgIWVycm9yKSB7CisJaWYgKCFnaXRfYnVmX2xlbihnaXRkaXJfcGF0aCkgJiYgIWVycm9yKSB7CiAJCWdpdGVycl9zZXQoR0lURVJSX1JFUE9TSVRPUlksCiAJCQkiY291bGQgbm90IGZpbmQgcmVwb3NpdG9yeSBmcm9tICclcyciLCBzdGFydF9wYXRoKTsKIAkJZXJyb3IgPSBHSVRfRU5PVEZPVU5EOwpAQCAtNDcwLDYgKzU1Miw3IEBACiAKIAlnaXRfYnVmX2ZyZWUoJnBhdGgpOwogCWdpdF9idWZfZnJlZSgmcmVwb19saW5rKTsKKwlnaXRfYnVmX2ZyZWUoJmNvbW1vbl9saW5rKTsKIAlyZXR1cm4gZXJyb3I7CiB9CiAKQEAgLTQ3OCwxNCArNTYxLDE1IEBACiAJY29uc3QgY2hhciAqYmFyZV9wYXRoKQogewogCWludCBlcnJvcjsKLQlnaXRfYnVmIHBhdGggPSBHSVRfQlVGX0lOSVQ7CisJZ2l0X2J1ZiBwYXRoID0gR0lUX0JVRl9JTklULCBjb21tb25fcGF0aCA9IEdJVF9CVUZfSU5JVDsKIAlnaXRfcmVwb3NpdG9yeSAqcmVwbyA9IE5VTEw7CiAKIAlpZiAoKGVycm9yID0gZ2l0X3BhdGhfcHJldHRpZnlfZGlyKCZwYXRoLCBiYXJlX3BhdGgsIE5VTEwpKSA8IDApCiAJCXJldHVybiBlcnJvcjsKIAotCWlmICghdmFsaWRfcmVwb3NpdG9yeV9wYXRoKCZwYXRoKSkgeworCWlmICghdmFsaWRfcmVwb3NpdG9yeV9wYXRoKCZwYXRoLCAmY29tbW9uX3BhdGgpKSB7CiAJCWdpdF9idWZfZnJlZSgmcGF0aCk7CisJCWdpdF9idWZfZnJlZSgmY29tbW9uX3BhdGgpOwogCQlnaXRlcnJfc2V0KEdJVEVSUl9SRVBPU0lUT1JZLCAicGF0aCBpcyBub3QgYSByZXBvc2l0b3J5OiAlcyIsIGJhcmVfcGF0aCk7CiAJCXJldHVybiBHSVRfRU5PVEZPVU5EOwogCX0KQEAgLTQ5MywxMSArNTc3LDE0IEBACiAJcmVwbyA9IHJlcG9zaXRvcnlfYWxsb2MoKTsKIAlHSVRFUlJfQ0hFQ0tfQUxMT0MocmVwbyk7CiAKLQlyZXBvLT5wYXRoX3JlcG9zaXRvcnkgPSBnaXRfYnVmX2RldGFjaCgmcGF0aCk7Ci0JR0lURVJSX0NIRUNLX0FMTE9DKHJlcG8tPnBhdGhfcmVwb3NpdG9yeSk7CisJcmVwby0+Z2l0ZGlyID0gZ2l0X2J1Zl9kZXRhY2goJnBhdGgpOworCUdJVEVSUl9DSEVDS19BTExPQyhyZXBvLT5naXRkaXIpOworCXJlcG8tPmNvbW1vbmRpciA9IGdpdF9idWZfZGV0YWNoKCZjb21tb25fcGF0aCk7CisJR0lURVJSX0NIRUNLX0FMTE9DKHJlcG8tPmNvbW1vbmRpcik7CiAKIAkvKiBvZiBjb3Vyc2Ugd2UncmUgYmFyZSEgKi8KIAlyZXBvLT5pc19iYXJlID0gMTsKKwlyZXBvLT5pc193b3JrdHJlZSA9IDA7CiAJcmVwby0+d29ya2RpciA9IE5VTEw7CiAKIAkqcmVwb19wdHIgPSByZXBvOwpAQCAtNjczLDYgKzc2MCwyOSBAQAogCXJldHVybiBlcnJvcjsKIH0KIAorc3RhdGljIGludCByZXBvX2lzX3dvcmt0cmVlKHVuc2lnbmVkICpvdXQsIGNvbnN0IGdpdF9yZXBvc2l0b3J5ICpyZXBvKQoreworCWdpdF9idWYgZ2l0ZGlyX2xpbmsgPSBHSVRfQlVGX0lOSVQ7CisJaW50IGVycm9yOworCisJLyogV29ya3RyZWVzIGNhbm5vdCBoYXZlIHRoZSBzYW1lIGNvbW1vbmRpciBhbmQgZ2l0ZGlyICovCisJaWYgKHJlcG8tPmNvbW1vbmRpciAmJiByZXBvLT5naXRkaXIKKwkgICAgJiYgIXN0cmNtcChyZXBvLT5jb21tb25kaXIsIHJlcG8tPmdpdGRpcikpIHsKKwkJKm91dCA9IDA7CisJCXJldHVybiAwOworCX0KKworCWlmICgoZXJyb3IgPSBnaXRfYnVmX2pvaW5wYXRoKCZnaXRkaXJfbGluaywgcmVwby0+Z2l0ZGlyLCAiZ2l0ZGlyIikpIDwgMCkKKwkJcmV0dXJuIC0xOworCisJLyogQSAnZ2l0ZGlyJyBmaWxlIGluc2lkZSBhIGdpdCBkaXJlY3RvcnkgaXMgY3VycmVudGx5CisJICogb25seSB1c2VkIHdoZW4gdGhlIHJlcG9zaXRvcnkgaXMgYSB3b3JraW5nIHRyZWUuICovCisJKm91dCA9ICEhZ2l0X3BhdGhfZXhpc3RzKGdpdGRpcl9saW5rLnB0cik7CisKKwlnaXRfYnVmX2ZyZWUoJmdpdGRpcl9saW5rKTsKKwlyZXR1cm4gZXJyb3I7Cit9CisKIGludCBnaXRfcmVwb3NpdG9yeV9vcGVuX2V4dCgKIAlnaXRfcmVwb3NpdG9yeSAqKnJlcG9fcHRyLAogCWNvbnN0IGNoYXIgKnN0YXJ0X3BhdGgsCkBAIC02ODAsOCArNzkwLDkgQEAKIAljb25zdCBjaGFyICpjZWlsaW5nX2RpcnMpCiB7CiAJaW50IGVycm9yOwotCWdpdF9idWYgcGF0aCA9IEdJVF9CVUZfSU5JVCwgcGFyZW50ID0gR0lUX0JVRl9JTklULAotCQlsaW5rX3BhdGggPSBHSVRfQlVGX0lOSVQ7CisJdW5zaWduZWQgaXNfd29ya3RyZWU7CisJZ2l0X2J1ZiBnaXRkaXIgPSBHSVRfQlVGX0lOSVQsIHdvcmtkaXIgPSBHSVRfQlVGX0lOSVQsCisJCWdpdGxpbmsgPSBHSVRfQlVGX0lOSVQsIGNvbW1vbmRpciA9IEdJVF9CVUZfSU5JVDsKIAlnaXRfcmVwb3NpdG9yeSAqcmVwbzsKIAlnaXRfY29uZmlnICpjb25maWcgPSBOVUxMOwogCkBAIC02OTIsNyArODAzLDcgQEAKIAkJKnJlcG9fcHRyID0gTlVMTDsKIAogCWVycm9yID0gZmluZF9yZXBvKAotCQkmcGF0aCwgJnBhcmVudCwgJmxpbmtfcGF0aCwgc3RhcnRfcGF0aCwgZmxhZ3MsIGNlaWxpbmdfZGlycyk7CisJCSZnaXRkaXIsICZ3b3JrZGlyLCAmZ2l0bGluaywgJmNvbW1vbmRpciwgc3RhcnRfcGF0aCwgZmxhZ3MsIGNlaWxpbmdfZGlycyk7CiAKIAlpZiAoZXJyb3IgPCAwIHx8ICFyZXBvX3B0cikKIAkJcmV0dXJuIGVycm9yOwpAQCAtNzAwLDEzICs4MTEsMjEgQEAKIAlyZXBvID0gcmVwb3NpdG9yeV9hbGxvYygpOwogCUdJVEVSUl9DSEVDS19BTExPQyhyZXBvKTsKIAotCXJlcG8tPnBhdGhfcmVwb3NpdG9yeSA9IGdpdF9idWZfZGV0YWNoKCZwYXRoKTsKLQlHSVRFUlJfQ0hFQ0tfQUxMT0MocmVwby0+cGF0aF9yZXBvc2l0b3J5KTsKKwlyZXBvLT5naXRkaXIgPSBnaXRfYnVmX2RldGFjaCgmZ2l0ZGlyKTsKKwlHSVRFUlJfQ0hFQ0tfQUxMT0MocmVwby0+Z2l0ZGlyKTsKIAotCWlmIChsaW5rX3BhdGguc2l6ZSkgewotCQlyZXBvLT5wYXRoX2dpdGxpbmsgPSBnaXRfYnVmX2RldGFjaCgmbGlua19wYXRoKTsKLQkJR0lURVJSX0NIRUNLX0FMTE9DKHJlcG8tPnBhdGhfZ2l0bGluayk7CisJaWYgKGdpdGxpbmsuc2l6ZSkgeworCQlyZXBvLT5naXRsaW5rID0gZ2l0X2J1Zl9kZXRhY2goJmdpdGxpbmspOworCQlHSVRFUlJfQ0hFQ0tfQUxMT0MocmVwby0+Z2l0bGluayk7CiAJfQorCWlmIChjb21tb25kaXIuc2l6ZSkgeworCQlyZXBvLT5jb21tb25kaXIgPSBnaXRfYnVmX2RldGFjaCgmY29tbW9uZGlyKTsKKwkJR0lURVJSX0NIRUNLX0FMTE9DKHJlcG8tPmNvbW1vbmRpcik7CisJfQorCisJaWYgKChlcnJvciA9IHJlcG9faXNfd29ya3RyZWUoJmlzX3dvcmt0cmVlLCByZXBvKSkgPCAwKQorCQlnb3RvIGNsZWFudXA7CisJcmVwby0+aXNfd29ya3RyZWUgPSBpc193b3JrdHJlZTsKIAogCS8qCiAJICogV2UnZCBsaWtlIHRvIGhhdmUgdGhlIGNvbmZpZywgYnV0IGdpdCBkb2Vzbid0IHBhcnRpY3VsYXJseQpAQCAtNzI2LDEyICs4NDUsMTMgQEAKIAogCQlpZiAoY29uZmlnICYmCiAJCSAgICAoKGVycm9yID0gbG9hZF9jb25maWdfZGF0YShyZXBvLCBjb25maWcpKSA8IDAgfHwKLQkJICAgICAoZXJyb3IgPSBsb2FkX3dvcmtkaXIocmVwbywgY29uZmlnLCAmcGFyZW50KSkgPCAwKSkKKwkJICAgICAoZXJyb3IgPSBsb2FkX3dvcmtkaXIocmVwbywgY29uZmlnLCAmd29ya2RpcikpIDwgMCkpCiAJCQlnb3RvIGNsZWFudXA7CiAJfQogCiBjbGVhbnVwOgotCWdpdF9idWZfZnJlZSgmcGFyZW50KTsKKwlnaXRfYnVmX2ZyZWUoJmdpdGRpcik7CisJZ2l0X2J1Zl9mcmVlKCZ3b3JrZGlyKTsKIAlnaXRfY29uZmlnX2ZyZWUoY29uZmlnKTsKIAogCWlmIChlcnJvciA8IDApCkBAIC03NDgsNiArODY4LDM2IEBACiAJCXJlcG9fb3V0LCBwYXRoLCBHSVRfUkVQT1NJVE9SWV9PUEVOX05PX1NFQVJDSCwgTlVMTCk7CiB9CiAKK2ludCBnaXRfcmVwb3NpdG9yeV9vcGVuX2Zyb21fd29ya3RyZWUoZ2l0X3JlcG9zaXRvcnkgKipyZXBvX291dCwgZ2l0X3dvcmt0cmVlICp3dCkKK3sKKwlnaXRfYnVmIHBhdGggPSBHSVRfQlVGX0lOSVQ7CisJZ2l0X3JlcG9zaXRvcnkgKnJlcG8gPSBOVUxMOworCWludCBsZW4sIGVycjsKKworCWFzc2VydChyZXBvX291dCAmJiB3dCk7CisKKwkqcmVwb19vdXQgPSBOVUxMOworCWxlbiA9IHN0cmxlbih3dC0+Z2l0bGlua19wYXRoKTsKKworCWlmIChsZW4gPD0gNCB8fCBzdHJjYXNlY21wKHd0LT5naXRsaW5rX3BhdGggKyBsZW4gLSA0LCAiLmdpdCIpKSB7CisJCWVyciA9IC0xOworCQlnb3RvIG91dDsKKwl9CisKKwlpZiAoKGVyciA9IGdpdF9idWZfc2V0KCZwYXRoLCB3dC0+Z2l0bGlua19wYXRoLCBsZW4gLSA0KSkgPCAwKQorCQlnb3RvIG91dDsKKworCWlmICgoZXJyID0gZ2l0X3JlcG9zaXRvcnlfb3BlbigmcmVwbywgcGF0aC5wdHIpKSA8IDApCisJCWdvdG8gb3V0OworCisJKnJlcG9fb3V0ID0gcmVwbzsKKworb3V0OgorCWdpdF9idWZfZnJlZSgmcGF0aCk7CisKKwlyZXR1cm4gZXJyOworfQorCiBpbnQgZ2l0X3JlcG9zaXRvcnlfd3JhcF9vZGIoZ2l0X3JlcG9zaXRvcnkgKipyZXBvX291dCwgZ2l0X29kYiAqb2RiKQogewogCWdpdF9yZXBvc2l0b3J5ICpyZXBvOwpAQCAtNzczLDcgKzkyMyw3IEBACiAKIAlnaXRfYnVmX3Nhbml0aXplKG91dCk7CiAKLQlyZXR1cm4gZmluZF9yZXBvKG91dCwgTlVMTCwgTlVMTCwgc3RhcnRfcGF0aCwgZmxhZ3MsIGNlaWxpbmdfZGlycyk7CisJcmV0dXJuIGZpbmRfcmVwbyhvdXQsIE5VTEwsIE5VTEwsIE5VTEwsIHN0YXJ0X3BhdGgsIGZsYWdzLCBjZWlsaW5nX2RpcnMpOwogfQogCiBzdGF0aWMgaW50IGxvYWRfY29uZmlnKApAQCAtNzkzLDggKzk0Myw3IEBACiAJaWYgKChlcnJvciA9IGdpdF9jb25maWdfbmV3KCZjZmcpKSA8IDApCiAJCXJldHVybiBlcnJvcjsKIAotCWVycm9yID0gZ2l0X2J1Zl9qb2lucGF0aCgKLQkJJmNvbmZpZ19wYXRoLCByZXBvLT5wYXRoX3JlcG9zaXRvcnksIEdJVF9DT05GSUdfRklMRU5BTUVfSU5SRVBPKTsKKwllcnJvciA9IGdpdF9yZXBvc2l0b3J5X2l0ZW1fcGF0aCgmY29uZmlnX3BhdGgsIHJlcG8sIEdJVF9SRVBPU0lUT1JZX0lURU1fQ09ORklHKTsKIAlpZiAoZXJyb3IgPCAwKQogCQlnb3RvIG9uX2Vycm9yOwogCkBAIC05MjgsMTggKzEwNzcsMjMgQEAKIAkJZ2l0X2J1ZiBvZGJfcGF0aCA9IEdJVF9CVUZfSU5JVDsKIAkJZ2l0X29kYiAqb2RiOwogCi0JCWlmICgoZXJyb3IgPSBnaXRfYnVmX2pvaW5wYXRoKCZvZGJfcGF0aCwgcmVwby0+cGF0aF9yZXBvc2l0b3J5LCBHSVRfT0JKRUNUU19ESVIpKSA8IDApCisJCWlmICgoZXJyb3IgPSBnaXRfcmVwb3NpdG9yeV9pdGVtX3BhdGgoJm9kYl9wYXRoLCByZXBvLAorCQkJCUdJVF9SRVBPU0lUT1JZX0lURU1fT0JKRUNUUykpIDwgMCB8fAorCQkJKGVycm9yID0gZ2l0X29kYl9uZXcoJm9kYikpIDwgMCkKIAkJCXJldHVybiBlcnJvcjsKIAotCQllcnJvciA9IGdpdF9vZGJfb3Blbigmb2RiLCBvZGJfcGF0aC5wdHIpOwotCQlpZiAoIWVycm9yKSB7Ci0JCQlHSVRfUkVGQ09VTlRfT1dOKG9kYiwgcmVwbyk7CisJCUdJVF9SRUZDT1VOVF9PV04ob2RiLCByZXBvKTsKIAotCQkJb2RiID0gZ2l0X19jb21wYXJlX2FuZF9zd2FwKCZyZXBvLT5fb2RiLCBOVUxMLCBvZGIpOwotCQkJaWYgKG9kYiAhPSBOVUxMKSB7Ci0JCQkJR0lUX1JFRkNPVU5UX09XTihvZGIsIE5VTEwpOwotCQkJCWdpdF9vZGJfZnJlZShvZGIpOwotCQkJfQorCQlpZiAoKGVycm9yID0gZ2l0X29kYl9fc2V0X2NhcHMob2RiLCBHSVRfT0RCX0NBUF9GUk9NX09XTkVSKSkgPCAwIHx8CisJCQkoZXJyb3IgPSBnaXRfb2RiX19hZGRfZGVmYXVsdF9iYWNrZW5kcyhvZGIsIG9kYl9wYXRoLnB0ciwgMCwgMCkpIDwgMCkgeworCQkJZ2l0X29kYl9mcmVlKG9kYik7CisJCQlyZXR1cm4gZXJyb3I7CisJCX0KKworCQlvZGIgPSBnaXRfX2NvbXBhcmVfYW5kX3N3YXAoJnJlcG8tPl9vZGIsIE5VTEwsIG9kYik7CisJCWlmIChvZGIgIT0gTlVMTCkgeworCQkJR0lUX1JFRkNPVU5UX09XTihvZGIsIE5VTEwpOworCQkJZ2l0X29kYl9mcmVlKG9kYik7CiAJCX0KIAogCQlnaXRfYnVmX2ZyZWUoJm9kYl9wYXRoKTsKQEAgLTEwMTQsNyArMTE2OCw3IEBACiAJCWdpdF9idWYgaW5kZXhfcGF0aCA9IEdJVF9CVUZfSU5JVDsKIAkJZ2l0X2luZGV4ICppbmRleDsKIAotCQlpZiAoKGVycm9yID0gZ2l0X2J1Zl9qb2lucGF0aCgmaW5kZXhfcGF0aCwgcmVwby0+cGF0aF9yZXBvc2l0b3J5LCBHSVRfSU5ERVhfRklMRSkpIDwgMCkKKwkJaWYgKChlcnJvciA9IGdpdF9idWZfam9pbnBhdGgoJmluZGV4X3BhdGgsIHJlcG8tPmdpdGRpciwgR0lUX0lOREVYX0ZJTEUpKSA8IDApCiAJCQlyZXR1cm4gZXJyb3I7CiAKIAkJZXJyb3IgPSBnaXRfaW5kZXhfb3BlbigmaW5kZXgsIGluZGV4X3BhdGgucHRyKTsKQEAgLTExMzAsMTMgKzEyODQsMTMgQEAKIAkJCXByZWZpeGNtcCA9IChlcnJvciB8fCBpZ25vcmVjYXNlKSA/IGdpdF9fcHJlZml4Y21wX2ljYXNlIDoKIAkJCQlnaXRfX3ByZWZpeGNtcDsKIAotCQkJaWYgKHJlcG8tPnBhdGhfZ2l0bGluayAmJgotCQkJCXJlc2VydmVkX25hbWVzX2FkZDhkb3QzKHJlcG8sIHJlcG8tPnBhdGhfZ2l0bGluaykgPCAwKQorCQkJaWYgKHJlcG8tPmdpdGxpbmsgJiYKKwkJCQlyZXNlcnZlZF9uYW1lc19hZGQ4ZG90MyhyZXBvLCByZXBvLT5naXRsaW5rKSA8IDApCiAJCQkJZ290byBvbl9lcnJvcjsKIAotCQkJaWYgKHJlcG8tPnBhdGhfcmVwb3NpdG9yeSAmJgotCQkJCXByZWZpeGNtcChyZXBvLT5wYXRoX3JlcG9zaXRvcnksIHJlcG8tPndvcmtkaXIpID09IDAgJiYKLQkJCQlyZXNlcnZlZF9uYW1lc19hZGQ4ZG90MyhyZXBvLCByZXBvLT5wYXRoX3JlcG9zaXRvcnkpIDwgMCkKKwkJCWlmIChyZXBvLT5naXRkaXIgJiYKKwkJCQlwcmVmaXhjbXAocmVwby0+Z2l0ZGlyLCByZXBvLT53b3JrZGlyKSA9PSAwICYmCisJCQkJcmVzZXJ2ZWRfbmFtZXNfYWRkOGRvdDMocmVwbywgcmVwby0+Z2l0ZGlyKSA8IDApCiAJCQkJZ290byBvbl9lcnJvcjsKIAkJfQogCX0KQEAgLTExOTMsNyArMTM0Nyw3IEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBpbnQgcmVwb19pbml0X2NyZWF0ZV9oZWFkKGNvbnN0IGNoYXIgKmdpdF9kaXIsIGNvbnN0IGNoYXIgKnJlZl9uYW1lKQoraW50IGdpdF9yZXBvc2l0b3J5X2NyZWF0ZV9oZWFkKGNvbnN0IGNoYXIgKmdpdF9kaXIsIGNvbnN0IGNoYXIgKnJlZl9uYW1lKQogewogCWdpdF9idWYgcmVmX3BhdGggPSBHSVRfQlVGX0lOSVQ7CiAJZ2l0X2ZpbGVidWYgcmVmID0gR0lUX0ZJTEVCVUZfSU5JVDsKQEAgLTE4NTYsNyArMjAxMCw4IEBACiAJZ2l0X3JlcG9zaXRvcnlfaW5pdF9vcHRpb25zICpvcHRzKQogewogCWludCBlcnJvcjsKLQlnaXRfYnVmIHJlcG9fcGF0aCA9IEdJVF9CVUZfSU5JVCwgd2RfcGF0aCA9IEdJVF9CVUZfSU5JVDsKKwlnaXRfYnVmIHJlcG9fcGF0aCA9IEdJVF9CVUZfSU5JVCwgd2RfcGF0aCA9IEdJVF9CVUZfSU5JVCwKKwkJY29tbW9uX3BhdGggPSBHSVRfQlVGX0lOSVQ7CiAJY29uc3QgY2hhciAqd2Q7CiAKIAlhc3NlcnQob3V0ICYmIGdpdmVuX3JlcG8gJiYgb3B0cyk7CkBAIC0xODY4LDcgKzIwMjMsNyBAQAogCQlnb3RvIGNsZWFudXA7CiAKIAl3ZCA9IChvcHRzLT5mbGFncyAmIEdJVF9SRVBPU0lUT1JZX0lOSVRfQkFSRSkgPyBOVUxMIDogZ2l0X2J1Zl9jc3RyKCZ3ZF9wYXRoKTsKLQlpZiAodmFsaWRfcmVwb3NpdG9yeV9wYXRoKCZyZXBvX3BhdGgpKSB7CisJaWYgKHZhbGlkX3JlcG9zaXRvcnlfcGF0aCgmcmVwb19wYXRoLCAmY29tbW9uX3BhdGgpKSB7CiAKIAkJaWYgKChvcHRzLT5mbGFncyAmIEdJVF9SRVBPU0lUT1JZX0lOSVRfTk9fUkVJTklUKSAhPSAwKSB7CiAJCQlnaXRlcnJfc2V0KEdJVEVSUl9SRVBPU0lUT1JZLApAQCAtMTg4OSw3ICsyMDQ0LDcgQEAKIAkJCQlyZXBvX3BhdGgucHRyLCB3ZCwgb3B0cykpICYmCiAJCQkhKGVycm9yID0gcmVwb19pbml0X2NvbmZpZygKIAkJCQlyZXBvX3BhdGgucHRyLCB3ZCwgb3B0cy0+ZmxhZ3MsIG9wdHMtPm1vZGUpKSkKLQkJCWVycm9yID0gcmVwb19pbml0X2NyZWF0ZV9oZWFkKAorCQkJZXJyb3IgPSBnaXRfcmVwb3NpdG9yeV9jcmVhdGVfaGVhZCgKIAkJCQlyZXBvX3BhdGgucHRyLCBvcHRzLT5pbml0aWFsX2hlYWQpOwogCX0KIAlpZiAoZXJyb3IgPCAwKQpAQCAtMTkwMSw2ICsyMDU2LDcgQEAKIAkJZXJyb3IgPSByZXBvX2luaXRfY3JlYXRlX29yaWdpbigqb3V0LCBvcHRzLT5vcmlnaW5fdXJsKTsKIAogY2xlYW51cDoKKwlnaXRfYnVmX2ZyZWUoJmNvbW1vbl9wYXRoKTsKIAlnaXRfYnVmX2ZyZWUoJnJlcG9fcGF0aCk7CiAJZ2l0X2J1Zl9mcmVlKCZ3ZF9wYXRoKTsKIApAQCAtMTkzMCw2ICsyMDg2LDI5IEBACiAJcmV0dXJuIGV4aXN0czsKIH0KIAorc3RhdGljIGludCBnZXRfd29ya3RyZWVfZmlsZV9wYXRoKGdpdF9idWYgKm91dCwgZ2l0X3JlcG9zaXRvcnkgKnJlcG8sIGNvbnN0IGNoYXIgKndvcmt0cmVlLCBjb25zdCBjaGFyICpmaWxlKQoreworCWdpdF9idWZfY2xlYXIob3V0KTsKKwlyZXR1cm4gZ2l0X2J1Zl9wcmludGYob3V0LCAiJXMvd29ya3RyZWVzLyVzLyVzIiwgcmVwby0+Y29tbW9uZGlyLCB3b3JrdHJlZSwgZmlsZSk7Cit9CisKK2ludCBnaXRfcmVwb3NpdG9yeV9oZWFkX2RldGFjaGVkX2Zvcl93b3JrdHJlZShnaXRfcmVwb3NpdG9yeSAqcmVwbywgY29uc3QgY2hhciAqbmFtZSkKK3sKKwlnaXRfcmVmZXJlbmNlICpyZWYgPSBOVUxMOworCWludCBlcnJvcjsKKworCWFzc2VydChyZXBvICYmIG5hbWUpOworCisJaWYgKChlcnJvciA9IGdpdF9yZXBvc2l0b3J5X2hlYWRfZm9yX3dvcmt0cmVlKCZyZWYsIHJlcG8sIG5hbWUpKSA8IDApCisJCWdvdG8gb3V0OworCisJZXJyb3IgPSAoZ2l0X3JlZmVyZW5jZV90eXBlKHJlZikgIT0gR0lUX1JFRl9TWU1CT0xJQyk7CitvdXQ6CisJZ2l0X3JlZmVyZW5jZV9mcmVlKHJlZik7CisKKwlyZXR1cm4gZXJyb3I7Cit9CisKIGludCBnaXRfcmVwb3NpdG9yeV9oZWFkKGdpdF9yZWZlcmVuY2UgKipoZWFkX291dCwgZ2l0X3JlcG9zaXRvcnkgKnJlcG8pCiB7CiAJZ2l0X3JlZmVyZW5jZSAqaGVhZDsKQEAgLTE5NDksNiArMjEyOCw3MSBAQAogCXJldHVybiBlcnJvciA9PSBHSVRfRU5PVEZPVU5EID8gR0lUX0VVTkJPUk5CUkFOQ0ggOiBlcnJvcjsKIH0KIAoraW50IGdpdF9yZXBvc2l0b3J5X2hlYWRfZm9yX3dvcmt0cmVlKGdpdF9yZWZlcmVuY2UgKipvdXQsIGdpdF9yZXBvc2l0b3J5ICpyZXBvLCBjb25zdCBjaGFyICpuYW1lKQoreworCWdpdF9idWYgcGF0aCA9IEdJVF9CVUZfSU5JVDsKKwlnaXRfcmVmZXJlbmNlICpoZWFkID0gTlVMTDsKKwlpbnQgZXJyb3I7CisKKwlhc3NlcnQob3V0ICYmIHJlcG8gJiYgbmFtZSk7CisKKwkqb3V0ID0gTlVMTDsKKworCWlmICgoZXJyb3IgPSBnZXRfd29ya3RyZWVfZmlsZV9wYXRoKCZwYXRoLCByZXBvLCBuYW1lLCBHSVRfSEVBRF9GSUxFKSkgPCAwIHx8CisJICAgIChlcnJvciA9IGdpdF9yZWZlcmVuY2VfX3JlYWRfaGVhZCgmaGVhZCwgcmVwbywgcGF0aC5wdHIpKSA8IDApCisJCWdvdG8gb3V0OworCisJaWYgKGdpdF9yZWZlcmVuY2VfdHlwZShoZWFkKSAhPSBHSVRfUkVGX09JRCkgeworCQlnaXRfcmVmZXJlbmNlICpyZXNvbHZlZDsKKworCQllcnJvciA9IGdpdF9yZWZlcmVuY2VfbG9va3VwX3Jlc29sdmVkKCZyZXNvbHZlZCwgcmVwbywgZ2l0X3JlZmVyZW5jZV9zeW1ib2xpY190YXJnZXQoaGVhZCksIC0xKTsKKwkJZ2l0X3JlZmVyZW5jZV9mcmVlKGhlYWQpOworCQloZWFkID0gcmVzb2x2ZWQ7CisJfQorCisJKm91dCA9IGhlYWQ7CisKK291dDoKKwlpZiAoZXJyb3IpCisJCWdpdF9yZWZlcmVuY2VfZnJlZShoZWFkKTsKKworCWdpdF9idWZfZnJlZSgmcGF0aCk7CisKKwlyZXR1cm4gZXJyb3I7Cit9CisKK2ludCBnaXRfcmVwb3NpdG9yeV9mb3JlYWNoX2hlYWQoZ2l0X3JlcG9zaXRvcnkgKnJlcG8sIGdpdF9yZXBvc2l0b3J5X2ZvcmVhY2hfaGVhZF9jYiBjYiwgdm9pZCAqcGF5bG9hZCkKK3sKKwlnaXRfc3RyYXJyYXkgd29ya3RyZWVzID0gR0lUX1ZFQ1RPUl9JTklUOworCWdpdF9idWYgcGF0aCA9IEdJVF9CVUZfSU5JVDsKKwlpbnQgZXJyb3I7CisJc2l6ZV90IGk7CisKKwkvKiBFeGVjdXRlIGNhbGxiYWNrIGZvciBIRUFEIG9mIGNvbW1vbmRpciAqLworCWlmICgoZXJyb3IgPSBnaXRfYnVmX2pvaW5wYXRoKCZwYXRoLCByZXBvLT5jb21tb25kaXIsIEdJVF9IRUFEX0ZJTEUpKSA8IDAgfHwKKwkgICAgKGVycm9yID0gY2IocmVwbywgcGF0aC5wdHIsIHBheWxvYWQpICE9IDApKQorCQlnb3RvIG91dDsKKworCWlmICgoZXJyb3IgPSBnaXRfd29ya3RyZWVfbGlzdCgmd29ya3RyZWVzLCByZXBvKSkgPCAwKSB7CisJCWVycm9yID0gMDsKKwkJZ290byBvdXQ7CisJfQorCisJLyogRXhlY3V0ZSBjYWxsYmFjayBmb3IgYWxsIHdvcmt0cmVlIEhFQURzICovCisJZm9yIChpID0gMDsgaSA8IHdvcmt0cmVlcy5jb3VudDsgaSsrKSB7CisJCWlmIChnZXRfd29ya3RyZWVfZmlsZV9wYXRoKCZwYXRoLCByZXBvLCB3b3JrdHJlZXMuc3RyaW5nc1tpXSwgR0lUX0hFQURfRklMRSkgPCAwKQorCQkJY29udGludWU7CisKKwkJaWYgKChlcnJvciA9IGNiKHJlcG8sIHBhdGgucHRyLCBwYXlsb2FkKSkgIT0gMCkKKwkJCWdvdG8gb3V0OworCX0KKworb3V0OgorCWdpdF9idWZfZnJlZSgmcGF0aCk7CisJZ2l0X3N0cmFycmF5X2ZyZWUoJndvcmt0cmVlcyk7CisJcmV0dXJuIGVycm9yOworfQorCiBpbnQgZ2l0X3JlcG9zaXRvcnlfaGVhZF91bmJvcm4oZ2l0X3JlcG9zaXRvcnkgKnJlcG8pCiB7CiAJZ2l0X3JlZmVyZW5jZSAqcmVmID0gTlVMTDsKQEAgLTIwMDcsMTAgKzIyNTEsNTAgQEAKIAlyZXR1cm4gaXNfZW1wdHk7CiB9CiAKK2ludCBnaXRfcmVwb3NpdG9yeV9pdGVtX3BhdGgoZ2l0X2J1ZiAqb3V0LCBnaXRfcmVwb3NpdG9yeSAqcmVwbywgZ2l0X3JlcG9zaXRvcnlfaXRlbV90IGl0ZW0pCit7CisJY29uc3QgY2hhciAqcGFyZW50OworCisJc3dpdGNoIChpdGVtc1tpdGVtXS5wYXJlbnQpIHsKKwkJY2FzZSBHSVRfUkVQT1NJVE9SWV9JVEVNX0dJVERJUjoKKwkJCXBhcmVudCA9IGdpdF9yZXBvc2l0b3J5X3BhdGgocmVwbyk7CisJCQlicmVhazsKKwkJY2FzZSBHSVRfUkVQT1NJVE9SWV9JVEVNX1dPUktESVI6CisJCQlwYXJlbnQgPSBnaXRfcmVwb3NpdG9yeV93b3JrZGlyKHJlcG8pOworCQkJYnJlYWs7CisJCWNhc2UgR0lUX1JFUE9TSVRPUllfSVRFTV9DT01NT05ESVI6CisJCQlwYXJlbnQgPSBnaXRfcmVwb3NpdG9yeV9jb21tb25kaXIocmVwbyk7CisJCQlicmVhazsKKwkJZGVmYXVsdDoKKwkJCWdpdGVycl9zZXQoR0lURVJSX0lOVkFMSUQsICJJbnZhbGlkIGl0ZW0gZGlyZWN0b3J5Iik7CisJCQlyZXR1cm4gLTE7CisJfQorCisJaWYgKHBhcmVudCA9PSBOVUxMKSB7CisJCWdpdGVycl9zZXQoR0lURVJSX0lOVkFMSUQsICJQYXRoIGNhbm5vdCBleGlzdCBpbiByZXBvc2l0b3J5Iik7CisJCXJldHVybiAtMTsKKwl9CisKKwlpZiAoZ2l0X2J1Zl9zZXRzKG91dCwgcGFyZW50KSA8IDApCisJCXJldHVybiAtMTsKKworCWlmIChpdGVtc1tpdGVtXS5uYW1lKSB7CisJCWlmIChnaXRfYnVmX2pvaW5wYXRoKG91dCwgcGFyZW50LCBpdGVtc1tpdGVtXS5uYW1lKSA8IDApCisJCQlyZXR1cm4gLTE7CisJfQorCisJaWYgKGl0ZW1zW2l0ZW1dLmRpcmVjdG9yeSkgeworCQlpZiAoZ2l0X3BhdGhfdG9fZGlyKG91dCkgPCAwKQorCQkJcmV0dXJuIC0xOworCX0KKworCXJldHVybiAwOworfQorCiBjb25zdCBjaGFyICpnaXRfcmVwb3NpdG9yeV9wYXRoKGdpdF9yZXBvc2l0b3J5ICpyZXBvKQogewogCWFzc2VydChyZXBvKTsKLQlyZXR1cm4gcmVwby0+cGF0aF9yZXBvc2l0b3J5OworCXJldHVybiByZXBvLT5naXRkaXI7CiB9CiAKIGNvbnN0IGNoYXIgKmdpdF9yZXBvc2l0b3J5X3dvcmtkaXIoZ2l0X3JlcG9zaXRvcnkgKnJlcG8pCkBAIC0yMDIzLDYgKzIzMDcsMTIgQEAKIAlyZXR1cm4gcmVwby0+d29ya2RpcjsKIH0KIAorY29uc3QgY2hhciAqZ2l0X3JlcG9zaXRvcnlfY29tbW9uZGlyKGdpdF9yZXBvc2l0b3J5ICpyZXBvKQoreworCWFzc2VydChyZXBvKTsKKwlyZXR1cm4gcmVwby0+Y29tbW9uZGlyOworfQorCiBpbnQgZ2l0X3JlcG9zaXRvcnlfc2V0X3dvcmtkaXIoCiAJZ2l0X3JlcG9zaXRvcnkgKnJlcG8sIGNvbnN0IGNoYXIgKndvcmtkaXIsIGludCB1cGRhdGVfZ2l0bGluaykKIHsKQEAgLTIwNzMsNiArMjM2MywxMiBAQAogCXJldHVybiByZXBvLT5pc19iYXJlOwogfQogCitpbnQgZ2l0X3JlcG9zaXRvcnlfaXNfd29ya3RyZWUoZ2l0X3JlcG9zaXRvcnkgKnJlcG8pCit7CisJYXNzZXJ0KHJlcG8pOworCXJldHVybiByZXBvLT5pc193b3JrdHJlZTsKK30KKwogaW50IGdpdF9yZXBvc2l0b3J5X3NldF9iYXJlKGdpdF9yZXBvc2l0b3J5ICpyZXBvKQogewogCWludCBlcnJvcjsKQEAgLTIxMjcsNyArMjQyMyw3IEBACiAKIAlnaXRfb2lkX2ZtdChvcmlnX2hlYWRfc3RyLCBvcmlnX2hlYWQpOwogCi0JaWYgKChlcnJvciA9IGdpdF9idWZfam9pbnBhdGgoJmZpbGVfcGF0aCwgcmVwby0+cGF0aF9yZXBvc2l0b3J5LCBHSVRfT1JJR19IRUFEX0ZJTEUpKSA9PSAwICYmCisJaWYgKChlcnJvciA9IGdpdF9idWZfam9pbnBhdGgoJmZpbGVfcGF0aCwgcmVwby0+Z2l0ZGlyLCBHSVRfT1JJR19IRUFEX0ZJTEUpKSA9PSAwICYmCiAJCShlcnJvciA9IGdpdF9maWxlYnVmX29wZW4oJmZpbGUsIGZpbGVfcGF0aC5wdHIsIEdJVF9GSUxFQlVGX0ZPUkNFLCBHSVRfTUVSR0VfRklMRV9NT0RFKSkgPT0gMCAmJgogCQkoZXJyb3IgPSBnaXRfZmlsZWJ1Zl9wcmludGYoJmZpbGUsICIlLipzXG4iLCBHSVRfT0lEX0hFWFNaLCBvcmlnX2hlYWRfc3RyKSkgPT0gMCkKIAkJZXJyb3IgPSBnaXRfZmlsZWJ1Zl9jb21taXQoJmZpbGUpOwpAQCAtMjE0OCw3ICsyNDQ0LDcgQEAKIAogCWdpdF9idWZfc2FuaXRpemUob3V0KTsKIAotCWlmIChnaXRfYnVmX2pvaW5wYXRoKCZwYXRoLCByZXBvLT5wYXRoX3JlcG9zaXRvcnksIEdJVF9NRVJHRV9NU0dfRklMRSkgPCAwKQorCWlmIChnaXRfYnVmX2pvaW5wYXRoKCZwYXRoLCByZXBvLT5naXRkaXIsIEdJVF9NRVJHRV9NU0dfRklMRSkgPCAwKQogCQlyZXR1cm4gLTE7CiAKIAlpZiAoKGVycm9yID0gcF9zdGF0KGdpdF9idWZfY3N0cigmcGF0aCksICZzdCkpIDwgMCkgewpAQCAtMjE2OSw3ICsyNDY1LDcgQEAKIAlnaXRfYnVmIHBhdGggPSBHSVRfQlVGX0lOSVQ7CiAJaW50IGVycm9yOwogCi0JaWYgKGdpdF9idWZfam9pbnBhdGgoJnBhdGgsIHJlcG8tPnBhdGhfcmVwb3NpdG9yeSwgR0lUX01FUkdFX01TR19GSUxFKSA8IDApCisJaWYgKGdpdF9idWZfam9pbnBhdGgoJnBhdGgsIHJlcG8tPmdpdGRpciwgR0lUX01FUkdFX01TR19GSUxFKSA8IDApCiAJCXJldHVybiAtMTsKIAogCWVycm9yID0gcF91bmxpbmsoZ2l0X2J1Zl9jc3RyKCZwYXRoKSk7CkBAIC0yMjU5LDcgKzI1NTUsOSBAQAogCiAJZ2l0X2J1Zl9wdXRzKG91dCwgIiB0byAiKTsKIAotCWlmIChnaXRfcmVmZXJlbmNlX19pc19icmFuY2gobmV3KSkKKwlpZiAoZ2l0X3JlZmVyZW5jZV9faXNfYnJhbmNoKG5ldykgfHwKKwkJZ2l0X3JlZmVyZW5jZV9faXNfdGFnKG5ldykgfHwKKwkJZ2l0X3JlZmVyZW5jZV9faXNfcmVtb3RlKG5ldykpCiAJCWdpdF9idWZfcHV0cyhvdXQsIGdpdF9yZWZlcmVuY2VfX3Nob3J0aGFuZChuZXcpKTsKIAllbHNlCiAJCWdpdF9idWZfcHV0cyhvdXQsIG5ldyk7CkBAIC0yMjcwLDYgKzI1NjgsNDEgQEAKIAlyZXR1cm4gMDsKIH0KIAorc3RhdGljIGludCBkZXRhY2goZ2l0X3JlcG9zaXRvcnkgKnJlcG8sIGNvbnN0IGdpdF9vaWQgKmlkLCBjb25zdCBjaGFyICpuZXcpCit7CisJaW50IGVycm9yOworCWdpdF9idWYgbG9nX21lc3NhZ2UgPSBHSVRfQlVGX0lOSVQ7CisJZ2l0X29iamVjdCAqb2JqZWN0ID0gTlVMTCwgKnBlZWxlZCA9IE5VTEw7CisJZ2l0X3JlZmVyZW5jZSAqbmV3X2hlYWQgPSBOVUxMLCAqY3VycmVudCA9IE5VTEw7CisKKwlhc3NlcnQocmVwbyAmJiBpZCk7CisKKwlpZiAoKGVycm9yID0gZ2l0X3JlZmVyZW5jZV9sb29rdXAoJmN1cnJlbnQsIHJlcG8sIEdJVF9IRUFEX0ZJTEUpKSA8IDApCisJCXJldHVybiBlcnJvcjsKKworCWlmICgoZXJyb3IgPSBnaXRfb2JqZWN0X2xvb2t1cCgmb2JqZWN0LCByZXBvLCBpZCwgR0lUX09CSl9BTlkpKSA8IDApCisJCWdvdG8gY2xlYW51cDsKKworCWlmICgoZXJyb3IgPSBnaXRfb2JqZWN0X3BlZWwoJnBlZWxlZCwgb2JqZWN0LCBHSVRfT0JKX0NPTU1JVCkpIDwgMCkKKwkJZ290byBjbGVhbnVwOworCisJaWYgKG5ldyA9PSBOVUxMKQorCQluZXcgPSBnaXRfb2lkX3Rvc3RyX3MoZ2l0X29iamVjdF9pZChwZWVsZWQpKTsKKworCWlmICgoZXJyb3IgPSBjaGVja291dF9tZXNzYWdlKCZsb2dfbWVzc2FnZSwgY3VycmVudCwgbmV3KSkgPCAwKQorCQlnb3RvIGNsZWFudXA7CisKKwllcnJvciA9IGdpdF9yZWZlcmVuY2VfY3JlYXRlKCZuZXdfaGVhZCwgcmVwbywgR0lUX0hFQURfRklMRSwgZ2l0X29iamVjdF9pZChwZWVsZWQpLCB0cnVlLCBnaXRfYnVmX2NzdHIoJmxvZ19tZXNzYWdlKSk7CisKK2NsZWFudXA6CisJZ2l0X2J1Zl9mcmVlKCZsb2dfbWVzc2FnZSk7CisJZ2l0X29iamVjdF9mcmVlKG9iamVjdCk7CisJZ2l0X29iamVjdF9mcmVlKHBlZWxlZCk7CisJZ2l0X3JlZmVyZW5jZV9mcmVlKGN1cnJlbnQpOworCWdpdF9yZWZlcmVuY2VfZnJlZShuZXdfaGVhZCk7CisJcmV0dXJuIGVycm9yOworfQorCiBpbnQgZ2l0X3JlcG9zaXRvcnlfc2V0X2hlYWQoCiAJZ2l0X3JlcG9zaXRvcnkqIHJlcG8sCiAJY29uc3QgY2hhciogcmVmbmFtZSkKQEAgLTIyOTAsMTIgKzI2MjMsMjEgQEAKIAlpZiAoZXJyb3IgPCAwICYmIGVycm9yICE9IEdJVF9FTk9URk9VTkQpCiAJCWdvdG8gY2xlYW51cDsKIAorCWlmIChyZWYgJiYgY3VycmVudC0+dHlwZSA9PSBHSVRfUkVGX1NZTUJPTElDICYmIGdpdF9fc3RyY21wKGN1cnJlbnQtPnRhcmdldC5zeW1ib2xpYywgcmVmLT5uYW1lKSAmJgorCSAgICBnaXRfcmVmZXJlbmNlX2lzX2JyYW5jaChyZWYpICYmIGdpdF9icmFuY2hfaXNfY2hlY2tlZF9vdXQocmVmKSkgeworCQlnaXRlcnJfc2V0KEdJVEVSUl9SRVBPU0lUT1JZLCAiY2Fubm90IHNldCBIRUFEIHRvIHJlZmVyZW5jZSAnJXMnIGFzIGl0IGlzIHRoZSBjdXJyZW50IEhFQUQgIgorCQkJIm9mIGEgbGlua2VkIHJlcG9zaXRvcnkuIiwgZ2l0X3JlZmVyZW5jZV9uYW1lKHJlZikpOworCQllcnJvciA9IC0xOworCQlnb3RvIGNsZWFudXA7CisJfQorCiAJaWYgKCFlcnJvcikgewogCQlpZiAoZ2l0X3JlZmVyZW5jZV9pc19icmFuY2gocmVmKSkgewogCQkJZXJyb3IgPSBnaXRfcmVmZXJlbmNlX3N5bWJvbGljX2NyZWF0ZSgmbmV3X2hlYWQsIHJlcG8sIEdJVF9IRUFEX0ZJTEUsCiAJCQkJCWdpdF9yZWZlcmVuY2VfbmFtZShyZWYpLCB0cnVlLCBnaXRfYnVmX2NzdHIoJmxvZ19tZXNzYWdlKSk7CiAJCX0gZWxzZSB7Ci0JCQllcnJvciA9IGdpdF9yZXBvc2l0b3J5X3NldF9oZWFkX2RldGFjaGVkKHJlcG8sIGdpdF9yZWZlcmVuY2VfdGFyZ2V0KHJlZikpOworCQkJZXJyb3IgPSBkZXRhY2gocmVwbywgZ2l0X3JlZmVyZW5jZV90YXJnZXQocmVmKSwKKwkJCQlnaXRfcmVmZXJlbmNlX2lzX3RhZyhyZWYpIHx8IGdpdF9yZWZlcmVuY2VfaXNfcmVtb3RlKHJlZikgPyByZWZuYW1lIDogTlVMTCk7CiAJCX0KIAl9IGVsc2UgaWYgKGdpdF9yZWZlcmVuY2VfX2lzX2JyYW5jaChyZWZuYW1lKSkgewogCQllcnJvciA9IGdpdF9yZWZlcmVuY2Vfc3ltYm9saWNfY3JlYXRlKCZuZXdfaGVhZCwgcmVwbywgR0lUX0hFQURfRklMRSwgcmVmbmFtZSwKQEAgLTIzMTAsNDEgKzI2NTIsNiBAQAogCXJldHVybiBlcnJvcjsKIH0KIAotc3RhdGljIGludCBkZXRhY2goZ2l0X3JlcG9zaXRvcnkgKnJlcG8sIGNvbnN0IGdpdF9vaWQgKmlkLCBjb25zdCBjaGFyICpmcm9tKQotewotCWludCBlcnJvcjsKLQlnaXRfYnVmIGxvZ19tZXNzYWdlID0gR0lUX0JVRl9JTklUOwotCWdpdF9vYmplY3QgKm9iamVjdCA9IE5VTEwsICpwZWVsZWQgPSBOVUxMOwotCWdpdF9yZWZlcmVuY2UgKm5ld19oZWFkID0gTlVMTCwgKmN1cnJlbnQgPSBOVUxMOwotCi0JYXNzZXJ0KHJlcG8gJiYgaWQpOwotCi0JaWYgKChlcnJvciA9IGdpdF9yZWZlcmVuY2VfbG9va3VwKCZjdXJyZW50LCByZXBvLCBHSVRfSEVBRF9GSUxFKSkgPCAwKQotCQlyZXR1cm4gZXJyb3I7Ci0KLQlpZiAoKGVycm9yID0gZ2l0X29iamVjdF9sb29rdXAoJm9iamVjdCwgcmVwbywgaWQsIEdJVF9PQkpfQU5ZKSkgPCAwKQotCQlnb3RvIGNsZWFudXA7Ci0KLQlpZiAoKGVycm9yID0gZ2l0X29iamVjdF9wZWVsKCZwZWVsZWQsIG9iamVjdCwgR0lUX09CSl9DT01NSVQpKSA8IDApCi0JCWdvdG8gY2xlYW51cDsKLQotCWlmIChmcm9tID09IE5VTEwpCi0JCWZyb20gPSBnaXRfb2lkX3Rvc3RyX3MoZ2l0X29iamVjdF9pZChwZWVsZWQpKTsKLQotCWlmICgoZXJyb3IgPSBjaGVja291dF9tZXNzYWdlKCZsb2dfbWVzc2FnZSwgY3VycmVudCwgZnJvbSkpIDwgMCkKLQkJZ290byBjbGVhbnVwOwotCi0JZXJyb3IgPSBnaXRfcmVmZXJlbmNlX2NyZWF0ZSgmbmV3X2hlYWQsIHJlcG8sIEdJVF9IRUFEX0ZJTEUsIGdpdF9vYmplY3RfaWQocGVlbGVkKSwgdHJ1ZSwgZ2l0X2J1Zl9jc3RyKCZsb2dfbWVzc2FnZSkpOwotCi1jbGVhbnVwOgotCWdpdF9idWZfZnJlZSgmbG9nX21lc3NhZ2UpOwotCWdpdF9vYmplY3RfZnJlZShvYmplY3QpOwotCWdpdF9vYmplY3RfZnJlZShwZWVsZWQpOwotCWdpdF9yZWZlcmVuY2VfZnJlZShjdXJyZW50KTsKLQlnaXRfcmVmZXJlbmNlX2ZyZWUobmV3X2hlYWQpOwotCXJldHVybiBlcnJvcjsKLX0KLQogaW50IGdpdF9yZXBvc2l0b3J5X3NldF9oZWFkX2RldGFjaGVkKAogCWdpdF9yZXBvc2l0b3J5KiByZXBvLAogCWNvbnN0IGdpdF9vaWQqIGNvbW1pdGlzaCkKQEAgLTI0MDUsNyArMjcxMiw3IEBACiAKIAlhc3NlcnQocmVwbyk7CiAKLQlpZiAoZ2l0X2J1Zl9wdXRzKCZyZXBvX3BhdGgsIHJlcG8tPnBhdGhfcmVwb3NpdG9yeSkgPCAwKQorCWlmIChnaXRfYnVmX3B1dHMoJnJlcG9fcGF0aCwgcmVwby0+Z2l0ZGlyKSA8IDApCiAJCXJldHVybiAtMTsKIAogCWlmIChnaXRfcGF0aF9jb250YWluc19maWxlKCZyZXBvX3BhdGgsIEdJVF9SRUJBU0VfTUVSR0VfSU5URVJBQ1RJVkVfRklMRSkpCkBAIC0yNDQ3LDcgKzI3NTQsNyBAQAogCWZvciAoZXJyb3IgPSAwLCBpID0gMDsgIWVycm9yICYmIGkgPCBmaWxlc19sZW47ICsraSkgewogCQljb25zdCBjaGFyICpwYXRoOwogCi0JCWlmIChnaXRfYnVmX2pvaW5wYXRoKCZidWYsIHJlcG8tPnBhdGhfcmVwb3NpdG9yeSwgZmlsZXNbaV0pIDwgMCkKKwkJaWYgKGdpdF9idWZfam9pbnBhdGgoJmJ1ZiwgcmVwby0+Z2l0ZGlyLCBmaWxlc1tpXSkgPCAwKQogCQkJcmV0dXJuIC0xOwogCiAJCXBhdGggPSBnaXRfYnVmX2NzdHIoJmJ1Zik7CkBAIC0yNDkxLDcgKzI3OTgsNyBAQAogCXN0cnVjdCBzdGF0IHN0OwogCWludCBlcnJvcjsKIAotCWlmICgoZXJyb3IgPSBnaXRfYnVmX2pvaW5wYXRoKCZwYXRoLCByZXBvLT5wYXRoX3JlcG9zaXRvcnksICJzaGFsbG93IikpIDwgMCkKKwlpZiAoKGVycm9yID0gZ2l0X2J1Zl9qb2lucGF0aCgmcGF0aCwgcmVwby0+Z2l0ZGlyLCAic2hhbGxvdyIpKSA8IDApCiAJCXJldHVybiBlcnJvcjsKIAogCWVycm9yID0gZ2l0X3BhdGhfbHN0YXQocGF0aC5wdHIsICZzdCk7CmRpZmYgLS1naXQgYS9zcmMvcmVwb3NpdG9yeS5oIGIvc3JjL3JlcG9zaXRvcnkuaAppbmRleCA5ZDI3NmYzLi41MmY5ZWMyIDEwMDY0NAotLS0gYS9zcmMvcmVwb3NpdG9yeS5oCisrKyBiL3NyYy9yZXBvc2l0b3J5LmgKQEAgLTMxLDYgKzMxLDggQEAKIC8qIERlZmF1bHQgRE9TLWNvbXBhdGlibGUgOC4zICJzaG9ydCBuYW1lIiBmb3IgYSBnaXQgcmVwb3NpdG9yeSwgIkdJVH4xIiAqLwogI2RlZmluZSBHSVRfRElSX1NIT1JUTkFNRSAiR0lUfjEiCiAKK2V4dGVybiBib29sIGdpdF9yZXBvc2l0b3J5X19mc3luY19naXRkaXI7CisKIC8qKiBDdmFyIGNhY2hlIGlkZW50aWZpZXJzICovCiB0eXBlZGVmIGVudW0gewogCUdJVF9DVkFSX0FVVE9fQ1JMRiA9IDAsIC8qIGNvcmUuYXV0b2NybGYgKi8KQEAgLTQ2LDYgKzQ4LDcgQEAKIAlHSVRfQ1ZBUl9MT0dBTExSRUZVUERBVEVTLCAvKiBjb3JlLmxvZ2FsbHJlZnVwZGF0ZXMgKi8KIAlHSVRfQ1ZBUl9QUk9URUNUSEZTLCAgICAvKiBjb3JlLnByb3RlY3RIRlMgKi8KIAlHSVRfQ1ZBUl9QUk9URUNUTlRGUywgICAvKiBjb3JlLnByb3RlY3ROVEZTICovCisJR0lUX0NWQVJfRlNZTkNPQkpFQ1RGSUxFUywgLyogY29yZS5mc3luY09iamVjdEZpbGVzICovCiAJR0lUX0NWQVJfQ0FDSEVfTUFYCiB9IGdpdF9jdmFyX2NhY2hlZDsKIApAQCAtMTA2LDYgKzEwOSw4IEBACiAJR0lUX1BST1RFQ1RIRlNfREVGQVVMVCA9IEdJVF9DVkFSX0ZBTFNFLAogCS8qIGNvcmUucHJvdGVjdE5URlMgKi8KIAlHSVRfUFJPVEVDVE5URlNfREVGQVVMVCA9IEdJVF9DVkFSX0ZBTFNFLAorCS8qIGNvcmUuZnN5bmNPYmplY3RGaWxlcyAqLworCUdJVF9GU1lOQ09CSkVDVEZJTEVTX0RFRkFVTFQgPSBHSVRfQ1ZBUl9GQUxTRSwKIH0gZ2l0X2N2YXJfdmFsdWU7CiAKIC8qIGludGVybmFsIHJlcG9zaXRvcnkgaW5pdCBmbGFncyAqLwpAQCAtMTI2LDggKzEzMSw5IEBACiAJZ2l0X2F0dHJfY2FjaGUgKmF0dHJjYWNoZTsKIAlnaXRfZGlmZl9kcml2ZXJfcmVnaXN0cnkgKmRpZmZfZHJpdmVyczsKIAotCWNoYXIgKnBhdGhfcmVwb3NpdG9yeTsKLQljaGFyICpwYXRoX2dpdGxpbms7CisJY2hhciAqZ2l0bGluazsKKwljaGFyICpnaXRkaXI7CisJY2hhciAqY29tbW9uZGlyOwogCWNoYXIgKndvcmtkaXI7CiAJY2hhciAqbmFtZXNwYWNlOwogCkBAIC0xMzcsNiArMTQzLDcgQEAKIAlnaXRfYXJyYXlfdChnaXRfYnVmKSByZXNlcnZlZF9uYW1lczsKIAogCXVuc2lnbmVkIGlzX2JhcmU6MTsKKwl1bnNpZ25lZCBpc193b3JrdHJlZToxOwogCiAJdW5zaWduZWQgaW50IGxydV9jb3VudGVyOwogCkBAIC0xNTIsNiArMTU5LDI3IEBACiB9CiAKIGludCBnaXRfcmVwb3NpdG9yeV9oZWFkX3RyZWUoZ2l0X3RyZWUgKip0cmVlLCBnaXRfcmVwb3NpdG9yeSAqcmVwbyk7CitpbnQgZ2l0X3JlcG9zaXRvcnlfY3JlYXRlX2hlYWQoY29uc3QgY2hhciAqZ2l0X2RpciwgY29uc3QgY2hhciAqcmVmX25hbWUpOworCisvKgorICogQ2FsbGVkIGZvciBlYWNoIEhFQUQuCisgKgorICogQ2FuIHJldHVybiBlaXRoZXIgMCwgY2F1c2luZyB0aGUgaXRlcmF0aW9uIG92ZXIgSEVBRHMgdG8KKyAqIGNvbnRpbnVlLCBvciBhIG5vbi0wIHZhbHVlIGNhdXNpbmcgdGhlIGl0ZXJhdGlvbiB0byBhYm9ydC4gVGhlCisgKiByZXR1cm4gdmFsdWUgaXMgcGFzc2VkIGJhY2sgdG8gdGhlIGNhbGxlciBvZgorICogYGdpdF9yZXBvc2l0b3J5X2ZvcmVhY2hfaGVhZGAKKyAqLwordHlwZWRlZiBpbnQgKCpnaXRfcmVwb3NpdG9yeV9mb3JlYWNoX2hlYWRfY2IpKGdpdF9yZXBvc2l0b3J5ICpyZXBvLCBjb25zdCBjaGFyICpwYXRoLCB2b2lkICpwYXlsb2FkKTsKKworLyoKKyAqIEl0ZXJhdGUgb3ZlciByZXBvc2l0b3J5IGFuZCBhbGwgd29ya3RyZWUgSEVBRHMuCisgKgorICogVGhpcyBmdW5jdGlvbiB3aWxsIGJlIGNhbGxlZCBmb3IgdGhlIHJlcG9zaXRvcnkgSEVBRCBhbmQgZm9yCisgKiBhbGwgSEVBRFMgb2YgbGlua2VkIHdvcmt0cmVlcy4gRm9yIGVhY2ggSEVBRCwgdGhlIGNhbGxiYWNrIGlzCisgKiBleGVjdXRlZCB3aXRoIHRoZSBnaXZlbiBwYXlsb2FkLiBUaGUgcmV0dXJuIHZhbHVlIGVxdWFscyB0aGUKKyAqIHJldHVybiB2YWx1ZSBvZiB0aGUgbGFzdCBleGVjdXRlZCBjYWxsYmFjayBmdW5jdGlvbi4KKyAqLworaW50IGdpdF9yZXBvc2l0b3J5X2ZvcmVhY2hfaGVhZChnaXRfcmVwb3NpdG9yeSAqcmVwbywgZ2l0X3JlcG9zaXRvcnlfZm9yZWFjaF9oZWFkX2NiIGNiLCB2b2lkICpwYXlsb2FkKTsKIAogLyoKICAqIFdlYWsgcG9pbnRlcnMgdG8gcmVwb3NpdG9yeSBpbnRlcm5hbHMuCmRpZmYgLS1naXQgYS9zcmMvcmV2ZXJ0LmMgYi9zcmMvcmV2ZXJ0LmMKaW5kZXggYjI1NTI0NS4uNzQ3OTM4ZiAxMDA2NDQKLS0tIGEvc3JjL3JldmVydC5jCisrKyBiL3NyYy9yZXZlcnQuYwpAQCAtMjcsNyArMjcsNyBAQAogCWdpdF9idWYgZmlsZV9wYXRoID0gR0lUX0JVRl9JTklUOwogCWludCBlcnJvciA9IDA7CiAKLQlpZiAoKGVycm9yID0gZ2l0X2J1Zl9qb2lucGF0aCgmZmlsZV9wYXRoLCByZXBvLT5wYXRoX3JlcG9zaXRvcnksIEdJVF9SRVZFUlRfSEVBRF9GSUxFKSkgPj0gMCAmJgorCWlmICgoZXJyb3IgPSBnaXRfYnVmX2pvaW5wYXRoKCZmaWxlX3BhdGgsIHJlcG8tPmdpdGRpciwgR0lUX1JFVkVSVF9IRUFEX0ZJTEUpKSA+PSAwICYmCiAJCShlcnJvciA9IGdpdF9maWxlYnVmX29wZW4oJmZpbGUsIGZpbGVfcGF0aC5wdHIsIEdJVF9GSUxFQlVGX0ZPUkNFLCBHSVRfUkVWRVJUX0ZJTEVfTU9ERSkpID49IDAgJiYKIAkJKGVycm9yID0gZ2l0X2ZpbGVidWZfcHJpbnRmKCZmaWxlLCAiJXNcbiIsIGNvbW1pdF9vaWRzdHIpKSA+PSAwKQogCQllcnJvciA9IGdpdF9maWxlYnVmX2NvbW1pdCgmZmlsZSk7CkBAIC00OSw3ICs0OSw3IEBACiAJZ2l0X2J1ZiBmaWxlX3BhdGggPSBHSVRfQlVGX0lOSVQ7CiAJaW50IGVycm9yID0gMDsKIAotCWlmICgoZXJyb3IgPSBnaXRfYnVmX2pvaW5wYXRoKCZmaWxlX3BhdGgsIHJlcG8tPnBhdGhfcmVwb3NpdG9yeSwgR0lUX01FUkdFX01TR19GSUxFKSkgPCAwIHx8CisJaWYgKChlcnJvciA9IGdpdF9idWZfam9pbnBhdGgoJmZpbGVfcGF0aCwgcmVwby0+Z2l0ZGlyLCBHSVRfTUVSR0VfTVNHX0ZJTEUpKSA8IDAgfHwKIAkJKGVycm9yID0gZ2l0X2ZpbGVidWZfb3BlbigmZmlsZSwgZmlsZV9wYXRoLnB0ciwgR0lUX0ZJTEVCVUZfRk9SQ0UsIEdJVF9SRVZFUlRfRklMRV9NT0RFKSkgPCAwIHx8CiAJCShlcnJvciA9IGdpdF9maWxlYnVmX3ByaW50ZigmZmlsZSwgIlJldmVydCBcIiVzXCJcblxuVGhpcyByZXZlcnRzIGNvbW1pdCAlcy5cbiIsCiAJCWNvbW1pdF9tc2dsaW5lLCBjb21taXRfb2lkc3RyKSkgPCAwKQpkaWZmIC0tZ2l0IGEvc3JjL3JldnBhcnNlLmMgYi9zcmMvcmV2cGFyc2UuYwppbmRleCBkNTUxMWI0Li5mZDZiZDFlIDEwMDY0NAotLS0gYS9zcmMvcmV2cGFyc2UuYworKysgYi9zcmMvcmV2cGFyc2UuYwpAQCAtODkyLDYgKzg5MiwxNyBAQAogCQljb25zdCBjaGFyICpyc3RyOwogCQlyZXZzcGVjLT5mbGFncyA9IEdJVF9SRVZQQVJTRV9SQU5HRTsKIAorCQkvKgorCQkgKiBGb2xsb3dpbmcgZ2l0LmdpdCwgZG9uJ3QgYWxsb3cgJy4uJyBiZWNhdXNlIGl0IG1ha2VzIGNvbW1hbmQgbGluZQorCQkgKiBhcmd1bWVudHMgd2hpY2ggY2FuIGJlIGVpdGhlciBwYXRocyBvciByZXZpc2lvbnMgYW1iaWd1b3VzIHdoZW4gdGhlCisJCSAqIHBhdGggaXMgYWxtb3N0IGNlcnRhaW5seSBpbnRlbmRlZC4gVGhlIGVtcHR5IHJhbmdlICcuLi4nIGlzIHN0aWxsCisJCSAqIGFsbG93ZWQuCisJCSAqLworCQlpZiAoIWdpdF9fc3RyY21wKHNwZWMsICIuLiIpKSB7CisJCQlnaXRlcnJfc2V0KEdJVEVSUl9JTlZBTElELCAiSW52YWxpZCBwYXR0ZXJuICcuLiciKTsKKwkJCXJldHVybiBHSVRfRUlOVkFMSURTUEVDOworCQl9CisKIAkJbHN0ciA9IGdpdF9fc3Vic3RyZHVwKHNwZWMsIGRvdGRvdCAtIHNwZWMpOwogCQlyc3RyID0gZG90ZG90ICsgMjsKIAkJaWYgKGRvdGRvdFsyXSA9PSAnLicpIHsKQEAgLTg5OSw5ICs5MTAsMTcgQEAKIAkJCXJzdHIrKzsKIAkJfQogCi0JCWVycm9yID0gZ2l0X3JldnBhcnNlX3NpbmdsZSgmcmV2c3BlYy0+ZnJvbSwgcmVwbywgbHN0cik7Ci0JCWlmICghZXJyb3IpCi0JCQllcnJvciA9IGdpdF9yZXZwYXJzZV9zaW5nbGUoJnJldnNwZWMtPnRvLCByZXBvLCByc3RyKTsKKwkJZXJyb3IgPSBnaXRfcmV2cGFyc2Vfc2luZ2xlKAorCQkJJnJldnNwZWMtPmZyb20sCisJCQlyZXBvLAorCQkJKmxzdHIgPT0gJ1wwJyA/ICJIRUFEIiA6IGxzdHIpOworCisJCWlmICghZXJyb3IpIHsKKwkJCWVycm9yID0gZ2l0X3JldnBhcnNlX3NpbmdsZSgKKwkJCQkmcmV2c3BlYy0+dG8sCisJCQkJcmVwbywKKwkJCQkqcnN0ciA9PSAnXDAnID8gIkhFQUQiIDogcnN0cik7CisJCX0KIAogCQlnaXRfX2ZyZWUoKHZvaWQqKWxzdHIpOwogCX0gZWxzZSB7CmRpZmYgLS1naXQgYS9zcmMvcmV2d2Fsay5jIGIvc3JjL3JldndhbGsuYwppbmRleCA4YzM3MGJjLi43N2ZhOWZkIDEwMDY0NAotLS0gYS9zcmMvcmV2d2Fsay5jCisrKyBiL3NyYy9yZXZ3YWxrLmMKQEAgLTE1LDggKzE1LDYgQEAKICNpbmNsdWRlICJtZXJnZS5oIgogI2luY2x1ZGUgInZlY3Rvci5oIgogCi1HSVRfX1VTRV9PSURNQVAKLQogZ2l0X2NvbW1pdF9saXN0X25vZGUgKmdpdF9yZXZ3YWxrX19jb21taXRfbG9va3VwKAogCWdpdF9yZXZ3YWxrICp3YWxrLCBjb25zdCBnaXRfb2lkICpvaWQpCiB7CkBAIC0yNSw5ICsyMyw5IEBACiAJaW50IHJldDsKIAogCS8qIGxvb2t1cCBhbmQgcmVzZXJ2ZSBzcGFjZSBpZiBub3QgYWxyZWFkeSBwcmVzZW50ICovCi0JcG9zID0ga2hfZ2V0KG9pZCwgd2Fsay0+Y29tbWl0cywgb2lkKTsKLQlpZiAocG9zICE9IGtoX2VuZCh3YWxrLT5jb21taXRzKSkKLQkJcmV0dXJuIGtoX3ZhbHVlKHdhbGstPmNvbW1pdHMsIHBvcyk7CisJcG9zID0gZ2l0X29pZG1hcF9sb29rdXBfaW5kZXgod2Fsay0+Y29tbWl0cywgb2lkKTsKKwlpZiAoZ2l0X29pZG1hcF92YWxpZF9pbmRleCh3YWxrLT5jb21taXRzLCBwb3MpKQorCQlyZXR1cm4gZ2l0X29pZG1hcF92YWx1ZV9hdCh3YWxrLT5jb21taXRzLCBwb3MpOwogCiAJY29tbWl0ID0gZ2l0X2NvbW1pdF9saXN0X2FsbG9jX25vZGUod2Fsayk7CiAJaWYgKGNvbW1pdCA9PSBOVUxMKQpAQCAtMzUsOSArMzMsOSBAQAogCiAJZ2l0X29pZF9jcHkoJmNvbW1pdC0+b2lkLCBvaWQpOwogCi0JcG9zID0ga2hfcHV0KG9pZCwgd2Fsay0+Y29tbWl0cywgJmNvbW1pdC0+b2lkLCAmcmV0KTsKKwlwb3MgPSBnaXRfb2lkbWFwX3B1dCh3YWxrLT5jb21taXRzLCAmY29tbWl0LT5vaWQsICZyZXQpOwogCWFzc2VydChyZXQgIT0gMCk7Ci0Ja2hfdmFsdWUod2Fsay0+Y29tbWl0cywgcG9zKSA9IGNvbW1pdDsKKwlnaXRfb2lkbWFwX3NldF92YWx1ZV9hdCh3YWxrLT5jb21taXRzLCBwb3MsIGNvbW1pdCk7CiAKIAlyZXR1cm4gY29tbWl0OwogfQpAQCAtMjMzLDkgKzIzMSwxMiBAQAogewogCWdpdF9jb21taXRfbGlzdF9ub2RlICpuZXh0OwogCi0JaWYgKChuZXh0ID0gZ2l0X3BxdWV1ZV9wb3AoJndhbGstPml0ZXJhdG9yX3RpbWUpKSAhPSBOVUxMKSB7Ci0JCSpvYmplY3Rfb3V0ID0gbmV4dDsKLQkJcmV0dXJuIDA7CisJd2hpbGUgKChuZXh0ID0gZ2l0X3BxdWV1ZV9wb3AoJndhbGstPml0ZXJhdG9yX3RpbWUpKSAhPSBOVUxMKSB7CisJCS8qIFNvbWUgY29tbWl0cyBtaWdodCBiZWNvbWUgdW5pbnRlcmVzdGluZyBhZnRlciBiZWluZyBhZGRlZCB0byB0aGUgbGlzdCAqLworCQlpZiAoIW5leHQtPnVuaW50ZXJlc3RpbmcpIHsKKwkJCSpvYmplY3Rfb3V0ID0gbmV4dDsKKwkJCXJldHVybiAwOworCQl9CiAJfQogCiAJZ2l0ZXJyX2NsZWFyKCk7CkBAIC03MDIsNyArNzAzLDcgQEAKIAogCWFzc2VydCh3YWxrKTsKIAotCWtoX2ZvcmVhY2hfdmFsdWUod2Fsay0+Y29tbWl0cywgY29tbWl0LCB7CisJZ2l0X29pZG1hcF9mb3JlYWNoX3ZhbHVlKHdhbGstPmNvbW1pdHMsIGNvbW1pdCwgewogCQljb21taXQtPnNlZW4gPSAwOwogCQljb21taXQtPmluX2RlZ3JlZSA9IDA7CiAJCWNvbW1pdC0+dG9wb19kZWxheSA9IDA7CmRpZmYgLS1naXQgYS9zcmMvc2V0dGluZ3MuYyBiL3NyYy9zZXR0aW5ncy5jCmluZGV4IDIyMmJkNmIuLjUyYjg2MWIgMTAwNjQ0Ci0tLSBhL3NyYy9zZXR0aW5ncy5jCisrKyBiL3NyYy9zZXR0aW5ncy5jCkBAIC0xNSw3ICsxNSw5IEBACiAjaW5jbHVkZSAiY2FjaGUuaCIKICNpbmNsdWRlICJnbG9iYWwuaCIKICNpbmNsdWRlICJvYmplY3QuaCIKKyNpbmNsdWRlICJvZGIuaCIKICNpbmNsdWRlICJyZWZzLmgiCisjaW5jbHVkZSAidHJhbnNwb3J0cy9zbWFydC5oIgogCiB2b2lkIGdpdF9saWJnaXQyX3ZlcnNpb24oaW50ICptYWpvciwgaW50ICptaW5vciwgaW50ICpyZXYpCiB7CkBAIC0zMCw3ICszMiw3IEBACiAjaWZkZWYgR0lUX1RIUkVBRFMKIAkJfCBHSVRfRkVBVFVSRV9USFJFQURTCiAjZW5kaWYKLSNpZiBkZWZpbmVkKEdJVF9PUEVOU1NMKSB8fCBkZWZpbmVkKEdJVF9XSU5IVFRQKSB8fCBkZWZpbmVkKEdJVF9TRUNVUkVfVFJBTlNQT1JUKQorI2lmZGVmIEdJVF9IVFRQUwogCQl8IEdJVF9GRUFUVVJFX0hUVFBTCiAjZW5kaWYKICNpZiBkZWZpbmVkKEdJVF9TU0gpCkBAIC0yMjIsNiArMjI0LDMwIEBACiAJCX0KIAkJYnJlYWs7CiAKKwljYXNlIEdJVF9PUFRfRU5BQkxFX09GU19ERUxUQToKKwkJZ2l0X3NtYXJ0X19vZnNfZGVsdGFfZW5hYmxlZCA9ICh2YV9hcmcoYXAsIGludCkgIT0gMCk7CisJCWJyZWFrOworCisJY2FzZSBHSVRfT1BUX0VOQUJMRV9GU1lOQ19HSVRESVI6CisJCWdpdF9yZXBvc2l0b3J5X19mc3luY19naXRkaXIgPSAodmFfYXJnKGFwLCBpbnQpICE9IDApOworCQlicmVhazsKKworCWNhc2UgR0lUX09QVF9HRVRfV0lORE9XU19TSEFSRU1PREU6CisjaWZkZWYgR0lUX1dJTjMyCisJCSoodmFfYXJnKGFwLCB1bnNpZ25lZCBsb25nICopKSA9IGdpdF93aW4zMl9fY3JlYXRlZmlsZV9zaGFyZW1vZGU7CisjZW5kaWYKKwkJYnJlYWs7CisKKwljYXNlIEdJVF9PUFRfU0VUX1dJTkRPV1NfU0hBUkVNT0RFOgorI2lmZGVmIEdJVF9XSU4zMgorCQlnaXRfd2luMzJfX2NyZWF0ZWZpbGVfc2hhcmVtb2RlID0gdmFfYXJnKGFwLCB1bnNpZ25lZCBsb25nKTsKKyNlbmRpZgorCQlicmVhazsKKworCWNhc2UgR0lUX09QVF9FTkFCTEVfU1RSSUNUX0hBU0hfVkVSSUZJQ0FUSU9OOgorCQlnaXRfb2RiX19zdHJpY3RfaGFzaF92ZXJpZmljYXRpb24gPSAodmFfYXJnKGFwLCBpbnQpICE9IDApOworCQlicmVhazsKKwogCWRlZmF1bHQ6CiAJCWdpdGVycl9zZXQoR0lURVJSX0lOVkFMSUQsICJpbnZhbGlkIG9wdGlvbiBrZXkiKTsKIAkJZXJyb3IgPSAtMTsKZGlmZiAtLWdpdCBhL3NyYy9zaWduYXR1cmUuYyBiL3NyYy9zaWduYXR1cmUuYwppbmRleCBlNzkyYTUyLi5hNTZiOGEyIDEwMDY0NAotLS0gYS9zcmMvc2lnbmF0dXJlLmMKKysrIGIvc3JjL3NpZ25hdHVyZS5jCkBAIC0yMjgsOCArMjI4LDExIEBACiAJCWNvbnN0IGNoYXIgKnRpbWVfc3RhcnQgPSBlbWFpbF9lbmQgKyAyOwogCQljb25zdCBjaGFyICp0aW1lX2VuZDsKIAotCQlpZiAoZ2l0X19zdHJ0b2w2NCgmc2lnLT53aGVuLnRpbWUsIHRpbWVfc3RhcnQsICZ0aW1lX2VuZCwgMTApIDwgMCkKKwkJaWYgKGdpdF9fc3RydG9sNjQoJnNpZy0+d2hlbi50aW1lLCB0aW1lX3N0YXJ0LCAmdGltZV9lbmQsIDEwKSA8IDApIHsKKwkJCWdpdF9fZnJlZShzaWctPm5hbWUpOworCQkJZ2l0X19mcmVlKHNpZy0+ZW1haWwpOwogCQkJcmV0dXJuIHNpZ25hdHVyZV9lcnJvcigiaW52YWxpZCBVbml4IHRpbWVzdGFtcCIpOworCQl9CiAKIAkJLyogZG8gd2UgaGF2ZSBhIHRpbWV6b25lPyAqLwogCQlpZiAodGltZV9lbmQgKyAxIDwgYnVmZmVyX2VuZCkgewpkaWZmIC0tZ2l0IGEvc3JjL3NvY2tldF9zdHJlYW0uYyBiL3NyYy9zb2NrZXRfc3RyZWFtLmMKaW5kZXggZmNhNDExNy4uYzBhMTY4NCAxMDA2NDQKLS0tIGEvc3JjL3NvY2tldF9zdHJlYW0uYworKysgYi9zcmMvc29ja2V0X3N0cmVhbS5jCkBAIC0xMDYsMTAgKzEwNiw4IEBACiAJZm9yIChwID0gaW5mbzsgcCAhPSBOVUxMOyBwID0gcC0+YWlfbmV4dCkgewogCQlzID0gc29ja2V0KHAtPmFpX2ZhbWlseSwgcC0+YWlfc29ja3R5cGUsIHAtPmFpX3Byb3RvY29sKTsKIAotCQlpZiAocyA9PSBJTlZBTElEX1NPQ0tFVCkgewotCQkJbmV0X3NldF9lcnJvcigiZXJyb3IgY3JlYXRpbmcgc29ja2V0Iik7Ci0JCQlicmVhazsKLQkJfQorCQlpZiAocyA9PSBJTlZBTElEX1NPQ0tFVCkKKwkJCWNvbnRpbnVlOwogCiAJCWlmIChjb25uZWN0KHMsIHAtPmFpX2FkZHIsIChzb2NrbGVuX3QpcC0+YWlfYWRkcmxlbikgPT0gMCkKIAkJCWJyZWFrOwpkaWZmIC0tZ2l0IGEvc3JjL3NvcnRlZGNhY2hlLmMgYi9zcmMvc29ydGVkY2FjaGUuYwppbmRleCBjNWUzMzhmLi5jYzMyMmQ0IDEwMDY0NAotLS0gYS9zcmMvc29ydGVkY2FjaGUuYworKysgYi9zcmMvc29ydGVkY2FjaGUuYwpAQCAtMSw3ICsxLDUgQEAKICNpbmNsdWRlICJzb3J0ZWRjYWNoZS5oIgogCi1HSVRfX1VTRV9TVFJNQVAKLQogaW50IGdpdF9zb3J0ZWRjYWNoZV9uZXcoCiAJZ2l0X3NvcnRlZGNhY2hlICoqb3V0LAogCXNpemVfdCBpdGVtX3BhdGhfb2Zmc2V0LApAQCAtMjk0LDEzICsyOTIsMTMgQEAKIAlpdGVtX2tleSA9ICgoY2hhciAqKWl0ZW0pICsgc2MtPml0ZW1fcGF0aF9vZmZzZXQ7CiAJbWVtY3B5KGl0ZW1fa2V5LCBrZXksIGtleWxlbik7CiAKLQlwb3MgPSBraF9wdXQoc3RyLCBzYy0+bWFwLCBpdGVtX2tleSwgJmVycm9yKTsKKwlwb3MgPSBnaXRfc3RybWFwX3B1dChzYy0+bWFwLCBpdGVtX2tleSwgJmVycm9yKTsKIAlpZiAoZXJyb3IgPCAwKQogCQlnb3RvIGRvbmU7CiAKIAlpZiAoIWVycm9yKQotCQlraF9rZXkoc2MtPm1hcCwgcG9zKSA9IGl0ZW1fa2V5OwotCWtoX3ZhbChzYy0+bWFwLCBwb3MpID0gaXRlbTsKKwkJZ2l0X3N0cm1hcF9zZXRfa2V5X2F0KHNjLT5tYXAsIHBvcywgaXRlbV9rZXkpOworCWdpdF9zdHJtYXBfc2V0X3ZhbHVlX2F0KHNjLT5tYXAsIHBvcywgaXRlbSk7CiAKIAllcnJvciA9IGdpdF92ZWN0b3JfaW5zZXJ0KCZzYy0+aXRlbXMsIGl0ZW0pOwogCWlmIChlcnJvciA8IDApCmRpZmYgLS1naXQgYS9zcmMvc3RybWFwLmMgYi9zcmMvc3RybWFwLmMKaW5kZXggYjI2YTEzZC4uZGU2ODI2ZCAxMDA2NDQKLS0tIGEvc3JjL3N0cm1hcC5jCisrKyBiL3NyYy9zdHJtYXAuYwpAQCAtNyw2ICs3LDEwMSBAQAogCiAjaW5jbHVkZSAic3RybWFwLmgiCiAKK19fS0hBU0hfSU1QTChzdHIsIHN0YXRpYyBraF9pbmxpbmUsIGNvbnN0IGNoYXIgKiwgdm9pZCAqLCAxLCBraF9zdHJfaGFzaF9mdW5jLCBraF9zdHJfaGFzaF9lcXVhbCkKKworaW50IGdpdF9zdHJtYXBfYWxsb2MoZ2l0X3N0cm1hcCAqKm1hcCkKK3sKKwlpZiAoKCptYXAgPSBraF9pbml0KHN0cikpID09IE5VTEwpIHsKKwkJZ2l0ZXJyX3NldF9vb20oKTsKKwkJcmV0dXJuIC0xOworCX0KKworCXJldHVybiAwOworfQorCit2b2lkIGdpdF9zdHJtYXBfZnJlZShnaXRfc3RybWFwICptYXApCit7CisJa2hfZGVzdHJveShzdHIsIG1hcCk7Cit9CisKK3ZvaWQgZ2l0X3N0cm1hcF9jbGVhcihnaXRfc3RybWFwICptYXApCit7CisJa2hfY2xlYXIoc3RyLCBtYXApOworfQorCitzaXplX3QgZ2l0X3N0cm1hcF9udW1fZW50cmllcyhnaXRfc3RybWFwICptYXApCit7CisJcmV0dXJuIGtoX3NpemUobWFwKTsKK30KKworc2l6ZV90IGdpdF9zdHJtYXBfbG9va3VwX2luZGV4KGdpdF9zdHJtYXAgKm1hcCwgY29uc3QgY2hhciAqa2V5KQoreworCXJldHVybiBraF9nZXQoc3RyLCBtYXAsIGtleSk7Cit9CisKK2ludCBnaXRfc3RybWFwX3ZhbGlkX2luZGV4KGdpdF9zdHJtYXAgKm1hcCwgc2l6ZV90IGlkeCkKK3sKKwlyZXR1cm4gaWR4ICE9IGtoX2VuZChtYXApOworfQorCitpbnQgZ2l0X3N0cm1hcF9leGlzdHMoZ2l0X3N0cm1hcCAqbWFwLCBjb25zdCBjaGFyICprZXkpCit7CisJcmV0dXJuIGtoX2dldChzdHIsIG1hcCwga2V5KSAhPSBraF9lbmQobWFwKTsKK30KKworaW50IGdpdF9zdHJtYXBfaGFzX2RhdGEoZ2l0X3N0cm1hcCAqbWFwLCBzaXplX3QgaWR4KQoreworCXJldHVybiBraF9leGlzdChtYXAsIGlkeCk7Cit9CisKK2NvbnN0IGNoYXIgKmdpdF9zdHJtYXBfa2V5KGdpdF9zdHJtYXAgKm1hcCwgc2l6ZV90IGlkeCkKK3sKKwlyZXR1cm4ga2hfa2V5KG1hcCwgaWR4KTsKK30KKwordm9pZCBnaXRfc3RybWFwX3NldF9rZXlfYXQoZ2l0X3N0cm1hcCAqbWFwLCBzaXplX3QgaWR4LCBjaGFyICprZXkpCit7CisJa2hfdmFsKG1hcCwgaWR4KSA9IGtleTsKK30KKwordm9pZCAqZ2l0X3N0cm1hcF92YWx1ZV9hdChnaXRfc3RybWFwICptYXAsIHNpemVfdCBpZHgpCit7CisJcmV0dXJuIGtoX3ZhbChtYXAsIGlkeCk7Cit9CisKK3ZvaWQgZ2l0X3N0cm1hcF9zZXRfdmFsdWVfYXQoZ2l0X3N0cm1hcCAqbWFwLCBzaXplX3QgaWR4LCB2b2lkICp2YWx1ZSkKK3sKKwlraF92YWwobWFwLCBpZHgpID0gdmFsdWU7Cit9CisKK3ZvaWQgZ2l0X3N0cm1hcF9kZWxldGVfYXQoZ2l0X3N0cm1hcCAqbWFwLCBzaXplX3QgaWR4KQoreworCWtoX2RlbChzdHIsIG1hcCwgaWR4KTsKK30KKworaW50IGdpdF9zdHJtYXBfcHV0KGdpdF9zdHJtYXAgKm1hcCwgY29uc3QgY2hhciAqa2V5LCBpbnQgKmVycikKK3sKKwlyZXR1cm4ga2hfcHV0KHN0ciwgbWFwLCBrZXksIGVycik7Cit9CisKK3ZvaWQgZ2l0X3N0cm1hcF9pbnNlcnQoZ2l0X3N0cm1hcCAqbWFwLCBjb25zdCBjaGFyICprZXksIHZvaWQgKnZhbHVlLCBpbnQgKnJ2YWwpCit7CisJa2hpdGVyX3QgaWR4ID0ga2hfcHV0KHN0ciwgbWFwLCBrZXksIHJ2YWwpOworCisJaWYgKCgqcnZhbCkgPj0gMCkgeworCQlpZiAoKCpydmFsKSA9PSAwKQorCQkJa2hfa2V5KG1hcCwgaWR4KSA9IGtleTsKKwkJa2hfdmFsKG1hcCwgaWR4KSA9IHZhbHVlOworCX0KK30KKwordm9pZCBnaXRfc3RybWFwX2RlbGV0ZShnaXRfc3RybWFwICptYXAsIGNvbnN0IGNoYXIgKmtleSkKK3sKKwlraGl0ZXJfdCBpZHggPSBnaXRfc3RybWFwX2xvb2t1cF9pbmRleChtYXAsIGtleSk7CisJaWYgKGdpdF9zdHJtYXBfdmFsaWRfaW5kZXgobWFwLCBpZHgpKQorCQlnaXRfc3RybWFwX2RlbGV0ZV9hdChtYXAsIGlkeCk7Cit9CisKIGludCBnaXRfc3RybWFwX25leHQoCiAJdm9pZCAqKmRhdGEsCiAJZ2l0X3N0cm1hcF9pdGVyKiBpdGVyLApkaWZmIC0tZ2l0IGEvc3JjL3N0cm1hcC5oIGIvc3JjL3N0cm1hcC5oCmluZGV4IDUyMDk4NDcuLjgwMmI5MjQgMTAwNjQ0Ci0tLSBhL3NyYy9zdHJtYXAuaAorKysgYi9zcmMvc3RybWFwLmgKQEAgLTIwLDQ5ICsyMCwyNyBAQAogdHlwZWRlZiBraGFzaF90KHN0cikgZ2l0X3N0cm1hcDsKIHR5cGVkZWYga2hpdGVyX3QgZ2l0X3N0cm1hcF9pdGVyOwogCi0jZGVmaW5lIEdJVF9fVVNFX1NUUk1BUCBcCi0JX19LSEFTSF9JTVBMKHN0ciwgc3RhdGljIGtoX2lubGluZSwgY29uc3QgY2hhciAqLCB2b2lkICosIDEsIGtoX3N0cl9oYXNoX2Z1bmMsIGtoX3N0cl9oYXNoX2VxdWFsKQoraW50IGdpdF9zdHJtYXBfYWxsb2MoZ2l0X3N0cm1hcCAqKm1hcCk7Cit2b2lkIGdpdF9zdHJtYXBfZnJlZShnaXRfc3RybWFwICptYXApOwordm9pZCBnaXRfc3RybWFwX2NsZWFyKGdpdF9zdHJtYXAgKm1hcCk7CiAKLSNkZWZpbmUgZ2l0X3N0cm1hcF9hbGxvYyhocCkgXAotCSgoKihocCkgPSBraF9pbml0KHN0cikpID09IE5VTEwpID8gZ2l0ZXJyX3NldF9vb20oKSwgLTEgOiAwCitzaXplX3QgZ2l0X3N0cm1hcF9udW1fZW50cmllcyhnaXRfc3RybWFwICptYXApOwogCi0jZGVmaW5lIGdpdF9zdHJtYXBfZnJlZShoKSAga2hfZGVzdHJveShzdHIsIGgpLCBoID0gTlVMTAotI2RlZmluZSBnaXRfc3RybWFwX2NsZWFyKGgpIGtoX2NsZWFyKHN0ciwgaCkKK3NpemVfdCBnaXRfc3RybWFwX2xvb2t1cF9pbmRleChnaXRfc3RybWFwICptYXAsIGNvbnN0IGNoYXIgKmtleSk7CitpbnQgZ2l0X3N0cm1hcF92YWxpZF9pbmRleChnaXRfc3RybWFwICptYXAsIHNpemVfdCBpZHgpOwogCi0jZGVmaW5lIGdpdF9zdHJtYXBfbnVtX2VudHJpZXMoaCkga2hfc2l6ZShoKQoraW50IGdpdF9zdHJtYXBfZXhpc3RzKGdpdF9zdHJtYXAgKm1hcCwgY29uc3QgY2hhciAqa2V5KTsKK2ludCBnaXRfc3RybWFwX2hhc19kYXRhKGdpdF9zdHJtYXAgKm1hcCwgc2l6ZV90IGlkeCk7CiAKLSNkZWZpbmUgZ2l0X3N0cm1hcF9sb29rdXBfaW5kZXgoaCwgaykgIGtoX2dldChzdHIsIGgsIGspCi0jZGVmaW5lIGdpdF9zdHJtYXBfdmFsaWRfaW5kZXgoaCwgaWR4KSAoaWR4ICE9IGtoX2VuZChoKSkKK2NvbnN0IGNoYXIgKmdpdF9zdHJtYXBfa2V5KGdpdF9zdHJtYXAgKm1hcCwgc2l6ZV90IGlkeCk7Cit2b2lkIGdpdF9zdHJtYXBfc2V0X2tleV9hdChnaXRfc3RybWFwICptYXAsIHNpemVfdCBpZHgsIGNoYXIgKmtleSk7Cit2b2lkICpnaXRfc3RybWFwX3ZhbHVlX2F0KGdpdF9zdHJtYXAgKm1hcCwgc2l6ZV90IGlkeCk7Cit2b2lkIGdpdF9zdHJtYXBfc2V0X3ZhbHVlX2F0KGdpdF9zdHJtYXAgKm1hcCwgc2l6ZV90IGlkeCwgdm9pZCAqdmFsdWUpOwordm9pZCBnaXRfc3RybWFwX2RlbGV0ZV9hdChnaXRfc3RybWFwICptYXAsIHNpemVfdCBpZHgpOwogCi0jZGVmaW5lIGdpdF9zdHJtYXBfZXhpc3RzKGgsIGspIChraF9nZXQoc3RyLCBoLCBrKSAhPSBraF9lbmQoaCkpCi0jZGVmaW5lIGdpdF9zdHJtYXBfaGFzX2RhdGEoaCwgaWR4KSBraF9leGlzdChoLCBpZHgpCi0KLSNkZWZpbmUgZ2l0X3N0cm1hcF9rZXkoaCwgaWR4KSAgICAgICAgICAgICBraF9rZXkoaCwgaWR4KQotI2RlZmluZSBnaXRfc3RybWFwX3ZhbHVlX2F0KGgsIGlkeCkgICAgICAgIGtoX3ZhbChoLCBpZHgpCi0jZGVmaW5lIGdpdF9zdHJtYXBfc2V0X3ZhbHVlX2F0KGgsIGlkeCwgdikga2hfdmFsKGgsIGlkeCkgPSB2Ci0jZGVmaW5lIGdpdF9zdHJtYXBfZGVsZXRlX2F0KGgsIGlkeCkgICAgICAga2hfZGVsKHN0ciwgaCwgaWR4KQotCi0jZGVmaW5lIGdpdF9zdHJtYXBfaW5zZXJ0KGgsIGtleSwgdmFsLCBydmFsKSBkbyB7IFwKLQlraGl0ZXJfdCBfX3BvcyA9IGtoX3B1dChzdHIsIGgsIGtleSwgJnJ2YWwpOyBcCi0JaWYgKHJ2YWwgPj0gMCkgeyBcCi0JCWlmIChydmFsID09IDApIGtoX2tleShoLCBfX3BvcykgPSBrZXk7IFwKLQkJa2hfdmFsKGgsIF9fcG9zKSA9IHZhbDsgXAotCX0gfSB3aGlsZSAoMCkKLQotI2RlZmluZSBnaXRfc3RybWFwX2luc2VydDIoaCwga2V5LCB2YWwsIG9sZHYsIHJ2YWwpIGRvIHsgXAotCWtoaXRlcl90IF9fcG9zID0ga2hfcHV0KHN0ciwgaCwga2V5LCAmcnZhbCk7IFwKLQlpZiAocnZhbCA+PSAwKSB7IFwKLQkJaWYgKHJ2YWwgPT0gMCkgeyBcCi0JCQlvbGR2ID0ga2hfdmFsKGgsIF9fcG9zKTsgXAotCQkJa2hfa2V5KGgsIF9fcG9zKSA9IGtleTsgXAotCQl9IGVsc2UgeyBvbGR2ID0gTlVMTDsgfSBcCi0JCWtoX3ZhbChoLCBfX3BvcykgPSB2YWw7IFwKLQl9IH0gd2hpbGUgKDApCi0KLSNkZWZpbmUgZ2l0X3N0cm1hcF9kZWxldGUoaCwga2V5KSBkbyB7IFwKLQlraGl0ZXJfdCBfX3BvcyA9IGdpdF9zdHJtYXBfbG9va3VwX2luZGV4KGgsIGtleSk7IFwKLQlpZiAoZ2l0X3N0cm1hcF92YWxpZF9pbmRleChoLCBfX3BvcykpIFwKLQkJZ2l0X3N0cm1hcF9kZWxldGVfYXQoaCwgX19wb3MpOyB9IHdoaWxlICgwKQoraW50IGdpdF9zdHJtYXBfcHV0KGdpdF9zdHJtYXAgKm1hcCwgY29uc3QgY2hhciAqa2V5LCBpbnQgKmVycik7Cit2b2lkIGdpdF9zdHJtYXBfaW5zZXJ0KGdpdF9zdHJtYXAgKm1hcCwgY29uc3QgY2hhciAqa2V5LCB2b2lkICp2YWx1ZSwgaW50ICpydmFsKTsKK3ZvaWQgZ2l0X3N0cm1hcF9kZWxldGUoZ2l0X3N0cm1hcCAqbWFwLCBjb25zdCBjaGFyICprZXkpOwogCiAjZGVmaW5lIGdpdF9zdHJtYXBfZm9yZWFjaAkJa2hfZm9yZWFjaAogI2RlZmluZSBnaXRfc3RybWFwX2ZvcmVhY2hfdmFsdWUJa2hfZm9yZWFjaF92YWx1ZQpkaWZmIC0tZ2l0IGEvc3JjL3N1Ym1vZHVsZS5jIGIvc3JjL3N1Ym1vZHVsZS5jCmluZGV4IGUxZjU5YjguLmRkZDRiMDYgMTAwNjQ0Ci0tLSBhL3NyYy9zdWJtb2R1bGUuYworKysgYi9zcmMvc3VibW9kdWxlLmMKQEAgLTIyLDYgKzIyLDcgQEAKICNpbmNsdWRlICJpdGVyYXRvci5oIgogI2luY2x1ZGUgInBhdGguaCIKICNpbmNsdWRlICJpbmRleC5oIgorI2luY2x1ZGUgIndvcmt0cmVlLmgiCiAKICNkZWZpbmUgR0lUX01PRFVMRVNfRklMRSAiLmdpdG1vZHVsZXMiCiAKQEAgLTE4NiwxMCArMTg3LDkgQEAKIAkJbGRvdCA9IHN0cnJjaHIoZW50cnktPm5hbWUsICcuJyk7CiAKIAkJZ2l0X2J1Zl9wdXQoJmJ1ZiwgZmRvdCArIDEsIGxkb3QgLSBmZG90IC0gMSk7Ci0JCWdpdF9zdHJtYXBfaW5zZXJ0KG91dCwgZW50cnktPnZhbHVlLCBnaXRfYnVmX2RldGFjaCgmYnVmKSwgcnZhbCk7CisJCWdpdF9zdHJtYXBfaW5zZXJ0KG91dCwgZW50cnktPnZhbHVlLCBnaXRfYnVmX2RldGFjaCgmYnVmKSwgJnJ2YWwpOwogCQlpZiAocnZhbCA8IDApIHsKLQkJCWdpdGVycl9zZXQoR0lURVJSX05PTUVNT1JZLCAiRXJyb3IgaW5zZXJ0aW5nIHN1Ym1vZHVsZSBpbnRvIGhhc2ggdGFibGUiKTsKLQkJCWZyZWVfc3VibW9kdWxlX25hbWVzKG91dCk7CisJCQlnaXRlcnJfc2V0KEdJVEVSUl9OT01FTU9SWSwgImVycm9yIGluc2VydGluZyBzdWJtb2R1bGUgaW50byBoYXNoIHRhYmxlIik7CiAJCQlyZXR1cm4gLTE7CiAJCX0KIAl9CkBAIC0zMzAsNyArMzMwLDcgQEAKIAlpZiAoKGVycm9yID0gc3VibW9kdWxlX2FsbG9jKCZzbSwgcmVwbywgbmFtZSkpIDwgMCkKIAkJcmV0dXJuIGVycm9yOwogCi0JcG9zID0ga2hfcHV0KHN0ciwgbWFwLCBzbS0+bmFtZSwgJmVycm9yKTsKKwlwb3MgPSBnaXRfc3RybWFwX3B1dChtYXAsIHNtLT5uYW1lLCAmZXJyb3IpOwogCS8qIG5vYm9keSBjYW4gYmVhdCB1cyB0byBhZGRpbmcgaXQgKi8KIAlhc3NlcnQoZXJyb3IgIT0gMCk7CiAJaWYgKGVycm9yIDwgMCkgewpAQCAtNDAyLDcgKzQwMiw3IEBACiBzdGF0aWMgaW50IHN1Ym1vZHVsZXNfZnJvbV9oZWFkKGdpdF9zdHJtYXAgKm1hcCwgZ2l0X3RyZWUgKmhlYWQsIGdpdF9jb25maWcgKmNmZykKIHsKIAlpbnQgZXJyb3I7Ci0JZ2l0X2l0ZXJhdG9yICppOworCWdpdF9pdGVyYXRvciAqaSA9IE5VTEw7CiAJY29uc3QgZ2l0X2luZGV4X2VudHJ5ICplbnRyeTsKIAlnaXRfc3RybWFwICpuYW1lcyA9IDA7CiAJZ2l0X3N0cm1hcF9hbGxvYygmbmFtZXMpOwpAQCAtNTEzLDEyICs1MTMsMTIgQEAKIAkJCWdvdG8gY2xlYW51cDsKIAl9CiAJLyogYWRkIGJhY2sgc3VibW9kdWxlIGluZm9ybWF0aW9uIGZyb20gaW5kZXggKi8KLQlpZiAoaWR4KSB7CisJaWYgKG1vZHMgJiYgaWR4KSB7CiAJCWlmICgoZXJyb3IgPSBzdWJtb2R1bGVzX2Zyb21faW5kZXgobWFwLCBpZHgsIG1vZHMpKSA8IDApCiAJCQlnb3RvIGNsZWFudXA7CiAJfQogCS8qIGFkZCBzdWJtb2R1bGUgaW5mb3JtYXRpb24gZnJvbSBIRUFEICovCi0JaWYgKGhlYWQpIHsKKwlpZiAobW9kcyAmJiBoZWFkKSB7CiAJCWlmICgoZXJyb3IgPSBzdWJtb2R1bGVzX2Zyb21faGVhZChtYXAsIGhlYWQsIG1vZHMpKSA8IDApCiAJCQlnb3RvIGNsZWFudXA7CiAJfQpAQCAtNTU2LDcgKzU1Niw3IEBACiAJCWdvdG8gZG9uZTsKIAogCWlmICghKGVycm9yID0gZ2l0X3ZlY3Rvcl9pbml0KAotCQkJJnNuYXBzaG90LCBraF9zaXplKHN1Ym1vZHVsZXMpLCBzdWJtb2R1bGVfY21wKSkpIHsKKwkJCSZzbmFwc2hvdCwgZ2l0X3N0cm1hcF9udW1fZW50cmllcyhzdWJtb2R1bGVzKSwgc3VibW9kdWxlX2NtcCkpKSB7CiAKIAkJZ2l0X3N0cm1hcF9mb3JlYWNoX3ZhbHVlKHN1Ym1vZHVsZXMsIHNtLCB7CiAJCQlpZiAoKGVycm9yID0gZ2l0X3ZlY3Rvcl9pbnNlcnQoJnNuYXBzaG90LCBzbSkpIDwgMCkKQEAgLTYxNyw4ICs2MTcsMTAgQEAKIAkgKiBPbGQgc3R5bGU6IHN1Yi1yZXBvIGdvZXMgZGlyZWN0bHkgaW50byByZXBvLzxuYW1lPi8uZ2l0LwogCSAqLwogCSBpZiAodXNlX2dpdGxpbmspIHsKLQkJZXJyb3IgPSBnaXRfYnVmX2pvaW4zKAotCQkJJnJlcG9kaXIsICcvJywgZ2l0X3JlcG9zaXRvcnlfcGF0aChwYXJlbnRfcmVwbyksICJtb2R1bGVzIiwgcGF0aCk7CisJCWVycm9yID0gZ2l0X3JlcG9zaXRvcnlfaXRlbV9wYXRoKCZyZXBvZGlyLCBwYXJlbnRfcmVwbywgR0lUX1JFUE9TSVRPUllfSVRFTV9NT0RVTEVTKTsKKwkJaWYgKGVycm9yIDwgMCkKKwkJCWdvdG8gY2xlYW51cDsKKwkJZXJyb3IgPSBnaXRfYnVmX2pvaW5wYXRoKCZyZXBvZGlyLCByZXBvZGlyLnB0ciwgcGF0aCk7CiAJCWlmIChlcnJvciA8IDApCiAJCQlnb3RvIGNsZWFudXA7CiAKQEAgLTEwODUsOCArMTA4NywxMCBAQAogCSAqIDxyZXBvLWRpcj4vbW9kdWxlcy88bmFtZT4vIHdpdGggYSBnaXRsaW5rIGluIHRoZQogCSAqIHN1Yi1yZXBvIHdvcmtkaXIgZGlyZWN0b3J5IHRvIHRoYXQgcmVwb3NpdG9yeS4KIAkgKi8KLQllcnJvciA9IGdpdF9idWZfam9pbjMoCi0JCSZyZXBvZGlyLCAnLycsIGdpdF9yZXBvc2l0b3J5X3BhdGgocGFyZW50X3JlcG8pLCAibW9kdWxlcyIsIHBhdGgpOworCWVycm9yID0gZ2l0X3JlcG9zaXRvcnlfaXRlbV9wYXRoKCZyZXBvZGlyLCBwYXJlbnRfcmVwbywgR0lUX1JFUE9TSVRPUllfSVRFTV9NT0RVTEVTKTsKKwlpZiAoZXJyb3IgPCAwKQorCQlnb3RvIGNsZWFudXA7CisJZXJyb3IgPSBnaXRfYnVmX2pvaW5wYXRoKCZyZXBvZGlyLCByZXBvZGlyLnB0ciwgcGF0aCk7CiAJaWYgKGVycm9yIDwgMCkKIAkJZ290byBjbGVhbnVwOwogCkBAIC0xMjA5LDYgKzEyMTMsOCBAQAogCQkJKGVycm9yID0gZ2l0X2NoZWNrb3V0X2hlYWQoc3ViX3JlcG8sICZ1cGRhdGVfb3B0aW9ucy5jaGVja291dF9vcHRzKSkgIT0gMCkKIAkJCWdvdG8gZG9uZTsKIAl9IGVsc2UgeworCQljb25zdCBnaXRfb2lkICpvaWQ7CisKIAkJLyoqCiAJCSAqIFdvcmsgZGlyIGlzIGluaXRpYWxpemVkIC0gbG9vayB1cCB0aGUgY29tbWl0IGluIHRoZSBwYXJlbnQgcmVwb3NpdG9yeSdzIGluZGV4LAogCQkgKiB1cGRhdGUgdGhlIHdvcmtkaXIgY29udGVudHMgb2YgdGhlIHN1YnJlcG9zaXRvcnksIGFuZCBzZXQgdGhlIHN1YnJlcG9zaXRvcnkncwpAQCAtMTIxNyw4ICsxMjIzLDE0IEBACiAJCWlmICgoZXJyb3IgPSBnaXRfc3VibW9kdWxlX29wZW4oJnN1Yl9yZXBvLCBzbSkpIDwgMCkKIAkJCWdvdG8gZG9uZTsKIAorCQlpZiAoKG9pZCA9IGdpdF9zdWJtb2R1bGVfaW5kZXhfaWQoc20pKSA9PSBOVUxMKSB7CisJCQlnaXRlcnJfc2V0KEdJVEVSUl9TVUJNT0RVTEUsICJjb3VsZCBub3QgZ2V0IElEIG9mIHN1Ym1vZHVsZSBpbiBpbmRleCIpOworCQkJZXJyb3IgPSAtMTsKKwkJCWdvdG8gZG9uZTsKKwkJfQorCiAJCS8qIExvb2sgdXAgdGhlIHRhcmdldCBjb21taXQgaW4gdGhlIHN1Ym1vZHVsZS4gKi8KLQkJaWYgKChlcnJvciA9IGdpdF9vYmplY3RfbG9va3VwKCZ0YXJnZXRfY29tbWl0LCBzdWJfcmVwbywgZ2l0X3N1Ym1vZHVsZV9pbmRleF9pZChzbSksIEdJVF9PQkpfQ09NTUlUKSkgPCAwKSB7CisJCWlmICgoZXJyb3IgPSBnaXRfb2JqZWN0X2xvb2t1cCgmdGFyZ2V0X2NvbW1pdCwgc3ViX3JlcG8sIG9pZCwgR0lUX09CSl9DT01NSVQpKSA8IDApIHsKIAkJCS8qIElmIGl0IGlzbid0IGZvdW5kIHRoZW4gZmV0Y2ggYW5kIHRyeSBhZ2Fpbi4gKi8KIAkJCWlmIChlcnJvciAhPSBHSVRfRU5PVEZPVU5EIHx8ICF1cGRhdGVfb3B0aW9ucy5hbGxvd19mZXRjaCB8fAogCQkJCShlcnJvciA9IGxvb2t1cF9kZWZhdWx0X3JlbW90ZSgmcmVtb3RlLCBzdWJfcmVwbykpIDwgMCB8fApAQCAtMTg2Myw3ICsxODc1LDcgQEAKIAkJZ290byBkb25lOwogCX0KIAotCWdpdF9zdHJtYXBfaW5zZXJ0KG1hcCwgc20tPm5hbWUsIHNtLCBlcnJvcik7CisJZ2l0X3N0cm1hcF9pbnNlcnQobWFwLCBzbS0+bmFtZSwgc20sICZlcnJvcik7CiAJYXNzZXJ0KGVycm9yICE9IDApOwogCWlmIChlcnJvciA8IDApCiAJCWdvdG8gZG9uZTsKQEAgLTIwMjcsMTcgKzIwMzksMjggQEAKIHN0YXRpYyBpbnQgZ2V0X3VybF9iYXNlKGdpdF9idWYgKnVybCwgZ2l0X3JlcG9zaXRvcnkgKnJlcG8pCiB7CiAJaW50IGVycm9yOworCWdpdF93b3JrdHJlZSAqd3QgPSBOVUxMOwogCWdpdF9yZW1vdGUgKnJlbW90ZSA9IE5VTEw7CiAKLQlpZiAoIShlcnJvciA9IGxvb2t1cF9kZWZhdWx0X3JlbW90ZSgmcmVtb3RlLCByZXBvKSkpIHsKKwlpZiAoKGVycm9yID0gbG9va3VwX2RlZmF1bHRfcmVtb3RlKCZyZW1vdGUsIHJlcG8pKSA9PSAwKSB7CiAJCWVycm9yID0gZ2l0X2J1Zl9zZXRzKHVybCwgZ2l0X3JlbW90ZV91cmwocmVtb3RlKSk7Ci0JCWdpdF9yZW1vdGVfZnJlZShyZW1vdGUpOwotCX0KLQllbHNlIGlmIChlcnJvciA9PSBHSVRfRU5PVEZPVU5EKSB7Ci0JCS8qIGlmIHJlcG9zaXRvcnkgZG9lcyBub3QgaGF2ZSBhIGRlZmF1bHQgcmVtb3RlLCB1c2Ugd29ya2RpciBpbnN0ZWFkICovCisJCWdvdG8gb3V0OworCX0gZWxzZSBpZiAoZXJyb3IgIT0gR0lUX0VOT1RGT1VORCkKKwkJZ290byBvdXQ7CisJZWxzZQogCQlnaXRlcnJfY2xlYXIoKTsKKworCS8qIGlmIHJlcG9zaXRvcnkgZG9lcyBub3QgaGF2ZSBhIGRlZmF1bHQgcmVtb3RlLCB1c2Ugd29ya2RpciBpbnN0ZWFkICovCisJaWYgKGdpdF9yZXBvc2l0b3J5X2lzX3dvcmt0cmVlKHJlcG8pKSB7CisJCWlmICgoZXJyb3IgPSBnaXRfd29ya3RyZWVfb3Blbl9mcm9tX3JlcG9zaXRvcnkoJnd0LCByZXBvKSkgPCAwKQorCQkJZ290byBvdXQ7CisJCWVycm9yID0gZ2l0X2J1Zl9zZXRzKHVybCwgd3QtPnBhcmVudF9wYXRoKTsKKwl9IGVsc2UKIAkJZXJyb3IgPSBnaXRfYnVmX3NldHModXJsLCBnaXRfcmVwb3NpdG9yeV93b3JrZGlyKHJlcG8pKTsKLQl9CisKK291dDoKKwlnaXRfcmVtb3RlX2ZyZWUocmVtb3RlKTsKKwlnaXRfd29ya3RyZWVfZnJlZSh3dCk7CiAKIAlyZXR1cm4gZXJyb3I7CiB9CmRpZmYgLS1naXQgYS9zcmMvc3lzZGlyLmMgYi9zcmMvc3lzZGlyLmMKaW5kZXggZWQxMTIyMS4uOTMxMmE3ZSAxMDA2NDQKLS0tIGEvc3JjL3N5c2Rpci5jCisrKyBiL3NyYy9zeXNkaXIuYwpAQCAtMjc1LDMgKzI3NSwxNCBAQAogCQlwYXRoLCBOVUxMLCBHSVRfU1lTRElSX1RFTVBMQVRFLCAidGVtcGxhdGUiKTsKIH0KIAoraW50IGdpdF9zeXNkaXJfZXhwYW5kX2dsb2JhbF9maWxlKGdpdF9idWYgKnBhdGgsIGNvbnN0IGNoYXIgKmZpbGVuYW1lKQoreworCWludCBlcnJvcjsKKworCWlmICgoZXJyb3IgPSBnaXRfc3lzZGlyX2ZpbmRfZ2xvYmFsX2ZpbGUocGF0aCwgTlVMTCkpID09IDApIHsKKwkJaWYgKGZpbGVuYW1lKQorCQkJZXJyb3IgPSBnaXRfYnVmX2pvaW5wYXRoKHBhdGgsIHBhdGgtPnB0ciwgZmlsZW5hbWUpOworCX0KKworCXJldHVybiBlcnJvcjsKK30KZGlmZiAtLWdpdCBhL3NyYy9zeXNkaXIuaCBiL3NyYy9zeXNkaXIuaAppbmRleCAxMTg3ODk4Li43OWYyMzgxIDEwMDY0NAotLS0gYS9zcmMvc3lzZGlyLmgKKysrIGIvc3JjL3N5c2Rpci5oCkBAIC01NSw2ICs1NSwxOCBAQAogICovCiBleHRlcm4gaW50IGdpdF9zeXNkaXJfZmluZF90ZW1wbGF0ZV9kaXIoZ2l0X2J1ZiAqcGF0aCk7CiAKKy8qKgorICogRXhwYW5kIHRoZSBuYW1lIG9mIGEgImdsb2JhbCIgZmlsZSAoaS5lLiBvbmUgaW4gYSB1c2VyJ3MgaG9tZQorICogZGlyZWN0b3J5KS4gIFVubGlrZSBgZmluZF9nbG9iYWxfZmlsZWAgKGFib3ZlKSwgdGhpcyBtYWtlcyBubworICogYXR0ZW1wdCB0byBjaGVjayBmb3IgdGhlIGV4aXN0ZW5jZSBvZiB0aGUgZmlsZSwgYW5kIGlzIHVzZWZ1bCBpZgorICogeW91IHdhbnQgdGhlIGZ1bGwgcGF0aCByZWdhcmRsZXNzIG9mIGV4aXN0ZW5jZS4KKyAqCisgKiBAcGFyYW0gcGF0aCBidWZmZXIgdG8gd3JpdGUgdGhlIGZ1bGwgcGF0aCBpbnRvCisgKiBAcGFyYW0gZmlsZW5hbWUgbmFtZSBvZiBmaWxlIGluIHRoZSBob21lIGRpcmVjdG9yeQorICogQHJldHVybiAwIG9uIHN1Y2Nlc3Mgb3IgLTEgb24gZXJyb3IKKyAqLworZXh0ZXJuIGludCBnaXRfc3lzZGlyX2V4cGFuZF9nbG9iYWxfZmlsZShnaXRfYnVmICpwYXRoLCBjb25zdCBjaGFyICpmaWxlbmFtZSk7CisKIHR5cGVkZWYgZW51bSB7CiAJR0lUX1NZU0RJUl9TWVNURU0gPSAwLAogCUdJVF9TWVNESVJfR0xPQkFMID0gMSwKZGlmZiAtLWdpdCBhL3NyYy90aHJlYWQtdXRpbHMuaCBiL3NyYy90aHJlYWQtdXRpbHMuaAppbmRleCBmMDE2MTk4Li4yZGYyYWViIDEwMDY0NAotLS0gYS9zcmMvdGhyZWFkLXV0aWxzLmgKKysrIGIvc3JjL3RocmVhZC11dGlscy5oCkBAIC03LDYgKzcsMTIgQEAKICNpZm5kZWYgSU5DTFVERV90aHJlYWRfdXRpbHNfaF9fCiAjZGVmaW5lIElOQ0xVREVfdGhyZWFkX3V0aWxzX2hfXwogCisjaWYgZGVmaW5lZChfX0dOVUNfXykgJiYgZGVmaW5lZChHSVRfVEhSRUFEUykKKyMgaWYgKF9fR05VQ19fIDwgNCB8fCAoX19HTlVDX18gPT0gNCAmJiBfX0dOVUNfTUlOT1JfXyA8IDEpKQorIyAgZXJyb3IgQXRvbWljIHByaW1pdGl2ZXMgZG8gbm90IGV4aXN0IG9uIHRoaXMgdmVyc2lvbiBvZiBnY2M7IGNvbmZpZ3VyZSBsaWJnaXQyIHdpdGggLURUSFJFQURTQUZFPU9GRgorIyBlbmRpZgorI2VuZGlmCisKIC8qIENvbW1vbiBvcGVyYXRpb25zIGV2ZW4gaWYgdGhyZWFkaW5nIGhhcyBiZWVuIGRpc2FibGVkICovCiB0eXBlZGVmIHN0cnVjdCB7CiAjaWYgZGVmaW5lZChHSVRfV0lOMzIpCmRpZmYgLS1naXQgYS9zcmMvdHJhbnNhY3Rpb24uYyBiL3NyYy90cmFuc2FjdGlvbi5jCmluZGV4IDJjOGExZTguLjNkM2YzNWEgMTAwNjQ0Ci0tLSBhL3NyYy90cmFuc2FjdGlvbi5jCisrKyBiL3NyYy90cmFuc2FjdGlvbi5jCkBAIC0xOSw4ICsxOSw2IEBACiAjaW5jbHVkZSAiZ2l0Mi9zeXMvcmVmcy5oIgogI2luY2x1ZGUgImdpdDIvc3lzL3JlZmRiX2JhY2tlbmQuaCIKIAotR0lUX19VU0VfU1RSTUFQCi0KIHR5cGVkZWYgZW51bSB7CiAJVFJBTlNBQ1RJT05fTk9ORSwKIAlUUkFOU0FDVElPTl9SRUZTLApAQCAtMTIwLDcgKzExOCw3IEBACiAJaWYgKChlcnJvciA9IGdpdF9yZWZkYl9sb2NrKCZub2RlLT5wYXlsb2FkLCB0eC0+ZGIsIHJlZm5hbWUpKSA8IDApCiAJCXJldHVybiBlcnJvcjsKIAotCWdpdF9zdHJtYXBfaW5zZXJ0KHR4LT5sb2Nrcywgbm9kZS0+bmFtZSwgbm9kZSwgZXJyb3IpOworCWdpdF9zdHJtYXBfaW5zZXJ0KHR4LT5sb2Nrcywgbm9kZS0+bmFtZSwgbm9kZSwgJmVycm9yKTsKIAlpZiAoZXJyb3IgPCAwKSAKIAkJZ290byBjbGVhbnVwOwogCkBAIC0zMjMsNyArMzIxLDYgQEAKIGludCBnaXRfdHJhbnNhY3Rpb25fY29tbWl0KGdpdF90cmFuc2FjdGlvbiAqdHgpCiB7CiAJdHJhbnNhY3Rpb25fbm9kZSAqbm9kZTsKLQlnaXRfc3RybWFwX2l0ZXIgcG9zOwogCWludCBlcnJvciA9IDA7CiAKIAlhc3NlcnQodHgpOwpAQCAtMzM1LDExICszMzIsNyBAQAogCQlyZXR1cm4gZXJyb3I7CiAJfQogCi0JZm9yIChwb3MgPSBraF9iZWdpbih0eC0+bG9ja3MpOyBwb3MgPCBraF9lbmQodHgtPmxvY2tzKTsgcG9zKyspIHsKLQkJaWYgKCFnaXRfc3RybWFwX2hhc19kYXRhKHR4LT5sb2NrcywgcG9zKSkKLQkJCWNvbnRpbnVlOwotCi0JCW5vZGUgPSBnaXRfc3RybWFwX3ZhbHVlX2F0KHR4LT5sb2NrcywgcG9zKTsKKwlnaXRfc3RybWFwX2ZvcmVhY2hfdmFsdWUodHgtPmxvY2tzLCBub2RlLCB7CiAJCWlmIChub2RlLT5yZWZsb2cpIHsKIAkJCWlmICgoZXJyb3IgPSB0eC0+ZGItPmJhY2tlbmQtPnJlZmxvZ193cml0ZSh0eC0+ZGItPmJhY2tlbmQsIG5vZGUtPnJlZmxvZykpIDwgMCkKIAkJCQlyZXR1cm4gZXJyb3I7CkBAIC0zNDksNyArMzQyLDcgQEAKIAkJCWlmICgoZXJyb3IgPSB1cGRhdGVfdGFyZ2V0KHR4LT5kYiwgbm9kZSkpIDwgMCkKIAkJCQlyZXR1cm4gZXJyb3I7CiAJCX0KLQl9CisJfSk7CiAKIAlyZXR1cm4gMDsKIH0KQEAgLTM1OCw3ICszNTEsNiBAQAogewogCXRyYW5zYWN0aW9uX25vZGUgKm5vZGU7CiAJZ2l0X3Bvb2wgcG9vbDsKLQlnaXRfc3RybWFwX2l0ZXIgcG9zOwogCiAJYXNzZXJ0KHR4KTsKIApAQCAtMzczLDE2ICszNjUsMTIgQEAKIAl9CiAKIAkvKiBzdGFydCBieSB1bmxvY2tpbmcgdGhlIG9uZXMgd2UndmUgbGVmdCBoYW5naW5nLCBpZiBhbnkgKi8KLQlmb3IgKHBvcyA9IGtoX2JlZ2luKHR4LT5sb2Nrcyk7IHBvcyA8IGtoX2VuZCh0eC0+bG9ja3MpOyBwb3MrKykgewotCQlpZiAoIWdpdF9zdHJtYXBfaGFzX2RhdGEodHgtPmxvY2tzLCBwb3MpKQotCQkJY29udGludWU7Ci0KLQkJbm9kZSA9IGdpdF9zdHJtYXBfdmFsdWVfYXQodHgtPmxvY2tzLCBwb3MpOworCWdpdF9zdHJtYXBfZm9yZWFjaF92YWx1ZSh0eC0+bG9ja3MsIG5vZGUsIHsKIAkJaWYgKG5vZGUtPmNvbW1pdHRlZCkKIAkJCWNvbnRpbnVlOwogCiAJCWdpdF9yZWZkYl91bmxvY2sodHgtPmRiLCBub2RlLT5wYXlsb2FkLCBmYWxzZSwgZmFsc2UsIE5VTEwsIE5VTEwsIE5VTEwpOwotCX0KKwl9KTsKIAogCWdpdF9yZWZkYl9mcmVlKHR4LT5kYik7CiAJZ2l0X3N0cm1hcF9mcmVlKHR4LT5sb2Nrcyk7CmRpZmYgLS1naXQgYS9zcmMvdHJhbnNwb3J0cy9odHRwLmMgYi9zcmMvdHJhbnNwb3J0cy9odHRwLmMKaW5kZXggOTQ5ZTg1Ny4uY2I0YTZkMCAxMDA2NDQKLS0tIGEvc3JjL3RyYW5zcG9ydHMvaHR0cC5jCisrKyBiL3NyYy90cmFuc3BvcnRzL2h0dHAuYwpAQCAtNTc1LDYgKzU3NSw5IEBACiAJCWlmICgoZXJyb3IgPSBnaXRfcmVtb3RlX19nZXRfaHR0cF9wcm94eSh0LT5vd25lci0+b3duZXIsICEhdC0+Y29ubmVjdGlvbl9kYXRhLnVzZV9zc2wsICZ1cmwpKSA8IDApCiAJCQlyZXR1cm4gZXJyb3I7CiAKKwkJb3B0cy5jcmVkZW50aWFscyA9IHQtPm93bmVyLT5wcm94eS5jcmVkZW50aWFsczsKKwkJb3B0cy5jZXJ0aWZpY2F0ZV9jaGVjayA9IHQtPm93bmVyLT5wcm94eS5jZXJ0aWZpY2F0ZV9jaGVjazsKKwkJb3B0cy5wYXlsb2FkID0gdC0+b3duZXItPnByb3h5LnBheWxvYWQ7CiAJCW9wdHMudHlwZSA9IEdJVF9QUk9YWV9TUEVDSUZJRUQ7CiAJCW9wdHMudXJsID0gdXJsOwogCQllcnJvciA9IGdpdF9zdHJlYW1fc2V0X3Byb3h5KHQtPmlvLCAmb3B0cyk7CmRpZmYgLS1naXQgYS9zcmMvdHJhbnNwb3J0cy9sb2NhbC5jIGIvc3JjL3RyYW5zcG9ydHMvbG9jYWwuYwppbmRleCA4Nzc0NWFkLi5lMjRlOTk4IDEwMDY0NAotLS0gYS9zcmMvdHJhbnNwb3J0cy9sb2NhbC5jCisrKyBiL3NyYy90cmFuc3BvcnRzL2xvY2FsLmMKQEAgLTM3NSw3ICszNzUsOCBAQAogCQlnb3RvIG9uX2Vycm9yOwogCX0KIAotCWlmICgoZXJyb3IgPSBnaXRfYnVmX2pvaW5wYXRoKCZvZGJfcGF0aCwgZ2l0X3JlcG9zaXRvcnlfcGF0aChyZW1vdGVfcmVwbyksICJvYmplY3RzL3BhY2siKSkgPCAwKQorCWlmICgoZXJyb3IgPSBnaXRfcmVwb3NpdG9yeV9pdGVtX3BhdGgoJm9kYl9wYXRoLCByZW1vdGVfcmVwbywgR0lUX1JFUE9TSVRPUllfSVRFTV9PQkpFQ1RTKSkgPCAwCisJCXx8IChlcnJvciA9IGdpdF9idWZfam9pbnBhdGgoJm9kYl9wYXRoLCBvZGJfcGF0aC5wdHIsICJwYWNrIikpIDwgMCkKIAkJZ290byBvbl9lcnJvcjsKIAogCWVycm9yID0gZ2l0X3BhY2tidWlsZGVyX3dyaXRlKHB1c2gtPnBiLCBvZGJfcGF0aC5wdHIsIDAsIHRyYW5zZmVyX3RvX3B1c2hfdHJhbnNmZXIsICh2b2lkICopIGNicyk7CmRpZmYgLS1naXQgYS9zcmMvdHJhbnNwb3J0cy9zbWFydC5jIGIvc3JjL3RyYW5zcG9ydHMvc21hcnQuYwppbmRleCBlNGFhMjZkLi5hOTZmZGY2IDEwMDY0NAotLS0gYS9zcmMvdHJhbnNwb3J0cy9zbWFydC5jCisrKyBiL3NyYy90cmFuc3BvcnRzL3NtYXJ0LmMKQEAgLTQ3Miw2ICs0NzIsMTIgQEAKIAlyZXR1cm4gdC0+Y3JlZF9hY3F1aXJlX2NiKG91dCwgdC0+dXJsLCB1c2VyLCBtZXRob2RzLCB0LT5jcmVkX2FjcXVpcmVfcGF5bG9hZCk7CiB9CiAKK2ludCBnaXRfdHJhbnNwb3J0X3NtYXJ0X3Byb3h5X29wdGlvbnMoZ2l0X3Byb3h5X29wdGlvbnMgKm91dCwgZ2l0X3RyYW5zcG9ydCAqdHJhbnNwb3J0KQoreworCXRyYW5zcG9ydF9zbWFydCAqdCA9ICh0cmFuc3BvcnRfc21hcnQgKikgdHJhbnNwb3J0OworCXJldHVybiBnaXRfcHJveHlfb3B0aW9uc19kdXAob3V0LCAmdC0+cHJveHkpOworfQorCiBpbnQgZ2l0X3RyYW5zcG9ydF9zbWFydChnaXRfdHJhbnNwb3J0ICoqb3V0LCBnaXRfcmVtb3RlICpvd25lciwgdm9pZCAqcGFyYW0pCiB7CiAJdHJhbnNwb3J0X3NtYXJ0ICp0OwpkaWZmIC0tZ2l0IGEvc3JjL3RyYW5zcG9ydHMvc21hcnQuaCBiL3NyYy90cmFuc3BvcnRzL3NtYXJ0LmgKaW5kZXggMGEwYzNmYy4uYjQ3MDAxZiAxMDA2NDQKLS0tIGEvc3JjL3RyYW5zcG9ydHMvc21hcnQuaAorKysgYi9zcmMvdHJhbnNwb3J0cy9zbWFydC5oCkBAIC0yNiw2ICsyNiw4IEBACiAjZGVmaW5lIEdJVF9DQVBfVEhJTl9QQUNLICJ0aGluLXBhY2siCiAjZGVmaW5lIEdJVF9DQVBfU1lNUkVGICJzeW1yZWYiCiAKK2V4dGVybiBib29sIGdpdF9zbWFydF9fb2ZzX2RlbHRhX2VuYWJsZWQ7CisKIGVudW0gZ2l0X3BrdF90eXBlIHsKIAlHSVRfUEtUX0NNRCwKIAlHSVRfUEtUX0ZMVVNILApkaWZmIC0tZ2l0IGEvc3JjL3RyYW5zcG9ydHMvc21hcnRfcHJvdG9jb2wuYyBiL3NyYy90cmFuc3BvcnRzL3NtYXJ0X3Byb3RvY29sLmMKaW5kZXggN2ExZDRkYy4uMjVlNzhjNiAxMDA2NDQKLS0tIGEvc3JjL3RyYW5zcG9ydHMvc21hcnRfcHJvdG9jb2wuYworKysgYi9zcmMvdHJhbnNwb3J0cy9zbWFydF9wcm90b2NvbC5jCkBAIC0xOSw2ICsxOSw4IEBACiAvKiBUaGUgbWluaW1hbCBpbnRlcnZhbCBiZXR3ZWVuIHByb2dyZXNzIHVwZGF0ZXMgKGluIHNlY29uZHMpLiAqLwogI2RlZmluZSBNSU5fUFJPR1JFU1NfVVBEQVRFX0lOVEVSVkFMIDAuNQogCitib29sIGdpdF9zbWFydF9fb2ZzX2RlbHRhX2VuYWJsZWQgPSB0cnVlOworCiBpbnQgZ2l0X3NtYXJ0X19zdG9yZV9yZWZzKHRyYW5zcG9ydF9zbWFydCAqdCwgaW50IGZsdXNoZXMpCiB7CiAJZ2l0bm9fYnVmZmVyICpidWYgPSAmdC0+YnVmZmVyOwpAQCAtMTM4LDcgKzE0MCw3IEBACiAJCWlmICgqcHRyID09ICcgJykKIAkJCXB0cisrOwogCi0JCWlmICghZ2l0X19wcmVmaXhjbXAocHRyLCBHSVRfQ0FQX09GU19ERUxUQSkpIHsKKwkJaWYgKGdpdF9zbWFydF9fb2ZzX2RlbHRhX2VuYWJsZWQgJiYgIWdpdF9fcHJlZml4Y21wKHB0ciwgR0lUX0NBUF9PRlNfREVMVEEpKSB7CiAJCQljYXBzLT5jb21tb24gPSBjYXBzLT5vZnNfZGVsdGEgPSAxOwogCQkJcHRyICs9IHN0cmxlbihHSVRfQ0FQX09GU19ERUxUQSk7CiAJCQljb250aW51ZTsKZGlmZiAtLWdpdCBhL3NyYy90cmFuc3BvcnRzL3NzaC5jIGIvc3JjL3RyYW5zcG9ydHMvc3NoLmMKaW5kZXggNDRkMDJlNS4uNGM1NWUzZiAxMDA2NDQKLS0tIGEvc3JjL3RyYW5zcG9ydHMvc3NoLmMKKysrIGIvc3JjL3RyYW5zcG9ydHMvc3NoLmMKQEAgLTksNiArOSw3IEBACiAjaW5jbHVkZSA8bGlic3NoMi5oPgogI2VuZGlmCiAKKyNpbmNsdWRlICJnbG9iYWwuaCIKICNpbmNsdWRlICJnaXQyLmgiCiAjaW5jbHVkZSAiYnVmZmVyLmgiCiAjaW5jbHVkZSAibmV0b3BzLmgiCkBAIC04OTMsMTEgKzg5NCwyMiBAQAogI2VuZGlmCiB9CiAKKyNpZmRlZiBHSVRfU1NICitzdGF0aWMgdm9pZCBzaHV0ZG93bl9zc2godm9pZCkKK3sKKyAgICBsaWJzc2gyX2V4aXQoKTsKK30KKyNlbmRpZgorCiBpbnQgZ2l0X3RyYW5zcG9ydF9zc2hfZ2xvYmFsX2luaXQodm9pZCkKIHsKICNpZmRlZiBHSVRfU1NICisJaWYgKGxpYnNzaDJfaW5pdCgwKSA8IDApIHsKKwkJZ2l0ZXJyX3NldChHSVRFUlJfU1NILCAidW5hYmxlIHRvIGluaXRpYWxpemUgbGlic3NoMiIpOworCQlyZXR1cm4gLTE7CisJfQogCi0JbGlic3NoMl9pbml0KDApOworCWdpdF9fb25fc2h1dGRvd24oc2h1dGRvd25fc3NoKTsKIAlyZXR1cm4gMDsKIAogI2Vsc2UKZGlmZiAtLWdpdCBhL3NyYy90cmFuc3BvcnRzL3dpbmh0dHAuYyBiL3NyYy90cmFuc3BvcnRzL3dpbmh0dHAuYwppbmRleCA3OWIzYWM2Li5mYjUwNGM5IDEwMDY0NAotLS0gYS9zcmMvdHJhbnNwb3J0cy93aW5odHRwLmMKKysrIGIvc3JjL3RyYW5zcG9ydHMvd2luaHR0cC5jCkBAIC03MCw2ICs3MCw3IEBACiAJR0lUX1dJTkhUVFBfQVVUSF9CQVNJQyA9IDEsCiAJR0lUX1dJTkhUVFBfQVVUSF9OVExNID0gMiwKIAlHSVRfV0lOSFRUUF9BVVRIX05FR09USUFURSA9IDQsCisJR0lUX1dJTkhUVFBfQVVUSF9ESUdFU1QgPSA4LAogfSB3aW5odHRwX2F1dGhtZWNoYW5pc21fdDsKIAogdHlwZWRlZiBzdHJ1Y3QgewpAQCAtMTMxLDggKzEzMiwxMyBAQAogCXJldHVybiBlcnJvcjsKIH0KIAotc3RhdGljIGludCBhcHBseV91c2VycGFzc19jcmVkZW50aWFsX3Byb3h5KEhJTlRFUk5FVCByZXF1ZXN0LCBnaXRfY3JlZCAqY3JlZCkKK3N0YXRpYyBpbnQgYXBwbHlfdXNlcnBhc3NfY3JlZGVudGlhbF9wcm94eShISU5URVJORVQgcmVxdWVzdCwgZ2l0X2NyZWQgKmNyZWQsIGludCBtZWNoYW5pc21zKQogeworCWlmIChHSVRfV0lOSFRUUF9BVVRIX0RJR0VTVCAmIG1lY2hhbmlzbXMpIHsKKwkJcmV0dXJuIF9hcHBseV91c2VycGFzc19jcmVkZW50aWFsKHJlcXVlc3QsIFdJTkhUVFBfQVVUSF9UQVJHRVRfUFJPWFksCisJCQlXSU5IVFRQX0FVVEhfU0NIRU1FX0RJR0VTVCwgY3JlZCk7CisJfQorCiAJcmV0dXJuIF9hcHBseV91c2VycGFzc19jcmVkZW50aWFsKHJlcXVlc3QsIFdJTkhUVFBfQVVUSF9UQVJHRVRfUFJPWFksCiAJCVdJTkhUVFBfQVVUSF9TQ0hFTUVfQkFTSUMsIGNyZWQpOwogfQpAQCAtMjQyLDggKzI0OCwxMiBAQAogCWdpdF9jZXJ0X3g1MDkgY2VydDsKIAogCS8qIElmIHRoZXJlIGlzIG5vIG92ZXJyaWRlLCB3ZSBzaG91bGQgZmFpbCBpZiBXaW5IVFRQIGRvZXNuJ3QgdGhpbmsgaXQncyBmaW5lICovCi0JaWYgKHQtPm93bmVyLT5jZXJ0aWZpY2F0ZV9jaGVja19jYiA9PSBOVUxMICYmICF2YWxpZCkKKwlpZiAodC0+b3duZXItPmNlcnRpZmljYXRlX2NoZWNrX2NiID09IE5VTEwgJiYgIXZhbGlkKSB7CisJCWlmICghZ2l0ZXJyX2xhc3QoKSkKKwkJCWdpdGVycl9zZXQoR0lURVJSX05FVCwgInVua25vd24gY2VydGlmaWNhdGUgY2hlY2sgZmFpbHVyZSIpOworCiAJCXJldHVybiBHSVRfRUNFUlRJRklDQVRFOworCX0KIAogCWlmICh0LT5vd25lci0+Y2VydGlmaWNhdGVfY2hlY2tfY2IgPT0gTlVMTCB8fCAhdC0+Y29ubmVjdGlvbl9kYXRhLnVzZV9zc2wpCiAJCXJldHVybiAwOwpAQCAtNDE5LDcgKzQyOSw2IEBACiAJCQlnaXRfYnVmX3ByaW50ZigmcHJvY2Vzc2VkX3VybCwgIjolcyIsIHQtPnByb3h5X2Nvbm5lY3Rpb25fZGF0YS5wb3J0KTsKIAogCQlpZiAoZ2l0X2J1Zl9vb20oJnByb2Nlc3NlZF91cmwpKSB7Ci0JCQlnaXRlcnJfc2V0X29vbSgpOwogCQkJZXJyb3IgPSAtMTsKIAkJCWdvdG8gb25fZXJyb3I7CiAJCX0KQEAgLTQ0Nyw3ICs0NTYsNyBAQAogCiAJCWlmICh0LT5wcm94eV9jcmVkKSB7CiAJCQlpZiAodC0+cHJveHlfY3JlZC0+Y3JlZHR5cGUgPT0gR0lUX0NSRURUWVBFX1VTRVJQQVNTX1BMQUlOVEVYVCkgewotCQkJCWlmICgoZXJyb3IgPSBhcHBseV91c2VycGFzc19jcmVkZW50aWFsX3Byb3h5KHMtPnJlcXVlc3QsIHQtPnByb3h5X2NyZWQpKSA8IDApCisJCQkJaWYgKChlcnJvciA9IGFwcGx5X3VzZXJwYXNzX2NyZWRlbnRpYWxfcHJveHkocy0+cmVxdWVzdCwgdC0+cHJveHlfY3JlZCwgdC0+YXV0aF9tZWNoYW5pc21zKSkgPCAwKQogCQkJCQlnb3RvIG9uX2Vycm9yOwogCQkJfQogCQl9CkBAIC01ODQsMTEgKzU5MywxMSBAQAogCSphbGxvd2VkX3R5cGVzID0gMDsKIAkqYWxsb3dlZF9tZWNoYW5pc21zID0gMDsKIAotCS8qIFdpbkh0dHBRdWVyeUhlYWRlcnMoKSBtdXN0IGJlIGNhbGxlZCBiZWZvcmUgV2luSHR0cFF1ZXJ5QXV0aFNjaGVtZXMoKS4gCi0JICogV2UgY2FuIGFzc3VtZSB0aGlzIHdhcyBhbHJlYWR5IGRvbmUsIHNpbmNlIHdlIGtub3cgd2UgYXJlIHVuYXV0aG9yaXplZC4gCisJLyogV2luSHR0cFF1ZXJ5SGVhZGVycygpIG11c3QgYmUgY2FsbGVkIGJlZm9yZSBXaW5IdHRwUXVlcnlBdXRoU2NoZW1lcygpLgorCSAqIFdlIGNhbiBhc3N1bWUgdGhpcyB3YXMgYWxyZWFkeSBkb25lLCBzaW5jZSB3ZSBrbm93IHdlIGFyZSB1bmF1dGhvcml6ZWQuCiAJICovCiAJaWYgKCFXaW5IdHRwUXVlcnlBdXRoU2NoZW1lcyhyZXF1ZXN0LCAmc3VwcG9ydGVkLCAmZmlyc3QsICZ0YXJnZXQpKSB7Ci0JCWdpdGVycl9zZXQoR0lURVJSX09TLCAiZmFpbGVkIHRvIHBhcnNlIHN1cHBvcnRlZCBhdXRoIHNjaGVtZXMiKTsgCisJCWdpdGVycl9zZXQoR0lURVJSX09TLCAiZmFpbGVkIHRvIHBhcnNlIHN1cHBvcnRlZCBhdXRoIHNjaGVtZXMiKTsKIAkJcmV0dXJuIC0xOwogCX0KIApAQCAtNjA4LDYgKzYxNywxMSBAQAogCQkqYWxsb3dlZF9tZWNoYW5pc21zIHw9IEdJVF9XSU5IVFRQX0FVVEhfQkFTSUM7CiAJfQogCisJaWYgKFdJTkhUVFBfQVVUSF9TQ0hFTUVfRElHRVNUICYgc3VwcG9ydGVkKSB7CisJCSphbGxvd2VkX3R5cGVzIHw9IEdJVF9DUkVEVFlQRV9VU0VSUEFTU19QTEFJTlRFWFQ7CisJCSphbGxvd2VkX21lY2hhbmlzbXMgfD0gR0lUX1dJTkhUVFBfQVVUSF9ESUdFU1Q7CisJfQorCiAJcmV0dXJuIDA7CiB9CiAKQEAgLTY5MSw2ICs3MDUsMzggQEAKIAlyZXR1cm4gZ2l0X2J1Zl9wdXRjKHVhLCAnKScpOwogfQogCitzdGF0aWMgdm9pZCBDQUxMQkFDSyB3aW5odHRwX3N0YXR1cygKKwlISU5URVJORVQgY29ubmVjdGlvbiwKKwlEV09SRF9QVFIgY3R4LAorCURXT1JEIGNvZGUsCisJTFBWT0lEIGluZm8sCisJRFdPUkQgaW5mb19sZW4pCit7CisJRFdPUkQgc3RhdHVzOworCisJaWYgKGNvZGUgIT0gV0lOSFRUUF9DQUxMQkFDS19TVEFUVVNfU0VDVVJFX0ZBSUxVUkUpCisJCXJldHVybjsKKworCXN0YXR1cyA9ICooKERXT1JEICopaW5mbyk7CisKKwlpZiAoKHN0YXR1cyAmIFdJTkhUVFBfQ0FMTEJBQ0tfU1RBVFVTX0ZMQUdfQ0VSVF9DTl9JTlZBTElEKSkKKwkJZ2l0ZXJyX3NldChHSVRFUlJfTkVULCAiU1NMIGNlcnRpZmljYXRlIGlzc3VlZCBmb3IgZGlmZmVyZW50IGNvbW1vbiBuYW1lIik7CisJZWxzZSBpZiAoKHN0YXR1cyAmIFdJTkhUVFBfQ0FMTEJBQ0tfU1RBVFVTX0ZMQUdfQ0VSVF9EQVRFX0lOVkFMSUQpKQorCQlnaXRlcnJfc2V0KEdJVEVSUl9ORVQsICJTU0wgY2VydGlmaWNhdGUgaGFzIGV4cGlyZWQiKTsKKwllbHNlIGlmICgoc3RhdHVzICYgV0lOSFRUUF9DQUxMQkFDS19TVEFUVVNfRkxBR19JTlZBTElEX0NBKSkKKwkJZ2l0ZXJyX3NldChHSVRFUlJfTkVULCAiU1NMIGNlcnRpZmljYXRlIHNpZ25lZCBieSB1bmtub3duIENBIik7CisJZWxzZSBpZiAoKHN0YXR1cyAmIFdJTkhUVFBfQ0FMTEJBQ0tfU1RBVFVTX0ZMQUdfSU5WQUxJRF9DRVJUKSkKKwkJZ2l0ZXJyX3NldChHSVRFUlJfTkVULCAiU1NMIGNlcnRpZmljYXRlIGlzIGludmFsaWQiKTsKKwllbHNlIGlmICgoc3RhdHVzICYgV0lOSFRUUF9DQUxMQkFDS19TVEFUVVNfRkxBR19DRVJUX1JFVl9GQUlMRUQpKQorCQlnaXRlcnJfc2V0KEdJVEVSUl9ORVQsICJjZXJ0aWZpY2F0ZSByZXZvY2F0aW9uIGNoZWNrIGZhaWxlZCIpOworCWVsc2UgaWYgKChzdGF0dXMgJiBXSU5IVFRQX0NBTExCQUNLX1NUQVRVU19GTEFHX0NFUlRfUkVWT0tFRCkpCisJCWdpdGVycl9zZXQoR0lURVJSX05FVCwgIlNTTCBjZXJ0aWZpY2F0ZSB3YXMgcmV2b2tlZCIpOworCWVsc2UgaWYgKChzdGF0dXMgJiBXSU5IVFRQX0NBTExCQUNLX1NUQVRVU19GTEFHX1NFQ1VSSVRZX0NIQU5ORUxfRVJST1IpKQorCQlnaXRlcnJfc2V0KEdJVEVSUl9ORVQsICJzZWN1cml0eSBsaWJyYXJpZXMgY291bGQgbm90IGJlIGxvYWRlZCIpOworCWVsc2UKKwkJZ2l0ZXJyX3NldChHSVRFUlJfTkVULCAidW5rbm93biBzZWN1cml0eSBlcnJvciAlZCIsIHN0YXR1cyk7Cit9CisKIHN0YXRpYyBpbnQgd2luaHR0cF9jb25uZWN0KAogCXdpbmh0dHBfc3VidHJhbnNwb3J0ICp0KQogewpAQCAtNzQ3LDcgKzc5Myw3IEBACiAJCWdvdG8gb25fZXJyb3I7CiAJfQogCi0JCisKIAkvKiBFc3RhYmxpc2ggY29ubmVjdGlvbiAqLwogCXQtPmNvbm5lY3Rpb24gPSBXaW5IdHRwQ29ubmVjdCgKIAkJdC0+c2Vzc2lvbiwKQEAgLTc2MCw2ICs4MDYsMTEgQEAKIAkJZ290byBvbl9lcnJvcjsKIAl9CiAKKwlpZiAoV2luSHR0cFNldFN0YXR1c0NhbGxiYWNrKHQtPmNvbm5lY3Rpb24sIHdpbmh0dHBfc3RhdHVzLCBXSU5IVFRQX0NBTExCQUNLX0ZMQUdfU0VDVVJFX0ZBSUxVUkUsIDApID09IFdJTkhUVFBfSU5WQUxJRF9TVEFUVVNfQ0FMTEJBQ0spIHsKKwkJZ2l0ZXJyX3NldChHSVRFUlJfT1MsICJmYWlsZWQgdG8gc2V0IHN0YXR1cyBjYWxsYmFjayIpOworCQlnb3RvIG9uX2Vycm9yOworCX0KKwogCWVycm9yID0gMDsKIAogb25fZXJyb3I6CkBAIC03OTgsMTYgKzg0OSwxNSBAQAogCWludCByZXF1ZXN0X2ZhaWxlZCA9IDAsIGNlcnRfdmFsaWQgPSAxLCBlcnJvciA9IDA7CiAJRFdPUkQgaWdub3JlX2ZsYWdzOwogCi0JaWYgKChlcnJvciA9IGRvX3NlbmRfcmVxdWVzdChzLCBsZW4sIGlnbm9yZV9sZW5ndGgpKSA8IDApCi0JCXJlcXVlc3RfZmFpbGVkID0gMTsKLQotCWlmIChyZXF1ZXN0X2ZhaWxlZCkgeworCWdpdGVycl9jbGVhcigpOworCWlmICgoZXJyb3IgPSBkb19zZW5kX3JlcXVlc3QocywgbGVuLCBpZ25vcmVfbGVuZ3RoKSkgPCAwKSB7CiAJCWlmIChHZXRMYXN0RXJyb3IoKSAhPSBFUlJPUl9XSU5IVFRQX1NFQ1VSRV9GQUlMVVJFKSB7CiAJCQlnaXRlcnJfc2V0KEdJVEVSUl9PUywgImZhaWxlZCB0byBzZW5kIHJlcXVlc3QiKTsKIAkJCXJldHVybiAtMTsKLQkJfSBlbHNlIHsKLQkJCWNlcnRfdmFsaWQgPSAwOwogCQl9CisKKwkJcmVxdWVzdF9mYWlsZWQgPSAxOworCQljZXJ0X3ZhbGlkID0gMDsKIAl9CiAKIAlnaXRlcnJfY2xlYXIoKTsKQEAgLTgyMywxNCArODczLDE0IEBACiAJCXJldHVybiAwOwogCiAJaWdub3JlX2ZsYWdzID0gbm9fY2hlY2tfY2VydF9mbGFnczsKLQkKKwogCWlmICghV2luSHR0cFNldE9wdGlvbihzLT5yZXF1ZXN0LCBXSU5IVFRQX09QVElPTl9TRUNVUklUWV9GTEFHUywgJmlnbm9yZV9mbGFncywgc2l6ZW9mKGlnbm9yZV9mbGFncykpKSB7CiAJCWdpdGVycl9zZXQoR0lURVJSX09TLCAiZmFpbGVkIHRvIHNldCBzZWN1cml0eSBvcHRpb25zIik7CiAJCXJldHVybiAtMTsKIAl9CiAKIAlpZiAoKGVycm9yID0gZG9fc2VuZF9yZXF1ZXN0KHMsIGxlbiwgaWdub3JlX2xlbmd0aCkpIDwgMCkKLQkJZ2l0ZXJyX3NldChHSVRFUlJfT1MsICJmYWlsZWQgdG8gc2VuZCByZXF1ZXN0Iik7CisJCWdpdGVycl9zZXQoR0lURVJSX09TLCAiZmFpbGVkIHRvIHNlbmQgcmVxdWVzdCB3aXRoIHVuY2hlY2tlZCBjZXJ0aWZpY2F0ZSIpOwogCiAJcmV0dXJuIGVycm9yOwogfQpAQCAtMTAzMiw3ICsxMDgyLDcgQEAKIAkJCS8qIFRPRE86IGV4dHJhY3QgdGhlIHVzZXJuYW1lIGZyb20gdGhlIHVybCwgbm8gcGF5bG9hZD8gKi8KIAkJCWlmICh0LT5vd25lci0+cHJveHkuY3JlZGVudGlhbHMpIHsKIAkJCQlpbnQgY3JlZF9lcnJvciA9IDE7Ci0JCQkJY3JlZF9lcnJvciA9IHQtPm93bmVyLT5wcm94eS5jcmVkZW50aWFscygmdC0+cHJveHlfY3JlZCwgdC0+b3duZXItPnByb3h5LnVybCwgTlVMTCwgYWxsb3dlZF90eXBlcywgTlVMTCk7CisJCQkJY3JlZF9lcnJvciA9IHQtPm93bmVyLT5wcm94eS5jcmVkZW50aWFscygmdC0+cHJveHlfY3JlZCwgdC0+b3duZXItPnByb3h5LnVybCwgTlVMTCwgYWxsb3dlZF90eXBlcywgdC0+b3duZXItPnByb3h5LnBheWxvYWQpOwogCiAJCQkJaWYgKGNyZWRfZXJyb3IgPCAwKQogCQkJCQlyZXR1cm4gY3JlZF9lcnJvcjsKZGlmZiAtLWdpdCBhL3NyYy90cmVlLmMgYi9zcmMvdHJlZS5jCmluZGV4IDI2ZGEyOTYuLjZiMWQxYjIgMTAwNjQ0Ci0tLSBhL3NyYy90cmVlLmMKKysrIGIvc3JjL3RyZWUuYwpAQCAtMjAsOCArMjAsNiBAQAogI2RlZmluZSBUUkVFX0VOVFJZX0NIRUNLX05BTUVMRU4obikgXAogCWlmIChuID4gVUlOVDE2X01BWCkgeyBnaXRlcnJfc2V0KEdJVEVSUl9JTlZBTElELCAidHJlZSBlbnRyeSBwYXRoIHRvbyBsb25nIik7IH0KIAotR0lUX19VU0VfU1RSTUFQCi0KIHN0YXRpYyBib29sIHZhbGlkX2ZpbGVtb2RlKGNvbnN0IGludCBmaWxlbW9kZSkKIHsKIAlyZXR1cm4gKGZpbGVtb2RlID09IEdJVF9GSUxFTU9ERV9UUkVFCkBAIC01MDUsNyArNTAzLDcgQEAKIAogCWVudHJ5LT5hdHRyID0gKHVpbnQxNl90KWZpbGVtb2RlOwogCi0JZ2l0X3N0cm1hcF9pbnNlcnQoYmxkLT5tYXAsIGVudHJ5LT5maWxlbmFtZSwgZW50cnksIGVycm9yKTsKKwlnaXRfc3RybWFwX2luc2VydChibGQtPm1hcCwgZW50cnktPmZpbGVuYW1lLCBlbnRyeSwgJmVycm9yKTsKIAlpZiAoZXJyb3IgPCAwKSB7CiAJCWdpdF90cmVlX2VudHJ5X2ZyZWUoZW50cnkpOwogCQlnaXRlcnJfc2V0KEdJVEVSUl9UUkVFLCAiZmFpbGVkIHRvIGFwcGVuZCBlbnRyeSAlcyB0byB0aGUgdHJlZSBidWlsZGVyIiwgZmlsZW5hbWUpOwpAQCAtNzU0LDcgKzc1Miw3IEBACiAJCWVudHJ5ID0gYWxsb2NfZW50cnkoZmlsZW5hbWUsIHN0cmxlbihmaWxlbmFtZSksIGlkKTsKIAkJR0lURVJSX0NIRUNLX0FMTE9DKGVudHJ5KTsKIAotCQlnaXRfc3RybWFwX2luc2VydChibGQtPm1hcCwgZW50cnktPmZpbGVuYW1lLCBlbnRyeSwgZXJyb3IpOworCQlnaXRfc3RybWFwX2luc2VydChibGQtPm1hcCwgZW50cnktPmZpbGVuYW1lLCBlbnRyeSwgJmVycm9yKTsKIAogCQlpZiAoZXJyb3IgPCAwKSB7CiAJCQlnaXRfdHJlZV9lbnRyeV9mcmVlKGVudHJ5KTsKQEAgLTgyMCw3ICs4MTgsNyBAQAogCXNpemVfdCBpLCBlbnRyeWNvdW50OwogCWdpdF9vZGIgKm9kYjsKIAlnaXRfdHJlZV9lbnRyeSAqZW50cnk7Ci0JZ2l0X3ZlY3RvciBlbnRyaWVzOworCWdpdF92ZWN0b3IgZW50cmllcyA9IEdJVF9WRUNUT1JfSU5JVDsKIAogCWFzc2VydChibGQpOwogCWFzc2VydCh0cmVlKTsKQEAgLTgyOCwzNSArODI2LDM3IEBACiAJZ2l0X2J1Zl9jbGVhcih0cmVlKTsKIAogCWVudHJ5Y291bnQgPSBnaXRfc3RybWFwX251bV9lbnRyaWVzKGJsZC0+bWFwKTsKLQlpZiAoZ2l0X3ZlY3Rvcl9pbml0KCZlbnRyaWVzLCBlbnRyeWNvdW50LCBlbnRyeV9zb3J0X2NtcCkgPCAwKQotCQlyZXR1cm4gLTE7CisJaWYgKChlcnJvciA9IGdpdF92ZWN0b3JfaW5pdCgmZW50cmllcywgZW50cnljb3VudCwgZW50cnlfc29ydF9jbXApKSA8IDApCisJCWdvdG8gb3V0OwogCiAJaWYgKHRyZWUtPmFzaXplID09IDAgJiYKLQkJKGVycm9yID0gZ2l0X2J1Zl9ncm93KHRyZWUsIGVudHJ5Y291bnQgKiA3MikpIDwgMCkKLQkJcmV0dXJuIGVycm9yOworCSAgICAoZXJyb3IgPSBnaXRfYnVmX2dyb3codHJlZSwgZW50cnljb3VudCAqIDcyKSkgPCAwKQorCQlnb3RvIG91dDsKIAogCWdpdF9zdHJtYXBfZm9yZWFjaF92YWx1ZShibGQtPm1hcCwgZW50cnksIHsKLQkJaWYgKGdpdF92ZWN0b3JfaW5zZXJ0KCZlbnRyaWVzLCBlbnRyeSkgPCAwKQotCQkJcmV0dXJuIC0xOworCQlpZiAoKGVycm9yID0gZ2l0X3ZlY3Rvcl9pbnNlcnQoJmVudHJpZXMsIGVudHJ5KSkgPCAwKQorCQkJZ290byBvdXQ7CiAJfSk7CiAKIAlnaXRfdmVjdG9yX3NvcnQoJmVudHJpZXMpOwogCiAJZm9yIChpID0gMDsgaSA8IGVudHJpZXMubGVuZ3RoICYmICFlcnJvcjsgKytpKSB7Ci0JCWdpdF90cmVlX2VudHJ5ICplbnRyeSA9IGdpdF92ZWN0b3JfZ2V0KCZlbnRyaWVzLCBpKTsKKwkJZW50cnkgPSBnaXRfdmVjdG9yX2dldCgmZW50cmllcywgaSk7CiAKIAkJZ2l0X2J1Zl9wcmludGYodHJlZSwgIiVvICIsIGVudHJ5LT5hdHRyKTsKIAkJZ2l0X2J1Zl9wdXQodHJlZSwgZW50cnktPmZpbGVuYW1lLCBlbnRyeS0+ZmlsZW5hbWVfbGVuICsgMSk7CiAJCWdpdF9idWZfcHV0KHRyZWUsIChjaGFyICopZW50cnktPm9pZC0+aWQsIEdJVF9PSURfUkFXU1opOwogCi0JCWlmIChnaXRfYnVmX29vbSh0cmVlKSkKKwkJaWYgKGdpdF9idWZfb29tKHRyZWUpKSB7CiAJCQllcnJvciA9IC0xOworCQkJZ290byBvdXQ7CisJCX0KIAl9CiAKLQlpZiAoIWVycm9yICYmCi0JCSEoZXJyb3IgPSBnaXRfcmVwb3NpdG9yeV9vZGJfX3dlYWtwdHIoJm9kYiwgYmxkLT5yZXBvKSkpCisJaWYgKChlcnJvciA9IGdpdF9yZXBvc2l0b3J5X29kYl9fd2Vha3B0cigmb2RiLCBibGQtPnJlcG8pKSA9PSAwKQogCQllcnJvciA9IGdpdF9vZGJfd3JpdGUob2lkLCBvZGIsIHRyZWUtPnB0ciwgdHJlZS0+c2l6ZSwgR0lUX09CSl9UUkVFKTsKIAorb3V0OgogCWdpdF92ZWN0b3JfZnJlZSgmZW50cmllcyk7CiAKIAlyZXR1cm4gZXJyb3I7CmRpZmYgLS1naXQgYS9zcmMvdW5peC9wb3NpeC5oIGIvc3JjL3VuaXgvcG9zaXguaAppbmRleCBhZDEzMjkxLi41Mjk4NWZkIDEwMDY0NAotLS0gYS9zcmMvdW5peC9wb3NpeC5oCisrKyBiL3NyYy91bml4L3Bvc2l4LmgKQEAgLTQwLDkgKzQwLDE0IEBACiAjZGVmaW5lIHBfbGluayhvLG4pIGxpbmsobywgbikKICNkZWZpbmUgcF91bmxpbmsocCkgdW5saW5rKHApCiAjZGVmaW5lIHBfbWtkaXIocCxtKSBta2RpcihwLCBtKQotI2RlZmluZSBwX2ZzeW5jKGZkKSBmc3luYyhmZCkKIGV4dGVybiBjaGFyICpwX3JlYWxwYXRoKGNvbnN0IGNoYXIgKiwgY2hhciAqKTsKIAorR0lUX0lOTElORShpbnQpIHBfZnN5bmMoaW50IGZkKQoreworCXBfZnN5bmNfX2NudCsrOworCXJldHVybiBmc3luYyhmZCk7Cit9CisKICNkZWZpbmUgcF9yZWN2KHMsYixsLGYpIHJlY3YocyxiLGwsZikKICNkZWZpbmUgcF9zZW5kKHMsYixsLGYpIHNlbmQocyxiLGwsZikKICNkZWZpbmUgcF9pbmV0X3B0b24oYSwgYiwgYykgaW5ldF9wdG9uKGEsIGIsIGMpCkBAIC01MCw3ICs1NSw3IEBACiAjZGVmaW5lIHBfc3RyY2FzZWNtcChzMSwgczIpIHN0cmNhc2VjbXAoczEsIHMyKQogI2RlZmluZSBwX3N0cm5jYXNlY21wKHMxLCBzMiwgYykgc3RybmNhc2VjbXAoczEsIHMyLCBjKQogI2RlZmluZSBwX3ZzbnByaW50ZihiLCBjLCBmLCBhKSB2c25wcmludGYoYiwgYywgZiwgYSkKLSNkZWZpbmUgcF9zbnByaW50ZihiLCBjLCBmLCAuLi4pIHNucHJpbnRmKGIsIGMsIGYsIF9fVkFfQVJHU19fKQorI2RlZmluZSBwX3NucHJpbnRmKGIsIGMsIC4uLikgc25wcmludGYoYiwgYywgX19WQV9BUkdTX18pCiAjZGVmaW5lIHBfbWtzdGVtcChwKSBta3N0ZW1wKHApCiAjZGVmaW5lIHBfY2hkaXIocCkgY2hkaXIocCkKICNkZWZpbmUgcF9jaG1vZChwLG0pIGNobW9kKHAsIG0pCmRpZmYgLS1naXQgYS9zcmMvdmFyaW50LmMgYi9zcmMvdmFyaW50LmMKaW5kZXggMmY4Njg2MC4uYmVhYzhjNyAxMDA2NDQKLS0tIGEvc3JjL3ZhcmludC5jCisrKyBiL3NyYy92YXJpbnQuYwpAQCAtMzYsNyArMzYsNyBAQAogCXdoaWxlICh2YWx1ZSA+Pj0gNykKIAkJdmFyaW50Wy0tcG9zXSA9IDEyOCB8ICgtLXZhbHVlICYgMTI3KTsKIAlpZiAoYnVmKSB7Ci0JCWlmIChidWZzaXplIDwgcG9zKQorCQlpZiAoYnVmc2l6ZSA8IChzaXplb2YodmFyaW50KSAtIHBvcykpCiAJCQlyZXR1cm4gLTE7CiAJCW1lbWNweShidWYsIHZhcmludCArIHBvcywgc2l6ZW9mKHZhcmludCkgLSBwb3MpOwogCX0KZGlmZiAtLWdpdCBhL3NyYy92ZWN0b3IuYyBiL3NyYy92ZWN0b3IuYwppbmRleCBiYWVjODAzLi42MjBhMWY1IDEwMDY0NAotLS0gYS9zcmMvdmVjdG9yLmMKKysrIGIvc3JjL3ZlY3Rvci5jCkBAIC00MDYsNiArNDA2LDkgQEAKIHsKIAlzaXplX3QgYSwgYjsKIAorCWlmICh2LT5sZW5ndGggPT0gMCkKKwkJcmV0dXJuOworCiAJYSA9IDA7CiAJYiA9IHYtPmxlbmd0aCAtIDE7CiAKZGlmZiAtLWdpdCBhL3NyYy93aW4zMi9wb3NpeC5oIGIvc3JjL3dpbjMyL3Bvc2l4LmgKaW5kZXggNzM3MDVmYi4uNjQ3NjllYyAxMDA2NDQKLS0tIGEvc3JjL3dpbjMyL3Bvc2l4LmgKKysrIGIvc3JjL3dpbjMyL3Bvc2l4LmgKQEAgLTE0LDYgKzE0LDkgQEAKICNpbmNsdWRlICJ1dGYtY29udi5oIgogI2luY2x1ZGUgImRpci5oIgogCitleHRlcm4gdW5zaWduZWQgbG9uZyBnaXRfd2luMzJfX2NyZWF0ZWZpbGVfc2hhcmVtb2RlOworZXh0ZXJuIGludCBnaXRfd2luMzJfX3JldHJpZXM7CisKIHR5cGVkZWYgU09DS0VUIEdJVF9TT0NLRVQ7CiAKICNkZWZpbmUgcF9sc2VlayhmLG4sdykgX2xzZWVraTY0KGYsIG4sIHcpCmRpZmYgLS1naXQgYS9zcmMvd2luMzIvcG9zaXhfdzMyLmMgYi9zcmMvd2luMzIvcG9zaXhfdzMyLmMKaW5kZXggZmVhNjM0Yi4uZTRmZTQxNCAxMDA2NDQKLS0tIGEvc3JjL3dpbjMyL3Bvc2l4X3czMi5jCisrKyBiL3NyYy93aW4zMi9wb3NpeF93MzIuYwpAQCAtMjYsMTUgKzI2LDYgQEAKICNkZWZpbmUgSU9fUkVQQVJTRV9UQUdfU1lNTElOSyAoMHhBMDAwMDAwQ0wpCiAjZW5kaWYKIAotLyogT3B0aW9ucyB3aGljaCB3ZSBhbHdheXMgcHJvdmlkZSB0byBfd29wZW4uCi0gKgotICogX09fQklOQVJZIC0gUmF3IGFjY2Vzczsgbm8gdHJhbnNsYXRpb24gb2YgQ1Igb3IgTEYgY2hhcmFjdGVycwotICogX09fTk9JTkhFUklUIC0gRG8gbm90IG1hcmsgdGhlIGNyZWF0ZWQgaGFuZGxlIGFzIGluaGVyaXRhYmxlIGJ5IGNoaWxkIHByb2Nlc3Nlcy4KLSAqICAgIFRoZSBXaW5kb3dzIGRlZmF1bHQgaXMgJ25vdCBpbmhlcml0YWJsZScsIGJ1dCB0aGUgQ1JUJ3MgZGVmYXVsdCAoZm9sbG93aW5nCi0gKiAgICBQT1NJWCBjb252ZW50aW9uKSBpcyAnaW5oZXJpdGFibGUnLiBXZSBoYXZlIG5vIGRlc2lyZSBmb3Igb3VyIGhhbmRsZXMgdG8gYmUKLSAqICAgIGluaGVyaXRhYmxlIG9uIFdpbmRvd3MsIHNvIHNwZWNpZnkgdGhlIGZsYWcgdG8gZ2V0IGRlZmF1bHQgYmVoYXZpb3IgYmFjay4gKi8KLSNkZWZpbmUgU1RBTkRBUkRfT1BFTl9GTEFHUyAoX09fQklOQVJZIHwgX09fTk9JTkhFUklUKQotCiAvKiBBbGxvd2FibGUgbW9kZSBiaXRzIG9uIFdpbjMyLiAgVXNpbmcgbW9kZSBiaXRzIHRoYXQgYXJlIG5vdCBzdXBwb3J0ZWQgb24KICAqIFdpbjMyIChlZyBTX0lSV1hVKSBpcyBnZW5lcmFsbHkgaWdub3JlZCwgYnV0IFdpbmUgd2FybnMgbG91ZGx5IGFib3V0IGl0CiAgKiBzbyB3ZSBzaW1wbHkgcmVtb3ZlIHRoZW0uCkBAIC00NCw2ICszNSwxNjQgQEAKIC8qIEdldEZpbmFsUGF0aE5hbWVCeUhhbmRsZVcgc2lnbmF0dXJlICovCiB0eXBlZGVmIERXT1JEKFdJTkFQSSAqUEZHZXRGaW5hbFBhdGhOYW1lQnlIYW5kbGVXKShIQU5ETEUsIExQV1NUUiwgRFdPUkQsIERXT1JEKTsKIAordW5zaWduZWQgbG9uZyBnaXRfd2luMzJfX2NyZWF0ZWZpbGVfc2hhcmVtb2RlID0KKyBGSUxFX1NIQVJFX1JFQUQgfCBGSUxFX1NIQVJFX1dSSVRFOworaW50IGdpdF93aW4zMl9fcmV0cmllcyA9IDEwOworCitHSVRfSU5MSU5FKHZvaWQpIHNldF9lcnJubyh2b2lkKQoreworCXN3aXRjaCAoR2V0TGFzdEVycm9yKCkpIHsKKwljYXNlIEVSUk9SX0ZJTEVfTk9UX0ZPVU5EOgorCWNhc2UgRVJST1JfUEFUSF9OT1RfRk9VTkQ6CisJY2FzZSBFUlJPUl9JTlZBTElEX0RSSVZFOgorCWNhc2UgRVJST1JfTk9fTU9SRV9GSUxFUzoKKwljYXNlIEVSUk9SX0JBRF9ORVRQQVRIOgorCWNhc2UgRVJST1JfQkFEX05FVF9OQU1FOgorCWNhc2UgRVJST1JfQkFEX1BBVEhOQU1FOgorCWNhc2UgRVJST1JfRklMRU5BTUVfRVhDRURfUkFOR0U6CisJCWVycm5vID0gRU5PRU5UOworCQlicmVhazsKKwljYXNlIEVSUk9SX0JBRF9FTlZJUk9OTUVOVDoKKwkJZXJybm8gPSBFMkJJRzsKKwkJYnJlYWs7CisJY2FzZSBFUlJPUl9CQURfRk9STUFUOgorCWNhc2UgRVJST1JfSU5WQUxJRF9TVEFSVElOR19DT0RFU0VHOgorCWNhc2UgRVJST1JfSU5WQUxJRF9TVEFDS1NFRzoKKwljYXNlIEVSUk9SX0lOVkFMSURfTU9EVUxFVFlQRToKKwljYXNlIEVSUk9SX0lOVkFMSURfRVhFX1NJR05BVFVSRToKKwljYXNlIEVSUk9SX0VYRV9NQVJLRURfSU5WQUxJRDoKKwljYXNlIEVSUk9SX0JBRF9FWEVfRk9STUFUOgorCWNhc2UgRVJST1JfSVRFUkFURURfREFUQV9FWENFRURTXzY0azoKKwljYXNlIEVSUk9SX0lOVkFMSURfTUlOQUxMT0NTSVpFOgorCWNhc2UgRVJST1JfRFlOTElOS19GUk9NX0lOVkFMSURfUklORzoKKwljYXNlIEVSUk9SX0lPUExfTk9UX0VOQUJMRUQ6CisJY2FzZSBFUlJPUl9JTlZBTElEX1NFR0RQTDoKKwljYXNlIEVSUk9SX0FVVE9EQVRBU0VHX0VYQ0VFRFNfNjRrOgorCWNhc2UgRVJST1JfUklORzJTRUdfTVVTVF9CRV9NT1ZBQkxFOgorCWNhc2UgRVJST1JfUkVMT0NfQ0hBSU5fWEVFRFNfU0VHTElNOgorCWNhc2UgRVJST1JfSU5GTE9PUF9JTl9SRUxPQ19DSEFJTjoKKwkJZXJybm8gPSBFTk9FWEVDOworCQlicmVhazsKKwljYXNlIEVSUk9SX0lOVkFMSURfSEFORExFOgorCWNhc2UgRVJST1JfSU5WQUxJRF9UQVJHRVRfSEFORExFOgorCWNhc2UgRVJST1JfRElSRUNUX0FDQ0VTU19IQU5ETEU6CisJCWVycm5vID0gRUJBREY7CisJCWJyZWFrOworCWNhc2UgRVJST1JfV0FJVF9OT19DSElMRFJFTjoKKwljYXNlIEVSUk9SX0NISUxEX05PVF9DT01QTEVURToKKwkJZXJybm8gPSBFQ0hJTEQ7CisJCWJyZWFrOworCWNhc2UgRVJST1JfTk9fUFJPQ19TTE9UUzoKKwljYXNlIEVSUk9SX01BWF9USFJEU19SRUFDSEVEOgorCWNhc2UgRVJST1JfTkVTVElOR19OT1RfQUxMT1dFRDoKKwkJZXJybm8gPSBFQUdBSU47CisJCWJyZWFrOworCWNhc2UgRVJST1JfQVJFTkFfVFJBU0hFRDoKKwljYXNlIEVSUk9SX05PVF9FTk9VR0hfTUVNT1JZOgorCWNhc2UgRVJST1JfSU5WQUxJRF9CTE9DSzoKKwljYXNlIEVSUk9SX05PVF9FTk9VR0hfUVVPVEE6CisJCWVycm5vID0gRU5PTUVNOworCQlicmVhazsKKwljYXNlIEVSUk9SX0FDQ0VTU19ERU5JRUQ6CisJY2FzZSBFUlJPUl9DVVJSRU5UX0RJUkVDVE9SWToKKwljYXNlIEVSUk9SX1dSSVRFX1BST1RFQ1Q6CisJY2FzZSBFUlJPUl9CQURfVU5JVDoKKwljYXNlIEVSUk9SX05PVF9SRUFEWToKKwljYXNlIEVSUk9SX0JBRF9DT01NQU5EOgorCWNhc2UgRVJST1JfQ1JDOgorCWNhc2UgRVJST1JfQkFEX0xFTkdUSDoKKwljYXNlIEVSUk9SX1NFRUs6CisJY2FzZSBFUlJPUl9OT1RfRE9TX0RJU0s6CisJY2FzZSBFUlJPUl9TRUNUT1JfTk9UX0ZPVU5EOgorCWNhc2UgRVJST1JfT1VUX09GX1BBUEVSOgorCWNhc2UgRVJST1JfV1JJVEVfRkFVTFQ6CisJY2FzZSBFUlJPUl9SRUFEX0ZBVUxUOgorCWNhc2UgRVJST1JfR0VOX0ZBSUxVUkU6CisJY2FzZSBFUlJPUl9TSEFSSU5HX1ZJT0xBVElPTjoKKwljYXNlIEVSUk9SX0xPQ0tfVklPTEFUSU9OOgorCWNhc2UgRVJST1JfV1JPTkdfRElTSzoKKwljYXNlIEVSUk9SX1NIQVJJTkdfQlVGRkVSX0VYQ0VFREVEOgorCWNhc2UgRVJST1JfTkVUV09SS19BQ0NFU1NfREVOSUVEOgorCWNhc2UgRVJST1JfQ0FOTk9UX01BS0U6CisJY2FzZSBFUlJPUl9GQUlMX0kyNDoKKwljYXNlIEVSUk9SX0RSSVZFX0xPQ0tFRDoKKwljYXNlIEVSUk9SX1NFRUtfT05fREVWSUNFOgorCWNhc2UgRVJST1JfTk9UX0xPQ0tFRDoKKwljYXNlIEVSUk9SX0xPQ0tfRkFJTEVEOgorCQllcnJubyA9IEVBQ0NFUzsKKwkJYnJlYWs7CisJY2FzZSBFUlJPUl9GSUxFX0VYSVNUUzoKKwljYXNlIEVSUk9SX0FMUkVBRFlfRVhJU1RTOgorCQllcnJubyA9IEVFWElTVDsKKwkJYnJlYWs7CisJY2FzZSBFUlJPUl9OT1RfU0FNRV9ERVZJQ0U6CisJCWVycm5vID0gRVhERVY7CisJCWJyZWFrOworCWNhc2UgRVJST1JfSU5WQUxJRF9GVU5DVElPTjoKKwljYXNlIEVSUk9SX0lOVkFMSURfQUNDRVNTOgorCWNhc2UgRVJST1JfSU5WQUxJRF9EQVRBOgorCWNhc2UgRVJST1JfSU5WQUxJRF9QQVJBTUVURVI6CisJY2FzZSBFUlJPUl9ORUdBVElWRV9TRUVLOgorCQllcnJubyA9IEVJTlZBTDsKKwkJYnJlYWs7CisJY2FzZSBFUlJPUl9UT09fTUFOWV9PUEVOX0ZJTEVTOgorCQllcnJubyA9IEVNRklMRTsKKwkJYnJlYWs7CisJY2FzZSBFUlJPUl9ESVNLX0ZVTEw6CisJCWVycm5vID0gRU5PU1BDOworCQlicmVhazsKKwljYXNlIEVSUk9SX0JST0tFTl9QSVBFOgorCQllcnJubyA9IEVQSVBFOworCQlicmVhazsKKwljYXNlIEVSUk9SX0RJUl9OT1RfRU1QVFk6CisJCWVycm5vID0gRU5PVEVNUFRZOworCQlicmVhazsKKwlkZWZhdWx0OgorCQllcnJubyA9IEVJTlZBTDsKKwl9Cit9CisKK0dJVF9JTkxJTkUoYm9vbCkgbGFzdF9lcnJvcl9yZXRyeWFibGUodm9pZCkKK3sKKwlpbnQgb3NfZXJyb3IgPSBHZXRMYXN0RXJyb3IoKTsKKworCXJldHVybiAob3NfZXJyb3IgPT0gRVJST1JfU0hBUklOR19WSU9MQVRJT04gfHwKKwkJb3NfZXJyb3IgPT0gRVJST1JfQUNDRVNTX0RFTklFRCk7Cit9CisKKyNkZWZpbmUgZG9fd2l0aF9yZXRyaWVzKGZuLCByZW1lZGlhdGlvbikgXAorCWRvIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorCQlpbnQgX190cmllcywgX19yZXQ7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorCQlmb3IgKF9fdHJpZXMgPSAwOyBfX3RyaWVzIDwgZ2l0X3dpbjMyX19yZXRyaWVzOyBfX3RyaWVzKyspIHsgXAorCQkJaWYgKF9fdHJpZXMgJiYgKF9fcmV0ID0gKHJlbWVkaWF0aW9uKSkgIT0gMCkgICAgICAgICAgICAgXAorCQkJCXJldHVybiBfX3JldDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorCQkJaWYgKChfX3JldCA9IChmbikpICE9IEdJVF9SRVRSWSkgICAgICAgICAgICAgICAgICAgICAgICAgXAorCQkJCXJldHVybiBfX3JldDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorCQkJU2xlZXAoNSk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorCQl9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorCQlyZXR1cm4gLTE7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorCX0gd2hpbGUgKDApICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorCitzdGF0aWMgaW50IGVuc3VyZV93cml0YWJsZSh3Y2hhcl90ICpwYXRoKQoreworCURXT1JEIGF0dHJzOworCisJaWYgKChhdHRycyA9IEdldEZpbGVBdHRyaWJ1dGVzVyhwYXRoKSkgPT0gSU5WQUxJRF9GSUxFX0FUVFJJQlVURVMpCisJCWdvdG8gb25fZXJyb3I7CisKKwlpZiAoKGF0dHJzICYgRklMRV9BVFRSSUJVVEVfUkVBRE9OTFkpID09IDApCisJCXJldHVybiAwOworCisJaWYgKCFTZXRGaWxlQXR0cmlidXRlc1cocGF0aCwgKGF0dHJzICYgfkZJTEVfQVRUUklCVVRFX1JFQURPTkxZKSkpCisJCWdvdG8gb25fZXJyb3I7CisKKwlyZXR1cm4gMDsKKworb25fZXJyb3I6CisJc2V0X2Vycm5vKCk7CisJcmV0dXJuIC0xOworfQorCiAvKioKICAqIFRydW5jYXRlIG9yIGV4dGVuZCBmaWxlLgogICoKQEAgLTg5LDMwICsyMzgsMzQgQEAKIAlyZXR1cm4gLTE7CiB9CiAKK0dJVF9JTkxJTkUoaW50KSB1bmxpbmtfb25jZShjb25zdCB3Y2hhcl90ICpwYXRoKQoreworCWlmIChEZWxldGVGaWxlVyhwYXRoKSkKKwkJcmV0dXJuIDA7CisKKwlpZiAobGFzdF9lcnJvcl9yZXRyeWFibGUoKSkKKwkJcmV0dXJuIEdJVF9SRVRSWTsKKworCXNldF9lcnJubygpOworCXJldHVybiAtMTsKK30KKwogaW50IHBfdW5saW5rKGNvbnN0IGNoYXIgKnBhdGgpCiB7Ci0JZ2l0X3dpbjMyX3BhdGggYnVmOwotCWludCBlcnJvcjsKKwlnaXRfd2luMzJfcGF0aCB3cGF0aDsKIAotCWlmIChnaXRfd2luMzJfcGF0aF9mcm9tX3V0ZjgoYnVmLCBwYXRoKSA8IDApCisJaWYgKGdpdF93aW4zMl9wYXRoX2Zyb21fdXRmOCh3cGF0aCwgcGF0aCkgPCAwKQogCQlyZXR1cm4gLTE7CiAKLQllcnJvciA9IF93dW5saW5rKGJ1Zik7Ci0KLQkvKiBJZiB0aGUgZmlsZSBjb3VsZCBub3QgYmUgZGVsZXRlZCBiZWNhdXNlIGl0IHdhcwotCSAqIHJlYWQtb25seSwgY2xlYXIgdGhlIGJpdCBhbmQgdHJ5IGFnYWluICovCi0JaWYgKGVycm9yID09IC0xICYmIGVycm5vID09IEVBQ0NFUykgewotCQlfd2NobW9kKGJ1ZiwgMDY2Nik7Ci0JCWVycm9yID0gX3d1bmxpbmsoYnVmKTsKLQl9Ci0KLQlyZXR1cm4gZXJyb3I7CisJZG9fd2l0aF9yZXRyaWVzKHVubGlua19vbmNlKHdwYXRoKSwgZW5zdXJlX3dyaXRhYmxlKHdwYXRoKSk7CiB9CiAKIGludCBwX2ZzeW5jKGludCBmZCkKIHsKIAlIQU5ETEUgZmggPSAoSEFORExFKV9nZXRfb3NmaGFuZGxlKGZkKTsKIAorCXBfZnN5bmNfX2NudCsrOworCiAJaWYgKGZoID09IElOVkFMSURfSEFORExFX1ZBTFVFKSB7CiAJCWVycm5vID0gRUJBREY7CiAJCXJldHVybiAtMTsKQEAgLTIxMCw0NCArMzYzLDYgQEAKIAlyZXR1cm4gZG9fbHN0YXQoZmlsZW5hbWUsIGJ1ZiwgdHJ1ZSk7CiB9CiAKLWludCBwX3V0aW1lcyhjb25zdCBjaGFyICpmaWxlbmFtZSwgY29uc3Qgc3RydWN0IHBfdGltZXZhbCB0aW1lc1syXSkKLXsKLQlpbnQgZmQsIGVycm9yOwotCi0JaWYgKChmZCA9IHBfb3BlbihmaWxlbmFtZSwgT19SRFdSKSkgPCAwKQotCQlyZXR1cm4gZmQ7Ci0KLQllcnJvciA9IHBfZnV0aW1lcyhmZCwgdGltZXMpOwotCi0JY2xvc2UoZmQpOwotCXJldHVybiBlcnJvcjsKLX0KLQotaW50IHBfZnV0aW1lcyhpbnQgZmQsIGNvbnN0IHN0cnVjdCBwX3RpbWV2YWwgdGltZXNbMl0pCi17Ci0JSEFORExFIGhhbmRsZTsKLQlGSUxFVElNRSBhdGltZSA9IHswfSwgbXRpbWUgPSB7MH07Ci0KLQlpZiAodGltZXMgPT0gTlVMTCkgewotCQlTWVNURU1USU1FIHN0OwotCi0JCUdldFN5c3RlbVRpbWUoJnN0KTsKLQkJU3lzdGVtVGltZVRvRmlsZVRpbWUoJnN0LCAmYXRpbWUpOwotCQlTeXN0ZW1UaW1lVG9GaWxlVGltZSgmc3QsICZtdGltZSk7Ci0JfSBlbHNlIHsKLQkJZ2l0X3dpbjMyX190aW1ldmFsX3RvX2ZpbGV0aW1lKCZhdGltZSwgdGltZXNbMF0pOwotCQlnaXRfd2luMzJfX3RpbWV2YWxfdG9fZmlsZXRpbWUoJm10aW1lLCB0aW1lc1sxXSk7Ci0JfQotCi0JaWYgKChoYW5kbGUgPSAoSEFORExFKV9nZXRfb3NmaGFuZGxlKGZkKSkgPT0gSU5WQUxJRF9IQU5ETEVfVkFMVUUpCi0JCXJldHVybiAtMTsKLQotCWlmIChTZXRGaWxlVGltZShoYW5kbGUsIE5VTEwsICZhdGltZSwgJm10aW1lKSA9PSAwKQotCQlyZXR1cm4gLTE7Ci0KLQlyZXR1cm4gMDsKLX0KLQogaW50IHBfcmVhZGxpbmsoY29uc3QgY2hhciAqcGF0aCwgY2hhciAqYnVmLCBzaXplX3QgYnVmc2l6KQogewogCWdpdF93aW4zMl9wYXRoIHBhdGhfdywgdGFyZ2V0X3c7CkBAIC0yODAsMTIgKzM5NSw5MSBAQAogCXJldHVybiBnaXRfZnV0aWxzX2Zha2Vfc3ltbGluayhvbGQsIG5ldyk7CiB9CiAKK3N0cnVjdCBvcGVuX29wdHMgeworCURXT1JEIGFjY2VzczsKKwlEV09SRCBzaGFyaW5nOworCVNFQ1VSSVRZX0FUVFJJQlVURVMgc2VjdXJpdHk7CisJRFdPUkQgY3JlYXRpb25fZGlzcG9zaXRpb247CisJRFdPUkQgYXR0cmlidXRlczsKKwlpbnQgb3NmX2ZsYWdzOworfTsKKworR0lUX0lOTElORSh2b2lkKSBvcGVuX29wdHNfZnJvbV9wb3NpeChzdHJ1Y3Qgb3Blbl9vcHRzICpvcHRzLCBpbnQgZmxhZ3MsIG1vZGVfdCBtb2RlKQoreworCW1lbXNldChvcHRzLCAwLCBzaXplb2Yoc3RydWN0IG9wZW5fb3B0cykpOworCisJc3dpdGNoIChmbGFncyAmIChPX1dST05MWSB8IE9fUkRXUikpIHsKKwljYXNlIE9fV1JPTkxZOgorCQlvcHRzLT5hY2Nlc3MgPSBHRU5FUklDX1dSSVRFOworCQlicmVhazsKKwljYXNlIE9fUkRXUjoKKwkJb3B0cy0+YWNjZXNzID0gR0VORVJJQ19SRUFEIHwgR0VORVJJQ19XUklURTsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJb3B0cy0+YWNjZXNzID0gR0VORVJJQ19SRUFEOworCQlicmVhazsKKwl9CisKKwlvcHRzLT5zaGFyaW5nID0gKERXT1JEKWdpdF93aW4zMl9fY3JlYXRlZmlsZV9zaGFyZW1vZGU7CisKKwlzd2l0Y2ggKGZsYWdzICYgKE9fQ1JFQVQgfCBPX1RSVU5DIHwgT19FWENMKSkgeworCWNhc2UgT19DUkVBVCB8IE9fRVhDTDoKKwljYXNlIE9fQ1JFQVQgfCBPX1RSVU5DIHwgT19FWENMOgorCQlvcHRzLT5jcmVhdGlvbl9kaXNwb3NpdGlvbiA9IENSRUFURV9ORVc7CisJCWJyZWFrOworCWNhc2UgT19DUkVBVCB8IE9fVFJVTkM6CisJCW9wdHMtPmNyZWF0aW9uX2Rpc3Bvc2l0aW9uID0gQ1JFQVRFX0FMV0FZUzsKKwkJYnJlYWs7CisJY2FzZSBPX1RSVU5DOgorCQlvcHRzLT5jcmVhdGlvbl9kaXNwb3NpdGlvbiA9IFRSVU5DQVRFX0VYSVNUSU5HOworCQlicmVhazsKKwljYXNlIE9fQ1JFQVQ6CisJCW9wdHMtPmNyZWF0aW9uX2Rpc3Bvc2l0aW9uID0gT1BFTl9BTFdBWVM7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCW9wdHMtPmNyZWF0aW9uX2Rpc3Bvc2l0aW9uID0gT1BFTl9FWElTVElORzsKKwkJYnJlYWs7CisJfQorCisJb3B0cy0+YXR0cmlidXRlcyA9ICgoZmxhZ3MgJiBPX0NSRUFUKSAmJiAhKG1vZGUgJiBTX0lXUklURSkpID8KKwkJRklMRV9BVFRSSUJVVEVfUkVBRE9OTFkgOiBGSUxFX0FUVFJJQlVURV9OT1JNQUw7CisJb3B0cy0+b3NmX2ZsYWdzID0gZmxhZ3MgJiAoT19SRE9OTFkgfCBPX0FQUEVORCk7CisKKwlvcHRzLT5zZWN1cml0eS5uTGVuZ3RoID0gc2l6ZW9mKFNFQ1VSSVRZX0FUVFJJQlVURVMpOworCW9wdHMtPnNlY3VyaXR5LmxwU2VjdXJpdHlEZXNjcmlwdG9yID0gTlVMTDsKKwlvcHRzLT5zZWN1cml0eS5iSW5oZXJpdEhhbmRsZSA9IDA7Cit9CisKK0dJVF9JTkxJTkUoaW50KSBvcGVuX29uY2UoCisJY29uc3Qgd2NoYXJfdCAqcGF0aCwKKwlzdHJ1Y3Qgb3Blbl9vcHRzICpvcHRzKQoreworCWludCBmZDsKKworCUhBTkRMRSBoYW5kbGUgPSBDcmVhdGVGaWxlVyhwYXRoLCBvcHRzLT5hY2Nlc3MsIG9wdHMtPnNoYXJpbmcsCisJCSZvcHRzLT5zZWN1cml0eSwgb3B0cy0+Y3JlYXRpb25fZGlzcG9zaXRpb24sIG9wdHMtPmF0dHJpYnV0ZXMsIDApOworCisJaWYgKGhhbmRsZSA9PSBJTlZBTElEX0hBTkRMRV9WQUxVRSkgeworCQlpZiAobGFzdF9lcnJvcl9yZXRyeWFibGUoKSkKKwkJCXJldHVybiBHSVRfUkVUUlk7CisKKwkJc2V0X2Vycm5vKCk7CisJCXJldHVybiAtMTsKKwl9CisKKwlpZiAoKGZkID0gX29wZW5fb3NmaGFuZGxlKChpbnRwdHJfdCloYW5kbGUsIG9wdHMtPm9zZl9mbGFncykpIDwgMCkKKwkJQ2xvc2VIYW5kbGUoaGFuZGxlKTsKKworCXJldHVybiBmZDsKK30KKwogaW50IHBfb3Blbihjb25zdCBjaGFyICpwYXRoLCBpbnQgZmxhZ3MsIC4uLikKIHsKLQlnaXRfd2luMzJfcGF0aCBidWY7CisJZ2l0X3dpbjMyX3BhdGggd3BhdGg7CiAJbW9kZV90IG1vZGUgPSAwOworCXN0cnVjdCBvcGVuX29wdHMgb3B0cyA9IHswfTsKIAotCWlmIChnaXRfd2luMzJfcGF0aF9mcm9tX3V0ZjgoYnVmLCBwYXRoKSA8IDApCisJaWYgKGdpdF93aW4zMl9wYXRoX2Zyb21fdXRmOCh3cGF0aCwgcGF0aCkgPCAwKQogCQlyZXR1cm4gLTE7CiAKIAlpZiAoZmxhZ3MgJiBPX0NSRUFUKSB7CkBAIC0yOTYsMTkgKzQ5MCw4MyBAQAogCQl2YV9lbmQoYXJnX2xpc3QpOwogCX0KIAotCXJldHVybiBfd29wZW4oYnVmLCBmbGFncyB8IFNUQU5EQVJEX09QRU5fRkxBR1MsIG1vZGUgJiBXSU4zMl9NT0RFX01BU0spOworCW9wZW5fb3B0c19mcm9tX3Bvc2l4KCZvcHRzLCBmbGFncywgbW9kZSk7CisKKwlkb193aXRoX3JldHJpZXMoCisJCW9wZW5fb25jZSh3cGF0aCwgJm9wdHMpLAorCQkwKTsKIH0KIAogaW50IHBfY3JlYXQoY29uc3QgY2hhciAqcGF0aCwgbW9kZV90IG1vZGUpCiB7Ci0JZ2l0X3dpbjMyX3BhdGggYnVmOworCXJldHVybiBwX29wZW4ocGF0aCwgT19XUk9OTFkgfCBPX0NSRUFUIHwgT19UUlVOQywgbW9kZSk7Cit9CiAKLQlpZiAoZ2l0X3dpbjMyX3BhdGhfZnJvbV91dGY4KGJ1ZiwgcGF0aCkgPCAwKQoraW50IHBfdXRpbWVzKGNvbnN0IGNoYXIgKnBhdGgsIGNvbnN0IHN0cnVjdCBwX3RpbWV2YWwgdGltZXNbMl0pCit7CisJZ2l0X3dpbjMyX3BhdGggd3BhdGg7CisJaW50IGZkLCBlcnJvcjsKKwlEV09SRCBhdHRyc19vcmlnLCBhdHRyc19uZXcgPSAwOworCXN0cnVjdCBvcGVuX29wdHMgb3B0cyA9IHsgMCB9OworCisJaWYgKGdpdF93aW4zMl9wYXRoX2Zyb21fdXRmOCh3cGF0aCwgcGF0aCkgPCAwKQogCQlyZXR1cm4gLTE7CiAKLQlyZXR1cm4gX3dvcGVuKGJ1ZiwKLQkJX09fV1JPTkxZIHwgX09fQ1JFQVQgfCBfT19UUlVOQyB8IFNUQU5EQVJEX09QRU5fRkxBR1MsCi0JCW1vZGUgJiBXSU4zMl9NT0RFX01BU0spOworCWF0dHJzX29yaWcgPSBHZXRGaWxlQXR0cmlidXRlc1cod3BhdGgpOworCisJaWYgKGF0dHJzX29yaWcgJiBGSUxFX0FUVFJJQlVURV9SRUFET05MWSkgeworCQlhdHRyc19uZXcgPSBhdHRyc19vcmlnICYgfkZJTEVfQVRUUklCVVRFX1JFQURPTkxZOworCisJCWlmICghU2V0RmlsZUF0dHJpYnV0ZXNXKHdwYXRoLCBhdHRyc19uZXcpKSB7CisJCQlnaXRlcnJfc2V0KEdJVEVSUl9PUywgImZhaWxlZCB0byBzZXQgYXR0cmlidXRlcyIpOworCQkJcmV0dXJuIC0xOworCQl9CisJfQorCisJb3Blbl9vcHRzX2Zyb21fcG9zaXgoJm9wdHMsIE9fUkRXUiwgMCk7CisKKwlpZiAoKGZkID0gb3Blbl9vbmNlKHdwYXRoLCAmb3B0cykpIDwgMCkgeworCQllcnJvciA9IC0xOworCQlnb3RvIGRvbmU7CisJfQorCisJZXJyb3IgPSBwX2Z1dGltZXMoZmQsIHRpbWVzKTsKKwljbG9zZShmZCk7CisKK2RvbmU6CisJaWYgKGF0dHJzX29yaWcgIT0gYXR0cnNfbmV3KSB7CisJCURXT1JEIG9zX2Vycm9yID0gR2V0TGFzdEVycm9yKCk7CisJCVNldEZpbGVBdHRyaWJ1dGVzVyh3cGF0aCwgYXR0cnNfb3JpZyk7CisJCVNldExhc3RFcnJvcihvc19lcnJvcik7CisJfQorCisJcmV0dXJuIGVycm9yOworfQorCitpbnQgcF9mdXRpbWVzKGludCBmZCwgY29uc3Qgc3RydWN0IHBfdGltZXZhbCB0aW1lc1syXSkKK3sKKwlIQU5ETEUgaGFuZGxlOworCUZJTEVUSU1FIGF0aW1lID0geyAwIH0sIG10aW1lID0geyAwIH07CisKKwlpZiAodGltZXMgPT0gTlVMTCkgeworCQlTWVNURU1USU1FIHN0OworCisJCUdldFN5c3RlbVRpbWUoJnN0KTsKKwkJU3lzdGVtVGltZVRvRmlsZVRpbWUoJnN0LCAmYXRpbWUpOworCQlTeXN0ZW1UaW1lVG9GaWxlVGltZSgmc3QsICZtdGltZSk7CisJfQorCWVsc2UgeworCQlnaXRfd2luMzJfX3RpbWV2YWxfdG9fZmlsZXRpbWUoJmF0aW1lLCB0aW1lc1swXSk7CisJCWdpdF93aW4zMl9fdGltZXZhbF90b19maWxldGltZSgmbXRpbWUsIHRpbWVzWzFdKTsKKwl9CisKKwlpZiAoKGhhbmRsZSA9IChIQU5ETEUpX2dldF9vc2ZoYW5kbGUoZmQpKSA9PSBJTlZBTElEX0hBTkRMRV9WQUxVRSkKKwkJcmV0dXJuIC0xOworCisJaWYgKFNldEZpbGVUaW1lKGhhbmRsZSwgTlVMTCwgJmF0aW1lLCAmbXRpbWUpID09IDApCisJCXJldHVybiAtMTsKKworCXJldHVybiAwOwogfQogCiBpbnQgcF9nZXRjd2QoY2hhciAqYnVmZmVyX291dCwgc2l6ZV90IHNpemUpCkBAIC01ODEsNjIgKzgzOSwyNyBAQAogCXJldHVybiBfd2FjY2VzcyhidWYsIG1vZGUgJiBXSU4zMl9NT0RFX01BU0spOwogfQogCi1zdGF0aWMgaW50IGVuc3VyZV93cml0YWJsZSh3Y2hhcl90ICpmcGF0aCkKK0dJVF9JTkxJTkUoaW50KSByZW5hbWVfb25jZShjb25zdCB3Y2hhcl90ICpmcm9tLCBjb25zdCB3Y2hhcl90ICp0bykKIHsKLQlEV09SRCBhdHRyczsKLQotCWF0dHJzID0gR2V0RmlsZUF0dHJpYnV0ZXNXKGZwYXRoKTsKLQlpZiAoYXR0cnMgPT0gSU5WQUxJRF9GSUxFX0FUVFJJQlVURVMpIHsKLQkJaWYgKEdldExhc3RFcnJvcigpID09IEVSUk9SX0ZJTEVfTk9UX0ZPVU5EKQotCQkJcmV0dXJuIDA7Ci0KLQkJZ2l0ZXJyX3NldChHSVRFUlJfT1MsICJmYWlsZWQgdG8gZ2V0IGF0dHJpYnV0ZXMiKTsKLQkJcmV0dXJuIC0xOwotCX0KLQotCWlmICghKGF0dHJzICYgRklMRV9BVFRSSUJVVEVfUkVBRE9OTFkpKQorCWlmIChNb3ZlRmlsZUV4Vyhmcm9tLCB0bywgTU9WRUZJTEVfUkVQTEFDRV9FWElTVElORyB8IE1PVkVGSUxFX0NPUFlfQUxMT1dFRCkpCiAJCXJldHVybiAwOwogCi0JYXR0cnMgJj0gfkZJTEVfQVRUUklCVVRFX1JFQURPTkxZOwotCWlmICghU2V0RmlsZUF0dHJpYnV0ZXNXKGZwYXRoLCBhdHRycykpIHsKLQkJZ2l0ZXJyX3NldChHSVRFUlJfT1MsICJmYWlsZWQgdG8gc2V0IGF0dHJpYnV0ZXMiKTsKLQkJcmV0dXJuIC0xOwotCX0KKwlpZiAobGFzdF9lcnJvcl9yZXRyeWFibGUoKSkKKwkJcmV0dXJuIEdJVF9SRVRSWTsKIAotCXJldHVybiAwOworCXNldF9lcnJubygpOworCXJldHVybiAtMTsKIH0KIAogaW50IHBfcmVuYW1lKGNvbnN0IGNoYXIgKmZyb20sIGNvbnN0IGNoYXIgKnRvKQogewotCWdpdF93aW4zMl9wYXRoIHdmcm9tOwotCWdpdF93aW4zMl9wYXRoIHd0bzsKLQlpbnQgcmVuYW1lX3RyaWVzOwotCWludCByZW5hbWVfc3VjY2VlZGVkOwotCWludCBlcnJvcjsKKwlnaXRfd2luMzJfcGF0aCB3ZnJvbSwgd3RvOwogCiAJaWYgKGdpdF93aW4zMl9wYXRoX2Zyb21fdXRmOCh3ZnJvbSwgZnJvbSkgPCAwIHx8CiAJCWdpdF93aW4zMl9wYXRoX2Zyb21fdXRmOCh3dG8sIHRvKSA8IDApCiAJCXJldHVybiAtMTsKIAotCS8qIHdhaXQgdXAgdG8gNTBtcyBpZiBmaWxlIGlzIGxvY2tlZCBieSBhbm90aGVyIHRocmVhZCBvciBwcm9jZXNzICovCi0JcmVuYW1lX3RyaWVzID0gMDsKLQlyZW5hbWVfc3VjY2VlZGVkID0gMDsKLQl3aGlsZSAocmVuYW1lX3RyaWVzIDwgMTApIHsKLQkJaWYgKGVuc3VyZV93cml0YWJsZSh3dG8pID09IDAgJiYKLQkJICAgIE1vdmVGaWxlRXhXKHdmcm9tLCB3dG8sIE1PVkVGSUxFX1JFUExBQ0VfRVhJU1RJTkcgfCBNT1ZFRklMRV9DT1BZX0FMTE9XRUQpICE9IDApIHsKLQkJCXJlbmFtZV9zdWNjZWVkZWQgPSAxOwotCQkJYnJlYWs7Ci0JCX0KLQkJCi0JCWVycm9yID0gR2V0TGFzdEVycm9yKCk7Ci0JCWlmIChlcnJvciA9PSBFUlJPUl9TSEFSSU5HX1ZJT0xBVElPTiB8fCBlcnJvciA9PSBFUlJPUl9BQ0NFU1NfREVOSUVEKSB7Ci0JCQlTbGVlcCg1KTsKLQkJCXJlbmFtZV90cmllcysrOwotCQl9IGVsc2UKLQkJCWJyZWFrOwotCX0KLQkKLQlyZXR1cm4gcmVuYW1lX3N1Y2NlZWRlZCA/IDAgOiAtMTsKKwlkb193aXRoX3JldHJpZXMocmVuYW1lX29uY2Uod2Zyb20sIHd0byksIGVuc3VyZV93cml0YWJsZSh3dG8pKTsKIH0KIAogaW50IHBfcmVjdihHSVRfU09DS0VUIHNvY2tldCwgdm9pZCAqYnVmZmVyLCBzaXplX3QgbGVuZ3RoLCBpbnQgZmxhZ3MpCmRpZmYgLS1naXQgYS9zcmMvd29ya3RyZWUuYyBiL3NyYy93b3JrdHJlZS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmVkZTE1NWIKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvd29ya3RyZWUuYwpAQCAtMCwwICsxLDU1OCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgdGhlIGxpYmdpdDIgY29udHJpYnV0b3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIGxpYmdpdDIsIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBHTlUgR1BMIHYyIHdpdGgKKyAqIGEgTGlua2luZyBFeGNlcHRpb24uIEZvciBmdWxsIHRlcm1zIHNlZSB0aGUgaW5jbHVkZWQgQ09QWUlORyBmaWxlLgorICovCisKKyNpbmNsdWRlICJjb21tb24uaCIKKworI2luY2x1ZGUgImdpdDIvYnJhbmNoLmgiCisjaW5jbHVkZSAiZ2l0Mi9jb21taXQuaCIKKyNpbmNsdWRlICJnaXQyL3dvcmt0cmVlLmgiCisKKyNpbmNsdWRlICJyZXBvc2l0b3J5LmgiCisjaW5jbHVkZSAid29ya3RyZWUuaCIKKworc3RhdGljIGJvb2wgaXNfd29ya3RyZWVfZGlyKGNvbnN0IGNoYXIgKmRpcikKK3sKKwlnaXRfYnVmIGJ1ZiA9IEdJVF9CVUZfSU5JVDsKKwlpbnQgZXJyb3I7CisKKwlpZiAoZ2l0X2J1Zl9zZXRzKCZidWYsIGRpcikgPCAwKQorCQlyZXR1cm4gLTE7CisKKwllcnJvciA9IGdpdF9wYXRoX2NvbnRhaW5zX2ZpbGUoJmJ1ZiwgImNvbW1vbmRpciIpCisJCSYmIGdpdF9wYXRoX2NvbnRhaW5zX2ZpbGUoJmJ1ZiwgImdpdGRpciIpCisJCSYmIGdpdF9wYXRoX2NvbnRhaW5zX2ZpbGUoJmJ1ZiwgIkhFQUQiKTsKKworCWdpdF9idWZfZnJlZSgmYnVmKTsKKwlyZXR1cm4gZXJyb3I7Cit9CisKK2ludCBnaXRfd29ya3RyZWVfbGlzdChnaXRfc3RyYXJyYXkgKnd0cywgZ2l0X3JlcG9zaXRvcnkgKnJlcG8pCit7CisJZ2l0X3ZlY3RvciB3b3JrdHJlZXMgPSBHSVRfVkVDVE9SX0lOSVQ7CisJZ2l0X2J1ZiBwYXRoID0gR0lUX0JVRl9JTklUOworCWNoYXIgKndvcmt0cmVlOworCXVuc2lnbmVkIGksIGxlbjsKKwlpbnQgZXJyb3I7CisKKwlhc3NlcnQod3RzICYmIHJlcG8pOworCisJd3RzLT5jb3VudCA9IDA7CisJd3RzLT5zdHJpbmdzID0gTlVMTDsKKworCWlmICgoZXJyb3IgPSBnaXRfYnVmX3ByaW50ZigmcGF0aCwgIiVzL3dvcmt0cmVlcy8iLCByZXBvLT5jb21tb25kaXIpKSA8IDApCisJCWdvdG8gZXhpdDsKKwlpZiAoIWdpdF9wYXRoX2V4aXN0cyhwYXRoLnB0cikgfHwgZ2l0X3BhdGhfaXNfZW1wdHlfZGlyKHBhdGgucHRyKSkKKwkJZ290byBleGl0OworCWlmICgoZXJyb3IgPSBnaXRfcGF0aF9kaXJsb2FkKCZ3b3JrdHJlZXMsIHBhdGgucHRyLCBwYXRoLnNpemUsIDB4MCkpIDwgMCkKKwkJZ290byBleGl0OworCisJbGVuID0gcGF0aC5zaXplOworCisJZ2l0X3ZlY3Rvcl9mb3JlYWNoKCZ3b3JrdHJlZXMsIGksIHdvcmt0cmVlKSB7CisJCWdpdF9idWZfdHJ1bmNhdGUoJnBhdGgsIGxlbik7CisJCWdpdF9idWZfcHV0cygmcGF0aCwgd29ya3RyZWUpOworCisJCWlmICghaXNfd29ya3RyZWVfZGlyKHBhdGgucHRyKSkgeworCQkJZ2l0X3ZlY3Rvcl9yZW1vdmUoJndvcmt0cmVlcywgaSk7CisJCQlnaXRfX2ZyZWUod29ya3RyZWUpOworCQl9CisJfQorCisJd3RzLT5zdHJpbmdzID0gKGNoYXIgKiopZ2l0X3ZlY3Rvcl9kZXRhY2goJnd0cy0+Y291bnQsIE5VTEwsICZ3b3JrdHJlZXMpOworCitleGl0OgorCWdpdF9idWZfZnJlZSgmcGF0aCk7CisKKwlyZXR1cm4gZXJyb3I7Cit9CisKK2NoYXIgKmdpdF93b3JrdHJlZV9fcmVhZF9saW5rKGNvbnN0IGNoYXIgKmJhc2UsIGNvbnN0IGNoYXIgKmZpbGUpCit7CisJZ2l0X2J1ZiBwYXRoID0gR0lUX0JVRl9JTklULCBidWYgPSBHSVRfQlVGX0lOSVQ7CisKKwlhc3NlcnQoYmFzZSAmJiBmaWxlKTsKKworCWlmIChnaXRfYnVmX2pvaW5wYXRoKCZwYXRoLCBiYXNlLCBmaWxlKSA8IDApCisJCWdvdG8gZXJyOworCWlmIChnaXRfZnV0aWxzX3JlYWRidWZmZXIoJmJ1ZiwgcGF0aC5wdHIpIDwgMCkKKwkJZ290byBlcnI7CisJZ2l0X2J1Zl9mcmVlKCZwYXRoKTsKKworCWdpdF9idWZfcnRyaW0oJmJ1Zik7CisKKwlpZiAoIWdpdF9wYXRoX2lzX3JlbGF0aXZlKGJ1Zi5wdHIpKQorCQlyZXR1cm4gZ2l0X2J1Zl9kZXRhY2goJmJ1Zik7CisKKwlpZiAoZ2l0X2J1Zl9zZXRzKCZwYXRoLCBiYXNlKSA8IDApCisJCWdvdG8gZXJyOworCWlmIChnaXRfcGF0aF9hcHBseV9yZWxhdGl2ZSgmcGF0aCwgYnVmLnB0cikgPCAwKQorCQlnb3RvIGVycjsKKwlnaXRfYnVmX2ZyZWUoJmJ1Zik7CisKKwlyZXR1cm4gZ2l0X2J1Zl9kZXRhY2goJnBhdGgpOworCitlcnI6CisJZ2l0X2J1Zl9mcmVlKCZidWYpOworCWdpdF9idWZfZnJlZSgmcGF0aCk7CisKKwlyZXR1cm4gTlVMTDsKK30KKworc3RhdGljIGludCB3cml0ZV93dGZpbGUoY29uc3QgY2hhciAqYmFzZSwgY29uc3QgY2hhciAqZmlsZSwgY29uc3QgZ2l0X2J1ZiAqYnVmKQoreworCWdpdF9idWYgcGF0aCA9IEdJVF9CVUZfSU5JVDsKKwlpbnQgZXJyOworCisJYXNzZXJ0KGJhc2UgJiYgZmlsZSAmJiBidWYpOworCisJaWYgKChlcnIgPSBnaXRfYnVmX2pvaW5wYXRoKCZwYXRoLCBiYXNlLCBmaWxlKSkgPCAwKQorCQlnb3RvIG91dDsKKworCWlmICgoZXJyID0gZ2l0X2Z1dGlsc193cml0ZWJ1ZmZlcihidWYsIHBhdGgucHRyLCBPX0NSRUFUfE9fRVhDTHxPX1dST05MWSwgMDY0NCkpIDwgMCkKKwkJZ290byBvdXQ7CisKK291dDoKKwlnaXRfYnVmX2ZyZWUoJnBhdGgpOworCisJcmV0dXJuIGVycjsKK30KKworc3RhdGljIGludCBvcGVuX3dvcmt0cmVlX2RpcihnaXRfd29ya3RyZWUgKipvdXQsIGNvbnN0IGNoYXIgKnBhcmVudCwgY29uc3QgY2hhciAqZGlyLCBjb25zdCBjaGFyICpuYW1lKQoreworCWdpdF9idWYgZ2l0ZGlyID0gR0lUX0JVRl9JTklUOworCWdpdF93b3JrdHJlZSAqd3QgPSBOVUxMOworCWludCBlcnJvciA9IDA7CisKKwlpZiAoIWlzX3dvcmt0cmVlX2RpcihkaXIpKSB7CisJCWVycm9yID0gLTE7CisJCWdvdG8gb3V0OworCX0KKworCWlmICgod3QgPSBnaXRfX2NhbGxvYygxLCBzaXplb2Yoc3RydWN0IGdpdF9yZXBvc2l0b3J5KSkpID09IE5VTEwpIHsKKwkJZXJyb3IgPSAtMTsKKwkJZ290byBvdXQ7CisJfQorCisJaWYgKCh3dC0+bmFtZSA9IGdpdF9fc3RyZHVwKG5hbWUpKSA9PSBOVUxMCisJICAgIHx8ICh3dC0+Y29tbW9uZGlyX3BhdGggPSBnaXRfd29ya3RyZWVfX3JlYWRfbGluayhkaXIsICJjb21tb25kaXIiKSkgPT0gTlVMTAorCSAgICB8fCAod3QtPmdpdGxpbmtfcGF0aCA9IGdpdF93b3JrdHJlZV9fcmVhZF9saW5rKGRpciwgImdpdGRpciIpKSA9PSBOVUxMCisJICAgIHx8ICh3dC0+cGFyZW50X3BhdGggPSBnaXRfX3N0cmR1cChwYXJlbnQpKSA9PSBOVUxMKSB7CisJCWVycm9yID0gLTE7CisJCWdvdG8gb3V0OworCX0KKworCWlmICgoZXJyb3IgPSBnaXRfcGF0aF9wcmV0dGlmeV9kaXIoJmdpdGRpciwgZGlyLCBOVUxMKSkgPCAwKQorCQlnb3RvIG91dDsKKwl3dC0+Z2l0ZGlyX3BhdGggPSBnaXRfYnVmX2RldGFjaCgmZ2l0ZGlyKTsKKworCXd0LT5sb2NrZWQgPSAhIWdpdF93b3JrdHJlZV9pc19sb2NrZWQoTlVMTCwgd3QpOworCisJKm91dCA9IHd0OworCitvdXQ6CisJaWYgKGVycm9yKQorCQlnaXRfd29ya3RyZWVfZnJlZSh3dCk7CisJZ2l0X2J1Zl9mcmVlKCZnaXRkaXIpOworCisJcmV0dXJuIGVycm9yOworfQorCitpbnQgZ2l0X3dvcmt0cmVlX2xvb2t1cChnaXRfd29ya3RyZWUgKipvdXQsIGdpdF9yZXBvc2l0b3J5ICpyZXBvLCBjb25zdCBjaGFyICpuYW1lKQoreworCWdpdF9idWYgcGF0aCA9IEdJVF9CVUZfSU5JVDsKKwlnaXRfd29ya3RyZWUgKnd0ID0gTlVMTDsKKwlpbnQgZXJyb3I7CisKKwlhc3NlcnQocmVwbyAmJiBuYW1lKTsKKworCSpvdXQgPSBOVUxMOworCisJaWYgKChlcnJvciA9IGdpdF9idWZfcHJpbnRmKCZwYXRoLCAiJXMvd29ya3RyZWVzLyVzIiwgcmVwby0+Y29tbW9uZGlyLCBuYW1lKSkgPCAwKQorCQlnb3RvIG91dDsKKworCWlmICgoZXJyb3IgPSAob3Blbl93b3JrdHJlZV9kaXIob3V0LCBnaXRfcmVwb3NpdG9yeV93b3JrZGlyKHJlcG8pLCBwYXRoLnB0ciwgbmFtZSkpKSA8IDApCisJCWdvdG8gb3V0OworCitvdXQ6CisJZ2l0X2J1Zl9mcmVlKCZwYXRoKTsKKworCWlmIChlcnJvcikKKwkJZ2l0X3dvcmt0cmVlX2ZyZWUod3QpOworCisJcmV0dXJuIGVycm9yOworfQorCitpbnQgZ2l0X3dvcmt0cmVlX29wZW5fZnJvbV9yZXBvc2l0b3J5KGdpdF93b3JrdHJlZSAqKm91dCwgZ2l0X3JlcG9zaXRvcnkgKnJlcG8pCit7CisJZ2l0X2J1ZiBwYXJlbnQgPSBHSVRfQlVGX0lOSVQ7CisJY29uc3QgY2hhciAqZ2l0ZGlyLCAqY29tbW9uZGlyOworCWNoYXIgKm5hbWUgPSBOVUxMOworCWludCBlcnJvciA9IDA7CisKKwlpZiAoIWdpdF9yZXBvc2l0b3J5X2lzX3dvcmt0cmVlKHJlcG8pKSB7CisJCWdpdGVycl9zZXQoR0lURVJSX1dPUktUUkVFLCAiY2Fubm90IG9wZW4gd29ya3RyZWUgb2YgYSBub24td29ya3RyZWUgcmVwbyIpOworCQllcnJvciA9IC0xOworCQlnb3RvIG91dDsKKwl9CisKKwlnaXRkaXIgPSBnaXRfcmVwb3NpdG9yeV9wYXRoKHJlcG8pOworCWNvbW1vbmRpciA9IGdpdF9yZXBvc2l0b3J5X2NvbW1vbmRpcihyZXBvKTsKKworCWlmICgoZXJyb3IgPSBnaXRfcGF0aF9wcmV0dGlmeV9kaXIoJnBhcmVudCwgIi4uIiwgY29tbW9uZGlyKSkgPCAwKQorCQlnb3RvIG91dDsKKworCS8qIFRoZSBuYW1lIGlzIGRlZmluZWQgYnkgdGhlIGxhc3QgY29tcG9uZW50IGluICcuZ2l0L3dvcmt0cmVlLyVzJyAqLworCW5hbWUgPSBnaXRfcGF0aF9iYXNlbmFtZShnaXRkaXIpOworCisJaWYgKChlcnJvciA9IG9wZW5fd29ya3RyZWVfZGlyKG91dCwgcGFyZW50LnB0ciwgZ2l0ZGlyLCBuYW1lKSkgPCAwKQorCQlnb3RvIG91dDsKKworb3V0OgorCWdpdF9fZnJlZShuYW1lKTsKKwlnaXRfYnVmX2ZyZWUoJnBhcmVudCk7CisKKwlyZXR1cm4gZXJyb3I7Cit9CisKK3ZvaWQgZ2l0X3dvcmt0cmVlX2ZyZWUoZ2l0X3dvcmt0cmVlICp3dCkKK3sKKwlpZiAoIXd0KQorCQlyZXR1cm47CisKKwlnaXRfX2ZyZWUod3QtPmNvbW1vbmRpcl9wYXRoKTsKKwlnaXRfX2ZyZWUod3QtPmdpdGxpbmtfcGF0aCk7CisJZ2l0X19mcmVlKHd0LT5naXRkaXJfcGF0aCk7CisJZ2l0X19mcmVlKHd0LT5wYXJlbnRfcGF0aCk7CisJZ2l0X19mcmVlKHd0LT5uYW1lKTsKKwlnaXRfX2ZyZWUod3QpOworfQorCitpbnQgZ2l0X3dvcmt0cmVlX3ZhbGlkYXRlKGNvbnN0IGdpdF93b3JrdHJlZSAqd3QpCit7CisJZ2l0X2J1ZiBidWYgPSBHSVRfQlVGX0lOSVQ7CisJaW50IGVyciA9IDA7CisKKwlhc3NlcnQod3QpOworCisJZ2l0X2J1Zl9wdXRzKCZidWYsIHd0LT5naXRkaXJfcGF0aCk7CisJaWYgKCFpc193b3JrdHJlZV9kaXIoYnVmLnB0cikpIHsKKwkJZ2l0ZXJyX3NldChHSVRFUlJfV09SS1RSRUUsCisJCQkiV29ya3RyZWUgZ2l0ZGlyICgnJXMnKSBpcyBub3QgdmFsaWQiLAorCQkJd3QtPmdpdGxpbmtfcGF0aCk7CisJCWVyciA9IC0xOworCQlnb3RvIG91dDsKKwl9CisKKwlpZiAoIWdpdF9wYXRoX2V4aXN0cyh3dC0+cGFyZW50X3BhdGgpKSB7CisJCWdpdGVycl9zZXQoR0lURVJSX1dPUktUUkVFLAorCQkJIldvcmt0cmVlIHBhcmVudCBkaXJlY3RvcnkgKCclcycpIGRvZXMgbm90IGV4aXN0ICIsCisJCQl3dC0+cGFyZW50X3BhdGgpOworCQllcnIgPSAtMjsKKwkJZ290byBvdXQ7CisJfQorCisJaWYgKCFnaXRfcGF0aF9leGlzdHMod3QtPmNvbW1vbmRpcl9wYXRoKSkgeworCQlnaXRlcnJfc2V0KEdJVEVSUl9XT1JLVFJFRSwKKwkJCSJXb3JrdHJlZSBjb21tb24gZGlyZWN0b3J5ICgnJXMnKSBkb2VzIG5vdCBleGlzdCAiLAorCQkJd3QtPmNvbW1vbmRpcl9wYXRoKTsKKwkJZXJyID0gLTM7CisJCWdvdG8gb3V0OworCX0KKworb3V0OgorCWdpdF9idWZfZnJlZSgmYnVmKTsKKworCXJldHVybiBlcnI7Cit9CisKK2ludCBnaXRfd29ya3RyZWVfYWRkX2luaXRfb3B0aW9ucyhnaXRfd29ya3RyZWVfYWRkX29wdGlvbnMgKm9wdHMsCisJdW5zaWduZWQgaW50IHZlcnNpb24pCit7CisJR0lUX0lOSVRfU1RSVUNUVVJFX0ZST01fVEVNUExBVEUob3B0cywgdmVyc2lvbiwKKwkJZ2l0X3dvcmt0cmVlX2FkZF9vcHRpb25zLCBHSVRfV09SS1RSRUVfQUREX09QVElPTlNfSU5JVCk7CisJcmV0dXJuIDA7Cit9CisKK2ludCBnaXRfd29ya3RyZWVfYWRkKGdpdF93b3JrdHJlZSAqKm91dCwgZ2l0X3JlcG9zaXRvcnkgKnJlcG8sCisJY29uc3QgY2hhciAqbmFtZSwgY29uc3QgY2hhciAqd29ya3RyZWUsCisJY29uc3QgZ2l0X3dvcmt0cmVlX2FkZF9vcHRpb25zICpvcHRzKQoreworCWdpdF9idWYgZ2l0ZGlyID0gR0lUX0JVRl9JTklULCB3ZGRpciA9IEdJVF9CVUZfSU5JVCwgYnVmID0gR0lUX0JVRl9JTklUOworCWdpdF9yZWZlcmVuY2UgKnJlZiA9IE5VTEwsICpoZWFkID0gTlVMTDsKKwlnaXRfY29tbWl0ICpjb21taXQgPSBOVUxMOworCWdpdF9yZXBvc2l0b3J5ICp3dCA9IE5VTEw7CisJZ2l0X2NoZWNrb3V0X29wdGlvbnMgY29vcHRzID0gR0lUX0NIRUNLT1VUX09QVElPTlNfSU5JVDsKKwlnaXRfd29ya3RyZWVfYWRkX29wdGlvbnMgd3RvcHRzID0gR0lUX1dPUktUUkVFX0FERF9PUFRJT05TX0lOSVQ7CisJaW50IGVycjsKKworCUdJVEVSUl9DSEVDS19WRVJTSU9OKAorCQlvcHRzLCBHSVRfV09SS1RSRUVfQUREX09QVElPTlNfVkVSU0lPTiwgImdpdF93b3JrdHJlZV9hZGRfb3B0aW9ucyIpOworCisJaWYgKG9wdHMpCisJCW1lbWNweSgmd3RvcHRzLCBvcHRzLCBzaXplb2Yod3RvcHRzKSk7CisKKwlhc3NlcnQob3V0ICYmIHJlcG8gJiYgbmFtZSAmJiB3b3JrdHJlZSk7CisKKwkqb3V0ID0gTlVMTDsKKworCS8qIENyZWF0ZSBnaXRkaXIgZGlyZWN0b3J5ICIuZ2l0L3dvcmt0cmVlcy88bmFtZT4iICovCisJaWYgKChlcnIgPSBnaXRfYnVmX2pvaW5wYXRoKCZnaXRkaXIsIHJlcG8tPmNvbW1vbmRpciwgIndvcmt0cmVlcyIpKSA8IDApCisJCWdvdG8gb3V0OworCWlmICghZ2l0X3BhdGhfZXhpc3RzKGdpdGRpci5wdHIpKQorCQlpZiAoKGVyciA9IGdpdF9mdXRpbHNfbWtkaXIoZ2l0ZGlyLnB0ciwgMDc1NSwgR0lUX01LRElSX0VYQ0wpKSA8IDApCisJCQlnb3RvIG91dDsKKwlpZiAoKGVyciA9IGdpdF9idWZfam9pbnBhdGgoJmdpdGRpciwgZ2l0ZGlyLnB0ciwgbmFtZSkpIDwgMCkKKwkJZ290byBvdXQ7CisJaWYgKChlcnIgPSBnaXRfZnV0aWxzX21rZGlyKGdpdGRpci5wdHIsIDA3NTUsIEdJVF9NS0RJUl9FWENMKSkgPCAwKQorCQlnb3RvIG91dDsKKwlpZiAoKGVyciA9IGdpdF9wYXRoX3ByZXR0aWZ5X2RpcigmZ2l0ZGlyLCBnaXRkaXIucHRyLCBOVUxMKSkgPCAwKQorCQlnb3RvIG91dDsKKworCS8qIENyZWF0ZSB3b3JrdHJlZSB3b3JrIGRpciAqLworCWlmICgoZXJyID0gZ2l0X2Z1dGlsc19ta2Rpcih3b3JrdHJlZSwgMDc1NSwgR0lUX01LRElSX0VYQ0wpKSA8IDApCisJCWdvdG8gb3V0OworCWlmICgoZXJyID0gZ2l0X3BhdGhfcHJldHRpZnlfZGlyKCZ3ZGRpciwgd29ya3RyZWUsIE5VTEwpKSA8IDApCisJCWdvdG8gb3V0OworCisJaWYgKHd0b3B0cy5sb2NrKSB7CisJCWludCBmZDsKKworCQlpZiAoKGVyciA9IGdpdF9idWZfam9pbnBhdGgoJmJ1ZiwgZ2l0ZGlyLnB0ciwgImxvY2tlZCIpKSA8IDApCisJCQlnb3RvIG91dDsKKworCQlpZiAoKGZkID0gcF9jcmVhdChidWYucHRyLCAwNjQ0KSkgPCAwKSB7CisJCQllcnIgPSBmZDsKKwkJCWdvdG8gb3V0OworCQl9CisKKwkJcF9jbG9zZShmZCk7CisJCWdpdF9idWZfY2xlYXIoJmJ1Zik7CisJfQorCisJLyogQ3JlYXRlIHdvcmt0cmVlIC5naXQgZmlsZSAqLworCWlmICgoZXJyID0gZ2l0X2J1Zl9wcmludGYoJmJ1ZiwgImdpdGRpcjogJXNcbiIsIGdpdGRpci5wdHIpKSA8IDApCisJCWdvdG8gb3V0OworCWlmICgoZXJyID0gd3JpdGVfd3RmaWxlKHdkZGlyLnB0ciwgIi5naXQiLCAmYnVmKSkgPCAwKQorCQlnb3RvIG91dDsKKworCS8qIENyZWF0ZSBnaXRkaXIgZmlsZXMgKi8KKwlpZiAoKGVyciA9IGdpdF9wYXRoX3ByZXR0aWZ5X2RpcigmYnVmLCByZXBvLT5jb21tb25kaXIsIE5VTEwpIDwgMCkKKwkgICAgfHwgKGVyciA9IGdpdF9idWZfcHV0YygmYnVmLCAnXG4nKSkgPCAwCisJICAgIHx8IChlcnIgPSB3cml0ZV93dGZpbGUoZ2l0ZGlyLnB0ciwgImNvbW1vbmRpciIsICZidWYpKSA8IDApCisJCWdvdG8gb3V0OworCWlmICgoZXJyID0gZ2l0X2J1Zl9qb2lucGF0aCgmYnVmLCB3ZGRpci5wdHIsICIuZ2l0IikpIDwgMAorCSAgICB8fCAoZXJyID0gZ2l0X2J1Zl9wdXRjKCZidWYsICdcbicpKSA8IDAKKwkgICAgfHwgKGVyciA9IHdyaXRlX3d0ZmlsZShnaXRkaXIucHRyLCAiZ2l0ZGlyIiwgJmJ1ZikpIDwgMCkKKwkJZ290byBvdXQ7CisKKwkvKiBDcmVhdGUgbmV3IGJyYW5jaCAqLworCWlmICgoZXJyID0gZ2l0X3JlcG9zaXRvcnlfaGVhZCgmaGVhZCwgcmVwbykpIDwgMCkKKwkJZ290byBvdXQ7CisJaWYgKChlcnIgPSBnaXRfY29tbWl0X2xvb2t1cCgmY29tbWl0LCByZXBvLCAmaGVhZC0+dGFyZ2V0Lm9pZCkpIDwgMCkKKwkJZ290byBvdXQ7CisJaWYgKChlcnIgPSBnaXRfYnJhbmNoX2NyZWF0ZSgmcmVmLCByZXBvLCBuYW1lLCBjb21taXQsIGZhbHNlKSkgPCAwKQorCQlnb3RvIG91dDsKKworCS8qIFNldCB3b3JrdHJlZSdzIEhFQUQgKi8KKwlpZiAoKGVyciA9IGdpdF9yZXBvc2l0b3J5X2NyZWF0ZV9oZWFkKGdpdGRpci5wdHIsIGdpdF9yZWZlcmVuY2VfbmFtZShyZWYpKSkgPCAwKQorCQlnb3RvIG91dDsKKwlpZiAoKGVyciA9IGdpdF9yZXBvc2l0b3J5X29wZW4oJnd0LCB3ZGRpci5wdHIpKSA8IDApCisJCWdvdG8gb3V0OworCisJLyogQ2hlY2tvdXQgd29ya3RyZWUncyBIRUFEICovCisJY29vcHRzLmNoZWNrb3V0X3N0cmF0ZWd5ID0gR0lUX0NIRUNLT1VUX0ZPUkNFOworCWlmICgoZXJyID0gZ2l0X2NoZWNrb3V0X2hlYWQod3QsICZjb29wdHMpKSA8IDApCisJCWdvdG8gb3V0OworCisJLyogTG9hZCByZXN1bHQgKi8KKwlpZiAoKGVyciA9IGdpdF93b3JrdHJlZV9sb29rdXAob3V0LCByZXBvLCBuYW1lKSkgPCAwKQorCQlnb3RvIG91dDsKKworb3V0OgorCWdpdF9idWZfZnJlZSgmZ2l0ZGlyKTsKKwlnaXRfYnVmX2ZyZWUoJndkZGlyKTsKKwlnaXRfYnVmX2ZyZWUoJmJ1Zik7CisJZ2l0X3JlZmVyZW5jZV9mcmVlKHJlZik7CisJZ2l0X3JlZmVyZW5jZV9mcmVlKGhlYWQpOworCWdpdF9jb21taXRfZnJlZShjb21taXQpOworCWdpdF9yZXBvc2l0b3J5X2ZyZWUod3QpOworCisJcmV0dXJuIGVycjsKK30KKworaW50IGdpdF93b3JrdHJlZV9sb2NrKGdpdF93b3JrdHJlZSAqd3QsIGNoYXIgKmNyZWFzb24pCit7CisJZ2l0X2J1ZiBidWYgPSBHSVRfQlVGX0lOSVQsIHBhdGggPSBHSVRfQlVGX0lOSVQ7CisJaW50IGVycjsKKworCWFzc2VydCh3dCk7CisKKwlpZiAoKGVyciA9IGdpdF93b3JrdHJlZV9pc19sb2NrZWQoTlVMTCwgd3QpKSA8IDApCisJCWdvdG8gb3V0OworCisJaWYgKChlcnIgPSBnaXRfYnVmX2pvaW5wYXRoKCZwYXRoLCB3dC0+Z2l0ZGlyX3BhdGgsICJsb2NrZWQiKSkgPCAwKQorCQlnb3RvIG91dDsKKworCWlmIChjcmVhc29uKQorCQlnaXRfYnVmX2F0dGFjaF9ub3Rvd25lZCgmYnVmLCBjcmVhc29uLCBzdHJsZW4oY3JlYXNvbikpOworCisJaWYgKChlcnIgPSBnaXRfZnV0aWxzX3dyaXRlYnVmZmVyKCZidWYsIHBhdGgucHRyLCBPX0NSRUFUfE9fRVhDTHxPX1dST05MWSwgMDY0NCkpIDwgMCkKKwkJZ290byBvdXQ7CisKKwl3dC0+bG9ja2VkID0gMTsKKworb3V0OgorCWdpdF9idWZfZnJlZSgmcGF0aCk7CisKKwlyZXR1cm4gZXJyOworfQorCitpbnQgZ2l0X3dvcmt0cmVlX3VubG9jayhnaXRfd29ya3RyZWUgKnd0KQoreworCWdpdF9idWYgcGF0aCA9IEdJVF9CVUZfSU5JVDsKKworCWFzc2VydCh3dCk7CisKKwlpZiAoIWdpdF93b3JrdHJlZV9pc19sb2NrZWQoTlVMTCwgd3QpKQorCQlyZXR1cm4gMDsKKworCWlmIChnaXRfYnVmX2pvaW5wYXRoKCZwYXRoLCB3dC0+Z2l0ZGlyX3BhdGgsICJsb2NrZWQiKSA8IDApCisJCXJldHVybiAtMTsKKworCWlmIChwX3VubGluayhwYXRoLnB0cikgIT0gMCkgeworCQlnaXRfYnVmX2ZyZWUoJnBhdGgpOworCQlyZXR1cm4gLTE7CisJfQorCisJd3QtPmxvY2tlZCA9IDA7CisKKwlnaXRfYnVmX2ZyZWUoJnBhdGgpOworCisJcmV0dXJuIDA7Cit9CisKK2ludCBnaXRfd29ya3RyZWVfaXNfbG9ja2VkKGdpdF9idWYgKnJlYXNvbiwgY29uc3QgZ2l0X3dvcmt0cmVlICp3dCkKK3sKKwlnaXRfYnVmIHBhdGggPSBHSVRfQlVGX0lOSVQ7CisJaW50IHJldDsKKworCWFzc2VydCh3dCk7CisKKwlpZiAocmVhc29uKQorCQlnaXRfYnVmX2NsZWFyKHJlYXNvbik7CisKKwlpZiAoKHJldCA9IGdpdF9idWZfam9pbnBhdGgoJnBhdGgsIHd0LT5naXRkaXJfcGF0aCwgImxvY2tlZCIpKSA8IDApCisJCWdvdG8gb3V0OworCWlmICgocmV0ID0gZ2l0X3BhdGhfZXhpc3RzKHBhdGgucHRyKSkgJiYgcmVhc29uKQorCQlnaXRfZnV0aWxzX3JlYWRidWZmZXIocmVhc29uLCBwYXRoLnB0cik7CisKK291dDoKKwlnaXRfYnVmX2ZyZWUoJnBhdGgpOworCisJcmV0dXJuIHJldDsKK30KKworaW50IGdpdF93b3JrdHJlZV9wcnVuZV9pbml0X29wdGlvbnMoCisJZ2l0X3dvcmt0cmVlX3BydW5lX29wdGlvbnMgKm9wdHMsCisJdW5zaWduZWQgaW50IHZlcnNpb24pCit7CisJR0lUX0lOSVRfU1RSVUNUVVJFX0ZST01fVEVNUExBVEUob3B0cywgdmVyc2lvbiwKKwkJZ2l0X3dvcmt0cmVlX3BydW5lX29wdGlvbnMsIEdJVF9XT1JLVFJFRV9QUlVORV9PUFRJT05TX0lOSVQpOworCXJldHVybiAwOworfQorCitpbnQgZ2l0X3dvcmt0cmVlX2lzX3BydW5hYmxlKGdpdF93b3JrdHJlZSAqd3QsCisJZ2l0X3dvcmt0cmVlX3BydW5lX29wdGlvbnMgKm9wdHMpCit7CisJZ2l0X2J1ZiByZWFzb24gPSBHSVRfQlVGX0lOSVQ7CisJZ2l0X3dvcmt0cmVlX3BydW5lX29wdGlvbnMgcG9wdHMgPSBHSVRfV09SS1RSRUVfUFJVTkVfT1BUSU9OU19JTklUOworCisJR0lURVJSX0NIRUNLX1ZFUlNJT04oCisJCW9wdHMsIEdJVF9XT1JLVFJFRV9QUlVORV9PUFRJT05TX1ZFUlNJT04sCisJCSJnaXRfd29ya3RyZWVfcHJ1bmVfb3B0aW9ucyIpOworCisJaWYgKG9wdHMpCisJCW1lbWNweSgmcG9wdHMsIG9wdHMsIHNpemVvZihwb3B0cykpOworCisJaWYgKChwb3B0cy5mbGFncyAmIEdJVF9XT1JLVFJFRV9QUlVORV9MT0NLRUQpID09IDAgJiYKKwkJZ2l0X3dvcmt0cmVlX2lzX2xvY2tlZCgmcmVhc29uLCB3dCkpCisJeworCQlpZiAoIXJlYXNvbi5zaXplKQorCQkJZ2l0X2J1Zl9hdHRhY2hfbm90b3duZWQoJnJlYXNvbiwgIm5vIHJlYXNvbiBnaXZlbiIsIDE1KTsKKwkJZ2l0ZXJyX3NldChHSVRFUlJfV09SS1RSRUUsICJOb3QgcHJ1bmluZyBsb2NrZWQgd29ya2luZyB0cmVlOiAnJXMnIiwgcmVhc29uLnB0cik7CisJCWdpdF9idWZfZnJlZSgmcmVhc29uKTsKKworCQlyZXR1cm4gMDsKKwl9CisKKwlpZiAoKHBvcHRzLmZsYWdzICYgR0lUX1dPUktUUkVFX1BSVU5FX1ZBTElEKSA9PSAwICYmCisJCWdpdF93b3JrdHJlZV92YWxpZGF0ZSh3dCkgPT0gMCkKKwl7CisJCWdpdGVycl9zZXQoR0lURVJSX1dPUktUUkVFLCAiTm90IHBydW5pbmcgdmFsaWQgd29ya2luZyB0cmVlIik7CisJCXJldHVybiAwOworCX0KKworCXJldHVybiAxOworfQorCitpbnQgZ2l0X3dvcmt0cmVlX3BydW5lKGdpdF93b3JrdHJlZSAqd3QsCisJZ2l0X3dvcmt0cmVlX3BydW5lX29wdGlvbnMgKm9wdHMpCit7CisJZ2l0X3dvcmt0cmVlX3BydW5lX29wdGlvbnMgcG9wdHMgPSBHSVRfV09SS1RSRUVfUFJVTkVfT1BUSU9OU19JTklUOworCWdpdF9idWYgcGF0aCA9IEdJVF9CVUZfSU5JVDsKKwljaGFyICp3dHBhdGg7CisJaW50IGVycjsKKworCUdJVEVSUl9DSEVDS19WRVJTSU9OKAorCQlvcHRzLCBHSVRfV09SS1RSRUVfUFJVTkVfT1BUSU9OU19WRVJTSU9OLAorCQkiZ2l0X3dvcmt0cmVlX3BydW5lX29wdGlvbnMiKTsKKworCWlmIChvcHRzKQorCQltZW1jcHkoJnBvcHRzLCBvcHRzLCBzaXplb2YocG9wdHMpKTsKKworCWlmICghZ2l0X3dvcmt0cmVlX2lzX3BydW5hYmxlKHd0LCAmcG9wdHMpKSB7CisJCWVyciA9IC0xOworCQlnb3RvIG91dDsKKwl9CisKKwkvKiBEZWxldGUgZ2l0ZGlyIGluIHBhcmVudCByZXBvc2l0b3J5ICovCisJaWYgKChlcnIgPSBnaXRfYnVmX3ByaW50ZigmcGF0aCwgIiVzL3dvcmt0cmVlcy8lcyIsIHd0LT5jb21tb25kaXJfcGF0aCwgd3QtPm5hbWUpKSA8IDApCisJCWdvdG8gb3V0OworCWlmICghZ2l0X3BhdGhfZXhpc3RzKHBhdGgucHRyKSkKKwl7CisJCWdpdGVycl9zZXQoR0lURVJSX1dPUktUUkVFLCAiV29ya3RyZWUgZ2l0ZGlyICclcycgZG9lcyBub3QgZXhpc3QiLCBwYXRoLnB0cik7CisJCWVyciA9IC0xOworCQlnb3RvIG91dDsKKwl9CisJaWYgKChlcnIgPSBnaXRfZnV0aWxzX3JtZGlyX3IocGF0aC5wdHIsIE5VTEwsIEdJVF9STURJUl9SRU1PVkVfRklMRVMpKSA8IDApCisJCWdvdG8gb3V0OworCisJLyogU2tpcCBkZWxldGlvbiBvZiB0aGUgYWN0dWFsIHdvcmtpbmcgdHJlZSBpZiBpdCBkb2VzCisJICogbm90IGV4aXN0IG9yIGRlbGV0aW9uIHdhcyBub3QgcmVxdWVzdGVkICovCisJaWYgKChwb3B0cy5mbGFncyAmIEdJVF9XT1JLVFJFRV9QUlVORV9XT1JLSU5HX1RSRUUpID09IDAgfHwKKwkJIWdpdF9wYXRoX2V4aXN0cyh3dC0+Z2l0bGlua19wYXRoKSkKKwl7CisJCWdvdG8gb3V0OworCX0KKworCWlmICgod3RwYXRoID0gZ2l0X3BhdGhfZGlybmFtZSh3dC0+Z2l0bGlua19wYXRoKSkgPT0gTlVMTCkKKwkJZ290byBvdXQ7CisJZ2l0X2J1Zl9hdHRhY2goJnBhdGgsIHd0cGF0aCwgMCk7CisJaWYgKCFnaXRfcGF0aF9leGlzdHMocGF0aC5wdHIpKQorCXsKKwkJZ2l0ZXJyX3NldChHSVRFUlJfV09SS1RSRUUsICJXb3JraW5nIHRyZWUgJyVzJyBkb2VzIG5vdCBleGlzdCIsIHBhdGgucHRyKTsKKwkJZXJyID0gLTE7CisJCWdvdG8gb3V0OworCX0KKwlpZiAoKGVyciA9IGdpdF9mdXRpbHNfcm1kaXJfcihwYXRoLnB0ciwgTlVMTCwgR0lUX1JNRElSX1JFTU9WRV9GSUxFUykpIDwgMCkKKwkJZ290byBvdXQ7CisKK291dDoKKwlnaXRfYnVmX2ZyZWUoJnBhdGgpOworCisJcmV0dXJuIGVycjsKK30KZGlmZiAtLWdpdCBhL3NyYy93b3JrdHJlZS5oIGIvc3JjL3dvcmt0cmVlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTdjMmU2NQotLS0gL2Rldi9udWxsCisrKyBiL3NyYy93b3JrdHJlZS5oCkBAIC0wLDAgKzEsMzUgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIHRoZSBsaWJnaXQyIGNvbnRyaWJ1dG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBUaGlzIGZpbGUgaXMgcGFydCBvZiBsaWJnaXQyLCBkaXN0cmlidXRlZCB1bmRlciB0aGUgR05VIEdQTCB2MiB3aXRoCisgKiBhIExpbmtpbmcgRXhjZXB0aW9uLiBGb3IgZnVsbCB0ZXJtcyBzZWUgdGhlIGluY2x1ZGVkIENPUFlJTkcgZmlsZS4KKyAqLworI2lmbmRlZiBJTkNMVURFX3dvcmt0cmVlX2hfXworI2RlZmluZSBJTkNMVURFX3dvcmt0cmVlX2hfXworCisjaW5jbHVkZSAiZ2l0Mi9jb21tb24uaCIKKyNpbmNsdWRlICJnaXQyL3dvcmt0cmVlLmgiCisKK3N0cnVjdCBnaXRfd29ya3RyZWUgeworCS8qIE5hbWUgb2YgdGhlIHdvcmtpbmcgdHJlZS4gVGhpcyBpcyB0aGUgbmFtZSBvZiB0aGUKKwkgKiBjb250YWluaW5nIGRpcmVjdG9yeSBpbiB0aGUgYCRQQVJFTlQvLmdpdC93b3JrdHJlZXMvYAorCSAqIGRpcmVjdG9yeS4gKi8KKwljaGFyICpuYW1lOworCisJLyogUGF0aCB0byB0aGUgLmdpdCBmaWxlIGluIHRoZSB3b3JraW5nIHRyZWUncyByZXBvc2l0b3J5ICovCisJY2hhciAqZ2l0bGlua19wYXRoOworCS8qIFBhdGggdG8gdGhlIC5naXQgZGlyZWN0b3J5IGluc2lkZSB0aGUgcGFyZW50J3MKKwkgKiB3b3JrdHJlZXMgZGlyZWN0b3J5ICovCisJY2hhciAqZ2l0ZGlyX3BhdGg7CisJLyogUGF0aCB0byB0aGUgY29tbW9uIGRpcmVjdG9yeSBjb250YWluZWQgaW4gdGhlIHBhcmVudAorCSAqIHJlcG9zaXRvcnkgKi8KKwljaGFyICpjb21tb25kaXJfcGF0aDsKKwkvKiBQYXRoIHRvIHRoZSBwYXJlbnQncyB3b3JraW5nIGRpcmVjdG9yeSAqLworCWNoYXIgKnBhcmVudF9wYXRoOworCisJaW50IGxvY2tlZDoxOworfTsKKworY2hhciAqZ2l0X3dvcmt0cmVlX19yZWFkX2xpbmsoY29uc3QgY2hhciAqYmFzZSwgY29uc3QgY2hhciAqZmlsZSk7CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvdGVzdHMvYXR0ci9pZ25vcmUuYyBiL3Rlc3RzL2F0dHIvaWdub3JlLmMKaW5kZXggZjFmZTFjNy4uYTA4OWVlNCAxMDA2NDQKLS0tIGEvdGVzdHMvYXR0ci9pZ25vcmUuYworKysgYi90ZXN0cy9hdHRyL2lnbm9yZS5jCkBAIC0yMSw4ICsyMSw4IEBACiB7CiAJaW50IGlzX2lnbm9yZWQgPSAwOwogCi0JY2xfZ2l0X3Bhc3NfKAotCQlnaXRfaWdub3JlX3BhdGhfaXNfaWdub3JlZCgmaXNfaWdub3JlZCwgZ19yZXBvLCBmaWxlcGF0aCksIGZpbGUsIGxpbmUpOworCWNsX2dpdF9leHBlY3QoCisJCWdpdF9pZ25vcmVfcGF0aF9pc19pZ25vcmVkKCZpc19pZ25vcmVkLCBnX3JlcG8sIGZpbGVwYXRoKSwgMCwgZmlsZSwgbGluZSk7CiAKIAljbGFyX19hc3NlcnRfZXF1YWwoCiAJCWZpbGUsIGxpbmUsICJleHBlY3RlZCAhPSBpc19pZ25vcmVkIiwgMSwgIiVkIiwKQEAgLTI5MSwzICsyOTEsMTUgQEAKIAlhc3NlcnRfaXNfaWdub3JlZCh0cnVlLCAic3ltbGluayIpOwogCWFzc2VydF9pc19pZ25vcmVkKHRydWUsICJsYWxhLy4uL3N5bWxpbmsiKTsKIH0KKwordm9pZCB0ZXN0X2F0dHJfaWdub3JlX190ZXN0KHZvaWQpCit7CisJY2xfZ2l0X3Jld3JpdGVmaWxlKCJhdHRyLy5naXRpZ25vcmUiLAorCQkiLyovXG4iCisJCSIhL3NyY1xuIik7CisJYXNzZXJ0X2lzX2lnbm9yZWQoZmFsc2UsICJzcmMvZm9vLmMiKTsKKwlhc3NlcnRfaXNfaWdub3JlZChmYWxzZSwgInNyYy9mb28vZm9vLmMiKTsKKwlhc3NlcnRfaXNfaWdub3JlZChmYWxzZSwgIlJFQURNRS5tZCIpOworCWFzc2VydF9pc19pZ25vcmVkKHRydWUsICJkaXN0L2Zvby5vIik7CisJYXNzZXJ0X2lzX2lnbm9yZWQodHJ1ZSwgImJpbi9mb28iKTsKK30KZGlmZiAtLWdpdCBhL3Rlc3RzL2NoZWNrb3V0L2hlYWQuYyBiL3Rlc3RzL2NoZWNrb3V0L2hlYWQuYwppbmRleCAwN2NjMWQyLi5kZWQ4NmRmIDEwMDY0NAotLS0gYS90ZXN0cy9jaGVja291dC9oZWFkLmMKKysrIGIvdGVzdHMvY2hlY2tvdXQvaGVhZC5jCkBAIC0zOCw3ICszOCw3IEBACiAJY2xfZ2l0X3Bhc3MoZ2l0X3JlcG9zaXRvcnlfaW5kZXgoJmluZGV4LCBnX3JlcG8pKTsKIAogCXBfbWtkaXIoInRlc3RyZXBvL25ld2RpciIsIDA3NzcpOwotICAgIGNsX2dpdF9ta2ZpbGUoInRlc3RyZXBvL25ld2Rpci9uZXdmaWxlLnR4dCIsICJuZXcgZmlsZVxuIik7CisJY2xfZ2l0X21rZmlsZSgidGVzdHJlcG8vbmV3ZGlyL25ld2ZpbGUudHh0IiwgIm5ldyBmaWxlXG4iKTsKIAogCWNsX2dpdF9wYXNzKGdpdF9pbmRleF9hZGRfYnlwYXRoKGluZGV4LCAibmV3ZGlyL25ld2ZpbGUudHh0IikpOwogCWNsX2dpdF9wYXNzKGdpdF9pbmRleF93cml0ZShpbmRleCkpOwpAQCAtNjAsMyArNjAsNzkgQEAKIAogCWdpdF9pbmRleF9mcmVlKGluZGV4KTsKIH0KKwordm9pZCB0ZXN0X2NoZWNrb3V0X2hlYWRfX2RvX25vdF9yZW1vdmVfdW50cmFja2VkX2ZpbGUodm9pZCkKK3sKKwlnaXRfY2hlY2tvdXRfb3B0aW9ucyBvcHRzID0gR0lUX0NIRUNLT1VUX09QVElPTlNfSU5JVDsKKwlnaXRfaW5kZXggKmluZGV4OworCisJY2xfZ2l0X3Bhc3MocF9ta2RpcigidGVzdHJlcG8vdHJhY2tlZCIsIDA3NTUpKTsKKwljbF9naXRfbWtmaWxlKCJ0ZXN0cmVwby90cmFja2VkL3RyYWNrZWQiLCAidHJhY2tlZFxuIik7CisJY2xfZ2l0X21rZmlsZSgidGVzdHJlcG8vdHJhY2tlZC91bnRyYWNrZWQiLCAidW50cmFja2VkXG4iKTsKKworCWNsX2dpdF9wYXNzKGdpdF9yZXBvc2l0b3J5X2luZGV4KCZpbmRleCwgZ19yZXBvKSk7CisJY2xfZ2l0X3Bhc3MoZ2l0X2luZGV4X2FkZF9ieXBhdGgoaW5kZXgsICJ0cmFja2VkL3RyYWNrZWQiKSk7CisJY2xfZ2l0X3Bhc3MoZ2l0X2luZGV4X3dyaXRlKGluZGV4KSk7CisKKwlnaXRfaW5kZXhfZnJlZShpbmRleCk7CisKKwlvcHRzLmNoZWNrb3V0X3N0cmF0ZWd5ID0gR0lUX0NIRUNLT1VUX0ZPUkNFOworCWNsX2dpdF9wYXNzKGdpdF9jaGVja291dF9oZWFkKGdfcmVwbywgJm9wdHMpKTsKKworCWNsX2Fzc2VydCghZ2l0X3BhdGhfaXNmaWxlKCJ0ZXN0cmVwby90cmFja2VkL3RyYWNrZWQiKSk7CisJY2xfYXNzZXJ0KGdpdF9wYXRoX2lzZmlsZSgidGVzdHJlcG8vdHJhY2tlZC91bnRyYWNrZWQiKSk7Cit9CisKK3ZvaWQgdGVzdF9jaGVja291dF9oZWFkX19kb19ub3RfcmVtb3ZlX3VudHJhY2tlZF9maWxlX2luX3N1YmRpcih2b2lkKQoreworCWdpdF9jaGVja291dF9vcHRpb25zIG9wdHMgPSBHSVRfQ0hFQ0tPVVRfT1BUSU9OU19JTklUOworCWdpdF9pbmRleCAqaW5kZXg7CisKKwljbF9naXRfcGFzcyhwX21rZGlyKCJ0ZXN0cmVwby90cmFja2VkIiwgMDc1NSkpOworCWNsX2dpdF9wYXNzKHBfbWtkaXIoInRlc3RyZXBvL3RyYWNrZWQvc3ViZGlyIiwgMDc1NSkpOworCWNsX2dpdF9ta2ZpbGUoInRlc3RyZXBvL3RyYWNrZWQvdHJhY2tlZCIsICJ0cmFja2VkXG4iKTsKKwljbF9naXRfbWtmaWxlKCJ0ZXN0cmVwby90cmFja2VkL3N1YmRpci90cmFja2VkIiwgInRyYWNrZWRcbiIpOworCWNsX2dpdF9ta2ZpbGUoInRlc3RyZXBvL3RyYWNrZWQvc3ViZGlyL3VudHJhY2tlZCIsICJ1bnRyYWNrZWRcbiIpOworCisJY2xfZ2l0X3Bhc3MoZ2l0X3JlcG9zaXRvcnlfaW5kZXgoJmluZGV4LCBnX3JlcG8pKTsKKwljbF9naXRfcGFzcyhnaXRfaW5kZXhfYWRkX2J5cGF0aChpbmRleCwgInRyYWNrZWQvdHJhY2tlZCIpKTsKKwljbF9naXRfcGFzcyhnaXRfaW5kZXhfYWRkX2J5cGF0aChpbmRleCwgInRyYWNrZWQvc3ViZGlyL3RyYWNrZWQiKSk7CisJY2xfZ2l0X3Bhc3MoZ2l0X2luZGV4X3dyaXRlKGluZGV4KSk7CisKKwlnaXRfaW5kZXhfZnJlZShpbmRleCk7CisKKwlvcHRzLmNoZWNrb3V0X3N0cmF0ZWd5ID0gR0lUX0NIRUNLT1VUX0ZPUkNFOworCWNsX2dpdF9wYXNzKGdpdF9jaGVja291dF9oZWFkKGdfcmVwbywgJm9wdHMpKTsKKworCWNsX2Fzc2VydCghZ2l0X3BhdGhfaXNmaWxlKCJ0ZXN0cmVwby90cmFja2VkL3RyYWNrZWQiKSk7CisJY2xfYXNzZXJ0KCFnaXRfcGF0aF9pc2ZpbGUoInRlc3RyZXBvL3RyYWNrZWQvc3ViZGlyL3RyYWNrZWQiKSk7CisJY2xfYXNzZXJ0KGdpdF9wYXRoX2lzZmlsZSgidGVzdHJlcG8vdHJhY2tlZC9zdWJkaXIvdW50cmFja2VkIikpOworfQorCit2b2lkIHRlc3RfY2hlY2tvdXRfaGVhZF9fZG9fcmVtb3ZlX3RyYWNrZWRfc3ViZGlyKHZvaWQpCit7CisJZ2l0X2NoZWNrb3V0X29wdGlvbnMgb3B0cyA9IEdJVF9DSEVDS09VVF9PUFRJT05TX0lOSVQ7CisJZ2l0X2luZGV4ICppbmRleDsKKworCWNsX2dpdF9wYXNzKHBfbWtkaXIoInRlc3RyZXBvL3N1YmRpciIsIDA3NTUpKTsKKwljbF9naXRfcGFzcyhwX21rZGlyKCJ0ZXN0cmVwby9zdWJkaXIvdHJhY2tlZCIsIDA3NTUpKTsKKwljbF9naXRfbWtmaWxlKCJ0ZXN0cmVwby9zdWJkaXIvdHJhY2tlZC1maWxlIiwgInRyYWNrZWRcbiIpOworCWNsX2dpdF9ta2ZpbGUoInRlc3RyZXBvL3N1YmRpci91bnRyYWNrZWQtZmlsZSIsICJ1bnRyYWNrZWRcbiIpOworCWNsX2dpdF9ta2ZpbGUoInRlc3RyZXBvL3N1YmRpci90cmFja2VkL3RyYWNrZWQxIiwgInRyYWNrZWRcbiIpOworCWNsX2dpdF9ta2ZpbGUoInRlc3RyZXBvL3N1YmRpci90cmFja2VkL3RyYWNrZWQyIiwgInRyYWNrZWRcbiIpOworCisJY2xfZ2l0X3Bhc3MoZ2l0X3JlcG9zaXRvcnlfaW5kZXgoJmluZGV4LCBnX3JlcG8pKTsKKwljbF9naXRfcGFzcyhnaXRfaW5kZXhfYWRkX2J5cGF0aChpbmRleCwgInN1YmRpci90cmFja2VkLWZpbGUiKSk7CisJY2xfZ2l0X3Bhc3MoZ2l0X2luZGV4X2FkZF9ieXBhdGgoaW5kZXgsICJzdWJkaXIvdHJhY2tlZC90cmFja2VkMSIpKTsKKwljbF9naXRfcGFzcyhnaXRfaW5kZXhfYWRkX2J5cGF0aChpbmRleCwgInN1YmRpci90cmFja2VkL3RyYWNrZWQyIikpOworCWNsX2dpdF9wYXNzKGdpdF9pbmRleF93cml0ZShpbmRleCkpOworCisJZ2l0X2luZGV4X2ZyZWUoaW5kZXgpOworCisJb3B0cy5jaGVja291dF9zdHJhdGVneSA9IEdJVF9DSEVDS09VVF9GT1JDRTsKKwljbF9naXRfcGFzcyhnaXRfY2hlY2tvdXRfaGVhZChnX3JlcG8sICZvcHRzKSk7CisKKwljbF9hc3NlcnQoIWdpdF9wYXRoX2lzZGlyKCJ0ZXN0cmVwby9zdWJkaXIvdHJhY2tlZCIpKTsKKwljbF9hc3NlcnQoIWdpdF9wYXRoX2lzZmlsZSgidGVzdHJlcG8vc3ViZGlyL3RyYWNrZWQtZmlsZSIpKTsKKwljbF9hc3NlcnQoZ2l0X3BhdGhfaXNmaWxlKCJ0ZXN0cmVwby9zdWJkaXIvdW50cmFja2VkLWZpbGUiKSk7Cit9CmRpZmYgLS1naXQgYS90ZXN0cy9jaGVja291dC90cmVlLmMgYi90ZXN0cy9jaGVja291dC90cmVlLmMKaW5kZXggYzk1ODFmZC4uYjNiODYwYyAxMDA2NDQKLS0tIGEvdGVzdHMvY2hlY2tvdXQvdHJlZS5jCisrKyBiL3Rlc3RzL2NoZWNrb3V0L3RyZWUuYwpAQCAtNDQxLDYgKzQ0MSw3IEBACiAJY2xfYXNzZXJ0KGdpdF9wYXRoX2V4aXN0cygidGVzdHJlcG8vbGlua190b19uZXcudHh0IikpOwogCWNsX2Fzc2VydChnaXRfcGF0aF9leGlzdHMoInRlc3RyZXBvL25ldy50eHQiKSk7CiAKKwlnaXRfb2JqZWN0X2ZyZWUoZ19vYmplY3QpOwogCWNsX2dpdF9wYXNzKGdpdF9yZXZwYXJzZV9zaW5nbGUoJmdfb2JqZWN0LCBnX3JlcG8sICI4NDk2MDcxYzFiNDZjODU0YjMxMTg1ZWE5Nzc0M2JlNmE4Nzc0NDc5IikpOwogCiAJZ19vcHRzLmNoZWNrb3V0X3N0cmF0ZWd5ID0KQEAgLTQ1NCwxMCArNDU1LDYgQEAKIAljbF9hc3NlcnQoIWdpdF9wYXRoX2V4aXN0cygidGVzdHJlcG8vYnJhbmNoX2ZpbGUudHh0IikpOwogCWNsX2Fzc2VydCghZ2l0X3BhdGhfZXhpc3RzKCJ0ZXN0cmVwby9saW5rX3RvX25ldy50eHQiKSk7CiAJY2xfYXNzZXJ0KGdpdF9wYXRoX2V4aXN0cygidGVzdHJlcG8vbmV3LnR4dCIpKTsKLQotCWdpdF9vYmplY3RfZnJlZShnX29iamVjdCk7Ci0JZ19vYmplY3QgPSBOVUxMOwotCiB9CiAKIHZvaWQgdGVzdF9jaGVja291dF90cmVlX19jYW5fZGlzYWJsZV9wYXR0ZXJuX21hdGNoKHZvaWQpCmRpZmYgLS1naXQgYS90ZXN0cy9jbGFyX2xpYmdpdDIuYyBiL3Rlc3RzL2NsYXJfbGliZ2l0Mi5jCmluZGV4IDMxNGQzNDQuLmJkMTBjMDAgMTAwNjQ0Ci0tLSBhL3Rlc3RzL2NsYXJfbGliZ2l0Mi5jCisrKyBiL3Rlc3RzL2NsYXJfbGliZ2l0Mi5jCkBAIC00LDEyICs0LDIwIEBACiAjaW5jbHVkZSAiZ2l0Mi9zeXMvcmVwb3NpdG9yeS5oIgogCiB2b2lkIGNsX2dpdF9yZXBvcnRfZmFpbHVyZSgKLQlpbnQgZXJyb3IsIGNvbnN0IGNoYXIgKmZpbGUsIGludCBsaW5lLCBjb25zdCBjaGFyICpmbmNhbGwpCisJaW50IGVycm9yLCBpbnQgZXhwZWN0ZWQsIGNvbnN0IGNoYXIgKmZpbGUsIGludCBsaW5lLCBjb25zdCBjaGFyICpmbmNhbGwpCiB7CiAJY2hhciBtc2dbNDA5Nl07CiAJY29uc3QgZ2l0X2Vycm9yICpsYXN0ID0gZ2l0ZXJyX2xhc3QoKTsKLQlwX3NucHJpbnRmKG1zZywgNDA5NiwgImVycm9yICVkIC0gJXMiLAotCQllcnJvciwgbGFzdCA/IGxhc3QtPm1lc3NhZ2UgOiAiPG5vIG1lc3NhZ2U+Iik7CisKKwlpZiAoZXhwZWN0ZWQpCisJCXBfc25wcmludGYobXNnLCA0MDk2LCAiZXJyb3IgJWQgKGV4cGVjdGVkICVkKSAtICVzIiwKKwkJCWVycm9yLCBleHBlY3RlZCwgbGFzdCA/IGxhc3QtPm1lc3NhZ2UgOiAiPG5vIG1lc3NhZ2U+Iik7CisJZWxzZSBpZiAoZXJyb3IgfHwgbGFzdCkKKwkJcF9zbnByaW50Zihtc2csIDQwOTYsICJlcnJvciAlZCAtICVzIiwKKwkJCWVycm9yLCBsYXN0ID8gbGFzdC0+bWVzc2FnZSA6ICI8bm8gbWVzc2FnZT4iKTsKKwllbHNlCisJCXBfc25wcmludGYobXNnLCA0MDk2LCAibm8gZXJyb3IsIGV4cGVjdGVkIG5vbi16ZXJvIHJldHVybiIpOworCiAJY2xhcl9fYXNzZXJ0KDAsIGZpbGUsIGxpbmUsIGZuY2FsbCwgbXNnLCAxKTsKIH0KIApkaWZmIC0tZ2l0IGEvdGVzdHMvY2xhcl9saWJnaXQyLmggYi90ZXN0cy9jbGFyX2xpYmdpdDIuaAppbmRleCBmYzA4YmJmLi5jNzJkMzdkIDEwMDY0NAotLS0gYS90ZXN0cy9jbGFyX2xpYmdpdDIuaAorKysgYi90ZXN0cy9jbGFyX2xpYmdpdDIuaApAQCAtMTIsMTMgKzEyLDE1IEBACiAgKgogICogVXNlIHRoaXMgd3JhcHBlciBhcm91bmQgYWxsIGBnaXRfYCBsaWJyYXJ5IGNhbGxzIHRoYXQgcmV0dXJuIGVycm9yIGNvZGVzIQogICovCi0jZGVmaW5lIGNsX2dpdF9wYXNzKGV4cHIpIGNsX2dpdF9wYXNzXygoZXhwciksIF9fRklMRV9fLCBfX0xJTkVfXykKKyNkZWZpbmUgY2xfZ2l0X3Bhc3MoZXhwcikgY2xfZ2l0X2V4cGVjdCgoZXhwciksIDAsIF9fRklMRV9fLCBfX0xJTkVfXykKIAotI2RlZmluZSBjbF9naXRfcGFzc18oZXhwciwgZmlsZSwgbGluZSkgZG8geyBcCisjZGVmaW5lIGNsX2dpdF9mYWlsX3dpdGgoZXJyb3IsIGV4cHIpIGNsX2dpdF9leHBlY3QoKGV4cHIpLCBlcnJvciwgX19GSUxFX18sIF9fTElORV9fKQorCisjZGVmaW5lIGNsX2dpdF9leHBlY3QoZXhwciwgZXhwZWN0ZWQsIGZpbGUsIGxpbmUpIGRvIHsgXAogCWludCBfbGcyX2Vycm9yOyBcCiAJZ2l0ZXJyX2NsZWFyKCk7IFwKLQlpZiAoKF9sZzJfZXJyb3IgPSAoZXhwcikpICE9IDApIFwKLQkJY2xfZ2l0X3JlcG9ydF9mYWlsdXJlKF9sZzJfZXJyb3IsIGZpbGUsIGxpbmUsICJGdW5jdGlvbiBjYWxsIGZhaWxlZDogIiAjZXhwcik7IFwKKwlpZiAoKF9sZzJfZXJyb3IgPSAoZXhwcikpICE9IGV4cGVjdGVkKSBcCisJCWNsX2dpdF9yZXBvcnRfZmFpbHVyZShfbGcyX2Vycm9yLCBleHBlY3RlZCwgZmlsZSwgbGluZSwgIkZ1bmN0aW9uIGNhbGwgZmFpbGVkOiAiICNleHByKTsgXAogCX0gd2hpbGUgKDApCiAKIC8qKgpAQCAtMjYsOSArMjgsMTEgQEAKICAqIGp1c3QgZm9yIGNvbnNpc3RlbmN5LiBVc2Ugd2l0aCBgZ2l0X2AgbGlicmFyeQogICogY2FsbHMgdGhhdCBhcmUgc3VwcG9zZWQgdG8gZmFpbCEKICAqLwotI2RlZmluZSBjbF9naXRfZmFpbChleHByKSBjbF9tdXN0X2ZhaWwoZXhwcikKLQotI2RlZmluZSBjbF9naXRfZmFpbF93aXRoKGV4cHIsIGVycm9yKSBjbF9hc3NlcnRfZXF1YWxfaShlcnJvcixleHByKQorI2RlZmluZSBjbF9naXRfZmFpbChleHByKSBkbyB7IFwKKwlnaXRlcnJfY2xlYXIoKTsgXAorCWlmICgoZXhwcikgPT0gMCkgXAorCQljbF9naXRfcmVwb3J0X2ZhaWx1cmUoMCwgMCwgX19GSUxFX18sIF9fTElORV9fLCAiRnVuY3Rpb24gY2FsbCBzdWNjZWVkZWQ6ICIgI2V4cHIpOyBcCisJfSB3aGlsZSAoMCkKIAogLyoqCiAgKiBMaWtlIGNsX2dpdF9wYXNzLCBvbmx5IGZvciBXaW4zMiBlcnJvciBjb2RlIGNvbnZlbnRpb25zCkBAIC0zNyw3ICs0MSw3IEBACiAJaW50IF93aW4zMl9yZXM7IFwKIAlpZiAoKF93aW4zMl9yZXMgPSAoZXhwcikpID09IDApIHsgXAogCQlnaXRlcnJfc2V0KEdJVEVSUl9PUywgIlJldHVybmVkOiAlZCwgc3lzdGVtIGVycm9yIGNvZGU6ICVkIiwgX3dpbjMyX3JlcywgR2V0TGFzdEVycm9yKCkpOyBcCi0JCWNsX2dpdF9yZXBvcnRfZmFpbHVyZShfd2luMzJfcmVzLCBfX0ZJTEVfXywgX19MSU5FX18sICJTeXN0ZW0gY2FsbCBmYWlsZWQ6ICIgI2V4cHIpOyBcCisJCWNsX2dpdF9yZXBvcnRfZmFpbHVyZShfd2luMzJfcmVzLCAwLCBfX0ZJTEVfXywgX19MSU5FX18sICJTeXN0ZW0gY2FsbCBmYWlsZWQ6ICIgI2V4cHIpOyBcCiAJfSBcCiAJfSB3aGlsZSgwKQogCkBAIC04Niw3ICs5MCw3IEBACiAJCWNsYXJfX2Fzc2VydCgwLCB0aHJlYWRlcnItPmZpbGUsIHRocmVhZGVyci0+bGluZSwgdGhyZWFkZXJyLT5leHByLCB0aHJlYWRlcnItPmVycm9yX21zZywgMSk7CiB9CiAKLXZvaWQgY2xfZ2l0X3JlcG9ydF9mYWlsdXJlKGludCwgY29uc3QgY2hhciAqLCBpbnQsIGNvbnN0IGNoYXIgKik7Cit2b2lkIGNsX2dpdF9yZXBvcnRfZmFpbHVyZShpbnQsIGludCwgY29uc3QgY2hhciAqLCBpbnQsIGNvbnN0IGNoYXIgKik7CiAKICNkZWZpbmUgY2xfYXNzZXJ0X2F0X2xpbmUoZXhwcixmaWxlLGxpbmUpIFwKIAljbGFyX19hc3NlcnQoKGV4cHIpICE9IDAsIGZpbGUsIGxpbmUsICJFeHByZXNzaW9uIGlzIG5vdCB0cnVlOiAiICNleHByLCBOVUxMLCAxKQpkaWZmIC0tZ2l0IGEvdGVzdHMvY2xvbmUvbG9jYWwuYyBiL3Rlc3RzL2Nsb25lL2xvY2FsLmMKaW5kZXggOTFhMGExYy4uN2Y1NGQwNSAxMDA2NDQKLS0tIGEvdGVzdHMvY2xvbmUvbG9jYWwuYworKysgYi90ZXN0cy9jbG9uZS9sb2NhbC5jCkBAIC0xNiw2ICsxNiw3IEBACiAJcmV0dXJuIGdpdF9idWZfcHJpbnRmKGJ1ZiwgImZpbGU6Ly8lcy8lcyIsIGhvc3QsIHBhdGgpOwogfQogCisjaWZkZWYgR0lUX1dJTjMyCiBzdGF0aWMgaW50IGdpdF9zdHlsZV91bmNfcGF0aChnaXRfYnVmICpidWYsIGNvbnN0IGNoYXIgKmhvc3QsIGNvbnN0IGNoYXIgKnBhdGgpCiB7CiAJZ2l0X2J1Zl9jbGVhcihidWYpOwpAQCAtNDksNiArNTAsNyBAQAogCiAJcmV0dXJuIDA7CiB9CisjZW5kaWYKIAogdm9pZCB0ZXN0X2Nsb25lX2xvY2FsX19zaG91bGRfY2xvbmVfbG9jYWwodm9pZCkKIHsKZGlmZiAtLWdpdCBhL3Rlc3RzL2NvbmZpZy9pbmNsdWRlLmMgYi90ZXN0cy9jb25maWcvaW5jbHVkZS5jCmluZGV4IDg4MmI4OWIuLjBhMDdjOWIgMTAwNjQ0Ci0tLSBhL3Rlc3RzL2NvbmZpZy9pbmNsdWRlLmMKKysrIGIvdGVzdHMvY29uZmlnL2luY2x1ZGUuYwpAQCAtMTA4LDYgKzEwOCwyNiBAQAogCWdpdF9jb25maWdfZnJlZShjZmcpOwogfQogCit2b2lkIHRlc3RfY29uZmlnX2luY2x1ZGVfX21pc3NpbmdfaG9tZWRpcih2b2lkKQoreworCWdpdF9jb25maWcgKmNmZzsKKwlnaXRfYnVmIGJ1ZiA9IEdJVF9CVUZfSU5JVDsKKworCWNsX2dpdF9wYXNzKGdpdF9saWJnaXQyX29wdHMoR0lUX09QVF9TRVRfU0VBUkNIX1BBVEgsIEdJVF9DT05GSUdfTEVWRUxfR0xPQkFMLCBjbF9maXh0dXJlKCJjb25maWciKSkpOworCWNsX2dpdF9ta2ZpbGUoImluY2x1ZGluZyIsICJbaW5jbHVkZV1cbnBhdGggPSB+Ly5ub25leGlzdGVudGZpbGVcbltmb29dXG5iYXIgPSBiYXoiKTsKKworCWdpdGVycl9jbGVhcigpOworCWNsX2dpdF9wYXNzKGdpdF9jb25maWdfb3Blbl9vbmRpc2soJmNmZywgImluY2x1ZGluZyIpKTsKKwljbF9hc3NlcnQoZ2l0ZXJyX2xhc3QoKSA9PSBOVUxMKTsKKwljbF9naXRfcGFzcyhnaXRfY29uZmlnX2dldF9zdHJpbmdfYnVmKCZidWYsIGNmZywgImZvby5iYXIiKSk7CisJY2xfYXNzZXJ0X2VxdWFsX3MoImJheiIsIGdpdF9idWZfY3N0cigmYnVmKSk7CisKKwlnaXRfYnVmX2ZyZWUoJmJ1Zik7CisJZ2l0X2NvbmZpZ19mcmVlKGNmZyk7CisKKwljbF9zYW5kYm94X3NldF9zZWFyY2hfcGF0aF9kZWZhdWx0cygpOworfQorCiAjZGVmaW5lIHJlcGxpY2F0ZTEwKHMpIHMgcyBzIHMgcyBzIHMgcyBzIHMKIHZvaWQgdGVzdF9jb25maWdfaW5jbHVkZV9fZGVwdGgyKHZvaWQpCiB7CmRpZmYgLS1naXQgYS90ZXN0cy9jb25maWcvcmVhZG9ubHkuYyBiL3Rlc3RzL2NvbmZpZy9yZWFkb25seS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmY0NWFiZGQKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9jb25maWcvcmVhZG9ubHkuYwpAQCAtMCwwICsxLDY0IEBACisjaW5jbHVkZSAiY2xhcl9saWJnaXQyLmgiCisjaW5jbHVkZSAiY29uZmlnX2ZpbGUuaCIKKyNpbmNsdWRlICJjb25maWcuaCIKKworc3RhdGljIGdpdF9jb25maWcgKmNmZzsKKwordm9pZCB0ZXN0X2NvbmZpZ19yZWFkb25seV9faW5pdGlhbGl6ZSh2b2lkKQoreworCWNsX2dpdF9wYXNzKGdpdF9jb25maWdfbmV3KCZjZmcpKTsKK30KKwordm9pZCB0ZXN0X2NvbmZpZ19yZWFkb25seV9fY2xlYW51cCh2b2lkKQoreworCWdpdF9jb25maWdfZnJlZShjZmcpOworCWNmZyA9IE5VTEw7Cit9CisKK3ZvaWQgdGVzdF9jb25maWdfcmVhZG9ubHlfX3dyaXRpbmdfdG9fcmVhZG9ubHlfZmFpbHModm9pZCkKK3sKKwlnaXRfY29uZmlnX2JhY2tlbmQgKmJhY2tlbmQ7CisKKwljbF9naXRfcGFzcyhnaXRfY29uZmlnX2ZpbGVfX29uZGlzaygmYmFja2VuZCwgImdsb2JhbCIpKTsKKwliYWNrZW5kLT5yZWFkb25seSA9IDE7CisJY2xfZ2l0X3Bhc3MoZ2l0X2NvbmZpZ19hZGRfYmFja2VuZChjZmcsIGJhY2tlbmQsIEdJVF9DT05GSUdfTEVWRUxfR0xPQkFMLCAwKSk7CisKKwljbF9naXRfZmFpbF93aXRoKEdJVF9FTk9URk9VTkQsIGdpdF9jb25maWdfc2V0X3N0cmluZyhjZmcsICJmb28uYmFyIiwgImJheiIpKTsKKwljbF9hc3NlcnQoIWdpdF9wYXRoX2V4aXN0cygiZ2xvYmFsIikpOworfQorCit2b2lkIHRlc3RfY29uZmlnX3JlYWRvbmx5X193cml0aW5nX3RvX2NmZ193aXRoX3J3X3ByZWNlZGVuY2Vfc3VjY2VlZHModm9pZCkKK3sKKwlnaXRfY29uZmlnX2JhY2tlbmQgKmJhY2tlbmQ7CisKKwljbF9naXRfcGFzcyhnaXRfY29uZmlnX2ZpbGVfX29uZGlzaygmYmFja2VuZCwgImdsb2JhbCIpKTsKKwliYWNrZW5kLT5yZWFkb25seSA9IDE7CisJY2xfZ2l0X3Bhc3MoZ2l0X2NvbmZpZ19hZGRfYmFja2VuZChjZmcsIGJhY2tlbmQsIEdJVF9DT05GSUdfTEVWRUxfR0xPQkFMLCAwKSk7CisKKwljbF9naXRfcGFzcyhnaXRfY29uZmlnX2ZpbGVfX29uZGlzaygmYmFja2VuZCwgImxvY2FsIikpOworCWNsX2dpdF9wYXNzKGdpdF9jb25maWdfYWRkX2JhY2tlbmQoY2ZnLCBiYWNrZW5kLCBHSVRfQ09ORklHX0xFVkVMX0xPQ0FMLCAwKSk7CisKKwljbF9naXRfcGFzcyhnaXRfY29uZmlnX3NldF9zdHJpbmcoY2ZnLCAiZm9vLmJhciIsICJiYXoiKSk7CisKKwljbF9hc3NlcnQoZ2l0X3BhdGhfZXhpc3RzKCJsb2NhbCIpKTsKKwljbF9hc3NlcnQoIWdpdF9wYXRoX2V4aXN0cygiZ2xvYmFsIikpOworCWNsX2dpdF9wYXNzKHBfdW5saW5rKCJsb2NhbCIpKTsKK30KKwordm9pZCB0ZXN0X2NvbmZpZ19yZWFkb25seV9fd3JpdGluZ190b19jZmdfd2l0aF9yb19wcmVjZWRlbmNlX3N1Y2NlZWRzKHZvaWQpCit7CisJZ2l0X2NvbmZpZ19iYWNrZW5kICpiYWNrZW5kOworCisJY2xfZ2l0X3Bhc3MoZ2l0X2NvbmZpZ19maWxlX19vbmRpc2soJmJhY2tlbmQsICJsb2NhbCIpKTsKKwliYWNrZW5kLT5yZWFkb25seSA9IDE7CisJY2xfZ2l0X3Bhc3MoZ2l0X2NvbmZpZ19hZGRfYmFja2VuZChjZmcsIGJhY2tlbmQsIEdJVF9DT05GSUdfTEVWRUxfTE9DQUwsIDApKTsKKworCWNsX2dpdF9wYXNzKGdpdF9jb25maWdfZmlsZV9fb25kaXNrKCZiYWNrZW5kLCAiZ2xvYmFsIikpOworCWNsX2dpdF9wYXNzKGdpdF9jb25maWdfYWRkX2JhY2tlbmQoY2ZnLCBiYWNrZW5kLCBHSVRfQ09ORklHX0xFVkVMX0dMT0JBTCwgMCkpOworCisJY2xfZ2l0X3Bhc3MoZ2l0X2NvbmZpZ19zZXRfc3RyaW5nKGNmZywgImZvby5iYXIiLCAiYmF6IikpOworCisJY2xfYXNzZXJ0KCFnaXRfcGF0aF9leGlzdHMoImxvY2FsIikpOworCWNsX2Fzc2VydChnaXRfcGF0aF9leGlzdHMoImdsb2JhbCIpKTsKKwljbF9naXRfcGFzcyhwX3VubGluaygiZ2xvYmFsIikpOworfQpkaWZmIC0tZ2l0IGEvdGVzdHMvY29yZS9lbmNvZGluZy5jIGIvdGVzdHMvY29yZS9lbmNvZGluZy5jCmluZGV4IDdkOTE3MjAuLmE2NzdhZmUgMTAwNjQ0Ci0tLSBhL3Rlc3RzL2NvcmUvZW5jb2RpbmcuYworKysgYi90ZXN0cy9jb3JlL2VuY29kaW5nLmMKQEAgLTI5LDYgKzI5LDkgQEAKIAljbF9hc3NlcnQoZ2l0X2VuY29kZV92YXJpbnQoYnVmLCAxMDAsIDY1KSA9PSAxKTsKIAljbF9hc3NlcnQoYnVmWzBdID09ICdBJyk7CiAKKwljbF9hc3NlcnQoZ2l0X2VuY29kZV92YXJpbnQoYnVmLCAxLCAxKSA9PSAxKTsKKwljbF9hc3NlcnQoIW1lbWNtcChidWYsICJceDAxIiwgMSkpOworCiAJY2xfYXNzZXJ0KGdpdF9lbmNvZGVfdmFyaW50KGJ1ZiwgMTAwLCAyNjc4Njk2NTYpID09IDQpOwogCWNsX2Fzc2VydCghbWVtY21wKGJ1ZiwgIlx4ZmVceGRjXHhiYVgiLCA0KSk7CiAKZGlmZiAtLWdpdCBhL3Rlc3RzL2NvcmUvZmVhdHVyZXMuYyBiL3Rlc3RzL2NvcmUvZmVhdHVyZXMuYwppbmRleCBjZjVlMTkwLi43YjI4Y2MwIDEwMDY0NAotLS0gYS90ZXN0cy9jb3JlL2ZlYXR1cmVzLmMKKysrIGIvdGVzdHMvY29yZS9mZWF0dXJlcy5jCkBAIC0xNyw3ICsxNyw5IEBACiAJY2xfYXNzZXJ0KChjYXBzICYgR0lUX0ZFQVRVUkVfVEhSRUFEUykgPT0gMCk7CiAjZW5kaWYKIAorI2lmZGVmIEdJVF9IVFRQUwogCWNsX2Fzc2VydCgoY2FwcyAmIEdJVF9GRUFUVVJFX0hUVFBTKSAhPSAwKTsKKyNlbmRpZgogCiAjaWYgZGVmaW5lZChHSVRfU1NIKQogCWNsX2Fzc2VydCgoY2FwcyAmIEdJVF9GRUFUVVJFX1NTSCkgIT0gMCk7CmRpZmYgLS1naXQgYS90ZXN0cy9jb3JlL2ZpbGVidWYuYyBiL3Rlc3RzL2NvcmUvZmlsZWJ1Zi5jCmluZGV4IDA0YTM4MGIuLmVmN2FjNmIgMTAwNjQ0Ci0tLSBhL3Rlc3RzL2NvcmUvZmlsZWJ1Zi5jCisrKyBiL3Rlc3RzL2NvcmUvZmlsZWJ1Zi5jCkBAIC0xODcsNiArMTg3LDM1IEBACiAJY2xfZ2l0X3Bhc3MoZ2l0X2Z1dGlsc19ybWRpcl9yKGRpciwgTlVMTCwgR0lUX1JNRElSX1JFTU9WRV9GSUxFUykpOwogfQogCit2b2lkIHRlc3RfY29yZV9maWxlYnVmX19zeW1saW5rX2ZvbGxvd19hYnNvbHV0ZV9wYXRocyh2b2lkKQoreworCWdpdF9maWxlYnVmIGZpbGUgPSBHSVRfRklMRUJVRl9JTklUOworCWdpdF9idWYgc291cmNlID0gR0lUX0JVRl9JTklULCB0YXJnZXQgPSBHSVRfQlVGX0lOSVQ7CisKKyNpZmRlZiBHSVRfV0lOMzIKKwljbF9za2lwKCk7CisjZW5kaWYKKworCWNsX2dpdF9wYXNzKGdpdF9idWZfam9pbnBhdGgoJnNvdXJjZSwgY2xhcl9zYW5kYm94X3BhdGgoKSwgImxpbmtkaXIvbGluayIpKTsKKwljbF9naXRfcGFzcyhnaXRfYnVmX2pvaW5wYXRoKCZ0YXJnZXQsIGNsYXJfc2FuZGJveF9wYXRoKCksICJsaW5rZGlyL3RhcmdldCIpKTsKKwljbF9naXRfcGFzcyhwX21rZGlyKCJsaW5rZGlyIiwgMDc3NykpOworCWNsX2dpdF9wYXNzKHBfc3ltbGluayh0YXJnZXQucHRyLCBzb3VyY2UucHRyKSk7CisKKwljbF9naXRfcGFzcyhnaXRfZmlsZWJ1Zl9vcGVuKCZmaWxlLCBzb3VyY2UucHRyLCAwLCAwNjY2KSk7CisJY2xfZ2l0X3Bhc3MoZ2l0X2ZpbGVidWZfcHJpbnRmKCZmaWxlLCAiJXNcbiIsICJsaWJnaXQyIHJvY2tzIikpOworCisJY2xfYXNzZXJ0X2VxdWFsX2kodHJ1ZSwgZ2l0X3BhdGhfZXhpc3RzKCJsaW5rZGlyL3RhcmdldC5sb2NrIikpOworCisJY2xfZ2l0X3Bhc3MoZ2l0X2ZpbGVidWZfY29tbWl0KCZmaWxlKSk7CisJY2xfYXNzZXJ0X2VxdWFsX2kodHJ1ZSwgZ2l0X3BhdGhfZXhpc3RzKCJsaW5rZGlyL3RhcmdldCIpKTsKKworCWdpdF9maWxlYnVmX2NsZWFudXAoJmZpbGUpOworCWdpdF9idWZfZnJlZSgmc291cmNlKTsKKwlnaXRfYnVmX2ZyZWUoJnRhcmdldCk7CisKKwljbF9naXRfcGFzcyhnaXRfZnV0aWxzX3JtZGlyX3IoImxpbmtkaXIiLCBOVUxMLCBHSVRfUk1ESVJfUkVNT1ZFX0ZJTEVTKSk7Cit9CisKIHZvaWQgdGVzdF9jb3JlX2ZpbGVidWZfX3N5bWxpbmtfZGVwdGgodm9pZCkKIHsKIAlnaXRfZmlsZWJ1ZiBmaWxlID0gR0lUX0ZJTEVCVUZfSU5JVDsKZGlmZiAtLWdpdCBhL3Rlc3RzL2NvcmUvb2lkbWFwLmMgYi90ZXN0cy9jb3JlL29pZG1hcC5jCmluZGV4IDU1NmE2Y2EuLjYxN2RhNTQgMTAwNjQ0Ci0tLSBhL3Rlc3RzL2NvcmUvb2lkbWFwLmMKKysrIGIvdGVzdHMvY29yZS9vaWRtYXAuYwpAQCAtMSw4ICsxLDYgQEAKICNpbmNsdWRlICJjbGFyX2xpYmdpdDIuaCIKICNpbmNsdWRlICJvaWRtYXAuaCIKIAotR0lUX19VU0VfT0lETUFQCi0KIHR5cGVkZWYgc3RydWN0IHsKIAlnaXRfb2lkIG9pZDsKIAlzaXplX3QgZXh0cmE7CkBAIC0zMywyMyArMzEsMjMgQEAKIAkJa2hpdGVyX3QgcG9zOwogCQlpbnQgcmV0OwogCi0JCXBvcyA9IGtoX2dldChvaWQsIG1hcCwgJml0ZW1zW2ldLm9pZCk7Ci0JCWNsX2Fzc2VydChwb3MgPT0ga2hfZW5kKG1hcCkpOworCQlwb3MgPSBnaXRfb2lkbWFwX2xvb2t1cF9pbmRleChtYXAsICZpdGVtc1tpXS5vaWQpOworCQljbF9hc3NlcnQoIWdpdF9vaWRtYXBfdmFsaWRfaW5kZXgobWFwLCBwb3MpKTsKIAotCQlwb3MgPSBraF9wdXQob2lkLCBtYXAsICZpdGVtc1tpXS5vaWQsICZyZXQpOworCQlwb3MgPSBnaXRfb2lkbWFwX3B1dChtYXAsICZpdGVtc1tpXS5vaWQsICZyZXQpOwogCQljbF9hc3NlcnQocmV0ICE9IDApOwogCi0JCWtoX3ZhbChtYXAsIHBvcykgPSAmaXRlbXNbaV07CisJCWdpdF9vaWRtYXBfc2V0X3ZhbHVlX2F0KG1hcCwgcG9zLCAmaXRlbXNbaV0pOwogCX0KIAogCiAJZm9yIChpID0gMDsgaSA8IE5JVEVNUzsgKytpKSB7CiAJCWtoaXRlcl90IHBvczsKIAotCQlwb3MgPSBraF9nZXQob2lkLCBtYXAsICZpdGVtc1tpXS5vaWQpOwotCQljbF9hc3NlcnQocG9zICE9IGtoX2VuZChtYXApKTsKKwkJcG9zID0gZ2l0X29pZG1hcF9sb29rdXBfaW5kZXgobWFwLCAmaXRlbXNbaV0ub2lkKTsKKwkJY2xfYXNzZXJ0KGdpdF9vaWRtYXBfdmFsaWRfaW5kZXgobWFwLCBwb3MpKTsKIAotCQljbF9hc3NlcnRfZXF1YWxfcChraF92YWwobWFwLCBwb3MpLCAmaXRlbXNbaV0pOworCQljbF9hc3NlcnRfZXF1YWxfcChnaXRfb2lkbWFwX3ZhbHVlX2F0KG1hcCwgcG9zKSwgJml0ZW1zW2ldKTsKIAl9CiAKIAlnaXRfb2lkbWFwX2ZyZWUobWFwKTsKQEAgLTg3LDIzICs4NSwyMyBAQAogCQlraGl0ZXJfdCBwb3M7CiAJCWludCByZXQ7CiAKLQkJcG9zID0ga2hfZ2V0KG9pZCwgbWFwLCAmaXRlbXNbaV0ub2lkKTsKLQkJY2xfYXNzZXJ0KHBvcyA9PSBraF9lbmQobWFwKSk7CisJCXBvcyA9IGdpdF9vaWRtYXBfbG9va3VwX2luZGV4KG1hcCwgJml0ZW1zW2ldLm9pZCk7CisJCWNsX2Fzc2VydCghZ2l0X29pZG1hcF92YWxpZF9pbmRleChtYXAsIHBvcykpOwogCi0JCXBvcyA9IGtoX3B1dChvaWQsIG1hcCwgJml0ZW1zW2ldLm9pZCwgJnJldCk7CisJCXBvcyA9IGdpdF9vaWRtYXBfcHV0KG1hcCwgJml0ZW1zW2ldLm9pZCwgJnJldCk7CiAJCWNsX2Fzc2VydChyZXQgIT0gMCk7CiAKLQkJa2hfdmFsKG1hcCwgcG9zKSA9ICZpdGVtc1tpXTsKKwkJZ2l0X29pZG1hcF9zZXRfdmFsdWVfYXQobWFwLCBwb3MsICZpdGVtc1tpXSk7CiAJfQogCiAKIAlmb3IgKGkgPSAwOyBpIDwgTklURU1TOyArK2kpIHsKIAkJa2hpdGVyX3QgcG9zOwogCi0JCXBvcyA9IGtoX2dldChvaWQsIG1hcCwgJml0ZW1zW2ldLm9pZCk7Ci0JCWNsX2Fzc2VydChwb3MgIT0ga2hfZW5kKG1hcCkpOworCQlwb3MgPSBnaXRfb2lkbWFwX2xvb2t1cF9pbmRleChtYXAsICZpdGVtc1tpXS5vaWQpOworCQljbF9hc3NlcnQoZ2l0X29pZG1hcF92YWxpZF9pbmRleChtYXAsIHBvcykpOwogCi0JCWNsX2Fzc2VydF9lcXVhbF9wKGtoX3ZhbChtYXAsIHBvcyksICZpdGVtc1tpXSk7CisJCWNsX2Fzc2VydF9lcXVhbF9wKGdpdF9vaWRtYXBfdmFsdWVfYXQobWFwLCBwb3MpLCAmaXRlbXNbaV0pOwogCX0KIAogCWdpdF9vaWRtYXBfZnJlZShtYXApOwpkaWZmIC0tZ2l0IGEvdGVzdHMvY29yZS9wYXRoLmMgYi90ZXN0cy9jb3JlL3BhdGguYwppbmRleCA3MWM2ZWRhLi5mZWZlMmFlIDEwMDY0NAotLS0gYS90ZXN0cy9jb3JlL3BhdGguYworKysgYi90ZXN0cy9jb3JlL3BhdGguYwpAQCAtODksOCArODksMTIgQEAKIAljaGVja19kaXJuYW1lKFJFUDE2KCIvYWJjIiksIFJFUDE1KCIvYWJjIikpOwogCiAjaWZkZWYgR0lUX1dJTjMyCisJY2hlY2tfZGlybmFtZSgiQzovIiwgIkM6LyIpOworCWNoZWNrX2Rpcm5hbWUoIkM6IiwgIkM6LyIpOwogCWNoZWNrX2Rpcm5hbWUoIkM6L3BhdGgvIiwgIkM6LyIpOwogCWNoZWNrX2Rpcm5hbWUoIkM6L3BhdGgiLCAiQzovIik7CisJY2hlY2tfZGlybmFtZSgiLy9jb21wdXRlcm5hbWUvIiwgIi8vY29tcHV0ZXJuYW1lLyIpOworCWNoZWNrX2Rpcm5hbWUoIi8vY29tcHV0ZXJuYW1lIiwgIi8vY29tcHV0ZXJuYW1lLyIpOwogCWNoZWNrX2Rpcm5hbWUoIi8vY29tcHV0ZXJuYW1lL3BhdGgvIiwgIi8vY29tcHV0ZXJuYW1lLyIpOwogCWNoZWNrX2Rpcm5hbWUoIi8vY29tcHV0ZXJuYW1lL3BhdGgiLCAiLy9jb21wdXRlcm5hbWUvIik7CiAJY2hlY2tfZGlybmFtZSgiLy9jb21wdXRlcm5hbWUvc3ViL3BhdGgvIiwgIi8vY29tcHV0ZXJuYW1lL3N1YiIpOwpkaWZmIC0tZ2l0IGEvdGVzdHMvY29yZS9wb3NpeC5jIGIvdGVzdHMvY29yZS9wb3NpeC5jCmluZGV4IDI2YWUzNjAuLjE3MjQ2MjAgMTAwNjQ0Ci0tLSBhL3Rlc3RzL2NvcmUvcG9zaXguYworKysgYi90ZXN0cy9jb3JlL3Bvc2l4LmMKQEAgLTk0LDEwICs5NCw3IEBACiAJY2xfYXNzZXJ0KHBfaW5ldF9wdG9uKEFGX0lORVQsICIxMC5mb28uYmFyLjEiLCAmYWRkcikgPT0gMCk7CiAKIAkvKiBUZXN0IHVuc3VwcG9ydGVkIGFkZHJlc3MgZmFtaWxpZXMgKi8KLQljbF9naXRfZmFpbChwX2luZXRfcHRvbigxMiwgIjUyLjQ3MiIsIE5VTEwpKTsgLyogQUZfREVDbmV0ICovCi0JY2xfYXNzZXJ0X2VxdWFsX2koRUFGTk9TVVBQT1JULCBlcnJubyk7Ci0KLQljbF9naXRfZmFpbChwX2luZXRfcHRvbig1LCAiMzE1LjEyNCIsIE5VTEwpKTsgLyogQUZfQ0hBT1MgKi8KKwljbF9naXRfZmFpbChwX2luZXRfcHRvbihJTlRfTUFYLTEsICI1Mi40NzIiLCAmYWRkcikpOwogCWNsX2Fzc2VydF9lcXVhbF9pKEVBRk5PU1VQUE9SVCwgZXJybm8pOwogfQogCmRpZmYgLS1naXQgYS90ZXN0cy9jb3JlL3NoYTEuYyBiL3Rlc3RzL2NvcmUvc2hhMS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmM1YjIwZjYKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9jb3JlL3NoYTEuYwpAQCAtMCwwICsxLDY0IEBACisjaW5jbHVkZSAiY2xhcl9saWJnaXQyLmgiCisjaW5jbHVkZSAiaGFzaC5oIgorCisjZGVmaW5lIEZJWFRVUkVfRElSICJzaGExIgorCit2b2lkIHRlc3RfY29yZV9zaGExX19pbml0aWFsaXplKHZvaWQpCit7CisJY2xfZml4dHVyZV9zYW5kYm94KEZJWFRVUkVfRElSKTsKK30KKwordm9pZCB0ZXN0X2NvcmVfc2hhMV9fY2xlYW51cCh2b2lkKQoreworCWNsX2ZpeHR1cmVfY2xlYW51cChGSVhUVVJFX0RJUik7Cit9CisKK3N0YXRpYyBpbnQgc2hhMV9maWxlKGdpdF9vaWQgKm9pZCwgY29uc3QgY2hhciAqZmlsZW5hbWUpCit7CisJZ2l0X2hhc2hfY3R4IGN0eDsKKwljaGFyIGJ1ZlsyMDQ4XTsKKwlpbnQgZmQsIHJldDsKKwlzc2l6ZV90IHJlYWRfbGVuOworCisJZmQgPSBwX29wZW4oZmlsZW5hbWUsIE9fUkRPTkxZKTsKKwljbF9hc3NlcnQoZmQgPj0gMCk7CisKKwljbF9naXRfcGFzcyhnaXRfaGFzaF9jdHhfaW5pdCgmY3R4KSk7CisKKwl3aGlsZSAoKHJlYWRfbGVuID0gcF9yZWFkKGZkLCBidWYsIDIwNDgpKSA+IDApCisJCWNsX2dpdF9wYXNzKGdpdF9oYXNoX3VwZGF0ZSgmY3R4LCBidWYsIChzaXplX3QpcmVhZF9sZW4pKTsKKworCWNsX2Fzc2VydF9lcXVhbF9pKDAsIHJlYWRfbGVuKTsKKwlwX2Nsb3NlKGZkKTsKKworCXJldCA9IGdpdF9oYXNoX2ZpbmFsKG9pZCwgJmN0eCk7CisJZ2l0X2hhc2hfY3R4X2NsZWFudXAoJmN0eCk7CisKKwlyZXR1cm4gcmV0OworfQorCit2b2lkIHRlc3RfY29yZV9zaGExX19zdW0odm9pZCkKK3sKKwlnaXRfb2lkIG9pZCwgZXhwZWN0ZWQ7CisKKwljbF9naXRfcGFzcyhzaGExX2ZpbGUoJm9pZCwgRklYVFVSRV9ESVIgIi9oZWxsb19jIikpOworCWdpdF9vaWRfZnJvbXN0cigmZXhwZWN0ZWQsICI0ZTcyNjc5ZTNlYTRkMDRlMGM2NDJmMDI5ZTYxZWI4MDU2YzdlZDk0Iik7CisJY2xfYXNzZXJ0X2VxdWFsX29pZCgmZXhwZWN0ZWQsICZvaWQpOworfQorCisvKiB0ZXN0IHRoYXQgc2hhMSBjb2xsaXNpb24gZGV0ZWN0aW9uIHdvcmtzIHdoZW4gZW5hYmxlZCAqLwordm9pZCB0ZXN0X2NvcmVfc2hhMV9fZGV0ZWN0X2NvbGxpc2lvbl9hdHRhY2sodm9pZCkKK3sKKwlnaXRfb2lkIG9pZCwgZXhwZWN0ZWQ7CisKKyNpZmRlZiBHSVRfU0hBMV9DT0xMSVNJT05ERVRFQ1QKKwlHSVRfVU5VU0VEKGV4cGVjdGVkKTsKKwljbF9naXRfZmFpbChzaGExX2ZpbGUoJm9pZCwgRklYVFVSRV9ESVIgIi9zaGF0dGVyZWQtMS5wZGYiKSk7CisJY2xfYXNzZXJ0X2VxdWFsX3MoIlNIQTEgY29sbGlzaW9uIGF0dGFjayBkZXRlY3RlZCIsIGdpdGVycl9sYXN0KCktPm1lc3NhZ2UpOworI2Vsc2UKKwljbF9naXRfcGFzcyhzaGExX2ZpbGUoJm9pZCwgRklYVFVSRV9ESVIgIi9zaGF0dGVyZWQtMS5wZGYiKSk7CisJZ2l0X29pZF9mcm9tc3RyKCZleHBlY3RlZCwgIjM4NzYyY2Y3ZjU1OTM0YjM0ZDE3OWFlNmE0YzgwY2FkY2NiYjdmMGEiKTsKKwljbF9hc3NlcnRfZXF1YWxfb2lkKCZleHBlY3RlZCwgJm9pZCk7CisjZW5kaWYKK30KKwpkaWZmIC0tZ2l0IGEvdGVzdHMvY29yZS9zdHJtYXAuYyBiL3Rlc3RzL2NvcmUvc3RybWFwLmMKaW5kZXggM2I0Mjc2YS4uMmZhNTk0ZCAxMDA2NDQKLS0tIGEvdGVzdHMvY29yZS9zdHJtYXAuYworKysgYi90ZXN0cy9jb3JlL3N0cm1hcC5jCkBAIC0xLDggKzEsNiBAQAogI2luY2x1ZGUgImNsYXJfbGliZ2l0Mi5oIgogI2luY2x1ZGUgInN0cm1hcC5oIgogCi1HSVRfX1VTRV9TVFJNQVAKLQogZ2l0X3N0cm1hcCAqZ190YWJsZTsKIAogdm9pZCB0ZXN0X2NvcmVfc3RybWFwX19pbml0aWFsaXplKHZvaWQpCkBAIC0zNiw3ICszNCw3IEBACiAJCWZvciAoaiA9IDAsIG92ZXIgPSBpIC8gMjY7IG92ZXIgPiAwOyBqKyssIG92ZXIgPSBvdmVyIC8gMjYpCiAJCQlzdHJbal0gPSAnQScgKyAob3ZlciAlIDI2KTsKIAotCQlnaXRfc3RybWFwX2luc2VydCh0YWJsZSwgc3RyLCBzdHIsIGVycik7CisJCWdpdF9zdHJtYXBfaW5zZXJ0KHRhYmxlLCBzdHIsIHN0ciwgJmVycik7CiAJCWNsX2Fzc2VydChlcnIgPj0gMCk7CiAJfQogCmRpZmYgLS1naXQgYS90ZXN0cy9kaWZmL3BhcnNlLmMgYi90ZXN0cy9kaWZmL3BhcnNlLmMKaW5kZXggYTA2ODEzZC4uYWNiNmViOCAxMDA2NDQKLS0tIGEvdGVzdHMvZGlmZi9wYXJzZS5jCisrKyBiL3Rlc3RzL2RpZmYvcGFyc2UuYwpAQCAtMTk2LDMgKzE5Niw3NCBAQAogCiAJY2xfZ2l0X3NhbmRib3hfY2xlYW51cCgpOwogfQorCitzdGF0aWMgaW50IGZpbGVfY2IoY29uc3QgZ2l0X2RpZmZfZGVsdGEgKmRlbHRhLCBmbG9hdCBwcm9ncmVzcywgdm9pZCAqcGF5bG9hZCkKK3sKKyAgICBpbnQgKmNhbGxlZCA9IChpbnQgKikgcGF5bG9hZDsKKyAgICBHSVRfVU5VU0VEKGRlbHRhKTsKKyAgICBHSVRfVU5VU0VEKHByb2dyZXNzKTsKKyAgICAoKmNhbGxlZCkrKzsKKyAgICByZXR1cm4gMDsKK30KKwordm9pZCB0ZXN0X2RpZmZfcGFyc2VfX2ZvcmVhY2hfd29ya3Nfd2l0aF9wYXJzZWRfcGF0Y2godm9pZCkKK3sKKwljb25zdCBjaGFyIHBhdGNoW10gPQorCSAgICAiZGlmZiAtLWdpdCBhL29iajEgYi9vYmoyXG4iCisJICAgICJpbmRleCAxMjM0NTY3Li43NjU0MzIxIDEwNjQ0XG4iCisJICAgICItLS0gYS9vYmoxXG4iCisJICAgICIrKysgYi9vYmoyXG4iCisJICAgICJAQCAtMSArMSBAQFxuIgorCSAgICAiLWFiY2RlXG4iCisJICAgICIrMTIzNDVcbiI7CisJaW50IGNhbGxlZCA9IDA7CisJZ2l0X2RpZmYgKmRpZmY7CisKKwljbF9naXRfcGFzcyhnaXRfZGlmZl9mcm9tX2J1ZmZlcigmZGlmZiwgcGF0Y2gsIHN0cmxlbihwYXRjaCkpKTsKKwljbF9naXRfcGFzcyhnaXRfZGlmZl9mb3JlYWNoKGRpZmYsIGZpbGVfY2IsIE5VTEwsIE5VTEwsIE5VTEwsICZjYWxsZWQpKTsKKwljbF9hc3NlcnRfZXF1YWxfaShjYWxsZWQsIDEpOworCisJZ2l0X2RpZmZfZnJlZShkaWZmKTsKK30KKwordm9pZCB0ZXN0X2RpZmZfcGFyc2VfX3BhcnNpbmdfbWluaW1hbF9wYXRjaF9zdWNjZWVkcyh2b2lkKQoreworCWNvbnN0IGNoYXIgcGF0Y2hbXSA9CisJICAgICJkaWZmIC0tZ2l0IGEvb2JqMSBiL29iajJcbiIKKwkgICAgImluZGV4IDEyMzQ1NjcuLjc2NTQzMjEgMTA2NDRcbiIKKwkgICAgIi0tLSBhL29iajFcbiIKKwkgICAgIisrKyBiL29iajJcbiIKKwkgICAgIkBAIC0xICsxIEBAXG4iCisJICAgICItYVxuIgorCSAgICAiK1xuIjsKKwlnaXRfYnVmIGJ1ZiA9IEdJVF9CVUZfSU5JVDsKKwlnaXRfZGlmZiAqZGlmZjsKKworCWNsX2dpdF9wYXNzKGdpdF9kaWZmX2Zyb21fYnVmZmVyKCZkaWZmLCBwYXRjaCwgc3RybGVuKHBhdGNoKSkpOworCWNsX2dpdF9wYXNzKGdpdF9kaWZmX3RvX2J1ZigmYnVmLCBkaWZmLCBHSVRfRElGRl9GT1JNQVRfUEFUQ0gpKTsKKwljbF9hc3NlcnRfZXF1YWxfcyhwYXRjaCwgYnVmLnB0cik7CisKKwlnaXRfZGlmZl9mcmVlKGRpZmYpOworCWdpdF9idWZfZnJlZSgmYnVmKTsKK30KKwordm9pZCB0ZXN0X2RpZmZfcGFyc2VfX3BhdGNoX3JvdW5kdHJpcF9zdWNjZWVkcyh2b2lkKQoreworCWNvbnN0IGNoYXIgYnVmMVtdID0gImFcbiIsIGJ1ZjJbXSA9ICJiXG4iOworCWdpdF9idWYgcGF0Y2hidWYgPSBHSVRfQlVGX0lOSVQsIGRpZmZidWYgPSBHSVRfQlVGX0lOSVQ7CisJZ2l0X3BhdGNoICpwYXRjaDsKKwlnaXRfZGlmZiAqZGlmZjsKKworCWNsX2dpdF9wYXNzKGdpdF9wYXRjaF9mcm9tX2J1ZmZlcnMoJnBhdGNoLCBidWYxLCBzdHJsZW4oYnVmMSksICJvYmoxIiwgYnVmMiwgc3RybGVuKGJ1ZjIpLCAib2JqMiIsIE5VTEwpKTsKKwljbF9naXRfcGFzcyhnaXRfcGF0Y2hfdG9fYnVmKCZwYXRjaGJ1ZiwgcGF0Y2gpKTsKKworCWNsX2dpdF9wYXNzKGdpdF9kaWZmX2Zyb21fYnVmZmVyKCZkaWZmLCBwYXRjaGJ1Zi5wdHIsIHBhdGNoYnVmLnNpemUpKTsKKwljbF9naXRfcGFzcyhnaXRfZGlmZl90b19idWYoJmRpZmZidWYsIGRpZmYsIEdJVF9ESUZGX0ZPUk1BVF9QQVRDSCkpOworCisJY2xfYXNzZXJ0X2VxdWFsX3MocGF0Y2hidWYucHRyLCBkaWZmYnVmLnB0cik7CisKKwlnaXRfcGF0Y2hfZnJlZShwYXRjaCk7CisJZ2l0X2RpZmZfZnJlZShkaWZmKTsKKwlnaXRfYnVmX2ZyZWUoJnBhdGNoYnVmKTsKKwlnaXRfYnVmX2ZyZWUoJmRpZmZidWYpOworfQpkaWZmIC0tZ2l0IGEvdGVzdHMvZmlsdGVyL2N1c3RvbS5jIGIvdGVzdHMvZmlsdGVyL2N1c3RvbS5jCmluZGV4IGZkMWNkMjcuLjc5OWJlZWYgMTAwNjQ0Ci0tLSBhL3Rlc3RzL2ZpbHRlci9jdXN0b20uYworKysgYi90ZXN0cy9maWx0ZXIvY3VzdG9tLmMKQEAgLTU1LDYgKzU1LDcgQEAKIAkJImhlcm8qIGJpdGZsaXAgcmV2ZXJzZVxuIgogCQkiaGVyb2ZpbGUgdGV4dFxuIgogCQkiaGVyb2ZsaXAgLXJldmVyc2UgYmluYXJ5XG4iCisJCSJ2aWxsYWluIGVycm9uZW91c1xuIgogCQkiKi5iaW4gYmluYXJ5XG4iKTsKIH0KIApAQCAtODIsNiArODMsMTEgQEAKIAkJCWNyZWF0ZV9yZXZlcnNlX2ZpbHRlcigiK3ByZXJldmVyc2UiKSwKIAkJCUdJVF9GSUxURVJfRFJJVkVSX1BSSU9SSVRZKSk7CiAKKwkJY2xfZ2l0X3Bhc3MoZ2l0X2ZpbHRlcl9yZWdpc3RlcigKKwkJCSJlcnJvbmVvdXMiLAorCQkJY3JlYXRlX2Vycm9uZW91c19maWx0ZXIoIitlcnJvbmVvdXMiKSwKKwkJCUdJVF9GSUxURVJfRFJJVkVSX1BSSU9SSVRZKSk7CisKIAkJZmlsdGVyc19yZWdpc3RlcmVkID0gMTsKIAl9CiB9CkBAIC0yMzUsMyArMjQxLDE4IEBACiAJY2xfZ2l0X2ZhaWwoZ2l0X2ZpbHRlcl91bnJlZ2lzdGVyKEdJVF9GSUxURVJfSURFTlQpKTsKIAljbF9hc3NlcnRfZXF1YWxfaShHSVRfRU5PVEZPVU5ELCBnaXRfZmlsdGVyX3VucmVnaXN0ZXIoIm5vdC1hLWZpbHRlciIpKTsKIH0KKwordm9pZCB0ZXN0X2ZpbHRlcl9jdXN0b21fX2Vycm9uZW91c19maWx0ZXJfZmFpbHModm9pZCkKK3sKKwlnaXRfZmlsdGVyX2xpc3QgKmZpbHRlcnM7CisJZ2l0X2J1ZiBvdXQgPSBHSVRfQlVGX0lOSVQ7CisJZ2l0X2J1ZiBpbiA9IEdJVF9CVUZfSU5JVF9DT05TVCh3b3JrZGlyX2RhdGEsIHN0cmxlbih3b3JrZGlyX2RhdGEpKTsKKworCWNsX2dpdF9wYXNzKGdpdF9maWx0ZXJfbGlzdF9sb2FkKAorCQkmZmlsdGVycywgZ19yZXBvLCBOVUxMLCAidmlsbGFpbiIsIEdJVF9GSUxURVJfVE9fV09SS1RSRUUsIDApKTsKKworCWNsX2dpdF9mYWlsKGdpdF9maWx0ZXJfbGlzdF9hcHBseV90b19kYXRhKCZvdXQsIGZpbHRlcnMsICZpbikpOworCisJZ2l0X2ZpbHRlcl9saXN0X2ZyZWUoZmlsdGVycyk7CisJZ2l0X2J1Zl9mcmVlKCZvdXQpOworfQpkaWZmIC0tZ2l0IGEvdGVzdHMvZmlsdGVyL2N1c3RvbV9oZWxwZXJzLmMgYi90ZXN0cy9maWx0ZXIvY3VzdG9tX2hlbHBlcnMuYwppbmRleCAyYzgwMjEyLi5kN2YyYWZlIDEwMDY0NAotLS0gYS90ZXN0cy9maWx0ZXIvY3VzdG9tX2hlbHBlcnMuYworKysgYi90ZXN0cy9maWx0ZXIvY3VzdG9tX2hlbHBlcnMuYwpAQCAtMTA2LDMgKzEwNiwzNiBAQAogCiAJcmV0dXJuIGZpbHRlcjsKIH0KKworaW50IGVycm9uZW91c19maWx0ZXJfc3RyZWFtKAorCWdpdF93cml0ZXN0cmVhbSAqKm91dCwKKwlnaXRfZmlsdGVyICpzZWxmLAorCXZvaWQgKipwYXlsb2FkLAorCWNvbnN0IGdpdF9maWx0ZXJfc291cmNlICpzcmMsCisJZ2l0X3dyaXRlc3RyZWFtICpuZXh0KQoreworCUdJVF9VTlVTRUQob3V0KTsKKwlHSVRfVU5VU0VEKHNlbGYpOworCUdJVF9VTlVTRUQocGF5bG9hZCk7CisJR0lUX1VOVVNFRChzcmMpOworCUdJVF9VTlVTRUQobmV4dCk7CisJcmV0dXJuIC0xOworfQorCitzdGF0aWMgdm9pZCBlcnJvbmVvdXNfZmlsdGVyX2ZyZWUoZ2l0X2ZpbHRlciAqZikKK3sKKwlnaXRfX2ZyZWUoZik7Cit9CisKK2dpdF9maWx0ZXIgKmNyZWF0ZV9lcnJvbmVvdXNfZmlsdGVyKGNvbnN0IGNoYXIgKmF0dHJzKQoreworCWdpdF9maWx0ZXIgKmZpbHRlciA9IGdpdF9fY2FsbG9jKDEsIHNpemVvZihnaXRfZmlsdGVyKSk7CisJY2xfYXNzZXJ0KGZpbHRlcik7CisKKwlmaWx0ZXItPnZlcnNpb24gPSBHSVRfRklMVEVSX1ZFUlNJT047CisJZmlsdGVyLT5hdHRyaWJ1dGVzID0gYXR0cnM7CisJZmlsdGVyLT5zdHJlYW0gPSBlcnJvbmVvdXNfZmlsdGVyX3N0cmVhbTsKKwlmaWx0ZXItPnNodXRkb3duID0gZXJyb25lb3VzX2ZpbHRlcl9mcmVlOworCisJcmV0dXJuIGZpbHRlcjsKK30KZGlmZiAtLWdpdCBhL3Rlc3RzL2ZpbHRlci9jdXN0b21faGVscGVycy5oIGIvdGVzdHMvZmlsdGVyL2N1c3RvbV9oZWxwZXJzLmgKaW5kZXggMTNjZmIyMy4uNTM3YTUxZCAxMDA2NDQKLS0tIGEvdGVzdHMvZmlsdGVyL2N1c3RvbV9oZWxwZXJzLmgKKysrIGIvdGVzdHMvZmlsdGVyL2N1c3RvbV9oZWxwZXJzLmgKQEAgLTIsNiArMiw3IEBACiAKIGV4dGVybiBnaXRfZmlsdGVyICpjcmVhdGVfYml0ZmxpcF9maWx0ZXIodm9pZCk7CiBleHRlcm4gZ2l0X2ZpbHRlciAqY3JlYXRlX3JldmVyc2VfZmlsdGVyKGNvbnN0IGNoYXIgKmF0dHIpOworZXh0ZXJuIGdpdF9maWx0ZXIgKmNyZWF0ZV9lcnJvbmVvdXNfZmlsdGVyKGNvbnN0IGNoYXIgKmF0dHIpOwogCiBleHRlcm4gaW50IGJpdGZsaXBfZmlsdGVyX2FwcGx5KAogCWdpdF9maWx0ZXIgICAgICpzZWxmLApkaWZmIC0tZ2l0IGEvdGVzdHMvaW5kZXgvdmVyc2lvbi5jIGIvdGVzdHMvaW5kZXgvdmVyc2lvbi5jCmluZGV4IDNmZDI0MGQuLjdhZGEzMDIgMTAwNjQ0Ci0tLSBhL3Rlc3RzL2luZGV4L3ZlcnNpb24uYworKysgYi90ZXN0cy9pbmRleC92ZXJzaW9uLmMKQEAgLTMsMzkgKzMsMTM1IEBACiAKIHN0YXRpYyBnaXRfcmVwb3NpdG9yeSAqZ19yZXBvID0gTlVMTDsKIAordm9pZCB0ZXN0X2luZGV4X3ZlcnNpb25fX2NsZWFudXAodm9pZCkKK3sKKyAgICAgICAgY2xfZ2l0X3NhbmRib3hfY2xlYW51cCgpOworICAgICAgICBnX3JlcG8gPSBOVUxMOworfQorCit2b2lkIHRlc3RfaW5kZXhfdmVyc2lvbl9fY2FuX3JlYWRfdjQodm9pZCkKK3sKKwljb25zdCBjaGFyICpwYXRoc1tdID0geworCSAgICAiZmlsZS50eCIsICJmaWxlLnR4dCIsICJmaWxlLnR4eiIsICJmb28iLCAienp6IiwKKwl9OworCWdpdF9pbmRleCAqaW5kZXg7CisJc2l6ZV90IGk7CisKKwlnX3JlcG8gPSBjbF9naXRfc2FuZGJveF9pbml0KCJpbmRleHY0Iik7CisKKwljbF9naXRfcGFzcyhnaXRfcmVwb3NpdG9yeV9pbmRleCgmaW5kZXgsIGdfcmVwbykpOworCWNsX2Fzc2VydF9lcXVhbF9zeihnaXRfaW5kZXhfZW50cnljb3VudChpbmRleCksIDUpOworCisJZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUocGF0aHMpOyBpKyspIHsKKwkJY29uc3QgZ2l0X2luZGV4X2VudHJ5ICplbnRyeSA9CisJCSAgICBnaXRfaW5kZXhfZ2V0X2J5cGF0aChpbmRleCwgcGF0aHNbaV0sIEdJVF9JTkRFWF9TVEFHRV9OT1JNQUwpOworCisJCWNsX2Fzc2VydChlbnRyeSAhPSBOVUxMKTsKKwl9CisKKwlnaXRfaW5kZXhfZnJlZShpbmRleCk7Cit9CisKIHZvaWQgdGVzdF9pbmRleF92ZXJzaW9uX19jYW5fd3JpdGVfdjQodm9pZCkKIHsKKwljb25zdCBjaGFyICpwYXRoc1tdID0geworCSAgICAiZm9vIiwKKwkgICAgImZvb3giLAorCSAgICAiZm9vYmFyIiwKKwkgICAgImZvb2JhbCIsCisJICAgICJ4IiwKKwkgICAgInh6IiwKKwkgICAgInh5enp5eCIKKwl9OworCWdpdF9pbmRleF9lbnRyeSBlbnRyeTsKIAlnaXRfaW5kZXggKmluZGV4OwotCWNvbnN0IGdpdF9pbmRleF9lbnRyeSAqZW50cnk7CisJc2l6ZV90IGk7CiAKLQlnX3JlcG8gPSBjbF9naXRfc2FuZGJveF9pbml0KCJmaWxlbW9kZXMiKTsKKwlnX3JlcG8gPSBjbF9naXRfc2FuZGJveF9pbml0KCJlbXB0eV9zdGFuZGFyZF9yZXBvIik7CiAJY2xfZ2l0X3Bhc3MoZ2l0X3JlcG9zaXRvcnlfaW5kZXgoJmluZGV4LCBnX3JlcG8pKTsKLQotCWNsX2Fzc2VydChpbmRleC0+b25fZGlzayk7Ci0JY2xfYXNzZXJ0KGdpdF9pbmRleF92ZXJzaW9uKGluZGV4KSA9PSAyKTsKLQotCWNsX2Fzc2VydChnaXRfaW5kZXhfZW50cnljb3VudChpbmRleCkgPT0gNik7Ci0KIAljbF9naXRfcGFzcyhnaXRfaW5kZXhfc2V0X3ZlcnNpb24oaW5kZXgsIDQpKTsKIAorCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKHBhdGhzKTsgaSsrKSB7CisJCW1lbXNldCgmZW50cnksIDAsIHNpemVvZihlbnRyeSkpOworCQllbnRyeS5wYXRoID0gcGF0aHNbaV07CisJCWVudHJ5Lm1vZGUgPSBHSVRfRklMRU1PREVfQkxPQjsKKwkJY2xfZ2l0X3Bhc3MoZ2l0X2luZGV4X2FkZF9mcm9tYnVmZmVyKGluZGV4LCAmZW50cnksIHBhdGhzW2ldLAorCQkJCQkJICAgICBzdHJsZW4ocGF0aHNbaV0pICsgMSkpOworCX0KKwljbF9hc3NlcnRfZXF1YWxfc3ooZ2l0X2luZGV4X2VudHJ5Y291bnQoaW5kZXgpLCBBUlJBWV9TSVpFKHBhdGhzKSk7CisKIAljbF9naXRfcGFzcyhnaXRfaW5kZXhfd3JpdGUoaW5kZXgpKTsKIAlnaXRfaW5kZXhfZnJlZShpbmRleCk7CiAKIAljbF9naXRfcGFzcyhnaXRfcmVwb3NpdG9yeV9pbmRleCgmaW5kZXgsIGdfcmVwbykpOwogCWNsX2Fzc2VydChnaXRfaW5kZXhfdmVyc2lvbihpbmRleCkgPT0gNCk7CiAKLQllbnRyeSA9IGdpdF9pbmRleF9nZXRfYnlwYXRoKGluZGV4LCAiZXhlY19vZmYiLCAwKTsKLQljbF9hc3NlcnQoZW50cnkpOwotCWVudHJ5ID0gZ2l0X2luZGV4X2dldF9ieXBhdGgoaW5kZXgsICJleGVjX29mZjJvbl9zdGFnZWQiLCAwKTsKLQljbF9hc3NlcnQoZW50cnkpOwotCWVudHJ5ID0gZ2l0X2luZGV4X2dldF9ieXBhdGgoaW5kZXgsICJleGVjX29uIiwgMCk7Ci0JY2xfYXNzZXJ0KGVudHJ5KTsKKwlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShwYXRocyk7IGkrKykgeworCQljb25zdCBnaXRfaW5kZXhfZW50cnkgKmU7CisKKwkJY2xfYXNzZXJ0KGUgPSBnaXRfaW5kZXhfZ2V0X2J5cGF0aChpbmRleCwgcGF0aHNbaV0sIDApKTsKKwkJY2xfYXNzZXJ0X2VxdWFsX3MocGF0aHNbaV0sIGUtPnBhdGgpOworCX0KIAogCWdpdF9pbmRleF9mcmVlKGluZGV4KTsKIH0KIAotdm9pZCB0ZXN0X2luZGV4X3ZlcnNpb25fX2NsZWFudXAodm9pZCkKK3ZvaWQgdGVzdF9pbmRleF92ZXJzaW9uX192NF91c2VzX3BhdGhfY29tcHJlc3Npb24odm9pZCkKIHsKLSAgICAgICAgY2xfZ2l0X3NhbmRib3hfY2xlYW51cCgpOwotICAgICAgICBnX3JlcG8gPSBOVUxMOworCWdpdF9pbmRleF9lbnRyeSBlbnRyeTsKKwlnaXRfaW5kZXggKmluZGV4OworCWNoYXIgcGF0aFsyNTBdLCBidWZbMV07CisJc3RydWN0IHN0YXQgc3Q7CisJY2hhciBpLCBqOworCisJbWVtc2V0KHBhdGgsICdhJywgc2l6ZW9mKHBhdGgpKTsKKwltZW1zZXQoYnVmLCAnYScsIHNpemVvZihidWYpKTsKKworCW1lbXNldCgmZW50cnksIDAsIHNpemVvZihlbnRyeSkpOworCWVudHJ5LnBhdGggPSBwYXRoOworCWVudHJ5Lm1vZGUgPSBHSVRfRklMRU1PREVfQkxPQjsKKworCWdfcmVwbyA9IGNsX2dpdF9zYW5kYm94X2luaXQoImluZGV4djQiKTsKKwljbF9naXRfcGFzcyhnaXRfcmVwb3NpdG9yeV9pbmRleCgmaW5kZXgsIGdfcmVwbykpOworCisJLyogd3JpdGUgNjc2IHBhdGhzIG9mIDI1MCBieXRlcyBsZW5ndGggKi8KKwlmb3IgKGkgPSAnYSc7IGkgPD0gJ3onOyBpKyspIHsKKwkJZm9yIChqID0gJ2EnOyBqIDwgJ3onOyBqKyspIHsKKwkJCXBhdGhbQVJSQVlfU0laRShwYXRoKSAtIDNdID0gaTsKKwkJCXBhdGhbQVJSQVlfU0laRShwYXRoKSAtIDJdID0gajsKKwkJCXBhdGhbQVJSQVlfU0laRShwYXRoKSAtIDFdID0gJ1wwJzsKKwkJCWNsX2dpdF9wYXNzKGdpdF9pbmRleF9hZGRfZnJvbWJ1ZmZlcihpbmRleCwgJmVudHJ5LCBidWYsIHNpemVvZihidWYpKSk7CisJCX0KKwl9CisKKwljbF9naXRfcGFzcyhnaXRfaW5kZXhfd3JpdGUoaW5kZXgpKTsKKwljbF9naXRfcGFzcyhwX3N0YXQoZ2l0X2luZGV4X3BhdGgoaW5kZXgpLCAmc3QpKTsKKworCS8qCisJICogV2l0aG91dCBwYXRoIGNvbXByZXNzaW9uLCB0aGUgd3JpdHRlbiBwYXRocyB3b3VsZCBhdAorCSAqIGxlYXN0IHRha2UKKwkgKgorCSAqICAgIChlbnRyaWVzICogcGF0aGxlbikgPSBsZW4KKwkgKiAgICAoNjc2ICogMjUwKSA9IDE2OTAwMAorCSAqCisJICogIGJ5dGVzLiBBcyBpbmRleCB2NCB1c2VzIHN1ZmZpeC1jb21wcmVzc2lvbiBhbmQgb3VyCisJICogIHdyaXR0ZW4gcGF0aHMgb25seSBkaWZmZXIgaW4gdGhlIGxhc3QgdHdvIGVudHJpZXMsCisJICogIHRoaXMgbnVtYmVyIHdpbGwgYmUgbXVjaCBzbWFsbGVyLCBlLmcuCisJICoKKwkgKiAgICAoMSAqIHBhdGhsZW4pICsgKDY3NSAqIDIpID0gbGVuCisJICogICAgNjc2ICsgMTM1MCA9IDIwMjYKKwkgKgorCSAqICAgIGJ5dGVzLgorCSAqCisJICogICAgTm90ZSB0aGF0IHRoZSBhYm92ZSBjYWxjdWxhdGlvbnMgZG8gbm90IGluY2x1ZGUKKwkgKiAgICBhZGRpdGlvbmFsIG1ldGFkYXRhIG9mIHRoZSBpbmRleCwgZS5nLiBPSURzIG9yCisJICogICAgaW5kZXggZXh0ZW5zaW9ucy4gSW5jbHVkaW5nIHRob3NlIHdlIGdldCBhbiBpbmRleAorCSAqICAgIG9mIGFwcHJveC4gMjAwa0Igd2l0aG91dCBjb21wcmVzc2lvbiBhbmQgNDBrQiB3aXRoCisJICogICAgY29tcHJlc3Npb24uIEFzIHRoaXMgaXMgYSBsb3Qgc21hbGxlciB0aGFuIHdpdGhvdXQKKwkgKiAgICBjb21wcmVzc2lvbiwgd2UgY2FuIHZlcmlmeSB0aGF0IHBhdGggY29tcHJlc3Npb24gaXMKKwkgKiAgICB1c2VkLgorCSAqLworCWNsX2Fzc2VydF8oc3Quc3Rfc2l6ZSA8IDc1MDAwLCAicGF0aCBjb21wcmVzc2lvbiBub3QgZW5hYmxlZCIpOworCisJZ2l0X2luZGV4X2ZyZWUoaW5kZXgpOwogfQpkaWZmIC0tZ2l0IGEvdGVzdHMvaXRlcmF0b3Ivd29ya2Rpci5jIGIvdGVzdHMvaXRlcmF0b3Ivd29ya2Rpci5jCmluZGV4IDI4ZmNjMGQuLmYzM2ZkOTggMTAwNjQ0Ci0tLSBhL3Rlc3RzL2l0ZXJhdG9yL3dvcmtkaXIuYworKysgYi90ZXN0cy9pdGVyYXRvci93b3JrZGlyLmMKQEAgLTYxMyw5ICs2MTMsMTEgQEAKIAkJImhlYWRzL2lkZW50IiwKIAkJImhlYWRzL2xvbmctZmlsZS1uYW1lIiwKIAkJImhlYWRzL21hc3RlciIsCisJCSJoZWFkcy9tZXJnZS1jb25mbGljdCIsCiAJCSJoZWFkcy9wYWNrZWQtdGVzdCIsCiAJCSJoZWFkcy9zdWJ0cmVlcyIsCiAJCSJoZWFkcy90ZXN0IiwKKwkJImhlYWRzL3Rlc3RyZXBvLXdvcmt0cmVlIiwKIAkJInRhZ3MvZTkwODEwYiIsCiAJCSJ0YWdzL2Zvby9iYXIiLAogCQkidGFncy9mb28vZm9vL2JhciIsCkBAIC02MjgsNyArNjMwLDcgQEAKIAogCWNsX2dpdF9wYXNzKGdpdF9pdGVyYXRvcl9mb3JfZmlsZXN5c3RlbSgKIAkJJmksICJ0ZXN0cmVwby8uZ2l0L3JlZnMiLCBOVUxMKSk7Ci0JZXhwZWN0X2l0ZXJhdG9yX2l0ZW1zKGksIDEzLCBleHBlY3RfYmFzZSwgMTMsIGV4cGVjdF9iYXNlKTsKKwlleHBlY3RfaXRlcmF0b3JfaXRlbXMoaSwgMTUsIGV4cGVjdF9iYXNlLCAxNSwgZXhwZWN0X2Jhc2UpOwogCWdpdF9pdGVyYXRvcl9mcmVlKGkpOwogfQogCmRpZmYgLS1naXQgYS90ZXN0cy9tZXJnZS90cmVlcy9yZW5hbWVzLmMgYi90ZXN0cy9tZXJnZS90cmVlcy9yZW5hbWVzLmMKaW5kZXggNmY1YzM2Yi4uODUzYmYyZiAxMDA2NDQKLS0tIGEvdGVzdHMvbWVyZ2UvdHJlZXMvcmVuYW1lcy5jCisrKyBiL3Rlc3RzL21lcmdlL3RyZWVzL3JlbmFtZXMuYwpAQCAtMjUyLDMgKzI1MiwyNSBAQAogCiAJZ2l0X2luZGV4X2ZyZWUoaW5kZXgpOwogfQorCit2b2lkIHRlc3RfbWVyZ2VfdHJlZXNfcmVuYW1lc19fc3VibW9kdWxlcyh2b2lkKQoreworCWdpdF9pbmRleCAqaW5kZXg7CisJZ2l0X21lcmdlX29wdGlvbnMgKm9wdHMgPSBOVUxMOworCisJc3RydWN0IG1lcmdlX2luZGV4X2VudHJ5IG1lcmdlX2luZGV4X2VudHJpZXNbXSA9IHsKKwkJeyAwMTAwNjQ0LCAiY2QzZThkNGFhMDZiZGM3ODFmMjY0MTcxMDMwYmMyOGYyYjM3MGZlZSIsIDAsICIuZ2l0bW9kdWxlcyIgfSwKKwkJeyAwMTAwNjQ0LCAiNGRkMWVmNzU2OWIxOGQ5MmQ5M2MwYTM1YmI2YjkzMDQ5MTM3YjM1NSIsIDEsICJmaWxlLnR4dCIgfSwKKwkJeyAwMTAwNjQ0LCAiYTJkOGQxODI0YzY4NTQxY2NhOTRmZmI5MGY3OTI5MWViYTQ5NTkyMSIsIDIsICJmaWxlLnR4dCIgfSwKKwkJeyAwMTAwNjQ0LCAiNjNlYzYwNGQ0OTExNjFkZGFmZGFlNDE3OTg0M2MyNmQ1NGJkOTk5YSIsIDMsICJmaWxlLnR4dCIgfSwKKwkJeyAwMTYwMDAwLCAiMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMSIsIDEsICJzdWJtb2R1bGUxIiB9LAorCQl7IDAxNjAwMDAsICIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAyIiwgMywgInN1Ym1vZHVsZTEiIH0sCisJCXsgMDE2MDAwMCwgIjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDMiLCAwLCAic3VibW9kdWxlMiIgfSwKKwl9OworCisJY2xfZ2l0X3Bhc3MobWVyZ2VfdHJlZXNfZnJvbV9icmFuY2hlcygmaW5kZXgsIHJlcG8sCisJCSJzdWJtb2R1bGVfcmVuYW1lMSIsICJzdWJtb2R1bGVfcmVuYW1lMiIsCisJCW9wdHMpKTsKKwljbF9hc3NlcnQobWVyZ2VfdGVzdF9pbmRleChpbmRleCwgbWVyZ2VfaW5kZXhfZW50cmllcywgNykpOworCWdpdF9pbmRleF9mcmVlKGluZGV4KTsKK30KZGlmZiAtLWdpdCBhL3Rlc3RzL29iamVjdC9sb29rdXAuYyBiL3Rlc3RzL29iamVjdC9sb29rdXAuYwppbmRleCBjZmE2ZDQ2Li41NDRmMzJiIDEwMDY0NAotLS0gYS90ZXN0cy9vYmplY3QvbG9va3VwLmMKKysrIGIvdGVzdHMvb2JqZWN0L2xvb2t1cC5jCkBAIC02LDEzICs2LDEyIEBACiAKIHZvaWQgdGVzdF9vYmplY3RfbG9va3VwX19pbml0aWFsaXplKHZvaWQpCiB7Ci0gICBjbF9naXRfcGFzcyhnaXRfcmVwb3NpdG9yeV9vcGVuKCZnX3JlcG8sIGNsX2ZpeHR1cmUoInRlc3RyZXBvLmdpdCIpKSk7CisJZ19yZXBvID0gY2xfZ2l0X3NhbmRib3hfaW5pdCgidGVzdHJlcG8uZ2l0Iik7CiB9CiAKIHZvaWQgdGVzdF9vYmplY3RfbG9va3VwX19jbGVhbnVwKHZvaWQpCiB7Ci0JZ2l0X3JlcG9zaXRvcnlfZnJlZShnX3JlcG8pOwotCWdfcmVwbyA9IE5VTEw7CisJY2xfZ2l0X3NhbmRib3hfY2xlYW51cCgpOwogfQogCiB2b2lkIHRlc3Rfb2JqZWN0X2xvb2t1cF9fbG9va3VwX3dyb25nX3R5cGVfcmV0dXJuc19lbm90Zm91bmQodm9pZCkKQEAgLTYzLDMgKzYyLDYxIEBACiAJCUdJVF9FTk9URk9VTkQsIGdpdF9vYmplY3RfbG9va3VwKCZvYmplY3QsIGdfcmVwbywgJm9pZCwgR0lUX09CSl9UQUcpKTsKIH0KIAordm9pZCB0ZXN0X29iamVjdF9sb29rdXBfX2xvb2t1cF9jb3JydXB0X29iamVjdF9yZXR1cm5zX2Vycm9yKHZvaWQpCit7CisJY29uc3QgY2hhciAqY29tbWl0ID0gIjhlNzNiNzY5ZTk3Njc4ZDY4NGI4MDliMTYzYmViZGFlMjkxMTcyMGYiLAorCSAgICAgICpmaWxlID0gIm9iamVjdHMvOGUvNzNiNzY5ZTk3Njc4ZDY4NGI4MDliMTYzYmViZGFlMjkxMTcyMGYiOworCWdpdF9idWYgcGF0aCA9IEdJVF9CVUZfSU5JVCwgY29udGVudHMgPSBHSVRfQlVGX0lOSVQ7CisJZ2l0X29pZCBvaWQ7CisJZ2l0X29iamVjdCAqb2JqZWN0OworCXNpemVfdCBpOworCisJY2xfZ2l0X3Bhc3MoZ2l0X29pZF9mcm9tc3RyKCZvaWQsIGNvbW1pdCkpOworCWNsX2dpdF9wYXNzKGdpdF9idWZfam9pbnBhdGgoJnBhdGgsIGdpdF9yZXBvc2l0b3J5X3BhdGgoZ19yZXBvKSwgZmlsZSkpOworCWNsX2dpdF9wYXNzKGdpdF9mdXRpbHNfcmVhZGJ1ZmZlcigmY29udGVudHMsIHBhdGgucHRyKSk7CisKKwkvKiBDb3JydXB0IGFuZCB0cnkgdG8gcmVhZCB0aGUgb2JqZWN0ICovCisJZm9yIChpID0gMDsgaSA8IGNvbnRlbnRzLnNpemU7IGkrKykgeworCQljb250ZW50cy5wdHJbaV0gXj0gMHgxOworCQljbF9naXRfcGFzcyhnaXRfZnV0aWxzX3dyaXRlYnVmZmVyKCZjb250ZW50cywgcGF0aC5wdHIsIE9fUkRXUiwgMDY0NCkpOworCQljbF9naXRfZmFpbChnaXRfb2JqZWN0X2xvb2t1cCgmb2JqZWN0LCBnX3JlcG8sICZvaWQsIEdJVF9PQkpfQ09NTUlUKSk7CisJCWNvbnRlbnRzLnB0cltpXSBePSAweDE7CisJfQorCisJLyogUmVzdG9yZSBvcmlnaW5hbCBjb250ZW50IGFuZCBhc3NlcnQgd2UgY2FuIHJlYWQgdGhlIG9iamVjdCAqLworCWNsX2dpdF9wYXNzKGdpdF9mdXRpbHNfd3JpdGVidWZmZXIoJmNvbnRlbnRzLCBwYXRoLnB0ciwgT19SRFdSLCAwNjQ0KSk7CisJY2xfZ2l0X3Bhc3MoZ2l0X29iamVjdF9sb29rdXAoJm9iamVjdCwgZ19yZXBvLCAmb2lkLCBHSVRfT0JKX0NPTU1JVCkpOworCisJZ2l0X29iamVjdF9mcmVlKG9iamVjdCk7CisJZ2l0X2J1Zl9mcmVlKCZwYXRoKTsKKwlnaXRfYnVmX2ZyZWUoJmNvbnRlbnRzKTsKK30KKwordm9pZCB0ZXN0X29iamVjdF9sb29rdXBfX2xvb2t1cF9vYmplY3Rfd2l0aF93cm9uZ19oYXNoX3JldHVybnNfZXJyb3Iodm9pZCkKK3sKKwljb25zdCBjaGFyICpvbGRsb29zZSA9ICJvYmplY3RzLzhlLzczYjc2OWU5NzY3OGQ2ODRiODA5YjE2M2JlYmRhZTI5MTE3MjBmIiwKKwkgICAgICAqbmV3bG9vc2UgPSAib2JqZWN0cy84ZS83M2I3NjllOTc2NzhkNjg0YjgwOWIxNjNiZWJkYWUyOTExNzIwZSIsCisJICAgICAgKmNvbW1pdCA9ICI4ZTczYjc2OWU5NzY3OGQ2ODRiODA5YjE2M2JlYmRhZTI5MTE3MjBlIjsKKwlnaXRfYnVmIG9sZHBhdGggPSBHSVRfQlVGX0lOSVQsIG5ld3BhdGggPSBHSVRfQlVGX0lOSVQ7CisJZ2l0X29iamVjdCAqb2JqZWN0OworCWdpdF9vaWQgb2lkOworCisJY2xfZ2l0X3Bhc3MoZ2l0X29pZF9mcm9tc3RyKCZvaWQsIGNvbW1pdCkpOworCisJLyogQ29weSBvYmplY3QgdG8gYW5vdGhlciBsb2NhdGlvbiB3aXRoIHdyb25nIGhhc2ggKi8KKwljbF9naXRfcGFzcyhnaXRfYnVmX2pvaW5wYXRoKCZvbGRwYXRoLCBnaXRfcmVwb3NpdG9yeV9wYXRoKGdfcmVwbyksIG9sZGxvb3NlKSk7CisJY2xfZ2l0X3Bhc3MoZ2l0X2J1Zl9qb2lucGF0aCgmbmV3cGF0aCwgZ2l0X3JlcG9zaXRvcnlfcGF0aChnX3JlcG8pLCBuZXdsb29zZSkpOworCWNsX2dpdF9wYXNzKGdpdF9mdXRpbHNfY3Aob2xkcGF0aC5wdHIsIG5ld3BhdGgucHRyLCAwNjQ0KSk7CisKKwkvKiBWZXJpZnkgdGhhdCBsb29rdXAgZmFpbHMgZHVlIHRvIGEgaGFzaHN1bSBtaXNtYXRjaCAqLworCWNsX2dpdF9mYWlsX3dpdGgoR0lUX0VNSVNNQVRDSCwgZ2l0X29iamVjdF9sb29rdXAoJm9iamVjdCwgZ19yZXBvLCAmb2lkLCBHSVRfT0JKX0NPTU1JVCkpOworCisJLyogRGlzYWJsZSB2ZXJpZmljYXRpb24gYW5kIHRyeSBhZ2FpbiAqLworCWNsX2dpdF9wYXNzKGdpdF9saWJnaXQyX29wdHMoR0lUX09QVF9FTkFCTEVfU1RSSUNUX0hBU0hfVkVSSUZJQ0FUSU9OLCAwKSk7CisJY2xfZ2l0X3Bhc3MoZ2l0X29iamVjdF9sb29rdXAoJm9iamVjdCwgZ19yZXBvLCAmb2lkLCBHSVRfT0JKX0NPTU1JVCkpOworCWNsX2dpdF9wYXNzKGdpdF9saWJnaXQyX29wdHMoR0lUX09QVF9FTkFCTEVfU1RSSUNUX0hBU0hfVkVSSUZJQ0FUSU9OLCAxKSk7CisKKwlnaXRfb2JqZWN0X2ZyZWUob2JqZWN0KTsKKwlnaXRfYnVmX2ZyZWUoJm9sZHBhdGgpOworCWdpdF9idWZfZnJlZSgmbmV3cGF0aCk7Cit9CmRpZmYgLS1naXQgYS90ZXN0cy9vZGIvYmFja2VuZC9ub25yZWZyZXNoaW5nLmMgYi90ZXN0cy9vZGIvYmFja2VuZC9ub25yZWZyZXNoaW5nLmMKaW5kZXggYjQzNTI5NC4uZjEyYWM3NCAxMDA2NDQKLS0tIGEvdGVzdHMvb2RiL2JhY2tlbmQvbm9ucmVmcmVzaGluZy5jCisrKyBiL3Rlc3RzL29kYi9iYWNrZW5kL25vbnJlZnJlc2hpbmcuYwpAQCAtMTcsNiArMTcsOSBAQAogc3RhdGljIGZha2VfYmFja2VuZCAqX2Zha2U7CiBzdGF0aWMgZ2l0X29pZCBfb2lkOwogCisjZGVmaW5lIEhBU0ggImRlYWRiZWVmZGVhZGJlZWZkZWFkYmVlZmRlYWRiZWVmZGVhZGJlZWYiCisjZGVmaW5lIEVNUFRZX0hBU0ggImU2OWRlMjliYjJkMWQ2NDM0YjhiMjlhZTc3NWFkOGMyZTQ4YzUzOTEiCisKIHN0YXRpYyBpbnQgZmFrZV9iYWNrZW5kX19leGlzdHMoZ2l0X29kYl9iYWNrZW5kICpiYWNrZW5kLCBjb25zdCBnaXRfb2lkICpvaWQpCiB7CiAJZmFrZV9iYWNrZW5kICpmYWtlOwpAQCAtNzgsNyArODEsNiBAQAogewogCWZha2VfYmFja2VuZCAqZmFrZTsKIAotCUdJVF9VTlVTRUQob3V0X29pZCk7CiAJR0lUX1VOVVNFRChidWZmZXJfcCk7CiAJR0lUX1VOVVNFRChsZW5fcCk7CiAJR0lUX1VOVVNFRCh0eXBlX3ApOwpAQCAtODksNiArOTEsNyBAQAogCiAJZmFrZS0+cmVhZF9wcmVmaXhfY2FsbHMrKzsKIAorCWdpdF9vaWRfY3B5KG91dF9vaWQsICZfb2lkKTsKIAkqbGVuX3AgPSAwOwogCSpidWZmZXJfcCA9IE5VTEw7CiAJKnR5cGVfcCA9IEdJVF9PQkpfQkxPQjsKQEAgLTEzMCw3ICsxMzMsNyBAQAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgdm9pZCBzZXR1cF9yZXBvc2l0b3J5X2FuZF9iYWNrZW5kKGdpdF9lcnJvcl9jb2RlIGVycm9yX2NvZGUpCitzdGF0aWMgdm9pZCBzZXR1cF9yZXBvc2l0b3J5X2FuZF9iYWNrZW5kKGdpdF9lcnJvcl9jb2RlIGVycm9yX2NvZGUsIGNvbnN0IGNoYXIgKmhhc2gpCiB7CiAJZ2l0X29kYiAqb2RiID0gTlVMTDsKIAlnaXRfb2RiX2JhY2tlbmQgKmJhY2tlbmQgPSBOVUxMOwpAQCAtMTQ0LDcgKzE0Nyw3IEBACiAKIAlfZmFrZSA9IChmYWtlX2JhY2tlbmQgKiliYWNrZW5kOwogCi0JY2xfZ2l0X3Bhc3MoZ2l0X29pZF9mcm9tc3RyKCZfb2lkLCAiZGVhZGJlZWZkZWFkYmVlZmRlYWRiZWVmZGVhZGJlZWZkZWFkYmVlZiIpKTsKKwljbF9naXRfcGFzcyhnaXRfb2lkX2Zyb21zdHIoJl9vaWQsIGhhc2gpKTsKIH0KIAogdm9pZCB0ZXN0X29kYl9iYWNrZW5kX25vbnJlZnJlc2hpbmdfX2NsZWFudXAodm9pZCkKQEAgLTE1Niw3ICsxNTksNyBAQAogewogCWdpdF9vZGIgKm9kYjsKIAotCXNldHVwX3JlcG9zaXRvcnlfYW5kX2JhY2tlbmQoR0lUX0VOT1RGT1VORCk7CisJc2V0dXBfcmVwb3NpdG9yeV9hbmRfYmFja2VuZChHSVRfRU5PVEZPVU5ELCBIQVNIKTsKIAogCWNsX2dpdF9wYXNzKGdpdF9yZXBvc2l0b3J5X29kYl9fd2Vha3B0cigmb2RiLCBfcmVwbykpOwogCWNsX2Fzc2VydF9lcXVhbF9iKGZhbHNlLCBnaXRfb2RiX2V4aXN0cyhvZGIsICZfb2lkKSk7CkBAIC0xNjgsNyArMTcxLDcgQEAKIHsKIAlnaXRfb2JqZWN0ICpvYmo7CiAKLQlzZXR1cF9yZXBvc2l0b3J5X2FuZF9iYWNrZW5kKEdJVF9FTk9URk9VTkQpOworCXNldHVwX3JlcG9zaXRvcnlfYW5kX2JhY2tlbmQoR0lUX0VOT1RGT1VORCwgSEFTSCk7CiAKIAljbF9naXRfZmFpbF93aXRoKAogCQlnaXRfb2JqZWN0X2xvb2t1cCgmb2JqLCBfcmVwbywgJl9vaWQsIEdJVF9PQkpfQU5ZKSwKQEAgLTE4MSw3ICsxODQsNyBAQAogewogCWdpdF9vYmplY3QgKm9iajsKIAotCXNldHVwX3JlcG9zaXRvcnlfYW5kX2JhY2tlbmQoR0lUX0VOT1RGT1VORCk7CisJc2V0dXBfcmVwb3NpdG9yeV9hbmRfYmFja2VuZChHSVRfRU5PVEZPVU5ELCBIQVNIKTsKIAogCWNsX2dpdF9mYWlsX3dpdGgoCiAJCWdpdF9vYmplY3RfbG9va3VwX3ByZWZpeCgmb2JqLCBfcmVwbywgJl9vaWQsIDcsIEdJVF9PQkpfQU5ZKSwKQEAgLTE5Niw3ICsxOTksNyBAQAogCXNpemVfdCBsZW47CiAJZ2l0X290eXBlIHR5cGU7CiAKLQlzZXR1cF9yZXBvc2l0b3J5X2FuZF9iYWNrZW5kKEdJVF9FTk9URk9VTkQpOworCXNldHVwX3JlcG9zaXRvcnlfYW5kX2JhY2tlbmQoR0lUX0VOT1RGT1VORCwgSEFTSCk7CiAKIAljbF9naXRfcGFzcyhnaXRfcmVwb3NpdG9yeV9vZGJfX3dlYWtwdHIoJm9kYiwgX3JlcG8pKTsKIApAQCAtMjExLDcgKzIxNCw3IEBACiB7CiAJZ2l0X29kYiAqb2RiOwogCi0Jc2V0dXBfcmVwb3NpdG9yeV9hbmRfYmFja2VuZChHSVRfT0spOworCXNldHVwX3JlcG9zaXRvcnlfYW5kX2JhY2tlbmQoR0lUX09LLCBIQVNIKTsKIAogCWNsX2dpdF9wYXNzKGdpdF9yZXBvc2l0b3J5X29kYl9fd2Vha3B0cigmb2RiLCBfcmVwbykpOwogCWNsX2Fzc2VydF9lcXVhbF9iKHRydWUsIGdpdF9vZGJfZXhpc3RzKG9kYiwgJl9vaWQpKTsKQEAgLTIyMyw3ICsyMjYsNyBAQAogewogCWdpdF9vYmplY3QgKm9iajsKIAotCXNldHVwX3JlcG9zaXRvcnlfYW5kX2JhY2tlbmQoR0lUX09LKTsKKwlzZXR1cF9yZXBvc2l0b3J5X2FuZF9iYWNrZW5kKEdJVF9PSywgRU1QVFlfSEFTSCk7CiAKIAljbF9naXRfcGFzcyhnaXRfb2JqZWN0X2xvb2t1cCgmb2JqLCBfcmVwbywgJl9vaWQsIEdJVF9PQkpfQU5ZKSk7CiAKQEAgLTIzNiw3ICsyMzksNyBAQAogewogCWdpdF9vYmplY3QgKm9iajsKIAotCXNldHVwX3JlcG9zaXRvcnlfYW5kX2JhY2tlbmQoR0lUX09LKTsKKwlzZXR1cF9yZXBvc2l0b3J5X2FuZF9iYWNrZW5kKEdJVF9PSywgRU1QVFlfSEFTSCk7CiAKIAljbF9naXRfcGFzcyhnaXRfb2JqZWN0X2xvb2t1cF9wcmVmaXgoJm9iaiwgX3JlcG8sICZfb2lkLCA3LCBHSVRfT0JKX0FOWSkpOwogCkBAIC0yNTEsNyArMjU0LDcgQEAKIAlzaXplX3QgbGVuOwogCWdpdF9vdHlwZSB0eXBlOwogCi0Jc2V0dXBfcmVwb3NpdG9yeV9hbmRfYmFja2VuZChHSVRfT0spOworCXNldHVwX3JlcG9zaXRvcnlfYW5kX2JhY2tlbmQoR0lUX09LLCBIQVNIKTsKIAogCWNsX2dpdF9wYXNzKGdpdF9yZXBvc2l0b3J5X29kYl9fd2Vha3B0cigmb2RiLCBfcmVwbykpOwogCkBAIC0yNjQsNyArMjY3LDcgQEAKIHsKIAlnaXRfb2JqZWN0ICpvYmo7CiAKLQlzZXR1cF9yZXBvc2l0b3J5X2FuZF9iYWNrZW5kKEdJVF9FTk9URk9VTkQpOworCXNldHVwX3JlcG9zaXRvcnlfYW5kX2JhY2tlbmQoR0lUX0VOT1RGT1VORCwgSEFTSCk7CiAKIAljbF9naXRfZmFpbF93aXRoKAogCQlnaXRfcmV2cGFyc2Vfc2luZ2xlKCZvYmosIF9yZXBvLCAiZGVhZGJlZWZkZWFkYmVlZmRlYWRiZWVmZGVhZGJlZWZkZWFkYmVlZiIpLApkaWZmIC0tZ2l0IGEvdGVzdHMvb2RiL2ZyZXNoZW4uYyBiL3Rlc3RzL29kYi9mcmVzaGVuLmMKaW5kZXggZDhkNmMwMi4uOWQzY2Y1MSAxMDA2NDQKLS0tIGEvdGVzdHMvb2RiL2ZyZXNoZW4uYworKysgYi90ZXN0cy9vZGIvZnJlc2hlbi5jCkBAIC0xNywzNiArMTcsMTI2IEBACiAJY2xfZ2l0X3NhbmRib3hfY2xlYW51cCgpOwogfQogCi0jZGVmaW5lIExPT1NFX1NUUiAiaGV5XG4iCi0jZGVmaW5lIExPT1NFX0lEICAiMTM4NWYyNjRhZmI3NWE1NmE1YmVjNzQyNDNiZTliMzY3YmE0Y2EwOCIKLSNkZWZpbmUgTE9PU0VfRk4gICIxMy84NWYyNjRhZmI3NWE1NmE1YmVjNzQyNDNiZTliMzY3YmE0Y2EwOCIKK3N0YXRpYyB2b2lkIHNldF90aW1lX3dheWJhY2soc3RydWN0IHN0YXQgKm91dCwgY29uc3QgY2hhciAqZm4pCit7CisJZ2l0X2J1ZiBmdWxscGF0aCA9IEdJVF9CVUZfSU5JVDsKKwlzdHJ1Y3QgcF90aW1ldmFsIG9sZFsyXTsKIAotdm9pZCB0ZXN0X29kYl9mcmVzaGVuX19sb29zZV9vYmplY3Qodm9pZCkKKwlvbGRbMF0udHZfc2VjID0gMTIzNDU2Nzg5MDsKKwlvbGRbMF0udHZfdXNlYyA9IDA7CisJb2xkWzFdLnR2X3NlYyA9IDEyMzQ1Njc4OTA7CisJb2xkWzFdLnR2X3VzZWMgPSAwOworCisJZ2l0X2J1Zl9qb2lucGF0aCgmZnVsbHBhdGgsICJ0ZXN0cmVwby5naXQvb2JqZWN0cyIsIGZuKTsKKworCWNsX211c3RfcGFzcyhwX3V0aW1lcyhnaXRfYnVmX2NzdHIoJmZ1bGxwYXRoKSwgb2xkKSk7CisJY2xfbXVzdF9wYXNzKHBfbHN0YXQoZ2l0X2J1Zl9jc3RyKCZmdWxscGF0aCksIG91dCkpOworCWdpdF9idWZfZnJlZSgmZnVsbHBhdGgpOworfQorCisjZGVmaW5lIExPT1NFX1NUUiAgICAgIm15IG5ldyBmaWxlXG4iCisjZGVmaW5lIExPT1NFX0JMT0JfSUQgImE3MTU4NmMxZGZlOGE3MWM2Y2JmNmMxMjlmNDA0YzU2NDJmZjMxYmQiCisjZGVmaW5lIExPT1NFX0JMT0JfRk4gImE3LzE1ODZjMWRmZThhNzFjNmNiZjZjMTI5ZjQwNGM1NjQyZmYzMWJkIgorCit2b2lkIHRlc3Rfb2RiX2ZyZXNoZW5fX2xvb3NlX2Jsb2Iodm9pZCkKIHsKIAlnaXRfb2lkIGV4cGVjdGVkX2lkLCBpZDsKIAlzdHJ1Y3Qgc3RhdCBiZWZvcmUsIGFmdGVyOwotCXN0cnVjdCBwX3RpbWV2YWwgb2xkX3RpbWVzWzJdOwogCi0JY2xfZ2l0X3Bhc3MoZ2l0X29pZF9mcm9tc3RyKCZleHBlY3RlZF9pZCwgTE9PU0VfSUQpKTsKKwljbF9naXRfcGFzcyhnaXRfb2lkX2Zyb21zdHIoJmV4cGVjdGVkX2lkLCBMT09TRV9CTE9CX0lEKSk7CisJc2V0X3RpbWVfd2F5YmFjaygmYmVmb3JlLCBMT09TRV9CTE9CX0ZOKTsKIAotCW9sZF90aW1lc1swXS50dl9zZWMgPSAxMjM0NTY3ODkwOwotCW9sZF90aW1lc1swXS50dl91c2VjID0gMDsKLQlvbGRfdGltZXNbMV0udHZfc2VjID0gMTIzNDU2Nzg5MDsKLQlvbGRfdGltZXNbMV0udHZfdXNlYyA9IDA7Ci0KLQkvKiBzZXQgdGltZSB0byB3YXkgYmFjayAqLwotCWNsX211c3RfcGFzcyhwX3V0aW1lcygidGVzdHJlcG8uZ2l0L29iamVjdHMvIiBMT09TRV9GTiwgb2xkX3RpbWVzKSk7Ci0JY2xfbXVzdF9wYXNzKHBfbHN0YXQoInRlc3RyZXBvLmdpdC9vYmplY3RzLyIgTE9PU0VfRk4sICZiZWZvcmUpKTsKLQotCWNsX2dpdF9wYXNzKGdpdF9vZGJfd3JpdGUoJmlkLCBvZGIsIExPT1NFX1NUUiwgQ09OU1RfU1RSTEVOKExPT1NFX1NUUiksCi0JCUdJVF9PQkpfQkxPQikpOworCS8qIG1ha2Ugc3VyZSB3ZSBmcmVzaGVuIGEgYmxvYiAqLworCWNsX2dpdF9wYXNzKGdpdF9ibG9iX2NyZWF0ZV9mcm9tYnVmZmVyKCZpZCwgcmVwbywgTE9PU0VfU1RSLCBDT05TVF9TVFJMRU4oTE9PU0VfU1RSKSkpOwogCWNsX2Fzc2VydF9lcXVhbF9vaWQoJmV4cGVjdGVkX2lkLCAmaWQpOwotCWNsX211c3RfcGFzcyhwX2xzdGF0KCJ0ZXN0cmVwby5naXQvb2JqZWN0cy8iIExPT1NFX0ZOLCAmYWZ0ZXIpKTsKKwljbF9tdXN0X3Bhc3MocF9sc3RhdCgidGVzdHJlcG8uZ2l0L29iamVjdHMvIiBMT09TRV9CTE9CX0ZOLCAmYWZ0ZXIpKTsKIAogCWNsX2Fzc2VydChiZWZvcmUuc3RfYXRpbWUgPCBhZnRlci5zdF9hdGltZSk7CiAJY2xfYXNzZXJ0KGJlZm9yZS5zdF9tdGltZSA8IGFmdGVyLnN0X210aW1lKTsKIH0KIAorI2RlZmluZSBVTklRVUVfU1RSICAgICAiZG9lc250IGV4aXN0IGluIHRoZSBvZGIgeWV0XG4iCisjZGVmaW5lIFVOSVFVRV9CTE9CX0lEICI3OGE4N2QwYjg4NzhjNTk1M2I5YTYzMDE1ZmY0ZTIyYTNkODk4ODI2IgorI2RlZmluZSBVTklRVUVfQkxPQl9GTiAiNzgvYTg3ZDBiODg3OGM1OTUzYjlhNjMwMTVmZjRlMjJhM2Q4OTg4MjYiCisKK3ZvaWQgdGVzdF9vZGJfZnJlc2hlbl9fcmVhZG9ubHlfb2JqZWN0KHZvaWQpCit7CisJZ2l0X29pZCBleHBlY3RlZF9pZCwgaWQ7CisJc3RydWN0IHN0YXQgYmVmb3JlLCBhZnRlcjsKKworCWNsX2dpdF9wYXNzKGdpdF9vaWRfZnJvbXN0cigmZXhwZWN0ZWRfaWQsIFVOSVFVRV9CTE9CX0lEKSk7CisKKwljbF9naXRfcGFzcyhnaXRfYmxvYl9jcmVhdGVfZnJvbWJ1ZmZlcigmaWQsIHJlcG8sIFVOSVFVRV9TVFIsIENPTlNUX1NUUkxFTihVTklRVUVfU1RSKSkpOworCWNsX2Fzc2VydF9lcXVhbF9vaWQoJmV4cGVjdGVkX2lkLCAmaWQpOworCisJc2V0X3RpbWVfd2F5YmFjaygmYmVmb3JlLCBVTklRVUVfQkxPQl9GTik7CisJY2xfYXNzZXJ0KChiZWZvcmUuc3RfbW9kZSAmIFNfSVdVU1IpID09IDApOworCisJY2xfZ2l0X3Bhc3MoZ2l0X2Jsb2JfY3JlYXRlX2Zyb21idWZmZXIoJmlkLCByZXBvLCBVTklRVUVfU1RSLCBDT05TVF9TVFJMRU4oVU5JUVVFX1NUUikpKTsKKwljbF9hc3NlcnRfZXF1YWxfb2lkKCZleHBlY3RlZF9pZCwgJmlkKTsKKwljbF9tdXN0X3Bhc3MocF9sc3RhdCgidGVzdHJlcG8uZ2l0L29iamVjdHMvIiBVTklRVUVfQkxPQl9GTiwgJmFmdGVyKSk7CisKKwljbF9hc3NlcnQoYmVmb3JlLnN0X2F0aW1lIDwgYWZ0ZXIuc3RfYXRpbWUpOworCWNsX2Fzc2VydChiZWZvcmUuc3RfbXRpbWUgPCBhZnRlci5zdF9tdGltZSk7Cit9CisKKyNkZWZpbmUgTE9PU0VfVFJFRV9JRCAiOTQ0YzBmNmU0ZGZhNDE1OTVlNmViM2NlZWNkYjE0ZjUwZmUxODE2MiIKKyNkZWZpbmUgTE9PU0VfVFJFRV9GTiAiOTQvNGMwZjZlNGRmYTQxNTk1ZTZlYjNjZWVjZGIxNGY1MGZlMTgxNjIiCisKK3ZvaWQgdGVzdF9vZGJfZnJlc2hlbl9fbG9vc2VfdHJlZSh2b2lkKQoreworCWdpdF9vaWQgZXhwZWN0ZWRfaWQsIGlkOworCWdpdF90cmVlICp0cmVlOworCXN0cnVjdCBzdGF0IGJlZm9yZSwgYWZ0ZXI7CisKKwljbF9naXRfcGFzcyhnaXRfb2lkX2Zyb21zdHIoJmV4cGVjdGVkX2lkLCBMT09TRV9UUkVFX0lEKSk7CisJc2V0X3RpbWVfd2F5YmFjaygmYmVmb3JlLCBMT09TRV9UUkVFX0ZOKTsKKworCWNsX2dpdF9wYXNzKGdpdF90cmVlX2xvb2t1cCgmdHJlZSwgcmVwbywgJmV4cGVjdGVkX2lkKSk7CisJY2xfZ2l0X3Bhc3MoZ2l0X3RyZWVfY3JlYXRlX3VwZGF0ZWQoJmlkLCByZXBvLCB0cmVlLCAwLCBOVUxMKSk7CisKKwkvKiBtYWtlIHN1cmUgd2UgZnJlc2hlbiBhIHRyZWUgKi8KKwljbF9hc3NlcnRfZXF1YWxfb2lkKCZleHBlY3RlZF9pZCwgJmlkKTsKKwljbF9tdXN0X3Bhc3MocF9sc3RhdCgidGVzdHJlcG8uZ2l0L29iamVjdHMvIiBMT09TRV9UUkVFX0ZOLCAmYWZ0ZXIpKTsKKworCWNsX2Fzc2VydChiZWZvcmUuc3RfYXRpbWUgPCBhZnRlci5zdF9hdGltZSk7CisJY2xfYXNzZXJ0KGJlZm9yZS5zdF9tdGltZSA8IGFmdGVyLnN0X210aW1lKTsKKworCWdpdF90cmVlX2ZyZWUodHJlZSk7Cit9CisKK3ZvaWQgdGVzdF9vZGJfZnJlc2hlbl9fdHJlZV9kdXJpbmdfY29tbWl0KHZvaWQpCit7CisJZ2l0X29pZCB0cmVlX2lkLCBwYXJlbnRfaWQsIGNvbW1pdF9pZDsKKwlnaXRfdHJlZSAqdHJlZTsKKwlnaXRfY29tbWl0ICpwYXJlbnQ7CisJZ2l0X3NpZ25hdHVyZSAqc2lnbmF0dXJlOworCXN0cnVjdCBzdGF0IGJlZm9yZSwgYWZ0ZXI7CisKKwljbF9naXRfcGFzcyhnaXRfb2lkX2Zyb21zdHIoJnRyZWVfaWQsIExPT1NFX1RSRUVfSUQpKTsKKwljbF9naXRfcGFzcyhnaXRfdHJlZV9sb29rdXAoJnRyZWUsIHJlcG8sICZ0cmVlX2lkKSk7CisJc2V0X3RpbWVfd2F5YmFjaygmYmVmb3JlLCBMT09TRV9UUkVFX0ZOKTsKKworCWNsX2dpdF9wYXNzKGdpdF9vaWRfZnJvbXN0cigmcGFyZW50X2lkLCAiYTY1ZmVkZjM5YWVmZTQwMmQzYmI2ZTI0ZGY0ZDRmNWZlNDU0Nzc1MCIpKTsKKwljbF9naXRfcGFzcyhnaXRfY29tbWl0X2xvb2t1cCgmcGFyZW50LCByZXBvLCAmcGFyZW50X2lkKSk7CisKKwljbF9naXRfcGFzcyhnaXRfc2lnbmF0dXJlX25ldygmc2lnbmF0dXJlLAorCQkiUmVmcmVzaGVyIiwgInJlZnJlc2hlckBleGFtcGxlLmNvbSIsIDE0ODg1NDcwODMsIDApKTsKKworCWNsX2dpdF9wYXNzKGdpdF9jb21taXRfY3JlYXRlKCZjb21taXRfaWQsIHJlcG8sIE5VTEwsCisJCXNpZ25hdHVyZSwgc2lnbmF0dXJlLCBOVUxMLCAiTmV3IGNvbW1pdCBwb2ludGluZyB0byBvbGQgdHJlZSIsCisJCXRyZWUsIDEsIChjb25zdCBnaXRfY29tbWl0ICoqKSZwYXJlbnQpKTsKKworCS8qIG1ha2Ugc3VyZSB3ZSBmcmVzaGVuIHRoZSB0cmVlIHRoZSBjb21taXQgcG9pbnRzIHRvICovCisJY2xfbXVzdF9wYXNzKHBfbHN0YXQoInRlc3RyZXBvLmdpdC9vYmplY3RzLyIgTE9PU0VfVFJFRV9GTiwgJmFmdGVyKSk7CisJY2xfYXNzZXJ0KGJlZm9yZS5zdF9hdGltZSA8IGFmdGVyLnN0X2F0aW1lKTsKKwljbF9hc3NlcnQoYmVmb3JlLnN0X210aW1lIDwgYWZ0ZXIuc3RfbXRpbWUpOworCisJZ2l0X3NpZ25hdHVyZV9mcmVlKHNpZ25hdHVyZSk7CisJZ2l0X2NvbW1pdF9mcmVlKHBhcmVudCk7CisJZ2l0X3RyZWVfZnJlZSh0cmVlKTsKK30KKwogI2RlZmluZSBQQUNLRURfU1RSICJUZXN0aW5nIGEgcmVhZG1lLnR4dFxuIgogI2RlZmluZSBQQUNLRURfSUQgICI2MzM2ODQ2YmQ1Yzg4ZDMyZjkzYWU1N2Q4NDY2ODNlNjFhYjVjNTMwIgogI2RlZmluZSBQQUNLRURfRk4gICJwYWNrLWQ4NWY1ZDQ4MzI3MzEwOGM5ZDhkZDBlNDcyOGNjZjBiMjk4MjQyM2EucGFjayIKZGlmZiAtLWdpdCBhL3Rlc3RzL29kYi9sb29zZS5jIGIvdGVzdHMvb2RiL2xvb3NlLmMKaW5kZXggYzkxOTI3Yy4uMmUyNGQ2NyAxMDA2NDQKLS0tIGEvdGVzdHMvb2RiL2xvb3NlLmMKKysrIGIvdGVzdHMvb2RiL2xvb3NlLmMKQEAgLTMsNiArMyw3IEBACiAjaW5jbHVkZSAiZ2l0Mi9vZGJfYmFja2VuZC5oIgogI2luY2x1ZGUgInBvc2l4LmgiCiAjaW5jbHVkZSAibG9vc2VfZGF0YS5oIgorI2luY2x1ZGUgInJlcG9zaXRvcnkuaCIKIAogI2lmZGVmIF9fQU5EUk9JRF9BUElfXwogIyBkZWZpbmUgU19JUkVBRCAgICAgICAgU19JUlVTUgpAQCAtNTYsMTEgKzU3LDEzIEBACiAKIHZvaWQgdGVzdF9vZGJfbG9vc2VfX2luaXRpYWxpemUodm9pZCkKIHsKKwlwX2ZzeW5jX19jbnQgPSAwOwogCWNsX211c3RfcGFzcyhwX21rZGlyKCJ0ZXN0LW9iamVjdHMiLCBHSVRfT0JKRUNUX0RJUl9NT0RFKSk7CiB9CiAKIHZvaWQgdGVzdF9vZGJfbG9vc2VfX2NsZWFudXAodm9pZCkKIHsKKwljbF9naXRfcGFzcyhnaXRfbGliZ2l0Ml9vcHRzKEdJVF9PUFRfRU5BQkxFX0ZTWU5DX0dJVERJUiwgMCkpOwogCWNsX2ZpeHR1cmVfY2xlYW51cCgidGVzdC1vYmplY3RzIik7CiB9CiAKQEAgLTE1MCwzICsxNTMsNTUgQEAKIHsKIAl0ZXN0X3dyaXRlX29iamVjdF9wZXJtaXNzaW9uKDA3NzcsIDA2NjYsIDA3NzcsIDA2NjYpOwogfQorCitzdGF0aWMgdm9pZCB3cml0ZV9vYmplY3RfdG9fbG9vc2Vfb2RiKGludCBmc3luYykKK3sKKwlnaXRfb2RiICpvZGI7CisJZ2l0X29kYl9iYWNrZW5kICpiYWNrZW5kOworCWdpdF9vaWQgb2lkOworCisJY2xfZ2l0X3Bhc3MoZ2l0X29kYl9uZXcoJm9kYikpOworCWNsX2dpdF9wYXNzKGdpdF9vZGJfYmFja2VuZF9sb29zZSgmYmFja2VuZCwgInRlc3Qtb2JqZWN0cyIsIC0xLCBmc3luYywgMDc3NywgMDY2NikpOworCWNsX2dpdF9wYXNzKGdpdF9vZGJfYWRkX2JhY2tlbmQob2RiLCBiYWNrZW5kLCAxKSk7CisJY2xfZ2l0X3Bhc3MoZ2l0X29kYl93cml0ZSgmb2lkLCBvZGIsICJUZXN0IGRhdGFcbiIsIDEwLCBHSVRfT0JKX0JMT0IpKTsKKwlnaXRfb2RiX2ZyZWUob2RiKTsKK30KKwordm9pZCB0ZXN0X29kYl9sb29zZV9fZG9lc19ub3RfZnN5bmNfYnlfZGVmYXVsdCh2b2lkKQoreworCXdyaXRlX29iamVjdF90b19sb29zZV9vZGIoMCk7CisJY2xfYXNzZXJ0X2VxdWFsX3N6KDAsIHBfZnN5bmNfX2NudCk7Cit9CisKK3ZvaWQgdGVzdF9vZGJfbG9vc2VfX2ZzeW5jX29iZXlzX29kYl9vcHRpb24odm9pZCkKK3sKKwl3cml0ZV9vYmplY3RfdG9fbG9vc2Vfb2RiKDEpOworCWNsX2Fzc2VydChwX2ZzeW5jX19jbnQgPiAwKTsKK30KKwordm9pZCB0ZXN0X29kYl9sb29zZV9fZnN5bmNfb2JleXNfZ2xvYmFsX3NldHRpbmcodm9pZCkKK3sKKwljbF9naXRfcGFzcyhnaXRfbGliZ2l0Ml9vcHRzKEdJVF9PUFRfRU5BQkxFX0ZTWU5DX0dJVERJUiwgMSkpOworCXdyaXRlX29iamVjdF90b19sb29zZV9vZGIoMCk7CisJY2xfYXNzZXJ0KHBfZnN5bmNfX2NudCA+IDApOworfQorCit2b2lkIHRlc3Rfb2RiX2xvb3NlX19mc3luY19vYmV5c19yZXBvX3NldHRpbmcodm9pZCkKK3sKKwlnaXRfcmVwb3NpdG9yeSAqcmVwbzsKKwlnaXRfb2RiICpvZGI7CisJZ2l0X29pZCBvaWQ7CisKKwljbF9naXRfcGFzcyhnaXRfcmVwb3NpdG9yeV9pbml0KCZyZXBvLCAidGVzdC1vYmplY3RzIiwgMSkpOworCWNsX2dpdF9wYXNzKGdpdF9yZXBvc2l0b3J5X29kYl9fd2Vha3B0cigmb2RiLCByZXBvKSk7CisJY2xfZ2l0X3Bhc3MoZ2l0X29kYl93cml0ZSgmb2lkLCBvZGIsICJObyBmc3luYyBoZXJlXG4iLCAxNCwgR0lUX09CSl9CTE9CKSk7CisJY2xfYXNzZXJ0KHBfZnN5bmNfX2NudCA9PSAwKTsKKwlnaXRfcmVwb3NpdG9yeV9mcmVlKHJlcG8pOworCisJY2xfZ2l0X3Bhc3MoZ2l0X3JlcG9zaXRvcnlfb3BlbigmcmVwbywgInRlc3Qtb2JqZWN0cyIpKTsKKwljbF9yZXBvX3NldF9ib29sKHJlcG8sICJjb3JlLmZzeW5jT2JqZWN0RmlsZXMiLCB0cnVlKTsKKwljbF9naXRfcGFzcyhnaXRfcmVwb3NpdG9yeV9vZGJfX3dlYWtwdHIoJm9kYiwgcmVwbykpOworCWNsX2dpdF9wYXNzKGdpdF9vZGJfd3JpdGUoJm9pZCwgb2RiLCAiTm93IGZzeW5jXG4iLCAxMCwgR0lUX09CSl9CTE9CKSk7CisJY2xfYXNzZXJ0KHBfZnN5bmNfX2NudCA+IDApOworCWdpdF9yZXBvc2l0b3J5X2ZyZWUocmVwbyk7Cit9CmRpZmYgLS1naXQgYS90ZXN0cy9vbmxpbmUvYmFkc3NsLmMgYi90ZXN0cy9vbmxpbmUvYmFkc3NsLmMKaW5kZXggYWE0YzI0ZC4uNjUyNGZjZCAxMDA2NDQKLS0tIGEvdGVzdHMvb25saW5lL2JhZHNzbC5jCisrKyBiL3Rlc3RzL29ubGluZS9iYWRzc2wuYwpAQCAtNCw3ICs0LDcgQEAKIAogc3RhdGljIGdpdF9yZXBvc2l0b3J5ICpnX3JlcG87CiAKLSNpZiBkZWZpbmVkKEdJVF9PUEVOU1NMKSB8fCBkZWZpbmVkKEdJVF9XSU5IVFRQKSB8fCBkZWZpbmVkKEdJVF9TRUNVUkVfVFJBTlNQT1JUKQorI2lmZGVmIEdJVF9IVFRQUwogc3RhdGljIGJvb2wgZ19oYXNfc3NsID0gdHJ1ZTsKICNlbHNlCiBzdGF0aWMgYm9vbCBnX2hhc19zc2wgPSBmYWxzZTsKZGlmZiAtLWdpdCBhL3Rlc3RzL3BhY2svcGFja2J1aWxkZXIuYyBiL3Rlc3RzL3BhY2svcGFja2J1aWxkZXIuYwppbmRleCA5YWQ1MmYzLi4xM2VlMDczIDEwMDY0NAotLS0gYS90ZXN0cy9wYWNrL3BhY2tidWlsZGVyLmMKKysrIGIvdGVzdHMvcGFjay9wYWNrYnVpbGRlci5jCkBAIC0yMyw2ICsyMyw3IEBACiAJY2xfZ2l0X3Bhc3MoZ2l0X3ZlY3Rvcl9pbml0KCZfY29tbWl0cywgMCwgTlVMTCkpOwogCV9jb21taXRzX2lzX2luaXRpYWxpemVkID0gMTsKIAltZW1zZXQoJl9zdGF0cywgMCwgc2l6ZW9mKF9zdGF0cykpOworCXBfZnN5bmNfX2NudCA9IDA7CiB9CiAKIHZvaWQgdGVzdF9wYWNrX3BhY2tidWlsZGVyX19jbGVhbnVwKHZvaWQpCkBAIC0zMCw2ICszMSw4IEBACiAJZ2l0X29pZCAqbzsKIAl1bnNpZ25lZCBpbnQgaTsKIAorCWNsX2dpdF9wYXNzKGdpdF9saWJnaXQyX29wdHMoR0lUX09QVF9FTkFCTEVfRlNZTkNfR0lURElSLCAwKSk7CisKIAlpZiAoX2NvbW1pdHNfaXNfaW5pdGlhbGl6ZWQpIHsKIAkJX2NvbW1pdHNfaXNfaW5pdGlhbGl6ZWQgPSAwOwogCQlnaXRfdmVjdG9yX2ZvcmVhY2goJl9jb21taXRzLCBpLCBvKSB7CkBAIC0xODgsNiArMTkxLDQwIEBACiAJdGVzdF93cml0ZV9wYWNrX3Blcm1pc3Npb24oMDY2NiwgMDY2Nik7CiB9CiAKK3ZvaWQgdGVzdF9wYWNrX3BhY2tidWlsZGVyX19kb2VzX25vdF9mc3luY19ieV9kZWZhdWx0KHZvaWQpCit7CisJc2VlZF9wYWNrYnVpbGRlcigpOworCWdpdF9wYWNrYnVpbGRlcl93cml0ZShfcGFja2J1aWxkZXIsICIuIiwgMDY2NiwgTlVMTCwgTlVMTCk7CisJY2xfYXNzZXJ0X2VxdWFsX3N6KDAsIHBfZnN5bmNfX2NudCk7Cit9CisKKy8qIFdlIGZzeW5jIHRoZSBwYWNrZmlsZSBhbmQgaW5kZXguICBPbiBub24tV2luZG93cywgd2UgYWxzbyBmc3luYworICogdGhlIHBhcmVudCBkaXJlY3Rvcmllcy4KKyAqLworI2lmZGVmIEdJVF9XSU4zMgorc3RhdGljIGludCBleHBlY3RlZF9mc3luY3MgPSAyOworI2Vsc2UKK3N0YXRpYyBpbnQgZXhwZWN0ZWRfZnN5bmNzID0gNDsKKyNlbmRpZgorCit2b2lkIHRlc3RfcGFja19wYWNrYnVpbGRlcl9fZnN5bmNfZ2xvYmFsX3NldHRpbmcodm9pZCkKK3sKKwljbF9naXRfcGFzcyhnaXRfbGliZ2l0Ml9vcHRzKEdJVF9PUFRfRU5BQkxFX0ZTWU5DX0dJVERJUiwgMSkpOworCXBfZnN5bmNfX2NudCA9IDA7CisJc2VlZF9wYWNrYnVpbGRlcigpOworCWdpdF9wYWNrYnVpbGRlcl93cml0ZShfcGFja2J1aWxkZXIsICIuIiwgMDY2NiwgTlVMTCwgTlVMTCk7CisJY2xfYXNzZXJ0X2VxdWFsX3N6KGV4cGVjdGVkX2ZzeW5jcywgcF9mc3luY19fY250KTsKK30KKwordm9pZCB0ZXN0X3BhY2tfcGFja2J1aWxkZXJfX2ZzeW5jX3JlcG9fc2V0dGluZyh2b2lkKQoreworCWNsX3JlcG9fc2V0X2Jvb2woX3JlcG8sICJjb3JlLmZzeW5jT2JqZWN0RmlsZXMiLCB0cnVlKTsKKwlwX2ZzeW5jX19jbnQgPSAwOworCXNlZWRfcGFja2J1aWxkZXIoKTsKKwlnaXRfcGFja2J1aWxkZXJfd3JpdGUoX3BhY2tidWlsZGVyLCAiLiIsIDA2NjYsIE5VTEwsIE5VTEwpOworCWNsX2Fzc2VydF9lcXVhbF9zeihleHBlY3RlZF9mc3luY3MsIHBfZnN5bmNfX2NudCk7Cit9CisKIHN0YXRpYyBpbnQgZm9yZWFjaF9jYih2b2lkICpidWYsIHNpemVfdCBsZW4sIHZvaWQgKnBheWxvYWQpCiB7CiAJZ2l0X2luZGV4ZXIgKmlkeCA9IChnaXRfaW5kZXhlciAqKSBwYXlsb2FkOwpkaWZmIC0tZ2l0IGEvdGVzdHMvcmViYXNlL3N1Ym1vZHVsZS5jIGIvdGVzdHMvcmViYXNlL3N1Ym1vZHVsZS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjdhMzhhYjgKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9yZWJhc2Uvc3VibW9kdWxlLmMKQEAgLTAsMCArMSw2NSBAQAorI2luY2x1ZGUgImNsYXJfbGliZ2l0Mi5oIgorI2luY2x1ZGUgImdpdDIvY2hlY2tvdXQuaCIKKyNpbmNsdWRlICJnaXQyL3JlYmFzZS5oIgorI2luY2x1ZGUgInBvc2l4LmgiCisjaW5jbHVkZSAic2lnbmF0dXJlLmgiCisKKyNpbmNsdWRlIDxmY250bC5oPgorCitzdGF0aWMgZ2l0X3JlcG9zaXRvcnkgKnJlcG87CitzdGF0aWMgZ2l0X3NpZ25hdHVyZSAqc2lnbmF0dXJlOworCisvLyBGaXh0dXJlIHNldHVwIGFuZCB0ZWFyZG93bgordm9pZCB0ZXN0X3JlYmFzZV9zdWJtb2R1bGVfX2luaXRpYWxpemUodm9pZCkKK3sKKwlyZXBvID0gY2xfZ2l0X3NhbmRib3hfaW5pdCgicmViYXNlLXN1Ym1vZHVsZSIpOworCWNsX2dpdF9wYXNzKGdpdF9zaWduYXR1cmVfbmV3KCZzaWduYXR1cmUsCisJCSJSZWJhc2VyIiwgInJlYmFzZXJAcmViYXNlci5yYiIsIDE0MDU2OTQ1MTAsIDApKTsKK30KKwordm9pZCB0ZXN0X3JlYmFzZV9zdWJtb2R1bGVfX2NsZWFudXAodm9pZCkKK3sKKwlnaXRfc2lnbmF0dXJlX2ZyZWUoc2lnbmF0dXJlKTsKKwljbF9naXRfc2FuZGJveF9jbGVhbnVwKCk7Cit9CisKK3ZvaWQgdGVzdF9yZWJhc2Vfc3VibW9kdWxlX19pbml0X3VudHJhY2tlZCh2b2lkKQoreworCWdpdF9yZWJhc2UgKnJlYmFzZTsKKwlnaXRfcmVmZXJlbmNlICpicmFuY2hfcmVmLCAqdXBzdHJlYW1fcmVmOworCWdpdF9hbm5vdGF0ZWRfY29tbWl0ICpicmFuY2hfaGVhZCwgKnVwc3RyZWFtX2hlYWQ7CisJZ2l0X2J1ZiB1bnRyYWNrZWRfcGF0aCA9IEdJVF9CVUZfSU5JVDsKKwlGSUxFICpmcDsKKwlnaXRfc3VibW9kdWxlICpzdWJtb2R1bGU7CisJZ2l0X2NvbmZpZyAqY29uZmlnOworCisJY2xfZ2l0X3Bhc3MoZ2l0X3JlZmVyZW5jZV9sb29rdXAoJmJyYW5jaF9yZWYsIHJlcG8sICJyZWZzL2hlYWRzL2FzcGFyYWd1cyIpKTsKKwljbF9naXRfcGFzcyhnaXRfcmVmZXJlbmNlX2xvb2t1cCgmdXBzdHJlYW1fcmVmLCByZXBvLCAicmVmcy9oZWFkcy9tYXN0ZXIiKSk7CisKKwljbF9naXRfcGFzcyhnaXRfYW5ub3RhdGVkX2NvbW1pdF9mcm9tX3JlZigmYnJhbmNoX2hlYWQsIHJlcG8sIGJyYW5jaF9yZWYpKTsKKwljbF9naXRfcGFzcyhnaXRfYW5ub3RhdGVkX2NvbW1pdF9mcm9tX3JlZigmdXBzdHJlYW1faGVhZCwgcmVwbywgdXBzdHJlYW1fcmVmKSk7CisKKwlnaXRfcmVwb3NpdG9yeV9jb25maWcoJmNvbmZpZywgcmVwbyk7CisKKwljbF9naXRfcGFzcyhnaXRfY29uZmlnX3NldF9zdHJpbmcoY29uZmlnLCAic3VibW9kdWxlLm15LXN1Ym1vZHVsZS51cmwiLCBnaXRfcmVwb3NpdG9yeV9wYXRoKHJlcG8pKSk7CisKKwlnaXRfY29uZmlnX2ZyZWUoY29uZmlnKTsKKworCWNsX2dpdF9wYXNzKGdpdF9zdWJtb2R1bGVfbG9va3VwKCZzdWJtb2R1bGUsIHJlcG8sICJteS1zdWJtb2R1bGUiKSk7CisJY2xfZ2l0X3Bhc3MoZ2l0X3N1Ym1vZHVsZV91cGRhdGUoc3VibW9kdWxlLCAxLCBOVUxMKSk7CisKKwlnaXRfYnVmX3ByaW50ZigmdW50cmFja2VkX3BhdGgsICIlcy9teS1zdWJtb2R1bGUvdW50cmFja2VkIiwgZ2l0X3JlcG9zaXRvcnlfd29ya2RpcihyZXBvKSk7CisJZnAgPSBmb3BlbihnaXRfYnVmX2NzdHIoJnVudHJhY2tlZF9wYXRoKSwgInciKTsKKwlmcHJpbnRmKGZwLCAiQW4gdW50cmFja2VkIGZpbGUgaW4gYSBzdWJtb2R1bGUgc2hvdWxkIG5vdCBibG9jayBhIHJlYmFzZVxuIik7CisJZmNsb3NlKGZwKTsKKwlnaXRfYnVmX2ZyZWUoJnVudHJhY2tlZF9wYXRoKTsKKworCWNsX2dpdF9wYXNzKGdpdF9yZWJhc2VfaW5pdCgmcmViYXNlLCByZXBvLCBicmFuY2hfaGVhZCwgdXBzdHJlYW1faGVhZCwgTlVMTCwgTlVMTCkpOworCisJZ2l0X3N1Ym1vZHVsZV9mcmVlKHN1Ym1vZHVsZSk7CisJZ2l0X2Fubm90YXRlZF9jb21taXRfZnJlZShicmFuY2hfaGVhZCk7CisJZ2l0X2Fubm90YXRlZF9jb21taXRfZnJlZSh1cHN0cmVhbV9oZWFkKTsKKwlnaXRfcmVmZXJlbmNlX2ZyZWUoYnJhbmNoX3JlZik7CisJZ2l0X3JlZmVyZW5jZV9mcmVlKHVwc3RyZWFtX3JlZik7CisJZ2l0X3JlYmFzZV9mcmVlKHJlYmFzZSk7Cit9CmRpZmYgLS1naXQgYS90ZXN0cy9yZWZzL2NyZWF0ZS5jIGIvdGVzdHMvcmVmcy9jcmVhdGUuYwppbmRleCA2ZDVhNWYxLi40NjljZGRkIDEwMDY0NAotLS0gYS90ZXN0cy9yZWZzL2NyZWF0ZS5jCisrKyBiL3Rlc3RzL3JlZnMvY3JlYXRlLmMKQEAgLTEyLDE5ICsxMiwyMiBAQAogCiB2b2lkIHRlc3RfcmVmc19jcmVhdGVfX2luaXRpYWxpemUodm9pZCkKIHsKLSAgIGdfcmVwbyA9IGNsX2dpdF9zYW5kYm94X2luaXQoInRlc3RyZXBvIik7CisJZ19yZXBvID0gY2xfZ2l0X3NhbmRib3hfaW5pdCgidGVzdHJlcG8iKTsKKwlwX2ZzeW5jX19jbnQgPSAwOwogfQogCiB2b2lkIHRlc3RfcmVmc19jcmVhdGVfX2NsZWFudXAodm9pZCkKIHsKLSAgIGNsX2dpdF9zYW5kYm94X2NsZWFudXAoKTsKKwljbF9naXRfc2FuZGJveF9jbGVhbnVwKCk7CiAKIAljbF9naXRfcGFzcyhnaXRfbGliZ2l0Ml9vcHRzKEdJVF9PUFRfRU5BQkxFX1NUUklDVF9PQkpFQ1RfQ1JFQVRJT04sIDEpKTsKKwljbF9naXRfcGFzcyhnaXRfbGliZ2l0Ml9vcHRzKEdJVF9PUFRfRU5BQkxFX1NUUklDVF9TWU1CT0xJQ19SRUZfQ1JFQVRJT04sIDEpKTsKKwljbF9naXRfcGFzcyhnaXRfbGliZ2l0Ml9vcHRzKEdJVF9PUFRfRU5BQkxFX0ZTWU5DX0dJVERJUiwgMCkpOwogfQogCiB2b2lkIHRlc3RfcmVmc19jcmVhdGVfX3N5bWJvbGljKHZvaWQpCiB7Ci0gICAvLyBjcmVhdGUgYSBuZXcgc3ltYm9saWMgcmVmZXJlbmNlCisJLyogY3JlYXRlIGEgbmV3IHN5bWJvbGljIHJlZmVyZW5jZSAqLwogCWdpdF9yZWZlcmVuY2UgKm5ld19yZWZlcmVuY2UsICpsb29rZWRfdXBfcmVmLCAqcmVzb2x2ZWRfcmVmOwogCWdpdF9yZXBvc2l0b3J5ICpyZXBvMjsKIAlnaXRfb2lkIGlkOwpAQCAtNjUsOSArNjgsNTcgQEAKIAlnaXRfcmVmZXJlbmNlX2ZyZWUocmVzb2x2ZWRfcmVmKTsKIH0KIAordm9pZCB0ZXN0X3JlZnNfY3JlYXRlX19zeW1ib2xpY193aXRoX2FyYml0cmFyeV9jb250ZW50KHZvaWQpCit7CisJZ2l0X3JlZmVyZW5jZSAqbmV3X3JlZmVyZW5jZSwgKmxvb2tlZF91cF9yZWY7CisJZ2l0X3JlcG9zaXRvcnkgKnJlcG8yOworCWdpdF9vaWQgaWQ7CisKKwljb25zdCBjaGFyICpuZXdfaGVhZF90cmFja2VyID0gIkFOT1RIRVJfSEVBRF9UUkFDS0VSIjsKKwljb25zdCBjaGFyICphcmJpdHJhcnlfdGFyZ2V0ID0gIkFSQklUUkFSWSBEQVRBIjsKKworCWdpdF9vaWRfZnJvbXN0cigmaWQsIGN1cnJlbnRfbWFzdGVyX3RpcCk7CisKKwkvKiBBdHRlbXB0IHRvIGNyZWF0ZSBzeW1ib2xpYyByZWYgd2l0aCBhcmJpdHJhcnkgZGF0YSBpbiB0YXJnZXQKKwkgKiBmYWlscyBieSBkZWZhdWx0CisJICovCisJY2xfZ2l0X2ZhaWwoZ2l0X3JlZmVyZW5jZV9zeW1ib2xpY19jcmVhdGUoJm5ld19yZWZlcmVuY2UsIGdfcmVwbywgbmV3X2hlYWRfdHJhY2tlciwgYXJiaXRyYXJ5X3RhcmdldCwgMCwgTlVMTCkpOworCisJZ2l0X2xpYmdpdDJfb3B0cyhHSVRfT1BUX0VOQUJMRV9TVFJJQ1RfU1lNQk9MSUNfUkVGX0NSRUFUSU9OLCAwKTsKKworCS8qIFdpdGggc3RyaWN0IHRhcmdldCB2YWxpZGF0aW9uIGRpc2FibGVkLCByZWYgY3JlYXRpb24gc3VjY2VlZHMgKi8KKwljbF9naXRfcGFzcyhnaXRfcmVmZXJlbmNlX3N5bWJvbGljX2NyZWF0ZSgmbmV3X3JlZmVyZW5jZSwgZ19yZXBvLCBuZXdfaGVhZF90cmFja2VyLCBhcmJpdHJhcnlfdGFyZ2V0LCAwLCBOVUxMKSk7CisKKwkvKiBFbnN1cmUgdGhlIHJlZmVyZW5jZSBjYW4gYmUgbG9va2VkLXVwLi4uICovCisJY2xfZ2l0X3Bhc3MoZ2l0X3JlZmVyZW5jZV9sb29rdXAoJmxvb2tlZF91cF9yZWYsIGdfcmVwbywgbmV3X2hlYWRfdHJhY2tlcikpOworCWNsX2Fzc2VydChnaXRfcmVmZXJlbmNlX3R5cGUobG9va2VkX3VwX3JlZikgJiBHSVRfUkVGX1NZTUJPTElDKTsKKwljbF9hc3NlcnQocmVmZXJlbmNlX2lzX3BhY2tlZChsb29rZWRfdXBfcmVmKSA9PSAwKTsKKwljbF9hc3NlcnRfZXF1YWxfcyhsb29rZWRfdXBfcmVmLT5uYW1lLCBuZXdfaGVhZF90cmFja2VyKTsKKwlnaXRfcmVmZXJlbmNlX2ZyZWUobG9va2VkX3VwX3JlZik7CisKKwkvKiBFbnN1cmUgdGhlIHRhcmdldCBpcyB3aGF0IHdlIGV4cGVjdCBpdCB0byBiZSAqLworCWNsX2Fzc2VydF9lcXVhbF9zKGdpdF9yZWZlcmVuY2Vfc3ltYm9saWNfdGFyZ2V0KG5ld19yZWZlcmVuY2UpLCBhcmJpdHJhcnlfdGFyZ2V0KTsKKworCS8qIFNpbWlsYXIgdGVzdCB3aXRoIGEgZnJlc2ggbmV3IHJlcG9zaXRvcnkgb2JqZWN0ICovCisJY2xfZ2l0X3Bhc3MoZ2l0X3JlcG9zaXRvcnlfb3BlbigmcmVwbzIsICJ0ZXN0cmVwbyIpKTsKKworCS8qIEVuc3VyZSB0aGUgcmVmZXJlbmNlIGNhbiBiZSBsb29rZWQtdXAuLi4gKi8KKwljbF9naXRfcGFzcyhnaXRfcmVmZXJlbmNlX2xvb2t1cCgmbG9va2VkX3VwX3JlZiwgcmVwbzIsIG5ld19oZWFkX3RyYWNrZXIpKTsKKwljbF9hc3NlcnQoZ2l0X3JlZmVyZW5jZV90eXBlKGxvb2tlZF91cF9yZWYpICYgR0lUX1JFRl9TWU1CT0xJQyk7CisJY2xfYXNzZXJ0KHJlZmVyZW5jZV9pc19wYWNrZWQobG9va2VkX3VwX3JlZikgPT0gMCk7CisJY2xfYXNzZXJ0X2VxdWFsX3MobG9va2VkX3VwX3JlZi0+bmFtZSwgbmV3X2hlYWRfdHJhY2tlcik7CisKKwkvKiBFbnN1cmUgdGhlIHRhcmdldCBpcyB3aGF0IHdlIGV4cGVjdCBpdCB0byBiZSAqLworCWNsX2Fzc2VydF9lcXVhbF9zKGdpdF9yZWZlcmVuY2Vfc3ltYm9saWNfdGFyZ2V0KG5ld19yZWZlcmVuY2UpLCBhcmJpdHJhcnlfdGFyZ2V0KTsKKworCWdpdF9yZXBvc2l0b3J5X2ZyZWUocmVwbzIpOworCWdpdF9yZWZlcmVuY2VfZnJlZShuZXdfcmVmZXJlbmNlKTsKKwlnaXRfcmVmZXJlbmNlX2ZyZWUobG9va2VkX3VwX3JlZik7Cit9CisKIHZvaWQgdGVzdF9yZWZzX2NyZWF0ZV9fZGVlcF9zeW1ib2xpYyh2b2lkKQogewotICAgLy8gY3JlYXRlIGEgZGVlcCBzeW1ib2xpYyByZWZlcmVuY2UKKwkvKiBjcmVhdGUgYSBkZWVwIHN5bWJvbGljIHJlZmVyZW5jZSAqLwogCWdpdF9yZWZlcmVuY2UgKm5ld19yZWZlcmVuY2UsICpsb29rZWRfdXBfcmVmLCAqcmVzb2x2ZWRfcmVmOwogCWdpdF9vaWQgaWQ7CiAKQEAgLTg3LDcgKzEzOCw3IEBACiAKIHZvaWQgdGVzdF9yZWZzX2NyZWF0ZV9fb2lkKHZvaWQpCiB7Ci0gICAvLyBjcmVhdGUgYSBuZXcgT0lEIHJlZmVyZW5jZQorCS8qIGNyZWF0ZSBhIG5ldyBPSUQgcmVmZXJlbmNlICovCiAJZ2l0X3JlZmVyZW5jZSAqbmV3X3JlZmVyZW5jZSwgKmxvb2tlZF91cF9yZWY7CiAJZ2l0X3JlcG9zaXRvcnkgKnJlcG8yOwogCWdpdF9vaWQgaWQ7CkBAIC0yNDgsMyArMjk5LDY5IEBACiAKIAl0ZXN0X3dpbjMyX25hbWUoInJlZnMvaGVhZHMvY29tMSIpOwogfQorCisvKiBDcmVhdGluZyBhIGxvb3NlIHJlZiBpbnZvbHZlcyBmc3luYydpbmcgdGhlIHJlZmVyZW5jZSwgdGhlCisgKiByZWZsb2cgYW5kIChvbiBub24tV2luZG93cykgdGhlIGNvbnRhaW5pbmcgZGlyZWN0b3JpZXMuCisgKiBDcmVhdGluZyBhIHBhY2tlZCByZWYgaW52b2x2ZXMgZnN5bmMnaW5nIHRoZSBwYWNrZWQgcmVmIGZpbGUKKyAqIGFuZCAob24gbm9uLVdpbmRvd3MpIHRoZSBjb250YWluaW5nIGRpcmVjdG9yeS4KKyAqLworI2lmZGVmIEdJVF9XSU4zMgorc3RhdGljIGludCBleHBlY3RlZF9mc3luY3NfY3JlYXRlID0gMiwgZXhwZWN0ZWRfZnN5bmNzX2NvbXByZXNzID0gMTsKKyNlbHNlCitzdGF0aWMgaW50IGV4cGVjdGVkX2ZzeW5jc19jcmVhdGUgPSA0LCBleHBlY3RlZF9mc3luY3NfY29tcHJlc3MgPSAyOworI2VuZGlmCisKK3N0YXRpYyB2b2lkIGNvdW50X2ZzeW5jcyhzaXplX3QgKmNyZWF0ZV9jb3VudCwgc2l6ZV90ICpjb21wcmVzc19jb3VudCkKK3sKKwlnaXRfcmVmZXJlbmNlICpyZWYgPSBOVUxMOworCWdpdF9yZWZkYiAqcmVmZGI7CisJZ2l0X29pZCBpZDsKKworCXBfZnN5bmNfX2NudCA9IDA7CisKKwlnaXRfb2lkX2Zyb21zdHIoJmlkLCBjdXJyZW50X21hc3Rlcl90aXApOworCWNsX2dpdF9wYXNzKGdpdF9yZWZlcmVuY2VfY3JlYXRlKCZyZWYsIGdfcmVwbywgInJlZnMvaGVhZHMvZnN5bmNfdGVzdCIsICZpZCwgMCwgImxvZyBtZXNzYWdlIikpOworCWdpdF9yZWZlcmVuY2VfZnJlZShyZWYpOworCisJKmNyZWF0ZV9jb3VudCA9IHBfZnN5bmNfX2NudDsKKwlwX2ZzeW5jX19jbnQgPSAwOworCisJY2xfZ2l0X3Bhc3MoZ2l0X3JlcG9zaXRvcnlfcmVmZGIoJnJlZmRiLCBnX3JlcG8pKTsKKwljbF9naXRfcGFzcyhnaXRfcmVmZGJfY29tcHJlc3MocmVmZGIpKTsKKwlnaXRfcmVmZGJfZnJlZShyZWZkYik7CisKKwkqY29tcHJlc3NfY291bnQgPSBwX2ZzeW5jX19jbnQ7CisJcF9mc3luY19fY250ID0gMDsKK30KKwordm9pZCB0ZXN0X3JlZnNfY3JlYXRlX19kb2VzX25vdF9mc3luY19ieV9kZWZhdWx0KHZvaWQpCit7CisJc2l6ZV90IGNyZWF0ZV9jb3VudCwgY29tcHJlc3NfY291bnQ7CisJY291bnRfZnN5bmNzKCZjcmVhdGVfY291bnQsICZjb21wcmVzc19jb3VudCk7CisKKwljbF9hc3NlcnRfZXF1YWxfaSgwLCBjcmVhdGVfY291bnQpOworCWNsX2Fzc2VydF9lcXVhbF9pKDAsIGNvbXByZXNzX2NvdW50KTsKK30KKwordm9pZCB0ZXN0X3JlZnNfY3JlYXRlX19mc3luY3Nfd2hlbl9nbG9iYWxfb3B0X3NldCh2b2lkKQoreworCXNpemVfdCBjcmVhdGVfY291bnQsIGNvbXByZXNzX2NvdW50OworCisJY2xfZ2l0X3Bhc3MoZ2l0X2xpYmdpdDJfb3B0cyhHSVRfT1BUX0VOQUJMRV9GU1lOQ19HSVRESVIsIDEpKTsKKwljb3VudF9mc3luY3MoJmNyZWF0ZV9jb3VudCwgJmNvbXByZXNzX2NvdW50KTsKKworCWNsX2Fzc2VydF9lcXVhbF9pKGV4cGVjdGVkX2ZzeW5jc19jcmVhdGUsIGNyZWF0ZV9jb3VudCk7CisJY2xfYXNzZXJ0X2VxdWFsX2koZXhwZWN0ZWRfZnN5bmNzX2NvbXByZXNzLCBjb21wcmVzc19jb3VudCk7Cit9CisKK3ZvaWQgdGVzdF9yZWZzX2NyZWF0ZV9fZnN5bmNzX3doZW5fcmVwb19jb25maWdfc2V0KHZvaWQpCit7CisJc2l6ZV90IGNyZWF0ZV9jb3VudCwgY29tcHJlc3NfY291bnQ7CisKKwljbF9yZXBvX3NldF9ib29sKGdfcmVwbywgImNvcmUuZnN5bmNPYmplY3RGaWxlcyIsIHRydWUpOworCisJY291bnRfZnN5bmNzKCZjcmVhdGVfY291bnQsICZjb21wcmVzc19jb3VudCk7CisKKwljbF9hc3NlcnRfZXF1YWxfaShleHBlY3RlZF9mc3luY3NfY3JlYXRlLCBjcmVhdGVfY291bnQpOworCWNsX2Fzc2VydF9lcXVhbF9pKGV4cGVjdGVkX2ZzeW5jc19jb21wcmVzcywgY29tcHJlc3NfY291bnQpOworfQpkaWZmIC0tZ2l0IGEvdGVzdHMvcmVmcy9saXN0LmMgYi90ZXN0cy9yZWZzL2xpc3QuYwppbmRleCAzNzQ5NDNiLi5mN2NhM2Y3IDEwMDY0NAotLS0gYS90ZXN0cy9yZWZzL2xpc3QuYworKysgYi90ZXN0cy9yZWZzL2xpc3QuYwpAQCAtMzYsNyArMzYsNyBAQAogCS8qIFdlIGhhdmUgZXhhY3RseSAxMiByZWZzIGluIHRvdGFsIGlmIHdlIGluY2x1ZGUgdGhlIHBhY2tlZCBvbmVzOgogCSAqIHRoZXJlIGlzIGEgcmVmZXJlbmNlIHRoYXQgZXhpc3RzIGJvdGggaW4gdGhlIHBhY2tmaWxlIGFuZCBhcwogCSAqIGxvb3NlLCBidXQgd2Ugb25seSBsaXN0IGl0IG9uY2UgKi8KLQljbF9hc3NlcnRfZXF1YWxfaSgoaW50KXJlZl9saXN0LmNvdW50LCAxNSk7CisJY2xfYXNzZXJ0X2VxdWFsX2koKGludClyZWZfbGlzdC5jb3VudCwgMTcpOwogCiAJZ2l0X3N0cmFycmF5X2ZyZWUoJnJlZl9saXN0KTsKIH0KQEAgLTUxLDcgKzUxLDcgQEAKIAkJIjE0NDM0NDA0M2JhNGQ0YTQwNWRhMDNkZTM4NDRhYTgyOWFlOGJlMGVcbiIpOwogCiAJY2xfZ2l0X3Bhc3MoZ2l0X3JlZmVyZW5jZV9saXN0KCZyZWZfbGlzdCwgZ19yZXBvKSk7Ci0JY2xfYXNzZXJ0X2VxdWFsX2koKGludClyZWZfbGlzdC5jb3VudCwgMTUpOworCWNsX2Fzc2VydF9lcXVhbF9pKChpbnQpcmVmX2xpc3QuY291bnQsIDE3KTsKIAogCWdpdF9zdHJhcnJheV9mcmVlKCZyZWZfbGlzdCk7CiB9CmRpZmYgLS1naXQgYS90ZXN0cy9yZWZzL25hbWVzcGFjZXMuYyBiL3Rlc3RzL3JlZnMvbmFtZXNwYWNlcy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJiNmJiMWMKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9yZWZzL25hbWVzcGFjZXMuYwpAQCAtMCwwICsxLDM2IEBACisjaW5jbHVkZSAiY2xhcl9saWJnaXQyLmgiCisKKyNpbmNsdWRlICJyZXBvc2l0b3J5LmgiCisKK3N0YXRpYyBnaXRfcmVwb3NpdG9yeSAqZ19yZXBvOworCit2b2lkIHRlc3RfcmVmc19uYW1lc3BhY2VzX19pbml0aWFsaXplKHZvaWQpCit7CisJZ19yZXBvID0gY2xfZ2l0X3NhbmRib3hfaW5pdCgidGVzdHJlcG8iKTsKK30KKwordm9pZCB0ZXN0X3JlZnNfbmFtZXNwYWNlc19fY2xlYW51cCh2b2lkKQoreworCWNsX2dpdF9zYW5kYm94X2NsZWFudXAoKTsKK30KKwordm9pZCB0ZXN0X3JlZnNfbmFtZXNwYWNlc19fZ2V0X2FuZF9zZXQodm9pZCkKK3sKKwljbF9hc3NlcnRfZXF1YWxfcyhOVUxMLCBnaXRfcmVwb3NpdG9yeV9nZXRfbmFtZXNwYWNlKGdfcmVwbykpOworCisJY2xfZ2l0X3Bhc3MoZ2l0X3JlcG9zaXRvcnlfc2V0X25hbWVzcGFjZShnX3JlcG8sICJuYW1lc3BhY2UiKSk7CisJY2xfYXNzZXJ0X2VxdWFsX3MoIm5hbWVzcGFjZSIsIGdpdF9yZXBvc2l0b3J5X2dldF9uYW1lc3BhY2UoZ19yZXBvKSk7CisKKwljbF9naXRfcGFzcyhnaXRfcmVwb3NpdG9yeV9zZXRfbmFtZXNwYWNlKGdfcmVwbywgTlVMTCkpOworCWNsX2Fzc2VydF9lcXVhbF9zKE5VTEwsIGdpdF9yZXBvc2l0b3J5X2dldF9uYW1lc3BhY2UoZ19yZXBvKSk7Cit9CisKK3ZvaWQgdGVzdF9yZWZzX25hbWVzcGFjZXNfX25hbWVzcGFjZV9kb2VzbnRfc2hvd19ub3JtYWxfcmVmcyh2b2lkKQoreworCXN0YXRpYyBnaXRfc3RyYXJyYXkgcmVmX2xpc3Q7CisKKwljbF9naXRfcGFzcyhnaXRfcmVwb3NpdG9yeV9zZXRfbmFtZXNwYWNlKGdfcmVwbywgIm5hbWVzcGFjZSIpKTsKKwljbF9naXRfcGFzcyhnaXRfcmVmZXJlbmNlX2xpc3QoJnJlZl9saXN0LCBnX3JlcG8pKTsKKwljbF9hc3NlcnRfZXF1YWxfaSgwLCByZWZfbGlzdC5jb3VudCk7CisJZ2l0X3N0cmFycmF5X2ZyZWUoJnJlZl9saXN0KTsKK30KZGlmZiAtLWdpdCBhL3Rlc3RzL3JlZnMvcmVmbG9nL3JlZmxvZy5jIGIvdGVzdHMvcmVmcy9yZWZsb2cvcmVmbG9nLmMKaW5kZXggOWU0NmM4YS4uMjUyMjQyMSAxMDA2NDQKLS0tIGEvdGVzdHMvcmVmcy9yZWZsb2cvcmVmbG9nLmMKKysrIGIvdGVzdHMvcmVmcy9yZWZsb2cvcmVmbG9nLmMKQEAgLTQsNyArNCw3IEBACiAjaW5jbHVkZSAiZ2l0Mi9yZWZsb2cuaCIKICNpbmNsdWRlICJyZWZsb2cuaCIKIAotCitzdGF0aWMgY29uc3QgY2hhciAqbWVyZ2VfcmVmbG9nX21lc3NhZ2UgPSAiY29tbWl0IChtZXJnZSk6IE1lcmdlIGNvbW1pdCI7CiBzdGF0aWMgY29uc3QgY2hhciAqbmV3X3JlZiA9ICJyZWZzL2hlYWRzL3Rlc3QtcmVmbG9nIjsKIHN0YXRpYyBjb25zdCBjaGFyICpjdXJyZW50X21hc3Rlcl90aXAgPSAiYTY1ZmVkZjM5YWVmZTQwMmQzYmI2ZTI0ZGY0ZDRmNWZlNDU0Nzc1MCI7CiAjZGVmaW5lIGNvbW1pdF9tc2cgImNvbW1pdDogYmxhIGJsYSIKQEAgLTQ0OCwzICs0NDgsNDUgQEAKIAogCWFzc2VydF9ub19yZWZsb2dfdXBkYXRlKCk7CiB9CisKK3ZvaWQgdGVzdF9yZWZzX3JlZmxvZ19yZWZsb2dfX3Nob3dfbWVyZ2VfZm9yX21lcmdlX2NvbW1pdHModm9pZCkKK3sKKwlnaXRfb2lkIGIxX29pZDsKKwlnaXRfb2lkIGIyX29pZDsKKwlnaXRfb2lkIG1lcmdlX2NvbW1pdF9vaWQ7CisJZ2l0X2NvbW1pdCAqYjFfY29tbWl0OworCWdpdF9jb21taXQgKmIyX2NvbW1pdDsKKwlnaXRfc2lnbmF0dXJlICpzOworCWdpdF9jb21taXQgKnBhcmVudF9jb21taXRzWzJdOworCWdpdF90cmVlICp0cmVlOworCWdpdF9yZWZsb2cgKmxvZzsKKwljb25zdCBnaXRfcmVmbG9nX2VudHJ5ICplbnRyeTsKKworCWNsX2dpdF9wYXNzKGdpdF9zaWduYXR1cmVfbm93KCZzLCAiYWxpY2UiLCAiYWxpY2VAZXhhbXBsZS5jb20iKSk7CisKKwljbF9naXRfcGFzcyhnaXRfcmVmZXJlbmNlX25hbWVfdG9faWQoJmIxX29pZCwgZ19yZXBvLCAiSEVBRCIpKTsKKwljbF9naXRfcGFzcyhnaXRfcmVmZXJlbmNlX25hbWVfdG9faWQoJmIyX29pZCwgZ19yZXBvLCAicmVmcy9oZWFkcy90ZXN0IikpOworCisJY2xfZ2l0X3Bhc3MoZ2l0X2NvbW1pdF9sb29rdXAoJmIxX2NvbW1pdCwgZ19yZXBvLCAmYjFfb2lkKSk7CisJY2xfZ2l0X3Bhc3MoZ2l0X2NvbW1pdF9sb29rdXAoJmIyX2NvbW1pdCwgZ19yZXBvLCAmYjJfb2lkKSk7CisKKwlwYXJlbnRfY29tbWl0c1swXSA9IGIxX2NvbW1pdDsKKwlwYXJlbnRfY29tbWl0c1sxXSA9IGIyX2NvbW1pdDsKKworCWNsX2dpdF9wYXNzKGdpdF9jb21taXRfdHJlZSgmdHJlZSwgYjFfY29tbWl0KSk7CisKKwljbF9naXRfcGFzcyhnaXRfY29tbWl0X2NyZWF0ZSgmbWVyZ2VfY29tbWl0X29pZCwKKwkJZ19yZXBvLCAiSEVBRCIsIHMsIHMsIE5VTEwsCisJCSJNZXJnZSBjb21taXQiLCB0cmVlLAorCQkyLCAoY29uc3Qgc3RydWN0IGdpdF9jb21taXQgKiopIHBhcmVudF9jb21taXRzKSk7CisKKwljbF9naXRfcGFzcyhnaXRfcmVmbG9nX3JlYWQoJmxvZywgZ19yZXBvLCAiSEVBRCIpKTsKKwllbnRyeSA9IGdpdF9yZWZsb2dfZW50cnlfYnlpbmRleChsb2csIDApOworCWNsX2Fzc2VydF9lcXVhbF9zKG1lcmdlX3JlZmxvZ19tZXNzYWdlLCBnaXRfcmVmbG9nX2VudHJ5X21lc3NhZ2UoZW50cnkpKTsKKworCWdpdF9yZWZsb2dfZnJlZShsb2cpOworCWdpdF90cmVlX2ZyZWUodHJlZSk7CisJZ2l0X2NvbW1pdF9mcmVlKGIxX2NvbW1pdCk7CisJZ2l0X2NvbW1pdF9mcmVlKGIyX2NvbW1pdCk7CisJZ2l0X3NpZ25hdHVyZV9mcmVlKHMpOworfQpkaWZmIC0tZ2l0IGEvdGVzdHMvcmVmcy9yZXZwYXJzZS5jIGIvdGVzdHMvcmVmcy9yZXZwYXJzZS5jCmluZGV4IGMyMmMzMDQuLjQ1OTE4OGMgMTAwNjQ0Ci0tLSBhL3Rlc3RzL3JlZnMvcmV2cGFyc2UuYworKysgYi90ZXN0cy9yZWZzL3JldnBhcnNlLmMKQEAgLTEyMiw2ICsxMjIsMTQgQEAKIAl0ZXN0X2lkX2lucmVwbyhzcGVjLCBleHBlY3RlZF9sZWZ0LCBleHBlY3RlZF9yaWdodCwgZXhwZWN0ZWRfZmxhZ3MsIGdfcmVwbyk7CiB9CiAKK3N0YXRpYyB2b2lkIHRlc3RfaW52YWxpZF9yZXZzcGVjKGNvbnN0IGNoYXIqIGludmFsaWRfc3BlYykKK3sKKwlnaXRfcmV2c3BlYyByZXZzcGVjOworCisJY2xfYXNzZXJ0X2VxdWFsX2koCisJCUdJVF9FSU5WQUxJRFNQRUMsIGdpdF9yZXZwYXJzZSgmcmV2c3BlYywgZ19yZXBvLCBpbnZhbGlkX3NwZWMpKTsKK30KKwogdm9pZCB0ZXN0X3JlZnNfcmV2cGFyc2VfX2luaXRpYWxpemUodm9pZCkKIHsKIAljbF9naXRfcGFzcyhnaXRfcmVwb3NpdG9yeV9vcGVuKCZnX3JlcG8sIGNsX2ZpeHR1cmUoInRlc3RyZXBvLmdpdCIpKSk7CkBAIC03NDksNiArNzU3LDMzIEBACiAJCSI0YTIwMmIzNDZiYjBmYjBkYjdlZmYzY2ZmZWIzYzcwYmFiYmQyMDQ1IiwKIAkJImE2NWZlZGYzOWFlZmU0MDJkM2JiNmUyNGRmNGQ0ZjVmZTQ1NDc3NTAiLAogCQlHSVRfUkVWUEFSU0VfUkFOR0UgfCBHSVRfUkVWUEFSU0VfTUVSR0VfQkFTRSk7CisKKwl0ZXN0X2lkKCJIRUFEfjMuLiIsCisJCSI0YTIwMmIzNDZiYjBmYjBkYjdlZmYzY2ZmZWIzYzcwYmFiYmQyMDQ1IiwKKwkJImE2NWZlZGYzOWFlZmU0MDJkM2JiNmUyNGRmNGQ0ZjVmZTQ1NDc3NTAiLAorCQlHSVRfUkVWUEFSU0VfUkFOR0UpOworCisJdGVzdF9pZCgiSEVBRH4zLi4uIiwKKwkJIjRhMjAyYjM0NmJiMGZiMGRiN2VmZjNjZmZlYjNjNzBiYWJiZDIwNDUiLAorCQkiYTY1ZmVkZjM5YWVmZTQwMmQzYmI2ZTI0ZGY0ZDRmNWZlNDU0Nzc1MCIsCisJCUdJVF9SRVZQQVJTRV9SQU5HRSB8IEdJVF9SRVZQQVJTRV9NRVJHRV9CQVNFKTsKKworCXRlc3RfaWQoIi4uSEVBRH4zIiwKKwkJImE2NWZlZGYzOWFlZmU0MDJkM2JiNmUyNGRmNGQ0ZjVmZTQ1NDc3NTAiLAorCQkiNGEyMDJiMzQ2YmIwZmIwZGI3ZWZmM2NmZmViM2M3MGJhYmJkMjA0NSIsCisJCUdJVF9SRVZQQVJTRV9SQU5HRSk7CisKKwl0ZXN0X2lkKCIuLi5IRUFEfjMiLAorCQkiYTY1ZmVkZjM5YWVmZTQwMmQzYmI2ZTI0ZGY0ZDRmNWZlNDU0Nzc1MCIsCisJCSI0YTIwMmIzNDZiYjBmYjBkYjdlZmYzY2ZmZWIzYzcwYmFiYmQyMDQ1IiwKKwkJR0lUX1JFVlBBUlNFX1JBTkdFIHwgR0lUX1JFVlBBUlNFX01FUkdFX0JBU0UpOworCisJdGVzdF9pZCgiLi4uIiwKKwkJImE2NWZlZGYzOWFlZmU0MDJkM2JiNmUyNGRmNGQ0ZjVmZTQ1NDc3NTAiLAorCQkiYTY1ZmVkZjM5YWVmZTQwMmQzYmI2ZTI0ZGY0ZDRmNWZlNDU0Nzc1MCIsCisJCUdJVF9SRVZQQVJTRV9SQU5HRSB8IEdJVF9SRVZQQVJTRV9NRVJHRV9CQVNFKTsKKworCXRlc3RfaW52YWxpZF9yZXZzcGVjKCIuLiIpOwogfQogCiB2b2lkIHRlc3RfcmVmc19yZXZwYXJzZV9fZXh0X3JldHJpZXZlc19ib3RoX3RoZV9yZWZlcmVuY2VfYW5kX2l0c190YXJnZXQodm9pZCkKZGlmZiAtLWdpdCBhL3Rlc3RzL3JlcG8vZGlzY292ZXIuYyBiL3Rlc3RzL3JlcG8vZGlzY292ZXIuYwppbmRleCA0OGFhMjc1Li5lYWRkMDU1IDEwMDY0NAotLS0gYS90ZXN0cy9yZXBvL2Rpc2NvdmVyLmMKKysrIGIvdGVzdHMvcmVwby9kaXNjb3Zlci5jCkBAIC0zMyw3ICszMyw3IEBACiAJZ2l0X2J1Zl9hdHRhY2goJnJlc29sdmVkLCBwX3JlYWxwYXRoKGV4cGVjdGVkX3BhdGgsIE5VTEwpLCAwKTsKIAljbF9hc3NlcnQocmVzb2x2ZWQuc2l6ZSA+IDApOwogCWNsX2dpdF9wYXNzKGdpdF9wYXRoX3RvX2RpcigmcmVzb2x2ZWQpKTsKLQljbF9naXRfcGFzcyhnaXRfcmVwb3NpdG9yeV9kaXNjb3ZlcigmZm91bmRfcGF0aCwgc3RhcnRfcGF0aCwgMCwgY2VpbGluZ19kaXJzKSk7CisJY2xfZ2l0X3Bhc3MoZ2l0X3JlcG9zaXRvcnlfZGlzY292ZXIoJmZvdW5kX3BhdGgsIHN0YXJ0X3BhdGgsIDEsIGNlaWxpbmdfZGlycykpOwogCiAJY2xfYXNzZXJ0X2VxdWFsX3MoZm91bmRfcGF0aC5wdHIsIHJlc29sdmVkLnB0cik7CiAKQEAgLTE5OSwzICsxOTksMTIgQEAKIAogCWVuc3VyZV9yZXBvc2l0b3J5X2Rpc2NvdmVyKFNVQl9SRVBPU0lUT1JZX0ZPTERFUiAiL2ZpbGUiLCBjZWlsaW5nX2RpcnMucHRyLCBTVUJfUkVQT1NJVE9SWV9HSVRESVIpOwogfQorCit2b2lkIHRlc3RfcmVwb19kaXNjb3Zlcl9fZGlzY292ZXJ5X3N0YXJ0aW5nX2F0X3N5c3RlbV9yb290X2NhdXNlc19ub19oYW5nKHZvaWQpCit7CisjaWZkZWYgR0lUX1dJTjMyCisJZ2l0X2J1ZiBvdXQgPSBHSVRfQlVGX0lOSVQ7CisJY2xfZ2l0X2ZhaWwoZ2l0X3JlcG9zaXRvcnlfZGlzY292ZXIoJm91dCwgIkM6LyIsIDAsIE5VTEwpKTsKKwljbF9naXRfZmFpbChnaXRfcmVwb3NpdG9yeV9kaXNjb3Zlcigmb3V0LCAiLy9sb2NhbGhvc3QvIiwgMCwgTlVMTCkpOworI2VuZGlmCit9CmRpZmYgLS1naXQgYS90ZXN0cy9yZXBvL2Vudi5jIGIvdGVzdHMvcmVwby9lbnYuYwppbmRleCA1YTg5YzBkLi42NDA0Zjg4IDEwMDY0NAotLS0gYS90ZXN0cy9yZXBvL2Vudi5jCisrKyBiL3Rlc3RzL3JlcG8vZW52LmMKQEAgLTU2LDggKzU2LDggQEAKIHN0YXRpYyB2b2lkIGVudl9wYXNzXyhjb25zdCBjaGFyICpwYXRoLCBjb25zdCBjaGFyICpmaWxlLCBpbnQgbGluZSkKIHsKIAlnaXRfcmVwb3NpdG9yeSAqcmVwbzsKLQljbF9naXRfcGFzc18oZ2l0X3JlcG9zaXRvcnlfb3Blbl9leHQoTlVMTCwgcGF0aCwgR0lUX1JFUE9TSVRPUllfT1BFTl9GUk9NX0VOViwgTlVMTCksIGZpbGUsIGxpbmUpOwotCWNsX2dpdF9wYXNzXyhnaXRfcmVwb3NpdG9yeV9vcGVuX2V4dCgmcmVwbywgcGF0aCwgR0lUX1JFUE9TSVRPUllfT1BFTl9GUk9NX0VOViwgTlVMTCksIGZpbGUsIGxpbmUpOworCWNsX2dpdF9leHBlY3QoZ2l0X3JlcG9zaXRvcnlfb3Blbl9leHQoTlVMTCwgcGF0aCwgR0lUX1JFUE9TSVRPUllfT1BFTl9GUk9NX0VOViwgTlVMTCksIDAsIGZpbGUsIGxpbmUpOworCWNsX2dpdF9leHBlY3QoZ2l0X3JlcG9zaXRvcnlfb3Blbl9leHQoJnJlcG8sIHBhdGgsIEdJVF9SRVBPU0lUT1JZX09QRU5fRlJPTV9FTlYsIE5VTEwpLCAwLCBmaWxlLCBsaW5lKTsKIAljbF9hc3NlcnRfYXRfbGluZShnaXRfX3N1ZmZpeGNtcChnaXRfcmVwb3NpdG9yeV9wYXRoKHJlcG8pLCAiYXR0ci8uZ2l0LyIpID09IDAsIGZpbGUsIGxpbmUpOwogCWNsX2Fzc2VydF9hdF9saW5lKGdpdF9fc3VmZml4Y21wKGdpdF9yZXBvc2l0b3J5X3dvcmtkaXIocmVwbyksICJhdHRyLyIpID09IDAsIGZpbGUsIGxpbmUpOwogCWNsX2Fzc2VydF9hdF9saW5lKCFnaXRfcmVwb3NpdG9yeV9pc19iYXJlKHJlcG8pLCBmaWxlLCBsaW5lKTsKQEAgLTk4LDI0ICs5OCwyNCBAQAogCWNsX2dpdF9wYXNzKGdpdF9vaWRfZnJvbXN0cigmb2lkX2EsICI0NTE0MWE3OWE3Nzg0MmM1OWE2MzIyOTQwMzIyMGE0ZTRiZTc0ZTNkIikpOwogCWNsX2dpdF9wYXNzKGdpdF9vaWRfZnJvbXN0cigmb2lkX3QsICIxMzg1ZjI2NGFmYjc1YTU2YTViZWM3NDI0M2JlOWIzNjdiYTRjYTA4IikpOwogCWNsX2dpdF9wYXNzKGdpdF9vaWRfZnJvbXN0cigmb2lkX3AsICIwZGYxYTU4NjVjOGFiZmMwOWYxZjIxODJlNmEzMWJlNTUwZTk5ZjA3IikpOwotCWNsX2dpdF9wYXNzXyhnaXRfcmVwb3NpdG9yeV9vcGVuX2V4dCgmcmVwbywgImF0dHIiLCBHSVRfUkVQT1NJVE9SWV9PUEVOX0ZST01fRU5WLCBOVUxMKSwgZmlsZSwgbGluZSk7CisJY2xfZ2l0X2V4cGVjdChnaXRfcmVwb3NpdG9yeV9vcGVuX2V4dCgmcmVwbywgImF0dHIiLCBHSVRfUkVQT1NJVE9SWV9PUEVOX0ZST01fRU5WLCBOVUxMKSwgMCwgZmlsZSwgbGluZSk7CiAKIAlpZiAoYSkgewotCQljbF9naXRfcGFzc18oZ2l0X29iamVjdF9sb29rdXAoJm9iamVjdCwgcmVwbywgJm9pZF9hLCBHSVRfT0JKX0JMT0IpLCBmaWxlLCBsaW5lKTsKKwkJY2xfZ2l0X2V4cGVjdChnaXRfb2JqZWN0X2xvb2t1cCgmb2JqZWN0LCByZXBvLCAmb2lkX2EsIEdJVF9PQkpfQkxPQiksIDAsIGZpbGUsIGxpbmUpOwogCQlnaXRfb2JqZWN0X2ZyZWUob2JqZWN0KTsKIAl9IGVsc2UgewogCQljbF9naXRfZmFpbF9hdF9saW5lKGdpdF9vYmplY3RfbG9va3VwKCZvYmplY3QsIHJlcG8sICZvaWRfYSwgR0lUX09CSl9CTE9CKSwgZmlsZSwgbGluZSk7CiAJfQogCiAJaWYgKHQpIHsKLQkJY2xfZ2l0X3Bhc3NfKGdpdF9vYmplY3RfbG9va3VwKCZvYmplY3QsIHJlcG8sICZvaWRfdCwgR0lUX09CSl9CTE9CKSwgZmlsZSwgbGluZSk7CisJCWNsX2dpdF9leHBlY3QoZ2l0X29iamVjdF9sb29rdXAoJm9iamVjdCwgcmVwbywgJm9pZF90LCBHSVRfT0JKX0JMT0IpLCAwLCBmaWxlLCBsaW5lKTsKIAkJZ2l0X29iamVjdF9mcmVlKG9iamVjdCk7CiAJfSBlbHNlIHsKIAkJY2xfZ2l0X2ZhaWxfYXRfbGluZShnaXRfb2JqZWN0X2xvb2t1cCgmb2JqZWN0LCByZXBvLCAmb2lkX3QsIEdJVF9PQkpfQkxPQiksIGZpbGUsIGxpbmUpOwogCX0KIAogCWlmIChwKSB7Ci0JCWNsX2dpdF9wYXNzXyhnaXRfb2JqZWN0X2xvb2t1cCgmb2JqZWN0LCByZXBvLCAmb2lkX3AsIEdJVF9PQkpfQ09NTUlUKSwgZmlsZSwgbGluZSk7CisJCWNsX2dpdF9leHBlY3QoZ2l0X29iamVjdF9sb29rdXAoJm9iamVjdCwgcmVwbywgJm9pZF9wLCBHSVRfT0JKX0NPTU1JVCksIDAsIGZpbGUsIGxpbmUpOwogCQlnaXRfb2JqZWN0X2ZyZWUob2JqZWN0KTsKIAl9IGVsc2UgewogCQljbF9naXRfZmFpbF9hdF9saW5lKGdpdF9vYmplY3RfbG9va3VwKCZvYmplY3QsIHJlcG8sICZvaWRfcCwgR0lUX09CSl9DT01NSVQpLCBmaWxlLCBsaW5lKTsKZGlmZiAtLWdpdCBhL3Rlc3RzL3JlcG8vaGVhZC5jIGIvdGVzdHMvcmVwby9oZWFkLmMKaW5kZXggMzFjMjI4Ny4uZDAyMTE2MCAxMDA2NDQKLS0tIGEvdGVzdHMvcmVwby9oZWFkLmMKKysrIGIvdGVzdHMvcmVwby9oZWFkLmMKQEAgLTI2MSwxNSArMjYxLDE5IEBACiAJY2xfZ2l0X3Bhc3MoZ2l0X3JldnBhcnNlX3NpbmdsZSgmdGFnLCByZXBvLCAidGFncy90ZXN0IikpOwogCWNsX2dpdF9wYXNzKGdpdF9yZXBvc2l0b3J5X3NldF9oZWFkX2RldGFjaGVkKHJlcG8sIGdpdF9vYmplY3RfaWQodGFnKSkpOwogCWNsX2dpdF9wYXNzKGdpdF9yZXBvc2l0b3J5X3NldF9oZWFkKHJlcG8sICJyZWZzL2hlYWRzL2hhYWNrZWQiKSk7CisJY2xfZ2l0X3Bhc3MoZ2l0X3JlcG9zaXRvcnlfc2V0X2hlYWQocmVwbywgInJlZnMvdGFncy90ZXN0IikpOworCWNsX2dpdF9wYXNzKGdpdF9yZXBvc2l0b3J5X3NldF9oZWFkKHJlcG8sICJyZWZzL3JlbW90ZXMvdGVzdC9tYXN0ZXIiKSk7CiAKLQl0ZXN0X3JlZmxvZyhyZXBvLCAyLCBOVUxMLCAicmVmcy9oZWFkcy9oYWFja2VkIiwgImZvb0BleGFtcGxlLmNvbSIsICJjaGVja291dDogbW92aW5nIGZyb20gbWFzdGVyIHRvIGhhYWNrZWQiKTsKLQl0ZXN0X3JlZmxvZyhyZXBvLCAxLCBOVUxMLCAidGFncy90ZXN0Xntjb21taXR9IiwgImZvb0BleGFtcGxlLmNvbSIsICJjaGVja291dDogbW92aW5nIGZyb20gdW5ib3JuIHRvIGU5MDgxMGI4ZGYzZTgwYzQxM2Q5MDNmNjMxNjQzYzcxNjg4NzEzOGQiKTsKLQl0ZXN0X3JlZmxvZyhyZXBvLCAwLCAidGFncy90ZXN0Xntjb21taXR9IiwgInJlZnMvaGVhZHMvaGFhY2tlZCIsICJmb29AZXhhbXBsZS5jb20iLCAiY2hlY2tvdXQ6IG1vdmluZyBmcm9tIGU5MDgxMGI4ZGYzZTgwYzQxM2Q5MDNmNjMxNjQzYzcxNjg4NzEzOGQgdG8gaGFhY2tlZCIpOworCXRlc3RfcmVmbG9nKHJlcG8sIDQsIE5VTEwsICJyZWZzL2hlYWRzL2hhYWNrZWQiLCAiZm9vQGV4YW1wbGUuY29tIiwgImNoZWNrb3V0OiBtb3ZpbmcgZnJvbSBtYXN0ZXIgdG8gaGFhY2tlZCIpOworCXRlc3RfcmVmbG9nKHJlcG8sIDMsIE5VTEwsICJ0YWdzL3Rlc3Ree2NvbW1pdH0iLCAiZm9vQGV4YW1wbGUuY29tIiwgImNoZWNrb3V0OiBtb3ZpbmcgZnJvbSB1bmJvcm4gdG8gZTkwODEwYjhkZjNlODBjNDEzZDkwM2Y2MzE2NDNjNzE2ODg3MTM4ZCIpOworCXRlc3RfcmVmbG9nKHJlcG8sIDIsICJ0YWdzL3Rlc3Ree2NvbW1pdH0iLCAicmVmcy9oZWFkcy9oYWFja2VkIiwgImZvb0BleGFtcGxlLmNvbSIsICJjaGVja291dDogbW92aW5nIGZyb20gZTkwODEwYjhkZjNlODBjNDEzZDkwM2Y2MzE2NDNjNzE2ODg3MTM4ZCB0byBoYWFja2VkIik7CisJdGVzdF9yZWZsb2cocmVwbywgMSwgInJlZnMvaGVhZHMvaGFhY2tlZCIsICJ0YWdzL3Rlc3Ree2NvbW1pdH0iLCAiZm9vQGV4YW1wbGUuY29tIiwgImNoZWNrb3V0OiBtb3ZpbmcgZnJvbSBoYWFja2VkIHRvIHRlc3QiKTsKKwl0ZXN0X3JlZmxvZyhyZXBvLCAwLCAidGFncy90ZXN0Xntjb21taXR9IiwgInJlZnMvcmVtb3Rlcy90ZXN0L21hc3RlciIsICJmb29AZXhhbXBsZS5jb20iLCAiY2hlY2tvdXQ6IG1vdmluZyBmcm9tIGU5MDgxMGI4ZGYzZTgwYzQxM2Q5MDNmNjMxNjQzYzcxNjg4NzEzOGQgdG8gdGVzdC9tYXN0ZXIiKTsKIAogCWNsX2dpdF9wYXNzKGdpdF9hbm5vdGF0ZWRfY29tbWl0X2Zyb21fcmV2c3BlYygmYW5ub3RhdGVkLCByZXBvLCAiaGFhY2tlZH4wIikpOwogCWNsX2dpdF9wYXNzKGdpdF9yZXBvc2l0b3J5X3NldF9oZWFkX2RldGFjaGVkX2Zyb21fYW5ub3RhdGVkKHJlcG8sIGFubm90YXRlZCkpOwogCi0JdGVzdF9yZWZsb2cocmVwbywgMCwgTlVMTCwgInJlZnMvaGVhZHMvaGFhY2tlZCIsICJmb29AZXhhbXBsZS5jb20iLCAiY2hlY2tvdXQ6IG1vdmluZyBmcm9tIGhhYWNrZWQgdG8gaGFhY2tlZH4wIik7CisJdGVzdF9yZWZsb2cocmVwbywgMCwgTlVMTCwgInJlZnMvaGVhZHMvaGFhY2tlZCIsICJmb29AZXhhbXBsZS5jb20iLCAiY2hlY2tvdXQ6IG1vdmluZyBmcm9tIGJlMzU2M2FlM2Y3OTViMmI0MzUzYmNjZTNhNTI3YWQwYTRmN2Y2NDQgdG8gaGFhY2tlZH4wIik7CiAKIAlnaXRfYW5ub3RhdGVkX2NvbW1pdF9mcmVlKGFubm90YXRlZCk7CiAJZ2l0X29iamVjdF9mcmVlKHRhZyk7CmRpZmYgLS1naXQgYS90ZXN0cy9yZXBvL29wZW4uYyBiL3Rlc3RzL3JlcG8vb3Blbi5jCmluZGV4IDYxMTRhZDIuLjMyMzliNmYgMTAwNjQ0Ci0tLSBhL3Rlc3RzL3JlcG8vb3Blbi5jCisrKyBiL3Rlc3RzL3JlcG8vb3Blbi5jCkBAIC0zOTgsNyArMzk4LDggQEAKIAljbF9naXRfZmFpbChnaXRfcmVwb3NpdG9yeV9vcGVuX2JhcmUoJmJhcmVyZXBvLCAiYWx0ZXJuYXRlL3N1YmRpci9zdWIyIikpOwogCiAJY2xfZ2l0X3Bhc3MoZ2l0X3JlcG9zaXRvcnlfb3Blbl9leHQoCi0JCSZiYXJlcmVwbywgImFsdGVybmF0ZS9zdWJkaXIvc3ViMiIsIEdJVF9SRVBPU0lUT1JZX09QRU5fQkFSRSwgTlVMTCkpOworCQkmYmFyZXJlcG8sICJhbHRlcm5hdGUvc3ViZGlyL3N1YjIiLAorCQlHSVRfUkVQT1NJVE9SWV9PUEVOX0JBUkV8R0lUX1JFUE9TSVRPUllfT1BFTl9DUk9TU19GUywgTlVMTCkpOwogCWNsX2Fzc2VydChnaXRfcmVwb3NpdG9yeV9pc19iYXJlKGJhcmVyZXBvKSk7CiAJZ2l0X3JlcG9zaXRvcnlfZnJlZShiYXJlcmVwbyk7CiB9CmRpZmYgLS1naXQgYS90ZXN0cy9yZXNvdXJjZXMvaW5kZXh2NC8uZ2l0dGVkL0hFQUQgYi90ZXN0cy9yZXNvdXJjZXMvaW5kZXh2NC8uZ2l0dGVkL0hFQUQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2IwODljZAotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL3Jlc291cmNlcy9pbmRleHY0Ly5naXR0ZWQvSEVBRApAQCAtMCwwICsxIEBACityZWY6IHJlZnMvaGVhZHMvbWFzdGVyCmRpZmYgLS1naXQgYS90ZXN0cy9yZXNvdXJjZXMvaW5kZXh2NC8uZ2l0dGVkL2NvbmZpZyBiL3Rlc3RzL3Jlc291cmNlcy9pbmRleHY0Ly5naXR0ZWQvY29uZmlnCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjUxNWY0ODMKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9yZXNvdXJjZXMvaW5kZXh2NC8uZ2l0dGVkL2NvbmZpZwpAQCAtMCwwICsxLDUgQEAKK1tjb3JlXQorCXJlcG9zaXRvcnlmb3JtYXR2ZXJzaW9uID0gMAorCWZpbGVtb2RlID0gdHJ1ZQorCWJhcmUgPSBmYWxzZQorCWxvZ2FsbHJlZnVwZGF0ZXMgPSB0cnVlCmRpZmYgLS1naXQgYS90ZXN0cy9yZXNvdXJjZXMvaW5kZXh2NC8uZ2l0dGVkL2luZGV4IGIvdGVzdHMvcmVzb3VyY2VzL2luZGV4djQvLmdpdHRlZC9pbmRleApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lOGZjNjE3Ci0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvcmVzb3VyY2VzL2luZGV4djQvLmdpdHRlZC9pbmRleApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS90ZXN0cy9yZXNvdXJjZXMvaW5kZXh2NC8uZ2l0dGVkL29iamVjdHMvNGMvOTEwOWIzZTY3MWQ4NTFlZWM4N2UwZTcyZjYzMDViNTgyZTdlOTkgYi90ZXN0cy9yZXNvdXJjZXMvaW5kZXh2NC8uZ2l0dGVkL29iamVjdHMvNGMvOTEwOWIzZTY3MWQ4NTFlZWM4N2UwZTcyZjYzMDViNTgyZTdlOTkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2VkZDU5NAotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL3Jlc291cmNlcy9pbmRleHY0Ly5naXR0ZWQvb2JqZWN0cy80Yy85MTA5YjNlNjcxZDg1MWVlYzg3ZTBlNzJmNjMwNWI1ODJlN2U5OQpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS90ZXN0cy9yZXNvdXJjZXMvaW5kZXh2NC8uZ2l0dGVkL29iamVjdHMvYjAvOTUyZGJiNTBiZWQ1ZjAxZTAzZTMxYjI5NjE4NGNiMTgzZTU0YTcgYi90ZXN0cy9yZXNvdXJjZXMvaW5kZXh2NC8uZ2l0dGVkL29iamVjdHMvYjAvOTUyZGJiNTBiZWQ1ZjAxZTAzZTMxYjI5NjE4NGNiMTgzZTU0YTcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMGRkYzFkMQotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL3Jlc291cmNlcy9pbmRleHY0Ly5naXR0ZWQvb2JqZWN0cy9iMC85NTJkYmI1MGJlZDVmMDFlMDNlMzFiMjk2MTg0Y2IxODNlNTRhNwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS90ZXN0cy9yZXNvdXJjZXMvaW5kZXh2NC8uZ2l0dGVkL29iamVjdHMvZTYvOWRlMjliYjJkMWQ2NDM0YjhiMjlhZTc3NWFkOGMyZTQ4YzUzOTEgYi90ZXN0cy9yZXNvdXJjZXMvaW5kZXh2NC8uZ2l0dGVkL29iamVjdHMvZTYvOWRlMjliYjJkMWQ2NDM0YjhiMjlhZTc3NWFkOGMyZTQ4YzUzOTEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzExMjIzOAotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL3Jlc291cmNlcy9pbmRleHY0Ly5naXR0ZWQvb2JqZWN0cy9lNi85ZGUyOWJiMmQxZDY0MzRiOGIyOWFlNzc1YWQ4YzJlNDhjNTM5MQpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS90ZXN0cy9yZXNvdXJjZXMvaW5kZXh2NC8uZ2l0dGVkL3JlZnMvaGVhZHMvbWFzdGVyIGIvdGVzdHMvcmVzb3VyY2VzL2luZGV4djQvLmdpdHRlZC9yZWZzL2hlYWRzL21hc3RlcgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mM2U5NjBlCi0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvcmVzb3VyY2VzL2luZGV4djQvLmdpdHRlZC9yZWZzL2hlYWRzL21hc3RlcgpAQCAtMCwwICsxIEBACitiMDk1MmRiYjUwYmVkNWYwMWUwM2UzMWIyOTYxODRjYjE4M2U1NGE3CmRpZmYgLS1naXQgYS90ZXN0cy9yZXNvdXJjZXMvaW5kZXh2NC9maWxlLnR4IGIvdGVzdHMvcmVzb3VyY2VzL2luZGV4djQvZmlsZS50eApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lNjlkZTI5Ci0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvcmVzb3VyY2VzL2luZGV4djQvZmlsZS50eApkaWZmIC0tZ2l0IGEvdGVzdHMvcmVzb3VyY2VzL2luZGV4djQvZmlsZS50eHQgYi90ZXN0cy9yZXNvdXJjZXMvaW5kZXh2NC9maWxlLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lNjlkZTI5Ci0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvcmVzb3VyY2VzL2luZGV4djQvZmlsZS50eHQKZGlmZiAtLWdpdCBhL3Rlc3RzL3Jlc291cmNlcy9pbmRleHY0L2ZpbGUudHh6IGIvdGVzdHMvcmVzb3VyY2VzL2luZGV4djQvZmlsZS50eHoKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTY5ZGUyOQotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL3Jlc291cmNlcy9pbmRleHY0L2ZpbGUudHh6CmRpZmYgLS1naXQgYS90ZXN0cy9yZXNvdXJjZXMvaW5kZXh2NC9mb28gYi90ZXN0cy9yZXNvdXJjZXMvaW5kZXh2NC9mb28KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTY5ZGUyOQotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL3Jlc291cmNlcy9pbmRleHY0L2ZvbwpkaWZmIC0tZ2l0IGEvdGVzdHMvcmVzb3VyY2VzL2luZGV4djQvenp6IGIvdGVzdHMvcmVzb3VyY2VzL2luZGV4djQvenp6Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU2OWRlMjkKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9yZXNvdXJjZXMvaW5kZXh2NC96enoKZGlmZiAtLWdpdCBhL3Rlc3RzL3Jlc291cmNlcy9tZXJnZS1yZXNvbHZlLy5naXR0ZWQvb2JqZWN0cy8yYS9mMmQ5YmNiYzczNzIzYWM5ODhiYjIwMmQ0Mzk3ZjcyYTZjYTdhMCBiL3Rlc3RzL3Jlc291cmNlcy9tZXJnZS1yZXNvbHZlLy5naXR0ZWQvb2JqZWN0cy8yYS9mMmQ5YmNiYzczNzIzYWM5ODhiYjIwMmQ0Mzk3ZjcyYTZjYTdhMApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wZDY1ODIzCi0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvcmVzb3VyY2VzL21lcmdlLXJlc29sdmUvLmdpdHRlZC9vYmplY3RzLzJhL2YyZDliY2JjNzM3MjNhYzk4OGJiMjAyZDQzOTdmNzJhNmNhN2EwCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3Rlc3RzL3Jlc291cmNlcy9tZXJnZS1yZXNvbHZlLy5naXR0ZWQvb2JqZWN0cy8zNy9mNTNhNWExNGY2NGU5MTA4OWEzOWVhNThlNzFjODdkODFkZjc2NSBiL3Rlc3RzL3Jlc291cmNlcy9tZXJnZS1yZXNvbHZlLy5naXR0ZWQvb2JqZWN0cy8zNy9mNTNhNWExNGY2NGU5MTA4OWEzOWVhNThlNzFjODdkODFkZjc2NQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45NTMyN2VkCi0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvcmVzb3VyY2VzL21lcmdlLXJlc29sdmUvLmdpdHRlZC9vYmplY3RzLzM3L2Y1M2E1YTE0ZjY0ZTkxMDg5YTM5ZWE1OGU3MWM4N2Q4MWRmNzY1CkBAIC0wLDAgKzEgQEAKK3gBlY5BakMxDES79im0DxTZkWV9CCUQeoNewN+W4yz+d3Adcv06kAt0VsPAm5nUtu02wB3Dx+iqwFJCQodMaJcsixKqtzmEwCsXDoslchiduceu+4BoMaiV6KUcJRGjcJIixeaUPaXZ4kl1ZRMfo7YO3/kZe4af2rbftsNJZ/py5+tt1Mf6mdr2BZaE2c8tBwecMjOdL4f+kyd88+ZS435VmItrj3uq5g+jZErvClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvcmVzb3VyY2VzL21lcmdlLXJlc29sdmUvLmdpdHRlZC9vYmplY3RzLzRkL2QxZWY3NTY5YjE4ZDkyZDkzYzBhMzViYjZiOTMwNDkxMzdiMzU1IGIvdGVzdHMvcmVzb3VyY2VzL21lcmdlLXJlc29sdmUvLmdpdHRlZC9vYmplY3RzLzRkL2QxZWY3NTY5YjE4ZDkyZDkzYzBhMzViYjZiOTMwNDkxMzdiMzU1Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjg2YTIxYWQKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9yZXNvdXJjZXMvbWVyZ2UtcmVzb2x2ZS8uZ2l0dGVkL29iamVjdHMvNGQvZDFlZjc1NjliMThkOTJkOTNjMGEzNWJiNmI5MzA0OTEzN2IzNTUKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvdGVzdHMvcmVzb3VyY2VzL21lcmdlLXJlc29sdmUvLmdpdHRlZC9vYmplY3RzLzYzL2VjNjA0ZDQ5MTE2MWRkYWZkYWU0MTc5ODQzYzI2ZDU0YmQ5OTlhIGIvdGVzdHMvcmVzb3VyY2VzL21lcmdlLXJlc29sdmUvLmdpdHRlZC9vYmplY3RzLzYzL2VjNjA0ZDQ5MTE2MWRkYWZkYWU0MTc5ODQzYzI2ZDU0YmQ5OTlhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJjNzRkYTUKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9yZXNvdXJjZXMvbWVyZ2UtcmVzb2x2ZS8uZ2l0dGVkL29iamVjdHMvNjMvZWM2MDRkNDkxMTYxZGRhZmRhZTQxNzk4NDNjMjZkNTRiZDk5OWEKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvdGVzdHMvcmVzb3VyY2VzL21lcmdlLXJlc29sdmUvLmdpdHRlZC9vYmplY3RzLzY4L2Y3YzAyMDY0MDE5ZDg5ZTQwZTUxZDc3NzZiNmY2NzkxNDQyMGEyIGIvdGVzdHMvcmVzb3VyY2VzL21lcmdlLXJlc29sdmUvLmdpdHRlZC9vYmplY3RzLzY4L2Y3YzAyMDY0MDE5ZDg5ZTQwZTUxZDc3NzZiNmY2NzkxNDQyMGEyCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjgwOWE1YjMKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9yZXNvdXJjZXMvbWVyZ2UtcmVzb2x2ZS8uZ2l0dGVkL29iamVjdHMvNjgvZjdjMDIwNjQwMTlkODllNDBlNTFkNzc3NmI2ZjY3OTE0NDIwYTIKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvdGVzdHMvcmVzb3VyY2VzL21lcmdlLXJlc29sdmUvLmdpdHRlZC9vYmplY3RzLzk0LzI5YzA1ZGQ2ZjZmMzlmYzU2N2I0Y2U5MjNiMTZkZjVkM2Q3YTdhIGIvdGVzdHMvcmVzb3VyY2VzL21lcmdlLXJlc29sdmUvLmdpdHRlZC9vYmplY3RzLzk0LzI5YzA1ZGQ2ZjZmMzlmYzU2N2I0Y2U5MjNiMTZkZjVkM2Q3YTdhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ0ZDkzZjUKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9yZXNvdXJjZXMvbWVyZ2UtcmVzb2x2ZS8uZ2l0dGVkL29iamVjdHMvOTQvMjljMDVkZDZmNmYzOWZjNTY3YjRjZTkyM2IxNmRmNWQzZDdhN2EKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvdGVzdHMvcmVzb3VyY2VzL21lcmdlLXJlc29sdmUvLmdpdHRlZC9vYmplY3RzL2ExLzA3ZTE4YTU4ZjM4YzQ2MDg2YzhmOGYxZGNkNTRjNDAxNTRlZWI2IGIvdGVzdHMvcmVzb3VyY2VzL21lcmdlLXJlc29sdmUvLmdpdHRlZC9vYmplY3RzL2ExLzA3ZTE4YTU4ZjM4YzQ2MDg2YzhmOGYxZGNkNTRjNDAxNTRlZWI2Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU5OGM2YTcKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9yZXNvdXJjZXMvbWVyZ2UtcmVzb2x2ZS8uZ2l0dGVkL29iamVjdHMvYTEvMDdlMThhNThmMzhjNDYwODZjOGY4ZjFkY2Q1NGM0MDE1NGVlYjYKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvdGVzdHMvcmVzb3VyY2VzL21lcmdlLXJlc29sdmUvLmdpdHRlZC9vYmplY3RzL2EyL2Q4ZDE4MjRjNjg1NDFjY2E5NGZmYjkwZjc5MjkxZWJhNDk1OTIxIGIvdGVzdHMvcmVzb3VyY2VzL21lcmdlLXJlc29sdmUvLmdpdHRlZC9vYmplY3RzL2EyL2Q4ZDE4MjRjNjg1NDFjY2E5NGZmYjkwZjc5MjkxZWJhNDk1OTIxCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJkM2Q5NDcKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9yZXNvdXJjZXMvbWVyZ2UtcmVzb2x2ZS8uZ2l0dGVkL29iamVjdHMvYTIvZDhkMTgyNGM2ODU0MWNjYTk0ZmZiOTBmNzkyOTFlYmE0OTU5MjEKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvdGVzdHMvcmVzb3VyY2VzL21lcmdlLXJlc29sdmUvLmdpdHRlZC9vYmplY3RzL2JjLzg1ZDFhYWQ0MzVmZjM3MDVhOGMzMGFjZTg1Zjc1NDJjNTczNmNiIGIvdGVzdHMvcmVzb3VyY2VzL21lcmdlLXJlc29sdmUvLmdpdHRlZC9vYmplY3RzL2JjLzg1ZDFhYWQ0MzVmZjM3MDVhOGMzMGFjZTg1Zjc1NDJjNTczNmNiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFlNTI5ZmUKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9yZXNvdXJjZXMvbWVyZ2UtcmVzb2x2ZS8uZ2l0dGVkL29iamVjdHMvYmMvODVkMWFhZDQzNWZmMzcwNWE4YzMwYWNlODVmNzU0MmM1NzM2Y2IKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvdGVzdHMvcmVzb3VyY2VzL21lcmdlLXJlc29sdmUvLmdpdHRlZC9vYmplY3RzL2M4LzI2ZWY4YjE3YjVjZDJjNGEwMDIzZjI2NWYzYTQyM2IzYWEwMzg4IGIvdGVzdHMvcmVzb3VyY2VzL21lcmdlLXJlc29sdmUvLmdpdHRlZC9vYmplY3RzL2M4LzI2ZWY4YjE3YjVjZDJjNGEwMDIzZjI2NWYzYTQyM2IzYWEwMzg4Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI2NTVkN2MKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9yZXNvdXJjZXMvbWVyZ2UtcmVzb2x2ZS8uZ2l0dGVkL29iamVjdHMvYzgvMjZlZjhiMTdiNWNkMmM0YTAwMjNmMjY1ZjNhNDIzYjNhYTAzODgKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvdGVzdHMvcmVzb3VyY2VzL21lcmdlLXJlc29sdmUvLmdpdHRlZC9vYmplY3RzL2NkLzNlOGQ0YWEwNmJkYzc4MWYyNjQxNzEwMzBiYzI4ZjJiMzcwZmVlIGIvdGVzdHMvcmVzb3VyY2VzL21lcmdlLXJlc29sdmUvLmdpdHRlZC9vYmplY3RzL2NkLzNlOGQ0YWEwNmJkYzc4MWYyNjQxNzEwMzBiYzI4ZjJiMzcwZmVlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE0NDIyNWQKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9yZXNvdXJjZXMvbWVyZ2UtcmVzb2x2ZS8uZ2l0dGVkL29iamVjdHMvY2QvM2U4ZDRhYTA2YmRjNzgxZjI2NDE3MTAzMGJjMjhmMmIzNzBmZWUKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvdGVzdHMvcmVzb3VyY2VzL21lcmdlLXJlc29sdmUvLmdpdHRlZC9vYmplY3RzL2UyLzZiODg4ODk1NjEzNzIxOGQ4NTg5MzY4YTNlNjA2Y2Y1MGZiYjU2IGIvdGVzdHMvcmVzb3VyY2VzL21lcmdlLXJlc29sdmUvLmdpdHRlZC9vYmplY3RzL2UyLzZiODg4ODk1NjEzNzIxOGQ4NTg5MzY4YTNlNjA2Y2Y1MGZiYjU2Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ0ZWMyYjkKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9yZXNvdXJjZXMvbWVyZ2UtcmVzb2x2ZS8uZ2l0dGVkL29iamVjdHMvZTIvNmI4ODg4OTU2MTM3MjE4ZDg1ODkzNjhhM2U2MDZjZjUwZmJiNTYKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvdGVzdHMvcmVzb3VyY2VzL21lcmdlLXJlc29sdmUvLmdpdHRlZC9vYmplY3RzL2U2LzlkZTI5YmIyZDFkNjQzNGI4YjI5YWU3NzVhZDhjMmU0OGM1MzkxIGIvdGVzdHMvcmVzb3VyY2VzL21lcmdlLXJlc29sdmUvLmdpdHRlZC9vYmplY3RzL2U2LzlkZTI5YmIyZDFkNjQzNGI4YjI5YWU3NzVhZDhjMmU0OGM1MzkxCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjcxMTIyMzgKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9yZXNvdXJjZXMvbWVyZ2UtcmVzb2x2ZS8uZ2l0dGVkL29iamVjdHMvZTYvOWRlMjliYjJkMWQ2NDM0YjhiMjlhZTc3NWFkOGMyZTQ4YzUzOTEKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvdGVzdHMvcmVzb3VyY2VzL21lcmdlLXJlc29sdmUvLmdpdHRlZC9vYmplY3RzL2Y5LzdkYTk1ZjE1NjEyMWJlYThmOTc4NjIzNjI4ZjRjYmRiZjMwYjM2IGIvdGVzdHMvcmVzb3VyY2VzL21lcmdlLXJlc29sdmUvLmdpdHRlZC9vYmplY3RzL2Y5LzdkYTk1ZjE1NjEyMWJlYThmOTc4NjIzNjI4ZjRjYmRiZjMwYjM2Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ3ODU1MTEKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9yZXNvdXJjZXMvbWVyZ2UtcmVzb2x2ZS8uZ2l0dGVkL29iamVjdHMvZjkvN2RhOTVmMTU2MTIxYmVhOGY5Nzg2MjM2MjhmNGNiZGJmMzBiMzYKQEAgLTAsMCArMSBAQAoreAGdjjEOAiEQRa05Bb2JgYWBKYyxsbTzAsMwuFusGJaN1xev4K9eXvKSz3Vdl66nKR56E9GJEbIlyt5BKS4aIGRniAWhRPATQ3SBk3pTk1fXZE0UiwRYHLIPBgNjwWIzZ/DsjQUvkoKivc+16Vv+UMv6Mdd1qy99lmF/dH0ufd7Tiet60dZjCIDGoT6aMTXseNnl317daRu1+gLq8kj4ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvcmVzb3VyY2VzL21lcmdlLXJlc29sdmUvLmdpdHRlZC9yZWZzL2hlYWRzL3N1Ym1vZHVsZV9yZW5hbWUxIGIvdGVzdHMvcmVzb3VyY2VzL21lcmdlLXJlc29sdmUvLmdpdHRlZC9yZWZzL2hlYWRzL3N1Ym1vZHVsZV9yZW5hbWUxCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjBlZDkxNGYKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9yZXNvdXJjZXMvbWVyZ2UtcmVzb2x2ZS8uZ2l0dGVkL3JlZnMvaGVhZHMvc3VibW9kdWxlX3JlbmFtZTEKQEAgLTAsMCArMSBAQAorZjk3ZGE5NWYxNTYxMjFiZWE4Zjk3ODYyMzYyOGY0Y2JkYmYzMGIzNgpkaWZmIC0tZ2l0IGEvdGVzdHMvcmVzb3VyY2VzL21lcmdlLXJlc29sdmUvLmdpdHRlZC9yZWZzL2hlYWRzL3N1Ym1vZHVsZV9yZW5hbWUyIGIvdGVzdHMvcmVzb3VyY2VzL21lcmdlLXJlc29sdmUvLmdpdHRlZC9yZWZzL2hlYWRzL3N1Ym1vZHVsZV9yZW5hbWUyCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhlMDIwY2MKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9yZXNvdXJjZXMvbWVyZ2UtcmVzb2x2ZS8uZ2l0dGVkL3JlZnMvaGVhZHMvc3VibW9kdWxlX3JlbmFtZTIKQEAgLTAsMCArMSBAQAorMzdmNTNhNWExNGY2NGU5MTA4OWEzOWVhNThlNzFjODdkODFkZjc2NQpkaWZmIC0tZ2l0IGEvdGVzdHMvcmVzb3VyY2VzL3JlYmFzZS1zdWJtb2R1bGUvLmdpdG1vZHVsZXMgYi90ZXN0cy9yZXNvdXJjZXMvcmViYXNlLXN1Ym1vZHVsZS8uZ2l0bW9kdWxlcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mMzZkZTc3Ci0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvcmVzb3VyY2VzL3JlYmFzZS1zdWJtb2R1bGUvLmdpdG1vZHVsZXMKQEAgLTAsMCArMSwzIEBACitbc3VibW9kdWxlICJteS1zdWJtb2R1bGUiXQorCXBhdGggPSBteS1zdWJtb2R1bGUKKwl1cmwgPSBib2d1cwpkaWZmIC0tZ2l0IGEvdGVzdHMvcmVzb3VyY2VzL3JlYmFzZS1zdWJtb2R1bGUvLmdpdHRlZC9IRUFEIGIvdGVzdHMvcmVzb3VyY2VzL3JlYmFzZS1zdWJtb2R1bGUvLmdpdHRlZC9IRUFECm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNiMDg5Y2QKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9yZXNvdXJjZXMvcmViYXNlLXN1Ym1vZHVsZS8uZ2l0dGVkL0hFQUQKQEAgLTAsMCArMSBAQAorcmVmOiByZWZzL2hlYWRzL21hc3RlcgpkaWZmIC0tZ2l0IGEvdGVzdHMvcmVzb3VyY2VzL3JlYmFzZS1zdWJtb2R1bGUvLmdpdHRlZC9PUklHX0hFQUQgYi90ZXN0cy9yZXNvdXJjZXMvcmViYXNlLXN1Ym1vZHVsZS8uZ2l0dGVkL09SSUdfSEVBRApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hMWNjYmI0Ci0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvcmVzb3VyY2VzL3JlYmFzZS1zdWJtb2R1bGUvLmdpdHRlZC9PUklHX0hFQUQKQEAgLTAsMCArMSBAQAorNWZkZjA4NjY4NGRhYWUwYThiYzYxYTgxYWZlMTc4ZWRjMWU1NTZlNwpkaWZmIC0tZ2l0IGEvdGVzdHMvcmVzb3VyY2VzL3JlYmFzZS1zdWJtb2R1bGUvLmdpdHRlZC9jb25maWcgYi90ZXN0cy9yZXNvdXJjZXMvcmViYXNlLXN1Ym1vZHVsZS8uZ2l0dGVkL2NvbmZpZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hZjIwOTVmCi0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvcmVzb3VyY2VzL3JlYmFzZS1zdWJtb2R1bGUvLmdpdHRlZC9jb25maWcKQEAgLTAsMCArMSw5IEBACitbY29yZV0KKwlyZXBvc2l0b3J5Zm9ybWF0dmVyc2lvbiA9IDAKKwlmaWxlbW9kZSA9IHRydWUKKwliYXJlID0gZmFsc2UKKwlsb2dhbGxyZWZ1cGRhdGVzID0gdHJ1ZQorW2JyYW5jaCAiYXNwYXJhZ3VzIl0KKwlyZWJhc2UgPSB0cnVlCitbYnJhbmNoICJtYXN0ZXIiXQorCXJlYmFzZSA9IHRydWUKZGlmZiAtLWdpdCBhL3Rlc3RzL3Jlc291cmNlcy9yZWJhc2Utc3VibW9kdWxlLy5naXR0ZWQvZGVzY3JpcHRpb24gYi90ZXN0cy9yZXNvdXJjZXMvcmViYXNlLXN1Ym1vZHVsZS8uZ2l0dGVkL2Rlc2NyaXB0aW9uCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ5OGIyNjcKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9yZXNvdXJjZXMvcmViYXNlLXN1Ym1vZHVsZS8uZ2l0dGVkL2Rlc2NyaXB0aW9uCkBAIC0wLDAgKzEgQEAKK1VubmFtZWQgcmVwb3NpdG9yeTsgZWRpdCB0aGlzIGZpbGUgJ2Rlc2NyaXB0aW9uJyB0byBuYW1lIHRoZSByZXBvc2l0b3J5LgpkaWZmIC0tZ2l0IGEvdGVzdHMvcmVzb3VyY2VzL3JlYmFzZS1zdWJtb2R1bGUvLmdpdHRlZC9pbmRleCBiL3Rlc3RzL3Jlc291cmNlcy9yZWJhc2Utc3VibW9kdWxlLy5naXR0ZWQvaW5kZXgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjYzZWZhYgotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL3Jlc291cmNlcy9yZWJhc2Utc3VibW9kdWxlLy5naXR0ZWQvaW5kZXgKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvdGVzdHMvcmVzb3VyY2VzL3JlYmFzZS1zdWJtb2R1bGUvLmdpdHRlZC9pbmZvL2V4Y2x1ZGUgYi90ZXN0cy9yZXNvdXJjZXMvcmViYXNlLXN1Ym1vZHVsZS8uZ2l0dGVkL2luZm8vZXhjbHVkZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hNTE5NmQxCi0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvcmVzb3VyY2VzL3JlYmFzZS1zdWJtb2R1bGUvLmdpdHRlZC9pbmZvL2V4Y2x1ZGUKQEAgLTAsMCArMSw2IEBACisjIGdpdCBscy1maWxlcyAtLW90aGVycyAtLWV4Y2x1ZGUtZnJvbT0uZ2l0L2luZm8vZXhjbHVkZQorIyBMaW5lcyB0aGF0IHN0YXJ0IHdpdGggJyMnIGFyZSBjb21tZW50cy4KKyMgRm9yIGEgcHJvamVjdCBtb3N0bHkgaW4gQywgdGhlIGZvbGxvd2luZyB3b3VsZCBiZSBhIGdvb2Qgc2V0IG9mCisjIGV4Y2x1ZGUgcGF0dGVybnMgKHVuY29tbWVudCB0aGVtIGlmIHlvdSB3YW50IHRvIHVzZSB0aGVtKToKKyMgKi5bb2FdCisjICp+CmRpZmYgLS1naXQgYS90ZXN0cy9yZXNvdXJjZXMvcmViYXNlLXN1Ym1vZHVsZS8uZ2l0dGVkL2luZm8vcmVmcyBiL3Rlc3RzL3Jlc291cmNlcy9yZWJhc2Utc3VibW9kdWxlLy5naXR0ZWQvaW5mby9yZWZzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjIzMGE2NDkKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9yZXNvdXJjZXMvcmViYXNlLXN1Ym1vZHVsZS8uZ2l0dGVkL2luZm8vcmVmcwpAQCAtMCwwICsxLDQgQEAKK2M2NGVhNTJkZjViMzFlZmQ3YjczNzY5NDE4ZGM5ZTI1Yjg4MDNkMjUJcmVmcy9oZWFkcy9hc3BhcmFndXMKK2M2NGVhNTJkZjViMzFlZmQ3YjczNzY5NDE4ZGM5ZTI1Yjg4MDNkMjUJcmVmcy9yZW1vdGVzL29yaWdpbi9IRUFECitjNjRlYTUyZGY1YjMxZWZkN2I3Mzc2OTQxOGRjOWUyNWI4ODAzZDI1CXJlZnMvcmVtb3Rlcy9vcmlnaW4vYXNwYXJhZ3VzCiswMmEzNWRiM2YyNGRiNTU0Yjc1N2IzMDA5YmM3ODI3ODQyNjdjNzQzCXJlZnMvcmVtb3Rlcy9vcmlnaW4vbWFzdGVyCmRpZmYgLS1naXQgYS90ZXN0cy9yZXNvdXJjZXMvcmViYXNlLXN1Ym1vZHVsZS8uZ2l0dGVkL29iamVjdHMvMDEvOTcxZTI0NTNhNDA3ZTRiOWY2Yzg2NWUyYzM3ZjRkYjIxZGEyOTQgYi90ZXN0cy9yZXNvdXJjZXMvcmViYXNlLXN1Ym1vZHVsZS8uZ2l0dGVkL29iamVjdHMvMDEvOTcxZTI0NTNhNDA3ZTRiOWY2Yzg2NWUyYzM3ZjRkYjIxZGEyOTQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzA4YjM4NgotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL3Jlc291cmNlcy9yZWJhc2Utc3VibW9kdWxlLy5naXR0ZWQvb2JqZWN0cy8wMS85NzFlMjQ1M2E0MDdlNGI5ZjZjODY1ZTJjMzdmNGRiMjFkYTI5NApAQCAtMCwwICsxIEBACit4AVXOQWrDMBAF0K51irlAwliWZmQIJYEcoReQNFJqiKwiy8n165Z00dV8Pv/BxFrK3EGP41tvKQFHHjITUpAx5KCtII1xYnRoEueIGCZCG9SXb2npP/uQnU0TuzzI4CJaosyoRcfATBSm6MRk5bf+WRtc/WMW+NjakhqcpP+Gc3/Wdb4Vf4y1vMNgnLNkiBAOaBHV3u5P9l3850t9+Pu8nl/3WNvtTzvD+qXVRQQ8rFsoVbZ7Ut8x2EqBClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvcmVzb3VyY2VzL3JlYmFzZS1zdWJtb2R1bGUvLmdpdHRlZC9vYmplY3RzLzE3L2Y4YWU4ZWJkZDA4YTRiYjI3MmY2MWI4OTdiMzA4YWQ0MmIxYjEyIGIvdGVzdHMvcmVzb3VyY2VzL3JlYmFzZS1zdWJtb2R1bGUvLmdpdHRlZC9vYmplY3RzLzE3L2Y4YWU4ZWJkZDA4YTRiYjI3MmY2MWI4OTdiMzA4YWQ0MmIxYjEyCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjc5ZTRjNDgKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9yZXNvdXJjZXMvcmViYXNlLXN1Ym1vZHVsZS8uZ2l0dGVkL29iamVjdHMvMTcvZjhhZThlYmRkMDhhNGJiMjcyZjYxYjg5N2IzMDhhZDQyYjFiMTIKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvdGVzdHMvcmVzb3VyY2VzL3JlYmFzZS1zdWJtb2R1bGUvLmdpdHRlZC9vYmplY3RzLzQyL2NkYWQ5MDNhZWYzZTdiNjE0Njc1ZTY1ODRhOGJlNDE3OTQxOTExIGIvdGVzdHMvcmVzb3VyY2VzL3JlYmFzZS1zdWJtb2R1bGUvLmdpdHRlZC9vYmplY3RzLzQyL2NkYWQ5MDNhZWYzZTdiNjE0Njc1ZTY1ODRhOGJlNDE3OTQxOTExCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjk5YjVlNmQKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9yZXNvdXJjZXMvcmViYXNlLXN1Ym1vZHVsZS8uZ2l0dGVkL29iamVjdHMvNDIvY2RhZDkwM2FlZjNlN2I2MTQ2NzVlNjU4NGE4YmU0MTc5NDE5MTEKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvdGVzdHMvcmVzb3VyY2VzL3JlYmFzZS1zdWJtb2R1bGUvLmdpdHRlZC9vYmplY3RzLzRiLzdjNTY1MDAwOGIyZTc0N2ZlMTgwOWVlYjVhMWRkZTBlODA4NTBhIGIvdGVzdHMvcmVzb3VyY2VzL3JlYmFzZS1zdWJtb2R1bGUvLmdpdHRlZC9vYmplY3RzLzRiLzdjNTY1MDAwOGIyZTc0N2ZlMTgwOWVlYjVhMWRkZTBlODA4NTBhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjAxNjM5ODUKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9yZXNvdXJjZXMvcmViYXNlLXN1Ym1vZHVsZS8uZ2l0dGVkL29iamVjdHMvNGIvN2M1NjUwMDA4YjJlNzQ3ZmUxODA5ZWViNWExZGRlMGU4MDg1MGEKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvdGVzdHMvcmVzb3VyY2VzL3JlYmFzZS1zdWJtb2R1bGUvLmdpdHRlZC9vYmplY3RzLzViLzFlOGJjY2Y3Nzg3ZTk0MmFlY2Y2MTkxMmY5NGEyYzI3NGY4NWE1IGIvdGVzdHMvcmVzb3VyY2VzL3JlYmFzZS1zdWJtb2R1bGUvLmdpdHRlZC9vYmplY3RzLzViLzFlOGJjY2Y3Nzg3ZTk0MmFlY2Y2MTkxMmY5NGEyYzI3NGY4NWE1Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ0Nzc2ZDgKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9yZXNvdXJjZXMvcmViYXNlLXN1Ym1vZHVsZS8uZ2l0dGVkL29iamVjdHMvNWIvMWU4YmNjZjc3ODdlOTQyYWVjZjYxOTEyZjk0YTJjMjc0Zjg1YTUKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvdGVzdHMvcmVzb3VyY2VzL3JlYmFzZS1zdWJtb2R1bGUvLmdpdHRlZC9vYmplY3RzLzY4L2FmMWZjNzQwN2ZkOWFkZGYxNzAxYTg3ZWIxYzk1Yzc0OTRjNTk4IGIvdGVzdHMvcmVzb3VyY2VzL3JlYmFzZS1zdWJtb2R1bGUvLmdpdHRlZC9vYmplY3RzLzY4L2FmMWZjNzQwN2ZkOWFkZGYxNzAxYTg3ZWIxYzk1Yzc0OTRjNTk4Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjZhYWY3OWYKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9yZXNvdXJjZXMvcmViYXNlLXN1Ym1vZHVsZS8uZ2l0dGVkL29iamVjdHMvNjgvYWYxZmM3NDA3ZmQ5YWRkZjE3MDFhODdlYjFjOTVjNzQ5NGM1OTgKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvdGVzdHMvcmVzb3VyY2VzL3JlYmFzZS1zdWJtb2R1bGUvLmdpdHRlZC9vYmplY3RzLzY4L2Y2MTgyZjRjODVkMzllMTMwOWQ5N2M3ZTQ1NjE1NmRjOWMwMDk2IGIvdGVzdHMvcmVzb3VyY2VzL3JlYmFzZS1zdWJtb2R1bGUvLmdpdHRlZC9vYmplY3RzLzY4L2Y2MTgyZjRjODVkMzllMTMwOWQ5N2M3ZTQ1NjE1NmRjOWMwMDk2Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmVkMWRlM2EKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9yZXNvdXJjZXMvcmViYXNlLXN1Ym1vZHVsZS8uZ2l0dGVkL29iamVjdHMvNjgvZjYxODJmNGM4NWQzOWUxMzA5ZDk3YzdlNDU2MTU2ZGM5YzAwOTYKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvdGVzdHMvcmVzb3VyY2VzL3JlYmFzZS1zdWJtb2R1bGUvLmdpdHRlZC9vYmplY3RzLzdjLzcxZjc2MDZiZDNiZmIyNWQwNjNjOTcwODA0ZTdmYzAwYjk2MDViIGIvdGVzdHMvcmVzb3VyY2VzL3JlYmFzZS1zdWJtb2R1bGUvLmdpdHRlZC9vYmplY3RzLzdjLzcxZjc2MDZiZDNiZmIyNWQwNjNjOTcwODA0ZTdmYzAwYjk2MDViCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmVmOTIzZTcKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9yZXNvdXJjZXMvcmViYXNlLXN1Ym1vZHVsZS8uZ2l0dGVkL29iamVjdHMvN2MvNzFmNzYwNmJkM2JmYjI1ZDA2M2M5NzA4MDRlN2ZjMDBiOTYwNWIKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvdGVzdHMvcmVzb3VyY2VzL3JlYmFzZS1zdWJtb2R1bGUvLmdpdHRlZC9vYmplY3RzLzdjLzdiZjg1ZTk3OGYxZDE4YzA1NjZmNzAyZDJjYjc3NjZiOWM4ZDRmIGIvdGVzdHMvcmVzb3VyY2VzL3JlYmFzZS1zdWJtb2R1bGUvLmdpdHRlZC9vYmplY3RzLzdjLzdiZjg1ZTk3OGYxZDE4YzA1NjZmNzAyZDJjYjc3NjZiOWM4ZDRmCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZlOGIxNTcKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9yZXNvdXJjZXMvcmViYXNlLXN1Ym1vZHVsZS8uZ2l0dGVkL29iamVjdHMvN2MvN2JmODVlOTc4ZjFkMThjMDU2NmY3MDJkMmNiNzc2NmI5YzhkNGYKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvdGVzdHMvcmVzb3VyY2VzL3JlYmFzZS1zdWJtb2R1bGUvLmdpdHRlZC9vYmplY3RzL2E3L2IwNjY1MzdlNmJlNzEwOWFiZmU0ZmY5N2I2NzVkNGUwNzdkYTIwIGIvdGVzdHMvcmVzb3VyY2VzL3JlYmFzZS1zdWJtb2R1bGUvLmdpdHRlZC9vYmplY3RzL2E3L2IwNjY1MzdlNmJlNzEwOWFiZmU0ZmY5N2I2NzVkNGUwNzdkYTIwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU0ZjliNjYKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9yZXNvdXJjZXMvcmViYXNlLXN1Ym1vZHVsZS8uZ2l0dGVkL29iamVjdHMvYTcvYjA2NjUzN2U2YmU3MTA5YWJmZTRmZjk3YjY3NWQ0ZTA3N2RhMjAKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvdGVzdHMvcmVzb3VyY2VzL3JlYmFzZS1zdWJtb2R1bGUvLmdpdHRlZC9vYmplY3RzL2FiLzZjZjIyYjRjNjdhMjc0YWE4ZDMxYjU4NzdkOTIzNDFlOGMyYTljIGIvdGVzdHMvcmVzb3VyY2VzL3JlYmFzZS1zdWJtb2R1bGUvLmdpdHRlZC9vYmplY3RzL2FiLzZjZjIyYjRjNjdhMjc0YWE4ZDMxYjU4NzdkOTIzNDFlOGMyYTljCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjVhY2RmMzYKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9yZXNvdXJjZXMvcmViYXNlLXN1Ym1vZHVsZS8uZ2l0dGVkL29iamVjdHMvYWIvNmNmMjJiNGM2N2EyNzRhYThkMzFiNTg3N2Q5MjM0MWU4YzJhOWMKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvdGVzdHMvcmVzb3VyY2VzL3JlYmFzZS1zdWJtb2R1bGUvLmdpdHRlZC9vYmplY3RzL2M0L2U2Y2NhM2VjNmFlMDE0OGVkMjMxZjk3MjU3ZGY4YzMxMWUwMTVmIGIvdGVzdHMvcmVzb3VyY2VzL3JlYmFzZS1zdWJtb2R1bGUvLmdpdHRlZC9vYmplY3RzL2M0L2U2Y2NhM2VjNmFlMDE0OGVkMjMxZjk3MjU3ZGY4YzMxMWUwMTVmCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJiYmYyOGYKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9yZXNvdXJjZXMvcmViYXNlLXN1Ym1vZHVsZS8uZ2l0dGVkL29iamVjdHMvYzQvZTZjY2EzZWM2YWUwMTQ4ZWQyMzFmOTcyNTdkZjhjMzExZTAxNWYKQEAgLTAsMCArMSBAQAoreAElUDFuxDAM6+xX8AG5Q4FORadON7booQU6KomSGHCs1JIvuN9Xzm0CSZGU+iQ9Xl6fny5f7z+/uH58f55DuLCB47wYNql5VMiEQagoIzFl9MzT6bSTLoiG4cAoj0h0b0DMuEstYRPrsNUDsIWhtLKTc+ExcjYFKSYpOLjFt1Tq1mGPtjww14e/Stmi3VuHnYxLhxY1SUqyH7KtyMCqGGPhwbhxzZPsjKsVcl8PCM3bhyJ1XkDQyDd+WCmXm/cyuKDd4glHhSzmpWasUrj55WBC2gL6wjS2M6O9wXaBUZ/4pJtI1qmm1nWt6mGyYiBTd95jSqBxBIUpZsaU6OZPgvl2+43XO4d/7auMnwpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL3Jlc291cmNlcy9yZWJhc2Utc3VibW9kdWxlLy5naXR0ZWQvb2JqZWN0cy9mMy82ZGU3N2RlNmY1M2RkZGFmZWIwMjRlY2FmMzc1ZTQ1YzNkOWRkZCBiL3Rlc3RzL3Jlc291cmNlcy9yZWJhc2Utc3VibW9kdWxlLy5naXR0ZWQvb2JqZWN0cy9mMy82ZGU3N2RlNmY1M2RkZGFmZWIwMjRlY2FmMzc1ZTQ1YzNkOWRkZApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jZDMzMGE3Ci0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvcmVzb3VyY2VzL3JlYmFzZS1zdWJtb2R1bGUvLmdpdHRlZC9vYmplY3RzL2YzLzZkZTc3ZGU2ZjUzZGRkYWZlYjAyNGVjYWYzNzVlNDVjM2Q5ZGRkCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3Rlc3RzL3Jlc291cmNlcy9yZWJhc2Utc3VibW9kdWxlLy5naXR0ZWQvb2JqZWN0cy9mZi9iMzZlNTEzZjVmZGY4YTZiYTg1MGEyMDE0MjY3NmEyYWM0ODA3ZCBiL3Rlc3RzL3Jlc291cmNlcy9yZWJhc2Utc3VibW9kdWxlLy5naXR0ZWQvb2JqZWN0cy9mZi9iMzZlNTEzZjVmZGY4YTZiYTg1MGEyMDE0MjY3NmEyYWM0ODA3ZApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mNjU1ZDEyCi0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvcmVzb3VyY2VzL3JlYmFzZS1zdWJtb2R1bGUvLmdpdHRlZC9vYmplY3RzL2ZmL2IzNmU1MTNmNWZkZjhhNmJhODUwYTIwMTQyNjc2YTJhYzQ4MDdkCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3Rlc3RzL3Jlc291cmNlcy9yZWJhc2Utc3VibW9kdWxlLy5naXR0ZWQvcGFja2VkLXJlZnMgYi90ZXN0cy9yZXNvdXJjZXMvcmViYXNlLXN1Ym1vZHVsZS8uZ2l0dGVkL3BhY2tlZC1yZWZzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ0YWM4NDIKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9yZXNvdXJjZXMvcmViYXNlLXN1Ym1vZHVsZS8uZ2l0dGVkL3BhY2tlZC1yZWZzCkBAIC0wLDAgKzEsMiBAQAorIyBwYWNrLXJlZnMgd2l0aDogcGVlbGVkIGZ1bGx5LXBlZWxlZCAKK2M2NGVhNTJkZjViMzFlZmQ3YjczNzY5NDE4ZGM5ZTI1Yjg4MDNkMjUgcmVmcy9oZWFkcy9hc3BhcmFndXMKZGlmZiAtLWdpdCBhL3Rlc3RzL3Jlc291cmNlcy9yZWJhc2Utc3VibW9kdWxlLy5naXR0ZWQvcmVmcy9oZWFkcy9hc3BhcmFndXMgYi90ZXN0cy9yZXNvdXJjZXMvcmViYXNlLXN1Ym1vZHVsZS8uZ2l0dGVkL3JlZnMvaGVhZHMvYXNwYXJhZ3VzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU2YWRkZTgKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9yZXNvdXJjZXMvcmViYXNlLXN1Ym1vZHVsZS8uZ2l0dGVkL3JlZnMvaGVhZHMvYXNwYXJhZ3VzCkBAIC0wLDAgKzEgQEAKKzE3ZjhhZThlYmRkMDhhNGJiMjcyZjYxYjg5N2IzMDhhZDQyYjFiMTIKZGlmZiAtLWdpdCBhL3Rlc3RzL3Jlc291cmNlcy9yZWJhc2Utc3VibW9kdWxlLy5naXR0ZWQvcmVmcy9oZWFkcy9tYXN0ZXIgYi90ZXN0cy9yZXNvdXJjZXMvcmViYXNlLXN1Ym1vZHVsZS8uZ2l0dGVkL3JlZnMvaGVhZHMvbWFzdGVyCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjI1MjNkNDkKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9yZXNvdXJjZXMvcmViYXNlLXN1Ym1vZHVsZS8uZ2l0dGVkL3JlZnMvaGVhZHMvbWFzdGVyCkBAIC0wLDAgKzEgQEAKKzAxOTcxZTI0NTNhNDA3ZTRiOWY2Yzg2NWUyYzM3ZjRkYjIxZGEyOTQKZGlmZiAtLWdpdCBhL3Rlc3RzL3Jlc291cmNlcy9yZWJhc2Utc3VibW9kdWxlL2FzcGFyYWd1cy50eHQgYi90ZXN0cy9yZXNvdXJjZXMvcmViYXNlLXN1Ym1vZHVsZS9hc3BhcmFndXMudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZmYjM2ZTUKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9yZXNvdXJjZXMvcmViYXNlLXN1Ym1vZHVsZS9hc3BhcmFndXMudHh0CkBAIC0wLDAgKzEsMTAgQEAKK0FTUEFSQUdVUyBTT1VQLgorCitUYWtlIGZvdXIgbGFyZ2UgYnVuY2hlcyBvZiBhc3BhcmFndXMsIHNjcmFwZSBpdCBuaWNlbHksIGN1dCBvZmYgb25lIGluY2gKK29mIHRoZSB0b3BzLCBhbmQgbGF5IHRoZW0gaW4gd2F0ZXIsIGNob3AgdGhlIHN0YWxrcyBhbmQgcHV0IHRoZW0gb24gdGhlCitmaXJlIHdpdGggYSBwaWVjZSBvZiBiYWNvbiwgYSBsYXJnZSBvbmlvbiBjdXQgdXAsIGFuZCBwZXBwZXIgYW5kIHNhbHQ7CithZGQgdHdvIHF1YXJ0cyBvZiB3YXRlciwgYm9pbCB0aGVtIHRpbGwgdGhlIHN0YWxrcyBhcmUgcXVpdGUgc29mdCwgdGhlbgorcHVscCB0aGVtIHRocm91Z2ggYSBzaWV2ZSwgYW5kIHN0cmFpbiB0aGUgd2F0ZXIgdG8gaXQsIHdoaWNoIG11c3QgYmUgcHV0CitiYWNrIGluIHRoZSBwb3Q7IHB1dCBpbnRvIGl0IGEgY2hpY2tlbiBjdXQgdXAsIHdpdGggdGhlIHRvcHMgb2YKK2FzcGFyYWd1cyB3aGljaCBoYWQgYmVlbiBsYWlkIGJ5LCBib2lsIGl0IHVudGlsIHRoZXNlIGxhc3QgYXJ0aWNsZXMgYXJlCitzdWZmaWNpZW50bHkgZG9uZSwgdGhpY2tlbiB3aXRoIGZsb3VyLCBidXR0ZXIgYW5kIG1pbGssIGFuZCBzZXJ2ZSBpdCB1cC4KZGlmZiAtLWdpdCBhL3Rlc3RzL3Jlc291cmNlcy9yZWJhc2Utc3VibW9kdWxlL2JlZWYudHh0IGIvdGVzdHMvcmVzb3VyY2VzL3JlYmFzZS1zdWJtb2R1bGUvYmVlZi50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjhmNjE4MgotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL3Jlc291cmNlcy9yZWJhc2Utc3VibW9kdWxlL2JlZWYudHh0CkBAIC0wLDAgKzEsMjIgQEAKK0JFRUYgU09VUC4KKworVGFrZSB0aGUgaGluZCBzaGluIG9mIGJlZWYsIGN1dCBvZmYgYWxsIHRoZSBmbGVzaCBvZmYgdGhlIGxlZy1ib25lLAord2hpY2ggbXVzdCBiZSB0YWtlbiBhd2F5IGVudGlyZWx5LCBvciB0aGUgc291cCB3aWxsIGJlIGdyZWFzeS4gV2FzaCB0aGUKK21lYXQgY2xlYW4gYW5kIGxheSBpdCBpbiBhIHBvdCwgc3ByaW5rbGUgb3ZlciBpdCBvbmUgc21hbGwKK3RhYmxlLXNwb29uZnVsIG9mIHBvdW5kZWQgYmxhY2sgcGVwcGVyLCBhbmQgdHdvIG9mIHNhbHQ7IHRocmVlIG9uaW9ucwordGhlIHNpemUgb2YgYSBoZW4ncyBlZ2csIGN1dCBzbWFsbCwgc2l4IHNtYWxsIGNhcnJvdHMgc2NyYXBlZCBhbmQgY3V0Cit1cCwgdHdvIHNtYWxsIHR1cm5pcHMgcGFyZWQgYW5kIGN1dCBpbnRvIGRpY2U7IHBvdXIgb24gdGhyZWUgcXVhcnRzIG9mCit3YXRlciwgY292ZXIgdGhlIHBvdCBjbG9zZSwgYW5kIGtlZXAgaXQgZ2VudGx5IGFuZCBzdGVhZGlseSBib2lsaW5nIGZpdmUKK2hvdXJzLCB3aGljaCB3aWxsIGxlYXZlIGFib3V0IHRocmVlIHBpbnRzIG9mIGNsZWFyIHNvdXA7IGRvIG5vdCBsZXQgdGhlCitwb3QgYm9pbCBvdmVyLCBidXQgdGFrZSBvZmYgdGhlIHNjdW0gY2FyZWZ1bGx5LCBhcyBpdCByaXNlcy4gV2hlbiBpdCBoYXMKK2JvaWxlZCBmb3VyIGhvdXJzLCBwdXQgaW4gYSBzbWFsbCBidW5kbGUgb2YgdGh5bWUgYW5kIHBhcnNsZXksIGFuZCBhCitwaW50IG9mIGNlbGVyeSBjdXQgc21hbGwsIG9yIGEgdGVhLXNwb29uZnVsIG9mIGNlbGVyeSBzZWVkIHBvdW5kZWQuCitUaGVzZSBsYXR0ZXIgaW5ncmVkaWVudHMgd291bGQgbG9zZSB0aGVpciBkZWxpY2F0ZSBmbGF2b3VyIGlmIGJvaWxlZCB0b28KK211Y2guIEp1c3QgYmVmb3JlIHlvdSB0YWtlIGl0IHVwLCBicm93biBpdCBpbiB0aGUgZm9sbG93aW5nIG1hbm5lcjogcHV0CithIHNtYWxsIHRhYmxlLXNwb29uZnVsIG9mIG5pY2UgYnJvd24gc3VnYXIgaW50byBhbiBpcm9uIHNraWxsZXQsIHNldCBpdAorb24gdGhlIGZpcmUgYW5kIHN0aXIgaXQgdGlsbCBpdCBtZWx0cyBhbmQgbG9va3MgdmVyeSBkYXJrLCBwb3VyIGludG8gaXQKK2EgbGFkbGUgZnVsbCBvZiB0aGUgc291cCwgYSBsaXR0bGUgYXQgYSB0aW1lOyBzdGlycmluZyBpdCBhbGwgdGhlIHdoaWxlLgorU3RyYWluIHRoaXMgYnJvd25pbmcgYW5kIG1peCBpdCB3ZWxsIHdpdGggdGhlIHNvdXA7IHRha2Ugb3V0IHRoZSBidW5kbGUKK29mIHRoeW1lIGFuZCBwYXJzbGV5LCBwdXQgdGhlIG5pY2VzdCBwaWVjZXMgb2YgbWVhdCBpbiB5b3VyIHR1cmVlbiwgYW5kCitwb3VyIG9uIHRoZSBzb3VwIGFuZCB2ZWdldGFibGVzOyBwdXQgaW4gc29tZSB0b2FzdGVkIGJyZWFkIGN1dCBpbiBkaWNlLAorYW5kIHNlcnZlIGl0IHVwLgpkaWZmIC0tZ2l0IGEvdGVzdHMvcmVzb3VyY2VzL3JlYmFzZS1zdWJtb2R1bGUvYm91aWxsaS50eHQgYi90ZXN0cy9yZXNvdXJjZXMvcmViYXNlLXN1Ym1vZHVsZS9ib3VpbGxpLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40YjdjNTY1Ci0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvcmVzb3VyY2VzL3JlYmFzZS1zdWJtb2R1bGUvYm91aWxsaS50eHQKQEAgLTAsMCArMSwxOCBAQAorU09VUCBXSVRIIEJPVUlMTEkuCisKK1Rha2UgdGhlIG5pY2VzdCBwYXJ0IG9mIHRoZSB0aGljayBicmlza2V0IG9mIGJlZWYsIGFib3V0IGVpZ2h0IHBvdW5kcywKK3B1dCBpdCBpbnRvIGEgcG90IHdpdGggZXZlcnkgdGhpbmcgZGlyZWN0ZWQgZm9yIHRoZSBvdGhlciBzb3VwOyBtYWtlIGl0CitleGFjdGx5IGluIHRoZSBzYW1lIHdheSwgb25seSBwdXQgaXQgb24gYW4gaG91ciBzb29uZXIsIHRoYXQgeW91IG1heQoraGF2ZSB0aW1lIHRvIHByZXBhcmUgdGhlIGJvdWlsbGk7IGFmdGVyIGl0IGhhcyBib2lsZWQgZml2ZSBob3VycywgdGFrZQorb3V0IHRoZSBiZWVmLCBjb3ZlciB1cCB0aGUgc291cCBhbmQgc2V0IGl0IG5lYXIgdGhlIGZpcmUgdGhhdCBpdCBtYXkKK2tlZXAgaG90LiBUYWtlIHRoZSBza2luIG9mZiB0aGUgYmVlZiwgaGF2ZSB0aGUgeWVsayBvZiBhbiBlZ2cgd2VsbAorYmVhdGVuLCBkaXAgYSBmZWF0aGVyIGluIGl0IGFuZCB3YXNoIHRoZSB0b3Agb2YgeW91ciBiZWVmLCBzcHJpbmtsZSBvdmVyCitpdCB0aGUgY3J1bWIgb2Ygc3RhbGUgYnJlYWQgZmluZWx5IGdyYXRlZCwgcHV0IGl0IGluIGEgRHV0Y2ggb3ZlbgorcHJldmlvdXNseSBoZWF0ZWQsIHB1dCB0aGUgdG9wIG9uIHdpdGggY29hbHMgZW5vdWdoIHRvIGJyb3duLCBidXQgbm90CitidXJuIHRoZSBiZWVmOyBsZXQgaXQgc3RhbmQgbmVhcmx5IGFuIGhvdXIsIGFuZCBwcmVwYXJlIHlvdXIgZ3JhdnkKK3RodXM6LS1UYWtlIGEgc3VmZmljaWVudCBxdWFudGl0eSBvZiBzb3VwIGFuZCB0aGUgdmVnZXRhYmxlcyBib2lsZWQgaW4KK2l0OyBhZGQgdG8gaXQgYSB0YWJsZS1zcG9vbmZ1bCBvZiByZWQgd2luZSwgYW5kIHR3byBvZiBtdXNocm9vbSBjYXRzdXAsCit0aGlja2VuIHdpdGggYSBsaXR0bGUgYml0IG9mIGJ1dHRlciBhbmQgYSBsaXR0bGUgYnJvd24gZmxvdXI7IG1ha2UgaXQKK3ZlcnkgaG90LCBwb3VyIGl0IGluIHlvdXIgZGlzaCwgYW5kIHB1dCB0aGUgYmVlZiBvbiBpdC4gR2FybmlzaCBpdCB3aXRoCitncmVlbiBwaWNrbGUsIGN1dCBpbiB0aGluIHNsaWNlcywgc2VydmUgdXAgdGhlIHNvdXAgaW4gYSB0dXJlZW4gd2l0aAorYml0cyBvZiB0b2FzdGVkIGJyZWFkLgpkaWZmIC0tZ2l0IGEvdGVzdHMvcmVzb3VyY2VzL3JlYmFzZS1zdWJtb2R1bGUvZ3JhdnkudHh0IGIvdGVzdHMvcmVzb3VyY2VzL3JlYmFzZS1zdWJtb2R1bGUvZ3JhdnkudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmM0ZTZjY2EKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9yZXNvdXJjZXMvcmViYXNlLXN1Ym1vZHVsZS9ncmF2eS50eHQKQEAgLTAsMCArMSw4IEBACitHUkFWWSBTT1VQLgorCitHZXQgZWlnaHQgcG91bmRzIG9mIGNvYXJzZSBsZWFuIGJlZWYtLXdhc2ggaXQgY2xlYW4gYW5kIGxheSBpdCBpbiB5b3VyCitwb3QsIHB1dCBpbiB0aGUgc2FtZSBpbmdyZWRpZW50cyBhcyBmb3IgdGhlIHNoaW4gc291cCwgd2l0aCB0aGUgc2FtZQorcXVhbnRpdHkgb2Ygd2F0ZXIsIGFuZCBmb2xsb3cgdGhlIHByb2Nlc3MgZGlyZWN0ZWQgZm9yIHRoYXQuIFN0cmFpbiB0aGUKK3NvdXAgdGhyb3VnaCBhIHNpZXZlLCBhbmQgc2VydmUgaXQgdXAgY2xlYXIsIHdpdGggbm90aGluZyBtb3JlIHRoYW4KK3RvYXN0ZWQgYnJlYWQgaW4gaXQ7IHR3byB0YWJsZS1zcG9vbnNmdWwgb2YgbXVzaHJvb20gY2F0c3VwIHdpbGwgYWRkIGEKK2ZpbmUgZmxhdm91ciB0byB0aGUgc291cC4KZGlmZiAtLWdpdCBhL3Rlc3RzL3Jlc291cmNlcy9yZWJhc2Utc3VibW9kdWxlL215LXN1Ym1vZHVsZSBiL3Rlc3RzL3Jlc291cmNlcy9yZWJhc2Utc3VibW9kdWxlL215LXN1Ym1vZHVsZQpuZXcgZmlsZSBtb2RlIDE2MDAwMAppbmRleCAwMDAwMDAwLi5lZmFkMGIxCi0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvcmVzb3VyY2VzL3JlYmFzZS1zdWJtb2R1bGUvbXktc3VibW9kdWxlCkBAIC0wLDAgKzEgQEAKK1N1YnByb2plY3QgY29tbWl0IGVmYWQwYjExYzQ3Y2IyZjAyMjBjYmQ2ZjViMGY5M2JiOTkwNjRiMDAKZGlmZiAtLWdpdCBhL3Rlc3RzL3Jlc291cmNlcy9yZWJhc2Utc3VibW9kdWxlL295c3Rlci50eHQgYi90ZXN0cy9yZXNvdXJjZXMvcmViYXNlLXN1Ym1vZHVsZS9veXN0ZXIudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjY4YWYxZmMKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9yZXNvdXJjZXMvcmViYXNlLXN1Ym1vZHVsZS9veXN0ZXIudHh0CkBAIC0wLDAgKzEsMTMgQEAKK09ZU1RFUiBTT1VQLgorCitXYXNoIGFuZCBkcmFpbiB0d28gcXVhcnRzIG9mIG95c3RlcnMsIHB1dCB0aGVtIG9uIHdpdGggdGhyZWUgcXVhcnRzIG9mCit3YXRlciwgdGhyZWUgb25pb25zIGNob3BwZWQgdXAsIHR3byBvciB0aHJlZSBzbGljZXMgb2YgbGVhbiBoYW0sIHBlcHBlcgorYW5kIHNhbHQ7IGJvaWwgaXQgdGlsbCByZWR1Y2VkIG9uZS1oYWxmLCBzdHJhaW4gaXQgdGhyb3VnaCBhIHNpZXZlLAorcmV0dXJuIHRoZSBsaXF1aWQgaW50byB0aGUgcG90LCBwdXQgaW4gb25lIHF1YXJ0IG9mIGZyZXNoIG95c3RlcnMsIGJvaWwKK2l0IHRpbGwgdGhleSBhcmUgc3VmZmljaWVudGx5IGRvbmUsIGFuZCB0aGlja2VuIHRoZSBzb3VwIHdpdGggZm91cgorc3Bvb25zZnVsIG9mIGZsb3VyLCB0d28gZ2lsbHMgb2YgcmljaCBjcmVhbSwgYW5kIHRoZSB5ZWxrcyBvZiBzaXggbmV3CitsYWlkIGVnZ3MgYmVhdGVuIHdlbGw7IGJvaWwgaXQgYSBmZXcgbWludXRlcyBhZnRlciB0aGUgdGhpY2tlbmluZyBpcyBwdXQKK2luLiBUYWtlIGNhcmUgdGhhdCBpdCBkb2VzIG5vdCBjdXJkbGUsIGFuZCB0aGF0IHRoZSBmbG91ciBpcyBub3QgaW4KK2x1bXBzOyBzZXJ2ZSBpdCB1cCB3aXRoIHRoZSBsYXN0IG95c3RlcnMgdGhhdCB3ZXJlIHB1dCBpbi4gSWYgdGhlCitmbGF2b3VyIG9mIHRoeW1lIGJlIGFncmVlYWJsZSwgeW91IG1heSBwdXQgaW4gYSBsaXR0bGUsIGJ1dCB0YWtlIGNhcmUKK3RoYXQgaXQgZG9lcyBub3QgYm9pbCBpbiBpdCBsb25nIGVub3VnaCB0byBkaXNjb2xvdXIgdGhlIHNvdXAuCmRpZmYgLS1naXQgYS90ZXN0cy9yZXNvdXJjZXMvcmViYXNlLXN1Ym1vZHVsZS92ZWFsLnR4dCBiL3Rlc3RzL3Jlc291cmNlcy9yZWJhc2Utc3VibW9kdWxlL3ZlYWwudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmE3YjA2NjUKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9yZXNvdXJjZXMvcmViYXNlLXN1Ym1vZHVsZS92ZWFsLnR4dApAQCAtMCwwICsxLDE4IEBACitWRUFMIFNPVVAuCisKK1B1dCBpbnRvIGEgcG90IHRocmVlIHF1YXJ0cyBvZiB3YXRlciwgdGhyZWUgb25pb25zIGN1dCBzbWFsbCwgb25lCitzcG9vbmZ1bCBvZiBibGFjayBwZXBwZXIgcG91bmRlZCwgYW5kIHR3byBvZiBzYWx0LCB3aXRoIHR3byBvciB0aHJlZQorc2xpY2VzIG9mIGxlYW4gaGFtOyBsZXQgaXQgYm9pbCBzdGVhZGlseSB0d28gaG91cnM7IHNraW0gaXQKK29jY2FzaW9uYWxseSwgdGhlbiBwdXQgaW50byBpdCBhIHNoaW4gb2YgdmVhbCwgbGV0IGl0IGJvaWwgdHdvIGhvdXJzCitsb25nZXI7IHRha2Ugb3V0IHRoZSBzbGljZXMgb2YgaGFtLCBhbmQgc2tpbSBvZmYgdGhlIGdyZWFzZSBpZiBhbnkKK3Nob3VsZCByaXNlLCB0YWtlIGEgZ2lsbCBvZiBnb29kIGNyZWFtLCBtaXggd2l0aCBpdCB0d28gdGFibGUtc3Bvb25zZnVsCitvZiBmbG91ciB2ZXJ5IG5pY2VseSwgYW5kIHRoZSB5ZWxrcyBvZiB0d28gZWdncyBiZWF0ZW4gd2VsbCwgc3RyYWluIHRoaXMKK21peHR1cmUsIGFuZCBhZGQgc29tZSBjaG9wcGVkIHBhcnNsZXk7IHBvdXIgc29tZSBzb3VwIG9uIGJ5IGRlZ3JlZXMsCitzdGlyIGl0IHdlbGwsIGFuZCBwb3VyIGl0IGludG8gdGhlIHBvdCwgY29udGludWluZyB0byBzdGlyIHVudGlsIGl0IGhhcworYm9pbGVkIHR3byBvciB0aHJlZSBtaW51dGVzIHRvIHRha2Ugb2ZmIHRoZSByYXcgdGFzdGUgb2YgdGhlIGVnZ3MuIElmCit0aGUgY3JlYW0gYmUgbm90IHBlcmZlY3RseSBzd2VldCwgYW5kIHRoZSBlZ2dzIHF1aXRlIG5ldywgdGhlIHRoaWNrZW5pbmcKK3dpbGwgY3VyZGxlIGluIHRoZSBzb3VwLiBGb3IgYSBjaGFuZ2UgeW91IG1heSBwdXQgYSBkb3plbiByaXBlIHRvbWF0b3MKK2luLCBmaXJzdCB0YWtpbmcgb2ZmIHRoZWlyIHNraW5zLCBieSBsZXR0aW5nIHRoZW0gc3RhbmQgYSBmZXcgbWludXRlcyBpbgoraG90IHdhdGVyLCB3aGVuIHRoZXkgbWF5IGJlIGVhc2lseSBwZWVsZWQuIFdoZW4gbWFkZSBpbiB0aGlzIHdheSB5b3UKK211c3QgdGhpY2tlbiBpdCB3aXRoIHRoZSBmbG91ciBvbmx5LiBBbnkgcGFydCBvZiB0aGUgdmVhbCBtYXkgYmUgdXNlZCwKK2J1dCB0aGUgc2hpbiBvciBrbnVja2xlIGlzIHRoZSBuaWNlc3QuCmRpZmYgLS1naXQgYS90ZXN0cy9yZXNvdXJjZXMvc2hhMS9oZWxsb19jIGIvdGVzdHMvcmVzb3VyY2VzL3NoYTEvaGVsbG9fYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40NTk1MGIyCi0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvcmVzb3VyY2VzL3NoYTEvaGVsbG9fYwpAQCAtMCwwICsxLDYgQEAKKyNpbmNsdWRlIDxzdGRpby5oPgorCitpbnQgbWFpbihpbnQgYXJnYywgY2hhciAqKmFyZ3YpCit7CisJcHJpbnRmKCJIZWxsbywgJXNcbiIsICJ3b3JsZCIpOworfQpkaWZmIC0tZ2l0IGEvdGVzdHMvcmVzb3VyY2VzL3NoYTEvc2hhdHRlcmVkLTEucGRmIGIvdGVzdHMvcmVzb3VyY2VzL3NoYTEvc2hhdHRlcmVkLTEucGRmCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJhOWFhYTEKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9yZXNvdXJjZXMvc2hhMS9zaGF0dGVyZWQtMS5wZGYKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvdGVzdHMvcmVzb3VyY2VzL3N1Ym1vZHVsZXMtd29ya3RyZWUtY2hpbGQvLmdpdHRlZCBiL3Rlc3RzL3Jlc291cmNlcy9zdWJtb2R1bGVzLXdvcmt0cmVlLWNoaWxkLy5naXR0ZWQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDMyODZmNQotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL3Jlc291cmNlcy9zdWJtb2R1bGVzLXdvcmt0cmVlLWNoaWxkLy5naXR0ZWQKQEAgLTAsMCArMSBAQAorZ2l0ZGlyOiAuLi9zdWJtb2R1bGVzL3Rlc3RyZXBvLy5naXQvd29ya3RyZWVzL3N1Ym1vZHVsZXMtd29ya3RyZWUtY2hpbGQKZGlmZiAtLWdpdCBhL3Rlc3RzL3Jlc291cmNlcy9zdWJtb2R1bGVzLXdvcmt0cmVlLWNoaWxkL1JFQURNRSBiL3Rlc3RzL3Jlc291cmNlcy9zdWJtb2R1bGVzLXdvcmt0cmVlLWNoaWxkL1JFQURNRQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hODIzMzEyCi0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvcmVzb3VyY2VzL3N1Ym1vZHVsZXMtd29ya3RyZWUtY2hpbGQvUkVBRE1FCkBAIC0wLDAgKzEgQEAKK2hleSB0aGVyZQpkaWZmIC0tZ2l0IGEvdGVzdHMvcmVzb3VyY2VzL3N1Ym1vZHVsZXMtd29ya3RyZWUtY2hpbGQvYnJhbmNoX2ZpbGUudHh0IGIvdGVzdHMvcmVzb3VyY2VzL3N1Ym1vZHVsZXMtd29ya3RyZWUtY2hpbGQvYnJhbmNoX2ZpbGUudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjM2OTdkNjQKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9yZXNvdXJjZXMvc3VibW9kdWxlcy13b3JrdHJlZS1jaGlsZC9icmFuY2hfZmlsZS50eHQKQEAgLTAsMCArMSwyIEBACitoaQorYnllIQpkaWZmIC0tZ2l0IGEvdGVzdHMvcmVzb3VyY2VzL3N1Ym1vZHVsZXMtd29ya3RyZWUtY2hpbGQvbmV3LnR4dCBiL3Rlc3RzL3Jlc291cmNlcy9zdWJtb2R1bGVzLXdvcmt0cmVlLWNoaWxkL25ldy50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTcxNTg2YwotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL3Jlc291cmNlcy9zdWJtb2R1bGVzLXdvcmt0cmVlLWNoaWxkL25ldy50eHQKQEAgLTAsMCArMSBAQAorbXkgbmV3IGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL3Jlc291cmNlcy9zdWJtb2R1bGVzLXdvcmt0cmVlLXBhcmVudC8uZ2l0bW9kdWxlcyBiL3Rlc3RzL3Jlc291cmNlcy9zdWJtb2R1bGVzLXdvcmt0cmVlLXBhcmVudC8uZ2l0bW9kdWxlcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43ODMwOGM5Ci0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvcmVzb3VyY2VzL3N1Ym1vZHVsZXMtd29ya3RyZWUtcGFyZW50Ly5naXRtb2R1bGVzCkBAIC0wLDAgKzEsMyBAQAorW3N1Ym1vZHVsZSAidGVzdHJlcG8iXQorCXBhdGggPSB0ZXN0cmVwbworCXVybCA9IC9Vc2Vycy9yYi9zcmMvbGliZ2l0Mi90ZXN0cy9yZXNvdXJjZXMvdGVzdHJlcG8uZ2l0CmRpZmYgLS1naXQgYS90ZXN0cy9yZXNvdXJjZXMvc3VibW9kdWxlcy13b3JrdHJlZS1wYXJlbnQvLmdpdHRlZCBiL3Rlc3RzL3Jlc291cmNlcy9zdWJtb2R1bGVzLXdvcmt0cmVlLXBhcmVudC8uZ2l0dGVkCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjg3YmQ5YWUKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9yZXNvdXJjZXMvc3VibW9kdWxlcy13b3JrdHJlZS1wYXJlbnQvLmdpdHRlZApAQCAtMCwwICsxIEBACitnaXRkaXI6IC4uL3N1Ym1vZHVsZXMvLmdpdC93b3JrdHJlZXMvc3VibW9kdWxlcy13b3JrdHJlZS1wYXJlbnQKZGlmZiAtLWdpdCBhL3Rlc3RzL3Jlc291cmNlcy9zdWJtb2R1bGVzLXdvcmt0cmVlLXBhcmVudC9kZWxldGVkIGIvdGVzdHMvcmVzb3VyY2VzL3N1Ym1vZHVsZXMtd29ya3RyZWUtcGFyZW50L2RlbGV0ZWQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDkyYmZiOQotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL3Jlc291cmNlcy9zdWJtb2R1bGVzLXdvcmt0cmVlLXBhcmVudC9kZWxldGVkCkBAIC0wLDAgKzEgQEAKK3lvCmRpZmYgLS1naXQgYS90ZXN0cy9yZXNvdXJjZXMvc3VibW9kdWxlcy13b3JrdHJlZS1wYXJlbnQvbW9kaWZpZWQgYi90ZXN0cy9yZXNvdXJjZXMvc3VibW9kdWxlcy13b3JrdHJlZS1wYXJlbnQvbW9kaWZpZWQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDkyYmZiOQotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL3Jlc291cmNlcy9zdWJtb2R1bGVzLXdvcmt0cmVlLXBhcmVudC9tb2RpZmllZApAQCAtMCwwICsxIEBACit5bwpkaWZmIC0tZ2l0IGEvdGVzdHMvcmVzb3VyY2VzL3N1Ym1vZHVsZXMtd29ya3RyZWUtcGFyZW50L3VubW9kaWZpZWQgYi90ZXN0cy9yZXNvdXJjZXMvc3VibW9kdWxlcy13b3JrdHJlZS1wYXJlbnQvdW5tb2RpZmllZApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wOTJiZmI5Ci0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvcmVzb3VyY2VzL3N1Ym1vZHVsZXMtd29ya3RyZWUtcGFyZW50L3VubW9kaWZpZWQKQEAgLTAsMCArMSBAQAoreW8KZGlmZiAtLWdpdCBhL3Rlc3RzL3Jlc291cmNlcy9zdWJtb2R1bGVzLy5naXR0ZWQvbG9ncy9yZWZzL2hlYWRzL3N1Ym1vZHVsZXMtd29ya3RyZWUtcGFyZW50IGIvdGVzdHMvcmVzb3VyY2VzL3N1Ym1vZHVsZXMvLmdpdHRlZC9sb2dzL3JlZnMvaGVhZHMvc3VibW9kdWxlcy13b3JrdHJlZS1wYXJlbnQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjVlOTg4NQotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL3Jlc291cmNlcy9zdWJtb2R1bGVzLy5naXR0ZWQvbG9ncy9yZWZzL2hlYWRzL3N1Ym1vZHVsZXMtd29ya3RyZWUtcGFyZW50CkBAIC0wLDAgKzEgQEAKKzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAgOTc4OTY4MTBiMzIxMDI0NGE2MmE4MjQ1OGI4ZTA4MTllY2ZjNjg1MCBQYXRyaWNrIFN0ZWluaGFyZHQgPHBzQHBrcy5pbT4gMTQ0NzA4NDI0MCArMDEwMAlicmFuY2g6IENyZWF0ZWQgZnJvbSBIRUFECmRpZmYgLS1naXQgYS90ZXN0cy9yZXNvdXJjZXMvc3VibW9kdWxlcy8uZ2l0dGVkL3JlZnMvaGVhZHMvc3VibW9kdWxlcy13b3JrdHJlZS1wYXJlbnQgYi90ZXN0cy9yZXNvdXJjZXMvc3VibW9kdWxlcy8uZ2l0dGVkL3JlZnMvaGVhZHMvc3VibW9kdWxlcy13b3JrdHJlZS1wYXJlbnQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzJiOTM1OAotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL3Jlc291cmNlcy9zdWJtb2R1bGVzLy5naXR0ZWQvcmVmcy9oZWFkcy9zdWJtb2R1bGVzLXdvcmt0cmVlLXBhcmVudApAQCAtMCwwICsxIEBACis5Nzg5NjgxMGIzMjEwMjQ0YTYyYTgyNDU4YjhlMDgxOWVjZmM2ODUwCmRpZmYgLS1naXQgYS90ZXN0cy9yZXNvdXJjZXMvc3VibW9kdWxlcy8uZ2l0dGVkL3dvcmt0cmVlcy9zdWJtb2R1bGVzLXdvcmt0cmVlLXBhcmVudC9IRUFEIGIvdGVzdHMvcmVzb3VyY2VzL3N1Ym1vZHVsZXMvLmdpdHRlZC93b3JrdHJlZXMvc3VibW9kdWxlcy13b3JrdHJlZS1wYXJlbnQvSEVBRApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hMDcxMzRiCi0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvcmVzb3VyY2VzL3N1Ym1vZHVsZXMvLmdpdHRlZC93b3JrdHJlZXMvc3VibW9kdWxlcy13b3JrdHJlZS1wYXJlbnQvSEVBRApAQCAtMCwwICsxIEBACityZWY6IHJlZnMvaGVhZHMvc3VibW9kdWxlcy13b3JrdHJlZS1wYXJlbnQKZGlmZiAtLWdpdCBhL3Rlc3RzL3Jlc291cmNlcy9zdWJtb2R1bGVzLy5naXR0ZWQvd29ya3RyZWVzL3N1Ym1vZHVsZXMtd29ya3RyZWUtcGFyZW50L09SSUdfSEVBRCBiL3Rlc3RzL3Jlc291cmNlcy9zdWJtb2R1bGVzLy5naXR0ZWQvd29ya3RyZWVzL3N1Ym1vZHVsZXMtd29ya3RyZWUtcGFyZW50L09SSUdfSEVBRApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zMmI5MzU4Ci0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvcmVzb3VyY2VzL3N1Ym1vZHVsZXMvLmdpdHRlZC93b3JrdHJlZXMvc3VibW9kdWxlcy13b3JrdHJlZS1wYXJlbnQvT1JJR19IRUFECkBAIC0wLDAgKzEgQEAKKzk3ODk2ODEwYjMyMTAyNDRhNjJhODI0NThiOGUwODE5ZWNmYzY4NTAKZGlmZiAtLWdpdCBhL3Rlc3RzL3Jlc291cmNlcy9zdWJtb2R1bGVzLy5naXR0ZWQvd29ya3RyZWVzL3N1Ym1vZHVsZXMtd29ya3RyZWUtcGFyZW50L2NvbW1vbmRpciBiL3Rlc3RzL3Jlc291cmNlcy9zdWJtb2R1bGVzLy5naXR0ZWQvd29ya3RyZWVzL3N1Ym1vZHVsZXMtd29ya3RyZWUtcGFyZW50L2NvbW1vbmRpcgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hYWIwNDA4Ci0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvcmVzb3VyY2VzL3N1Ym1vZHVsZXMvLmdpdHRlZC93b3JrdHJlZXMvc3VibW9kdWxlcy13b3JrdHJlZS1wYXJlbnQvY29tbW9uZGlyCkBAIC0wLDAgKzEgQEAKKy4uLy4uCmRpZmYgLS1naXQgYS90ZXN0cy9yZXNvdXJjZXMvc3VibW9kdWxlcy8uZ2l0dGVkL3dvcmt0cmVlcy9zdWJtb2R1bGVzLXdvcmt0cmVlLXBhcmVudC9naXRkaXIgYi90ZXN0cy9yZXNvdXJjZXMvc3VibW9kdWxlcy8uZ2l0dGVkL3dvcmt0cmVlcy9zdWJtb2R1bGVzLXdvcmt0cmVlLXBhcmVudC9naXRkaXIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZWFhZjEzYgotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL3Jlc291cmNlcy9zdWJtb2R1bGVzLy5naXR0ZWQvd29ya3RyZWVzL3N1Ym1vZHVsZXMtd29ya3RyZWUtcGFyZW50L2dpdGRpcgpAQCAtMCwwICsxIEBACisuLi8uLi8uLi8uLi9zdWJtb2R1bGVzLXdvcmt0cmVlLXBhcmVudC8uZ2l0CmRpZmYgLS1naXQgYS90ZXN0cy9yZXNvdXJjZXMvc3VibW9kdWxlcy8uZ2l0dGVkL3dvcmt0cmVlcy9zdWJtb2R1bGVzLXdvcmt0cmVlLXBhcmVudC9pbmRleCBiL3Rlc3RzL3Jlc291cmNlcy9zdWJtb2R1bGVzLy5naXR0ZWQvd29ya3RyZWVzL3N1Ym1vZHVsZXMtd29ya3RyZWUtcGFyZW50L2luZGV4Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjViNjhmMTgKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9yZXNvdXJjZXMvc3VibW9kdWxlcy8uZ2l0dGVkL3dvcmt0cmVlcy9zdWJtb2R1bGVzLXdvcmt0cmVlLXBhcmVudC9pbmRleApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS90ZXN0cy9yZXNvdXJjZXMvc3VibW9kdWxlcy90ZXN0cmVwby8uZ2l0dGVkL2NvbmZpZyBiL3Rlc3RzL3Jlc291cmNlcy9zdWJtb2R1bGVzL3Rlc3RyZXBvLy5naXR0ZWQvY29uZmlnCmluZGV4IGQ2ZGNhZDEuLjhlNTU3MTEgMTAwNjQ0Ci0tLSBhL3Rlc3RzL3Jlc291cmNlcy9zdWJtb2R1bGVzL3Rlc3RyZXBvLy5naXR0ZWQvY29uZmlnCisrKyBiL3Rlc3RzL3Jlc291cmNlcy9zdWJtb2R1bGVzL3Rlc3RyZXBvLy5naXR0ZWQvY29uZmlnCkBAIC00LDkgKzQsNiBAQAogCWJhcmUgPSBmYWxzZQogCWxvZ2FsbHJlZnVwZGF0ZXMgPSB0cnVlCiAJaWdub3JlY2FzZSA9IHRydWUKLVtyZW1vdGUgIm9yaWdpbiJdCi0JZmV0Y2ggPSArcmVmcy9oZWFkcy8qOnJlZnMvcmVtb3Rlcy9vcmlnaW4vKgotCXVybCA9IC9Vc2Vycy9yYi9zcmMvbGliZ2l0Mi90ZXN0cy9yZXNvdXJjZXMvdGVzdHJlcG8uZ2l0CiBbYnJhbmNoICJtYXN0ZXIiXQogCXJlbW90ZSA9IG9yaWdpbgogCW1lcmdlID0gcmVmcy9oZWFkcy9tYXN0ZXIKZGlmZiAtLWdpdCBhL3Rlc3RzL3Jlc291cmNlcy9zdWJtb2R1bGVzL3Rlc3RyZXBvLy5naXR0ZWQvbG9ncy9yZWZzL2hlYWRzL3N1Ym1vZHVsZXMtd29ya3RyZWUtY2hpbGQgYi90ZXN0cy9yZXNvdXJjZXMvc3VibW9kdWxlcy90ZXN0cmVwby8uZ2l0dGVkL2xvZ3MvcmVmcy9oZWFkcy9zdWJtb2R1bGVzLXdvcmt0cmVlLWNoaWxkCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmRkNDY1MGYKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9yZXNvdXJjZXMvc3VibW9kdWxlcy90ZXN0cmVwby8uZ2l0dGVkL2xvZ3MvcmVmcy9oZWFkcy9zdWJtb2R1bGVzLXdvcmt0cmVlLWNoaWxkCkBAIC0wLDAgKzEgQEAKKzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAgYTY1ZmVkZjM5YWVmZTQwMmQzYmI2ZTI0ZGY0ZDRmNWZlNDU0Nzc1MCBQYXRyaWNrIFN0ZWluaGFyZHQgPHBzQHBrcy5pbT4gMTQ0NzA4NDI1MiArMDEwMAlicmFuY2g6IENyZWF0ZWQgZnJvbSBIRUFECmRpZmYgLS1naXQgYS90ZXN0cy9yZXNvdXJjZXMvc3VibW9kdWxlcy90ZXN0cmVwby8uZ2l0dGVkL3JlZnMvaGVhZHMvc3VibW9kdWxlcy13b3JrdHJlZS1jaGlsZCBiL3Rlc3RzL3Jlc291cmNlcy9zdWJtb2R1bGVzL3Rlc3RyZXBvLy5naXR0ZWQvcmVmcy9oZWFkcy9zdWJtb2R1bGVzLXdvcmt0cmVlLWNoaWxkCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNkOGYwYTQKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9yZXNvdXJjZXMvc3VibW9kdWxlcy90ZXN0cmVwby8uZ2l0dGVkL3JlZnMvaGVhZHMvc3VibW9kdWxlcy13b3JrdHJlZS1jaGlsZApAQCAtMCwwICsxIEBACithNjVmZWRmMzlhZWZlNDAyZDNiYjZlMjRkZjRkNGY1ZmU0NTQ3NzUwCmRpZmYgLS1naXQgYS90ZXN0cy9yZXNvdXJjZXMvc3VibW9kdWxlcy90ZXN0cmVwby8uZ2l0dGVkL3dvcmt0cmVlcy9zdWJtb2R1bGVzLXdvcmt0cmVlLWNoaWxkL0hFQUQgYi90ZXN0cy9yZXNvdXJjZXMvc3VibW9kdWxlcy90ZXN0cmVwby8uZ2l0dGVkL3dvcmt0cmVlcy9zdWJtb2R1bGVzLXdvcmt0cmVlLWNoaWxkL0hFQUQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZWY4MmJkNAotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL3Jlc291cmNlcy9zdWJtb2R1bGVzL3Rlc3RyZXBvLy5naXR0ZWQvd29ya3RyZWVzL3N1Ym1vZHVsZXMtd29ya3RyZWUtY2hpbGQvSEVBRApAQCAtMCwwICsxIEBACityZWY6IHJlZnMvaGVhZHMvc3VibW9kdWxlcy13b3JrdHJlZS1jaGlsZApkaWZmIC0tZ2l0IGEvdGVzdHMvcmVzb3VyY2VzL3N1Ym1vZHVsZXMvdGVzdHJlcG8vLmdpdHRlZC93b3JrdHJlZXMvc3VibW9kdWxlcy13b3JrdHJlZS1jaGlsZC9PUklHX0hFQUQgYi90ZXN0cy9yZXNvdXJjZXMvc3VibW9kdWxlcy90ZXN0cmVwby8uZ2l0dGVkL3dvcmt0cmVlcy9zdWJtb2R1bGVzLXdvcmt0cmVlLWNoaWxkL09SSUdfSEVBRApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zZDhmMGE0Ci0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvcmVzb3VyY2VzL3N1Ym1vZHVsZXMvdGVzdHJlcG8vLmdpdHRlZC93b3JrdHJlZXMvc3VibW9kdWxlcy13b3JrdHJlZS1jaGlsZC9PUklHX0hFQUQKQEAgLTAsMCArMSBAQAorYTY1ZmVkZjM5YWVmZTQwMmQzYmI2ZTI0ZGY0ZDRmNWZlNDU0Nzc1MApkaWZmIC0tZ2l0IGEvdGVzdHMvcmVzb3VyY2VzL3N1Ym1vZHVsZXMvdGVzdHJlcG8vLmdpdHRlZC93b3JrdHJlZXMvc3VibW9kdWxlcy13b3JrdHJlZS1jaGlsZC9jb21tb25kaXIgYi90ZXN0cy9yZXNvdXJjZXMvc3VibW9kdWxlcy90ZXN0cmVwby8uZ2l0dGVkL3dvcmt0cmVlcy9zdWJtb2R1bGVzLXdvcmt0cmVlLWNoaWxkL2NvbW1vbmRpcgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hYWIwNDA4Ci0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvcmVzb3VyY2VzL3N1Ym1vZHVsZXMvdGVzdHJlcG8vLmdpdHRlZC93b3JrdHJlZXMvc3VibW9kdWxlcy13b3JrdHJlZS1jaGlsZC9jb21tb25kaXIKQEAgLTAsMCArMSBAQAorLi4vLi4KZGlmZiAtLWdpdCBhL3Rlc3RzL3Jlc291cmNlcy9zdWJtb2R1bGVzL3Rlc3RyZXBvLy5naXR0ZWQvd29ya3RyZWVzL3N1Ym1vZHVsZXMtd29ya3RyZWUtY2hpbGQvZ2l0ZGlyIGIvdGVzdHMvcmVzb3VyY2VzL3N1Ym1vZHVsZXMvdGVzdHJlcG8vLmdpdHRlZC93b3JrdHJlZXMvc3VibW9kdWxlcy13b3JrdHJlZS1jaGlsZC9naXRkaXIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjBlZjk2ZQotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL3Jlc291cmNlcy9zdWJtb2R1bGVzL3Rlc3RyZXBvLy5naXR0ZWQvd29ya3RyZWVzL3N1Ym1vZHVsZXMtd29ya3RyZWUtY2hpbGQvZ2l0ZGlyCkBAIC0wLDAgKzEgQEAKKy4uLy4uLy4uLy4uLy4uL3N1Ym1vZHVsZXMtd29ya3RyZWUtY2hpbGQvLmdpdApkaWZmIC0tZ2l0IGEvdGVzdHMvcmVzb3VyY2VzL3N1Ym1vZHVsZXMvdGVzdHJlcG8vLmdpdHRlZC93b3JrdHJlZXMvc3VibW9kdWxlcy13b3JrdHJlZS1jaGlsZC9pbmRleCBiL3Rlc3RzL3Jlc291cmNlcy9zdWJtb2R1bGVzL3Rlc3RyZXBvLy5naXR0ZWQvd29ya3RyZWVzL3N1Ym1vZHVsZXMtd29ya3RyZWUtY2hpbGQvaW5kZXgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTJhNDJmOQotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL3Jlc291cmNlcy9zdWJtb2R1bGVzL3Rlc3RyZXBvLy5naXR0ZWQvd29ya3RyZWVzL3N1Ym1vZHVsZXMtd29ya3RyZWUtY2hpbGQvaW5kZXgKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvdGVzdHMvcmVzb3VyY2VzL3Rlc3RyZXBvLXdvcmt0cmVlLy5naXR0ZWQgYi90ZXN0cy9yZXNvdXJjZXMvdGVzdHJlcG8td29ya3RyZWUvLmdpdHRlZApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mZTQ1NTZhCi0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvcmVzb3VyY2VzL3Rlc3RyZXBvLXdvcmt0cmVlLy5naXR0ZWQKQEAgLTAsMCArMSBAQAorZ2l0ZGlyOiAuLi90ZXN0cmVwby8uZ2l0L3dvcmt0cmVlcy90ZXN0cmVwby13b3JrdHJlZQpkaWZmIC0tZ2l0IGEvdGVzdHMvcmVzb3VyY2VzL3Rlc3RyZXBvLXdvcmt0cmVlL1JFQURNRSBiL3Rlc3RzL3Jlc291cmNlcy90ZXN0cmVwby13b3JrdHJlZS9SRUFETUUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTgyMzMxMgotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL3Jlc291cmNlcy90ZXN0cmVwby13b3JrdHJlZS9SRUFETUUKQEAgLTAsMCArMSBAQAoraGV5IHRoZXJlCmRpZmYgLS1naXQgYS90ZXN0cy9yZXNvdXJjZXMvdGVzdHJlcG8td29ya3RyZWUvYnJhbmNoX2ZpbGUudHh0IGIvdGVzdHMvcmVzb3VyY2VzL3Rlc3RyZXBvLXdvcmt0cmVlL2JyYW5jaF9maWxlLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zNjk3ZDY0Ci0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvcmVzb3VyY2VzL3Rlc3RyZXBvLXdvcmt0cmVlL2JyYW5jaF9maWxlLnR4dApAQCAtMCwwICsxLDIgQEAKK2hpCitieWUhCmRpZmYgLS1naXQgYS90ZXN0cy9yZXNvdXJjZXMvdGVzdHJlcG8td29ya3RyZWUvbGlua190b19uZXcudHh0IGIvdGVzdHMvcmVzb3VyY2VzL3Rlc3RyZXBvLXdvcmt0cmVlL2xpbmtfdG9fbmV3LnR4dApuZXcgZmlsZSBtb2RlIDEyMDAwMAppbmRleCAwMDAwMDAwLi5jMDUyOGZkCi0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvcmVzb3VyY2VzL3Rlc3RyZXBvLXdvcmt0cmVlL2xpbmtfdG9fbmV3LnR4dApAQCAtMCwwICsxIEBACituZXcudHh0ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvcmVzb3VyY2VzL3Rlc3RyZXBvLXdvcmt0cmVlL25ldy50eHQgYi90ZXN0cy9yZXNvdXJjZXMvdGVzdHJlcG8td29ya3RyZWUvbmV3LnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hNzE1ODZjCi0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvcmVzb3VyY2VzL3Rlc3RyZXBvLXdvcmt0cmVlL25ldy50eHQKQEAgLTAsMCArMSBAQAorbXkgbmV3IGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL3Jlc291cmNlcy90ZXN0cmVwby8uZ2l0dGVkL2xvZ3MvcmVmcy9oZWFkcy90ZXN0cmVwby13b3JrdHJlZSBiL3Rlc3RzL3Jlc291cmNlcy90ZXN0cmVwby8uZ2l0dGVkL2xvZ3MvcmVmcy9oZWFkcy90ZXN0cmVwby13b3JrdHJlZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45M2FiNWYwCi0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvcmVzb3VyY2VzL3Rlc3RyZXBvLy5naXR0ZWQvbG9ncy9yZWZzL2hlYWRzL3Rlc3RyZXBvLXdvcmt0cmVlCkBAIC0wLDAgKzEgQEAKKzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAgMDk5ZmFiYWMzYTllYTkzNTU5ODUyOGMyN2Y4NjZlMzQwODljMmVmZiBQYXRyaWNrIFN0ZWluaGFyZHQgPHBzQHBrcy5pbT4gMTQ0MjQ4NDQ2MyArMDIwMAlicmFuY2g6IENyZWF0ZWQgZnJvbSBIRUFECmRpZmYgLS1naXQgYS90ZXN0cy9yZXNvdXJjZXMvdGVzdHJlcG8vLmdpdHRlZC9vYmplY3RzLzliLzE3MTlmNWNmMDY5NTY4Nzg1MDgwYTBiYmFiYmU3YzM3N2UyMmFlIGIvdGVzdHMvcmVzb3VyY2VzL3Rlc3RyZXBvLy5naXR0ZWQvb2JqZWN0cy85Yi8xNzE5ZjVjZjA2OTU2ODc4NTA4MGEwYmJhYmJlN2MzNzdlMjJhZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xM2UzZjU4Ci0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvcmVzb3VyY2VzL3Rlc3RyZXBvLy5naXR0ZWQvb2JqZWN0cy85Yi8xNzE5ZjVjZjA2OTU2ODc4NTA4MGEwYmJhYmJlN2MzNzdlMjJhZQpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS90ZXN0cy9yZXNvdXJjZXMvdGVzdHJlcG8vLmdpdHRlZC9vYmplY3RzL2EzLzhkMDI4ZjcxZWFhNTkwZmViYjdkNzE2YjFjYTMyMzUwY2Y3MGRhIGIvdGVzdHMvcmVzb3VyY2VzL3Rlc3RyZXBvLy5naXR0ZWQvb2JqZWN0cy9hMy84ZDAyOGY3MWVhYTU5MGZlYmI3ZDcxNmIxY2EzMjM1MGNmNzBkYQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40ZGYyMmVjCi0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvcmVzb3VyY2VzL3Rlc3RyZXBvLy5naXR0ZWQvb2JqZWN0cy9hMy84ZDAyOGY3MWVhYTU5MGZlYmI3ZDcxNmIxY2EzMjM1MGNmNzBkYQpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS90ZXN0cy9yZXNvdXJjZXMvdGVzdHJlcG8vLmdpdHRlZC9vYmplY3RzL2FkL2VkYWM2OTQ1NzE4M2M4MjY1YzhhOTYxNGMxYzRmZWQzMWQxZmYzIGIvdGVzdHMvcmVzb3VyY2VzL3Rlc3RyZXBvLy5naXR0ZWQvb2JqZWN0cy9hZC9lZGFjNjk0NTcxODNjODI2NWM4YTk2MTRjMWM0ZmVkMzFkMWZmMwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jMDU0ZmMwCi0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvcmVzb3VyY2VzL3Rlc3RyZXBvLy5naXR0ZWQvb2JqZWN0cy9hZC9lZGFjNjk0NTcxODNjODI2NWM4YTk2MTRjMWM0ZmVkMzFkMWZmMwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS90ZXN0cy9yZXNvdXJjZXMvdGVzdHJlcG8vLmdpdHRlZC9yZWZzL2hlYWRzL21lcmdlLWNvbmZsaWN0IGIvdGVzdHMvcmVzb3VyY2VzL3Rlc3RyZXBvLy5naXR0ZWQvcmVmcy9oZWFkcy9tZXJnZS1jb25mbGljdApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zZTI0YTI0Ci0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvcmVzb3VyY2VzL3Rlc3RyZXBvLy5naXR0ZWQvcmVmcy9oZWFkcy9tZXJnZS1jb25mbGljdApAQCAtMCwwICsxIEBACithMzhkMDI4ZjcxZWFhNTkwZmViYjdkNzE2YjFjYTMyMzUwY2Y3MGRhCmRpZmYgLS1naXQgYS90ZXN0cy9yZXNvdXJjZXMvdGVzdHJlcG8vLmdpdHRlZC9yZWZzL2hlYWRzL3Rlc3RyZXBvLXdvcmt0cmVlIGIvdGVzdHMvcmVzb3VyY2VzL3Rlc3RyZXBvLy5naXR0ZWQvcmVmcy9oZWFkcy90ZXN0cmVwby13b3JrdHJlZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mMzFmZTc4Ci0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvcmVzb3VyY2VzL3Rlc3RyZXBvLy5naXR0ZWQvcmVmcy9oZWFkcy90ZXN0cmVwby13b3JrdHJlZQpAQCAtMCwwICsxIEBACiswOTlmYWJhYzNhOWVhOTM1NTk4NTI4YzI3Zjg2NmUzNDA4OWMyZWZmCmRpZmYgLS1naXQgYS90ZXN0cy9yZXNvdXJjZXMvdGVzdHJlcG8vLmdpdHRlZC93b3JrdHJlZXMvdGVzdHJlcG8td29ya3RyZWUvSEVBRCBiL3Rlc3RzL3Jlc291cmNlcy90ZXN0cmVwby8uZ2l0dGVkL3dvcmt0cmVlcy90ZXN0cmVwby13b3JrdHJlZS9IRUFECm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjFiODYzN2UKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9yZXNvdXJjZXMvdGVzdHJlcG8vLmdpdHRlZC93b3JrdHJlZXMvdGVzdHJlcG8td29ya3RyZWUvSEVBRApAQCAtMCwwICsxIEBACityZWY6IHJlZnMvaGVhZHMvdGVzdHJlcG8td29ya3RyZWUKZGlmZiAtLWdpdCBhL3Rlc3RzL3Jlc291cmNlcy90ZXN0cmVwby8uZ2l0dGVkL3dvcmt0cmVlcy90ZXN0cmVwby13b3JrdHJlZS9jb21tb25kaXIgYi90ZXN0cy9yZXNvdXJjZXMvdGVzdHJlcG8vLmdpdHRlZC93b3JrdHJlZXMvdGVzdHJlcG8td29ya3RyZWUvY29tbW9uZGlyCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFhYjA0MDgKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9yZXNvdXJjZXMvdGVzdHJlcG8vLmdpdHRlZC93b3JrdHJlZXMvdGVzdHJlcG8td29ya3RyZWUvY29tbW9uZGlyCkBAIC0wLDAgKzEgQEAKKy4uLy4uCmRpZmYgLS1naXQgYS90ZXN0cy9yZXNvdXJjZXMvdGVzdHJlcG8vLmdpdHRlZC93b3JrdHJlZXMvdGVzdHJlcG8td29ya3RyZWUvZ2l0ZGlyIGIvdGVzdHMvcmVzb3VyY2VzL3Rlc3RyZXBvLy5naXR0ZWQvd29ya3RyZWVzL3Rlc3RyZXBvLXdvcmt0cmVlL2dpdGRpcgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wZDM3YTU3Ci0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvcmVzb3VyY2VzL3Rlc3RyZXBvLy5naXR0ZWQvd29ya3RyZWVzL3Rlc3RyZXBvLXdvcmt0cmVlL2dpdGRpcgpAQCAtMCwwICsxIEBACisuLi8uLi8uLi8uLi90ZXN0cmVwby13b3JrdHJlZS8uZ2l0CmRpZmYgLS1naXQgYS90ZXN0cy9yZXNvdXJjZXMvdGVzdHJlcG8vLmdpdHRlZC93b3JrdHJlZXMvdGVzdHJlcG8td29ya3RyZWUvaW5kZXggYi90ZXN0cy9yZXNvdXJjZXMvdGVzdHJlcG8vLmdpdHRlZC93b3JrdHJlZXMvdGVzdHJlcG8td29ya3RyZWUvaW5kZXgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDExNDE5MAotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL3Jlc291cmNlcy90ZXN0cmVwby8uZ2l0dGVkL3dvcmt0cmVlcy90ZXN0cmVwby13b3JrdHJlZS9pbmRleApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS90ZXN0cy9yZXNvdXJjZXMvdGVzdHJlcG8vLmdpdHRlZC93b3JrdHJlZXMvdGVzdHJlcG8td29ya3RyZWUvbG9ncy9IRUFEIGIvdGVzdHMvcmVzb3VyY2VzL3Rlc3RyZXBvLy5naXR0ZWQvd29ya3RyZWVzL3Rlc3RyZXBvLXdvcmt0cmVlL2xvZ3MvSEVBRApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zYmVkZTUwCi0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvcmVzb3VyY2VzL3Rlc3RyZXBvLy5naXR0ZWQvd29ya3RyZWVzL3Rlc3RyZXBvLXdvcmt0cmVlL2xvZ3MvSEVBRApAQCAtMCwwICsxIEBACiswOTlmYWJhYzNhOWVhOTM1NTk4NTI4YzI3Zjg2NmUzNDA4OWMyZWZmIDA5OWZhYmFjM2E5ZWE5MzU1OTg1MjhjMjdmODY2ZTM0MDg5YzJlZmYgUGF0cmljayBTdGVpbmhhcmR0IDxwc0Bwa3MuaW0+IDE0NDI0ODQ0NjMgKzAyMDAJY2hlY2tvdXQ6IG1vdmluZyBmcm9tIDA5OWZhYmFjM2E5ZWE5MzU1OTg1MjhjMjdmODY2ZTM0MDg5YzJlZmYgdG8gdGVzdHJlcG8td29ya3RyZWUKZGlmZiAtLWdpdCBhL3Rlc3RzL3JldndhbGsvYmFzaWMuYyBiL3Rlc3RzL3JldndhbGsvYmFzaWMuYwppbmRleCA4OTE0MGJjLi41NDcwNTBjIDEwMDY0NAotLS0gYS90ZXN0cy9yZXZ3YWxrL2Jhc2ljLmMKKysrIGIvdGVzdHMvcmV2d2Fsay9iYXNpYy5jCkBAIC0xNzcsNyArMTc3LDcgQEAKIAkJLyogd2Fsa2luZyAqLzsKIAogCS8qIGdpdCBsb2cgLS1icmFuY2hlcyAtLW9uZWxpbmUgfCB3YyAtbCA9PiAxNiAqLwotCWNsX2Fzc2VydF9lcXVhbF9pKDE4LCBpKTsKKwljbF9hc3NlcnRfZXF1YWxfaSgxOSwgaSk7CiB9CiAKIHZvaWQgdGVzdF9yZXZ3YWxrX2Jhc2ljX19wdXNoX2hlYWQodm9pZCkKQEAgLTMzMSw2ICszMzEsNDAgQEAKIAljbF9hc3NlcnRfZXF1YWxfaShpLCAwKTsKIH0KIAordm9pZCB0ZXN0X3JldndhbGtfYmFzaWNfX3RvcG9fY3Jhc2godm9pZCkKK3sKKwlnaXRfb2lkIG9pZDsKKwlnaXRfb2lkX2Zyb21zdHIoJm9pZCwgIjViNWIwMjVhZmIwYjRjOTEzYjRjMzM4YTQyOTM0YTM4NjNiZjM2NDQiKTsKKworCXJldndhbGtfYmFzaWNfc2V0dXBfd2FsayhOVUxMKTsKKwlnaXRfcmV2d2Fsa19zb3J0aW5nKF93YWxrLCBHSVRfU09SVF9UT1BPTE9HSUNBTCk7CisKKwljbF9naXRfcGFzcyhnaXRfcmV2d2Fsa19wdXNoKF93YWxrLCAmb2lkKSk7CisJY2xfZ2l0X3Bhc3MoZ2l0X3JldndhbGtfaGlkZShfd2FsaywgJm9pZCkpOworCisJZ2l0X3JldndhbGtfbmV4dCgmb2lkLCBfd2Fsayk7Cit9CisKK3ZvaWQgdGVzdF9yZXZ3YWxrX2Jhc2ljX19mcm9tX25ld190b19vbGQodm9pZCkKK3sKKwlnaXRfb2lkIGZyb21fb2lkLCB0b19vaWQsIG9pZDsKKwlpbnQgaSA9IDA7CisKKwlyZXZ3YWxrX2Jhc2ljX3NldHVwX3dhbGsoTlVMTCk7CisJZ2l0X3JldndhbGtfc29ydGluZyhfd2FsaywgR0lUX1NPUlRfVElNRSk7CisKKwljbF9naXRfcGFzcyhnaXRfb2lkX2Zyb21zdHIoJnRvX29pZCwgIjViNWIwMjVhZmIwYjRjOTEzYjRjMzM4YTQyOTM0YTM4NjNiZjM2NDQiKSk7CisJY2xfZ2l0X3Bhc3MoZ2l0X29pZF9mcm9tc3RyKCZmcm9tX29pZCwgImE0YTdkY2U4NWNmNjM4NzRlOTg0NzE5ZjRmZGQyMzlmNTE0NTA1MmYiKSk7CisKKwljbF9naXRfcGFzcyhnaXRfcmV2d2Fsa19wdXNoKF93YWxrLCAmdG9fb2lkKSk7CisJY2xfZ2l0X3Bhc3MoZ2l0X3JldndhbGtfaGlkZShfd2FsaywgJmZyb21fb2lkKSk7CisKKwl3aGlsZSAoZ2l0X3JldndhbGtfbmV4dCgmb2lkLCBfd2FsaykgPT0gMCkKKwkJaSsrOworCisJY2xfYXNzZXJ0X2VxdWFsX2koaSwgMCk7Cit9CisKIHZvaWQgdGVzdF9yZXZ3YWxrX2Jhc2ljX19wdXNoX3JhbmdlKHZvaWQpCiB7CiAJcmV2d2Fsa19iYXNpY19zZXR1cF93YWxrKE5VTEwpOwpkaWZmIC0tZ2l0IGEvdGVzdHMvc3RhdHVzL2lnbm9yZS5jIGIvdGVzdHMvc3RhdHVzL2lnbm9yZS5jCmluZGV4IGM0ODc4YjIuLjIzMzg0ZmIgMTAwNjQ0Ci0tLSBhL3Rlc3RzL3N0YXR1cy9pZ25vcmUuYworKysgYi90ZXN0cy9zdGF0dXMvaWdub3JlLmMKQEAgLTIwLDggKzIwLDggQEAKIAlib29sIGV4cGVjdGVkLCBjb25zdCBjaGFyICpmaWxlcGF0aCwgY29uc3QgY2hhciAqZmlsZSwgaW50IGxpbmUpCiB7CiAJaW50IGlzX2lnbm9yZWQgPSAwOwotCWNsX2dpdF9wYXNzXygKLQkJZ2l0X3N0YXR1c19zaG91bGRfaWdub3JlKCZpc19pZ25vcmVkLCBnX3JlcG8sIGZpbGVwYXRoKSwgZmlsZSwgbGluZSk7CisJY2xfZ2l0X2V4cGVjdCgKKwkJZ2l0X3N0YXR1c19zaG91bGRfaWdub3JlKCZpc19pZ25vcmVkLCBnX3JlcG8sIGZpbGVwYXRoKSwgMCwgZmlsZSwgbGluZSk7CiAJY2xhcl9fYXNzZXJ0KAogCQkoZXhwZWN0ZWQgIT0gMCkgPT0gKGlzX2lnbm9yZWQgIT0gMCksCiAJCWZpbGUsIGxpbmUsICJleHBlY3RlZCAhPSBpc19pZ25vcmVkIiwgZmlsZXBhdGgsIDEpOwpAQCAtMTA3NywzICsxMDc3LDgxIEBACiAgICAgY2xfZ2l0X3Bhc3MoZ2l0X2lnbm9yZV9wYXRoX2lzX2lnbm9yZWQoJmlnbm9yZWQsIGdfcmVwbywgImNvZGUvcHJvamVjdHMvZm9vL2Jhci9wYWNrYWdlcy9yZXBvc2l0b3JpZXMuY29uZmlnIikpOwogICAgIGNsX2Fzc2VydF9lcXVhbF9pKDAsIGlnbm9yZWQpOwogfQorCit2b2lkIHRlc3Rfc3RhdHVzX2lnbm9yZV9faWdub3JlX2FsbF90b3BsZXZlbF9kaXJzX2luY2x1ZGVfZmlsZXModm9pZCkKK3sKKwlzdGF0aWMgY29uc3QgY2hhciAqdGVzdF9maWxlc1tdID0geworCQkiZW1wdHlfc3RhbmRhcmRfcmVwby9SRUFETUUubWQiLAorCQkiZW1wdHlfc3RhbmRhcmRfcmVwby9zcmMvbWFpbi5jIiwKKwkJImVtcHR5X3N0YW5kYXJkX3JlcG8vc3JjL2Zvby9mb28uYyIsCisJCSJlbXB0eV9zdGFuZGFyZF9yZXBvL2Rpc3QvZm9vLm8iLAorCQkiZW1wdHlfc3RhbmRhcmRfcmVwby9kaXN0L21haW4ubyIsCisJCU5VTEwKKwl9OworCisJbWFrZV90ZXN0X2RhdGEoImVtcHR5X3N0YW5kYXJkX3JlcG8iLCB0ZXN0X2ZpbGVzKTsKKwljbF9naXRfbWtmaWxlKAorCQkiZW1wdHlfc3RhbmRhcmRfcmVwby8uZ2l0aWdub3JlIiwKKwkJIi8qL1xuIgorCQkiIS9zcmNcbiIpOworCisJYXNzZXJ0X2lzX2lnbm9yZWQoImRpc3QvZm9vLm8iKTsKKwlhc3NlcnRfaXNfaWdub3JlZCgiZGlzdC9tYWluLm8iKTsKKworCXJlZnV0ZV9pc19pZ25vcmVkKCJSRUFETUUubWQiKTsKKwlyZWZ1dGVfaXNfaWdub3JlZCgic3JjL2Zvby5jIik7CisJcmVmdXRlX2lzX2lnbm9yZWQoInNyYy9mb28vZm9vLmMiKTsKK30KKwordm9pZCB0ZXN0X3N0YXR1c19pZ25vcmVfX3N1YmRpcl9pZ25vcmVfYWxsX3RvcGxldmVsX2RpcnNfaW5jbHVkZV9maWxlcyh2b2lkKQoreworCXN0YXRpYyBjb25zdCBjaGFyICp0ZXN0X2ZpbGVzW10gPSB7CisJCSJlbXB0eV9zdGFuZGFyZF9yZXBvL3Byb2plY3QvUkVBRE1FLm1kIiwKKwkJImVtcHR5X3N0YW5kYXJkX3JlcG8vcHJvamVjdC9zcmMvbWFpbi5jIiwKKwkJImVtcHR5X3N0YW5kYXJkX3JlcG8vcHJvamVjdC9zcmMvZm9vL2Zvby5jIiwKKwkJImVtcHR5X3N0YW5kYXJkX3JlcG8vcHJvamVjdC9kaXN0L2Zvby5vIiwKKwkJImVtcHR5X3N0YW5kYXJkX3JlcG8vcHJvamVjdC9kaXN0L21haW4ubyIsCisJCU5VTEwKKwl9OworCisJbWFrZV90ZXN0X2RhdGEoImVtcHR5X3N0YW5kYXJkX3JlcG8iLCB0ZXN0X2ZpbGVzKTsKKwljbF9naXRfbWtmaWxlKAorCQkiZW1wdHlfc3RhbmRhcmRfcmVwby9wcm9qZWN0Ly5naXRpZ25vcmUiLAorCQkiLyovXG4iCisJCSIhL3NyY1xuIik7CisKKwlhc3NlcnRfaXNfaWdub3JlZCgicHJvamVjdC9kaXN0L2Zvby5vIik7CisJYXNzZXJ0X2lzX2lnbm9yZWQoInByb2plY3QvZGlzdC9tYWluLm8iKTsKKworCXJlZnV0ZV9pc19pZ25vcmVkKCJwcm9qZWN0L3NyYy9mb28uYyIpOworCXJlZnV0ZV9pc19pZ25vcmVkKCJwcm9qZWN0L3NyYy9mb28vZm9vLmMiKTsKKwlyZWZ1dGVfaXNfaWdub3JlZCgicHJvamVjdC9SRUFETUUubWQiKTsKK30KKwordm9pZCB0ZXN0X3N0YXR1c19pZ25vcmVfX3N1YmRpcl9pZ25vcmVfZXZlcnl0aGluZ19leGNlcHRfY2VydGFpbl9maWxlcyh2b2lkKQoreworCXN0YXRpYyBjb25zdCBjaGFyICp0ZXN0X2ZpbGVzW10gPSB7CisJCSJlbXB0eV9zdGFuZGFyZF9yZXBvL3Byb2plY3QvUkVBRE1FLm1kIiwKKwkJImVtcHR5X3N0YW5kYXJkX3JlcG8vcHJvamVjdC9zb21lX2ZpbGUiLAorCQkiZW1wdHlfc3RhbmRhcmRfcmVwby9wcm9qZWN0L3NyYy9tYWluLmMiLAorCQkiZW1wdHlfc3RhbmRhcmRfcmVwby9wcm9qZWN0L3NyYy9mb28vZm9vLmMiLAorCQkiZW1wdHlfc3RhbmRhcmRfcmVwby9wcm9qZWN0L2Rpc3QvZm9vLm8iLAorCQkiZW1wdHlfc3RhbmRhcmRfcmVwby9wcm9qZWN0L2Rpc3QvbWFpbi5vIiwKKwkJTlVMTAorCX07CisKKwltYWtlX3Rlc3RfZGF0YSgiZW1wdHlfc3RhbmRhcmRfcmVwbyIsIHRlc3RfZmlsZXMpOworCWNsX2dpdF9ta2ZpbGUoCisJCSJlbXB0eV9zdGFuZGFyZF9yZXBvL3Byb2plY3QvLmdpdGlnbm9yZSIsCisJCSIvKlxuIgorCQkiIS9zcmNcbiIKKwkJIiFSRUFETUUubWRcbiIpOworCisJYXNzZXJ0X2lzX2lnbm9yZWQoInByb2plY3Qvc29tZV9maWxlIik7CisJYXNzZXJ0X2lzX2lnbm9yZWQoInByb2plY3QvZGlzdC9mb28ubyIpOworCWFzc2VydF9pc19pZ25vcmVkKCJwcm9qZWN0L2Rpc3QvbWFpbi5vIik7CisKKwlyZWZ1dGVfaXNfaWdub3JlZCgicHJvamVjdC9SRUFETUUubWQiKTsKKwlyZWZ1dGVfaXNfaWdub3JlZCgicHJvamVjdC9zcmMvZm9vLmMiKTsKKwlyZWZ1dGVfaXNfaWdub3JlZCgicHJvamVjdC9zcmMvZm9vL2Zvby5jIik7Cit9CmRpZmYgLS1naXQgYS90ZXN0cy9zdWJtb2R1bGUvb3Blbi5jIGIvdGVzdHMvc3VibW9kdWxlL29wZW4uYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wZWYwMWVjCi0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvc3VibW9kdWxlL29wZW4uYwpAQCAtMCwwICsxLDkwIEBACisjaW5jbHVkZSAiY2xhcl9saWJnaXQyLmgiCisjaW5jbHVkZSAic3VibW9kdWxlX2hlbHBlcnMuaCIKKyNpbmNsdWRlICJwYXRoLmgiCisKK3N0YXRpYyBnaXRfcmVwb3NpdG9yeSAqZ19wYXJlbnQ7CitzdGF0aWMgZ2l0X3JlcG9zaXRvcnkgKmdfY2hpbGQ7CitzdGF0aWMgZ2l0X3N1Ym1vZHVsZSAqZ19tb2R1bGU7CisKK3ZvaWQgdGVzdF9zdWJtb2R1bGVfb3Blbl9faW5pdGlhbGl6ZSh2b2lkKQoreworCWdfcGFyZW50ID0gc2V0dXBfZml4dHVyZV9zdWJtb2QyKCk7Cit9CisKK3ZvaWQgdGVzdF9zdWJtb2R1bGVfb3Blbl9fY2xlYW51cCh2b2lkKQoreworCWdpdF9zdWJtb2R1bGVfZnJlZShnX21vZHVsZSk7CisJZ2l0X3JlcG9zaXRvcnlfZnJlZShnX2NoaWxkKTsKKwljbF9naXRfc2FuZGJveF9jbGVhbnVwKCk7CisJZ19wYXJlbnQgPSBOVUxMOworCWdfY2hpbGQgPSBOVUxMOworCWdfbW9kdWxlID0gTlVMTDsKK30KKworc3RhdGljIHZvaWQgYXNzZXJ0X3NtX3ZhbGlkKGdpdF9yZXBvc2l0b3J5ICpwYXJlbnQsIGdpdF9yZXBvc2l0b3J5ICpjaGlsZCwgY29uc3QgY2hhciAqc21fbmFtZSkKK3sKKwlnaXRfYnVmIGV4cGVjdGVkID0gR0lUX0JVRl9JTklULCBhY3R1YWwgPSBHSVRfQlVGX0lOSVQ7CisKKwkvKiBhc3NlcnQgd29ya2luZyBkaXJlY3RvcnkgKi8KKwljbF9naXRfcGFzcyhnaXRfYnVmX2pvaW5wYXRoKCZleHBlY3RlZCwgZ2l0X3JlcG9zaXRvcnlfd29ya2RpcihwYXJlbnQpLCBzbV9uYW1lKSk7CisJY2xfZ2l0X3Bhc3MoZ2l0X3BhdGhfcHJldHRpZnlfZGlyKCZleHBlY3RlZCwgZXhwZWN0ZWQucHRyLCBOVUxMKSk7CisJY2xfZ2l0X3Bhc3MoZ2l0X2J1Zl9zZXRzKCZhY3R1YWwsIGdpdF9yZXBvc2l0b3J5X3dvcmtkaXIoY2hpbGQpKSk7CisJY2xfZ2l0X3Bhc3MoZ2l0X3BhdGhfcHJldHRpZnlfZGlyKCZhY3R1YWwsIGFjdHVhbC5wdHIsIE5VTEwpKTsKKwljbF9hc3NlcnRfZXF1YWxfcyhleHBlY3RlZC5wdHIsIGFjdHVhbC5wdHIpOworCisJZ2l0X2J1Zl9jbGVhcigmZXhwZWN0ZWQpOworCWdpdF9idWZfY2xlYXIoJmFjdHVhbCk7CisKKwkvKiBhc3NlcnQgY29tbW9uIGRpcmVjdG9yeSAqLworCWNsX2dpdF9wYXNzKGdpdF9idWZfam9pbnBhdGgoJmV4cGVjdGVkLCBnaXRfcmVwb3NpdG9yeV9jb21tb25kaXIocGFyZW50KSwgIm1vZHVsZXMiKSk7CisJY2xfZ2l0X3Bhc3MoZ2l0X2J1Zl9qb2lucGF0aCgmZXhwZWN0ZWQsIGV4cGVjdGVkLnB0ciwgc21fbmFtZSkpOworCWNsX2dpdF9wYXNzKGdpdF9wYXRoX3ByZXR0aWZ5X2RpcigmZXhwZWN0ZWQsIGV4cGVjdGVkLnB0ciwgTlVMTCkpOworCWNsX2dpdF9wYXNzKGdpdF9idWZfc2V0cygmYWN0dWFsLCBnaXRfcmVwb3NpdG9yeV9jb21tb25kaXIoY2hpbGQpKSk7CisJY2xfZ2l0X3Bhc3MoZ2l0X3BhdGhfcHJldHRpZnlfZGlyKCZhY3R1YWwsIGFjdHVhbC5wdHIsIE5VTEwpKTsKKwljbF9hc3NlcnRfZXF1YWxfcyhleHBlY3RlZC5wdHIsIGFjdHVhbC5wdHIpOworCisJLyogYXNzZXJ0IGdpdCBkaXJlY3RvcnkgKi8KKwljbF9naXRfcGFzcyhnaXRfYnVmX3NldHMoJmFjdHVhbCwgZ2l0X3JlcG9zaXRvcnlfcGF0aChjaGlsZCkpKTsKKwljbF9naXRfcGFzcyhnaXRfcGF0aF9wcmV0dGlmeV9kaXIoJmFjdHVhbCwgYWN0dWFsLnB0ciwgTlVMTCkpOworCWNsX2Fzc2VydF9lcXVhbF9zKGV4cGVjdGVkLnB0ciwgYWN0dWFsLnB0cik7CisKKwlnaXRfYnVmX2ZyZWUoJmV4cGVjdGVkKTsKKwlnaXRfYnVmX2ZyZWUoJmFjdHVhbCk7Cit9CisKK3ZvaWQgdGVzdF9zdWJtb2R1bGVfb3Blbl9fb3BlbmluZ192aWFfbG9va3VwX3N1Y2NlZWRzKHZvaWQpCit7CisJY2xfZ2l0X3Bhc3MoZ2l0X3N1Ym1vZHVsZV9sb29rdXAoJmdfbW9kdWxlLCBnX3BhcmVudCwgInNtX3VuY2hhbmdlZCIpKTsKKwljbF9naXRfcGFzcyhnaXRfc3VibW9kdWxlX29wZW4oJmdfY2hpbGQsIGdfbW9kdWxlKSk7CisJYXNzZXJ0X3NtX3ZhbGlkKGdfcGFyZW50LCBnX2NoaWxkLCAic21fdW5jaGFuZ2VkIik7Cit9CisKK3ZvaWQgdGVzdF9zdWJtb2R1bGVfb3Blbl9fZGlyZWN0X29wZW5fc3VjY2VlZHModm9pZCkKK3sKKwlnaXRfYnVmIHBhdGggPSBHSVRfQlVGX0lOSVQ7CisKKwljbF9naXRfcGFzcyhnaXRfYnVmX2pvaW5wYXRoKCZwYXRoLCBnaXRfcmVwb3NpdG9yeV93b3JrZGlyKGdfcGFyZW50KSwgInNtX3VuY2hhbmdlZCIpKTsKKwljbF9naXRfcGFzcyhnaXRfcmVwb3NpdG9yeV9vcGVuKCZnX2NoaWxkLCBwYXRoLnB0cikpOworCWFzc2VydF9zbV92YWxpZChnX3BhcmVudCwgZ19jaGlsZCwgInNtX3VuY2hhbmdlZCIpOworCisJZ2l0X2J1Zl9mcmVlKCZwYXRoKTsKK30KKwordm9pZCB0ZXN0X3N1Ym1vZHVsZV9vcGVuX19kaXJlY3Rfb3Blbl9zdWNjZWVkc19mb3JfYnJva2VuX3NtX3dpdGhfZ2l0ZGlyKHZvaWQpCit7CisJZ2l0X2J1ZiBwYXRoID0gR0lUX0JVRl9JTklUOworCisJLyoKKwkgKiBUaGlzIGlzIGFjdHVhbGx5IG5vdCBhIHZhbGlkIHN1Ym1vZHVsZSwgYnV0IHdlCisJICogZW5jb3VudGVyZWQgYXQgbGVhc3Qgb25lIG9jY2FzaW9uIHdoZXJlIHRoZSBnaXRkaXIKKwkgKiBmaWxlIGV4aXN0ZWQgaW5zaWRlIG9mIGEgc3VibW9kdWxlJ3MgZ2l0ZGlyLiBBcyB3ZSBhcmUKKwkgKiBub3cgYWJsZSB0byBvcGVuIHRoZXNlIHN1Ym1vZHVsZXMgY29ycmVjdGx5LCB3ZSBzdGlsbAorCSAqIGFkZCBhIHRlc3QgZm9yIHRoaXMuCisJICovCisJY2xfZ2l0X21rZmlsZSgic3VibW9kMi8uZ2l0L21vZHVsZXMvc21fdW5jaGFuZ2VkL2dpdGRpciIsICIuZ2l0Iik7CisJY2xfZ2l0X3Bhc3MoZ2l0X2J1Zl9qb2lucGF0aCgmcGF0aCwgZ2l0X3JlcG9zaXRvcnlfd29ya2RpcihnX3BhcmVudCksICJzbV91bmNoYW5nZWQiKSk7CisJY2xfZ2l0X3Bhc3MoZ2l0X3JlcG9zaXRvcnlfb3BlbigmZ19jaGlsZCwgcGF0aC5wdHIpKTsKKwlhc3NlcnRfc21fdmFsaWQoZ19wYXJlbnQsIGdfY2hpbGQsICJzbV91bmNoYW5nZWQiKTsKKworCWdpdF9idWZfZnJlZSgmcGF0aCk7Cit9CmRpZmYgLS1naXQgYS90ZXN0cy9zdWJtb2R1bGUvc3VibW9kdWxlX2hlbHBlcnMuYyBiL3Rlc3RzL3N1Ym1vZHVsZS9zdWJtb2R1bGVfaGVscGVycy5jCmluZGV4IDZjMmI5Y2YuLmNkNTQxZWEgMTAwNjQ0Ci0tLSBhL3Rlc3RzL3N1Ym1vZHVsZS9zdWJtb2R1bGVfaGVscGVycy5jCisrKyBiL3Rlc3RzL3N1Ym1vZHVsZS9zdWJtb2R1bGVfaGVscGVycy5jCkBAIC0yMDQsNyArMjA0LDcgQEAKIAlnaXRfc3VibW9kdWxlICpzbTsKIAlpbnQgZXJyb3IgPSBnaXRfc3VibW9kdWxlX2xvb2t1cCgmc20sIHJlcG8sIG5hbWUpOwogCWlmIChlcnJvcikKLQkJY2xfZ2l0X3JlcG9ydF9mYWlsdXJlKGVycm9yLCBmaWxlLCBsaW5lLCBtc2cpOworCQljbF9naXRfcmVwb3J0X2ZhaWx1cmUoZXJyb3IsIDAsIGZpbGUsIGxpbmUsIG1zZyk7CiAJY2xfYXNzZXJ0X2F0X2xpbmUoc20gIT0gTlVMTCwgZmlsZSwgbGluZSk7CiAJZ2l0X3N1Ym1vZHVsZV9mcmVlKHNtKTsKIH0KZGlmZiAtLWdpdCBhL3Rlc3RzL3RocmVhZHMvYmFzaWMuYyBiL3Rlc3RzL3RocmVhZHMvYmFzaWMuYwppbmRleCBhOTMxMGJiLi5hZjYwNDkwIDEwMDY0NAotLS0gYS90ZXN0cy90aHJlYWRzL2Jhc2ljLmMKKysrIGIvdGVzdHMvdGhyZWFkcy9iYXNpYy5jCkBAIC01NCwxMiArNTQsNiBAQAogewogCXJldHVybiBwYXJhbTsKIH0KLQotc3RhdGljIHZvaWQgKmV4aXRfYWJydXB0bHkodm9pZCAqcGFyYW0pCi17Ci0JZ2l0X3RocmVhZF9leGl0KHBhcmFtKTsKLQlyZXR1cm4gTlVMTDsKLX0KICNlbmRpZgogCiB2b2lkIHRlc3RfdGhyZWFkc19iYXNpY19fZXhpdCh2b2lkKQpkaWZmIC0tZ2l0IGEvdGVzdHMvdGhyZWFkcy9kaWZmLmMgYi90ZXN0cy90aHJlYWRzL2RpZmYuYwppbmRleCBjMzI4MTE0Li4yNTYwNDAyIDEwMDY0NAotLS0gYS90ZXN0cy90aHJlYWRzL2RpZmYuYworKysgYi90ZXN0cy90aHJlYWRzL2RpZmYuYwpAQCAtMTksMTIgKzE5LDI3IEBACiBzdGF0aWMgZ2l0X3RyZWUgKl9hLCAqX2I7CiBzdGF0aWMgZ2l0X2F0b21pYyBfY291bnRzWzRdOwogc3RhdGljIGludCBfY2hlY2tfY291bnRzOworI2lmZGVmIEdJVF9XSU4zMgorc3RhdGljIGludCBfcmV0cmllczsKKyNlbmRpZgogCiAjZGVmaW5lIFRIUkVBRFMgMjAKIAordm9pZCB0ZXN0X3RocmVhZHNfZGlmZl9faW5pdGlhbGl6ZSh2b2lkKQoreworI2lmZGVmIEdJVF9XSU4zMgorCV9yZXRyaWVzID0gZ2l0X3dpbjMyX19yZXRyaWVzOworCWdpdF93aW4zMl9fcmV0cmllcyA9IDE7CisjZW5kaWYKK30KKwogdm9pZCB0ZXN0X3RocmVhZHNfZGlmZl9fY2xlYW51cCh2b2lkKQogewogCWNsX2dpdF9zYW5kYm94X2NsZWFudXAoKTsKKworI2lmZGVmIEdJVF9XSU4zMgorCWdpdF93aW4zMl9fcmV0cmllcyA9IF9yZXRyaWVzOworI2VuZGlmCiB9CiAKIHN0YXRpYyB2b2lkIHNldHVwX3RyZWVzKHZvaWQpCmRpZmYgLS1naXQgYS90ZXN0cy93b3JrdHJlZS9jb25maWcuYyBiL3Rlc3RzL3dvcmt0cmVlL2NvbmZpZy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNhYjMxN2IKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy93b3JrdHJlZS9jb25maWcuYwpAQCAtMCwwICsxLDQ1IEBACisjaW5jbHVkZSAiY2xhcl9saWJnaXQyLmgiCisjaW5jbHVkZSAid29ya3RyZWVfaGVscGVycy5oIgorCisjZGVmaW5lIENPTU1PTl9SRVBPICJ0ZXN0cmVwbyIKKyNkZWZpbmUgV09SS1RSRUVfUkVQTyAidGVzdHJlcG8td29ya3RyZWUiCisKK3N0YXRpYyB3b3JrdHJlZV9maXh0dXJlIGZpeHR1cmUgPQorCVdPUktUUkVFX0ZJWFRVUkVfSU5JVChDT01NT05fUkVQTywgV09SS1RSRUVfUkVQTyk7CisKK3ZvaWQgdGVzdF93b3JrdHJlZV9jb25maWdfX2luaXRpYWxpemUodm9pZCkKK3sKKwlzZXR1cF9maXh0dXJlX3dvcmt0cmVlKCZmaXh0dXJlKTsKK30KKwordm9pZCB0ZXN0X3dvcmt0cmVlX2NvbmZpZ19fY2xlYW51cCh2b2lkKQoreworCWNsZWFudXBfZml4dHVyZV93b3JrdHJlZSgmZml4dHVyZSk7Cit9CisKK3ZvaWQgdGVzdF93b3JrdHJlZV9jb25maWdfX29wZW4odm9pZCkKK3sKKwlnaXRfY29uZmlnICpjZmc7CisKKwljbF9naXRfcGFzcyhnaXRfcmVwb3NpdG9yeV9jb25maWcoJmNmZywgZml4dHVyZS53b3JrdHJlZSkpOworCWNsX2Fzc2VydChjZmcgIT0gTlVMTCk7CisKKwlnaXRfY29uZmlnX2ZyZWUoY2ZnKTsKK30KKwordm9pZCB0ZXN0X3dvcmt0cmVlX2NvbmZpZ19fc2V0KHZvaWQpCit7CisJZ2l0X2NvbmZpZyAqY2ZnOworCWludDMyX3QgdmFsOworCisJY2xfZ2l0X3Bhc3MoZ2l0X3JlcG9zaXRvcnlfY29uZmlnKCZjZmcsIGZpeHR1cmUud29ya3RyZWUpKTsKKwljbF9naXRfcGFzcyhnaXRfY29uZmlnX3NldF9pbnQzMihjZmcsICJjb3JlLmR1bW15IiwgNSkpOworCWdpdF9jb25maWdfZnJlZShjZmcpOworCisJLy8gcmVvcGVuIHRvIHZlcmlmeSBjb25maWd1cmF0aW9uIGhhcyBiZWVuIHNldCBpbiB0aGUKKwkvLyBjb21tb24gZGlyCisJY2xfZ2l0X3Bhc3MoZ2l0X3JlcG9zaXRvcnlfY29uZmlnKCZjZmcsIGZpeHR1cmUucmVwbykpOworCWNsX2dpdF9wYXNzKGdpdF9jb25maWdfZ2V0X2ludDMyKCZ2YWwsIGNmZywgImNvcmUuZHVtbXkiKSk7CisJY2xfYXNzZXJ0X2VxdWFsX2kodmFsLCA1KTsKKwlnaXRfY29uZmlnX2ZyZWUoY2ZnKTsKK30KZGlmZiAtLWdpdCBhL3Rlc3RzL3dvcmt0cmVlL21lcmdlLmMgYi90ZXN0cy93b3JrdHJlZS9tZXJnZS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjM2Y2MyYTYKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy93b3JrdHJlZS9tZXJnZS5jCkBAIC0wLDAgKzEsMTIxIEBACisjaW5jbHVkZSAiY2xhcl9saWJnaXQyLmgiCisKKyNpbmNsdWRlICJ3b3JrdHJlZV9oZWxwZXJzLmgiCisjaW5jbHVkZSAibWVyZ2UvbWVyZ2VfaGVscGVycy5oIgorCisjZGVmaW5lIENPTU1PTl9SRVBPICJ0ZXN0cmVwbyIKKyNkZWZpbmUgV09SS1RSRUVfUkVQTyAidGVzdHJlcG8td29ya3RyZWUiCisKKyNkZWZpbmUgTUFTVEVSX0JSQU5DSCAicmVmcy9oZWFkcy9tYXN0ZXIiCisjZGVmaW5lIENPTkZMSUNUX0JSQU5DSCAicmVmcy9oZWFkcy9tZXJnZS1jb25mbGljdCIKKworI2RlZmluZSBDT05GTElDVF9CUkFOQ0hfRklMRV9UWFQgXAorCSI8PDw8PDw8IEhFQURcbiIgXAorCSJoaVxuIiBcCisJImJ5ZSFcbiIgXAorCSI9PT09PT09XG4iIFwKKwkiY29uZmxpY3RcbiIgXAorCSI+Pj4+Pj4+IG1lcmdlLWNvbmZsaWN0XG4iIFwKKworc3RhdGljIHdvcmt0cmVlX2ZpeHR1cmUgZml4dHVyZSA9CisJV09SS1RSRUVfRklYVFVSRV9JTklUKENPTU1PTl9SRVBPLCBXT1JLVFJFRV9SRVBPKTsKKworc3RhdGljIGNvbnN0IGNoYXIgKm1lcmdlX2ZpbGVzW10gPSB7CisJR0lUX01FUkdFX0hFQURfRklMRSwKKwlHSVRfT1JJR19IRUFEX0ZJTEUsCisJR0lUX01FUkdFX01PREVfRklMRSwKKwlHSVRfTUVSR0VfTVNHX0ZJTEUsCit9OworCit2b2lkIHRlc3Rfd29ya3RyZWVfbWVyZ2VfX2luaXRpYWxpemUodm9pZCkKK3sKKwlzZXR1cF9maXh0dXJlX3dvcmt0cmVlKCZmaXh0dXJlKTsKK30KKwordm9pZCB0ZXN0X3dvcmt0cmVlX21lcmdlX19jbGVhbnVwKHZvaWQpCit7CisJY2xlYW51cF9maXh0dXJlX3dvcmt0cmVlKCZmaXh0dXJlKTsKK30KKwordm9pZCB0ZXN0X3dvcmt0cmVlX21lcmdlX19tZXJnZV9oZWFkKHZvaWQpCit7CisJZ2l0X3JlZmVyZW5jZSAqdGhlaXJzX3JlZiwgKnJlZjsKKwlnaXRfYW5ub3RhdGVkX2NvbW1pdCAqdGhlaXJzOworCisJY2xfZ2l0X3Bhc3MoZ2l0X3JlZmVyZW5jZV9sb29rdXAoJnRoZWlyc19yZWYsIGZpeHR1cmUud29ya3RyZWUsIENPTkZMSUNUX0JSQU5DSCkpOworCWNsX2dpdF9wYXNzKGdpdF9hbm5vdGF0ZWRfY29tbWl0X2Zyb21fcmVmKCZ0aGVpcnMsIGZpeHR1cmUud29ya3RyZWUsIHRoZWlyc19yZWYpKTsKKwljbF9naXRfcGFzcyhnaXRfbWVyZ2UoZml4dHVyZS53b3JrdHJlZSwgKGNvbnN0IGdpdF9hbm5vdGF0ZWRfY29tbWl0ICoqKSZ0aGVpcnMsIDEsIE5VTEwsIE5VTEwpKTsKKworCWNsX2dpdF9wYXNzKGdpdF9yZWZlcmVuY2VfbG9va3VwKCZyZWYsIGZpeHR1cmUud29ya3RyZWUsIEdJVF9NRVJHRV9IRUFEX0ZJTEUpKTsKKworCWdpdF9yZWZlcmVuY2VfZnJlZShyZWYpOworCWdpdF9yZWZlcmVuY2VfZnJlZSh0aGVpcnNfcmVmKTsKKwlnaXRfYW5ub3RhdGVkX2NvbW1pdF9mcmVlKHRoZWlycyk7Cit9CisKK3ZvaWQgdGVzdF93b3JrdHJlZV9tZXJnZV9fbWVyZ2Vfc2V0dXAodm9pZCkKK3sKKwlnaXRfcmVmZXJlbmNlICpvdXJzX3JlZiwgKnRoZWlyc19yZWY7CisJZ2l0X2Fubm90YXRlZF9jb21taXQgKm91cnMsICp0aGVpcnM7CisJZ2l0X2J1ZiBwYXRoID0gR0lUX0JVRl9JTklUOworCXVuc2lnbmVkIGk7CisKKwljbF9naXRfcGFzcyhnaXRfcmVmZXJlbmNlX2xvb2t1cCgmb3Vyc19yZWYsIGZpeHR1cmUud29ya3RyZWUsIE1BU1RFUl9CUkFOQ0gpKTsKKwljbF9naXRfcGFzcyhnaXRfYW5ub3RhdGVkX2NvbW1pdF9mcm9tX3JlZigmb3VycywgZml4dHVyZS53b3JrdHJlZSwgb3Vyc19yZWYpKTsKKworCWNsX2dpdF9wYXNzKGdpdF9yZWZlcmVuY2VfbG9va3VwKCZ0aGVpcnNfcmVmLCBmaXh0dXJlLndvcmt0cmVlLCBDT05GTElDVF9CUkFOQ0gpKTsKKwljbF9naXRfcGFzcyhnaXRfYW5ub3RhdGVkX2NvbW1pdF9mcm9tX3JlZigmdGhlaXJzLCBmaXh0dXJlLndvcmt0cmVlLCB0aGVpcnNfcmVmKSk7CisKKwljbF9naXRfcGFzcyhnaXRfbWVyZ2VfX3NldHVwKGZpeHR1cmUud29ya3RyZWUsCisJCSAgICBvdXJzLCAoY29uc3QgZ2l0X2Fubm90YXRlZF9jb21taXQgKiopJnRoZWlycywgMSkpOworCisJZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUobWVyZ2VfZmlsZXMpOyBpKyspIHsKKwkJZ2l0X2J1Zl9jbGVhcigmcGF0aCk7CisJCWNsX2dpdF9wYXNzKGdpdF9idWZfcHJpbnRmKCZwYXRoLCAiJXMvJXMiLAorCQkJICAgIGZpeHR1cmUud29ya3RyZWUtPmdpdGRpciwgbWVyZ2VfZmlsZXNbaV0pKTsKKwkJY2xfYXNzZXJ0KGdpdF9wYXRoX2V4aXN0cyhwYXRoLnB0cikpOworCX0KKworCWdpdF9idWZfZnJlZSgmcGF0aCk7CisJZ2l0X3JlZmVyZW5jZV9mcmVlKG91cnNfcmVmKTsKKwlnaXRfcmVmZXJlbmNlX2ZyZWUodGhlaXJzX3JlZik7CisJZ2l0X2Fubm90YXRlZF9jb21taXRfZnJlZShvdXJzKTsKKwlnaXRfYW5ub3RhdGVkX2NvbW1pdF9mcmVlKHRoZWlycyk7Cit9CisKK3ZvaWQgdGVzdF93b3JrdHJlZV9tZXJnZV9fbWVyZ2VfY29uZmxpY3Qodm9pZCkKK3sKKwlnaXRfYnVmIHBhdGggPSBHSVRfQlVGX0lOSVQsIGJ1ZiA9IEdJVF9CVUZfSU5JVDsKKwlnaXRfcmVmZXJlbmNlICp0aGVpcnNfcmVmOworCWdpdF9hbm5vdGF0ZWRfY29tbWl0ICp0aGVpcnM7CisJZ2l0X2luZGV4ICppbmRleDsKKwljb25zdCBnaXRfaW5kZXhfZW50cnkgKmVudHJ5OworCXNpemVfdCBpLCBjb25mbGljdHMgPSAwOworCisJY2xfZ2l0X3Bhc3MoZ2l0X3JlZmVyZW5jZV9sb29rdXAoJnRoZWlyc19yZWYsIGZpeHR1cmUud29ya3RyZWUsIENPTkZMSUNUX0JSQU5DSCkpOworCWNsX2dpdF9wYXNzKGdpdF9hbm5vdGF0ZWRfY29tbWl0X2Zyb21fcmVmKCZ0aGVpcnMsIGZpeHR1cmUud29ya3RyZWUsIHRoZWlyc19yZWYpKTsKKworCWNsX2dpdF9wYXNzKGdpdF9tZXJnZShmaXh0dXJlLndvcmt0cmVlLAorCQkgICAgKGNvbnN0IGdpdF9hbm5vdGF0ZWRfY29tbWl0ICoqKSZ0aGVpcnMsIDEsIE5VTEwsIE5VTEwpKTsKKworCWNsX2dpdF9wYXNzKGdpdF9yZXBvc2l0b3J5X2luZGV4KCZpbmRleCwgZml4dHVyZS53b3JrdHJlZSkpOworCWZvciAoaSA9IDA7IGkgPCBnaXRfaW5kZXhfZW50cnljb3VudChpbmRleCk7IGkrKykgeworCQljbF9hc3NlcnQoZW50cnkgPSBnaXRfaW5kZXhfZ2V0X2J5aW5kZXgoaW5kZXgsIGkpKTsKKworCQlpZiAoZ2l0X2luZGV4X2VudHJ5X2lzX2NvbmZsaWN0KGVudHJ5KSkKKwkJCWNvbmZsaWN0cysrOworCX0KKwljbF9hc3NlcnRfZXF1YWxfc3ooY29uZmxpY3RzLCAzKTsKKworCWdpdF9yZWZlcmVuY2VfZnJlZSh0aGVpcnNfcmVmKTsKKwlnaXRfYW5ub3RhdGVkX2NvbW1pdF9mcmVlKHRoZWlycyk7CisJZ2l0X2luZGV4X2ZyZWUoaW5kZXgpOworCisJY2xfZ2l0X3Bhc3MoZ2l0X2J1Zl9qb2lucGF0aCgmcGF0aCwgZml4dHVyZS53b3JrdHJlZS0+d29ya2RpciwgImJyYW5jaF9maWxlLnR4dCIpKTsKKwljbF9naXRfcGFzcyhnaXRfZnV0aWxzX3JlYWRidWZmZXIoJmJ1ZiwgcGF0aC5wdHIpKTsKKwljbF9hc3NlcnRfZXF1YWxfcyhidWYucHRyLCBDT05GTElDVF9CUkFOQ0hfRklMRV9UWFQpOworCisJZ2l0X2J1Zl9mcmVlKCZwYXRoKTsKKwlnaXRfYnVmX2ZyZWUoJmJ1Zik7Cit9CisKZGlmZiAtLWdpdCBhL3Rlc3RzL3dvcmt0cmVlL29wZW4uYyBiL3Rlc3RzL3dvcmt0cmVlL29wZW4uYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43NGI5MDA3Ci0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvd29ya3RyZWUvb3Blbi5jCkBAIC0wLDAgKzEsMTQzIEBACisjaW5jbHVkZSAiY2xhcl9saWJnaXQyLmgiCisjaW5jbHVkZSAicmVwb3NpdG9yeS5oIgorI2luY2x1ZGUgIndvcmt0cmVlLmgiCisjaW5jbHVkZSAid29ya3RyZWVfaGVscGVycy5oIgorCisjZGVmaW5lIENPTU1PTl9SRVBPICJ0ZXN0cmVwbyIKKyNkZWZpbmUgV09SS1RSRUVfUkVQTyAidGVzdHJlcG8td29ya3RyZWUiCisKK3N0YXRpYyB3b3JrdHJlZV9maXh0dXJlIGZpeHR1cmUgPQorCVdPUktUUkVFX0ZJWFRVUkVfSU5JVChDT01NT05fUkVQTywgV09SS1RSRUVfUkVQTyk7CisKK3N0YXRpYyB2b2lkIGFzc2VydF93b3JrdHJlZV92YWxpZChnaXRfcmVwb3NpdG9yeSAqd3QsIGNvbnN0IGNoYXIgKnBhcmVudGRpciwgY29uc3QgY2hhciAqd3RkaXIpCit7CisJZ2l0X2J1ZiBwYXRoID0gR0lUX0JVRl9JTklUOworCisJY2xfYXNzZXJ0KHd0LT5pc193b3JrdHJlZSk7CisKKwljbF9naXRfcGFzcyhnaXRfYnVmX2pvaW5wYXRoKCZwYXRoLCBjbGFyX3NhbmRib3hfcGF0aCgpLCB3dGRpcikpOworCWNsX2dpdF9wYXNzKGdpdF9wYXRoX3ByZXR0aWZ5KCZwYXRoLCBwYXRoLnB0ciwgTlVMTCkpOworCWNsX2dpdF9wYXNzKGdpdF9wYXRoX3RvX2RpcigmcGF0aCkpOworCWNsX2Fzc2VydF9lcXVhbF9zKHd0LT53b3JrZGlyLCBwYXRoLnB0cik7CisKKwljbF9naXRfcGFzcyhnaXRfYnVmX2pvaW5wYXRoKCZwYXRoLCBwYXRoLnB0ciwgIi5naXQiKSk7CisJY2xfZ2l0X3Bhc3MoZ2l0X3BhdGhfcHJldHRpZnkoJnBhdGgsIHBhdGgucHRyLCBOVUxMKSk7CisJY2xfYXNzZXJ0X2VxdWFsX3Mod3QtPmdpdGxpbmssIHBhdGgucHRyKTsKKworCWNsX2dpdF9wYXNzKGdpdF9idWZfam9pbnBhdGgoJnBhdGgsIGNsYXJfc2FuZGJveF9wYXRoKCksIHBhcmVudGRpcikpOworCWNsX2dpdF9wYXNzKGdpdF9idWZfam9pbnBhdGgoJnBhdGgsIHBhdGgucHRyLCAiLmdpdCIpKTsKKwljbF9naXRfcGFzcyhnaXRfYnVmX2pvaW5wYXRoKCZwYXRoLCBwYXRoLnB0ciwgIndvcmt0cmVlcyIpKTsKKwljbF9naXRfcGFzcyhnaXRfYnVmX2pvaW5wYXRoKCZwYXRoLCBwYXRoLnB0ciwgd3RkaXIpKTsKKwljbF9naXRfcGFzcyhnaXRfcGF0aF9wcmV0dGlmeSgmcGF0aCwgcGF0aC5wdHIsIE5VTEwpKTsKKwljbF9naXRfcGFzcyhnaXRfcGF0aF90b19kaXIoJnBhdGgpKTsKKwljbF9hc3NlcnRfZXF1YWxfcyh3dC0+Z2l0ZGlyLCBwYXRoLnB0cik7CisKKwlnaXRfYnVmX2ZyZWUoJnBhdGgpOworfQorCit2b2lkIHRlc3Rfd29ya3RyZWVfb3Blbl9faW5pdGlhbGl6ZSh2b2lkKQoreworCXNldHVwX2ZpeHR1cmVfd29ya3RyZWUoJmZpeHR1cmUpOworfQorCit2b2lkIHRlc3Rfd29ya3RyZWVfb3Blbl9fY2xlYW51cCh2b2lkKQoreworCWNsZWFudXBfZml4dHVyZV93b3JrdHJlZSgmZml4dHVyZSk7Cit9CisKK3ZvaWQgdGVzdF93b3JrdHJlZV9vcGVuX19yZXBvc2l0b3J5KHZvaWQpCit7CisJYXNzZXJ0X3dvcmt0cmVlX3ZhbGlkKGZpeHR1cmUud29ya3RyZWUsIENPTU1PTl9SRVBPLCBXT1JLVFJFRV9SRVBPKTsKK30KKwordm9pZCB0ZXN0X3dvcmt0cmVlX29wZW5fX3JlcG9zaXRvcnlfdGhyb3VnaF93b3JrZGlyKHZvaWQpCit7CisJZ2l0X3JlcG9zaXRvcnkgKnd0OworCisJY2xfZ2l0X3Bhc3MoZ2l0X3JlcG9zaXRvcnlfb3Blbigmd3QsIFdPUktUUkVFX1JFUE8pKTsKKwlhc3NlcnRfd29ya3RyZWVfdmFsaWQod3QsIENPTU1PTl9SRVBPLCBXT1JLVFJFRV9SRVBPKTsKKworCWdpdF9yZXBvc2l0b3J5X2ZyZWUod3QpOworfQorCit2b2lkIHRlc3Rfd29ya3RyZWVfb3Blbl9fcmVwb3NpdG9yeV90aHJvdWdoX2dpdGxpbmsodm9pZCkKK3sKKwlnaXRfcmVwb3NpdG9yeSAqd3Q7CisKKwljbF9naXRfcGFzcyhnaXRfcmVwb3NpdG9yeV9vcGVuKCZ3dCwgV09SS1RSRUVfUkVQTyAiLy5naXQiKSk7CisJYXNzZXJ0X3dvcmt0cmVlX3ZhbGlkKHd0LCBDT01NT05fUkVQTywgV09SS1RSRUVfUkVQTyk7CisKKwlnaXRfcmVwb3NpdG9yeV9mcmVlKHd0KTsKK30KKwordm9pZCB0ZXN0X3dvcmt0cmVlX29wZW5fX3JlcG9zaXRvcnlfdGhyb3VnaF9naXRkaXIodm9pZCkKK3sKKwlnaXRfYnVmIGdpdGRpcl9wYXRoID0gR0lUX0JVRl9JTklUOworCWdpdF9yZXBvc2l0b3J5ICp3dDsKKworCWNsX2dpdF9wYXNzKGdpdF9idWZfam9pbnBhdGgoJmdpdGRpcl9wYXRoLCBDT01NT05fUkVQTywgIi5naXQiKSk7CisJY2xfZ2l0X3Bhc3MoZ2l0X2J1Zl9qb2lucGF0aCgmZ2l0ZGlyX3BhdGgsIGdpdGRpcl9wYXRoLnB0ciwgIndvcmt0cmVlcyIpKTsKKwljbF9naXRfcGFzcyhnaXRfYnVmX2pvaW5wYXRoKCZnaXRkaXJfcGF0aCwgZ2l0ZGlyX3BhdGgucHRyLCAidGVzdHJlcG8td29ya3RyZWUiKSk7CisKKwljbF9naXRfcGFzcyhnaXRfcmVwb3NpdG9yeV9vcGVuKCZ3dCwgZ2l0ZGlyX3BhdGgucHRyKSk7CisJYXNzZXJ0X3dvcmt0cmVlX3ZhbGlkKHd0LCBDT01NT05fUkVQTywgV09SS1RSRUVfUkVQTyk7CisKKwlnaXRfYnVmX2ZyZWUoJmdpdGRpcl9wYXRoKTsKKwlnaXRfcmVwb3NpdG9yeV9mcmVlKHd0KTsKK30KKwordm9pZCB0ZXN0X3dvcmt0cmVlX29wZW5fX29wZW5fZGlzY292ZXJlZF93b3JrdHJlZSh2b2lkKQoreworCWdpdF9idWYgcGF0aCA9IEdJVF9CVUZfSU5JVDsKKwlnaXRfcmVwb3NpdG9yeSAqcmVwbzsKKworCWNsX2dpdF9wYXNzKGdpdF9yZXBvc2l0b3J5X2Rpc2NvdmVyKCZwYXRoLAorCQlnaXRfcmVwb3NpdG9yeV93b3JrZGlyKGZpeHR1cmUud29ya3RyZWUpLCBmYWxzZSwgTlVMTCkpOworCWNsX2dpdF9wYXNzKGdpdF9yZXBvc2l0b3J5X29wZW4oJnJlcG8sIHBhdGgucHRyKSk7CisJY2xfYXNzZXJ0X2VxdWFsX3MoZ2l0X3JlcG9zaXRvcnlfd29ya2RpcihmaXh0dXJlLndvcmt0cmVlKSwKKwkJZ2l0X3JlcG9zaXRvcnlfd29ya2RpcihyZXBvKSk7CisKKwlnaXRfYnVmX2ZyZWUoJnBhdGgpOworCWdpdF9yZXBvc2l0b3J5X2ZyZWUocmVwbyk7Cit9CisKK3ZvaWQgdGVzdF93b3JrdHJlZV9vcGVuX19yZXBvc2l0b3J5X3dpdGhfbm9uZXhpc3RlbnRfcGFyZW50KHZvaWQpCit7CisJZ2l0X3JlcG9zaXRvcnkgKnJlcG87CisKKwljbGVhbnVwX2ZpeHR1cmVfd29ya3RyZWUoJmZpeHR1cmUpOworCisJY2xfZml4dHVyZV9zYW5kYm94KFdPUktUUkVFX1JFUE8pOworCWNsX2dpdF9wYXNzKHBfY2hkaXIoV09SS1RSRUVfUkVQTykpOworCWNsX2dpdF9wYXNzKGNsX3JlbmFtZSgiLmdpdHRlZCIsICIuZ2l0IikpOworCWNsX2dpdF9wYXNzKHBfY2hkaXIoIi4uIikpOworCisJY2xfZ2l0X2ZhaWwoZ2l0X3JlcG9zaXRvcnlfb3BlbigmcmVwbywgV09SS1RSRUVfUkVQTykpOworCisJY2xfZml4dHVyZV9jbGVhbnVwKFdPUktUUkVFX1JFUE8pOworfQorCit2b2lkIHRlc3Rfd29ya3RyZWVfb3Blbl9fb3Blbl9mcm9tX3JlcG9zaXRvcnkodm9pZCkKK3sKKwlnaXRfd29ya3RyZWUgKm9wZW5lZCwgKmxvb2tlZHVwOworCisJY2xfZ2l0X3Bhc3MoZ2l0X3dvcmt0cmVlX29wZW5fZnJvbV9yZXBvc2l0b3J5KCZvcGVuZWQsIGZpeHR1cmUud29ya3RyZWUpKTsKKwljbF9naXRfcGFzcyhnaXRfd29ya3RyZWVfbG9va3VwKCZsb29rZWR1cCwgZml4dHVyZS5yZXBvLCBXT1JLVFJFRV9SRVBPKSk7CisKKwljbF9hc3NlcnRfZXF1YWxfcyhvcGVuZWQtPm5hbWUsIGxvb2tlZHVwLT5uYW1lKTsKKwljbF9hc3NlcnRfZXF1YWxfcyhvcGVuZWQtPmdpdGRpcl9wYXRoLCBsb29rZWR1cC0+Z2l0ZGlyX3BhdGgpOworCWNsX2Fzc2VydF9lcXVhbF9zKG9wZW5lZC0+Z2l0bGlua19wYXRoLCBsb29rZWR1cC0+Z2l0bGlua19wYXRoKTsKKwljbF9hc3NlcnRfZXF1YWxfcyhvcGVuZWQtPnBhcmVudF9wYXRoLCBsb29rZWR1cC0+cGFyZW50X3BhdGgpOworCWNsX2Fzc2VydF9lcXVhbF9zKG9wZW5lZC0+Y29tbW9uZGlyX3BhdGgsIGxvb2tlZHVwLT5jb21tb25kaXJfcGF0aCk7CisJY2xfYXNzZXJ0X2VxdWFsX2kob3BlbmVkLT5sb2NrZWQsIGxvb2tlZHVwLT5sb2NrZWQpOworCisJZ2l0X3dvcmt0cmVlX2ZyZWUob3BlbmVkKTsKKwlnaXRfd29ya3RyZWVfZnJlZShsb29rZWR1cCk7Cit9CisKK3ZvaWQgdGVzdF93b3JrdHJlZV9vcGVuX19vcGVuX2Zyb21fbm9ud29ya3RyZWVfZmFpbHModm9pZCkKK3sKKwlnaXRfd29ya3RyZWUgKnd0OworCisJY2xfZ2l0X2ZhaWwoZ2l0X3dvcmt0cmVlX29wZW5fZnJvbV9yZXBvc2l0b3J5KCZ3dCwgZml4dHVyZS5yZXBvKSk7Cit9CmRpZmYgLS1naXQgYS90ZXN0cy93b3JrdHJlZS9yZWZsb2cuYyBiL3Rlc3RzL3dvcmt0cmVlL3JlZmxvZy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjYxNTJlYjMKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy93b3JrdHJlZS9yZWZsb2cuYwpAQCAtMCwwICsxLDY1IEBACisjaW5jbHVkZSAiY2xhcl9saWJnaXQyLmgiCisjaW5jbHVkZSAid29ya3RyZWVfaGVscGVycy5oIgorCisjaW5jbHVkZSAicmVmbG9nLmgiCisKKyNkZWZpbmUgQ09NTU9OX1JFUE8gInRlc3RyZXBvIgorI2RlZmluZSBXT1JLVFJFRV9SRVBPICJ0ZXN0cmVwby13b3JrdHJlZSIKKworI2RlZmluZSBSRUZMT0cgInJlZnMvaGVhZHMvdGVzdHJlcG8td29ya3RyZWUiCisjZGVmaW5lIFJFRkxPR19NRVNTQUdFICJyZWZsb2cgbWVzc2FnZSIKKworc3RhdGljIHdvcmt0cmVlX2ZpeHR1cmUgZml4dHVyZSA9CisJV09SS1RSRUVfRklYVFVSRV9JTklUKENPTU1PTl9SRVBPLCBXT1JLVFJFRV9SRVBPKTsKKwordm9pZCB0ZXN0X3dvcmt0cmVlX3JlZmxvZ19faW5pdGlhbGl6ZSh2b2lkKQoreworCXNldHVwX2ZpeHR1cmVfd29ya3RyZWUoJmZpeHR1cmUpOworfQorCit2b2lkIHRlc3Rfd29ya3RyZWVfcmVmbG9nX19jbGVhbnVwKHZvaWQpCit7CisJY2xlYW51cF9maXh0dXJlX3dvcmt0cmVlKCZmaXh0dXJlKTsKK30KKwordm9pZCB0ZXN0X3dvcmt0cmVlX3JlZmxvZ19fcmVhZCh2b2lkKQoreworCWdpdF9yZWZsb2cgKnJlZmxvZzsKKwljb25zdCBnaXRfcmVmbG9nX2VudHJ5ICplbnRyeTsKKworCWNsX2dpdF9wYXNzKGdpdF9yZWZsb2dfcmVhZCgmcmVmbG9nLCBmaXh0dXJlLndvcmt0cmVlLCBSRUZMT0cpKTsKKwljbF9hc3NlcnRfZXF1YWxfaShnaXRfcmVmbG9nX2VudHJ5Y291bnQocmVmbG9nKSwgMSk7CisKKwllbnRyeSA9IGdpdF9yZWZsb2dfZW50cnlfYnlpbmRleChyZWZsb2csIDApOworCWNsX2Fzc2VydChlbnRyeSAhPSBOVUxMKTsKKwljbF9hc3NlcnRfZXF1YWxfcyhnaXRfcmVmbG9nX2VudHJ5X21lc3NhZ2UoZW50cnkpLCAiYnJhbmNoOiBDcmVhdGVkIGZyb20gSEVBRCIpOworCisJZ2l0X3JlZmxvZ19mcmVlKHJlZmxvZyk7Cit9CisKK3ZvaWQgdGVzdF93b3JrdHJlZV9yZWZsb2dfX2FwcGVuZF90aGVuX3JlYWQodm9pZCkKK3sKKwlnaXRfcmVmbG9nICpyZWZsb2csICpwYXJlbnRfcmVmbG9nOworCWNvbnN0IGdpdF9yZWZsb2dfZW50cnkgKmVudHJ5OworCWdpdF9yZWZlcmVuY2UgKmhlYWQ7CisJZ2l0X3NpZ25hdHVyZSAqc2lnOworCWNvbnN0IGdpdF9vaWQgKm9pZDsKKworCWNsX2dpdF9wYXNzKGdpdF9yZXBvc2l0b3J5X2hlYWQoJmhlYWQsIGZpeHR1cmUud29ya3RyZWUpKTsKKwljbF9hc3NlcnQoKG9pZCA9IGdpdF9yZWZlcmVuY2VfdGFyZ2V0KGhlYWQpKSAhPSBOVUxMKTsKKwljbF9naXRfcGFzcyhnaXRfc2lnbmF0dXJlX25vdygmc2lnLCAiZm9vIiwgImZvb0BiYXIiKSk7CisKKwljbF9naXRfcGFzcyhnaXRfcmVmbG9nX3JlYWQoJnJlZmxvZywgZml4dHVyZS53b3JrdHJlZSwgUkVGTE9HKSk7CisJY2xfZ2l0X3Bhc3MoZ2l0X3JlZmxvZ19hcHBlbmQocmVmbG9nLCBvaWQsIHNpZywgUkVGTE9HX01FU1NBR0UpKTsKKwlnaXRfcmVmbG9nX3dyaXRlKHJlZmxvZyk7CisKKwljbF9naXRfcGFzcyhnaXRfcmVmbG9nX3JlYWQoJnBhcmVudF9yZWZsb2csIGZpeHR1cmUucmVwbywgUkVGTE9HKSk7CisJZW50cnkgPSBnaXRfcmVmbG9nX2VudHJ5X2J5aW5kZXgocGFyZW50X3JlZmxvZywgMCk7CisJY2xfYXNzZXJ0KGdpdF9vaWRfY21wKG9pZCwgJmVudHJ5LT5vaWRfb2xkKSA9PSAwKTsKKwljbF9hc3NlcnQoZ2l0X29pZF9jbXAob2lkLCAmZW50cnktPm9pZF9jdXIpID09IDApOworCisJZ2l0X3JlZmVyZW5jZV9mcmVlKGhlYWQpOworCWdpdF9zaWduYXR1cmVfZnJlZShzaWcpOworCWdpdF9yZWZsb2dfZnJlZShyZWZsb2cpOworCWdpdF9yZWZsb2dfZnJlZShwYXJlbnRfcmVmbG9nKTsKK30KZGlmZiAtLWdpdCBhL3Rlc3RzL3dvcmt0cmVlL3JlZnMuYyBiL3Rlc3RzL3dvcmt0cmVlL3JlZnMuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hMTBmNTBhCi0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvd29ya3RyZWUvcmVmcy5jCkBAIC0wLDAgKzEsMTczIEBACisjaW5jbHVkZSAiY2xhcl9saWJnaXQyLmgiCisjaW5jbHVkZSAicGF0aC5oIgorI2luY2x1ZGUgInJlZnMuaCIKKyNpbmNsdWRlICJ3b3JrdHJlZS5oIgorI2luY2x1ZGUgIndvcmt0cmVlX2hlbHBlcnMuaCIKKworI2RlZmluZSBDT01NT05fUkVQTyAidGVzdHJlcG8iCisjZGVmaW5lIFdPUktUUkVFX1JFUE8gInRlc3RyZXBvLXdvcmt0cmVlIgorCitzdGF0aWMgd29ya3RyZWVfZml4dHVyZSBmaXh0dXJlID0KKwlXT1JLVFJFRV9GSVhUVVJFX0lOSVQoQ09NTU9OX1JFUE8sIFdPUktUUkVFX1JFUE8pOworCit2b2lkIHRlc3Rfd29ya3RyZWVfcmVmc19faW5pdGlhbGl6ZSh2b2lkKQoreworCXNldHVwX2ZpeHR1cmVfd29ya3RyZWUoJmZpeHR1cmUpOworfQorCit2b2lkIHRlc3Rfd29ya3RyZWVfcmVmc19fY2xlYW51cCh2b2lkKQoreworCWNsZWFudXBfZml4dHVyZV93b3JrdHJlZSgmZml4dHVyZSk7Cit9CisKK3ZvaWQgdGVzdF93b3JrdHJlZV9yZWZzX19saXN0KHZvaWQpCit7CisJZ2l0X3N0cmFycmF5IHJlZnMsIHd0cmVmczsKKwl1bnNpZ25lZCBpLCBqOworCWludCBlcnJvciA9IDA7CisKKwljbF9naXRfcGFzcyhnaXRfcmVmZXJlbmNlX2xpc3QoJnJlZnMsIGZpeHR1cmUucmVwbykpOworCWNsX2dpdF9wYXNzKGdpdF9yZWZlcmVuY2VfbGlzdCgmd3RyZWZzLCBmaXh0dXJlLndvcmt0cmVlKSk7CisKKwlpZiAocmVmcy5jb3VudCAhPSB3dHJlZnMuY291bnQpCisJeworCQllcnJvciA9IEdJVF9FUlJPUjsKKwkJZ290byBleGl0OworCX0KKworCWZvciAoaSA9IDA7IGkgPCByZWZzLmNvdW50OyBpKyspCisJeworCQlpbnQgZm91bmQgPSAwOworCisJCWZvciAoaiA9IDA7IGogPCB3dHJlZnMuY291bnQ7IGorKykKKwkJeworCQkJaWYgKCFzdHJjbXAocmVmcy5zdHJpbmdzW2ldLCB3dHJlZnMuc3RyaW5nc1tqXSkpCisJCQl7CisJCQkJZm91bmQgPSAxOworCQkJCWJyZWFrOworCQkJfQorCQl9CisKKwkJaWYgKCFmb3VuZCkKKwkJeworCQkJZXJyb3IgPSBHSVRfRVJST1I7CisJCQlnb3RvIGV4aXQ7CisJCX0KKwl9CisKK2V4aXQ6CisJZ2l0X3N0cmFycmF5X2ZyZWUoJnJlZnMpOworCWdpdF9zdHJhcnJheV9mcmVlKCZ3dHJlZnMpOworCWNsX2dpdF9wYXNzKGVycm9yKTsKK30KKwordm9pZCB0ZXN0X3dvcmt0cmVlX3JlZnNfX3JlYWRfaGVhZCh2b2lkKQoreworCWdpdF9yZWZlcmVuY2UgKmhlYWQ7CisKKwljbF9naXRfcGFzcyhnaXRfcmVwb3NpdG9yeV9oZWFkKCZoZWFkLCBmaXh0dXJlLndvcmt0cmVlKSk7CisKKwlnaXRfcmVmZXJlbmNlX2ZyZWUoaGVhZCk7Cit9CisKK3ZvaWQgdGVzdF93b3JrdHJlZV9yZWZzX19zZXRfaGVhZF9mYWlsc193aGVuX3dvcmt0cmVlX3dhbnRzX2xpbmtlZF9yZXBvc19IRUFEKHZvaWQpCit7CisJZ2l0X3JlZmVyZW5jZSAqaGVhZDsKKworCWNsX2dpdF9wYXNzKGdpdF9yZXBvc2l0b3J5X2hlYWQoJmhlYWQsIGZpeHR1cmUucmVwbykpOworCWNsX2dpdF9mYWlsKGdpdF9yZXBvc2l0b3J5X3NldF9oZWFkKGZpeHR1cmUud29ya3RyZWUsIGdpdF9yZWZlcmVuY2VfbmFtZShoZWFkKSkpOworCisJZ2l0X3JlZmVyZW5jZV9mcmVlKGhlYWQpOworfQorCit2b2lkIHRlc3Rfd29ya3RyZWVfcmVmc19fc2V0X2hlYWRfZmFpbHNfd2hlbl9tYWluX3JlcG9fd2FudHNfd29ya3RyZWVfaGVhZCh2b2lkKQoreworCWdpdF9yZWZlcmVuY2UgKmhlYWQ7CisKKwljbF9naXRfcGFzcyhnaXRfcmVwb3NpdG9yeV9oZWFkKCZoZWFkLCBmaXh0dXJlLndvcmt0cmVlKSk7CisJY2xfZ2l0X2ZhaWwoZ2l0X3JlcG9zaXRvcnlfc2V0X2hlYWQoZml4dHVyZS5yZXBvLCBnaXRfcmVmZXJlbmNlX25hbWUoaGVhZCkpKTsKKworCWdpdF9yZWZlcmVuY2VfZnJlZShoZWFkKTsKK30KKwordm9pZCB0ZXN0X3dvcmt0cmVlX3JlZnNfX3NldF9oZWFkX3dvcmtzX2Zvcl9jdXJyZW50X0hFQUQodm9pZCkKK3sKKwlnaXRfcmVmZXJlbmNlICpoZWFkOworCisJY2xfZ2l0X3Bhc3MoZ2l0X3JlcG9zaXRvcnlfaGVhZCgmaGVhZCwgZml4dHVyZS5yZXBvKSk7CisJY2xfZ2l0X3Bhc3MoZ2l0X3JlcG9zaXRvcnlfc2V0X2hlYWQoZml4dHVyZS5yZXBvLCBnaXRfcmVmZXJlbmNlX25hbWUoaGVhZCkpKTsKKworCWdpdF9yZWZlcmVuY2VfZnJlZShoZWFkKTsKK30KKwordm9pZCB0ZXN0X3dvcmt0cmVlX3JlZnNfX3NldF9oZWFkX2ZhaWxzX3doZW5fYWxyZWFkeV9jaGVja2VkX291dCh2b2lkKQoreworCWNsX2dpdF9mYWlsKGdpdF9yZXBvc2l0b3J5X3NldF9oZWFkKGZpeHR1cmUucmVwbywgInJlZnMvaGVhZHMvdGVzdHJlcG8td29ya3RyZWUiKSk7Cit9CisKK3ZvaWQgdGVzdF93b3JrdHJlZV9yZWZzX19kZWxldGVfZmFpbHNfZm9yX2NoZWNrZWRfb3V0X2JyYW5jaCh2b2lkKQoreworCWdpdF9yZWZlcmVuY2UgKmJyYW5jaDsKKworCWNsX2dpdF9wYXNzKGdpdF9icmFuY2hfbG9va3VwKCZicmFuY2gsIGZpeHR1cmUucmVwbywKKwkJICAgICJ0ZXN0cmVwby13b3JrdHJlZSIsIEdJVF9CUkFOQ0hfTE9DQUwpKTsKKwljbF9naXRfZmFpbChnaXRfYnJhbmNoX2RlbGV0ZShicmFuY2gpKTsKKworCWdpdF9yZWZlcmVuY2VfZnJlZShicmFuY2gpOworfQorCit2b2lkIHRlc3Rfd29ya3RyZWVfcmVmc19fZGVsZXRlX3N1Y2NlZWRzX2FmdGVyX3BydW5pbmdfd29ya3RyZWUodm9pZCkKK3sKKwlnaXRfd29ya3RyZWVfcHJ1bmVfb3B0aW9ucyBvcHRzID0gR0lUX1dPUktUUkVFX1BSVU5FX09QVElPTlNfSU5JVDsKKwlnaXRfcmVmZXJlbmNlICpicmFuY2g7CisJZ2l0X3dvcmt0cmVlICp3b3JrdHJlZTsKKworCW9wdHMuZmxhZ3MgPSBHSVRfV09SS1RSRUVfUFJVTkVfVkFMSUQ7CisKKwljbF9naXRfcGFzcyhnaXRfd29ya3RyZWVfbG9va3VwKCZ3b3JrdHJlZSwgZml4dHVyZS5yZXBvLCBmaXh0dXJlLndvcmt0cmVlbmFtZSkpOworCWNsX2dpdF9wYXNzKGdpdF93b3JrdHJlZV9wcnVuZSh3b3JrdHJlZSwgJm9wdHMpKTsKKwlnaXRfd29ya3RyZWVfZnJlZSh3b3JrdHJlZSk7CisKKwljbF9naXRfcGFzcyhnaXRfYnJhbmNoX2xvb2t1cCgmYnJhbmNoLCBmaXh0dXJlLnJlcG8sCisJCSAgICAidGVzdHJlcG8td29ya3RyZWUiLCBHSVRfQlJBTkNIX0xPQ0FMKSk7CisJY2xfZ2l0X3Bhc3MoZ2l0X2JyYW5jaF9kZWxldGUoYnJhbmNoKSk7CisJZ2l0X3JlZmVyZW5jZV9mcmVlKGJyYW5jaCk7Cit9CisKK3ZvaWQgdGVzdF93b3JrdHJlZV9yZWZzX19yZW5hbWluZ19yZWZlcmVuY2VfdXBkYXRlc193b3JrdHJlZV9oZWFkcyh2b2lkKQoreworCWdpdF9yZWZlcmVuY2UgKmhlYWQsICpicmFuY2gsICpyZW5hbWVkOworCisJY2xfZ2l0X3Bhc3MoZ2l0X2JyYW5jaF9sb29rdXAoJmJyYW5jaCwgZml4dHVyZS5yZXBvLAorCQkgICAgInRlc3RyZXBvLXdvcmt0cmVlIiwgR0lUX0JSQU5DSF9MT0NBTCkpOworCWNsX2dpdF9wYXNzKGdpdF9yZWZlcmVuY2VfcmVuYW1lKCZyZW5hbWVkLCBicmFuY2gsICJyZWZzL2hlYWRzL3JlbmFtZWQiLCAwLCBOVUxMKSk7CisJY2xfZ2l0X3Bhc3MoZ2l0X3JlcG9zaXRvcnlfaGVhZCgmaGVhZCwgZml4dHVyZS53b3JrdHJlZSkpOworCisJZ2l0X3JlZmVyZW5jZV9mcmVlKGhlYWQpOworCWdpdF9yZWZlcmVuY2VfZnJlZShicmFuY2gpOworCWdpdF9yZWZlcmVuY2VfZnJlZShyZW5hbWVkKTsKK30KKwordm9pZCB0ZXN0X3dvcmt0cmVlX3JlZnNfX2NyZWF0aW5nX3JlZnNfdXNlc19jb21tb25kaXIodm9pZCkKK3sKKwkgICBnaXRfcmVmZXJlbmNlICpoZWFkLCAqYnJhbmNoLCAqbG9va3VwOworCSAgIGdpdF9jb21taXQgKmNvbW1pdDsKKwkgICBnaXRfYnVmIHJlZnBhdGggPSBHSVRfQlVGX0lOSVQ7CisKKwkgICBjbF9naXRfcGFzcyhnaXRfYnVmX2pvaW5wYXRoKCZyZWZwYXRoLAorCQkgICAgICAgZ2l0X3JlcG9zaXRvcnlfY29tbW9uZGlyKGZpeHR1cmUud29ya3RyZWUpLCAicmVmcy9oZWFkcy90ZXN0YnJhbmNoIikpOworCSAgIGNsX2Fzc2VydCghZ2l0X3BhdGhfZXhpc3RzKHJlZnBhdGgucHRyKSk7CisKKwkgICBjbF9naXRfcGFzcyhnaXRfcmVwb3NpdG9yeV9oZWFkKCZoZWFkLCBmaXh0dXJlLndvcmt0cmVlKSk7CisJICAgY2xfZ2l0X3Bhc3MoZ2l0X2NvbW1pdF9sb29rdXAoJmNvbW1pdCwgZml4dHVyZS53b3JrdHJlZSwgZ2l0X3JlZmVyZW5jZV90YXJnZXQoaGVhZCkpKTsKKwkgICBjbF9naXRfcGFzcyhnaXRfYnJhbmNoX2NyZWF0ZSgmYnJhbmNoLCBmaXh0dXJlLndvcmt0cmVlLCAidGVzdGJyYW5jaCIsIGNvbW1pdCwgMCkpOworCSAgIGNsX2dpdF9wYXNzKGdpdF9icmFuY2hfbG9va3VwKCZsb29rdXAsIGZpeHR1cmUud29ya3RyZWUsICJ0ZXN0YnJhbmNoIiwgR0lUX0JSQU5DSF9MT0NBTCkpOworCSAgIGNsX2Fzc2VydChnaXRfcmVmZXJlbmNlX2NtcChicmFuY2gsIGxvb2t1cCkgPT0gMCk7CisJICAgY2xfYXNzZXJ0KGdpdF9wYXRoX2V4aXN0cyhyZWZwYXRoLnB0cikpOworCisJICAgZ2l0X3JlZmVyZW5jZV9mcmVlKGxvb2t1cCk7CisJICAgZ2l0X3JlZmVyZW5jZV9mcmVlKGJyYW5jaCk7CisJICAgZ2l0X3JlZmVyZW5jZV9mcmVlKGhlYWQpOworCSAgIGdpdF9jb21taXRfZnJlZShjb21taXQpOworCSAgIGdpdF9idWZfZnJlZSgmcmVmcGF0aCk7Cit9CmRpZmYgLS1naXQgYS90ZXN0cy93b3JrdHJlZS9yZXBvc2l0b3J5LmMgYi90ZXN0cy93b3JrdHJlZS9yZXBvc2l0b3J5LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNWM3NTk1YwotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL3dvcmt0cmVlL3JlcG9zaXRvcnkuYwpAQCAtMCwwICsxLDYzIEBACisjaW5jbHVkZSAiY2xhcl9saWJnaXQyLmgiCisjaW5jbHVkZSAid29ya3RyZWVfaGVscGVycy5oIgorI2luY2x1ZGUgInN1Ym1vZHVsZS9zdWJtb2R1bGVfaGVscGVycy5oIgorCisjaW5jbHVkZSAicmVwb3NpdG9yeS5oIgorCisjZGVmaW5lIENPTU1PTl9SRVBPICJ0ZXN0cmVwbyIKKyNkZWZpbmUgV09SS1RSRUVfUkVQTyAidGVzdHJlcG8td29ya3RyZWUiCisKK3N0YXRpYyB3b3JrdHJlZV9maXh0dXJlIGZpeHR1cmUgPQorCVdPUktUUkVFX0ZJWFRVUkVfSU5JVChDT01NT05fUkVQTywgV09SS1RSRUVfUkVQTyk7CisKK3ZvaWQgdGVzdF93b3JrdHJlZV9yZXBvc2l0b3J5X19pbml0aWFsaXplKHZvaWQpCit7CisJc2V0dXBfZml4dHVyZV93b3JrdHJlZSgmZml4dHVyZSk7Cit9CisKK3ZvaWQgdGVzdF93b3JrdHJlZV9yZXBvc2l0b3J5X19jbGVhbnVwKHZvaWQpCit7CisJY2xlYW51cF9maXh0dXJlX3dvcmt0cmVlKCZmaXh0dXJlKTsKK30KKwordm9pZCB0ZXN0X3dvcmt0cmVlX3JlcG9zaXRvcnlfX2hlYWQodm9pZCkKK3sKKwlnaXRfcmVmZXJlbmNlICpyZWYsICpoZWFkOworCisJY2xfZ2l0X3Bhc3MoZ2l0X3JlZmVyZW5jZV9sb29rdXAoJnJlZiwgZml4dHVyZS5yZXBvLCAicmVmcy9oZWFkcy90ZXN0cmVwby13b3JrdHJlZSIpKTsKKwljbF9naXRfcGFzcyhnaXRfcmVwb3NpdG9yeV9oZWFkX2Zvcl93b3JrdHJlZSgmaGVhZCwgZml4dHVyZS5yZXBvLCAidGVzdHJlcG8td29ya3RyZWUiKSk7CisJY2xfYXNzZXJ0KGdpdF9yZWZlcmVuY2VfY21wKHJlZiwgaGVhZCkgPT0gMCk7CisKKwlnaXRfcmVmZXJlbmNlX2ZyZWUocmVmKTsKKwlnaXRfcmVmZXJlbmNlX2ZyZWUoaGVhZCk7Cit9CisKK3ZvaWQgdGVzdF93b3JrdHJlZV9yZXBvc2l0b3J5X19oZWFkX2ZhaWxzX2Zvcl9pbnZhbGlkX3dvcmt0cmVlKHZvaWQpCit7CisJZ2l0X3JlZmVyZW5jZSAqaGVhZCA9IE5VTEw7CisKKwljbF9naXRfZmFpbChnaXRfcmVwb3NpdG9yeV9oZWFkX2Zvcl93b3JrdHJlZSgmaGVhZCwgZml4dHVyZS5yZXBvLCAiaW52YWxpZCIpKTsKKwljbF9hc3NlcnQoaGVhZCA9PSBOVUxMKTsKK30KKwordm9pZCB0ZXN0X3dvcmt0cmVlX3JlcG9zaXRvcnlfX2hlYWRfZGV0YWNoZWQodm9pZCkKK3sKKwlnaXRfcmVmZXJlbmNlICpyZWYsICpoZWFkOworCisJY2xfZ2l0X3Bhc3MoZ2l0X3JlZmVyZW5jZV9sb29rdXAoJnJlZiwgZml4dHVyZS5yZXBvLCAicmVmcy9oZWFkcy90ZXN0cmVwby13b3JrdHJlZSIpKTsKKwljbF9naXRfcGFzcyhnaXRfcmVwb3NpdG9yeV9zZXRfaGVhZF9kZXRhY2hlZChmaXh0dXJlLndvcmt0cmVlLCAmcmVmLT50YXJnZXQub2lkKSk7CisKKwljbF9hc3NlcnQoZ2l0X3JlcG9zaXRvcnlfaGVhZF9kZXRhY2hlZChmaXh0dXJlLndvcmt0cmVlKSk7CisJY2xfYXNzZXJ0KGdpdF9yZXBvc2l0b3J5X2hlYWRfZGV0YWNoZWRfZm9yX3dvcmt0cmVlKGZpeHR1cmUucmVwbywgInRlc3RyZXBvLXdvcmt0cmVlIikpOworCWNsX2dpdF9mYWlsKGdpdF9yZXBvc2l0b3J5X2hlYWRfZm9yX3dvcmt0cmVlKCZoZWFkLCBmaXh0dXJlLnJlcG8sICJ0ZXN0cmVwby13b3JrdHJlZSIpKTsKKworCWdpdF9yZWZlcmVuY2VfZnJlZShyZWYpOworfQorCit2b2lkIHRlc3Rfd29ya3RyZWVfcmVwb3NpdG9yeV9faGVhZF9kZXRhY2hlZF9mYWlsc19mb3JfaW52YWxpZF93b3JrdHJlZSh2b2lkKQoreworCWdpdF9yZWZlcmVuY2UgKmhlYWQgPSBOVUxMOworCisJY2xfZ2l0X2ZhaWwoZ2l0X3JlcG9zaXRvcnlfaGVhZF9kZXRhY2hlZF9mb3Jfd29ya3RyZWUoZml4dHVyZS5yZXBvLCAiaW52YWxpZCIpKTsKKwljbF9hc3NlcnQoaGVhZCA9PSBOVUxMKTsKK30KZGlmZiAtLWdpdCBhL3Rlc3RzL3dvcmt0cmVlL3N1Ym1vZHVsZS5jIGIvdGVzdHMvd29ya3RyZWUvc3VibW9kdWxlLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjk0Mzg1MgotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL3dvcmt0cmVlL3N1Ym1vZHVsZS5jCkBAIC0wLDAgKzEsOTIgQEAKKyNpbmNsdWRlICJjbGFyX2xpYmdpdDIuaCIKKyNpbmNsdWRlICJyZXBvc2l0b3J5LmgiCisjaW5jbHVkZSAid29ya3RyZWUuaCIKKyNpbmNsdWRlICJ3b3JrdHJlZV9oZWxwZXJzLmgiCisKKyNkZWZpbmUgV09SS1RSRUVfUEFSRU5UICJzdWJtb2R1bGVzLXdvcmt0cmVlLXBhcmVudCIKKyNkZWZpbmUgV09SS1RSRUVfQ0hJTEQgInN1Ym1vZHVsZXMtd29ya3RyZWUtY2hpbGQiCisKK3N0YXRpYyB3b3JrdHJlZV9maXh0dXJlIHBhcmVudAorICAgID0gV09SS1RSRUVfRklYVFVSRV9JTklUKCJzdWJtb2R1bGVzIiwgV09SS1RSRUVfUEFSRU5UKTsKK3N0YXRpYyB3b3JrdHJlZV9maXh0dXJlIGNoaWxkCisgICAgPSBXT1JLVFJFRV9GSVhUVVJFX0lOSVQoTlVMTCwgV09SS1RSRUVfQ0hJTEQpOworCit2b2lkIHRlc3Rfd29ya3RyZWVfc3VibW9kdWxlX19pbml0aWFsaXplKHZvaWQpCit7CisJc2V0dXBfZml4dHVyZV93b3JrdHJlZSgmcGFyZW50KTsKKworCWNsX2dpdF9wYXNzKHBfcmVuYW1lKAorCQkic3VibW9kdWxlcy90ZXN0cmVwby8uZ2l0dGVkIiwKKwkJInN1Ym1vZHVsZXMvdGVzdHJlcG8vLmdpdCIpKTsKKworCXNldHVwX2ZpeHR1cmVfd29ya3RyZWUoJmNoaWxkKTsKK30KKwordm9pZCB0ZXN0X3dvcmt0cmVlX3N1Ym1vZHVsZV9fY2xlYW51cCh2b2lkKQoreworCWNsZWFudXBfZml4dHVyZV93b3JrdHJlZSgmY2hpbGQpOworCWNsZWFudXBfZml4dHVyZV93b3JrdHJlZSgmcGFyZW50KTsKK30KKwordm9pZCB0ZXN0X3dvcmt0cmVlX3N1Ym1vZHVsZV9fc3VibW9kdWxlX3dvcmt0cmVlX3BhcmVudCh2b2lkKQoreworCWNsX2Fzc2VydChnaXRfcmVwb3NpdG9yeV9wYXRoKHBhcmVudC53b3JrdHJlZSkgIT0gTlVMTCk7CisJY2xfYXNzZXJ0KGdpdF9yZXBvc2l0b3J5X3dvcmtkaXIocGFyZW50Lndvcmt0cmVlKSAhPSBOVUxMKTsKKworCWNsX2Fzc2VydCghcGFyZW50LnJlcG8tPmlzX3dvcmt0cmVlKTsKKwljbF9hc3NlcnQocGFyZW50Lndvcmt0cmVlLT5pc193b3JrdHJlZSk7Cit9CisKK3ZvaWQgdGVzdF93b3JrdHJlZV9zdWJtb2R1bGVfX3N1Ym1vZHVsZV93b3JrdHJlZV9jaGlsZCh2b2lkKQoreworCWNsX2Fzc2VydCghcGFyZW50LnJlcG8tPmlzX3dvcmt0cmVlKTsKKwljbF9hc3NlcnQocGFyZW50Lndvcmt0cmVlLT5pc193b3JrdHJlZSk7CisJY2xfYXNzZXJ0KGNoaWxkLndvcmt0cmVlLT5pc193b3JrdHJlZSk7Cit9CisKK3ZvaWQgdGVzdF93b3JrdHJlZV9zdWJtb2R1bGVfX29wZW5fZGlzY292ZXJlZF9zdWJtb2R1bGVfd29ya3RyZWUodm9pZCkKK3sKKwlnaXRfYnVmIHBhdGggPSBHSVRfQlVGX0lOSVQ7CisJZ2l0X3JlcG9zaXRvcnkgKnJlcG87CisKKwljbF9naXRfcGFzcyhnaXRfcmVwb3NpdG9yeV9kaXNjb3ZlcigmcGF0aCwKKwkJZ2l0X3JlcG9zaXRvcnlfd29ya2RpcihjaGlsZC53b3JrdHJlZSksIGZhbHNlLCBOVUxMKSk7CisJY2xfZ2l0X3Bhc3MoZ2l0X3JlcG9zaXRvcnlfb3BlbigmcmVwbywgcGF0aC5wdHIpKTsKKwljbF9hc3NlcnRfZXF1YWxfcyhnaXRfcmVwb3NpdG9yeV93b3JrZGlyKGNoaWxkLndvcmt0cmVlKSwKKwkJZ2l0X3JlcG9zaXRvcnlfd29ya2RpcihyZXBvKSk7CisKKwlnaXRfYnVmX2ZyZWUoJnBhdGgpOworCWdpdF9yZXBvc2l0b3J5X2ZyZWUocmVwbyk7Cit9CisKK3ZvaWQgdGVzdF93b3JrdHJlZV9zdWJtb2R1bGVfX3Jlc29sdmVfcmVsYXRpdmVfdXJsKHZvaWQpCit7CisJZ2l0X2J1ZiB3dF9wYXRoID0gR0lUX0JVRl9JTklUOworCWdpdF9idWYgc21fcmVsYXRpdmVfcGF0aCA9IEdJVF9CVUZfSU5JVCwgd3RfcmVsYXRpdmVfcGF0aCA9IEdJVF9CVUZfSU5JVDsKKwlnaXRfcmVwb3NpdG9yeSAqcmVwbzsKKwlnaXRfd29ya3RyZWUgKnd0OworCisJY2xfZ2l0X3Bhc3MoZ2l0X2Z1dGlsc19ta2Rpcigic3ViZGlyIiwgMDc1NSwgR0lUX01LRElSX1BBVEgpKTsKKwljbF9naXRfcGFzcyhnaXRfcGF0aF9wcmV0dGlmeV9kaXIoJnd0X3BhdGgsICJzdWJkaXIiLCBOVUxMKSk7CisJY2xfZ2l0X3Bhc3MoZ2l0X2J1Zl9qb2lucGF0aCgmd3RfcGF0aCwgd3RfcGF0aC5wdHIsICJ3dCIpKTsKKworCS8qIE9wZW4gY2hpbGQgcmVwb3NpdG9yeSwgd2hpY2ggaXMgYSBzdWJtb2R1bGUgKi8KKwljbF9naXRfcGFzcyhnaXRfcmVwb3NpdG9yeV9vcGVuKCZjaGlsZC5yZXBvLCBXT1JLVFJFRV9DSElMRCkpOworCisJLyogQ3JlYXRlIHdvcmt0cmVlIG9mIHN1Ym1vZHVsZSByZXBvc2l0b3J5ICovCisJY2xfZ2l0X3Bhc3MoZ2l0X3dvcmt0cmVlX2FkZCgmd3QsIGNoaWxkLnJlcG8sICJzdWJkaXIiLCB3dF9wYXRoLnB0ciwgTlVMTCkpOworCWNsX2dpdF9wYXNzKGdpdF9yZXBvc2l0b3J5X29wZW5fZnJvbV93b3JrdHJlZSgmcmVwbywgd3QpKTsKKworCWNsX2dpdF9wYXNzKGdpdF9zdWJtb2R1bGVfcmVzb2x2ZV91cmwoJnNtX3JlbGF0aXZlX3BhdGgsIHJlcG8sCisJCSAgICAiLi4vIiBXT1JLVFJFRV9DSElMRCkpOworCWNsX2dpdF9wYXNzKGdpdF9zdWJtb2R1bGVfcmVzb2x2ZV91cmwoJnd0X3JlbGF0aXZlX3BhdGgsIGNoaWxkLnJlcG8sCisJCSAgICAiLi4vIiBXT1JLVFJFRV9DSElMRCkpOworCisJY2xfYXNzZXJ0X2VxdWFsX3Moc21fcmVsYXRpdmVfcGF0aC5wdHIsIHd0X3JlbGF0aXZlX3BhdGgucHRyKTsKKworCWdpdF93b3JrdHJlZV9mcmVlKHd0KTsKKwlnaXRfcmVwb3NpdG9yeV9mcmVlKHJlcG8pOworCWdpdF9idWZfZnJlZSgmd3RfcGF0aCk7CisJZ2l0X2J1Zl9mcmVlKCZzbV9yZWxhdGl2ZV9wYXRoKTsKKwlnaXRfYnVmX2ZyZWUoJnd0X3JlbGF0aXZlX3BhdGgpOworfQpkaWZmIC0tZ2l0IGEvdGVzdHMvd29ya3RyZWUvd29ya3RyZWUuYyBiL3Rlc3RzL3dvcmt0cmVlL3dvcmt0cmVlLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNGFjM2I4YgotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL3dvcmt0cmVlL3dvcmt0cmVlLmMKQEAgLTAsMCArMSw1ODMgQEAKKyNpbmNsdWRlICJjbGFyX2xpYmdpdDIuaCIKKyNpbmNsdWRlICJ3b3JrdHJlZV9oZWxwZXJzLmgiCisjaW5jbHVkZSAic3VibW9kdWxlL3N1Ym1vZHVsZV9oZWxwZXJzLmgiCisKKyNpbmNsdWRlICJjaGVja291dC5oIgorI2luY2x1ZGUgInJlcG9zaXRvcnkuaCIKKyNpbmNsdWRlICJ3b3JrdHJlZS5oIgorCisjZGVmaW5lIENPTU1PTl9SRVBPICJ0ZXN0cmVwbyIKKyNkZWZpbmUgV09SS1RSRUVfUkVQTyAidGVzdHJlcG8td29ya3RyZWUiCisKK3N0YXRpYyB3b3JrdHJlZV9maXh0dXJlIGZpeHR1cmUgPQorCVdPUktUUkVFX0ZJWFRVUkVfSU5JVChDT01NT05fUkVQTywgV09SS1RSRUVfUkVQTyk7CisKK3ZvaWQgdGVzdF93b3JrdHJlZV93b3JrdHJlZV9faW5pdGlhbGl6ZSh2b2lkKQoreworCXNldHVwX2ZpeHR1cmVfd29ya3RyZWUoJmZpeHR1cmUpOworfQorCit2b2lkIHRlc3Rfd29ya3RyZWVfd29ya3RyZWVfX2NsZWFudXAodm9pZCkKK3sKKwljbGVhbnVwX2ZpeHR1cmVfd29ya3RyZWUoJmZpeHR1cmUpOworfQorCit2b2lkIHRlc3Rfd29ya3RyZWVfd29ya3RyZWVfX2xpc3Qodm9pZCkKK3sKKwlnaXRfc3RyYXJyYXkgd3RzOworCisJY2xfZ2l0X3Bhc3MoZ2l0X3dvcmt0cmVlX2xpc3QoJnd0cywgZml4dHVyZS5yZXBvKSk7CisJY2xfYXNzZXJ0X2VxdWFsX2kod3RzLmNvdW50LCAxKTsKKwljbF9hc3NlcnRfZXF1YWxfcyh3dHMuc3RyaW5nc1swXSwgInRlc3RyZXBvLXdvcmt0cmVlIik7CisKKwlnaXRfc3RyYXJyYXlfZnJlZSgmd3RzKTsKK30KKwordm9pZCB0ZXN0X3dvcmt0cmVlX3dvcmt0cmVlX19saXN0X3dpdGhfaW52YWxpZF93b3JrdHJlZV9kaXJzKHZvaWQpCit7CisJY29uc3QgY2hhciAqZmlsZXNldHNbM11bMl0gPSB7CisJCXsgImdpdGRpciIsICJjb21tb25kaXIiIH0sCisJCXsgImdpdGRpciIsICJIRUFEIiB9LAorCQl7ICJIRUFEIiwgImNvbW1vbmRpciIgfSwKKwl9OworCWdpdF9idWYgcGF0aCA9IEdJVF9CVUZfSU5JVDsKKwlnaXRfc3RyYXJyYXkgd3RzOworCXVuc2lnbmVkIGksIGosIGxlbjsKKworCWNsX2dpdF9wYXNzKGdpdF9idWZfcHJpbnRmKCZwYXRoLCAiJXMvd29ya3RyZWVzL2ludmFsaWQiLAorCQkgICAgZml4dHVyZS5yZXBvLT5jb21tb25kaXIpKTsKKwljbF9naXRfcGFzcyhwX21rZGlyKHBhdGgucHRyLCAwNzU1KSk7CisKKwlsZW4gPSBwYXRoLnNpemU7CisKKwlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShmaWxlc2V0cyk7IGkrKykgeworCisJCWZvciAoaiA9IDA7IGogPCBBUlJBWV9TSVpFKGZpbGVzZXRzW2ldKTsgaisrKSB7CisJCQlnaXRfYnVmX3RydW5jYXRlKCZwYXRoLCBsZW4pOworCQkJY2xfZ2l0X3Bhc3MoZ2l0X2J1Zl9qb2lucGF0aCgmcGF0aCwgcGF0aC5wdHIsIGZpbGVzZXRzW2ldW2pdKSk7CisJCQljbF9naXRfcGFzcyhwX2Nsb3NlKHBfY3JlYXQocGF0aC5wdHIsIDA2NDQpKSk7CisJCX0KKworCQljbF9naXRfcGFzcyhnaXRfd29ya3RyZWVfbGlzdCgmd3RzLCBmaXh0dXJlLndvcmt0cmVlKSk7CisJCWNsX2Fzc2VydF9lcXVhbF9pKHd0cy5jb3VudCwgMSk7CisJCWNsX2Fzc2VydF9lcXVhbF9zKHd0cy5zdHJpbmdzWzBdLCAidGVzdHJlcG8td29ya3RyZWUiKTsKKwkJZ2l0X3N0cmFycmF5X2ZyZWUoJnd0cyk7CisKKwkJZm9yIChqID0gMDsgaiA8IEFSUkFZX1NJWkUoZmlsZXNldHNbaV0pOyBqKyspIHsKKwkJCWdpdF9idWZfdHJ1bmNhdGUoJnBhdGgsIGxlbik7CisJCQljbF9naXRfcGFzcyhnaXRfYnVmX2pvaW5wYXRoKCZwYXRoLCBwYXRoLnB0ciwgZmlsZXNldHNbaV1bal0pKTsKKwkJCXBfdW5saW5rKHBhdGgucHRyKTsKKwkJfQorCX0KKworCWdpdF9idWZfZnJlZSgmcGF0aCk7Cit9CisKK3ZvaWQgdGVzdF93b3JrdHJlZV93b3JrdHJlZV9fbGlzdF9pbl93b3JrdHJlZV9yZXBvKHZvaWQpCit7CisJZ2l0X3N0cmFycmF5IHd0czsKKworCWNsX2dpdF9wYXNzKGdpdF93b3JrdHJlZV9saXN0KCZ3dHMsIGZpeHR1cmUud29ya3RyZWUpKTsKKwljbF9hc3NlcnRfZXF1YWxfaSh3dHMuY291bnQsIDEpOworCWNsX2Fzc2VydF9lcXVhbF9zKHd0cy5zdHJpbmdzWzBdLCAidGVzdHJlcG8td29ya3RyZWUiKTsKKworCWdpdF9zdHJhcnJheV9mcmVlKCZ3dHMpOworfQorCit2b2lkIHRlc3Rfd29ya3RyZWVfd29ya3RyZWVfX2xpc3RfYmFyZSh2b2lkKQoreworCWdpdF9yZXBvc2l0b3J5ICpyZXBvOworCWdpdF9zdHJhcnJheSB3dHM7CisKKwlyZXBvID0gY2xfZ2l0X3NhbmRib3hfaW5pdCgidGVzdHJlcG8uZ2l0Iik7CisJY2xfZ2l0X3Bhc3MoZ2l0X3dvcmt0cmVlX2xpc3QoJnd0cywgcmVwbykpOworCWNsX2Fzc2VydF9lcXVhbF9pKHd0cy5jb3VudCwgMCk7CisKKwlnaXRfcmVwb3NpdG9yeV9mcmVlKHJlcG8pOworfQorCit2b2lkIHRlc3Rfd29ya3RyZWVfd29ya3RyZWVfX2xpc3Rfd2l0aG91dF93b3JrdHJlZXModm9pZCkKK3sKKwlnaXRfcmVwb3NpdG9yeSAqcmVwbzsKKwlnaXRfc3RyYXJyYXkgd3RzOworCisJcmVwbyA9IGNsX2dpdF9zYW5kYm94X2luaXQoInRlc3RyZXBvMiIpOworCWNsX2dpdF9wYXNzKGdpdF93b3JrdHJlZV9saXN0KCZ3dHMsIHJlcG8pKTsKKwljbF9hc3NlcnRfZXF1YWxfaSh3dHMuY291bnQsIDApOworCisJZ2l0X3JlcG9zaXRvcnlfZnJlZShyZXBvKTsKK30KKwordm9pZCB0ZXN0X3dvcmt0cmVlX3dvcmt0cmVlX19sb29rdXAodm9pZCkKK3sKKwlnaXRfd29ya3RyZWUgKnd0OworCWdpdF9idWYgZ2l0ZGlyX3BhdGggPSBHSVRfQlVGX0lOSVQ7CisKKwljbF9naXRfcGFzcyhnaXRfd29ya3RyZWVfbG9va3VwKCZ3dCwgZml4dHVyZS5yZXBvLCAidGVzdHJlcG8td29ya3RyZWUiKSk7CisKKwljbF9naXRfcGFzcyhnaXRfYnVmX2pvaW5wYXRoKCZnaXRkaXJfcGF0aCwgZml4dHVyZS5yZXBvLT5jb21tb25kaXIsICJ3b3JrdHJlZXMvdGVzdHJlcG8td29ya3RyZWUvIikpOworCisJY2xfYXNzZXJ0X2VxdWFsX3Mod3QtPmdpdGRpcl9wYXRoLCBnaXRkaXJfcGF0aC5wdHIpOworCWNsX2Fzc2VydF9lcXVhbF9zKHd0LT5wYXJlbnRfcGF0aCwgZml4dHVyZS5yZXBvLT53b3JrZGlyKTsKKwljbF9hc3NlcnRfZXF1YWxfcyh3dC0+Z2l0bGlua19wYXRoLCBmaXh0dXJlLndvcmt0cmVlLT5naXRsaW5rKTsKKwljbF9hc3NlcnRfZXF1YWxfcyh3dC0+Y29tbW9uZGlyX3BhdGgsIGZpeHR1cmUucmVwby0+Z2l0ZGlyKTsKKwljbF9hc3NlcnRfZXF1YWxfcyh3dC0+Y29tbW9uZGlyX3BhdGgsIGZpeHR1cmUucmVwby0+Y29tbW9uZGlyKTsKKworCWdpdF9idWZfZnJlZSgmZ2l0ZGlyX3BhdGgpOworCWdpdF93b3JrdHJlZV9mcmVlKHd0KTsKK30KKwordm9pZCB0ZXN0X3dvcmt0cmVlX3dvcmt0cmVlX19sb29rdXBfbm9uZXhpc3RlbnRfd29ya3RyZWUodm9pZCkKK3sKKwlnaXRfd29ya3RyZWUgKnd0OworCisJY2xfZ2l0X2ZhaWwoZ2l0X3dvcmt0cmVlX2xvb2t1cCgmd3QsIGZpeHR1cmUucmVwbywgIm5vbmV4aXN0ZW50IikpOworCWNsX2Fzc2VydF9lcXVhbF9wKHd0LCBOVUxMKTsKK30KKwordm9pZCB0ZXN0X3dvcmt0cmVlX3dvcmt0cmVlX19vcGVuKHZvaWQpCit7CisJZ2l0X3dvcmt0cmVlICp3dDsKKwlnaXRfcmVwb3NpdG9yeSAqcmVwbzsKKworCWNsX2dpdF9wYXNzKGdpdF93b3JrdHJlZV9sb29rdXAoJnd0LCBmaXh0dXJlLnJlcG8sICJ0ZXN0cmVwby13b3JrdHJlZSIpKTsKKworCWNsX2dpdF9wYXNzKGdpdF9yZXBvc2l0b3J5X29wZW5fZnJvbV93b3JrdHJlZSgmcmVwbywgd3QpKTsKKwljbF9hc3NlcnRfZXF1YWxfcyhnaXRfcmVwb3NpdG9yeV93b3JrZGlyKHJlcG8pLAorCQlnaXRfcmVwb3NpdG9yeV93b3JrZGlyKGZpeHR1cmUud29ya3RyZWUpKTsKKworCWdpdF9yZXBvc2l0b3J5X2ZyZWUocmVwbyk7CisJZ2l0X3dvcmt0cmVlX2ZyZWUod3QpOworfQorCit2b2lkIHRlc3Rfd29ya3RyZWVfd29ya3RyZWVfX29wZW5faW52YWxpZF9jb21tb25kaXIodm9pZCkKK3sKKwlnaXRfd29ya3RyZWUgKnd0OworCWdpdF9yZXBvc2l0b3J5ICpyZXBvOworCWdpdF9idWYgYnVmID0gR0lUX0JVRl9JTklULCBwYXRoID0gR0lUX0JVRl9JTklUOworCisJY2xfZ2l0X3Bhc3MoZ2l0X2J1Zl9zZXRzKCZidWYsICIvcGF0aC90by9ub25leGlzdGVudC9jb21tb25kaXIiKSk7CisJY2xfZ2l0X3Bhc3MoZ2l0X2J1Zl9wcmludGYoJnBhdGgsCisJCSAgICAiJXMvd29ya3RyZWVzL3Rlc3RyZXBvLXdvcmt0cmVlL2NvbW1vbmRpciIsCisJCSAgICBmaXh0dXJlLnJlcG8tPmNvbW1vbmRpcikpOworCWNsX2dpdF9wYXNzKGdpdF9mdXRpbHNfd3JpdGVidWZmZXIoJmJ1ZiwgcGF0aC5wdHIsIE9fUkRXUiwgMDY0NCkpOworCisJY2xfZ2l0X3Bhc3MoZ2l0X3dvcmt0cmVlX2xvb2t1cCgmd3QsIGZpeHR1cmUucmVwbywgInRlc3RyZXBvLXdvcmt0cmVlIikpOworCWNsX2dpdF9mYWlsKGdpdF9yZXBvc2l0b3J5X29wZW5fZnJvbV93b3JrdHJlZSgmcmVwbywgd3QpKTsKKworCWdpdF9idWZfZnJlZSgmYnVmKTsKKwlnaXRfYnVmX2ZyZWUoJnBhdGgpOworCWdpdF93b3JrdHJlZV9mcmVlKHd0KTsKK30KKwordm9pZCB0ZXN0X3dvcmt0cmVlX3dvcmt0cmVlX19vcGVuX2ludmFsaWRfZ2l0ZGlyKHZvaWQpCit7CisJZ2l0X3dvcmt0cmVlICp3dDsKKwlnaXRfcmVwb3NpdG9yeSAqcmVwbzsKKwlnaXRfYnVmIGJ1ZiA9IEdJVF9CVUZfSU5JVCwgcGF0aCA9IEdJVF9CVUZfSU5JVDsKKworCWNsX2dpdF9wYXNzKGdpdF9idWZfc2V0cygmYnVmLCAiL3BhdGgvdG8vbm9uZXhpc3RlbnQvZ2l0ZGlyIikpOworCWNsX2dpdF9wYXNzKGdpdF9idWZfcHJpbnRmKCZwYXRoLAorCQkgICAgIiVzL3dvcmt0cmVlcy90ZXN0cmVwby13b3JrdHJlZS9naXRkaXIiLAorCQkgICAgZml4dHVyZS5yZXBvLT5jb21tb25kaXIpKTsKKwljbF9naXRfcGFzcyhnaXRfZnV0aWxzX3dyaXRlYnVmZmVyKCZidWYsIHBhdGgucHRyLCBPX1JEV1IsIDA2NDQpKTsKKworCWNsX2dpdF9wYXNzKGdpdF93b3JrdHJlZV9sb29rdXAoJnd0LCBmaXh0dXJlLnJlcG8sICJ0ZXN0cmVwby13b3JrdHJlZSIpKTsKKwljbF9naXRfZmFpbChnaXRfcmVwb3NpdG9yeV9vcGVuX2Zyb21fd29ya3RyZWUoJnJlcG8sIHd0KSk7CisKKwlnaXRfYnVmX2ZyZWUoJmJ1Zik7CisJZ2l0X2J1Zl9mcmVlKCZwYXRoKTsKKwlnaXRfd29ya3RyZWVfZnJlZSh3dCk7Cit9CisKK3ZvaWQgdGVzdF93b3JrdHJlZV93b3JrdHJlZV9fb3Blbl9pbnZhbGlkX3BhcmVudCh2b2lkKQoreworCWdpdF93b3JrdHJlZSAqd3Q7CisJZ2l0X3JlcG9zaXRvcnkgKnJlcG87CisJZ2l0X2J1ZiBidWYgPSBHSVRfQlVGX0lOSVQ7CisKKwljbF9naXRfcGFzcyhnaXRfYnVmX3NldHMoJmJ1ZiwgIi9wYXRoL3RvL25vbmV4aXN0ZW50L2dpdGRpciIpKTsKKwljbF9naXRfcGFzcyhnaXRfZnV0aWxzX3dyaXRlYnVmZmVyKCZidWYsCisJCSAgICBmaXh0dXJlLndvcmt0cmVlLT5naXRsaW5rLCBPX1JEV1IsIDA2NDQpKTsKKworCWNsX2dpdF9wYXNzKGdpdF93b3JrdHJlZV9sb29rdXAoJnd0LCBmaXh0dXJlLnJlcG8sICJ0ZXN0cmVwby13b3JrdHJlZSIpKTsKKwljbF9naXRfZmFpbChnaXRfcmVwb3NpdG9yeV9vcGVuX2Zyb21fd29ya3RyZWUoJnJlcG8sIHd0KSk7CisKKwlnaXRfYnVmX2ZyZWUoJmJ1Zik7CisJZ2l0X3dvcmt0cmVlX2ZyZWUod3QpOworfQorCit2b2lkIHRlc3Rfd29ya3RyZWVfd29ya3RyZWVfX2luaXQodm9pZCkKK3sKKwlnaXRfd29ya3RyZWUgKnd0OworCWdpdF9yZXBvc2l0b3J5ICpyZXBvOworCWdpdF9yZWZlcmVuY2UgKmJyYW5jaDsKKwlnaXRfYnVmIHBhdGggPSBHSVRfQlVGX0lOSVQ7CisKKwljbF9naXRfcGFzcyhnaXRfYnVmX2pvaW5wYXRoKCZwYXRoLCBmaXh0dXJlLnJlcG8tPndvcmtkaXIsICIuLi93b3JrdHJlZS1uZXciKSk7CisJY2xfZ2l0X3Bhc3MoZ2l0X3dvcmt0cmVlX2FkZCgmd3QsIGZpeHR1cmUucmVwbywgIndvcmt0cmVlLW5ldyIsIHBhdGgucHRyLCBOVUxMKSk7CisKKwkvKiBPcGVuIGFuZCB2ZXJpZnkgY3JlYXRlZCByZXBvICovCisJY2xfZ2l0X3Bhc3MoZ2l0X3JlcG9zaXRvcnlfb3BlbigmcmVwbywgcGF0aC5wdHIpKTsKKwljbF9hc3NlcnQoZ2l0X19zdWZmaXhjbXAoZ2l0X3JlcG9zaXRvcnlfd29ya2RpcihyZXBvKSwgIndvcmt0cmVlLW5ldy8iKSA9PSAwKTsKKwljbF9naXRfcGFzcyhnaXRfYnJhbmNoX2xvb2t1cCgmYnJhbmNoLCByZXBvLCAid29ya3RyZWUtbmV3IiwgR0lUX0JSQU5DSF9MT0NBTCkpOworCisJZ2l0X2J1Zl9mcmVlKCZwYXRoKTsKKwlnaXRfd29ya3RyZWVfZnJlZSh3dCk7CisJZ2l0X3JlZmVyZW5jZV9mcmVlKGJyYW5jaCk7CisJZ2l0X3JlcG9zaXRvcnlfZnJlZShyZXBvKTsKK30KKwordm9pZCB0ZXN0X3dvcmt0cmVlX3dvcmt0cmVlX19hZGRfbG9ja2VkKHZvaWQpCit7CisJZ2l0X3dvcmt0cmVlICp3dDsKKwlnaXRfcmVwb3NpdG9yeSAqcmVwbzsKKwlnaXRfcmVmZXJlbmNlICpicmFuY2g7CisJZ2l0X2J1ZiBwYXRoID0gR0lUX0JVRl9JTklUOworCWdpdF93b3JrdHJlZV9hZGRfb3B0aW9ucyBvcHRzID0gR0lUX1dPUktUUkVFX0FERF9PUFRJT05TX0lOSVQ7CisKKwlvcHRzLmxvY2sgPSAxOworCisJY2xfZ2l0X3Bhc3MoZ2l0X2J1Zl9qb2lucGF0aCgmcGF0aCwgZml4dHVyZS5yZXBvLT53b3JrZGlyLCAiLi4vd29ya3RyZWUtbG9ja2VkIikpOworCWNsX2dpdF9wYXNzKGdpdF93b3JrdHJlZV9hZGQoJnd0LCBmaXh0dXJlLnJlcG8sICJ3b3JrdHJlZS1sb2NrZWQiLCBwYXRoLnB0ciwgJm9wdHMpKTsKKworCS8qIE9wZW4gYW5kIHZlcmlmeSBjcmVhdGVkIHJlcG8gKi8KKwljbF9hc3NlcnQoZ2l0X3dvcmt0cmVlX2lzX2xvY2tlZChOVUxMLCB3dCkpOworCWNsX2dpdF9wYXNzKGdpdF9yZXBvc2l0b3J5X29wZW4oJnJlcG8sIHBhdGgucHRyKSk7CisJY2xfYXNzZXJ0KGdpdF9fc3VmZml4Y21wKGdpdF9yZXBvc2l0b3J5X3dvcmtkaXIocmVwbyksICJ3b3JrdHJlZS1sb2NrZWQvIikgPT0gMCk7CisJY2xfZ2l0X3Bhc3MoZ2l0X2JyYW5jaF9sb29rdXAoJmJyYW5jaCwgcmVwbywgIndvcmt0cmVlLWxvY2tlZCIsIEdJVF9CUkFOQ0hfTE9DQUwpKTsKKworCWdpdF9idWZfZnJlZSgmcGF0aCk7CisJZ2l0X3dvcmt0cmVlX2ZyZWUod3QpOworCWdpdF9yZWZlcmVuY2VfZnJlZShicmFuY2gpOworCWdpdF9yZXBvc2l0b3J5X2ZyZWUocmVwbyk7Cit9CisKK3ZvaWQgdGVzdF93b3JrdHJlZV93b3JrdHJlZV9faW5pdF9leGlzdGluZ19icmFuY2godm9pZCkKK3sKKwlnaXRfcmVmZXJlbmNlICpoZWFkLCAqYnJhbmNoOworCWdpdF9jb21taXQgKmNvbW1pdDsKKwlnaXRfd29ya3RyZWUgKnd0OworCWdpdF9idWYgcGF0aCA9IEdJVF9CVUZfSU5JVDsKKworCWNsX2dpdF9wYXNzKGdpdF9yZXBvc2l0b3J5X2hlYWQoJmhlYWQsIGZpeHR1cmUucmVwbykpOworCWNsX2dpdF9wYXNzKGdpdF9jb21taXRfbG9va3VwKCZjb21taXQsIGZpeHR1cmUucmVwbywgJmhlYWQtPnRhcmdldC5vaWQpKTsKKwljbF9naXRfcGFzcyhnaXRfYnJhbmNoX2NyZWF0ZSgmYnJhbmNoLCBmaXh0dXJlLnJlcG8sICJ3b3JrdHJlZS1uZXciLCBjb21taXQsIGZhbHNlKSk7CisKKwljbF9naXRfcGFzcyhnaXRfYnVmX2pvaW5wYXRoKCZwYXRoLCBmaXh0dXJlLnJlcG8tPndvcmtkaXIsICIuLi93b3JrdHJlZS1uZXciKSk7CisJY2xfZ2l0X2ZhaWwoZ2l0X3dvcmt0cmVlX2FkZCgmd3QsIGZpeHR1cmUucmVwbywgIndvcmt0cmVlLW5ldyIsIHBhdGgucHRyLCBOVUxMKSk7CisKKwlnaXRfYnVmX2ZyZWUoJnBhdGgpOworCWdpdF9jb21taXRfZnJlZShjb21taXQpOworCWdpdF9yZWZlcmVuY2VfZnJlZShoZWFkKTsKKwlnaXRfcmVmZXJlbmNlX2ZyZWUoYnJhbmNoKTsKK30KKwordm9pZCB0ZXN0X3dvcmt0cmVlX3dvcmt0cmVlX19pbml0X2V4aXN0aW5nX3dvcmt0cmVlKHZvaWQpCit7CisJZ2l0X3dvcmt0cmVlICp3dDsKKwlnaXRfYnVmIHBhdGggPSBHSVRfQlVGX0lOSVQ7CisKKwljbF9naXRfcGFzcyhnaXRfYnVmX2pvaW5wYXRoKCZwYXRoLCBmaXh0dXJlLnJlcG8tPndvcmtkaXIsICIuLi93b3JrdHJlZS1uZXciKSk7CisJY2xfZ2l0X2ZhaWwoZ2l0X3dvcmt0cmVlX2FkZCgmd3QsIGZpeHR1cmUucmVwbywgInRlc3RyZXBvLXdvcmt0cmVlIiwgcGF0aC5wdHIsIE5VTEwpKTsKKworCWNsX2dpdF9wYXNzKGdpdF93b3JrdHJlZV9sb29rdXAoJnd0LCBmaXh0dXJlLnJlcG8sICJ0ZXN0cmVwby13b3JrdHJlZSIpKTsKKwljbF9hc3NlcnRfZXF1YWxfcyh3dC0+Z2l0bGlua19wYXRoLCBmaXh0dXJlLndvcmt0cmVlLT5naXRsaW5rKTsKKworCWdpdF9idWZfZnJlZSgmcGF0aCk7CisJZ2l0X3dvcmt0cmVlX2ZyZWUod3QpOworfQorCit2b2lkIHRlc3Rfd29ya3RyZWVfd29ya3RyZWVfX2luaXRfZXhpc3RpbmdfcGF0aCh2b2lkKQoreworCWNvbnN0IGNoYXIgKnd0ZmlsZXNbXSA9IHsgIkhFQUQiLCAiY29tbW9uZGlyIiwgImdpdGRpciIsICJpbmRleCIgfTsKKwlnaXRfd29ya3RyZWUgKnd0OworCWdpdF9idWYgcGF0aCA9IEdJVF9CVUZfSU5JVDsKKwl1bnNpZ25lZCBpOworCisJLyogRGVsZXRlIGZpbGVzIHRvIHZlcmlmeSB0aGV5IGhhdmUgbm90IGJlZW4gY3JlYXRlZCBieQorCSAqIHRoZSBpbml0IGNhbGwgKi8KKwlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRSh3dGZpbGVzKTsgaSsrKSB7CisJCWNsX2dpdF9wYXNzKGdpdF9idWZfam9pbnBhdGgoJnBhdGgsCisJCQkgICAgZml4dHVyZS53b3JrdHJlZS0+Z2l0ZGlyLCB3dGZpbGVzW2ldKSk7CisJCWNsX2dpdF9wYXNzKHBfdW5saW5rKHBhdGgucHRyKSk7CisJfQorCisJY2xfZ2l0X3Bhc3MoZ2l0X2J1Zl9qb2lucGF0aCgmcGF0aCwgZml4dHVyZS5yZXBvLT53b3JrZGlyLCAiLi4vdGVzdHJlcG8td29ya3RyZWUiKSk7CisJY2xfZ2l0X2ZhaWwoZ2l0X3dvcmt0cmVlX2FkZCgmd3QsIGZpeHR1cmUucmVwbywgIndvcmt0cmVlLW5ldyIsIHBhdGgucHRyLCBOVUxMKSk7CisKKwkvKiBWZXJpZnkgZmlsZXMgaGF2ZSBub3QgYmVlbiByZS1jcmVhdGVkICovCisJZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUod3RmaWxlcyk7IGkrKykgeworCQljbF9naXRfcGFzcyhnaXRfYnVmX2pvaW5wYXRoKCZwYXRoLAorCQkJICAgIGZpeHR1cmUud29ya3RyZWUtPmdpdGRpciwgd3RmaWxlc1tpXSkpOworCQljbF9hc3NlcnQoIWdpdF9wYXRoX2V4aXN0cyhwYXRoLnB0cikpOworCX0KKworCWdpdF9idWZfZnJlZSgmcGF0aCk7Cit9CisKK3ZvaWQgdGVzdF93b3JrdHJlZV93b3JrdHJlZV9faW5pdF9zdWJtb2R1bGUodm9pZCkKK3sKKwlnaXRfcmVwb3NpdG9yeSAqcmVwbywgKnNtLCAqd3Q7CisJZ2l0X3dvcmt0cmVlICp3b3JrdHJlZTsKKwlnaXRfYnVmIHBhdGggPSBHSVRfQlVGX0lOSVQ7CisKKwljbGVhbnVwX2ZpeHR1cmVfd29ya3RyZWUoJmZpeHR1cmUpOworCXJlcG8gPSBzZXR1cF9maXh0dXJlX3N1Ym1vZDIoKTsKKworCWNsX2dpdF9wYXNzKGdpdF9idWZfam9pbnBhdGgoJnBhdGgsIHJlcG8tPndvcmtkaXIsICJzbV91bmNoYW5nZWQiKSk7CisJY2xfZ2l0X3Bhc3MoZ2l0X3JlcG9zaXRvcnlfb3Blbigmc20sIHBhdGgucHRyKSk7CisJY2xfZ2l0X3Bhc3MoZ2l0X2J1Zl9qb2lucGF0aCgmcGF0aCwgcmVwby0+d29ya2RpciwgIi4uL3dvcmt0cmVlLyIpKTsKKwljbF9naXRfcGFzcyhnaXRfd29ya3RyZWVfYWRkKCZ3b3JrdHJlZSwgc20sICJyZXBvLXdvcmt0cmVlIiwgcGF0aC5wdHIsIE5VTEwpKTsKKwljbF9naXRfcGFzcyhnaXRfcmVwb3NpdG9yeV9vcGVuX2Zyb21fd29ya3RyZWUoJnd0LCB3b3JrdHJlZSkpOworCisJY2xfZ2l0X3Bhc3MoZ2l0X3BhdGhfcHJldHRpZnlfZGlyKCZwYXRoLCBwYXRoLnB0ciwgTlVMTCkpOworCWNsX2Fzc2VydF9lcXVhbF9zKHBhdGgucHRyLCB3dC0+d29ya2Rpcik7CisJY2xfZ2l0X3Bhc3MoZ2l0X3BhdGhfcHJldHRpZnlfZGlyKCZwYXRoLCBzbS0+Y29tbW9uZGlyLCBOVUxMKSk7CisJY2xfYXNzZXJ0X2VxdWFsX3Moc20tPmNvbW1vbmRpciwgd3QtPmNvbW1vbmRpcik7CisKKwljbF9naXRfcGFzcyhnaXRfYnVmX2pvaW5wYXRoKCZwYXRoLCBzbS0+Z2l0ZGlyLCAid29ya3RyZWVzL3JlcG8td29ya3RyZWUvIikpOworCWNsX2Fzc2VydF9lcXVhbF9zKHBhdGgucHRyLCB3dC0+Z2l0ZGlyKTsKKworCWdpdF9idWZfZnJlZSgmcGF0aCk7CisJZ2l0X3dvcmt0cmVlX2ZyZWUod29ya3RyZWUpOworCWdpdF9yZXBvc2l0b3J5X2ZyZWUoc20pOworCWdpdF9yZXBvc2l0b3J5X2ZyZWUod3QpOworfQorCit2b2lkIHRlc3Rfd29ya3RyZWVfd29ya3RyZWVfX3ZhbGlkYXRlKHZvaWQpCit7CisJZ2l0X3dvcmt0cmVlICp3dDsKKworCWNsX2dpdF9wYXNzKGdpdF93b3JrdHJlZV9sb29rdXAoJnd0LCBmaXh0dXJlLnJlcG8sICJ0ZXN0cmVwby13b3JrdHJlZSIpKTsKKwljbF9naXRfcGFzcyhnaXRfd29ya3RyZWVfdmFsaWRhdGUod3QpKTsKKworCWdpdF93b3JrdHJlZV9mcmVlKHd0KTsKK30KKwordm9pZCB0ZXN0X3dvcmt0cmVlX3dvcmt0cmVlX192YWxpZGF0ZV9pbnZhbGlkX2NvbW1vbmRpcih2b2lkKQoreworCWdpdF93b3JrdHJlZSAqd3Q7CisKKwljbF9naXRfcGFzcyhnaXRfd29ya3RyZWVfbG9va3VwKCZ3dCwgZml4dHVyZS5yZXBvLCAidGVzdHJlcG8td29ya3RyZWUiKSk7CisJZ2l0X19mcmVlKHd0LT5jb21tb25kaXJfcGF0aCk7CisJd3QtPmNvbW1vbmRpcl9wYXRoID0gIi9wYXRoL3RvL2ludmFsaWQvY29tbW9uZGlyIjsKKworCWNsX2dpdF9mYWlsKGdpdF93b3JrdHJlZV92YWxpZGF0ZSh3dCkpOworCisJd3QtPmNvbW1vbmRpcl9wYXRoID0gTlVMTDsKKwlnaXRfd29ya3RyZWVfZnJlZSh3dCk7Cit9CisKK3ZvaWQgdGVzdF93b3JrdHJlZV93b3JrdHJlZV9fdmFsaWRhdGVfaW52YWxpZF9naXRkaXIodm9pZCkKK3sKKwlnaXRfd29ya3RyZWUgKnd0OworCisJY2xfZ2l0X3Bhc3MoZ2l0X3dvcmt0cmVlX2xvb2t1cCgmd3QsIGZpeHR1cmUucmVwbywgInRlc3RyZXBvLXdvcmt0cmVlIikpOworCWdpdF9fZnJlZSh3dC0+Z2l0ZGlyX3BhdGgpOworCXd0LT5naXRkaXJfcGF0aCA9ICIvcGF0aC90by9pbnZhbGlkL2dpdGRpciI7CisJY2xfZ2l0X2ZhaWwoZ2l0X3dvcmt0cmVlX3ZhbGlkYXRlKHd0KSk7CisKKwl3dC0+Z2l0ZGlyX3BhdGggPSBOVUxMOworCWdpdF93b3JrdHJlZV9mcmVlKHd0KTsKK30KKwordm9pZCB0ZXN0X3dvcmt0cmVlX3dvcmt0cmVlX192YWxpZGF0ZV9pbnZhbGlkX3BhcmVudCh2b2lkKQoreworCWdpdF93b3JrdHJlZSAqd3Q7CisKKwljbF9naXRfcGFzcyhnaXRfd29ya3RyZWVfbG9va3VwKCZ3dCwgZml4dHVyZS5yZXBvLCAidGVzdHJlcG8td29ya3RyZWUiKSk7CisJZ2l0X19mcmVlKHd0LT5wYXJlbnRfcGF0aCk7CisJd3QtPnBhcmVudF9wYXRoID0gIi9wYXRoL3RvL2ludmFsaWQvcGFyZW50IjsKKwljbF9naXRfZmFpbChnaXRfd29ya3RyZWVfdmFsaWRhdGUod3QpKTsKKworCXd0LT5wYXJlbnRfcGF0aCA9IE5VTEw7CisJZ2l0X3dvcmt0cmVlX2ZyZWUod3QpOworfQorCit2b2lkIHRlc3Rfd29ya3RyZWVfd29ya3RyZWVfX2xvY2tfd2l0aF9yZWFzb24odm9pZCkKK3sKKwlnaXRfd29ya3RyZWUgKnd0OworCWdpdF9idWYgcmVhc29uID0gR0lUX0JVRl9JTklUOworCisJY2xfZ2l0X3Bhc3MoZ2l0X3dvcmt0cmVlX2xvb2t1cCgmd3QsIGZpeHR1cmUucmVwbywgInRlc3RyZXBvLXdvcmt0cmVlIikpOworCisJY2xfYXNzZXJ0KCFnaXRfd29ya3RyZWVfaXNfbG9ja2VkKE5VTEwsIHd0KSk7CisJY2xfZ2l0X3Bhc3MoZ2l0X3dvcmt0cmVlX2xvY2sod3QsICJiZWNhdXNlIikpOworCWNsX2Fzc2VydChnaXRfd29ya3RyZWVfaXNfbG9ja2VkKCZyZWFzb24sIHd0KSA+IDApOworCWNsX2Fzc2VydF9lcXVhbF9zKHJlYXNvbi5wdHIsICJiZWNhdXNlIik7CisJY2xfYXNzZXJ0KHd0LT5sb2NrZWQpOworCisJZ2l0X2J1Zl9mcmVlKCZyZWFzb24pOworCWdpdF93b3JrdHJlZV9mcmVlKHd0KTsKK30KKwordm9pZCB0ZXN0X3dvcmt0cmVlX3dvcmt0cmVlX19sb2NrX3dpdGhvdXRfcmVhc29uKHZvaWQpCit7CisJZ2l0X3dvcmt0cmVlICp3dDsKKwlnaXRfYnVmIHJlYXNvbiA9IEdJVF9CVUZfSU5JVDsKKworCWNsX2dpdF9wYXNzKGdpdF93b3JrdHJlZV9sb29rdXAoJnd0LCBmaXh0dXJlLnJlcG8sICJ0ZXN0cmVwby13b3JrdHJlZSIpKTsKKworCWNsX2Fzc2VydCghZ2l0X3dvcmt0cmVlX2lzX2xvY2tlZChOVUxMLCB3dCkpOworCWNsX2dpdF9wYXNzKGdpdF93b3JrdHJlZV9sb2NrKHd0LCBOVUxMKSk7CisJY2xfYXNzZXJ0KGdpdF93b3JrdHJlZV9pc19sb2NrZWQoJnJlYXNvbiwgd3QpID4gMCk7CisJY2xfYXNzZXJ0X2VxdWFsX2kocmVhc29uLnNpemUsIDApOworCWNsX2Fzc2VydCh3dC0+bG9ja2VkKTsKKworCWdpdF9idWZfZnJlZSgmcmVhc29uKTsKKwlnaXRfd29ya3RyZWVfZnJlZSh3dCk7Cit9CisKK3ZvaWQgdGVzdF93b3JrdHJlZV93b3JrdHJlZV9fdW5sb2NrX3VubG9ja2VkX3dvcmt0cmVlKHZvaWQpCit7CisJZ2l0X3dvcmt0cmVlICp3dDsKKworCWNsX2dpdF9wYXNzKGdpdF93b3JrdHJlZV9sb29rdXAoJnd0LCBmaXh0dXJlLnJlcG8sICJ0ZXN0cmVwby13b3JrdHJlZSIpKTsKKwljbF9hc3NlcnQoIWdpdF93b3JrdHJlZV9pc19sb2NrZWQoTlVMTCwgd3QpKTsKKwljbF9hc3NlcnQoZ2l0X3dvcmt0cmVlX3VubG9jayh3dCkgPT0gMCk7CisJY2xfYXNzZXJ0KCF3dC0+bG9ja2VkKTsKKworCWdpdF93b3JrdHJlZV9mcmVlKHd0KTsKK30KKwordm9pZCB0ZXN0X3dvcmt0cmVlX3dvcmt0cmVlX191bmxvY2tfbG9ja2VkX3dvcmt0cmVlKHZvaWQpCit7CisJZ2l0X3dvcmt0cmVlICp3dDsKKworCWNsX2dpdF9wYXNzKGdpdF93b3JrdHJlZV9sb29rdXAoJnd0LCBmaXh0dXJlLnJlcG8sICJ0ZXN0cmVwby13b3JrdHJlZSIpKTsKKwljbF9naXRfcGFzcyhnaXRfd29ya3RyZWVfbG9jayh3dCwgTlVMTCkpOworCWNsX2Fzc2VydChnaXRfd29ya3RyZWVfaXNfbG9ja2VkKE5VTEwsIHd0KSk7CisJY2xfZ2l0X3Bhc3MoZ2l0X3dvcmt0cmVlX3VubG9jayh3dCkpOworCWNsX2Fzc2VydCghd3QtPmxvY2tlZCk7CisKKwlnaXRfd29ya3RyZWVfZnJlZSh3dCk7Cit9CisKK3ZvaWQgdGVzdF93b3JrdHJlZV93b3JrdHJlZV9fcHJ1bmVfd2l0aG91dF9vcHRzX2ZhaWxzKHZvaWQpCit7CisJZ2l0X3dvcmt0cmVlICp3dDsKKwlnaXRfcmVwb3NpdG9yeSAqcmVwbzsKKworCWNsX2dpdF9wYXNzKGdpdF93b3JrdHJlZV9sb29rdXAoJnd0LCBmaXh0dXJlLnJlcG8sICJ0ZXN0cmVwby13b3JrdHJlZSIpKTsKKwljbF9naXRfZmFpbChnaXRfd29ya3RyZWVfcHJ1bmUod3QsIE5VTEwpKTsKKworCS8qIEFzc2VydCB0aGUgcmVwb3NpdG9yeSBpcyBzdGlsbCB2YWxpZCAqLworCWNsX2dpdF9wYXNzKGdpdF9yZXBvc2l0b3J5X29wZW5fZnJvbV93b3JrdHJlZSgmcmVwbywgd3QpKTsKKworCWdpdF93b3JrdHJlZV9mcmVlKHd0KTsKKwlnaXRfcmVwb3NpdG9yeV9mcmVlKHJlcG8pOworfQorCit2b2lkIHRlc3Rfd29ya3RyZWVfd29ya3RyZWVfX3BydW5lX3ZhbGlkKHZvaWQpCit7CisJZ2l0X3dvcmt0cmVlX3BydW5lX29wdGlvbnMgb3B0cyA9IEdJVF9XT1JLVFJFRV9QUlVORV9PUFRJT05TX0lOSVQ7CisJZ2l0X3dvcmt0cmVlICp3dDsKKwlnaXRfcmVwb3NpdG9yeSAqcmVwbzsKKworCW9wdHMuZmxhZ3MgPSBHSVRfV09SS1RSRUVfUFJVTkVfVkFMSUQ7CisKKwljbF9naXRfcGFzcyhnaXRfd29ya3RyZWVfbG9va3VwKCZ3dCwgZml4dHVyZS5yZXBvLCAidGVzdHJlcG8td29ya3RyZWUiKSk7CisJY2xfZ2l0X3Bhc3MoZ2l0X3dvcmt0cmVlX3BydW5lKHd0LCAmb3B0cykpOworCisJLyogQXNzZXJ0IHRoZSByZXBvc2l0b3J5IGlzIG5vdCB2YWxpZCBhbnltb3JlICovCisJY2xfZ2l0X2ZhaWwoZ2l0X3JlcG9zaXRvcnlfb3Blbl9mcm9tX3dvcmt0cmVlKCZyZXBvLCB3dCkpOworCisJZ2l0X3dvcmt0cmVlX2ZyZWUod3QpOworCWdpdF9yZXBvc2l0b3J5X2ZyZWUocmVwbyk7Cit9CisKK3ZvaWQgdGVzdF93b3JrdHJlZV93b3JrdHJlZV9fcHJ1bmVfbG9ja2VkKHZvaWQpCit7CisJZ2l0X3dvcmt0cmVlX3BydW5lX29wdGlvbnMgb3B0cyA9IEdJVF9XT1JLVFJFRV9QUlVORV9PUFRJT05TX0lOSVQ7CisJZ2l0X3dvcmt0cmVlICp3dDsKKwlnaXRfcmVwb3NpdG9yeSAqcmVwbzsKKworCWNsX2dpdF9wYXNzKGdpdF93b3JrdHJlZV9sb29rdXAoJnd0LCBmaXh0dXJlLnJlcG8sICJ0ZXN0cmVwby13b3JrdHJlZSIpKTsKKwljbF9naXRfcGFzcyhnaXRfd29ya3RyZWVfbG9jayh3dCwgTlVMTCkpOworCisJb3B0cy5mbGFncyA9IEdJVF9XT1JLVFJFRV9QUlVORV9WQUxJRDsKKwljbF9naXRfZmFpbChnaXRfd29ya3RyZWVfcHJ1bmUod3QsICZvcHRzKSk7CisJLyogQXNzZXJ0IHRoZSByZXBvc2l0b3J5IGlzIHN0aWxsIHZhbGlkICovCisJY2xfZ2l0X3Bhc3MoZ2l0X3JlcG9zaXRvcnlfb3Blbl9mcm9tX3dvcmt0cmVlKCZyZXBvLCB3dCkpOworCisJb3B0cy5mbGFncyA9IEdJVF9XT1JLVFJFRV9QUlVORV9WQUxJRHxHSVRfV09SS1RSRUVfUFJVTkVfTE9DS0VEOworCWNsX2dpdF9wYXNzKGdpdF93b3JrdHJlZV9wcnVuZSh3dCwgJm9wdHMpKTsKKworCWdpdF93b3JrdHJlZV9mcmVlKHd0KTsKKwlnaXRfcmVwb3NpdG9yeV9mcmVlKHJlcG8pOworfQorCit2b2lkIHRlc3Rfd29ya3RyZWVfd29ya3RyZWVfX3BydW5lX2dpdGRpcl9vbmx5KHZvaWQpCit7CisJZ2l0X3dvcmt0cmVlX3BydW5lX29wdGlvbnMgb3B0cyA9IEdJVF9XT1JLVFJFRV9QUlVORV9PUFRJT05TX0lOSVQ7CisJZ2l0X3dvcmt0cmVlICp3dDsKKworCW9wdHMuZmxhZ3MgPSBHSVRfV09SS1RSRUVfUFJVTkVfVkFMSUQ7CisJY2xfZ2l0X3Bhc3MoZ2l0X3dvcmt0cmVlX2xvb2t1cCgmd3QsIGZpeHR1cmUucmVwbywgInRlc3RyZXBvLXdvcmt0cmVlIikpOworCWNsX2dpdF9wYXNzKGdpdF93b3JrdHJlZV9wcnVuZSh3dCwgJm9wdHMpKTsKKworCWNsX2Fzc2VydCghZ2l0X3BhdGhfZXhpc3RzKHd0LT5naXRkaXJfcGF0aCkpOworCWNsX2Fzc2VydChnaXRfcGF0aF9leGlzdHMod3QtPmdpdGxpbmtfcGF0aCkpOworCisJZ2l0X3dvcmt0cmVlX2ZyZWUod3QpOworfQorCit2b2lkIHRlc3Rfd29ya3RyZWVfd29ya3RyZWVfX3BydW5lX3dvcmt0cmVlKHZvaWQpCit7CisJZ2l0X3dvcmt0cmVlX3BydW5lX29wdGlvbnMgb3B0cyA9IEdJVF9XT1JLVFJFRV9QUlVORV9PUFRJT05TX0lOSVQ7CisJZ2l0X3dvcmt0cmVlICp3dDsKKworCW9wdHMuZmxhZ3MgPSBHSVRfV09SS1RSRUVfUFJVTkVfVkFMSUR8R0lUX1dPUktUUkVFX1BSVU5FX1dPUktJTkdfVFJFRTsKKworCWNsX2dpdF9wYXNzKGdpdF93b3JrdHJlZV9sb29rdXAoJnd0LCBmaXh0dXJlLnJlcG8sICJ0ZXN0cmVwby13b3JrdHJlZSIpKTsKKwljbF9naXRfcGFzcyhnaXRfd29ya3RyZWVfcHJ1bmUod3QsICZvcHRzKSk7CisKKwljbF9hc3NlcnQoIWdpdF9wYXRoX2V4aXN0cyh3dC0+Z2l0ZGlyX3BhdGgpKTsKKwljbF9hc3NlcnQoIWdpdF9wYXRoX2V4aXN0cyh3dC0+Z2l0bGlua19wYXRoKSk7CisKKwlnaXRfd29ya3RyZWVfZnJlZSh3dCk7Cit9CisKK3N0YXRpYyBpbnQgcmVhZF9oZWFkX3JlZihnaXRfcmVwb3NpdG9yeSAqcmVwbywgY29uc3QgY2hhciAqcGF0aCwgdm9pZCAqcGF5bG9hZCkKK3sKKwlnaXRfdmVjdG9yICpyZWZzID0gKGdpdF92ZWN0b3IgKikgcGF5bG9hZDsKKwlnaXRfcmVmZXJlbmNlICpoZWFkOworCisJR0lUX1VOVVNFRChyZXBvKTsKKworCWNsX2dpdF9wYXNzKGdpdF9yZWZlcmVuY2VfX3JlYWRfaGVhZCgmaGVhZCwgcmVwbywgcGF0aCkpOworCisJZ2l0X3ZlY3Rvcl9pbnNlcnQocmVmcywgaGVhZCk7CisKKwlyZXR1cm4gMDsKK30KKwordm9pZCB0ZXN0X3dvcmt0cmVlX3dvcmt0cmVlX19mb3JlYWNoX2hlYWRfZ2l2ZXNfc2FtZV9yZXN1bHRzX2luX3d0X2FuZF9yZXBvKHZvaWQpCit7CisJZ2l0X3ZlY3RvciByZXBvX3JlZnMgPSBHSVRfVkVDVE9SX0lOSVQsIHdvcmt0cmVlX3JlZnMgPSBHSVRfVkVDVE9SX0lOSVQ7CisJZ2l0X3JlZmVyZW5jZSAqaGVhZHNbMl07CisJc2l6ZV90IGk7CisKKwljbF9naXRfcGFzcyhnaXRfcmVmZXJlbmNlX2xvb2t1cCgmaGVhZHNbMF0sIGZpeHR1cmUucmVwbywgR0lUX0hFQURfRklMRSkpOworCWNsX2dpdF9wYXNzKGdpdF9yZWZlcmVuY2VfbG9va3VwKCZoZWFkc1sxXSwgZml4dHVyZS53b3JrdHJlZSwgR0lUX0hFQURfRklMRSkpOworCisJY2xfZ2l0X3Bhc3MoZ2l0X3JlcG9zaXRvcnlfZm9yZWFjaF9oZWFkKGZpeHR1cmUucmVwbywgcmVhZF9oZWFkX3JlZiwgJnJlcG9fcmVmcykpOworCWNsX2dpdF9wYXNzKGdpdF9yZXBvc2l0b3J5X2ZvcmVhY2hfaGVhZChmaXh0dXJlLndvcmt0cmVlLCByZWFkX2hlYWRfcmVmLCAmd29ya3RyZWVfcmVmcykpOworCisJY2xfYXNzZXJ0X2VxdWFsX2kocmVwb19yZWZzLmxlbmd0aCwgQVJSQVlfU0laRShoZWFkcykpOworCWNsX2Fzc2VydF9lcXVhbF9pKHdvcmt0cmVlX3JlZnMubGVuZ3RoLCBBUlJBWV9TSVpFKGhlYWRzKSk7CisKKwlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShoZWFkcyk7IGkrKykgeworCQljbF9hc3NlcnRfZXF1YWxfcyhoZWFkc1tpXS0+bmFtZSwgKChnaXRfcmVmZXJlbmNlICopIHJlcG9fcmVmcy5jb250ZW50c1tpXSktPm5hbWUpOworCQljbF9hc3NlcnRfZXF1YWxfcyhoZWFkc1tpXS0+bmFtZSwgKChnaXRfcmVmZXJlbmNlICopIHJlcG9fcmVmcy5jb250ZW50c1tpXSktPm5hbWUpOworCQljbF9hc3NlcnRfZXF1YWxfcyhoZWFkc1tpXS0+bmFtZSwgKChnaXRfcmVmZXJlbmNlICopIHdvcmt0cmVlX3JlZnMuY29udGVudHNbaV0pLT5uYW1lKTsKKworCQlnaXRfcmVmZXJlbmNlX2ZyZWUoaGVhZHNbaV0pOworCQlnaXRfcmVmZXJlbmNlX2ZyZWUocmVwb19yZWZzLmNvbnRlbnRzW2ldKTsKKwkJZ2l0X3JlZmVyZW5jZV9mcmVlKHdvcmt0cmVlX3JlZnMuY29udGVudHNbaV0pOworCX0KKworCWdpdF92ZWN0b3JfZnJlZSgmcmVwb19yZWZzKTsKKwlnaXRfdmVjdG9yX2ZyZWUoJndvcmt0cmVlX3JlZnMpOworfQpkaWZmIC0tZ2l0IGEvdGVzdHMvd29ya3RyZWUvd29ya3RyZWVfaGVscGVycy5jIGIvdGVzdHMvd29ya3RyZWUvd29ya3RyZWVfaGVscGVycy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjZkNGNkYmEKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy93b3JrdHJlZS93b3JrdHJlZV9oZWxwZXJzLmMKQEAgLTAsMCArMSwzMCBAQAorI2luY2x1ZGUgImNsYXJfbGliZ2l0Mi5oIgorI2luY2x1ZGUgIndvcmt0cmVlX2hlbHBlcnMuaCIKKwordm9pZCBjbGVhbnVwX2ZpeHR1cmVfd29ya3RyZWUod29ya3RyZWVfZml4dHVyZSAqZml4dHVyZSkKK3sKKwlpZiAoIWZpeHR1cmUpCisJCXJldHVybjsKKworCWlmIChmaXh0dXJlLT5yZXBvKSB7CisJCWdpdF9yZXBvc2l0b3J5X2ZyZWUoZml4dHVyZS0+cmVwbyk7CisJCWZpeHR1cmUtPnJlcG8gPSBOVUxMOworCX0KKwlpZiAoZml4dHVyZS0+d29ya3RyZWUpIHsKKwkJZ2l0X3JlcG9zaXRvcnlfZnJlZShmaXh0dXJlLT53b3JrdHJlZSk7CisJCWZpeHR1cmUtPndvcmt0cmVlID0gTlVMTDsKKwl9CisKKwlpZiAoZml4dHVyZS0+cmVwb25hbWUpCisJCWNsX2ZpeHR1cmVfY2xlYW51cChmaXh0dXJlLT5yZXBvbmFtZSk7CisJaWYgKGZpeHR1cmUtPndvcmt0cmVlbmFtZSkKKwkJY2xfZml4dHVyZV9jbGVhbnVwKGZpeHR1cmUtPndvcmt0cmVlbmFtZSk7Cit9CisKK3ZvaWQgc2V0dXBfZml4dHVyZV93b3JrdHJlZSh3b3JrdHJlZV9maXh0dXJlICpmaXh0dXJlKQoreworCWlmIChmaXh0dXJlLT5yZXBvbmFtZSkKKwkJZml4dHVyZS0+cmVwbyA9IGNsX2dpdF9zYW5kYm94X2luaXQoZml4dHVyZS0+cmVwb25hbWUpOworCWlmIChmaXh0dXJlLT53b3JrdHJlZW5hbWUpCisJCWZpeHR1cmUtPndvcmt0cmVlID0gY2xfZ2l0X3NhbmRib3hfaW5pdChmaXh0dXJlLT53b3JrdHJlZW5hbWUpOworfQpkaWZmIC0tZ2l0IGEvdGVzdHMvd29ya3RyZWUvd29ya3RyZWVfaGVscGVycy5oIGIvdGVzdHMvd29ya3RyZWUvd29ya3RyZWVfaGVscGVycy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjM1ZWE5ZWQKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy93b3JrdHJlZS93b3JrdHJlZV9oZWxwZXJzLmgKQEAgLTAsMCArMSwxMSBAQAordHlwZWRlZiBzdHJ1Y3QgeworCWNvbnN0IGNoYXIgKnJlcG9uYW1lOworCWNvbnN0IGNoYXIgKndvcmt0cmVlbmFtZTsKKwlnaXRfcmVwb3NpdG9yeSAqcmVwbzsKKwlnaXRfcmVwb3NpdG9yeSAqd29ya3RyZWU7Cit9IHdvcmt0cmVlX2ZpeHR1cmU7CisKKyNkZWZpbmUgV09SS1RSRUVfRklYVFVSRV9JTklUKHJlcG8sIHdvcmt0cmVlKSB7IChyZXBvKSwgKHdvcmt0cmVlKSwgTlVMTCwgTlVMTCB9CisKK3ZvaWQgY2xlYW51cF9maXh0dXJlX3dvcmt0cmVlKHdvcmt0cmVlX2ZpeHR1cmUgKmZpeHR1cmUpOwordm9pZCBzZXR1cF9maXh0dXJlX3dvcmt0cmVlKHdvcmt0cmVlX2ZpeHR1cmUgKmZpeHR1cmUpOwo=