From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from ffbox0-bg.ffmpeg.org (ffbox0-bg.ffmpeg.org [79.124.17.100]) by master.gitmailbox.com (Postfix) with ESMTPS id AD06C4936A for ; Mon, 20 Oct 2025 17:51:50 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=ffmpeg.org; i=@ffmpeg.org; q=dns/txt; s=mail; t=1760982665; h=message-id : to : date : content-type : mime-version : reply-to : subject : list-id : list-archive : list-archive : list-help : list-owner : list-post : list-subscribe : list-unsubscribe : from : cc : from; bh=5WtkXb+OPgYS0OTpgwtre1ocpl9SXu7ZOdQRTEvePas=; b=OCdMGokrdppUUEwd+xrkUJxDj2sGjbcvAQqsX73AaXWOHwqMEaRkDobsaJpP/vg9c2zBV WmkatApzSqnFByyJuYgNY2eg/ftopfcGVmSTZM/SKtFA7X/0PefQONZhDh6pI1k1HjTFxRN XNcA8B9BggHawm75h1kvjV9r1/sJrpCpbNlIgwMQswyd8LR/U/rjD98WVXpsrnAJ5RW0GKe IKZfr5RT8h7XZU3FE0z5OqskHOqI/jJzLxd/f5JmNDOlgxBQUl2MgBRvyzi2IFpIzxxnOml xZ3tJfahGShVVh+sBkHzbJHkbM5oJ3YM5ag/5QDBhkKLbR9j04hWPsQKcTPw== Received: from [172.19.0.2] (unknown [172.19.0.2]) by ffbox0-bg.ffmpeg.org (Postfix) with ESMTP id 096F168F4B6; Mon, 20 Oct 2025 20:51:05 +0300 (EEST) ARC-Seal: i=1; cv=none; a=rsa-sha256; d=ffmpeg.org; s=arc; t=1760982648; b=Nul+LtdOc+PLhmTKu4Y8CGxP93JfjZjpdKAVmyQSkeh/HVIRRmZiG1YvZFdS097l1YYzl 7x5c0KZiyTPfAVmrGJ2UVEfteCfbp7p3UvjQ1Lhcubq+qyfrB5rt1d51oTZhRqdxYDPXz3+ nQhzp+NedOsgp0QI4tkDsM+uTZMIC7FyTzh/wSoD22aRN9NDbcjLMlzP2P7UwLtWAOaoQs1 M32BWt01wQS6HFoQ3R6UaZyGwbaWPzvIBGzo8Z5OHwnTVBlbthndNP0uqHB8p1AB9pug2Xg VdXJS2mXUXWnNlzg05ItR21dlGexTk54Jqy33TX4hPtVLmMypdwVg21tsVLg== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=ffmpeg.org; s=arc; t=1760982648; h=from : sender : reply-to : subject : date : message-id : to : cc : mime-version : content-type : content-transfer-encoding : content-id : content-description : resent-date : resent-from : resent-sender : resent-to : resent-cc : resent-message-id : in-reply-to : references : list-id : list-help : list-unsubscribe : list-subscribe : list-post : list-owner : list-archive; bh=5WtkXb+OPgYS0OTpgwtre1ocpl9SXu7ZOdQRTEvePas=; b=aqzgPe2TdcyXRc5+iKur2OLHk2dhR0kGGevzXOtVd34R3n+cl3qROfTrN8YDLB1d5O4os kB4KxoApdajaoaJ9za9xK4vsRbiDIRno9GDgnnuQB/CFkgPDIh969QbtKvQjgIgvFNpvm0e wYB10vZBRg1WTYpeRHpiO9dUACKqiSpX1uOynkw6W415cvY6rhh0sElQTu/2OUavaDfu+NA 3nsyYQPKOkXCrAvkidkxFDyBRTzJv2fONbJKPX/nbYPASR3wlEbSu7xsMkMqsrZRzPqncrZ 8u2Lx6on9v6Awp3tNKXXsjE1qCyGesiIRji6wNJQ4nqaPAGxZ9/vDUFRphpg== ARC-Authentication-Results: i=1; ffmpeg.org; dkim=fail; arc=none; dmarc=none Authentication-Results: ffmpeg.org; dkim=fail; arc=none (Message is not ARC signed); dmarc=none Received: from glom.nmugroup.com (glom.nmugroup.com [193.183.80.6]) by ffbox0-bg.ffmpeg.org (Postfix) with ESMTPS id B60A668F36E for ; Mon, 20 Oct 2025 20:50:35 +0300 (EEST) Received: from localhost (localhost [127.0.0.1]) by glom.nmugroup.com (Postfix) with ESMTP id 019B2542A0C7 for ; Mon, 20 Oct 2025 19:50:35 +0200 (CEST) Received: from debian.lan (unknown [IPv6:2a00:66c0:a::72c]) (Authenticated sender: git01) by glom.nmugroup.com (Postfix) with ESMTPSA id A10425429F6E for ; Mon, 20 Oct 2025 19:50:34 +0200 (CEST) Message-ID: <23234a7ec4715e7df0c9c4e5b2ad9556a98d6823.camel@haerdin.se> To: FFmpeg development discussions and patches Date: Mon, 20 Oct 2025 19:50:33 +0200 Content-Type: multipart/mixed; boundary="=-n0GCyFEbXToqj0prLmk3" User-Agent: Evolution 3.56.1-1 MIME-Version: 1.0 Message-ID-Hash: WYBUJCOXUGIPIAXLK3VMYKJ7WNUNWO3M X-Message-ID-Hash: WYBUJCOXUGIPIAXLK3VMYKJ7WNUNWO3M X-MailFrom: SRS1=tuH2=nmugroup.com==JmEt=45=haerdin.se=git@ffmpeg.org X-Mailman-Rule-Misses: dmarc-mitigation; no-senders; approved; loop; banned-address; header-match-ffmpeg-devel.ffmpeg.org-0; header-match-ffmpeg-devel.ffmpeg.org-1; header-match-ffmpeg-devel.ffmpeg.org-2; header-match-ffmpeg-devel.ffmpeg.org-3; emergency; member-moderation; nonmember-moderation; administrivia; implicit-dest; max-recipients; max-size; news-moderation; no-subject; digests; suspicious-header X-Mailman-Version: 3.3.10 Precedence: list Reply-To: FFmpeg development discussions and patches Subject: [FFmpeg-devel] [RFC] C++ List-Id: FFmpeg development discussions and patches Archived-At: Archived-At: List-Archive: List-Archive: List-Help: List-Owner: List-Post: List-Subscribe: List-Unsubscribe: From: =?utf-8?q?Tomas_H=C3=A4rdin_via_ffmpeg-devel?= Cc: Tomas =?ISO-8859-1?Q?H=E4rdin?= Archived-At: List-Archive: List-Post: --=-n0GCyFEbXToqj0prLmk3 Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: quoted-printable Hi I'm writing this email to get a feel for how everyone feels about making more use of C++ in the codebase. I am only proposing using C++ *internally*, and only where it makes sense. I am not suggesting a "move" to C++, merely using features already present in the compilers we target: gcc, clang and cl. The impedance mismatch should therefore be small, and any missing compiler features should be caught by FATE. Currently C++ use is quite limited in this project, but I see no reason why this should be the case. doc/faq.texi makes mention of Linux' reasons for avoiding C++, but FFmpeg is not Linux. For us ABI stability and performance are the biggest issues. Stability can be ensured by sticking with C for the API and disabling exceptions (or marking relevant functions as noexcept). Performance may benefit in some cases. This would have to be tested. Again, the most performance critical parts can be kept as C (and asm). My main motivation is to be able to use STL, which would simplify string handling and memory management, and give us access to its data structures. Manual memory management has its place, especially in lavc. In lavf less so. RAII would do wonders in de-gotofying error handling. Features like std::filesystem, std::chrono, std::thread etc abstract away many OS particularities. Thorough STL-ification would render parts of lavu obsolete. avstring.*, bprintf.* and tree.* come to mind. This would have security benefits. Another reason is stronger typing, which tends to reveal bugs. I've targeted mxfdec.c as a proof-of-concept. See attached patch, which compiles and passes fate-mxf. It is partly inspired by our decklink binding. Particularly notable is the ability to resolve MXF structs into MXFMetadataSetType at compile time, as well as resolving strong references in a more type safe manner. This revealed an issue in mxf_parse_structural_metadata() where MXFStructuralComponent* was blindly cast to MXFTimecodeComponent*, which could cause code further down to interpret the latter as the former, which is a not so obvious bug that wouldn't be caught without this stronger typing. I've not made use of STL in the attached patch because that requires linking with libstdc++, which I couldn't be arsed to do. One practical example where STL would come in handy is for my work on segmented indexes. Specifically std::map and std::lower_bound. Various tables in mxfdec.c could also be targets for turning into std::map or even std::unordered_map. A quick experiment with callgrind suggests mxf_read_header() might be speed up slightly with such a change. Details like which version of C++ to use could be agreed on later if people feel this is a good idea. Personally I favor using the most recent version that our compiler suite supports. Lately I've been using C++20 with icx (Intel's compiler) which has been quite pleasant. /Tomas --=-n0GCyFEbXToqj0prLmk3 Content-Disposition: attachment; filename="0001-lavf-mxfdec-C-ify.patch" Content-Type: text/x-patch; name="0001-lavf-mxfdec-C-ify.patch"; charset="ISO-8859-1" Content-Transfer-Encoding: base64 RnJvbSBjNGI0NTMyMjg4OTA0YmFjYWZhOTI1M2YwZWJhYzRkYTI4NWJiYzU5IE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiA9P1VURi04P3E/VG9tYXM9MjBIPUMzPUE0cmRpbj89IDxnaXRA aGFlcmRpbi5zZT4KRGF0ZTogTW9uLCAyMCBPY3QgMjAyNSAxMToyOTowNyArMDIwMApTdWJqZWN0 OiBbUEFUQ0hdIGxhdmYvbXhmZGVjOiBDKytpZnkKCi0tLQogbGliYXZmb3JtYXQvTWFrZWZpbGUg ICAgICAgICAgICAgICAgIHwgICAyICstCiBsaWJhdmZvcm1hdC9teGYuaCAgICAgICAgICAgICAg ICAgICAgfCAgIDEgKwogbGliYXZmb3JtYXQve214ZmRlYy5jID0+IG14ZmRlYy5jcHB9IHwgNDE5 ICsrKysrKysrKysrKystLS0tLS0tLS0tLS0tLQogbGliYXZmb3JtYXQvbXhmZGVjLmggICAgICAg ICAgICAgICAgIHwgIDgyICsrKysrKwogbGliYXZmb3JtYXQvbXhmZGVjX2MuYyAgICAgICAgICAg ICAgIHwgIDUzICsrKysKIDUgZmlsZXMgY2hhbmdlZCwgMzM0IGluc2VydGlvbnMoKyksIDIyMyBk ZWxldGlvbnMoLSkKIHJlbmFtZSBsaWJhdmZvcm1hdC97bXhmZGVjLmMgPT4gbXhmZGVjLmNwcH0g KDkzJSkKIGNyZWF0ZSBtb2RlIDEwMDY0NCBsaWJhdmZvcm1hdC9teGZkZWMuaAogY3JlYXRlIG1v ZGUgMTAwNjQ0IGxpYmF2Zm9ybWF0L214ZmRlY19jLmMKCmRpZmYgLS1naXQgYS9saWJhdmZvcm1h dC9NYWtlZmlsZSBiL2xpYmF2Zm9ybWF0L01ha2VmaWxlCmluZGV4IGVkOTM0NThmMDMuLmZlMTk1 ZTk1YjMgMTAwNjQ0Ci0tLSBhL2xpYmF2Zm9ybWF0L01ha2VmaWxlCisrKyBiL2xpYmF2Zm9ybWF0 L01ha2VmaWxlCkBAIC00MTMsNyArNDEzLDcgQEAgT0JKUy0kKENPTkZJR19NVFZfREVNVVhFUikg ICAgICAgICAgICAgICArPSBtdHYubwogT0JKUy0kKENPTkZJR19NVVNYX0RFTVVYRVIpICAgICAg ICAgICAgICArPSBtdXN4Lm8KIE9CSlMtJChDT05GSUdfTVZfREVNVVhFUikgICAgICAgICAgICAg ICAgKz0gbXZkZWMubwogT0JKUy0kKENPTkZJR19NVklfREVNVVhFUikgICAgICAgICAgICAgICAr PSBtdmkubwotT0JKUy0kKENPTkZJR19NWEZfREVNVVhFUikgICAgICAgICAgICAgICArPSBteGZk ZWMubyBteGYubyBhdmxhbmd1YWdlLm8KK09CSlMtJChDT05GSUdfTVhGX0RFTVVYRVIpICAgICAg ICAgICAgICAgKz0gbXhmZGVjLm8gbXhmZGVjX2MubyBteGYubyBhdmxhbmd1YWdlLm8KIE9CSlMt JChDT05GSUdfTVhGX01VWEVSKSAgICAgICAgICAgICAgICAgKz0gbXhmZW5jLm8gbXhmLm8KIE9C SlMtJChDT05GSUdfTVhHX0RFTVVYRVIpICAgICAgICAgICAgICAgKz0gbXhnLm8KIE9CSlMtJChD T05GSUdfTkNfREVNVVhFUikgICAgICAgICAgICAgICAgKz0gbmNkZWMubwpkaWZmIC0tZ2l0IGEv bGliYXZmb3JtYXQvbXhmLmggYi9saWJhdmZvcm1hdC9teGYuaAppbmRleCA2NzM3MDNmNmJjLi41 NDc2MWM1YTQzIDEwMDY0NAotLS0gYS9saWJhdmZvcm1hdC9teGYuaAorKysgYi9saWJhdmZvcm1h dC9teGYuaApAQCAtNTUsNiArNTUsNyBAQCBlbnVtIE1YRk1ldGFkYXRhU2V0VHlwZSB7CiAgICAg R3JvdXBPZlNvdW5kZmllbGRHcm91cHNMYWJlbFN1YkRlc2NyaXB0b3IsCiAgICAgRkZWMVN1YkRl c2NyaXB0b3IsCiAgICAgSlBFRzIwMDBTdWJEZXNjcmlwdG9yLAorICAgIFBhcnRpdGlvbiwKICAg ICBNZXRhZGF0YVNldFR5cGVOQgogfTsKIApkaWZmIC0tZ2l0IGEvbGliYXZmb3JtYXQvbXhmZGVj LmMgYi9saWJhdmZvcm1hdC9teGZkZWMuY3BwCnNpbWlsYXJpdHkgaW5kZXggOTMlCnJlbmFtZSBm cm9tIGxpYmF2Zm9ybWF0L214ZmRlYy5jCnJlbmFtZSB0byBsaWJhdmZvcm1hdC9teGZkZWMuY3Bw CmluZGV4IGRjNWRmZjY1MWEuLmI2ZWI2M2ZhOWIgMTAwNjQ0Ci0tLSBhL2xpYmF2Zm9ybWF0L214 ZmRlYy5jCisrKyBiL2xpYmF2Zm9ybWF0L214ZmRlYy5jcHAKQEAgLTQ3LDYgKzQ3LDcgQEAKICNp bmNsdWRlIDxpbnR0eXBlcy5oPgogI2luY2x1ZGUgPHRpbWUuaD4KIAorZXh0ZXJuICJDIiB7CiAj aW5jbHVkZSAibGliYXZ1dGlsL2Flcy5oIgogI2luY2x1ZGUgImxpYmF2dXRpbC9hdnN0cmluZy5o IgogI2luY2x1ZGUgImxpYmF2dXRpbC9tYXN0ZXJpbmdfZGlzcGxheV9tZXRhZGF0YS5oIgpAQCAt NjUsNyArNjYsOCBAQAogI2luY2x1ZGUgImF2aW9faW50ZXJuYWwuaCIKICNpbmNsdWRlICJkZW11 eC5oIgogI2luY2x1ZGUgImludGVybmFsLmgiCi0jaW5jbHVkZSAibXhmLmgiCisjaW5jbHVkZSAi bXhmZGVjLmgiCit9CiAKICNkZWZpbmUgTVhGX01BWF9DSFVOS19TSVpFICgzMiA8PCAyMCkKICNk ZWZpbmUgUlVOX0lOX01BWCAoNjU1MzUrMSkgIC8vIFMzNzdtLTIwMDQgc2VjdGlvbiA1LjUgYW5k IFMzNzctMS0yMDA5IHNlY3Rpb24gNi41LCB0aGUgKzEgaXMgdG8gYmUgc2xpZ2h0bHkgbW9yZSB0 b2xlcmFudApAQCAtNzYsMjAgKzc4LDYgQEAgdHlwZWRlZiBlbnVtIHsKICAgICBGb290ZXIKIH0g TVhGUGFydGl0aW9uVHlwZTsKIAotdHlwZWRlZiBlbnVtIHsKLSAgICBPUDFhID0gMSwKLSAgICBP UDFiLAotICAgIE9QMWMsCi0gICAgT1AyYSwKLSAgICBPUDJiLAotICAgIE9QMmMsCi0gICAgT1Az YSwKLSAgICBPUDNiLAotICAgIE9QM2MsCi0gICAgT1BBdG9tLAotICAgIE9QU09OWU9wdCwgIC8q IEZBVEUgc2FtcGxlLCB2aW9sYXRlcyB0aGUgc3BlYyBpbiBwbGFjZXMgKi8KLX0gTVhGT1A7Ci0K IHR5cGVkZWYgZW51bSB7CiAgICAgVW5rbm93bldyYXBwZWQgPSAwLAogICAgIEZyYW1lV3JhcHBl ZCwKQEAgLTExMiw2ICsxMDAsOCBAQCB0eXBlZGVmIHN0cnVjdCBNWEZQYXJ0aXRpb24gewogICAg IGludDY0X3QgcGFja19vZnM7ICAgICAgICAgICAgICAgLy8vPCBhYnNvbHV0ZSBvZmZzZXQgb2Yg cGFjayBpbiBmaWxlLCBpbmNsdWRpbmcgcnVuLWluCiAgICAgaW50NjRfdCBib2R5X29mZnNldDsK ICAgICBLTFZQYWNrZXQgZmlyc3RfZXNzZW5jZV9rbHY7CisKKyAgICBzdGF0aWMgY29uc3RleHBy IE1YRk1ldGFkYXRhU2V0VHlwZSBtZXRhZGF0YV9zZXRfdHlwZSA9IFBhcnRpdGlvbjsKIH0gTVhG UGFydGl0aW9uOwogCiB0eXBlZGVmIHN0cnVjdCBNWEZNZXRhZGF0YVNldCB7CkBAIC0xMTksMTQg KzEwOSwxMSBAQCB0eXBlZGVmIHN0cnVjdCBNWEZNZXRhZGF0YVNldCB7CiAgICAgdWludDY0X3Qg cGFydGl0aW9uX3Njb3JlOwogfSBNWEZNZXRhZGF0YVNldDsKIAotdHlwZWRlZiBzdHJ1Y3QgTVhG TWV0YWRhdGFTZXRHcm91cCB7Ci0gICAgTVhGTWV0YWRhdGFTZXQgKiptZXRhZGF0YV9zZXRzOwot ICAgIGludCBtZXRhZGF0YV9zZXRzX2NvdW50OwotfSBNWEZNZXRhZGF0YVNldEdyb3VwOwotCiB0 eXBlZGVmIHN0cnVjdCBNWEZDcnlwdG9Db250ZXh0IHsKICAgICBNWEZNZXRhZGF0YVNldCBtZXRh OwogICAgIFVJRCBzb3VyY2VfY29udGFpbmVyX3VsOworCisgICAgc3RhdGljIGNvbnN0ZXhwciBN WEZNZXRhZGF0YVNldFR5cGUgbWV0YWRhdGFfc2V0X3R5cGUgPSBDcnlwdG9Db250ZXh0OwogfSBN WEZDcnlwdG9Db250ZXh0OwogCiB0eXBlZGVmIHN0cnVjdCBNWEZTdHJ1Y3R1cmFsQ29tcG9uZW50 IHsKQEAgLTEzOSw2ICsxMjYsMTAgQEAgdHlwZWRlZiBzdHJ1Y3QgTVhGU3RydWN0dXJhbENvbXBv bmVudCB7CiAgICAgaW50IHNvdXJjZV90cmFja19pZDsKIH0gTVhGU3RydWN0dXJhbENvbXBvbmVu dDsKIAorc3RydWN0IE1YRlNvdXJjZUNsaXAgOiBwdWJsaWMgTVhGU3RydWN0dXJhbENvbXBvbmVu dCB7CisgICAgc3RhdGljIGNvbnN0ZXhwciBNWEZNZXRhZGF0YVNldFR5cGUgbWV0YWRhdGFfc2V0 X3R5cGUgPSBTb3VyY2VDbGlwOworfTsKKwogdHlwZWRlZiBzdHJ1Y3QgTVhGU2VxdWVuY2Ugewog ICAgIE1YRk1ldGFkYXRhU2V0IG1ldGE7CiAgICAgVUlEIGRhdGFfZGVmaW5pdGlvbl91bDsKQEAg LTE0Niw2ICsxMzcsOCBAQCB0eXBlZGVmIHN0cnVjdCBNWEZTZXF1ZW5jZSB7CiAgICAgaW50IHN0 cnVjdHVyYWxfY29tcG9uZW50c19jb3VudDsKICAgICBpbnQ2NF90IGR1cmF0aW9uOwogICAgIHVp bnQ4X3Qgb3JpZ2luOworCisgICAgc3RhdGljIGNvbnN0ZXhwciBNWEZNZXRhZGF0YVNldFR5cGUg bWV0YWRhdGFfc2V0X3R5cGUgPSBTZXF1ZW5jZTsKIH0gTVhGU2VxdWVuY2U7CiAKIHR5cGVkZWYg c3RydWN0IE1YRlRpbWVjb2RlQ29tcG9uZW50IHsKQEAgLTE1NCwyNyArMTQ3LDM1IEBAIHR5cGVk ZWYgc3RydWN0IE1YRlRpbWVjb2RlQ29tcG9uZW50IHsKICAgICBpbnQgc3RhcnRfZnJhbWU7CiAg ICAgc3RydWN0IEFWUmF0aW9uYWwgcmF0ZTsKICAgICBBVlRpbWVjb2RlIHRjOworCisgICAgc3Rh dGljIGNvbnN0ZXhwciBNWEZNZXRhZGF0YVNldFR5cGUgbWV0YWRhdGFfc2V0X3R5cGUgPSBUaW1l Y29kZUNvbXBvbmVudDsKIH0gTVhGVGltZWNvZGVDb21wb25lbnQ7CiAKLXR5cGVkZWYgc3RydWN0 IHsKK3N0cnVjdCBNWEZQdWxsZG93bkNvbXBvbmVudCB7CiAgICAgTVhGTWV0YWRhdGFTZXQgbWV0 YTsKICAgICBVSUQgaW5wdXRfc2VnbWVudF9yZWY7Ci19IE1YRlB1bGxkb3duQ29tcG9uZW50Owog Ci10eXBlZGVmIHN0cnVjdCB7CisgICAgc3RhdGljIGNvbnN0ZXhwciBNWEZNZXRhZGF0YVNldFR5 cGUgbWV0YWRhdGFfc2V0X3R5cGUgPSBQdWxsZG93bkNvbXBvbmVudDsKK307CisKK3N0cnVjdCBN WEZFc3NlbmNlR3JvdXAgewogICAgIE1YRk1ldGFkYXRhU2V0IG1ldGE7CiAgICAgVUlEICpzdHJ1 Y3R1cmFsX2NvbXBvbmVudHNfcmVmczsKICAgICBpbnQgc3RydWN0dXJhbF9jb21wb25lbnRzX2Nv dW50OwogICAgIGludDY0X3QgZHVyYXRpb247Ci19IE1YRkVzc2VuY2VHcm91cDsKIAotdHlwZWRl ZiBzdHJ1Y3QgeworICAgIHN0YXRpYyBjb25zdGV4cHIgTVhGTWV0YWRhdGFTZXRUeXBlIG1ldGFk YXRhX3NldF90eXBlID0gRXNzZW5jZUdyb3VwOworfTsKKworc3RydWN0IE1YRlRhZ2dlZFZhbHVl IHsKICAgICBNWEZNZXRhZGF0YVNldCBtZXRhOwogICAgIGNoYXIgKm5hbWU7CiAgICAgY2hhciAq dmFsdWU7Ci19IE1YRlRhZ2dlZFZhbHVlOwogCi10eXBlZGVmIHN0cnVjdCB7CisgICAgc3RhdGlj IGNvbnN0ZXhwciBNWEZNZXRhZGF0YVNldFR5cGUgbWV0YWRhdGFfc2V0X3R5cGUgPSBUYWdnZWRW YWx1ZTsKK307CisKK3N0cnVjdCBNWEZUcmFjayB7CiAgICAgTVhGTWV0YWRhdGFTZXQgbWV0YTsK ICAgICBNWEZTZXF1ZW5jZSAqc2VxdWVuY2U7IC8qIG1hbmRhdG9yeSwgYW5kIG9ubHkgb25lICov CiAgICAgVUlEIHNlcXVlbmNlX3JlZjsKQEAgLTE4OSw3ICsxOTAsOSBAQCB0eXBlZGVmIHN0cnVj dCB7CiAgICAgaW50IGJvZHlfc2lkOwogICAgIE1YRldyYXBwaW5nU2NoZW1lIHdyYXBwaW5nOwog ICAgIGludCBlZGl0X3VuaXRzX3Blcl9wYWNrZXQ7IC8qIGhvdyBtYW55IGVkaXQgdW5pdHMgdG8g cmVhZCBhdCBhIHRpbWUgKFBDTSwgQ2xpcFdyYXBwZWQpICovCi19IE1YRlRyYWNrOworCisgICAg c3RhdGljIGNvbnN0ZXhwciBNWEZNZXRhZGF0YVNldFR5cGUgbWV0YWRhdGFfc2V0X3R5cGUgPSBU cmFjazsKK307CiAKIHR5cGVkZWYgc3RydWN0IE1YRkRlc2NyaXB0b3IgewogICAgIE1YRk1ldGFk YXRhU2V0IG1ldGE7CkBAIC0yMzAsOCArMjMzLDE0IEBAIHR5cGVkZWYgc3RydWN0IE1YRkRlc2Ny aXB0b3IgewogICAgIHNpemVfdCBtYXN0ZXJpbmdfc2l6ZTsKICAgICBBVkNvbnRlbnRMaWdodE1l dGFkYXRhICpjb2xsOwogICAgIHNpemVfdCBjb2xsX3NpemU7CisKKyAgICBzdGF0aWMgY29uc3Rl eHByIE1YRk1ldGFkYXRhU2V0VHlwZSBtZXRhZGF0YV9zZXRfdHlwZSA9IERlc2NyaXB0b3I7CiB9 IE1YRkRlc2NyaXB0b3I7CiAKK3N0cnVjdCBNWEZNdWx0aXBsZURlc2NyaXB0b3IgOiBwdWJsaWMg TVhGRGVzY3JpcHRvciB7CisgICAgc3RhdGljIGNvbnN0ZXhwciBNWEZNZXRhZGF0YVNldFR5cGUg bWV0YWRhdGFfc2V0X3R5cGUgPSBNdWx0aXBsZURlc2NyaXB0b3I7Cit9OworCiB0eXBlZGVmIHN0 cnVjdCBNWEZNQ0FTdWJEZXNjcmlwdG9yIHsKICAgICBNWEZNZXRhZGF0YVNldCBtZXRhOwogICAg IFVJRCB1aWQ7CkBAIC0yNDQsMTAgKzI1MywyNCBAQCB0eXBlZGVmIHN0cnVjdCBNWEZNQ0FTdWJE ZXNjcmlwdG9yIHsKICAgICBjaGFyICpsYW5ndWFnZTsKIH0gTVhGTUNBU3ViRGVzY3JpcHRvcjsK IAorc3RydWN0IE1YRkF1ZGlvQ2hhbm5lbExhYmVsU3ViRGVzY3JpcHRvciA6IHB1YmxpYyBNWEZN Q0FTdWJEZXNjcmlwdG9yIHsKKyAgICBzdGF0aWMgY29uc3RleHByIE1YRk1ldGFkYXRhU2V0VHlw ZSBtZXRhZGF0YV9zZXRfdHlwZSA9IEF1ZGlvQ2hhbm5lbExhYmVsU3ViRGVzY3JpcHRvcjsKK307 CisKK3N0cnVjdCBNWEZHcm91cE9mU291bmRmaWVsZEdyb3Vwc0xhYmVsU3ViRGVzY3JpcHRvciA6 IHB1YmxpYyBNWEZNQ0FTdWJEZXNjcmlwdG9yIHsKKyAgICBzdGF0aWMgY29uc3RleHByIE1YRk1l dGFkYXRhU2V0VHlwZSBtZXRhZGF0YV9zZXRfdHlwZSA9IEdyb3VwT2ZTb3VuZGZpZWxkR3JvdXBz TGFiZWxTdWJEZXNjcmlwdG9yOworfTsKKworc3RydWN0IE1YRlNvdW5kZmllbGRHcm91cExhYmVs U3ViRGVzY3JpcHRvciA6IHB1YmxpYyBNWEZNQ0FTdWJEZXNjcmlwdG9yIHsKKyAgICBzdGF0aWMg Y29uc3RleHByIE1YRk1ldGFkYXRhU2V0VHlwZSBtZXRhZGF0YV9zZXRfdHlwZSA9IFNvdW5kZmll bGRHcm91cExhYmVsU3ViRGVzY3JpcHRvcjsKK307CisKIHR5cGVkZWYgc3RydWN0IE1YRkZGVjFT dWJEZXNjcmlwdG9yIHsKICAgICBNWEZNZXRhZGF0YVNldCBtZXRhOwogICAgIHVpbnQ4X3QgKmV4 dHJhZGF0YTsKICAgICBpbnQgZXh0cmFkYXRhX3NpemU7CisKKyAgICBzdGF0aWMgY29uc3RleHBy IE1YRk1ldGFkYXRhU2V0VHlwZSBtZXRhZGF0YV9zZXRfdHlwZSA9IEZGVjFTdWJEZXNjcmlwdG9y OwogfSBNWEZGRlYxU3ViRGVzY3JpcHRvcjsKIAogdHlwZWRlZiBzdHJ1Y3QgTVhGSW5kZXhUYWJs ZVNlZ21lbnQgewpAQCAtMjYzLDYgKzI4Niw4IEBAIHR5cGVkZWYgc3RydWN0IE1YRkluZGV4VGFi bGVTZWdtZW50IHsKICAgICB1aW50NjRfdCAqc3RyZWFtX29mZnNldF9lbnRyaWVzOwogICAgIGlu dCBuYl9pbmRleF9lbnRyaWVzOwogICAgIGludDY0X3Qgb2Zmc2V0OworCisgICAgc3RhdGljIGNv bnN0ZXhwciBNWEZNZXRhZGF0YVNldFR5cGUgbWV0YWRhdGFfc2V0X3R5cGUgPSBJbmRleFRhYmxl U2VnbWVudDsKIH0gTVhGSW5kZXhUYWJsZVNlZ21lbnQ7CiAKIHR5cGVkZWYgc3RydWN0IE1YRlBh Y2thZ2UgewpAQCAtMjc3LDEyICszMDIsMjIgQEAgdHlwZWRlZiBzdHJ1Y3QgTVhGUGFja2FnZSB7 CiAgICAgaW50IGNvbW1lbnRfY291bnQ7CiB9IE1YRlBhY2thZ2U7CiAKK3N0cnVjdCBNWEZNYXRl cmlhbFBhY2thZ2UgOiBwdWJsaWMgTVhGUGFja2FnZSB7CisgICAgc3RhdGljIGNvbnN0ZXhwciBN WEZNZXRhZGF0YVNldFR5cGUgbWV0YWRhdGFfc2V0X3R5cGUgPSBNYXRlcmlhbFBhY2thZ2U7Cit9 OworCitzdHJ1Y3QgTVhGU291cmNlUGFja2FnZSA6IHB1YmxpYyBNWEZQYWNrYWdlIHsKKyAgICBz dGF0aWMgY29uc3RleHByIE1YRk1ldGFkYXRhU2V0VHlwZSBtZXRhZGF0YV9zZXRfdHlwZSA9IFNv dXJjZVBhY2thZ2U7Cit9OworCiB0eXBlZGVmIHN0cnVjdCBNWEZFc3NlbmNlQ29udGFpbmVyRGF0 YSB7CiAgICAgTVhGTWV0YWRhdGFTZXQgbWV0YTsKICAgICBVSUQgcGFja2FnZV91aWQ7CiAgICAg VUlEIHBhY2thZ2VfdWw7CiAgICAgaW50IGluZGV4X3NpZDsKICAgICBpbnQgYm9keV9zaWQ7CisK KyAgICBzdGF0aWMgY29uc3RleHByIE1YRk1ldGFkYXRhU2V0VHlwZSBtZXRhZGF0YV9zZXRfdHlw ZSA9IEVzc2VuY2VDb250YWluZXJEYXRhOwogfSBNWEZFc3NlbmNlQ29udGFpbmVyRGF0YTsKIAog LyogZGVjb2RlZCBpbmRleCB0YWJsZSAqLwpAQCAtMjk4LDMyICszMzMsNiBAQCB0eXBlZGVmIHN0 cnVjdCBNWEZJbmRleFRhYmxlIHsKICAgICBpbnQ4X3QgKm9mZnNldHM7ICAgICAgICAgICAgLyog dGVtcG9yYWwgb2Zmc2V0cyBmb3IgZGlzcGxheSBvcmRlciB0byBzdG9yZWQgb3JkZXIgY29udmVy c2lvbiAqLwogfSBNWEZJbmRleFRhYmxlOwogCi10eXBlZGVmIHN0cnVjdCBNWEZDb250ZXh0IHsK LSAgICBjb25zdCBBVkNsYXNzICpjbGFzczsgICAgIC8qKjwgQ2xhc3MgZm9yIHByaXZhdGUgb3B0 aW9ucy4gKi8KLSAgICBNWEZQYXJ0aXRpb24gKnBhcnRpdGlvbnM7Ci0gICAgdW5zaWduZWQgcGFy dGl0aW9uc19jb3VudDsKLSAgICBNWEZPUCBvcDsKLSAgICBVSUQgKnBhY2thZ2VzX3JlZnM7Ci0g ICAgaW50IHBhY2thZ2VzX2NvdW50OwotICAgIFVJRCAqZXNzZW5jZV9jb250YWluZXJfZGF0YV9y ZWZzOwotICAgIGludCBlc3NlbmNlX2NvbnRhaW5lcl9kYXRhX2NvdW50OwotICAgIE1YRk1ldGFk YXRhU2V0R3JvdXAgbWV0YWRhdGFfc2V0X2dyb3Vwc1tNZXRhZGF0YVNldFR5cGVOQl07Ci0gICAg QVZGb3JtYXRDb250ZXh0ICpmYzsKLSAgICBzdHJ1Y3QgQVZBRVMgKmFlc2M7Ci0gICAgdWludDhf dCAqbG9jYWxfdGFnczsKLSAgICBpbnQgbG9jYWxfdGFnc19jb3VudDsKLSAgICB1aW50NjRfdCBm b290ZXJfcGFydGl0aW9uOwotICAgIEtMVlBhY2tldCBjdXJyZW50X2tsdl9kYXRhOwotICAgIGlu dCBydW5faW47Ci0gICAgTVhGUGFydGl0aW9uICpjdXJyZW50X3BhcnRpdGlvbjsKLSAgICBpbnQg cGFyc2luZ19iYWNrd2FyZDsKLSAgICBpbnQ2NF90IGxhc3RfZm9yd2FyZF90ZWxsOwotICAgIGlu dCBsYXN0X2ZvcndhcmRfcGFydGl0aW9uOwotICAgIGludCBuYl9pbmRleF90YWJsZXM7Ci0gICAg TVhGSW5kZXhUYWJsZSAqaW5kZXhfdGFibGVzOwotICAgIGludCBlaWE2MDhfZXh0cmFjdDsKLX0g TVhGQ29udGV4dDsKLQogLyogTk9URToga2x2X29mZnNldCBpcyBub3Qgc2V0ICgtMSkgZm9yIGxv Y2FsIGtleXMgKi8KIHR5cGVkZWYgaW50IE1YRk1ldGFkYXRhUmVhZEZ1bmModm9pZCAqYXJnLCBB VklPQ29udGV4dCAqcGIsIGludCB0YWcsIGludCBzaXplLCBVSUQgdWlkLCBpbnQ2NF90IGtsdl9v ZmZzZXQpOwogCkBAIC01MTEsNyArNTIwLDcgQEAgc3RhdGljIGludCBrbHZfcmVhZF9wYWNrZXQo TVhGQ29udGV4dCAqbXhmLCBLTFZQYWNrZXQgKmtsdiwgQVZJT0NvbnRleHQgKnBiKQogc3RhdGlj IGludCBteGZfZ2V0X3N0cmVhbV9pbmRleChBVkZvcm1hdENvbnRleHQgKnMsIEtMVlBhY2tldCAq a2x2LCBpbnQgYm9keV9zaWQpCiB7CiAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBzLT5uYl9zdHJl YW1zOyBpKyspIHsKLSAgICAgICAgTVhGVHJhY2sgKnRyYWNrID0gcy0+c3RyZWFtc1tpXS0+cHJp dl9kYXRhOworICAgICAgICBNWEZUcmFjayAqdHJhY2sgPSAoTVhGVHJhY2sqKXMtPnN0cmVhbXNb aV0tPnByaXZfZGF0YTsKICAgICAgICAgLyogU01QVEUgMzc5TSA3LjMgKi8KICAgICAgICAgaWYg KHRyYWNrICYmICghYm9keV9zaWQgfHwgIXRyYWNrLT5ib2R5X3NpZCB8fCB0cmFjay0+Ym9keV9z aWQgPT0gYm9keV9zaWQpICYmICFtZW1jbXAoa2x2LT5rZXkgKyBzaXplb2YobXhmX2Vzc2VuY2Vf ZWxlbWVudF9rZXkpLCB0cmFjay0+dHJhY2tfbnVtYmVyLCBzaXplb2YodHJhY2stPnRyYWNrX251 bWJlcikpKQogICAgICAgICAgICAgcmV0dXJuIGk7CkBAIC02NTQsNyArNjYzLDcgQEAgc3RhdGlj IGludCBteGZfZ2V0X2QxMF9hZXMzX3BhY2tldChBVklPQ29udGV4dCAqcGIsIEFWU3RyZWFtICpz dCwgQVZQYWNrZXQgKnBrdCwKIHN0YXRpYyBpbnQgbXhmX2RlY3J5cHRfdHJpcGxldChBVkZvcm1h dENvbnRleHQgKnMsIEFWUGFja2V0ICpwa3QsIEtMVlBhY2tldCAqa2x2KQogewogICAgIHN0YXRp YyBjb25zdCB1aW50OF90IGNoZWNrdlsxNl0gPSB7MHg0MywgMHg0OCwgMHg1NSwgMHg0YiwgMHg0 MywgMHg0OCwgMHg1NSwgMHg0YiwgMHg0MywgMHg0OCwgMHg1NSwgMHg0YiwgMHg0MywgMHg0OCwg MHg1NSwgMHg0Yn07Ci0gICAgTVhGQ29udGV4dCAqbXhmID0gcy0+cHJpdl9kYXRhOworICAgIE1Y RkNvbnRleHQgKm14ZiA9IChNWEZDb250ZXh0KilzLT5wcml2X2RhdGE7CiAgICAgQVZJT0NvbnRl eHQgKnBiID0gcy0+cGI7CiAgICAgaW50NjRfdCBlbmQgPSBhdmlvX3RlbGwocGIpICsga2x2LT5s ZW5ndGg7CiAgICAgaW50NjRfdCBzaXplOwpAQCAtNzI1LDcgKzczNCw3IEBAIHN0YXRpYyBpbnQg bXhmX2RlY3J5cHRfdHJpcGxldChBVkZvcm1hdENvbnRleHQgKnMsIEFWUGFja2V0ICpwa3QsIEtM VlBhY2tldCAqa2x2CiAKIHN0YXRpYyBpbnQgbXhmX3JlYWRfcHJpbWVyX3BhY2sodm9pZCAqYXJn LCBBVklPQ29udGV4dCAqcGIsIGludCB0YWcsIGludCBzaXplLCBVSUQgdWlkLCBpbnQ2NF90IGts dl9vZmZzZXQpCiB7Ci0gICAgTVhGQ29udGV4dCAqbXhmID0gYXJnOworICAgIE1YRkNvbnRleHQg Km14ZiA9IChNWEZDb250ZXh0Kilhcmc7CiAgICAgaW50IGl0ZW1fbnVtID0gYXZpb19yYjMyKHBi KTsKICAgICBpbnQgaXRlbV9sZW4gPSBhdmlvX3JiMzIocGIpOwogCkBAIC03NDEsNyArNzUwLDcg QEAgc3RhdGljIGludCBteGZfcmVhZF9wcmltZXJfcGFjayh2b2lkICphcmcsIEFWSU9Db250ZXh0 ICpwYiwgaW50IHRhZywgaW50IHNpemUsIFUKICAgICAgICAgYXZfbG9nKG14Zi0+ZmMsIEFWX0xP R19WRVJCT1NFLCAiTXVsdGlwbGUgcHJpbWVyIHBhY2tzXG4iKTsKICAgICBhdl9mcmVlKG14Zi0+ bG9jYWxfdGFncyk7CiAgICAgbXhmLT5sb2NhbF90YWdzX2NvdW50ID0gMDsKLSAgICBteGYtPmxv Y2FsX3RhZ3MgPSBhdl9jYWxsb2MoaXRlbV9udW0sIGl0ZW1fbGVuKTsKKyAgICBteGYtPmxvY2Fs X3RhZ3MgPSAodWludDhfdCopYXZfY2FsbG9jKGl0ZW1fbnVtLCBpdGVtX2xlbik7CiAgICAgaWYg KCFteGYtPmxvY2FsX3RhZ3MpCiAgICAgICAgIHJldHVybiBBVkVSUk9SKEVOT01FTSk7CiAgICAg bXhmLT5sb2NhbF90YWdzX2NvdW50ID0gaXRlbV9udW07CkBAIC03NTEsNyArNzYwLDcgQEAgc3Rh dGljIGludCBteGZfcmVhZF9wcmltZXJfcGFjayh2b2lkICphcmcsIEFWSU9Db250ZXh0ICpwYiwg aW50IHRhZywgaW50IHNpemUsIFUKIAogc3RhdGljIGludCBteGZfcmVhZF9wYXJ0aXRpb25fcGFj ayh2b2lkICphcmcsIEFWSU9Db250ZXh0ICpwYiwgaW50IHRhZywgaW50IHNpemUsIFVJRCB1aWQs IGludDY0X3Qga2x2X29mZnNldCkKIHsKLSAgICBNWEZDb250ZXh0ICpteGYgPSBhcmc7CisgICAg TVhGQ29udGV4dCAqbXhmID0gKE1YRkNvbnRleHQqKWFyZzsKICAgICBBVkZvcm1hdENvbnRleHQg KnMgPSBteGYtPmZjOwogICAgIE1YRlBhcnRpdGlvbiAqcGFydGl0aW9uLCAqdG1wX3BhcnQ7CiAg ICAgVUlEIG9wOwpAQCAtNzY1LDcgKzc3NCw3IEBAIHN0YXRpYyBpbnQgbXhmX3JlYWRfcGFydGl0 aW9uX3BhY2sodm9pZCAqYXJnLCBBVklPQ29udGV4dCAqcGIsIGludCB0YWcsIGludCBzaXplCiAK ICAgICBhdl9hc3NlcnQwKGtsdl9vZmZzZXQgPj0gbXhmLT5ydW5faW4pOwogCi0gICAgdG1wX3Bh cnQgPSBhdl9yZWFsbG9jX2FycmF5KG14Zi0+cGFydGl0aW9ucywgbXhmLT5wYXJ0aXRpb25zX2Nv dW50ICsgMSwgc2l6ZW9mKCpteGYtPnBhcnRpdGlvbnMpKTsKKyAgICB0bXBfcGFydCA9IChNWEZQ YXJ0aXRpb24qKWF2X3JlYWxsb2NfYXJyYXkobXhmLT5wYXJ0aXRpb25zLCBteGYtPnBhcnRpdGlv bnNfY291bnQgKyAxLCBzaXplb2YoKm14Zi0+cGFydGl0aW9ucykpOwogICAgIGlmICghdG1wX3Bh cnQpCiAgICAgICAgIHJldHVybiBBVkVSUk9SKEVOT01FTSk7CiAgICAgbXhmLT5wYXJ0aXRpb25z ID0gdG1wX3BhcnQ7CkBAIC05ODAsNyArOTg5LDcgQEAgc3RhdGljIGludCBteGZfYWRkX21ldGFk YXRhX3NldChNWEZDb250ZXh0ICpteGYsIE1YRk1ldGFkYXRhU2V0ICoqbWV0YWRhdGFfc2V0LAog CiBzdGF0aWMgaW50IG14Zl9yZWFkX2NyeXB0b2dyYXBoaWNfY29udGV4dCh2b2lkICphcmcsIEFW SU9Db250ZXh0ICpwYiwgaW50IHRhZywgaW50IHNpemUsIFVJRCB1aWQsIGludDY0X3Qga2x2X29m ZnNldCkKIHsKLSAgICBNWEZDcnlwdG9Db250ZXh0ICpjcnlwdG9jb250ZXh0ID0gYXJnOworICAg IE1YRkNyeXB0b0NvbnRleHQgKmNyeXB0b2NvbnRleHQgPSAoTVhGQ3J5cHRvQ29udGV4dCopYXJn OwogICAgIGlmIChzaXplICE9IDE2KQogICAgICAgICByZXR1cm4gQVZFUlJPUl9JTlZBTElEREFU QTsKICAgICBpZiAoSVNfS0xWX0tFWSh1aWQsIG14Zl9jcnlwdG9fc291cmNlX2NvbnRhaW5lcl91 bCkpCkBAIC05ODgsNiArOTk3LDE2IEBAIHN0YXRpYyBpbnQgbXhmX3JlYWRfY3J5cHRvZ3JhcGhp Y19jb250ZXh0KHZvaWQgKmFyZywgQVZJT0NvbnRleHQgKnBiLCBpbnQgdGFnLCBpCiAgICAgcmV0 dXJuIDA7CiB9CiAKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+IGJvb2wgbXhmX21hbGxvY19hcnJheShp bnQgY291bnQsIFQqICZ0KSB7CisgICAgdCA9IChUKilhdl9tYWxsb2NfYXJyYXkoY291bnQsIHNp emVvZihUKSk7CisgICAgcmV0dXJuIHQgIT0gTlVMTDsKK30KKwordGVtcGxhdGU8dHlwZW5hbWUg VD4gYm9vbCBteGZfY2FsbG9jKGludCBjb3VudCwgVCogJnQpIHsKKyAgICB0ID0gKFQqKWF2X2Nh bGxvYyhjb3VudCwgc2l6ZW9mKFQpKTsKKyAgICByZXR1cm4gdCAhPSBOVUxMOworfQorCiBzdGF0 aWMgaW50IG14Zl9yZWFkX3N0cm9uZ19yZWZfYXJyYXkoQVZJT0NvbnRleHQgKnBiLCBVSUQgKipy ZWZzLCBpbnQgKmNvdW50KQogewogICAgIGludDY0X3QgcmV0OwpAQCAtOTk5LDggKzEwMTgsNyBA QCBzdGF0aWMgaW50IG14Zl9yZWFkX3N0cm9uZ19yZWZfYXJyYXkoQVZJT0NvbnRleHQgKnBiLCBV SUQgKipyZWZzLCBpbnQgKmNvdW50KQogICAgICpjb3VudCA9IGM7CiAKICAgICBhdl9mcmVlKCpy ZWZzKTsKLSAgICAqcmVmcyA9IGF2X21hbGxvY19hcnJheSgqY291bnQsIHNpemVvZihVSUQpKTsK LSAgICBpZiAoISpyZWZzKSB7CisgICAgaWYgKCFteGZfbWFsbG9jX2FycmF5KCpjb3VudCwgKnJl ZnMpKSB7CiAgICAgICAgICpjb3VudCA9IDA7CiAgICAgICAgIHJldHVybiBBVkVSUk9SKEVOT01F TSk7CiAgICAgfQpAQCAtMTAyNCw3ICsxMDQyLDcgQEAgc3RhdGljIGlubGluZSBpbnQgbXhmX3Jl YWRfdXNfYXNjaWlfc3RyaW5nKEFWSU9Db250ZXh0ICpwYiwgaW50IHNpemUsIGNoYXIqKiBzdHIK IAogICAgIGJ1Zl9zaXplID0gc2l6ZSArIDE7CiAgICAgYXZfZnJlZSgqc3RyKTsKLSAgICAqc3Ry ID0gYXZfbWFsbG9jKGJ1Zl9zaXplKTsKKyAgICAqc3RyID0gKGNoYXIqKWF2X21hbGxvYyhidWZf c2l6ZSk7CiAgICAgaWYgKCEqc3RyKQogICAgICAgICByZXR1cm4gQVZFUlJPUihFTk9NRU0pOwog CkBAIC0xMDQ4LDcgKzEwNjYsNyBAQCBzdGF0aWMgaW5saW5lIGludCBteGZfcmVhZF91dGYxNl9z dHJpbmcoQVZJT0NvbnRleHQgKnBiLCBpbnQgc2l6ZSwgY2hhcioqIHN0ciwgaQogCiAgICAgYnVm X3NpemUgPSBzaXplICsgc2l6ZSAvIDIgKyAxOwogICAgIGF2X2ZyZWUoKnN0cik7Ci0gICAgKnN0 ciA9IGF2X21hbGxvYyhidWZfc2l6ZSk7CisgICAgKnN0ciA9IChjaGFyKilhdl9tYWxsb2MoYnVm X3NpemUpOwogICAgIGlmICghKnN0cikKICAgICAgICAgcmV0dXJuIEFWRVJST1IoRU5PTUVNKTsK IApAQCAtMTA3Niw3ICsxMDk0LDcgQEAgUkVBRF9TVFIxNihsZSwgMCkKIAogc3RhdGljIGludCBt eGZfcmVhZF9jb250ZW50X3N0b3JhZ2Uodm9pZCAqYXJnLCBBVklPQ29udGV4dCAqcGIsIGludCB0 YWcsIGludCBzaXplLCBVSUQgdWlkLCBpbnQ2NF90IGtsdl9vZmZzZXQpCiB7Ci0gICAgTVhGQ29u dGV4dCAqbXhmID0gYXJnOworICAgIE1YRkNvbnRleHQgKm14ZiA9IChNWEZDb250ZXh0Kilhcmc7 CiAgICAgc3dpdGNoICh0YWcpIHsKICAgICBjYXNlIDB4MTkwMToKICAgICAgICAgaWYgKG14Zi0+ cGFja2FnZXNfcmVmcykKQEAgLTEwOTAsNyArMTEwOCw3IEBAIHN0YXRpYyBpbnQgbXhmX3JlYWRf Y29udGVudF9zdG9yYWdlKHZvaWQgKmFyZywgQVZJT0NvbnRleHQgKnBiLCBpbnQgdGFnLCBpbnQg c2l6CiAKIHN0YXRpYyBpbnQgbXhmX3JlYWRfc291cmNlX2NsaXAodm9pZCAqYXJnLCBBVklPQ29u dGV4dCAqcGIsIGludCB0YWcsIGludCBzaXplLCBVSUQgdWlkLCBpbnQ2NF90IGtsdl9vZmZzZXQp CiB7Ci0gICAgTVhGU3RydWN0dXJhbENvbXBvbmVudCAqc291cmNlX2NsaXAgPSBhcmc7CisgICAg TVhGU3RydWN0dXJhbENvbXBvbmVudCAqc291cmNlX2NsaXAgPSAoTVhGU3RydWN0dXJhbENvbXBv bmVudCopYXJnOwogICAgIHN3aXRjaCh0YWcpIHsKICAgICBjYXNlIDB4MDIwMjoKICAgICAgICAg c291cmNlX2NsaXAtPmR1cmF0aW9uID0gYXZpb19yYjY0KHBiKTsKQEAgLTExMTIsNyArMTEzMCw3 IEBAIHN0YXRpYyBpbnQgbXhmX3JlYWRfc291cmNlX2NsaXAodm9pZCAqYXJnLCBBVklPQ29udGV4 dCAqcGIsIGludCB0YWcsIGludCBzaXplLCBVCiAKIHN0YXRpYyBpbnQgbXhmX3JlYWRfdGltZWNv ZGVfY29tcG9uZW50KHZvaWQgKmFyZywgQVZJT0NvbnRleHQgKnBiLCBpbnQgdGFnLCBpbnQgc2l6 ZSwgVUlEIHVpZCwgaW50NjRfdCBrbHZfb2Zmc2V0KQogewotICAgIE1YRlRpbWVjb2RlQ29tcG9u ZW50ICpteGZfdGltZWNvZGUgPSBhcmc7CisgICAgTVhGVGltZWNvZGVDb21wb25lbnQgKm14Zl90 aW1lY29kZSA9IChNWEZUaW1lY29kZUNvbXBvbmVudCopYXJnOwogICAgIHN3aXRjaCh0YWcpIHsK ICAgICBjYXNlIDB4MTUwMToKICAgICAgICAgbXhmX3RpbWVjb2RlLT5zdGFydF9mcmFtZSA9IGF2 aW9fcmI2NChwYik7CkBAIC0xMTI5LDcgKzExNDcsNyBAQCBzdGF0aWMgaW50IG14Zl9yZWFkX3Rp bWVjb2RlX2NvbXBvbmVudCh2b2lkICphcmcsIEFWSU9Db250ZXh0ICpwYiwgaW50IHRhZywgaW50 CiAKIHN0YXRpYyBpbnQgbXhmX3JlYWRfcHVsbGRvd25fY29tcG9uZW50KHZvaWQgKmFyZywgQVZJ T0NvbnRleHQgKnBiLCBpbnQgdGFnLCBpbnQgc2l6ZSwgVUlEIHVpZCwgaW50NjRfdCBrbHZfb2Zm c2V0KQogewotICAgIE1YRlB1bGxkb3duQ29tcG9uZW50ICpteGZfcHVsbGRvd24gPSBhcmc7Cisg ICAgTVhGUHVsbGRvd25Db21wb25lbnQgKm14Zl9wdWxsZG93biA9IChNWEZQdWxsZG93bkNvbXBv bmVudCopYXJnOwogICAgIHN3aXRjaCh0YWcpIHsKICAgICBjYXNlIDB4MGQwMToKICAgICAgICAg YXZpb19yZWFkKHBiLCBteGZfcHVsbGRvd24tPmlucHV0X3NlZ21lbnRfcmVmLCAxNik7CkBAIC0x MTQwLDcgKzExNTgsNyBAQCBzdGF0aWMgaW50IG14Zl9yZWFkX3B1bGxkb3duX2NvbXBvbmVudCh2 b2lkICphcmcsIEFWSU9Db250ZXh0ICpwYiwgaW50IHRhZywgaW50CiAKIHN0YXRpYyBpbnQgbXhm X3JlYWRfdHJhY2sodm9pZCAqYXJnLCBBVklPQ29udGV4dCAqcGIsIGludCB0YWcsIGludCBzaXpl LCBVSUQgdWlkLCBpbnQ2NF90IGtsdl9vZmZzZXQpCiB7Ci0gICAgTVhGVHJhY2sgKnRyYWNrID0g YXJnOworICAgIE1YRlRyYWNrICp0cmFjayA9IChNWEZUcmFjayopYXJnOwogICAgIHN3aXRjaCh0 YWcpIHsKICAgICBjYXNlIDB4NDgwMToKICAgICAgICAgdHJhY2stPnRyYWNrX2lkID0gYXZpb19y YjMyKHBiKTsKQEAgLTExNjQsNyArMTE4Miw3IEBAIHN0YXRpYyBpbnQgbXhmX3JlYWRfdHJhY2so dm9pZCAqYXJnLCBBVklPQ29udGV4dCAqcGIsIGludCB0YWcsIGludCBzaXplLCBVSUQgdWlkCiAK IHN0YXRpYyBpbnQgbXhmX3JlYWRfc2VxdWVuY2Uodm9pZCAqYXJnLCBBVklPQ29udGV4dCAqcGIs IGludCB0YWcsIGludCBzaXplLCBVSUQgdWlkLCBpbnQ2NF90IGtsdl9vZmZzZXQpCiB7Ci0gICAg TVhGU2VxdWVuY2UgKnNlcXVlbmNlID0gYXJnOworICAgIE1YRlNlcXVlbmNlICpzZXF1ZW5jZSA9 IChNWEZTZXF1ZW5jZSopYXJnOwogICAgIHN3aXRjaCh0YWcpIHsKICAgICBjYXNlIDB4MDIwMjoK ICAgICAgICAgc2VxdWVuY2UtPmR1cmF0aW9uID0gYXZpb19yYjY0KHBiKTsKQEAgLTExODQsNyAr MTIwMiw3IEBAIHN0YXRpYyBpbnQgbXhmX3JlYWRfc2VxdWVuY2Uodm9pZCAqYXJnLCBBVklPQ29u dGV4dCAqcGIsIGludCB0YWcsIGludCBzaXplLCBVSUQKIAogc3RhdGljIGludCBteGZfcmVhZF9l c3NlbmNlX2dyb3VwKHZvaWQgKmFyZywgQVZJT0NvbnRleHQgKnBiLCBpbnQgdGFnLCBpbnQgc2l6 ZSwgVUlEIHVpZCwgaW50NjRfdCBrbHZfb2Zmc2V0KQogewotICAgIE1YRkVzc2VuY2VHcm91cCAq ZXNzZW5jZV9ncm91cCA9IGFyZzsKKyAgICBNWEZFc3NlbmNlR3JvdXAgKmVzc2VuY2VfZ3JvdXAg PSAoTVhGRXNzZW5jZUdyb3VwKilhcmc7CiAgICAgc3dpdGNoICh0YWcpIHsKICAgICBjYXNlIDB4 MDIwMjoKICAgICAgICAgZXNzZW5jZV9ncm91cC0+ZHVyYXRpb24gPSBhdmlvX3JiNjQocGIpOwpA QCAtMTE5OCw3ICsxMjE2LDcgQEAgc3RhdGljIGludCBteGZfcmVhZF9lc3NlbmNlX2dyb3VwKHZv aWQgKmFyZywgQVZJT0NvbnRleHQgKnBiLCBpbnQgdGFnLCBpbnQgc2l6ZSwKIAogc3RhdGljIGlu dCBteGZfcmVhZF9wYWNrYWdlKHZvaWQgKmFyZywgQVZJT0NvbnRleHQgKnBiLCBpbnQgdGFnLCBp bnQgc2l6ZSwgVUlEIHVpZCwgaW50NjRfdCBrbHZfb2Zmc2V0KQogewotICAgIE1YRlBhY2thZ2Ug KnBhY2thZ2UgPSBhcmc7CisgICAgTVhGUGFja2FnZSAqcGFja2FnZSA9IChNWEZQYWNrYWdlKilh cmc7CiAgICAgc3dpdGNoKHRhZykgewogICAgIGNhc2UgMHg0NDAzOgogICAgICAgICByZXR1cm4g bXhmX3JlYWRfc3Ryb25nX3JlZl9hcnJheShwYiwgJnBhY2thZ2UtPnRyYWNrc19yZWZzLApAQCAt MTIyMiw3ICsxMjQwLDcgQEAgc3RhdGljIGludCBteGZfcmVhZF9wYWNrYWdlKHZvaWQgKmFyZywg QVZJT0NvbnRleHQgKnBiLCBpbnQgdGFnLCBpbnQgc2l6ZSwgVUlEIHUKIAogc3RhdGljIGludCBt eGZfcmVhZF9lc3NlbmNlX2NvbnRhaW5lcl9kYXRhKHZvaWQgKmFyZywgQVZJT0NvbnRleHQgKnBi LCBpbnQgdGFnLCBpbnQgc2l6ZSwgVUlEIHVpZCwgaW50NjRfdCBrbHZfb2Zmc2V0KQogewotICAg IE1YRkVzc2VuY2VDb250YWluZXJEYXRhICplc3NlbmNlX2RhdGEgPSBhcmc7CisgICAgTVhGRXNz ZW5jZUNvbnRhaW5lckRhdGEgKmVzc2VuY2VfZGF0YSA9IChNWEZFc3NlbmNlQ29udGFpbmVyRGF0 YSopYXJnOwogICAgIHN3aXRjaCh0YWcpIHsKICAgICAgICAgY2FzZSAweDI3MDE6CiAgICAgICAg ICAgICAvKiBsaW5rZWQgcGFja2FnZSB1bWlkIFVNSUQgKi8KQEAgLTEyNTYsOSArMTI3NCw5IEBA IHN0YXRpYyBpbnQgbXhmX3JlYWRfaW5kZXhfZW50cnlfYXJyYXkoQVZJT0NvbnRleHQgKnBiLCBN WEZJbmRleFRhYmxlU2VnbWVudCAqc2VnCiAgICAgaWYoc2VnbWVudC0+bmJfaW5kZXhfZW50cmll cyAmJiBsZW5ndGggPCAxMSkKICAgICAgICAgcmV0dXJuIEFWRVJST1JfSU5WQUxJRERBVEE7CiAK LSAgICBpZiAoIUZGX0FMTE9DX1RZUEVEX0FSUkFZKHNlZ21lbnQtPnRlbXBvcmFsX29mZnNldF9l bnRyaWVzLCBzZWdtZW50LT5uYl9pbmRleF9lbnRyaWVzKSB8fAotICAgICAgICAhRkZfQUxMT0Nf VFlQRURfQVJSQVkoc2VnbWVudC0+ZmxhZ19lbnRyaWVzICAgICAgICAgICAsIHNlZ21lbnQtPm5i X2luZGV4X2VudHJpZXMpIHx8Ci0gICAgICAgICFGRl9BTExPQ19UWVBFRF9BUlJBWShzZWdtZW50 LT5zdHJlYW1fb2Zmc2V0X2VudHJpZXMgICwgc2VnbWVudC0+bmJfaW5kZXhfZW50cmllcykpIHsK KyAgICBpZiAoIW14Zl9tYWxsb2NfYXJyYXkoc2VnbWVudC0+bmJfaW5kZXhfZW50cmllcywgc2Vn bWVudC0+dGVtcG9yYWxfb2Zmc2V0X2VudHJpZXMpIHx8CisgICAgICAgICFteGZfbWFsbG9jX2Fy cmF5KHNlZ21lbnQtPm5iX2luZGV4X2VudHJpZXMsIHNlZ21lbnQtPmZsYWdfZW50cmllcykgfHwK KyAgICAgICAgIW14Zl9tYWxsb2NfYXJyYXkoc2VnbWVudC0+bmJfaW5kZXhfZW50cmllcywgc2Vn bWVudC0+c3RyZWFtX29mZnNldF9lbnRyaWVzKSkgewogICAgICAgICBhdl9mcmVlcCgmc2VnbWVu dC0+dGVtcG9yYWxfb2Zmc2V0X2VudHJpZXMpOwogICAgICAgICBhdl9mcmVlcCgmc2VnbWVudC0+ ZmxhZ19lbnRyaWVzKTsKICAgICAgICAgcmV0dXJuIEFWRVJST1IoRU5PTUVNKTsKQEAgLTEyNzgs NyArMTI5Niw3IEBAIHN0YXRpYyBpbnQgbXhmX3JlYWRfaW5kZXhfZW50cnlfYXJyYXkoQVZJT0Nv bnRleHQgKnBiLCBNWEZJbmRleFRhYmxlU2VnbWVudCAqc2VnCiAKIHN0YXRpYyBpbnQgbXhmX3Jl YWRfaW5kZXhfdGFibGVfc2VnbWVudCh2b2lkICphcmcsIEFWSU9Db250ZXh0ICpwYiwgaW50IHRh ZywgaW50IHNpemUsIFVJRCB1aWQsIGludDY0X3Qga2x2X29mZnNldCkKIHsKLSAgICBNWEZJbmRl eFRhYmxlU2VnbWVudCAqc2VnbWVudCA9IGFyZzsKKyAgICBNWEZJbmRleFRhYmxlU2VnbWVudCAq c2VnbWVudCA9IChNWEZJbmRleFRhYmxlU2VnbWVudCopYXJnOwogICAgIHN3aXRjaCh0YWcpIHsK ICAgICBjYXNlIDB4M0YwNToKICAgICAgICAgc2VnbWVudC0+ZWRpdF91bml0X2J5dGVfY291bnQg PSBhdmlvX3JiMzIocGIpOwpAQCAtMTMzOCw3ICsxMzU2LDcgQEAgc3RhdGljIHZvaWQgbXhmX3Jl YWRfcGl4ZWxfbGF5b3V0KEFWSU9Db250ZXh0ICpwYiwgTVhGRGVzY3JpcHRvciAqZGVzY3JpcHRv cikKIAogc3RhdGljIGludCBteGZfcmVhZF9nZW5lcmljX2Rlc2NyaXB0b3Iodm9pZCAqYXJnLCBB VklPQ29udGV4dCAqcGIsIGludCB0YWcsIGludCBzaXplLCBVSUQgdWlkLCBpbnQ2NF90IGtsdl9v ZmZzZXQpCiB7Ci0gICAgTVhGRGVzY3JpcHRvciAqZGVzY3JpcHRvciA9IGFyZzsKKyAgICBNWEZE ZXNjcmlwdG9yICpkZXNjcmlwdG9yID0gKE1YRkRlc2NyaXB0b3IqKWFyZzsKICAgICBpbnQgZW50 cnlfY291bnQsIGVudHJ5X3NpemU7CiAKICAgICBzd2l0Y2godGFnKSB7CkBAIC0xNDQxLDcgKzE0 NTksNyBAQCBzdGF0aWMgaW50IG14Zl9yZWFkX2dlbmVyaWNfZGVzY3JpcHRvcih2b2lkICphcmcs IEFWSU9Db250ZXh0ICpwYiwgaW50IHRhZywgaW50CiAgICAgICAgICAgICAgICAgYXZfbG9nKE5V TEwsIEFWX0xPR19XQVJOSU5HLCAiRHVwbGljYXRlIHNvbnlfbXBlZzRfZXh0cmFkYXRhXG4iKTsK ICAgICAgICAgICAgIGF2X2ZyZWUoZGVzY3JpcHRvci0+ZXh0cmFkYXRhKTsKICAgICAgICAgICAg IGRlc2NyaXB0b3ItPmV4dHJhZGF0YV9zaXplID0gMDsKLSAgICAgICAgICAgIGRlc2NyaXB0b3It PmV4dHJhZGF0YSA9IGF2X21hbGxvYyhzaXplKTsKKyAgICAgICAgICAgIGRlc2NyaXB0b3ItPmV4 dHJhZGF0YSA9ICh1aW50OF90Kilhdl9tYWxsb2Moc2l6ZSk7CiAgICAgICAgICAgICBpZiAoIWRl c2NyaXB0b3ItPmV4dHJhZGF0YSkKICAgICAgICAgICAgICAgICByZXR1cm4gQVZFUlJPUihFTk9N RU0pOwogICAgICAgICAgICAgZGVzY3JpcHRvci0+ZXh0cmFkYXRhX3NpemUgPSBzaXplOwpAQCAt MTUxMyw3ICsxNTMxLDcgQEAgc3RhdGljIGludCBteGZfcmVhZF9nZW5lcmljX2Rlc2NyaXB0b3Io dm9pZCAqYXJnLCBBVklPQ29udGV4dCAqcGIsIGludCB0YWcsIGludAogCiBzdGF0aWMgaW50IG14 Zl9yZWFkX21jYV9zdWJfZGVzY3JpcHRvcih2b2lkICphcmcsIEFWSU9Db250ZXh0ICpwYiwgaW50 IHRhZywgaW50IHNpemUsIFVJRCB1aWQsIGludDY0X3Qga2x2X29mZnNldCkKIHsKLSAgICBNWEZN Q0FTdWJEZXNjcmlwdG9yICptY2Ffc3ViX2Rlc2NyaXB0b3IgPSBhcmc7CisgICAgTVhGTUNBU3Vi RGVzY3JpcHRvciAqbWNhX3N1Yl9kZXNjcmlwdG9yID0gKE1YRk1DQVN1YkRlc2NyaXB0b3IqKWFy ZzsKIAogICAgIGlmIChJU19LTFZfS0VZKHVpZCwgbXhmX21jYV9sYWJlbF9kaWN0aW9uYXJ5X2lk KSkKICAgICAgICAgYXZpb19yZWFkKHBiLCBtY2Ffc3ViX2Rlc2NyaXB0b3ItPm1jYV9sYWJlbF9k aWN0aW9uYXJ5X2lkLCAxNik7CkBAIC0xNTM4LDE0ICsxNTU2LDE0IEBAIHN0YXRpYyBpbnQgbXhm X3JlYWRfbWNhX3N1Yl9kZXNjcmlwdG9yKHZvaWQgKmFyZywgQVZJT0NvbnRleHQgKnBiLCBpbnQg dGFnLCBpbnQKIAogc3RhdGljIGludCBteGZfcmVhZF9mZnYxX3N1Yl9kZXNjcmlwdG9yKHZvaWQg KmFyZywgQVZJT0NvbnRleHQgKnBiLCBpbnQgdGFnLCBpbnQgc2l6ZSwgVUlEIHVpZCwgaW50NjRf dCBrbHZfb2Zmc2V0KQogewotICAgIE1YRkZGVjFTdWJEZXNjcmlwdG9yICpmZnYxX3N1Yl9kZXNj cmlwdG9yID0gYXJnOworICAgIE1YRkZGVjFTdWJEZXNjcmlwdG9yICpmZnYxX3N1Yl9kZXNjcmlw dG9yID0gKE1YRkZGVjFTdWJEZXNjcmlwdG9yKilhcmc7CiAKICAgICBpZiAoSVNfS0xWX0tFWSh1 aWQsIG14Zl9mZnYxX2V4dHJhZGF0YSkgJiYgc2l6ZSA8PSBJTlRfTUFYIC0gQVZfSU5QVVRfQlVG RkVSX1BBRERJTkdfU0laRSApIHsKICAgICAgICAgaWYgKGZmdjFfc3ViX2Rlc2NyaXB0b3ItPmV4 dHJhZGF0YSkKICAgICAgICAgICAgIGF2X2xvZyhOVUxMLCBBVl9MT0dfV0FSTklORywgIkR1cGxp Y2F0ZSBmZnYxX2V4dHJhZGF0YVxuIik7CiAgICAgICAgIGF2X2ZyZWUoZmZ2MV9zdWJfZGVzY3Jp cHRvci0+ZXh0cmFkYXRhKTsKICAgICAgICAgZmZ2MV9zdWJfZGVzY3JpcHRvci0+ZXh0cmFkYXRh X3NpemUgPSAwOwotICAgICAgICBmZnYxX3N1Yl9kZXNjcmlwdG9yLT5leHRyYWRhdGEgPSBhdl9t YWxsb2N6KHNpemUgKyBBVl9JTlBVVF9CVUZGRVJfUEFERElOR19TSVpFKTsKKyAgICAgICAgZmZ2 MV9zdWJfZGVzY3JpcHRvci0+ZXh0cmFkYXRhID0gKHVpbnQ4X3QqKWF2X21hbGxvY3ooc2l6ZSAr IEFWX0lOUFVUX0JVRkZFUl9QQURESU5HX1NJWkUpOwogICAgICAgICBpZiAoIWZmdjFfc3ViX2Rl c2NyaXB0b3ItPmV4dHJhZGF0YSkKICAgICAgICAgICAgIHJldHVybiBBVkVSUk9SKEVOT01FTSk7 CiAgICAgICAgIGZmdjFfc3ViX2Rlc2NyaXB0b3ItPmV4dHJhZGF0YV9zaXplID0gc2l6ZTsKQEAg LTE1NTcsNyArMTU3NSw3IEBAIHN0YXRpYyBpbnQgbXhmX3JlYWRfZmZ2MV9zdWJfZGVzY3JpcHRv cih2b2lkICphcmcsIEFWSU9Db250ZXh0ICpwYiwgaW50IHRhZywgaW50CiAKIHN0YXRpYyBpbnQg bXhmX3JlYWRfaW5kaXJlY3RfdmFsdWUodm9pZCAqYXJnLCBBVklPQ29udGV4dCAqcGIsIGludCBz aXplKQogewotICAgIE1YRlRhZ2dlZFZhbHVlICp0YWdnZWRfdmFsdWUgPSBhcmc7CisgICAgTVhG VGFnZ2VkVmFsdWUgKnRhZ2dlZF92YWx1ZSA9IChNWEZUYWdnZWRWYWx1ZSopYXJnOwogICAgIHVp bnQ4X3Qga2V5WzE3XTsKICAgICBpbnQgcmV0OwogCkBAIC0xNTc4LDcgKzE1OTYsNyBAQCBzdGF0 aWMgaW50IG14Zl9yZWFkX2luZGlyZWN0X3ZhbHVlKHZvaWQgKmFyZywgQVZJT0NvbnRleHQgKnBi LCBpbnQgc2l6ZSkKIAogc3RhdGljIGludCBteGZfcmVhZF90YWdnZWRfdmFsdWUodm9pZCAqYXJn LCBBVklPQ29udGV4dCAqcGIsIGludCB0YWcsIGludCBzaXplLCBVSUQgdWlkLCBpbnQ2NF90IGts dl9vZmZzZXQpCiB7Ci0gICAgTVhGVGFnZ2VkVmFsdWUgKnRhZ2dlZF92YWx1ZSA9IGFyZzsKKyAg ICBNWEZUYWdnZWRWYWx1ZSAqdGFnZ2VkX3ZhbHVlID0gKE1YRlRhZ2dlZFZhbHVlKilhcmc7CiAg ICAgc3dpdGNoICh0YWcpewogICAgIGNhc2UgMHg1MDAxOgogICAgICAgICByZXR1cm4gbXhmX3Jl YWRfdXRmMTZiZV9zdHJpbmcocGIsIHNpemUsICZ0YWdnZWRfdmFsdWUtPm5hbWUpOwpAQCAtMTYx MiwxNSArMTYzMCwxNSBAQCBzdGF0aWMgY29uc3QgTVhGQ29kZWNVTCAqbXhmX2dldF9jb2RlY191 bChjb25zdCBNWEZDb2RlY1VMICp1bHMsIFVJRCAqdWlkKQogICAgIHJldHVybiB1bHM7CiB9CiAK LXN0YXRpYyB2b2lkICpteGZfcmVzb2x2ZV9zdHJvbmdfcmVmKE1YRkNvbnRleHQgKm14ZiwgVUlE ICpzdHJvbmdfcmVmLCBlbnVtIE1YRk1ldGFkYXRhU2V0VHlwZSB0eXBlKQordGVtcGxhdGU8Y2xh c3MgVD4gVCogbXhmX3Jlc29sdmVfc3Ryb25nX3JlZihNWEZDb250ZXh0ICpteGYsIFVJRCAqc3Ry b25nX3JlZikKIHsKLSAgICBNWEZNZXRhZGF0YVNldEdyb3VwICptZyA9ICZteGYtPm1ldGFkYXRh X3NldF9ncm91cHNbdHlwZV07CisgICAgTVhGTWV0YWRhdGFTZXRHcm91cCAqbWcgPSAmbXhmLT5t ZXRhZGF0YV9zZXRfZ3JvdXBzW1Q6Om1ldGFkYXRhX3NldF90eXBlXTsKIAogICAgIGlmICghc3Ry b25nX3JlZikKICAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgZm9yIChpbnQgaSA9IG1nLT5tZXRh ZGF0YV9zZXRzX2NvdW50IC0gMTsgaSA+PSAwOyBpLS0pCiAgICAgICAgIGlmICghbWVtY21wKCpz dHJvbmdfcmVmLCBtZy0+bWV0YWRhdGFfc2V0c1tpXS0+dWlkLCAxNikpCi0gICAgICAgICAgICBy ZXR1cm4gbWctPm1ldGFkYXRhX3NldHNbaV07CisgICAgICAgICAgICByZXR1cm4gKFQqKW1nLT5t ZXRhZGF0YV9zZXRzW2ldOwogCiAgICAgcmV0dXJuIE5VTEw7CiB9CkBAIC0xNzMzLDcgKzE3NTEs NyBAQCBzdGF0aWMgY29uc3QgTVhGQ2hhbm5lbE9yZGVyaW5nVUwgbXhmX2NoYW5uZWxfb3JkZXJp bmdbXSA9IHsKICAgICB7IHsgMHgwNiwweDBlLDB4MmIsMHgzNCwweDA0LDB4MDEsMHgwMSwweDBk LDB4MDMsMHgwMiwweDAxLDB4MzAsMHgwMSwweDExLDB4MDAsMHgwMCB9LCBBVl9DSEFOX0JPVFRP TV9GUk9OVF9MRUZULCAgICAgQVZfQVVESU9fU0VSVklDRV9UWVBFX01BSU4gfSwgLy8gTGVmdCBC ZWxvdwogICAgIHsgeyAweDA2LDB4MGUsMHgyYiwweDM0LDB4MDQsMHgwMSwweDAxLDB4MGQsMHgw MywweDAyLDB4MDEsMHgzMCwweDAxLDB4MTIsMHgwMCwweDAwIH0sIEFWX0NIQU5fQk9UVE9NX0ZS T05UX1JJR0hULCAgICBBVl9BVURJT19TRVJWSUNFX1RZUEVfTUFJTiB9LCAvLyBSaWdodCBCZWxv dwogICAgIHsgeyAweDA2LDB4MGUsMHgyYiwweDM0LDB4MDQsMHgwMSwweDAxLDB4MGQsMHgwMyww eDAyLDB4MDEsMHgzMCwweDAxLDB4MTMsMHgwMCwweDAwIH0sIEFWX0NIQU5fQk9UVE9NX0ZST05U X0NFTlRFUiwgICBBVl9BVURJT19TRVJWSUNFX1RZUEVfTUFJTiB9LCAvLyBDZW50ZXIgQmVsb3cK LSAgICB7IHsgMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgw MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9LCAwLCAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgQVZfQVVESU9fU0VSVklDRV9UWVBFX05CIH0sCisgICAgeyB7IDB4MDAsMHgwMCww eDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgw MCwweDAwLDB4MDAgfSwgKEFWQ2hhbm5lbCkwLCAgICAgICAgICAgICAgICAgIEFWX0FVRElPX1NF UlZJQ0VfVFlQRV9OQiB9LAogfTsKIAogc3RhdGljIE1YRldyYXBwaW5nU2NoZW1lIG14Zl9nZXRf d3JhcHBpbmdfa2luZChVSUQgKmVzc2VuY2VfY29udGFpbmVyX3VsKQpAQCAtMTc4Niw4ICsxODA0 LDggQEAgc3RhdGljIGludCBteGZfZ2V0X3NvcnRlZF90YWJsZV9zZWdtZW50cyhNWEZDb250ZXh0 ICpteGYsIGludCAqbmJfc29ydGVkX3NlZ21lbnQKICAgICBpZiAoIW5iX3NlZ21lbnRzKQogICAg ICAgICByZXR1cm4gQVZFUlJPUl9JTlZBTElEREFUQTsKIAotICAgIGlmICghKHVuc29ydGVkX3Nl Z21lbnRzID0gYXZfY2FsbG9jKG5iX3NlZ21lbnRzLCBzaXplb2YoKnVuc29ydGVkX3NlZ21lbnRz KSkpIHx8Ci0gICAgICAgICEoKnNvcnRlZF9zZWdtZW50cyAgPSBhdl9jYWxsb2MobmJfc2VnbWVu dHMsIHNpemVvZigqKnNvcnRlZF9zZWdtZW50cykpKSkgeworICAgIGlmICghbXhmX2NhbGxvYyhu Yl9zZWdtZW50cywgdW5zb3J0ZWRfc2VnbWVudHMpIHx8CisgICAgICAgICFteGZfY2FsbG9jKG5i X3NlZ21lbnRzLCAqc29ydGVkX3NlZ21lbnRzKSkgewogICAgICAgICBhdl9mcmVlcChzb3J0ZWRf c2VnbWVudHMpOwogICAgICAgICBhdl9mcmVlKHVuc29ydGVkX3NlZ21lbnRzKTsKICAgICAgICAg cmV0dXJuIEFWRVJST1IoRU5PTUVNKTsKQEAgLTIwMzcsMTAgKzIwNTUsMTAgQEAgc3RhdGljIGlu dCBteGZfY29tcHV0ZV9wdHNlc19mYWtlX2luZGV4KE1YRkNvbnRleHQgKm14ZiwgTVhGSW5kZXhU YWJsZSAqaW5kZXhfdGEKICAgICBpZiAoaW5kZXhfdGFibGUtPm5iX3B0c2VzIDw9IDApCiAgICAg ICAgIHJldHVybiAwOwogCi0gICAgaWYgKCEoaW5kZXhfdGFibGUtPnB0c2VzICAgICAgPSBhdl9t YWxsb2NfYXJyYXkoaW5kZXhfdGFibGUtPm5iX3B0c2VzLCBzaXplb2YoaW50NjRfdCkpKSB8fAot ICAgICAgICAhKGluZGV4X3RhYmxlLT5mYWtlX2luZGV4ID0gYXZfY2FsbG9jKGluZGV4X3RhYmxl LT5uYl9wdHNlcywgc2l6ZW9mKEFWSW5kZXhFbnRyeSkpKSB8fAotICAgICAgICAhKGluZGV4X3Rh YmxlLT5vZmZzZXRzICAgID0gYXZfbWFsbG9jX2FycmF5KGluZGV4X3RhYmxlLT5uYl9wdHNlcywg c2l6ZW9mKGludDhfdCkpKSB8fAotICAgICAgICAhKGZsYWdzICAgICAgICAgICAgICAgICAgID0g YXZfbWFsbG9jX2FycmF5KGluZGV4X3RhYmxlLT5uYl9wdHNlcywgc2l6ZW9mKHVpbnQ4X3QpKSkp IHsKKyAgICBpZiAoIW14Zl9tYWxsb2NfYXJyYXkoaW5kZXhfdGFibGUtPm5iX3B0c2VzLCBpbmRl eF90YWJsZS0+cHRzZXMpIHx8CisgICAgICAgICFteGZfY2FsbG9jKGluZGV4X3RhYmxlLT5uYl9w dHNlcywgaW5kZXhfdGFibGUtPmZha2VfaW5kZXgpIHx8CisgICAgICAgICFteGZfbWFsbG9jX2Fy cmF5KGluZGV4X3RhYmxlLT5uYl9wdHNlcywgaW5kZXhfdGFibGUtPm9mZnNldHMpIHx8CisgICAg ICAgICFteGZfbWFsbG9jX2FycmF5KGluZGV4X3RhYmxlLT5uYl9wdHNlcywgZmxhZ3MpKSB7CiAg ICAgICAgIGF2X2ZyZWVwKCZpbmRleF90YWJsZS0+cHRzZXMpOwogICAgICAgICBhdl9mcmVlcCgm aW5kZXhfdGFibGUtPmZha2VfaW5kZXgpOwogICAgICAgICBhdl9mcmVlcCgmaW5kZXhfdGFibGUt Pm9mZnNldHMpOwpAQCAtMjE1NSw5ICsyMTczLDcgQEAgc3RhdGljIGludCBteGZfY29tcHV0ZV9p bmRleF90YWJsZXMoTVhGQ29udGV4dCAqbXhmKQogICAgICAgICB9CiAgICAgfQogCi0gICAgbXhm LT5pbmRleF90YWJsZXMgPSBhdl9jYWxsb2MobXhmLT5uYl9pbmRleF90YWJsZXMsCi0gICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZW9mKCpteGYtPmluZGV4X3RhYmxlcykpOwot ICAgIGlmICghbXhmLT5pbmRleF90YWJsZXMpIHsKKyAgICBpZiAoIW14Zl9jYWxsb2MobXhmLT5u Yl9pbmRleF90YWJsZXMsIG14Zi0+aW5kZXhfdGFibGVzKSkgewogICAgICAgICBhdl9sb2cobXhm LT5mYywgQVZfTE9HX0VSUk9SLCAiZmFpbGVkIHRvIGFsbG9jYXRlIGluZGV4IHRhYmxlc1xuIik7 CiAgICAgICAgIHJldCA9IEFWRVJST1IoRU5PTUVNKTsKICAgICAgICAgZ290byBmaW5pc2hfZGVj b2RpbmdfaW5kZXg7CkBAIC0yMTc4LDggKzIxOTQsNyBAQCBzdGF0aWMgaW50IG14Zl9jb21wdXRl X2luZGV4X3RhYmxlcyhNWEZDb250ZXh0ICpteGYpCiAgICAgICAgIE1YRlRyYWNrICpteGZfdHJh Y2sgPSBOVUxMOwogICAgICAgICBpbnQ2NF90IG9mZnNldF90ZW1wID0gMDsKIAotICAgICAgICB0 LT5zZWdtZW50cyA9IGF2X2NhbGxvYyh0LT5uYl9zZWdtZW50cywgc2l6ZW9mKCp0LT5zZWdtZW50 cykpOwotICAgICAgICBpZiAoIXQtPnNlZ21lbnRzKSB7CisgICAgICAgIGlmICghbXhmX2NhbGxv Yyh0LT5uYl9zZWdtZW50cywgdC0+c2VnbWVudHMpKSB7CiAgICAgICAgICAgICBhdl9sb2cobXhm LT5mYywgQVZfTE9HX0VSUk9SLCAiZmFpbGVkIHRvIGFsbG9jYXRlIEluZGV4VGFibGVTZWdtZW50 IgogICAgICAgICAgICAgICAgICAgICIgcG9pbnRlciBhcnJheVxuIik7CiAgICAgICAgICAgICBy ZXQgPSBBVkVSUk9SKEVOT01FTSk7CkBAIC0yMTk4LDcgKzIyMTMsNyBAQCBzdGF0aWMgaW50IG14 Zl9jb21wdXRlX2luZGV4X3RhYmxlcyhNWEZDb250ZXh0ICpteGYpCiAgICAgICAgICAgICBnb3Rv IGZpbmlzaF9kZWNvZGluZ19pbmRleDsKIAogICAgICAgICBmb3IgKGludCBrID0gMDsgayA8IG14 Zi0+ZmMtPm5iX3N0cmVhbXM7IGsrKykgewotICAgICAgICAgICAgTVhGVHJhY2sgKnRyYWNrID0g bXhmLT5mYy0+c3RyZWFtc1trXS0+cHJpdl9kYXRhOworICAgICAgICAgICAgTVhGVHJhY2sgKnRy YWNrID0gKE1YRlRyYWNrKilteGYtPmZjLT5zdHJlYW1zW2tdLT5wcml2X2RhdGE7CiAgICAgICAg ICAgICBpZiAodHJhY2sgJiYgdHJhY2stPmluZGV4X3NpZCA9PSB0LT5pbmRleF9zaWQpIHsKICAg ICAgICAgICAgICAgICBteGZfdHJhY2sgPSB0cmFjazsKICAgICAgICAgICAgICAgICBicmVhazsK QEAgLTIzMDUsMjcgKzIzMjAsMjMgQEAgc3RhdGljIGludCBteGZfYWRkX3RpbWVjb2RlX21ldGFk YXRhKEFWRGljdGlvbmFyeSAqKnBtLCBjb25zdCBjaGFyICprZXksIEFWVGltZWMKIAogc3RhdGlj IE1YRlRpbWVjb2RlQ29tcG9uZW50KiBteGZfcmVzb2x2ZV90aW1lY29kZV9jb21wb25lbnQoTVhG Q29udGV4dCAqbXhmLCBVSUQgKnN0cm9uZ19yZWYpCiB7Ci0gICAgTVhGVGltZWNvZGVDb21wb25l bnQgKnRpbWVjb2RlOwotICAgIE1YRlB1bGxkb3duQ29tcG9uZW50ICpwdWxsZG93bjsKLQotICAg IHRpbWVjb2RlID0gbXhmX3Jlc29sdmVfc3Ryb25nX3JlZihteGYsIHN0cm9uZ19yZWYsIFRpbWVj b2RlQ29tcG9uZW50KTsKKyAgICBNWEZUaW1lY29kZUNvbXBvbmVudCAqdGltZWNvZGUgPSBteGZf cmVzb2x2ZV9zdHJvbmdfcmVmPE1YRlRpbWVjb2RlQ29tcG9uZW50PihteGYsIHN0cm9uZ19yZWYp OwogICAgIGlmICh0aW1lY29kZSkKICAgICAgICAgcmV0dXJuIHRpbWVjb2RlOwogCi0gICAgcHVs bGRvd24gPSBteGZfcmVzb2x2ZV9zdHJvbmdfcmVmKG14Ziwgc3Ryb25nX3JlZiwgUHVsbGRvd25D b21wb25lbnQpOworICAgIE1YRlB1bGxkb3duQ29tcG9uZW50ICpwdWxsZG93biA9IG14Zl9yZXNv bHZlX3N0cm9uZ19yZWY8TVhGUHVsbGRvd25Db21wb25lbnQ+KG14Ziwgc3Ryb25nX3JlZik7CiAg ICAgaWYgKHB1bGxkb3duKQotICAgICAgICByZXR1cm4gbXhmX3Jlc29sdmVfc3Ryb25nX3JlZiht eGYsICZwdWxsZG93bi0+aW5wdXRfc2VnbWVudF9yZWYsIFRpbWVjb2RlQ29tcG9uZW50KTsKKyAg ICAgICAgcmV0dXJuIG14Zl9yZXNvbHZlX3N0cm9uZ19yZWY8TVhGVGltZWNvZGVDb21wb25lbnQ+ KG14ZiwgJnB1bGxkb3duLT5pbnB1dF9zZWdtZW50X3JlZik7CiAKICAgICByZXR1cm4gTlVMTDsK IH0KIAotc3RhdGljIE1YRlBhY2thZ2UqIG14Zl9yZXNvbHZlX3NvdXJjZV9wYWNrYWdlKE1YRkNv bnRleHQgKm14ZiwgVUlEIHBhY2thZ2VfdWwsIFVJRCBwYWNrYWdlX3VpZCkKK3N0YXRpYyBNWEZT b3VyY2VQYWNrYWdlKiBteGZfcmVzb2x2ZV9zb3VyY2VfcGFja2FnZShNWEZDb250ZXh0ICpteGYs IFVJRCBwYWNrYWdlX3VsLCBVSUQgcGFja2FnZV91aWQpCiB7Ci0gICAgTVhGUGFja2FnZSAqcGFj a2FnZSA9IE5VTEw7CiAgICAgaW50IGk7CiAKICAgICBmb3IgKGkgPSAwOyBpIDwgbXhmLT5wYWNr YWdlc19jb3VudDsgaSsrKSB7Ci0gICAgICAgIHBhY2thZ2UgPSBteGZfcmVzb2x2ZV9zdHJvbmdf cmVmKG14ZiwgJm14Zi0+cGFja2FnZXNfcmVmc1tpXSwgU291cmNlUGFja2FnZSk7CisgICAgICAg IE1YRlNvdXJjZVBhY2thZ2UgKnBhY2thZ2UgPSBteGZfcmVzb2x2ZV9zdHJvbmdfcmVmPE1YRlNv dXJjZVBhY2thZ2U+KG14ZiwgJm14Zi0+cGFja2FnZXNfcmVmc1tpXSk7CiAgICAgICAgIGlmICgh cGFja2FnZSkKICAgICAgICAgICAgIGNvbnRpbnVlOwogCkBAIC0yMzM3LDE0ICsyMzQ4LDE0IEBA IHN0YXRpYyBNWEZQYWNrYWdlKiBteGZfcmVzb2x2ZV9zb3VyY2VfcGFja2FnZShNWEZDb250ZXh0 ICpteGYsIFVJRCBwYWNrYWdlX3VsLCBVCiAKIHN0YXRpYyBNWEZEZXNjcmlwdG9yKiBteGZfcmVz b2x2ZV9kZXNjcmlwdG9yKE1YRkNvbnRleHQgKm14ZiwgVUlEICpzdHJvbmdfcmVmLCBpbnQgdHJh Y2tfaWQpCiB7Ci0gICAgTVhGRGVzY3JpcHRvciAqZGVzY3JpcHRvciA9IG14Zl9yZXNvbHZlX3N0 cm9uZ19yZWYobXhmLCBzdHJvbmdfcmVmLCBEZXNjcmlwdG9yKTsKKyAgICBNWEZEZXNjcmlwdG9y ICpkZXNjcmlwdG9yID0gbXhmX3Jlc29sdmVfc3Ryb25nX3JlZjxNWEZEZXNjcmlwdG9yPihteGYs IHN0cm9uZ19yZWYpOwogICAgIGlmIChkZXNjcmlwdG9yKQogICAgICAgICByZXR1cm4gZGVzY3Jp cHRvcjsKIAotICAgIGRlc2NyaXB0b3IgPSBteGZfcmVzb2x2ZV9zdHJvbmdfcmVmKG14Ziwgc3Ry b25nX3JlZiwgTXVsdGlwbGVEZXNjcmlwdG9yKTsKLSAgICBpZiAoZGVzY3JpcHRvcikgewotICAg ICAgICBmb3IgKGludCBpID0gMDsgaSA8IGRlc2NyaXB0b3ItPmZpbGVfZGVzY3JpcHRvcnNfY291 bnQ7IGkrKykgewotICAgICAgICAgICAgTVhGRGVzY3JpcHRvciAqZmlsZV9kZXNjcmlwdG9yID0g bXhmX3Jlc29sdmVfc3Ryb25nX3JlZihteGYsICZkZXNjcmlwdG9yLT5maWxlX2Rlc2NyaXB0b3Jz X3JlZnNbaV0sIERlc2NyaXB0b3IpOworICAgIE1YRk11bHRpcGxlRGVzY3JpcHRvciAqbXVsdGlf ZGVzY3JpcHRvciA9IG14Zl9yZXNvbHZlX3N0cm9uZ19yZWY8TVhGTXVsdGlwbGVEZXNjcmlwdG9y PihteGYsIHN0cm9uZ19yZWYpOworICAgIGlmIChtdWx0aV9kZXNjcmlwdG9yKSB7CisgICAgICAg IGZvciAoaW50IGkgPSAwOyBpIDwgbXVsdGlfZGVzY3JpcHRvci0+ZmlsZV9kZXNjcmlwdG9yc19j b3VudDsgaSsrKSB7CisgICAgICAgICAgICBNWEZEZXNjcmlwdG9yICpmaWxlX2Rlc2NyaXB0b3Ig PSBteGZfcmVzb2x2ZV9zdHJvbmdfcmVmPE1YRkRlc2NyaXB0b3I+KG14ZiwgJm11bHRpX2Rlc2Ny aXB0b3ItPmZpbGVfZGVzY3JpcHRvcnNfcmVmc1tpXSk7CiAKICAgICAgICAgICAgIGlmICghZmls ZV9kZXNjcmlwdG9yKSB7CiAgICAgICAgICAgICAgICAgYXZfbG9nKG14Zi0+ZmMsIEFWX0xPR19F UlJPUiwgImNvdWxkIG5vdCByZXNvbHZlIGZpbGUgZGVzY3JpcHRvciBzdHJvbmcgcmVmXG4iKTsK QEAgLTIzNTksMzUgKzIzNzAsMzIgQEAgc3RhdGljIE1YRkRlc2NyaXB0b3IqIG14Zl9yZXNvbHZl X2Rlc2NyaXB0b3IoTVhGQ29udGV4dCAqbXhmLCBVSUQgKnN0cm9uZ19yZWYsIGkKICAgICByZXR1 cm4gTlVMTDsKIH0KIAotc3RhdGljIE1YRlN0cnVjdHVyYWxDb21wb25lbnQqIG14Zl9yZXNvbHZl X3NvdXJjZWNsaXAoTVhGQ29udGV4dCAqbXhmLCBVSUQgKnN0cm9uZ19yZWYpCitzdGF0aWMgTVhG U291cmNlQ2xpcCogbXhmX3Jlc29sdmVfc291cmNlY2xpcChNWEZDb250ZXh0ICpteGYsIFVJRCAq c3Ryb25nX3JlZikKIHsKLSAgICBNWEZTdHJ1Y3R1cmFsQ29tcG9uZW50ICpjb21wb25lbnQgPSBO VUxMOwotICAgIE1YRlBhY2thZ2UgKnBhY2thZ2UgPSBOVUxMOwotICAgIE1YRkRlc2NyaXB0b3Ig KmRlc2NyaXB0b3IgPSBOVUxMOwotICAgIE1YRkVzc2VuY2VHcm91cCAqZXNzZW5jZV9ncm91cDsK ICAgICBpbnQgaTsKIAotICAgIGNvbXBvbmVudCA9IG14Zl9yZXNvbHZlX3N0cm9uZ19yZWYobXhm LCBzdHJvbmdfcmVmLCBTb3VyY2VDbGlwKTsKLSAgICBpZiAoY29tcG9uZW50KQotICAgICAgICBy ZXR1cm4gY29tcG9uZW50OworICAgIE1YRlNvdXJjZUNsaXAgKnNvdXJjZV9jbGlwID0gbXhmX3Jl c29sdmVfc3Ryb25nX3JlZjxNWEZTb3VyY2VDbGlwPihteGYsIHN0cm9uZ19yZWYpOworICAgIGlm IChzb3VyY2VfY2xpcCkKKyAgICAgICAgcmV0dXJuIHNvdXJjZV9jbGlwOwogCi0gICAgZXNzZW5j ZV9ncm91cCA9IG14Zl9yZXNvbHZlX3N0cm9uZ19yZWYobXhmLCBzdHJvbmdfcmVmLCBFc3NlbmNl R3JvdXApOworICAgIE1YRkVzc2VuY2VHcm91cCAqZXNzZW5jZV9ncm91cCA9IG14Zl9yZXNvbHZl X3N0cm9uZ19yZWY8TVhGRXNzZW5jZUdyb3VwPihteGYsIHN0cm9uZ19yZWYpOwogICAgIGlmICgh ZXNzZW5jZV9ncm91cCkKICAgICAgICAgcmV0dXJuIE5VTEw7CiAKICAgICAvKiBlc3NlbmNlIGdy b3VwcyBjb250YWlucyBtdWx0aXBsZSByZXByZXNlbnRhdGlvbnMgb2YgdGhlIHNhbWUgbWVkaWEs CiAgICAgICAgdGhpcyByZXR1cm4gdGhlIGZpcnN0IGNvbXBvbmVudHMgd2l0aCBhIHZhbGlkIERl c2NyaXB0b3IgdHlwaWNhbGx5IGluZGV4IDAgKi8KICAgICBmb3IgKGkgPTA7IGkgPCBlc3NlbmNl X2dyb3VwLT5zdHJ1Y3R1cmFsX2NvbXBvbmVudHNfY291bnQ7IGkrKyl7Ci0gICAgICAgIGNvbXBv bmVudCA9IG14Zl9yZXNvbHZlX3N0cm9uZ19yZWYobXhmLCAmZXNzZW5jZV9ncm91cC0+c3RydWN0 dXJhbF9jb21wb25lbnRzX3JlZnNbaV0sIFNvdXJjZUNsaXApOwotICAgICAgICBpZiAoIWNvbXBv bmVudCkKKyAgICAgICAgc291cmNlX2NsaXAgPSBteGZfcmVzb2x2ZV9zdHJvbmdfcmVmPE1YRlNv dXJjZUNsaXA+KG14ZiwgJmVzc2VuY2VfZ3JvdXAtPnN0cnVjdHVyYWxfY29tcG9uZW50c19yZWZz W2ldKTsKKyAgICAgICAgaWYgKCFzb3VyY2VfY2xpcCkKICAgICAgICAgICAgIGNvbnRpbnVlOwog Ci0gICAgICAgIGlmICghKHBhY2thZ2UgPSBteGZfcmVzb2x2ZV9zb3VyY2VfcGFja2FnZShteGYs IGNvbXBvbmVudC0+c291cmNlX3BhY2thZ2VfdWwsIGNvbXBvbmVudC0+c291cmNlX3BhY2thZ2Vf dWlkKSkpCisgICAgICAgIE1YRlNvdXJjZVBhY2thZ2UgKnNvdXJjZV9wYWNrYWdlOworICAgICAg ICBpZiAoIShzb3VyY2VfcGFja2FnZSA9IG14Zl9yZXNvbHZlX3NvdXJjZV9wYWNrYWdlKG14Ziwg c291cmNlX2NsaXAtPnNvdXJjZV9wYWNrYWdlX3VsLCBzb3VyY2VfY2xpcC0+c291cmNlX3BhY2th Z2VfdWlkKSkpCiAgICAgICAgICAgICBjb250aW51ZTsKIAotICAgICAgICBkZXNjcmlwdG9yID0g bXhmX3Jlc29sdmVfc3Ryb25nX3JlZihteGYsICZwYWNrYWdlLT5kZXNjcmlwdG9yX3JlZiwgRGVz Y3JpcHRvcik7CisgICAgICAgIE1YRkRlc2NyaXB0b3IgKmRlc2NyaXB0b3IgPSBteGZfcmVzb2x2 ZV9zdHJvbmdfcmVmPE1YRkRlc2NyaXB0b3I+KG14ZiwgJnNvdXJjZV9wYWNrYWdlLT5kZXNjcmlw dG9yX3JlZik7CiAgICAgICAgIGlmIChkZXNjcmlwdG9yKQotICAgICAgICAgICAgcmV0dXJuIGNv bXBvbmVudDsKKyAgICAgICAgICAgIHJldHVybiBzb3VyY2VfY2xpcDsKICAgICB9CiAKICAgICBy ZXR1cm4gTlVMTDsKQEAgLTIzOTUsMTIgKzI0MDMsMTEgQEAgc3RhdGljIE1YRlN0cnVjdHVyYWxD b21wb25lbnQqIG14Zl9yZXNvbHZlX3NvdXJjZWNsaXAoTVhGQ29udGV4dCAqbXhmLCBVSUQgKnN0 cm8KIAogc3RhdGljIGludCBteGZfcGFyc2VfcGFja2FnZV9jb21tZW50cyhNWEZDb250ZXh0ICpt eGYsIEFWRGljdGlvbmFyeSAqKnBtLCBNWEZQYWNrYWdlICpwYWNrYWdlKQogewotICAgIE1YRlRh Z2dlZFZhbHVlICp0YWc7CiAgICAgaW50IGk7CiAgICAgY2hhciAqa2V5ID0gTlVMTDsKIAogICAg IGZvciAoaSA9IDA7IGkgPCBwYWNrYWdlLT5jb21tZW50X2NvdW50OyBpKyspIHsKLSAgICAgICAg dGFnID0gbXhmX3Jlc29sdmVfc3Ryb25nX3JlZihteGYsICZwYWNrYWdlLT5jb21tZW50X3JlZnNb aV0sIFRhZ2dlZFZhbHVlKTsKKyAgICAgICAgTVhGVGFnZ2VkVmFsdWUgKnRhZyA9IG14Zl9yZXNv bHZlX3N0cm9uZ19yZWY8TVhGVGFnZ2VkVmFsdWU+KG14ZiwgJnBhY2thZ2UtPmNvbW1lbnRfcmVm c1tpXSk7CiAgICAgICAgIGlmICghdGFnIHx8ICF0YWctPm5hbWUgfHwgIXRhZy0+dmFsdWUpCiAg ICAgICAgICAgICBjb250aW51ZTsKIApAQCAtMjQxNyw3ICsyNDI0LDYgQEAgc3RhdGljIGludCBt eGZfcGFyc2VfcGh5c2ljYWxfc291cmNlX3BhY2thZ2UoTVhGQ29udGV4dCAqbXhmLCBNWEZUcmFj ayAqc291cmNlX3QKIHsKICAgICBNWEZQYWNrYWdlICpwaHlzaWNhbF9wYWNrYWdlID0gTlVMTDsK ICAgICBNWEZUcmFjayAqcGh5c2ljYWxfdHJhY2sgPSBOVUxMOwotICAgIE1YRlN0cnVjdHVyYWxD b21wb25lbnQgKnNvdXJjZWNsaXAgPSBOVUxMOwogICAgIE1YRlRpbWVjb2RlQ29tcG9uZW50ICpt eGZfdGMgPSBOVUxMOwogICAgIGludCBpLCBqLCBrOwogICAgIEFWVGltZWNvZGUgdGM7CkBAIC0y NDI1LDcgKzI0MzEsNyBAQCBzdGF0aWMgaW50IG14Zl9wYXJzZV9waHlzaWNhbF9zb3VyY2VfcGFj a2FnZShNWEZDb250ZXh0ICpteGYsIE1YRlRyYWNrICpzb3VyY2VfdAogICAgIGludDY0X3Qgc3Rh cnRfcG9zaXRpb247CiAKICAgICBmb3IgKGkgPSAwOyBpIDwgc291cmNlX3RyYWNrLT5zZXF1ZW5j ZS0+c3RydWN0dXJhbF9jb21wb25lbnRzX2NvdW50OyBpKyspIHsKLSAgICAgICAgc291cmNlY2xp cCA9IG14Zl9yZXNvbHZlX3N0cm9uZ19yZWYobXhmLCAmc291cmNlX3RyYWNrLT5zZXF1ZW5jZS0+ c3RydWN0dXJhbF9jb21wb25lbnRzX3JlZnNbaV0sIFNvdXJjZUNsaXApOworICAgICAgICBNWEZT dHJ1Y3R1cmFsQ29tcG9uZW50ICpzb3VyY2VjbGlwID0gbXhmX3Jlc29sdmVfc3Ryb25nX3JlZjxN WEZTb3VyY2VDbGlwPihteGYsICZzb3VyY2VfdHJhY2stPnNlcXVlbmNlLT5zdHJ1Y3R1cmFsX2Nv bXBvbmVudHNfcmVmc1tpXSk7CiAgICAgICAgIGlmICghc291cmNlY2xpcCkKICAgICAgICAgICAg IGNvbnRpbnVlOwogCkBAIC0yNDQyLDEyICsyNDQ4LDEyIEBAIHN0YXRpYyBpbnQgbXhmX3BhcnNl X3BoeXNpY2FsX3NvdXJjZV9wYWNrYWdlKE1YRkNvbnRleHQgKm14ZiwgTVhGVHJhY2sgKnNvdXJj ZV90CiAgICAgICAgICAqIHRvIHRoZSBzdGFydF9mcmFtZSBvZiB0aGUgdGltZWNvZGUgY29tcG9u ZW50IGxvY2F0ZWQgb24gb25lIG9mIHRoZSB0cmFja3Mgb2YgdGhlIHBoeXNpY2FsIHNvdXJjZSBw YWNrYWdlLgogICAgICAgICAgKi8KICAgICAgICAgZm9yIChqID0gMDsgaiA8IHBoeXNpY2FsX3Bh Y2thZ2UtPnRyYWNrc19jb3VudDsgaisrKSB7Ci0gICAgICAgICAgICBpZiAoIShwaHlzaWNhbF90 cmFjayA9IG14Zl9yZXNvbHZlX3N0cm9uZ19yZWYobXhmLCAmcGh5c2ljYWxfcGFja2FnZS0+dHJh Y2tzX3JlZnNbal0sIFRyYWNrKSkpIHsKKyAgICAgICAgICAgIGlmICghKHBoeXNpY2FsX3RyYWNr ID0gbXhmX3Jlc29sdmVfc3Ryb25nX3JlZjxNWEZUcmFjaz4obXhmLCAmcGh5c2ljYWxfcGFja2Fn ZS0+dHJhY2tzX3JlZnNbal0pKSkgewogICAgICAgICAgICAgICAgIGF2X2xvZyhteGYtPmZjLCBB Vl9MT0dfRVJST1IsICJjb3VsZCBub3QgcmVzb2x2ZSBzb3VyY2UgdHJhY2sgc3Ryb25nIHJlZlxu Iik7CiAgICAgICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgICAgICB9CiAKLSAgICAgICAg ICAgIGlmICghKHBoeXNpY2FsX3RyYWNrLT5zZXF1ZW5jZSA9IG14Zl9yZXNvbHZlX3N0cm9uZ19y ZWYobXhmLCAmcGh5c2ljYWxfdHJhY2stPnNlcXVlbmNlX3JlZiwgU2VxdWVuY2UpKSkgeworICAg ICAgICAgICAgaWYgKCEocGh5c2ljYWxfdHJhY2stPnNlcXVlbmNlID0gbXhmX3Jlc29sdmVfc3Ry b25nX3JlZjxNWEZTZXF1ZW5jZT4obXhmLCAmcGh5c2ljYWxfdHJhY2stPnNlcXVlbmNlX3JlZikp KSB7CiAgICAgICAgICAgICAgICAgYXZfbG9nKG14Zi0+ZmMsIEFWX0xPR19FUlJPUiwgImNvdWxk IG5vdCByZXNvbHZlIHNvdXJjZSB0cmFjayBzZXF1ZW5jZSBzdHJvbmcgcmVmXG4iKTsKICAgICAg ICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgICAgIH0KQEAgLTI0ODgsMTkgKzI0OTQsMTkg QEAgc3RhdGljIGludCBteGZfcGFyc2VfcGh5c2ljYWxfc291cmNlX3BhY2thZ2UoTVhGQ29udGV4 dCAqbXhmLCBNWEZUcmFjayAqc291cmNlX3QKIAogc3RhdGljIGludCBteGZfYWRkX21ldGFkYXRh X3N0cmVhbShNWEZDb250ZXh0ICpteGYsIE1YRlRyYWNrICp0cmFjaykKIHsKLSAgICBNWEZTdHJ1 Y3R1cmFsQ29tcG9uZW50ICpjb21wb25lbnQgPSBOVUxMOworICAgIE1YRlNvdXJjZUNsaXAgKnNv dXJjZV9jbGlwID0gTlVMTDsKICAgICBjb25zdCBNWEZDb2RlY1VMICpjb2RlY191bCA9IE5VTEw7 CiAgICAgTVhGUGFja2FnZSB0bXBfcGFja2FnZTsKICAgICBBVlN0cmVhbSAqc3Q7CiAgICAgaW50 IGo7CiAKICAgICBmb3IgKGogPSAwOyBqIDwgdHJhY2stPnNlcXVlbmNlLT5zdHJ1Y3R1cmFsX2Nv bXBvbmVudHNfY291bnQ7IGorKykgewotICAgICAgICBjb21wb25lbnQgPSBteGZfcmVzb2x2ZV9z b3VyY2VjbGlwKG14ZiwgJnRyYWNrLT5zZXF1ZW5jZS0+c3RydWN0dXJhbF9jb21wb25lbnRzX3Jl ZnNbal0pOwotICAgICAgICBpZiAoIWNvbXBvbmVudCkKKyAgICAgICAgc291cmNlX2NsaXAgPSBt eGZfcmVzb2x2ZV9zb3VyY2VjbGlwKG14ZiwgJnRyYWNrLT5zZXF1ZW5jZS0+c3RydWN0dXJhbF9j b21wb25lbnRzX3JlZnNbal0pOworICAgICAgICBpZiAoIXNvdXJjZV9jbGlwKQogICAgICAgICAg ICAgY29udGludWU7CiAgICAgICAgIGJyZWFrOwogICAgIH0KLSAgICBpZiAoIWNvbXBvbmVudCkK KyAgICBpZiAoIXNvdXJjZV9jbGlwKQogICAgICAgICByZXR1cm4gMDsKIAogICAgIHN0ID0gYXZm b3JtYXRfbmV3X3N0cmVhbShteGYtPmZjLCBOVUxMKTsKQEAgLTI1MTMsMTQgKzI1MTksMTQgQEAg c3RhdGljIGludCBteGZfYWRkX21ldGFkYXRhX3N0cmVhbShNWEZDb250ZXh0ICpteGYsIE1YRlRy YWNrICp0cmFjaykKICAgICBzdC0+Y29kZWNwYXItPmNvZGVjX2lkID0gQVZfQ09ERUNfSURfTk9O RTsKICAgICBzdC0+aWQgPSB0cmFjay0+dHJhY2tfaWQ7CiAKLSAgICBtZW1jcHkoJnRtcF9wYWNr YWdlLnBhY2thZ2VfdWwsIGNvbXBvbmVudC0+c291cmNlX3BhY2thZ2VfdWwsIDE2KTsKLSAgICBt ZW1jcHkoJnRtcF9wYWNrYWdlLnBhY2thZ2VfdWlkLCBjb21wb25lbnQtPnNvdXJjZV9wYWNrYWdl X3VpZCwgMTYpOworICAgIG1lbWNweSgmdG1wX3BhY2thZ2UucGFja2FnZV91bCwgc291cmNlX2Ns aXAtPnNvdXJjZV9wYWNrYWdlX3VsLCAxNik7CisgICAgbWVtY3B5KCZ0bXBfcGFja2FnZS5wYWNr YWdlX3VpZCwgc291cmNlX2NsaXAtPnNvdXJjZV9wYWNrYWdlX3VpZCwgMTYpOwogICAgIG14Zl9h ZGRfdW1pZF9tZXRhZGF0YSgmc3QtPm1ldGFkYXRhLCAiZmlsZV9wYWNrYWdlX3VtaWQiLCAmdG1w X3BhY2thZ2UpOwogICAgIGlmICh0cmFjay0+bmFtZSAmJiB0cmFjay0+bmFtZVswXSkKICAgICAg ICAgYXZfZGljdF9zZXQoJnN0LT5tZXRhZGF0YSwgInRyYWNrX25hbWUiLCB0cmFjay0+bmFtZSwg MCk7CiAKICAgICBjb2RlY191bCA9IG14Zl9nZXRfY29kZWNfdWwoZmZfbXhmX2RhdGFfZGVmaW5p dGlvbl91bHMsICZ0cmFjay0+c2VxdWVuY2UtPmRhdGFfZGVmaW5pdGlvbl91bCk7Ci0gICAgYXZf ZGljdF9zZXQoJnN0LT5tZXRhZGF0YSwgImRhdGFfdHlwZSIsIGF2X2dldF9tZWRpYV90eXBlX3N0 cmluZyhjb2RlY191bC0+aWQpLCAwKTsKKyAgICBhdl9kaWN0X3NldCgmc3QtPm1ldGFkYXRhLCAi ZGF0YV90eXBlIiwgYXZfZ2V0X21lZGlhX3R5cGVfc3RyaW5nKChBVk1lZGlhVHlwZSljb2RlY191 bC0+aWQpLCAwKTsKICAgICByZXR1cm4gMDsKIH0KIApAQCAtMjU4Myw3ICsyNTg5LDcgQEAgc3Rh dGljIE1YRk1DQVN1YkRlc2NyaXB0b3IgKmZpbmRfbWNhX2xpbmtfaWQoTVhGQ29udGV4dCAqbXhm LCBlbnVtIE1YRk1ldGFkYXRhU2UKIHN0YXRpYyB2b2lkIHBhcnNlX2ZmdjFfc3ViX2Rlc2NyaXB0 b3IoTVhGQ29udGV4dCAqbXhmLCBNWEZUcmFjayAqc291cmNlX3RyYWNrLCBNWEZEZXNjcmlwdG9y ICpkZXNjcmlwdG9yLCBBVlN0cmVhbSAqc3QpCiB7CiAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBk ZXNjcmlwdG9yLT5zdWJfZGVzY3JpcHRvcnNfY291bnQ7IGkrKykgewotICAgICAgICBNWEZGRlYx U3ViRGVzY3JpcHRvciAqZmZ2MV9zdWJfZGVzY3JpcHRvciA9IG14Zl9yZXNvbHZlX3N0cm9uZ19y ZWYobXhmLCAmZGVzY3JpcHRvci0+c3ViX2Rlc2NyaXB0b3JzX3JlZnNbaV0sIEZGVjFTdWJEZXNj cmlwdG9yKTsKKyAgICAgICAgTVhGRkZWMVN1YkRlc2NyaXB0b3IgKmZmdjFfc3ViX2Rlc2NyaXB0 b3IgPSBteGZfcmVzb2x2ZV9zdHJvbmdfcmVmPE1YRkZGVjFTdWJEZXNjcmlwdG9yPihteGYsICZk ZXNjcmlwdG9yLT5zdWJfZGVzY3JpcHRvcnNfcmVmc1tpXSk7CiAgICAgICAgIGlmIChmZnYxX3N1 Yl9kZXNjcmlwdG9yID09IE5VTEwpCiAgICAgICAgICAgICBjb250aW51ZTsKIApAQCAtMjYwNyw3 ICsyNjEzLDcgQEAgc3RhdGljIGludCBwYXJzZV9tY2FfbGFiZWxzKE1YRkNvbnRleHQgKm14Ziwg TVhGVHJhY2sgKnNvdXJjZV90cmFjaywgTVhGRGVzY3JpcHQKICAgICBmb3IgKGludCBpID0gMDsg aSA8IGRlc2NyaXB0b3ItPnN1Yl9kZXNjcmlwdG9yc19jb3VudDsgaSsrKSB7CiAgICAgICAgIGNo YXIgKmNoYW5uZWxfbGFuZ3VhZ2U7CiAKLSAgICAgICAgTVhGTUNBU3ViRGVzY3JpcHRvciAqbGFi ZWwgPSBteGZfcmVzb2x2ZV9zdHJvbmdfcmVmKG14ZiwgJmRlc2NyaXB0b3ItPnN1Yl9kZXNjcmlw dG9yc19yZWZzW2ldLCBBdWRpb0NoYW5uZWxMYWJlbFN1YkRlc2NyaXB0b3IpOworICAgICAgICBN WEZBdWRpb0NoYW5uZWxMYWJlbFN1YkRlc2NyaXB0b3IgKmxhYmVsID0gbXhmX3Jlc29sdmVfc3Ry b25nX3JlZjxNWEZBdWRpb0NoYW5uZWxMYWJlbFN1YkRlc2NyaXB0b3I+KG14ZiwgJmRlc2NyaXB0 b3ItPnN1Yl9kZXNjcmlwdG9yc19yZWZzW2ldKTsKICAgICAgICAgaWYgKGxhYmVsID09IE5VTEwp CiAgICAgICAgICAgICBjb250aW51ZTsKIApAQCAtMjY3NSw3ICsyNjgxLDcgQEAgc3RhdGljIGlu dCBwYXJzZV9tY2FfbGFiZWxzKE1YRkNvbnRleHQgKm14ZiwgTVhGVHJhY2sgKnNvdXJjZV90cmFj aywgTVhGRGVzY3JpcHQKICAgICAgICAgKmFzdCA9IHNlcnZpY2VfdHlwZTsKICAgICB9CiAKLSAg ICByZXQgPSBhdl9jaGFubmVsX2xheW91dF9yZXR5cGUoY2hfbGF5b3V0LCAwLCBBVl9DSEFOTkVM X0xBWU9VVF9SRVRZUEVfRkxBR19DQU5PTklDQUwpOworICAgIHJldCA9IGF2X2NoYW5uZWxfbGF5 b3V0X3JldHlwZShjaF9sYXlvdXQsIEFWX0NIQU5ORUxfT1JERVJfVU5TUEVDLCBBVl9DSEFOTkVM X0xBWU9VVF9SRVRZUEVfRkxBR19DQU5PTklDQUwpOwogICAgIGlmIChyZXQgPCAwKQogICAgICAg ICByZXR1cm4gcmV0OwogCkBAIC0yNjg0LDEyICsyNjkwLDEyIEBAIHN0YXRpYyBpbnQgcGFyc2Vf bWNhX2xhYmVscyhNWEZDb250ZXh0ICpteGYsIE1YRlRyYWNrICpzb3VyY2VfdHJhY2ssIE1YRkRl c2NyaXB0CiAKIHN0YXRpYyBpbnQgbXhmX3BhcnNlX3N0cnVjdHVyYWxfbWV0YWRhdGEoTVhGQ29u dGV4dCAqbXhmKQogewotICAgIE1YRlBhY2thZ2UgKm1hdGVyaWFsX3BhY2thZ2UgPSBOVUxMOwor ICAgIE1YRk1hdGVyaWFsUGFja2FnZSAqbWF0ZXJpYWxfcGFja2FnZSA9IE5VTEw7CiAgICAgaW50 IGssIHJldDsKIAogICAgIC8qIFRPRE86IGhhbmRsZSBtdWx0aXBsZSBtYXRlcmlhbCBwYWNrYWdl cyAoT1AzeCkgKi8KICAgICBmb3IgKGludCBpID0gMDsgaSA8IG14Zi0+cGFja2FnZXNfY291bnQ7 IGkrKykgewotICAgICAgICBtYXRlcmlhbF9wYWNrYWdlID0gbXhmX3Jlc29sdmVfc3Ryb25nX3Jl ZihteGYsICZteGYtPnBhY2thZ2VzX3JlZnNbaV0sIE1hdGVyaWFsUGFja2FnZSk7CisgICAgICAg IG1hdGVyaWFsX3BhY2thZ2UgPSBteGZfcmVzb2x2ZV9zdHJvbmdfcmVmPE1YRk1hdGVyaWFsUGFj a2FnZT4obXhmLCAmbXhmLT5wYWNrYWdlc19yZWZzW2ldKTsKICAgICAgICAgaWYgKG1hdGVyaWFs X3BhY2thZ2UpIGJyZWFrOwogICAgIH0KICAgICBpZiAoIW1hdGVyaWFsX3BhY2thZ2UpIHsKQEAg LTI3MTksMzAgKzI3MjUsMjggQEAgc3RhdGljIGludCBteGZfcGFyc2Vfc3RydWN0dXJhbF9tZXRh ZGF0YShNWEZDb250ZXh0ICpteGYpCiAgICAgICAgIEFWVGltZWNvZGUgdGM7CiAgICAgICAgIGlu dCBmbGFnczsKIAotICAgICAgICBpZiAoIShtYXRlcmlhbF90cmFjayA9IG14Zl9yZXNvbHZlX3N0 cm9uZ19yZWYobXhmLCAmbWF0ZXJpYWxfcGFja2FnZS0+dHJhY2tzX3JlZnNbaV0sIFRyYWNrKSkp IHsKKyAgICAgICAgaWYgKCEobWF0ZXJpYWxfdHJhY2sgPSBteGZfcmVzb2x2ZV9zdHJvbmdfcmVm PE1YRlRyYWNrPihteGYsICZtYXRlcmlhbF9wYWNrYWdlLT50cmFja3NfcmVmc1tpXSkpKSB7CiAg ICAgICAgICAgICBhdl9sb2cobXhmLT5mYywgQVZfTE9HX0VSUk9SLCAiY291bGQgbm90IHJlc29s dmUgbWF0ZXJpYWwgdHJhY2sgc3Ryb25nIHJlZlxuIik7CiAgICAgICAgICAgICBjb250aW51ZTsK ICAgICAgICAgfQogCi0gICAgICAgIGlmICgoY29tcG9uZW50ID0gbXhmX3Jlc29sdmVfc3Ryb25n X3JlZihteGYsICZtYXRlcmlhbF90cmFjay0+c2VxdWVuY2VfcmVmLCBUaW1lY29kZUNvbXBvbmVu dCkpKSB7Ci0gICAgICAgICAgICBteGZfdGMgPSAoTVhGVGltZWNvZGVDb21wb25lbnQqKWNvbXBv bmVudDsKKyAgICAgICAgaWYgKChteGZfdGMgPSBteGZfcmVzb2x2ZV9zdHJvbmdfcmVmPE1YRlRp bWVjb2RlQ29tcG9uZW50PihteGYsICZtYXRlcmlhbF90cmFjay0+c2VxdWVuY2VfcmVmKSkpIHsK ICAgICAgICAgICAgIGZsYWdzID0gbXhmX3RjLT5kcm9wX2ZyYW1lID09IDEgPyBBVl9USU1FQ09E RV9GTEFHX0RST1BGUkFNRSA6IDA7CiAgICAgICAgICAgICBpZiAoYXZfdGltZWNvZGVfaW5pdCgm dGMsIG14Zl90Yy0+cmF0ZSwgZmxhZ3MsIG14Zl90Yy0+c3RhcnRfZnJhbWUsIG14Zi0+ZmMpID09 IDApIHsKICAgICAgICAgICAgICAgICBteGZfYWRkX3RpbWVjb2RlX21ldGFkYXRhKCZteGYtPmZj LT5tZXRhZGF0YSwgInRpbWVjb2RlIiwgJnRjKTsKICAgICAgICAgICAgIH0KICAgICAgICAgfQog Ci0gICAgICAgIGlmICghKG1hdGVyaWFsX3RyYWNrLT5zZXF1ZW5jZSA9IG14Zl9yZXNvbHZlX3N0 cm9uZ19yZWYobXhmLCAmbWF0ZXJpYWxfdHJhY2stPnNlcXVlbmNlX3JlZiwgU2VxdWVuY2UpKSkg eworICAgICAgICBpZiAoIShtYXRlcmlhbF90cmFjay0+c2VxdWVuY2UgPSBteGZfcmVzb2x2ZV9z dHJvbmdfcmVmPE1YRlNlcXVlbmNlPihteGYsICZtYXRlcmlhbF90cmFjay0+c2VxdWVuY2VfcmVm KSkpIHsKICAgICAgICAgICAgIGF2X2xvZyhteGYtPmZjLCBBVl9MT0dfRVJST1IsICJjb3VsZCBu b3QgcmVzb2x2ZSBtYXRlcmlhbCB0cmFjayBzZXF1ZW5jZSBzdHJvbmcgcmVmXG4iKTsKICAgICAg ICAgICAgIGNvbnRpbnVlOwogICAgICAgICB9CiAKICAgICAgICAgZm9yIChpbnQgaiA9IDA7IGog PCBtYXRlcmlhbF90cmFjay0+c2VxdWVuY2UtPnN0cnVjdHVyYWxfY29tcG9uZW50c19jb3VudDsg aisrKSB7Ci0gICAgICAgICAgICBjb21wb25lbnQgPSBteGZfcmVzb2x2ZV9zdHJvbmdfcmVmKG14 ZiwgJm1hdGVyaWFsX3RyYWNrLT5zZXF1ZW5jZS0+c3RydWN0dXJhbF9jb21wb25lbnRzX3JlZnNb al0sIFRpbWVjb2RlQ29tcG9uZW50KTsKLSAgICAgICAgICAgIGlmICghY29tcG9uZW50KQorICAg ICAgICAgICAgbXhmX3RjID0gbXhmX3Jlc29sdmVfc3Ryb25nX3JlZjxNWEZUaW1lY29kZUNvbXBv bmVudD4obXhmLCAmbWF0ZXJpYWxfdHJhY2stPnNlcXVlbmNlLT5zdHJ1Y3R1cmFsX2NvbXBvbmVu dHNfcmVmc1tqXSk7CisgICAgICAgICAgICBpZiAoIW14Zl90YykKICAgICAgICAgICAgICAgICBj b250aW51ZTsKIAotICAgICAgICAgICAgbXhmX3RjID0gKE1YRlRpbWVjb2RlQ29tcG9uZW50Kilj b21wb25lbnQ7CiAgICAgICAgICAgICBmbGFncyA9IG14Zl90Yy0+ZHJvcF9mcmFtZSA9PSAxID8g QVZfVElNRUNPREVfRkxBR19EUk9QRlJBTUUgOiAwOwogICAgICAgICAgICAgaWYgKGF2X3RpbWVj b2RlX2luaXQoJnRjLCBteGZfdGMtPnJhdGUsIGZsYWdzLCBteGZfdGMtPnN0YXJ0X2ZyYW1lLCBt eGYtPmZjKSA9PSAwKSB7CiAgICAgICAgICAgICAgICAgbXhmX2FkZF90aW1lY29kZV9tZXRhZGF0 YSgmbXhmLT5mYy0+bWV0YWRhdGEsICJ0aW1lY29kZSIsICZ0Yyk7CkBAIC0yNzY2LDcgKzI3NzAs NyBAQCBzdGF0aWMgaW50IG14Zl9wYXJzZV9zdHJ1Y3R1cmFsX21ldGFkYXRhKE1YRkNvbnRleHQg Km14ZikKICAgICAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgICAgIH0KICAgICAgICAg ICAgIGZvciAoayA9IDA7IGsgPCBzb3VyY2VfcGFja2FnZS0+dHJhY2tzX2NvdW50OyBrKyspIHsK LSAgICAgICAgICAgICAgICBpZiAoISh0ZW1wX3RyYWNrID0gbXhmX3Jlc29sdmVfc3Ryb25nX3Jl ZihteGYsICZzb3VyY2VfcGFja2FnZS0+dHJhY2tzX3JlZnNba10sIFRyYWNrKSkpIHsKKyAgICAg ICAgICAgICAgICBpZiAoISh0ZW1wX3RyYWNrID0gbXhmX3Jlc29sdmVfc3Ryb25nX3JlZjxNWEZU cmFjaz4obXhmLCAmc291cmNlX3BhY2thZ2UtPnRyYWNrc19yZWZzW2tdKSkpIHsKICAgICAgICAg ICAgICAgICAgICAgYXZfbG9nKG14Zi0+ZmMsIEFWX0xPR19FUlJPUiwgImNvdWxkIG5vdCByZXNv bHZlIHNvdXJjZSB0cmFjayBzdHJvbmcgcmVmXG4iKTsKICAgICAgICAgICAgICAgICAgICAgcmV0 ID0gQVZFUlJPUl9JTlZBTElEREFUQTsKICAgICAgICAgICAgICAgICAgICAgZ290byBmYWlsX2Fu ZF9mcmVlOwpAQCAtMjc4NCw3ICsyNzg4LDcgQEAgc3RhdGljIGludCBteGZfcGFyc2Vfc3RydWN0 dXJhbF9tZXRhZGF0YShNWEZDb250ZXh0ICpteGYpCiAgICAgICAgICAgICBmb3IgKGsgPSAwOyBr IDwgbXhmLT5lc3NlbmNlX2NvbnRhaW5lcl9kYXRhX2NvdW50OyBrKyspIHsKICAgICAgICAgICAg ICAgICBNWEZFc3NlbmNlQ29udGFpbmVyRGF0YSAqZXNzZW5jZV9kYXRhOwogCi0gICAgICAgICAg ICAgICAgaWYgKCEoZXNzZW5jZV9kYXRhID0gbXhmX3Jlc29sdmVfc3Ryb25nX3JlZihteGYsICZt eGYtPmVzc2VuY2VfY29udGFpbmVyX2RhdGFfcmVmc1trXSwgRXNzZW5jZUNvbnRhaW5lckRhdGEp KSkgeworICAgICAgICAgICAgICAgIGlmICghKGVzc2VuY2VfZGF0YSA9IG14Zl9yZXNvbHZlX3N0 cm9uZ19yZWY8TVhGRXNzZW5jZUNvbnRhaW5lckRhdGE+KG14ZiwgJm14Zi0+ZXNzZW5jZV9jb250 YWluZXJfZGF0YV9yZWZzW2tdKSkpIHsKICAgICAgICAgICAgICAgICAgICAgYXZfbG9nKG14Zi0+ ZmMsIEFWX0xPR19UUkFDRSwgImNvdWxkIG5vdCByZXNvbHZlIGVzc2VuY2UgY29udGFpbmVyIGRh dGEgc3Ryb25nIHJlZlxuIik7CiAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAg ICAgICAgICAgIH0KQEAgLTI4MDQsNyArMjgwOCw3IEBAIHN0YXRpYyBpbnQgbXhmX3BhcnNlX3N0 cnVjdHVyYWxfbWV0YWRhdGEoTVhGQ29udGV4dCAqbXhmKQogICAgICAgICAgICAgY29udGludWU7 CiAgICAgICAgIH0KIAotICAgICAgICBpZiAoIShzb3VyY2VfdHJhY2stPnNlcXVlbmNlID0gbXhm X3Jlc29sdmVfc3Ryb25nX3JlZihteGYsICZzb3VyY2VfdHJhY2stPnNlcXVlbmNlX3JlZiwgU2Vx dWVuY2UpKSkgeworICAgICAgICBpZiAoIShzb3VyY2VfdHJhY2stPnNlcXVlbmNlID0gbXhmX3Jl c29sdmVfc3Ryb25nX3JlZjxNWEZTZXF1ZW5jZT4obXhmLCAmc291cmNlX3RyYWNrLT5zZXF1ZW5j ZV9yZWYpKSkgewogICAgICAgICAgICAgYXZfbG9nKG14Zi0+ZmMsIEFWX0xPR19FUlJPUiwgImNv dWxkIG5vdCByZXNvbHZlIHNvdXJjZSB0cmFjayBzZXF1ZW5jZSBzdHJvbmcgcmVmXG4iKTsKICAg ICAgICAgICAgIHJldCA9IEFWRVJST1JfSU5WQUxJRERBVEE7CiAgICAgICAgICAgICBnb3RvIGZh aWxfYW5kX2ZyZWU7CkBAIC0yODU2LDcgKzI4NjAsNyBAQCBzdGF0aWMgaW50IG14Zl9wYXJzZV9z dHJ1Y3R1cmFsX21ldGFkYXRhKE1YRkNvbnRleHQgKm14ZikKIAogICAgICAgICBQUklOVF9LRVko bXhmLT5mYywgImRhdGEgZGVmaW5pdGlvbiAgIHVsIiwgc291cmNlX3RyYWNrLT5zZXF1ZW5jZS0+ ZGF0YV9kZWZpbml0aW9uX3VsKTsKICAgICAgICAgY29kZWNfdWwgPSBteGZfZ2V0X2NvZGVjX3Vs KGZmX214Zl9kYXRhX2RlZmluaXRpb25fdWxzLCAmc291cmNlX3RyYWNrLT5zZXF1ZW5jZS0+ZGF0 YV9kZWZpbml0aW9uX3VsKTsKLSAgICAgICAgc3QtPmNvZGVjcGFyLT5jb2RlY190eXBlID0gY29k ZWNfdWwtPmlkOworICAgICAgICBzdC0+Y29kZWNwYXItPmNvZGVjX3R5cGUgPSAoQVZNZWRpYVR5 cGUpY29kZWNfdWwtPmlkOwogCiAgICAgICAgIGlmICghZGVzY3JpcHRvcikgewogICAgICAgICAg ICAgYXZfbG9nKG14Zi0+ZmMsIEFWX0xPR19JTkZPLCAic291cmNlIHRyYWNrICVkOiBzdHJlYW0g JWQsIG5vIGRlc2NyaXB0b3IgZm91bmRcbiIsIHNvdXJjZV90cmFjay0+dHJhY2tfaWQsIHN0LT5p bmRleCk7CkBAIC0yOTA5LDcgKzI5MTMsNyBAQCBzdGF0aWMgaW50IG14Zl9wYXJzZV9zdHJ1Y3R1 cmFsX21ldGFkYXRhKE1YRkNvbnRleHQgKm14ZikKICAgICAgICAgICAgIHNvdXJjZV90cmFjay0+ aW50cmFfb25seSA9IG14Zl9pc19pbnRyYV9vbmx5KGRlc2NyaXB0b3IpOwogICAgICAgICAgICAg Y29udGFpbmVyX3VsID0gbXhmX2dldF9jb2RlY191bChteGZfcGljdHVyZV9lc3NlbmNlX2NvbnRh aW5lcl91bHMsIGVzc2VuY2VfY29udGFpbmVyX3VsKTsKICAgICAgICAgICAgIGlmIChzdC0+Y29k ZWNwYXItPmNvZGVjX2lkID09IEFWX0NPREVDX0lEX05PTkUpCi0gICAgICAgICAgICAgICAgc3Qt PmNvZGVjcGFyLT5jb2RlY19pZCA9IGNvbnRhaW5lcl91bC0+aWQ7CisgICAgICAgICAgICAgICAg c3QtPmNvZGVjcGFyLT5jb2RlY19pZCA9IChBVkNvZGVjSUQpY29udGFpbmVyX3VsLT5pZDsKICAg ICAgICAgICAgIHN0LT5jb2RlY3Bhci0+d2lkdGggPSBkZXNjcmlwdG9yLT53aWR0aDsKICAgICAg ICAgICAgIHN0LT5jb2RlY3Bhci0+aGVpZ2h0ID0gZGVzY3JpcHRvci0+aGVpZ2h0OyAvKiBGaWVs ZCBoZWlnaHQsIG5vdCBmcmFtZSBoZWlnaHQgKi8KICAgICAgICAgICAgIHN3aXRjaCAoZGVzY3Jp cHRvci0+ZnJhbWVfbGF5b3V0KSB7CkBAIC0zMDM0LDkgKzMwMzgsOSBAQCBzdGF0aWMgaW50IG14 Zl9wYXJzZV9zdHJ1Y3R1cmFsX21ldGFkYXRhKE1YRkNvbnRleHQgKm14ZikKICAgICAgICAgICAg IGlmIChkZXNjcmlwdG9yLT5hc3BlY3RfcmF0aW8ubnVtICYmIGRlc2NyaXB0b3ItPmFzcGVjdF9y YXRpby5kZW4pCiAgICAgICAgICAgICAgICAgc3RpLT5kaXNwbGF5X2FzcGVjdF9yYXRpbyA9IGRl c2NyaXB0b3ItPmFzcGVjdF9yYXRpbzsKICAgICAgICAgICAgIHN0LT5jb2RlY3Bhci0+Y29sb3Jf cmFuZ2UgICAgID0gbXhmX2dldF9jb2xvcl9yYW5nZShteGYsIGRlc2NyaXB0b3IpOwotICAgICAg ICAgICAgc3QtPmNvZGVjcGFyLT5jb2xvcl9wcmltYXJpZXMgPSBteGZfZ2V0X2NvZGVjX3VsKGZm X214Zl9jb2xvcl9wcmltYXJpZXNfdWxzLCAmZGVzY3JpcHRvci0+Y29sb3JfcHJpbWFyaWVzX3Vs KS0+aWQ7Ci0gICAgICAgICAgICBzdC0+Y29kZWNwYXItPmNvbG9yX3RyYyAgICAgICA9IG14Zl9n ZXRfY29kZWNfdWwoZmZfbXhmX2NvbG9yX3RyY191bHMsICZkZXNjcmlwdG9yLT5jb2xvcl90cmNf dWwpLT5pZDsKLSAgICAgICAgICAgIHN0LT5jb2RlY3Bhci0+Y29sb3Jfc3BhY2UgICAgID0gbXhm X2dldF9jb2RlY191bChmZl9teGZfY29sb3Jfc3BhY2VfdWxzLCAmZGVzY3JpcHRvci0+Y29sb3Jf c3BhY2VfdWwpLT5pZDsKKyAgICAgICAgICAgIHN0LT5jb2RlY3Bhci0+Y29sb3JfcHJpbWFyaWVz ID0gKEFWQ29sb3JQcmltYXJpZXMpbXhmX2dldF9jb2RlY191bChmZl9teGZfY29sb3JfcHJpbWFy aWVzX3VscywgJmRlc2NyaXB0b3ItPmNvbG9yX3ByaW1hcmllc191bCktPmlkOworICAgICAgICAg ICAgc3QtPmNvZGVjcGFyLT5jb2xvcl90cmMgICAgICAgPSAoQVZDb2xvclRyYW5zZmVyQ2hhcmFj dGVyaXN0aWMpbXhmX2dldF9jb2RlY191bChmZl9teGZfY29sb3JfdHJjX3VscywgJmRlc2NyaXB0 b3ItPmNvbG9yX3RyY191bCktPmlkOworICAgICAgICAgICAgc3QtPmNvZGVjcGFyLT5jb2xvcl9z cGFjZSAgICAgPSAoQVZDb2xvclNwYWNlKW14Zl9nZXRfY29kZWNfdWwoZmZfbXhmX2NvbG9yX3Nw YWNlX3VscywgJmRlc2NyaXB0b3ItPmNvbG9yX3NwYWNlX3VsKS0+aWQ7CiAgICAgICAgICAgICBp ZiAoZGVzY3JpcHRvci0+bWFzdGVyaW5nKSB7CiAgICAgICAgICAgICAgICAgaWYgKCFhdl9wYWNr ZXRfc2lkZV9kYXRhX2FkZCgmc3QtPmNvZGVjcGFyLT5jb2RlZF9zaWRlX2RhdGEsICZzdC0+Y29k ZWNwYXItPm5iX2NvZGVkX3NpZGVfZGF0YSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIEFWX1BLVF9EQVRBX01BU1RFUklOR19ESVNQTEFZX01FVEFEQVRBLApA QCAtMzEwOSw3ICszMTEzLDcgQEAgc3RhdGljIGludCBteGZfcGFyc2Vfc3RydWN0dXJhbF9tZXRh ZGF0YShNWEZDb250ZXh0ICpteGYpCiAgICAgICAgICAgICBlbnVtIEFWTWVkaWFUeXBlIHR5cGU7 CiAgICAgICAgICAgICBjb250YWluZXJfdWwgPSBteGZfZ2V0X2NvZGVjX3VsKG14Zl9kYXRhX2Vz c2VuY2VfY29udGFpbmVyX3VscywgZXNzZW5jZV9jb250YWluZXJfdWwpOwogICAgICAgICAgICAg aWYgKHN0LT5jb2RlY3Bhci0+Y29kZWNfaWQgPT0gQVZfQ09ERUNfSURfTk9ORSkKLSAgICAgICAg ICAgICAgICBzdC0+Y29kZWNwYXItPmNvZGVjX2lkID0gY29udGFpbmVyX3VsLT5pZDsKKyAgICAg ICAgICAgICAgICBzdC0+Y29kZWNwYXItPmNvZGVjX2lkID0gKEFWQ29kZWNJRCljb250YWluZXJf dWwtPmlkOwogICAgICAgICAgICAgdHlwZSA9IGF2Y29kZWNfZ2V0X3R5cGUoc3QtPmNvZGVjcGFy LT5jb2RlY19pZCk7CiAgICAgICAgICAgICBpZiAodHlwZSA9PSBBVk1FRElBX1RZUEVfU1VCVElU TEUpCiAgICAgICAgICAgICAgICAgc3QtPmNvZGVjcGFyLT5jb2RlY190eXBlID0gdHlwZTsKQEAg LTMxNDIsMTAgKzMxNDYsMTAgQEAgc3RhdGljIGludCBteGZfcGFyc2Vfc3RydWN0dXJhbF9tZXRh ZGF0YShNWEZDb250ZXh0ICpteGYpCiAgICAgfQogCiAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBt eGYtPmZjLT5uYl9zdHJlYW1zOyBpKyspIHsKLSAgICAgICAgTVhGVHJhY2sgKnRyYWNrMSA9IG14 Zi0+ZmMtPnN0cmVhbXNbaV0tPnByaXZfZGF0YTsKKyAgICAgICAgTVhGVHJhY2sgKnRyYWNrMSA9 IChNWEZUcmFjayopbXhmLT5mYy0+c3RyZWFtc1tpXS0+cHJpdl9kYXRhOwogICAgICAgICBpZiAo dHJhY2sxICYmIHRyYWNrMS0+Ym9keV9zaWQpIHsKICAgICAgICAgICAgIGZvciAoaW50IGogPSBp ICsgMTsgaiA8IG14Zi0+ZmMtPm5iX3N0cmVhbXM7IGorKykgewotICAgICAgICAgICAgICAgIE1Y RlRyYWNrICp0cmFjazIgPSBteGYtPmZjLT5zdHJlYW1zW2pdLT5wcml2X2RhdGE7CisgICAgICAg ICAgICAgICAgTVhGVHJhY2sgKnRyYWNrMiA9IChNWEZUcmFjayopbXhmLT5mYy0+c3RyZWFtc1tq XS0+cHJpdl9kYXRhOwogICAgICAgICAgICAgICAgIGlmICh0cmFjazIgJiYgdHJhY2sxLT5ib2R5 X3NpZCA9PSB0cmFjazItPmJvZHlfc2lkICYmIHRyYWNrMS0+d3JhcHBpbmcgIT0gdHJhY2syLT53 cmFwcGluZykgewogICAgICAgICAgICAgICAgICAgICBpZiAodHJhY2sxLT53cmFwcGluZyA9PSBV bmtub3duV3JhcHBlZCkKICAgICAgICAgICAgICAgICAgICAgICAgIHRyYWNrMS0+d3JhcHBpbmcg PSB0cmFjazItPndyYXBwaW5nOwpAQCAtMzIxOSw3ICszMjIzLDcgQEAgc3RhdGljIGludDY0X3Qg bXhmX3RpbWVzdGFtcF90b19pbnQ2NCh1aW50NjRfdCB0aW1lc3RhbXApCiAKIHN0YXRpYyBpbnQg bXhmX3JlYWRfaWRlbnRpZmljYXRpb25fbWV0YWRhdGEodm9pZCAqYXJnLCBBVklPQ29udGV4dCAq cGIsIGludCB0YWcsIGludCBzaXplLCBVSUQgX3VpZCwgaW50NjRfdCBrbHZfb2Zmc2V0KQogewot ICAgIE1YRkNvbnRleHQgKm14ZiA9IGFyZzsKKyAgICBNWEZDb250ZXh0ICpteGYgPSAoTVhGQ29u dGV4dCopYXJnOwogICAgIEFWRm9ybWF0Q29udGV4dCAqcyA9IG14Zi0+ZmM7CiAgICAgaW50IHJl dDsKICAgICBVSUQgdWlkID0geyAwIH07CkBAIC0zMjYzLDcgKzMyNjcsNyBAQCBzdGF0aWMgaW50 IG14Zl9yZWFkX2lkZW50aWZpY2F0aW9uX21ldGFkYXRhKHZvaWQgKmFyZywgQVZJT0NvbnRleHQg KnBiLCBpbnQgdGFnLAogCiBzdGF0aWMgaW50IG14Zl9yZWFkX3ByZWZhY2VfbWV0YWRhdGEodm9p ZCAqYXJnLCBBVklPQ29udGV4dCAqcGIsIGludCB0YWcsIGludCBzaXplLCBVSUQgdWlkLCBpbnQ2 NF90IGtsdl9vZmZzZXQpCiB7Ci0gICAgTVhGQ29udGV4dCAqbXhmID0gYXJnOworICAgIE1YRkNv bnRleHQgKm14ZiA9IChNWEZDb250ZXh0Kilhcmc7CiAgICAgQVZGb3JtYXRDb250ZXh0ICpzID0g bXhmLT5mYzsKICAgICBpbnQgcmV0OwogICAgIGNoYXIgKnN0ciA9IE5VTEw7CkBAIC0zMzQzLDcg KzMzNDcsNyBAQCBzdGF0aWMgaW50IG14Zl9yZWFkX2xvY2FsX3RhZ3MoTVhGQ29udGV4dCAqbXhm LCBLTFZQYWNrZXQgKmtsdiwgTVhGTWV0YWRhdGFSZWFkRgogICAgIHZvaWQgKmN0eDsKIAogICAg IGlmIChjdHhfc2l6ZSkgewotICAgICAgICBtZXRhID0gYXZfbWFsbG9jeihjdHhfc2l6ZSk7Cisg ICAgICAgIG1ldGEgPSAoTVhGTWV0YWRhdGFTZXQqKWF2X21hbGxvY3ooY3R4X3NpemUpOwogICAg ICAgICBpZiAoIW1ldGEpCiAgICAgICAgICAgICByZXR1cm4gQVZFUlJPUihFTk9NRU0pOwogICAg ICAgICBjdHggID0gbWV0YTsKQEAgLTM0OTgsNyArMzUwMiw3IEBAIHN0YXRpYyBpbnQgbXhmX3Nl ZWtfdG9fcHJldmlvdXNfcGFydGl0aW9uKE1YRkNvbnRleHQgKm14ZikKICAgICAgICAgcmV0dXJu IEFWRVJST1JfSU5WQUxJRERBVEE7CiAgICAgfQogCi0gICAgaWYgKChyZXQgPSBteGZfcGFyc2Vf a2x2KG14Ziwga2x2LCBteGZfcmVhZF9wYXJ0aXRpb25fcGFjaywgMCwgMCkpIDwgMCkKKyAgICBp ZiAoKHJldCA9IG14Zl9wYXJzZV9rbHYobXhmLCBrbHYsIG14Zl9yZWFkX3BhcnRpdGlvbl9wYWNr LCAwLCBQYXJ0aXRpb24pKSA8IDApCiAgICAgICAgIHJldHVybiByZXQ7CiAKICAgICByZXR1cm4g MTsKQEAgLTM1NTksNyArMzU2Myw3IEBAIHN0YXRpYyBpbnQgbXhmX3BhcnNlX2hhbmRsZV9wYXJ0 aXRpb25fb3JfZW9mKE1YRkNvbnRleHQgKm14ZikKIHN0YXRpYyBNWEZXcmFwcGluZ1NjaGVtZSBt eGZfZ2V0X3dyYXBwaW5nX2J5X2JvZHlfc2lkKEFWRm9ybWF0Q29udGV4dCAqcywgaW50IGJvZHlf c2lkKQogewogICAgIGZvciAoaW50IGkgPSAwOyBpIDwgcy0+bmJfc3RyZWFtczsgaSsrKSB7Ci0g ICAgICAgIE1YRlRyYWNrICp0cmFjayA9IHMtPnN0cmVhbXNbaV0tPnByaXZfZGF0YTsKKyAgICAg ICAgTVhGVHJhY2sgKnRyYWNrID0gKE1YRlRyYWNrKilzLT5zdHJlYW1zW2ldLT5wcml2X2RhdGE7 CiAgICAgICAgIGlmICh0cmFjayAmJiB0cmFjay0+Ym9keV9zaWQgPT0gYm9keV9zaWQgJiYgdHJh Y2stPndyYXBwaW5nICE9IFVua25vd25XcmFwcGVkKQogICAgICAgICAgICAgcmV0dXJuIHRyYWNr LT53cmFwcGluZzsKICAgICB9CkBAIC0zNTcxLDcgKzM1NzUsNyBAQCBzdGF0aWMgTVhGV3JhcHBp bmdTY2hlbWUgbXhmX2dldF93cmFwcGluZ19ieV9ib2R5X3NpZChBVkZvcm1hdENvbnRleHQgKnMs IGludCBibwogICovCiBzdGF0aWMgdm9pZCBteGZfY29tcHV0ZV9lc3NlbmNlX2NvbnRhaW5lcnMo QVZGb3JtYXRDb250ZXh0ICpzKQogewotICAgIE1YRkNvbnRleHQgKm14ZiA9IHMtPnByaXZfZGF0 YTsKKyAgICBNWEZDb250ZXh0ICpteGYgPSAoTVhGQ29udGV4dCopcy0+cHJpdl9kYXRhOwogICAg IGludCB4OwogCiAgICAgZm9yICh4ID0gMDsgeCA8IG14Zi0+cGFydGl0aW9uc19jb3VudDsgeCsr KSB7CkBAIC0zNjI0LDcgKzM2MjgsNyBAQCBzdGF0aWMgTVhGSW5kZXhUYWJsZSAqbXhmX2ZpbmRf aW5kZXhfdGFibGUoTVhGQ29udGV4dCAqbXhmLCBpbnQgaW5kZXhfc2lkKQogICovCiBzdGF0aWMg dm9pZCBteGZfY29tcHV0ZV9lZGl0X3VuaXRzX3Blcl9wYWNrZXQoTVhGQ29udGV4dCAqbXhmLCBB VlN0cmVhbSAqc3QpCiB7Ci0gICAgTVhGVHJhY2sgKnRyYWNrID0gc3QtPnByaXZfZGF0YTsKKyAg ICBNWEZUcmFjayAqdHJhY2sgPSAoTVhGVHJhY2sqKXN0LT5wcml2X2RhdGE7CiAgICAgTVhGSW5k ZXhUYWJsZSAqdDsKIAogICAgIGlmICghdHJhY2spCkBAIC0zNjU1LDcgKzM2NTksNyBAQCBzdGF0 aWMgdm9pZCBteGZfY29tcHV0ZV9lZGl0X3VuaXRzX3Blcl9wYWNrZXQoTVhGQ29udGV4dCAqbXhm LCBBVlN0cmVhbSAqc3QpCiAgKi8KIHN0YXRpYyBpbnQgbXhmX2hhbmRsZV9taXNzaW5nX2luZGV4 X3NlZ21lbnQoTVhGQ29udGV4dCAqbXhmLCBBVlN0cmVhbSAqc3QpCiB7Ci0gICAgTVhGVHJhY2sg KnRyYWNrID0gc3QtPnByaXZfZGF0YTsKKyAgICBNWEZUcmFjayAqdHJhY2sgPSAoTVhGVHJhY2sq KXN0LT5wcml2X2RhdGE7CiAgICAgTVhGSW5kZXhUYWJsZVNlZ21lbnQgKnNlZ21lbnQgPSBOVUxM OwogICAgIE1YRlBhcnRpdGlvbiAqcCA9IE5VTEw7CiAgICAgaW50IGVzc2VuY2VfcGFydGl0aW9u X2NvdW50ID0gMDsKQEAgLTM2OTksNyArMzcwMyw3IEBAIHN0YXRpYyBpbnQgbXhmX2hhbmRsZV9t aXNzaW5nX2luZGV4X3NlZ21lbnQoTVhGQ29udGV4dCAqbXhmLCBBVlN0cmVhbSAqc3QpCiAKICAg ICBhdl9sb2cobXhmLT5mYywgQVZfTE9HX1dBUk5JTkcsICJndWVzc2luZyBpbmRleCBmb3Igc3Ry ZWFtICVkIHVzaW5nIGVkaXQgdW5pdCBieXRlIGNvdW50ICVkXG4iLCBzdC0+aW5kZXgsIGVkaXRf dW5pdF9ieXRlX2NvdW50KTsKIAotICAgIGlmICghKHNlZ21lbnQgPSBhdl9tYWxsb2N6KHNpemVv Zigqc2VnbWVudCkpKSkKKyAgICBpZiAoIShzZWdtZW50ID0gKE1YRkluZGV4VGFibGVTZWdtZW50 Kilhdl9tYWxsb2N6KHNpemVvZigqc2VnbWVudCkpKSkKICAgICAgICAgcmV0dXJuIEFWRVJST1Io RU5PTUVNKTsKIAogICAgIGlmICgocmV0ID0gbXhmX2FkZF9tZXRhZGF0YV9zZXQobXhmLCAoTVhG TWV0YWRhdGFTZXQqKikmc2VnbWVudCwgSW5kZXhUYWJsZVNlZ21lbnQpKSkKQEAgLTM3MjIsNyAr MzcyNiw3IEBAIHN0YXRpYyBpbnQgbXhmX2hhbmRsZV9taXNzaW5nX2luZGV4X3NlZ21lbnQoTVhG Q29udGV4dCAqbXhmLCBBVlN0cmVhbSAqc3QpCiAKIHN0YXRpYyB2b2lkIG14Zl9yZWFkX3JhbmRv bV9pbmRleF9wYWNrKEFWRm9ybWF0Q29udGV4dCAqcykKIHsKLSAgICBNWEZDb250ZXh0ICpteGYg PSBzLT5wcml2X2RhdGE7CisgICAgTVhGQ29udGV4dCAqbXhmID0gKE1YRkNvbnRleHQqKXMtPnBy aXZfZGF0YTsKICAgICB1aW50MzJfdCBsZW5ndGg7CiAgICAgaW50NjRfdCBmaWxlX3NpemUsIG1h eF9yaXBfbGVuZ3RoLCBtaW5fcmlwX2xlbmd0aDsKICAgICBLTFZQYWNrZXQga2x2OwpAQCAtMzc3 NCw5ICszNzc4LDkgQEAgZW5kOgogICAgIGF2aW9fc2VlayhzLT5wYiwgbXhmLT5ydW5faW4sIFNF RUtfU0VUKTsKIH0KIAotc3RhdGljIGludCBteGZfcmVhZF9oZWFkZXIoQVZGb3JtYXRDb250ZXh0 ICpzKQoraW50IG14Zl9yZWFkX2hlYWRlcihBVkZvcm1hdENvbnRleHQgKnMpCiB7Ci0gICAgTVhG Q29udGV4dCAqbXhmID0gcy0+cHJpdl9kYXRhOworICAgIE1YRkNvbnRleHQgKm14ZiA9IChNWEZD b250ZXh0KilzLT5wcml2X2RhdGE7CiAgICAgS0xWUGFja2V0IGtsdjsKICAgICBpbnQ2NF90IGVz c2VuY2Vfb2Zmc2V0ID0gMDsKICAgICBpbnQgcmV0OwpAQCAtMzkyNiw3ICszOTMwLDcgQEAgc3Rh dGljIGludCBteGZfZ2V0X25leHRfdHJhY2tfZWRpdF91bml0KE1YRkNvbnRleHQgKm14ZiwgTVhG VHJhY2sgKnRyYWNrLCBpbnQ2NF8KIHN0YXRpYyBpbnQ2NF90IG14Zl9jb21wdXRlX3NhbXBsZV9j b3VudChNWEZDb250ZXh0ICpteGYsIEFWU3RyZWFtICpzdCwKICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBpbnQ2NF90IGVkaXRfdW5pdCkKIHsKLSAgICBNWEZUcmFjayAq dHJhY2sgPSBzdC0+cHJpdl9kYXRhOworICAgIE1YRlRyYWNrICp0cmFjayA9IChNWEZUcmFjayop c3QtPnByaXZfZGF0YTsKICAgICBBVlJhdGlvbmFsIHRpbWVfYmFzZSA9IGF2X2ludl9xKHRyYWNr LT5lZGl0X3JhdGUpOwogICAgIEFWUmF0aW9uYWwgc2FtcGxlX3JhdGUgPSBhdl9pbnZfcShzdC0+ dGltZV9iYXNlKTsKIApAQCAtMzk1Nyw3ICszOTYxLDcgQEAgc3RhdGljIGludDY0X3QgbXhmX2Nv bXB1dGVfc2FtcGxlX2NvdW50KE1YRkNvbnRleHQgKm14ZiwgQVZTdHJlYW0gKnN0LAogc3RhdGlj IGludDY0X3QgbXhmX3NldF9jdXJyZW50X2VkaXRfdW5pdChNWEZDb250ZXh0ICpteGYsIEFWU3Ry ZWFtICpzdCwgaW50NjRfdCBjdXJyZW50X29mZnNldCwgaW50IHJlc3luYykKIHsKICAgICBpbnQ2 NF90IG5leHRfb2ZzID0gLTE7Ci0gICAgTVhGVHJhY2sgKnRyYWNrID0gc3QtPnByaXZfZGF0YTsK KyAgICBNWEZUcmFjayAqdHJhY2sgPSAoTVhGVHJhY2sqKXN0LT5wcml2X2RhdGE7CiAgICAgaW50 NjRfdCBlZGl0X3VuaXQgPSBhdl9yZXNjYWxlX3EodHJhY2stPnNhbXBsZV9jb3VudCwgc3QtPnRp bWVfYmFzZSwgYXZfaW52X3EodHJhY2stPmVkaXRfcmF0ZSkpOwogICAgIGludDY0X3QgbmV3X2Vk aXRfdW5pdDsKICAgICBNWEZJbmRleFRhYmxlICp0ID0gbXhmX2ZpbmRfaW5kZXhfdGFibGUobXhm LCB0cmFjay0+aW5kZXhfc2lkKTsKQEAgLTM5OTYsNyArNDAwMCw3IEBAIHN0YXRpYyBpbnQgbXhm X3NldF9hdWRpb19wdHMoTVhGQ29udGV4dCAqbXhmLCBBVkNvZGVjUGFyYW1ldGVycyAqcGFyLAog ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBVlBhY2tldCAqcGt0KQogewogICAgIEFWU3Ry ZWFtICpzdCA9IG14Zi0+ZmMtPnN0cmVhbXNbcGt0LT5zdHJlYW1faW5kZXhdOwotICAgIE1YRlRy YWNrICp0cmFjayA9IHN0LT5wcml2X2RhdGE7CisgICAgTVhGVHJhY2sgKnRyYWNrID0gKE1YRlRy YWNrKilzdC0+cHJpdl9kYXRhOwogICAgIGludDY0X3QgYml0c19wZXJfc2FtcGxlID0gcGFyLT5i aXRzX3Blcl9jb2RlZF9zYW1wbGU7CiAKICAgICBpZiAoIWJpdHNfcGVyX3NhbXBsZSkKQEAgLTQw MTcsNyArNDAyMSw3IEBAIHN0YXRpYyBpbnQgbXhmX3NldF9hdWRpb19wdHMoTVhGQ29udGV4dCAq bXhmLCBBVkNvZGVjUGFyYW1ldGVycyAqcGFyLAogc3RhdGljIGludCBteGZfc2V0X3B0cyhNWEZD b250ZXh0ICpteGYsIEFWU3RyZWFtICpzdCwgQVZQYWNrZXQgKnBrdCkKIHsKICAgICBBVkNvZGVj UGFyYW1ldGVycyAqcGFyID0gc3QtPmNvZGVjcGFyOwotICAgIE1YRlRyYWNrICp0cmFjayA9IHN0 LT5wcml2X2RhdGE7CisgICAgTVhGVHJhY2sgKnRyYWNrID0gKE1YRlRyYWNrKilzdC0+cHJpdl9k YXRhOwogCiAgICAgaWYgKHBhci0+Y29kZWNfdHlwZSA9PSBBVk1FRElBX1RZUEVfVklERU8pIHsK ICAgICAgICAgLyogc2VlIGlmIHdlIGhhdmUgYW4gaW5kZXggdGFibGUgdG8gZGVyaXZlIHRpbWVz dGFtcHMgZnJvbSAqLwpAQCAtNDA0NCwxMCArNDA0OCwxMCBAQCBzdGF0aWMgaW50IG14Zl9zZXRf cHRzKE1YRkNvbnRleHQgKm14ZiwgQVZTdHJlYW0gKnN0LCBBVlBhY2tldCAqcGt0KQogICAgIHJl dHVybiAwOwogfQogCi1zdGF0aWMgaW50IG14Zl9yZWFkX3BhY2tldChBVkZvcm1hdENvbnRleHQg KnMsIEFWUGFja2V0ICpwa3QpCitpbnQgbXhmX3JlYWRfcGFja2V0KEFWRm9ybWF0Q29udGV4dCAq cywgQVZQYWNrZXQgKnBrdCkKIHsKICAgICBLTFZQYWNrZXQga2x2OwotICAgIE1YRkNvbnRleHQg Km14ZiA9IHMtPnByaXZfZGF0YTsKKyAgICBNWEZDb250ZXh0ICpteGYgPSAoTVhGQ29udGV4dCop cy0+cHJpdl9kYXRhOwogICAgIGludCByZXQ7CiAKICAgICB3aGlsZSAoMSkgewpAQCAtNDA5Myw3 ICs0MDk3LDcgQEAgc3RhdGljIGludCBteGZfcmVhZF9wYWNrZXQoQVZGb3JtYXRDb250ZXh0ICpz LCBBVlBhY2tldCAqcGt0KQogICAgICAgICAgICAgfQogCiAgICAgICAgICAgICBzdCA9IHMtPnN0 cmVhbXNbaW5kZXhdOwotICAgICAgICAgICAgdHJhY2sgPSBzdC0+cHJpdl9kYXRhOworICAgICAg ICAgICAgdHJhY2sgPSAoTVhGVHJhY2sqKXN0LT5wcml2X2RhdGE7CiAKICAgICAgICAgICAgIGlm IChzLT5zdHJlYW1zW2luZGV4XS0+ZGlzY2FyZCA9PSBBVkRJU0NBUkRfQUxMKQogICAgICAgICAg ICAgICAgIGdvdG8gc2tpcDsKQEAgLTQxNzIsOSArNDE3Niw5IEBAIHN0YXRpYyBpbnQgbXhmX3Jl YWRfcGFja2V0KEFWRm9ybWF0Q29udGV4dCAqcywgQVZQYWNrZXQgKnBrdCkKICAgICByZXR1cm4g YXZpb19mZW9mKHMtPnBiKSA/IEFWRVJST1JfRU9GIDogcmV0OwogfQogCi1zdGF0aWMgaW50IG14 Zl9yZWFkX2Nsb3NlKEFWRm9ybWF0Q29udGV4dCAqcykKK2ludCBteGZfcmVhZF9jbG9zZShBVkZv cm1hdENvbnRleHQgKnMpCiB7Ci0gICAgTVhGQ29udGV4dCAqbXhmID0gcy0+cHJpdl9kYXRhOwor ICAgIE1YRkNvbnRleHQgKm14ZiA9IChNWEZDb250ZXh0KilzLT5wcml2X2RhdGE7CiAKICAgICBh dl9mcmVlcCgmbXhmLT5wYWNrYWdlc19yZWZzKTsKICAgICBhdl9mcmVlcCgmbXhmLT5lc3NlbmNl X2NvbnRhaW5lcl9kYXRhX3JlZnMpOwpAQCAtNDE4NSw3ICs0MTg5LDcgQEAgc3RhdGljIGludCBt eGZfcmVhZF9jbG9zZShBVkZvcm1hdENvbnRleHQgKnMpCiAgICAgZm9yIChpbnQgdHlwZSA9IDA7 IHR5cGUgPCBGRl9BUlJBWV9FTEVNUyhteGYtPm1ldGFkYXRhX3NldF9ncm91cHMpOyB0eXBlKysp IHsKICAgICAgICAgTVhGTWV0YWRhdGFTZXRHcm91cCAqbWcgPSAmbXhmLT5tZXRhZGF0YV9zZXRf Z3JvdXBzW3R5cGVdOwogICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IG1nLT5tZXRhZGF0YV9z ZXRzX2NvdW50OyBpKyspCi0gICAgICAgICAgICBteGZfZnJlZV9tZXRhZGF0YXNldChtZy0+bWV0 YWRhdGFfc2V0cyArIGksIHR5cGUpOworICAgICAgICAgICAgbXhmX2ZyZWVfbWV0YWRhdGFzZXQo bWctPm1ldGFkYXRhX3NldHMgKyBpLCAoTVhGTWV0YWRhdGFTZXRUeXBlKXR5cGUpOwogICAgICAg ICBtZy0+bWV0YWRhdGFfc2V0c19jb3VudCA9IDA7CiAgICAgICAgIGF2X2ZyZWVwKCZtZy0+bWV0 YWRhdGFfc2V0cyk7CiAgICAgfQpAQCAtNDIwNiw3ICs0MjEwLDcgQEAgc3RhdGljIGludCBteGZf cmVhZF9jbG9zZShBVkZvcm1hdENvbnRleHQgKnMpCiAgICAgcmV0dXJuIDA7CiB9CiAKLXN0YXRp YyBpbnQgbXhmX3Byb2JlKGNvbnN0IEFWUHJvYmVEYXRhICpwKSB7CitpbnQgbXhmX3Byb2JlKGNv bnN0IEFWUHJvYmVEYXRhICpwKSB7CiAgICAgY29uc3QgdWludDhfdCAqYnVmcCA9IHAtPmJ1ZjsK ICAgICBjb25zdCB1aW50OF90ICplbmQgPSBwLT5idWYgKyBGRk1JTihwLT5idWZfc2l6ZSwgUlVO X0lOX01BWCArIDEgKyBzaXplb2YobXhmX2hlYWRlcl9wYXJ0aXRpb25fcGFja19rZXkpKTsKIApA QCAtNDIzMywxNSArNDIzNywxNSBAQCBzdGF0aWMgaW50IG14Zl9wcm9iZShjb25zdCBBVlByb2Jl RGF0YSAqcCkgewogCiAvKiBydWRpbWVudGFyeSBieXRlIHNlZWsgKi8KIC8qIFhYWDogdXNlIE1Y RiBJbmRleCAqLwotc3RhdGljIGludCBteGZfcmVhZF9zZWVrKEFWRm9ybWF0Q29udGV4dCAqcywg aW50IHN0cmVhbV9pbmRleCwgaW50NjRfdCBzYW1wbGVfdGltZSwgaW50IGZsYWdzKQoraW50IG14 Zl9yZWFkX3NlZWsoQVZGb3JtYXRDb250ZXh0ICpzLCBpbnQgc3RyZWFtX2luZGV4LCBpbnQ2NF90 IHNhbXBsZV90aW1lLCBpbnQgZmxhZ3MpCiB7CiAgICAgQVZTdHJlYW0gKnN0ID0gcy0+c3RyZWFt c1tzdHJlYW1faW5kZXhdOwogICAgIGludDY0X3Qgc2Vjb25kczsKLSAgICBNWEZDb250ZXh0KiBt eGYgPSBzLT5wcml2X2RhdGE7CisgICAgTVhGQ29udGV4dCogbXhmID0gKE1YRkNvbnRleHQqKXMt PnByaXZfZGF0YTsKICAgICBpbnQ2NF90IHNlZWtwb3M7CiAgICAgaW50IHJldDsKICAgICBNWEZJ bmRleFRhYmxlICp0OwotICAgIE1YRlRyYWNrICpzb3VyY2VfdHJhY2sgPSBzdC0+cHJpdl9kYXRh OworICAgIE1YRlRyYWNrICpzb3VyY2VfdHJhY2sgPSAoTVhGVHJhY2sqKXN0LT5wcml2X2RhdGE7 CiAKICAgICBpZiAoIXNvdXJjZV90cmFjaykKICAgICAgICAgcmV0dXJuIDA7CkBAIC00MjcyLDcg KzQyNzYsNyBAQCBzdGF0aWMgaW50IG14Zl9yZWFkX3NlZWsoQVZGb3JtYXRDb250ZXh0ICpzLCBp bnQgc3RyZWFtX2luZGV4LCBpbnQ2NF90IHNhbXBsZV90aQogICAgICAgICAgICAgaW50IGk7CiAg ICAgICAgICAgICAvKiBJZiB0aGUgZmlyc3QgaW5kZXggdGFibGUgZG9lcyBub3QgYmVsb25nIHRv IHRoZSBzdHJlYW0sIHRoZW4gZmluZCBhIHN0cmVhbSB3aGljaCBkb2VzIGJlbG9uZyB0byB0aGUg aW5kZXggdGFibGUgKi8KICAgICAgICAgICAgIGZvciAoaSA9IDA7IGkgPCBzLT5uYl9zdHJlYW1z OyBpKyspIHsKLSAgICAgICAgICAgICAgICBNWEZUcmFjayAqbmV3X3NvdXJjZV90cmFjayA9IHMt PnN0cmVhbXNbaV0tPnByaXZfZGF0YTsKKyAgICAgICAgICAgICAgICBNWEZUcmFjayAqbmV3X3Nv dXJjZV90cmFjayA9IChNWEZUcmFjayopcy0+c3RyZWFtc1tpXS0+cHJpdl9kYXRhOwogICAgICAg ICAgICAgICAgIGlmIChuZXdfc291cmNlX3RyYWNrICYmIG5ld19zb3VyY2VfdHJhY2stPmluZGV4 X3NpZCA9PSB0LT5pbmRleF9zaWQpIHsKICAgICAgICAgICAgICAgICAgICAgc2FtcGxlX3RpbWUg PSBhdl9yZXNjYWxlX3Eoc2FtcGxlX3RpbWUsIG5ld19zb3VyY2VfdHJhY2stPmVkaXRfcmF0ZSwg c291cmNlX3RyYWNrLT5lZGl0X3JhdGUpOwogICAgICAgICAgICAgICAgICAgICBzb3VyY2VfdHJh Y2sgPSBuZXdfc291cmNlX3RyYWNrOwpAQCAtNDMzMyw3ICs0MzM3LDcgQEAgc3RhdGljIGludCBt eGZfcmVhZF9zZWVrKEFWRm9ybWF0Q29udGV4dCAqcywgaW50IHN0cmVhbV9pbmRleCwgaW50NjRf dCBzYW1wbGVfdGkKICAgICAvLyBVcGRhdGUgYWxsIHRyYWNrcyBzYW1wbGUgY291bnQKICAgICBm b3IgKGludCBpID0gMDsgaSA8IHMtPm5iX3N0cmVhbXM7IGkrKykgewogICAgICAgICBBVlN0cmVh bSAqY3VyX3N0ID0gcy0+c3RyZWFtc1tpXTsKLSAgICAgICAgTVhGVHJhY2sgKmN1cl90cmFjayA9 IGN1cl9zdC0+cHJpdl9kYXRhOworICAgICAgICBNWEZUcmFjayAqY3VyX3RyYWNrID0gKE1YRlRy YWNrKiljdXJfc3QtPnByaXZfZGF0YTsKICAgICAgICAgaWYgKGN1cl90cmFjaykgewogICAgICAg ICAgICAgaW50NjRfdCB0cmFja19lZGl0X3VuaXQgPSBzYW1wbGVfdGltZTsKICAgICAgICAgICAg IGlmIChzdCAhPSBjdXJfc3QpCkBAIC00MzQzLDMyICs0MzQ3LDMgQEAgc3RhdGljIGludCBteGZf cmVhZF9zZWVrKEFWRm9ybWF0Q29udGV4dCAqcywgaW50IHN0cmVhbV9pbmRleCwgaW50NjRfdCBz YW1wbGVfdGkKICAgICB9CiAgICAgcmV0dXJuIDA7CiB9Ci0KLXN0YXRpYyBjb25zdCBBVk9wdGlv biBvcHRpb25zW10gPSB7Ci0gICAgeyAiZWlhNjA4X2V4dHJhY3QiLCAiZXh0cmFjdCBlaWEgNjA4 IGNhcHRpb25zIGZyb20gczQzNm0gdHJhY2siLAotICAgICAgb2Zmc2V0b2YoTVhGQ29udGV4dCwg ZWlhNjA4X2V4dHJhY3QpLCBBVl9PUFRfVFlQRV9CT09MLCB7Lmk2NCA9IDB9LCAwLCAxLAotICAg ICAgQVZfT1BUX0ZMQUdfREVDT0RJTkdfUEFSQU0gfSwKLSAgICB7IE5VTEwgfSwKLX07Ci0KLXN0 YXRpYyBjb25zdCBBVkNsYXNzIGRlbXV4ZXJfY2xhc3MgPSB7Ci0gICAgLmNsYXNzX25hbWUgPSAi bXhmIiwKLSAgICAuaXRlbV9uYW1lICA9IGF2X2RlZmF1bHRfaXRlbV9uYW1lLAotICAgIC5vcHRp b24gICAgID0gb3B0aW9ucywKLSAgICAudmVyc2lvbiAgICA9IExJQkFWVVRJTF9WRVJTSU9OX0lO VCwKLSAgICAuY2F0ZWdvcnkgICA9IEFWX0NMQVNTX0NBVEVHT1JZX0RFTVVYRVIsCi19OwotCi1j b25zdCBGRklucHV0Rm9ybWF0IGZmX214Zl9kZW11eGVyID0gewotICAgIC5wLm5hbWUgICAgICAg ICA9ICJteGYiLAotICAgIC5wLmxvbmdfbmFtZSAgICA9IE5VTExfSUZfQ09ORklHX1NNQUxMKCJN WEYgKE1hdGVyaWFsIGVYY2hhbmdlIEZvcm1hdCkiKSwKLSAgICAucC5mbGFncyAgICAgICAgPSBB VkZNVF9TRUVLX1RPX1BUUyB8IEFWRk1UX05PR0VOU0VBUkNILAotICAgIC5wLnByaXZfY2xhc3Mg ICA9ICZkZW11eGVyX2NsYXNzLAotICAgIC5wcml2X2RhdGFfc2l6ZSA9IHNpemVvZihNWEZDb250 ZXh0KSwKLSAgICAuZmxhZ3NfaW50ZXJuYWwgPSBGRl9JTkZNVF9GTEFHX0lOSVRfQ0xFQU5VUCwK LSAgICAucmVhZF9wcm9iZSAgICAgPSBteGZfcHJvYmUsCi0gICAgLnJlYWRfaGVhZGVyICAgID0g bXhmX3JlYWRfaGVhZGVyLAotICAgIC5yZWFkX3BhY2tldCAgICA9IG14Zl9yZWFkX3BhY2tldCwK LSAgICAucmVhZF9jbG9zZSAgICAgPSBteGZfcmVhZF9jbG9zZSwKLSAgICAucmVhZF9zZWVrICAg ICAgPSBteGZfcmVhZF9zZWVrLAotfTsKZGlmZiAtLWdpdCBhL2xpYmF2Zm9ybWF0L214ZmRlYy5o IGIvbGliYXZmb3JtYXQvbXhmZGVjLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAw MDAwMC4uMzY4MGUwYThhYwotLS0gL2Rldi9udWxsCisrKyBiL2xpYmF2Zm9ybWF0L214ZmRlYy5o CkBAIC0wLDAgKzEsODIgQEAKKy8qCisgKiBDLXRvLUMrKyBicmlkZ2UgaGVhZGVyIGZvciBNWEYg ZGVtdXhlci4KKyAqIENvcHlyaWdodCAoYykgMjAyNSBUb21hcyBIw6RyZGluCisgKgorICogVGhp cyBmaWxlIGlzIHBhcnQgb2YgRkZtcGVnLgorICoKKyAqIEZGbXBlZyBpcyBmcmVlIHNvZnR3YXJl OyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUg dGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVi bGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogdmVyc2lv biAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNp b24uCisgKgorICogRkZtcGVnIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2ls bCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0 aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9S IEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIExlc3NlciBHZW5lcmFsIFB1 YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJl Y2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworICogTGljZW5z ZSBhbG9uZyB3aXRoIEZGbXBlZzsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQor ICogRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9z dG9uLCBNQSAwMjExMC0xMzAxIFVTQQorICovCisKKyNpZm5kZWYgQVZGT1JNQVRfTVhGREVDX0gK KyNkZWZpbmUgQVZGT1JNQVRfTVhGREVDX0gKKworI2luY2x1ZGUgIm14Zi5oIgorCit0eXBlZGVm IGVudW0geworICAgIE9QMWEgPSAxLAorICAgIE9QMWIsCisgICAgT1AxYywKKyAgICBPUDJhLAor ICAgIE9QMmIsCisgICAgT1AyYywKKyAgICBPUDNhLAorICAgIE9QM2IsCisgICAgT1AzYywKKyAg ICBPUEF0b20sCisgICAgT1BTT05ZT3B0LCAgLyogRkFURSBzYW1wbGUsIHZpb2xhdGVzIHRoZSBz cGVjIGluIHBsYWNlcyAqLworfSBNWEZPUDsKKworc3RydWN0IE1YRkluZGV4VGFibGU7CitzdHJ1 Y3QgTVhGTWV0YWRhdGFTZXQ7CitzdHJ1Y3QgTVhGUGFydGl0aW9uOworCit0eXBlZGVmIHN0cnVj dCBNWEZNZXRhZGF0YVNldEdyb3VwIHsKKyAgICBzdHJ1Y3QgTVhGTWV0YWRhdGFTZXQgKiptZXRh ZGF0YV9zZXRzOworICAgIGludCBtZXRhZGF0YV9zZXRzX2NvdW50OworfSBNWEZNZXRhZGF0YVNl dEdyb3VwOworCit0eXBlZGVmIHN0cnVjdCBNWEZDb250ZXh0IHsKKyAgICBjb25zdCBBVkNsYXNz ICpfY2xhc3M7ICAgICAvKio8IENsYXNzIGZvciBwcml2YXRlIG9wdGlvbnMuICovCisgICAgc3Ry dWN0IE1YRlBhcnRpdGlvbiAqcGFydGl0aW9uczsKKyAgICB1bnNpZ25lZCBwYXJ0aXRpb25zX2Nv dW50OworICAgIE1YRk9QIG9wOworICAgIFVJRCAqcGFja2FnZXNfcmVmczsKKyAgICBpbnQgcGFj a2FnZXNfY291bnQ7CisgICAgVUlEICplc3NlbmNlX2NvbnRhaW5lcl9kYXRhX3JlZnM7CisgICAg aW50IGVzc2VuY2VfY29udGFpbmVyX2RhdGFfY291bnQ7CisgICAgTVhGTWV0YWRhdGFTZXRHcm91 cCBtZXRhZGF0YV9zZXRfZ3JvdXBzW01ldGFkYXRhU2V0VHlwZU5CXTsKKyAgICBBVkZvcm1hdENv bnRleHQgKmZjOworICAgIHN0cnVjdCBBVkFFUyAqYWVzYzsKKyAgICB1aW50OF90ICpsb2NhbF90 YWdzOworICAgIGludCBsb2NhbF90YWdzX2NvdW50OworICAgIHVpbnQ2NF90IGZvb3Rlcl9wYXJ0 aXRpb247CisgICAgS0xWUGFja2V0IGN1cnJlbnRfa2x2X2RhdGE7CisgICAgaW50IHJ1bl9pbjsK KyAgICBzdHJ1Y3QgTVhGUGFydGl0aW9uICpjdXJyZW50X3BhcnRpdGlvbjsKKyAgICBpbnQgcGFy c2luZ19iYWNrd2FyZDsKKyAgICBpbnQ2NF90IGxhc3RfZm9yd2FyZF90ZWxsOworICAgIGludCBs YXN0X2ZvcndhcmRfcGFydGl0aW9uOworICAgIGludCBuYl9pbmRleF90YWJsZXM7CisgICAgc3Ry dWN0IE1YRkluZGV4VGFibGUgKmluZGV4X3RhYmxlczsKKyAgICBpbnQgZWlhNjA4X2V4dHJhY3Q7 Cit9IE1YRkNvbnRleHQ7CisKK2ludCBteGZfcHJvYmUoY29uc3QgQVZQcm9iZURhdGEgKnApOwor aW50IG14Zl9yZWFkX2hlYWRlcihBVkZvcm1hdENvbnRleHQgKnMpOworaW50IG14Zl9yZWFkX3Bh Y2tldChBVkZvcm1hdENvbnRleHQgKnMsIEFWUGFja2V0ICpwa3QpOworaW50IG14Zl9yZWFkX2Ns b3NlKEFWRm9ybWF0Q29udGV4dCAqcyk7CitpbnQgbXhmX3JlYWRfc2VlayhBVkZvcm1hdENvbnRl eHQgKnMsIGludCBzdHJlYW1faW5kZXgsIGludDY0X3Qgc2FtcGxlX3RpbWUsIGludCBmbGFncyk7 CisKKyNlbmRpZiAvKiBBVkZPUk1BVF9NWEZERUNfSCAqLwpkaWZmIC0tZ2l0IGEvbGliYXZmb3Jt YXQvbXhmZGVjX2MuYyBiL2xpYmF2Zm9ybWF0L214ZmRlY19jLmMKbmV3IGZpbGUgbW9kZSAxMDA2 NDQKaW5kZXggMDAwMDAwMDAwMC4uNDQ2NWI3NmU1OAotLS0gL2Rldi9udWxsCisrKyBiL2xpYmF2 Zm9ybWF0L214ZmRlY19jLmMKQEAgLTAsMCArMSw1MyBAQAorLyoKKyAqIEMgYmluZGluZyBmb3Ig TVhGIGRlbXV4ZXIuCisgKiBDb3B5cmlnaHQgKGMpIDIwMjUgVG9tYXMgSMOkcmRpbgorICoKKyAq IFRoaXMgZmlsZSBpcyBwYXJ0IG9mIEZGbXBlZy4KKyAqCisgKiBGRm1wZWcgaXMgZnJlZSBzb2Z0 d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIg dGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFz IHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZl cnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2 ZXJzaW9uLgorICoKKyAqIEZGbXBlZyBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0 IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2 ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNT IEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBMZXNzZXIgR2VuZXJh bCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2 ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAqIExp Y2Vuc2UgYWxvbmcgd2l0aCBGRm1wZWc7IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdh cmUKKyAqIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3Is IEJvc3RvbiwgTUEgMDIxMTAtMTMwMSBVU0EKKyAqLworCisjaW5jbHVkZSAibGliYXZ1dGlsL29w dC5oIgorI2luY2x1ZGUgImRlbXV4LmgiCisjaW5jbHVkZSAibXhmZGVjLmgiCisKK3N0YXRpYyBj b25zdCBBVk9wdGlvbiBvcHRpb25zW10gPSB7CisgICAgeyAiZWlhNjA4X2V4dHJhY3QiLCAiZXh0 cmFjdCBlaWEgNjA4IGNhcHRpb25zIGZyb20gczQzNm0gdHJhY2siLAorICAgICAgb2Zmc2V0b2Yo TVhGQ29udGV4dCwgZWlhNjA4X2V4dHJhY3QpLCBBVl9PUFRfVFlQRV9CT09MLCB7Lmk2NCA9IDB9 LCAwLCAxLAorICAgICAgQVZfT1BUX0ZMQUdfREVDT0RJTkdfUEFSQU0gfSwKKyAgICB7IE5VTEwg fSwKK307CisKK3N0YXRpYyBjb25zdCBBVkNsYXNzIGRlbXV4ZXJfY2xhc3MgPSB7CisgICAgLmNs YXNzX25hbWUgPSAibXhmIiwKKyAgICAuaXRlbV9uYW1lICA9IGF2X2RlZmF1bHRfaXRlbV9uYW1l LAorICAgIC5vcHRpb24gICAgID0gb3B0aW9ucywKKyAgICAudmVyc2lvbiAgICA9IExJQkFWVVRJ TF9WRVJTSU9OX0lOVCwKKyAgICAuY2F0ZWdvcnkgICA9IEFWX0NMQVNTX0NBVEVHT1JZX0RFTVVY RVIsCit9OworCitjb25zdCBGRklucHV0Rm9ybWF0IGZmX214Zl9kZW11eGVyID0geworICAgIC5w Lm5hbWUgICAgICAgICA9ICJteGYiLAorICAgIC5wLmxvbmdfbmFtZSAgICA9IE5VTExfSUZfQ09O RklHX1NNQUxMKCJNWEYgKE1hdGVyaWFsIGVYY2hhbmdlIEZvcm1hdCkiKSwKKyAgICAucC5mbGFn cyAgICAgICAgPSBBVkZNVF9TRUVLX1RPX1BUUyB8IEFWRk1UX05PR0VOU0VBUkNILAorICAgIC5w LnByaXZfY2xhc3MgICA9ICZkZW11eGVyX2NsYXNzLAorICAgIC5wcml2X2RhdGFfc2l6ZSA9IHNp emVvZihNWEZDb250ZXh0KSwKKyAgICAuZmxhZ3NfaW50ZXJuYWwgPSBGRl9JTkZNVF9GTEFHX0lO SVRfQ0xFQU5VUCwKKyAgICAucmVhZF9wcm9iZSAgICAgPSBteGZfcHJvYmUsCisgICAgLnJlYWRf aGVhZGVyICAgID0gbXhmX3JlYWRfaGVhZGVyLAorICAgIC5yZWFkX3BhY2tldCAgICA9IG14Zl9y ZWFkX3BhY2tldCwKKyAgICAucmVhZF9jbG9zZSAgICAgPSBteGZfcmVhZF9jbG9zZSwKKyAgICAu cmVhZF9zZWVrICAgICAgPSBteGZfcmVhZF9zZWVrLAorfTsKLS0gCjIuNDcuMgoK --=-n0GCyFEbXToqj0prLmk3 Content-Type: text/plain; charset="us-ascii" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit Content-Disposition: inline _______________________________________________ ffmpeg-devel mailing list -- ffmpeg-devel@ffmpeg.org To unsubscribe send an email to ffmpeg-devel-leave@ffmpeg.org --=-n0GCyFEbXToqj0prLmk3--