From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from ffbox0-bg.mplayerhq.hu (ffbox0-bg.ffmpeg.org [79.124.17.100]) by master.gitmailbox.com (Postfix) with ESMTP id C4D934071E for ; Wed, 22 Dec 2021 15:15:29 +0000 (UTC) Received: from [127.0.1.1] (localhost [127.0.0.1]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTP id 2B00368B0C3; Wed, 22 Dec 2021 17:14:59 +0200 (EET) Received: from haasn.dev (haasn.dev [78.46.187.166]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTP id D8D5568AEF7 for ; Wed, 22 Dec 2021 17:14:49 +0200 (EET) Received: from haasn.dev (unknown [10.30.0.2]) by haasn.dev (Postfix) with ESMTP id 8E83949394; Wed, 22 Dec 2021 16:14:49 +0100 (CET) DKIM-Signature: v=1; a=rsa-sha256; c=simple/simple; d=haasn.xyz; s=mail; t=1640186089; bh=15SMU3ml79I7jhbpirLqEDyb86CXRi8w8QbWqHxqIWk=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=HatrlYfLEiiF72/B5EeU6Cb3s0VMv7acxu+vvMAel6SsMZ5xY0QYyo87iSmo/j6H8 9hyvr8ycbGd/jKpX7n9t0EzdU3hbIbx7QApYvZ8c9razce/Jl0npENlZ9q05Uognpu ThbTKS8j8IVKuzCBwj/5sOFvvGp0xXydzoFhFBSs= From: Niklas Haas To: ffmpeg-devel@ffmpeg.org Date: Wed, 22 Dec 2021 16:14:45 +0100 Message-Id: <20211222151447.57681-4-ffmpeg@haasn.xyz> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20211222151447.57681-1-ffmpeg@haasn.xyz> References: <20211222151447.57681-1-ffmpeg@haasn.xyz> MIME-Version: 1.0 Subject: [FFmpeg-devel] [PATCH v9 4/6] lavc: Implement Dolby Vision RPU parsing X-BeenThere: ffmpeg-devel@ffmpeg.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: FFmpeg development discussions and patches List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Reply-To: FFmpeg development discussions and patches Cc: Niklas Haas Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Errors-To: ffmpeg-devel-bounces@ffmpeg.org Sender: "ffmpeg-devel" Archived-At: List-Archive: List-Post: RnJvbTogTmlrbGFzIEhhYXMgPGdpdEBoYWFzbi5kZXY+CgpCYXNlZCBvbiBhIG1peHR1cmUgb2Yg Z3Vlc3N3b3JrLCBwYXJ0aWFsIGRvY3VtZW50YXRpb24gaW4gcGF0ZW50cywgYW5kCnJldmVyc2Ug ZW5naW5lZXJpbmcgb2YgcmVhbC13b3JsZCBzYW1wbGVzLiBDb25maXJtZWQgd29ya2luZyBmb3Ig YWxsIHRoZQpzYW1wbGVzIEkndmUgdGhyb3duIGF0IGl0LgoKQ29udGFpbnMgc29tZSBhbm5veWlu ZyBtYWNoaW5lcnkgdG8gcGVyc2lzdCB0aGVzZSB2YWx1ZXMgaW4gYmV0d2VlbgpmcmFtZXMsIHdo aWNoIGlzIG5lZWRlZCBpbiB0aGVvcnkgZXZlbiB0aG91Z2ggSSd2ZSBuZXZlciBhY3R1YWxseSBz ZWVuIGEKc2FtcGxlIHRoYXQgcmVsaWVzIG9uIGl0IGluIHByYWN0aWNlLiBNYXkgb3IgbWF5IG5v dCB3b3JrLgoKU2luY2UgdGhlIGRpc3RpbmN0aW9uIG1hdHRlcnMgZ3JlYXRseSBmb3IgcGFyc2lu ZyB0aGUgY29sb3IgbWF0cml4CnZhbHVlcywgdGhpcyBpbmNsdWRlcyBhIHNtYWxsIGhlbHBlciBm dW5jdGlvbiB0byBndWVzcyB0aGUgcmlnaHQgcHJvZmlsZQpmcm9tIHRoZSBSUFUgaXRzZWxmIGlu IGNhc2UgdGhlIHVzZXIgaGFzIGZvcmdvdHRlbiB0byBmb3J3YXJkIHRoZSBkb3ZpCmNvbmZpZ3Vy YXRpb24gcmVjb3JkIHRvIHRoZSBkZWNvZGVyLiAoV2hpY2ggaW4gcHJhY3RpY2UsIG9ubHkgZmZt cGVnLmMKYW5kIGZmcGxheSBkby4uKQoKTm90YWJsZSBvbWlzc2lvbnMgLyBkZXZpYXRpb25zOgot IENSQzMyIHZlcmlmaWNhdGlvbi4gVGhpcyBpcyBiYXNlZCBvbiB0aGUgTVBFRzIgQ1JDMzIgdHlw ZSwgd2hpY2ggZG9lcwogIG5vdCBzZWVtIHRvIGJlIGltcGxlbWVudGVkIGluIGxhdnUuIChBbmQg SSBkb24ndCBjYXJlIGVub3VnaCB0byBkbyBzbykKLSBMaW5lYXIgaW50ZXJwb2xhdGlvbiBzdXBw b3J0LiBOb3RoaW5nIGRvY3VtZW50cyB0aGlzIChiZXlvbmQgaXRzCiAgZXhpc3RlbmNlKSBhbmQg bm8gc2FtcGxlcyB1c2UgaXQsIHNvIGltcG9zc2libGUgdG8gaW1wbGVtZW50LgotIEFsbCBvZiB0 aGUgZXh0ZW5zaW9uIG1ldGFkYXRhIGJsb2NrcywgYnV0IHRoZXNlIGNvbnRhaW4gdmFsdWVzIHRo YXQKICBzZWVtIGxhcmdlbHkgY29uZ3J1ZW50IHdpdGggU1QyMDk0LCBIRFIxMCwgb3Igb3RoZXIg ZXhpc3RpbmcgZm9ybXMgb2YKICBzaWRlIGRhdGEsIHNvIEkgd2lsbCBkZWZlciBwYXJzaW5nL2F0 dGFjaGluZyB0aGVtIHRvIGEgZnV0dXJlIGNvbW1pdC4KLSBUaGUgcGF0ZW50IGRlc2NyaWJlcyBh IG1lY2hhbmlzbSBmb3IgcHJlZGljdGluZyBjb2VmZmljaWVudHMgZnJvbQogIHByZXZpb3VzIFJQ VXMsIGJ1dCB0aGUgYml0IGZvciB0aGUgZmxhZyB3aGV0aGVyIHRvIHVzZSB0aGUKICBwcmVkaWN0 aW9uIGRlbHRhcyBvciBzaWduYWwgZW50aXJlbHkgbmV3IGNvZWZmaWNpZW50cyBkb2VzIG5vdCBz ZWVtIHRvCiAgYmUgcHJlc2VudCBpbiBhY3R1YWwgUlBVcywgc28gd2UgaWdub3JlIHRoaXMgc3Vi c3lzdGVtIGVudGlyZWx5LgotIEluIHRoZSBwYXRlbnQncyBzcGVjLCB0aGUgTkxRIHN1YnN5c3Rl bSBhbHNvIGxvb3BzIG92ZXIKICBudW1fbmxxX3Bpdm90cywgYnV0IGV2ZW4gaW4gdGhlIHBhdGVu dCB0aGUgbnVtYmVyIGlzIGhhcmQtY29kZWQgdG8gb25lCiAgaXRlcmF0aW9uIHJhdGhlciB0aGFu IHNpZ25hbGxlZC4gU28gd2Ugb25seSBzdG9yZSBvbmUgc2V0IG9mIGNvZWZzLgoKSGVhdmlseSBp bmZsdWVuY2VkIGJ5IGh0dHBzOi8vZ2l0aHViLmNvbS9xdWlldHZvaWQvZG92aV90b29sCkRvY3Vt ZW50YXRpb24gZHJhd24gZnJvbSBVUyBQYXRlbnQgMTAsNzAxLDM5OSBCMiBhbmQgRVRTSSBHUyBD Q00gMDAxCgpTaWduZWQtb2ZmLWJ5OiBOaWtsYXMgSGFhcyA8Z2l0QGhhYXNuLmRldj4KLS0tCiBj b25maWd1cmUgICAgICAgICAgICAgfCAgIDIgKwogbGliYXZjb2RlYy9NYWtlZmlsZSAgIHwgICAx ICsKIGxpYmF2Y29kZWMvZG92aV9ycHUuYyB8IDQzMCArKysrKysrKysrKysrKysrKysrKysrKysr KysrKysrKysrKysrKysrKysKIGxpYmF2Y29kZWMvZG92aV9ycHUuaCB8ICA3MSArKysrKysrCiA0 IGZpbGVzIGNoYW5nZWQsIDUwNCBpbnNlcnRpb25zKCspCiBjcmVhdGUgbW9kZSAxMDA2NDQgbGli YXZjb2RlYy9kb3ZpX3JwdS5jCiBjcmVhdGUgbW9kZSAxMDA2NDQgbGliYXZjb2RlYy9kb3ZpX3Jw dS5oCgpkaWZmIC0tZ2l0IGEvY29uZmlndXJlIGIvY29uZmlndXJlCmluZGV4IDBjY2QzYmRhMTEu LjY4NjU4YTg0N2YgMTAwNzU1Ci0tLSBhL2NvbmZpZ3VyZQorKysgYi9jb25maWd1cmUKQEAgLTI0 MzQsNiArMjQzNCw3IEBAIENPTkZJR19FWFRSQT0iCiAgICAgY2JzX3ZwOQogICAgIGRpcmFjX3Bh cnNlCiAgICAgZG5uCisgICAgZG92aV9ycHUKICAgICBkdnByb2ZpbGUKICAgICBleGlmCiAgICAg ZmFhbmRjdApAQCAtMjcwNiw2ICsyNzA3LDcgQEAgY2JzX21wZWcyX3NlbGVjdD0iY2JzIgogY2Jz X3ZwOV9zZWxlY3Q9ImNicyIKIGRjdF9zZWxlY3Q9InJkZnQiCiBkaXJhY19wYXJzZV9zZWxlY3Q9 ImdvbG9tYiIKK2RvdmlfcnB1X3NlbGVjdD0iZ29sb21iIgogZG5uX3N1Z2dlc3Q9ImxpYnRlbnNv cmZsb3cgbGlib3BlbnZpbm8iCiBkbm5fZGVwcz0iYXZmb3JtYXQgc3dzY2FsZSIKIGVycm9yX3Jl c2lsaWVuY2Vfc2VsZWN0PSJtZV9jbXAiCmRpZmYgLS1naXQgYS9saWJhdmNvZGVjL01ha2VmaWxl IGIvbGliYXZjb2RlYy9NYWtlZmlsZQppbmRleCBmYjkwZWNlYTg0Li43MzY0YzdhOTFmIDEwMDY0 NAotLS0gYS9saWJhdmNvZGVjL01ha2VmaWxlCisrKyBiL2xpYmF2Y29kZWMvTWFrZWZpbGUKQEAg LTc3LDYgKzc3LDcgQEAgT0JKUy0kKENPTkZJR19DQlNfTVBFRzIpICAgICAgICAgICAgICAgKz0g Y2JzX21wZWcyLm8KIE9CSlMtJChDT05GSUdfQ0JTX1ZQOSkgICAgICAgICAgICAgICAgICs9IGNi c192cDkubwogT0JKUy0kKENPTkZJR19DUllTVEFMSEQpICAgICAgICAgICAgICAgKz0gY3J5c3Rh bGhkLm8KIE9CSlMtJChDT05GSUdfRENUKSAgICAgICAgICAgICAgICAgICAgICs9IGRjdC5vIGRj dDMyX2ZpeGVkLm8gZGN0MzJfZmxvYXQubworT0JKUy0kKENPTkZJR19ET1ZJX1JQVSkgICAgICAg ICAgICAgICAgKz0gZG92aV9ycHUubwogT0JKUy0kKENPTkZJR19FUlJPUl9SRVNJTElFTkNFKSAg ICAgICAgKz0gZXJyb3JfcmVzaWxpZW5jZS5vCiBPQkpTLSQoQ09ORklHX0VYSUYpICAgICAgICAg ICAgICAgICAgICArPSBleGlmLm8gdGlmZl9jb21tb24ubwogT0JKUy0kKENPTkZJR19GQUFORENU KSAgICAgICAgICAgICAgICAgKz0gZmFhbmRjdC5vCmRpZmYgLS1naXQgYS9saWJhdmNvZGVjL2Rv dmlfcnB1LmMgYi9saWJhdmNvZGVjL2RvdmlfcnB1LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5k ZXggMDAwMDAwMDAwMC4uZmMyZTFmYjJhMQotLS0gL2Rldi9udWxsCisrKyBiL2xpYmF2Y29kZWMv ZG92aV9ycHUuYwpAQCAtMCwwICsxLDQzMCBAQAorLyoKKyAqIERvbGJ5IFZpc2lvbiBSUFUgZGVj b2RlcgorICoKKyAqIENvcHlyaWdodCAoQykgMjAyMSBKYW4gRWtzdHLDtm0KKyAqIENvcHlyaWdo dCAoQykgMjAyMSBOaWtsYXMgSGFhcworICoKKyAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIEZGbXBl Zy4KKyAqCisgKiBGRm1wZWcgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUg aXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2Vy IEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0 d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBv ciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIEZGbXBlZyBpcyBk aXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJ VEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YK KyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4g IFNlZSB0aGUgR05VCisgKiBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBk ZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdO VSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYWxvbmcgd2l0aCBGRm1wZWc7IGlm IG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb24sIEluYy4sIDUx IEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSBVU0EK KyAqLworCisjaW5jbHVkZSAibGliYXZ1dGlsL2J1ZmZlci5oIgorCisjaW5jbHVkZSAiZG92aV9y cHUuaCIKKyNpbmNsdWRlICJnb2xvbWIuaCIKKyNpbmNsdWRlICJnZXRfYml0cy5oIgorCitlbnVt IHsKKyAgICBSUFVfQ09FRkZfRklYRUQgPSAwLAorICAgIFJQVV9DT0VGRl9GTE9BVCA9IDEsCit9 OworCisvKioKKyAqIFByaXZhdGUgY29udGVudHMgb2YgdmRyX3JlZi4KKyAqLwordHlwZWRlZiBz dHJ1Y3QgRE9WSVZkclJlZiB7CisgICAgQVZET1ZJRGF0YU1hcHBpbmcgbWFwcGluZzsKKyAgICBB VkRPVklDb2xvck1ldGFkYXRhIGNvbG9yOworfSBET1ZJVmRyUmVmOworCit2b2lkIGZmX2Rvdmlf Y3R4X3VucmVmKERPVklDb250ZXh0ICpzKQoreworICAgIGZvciAoaW50IGkgPSAwOyBpIDwgRkZf QVJSQVlfRUxFTVMocy0+dmRyX3JlZik7IGkrKykKKyAgICAgICAgYXZfYnVmZmVyX3VucmVmKCZz LT52ZHJfcmVmW2ldKTsKKworICAgIC8qIFByZXNlcnZlIHRoZSB1c2VyLXByb3ZpZGVkIGZpZWxk cyBleHBsaWNpdGx5LCByZXNldCBldmVyeXRoaW5nIGVsc2UgKi8KKyAgICAqcyA9IChET1ZJQ29u dGV4dCkgeworICAgICAgICAubG9nY3R4ID0gcy0+bG9nY3R4LAorICAgICAgICAuY29uZmlnID0g cy0+Y29uZmlnLAorICAgIH07Cit9CisKK2ludCBmZl9kb3ZpX2N0eF9yZXBsYWNlKERPVklDb250 ZXh0ICpzLCBjb25zdCBET1ZJQ29udGV4dCAqczApCit7CisgICAgaW50IHJldDsKKyAgICBzLT5s b2djdHggPSBzMC0+bG9nY3R4OworICAgIHMtPmNvbmZpZyA9IHMwLT5jb25maWc7CisgICAgcy0+ bWFwcGluZyA9IHMwLT5tYXBwaW5nOworICAgIHMtPmNvbG9yID0gczAtPmNvbG9yOworICAgIGZv ciAoaW50IGkgPSAwOyBpIDwgRE9WSV9NQVhfRE1fSUQ7IGkrKykgeworICAgICAgICBpZiAoKHJl dCA9IGF2X2J1ZmZlcl9yZXBsYWNlKCZzLT52ZHJfcmVmW2ldLCBzMC0+dmRyX3JlZltpXSkpIDwg MCkKKyAgICAgICAgICAgIGdvdG8gZmFpbDsKKyAgICB9CisKKyAgICByZXR1cm4gMDsKKworZmFp bDoKKyAgICBmZl9kb3ZpX2N0eF91bnJlZihzKTsKKyAgICByZXR1cm4gcmV0OworfQorCitpbnQg ZmZfZG92aV9hdHRhY2hfc2lkZV9kYXRhKERPVklDb250ZXh0ICpzLCBBVkZyYW1lICpmcmFtZSkK K3sKKyAgICBBVkZyYW1lU2lkZURhdGEgKnNkOworICAgIEFWQnVmZmVyUmVmICpidWY7CisgICAg QVZET1ZJTWV0YWRhdGEgKmRvdmk7CisgICAgc2l6ZV90IGRvdmlfc2l6ZTsKKworICAgIGlmICgh cy0+bWFwcGluZyB8fCAhcy0+Y29sb3IpCisgICAgICAgIHJldHVybiAwOyAvKiBpbmNvbXBsZXRl IGRvdmkgbWV0YWRhdGEgKi8KKworICAgIGRvdmkgPSBhdl9kb3ZpX21ldGFkYXRhX2FsbG9jKCZk b3ZpX3NpemUpOworICAgIGlmICghZG92aSkKKyAgICAgICAgcmV0dXJuIEFWRVJST1IoRU5PTUVN KTsKKworICAgIGJ1ZiA9IGF2X2J1ZmZlcl9jcmVhdGUoKHVpbnQ4X3QgKikgZG92aSwgZG92aV9z aXplLCBOVUxMLCBOVUxMLCAwKTsKKyAgICBpZiAoIWJ1ZikgeworICAgICAgICBhdl9mcmVlKGRv dmkpOworICAgICAgICByZXR1cm4gQVZFUlJPUihFTk9NRU0pOworICAgIH0KKworICAgIHNkID0g YXZfZnJhbWVfbmV3X3NpZGVfZGF0YV9mcm9tX2J1ZihmcmFtZSwgQVZfRlJBTUVfREFUQV9ET1ZJ X01FVEFEQVRBLCBidWYpOworICAgIGlmICghc2QpIHsKKyAgICAgICAgYXZfYnVmZmVyX3VucmVm KCZidWYpOworICAgICAgICByZXR1cm4gQVZFUlJPUihFTk9NRU0pOworICAgIH0KKworICAgIG1l bWNweShhdl9kb3ZpX2dldF9oZWFkZXIoZG92aSksICZzLT5oZWFkZXIsIHNpemVvZihzLT5oZWFk ZXIpKTsKKyAgICBtZW1jcHkoYXZfZG92aV9nZXRfbWFwcGluZyhkb3ZpKSwgcy0+bWFwcGluZywg c2l6ZW9mKCpzLT5tYXBwaW5nKSk7CisgICAgbWVtY3B5KGF2X2RvdmlfZ2V0X2NvbG9yKGRvdmkp LCBzLT5jb2xvciwgc2l6ZW9mKCpzLT5jb2xvcikpOworICAgIHJldHVybiAwOworfQorCitzdGF0 aWMgaW50IGd1ZXNzX3Byb2ZpbGUoY29uc3QgQVZET1ZJUnB1RGF0YUhlYWRlciAqaGRyKQorewor ICAgIHN3aXRjaCAoaGRyLT52ZHJfcnB1X3Byb2ZpbGUpIHsKKyAgICBjYXNlIDA6CisgICAgICAg IGlmIChoZHItPmJsX3ZpZGVvX2Z1bGxfcmFuZ2VfZmxhZykKKyAgICAgICAgICAgIHJldHVybiA1 OworICAgICAgICBicmVhazsKKyAgICBjYXNlIDE6CisgICAgICAgIGlmIChoZHItPmVsX3NwYXRp YWxfcmVzYW1wbGluZ19maWx0ZXJfZmxhZyAmJiAhaGRyLT5kaXNhYmxlX3Jlc2lkdWFsX2ZsYWcp IHsKKyAgICAgICAgICAgIGlmIChoZHItPnZkcl9iaXRfZGVwdGggPT0gMTIpIHsKKyAgICAgICAg ICAgICAgICByZXR1cm4gNzsKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAg cmV0dXJuIDQ7CisgICAgICAgICAgICB9CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBy ZXR1cm4gODsKKyAgICAgICAgfQorICAgIH0KKworICAgIHJldHVybiAwOyAvKiB1bmtub3duICov Cit9CisKK3N0YXRpYyBpbmxpbmUgdWludDY0X3QgZ2V0X3VlX2NvZWYoR2V0Qml0Q29udGV4dCAq Z2IsIGNvbnN0IEFWRE9WSVJwdURhdGFIZWFkZXIgKmhkcikKK3sKKyAgICB1aW50NjRfdCBpcGFy dDsKKyAgICB1bmlvbiB7IHVpbnQzMl90IHUzMjsgZmxvYXQgZjMyOyB9IGZwYXJ0OworCisgICAg c3dpdGNoIChoZHItPmNvZWZfZGF0YV90eXBlKSB7CisgICAgY2FzZSBSUFVfQ09FRkZfRklYRUQ6 CisgICAgICAgIGlwYXJ0ID0gZ2V0X3VlX2dvbG9tYl9sb25nKGdiKTsKKyAgICAgICAgZnBhcnQu dTMyID0gZ2V0X2JpdHNfbG9uZyhnYiwgaGRyLT5jb2VmX2xvZzJfZGVub20pOworICAgICAgICBy ZXR1cm4gKGlwYXJ0IDw8IGhkci0+Y29lZl9sb2cyX2Rlbm9tKSArIGZwYXJ0LnUzMjsKKworICAg IGNhc2UgUlBVX0NPRUZGX0ZMT0FUOgorICAgICAgICBmcGFydC51MzIgPSBnZXRfYml0c19sb25n KGdiLCAzMik7CisgICAgICAgIHJldHVybiBmcGFydC5mMzIgKiAoMSA8PCBoZHItPmNvZWZfbG9n Ml9kZW5vbSk7CisgICAgfQorCisgICAgcmV0dXJuIDA7IC8qIHVucmVhY2hhYmxlICovCit9CisK K3N0YXRpYyBpbmxpbmUgaW50NjRfdCBnZXRfc2VfY29lZihHZXRCaXRDb250ZXh0ICpnYiwgY29u c3QgQVZET1ZJUnB1RGF0YUhlYWRlciAqaGRyKQoreworICAgIGludDY0X3QgaXBhcnQ7CisgICAg dW5pb24geyB1aW50MzJfdCB1MzI7IGZsb2F0IGYzMjsgfSBmcGFydDsKKworICAgIHN3aXRjaCAo aGRyLT5jb2VmX2RhdGFfdHlwZSkgeworICAgIGNhc2UgUlBVX0NPRUZGX0ZJWEVEOgorICAgICAg ICBpcGFydCA9IGdldF9zZV9nb2xvbWJfbG9uZyhnYik7CisgICAgICAgIGZwYXJ0LnUzMiA9IGdl dF9iaXRzX2xvbmcoZ2IsIGhkci0+Y29lZl9sb2cyX2Rlbm9tKTsKKyAgICAgICAgcmV0dXJuIChp cGFydCA8PCBoZHItPmNvZWZfbG9nMl9kZW5vbSkgKyBmcGFydC51MzI7CisKKyAgICBjYXNlIFJQ VV9DT0VGRl9GTE9BVDoKKyAgICAgICAgZnBhcnQudTMyID0gZ2V0X2JpdHNfbG9uZyhnYiwgMzIp OworICAgICAgICByZXR1cm4gZnBhcnQuZjMyICogKDEgPDwgaGRyLT5jb2VmX2xvZzJfZGVub20p OworICAgIH0KKworICAgIHJldHVybiAwOyAvKiB1bnJlYWNoYWJsZSAqLworfQorCisjZGVmaW5l IFZBTElEQVRFKFZBUiwgTUlOLCBNQVgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIFwKKyAgICBkbyB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICBpZiAo VkFSIDwgTUlOIHx8IFZBUiA+IE1BWCkgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBcCisgICAgICAgICAgICBhdl9sb2cocy0+bG9nY3R4LCBBVl9MT0dfRVJST1Is ICJSUFUgdmFsaWRhdGlvbiBmYWlsZWQ6ICIgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICAg ICAjTUlOIiA8PSAiI1ZBUiIgPSAlZCA8PSAiI01BWCJcbiIsIChpbnQpIFZBUik7ICAgICAgICAg ICAgICAgXAorICAgICAgICAgICAgZ290byBmYWlsOyAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgIH0gICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IFwKKyAgICB9IHdoaWxlICgwKQorCitpbnQgZmZfZG92aV9ycHVfcGFyc2UoRE9WSUNvbnRleHQg KnMsIGNvbnN0IHVpbnQ4X3QgKnJwdSwgc2l6ZV90IHJwdV9zaXplKQoreworICAgIEFWRE9WSVJw dURhdGFIZWFkZXIgKmhkciA9ICZzLT5oZWFkZXI7CisgICAgR2V0Qml0Q29udGV4dCAqZ2IgPSAm KEdldEJpdENvbnRleHQpezB9OworICAgIERPVklWZHJSZWYgKnZkcjsKKyAgICBpbnQgcmV0Owor CisgICAgdWludDhfdCBuYWxfcHJlZml4OworICAgIHVpbnQ4X3QgcnB1X3R5cGU7CisgICAgdWlu dDhfdCB2ZHJfc2VxX2luZm9fcHJlc2VudDsKKyAgICB1aW50OF90IHZkcl9kbV9tZXRhZGF0YV9w cmVzZW50OworICAgIHVpbnQ4X3QgdXNlX3ByZXZfdmRyX3JwdTsKKyAgICB1aW50OF90IHVzZV9u bHE7CisgICAgdWludDhfdCBwcm9maWxlOworICAgIGlmICgocmV0ID0gaW5pdF9nZXRfYml0czgo Z2IsIHJwdSwgcnB1X3NpemUpKSA8IDApCisgICAgICAgIHJldHVybiByZXQ7CisKKyAgICAvKiBS UFUgaGVhZGVyLCBjb21tb24gdmFsdWVzICovCisgICAgbmFsX3ByZWZpeCA9IGdldF9iaXRzKGdi LCA4KTsKKyAgICBWQUxJREFURShuYWxfcHJlZml4LCAyNSwgMjUpOworICAgIHJwdV90eXBlID0g Z2V0X2JpdHMoZ2IsIDYpOworICAgIGlmIChycHVfdHlwZSAhPSAyKSB7CisgICAgICAgIGF2X2xv ZyhzLT5sb2djdHgsIEFWX0xPR19XQVJOSU5HLCAiVW5yZWNvZ25pemVkIFJQVSB0eXBlICIKKyAg ICAgICAgICAgICAgICIlIlBSSXU4IiwgaWdub3JpbmdcbiIsIHJwdV90eXBlKTsKKyAgICAgICAg cmV0dXJuIDA7CisgICAgfQorCisgICAgaGRyLT5ycHVfdHlwZSA9IHJwdV90eXBlOworICAgIGhk ci0+cnB1X2Zvcm1hdCA9IGdldF9iaXRzKGdiLCAxMSk7CisKKyAgICAvKiBWYWx1ZXMgc3BlY2lm aWMgdG8gUlBVIHR5cGUgMiAqLworICAgIGhkci0+dmRyX3JwdV9wcm9maWxlID0gZ2V0X2JpdHMo Z2IsIDQpOworICAgIGhkci0+dmRyX3JwdV9sZXZlbCA9IGdldF9iaXRzKGdiLCA0KTsKKworICAg IHZkcl9zZXFfaW5mb19wcmVzZW50ID0gZ2V0X2JpdHMxKGdiKTsKKyAgICBpZiAodmRyX3NlcV9p bmZvX3ByZXNlbnQpIHsKKyAgICAgICAgaGRyLT5jaHJvbWFfcmVzYW1wbGluZ19leHBsaWNpdF9m aWx0ZXJfZmxhZyA9IGdldF9iaXRzMShnYik7CisgICAgICAgIGhkci0+Y29lZl9kYXRhX3R5cGUg PSBnZXRfYml0cyhnYiwgMik7CisgICAgICAgIFZBTElEQVRFKGhkci0+Y29lZl9kYXRhX3R5cGUs IFJQVV9DT0VGRl9GSVhFRCwgUlBVX0NPRUZGX0ZMT0FUKTsKKyAgICAgICAgc3dpdGNoIChoZHIt PmNvZWZfZGF0YV90eXBlKSB7CisgICAgICAgIGNhc2UgUlBVX0NPRUZGX0ZJWEVEOgorICAgICAg ICAgICAgaGRyLT5jb2VmX2xvZzJfZGVub20gPSBnZXRfdWVfZ29sb21iKGdiKTsKKyAgICAgICAg ICAgIFZBTElEQVRFKGhkci0+Y29lZl9sb2cyX2Rlbm9tLCAxMywgMzIpOworICAgICAgICAgICAg YnJlYWs7CisgICAgICAgIGNhc2UgUlBVX0NPRUZGX0ZMT0FUOgorICAgICAgICAgICAgaGRyLT5j b2VmX2xvZzJfZGVub20gPSAzMjsgLyogYXJiaXRyYXJ5LCBjaG9vc2UgbWF4aW11bSBwcmVjaXNp b24gKi8KKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisKKyAgICAgICAgaGRyLT52ZHJf cnB1X25vcm1hbGl6ZWRfaWRjID0gZ2V0X2JpdHMoZ2IsIDIpOworICAgICAgICBoZHItPmJsX3Zp ZGVvX2Z1bGxfcmFuZ2VfZmxhZyA9IGdldF9iaXRzMShnYik7CisKKyAgICAgICAgaWYgKChoZHIt PnJwdV9mb3JtYXQgJiAweDcwMCkgPT0gMCkgeworICAgICAgICAgICAgaW50IGJsX2JpdF9kZXB0 aF9taW51czggPSBnZXRfdWVfZ29sb21iXzMxKGdiKTsKKyAgICAgICAgICAgIGludCBlbF9iaXRf ZGVwdGhfbWludXM4ID0gZ2V0X3VlX2dvbG9tYl8zMShnYik7CisgICAgICAgICAgICBpbnQgdmRy X2JpdF9kZXB0aF9taW51czggPSBnZXRfdWVfZ29sb21iXzMxKGdiKTsKKyAgICAgICAgICAgIFZB TElEQVRFKGJsX2JpdF9kZXB0aF9taW51czgsIDAsIDgpOworICAgICAgICAgICAgVkFMSURBVEUo ZWxfYml0X2RlcHRoX21pbnVzOCwgMCwgOCk7CisgICAgICAgICAgICBWQUxJREFURSh2ZHJfYml0 X2RlcHRoX21pbnVzOCwgMCwgOCk7CisgICAgICAgICAgICBoZHItPmJsX2JpdF9kZXB0aCA9IGJs X2JpdF9kZXB0aF9taW51czggKyA4OworICAgICAgICAgICAgaGRyLT5lbF9iaXRfZGVwdGggPSBl bF9iaXRfZGVwdGhfbWludXM4ICsgODsKKyAgICAgICAgICAgIGhkci0+dmRyX2JpdF9kZXB0aCA9 IHZkcl9iaXRfZGVwdGhfbWludXM4ICsgODsKKyAgICAgICAgICAgIGhkci0+c3BhdGlhbF9yZXNh bXBsaW5nX2ZpbHRlcl9mbGFnID0gZ2V0X2JpdHMxKGdiKTsKKyAgICAgICAgICAgIHNraXBfYml0 cyhnYiwgMyk7IC8qIHJlc2VydmVkX3plcm9fM2JpdHMgKi8KKyAgICAgICAgICAgIGhkci0+ZWxf c3BhdGlhbF9yZXNhbXBsaW5nX2ZpbHRlcl9mbGFnID0gZ2V0X2JpdHMxKGdiKTsKKyAgICAgICAg ICAgIGhkci0+ZGlzYWJsZV9yZXNpZHVhbF9mbGFnID0gZ2V0X2JpdHMxKGdiKTsKKyAgICAgICAg fQorICAgIH0KKworICAgIGlmICghaGRyLT5ibF9iaXRfZGVwdGgpIHsKKyAgICAgICAgYXZfbG9n KHMtPmxvZ2N0eCwgQVZfTE9HX0VSUk9SLCAiTWlzc2luZyBSUFUgVkRSIHNlcXVlbmNlIGluZm8/ XG4iKTsKKyAgICAgICAgZ290byBmYWlsOworICAgIH0KKworICAgIHZkcl9kbV9tZXRhZGF0YV9w cmVzZW50ID0gZ2V0X2JpdHMxKGdiKTsKKyAgICB1c2VfcHJldl92ZHJfcnB1ID0gZ2V0X2JpdHMx KGdiKTsKKyAgICB1c2VfbmxxID0gKGhkci0+cnB1X2Zvcm1hdCAmIDB4NzAwKSA9PSAwICYmICFo ZHItPmRpc2FibGVfcmVzaWR1YWxfZmxhZzsKKworICAgIHByb2ZpbGUgPSBzLT5jb25maWcgPyBz LT5jb25maWctPmR2X3Byb2ZpbGUgOiBndWVzc19wcm9maWxlKGhkcik7CisgICAgaWYgKHByb2Zp bGUgPT0gNSAmJiB1c2VfbmxxKSB7CisgICAgICAgIGF2X2xvZyhzLT5sb2djdHgsIEFWX0xPR19F UlJPUiwgIlByb2ZpbGUgNSBSUFVzIHNob3VsZCBub3QgdXNlIE5MUVxuIik7CisgICAgICAgIGdv dG8gZmFpbDsKKyAgICB9CisKKyAgICBpZiAodXNlX3ByZXZfdmRyX3JwdSkgeworICAgICAgICBp bnQgcHJldl92ZHJfcnB1X2lkID0gZ2V0X3VlX2dvbG9tYl8zMShnYik7CisgICAgICAgIFZBTElE QVRFKHByZXZfdmRyX3JwdV9pZCwgMCwgRE9WSV9NQVhfRE1fSUQpOworICAgICAgICBpZiAoIXMt PnZkcl9yZWZbcHJldl92ZHJfcnB1X2lkXSkgeworICAgICAgICAgICAgYXZfbG9nKHMtPmxvZ2N0 eCwgQVZfTE9HX0VSUk9SLCAiVW5rbm93biBwcmV2aW91cyBSUFUgSUQ6ICV1XG4iLAorICAgICAg ICAgICAgICAgICAgIHByZXZfdmRyX3JwdV9pZCk7CisgICAgICAgICAgICBnb3RvIGZhaWw7Cisg ICAgICAgIH0KKyAgICAgICAgdmRyID0gKERPVklWZHJSZWYgKikgcy0+dmRyX3JlZltwcmV2X3Zk cl9ycHVfaWRdLT5kYXRhOworICAgICAgICBzLT5tYXBwaW5nID0gJnZkci0+bWFwcGluZzsKKyAg ICB9IGVsc2UgeworICAgICAgICBpbnQgdmRyX3JwdV9pZCA9IGdldF91ZV9nb2xvbWJfMzEoZ2Ip OworICAgICAgICBWQUxJREFURSh2ZHJfcnB1X2lkLCAwLCBET1ZJX01BWF9ETV9JRCk7CisgICAg ICAgIGlmICghcy0+dmRyX3JlZlt2ZHJfcnB1X2lkXSkgeworICAgICAgICAgICAgcy0+dmRyX3Jl Zlt2ZHJfcnB1X2lkXSA9IGF2X2J1ZmZlcl9hbGxvY3ooc2l6ZW9mKERPVklWZHJSZWYpKTsKKyAg ICAgICAgICAgIGlmICghcy0+dmRyX3JlZlt2ZHJfcnB1X2lkXSkKKyAgICAgICAgICAgICAgICBy ZXR1cm4gQVZFUlJPUihFTk9NRU0pOworICAgICAgICB9CisKKyAgICAgICAgdmRyID0gKERPVklW ZHJSZWYgKikgcy0+dmRyX3JlZlt2ZHJfcnB1X2lkXS0+ZGF0YTsKKyAgICAgICAgcy0+bWFwcGlu ZyA9ICZ2ZHItPm1hcHBpbmc7CisKKyAgICAgICAgdmRyLT5tYXBwaW5nLnZkcl9ycHVfaWQgPSB2 ZHJfcnB1X2lkOworICAgICAgICB2ZHItPm1hcHBpbmcubWFwcGluZ19jb2xvcl9zcGFjZSA9IGdl dF91ZV9nb2xvbWJfMzEoZ2IpOworICAgICAgICB2ZHItPm1hcHBpbmcubWFwcGluZ19jaHJvbWFf Zm9ybWF0X2lkYyA9IGdldF91ZV9nb2xvbWJfMzEoZ2IpOworCisgICAgICAgIGZvciAoaW50IGMg PSAwOyBjIDwgMzsgYysrKSB7CisgICAgICAgICAgICBBVkRPVklSZXNoYXBpbmdDdXJ2ZSAqY3Vy dmUgPSAmdmRyLT5tYXBwaW5nLmN1cnZlc1tjXTsKKyAgICAgICAgICAgIGludCBudW1fcGl2b3Rz X21pbnVzXzIgPSBnZXRfdWVfZ29sb21iXzMxKGdiKTsKKyAgICAgICAgICAgIGludCBwaXZvdCA9 IDA7CisKKyAgICAgICAgICAgIFZBTElEQVRFKG51bV9waXZvdHNfbWludXNfMiwgMCwgQVZfRE9W SV9NQVhfUElFQ0VTIC0gMSk7CisgICAgICAgICAgICBjdXJ2ZS0+bnVtX3Bpdm90cyA9IG51bV9w aXZvdHNfbWludXNfMiArIDI7CisgICAgICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IGN1cnZl LT5udW1fcGl2b3RzOyBpKyspIHsKKyAgICAgICAgICAgICAgICBwaXZvdCArPSBnZXRfYml0cyhn YiwgaGRyLT5ibF9iaXRfZGVwdGgpOworICAgICAgICAgICAgICAgIGN1cnZlLT5waXZvdHNbaV0g PSBhdl9jbGlwX3VpbnQxNihwaXZvdCk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAg ICAgICBpZiAodXNlX25scSkgeworICAgICAgICAgICAgdmRyLT5tYXBwaW5nLm5scV9tZXRob2Rf aWRjID0gZ2V0X2JpdHMoZ2IsIDMpOworICAgICAgICAgICAgLyoqCisgICAgICAgICAgICAgKiBU aGUgcGF0ZW50IG1lbnRpb25zIGFub3RoZXIgbGVnYWwgdmFsdWUsIE5MUV9NVV9MQVcsIGJ1dCBp dCdzCisgICAgICAgICAgICAgKiBub3QgZG9jdW1lbnRlZCBhbnl3aGVyZSBob3cgdG8gcGFyc2Ug b3IgYXBwbHkgdGhhdCB0eXBlIG9mIE5MUS4KKyAgICAgICAgICAgICAqLworICAgICAgICAgICAg VkFMSURBVEUodmRyLT5tYXBwaW5nLm5scV9tZXRob2RfaWRjLCAwLCBBVl9ET1ZJX05MUV9MSU5F QVJfRFopOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgdmRyLT5tYXBwaW5nLm5scV9t ZXRob2RfaWRjID0gQVZfRE9WSV9OTFFfTk9ORTsKKyAgICAgICAgfQorCisgICAgICAgIHZkci0+ bWFwcGluZy5udW1feF9wYXJ0aXRpb25zID0gZ2V0X3VlX2dvbG9tYl9sb25nKGdiKSArIDE7Cisg ICAgICAgIHZkci0+bWFwcGluZy5udW1feV9wYXJ0aXRpb25zID0gZ2V0X3VlX2dvbG9tYl9sb25n KGdiKSArIDE7CisgICAgICAgIC8qIEVuZCBvZiBycHVfZGF0YV9oZWFkZXIoKSwgc3RhcnQgb2Yg dmRyX3JwdV9kYXRhX3BheWxvYWQoKSAqLworCisgICAgICAgIGZvciAoaW50IGMgPSAwOyBjIDwg MzsgYysrKSB7CisgICAgICAgICAgICBBVkRPVklSZXNoYXBpbmdDdXJ2ZSAqY3VydmUgPSAmdmRy LT5tYXBwaW5nLmN1cnZlc1tjXTsKKyAgICAgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgY3Vy dmUtPm51bV9waXZvdHMgLSAxOyBpKyspIHsKKyAgICAgICAgICAgICAgICBpbnQgbWFwcGluZ19p ZGMgPSBnZXRfdWVfZ29sb21iXzMxKGdiKTsKKyAgICAgICAgICAgICAgICBWQUxJREFURShtYXBw aW5nX2lkYywgMCwgMSk7CisgICAgICAgICAgICAgICAgY3VydmUtPm1hcHBpbmdfaWRjW2ldID0g bWFwcGluZ19pZGM7CisgICAgICAgICAgICAgICAgc3dpdGNoIChtYXBwaW5nX2lkYykgeworICAg ICAgICAgICAgICAgIGNhc2UgQVZfRE9WSV9NQVBQSU5HX1BPTFlOT01JQUw6IHsKKyAgICAgICAg ICAgICAgICAgICAgaW50IHBvbHlfb3JkZXJfbWludXMxID0gZ2V0X3VlX2dvbG9tYl8zMShnYik7 CisgICAgICAgICAgICAgICAgICAgIFZBTElEQVRFKHBvbHlfb3JkZXJfbWludXMxLCAwLCAxKTsK KyAgICAgICAgICAgICAgICAgICAgY3VydmUtPnBvbHlfb3JkZXJbaV0gPSBwb2x5X29yZGVyX21p bnVzMSArIDE7CisgICAgICAgICAgICAgICAgICAgIGlmIChwb2x5X29yZGVyX21pbnVzMSA9PSAw KSB7CisgICAgICAgICAgICAgICAgICAgICAgICBpbnQgbGluZWFyX2ludGVycF9mbGFnID0gZ2V0 X2JpdHMxKGdiKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIChsaW5lYXJfaW50ZXJwX2Zs YWcpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBsYWNrIG9mIGRvY3VtZW50YXRp b24vc2FtcGxlcyAqLworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGF2cHJpdl9yZXF1ZXN0 X3NhbXBsZShzLT5sb2djdHgsICJEb2xieSBWaXNpb24gIgorICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAibGluZWFyIGludGVycG9sYXRpb24iKTsKKyAg ICAgICAgICAgICAgICAgICAgICAgICAgICBmZl9kb3ZpX2N0eF91bnJlZihzKTsKKyAgICAgICAg ICAgICAgICAgICAgICAgICAgICByZXR1cm4gQVZFUlJPUl9QQVRDSFdFTENPTUU7CisgICAgICAg ICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAg ICAgICAgZm9yIChpbnQgayA9IDA7IGsgPD0gY3VydmUtPnBvbHlfb3JkZXJbaV07IGsrKykKKyAg ICAgICAgICAgICAgICAgICAgICAgIGN1cnZlLT5wb2x5X2NvZWZbaV1ba10gPSBnZXRfc2VfY29l ZihnYiwgaGRyKTsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAg fQorICAgICAgICAgICAgICAgIGNhc2UgQVZfRE9WSV9NQVBQSU5HX01NUjogeworICAgICAgICAg ICAgICAgICAgICBpbnQgbW1yX29yZGVyX21pbnVzMSA9IGdldF9iaXRzKGdiLCAyKTsKKyAgICAg ICAgICAgICAgICAgICAgVkFMSURBVEUobW1yX29yZGVyX21pbnVzMSwgMCwgMik7CisgICAgICAg ICAgICAgICAgICAgIGN1cnZlLT5tbXJfb3JkZXJbaV0gPSBtbXJfb3JkZXJfbWludXMxICsgMTsK KyAgICAgICAgICAgICAgICAgICAgY3VydmUtPm1tcl9jb25zdGFudFtpXSA9IGdldF9zZV9jb2Vm KGdiLCBoZHIpOworICAgICAgICAgICAgICAgICAgICBmb3IgKGludCBqID0gMDsgaiA8IGN1cnZl LT5tbXJfb3JkZXJbaV07IGorKykgeworICAgICAgICAgICAgICAgICAgICAgICAgZm9yIChpbnQg ayA9IDA7IGsgPCA3OyBrKyspCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgY3VydmUtPm1t cl9jb2VmW2ldW2pdW2tdID0gZ2V0X3NlX2NvZWYoZ2IsIGhkcik7CisgICAgICAgICAgICAgICAg ICAgIH0KKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgfQorICAg ICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIGlmICh1 c2VfbmxxKSB7CisgICAgICAgICAgICBmb3IgKGludCBjID0gMDsgYyA8IDM7IGMrKykgeworICAg ICAgICAgICAgICAgIEFWRE9WSU5MUVBhcmFtcyAqbmxxID0gJnZkci0+bWFwcGluZy5ubHFbY107 CisgICAgICAgICAgICAgICAgbmxxLT5ubHFfb2Zmc2V0ID0gZ2V0X2JpdHMoZ2IsIGhkci0+ZWxf Yml0X2RlcHRoKTsKKyAgICAgICAgICAgICAgICBubHEtPnZkcl9pbl9tYXggPSBnZXRfdWVfY29l ZihnYiwgaGRyKTsKKyAgICAgICAgICAgICAgICBzd2l0Y2ggKHZkci0+bWFwcGluZy5ubHFfbWV0 aG9kX2lkYykgeworICAgICAgICAgICAgICAgIGNhc2UgQVZfRE9WSV9OTFFfTElORUFSX0RaOgor ICAgICAgICAgICAgICAgICAgICBubHEtPmxpbmVhcl9kZWFkem9uZV9zbG9wZSA9IGdldF91ZV9j b2VmKGdiLCBoZHIpOworICAgICAgICAgICAgICAgICAgICBubHEtPmxpbmVhcl9kZWFkem9uZV90 aHJlc2hvbGQgPSBnZXRfdWVfY29lZihnYiwgaGRyKTsKKyAgICAgICAgICAgICAgICAgICAgYnJl YWs7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQor CisgICAgaWYgKHZkcl9kbV9tZXRhZGF0YV9wcmVzZW50KSB7CisgICAgICAgIEFWRE9WSUNvbG9y TWV0YWRhdGEgKmNvbG9yOworICAgICAgICBpbnQgYWZmZWN0ZWRfZG1faWQgPSBnZXRfdWVfZ29s b21iXzMxKGdiKTsKKyAgICAgICAgaW50IGN1cnJlbnRfZG1faWQgPSBnZXRfdWVfZ29sb21iXzMx KGdiKTsKKyAgICAgICAgVkFMSURBVEUoYWZmZWN0ZWRfZG1faWQsIDAsIERPVklfTUFYX0RNX0lE KTsKKyAgICAgICAgVkFMSURBVEUoY3VycmVudF9kbV9pZCwgMCwgRE9WSV9NQVhfRE1fSUQpOwor ICAgICAgICBpZiAoIXMtPnZkcl9yZWZbYWZmZWN0ZWRfZG1faWRdKSB7CisgICAgICAgICAgICBz LT52ZHJfcmVmW2FmZmVjdGVkX2RtX2lkXSA9IGF2X2J1ZmZlcl9hbGxvY3ooc2l6ZW9mKERPVklW ZHJSZWYpKTsKKyAgICAgICAgICAgIGlmICghcy0+dmRyX3JlZlthZmZlY3RlZF9kbV9pZF0pCisg ICAgICAgICAgICAgICAgcmV0dXJuIEFWRVJST1IoRU5PTUVNKTsKKyAgICAgICAgfQorCisgICAg ICAgIGlmICghcy0+dmRyX3JlZltjdXJyZW50X2RtX2lkXSkgeworICAgICAgICAgICAgYXZfbG9n KHMtPmxvZ2N0eCwgQVZfTE9HX0VSUk9SLCAiVW5rbm93biBwcmV2aW91cyBSUFUgRE0gSUQ6ICV1 XG4iLAorICAgICAgICAgICAgICAgICAgIGN1cnJlbnRfZG1faWQpOworICAgICAgICAgICAgZ290 byBmYWlsOworICAgICAgICB9CisKKyAgICAgICAgLyogVXBkYXRlIGN1cnJlbnQgcG9pbnRlciBi YXNlZCBvbiBjdXJyZW50X2RtX2lkICovCisgICAgICAgIHZkciA9IChET1ZJVmRyUmVmICopIHMt PnZkcl9yZWZbY3VycmVudF9kbV9pZF0tPmRhdGE7CisgICAgICAgIHMtPmNvbG9yID0gJnZkci0+ Y29sb3I7CisKKyAgICAgICAgLyogVXBkYXRlIHZhbHVlcyBvZiBhZmZlY3RlZF9kbV9pZCAqLwor ICAgICAgICB2ZHIgPSAoRE9WSVZkclJlZiAqKSBzLT52ZHJfcmVmW2FmZmVjdGVkX2RtX2lkXS0+ ZGF0YTsKKyAgICAgICAgY29sb3IgPSAmdmRyLT5jb2xvcjsKKyAgICAgICAgY29sb3ItPmRtX21l dGFkYXRhX2lkID0gYWZmZWN0ZWRfZG1faWQ7CisgICAgICAgIGNvbG9yLT5zY2VuZV9yZWZyZXNo X2ZsYWcgPSBnZXRfdWVfZ29sb21iXzMxKGdiKTsKKyAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkg PCA5OyBpKyspCisgICAgICAgICAgICBjb2xvci0+eWNjX3RvX3JnYl9tYXRyaXhbaV0gPSBhdl9t YWtlX3EoZ2V0X3NiaXRzKGdiLCAxNiksIDEgPDwgMTMpOworICAgICAgICBmb3IgKGludCBpID0g MDsgaSA8IDM7IGkrKykgeworICAgICAgICAgICAgaW50IGRlbm9tID0gcHJvZmlsZSA9PSA0ID8g KDEgPDwgMzApIDogKDEgPDwgMjgpOworICAgICAgICAgICAgdW5zaWduZWQgb2Zmc2V0ID0gZ2V0 X2JpdHNfbG9uZyhnYiwgMzIpOworICAgICAgICAgICAgaWYgKG9mZnNldCA+IElOVF9NQVgpIHsK KyAgICAgICAgICAgICAgICAvKiBFbnN1cmUgdGhlIHJlc3VsdCBmaXRzIGluc2lkZSBBVlJhdGlv bmFsICovCisgICAgICAgICAgICAgICAgb2Zmc2V0ID4+PSAxOworICAgICAgICAgICAgICAgIGRl bm9tID4+PSAxOworICAgICAgICAgICAgfQorICAgICAgICAgICAgY29sb3ItPnljY190b19yZ2Jf b2Zmc2V0W2ldID0gYXZfbWFrZV9xKG9mZnNldCwgZGVub20pOworICAgICAgICB9CisgICAgICAg IGZvciAoaW50IGkgPSAwOyBpIDwgOTsgaSsrKQorICAgICAgICAgICAgY29sb3ItPnJnYl90b19s bXNfbWF0cml4W2ldID0gYXZfbWFrZV9xKGdldF9zYml0cyhnYiwgMTYpLCAxIDw8IDE0KTsKKwor ICAgICAgICBjb2xvci0+c2lnbmFsX2VvdGYgPSBnZXRfYml0cyhnYiwgMTYpOworICAgICAgICBj b2xvci0+c2lnbmFsX2VvdGZfcGFyYW0wID0gZ2V0X2JpdHMoZ2IsIDE2KTsKKyAgICAgICAgY29s b3ItPnNpZ25hbF9lb3RmX3BhcmFtMSA9IGdldF9iaXRzKGdiLCAxNik7CisgICAgICAgIGNvbG9y LT5zaWduYWxfZW90Zl9wYXJhbTIgPSBnZXRfYml0c19sb25nKGdiLCAzMik7CisgICAgICAgIGNv bG9yLT5zaWduYWxfYml0X2RlcHRoID0gZ2V0X2JpdHMoZ2IsIDUpOworICAgICAgICBWQUxJREFU RShjb2xvci0+c2lnbmFsX2JpdF9kZXB0aCwgOCwgMTYpOworICAgICAgICBjb2xvci0+c2lnbmFs X2NvbG9yX3NwYWNlID0gZ2V0X2JpdHMoZ2IsIDIpOworICAgICAgICBjb2xvci0+c2lnbmFsX2No cm9tYV9mb3JtYXQgPSBnZXRfYml0cyhnYiwgMik7CisgICAgICAgIGNvbG9yLT5zaWduYWxfZnVs bF9yYW5nZV9mbGFnID0gZ2V0X2JpdHMoZ2IsIDIpOworICAgICAgICBjb2xvci0+c291cmNlX21p bl9wcSA9IGdldF9iaXRzKGdiLCAxMik7CisgICAgICAgIGNvbG9yLT5zb3VyY2VfbWF4X3BxID0g Z2V0X2JpdHMoZ2IsIDEyKTsKKyAgICAgICAgY29sb3ItPnNvdXJjZV9kaWFnb25hbCA9IGdldF9i aXRzKGdiLCAxMCk7CisgICAgfQorCisgICAgLyogRklYTUU6IHZlcmlmeSBDUkMzMiwgcmVxdWly ZXMgaW1wbGVtZW50YXRpb24gb2YgQVZfQ1JDXzMyX01QRUdfMiAqLworICAgIHJldHVybiAwOwor CitmYWlsOgorICAgIGZmX2RvdmlfY3R4X3VucmVmKHMpOyAvKiBkb24ndCBsZWFrIHBvdGVudGlh bGx5IGludmFsaWQgc3RhdGUgKi8KKyAgICByZXR1cm4gQVZFUlJPUihFSU5WQUwpOworfQpkaWZm IC0tZ2l0IGEvbGliYXZjb2RlYy9kb3ZpX3JwdS5oIGIvbGliYXZjb2RlYy9kb3ZpX3JwdS5oCm5l dyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAuLjY5MjU5NDBkZDEKLS0tIC9kZXYv bnVsbAorKysgYi9saWJhdmNvZGVjL2RvdmlfcnB1LmgKQEAgLTAsMCArMSw3MSBAQAorLyoKKyAq IERvbGJ5IFZpc2lvbiBSUFUgZGVjb2RlcgorICoKKyAqIENvcHlyaWdodCAoQykgMjAyMSBKYW4g RWtzdHLDtm0KKyAqIENvcHlyaWdodCAoQykgMjAyMSBOaWtsYXMgSGFhcworICoKKyAqIFRoaXMg ZmlsZSBpcyBwYXJ0IG9mIEZGbXBlZy4KKyAqCisgKiBGRm1wZWcgaXMgZnJlZSBzb2Z0d2FyZTsg eW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRl cm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFzIHB1Ymxp c2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNpb24g Mi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9u LgorICoKKyAqIEZGbXBlZyBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwg YmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhl IGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBB IFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBMZXNzZXIgR2VuZXJhbCBQdWJs aWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNl aXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2Ug YWxvbmcgd2l0aCBGRm1wZWc7IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAq IEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3Rv biwgTUEgMDIxMTAtMTMwMSBVU0EKKyAqLworCisjaWZuZGVmIEFWQ09ERUNfRE9WSV9SUFVfSAor I2RlZmluZSBBVkNPREVDX0RPVklfUlBVX0gKKworI2luY2x1ZGUgImxpYmF2dXRpbC9kb3ZpX21l dGEuaCIKKyNpbmNsdWRlICJsaWJhdnV0aWwvZnJhbWUuaCIKKworI2RlZmluZSBET1ZJX01BWF9E TV9JRCAxNQordHlwZWRlZiBzdHJ1Y3QgRE9WSUNvbnRleHQgeworICAgIHZvaWQgKmxvZ2N0eDsK KyAgICBjb25zdCBBVkRPVklEZWNvZGVyQ29uZmlndXJhdGlvblJlY29yZCAqY29uZmlnOyAvLy88 IHByb3ZpZGVkIGJ5IEFQSSB1c2VyCisgICAgQVZCdWZmZXJSZWYgKnZkcl9yZWZbRE9WSV9NQVhf RE1fSUQrMV07IC8vLzwgZGVjb2RlZCBWRFIgZGF0YSBtYXBwaW5ncworCisgICAgLyoqCisgICAg ICogQ3VycmVudGx5IGFjdGl2ZSBSUFUgZGF0YSBoZWFkZXIsIHVwZGF0ZXMgb24gZXZlcnkgZG92 aV9ycHVfcGFyc2UoKS4KKyAgICAgKi8KKyAgICBBVkRPVklScHVEYXRhSGVhZGVyIGhlYWRlcjsK KworICAgIC8qKgorICAgICAqIEN1cnJlbnRseSBhY3RpdmUgZGF0YSBtYXBwaW5ncywgb3IgTlVM TC4gUG9pbnRzIGludG8gbWVtb3J5IG93bmVkIGJ5IHRoZQorICAgICAqIGNvcnJlc3BvbmRpbmcg cnB1L3Zkcl9yZWYsIHdoaWNoIGJlY29tZXMgaW52YWxpZCBvbiB0aGUgbmV4dCBjYWxsIHRvCisg ICAgICogZG92aV9ycHVfcGFyc2UuCisgICAgICovCisgICAgY29uc3QgQVZET1ZJRGF0YU1hcHBp bmcgKm1hcHBpbmc7CisgICAgY29uc3QgQVZET1ZJQ29sb3JNZXRhZGF0YSAqY29sb3I7Cit9IERP VklDb250ZXh0OworCisvKioKKyAqIENvbXBsZXRlbHkgcmVzZXRzIHRoZSBpbnRlcm5hbCBzdGF0 ZSBvZiBhIERPVklDb250ZXh0LCBidXQgZXhwbGljaXRseQorICogcHJlc2VydmVzIGFueSB1c2Vy LXByb3ZpZGVkIGZpZWxkcy4KKyAqLwordm9pZCBmZl9kb3ZpX2N0eF91bnJlZihET1ZJQ29udGV4 dCAqcyk7CisKK2ludCBmZl9kb3ZpX2N0eF9yZXBsYWNlKERPVklDb250ZXh0ICpzLCBjb25zdCBE T1ZJQ29udGV4dCAqczApOworCisvKioKKyAqIFBhcnNlIHRoZSBjb250ZW50cyBvZiBhIERvdmkg UlBVIE5BTCBhbmQgdXBkYXRlIHRoZSBwYXJzZWQgdmFsdWVzIGluIHRoZQorICogRE9WSUNvbnRl eHQgc3RydWN0LgorICoKKyAqIFJldHVybnMgMCBvciBhbiBlcnJvciBjb2RlLgorICovCitpbnQg ZmZfZG92aV9ycHVfcGFyc2UoRE9WSUNvbnRleHQgKnMsIGNvbnN0IHVpbnQ4X3QgKnJwdSwgc2l6 ZV90IHJwdV9zaXplKTsKKworLyoqCisgKiBBdHRhY2ggdGhlIGRlY29kZWQgQVZET1ZJTWV0YWRh dGEgYXMgc2lkZSBkYXRhIHRvIGFuIEFWRnJhbWUuCisgKi8KK2ludCBmZl9kb3ZpX2F0dGFjaF9z aWRlX2RhdGEoRE9WSUNvbnRleHQgKnMsIEFWRnJhbWUgKmZyYW1lKTsKKworI2VuZGlmIC8qIEFW Q09ERUNfRE9WSV9SUFVfSCAqLwotLSAKMi4zNC4xCgpfX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fXwpmZm1wZWctZGV2ZWwgbWFpbGluZyBsaXN0CmZmbXBlZy1k ZXZlbEBmZm1wZWcub3JnCmh0dHBzOi8vZmZtcGVnLm9yZy9tYWlsbWFuL2xpc3RpbmZvL2ZmbXBl Zy1kZXZlbAoKVG8gdW5zdWJzY3JpYmUsIHZpc2l0IGxpbmsgYWJvdmUsIG9yIGVtYWlsCmZmbXBl Zy1kZXZlbC1yZXF1ZXN0QGZmbXBlZy5vcmcgd2l0aCBzdWJqZWN0ICJ1bnN1YnNjcmliZSIuCg==