From mboxrd@z Thu Jan 1 00:00:00 1970 From: Qiang Yu Subject: [PATCH v3 xserver 2/4] modesetting: move ms_do_pageflip to pageflip.c Date: Mon, 22 Aug 2016 11:53:56 +0800 Message-ID: <1471838038-16382-3-git-send-email-Qiang.Yu@amd.com> References: <1471838038-16382-1-git-send-email-Qiang.Yu@amd.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: In-Reply-To: <1471838038-16382-1-git-send-email-Qiang.Yu-5C7GfCeVMHo@public.gmane.org> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: xorg-devel-bounces-go0+a7rfsptAfugRpC6u6w@public.gmane.org Sender: "xorg-devel" To: xorg-devel-go0+a7rfsptAfugRpC6u6w@public.gmane.org Cc: Qiang Yu , michel-otUistvHUpPR7s880joybQ@public.gmane.org, emil.l.velikov-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org, amd-gfx-PD4FTy7X32lNgt0PjOBp9y5qC8QIuHrW@public.gmane.org List-Id: amd-gfx.lists.freedesktop.org U2lnbmVkLW9mZi1ieTogUWlhbmcgWXUgPFFpYW5nLll1QGFtZC5jb20+ClJldmlld2VkLWJ5OiBN aWNoZWwgRMOkbnplciA8bWljaGVsLmRhZW56ZXJAYW1kLmNvbT4KLS0tCiBody94ZnJlZTg2L2Ry aXZlcnMvbW9kZXNldHRpbmcvTWFrZWZpbGUuYW0gfCAgIDEgKwogaHcveGZyZWU4Ni9kcml2ZXJz L21vZGVzZXR0aW5nL2RyaXZlci5oICAgIHwgIDQ4ICsrKysrKwogaHcveGZyZWU4Ni9kcml2ZXJz L21vZGVzZXR0aW5nL3BhZ2VmbGlwLmMgIHwgMjUxICsrKysrKysrKysrKysrKysrKysrKysrKysr KysKIGh3L3hmcmVlODYvZHJpdmVycy9tb2Rlc2V0dGluZy9wcmVzZW50LmMgICB8IDI1MiAtLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogNCBmaWxlcyBjaGFuZ2VkLCAzMDAgaW5zZXJ0aW9u cygrKSwgMjUyIGRlbGV0aW9ucygtKQogY3JlYXRlIG1vZGUgMTAwNjQ0IGh3L3hmcmVlODYvZHJp dmVycy9tb2Rlc2V0dGluZy9wYWdlZmxpcC5jCgpkaWZmIC0tZ2l0IGEvaHcveGZyZWU4Ni9kcml2 ZXJzL21vZGVzZXR0aW5nL01ha2VmaWxlLmFtIGIvaHcveGZyZWU4Ni9kcml2ZXJzL21vZGVzZXR0 aW5nL01ha2VmaWxlLmFtCmluZGV4IGNhN2UwNWEuLjQ0ODIzYjAgMTAwNjQ0Ci0tLSBhL2h3L3hm cmVlODYvZHJpdmVycy9tb2Rlc2V0dGluZy9NYWtlZmlsZS5hbQorKysgYi9ody94ZnJlZTg2L2Ry aXZlcnMvbW9kZXNldHRpbmcvTWFrZWZpbGUuYW0KQEAgLTU0LDYgKzU0LDcgQEAgbW9kZXNldHRp bmdfZHJ2X2xhX1NPVVJDRVMgPSBcCiAJIHNoMzIyNC5jIFwKIAkgc2gzMjI0LmggXAogCSB2Ymxh bmsuYyBcCisJIHBhZ2VmbGlwLmMgXAogCSAkKE5VTEwpCiAKIGRyaXZlcm1hbmRpciA9ICQoRFJJ VkVSX01BTl9ESVIpCmRpZmYgLS1naXQgYS9ody94ZnJlZTg2L2RyaXZlcnMvbW9kZXNldHRpbmcv ZHJpdmVyLmggYi9ody94ZnJlZTg2L2RyaXZlcnMvbW9kZXNldHRpbmcvZHJpdmVyLmgKaW5kZXgg NDk4YjliZi4uYzBkODBhOCAxMDA2NDQKLS0tIGEvaHcveGZyZWU4Ni9kcml2ZXJzL21vZGVzZXR0 aW5nL2RyaXZlci5oCisrKyBiL2h3L3hmcmVlODYvZHJpdmVycy9tb2Rlc2V0dGluZy9kcml2ZXIu aApAQCAtMTUzLDMgKzE1Myw1MSBAQCBCb29sIG1zX3ZibGFua19zY3JlZW5faW5pdChTY3JlZW5Q dHIgc2NyZWVuKTsKIHZvaWQgbXNfdmJsYW5rX2Nsb3NlX3NjcmVlbihTY3JlZW5QdHIgc2NyZWVu KTsKIAogQm9vbCBtc19wcmVzZW50X3NjcmVlbl9pbml0KFNjcmVlblB0ciBzY3JlZW4pOworCisj aWZkZWYgR0xBTU9SCisKKy8qCisgKiBFdmVudCBkYXRhIGZvciBhbiBpbiBwcm9ncmVzcyBmbGlw LgorICogVGhpcyBjb250YWlucyBhIHBvaW50ZXIgdG8gdGhlIHZibGFuayBldmVudCwKKyAqIGFu ZCBpbmZvcm1hdGlvbiBhYm91dCB0aGUgZmxpcCBpbiBwcm9ncmVzcy4KKyAqIGEgcmVmZXJlbmNl IHRvIHRoaXMgaXMgc3RvcmVkIGluIHRoZSBwZXItY3J0YworICogZmxpcHMuCisgKi8KK3N0cnVj dCBtc19mbGlwZGF0YSB7CisgICAgU2NyZWVuUHRyIHNjcmVlbjsKKyAgICB2b2lkICpldmVudDsK KyAgICAvKiBudW1iZXIgb2YgQ1JUQyBldmVudHMgcmVmZXJlbmNpbmcgdGhpcyAqLworICAgIGlu dCBmbGlwX2NvdW50OworICAgIHVpbnQ2NF90IGZlX21zYzsKKyAgICB1aW50NjRfdCBmZV91c2Vj OworICAgIHVpbnQzMl90IG9sZF9mYl9pZDsKK307CisKKy8qCisgKiBQZXIgY3J0YyBwYWdlZmxp cHBpbmcgaW5mb21hdGlvbiwKKyAqIFRoZXNlIGFyZSBzdWJtaXR0ZWQgdG8gdGhlIHF1ZXVpbmcg Y29kZQorICogb25lIG9mIHRoZW0gcGVyIGNydGMgcGVyIGZsaXAuCisgKi8KK3N0cnVjdCBtc19j cnRjX3BhZ2VmbGlwIHsKKyAgICBCb29sIG9uX3JlZmVyZW5jZV9jcnRjOworICAgIC8qIHJlZmVy ZW5jZSB0byB0aGUgbXNfZmxpcGRhdGEgKi8KKyAgICBzdHJ1Y3QgbXNfZmxpcGRhdGEgKmZsaXBk YXRhOworfTsKKwordHlwZWRlZiB2b2lkICgqbXNfcGFnZWZsaXBfaGFuZGxlcl9wcm9jKSh1aW50 NjRfdCBmcmFtZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWlu dDY0X3QgdXNlYywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdm9p ZCAqZGF0YSk7CisKK3R5cGVkZWYgdm9pZCAoKm1zX3BhZ2VmbGlwX2Fib3J0X3Byb2MpKHZvaWQg KmRhdGEpOworCitpbnQgbXNfZmx1c2hfZHJtX2V2ZW50cyhTY3JlZW5QdHIgc2NyZWVuKTsKKwor Qm9vbCBtc19kb19wYWdlZmxpcChTY3JlZW5QdHIgc2NyZWVuLAorICAgICAgICAgICAgICAgICAg ICBQaXhtYXBQdHIgbmV3X2Zyb250LAorICAgICAgICAgICAgICAgICAgICB2b2lkICpldmVudCwK KyAgICAgICAgICAgICAgICAgICAgaW50IHJlZl9jcnRjX3ZibGFua19waXBlLAorICAgICAgICAg ICAgICAgICAgICBCb29sIGFzeW5jLAorICAgICAgICAgICAgICAgICAgICBtc19wYWdlZmxpcF9o YW5kbGVyX3Byb2MgcGFnZWZsaXBfaGFuZGxlciwKKyAgICAgICAgICAgICAgICAgICAgbXNfcGFn ZWZsaXBfYWJvcnRfcHJvYyBwYWdlZmxpcF9hYm9ydCk7CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEv aHcveGZyZWU4Ni9kcml2ZXJzL21vZGVzZXR0aW5nL3BhZ2VmbGlwLmMgYi9ody94ZnJlZTg2L2Ry aXZlcnMvbW9kZXNldHRpbmcvcGFnZWZsaXAuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAw MDAwMDAwLi40NTQ5NzkyCi0tLSAvZGV2L251bGwKKysrIGIvaHcveGZyZWU4Ni9kcml2ZXJzL21v ZGVzZXR0aW5nL3BhZ2VmbGlwLmMKQEAgLTAsMCArMSwyNTEgQEAKKy8qCisgKiBDb3B5cmlnaHQg wqkgMjAxNCBJbnRlbCBDb3Jwb3JhdGlvbgorICoKKyAqIFBlcm1pc3Npb24gdG8gdXNlLCBjb3B5 LCBtb2RpZnksIGRpc3RyaWJ1dGUsIGFuZCBzZWxsIHRoaXMgc29mdHdhcmUgYW5kIGl0cworICog ZG9jdW1lbnRhdGlvbiBmb3IgYW55IHB1cnBvc2UgaXMgaGVyZWJ5IGdyYW50ZWQgd2l0aG91dCBm ZWUsIHByb3ZpZGVkIHRoYXQKKyAqIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFwcGVhciBp biBhbGwgY29waWVzIGFuZCB0aGF0IGJvdGggdGhhdCBjb3B5cmlnaHQKKyAqIG5vdGljZSBhbmQg dGhpcyBwZXJtaXNzaW9uIG5vdGljZSBhcHBlYXIgaW4gc3VwcG9ydGluZyBkb2N1bWVudGF0aW9u LCBhbmQKKyAqIHRoYXQgdGhlIG5hbWUgb2YgdGhlIGNvcHlyaWdodCBob2xkZXJzIG5vdCBiZSB1 c2VkIGluIGFkdmVydGlzaW5nIG9yCisgKiBwdWJsaWNpdHkgcGVydGFpbmluZyB0byBkaXN0cmli dXRpb24gb2YgdGhlIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMsCisgKiB3cml0dGVuIHByaW9y IHBlcm1pc3Npb24uICBUaGUgY29weXJpZ2h0IGhvbGRlcnMgbWFrZSBubyByZXByZXNlbnRhdGlv bnMKKyAqIGFib3V0IHRoZSBzdWl0YWJpbGl0eSBvZiB0aGlzIHNvZnR3YXJlIGZvciBhbnkgcHVy cG9zZS4gIEl0IGlzIHByb3ZpZGVkICJhcworICogaXMiIHdpdGhvdXQgZXhwcmVzcyBvciBpbXBs aWVkIHdhcnJhbnR5LgorICoKKyAqIFRIRSBDT1BZUklHSFQgSE9MREVSUyBESVNDTEFJTSBBTEwg V0FSUkFOVElFUyBXSVRIIFJFR0FSRCBUTyBUSElTIFNPRlRXQVJFLAorICogSU5DTFVESU5HIEFM TCBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTLCBJTiBO TworICogRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5Z IFNQRUNJQUwsIElORElSRUNUIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgT1IgQU5ZIERB TUFHRVMgV0hBVFNPRVZFUiBSRVNVTFRJTkcgRlJPTSBMT1NTIE9GIFVTRSwKKyAqIERBVEEgT1Ig UFJPRklUUywgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIE5FR0xJR0VOQ0UgT1Ig T1RIRVIKKyAqIFRPUlRJT1VTIEFDVElPTiwgQVJJU0lORyBPVVQgT0YgT1IgSU4gQ09OTkVDVElP TiBXSVRIIFRIRSBVU0UgT1IgUEVSRk9STUFOQ0UKKyAqIE9GIFRISVMgU09GVFdBUkUuCisgKi8K KworI2lmZGVmIEhBVkVfRElYX0NPTkZJR19ICisjaW5jbHVkZSAiZGl4LWNvbmZpZy5oIgorI2Vu ZGlmCisKKyNpbmNsdWRlIDx4c2VydmVyX3BvbGwuaD4KKyNpbmNsdWRlIDx4Zjg2ZHJtLmg+CisK KyNpbmNsdWRlICJkcml2ZXIuaCIKKworI2lmZGVmIEdMQU1PUgorCisvKgorICogRmx1c2ggdGhl IERSTSBldmVudCBxdWV1ZSB3aGVuIGZ1bGw7IG1ha2VzIHNwYWNlIGZvciBuZXcgZXZlbnRzLgor ICoKKyAqIFJldHVybnMgYSBuZWdhdGl2ZSB2YWx1ZSBvbiBlcnJvciwgMCBpZiB0aGVyZSB3YXMg bm90aGluZyB0byBwcm9jZXNzLAorICogb3IgMSBpZiB3ZSBoYW5kbGVkIGFueSBldmVudHMuCisg Ki8KK2ludAorbXNfZmx1c2hfZHJtX2V2ZW50cyhTY3JlZW5QdHIgc2NyZWVuKQoreworICAgIFNj cm5JbmZvUHRyIHNjcm4gPSB4Zjg2U2NyZWVuVG9TY3JuKHNjcmVlbik7CisgICAgbW9kZXNldHRp bmdQdHIgbXMgPSBtb2Rlc2V0dGluZ1BUUihzY3JuKTsKKworICAgIHN0cnVjdCBwb2xsZmQgcCA9 IHsgLmZkID0gbXMtPmZkLCAuZXZlbnRzID0gUE9MTElOIH07CisgICAgaW50IHI7CisKKyAgICBk byB7CisgICAgICAgICAgICByID0geHNlcnZlcl9wb2xsKCZwLCAxLCAwKTsKKyAgICB9IHdoaWxl IChyID09IC0xICYmIChlcnJubyA9PSBFSU5UUiB8fCBlcnJubyA9PSBFQUdBSU4pKTsKKworICAg IC8qIElmIHRoZXJlIHdhcyBhbiBlcnJvciwgciB3aWxsIGJlIDwgMC4gIFJldHVybiB0aGF0LiAg SWYgdGhlcmUgd2FzCisgICAgICogbm90aGluZyB0byBwcm9jZXNzLCByID09IDAuICBSZXR1cm4g dGhhdC4KKyAgICAgKi8KKyAgICBpZiAociA8PSAwKQorICAgICAgICByZXR1cm4gcjsKKworICAg IC8qIFRyeSB0byBoYW5kbGUgdGhlIGV2ZW50LiAgSWYgdGhlcmUgd2FzIGFuIGVycm9yLCByZXR1 cm4gaXQuICovCisgICAgciA9IGRybUhhbmRsZUV2ZW50KG1zLT5mZCwgJm1zLT5ldmVudF9jb250 ZXh0KTsKKyAgICBpZiAociA8IDApCisgICAgICAgIHJldHVybiByOworCisgICAgLyogT3RoZXJ3 aXNlIHJldHVybiAxIHRvIGluZGljYXRlIHRoYXQgd2UgaGFuZGxlZCBhbiBldmVudC4gKi8KKyAg ICByZXR1cm4gMTsKK30KKworc3RhdGljIEJvb2wKK3F1ZXVlX2ZsaXBfb25fY3J0YyhTY3JlZW5Q dHIgc2NyZWVuLCB4Zjg2Q3J0Y1B0ciBjcnRjLAorICAgICAgICAgICAgICAgICAgIHN0cnVjdCBt c19mbGlwZGF0YSAqZmxpcGRhdGEsCisgICAgICAgICAgICAgICAgICAgaW50IHJlZl9jcnRjX3Zi bGFua19waXBlLCB1aW50MzJfdCBmbGFncywKKyAgICAgICAgICAgICAgICAgICBtc19wYWdlZmxp cF9oYW5kbGVyX3Byb2MgcGFnZWZsaXBfaGFuZGxlciwKKyAgICAgICAgICAgICAgICAgICBtc19w YWdlZmxpcF9hYm9ydF9wcm9jIHBhZ2VmbGlwX2Fib3J0KQoreworICAgIFNjcm5JbmZvUHRyIHNj cm4gPSB4Zjg2U2NyZWVuVG9TY3JuKHNjcmVlbik7CisgICAgbW9kZXNldHRpbmdQdHIgbXMgPSBt b2Rlc2V0dGluZ1BUUihzY3JuKTsKKyAgICBkcm1tb2RlX2NydGNfcHJpdmF0ZV9wdHIgZHJtbW9k ZV9jcnRjID0gY3J0Yy0+ZHJpdmVyX3ByaXZhdGU7CisgICAgc3RydWN0IG1zX2NydGNfcGFnZWZs aXAgKmZsaXA7CisgICAgdWludDMyX3Qgc2VxOworICAgIGludCBlcnI7CisKKyAgICBmbGlwID0g Y2FsbG9jKDEsIHNpemVvZihzdHJ1Y3QgbXNfY3J0Y19wYWdlZmxpcCkpOworICAgIGlmIChmbGlw ID09IE5VTEwpIHsKKyAgICAgICAgeGY4NkRydk1zZyhzY3JuLT5zY3JuSW5kZXgsIFhfV0FSTklO RywKKyAgICAgICAgICAgICAgICAgICAiZmxpcCBxdWV1ZTogY2FycmllciBhbGxvYyBmYWlsZWQu XG4iKTsKKyAgICAgICAgcmV0dXJuIEZBTFNFOworICAgIH0KKworICAgIC8qIE9ubHkgdGhlIHJl ZmVyZW5jZSBjcnRjIHdpbGwgZmluYWxseSBkZWxpdmVyIGl0cyBwYWdlIGZsaXAKKyAgICAgKiBj b21wbGV0aW9uIGV2ZW50LiBBbGwgb3RoZXIgY3J0YydzIGV2ZW50cyB3aWxsIGJlIGRpc2NhcmRl ZC4KKyAgICAgKi8KKyAgICBmbGlwLT5vbl9yZWZlcmVuY2VfY3J0YyA9IChkcm1tb2RlX2NydGMt PnZibGFua19waXBlID09IHJlZl9jcnRjX3ZibGFua19waXBlKTsKKyAgICBmbGlwLT5mbGlwZGF0 YSA9IGZsaXBkYXRhOworCisgICAgc2VxID0gbXNfZHJtX3F1ZXVlX2FsbG9jKGNydGMsIGZsaXAs IHBhZ2VmbGlwX2hhbmRsZXIsIHBhZ2VmbGlwX2Fib3J0KTsKKyAgICBpZiAoIXNlcSkgeworICAg ICAgICBmcmVlKGZsaXApOworICAgICAgICByZXR1cm4gRkFMU0U7CisgICAgfQorCisgICAgLyog dGFrZSBhIHJlZmVyZW5jZSBvbiBmbGlwZGF0YSBmb3IgdXNlIGluIGZsaXAgKi8KKyAgICBmbGlw ZGF0YS0+ZmxpcF9jb3VudCsrOworCisgICAgd2hpbGUgKGRybU1vZGVQYWdlRmxpcChtcy0+ZmQs IGRybW1vZGVfY3J0Yy0+bW9kZV9jcnRjLT5jcnRjX2lkLAorICAgICAgICAgICAgICAgICAgICAg ICAgICAgbXMtPmRybW1vZGUuZmJfaWQsIGZsYWdzLCAodm9pZCAqKSAodWludHB0cl90KSBzZXEp KSB7CisgICAgICAgIGVyciA9IGVycm5vOworICAgICAgICAvKiBXZSBtYXkgaGF2ZSBmYWlsZWQg YmVjYXVzZSB0aGUgZXZlbnQgcXVldWUgd2FzIGZ1bGwuICBGbHVzaCBpdAorICAgICAgICAgKiBh bmQgcmV0cnkuICBJZiB0aGVyZSB3YXMgbm90aGluZyB0byBmbHVzaCwgdGhlbiB3ZSBmYWlsZWQg Zm9yCisgICAgICAgICAqIHNvbWUgb3RoZXIgcmVhc29uIGFuZCBzaG91bGQganVzdCByZXR1cm4g YW4gZXJyb3IuCisgICAgICAgICAqLworICAgICAgICBpZiAobXNfZmx1c2hfZHJtX2V2ZW50cyhz Y3JlZW4pIDw9IDApIHsKKyAgICAgICAgICAgIHhmODZEcnZNc2coc2Nybi0+c2NybkluZGV4LCBY X1dBUk5JTkcsCisgICAgICAgICAgICAgICAgICAgICAgICJmbGlwIHF1ZXVlIGZhaWxlZDogJXNc biIsIHN0cmVycm9yKGVycikpOworICAgICAgICAgICAgLyogQWJvcnRpbmcgd2lsbCBhbHNvIGRl Y3JlbWVudCBmbGlwX2NvdW50IGFuZCBmcmVlKGZsaXApLiAqLworICAgICAgICAgICAgbXNfZHJt X2Fib3J0X3NlcShzY3JuLCBzZXEpOworICAgICAgICAgICAgcmV0dXJuIEZBTFNFOworICAgICAg ICB9CisKKyAgICAgICAgLyogV2UgZmx1c2hlZCBzb21lIGV2ZW50cywgc28gdHJ5IGFnYWluLiAq LworICAgICAgICB4Zjg2RHJ2TXNnKHNjcm4tPnNjcm5JbmRleCwgWF9XQVJOSU5HLCAiZmxpcCBx dWV1ZSByZXRyeVxuIik7CisgICAgfQorCisgICAgLyogVGhlIHBhZ2UgZmxpcCBzdWNjZWRlZC4g Ki8KKyAgICByZXR1cm4gVFJVRTsKK30KKworCitCb29sCittc19kb19wYWdlZmxpcChTY3JlZW5Q dHIgc2NyZWVuLAorICAgICAgICAgICAgICAgUGl4bWFwUHRyIG5ld19mcm9udCwKKyAgICAgICAg ICAgICAgIHZvaWQgKmV2ZW50LAorICAgICAgICAgICAgICAgaW50IHJlZl9jcnRjX3ZibGFua19w aXBlLAorICAgICAgICAgICAgICAgQm9vbCBhc3luYywKKyAgICAgICAgICAgICAgIG1zX3BhZ2Vm bGlwX2hhbmRsZXJfcHJvYyBwYWdlZmxpcF9oYW5kbGVyLAorICAgICAgICAgICAgICAgbXNfcGFn ZWZsaXBfYWJvcnRfcHJvYyBwYWdlZmxpcF9hYm9ydCkKK3sKKyNpZm5kZWYgR0xBTU9SX0hBU19H Qk0KKyAgICByZXR1cm4gRkFMU0U7CisjZWxzZQorICAgIFNjcm5JbmZvUHRyIHNjcm4gPSB4Zjg2 U2NyZWVuVG9TY3JuKHNjcmVlbik7CisgICAgbW9kZXNldHRpbmdQdHIgbXMgPSBtb2Rlc2V0dGlu Z1BUUihzY3JuKTsKKyAgICB4Zjg2Q3J0Y0NvbmZpZ1B0ciBjb25maWcgPSBYRjg2X0NSVENfQ09O RklHX1BUUihzY3JuKTsKKyAgICBkcm1tb2RlX2JvIG5ld19mcm9udF9ibzsKKyAgICB1aW50MzJf dCBmbGFnczsKKyAgICBpbnQgaTsKKyAgICBzdHJ1Y3QgbXNfZmxpcGRhdGEgKmZsaXBkYXRhOwor ICAgIGdsYW1vcl9ibG9ja19oYW5kbGVyKHNjcmVlbik7CisKKyAgICBuZXdfZnJvbnRfYm8uZ2Jt ID0gZ2xhbW9yX2dibV9ib19mcm9tX3BpeG1hcChzY3JlZW4sIG5ld19mcm9udCk7CisgICAgbmV3 X2Zyb250X2JvLmR1bWIgPSBOVUxMOworICAgIGlmICghbmV3X2Zyb250X2JvLmdibSkgeworICAg ICAgICB4Zjg2RHJ2TXNnKHNjcm4tPnNjcm5JbmRleCwgWF9FUlJPUiwKKyAgICAgICAgICAgICAg ICAgICAiRmFpbGVkIHRvIGdldCBHQk0gYm8gZm9yIGZsaXAgdG8gbmV3IGZyb250LlxuIik7Cisg ICAgICAgIHJldHVybiBGQUxTRTsKKyAgICB9CisKKyAgICBmbGlwZGF0YSA9IGNhbGxvYygxLCBz aXplb2Yoc3RydWN0IG1zX2ZsaXBkYXRhKSk7CisgICAgaWYgKCFmbGlwZGF0YSkgeworICAgICAg ICBkcm1tb2RlX2JvX2Rlc3Ryb3koJm1zLT5kcm1tb2RlLCAmbmV3X2Zyb250X2JvKTsKKyAgICAg ICAgeGY4NkRydk1zZyhzY3JuLT5zY3JuSW5kZXgsIFhfRVJST1IsCisgICAgICAgICAgICAgICAg ICAgIkZhaWxlZCB0byBhbGxvY2F0ZSBmbGlwZGF0YS5cbiIpOworICAgICAgICByZXR1cm4gRkFM U0U7CisgICAgfQorCisgICAgZmxpcGRhdGEtPmV2ZW50ID0gZXZlbnQ7CisgICAgZmxpcGRhdGEt PnNjcmVlbiA9IHNjcmVlbjsKKworICAgIC8qCisgICAgICogVGFrZSBhIGxvY2FsIHJlZmVyZW5j ZSBvbiBmbGlwZGF0YS4KKyAgICAgKiBpZiB0aGUgZmlyc3QgZmxpcCBmYWlscywgdGhlIHNlcXVl bmNlIGFib3J0CisgICAgICogY29kZSB3aWxsIGZyZWUgdGhlIGNydGMgZmxpcCBkYXRhLCBhbmQg ZHJvcAorICAgICAqIGl0J3MgcmVmZXJlbmNlIHdoaWNoIHdvdWxkIGNhdXNlIHRoaXMgdG8gYmUK KyAgICAgKiBmcmVlZCB3aGVuIHdlIHN0aWxsIHJlcXVpcmVkIGl0LgorICAgICAqLworICAgIGZs aXBkYXRhLT5mbGlwX2NvdW50Kys7CisKKyAgICAvKiBDcmVhdGUgYSBuZXcgaGFuZGxlIGZvciB0 aGUgYmFjayBidWZmZXIgKi8KKyAgICBmbGlwZGF0YS0+b2xkX2ZiX2lkID0gbXMtPmRybW1vZGUu ZmJfaWQ7CisgICAgaWYgKGRybU1vZGVBZGRGQihtcy0+ZmQsIHNjcm4tPnZpcnR1YWxYLCBzY3Ju LT52aXJ0dWFsWSwKKyAgICAgICAgICAgICAgICAgICAgIHNjcm4tPmRlcHRoLCBzY3JuLT5iaXRz UGVyUGl4ZWwsCisgICAgICAgICAgICAgICAgICAgICBkcm1tb2RlX2JvX2dldF9waXRjaCgmbmV3 X2Zyb250X2JvKSwKKyAgICAgICAgICAgICAgICAgICAgIGRybW1vZGVfYm9fZ2V0X2hhbmRsZSgm bmV3X2Zyb250X2JvKSwgJm1zLT5kcm1tb2RlLmZiX2lkKSkgeworICAgICAgICBnb3RvIGVycm9y X291dDsKKyAgICB9CisKKyAgICBkcm1tb2RlX2JvX2Rlc3Ryb3koJm1zLT5kcm1tb2RlLCAmbmV3 X2Zyb250X2JvKTsKKworICAgIGZsYWdzID0gRFJNX01PREVfUEFHRV9GTElQX0VWRU5UOworICAg IGlmIChhc3luYykKKyAgICAgICAgZmxhZ3MgfD0gRFJNX01PREVfUEFHRV9GTElQX0FTWU5DOwor CisgICAgLyogUXVldWUgZmxpcHMgb24gYWxsIGVuYWJsZWQgQ1JUQ3MuCisgICAgICoKKyAgICAg KiBOb3RlIHRoYXQgaWYvd2hlbiB3ZSBnZXQgcGVyLUNSVEMgYnVmZmVycywgd2UnbGwgaGF2ZSB0 byB1cGRhdGUgdGhpcy4KKyAgICAgKiBSaWdodCBub3cgaXQgYXNzdW1lcyBhIHNpbmdsZSBzaGFy ZWQgZmIgYWNyb3NzIGFsbCBDUlRDcywgd2l0aCB0aGUKKyAgICAgKiBrZXJuZWwgZml4aW5nIHVw IHRoZSBvZmZzZXQgb2YgZWFjaCBDUlRDIGFzIG5lY2Vzc2FyeS4KKyAgICAgKgorICAgICAqIEFs c28sIGZsaXBzIHF1ZXVlZCBvbiBkaXNhYmxlZCBvciBpbmNvcnJlY3RseSBjb25maWd1cmVkIGRp c3BsYXlzCisgICAgICogbWF5IG5ldmVyIGNvbXBsZXRlOyB0aGlzIGlzIGEgY29uZmlndXJhdGlv biBlcnJvci4KKyAgICAgKi8KKyAgICBmb3IgKGkgPSAwOyBpIDwgY29uZmlnLT5udW1fY3J0Yzsg aSsrKSB7CisgICAgICAgIHhmODZDcnRjUHRyIGNydGMgPSBjb25maWctPmNydGNbaV07CisKKyAg ICAgICAgaWYgKCFtc19jcnRjX29uKGNydGMpKQorICAgICAgICAgICAgY29udGludWU7CisKKyAg ICAgICAgaWYgKCFxdWV1ZV9mbGlwX29uX2NydGMoc2NyZWVuLCBjcnRjLCBmbGlwZGF0YSwKKyAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVmX2NydGNfdmJsYW5rX3BpcGUsCisgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZsYWdzLCBwYWdlZmxpcF9oYW5kbGVyLAorICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYWdlZmxpcF9hYm9ydCkpIHsKKyAgICAgICAg ICAgIGdvdG8gZXJyb3JfdW5kbzsKKyAgICAgICAgfQorICAgIH0KKworICAgIC8qCisgICAgICog RG8gd2UgaGF2ZSBtb3JlIHRoYW4gb3VyIGxvY2FsIHJlZmVyZW5jZSwKKyAgICAgKiBpZiBzbyBh bmQgbm8gZXJyb3JzLCB0aGVuIGRyb3Agb3VyIGxvY2FsCisgICAgICogcmVmZXJlbmNlIGFuZCBy ZXR1cm4gbm93LgorICAgICAqLworICAgIGlmIChmbGlwZGF0YS0+ZmxpcF9jb3VudCA+IDEpIHsK KyAgICAgICAgZmxpcGRhdGEtPmZsaXBfY291bnQtLTsKKyAgICAgICAgcmV0dXJuIFRSVUU7Cisg ICAgfQorCitlcnJvcl91bmRvOgorCisgICAgLyoKKyAgICAgKiBIYXZlIHdlIGp1c3QgZ290IHRo ZSBsb2NhbCByZWZlcmVuY2U/CisgICAgICogZnJlZSB0aGUgZnJhbWVidWZmZXIgaWYgc28gc2lu Y2Ugbm9ib2R5IHN1Y2Nlc3NmdWxseQorICAgICAqIHN1Ym1pdHRlZCBhbnl0aGluZworICAgICAq LworICAgIGlmIChmbGlwZGF0YS0+ZmxpcF9jb3VudCA9PSAxKSB7CisgICAgICAgIGRybU1vZGVS bUZCKG1zLT5mZCwgbXMtPmRybW1vZGUuZmJfaWQpOworICAgICAgICBtcy0+ZHJtbW9kZS5mYl9p ZCA9IGZsaXBkYXRhLT5vbGRfZmJfaWQ7CisgICAgfQorCitlcnJvcl9vdXQ6CisgICAgeGY4NkRy dk1zZyhzY3JuLT5zY3JuSW5kZXgsIFhfV0FSTklORywgIlBhZ2UgZmxpcCBmYWlsZWQ6ICVzXG4i LAorICAgICAgICAgICAgICAgc3RyZXJyb3IoZXJybm8pKTsKKyAgICAvKiBpZiBvbmx5IHRoZSBs b2NhbCByZWZlcmVuY2UgLSBmcmVlIHRoZSBzdHJ1Y3R1cmUsCisgICAgICogZWxzZSBkcm9wIHRo ZSBsb2NhbCByZWZlcmVuY2UgYW5kIHJldHVybiAqLworICAgIGlmIChmbGlwZGF0YS0+ZmxpcF9j b3VudCA9PSAxKQorICAgICAgICBmcmVlKGZsaXBkYXRhKTsKKyAgICBlbHNlCisgICAgICAgIGZs aXBkYXRhLT5mbGlwX2NvdW50LS07CisKKyAgICByZXR1cm4gRkFMU0U7CisjZW5kaWYgLyogR0xB TU9SX0hBU19HQk0gKi8KK30KKworI2VuZGlmCmRpZmYgLS1naXQgYS9ody94ZnJlZTg2L2RyaXZl cnMvbW9kZXNldHRpbmcvcHJlc2VudC5jIGIvaHcveGZyZWU4Ni9kcml2ZXJzL21vZGVzZXR0aW5n L3ByZXNlbnQuYwppbmRleCBiNjgwZmU1Li4xOGM4MmNkIDEwMDY0NAotLS0gYS9ody94ZnJlZTg2 L2RyaXZlcnMvbW9kZXNldHRpbmcvcHJlc2VudC5jCisrKyBiL2h3L3hmcmVlODYvZHJpdmVycy9t b2Rlc2V0dGluZy9wcmVzZW50LmMKQEAgLTI3LDcgKzI3LDYgQEAKICNpbmNsdWRlIDxhc3NlcnQu aD4KICNpbmNsdWRlIDxlcnJuby5oPgogI2luY2x1ZGUgPGZjbnRsLmg+Ci0jaW5jbHVkZSA8eHNl cnZlcl9wb2xsLmg+CiAjaW5jbHVkZSA8dW5pc3RkLmg+CiAjaW5jbHVkZSA8c3RkaW8uaD4KICNp bmNsdWRlIDxzdGRpbnQuaD4KQEAgLTcyLDQwICs3MSw2IEBAIG1zX3ByZXNlbnRfZ2V0X3VzdF9t c2MoUlJDcnRjUHRyIGNydGMsIENBUkQ2NCAqdXN0LCBDQVJENjQgKm1zYykKIH0KIAogLyoKLSAq IEZsdXNoIHRoZSBEUk0gZXZlbnQgcXVldWUgd2hlbiBmdWxsOyBtYWtlcyBzcGFjZSBmb3IgbmV3 IGV2ZW50cy4KLSAqCi0gKiBSZXR1cm5zIGEgbmVnYXRpdmUgdmFsdWUgb24gZXJyb3IsIDAgaWYg dGhlcmUgd2FzIG5vdGhpbmcgdG8gcHJvY2VzcywKLSAqIG9yIDEgaWYgd2UgaGFuZGxlZCBhbnkg ZXZlbnRzLgotICovCi1zdGF0aWMgaW50Ci1tc19mbHVzaF9kcm1fZXZlbnRzKFNjcmVlblB0ciBz Y3JlZW4pCi17Ci0gICAgU2NybkluZm9QdHIgc2NybiA9IHhmODZTY3JlZW5Ub1Njcm4oc2NyZWVu KTsKLSAgICBtb2Rlc2V0dGluZ1B0ciBtcyA9IG1vZGVzZXR0aW5nUFRSKHNjcm4pOwotCi0gICAg c3RydWN0IHBvbGxmZCBwID0geyAuZmQgPSBtcy0+ZmQsIC5ldmVudHMgPSBQT0xMSU4gfTsKLSAg ICBpbnQgcjsKLQotICAgIGRvIHsKLSAgICAgICAgICAgIHIgPSB4c2VydmVyX3BvbGwoJnAsIDEs IDApOwotICAgIH0gd2hpbGUgKHIgPT0gLTEgJiYgKGVycm5vID09IEVJTlRSIHx8IGVycm5vID09 IEVBR0FJTikpOwotCi0gICAgLyogSWYgdGhlcmUgd2FzIGFuIGVycm9yLCByIHdpbGwgYmUgPCAw LiAgUmV0dXJuIHRoYXQuICBJZiB0aGVyZSB3YXMKLSAgICAgKiBub3RoaW5nIHRvIHByb2Nlc3Ms IHIgPT0gMC4gIFJldHVybiB0aGF0LgotICAgICAqLwotICAgIGlmIChyIDw9IDApCi0gICAgICAg IHJldHVybiByOwotCi0gICAgLyogVHJ5IHRvIGhhbmRsZSB0aGUgZXZlbnQuICBJZiB0aGVyZSB3 YXMgYW4gZXJyb3IsIHJldHVybiBpdC4gKi8KLSAgICByID0gZHJtSGFuZGxlRXZlbnQobXMtPmZk LCAmbXMtPmV2ZW50X2NvbnRleHQpOwotICAgIGlmIChyIDwgMCkKLSAgICAgICAgcmV0dXJuIHI7 Ci0KLSAgICAvKiBPdGhlcndpc2UgcmV0dXJuIDEgdG8gaW5kaWNhdGUgdGhhdCB3ZSBoYW5kbGVk IGFuIGV2ZW50LiAqLwotICAgIHJldHVybiAxOwotfQotCi0vKgogICogQ2FsbGVkIHdoZW4gdGhl IHF1ZXVlZCB2YmxhbmsgZXZlbnQgaGFzIG9jY3VycmVkCiAgKi8KIHN0YXRpYyB2b2lkCkBAIC0y MjYsNDAgKzE5MSw2IEBAIG1zX3ByZXNlbnRfZmx1c2goV2luZG93UHRyIHdpbmRvdykKIAogI2lm ZGVmIEdMQU1PUgogCi0vKgotICogRXZlbnQgZGF0YSBmb3IgYW4gaW4gcHJvZ3Jlc3MgZmxpcC4K LSAqIFRoaXMgY29udGFpbnMgYSBwb2ludGVyIHRvIHRoZSB2YmxhbmsgZXZlbnQsCi0gKiBhbmQg aW5mb3JtYXRpb24gYWJvdXQgdGhlIGZsaXAgaW4gcHJvZ3Jlc3MuCi0gKiBhIHJlZmVyZW5jZSB0 byB0aGlzIGlzIHN0b3JlZCBpbiB0aGUgcGVyLWNydGMKLSAqIGZsaXBzLgotICovCi1zdHJ1Y3Qg bXNfZmxpcGRhdGEgewotICAgIFNjcmVlblB0ciBzY3JlZW47Ci0gICAgdm9pZCAqZXZlbnQ7Ci0g ICAgLyogbnVtYmVyIG9mIENSVEMgZXZlbnRzIHJlZmVyZW5jaW5nIHRoaXMgKi8KLSAgICBpbnQg ZmxpcF9jb3VudDsKLSAgICB1aW50NjRfdCBmZV9tc2M7Ci0gICAgdWludDY0X3QgZmVfdXNlYzsK LSAgICB1aW50MzJfdCBvbGRfZmJfaWQ7Ci19OwotCi0vKgotICogUGVyIGNydGMgcGFnZWZsaXBw aW5nIGluZm9tYXRpb24sCi0gKiBUaGVzZSBhcmUgc3VibWl0dGVkIHRvIHRoZSBxdWV1aW5nIGNv ZGUKLSAqIG9uZSBvZiB0aGVtIHBlciBjcnRjIHBlciBmbGlwLgotICovCi1zdHJ1Y3QgbXNfY3J0 Y19wYWdlZmxpcCB7Ci0gICAgQm9vbCBvbl9yZWZlcmVuY2VfY3J0YzsKLSAgICAvKiByZWZlcmVu Y2UgdG8gdGhlIG1zX2ZsaXBkYXRhICovCi0gICAgc3RydWN0IG1zX2ZsaXBkYXRhICpmbGlwZGF0 YTsKLX07Ci0KLXR5cGVkZWYgdm9pZCAoKm1zX3BhZ2VmbGlwX2hhbmRsZXJfcHJvYykodWludDY0 X3QgZnJhbWUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQ2 NF90IHVzZWMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZvaWQg KmRhdGEpOwotCi10eXBlZGVmIHZvaWQgKCptc19wYWdlZmxpcF9hYm9ydF9wcm9jKSh2b2lkICpk YXRhKTsKLQogLyoqCiAgKiBGcmVlIGFuIG1zX2NydGNfcGFnZWZsaXAuCiAgKgpAQCAtMzM0LDE4 OSArMjY1LDYgQEAgbXNfcHJlc2VudF9mbGlwX2Fib3J0KHZvaWQgKmRhdGEpCiAgICAgbXNfcHJl c2VudF9mbGlwX2ZyZWUoZmxpcCk7CiB9CiAKLXN0YXRpYyBCb29sCi1xdWV1ZV9mbGlwX29uX2Ny dGMoU2NyZWVuUHRyIHNjcmVlbiwgeGY4NkNydGNQdHIgY3J0YywKLSAgICAgICAgICAgICAgICAg ICBzdHJ1Y3QgbXNfZmxpcGRhdGEgKmZsaXBkYXRhLAotICAgICAgICAgICAgICAgICAgIGludCBy ZWZfY3J0Y192YmxhbmtfcGlwZSwgdWludDMyX3QgZmxhZ3MsCi0gICAgICAgICAgICAgICAgICAg bXNfcGFnZWZsaXBfaGFuZGxlcl9wcm9jIHBhZ2VmbGlwX2hhbmRsZXIsCi0gICAgICAgICAgICAg ICAgICAgbXNfcGFnZWZsaXBfYWJvcnRfcHJvYyBwYWdlZmxpcF9hYm9ydCkKLXsKLSAgICBTY3Ju SW5mb1B0ciBzY3JuID0geGY4NlNjcmVlblRvU2NybihzY3JlZW4pOwotICAgIG1vZGVzZXR0aW5n UHRyIG1zID0gbW9kZXNldHRpbmdQVFIoc2Nybik7Ci0gICAgZHJtbW9kZV9jcnRjX3ByaXZhdGVf cHRyIGRybW1vZGVfY3J0YyA9IGNydGMtPmRyaXZlcl9wcml2YXRlOwotICAgIHN0cnVjdCBtc19j cnRjX3BhZ2VmbGlwICpmbGlwOwotICAgIHVpbnQzMl90IHNlcTsKLSAgICBpbnQgZXJyOwotCi0g ICAgZmxpcCA9IGNhbGxvYygxLCBzaXplb2Yoc3RydWN0IG1zX2NydGNfcGFnZWZsaXApKTsKLSAg ICBpZiAoZmxpcCA9PSBOVUxMKSB7Ci0gICAgICAgIHhmODZEcnZNc2coc2Nybi0+c2NybkluZGV4 LCBYX1dBUk5JTkcsCi0gICAgICAgICAgICAgICAgICAgImZsaXAgcXVldWU6IGNhcnJpZXIgYWxs b2MgZmFpbGVkLlxuIik7Ci0gICAgICAgIHJldHVybiBGQUxTRTsKLSAgICB9Ci0KLSAgICAvKiBP bmx5IHRoZSByZWZlcmVuY2UgY3J0YyB3aWxsIGZpbmFsbHkgZGVsaXZlciBpdHMgcGFnZSBmbGlw Ci0gICAgICogY29tcGxldGlvbiBldmVudC4gQWxsIG90aGVyIGNydGMncyBldmVudHMgd2lsbCBi ZSBkaXNjYXJkZWQuCi0gICAgICovCi0gICAgZmxpcC0+b25fcmVmZXJlbmNlX2NydGMgPSAoZHJt bW9kZV9jcnRjLT52YmxhbmtfcGlwZSA9PSByZWZfY3J0Y192YmxhbmtfcGlwZSk7Ci0gICAgZmxp cC0+ZmxpcGRhdGEgPSBmbGlwZGF0YTsKLQotICAgIHNlcSA9IG1zX2RybV9xdWV1ZV9hbGxvYyhj cnRjLCBmbGlwLCBwYWdlZmxpcF9oYW5kbGVyLCBwYWdlZmxpcF9hYm9ydCk7Ci0gICAgaWYgKCFz ZXEpIHsKLSAgICAgICAgZnJlZShmbGlwKTsKLSAgICAgICAgcmV0dXJuIEZBTFNFOwotICAgIH0K LQotICAgIC8qIHRha2UgYSByZWZlcmVuY2Ugb24gZmxpcGRhdGEgZm9yIHVzZSBpbiBmbGlwICov Ci0gICAgZmxpcGRhdGEtPmZsaXBfY291bnQrKzsKLQotICAgIHdoaWxlIChkcm1Nb2RlUGFnZUZs aXAobXMtPmZkLCBkcm1tb2RlX2NydGMtPm1vZGVfY3J0Yy0+Y3J0Y19pZCwKLSAgICAgICAgICAg ICAgICAgICAgICAgICAgIG1zLT5kcm1tb2RlLmZiX2lkLCBmbGFncywgKHZvaWQgKikgKHVpbnRw dHJfdCkgc2VxKSkgewotICAgICAgICBlcnIgPSBlcnJubzsKLSAgICAgICAgLyogV2UgbWF5IGhh dmUgZmFpbGVkIGJlY2F1c2UgdGhlIGV2ZW50IHF1ZXVlIHdhcyBmdWxsLiAgRmx1c2ggaXQKLSAg ICAgICAgICogYW5kIHJldHJ5LiAgSWYgdGhlcmUgd2FzIG5vdGhpbmcgdG8gZmx1c2gsIHRoZW4g d2UgZmFpbGVkIGZvcgotICAgICAgICAgKiBzb21lIG90aGVyIHJlYXNvbiBhbmQgc2hvdWxkIGp1 c3QgcmV0dXJuIGFuIGVycm9yLgotICAgICAgICAgKi8KLSAgICAgICAgaWYgKG1zX2ZsdXNoX2Ry bV9ldmVudHMoc2NyZWVuKSA8PSAwKSB7Ci0gICAgICAgICAgICB4Zjg2RHJ2TXNnKHNjcm4tPnNj cm5JbmRleCwgWF9XQVJOSU5HLAotICAgICAgICAgICAgICAgICAgICAgICAiZmxpcCBxdWV1ZSBm YWlsZWQ6ICVzXG4iLCBzdHJlcnJvcihlcnIpKTsKLSAgICAgICAgICAgIC8qIEFib3J0aW5nIHdp bGwgYWxzbyBkZWNyZW1lbnQgZmxpcF9jb3VudCBhbmQgZnJlZShmbGlwKS4gKi8KLSAgICAgICAg ICAgIG1zX2RybV9hYm9ydF9zZXEoc2Nybiwgc2VxKTsKLSAgICAgICAgICAgIHJldHVybiBGQUxT RTsKLSAgICAgICAgfQotCi0gICAgICAgIC8qIFdlIGZsdXNoZWQgc29tZSBldmVudHMsIHNvIHRy eSBhZ2Fpbi4gKi8KLSAgICAgICAgeGY4NkRydk1zZyhzY3JuLT5zY3JuSW5kZXgsIFhfV0FSTklO RywgImZsaXAgcXVldWUgcmV0cnlcbiIpOwotICAgIH0KLQotICAgIC8qIFRoZSBwYWdlIGZsaXAg c3VjY2VkZWQuICovCi0gICAgcmV0dXJuIFRSVUU7Ci19Ci0KLQotc3RhdGljIEJvb2wKLW1zX2Rv X3BhZ2VmbGlwKFNjcmVlblB0ciBzY3JlZW4sCi0gICAgICAgICAgICAgICBQaXhtYXBQdHIgbmV3 X2Zyb250LAotICAgICAgICAgICAgICAgdm9pZCAqZXZlbnQsCi0gICAgICAgICAgICAgICBpbnQg cmVmX2NydGNfdmJsYW5rX3BpcGUsCi0gICAgICAgICAgICAgICBCb29sIGFzeW5jLAotICAgICAg ICAgICAgICAgbXNfcGFnZWZsaXBfaGFuZGxlcl9wcm9jIHBhZ2VmbGlwX2hhbmRsZXIsCi0gICAg ICAgICAgICAgICBtc19wYWdlZmxpcF9hYm9ydF9wcm9jIHBhZ2VmbGlwX2Fib3J0KQotewotI2lm bmRlZiBHTEFNT1JfSEFTX0dCTQotICAgIHJldHVybiBGQUxTRTsKLSNlbHNlCi0gICAgU2Nybklu Zm9QdHIgc2NybiA9IHhmODZTY3JlZW5Ub1Njcm4oc2NyZWVuKTsKLSAgICBtb2Rlc2V0dGluZ1B0 ciBtcyA9IG1vZGVzZXR0aW5nUFRSKHNjcm4pOwotICAgIHhmODZDcnRjQ29uZmlnUHRyIGNvbmZp ZyA9IFhGODZfQ1JUQ19DT05GSUdfUFRSKHNjcm4pOwotICAgIGRybW1vZGVfYm8gbmV3X2Zyb250 X2JvOwotICAgIHVpbnQzMl90IGZsYWdzOwotICAgIGludCBpOwotICAgIHN0cnVjdCBtc19mbGlw ZGF0YSAqZmxpcGRhdGE7Ci0gICAgZ2xhbW9yX2Jsb2NrX2hhbmRsZXIoc2NyZWVuKTsKLQotICAg IG5ld19mcm9udF9iby5nYm0gPSBnbGFtb3JfZ2JtX2JvX2Zyb21fcGl4bWFwKHNjcmVlbiwgbmV3 X2Zyb250KTsKLSAgICBuZXdfZnJvbnRfYm8uZHVtYiA9IE5VTEw7Ci0gICAgaWYgKCFuZXdfZnJv bnRfYm8uZ2JtKSB7Ci0gICAgICAgIHhmODZEcnZNc2coc2Nybi0+c2NybkluZGV4LCBYX0VSUk9S LAotICAgICAgICAgICAgICAgICAgICJGYWlsZWQgdG8gZ2V0IEdCTSBibyBmb3IgZmxpcCB0byBu ZXcgZnJvbnQuXG4iKTsKLSAgICAgICAgcmV0dXJuIEZBTFNFOwotICAgIH0KLQotICAgIGZsaXBk YXRhID0gY2FsbG9jKDEsIHNpemVvZihzdHJ1Y3QgbXNfZmxpcGRhdGEpKTsKLSAgICBpZiAoIWZs aXBkYXRhKSB7Ci0gICAgICAgIGRybW1vZGVfYm9fZGVzdHJveSgmbXMtPmRybW1vZGUsICZuZXdf ZnJvbnRfYm8pOwotICAgICAgICB4Zjg2RHJ2TXNnKHNjcm4tPnNjcm5JbmRleCwgWF9FUlJPUiwK LSAgICAgICAgICAgICAgICAgICAiRmFpbGVkIHRvIGFsbG9jYXRlIGZsaXBkYXRhLlxuIik7Ci0g ICAgICAgIHJldHVybiBGQUxTRTsKLSAgICB9Ci0KLSAgICBmbGlwZGF0YS0+ZXZlbnQgPSBldmVu dDsKLSAgICBmbGlwZGF0YS0+c2NyZWVuID0gc2NyZWVuOwotCi0gICAgLyoKLSAgICAgKiBUYWtl IGEgbG9jYWwgcmVmZXJlbmNlIG9uIGZsaXBkYXRhLgotICAgICAqIGlmIHRoZSBmaXJzdCBmbGlw IGZhaWxzLCB0aGUgc2VxdWVuY2UgYWJvcnQKLSAgICAgKiBjb2RlIHdpbGwgZnJlZSB0aGUgY3J0 YyBmbGlwIGRhdGEsIGFuZCBkcm9wCi0gICAgICogaXQncyByZWZlcmVuY2Ugd2hpY2ggd291bGQg Y2F1c2UgdGhpcyB0byBiZQotICAgICAqIGZyZWVkIHdoZW4gd2Ugc3RpbGwgcmVxdWlyZWQgaXQu Ci0gICAgICovCi0gICAgZmxpcGRhdGEtPmZsaXBfY291bnQrKzsKLQotICAgIC8qIENyZWF0ZSBh IG5ldyBoYW5kbGUgZm9yIHRoZSBiYWNrIGJ1ZmZlciAqLwotICAgIGZsaXBkYXRhLT5vbGRfZmJf aWQgPSBtcy0+ZHJtbW9kZS5mYl9pZDsKLSAgICBpZiAoZHJtTW9kZUFkZEZCKG1zLT5mZCwgc2Ny bi0+dmlydHVhbFgsIHNjcm4tPnZpcnR1YWxZLAotICAgICAgICAgICAgICAgICAgICAgc2Nybi0+ ZGVwdGgsIHNjcm4tPmJpdHNQZXJQaXhlbCwKLSAgICAgICAgICAgICAgICAgICAgIGRybW1vZGVf Ym9fZ2V0X3BpdGNoKCZuZXdfZnJvbnRfYm8pLAotICAgICAgICAgICAgICAgICAgICAgZHJtbW9k ZV9ib19nZXRfaGFuZGxlKCZuZXdfZnJvbnRfYm8pLCAmbXMtPmRybW1vZGUuZmJfaWQpKSB7Ci0g ICAgICAgIGdvdG8gZXJyb3Jfb3V0OwotICAgIH0KLQotICAgIGRybW1vZGVfYm9fZGVzdHJveSgm bXMtPmRybW1vZGUsICZuZXdfZnJvbnRfYm8pOwotCi0gICAgZmxhZ3MgPSBEUk1fTU9ERV9QQUdF X0ZMSVBfRVZFTlQ7Ci0gICAgaWYgKGFzeW5jKQotICAgICAgICBmbGFncyB8PSBEUk1fTU9ERV9Q QUdFX0ZMSVBfQVNZTkM7Ci0KLSAgICAvKiBRdWV1ZSBmbGlwcyBvbiBhbGwgZW5hYmxlZCBDUlRD cy4KLSAgICAgKgotICAgICAqIE5vdGUgdGhhdCBpZi93aGVuIHdlIGdldCBwZXItQ1JUQyBidWZm ZXJzLCB3ZSdsbCBoYXZlIHRvIHVwZGF0ZSB0aGlzLgotICAgICAqIFJpZ2h0IG5vdyBpdCBhc3N1 bWVzIGEgc2luZ2xlIHNoYXJlZCBmYiBhY3Jvc3MgYWxsIENSVENzLCB3aXRoIHRoZQotICAgICAq IGtlcm5lbCBmaXhpbmcgdXAgdGhlIG9mZnNldCBvZiBlYWNoIENSVEMgYXMgbmVjZXNzYXJ5Lgot ICAgICAqCi0gICAgICogQWxzbywgZmxpcHMgcXVldWVkIG9uIGRpc2FibGVkIG9yIGluY29ycmVj dGx5IGNvbmZpZ3VyZWQgZGlzcGxheXMKLSAgICAgKiBtYXkgbmV2ZXIgY29tcGxldGU7IHRoaXMg aXMgYSBjb25maWd1cmF0aW9uIGVycm9yLgotICAgICAqLwotICAgIGZvciAoaSA9IDA7IGkgPCBj b25maWctPm51bV9jcnRjOyBpKyspIHsKLSAgICAgICAgeGY4NkNydGNQdHIgY3J0YyA9IGNvbmZp Zy0+Y3J0Y1tpXTsKLQotICAgICAgICBpZiAoIW1zX2NydGNfb24oY3J0YykpCi0gICAgICAgICAg ICBjb250aW51ZTsKLQotICAgICAgICBpZiAoIXF1ZXVlX2ZsaXBfb25fY3J0YyhzY3JlZW4sIGNy dGMsIGZsaXBkYXRhLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWZfY3J0Y192 YmxhbmtfcGlwZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmxhZ3MsIHBhZ2Vm bGlwX2hhbmRsZXIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhZ2VmbGlwX2Fi b3J0KSkgewotICAgICAgICAgICAgZ290byBlcnJvcl91bmRvOwotICAgICAgICB9Ci0gICAgfQot Ci0gICAgLyoKLSAgICAgKiBEbyB3ZSBoYXZlIG1vcmUgdGhhbiBvdXIgbG9jYWwgcmVmZXJlbmNl LAotICAgICAqIGlmIHNvIGFuZCBubyBlcnJvcnMsIHRoZW4gZHJvcCBvdXIgbG9jYWwKLSAgICAg KiByZWZlcmVuY2UgYW5kIHJldHVybiBub3cuCi0gICAgICovCi0gICAgaWYgKGZsaXBkYXRhLT5m bGlwX2NvdW50ID4gMSkgewotICAgICAgICBmbGlwZGF0YS0+ZmxpcF9jb3VudC0tOwotICAgICAg ICByZXR1cm4gVFJVRTsKLSAgICB9Ci0KLWVycm9yX3VuZG86Ci0KLSAgICAvKgotICAgICAqIEhh dmUgd2UganVzdCBnb3QgdGhlIGxvY2FsIHJlZmVyZW5jZT8KLSAgICAgKiBmcmVlIHRoZSBmcmFt ZWJ1ZmZlciBpZiBzbyBzaW5jZSBub2JvZHkgc3VjY2Vzc2Z1bGx5Ci0gICAgICogc3VibWl0dGVk IGFueXRoaW5nCi0gICAgICovCi0gICAgaWYgKGZsaXBkYXRhLT5mbGlwX2NvdW50ID09IDEpIHsK LSAgICAgICAgZHJtTW9kZVJtRkIobXMtPmZkLCBtcy0+ZHJtbW9kZS5mYl9pZCk7Ci0gICAgICAg IG1zLT5kcm1tb2RlLmZiX2lkID0gZmxpcGRhdGEtPm9sZF9mYl9pZDsKLSAgICB9Ci0KLWVycm9y X291dDoKLSAgICB4Zjg2RHJ2TXNnKHNjcm4tPnNjcm5JbmRleCwgWF9XQVJOSU5HLCAiUGFnZSBm bGlwIGZhaWxlZDogJXNcbiIsCi0gICAgICAgICAgICAgICBzdHJlcnJvcihlcnJubykpOwotICAg IC8qIGlmIG9ubHkgdGhlIGxvY2FsIHJlZmVyZW5jZSAtIGZyZWUgdGhlIHN0cnVjdHVyZSwKLSAg ICAgKiBlbHNlIGRyb3AgdGhlIGxvY2FsIHJlZmVyZW5jZSBhbmQgcmV0dXJuICovCi0gICAgaWYg KGZsaXBkYXRhLT5mbGlwX2NvdW50ID09IDEpCi0gICAgICAgIGZyZWUoZmxpcGRhdGEpOwotICAg IGVsc2UKLSAgICAgICAgZmxpcGRhdGEtPmZsaXBfY291bnQtLTsKLQotICAgIHJldHVybiBGQUxT RTsKLSNlbmRpZiAvKiBHTEFNT1JfSEFTX0dCTSAqLwotfQotCiAvKgogICogVGVzdCB0byBzZWUg aWYgcGFnZSBmbGlwcGluZyBpcyBwb3NzaWJsZSBvbiB0aGUgdGFyZ2V0IGNydGMKICAqLwotLSAK Mi43LjQKCl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCnhv cmctZGV2ZWxAbGlzdHMueC5vcmc6IFguT3JnIGRldmVsb3BtZW50CkFyY2hpdmVzOiBodHRwOi8v bGlzdHMueC5vcmcvYXJjaGl2ZXMveG9yZy1kZXZlbApJbmZvOiBodHRwczovL2xpc3RzLngub3Jn L21haWxtYW4vbGlzdGluZm8veG9yZy1kZXZlbA==