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 E132E40333 for ; Wed, 22 Jun 2022 06:49:20 +0000 (UTC) Received: from [127.0.1.1] (localhost [127.0.0.1]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTP id 98E0568B6D0; Wed, 22 Jun 2022 09:49:13 +0300 (EEST) Received: from mailout1.w1.samsung.com (mailout1.w1.samsung.com [210.118.77.11]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id C958068B0CD for ; Wed, 22 Jun 2022 09:49:06 +0300 (EEST) Received: from eucas1p2.samsung.com (unknown [182.198.249.207]) by mailout1.w1.samsung.com (KnoxPortal) with ESMTP id 20220622064905euoutp0124aa9db9ad8805ddf0ef30820be91bd4~63pU4bJTd2816028160euoutp01V for ; Wed, 22 Jun 2022 06:49:05 +0000 (GMT) DKIM-Filter: OpenDKIM Filter v2.11.0 mailout1.w1.samsung.com 20220622064905euoutp0124aa9db9ad8805ddf0ef30820be91bd4~63pU4bJTd2816028160euoutp01V DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=samsung.com; s=mail20170921; t=1655880545; bh=jZmCsfWZpCF1+rOWYZBgQhwKXriFWnh8UfnnVQ7y+zU=; h=From:To:Subject:Date:References:From; b=LZO/tGohiw/ory5uu5cISrFxfrg/ueDsOGwb1evIzoRuACTbzPgyJaaV38V+/+OG9 SVMiam/3CHBUXG/zn7fzP8WkcHcfJIRrMPIZ2ivxQzg3CkUFn/4MnykHdIjKWZxB6h Vyqnsigxc4fi+B94Qmr+uawUNPrZCVt+K7r1/O0c= Received: from eusmges2new.samsung.com (unknown [203.254.199.244]) by eucas1p1.samsung.com (KnoxPortal) with ESMTP id 20220622064905eucas1p12772a2dce6a9cc9ea22d325628b4829b~63pUmtqbS2963529635eucas1p1y for ; Wed, 22 Jun 2022 06:49:05 +0000 (GMT) Received: from eucas1p2.samsung.com ( [182.198.249.207]) by eusmges2new.samsung.com (EUCPMTA) with SMTP id 69.3E.10067.06BB2B26; Wed, 22 Jun 2022 07:49:05 +0100 (BST) Received: from eusmtrp2.samsung.com (unknown [182.198.249.139]) by eucas1p1.samsung.com (KnoxPortal) with ESMTPA id 20220622064904eucas1p19bbbc922c4f1b734730c48169bada35a~63pULbhq92949329493eucas1p17 for ; Wed, 22 Jun 2022 06:49:04 +0000 (GMT) Received: from eusmgms1.samsung.com (unknown [182.198.249.179]) by eusmtrp2.samsung.com (KnoxPortal) with ESMTP id 20220622064904eusmtrp2008cb688a148f4b45bcd6af2a5bdd022~63pUK1eaV0070700707eusmtrp2i for ; Wed, 22 Jun 2022 06:49:04 +0000 (GMT) X-AuditID: cbfec7f4-dd7ff70000002753-0e-62b2bb6069a8 Received: from eusmtip2.samsung.com ( [203.254.199.222]) by eusmgms1.samsung.com (EUCPMTA) with SMTP id 5B.40.09095.06BB2B26; Wed, 22 Jun 2022 07:49:04 +0100 (BST) Received: from AMDN3260 (unknown [106.210.132.171]) by eusmtip2.samsung.com (KnoxPortal) with ESMTPA id 20220622064904eusmtip29003988b3670c2ab4f59e8a533e8e467~63pTv6SE22990829908eusmtip2F for ; Wed, 22 Jun 2022 06:49:04 +0000 (GMT) From: "Dawid Kozinski" To: Date: Wed, 22 Jun 2022 08:49:04 +0200 Message-ID: <00bb01d88604$29cbc180$7d634480$@samsung.com> MIME-Version: 1.0 X-Mailer: Microsoft Outlook 16.0 Thread-Index: AdiGAjXpq6O0EN1BQtC9UmcGVuTcVA== Content-Language: pl X-Brightmail-Tracker: H4sIAAAAAAAAA+NgFnrNIsWRmVeSWpSXmKPExsWy7djP87qJuzclGax/zmjx7dMZZgdGjz+L NrMEMEZx2aSk5mSWpRbp2yVwZew5sJKpYP8e9oquI61sDYy3ZrN3MXJySAiYSLx6/o6xi5GL Q0hgBaPEjKUfoZxJTBJPjjczQTgTmSQ2d+5jgmlZ8vsKC0RiOaPE7lXf2SGcNiaJY31f2UCq 2AT0JWYu+gRmiwjISqz+NwXMFhYIlbg2bxWYzSKgKjH/6R0wm1fAUuLj9pOMELagxMmZT1hA bGYBbYllC18zQ2xWkPj5dBkrxEw9iZ93XzNB1IhI3HjUAna3hMBXdonrjf8ZIRpcJLb+2cAK YQtLvDq+BeprGYn/O+cDNXMA2cUSh/odIMwaiUM/0iEqrCXeNh5nBAkzC2hKrN+lDxF2lHi8 aRILRDWfxI23ghAH8ElM2jadGSLMK9HRJgRhqkj0dYpBNEpJPF02B+oND4mWR6+YJzAqzkLy 7Swk385C8tUshBMWMLKsYhRPLS3OTU8tNspLLdcrTswtLs1L10vOz93ECEwPp/8d/7KDcfmr j3qHGJk4GA8xSnAwK4nw2nBvSBLiTUmsrEotyo8vKs1JLT7EKM3BoiTOm5y5IVFIID2xJDU7 NbUgtQgmy8TBKdXAtP1n9KRJG2Yd0FcVUdnsVZ62mO+nSO/iM9P/XX7cee5g9x8H5sW3Dp7v zI1e86767Knak4lvPYJ4NPZbXqmYxTrRyU4j1nRK+HPum3aZZdcb7j4yvTSVRVyCa0XeB6n+ xU8/Pb/9T+/aFuf9M1UWOK65dcdWuSso4WPYTrsDb5x9JkwpSe9/qdfx9sTRGhlvwf73dWrz 9tp+O1k/xUyjznhn1d1i8fnqs7fzeJ6erfBeecoMb+5NOhW7jrL8PTMjryWGc2ZCRoBS4Lsr e+v6esz2iXNmCm0+q/5xN0fBQp8lzrzSjJcqOMvV3zh4C0WsYrZKCVDbKTO3fM+mI1FfxM1X KZRbMO/77v1i0/vl+5RYijMSDbWYi4oTAXPdAgp+AwAA X-Brightmail-Tracker: H4sIAAAAAAAAA+NgFnrJLMWRmVeSWpSXmKPExsVy+t/xe7oJuzclGTzaqW7x7dMZZgdGjz+L NrMEMEbp2RTll5akKmTkF5fYKkUbWhjpGVpa6BmZWOoZGpvHWhmZKunb2aSk5mSWpRbp2yXo ZfSuf8hS0HCPpWLVqj7mBsbPu5m7GDk5JARMJJb8vsLSxcjFISSwlFHid+d6NoiElMTSpYsY IWxhiT/XutggilqYJKY1d7KCJNgE9CVmLvoE1iAiICux+t8UMFtYIFjiWcsNsA0sAqoS85/e AYvzClhKfNx+khHCFpQ4OfMJC4jNLKAt8fTmUzh72cLXUNcpSPx8uowVYr6exM+7r5kgakQk bjxqYZzAKDALyahZSEbNQjJqFpKWBYwsqxhFUkuLc9Nziw31ihNzi0vz0vWS83M3MQLDfNux n5t3MM579VHvECMTB+MhRgkOZiURXhvuDUlCvCmJlVWpRfnxRaU5qcWHGE2BfpvILCWanA+M tLySeEMzA1NDEzNLA1NLM2MlcV7Pgo5EIYH0xJLU7NTUgtQimD4mDk6pBqaZK1ewq8/h6Zpq eOHSuYthB6a5tLdYbDl3vDiTj+VJ+3/zTWuO9qVEF/PK1UaYNrj8yG0+6tJg/idt9ZfJRzpO JpfcyGbOk3H4eHH/lctm048vvHyTI4djXbiPzdpPTO8ty1IZuBcExk+Z9DToUnd/xl7miCd3 rlxj++bxeYGbIa9q466nh4PqN39JOib6ZOPPKX+Pzr5nU3vhM2v51JD7Rmp5KRYKuoYRJr8z IoT/6r/lmN74aq2EFn8a75OVTj05E5UU33z4KN1yZe16v/B/l2W+Ns24dWJZrH2vQSX3i+pF /63Pmd07NM+x5VNIwxbPbyxsFjXWrVNKnX7tNSuzvSCb9bgqZar8ijPVXCZKLMUZiYZazEXF iQCMrKHN/AIAAA== X-CMS-MailID: 20220622064904eucas1p19bbbc922c4f1b734730c48169bada35a X-Msg-Generator: CA X-RootMTR: 20220622064904eucas1p19bbbc922c4f1b734730c48169bada35a X-EPHeader: CA CMS-TYPE: 201P X-CMS-RootMailID: 20220622064904eucas1p19bbbc922c4f1b734730c48169bada35a References: Subject: [FFmpeg-devel] [PATCH 2/3] Provided support for MPEG-5 EVC (Essential Video Coding) codec 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 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: LSBBZGRlZCB4ZXZlIGVuY29kZXIgd3JhcHBlcgotIEFkZGVkIHhldmQgZGVuY29kZXIgd3JhcHBl cgotIEFkZGVkIGRvY3VtZW50YXRpb24gZm9yIHhldmUgYW5kIHhldmQgd3JhcHBlcnMKLSBBZGRl ZCBwYXJzZXIgZm9yIEVWQyBmb3JtYXQKLSBDaGFuZ2VzIGluIHByb2plY3QgY29uZmlndXJhdGlv biBmaWxlIGFuZCBsaWJhdmNvZGVjIE1ha2VmaWxlCgpTaWduZWQtb2ZmLWJ5OiBEYXdpZCBLb3pp bnNraSA8ZC5rb3ppbnNraUBzYW1zdW5nLmNvbT4KLS0tCiBjb25maWd1cmUgICAgICAgICAgICAg ICAgIHwgICA4ICsKIGRvYy9kZWNvZGVycy50ZXhpICAgICAgICAgfCAgMjQgKysKIGRvYy9lbmNv ZGVycy50ZXhpICAgICAgICAgfCAxMTIgKysrKysrCiBkb2MvZ2VuZXJhbF9jb250ZW50cy50ZXhp IHwgIDE5ICsKIGxpYmF2Y29kZWMvTWFrZWZpbGUgICAgICAgfCAgIDMgKwogbGliYXZjb2RlYy9h bGxjb2RlY3MuYyAgICB8ICAgMiArCiBsaWJhdmNvZGVjL2F2Y29kZWMuaCAgICAgIHwgICAzICsK IGxpYmF2Y29kZWMvZXZjX3BhcnNlci5jICAgfCA1MjcgKysrKysrKysrKysrKysrKysrKysrKysr KysKIGxpYmF2Y29kZWMvbGlieGV2ZC5jICAgICAgfCA0NDAgKysrKysrKysrKysrKysrKysrKysr KwogbGliYXZjb2RlYy9saWJ4ZXZlLmMgICAgICB8IDc1MyArKysrKysrKysrKysrKysrKysrKysr KysrKysrKysrKysrKysrKwogbGliYXZjb2RlYy9wYXJzZXJzLmMgICAgICB8ICAgMSArCiAxMSBm aWxlcyBjaGFuZ2VkLCAxODkyIGluc2VydGlvbnMoKykKIGNyZWF0ZSBtb2RlIDEwMDY0NCBsaWJh dmNvZGVjL2V2Y19wYXJzZXIuYwogY3JlYXRlIG1vZGUgMTAwNjQ0IGxpYmF2Y29kZWMvbGlieGV2 ZC5jCiBjcmVhdGUgbW9kZSAxMDA2NDQgbGliYXZjb2RlYy9saWJ4ZXZlLmMKCmRpZmYgLS1naXQg YS9jb25maWd1cmUgYi9jb25maWd1cmUKaW5kZXggM2E5NzYxMDIwOS4uODA3MWUyMjg1OSAxMDA3 NTUKLS0tIGEvY29uZmlndXJlCisrKyBiL2NvbmZpZ3VyZQpAQCAtMjkxLDYgKzI5MSw4IEBAIEV4 dGVybmFsIGxpYnJhcnkgc3VwcG9ydDoKICAgLS1lbmFibGUtbGlid2VicCAgICAgICAgIGVuYWJs ZSBXZWJQIGVuY29kaW5nIHZpYSBsaWJ3ZWJwIFtub10KICAgLS1lbmFibGUtbGlieDI2NCAgICAg ICAgIGVuYWJsZSBILjI2NCBlbmNvZGluZyB2aWEgeDI2NCBbbm9dCiAgIC0tZW5hYmxlLWxpYngy NjUgICAgICAgICBlbmFibGUgSEVWQyBlbmNvZGluZyB2aWEgeDI2NSBbbm9dCisgIC0tZW5hYmxl LWxpYnhldmUgICAgICAgICBlbmFibGUgTVBFRy01IEVzc2VudGlhbCBWaWRlbyBDb2RpbmcgKEVW QykgZW5jb2RpbmcgdmlhIGxpYnhldmUgW25vXQorICAtLWVuYWJsZS1saWJ4ZXZkICAgICAgICAg ZW5hYmxlIE1QRUctNSBFc3NlbnRpYWwgVmlkZW8gQ29kaW5nIChFVkMpIGRlY29kaW5nIHZpYSBs aWJ4ZXZkIFtub10KICAgLS1lbmFibGUtbGlieGF2cyAgICAgICAgIGVuYWJsZSBBVlMgZW5jb2Rp bmcgdmlhIHhhdnMgW25vXQogICAtLWVuYWJsZS1saWJ4YXZzMiAgICAgICAgZW5hYmxlIEFWUzIg ZW5jb2RpbmcgdmlhIHhhdnMyIFtub10KICAgLS1lbmFibGUtbGlieGNiICAgICAgICAgIGVuYWJs ZSBYMTEgZ3JhYmJpbmcgdXNpbmcgWENCIFthdXRvZGV0ZWN0XQpAQCAtMTg3NCw2ICsxODc2LDgg QEAgRVhURVJOQUxfTElCUkFSWV9MSVNUPSIKICAgICBsaWJ2b3JiaXMKICAgICBsaWJ2cHgKICAg ICBsaWJ3ZWJwCisgICAgbGlieGV2ZAorICAgIGxpYnhldmUKICAgICBsaWJ4bWwyCiAgICAgbGli emltZwogICAgIGxpYnptcQpAQCAtMzM4NCw2ICszMzg4LDggQEAgbGlieDI2NHJnYl9lbmNvZGVy X3NlbGVjdD0ibGlieDI2NF9lbmNvZGVyIgogbGlieDI2NV9lbmNvZGVyX2RlcHM9ImxpYngyNjUi CiBsaWJ4YXZzX2VuY29kZXJfZGVwcz0ibGlieGF2cyIKIGxpYnhhdnMyX2VuY29kZXJfZGVwcz0i bGlieGF2czIiCitsaWJ4ZXZkX2RlY29kZXJfZGVwcz0ibGlieGV2ZCIKK2xpYnhldmVfZW5jb2Rl cl9kZXBzPSJsaWJ4ZXZlIgogbGlieHZpZF9lbmNvZGVyX2RlcHM9ImxpYnh2aWQiCiBsaWJ6dmJp X3RlbGV0ZXh0X2RlY29kZXJfZGVwcz0ibGlienZiaSIKIHZhcG91cnN5bnRoX2RlbXV4ZXJfZGVw cz0idmFwb3Vyc3ludGgiCkBAIC02NjY4LDYgKzY2NzQsOCBAQCBlbmFibGVkIGxpYngyNjUgICAg ICAgICAgICYmIHJlcXVpcmVfcGtnX2NvbmZpZyBsaWJ4MjY1IHgyNjUgeDI2NS5oIHgyNjVfYXBp X2dldAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXF1aXJlX2NwcF9jb25kaXRpb24g bGlieDI2NSB4MjY1LmggIlgyNjVfQlVJTEQgPj0gNzAiCiBlbmFibGVkIGxpYnhhdnMgICAgICAg ICAgICYmIHJlcXVpcmUgbGlieGF2cyAic3RkaW50LmggeGF2cy5oIiB4YXZzX2VuY29kZXJfZW5j b2RlICItbHhhdnMgJHB0aHJlYWRzX2V4dHJhbGlicyAkbGlibV9leHRyYWxpYnMiCiBlbmFibGVk IGxpYnhhdnMyICAgICAgICAgICYmIHJlcXVpcmVfcGtnX2NvbmZpZyBsaWJ4YXZzMiAieGF2czIg Pj0gMS4zLjAiICJzdGRpbnQuaCB4YXZzMi5oIiB4YXZzMl9hcGlfZ2V0CitlbmFibGVkIGxpYnhl dmQgICAgICAgICAgICYmIHJlcXVpcmVfcGtnX2NvbmZpZyBsaWJ4ZXZkICJ4ZXZkID49IDAuMy4z IiAieGV2ZC5oIiB4ZXZkX2RlY29kZQorZW5hYmxlZCBsaWJ4ZXZlICAgICAgICAgICAmJiByZXF1 aXJlX3BrZ19jb25maWcgbGlieGV2ZSAieGV2ZSA+PSAwLjMuNSIgInhldmUuaCIgeGV2ZV9lbmNv ZGUKIGVuYWJsZWQgbGlieHZpZCAgICAgICAgICAgJiYgcmVxdWlyZSBsaWJ4dmlkIHh2aWQuaCB4 dmlkX2dsb2JhbCAtbHh2aWRjb3JlCiBlbmFibGVkIGxpYnppbWcgICAgICAgICAgICYmIHJlcXVp cmVfcGtnX2NvbmZpZyBsaWJ6aW1nICJ6aW1nID49IDIuNy4wIiB6aW1nLmggemltZ19nZXRfYXBp X3ZlcnNpb24KIGVuYWJsZWQgbGliem1xICAgICAgICAgICAgJiYgcmVxdWlyZV9wa2dfY29uZmln IGxpYnptcSAibGliem1xID49IDQuMi4xIiB6bXEuaCB6bXFfY3R4X25ldwpkaWZmIC0tZ2l0IGEv ZG9jL2RlY29kZXJzLnRleGkgYi9kb2MvZGVjb2RlcnMudGV4aQppbmRleCBlMmZjYmY1ZGM5Li4w YmQ5MDk2MTE0IDEwMDY0NAotLS0gYS9kb2MvZGVjb2RlcnMudGV4aQorKysgYi9kb2MvZGVjb2Rl cnMudGV4aQpAQCAtMTI2LDYgKzEyNiwzMCBAQCBTZXQgYW1vdW50IG9mIGZyYW1lIHRocmVhZHMg dG8gdXNlIGR1cmluZyBkZWNvZGluZy4gVGhlIGRlZmF1bHQgdmFsdWUgaXMgMCAoYXV0bwogCiBA ZW5kIHRhYmxlCiAKK0BzZWN0aW9uIGxpYnhldmQKKworZVh0cmEtZmFzdCBFc3NlbnRpYWwgVmlk ZW8gRGVjb2RlciAoWEVWRCkgTVBFRy01IEVWQyBkZWNvZGVyIHdyYXBwZXIuCisKK1RoaXMgZGVj b2RlciByZXF1aXJlcyB0aGUgcHJlc2VuY2Ugb2YgdGhlIGxpYnhldmQgaGVhZGVycyBhbmQgbGli cmFyeQorZHVyaW5nIGNvbmZpZ3VyYXRpb24uIFlvdSBuZWVkIHRvIGV4cGxpY2l0bHkgY29uZmln dXJlIHRoZSBidWlsZCB3aXRoCitAb3B0aW9uey0tZW5hYmxlLWxpYnhldmR9LgorCitUaGUgeGV2 ZCBwcm9qZWN0IHdlYnNpdGUgaXMgYXQgQHVybHtodHRwczovL2dpdGh1Yi5jb20vbXBlZzUveGV2 ZH0uCisKK0BzdWJzZWN0aW9uIE9wdGlvbnMKKworVGhlIGZvbGxvd2luZyBvcHRpb25zIGFyZSBz dXBwb3J0ZWQgYnkgdGhlIGxpYnhldmQgd3JhcHBlci4KK1RoZSB4ZXZkLWVxdWl2YWxlbnQgb3B0 aW9ucyBvciB2YWx1ZXMgYXJlIGxpc3RlZCBpbiBwYXJlbnRoZXNlcyBmb3IgZWFzeSBtaWdyYXRp b24uCisKK1RvIGdldCBhIG1vcmUgYWNjdXJhdGUgYW5kIGV4dGVuc2l2ZSBkb2N1bWVudGF0aW9u IG9mIHRoZSBsaWJ4ZXZkIG9wdGlvbnMsCitpbnZva2UgdGhlIGNvbW1hbmQgIEBjb2Rle3hldmRf YXBwIC0taGVscH0gb3IgY29uc3VsdCB0aGUgbGlieGV2ZCBkb2N1bWVudGF0aW9uLgorCitAdGFi bGUgQG9wdGlvbgorQGl0ZW0gdGhyZWFkcyAoQGVtcGh7dGhyZWFkc30pCitGb3JjZSB0byB1c2Ug YSBzcGVjaWZpYyBudW1iZXIgb2YgdGhyZWFkcworCitAZW5kIHRhYmxlCisKIEBzZWN0aW9uIFFT ViBEZWNvZGVycwogCiBUaGUgZmFtaWx5IG9mIEludGVsIFF1aWNrU3luYyBWaWRlbyBkZWNvZGVy cyAoVkMxLCBNUEVHLTIsIEguMjY0LCBIRVZDLApkaWZmIC0tZ2l0IGEvZG9jL2VuY29kZXJzLnRl eGkgYi9kb2MvZW5jb2RlcnMudGV4aQppbmRleCAxODUwYzk5ZmU5Li4yNDVkZjY4MGQyIDEwMDY0 NAotLS0gYS9kb2MvZW5jb2RlcnMudGV4aQorKysgYi9kb2MvZW5jb2RlcnMudGV4aQpAQCAtMjg5 Miw2ICsyODkyLDExOCBAQCBmZm1wZWcgLWkgaW5wdXQgLWM6diBsaWJ4YXZzMiAteGF2czItcGFy YW1zIFJkb3FMZXZlbD0wIG91dHB1dC5hdnMyCiBAZW5kIGV4YW1wbGUKIEBlbmQgdGFibGUKIAor QHNlY3Rpb24gbGlieGV2ZQorCitlWHRyYS1mYXN0IEVzc2VudGlhbCBWaWRlbyBFbmNvZGVyIChY RVZFKSBNUEVHLTUgRVZDIGVuY29kZXIgd3JhcHBlci4KKworVGhpcyBlbmNvZGVyIHJlcXVpcmVz IHRoZSBwcmVzZW5jZSBvZiB0aGUgbGlieGV2ZSBoZWFkZXJzIGFuZCBsaWJyYXJ5CitkdXJpbmcg Y29uZmlndXJhdGlvbi4gWW91IG5lZWQgdG8gZXhwbGljaXRseSBjb25maWd1cmUgdGhlIGJ1aWxk IHdpdGgKK0BvcHRpb257LS1lbmFibGUtbGlieGV2ZX0uCisKK0BmbG9hdCBOT1RFCitNYW55IGxp YnhldmUgZW5jb2RlciBvcHRpb25zIGFyZSBtYXBwZWQgdG8gRkZtcGVnIGdsb2JhbCBjb2RlYyBv cHRpb25zLAord2hpbGUgdW5pcXVlIGVuY29kZXIgb3B0aW9ucyBhcmUgcHJvdmlkZWQgdGhyb3Vn aCBwcml2YXRlIG9wdGlvbnMuCitBZGRpdGlvbmFsbHkgdGhlIHhldmUtcGFyYW1zIHByaXZhdGUg b3B0aW9ucyBhbGxvd3Mgb25lIHRvIHBhc3MgYSBsaXN0CitvZiBrZXk9dmFsdWUgdHVwbGVzIGFz IGFjY2VwdGVkIGJ5IHRoZSBsaWJ4ZXZlIEBjb2Rle3BhcnNlX3hldmVfcGFyYW1zfSBmdW5jdGlv bi4KK0BlbmQgZmxvYXQKKworVGhlIHhldmUgcHJvamVjdCB3ZWJzaXRlIGlzIGF0IEB1cmx7aHR0 cHM6Ly9naXRodWIuY29tL21wZWc1L3hldmV9LgorCitAc3Vic2VjdGlvbiBPcHRpb25zCisKK1Ro ZSBmb2xsb3dpbmcgb3B0aW9ucyBhcmUgc3VwcG9ydGVkIGJ5IHRoZSBsaWJ4ZXZlIHdyYXBwZXIu CitUaGUgeGV2ZS1lcXVpdmFsZW50IG9wdGlvbnMgb3IgdmFsdWVzIGFyZSBsaXN0ZWQgaW4gcGFy ZW50aGVzZXMgZm9yIGVhc3kgbWlncmF0aW9uLgorCitAZmxvYXQgTk9URQorVG8gcmVkdWNlIHRo ZSBkdXBsaWNhdGlvbiBvZiBkb2N1bWVudGF0aW9uLCBvbmx5IHRoZSBwcml2YXRlIG9wdGlvbnMK K2FuZCBzb21lIG90aGVycyByZXF1aXJpbmcgc3BlY2lhbCBhdHRlbnRpb24gYXJlIGRvY3VtZW50 ZWQgaGVyZS4gRm9yCit0aGUgZG9jdW1lbnRhdGlvbiBvZiB0aGUgdW5kb2N1bWVudGVkIGdlbmVy aWMgb3B0aW9ucywgc2VlCitAcmVme2NvZGVjLW9wdGlvbnMsLHRoZSBDb2RlYyBPcHRpb25zIGNo YXB0ZXJ9LgorQGVuZCBmbG9hdAorCitAZmxvYXQgTk9URQorVG8gZ2V0IGEgbW9yZSBhY2N1cmF0 ZSBhbmQgZXh0ZW5zaXZlIGRvY3VtZW50YXRpb24gb2YgdGhlIGxpYnhldmUgb3B0aW9ucywKK2lu dm9rZSB0aGUgY29tbWFuZCAgQGNvZGV7eGV2ZV9hcHAgLS1oZWxwfSBvciBjb25zdWx0IHRoZSBs aWJ4ZXZlIGRvY3VtZW50YXRpb24uCitAZW5kIGZsb2F0CisKK0B0YWJsZSBAb3B0aW9uCitAaXRl bSBiIChAZW1waHtiaXRyYXRlfSkKK1NldCB0YXJnZXQgdmlkZW8gYml0cmF0ZSBpbiBiaXRzL3Mu CitOb3RlIHRoYXQgRkZtcGVnw6LigqzihKJzIGIgb3B0aW9uIGlzIGV4cHJlc3NlZCBpbiBiaXRz L3MsIHdoaWxlIHhldmXDouKCrOKEonMgYml0cmF0ZSBpcyBpbiBraWxvYml0cy9zLg0KKw0KK0Bp dGVtIGJmIChAZW1waHtiZnJhbWVzfSkNCitTZXQgdGhlIG1heGltdW0gbnVtYmVyIG9mIEIgZnJh bWVzICgxLDMsNywxNSkuDQorDQorQGl0ZW0gZyAoQGVtcGh7a2V5aW50fSkNCitTZXQgdGhlIEdP UCBzaXplIChJLXBpY3R1cmUgcGVyaW9kKS4NCisNCitAaXRlbSBwcmVzZXQgKEBlbXBoe3ByZXNl dH0pDQorU2V0IHRoZSB4ZXZlIHByZXNldC4NCitTZXQgdGhlIGVuY29kZXIgcHJlc2V0IHZhbHVl IHRvIGRldGVybWluZSBlbmNvZGluZyBzcGVlZCBbZmFzdCwgbWVkaXVtLCBzbG93LCBwbGFjZWJv XQ0KKw0KK0BpdGVtIHR1bmUgKEBlbXBoe3R1bmV9KQ0KK1NldCB0aGUgZW5jb2RlciB0dW5lIHBh cmFtZXRlciBbcHNuciwgemVyb2xhdGVuY3ldDQorDQorQGl0ZW0gcHJvZmlsZSAoQGVtcGh7cHJv ZmlsZX0pDQorU2V0IHRoZSBlbmNvZGVyIHByb2ZpbGUgWzA6IGJhc2VsaWU7IDE6IG1haW5dDQor DQorQGl0ZW0gY3JmIChAZW1waHtjcmZ9KQ0KK1NldCB0aGUgcXVhbGl0eSBmb3IgY29uc3RhbnQg cXVhbGl0eSBtb2RlLg0KK0NvbnN0YW50IHJhdGUgZmFjdG9yIDwtMS4uNTE+IFtkZWZhdWx0OiAz Ml0NCisNCitAaXRlbSBxcCAoQGVtcGh7cXB9KQ0KK1NldCBjb25zdGFudCBxdWFudGl6YXRpb24g cmF0ZSBjb250cm9sIG1ldGhvZCBwYXJhbWV0ZXIuDQorUXVhbnRpemF0aW9uIHBhcmFtZXRlciBx cCA8MC4uNTE+IFtkZWZhdWx0OiAzMl0NCisNCitAaXRlbSB0aHJlYWRzIChAZW1waHt0aHJlYWRz fSkNCitGb3JjZSB0byB1c2UgYSBzcGVjaWZpYyBudW1iZXIgb2YgdGhyZWFkcw0KKw0KK0BpdGVt IHhldmUtcGFyYW1zDQorU2V0IHhldmUgb3B0aW9ucyB1c2luZyBhIGxpc3Qgb2YgQHZhcntrZXl9 PUB2YXJ7dmFsdWV9IGNvdXBsZXMgc2VwYXJhdGVkDQorYnkgIjoiLg0KKw0KK0ZvciBleGFtcGxl IHRvIHNwZWNpZnkgbGlieGV2ZSBlbmNvZGluZyBvcHRpb25zIHdpdGggQG9wdGlvbnsteGV2ZS1w YXJhbXN9Og0KKw0KK0BleGFtcGxlDQorZmZtcGVnIC1pIGlucHV0IC1jOnYgbGlieGV2ZSAteGV2 ZS1wYXJhbXMgcHJvZmlsZT1tYWluOnR1bmU9emVyb2xhdGVuY3k6cHJlc2V0PWZhc3Q6cT0xNzpi ZnJhbWVzPTE1OmJpdHJhdGU9MTAwayBvdXRwdXQubXA0DQorQGVuZCBleGFtcGxlDQorQGVuZCB0 YWJsZQ0KKw0KK0BzdWJzdWJzZWN0aW9uIFN1cHBvcnRlZCBrZXkgdmFsdWVzIGZvciB4ZXZlLXBh cmFtcw0KKw0KK1NldCB4ZXZlIG9wdGlvbnMgdXNpbmcgYSBsaXN0IG9mIEB2YXJ7a2V5fT1AdmFy e3ZhbHVlfSBjb3VwbGVzIHNlcGFyYXRlZA0KKw0KK0B0YWJsZSBAb3B0aW9uDQorDQorQGl0ZW0g aGFzaA0KK0VtYmVkIHRoZSBwaWN0dXJlIHNpZ25hdHVyZSAoSEFTSCkgZm9yIGNvbmZvcm1hbmNl IGNoZWNraW5nIGluIGRlY29kaW5nLCAoMDogT2ZmLCAxOiBPbikNCisNCitAaXRlbSB2YnYtYnVm c2l6ZQ0KK1NldCB0aGUgVkJWIGJ1ZmZlciBzaXplOiBLYml0cyhub25lLEssayksIE1iaXRzKE0s bSkNCisNCitAaXRlbSByYy10eXBlDQorU2V0IHRoZSByYXRlIGNvbnRyb2wgdHlwZSwgKDA6IE9G RiwgMTogQUJSLCAyOiBDUkYpDQorDQorQGl0ZW0gYmZyYW1lcw0KK1NldCB0aGUgbWF4aW11bSBu dW1iZXIgb2YgQiBmcmFtZXMgKDEsMyw3LDE1KQ0KKw0KK0BpdGVtIHByb2ZpbGUNCitTZXQgdGhl IFBST0ZJTEUgKG1haW4sIGJhc2VsaW5lKQ0KKw0KK0BpdGVtIHByZXNldA0KK1NldCB0aGUgZW5j b2RlciBQUkVTRVQgKGZhc3QsIG1lZGl1bSwgc2xvdywgcGxhY2VibykNCisNCitAaXRlbSB0dW5l DQorU2V0IHRoZSBlbmNvZGVyIFRVTkUgKHBzbnIsIHplcm9sYXRlbmN5KQ0KKw0KK0BpdGVtIGJp dHJhdGUNCitTZXQgdGhlIEJpdHJhdGUgaW4gdGVybXMgb2Yga2lsby1iaXRzIHBlciBzZWNvbmQ6 IEticHMobm9uZSxLLGspLCBNYnBzKE0sbSkNCisNCitAaXRlbSBxcA0KK1NldCB0aGUgUVAgdmFs dWUgKDB+NTEpDQorDQorQGVuZCB0YWJsZQ0KKw0KIEBzZWN0aW9uIGxpYnh2aWQNCiANCiBYdmlk IE1QRUctNCBQYXJ0IDIgZW5jb2RlciB3cmFwcGVyLg0KZGlmZiAtLWdpdCBhL2RvYy9nZW5lcmFs X2NvbnRlbnRzLnRleGkgYi9kb2MvZ2VuZXJhbF9jb250ZW50cy50ZXhpDQppbmRleCA5ODdhMmY4 MmZiLi42YzRiNzUwNmJhIDEwMDY0NA0KLS0tIGEvZG9jL2dlbmVyYWxfY29udGVudHMudGV4aQ0K KysrIGIvZG9jL2dlbmVyYWxfY29udGVudHMudGV4aQ0KQEAgLTM0Myw2ICszNDMsMjIgQEAgbGli eGF2czIgaXMgdW5kZXIgdGhlIEdOVSBQdWJsaWMgTGljZW5zZSBWZXJzaW9uIDIgb3IgbGF0ZXIN CiBkZXRhaWxzKSwgeW91IG11c3QgdXBncmFkZSBGRm1wZWcncyBsaWNlbnNlIHRvIEdQTCBpbiBv cmRlciB0byB1c2UgaXQuDQogQGVuZCBmbG9hdA0KIA0KK0BzZWN0aW9uIGVYdHJhLWZhc3QgRXNz ZW50aWFsIFZpZGVvIEVuY29kZXIgKFhFVkUpDQorDQorRkZtcGVnIGNhbiBtYWtlIHVzZSBvZiB0 aGUgWEVWRSBsaWJyYXJ5IGZvciBFVkMgdmlkZW8gZW5jb2RpbmcuDQorDQorR28gdG8gQHVybHto dHRwczovL2dpdGh1Yi5jb20vbXBlZzUveGV2ZX0gYW5kIGZvbGxvdyB0aGUgaW5zdHJ1Y3Rpb25z IGZvcg0KK2luc3RhbGxpbmcgdGhlIFhFVkUgbGlicmFyeS4gVGhlbiBwYXNzIEBjb2Rley0tZW5h YmxlLWxpYnhldmV9IHRvIGNvbmZpZ3VyZSB0bw0KK2VuYWJsZSBpdC4NCisNCitAc2VjdGlvbiBl WHRyYS1mYXN0IEVzc2VudGlhbCBWaWRlbyBEZWNvZGVyIChYRVZEKQ0KKw0KK0ZGbXBlZyBjYW4g bWFrZSB1c2Ugb2YgdGhlIFhFVkQgbGlicmFyeSBmb3IgRVZDIHZpZGVvIGRlY29kaW5nLg0KKw0K K0dvIHRvIEB1cmx7aHR0cHM6Ly9naXRodWIuY29tL21wZWc1L3hldmR9IGFuZCBmb2xsb3cgdGhl IGluc3RydWN0aW9ucyBmb3INCitpbnN0YWxsaW5nIHRoZSBYRVZEIGxpYnJhcnkuIFRoZW4gcGFz cyBAY29kZXstLWVuYWJsZS1saWJ4ZXZkfSB0byBjb25maWd1cmUgdG8NCitlbmFibGUgaXQuDQor DQogQHNlY3Rpb24gWlZCSQ0KIA0KIFpWQkkgaXMgYSBWQkkgZGVjb2RpbmcgbGlicmFyeSB3aGlj aCBjYW4gYmUgdXNlZCBieSBGRm1wZWcgdG8gZGVjb2RlIERWQg0KQEAgLTU5MSw2ICs2MDcsNyBA QCBsaWJyYXJ5Og0KIEBpdGVtIHJhdyBEVFMgICAgICAgICAgICAgICAgICAgQHRhYiBYIEB0YWIg WA0KIEBpdGVtIHJhdyBEVFMtSEQgICAgICAgICAgICAgICAgQHRhYiAgIEB0YWIgWA0KIEBpdGVt IHJhdyBFLUFDLTMgICAgICAgICAgICAgICAgQHRhYiBYIEB0YWIgWA0KK0BpdGVtIHJhdyBFVkMg ICAgICAgICAgICAgICAgICAgQHRhYiBYIEB0YWIgWA0KIEBpdGVtIHJhdyBGTEFDICAgICAgICAg ICAgICAgICAgQHRhYiBYIEB0YWIgWA0KIEBpdGVtIHJhdyBHU00gICAgICAgICAgICAgICAgICAg QHRhYiAgIEB0YWIgWA0KIEBpdGVtIHJhdyBILjI2MSAgICAgICAgICAgICAgICAgQHRhYiBYIEB0 YWIgWA0KQEAgLTkyNCw2ICs5NDEsOCBAQCBmb2xsb3dpbmcgaW1hZ2UgZm9ybWF0cyBhcmUgc3Vw cG9ydGVkOg0KIEBpdGVtIEVsZWN0cm9uaWMgQXJ0cyBUUUkgdmlkZW8gIEB0YWIgICAgIEB0YWIg IFgNCiBAaXRlbSBFc2NhcGUgMTI0ICAgICAgICAgICAgIEB0YWIgICAgIEB0YWIgIFgNCiBAaXRl bSBFc2NhcGUgMTMwICAgICAgICAgICAgIEB0YWIgICAgIEB0YWIgIFgNCitAaXRlbSBFVkMgLyBN UEVHLTUgUGFydCAxICAgIEB0YWIgIFggIEB0YWIgIFgNCisgICAgQHRhYiBlbmNvZGluZyBhbmQg ZGVjb2Rpbmcgc3VwcG9ydGVkIHRocm91Z2ggZXh0ZXJuYWwgbGlicmFyaWVzIGxpYnhldmUgYW5k IGxpYnhldmQNCiBAaXRlbSBGRm1wZWcgdmlkZW8gY29kZWMgIzEgIEB0YWIgIFggIEB0YWIgIFgN CiAgICAgQHRhYiBsb3NzbGVzcyBjb2RlYyAoZm91cmNjOiBGRlYxKQ0KIEBpdGVtIEZsYXNoIFNj cmVlbiBWaWRlbyB2MSAgQHRhYiAgWCAgQHRhYiAgWA0KZGlmZiAtLWdpdCBhL2xpYmF2Y29kZWMv TWFrZWZpbGUgYi9saWJhdmNvZGVjL01ha2VmaWxlDQppbmRleCAzYjhmN2I1ZTAxLi5jYjJkNDM4 YTE0IDEwMDY0NA0KLS0tIGEvbGliYXZjb2RlYy9NYWtlZmlsZQ0KKysrIGIvbGliYXZjb2RlYy9N YWtlZmlsZQ0KQEAgLTExMDMsNiArMTEwMyw4IEBAIE9CSlMtJChDT05GSUdfTElCWDI2NF9FTkNP REVSKSAgICAgICAgICAgICs9IGxpYngyNjQubw0KIE9CSlMtJChDT05GSUdfTElCWDI2NV9FTkNP REVSKSAgICAgICAgICAgICs9IGxpYngyNjUubw0KIE9CSlMtJChDT05GSUdfTElCWEFWU19FTkNP REVSKSAgICAgICAgICAgICs9IGxpYnhhdnMubw0KIE9CSlMtJChDT05GSUdfTElCWEFWUzJfRU5D T0RFUikgICAgICAgICAgICs9IGxpYnhhdnMyLm8NCitPQkpTLSQoQ09ORklHX0xJQlhFVkRfREVD T0RFUikgICAgICAgICAgICArPSBsaWJ4ZXZkLm8NCitPQkpTLSQoQ09ORklHX0xJQlhFVkVfRU5D T0RFUikgICAgICAgICAgICArPSBsaWJ4ZXZlLm8NCiBPQkpTLSQoQ09ORklHX0xJQlhWSURfRU5D T0RFUikgICAgICAgICAgICArPSBsaWJ4dmlkLm8NCiBPQkpTLSQoQ09ORklHX0xJQlpWQklfVEVM RVRFWFRfREVDT0RFUikgICArPSBsaWJ6dmJpLXRlbGV0ZXh0ZGVjLm8gYXNzLm8NCiANCkBAIC0x MTMwLDYgKzExMzIsNyBAQCBPQkpTLSQoQ09ORklHX0RWQVVESU9fUEFSU0VSKSAgICAgICAgICAr PSBkdmF1ZGlvX3BhcnNlci5vDQogT0JKUy0kKENPTkZJR19EVkJTVUJfUEFSU0VSKSAgICAgICAg ICAgKz0gZHZic3ViX3BhcnNlci5vDQogT0JKUy0kKENPTkZJR19EVkRfTkFWX1BBUlNFUikgICAg ICAgICAgKz0gZHZkX25hdl9wYXJzZXIubw0KIE9CSlMtJChDT05GSUdfRFZEU1VCX1BBUlNFUikg ICAgICAgICAgICs9IGR2ZHN1Yl9wYXJzZXIubw0KK09CSlMtJChDT05GSUdfRVZDX1BBUlNFUikg ICAgICAgICAgICAgICs9IGV2Y19wYXJzZXIubw0KIE9CSlMtJChDT05GSUdfRkxBQ19QQVJTRVIp ICAgICAgICAgICAgICs9IGZsYWNfcGFyc2VyLm8gZmxhY2RhdGEubyBmbGFjLm8NCiBPQkpTLSQo Q09ORklHX0c3MjNfMV9QQVJTRVIpICAgICAgICAgICArPSBnNzIzXzFfcGFyc2VyLm8NCiBPQkpT LSQoQ09ORklHX0c3MjlfUEFSU0VSKSAgICAgICAgICAgICArPSBnNzI5X3BhcnNlci5vDQpkaWZm IC0tZ2l0IGEvbGliYXZjb2RlYy9hbGxjb2RlY3MuYyBiL2xpYmF2Y29kZWMvYWxsY29kZWNzLmMN CmluZGV4IGYwYjAxMDUxYjAuLjJlMGFjYzZmOWEgMTAwNjQ0DQotLS0gYS9saWJhdmNvZGVjL2Fs bGNvZGVjcy5jDQorKysgYi9saWJhdmNvZGVjL2FsbGNvZGVjcy5jDQpAQCAtNzk0LDYgKzc5NCw4 IEBAIGV4dGVybiBMSUJYMjY0X0NPTlNUIEZGQ29kZWMgZmZfbGlieDI2NF9lbmNvZGVyOw0KICNl bmRpZg0KIGV4dGVybiBjb25zdCBGRkNvZGVjIGZmX2xpYngyNjRyZ2JfZW5jb2RlcjsNCiBleHRl cm4gRkZDb2RlYyBmZl9saWJ4MjY1X2VuY29kZXI7DQorZXh0ZXJuIGNvbnN0IEZGQ29kZWMgZmZf bGlieGV2ZV9lbmNvZGVyOw0KK2V4dGVybiBjb25zdCBGRkNvZGVjIGZmX2xpYnhldmRfZGVjb2Rl cjsNCiBleHRlcm4gY29uc3QgRkZDb2RlYyBmZl9saWJ4YXZzX2VuY29kZXI7DQogZXh0ZXJuIGNv bnN0IEZGQ29kZWMgZmZfbGlieGF2czJfZW5jb2RlcjsNCiBleHRlcm4gY29uc3QgRkZDb2RlYyBm Zl9saWJ4dmlkX2VuY29kZXI7DQpkaWZmIC0tZ2l0IGEvbGliYXZjb2RlYy9hdmNvZGVjLmggYi9s aWJhdmNvZGVjL2F2Y29kZWMuaA0KaW5kZXggNGRhZTIzZDA2ZS4uYjgzODcwYzE3NCAxMDA2NDQN Ci0tLSBhL2xpYmF2Y29kZWMvYXZjb2RlYy5oDQorKysgYi9saWJhdmNvZGVjL2F2Y29kZWMuaA0K QEAgLTE2NjYsNiArMTY2Niw5IEBAIHR5cGVkZWYgc3RydWN0IEFWQ29kZWNDb250ZXh0IHsNCiAj ZGVmaW5lIEZGX1BST0ZJTEVfS0xWQV9TWU5DIDANCiAjZGVmaW5lIEZGX1BST0ZJTEVfS0xWQV9B U1lOQyAxDQogDQorI2RlZmluZSBGRl9QUk9GSUxFX0VWQ19CQVNFTElORSAgICAgICAgICAgICAw DQorI2RlZmluZSBGRl9QUk9GSUxFX0VWQ19NQUlOICAgICAgICAgICAgICAgICAxDQorDQogICAg IC8qKg0KICAgICAgKiBsZXZlbA0KICAgICAgKiAtIGVuY29kaW5nOiBTZXQgYnkgdXNlci4NCmRp ZmYgLS1naXQgYS9saWJhdmNvZGVjL2V2Y19wYXJzZXIuYyBiL2xpYmF2Y29kZWMvZXZjX3BhcnNl ci5jDQpuZXcgZmlsZSBtb2RlIDEwMDY0NA0KaW5kZXggMDAwMDAwMDAwMC4uMDNmYWYxMmQ2Mg0K LS0tIC9kZXYvbnVsbA0KKysrIGIvbGliYXZjb2RlYy9ldmNfcGFyc2VyLmMNCkBAIC0wLDAgKzEs NTI3IEBADQorLyoNCisgKiBFVkMgQVZDIGZvcm1hdCBwYXJzZXINCisgKg0KKyAqIENvcHlyaWdo dCAoQykgMjAyMSBEYXdpZCBLb3ppbnNraSA8ZC5rb3ppbnNraUBzYW1zdW5nLmNvbT4NCisgKg0K KyAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIEZGbXBlZy4NCisgKg0KKyAqIEZGbXBlZyBpcyBmcmVl IHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3INCisgKiBtb2RpZnkgaXQg dW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljDQorICogTGlj ZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVy DQorICogdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55 IGxhdGVyIHZlcnNpb24uDQorICoNCisgKiBGRm1wZWcgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhv cGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwNCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7 IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZg0KKyAqIE1FUkNIQU5UQUJJTElU WSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VDQorICog TGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4NCisgKg0KKyAq IFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJh bCBQdWJsaWMNCisgKiBMaWNlbnNlIGFsb25nIHdpdGggRkZtcGVnOyBpZiBub3QsIHdyaXRlIHRv IHRoZSBGcmVlIFNvZnR3YXJlDQorICogRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3Ry ZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAwMjExMC0xMzAxIFVTQQ0KKyAqLw0KKw0KKyNp bmNsdWRlIDxzdGRpbnQuaD4NCisNCisjaW5jbHVkZSAibGliYXZ1dGlsL2NvbW1vbi5oIg0KKw0K KyNpbmNsdWRlICJwYXJzZXIuaCINCisjaW5jbHVkZSAiZ29sb21iLmgiDQorDQorLy8gVGhlIGxl bmd0aCBmaWVsZCB0aGF0IGluZGljYXRlcyB0aGUgbGVuZ3RoIGluIGJ5dGVzIG9mIHRoZSBmb2xs b3dpbmcgTkFMIHVuaXQgaXMgY29uZmlndXJlZCB0byBiZSBvZiA0IGJ5dGVzDQorI2RlZmluZSBF VkNfTkFMX1VOSVRfTEVOR1RIX0JZVEUgICAgICAgICg0KSAgLyogYnl0ZSAqLw0KKw0KKyNkZWZp bmUgRVZDX05BTF9IRUFERVJfU0laRSAgICAgICAgICAgICAoMikgIC8qIGJ5dGUgKi8NCisjZGVm aW5lIE1BWF9TUFNfQ05UICAgICAgICAgICAgICAgICAgICAgKDE2KSAvKiBkZWZpbmVkIHZhbHVl IGluIEVWQyBzdGFuZGFyZCAqLw0KKw0KKy8vIE5BTFUgdHlwZXMNCisvLyBAc2VlIElTT19JRUNf MjMwOTQtMV8yMDIwIDcuNC4yLjIgTkFMIHVuaXQgaGVhZGVyIHNlbWFudGljcw0KKy8vDQorI2Rl ZmluZSBFVkNfTlVUX05PTklEUiAgICAgICAgICAgICAgICAgICgwKSAgLyogQ29kZWQgc2xpY2Ug b2YgYSBub24tSURSIHBpY3R1cmUgKi8NCisjZGVmaW5lIEVWQ19OVVRfSURSICAgICAgICAgICAg ICAgICAgICAgKDEpICAvKiBDb2RlZCBzbGljZSBvZiBhbiBJRFIgcGljdHVyZSAqLw0KKyNkZWZp bmUgRVZDX05VVF9TUFMgICAgICAgICAgICAgICAgICAgICAoMjQpIC8qIFNlcXVlbmNlIHBhcmFt ZXRlciBzZXQgKi8NCisjZGVmaW5lIEVWQ19OVVRfUFBTICAgICAgICAgICAgICAgICAgICAgKDI1 KSAvKiBQaWN0dXJlIHBhcmVtZXRlciBzZXQgKi8NCisjZGVmaW5lIEVWQ19OVVRfQVBTICAgICAg ICAgICAgICAgICAgICAgKDI2KSAvKiBBZGFwdGF0aW9uIHBhcmFtZXRlciBzZXQgKi8NCisjZGVm aW5lIEVWQ19OVVRfRkQgICAgICAgICAgICAgICAgICAgICAgKDI3KSAvKiBGaWxsZXIgZGF0YSAq Lw0KKyNkZWZpbmUgRVZDX05VVF9TRUkgICAgICAgICAgICAgICAgICAgICAoMjgpIC8qIFN1cHBs ZW1lbnRhbCBlbmhhbmNlbWVudCBpbmZvcm1hdGlvbiAqLw0KKw0KKy8vIFRoZSBzdHVyY3R1cmUg cmVmbGVjdHMgU1BTIFJCU1AocmF3IGJ5dGUgc2VxdWVuY2UgcGF5bG9hZCkgbGF5b3V0DQorLy8g QHNlZSBJU09fSUVDXzIzMDk0LTEgc2VjdGlvbiA3LjMuMi4xDQorLy8NCisvLyBUaGUgZm9sbG93 aW5nIGRlc2NyaXB0b3JzIHNwZWNpZnkgdGhlIHBhcnNpbmcgcHJvY2VzcyBvZiBlYWNoIGVsZW1l bnQNCisvLyB1KG4pIC0gdW5zaWduZWQgaW50ZWdlciB1c2luZyBuIGJpdHMNCisvLyB1ZSh2KSAt IHVuc2lnbmVkIGludGVnZXIgMC10aCBvcmRlciBFeHBfR29sb21iLWNvZGVkIHN5bnRheCBlbGVt ZW50IHdpdGggdGhlIGxlZnQgYml0IGZpcnN0DQordHlwZWRlZiBzdHJ1Y3QgRVZDUGFyc2VyU1BT IHsNCisgICAgaW50IHNwc19zZXFfcGFyYW1ldGVyX3NldF9pZDsgICAvLyB1ZSh2KQ0KKyAgICBp bnQgcHJvZmlsZV9pZGM7ICAgICAgICAgICAgICAgIC8vIHUoOCkNCisgICAgaW50IGxldmVsX2lk YzsgICAgICAgICAgICAgICAgICAvLyB1KDgpDQorICAgIGludCB0b29sc2V0X2lkY19oOyAgICAg ICAgICAgICAgLy8gdSgzMikNCisgICAgaW50IHRvb2xzZXRfaWRjX2w7ICAgICAgICAgICAgICAv LyB1KDMyKQ0KKyAgICBpbnQgY2hyb21hX2Zvcm1hdF9pZGM7ICAgICAgICAgIC8vIHVlKHYpDQor ICAgIGludCBwaWNfd2lkdGhfaW5fbHVtYV9zYW1wbGVzOyAgLy8gdWUodikNCisgICAgaW50IHBp Y19oZWlnaHRfaW5fbHVtYV9zYW1wbGVzOyAvLyB1ZSh2KQ0KKyAgICBpbnQgYml0X2RlcHRoX2x1 bWFfbWludXM4OyAgICAgIC8vIHVlKHYpDQorICAgIGludCBiaXRfZGVwdGhfY2hyb21hX21pbnVz ODsgICAgLy8gdWUodikNCisNCisgICAgaW50IHNwc19idHRfZmxhZzsgICAgICAgICAgICAgICAg ICAgICAgICAgICAvLyB1KDEpDQorICAgIGludCBsb2cyX2N0dV9zaXplX21pbnVzNTsgICAgICAg ICAgICAgICAgICAgLy8gdWUodikNCisgICAgaW50IGxvZzJfbWluX2NiX3NpemVfbWludXMyOyAg ICAgICAgICAgICAgICAvLyB1ZSh2KQ0KKyAgICBpbnQgbG9nMl9kaWZmX2N0dV9tYXhfMTRfY2Jf c2l6ZTsgICAgICAgICAgIC8vIHVlKHYpDQorICAgIGludCBsb2cyX2RpZmZfY3R1X21heF90dF9j Yl9zaXplOyAgICAgICAgICAgLy8gdWUodikNCisgICAgaW50IGxvZzJfZGlmZl9taW5fY2JfbWlu X3R0X2NiX3NpemVfbWludXMyOyAvLyB1ZSh2KQ0KKw0KKyAgICBpbnQgc3BzX3N1Y29fZmxhZzsg ICAgICAgICAgICAgICAgICAgICAgIC8vIHUoMSkNCisgICAgaW50IGxvZzJfZGlmZl9jdHVfc2l6 ZV9tYXhfc3Vjb19jYl9zaXplOyAvLyB1ZSh2KQ0KKyAgICBpbnQgbG9nMl9kaWZmX21heF9zdWNv X21pbl9zdWNvX2NiX3NpemU7IC8vIHVlKHYpDQorDQorICAgIGludCBzcHNfYWRtdnBfZmxhZzsg ICAgIC8vIHUoMSkNCisgICAgaW50IHNwc19hZmZpbmVfZmxhZzsgICAgLy8gdSgxKQ0KKyAgICBp bnQgc3BzX2FtdnJfZmxhZzsgICAgICAvLyB1KDEpDQorICAgIGludCBzcHNfZG12cl9mbGFnOyAg ICAgIC8vIHUoMSkNCisgICAgaW50IHNwc19tbXZkX2ZsYWc7ICAgICAgLy8gdSgxKQ0KKyAgICBp bnQgc3BzX2htdnBfZmxhZzsgICAgICAvLyB1KDEpDQorDQorICAgIGludCBzcHNfZWlwZF9mbGFn OyAgICAgICAgICAgICAgICAgLy8gdSgxKQ0KKyAgICBpbnQgc3BzX2liY19mbGFnOyAgICAgICAg ICAgICAgICAgIC8vIHUoMSkNCisgICAgaW50IGxvZzJfbWF4X2liY19jYW5kX3NpemVfbWludXMy OyAvLyB1ZSh2KQ0KKw0KKyAgICBpbnQgc3BzX2NtX2luaXRfZmxhZzsgLy8gdSgxKQ0KKyAgICBp bnQgc3BzX2FkY2NfZmxhZzsgICAgLy8gdSgxKQ0KKw0KKyAgICBpbnQgc3BzX2lxdF9mbGFnOyAv LyB1KDEpDQorICAgIGludCBzcHNfYXRzX2ZsYWc7IC8vIHUoMSkNCisNCisgICAgaW50IHNwc19h ZGRiX2ZsYWc7ICAgLy8gdSgxKQ0KKyAgICBpbnQgc3BzX2FsZl9mbGFnOyAgICAvLyB1KDEpDQor ICAgIGludCBzcHNfaHRkZl9mbGFnOyAgIC8vIHUoMSkNCisgICAgaW50IHNwc19ycGxfZmxhZzsg ICAgLy8gdSgxKQ0KKyAgICBpbnQgc3BzX3BvY3NfZmxhZzsgICAvLyB1KDEpDQorICAgIGludCBz cHNfZHF1YW50X2ZsYWc7IC8vIHUoMSkNCisgICAgaW50IHNwc19kcmFfZmxhZzsgICAgLy8gdSgx KQ0KKw0KKyAgICBpbnQgbG9nMl9tYXhfcGljX29yZGVyX2NudF9sc2JfbWludXM0OyAvLyB1ZSh2 KQ0KKyAgICBpbnQgbG9nMl9zdWJfZ29wX2xlbmd0aDsgICAgICAgICAgICAgICAvLyB1ZSh2KQ0K KyAgICBpbnQgbG9nMl9yZWZfcGljX2dhcF9sZW5ndGg7ICAgICAgICAgICAvLyB1ZSh2KQ0KKw0K KyAgICBpbnQgbWF4X251bV90aWQwX3JlZl9waWNzOyAvLyB1ZSh2KQ0KKw0KKyAgICBpbnQgc3Bz X21heF9kZWNfcGljX2J1ZmZlcmluZ19taW51czE7IC8vIHVlKHYpDQorICAgIGludCBsb25nX3Rl cm1fcmVmX3BpY19mbGFnOyAgICAgICAgICAgLy8gdSgxKQ0KKyAgICBpbnQgcnBsMV9zYW1lX2Fz X3JwbDBfZmxhZzsgICAgICAgICAgIC8vIHUoMSkNCisgICAgaW50IG51bV9yZWZfcGljX2xpc3Rf aW5fc3BzWzJdOyAgICAgICAvLyB1ZSh2KQ0KKw0KKyAgICBpbnQgcGljdHVyZV9jcm9wcGluZ19m bGFnOyAgICAgIC8vIHUoMSkNCisgICAgaW50IHBpY3R1cmVfY3JvcF9sZWZ0X29mZnNldDsgICAv LyB1ZSh2KQ0KKyAgICBpbnQgcGljdHVyZV9jcm9wX3JpZ2h0X29mZnNldDsgIC8vIHVlKHYpDQor ICAgIGludCBwaWN0dXJlX2Nyb3BfdG9wX29mZnNldDsgICAgLy8gdWUodikNCisgICAgaW50IHBp Y3R1cmVfY3JvcF9ib3R0b21fb2Zmc2V0OyAvLyB1ZSh2KQ0KKw0KK30gRVZDUGFyc2VyU1BTOw0K Kw0KK3R5cGVkZWYgc3RydWN0IEVWQ1BhcnNlckNvbnRleHQgew0KKyAgICBQYXJzZUNvbnRleHQg cGM7DQorICAgIEVWQ1BhcnNlclNQUyBzcHNbTUFYX1NQU19DTlRdOw0KKyAgICBpbnQgaXNfYXZj Ow0KKyAgICBpbnQgbmFsX2xlbmd0aF9zaXplOw0KKyAgICBpbnQgdG9fcmVhZDsNCisgICAgaW50 IGluY29tcGxldGVfbmFsdV9wcmVmaXhfcmVhZDsgLy8gVGhlIGZsYWcgaXMgc2V0IHRvIDEgd2hl biBhbiBpbmNvbXBsZXRlIE5BTCB1bml0IHByZWZpeCBoYXMgYmVlbiByZWFkDQorDQorICAgIGlu dCBnb3Rfc3BzOw0KKyAgICBpbnQgZ290X3BwczsNCisgICAgaW50IGdvdF9zZWk7DQorICAgIGlu dCBnb3Rfc2xpY2U7DQorfSBFVkNQYXJzZXJDb250ZXh0Ow0KKw0KK3N0YXRpYyBpbnQgZ2V0X25h bHVfdHlwZShjb25zdCB1aW50OF90ICpiaXRzLCBpbnQgYml0c19zaXplLCBBVkNvZGVjQ29udGV4 dCAqYXZjdHgpDQorew0KKyAgICBpbnQgdW5pdF90eXBlX3BsdXMxID0gMDsNCisNCisgICAgaWYo Yml0c19zaXplID49IEVWQ19OQUxfSEVBREVSX1NJWkUpIHsNCisgICAgICAgIHVuc2lnbmVkIGNo YXIgKnAgPSAodW5zaWduZWQgY2hhciAqKWJpdHM7DQorICAgICAgICAvLyBmb3JiaWRkZW5femVy b19iaXQNCisgICAgICAgIGlmICgocFswXSAmIDB4ODApICE9IDApIHsNCisgICAgICAgICAgICBh dl9sb2coYXZjdHgsIEFWX0xPR19FUlJPUiwgIkNhbm5vdCBnZXQgYml0c3RyZWFtIGluZm9ybWF0 aW9uLiBNYWxmb3JtZWQgYml0c3RyZWFtLlxuIik7DQorICAgICAgICAgICAgcmV0dXJuIC0xOw0K KyAgICAgICAgfQ0KKw0KKyAgICAgICAgLy8gbmFsX3VuaXRfdHlwZQ0KKyAgICAgICAgdW5pdF90 eXBlX3BsdXMxID0gKHBbMF0gPj4gMSkgJiAweDNGOw0KKyAgICB9DQorDQorICAgIHJldHVybiB1 bml0X3R5cGVfcGx1czEgLSAxOw0KK30NCisNCitzdGF0aWMgdWludDMyX3QgcmVhZF9uYWxfdW5p dF9sZW5ndGgoY29uc3QgdWludDhfdCAqYml0cywgaW50IGJpdHNfc2l6ZSwgQVZDb2RlY0NvbnRl eHQgKmF2Y3R4KQ0KK3sNCisgICAgdWludDMyX3QgbmFsdV9sZW4gPSAwOw0KKw0KKyAgICBpZihi aXRzX3NpemUgPj0gRVZDX05BTF9VTklUX0xFTkdUSF9CWVRFKSB7DQorDQorICAgICAgICBpbnQg dCA9IDA7DQorICAgICAgICB1bnNpZ25lZCBjaGFyICpwID0gKHVuc2lnbmVkIGNoYXIgKiliaXRz Ow0KKw0KKyAgICAgICAgZm9yKGludCBpPTA7IGk8RVZDX05BTF9VTklUX0xFTkdUSF9CWVRFOyBp KyspIHsNCisgICAgICAgICAgICB0ID0gKHQgPDwgOCkgfCBwW2ldOw0KKyAgICAgICAgfQ0KKw0K KyAgICAgICAgbmFsdV9sZW4gPSB0Ow0KKyAgICAgICAgaWYobmFsdV9sZW4gPT0gMCkgew0KKyAg ICAgICAgICAgIGF2X2xvZyhhdmN0eCwgQVZfTE9HX0VSUk9SLCAiSW52YWxpZCBiaXRzdHJlYW0g c2l6ZSFcbiIpOw0KKyAgICAgICAgICAgIHJldHVybiAwOw0KKyAgICAgICAgfQ0KKyAgICB9DQor DQorICAgIHJldHVybiBuYWx1X2xlbjsNCit9DQorDQorLy8gQHNlZSBJU09fSUVDXzIzMDk0LTEg KDcuMy4yLjEgU1BTIFJCU1Agc3ludGF4KQ0KK3N0YXRpYyBFVkNQYXJzZXJTUFMgKnBhcnNlX3Nw cyhjb25zdCB1aW50OF90ICpicywgaW50IGJzX3NpemUsIEVWQ1BhcnNlckNvbnRleHQgKmV2KQ0K K3sNCisgICAgR2V0Qml0Q29udGV4dCBnYjsNCisgICAgRVZDUGFyc2VyU1BTICpzcHM7DQorICAg IGludCBzcHNfc2VxX3BhcmFtZXRlcl9zZXRfaWQ7DQorDQorICAgIGlmKGluaXRfZ2V0X2JpdHM4 KCZnYiwgYnMsIGJzX3NpemUpIDwgMCkNCisgICAgICAgIHJldHVybiBOVUxMOw0KKw0KKyAgICBz cHNfc2VxX3BhcmFtZXRlcl9zZXRfaWQgPSBnZXRfdWVfZ29sb21iKCZnYik7DQorDQorICAgIGlm KHNwc19zZXFfcGFyYW1ldGVyX3NldF9pZCA+PSBNQVhfU1BTX0NOVCkNCisgICAgICAgIHJldHVy biBOVUxMOw0KKw0KKyAgICBzcHMgPSAmZXYtPnNwc1tzcHNfc2VxX3BhcmFtZXRlcl9zZXRfaWRd Ow0KKyAgICBzcHMtPnNwc19zZXFfcGFyYW1ldGVyX3NldF9pZCA9IHNwc19zZXFfcGFyYW1ldGVy X3NldF9pZDsNCisNCisgICAgLy8gdGhlIEJhc2VsaW5lIHByb2ZpbGUgaXMgaW5kaWNhdGVkIGJ5 IHByb2ZpbGVfaWRjIGVxYWwgdG8gMA0KKyAgICAvLyB0aGUgTWFpbiBwcm9maWxlIGlzIGluZGlj YXRlZCBieSBwcm9maWxlX2lkYyBlcWFsIHRvIDENCisgICAgc3BzLT5wcm9maWxlX2lkYyA9IGdl dF9iaXRzKCZnYiwgOCk7DQorDQorICAgIHNwcy0+bGV2ZWxfaWRjID0gZ2V0X2JpdHMoJmdiLCA4 KTsNCisNCisgICAgc2tpcF9iaXRzX2xvbmcoJmdiLCAzMik7IC8qIHNraXAgdG9vbHNldF9pZGNf aCAqLw0KKyAgICBza2lwX2JpdHNfbG9uZygmZ2IsIDMyKTsgLyogc2tpcCB0b29sc2V0X2lkY19s ICovDQorDQorICAgIC8vIDAgLSBtb25vY2hyb21lDQorICAgIC8vIDEgLSA0OjI6MA0KKyAgICAv LyAyIC0gNDoyOjINCisgICAgLy8gMyAtIDQ6NDo0DQorICAgIHNwcy0+Y2hyb21hX2Zvcm1hdF9p ZGMgPSBnZXRfdWVfZ29sb21iKCZnYik7DQorDQorICAgIHNwcy0+cGljX3dpZHRoX2luX2x1bWFf c2FtcGxlcyA9IGdldF91ZV9nb2xvbWIoJmdiKTsNCisgICAgc3BzLT5waWNfaGVpZ2h0X2luX2x1 bWFfc2FtcGxlcyA9IGdldF91ZV9nb2xvbWIoJmdiKTsNCisNCisgICAgc3BzLT5iaXRfZGVwdGhf bHVtYV9taW51czggPSBnZXRfdWVfZ29sb21iKCZnYik7DQorICAgIHNwcy0+Yml0X2RlcHRoX2No cm9tYV9taW51czggPSBnZXRfdWVfZ29sb21iKCZnYik7DQorDQorICAgIHNwcy0+c3BzX2J0dF9m bGFnID0gZ2V0X2JpdHMoJmdiLCAxKTsNCisgICAgaWYoc3BzLT5zcHNfYnR0X2ZsYWcpIHsNCisg ICAgICAgIHNwcy0+bG9nMl9jdHVfc2l6ZV9taW51czUgPSBnZXRfdWVfZ29sb21iKCZnYik7DQor ICAgICAgICBzcHMtPmxvZzJfbWluX2NiX3NpemVfbWludXMyID0gZ2V0X3VlX2dvbG9tYigmZ2Ip Ow0KKyAgICAgICAgc3BzLT5sb2cyX2RpZmZfY3R1X21heF8xNF9jYl9zaXplID0gZ2V0X3VlX2dv bG9tYigmZ2IpOw0KKyAgICAgICAgc3BzLT5sb2cyX2RpZmZfY3R1X21heF90dF9jYl9zaXplID0g Z2V0X3VlX2dvbG9tYigmZ2IpOw0KKyAgICAgICAgc3BzLT5sb2cyX2RpZmZfbWluX2NiX21pbl90 dF9jYl9zaXplX21pbnVzMiA9IGdldF91ZV9nb2xvbWIoJmdiKTsNCisgICAgfQ0KKw0KKyAgICBz cHMtPnNwc19zdWNvX2ZsYWcgPSBnZXRfYml0cygmZ2IsIDEpOw0KKyAgICBpZihzcHMtPnNwc19z dWNvX2ZsYWcpIHsNCisgICAgICAgIHNwcy0+bG9nMl9kaWZmX2N0dV9zaXplX21heF9zdWNvX2Ni X3NpemUgPSBnZXRfdWVfZ29sb21iKCZnYik7DQorICAgICAgICBzcHMtPmxvZzJfZGlmZl9tYXhf c3Vjb19taW5fc3Vjb19jYl9zaXplID0gZ2V0X3VlX2dvbG9tYigmZ2IpOw0KKyAgICB9DQorDQor ICAgIHNwcy0+c3BzX2FkbXZwX2ZsYWcgPSBnZXRfYml0cygmZ2IsIDEpOw0KKyAgICBpZihzcHMt PnNwc19hZG12cF9mbGFnKSB7DQorICAgICAgICBzcHMtPnNwc19hZmZpbmVfZmxhZyA9IGdldF9i aXRzKCZnYiwgMSk7DQorICAgICAgICBzcHMtPnNwc19hbXZyX2ZsYWcgPSBnZXRfYml0cygmZ2Is IDEpOw0KKyAgICAgICAgc3BzLT5zcHNfZG12cl9mbGFnID0gZ2V0X2JpdHMoJmdiLCAxKTsNCisg ICAgICAgIHNwcy0+c3BzX21tdmRfZmxhZyA9IGdldF9iaXRzKCZnYiwgMSk7DQorICAgICAgICBz cHMtPnNwc19obXZwX2ZsYWcgPSBnZXRfYml0cygmZ2IsIDEpOw0KKyAgICB9DQorDQorICAgIHNw cy0+c3BzX2VpcGRfZmxhZyA9ICBnZXRfYml0cygmZ2IsIDEpOw0KKyAgICBpZihzcHMtPnNwc19l aXBkX2ZsYWcpIHsNCisgICAgICAgIHNwcy0+c3BzX2liY19mbGFnID0gZ2V0X2JpdHMoJmdiLCAx KTsNCisgICAgICAgIGlmKHNwcy0+c3BzX2liY19mbGFnKQ0KKyAgICAgICAgICAgIHNwcy0+bG9n Ml9tYXhfaWJjX2NhbmRfc2l6ZV9taW51czIgPSBnZXRfdWVfZ29sb21iKCZnYik7DQorICAgIH0N CisNCisgICAgc3BzLT5zcHNfY21faW5pdF9mbGFnID0gZ2V0X2JpdHMoJmdiLCAxKTsNCisgICAg aWYoc3BzLT5zcHNfY21faW5pdF9mbGFnKQ0KKyAgICAgICAgc3BzLT5zcHNfYWRjY19mbGFnID0g Z2V0X2JpdHMoJmdiLCAxKTsNCisNCisgICAgc3BzLT5zcHNfaXF0X2ZsYWcgPSBnZXRfYml0cygm Z2IsIDEpOw0KKyAgICBpZihzcHMtPnNwc19pcXRfZmxhZykNCisgICAgICAgIHNwcy0+c3BzX2F0 c19mbGFnID0gZ2V0X2JpdHMoJmdiLCAxKTsNCisNCisgICAgc3BzLT5zcHNfYWRkYl9mbGFnID0g Z2V0X2JpdHMoJmdiLCAxKTsNCisgICAgc3BzLT5zcHNfYWxmX2ZsYWcgPSBnZXRfYml0cygmZ2Is IDEpOw0KKyAgICBzcHMtPnNwc19odGRmX2ZsYWcgPSBnZXRfYml0cygmZ2IsIDEpOw0KKyAgICBz cHMtPnNwc19ycGxfZmxhZyA9IGdldF9iaXRzKCZnYiwgMSk7DQorICAgIHNwcy0+c3BzX3BvY3Nf ZmxhZyA9IGdldF9iaXRzKCZnYiwgMSk7DQorICAgIHNwcy0+c3BzX2RxdWFudF9mbGFnID0gZ2V0 X2JpdHMoJmdiLCAxKTsNCisgICAgc3BzLT5zcHNfZHJhX2ZsYWcgPSBnZXRfYml0cygmZ2IsIDEp Ow0KKw0KKyAgICBpZihzcHMtPnNwc19wb2NzX2ZsYWcpDQorICAgICAgICBzcHMtPmxvZzJfbWF4 X3BpY19vcmRlcl9jbnRfbHNiX21pbnVzNCA9IGdldF91ZV9nb2xvbWIoJmdiKTsNCisNCisgICAg aWYoIXNwcy0+c3BzX3BvY3NfZmxhZyB8fCAhc3BzLT5zcHNfcnBsX2ZsYWcpIHsNCisgICAgICAg IHNwcy0+bG9nMl9zdWJfZ29wX2xlbmd0aCA9IGdldF91ZV9nb2xvbWIoJmdiKTsNCisgICAgICAg IGlmKHNwcy0+bG9nMl9zdWJfZ29wX2xlbmd0aCA9PSAwKQ0KKyAgICAgICAgICAgIHNwcy0+bG9n Ml9yZWZfcGljX2dhcF9sZW5ndGggPSBnZXRfdWVfZ29sb21iKCZnYik7DQorICAgIH0NCisNCisg ICAgcmV0dXJuIHNwczsNCit9DQorDQorc3RhdGljIGludCBwYXJzZV9uYWxfdW5pdHMoQVZDb2Rl Y1BhcnNlckNvbnRleHQgKnMsIGNvbnN0IHVpbnQ4X3QgKmJzLA0KKyAgICAgICAgICAgICAgICAg ICAgICAgICAgIGludCBic19zaXplLCBBVkNvZGVjQ29udGV4dCAqYXZjdHgpDQorew0KKyAgICBF VkNQYXJzZXJDb250ZXh0ICpldiA9IHMtPnByaXZfZGF0YTsNCisgICAgaW50IG5hbHVfdHlwZSwg bmFsdV9zaXplOw0KKyAgICB1bnNpZ25lZCBjaGFyICpiaXRzID0gKHVuc2lnbmVkIGNoYXIgKili czsNCisgICAgaW50IGJpdHNfc2l6ZSA9IGJzX3NpemU7DQorDQorICAgIGF2Y3R4LT5jb2RlY19p ZCA9IEFWX0NPREVDX0lEX0VWQzsNCisNCisgICAgbmFsdV9zaXplID0gcmVhZF9uYWxfdW5pdF9s ZW5ndGgoYml0cywgYml0c19zaXplLCBhdmN0eCk7DQorICAgIGlmKG5hbHVfc2l6ZSA9PSAwKSB7 DQorICAgICAgICBhdl9sb2coYXZjdHgsIEFWX0xPR19FUlJPUiwgIkludmFsaWQgTkFMIHVuaXQg c2l6ZTogKCVkKVxuIiwgbmFsdV9zaXplKTsNCisgICAgICAgIHJldHVybiAtMTsNCisgICAgfQ0K Kw0KKyAgICBiaXRzICs9IEVWQ19OQUxfVU5JVF9MRU5HVEhfQllURTsNCisgICAgYml0c19zaXpl IC09IEVWQ19OQUxfVU5JVF9MRU5HVEhfQllURTsNCisNCisgICAgbmFsdV90eXBlID0gZ2V0X25h bHVfdHlwZShiaXRzLCBiaXRzX3NpemUsIGF2Y3R4KTsNCisNCisgICAgYml0cyArPSBFVkNfTkFM X0hFQURFUl9TSVpFOw0KKyAgICBiaXRzX3NpemUgLT0gRVZDX05BTF9IRUFERVJfU0laRTsNCisN CisgICAgaWYgKG5hbHVfdHlwZSA9PSBFVkNfTlVUX1NQUykgeyAvLyBOQUwgVW5pdCB0eXBlOiBT UFMgKFNlcXVlbmNlIFBhcmFtZXRlciBTZXQpDQorICAgICAgICBFVkNQYXJzZXJTUFMgKnNwczsN CisNCisgICAgICAgIHNwcyA9IHBhcnNlX3NwcyhiaXRzLCBiaXRzX3NpemUsIGV2KTsNCisNCisg ICAgICAgIGF2Y3R4LT5jb2RlZF93aWR0aCAgICAgICAgID0gc3BzLT5waWNfd2lkdGhfaW5fbHVt YV9zYW1wbGVzOw0KKyAgICAgICAgYXZjdHgtPmNvZGVkX2hlaWdodCAgICAgICAgPSBzcHMtPnBp Y19oZWlnaHRfaW5fbHVtYV9zYW1wbGVzOw0KKyAgICAgICAgYXZjdHgtPndpZHRoICAgICAgICAg ICAgICAgPSBzcHMtPnBpY193aWR0aF9pbl9sdW1hX3NhbXBsZXM7DQorICAgICAgICBhdmN0eC0+ aGVpZ2h0ICAgICAgICAgICAgICA9IHNwcy0+cGljX2hlaWdodF9pbl9sdW1hX3NhbXBsZXM7DQor DQorICAgICAgICBpZihzcHMtPnByb2ZpbGVfaWRjID09IDApIGF2Y3R4LT5wcm9maWxlID0gRkZf UFJPRklMRV9FVkNfQkFTRUxJTkU7DQorICAgICAgICBlbHNlIGlmIChzcHMtPnByb2ZpbGVfaWRj ID09IDEpIGF2Y3R4LT5wcm9maWxlID0gRkZfUFJPRklMRV9FVkNfTUFJTjsNCisgICAgICAgIGVs c2Ugew0KKyAgICAgICAgICAgIGF2X2xvZyhhdmN0eCwgQVZfTE9HX0VSUk9SLCAiTm90IHN1cHBv cnRlZCBwcm9maWxlICglZClcbiIsIHNwcy0+cHJvZmlsZV9pZGMpOw0KKyAgICAgICAgICAgIHJl dHVybiAtMTsNCisgICAgICAgIH0NCisNCisgICAgICAgIC8vIEN1cnJlbnRseSBYRVZEIGRlY29k ZXIgc3VwcG9ydHMgb255IFlDQkNSNDIwXzEwTEUgY2hyb21hIGZvcm1hdCBmb3IgRVZDIHN0cmVh bQ0KKyAgICAgICAgc3dpdGNoKHNwcy0+Y2hyb21hX2Zvcm1hdF9pZGMpIHsNCisgICAgICAgIGNh c2UgMDogLyogWUNCQ1I0MDBfMTBMRSAqLw0KKyAgICAgICAgICAgIGF2X2xvZyhhdmN0eCwgQVZf TE9HX0VSUk9SLCAiWUNCQ1I0MDBfMTBMRTogTm90IHN1cHBvcnRlZCBjaHJvbWEgZm9ybWF0XG4i KTsNCisgICAgICAgICAgICBhdmN0eC0+cGl4X2ZtdCA9IEFWX1BJWF9GTVRfR1JBWTEwTEU7DQor ICAgICAgICAgICAgcmV0dXJuIC0xOw0KKyAgICAgICAgY2FzZSAxOiAvKiBZQ0JDUjQyMF8xMExF ICovDQorICAgICAgICAgICAgYXZjdHgtPnBpeF9mbXQgPSBBVl9QSVhfRk1UX1lVVjQyMFAxMExF Ow0KKyAgICAgICAgICAgIGJyZWFrOw0KKyAgICAgICAgY2FzZSAyOiAvKiBZQ0JDUjQyMl8xMExF ICovDQorICAgICAgICAgICAgYXZfbG9nKGF2Y3R4LCBBVl9MT0dfRVJST1IsICJZQ0JDUjQyMl8x MExFOiBOb3Qgc3VwcG9ydGVkIGNocm9tYSBmb3JtYXRcbiIpOw0KKyAgICAgICAgICAgIGF2Y3R4 LT5waXhfZm10ID0gQVZfUElYX0ZNVF9ZVVY0MjJQMTBMRTsNCisgICAgICAgICAgICByZXR1cm4g LTE7DQorICAgICAgICBjYXNlIDM6IC8qIFlDQkNSNDQ0XzEwTEUgKi8NCisgICAgICAgICAgICBh dl9sb2coYXZjdHgsIEFWX0xPR19FUlJPUiwgIllDQkNSNDQ0XzEwTEU6IE5vdCBzdXBwb3J0ZWQg Y2hyb21hIGZvcm1hdFxuIik7DQorICAgICAgICAgICAgYXZjdHgtPnBpeF9mbXQgPSBBVl9QSVhf Rk1UX1lVVjQ0NFAxMExFOw0KKyAgICAgICAgICAgIHJldHVybiAtMTsNCisgICAgICAgIGRlZmF1 bHQ6DQorICAgICAgICAgICAgYXZjdHgtPnBpeF9mbXQgPSBBVl9QSVhfRk1UX05PTkU7DQorICAg ICAgICAgICAgYXZfbG9nKGF2Y3R4LCBBVl9MT0dfRVJST1IsICJVbmtub3duIHN1cHBvcnRlZCBj aHJvbWEgZm9ybWF0XG4iKTsNCisgICAgICAgICAgICByZXR1cm4gLTE7DQorICAgICAgICB9DQor DQorICAgICAgICAvLyBUaGUgY3VycmVudCBpbXBsZW1lbnRhdGlvbiBvZiBwYXJzZV9zcHMgZnVu Y3Rpb24gZG9lc24ndCBoYW5kbGUgVlVJIHBhcmFtZXRlcnMgcGFyc2luZywNCisgICAgICAgIC8v IHNvIGF0IHRoZSBtb21lbnQgaXQncyBpbXBvc3NpYmxlIHRvIGluaXRpYWxpemUgaGFzX2JfZnJh bWVzIGFuZCBtYXhfYl9mcmFtZXMgQVZDb2RlY0NvbnRleCBmaWVsZHMgaGVyZS4NCisgICAgICAg IC8vIEN1cnJlbnRseSwgaW5pdGlhbGl6YXRpb24gb2YgaGFzX2JfZnJhbWVzIGFuZCBtYXhfYl9m cmFtZXMgQVZDb2RlY0NvbnRleCBmaWVsZHMgaGF2ZSBiZWVuIG1vdmVkIHRvDQorICAgICAgICAv LyBsaWJ4ZXZkX2RlY29kZSBmdW5jdGlvbiB3aGVyZSB3ZSBjYW4gdXNlIHhldmRfY29uZmlnIGZ1 bmN0aW9uIGJlaW5nIGEgcGFydCBvZiB4ZXZkIGxpYnJhcnkgQVBJDQorICAgICAgICAvLyB0byBn ZXQgdGhlIG5lZWRlZCBpbmZvcm1hdGlvbi4NCisgICAgICAgIC8vIEhvd2V2ZXIsIGlmIGl0IHdp bGwgYmUgbmVlZGVkLCBwYXJzZV9zcHMgZnVuY3Rpb24gc2hvdWxkIGJlIGV4dGVuZGVkIHRvIGhh bmRsZSBWVUkgcGFyYW1ldGVycyBwYXJzaW5nDQorICAgICAgICAvLyBhbmQgdGhlIGZvbGxvd2lu ZyBsaW5lcyBzaG91bGQgYmUgdXNlZCB0byBpbml0aWFsaXplIGhhc19iX2ZyYW1lcyBhbmQgbWF4 X2JfZnJhbWVzIGZpZWxkcyBvZiB0aGUgQVZDb2RlY0NvbnRleC4NCisgICAgICAgIC8vDQorICAg ICAgICAvLyBzcHMtPnZ1aV9wYXJhbWV0ZXJzLm51bV9yZW9yZGVyX3BpY3MNCisgICAgICAgIC8v IGlmIChzcHMtPmJpdHN0cmVhbV9yZXN0cmljdGlvbl9mbGFnICYmIHNwcy0+dnVpX3BhcmFtZXRl cnMubnVtX3Jlb3JkZXJfcGljcykgew0KKyAgICAgICAgLy8gICAgIGF2Y3R4LT5oYXNfYl9mcmFt ZXMgPSBzcHMtPnZ1aV9wYXJhbWV0ZXJzLm51bV9yZW9yZGVyX3BpY3M7DQorICAgICAgICAvLyB9 DQorDQorICAgICAgICBldi0+Z290X3NwcyA9IDE7DQorDQorICAgIH0gZWxzZSBpZiAobmFsdV90 eXBlID09IEVWQ19OVVRfUFBTKSAvLyBOQUwgVW5pdCB0eXBlOiBQUFMgKFZpZGVvIFBhcmFtZXRl ciBTZXQpDQorICAgICAgICBldi0+Z290X3BwcyA9IDE7DQorICAgIGVsc2UgaWYobmFsdV90eXBl ID09IEVWQ19OVVRfU0VJKSAvLyBOQUwgdW5pdCB0eXBlOiBTRUkgKFN1cHBsZW1lbnRhbCBFbmhh bmNlbWVudCBJbmZvcm1hdGlvbikNCisgICAgICAgIGV2LT5nb3Rfc2VpID0gMTsNCisgICAgZWxz ZSBpZiAobmFsdV90eXBlID09IEVWQ19OVVRfSURSIHx8IG5hbHVfdHlwZSA9PSBFVkNfTlVUX05P TklEUikgLy8gTkFMIFVuaXQgdHlwZTogQ29kZWQgc2xpY2Ugb2YgYSBJRFIgb3Igbm9uLUlEUiBw aWN0dXJlDQorICAgICAgICBldi0+Z290X3NsaWNlKys7DQorICAgIGVsc2Ugew0KKyAgICAgICAg YXZfbG9nKGF2Y3R4LCBBVl9MT0dfRVJST1IsICJJbnZhbGlkIE5BTCB1bml0IHR5cGU6ICVkXG4i LCBuYWx1X3R5cGUpOw0KKyAgICAgICAgcmV0dXJuIC0xOw0KKyAgICB9DQorDQorICAgIHJldHVy biAwOw0KK30NCisNCisvKioNCisgKiBGaW5kIHRoZSBlbmQgb2YgdGhlIGN1cnJlbnQgZnJhbWUg aW4gdGhlIGJpdHN0cmVhbS4NCisgKiBAcmV0dXJuIHRoZSBwb3NpdGlvbiBvZiB0aGUgZmlyc3Qg Ynl0ZSBvZiB0aGUgbmV4dCBmcmFtZSwgb3IgRU5EX05PVF9GT1VORA0KKyAqLw0KK3N0YXRpYyBp bnQgZXZjX2ZpbmRfZnJhbWVfZW5kKEFWQ29kZWNQYXJzZXJDb250ZXh0ICpzLCBjb25zdCB1aW50 OF90ICpidWYsDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGJ1Zl9zaXplLCBB VkNvZGVjQ29udGV4dCAqYXZjdHgpDQorew0KKyAgICBFVkNQYXJzZXJDb250ZXh0ICpldiA9IHMt PnByaXZfZGF0YTsNCisNCisgICAgaWYoIWV2LT50b19yZWFkKSB7DQorICAgICAgICBpbnQgbmFs X3VuaXRfc2l6ZSA9IDA7DQorICAgICAgICBpbnQgbmV4dCA9IEVORF9OT1RfRk9VTkQ7DQorDQor ICAgICAgICAvLyBUaGlzIGlzIHRoZSBjYXNlIHdoZW4gYnVmZmVyIHNpemUgaXMgbm90IGVub3Vn aCBmb3IgYnVmZmVyIHRvIHN0b3JlIE5BTCB1bml0IGxlbmd0aA0KKyAgICAgICAgaWYoYnVmX3Np emUgPCBFVkNfTkFMX1VOSVRfTEVOR1RIX0JZVEUpIHsNCisgICAgICAgICAgICBldi0+dG9fcmVh ZCA9IEVWQ19OQUxfVU5JVF9MRU5HVEhfQllURTsNCisgICAgICAgICAgICBldi0+bmFsX2xlbmd0 aF9zaXplID0gYnVmX3NpemU7DQorICAgICAgICAgICAgZXYtPmluY29tcGxldGVfbmFsdV9wcmVm aXhfcmVhZCAgPSAxOw0KKw0KKyAgICAgICAgICAgIHJldHVybiBFTkRfTk9UX0ZPVU5EOw0KKyAg ICAgICAgfQ0KKw0KKyAgICAgICAgbmFsX3VuaXRfc2l6ZSA9IHJlYWRfbmFsX3VuaXRfbGVuZ3Ro KGJ1ZiwgYnVmX3NpemUsIGF2Y3R4KTsNCisgICAgICAgIGV2LT5uYWxfbGVuZ3RoX3NpemUgPSBF VkNfTkFMX1VOSVRfTEVOR1RIX0JZVEU7DQorDQorICAgICAgICBuZXh0ID0gbmFsX3VuaXRfc2l6 ZSArIEVWQ19OQUxfVU5JVF9MRU5HVEhfQllURTsNCisgICAgICAgIGV2LT50b19yZWFkID0gbmV4 dDsNCisgICAgICAgIGlmKG5leHQgPCBidWZfc2l6ZSkNCisgICAgICAgICAgICByZXR1cm4gbmV4 dDsNCisgICAgICAgIGVsc2UNCisgICAgICAgICAgICByZXR1cm4gRU5EX05PVF9GT1VORDsNCisg ICAgfSBlbHNlIGlmKGV2LT50b19yZWFkID4gYnVmX3NpemUpIHsNCisgICAgICAgIHJldHVybiBF TkRfTk9UX0ZPVU5EOw0KKyAgICB9IGVsc2Ugew0KKyAgICAgICAgaWYoZXYtPmluY29tcGxldGVf bmFsdV9wcmVmaXhfcmVhZCAgPT0gMSkgew0KKyAgICAgICAgICAgIEVWQ1BhcnNlckNvbnRleHQg KmV2ID0gcy0+cHJpdl9kYXRhOw0KKyAgICAgICAgICAgIFBhcnNlQ29udGV4dCAqcGMgPSAmZXYt PnBjOw0KKyAgICAgICAgICAgIHVpbnQ4X3QgbmFsdV9sZW5bRVZDX05BTF9VTklUX0xFTkdUSF9C WVRFXSA9IHswfTsNCisgICAgICAgICAgICBpbnQgbmFsX3VuaXRfc2l6ZSA9IDA7DQorDQorICAg ICAgICAgICAgLy8gMS4gcGMtPmJ1ZmZlciBjb250YWlucyBwcmV2aW91c2x5IHJlYWQgYnl0ZXMg b2YgTkFMVSBwcmVmaXgNCisgICAgICAgICAgICAvLyAyLiBidWYgY29udGFpbnMgdGhlIHJlc3Qg b2YgTkFMIHVuaXQgcHJlZml4IGJ5dGVzDQorICAgICAgICAgICAgLy8NCisgICAgICAgICAgICAv LyB+fn5+fn5+DQorICAgICAgICAgICAgLy8gRVhBTVBMRQ0KKyAgICAgICAgICAgIC8vIH5+fn5+ fn4NCisgICAgICAgICAgICAvLw0KKyAgICAgICAgICAgIC8vIEluIHRoZSBmb2xsb3dpbmcgZXhh bXBsZSB3ZSBhc3N1bWVkIHRoYXQgdGhlIG51bWJlciBvZiBhbHJlYWR5IHJlYWQgTkFMIFVuaXQg cHJlZml4IGJ5dGVzIGlzIGVxdWFsIDENCisgICAgICAgICAgICAvLw0KKyAgICAgICAgICAgIC8v IC0tLS0tLS0tLS0NCisgICAgICAgICAgICAvLyBwYy0+YnVmZmVyIC0+IGNvbmF0aW5zIGFscmVh ZHkgcmVhZCBieXRlcw0KKyAgICAgICAgICAgIC8vIC0tLS0tLS0tLS0NCisgICAgICAgICAgICAv LyAgICAgICAgICAgICAgX18gcGMtPmluZGV4ID09IDENCisgICAgICAgICAgICAvLyAgICAgICAg ICAgICB8DQorICAgICAgICAgICAgLy8gICAgICAgICAgICAgVg0KKyAgICAgICAgICAgIC8vIC0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCisg ICAgICAgICAgICAvLyB8ICAgMCAgIHwgICAxICAgfCAgIDIgICB8ICAgMyAgIHwgICA0ICAgfCAu Li4gfCAgIE4gICB8DQorICAgICAgICAgICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KKyAgICAgICAgICAgIC8vIHwgIDB4MDAgfCAg MHhYWCB8ICAweFhYIHwgIDB4WFggfCAgMHhYWCB8IC4uLiB8ICAweFhYIHwNCisgICAgICAgICAg ICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tDQorICAgICAgICAgICAgLy8NCisgICAgICAgICAgICAvLyAtLS0tLS0tLS0tDQorICAgICAg ICAgICAgLy8gYnVmIC0+IGNvbnRhaW5zIG5ld2x5IHJlYWQgYnl0ZXMNCisgICAgICAgICAgICAv LyAtLS0tLS0tLS0tDQorICAgICAgICAgICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KKyAgICAgICAgICAgIC8vIHwgICAwICAgfCAg IDEgICB8ICAgMiAgIHwgICAzICAgfCAgIDQgICB8IC4uLiB8ICAgTiAgIHwNCisgICAgICAgICAg ICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tDQorICAgICAgICAgICAgLy8gfCAgMHgwMCB8ICAweDAwIHwgIDB4M0MgfCAgMHhYWCB8ICAw eFhYIHwgLi4uIHwgIDB4WFggfA0KKyAgICAgICAgICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCisgICAgICAgICAgICAvLw0KKyAg ICAgICAgICAgIGZvcihpbnQgaSA9IDA7IGkgPCBFVkNfTkFMX1VOSVRfTEVOR1RIX0JZVEU7IGkr Kykgew0KKyAgICAgICAgICAgICAgICBpZihpIDwgcGMtPmluZGV4KQ0KKyAgICAgICAgICAgICAg ICAgICAgbmFsdV9sZW5baV0gPSBwYy0+YnVmZmVyW2ldOw0KKyAgICAgICAgICAgICAgICBlbHNl DQorICAgICAgICAgICAgICAgICAgICBuYWx1X2xlbltpXSA9IGJ1ZltpIC0gcGMtPmluZGV4XTsN CisgICAgICAgICAgICB9DQorDQorICAgICAgICAgICAgLy8gLS0tLS0tLS0tLQ0KKyAgICAgICAg ICAgIC8vIG5hbHVfbGVuDQorICAgICAgICAgICAgLy8gLS0tLS0tLS0tLQ0KKyAgICAgICAgICAg IC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KKyAgICAgICAgICAgIC8vIHwg ICAwICAgfCAgIDEgICB8ICAgMiAgIHwgICAzICAgfA0KKyAgICAgICAgICAgIC8vIC0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KKyAgICAgICAgICAgIC8vIHwgIDB4MDAgfCAgMHgw MCB8ICAweDAwIHwgIDB4M0MgfA0KKyAgICAgICAgICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLQ0KKyAgICAgICAgICAgIC8vIHwgTkFMVSBMRU5HVEggICAgICAgICAgICAg ICAgICAgfA0KKyAgICAgICAgICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LQ0KKyAgICAgICAgICAgIC8vIE5BTCBVbml0IGxlbmdodCA9ICA2MCAoMHgwMDAwMDAzQykNCisN CisgICAgICAgICAgICBuYWxfdW5pdF9zaXplID0gcmVhZF9uYWxfdW5pdF9sZW5ndGgobmFsdV9s ZW4sIEVWQ19OQUxfVU5JVF9MRU5HVEhfQllURSwgYXZjdHgpOw0KKw0KKyAgICAgICAgICAgIGV2 LT50b19yZWFkID0gbmFsX3VuaXRfc2l6ZSArIEVWQ19OQUxfVU5JVF9MRU5HVEhfQllURSAtIHBj LT5pbmRleDsNCisNCisgICAgICAgICAgICBldi0+aW5jb21wbGV0ZV9uYWx1X3ByZWZpeF9yZWFk ID0gMDsNCisNCisgICAgICAgICAgICBpZihldi0+dG9fcmVhZCA+IGJ1Zl9zaXplKQ0KKyAgICAg ICAgICAgICAgICByZXR1cm4gRU5EX05PVF9GT1VORDsNCisgICAgICAgICAgICBlbHNlDQorICAg ICAgICAgICAgICAgIHJldHVybiBldi0+dG9fcmVhZDsNCisgICAgICAgIH0NCisgICAgICAgIHJl dHVybiBldi0+dG9fcmVhZDsNCisgICAgfQ0KKw0KKyAgICByZXR1cm4gRU5EX05PVF9GT1VORDsN Cit9DQorDQorc3RhdGljIGludCBldmNfcGFyc2VyX2luaXQoQVZDb2RlY1BhcnNlckNvbnRleHQg KnMpDQorew0KKyAgICBFVkNQYXJzZXJDb250ZXh0ICpldiA9IHMtPnByaXZfZGF0YTsNCisNCisg ICAgZXYtPmdvdF9zcHMgPSAwOw0KKyAgICBldi0+Z290X3BwcyA9IDA7DQorICAgIGV2LT5nb3Rf c2VpID0gMDsNCisgICAgZXYtPmdvdF9zbGljZSA9IDA7DQorICAgIGV2LT5uYWxfbGVuZ3RoX3Np emUgPSBFVkNfTkFMX1VOSVRfTEVOR1RIX0JZVEU7DQorICAgIGV2LT5pbmNvbXBsZXRlX25hbHVf cHJlZml4X3JlYWQgPSAwOw0KKw0KKyAgICByZXR1cm4gMDsNCit9DQorDQorc3RhdGljIGludCBl dmNfcGFyc2UoQVZDb2RlY1BhcnNlckNvbnRleHQgKnMsIEFWQ29kZWNDb250ZXh0ICphdmN0eCwN CisgICAgICAgICAgICAgICAgICAgICBjb25zdCB1aW50OF90ICoqcG91dGJ1ZiwgaW50ICpwb3V0 YnVmX3NpemUsDQorICAgICAgICAgICAgICAgICAgICAgY29uc3QgdWludDhfdCAqYnVmLCBpbnQg YnVmX3NpemUpDQorew0KKyAgICBpbnQgbmV4dDsNCisgICAgRVZDUGFyc2VyQ29udGV4dCAqZXYg PSBzLT5wcml2X2RhdGE7DQorICAgIFBhcnNlQ29udGV4dCAqcGMgPSAmZXYtPnBjOw0KKyAgICBp bnQgaXNfZHVtbXlfYnVmID0gIWJ1Zl9zaXplOw0KKyAgICBjb25zdCB1aW50OF90ICpkdW1teV9i dWYgPSBidWY7DQorDQorICAgIGlmIChzLT5mbGFncyAmIFBBUlNFUl9GTEFHX0NPTVBMRVRFX0ZS QU1FUykNCisgICAgICAgIG5leHQgPSBidWZfc2l6ZTsNCisgICAgZWxzZSB7DQorICAgICAgICBu ZXh0ID0gZXZjX2ZpbmRfZnJhbWVfZW5kKHMsIGJ1ZiwgYnVmX3NpemUsIGF2Y3R4KTsNCisgICAg ICAgIGlmIChmZl9jb21iaW5lX2ZyYW1lKHBjLCBuZXh0LCAmYnVmLCAmYnVmX3NpemUpIDwgMCkg ew0KKyAgICAgICAgICAgICpwb3V0YnVmICAgICAgPSBOVUxMOw0KKyAgICAgICAgICAgICpwb3V0 YnVmX3NpemUgPSAwOw0KKyAgICAgICAgICAgIGV2LT50b19yZWFkIC09IGJ1Zl9zaXplOw0KKyAg ICAgICAgICAgIHJldHVybiBidWZfc2l6ZTsNCisgICAgICAgIH0NCisgICAgfQ0KKw0KKyAgICBp c19kdW1teV9idWYgJj0gKGR1bW15X2J1ZiA9PSBidWYpOw0KKw0KKyAgICBpZiAoIWlzX2R1bW15 X2J1ZikNCisgICAgICAgIHBhcnNlX25hbF91bml0cyhzLCBidWYsIGJ1Zl9zaXplLCBhdmN0eCk7 DQorDQorICAgICpwb3V0YnVmICAgICAgPSBidWY7DQorICAgICpwb3V0YnVmX3NpemUgPSBidWZf c2l6ZTsNCisgICAgZXYtPnRvX3JlYWQgLT0gbmV4dDsNCisNCisgICAgcmV0dXJuIG5leHQ7DQor fQ0KKw0KK2NvbnN0IEFWQ29kZWNQYXJzZXIgZmZfZXZjX3BhcnNlciA9IHsNCisgICAgLmNvZGVj X2lkcyAgICAgID0geyBBVl9DT0RFQ19JRF9FVkMgfSwNCisgICAgLnByaXZfZGF0YV9zaXplID0g c2l6ZW9mKEVWQ1BhcnNlckNvbnRleHQpLA0KKyAgICAucGFyc2VyX2luaXQgICAgPSBldmNfcGFy c2VyX2luaXQsDQorICAgIC5wYXJzZXJfcGFyc2UgICA9IGV2Y19wYXJzZSwNCisgICAgLnBhcnNl cl9jbG9zZSAgID0gZmZfcGFyc2VfY2xvc2UsDQorfTsNCmRpZmYgLS1naXQgYS9saWJhdmNvZGVj L2xpYnhldmQuYyBiL2xpYmF2Y29kZWMvbGlieGV2ZC5jDQpuZXcgZmlsZSBtb2RlIDEwMDY0NA0K aW5kZXggMDAwMDAwMDAwMC4uY2U2ODYyZDcyZg0KLS0tIC9kZXYvbnVsbA0KKysrIGIvbGliYXZj b2RlYy9saWJ4ZXZkLmMNCkBAIC0wLDAgKzEsNDQwIEBADQorLyoNCisgKiBsaWJ4ZXZkIGRlY29k ZXINCisgKiBFVkMgKE1QRUctNSBFc3NlbnRpYWwgVmlkZW8gQ29kaW5nKSBkZWNvZGluZyB1c2lu ZyBYRVZEIE1QRUctNSBFVkMgZGVjb2RlciBsaWJyYXJ5DQorICoNCisgKiBDb3B5cmlnaHQgKEMp IDIwMjEgRGF3aWQgS296aW5za2kgPGQua296aW5za2lAc2Ftc3VuZy5jb20+DQorICoNCisgKiBU aGlzIGZpbGUgaXMgcGFydCBvZiBGRm1wZWcuDQorICoNCisgKiBGRm1wZWcgaXMgZnJlZSBzb2Z0 d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yDQorICogbW9kaWZ5IGl0IHVuZGVy IHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYw0KKyAqIExpY2Vuc2Ug YXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcg0KKyAq IHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRl ciB2ZXJzaW9uLg0KKyAqDQorICogRkZtcGVnIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRo YXQgaXQgd2lsbCBiZSB1c2VmdWwsDQorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRo b3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YNCisgKiBNRVJDSEFOVEFCSUxJVFkgb3Ig RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQ0KKyAqIExlc3Nl ciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuDQorICoNCisgKiBZb3Ug c2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVi bGljDQorICogTGljZW5zZSBhbG9uZyB3aXRoIEZGbXBlZzsgaWYgbm90LCB3cml0ZSB0byB0aGUg RnJlZSBTb2Z0d2FyZQ0KKyAqIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwg RmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSBVU0ENCisgKi8NCisNCisjaW5jbHVk ZSA8ZmxvYXQuaD4NCisjaW5jbHVkZSA8c3RkbGliLmg+DQorDQorI2luY2x1ZGUgPHhldmQuaD4N CisNCisjaW5jbHVkZSAibGliYXZ1dGlsL2ludGVybmFsLmgiDQorI2luY2x1ZGUgImxpYmF2dXRp bC9jb21tb24uaCINCisjaW5jbHVkZSAibGliYXZ1dGlsL29wdC5oIg0KKyNpbmNsdWRlICJsaWJh dnV0aWwvcGl4ZGVzYy5oIg0KKyNpbmNsdWRlICJsaWJhdnV0aWwvcGl4Zm10LmgiDQorI2luY2x1 ZGUgImxpYmF2dXRpbC9pbWd1dGlscy5oIg0KKyNpbmNsdWRlICJsaWJhdnV0aWwvY3B1LmgiDQor DQorI2luY2x1ZGUgImF2Y29kZWMuaCINCisjaW5jbHVkZSAiaW50ZXJuYWwuaCINCisjaW5jbHVk ZSAicGFja2V0X2ludGVybmFsLmgiDQorI2luY2x1ZGUgImNvZGVjX2ludGVybmFsLmgiDQorDQor I2RlZmluZSBYRVZEX1BBUkFNX0JBRF9OQU1FIC0xDQorI2RlZmluZSBYRVZEX1BBUkFNX0JBRF9W QUxVRSAtMg0KKw0KKyNkZWZpbmUgRVZDX05BTF9IRUFERVJfU0laRSAyIC8qIGJ5dGUgKi8NCisN CisvKioNCisgKiBUaGUgc3RydWN0dXJlIHN0b3JlcyBhbGwgdGhlIHN0YXRlcyBhc3NvY2lhdGVk IHdpdGggdGhlIGluc3RhbmNlIG9mIFhldmUgTVBFRy01IEVWQyBkZWNvZGVyDQorICovDQordHlw ZWRlZiBzdHJ1Y3QgWGV2ZENvbnRleHQgew0KKyAgICBjb25zdCBBVkNsYXNzICpjbGFzczsNCisN CisgICAgWEVWRCBpZDsgICAgICAgICAgICAvLyBYRVZEIGluc3RhbmNlIGlkZW50aWZpZXIgQHNl ZSB4ZXZkLmgNCisgICAgWEVWRF9DRFNDIGNkc2M7ICAgICAvLyBkZWNvZGluZyBwYXJhbWV0ZXJz IEBzZWUgeGV2ZC5oDQorDQorICAgIGludCBkZWNvZF9mcmFtZXM7ICAgLy8gbnVtYmVyIG9mIGRl Y29kZWQgZnJhbWVzDQorICAgIGludCBwYWNrZXRfY291bnQ7ICAgLy8gbnVtYmVyIG9mIHBhY2tl dHMgY3JlYXRlZCBieSBkZWNvZGVyDQorDQorICAgIC8vIGNvbmZpZ3VyYXRpb24gcGFyYW1ldGVy cw0KKyAgICBBVkRpY3Rpb25hcnkgKnhldmRfb3B0czsgLy8geGV2ZCBjb25maWd1cmF0aW9uIHJl YWQgZnJvbSBhIDogc2VwYXJhdGVkIGxpc3Qgb2Yga2V5PXZhbHVlIHBhcmFtZXRlcnMNCisNCit9 IFhldmRDb250ZXh0Ow0KKw0KKy8qKg0KKyAqIFRoZSBmdW5jdGlvbiByZXR1cm5zIGEgcG9pbnRl ciB0byBhIHZhcmlhYmxlIG9mIHR5cGUgWEVWRF9DRFNDLg0KKyAqIFhFVkRfQ0RTQyBjb250YWlu cyBhbGwgZGVjb2RlciBwYXJhbWV0ZXJzIHRoYXQgc2hvdWxkIGJlIGluaXRpYWxpemVkIGJlZm9y ZSBpdHMgdXNlLg0KKyAqDQorICogVGhlIGZpZWxkIHZhbHVlcyBvZiB0aGUgWEVWRF9DRFNDIHN0 cnVjdHVyZSBhcmUgcG9wdWxhdGVkIGJhc2VkIG9uOg0KKyAqIC0gdGhlIGNvcnJlc3BvbmRpbmcg ZmllbGQgdmFsdWVzIG9mIHRoZSBBdkNvZGVjQ29uZXR4dCBzdHJ1Y3R1cmUsDQorICogLSB0aGUg eGV2ZCBkZWNvZGVyIHNwZWNpZmljIG9wdGlvbiB2YWx1ZXMsDQorICogICAodGhlIGZ1bGwgbGlz dCBvZiBvcHRpb25zIGF2YWlsYWJsZSBmb3IgdGhlIHhldmQgZW5jb2RlciBpcyBkaXNwbGF5ZWQg YWZ0ZXIgZXhlY3V0aW5nIHRoZSBjb21tYW5kIC4vZmZtcGVnIC0taGVscCBkZWNvZGVyID0gbGli eGV2ZCkNCisgKiAtIGFuZCB0aGUgeGV2ZCBlbmNvZGVyIG9wdGlvbnMgc3BlY2lmaWVkIGFzIGEg bGlzdCBvZiBrZXktdmFsdWUgcGFpcnMgZm9sbG93aW5nIHRoZSB4ZXZkLXBhcmFtcyBvcHRpb24N CisgKg0KKyAqIE9yZGVyIG9mIGlucHV0IHByb2Nlc3NpbmcgYW5kIHBvcHVsYXRpbmcgdGhlIFhF VkRfQ0RTQyBzdHJ1Y3R1cmUNCisgKiAxLiBmaXJzdCwgdGhlIGNvcnJlc3BvbmRpbmcgZmllbGRz IG9mIHRoZSBBVkNvZGVjQ29udGV4dCBzdHJ1Y3R1cmUgYXJlIHByb2Nlc3NlZCwgKGkuZSAtdGhy ZWFkcyA0KQ0KKyAqIDIuIHRoZW4geGV2ZC1zcGVjaWZpYyBvcHRpb25zIGFyZSBhZGRlZCBhcyBB Vk9wdGlvbiB0byB0aGUgeGV2ZCBBVkNvZGVjIGltcGxlbWVudGF0aW9uIChpLmUgLXRocmVhZHMg MykNCisgKiAzLiBmaW5hbGx5LCB0aGUgb3B0aW9ucyBzcGVjaWZpZWQgYWZ0ZXIgdGhlIHhldmQt cGFyYW1zIG9wdGlvbiBhcyB0aGUgcGFyYW1ldGVyIGxpc3Qgb2YgdHlwZSBrZXkgdmFsdWUgYXJl IHByb2Nlc3NlZCAoaS5lIC14ZXZkLXBhcmFtcyAibT0yIikNCisgKg0KKyAqIFNvbWUgb3B0aW9u cyBjYW4gYmUgc2V0IGluIGRpZmZlcmVudCB3YXlzLiBJbiB0aGlzIGNhc2UsIHBsZWFzZSBmb2xs b3cgdGhlIGFib3ZlLW1lbnRpb25lZCBvcmRlciBvZiBwcm9jZXNzaW5nLg0KKyAqIFRoZSBtb3N0 IHJlY2VudCBhc3NpZ25tZW50cyBvdmVyd3JpdGUgdGhlIHByZXZpb3VzIHZhbHVlcy4NCisgKg0K KyAqIEBwYXJhbVtpbl0gYXZjdHggY29kZWMgY29udGV4dA0KKyAqIEBwYXJhbVtvdXRdIGNkc2Mg Y29udGFpbnMgYWxsIGVuY29kZXIgcGFyYW1ldGVycyB0aGF0IHNob3VsZCBiZSBpbml0aWFsaXpl ZCBiZWZvcmUgaXRzIHVzZQ0KKyAqDQorICogQHJldHVybiAwIG9uIHN1Y2Nlc3MsIG5lZ2F0aXZl IGVycm9yIGNvZGUgb24gZmFpbHVyZQ0KKyAqLw0KK3N0YXRpYyBpbnQgZ2V0X2NvbmYoQVZDb2Rl Y0NvbnRleHQgKmF2Y3R4LCBYRVZEX0NEU0MgKmNkc2MpDQorew0KKyAgICBpbnQgY3B1X2NvdW50 ID0gYXZfY3B1X2NvdW50KCk7DQorDQorICAgIC8qIGNsZWFyIFhFVlNfQ0RTQyBzdHJ1Y3R1cmUg Ki8NCisgICAgbWVtc2V0KGNkc2MsIDAsIHNpemVvZihYRVZEX0NEU0MpKTsNCisNCisgICAgLyog aW5pdCBYRVZEX0NEU0MgKi8NCisgICAgaWYoYXZjdHgtPnRocmVhZF9jb3VudCA8PSAwKQ0KKyAg ICAgICAgY2RzYy0+dGhyZWFkcyA9IChjcHVfY291bnQgPCBYRVZEX01BWF9UQVNLX0NOVCkgPyBj cHVfY291bnQgOiBYRVZEX01BWF9UQVNLX0NOVDsNCisgICAgZWxzZSBpZihhdmN0eC0+dGhyZWFk X2NvdW50ID4gWEVWRF9NQVhfVEFTS19DTlQpDQorICAgICAgICBjZHNjLT50aHJlYWRzID0gWEVW RF9NQVhfVEFTS19DTlQ7DQorICAgIGVsc2UNCisgICAgICAgIGNkc2MtPnRocmVhZHMgPSBhdmN0 eC0+dGhyZWFkX2NvdW50Ow0KKw0KKyAgICByZXR1cm4gMDsNCit9DQorDQorLyoqDQorICogUmVh ZCBOQUwgdW5pdCBsZW5ndGgNCisgKiBAcGFyYW0gYnMgaW5wdXQgZGF0YSAoYml0c3RyZWFtKQ0K KyAqIEByZXR1cm4gdGhlIGxlbmd0aCBvZiBOQUwgdW5pdCBvbiBzdWNjZXNzLCAwIHZhbHVlIG9u IGZhaWx1cmUNCisgKi8NCitzdGF0aWMgdWludDMyX3QgcmVhZF9uYWxfdW5pdF9sZW5ndGgoY29u c3QgdWludDhfdCAqYnMsIGludCBic19zaXplLCBBVkNvZGVjQ29udGV4dCAqYXZjdHgpDQorew0K KyAgICB1aW50MzJfdCBsZW4gPSAwOw0KKyAgICBYRVZEX0lORk8gaW5mbzsNCisgICAgaW50IHJl dDsNCisNCisgICAgaWYoYnNfc2l6ZSA9PSBYRVZEX05BTF9VTklUX0xFTkdUSF9CWVRFKSB7DQor ICAgICAgICByZXQgPSB4ZXZkX2luZm8oKHZvaWQgKilicywgWEVWRF9OQUxfVU5JVF9MRU5HVEhf QllURSwgMSwgJmluZm8pOw0KKyAgICAgICAgaWYgKFhFVkRfRkFJTEVEKHJldCkpIHsNCisgICAg ICAgICAgICBhdl9sb2coYXZjdHgsIEFWX0xPR19FUlJPUiwgIkNhbm5vdCBnZXQgYml0c3RyZWFt IGluZm9ybWF0aW9uXG4iKTsNCisgICAgICAgICAgICByZXR1cm4gMDsNCisgICAgICAgIH0NCisg ICAgICAgIGxlbiA9IGluZm8ubmFsdV9sZW47DQorICAgICAgICBpZihsZW4gPT0gMCkgew0KKyAg ICAgICAgICAgIGF2X2xvZyhhdmN0eCwgQVZfTE9HX0VSUk9SLCAiSW52YWxpZCBiaXRzdHJlYW0g c2l6ZSEgWyVkXVxuIiwgYnNfc2l6ZSk7DQorICAgICAgICAgICAgcmV0dXJuIDA7DQorICAgICAg ICB9DQorICAgIH0NCisNCisgICAgcmV0dXJuIGxlbjsNCit9DQorDQorLyoqDQorICogQHBhcmFt W2luXSB4ZWN0eCB0aGUgc3RydWN0dXJlIHRoYXQgc3RvcmVzIGFsbCB0aGUgc3RhdGUgYXNzb2Np YXRlZCB3aXRoIHRoZSBpbnN0YW5jZSBvZiBYZXZlIE1QRUctNSBFVkMgZGVjb2Rlcg0KKyAqIEBw YXJhbVtvdXRdIGF2Y3R4IGNvZGVjIGNvbnRleHQNCisgKiBAcmV0dXJuIDAgb24gc3VjY2Vzcywg bmVnYXRpdmUgdmFsdWUgb24gZmFpbHVyZQ0KKyAqLw0KK3N0YXRpYyBpbnQgZXhwb3J0X3N0cmVh bV9wYXJhbXMoY29uc3QgWGV2ZENvbnRleHQgKnhlY3R4LCBBVkNvZGVjQ29udGV4dCAqYXZjdHgp DQorew0KKyAgICBpbnQgcmV0Ow0KKyAgICBpbnQgc2l6ZTsNCisgICAgaW50IGNvbG9yX3NwYWNl Ow0KKw0KKyAgICBhdmN0eC0+cGl4X2ZtdCA9IEFWX1BJWF9GTVRfWVVWNDIwUDEwOw0KKw0KKyAg ICBzaXplID0gNDsNCisgICAgcmV0ID0geGV2ZF9jb25maWcoeGVjdHgtPmlkLCBYRVZEX0NGR19H RVRfQ09ERURfV0lEVEgsICZhdmN0eC0+Y29kZWRfd2lkdGgsICZzaXplKTsNCisgICAgaWYgKFhF VkRfRkFJTEVEKHJldCkpIHsNCisgICAgICAgIGF2X2xvZyhhdmN0eCwgQVZfTE9HX0VSUk9SLCAi RmFpbGVkIHRvIGdldCBjb2RlZF93aWR0aFxuIik7DQorICAgICAgICByZXR1cm4gQVZFUlJPUl9F WFRFUk5BTDsNCisgICAgfQ0KKw0KKyAgICByZXQgPSB4ZXZkX2NvbmZpZyh4ZWN0eC0+aWQsIFhF VkRfQ0ZHX0dFVF9DT0RFRF9IRUlHSFQsICZhdmN0eC0+Y29kZWRfaGVpZ2h0LCAmc2l6ZSk7DQor ICAgIGlmIChYRVZEX0ZBSUxFRChyZXQpKSB7DQorICAgICAgICBhdl9sb2coYXZjdHgsIEFWX0xP R19FUlJPUiwgIkZhaWxlZCB0byBnZXQgY29kZWRfaGVpZ2h0XG4iKTsNCisgICAgICAgIHJldHVy biBBVkVSUk9SX0VYVEVSTkFMOw0KKyAgICB9DQorDQorICAgIHJldCA9IHhldmRfY29uZmlnKHhl Y3R4LT5pZCwgWEVWRF9DRkdfR0VUX1dJRFRILCAmYXZjdHgtPndpZHRoLCAmc2l6ZSk7DQorICAg IGlmIChYRVZEX0ZBSUxFRChyZXQpKSB7DQorICAgICAgICBhdl9sb2coYXZjdHgsIEFWX0xPR19F UlJPUiwgIkZhaWxlZCB0byBnZXQgd2lkdGhcbiIpOw0KKyAgICAgICAgcmV0dXJuIEFWRVJST1Jf RVhURVJOQUw7DQorICAgIH0NCisNCisgICAgcmV0ID0geGV2ZF9jb25maWcoeGVjdHgtPmlkLCBY RVZEX0NGR19HRVRfSEVJR0hULCAmYXZjdHgtPmhlaWdodCwgJnNpemUpOw0KKyAgICBpZiAoWEVW RF9GQUlMRUQocmV0KSkgew0KKyAgICAgICAgYXZfbG9nKGF2Y3R4LCBBVl9MT0dfRVJST1IsICJG YWlsZWQgdG8gZ2V0IGhlaWdodFxuIik7DQorICAgICAgICByZXR1cm4gQVZFUlJPUl9FWFRFUk5B TDsNCisgICAgfQ0KKw0KKyAgICByZXQgPSB4ZXZkX2NvbmZpZyh4ZWN0eC0+aWQsIFhFVkRfQ0ZH X0dFVF9DT0xPUl9TUEFDRSwgJmNvbG9yX3NwYWNlLCAmc2l6ZSk7DQorICAgIGlmIChYRVZEX0ZB SUxFRChyZXQpKSB7DQorICAgICAgICBhdl9sb2coYXZjdHgsIEFWX0xPR19FUlJPUiwgIkZhaWxl ZCB0byBnZXQgY29sb3Jfc3BhY2VcbiIpOw0KKyAgICAgICAgcmV0dXJuIEFWRVJST1JfRVhURVJO QUw7DQorICAgIH0NCisgICAgc3dpdGNoKGNvbG9yX3NwYWNlKSB7DQorICAgIGNhc2UgWEVWRF9D U19ZQ0JDUjQwMF8xMExFOg0KKyAgICAgICAgYXZjdHgtPnBpeF9mbXQgPSBBVl9QSVhfRk1UX0dS QVkxMExFOw0KKyAgICAgICAgYnJlYWs7DQorICAgIGNhc2UgWEVWRF9DU19ZQ0JDUjQyMF8xMExF Og0KKyAgICAgICAgYXZjdHgtPnBpeF9mbXQgPSBBVl9QSVhfRk1UX1lVVjQyMFAxMExFOw0KKyAg ICAgICAgYnJlYWs7DQorICAgIGNhc2UgWEVWRF9DU19ZQ0JDUjQyMl8xMExFOg0KKyAgICAgICAg YXZjdHgtPnBpeF9mbXQgPSBBVl9QSVhfRk1UX1lVVjQyMlAxMExFOw0KKyAgICAgICAgYnJlYWs7 DQorICAgIGNhc2UgWEVWRF9DU19ZQ0JDUjQ0NF8xMExFOg0KKyAgICAgICAgYXZjdHgtPnBpeF9m bXQgPSBBVl9QSVhfRk1UX1lVVjQ0NFAxMExFOw0KKyAgICAgICAgYnJlYWs7DQorICAgIGRlZmF1 bHQ6DQorICAgICAgICBhdl9sb2coYXZjdHgsIEFWX0xPR19FUlJPUiwgIlVua25vd24gY29sb3Ig c3BhY2VcbiIpOw0KKyAgICAgICAgYXZjdHgtPnBpeF9mbXQgPSBBVl9QSVhfRk1UX05PTkU7DQor ICAgICAgICByZXR1cm4gQVZFUlJPUl9JTlZBTElEREFUQTsNCisgICAgfQ0KKw0KKyAgICAvLyB0 aGUgZnVuY3Rpb24gcmV0dXJucyBzcHMtPm51bV9yZW9yZGVyX3BpY3MNCisgICAgcmV0ID0geGV2 ZF9jb25maWcoeGVjdHgtPmlkLCBYRVZEX0NGR19HRVRfTUFYX0NPRElOR19ERUxBWSwgJmF2Y3R4 LT5tYXhfYl9mcmFtZXMsICZzaXplKTsNCisgICAgaWYgKFhFVkRfRkFJTEVEKHJldCkpIHsNCisg ICAgICAgIGF2X2xvZyhhdmN0eCwgQVZfTE9HX0VSUk9SLCAiRmFpbGVkIHRvIGdldCBtYXhfY29k aW5nX2RlbGF5XG4iKTsNCisgICAgICAgIHJldHVybiBBVkVSUk9SX0VYVEVSTkFMOw0KKyAgICB9 DQorDQorICAgIGF2Y3R4LT5oYXNfYl9mcmFtZXMgPSAoYXZjdHgtPm1heF9iX2ZyYW1lcykgPyAx IDogMDsNCisNCisgICAgYXZjdHgtPmNvbG9yX3ByaW1hcmllcyA9IEFWQ09MX1BSSV9VTlNQRUNJ RklFRDsNCisgICAgYXZjdHgtPmNvbG9yX3RyYyAgICAgICA9IEFWQ09MX1RSQ19VTlNQRUNJRklF RDsNCisgICAgYXZjdHgtPmNvbG9yc3BhY2UgICAgICA9IEFWQ09MX1NQQ19VTlNQRUNJRklFRDsN CisNCisgICAgcmV0dXJuIDA7DQorfQ0KKw0KKy8qKg0KKyAqIEluaXRpYWxpemUgZGVjb2Rlcg0K KyAqIENyZWF0ZSBhIGRlY29kZXIgaW5zdGFuY2UgYW5kIGFsbG9jYXRlIGFsbCB0aGUgbmVlZGVk IHJlc291cmNlcw0KKyAqDQorICogQHBhcmFtIGF2Y3R4IGNvZGVjIGNvbnRleHQNCisgKiBAcmV0 dXJuIDAgb24gc3VjY2VzcywgbmVnYXRpdmUgZXJyb3IgY29kZSBvbiBmYWlsdXJlDQorICovDQor c3RhdGljIGF2X2NvbGQgaW50IGxpYnhldmRfaW5pdChBVkNvZGVjQ29udGV4dCAqYXZjdHgpDQor ew0KKyAgICBYZXZkQ29udGV4dCAqeGVjdHggPSBhdmN0eC0+cHJpdl9kYXRhOw0KKyAgICBpbnQg cmV0ID0gMDsNCisgICAgWEVWRF9DRFNDICpjZHNjID0gJih4ZWN0eC0+Y2RzYyk7DQorDQorICAg IC8qIHJlYWQgY29uZmlndXJhdGlvbnMgYW5kIHNldCB2YWx1ZXMgZm9yIGNyZWF0ZWQgZGVzY3Jp cHRvciAoWEVWRF9DRFNDKSAqLw0KKyAgICByZXQgPSBnZXRfY29uZihhdmN0eCwgY2RzYyk7DQor ICAgIGlmIChyZXQgIT0gMCkgew0KKyAgICAgICAgYXZfbG9nKGF2Y3R4LCBBVl9MT0dfRVJST1Is ICJDYW5ub3QgZ2V0IGNvbmZpZ3VyYXRpb25cbiIpOw0KKyAgICAgICAgcmV0dXJuIEFWRVJST1Jf SU5WQUxJRERBVEE7DQorICAgIH0NCisNCisgICAgLyogY3JlYXRlIGRlY29kZXIgKi8NCisgICAg eGVjdHgtPmlkID0geGV2ZF9jcmVhdGUoJih4ZWN0eC0+Y2RzYyksIE5VTEwpOw0KKyAgICBpZih4 ZWN0eC0+aWQgPT0gTlVMTCkgew0KKyAgICAgICAgYXZfbG9nKGF2Y3R4LCBBVl9MT0dfRVJST1Is ICJDYW5ub3QgY3JlYXRlIFhFVkQgZW5jb2RlclxuIik7DQorICAgICAgICByZXR1cm4gQVZFUlJP Ul9FWFRFUk5BTDsNCisgICAgfQ0KKw0KKyAgICB4ZWN0eC0+cGFja2V0X2NvdW50ID0gMDsNCisg ICAgeGVjdHgtPmRlY29kX2ZyYW1lcyA9IDA7DQorDQorICAgIHJldHVybiAwOw0KK30NCisNCisv KioNCisgICogRGVjb2RlIHBpY3R1cmUNCisgICoNCisgICogQHBhcmFtIGF2Y3R4IGNvZGVjIGNv bnRleHQNCisgICogQHBhcmFtW291dF0gZnJhbWUgZGVjb2RlZCBmcmFtZQ0KKyAgKiBAcGFyYW1b b3V0XSBnb3RfZnJhbWVfcHRyIGRlY29kZXIgc2V0cyB0byAwIG9yIDEgdG8gaW5kaWNhdGUgdGhh dCBhDQorICAqICAgICAgICAgICAgICAgICAgICAgICBub24tZW1wdHkgZnJhbWUgb3Igc3VidGl0 bGUgd2FzIHJldHVybmVkIGluDQorICAqICAgICAgICAgICAgICAgICAgICAgICBvdXRkYXRhLg0K KyAgKiBAcGFyYW1baW5dIGF2cGt0IEFWUGFja2V0IGNvbnRhaW5pbmcgZW5jb2RlZCBkYXRhIHRv IGJlIGRlY29kZWQNCisgICoNCisgICogQHJldHVybiBhbW91bnQgb2YgYnl0ZXMgcmVhZCBmcm9t IHRoZSBwYWNrZXQgb24gc3VjY2VzcywgbmVnYXRpdmUgZXJyb3INCisgICogICAgICAgICBjb2Rl IG9uIGZhaWx1cmUNCisgICovDQorIHN0YXRpYyBpbnQgbGlieGV2ZF9kZWNvZGUoc3RydWN0IEFW Q29kZWNDb250ZXh0ICphdmN0eCwgc3RydWN0IEFWRnJhbWUgKmZyYW1lLCBpbnQgKmdvdF9mcmFt ZV9wdHIsIEFWUGFja2V0ICphdnBrdCkNCit7DQorICAgIFhldmRDb250ZXh0ICp4ZWN0eCA9IE5V TEw7DQorICAgIFhFVkRfSU1HQiAqaW1nYiA9IE5VTEw7DQorICAgIFhFVkRfU1RBVCBzdGF0Ow0K KyAgICBYRVZEX0JJVEIgYml0YjsNCisgICAgaW50IHhldmRfcmV0LCBuYWx1X3NpemUsIGJzX3Jl YWRfcG9zOw0KKyAgICBpbnQgcmV0ID0gMDsNCisNCisgICAgaWYoYXZjdHggPT0gTlVMTCkgew0K KyAgICAgICAgYXZfbG9nKGF2Y3R4LCBBVl9MT0dfRVJST1IsICJJbnZhbGlkIGlucHV0IHBhcmFt ZXRlcjogQVZDb2RlY0NvbnRleHRcbiIpOw0KKyAgICAgICAgcmV0dXJuIEFWRVJST1IoRUlOVkFM KTsNCisgICAgfQ0KKyAgICB4ZWN0eCA9IGF2Y3R4LT5wcml2X2RhdGE7DQorICAgIGlmKHhlY3R4 ID09IE5VTEwpIHsNCisgICAgICAgIGF2X2xvZyhhdmN0eCwgQVZfTE9HX0VSUk9SLCAiSW52YWxp ZCBYRVZEIGNvbnRleHRcbiIpOw0KKyAgICAgICAgcmV0dXJuIEFWRVJST1IoRUlOVkFMKTsNCisg ICAgfQ0KKw0KKyAgICBpZihhdnBrdC0+c2l6ZSA+IDApIHsNCisgICAgICAgIGJzX3JlYWRfcG9z ID0gMDsNCisgICAgICAgIGltZ2IgPSBOVUxMOw0KKyAgICAgICAgd2hpbGUoYXZwa3QtPnNpemUg PiAoYnNfcmVhZF9wb3MgKyBYRVZEX05BTF9VTklUX0xFTkdUSF9CWVRFKSkgew0KKw0KKyAgICAg ICAgICAgIG1lbXNldCgmc3RhdCwgMCwgc2l6ZW9mKFhFVkRfU1RBVCkpOw0KKyAgICAgICAgICAg IG1lbXNldCgmYml0YiwgMCwgc2l6ZW9mKFhFVkRfQklUQikpOw0KKw0KKyAgICAgICAgICAgIG5h bHVfc2l6ZSA9IHJlYWRfbmFsX3VuaXRfbGVuZ3RoKGF2cGt0LT5kYXRhICsgYnNfcmVhZF9wb3Ms IFhFVkRfTkFMX1VOSVRfTEVOR1RIX0JZVEUsIGF2Y3R4KTsNCisgICAgICAgICAgICBpZihuYWx1 X3NpemUgPT0gMCkgew0KKyAgICAgICAgICAgICAgICBhdl9sb2coYXZjdHgsIEFWX0xPR19FUlJP UiwgIkludmFsaWQgYml0c3RyZWFtXG4iKTsNCisgICAgICAgICAgICAgICAgcmV0ID0gQVZFUlJP Ul9JTlZBTElEREFUQTsNCisgICAgICAgICAgICAgICAgZ290byBFUlI7DQorICAgICAgICAgICAg fQ0KKyAgICAgICAgICAgIGJzX3JlYWRfcG9zICs9IFhFVkRfTkFMX1VOSVRfTEVOR1RIX0JZVEU7 DQorDQorICAgICAgICAgICAgYml0Yi5hZGRyID0gYXZwa3QtPmRhdGEgKyBic19yZWFkX3BvczsN CisgICAgICAgICAgICBiaXRiLnNzaXplID0gbmFsdV9zaXplOw0KKw0KKyAgICAgICAgICAgIC8q IG1haW4gZGVjb2RpbmcgYmxvY2sgKi8NCisgICAgICAgICAgICB4ZXZkX3JldCA9IHhldmRfZGVj b2RlKHhlY3R4LT5pZCwgJmJpdGIsICZzdGF0KTsNCisgICAgICAgICAgICBpZihYRVZEX0ZBSUxF RCh4ZXZkX3JldCkpIHsNCisgICAgICAgICAgICAgICAgYXZfbG9nKGF2Y3R4LCBBVl9MT0dfRVJS T1IsICJGYWlsZWQgdG8gZGVjb2RlIGJpdHN0cmVhbVxuIik7DQorICAgICAgICAgICAgICAgIHJl dCA9IEFWRVJST1JfRVhURVJOQUw7DQorICAgICAgICAgICAgICAgIGdvdG8gRVJSOw0KKyAgICAg ICAgICAgIH0NCisNCisgICAgICAgICAgICBic19yZWFkX3BvcyArPSBuYWx1X3NpemU7DQorDQor ICAgICAgICAgICAgaWYoc3RhdC5uYWx1X3R5cGUgPT0gWEVWRF9OVVRfU1BTKSB7IC8vIEVWQyBz dHJlYW0gcGFyYW1ldGVycyBjaGFuZ2VkDQorICAgICAgICAgICAgICAgIGlmKChyZXQgPSBleHBv cnRfc3RyZWFtX3BhcmFtcyh4ZWN0eCwgYXZjdHgpKSAhPSAwKQ0KKyAgICAgICAgICAgICAgICAg ICAgZ290byBFUlI7DQorICAgICAgICAgICAgfQ0KKw0KKyAgICAgICAgICAgIGlmKHN0YXQucmVh ZCAhPSBuYWx1X3NpemUpDQorICAgICAgICAgICAgICAgIGF2X2xvZyhhdmN0eCwgQVZfTE9HX0lO Rk8sICJEaWZmZXJlbnQgcmVhZGluZyBvZiBiaXRzdHJlYW0gKGluOiVkLCByZWFkOiVkKVxuLCIs IG5hbHVfc2l6ZSwgc3RhdC5yZWFkKTsNCisgICAgICAgICAgICBpZihzdGF0LmZudW0gPj0gMCkg ew0KKyAgICAgICAgICAgICAgICAvLyBhbHJlYWR5IGhhcyBhIGRlY29kZWQgaW1hZ2UNCisgICAg ICAgICAgICAgICAgaWYgKGltZ2IpIHsNCisgICAgICAgICAgICAgICAgICAgIC8vIHhldmRfcHVs bCB1c2VzIHBvb2wgb2Ygb2JqZWN0cyBvZiB0eXBlIFhFVkRfSU1HQi4NCisgICAgICAgICAgICAg ICAgICAgIC8vIFRoZSBwb29sIHNpemUgaXMgZXF1YWwgTUFYX1BCX1NJWkUgKDI2KSwgc28gcmVs ZWFzZSBvYmplY3Qgd2hlbiBpdCBpcyBubyBtb3JlIG5lZWRlZA0KKyAgICAgICAgICAgICAgICAg ICAgaW1nYi0+cmVsZWFzZShpbWdiKTsNCisgICAgICAgICAgICAgICAgICAgIGltZ2IgPSBOVUxM Ow0KKyAgICAgICAgICAgICAgICB9DQorICAgICAgICAgICAgICAgIHhldmRfcmV0ID0geGV2ZF9w dWxsKHhlY3R4LT5pZCwgJmltZ2IpOw0KKyAgICAgICAgICAgICAgICBpZihYRVZEX0ZBSUxFRCh4 ZXZkX3JldCkpIHsNCisgICAgICAgICAgICAgICAgICAgIGF2X2xvZyhhdmN0eCwgQVZfTE9HX0VS Uk9SLCAiRmFpbGVkIHRvIHB1bGwgdGhlIGRlY29kZWQgaW1hZ2UgKHhldmQgZXJyb3IgY29kZTog JWQsIGZyYW1lIz0lZClcbiIsIHhldmRfcmV0LCBzdGF0LmZudW0pOw0KKyAgICAgICAgICAgICAg ICAgICAgcmV0ID0gQVZFUlJPUl9FWFRFUk5BTDsNCisgICAgICAgICAgICAgICAgICAgIGdvdG8g RVJSOw0KKyAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHhldmRfcmV0ID09IFhFVkRfT0tfRlJN X0RFTEFZRUQpIHsNCisgICAgICAgICAgICAgICAgICAgIGlmKGltZ2IpIHsNCisgICAgICAgICAg ICAgICAgICAgICAgICAvLyB4ZXZkX3B1bGwgdXNlcyBwb29sIG9mIG9iamVjdHMgb2YgdHlwZSBY RVZEX0lNR0IuDQorICAgICAgICAgICAgICAgICAgICAgICAgLy8gVGhlIHBvb2wgc2l6ZSBpcyBl cXVhbCBNQVhfUEJfU0laRSAoMjYpLCBzbyByZWxlYXNlIG9iamVjdCB3aGVuIGl0IGlzIG5vIG1v cmUgbmVlZGVkDQorICAgICAgICAgICAgICAgICAgICAgICAgaW1nYi0+cmVsZWFzZShpbWdiKTsN CisgICAgICAgICAgICAgICAgICAgICAgICBpbWdiID0gTlVMTDsNCisgICAgICAgICAgICAgICAg ICAgIH0NCisgICAgICAgICAgICAgICAgfQ0KKyAgICAgICAgICAgIH0NCisgICAgICAgIH0NCisg ICAgfSBlbHNlIHsgLy8gYnVtcGluZw0KKyAgICAgICAgeGV2ZF9yZXQgPSB4ZXZkX3B1bGwoeGVj dHgtPmlkLCAmKGltZ2IpKTsNCisgICAgICAgIGlmKHhldmRfcmV0ID09IFhFVkRfRVJSX1VORVhQ RUNURUQpIHsgLy8gYnVtcGluZyBwcm9jZXNzIGNvbXBsZXRlZA0KKyAgICAgICAgICAgICpnb3Rf ZnJhbWVfcHRyID0gMDsNCisgICAgICAgICAgICByZXR1cm4gMDsNCisgICAgICAgIH0gZWxzZSBp ZihYRVZEX0ZBSUxFRCh4ZXZkX3JldCkpIHsNCisgICAgICAgICAgICBhdl9sb2coYXZjdHgsIEFW X0xPR19FUlJPUiwgIkZhaWxlZCB0byBwdWxsIHRoZSBkZWNvZGVkIGltYWdlICh4ZXZkIGVycm9y IGNvZGU6ICVkKVxuIiwgeGV2ZF9yZXQpOw0KKyAgICAgICAgICAgIHJldCA9IEFWRVJST1JfRVhU RVJOQUw7DQorICAgICAgICAgICAgZ290byBFUlI7DQorICAgICAgICB9DQorICAgIH0NCisNCisg ICAgaWYoaW1nYikgew0KKyAgICAgICAgLy8gQHRvZG8gc3VwcG9ydHMgb3RoZXIgY29sb3Igc3Bh Y2UgYW5kIGJpdCBkZXB0aA0KKyAgICAgICAgaWYoaW1nYi0+Y3MgIT0gWEVWRF9DU19ZQ0JDUjQy MF8xMExFKSB7DQorICAgICAgICAgICAgYXZfbG9nKGF2Y3R4LCBBVl9MT0dfRVJST1IsICJOb3Qg c3VwcG9ydGVkIHBpeGVsIGZvcm1hdDogJXNcbiIsIGF2X2dldF9waXhfZm10X25hbWUoYXZjdHgt PnBpeF9mbXQpKTsNCisgICAgICAgICAgICByZXQgPSBBVkVSUk9SX0lOVkFMSUREQVRBOw0KKyAg ICAgICAgICAgIGdvdG8gRVJSOw0KKyAgICAgICAgfQ0KKw0KKyAgICAgICAgaWYgKGltZ2ItPndb MF0gIT0gYXZjdHgtPndpZHRoIHx8IGltZ2ItPmhbMF0gIT0gYXZjdHgtPmhlaWdodCkgeyAvLyBz dHJlYW0gcmVzb2x1dGlvbiBjaGFuZ2VkDQorICAgICAgICAgICAgaWYoZmZfc2V0X2RpbWVuc2lv bnMoYXZjdHgsIGltZ2ItPndbMF0sIGltZ2ItPmhbMF0pIDwgMCkgew0KKyAgICAgICAgICAgICAg ICBhdl9sb2coYXZjdHgsIEFWX0xPR19FUlJPUiwgIkNhbm5vdCBzZXQgbmV3IGRpbWVuc2lvblxu Iik7DQorICAgICAgICAgICAgICAgIHJldCA9IEFWRVJST1JfSU5WQUxJRERBVEE7DQorICAgICAg ICAgICAgICAgIGdvdG8gRVJSOw0KKyAgICAgICAgICAgIH0NCisgICAgICAgIH0NCisNCisgICAg ICAgIGZyYW1lLT5jb2RlZF9waWN0dXJlX251bWJlcisrOw0KKyAgICAgICAgZnJhbWUtPmRpc3Bs YXlfcGljdHVyZV9udW1iZXIrKzsNCisgICAgICAgIGZyYW1lLT5mb3JtYXQgPSBBVl9QSVhfRk1U X1lVVjQyMFAxMExFOw0KKw0KKyAgICAgICAgaWYgKGZmX2dldF9idWZmZXIoYXZjdHgsIGZyYW1l LCAwKSA8IDApIHsNCisgICAgICAgICAgICBhdl9sb2coYXZjdHgsIEFWX0xPR19FUlJPUiwgIkNh bm5vdCBnZXQgQVYgYnVmZmVyXG4iKTsNCisgICAgICAgICAgICByZXQgPSBBVkVSUk9SKEVOT01F TSk7DQorICAgICAgICAgICAgZ290byBFUlI7DQorICAgICAgICB9DQorDQorICAgICAgICBmcmFt ZS0+cHRzID0gYXZwa3QtPnB0czsNCisNCisgICAgICAgIGF2X2ltYWdlX2NvcHkoZnJhbWUtPmRh dGEsIGZyYW1lLT5saW5lc2l6ZSwgKGNvbnN0IHVpbnQ4X3QgKiopaW1nYi0+YSwNCisgICAgICAg ICAgICAgICAgICAgICAgaW1nYi0+cywgYXZjdHgtPnBpeF9mbXQsDQorICAgICAgICAgICAgICAg ICAgICAgIGltZ2ItPndbMF0sIGltZ2ItPmhbMF0pOw0KKw0KKyAgICAgICAgeGVjdHgtPmRlY29k X2ZyYW1lcysrOw0KKyAgICAgICAgKmdvdF9mcmFtZV9wdHIgPSAxOw0KKw0KKyAgICAgICAgLy8g eGV2ZF9wdWxsIHVzZXMgcG9vbCBvZiBvYmplY3RzIG9mIHR5cGUgWEVWRF9JTUdCLg0KKyAgICAg ICAgLy8gVGhlIHBvb2wgc2l6ZSBpcyBlcXVhbCBNQVhfUEJfU0laRSAoMjYpLCBzbyByZWxlYXNl IG9iamVjdCB3aGVuIGl0IGlzIG5vIG1vcmUgbmVlZGVkDQorICAgICAgICBpbWdiLT5yZWxlYXNl KGltZ2IpOw0KKyAgICAgICAgaW1nYiA9IE5VTEw7DQorICAgIH0gZWxzZQ0KKyAgICAgICAgKmdv dF9mcmFtZV9wdHIgPSAwOw0KKw0KKyAgICB4ZWN0eC0+cGFja2V0X2NvdW50Kys7DQorDQorICAg IHJldHVybiBhdnBrdC0+c2l6ZTsNCisNCitFUlI6DQorICAgIGlmKGltZ2IpIHsNCisgICAgICAg IGltZ2ItPnJlbGVhc2UoaW1nYik7DQorICAgICAgICBpbWdiID0gTlVMTDsNCisgICAgfQ0KKyAg ICAqZ290X2ZyYW1lX3B0ciA9IDA7DQorDQorICAgIHJldHVybiByZXQ7DQorfQ0KKw0KKy8qKg0K KyAqIERlc3Ryb3kgZGVjb2Rlcg0KKyAqDQorICogQHBhcmFtIGF2Y3R4IGNvZGVjIGNvbnRleHQN CisgKiBAcmV0dXJuIDAgb24gc3VjY2Vzcw0KKyAqLw0KK3N0YXRpYyBhdl9jb2xkIGludCBsaWJ4 ZXZkX2Nsb3NlKEFWQ29kZWNDb250ZXh0ICphdmN0eCkNCit7DQorICAgIFhldmRDb250ZXh0ICp4 ZWN0eCA9IGF2Y3R4LT5wcml2X2RhdGE7DQorICAgIGlmKHhlY3R4LT5pZCkgew0KKyAgICAgICAg eGV2ZF9kZWxldGUoeGVjdHgtPmlkKTsNCisgICAgICAgIHhlY3R4LT5pZCA9IE5VTEw7DQorICAg IH0NCisNCisgICAgcmV0dXJuIDA7DQorfQ0KKw0KKyNkZWZpbmUgT0ZGU0VUKHgpIG9mZnNldG9m KFhldmRDb250ZXh0LCB4KQ0KKyNkZWZpbmUgVkQgQVZfT1BUX0ZMQUdfVklERU9fUEFSQU0gfCBB Vl9PUFRfRkxBR19ERUNPRElOR19QQVJBTQ0KKw0KK3N0YXRpYyBjb25zdCBBVkNsYXNzIHhldmRf Y2xhc3MgPSB7DQorICAgIC5jbGFzc19uYW1lID0gImxpYnhldmQiLA0KKyAgICAuaXRlbV9uYW1l ICA9IGF2X2RlZmF1bHRfaXRlbV9uYW1lLA0KKyAgICAudmVyc2lvbiAgICA9IExJQkFWVVRJTF9W RVJTSU9OX0lOVCwNCit9Ow0KKw0KK2NvbnN0IEZGQ29kZWMgZmZfbGlieGV2ZF9kZWNvZGVyID0g ew0KKyAgICAucC5uYW1lICAgICAgICAgICAgID0gImV2YyIsDQorICAgIC5wLmxvbmdfbmFtZSAg ICAgICAgPSBOVUxMX0lGX0NPTkZJR19TTUFMTCgiRVZDIC8gTVBFRy01IEVzc2VudGlhbCBWaWRl byBDb2RpbmcgKEVWQykiKSwNCisgICAgLnAudHlwZSAgICAgICAgICAgICA9IEFWTUVESUFfVFlQ RV9WSURFTywNCisgICAgLnAuaWQgICAgICAgICAgICAgICA9IEFWX0NPREVDX0lEX0VWQywNCisg ICAgLmluaXQgICAgICAgICAgICAgICA9IGxpYnhldmRfaW5pdCwNCisgICAgRkZfQ09ERUNfREVD T0RFX0NCKGxpYnhldmRfZGVjb2RlKSwNCisgICAgLmNsb3NlICAgICAgICAgICAgICA9IGxpYnhl dmRfY2xvc2UsDQorICAgIC5wcml2X2RhdGFfc2l6ZSAgICAgPSBzaXplb2YoWGV2ZENvbnRleHQp LA0KKyAgICAucC5wcml2X2NsYXNzICAgICAgID0gJnhldmRfY2xhc3MsDQorICAgIC5wLmNhcGFi aWxpdGllcyAgICAgPSBBVl9DT0RFQ19DQVBfREVMQVkgfCBBVl9DT0RFQ19DQVBfQVVUT19USFJF QURTIHwgQVZfQ09ERUNfQ0FQX0FWT0lEX1BST0JJTkcgfCBBVl9DT0RFQ19DQVBfRFIxLA0KKyAg ICAucC53cmFwcGVyX25hbWUgICAgID0gImxpYnhldmQiLA0KK307DQpkaWZmIC0tZ2l0IGEvbGli YXZjb2RlYy9saWJ4ZXZlLmMgYi9saWJhdmNvZGVjL2xpYnhldmUuYw0KbmV3IGZpbGUgbW9kZSAx MDA2NDQNCmluZGV4IDAwMDAwMDAwMDAuLmUxMTVjZTYzZDINCi0tLSAvZGV2L251bGwNCisrKyBi L2xpYmF2Y29kZWMvbGlieGV2ZS5jDQpAQCAtMCwwICsxLDc1MyBAQA0KKy8qDQorICogbGlieGV2 ZSBlbmNvZGVyDQorICogRVZDIChNUEVHLTUgRXNzZW50aWFsIFZpZGVvIENvZGluZykgZW5jb2Rp bmcgdXNpbmcgWEVWRSBNUEVHLTUgRVZDIGVuY29kZXIgbGlicmFyeQ0KKyAqDQorICogQ29weXJp Z2h0IChDKSAyMDIxIERhd2lkIEtvemluc2tpIDxkLmtvemluc2tpQHNhbXN1bmcuY29tPg0KKyAq DQorICogVGhpcyBmaWxlIGlzIHBhcnQgb2YgRkZtcGVnLg0KKyAqDQorICogRkZtcGVnIGlzIGZy ZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcg0KKyAqIG1vZGlmeSBp dCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMNCisgKiBM aWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRo ZXINCisgKiB2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBh bnkgbGF0ZXIgdmVyc2lvbi4NCisgKg0KKyAqIEZGbXBlZyBpcyBkaXN0cmlidXRlZCBpbiB0aGUg aG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLA0KKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5U WTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mDQorICogTUVSQ0hBTlRBQklM SVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUNCisg KiBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLg0KKyAqDQor ICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5l cmFsIFB1YmxpYw0KKyAqIExpY2Vuc2UgYWxvbmcgd2l0aCBGRm1wZWc7IGlmIG5vdCwgd3JpdGUg dG8gdGhlIEZyZWUgU29mdHdhcmUNCisgKiBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBT dHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BIDAyMTEwLTEzMDEgVVNBDQorICovDQorDQor I2luY2x1ZGUgPGZsb2F0Lmg+DQorI2luY2x1ZGUgPHN0ZGxpYi5oPg0KKw0KKyNpbmNsdWRlIDx4 ZXZlLmg+DQorDQorI2luY2x1ZGUgImxpYmF2dXRpbC9pbnRlcm5hbC5oIg0KKyNpbmNsdWRlICJs aWJhdnV0aWwvY29tbW9uLmgiDQorI2luY2x1ZGUgImxpYmF2dXRpbC9vcHQuaCINCisjaW5jbHVk ZSAibGliYXZ1dGlsL3BpeGRlc2MuaCINCisjaW5jbHVkZSAibGliYXZ1dGlsL3BpeGZtdC5oIg0K KyNpbmNsdWRlICJsaWJhdnV0aWwvdGltZS5oIg0KKyNpbmNsdWRlICJsaWJhdnV0aWwvY3B1Lmgi DQorI2luY2x1ZGUgImxpYmF2dXRpbC9hdnN0cmluZy5oIg0KKw0KKyNpbmNsdWRlICJhdmNvZGVj LmgiDQorI2luY2x1ZGUgImludGVybmFsLmgiDQorI2luY2x1ZGUgInBhY2tldF9pbnRlcm5hbC5o Ig0KKyNpbmNsdWRlICJjb2RlY19pbnRlcm5hbC5oIg0KKyNpbmNsdWRlICJlbmNvZGUuaCINCisN CisjZGVmaW5lIE1BWF9CU19CVUYgKDE2KjEwMjQqMTAyNCkNCisNCisvKioNCisgKiBFcnJvciBj b2Rlcw0KKyAqLw0KKyNkZWZpbmUgWEVWRV9QQVJBTV9CQURfTkFNRSAtMTAwDQorI2RlZmluZSBY RVZFX1BBUkFNX0JBRF9WQUxVRSAtMjAwDQorDQorLyoqDQorICogRW5jb2RlciBzdGF0ZXMNCisg Kg0KKyAqIFNUQVRFX0VOQ09ESU5HIC0gdGhlIGVuY29kZXIgcmVjZWl2ZXMgYW5kIHByb2Nlc3Nl cyBpbnB1dCBmcmFtZXMNCisgKiBTVEFURV9CVU1QSU5HICAtIHRoZXJlIGFyZSBubyBtb3JlIGlu cHV0IGZyYW1lcywgaG93ZXZlciB0aGUgZW5jb2RlciBzdGlsbCBwcm9jZXNzZXMgcHJldmlvdXNs eSByZWNlaXZlZCBkYXRhDQorICogU1RBVEVfU0tJUFBJTkcgLSBza2lwcGluZyBpbnB1dCBmcmFt ZXMNCisgKi8NCit0eXBlZGVmIGVudW0gU3RhdGUgew0KKyAgICBTVEFURV9FTkNPRElORywNCisg ICAgU1RBVEVfQlVNUElORywNCisgICAgU1RBVEVfU0tJUFBJTkcNCit9IFN0YXRlOw0KKw0KKy8q Kg0KKyAqIFRoZSBzdHJ1Y3R1cmUgc3RvcmVzIGFsbCB0aGUgc3RhdGVzIGFzc29jaWF0ZWQgd2l0 aCB0aGUgaW5zdGFuY2Ugb2YgWGV2ZSBNUEVHLTUgRVZDIGVuY29kZXINCisgKi8NCit0eXBlZGVm IHN0cnVjdCBYZXZlQ29udGV4dCB7DQorICAgIGNvbnN0IEFWQ2xhc3MgKmNsYXNzOw0KKw0KKyAg ICBYRVZFIGlkOyAgICAgICAgICAgIC8vIFhFVkUgaW5zdGFuY2UgaWRlbnRpZmllcg0KKyAgICBY RVZFX0NEU0MgY2RzYzsgICAgIC8vIGNvZGluZyBwYXJhbWV0ZXJzIGkuZSBwcm9maWxlLCB3aWR0 aCAmIGhlaWdodCBvZiBpbnB1dCBmcmFtZSwgbnVtIG9mIHRoZXJhZHMsIGZyYW1lIHJhdGUgLi4u DQorICAgIFhFVkVfQklUQiBiaXRiOyAgICAgLy8gYml0c3RyZWFtIGJ1ZmZlciAob3V0cHV0KQ0K KyAgICBYRVZFX1NUQVQgc3RhdDsgICAgIC8vIGVuY29kaW5nIHN0YXR1cyAob3V0cHV0KQ0KKyAg ICBYRVZFX0lNR0IgaW1nYjsgICAgIC8vIGltYWdlIGJ1ZmZlciAoaW5wdXQpDQorDQorICAgIFN0 YXRlIHN0YXRlOyAgICAgICAgLy8gZW5jb2RlciBzdGF0ZSAoc2tpcHBpbmcsIGVuY29kaW5nLCBi dW1waW5nKQ0KKw0KKyAgICAvLyBDaHJvbWEgc3Vic2FtcGxpbmcNCisgICAgaW50IHdpZHRoX2x1 bWE7DQorICAgIGludCBoZWlnaHRfbHVtYTsNCisgICAgaW50IHdpZHRoX2Nocm9tYTsNCisgICAg aW50IGhlaWdodF9jaHJvbWE7DQorDQorICAgIGludCBwcm9maWxlX2lkOyAgICAgLy8gZW5jb2Rl ciBwcm9maWxlIChtYWluLCBiYXNlbGluZSkNCisgICAgaW50IHByZXNldF9pZDsgICAgICAvLyBw cmVzZXQgb2YgeGV2ZSAoIGZhc3QsIG1lZGl1bSwgc2xvdywgcGxhY2VibykNCisgICAgaW50IHR1 bmVfaWQ7ICAgICAgICAvLyB0dW5lIG9mIHhldmUgKHBzbnIsIHplcm9sYXRlbmN5KQ0KKyAgICBp bnQgaW5wdXRfZGVwdGg7ICAgIC8vIGlucHV0IGJpdC1kZXB0aDogOGJpdCwgMTBiaXQNCisgICAg aW50IGNvbG9yX2Zvcm1hdDsgICAvLyBpbnB1dCBkYXRhIGNvbG9yIGZvcm1hdDogY3VycmVudGx5 IG9ubHkgWEVWRV9DRl9ZQ0JDUjQyMCBpcyBzdXBwb3J0ZWQNCisgICAgaW50IGhhc2g7ICAgICAg ICAgICAvLyBlbWJlZCBwaWN0dXJlIHNpZ25hdHVyZSAoSEFTSCkgZm9yIGNvbmZvcm1hbmNlIGNo ZWNraW5nIGluIGRlY29kaW5nDQorDQorICAgIC8qIHZhcmlhYmxlcyBmb3IgaW5wdXQgcGFyYW1l dGVyICovDQorICAgIGNoYXIgKm9wX3ByZXNldDsNCisgICAgY2hhciAqb3BfdHVuZTsNCisgICAg aW50IG9wX3FwOw0KKyAgICBpbnQgb3BfY3JmOw0KKw0KKyAgICAvLyBjb25maWd1cmF0aW9uIHBh cmFtZXRlcnMNCisgICAgLy8geGV2ZSBjb25maWd1cmF0aW9uIHJlYWQgZnJvbSBhIDogc2VwYXJh dGVkIGxpc3Qgb2Yga2V5PXZhbHVlIHBhcmFtZXRlcnMNCisgICAgQVZEaWN0aW9uYXJ5ICp4ZXZl X3BhcmFtczsNCit9IFhldmVDb250ZXh0Ow0KKw0KKy8qKg0KKyAqIEdldHMgWGV2ZSBwcmUtZGVm aW5lZCBwcmVzZXQNCisgKg0KKyAqIEBwYXJhbSBwcmVzZXQgc3RyaW5nIGRlc2NyaWJpbmcgWGV2 ZSBlbmNvZGVyIHByZXNldCAoZmFzdCwgbWVkaXVtLCBzbG93LCBwbGFjZWJvKQ0KKyAqIEByZXR1 cm4gWEVWRSBwcmUtZGVmaW5lZCBwcm9maWxlIG9uIHN1Y2Nlc3MsIG5lZ2F0aXZlIHZhbHVlIG9u IGZhaWx1cmUNCisgKi8NCitzdGF0aWMgaW50IGdldF9wcmVzZXRfaWQoY29uc3QgY2hhciAqcHJl c2V0KQ0KK3sNCisgICAgaWYoKCFzdHJjbXAocHJlc2V0LCAiZmFzdCIpKSkNCisgICAgICAgIHJl dHVybiBYRVZFX1BSRVNFVF9GQVNUOw0KKyAgICBlbHNlIGlmICghc3RyY21wKHByZXNldCwgIm1l ZGl1bSIpKQ0KKyAgICAgICAgcmV0dXJuIFhFVkVfUFJFU0VUX01FRElVTTsNCisgICAgZWxzZSBp ZiAoIXN0cmNtcChwcmVzZXQsICJzbG93IikpDQorICAgICAgICByZXR1cm4gWEVWRV9QUkVTRVRf U0xPVzsNCisgICAgZWxzZSBpZiAoIXN0cmNtcChwcmVzZXQsICJwbGFjZWJvIikpDQorICAgICAg ICByZXR1cm4gWEVWRV9QUkVTRVRfUExBQ0VCTzsNCisgICAgZWxzZQ0KKyAgICAgICAgcmV0dXJu IEFWRVJST1IoRUlOVkFMKTsNCit9DQorDQorLyoqDQorICogR2V0cyBYZXZlIHByZS1kZWZpbmVk IHR1bmUgaWQNCisgKg0KKyAqIEBwYXJhbVtpbl0gdHVuZSBzdHJpbmcgZGVzY3JpYmluZyBYZXZl IGVuY29kZXIgdHVuZSAocHNuciwgemVyb2xhdGVuY3kpDQorICogQHJldHVybiBYRVZFIHByZS1k ZWZpbmVkIHByb2ZpbGUgb24gc3VjY2VzcywgbmVnYXRpdmUgdmFsdWUgb24gZmFpbHVyZQ0KKyAq Lw0KK3N0YXRpYyBpbnQgZ2V0X3R1bmVfaWQoY29uc3QgY2hhciAqdHVuZSkNCit7DQorICAgIGlm KCghc3RyY21wKHR1bmUsICJwc25yIikpKQ0KKyAgICAgICAgcmV0dXJuIFhFVkVfVFVORV9QU05S Ow0KKyAgICBlbHNlIGlmICghc3RyY21wKHR1bmUsICJ6ZXJvbGF0ZW5jeSIpKQ0KKyAgICAgICAg cmV0dXJuIFhFVkVfVFVORV9aRVJPTEFURU5DWTsNCisgICAgZWxzZQ0KKyAgICAgICAgcmV0dXJu IEFWRVJST1IoRUlOVkFMKTsNCit9DQorDQorLyoqDQorICogQ29udmVydCBGRm1wZWcgcGl4ZWwg Zm9ybWF0IChBVlBpeGVsRm9ybWF0KSB0byBYRVZFIHByZS1kZWZpbmVkIGNvbG9yIGZvcm1hdA0K KyAqDQorICogQHBhcmFtW2luXSAgYXZfcGl4X2ZtdCBwaXhlbCBmb3JtYXQgKEBzZWUgaHR0cHM6 Ly9mZm1wZWcub3JnL2RveHlnZW4vdHJ1bmsvcGl4Zm10XzhoLmh0bWwjYTlhOGUzMzVjZjNiZTQ3 MjA0MmJjOWYwY2Y4MGNkNGM1KQ0KKyAqIEBwYXJhbVtvdXRdIHhldmVfY29sX2ZtdCBYRVZFIHBy ZS1kZWZpbmVkIGNvbG9yIGZvcm1hdCAoQHNlZSB4ZXZlLmgpDQorICoNCisgKiBAcmV0dXJuIDAg b24gc3VjY2VzcywgbmVnYXRpdmUgdmFsdWUgb24gZmFpbHVyZQ0KKyAqLw0KK3N0YXRpYyBpbnQg eGV2ZV9jb2xvcl9mbXQoZW51bSBBVlBpeGVsRm9ybWF0IGF2X3BpeF9mbXQsIGludCAqeGV2ZV9j b2xfZm10KQ0KK3sNCisgICAgc3dpdGNoIChhdl9waXhfZm10KSB7DQorICAgIGNhc2UgQVZfUElY X0ZNVF9ZVVY0MjBQOg0KKyAgICAgICAgKnhldmVfY29sX2ZtdCA9IFhFVkVfQ0ZfWUNCQ1I0MjA7 DQorICAgICAgICBicmVhazsNCisgICAgY2FzZSBBVl9QSVhfRk1UX1lVVjQyMFAxMDoNCisgICAg ICAgICp4ZXZlX2NvbF9mbXQgPSBYRVZFX0NGX1lDQkNSNDIwOw0KKyAgICAgICAgYnJlYWs7DQor ICAgIGRlZmF1bHQ6DQorICAgICAgICAqeGV2ZV9jb2xfZm10ID0gWEVWRV9DRl9VTktOT1dOOw0K KyAgICAgICAgcmV0dXJuIEFWRVJST1JfSU5WQUxJRERBVEE7DQorICAgIH0NCisNCisgICAgcmV0 dXJuIDA7DQorfQ0KKw0KKy8qKg0KKyAqIENvbnZlcnQgRkZtcGVnIHBpeGVsIGZvcm1hdCAoQVZQ aXhlbEZvcm1hdCkgaW50byBYRVZFIHByZS1kZWZpbmVkIGNvbG9yIHNwYWNlDQorICoNCisgKiBA cGFyYW1baW5dIHB4X2ZtdCBwaXhlbCBmb3JtYXQgKEBzZWUgaHR0cHM6Ly9mZm1wZWcub3JnL2Rv eHlnZW4vdHJ1bmsvcGl4Zm10XzhoLmh0bWwjYTlhOGUzMzVjZjNiZTQ3MjA0MmJjOWYwY2Y4MGNk NGM1KQ0KKyAqDQorICogQHJldHVybiBYRVZFIHByZS1kZWZpbmVkIGNvbG9yIHNwYWNlIChAc2Vl IHhldmUuaCkgb24gc3VjY2VzcywgWEVWRV9DRl9VTktOT1dOIG9uIGZhaWx1cmUNCisgKi8NCitz dGF0aWMgaW50IHhldmVfY29sb3Jfc3BhY2UoZW51bSBBVlBpeGVsRm9ybWF0IGF2X3BpeF9mbXQp DQorew0KKyAgICAvKiBjb2xvciBzcGFjZSBvZiBpbnB1dCBpbWFnZSAqLw0KKyAgICBpbnQgY3Mg PSBYRVZFX0NGX1VOS05PV047DQorDQorICAgIHN3aXRjaCAoYXZfcGl4X2ZtdCkgew0KKyAgICBj YXNlIEFWX1BJWF9GTVRfWVVWNDIwUDoNCisgICAgICAgIGNzID0gWEVWRV9DU19ZQ0JDUjQyMDsN CisgICAgICAgIGJyZWFrOw0KKyAgICBjYXNlIEFWX1BJWF9GTVRfWVVWNDIwUDEwOg0KKyNpZiBB Vl9IQVZFX0JJR0VORElBTg0KKyAgICAgICAgY3MgPSBYRVZFX0NTX1NFVChYRVZFX0NGX1lDQkNS NDIwLCAxMCwgMSk7DQorI2Vsc2UNCisgICAgICAgIGNzID0gWEVWRV9DU19ZQ0JDUjQyMF8xMExF Ow0KKyNlbmRpZg0KKw0KKyAgICAgICAgYnJlYWs7DQorICAgIGRlZmF1bHQ6DQorICAgICAgICBj cyA9IFhFVkVfQ0ZfVU5LTk9XTjsNCisgICAgICAgIGJyZWFrOw0KKyAgICB9DQorDQorICAgIHJl dHVybiBjczsNCit9DQorDQorc3RhdGljIGludCBrYnBzX3N0cl90b19pbnQoY2hhciAqc3RyKQ0K K3sNCisgICAgaW50IGticHMgPSAwOw0KKyAgICBjaGFyICpzYXZlcHRyID0gTlVMTDsNCisgICAg aWYgKHN0cmNocihzdHIsICdLJykgfHwgc3RyY2hyKHN0ciwgJ2snKSkgew0KKyAgICAgICAgY2hh ciAqdG1wID0gYXZfc3RydG9rKHN0ciwgIktrICIsICZzYXZlcHRyKTsNCisgICAgICAgIGticHMg PSAoaW50KShzdHJ0b2YodG1wLCBOVUxMKSk7DQorICAgIH0gZWxzZSBpZiAoc3RyY2hyKHN0ciwg J00nKSB8fCBzdHJjaHIoc3RyLCAnbScpKSB7DQorICAgICAgICBjaGFyICp0bXAgPSBhdl9zdHJ0 b2soc3RyLCAiTW0gIiwgJnNhdmVwdHIpOw0KKyAgICAgICAga2JwcyA9IChpbnQpKHN0cnRvZih0 bXAsIE5VTEwpICogMTAwMCk7DQorICAgIH0gZWxzZSB7DQorICAgICAgICBrYnBzID0gc3RydG9s KHN0ciwgTlVMTCwgMTApOw0KKyAgICB9DQorDQorICAgIHJldHVybiBrYnBzOw0KK30NCisNCisv KioNCisgKiBQYXJzZSA6IHNlcGFyYXRlZCBsaXN0IG9mIGtleT12YWx1ZSBwYXJhbWV0ZXJzDQor ICoNCisgKiBAcGFyYW1baW5dIGF2Y3R4IGNvbnRleHQgZm9yIGxvZ2dlcg0KKyAqIEBwYXJhbVtp bl0ga2V5DQorICogQHBhcmFtW2luXSB2YWx1ZQ0KKyAqIEBwYXJhbVtvdXRdIGNkc2MgY29udGFp bnMgYWxsIFhldmUgTVBFRy01IEVWQyBlbmNvZGVyIGVuY29kZXIgcGFyYW1ldGVycyB0aGF0DQor ICogICAgICAgICAgICAgICAgICBzaG91bGQgYmUgaW5pdGlhbGl6ZWQgYmVmb3JlIHRoZSBlbmNv ZGVyIGlzIHVzZQ0KKyAqDQorICogQHJldHVybiAwIG9uIHN1Y2Nlc3MsIG5lZ2F0aXZlIHZhbHVl IG9uIGZhaWx1cmUNCisgKi8NCitzdGF0aWMgaW50IHBhcnNlX3hldmVfcGFyYW1zKEFWQ29kZWND b250ZXh0ICphdmN0eCwgY29uc3QgY2hhciAqa2V5LCBjb25zdCBjaGFyICp2YWx1ZSwgWEVWRV9D RFNDKiBjZHNjKQ0KK3sNCisgICAgWGV2ZUNvbnRleHQgKnhlY3R4ID0gTlVMTDsNCisgICAgeGVj dHggPSBhdmN0eC0+cHJpdl9kYXRhOw0KKw0KKyAgICBpZigha2V5KSB7DQorICAgICAgICBhdl9s b2coYXZjdHgsIEFWX0xPR19FUlJPUiwgIkl2YWxpZCBhcmd1bWVudDoga2V5IHN0cmluZyBpcyBO VUxMXG4iKTsNCisgICAgICAgIHJldHVybiBYRVZFX1BBUkFNX0JBRF9WQUxVRTsNCisgICAgfQ0K KyAgICBpZighdmFsdWUpIHsNCisgICAgICAgIGlmIChzdHJjbXAoa2V5LCAiaGFzaCIpID09IDAp IHsNCisgICAgICAgICAgICB4ZWN0eC0+aGFzaCA9IDE7DQorICAgICAgICAgICAgYXZfbG9nKGF2 Y3R4LCBBVl9MT0dfSU5GTywgImVtYmVkZGluZyBzaWduYXR1cmUgaXMgZW5hYmxlZFxuIik7DQor ICAgICAgICB9IGVsc2Ugew0KKyAgICAgICAgICAgIGF2X2xvZyhhdmN0eCwgQVZfTE9HX0VSUk9S LCAiSXZhbGlkIGFyZ3VtZW50OiB2YWx1ZSBzdHJpbmcgaXMgTlVMTFxuIik7DQorICAgICAgICAg ICAgcmV0dXJuIFhFVkVfUEFSQU1fQkFEX1ZBTFVFOw0KKyAgICAgICAgfQ0KKyAgICB9IGVsc2Ug aWYgKHN0cmNtcChrZXksICJ2YnYtYnVmc2l6ZSIpID09IDAgKSB7DQorICAgICAgICBjZHNjLT5w YXJhbS52YnZfYnVmc2l6ZSA9IGticHNfc3RyX3RvX2ludCgoY2hhciAqKXZhbHVlKTsNCisgICAg ICAgIGF2X2xvZyhhdmN0eCwgQVZfTE9HX0lORk8sICJWQlYgYnVmZmVyIHNpemU6ICVka2JpdHNc biIsIGNkc2MtPnBhcmFtLnZidl9idWZzaXplKTsNCisgICAgfSBlbHNlIHsNCisgICAgICAgIGF2 X2xvZyhhdmN0eCwgQVZfTE9HX0VSUk9SLCAiVW5rbm93biB4ZXZlIGNvZGVjIG9wdGlvbjogJXNc biIsIGtleSk7DQorICAgICAgICByZXR1cm4gWEVWRV9QQVJBTV9CQURfTkFNRTsNCisgICAgfQ0K Kw0KKyAgICByZXR1cm4gMDsNCit9DQorDQorLyoqDQorICogVGhlIGZ1bmN0aW9uIHJldHVybnMg YSBwb2ludGVyIHRvIHRoZSBvYmplY3Qgb2YgdGhlIFhFVkVfQ0RTQyB0eXBlLg0KKyAqIFhFVkVf Q0RTQyBjb250YWlucyBhbGwgZW5jb2RlciBwYXJhbWV0ZXJzIHRoYXQgc2hvdWxkIGJlIGluaXRp YWxpemVkIGJlZm9yZSB0aGUgZW5jb2RlciBpcyB1c2VkLg0KKyAqDQorICogVGhlIGZpZWxkIHZh bHVlcyBvZiB0aGUgWEVWRV9DRFNDIHN0cnVjdHVyZSBhcmUgcG9wdWxhdGVkIGJhc2VkIG9uOg0K KyAqIC0gdGhlIGNvcnJlc3BvbmRpbmcgZmllbGQgdmFsdWVzIG9mIHRoZSBBdkNvZGVjQ29uZXR4 dCBzdHJ1Y3R1cmUsDQorICogLSB0aGUgeGV2ZSBlbmNvZGVyIHNwZWNpZmljIG9wdGlvbiB2YWx1 ZXMsDQorICogICAodGhlIGZ1bGwgbGlzdCBvZiBvcHRpb25zIGF2YWlsYWJsZSBmb3IgeGV2ZSBl bmNvZGVyIGlzIGRpc3BsYXllZCBhZnRlciBleGVjdXRpbmcgdGhlIGNvbW1hbmQgLi9mZm1wZWcg LS1oZWxwIGVuY29kZXIgPSBsaWJ4ZXZlKQ0KKyAqIC0gYW5kIHRoZSB4ZXZlIGVuY29kZXIgb3B0 aW9ucyBzcGVjaWZpZWQgYXMgYSBsaXN0IG9mIGtleS12YWx1ZSBwYWlycyBmb2xsb3dpbmcgdGhl IHhldmUtcGFyYW1zIG9wdGlvbg0KKyAqDQorICogVGhlIG9yZGVyIG9mIHByb2Nlc3NpbmcgaW5w dXQgZGF0YSBhbmQgcG9wdWxhdGluZyB0aGUgWEVWRV9DRFNDIHN0cnVjdHVyZQ0KKyAqIDEpIGZp cnN0LCB0aGUgZmllbGRzIG9mIHRoZSBBVkNvZGVjQ29udGV4dCBzdHJ1Y3R1cmUgY29ycmVzcG9u ZGluZyB0byB0aGUgcHJvdmlkZWQgaW5wdXQgb3B0aW9ucyBhcmUgcHJvY2Vzc2VkLA0KKyAqICAg IChpLmUgLXBpeF9mbXQgeXV2NDIwcCAtczp2IDE5MjB4MTA4MCAtciAzMCAtcHJvZmlsZTp2IDAp DQorICogMikgdGhlbiB4ZXZlLXNwZWNpZmljIG9wdGlvbnMgYWRkZWQgYXMgQVZPcHRpb24gdG8g dGhlIHhldmUgQVZDb2RlYyBpbXBsZW1lbnRhdGlvbg0KKyAqICAgIChpLmUgLXRocmVhZHNfY250 IDMgLXByZXNldCAwKQ0KKyAqIDMpIGZpbmFsbHksIHRoZSBvcHRpb25zIHNwZWNpZmllZCBhZnRl ciB0aGUgeGV2ZS1wYXJhbXMgb3B0aW9uIGFzIHRoZSBwYXJhbWV0ZXIgbGlzdCBvZiB0eXBlIGtl eSB2YWx1ZSBhcmUgcHJvY2Vzc2VkDQorICogICAgKGkuZSAteGV2ZS1wYXJhbXMgIm09MjpxPTE3 IikNCisgKg0KKyAqIEtlZXAgaW4gbWluZCB0aGF0LCB0aGVyZSBhcmUgb3B0aW9ucyB0aGF0IGNh biBiZSBzZXQgaW4gZGlmZmVyZW50IHdheXMuDQorICogSW4gdGhpcyBjYXNlLCBwbGVhc2UgZm9s bG93IHRoZSBhYm92ZS1tZW50aW9uZWQgb3JkZXIgb2YgcHJvY2Vzc2luZy4NCisgKiBUaGUgbW9z dCByZWNlbnQgYXNzaWdubWVudHMgb3ZlcndyaXRlIHRoZSBwcmV2aW91cyB2YWx1ZXMuDQorICoN CisgKiBAcGFyYW1baW5dIGF2Y3R4IGNvZGVjIGNvbnRleHQgKEFWQ29kZWNDb250ZXh0KQ0KKyAq IEBwYXJhbVtvdXRdIGNkc2MgY29udGFpbnMgYWxsIFhldmUgTVBFRy01IEVWQyBlbmNvZGVyIGVu Y29kZXIgcGFyYW1ldGVycyB0aGF0IHNob3VsZCBiZSBpbml0aWFsaXplZCBiZWZvcmUgdGhlIGVu Y29kZXIgaXMgdXNlDQorICoNCisgKiBAcmV0dXJuIDAgb24gc3VjY2VzcywgbmVnYXRpdmUgZXJy b3IgY29kZSBvbiBmYWlsdXJlDQorICovDQorc3RhdGljIGludCBnZXRfY29uZihBVkNvZGVjQ29u dGV4dCAqYXZjdHgsIFhFVkVfQ0RTQyAqY2RzYykNCit7DQorICAgIFhldmVDb250ZXh0ICp4ZWN0 eCA9IE5VTEw7DQorICAgIGludCByZXQ7DQorDQorICAgIHhlY3R4ID0gYXZjdHgtPnByaXZfZGF0 YTsNCisgICAgeGVjdHgtPmhhc2ggPSAwOw0KKw0KKyAgICAvKiBpbml0aWFsaXplIHhldmVfcGFy YW0gc3RydWN0IHdpdGggZGVmYXVsdCB2YWx1ZXMgKi8NCisgICAgcmV0ID0geGV2ZV9wYXJhbV9k ZWZhdWx0KCZjZHNjLT5wYXJhbSk7DQorICAgIGlmIChYRVZFX0ZBSUxFRChyZXQpKSB7DQorICAg ICAgICBhdl9sb2coYXZjdHgsIEFWX0xPR19FUlJPUiwgIkNhbm5vdCBzZXRfZGVmYXVsdCBwYXJh bWV0ZXJcbiIpOw0KKyAgICAgICAgcmV0dXJuIEFWRVJST1JfRVhURVJOQUw7DQorICAgIH0NCisN CisgICAgLyogcmVhZCBvcHRpb25zIGZyb20gQVZDb2RlY0NvbnRleHQgKi8NCisgICAgaWYoYXZj dHgtPndpZHRoID4gMCkNCisgICAgICAgIGNkc2MtPnBhcmFtLncgPSB4ZWN0eC0+d2lkdGhfbHVt YSA9IGF2Y3R4LT53aWR0aDsNCisNCisgICAgaWYoYXZjdHgtPmhlaWdodCA+IDApDQorICAgICAg ICBjZHNjLT5wYXJhbS5oID0geGVjdHgtPmhlaWdodF9sdW1hID0gYXZjdHgtPmhlaWdodDsNCisN CisgICAgaWYoYXZjdHgtPmZyYW1lcmF0ZS5udW0gPiAwKSB7DQorICAgICAgICAvLyBmcHMgY2Fu IGJlIGZsb2F0IG51bWJlciwgYnV0IHhldmUgQVBJIGRvZXNuJ3Qgc3VwcG9ydCBpdA0KKyAgICAg ICAgY2RzYy0+cGFyYW0uZnBzID0gKGludCkoKChmbG9hdClhdmN0eC0+ZnJhbWVyYXRlLm51bSAv IGF2Y3R4LT5mcmFtZXJhdGUuZGVuKSArIDAuNSk7DQorICAgIH0NCisNCisgICAgaWYoYXZjdHgt PmdvcF9zaXplID49IDApIHsgLy8gR09QIHNpemUgKGtleS1mcmFtZSBpbnRlcnZhbCkNCisgICAg ICAgIGNkc2MtPnBhcmFtLmtleWludCA9IGF2Y3R4LT5nb3Bfc2l6ZTsgLy8gMDogb25seSBvbmUg SS1mcmFtZSBhdCB0aGUgZmlyc3QgdGltZTsgMTogZXZlcnkgZnJhbWUgaXMgY29kZWQgaW4gSS1m cmFtZQ0KKyAgICB9DQorDQorICAgIGlmIChhdmN0eC0+bWF4X2JfZnJhbWVzID09IDAgfHwgYXZj dHgtPm1heF9iX2ZyYW1lcyA9PSAxIHx8IGF2Y3R4LT5tYXhfYl9mcmFtZXMgPT0gMyB8fA0KKyAg ICAgICAgYXZjdHgtPm1heF9iX2ZyYW1lcyA9PSA3IHx8IGF2Y3R4LT5tYXhfYl9mcmFtZXMgPT0g MTUpIHsgLy8gbnVtYmVyIG9mIGItZnJhbWVzDQorICAgICAgICBjZHNjLT5wYXJhbS5iZnJhbWVz ID0gYXZjdHgtPm1heF9iX2ZyYW1lczsNCisgICAgfSBlbHNlIHsNCisgICAgICAgIGF2X2xvZyhh dmN0eCwgQVZfTE9HX0VSUk9SLCAiSW5jb3JyZWN0IHZhbHVlIGZvciBtYXhpbXVtIG51bWJlciBv ZiBCIGZyYW1lczogKCVkKSBcbiINCisgICAgICAgICAgICAgICAiQWNjZXB0YWJsZSB2YWx1ZXMg Zm9yIGJmIG9wdGlvbiAobWF4aW11bSBudW1iZXIgb2YgQiBmcmFtZXMpIGFyZSAwLDEsMyw3IG9y IDE1XG4iLCBhdmN0eC0+bWF4X2JfZnJhbWVzKTsNCisgICAgICAgIHJldHVybiBBVkVSUk9SX0lO VkFMSUREQVRBOw0KKyAgICB9DQorDQorICAgIGlmIChhdmN0eC0+bGV2ZWwgPj0gMCkNCisgICAg ICAgIGNkc2MtPnBhcmFtLmxldmVsX2lkYyA9IGF2Y3R4LT5sZXZlbDsNCisNCisgICAgaWYgKGF2 Y3R4LT5yY19idWZmZXJfc2l6ZSA+IDApIHsgLy8gVkJWIGJ1ZiBzaXplDQorICAgICAgICBjZHNj LT5wYXJhbS52YnZfYnVmc2l6ZSA9IChpbnQpKGF2Y3R4LT5yY19idWZmZXJfc2l6ZSAvIDEwMDAp Ow0KKyAgICB9DQorDQorICAgIC8vIHJjX3R5cGU6ICBSYXRlIGNvbnRyb2wgdHlwZSBbIDAoQ1FQ KSAvIDEoQUJSKSAvIDIoQ1JGKSBdDQorICAgIGlmIChhdmN0eC0+Yml0X3JhdGUgPiAwKSB7DQor ICAgICAgICBpZiAoYXZjdHgtPmJpdF9yYXRlIC8gMTAwMCA+IElOVF9NQVggfHwgYXZjdHgtPnJj X21heF9yYXRlIC8gMTAwMCA+IElOVF9NQVgpIHsNCisgICAgICAgICAgICBhdl9sb2coYXZjdHgs IEFWX0xPR19FUlJPUiwgIk5vdCBzdXBwb3J0ZWQgYml0cmF0ZSBiaXRfcmF0ZSBhbmQgcmNfbWF4 X3JhdGUgPiAlZDAwMFxuIiwgSU5UX01BWCk7DQorICAgICAgICAgICAgcmV0dXJuIEFWRVJST1Jf SU5WQUxJRERBVEE7DQorICAgICAgICB9DQorICAgICAgICBjZHNjLT5wYXJhbS5iaXRyYXRlID0g KGludCkoYXZjdHgtPmJpdF9yYXRlIC8gMTAwMCk7DQorICAgICAgICBjZHNjLT5wYXJhbS5yY190 eXBlID0gWEVWRV9SQ19BQlI7DQorICAgIH0NCisNCisgICAgaWYgKHhlY3R4LT5vcF9jcmYgPj0g MCkgew0KKyAgICAgICAgY2RzYy0+cGFyYW0uY3JmID0geGVjdHgtPm9wX2NyZjsNCisgICAgICAg IGNkc2MtPnBhcmFtLnJjX3R5cGUgPSBYRVZFX1JDX0NSRjsNCisgICAgfQ0KKw0KKyAgICBpZihh dmN0eC0+dGhyZWFkX2NvdW50IDw9IDApIHsNCisgICAgICAgIGludCBjcHVfY291bnQgPSBhdl9j cHVfY291bnQoKTsNCisgICAgICAgIGNkc2MtPnBhcmFtLnRocmVhZHMgPSAoY3B1X2NvdW50IDwg WEVWRV9NQVhfVEhSRUFEUykgPyBjcHVfY291bnQgOiBYRVZFX01BWF9USFJFQURTOw0KKyAgICB9 IGVsc2UgaWYoYXZjdHgtPnRocmVhZF9jb3VudCA+IFhFVkVfTUFYX1RIUkVBRFMpDQorICAgICAg ICBjZHNjLT5wYXJhbS50aHJlYWRzID0gWEVWRV9NQVhfVEhSRUFEUzsNCisgICAgZWxzZQ0KKyAg ICAgICAgY2RzYy0+cGFyYW0udGhyZWFkcyA9IGF2Y3R4LT50aHJlYWRfY291bnQ7DQorDQorDQor ICAgIHhldmVfY29sb3JfZm10KGF2Y3R4LT5waXhfZm10LCAmeGVjdHgtPmNvbG9yX2Zvcm1hdCk7 DQorDQorI2lmIEFWX0hBVkVfQklHRU5ESUFODQorICAgIGNkc2MtPnBhcmFtLmNzID0gWEVWRV9D U19TRVQoeGVjdHgtPmNvbG9yX2Zvcm1hdCwgY2RzYy0+cGFyYW0uY29kZWNfYml0X2RlcHRoLCAx KTsNCisjZWxzZQ0KKyAgICBjZHNjLT5wYXJhbS5jcyA9IFhFVkVfQ1NfU0VUKHhlY3R4LT5jb2xv cl9mb3JtYXQsIGNkc2MtPnBhcmFtLmNvZGVjX2JpdF9kZXB0aCwgMCk7DQorI2VuZGlmDQorDQor ICAgIGNkc2MtPm1heF9ic19idWZfc2l6ZSA9IE1BWF9CU19CVUY7DQorDQorICAgIGlmKGF2Y3R4 LT5wcm9maWxlID09IEZGX1BST0ZJTEVfRVZDX0JBU0VMSU5FKQ0KKyAgICAgICAgeGVjdHgtPnBy b2ZpbGVfaWQgPSBYRVZFX1BST0ZJTEVfQkFTRUxJTkU7DQorICAgIGVsc2UgaWYoYXZjdHgtPnBy b2ZpbGUgPT0gRkZfUFJPRklMRV9FVkNfTUFJTikNCisgICAgICAgIHhlY3R4LT5wcm9maWxlX2lk ID0gWEVWRV9QUk9GSUxFX01BSU47DQorICAgIGVsc2Ugew0KKyAgICAgICAgYXZfbG9nKGF2Y3R4 LCBBVl9MT0dfRVJST1IsICJVbmtub3duIGVuY29kZXIgcHJvZmlsZSAoJWQpXG4iDQorICAgICAg ICAgICAgICAgIkFjY2VwdGFibGUgdmFsdWVzIGZvciBwcm9maWxlIG9wdGlvbiBhcmUgMCBhbmQg MSAoMDogYmFzZWxpbmUgcHJvZmlsZTsgMTogbWFpbiBwcm9maWxlKVxuIiwgYXZjdHgtPnByb2Zp bGUpOw0KKyAgICAgICAgcmV0dXJuIEFWRVJST1JfSU5WQUxJRERBVEE7DQorICAgIH0NCisNCisg ICAgaWYgKHhlY3R4LT5vcF9wcmVzZXQpIHsgLy8gcHJlc2V0DQorICAgICAgICB4ZWN0eC0+cHJl c2V0X2lkID0gZ2V0X3ByZXNldF9pZCh4ZWN0eC0+b3BfcHJlc2V0KTsNCisgICAgfQ0KKw0KKyAg ICBpZiAoeGVjdHgtPm9wX3R1bmUpIHsgLy8gdHVuZQ0KKyAgICAgICAgeGVjdHgtPnR1bmVfaWQg PSBnZXRfdHVuZV9pZCh4ZWN0eC0+b3BfdHVuZSk7DQorICAgIH0NCisNCisgICAgcmV0ID0geGV2 ZV9wYXJhbV9wcHQoJmNkc2MtPnBhcmFtLCB4ZWN0eC0+cHJvZmlsZV9pZCwgeGVjdHgtPnByZXNl dF9pZCwgeGVjdHgtPnR1bmVfaWQpOw0KKyAgICBpZiAoWEVWRV9GQUlMRUQocmV0KSkgew0KKyAg ICAgICAgYXZfbG9nKGF2Y3R4LCBBVl9MT0dfRVJST1IsICJDYW5ub3Qgc2V0IHByb2ZpbGUoJWQp LCBwcmVzZXQoJWQpLCB0dW5lKCVkKVxuIiwgeGVjdHgtPnByb2ZpbGVfaWQsIHhlY3R4LT5wcmVz ZXRfaWQsIHhlY3R4LT50dW5lX2lkKTsNCisgICAgICAgIHJldHVybiBBVkVSUk9SX0VYVEVSTkFM Ow0KKyAgICB9DQorDQorICAgIC8qIHBhcnNlIDogc2VwYXJhdGVkIGxpc3Qgb2Yga2V5PXZhbHVl IHBhcmFtZXRlcnMgYW5kIHNldCB2YWx1ZXMgZm9yIGNyZWF0ZWQgZGVzY3JpcHRvciAoWEVWRV9D RFNDKSAqLw0KKyAgICB7DQorICAgICAgICBjb25zdCBBVkRpY3Rpb25hcnlFbnRyeSAqZW4gPSBO VUxMOw0KKw0KKyAgICAgICAgLy8gU3RhcnQgdG8gcGFyc2UgeGV2ZV9wYXJhbXMNCisgICAgICAg IHdoaWxlICgoZW4gPSBhdl9kaWN0X2dldCh4ZWN0eC0+eGV2ZV9wYXJhbXMsICIiLCBlbiwgQVZf RElDVF9JR05PUkVfU1VGRklYKSkpIHsNCisgICAgICAgICAgICBpbnQgcGFyc2VfcmV0ID0gcGFy c2VfeGV2ZV9wYXJhbXMoYXZjdHgsIGVuLT5rZXksIGVuLT52YWx1ZSwgY2RzYyk7DQorDQorICAg ICAgICAgICAgc3dpdGNoIChwYXJzZV9yZXQpIHsNCisgICAgICAgICAgICBjYXNlIFhFVkVfUEFS QU1fQkFEX05BTUU6DQorICAgICAgICAgICAgICAgIGF2X2xvZyhhdmN0eCwgQVZfTE9HX1dBUk5J TkcsICJVbmtub3duIG9wdGlvbjogJXMuXG4iLCBlbi0+a2V5KTsNCisgICAgICAgICAgICAgICAg YnJlYWs7DQorICAgICAgICAgICAgY2FzZSBYRVZFX1BBUkFNX0JBRF9WQUxVRToNCisgICAgICAg ICAgICAgICAgYXZfbG9nKGF2Y3R4LCBBVl9MT0dfV0FSTklORywgIkludmFsaWQgdmFsdWUgZm9y ICVzOiAlcy5cbiIsIGVuLT5rZXksIGVuLT52YWx1ZSk7DQorICAgICAgICAgICAgICAgIGJyZWFr Ow0KKyAgICAgICAgICAgIGRlZmF1bHQ6DQorICAgICAgICAgICAgICAgIGJyZWFrOw0KKyAgICAg ICAgICAgIH0NCisgICAgICAgIH0NCisgICAgfQ0KKw0KKyAgICByZXR1cm4gMDsNCit9DQorDQor LyoqDQorICogU2V0IFhFVkVfQ0ZHX1NFVF9VU0VfUElDX1NJR05BVFVSRSBmb3IgZW5jb2Rlcg0K KyAqDQorICogQHBhcmFtW2luXSBsb2dnZXIgY29udGV4dA0KKyAqIEBwYXJhbVtpbl0gaWQgWEVW RSBlbmNvZGVjIGluc3RhbmNlIGlkZW50aWZpZXINCisgKiBAcGFyYW1baW5dIGN0eCB0aGUgc3Ry dWN0dXJlIHN0b3JlcyBhbGwgdGhlIHN0YXRlcyBhc3NvY2lhdGVkIHdpdGggdGhlIGluc3RhbmNl IG9mIFhldmUgTVBFRy01IEVWQyBlbmNvZGVyDQorICoNCisgKiBAcmV0dXJuIDAgb24gc3VjY2Vz cywgbmVnYXRpdmUgZXJyb3IgY29kZSBvbiBmYWlsdXJlDQorICovDQorc3RhdGljIGludCBzZXRf ZXh0cmFfY29uZmlnKEFWQ29kZWNDb250ZXh0KiBhdmN0eCwgWEVWRSBpZCwgWGV2ZUNvbnRleHQg KmN0eCkNCit7DQorICAgIGludCByZXQsIHNpemUsIHZhbHVlOw0KKyAgICBzaXplID0gNDsNCisN CisgICAgLy8gZW1iZWQgU0VJIG1lc3NhZ2VzIGlkZW50aWZ5aW5nIGVuY29kZXIgcGFyYW1ldGVy cyBhbmQgY29tbWFuZCBsaW5lIGFyZ3VtZW50cw0KKyAgICAvLyAtIDA6IG9mZlxuIg0KKyAgICAv LyAtIDE6IGVtaXQgc2VpIGluZm8iDQorICAgIC8vDQorICAgIC8vIFNFSSAtIFN1cHBsZW1lbnRh bCBlbmhhbmNlbWVudCBpbmZvcm1hdGlvbiBjb250YWlucyBpbmZvcm1hdGlvbg0KKyAgICAvLyB0 aGF0IGlzIG5vdCBuZWNlc3NhcnkgdG8gZGVjb2RlIHRoZSBzYW1wbGVzIG9mIGNvZGVkIHBpY3R1 cmVzIGZyb20gVkNMIE5BTCB1bml0cy4NCisgICAgLy8gU29tZSBTRUkgbWVzc2FnZSBpbmZvcm1h dGlvbiBpcyByZXF1aXJlZCB0byBjaGVjayBiaXRzdHJlYW0gY29uZm9ybWFuY2UNCisgICAgLy8g YW5kIGZvciBvdXRwdXQgdGltaW5nIGRlY29kZXIgY29uZm9ybWFuY2UuDQorICAgIC8vIEBzZWUg SVNPX0lFQ18yMzA5NC0xXzIwMjAgNy40LjMuNQ0KKyAgICAvLyBAc2VlIElTT19JRUNfMjMwOTQt MV8yMDIwIEFubmV4IEQNCisgICAgcmV0ID0geGV2ZV9jb25maWcoaWQsIFhFVkVfQ0ZHX1NFVF9T RUlfQ01ELCAmdmFsdWUsICZzaXplKTsgLy8gc2VpX2NtZF9pbmZvDQorICAgIGlmIChYRVZFX0ZB SUxFRChyZXQpKQ0KKyAgICB7DQorICAgICAgICBhdl9sb2coYXZjdHgsIEFWX0xPR19FUlJPUiwg IkZhaWxlZCB0byBzZXQgY29uZmlnIGZvciBzZWkgY29tbWFuZCBpbmZvIG1lc3NhZ2VzXG4iKTsN CisgICAgICAgIHJldHVybiBBVkVSUk9SX0VYVEVSTkFMOw0KKyAgICB9DQorDQorICAgIGlmKGN0 eC0+aGFzaCkgew0KKyAgICAgICAgdmFsdWUgPSAxOw0KKyAgICAgICAgcmV0ID0geGV2ZV9jb25m aWcoaWQsIFhFVkVfQ0ZHX1NFVF9VU0VfUElDX1NJR05BVFVSRSwgJnZhbHVlLCAmc2l6ZSk7DQor ICAgICAgICBpZihYRVZFX0ZBSUxFRChyZXQpKSB7DQorICAgICAgICAgICAgYXZfbG9nKGF2Y3R4 LCBBVl9MT0dfRVJST1IsICJGYWlsZWQgdG8gc2V0IGNvbmZpZyBmb3IgcGljdHVyZSBzaWduYXR1 cmVcbiIpOw0KKyAgICAgICAgICAgIHJldHVybiBBVkVSUk9SX0VYVEVSTkFMOw0KKyAgICAgICAg fQ0KKyAgICB9DQorDQorICAgIHJldHVybiAwOw0KK30NCisNCisvKioNCisgKiBAYnJpZWYgU3dp dGNoIGVuY29kZXIgdG8gYnVtcGluZyBtb2RlDQorICoNCisgKiBAcGFyYW0gaWQgWEVWRSBlbmNv ZGVjIGluc3RhbmNlIGlkZW50aWZpZXINCisgKiBAcmV0dXJuIDAgb24gc3VjY2VzcywgbmVnYXRp dmUgZXJyb3IgY29kZSBvbiBmYWlsdXJlDQorICovDQorc3RhdGljIGludCBzZXR1cF9idW1waW5n KFhFVkUgaWQpDQorew0KKyAgICBpbnQgdmFsID0gMTsNCisgICAgaW50IHNpemUgPSBzaXplb2Yo aW50KTsNCisgICAgaWYoWEVWRV9GQUlMRUQoeGV2ZV9jb25maWcoaWQsIFhFVkVfQ0ZHX1NFVF9G T1JDRV9PVVQsICh2b2lkICopKCZ2YWwpLCAmc2l6ZSkpKQ0KKyAgICAgICAgcmV0dXJuIEFWRVJS T1JfRVhURVJOQUw7DQorDQorICAgIHJldHVybiAwOw0KK30NCisNCisvKioNCisgKiBAYnJpZWYg SW5pdGlhbGl6ZSBlWHRyYS1mYXN0IEVzc2VudGlhbCBWaWRlbyBFbmNvZGVyIGNvZGVjDQorICog Q3JlYXRlIGFuIGVuY29kZXIgaW5zdGFuY2UgYW5kIGFsbG9jYXRlIGFsbCB0aGUgbmVlZGVkIHJl c291cmNlcw0KKyAqDQorICogQHBhcmFtIGF2Y3R4IGNvZGVjIGNvbnRleHQNCisgKiBAcmV0dXJu IDAgb24gc3VjY2VzcywgbmVnYXRpdmUgZXJyb3IgY29kZSBvbiBmYWlsdXJlDQorICovDQorc3Rh dGljIGF2X2NvbGQgaW50IGxpYnhldmVfaW5pdChBVkNvZGVjQ29udGV4dCAqYXZjdHgpDQorew0K KyAgICBYZXZlQ29udGV4dCAqeGVjdHggPSBhdmN0eC0+cHJpdl9kYXRhOw0KKyAgICB1bnNpZ25l ZCBjaGFyICpic19idWYgPSBOVUxMOw0KKyAgICBpbnQgaTsNCisgICAgaW50IHNoaWZ0X2ggPSAw Ow0KKyAgICBpbnQgc2hpZnRfdiA9IDA7DQorICAgIFhFVkVfSU1HQiAqaW1nYiA9IE5VTEw7DQor ICAgIGludCByZXQgPSAwOw0KKw0KKyAgICBYRVZFX0NEU0MgKmNkc2MgPSAmKHhlY3R4LT5jZHNj KTsNCisNCisgICAgLyogYWxsb2NhdGUgYml0c3RyZWFtIGJ1ZmZlciAqLw0KKyAgICBic19idWYg PSBhdl9tYWxsb2MoTUFYX0JTX0JVRik7DQorICAgIGlmKGJzX2J1ZiA9PSBOVUxMKSB7DQorICAg ICAgICBhdl9sb2coYXZjdHgsIEFWX0xPR19FUlJPUiwgIkNhbm5vdCBhbGxvY2F0ZSBiaXRzdHJl YW0gYnVmZmVyXG4iKTsNCisgICAgICAgIHJldHVybiBBVkVSUk9SKEVOT01FTSk7DQorICAgIH0N CisgICAgeGVjdHgtPmJpdGIuYWRkciA9IGJzX2J1ZjsNCisgICAgeGVjdHgtPmJpdGIuYnNpemUg PSBNQVhfQlNfQlVGOw0KKw0KKyAgICAvKiByZWFkIGNvbmZpZ3VyYXRpb25zIGFuZCBzZXQgdmFs dWVzIGZvciBjcmVhdGVkIGRlc2NyaXB0b3IgKFhFVkVfQ0RTQykgKi8NCisgICAgaWYgKChyZXQg PSBnZXRfY29uZihhdmN0eCwgY2RzYykpICE9IDApIHsNCisgICAgICAgIGF2X2xvZyhhdmN0eCwg QVZfTE9HX0VSUk9SLCAiQ2Fubm90IGdldCBjb25maWd1cmF0aW9uXG4iKTsNCisgICAgICAgIHJl dHVybiBBVkVSUk9SKEVJTlZBTCk7DQorICAgIH0NCisNCisgICAgaWYgKChyZXQgPSB4ZXZlX3Bh cmFtX2NoZWNrKCZjZHNjLT5wYXJhbSkpICE9IDApIHsNCisgICAgICAgIGF2X2xvZyhhdmN0eCwg QVZfTE9HX0VSUk9SLCAiSW52YWxpZCBjb25maWd1cmF0aW9uXG4iKTsNCisgICAgICAgIHJldHVy biBBVkVSUk9SKEVJTlZBTCk7DQorICAgIH0NCisNCisgICAgLyogY3JlYXRlIGVuY29kZXIgKi8N CisgICAgeGVjdHgtPmlkID0geGV2ZV9jcmVhdGUoY2RzYywgTlVMTCk7DQorICAgIGlmKHhlY3R4 LT5pZCA9PSBOVUxMKSB7DQorICAgICAgICBhdl9sb2coYXZjdHgsIEFWX0xPR19FUlJPUiwgIkNh bm5vdCBjcmVhdGUgWEVWRSBlbmNvZGVyXG4iKTsNCisgICAgICAgIHJldHVybiBBVkVSUk9SX0VY VEVSTkFMOw0KKyAgICB9DQorDQorICAgIGlmKChyZXQgPSBzZXRfZXh0cmFfY29uZmlnKGF2Y3R4 LCB4ZWN0eC0+aWQsIHhlY3R4KSkhPTApIHsNCisgICAgICAgIGF2X2xvZyhhdmN0eCwgQVZfTE9H X0VSUk9SLCAiQ2Fubm90IHNldCBleHRyYSBjb25maWd1cmF0aW9uXG4iKTsNCisgICAgICAgIHJl dHVybiBBVkVSUk9SKEVJTlZBTCk7DQorICAgIH0NCisNCisgICAgaWYoKHJldCA9IGF2X3BpeF9m bXRfZ2V0X2Nocm9tYV9zdWJfc2FtcGxlKGF2Y3R4LT5waXhfZm10LCAmc2hpZnRfaCwgJnNoaWZ0 X3YpKSAhPSAwKSB7DQorICAgICAgICBhdl9sb2coYXZjdHgsIEFWX0xPR19FUlJPUiwgIkZhaWxl ZCB0byBnZXQgIGNocm9tYSBzaGlmdFxuIik7DQorICAgICAgICByZXR1cm4gQVZFUlJPUihFSU5W QUwpOw0KKyAgICB9DQorDQorICAgIC8vIFlVViBmb3JtYXQgZXhwbGFuYXRpb24NCisgICAgLy8g c2hpZnRfaCA9PSAxICYmIHNoaWZ0X3YgPT0gMSA6IFlVVjQyMA0KKyAgICAvLyBzaGlmdF9oID09 IDEgJiYgc2hpZnRfdiA9PSAwIDogWVVWNDIyDQorICAgIC8vIHNoaWZ0X2ggPT0gMCAmJiBzaGlm dF92ID09IDAgOiBZVVY0NDQNCisgICAgLy8NCisgICAgeGVjdHgtPndpZHRoX2Nocm9tYSA9IEFW X0NFSUxfUlNISUZUKHhlY3R4LT53aWR0aF9sdW1hLCBzaGlmdF9oKTsNCisgICAgeGVjdHgtPmhl aWdodF9jaHJvbWEgPSBBVl9DRUlMX1JTSElGVCh4ZWN0eC0+aGVpZ2h0X2x1bWEsIHNoaWZ0X3Yp Ow0KKw0KKyAgICAvKiBzZXQgZGVmYXVsdCB2YWx1ZXMgZm9yIGlucHV0IGltYWdlIGJ1ZmZlciAq Lw0KKyAgICBpbWdiID0gJnhlY3R4LT5pbWdiOw0KKyAgICBpbWdiLT5jcyA9IHhldmVfY29sb3Jf c3BhY2UoYXZjdHgtPnBpeF9mbXQpOw0KKyAgICBpbWdiLT5ucCA9IDM7IC8qIG9ubHkgZm9yIHl1 djQyMHAsIHl1djQyMHBsZSAqLw0KKw0KKyAgICBmb3IgKGkgPSAwOyBpIDwgaW1nYi0+bnA7IGkr KykNCisgICAgICAgIGltZ2ItPnhbaV0gPSBpbWdiLT55W2ldID0gMDsNCisNCisgICAgaW1nYi0+ d1swXSA9IGltZ2ItPmF3WzBdID0geGVjdHgtPndpZHRoX2x1bWE7DQorICAgIGltZ2ItPndbMV0g PSBpbWdiLT53WzJdID0gaW1nYi0+YXdbMV0gPSBpbWdiLT5hd1syXSA9IHhlY3R4LT53aWR0aF9j aHJvbWE7DQorICAgIGltZ2ItPmhbMF0gPSBpbWdiLT5haFswXSA9IHhlY3R4LT5oZWlnaHRfbHVt YTsNCisgICAgaW1nYi0+aFsxXSA9IGltZ2ItPmhbMl0gPSBpbWdiLT5haFsxXSA9IGltZ2ItPmFo WzJdID0geGVjdHgtPmhlaWdodF9jaHJvbWE7DQorDQorICAgIHhlY3R4LT5zdGF0ZSA9IFNUQVRF X0VOQ09ESU5HOw0KKw0KKyAgICByZXR1cm4gMDsNCit9DQorDQorLyoqDQorICAqIEVuY29kZSBy YXcgZGF0YSBmcmFtZSBpbnRvIEVWQyBwYWNrZXQNCisgICoNCisgICogQHBhcmFtW2luXSBhdmN0 eCBjb2RlYyBjb250ZXh0DQorICAqIEBwYXJhbVtvdXRdIHBrdCBvdXRwdXQgQVZQYWNrZXQgY29u dGFpbmluZyBlbmNvZGVkIGRhdGENCisgICogQHBhcmFtW2luXSBmcmFtZSBBVkZyYW1lIGNvbnRh aW5pbmcgdGhlIHJhdyBkYXRhIHRvIGJlIGVuY29kZWQNCisgICogQHBhcmFtW291dF0gZ290X3Bh Y2tldCBlbmNvZGVyIHNldHMgdG8gMCBvciAxIHRvIGluZGljYXRlIHRoYXQgYQ0KKyAgKiAgICAg ICAgICAgICAgICAgICAgICAgICBub24tZW1wdHkgcGFja2V0IHdhcyByZXR1cm5lZCBpbiBwa3QN CisgICoNCisgICogQHJldHVybiAwIG9uIHN1Y2Nlc3MsIG5lZ2F0aXZlIGVycm9yIGNvZGUgb24g ZmFpbHVyZQ0KKyAgKi8NCitzdGF0aWMgaW50IGxpYnhldmVfZW5jb2RlKEFWQ29kZWNDb250ZXh0 ICphdmN0eCwgQVZQYWNrZXQgKmF2cGt0LA0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgY29u c3QgQVZGcmFtZSAqZnJhbWUsIGludCAqZ290X3BhY2tldCkNCit7DQorICAgIFhldmVDb250ZXh0 ICp4ZWN0eCA9ICBhdmN0eC0+cHJpdl9kYXRhOw0KKyAgICBpbnQgIHJldCA9IC0xOw0KKyAgICBp bnQgeGV2ZV9jczsNCisNCisgICAgaWYoeGVjdHgtPnN0YXRlID09IFNUQVRFX1NLSVBQSU5HICYm IGZyYW1lICkgew0KKyAgICAgICAgeGVjdHgtPnN0YXRlID0gU1RBVEVfRU5DT0RJTkc7IC8vIEVu dGVyaW5nIGVuY29kaW5nIHByb2Nlc3MNCisgICAgfSBlbHNlIGlmKHhlY3R4LT5zdGF0ZSA9PSBT VEFURV9FTkNPRElORyAmJiBmcmFtZSA9PSBOVUxMKSB7DQorICAgICAgICBpZiAoc2V0dXBfYnVt cGluZyh4ZWN0eC0+aWQpID09IDApDQorICAgICAgICAgICAgeGVjdHgtPnN0YXRlID0gU1RBVEVf QlVNUElORzsgIC8vIEVudGVyaW5nIGJ1bXBpbmcgcHJvY2Vzcw0KKyAgICAgICAgZWxzZSB7DQor ICAgICAgICAgICAgYXZfbG9nKGF2Y3R4LCBBVl9MT0dfRVJST1IsICJGYWlsZWQgdG8gc2V0dXAg YnVtcGluZ1xuIik7DQorICAgICAgICAgICAgeGVjdHgtPnN0YXRlID0gU1RBVEVfU0tJUFBJTkc7 DQorICAgICAgICB9DQorICAgIH0NCisNCisgICAgaWYoeGVjdHgtPnN0YXRlID09IFNUQVRFX0VO Q09ESU5HKSB7DQorICAgICAgICBjb25zdCBBVlBpeEZtdERlc2NyaXB0b3IgKnBpeGVsX2ZtdF9k ZXNjID0gYXZfcGl4X2ZtdF9kZXNjX2dldCAoZnJhbWUtPmZvcm1hdCk7DQorICAgICAgICBpZigh cGl4ZWxfZm10X2Rlc2MpIHsNCisgICAgICAgICAgICBhdl9sb2coYXZjdHgsIEFWX0xPR19FUlJP UiwgIkludmFsaWQgcGl4ZWwgZm9ybWF0IGRlc2NyaXB0b3IgZm9yIHBpeGVsIGZvcm1hdDogJXNc biIsIGF2X2dldF9waXhfZm10X25hbWUoYXZjdHgtPnBpeF9mbXQpKTsNCisgICAgICAgICAgICBy ZXR1cm4gQVZFUlJPUl9JTlZBTElEREFUQTsNCisgICAgICAgIH0NCisNCisgICAgICAgIHhldmVf Y3MgPSB4ZXZlX2NvbG9yX3NwYWNlKGF2Y3R4LT5waXhfZm10KTsNCisgICAgICAgIGlmKHhldmVf Y3MgIT0gWEVWRV9DU19ZQ0JDUjQyMCAmJiB4ZXZlX2NzICE9IFhFVkVfQ1NfWUNCQ1I0MjBfMTBM RSkgew0KKyAgICAgICAgICAgIGF2X2xvZyhhdmN0eCwgQVZfTE9HX0VSUk9SLCAiSW52YWxpZCBw aXhlbCBmb3JtYXQ6ICVzXG4iLCBhdl9nZXRfcGl4X2ZtdF9uYW1lKGF2Y3R4LT5waXhfZm10KSk7 DQorICAgICAgICAgICAgcmV0dXJuIEFWRVJST1JfSU5WQUxJRERBVEE7DQorICAgICAgICB9DQor DQorICAgICAgICB7DQorICAgICAgICAgICAgaW50IGk7DQorICAgICAgICAgICAgWEVWRV9JTUdC ICppbWdiID0gTlVMTDsNCisNCisgICAgICAgICAgICBpbWdiID0gJnhlY3R4LT5pbWdiOw0KKw0K KyAgICAgICAgICAgIGZvciAoaSA9IDA7IGkgPCBpbWdiLT5ucDsgaSsrKSB7DQorICAgICAgICAg ICAgICAgIGltZ2ItPmFbaV0gPSBmcmFtZS0+ZGF0YVtpXTsNCisgICAgICAgICAgICAgICAgaW1n Yi0+c1tpXSA9IGZyYW1lLT5saW5lc2l6ZVtpXTsNCisgICAgICAgICAgICB9DQorDQorICAgICAg ICAgICAgaWYoeGVjdHgtPmlkID09IE5VTEwpIHsNCisgICAgICAgICAgICAgICAgYXZfbG9nKGF2 Y3R4LCBBVl9MT0dfRVJST1IsICJJbnZhbGlkIFhFVkUgZW5jb2RlclxuIik7DQorICAgICAgICAg ICAgICAgIHJldHVybiBBVkVSUk9SX0lOVkFMSUREQVRBOw0KKyAgICAgICAgICAgIH0NCisNCisg ICAgICAgICAgICBpbWdiLT50c1swXSA9IGZyYW1lLT5wdHM7DQorICAgICAgICAgICAgaW1nYi0+ dHNbMV0gPSAwOw0KKw0KKyAgICAgICAgICAgIC8qIHB1c2ggaW1hZ2UgdG8gZW5jb2RlciAqLw0K KyAgICAgICAgICAgIHJldCA9IHhldmVfcHVzaCh4ZWN0eC0+aWQsIGltZ2IpOw0KKyAgICAgICAg ICAgIGlmKFhFVkVfRkFJTEVEKHJldCkpIHsNCisgICAgICAgICAgICAgICAgYXZfbG9nKGF2Y3R4 LCBBVl9MT0dfRVJST1IsICJ4ZXZlX3B1c2goKSBmYWlsZWRcbiIpOw0KKyAgICAgICAgICAgICAg ICByZXR1cm4gQVZFUlJPUl9FWFRFUk5BTDsNCisgICAgICAgICAgICB9DQorICAgICAgICB9DQor ICAgIH0NCisgICAgaWYoeGVjdHgtPnN0YXRlID09IFNUQVRFX0VOQ09ESU5HIHx8IHhlY3R4LT5z dGF0ZSA9PSBTVEFURV9CVU1QSU5HKSB7DQorDQorICAgICAgICAvKiBlbmNvZGluZyAqLw0KKyAg ICAgICAgcmV0ID0geGV2ZV9lbmNvZGUoeGVjdHgtPmlkLCAmKHhlY3R4LT5iaXRiKSwgJih4ZWN0 eC0+c3RhdCkpOw0KKyAgICAgICAgaWYoWEVWRV9GQUlMRUQocmV0KSkgew0KKyAgICAgICAgICAg IGF2X2xvZyhhdmN0eCwgQVZfTE9HX0VSUk9SLCAieGV2ZV9lbmNvZGUoKSBmYWlsZWRcbiIpOw0K KyAgICAgICAgICAgIHJldHVybiBBVkVSUk9SX0VYVEVSTkFMOw0KKyAgICAgICAgfQ0KKw0KKyAg ICAgICAgLyogc3RvcmUgYml0c3RyZWFtICovDQorICAgICAgICBpZiAocmV0ID09IFhFVkVfT0tf T1VUX05PVF9BVkFJTEFCTEUpIHsgLy8gUmV0dXJuIE9LIGJ1dCBwaWN0dXJlIGlzIG5vdCBhdmFp bGFibGUgeWV0DQorICAgICAgICAgICAgKmdvdF9wYWNrZXQgPSAwOw0KKyAgICAgICAgICAgIHJl dHVybiAwOw0KKyAgICAgICAgfSBlbHNlIGlmKHJldCA9PSBYRVZFX09LKSB7DQorICAgICAgICAg ICAgaW50IGF2X3BpY190eXBlOw0KKw0KKyAgICAgICAgICAgIGlmKHhlY3R4LT5zdGF0LndyaXRl ID4gMCkgew0KKw0KKyAgICAgICAgICAgICAgICByZXQgPSBmZl9nZXRfZW5jb2RlX2J1ZmZlcihh dmN0eCwgYXZwa3QsIHhlY3R4LT5zdGF0LndyaXRlLCAwKTsNCisgICAgICAgICAgICAgICAgaWYg KHJldCA8IDApIHsNCisgICAgICAgICAgICAgICAgICAgIHJldHVybiByZXQ7DQorICAgICAgICAg ICAgICAgIH0NCisNCisgICAgICAgICAgICAgICAgbWVtY3B5KGF2cGt0LT5kYXRhLCB4ZWN0eC0+ Yml0Yi5hZGRyLCB4ZWN0eC0+c3RhdC53cml0ZSk7DQorDQorICAgICAgICAgICAgICAgIGF2cGt0 LT5wdHMgPSB4ZWN0eC0+Yml0Yi50c1swXTsNCisgICAgICAgICAgICAgICAgYXZwa3QtPmR0cyA9 IHhlY3R4LT5iaXRiLnRzWzFdOw0KKw0KKyAgICAgICAgICAgICAgICBzd2l0Y2goeGVjdHgtPnN0 YXQuc3R5cGUpIHsNCisgICAgICAgICAgICAgICAgY2FzZSBYRVZFX1NUX0k6DQorICAgICAgICAg ICAgICAgICAgICBhdl9waWNfdHlwZSA9IEFWX1BJQ1RVUkVfVFlQRV9JOw0KKyAgICAgICAgICAg ICAgICAgICAgYXZwa3QtPmZsYWdzIHw9IEFWX1BLVF9GTEFHX0tFWTsNCisgICAgICAgICAgICAg ICAgICAgIGJyZWFrOw0KKyAgICAgICAgICAgICAgICBjYXNlIFhFVkVfU1RfUDoNCisgICAgICAg ICAgICAgICAgICAgIGF2X3BpY190eXBlID0gQVZfUElDVFVSRV9UWVBFX1A7DQorICAgICAgICAg ICAgICAgICAgICBicmVhazsNCisgICAgICAgICAgICAgICAgY2FzZSBYRVZFX1NUX0I6DQorICAg ICAgICAgICAgICAgICAgICBhdl9waWNfdHlwZSA9IEFWX1BJQ1RVUkVfVFlQRV9COw0KKyAgICAg ICAgICAgICAgICAgICAgYnJlYWs7DQorICAgICAgICAgICAgICAgIGNhc2UgWEVWRV9TVF9VTktO T1dOOg0KKyAgICAgICAgICAgICAgICAgICAgYXZfbG9nKGF2Y3R4LCBBVl9MT0dfRVJST1IsICJV bmtub3duIHNsaWNlIHR5cGVcbiIpOw0KKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIEFWRVJS T1JfSU5WQUxJRERBVEE7DQorICAgICAgICAgICAgICAgIH0NCisNCisgICAgICAgICAgICAgICAg ZmZfc2lkZV9kYXRhX3NldF9lbmNvZGVyX3N0YXRzKGF2cGt0LCB4ZWN0eC0+c3RhdC5xcCAqIEZG X1FQMkxBTUJEQSwgTlVMTCwgMCwgYXZfcGljX3R5cGUpOw0KKw0KKyAgICAgICAgICAgICAgICAq Z290X3BhY2tldCA9IDE7DQorICAgICAgICAgICAgfQ0KKyAgICAgICAgfSBlbHNlIGlmIChyZXQg PT0gWEVWRV9PS19OT19NT1JFX0ZSTSkgew0KKyAgICAgICAgICAgIC8vIFJldHVybiBPSyBidXQg bm8gbW9yZSBmcmFtZXMNCisgICAgICAgICAgICByZXR1cm4gMDsNCisgICAgICAgIH0gZWxzZSB7 DQorICAgICAgICAgICAgYXZfbG9nKGF2Y3R4LCBBVl9MT0dfRVJST1IsICJJbnZhbGlkIHJldHVy biB2YWx1ZTogJWRcbiIsIHJldCk7DQorICAgICAgICAgICAgcmV0dXJuIEFWRVJST1JfRVhURVJO QUw7DQorICAgICAgICB9DQorICAgIH0gZWxzZSB7DQorICAgICAgICBhdl9sb2coYXZjdHgsIEFW X0xPR19FUlJPUiwgIlVkZWZpbmVkIGVuY29kZXIgc3RhdGVcbiIpOw0KKyAgICAgICAgcmV0dXJu IEFWRVJST1JfSU5WQUxJRERBVEE7DQorICAgIH0NCisNCisgICAgcmV0dXJuIDA7DQorfQ0KKw0K Ky8qKg0KKyAqIERlc3Ryb3kgdGhlIGVuY29kZXIgYW5kIHJlbGVhc2UgYWxsIHRoZSBhbGxvY2F0 ZWQgcmVzb3VyY2VzDQorICoNCisgKiBAcGFyYW0gYXZjdHggY29kZWMgY29udGV4dA0KKyAqIEBy ZXR1cm4gMCBvbiBzdWNjZXNzLCBuZWdhdGl2ZSBlcnJvciBjb2RlIG9uIGZhaWx1cmUNCisgKi8N CitzdGF0aWMgYXZfY29sZCBpbnQgbGlieGV2ZV9jbG9zZShBVkNvZGVjQ29udGV4dCAqYXZjdHgp DQorew0KKyAgICBYZXZlQ29udGV4dCAqeGVjdHggPSBhdmN0eC0+cHJpdl9kYXRhOw0KKw0KKyAg ICB4ZXZlX2RlbGV0ZSh4ZWN0eC0+aWQpOw0KKw0KKyAgICBhdl9mcmVlKHhlY3R4LT5iaXRiLmFk ZHIpOyAvKiByZWxlYXNlIGJpdHN0cmVhbSBidWZmZXIgKi8NCisNCisgICAgcmV0dXJuIDA7DQor fQ0KKw0KKyNkZWZpbmUgT0ZGU0VUKHgpIG9mZnNldG9mKFhldmVDb250ZXh0LCB4KQ0KKyNkZWZp bmUgVkUgQVZfT1BUX0ZMQUdfVklERU9fUEFSQU0gfCBBVl9PUFRfRkxBR19FTkNPRElOR19QQVJB TQ0KKw0KK3N0YXRpYyBjb25zdCBlbnVtIEFWUGl4ZWxGb3JtYXQgc3VwcG9ydGVkX3BpeGVsX2Zv cm1hdHNbXSA9IHsNCisgICAgQVZfUElYX0ZNVF9ZVVY0MjBQLA0KKyAgICBBVl9QSVhfRk1UX1lV VjQyMFAxMCwNCisgICAgQVZfUElYX0ZNVF9OT05FDQorfTsNCisNCisvLyBFeGFtcGxlIG9mIHVz aW5nOiAuL2ZmbXBlZyAteGV2ZS1wYXJhbXMgIm09MjpxPTE3Ig0KKy8vIENvbnNpZGVyIHVzaW5n IGZvbGxvd2luZyBvcHRpb25zICguL2ZmbXBlZyAtLWhlbHAgZW5jb2Rlcj1saWJ4ZXZlKQ0KKy8v DQorc3RhdGljIGNvbnN0IEFWT3B0aW9uIHhldmVfb3B0aW9uc1tdID0gew0KKyAgICB7ICJwcmVz ZXQiLCAiRW5jb2RpbmcgcHJlc2V0IGZvciBzZXR0aW5nIGVuY29kaW5nIHNwZWVkIFtmYXN0LCBt ZWRpdW0sIHNsb3csIHBsYWNlYm9dIiwgT0ZGU0VUKG9wX3ByZXNldCksIEFWX09QVF9UWVBFX1NU UklORywgeyAuc3RyID0gIm1lZGl1bSIgfSwgMCwgMCwgVkUgfSwNCisgICAgeyAidHVuZSIsICJU dW5laW5nIHBhcmFtZXRlciBmb3Igc3BlY2lhbCBwdXJwb3NlIG9wZXJhdGlvbiBbcHNuciwgemVy b2xhdGVuY3ldIiwgT0ZGU0VUKG9wX3R1bmUpLCBBVl9PUFRfVFlQRV9TVFJJTkcsIHsgMCB9LCAw LCAwLCBWRX0sDQorICAgIHsgInFwIiwgInF1YW50aXphdGlvbiBwYXJhbWV0ZXIgcXAgPDAuLjUx PiBbZGVmYXVsdDogMzJdIiwgT0ZGU0VUKG9wX3FwKSwgQVZfT1BUX1RZUEVfSU5ULCB7IC5pNjQg PSAzMiB9LCAwLCA1MSwgVkUgfSwNCisgICAgeyAiY3JmIiwgImNvbnN0YW50IHJhdGUgZmFjdG9y IDwtMS4uNTE+IFtkZWZhdWx0OiAzMl0iLCBPRkZTRVQob3BfY3JmKSwgQVZfT1BUX1RZUEVfSU5U LCB7IC5pNjQgPSAtMSB9LCAtMSwgNTEsIFZFIH0sDQorICAgIHsgInhldmUtcGFyYW1zIiwgIm92 ZXJyaWRlIHRoZSB4ZXZlIGNvbmZpZ3VyYXRpb24gdXNpbmcgYSA6IHNlcGFyYXRlZCBsaXN0IG9m IGtleT12YWx1ZSBwYXJhbWV0ZXJzIiwgT0ZGU0VUKHhldmVfcGFyYW1zKSwgQVZfT1BUX1RZUEVf RElDVCwgICB7IDAgfSwgMCwgMCwgVkUgfSwNCisgICAgeyBOVUxMIH0NCit9Ow0KKw0KK3N0YXRp YyBjb25zdCBBVkNsYXNzIHhldmVfY2xhc3MgPSB7DQorICAgIC5jbGFzc19uYW1lID0gImxpYnhl dmUiLA0KKyAgICAuaXRlbV9uYW1lICA9IGF2X2RlZmF1bHRfaXRlbV9uYW1lLA0KKyAgICAub3B0 aW9uICAgICA9IHhldmVfb3B0aW9ucywNCisgICAgLnZlcnNpb24gICAgPSBMSUJBVlVUSUxfVkVS U0lPTl9JTlQsDQorfTsNCisNCisvKioNCisgKiAgbGliYXZjb2RlYyBnZW5lcmljIGdsb2JhbCBv cHRpb25zLCB3aGljaCBjYW4gYmUgc2V0IG9uIGFsbCB0aGUgZW5jb2RlcnMgYW5kIGRlY29kZXJz DQorICogIEBzZWUgaHR0cHM6Ly93d3cuZmZtcGVnLm9yZy9mZm1wZWctY29kZWNzLmh0bWwjQ29k ZWMtT3B0aW9ucw0KKyAqLw0KK3N0YXRpYyBjb25zdCBGRkNvZGVjRGVmYXVsdCB4ZXZlX2RlZmF1 bHRzW10gPSB7DQorICAgIHsgImIiLCAiMCIgfSwgICAgICAgLy8gYml0cmF0ZQ0KKyAgICB7ICJn IiwgIjAiIH0sICAgICAgIC8vIGdvcF9zaXplIChrZXktZnJhbWUgaW50ZXJ2YWwgMDogb25seSBv bmUgSS1mcmFtZSBhdCB0aGUgZmlyc3QgdGltZTsgMTogZXZlcnkgZnJhbWUgaXMgY29kZWQgaW4g SS1mcmFtZSkNCisgICAgeyAiYmYiLCAiMTUifSwgICAgICAvLyBiZnJhbWVzICgwOiBubyBCLWZy YW1lcykNCisgICAgeyAicHJvZmlsZSIsICIwIn0sICAvLyBlbmNvZGVyIGNvZGVjIHByb2ZpbGUg KDA6IGJhc2VsaWU7IDE6IG1haW4pDQorICAgIHsgInRocmVhZHMiLCAiMCJ9LCAgLy8gbnVtYmVy IG9mIHRocmVhZHMgdG8gYmUgdXNlZCAoMDogYXV0b21hdGljYWxseSBzZWxlY3QgdGhlIG51bWJl ciBvZiB0aHJlYWRzIHRvIHNldCkNCisgICAgeyBOVUxMIH0sDQorfTsNCisNCitjb25zdCBGRkNv ZGVjIGZmX2xpYnhldmVfZW5jb2RlciA9IHsNCisgICAgLnAubmFtZSAgICAgICAgICAgICA9ICJs aWJ4ZXZlIiwNCisgICAgLnAubG9uZ19uYW1lICAgICAgICA9IE5VTExfSUZfQ09ORklHX1NNQUxM KCJsaWJ4ZXZlIE1QRUctNSBFVkMiKSwNCisgICAgLnAudHlwZSAgICAgICAgICAgICA9IEFWTUVE SUFfVFlQRV9WSURFTywNCisgICAgLnAuaWQgICAgICAgICAgICAgICA9IEFWX0NPREVDX0lEX0VW QywNCisgICAgLmluaXQgICAgICAgICAgICAgICA9IGxpYnhldmVfaW5pdCwNCisgICAgRkZfQ09E RUNfRU5DT0RFX0NCKGxpYnhldmVfZW5jb2RlKSwNCisgICAgLmNsb3NlICAgICAgICAgICAgICA9 IGxpYnhldmVfY2xvc2UsDQorICAgIC5wcml2X2RhdGFfc2l6ZSAgICAgPSBzaXplb2YoWGV2ZUNv bnRleHQpLA0KKyAgICAucC5wcml2X2NsYXNzICAgICAgID0gJnhldmVfY2xhc3MsDQorICAgIC5k ZWZhdWx0cyAgICAgICAgICAgPSB4ZXZlX2RlZmF1bHRzLA0KKyAgICAucC5jYXBhYmlsaXRpZXMg ICAgID0gRkZfQ09ERUNfQ0FQX0lOSVRfQ0xFQU5VUCB8IEFWX0NPREVDX0NBUF9ERUxBWSB8IEFW X0NPREVDX0NBUF9BVVRPX1RIUkVBRFMgfCBBVl9DT0RFQ19DQVBfRFIxLA0KKyAgICAucC53cmFw cGVyX25hbWUgICAgID0gImxpYnhldmUiLA0KKyAgICAucC5waXhfZm10cyAgICAgICAgID0gc3Vw cG9ydGVkX3BpeGVsX2Zvcm1hdHMsDQorfTsNCmRpZmYgLS1naXQgYS9saWJhdmNvZGVjL3BhcnNl cnMuYyBiL2xpYmF2Y29kZWMvcGFyc2Vycy5jDQppbmRleCBiNTkzODg4MzVkLi41NTNmN2VlMjNl IDEwMDY0NA0KLS0tIGEvbGliYXZjb2RlYy9wYXJzZXJzLmMNCisrKyBiL2xpYmF2Y29kZWMvcGFy c2Vycy5jDQpAQCAtNDEsNiArNDEsNyBAQCBleHRlcm4gY29uc3QgQVZDb2RlY1BhcnNlciBmZl9k dmF1ZGlvX3BhcnNlcjsNCiBleHRlcm4gY29uc3QgQVZDb2RlY1BhcnNlciBmZl9kdmJzdWJfcGFy c2VyOw0KIGV4dGVybiBjb25zdCBBVkNvZGVjUGFyc2VyIGZmX2R2ZHN1Yl9wYXJzZXI7DQogZXh0 ZXJuIGNvbnN0IEFWQ29kZWNQYXJzZXIgZmZfZHZkX25hdl9wYXJzZXI7DQorZXh0ZXJuIGNvbnN0 IEFWQ29kZWNQYXJzZXIgZmZfZXZjX3BhcnNlcjsNCiBleHRlcm4gY29uc3QgQVZDb2RlY1BhcnNl ciBmZl9mbGFjX3BhcnNlcjsNCiBleHRlcm4gY29uc3QgQVZDb2RlY1BhcnNlciBmZl9nNzIzXzFf cGFyc2VyOw0KIGV4dGVybiBjb25zdCBBVkNvZGVjUGFyc2VyIGZmX2c3MjlfcGFyc2VyOw0KLS0g DQoyLjE3LjENCg0KDQoKX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX18KZmZtcGVnLWRldmVsIG1haWxpbmcgbGlzdApmZm1wZWctZGV2ZWxAZmZtcGVnLm9yZwpo dHRwczovL2ZmbXBlZy5vcmcvbWFpbG1hbi9saXN0aW5mby9mZm1wZWctZGV2ZWwKClRvIHVuc3Vi c2NyaWJlLCB2aXNpdCBsaW5rIGFib3ZlLCBvciBlbWFpbApmZm1wZWctZGV2ZWwtcmVxdWVzdEBm Zm1wZWcub3JnIHdpdGggc3ViamVjdCAidW5zdWJzY3JpYmUiLgo=