From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: From: Deepak Rawat Date: Wed, 10 Oct 2018 17:16:43 -0700 Message-ID: <20181011001657.1715-4-drawat@vmware.com> In-Reply-To: <20181011001657.1715-1-drawat@vmware.com> References: <20181011001657.1715-1-drawat@vmware.com> MIME-Version: 1.0 Subject: [Intel-gfx] [PATCH v3 04/18] drm/selftest: Add drm damage helper selftest List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Errors-To: intel-gfx-bounces@lists.freedesktop.org Sender: "Intel-gfx" To: dri-devel@lists.freedesktop.org, linux-graphics-maintainer@vmware.com, thellstrom@vmware.com, syeh@vmware.com Cc: Daniel Vetter , intel-gfx@lists.freedesktop.org, igt-dev@lists.freedesktop.org, Pekka Paalanen , Deepak Rawat List-ID: U2VsZnRlc3QgZm9yIGRybSBkYW1hZ2UgaGVscGVyIGl0ZXJhdG9yIGZ1bmN0aW9ucy4KCkNjOiB2 aWxsZS5zeXJqYWxhQGxpbnV4LmludGVsLmNvbQpDYzogRGFuaWVsIFZldHRlciA8ZGFuaWVsLnZl dHRlckBmZndsbC5jaD4KQ2M6IFBla2thIFBhYWxhbmVuIDxwcGFhbGFuZW5AZ21haWwuY29tPgpD YzogRGFuaWVsIFN0b25lIDxkYW5pZWxAZm9vaXNoYmFyLm9yZz4KQ2M6IGludGVsLWdmeEBsaXN0 cy5mcmVlZGVza3RvcC5vcmcKQ2M6IGlndC1kZXZAbGlzdHMuZnJlZWRlc2t0b3Aub3JnCkNjOiBw ZXRyaS5sYXR2YWxhQGludGVsLmNvbQpDYzogY2hyaXNAY2hyaXMtd2lsc29uLmNvLnVrClNpZ25l ZC1vZmYtYnk6IERlZXBhayBSYXdhdCA8ZHJhd2F0QHZtd2FyZS5jb20+Ci0tLQogZHJpdmVycy9n cHUvZHJtL3NlbGZ0ZXN0cy9NYWtlZmlsZSAgICAgICAgICAgIHwgICAzICstCiAuLi4vc2VsZnRl c3RzL2RybV9kYW1hZ2VfaGVscGVyX3NlbGZ0ZXN0cy5oICAgfCAgMjIgKwogLi4uL2RybS9zZWxm dGVzdHMvdGVzdC1kcm1fZGFtYWdlX2hlbHBlci5jICAgIHwgODQ0ICsrKysrKysrKysrKysrKysr KwogMyBmaWxlcyBjaGFuZ2VkLCA4NjggaW5zZXJ0aW9ucygrKSwgMSBkZWxldGlvbigtKQogY3Jl YXRlIG1vZGUgMTAwNjQ0IGRyaXZlcnMvZ3B1L2RybS9zZWxmdGVzdHMvZHJtX2RhbWFnZV9oZWxw ZXJfc2VsZnRlc3RzLmgKIGNyZWF0ZSBtb2RlIDEwMDY0NCBkcml2ZXJzL2dwdS9kcm0vc2VsZnRl c3RzL3Rlc3QtZHJtX2RhbWFnZV9oZWxwZXIuYwoKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2Ry bS9zZWxmdGVzdHMvTWFrZWZpbGUgYi9kcml2ZXJzL2dwdS9kcm0vc2VsZnRlc3RzL01ha2VmaWxl CmluZGV4IDlmYzM0OWZhMThlOS4uODhhYzIxNmY1OTYyIDEwMDY0NAotLS0gYS9kcml2ZXJzL2dw dS9kcm0vc2VsZnRlc3RzL01ha2VmaWxlCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9zZWxmdGVzdHMv TWFrZWZpbGUKQEAgLTEgKzEsMiBAQAotb2JqLSQoQ09ORklHX0RSTV9ERUJVR19TRUxGVEVTVCkg Kz0gdGVzdC1kcm1fbW0ubyB0ZXN0LWRybS1oZWxwZXIubworb2JqLSQoQ09ORklHX0RSTV9ERUJV R19TRUxGVEVTVCkgKz0gdGVzdC1kcm1fbW0ubyB0ZXN0LWRybS1oZWxwZXIubyBcCisJCQkJICAg IHRlc3QtZHJtX2RhbWFnZV9oZWxwZXIubwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL3Nl bGZ0ZXN0cy9kcm1fZGFtYWdlX2hlbHBlcl9zZWxmdGVzdHMuaCBiL2RyaXZlcnMvZ3B1L2RybS9z ZWxmdGVzdHMvZHJtX2RhbWFnZV9oZWxwZXJfc2VsZnRlc3RzLmgKbmV3IGZpbGUgbW9kZSAxMDA2 NDQKaW5kZXggMDAwMDAwMDAwMDAwLi4zYTFjYmUwNWJlZjAKLS0tIC9kZXYvbnVsbAorKysgYi9k cml2ZXJzL2dwdS9kcm0vc2VsZnRlc3RzL2RybV9kYW1hZ2VfaGVscGVyX3NlbGZ0ZXN0cy5oCkBA IC0wLDAgKzEsMjIgQEAKKy8qIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wICovCitz ZWxmdGVzdChkYW1hZ2VfaXRlcl9ub19kYW1hZ2UsIGlndF9kYW1hZ2VfaXRlcl9ub19kYW1hZ2Up CitzZWxmdGVzdChkYW1hZ2VfaXRlcl9ub19kYW1hZ2VfZnJhY3Rpb25hbF9zcmMsIGlndF9kYW1h Z2VfaXRlcl9ub19kYW1hZ2VfZnJhY3Rpb25hbF9zcmMpCitzZWxmdGVzdChkYW1hZ2VfaXRlcl9u b19kYW1hZ2Vfc3JjX21vdmVkLCBpZ3RfZGFtYWdlX2l0ZXJfbm9fZGFtYWdlX3NyY19tb3ZlZCkK K3NlbGZ0ZXN0KGRhbWFnZV9pdGVyX25vX2RhbWFnZV9mcmFjdGlvbmFsX3NyY19tb3ZlZCwgaWd0 X2RhbWFnZV9pdGVyX25vX2RhbWFnZV9mcmFjdGlvbmFsX3NyY19tb3ZlZCkKK3NlbGZ0ZXN0KGRh bWFnZV9pdGVyX25vX2RhbWFnZV9ub3RfdmlzaWJsZSwgaWd0X2RhbWFnZV9pdGVyX25vX2RhbWFn ZV9ub3RfdmlzaWJsZSkKK3NlbGZ0ZXN0KGRhbWFnZV9pdGVyX25vX2RhbWFnZV9ub19jcnRjLCBp Z3RfZGFtYWdlX2l0ZXJfbm9fZGFtYWdlX25vX2NydGMpCitzZWxmdGVzdChkYW1hZ2VfaXRlcl9u b19kYW1hZ2Vfbm9fZmIsIGlndF9kYW1hZ2VfaXRlcl9ub19kYW1hZ2Vfbm9fZmIpCitzZWxmdGVz dChkYW1hZ2VfaXRlcl9zaW1wbGVfZGFtYWdlLCBpZ3RfZGFtYWdlX2l0ZXJfc2ltcGxlX2RhbWFn ZSkKK3NlbGZ0ZXN0KGRhbWFnZV9pdGVyX3NpbmdsZV9kYW1hZ2UsIGlndF9kYW1hZ2VfaXRlcl9z aW5nbGVfZGFtYWdlKQorc2VsZnRlc3QoZGFtYWdlX2l0ZXJfc2luZ2xlX2RhbWFnZV9pbnRlcnNl Y3Rfc3JjLCBpZ3RfZGFtYWdlX2l0ZXJfc2luZ2xlX2RhbWFnZV9pbnRlcnNlY3Rfc3JjKQorc2Vs ZnRlc3QoZGFtYWdlX2l0ZXJfc2luZ2xlX2RhbWFnZV9vdXRzaWRlX3NyYywgaWd0X2RhbWFnZV9p dGVyX3NpbmdsZV9kYW1hZ2Vfb3V0c2lkZV9zcmMpCitzZWxmdGVzdChkYW1hZ2VfaXRlcl9zaW5n bGVfZGFtYWdlX2ZyYWN0aW9uYWxfc3JjLCBpZ3RfZGFtYWdlX2l0ZXJfc2luZ2xlX2RhbWFnZV9m cmFjdGlvbmFsX3NyYykKK3NlbGZ0ZXN0KGRhbWFnZV9pdGVyX3NpbmdsZV9kYW1hZ2VfaW50ZXJz ZWN0X2ZyYWN0aW9uYWxfc3JjLCBpZ3RfZGFtYWdlX2l0ZXJfc2luZ2xlX2RhbWFnZV9pbnRlcnNl Y3RfZnJhY3Rpb25hbF9zcmMpCitzZWxmdGVzdChkYW1hZ2VfaXRlcl9zaW5nbGVfZGFtYWdlX291 dHNpZGVfZnJhY3Rpb25hbF9zcmMsIGlndF9kYW1hZ2VfaXRlcl9zaW5nbGVfZGFtYWdlX291dHNp ZGVfZnJhY3Rpb25hbF9zcmMpCitzZWxmdGVzdChkYW1hZ2VfaXRlcl9zaW5nbGVfZGFtYWdlX3Ny Y19tb3ZlZCwgaWd0X2RhbWFnZV9pdGVyX3NpbmdsZV9kYW1hZ2Vfc3JjX21vdmVkKQorc2VsZnRl c3QoZGFtYWdlX2l0ZXJfc2luZ2xlX2RhbWFnZV9mcmFjdGlvbmFsX3NyY19tb3ZlZCwgaWd0X2Rh bWFnZV9pdGVyX3NpbmdsZV9kYW1hZ2VfZnJhY3Rpb25hbF9zcmNfbW92ZWQpCitzZWxmdGVzdChk YW1hZ2VfaXRlcl9kYW1hZ2UsIGlndF9kYW1hZ2VfaXRlcl9kYW1hZ2UpCitzZWxmdGVzdChkYW1h Z2VfaXRlcl9kYW1hZ2Vfb25lX2ludGVyc2VjdCwgaWd0X2RhbWFnZV9pdGVyX2RhbWFnZV9vbmVf aW50ZXJzZWN0KQorc2VsZnRlc3QoZGFtYWdlX2l0ZXJfZGFtYWdlX29uZV9vdXRzaWRlLCBpZ3Rf ZGFtYWdlX2l0ZXJfZGFtYWdlX29uZV9vdXRzaWRlKQorc2VsZnRlc3QoZGFtYWdlX2l0ZXJfZGFt YWdlX3NyY19tb3ZlZCwgaWd0X2RhbWFnZV9pdGVyX2RhbWFnZV9zcmNfbW92ZWQpCitzZWxmdGVz dChkYW1hZ2VfaXRlcl9kYW1hZ2Vfbm90X3Zpc2libGUsIGlndF9kYW1hZ2VfaXRlcl9kYW1hZ2Vf bm90X3Zpc2libGUpCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vc2VsZnRlc3RzL3Rlc3Qt ZHJtX2RhbWFnZV9oZWxwZXIuYyBiL2RyaXZlcnMvZ3B1L2RybS9zZWxmdGVzdHMvdGVzdC1kcm1f ZGFtYWdlX2hlbHBlci5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMC4u MTc3NTQ3MzRjNDdhCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9ncHUvZHJtL3NlbGZ0ZXN0 cy90ZXN0LWRybV9kYW1hZ2VfaGVscGVyLmMKQEAgLTAsMCArMSw4NDQgQEAKKy8qIFNQRFgtTGlj ZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wICovCisvKgorICogVGVzdCBjYXNlIGZvciBkcm1fZGFt YWdlX2hlbHBlciBmdW5jdGlvbnMKKyAqLworCisjZGVmaW5lIHByX2ZtdChmbXQpICJkcm1fZGFt YWdlX2hlbHBlcjogIiBmbXQKKworI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUg PGRybS9kcm1fZGFtYWdlX2hlbHBlci5oPgorCisjZGVmaW5lIFRFU1RTICJkcm1fZGFtYWdlX2hl bHBlcl9zZWxmdGVzdHMuaCIKKyNpbmNsdWRlICJkcm1fc2VsZnRlc3QuaCIKKworI2RlZmluZSBG QUlMKHRlc3QsIG1zZywgLi4uKSBcCisJZG8geyBcCisJCWlmICh0ZXN0KSB7IFwKKwkJCXByX2Vy cigiJXMvJXU6ICIgbXNnLCBfX0ZVTkNUSU9OX18sIF9fTElORV9fLCAjI19fVkFfQVJHU19fKTsg XAorCQkJcmV0dXJuIC1FSU5WQUw7IFwKKwkJfSBcCisJfSB3aGlsZSAoMCkKKworI2RlZmluZSBG QUlMX09OKHgpIEZBSUwoKHgpLCAiJXMiLCAiRkFJTF9PTigiIF9fc3RyaW5naWZ5KHgpICIpXG4i KQorCitzdGF0aWMgdm9pZCBzZXRfcGxhbmVfc3JjKHN0cnVjdCBkcm1fcGxhbmVfc3RhdGUgKnN0 YXRlLCBpbnQgeDEsIGludCB5MSwgaW50IHgyLAorCQkJICBpbnQgeTIpCit7CisJc3RhdGUtPnNy Yy54MSA9IHgxOworCXN0YXRlLT5zcmMueTEgPSB5MTsKKwlzdGF0ZS0+c3JjLngyID0geDI7CisJ c3RhdGUtPnNyYy55MiA9IHkyOworfQorCitzdGF0aWMgdm9pZCBzZXRfZGFtYWdlX2NsaXAoc3Ry dWN0IGRybV9tb2RlX3JlY3QgKnIsIGludCB4MSwgaW50IHkxLCBpbnQgeDIsCisJCQkgICAgaW50 IHkyKQoreworCXItPngxID0geDE7CisJci0+eTEgPSB5MTsKKwlyLT54MiA9IHgyOworCXItPnky ID0geTI7Cit9CisKK3N0YXRpYyB2b2lkIHNldF9kYW1hZ2VfYmxvYihzdHJ1Y3QgZHJtX3Byb3Bl cnR5X2Jsb2IgKmRhbWFnZV9ibG9iLAorCQkJICAgIHN0cnVjdCBkcm1fbW9kZV9yZWN0ICpyLCB1 aW50MzJfdCBzaXplKQoreworCWRhbWFnZV9ibG9iLT5sZW5ndGggPSBzaXplOworCWRhbWFnZV9i bG9iLT5kYXRhID0gcjsKK30KKworc3RhdGljIHZvaWQgc2V0X3BsYW5lX2RhbWFnZShzdHJ1Y3Qg ZHJtX3BsYW5lX3N0YXRlICpzdGF0ZSwKKwkJCSAgICAgc3RydWN0IGRybV9wcm9wZXJ0eV9ibG9i ICpkYW1hZ2VfYmxvYikKK3sKKwlzdGF0ZS0+ZmJfZGFtYWdlX2NsaXBzID0gZGFtYWdlX2Jsb2I7 Cit9CisKK3N0YXRpYyBib29sIGNoZWNrX2RhbWFnZV9jbGlwKHN0cnVjdCBkcm1fcGxhbmVfc3Rh dGUgKnN0YXRlLCBzdHJ1Y3QgZHJtX3JlY3QgKnIsCisJCQkgICAgICBpbnQgeDEsIGludCB5MSwg aW50IHgyLCBpbnQgeTIpCit7CisJLyoKKwkgKiBSb3VuZCBkb3duIHgxL3kxIGFuZCByb3VuZCB1 cCB4Mi95Mi4gVGhpcyBpcyBiZWNhdXNlIGRhbWFnZSBpcyBub3QgaW4KKwkgKiAxNi4xNiBmaXhl ZCBwb2ludCBzbyB0byBjYXRjaCBhbGwgcGl4ZWxzLgorCSAqLworCWludCBzcmNfeDEgPSBzdGF0 ZS0+c3JjLngxID4+IDE2OworCWludCBzcmNfeTEgPSBzdGF0ZS0+c3JjLnkxID4+IDE2OworCWlu dCBzcmNfeDIgPSAoc3RhdGUtPnNyYy54MiA+PiAxNikgKyAhIShzdGF0ZS0+c3JjLngyICYgMHhG RkZGKTsKKwlpbnQgc3JjX3kyID0gKHN0YXRlLT5zcmMueTIgPj4gMTYpICsgISEoc3RhdGUtPnNy Yy55MiAmIDB4RkZGRik7CisKKwlpZiAoeDEgPj0geDIgfHwgeTEgPj0geTIpIHsKKwkJcHJfZXJy KCJDYW5ub3QgaGF2ZSBkYW1hZ2UgY2xpcCB3aXRoIG5vIGRpbWVudGlvbi5cbiIpOworCQlyZXR1 cm4gZmFsc2U7CisJfQorCisJaWYgKHgxIDwgc3JjX3gxIHx8IHkxIDwgc3JjX3kxIHx8IHgyID4g c3JjX3gyIHx8IHkyID4gc3JjX3kyKSB7CisJCXByX2VycigiRGFtYWdlIGNhbm5vdCBiZSBvdXRz aWRlIHJvdW5kZWQgcGxhbmUgc3JjLlxuIik7CisJCXJldHVybiBmYWxzZTsKKwl9CisKKwlpZiAo ci0+eDEgIT0geDEgfHwgci0+eTEgIT0geTEgfHwgci0+eDIgIT0geDIgfHwgci0+eTIgIT0geTIp IHsKKwkJcHJfZXJyKCJEYW1hZ2UgPSAlZCAlZCAlZCAlZFxuIiwgci0+eDEsIHItPnkxLCByLT54 Miwgci0+eTIpOworCQlyZXR1cm4gZmFsc2U7CisJfQorCisJcmV0dXJuIHRydWU7Cit9CisKK3N0 YXRpYyBpbnQgaWd0X2RhbWFnZV9pdGVyX25vX2RhbWFnZSh2b2lkICppZ25vcmVkKQoreworCXN0 cnVjdCBkcm1fYXRvbWljX2hlbHBlcl9kYW1hZ2VfaXRlciBpdGVyOworCXN0cnVjdCBkcm1fcGxh bmVfc3RhdGUgb2xkX3N0YXRlOworCXN0cnVjdCBkcm1fcmVjdCBjbGlwOworCXVpbnQzMl90IG51 bV9oaXRzID0gMDsKKworCXN0cnVjdCBkcm1fZnJhbWVidWZmZXIgZmIgPSB7CisJCS53aWR0aCA9 IDIwNDgsCisJCS5oZWlnaHQgPSAyMDQ4CisJfTsKKworCXN0cnVjdCBkcm1fcGxhbmVfc3RhdGUg c3RhdGUgPSB7CisJCS5jcnRjID0gWkVST19TSVpFX1BUUiwKKwkJLmZiID0gJmZiLAorCQkudmlz aWJsZSA9IHRydWUsCisJfTsKKworCS8qIFBsYW5lIHNyYyBzYW1lIGFzIGZiIHNpemUuICovCisJ c2V0X3BsYW5lX3NyYygmb2xkX3N0YXRlLCAwLCAwLCBmYi53aWR0aCA8PCAxNiwgZmIuaGVpZ2h0 IDw8IDE2KTsKKwlzZXRfcGxhbmVfc3JjKCZzdGF0ZSwgMCwgMCwgZmIud2lkdGggPDwgMTYsIGZi LmhlaWdodCA8PCAxNik7CisJZHJtX2F0b21pY19oZWxwZXJfZGFtYWdlX2l0ZXJfaW5pdCgmaXRl ciwgJm9sZF9zdGF0ZSwgJnN0YXRlKTsKKwlkcm1fYXRvbWljX2Zvcl9lYWNoX3BsYW5lX2RhbWFn ZSgmaXRlciwgJmNsaXApCisJCW51bV9oaXRzKys7CisKKwlGQUlMKG51bV9oaXRzICE9IDEsICJT aG91bGQgcmV0dXJuIHBsYW5lIHNyYyBhcyBkYW1hZ2UuIik7CisJRkFJTF9PTighY2hlY2tfZGFt YWdlX2NsaXAoJnN0YXRlLCAmY2xpcCwgMCwgMCwgMjA0OCwgMjA0OCkpOworCisJcmV0dXJuIDA7 Cit9CisKK3N0YXRpYyBpbnQgaWd0X2RhbWFnZV9pdGVyX25vX2RhbWFnZV9mcmFjdGlvbmFsX3Ny Yyh2b2lkICppZ25vcmVkKQoreworCXN0cnVjdCBkcm1fYXRvbWljX2hlbHBlcl9kYW1hZ2VfaXRl ciBpdGVyOworCXN0cnVjdCBkcm1fcGxhbmVfc3RhdGUgb2xkX3N0YXRlOworCXN0cnVjdCBkcm1f cmVjdCBjbGlwOworCXVpbnQzMl90IG51bV9oaXRzID0gMDsKKworCXN0cnVjdCBkcm1fZnJhbWVi dWZmZXIgZmIgPSB7CisJCS53aWR0aCA9IDIwNDgsCisJCS5oZWlnaHQgPSAyMDQ4CisJfTsKKwor CXN0cnVjdCBkcm1fcGxhbmVfc3RhdGUgc3RhdGUgPSB7CisJCS5jcnRjID0gWkVST19TSVpFX1BU UiwKKwkJLmZiID0gJmZiLAorCQkudmlzaWJsZSA9IHRydWUsCisJfTsKKworCS8qIFBsYW5lIHNy YyBoYXMgZnJhY3Rpb25hbCBwYXJ0LiAqLworCXNldF9wbGFuZV9zcmMoJm9sZF9zdGF0ZSwgMHgz ZmZmZSwgMHgzZmZmZSwKKwkJICAgICAgMHgzZmZmZSArICgxMDI0IDw8IDE2KSwgMHgzZmZmZSAr ICg3NjggPDwgMTYpKTsKKwlzZXRfcGxhbmVfc3JjKCZzdGF0ZSwgMHgzZmZmZSwgMHgzZmZmZSwK KwkJICAgICAgMHgzZmZmZSArICgxMDI0IDw8IDE2KSwgMHgzZmZmZSArICg3NjggPDwgMTYpKTsK Kwlkcm1fYXRvbWljX2hlbHBlcl9kYW1hZ2VfaXRlcl9pbml0KCZpdGVyLCAmb2xkX3N0YXRlLCAm c3RhdGUpOworCWRybV9hdG9taWNfZm9yX2VhY2hfcGxhbmVfZGFtYWdlKCZpdGVyLCAmY2xpcCkK KwkJbnVtX2hpdHMrKzsKKworCUZBSUwobnVtX2hpdHMgIT0gMSwgIlNob3VsZCByZXR1cm4gcm91 bmRlZCBvZmYgcGxhbmUgc3JjIGFzIGRhbWFnZS4iKTsKKwlGQUlMX09OKCFjaGVja19kYW1hZ2Vf Y2xpcCgmc3RhdGUsICZjbGlwLCAzLCAzLCAxMDI4LCA3NzIpKTsKKworCXJldHVybiAwOworfQor CitzdGF0aWMgaW50IGlndF9kYW1hZ2VfaXRlcl9ub19kYW1hZ2Vfc3JjX21vdmVkKHZvaWQgKmln bm9yZWQpCit7CisJc3RydWN0IGRybV9hdG9taWNfaGVscGVyX2RhbWFnZV9pdGVyIGl0ZXI7CisJ c3RydWN0IGRybV9wbGFuZV9zdGF0ZSBvbGRfc3RhdGU7CisJc3RydWN0IGRybV9yZWN0IGNsaXA7 CisJdWludDMyX3QgbnVtX2hpdHMgPSAwOworCisJc3RydWN0IGRybV9mcmFtZWJ1ZmZlciBmYiA9 IHsKKwkJLndpZHRoID0gMjA0OCwKKwkJLmhlaWdodCA9IDIwNDgKKwl9OworCisJc3RydWN0IGRy bV9wbGFuZV9zdGF0ZSBzdGF0ZSA9IHsKKwkJLmNydGMgPSBaRVJPX1NJWkVfUFRSLAorCQkuZmIg PSAmZmIsCisJCS52aXNpYmxlID0gdHJ1ZSwKKwl9OworCisJLyogUGxhbmUgc3JjIG1vdmVkIHNp bmNlIG9sZCBwbGFuZSBzdGF0ZS4gKi8KKwlzZXRfcGxhbmVfc3JjKCZvbGRfc3RhdGUsIDAsIDAs IDEwMjQgPDwgMTYsIDc2OCA8PCAxNik7CisJc2V0X3BsYW5lX3NyYygmc3RhdGUsIDEwIDw8IDE2 LCAxMCA8PCAxNiwKKwkJICAgICAgKDEwICsgMTAyNCkgPDwgMTYsICgxMCArIDc2OCkgPDwgMTYp OworCWRybV9hdG9taWNfaGVscGVyX2RhbWFnZV9pdGVyX2luaXQoJml0ZXIsICZvbGRfc3RhdGUs ICZzdGF0ZSk7CisJZHJtX2F0b21pY19mb3JfZWFjaF9wbGFuZV9kYW1hZ2UoJml0ZXIsICZjbGlw KQorCQludW1faGl0cysrOworCisJRkFJTChudW1faGl0cyAhPSAxLCAiU2hvdWxkIHJldHVybiBw bGFuZSBzcmMgYXMgZGFtYWdlLiIpOworCUZBSUxfT04oIWNoZWNrX2RhbWFnZV9jbGlwKCZzdGF0 ZSwgJmNsaXAsIDEwLCAxMCwgMTAzNCwgNzc4KSk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGlj IGludCBpZ3RfZGFtYWdlX2l0ZXJfbm9fZGFtYWdlX2ZyYWN0aW9uYWxfc3JjX21vdmVkKHZvaWQg Kmlnbm9yZWQpCit7CisJc3RydWN0IGRybV9hdG9taWNfaGVscGVyX2RhbWFnZV9pdGVyIGl0ZXI7 CisJc3RydWN0IGRybV9wbGFuZV9zdGF0ZSBvbGRfc3RhdGU7CisJc3RydWN0IGRybV9yZWN0IGNs aXA7CisJdWludDMyX3QgbnVtX2hpdHMgPSAwOworCisJc3RydWN0IGRybV9mcmFtZWJ1ZmZlciBm YiA9IHsKKwkJLndpZHRoID0gMjA0OCwKKwkJLmhlaWdodCA9IDIwNDgKKwl9OworCisJc3RydWN0 IGRybV9wbGFuZV9zdGF0ZSBzdGF0ZSA9IHsKKwkJLmNydGMgPSBaRVJPX1NJWkVfUFRSLAorCQku ZmIgPSAmZmIsCisJCS52aXNpYmxlID0gdHJ1ZSwKKwl9OworCisJLyogUGxhbmUgc3JjIGhhcyBm cmFjdGlvbmFsIHBhcnQgYW5kIGl0IG1vdmVkIHNpbmNlIG9sZCBwbGFuZSBzdGF0ZS4gKi8KKwlz ZXRfcGxhbmVfc3JjKCZvbGRfc3RhdGUsIDB4M2ZmZmUsIDB4M2ZmZmUsCisJCSAgICAgIDB4M2Zm ZmUgKyAoMTAyNCA8PCAxNiksIDB4M2ZmZmUgKyAoNzY4IDw8IDE2KSk7CisJc2V0X3BsYW5lX3Ny Yygmc3RhdGUsIDB4NDAwMDIsIDB4NDAwMDIsCisJCSAgICAgIDB4NDAwMDIgKyAoMTAyNCA8PCAx NiksIDB4NDAwMDIgKyAoNzY4IDw8IDE2KSk7CisJZHJtX2F0b21pY19oZWxwZXJfZGFtYWdlX2l0 ZXJfaW5pdCgmaXRlciwgJm9sZF9zdGF0ZSwgJnN0YXRlKTsKKwlkcm1fYXRvbWljX2Zvcl9lYWNo X3BsYW5lX2RhbWFnZSgmaXRlciwgJmNsaXApCisJCW51bV9oaXRzKys7CisKKwlGQUlMKG51bV9o aXRzICE9IDEsICJTaG91bGQgcmV0dXJuIHBsYW5lIHNyYyBhcyBkYW1hZ2UuIik7CisJRkFJTF9P TighY2hlY2tfZGFtYWdlX2NsaXAoJnN0YXRlLCAmY2xpcCwgNCwgNCwgMTAyOSwgNzczKSk7CisK KwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBpZ3RfZGFtYWdlX2l0ZXJfbm9fZGFtYWdlX25v dF92aXNpYmxlKHZvaWQgKmlnbm9yZWQpCit7CisJc3RydWN0IGRybV9hdG9taWNfaGVscGVyX2Rh bWFnZV9pdGVyIGl0ZXI7CisJc3RydWN0IGRybV9wbGFuZV9zdGF0ZSBvbGRfc3RhdGU7CisJc3Ry dWN0IGRybV9yZWN0IGNsaXA7CisJdWludDMyX3QgbnVtX2hpdHMgPSAwOworCisJc3RydWN0IGRy bV9mcmFtZWJ1ZmZlciBmYiA9IHsKKwkJLndpZHRoID0gMjA0OCwKKwkJLmhlaWdodCA9IDIwNDgK Kwl9OworCisJc3RydWN0IGRybV9wbGFuZV9zdGF0ZSBzdGF0ZSA9IHsKKwkJLmNydGMgPSBaRVJP X1NJWkVfUFRSLAorCQkuZmIgPSAmZmIsCisJCS52aXNpYmxlID0gZmFsc2UsCisJfTsKKworCXNl dF9wbGFuZV9zcmMoJm9sZF9zdGF0ZSwgMCwgMCwgMTAyNCA8PCAxNiwgNzY4IDw8IDE2KTsKKwlz ZXRfcGxhbmVfc3JjKCZzdGF0ZSwgMCwgMCwgMTAyNCA8PCAxNiwgNzY4IDw8IDE2KTsKKwlkcm1f YXRvbWljX2hlbHBlcl9kYW1hZ2VfaXRlcl9pbml0KCZpdGVyLCAmb2xkX3N0YXRlLCAmc3RhdGUp OworCWRybV9hdG9taWNfZm9yX2VhY2hfcGxhbmVfZGFtYWdlKCZpdGVyLCAmY2xpcCkKKwkJbnVt X2hpdHMrKzsKKworCUZBSUwobnVtX2hpdHMgIT0gMCwgIlNob3VsZCBoYXZlIG5vIGRhbWFnZS4i KTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGlndF9kYW1hZ2VfaXRlcl9ub19kYW1h Z2Vfbm9fY3J0Yyh2b2lkICppZ25vcmVkKQoreworCXN0cnVjdCBkcm1fYXRvbWljX2hlbHBlcl9k YW1hZ2VfaXRlciBpdGVyOworCXN0cnVjdCBkcm1fcGxhbmVfc3RhdGUgb2xkX3N0YXRlOworCXN0 cnVjdCBkcm1fcmVjdCBjbGlwOworCXVpbnQzMl90IG51bV9oaXRzID0gMDsKKworCXN0cnVjdCBk cm1fZnJhbWVidWZmZXIgZmIgPSB7CisJCS53aWR0aCA9IDIwNDgsCisJCS5oZWlnaHQgPSAyMDQ4 CisJfTsKKworCXN0cnVjdCBkcm1fcGxhbmVfc3RhdGUgc3RhdGUgPSB7CisJCS5jcnRjID0gMCwK KwkJLmZiID0gJmZiLAorCX07CisKKwlzZXRfcGxhbmVfc3JjKCZvbGRfc3RhdGUsIDAsIDAsIDEw MjQgPDwgMTYsIDc2OCA8PCAxNik7CisJc2V0X3BsYW5lX3NyYygmc3RhdGUsIDAsIDAsIDEwMjQg PDwgMTYsIDc2OCA8PCAxNik7CisJZHJtX2F0b21pY19oZWxwZXJfZGFtYWdlX2l0ZXJfaW5pdCgm aXRlciwgJm9sZF9zdGF0ZSwgJnN0YXRlKTsKKwlkcm1fYXRvbWljX2Zvcl9lYWNoX3BsYW5lX2Rh bWFnZSgmaXRlciwgJmNsaXApCisJCW51bV9oaXRzKys7CisKKwlGQUlMKG51bV9oaXRzICE9IDAs ICJTaG91bGQgaGF2ZSBubyBkYW1hZ2UuIik7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGlu dCBpZ3RfZGFtYWdlX2l0ZXJfbm9fZGFtYWdlX25vX2ZiKHZvaWQgKmlnbm9yZWQpCit7CisJc3Ry dWN0IGRybV9hdG9taWNfaGVscGVyX2RhbWFnZV9pdGVyIGl0ZXI7CisJc3RydWN0IGRybV9wbGFu ZV9zdGF0ZSBvbGRfc3RhdGU7CisJc3RydWN0IGRybV9yZWN0IGNsaXA7CisJdWludDMyX3QgbnVt X2hpdHMgPSAwOworCisJc3RydWN0IGRybV9wbGFuZV9zdGF0ZSBzdGF0ZSA9IHsKKwkJLmNydGMg PSBaRVJPX1NJWkVfUFRSLAorCQkuZmIgPSAwLAorCX07CisKKwlzZXRfcGxhbmVfc3JjKCZvbGRf c3RhdGUsIDAsIDAsIDEwMjQgPDwgMTYsIDc2OCA8PCAxNik7CisJc2V0X3BsYW5lX3NyYygmc3Rh dGUsIDAsIDAsIDEwMjQgPDwgMTYsIDc2OCA8PCAxNik7CisJZHJtX2F0b21pY19oZWxwZXJfZGFt YWdlX2l0ZXJfaW5pdCgmaXRlciwgJm9sZF9zdGF0ZSwgJnN0YXRlKTsKKwlkcm1fYXRvbWljX2Zv cl9lYWNoX3BsYW5lX2RhbWFnZSgmaXRlciwgJmNsaXApCisJCW51bV9oaXRzKys7CisKKwlGQUlM KG51bV9oaXRzICE9IDAsICJTaG91bGQgaGF2ZSBubyBkYW1hZ2UuIik7CisKKwlyZXR1cm4gMDsK K30KKworc3RhdGljIGludCBpZ3RfZGFtYWdlX2l0ZXJfc2ltcGxlX2RhbWFnZSh2b2lkICppZ25v cmVkKQoreworCXN0cnVjdCBkcm1fYXRvbWljX2hlbHBlcl9kYW1hZ2VfaXRlciBpdGVyOworCXN0 cnVjdCBkcm1fcGxhbmVfc3RhdGUgb2xkX3N0YXRlOworCXN0cnVjdCBkcm1fcHJvcGVydHlfYmxv YiBkYW1hZ2VfYmxvYjsKKwlzdHJ1Y3QgZHJtX21vZGVfcmVjdCBkYW1hZ2U7CisJc3RydWN0IGRy bV9yZWN0IGNsaXA7CisJdWludDMyX3QgbnVtX2hpdHMgPSAwOworCisJc3RydWN0IGRybV9mcmFt ZWJ1ZmZlciBmYiA9IHsKKwkJLndpZHRoID0gMjA0OCwKKwkJLmhlaWdodCA9IDIwNDgKKwl9Owor CisJc3RydWN0IGRybV9wbGFuZV9zdGF0ZSBzdGF0ZSA9IHsKKwkJLmNydGMgPSBaRVJPX1NJWkVf UFRSLAorCQkuZmIgPSAmZmIsCisJCS52aXNpYmxlID0gdHJ1ZSwKKwl9OworCisJc2V0X3BsYW5l X3NyYygmb2xkX3N0YXRlLCAwLCAwLCAxMDI0IDw8IDE2LCA3NjggPDwgMTYpOworCXNldF9wbGFu ZV9zcmMoJnN0YXRlLCAwLCAwLCAxMDI0IDw8IDE2LCA3NjggPDwgMTYpOworCS8qIERhbWFnZSBz ZXQgdG8gcGxhbmUgc3JjICovCisJc2V0X2RhbWFnZV9jbGlwKCZkYW1hZ2UsIDAsIDAsIDEwMjQs IDc2OCk7CisJc2V0X2RhbWFnZV9ibG9iKCZkYW1hZ2VfYmxvYiwgJmRhbWFnZSwgc2l6ZW9mKGRh bWFnZSkpOworCXNldF9wbGFuZV9kYW1hZ2UoJnN0YXRlLCAmZGFtYWdlX2Jsb2IpOworCWRybV9h dG9taWNfaGVscGVyX2RhbWFnZV9pdGVyX2luaXQoJml0ZXIsICZvbGRfc3RhdGUsICZzdGF0ZSk7 CisJZHJtX2F0b21pY19mb3JfZWFjaF9wbGFuZV9kYW1hZ2UoJml0ZXIsICZjbGlwKQorCQludW1f aGl0cysrOworCisJRkFJTChudW1faGl0cyAhPSAxLCAiU2hvdWxkIHJldHVybiBkYW1hZ2Ugd2hl biBzZXQuIik7CisJRkFJTF9PTighY2hlY2tfZGFtYWdlX2NsaXAoJnN0YXRlLCAmY2xpcCwgMCwg MCwgMTAyNCwgNzY4KSk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBpZ3RfZGFtYWdl X2l0ZXJfc2luZ2xlX2RhbWFnZSh2b2lkICppZ25vcmVkKQoreworCXN0cnVjdCBkcm1fYXRvbWlj X2hlbHBlcl9kYW1hZ2VfaXRlciBpdGVyOworCXN0cnVjdCBkcm1fcGxhbmVfc3RhdGUgb2xkX3N0 YXRlOworCXN0cnVjdCBkcm1fcHJvcGVydHlfYmxvYiBkYW1hZ2VfYmxvYjsKKwlzdHJ1Y3QgZHJt X21vZGVfcmVjdCBkYW1hZ2U7CisJc3RydWN0IGRybV9yZWN0IGNsaXA7CisJdWludDMyX3QgbnVt X2hpdHMgPSAwOworCisJc3RydWN0IGRybV9mcmFtZWJ1ZmZlciBmYiA9IHsKKwkJLndpZHRoID0g MjA0OCwKKwkJLmhlaWdodCA9IDIwNDgKKwl9OworCisJc3RydWN0IGRybV9wbGFuZV9zdGF0ZSBz dGF0ZSA9IHsKKwkJLmNydGMgPSBaRVJPX1NJWkVfUFRSLAorCQkuZmIgPSAmZmIsCisJCS52aXNp YmxlID0gdHJ1ZSwKKwl9OworCisJc2V0X3BsYW5lX3NyYygmb2xkX3N0YXRlLCAwLCAwLCAxMDI0 IDw8IDE2LCA3NjggPDwgMTYpOworCXNldF9wbGFuZV9zcmMoJnN0YXRlLCAwLCAwLCAxMDI0IDw8 IDE2LCA3NjggPDwgMTYpOworCXNldF9kYW1hZ2VfY2xpcCgmZGFtYWdlLCAyNTYsIDE5MiwgNzY4 LCA1NzYpOworCXNldF9kYW1hZ2VfYmxvYigmZGFtYWdlX2Jsb2IsICZkYW1hZ2UsIHNpemVvZihk YW1hZ2UpKTsKKwlzZXRfcGxhbmVfZGFtYWdlKCZzdGF0ZSwgJmRhbWFnZV9ibG9iKTsKKwlkcm1f YXRvbWljX2hlbHBlcl9kYW1hZ2VfaXRlcl9pbml0KCZpdGVyLCAmb2xkX3N0YXRlLCAmc3RhdGUp OworCWRybV9hdG9taWNfZm9yX2VhY2hfcGxhbmVfZGFtYWdlKCZpdGVyLCAmY2xpcCkKKwkJbnVt X2hpdHMrKzsKKworCUZBSUwobnVtX2hpdHMgIT0gMSwgIlNob3VsZCByZXR1cm4gZGFtYWdlIHdo ZW4gc2V0LiIpOworCUZBSUxfT04oIWNoZWNrX2RhbWFnZV9jbGlwKCZzdGF0ZSwgJmNsaXAsIDI1 NiwgMTkyLCA3NjgsIDU3NikpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgaWd0X2Rh bWFnZV9pdGVyX3NpbmdsZV9kYW1hZ2VfaW50ZXJzZWN0X3NyYyh2b2lkICppZ25vcmVkKQorewor CXN0cnVjdCBkcm1fYXRvbWljX2hlbHBlcl9kYW1hZ2VfaXRlciBpdGVyOworCXN0cnVjdCBkcm1f cGxhbmVfc3RhdGUgb2xkX3N0YXRlOworCXN0cnVjdCBkcm1fcHJvcGVydHlfYmxvYiBkYW1hZ2Vf YmxvYjsKKwlzdHJ1Y3QgZHJtX21vZGVfcmVjdCBkYW1hZ2U7CisJc3RydWN0IGRybV9yZWN0IGNs aXA7CisJdWludDMyX3QgbnVtX2hpdHMgPSAwOworCisJc3RydWN0IGRybV9mcmFtZWJ1ZmZlciBm YiA9IHsKKwkJLndpZHRoID0gMjA0OCwKKwkJLmhlaWdodCA9IDIwNDgKKwl9OworCisJc3RydWN0 IGRybV9wbGFuZV9zdGF0ZSBzdGF0ZSA9IHsKKwkJLmNydGMgPSBaRVJPX1NJWkVfUFRSLAorCQku ZmIgPSAmZmIsCisJCS52aXNpYmxlID0gdHJ1ZSwKKwl9OworCisJc2V0X3BsYW5lX3NyYygmb2xk X3N0YXRlLCAwLCAwLCAxMDI0IDw8IDE2LCA3NjggPDwgMTYpOworCXNldF9wbGFuZV9zcmMoJnN0 YXRlLCAwLCAwLCAxMDI0IDw8IDE2LCA3NjggPDwgMTYpOworCS8qIERhbWFnZSBpbnRlcnNlY3Qg d2l0aCBwbGFuZSBzcmMuICovCisJc2V0X2RhbWFnZV9jbGlwKCZkYW1hZ2UsIDI1NiwgMTkyLCAx MzYwLCA3NjgpOworCXNldF9kYW1hZ2VfYmxvYigmZGFtYWdlX2Jsb2IsICZkYW1hZ2UsIHNpemVv ZihkYW1hZ2UpKTsKKwlzZXRfcGxhbmVfZGFtYWdlKCZzdGF0ZSwgJmRhbWFnZV9ibG9iKTsKKwlk cm1fYXRvbWljX2hlbHBlcl9kYW1hZ2VfaXRlcl9pbml0KCZpdGVyLCAmb2xkX3N0YXRlLCAmc3Rh dGUpOworCWRybV9hdG9taWNfZm9yX2VhY2hfcGxhbmVfZGFtYWdlKCZpdGVyLCAmY2xpcCkKKwkJ bnVtX2hpdHMrKzsKKworCUZBSUwobnVtX2hpdHMgIT0gMSwgIlNob3VsZCByZXR1cm4gZGFtYWdl IGNsaXBwZWQgdG8gc3JjLiIpOworCUZBSUxfT04oIWNoZWNrX2RhbWFnZV9jbGlwKCZzdGF0ZSwg JmNsaXAsIDI1NiwgMTkyLCAxMDI0LCA3NjgpKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMg aW50IGlndF9kYW1hZ2VfaXRlcl9zaW5nbGVfZGFtYWdlX291dHNpZGVfc3JjKHZvaWQgKmlnbm9y ZWQpCit7CisJc3RydWN0IGRybV9hdG9taWNfaGVscGVyX2RhbWFnZV9pdGVyIGl0ZXI7CisJc3Ry dWN0IGRybV9wbGFuZV9zdGF0ZSBvbGRfc3RhdGU7CisJc3RydWN0IGRybV9wcm9wZXJ0eV9ibG9i IGRhbWFnZV9ibG9iOworCXN0cnVjdCBkcm1fbW9kZV9yZWN0IGRhbWFnZTsKKwlzdHJ1Y3QgZHJt X3JlY3QgY2xpcDsKKwl1aW50MzJfdCBudW1faGl0cyA9IDA7CisKKwlzdHJ1Y3QgZHJtX2ZyYW1l YnVmZmVyIGZiID0geworCQkud2lkdGggPSAyMDQ4LAorCQkuaGVpZ2h0ID0gMjA0OAorCX07CisK KwlzdHJ1Y3QgZHJtX3BsYW5lX3N0YXRlIHN0YXRlID0geworCQkuY3J0YyA9IFpFUk9fU0laRV9Q VFIsCisJCS5mYiA9ICZmYiwKKwkJLnZpc2libGUgPSB0cnVlLAorCX07CisKKwlzZXRfcGxhbmVf c3JjKCZvbGRfc3RhdGUsIDAsIDAsIDEwMjQgPDwgMTYsIDc2OCA8PCAxNik7CisJc2V0X3BsYW5l X3NyYygmc3RhdGUsIDAsIDAsIDEwMjQgPDwgMTYsIDc2OCA8PCAxNik7CisJLyogRGFtYWdlIGNs aXAgb3V0c2lkZSBwbGFuZSBzcmMgKi8KKwlzZXRfZGFtYWdlX2NsaXAoJmRhbWFnZSwgMTM2MCwg MTM2MCwgMTM4MCwgMTM4MCk7CisJc2V0X2RhbWFnZV9ibG9iKCZkYW1hZ2VfYmxvYiwgJmRhbWFn ZSwgc2l6ZW9mKGRhbWFnZSkpOworCXNldF9wbGFuZV9kYW1hZ2UoJnN0YXRlLCAmZGFtYWdlX2Js b2IpOworCWRybV9hdG9taWNfaGVscGVyX2RhbWFnZV9pdGVyX2luaXQoJml0ZXIsICZvbGRfc3Rh dGUsICZzdGF0ZSk7CisJZHJtX2F0b21pY19mb3JfZWFjaF9wbGFuZV9kYW1hZ2UoJml0ZXIsICZj bGlwKQorCQludW1faGl0cysrOworCisJRkFJTChudW1faGl0cyAhPSAwLCAiU2hvdWxkIGhhdmUg bm8gZGFtYWdlLiIpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgaWd0X2RhbWFnZV9p dGVyX3NpbmdsZV9kYW1hZ2VfZnJhY3Rpb25hbF9zcmModm9pZCAqaWdub3JlZCkKK3sKKwlzdHJ1 Y3QgZHJtX2F0b21pY19oZWxwZXJfZGFtYWdlX2l0ZXIgaXRlcjsKKwlzdHJ1Y3QgZHJtX3BsYW5l X3N0YXRlIG9sZF9zdGF0ZTsKKwlzdHJ1Y3QgZHJtX3Byb3BlcnR5X2Jsb2IgZGFtYWdlX2Jsb2I7 CisJc3RydWN0IGRybV9tb2RlX3JlY3QgZGFtYWdlOworCXN0cnVjdCBkcm1fcmVjdCBjbGlwOwor CXVpbnQzMl90IG51bV9oaXRzID0gMDsKKworCXN0cnVjdCBkcm1fZnJhbWVidWZmZXIgZmIgPSB7 CisJCS53aWR0aCA9IDIwNDgsCisJCS5oZWlnaHQgPSAyMDQ4CisJfTsKKworCXN0cnVjdCBkcm1f cGxhbmVfc3RhdGUgc3RhdGUgPSB7CisJCS5jcnRjID0gWkVST19TSVpFX1BUUiwKKwkJLmZiID0g JmZiLAorCQkudmlzaWJsZSA9IHRydWUsCisJfTsKKworCS8qIFBsYW5lIHNyYyBoYXMgZnJhY3Rp b25hbCBwYXJ0LiAqLworCXNldF9wbGFuZV9zcmMoJm9sZF9zdGF0ZSwgMHg0MDAwMiwgMHg0MDAw MiwKKwkJICAgICAgMHg0MDAwMiArICgxMDI0IDw8IDE2KSwgMHg0MDAwMiArICg3NjggPDwgMTYp KTsKKwlzZXRfcGxhbmVfc3JjKCZzdGF0ZSwgMHg0MDAwMiwgMHg0MDAwMiwKKwkJICAgICAgMHg0 MDAwMiArICgxMDI0IDw8IDE2KSwgMHg0MDAwMiArICg3NjggPDwgMTYpKTsKKwlzZXRfZGFtYWdl X2NsaXAoJmRhbWFnZSwgMTAsIDEwLCAyNTYsIDMzMCk7CisJc2V0X2RhbWFnZV9ibG9iKCZkYW1h Z2VfYmxvYiwgJmRhbWFnZSwgc2l6ZW9mKGRhbWFnZSkpOworCXNldF9wbGFuZV9kYW1hZ2UoJnN0 YXRlLCAmZGFtYWdlX2Jsb2IpOworCWRybV9hdG9taWNfaGVscGVyX2RhbWFnZV9pdGVyX2luaXQo Jml0ZXIsICZvbGRfc3RhdGUsICZzdGF0ZSk7CisJZHJtX2F0b21pY19mb3JfZWFjaF9wbGFuZV9k YW1hZ2UoJml0ZXIsICZjbGlwKQorCQludW1faGl0cysrOworCisJRkFJTChudW1faGl0cyAhPSAx LCAiU2hvdWxkIHJldHVybiBkYW1hZ2Ugd2hlbiBzZXQuIik7CisJRkFJTF9PTighY2hlY2tfZGFt YWdlX2NsaXAoJnN0YXRlLCAmY2xpcCwgMTAsIDEwLCAyNTYsIDMzMCkpOworCisJcmV0dXJuIDA7 Cit9CisKK3N0YXRpYyBpbnQgaWd0X2RhbWFnZV9pdGVyX3NpbmdsZV9kYW1hZ2VfaW50ZXJzZWN0 X2ZyYWN0aW9uYWxfc3JjKHZvaWQgKmlnbm9yZWQpCit7CisJc3RydWN0IGRybV9hdG9taWNfaGVs cGVyX2RhbWFnZV9pdGVyIGl0ZXI7CisJc3RydWN0IGRybV9wbGFuZV9zdGF0ZSBvbGRfc3RhdGU7 CisJc3RydWN0IGRybV9wcm9wZXJ0eV9ibG9iIGRhbWFnZV9ibG9iOworCXN0cnVjdCBkcm1fbW9k ZV9yZWN0IGRhbWFnZTsKKwlzdHJ1Y3QgZHJtX3JlY3QgY2xpcDsKKwl1aW50MzJfdCBudW1faGl0 cyA9IDA7CisKKwlzdHJ1Y3QgZHJtX2ZyYW1lYnVmZmVyIGZiID0geworCQkud2lkdGggPSAyMDQ4 LAorCQkuaGVpZ2h0ID0gMjA0OAorCX07CisKKwlzdHJ1Y3QgZHJtX3BsYW5lX3N0YXRlIHN0YXRl ID0geworCQkuY3J0YyA9IFpFUk9fU0laRV9QVFIsCisJCS5mYiA9ICZmYiwKKwkJLnZpc2libGUg PSB0cnVlLAorCX07CisKKwkvKiBQbGFuZSBzcmMgaGFzIGZyYWN0aW9uYWwgcGFydC4gKi8KKwlz ZXRfcGxhbmVfc3JjKCZvbGRfc3RhdGUsIDB4NDAwMDIsIDB4NDAwMDIsCisJCSAgICAgIDB4NDAw MDIgKyAoMTAyNCA8PCAxNiksIDB4NDAwMDIgKyAoNzY4IDw8IDE2KSk7CisJc2V0X3BsYW5lX3Ny Yygmc3RhdGUsIDB4NDAwMDIsIDB4NDAwMDIsCisJCSAgICAgIDB4NDAwMDIgKyAoMTAyNCA8PCAx NiksIDB4NDAwMDIgKyAoNzY4IDw8IDE2KSk7CisJLyogRGFtYWdlIGludGVyc2VjdCB3aXRoIHBs YW5lIHNyYy4gKi8KKwlzZXRfZGFtYWdlX2NsaXAoJmRhbWFnZSwgMTAsIDEsIDEzNjAsIDMzMCk7 CisJc2V0X2RhbWFnZV9ibG9iKCZkYW1hZ2VfYmxvYiwgJmRhbWFnZSwgc2l6ZW9mKGRhbWFnZSkp OworCXNldF9wbGFuZV9kYW1hZ2UoJnN0YXRlLCAmZGFtYWdlX2Jsb2IpOworCWRybV9hdG9taWNf aGVscGVyX2RhbWFnZV9pdGVyX2luaXQoJml0ZXIsICZvbGRfc3RhdGUsICZzdGF0ZSk7CisJZHJt X2F0b21pY19mb3JfZWFjaF9wbGFuZV9kYW1hZ2UoJml0ZXIsICZjbGlwKQorCQludW1faGl0cysr OworCisJRkFJTChudW1faGl0cyAhPSAxLCAiU2hvdWxkIHJldHVybiBkYW1hZ2UgY2xpcHBlZCB0 byByb3VuZGVkIG9mZiBzcmMuIik7CisJRkFJTF9PTighY2hlY2tfZGFtYWdlX2NsaXAoJnN0YXRl LCAmY2xpcCwgMTAsIDQsIDEwMjksIDMzMCkpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBp bnQgaWd0X2RhbWFnZV9pdGVyX3NpbmdsZV9kYW1hZ2Vfb3V0c2lkZV9mcmFjdGlvbmFsX3NyYyh2 b2lkICppZ25vcmVkKQoreworCXN0cnVjdCBkcm1fYXRvbWljX2hlbHBlcl9kYW1hZ2VfaXRlciBp dGVyOworCXN0cnVjdCBkcm1fcGxhbmVfc3RhdGUgb2xkX3N0YXRlOworCXN0cnVjdCBkcm1fcHJv cGVydHlfYmxvYiBkYW1hZ2VfYmxvYjsKKwlzdHJ1Y3QgZHJtX21vZGVfcmVjdCBkYW1hZ2U7CisJ c3RydWN0IGRybV9yZWN0IGNsaXA7CisJdWludDMyX3QgbnVtX2hpdHMgPSAwOworCisJc3RydWN0 IGRybV9mcmFtZWJ1ZmZlciBmYiA9IHsKKwkJLndpZHRoID0gMjA0OCwKKwkJLmhlaWdodCA9IDIw NDgKKwl9OworCisJc3RydWN0IGRybV9wbGFuZV9zdGF0ZSBzdGF0ZSA9IHsKKwkJLmNydGMgPSBa RVJPX1NJWkVfUFRSLAorCQkuZmIgPSAmZmIsCisJCS52aXNpYmxlID0gdHJ1ZSwKKwl9OworCisJ LyogUGxhbmUgc3JjIGhhcyBmcmFjdGlvbmFsIHBhcnQuICovCisJc2V0X3BsYW5lX3NyYygmb2xk X3N0YXRlLCAweDQwMDAyLCAweDQwMDAyLAorCQkgICAgICAweDQwMDAyICsgKDEwMjQgPDwgMTYp LCAweDQwMDAyICsgKDc2OCA8PCAxNikpOworCXNldF9wbGFuZV9zcmMoJnN0YXRlLCAweDQwMDAy LCAweDQwMDAyLAorCQkgICAgICAweDQwMDAyICsgKDEwMjQgPDwgMTYpLCAweDQwMDAyICsgKDc2 OCA8PCAxNikpOworCS8qIERhbWFnZSBjbGlwIG91dHNpZGUgcGxhbmUgc3JjICovCisJc2V0X2Rh bWFnZV9jbGlwKCZkYW1hZ2UsIDEzNjAsIDEzNjAsIDEzODAsIDEzODApOworCXNldF9kYW1hZ2Vf YmxvYigmZGFtYWdlX2Jsb2IsICZkYW1hZ2UsIHNpemVvZihkYW1hZ2UpKTsKKwlzZXRfcGxhbmVf ZGFtYWdlKCZzdGF0ZSwgJmRhbWFnZV9ibG9iKTsKKwlkcm1fYXRvbWljX2hlbHBlcl9kYW1hZ2Vf aXRlcl9pbml0KCZpdGVyLCAmb2xkX3N0YXRlLCAmc3RhdGUpOworCWRybV9hdG9taWNfZm9yX2Vh Y2hfcGxhbmVfZGFtYWdlKCZpdGVyLCAmY2xpcCkKKwkJbnVtX2hpdHMrKzsKKworCUZBSUwobnVt X2hpdHMgIT0gMCwgIlNob3VsZCBoYXZlIG5vIGRhbWFnZS4iKTsKKworCXJldHVybiAwOworfQor CitzdGF0aWMgaW50IGlndF9kYW1hZ2VfaXRlcl9zaW5nbGVfZGFtYWdlX3NyY19tb3ZlZCh2b2lk ICppZ25vcmVkKQoreworCXN0cnVjdCBkcm1fYXRvbWljX2hlbHBlcl9kYW1hZ2VfaXRlciBpdGVy OworCXN0cnVjdCBkcm1fcGxhbmVfc3RhdGUgb2xkX3N0YXRlOworCXN0cnVjdCBkcm1fcHJvcGVy dHlfYmxvYiBkYW1hZ2VfYmxvYjsKKwlzdHJ1Y3QgZHJtX21vZGVfcmVjdCBkYW1hZ2U7CisJc3Ry dWN0IGRybV9yZWN0IGNsaXA7CisJdWludDMyX3QgbnVtX2hpdHMgPSAwOworCisJc3RydWN0IGRy bV9mcmFtZWJ1ZmZlciBmYiA9IHsKKwkJLndpZHRoID0gMjA0OCwKKwkJLmhlaWdodCA9IDIwNDgK Kwl9OworCisJc3RydWN0IGRybV9wbGFuZV9zdGF0ZSBzdGF0ZSA9IHsKKwkJLmNydGMgPSBaRVJP X1NJWkVfUFRSLAorCQkuZmIgPSAmZmIsCisJCS52aXNpYmxlID0gdHJ1ZSwKKwl9OworCisJLyog UGxhbmUgc3JjIG1vdmVkIHNpbmNlIG9sZCBwbGFuZSBzdGF0ZS4gKi8KKwlzZXRfcGxhbmVfc3Jj KCZvbGRfc3RhdGUsIDAsIDAsIDEwMjQgPDwgMTYsIDc2OCA8PCAxNik7CisJc2V0X3BsYW5lX3Ny Yygmc3RhdGUsIDEwIDw8IDE2LCAxMCA8PCAxNiwKKwkJICAgICAgKDEwICsgMTAyNCkgPDwgMTYs ICgxMCArIDc2OCkgPDwgMTYpOworCXNldF9kYW1hZ2VfY2xpcCgmZGFtYWdlLCAyMCwgMzAsIDI1 NiwgMjU2KTsKKwlzZXRfZGFtYWdlX2Jsb2IoJmRhbWFnZV9ibG9iLCAmZGFtYWdlLCBzaXplb2Yo ZGFtYWdlKSk7CisJc2V0X3BsYW5lX2RhbWFnZSgmc3RhdGUsICZkYW1hZ2VfYmxvYik7CisJZHJt X2F0b21pY19oZWxwZXJfZGFtYWdlX2l0ZXJfaW5pdCgmaXRlciwgJm9sZF9zdGF0ZSwgJnN0YXRl KTsKKwlkcm1fYXRvbWljX2Zvcl9lYWNoX3BsYW5lX2RhbWFnZSgmaXRlciwgJmNsaXApCisJCW51 bV9oaXRzKys7CisKKwlGQUlMKG51bV9oaXRzICE9IDEsICJTaG91bGQgcmV0dXJuIHBsYW5lIHNy YyBhcyBkYW1hZ2UuIik7CisJRkFJTF9PTighY2hlY2tfZGFtYWdlX2NsaXAoJnN0YXRlLCAmY2xp cCwgMTAsIDEwLCAxMDM0LCA3NzgpKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGln dF9kYW1hZ2VfaXRlcl9zaW5nbGVfZGFtYWdlX2ZyYWN0aW9uYWxfc3JjX21vdmVkKHZvaWQgKmln bm9yZWQpCit7CisJc3RydWN0IGRybV9hdG9taWNfaGVscGVyX2RhbWFnZV9pdGVyIGl0ZXI7CisJ c3RydWN0IGRybV9wbGFuZV9zdGF0ZSBvbGRfc3RhdGU7CisJc3RydWN0IGRybV9wcm9wZXJ0eV9i bG9iIGRhbWFnZV9ibG9iOworCXN0cnVjdCBkcm1fbW9kZV9yZWN0IGRhbWFnZTsKKwlzdHJ1Y3Qg ZHJtX3JlY3QgY2xpcDsKKwl1aW50MzJfdCBudW1faGl0cyA9IDA7CisKKwlzdHJ1Y3QgZHJtX2Zy YW1lYnVmZmVyIGZiID0geworCQkud2lkdGggPSAyMDQ4LAorCQkuaGVpZ2h0ID0gMjA0OAorCX07 CisKKwlzdHJ1Y3QgZHJtX3BsYW5lX3N0YXRlIHN0YXRlID0geworCQkuY3J0YyA9IFpFUk9fU0la RV9QVFIsCisJCS5mYiA9ICZmYiwKKwkJLnZpc2libGUgPSB0cnVlLAorCX07CisKKwkvKiBQbGFu ZSBzcmMgd2l0aCBmcmFjdGlvbmFsIHBhcnQgbW92ZWQgc2luY2Ugb2xkIHBsYW5lIHN0YXRlLiAq LworCXNldF9wbGFuZV9zcmMoJm9sZF9zdGF0ZSwgMHgzZmZmZSwgMHgzZmZmZSwKKwkJICAgICAg MHgzZmZmZSArICgxMDI0IDw8IDE2KSwgMHgzZmZmZSArICg3NjggPDwgMTYpKTsKKwlzZXRfcGxh bmVfc3JjKCZzdGF0ZSwgMHg0MDAwMiwgMHg0MDAwMiwKKwkJICAgICAgMHg0MDAwMiArICgxMDI0 IDw8IDE2KSwgMHg0MDAwMiArICg3NjggPDwgMTYpKTsKKwkvKiBEYW1hZ2UgaW50ZXJzZWN0IHdp dGggcGxhbmUgc3JjLiAqLworCXNldF9kYW1hZ2VfY2xpcCgmZGFtYWdlLCAyMCwgMzAsIDEzNjAs IDI1Nik7CisJc2V0X2RhbWFnZV9ibG9iKCZkYW1hZ2VfYmxvYiwgJmRhbWFnZSwgc2l6ZW9mKGRh bWFnZSkpOworCXNldF9wbGFuZV9kYW1hZ2UoJnN0YXRlLCAmZGFtYWdlX2Jsb2IpOworCWRybV9h dG9taWNfaGVscGVyX2RhbWFnZV9pdGVyX2luaXQoJml0ZXIsICZvbGRfc3RhdGUsICZzdGF0ZSk7 CisJZHJtX2F0b21pY19mb3JfZWFjaF9wbGFuZV9kYW1hZ2UoJml0ZXIsICZjbGlwKQorCQludW1f aGl0cysrOworCisJRkFJTChudW1faGl0cyAhPSAxLCAiU2hvdWxkIHJldHVybiByb3VuZGVkIG9m ZiBwbGFuZSBzcmMgYXMgZGFtYWdlLiIpOworCUZBSUxfT04oIWNoZWNrX2RhbWFnZV9jbGlwKCZz dGF0ZSwgJmNsaXAsIDQsIDQsIDEwMjksIDc3MykpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRp YyBpbnQgaWd0X2RhbWFnZV9pdGVyX2RhbWFnZSh2b2lkICppZ25vcmVkKQoreworCXN0cnVjdCBk cm1fYXRvbWljX2hlbHBlcl9kYW1hZ2VfaXRlciBpdGVyOworCXN0cnVjdCBkcm1fcGxhbmVfc3Rh dGUgb2xkX3N0YXRlOworCXN0cnVjdCBkcm1fcHJvcGVydHlfYmxvYiBkYW1hZ2VfYmxvYjsKKwlz dHJ1Y3QgZHJtX21vZGVfcmVjdCBkYW1hZ2VbMl07CisJc3RydWN0IGRybV9yZWN0IGNsaXA7CisJ dWludDMyX3QgbnVtX2hpdHMgPSAwOworCisJc3RydWN0IGRybV9mcmFtZWJ1ZmZlciBmYiA9IHsK KwkJLndpZHRoID0gMjA0OCwKKwkJLmhlaWdodCA9IDIwNDgKKwl9OworCisJc3RydWN0IGRybV9w bGFuZV9zdGF0ZSBzdGF0ZSA9IHsKKwkJLmNydGMgPSBaRVJPX1NJWkVfUFRSLAorCQkuZmIgPSAm ZmIsCisJCS52aXNpYmxlID0gdHJ1ZSwKKwl9OworCisJc2V0X3BsYW5lX3NyYygmb2xkX3N0YXRl LCAwLCAwLCAxMDI0IDw8IDE2LCA3NjggPDwgMTYpOworCXNldF9wbGFuZV9zcmMoJnN0YXRlLCAw LCAwLCAxMDI0IDw8IDE2LCA3NjggPDwgMTYpOworCS8qIDIgZGFtYWdlIGNsaXBzLiAqLworCXNl dF9kYW1hZ2VfY2xpcCgmZGFtYWdlWzBdLCAyMCwgMzAsIDIwMCwgMTgwKTsKKwlzZXRfZGFtYWdl X2NsaXAoJmRhbWFnZVsxXSwgMjQwLCAyMDAsIDI4MCwgMjUwKTsKKwlzZXRfZGFtYWdlX2Jsb2Io JmRhbWFnZV9ibG9iLCAmZGFtYWdlWzBdLCBzaXplb2YoZGFtYWdlKSk7CisJc2V0X3BsYW5lX2Rh bWFnZSgmc3RhdGUsICZkYW1hZ2VfYmxvYik7CisJZHJtX2F0b21pY19oZWxwZXJfZGFtYWdlX2l0 ZXJfaW5pdCgmaXRlciwgJm9sZF9zdGF0ZSwgJnN0YXRlKTsKKwlkcm1fYXRvbWljX2Zvcl9lYWNo X3BsYW5lX2RhbWFnZSgmaXRlciwgJmNsaXApIHsKKwkJaWYgKG51bV9oaXRzID09IDApCisJCQlG QUlMX09OKCFjaGVja19kYW1hZ2VfY2xpcCgmc3RhdGUsICZjbGlwLCAyMCwgMzAsIDIwMCwgMTgw KSk7CisJCWlmIChudW1faGl0cyA9PSAxKQorCQkJRkFJTF9PTighY2hlY2tfZGFtYWdlX2NsaXAo JnN0YXRlLCAmY2xpcCwgMjQwLCAyMDAsIDI4MCwgMjUwKSk7CisJCW51bV9oaXRzKys7CisJfQor CisJRkFJTChudW1faGl0cyAhPSAyLCAiU2hvdWxkIHJldHVybiBkYW1hZ2Ugd2hlbiBzZXQuIik7 CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBpZ3RfZGFtYWdlX2l0ZXJfZGFtYWdlX29u ZV9pbnRlcnNlY3Qodm9pZCAqaWdub3JlZCkKK3sKKwlzdHJ1Y3QgZHJtX2F0b21pY19oZWxwZXJf ZGFtYWdlX2l0ZXIgaXRlcjsKKwlzdHJ1Y3QgZHJtX3BsYW5lX3N0YXRlIG9sZF9zdGF0ZTsKKwlz dHJ1Y3QgZHJtX3Byb3BlcnR5X2Jsb2IgZGFtYWdlX2Jsb2I7CisJc3RydWN0IGRybV9tb2RlX3Jl Y3QgZGFtYWdlWzJdOworCXN0cnVjdCBkcm1fcmVjdCBjbGlwOworCXVpbnQzMl90IG51bV9oaXRz ID0gMDsKKworCXN0cnVjdCBkcm1fZnJhbWVidWZmZXIgZmIgPSB7CisJCS53aWR0aCA9IDIwNDgs CisJCS5oZWlnaHQgPSAyMDQ4CisJfTsKKworCXN0cnVjdCBkcm1fcGxhbmVfc3RhdGUgc3RhdGUg PSB7CisJCS5jcnRjID0gWkVST19TSVpFX1BUUiwKKwkJLmZiID0gJmZiLAorCQkudmlzaWJsZSA9 IHRydWUsCisJfTsKKworCXNldF9wbGFuZV9zcmMoJm9sZF9zdGF0ZSwgMHg0MDAwMiwgMHg0MDAw MiwKKwkJICAgICAgMHg0MDAwMiArICgxMDI0IDw8IDE2KSwgMHg0MDAwMiArICg3NjggPDwgMTYp KTsKKwlzZXRfcGxhbmVfc3JjKCZzdGF0ZSwgMHg0MDAwMiwgMHg0MDAwMiwKKwkJICAgICAgMHg0 MDAwMiArICgxMDI0IDw8IDE2KSwgMHg0MDAwMiArICg3NjggPDwgMTYpKTsKKwkvKiAyIGRhbWFn ZSBjbGlwcywgb25lIGludGVyc2VjdCBwbGFuZSBzcmMuICovCisJc2V0X2RhbWFnZV9jbGlwKCZk YW1hZ2VbMF0sIDIwLCAzMCwgMjAwLCAxODApOworCXNldF9kYW1hZ2VfY2xpcCgmZGFtYWdlWzFd LCAyLCAyLCAxMzYwLCAxMzYwKTsKKwlzZXRfZGFtYWdlX2Jsb2IoJmRhbWFnZV9ibG9iLCAmZGFt YWdlWzBdLCBzaXplb2YoZGFtYWdlKSk7CisJc2V0X3BsYW5lX2RhbWFnZSgmc3RhdGUsICZkYW1h Z2VfYmxvYik7CisJZHJtX2F0b21pY19oZWxwZXJfZGFtYWdlX2l0ZXJfaW5pdCgmaXRlciwgJm9s ZF9zdGF0ZSwgJnN0YXRlKTsKKwlkcm1fYXRvbWljX2Zvcl9lYWNoX3BsYW5lX2RhbWFnZSgmaXRl ciwgJmNsaXApIHsKKwkJaWYgKG51bV9oaXRzID09IDApCisJCQlGQUlMX09OKCFjaGVja19kYW1h Z2VfY2xpcCgmc3RhdGUsICZjbGlwLCAyMCwgMzAsIDIwMCwgMTgwKSk7CisJCWlmIChudW1faGl0 cyA9PSAxKQorCQkJRkFJTF9PTighY2hlY2tfZGFtYWdlX2NsaXAoJnN0YXRlLCAmY2xpcCwgNCwg NCwgMTAyOSwgNzczKSk7CisJCW51bV9oaXRzKys7CisJfQorCisJRkFJTChudW1faGl0cyAhPSAy LCAiU2hvdWxkIHJldHVybiBkYW1hZ2Ugd2hlbiBzZXQuIik7CisKKwlyZXR1cm4gMDsKK30KKwor c3RhdGljIGludCBpZ3RfZGFtYWdlX2l0ZXJfZGFtYWdlX29uZV9vdXRzaWRlKHZvaWQgKmlnbm9y ZWQpCit7CisJc3RydWN0IGRybV9hdG9taWNfaGVscGVyX2RhbWFnZV9pdGVyIGl0ZXI7CisJc3Ry dWN0IGRybV9wbGFuZV9zdGF0ZSBvbGRfc3RhdGU7CisJc3RydWN0IGRybV9wcm9wZXJ0eV9ibG9i IGRhbWFnZV9ibG9iOworCXN0cnVjdCBkcm1fbW9kZV9yZWN0IGRhbWFnZVsyXTsKKwlzdHJ1Y3Qg ZHJtX3JlY3QgY2xpcDsKKwl1aW50MzJfdCBudW1faGl0cyA9IDA7CisKKwlzdHJ1Y3QgZHJtX2Zy YW1lYnVmZmVyIGZiID0geworCQkud2lkdGggPSAyMDQ4LAorCQkuaGVpZ2h0ID0gMjA0OAorCX07 CisKKwlzdHJ1Y3QgZHJtX3BsYW5lX3N0YXRlIHN0YXRlID0geworCQkuY3J0YyA9IFpFUk9fU0la RV9QVFIsCisJCS5mYiA9ICZmYiwKKwkJLnZpc2libGUgPSB0cnVlLAorCX07CisKKwlzZXRfcGxh bmVfc3JjKCZvbGRfc3RhdGUsIDAsIDAsIDEwMjQgPDwgMTYsIDc2OCA8PCAxNik7CisJc2V0X3Bs YW5lX3NyYygmc3RhdGUsIDAsIDAsIDEwMjQgPDwgMTYsIDc2OCA8PCAxNik7CisJLyogMiBkYW1h Z2UgY2xpcHMsIG9uZSBvdXRzaWRlIHBsYW5lIHNyYy4gKi8KKwlzZXRfZGFtYWdlX2NsaXAoJmRh bWFnZVswXSwgMTM2MCwgMTM2MCwgMTM4MCwgMTM4MCk7CisJc2V0X2RhbWFnZV9jbGlwKCZkYW1h Z2VbMV0sIDI0MCwgMjAwLCAyODAsIDI1MCk7CisJc2V0X2RhbWFnZV9ibG9iKCZkYW1hZ2VfYmxv YiwgJmRhbWFnZVswXSwgc2l6ZW9mKGRhbWFnZSkpOworCXNldF9wbGFuZV9kYW1hZ2UoJnN0YXRl LCAmZGFtYWdlX2Jsb2IpOworCWRybV9hdG9taWNfaGVscGVyX2RhbWFnZV9pdGVyX2luaXQoJml0 ZXIsICZvbGRfc3RhdGUsICZzdGF0ZSk7CisJZHJtX2F0b21pY19mb3JfZWFjaF9wbGFuZV9kYW1h Z2UoJml0ZXIsICZjbGlwKQorCQludW1faGl0cysrOworCisJRkFJTChudW1faGl0cyAhPSAxLCAi U2hvdWxkIHJldHVybiBkYW1hZ2Ugd2hlbiBzZXQuIik7CisJRkFJTF9PTighY2hlY2tfZGFtYWdl X2NsaXAoJnN0YXRlLCAmY2xpcCwgMjQwLCAyMDAsIDI4MCwgMjUwKSk7CisKKwlyZXR1cm4gMDsK K30KKworc3RhdGljIGludCBpZ3RfZGFtYWdlX2l0ZXJfZGFtYWdlX3NyY19tb3ZlZCh2b2lkICpp Z25vcmVkKQoreworCXN0cnVjdCBkcm1fYXRvbWljX2hlbHBlcl9kYW1hZ2VfaXRlciBpdGVyOwor CXN0cnVjdCBkcm1fcGxhbmVfc3RhdGUgb2xkX3N0YXRlOworCXN0cnVjdCBkcm1fcHJvcGVydHlf YmxvYiBkYW1hZ2VfYmxvYjsKKwlzdHJ1Y3QgZHJtX21vZGVfcmVjdCBkYW1hZ2VbMl07CisJc3Ry dWN0IGRybV9yZWN0IGNsaXA7CisJdWludDMyX3QgbnVtX2hpdHMgPSAwOworCisJc3RydWN0IGRy bV9mcmFtZWJ1ZmZlciBmYiA9IHsKKwkJLndpZHRoID0gMjA0OCwKKwkJLmhlaWdodCA9IDIwNDgK Kwl9OworCisJc3RydWN0IGRybV9wbGFuZV9zdGF0ZSBzdGF0ZSA9IHsKKwkJLmNydGMgPSBaRVJP X1NJWkVfUFRSLAorCQkuZmIgPSAmZmIsCisJCS52aXNpYmxlID0gdHJ1ZSwKKwl9OworCisJc2V0 X3BsYW5lX3NyYygmb2xkX3N0YXRlLCAweDQwMDAyLCAweDQwMDAyLAorCQkgICAgICAweDQwMDAy ICsgKDEwMjQgPDwgMTYpLCAweDQwMDAyICsgKDc2OCA8PCAxNikpOworCXNldF9wbGFuZV9zcmMo JnN0YXRlLCAweDNmZmZlLCAweDNmZmZlLAorCQkgICAgICAweDNmZmZlICsgKDEwMjQgPDwgMTYp LCAweDNmZmZlICsgKDc2OCA8PCAxNikpOworCS8qIDIgZGFtYWdlIGNsaXBzLCBvbmUgb3V0c2lk ZSBwbGFuZSBzcmMuICovCisJc2V0X2RhbWFnZV9jbGlwKCZkYW1hZ2VbMF0sIDEzNjAsIDEzNjAs IDEzODAsIDEzODApOworCXNldF9kYW1hZ2VfY2xpcCgmZGFtYWdlWzFdLCAyNDAsIDIwMCwgMjgw LCAyNTApOworCXNldF9kYW1hZ2VfYmxvYigmZGFtYWdlX2Jsb2IsICZkYW1hZ2VbMF0sIHNpemVv ZihkYW1hZ2UpKTsKKwlzZXRfcGxhbmVfZGFtYWdlKCZzdGF0ZSwgJmRhbWFnZV9ibG9iKTsKKwlk cm1fYXRvbWljX2hlbHBlcl9kYW1hZ2VfaXRlcl9pbml0KCZpdGVyLCAmb2xkX3N0YXRlLCAmc3Rh dGUpOworCWRybV9hdG9taWNfZm9yX2VhY2hfcGxhbmVfZGFtYWdlKCZpdGVyLCAmY2xpcCkKKwkJ bnVtX2hpdHMrKzsKKworCUZBSUwobnVtX2hpdHMgIT0gMSwgIlNob3VsZCByZXR1cm4gcm91bmQg b2ZmIHBsYW5lIHNyYyBhcyBkYW1hZ2UuIik7CisJRkFJTF9PTighY2hlY2tfZGFtYWdlX2NsaXAo JnN0YXRlLCAmY2xpcCwgMywgMywgMTAyOCwgNzcyKSk7CisKKwlyZXR1cm4gMDsKK30KKworc3Rh dGljIGludCBpZ3RfZGFtYWdlX2l0ZXJfZGFtYWdlX25vdF92aXNpYmxlKHZvaWQgKmlnbm9yZWQp Cit7CisJc3RydWN0IGRybV9hdG9taWNfaGVscGVyX2RhbWFnZV9pdGVyIGl0ZXI7CisJc3RydWN0 IGRybV9wbGFuZV9zdGF0ZSBvbGRfc3RhdGU7CisJc3RydWN0IGRybV9wcm9wZXJ0eV9ibG9iIGRh bWFnZV9ibG9iOworCXN0cnVjdCBkcm1fbW9kZV9yZWN0IGRhbWFnZVsyXTsKKwlzdHJ1Y3QgZHJt X3JlY3QgY2xpcDsKKwl1aW50MzJfdCBudW1faGl0cyA9IDA7CisKKwlzdHJ1Y3QgZHJtX2ZyYW1l YnVmZmVyIGZiID0geworCQkud2lkdGggPSAyMDQ4LAorCQkuaGVpZ2h0ID0gMjA0OAorCX07CisK KwlzdHJ1Y3QgZHJtX3BsYW5lX3N0YXRlIHN0YXRlID0geworCQkuY3J0YyA9IFpFUk9fU0laRV9Q VFIsCisJCS5mYiA9ICZmYiwKKwkJLnZpc2libGUgPSBmYWxzZSwKKwl9OworCisJc2V0X3BsYW5l X3NyYygmb2xkX3N0YXRlLCAweDQwMDAyLCAweDQwMDAyLAorCQkgICAgICAweDQwMDAyICsgKDEw MjQgPDwgMTYpLCAweDQwMDAyICsgKDc2OCA8PCAxNikpOworCXNldF9wbGFuZV9zcmMoJnN0YXRl LCAweDNmZmZlLCAweDNmZmZlLAorCQkgICAgICAweDNmZmZlICsgKDEwMjQgPDwgMTYpLCAweDNm ZmZlICsgKDc2OCA8PCAxNikpOworCS8qIDIgZGFtYWdlIGNsaXBzLCBvbmUgb3V0c2lkZSBwbGFu ZSBzcmMuICovCisJc2V0X2RhbWFnZV9jbGlwKCZkYW1hZ2VbMF0sIDEzNjAsIDEzNjAsIDEzODAs IDEzODApOworCXNldF9kYW1hZ2VfY2xpcCgmZGFtYWdlWzFdLCAyNDAsIDIwMCwgMjgwLCAyNTAp OworCXNldF9kYW1hZ2VfYmxvYigmZGFtYWdlX2Jsb2IsICZkYW1hZ2VbMF0sIHNpemVvZihkYW1h Z2UpKTsKKwlzZXRfcGxhbmVfZGFtYWdlKCZzdGF0ZSwgJmRhbWFnZV9ibG9iKTsKKwlkcm1fYXRv bWljX2hlbHBlcl9kYW1hZ2VfaXRlcl9pbml0KCZpdGVyLCAmb2xkX3N0YXRlLCAmc3RhdGUpOwor CWRybV9hdG9taWNfZm9yX2VhY2hfcGxhbmVfZGFtYWdlKCZpdGVyLCAmY2xpcCkKKwkJbnVtX2hp dHMrKzsKKworCUZBSUwobnVtX2hpdHMgIT0gMCwgIlNob3VsZCBub3QgcmV0dXJuIGFueSBkYW1h Z2UuIik7CisKKwlyZXR1cm4gMDsKK30KKworI2luY2x1ZGUgImRybV9zZWxmdGVzdC5jIgorCitz dGF0aWMgaW50IF9faW5pdCB0ZXN0X2RybV9kYW1hZ2VfaGVscGVyX2luaXQodm9pZCkKK3sKKwlp bnQgZXJyOworCisJZXJyID0gcnVuX3NlbGZ0ZXN0cyhzZWxmdGVzdHMsIEFSUkFZX1NJWkUoc2Vs ZnRlc3RzKSwgTlVMTCk7CisKKwlyZXR1cm4gZXJyID4gMCA/IDAgOiBlcnI7Cit9CisKK3N0YXRp YyB2b2lkIF9fZXhpdCB0ZXN0X2RybV9kYW1hZ2VfaGVscGVyX2V4aXQodm9pZCkKK3sKK30KKwor bW9kdWxlX2luaXQodGVzdF9kcm1fZGFtYWdlX2hlbHBlcl9pbml0KTsKK21vZHVsZV9leGl0KHRl c3RfZHJtX2RhbWFnZV9oZWxwZXJfZXhpdCk7CisKK01PRFVMRV9BVVRIT1IoIlZNd2FyZSBJbmMu Iik7CitNT0RVTEVfTElDRU5TRSgiR1BMIik7Ci0tIAoyLjE3LjEKCl9fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCkludGVsLWdmeCBtYWlsaW5nIGxpc3QKSW50 ZWwtZ2Z4QGxpc3RzLmZyZWVkZXNrdG9wLm9yZwpodHRwczovL2xpc3RzLmZyZWVkZXNrdG9wLm9y Zy9tYWlsbWFuL2xpc3RpbmZvL2ludGVsLWdmeAo=