From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mga12.intel.com (mga12.intel.com [192.55.52.136]) by gabe.freedesktop.org (Postfix) with ESMTPS id 0D8476E89D for ; Fri, 29 Nov 2019 09:37:16 +0000 (UTC) From: =?UTF-8?q?Zbigniew=20Kempczy=C5=84ski?= Date: Fri, 29 Nov 2019 10:36:53 +0100 Message-Id: <20191129093653.7392-1-zbigniew.kempczynski@intel.com> MIME-Version: 1.0 Subject: [igt-dev] [PATCH i-g-t] tests/gem_render_copy: Add software tiling / detiling support List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Errors-To: igt-dev-bounces@lists.freedesktop.org Sender: "igt-dev" To: igt-dev@lists.freedesktop.org List-ID: T2xkZXIgR0VOcyBoYXZlIG1tYXBhYmxlIEdHVFQgd2hpY2ggZG9lcyBidWZmZXIgdGlsaW5nIC8g ZGV0YWxpbmcKYXV0b21hdGljYWxseS4gTmV3ZXIgR0VOcyBoYXZlIGxvb3NlcyB0aGlzIHBvc3Np YmlsaXR5IHNvIHNvZnR3YXJlCnRpbGluZyAvIGRldGlsaW5nIGlzIHJlcXVpcmVkLgoKSGVhdnkg Y29kZSByZWZhY3RvcmluZyB3YXMgZG9uZSB0byBhbGxvdyBjb25maWd1cmUgc3BlY2lmaWMgdGls ZSBidWZmZXIKb3BlcmF0aW9ucyByZWdhcmRpbmcgdG8gR0VOeCBnZW5lcmF0aW9uLgoKU2lnbmVk LW9mZi1ieTogWmJpZ25pZXcgS2VtcGN6ecWEc2tpIDx6Ymlnbmlldy5rZW1wY3p5bnNraUBpbnRl bC5jb20+CkNjOiBDaHJpcyBXaWxzb24gPGNocmlzQGNocmlzLXdpbHNvbi5jby51az4KQ2M6IElt cmUgRGVhayA8aW1yZS5kZWFrQGludGVsLmNvbT4KQ2M6IEthdGFyenluYSBEZWMgPGthdGFyenlu YS5kZWNAaW50ZWwuY29tPgotLS0KIHRlc3RzL2k5MTUvZ2VtX3JlbmRlcl9jb3B5LmMgfCA0OTEg KysrKysrKysrKysrKysrKysrKysrKysrKysrKy0tLS0tLS0KIDEgZmlsZSBjaGFuZ2VkLCA0MDMg aW5zZXJ0aW9ucygrKSwgODggZGVsZXRpb25zKC0pCgpkaWZmIC0tZ2l0IGEvdGVzdHMvaTkxNS9n ZW1fcmVuZGVyX2NvcHkuYyBiL3Rlc3RzL2k5MTUvZ2VtX3JlbmRlcl9jb3B5LmMKaW5kZXggNjdi ZTA3OWMuLmNiZDYxNmE3IDEwMDY0NAotLS0gYS90ZXN0cy9pOTE1L2dlbV9yZW5kZXJfY29weS5j CisrKyBiL3Rlc3RzL2k5MTUvZ2VtX3JlbmRlcl9jb3B5LmMKQEAgLTUzLDE2ICs1MywxMTkgQEAg SUdUX1RFU1RfREVTQ1JJUFRJT04oIkJhc2ljIHRlc3QgZm9yIHRoZSByZW5kZXJfY29weSgpIGZ1 bmN0aW9uLiIpOwogI2RlZmluZSBXSURUSCA1MTIKICNkZWZpbmUgSEVJR0hUIDUxMgogCitzdHJ1 Y3QgZ2VuX2Zvcm1hdDsKKwogdHlwZWRlZiBzdHJ1Y3QgewogCWludCBkcm1fZmQ7CiAJdWludDMy X3QgZGV2aWQ7CiAJZHJtX2ludGVsX2J1Zm1nciAqYnVmbWdyOwogCXN0cnVjdCBpbnRlbF9iYXRj aGJ1ZmZlciAqYmF0Y2g7CiAJaWd0X3JlbmRlcl9jb3B5ZnVuY190IHJlbmRlcl9jb3B5OworCXN0 cnVjdCBnZW5fZm9ybWF0ICpmb3JtYXQ7CiB9IGRhdGFfdDsKIHN0YXRpYyBpbnQgb3B0X2R1bXBf cG5nID0gZmFsc2U7CiBzdGF0aWMgaW50IGNoZWNrX2FsbF9waXhlbHMgPSBmYWxzZTsKIAordHlw ZWRlZiB2b2lkICgqZm5fY29weSkoZGF0YV90ICosIHN0cnVjdCBpZ3RfYnVmICosIHVpbnQzMl90 ICopOworc3RhdGljIHZvaWQgY29weV9saW5lYXJfdG9fZ3R0KGRhdGFfdCAqLCBzdHJ1Y3QgaWd0 X2J1ZiAqLCB1aW50MzJfdCAqKTsKK3N0YXRpYyB2b2lkIGNvcHlfbGluZWFyX3RvX3djKGRhdGFf dCAqLCBzdHJ1Y3QgaWd0X2J1ZiAqLCB1aW50MzJfdCAqKTsKK3N0YXRpYyB2b2lkIGNvcHlfbGlu ZWFyX3RvX2NwdShkYXRhX3QgKiwgc3RydWN0IGlndF9idWYgKiwgdWludDMyX3QgKik7CitzdGF0 aWMgdm9pZCBjb3B5X2xpbmVhcl90b194KGRhdGFfdCAqLCBzdHJ1Y3QgaWd0X2J1ZiAqLCB1aW50 MzJfdCAqKTsKK3N0YXRpYyB2b2lkIGNvcHlfbGluZWFyX3RvX3koZGF0YV90ICosIHN0cnVjdCBp Z3RfYnVmICosIHVpbnQzMl90ICopOworc3RhdGljIHZvaWQgY29weV9saW5lYXJfdG9feWYoZGF0 YV90ICosIHN0cnVjdCBpZ3RfYnVmICosIHVpbnQzMl90ICopOworc3RhdGljIHZvaWQgY29weV9n dHRfdG9fbGluZWFyKGRhdGFfdCAqLCBzdHJ1Y3QgaWd0X2J1ZiAqLCB1aW50MzJfdCAqKTsKK3N0 YXRpYyB2b2lkIGNvcHlfd2NfdG9fbGluZWFyKGRhdGFfdCAqLCBzdHJ1Y3QgaWd0X2J1ZiAqLCB1 aW50MzJfdCAqKTsKK3N0YXRpYyB2b2lkIGNvcHlfY3B1X3RvX2xpbmVhcihkYXRhX3QgKiwgc3Ry dWN0IGlndF9idWYgKiwgdWludDMyX3QgKik7CitzdGF0aWMgdm9pZCBjb3B5X3hfdG9fbGluZWFy KGRhdGFfdCAqLCBzdHJ1Y3QgaWd0X2J1ZiAqLCB1aW50MzJfdCAqKTsKK3N0YXRpYyB2b2lkIGNv cHlfeV90b19saW5lYXIoZGF0YV90ICosIHN0cnVjdCBpZ3RfYnVmICosIHVpbnQzMl90ICopOwor c3RhdGljIHZvaWQgY29weV95Zl90b19saW5lYXIoZGF0YV90ICosIHN0cnVjdCBpZ3RfYnVmICos IHVpbnQzMl90ICopOworCisjZGVmaW5lIFRJTEVfTk9ORSAgICgxIDw8IEk5MTVfVElMSU5HX05P TkUpCisjZGVmaW5lIFRJTEVfWCAgICAgICgxIDw8IEk5MTVfVElMSU5HX1gpCisjZGVmaW5lIFRJ TEVfWSAgICAgICgxIDw8IEk5MTVfVElMSU5HX1kpCisjZGVmaW5lIFRJTEVfWWYgICAgICgxIDw8 IEk5MTVfVElMSU5HX1lmKQorI2RlZmluZSBUSUxFX1lzICAgICAoMSA8PCBJOTE1X1RJTElOR19Z cykKKworc3RydWN0IGdlbl9mb3JtYXQgeworCWludCBnZW5fc3RhcnQ7CisJaW50IGdlbl9lbmQ7 CisJdWludDMyX3Qgc3VwcG9ydGVkX3RpbGVzOworCXVpbnQzMl90IGh3X3RpbGVzOworCWZuX2Nv cHkgbGluZWFyX3RvOworCWZuX2NvcHkgbGluZWFyX3RvX3g7CisJZm5fY29weSBsaW5lYXJfdG9f eTsKKwlmbl9jb3B5IGxpbmVhcl90b195ZjsKKwlmbl9jb3B5IGxpbmVhcl90b195czsKKwlmbl9j b3B5IHRvX2xpbmVhcjsKKwlmbl9jb3B5IHhfdG9fbGluZWFyOworCWZuX2NvcHkgeV90b19saW5l YXI7CisJZm5fY29weSB5Zl90b19saW5lYXI7CisJZm5fY29weSB5c190b19saW5lYXI7Cit9Owor CitzdHJ1Y3QgZ2VuX2Zvcm1hdCBnZW5fZm9ybWF0c1tdID0geworCS8qIEdlbmVyYXRpb25zIDAg LSA4ICovCisJeyAuZ2VuX3N0YXJ0ICAgICAgICAgPSAwLAorCSAgLmdlbl9lbmQgICAgICAgICAg ID0gOCwKKwkgIC5zdXBwb3J0ZWRfdGlsZXMgICA9IFRJTEVfTk9ORSB8IFRJTEVfWCB8IFRJTEVf WSwKKwkgIC5od190aWxlcyAgICAgICAgICA9IFRJTEVfWCB8IFRJTEVfWSwKKwkgIC5saW5lYXJf dG8gICAgICAgICA9IGNvcHlfbGluZWFyX3RvX2NwdSwKKwkgIC5saW5lYXJfdG9feCAgICAgICA9 IGNvcHlfbGluZWFyX3RvX2d0dCwKKwkgIC5saW5lYXJfdG9feSAgICAgICA9IGNvcHlfbGluZWFy X3RvX2d0dCwKKwkgIC50b19saW5lYXIgICAgICAgICA9IGNvcHlfY3B1X3RvX2xpbmVhciwKKwkg IC54X3RvX2xpbmVhciAgICAgICA9IGNvcHlfZ3R0X3RvX2xpbmVhciwKKwkgIC55X3RvX2xpbmVh ciAgICAgICA9IGNvcHlfZ3R0X3RvX2xpbmVhciwKKwl9LAorCS8qIEdlbmVyYXRpb25zIDkgLSAx MSAqLworCXsgLmdlbl9zdGFydCAgICAgICAgID0gOSwKKwkgIC5nZW5fZW5kICAgICAgICAgICA9 IDExLAorCSAgLnN1cHBvcnRlZF90aWxlcyAgID0gVElMRV9OT05FIHwgVElMRV9YIHwgVElMRV9Z IHwgVElMRV9ZZiwKKwkgIC5od190aWxlcyAgICAgICAgICA9IFRJTEVfWCB8IFRJTEVfWSwKKwkg IC5saW5lYXJfdG8gICAgICAgICA9IGNvcHlfbGluZWFyX3RvX2NwdSwKKwkgIC5saW5lYXJfdG9f eCAgICAgICA9IGNvcHlfbGluZWFyX3RvX2d0dCwKKwkgIC5saW5lYXJfdG9feSAgICAgICA9IGNv cHlfbGluZWFyX3RvX2d0dCwKKwkgIC5saW5lYXJfdG9feWYgICAgICA9IGNvcHlfbGluZWFyX3Rv X3lmLAorCSAgLnRvX2xpbmVhciAgICAgICAgID0gY29weV9jcHVfdG9fbGluZWFyLAorCSAgLnhf dG9fbGluZWFyICAgICAgID0gY29weV9ndHRfdG9fbGluZWFyLAorCSAgLnlfdG9fbGluZWFyICAg ICAgID0gY29weV9ndHRfdG9fbGluZWFyLAorCSAgLnlmX3RvX2xpbmVhciAgICAgID0gY29weV95 Zl90b19saW5lYXIsCisJfSwKKwkvKiBHZW5lcmF0aW9uIDEyICovCisJeyAuZ2VuX3N0YXJ0ICAg ICAgICAgPSAxMiwKKwkgIC5nZW5fZW5kICAgICAgICAgICA9IDEyLAorCSAgLnN1cHBvcnRlZF90 aWxlcyAgID0gVElMRV9OT05FIHwgVElMRV9YIHwgVElMRV9ZIHwgVElMRV9ZZiB8IFRJTEVfWXMs CisJICAubGluZWFyX3RvICAgICAgICAgPSBjb3B5X2xpbmVhcl90b193YywKKwkgIC5saW5lYXJf dG9feCAgICAgICA9IGNvcHlfbGluZWFyX3RvX3gsCisJICAubGluZWFyX3RvX3kgICAgICAgPSBj b3B5X2xpbmVhcl90b195LAorCSAgLmxpbmVhcl90b195ZiAgICAgID0gY29weV9saW5lYXJfdG9f eWYsCisJICAubGluZWFyX3RvX3lzICAgICAgPSBOVUxMLCAgICAgICAgICAgICAgIC8qIHRvIGJl IGltcGxlbWVudGVkICovCisJICAudG9fbGluZWFyICAgICAgICAgPSBjb3B5X3djX3RvX2xpbmVh ciwKKwkgIC54X3RvX2xpbmVhciAgICAgICA9IGNvcHlfeF90b19saW5lYXIsCisJICAueV90b19s aW5lYXIgICAgICAgPSBjb3B5X3lfdG9fbGluZWFyLAorCSAgLnlmX3RvX2xpbmVhciAgICAgID0g Y29weV95Zl90b19saW5lYXIsCisJICAueXNfdG9fbGluZWFyICAgICAgPSBOVUxMLCAgICAgICAg ICAgICAgIC8qIHRvIGJlIGltcGxlbWVudGVkICovCisJfSwKK307CisKK3N0YXRpYyBzdHJ1Y3Qg Z2VuX2Zvcm1hdCAqZ2V0X2dlbl9mb3JtYXQoaW50IGdlbmVyYXRpb24pCit7CisJc3RydWN0IGdl bl9mb3JtYXQgKmZtdCA9IE5VTEw7CisKKwlmb3IgKGludCBpID0gMDsgaSA8IEFSUkFZX1NJWkUo Z2VuX2Zvcm1hdHMpOyBpKyspIHsKKwkJaWYgKGdlbmVyYXRpb24gPj0gZ2VuX2Zvcm1hdHNbaV0u Z2VuX3N0YXJ0ICYmCisJCSAgICBnZW5lcmF0aW9uIDw9IGdlbl9mb3JtYXRzW2ldLmdlbl9lbmQp IHsKKwkJCWZtdCA9ICZnZW5fZm9ybWF0c1tpXTsKKwkJCWlndF9kZWJ1ZygiZ2VuZXJhdGlvbjog JWQsIHN1cHBvcnRlZCB0aWxlczogMHglMDJ4XG4iLAorCQkJCSAgZ2VuZXJhdGlvbiwgZm10LT5z dXBwb3J0ZWRfdGlsZXMpOworCQkJYnJlYWs7CisJCX0KKwl9CisKKwlpZ3RfYXNzZXJ0KGZtdCk7 CisKKwlyZXR1cm4gZm10OworfQorCiBzdGF0aWMgY29uc3QgY2hhciAqbWFrZV9maWxlbmFtZShj b25zdCBjaGFyICpmaWxlbmFtZSkKIHsKIAlzdGF0aWMgY2hhciBidWZbNjRdOwpAQCAtNzIsNiAr MTc1LDYyIEBAIHN0YXRpYyBjb25zdCBjaGFyICptYWtlX2ZpbGVuYW1lKGNvbnN0IGNoYXIgKmZp bGVuYW1lKQogCXJldHVybiBidWY7CiB9CiAKK3N0YXRpYyB2b2lkICphbGxvY19hbGlnbmVkKHVp bnQ2NF90IHNpemUpCit7CisJdm9pZCAqcDsKKworCWlndF9hc3NlcnRfZXEocG9zaXhfbWVtYWxp Z24oJnAsIDE2LCBzaXplKSwgMCk7CisKKwlyZXR1cm4gcDsKK30KKworc3RhdGljIHZvaWQgKnhf cHRyKHZvaWQgKnB0ciwKKwkJICAgdW5zaWduZWQgaW50IHgsIHVuc2lnbmVkIGludCB5LAorCQkg ICB1bnNpZ25lZCBpbnQgc3RyaWRlLCB1bnNpZ25lZCBpbnQgY3BwKQoreworCWNvbnN0IGludCB0 aWxlX3dpZHRoID0gNTEyOworCWNvbnN0IGludCB0aWxlX2hlaWdodCA9IDg7CisJY29uc3QgaW50 IHRpbGVfc2l6ZSA9IHRpbGVfd2lkdGggKiB0aWxlX2hlaWdodDsKKwlpbnQgdGlsZV94LCB0aWxl X3k7CisJaW50IG9mZnNldF94LCBvZmZzZXRfeSwgcG9zOworCisJeCAqPSBjcHA7CisJdGlsZV94 ID0geCAvIHRpbGVfd2lkdGg7CisJdGlsZV95ID0geSAvIHRpbGVfaGVpZ2h0OworCW9mZnNldF94 ID0gKHRpbGVfeCAqIHRpbGVfc2l6ZSk7CisJb2Zmc2V0X3kgPSAodGlsZV95ICogc3RyaWRlICog dGlsZV9oZWlnaHQpOworCisJcG9zID0gb2Zmc2V0X3kgKyBvZmZzZXRfeCArCisJCQkoeSAlIHRp bGVfaGVpZ2h0ICogdGlsZV93aWR0aCkgKyAoeCAlIHRpbGVfd2lkdGgpOworCisJcmV0dXJuIHB0 ciArIHBvczsKK30KKworc3RhdGljIHZvaWQgKnlfcHRyKHZvaWQgKnB0ciwKKwkJICAgdW5zaWdu ZWQgaW50IHgsIHVuc2lnbmVkIGludCB5LAorCQkgICB1bnNpZ25lZCBpbnQgc3RyaWRlLCB1bnNp Z25lZCBpbnQgY3BwKQoreworCWNvbnN0IGludCB0aWxlX3dpZHRoID0gMTI4OworCWNvbnN0IGlu dCB0aWxlX2hlaWdodCA9IDMyOworCWNvbnN0IGludCBvd29yZHMgPSAxNjsKKwljb25zdCBpbnQg dGlsZV9zaXplID0gdGlsZV93aWR0aCAqIHRpbGVfaGVpZ2h0OworCWludCB0aWxlX3gsIHRpbGVf eTsKKwlpbnQgb2Zmc2V0X3gsIG9mZnNldF95LCBwb3M7CisJaW50IHNoaWZ0X3gsIHNoaWZ0X3k7 CisKKwl4ICo9IGNwcDsKKwl0aWxlX3ggPSB4IC8gdGlsZV93aWR0aDsKKwl0aWxlX3kgPSB5IC8g dGlsZV9oZWlnaHQ7CisJb2Zmc2V0X3ggPSB0aWxlX3ggKiB0aWxlX3NpemU7CisJb2Zmc2V0X3kg PSB0aWxlX3kgKiBzdHJpZGUgKiB0aWxlX2hlaWdodDsKKwlzaGlmdF94ID0geCAlIG93b3JkcyAr ICh4ICUgdGlsZV93aWR0aCkgLyBvd29yZHMgKiB0aWxlX3dpZHRoICogY3BwOworCXNoaWZ0X3kg PSB5ICUgdGlsZV9oZWlnaHQgKiBvd29yZHM7CisKKwlwb3MgPSBvZmZzZXRfeSArIG9mZnNldF94 ICsgc2hpZnRfeCArIHNoaWZ0X3k7CisKKwlyZXR1cm4gcHRyICsgcG9zOworfQorCiBzdGF0aWMg dm9pZCAqeWZfcHRyKHZvaWQgKnB0ciwKIAkJICAgIHVuc2lnbmVkIGludCB4LCB1bnNpZ25lZCBp bnQgeSwKIAkJICAgIHVuc2lnbmVkIGludCBzdHJpZGUsIHVuc2lnbmVkIGludCBjcHApCkBAIC0x MDIsMTEgKzI2MSwzOSBAQCBzdGF0aWMgdm9pZCAqeWZfcHRyKHZvaWQgKnB0ciwKIAkJKCgoeSAm IH4weDFmKSA+PiA1KSAqIHJvd19zaXplKTsKIH0KIAotc3RhdGljIHZvaWQgY29weV9saW5lYXJf dG9feWYoZGF0YV90ICpkYXRhLCBzdHJ1Y3QgaWd0X2J1ZiAqYnVmLAotCQkJICAgICAgY29uc3Qg dWludDMyX3QgKmxpbmVhcikKKwordHlwZWRlZiB2b2lkICooKmZuX3B0cikodm9pZCAqLCB1bnNp Z25lZCBpbnQsIHVuc2lnbmVkIGludCwKKwkJCXVuc2lnbmVkIGludCwgdW5zaWduZWQgaW50KTsK K3N0YXRpYyBmbl9wdHIgX19nZXRfdGlsZV9mbl9wdHIoaW50IHRpbGluZykKK3sKKwlmbl9wdHIg Zm4gPSBOVUxMOworCisJc3dpdGNoICh0aWxpbmcpIHsKKwljYXNlIEk5MTVfVElMSU5HX1g6CisJ CWZuID0geF9wdHI7CisJCWJyZWFrOworCWNhc2UgSTkxNV9USUxJTkdfWToKKwkJZm4gPSB5X3B0 cjsKKwkJYnJlYWs7CisJY2FzZSBJOTE1X1RJTElOR19ZZjoKKwkJZm4gPSB5Zl9wdHI7CisJCWJy ZWFrOworCWNhc2UgSTkxNV9USUxJTkdfWXM6CisJCS8qIFRvIGJlIGltcGxlbWVudGVkICovCisJ CWJyZWFrOworCX0KKworCWlndF9hc3NlcnRfZihmbiwgIkNhbid0IGZpbmQgdGlsZSBmdW5jdGlv biBmb3IgdGlsaW5nOiAlZFxuIiwgdGlsaW5nKTsKKworCXJldHVybiBmbjsKK30KKworc3RhdGlj IHZvaWQgX19jb3B5X2xpbmVhcl90byhkYXRhX3QgKmRhdGEsIHN0cnVjdCBpZ3RfYnVmICpidWYs CisJCQkgICAgIGNvbnN0IHVpbnQzMl90ICpsaW5lYXIsIGludCB0aWxpbmcpCiB7CiAJaW50IGhl aWdodCA9IGlndF9idWZfaGVpZ2h0KGJ1Zik7CiAJaW50IHdpZHRoID0gaWd0X2J1Zl93aWR0aChi dWYpOworCWZuX3B0ciBmbiA9IF9fZ2V0X3RpbGVfZm5fcHRyKHRpbGluZyk7CiAJdm9pZCAqbWFw OwogCiAJZ2VtX3NldF9kb21haW4oZGF0YS0+ZHJtX2ZkLCBidWYtPmJvLT5oYW5kbGUsCkBAIC0x MTYsOCArMzAzLDggQEAgc3RhdGljIHZvaWQgY29weV9saW5lYXJfdG9feWYoZGF0YV90ICpkYXRh LCBzdHJ1Y3QgaWd0X2J1ZiAqYnVmLAogCiAJZm9yIChpbnQgeSA9IDA7IHkgPCBoZWlnaHQ7IHkr KykgewogCQlmb3IgKGludCB4ID0gMDsgeCA8IHdpZHRoOyB4KyspIHsKLQkJCXVpbnQzMl90ICpw dHIgPSB5Zl9wdHIobWFwLCB4LCB5LAotCQkJCQkgICAgICAgYnVmLT5zdHJpZGUsIGJ1Zi0+YnBw IC8gOCk7CisJCQl1aW50MzJfdCAqcHRyID0gZm4obWFwLCB4LCB5LAorCQkJCQkgICBidWYtPnN0 cmlkZSwgYnVmLT5icHAgLyA4KTsKIAogCQkJKnB0ciA9IGxpbmVhclt5ICogd2lkdGggKyB4XTsK IAkJfQpAQCAtMTI2LDExICszMTMsMzAgQEAgc3RhdGljIHZvaWQgY29weV9saW5lYXJfdG9feWYo ZGF0YV90ICpkYXRhLCBzdHJ1Y3QgaWd0X2J1ZiAqYnVmLAogCW11bm1hcChtYXAsIGJ1Zi0+Ym8t PnNpemUpOwogfQogCi1zdGF0aWMgdm9pZCBjb3B5X3lmX3RvX2xpbmVhcihkYXRhX3QgKmRhdGEs IHN0cnVjdCBpZ3RfYnVmICpidWYsCitzdGF0aWMgdm9pZCBjb3B5X2xpbmVhcl90b194KGRhdGFf dCAqZGF0YSwgc3RydWN0IGlndF9idWYgKmJ1ZiwKKwkJCSAgICAgIHVpbnQzMl90ICpsaW5lYXIp Cit7CisJX19jb3B5X2xpbmVhcl90byhkYXRhLCBidWYsIGxpbmVhciwgSTkxNV9USUxJTkdfWCk7 Cit9CisKK3N0YXRpYyB2b2lkIGNvcHlfbGluZWFyX3RvX3koZGF0YV90ICpkYXRhLCBzdHJ1Y3Qg aWd0X2J1ZiAqYnVmLAogCQkJICAgICAgdWludDMyX3QgKmxpbmVhcikKK3sKKwlfX2NvcHlfbGlu ZWFyX3RvKGRhdGEsIGJ1ZiwgbGluZWFyLCBJOTE1X1RJTElOR19ZKTsKK30KKworc3RhdGljIHZv aWQgY29weV9saW5lYXJfdG9feWYoZGF0YV90ICpkYXRhLCBzdHJ1Y3QgaWd0X2J1ZiAqYnVmLAor CQkJICAgICAgdWludDMyX3QgKmxpbmVhcikKK3sKKwlfX2NvcHlfbGluZWFyX3RvKGRhdGEsIGJ1 ZiwgbGluZWFyLCBJOTE1X1RJTElOR19ZZik7Cit9CisKK3N0YXRpYyB2b2lkIF9fY29weV90b19s aW5lYXIoZGF0YV90ICpkYXRhLCBzdHJ1Y3QgaWd0X2J1ZiAqYnVmLAorCQkJICAgICB1aW50MzJf dCAqbGluZWFyLCBpbnQgdGlsaW5nKQogewogCWludCBoZWlnaHQgPSBpZ3RfYnVmX2hlaWdodChi dWYpOwogCWludCB3aWR0aCA9IGlndF9idWZfd2lkdGgoYnVmKTsKKwlmbl9wdHIgZm4gPSBfX2dl dF90aWxlX2ZuX3B0cih0aWxpbmcpOwogCXZvaWQgKm1hcDsKIAogCWdlbV9zZXRfZG9tYWluKGRh dGEtPmRybV9mZCwgYnVmLT5iby0+aGFuZGxlLApAQCAtMTQwLDggKzM0Niw4IEBAIHN0YXRpYyB2 b2lkIGNvcHlfeWZfdG9fbGluZWFyKGRhdGFfdCAqZGF0YSwgc3RydWN0IGlndF9idWYgKmJ1ZiwK IAogCWZvciAoaW50IHkgPSAwOyB5IDwgaGVpZ2h0OyB5KyspIHsKIAkJZm9yIChpbnQgeCA9IDA7 IHggPCB3aWR0aDsgeCsrKSB7Ci0JCQl1aW50MzJfdCAqcHRyID0geWZfcHRyKG1hcCwgeCwgeSwK LQkJCQkJICAgICAgIGJ1Zi0+c3RyaWRlLCBidWYtPmJwcCAvIDgpOworCQkJdWludDMyX3QgKnB0 ciA9IGZuKG1hcCwgeCwgeSwKKwkJCQkJICAgYnVmLT5zdHJpZGUsIGJ1Zi0+YnBwIC8gOCk7CiAK IAkJCWxpbmVhclt5ICogd2lkdGggKyB4XSA9ICpwdHI7CiAJCX0KQEAgLTE1MCw4ICszNTYsMjYg QEAgc3RhdGljIHZvaWQgY29weV95Zl90b19saW5lYXIoZGF0YV90ICpkYXRhLCBzdHJ1Y3QgaWd0 X2J1ZiAqYnVmLAogCW11bm1hcChtYXAsIGJ1Zi0+Ym8tPnNpemUpOwogfQogCitzdGF0aWMgdm9p ZCBjb3B5X3lmX3RvX2xpbmVhcihkYXRhX3QgKmRhdGEsIHN0cnVjdCBpZ3RfYnVmICpidWYsCisJ CQkgICAgICB1aW50MzJfdCAqbGluZWFyKQoreworCV9fY29weV90b19saW5lYXIoZGF0YSwgYnVm LCBsaW5lYXIsIEk5MTVfVElMSU5HX1lmKTsKK30KKworc3RhdGljIHZvaWQgY29weV94X3RvX2xp bmVhcihkYXRhX3QgKmRhdGEsIHN0cnVjdCBpZ3RfYnVmICpidWYsCisJCQkgICAgICB1aW50MzJf dCAqbGluZWFyKQoreworCV9fY29weV90b19saW5lYXIoZGF0YSwgYnVmLCBsaW5lYXIsIEk5MTVf VElMSU5HX1gpOworfQorCitzdGF0aWMgdm9pZCBjb3B5X3lfdG9fbGluZWFyKGRhdGFfdCAqZGF0 YSwgc3RydWN0IGlndF9idWYgKmJ1ZiwKKwkJCSAgICAgIHVpbnQzMl90ICpsaW5lYXIpCit7CisJ X19jb3B5X3RvX2xpbmVhcihkYXRhLCBidWYsIGxpbmVhciwgSTkxNV9USUxJTkdfWSk7Cit9CisK IHN0YXRpYyB2b2lkIGNvcHlfbGluZWFyX3RvX2d0dChkYXRhX3QgKmRhdGEsIHN0cnVjdCBpZ3Rf YnVmICpidWYsCi0JCQkgICAgICAgY29uc3QgdWludDMyX3QgKmxpbmVhcikKKwkJCSAgICAgICB1 aW50MzJfdCAqbGluZWFyKQogewogCXZvaWQgKm1hcDsKIApAQCAtMTc1LDYgKzM5OSwzOCBAQCBz dGF0aWMgdm9pZCBjb3B5X2d0dF90b19saW5lYXIoZGF0YV90ICpkYXRhLCBzdHJ1Y3QgaWd0X2J1 ZiAqYnVmLAogCQkgICAgICAgSTkxNV9HRU1fRE9NQUlOX0dUVCwgMCk7CiAKIAltYXAgPSBnZW1f bW1hcF9fZ3R0KGRhdGEtPmRybV9mZCwgYnVmLT5iby0+aGFuZGxlLAorCQkJICAgYnVmLT5iby0+ c2l6ZSwgUFJPVF9SRUFEKTsKKworCWlndF9tZW1jcHlfZnJvbV93YyhsaW5lYXIsIG1hcCwgYnVm LT5iby0+c2l6ZSk7CisKKwltdW5tYXAobWFwLCBidWYtPmJvLT5zaXplKTsKK30KKworc3RhdGlj IHZvaWQgY29weV9saW5lYXJfdG9fd2MoZGF0YV90ICpkYXRhLCBzdHJ1Y3QgaWd0X2J1ZiAqYnVm LAorCQkJICAgICAgdWludDMyX3QgKmxpbmVhcikKK3sKKwl2b2lkICptYXA7CisKKwlnZW1fc2V0 X2RvbWFpbihkYXRhLT5kcm1fZmQsIGJ1Zi0+Ym8tPmhhbmRsZSwKKwkJICAgICAgIEk5MTVfR0VN X0RPTUFJTl9HVFQsIEk5MTVfR0VNX0RPTUFJTl9HVFQpOworCisJbWFwID0gZ2VtX21tYXBfX3dj KGRhdGEtPmRybV9mZCwgYnVmLT5iby0+aGFuZGxlLCAwLAorCQkJICAgYnVmLT5iby0+c2l6ZSwg UFJPVF9SRUFEIHwgUFJPVF9XUklURSk7CisKKwltZW1jcHkobWFwLCBsaW5lYXIsIGJ1Zi0+Ym8t PnNpemUpOworCisJbXVubWFwKG1hcCwgYnVmLT5iby0+c2l6ZSk7Cit9CisKK3N0YXRpYyB2b2lk IGNvcHlfd2NfdG9fbGluZWFyKGRhdGFfdCAqZGF0YSwgc3RydWN0IGlndF9idWYgKmJ1ZiwKKwkJ CSAgICAgIHVpbnQzMl90ICpsaW5lYXIpCit7CisJdm9pZCAqbWFwOworCisJZ2VtX3NldF9kb21h aW4oZGF0YS0+ZHJtX2ZkLCBidWYtPmJvLT5oYW5kbGUsCisJCSAgICAgICBJOTE1X0dFTV9ET01B SU5fR1RULCAwKTsKKworCW1hcCA9IGdlbV9tbWFwX193YyhkYXRhLT5kcm1fZmQsIGJ1Zi0+Ym8t PmhhbmRsZSwgMCwKIAkJCSAgICBidWYtPmJvLT5zaXplLCBQUk9UX1JFQUQpOwogCiAJaWd0X21l bWNweV9mcm9tX3djKGxpbmVhciwgbWFwLCBidWYtPmJvLT5zaXplKTsKQEAgLTE4MiwxOSArNDM4 LDkwIEBAIHN0YXRpYyB2b2lkIGNvcHlfZ3R0X3RvX2xpbmVhcihkYXRhX3QgKmRhdGEsIHN0cnVj dCBpZ3RfYnVmICpidWYsCiAJbXVubWFwKG1hcCwgYnVmLT5iby0+c2l6ZSk7CiB9CiAKLXN0YXRp YyB2b2lkICpsaW5lYXJfY29weShkYXRhX3QgKmRhdGEsIHN0cnVjdCBpZ3RfYnVmICpidWYpCitz dGF0aWMgdm9pZCBjb3B5X2xpbmVhcl90b19jcHUoZGF0YV90ICpkYXRhLCBzdHJ1Y3QgaWd0X2J1 ZiAqYnVmLAorCQkJICAgICAgIHVpbnQzMl90ICpsaW5lYXIpCiB7Ci0Jdm9pZCAqbGluZWFyOwor CXZvaWQgKm1hcDsKKworCWdlbV9zZXRfZG9tYWluKGRhdGEtPmRybV9mZCwgYnVmLT5iby0+aGFu ZGxlLAorCQkgICAgICAgSTkxNV9HRU1fRE9NQUlOX0NQVSwgSTkxNV9HRU1fRE9NQUlOX0NQVSk7 CiAKLQkvKiAxNkIgYWxpZ25tZW50IGFsbG93cyB0byBwb3RlbnRpYWxseSBtYWtlIHVzZSBvZiBT U0U0IGZvciBjb3B5aW5nICovCi0JaWd0X2Fzc2VydF9lcShwb3NpeF9tZW1hbGlnbigmbGluZWFy LCAxNiwgYnVmLT5iby0+c2l6ZSksIDApOworCW1hcCA9IGdlbV9tbWFwX19jcHUoZGF0YS0+ZHJt X2ZkLCBidWYtPmJvLT5oYW5kbGUsIDAsCisJCQkgICAgYnVmLT5iby0+c2l6ZSwgUFJPVF9SRUFE IHwgUFJPVF9XUklURSk7CiAKLQlpZiAoYnVmLT50aWxpbmcgPT0gSTkxNV9USUxJTkdfWWYpCi0J CWNvcHlfeWZfdG9fbGluZWFyKGRhdGEsIGJ1ZiwgbGluZWFyKTsKLQllbHNlCi0JCWNvcHlfZ3R0 X3RvX2xpbmVhcihkYXRhLCBidWYsIGxpbmVhcik7CisJbWVtY3B5KG1hcCwgbGluZWFyLCBidWYt PmJvLT5zaXplKTsKIAotCXJldHVybiBsaW5lYXI7CisJbXVubWFwKG1hcCwgYnVmLT5iby0+c2l6 ZSk7Cit9CisKK3N0YXRpYyB2b2lkIGNvcHlfY3B1X3RvX2xpbmVhcihkYXRhX3QgKmRhdGEsIHN0 cnVjdCBpZ3RfYnVmICpidWYsCisJCQkgICAgICAgdWludDMyX3QgKmxpbmVhcikKK3sKKwl2b2lk ICptYXA7CisKKwlnZW1fc2V0X2RvbWFpbihkYXRhLT5kcm1fZmQsIGJ1Zi0+Ym8tPmhhbmRsZSwK KwkJICAgICAgIEk5MTVfR0VNX0RPTUFJTl9DUFUsIDApOworCisJbWFwID0gZ2VtX21tYXBfX2Nw dShkYXRhLT5kcm1fZmQsIGJ1Zi0+Ym8tPmhhbmRsZSwgMCwKKwkJCSAgICBidWYtPmJvLT5zaXpl LCBQUk9UX1JFQUQpOworCisJbWVtY3B5KGxpbmVhciwgbWFwLCBidWYtPmJvLT5zaXplKTsKKwor CW11bm1hcChtYXAsIGJ1Zi0+Ym8tPnNpemUpOworfQorCitzdGF0aWMgdm9pZCBjb3B5X2JvX3Rv X2xpbmVhcihkYXRhX3QgKmRhdGEsIHN0cnVjdCBpZ3RfYnVmICpidWYsCisJCQkgICAgICB1aW50 MzJfdCAqbGluZWFyKQoreworCXN3aXRjaCAoYnVmLT50aWxpbmcpIHsKKwljYXNlIEk5MTVfVElM SU5HX05PTkU6CisJCWlndF9hc3NlcnQoZGF0YS0+Zm9ybWF0LT50b19saW5lYXIpOworCQlkYXRh LT5mb3JtYXQtPnRvX2xpbmVhcihkYXRhLCBidWYsIGxpbmVhcik7CisJCWJyZWFrOworCWNhc2Ug STkxNV9USUxJTkdfWDoKKwkJaWd0X2Fzc2VydChkYXRhLT5mb3JtYXQtPnhfdG9fbGluZWFyKTsK KwkJZGF0YS0+Zm9ybWF0LT54X3RvX2xpbmVhcihkYXRhLCBidWYsIGxpbmVhcik7CisJCWJyZWFr OworCWNhc2UgSTkxNV9USUxJTkdfWToKKwkJaWd0X2Fzc2VydChkYXRhLT5mb3JtYXQtPnlfdG9f bGluZWFyKTsKKwkJZGF0YS0+Zm9ybWF0LT55X3RvX2xpbmVhcihkYXRhLCBidWYsIGxpbmVhcik7 CisJCWJyZWFrOworCWNhc2UgSTkxNV9USUxJTkdfWWY6CisJCWlndF9hc3NlcnQoZGF0YS0+Zm9y bWF0LT55Zl90b19saW5lYXIpOworCQlkYXRhLT5mb3JtYXQtPnlmX3RvX2xpbmVhcihkYXRhLCBi dWYsIGxpbmVhcik7CisJCWJyZWFrOworCWNhc2UgSTkxNV9USUxJTkdfWXM6CisJCWlndF9hc3Nl cnQoZGF0YS0+Zm9ybWF0LT55c190b19saW5lYXIpOworCQlkYXRhLT5mb3JtYXQtPnlzX3RvX2xp bmVhcihkYXRhLCBidWYsIGxpbmVhcik7CisJCWJyZWFrOworCX0KK30KKworc3RhdGljIHZvaWQg Y29weV9saW5lYXJfdG9fYm8oZGF0YV90ICpkYXRhLCBzdHJ1Y3QgaWd0X2J1ZiAqYnVmLAorCQkJ ICAgICAgdWludDMyX3QgKmxpbmVhcikKK3sKKwlzd2l0Y2ggKGJ1Zi0+dGlsaW5nKSB7CisJY2Fz ZSBJOTE1X1RJTElOR19OT05FOgorCQlpZ3RfYXNzZXJ0KGRhdGEtPmZvcm1hdC0+bGluZWFyX3Rv KTsKKwkJZGF0YS0+Zm9ybWF0LT5saW5lYXJfdG8oZGF0YSwgYnVmLCBsaW5lYXIpOworCQlicmVh azsKKwljYXNlIEk5MTVfVElMSU5HX1g6CisJCWlndF9hc3NlcnQoZGF0YS0+Zm9ybWF0LT5saW5l YXJfdG9feCk7CisJCWRhdGEtPmZvcm1hdC0+bGluZWFyX3RvX3goZGF0YSwgYnVmLCBsaW5lYXIp OworCQlicmVhazsKKwljYXNlIEk5MTVfVElMSU5HX1k6CisJCWlndF9hc3NlcnQoZGF0YS0+Zm9y bWF0LT5saW5lYXJfdG9feSk7CisJCWRhdGEtPmZvcm1hdC0+bGluZWFyX3RvX3koZGF0YSwgYnVm LCBsaW5lYXIpOworCQlicmVhazsKKwljYXNlIEk5MTVfVElMSU5HX1lmOgorCQlpZ3RfYXNzZXJ0 KGRhdGEtPmZvcm1hdC0+bGluZWFyX3RvX3lmKTsKKwkJZGF0YS0+Zm9ybWF0LT5saW5lYXJfdG9f eWYoZGF0YSwgYnVmLCBsaW5lYXIpOworCQlicmVhazsKKwljYXNlIEk5MTVfVElMSU5HX1lzOgor CQlpZ3RfYXNzZXJ0KGRhdGEtPmZvcm1hdC0+bGluZWFyX3RvX3lzKTsKKwkJZGF0YS0+Zm9ybWF0 LT5saW5lYXJfdG9feXMoZGF0YSwgYnVmLCBsaW5lYXIpOworCQlicmVhazsKKwl9CiB9CiAKIHN0 YXRpYyB2b2lkIHNjcmF0Y2hfYnVmX3dyaXRlX3RvX3BuZyhkYXRhX3QgKmRhdGEsIHN0cnVjdCBp Z3RfYnVmICpidWYsCkBAIC0yMDQsNyArNTMxLDggQEAgc3RhdGljIHZvaWQgc2NyYXRjaF9idWZf d3JpdGVfdG9fcG5nKGRhdGFfdCAqZGF0YSwgc3RydWN0IGlndF9idWYgKmJ1ZiwKIAljYWlyb19z dGF0dXNfdCByZXQ7CiAJdm9pZCAqbGluZWFyOwogCi0JbGluZWFyID0gbGluZWFyX2NvcHkoZGF0 YSwgYnVmKTsKKwlsaW5lYXIgPSBhbGxvY19hbGlnbmVkKGJ1Zi0+Ym8tPnNpemUpOworCWNvcHlf Ym9fdG9fbGluZWFyKGRhdGEsIGJ1ZiwgbGluZWFyKTsKIAogCXN1cmZhY2UgPSBjYWlyb19pbWFn ZV9zdXJmYWNlX2NyZWF0ZV9mb3JfZGF0YShsaW5lYXIsCiAJCQkJCQkgICAgICBDQUlST19GT1JN QVRfUkdCMjQsCkBAIC0yNTAsMTIgKzU3OCwxMiBAQCBzdGF0aWMgdm9pZCAqbGluZWFyX2NvcHlf YXV4KGRhdGFfdCAqZGF0YSwgc3RydWN0IGlndF9idWYgKmJ1ZikKIAlpbnQgYXV4X3NpemUgPSBz Y3JhdGNoX2J1Zl9hdXhfd2lkdGgoZGF0YS0+ZGV2aWQsIGJ1ZikgKgogCQlzY3JhdGNoX2J1Zl9h dXhfaGVpZ2h0KGRhdGEtPmRldmlkLCBidWYpOwogCi0JaWd0X2Fzc2VydF9lcShwb3NpeF9tZW1h bGlnbigmbGluZWFyLCAxNiwgYXV4X3NpemUpLCAwKTsKKwlsaW5lYXIgPSBhbGxvY19hbGlnbmVk KGF1eF9zaXplKTsKIAogCWdlbV9zZXRfZG9tYWluKGRhdGEtPmRybV9mZCwgYnVmLT5iby0+aGFu ZGxlLAogCQkgICAgICAgSTkxNV9HRU1fRE9NQUlOX0dUVCwgMCk7CiAKLQltYXAgPSBnZW1fbW1h cF9fZ3R0KGRhdGEtPmRybV9mZCwgYnVmLT5iby0+aGFuZGxlLAorCW1hcCA9IGdlbV9tbWFwX193 YyhkYXRhLT5kcm1fZmQsIGJ1Zi0+Ym8tPmhhbmRsZSwgMCwKIAkJCSAgICBidWYtPmJvLT5zaXpl LCBQUk9UX1JFQUQpOwogCiAJaWd0X21lbWNweV9mcm9tX3djKGxpbmVhciwgbWFwICsgYnVmLT5h dXgub2Zmc2V0LCBhdXhfc2l6ZSk7CkBAIC0yOTcsNyArNjI1LDcgQEAgc3RhdGljIHZvaWQgc2Ny YXRjaF9idWZfZHJhd19wYXR0ZXJuKGRhdGFfdCAqZGF0YSwgc3RydWN0IGlndF9idWYgKmJ1ZiwK IAljYWlyb190ICpjcjsKIAl2b2lkICpsaW5lYXI7CiAKLQlsaW5lYXIgPSBsaW5lYXJfY29weShk YXRhLCBidWYpOworCWxpbmVhciA9IGFsbG9jX2FsaWduZWQoYnVmLT5iby0+c2l6ZSk7CiAKIAlz dXJmYWNlID0gY2Fpcm9faW1hZ2Vfc3VyZmFjZV9jcmVhdGVfZm9yX2RhdGEobGluZWFyLAogCQkJ CQkJICAgICAgQ0FJUk9fRk9STUFUX1JHQjI0LApAQCAtMzM4LDEwICs2NjYsNyBAQCBzdGF0aWMg dm9pZCBzY3JhdGNoX2J1Zl9kcmF3X3BhdHRlcm4oZGF0YV90ICpkYXRhLCBzdHJ1Y3QgaWd0X2J1 ZiAqYnVmLAogCiAJY2Fpcm9fc3VyZmFjZV9kZXN0cm95KHN1cmZhY2UpOwogCi0JaWYgKGJ1Zi0+ dGlsaW5nID09IEk5MTVfVElMSU5HX1lmKQotCQljb3B5X2xpbmVhcl90b195ZihkYXRhLCBidWYs IGxpbmVhcik7Ci0JZWxzZQotCQljb3B5X2xpbmVhcl90b19ndHQoZGF0YSwgYnVmLCBsaW5lYXIp OworCWNvcHlfbGluZWFyX3RvX2JvKGRhdGEsIGJ1ZiwgbGluZWFyKTsKIAogCWZyZWUobGluZWFy KTsKIH0KQEAgLTM1NCw2ICs2NzksNyBAQCBzY3JhdGNoX2J1Zl9jb3B5KGRhdGFfdCAqZGF0YSwK IAlpbnQgd2lkdGggPSBpZ3RfYnVmX3dpZHRoKGRzdCk7CiAJaW50IGhlaWdodCAgPSBpZ3RfYnVm X2hlaWdodChkc3QpOwogCXVpbnQzMl90ICpsaW5lYXJfZHN0OworCXVpbnQzMl90ICpsaW5lYXJf c3JjOwogCiAJaWd0X2Fzc2VydF9lcShpZ3RfYnVmX3dpZHRoKGRzdCksIGlndF9idWZfd2lkdGgo c3JjKSk7CiAJaWd0X2Fzc2VydF9lcShpZ3RfYnVmX2hlaWdodChkc3QpLCBpZ3RfYnVmX2hlaWdo dChzcmMpKTsKQEAgLTM2Niw0OSArNjkyLDIwIEBAIHNjcmF0Y2hfYnVmX2NvcHkoZGF0YV90ICpk YXRhLAogCWggPSBtaW4oaCwgaGVpZ2h0IC0gc3kpOwogCWggPSBtaW4oaCwgaGVpZ2h0IC0gZHkp OwogCi0JZ2VtX3NldF9kb21haW4oZGF0YS0+ZHJtX2ZkLCBkc3QtPmJvLT5oYW5kbGUsCi0JCSAg ICAgICBJOTE1X0dFTV9ET01BSU5fR1RULCBJOTE1X0dFTV9ET01BSU5fR1RUKTsKLQlsaW5lYXJf ZHN0ID0gZ2VtX21tYXBfX2d0dChkYXRhLT5kcm1fZmQsIGRzdC0+Ym8tPmhhbmRsZSwKLQkJCQkg ICBkc3QtPmJvLT5zaXplLCBQUk9UX1dSSVRFKTsKLQotCWlmIChzcmMtPnRpbGluZyA9PSBJOTE1 X1RJTElOR19ZZikgewotCQl2b2lkICptYXA7Ci0KLQkJZ2VtX3NldF9kb21haW4oZGF0YS0+ZHJt X2ZkLCBzcmMtPmJvLT5oYW5kbGUsCi0JCQkgICAgICAgSTkxNV9HRU1fRE9NQUlOX0NQVSwgMCk7 Ci0JCW1hcCA9IGdlbV9tbWFwX19jcHUoZGF0YS0+ZHJtX2ZkLCBzcmMtPmJvLT5oYW5kbGUsIDAs Ci0JCQkJICAgIHNyYy0+Ym8tPnNpemUsIFBST1RfUkVBRCk7Ci0KLQkJZm9yIChpbnQgeSA9IDA7 IHkgPCBoOyB5KyspIHsKLQkJCWZvciAoaW50IHggPSAwOyB4IDwgdzsgeCsrKSB7Ci0JCQkJY29u c3QgdWludDMyX3QgKnB0ciA9IHlmX3B0cihtYXAsIHN4K3gsIHN5K3ksCi0JCQkJCQkJICAgICBz cmMtPnN0cmlkZSwKLQkJCQkJCQkgICAgIHNyYy0+YnBwIC8gOCk7Ci0KLQkJCQlsaW5lYXJfZHN0 WyhkeSt5KSAqIHdpZHRoICsgZHgreF0gPSAqcHRyOwotCQkJfQotCQl9CisJbGluZWFyX2RzdCA9 IGFsbG9jX2FsaWduZWQoZHN0LT5iby0+c2l6ZSk7CisJbGluZWFyX3NyYyA9IGFsbG9jX2FsaWdu ZWQoc3JjLT5iby0+c2l6ZSk7CisJY29weV9ib190b19saW5lYXIoZGF0YSwgc3JjLCBsaW5lYXJf c3JjKTsKKwljb3B5X2JvX3RvX2xpbmVhcihkYXRhLCBkc3QsIGxpbmVhcl9kc3QpOwogCi0JCW11 bm1hcChtYXAsIHNyYy0+Ym8tPnNpemUpOwotCX0gZWxzZSB7Ci0JCXVpbnQzMl90ICpsaW5lYXJf c3JjOwotCi0JCWdlbV9zZXRfZG9tYWluKGRhdGEtPmRybV9mZCwgc3JjLT5iby0+aGFuZGxlLAot CQkJICAgICAgIEk5MTVfR0VNX0RPTUFJTl9HVFQsIDApOwotCi0JCWxpbmVhcl9zcmMgPSBnZW1f bW1hcF9fZ3R0KGRhdGEtPmRybV9mZCwgc3JjLT5iby0+aGFuZGxlLAotCQkJCQkgICBzcmMtPmJv LT5zaXplLCBQUk9UX1JFQUQpOwotCi0JCWZvciAoaW50IHkgPSAwOyB5IDwgaDsgeSsrKSB7Ci0J CQlpZ3RfbWVtY3B5X2Zyb21fd2MoJmxpbmVhcl9kc3RbKGR5K3kpICogd2lkdGggKyBkeF0sCi0J CQkJCSAgICZsaW5lYXJfc3JjWyhzeSt5KSAqIHdpZHRoICsgc3hdLAotCQkJCQkgICB3ICogKHNy Yy0+YnBwIC8gOCkpOwotCQl9Ci0KLQkJbXVubWFwKGxpbmVhcl9zcmMsIHNyYy0+Ym8tPnNpemUp OworCWZvciAoaW50IHkgPSAwOyB5IDwgaDsgeSsrKSB7CisJCW1lbWNweSgmbGluZWFyX2RzdFso ZHkreSkgKiB3aWR0aCArIGR4XSwKKwkJCQkmbGluZWFyX3NyY1soc3kreSkgKiB3aWR0aCArIHN4 XSwKKwkJCQl3ICogKHNyYy0+YnBwIC8gOCkpOwogCX0KKwlmcmVlKGxpbmVhcl9zcmMpOwogCi0J bXVubWFwKGxpbmVhcl9kc3QsIGRzdC0+Ym8tPnNpemUpOworCWNvcHlfbGluZWFyX3RvX2JvKGRh dGEsIGRzdCwgbGluZWFyX2RzdCk7CisJZnJlZShsaW5lYXJfZHN0KTsKIH0KIAogc3RhdGljIHZv aWQgc2NyYXRjaF9idWZfaW5pdChkYXRhX3QgKmRhdGEsIHN0cnVjdCBpZ3RfYnVmICpidWYsCkBA IC00MjQsNiArNzIxLDcgQEAgc3RhdGljIHZvaWQgc2NyYXRjaF9idWZfaW5pdChkYXRhX3QgKmRh dGEsIHN0cnVjdCBpZ3RfYnVmICpidWYsCiAJaWYgKGNjcykgewogCQlpbnQgYXV4X3dpZHRoLCBh dXhfaGVpZ2h0OwogCQlpbnQgc2l6ZTsKKwkJdWludDMyX3QgdGlsZV9tYXNrID0gKDEgPDwgcmVx X3RpbGluZyk7CiAKIAkJaWd0X3JlcXVpcmUoaW50ZWxfZ2VuKGRhdGEtPmRldmlkKSA+PSA5KTsK IAkJaWd0X2Fzc2VydCh0aWxpbmcgPT0gSTkxNV9USUxJTkdfWSB8fApAQCAtNDU3LDMxICs3NTUs NDAgQEAgc3RhdGljIHZvaWQgc2NyYXRjaF9idWZfaW5pdChkYXRhX3QgKmRhdGEsIHN0cnVjdCBp Z3RfYnVmICpidWYsCiAKIAkJYnVmLT5ibyA9IGRybV9pbnRlbF9ib19hbGxvYyhkYXRhLT5idWZt Z3IsICIiLCBzaXplLCA0MDk2KTsKIAotCQlpZiAodGlsaW5nID09IEk5MTVfVElMSU5HX1kpIHsK KwkJaWYgKHRpbGluZyA9PSBJOTE1X1RJTElOR19ZICYmCisJCQkJZGF0YS0+Zm9ybWF0LT5od190 aWxlcyAmIHRpbGVfbWFzaykgewogCQkJZHJtX2ludGVsX2JvX3NldF90aWxpbmcoYnVmLT5ibywg JnRpbGluZywgYnVmLT5zdHJpZGUpOwogCQkJaWd0X2Fzc2VydF9lcSh0aWxpbmcsIHJlcV90aWxp bmcpOwogCQl9Ci0JfSBlbHNlIGlmIChyZXFfdGlsaW5nID09IEk5MTVfVElMSU5HX1lmKSB7Ci0J CWludCBzaXplOworCX0gZWxzZSB7CisJCXVpbnQzMl90IHRpbGVfbWFzayA9ICgxIDw8IHJlcV90 aWxpbmcpOworCisJCS8qIFJlcXVlc3RlZCBibyBtdXN0IGJlIGh3IHRpbGVkICovCisJCWlmIChk YXRhLT5mb3JtYXQtPmh3X3RpbGVzICYgdGlsZV9tYXNrKSB7CisJCQlidWYtPmJvID0gZHJtX2lu dGVsX2JvX2FsbG9jX3RpbGVkKGRhdGEtPmJ1Zm1nciwgIiIsCisJCQkJCQkJICAgd2lkdGgsIGhl aWdodCwKKwkJCQkJCQkgICBicHAgLyA4LAorCQkJCQkJCSAgICZ0aWxpbmcsICZwaXRjaCwgMCk7 CisJCQlpZ3RfYXNzZXJ0X2VxKHRpbGluZywgcmVxX3RpbGluZyk7CiAKLQkJYnVmLT5zdHJpZGUg PSBBTElHTih3aWR0aCAqIChicHAgLyA4KSwgMTI4KTsKLQkJYnVmLT5zaXplID0gYnVmLT5zdHJp ZGUgKiBoZWlnaHQ7Ci0JCWJ1Zi0+dGlsaW5nID0gdGlsaW5nOwotCQlidWYtPmJwcCA9IGJwcDsK KwkJCWJ1Zi0+c3RyaWRlID0gcGl0Y2g7CisJCQlidWYtPnRpbGluZyA9IHRpbGluZzsKKwkJCWJ1 Zi0+c2l6ZSA9IHBpdGNoICogaGVpZ2h0OworCQkJYnVmLT5icHAgPSBicHA7CisJCS8qIFVzZSBi byBhbGxvYyBhbmQgc29mdHdhcmUgdGlsaW5nL2RldGlsaW5nICovCisJCX0gZWxzZSB7CisJCQlp bnQgc2l6ZTsKIAotCQlzaXplID0gYnVmLT5zdHJpZGUgKiBBTElHTihoZWlnaHQsIDMyKTsKKwkJ CWJ1Zi0+c3RyaWRlID0gQUxJR04od2lkdGggKiAoYnBwIC8gOCksIDEyOCk7CisJCQlidWYtPnNp emUgPSBidWYtPnN0cmlkZSAqIGhlaWdodDsKKwkJCWJ1Zi0+dGlsaW5nID0gdGlsaW5nOworCQkJ YnVmLT5icHAgPSBicHA7CiAKLQkJYnVmLT5ibyA9IGRybV9pbnRlbF9ib19hbGxvYyhkYXRhLT5i dWZtZ3IsICIiLCBzaXplLCA0MDk2KTsKLQl9IGVsc2UgewotCQlidWYtPmJvID0gZHJtX2ludGVs X2JvX2FsbG9jX3RpbGVkKGRhdGEtPmJ1Zm1nciwgIiIsCi0JCQkJCQkgICB3aWR0aCwgaGVpZ2h0 LCBicHAgLyA4LAotCQkJCQkJICAgJnRpbGluZywgJnBpdGNoLCAwKTsKLQkJaWd0X2Fzc2VydF9l cSh0aWxpbmcsIHJlcV90aWxpbmcpOworCQkJc2l6ZSA9IGJ1Zi0+c3RyaWRlICogQUxJR04oaGVp Z2h0LCAzMik7CiAKLQkJYnVmLT5zdHJpZGUgPSBwaXRjaDsKLQkJYnVmLT50aWxpbmcgPSB0aWxp bmc7Ci0JCWJ1Zi0+c2l6ZSA9IHBpdGNoICogaGVpZ2h0OwotCQlidWYtPmJwcCA9IGJwcDsKKwkJ CWJ1Zi0+Ym8gPSBkcm1faW50ZWxfYm9fYWxsb2MoZGF0YS0+YnVmbWdyLCAiIiwgc2l6ZSwKKwkJ CQkJCSAgICAgNDA5Nik7CisJCX0KIAl9CiAKIAlpZ3RfYXNzZXJ0KGlndF9idWZfd2lkdGgoYnVm KSA9PSB3aWR0aCk7CkBAIC01MDcsMTEgKzgxNCwxMyBAQCBzY3JhdGNoX2J1Zl9jaGVjayhkYXRh X3QgKmRhdGEsCiAJaWd0X2Fzc2VydF9lcShpZ3RfYnVmX2hlaWdodChidWYpLCBpZ3RfYnVmX2hl aWdodChyZWYpKTsKIAlpZ3RfYXNzZXJ0X2VxKGJ1Zi0+Ym8tPnNpemUsIHJlZi0+Ym8tPnNpemUp OwogCi0JbGluZWFyID0gbGluZWFyX2NvcHkoZGF0YSwgYnVmKTsKKwlsaW5lYXIgPSBhbGxvY19h bGlnbmVkKGJ1Zi0+Ym8tPnNpemUpOworCWNvcHlfYm9fdG9fbGluZWFyKGRhdGEsIGJ1ZiwgbGlu ZWFyKTsKIAlidWZfdmFsID0gbGluZWFyW3kgKiB3aWR0aCArIHhdOwogCWZyZWUobGluZWFyKTsK IAotCWxpbmVhciA9IGxpbmVhcl9jb3B5KGRhdGEsIHJlZik7CisJbGluZWFyID0gYWxsb2NfYWxp Z25lZChyZWYtPmJvLT5zaXplKTsKKwljb3B5X2JvX3RvX2xpbmVhcihkYXRhLCBidWYsIGxpbmVh cik7CiAJcmVmX3ZhbCA9IGxpbmVhclt5ICogd2lkdGggKyB4XTsKIAlmcmVlKGxpbmVhcik7CiAK QEAgLTUzMyw4ICs4NDIsMTAgQEAgc2NyYXRjaF9idWZfY2hlY2tfYWxsKGRhdGFfdCAqZGF0YSwK IAlpZ3RfYXNzZXJ0X2VxKGlndF9idWZfaGVpZ2h0KGJ1ZiksIGlndF9idWZfaGVpZ2h0KHJlZikp OwogCWlndF9hc3NlcnRfZXEoYnVmLT5iby0+c2l6ZSwgcmVmLT5iby0+c2l6ZSk7CiAKLQlsaW5l YXJfYnVmID0gbGluZWFyX2NvcHkoZGF0YSwgYnVmKTsKLQlsaW5lYXJfcmVmID0gbGluZWFyX2Nv cHkoZGF0YSwgcmVmKTsKKwlsaW5lYXJfYnVmID0gYWxsb2NfYWxpZ25lZChidWYtPmJvLT5zaXpl KTsKKwlsaW5lYXJfcmVmID0gYWxsb2NfYWxpZ25lZChyZWYtPmJvLT5zaXplKTsKKwljb3B5X2Jv X3RvX2xpbmVhcihkYXRhLCBidWYsIGxpbmVhcl9idWYpOworCWNvcHlfYm9fdG9fbGluZWFyKGRh dGEsIHJlZiwgbGluZWFyX3JlZik7CiAKIAlmb3IgKGludCB5ID0gMDsgeSA8IGhlaWdodDsgeSsr KSB7CiAJCWZvciAoaW50IHggPSAwOyB4IDwgd2lkdGg7IHgrKykgewpAQCAtNjI3LDYgKzkzOCw3 IEBAIHN0YXRpYyB2b2lkIHRlc3QoZGF0YV90ICpkYXRhLCB1aW50MzJfdCBzcmNfdGlsaW5nLCB1 aW50MzJfdCBkc3RfdGlsaW5nLAogCiAJZm9yIChpbnQgaSA9IDA7IGkgPCBudW1fc3JjOyBpKysp CiAJCXNjcmF0Y2hfYnVmX2luaXQoZGF0YSwgJnNyY1tpXS5idWYsIFdJRFRILCBIRUlHSFQsIHNy Y1tpXS50aWxpbmcsIGZhbHNlKTsKKwogCXNjcmF0Y2hfYnVmX2luaXQoZGF0YSwgJmRzdCwgV0lE VEgsIEhFSUdIVCwgZHN0X3RpbGluZywgZmFsc2UpOwogCWlmIChzcmNfY29tcHJlc3NlZCkKIAkJ c2NyYXRjaF9idWZfaW5pdChkYXRhLCAmc3JjX2NjcywgV0lEVEgsIEhFSUdIVCwKQEAgLTYzOSw3 ICs5NTEsOCBAQCBzdGF0aWMgdm9pZCB0ZXN0KGRhdGFfdCAqZGF0YSwgdWludDMyX3Qgc3JjX3Rp bGluZywgdWludDMyX3QgZHN0X3RpbGluZywKIAlmb3IgKGludCBpID0gMDsgaSA8IG51bV9zcmM7 IGkrKykKIAkJc2NyYXRjaF9idWZfZHJhd19wYXR0ZXJuKGRhdGEsICZzcmNbaV0uYnVmLAogCQkJ CQkgMCwgMCwgV0lEVEgsIEhFSUdIVCwKLQkJCQkJIDAsIDAsIFdJRFRILCBIRUlHSFQsIHRydWUp OworCQkJCQkgMCwgMCwgV0lEVEgsIEhFSUdIVCwgKGkgJSAyKSk7CisKIAlzY3JhdGNoX2J1Zl9k cmF3X3BhdHRlcm4oZGF0YSwgJmRzdCwKIAkJCQkgMCwgMCwgV0lEVEgsIEhFSUdIVCwKIAkJCQkg MCwgMCwgV0lEVEgsIEhFSUdIVCwgZmFsc2UpOwpAQCAtODI2LDYgKzExMzksOCBAQCBpZ3RfbWFp bl9hcmdzKCJkYSIsIE5VTEwsIGhlbHBfc3RyLCBvcHRfaGFuZGxlciwgTlVMTCkKIAkJZGF0YS5i YXRjaCA9IGludGVsX2JhdGNoYnVmZmVyX2FsbG9jKGRhdGEuYnVmbWdyLCBkYXRhLmRldmlkKTsK IAkJaWd0X2Fzc2VydChkYXRhLmJhdGNoKTsKIAorCQlkYXRhLmZvcm1hdCA9IGdldF9nZW5fZm9y bWF0KGludGVsX2dlbihkYXRhLmRldmlkKSk7CisKIAkJaWd0X2ZvcmtfaGFuZ19kZXRlY3Rvcihk YXRhLmRybV9mZCk7CiAJfQogCi0tIAoyLjIzLjAKCl9fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fCmlndC1kZXYgbWFpbGluZyBsaXN0CmlndC1kZXZAbGlzdHMu ZnJlZWRlc2t0b3Aub3JnCmh0dHBzOi8vbGlzdHMuZnJlZWRlc2t0b3Aub3JnL21haWxtYW4vbGlz dGluZm8vaWd0LWRldg==