From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from ste-pvt-msa1.bahnhof.se (ste-pvt-msa1.bahnhof.se [213.80.101.70]) by sourceware.org (Postfix) with ESMTPS id EF2703858C35 for ; Sun, 26 Nov 2023 23:15:32 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.2 sourceware.org EF2703858C35 Authentication-Results: sourceware.org; dmarc=none (p=none dis=none) header.from=bahnhof.se Authentication-Results: sourceware.org; spf=pass smtp.mailfrom=bahnhof.se ARC-Filter: OpenARC Filter v1.0.0 sourceware.org EF2703858C35 Authentication-Results: server2.sourceware.org; arc=none smtp.remote-ip=213.80.101.70 ARC-Seal: i=1; a=rsa-sha256; d=sourceware.org; s=key; t=1701040540; cv=none; b=rmsGvplyzpgW6HI/d7440S2Pbyj1G39qXB21BcZlXVP528KJyWfHpS8zH3jslSsnrHDeCEAscF6QtaS+u2u3LWMkl38GxdaV0/DcSTQ8XeQ7QtZWODJYMM+lTO7YCLh0ymbliOSZrIuGlab04lBLmb2OND8wrzeHgIJ9JEPffYg= ARC-Message-Signature: i=1; a=rsa-sha256; d=sourceware.org; s=key; t=1701040540; c=relaxed/simple; bh=IkRkzgaG7cVs8X1nmlifpvzCzBvlg20dgd+ZgLlIqXI=; h=DKIM-Signature:Message-ID:Date:MIME-Version:Subject:To:From; b=DjBSBw85LSIjPFUTRjkEdew7sxuVA5d1JbLLKKPVzTVzeZPOpf9qTuPdpUHNh+LbYi3fRpZuAndvEdv+jtROGQtNjBggmC9H+mAWcLw3U1jmHRhrl65PwXuitMfXAcZDW8TKGDhZaXw9qKoYzx+cJabjiV2SAHfpGifRTXRnHpA= ARC-Authentication-Results: i=1; server2.sourceware.org Received: from localhost (localhost [127.0.0.1]) by ste-pvt-msa1.bahnhof.se (Postfix) with ESMTP id 616423FD16; Mon, 27 Nov 2023 00:15:31 +0100 (CET) X-Virus-Scanned: Debian amavisd-new at bahnhof.se X-Spam-Score: -2.111 X-Spam-Level: X-Spam-Status: No, score=-12.6 required=5.0 tests=BAYES_00,DKIM_SIGNED,DKIM_VALID,DKIM_VALID_AU,DKIM_VALID_EF,GIT_PATCH_0,KAM_ASCII_DIVIDERS,RCVD_IN_DNSWL_LOW,SPF_HELO_NONE,SPF_PASS,TXREP,T_SCC_BODY_TEXT_LINE autolearn=ham autolearn_force=no version=3.4.6 Authentication-Results: ste-pvt-msa1.bahnhof.se (amavisd-new); dkim=pass (2048-bit key) header.d=bahnhof.se Received: from ste-pvt-msa1.bahnhof.se ([127.0.0.1]) by localhost (ste-pvt-msa1.bahnhof.se [127.0.0.1]) (amavisd-new, port 10024) with ESMTP id 7JQFverpUX8b; Mon, 27 Nov 2023 00:15:29 +0100 (CET) Received: by ste-pvt-msa1.bahnhof.se (Postfix) with ESMTPA id 4638D3F8F3; Mon, 27 Nov 2023 00:15:29 +0100 (CET) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=bahnhof.se; s=default; t=1701040529; bh=IkRkzgaG7cVs8X1nmlifpvzCzBvlg20dgd+ZgLlIqXI=; h=Date:Subject:To:References:From:In-Reply-To:From; b=Ak68apz5O0evC8dT7aK+Q8LP0ygoqeoovGJ2jMaKTrTGaT1mzq8c+vh8tdRnlUDBh 0NUwqzgA1vJTHq3efsnGX0+d8f1dYO/THW3eNh5YBNNH0EeT3DyopV2yLFd6cOZsIZ 8/wgJ4HWLolOCzdAis4qQrP3XXseG1kdaifLNTa4hstRT4rm0G9Fyyn7eTzFSPfq6r cJKwTU3FufhUWtmqz0IaDGULWFaouqzhuZnT5WFyfRyaauPOpDnkWv4S8e+kb3WkVY rwAGIL0+TbLg/dWRNIaQPQHchilXN450JO604GgjYhfZ9SlGuEMVPI+CFygtfv4Aeh c/RwNuZJVQNoA== Content-Type: multipart/mixed; boundary="------------luoXfkT5B80ulEydM5V6Or6U" Message-ID: <51b4053d-bcd3-425b-9e54-f9fc5dcaac72@bahnhof.se> Date: Mon, 27 Nov 2023 00:15:28 +0100 MIME-Version: 1.0 User-Agent: Mozilla Thunderbird Subject: Re: [PATCH 1/2] jit: Complex types and loong constants To: David Malcolm , jit@gcc.gnu.org References: <697d6d25-c8fb-452b-8997-7ea28b6eb659@bahnhof.se> <3c502ba4-ffc1-4faf-8e3f-f7b7367a50e5@bahnhof.se> <4f908fb2947d419a0260bd17107a353f4f0ab057.camel@redhat.com> Content-Language: en-US From: Petter Tomner In-Reply-To: <4f908fb2947d419a0260bd17107a353f4f0ab057.camel@redhat.com> X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on server2.sourceware.org List-Id: This is a multi-part message in MIME format. --------------luoXfkT5B80ulEydM5V6Or6U Content-Type: text/plain; charset=UTF-8; format=flowed Content-Transfer-Encoding: 7bit > The patch adds usage of "_Complex" to libgccjit.h. ... "C99 or later" > preprocessor guard. ... Also, this needs to be includeable from C++; I'm not sure what the > precise requirements there are. I did some thinking and I think it is impossible to mix std::complex and _Complex in the same entry point. I did split up the _Complex parameters in the entrypoints to one real and one imaginary part instead. That way is standard agnostic too. + gcc_jit_context_new_rvalue_from_complex_double (gcc_jit_context *ctxt, + gcc_jit_type *numeric_type, + double real, double imag) > so presumably it should also guard > gcc_jit_context_new_binary_op with op == GCC_JIT_BINARY_OP_COMPLEX. + if (op == GCC_JIT_BINARY_OP_COMPLEX) + { + RETURN_NULL_IF_FAIL ( + ctxt->get_inner_bool_option (gcc::jit::INNER_BOOL_OPTION_ENABLE_COMPLEX_TYPES), + ctxt, NULL, + "the complex operator is only available after enabling it with" + " gcc_jit_context_set_bool_enable_complex_types()"); > though I'm > nervous about all the tests that are comparing floating point values > for equality; do we always get the precise expected value, on every > target? Floating point equality comparisons tend to be a nightmare in > unit tests. + CHECK (cabs (ref - ans) < 0.0001); + CHECK_DOUBLE_VALUE (creal (ans), creal (key)); + CHECK_DOUBLE_VALUE (cimag (ans), cimag (key)); I changed the comparisons that involve csqrt() and cpow () to be range checks instead. I guess libgccjit and the test exe could maybe end up with different math-libs or something and those are approximations. Also I removed the bytewise long double nan compare since I realized the padding bytes changed when the optimization level is set to non-zero, and I think getting the non-padding bytes might be hard in a platform independent way. I think that the constant folds in the test exe and the compilation in libgccjit should always end up with the same bit exact floating point number. Otherwise the host is really strange and the user is probably happy to know that the calculations might differ. Like, the operation order is the same and there should be no associativity errors (unless I messed up the order in the key result and the libgccjit compilation). Some old Intel processors with use the x87 FPU didn't adhere to IEEE floating point behavior, and constant folding and runtime calculations would lead to different results on those. I have run make check-jit in a 32 bit Debian VM though, so I think I got the tests right with that in mind. E.g.: #include main () { volatile double pi = 3.1416; double foo = pi * 6.28; double pi2 = 3.1416; double foo2 = pi2 * 6.28; printf ("Runtime: %g, ", foo - 3.1416 * 6.28); printf ("%d ", foo == 3.1416 * 6.28); printf ("Folded: %g, ", foo2 - 3.1416 * 6.28); printf ("%d\n", foo2 == 3.1416 * 6.28); // -m32 -mfpmath=387 -O0 => Runtime: 0, 1 Folded: 0, 1 // -m32 -mfpmath=387 -O2 => Runtime: -1.43982e-15, 1 Folded: 0, 1 // -m32 -mfpmath=sse -O2 => Runtime: 0, 1 Folded: 0, 1 } --------------luoXfkT5B80ulEydM5V6Or6U Content-Type: text/x-patch; charset=UTF-8; name="0001-Complex.patch" Content-Disposition: attachment; filename="0001-Complex.patch" Content-Transfer-Encoding: base64 RnJvbSBhZGM4ZDZlOWQzZWM0OGQwNDVmYmI5ZWMxOTdmMTQxZWQ1NzQ0YWM5IE1vbiBTZXAg MTcgMDA6MDA6MDAgMjAwMQpGcm9tOiBQZXR0ZXIgVG9tbmVyIDx0b21uZXJAYmFobmhvZi5z ZT4KRGF0ZTogRnJpLCAxNSBPY3QgMjAyMSAyMDoxNjo1NCArMDIwMApTdWJqZWN0OiBbUEFU Q0ggMS8yXSBDb21wbGV4CgpKSVQ6IEZpeCBzdXBwb3J0IGZvciBjb21wbGV4IHR5cGVzCgpU aGUgcGF0Y2ggYWRkcyBzdXBwb3J0IG9mIGNvbXBsZXggZmxvYXRpbmcgcG9pbnQgdHlwZXMg dG8gbGliZ2Njaml0LgpBIG5ldyBiaW5hcnkgb3BlcmF0b3IgJ0NPTVBMRVgnIGlzIGFkZGVk IHRvIGNyZWF0ZSBjb21wbGV4IHZhbHVlcwpmcm9tIHJlYWwgdmFsdWVzLiBBc3dlbGwgYXMg YSBmdW5jdGlvbiB0byBjcmVhdGUgYSBjb21wbGV4IGRvdWJsZQpsaXRlcmFsLgoKVG8gbm90 aWZ5IHVzZXJzIGlmIGEgYmluYXJ5IGxpbmtpbmcgdG8gbGliZ2Njaml0IGRlcGVuZHMgb24g Y29tcGxleAp0eXBlcywgY29tcGxleCB0eXBlIHN1cHBvcnQgbW9zdCBiZSBlbmFibGVkIHdp dGggYSBuZXcgb3B0aW9uIGZ1bmN0aW9uCnNpbmNlIHRoZXkgYWxscmVhZHkgYXJlIGluIHRo ZSB0eXBlcyBlbnVtLgoKU2lnbmVkLW9mZi1ieToKMjAyMS0xMC0yMSAgUGV0dGVyIFRvbW5l ciAgPHRvbW5lckBiYWhuaG9mLnNlPgoKZ2NjL2ppdC8KCSogaml0LWNvbW1vbi5oIDogKElO TkVSX0JPT0xfT1BUSU9OX0VOQUJMRV9DT01QTEVYX1RZUEVTKTogTmV3CgkqIGppdC1wbGF5 YmFjay5jIDogQ3JlYXRlIGltYWdpbmFyeSBsaXRlcmFscywgY29udmVyc2lvbnMKCSAgKGNv bXBsZXhfcmVhbF90b19yZWFsKSA6IE5ldwoJICAobmV3X3J2YWx1ZV9mcm9tX2NvbnN0IDxo b3N0X3BhaXI8ZG91YmxlPj4pIDogTmV3CgkgIChuZXdfYmluYXJ5X29wKSA6IEFkZCBDT01Q TEVYIG9wZXJhdG9yCgkgIChidWlsZF9jYXN0KSA6IENhc3RzIHRvIGNvbXBsZXgKCSAgKG1l bWVudG9fb2ZfbmV3X3J2YWx1ZV9mcm9tX2NvbnN0IDxob3N0X3BhaXI8ZG91YmxlPj4pIDog TmV3CgkgIChiaW5hcnlfb3A6Om1ha2VfZGVidWdfc3RyaW5nKSA6IEhhbmRsZSBjb21wbGV4 IG9wZXJhdG9yCgkqIGppdC1yZWNvcmRpbmcuYyA6IFJlcHJvZHVjZXIsIGRlYnVnIHN0cmlu Z3MsIGZvcndhcmRpbmcKCSogaml0LXJlY29yZGluZy5oIDoKCSAgKGZsb2F0X3NpemVfcXVh bCkgOiBQb2xsIHNpemUgcXVhbGlmaWVyIG9mIGZsb2F0IHR5cGVzCgkgIChpc19jb21wbGV4 KSA6IFBvbGwgaWYgdHlwZSBpcyBjb21wbGV4CgkgIChob3N0X3BhaXI8SE9TVF9UWVBFPikg OiBzdHJ1Y3Qgb2YgcGFpciB2YWx1ZXMKCSogbGliZ2Njaml0KysuaCA6IE5ldyBlbnRyeXBv aW50cywgc2VlIGJlbG93CgkqIGxpYmdjY2ppdC5jIDogSW1wbGVtZW50YXRpb24gb2YgbmV3 IGVudHJ5IHBvaW50cywgc2VlIC5oCgkgIChnY2Nfaml0X2NvbnRleHRfZ2V0X3R5cGUpIDog RXh0ZW5kIHJhbmdlIGNoZWNrLCB2YWxpZGF0aW9uCgkgICh2YWxpZF9iaW5hcnlfb3BfcCkg OiBFeHRlbmQgcmFuZ2UgY2hlY2sKCSAgKGdjY19qaXRfY29udGV4dF9uZXdfYmluYXJ5X29w KSA6IFZhbGlkYXRpb24KCSAgKGdjY19qaXRfY29udGV4dF9uZXdfdW5hcnlfb3ApIDogVmFs aWRhdGlvbgoJICAoZ2NjX2ppdF9jb250ZXh0X25ld19jb21wYXJpc29uKSA6IFZhbGlkYXRp b24KCSogbGliZ2Njaml0LmggOgoJICAoZ2NjX2ppdF9jb250ZXh0X25ld19ydmFsdWVfZnJv bV9jb21wbGV4X2RvdWJsZSkgOiBOZXcKCSAgKEdDQ19KSVRfQklOQVJZX09QX0NPTVBMRVgp IDogTmV3CgkgIChMSUJHQ0NKSVRfSEFWRV9DT01QTEVYKSA6IE5ldwoJICAoZ2NjX2ppdF9j b250ZXh0X3NldF9ib29sX2VuYWJsZV9jb21wbGV4X3R5cGVzKSA6IE5ldwoJKiBsaWJnY2Nq aXQubWFwIDogQWRkZWQgbmV3IGVudHJ5cG9pbnRzCgkgIChMSUJHQ0NKSVRfQUJJXzI2KSA6 IE5ldwoKZ2NjL3Rlc3RzdWl0ZS8KCSogaml0LmRnL3Rlc3QtY29tcGxleC1idWlsdGlucy5j IDogTmV3CgkqIGppdC5kZy90ZXN0LWNvbXBsZXgtbGl0ZXJhbHMuYyA6IE5ldwoJKiBqaXQu ZGcvdGVzdC1jb21wbGV4LW1pc2MuYyA6IE5ldwoJKiBqaXQuZGcvdGVzdC1jb21wbGV4LW9w ZXJhdG9ycy5jIDogTmV3CgkqIGppdC5kZy90ZXN0LWNvbXBsZXgtdHlwZXMuYyA6IE5ldwoJ KiBqaXQuZGcvdGVzdC1lcnJvci1jb21wbGV4LW5vZW5hYmxlLmMgOiBOZXcKCmdjYy9qaXQv ZG9jcy90b3BpY3MvCgkqIGNvbXBhdGliaWxpdHkucnN0IDogVXBkYXRlIGRvY3MKCSogY29u dGV4dHMucnN0CgkqIGV4cHJlc3Npb25zLnJzdAoJKiB0eXBlcy5yc3QKLS0tCiBnY2Mvaml0 L2RvY3MvdG9waWNzL2NvbXBhdGliaWxpdHkucnN0ICAgICAgICAgfCAgMTYgKwogZ2NjL2pp dC9kb2NzL3RvcGljcy9jb250ZXh0cy5yc3QgICAgICAgICAgICAgIHwgIDIxICstCiBnY2Mv aml0L2RvY3MvdG9waWNzL2V4cHJlc3Npb25zLnJzdCAgICAgICAgICAgfCAxMjQgKystLQog Z2NjL2ppdC9kb2NzL3RvcGljcy90eXBlcy5yc3QgICAgICAgICAgICAgICAgIHwgIDEyICst CiBnY2Mvaml0L2ppdC1jb21tb24uaCAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgIDIg Ky0KIGdjYy9qaXQvaml0LXBsYXliYWNrLmNjICAgICAgICAgICAgICAgICAgICAgICB8IDE2 NSArKysrLQogZ2NjL2ppdC9qaXQtcmVjb3JkaW5nLmNjICAgICAgICAgICAgICAgICAgICAg IHwgMTc5ICsrKystCiBnY2Mvaml0L2ppdC1yZWNvcmRpbmcuaCAgICAgICAgICAgICAgICAg ICAgICAgfCAgNDYgKysKIGdjYy9qaXQvbGliZ2Njaml0KysuaCAgICAgICAgICAgICAgICAg ICAgICAgICB8ICAzNiArCiBnY2Mvaml0L2xpYmdjY2ppdC5jYyAgICAgICAgICAgICAgICAg ICAgICAgICAgfCAgOTYgKystCiBnY2Mvaml0L2xpYmdjY2ppdC5oICAgICAgICAgICAgICAg ICAgICAgICAgICAgfCAgNjEgKy0KIGdjYy9qaXQvbGliZ2Njaml0Lm1hcCAgICAgICAgICAg ICAgICAgICAgICAgICB8ICAgNiArCiBnY2MvdGVzdHN1aXRlL2ppdC5kZy9hbGwtbm9uLWZh aWxpbmctdGVzdHMuaCAgfCAgMzAgKwogZ2NjL3Rlc3RzdWl0ZS9qaXQuZGcvdGVzdC1jb21w bGV4LWJ1aWx0aW5zLmMgIHwgMjEzICsrKysrKwogZ2NjL3Rlc3RzdWl0ZS9qaXQuZGcvdGVz dC1jb21wbGV4LWxpdGVyYWxzLmMgIHwgMTQ2ICsrKysKIGdjYy90ZXN0c3VpdGUvaml0LmRn L3Rlc3QtY29tcGxleC1taXNjLmMgICAgICB8IDI0MSArKysrKysrCiBnY2MvdGVzdHN1aXRl L2ppdC5kZy90ZXN0LWNvbXBsZXgtb3BlcmF0b3JzLmMgfCAzNTMgKysrKysrKysrCiBnY2Mv dGVzdHN1aXRlL2ppdC5kZy90ZXN0LWNvbXBsZXgtdHlwZXMuYyAgICAgfCA2NzcgKysrKysr KysrKysrKysrKysrCiAuLi4vaml0LmRnL3Rlc3QtZXJyb3ItY29tcGxleC1ub2VuYWJsZS5j ICAgICAgfCAgMzEgKwogMTkgZmlsZXMgY2hhbmdlZCwgMjM5MCBpbnNlcnRpb25zKCspLCA2 NSBkZWxldGlvbnMoLSkKIGNyZWF0ZSBtb2RlIDEwMDY0NCBnY2MvdGVzdHN1aXRlL2ppdC5k Zy90ZXN0LWNvbXBsZXgtYnVpbHRpbnMuYwogY3JlYXRlIG1vZGUgMTAwNjQ0IGdjYy90ZXN0 c3VpdGUvaml0LmRnL3Rlc3QtY29tcGxleC1saXRlcmFscy5jCiBjcmVhdGUgbW9kZSAxMDA2 NDQgZ2NjL3Rlc3RzdWl0ZS9qaXQuZGcvdGVzdC1jb21wbGV4LW1pc2MuYwogY3JlYXRlIG1v ZGUgMTAwNjQ0IGdjYy90ZXN0c3VpdGUvaml0LmRnL3Rlc3QtY29tcGxleC1vcGVyYXRvcnMu YwogY3JlYXRlIG1vZGUgMTAwNjQ0IGdjYy90ZXN0c3VpdGUvaml0LmRnL3Rlc3QtY29tcGxl eC10eXBlcy5jCiBjcmVhdGUgbW9kZSAxMDA2NDQgZ2NjL3Rlc3RzdWl0ZS9qaXQuZGcvdGVz dC1lcnJvci1jb21wbGV4LW5vZW5hYmxlLmMKCmRpZmYgLS1naXQgYS9nY2Mvaml0L2RvY3Mv dG9waWNzL2NvbXBhdGliaWxpdHkucnN0IGIvZ2NjL2ppdC9kb2NzL3RvcGljcy9jb21wYXRp YmlsaXR5LnJzdAppbmRleCBlYmVkZTQ0MGVlNC4uNjkyMmEyZjY3ZTkgMTAwNjQ0Ci0tLSBh L2djYy9qaXQvZG9jcy90b3BpY3MvY29tcGF0aWJpbGl0eS5yc3QKKysrIGIvZ2NjL2ppdC9k b2NzL3RvcGljcy9jb21wYXRpYmlsaXR5LnJzdApAQCAtMzc4LDMgKzM3OCwxOSBAQCBhbGln bm1lbnQgb2YgYSB2YXJpYWJsZToKIC0tLS0tLS0tLS0tLS0tLS0tLS0tCiBgYExJQkdDQ0pJ VF9BQklfMjVgYCBjb3ZlcnMgdGhlIGFkZGl0aW9uIG9mCiA6ZnVuYzpgZ2NjX2ppdF90eXBl X2dldF9yZXN0cmljdGAKKworLi4gX0xJQkdDQ0pJVF9BQklfMjY6CisKK2BgTElCR0NDSklU X0FCSV8yNmBgCistLS0tLS0tLS0tLS0tLS0tLS0tLQorYGBMSUJHQ0NKSVRfQUJJXzI2YGAg Y292ZXJzIHRoZSBhZGRpdGlvbiBvZiBzdXBwb3J0IGZvciBjb21wbGV4IHR5cGVzLAorbGl0 ZXJhbHMgZm9yIGNvbXBsZXggdHlwZXMgYXMgd2VsbCBhcyB0aGUKK2NvbXBsZXggYmluYXJ5 IG9wZXJhdG9yLgorCitOb3RlIHRoYXQgOmM6bWFjcm86YEdDQ19KSVRfVFlQRV9DT01QTEVY X0ZMT0FUYCBldGMuIGV4aXN0ZWQgaW4gZWFybGllcgorQUJJOnMsIGJ1dCB3ZXJlIG5vdCBm dW5jdGlvbmFsLgorCisgICogIDpmdW5jOmBnY2Nfaml0X2NvbnRleHRfbmV3X3J2YWx1ZV9m cm9tX2NvbXBsZXhfZG91YmxlYAorICAqICA6ZnVuYzpgZ2NjX2ppdF9jb250ZXh0X3NldF9i b29sX2VuYWJsZV9jb21wbGV4X3R5cGVzYAorICAqICA6YzptYWNybzpgR0NDX0pJVF9CSU5B UllfT1BfQ09NUExFWGAKKwpkaWZmIC0tZ2l0IGEvZ2NjL2ppdC9kb2NzL3RvcGljcy9jb250 ZXh0cy5yc3QgYi9nY2Mvaml0L2RvY3MvdG9waWNzL2NvbnRleHRzLnJzdAppbmRleCBiMjJl YjJhYTk4My4uMjU2MWIyYmFmYTcgMTAwNjQ0Ci0tLSBhL2djYy9qaXQvZG9jcy90b3BpY3Mv Y29udGV4dHMucnN0CisrKyBiL2djYy9qaXQvZG9jcy90b3BpY3MvY29udGV4dHMucnN0CkBA IC01MDIsNyArNTAyLDI2IEBAIEJvb2xlYW4gb3B0aW9ucwogCiAgICAuLiBjb2RlLWJsb2Nr OjogYwogCi0gICAgICAjaWZkZWYgTElCR0NDSklUX0hBVkVfZ2NjX2ppdF9jb250ZXh0X3Nl dF9ib29sX3ByaW50X2Vycm9yc190b19zdGRlcnIKKyAgICAgI2lmZGVmIExJQkdDQ0pJVF9I QVZFX2djY19qaXRfY29udGV4dF9zZXRfYm9vbF9wcmludF9lcnJvcnNfdG9fc3RkZXJyCisK Ky4uIGZ1bmN0aW9uOjogdm9pZFwKKyAgICAgICAgICAgICAgZ2NjX2ppdF9jb250ZXh0X3Nl dF9ib29sX2VuYWJsZV9jb21wbGV4X3R5cGVzIChnY2Nfaml0X2NvbnRleHQgKmN0eHQsXAor ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIGludCBib29sX3ZhbHVlKTsKKworICAgVGhpcyBvcHRpb24gY2FuIGVuYWJsZSBj b21wbGV4IHR5cGUgc3VwcG9ydCBpbiBsaWJnY2NqaXQuIEJ5IGRlZmF1bHQsCisgICBubyBj b21wbGV4IHR5cGVzIGNhbiBiZSB1c2VkLgorCisgICBJZiB5b3UgdXNlIGNvbXBsZXggdHlw ZXMsIGl0IGlzIHJlY29tbWVuZGVkIHRvIHVzZSBidWlsdGluIGZ1bmN0aW9ucworICAgYGNy ZWFsYCwgYGNpbWFnYCBhbmQgYGNvbmpgIGV0Yy4gd2l0aCB0aGUgY29ycmVjdCB0eXBlIHN1 ZmZpeCwgc2luY2UKKyAgIHRob3NlIGFyZSBpbmxpbmVkIGludG8gdGhlIGNvZGUsIHJhdGhl ciB0aGVuIGltcG9ydGVkIGZ1bmN0aW9ucyBmcm9tCisgICB0aGUgbWF0aCBsaWIgd2hpY2gg YXJlIG5vdC4gU2VlIDpyZWY6YGdjY19qaXRfY29udGV4dF9nZXRfYnVpbHRpbl9mdW5jdGlv bmAuCisKKyAgIFRoaXMgZW50cnlwb2ludCB3YXMgYWRkZWQgaW4gOnJlZjpgTElCR0NDSklU X0FCSV8yNmA7IHlvdSBjYW4gdGVzdCBmb3IKKyAgIGl0cyBwcmVzZW5jZSB1c2luZworCisg ICAuLiBjb2RlLWJsb2NrOjogYworCisgICAgICAjaWZkZWYgTElCR0NDSklUX0hBVkVfQ09N UExFWAogCiBJbnRlZ2VyIG9wdGlvbnMKICoqKioqKioqKioqKioqKgpkaWZmIC0tZ2l0IGEv Z2NjL2ppdC9kb2NzL3RvcGljcy9leHByZXNzaW9ucy5yc3QgYi9nY2Mvaml0L2RvY3MvdG9w aWNzL2V4cHJlc3Npb25zLnJzdAppbmRleCA0MmNmZWUzNjMwMi4uODljOTllYzJmMTAgMTAw NjQ0Ci0tLSBhL2djYy9qaXQvZG9jcy90b3BpY3MvZXhwcmVzc2lvbnMucnN0CisrKyBiL2dj Yy9qaXQvZG9jcy90b3BpY3MvZXhwcmVzc2lvbnMucnN0CkBAIC05OCw2ICs5OCwyMiBAQCBT aW1wbGUgZXhwcmVzc2lvbnMKICAgIEdpdmVuIGEgbnVtZXJpYyB0eXBlIChpbnRlZ2VyIG9y IGZsb2F0aW5nIHBvaW50KSwgYnVpbGQgYW4gcnZhbHVlIGZvcgogICAgdGhlIGdpdmVuIGNv bnN0YW50IDpleHByOmBkb3VibGVgIHZhbHVlLgogCisuLiBmdW5jdGlvbjo6IGdjY19qaXRf cnZhbHVlICpcCisgICAgICAgICAgICAgIGdjY19qaXRfY29udGV4dF9uZXdfcnZhbHVlX2Zy b21fY29tcGxleF9kb3VibGUgKGdjY19qaXRfY29udGV4dCAqY3R4dCwgXAorICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBn Y2Nfaml0X3R5cGUgKm51bWVyaWNfdHlwZSwgXAorICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkb3VibGUgcmVhbCwgZG91 YmxlIGltYWcpCisKKyAgIEdpdmVuIGEgZmxvYXRpbmcgcG9pbnQgdHlwZSwgYnVpbGQgYW4g cnZhbHVlIGZvcgorICAgdGhlIGdpdmVuIGNvbnN0YW50IDpleHByOmBfQ29tcGxleCBkb3Vi bGVgIHNwbGl0IGludG8gaXRzIHJlYWwgYW5kIGltYWdpbmFyeSBwYXJ0cy4gV2hlbiB0aGUg cmVzdWx0IHR5cGUgaXMKKyAgIG5vbi1jb21wbGV4LCB0aGUgaW1hZ2luYXJ5IHBhcnQgaXMg ZGlzY2FyZGVkLgorCisgICBUaGlzIGZ1bmN0aW9uIHdhcyBhZGRlZCBpbiA6cmVmOmBMSUJH Q0NKSVRfQUJJXzI2YDsKKyAgIHlvdSBjYW4gdGVzdCBmb3IgaXRzIHByZXNlbmNlIHVzaW5n CisKKyAgIC4uIGNvZGUtYmxvY2s6OiBjCisKKyAgICAgICNpZmRlZiBMSUJHQ0NKSVRfSEFW RV9DT01QTEVYCisKIC4uIGZ1bmN0aW9uOjogZ2NjX2ppdF9ydmFsdWUgKlwKICAgICAgICAg ICAgICAgZ2NjX2ppdF9jb250ZXh0X25ld19ydmFsdWVfZnJvbV9wdHIgKGdjY19qaXRfY29u dGV4dCAqY3R4dCwgXAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgZ2NjX2ppdF90eXBlICpwb2ludGVyX3R5cGUsIFwKQEAgLTMxMywyMCAr MzI5LDE0IEBAIFVuYXJ5IE9wZXJhdGlvbnMKIAogVGhlIGF2YWlsYWJsZSB1bmFyeSBvcGVy YXRpb25zIGFyZToKIAotLi4gbGlzdC10YWJsZTo6Ci0gICA6aGVhZGVyLXJvd3M6IDEKLQot ICAgKiAtIFVuYXJ5IE9wZXJhdGlvbgotICAgICAtIEMgZXF1aXZhbGVudAotCi0gICAqIC0g OmM6bWFjcm86YEdDQ19KSVRfVU5BUllfT1BfTUlOVVNgCi0gICAgIC0gYC0oRVhQUilgCi0g ICAqIC0gOmM6bWFjcm86YEdDQ19KSVRfVU5BUllfT1BfQklUV0lTRV9ORUdBVEVgCi0gICAg IC0gYH4oRVhQUilgCi0gICAqIC0gOmM6bWFjcm86YEdDQ19KSVRfVU5BUllfT1BfTE9HSUNB TF9ORUdBVEVgCi0gICAgIC0gYCEoRVhQUilgCi0gICAqIC0gOmM6bWFjcm86YEdDQ19KSVRf VU5BUllfT1BfQUJTYAotICAgICAtIGBhYnMgKEVYUFIpYAorPT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09ICA9PT09PT09PT09PT0gID09PT09PT09PT09PT09 PT09PT09PT0KK1VuYXJ5IE9wZXJhdGlvbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg QyBlcXVpdmFsZW50ICBTdXBwb3J0ZWQgdHlwZXMKKz09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PSAgPT09PT09PT09PT09ICA9PT09PT09PT09PT09PT09PT09 PT09Cis6YzptYWNybzpgR0NDX0pJVF9VTkFSWV9PUF9NSU5VU2AgICAgICAgICAgIGAtKEVY UFIpYCAgICAgaW50ZWdlciwgcmVhbCwgY29tcGxleAorOmM6bWFjcm86YEdDQ19KSVRfVU5B UllfT1BfQklUV0lTRV9ORUdBVEVgICBgfihFWFBSKWAgICAgIGludGVnZXIKKzpjOm1hY3Jv OmBHQ0NfSklUX1VOQVJZX09QX0xPR0lDQUxfTkVHQVRFYCAgYCEoRVhQUilgICAgICBpbnRl Z2VyCis6YzptYWNybzpgR0NDX0pJVF9VTkFSWV9PUF9BQlNgICAgICAgICAgICAgIGBhYnMg KEVYUFIpYCAgaW50ZWdlciwgcmVhbAorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09ICA9PT09PT09PT09PT0gID09PT09PT09PT09PT09PT09PT09PT0KIAog Li4gYzptYWNybzo6IEdDQ19KSVRfVU5BUllfT1BfTUlOVVMKIApAQCAtMzg2LDM2ICszOTYs MjMgQEAgQmluYXJ5IE9wZXJhdGlvbnMKIAogVGhlIGF2YWlsYWJsZSBiaW5hcnkgb3BlcmF0 aW9ucyBhcmU6CiAKLS4uIGxpc3QtdGFibGU6OgotICAgOmhlYWRlci1yb3dzOiAxCi0KLSAg ICogLSBCaW5hcnkgT3BlcmF0aW9uCi0gICAgIC0gQyBlcXVpdmFsZW50Ci0KLSAgICogLSA6 YzptYWNybzpgR0NDX0pJVF9CSU5BUllfT1BfUExVU2AKLSAgICAgLSBgeCArIHlgCi0gICAq IC0gOmM6bWFjcm86YEdDQ19KSVRfQklOQVJZX09QX01JTlVTYAotICAgICAtIGB4IC0geWAK LSAgICogLSA6YzptYWNybzpgR0NDX0pJVF9CSU5BUllfT1BfTVVMVGAKLSAgICAgLSBgeCAq IHlgCi0gICAqIC0gOmM6bWFjcm86YEdDQ19KSVRfQklOQVJZX09QX0RJVklERWAKLSAgICAg LSBgeCAvIHlgCi0gICAqIC0gOmM6bWFjcm86YEdDQ19KSVRfQklOQVJZX09QX01PRFVMT2AK LSAgICAgLSBgeCAlIHlgCi0gICAqIC0gOmM6bWFjcm86YEdDQ19KSVRfQklOQVJZX09QX0JJ VFdJU0VfQU5EYAotICAgICAtIGB4ICYgeWAKLSAgICogLSA6YzptYWNybzpgR0NDX0pJVF9C SU5BUllfT1BfQklUV0lTRV9YT1JgCi0gICAgIC0gYHggXiB5YAotICAgKiAtIDpjOm1hY3Jv OmBHQ0NfSklUX0JJTkFSWV9PUF9CSVRXSVNFX09SYAotICAgICAtIGB4IHwgeWAKLSAgICog LSA6YzptYWNybzpgR0NDX0pJVF9CSU5BUllfT1BfTE9HSUNBTF9BTkRgCi0gICAgIC0gYHgg JiYgeWAKLSAgICogLSA6YzptYWNybzpgR0NDX0pJVF9CSU5BUllfT1BfTE9HSUNBTF9PUmAK LSAgICAgLSBgeCB8fCB5YAotICAgKiAtIDpjOm1hY3JvOmBHQ0NfSklUX0JJTkFSWV9PUF9M U0hJRlRgCi0gICAgIC0gYHggPDwgeWAKLSAgICogLSA6YzptYWNybzpgR0NDX0pJVF9CSU5B UllfT1BfUlNISUZUYAotICAgICAtIGB4ID4+IHlgCis9PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09ICA9PT09PT09PT09PT09PT0gPT09PT09PT09PT09PT09PT09 PT09PT0KK0JpbmFyeSBPcGVyYXRpb24gICAgICAgICAgICAgICAgICAgICAgICAgIEMgZXF1 aXZhbGVudCAgICBTdXBwb3J0ZWQgb3BlcmFuZCB0eXBlcworPT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PSAgPT09PT09PT09PT09PT09ID09PT09PT09PT09PT09 PT09PT09PT09Cis6YzptYWNybzpgR0NDX0pJVF9CSU5BUllfT1BfUExVU2AgICAgICAgICBg eCArIHlgICAgICAgICAgaW50ZWdlciwgcmVhbCwgY29tcGxleAorOmM6bWFjcm86YEdDQ19K SVRfQklOQVJZX09QX01JTlVTYCAgICAgICAgYHggLSB5YCAgICAgICAgIGludGVnZXIsIHJl YWwsIGNvbXBsZXgKKzpjOm1hY3JvOmBHQ0NfSklUX0JJTkFSWV9PUF9NVUxUYCAgICAgICAg IGB4ICogeWAgICAgICAgICBpbnRlZ2VyLCByZWFsLCBjb21wbGV4Cis6YzptYWNybzpgR0ND X0pJVF9CSU5BUllfT1BfRElWSURFYCAgICAgICBgeCAvIHlgICAgICAgICAgaW50ZWdlciwg cmVhbCwgY29tcGxleAorOmM6bWFjcm86YEdDQ19KSVRfQklOQVJZX09QX01PRFVMT2AgICAg ICAgYHggJSB5YCAgICAgICAgIGludGVnZXIKKzpjOm1hY3JvOmBHQ0NfSklUX0JJTkFSWV9P UF9CSVRXSVNFX0FORGAgIGB4ICYgeWAgICAgICAgICBpbnRlZ2VyCis6YzptYWNybzpgR0ND X0pJVF9CSU5BUllfT1BfQklUV0lTRV9YT1JgICBgeCBeIHlgICAgICAgICAgaW50ZWdlcgor OmM6bWFjcm86YEdDQ19KSVRfQklOQVJZX09QX0JJVFdJU0VfT1JgICAgYHggfCB5YCAgICAg ICAgIGludGVnZXIKKzpjOm1hY3JvOmBHQ0NfSklUX0JJTkFSWV9PUF9MT0dJQ0FMX0FORGAg IGB4ICYmIHlgICAgICAgICBpbnRlZ2VyCis6YzptYWNybzpgR0NDX0pJVF9CSU5BUllfT1Bf TE9HSUNBTF9PUmAgICBgeCB8fCB5YCAgICAgICAgaW50ZWdlcgorOmM6bWFjcm86YEdDQ19K SVRfQklOQVJZX09QX0xTSElGVGAgICAgICAgYHggPDwgeWAgICAgICAgIGludGVnZXIKKzpj Om1hY3JvOmBHQ0NfSklUX0JJTkFSWV9PUF9SU0hJRlRgICAgICAgIGB4ID4+IHlgICAgICAg ICBpbnRlZ2VyCis6YzptYWNybzpgR0NDX0pJVF9CSU5BUllfT1BfQ09NUExFWGAgICAgICBg Q01QTFggKHIsIGkpYCAgcmVhbAorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PSAgPT09PT09PT09PT09PT09ID09PT09PT09PT09PT09PT09PT09PT09CiAKIC4u IGM6bWFjcm86OiBHQ0NfSklUX0JJTkFSWV9PUF9QTFVTCiAKQEAgLTU0Myw2ICs1NDAsMzEg QEAgVGhlIGF2YWlsYWJsZSBiaW5hcnkgb3BlcmF0aW9ucyBhcmU6CiAKICAgIGluIEMuCiAK Ky4uIGM6bWFjcm86OiBHQ0NfSklUX0JJTkFSWV9PUF9DT01QTEVYCisKKyAgIENyZWF0ZSBh IGNvbXBsZXggZmxvYXRpbmcgcG9pbnQgdmFsdWUgZnJvbQorICAgdHdvIHJlYWwgZmxvYXRp bmcgcG9pbnQgdmFsdWVzIHdpdGggdGhlIHNhbWUKKyAgIHNpemUgcXVhbGlmaWVyIGFzIHRo ZSBjb21wbGV4IHJlc3VsdCB0eXBlLgorICAgSS5lIHR3byBmbG9hdHMgZm9yIGEgX0NvbXBs ZXggZmxvYXQsIGV0Yy4KKworICAgQW5hbG9nb3VzIHRvOgorCisgICAuLiBjb2RlLWJsb2Nr OjogYworICAgICBDTVBMWCAocmVhbCxpbWFnKQorCisgICBpbiBDLgorCisgICBUaGUgZmly c3Qgb3BlcmFuZCBpcyB0aGUgcmVhbCBwYXJ0LCB0aGUgb3RoZXIKKyAgIHRoZSBpbWFnaW5h cnkuIE5lZ2F0aXZlIHplcm9lcyBhcmUgcHJlc2VydmVkCisgICBhbmQgSW5mOnMgZG8gbm90 IGxlYWQgdG8gTmFOcy4KKworICAgVGhpcyBvcGVyYXRvciAgd2FzIGFkZGVkIGluIExJQkdD Q0pJVF9BQklfMjY7CisgICB5b3UgY2FuIHRlc3QgZm9yIGl0cyBwcmVzZW5jZSB1c2luZwor CisgICAuLiBjb2RlLWJsb2NrOjogYworCisgICAgICAjaWZkZWYgTElCR0NDSklUX0hBVkVf Q09NUExFWAorCiBDb21wYXJpc29ucwogKioqKioqKioqKioKIApAQCAtNTc1LDYgKzU5Nyw5 IEBAIENvbXBhcmlzb25zCiAgICAqIC0gOmM6bWFjcm86YEdDQ19KSVRfQ09NUEFSSVNPTl9H RWAKICAgICAgLSBgeCA+PSB5YAogCisKK05vdGU6IE9ubHkgYD09YCBhbmQgYCE9YCBhcmUg ZGVmaW5lZCBmb3IgY29tcGxleCB0eXBlcy4KKwogRnVuY3Rpb24gY2FsbHMKICoqKioqKioq KioqKioqCiAuLiBmdW5jdGlvbjo6IGdjY19qaXRfcnZhbHVlICpcCkBAIC02NzYsMTAgKzcw MSwxNyBAQCBUeXBlLWNvZXJjaW9uCiAKICAgIEN1cnJlbnRseSBvbmx5IGEgbGltaXRlZCBz ZXQgb2YgY29udmVyc2lvbnMgYXJlIHBvc3NpYmxlOgogCi0gICAgICogaW50IDwtPiBmbG9h dAotICAgICAqIGludCA8LT4gYm9vbAorICAgICAqIGludGVnZXIgPC0+IGludGVnZXIKKyAg ICAgKiBmbG9hdGluZyBwb2ludCA8LT4gZmxvYXRpbmcgcG9pbnQKKyAgICAgKiBpbnRlZ2Vy IDwtPiBmbG9hdGluZyBwb2ludAorICAgICAqIGludGVnZXIgPC0+IGJvb2wKICAgICAgKiBQ KiAgPC0+IFEqLCBmb3IgcG9pbnRlciB0eXBlcyBQIGFuZCBRCiAKKyAgIE5vdGU6ICJmbG9h dGluZyBwb2ludCIgaW5jbHVkZXMgY29tcGxleCB0eXBlcy4KKworICAgV2hlbiBhIGNvbXBs ZXggdHlwZSBpcyBjb252ZXJ0ZWQgdG8gYSBub24tY29tcGxleCB0eXBlLCB0aGUKKyAgIGlt YWdpbmFyeSBwYXJ0IGlzIGRpc2NhcmRlZC4KKwogLi4gZnVuY3Rpb246OiBnY2Nfaml0X3J2 YWx1ZSAqXAogICAgICAgICAgICAgICBnY2Nfaml0X2NvbnRleHRfbmV3X2JpdGNhc3QgKGdj Y19qaXRfY29udGV4dCAqY3R4dCxcCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgZ2NjX2ppdF9sb2NhdGlvbiAqbG9jLFwKZGlmZiAtLWdpdCBhL2djYy9q aXQvZG9jcy90b3BpY3MvdHlwZXMucnN0IGIvZ2NjL2ppdC9kb2NzL3RvcGljcy90eXBlcy5y c3QKaW5kZXggZDhjMWQxNWQ2OWQuLjQ1ODE2NDAzZWIxIDEwMDY0NAotLS0gYS9nY2Mvaml0 L2RvY3MvdG9waWNzL3R5cGVzLnJzdAorKysgYi9nY2Mvaml0L2RvY3MvdG9waWNzL3R5cGVz LnJzdApAQCAtMTI0LDExICsxMjQsMTcgQEAgU3RhbmRhcmQgdHlwZXMKICAgICAgKiAtIDpj OmRhdGE6YEdDQ19KSVRfVFlQRV9GSUxFX1BUUmAKICAgICAgICAtIEMgdHlwZTogYGAoRklM RSAqKWBgCiAgICAgICogLSA6YzpkYXRhOmBHQ0NfSklUX1RZUEVfQ09NUExFWF9GTE9BVGAK LSAgICAgICAtIEM5OSdzIGBgX0NvbXBsZXggZmxvYXRgYAorICAgICAgIC0gQzk5J3MgYGBf Q29tcGxleCBmbG9hdGBgLCBBQkkgMjYKICAgICAgKiAtIDpjOmRhdGE6YEdDQ19KSVRfVFlQ RV9DT01QTEVYX0RPVUJMRWAKLSAgICAgICAtIEM5OSdzIGBgX0NvbXBsZXggZG91YmxlYGAK KyAgICAgICAtIEM5OSdzIGBgX0NvbXBsZXggZG91YmxlYGAsIEFCSSAyNgogICAgICAqIC0g OmM6ZGF0YTpgR0NDX0pJVF9UWVBFX0NPTVBMRVhfTE9OR19ET1VCTEVgCi0gICAgICAgLSBD OTkncyBgYF9Db21wbGV4IGxvbmcgZG91YmxlYGAKKyAgICAgICAtIEM5OSdzIGBgX0NvbXBs ZXggbG9uZyBkb3VibGVgYCwgQUJJIDI2CisKKyAgIFRoZSBjb21wbGV4IHR5cGVzIGFyZSBh dmFpbGFibGUgZnJvbSA6cmVmOmBMSUJHQ0NKSVRfQUJJXzI2YCBhZnRlcgorICAgc2V0dGlu ZyA6cmVmOmBnY2Nfaml0X2NvbnRleHRfc2V0X2Jvb2xfZW5hYmxlX2NvbXBsZXhfdHlwZXNg LgorCisgICBZb3UgY2FuIHRlc3QgZm9yIGNvbXBsZXggdHlwZXMgc3VwcG9ydCB3aXRoIHRo ZSBkZWZpbmUKKyAgIGAjaWZkZWYgTElCR0NDSklUX0hBVkVfQ09NUExFWGAuCiAKIC4uIGZ1 bmN0aW9uOjogZ2NjX2ppdF90eXBlICpcCiAgICAgICAgICAgICAgIGdjY19qaXRfY29udGV4 dF9nZXRfaW50X3R5cGUgKGdjY19qaXRfY29udGV4dCAqY3R4dCwgXApkaWZmIC0tZ2l0IGEv Z2NjL2ppdC9qaXQtY29tbW9uLmggYi9nY2Mvaml0L2ppdC1jb21tb24uaAppbmRleCA4MGMx NjE4ZGE5Ni4uYWYwODViMjY3MWIgMTAwNjQ0Ci0tLSBhL2djYy9qaXQvaml0LWNvbW1vbi5o CisrKyBiL2djYy9qaXQvaml0LWNvbW1vbi5oCkBAIC0xOTksNyArMTk5LDcgQEAgZW51bSBp bm5lcl9ib29sX29wdGlvbgogICBJTk5FUl9CT09MX09QVElPTl9BTExPV19VTlJFQUNIQUJM RV9CTE9DS1MsCiAgIElOTkVSX0JPT0xfT1BUSU9OX1VTRV9FWFRFUk5BTF9EUklWRVIsCiAg IElOTkVSX0JPT0xfT1BUSU9OX1BSSU5UX0VSUk9SU19UT19TVERFUlIsCi0KKyAgSU5ORVJf Qk9PTF9PUFRJT05fRU5BQkxFX0NPTVBMRVhfVFlQRVMsCiAgIE5VTV9JTk5FUl9CT09MX09Q VElPTlMKIH07CiAKZGlmZiAtLWdpdCBhL2djYy9qaXQvaml0LXBsYXliYWNrLmNjIGIvZ2Nj L2ppdC9qaXQtcGxheWJhY2suY2MKaW5kZXggMThjYzRkYTI1YjguLjZjNGM4ZWQ1ZTM5IDEw MDY0NAotLS0gYS9nY2Mvaml0L2ppdC1wbGF5YmFjay5jYworKysgYi9nY2Mvaml0L2ppdC1w bGF5YmFjay5jYwpAQCAtNDEsNiArNDEsNyBAQCBhbG9uZyB3aXRoIEdDQzsgc2VlIHRoZSBm aWxlIENPUFlJTkczLiAgSWYgbm90IHNlZQogI2luY2x1ZGUgImdjYy5oIgogI2luY2x1ZGUg ImRpYWdub3N0aWMuaCIKICNpbmNsdWRlICJzdG10LmgiCisjaW5jbHVkZSAiY29tcGxleC5o IgogCiAjaW5jbHVkZSAiaml0LXBsYXliYWNrLmgiCiAjaW5jbHVkZSAiaml0LXJlc3VsdC5o IgpAQCAtNzcsNiArNzgsOCBAQCBjb252ZXJ0ICh0cmVlIGRzdF90eXBlLCB0cmVlIGV4cHIp CiAgICAgY2FzZSBJTlRFR0VSX1RZUEU6CiAgICAgY2FzZSBFTlVNRVJBTF9UWVBFOgogICAg ICAgcmV0dXJuIGZvbGQgKGNvbnZlcnRfdG9faW50ZWdlciAoZHN0X3R5cGUsIGV4cHIpKTsK KyAgICBjYXNlIFJFQUxfVFlQRToKKyAgICAgIHJldHVybiBmb2xkIChjb252ZXJ0X3RvX3Jl YWwgKGRzdF90eXBlLCBleHByKSk7CiAKICAgICBkZWZhdWx0OgogICAgICAgZ2NjX2Fzc2Vy dCAoZ2NjOjpqaXQ6OmFjdGl2ZV9wbGF5YmFja19jdHh0KTsKQEAgLTg3Myw2ICs4NzYsMjQg QEAgbmV3X2dsb2JhbF9pbml0aWFsaXplZCAobG9jYXRpb24gKmxvYywKIG5hbWVzcGFjZSBw bGF5YmFjawogewogCisvKiBSZXR1cm4gdGhlIGNvcnJlbnNwb25kaW5nIG5vdCBjb21wbGV4 IGZsb2F0IHR5cGUgb2YgYQorICAgZmxvYXQgdHlwZS4gSS5lLiBjb21wbGV4IGZsb2F0IC0+ IGZsb2F0ICovCitzdGF0aWMgdHJlZQorY29tcGxleF9yZWFsX3RvX3JlYWwgKHRyZWUgY29t cGxleF90eXBlKQoreworICBpZiAoVFlQRV9DQU5PTklDQUwgKGNvbXBsZXhfdHlwZSkgPT0K KyAgICAgIFRZUEVfQ0FOT05JQ0FMIChjb21wbGV4X2Zsb2F0X3R5cGVfbm9kZSkpCisgICAg cmV0dXJuIGZsb2F0X3R5cGVfbm9kZTsKKyAgZWxzZSBpZiAoVFlQRV9DQU5PTklDQUwgKGNv bXBsZXhfdHlwZSkgPT0KKwkgICBUWVBFX0NBTk9OSUNBTCAoY29tcGxleF9kb3VibGVfdHlw ZV9ub2RlKSkKKyAgICByZXR1cm4gZG91YmxlX3R5cGVfbm9kZTsKKyAgZWxzZSBpZiAoVFlQ RV9DQU5PTklDQUwgKGNvbXBsZXhfdHlwZSkgPT0KKwkgICBUWVBFX0NBTk9OSUNBTCAoY29t cGxleF9sb25nX2RvdWJsZV90eXBlX25vZGUpKQorICAgIHJldHVybiBsb25nX2RvdWJsZV90 eXBlX25vZGU7CisgIGVsc2UKKyAgICBnY2NfdW5yZWFjaGFibGUoKTsKK30KKwogLyogU3Bl Y2lhbGl6YXRpb24gb2YgbWFraW5nIGFuIHJ2YWx1ZSBmcm9tIGEgY29uc3QsIGZvciBob3N0 IDxpbnQ+LiAgKi8KIAogdGVtcGxhdGUgPD4KQEAgLTg4OCw2ICs5MDksMjUgQEAgbmV3X3J2 YWx1ZV9mcm9tX2NvbnN0IDxpbnQ+ICh0eXBlICp0eXBlLAogICAgICAgdHJlZSBpbm5lciA9 IGJ1aWxkX2ludF9jc3QgKGlubmVyX3R5cGUsIHZhbHVlKTsKICAgICAgIHJldHVybiBuZXcg cnZhbHVlICh0aGlzLCBpbm5lcik7CiAgICAgfQorICBlbHNlIGlmIChDT01QTEVYX0ZMT0FU X1RZUEVfUCAoaW5uZXJfdHlwZSkpCisgICAgeworICAgICAgdHJlZSB0cmVlX3JlYWw7Cisg ICAgICB0cmVlIHRyZWVfaW1hZzsKKyAgICAgIHRyZWUgcmVhbF90eXBlOworICAgICAgUkVB TF9WQUxVRV9UWVBFIHJlYWxfdmFsdWU7CisgICAgICBSRUFMX1ZBTFVFX1RZUEUgaW1hZ192 YWx1ZTsKKworICAgICAgcmVhbF90eXBlID0gY29tcGxleF9yZWFsX3RvX3JlYWwgKGlubmVy X3R5cGUpOworCisgICAgICByZWFsX2Zyb21faW50ZWdlciAoJnJlYWxfdmFsdWUsIFZPSURt b2RlLCB2YWx1ZSwgU0lHTkVEKTsKKyAgICAgIHJlYWxfZnJvbV9pbnRlZ2VyICgmaW1hZ192 YWx1ZSwgVk9JRG1vZGUsIDAsIFNJR05FRCk7CisKKyAgICAgIHRyZWVfcmVhbCA9IGJ1aWxk X3JlYWwgKHJlYWxfdHlwZSwgcmVhbF92YWx1ZSk7CisgICAgICB0cmVlX2ltYWcgPSBidWls ZF9yZWFsIChyZWFsX3R5cGUsIGltYWdfdmFsdWUpOworCisgICAgICB0cmVlIGlubmVyID0g YnVpbGRfY29tcGxleCAoaW5uZXJfdHlwZSwgdHJlZV9yZWFsLCB0cmVlX2ltYWcpOworICAg ICAgcmV0dXJuIG5ldyBydmFsdWUgKHRoaXMsIGlubmVyKTsKKyAgICB9CiAgIGVsc2UKICAg ICB7CiAgICAgICBSRUFMX1ZBTFVFX1RZUEUgcmVhbF92YWx1ZTsKQEAgLTkxMiw2ICs5NTIs MjUgQEAgbmV3X3J2YWx1ZV9mcm9tX2NvbnN0IDxsb25nPiAodHlwZSAqdHlwZSwKICAgICAg IHRyZWUgaW5uZXIgPSBidWlsZF9pbnRfY3N0IChpbm5lcl90eXBlLCB2YWx1ZSk7CiAgICAg ICByZXR1cm4gbmV3IHJ2YWx1ZSAodGhpcywgaW5uZXIpOwogICAgIH0KKyAgZWxzZSBpZiAo Q09NUExFWF9GTE9BVF9UWVBFX1AgKGlubmVyX3R5cGUpKQorICAgIHsKKyAgICAgIHRyZWUg dHJlZV9yZWFsOworICAgICAgdHJlZSB0cmVlX2ltYWc7CisgICAgICB0cmVlIHJlYWxfdHlw ZTsKKyAgICAgIFJFQUxfVkFMVUVfVFlQRSByZWFsX3ZhbHVlOworICAgICAgUkVBTF9WQUxV RV9UWVBFIGltYWdfdmFsdWU7CisKKyAgICAgIHJlYWxfdHlwZSA9IGNvbXBsZXhfcmVhbF90 b19yZWFsIChpbm5lcl90eXBlKTsKKworICAgICAgcmVhbF9mcm9tX2ludGVnZXIgKCZyZWFs X3ZhbHVlLCBWT0lEbW9kZSwgdmFsdWUsIFNJR05FRCk7CisgICAgICByZWFsX2Zyb21faW50 ZWdlciAoJmltYWdfdmFsdWUsIFZPSURtb2RlLCAwLCBTSUdORUQpOworCisgICAgICB0cmVl X3JlYWwgPSBidWlsZF9yZWFsIChyZWFsX3R5cGUsIHJlYWxfdmFsdWUpOworICAgICAgdHJl ZV9pbWFnID0gYnVpbGRfcmVhbCAocmVhbF90eXBlLCBpbWFnX3ZhbHVlKTsKKworICAgICAg dHJlZSBpbm5lciA9IGJ1aWxkX2NvbXBsZXggKGlubmVyX3R5cGUsIHRyZWVfcmVhbCwgdHJl ZV9pbWFnKTsKKyAgICAgIHJldHVybiBuZXcgcnZhbHVlICh0aGlzLCBpbm5lcik7CisgICAg fQogICBlbHNlCiAgICAgewogICAgICAgUkVBTF9WQUxVRV9UWVBFIHJlYWxfdmFsdWU7CkBA IC05MzcsMTkgKzk5NiwxMDQgQEAgbmV3X3J2YWx1ZV9mcm9tX2NvbnN0IDxkb3VibGU+ICh0 eXBlICp0eXBlLAogICAgICByZWFsLmNjOnJlYWxfZnJvbV90YXJnZXQgYXBwZWFycyB0byBy ZXF1aXJlIHRoZSByZXByZXNlbnRhdGlvbiB0byBiZQogICAgICBzcGxpdCBpbnRvIDMyLWJp dCB2YWx1ZXMsIGFuZCB0aGVuIHNlbnQgYXMgYW4gcGFpciBvZiBob3N0IGxvbmcKICAgICAg aW50cy4gICovCisKKyAgdW5pb24KKyAgeworICAgIGRvdWJsZSBhc19kb3VibGU7CisgICAg dWludDMyX3QgYXNfdWludDMyc1syXTsKKyAgfSB1X3JlYWwsIHVfaW1hZzsKKworICB1X3Jl YWwuYXNfZG91YmxlID0gdmFsdWU7CisgIGxvbmcgaW50IGFzX2xvbmdfaW50c1syXTsKKyAg YXNfbG9uZ19pbnRzWzBdID0gdV9yZWFsLmFzX3VpbnQzMnNbMF07CisgIGFzX2xvbmdfaW50 c1sxXSA9IHVfcmVhbC5hc191aW50MzJzWzFdOworCiAgIFJFQUxfVkFMVUVfVFlQRSByZWFs X3ZhbHVlOworICByZWFsX2Zyb21fdGFyZ2V0ICgmcmVhbF92YWx1ZSwgYXNfbG9uZ19pbnRz LCBERm1vZGUpOworCisgIGlmIChDT01QTEVYX0ZMT0FUX1RZUEVfUCAoaW5uZXJfdHlwZSkp CisgICAgeworICAgICAgdHJlZSB0cmVlX3JlYWw7CisgICAgICB0cmVlIHRyZWVfaW1hZzsK KyAgICAgIHRyZWUgcmVhbF90eXBlOworCisgICAgICBSRUFMX1ZBTFVFX1RZUEUgaW1hZ192 YWx1ZTsKKworICAgICAgbG9uZyBpbnQgemVyb19hc19sb25nX2ludHNbMl07CisgICAgICB1 X2ltYWcuYXNfZG91YmxlID0gMC47CisgICAgICB6ZXJvX2FzX2xvbmdfaW50c1swXSA9IHVf aW1hZy5hc191aW50MzJzWzBdOworICAgICAgemVyb19hc19sb25nX2ludHNbMV0gPSB1X2lt YWcuYXNfdWludDMyc1sxXTsKKworICAgICAgcmVhbF9mcm9tX3RhcmdldCAoJmltYWdfdmFs dWUsIHplcm9fYXNfbG9uZ19pbnRzLCBERm1vZGUpOworCisgICAgICByZWFsX3R5cGUgPSBj b21wbGV4X3JlYWxfdG9fcmVhbCAoaW5uZXJfdHlwZSk7CisKKyAgICAgIHRyZWVfcmVhbCA9 IGJ1aWxkX3JlYWwgKHJlYWxfdHlwZSwgcmVhbF92YWx1ZSk7CisgICAgICB0cmVlX2ltYWcg PSBidWlsZF9yZWFsIChyZWFsX3R5cGUsIGltYWdfdmFsdWUpOworCisgICAgICB0cmVlIGlu bmVyID0gYnVpbGRfY29tcGxleCAoaW5uZXJfdHlwZSwgdHJlZV9yZWFsLCB0cmVlX2ltYWcp OworICAgICAgcmV0dXJuIG5ldyBydmFsdWUgKHRoaXMsIGlubmVyKTsKKyAgICB9CisgIGVs c2UKKyAgICB7CisgICAgICB0cmVlIGlubmVyID0gYnVpbGRfcmVhbCAoaW5uZXJfdHlwZSwg cmVhbF92YWx1ZSk7CisgICAgICByZXR1cm4gbmV3IHJ2YWx1ZSAodGhpcywgaW5uZXIpOwor ICAgIH0KK30KKworLyogU3BlY2lhbGl6YXRpb24gb2YgbWFraW5nIGFuIHJ2YWx1ZSBmcm9t IGEgY29uc3QsCisgICBmb3IgaG9zdCBjb21wbGV4IGRvdWJsZS4gKi8KKwordGVtcGxhdGUg PD4KK3J2YWx1ZSAqCitjb250ZXh0OjoKK25ld19ydmFsdWVfZnJvbV9jb25zdCA8aG9zdF9w YWlyPGRvdWJsZT4+ICh0eXBlICp0eXBlLAorCQkJCQkgICBob3N0X3BhaXI8ZG91YmxlPiB2 YWx1ZSkKK3sKKyAgdHJlZSBpbm5lcl90eXBlID0gdHlwZS0+YXNfdHJlZSAoKTsKKwogICB1 bmlvbgogICB7CiAgICAgZG91YmxlIGFzX2RvdWJsZTsKICAgICB1aW50MzJfdCBhc191aW50 MzJzWzJdOwotICB9IHU7Ci0gIHUuYXNfZG91YmxlID0gdmFsdWU7CisgIH0gdV9yZWFsLCB1 X2ltYWc7CisKKyAgdV9yZWFsLmFzX2RvdWJsZSA9IHZhbHVlLm1fYTsKICAgbG9uZyBpbnQg YXNfbG9uZ19pbnRzWzJdOwotICBhc19sb25nX2ludHNbMF0gPSB1LmFzX3VpbnQzMnNbMF07 Ci0gIGFzX2xvbmdfaW50c1sxXSA9IHUuYXNfdWludDMyc1sxXTsKKyAgYXNfbG9uZ19pbnRz WzBdID0gdV9yZWFsLmFzX3VpbnQzMnNbMF07CisgIGFzX2xvbmdfaW50c1sxXSA9IHVfcmVh bC5hc191aW50MzJzWzFdOworCisgIFJFQUxfVkFMVUVfVFlQRSByZWFsX3ZhbHVlOwogICBy ZWFsX2Zyb21fdGFyZ2V0ICgmcmVhbF92YWx1ZSwgYXNfbG9uZ19pbnRzLCBERm1vZGUpOwot ICB0cmVlIGlubmVyID0gYnVpbGRfcmVhbCAoaW5uZXJfdHlwZSwgcmVhbF92YWx1ZSk7Ci0g IHJldHVybiBuZXcgcnZhbHVlICh0aGlzLCBpbm5lcik7CisKKyAgaWYgKENPTVBMRVhfRkxP QVRfVFlQRV9QIChpbm5lcl90eXBlKSkKKyAgICB7CisgICAgICB0cmVlIHRyZWVfcmVhbDsK KyAgICAgIHRyZWUgdHJlZV9pbWFnOworICAgICAgdHJlZSByZWFsX3R5cGU7CisKKyAgICAg IFJFQUxfVkFMVUVfVFlQRSBpbWFnX3ZhbHVlOworCisgICAgICBsb25nIGludCB2YWx1ZV9h c19sb25nX2ludHNbMl07CisgICAgICB1X2ltYWcuYXNfZG91YmxlID0gdmFsdWUubV9iOwor ICAgICAgdmFsdWVfYXNfbG9uZ19pbnRzWzBdID0gdV9pbWFnLmFzX3VpbnQzMnNbMF07Cisg ICAgICB2YWx1ZV9hc19sb25nX2ludHNbMV0gPSB1X2ltYWcuYXNfdWludDMyc1sxXTsKKwor ICAgICAgcmVhbF9mcm9tX3RhcmdldCAoJmltYWdfdmFsdWUsIHZhbHVlX2FzX2xvbmdfaW50 cywgREZtb2RlKTsKKworICAgICAgcmVhbF90eXBlID0gY29tcGxleF9yZWFsX3RvX3JlYWwg KGlubmVyX3R5cGUpOworCisgICAgICB0cmVlX3JlYWwgPSBidWlsZF9yZWFsIChyZWFsX3R5 cGUsIHJlYWxfdmFsdWUpOworICAgICAgdHJlZV9pbWFnID0gYnVpbGRfcmVhbCAocmVhbF90 eXBlLCBpbWFnX3ZhbHVlKTsKKworICAgICAgdHJlZSBpbm5lciA9IGJ1aWxkX2NvbXBsZXgg KGlubmVyX3R5cGUsIHRyZWVfcmVhbCwgdHJlZV9pbWFnKTsKKyAgICAgIHJldHVybiBuZXcg cnZhbHVlICh0aGlzLCBpbm5lcik7CisgICAgfQorICBlbHNlCisgICAgeworICAgICAgdHJl ZSBpbm5lciA9IGJ1aWxkX3JlYWwgKGlubmVyX3R5cGUsIHJlYWxfdmFsdWUpOworICAgICAg cmV0dXJuIG5ldyBydmFsdWUgKHRoaXMsIGlubmVyKTsKKyAgICB9CiB9CiAKIC8qIFNwZWNp YWxpemF0aW9uIG9mIG1ha2luZyBhbiBydmFsdWUgZnJvbSBhIGNvbnN0LCBmb3IgaG9zdCA8 dm9pZCAqPi4gICovCkBAIC0xMTkwLDYgKzEzMzQsMTEgQEAgbmV3X2JpbmFyeV9vcCAobG9j YXRpb24gKmxvYywKICAgICBjYXNlIEdDQ19KSVRfQklOQVJZX09QX1JTSElGVDoKICAgICAg IGlubmVyX29wID0gUlNISUZUX0VYUFI7CiAgICAgICBicmVhazsKKworICAgIC8qIENyZWF0 ZSBjb21wbGV4IHZhbHVlIGZyb20gdHdvIHJlYWwgdmFsdWVzICovCisgICAgY2FzZSBHQ0Nf SklUX0JJTkFSWV9PUF9DT01QTEVYOgorICAgICAgaW5uZXJfb3AgPSBDT01QTEVYX0VYUFI7 CisgICAgICBicmVhazsKICAgICB9CiAKICAgdHJlZSBpbm5lcl9leHByID0gYnVpbGQyIChp bm5lcl9vcCwKQEAgLTE0MDAsNiArMTU0OSwxMCBAQCBwbGF5YmFjazo6Y29udGV4dDo6YnVp bGRfY2FzdCAocGxheWJhY2s6OmxvY2F0aW9uICpsb2MsCiAJCSAgICAgIGJ1aWxkX2ludF9j c3QgKFRSRUVfVFlQRSAodF9leHByKSwgMCkpOwogICAgICAgZ290byBtYXliZV9mb2xkOwog CisgICAgY2FzZSBDT01QTEVYX1RZUEU6CisgICAgICB0X3JldCA9IGNvbnZlcnRfdG9fY29t cGxleCAodF9kc3RfdHlwZSwgdF9leHByKTsKKyAgICAgIGdvdG8gbWF5YmVfZm9sZDsKKwog ICAgIGNhc2UgUkVBTF9UWVBFOgogICAgICAgdF9yZXQgPSBjb252ZXJ0X3RvX3JlYWwgKHRf ZHN0X3R5cGUsIHRfZXhwcik7CiAgICAgICBnb3RvIG1heWJlX2ZvbGQ7CmRpZmYgLS1naXQg YS9nY2Mvaml0L2ppdC1yZWNvcmRpbmcuY2MgYi9nY2Mvaml0L2ppdC1yZWNvcmRpbmcuY2MK aW5kZXggOWI1YjgwMDVlYmUuLmFhMTFlZDUxNzFhIDEwMDY0NAotLS0gYS9nY2Mvaml0L2pp dC1yZWNvcmRpbmcuY2MKKysrIGIvZ2NjL2ppdC9qaXQtcmVjb3JkaW5nLmNjCkBAIC0yNSw2 ICsyNSw3IEBAIGFsb25nIHdpdGggR0NDOyBzZWUgdGhlIGZpbGUgQ09QWUlORzMuICBJZiBu b3Qgc2VlCiAjaW5jbHVkZSAicHJldHR5LXByaW50LmgiCiAjaW5jbHVkZSAidG9wbGV2Lmgi CiAKKyNpbmNsdWRlIDxtYXRoLmg+CiAKICNpbmNsdWRlICJqaXQtYnVpbHRpbnMuaCIKICNp bmNsdWRlICJqaXQtcmVjb3JkaW5nLmgiCkBAIC0xNzEyLDYgKzE3MTMsNyBAQCBzdGF0aWMg Y29uc3QgY2hhciAqIGNvbnN0CiAgICJnY2Nfaml0X2NvbnRleHRfc2V0X2Jvb2xfYWxsb3df dW5yZWFjaGFibGVfYmxvY2tzIiwKICAgImdjY19qaXRfY29udGV4dF9zZXRfYm9vbF91c2Vf ZXh0ZXJuYWxfZHJpdmVyIiwKICAgImdjY19qaXRfY29udGV4dF9zZXRfYm9vbF9wcmludF9l cnJvcnNfdG9fc3RkZXJyIiwKKyAgImdjY19qaXRfY29udGV4dF9zZXRfYm9vbF9lbmFibGVf Y29tcGxleF90eXBlcyIKIH07CiAKIC8qIFdyaXRlIHRoZSBjdXJyZW50IHZhbHVlIG9mIGFs bCBvcHRpb25zIHRvIHRoZSBsb2cgZmlsZSAoaWYgYW55KS4gICovCkBAIC0yNjQ1LDYgKzI2 NDcsNjkgQEAgcmVjb3JkaW5nOjptZW1lbnRvX29mX2dldF90eXBlOjppc19mbG9hdCAoKSBj b25zdAogICAgIH0KIH0KIAorLyogSW1wbGVtZW50YXRpb24gb2YgcHVyZSB2aXJ0dWFsIGhv b2sgcmVjb3JkaW5nOjp0eXBlOjppc19jb21wbGV4IGZvcgorICAgcmVjb3JkaW5nOjptZW1l bnRvX29mX2dldF90eXBlLiAgKi8KKworYm9vbAorcmVjb3JkaW5nOjptZW1lbnRvX29mX2dl dF90eXBlOjppc19jb21wbGV4ICgpIGNvbnN0Cit7CisgIHN3aXRjaCAobV9raW5kKQorICAg IHsKKyAgICBkZWZhdWx0OiBnY2NfdW5yZWFjaGFibGUgKCk7CisKKyAgICBjYXNlIEdDQ19K SVRfVFlQRV9WT0lEOgorICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgY2FzZSBHQ0NfSklU X1RZUEVfVk9JRF9QVFI6CisgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBjYXNlIEdDQ19K SVRfVFlQRV9CT09MOgorICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgY2FzZSBHQ0NfSklU X1RZUEVfQ0hBUjoKKyAgICBjYXNlIEdDQ19KSVRfVFlQRV9TSUdORURfQ0hBUjoKKyAgICBj YXNlIEdDQ19KSVRfVFlQRV9VTlNJR05FRF9DSEFSOgorICAgIGNhc2UgR0NDX0pJVF9UWVBF X1NIT1JUOgorICAgIGNhc2UgR0NDX0pJVF9UWVBFX1VOU0lHTkVEX1NIT1JUOgorICAgIGNh c2UgR0NDX0pJVF9UWVBFX0lOVDoKKyAgICBjYXNlIEdDQ19KSVRfVFlQRV9VTlNJR05FRF9J TlQ6CisgICAgY2FzZSBHQ0NfSklUX1RZUEVfTE9ORzoKKyAgICBjYXNlIEdDQ19KSVRfVFlQ RV9VTlNJR05FRF9MT05HOgorICAgIGNhc2UgR0NDX0pJVF9UWVBFX0xPTkdfTE9ORzoKKyAg ICBjYXNlIEdDQ19KSVRfVFlQRV9VTlNJR05FRF9MT05HX0xPTkc6CisgICAgY2FzZSBHQ0Nf SklUX1RZUEVfVUlOVDhfVDoKKyAgICBjYXNlIEdDQ19KSVRfVFlQRV9VSU5UMTZfVDoKKyAg ICBjYXNlIEdDQ19KSVRfVFlQRV9VSU5UMzJfVDoKKyAgICBjYXNlIEdDQ19KSVRfVFlQRV9V SU5UNjRfVDoKKyAgICBjYXNlIEdDQ19KSVRfVFlQRV9VSU5UMTI4X1Q6CisgICAgY2FzZSBH Q0NfSklUX1RZUEVfSU5UOF9UOgorICAgIGNhc2UgR0NDX0pJVF9UWVBFX0lOVDE2X1Q6Cisg ICAgY2FzZSBHQ0NfSklUX1RZUEVfSU5UMzJfVDoKKyAgICBjYXNlIEdDQ19KSVRfVFlQRV9J TlQ2NF9UOgorICAgIGNhc2UgR0NDX0pJVF9UWVBFX0lOVDEyOF9UOgorICAgICAgcmV0dXJu IGZhbHNlOworCisgICAgY2FzZSBHQ0NfSklUX1RZUEVfRkxPQVQ6CisgICAgY2FzZSBHQ0Nf SklUX1RZUEVfRE9VQkxFOgorICAgIGNhc2UgR0NDX0pJVF9UWVBFX0xPTkdfRE9VQkxFOgor ICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgY2FzZSBHQ0NfSklUX1RZUEVfQ09OU1RfQ0hB Ul9QVFI6CisgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBjYXNlIEdDQ19KSVRfVFlQRV9T SVpFX1Q6CisgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBjYXNlIEdDQ19KSVRfVFlQRV9G SUxFX1BUUjoKKyAgICAgIHJldHVybiBmYWxzZTsKKworICAgIGNhc2UgR0NDX0pJVF9UWVBF X0NPTVBMRVhfRkxPQVQ6CisgICAgY2FzZSBHQ0NfSklUX1RZUEVfQ09NUExFWF9ET1VCTEU6 CisgICAgY2FzZSBHQ0NfSklUX1RZUEVfQ09NUExFWF9MT05HX0RPVUJMRToKKyAgICAgIHJl dHVybiB0cnVlOworICAgIH0KK30KKwogLyogSW1wbGVtZW50YXRpb24gb2YgcHVyZSB2aXJ0 dWFsIGhvb2sgcmVjb3JkaW5nOjp0eXBlOjppc19ib29sIGZvcgogICAgcmVjb3JkaW5nOjpt ZW1lbnRvX29mX2dldF90eXBlLiAgKi8KIApAQCAtNTA3MSw2ICs1MTM2LDEwIEBAIHJlY29y ZGluZzo6Z2xvYmFsOjp3cml0ZV9yZXByb2R1Y2VyIChyZXByb2R1Y2VyICZyKQogdGVtcGxh dGUgY2xhc3MgcmVjb3JkaW5nOjptZW1lbnRvX29mX25ld19ydmFsdWVfZnJvbV9jb25zdCA8 aW50PjsKIHRlbXBsYXRlIGNsYXNzIHJlY29yZGluZzo6bWVtZW50b19vZl9uZXdfcnZhbHVl X2Zyb21fY29uc3QgPGxvbmc+OwogdGVtcGxhdGUgY2xhc3MgcmVjb3JkaW5nOjptZW1lbnRv X29mX25ld19ydmFsdWVfZnJvbV9jb25zdCA8ZG91YmxlPjsKK3RlbXBsYXRlIGNsYXNzIHJl Y29yZGluZzo6bWVtZW50b19vZl9uZXdfcnZhbHVlX2Zyb21fY29uc3QgPGxvbmcgZG91Ymxl PjsKK3RlbXBsYXRlIGNsYXNzIHJlY29yZGluZzo6bWVtZW50b19vZl9uZXdfcnZhbHVlX2Zy b21fY29uc3QgPGhvc3RfcGFpcjxkb3VibGU+PjsKK3RlbXBsYXRlIGNsYXNzCityZWNvcmRp bmc6Om1lbWVudG9fb2ZfbmV3X3J2YWx1ZV9mcm9tX2NvbnN0IDxsb25nIGRvdWJsZVsyXT47 CiB0ZW1wbGF0ZSBjbGFzcyByZWNvcmRpbmc6Om1lbWVudG9fb2ZfbmV3X3J2YWx1ZV9mcm9t X2NvbnN0IDx2b2lkICo+OwogCiAvKiBJbXBsZW1lbnRhdGlvbiBvZiB0aGUgcHVyZSB2aXJ0 dWFsIGhvb2sgcmVjb3JkaW5nOjptZW1lbnRvOjpyZXBsYXlfaW50bwpAQCAtNTI0OCw2ICs1 MzE3LDk1IEBAIHJlY29yZGluZzo6bWVtZW50b19vZl9uZXdfcnZhbHVlX2Zyb21fY29uc3Qg PGRvdWJsZT46OndyaXRlX3JlcHJvZHVjZXIgKHJlcHJvZHVjCiAgICAgbV92YWx1ZSk7CiB9 CiAKKy8qIFRoZSBtYWtlX2RlYnVnX3N0cmluZyBzcGVjaWFsaXphdGlvbiBmb3IgY29tcGxl eCBkb3VibGUsIHJlbmRlcmluZyBpdCBhcworICAgICAoVEFSR0VUX1RZUEUpTElURVJBTAor ICAgZS5nLgorICAgICAiKGNvbXBsZXggZmxvYXQpKDQyLjArNDIuMGopIi4gICovCisKK3Rl bXBsYXRlIDw+CitzdHJpbmcgKgorbWVtZW50b19vZl9uZXdfcnZhbHVlX2Zyb21fY29uc3Qg PGhvc3RfcGFpcjxkb3VibGU+Pjo6bWFrZV9kZWJ1Z19zdHJpbmcgKCkKK3sKKyAgZG91Ymxl IHJlYWwgPSBtX3ZhbHVlLm1fYTsKKyAgZG91YmxlIGltYWcgPSBtX3ZhbHVlLm1fYjsKKyAg cmV0dXJuIHN0cmluZzo6ZnJvbV9wcmludGYgKG1fY3R4dCwKKwkJCSAgICAgICIoJXMpKCVn JStnaikiLAorCQkJICAgICAgbV90eXBlLT5nZXRfZGVidWdfc3RyaW5nICgpLAorCQkJICAg ICAgcmVhbCwgaW1hZyk7Cit9CisKKy8qIFRoZSBnZXRfd2lkZV9pbnQgc3BlY2lhbGl6YXRp b24gZm9yIGNvbXBsZXggZG91YmxlLiAqLworCit0ZW1wbGF0ZSA8PgorYm9vbAorbWVtZW50 b19vZl9uZXdfcnZhbHVlX2Zyb21fY29uc3QgPGhvc3RfcGFpcjxkb3VibGU+Pjo6CitnZXRf d2lkZV9pbnQgKHdpZGVfaW50ICopIGNvbnN0Cit7CisgIHJldHVybiBmYWxzZTsKK30KKwor LyogVGhlIHdyaXRlX3JlcHJvZHVjZXIgc3BlY2lhbGl6YXRpb24gZm9yIGNvbXBsZXggZG91 YmxlLiAgKi8KKwordGVtcGxhdGUgPD4KK3ZvaWQKK3JlY29yZGluZzo6bWVtZW50b19vZl9u ZXdfcnZhbHVlX2Zyb21fY29uc3QgPGhvc3RfcGFpcjxkb3VibGU+Pjo6Cit3cml0ZV9yZXBy b2R1Y2VyIChyZXByb2R1Y2VyICZyKQoreworICBjb25zdCBjaGFyICppZCA9IHIubWFrZV9p ZGVudGlmaWVyICh0aGlzLCAicnZhbHVlIik7CisgIGRvdWJsZSByZWFsID0gbV92YWx1ZS5t X2E7CisgIGRvdWJsZSBpbWFnID0gbV92YWx1ZS5tX2I7CisKKyAgci53cml0ZSAoCisgICAg IiAgZ2NjX2ppdF9ydmFsdWUgKiVzID1cbiIKKyAgICAiICAgIGdjY19qaXRfY29udGV4dF9u ZXdfcnZhbHVlX2Zyb21fY29tcGxleF9kb3VibGUgKFxuIgorICAgICIgICAgICAlcywgLyog Z2NjX2ppdF9jb250ZXh0ICpjdHh0ICovXG4iCisgICAgIiAgICAgICVzLCAvKiBnY2Nfaml0 X3R5cGUgKm51bWVyaWNfdHlwZSAqL1xuIgorICAgICIgICAgICAvKiAlLjlnICsgJS45Z2og Ki9cbiIKKyAgICAiICAgICAgIiwvKiByZWFsLCBpbWFnKTsgKi8KKyAgICBpZCwKKyAgICBy LmdldF9pZGVudGlmaWVyIChnZXRfY29udGV4dCAoKSksCisgICAgci5nZXRfaWRlbnRpZmll cl9hc190eXBlIChtX3R5cGUpLAorICAgIHJlYWwsIGltYWcpOworCisgIGlmIChpc2Zpbml0 ZSAocmVhbCkpCisgICAgci53cml0ZSgiJWEsIiwgcmVhbCk7CisgIGVsc2UgaWYgKGlzaW5m IChyZWFsKSkKKyAgICB7CisgICAgICBpZiAocmVhbCA8IDApCisJci53cml0ZSAoIi1JTkZJ TklUWSwiKTsKKyAgICAgIGVsc2UKKwlyLndyaXRlICgiSU5GSU5JVFksIik7CisgICAgfQor ICBlbHNlIC8qIE5hTiAqLworICAgIHsKKyAgICAgIC8qIFN0b3JlIHRoZSBOYU4gYXMgYSB1 bnNpZ25lZCBsb25nIGxvbmcgbGl0ZXJhbC4KKwkgdWxsX3RvX2QoKSB3aWxsIGNvbnZlcnQg aXQgYmFjayB0byBkb3VibGUgKi8KKyAgICAgIHVuaW9uIGR1bGwgdTsKKyAgICAgIHUuZCA9 IHJlYWw7CisgICAgICByLndyaXRlICgidWxsX3RvX2QgKCUjbGx4KSwiLCB1LnVsbCk7Cisg ICAgfQorCisgIGlmIChpc2Zpbml0ZSAoaW1hZykpCisgICAgci53cml0ZSgiJWEiLCBpbWFn KTsKKyAgZWxzZSBpZiAoaXNpbmYgKGltYWcpKQorICAgIHsKKyAgICAgIGlmIChyZWFsIDwg MCkKKwlyLndyaXRlICgiLUlORklOSVRZIik7CisgICAgICBlbHNlCisJci53cml0ZSAoIklO RklOSVRZIik7CisgICAgfQorICBlbHNlIC8qIE5hTiAqLworICAgIHsKKyAgICAgIHVuaW9u IGR1bGwgdTsKKyAgICAgIHUuZCA9IGltYWc7CisgICAgICByLndyaXRlICgidWxsX3RvX2Qg KCUjbGx4KSIsIHUudWxsKTsKKyAgICB9CisKKyAgci53cml0ZSAoIik7XG5cbiIpOyAvKiBD bG9zZSB0aGUgZnVuY3Rpb24gY2FsbCAqLworfQorCit9CisKIC8qIFRoZSBtYWtlX2RlYnVn X3N0cmluZyBzcGVjaWFsaXphdGlvbiBmb3IgPHZvaWQgKj4sIHJlbmRlcmluZyBpdCBhcwog ICAgICAoVEFSR0VUX1RZUEUpSEVYCiAgICBlLmcuCkBAIC01NzQwLDE3ICs1ODk4LDI0IEBA IHN0YXRpYyBjb25zdCBjaGFyICogY29uc3QgYmluYXJ5X29wX3N0cmluZ3NbXSA9IHsKICAg Inx8IiwgLyogR0NDX0pJVF9CSU5BUllfT1BfTE9HSUNBTF9PUiAqLwogICAiPDwiLCAvKiBH Q0NfSklUX0JJTkFSWV9PUF9MU0hJRlQgKi8KICAgIj4+IiwgLyogR0NDX0pJVF9CSU5BUllf T1BfUlNISUZUICovCisgICIiLCAvKiBHQ0NfSklUX0JJTkFSWV9PUF9DT01QTEVYIC0gZHVt bXkgbm90IHVzZWQgKi8KIH07CiAKIHJlY29yZGluZzo6c3RyaW5nICoKIHJlY29yZGluZzo6 YmluYXJ5X29wOjptYWtlX2RlYnVnX3N0cmluZyAoKQogewogICBlbnVtIHByZWNlZGVuY2Ug cHJlYyA9IGdldF9wcmVjZWRlbmNlICgpOwotICByZXR1cm4gc3RyaW5nOjpmcm9tX3ByaW50 ZiAobV9jdHh0LAotCQkJICAgICAgIiVzICVzICVzIiwKLQkJCSAgICAgIG1fYS0+Z2V0X2Rl YnVnX3N0cmluZ19wYXJlbnMgKHByZWMpLAotCQkJICAgICAgYmluYXJ5X29wX3N0cmluZ3Nb bV9vcF0sCi0JCQkgICAgICBtX2ItPmdldF9kZWJ1Z19zdHJpbmdfcGFyZW5zIChwcmVjKSk7 CisgIGlmIChtX29wID09IEdDQ19KSVRfQklOQVJZX09QX0NPTVBMRVgpCisgICAgcmV0dXJu IHN0cmluZzo6ZnJvbV9wcmludGYgKG1fY3R4dCwKKwkJCQkiKCVzICsgJXMgKiBfSW1hZ2lu YXJ5X0kpIiwKKwkJCQltX2EtPmdldF9kZWJ1Z19zdHJpbmdfcGFyZW5zIChwcmVjKSwKKwkJ CQltX2ItPmdldF9kZWJ1Z19zdHJpbmdfcGFyZW5zIChwcmVjKSk7CisgIGVsc2UKKyAgICBy ZXR1cm4gc3RyaW5nOjpmcm9tX3ByaW50ZiAobV9jdHh0LAorCQkJCSIlcyAlcyAlcyIsCisJ CQkJbV9hLT5nZXRfZGVidWdfc3RyaW5nX3BhcmVucyAocHJlYyksCisJCQkJYmluYXJ5X29w X3N0cmluZ3NbbV9vcF0sCisJCQkJbV9iLT5nZXRfZGVidWdfc3RyaW5nX3BhcmVucyAocHJl YykpOwogfQogCiBjb25zdCBjaGFyICogY29uc3QgYmluYXJ5X29wX3JlcHJvZHVjZXJfc3Ry aW5nc1tdID0gewpAQCAtNTc2NSw3ICs1OTMwLDggQEAgY29uc3QgY2hhciAqIGNvbnN0IGJp bmFyeV9vcF9yZXByb2R1Y2VyX3N0cmluZ3NbXSA9IHsKICAgIkdDQ19KSVRfQklOQVJZX09Q X0xPR0lDQUxfQU5EIiwKICAgIkdDQ19KSVRfQklOQVJZX09QX0xPR0lDQUxfT1IiLAogICAi R0NDX0pJVF9CSU5BUllfT1BfTFNISUZUIiwKLSAgIkdDQ19KSVRfQklOQVJZX09QX1JTSElG VCIKKyAgIkdDQ19KSVRfQklOQVJZX09QX1JTSElGVCIsCisgICJHQ0NfSklUX0JJTkFSWV9P UF9DT01QTEVYIiwKIH07CiAKIC8qIEltcGxlbWVudGF0aW9uIG9mIHJlY29yZGluZzo6bWVt ZW50bzo6d3JpdGVfcmVwcm9kdWNlciBmb3IgYmluYXJ5IG9wcy4gICovCkBAIC01ODA2LDYg KzU5NzIsNyBAQCBzdGF0aWMgY29uc3QgZW51bSBwcmVjZWRlbmNlIGJpbmFyeV9vcF9wcmVj ZWRlbmNlW10gPSB7CiAgIFBSRUNFREVOQ0VfTE9HSUNBTF9PUiwgLyogR0NDX0pJVF9CSU5B UllfT1BfTE9HSUNBTF9PUiAqLwogICBQUkVDRURFTkNFX1NISUZULCAvKiBHQ0NfSklUX0JJ TkFSWV9PUF9MU0hJRlQgKi8KICAgUFJFQ0VERU5DRV9TSElGVCwgLyogR0NDX0pJVF9CSU5B UllfT1BfUlNISUZUICovCisgIFBSRUNFREVOQ0VfQ0FTVCwgLyogR0NDX0pJVF9CSU5BUllf T1BfQ09NUExFWCAqLwogfTsKIH0gLyogbmFtZXNwYWNlIHJlY29yZGluZyAqLwogCmRpZmYg LS1naXQgYS9nY2Mvaml0L2ppdC1yZWNvcmRpbmcuaCBiL2djYy9qaXQvaml0LXJlY29yZGlu Zy5oCmluZGV4IDRhODA4Mjk5MWZiLi5hMmQxMzI5YTA3YyAxMDA2NDQKLS0tIGEvZ2NjL2pp dC9qaXQtcmVjb3JkaW5nLmgKKysrIGIvZ2NjL2ppdC9qaXQtcmVjb3JkaW5nLmgKQEAgLTMw LDYgKzMwLDE2IEBAIG5hbWVzcGFjZSBnY2MgewogCiBuYW1lc3BhY2Ugaml0IHsKIAordGVt cGxhdGU8dHlwZW5hbWUgSE9TVF9UWVBFPgorc3RydWN0IGhvc3RfcGFpcgoreworICBob3N0 X3BhaXIgKEhPU1RfVFlQRSBhLCBIT1NUX1RZUEUgYikgOgorICAgIG1fYSAoYSksIG1fYiAo Yikge30KKyAgSE9TVF9UWVBFIG1fYTsKKyAgSE9TVF9UWVBFIG1fYjsKK307CisKKwogZXh0 ZXJuIGNvbnN0IGNoYXIgKiBjb25zdCB1bmFyeV9vcF9yZXByb2R1Y2VyX3N0cmluZ3NbXTsK IGV4dGVybiBjb25zdCBjaGFyICogY29uc3QgYmluYXJ5X29wX3JlcHJvZHVjZXJfc3RyaW5n c1tdOwogCkBAIC0xNjUsNiArMTc1LDEyIEBAIHB1YmxpYzoKICAgbmV3X3J2YWx1ZV9mcm9t X2NvbnN0ICh0eXBlICp0eXBlLAogCQkJIEhPU1RfVFlQRSB2YWx1ZSk7CiAKKyAgdGVtcGxh dGUgPHR5cGVuYW1lIEhPU1RfVFlQRT4KKyAgcnZhbHVlICoKKyAgbmV3X3J2YWx1ZV9mcm9t X2NvbnN0ICh0eXBlICp0eXBlLAorCQkJIEhPU1RfVFlQRSB2YWx1ZV9hLAorCQkJIEhPU1Rf VFlQRSB2YWx1ZV9iKTsKKwogICBydmFsdWUgKgogICBuZXdfc3RyaW5nX2xpdGVyYWwgKGNv bnN0IGNoYXIgKnZhbHVlKTsKIApAQCAtNTY3LDYgKzU4Myw3IEBAIHB1YmxpYzoKICAgdmly dHVhbCBib29sIGlzX2ludCAoKSBjb25zdCA9IDA7CiAgIHZpcnR1YWwgYm9vbCBpc19mbG9h dCAoKSBjb25zdCA9IDA7CiAgIHZpcnR1YWwgYm9vbCBpc19ib29sICgpIGNvbnN0ID0gMDsK KyAgdmlydHVhbCBib29sIGlzX2NvbXBsZXggKCkgY29uc3QgPSAwOwogICB2aXJ0dWFsIHR5 cGUgKmlzX3BvaW50ZXIgKCkgPSAwOwogICB2aXJ0dWFsIHR5cGUgKmlzX3ZvbGF0aWxlICgp IHsgcmV0dXJuIE5VTEw7IH0KICAgdmlydHVhbCB0eXBlICppc19yZXN0cmljdCAoKSB7IHJl dHVybiBOVUxMOyB9CkBAIC01NzgsNiArNTk1LDkgQEAgcHVibGljOgogICB2aXJ0dWFsIHZl Y3Rvcl90eXBlICppc192ZWN0b3IgKCkgeyByZXR1cm4gTlVMTDsgfQogICB2aXJ0dWFsIGJv b2wgaGFzX2tub3duX3NpemUgKCkgY29uc3QgeyByZXR1cm4gdHJ1ZTsgfQogICB2aXJ0dWFs IGJvb2wgaXNfc2lnbmVkICgpIGNvbnN0ID0gMDsKKyAgLyogVXNlZCB0byBwYWlyIGNvbXBs ZXggZmxvYXQgdHlwZXMgd2l0aCByZWFsIGZsb2F0IHR5cGUKKyAgICAgb2YgdGhlIHNhbWUg ImJhc2UgdHlwZSIuICovCisgIHZpcnR1YWwgaW50IGZsb2F0X3NpemVfcXVhbCAoKSBjb25z dCB7IHJldHVybiAwOyB9CiAKICAgYm9vbCBpc19udW1lcmljICgpIGNvbnN0CiAgIHsKQEAg LTY0MCwxMSArNjYwLDMxIEBAIHB1YmxpYzoKICAgYm9vbCBpc19pbnQgKCkgY29uc3QgZmlu YWwgb3ZlcnJpZGU7CiAgIGJvb2wgaXNfZmxvYXQgKCkgY29uc3QgZmluYWwgb3ZlcnJpZGU7 CiAgIGJvb2wgaXNfYm9vbCAoKSBjb25zdCBmaW5hbCBvdmVycmlkZTsKKyAgYm9vbCBpc19j b21wbGV4ICgpIGNvbnN0IGZpbmFsIG92ZXJyaWRlOwogICB0eXBlICppc19wb2ludGVyICgp IGZpbmFsIG92ZXJyaWRlIHsgcmV0dXJuIGRlcmVmZXJlbmNlICgpOyB9CiAgIHR5cGUgKmlz X2FycmF5ICgpIGZpbmFsIG92ZXJyaWRlIHsgcmV0dXJuIE5VTEw7IH0KICAgYm9vbCBpc192 b2lkICgpIGNvbnN0IGZpbmFsIG92ZXJyaWRlIHsgcmV0dXJuIG1fa2luZCA9PSBHQ0NfSklU X1RZUEVfVk9JRDsgfQogICBib29sIGlzX3NpZ25lZCAoKSBjb25zdCBmaW5hbCBvdmVycmlk ZTsKIAorICBpbnQgZmxvYXRfc2l6ZV9xdWFsICgpIGNvbnN0IGZpbmFsIG92ZXJyaWRlCisg IHsKKyAgICBzd2l0Y2ggKG1fa2luZCkKKyAgICAgIHsKKyAgICAgIGRlZmF1bHQ6CisJcmV0 dXJuIDA7CisgICAgICBjYXNlIEdDQ19KSVRfVFlQRV9GTE9BVDoKKyAgICAgIGNhc2UgR0ND X0pJVF9UWVBFX0NPTVBMRVhfRkxPQVQ6CisJcmV0dXJuIDE7CisgICAgICBjYXNlIEdDQ19K SVRfVFlQRV9ET1VCTEU6CisgICAgICBjYXNlIEdDQ19KSVRfVFlQRV9DT01QTEVYX0RPVUJM RToKKwlyZXR1cm4gMjsKKyAgICAgIGNhc2UgR0NDX0pJVF9UWVBFX0xPTkdfRE9VQkxFOgor ICAgICAgY2FzZSBHQ0NfSklUX1RZUEVfQ09NUExFWF9MT05HX0RPVUJMRToKKwlyZXR1cm4g MzsKKyAgICAgIH0KKyAgfQorCisKIHB1YmxpYzoKICAgdm9pZCByZXBsYXlfaW50byAocmVw bGF5ZXIgKnIpIGZpbmFsIG92ZXJyaWRlOwogCkBAIC02NzUsNiArNzE1LDcgQEAgcHVibGlj OgogICBib29sIGlzX2ludCAoKSBjb25zdCBmaW5hbCBvdmVycmlkZSB7IHJldHVybiBmYWxz ZTsgfQogICBib29sIGlzX2Zsb2F0ICgpIGNvbnN0IGZpbmFsIG92ZXJyaWRlIHsgcmV0dXJu IGZhbHNlOyB9CiAgIGJvb2wgaXNfYm9vbCAoKSBjb25zdCBmaW5hbCBvdmVycmlkZSB7IHJl dHVybiBmYWxzZTsgfQorICBib29sIGlzX2NvbXBsZXggKCkgY29uc3QgZmluYWwgb3ZlcnJp ZGUgeyByZXR1cm4gZmFsc2U7IH0KICAgdHlwZSAqaXNfcG9pbnRlciAoKSBmaW5hbCBvdmVy cmlkZSB7IHJldHVybiBtX290aGVyX3R5cGU7IH0KICAgdHlwZSAqaXNfYXJyYXkgKCkgZmlu YWwgb3ZlcnJpZGUgeyByZXR1cm4gTlVMTDsgfQogICBib29sIGlzX3NpZ25lZCAoKSBjb25z dCBmaW5hbCBvdmVycmlkZSB7IHJldHVybiBmYWxzZTsgfQpAQCAtNzA4LDYgKzc0OSw3IEBA IHB1YmxpYzoKICAgdHlwZSAqaXNfYXJyYXkgKCkgZmluYWwgb3ZlcnJpZGUgeyByZXR1cm4g bV9vdGhlcl90eXBlLT5pc19hcnJheSAoKTsgfQogICBzdHJ1Y3RfICppc19zdHJ1Y3QgKCkg ZmluYWwgb3ZlcnJpZGUgeyByZXR1cm4gbV9vdGhlcl90eXBlLT5pc19zdHJ1Y3QgKCk7IH0K ICAgYm9vbCBpc19zaWduZWQgKCkgY29uc3QgZmluYWwgb3ZlcnJpZGUgeyByZXR1cm4gbV9v dGhlcl90eXBlLT5pc19zaWduZWQgKCk7IH0KKyAgYm9vbCBpc19jb21wbGV4ICgpIGNvbnN0 IGZpbmFsIG92ZXJyaWRlIHsgcmV0dXJuIG1fb3RoZXJfdHlwZS0+aXNfY29tcGxleCAoKTsg fQogCiBwcm90ZWN0ZWQ6CiAgIHR5cGUgKm1fb3RoZXJfdHlwZTsKQEAgLTg3Myw2ICs5MTUs OCBAQCBjbGFzcyBhcnJheV90eXBlIDogcHVibGljIHR5cGUKICAgYm9vbCBpc19ib29sICgp IGNvbnN0IGZpbmFsIG92ZXJyaWRlIHsgcmV0dXJuIGZhbHNlOyB9CiAgIHR5cGUgKmlzX3Bv aW50ZXIgKCkgZmluYWwgb3ZlcnJpZGUgeyByZXR1cm4gTlVMTDsgfQogICB0eXBlICppc19h cnJheSAoKSBmaW5hbCBvdmVycmlkZSB7IHJldHVybiBtX2VsZW1lbnRfdHlwZTsgfQorICBi b29sIGlzX2NvbXBsZXggKCkgY29uc3QgZmluYWwgb3ZlcnJpZGUgeyByZXR1cm4gZmFsc2U7 IH0KKwogICBpbnQgbnVtX2VsZW1lbnRzICgpIHsgcmV0dXJuIG1fbnVtX2VsZW1lbnRzOyB9 CiAgIGJvb2wgaXNfc2lnbmVkICgpIGNvbnN0IGZpbmFsIG92ZXJyaWRlIHsgcmV0dXJuIGZh bHNlOyB9CiAKQEAgLTkwOSw2ICs5NTMsNyBAQCBwdWJsaWM6CiAgIHR5cGUgKmlzX3BvaW50 ZXIgKCkgZmluYWwgb3ZlcnJpZGUgeyByZXR1cm4gTlVMTDsgfQogICB0eXBlICppc19hcnJh eSAoKSBmaW5hbCBvdmVycmlkZSB7IHJldHVybiBOVUxMOyB9CiAgIGJvb2wgaXNfc2lnbmVk ICgpIGNvbnN0IGZpbmFsIG92ZXJyaWRlIHsgcmV0dXJuIGZhbHNlOyB9CisgIGJvb2wgaXNf Y29tcGxleCAoKSBjb25zdCBmaW5hbCBvdmVycmlkZSB7IHJldHVybiBmYWxzZTsgfQogCiAg IHZvaWQgcmVwbGF5X2ludG8gKHJlcGxheWVyICopIGZpbmFsIG92ZXJyaWRlOwogCkBAIC0x MDIzLDYgKzEwNjgsNyBAQCBwdWJsaWM6CiAgIHR5cGUgKmlzX3BvaW50ZXIgKCkgZmluYWwg b3ZlcnJpZGUgeyByZXR1cm4gTlVMTDsgfQogICB0eXBlICppc19hcnJheSAoKSBmaW5hbCBv dmVycmlkZSB7IHJldHVybiBOVUxMOyB9CiAgIGJvb2wgaXNfc2lnbmVkICgpIGNvbnN0IGZp bmFsIG92ZXJyaWRlIHsgcmV0dXJuIGZhbHNlOyB9CisgIGJvb2wgaXNfY29tcGxleCAoKSBj b25zdCBmaW5hbCBvdmVycmlkZSAgeyByZXR1cm4gZmFsc2U7IH0KIAogICBib29sIGhhc19r bm93bl9zaXplICgpIGNvbnN0IGZpbmFsIG92ZXJyaWRlIHsgcmV0dXJuIG1fZmllbGRzICE9 IE5VTEw7IH0KIApkaWZmIC0tZ2l0IGEvZ2NjL2ppdC9saWJnY2NqaXQrKy5oIGIvZ2NjL2pp dC9saWJnY2NqaXQrKy5oCmluZGV4IGY5YTAwMTdjYWU1Li5iOTY1ZDk5ZDNmOCAxMDA2NDQK LS0tIGEvZ2NjL2ppdC9saWJnY2NqaXQrKy5oCisrKyBiL2djYy9qaXQvbGliZ2Njaml0Kysu aApAQCAtMTI4LDYgKzEyOCw3IEBAIG5hbWVzcGFjZSBnY2NqaXQKIAogICAgIHZvaWQgc2V0 X2Jvb2xfYWxsb3dfdW5yZWFjaGFibGVfYmxvY2tzIChpbnQgYm9vbF92YWx1ZSk7CiAgICAg dm9pZCBzZXRfYm9vbF91c2VfZXh0ZXJuYWxfZHJpdmVyIChpbnQgYm9vbF92YWx1ZSk7Cisg ICAgdm9pZCBzZXRfYm9vbF9lbmFibGVfY29tcGxleF90eXBlcyAoaW50IGJvb2xfdmFsdWUp OwogCiAgICAgdm9pZCBhZGRfY29tbWFuZF9saW5lX29wdGlvbiAoY29uc3QgY2hhciAqb3B0 bmFtZSk7CiAgICAgdm9pZCBhZGRfZHJpdmVyX29wdGlvbiAoY29uc3QgY2hhciAqb3B0bmFt ZSk7CkBAIC0xOTEsNiArMTkyLDEyIEBAIG5hbWVzcGFjZSBnY2NqaXQKICAgICBydmFsdWUg b25lICh0eXBlIG51bWVyaWNfdHlwZSkgY29uc3Q7CiAgICAgcnZhbHVlIG5ld19ydmFsdWUg KHR5cGUgbnVtZXJpY190eXBlLAogCQkgICAgICAgZG91YmxlIHZhbHVlKSBjb25zdDsKKyAg ICBydmFsdWUgbmV3X3J2YWx1ZSAodHlwZSBudW1lcmljX3R5cGUsCisJCSAgICAgICBsb25n IGRvdWJsZSB2YWx1ZSkgY29uc3Q7CisgICAgcnZhbHVlIG5ld19ydmFsdWUgKHR5cGUgbnVt ZXJpY190eXBlLAorCQkgICAgICAgZG91YmxlIHJlYWwsIGRvdWJsZSBpbWFnKSBjb25zdDsK KyAgICBydmFsdWUgbmV3X3J2YWx1ZSAodHlwZSBudW1lcmljX3R5cGUsCisJCSAgICAgICBs b25nIGRvdWJsZSByZWFsLCBsb25nIGRvdWJsZSBpbWFnKSBjb25zdDsKICAgICBydmFsdWUg bmV3X3J2YWx1ZSAodHlwZSBwb2ludGVyX3R5cGUsCiAJCSAgICAgICB2b2lkICp2YWx1ZSkg Y29uc3Q7CiAgICAgcnZhbHVlIG5ld19ydmFsdWUgKGNvbnN0IHN0ZDo6c3RyaW5nICZ2YWx1 ZSkgY29uc3Q7CkBAIC03NDgsNiArNzU1LDEzIEBAIGNvbnRleHQ6OnNldF9ib29sX3VzZV9l eHRlcm5hbF9kcml2ZXIgKGludCBib29sX3ZhbHVlKQogCQkJCQkJYm9vbF92YWx1ZSk7CiB9 CiAKK2lubGluZSB2b2lkCitjb250ZXh0OjpzZXRfYm9vbF9lbmFibGVfY29tcGxleF90eXBl cyAoaW50IGJvb2xfdmFsdWUpCit7CisgIGdjY19qaXRfY29udGV4dF9zZXRfYm9vbF9lbmFi bGVfY29tcGxleF90eXBlcyAobV9pbm5lcl9jdHh0LAorCQkJCQkJIGJvb2xfdmFsdWUpOwor fQorCiBpbmxpbmUgdm9pZAogY29udGV4dDo6YWRkX2NvbW1hbmRfbGluZV9vcHRpb24gKGNv bnN0IGNoYXIgKm9wdG5hbWUpCiB7CkBAIC05NjYsNiArOTgwLDI4IEBAIGNvbnRleHQ6Om5l d19ydmFsdWUgKHR5cGUgbnVtZXJpY190eXBlLAogCQkJCQkgICAgdmFsdWUpKTsKIH0KIAor aW5saW5lIHJ2YWx1ZQorY29udGV4dDo6bmV3X3J2YWx1ZSAodHlwZSBudW1lcmljX3R5cGUs CisJCSAgICAgbG9uZyBkb3VibGUgdmFsdWUpIGNvbnN0Cit7CisgIHJldHVybiBydmFsdWUg KAorICAgIGdjY19qaXRfY29udGV4dF9uZXdfcnZhbHVlX2Zyb21fbG9uZ19kb3VibGUgKAor ICAgICAgbV9pbm5lcl9jdHh0LAorICAgICAgbnVtZXJpY190eXBlLmdldF9pbm5lcl90eXBl ICgpLAorICAgICAgdmFsdWUpKTsKK30KKworaW5saW5lIHJ2YWx1ZQorY29udGV4dDo6bmV3 X3J2YWx1ZSAodHlwZSBudW1lcmljX3R5cGUsCisJCSAgICAgZG91YmxlIHJlYWwsIGRvdWJs ZSBpbWFnKSBjb25zdAoreworICByZXR1cm4gcnZhbHVlICgKKyAgICBnY2Nfaml0X2NvbnRl eHRfbmV3X3J2YWx1ZV9mcm9tX2NvbXBsZXhfZG91YmxlICgKKyAgICAgIG1faW5uZXJfY3R4 dCwKKyAgICAgIG51bWVyaWNfdHlwZS5nZXRfaW5uZXJfdHlwZSAoKSwKKyAgICAgIHJlYWws IGltYWcpKTsKK30KKwogaW5saW5lIHJ2YWx1ZQogY29udGV4dDo6bmV3X3J2YWx1ZSAodHlw ZSBwb2ludGVyX3R5cGUsCiAJCSAgICAgdm9pZCAqdmFsdWUpIGNvbnN0CmRpZmYgLS1naXQg YS9nY2Mvaml0L2xpYmdjY2ppdC5jYyBiL2djYy9qaXQvbGliZ2Njaml0LmNjCmluZGV4IDA0 NTFiNGRmN2Y5Li43OWEyMTM2MjRkYSAxMDA2NDQKLS0tIGEvZ2NjL2ppdC9saWJnY2NqaXQu Y2MKKysrIGIvZ2NjL2ppdC9saWJnY2NqaXQuY2MKQEAgLTQ3MCw2ICs0NzAsMTQgQEAgZ2Nj X2ppdF9jb250ZXh0X2dldF90eXBlIChnY2Nfaml0X2NvbnRleHQgKmN0eHQsCiAgICAgICYm IHR5cGUgPCBOVU1fR0NDX0pJVF9UWVBFUyksCiAgICAgY3R4dCwgTlVMTCwKICAgICAidW5y ZWNvZ25pemVkIHZhbHVlIGZvciBlbnVtIGdjY19qaXRfdHlwZXM6ICVpIiwgdHlwZSk7Cisg IGlmICh0eXBlID49IEdDQ19KSVRfVFlQRV9DT01QTEVYX0ZMT0FUCisgICAgICAmJiB0eXBl IDw9IEdDQ19KSVRfVFlQRV9DT01QTEVYX0xPTkdfRE9VQkxFKQorICAgIFJFVFVSTl9OVUxM X0lGX0ZBSUwgKAorICAgICAgY3R4dC0+Z2V0X2lubmVyX2Jvb2xfb3B0aW9uKAorCWdjYzo6 aml0OjpJTk5FUl9CT09MX09QVElPTl9FTkFCTEVfQ09NUExFWF9UWVBFUyksCisgICAgICBj dHh0LCBOVUxMLAorICAgICAgImNvbXBsZXggdHlwZXMgYXJlIG9ubHkgYXZhaWxhYmxlIGFm dGVyIGVuYWJsaW5nIHRoZW0gd2l0aCIKKyAgICAgICIgZ2NjX2ppdF9jb250ZXh0X3NldF9i b29sX2VuYWJsZV9jb21wbGV4X3R5cGVzKCkiKTsKIAogICByZXR1cm4gKGdjY19qaXRfdHlw ZSAqKWN0eHQtPmdldF90eXBlICh0eXBlKTsKIH0KQEAgLTIwMjcsNiArMjAzNSwyOCBAQCBn Y2Nfaml0X2NvbnRleHRfbmV3X3J2YWx1ZV9mcm9tX2RvdWJsZSAoZ2NjX2ppdF9jb250ZXh0 ICpjdHh0LAogCSAgLT5uZXdfcnZhbHVlX2Zyb21fY29uc3QgPGRvdWJsZT4gKG51bWVyaWNf dHlwZSwgdmFsdWUpKTsKIH0KIAorZ2NjX2ppdF9ydmFsdWUgKgorZ2NjX2ppdF9jb250ZXh0 X25ld19ydmFsdWVfZnJvbV9jb21wbGV4X2RvdWJsZSAoZ2NjX2ppdF9jb250ZXh0ICpjdHh0 LAorCQkJCQkJZ2NjX2ppdF90eXBlICpudW1lcmljX3R5cGUsCisJCQkJCQlkb3VibGUgcmVh bCwKKwkJCQkJCWRvdWJsZSBpbWFnKQoreworICBSRVRVUk5fTlVMTF9JRl9GQUlMIChjdHh0 LCBOVUxMLCBOVUxMLCAiTlVMTCBjb250ZXh0Iik7CisgIEpJVF9MT0dfRlVOQyAoY3R4dC0+ Z2V0X2xvZ2dlciAoKSk7CisgIFJFVFVSTl9OVUxMX0lGX0ZBSUxfTk9OTlVMTF9OVU1FUklD X1RZUEUgKGN0eHQsIG51bWVyaWNfdHlwZSk7CisKKyAgUkVUVVJOX05VTExfSUZfRkFJTF9Q UklOVEYxICgKKyAgICBudW1lcmljX3R5cGUtPmlzX2Zsb2F0ICgpLAorICAgIGN0eHQsIE5V TEwsCisgICAgIm5vdCBhIGZsb2F0aW5nIHBvaW50IHR5cGUgKHR5cGU6ICVzKSIsCisgICAg bnVtZXJpY190eXBlLT5nZXRfZGVidWdfc3RyaW5nICgpKTsKKworICByZXR1cm4gKChnY2Nf aml0X3J2YWx1ZSAqKWN0eHQKKwkgIC0+bmV3X3J2YWx1ZV9mcm9tX2NvbnN0IDxnY2M6Ompp dDo6aG9zdF9wYWlyPGRvdWJsZT4+ICgKKwkgICAgICBudW1lcmljX3R5cGUsIGdjYzo6aml0 Ojpob3N0X3BhaXI8ZG91YmxlPiAocmVhbCwgaW1hZykpKTsKK30KKworCiAvKiBQdWJsaWMg ZW50cnlwb2ludC4gIFNlZSBkZXNjcmlwdGlvbiBpbiBsaWJnY2NqaXQuaC4KIAogICAgQWZ0 ZXIgZXJyb3ItY2hlY2tpbmcsIHRoZSByZWFsIHdvcmsgaXMgZG9uZSBieSB0aGUKQEAgLTIx MjIsNiArMjE1MiwxNCBAQCBnY2Nfaml0X2NvbnRleHRfbmV3X3VuYXJ5X29wIChnY2Nfaml0 X2NvbnRleHQgKmN0eHQsCiAgICAgcmVzdWx0X3R5cGUtPmdldF9kZWJ1Z19zdHJpbmcgKCkp OwogICBSRVRVUk5fTlVMTF9JRl9GQUlMIChydmFsdWUsIGN0eHQsIGxvYywgIk5VTEwgcnZh bHVlIik7CiAKKyAgaWYgKHJ2YWx1ZS0+Z2V0X3R5cGUgKCktPmlzX2NvbXBsZXggKCkpCisg ICAgUkVUVVJOX05VTExfSUZfRkFJTF9QUklOVEYyICgKKyAgICAgIG9wID09IEdDQ19KSVRf VU5BUllfT1BfTUlOVVMsCisgICAgICBjdHh0LCBsb2MsCisgICAgICAib25seSB1bmFyeSBt aW51cyBkZWZpbmVkIGZvciBjb21wbGV4IHR5cGVzOiAlcyAodHlwZTogJXMpIiwKKyAgICAg IHJ2YWx1ZS0+Z2V0X2RlYnVnX3N0cmluZyAoKSwKKyAgICAgIHJ2YWx1ZS0+Z2V0X3R5cGUg KCktPmdldF9kZWJ1Z19zdHJpbmcgKCkpOworCiAgIHJldHVybiAoZ2NjX2ppdF9ydmFsdWUg KiljdHh0LT5uZXdfdW5hcnlfb3AgKGxvYywgb3AsIHJlc3VsdF90eXBlLCBydmFsdWUpOwog fQogCkBAIC0yMTMzLDcgKzIxNzEsNyBAQCBzdGF0aWMgYm9vbAogdmFsaWRfYmluYXJ5X29w X3AgKGVudW0gZ2NjX2ppdF9iaW5hcnlfb3Agb3ApCiB7CiAgIHJldHVybiAob3AgPj0gR0ND X0pJVF9CSU5BUllfT1BfUExVUwotCSAgJiYgb3AgPD0gR0NDX0pJVF9CSU5BUllfT1BfUlNI SUZUKTsKKwkgICYmIG9wIDw9IEdDQ19KSVRfQklOQVJZX09QX0NPTVBMRVgpOwogfQogCiAv KiBQdWJsaWMgZW50cnlwb2ludC4gIFNlZSBkZXNjcmlwdGlvbiBpbiBsaWJnY2NqaXQuaC4K QEAgLTIxNzgsNiArMjIxNiw0MyBAQCBnY2Nfaml0X2NvbnRleHRfbmV3X2JpbmFyeV9vcCAo Z2NjX2ppdF9jb250ZXh0ICpjdHh0LAogICAgIGEtPmdldF9kZWJ1Z19zdHJpbmcgKCksIGIt PmdldF9kZWJ1Z19zdHJpbmcgKCksCiAgICAgcmVzdWx0X3R5cGUtPmdldF9kZWJ1Z19zdHJp bmcgKCkpOwogCisgIGlmIChvcCA9PSBHQ0NfSklUX0JJTkFSWV9PUF9DT01QTEVYKQorICAg IHsKKyAgICAgIFJFVFVSTl9OVUxMX0lGX0ZBSUwgKAorCWN0eHQtPmdldF9pbm5lcl9ib29s X29wdGlvbiAoZ2NjOjpqaXQ6OklOTkVSX0JPT0xfT1BUSU9OX0VOQUJMRV9DT01QTEVYX1RZ UEVTKSwKKwljdHh0LCBOVUxMLAorCSJ0aGUgY29tcGxleCBvcGVyYXRvciBpcyBvbmx5IGF2 YWlsYWJsZSBhZnRlciBlbmFibGluZyBpdCB3aXRoIgorCSIgZ2NjX2ppdF9jb250ZXh0X3Nl dF9ib29sX2VuYWJsZV9jb21wbGV4X3R5cGVzKCkiKTsKKyAgICAgIFJFVFVSTl9OVUxMX0lG X0ZBSUwgKAorCXJlc3VsdF90eXBlLT5pc19jb21wbGV4ICgpLAorCWN0eHQsIGxvYywKKyAg ICAgICAicmV0dXJuIHR5cGUgaXMgbm90IGNvbXBsZXgiKTsKKyAgICAgIFJFVFVSTl9OVUxM X0lGX0ZBSUxfUFJJTlRGMyAoCisJIWEtPmdldF90eXBlICgpLT5pc19jb21wbGV4ICgpICYm CisJYS0+Z2V0X3R5cGUgKCktPmlzX2Zsb2F0ICgpLAorCWN0eHQsIGxvYywKKwkiZmlyc3Qg b3BlcmFuZCBvZiAlcyBpcyBub3QgcmVhbDogJXMgKHR5cGU6ICVzKSIsCisJZ2NjOjpqaXQ6 OmJpbmFyeV9vcF9yZXByb2R1Y2VyX3N0cmluZ3Nbb3BdLAorCWEtPmdldF9kZWJ1Z19zdHJp bmcgKCksCisJYS0+Z2V0X3R5cGUgKCktPmdldF9kZWJ1Z19zdHJpbmcgKCkpOworICAgICAg UkVUVVJOX05VTExfSUZfRkFJTF9QUklOVEYzICgKKwkhYi0+Z2V0X3R5cGUgKCktPmlzX2Nv bXBsZXggKCkgJiYKKwliLT5nZXRfdHlwZSAoKS0+aXNfZmxvYXQgKCksCisJY3R4dCwgbG9j LAorCSIybmQgb3BlcmFuZCBvZiAlcyBpcyBub3QgcmVhbDogJXMgKHR5cGU6ICVzKSIsCisJ Z2NjOjpqaXQ6OmJpbmFyeV9vcF9yZXByb2R1Y2VyX3N0cmluZ3Nbb3BdLAorCWItPmdldF9k ZWJ1Z19zdHJpbmcgKCksCisJYi0+Z2V0X3R5cGUgKCktPmdldF9kZWJ1Z19zdHJpbmcgKCkp OworICAgICAgUkVUVVJOX05VTExfSUZfRkFJTF9QUklOVEYyICgKKwlhLT5nZXRfdHlwZSAo KS0+IGZsb2F0X3NpemVfcXVhbCAoKSA9PQorCXJlc3VsdF90eXBlLT5mbG9hdF9zaXplX3F1 YWwgKCksCisJY3R4dCwgbG9jLAorCSJzaXplIHF1YWxpZmllcnMgb2YgY29tcGxleCBvcGVy YW5kJ3Mgbm90IHRoZSBzYW1lIGFzIHRoZSByZXN1bHQ6IgorCSIgb3BlcmFuZHM6ICVzLCBy ZXN1bHQ6ICAlcyIsCisJYS0+Z2V0X3R5cGUgKCktPmdldF9kZWJ1Z19zdHJpbmcgKCksCisJ cmVzdWx0X3R5cGUtPmdldF9kZWJ1Z19zdHJpbmcgKCkpOworICAgIH0KKwogICByZXR1cm4g KGdjY19qaXRfcnZhbHVlICopY3R4dC0+bmV3X2JpbmFyeV9vcCAobG9jLCBvcCwgcmVzdWx0 X3R5cGUsIGEsIGIpOwogfQogCkBAIC0yMjE0LDYgKzIyODksMTQgQEAgZ2NjX2ppdF9jb250 ZXh0X25ld19jb21wYXJpc29uIChnY2Nfaml0X2NvbnRleHQgKmN0eHQsCiAgICAgYi0+Z2V0 X2RlYnVnX3N0cmluZyAoKSwKICAgICBiLT5nZXRfdHlwZSAoKS0+Z2V0X2RlYnVnX3N0cmlu ZyAoKSk7CiAKKyAgaWYgKGEtPmdldF90eXBlICgpLT5pc19jb21wbGV4KCkpCisgICAgUkVU VVJOX05VTExfSUZfRkFJTF9QUklOVEYxICgKKyAgICAgIChvcCA9PSBHQ0NfSklUX0NPTVBB UklTT05fRVEKKyAgICAgICB8fCBvcCA9PSBHQ0NfSklUX0NPTVBBUklTT05fTkUpLAorICAg ICAgY3R4dCwgbG9jLAorICAgICAgImludmFsaWQgZW51bSBnY2Nfaml0X2NvbXBhcmlzb24g Zm9yIGNvbXBsZXggb3BlcmFuZHM6ICVpIiwKKyAgICAgIG9wKTsKKwogICByZXR1cm4gKGdj Y19qaXRfcnZhbHVlICopY3R4dC0+bmV3X2NvbXBhcmlzb24gKGxvYywgb3AsIGEsIGIpOwog fQogCkBAIC0zNTU0LDYgKzM2MzcsMTcgQEAgZ2NjX2ppdF9jb250ZXh0X3NldF9ib29sX3By aW50X2Vycm9yc190b19zdGRlcnIgKGdjY19qaXRfY29udGV4dCAqY3R4dCwKICAgICBlbmFi bGVkKTsKIH0KIAordm9pZAorZ2NjX2ppdF9jb250ZXh0X3NldF9ib29sX2VuYWJsZV9jb21w bGV4X3R5cGVzIChnY2Nfaml0X2NvbnRleHQgKmN0eHQsCisJCQkJCSAgICAgICBpbnQgYm9v bF92YWx1ZSkKK3sKKyAgUkVUVVJOX0lGX0ZBSUwgKGN0eHQsIE5VTEwsIE5VTEwsICJOVUxM IGNvbnRleHQiKTsKKyAgSklUX0xPR19GVU5DIChjdHh0LT5nZXRfbG9nZ2VyICgpKTsKKyAg Y3R4dC0+c2V0X2lubmVyX2Jvb2xfb3B0aW9uICgKKyAgICBnY2M6OmppdDo6SU5ORVJfQk9P TF9PUFRJT05fRU5BQkxFX0NPTVBMRVhfVFlQRVMsCisgICAgYm9vbF92YWx1ZSk7Cit9CisK IC8qIFB1YmxpYyBlbnRyeXBvaW50LiAgU2VlIGRlc2NyaXB0aW9uIGluIGxpYmdjY2ppdC5o LgogCiAgICBBZnRlciBlcnJvci1jaGVja2luZywgdGhlIHJlYWwgd29yayBpcyBkb25lIGJ5 IHRoZQpkaWZmIC0tZ2l0IGEvZ2NjL2ppdC9saWJnY2NqaXQuaCBiL2djYy9qaXQvbGliZ2Nj aml0LmgKaW5kZXggNzQ5ZjZjMjQxNzcuLjZjYTNjZDkwYjU3IDEwMDY0NAotLS0gYS9nY2Mv aml0L2xpYmdjY2ppdC5oCisrKyBiL2djYy9qaXQvbGliZ2Njaml0LmgKQEAgLTIyLDYgKzIy LDIxIEBAIGFsb25nIHdpdGggR0NDOyBzZWUgdGhlIGZpbGUgQ09QWUlORzMuICBJZiBub3Qg c2VlCiAKICNpbmNsdWRlIDxzdGRpby5oPgogCisjaWZkZWYgX19HTlVDX18KKworLyogSW5j bHVkZSBlbnRyeXBvaW50cyB3aXRoIGxvbmcgbG9uZyBwYXJhbWV0ZXIgdHlwZXMuICovCisj ICBkZWZpbmUgTElCR0NDSklUX0lOQ0xVREVfTE9OR0xPTkdTCisKKyNlbHNlCisKKyMgIGlm IF9fU1REQ19WRVJTSU9OX18gPj0gMTk5OTAxTAorIyAgICBkZWZpbmUgTElCR0NDSklUX0lO Q0xVREVfTE9OR0xPTkdTCisjICBlbGlmIF9fY3BsdXNwbHVzID49IDIwMTEwM0wKKyMgICAg ZGVmaW5lIExJQkdDQ0pJVF9JTkNMVURFX0xPTkdMT05HUworIyAgZW5kaWYKKworI2VuZGlm CisKICNpZmRlZiBfX2NwbHVzcGx1cwogZXh0ZXJuICJDIiB7CiAjZW5kaWYgLyogX19jcGx1 c3BsdXMgKi8KQEAgLTEwODMsNiArMTA5OCwxOCBAQCBnY2Nfaml0X2NvbnRleHRfbmV3X3J2 YWx1ZV9mcm9tX2RvdWJsZSAoZ2NjX2ppdF9jb250ZXh0ICpjdHh0LAogCQkJCQlnY2Nfaml0 X3R5cGUgKm51bWVyaWNfdHlwZSwKIAkJCQkJZG91YmxlIHZhbHVlKTsKIAorLyogQ29tcGxl eCBmbG9hdGluZy1wb2ludCBjb25zdGFudHMuCisKKyAgIFRoaXMgQVBJIGVudHJ5cG9pbnQg d2FzIGFkZGVkIGluIExJQkdDQ0pJVF9BQklfMjY7IHlvdSBjYW4gdGVzdCBmb3IgaXRzCisg ICBwcmVzZW5jZSB1c2luZworICAgICAjaWZkZWYgTElCR0NDSklUX0hBVkVfQ09NUExFWCAq LworCitleHRlcm4gZ2NjX2ppdF9ydmFsdWUgKgorZ2NjX2ppdF9jb250ZXh0X25ld19ydmFs dWVfZnJvbV9jb21wbGV4X2RvdWJsZSAoZ2NjX2ppdF9jb250ZXh0ICpjdHh0LAorCQkJCQkJ Z2NjX2ppdF90eXBlICpudW1lcmljX3R5cGUsCisJCQkJCQlkb3VibGUgcmVhbCwKKwkJCQkJ CWRvdWJsZSBpbWFnKTsKKwogLyogUG9pbnRlcnMuICAqLwogZXh0ZXJuIGdjY19qaXRfcnZh bHVlICoKIGdjY19qaXRfY29udGV4dF9uZXdfcnZhbHVlX2Zyb21fcHRyIChnY2Nfaml0X2Nv bnRleHQgKmN0eHQsCkBAIC0xMTk0LDcgKzEyMjEsMjYgQEAgZW51bSBnY2Nfaml0X2JpbmFy eV9vcAogICAvKiBSaWdodCBzaGlmdDsgYW5hbG9nb3VzIHRvOgogICAgICAgIChFWFBSX0Ep ID4+IChFWFBSX0IpCiAgICAgIGluIEMuICAqLwotICBHQ0NfSklUX0JJTkFSWV9PUF9SU0hJ RlQKKyAgR0NDX0pJVF9CSU5BUllfT1BfUlNISUZULAorCisgIC8qIENyZWF0ZSBhIGNvbXBs ZXggZmxvYXRpbmcgcG9pbnQgdmFsdWUgZnJvbQorICAgICB0d28gcmVhbCBmbG9hdGluZyBw b2ludCB2YWx1ZXMuIFRoZSBvcGVyYW5kcworICAgICBhbmQgdGhlIHJlc3VsdCBuZWVkIHRv IGhhdmUgdGhlIHNhbWUgc2l6ZQorICAgICBxdWFsaWZpZXIuCisKKyAgICAgQW5hbG9nb3Vz IHRvOgorICAgICAgIENNUExYIChyZWFsLGltYWcpCisgICAgIGluIEMuCisKKyAgICAgVGhl IGZpcnN0IG9wZXJhbmQgaXMgdGhlIHJlYWwgcGFydCwgdGhlIG90aGVyCisgICAgIHRoZSBp bWFnaW5hcnkuIE5lZ2F0aXZlIHplcm9lcyBhcmUgcHJlc2VydmVkCisgICAgIGFuZCBJbmY6 cyBkbyBub3QgbGVhZCB0byBOYU5zLgorCisgICAgIFRoaXMgb3BlcmF0b3IgIHdhcyBhZGRl ZCBpbiBMSUJHQ0NKSVRfQUJJXzI2OworICAgICB5b3UgY2FuIHRlc3QgZm9yIGl0cyBwcmVz ZW5jZSB1c2luZworICAgICAgICNpZmRlZiBMSUJHQ0NKSVRfSEFWRV9DT01QTEVYCisgICov CisgIEdDQ19KSVRfQklOQVJZX09QX0NPTVBMRVgKIH07CiAKIGV4dGVybiBnY2Nfaml0X3J2 YWx1ZSAqCkBAIC0xNzQwLDYgKzE3ODYsMTkgQEAgZ2NjX2ppdF90aW1lcl9wcmludCAoZ2Nj X2ppdF90aW1lciAqdGltZXIsCiAJCSAgICAgRklMRSAqZl9vdXQpOwogCiAKKyNkZWZpbmUg TElCR0NDSklUX0hBVkVfQ09NUExFWAorCisvKiBFbmFibGVzIGNvbXBsZXggdHlwZSBzdXBw b3J0IGluIGxpYmdjY2ppdC4KKworICAgVGhpcyBBUEkgZW50cnlwb2ludCB3YXMgYWRkZWQg aW4gTElCR0NDSklUX0FCSV8yNjsgeW91IGNhbiB0ZXN0IGZvciBpdHMKKyAgIHByZXNlbmNl IHVzaW5nCisgICAgICNpZmRlZiBMSUJHQ0NKSVRfSEFWRV9DT01QTEVYCisqLworCitleHRl cm4gdm9pZAorZ2NjX2ppdF9jb250ZXh0X3NldF9ib29sX2VuYWJsZV9jb21wbGV4X3R5cGVz IChnY2Nfaml0X2NvbnRleHQgKmN0eHQsCisJCQkJCSAgICAgICBpbnQgYm9vbF92YWx1ZSk7 CisKICNkZWZpbmUgTElCR0NDSklUX0hBVkVfZ2NjX2ppdF9ydmFsdWVfc2V0X2Jvb2xfcmVx dWlyZV90YWlsX2NhbGwKIAogLyogTWFyay9jbGVhciBhIGNhbGwgYXMgbmVlZGluZyB0YWls LWNhbGwgb3B0aW1pemF0aW9uLgpkaWZmIC0tZ2l0IGEvZ2NjL2ppdC9saWJnY2NqaXQubWFw IGIvZ2NjL2ppdC9saWJnY2NqaXQubWFwCmluZGV4IDhiOTBhMGUyZmYzLi5lZmE4MGQ5Y2Yy ZiAxMDA2NDQKLS0tIGEvZ2NjL2ppdC9saWJnY2NqaXQubWFwCisrKyBiL2djYy9qaXQvbGli Z2Njaml0Lm1hcApAQCAtMjc2LDMgKzI3Niw5IEBAIExJQkdDQ0pJVF9BQklfMjUgewogICBn bG9iYWw6CiAgICAgZ2NjX2ppdF90eXBlX2dldF9yZXN0cmljdDsKIH0gTElCR0NDSklUX0FC SV8yNDsKKworTElCR0NDSklUX0FCSV8yNiB7CisgIGdsb2JhbDoKKyAgICBnY2Nfaml0X2Nv bnRleHRfbmV3X3J2YWx1ZV9mcm9tX2NvbXBsZXhfZG91YmxlOworICAgIGdjY19qaXRfY29u dGV4dF9zZXRfYm9vbF9lbmFibGVfY29tcGxleF90eXBlczsKK30gTElCR0NDSklUX0FCSV8y NTsKZGlmZiAtLWdpdCBhL2djYy90ZXN0c3VpdGUvaml0LmRnL2FsbC1ub24tZmFpbGluZy10 ZXN0cy5oIGIvZ2NjL3Rlc3RzdWl0ZS9qaXQuZGcvYWxsLW5vbi1mYWlsaW5nLXRlc3RzLmgK aW5kZXggZTc2MjU2M2Y5YmQuLmI4NjkzYmQ1YjljIDEwMDY0NAotLS0gYS9nY2MvdGVzdHN1 aXRlL2ppdC5kZy9hbGwtbm9uLWZhaWxpbmctdGVzdHMuaAorKysgYi9nY2MvdGVzdHN1aXRl L2ppdC5kZy9hbGwtbm9uLWZhaWxpbmctdGVzdHMuaApAQCAtMTEyLDYgKzExMiwzNiBAQAog I3VuZGVmIGNyZWF0ZV9jb2RlCiAjdW5kZWYgdmVyaWZ5X2NvZGUKIAorLyogdGVzdC1jb21w bGV4LWJ1aWx0aW5zLmMgKi8KKyNkZWZpbmUgY3JlYXRlX2NvZGUgY3JlYXRlX2NvZGVfY29t cGxleF9idWlsdGlucworI2RlZmluZSB2ZXJpZnlfY29kZSB2ZXJpZnlfY29kZV9jb21wbGV4 X2J1aWx0aW5zCisjaW5jbHVkZSAidGVzdC1jb21wbGV4LWJ1aWx0aW5zLmMiCisjdW5kZWYg Y3JlYXRlX2NvZGUKKyN1bmRlZiB2ZXJpZnlfY29kZQorCisvKiB0ZXN0LWNvbXBsZXgtbGl0 ZXJhbHMuYyAqLworI2RlZmluZSBjcmVhdGVfY29kZSBjcmVhdGVfY29kZV9jb21wbGV4X2xp dGVyYWxzCisjZGVmaW5lIHZlcmlmeV9jb2RlIHZlcmlmeV9jb2RlX2NvbXBsZXhfbGl0ZXJh bHMKKyNpbmNsdWRlICJ0ZXN0LWNvbXBsZXgtbGl0ZXJhbHMuYyIKKyN1bmRlZiBjcmVhdGVf Y29kZQorI3VuZGVmIHZlcmlmeV9jb2RlCisKKy8qIHRlc3QtY29tcGxleC1taXNjLmMgKi8K KyNkZWZpbmUgY3JlYXRlX2NvZGUgY3JlYXRlX2NvZGVfY29tcGxleF9taXNjCisjZGVmaW5l IHZlcmlmeV9jb2RlIHZlcmlmeV9jb2RlX2NvbXBsZXhfbWlzYworI2luY2x1ZGUgInRlc3Qt Y29tcGxleC1taXNjLmMiCisjdW5kZWYgY3JlYXRlX2NvZGUKKyN1bmRlZiB2ZXJpZnlfY29k ZQorCisvKiB0ZXN0LWNvbXBsZXgtb3BlcmF0b3JzLmMgKi8KKyNkZWZpbmUgY3JlYXRlX2Nv ZGUgY3JlYXRlX2NvZGVfY29tcGxleF9vcGVyYXRvcnMKKyNkZWZpbmUgdmVyaWZ5X2NvZGUg dmVyaWZ5X2NvZGVfY29tcGxleF9vcGVyYXRvcnMKKyNpbmNsdWRlICJ0ZXN0LWNvbXBsZXgt b3BlcmF0b3JzLmMiCisjdW5kZWYgY3JlYXRlX2NvZGUKKyN1bmRlZiB2ZXJpZnlfY29kZQor CisvKiB0ZXN0LWNvbXBsZXgtdHlwZXMuYzogUXVpdGUgbG9uZywgZG9uJ3QgaW5jbHVkZSBo ZXJlICovCisKIC8qIHRlc3QtY29tcG91bmQtYXNzaWdubWVudC5jICovCiAjZGVmaW5lIGNy ZWF0ZV9jb2RlIGNyZWF0ZV9jb2RlX2NvbXBvdW5kX2Fzc2lnbm1lbnQKICNkZWZpbmUgdmVy aWZ5X2NvZGUgdmVyaWZ5X2NvZGVfY29tcG91bmRfYXNzaWdubWVudApkaWZmIC0tZ2l0IGEv Z2NjL3Rlc3RzdWl0ZS9qaXQuZGcvdGVzdC1jb21wbGV4LWJ1aWx0aW5zLmMgYi9nY2MvdGVz dHN1aXRlL2ppdC5kZy90ZXN0LWNvbXBsZXgtYnVpbHRpbnMuYwpuZXcgZmlsZSBtb2RlIDEw MDY0NAppbmRleCAwMDAwMDAwMDAwMC4uMWU3ZGVkZmQ0YzUKLS0tIC9kZXYvbnVsbAorKysg Yi9nY2MvdGVzdHN1aXRlL2ppdC5kZy90ZXN0LWNvbXBsZXgtYnVpbHRpbnMuYwpAQCAtMCww ICsxLDIxMyBAQAorLyoKKyAgVGhpcyB0ZXN0IGp1c3QgY2hlY2tzIHRoYXQgdGhlIGJ1aWx0 aW5zIGNpbWFnLCBjcmVhbCBhbmQKKyAgY29uaiBhcmUgdXNhYmxlLgorCisgIEFsc28sIHRo ZXkgc2hvdWxkIGJlIGlubGluZWQsIHdoaWNoIGNhbiBiZSBjaGVja2VkIGJ5CisgIGRpc2Fz c2VtYmxpbmcgdGhlIG9iamVjdCBmaWxlIG1hbnVhbGx5LgorKi8KKworI2luY2x1ZGUgPG1h dGguaD4KKyNpbmNsdWRlIDxjb21wbGV4Lmg+CisKKyNpbmNsdWRlICJsaWJnY2NqaXQuaCIK KworI2luY2x1ZGUgImhhcm5lc3MuaCIKKworc3RhdGljIHZvaWQKK21ha2VfY29kZV91bm9w X2J1aWx0aW5zIChnY2Nfaml0X2NvbnRleHQgKmN0eHQsCisJCSBjb25zdCBjaGFyICpmbl9u YW1lLAorCQkgaW50IHR5cGVfcmV0dXJuLAorCQkgaW50IHR5cGVfYXJnLAorCQkgZ2NjX2pp dF9mdW5jdGlvbiAqZm4pCit7CisgIGdjY19qaXRfYmxvY2sgKmJsb2NrOworCisgIGdjY19q aXRfdHlwZSAqdHIgPSBnY2Nfaml0X2NvbnRleHRfZ2V0X3R5cGUgKGN0eHQsIHR5cGVfcmV0 dXJuKTsKKyAgZ2NjX2ppdF90eXBlICp0YSA9IGdjY19qaXRfY29udGV4dF9nZXRfdHlwZSAo Y3R4dCwgdHlwZV9hcmcpOworCisgIGdjY19qaXRfcGFyYW0gKnBhcmFtMSA9IGdjY19qaXRf Y29udGV4dF9uZXdfcGFyYW0gKGN0eHQsIDAsIHRhLCAiZjEiKTsKKworICBnY2Nfaml0X3Bh cmFtICpwYXJhbXNbXSA9IHtwYXJhbTF9OworCisgIGdjY19qaXRfZnVuY3Rpb24gKmZvbyA9 IGdjY19qaXRfY29udGV4dF9uZXdfZnVuY3Rpb24gKGN0eHQsIDAsCisgICAgR0NDX0pJVF9G VU5DVElPTl9FWFBPUlRFRCwKKyAgICB0ciwgZm5fbmFtZSwgMSwgcGFyYW1zLCAwKTsKKwor ICBibG9jayA9IGdjY19qaXRfZnVuY3Rpb25fbmV3X2Jsb2NrIChmb28sICJzdGFydCIpOwor CisgIGdjY19qaXRfbHZhbHVlICpmMSA9IGdjY19qaXRfcGFyYW1fYXNfbHZhbHVlICgKKyAg ICBnY2Nfaml0X2Z1bmN0aW9uX2dldF9wYXJhbSAoZm9vLCAwKSk7CisKKyAgZ2NjX2ppdF9y dmFsdWUgKmFyZ3NbXSA9IHsKKyAgICBnY2Nfaml0X2x2YWx1ZV9hc19ydmFsdWUgKGYxKQor ICB9OworCisgIC8qIHJldHVybiBmbihmMSk7ICovCisgIGdjY19qaXRfcnZhbHVlICpyID0g Z2NjX2ppdF9jb250ZXh0X25ld19jYWxsCisgICAgKGN0eHQsIDAsIGZuLAorICAgICAxLAor ICAgICBhcmdzKTsKKworICBnY2Nfaml0X2Jsb2NrX2VuZF93aXRoX3JldHVybiAoYmxvY2ss IDAsIHIpOworfQorCitzdGF0aWMgdm9pZAorbWFrZV9jb2RlX2Jpbm9wX2J1aWx0aW5zIChn Y2Nfaml0X2NvbnRleHQgKmN0eHQsCisJCSBjb25zdCBjaGFyICpmbl9uYW1lLAorCQkgaW50 IHR5cGUxLAorCQkgaW50IHR5cGUyLAorCQkgZ2NjX2ppdF9mdW5jdGlvbiAqYnVpbHRpbikK K3sKKyAgZ2NjX2ppdF9ibG9jayAqYmxvY2s7CisKKyAgZ2NjX2ppdF90eXBlICp0MSA9IGdj Y19qaXRfY29udGV4dF9nZXRfdHlwZSAoY3R4dCwgdHlwZTEpOworICBnY2Nfaml0X3R5cGUg KnQyID0gZ2NjX2ppdF9jb250ZXh0X2dldF90eXBlIChjdHh0LCB0eXBlMik7CisKKyAgZ2Nj X2ppdF9wYXJhbSAqcGFyYW0xID0gZ2NjX2ppdF9jb250ZXh0X25ld19wYXJhbSAoY3R4dCwg MCwgdDEsICJmMSIpOworICBnY2Nfaml0X3BhcmFtICpwYXJhbTIgPSBnY2Nfaml0X2NvbnRl eHRfbmV3X3BhcmFtIChjdHh0LCAwLCB0MiwgImYyIik7CisKKyAgZ2NjX2ppdF9wYXJhbSAq cGFyYW1zW10gPSB7cGFyYW0xLCBwYXJhbTJ9OworCisgIGdjY19qaXRfZnVuY3Rpb24gKmZv byA9IGdjY19qaXRfY29udGV4dF9uZXdfZnVuY3Rpb24gKGN0eHQsIDAsCisgICAgR0NDX0pJ VF9GVU5DVElPTl9FWFBPUlRFRCwKKyAgICB0MSwgZm5fbmFtZSwgMiwgcGFyYW1zLCAwKTsK KworICBibG9jayA9IGdjY19qaXRfZnVuY3Rpb25fbmV3X2Jsb2NrIChmb28sICJzdGFydCIp OworCisgIGdjY19qaXRfbHZhbHVlICpmMSA9IGdjY19qaXRfcGFyYW1fYXNfbHZhbHVlICgK KyAgICBnY2Nfaml0X2Z1bmN0aW9uX2dldF9wYXJhbShmb28sIDApKTsKKyAgZ2NjX2ppdF9s dmFsdWUgKmYyID0gZ2NjX2ppdF9wYXJhbV9hc19sdmFsdWUgKAorICAgIGdjY19qaXRfZnVu Y3Rpb25fZ2V0X3BhcmFtKGZvbywgMSkpOworCisgIGdjY19qaXRfcnZhbHVlICphcmdzW10g PSB7CisgICAgZ2NjX2ppdF9sdmFsdWVfYXNfcnZhbHVlIChmMSksCisgICAgZ2NjX2ppdF9s dmFsdWVfYXNfcnZhbHVlIChmMikKKyAgfTsKKworICAvKiByZXR1cm4gYnVpbHRpbihmMSxm Mik7ICovCisgIGdjY19qaXRfcnZhbHVlICpyID0gZ2NjX2ppdF9jb250ZXh0X25ld19jYWxs CisgICAgKGN0eHQsIDAsIGJ1aWx0aW4sCisgICAgIDIsCisgICAgIGFyZ3MpOworCisgIGdj Y19qaXRfYmxvY2tfZW5kX3dpdGhfcmV0dXJuIChibG9jaywgMCwgcik7Cit9CisKK3ZvaWQK K2NyZWF0ZV9jb2RlIChnY2Nfaml0X2NvbnRleHQgKmN0eHQsIHZvaWQgKnVzZXJfZGF0YSkK K3sKKyAgKHZvaWQpIHVzZXJfZGF0YTsKKworICBnY2Nfaml0X2NvbnRleHRfc2V0X2Jvb2xf ZW5hYmxlX2NvbXBsZXhfdHlwZXMgKGN0eHQsIDEpOworCisgIGdjY19qaXRfZnVuY3Rpb24g KmZuX2Nwb3cgPSBnY2Nfaml0X2NvbnRleHRfZ2V0X2J1aWx0aW5fZnVuY3Rpb24KKyAgICAo Y3R4dCwgIl9fYnVpbHRpbl9jcG93Iik7CisKKyAgbWFrZV9jb2RlX2Jpbm9wX2J1aWx0aW5z IChjdHh0LCAiY3Bvd19idWlsdGluIiwKKwkJICAgR0NDX0pJVF9UWVBFX0NPTVBMRVhfRE9V QkxFLAorCQkgICBHQ0NfSklUX1RZUEVfQ09NUExFWF9ET1VCTEUsCisJCSAgIGZuX2Nwb3cp OworCisgIGdjY19qaXRfZnVuY3Rpb24gKmZuX2NvbmogPSBnY2Nfaml0X2NvbnRleHRfZ2V0 X2J1aWx0aW5fZnVuY3Rpb24KKyAgICAoY3R4dCwgIl9fYnVpbHRpbl9jb25qIik7CisKKyAg LyogSW4gYSBnb29kIHdvcmxkIGNvbmogc2hvdWxkIGJlIGlubGluZWQgKi8KKyAgbWFrZV9j b2RlX3Vub3BfYnVpbHRpbnMgKGN0eHQsICJjb25qX2lubGluZWQiLAorCQkgIEdDQ19KSVRf VFlQRV9DT01QTEVYX0RPVUJMRSwKKwkJICBHQ0NfSklUX1RZUEVfQ09NUExFWF9ET1VCTEUs CisJCSAgZm5fY29uaik7CisKKyAgZ2NjX2ppdF9mdW5jdGlvbiAqZm5fY3JlYWwgPSBnY2Nf aml0X2NvbnRleHRfZ2V0X2J1aWx0aW5fZnVuY3Rpb24KKyAgICAoY3R4dCwgIl9fYnVpbHRp bl9jcmVhbCIpOworICBnY2Nfaml0X2Z1bmN0aW9uICpmbl9jcmVhbGYgPSBnY2Nfaml0X2Nv bnRleHRfZ2V0X2J1aWx0aW5fZnVuY3Rpb24KKyAgICAoY3R4dCwgIl9fYnVpbHRpbl9jcmVh bGYiKTsKKyAgZ2NjX2ppdF9mdW5jdGlvbiAqZm5fY3JlYWxsID0gZ2NjX2ppdF9jb250ZXh0 X2dldF9idWlsdGluX2Z1bmN0aW9uCisgICAgKGN0eHQsICJfX2J1aWx0aW5fY3JlYWxsIik7 CisgIGdjY19qaXRfZnVuY3Rpb24gKmZuX2NpbWFnID0gZ2NjX2ppdF9jb250ZXh0X2dldF9i dWlsdGluX2Z1bmN0aW9uCisgICAgKGN0eHQsICJfX2J1aWx0aW5fY2ltYWciKTsKKworICAv KiBUaGVzZSBzaG91bGQgYmUgaW5saW5lZCB0b28gKi8KKyAgbWFrZV9jb2RlX3Vub3BfYnVp bHRpbnMgKGN0eHQsICJjcmVhbF9pbmxpbmVkIiwKKwkJICBHQ0NfSklUX1RZUEVfRE9VQkxF LAorCQkgIEdDQ19KSVRfVFlQRV9DT01QTEVYX0RPVUJMRSwKKwkJICBmbl9jcmVhbCk7Cisg IG1ha2VfY29kZV91bm9wX2J1aWx0aW5zIChjdHh0LCAiY2ltYWdfaW5saW5lZCIsCisJCSAg R0NDX0pJVF9UWVBFX0RPVUJMRSwKKwkJICBHQ0NfSklUX1RZUEVfQ09NUExFWF9ET1VCTEUs CisJCSAgZm5fY2ltYWcpOworCisgIG1ha2VfY29kZV91bm9wX2J1aWx0aW5zIChjdHh0LCAi Y3JlYWxmX2lubGluZWQiLAorCQkgIEdDQ19KSVRfVFlQRV9GTE9BVCwKKwkJICBHQ0NfSklU X1RZUEVfQ09NUExFWF9GTE9BVCwKKwkJICBmbl9jcmVhbGYpOworICBtYWtlX2NvZGVfdW5v cF9idWlsdGlucyAoY3R4dCwgImNyZWFsbF9pbmxpbmVkIiwKKwkJICBHQ0NfSklUX1RZUEVf TE9OR19ET1VCTEUsCisJCSAgR0NDX0pJVF9UWVBFX0NPTVBMRVhfTE9OR19ET1VCTEUsCisJ CSAgZm5fY3JlYWxsKTsKKworICAvKiBVc2UgdG8gaW5zcGVjdCBjb2RlIG1hbnVhbGx5IGFu ZCBhc3N1cmUgY29uaiwgY3JlYWwsIGNpbWFnCisgICAgIGFyZSBpbmxpbmVkLiBBdCB0aGUg dGltZSBvZiB3cml0aW5nIHRoZXkgYXJlIG9uIG15IHg2NCBtYWNoaW5lICovCisgICNpZiAw CisgIGdjY19qaXRfY29udGV4dF9jb21waWxlX3RvX2ZpbGUgKGN0eHQsIEdDQ19KSVRfT1VU UFVUX0tJTkRfT0JKRUNUX0ZJTEUsCisJCQkJICAgInRlc3QtY29tcGxleC1idWlsdGlucy5v Iik7CisgICNlbmRpZgorfQorCit0eXBlZGVmIF9Db21wbGV4IGRvdWJsZSAoKmNkX2NkY2Qp KF9Db21wbGV4IGRvdWJsZSwgX0NvbXBsZXggZG91YmxlKTsKK3R5cGVkZWYgX0NvbXBsZXgg ZG91YmxlICgqY2RfY2QpKF9Db21wbGV4IGRvdWJsZSk7Cit0eXBlZGVmIGRvdWJsZSAoKmRf Y2QpKF9Db21wbGV4IGRvdWJsZSk7Cit0eXBlZGVmIGZsb2F0ICgqZl9jZikoX0NvbXBsZXgg ZmxvYXQpOwordHlwZWRlZiBsb25nIGRvdWJsZSAoKmxkX2NsZCkoX0NvbXBsZXggbG9uZyBk b3VibGUpOworCit2b2lkCit2ZXJpZnlfY29kZSAoZ2NjX2ppdF9jb250ZXh0ICpjdHh0LCBn Y2Nfaml0X3Jlc3VsdCAqcmVzdWx0KQoreworICBDSEVDS19OT05fTlVMTCAocmVzdWx0KTsK KworICB7LyogVGVzdCBiaW5hcnkgYnVpbHRpbnMgKi8KKyAgICB7CisgICAgICAgY2RfY2Rj ZCBmbiA9CisJZ2NjX2ppdF9yZXN1bHRfZ2V0X2NvZGUgKHJlc3VsdCwgImNwb3dfYnVpbHRp biIpOworICAgICAgIENIRUNLX05PTl9OVUxMIChmbik7CisKKyAgICAgICBDSEVDS19WQUxV RSAoZm4gKDIsIDIpLCA0Lik7CisgICAgICAgX0NvbXBsZXggZG91YmxlIGFucyA9IGZuICgt MS4sIDAuNSk7CisgICAgICAgX0NvbXBsZXggZG91YmxlIGtleSA9IF9fYnVpbHRpbl9jcG93 ICgtMS4sIDAuNSk7CisKKyAgICAgICBDSEVDS19ET1VCTEVfVkFMVUUgKGNyZWFsIChhbnMp LCBjcmVhbCAoa2V5KSk7CisgICAgICAgQ0hFQ0tfRE9VQkxFX1ZBTFVFIChjaW1hZyAoYW5z KSwgY2ltYWcgKGtleSkpOworICAgIH0KKyAgfQorICB7LyogVGVzdCB1bmFyeSBidWlsdGlu cyAqLworICAgIHsgLyogY29uaiAqLworICAgICAgY2RfY2QgZm4gPSBnY2Nfaml0X3Jlc3Vs dF9nZXRfY29kZSAocmVzdWx0LCAiY29ual9pbmxpbmVkIik7CisgICAgICBDSEVDS19OT05f TlVMTCAoZm4pOworCisgICAgICBDSEVDS19WQUxVRSggZm4gKDEuIC0gMS5qKSwgMS4gKyAx LmopOworICAgIH0KKyAgICB7IC8qIGNyZWFsICovCisgICAgICBkX2NkIGZuID0gZ2NjX2pp dF9yZXN1bHRfZ2V0X2NvZGUgKHJlc3VsdCwgImNyZWFsX2lubGluZWQiKTsKKyAgICAgIENI RUNLX05PTl9OVUxMIChmbik7CisKKyAgICAgIENIRUNLX1ZBTFVFIChmbiAoMS4gLSAxLmop LCAxLik7CisgICAgfQorICAgIHsgLyogY2ltYWcgKi8KKyAgICAgIGRfY2QgZm4gPSBnY2Nf aml0X3Jlc3VsdF9nZXRfY29kZSAocmVzdWx0LCAiY2ltYWdfaW5saW5lZCIpOworICAgICAg Q0hFQ0tfTk9OX05VTEwgKGZuKTsKKworICAgICAgQ0hFQ0tfVkFMVUUgKGZuICgxLiAtIDEu aiksIC0xLik7CisgICAgfQorICAgIHsgLyogY3JlYWxmICovCisgICAgICBmX2NmIGZuID0g Z2NjX2ppdF9yZXN1bHRfZ2V0X2NvZGUgKHJlc3VsdCwgImNyZWFsZl9pbmxpbmVkIik7Cisg ICAgICBDSEVDS19OT05fTlVMTCAoZm4pOworCisgICAgICBDSEVDS19WQUxVRSAoZm4gKDEu ZiAtIDEuZmopLCAxLmYpOworICAgIH0KKyAgICB7IC8qIGNyZWFsbCAqLworICAgICAgbGRf Y2xkIGZuID0gZ2NjX2ppdF9yZXN1bHRfZ2V0X2NvZGUgKHJlc3VsdCwgImNyZWFsbF9pbmxp bmVkIik7CisgICAgICBDSEVDS19OT05fTlVMTCAoZm4pOworCisgICAgICBDSEVDS19WQUxV RSAoZm4gKDEuTCAtIDEuTGopLCAxLkwpOworICAgIH0KKyAgfQorfQpkaWZmIC0tZ2l0IGEv Z2NjL3Rlc3RzdWl0ZS9qaXQuZGcvdGVzdC1jb21wbGV4LWxpdGVyYWxzLmMgYi9nY2MvdGVz dHN1aXRlL2ppdC5kZy90ZXN0LWNvbXBsZXgtbGl0ZXJhbHMuYwpuZXcgZmlsZSBtb2RlIDEw MDY0NAppbmRleCAwMDAwMDAwMDAwMC4uNDdhMDYyMTcwM2MKLS0tIC9kZXYvbnVsbAorKysg Yi9nY2MvdGVzdHN1aXRlL2ppdC5kZy90ZXN0LWNvbXBsZXgtbGl0ZXJhbHMuYwpAQCAtMCww ICsxLDE0NiBAQAorLyoKKyAgVGVzdCB0aGUgbmV3ICdnY2Nfaml0X2NvbnRleHRfbmV3X3J2 YWx1ZV9mcm9tX2NvbXBsZXhfZG91YmxlKCknCisgIGFzd2VsbCBhcyB0ZXN0IHRoYXQgdGhl IG9sZCAnX2Zyb21faW50IC4uLiBfZnJvbV9kb3VibGUiCisgIGNhbiBwcm9kdWNlIGNvbXBs ZXggdmFsdWVzLgorKi8KKworI2luY2x1ZGUgPG1hdGguaD4KKyNpbmNsdWRlIDxjb21wbGV4 Lmg+CisKKyNpbmNsdWRlICJsaWJnY2NqaXQuaCIKKyNpbmNsdWRlICJoYXJuZXNzLmgiCisK K3N0YXRpYyB2b2lkCittYWtlX2NvZGUgKGdjY19qaXRfY29udGV4dCAqY3R4dCwKKwkgICBj b25zdCBjaGFyICpmbl9uYW1lLAorCSAgIGludCB0eXBlLAorCSAgIGRvdWJsZSByZWFsLCBk b3VibGUgaW1hZywKKwkgICBpbnQgbGl0X3R5cGUpCit7CisgIGdjY19qaXRfdHlwZSAqdHQg PSBnY2Nfaml0X2NvbnRleHRfZ2V0X3R5cGUgKGN0eHQsIHR5cGUpOworCisgIGdjY19qaXRf ZnVuY3Rpb24gKmZvbyA9IGdjY19qaXRfY29udGV4dF9uZXdfZnVuY3Rpb24gKGN0eHQsIDAs CisgICAgR0NDX0pJVF9GVU5DVElPTl9FWFBPUlRFRCwKKyAgICB0dCwgZm5fbmFtZSwgMCwg MCwgMCk7CisKKyAgZ2NjX2ppdF9ibG9jayAqYmxvY2sgPSBnY2Nfaml0X2Z1bmN0aW9uX25l d19ibG9jayAoZm9vLCAic3RhcnQiKTsKKworICAvKiBsb2NhbF90eXBlIGYxID0gbG9jYWxf dmFsOyAqLworICBnY2Nfaml0X2x2YWx1ZSAqZjEgPSBnY2Nfaml0X2Z1bmN0aW9uX25ld19s b2NhbCAoZm9vLCAwLCB0dCwgImYxIik7CisKKyAgZ2NjX2ppdF9ydmFsdWUgKnIxOworCisg IGlmIChsaXRfdHlwZSA9PSAnYycpCisgICAgcjEgPSBnY2Nfaml0X2NvbnRleHRfbmV3X3J2 YWx1ZV9mcm9tX2NvbXBsZXhfZG91YmxlIChjdHh0LCB0dCwKKwkJCQkJCQkgcmVhbCwgaW1h Zyk7CisgIGVsc2UgaWYgKGxpdF90eXBlID09ICdkJykKKyAgICByMSA9IGdjY19qaXRfY29u dGV4dF9uZXdfcnZhbHVlX2Zyb21fZG91YmxlIChjdHh0LCB0dCwgcmVhbCk7CisgIGVsc2Ug aWYgKGxpdF90eXBlID09ICdsJykKKyAgICByMSA9IGdjY19qaXRfY29udGV4dF9uZXdfcnZh bHVlX2Zyb21fbG9uZyAoY3R4dCwgdHQsIHJlYWwpOworICBlbHNlIGlmIChsaXRfdHlwZSA9 PSAnaScpCisgICAgcjEgPSBnY2Nfaml0X2NvbnRleHRfbmV3X3J2YWx1ZV9mcm9tX2ludCAo Y3R4dCwgdHQsIHJlYWwpOworCisgIGdjY19qaXRfYmxvY2tfYWRkX2Fzc2lnbm1lbnQgKGJs b2NrLCAwLCBmMSwgcjEpOworCisgIGdjY19qaXRfYmxvY2tfZW5kX3dpdGhfcmV0dXJuIChi bG9jaywgMCwgZ2NjX2ppdF9sdmFsdWVfYXNfcnZhbHVlIChmMSkpOworfQorCit2b2lkCitj cmVhdGVfY29kZSAoZ2NjX2ppdF9jb250ZXh0ICpjdHh0LCB2b2lkICp1c2VyX2RhdGEpCit7 CisgICh2b2lkKSB1c2VyX2RhdGE7CisKKyAgZ2NjX2ppdF9jb250ZXh0X3NldF9ib29sX2Vu YWJsZV9jb21wbGV4X3R5cGVzIChjdHh0LCAxKTsKKworICBtYWtlX2NvZGUgKGN0eHQsICJj b21wbGV4X2Zsb2F0X2NsaXRfMWMxXzJjMmoiLAorCSAgICAgR0NDX0pJVF9UWVBFX0NPTVBM RVhfRkxPQVQsCisJICAgICAxLjEsIDIuMiwgJ2MnKTsKKyAgbWFrZV9jb2RlIChjdHh0LCAi Y29tcGxleF9kb3VibGVfY2xpdF8xYzFfMmMyaiIsCisJICAgICBHQ0NfSklUX1RZUEVfQ09N UExFWF9ET1VCTEUsCisJICAgICAxLjEsIDIuMiwgJ2MnKTsKKyAgbWFrZV9jb2RlIChjdHh0 LCAiY29tcGxleF9sb25nX2RvdWJsZV9jbGl0XzFjMV8yYzJqIiwKKwkgICAgIEdDQ19KSVRf VFlQRV9DT01QTEVYX0xPTkdfRE9VQkxFLAorCSAgICAgMS4xLCAyLjIsICdjJyk7CisgIG1h a2VfY29kZSAoY3R4dCwgImZsb2F0X2NsaXRfMWMxIiwKKwkgICAgIEdDQ19KSVRfVFlQRV9G TE9BVCwKKwkgICAgIDEuMSwgMi4yLCAnYycpOworICBtYWtlX2NvZGUgKGN0eHQsICJkb3Vi bGVfY2xpdF8xYzEiLAorCSAgICAgR0NDX0pJVF9UWVBFX0RPVUJMRSwKKwkgICAgIDEuMSwg Mi4yLCAnYycpOworICBtYWtlX2NvZGUgKGN0eHQsICJsb25nX2RvdWJsZV9jbGl0XzFjMSIs CisJICAgICBHQ0NfSklUX1RZUEVfTE9OR19ET1VCTEUsCisJICAgICAxLjEsIDIuMiwgJ2Mn KTsKKworICAvKiBNYWtlIGNvbXBsZXggZnJvbSAiZnJvbV9kb3VibGUiLCAiZnJvbV9sb25n IiwiZnJvbV9pbnQiICovCisgIG1ha2VfY29kZSAoY3R4dCwgImNvbXBsZXhfZmxvYXRfZGxp dF8xYzEiLAorCSAgICAgR0NDX0pJVF9UWVBFX0NPTVBMRVhfRkxPQVQsCisJICAgICAxLjEs IDAsICdkJyk7CisgIG1ha2VfY29kZSAoY3R4dCwgImNvbXBsZXhfZG91YmxlX2RsaXRfMWMx IiwKKwkgICAgIEdDQ19KSVRfVFlQRV9DT01QTEVYX0RPVUJMRSwKKwkgICAgIDEuMSwgMCwg J2QnKTsKKyAgbWFrZV9jb2RlIChjdHh0LCAiY29tcGxleF9sb25nX2RvdWJsZV9kbGl0XzFj MSIsCisJICAgICBHQ0NfSklUX1RZUEVfQ09NUExFWF9MT05HX0RPVUJMRSwKKwkgICAgIDEu MSwgMCwgJ2QnKTsKKyAgbWFrZV9jb2RlIChjdHh0LCAiY29tcGxleF9kb3VibGVfbGxpdF8y IiwKKwkgICAgIEdDQ19KSVRfVFlQRV9DT01QTEVYX0RPVUJMRSwKKwkgICAgIDIsIDAsICds Jyk7CisgIG1ha2VfY29kZSAoY3R4dCwgImNvbXBsZXhfZG91YmxlX2lsaXRfMyIsCisJICAg ICBHQ0NfSklUX1RZUEVfQ09NUExFWF9ET1VCTEUsCisJICAgICAzLCAwLCAnaScpOworfQor Cit2b2lkCit2ZXJpZnlfY29kZSAoZ2NjX2ppdF9jb250ZXh0ICpjdHh0LCBnY2Nfaml0X3Jl c3VsdCAqcmVzdWx0KQoreworICBDSEVDS19OT05fTlVMTCAocmVzdWx0KTsKKworICB7Lyog VGVzdCBsaXRlcmFscyAqLworICAgIHsKKyAgICAgIF9Db21wbGV4IGZsb2F0ICgqZikoKSA9 IGdjY19qaXRfcmVzdWx0X2dldF9jb2RlIChyZXN1bHQsICJjb21wbGV4X2Zsb2F0X2NsaXRf MWMxXzJjMmoiKTsKKworICAgICAgQ0hFQ0tfVkFMVUUoZiAoKSwgMS4xZiArIDIuMmZqKTsK KyAgICB9CisgICAgeworICAgICAgX0NvbXBsZXggZG91YmxlICgqZikoKSA9IGdjY19qaXRf cmVzdWx0X2dldF9jb2RlIChyZXN1bHQsICJjb21wbGV4X2RvdWJsZV9jbGl0XzFjMV8yYzJq Iik7CisgICAgICBDSEVDS19WQUxVRShmICgpLCAxLjEgKyAyLjJqKTsKKyAgICB9CisgICAg eworICAgICAgX0NvbXBsZXggbG9uZyBkb3VibGUgKCpmKSgpID0gZ2NjX2ppdF9yZXN1bHRf Z2V0X2NvZGUgKHJlc3VsdCwgImNvbXBsZXhfbG9uZ19kb3VibGVfY2xpdF8xYzFfMmMyaiIp OworICAgICAgLyogTm90ZTogVGhlIGxpdGVyYWwgaW4gdGhlIGZ1bmN0aW9uIGlzIGNvbXBs ZXggZG91YmxlICovCisgICAgICBDSEVDS19WQUxVRShmICgpLDEuMSArIDIuMmopOworICAg IH0KKyAgICB7CisgICAgICBmbG9hdCAoKmYpKCkgPSBnY2Nfaml0X3Jlc3VsdF9nZXRfY29k ZSAocmVzdWx0LCAiZmxvYXRfY2xpdF8xYzEiKTsKKyAgICAgIENIRUNLX1ZBTFVFKGYgKCks IDEuMWYpOworICAgIH0KKyAgICB7CisgICAgICBkb3VibGUgKCpmKSgpID0gZ2NjX2ppdF9y ZXN1bHRfZ2V0X2NvZGUgKHJlc3VsdCwgImRvdWJsZV9jbGl0XzFjMSIpOworICAgICAgQ0hF Q0tfVkFMVUUoZiAoKSwgMS4xKTsKKyAgICB9CisgICAgeworICAgICAgbG9uZyBkb3VibGUg KCpmKSgpID0gZ2NjX2ppdF9yZXN1bHRfZ2V0X2NvZGUgKHJlc3VsdCwgImxvbmdfZG91Ymxl X2NsaXRfMWMxIik7CisgICAgICBDSEVDS19WQUxVRShmICgpLCAxLjEpOworICAgIH0KKyAg ICB7CisgICAgICBfQ29tcGxleCBmbG9hdCAoKmYpKCkgPSBnY2Nfaml0X3Jlc3VsdF9nZXRf Y29kZSAocmVzdWx0LCAiY29tcGxleF9mbG9hdF9kbGl0XzFjMSIpOworICAgICAgQ0hFQ0tf VkFMVUUoZiAoKSwgMS4xZik7CisgICAgfQorICAgIHsKKyAgICAgIF9Db21wbGV4IGRvdWJs ZSAoKmYpKCkgPSBnY2Nfaml0X3Jlc3VsdF9nZXRfY29kZSAocmVzdWx0LCAiY29tcGxleF9k b3VibGVfZGxpdF8xYzEiKTsKKyAgICAgIENIRUNLX1ZBTFVFKGYgKCksIDEuMSk7CisgICAg fQorICAgIHsKKyAgICAgIF9Db21wbGV4IGxvbmcgZG91YmxlICgqZikoKSA9IGdjY19qaXRf cmVzdWx0X2dldF9jb2RlIChyZXN1bHQsICJjb21wbGV4X2xvbmdfZG91YmxlX2RsaXRfMWMx Iik7CisgICAgICAvKiBOb3RlOiBUaGUgbGl0ZXJhbCBpbiB0aGUgZnVuY3Rpb24gaXMgY29t cGxleCBkb3VibGUgKi8KKyAgICAgIENIRUNLX1ZBTFVFKGYgKCksIDEuMSk7CisgICAgfQor ICAgIHsKKyAgICAgIF9Db21wbGV4IGRvdWJsZSAoKmYpKCkgPSBnY2Nfaml0X3Jlc3VsdF9n ZXRfY29kZSAocmVzdWx0LCAiY29tcGxleF9kb3VibGVfbGxpdF8yIik7CisgICAgICBDSEVD S19WQUxVRShmICgpLCAyKTsKKyAgICB9CisgICAgeworICAgICAgX0NvbXBsZXggZG91Ymxl ICgqZikoKSA9IGdjY19qaXRfcmVzdWx0X2dldF9jb2RlIChyZXN1bHQsICJjb21wbGV4X2Rv dWJsZV9pbGl0XzMiKTsKKyAgICAgIENIRUNLX1ZBTFVFKGYgKCksIDMpOworICAgIH0KKyAg fQorfQpkaWZmIC0tZ2l0IGEvZ2NjL3Rlc3RzdWl0ZS9qaXQuZGcvdGVzdC1jb21wbGV4LW1p c2MuYyBiL2djYy90ZXN0c3VpdGUvaml0LmRnL3Rlc3QtY29tcGxleC1taXNjLmMKbmV3IGZp bGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAuLjc0OGVjYjAxMDMxCi0tLSAvZGV2 L251bGwKKysrIGIvZ2NjL3Rlc3RzdWl0ZS9qaXQuZGcvdGVzdC1jb21wbGV4LW1pc2MuYwpA QCAtMCwwICsxLDI0MSBAQAorLyoKKyAgVGhpcyB0ZXN0IGNoZWNrcyB3ZXRoZXIgY29tcGxl eCB0eXBlcyB3b3JrIHdpdGggc3RydWN0cywgdW5pb25zCisgIGFuZCBwb2ludGVycy4KKwor ICBBc3dlbGwgYXMgY29uc3QgYW5kIHZvbGF0aWxlLCBidXQgb25seSBpbiB0aGUgc2Vuc2Ug dGhhdCBoYXZpbmcKKyAgdGhvc2UgcXVhbGlmaWVycyBkb2Vzbid0IGNyYXNoIGdjYy4KKwor Ki8KKworI2luY2x1ZGUgPG1hdGguaD4KKyNpbmNsdWRlIDxjb21wbGV4Lmg+CisKKyNpbmNs dWRlICJsaWJnY2NqaXQuaCIKKworI2luY2x1ZGUgImhhcm5lc3MuaCIKKwordm9pZAorY3Jl YXRlX2NvZGUgKGdjY19qaXRfY29udGV4dCAqY3R4dCwgdm9pZCAqdXNlcl9kYXRhKQorewor ICAodm9pZCkgdXNlcl9kYXRhOworCisgIGdjY19qaXRfY29udGV4dF9zZXRfYm9vbF9lbmFi bGVfY29tcGxleF90eXBlcyAoY3R4dCwgMSk7CisKKyAgZ2NjX2ppdF90eXBlICp0eXBlX2lu dCA9CisgICAgZ2NjX2ppdF9jb250ZXh0X2dldF90eXBlIChjdHh0LCBHQ0NfSklUX1RZUEVf SU5UKTsKKyAgZ2NjX2ppdF90eXBlICp0eXBlX2NkID0KKyAgICBnY2Nfaml0X2NvbnRleHRf Z2V0X3R5cGUgKGN0eHQsIEdDQ19KSVRfVFlQRV9DT01QTEVYX0RPVUJMRSk7CisgIGdjY19q aXRfdHlwZSAqdHlwZV9mbG9hdCA9CisgICAgZ2NjX2ppdF9jb250ZXh0X2dldF90eXBlIChj dHh0LCBHQ0NfSklUX1RZUEVfRkxPQVQpOworCisgIGdjY19qaXRfbHZhbHVlICpjZF9nYmwg PSBnY2Nfaml0X2NvbnRleHRfbmV3X2dsb2JhbCAoCisgICAgY3R4dCwgMCwgR0NDX0pJVF9H TE9CQUxfRVhQT1JURUQsCisgICAgdHlwZV9jZCwKKyAgICAiYV9jb21wbGV4X2dsb2JhbF9k b3VibGVfMiIpOworCisgIC8qIFRoZXNlIGdsb2JhbHMgYXJlIG5vdCB1c2VkIGZvciBhbnl0 aGluZyAqLworICBnY2Nfaml0X2NvbnRleHRfbmV3X2dsb2JhbCAoCisgICAgY3R4dCwgMCwg R0NDX0pJVF9HTE9CQUxfRVhQT1JURUQsCisgICAgZ2NjX2ppdF90eXBlX2dldF92b2xhdGls ZSAodHlwZV9jZCksCisgICAgImFfdm9sYXRpbGVfY29tcGxleF9kb3VibGUiKTsKKyAgZ2Nj X2ppdF9jb250ZXh0X25ld19nbG9iYWwgKAorICAgIGN0eHQsIDAsIEdDQ19KSVRfR0xPQkFM X0VYUE9SVEVELAorICAgIGdjY19qaXRfdHlwZV9nZXRfY29uc3QgKHR5cGVfY2QpLAorICAg ICJhX2NvbnN0X2NvbXBsZXhfZG91YmxlIik7CisKKyAgZ2NjX2ppdF90eXBlICphcnJfdHlw ZSA9CisgICAgZ2NjX2ppdF9jb250ZXh0X25ld19hcnJheV90eXBlIChjdHh0LAorICAgICAg MCwgdHlwZV9jZCwgMTApOworICBnY2Nfaml0X2NvbnRleHRfbmV3X2dsb2JhbCAoCisgICAg Y3R4dCwgMCwgR0NDX0pJVF9HTE9CQUxfRVhQT1JURUQsCisgICAgYXJyX3R5cGUsCisgICAg ImFfY29uc3RfY29tcGxleF9kb3VibGVfYXJyYXkiKTsKKworICAvKiBWZXJpZnkgdGhhdCBm b2xkaW5nIGEgZ2xvYmFsIGluaXQgd29ya3MuICovCisgIHsgLyogX0NvbXBsZXggZG91Ymxl IGZvbyA9ICgxLiArIDUuaSkgKiAoKF9Db21wbGV4IGRvdWJsZSkzLmYgKyAoMy4gKyAyLmkp KSAqLworICAgIGdjY19qaXRfbHZhbHVlICpmb28gPSAgZ2NjX2ppdF9jb250ZXh0X25ld19n bG9iYWwgKAorICAgICAgY3R4dCwgTlVMTCwKKyAgICAgIEdDQ19KSVRfR0xPQkFMX0VYUE9S VEVELAorICAgICAgdHlwZV9jZCwKKyAgICAgICJhbm90aGVyX2NvbXBsZXhfZG91YmxlX2ds b2JhbCIpOworICAgIGdjY19qaXRfcnZhbHVlICpydmFsXzAgPSBnY2Nfaml0X2NvbnRleHRf bmV3X3J2YWx1ZV9mcm9tX2RvdWJsZSAoCisgICAgICBjdHh0LCB0eXBlX2Zsb2F0LCAzKTsK KyAgICBnY2Nfaml0X3J2YWx1ZSAqcnZhbF8xID0gZ2NjX2ppdF9jb250ZXh0X25ld19ydmFs dWVfZnJvbV9jb21wbGV4X2RvdWJsZSAoCisgICAgICBjdHh0LCB0eXBlX2NkLCAzLCAyKTsK KyAgICBnY2Nfaml0X3J2YWx1ZSAqcnZhbF8yID0gZ2NjX2ppdF9jb250ZXh0X25ld19ydmFs dWVfZnJvbV9jb21wbGV4X2RvdWJsZSAoCisgICAgICBjdHh0LCB0eXBlX2NkLCAxLCA1KTsK KyAgICBnY2Nfaml0X3J2YWx1ZSAqcnZhbF9wbHVzID0gZ2NjX2ppdF9jb250ZXh0X25ld19i aW5hcnlfb3AgKGN0eHQsIDAsCisgICAgICBHQ0NfSklUX0JJTkFSWV9PUF9QTFVTLAorICAg ICAgdHlwZV9jZCwKKyAgICAgIGdjY19qaXRfY29udGV4dF9uZXdfY2FzdCAoY3R4dCwgMCwK KwkJCQlydmFsXzAsCisJCQkJdHlwZV9jZCksCisgICAgICBydmFsXzEpOworICAgIGdjY19q aXRfcnZhbHVlICpydmFsX211bCA9IGdjY19qaXRfY29udGV4dF9uZXdfYmluYXJ5X29wIChj dHh0LCAwLAorICAgICAgR0NDX0pJVF9CSU5BUllfT1BfTVVMVCwKKyAgICAgIHR5cGVfY2Qs CisgICAgICBydmFsX3BsdXMsCisgICAgICBydmFsXzIpOworCisgICAgZ2NjX2ppdF9nbG9i YWxfc2V0X2luaXRpYWxpemVyX3J2YWx1ZSAoZm9vLAorICAgICAgcnZhbF9tdWwpOworICB9 CisKKyAgey8qIE1ha2UgYSBmdW5jdGlvbiByZXR1cm5pbmcgdW5pb24gd2l0aCAzLjE0ICsg MTUxNi5qIGluIGl0ICovCisgICAgZ2NjX2ppdF9maWVsZCAqY2RfZmllbGQgPQorICAgICAg Z2NjX2ppdF9jb250ZXh0X25ld19maWVsZCAoY3R4dCwKKwkJCQkgMCwKKwkJCSAgICAgICAg IHR5cGVfY2QsCisJCQkgICAgICAgICAiY2QiKTsKKyAgICBnY2Nfaml0X2ZpZWxkICppX2Zp ZWxkID0KKyAgICAgIGdjY19qaXRfY29udGV4dF9uZXdfZmllbGQgKGN0eHQsCisJCQkgICAg ICAgICAwLAorCQkJICAgICAgICAgdHlwZV9pbnQsCisJCQkgICAgICAgICAiaSIpOworICAg IGdjY19qaXRfZmllbGQgKmZpZWxkc1tdID0ge2NkX2ZpZWxkLCBpX2ZpZWxkfTsKKyAgICBn Y2Nfaml0X3R5cGUgKmNkaSA9CisgICAgICBnY2Nfaml0X2NvbnRleHRfbmV3X3VuaW9uX3R5 cGUgKGN0eHQsCisJCQkJICAgICAgMCwKKwkJCQkgICAgICAiY2RpIiwKKwkJCQkgICAgICAy LAorCQkJCSAgICAgIGZpZWxkcyk7CisKKyAgICBnY2Nfaml0X2Z1bmN0aW9uICpmb28gPSBn Y2Nfaml0X2NvbnRleHRfbmV3X2Z1bmN0aW9uIChjdHh0LCAwLAorICAgICAgR0NDX0pJVF9G VU5DVElPTl9FWFBPUlRFRCwKKyAgICAgIGNkaSwgImFfdW5pb255X2ZuX3JldHVybmluZ191 bmlvbiIsIDAsIDAsIDApOworCisgICAgZ2NjX2ppdF9ibG9jayAqYmxvY2sgPSBnY2Nfaml0 X2Z1bmN0aW9uX25ld19ibG9jayAoZm9vLCAic3RhcnQiKTsKKyAgICBnY2Nfaml0X2x2YWx1 ZSAqbG9jYWwgPQorICAgICAgZ2NjX2ppdF9mdW5jdGlvbl9uZXdfbG9jYWwgKGZvbywgMCwg Y2RpLCAidW5pb25fbG9jYWwiKTsKKyAgICBnY2Nfaml0X2x2YWx1ZSAqbHZfZmllbGQgPSBn Y2Nfaml0X2x2YWx1ZV9hY2Nlc3NfZmllbGQKKyAgICAgIChsb2NhbCwgMCwgY2RfZmllbGQp OworICAgIGdjY19qaXRfYmxvY2tfYWRkX2Fzc2lnbm1lbnQKKyAgICAgIChibG9jaywgMCwg bHZfZmllbGQsCisgICAgICAgZ2NjX2ppdF9jb250ZXh0X25ld19ydmFsdWVfZnJvbV9jb21w bGV4X2RvdWJsZSAoCisgICAgICAgICBjdHh0LCB0eXBlX2NkLCAzLjE0LCAxNTkyLikpOwor CisgICAgLyogTm90ZTogV3JpdGVzIHRvIGdsb2JhbCBoZXJlICovCisgICAgZ2NjX2ppdF9i bG9ja19hZGRfYXNzaWdubWVudCAoCisgICAgICBibG9jaywgMCwgY2RfZ2JsLAorICAgICAg Z2NjX2ppdF9jb250ZXh0X25ld19ydmFsdWVfZnJvbV9jb21wbGV4X2RvdWJsZSAoCisJY3R4 dCwgdHlwZV9jZCwgNjUzNSwgOS4pKTsKKworICAgIGdjY19qaXRfYmxvY2tfZW5kX3dpdGhf cmV0dXJuICgKKyAgICAgIGJsb2NrLCAwLCBnY2Nfaml0X2x2YWx1ZV9hc19ydmFsdWUgKGxv Y2FsKSk7CisgIH0KKyAgey8qIE1ha2UgYSBmdW5jdGlvbiByZXR1cm5pbmcgYSBjb21wbGV4 eSBzdHJ1Y3QgKi8KKyAgICBnY2Nfaml0X2ZpZWxkICpjZF9maWVsZCA9CisgICAgICBnY2Nf aml0X2NvbnRleHRfbmV3X2ZpZWxkIChjdHh0LAorCQkJCSAwLAorCQkJICAgICAgICAgdHlw ZV9jZCwKKwkJCSAgICAgICAgICJjZCIpOworICAgIGdjY19qaXRfZmllbGQgKmlfZmllbGQg PQorICAgICAgZ2NjX2ppdF9jb250ZXh0X25ld19maWVsZCAoY3R4dCwKKwkJCSAgICAgICAg IDAsCisJCQkgICAgICAgICB0eXBlX2ludCwKKwkJCSAgICAgICAgICJpIik7CisgICAgZ2Nj X2ppdF9maWVsZCAqZmllbGRzW10gPSB7Y2RfZmllbGQsIGlfZmllbGR9OworICAgIGdjY19q aXRfdHlwZSAqY2RpX3N0cnVjdCA9CisgICAgICBnY2Nfaml0X3N0cnVjdF9hc190eXBlKAor CWdjY19qaXRfY29udGV4dF9uZXdfc3RydWN0X3R5cGUgKGN0eHQsCisJCQkJCTAsCisJCQkJ CSJjZGlfc3RydWN0IiwKKwkJCQkJMiwKKwkJCQkJZmllbGRzKSk7CisKKyAgICBnY2Nfaml0 X2Z1bmN0aW9uICpmb28gPSBnY2Nfaml0X2NvbnRleHRfbmV3X2Z1bmN0aW9uIChjdHh0LCAw LAorICAgICAgR0NDX0pJVF9GVU5DVElPTl9FWFBPUlRFRCwKKyAgICAgIGNkaV9zdHJ1Y3Qs ICJhX3N0cnVjdHlfZm5fcmV0dXJuaW5nX3N0cnVjdCIsIDAsIDAsIDApOworCisgICAgZ2Nj X2ppdF9ibG9jayAqYmxvY2sgPSBnY2Nfaml0X2Z1bmN0aW9uX25ld19ibG9jayAoZm9vLCAi c3RhcnQiKTsKKyAgICBnY2Nfaml0X2x2YWx1ZSAqbG9jYWwgPQorICAgICAgZ2NjX2ppdF9m dW5jdGlvbl9uZXdfbG9jYWwgKGZvbywgMCwgY2RpX3N0cnVjdCwgImxvY2FsIik7CisgICAg Z2NjX2ppdF9sdmFsdWUgKmx2X2ZpZWxkID0gZ2NjX2ppdF9sdmFsdWVfYWNjZXNzX2ZpZWxk ICgKKyAgICAgIGxvY2FsLCAwLCBjZF9maWVsZCk7CisgICAgZ2NjX2ppdF9ibG9ja19hZGRf YXNzaWdubWVudCAoCisgICAgICAgYmxvY2ssIDAsIGx2X2ZpZWxkLAorICAgICAgIC8qIE5v dGU6IFJlYWRzIGZyb20gZ2xvYmFsIGhlcmUgKi8KKyAgICAgICBnY2Nfaml0X2x2YWx1ZV9h c19ydmFsdWUoY2RfZ2JsKSk7CisKKyAgICBnY2Nfaml0X2Jsb2NrX2VuZF93aXRoX3JldHVy biAoCisgICAgICBibG9jaywgMCwgZ2NjX2ppdF9sdmFsdWVfYXNfcnZhbHVlIChsb2NhbCkp OworICB9CisgIHsvKiBNYWtlIGEgZnVuY3Rpb24gdGFraW5nIGEgcG9pbnRlciB0byBhIGNv bXBsZXggZG91YmxlLAorICAgICAgYWRkIDErMS5qIHRvIGl0LCBhbmQgcmV0dXJuIHRoZSBw b2ludGVyICovCisgICAgICBnY2Nfaml0X3R5cGUgKnR5cGVfcmV0dXJuID0KKwlnY2Nfaml0 X3R5cGVfZ2V0X3BvaW50ZXIgKHR5cGVfY2QpOworCisgICAgICBnY2Nfaml0X3BhcmFtICpw YXJhbSA9IGdjY19qaXRfY29udGV4dF9uZXdfcGFyYW0gKAorCWN0eHQsIDAsIGdjY19qaXRf dHlwZV9nZXRfcG9pbnRlciAodHlwZV9jZCksICJwY2QiKTsKKworICAgICAgZ2NjX2ppdF9m dW5jdGlvbiAqZm9vID0gZ2NjX2ppdF9jb250ZXh0X25ld19mdW5jdGlvbiAoY3R4dCwgMCwK KwlHQ0NfSklUX0ZVTkNUSU9OX0VYUE9SVEVELAorCXR5cGVfcmV0dXJuLAorCSJhX3BvaW50 eV9mbl9yZXR1cm5pbmdfcG9pbnRzIiwgMSwgJnBhcmFtLCAwKTsKKyAgICAgIGdjY19qaXRf YmxvY2sgKmJsb2NrID0gZ2NjX2ppdF9mdW5jdGlvbl9uZXdfYmxvY2sgKGZvbywgInN0YXJ0 Iik7CisKKyAgICAgIGdjY19qaXRfcnZhbHVlICpwYXJhbV9ydiA9IGdjY19qaXRfcGFyYW1f YXNfcnZhbHVlICgKKwlnY2Nfaml0X2Z1bmN0aW9uX2dldF9wYXJhbSAoZm9vLCAwKSk7CisK KyAgICAgIGdjY19qaXRfcnZhbHVlICpydmFsID0gZ2NjX2ppdF9jb250ZXh0X25ld19iaW5h cnlfb3AgKAorCWN0eHQsIDAsIEdDQ19KSVRfQklOQVJZX09QX1BMVVMsIHR5cGVfY2QsCisJ Z2NjX2ppdF9jb250ZXh0X25ld19ydmFsdWVfZnJvbV9jb21wbGV4X2RvdWJsZSAoCisJICBj dHh0LCB0eXBlX2NkLCAxLCAxKSwKKwkgIGdjY19qaXRfbHZhbHVlX2FzX3J2YWx1ZSAoCisJ ICAgIGdjY19qaXRfcnZhbHVlX2RlcmVmZXJlbmNlICgKKwkgICAgICBwYXJhbV9ydiwgMCkp KTsKKyAgICAgIGdjY19qaXRfYmxvY2tfYWRkX2Fzc2lnbm1lbnQgKGJsb2NrLCAwLAorCWdj Y19qaXRfcnZhbHVlX2RlcmVmZXJlbmNlICgKKwkgIHBhcmFtX3J2LCAwKSwKKwlydmFsKTsK KworICAgICAgZ2NjX2ppdF9ibG9ja19lbmRfd2l0aF9yZXR1cm4gKAorCWJsb2NrLCAwLCBw YXJhbV9ydik7CisgIH0KK30KKwordHlwZWRlZiB1bmlvbiB7CisgIF9Db21wbGV4IGRvdWJs ZSBjZDsKKyAgaW50IGk7Cit9IGNvbXBsZXhfdGVzdF91bmlvbjsKKwordHlwZWRlZiBzdHJ1 Y3QgeworICBfQ29tcGxleCBkb3VibGUgY2Q7CisgIGludCBpOworfSBjb21wbGV4X3Rlc3Rf c3RydWN0OworCit2b2lkCit2ZXJpZnlfY29kZSAoZ2NjX2ppdF9jb250ZXh0ICpjdHh0LCBn Y2Nfaml0X3Jlc3VsdCAqcmVzdWx0KQoreworICBDSEVDS19OT05fTlVMTCAocmVzdWx0KTsK KworICB7CisgICAgY29tcGxleF90ZXN0X3VuaW9uICgqZm4pKCkgPSBnY2Nfaml0X3Jlc3Vs dF9nZXRfY29kZSAocmVzdWx0LCAiYV91bmlvbnlfZm5fcmV0dXJuaW5nX3VuaW9uIik7Cisg ICAgQ0hFQ0tfTk9OX05VTEwgKGZuKTsKKworICAgIGNvbXBsZXhfdGVzdF91bmlvbiB1ID0g Zm4oKTsKKyAgICBDSEVDS19WQUxVRSAodS5jZCwgMy4xNCArIDE1OTIuaik7CisgIH0KKyAg eworICAgIGNvbXBsZXhfdGVzdF9zdHJ1Y3QgKCpmbikoKSA9IGdjY19qaXRfcmVzdWx0X2dl dF9jb2RlIChyZXN1bHQsICJhX3N0cnVjdHlfZm5fcmV0dXJuaW5nX3N0cnVjdCIpOworICAg IENIRUNLX05PTl9OVUxMIChmbik7CisKKyAgICBjb21wbGV4X3Rlc3Rfc3RydWN0IHMgPSBm bigpOworICAgIENIRUNLX1ZBTFVFIChzLmNkLCA2NTM1ICsgOS5qKTsKKyAgfQorICB7Cisg ICAgX0NvbXBsZXggZG91YmxlICoKKyAgICAoKmZuKShfQ29tcGxleCBkb3VibGUgKikgPSBn Y2Nfaml0X3Jlc3VsdF9nZXRfY29kZSAocmVzdWx0LCAiYV9wb2ludHlfZm5fcmV0dXJuaW5n X3BvaW50cyIpOworICAgIENIRUNLX05PTl9OVUxMIChmbik7CisKKyAgICBfQ29tcGxleCBk b3VibGUgcyA9IDIuICsgMy5pOworICAgIF9Db21wbGV4IGRvdWJsZSAqcCA9IGZuKCZzKTsK KyAgICBDSEVDS19WQUxVRSAocCwgJnMpOworICAgIENIRUNLX1ZBTFVFIChzLCAzLiArIDQu aSk7CisgIH0KKyAgeworICAgIF9Db21wbGV4IGRvdWJsZSogY2QgPSBnY2Nfaml0X3Jlc3Vs dF9nZXRfY29kZSAoCisgICAgICByZXN1bHQsICJhbm90aGVyX2NvbXBsZXhfZG91YmxlX2ds b2JhbCIpOworICAgIENIRUNLX1ZBTFVFICgqY2QsICgxLiArIDUuaSkgKiAoMy5mICsgKDMu ICsgMi5pKSkpOworICB9Cit9CmRpZmYgLS1naXQgYS9nY2MvdGVzdHN1aXRlL2ppdC5kZy90 ZXN0LWNvbXBsZXgtb3BlcmF0b3JzLmMgYi9nY2MvdGVzdHN1aXRlL2ppdC5kZy90ZXN0LWNv bXBsZXgtb3BlcmF0b3JzLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAw MDAuLmVkYTc0NWY1ZTYwCi0tLSAvZGV2L251bGwKKysrIGIvZ2NjL3Rlc3RzdWl0ZS9qaXQu ZGcvdGVzdC1jb21wbGV4LW9wZXJhdG9ycy5jCkBAIC0wLDAgKzEsMzUzIEBACisvKgorICBU ZXN0ID09LCAhPSwgdGhlIGNyZWF0ZS1jb21wbGV4LWZyb20tcmVhbHMtb3BlcmF0b3IsCisg IHVuYXJ5IG1pbnVzIGFuZCAqLS8rCisgKi8KKworCisjaW5jbHVkZSA8bWF0aC5oPgorI2lu Y2x1ZGUgPGNvbXBsZXguaD4KKworI2luY2x1ZGUgImxpYmdjY2ppdC5oIgorI2luY2x1ZGUg Imhhcm5lc3MuaCIKKworc3RhdGljIHZvaWQKK21ha2VfY29kZV9jb21wb3AgKGdjY19qaXRf Y29udGV4dCAqY3R4dCwKKwkJICBjb25zdCBjaGFyICpmbl9uYW1lLAorCQkgIGludCB0eXBl LAorCQkgIGVudW0gZ2NjX2ppdF9jb21wYXJpc29uIG9wKQoreworICBnY2Nfaml0X3R5cGUg KnR0ID0gZ2NjX2ppdF9jb250ZXh0X2dldF90eXBlIChjdHh0LCB0eXBlKTsKKyAgZ2NjX2pp dF90eXBlICpib29sX3R5cGUgPSBnY2Nfaml0X2NvbnRleHRfZ2V0X3R5cGUgKGN0eHQsIEdD Q19KSVRfVFlQRV9CT09MKTsKKworICBnY2Nfaml0X3BhcmFtICpwYXJhbTEgPSBnY2Nfaml0 X2NvbnRleHRfbmV3X3BhcmFtIChjdHh0LCAwLCB0dCwgImYxIik7CisgIGdjY19qaXRfcGFy YW0gKnBhcmFtMiA9IGdjY19qaXRfY29udGV4dF9uZXdfcGFyYW0gKGN0eHQsIDAsIHR0LCAi ZjIiKTsKKworICBnY2Nfaml0X3BhcmFtICpwYXJhbXNbXSA9IHtwYXJhbTEsIHBhcmFtMn07 CisKKyAgZ2NjX2ppdF9mdW5jdGlvbiAqZm9vID0gZ2NjX2ppdF9jb250ZXh0X25ld19mdW5j dGlvbiAoY3R4dCwgMCwKKyAgICBHQ0NfSklUX0ZVTkNUSU9OX0VYUE9SVEVELAorICAgIGJv b2xfdHlwZSwgZm5fbmFtZSwgMiwgcGFyYW1zLCAwKTsKKworICBnY2Nfaml0X2Jsb2NrICpi bG9jayA9IGdjY19qaXRfZnVuY3Rpb25fbmV3X2Jsb2NrIChmb28sICJzdGFydCIpOworCisg IGdjY19qaXRfbHZhbHVlICpmMSA9IGdjY19qaXRfcGFyYW1fYXNfbHZhbHVlICgKKyAgICBn Y2Nfaml0X2Z1bmN0aW9uX2dldF9wYXJhbSAoZm9vLCAwKSk7CisgIGdjY19qaXRfbHZhbHVl ICpmMiA9IGdjY19qaXRfcGFyYW1fYXNfbHZhbHVlICgKKyAgICBnY2Nfaml0X2Z1bmN0aW9u X2dldF9wYXJhbSAoZm9vLCAxKSk7CisKKyAgLyogcmV0dXJuIGYxIG9wIGYyOyAqLworICBn Y2Nfaml0X3J2YWx1ZSAqcmNvbXBvcCA9IGdjY19qaXRfY29udGV4dF9uZXdfY29tcGFyaXNv bgorICAgIChjdHh0LCAwLCBvcCwKKyAgICAgZ2NjX2ppdF9sdmFsdWVfYXNfcnZhbHVlIChm MSksCisgICAgIGdjY19qaXRfbHZhbHVlX2FzX3J2YWx1ZSAoZjIpKTsKKworICBnY2Nfaml0 X2Jsb2NrX2VuZF93aXRoX3JldHVybiAoYmxvY2ssIDAsIHJjb21wb3ApOworfQorCitzdGF0 aWMgdm9pZAorbWFrZV9jb2RlX2Jpbm9wIChnY2Nfaml0X2NvbnRleHQgKmN0eHQsCisJCSBj b25zdCBjaGFyICpmbl9uYW1lLAorCQkgaW50IHR5cGUxLAorCQkgaW50IHR5cGUyLAorCQkg aW50IHJldHVybl90eXBlLAorCQkgZW51bSBnY2Nfaml0X2JpbmFyeV9vcCBvcCkKK3sKKyAg Z2NjX2ppdF90eXBlICp0dDEgPSBnY2Nfaml0X2NvbnRleHRfZ2V0X3R5cGUoY3R4dCwgdHlw ZTEpOworICBnY2Nfaml0X3R5cGUgKnR0MiA9IGdjY19qaXRfY29udGV4dF9nZXRfdHlwZShj dHh0LCB0eXBlMik7CisgIGdjY19qaXRfdHlwZSAqdHIgPSBnY2Nfaml0X2NvbnRleHRfZ2V0 X3R5cGUoY3R4dCwgcmV0dXJuX3R5cGUpOworCisgIGdjY19qaXRfcGFyYW0gKnBhcmFtMSA9 IGdjY19qaXRfY29udGV4dF9uZXdfcGFyYW0oY3R4dCwgMCwgdHQxLCAiZjEiKTsKKyAgZ2Nj X2ppdF9wYXJhbSAqcGFyYW0yID0gZ2NjX2ppdF9jb250ZXh0X25ld19wYXJhbShjdHh0LCAw LCB0dDIsICJmMiIpOworCisgIGdjY19qaXRfcGFyYW0gKnBhcmFtc1tdID0ge3BhcmFtMSwg cGFyYW0yfTsKKworICBnY2Nfaml0X2Z1bmN0aW9uICpmb28gPSBnY2Nfaml0X2NvbnRleHRf bmV3X2Z1bmN0aW9uIChjdHh0LCAwLAorICAgIEdDQ19KSVRfRlVOQ1RJT05fRVhQT1JURUQs CisgICAgdHIsIGZuX25hbWUsIDIsIHBhcmFtcywgMCk7CisKKyAgZ2NjX2ppdF9ibG9jayAq YmxvY2sgPSBnY2Nfaml0X2Z1bmN0aW9uX25ld19ibG9jayhmb28sICJzdGFydCIpOworCisg IGdjY19qaXRfbHZhbHVlICpmMSA9IGdjY19qaXRfcGFyYW1fYXNfbHZhbHVlKAorICAgIGdj Y19qaXRfZnVuY3Rpb25fZ2V0X3BhcmFtKGZvbywgMCkpOworICBnY2Nfaml0X2x2YWx1ZSAq ZjIgPSBnY2Nfaml0X3BhcmFtX2FzX2x2YWx1ZSgKKyAgICBnY2Nfaml0X2Z1bmN0aW9uX2dl dF9wYXJhbShmb28sIDEpKTsKKworICAvKiByZXR1cm4gZjEgb3AgZjI7ICovCisgIGdjY19q aXRfcnZhbHVlICpyYmlub3AgPSBnY2Nfaml0X2NvbnRleHRfbmV3X2JpbmFyeV9vcAorICAg IChjdHh0LCAwLCBvcCwgdHIsCisgICAgIGdjY19qaXRfbHZhbHVlX2FzX3J2YWx1ZSAoZjEp LAorICAgICBnY2Nfaml0X2x2YWx1ZV9hc19ydmFsdWUgKGYyKSk7CisKKyAgZ2NjX2ppdF9i bG9ja19lbmRfd2l0aF9yZXR1cm4gKGJsb2NrLCAwLCByYmlub3ApOworfQorCitzdGF0aWMg dm9pZAorbWFrZV9jb2RlX3Vub3AgKGdjY19qaXRfY29udGV4dCAqY3R4dCwKKwkgICAgY29u c3QgY2hhciAqZm5fbmFtZSwKKwkgICAgaW50IHR5cGUxLAorCSAgICBlbnVtIGdjY19qaXRf dW5hcnlfb3Agb3ApCit7CisgIGdjY19qaXRfdHlwZSAqdHQgPSBnY2Nfaml0X2NvbnRleHRf Z2V0X3R5cGUoY3R4dCwgdHlwZTEpOworCisgIGdjY19qaXRfcGFyYW0gKnBhcmFtMSA9IGdj Y19qaXRfY29udGV4dF9uZXdfcGFyYW0oY3R4dCwgMCwgdHQsICJmMSIpOworCisgIGdjY19q aXRfcGFyYW0gKnBhcmFtc1tdID0ge3BhcmFtMX07CisKKyAgZ2NjX2ppdF9mdW5jdGlvbiAq Zm9vID0gZ2NjX2ppdF9jb250ZXh0X25ld19mdW5jdGlvbiAoY3R4dCwgMCwKKyAgICBHQ0Nf SklUX0ZVTkNUSU9OX0VYUE9SVEVELAorICAgIHR0LCBmbl9uYW1lLCAxLCBwYXJhbXMsIDAp OworCisgIGdjY19qaXRfYmxvY2sgKmJsb2NrID0gZ2NjX2ppdF9mdW5jdGlvbl9uZXdfYmxv Y2soZm9vLCAic3RhcnQiKTsKKworICBnY2Nfaml0X2x2YWx1ZSAqZjEgPSBnY2Nfaml0X3Bh cmFtX2FzX2x2YWx1ZSgKKyAgICBnY2Nfaml0X2Z1bmN0aW9uX2dldF9wYXJhbShmb28sIDAp KTsKKworICAvKiByZXR1cm4gb3AgZjE7ICovCisgIGdjY19qaXRfcnZhbHVlICpyYmlub3Ag PSBnY2Nfaml0X2NvbnRleHRfbmV3X3VuYXJ5X29wCisgICAgKGN0eHQsIDAsIG9wLCB0dCwK KyAgICAgZ2NjX2ppdF9sdmFsdWVfYXNfcnZhbHVlIChmMSkpOworCisgIGdjY19qaXRfYmxv Y2tfZW5kX3dpdGhfcmV0dXJuIChibG9jaywgMCwgcmJpbm9wKTsKK30KKwordm9pZAorY3Jl YXRlX2NvZGUgKGdjY19qaXRfY29udGV4dCAqY3R4dCwgdm9pZCAqdXNlcl9kYXRhKQorewor ICAodm9pZCkgdXNlcl9kYXRhOworCisgIGdjY19qaXRfY29udGV4dF9zZXRfYm9vbF9lbmFi bGVfY29tcGxleF90eXBlcyAoY3R4dCwgMSk7CisKKyAgbWFrZV9jb2RlX2Jpbm9wIChjdHh0 LCAicGx1c19jb21wbGV4X2Zsb2F0X2NvbXBsZXhfZmxvYXQiLAorCQkgICBHQ0NfSklUX1RZ UEVfQ09NUExFWF9GTE9BVCwKKwkJICAgR0NDX0pJVF9UWVBFX0NPTVBMRVhfRkxPQVQsCisJ CSAgIEdDQ19KSVRfVFlQRV9DT01QTEVYX0ZMT0FULAorCQkgICBHQ0NfSklUX0JJTkFSWV9P UF9QTFVTKTsKKyAgbWFrZV9jb2RlX2Jpbm9wIChjdHh0LCAibWludXNfY29tcGxleF9mbG9h dF9jb21wbGV4X2Zsb2F0IiwKKwkJICAgR0NDX0pJVF9UWVBFX0NPTVBMRVhfRkxPQVQsCisJ CSAgIEdDQ19KSVRfVFlQRV9DT01QTEVYX0ZMT0FULAorCQkgICBHQ0NfSklUX1RZUEVfQ09N UExFWF9GTE9BVCwKKwkJICAgR0NDX0pJVF9CSU5BUllfT1BfTUlOVVMpOworICBtYWtlX2Nv ZGVfYmlub3AgKGN0eHQsICJkaXZfY29tcGxleF9mbG9hdF9jb21wbGV4X2Zsb2F0IiwKKwkJ ICAgR0NDX0pJVF9UWVBFX0NPTVBMRVhfRkxPQVQsCisJCSAgIEdDQ19KSVRfVFlQRV9DT01Q TEVYX0ZMT0FULAorCQkgICBHQ0NfSklUX1RZUEVfQ09NUExFWF9GTE9BVCwKKwkJICAgR0ND X0pJVF9CSU5BUllfT1BfRElWSURFKTsKKyAgbWFrZV9jb2RlX2Jpbm9wIChjdHh0LCAibXVs X2NvbXBsZXhfZmxvYXRfY29tcGxleF9mbG9hdCIsCisJCSAgIEdDQ19KSVRfVFlQRV9DT01Q TEVYX0ZMT0FULAorCQkgICBHQ0NfSklUX1RZUEVfQ09NUExFWF9GTE9BVCwKKwkJICAgR0ND X0pJVF9UWVBFX0NPTVBMRVhfRkxPQVQsCisJCSAgIEdDQ19KSVRfQklOQVJZX09QX01VTFQp OworCisgIG1ha2VfY29kZV9iaW5vcCAoY3R4dCwgImNtcGx4X2Zsb2F0X2Zsb2F0IiwKKwkJ ICAgR0NDX0pJVF9UWVBFX0ZMT0FULAorCQkgICBHQ0NfSklUX1RZUEVfRkxPQVQsCisJCSAg IEdDQ19KSVRfVFlQRV9DT01QTEVYX0ZMT0FULAorCQkgICBHQ0NfSklUX0JJTkFSWV9PUF9D T01QTEVYKTsKKworICAvKiBVbnVuZGVmIHRvIHRlc3QgZGlmZmVyZW50IGVycm9yIG1zZ3Mg Ki8KKyNpZiAwCisgIG1ha2VfY29kZV9iaW5vcCAoY3R4dCwgInNob3VsZF9ub3Rfd29yayIs CisJCSAgIEdDQ19KSVRfVFlQRV9GTE9BVCwKKwkJICAgR0NDX0pJVF9UWVBFX0ZMT0FULAor CQkgICBHQ0NfSklUX1RZUEVfQ09NUExFWF9ET1VCTEUsCisJCSAgIEdDQ19KSVRfQklOQVJZ X09QX0NPTVBMRVgpOworI2VuZGlmCisKKyAgbWFrZV9jb2RlX2Jpbm9wIChjdHh0LCAiY21w bHhfZG91YmxlX2RvdWJsZSIsCisJCSAgIEdDQ19KSVRfVFlQRV9ET1VCTEUsCisJCSAgIEdD Q19KSVRfVFlQRV9ET1VCTEUsCisJCSAgIEdDQ19KSVRfVFlQRV9DT01QTEVYX0RPVUJMRSwK KwkJICAgR0NDX0pJVF9CSU5BUllfT1BfQ09NUExFWCk7CisKKyAgbWFrZV9jb2RlX2Jpbm9w IChjdHh0LCAiY21wbHhfbG9uZ19kb3VibGVfbG9uZ19kb3VibGUiLAorCQkgICBHQ0NfSklU X1RZUEVfTE9OR19ET1VCTEUsCisJCSAgIEdDQ19KSVRfVFlQRV9MT05HX0RPVUJMRSwKKwkJ ICAgR0NDX0pJVF9UWVBFX0NPTVBMRVhfTE9OR19ET1VCTEUsCisJCSAgIEdDQ19KSVRfQklO QVJZX09QX0NPTVBMRVgpOworCisgIG1ha2VfY29kZV91bm9wIChjdHh0LCAibWludXNfY29t cGxleF9mbG9hdCIsCisJCSAgIEdDQ19KSVRfVFlQRV9DT01QTEVYX0ZMT0FULAorCQkgICBH Q0NfSklUX1VOQVJZX09QX01JTlVTKTsKKworICBtYWtlX2NvZGVfY29tcG9wIChjdHh0LCAi ZXF1YWxfY29tcGxleF9mbG9hdCIsCisJCSAgICBHQ0NfSklUX1RZUEVfQ09NUExFWF9GTE9B VCwKKwkJICAgIEdDQ19KSVRfQ09NUEFSSVNPTl9FUSk7CisgIG1ha2VfY29kZV9jb21wb3Ag KGN0eHQsICJuZXF1YWxfY29tcGxleF9mbG9hdCIsCisJCSAgICBHQ0NfSklUX1RZUEVfQ09N UExFWF9GTE9BVCwKKwkJICAgIEdDQ19KSVRfQ09NUEFSSVNPTl9ORSk7CisgIG1ha2VfY29k ZV9jb21wb3AgKGN0eHQsICJlcXVhbF9jb21wbGV4X2RvdWJsZSIsCisJCSAgICBHQ0NfSklU X1RZUEVfQ09NUExFWF9ET1VCTEUsCisJCSAgICBHQ0NfSklUX0NPTVBBUklTT05fRVEpOwor ICBtYWtlX2NvZGVfY29tcG9wIChjdHh0LCAibmVxdWFsX2NvbXBsZXhfZG91YmxlIiwKKwkJ ICAgIEdDQ19KSVRfVFlQRV9DT01QTEVYX0RPVUJMRSwKKwkJICAgIEdDQ19KSVRfQ09NUEFS SVNPTl9ORSk7CisgIG1ha2VfY29kZV9jb21wb3AgKGN0eHQsICJlcXVhbF9jb21wbGV4X2xv bmdfZG91YmxlIiwKKwkJICAgIEdDQ19KSVRfVFlQRV9DT01QTEVYX0xPTkdfRE9VQkxFLAor CQkgICAgR0NDX0pJVF9DT01QQVJJU09OX0VRKTsKKyAgbWFrZV9jb2RlX2NvbXBvcCAoY3R4 dCwgIm5lcXVhbF9jb21wbGV4X2xvbmdfZG91YmxlIiwKKwkJICAgIEdDQ19KSVRfVFlQRV9D T01QTEVYX0xPTkdfRE9VQkxFLAorCQkgICAgR0NDX0pJVF9DT01QQVJJU09OX05FKTsKKwor ICAvKiBVbnVuZGVmIHRvIHRlc3QgZGlmZmVyZW50IGVycm9yIG1zZ3MgKi8KKyNpZiAwCisg IG1ha2VfY29kZV9jb21wb3AgKGN0eHQsICJxd2Vhc2R6eGMiLAorCQkgICAgR0NDX0pJVF9U WVBFX0NPTVBMRVhfTE9OR19ET1VCTEUsCisJCSAgICBHQ0NfSklUX0NPTVBBUklTT05fR0Up OworI2VuZGlmCisKK30KKwordHlwZWRlZiBfQ29tcGxleCBmbG9hdCAoKmNmX2NmY2YpKF9D b21wbGV4IGZsb2F0LCBfQ29tcGxleCBmbG9hdCk7Cit0eXBlZGVmIF9Db21wbGV4IGZsb2F0 ICgqY2ZfY2YpKF9Db21wbGV4IGZsb2F0KTsKK3R5cGVkZWYgX0Jvb2wgKCpiX2NmY2YpKF9D b21wbGV4IGZsb2F0LCBfQ29tcGxleCBmbG9hdCk7Cit0eXBlZGVmIF9Cb29sICgqYl9jZGNk KShfQ29tcGxleCBkb3VibGUsIF9Db21wbGV4IGRvdWJsZSk7Cit0eXBlZGVmIF9Cb29sICgq Yl9jbGRjbGQpKF9Db21wbGV4IGxvbmcgZG91YmxlLCBfQ29tcGxleCBsb25nIGRvdWJsZSk7 CisKK3ZvaWQKK3ZlcmlmeV9jb2RlIChnY2Nfaml0X2NvbnRleHQgKmN0eHQsIGdjY19qaXRf cmVzdWx0ICpyZXN1bHQpCit7CisgICh2b2lkKSBjdHh0OworICBDSEVDS19OT05fTlVMTCAo cmVzdWx0KTsKKworICB7LyogVGVzdCBiaW5hcnkgb3BlcmF0b3JzICovCisgICAgeworICAg ICAgY2ZfY2ZjZiBmbiA9CisJZ2NjX2ppdF9yZXN1bHRfZ2V0X2NvZGUgKHJlc3VsdCwgInBs dXNfY29tcGxleF9mbG9hdF9jb21wbGV4X2Zsb2F0Iik7CisgICAgICBDSEVDS19OT05fTlVM TCAoZm4pOworCisgICAgICBDSEVDS19WQUxVRSAoZm4gKDEuZiArIDIuZmosIDMuZiArIDQu ZmopLCAoMS5mICsgMi5maikgKyAoMy5mICsgNC5maikpOworICAgIH0KKyAgICB7CisgICAg ICBjZl9jZmNmIGZuID0KKwlnY2Nfaml0X3Jlc3VsdF9nZXRfY29kZSAocmVzdWx0LCAibWlu dXNfY29tcGxleF9mbG9hdF9jb21wbGV4X2Zsb2F0Iik7CisgICAgICBDSEVDS19OT05fTlVM TCAoZm4pOworCisgICAgICBDSEVDS19WQUxVRSAoZm4gKDEuZiArIDIuZmosIDMuZiArIDQu ZmopLCAoMS5mICsgMi5maikgLSAoMy5mICsgNC5maikpOworICAgIH0KKyAgICB7CisgICAg ICBjZl9jZmNmIGZuID0KKwlnY2Nfaml0X3Jlc3VsdF9nZXRfY29kZSAocmVzdWx0LCAiZGl2 X2NvbXBsZXhfZmxvYXRfY29tcGxleF9mbG9hdCIpOworICAgICAgQ0hFQ0tfTk9OX05VTEwg KGZuKTsKKworICAgICAgQ0hFQ0tfVkFMVUUgKGZuICgxLmYgKyAyLmZqLCAzLmYgKyA0LmZq KSwgKDEuZiArIDIuZmopLygzLmYgKyA0LmZqKSk7CisgICAgfQorICAgIHsKKyAgICAgIGNm X2NmY2YgZm4gPQorCWdjY19qaXRfcmVzdWx0X2dldF9jb2RlIChyZXN1bHQsICJtdWxfY29t cGxleF9mbG9hdF9jb21wbGV4X2Zsb2F0Iik7CisgICAgICBDSEVDS19OT05fTlVMTCAoZm4p OworCisgICAgICBDSEVDS19WQUxVRSAoZm4gKDEuZiArIDIuZmosIDMuZiArIDQuZmopLCAo MS5mICsgMi5maikqKDMuZiArIDQuZmopKTsKKyAgICB9CisgICAgeworICAgICAgX0NvbXBs ZXggZmxvYXQgKCpmbikoZmxvYXQsIGZsb2F0KSA9CisJZ2NjX2ppdF9yZXN1bHRfZ2V0X2Nv ZGUgKHJlc3VsdCwgImNtcGx4X2Zsb2F0X2Zsb2F0Iik7CisgICAgICBDSEVDS19OT05fTlVM TCAoZm4pOworCisgICAgICBDSEVDS19WQUxVRSAoZm4gKDEsIDIpLCAxLmYgKyAyLmZpKTsK KyAgICAgIC8qIE5vdGUgdGhhdCB0aGUgcmVhbCBhbnN3ZXIgaXMgMCBub3QgbmFuIGFzIGl0 IHdvdWxkIGhhdmUgYmVlbiBieQorCSBtdWx0aXBseWluZyBJTkYgKiAxLmZpICovCisgICAg ICBDSEVDS19WQUxVRSAoZm4gKDAsIElORklOSVRZKSwgQ01QTFhGICgwLCBJTkZJTklUWSkp OworICAgICAgQ0hFQ0tfVkFMVUUgKGZuICgwLCAtSU5GSU5JVFkpLCBDTVBMWEYgKDAsIC1J TkZJTklUWSkpOworCisgICAgICBDSEVDS19WQUxVRSAoY3JlYWxmIChmbiAoMCwgTkFOKSks IGNyZWFsZiAoQ01QTFhGICgwLCBOQU4pKSk7CisgICAgICBDSEVDSyAoaXNuYW5mIChjaW1h Z2YgKGZuICgwLCBOQU4pKSkpOworCisgICAgICAvKiAtMCBuZWVkIGJlIHByZXNlcnZlZCAq LworICAgICAgX0NvbXBsZXggZmxvYXQgZiA9IGZuICgwLCAtMC4pOworICAgICAgQ0hFQ0sg KHNpZ25iaXQgKCBjaW1hZ2YgKGYpKSAhPSAwKTsKKyAgICAgIENIRUNLX1ZBTFVFIChmLCBD TVBMWEYgKDAsIC0wLikpOworICAgIH0KKyAgICB7CisgICAgICBfQ29tcGxleCBkb3VibGUg KCpmbikoZG91YmxlLCBkb3VibGUpID0KKwlnY2Nfaml0X3Jlc3VsdF9nZXRfY29kZSAocmVz dWx0LCAiY21wbHhfZG91YmxlX2RvdWJsZSIpOworICAgICAgQ0hFQ0tfTk9OX05VTEwgKGZu KTsKKworICAgICAgQ0hFQ0tfVkFMVUUgKGZuICgxLCAyKSwgMS4gKyAyLmkpOworICAgICAg Q0hFQ0tfVkFMVUUgKGZuICgwLCBJTkZJTklUWSksIENNUExYICgwLCBJTkZJTklUWSkpOwor ICAgICAgQ0hFQ0tfVkFMVUUgKGZuICgwLCAtSU5GSU5JVFkpLCBDTVBMWCAoMCwgLUlORklO SVRZKSk7CisKKyAgICAgIENIRUNLX1ZBTFVFIChjcmVhbCAoZm4gKDAsIE5BTikpLCBjcmVh bCAoQ01QTFggKDAsIE5BTikpKTsKKyAgICAgIENIRUNLIChpc25hbiAoY2ltYWcgKGZuICgw LCBOQU4pKSkpOworCisgICAgICBfQ29tcGxleCBkb3VibGUgZiA9IGZuICgwLCAtMC4pOwor ICAgICAgQ0hFQ0sgKHNpZ25iaXQgKGNpbWFnIChmKSkgIT0gMCk7CisgICAgICBDSEVDS19W QUxVRSAoZiwgQ01QTFhGICgwLCAtMC4pKTsKKyAgICB9CisgICAgeworICAgICAgX0NvbXBs ZXggbG9uZyBkb3VibGUgKCpmbikobG9uZyBkb3VibGUsIGxvbmcgZG91YmxlKSA9CisJZ2Nj X2ppdF9yZXN1bHRfZ2V0X2NvZGUgKHJlc3VsdCwgImNtcGx4X2xvbmdfZG91YmxlX2xvbmdf ZG91YmxlIik7CisgICAgICBDSEVDS19OT05fTlVMTCAoZm4pOworCisgICAgICBDSEVDS19W QUxVRSAoZm4gKDEsIDIpLCAxLkwgKyAyLkxpKTsKKyAgICAgIENIRUNLX1ZBTFVFIChmbiAo MCwgSU5GSU5JVFkpLCBDTVBMWEwgKDAsIElORklOSVRZKSk7CisgICAgICBDSEVDS19WQUxV RSAoZm4gKDAsIC1JTkZJTklUWSksIENNUExYTCAoMCwgLUlORklOSVRZKSk7CisKKyAgICAg IENIRUNLX1ZBTFVFIChjcmVhbGwgKGZuICgwLCBOQU4pKSwgY3JlYWxsIChDTVBMWEwgKDAs IE5BTikpKTsKKyAgICAgIENIRUNLIChpc25hbmwgKGNpbWFnbCAoZm4gKDAsIE5BTikpKSk7 CisKKyAgICAgIF9Db21wbGV4IGxvbmcgZG91YmxlIGYgPSBmbiAoMCwgLTAuKTsKKyAgICAg IENIRUNLIChzaWduYml0IChjaW1hZyAoZikpICE9IDApOworICAgICAgQ0hFQ0tfVkFMVUUg KGYsIENNUExYTCAoMCwgLTAuKSk7CisgICAgfQorICB9CisKKyAgey8qIFRlc3QgdW5hcnkg b3BzICovCisgICAgeworICAgICAgIGNmX2NmIGZuID0KKwlnY2Nfaml0X3Jlc3VsdF9nZXRf Y29kZSAocmVzdWx0LCAibWludXNfY29tcGxleF9mbG9hdCIpOworICAgICAgQ0hFQ0tfTk9O X05VTEwgKGZuKTsKKworICAgICAgQ0hFQ0tfVkFMVUUgKGZuICgxLmYgKyAyLmZqKSwgLSgx LmYgKyAyLmZqKSk7CisgICAgfQorICB9CisgIHsvKiBUZXN0IGNvbXAgb3BzICovCisgICAg eworICAgICAgIGJfY2ZjZiBmbiA9CisJZ2NjX2ppdF9yZXN1bHRfZ2V0X2NvZGUgKHJlc3Vs dCwgImVxdWFsX2NvbXBsZXhfZmxvYXQiKTsKKyAgICAgICBDSEVDS19OT05fTlVMTCAoZm4p OworCisgICAgICAgQ0hFQ0tfVkFMVUUgKGZuICgxLmYgKyAyLmZqLCAxLmYgKyAyLmZqICks IDEpOworICAgICAgIENIRUNLX1ZBTFVFIChmbiAoMS5mICsgMy5maiwgMS5mICsgMi5maiAp LCAwKTsKKyAgICB9CisgICAgeworICAgICAgIGJfY2ZjZiBmbiA9CisJZ2NjX2ppdF9yZXN1 bHRfZ2V0X2NvZGUgKHJlc3VsdCwgIm5lcXVhbF9jb21wbGV4X2Zsb2F0Iik7CisgICAgICAg Q0hFQ0tfTk9OX05VTEwgKGZuKTsKKworICAgICAgIENIRUNLX1ZBTFVFIChmbiAoMS5mICsg Mi5maiwgMS5mICsgMi5maiApLCAwKTsKKyAgICAgICBDSEVDS19WQUxVRSAoZm4gKDEuZiAr IDMuZmosIDEuZiArIDIuZmogKSwgMSk7CisgICAgfQorICAgIHsKKyAgICAgICBiX2NkY2Qg Zm4gPQorCWdjY19qaXRfcmVzdWx0X2dldF9jb2RlIChyZXN1bHQsICJlcXVhbF9jb21wbGV4 X2RvdWJsZSIpOworICAgICAgIENIRUNLX05PTl9OVUxMIChmbik7CisKKyAgICAgICBDSEVD S19WQUxVRSAoZm4gKDEuICsgMi5qLCAxLiArIDIuaiApLCAxKTsKKyAgICAgICBDSEVDS19W QUxVRSAoZm4gKDEuICsgMy5qLCAxLiArIDIuaiApLCAwKTsKKyAgICB9CisgICAgeworICAg ICAgIGJfY2RjZCBmbiA9CisJZ2NjX2ppdF9yZXN1bHRfZ2V0X2NvZGUgKHJlc3VsdCwgIm5l cXVhbF9jb21wbGV4X2RvdWJsZSIpOworICAgICAgIENIRUNLX05PTl9OVUxMIChmbik7CisK KyAgICAgICBDSEVDS19WQUxVRSAoZm4gKDEuICsgMi5qLCAxLiArIDIuaiApLCAwKTsKKyAg ICAgICBDSEVDS19WQUxVRSAoZm4gKDEuICsgMy5qLCAxLiArIDIuaiApLCAxKTsKKyAgICB9 CisgICAgeworICAgICAgIGJfY2xkY2xkIGZuID0KKwlnY2Nfaml0X3Jlc3VsdF9nZXRfY29k ZSAocmVzdWx0LCAiZXF1YWxfY29tcGxleF9sb25nX2RvdWJsZSIpOworICAgICAgIENIRUNL X05PTl9OVUxMIChmbik7CisKKyAgICAgICBDSEVDS19WQUxVRSAoZm4gKDEuICsgMi5qLCAx LiArIDIuaiApLCAxKTsKKyAgICAgICBDSEVDS19WQUxVRSAoZm4gKDEuICsgMy5qLCAxLiAr IDIuaiApLCAwKTsKKyAgICB9CisgICAgeworICAgICAgIGJfY2xkY2xkIGZuID0KKwlnY2Nf aml0X3Jlc3VsdF9nZXRfY29kZSAocmVzdWx0LCAibmVxdWFsX2NvbXBsZXhfbG9uZ19kb3Vi bGUiKTsKKyAgICAgICBDSEVDS19OT05fTlVMTCAoZm4pOworCisgICAgICAgQ0hFQ0tfVkFM VUUgKGZuICgxLiArIDIuaiwgMS4gKyAyLmogKSwgMCk7CisgICAgICAgQ0hFQ0tfVkFMVUUg KGZuICgxLiArIDMuaiwgMS4gKyAyLmogKSwgMSk7CisgICAgfQorICB9Cit9CmRpZmYgLS1n aXQgYS9nY2MvdGVzdHN1aXRlL2ppdC5kZy90ZXN0LWNvbXBsZXgtdHlwZXMuYyBiL2djYy90 ZXN0c3VpdGUvaml0LmRnL3Rlc3QtY29tcGxleC10eXBlcy5jCm5ldyBmaWxlIG1vZGUgMTAw NjQ0CmluZGV4IDAwMDAwMDAwMDAwLi42MjcxZDJhYzIzNgotLS0gL2Rldi9udWxsCisrKyBi L2djYy90ZXN0c3VpdGUvaml0LmRnL3Rlc3QtY29tcGxleC10eXBlcy5jCkBAIC0wLDAgKzEs Njc3IEBACisvKgorICBUZXN0IGNhc3QgZnJvbSBhbGwgY29tcGxleCB0eXBlcyB0byBhbGwg cHJpbWl0aXZlIHR5cGVzCisgIGV4Y2VwdCBib29sIGFuZCBhbW9uZ3N0IHRoZSBjb21wbGV4 IHR5cGVzIHRoZW0gc2VsZi4KKworICBBbHNvIHRlc3Qgc29tZSBjYXN0IGZyb20gbm9uLWNv bXBsZXggdG8gY29tcGxleC4KKworICBBbHNvIGNhbGwgYSBtYXRobGliIGNvbXBsZXggZnVu Y3Rpb24gYW5kIGNyZWF0ZSBhCisgIGNvbXBsZXggZ2xvYmFsLgorICovCisKKyNpbmNsdWRl IDxtYXRoLmg+CisjaW5jbHVkZSA8Y29tcGxleC5oPgorCisjaW5jbHVkZSAibGliZ2Njaml0 LmgiCisjaW5jbHVkZSAiaGFybmVzcy5oIgorCisvKgorICBNYWtlIGNvZGUgMTogKGNoZWNr IHRoYXQgZnVuY3Rpb24gY2FsbHMgd29ya3MpCisgICBjb21wbGV4IGZsb2F0IGNzcXJ0Zihj b21wbGV4IGZsb2F0IGYpOworCisgICBjb21wbGV4IGZsb2F0IGNvbXBsZXhfZmxvYXRfZm9v KGNvbXBsZXggZmxvYXQgZikKKyAgIHsKKyAgICAgcmV0dXJuIGNzcXJ0ZiggZiAqIChjb21w bGV4IGZsb2F0KTIuKTsKKyAgIH0KKworICBNYWtlIGNvZGUgMjogKGNoZWNrIGNhc3RzKQor ICAgaW50IGZsb2F0IGNvbXBsZXhfZmxvYXRfdG9faW50IChjb21wbGV4IGZsb2F0IGYpCisg ICB7CisgICAgIHJldHVybiBmOworICAgfQorCisgIHdpdGggZGlmZmVyZW50IHR5cGVzIGFu ZCBmdW5jdGlvbiBuYW1lcy4KKyAqLworCisKK3N0YXRpYyB2b2lkCittYWtlX2NvZGUxKGdj Y19qaXRfY29udGV4dCogY3R4dCwKKwkgICBjb25zdCBjaGFyICpmbl9uYW1lLAorCSAgIGNv bnN0IGNoYXIgKnNxcnRfZm4sCisJICAgaW50IHR5cGUpCit7CisgIGdjY19qaXRfcnZhbHVl ICpydmFsMSwgKnJ2YWwyOworICBnY2Nfaml0X2Jsb2NrICpibG9jazsKKworICBnY2Nfaml0 X3R5cGUgKmN0ID0gZ2NjX2ppdF9jb250ZXh0X2dldF90eXBlIChjdHh0LCB0eXBlKTsKKyAg Z2NjX2ppdF9wYXJhbSAqcGFyYW0gPSBnY2Nfaml0X2NvbnRleHRfbmV3X3BhcmFtIChjdHh0 LCAwLCBjdCwgImYiKTsKKyAgZ2NjX2ppdF9mdW5jdGlvbiAqZnVuYyA9IGdjY19qaXRfY29u dGV4dF9uZXdfZnVuY3Rpb24gKGN0eHQsIDAsCisgICAgR0NDX0pJVF9GVU5DVElPTl9JTVBP UlRFRCwKKyAgICBjdCwgc3FydF9mbiwgMSwgJnBhcmFtLCAwKTsKKworICBwYXJhbSA9IGdj Y19qaXRfY29udGV4dF9uZXdfcGFyYW0gKGN0eHQsIDAsIGN0LCAiZiIpOworICBnY2Nfaml0 X2Z1bmN0aW9uICpmb28gPSBnY2Nfaml0X2NvbnRleHRfbmV3X2Z1bmN0aW9uIChjdHh0LCAw LAorICAgIEdDQ19KSVRfRlVOQ1RJT05fRVhQT1JURUQsCisgICAgY3QsIGZuX25hbWUsIDEs ICZwYXJhbSwgMCk7CisKKyAgYmxvY2sgPSBnY2Nfaml0X2Z1bmN0aW9uX25ld19ibG9jayAo Zm9vLCAic3RhcnQiKTsKKworICBydmFsMSA9IGdjY19qaXRfY29udGV4dF9uZXdfYmluYXJ5 X29wIChjdHh0LCAwLCBHQ0NfSklUX0JJTkFSWV9PUF9NVUxULCBjdCwKKyAgICBnY2Nfaml0 X3BhcmFtX2FzX3J2YWx1ZSAoCisgICAgICBnY2Nfaml0X2Z1bmN0aW9uX2dldF9wYXJhbSAo Zm9vLCAwKSksCisgICAgZ2NjX2ppdF9jb250ZXh0X25ld19ydmFsdWVfZnJvbV9kb3VibGUg KGN0eHQsIGN0LCAyLikpOworCisgIHJ2YWwyID0gZ2NjX2ppdF9jb250ZXh0X25ld19jYWxs IChjdHh0LCAwLCBmdW5jLCAxLCAmcnZhbDEpOworCisgIGdjY19qaXRfYmxvY2tfZW5kX3dp dGhfcmV0dXJuIChibG9jaywgMCwgcnZhbDIpOworfQorCitzdGF0aWMgdm9pZAorbWFrZV9j b2RlMiAoZ2NjX2ppdF9jb250ZXh0ICpjdHh0LAorCSAgICBjb25zdCBjaGFyICpmbl9uYW1l LAorCSAgICBpbnQgY29tcGxleF90eXBlLAorCSAgICBpbnQgdGFyZ2V0X3R5cGUpCit7Cisg IGdjY19qaXRfYmxvY2sgKmJsb2NrOworICBnY2Nfaml0X3R5cGUgKnR0ID0gZ2NjX2ppdF9j b250ZXh0X2dldF90eXBlIChjdHh0LCB0YXJnZXRfdHlwZSk7CisgIGdjY19qaXRfdHlwZSAq Y3QgPSBnY2Nfaml0X2NvbnRleHRfZ2V0X3R5cGUgKGN0eHQsIGNvbXBsZXhfdHlwZSk7CisK KyAgZ2NjX2ppdF9wYXJhbSAqcGFyYW0gPSBnY2Nfaml0X2NvbnRleHRfbmV3X3BhcmFtIChj dHh0LCAwLCBjdCwgImYiKTsKKworICBnY2Nfaml0X2Z1bmN0aW9uICpmb28gPSBnY2Nfaml0 X2NvbnRleHRfbmV3X2Z1bmN0aW9uIChjdHh0LCAwLAorICAgIEdDQ19KSVRfRlVOQ1RJT05f RVhQT1JURUQsCisgICAgdHQsIGZuX25hbWUsIDEsICZwYXJhbSwgMCk7CisKKyAgYmxvY2sg PSBnY2Nfaml0X2Z1bmN0aW9uX25ld19ibG9jayAoZm9vLCAic3RhcnQiKTsKKworICBnY2Nf aml0X2Jsb2NrX2VuZF93aXRoX3JldHVybiAoYmxvY2ssIDAsCisgICAgZ2NjX2ppdF9jb250 ZXh0X25ld19jYXN0IChjdHh0LCAwLAorICAgICAgZ2NjX2ppdF9wYXJhbV9hc19ydmFsdWUg KAorCWdjY19qaXRfZnVuY3Rpb25fZ2V0X3BhcmFtIChmb28sIDApKSwgdHQpKTsKK30KKwor dm9pZAorY3JlYXRlX2NvZGUgKGdjY19qaXRfY29udGV4dCAqY3R4dCwgdm9pZCAqdXNlcl9k YXRhKQoreworICAodm9pZCkgdXNlcl9kYXRhOworCisgIGdjY19qaXRfY29udGV4dF9zZXRf Ym9vbF9lbmFibGVfY29tcGxleF90eXBlcyAoY3R4dCwgMSk7CisKKyAgZ2NjX2ppdF9jb250 ZXh0X25ld19nbG9iYWwgKAorICAgIGN0eHQsIDAsIEdDQ19KSVRfR0xPQkFMX0VYUE9SVEVE LAorICAgIGdjY19qaXRfY29udGV4dF9nZXRfdHlwZSAoY3R4dCwgR0NDX0pJVF9UWVBFX0NP TVBMRVhfRE9VQkxFKSwKKyAgICAiYV9jb21wbGV4X2dsb2JhbF9kb3VibGUiKTsKKworICBt YWtlX2NvZGUxIChjdHh0LCAiY29tcGxleF9mbG9hdF9mb28iLCAiY3NxcnRmIiwgR0NDX0pJ VF9UWVBFX0NPTVBMRVhfRkxPQVQpOworICBtYWtlX2NvZGUxIChjdHh0LCAiY29tcGxleF9k b3VibGVfZm9vIiwgImNzcXJ0IiwgR0NDX0pJVF9UWVBFX0NPTVBMRVhfRE9VQkxFKTsKKyAg bWFrZV9jb2RlMSAoY3R4dCwgImNvbXBsZXhfbG9uZ19kb3VibGVfZm9vIiwgImNzcXJ0bCIs IEdDQ19KSVRfVFlQRV9DT01QTEVYX0xPTkdfRE9VQkxFKTsKKworI2RlZmluZSBNQUtFX0NP REVfMihuYW1lICxjb21wbGV4X3R5cGUsIHRhcmdldF90eXBlKVwKKyAgbWFrZV9jb2RlMiAo Y3R4dCwgI25hbWUsIEdDQ19KSVRfVFlQRV8gIyMgY29tcGxleF90eXBlLCBHQ0NfSklUX1RZ UEVfICMjIHRhcmdldF90eXBlKTsKKworI2RlZmluZSBNQUtFX0NPREVfMl9PVVRFUihuYW1l LCB0eXBlKVwKKyAgTUFLRV9DT0RFXzIobmFtZSAjIyBfdG9fY2hhciwgdHlwZSwgQ0hBUilc CisgIE1BS0VfQ09ERV8yKG5hbWUgIyMgX3RvX2xvbmdfZG91YmxlLCB0eXBlLCBMT05HX0RP VUJMRSlcCisgIE1BS0VfQ09ERV8yKG5hbWUgIyMgX3RvX2RvdWJsZSwgdHlwZSwgRE9VQkxF KVwKKyAgTUFLRV9DT0RFXzIobmFtZSAjIyBfdG9fZmxvYXQsIHR5cGUsIEZMT0FUKVwKKyAg TUFLRV9DT0RFXzIobmFtZSAjIyBfdG9fc2lnbmVkX2NoYXIsIHR5cGUsIFNJR05FRF9DSEFS KVwKKyAgTUFLRV9DT0RFXzIobmFtZSAjIyBfdG9fc2hvcnQsIHR5cGUsIFNIT1JUKVwKKyAg TUFLRV9DT0RFXzIobmFtZSAjIyBfdG9faW50LCB0eXBlLCBJTlQpXAorICBNQUtFX0NPREVf MihuYW1lICMjIF90b19sb25nLCB0eXBlLCBMT05HKVwKKyAgTUFLRV9DT0RFXzIobmFtZSAj IyBfdG9fbG9uZ19sb25nLCB0eXBlLCBMT05HX0xPTkcpXAorICBNQUtFX0NPREVfMihuYW1l ICMjIF90b191X2NoYXIsIHR5cGUsIFVOU0lHTkVEX0NIQVIpXAorICBNQUtFX0NPREVfMihu YW1lICMjIF90b191X3Nob3J0LCB0eXBlLCBVTlNJR05FRF9TSE9SVClcCisgIE1BS0VfQ09E RV8yKG5hbWUgIyMgX3RvX3VfaW50LCB0eXBlLCBVTlNJR05FRF9JTlQpXAorICBNQUtFX0NP REVfMihuYW1lICMjIF90b191X2xvbmcsIHR5cGUsIFVOU0lHTkVEX0xPTkcpXAorICBNQUtF X0NPREVfMihuYW1lICMjIF90b191X2xvbmdfbG9uZywgdHlwZSwgVU5TSUdORURfTE9OR19M T05HKVwKKyAgTUFLRV9DT0RFXzIobmFtZSAjIyBfdG9fY29tcGxleF9mbG9hdCwgdHlwZSwg Q09NUExFWF9GTE9BVClcCisgIE1BS0VfQ09ERV8yKG5hbWUgIyMgX3RvX2NvbXBsZXhfZG91 YmxlLCB0eXBlLCBDT01QTEVYX0RPVUJMRSlcCisgIE1BS0VfQ09ERV8yKG5hbWUgIyMgX3Rv X2NvbXBsZXhfbG9uZ19kb3VibGUsIHR5cGUsIENPTVBMRVhfTE9OR19ET1VCTEUpCisKKyAg LyogVGVzdCBhbGwgdGhlc2UgY2FzdHMgKi8KKyAgTUFLRV9DT0RFXzJfT1VURVIgKGNvbXBs ZXhfZmxvYXQsIENPTVBMRVhfRkxPQVQpCisgIE1BS0VfQ09ERV8yX09VVEVSIChjb21wbGV4 X2RvdWJsZSwgQ09NUExFWF9ET1VCTEUpCisgIE1BS0VfQ09ERV8yX09VVEVSIChjb21wbGV4 X2xvbmdfZG91YmxlLCBDT01QTEVYX0xPTkdfRE9VQkxFKQorCisgIC8qIFRlc3Qgc29tZSBv ZiB0aGVzZSBjYXN0cyAqLworICBNQUtFX0NPREVfMl9PVVRFUih1bnNpZ25lZF9sb25nLCBV TlNJR05FRF9MT05HKQorICBNQUtFX0NPREVfMl9PVVRFUihmbG9hdCwgRkxPQVQpCisgIE1B S0VfQ09ERV8yX09VVEVSKGludCwgSU5UKQorCisgIC8qIFdyaXRpbmcgdGhlIHJlcHJvZHVj ZXIgdGFrZXMgYW5ub3lpbmdseSBsb25nIHRpbWUgd2l0aCBhbGwgdGhlc2UKKyAgICAgZnVu Y3Rpb25zIGJlbGxvdywgc28gI2lmIHRoZW0gb3V0LiAqLworI2lmIDAKKyAgTUFLRV9DT0RF XzJfT1VURVIobG9uZ19kb3VibGUsTE9OR19ET1VCTEUpCisgIE1BS0VfQ09ERV8yX09VVEVS KGRvdWJsZSwgRE9VQkxFKQorICBNQUtFX0NPREVfMl9PVVRFUihsb25nX2xvbmcsIExPTkdf TE9ORykKKyAgTUFLRV9DT0RFXzJfT1VURVIobG9uZywgTE9ORykKKyAgTUFLRV9DT0RFXzJf T1VURVIoc2hvcnQsIFVOU0lHTkVEX1NIT1JUKQorICBNQUtFX0NPREVfMl9PVVRFUihzaWdu ZWRfY2hhciwgU0lHTkVEX0NIQVIpCisgIE1BS0VfQ09ERV8yX09VVEVSKHVuc2lnbmVkX2xv bmdfbG9uZywgVU5TSUdORURfTE9OR19MT05HKQorICBNQUtFX0NPREVfMl9PVVRFUih1bnNp Z25lZF9sb25nLCBVTlNJR05FRF9MT05HKQorICBNQUtFX0NPREVfMl9PVVRFUih1bnNpZ25l ZF9pbnQsIFVOU0lHTkVEX0lOVCkKKyAgTUFLRV9DT0RFXzJfT1VURVIodW5zaWduZWRfc2hv cnQsIFVOU0lHTkVEX1NIT1JUKQorICBNQUtFX0NPREVfMl9PVVRFUih1bnNpZ25lZF9jaGFy LCBVTlNJR05FRF9DSEFSKQorCisgIE1BS0VfQ09ERV8yX09VVEVSKGNoYXIsIENIQVIpCisg IC8qIE5vdGU6IE5vIGJvb2wgKi8KKyNlbmRpZgorCisjdW5kZWYgTUFLRV9DT0RFXzIKKyN1 bmRlZiBNQUtFX0NPREVfMl9PVVRFUgorfQorCit0eXBlZGVmIGNvbXBsZXggbG9uZyBkb3Vi bGUgKCpsZF9mb29wKSgpOwordHlwZWRlZiBjb21wbGV4IGRvdWJsZSAoKmRfZm9vcCkoKTsK K3R5cGVkZWYgY29tcGxleCBmbG9hdCAoKmZfZm9vcCkoKTsKKworI2RlZmluZSBGT09fdG9f QkFSKGZvbywgZm9vX3R4dCkgXAordHlwZWRlZiBsb25nIGxvbmcgKCogZm9vX3R4dCAjIyBf dG9fbGwpKF9Db21wbGV4IGZvbyk7XAordHlwZWRlZiBsb25nICgqIGZvb190eHQgIyMgX3Rv X2wpKF9Db21wbGV4IGZvbyk7XAordHlwZWRlZiBpbnQgKCogZm9vX3R4dCAjIyBfdG9faSko X0NvbXBsZXggZm9vKTtcCit0eXBlZGVmIHNob3J0ICgqIGZvb190eHQgIyMgX3RvX2gpKF9D b21wbGV4IGZvbyk7XAordHlwZWRlZiBzaWduZWQgY2hhciAoKiBmb29fdHh0ICMjIF90b19z YykoX0NvbXBsZXggZm9vKTtcCit0eXBlZGVmIGNoYXIgKCogZm9vX3R4dCAjIyBfdG9fYyko X0NvbXBsZXggZm9vKTtcCit0eXBlZGVmIHVuc2lnbmVkIGxvbmcgbG9uZyAoKiBmb29fdHh0 ICMjIF90b191bGwpKF9Db21wbGV4IGZvbyk7XAordHlwZWRlZiB1bnNpZ25lZCBsb25nICgq IGZvb190eHQgIyMgX3RvX3VsKShfQ29tcGxleCBmb28pO1wKK3R5cGVkZWYgdW5zaWduZWQg aW50ICgqIGZvb190eHQgIyMgX3RvX3VpKShfQ29tcGxleCBmb28pO1wKK3R5cGVkZWYgdW5z aWduZWQgc2hvcnQgKCogZm9vX3R4dCAjIyBfdG9fdWgpKF9Db21wbGV4IGZvbyk7XAordHlw ZWRlZiB1bnNpZ25lZCBjaGFyICgqIGZvb190eHQgIyMgX3RvX3VjKShfQ29tcGxleCBmb28p O1wKK3R5cGVkZWYgZG91YmxlICgqIGZvb190eHQgIyMgX3RvX2QpKF9Db21wbGV4IGZvbyk7 XAordHlwZWRlZiBmbG9hdCAoKiBmb29fdHh0ICMjIF90b19mKShfQ29tcGxleCBmb28pO1wK K3R5cGVkZWYgbG9uZyBkb3VibGUgKCogZm9vX3R4dCAjIyBfdG9fbGQpKF9Db21wbGV4IGZv byk7XAordHlwZWRlZiBfQ29tcGxleCBkb3VibGUgKCogZm9vX3R4dCAjIyBfdG9fY2QpKF9D b21wbGV4IGZvbyk7XAordHlwZWRlZiBfQ29tcGxleCBmbG9hdCAoKiBmb29fdHh0ICMjIF90 b19jZikoX0NvbXBsZXggZm9vKTtcCit0eXBlZGVmIF9Db21wbGV4IGxvbmcgZG91YmxlICgq IGZvb190eHQgIyMgX3RvX2NsZCkoX0NvbXBsZXggZm9vKTtcCit0eXBlZGVmIF9Cb29sICgq IGZvb190eHQgIyMgX3RvX2IpKF9Db21wbGV4IGZvbyk7CisKK0ZPT190b19CQVIgKGZsb2F0 LCBjZikKK0ZPT190b19CQVIgKGRvdWJsZSwgY2QpCitGT09fdG9fQkFSIChsb25nIGRvdWJs ZSwgY2xkKQorCisjdW5kZWYgRk9PX3RvX0JBUgorCit2b2lkCit2ZXJpZnlfY29kZSAoZ2Nj X2ppdF9jb250ZXh0ICpjdHh0LCBnY2Nfaml0X3Jlc3VsdCAqcmVzdWx0KQoreworICBDSEVD S19OT05fTlVMTCAocmVzdWx0KTsKKworICB7CisgICB7LyogSnVzdCBjaGVjayB0aGF0IHdl IGNhbiBnZXQgdGhlIGdsb2JhbC4gKi8KKyAgICAgX0NvbXBsZXggZG91YmxlICpkID0gZ2Nj X2ppdF9yZXN1bHRfZ2V0X2dsb2JhbCAocmVzdWx0LCAiYV9jb21wbGV4X2dsb2JhbF9kb3Vi bGUiKTsKKyAgICAgQ0hFQ0tfTk9OX05VTEwgKGQpOworICAgfQorICB9CisgIHsvKiBDaGVj ayB0aGUgc3F1YXJlIHJvb3R5IHRoaW5nLiAqLworICAgeworICAgICBkX2Zvb3AgZF9mb29w ID0gZ2NjX2ppdF9yZXN1bHRfZ2V0X2NvZGUgKHJlc3VsdCwgImNvbXBsZXhfZG91YmxlX2Zv byIpOworICAgICBDSEVDS19OT05fTlVMTCAoZF9mb29wKTsKKworICAgICBjb21wbGV4IGRv dWJsZSBxID0gMi4gKyAyLmk7CisgICAgIGNvbXBsZXggZG91YmxlIHJlZiA9IGNzcXJ0IChx ICogMi4pOworICAgICBjb21wbGV4IGRvdWJsZSBhbnMgPSBkX2Zvb3AgKHEpOworICAgICBD SEVDSyAoY2FicyAocmVmIC0gYW5zKSA8IDAuMDAwMSk7CisgICB9CisgICB7CisgICAgIGZf Zm9vcCBmX2Zvb3AgPSBnY2Nfaml0X3Jlc3VsdF9nZXRfY29kZSAocmVzdWx0LCAiY29tcGxl eF9mbG9hdF9mb28iKTsKKyAgICAgQ0hFQ0tfTk9OX05VTEwgKGZfZm9vcCk7CisKKyAgICAg Y29tcGxleCBmbG9hdCBxID0gMi5mICsgMi5maTsKKyAgICAgY29tcGxleCBmbG9hdCByZWYg PSBjc3FydGYgKHEgKiAyLmYpOworICAgICBjb21wbGV4IGZsb2F0IGFucyA9IGZfZm9vcCAo cSk7CisgICAgIENIRUNLIChjYWJzIChyZWYgLSBhbnMpIDwgMC4wMDAxKTsKKyAgIH0KKyAg IHsKKyAgICAgbGRfZm9vcCBsZF9mb29wID0gZ2NjX2ppdF9yZXN1bHRfZ2V0X2NvZGUgKHJl c3VsdCwgImNvbXBsZXhfbG9uZ19kb3VibGVfZm9vIik7CisgICAgIENIRUNLX05PTl9OVUxM IChsZF9mb29wKTsKKworICAgICBjb21wbGV4IGxvbmcgZG91YmxlIHEgPSAyLkwgKyAyLkxp OworICAgICBjb21wbGV4IGxvbmcgZG91YmxlIHJlZiA9IGNzcXJ0bCAocSAqIDIuTCk7Cisg ICAgIGNvbXBsZXggbG9uZyBkb3VibGUgYW5zID0gbGRfZm9vcCAocSk7CisgICAgIENIRUNL IChjYWJzIChyZWYgLSBhbnMpIDwgMC4wMDAxKTsKKyAgIH0KKyAgfQorICAvKiBXaXRoIHRo ZSBwb3dlciBvZiBNLXcgQy15ICovCisKKyAgey8qIENhc3QgaGl0aGVyIGFuZCB0aGl0aGVy ICovCisgICB7CisgICAgIGNmX3RvX2xkIGZuID0gZ2NjX2ppdF9yZXN1bHRfZ2V0X2NvZGUg KHJlc3VsdCwgImNvbXBsZXhfZmxvYXRfdG9fbG9uZ19kb3VibGUiKTsKKyAgICAgQ0hFQ0tf Tk9OX05VTEwgKGZuKTsKKworICAgICBDSEVDS19WQUxVRSAoZm4gKDEuMWYgKyAyLjJmaSks IDEuMWYpOworICAgICBDSEVDS19WQUxVRSAoZm4gKDEuMWYgKyAwLjBmaSksIDEuMWYpOwor ICAgICBDSEVDS19WQUxVRSAoZm4gKDAuMGYgKyAyLjJmaSksIDAuMGYpOworICAgfQorICAg eworICAgICBjZl90b19kIGZuID0gZ2NjX2ppdF9yZXN1bHRfZ2V0X2NvZGUgKHJlc3VsdCwg ImNvbXBsZXhfZmxvYXRfdG9fZG91YmxlIik7CisgICAgIENIRUNLX05PTl9OVUxMIChmbik7 CisKKyAgICAgQ0hFQ0tfVkFMVUUgKGZuICgxLjFmICsgMi4yZmkpLCAxLjFmKTsKKyAgICAg Q0hFQ0tfVkFMVUUgKGZuICgxLjFmICsgMC4wZmkpLCAxLjFmKTsKKyAgICAgQ0hFQ0tfVkFM VUUgKGZuICgwLjBmICsgMi4yZmkpLCAwLjBmKTsKKyAgIH0KKyAgIHsKKyAgICAgY2ZfdG9f ZiBmbiA9IGdjY19qaXRfcmVzdWx0X2dldF9jb2RlIChyZXN1bHQsICJjb21wbGV4X2Zsb2F0 X3RvX2Zsb2F0Iik7CisgICAgIENIRUNLX05PTl9OVUxMIChmbik7CisKKyAgICAgQ0hFQ0tf VkFMVUUgKGZuICgxLjFmICsgMi4yZmkpLCAxLjFmKTsKKyAgICAgQ0hFQ0tfVkFMVUUgKGZu ICgxLjFmICsgMC5maSksIDEuMWYpOworICAgICBDSEVDS19WQUxVRSAoZm4gKDAuZiArIDIu MmZpKSwgMC5mKTsKKyAgIH0KKyAgIHsKKyAgICAgY2ZfdG9fbGwgZm4gPSBnY2Nfaml0X3Jl c3VsdF9nZXRfY29kZSAocmVzdWx0LCAiY29tcGxleF9mbG9hdF90b19sb25nX2xvbmciKTsK KyAgICAgQ0hFQ0tfTk9OX05VTEwgKGZuKTsKKworICAgICBDSEVDS19WQUxVRSAoZm4gKDEu MWYgKyAyLjJmaSksIDEpOworICAgICBDSEVDS19WQUxVRSAoZm4gKDEuMWYgKyAwLmZpKSwg MSk7CisgICAgIENIRUNLX1ZBTFVFIChmbiAoMC5mICsgMi4yZmkpLCAwKTsKKyAgIH0KKyAg IHsKKyAgICAgY2ZfdG9fbCBmbiA9IGdjY19qaXRfcmVzdWx0X2dldF9jb2RlIChyZXN1bHQs ICJjb21wbGV4X2Zsb2F0X3RvX2xvbmciKTsKKyAgICAgQ0hFQ0tfTk9OX05VTEwgKGZuKTsK KworICAgICBDSEVDS19WQUxVRSAoZm4gKDEuMWYgKyAyLjJmaSksIDEpOworICAgICBDSEVD S19WQUxVRSAoZm4gKDEuMWYgKyAwLmZpKSwgMSk7CisgICAgIENIRUNLX1ZBTFVFIChmbiAo MC5mICsgMi4yZmkpLCAwKTsKKyAgIH0KKyAgIHsKKyAgICAgY2ZfdG9faSBmbiA9IGdjY19q aXRfcmVzdWx0X2dldF9jb2RlIChyZXN1bHQsICJjb21wbGV4X2Zsb2F0X3RvX2ludCIpOwor ICAgICBDSEVDS19OT05fTlVMTCAoZm4pOworCisgICAgIENIRUNLX1ZBTFVFIChmbiAoMS4x ZiArIDIuMmZpKSwgMSk7CisgICAgIENIRUNLX1ZBTFVFIChmbiAoMS4xZiArIDAuZmkpLCAx KTsKKyAgICAgQ0hFQ0tfVkFMVUUgKGZuICgwLmYgKyAyLjJmaSksIDApOworICAgfQorICAg eworICAgICBjZl90b19oIGZuID0gZ2NjX2ppdF9yZXN1bHRfZ2V0X2NvZGUgKHJlc3VsdCwg ImNvbXBsZXhfZmxvYXRfdG9fc2hvcnQiKTsKKyAgICAgQ0hFQ0tfTk9OX05VTEwgKGZuKTsK KworICAgICBDSEVDS19WQUxVRSAoZm4gKDEuMWYgKyAyLjJmaSksIDEpOworICAgICBDSEVD S19WQUxVRSAoZm4gKDEuMWYgKyAwLmZpKSwgMSk7CisgICAgIENIRUNLX1ZBTFVFIChmbiAo MC5mICsgMi4yZmkpLCAwKTsKKyAgIH0KKyAgIHsKKyAgICAgY2ZfdG9fc2MgZm4gPSBnY2Nf aml0X3Jlc3VsdF9nZXRfY29kZSAocmVzdWx0LCAiY29tcGxleF9mbG9hdF90b19zaWduZWRf Y2hhciIpOworICAgICBDSEVDS19OT05fTlVMTCAoZm4pOworCisgICAgIENIRUNLX1ZBTFVF IChmbiAoMS4xZiArIDIuMmZpKSwgMSk7CisgICAgIENIRUNLX1ZBTFVFIChmbiAoMS4xZiAr IDAuZmkpLCAxKTsKKyAgICAgQ0hFQ0tfVkFMVUUgKGZuICgwLmYgKyAyLjJmaSksIDApOwor ICAgfQorICAgeworICAgICBjZl90b19jIGZuID0gZ2NjX2ppdF9yZXN1bHRfZ2V0X2NvZGUg KHJlc3VsdCwgImNvbXBsZXhfZmxvYXRfdG9fY2hhciIpOworICAgICBDSEVDS19OT05fTlVM TCAoZm4pOworCisgICAgIENIRUNLX1ZBTFVFIChmbiAoMS4xZiArIDIuMmZpKSwgMSk7Cisg ICAgIENIRUNLX1ZBTFVFIChmbiAoMS4xZiArIDAuZmkpLCAxKTsKKyAgICAgQ0hFQ0tfVkFM VUUgKGZuICgwLmYgKyAyLjJmaSksIDApOworICAgfQorICAgeworICAgICBjZl90b191bGwg Zm4gPSBnY2Nfaml0X3Jlc3VsdF9nZXRfY29kZSAocmVzdWx0LCAiY29tcGxleF9mbG9hdF90 b191X2xvbmdfbG9uZyIpOworICAgICBDSEVDS19OT05fTlVMTCAoZm4pOworCisgICAgIENI RUNLX1ZBTFVFIChmbiAoMS4xZiArIDIuMmZpKSwgMSk7CisgICAgIENIRUNLX1ZBTFVFIChm biAoMS4xZiArIDAuZmkpLCAxKTsKKyAgICAgQ0hFQ0tfVkFMVUUgKGZuICgwLmYgKyAyLjJm aSksIDApOworICAgfQorICAgeworICAgICBjZl90b191bCBmbiA9IGdjY19qaXRfcmVzdWx0 X2dldF9jb2RlIChyZXN1bHQsICJjb21wbGV4X2Zsb2F0X3RvX3VfbG9uZyIpOworICAgICBD SEVDS19OT05fTlVMTCAoZm4pOworCisgICAgIENIRUNLX1ZBTFVFIChmbiAoMS4xZiArIDIu MmZpKSwgMSk7CisgICAgIENIRUNLX1ZBTFVFIChmbiAoMS4xZiArIDAuZmkpLCAxKTsKKyAg ICAgQ0hFQ0tfVkFMVUUgKGZuICgwLmYgKyAyLjJmaSksIDApOworICAgfQorICAgeworICAg ICBjZl90b191aSBmbiA9IGdjY19qaXRfcmVzdWx0X2dldF9jb2RlIChyZXN1bHQsICJjb21w bGV4X2Zsb2F0X3RvX3VfaW50Iik7CisgICAgIENIRUNLX05PTl9OVUxMIChmbik7CisKKyAg ICAgQ0hFQ0tfVkFMVUUgKGZuICgxLjFmICsgMi4yZmkpLCAxKTsKKyAgICAgQ0hFQ0tfVkFM VUUgKGZuICgxLjFmICsgMC5maSksIDEpOworICAgICBDSEVDS19WQUxVRSAoZm4gKDAuZiAr IDIuMmZpKSwgMCk7CisgICB9CisgICB7CisgICAgIGNmX3RvX3VoIGZuID0gZ2NjX2ppdF9y ZXN1bHRfZ2V0X2NvZGUgKHJlc3VsdCwgImNvbXBsZXhfZmxvYXRfdG9fdV9zaG9ydCIpOwor ICAgICBDSEVDS19OT05fTlVMTCAoZm4pOworCisgICAgIENIRUNLX1ZBTFVFIChmbiAoMS4x ZiArIDIuMmZpKSwgMSk7CisgICAgIENIRUNLX1ZBTFVFIChmbiAoMS4xZiArIDAuZmkpLCAx KTsKKyAgICAgQ0hFQ0tfVkFMVUUgKGZuICgwLmYgKyAyLjJmaSksIDApOworICAgfQorICAg eworICAgICBjZl90b191YyBmbiA9IGdjY19qaXRfcmVzdWx0X2dldF9jb2RlIChyZXN1bHQs ICJjb21wbGV4X2Zsb2F0X3RvX3VfY2hhciIpOworICAgICBDSEVDS19OT05fTlVMTCAoZm4p OworCisgICAgIENIRUNLX1ZBTFVFIChmbiAoMS4xZiArIDIuMmZpKSwgMSk7CisgICAgIENI RUNLX1ZBTFVFIChmbiAoMS4xZiArIDAuZmkpLCAxKTsKKyAgICAgQ0hFQ0tfVkFMVUUgKGZu ICgwLmYgKyAyLjJmaSksIDApOworICAgfQorICB9CisKKyAgey8qIGNvbXBsZXggZG91Ymxl IHRvIC4uLiAqLworICAgeworICAgICBjZF90b19sZCBmbiA9IGdjY19qaXRfcmVzdWx0X2dl dF9jb2RlIChyZXN1bHQsICJjb21wbGV4X2RvdWJsZV90b19sb25nX2RvdWJsZSIpOworICAg ICBDSEVDS19OT05fTlVMTCAoZm4pOworCisgICAgIENIRUNLX1ZBTFVFIChmbiAoMS4xICsg Mi4yaSksIDEuMSk7CisgICAgIENIRUNLX1ZBTFVFIChmbiAoMS4xICsgMC4waSksIDEuMSk7 CisgICAgIENIRUNLX1ZBTFVFIChmbiAoMC4wICsgMi4yaSksIDAuKTsKKyAgIH0KKyAgIHsK KyAgICAgY2RfdG9fZCBmbiA9IGdjY19qaXRfcmVzdWx0X2dldF9jb2RlIChyZXN1bHQsICJj b21wbGV4X2RvdWJsZV90b19kb3VibGUiKTsKKyAgICAgQ0hFQ0tfTk9OX05VTEwgKGZuKTsK KworICAgICBDSEVDS19WQUxVRSAoZm4gKDEuMWYgKyAyLjJmaSksIDEuMWYpOworICAgICBD SEVDS19WQUxVRSAoZm4gKDEuMWYgKyAwLjBmaSksIDEuMWYpOworICAgICBDSEVDS19WQUxV RSAoZm4gKDAuMGYgKyAyLjJmaSksIDAuMGYpOworICAgfQorICAgeworICAgICBjZF90b19m IGZuID0gZ2NjX2ppdF9yZXN1bHRfZ2V0X2NvZGUgKHJlc3VsdCwgImNvbXBsZXhfZG91Ymxl X3RvX2Zsb2F0Iik7CisgICAgIENIRUNLX05PTl9OVUxMIChmbik7CisKKyAgICAgQ0hFQ0tf VkFMVUUgKGZuICgxLjFmICsgMi4yZmkpLCAxLjFmKTsKKyAgICAgQ0hFQ0tfVkFMVUUgKGZu ICgxLjFmICsgMC4wZmkpLCAxLjFmKTsKKyAgICAgQ0hFQ0tfVkFMVUUgKGZuICgwLjBmICsg Mi4yZmkpLCAwLjBmKTsKKyAgIH0KKyAgIHsKKyAgICAgY2RfdG9fbGwgZm4gPSBnY2Nfaml0 X3Jlc3VsdF9nZXRfY29kZSAocmVzdWx0LCAiY29tcGxleF9kb3VibGVfdG9fbG9uZ19sb25n Iik7CisgICAgIENIRUNLX05PTl9OVUxMIChmbik7CisKKyAgICAgQ0hFQ0tfVkFMVUUgKGZu ICgxLjEgKyAyLjJpKSwgMSk7CisgICAgIENIRUNLX1ZBTFVFIChmbiAoMS4xICsgMC4waSks IDEpOworICAgICBDSEVDS19WQUxVRSAoZm4gKDAuMCArIDIuMmkpLCAwKTsKKyAgIH0KKyAg IHsKKyAgICAgY2RfdG9fbCBmbiA9IGdjY19qaXRfcmVzdWx0X2dldF9jb2RlIChyZXN1bHQs ICJjb21wbGV4X2RvdWJsZV90b19sb25nIik7CisgICAgIENIRUNLX05PTl9OVUxMIChmbik7 CisKKyAgICAgQ0hFQ0tfVkFMVUUgKGZuICgxLjEgKyAyLjJpKSwgMSk7CisgICAgIENIRUNL X1ZBTFVFIChmbiAoMS4xICsgMC4waSksIDEpOworICAgICBDSEVDS19WQUxVRSAoZm4gKDAu MCArIDIuMmkpLCAwKTsKKyAgIH0KKyAgIHsKKyAgICAgY2RfdG9faSBmbiA9IGdjY19qaXRf cmVzdWx0X2dldF9jb2RlIChyZXN1bHQsICJjb21wbGV4X2RvdWJsZV90b19pbnQiKTsKKyAg ICAgQ0hFQ0tfTk9OX05VTEwgKGZuKTsKKworICAgICBDSEVDS19WQUxVRSAoZm4gKDEuMSAr IDIuMmkpLCAxKTsKKyAgICAgQ0hFQ0tfVkFMVUUgKGZuICgxLjEgKyAwLjBpKSwgMSk7Cisg ICAgIENIRUNLX1ZBTFVFIChmbiAoMC4wICsgMi4yaSksIDApOworICAgfQorICAgeworICAg ICBjZF90b19oIGZuID0gZ2NjX2ppdF9yZXN1bHRfZ2V0X2NvZGUgKHJlc3VsdCwgImNvbXBs ZXhfZG91YmxlX3RvX3Nob3J0Iik7CisgICAgIENIRUNLX05PTl9OVUxMIChmbik7CisKKyAg ICAgQ0hFQ0tfVkFMVUUgKGZuICgxLjEgKyAyLjJpKSwgMSk7CisgICAgIENIRUNLX1ZBTFVF IChmbiAoMS4xICsgMC4waSksIDEpOworICAgICBDSEVDS19WQUxVRSAoZm4gKDAuMCArIDIu MmkpLCAwKTsKKyAgIH0KKyAgIHsKKyAgICAgY2RfdG9fc2MgZm4gPSBnY2Nfaml0X3Jlc3Vs dF9nZXRfY29kZSAocmVzdWx0LCAiY29tcGxleF9kb3VibGVfdG9fc2lnbmVkX2NoYXIiKTsK KyAgICAgQ0hFQ0tfTk9OX05VTEwgKGZuKTsKKworICAgICBDSEVDS19WQUxVRSAoZm4gKDEu MSArIDIuMmkpLCAxKTsKKyAgICAgQ0hFQ0tfVkFMVUUgKGZuICgxLjEgKyAwLjBpKSwgMSk7 CisgICAgIENIRUNLX1ZBTFVFIChmbiAoMC4wICsgMi4yaSksIDApOworICAgfQorICAgewor ICAgICBjZF90b19jIGZuID0gZ2NjX2ppdF9yZXN1bHRfZ2V0X2NvZGUgKHJlc3VsdCwgImNv bXBsZXhfZG91YmxlX3RvX2NoYXIiKTsKKyAgICAgQ0hFQ0tfTk9OX05VTEwgKGZuKTsKKwor ICAgICBDSEVDS19WQUxVRSAoZm4gKDEuMSArIDIuMmkpLCAxKTsKKyAgICAgQ0hFQ0tfVkFM VUUgKGZuICgxLjEgKyAwLjBpKSwgMSk7CisgICAgIENIRUNLX1ZBTFVFIChmbiAoMC4wICsg Mi4yaSksIDApOworICAgfQorICAgeworICAgICBjZF90b191bGwgZm4gPSBnY2Nfaml0X3Jl c3VsdF9nZXRfY29kZSAocmVzdWx0LCAiY29tcGxleF9kb3VibGVfdG9fdV9sb25nX2xvbmci KTsKKyAgICAgQ0hFQ0tfTk9OX05VTEwgKGZuKTsKKworICAgICBDSEVDS19WQUxVRSAoZm4g KDEuMSArIDIuMmkpLCAxKTsKKyAgICAgQ0hFQ0tfVkFMVUUgKGZuICgxLjEgKyAwLjBpKSwg MSk7CisgICAgIENIRUNLX1ZBTFVFIChmbiAoMC4wICsgMi4yaSksIDApOworICAgfQorICAg eworICAgICBjZF90b191bCBmbiA9IGdjY19qaXRfcmVzdWx0X2dldF9jb2RlIChyZXN1bHQs ICJjb21wbGV4X2RvdWJsZV90b191X2xvbmciKTsKKyAgICAgQ0hFQ0tfTk9OX05VTEwgKGZu KTsKKworICAgICBDSEVDS19WQUxVRSAoZm4gKDEuMSArIDIuMmkpLCAxKTsKKyAgICAgQ0hF Q0tfVkFMVUUgKGZuICgxLjEgKyAwLjBpKSwgMSk7CisgICAgIENIRUNLX1ZBTFVFIChmbiAo MC4wICsgMi4yaSksIDApOworICAgfQorICAgeworICAgICBjZF90b191aSBmbiA9IGdjY19q aXRfcmVzdWx0X2dldF9jb2RlIChyZXN1bHQsICJjb21wbGV4X2RvdWJsZV90b191X2ludCIp OworICAgICBDSEVDS19OT05fTlVMTCAoZm4pOworCisgICAgIENIRUNLX1ZBTFVFIChmbiAo MS4xICsgMi4yaSksIDEpOworICAgICBDSEVDS19WQUxVRSAoZm4gKDEuMSArIDAuMGkpLCAx KTsKKyAgICAgQ0hFQ0tfVkFMVUUgKGZuICgwLjAgKyAyLjJpKSwgMCk7CisgICB9CisgICB7 CisgICAgIGNkX3RvX3VoIGZuID0gZ2NjX2ppdF9yZXN1bHRfZ2V0X2NvZGUgKHJlc3VsdCwg ImNvbXBsZXhfZG91YmxlX3RvX3Vfc2hvcnQiKTsKKyAgICAgQ0hFQ0tfTk9OX05VTEwgKGZu KTsKKworICAgICBDSEVDS19WQUxVRSAoZm4gKDEuMSArIDIuMmkpLCAxKTsKKyAgICAgQ0hF Q0tfVkFMVUUgKGZuICgxLjEgKyAwLjBpKSwgMSk7CisgICAgIENIRUNLX1ZBTFVFIChmbiAo MC4wICsgMi4yaSksIDApOworICAgfQorICAgeworICAgICBjZF90b191YyBmbiA9IGdjY19q aXRfcmVzdWx0X2dldF9jb2RlIChyZXN1bHQsICJjb21wbGV4X2RvdWJsZV90b191X2NoYXIi KTsKKyAgICAgQ0hFQ0tfTk9OX05VTEwgKGZuKTsKKworICAgICBDSEVDS19WQUxVRSAoZm4g KDEuMSArIDIuMmkpLCAxKTsKKyAgICAgQ0hFQ0tfVkFMVUUgKGZuICgxLjEgKyAwLjBpKSwg MSk7CisgICAgIENIRUNLX1ZBTFVFIChmbiAoMC4wICsgMi4yaSksIDApOworICAgfQorICB9 CisKKyAgey8qIGNvbXBsZXggbG9uZyBkb3VibGUgdG8gLi4uICovCisgICB7CisgICAgIGNs ZF90b19sZCBmbiA9IGdjY19qaXRfcmVzdWx0X2dldF9jb2RlIChyZXN1bHQsICJjb21wbGV4 X2xvbmdfZG91YmxlX3RvX2xvbmdfZG91YmxlIik7CisgICAgIENIRUNLX05PTl9OVUxMIChm bik7CisKKyAgICAgQ0hFQ0tfVkFMVUUgKGZuICgxLjFMICsgMi4yTGkpLCAxLjFMKTsKKyAg ICAgQ0hFQ0tfVkFMVUUgKGZuICgxLjFMICsgMC4wTGkpLCAxLjFMKTsKKyAgICAgQ0hFQ0tf VkFMVUUgKGZuICgwLjBMICsgMi4yTGkpLCAwLik7CisgICB9CisgICB7CisgICAgIGNsZF90 b19kIGZuID0gZ2NjX2ppdF9yZXN1bHRfZ2V0X2NvZGUgKHJlc3VsdCwgImNvbXBsZXhfbG9u Z19kb3VibGVfdG9fZG91YmxlIik7CisgICAgIENIRUNLX05PTl9OVUxMIChmbik7CisKKyAg ICAgQ0hFQ0tfVkFMVUUgKGZuICgxLjFMICsgMi4yTGkpLCAxLjEpOworICAgICBDSEVDS19W QUxVRSAoZm4gKDEuMUwgKyAwLjBMaSksIDEuMSk7CisgICAgIENIRUNLX1ZBTFVFIChmbiAo MC4wTCArIDIuMkxpKSwgMC4pOworICAgfQorICAgeworICAgICBjbGRfdG9fZiBmbiA9IGdj Y19qaXRfcmVzdWx0X2dldF9jb2RlIChyZXN1bHQsICJjb21wbGV4X2xvbmdfZG91YmxlX3Rv X2Zsb2F0Iik7CisgICAgIENIRUNLX05PTl9OVUxMIChmbik7CisKKyAgICAgQ0hFQ0tfVkFM VUUgKGZuICgxLjFMICsgMi4yTGkpLCAxLjFmKTsKKyAgICAgQ0hFQ0tfVkFMVUUgKGZuICgx LjFMICsgMC4wTGkpLCAxLjFmKTsKKyAgICAgQ0hFQ0tfVkFMVUUgKGZuICgwLjBMICsgMi4y TGkpLCAwLik7CisgICB9CisgICB7CisgICAgIGNsZF90b19sbCBmbiA9IGdjY19qaXRfcmVz dWx0X2dldF9jb2RlIChyZXN1bHQsICJjb21wbGV4X2xvbmdfZG91YmxlX3RvX2xvbmdfbG9u ZyIpOworICAgICBDSEVDS19OT05fTlVMTCAoZm4pOworCisgICAgIENIRUNLX1ZBTFVFIChm biAoMS4xICsgMi4yaSksIDEpOworICAgICBDSEVDS19WQUxVRSAoZm4gKDEuMSArIDAuMGkp LCAxKTsKKyAgICAgQ0hFQ0tfVkFMVUUgKGZuICgwLjAgKyAyLjJpKSwgMCk7CisgICB9Cisg ICB7CisgICAgIGNsZF90b19sIGZuID0gZ2NjX2ppdF9yZXN1bHRfZ2V0X2NvZGUgKHJlc3Vs dCwgImNvbXBsZXhfbG9uZ19kb3VibGVfdG9fbG9uZyIpOworICAgICBDSEVDS19OT05fTlVM TCAoZm4pOworCisgICAgIENIRUNLX1ZBTFVFIChmbiAoMS4xICsgMi4yaSksIDEpOworICAg ICBDSEVDS19WQUxVRSAoZm4gKDEuMSArIDAuMGkpLCAxKTsKKyAgICAgQ0hFQ0tfVkFMVUUg KGZuICgwLjAgKyAyLjJpKSwgMCk7CisgICB9CisgICB7CisgICAgIGNsZF90b19pIGZuID0g Z2NjX2ppdF9yZXN1bHRfZ2V0X2NvZGUgKHJlc3VsdCwgImNvbXBsZXhfbG9uZ19kb3VibGVf dG9faW50Iik7CisgICAgIENIRUNLX05PTl9OVUxMIChmbik7CisKKyAgICAgQ0hFQ0tfVkFM VUUgKGZuICgxLjEgKyAyLjJpKSwgMSk7CisgICAgIENIRUNLX1ZBTFVFIChmbiAoMS4xICsg MC4waSksIDEpOworICAgICBDSEVDS19WQUxVRSAoZm4gKDAuMCArIDIuMmkpLCAwKTsKKyAg IH0KKyAgIHsKKyAgICAgY2xkX3RvX2ggZm4gPSBnY2Nfaml0X3Jlc3VsdF9nZXRfY29kZSAo cmVzdWx0LCAiY29tcGxleF9sb25nX2RvdWJsZV90b19zaG9ydCIpOworICAgICBDSEVDS19O T05fTlVMTCAoZm4pOworCisgICAgIENIRUNLX1ZBTFVFIChmbiAoMS4xICsgMi4yaSksIDEp OworICAgICBDSEVDS19WQUxVRSAoZm4gKDEuMSArIDAuMGkpLCAxKTsKKyAgICAgQ0hFQ0tf VkFMVUUgKGZuICgwLjAgKyAyLjJpKSwgMCk7CisgICB9CisgICB7CisgICAgIGNsZF90b19z YyBmbiA9IGdjY19qaXRfcmVzdWx0X2dldF9jb2RlIChyZXN1bHQsICJjb21wbGV4X2xvbmdf ZG91YmxlX3RvX3NpZ25lZF9jaGFyIik7CisgICAgIENIRUNLX05PTl9OVUxMIChmbik7CisK KyAgICAgQ0hFQ0tfVkFMVUUgKGZuICgxLjEgKyAyLjJpKSwgMSk7CisgICAgIENIRUNLX1ZB TFVFIChmbiAoMS4xICsgMC4waSksIDEpOworICAgICBDSEVDS19WQUxVRSAoZm4gKDAuMCAr IDIuMmkpLCAwKTsKKyAgIH0KKyAgIHsKKyAgICAgY2xkX3RvX2MgZm4gPSBnY2Nfaml0X3Jl c3VsdF9nZXRfY29kZSAocmVzdWx0LCAiY29tcGxleF9sb25nX2RvdWJsZV90b19jaGFyIik7 CisgICAgIENIRUNLX05PTl9OVUxMIChmbik7CisKKyAgICAgQ0hFQ0tfVkFMVUUgKGZuICgx LjEgKyAyLjJpKSwgMSk7CisgICAgIENIRUNLX1ZBTFVFIChmbiAoMS4xICsgMC4waSksIDEp OworICAgICBDSEVDS19WQUxVRSAoZm4gKDAuMCArIDIuMmkpLCAwKTsKKyAgIH0KKyAgIHsK KyAgICAgY2xkX3RvX3VsbCBmbiA9IGdjY19qaXRfcmVzdWx0X2dldF9jb2RlIChyZXN1bHQs ICJjb21wbGV4X2xvbmdfZG91YmxlX3RvX3VfbG9uZ19sb25nIik7CisgICAgIENIRUNLX05P Tl9OVUxMIChmbik7CisKKyAgICAgQ0hFQ0tfVkFMVUUgKGZuICgxLjEgKyAyLjJpKSwgMSk7 CisgICAgIENIRUNLX1ZBTFVFIChmbiAoMS4xICsgMC4waSksIDEpOworICAgICBDSEVDS19W QUxVRSAoZm4gKDAuMCArIDIuMmkpLCAwKTsKKyAgIH0KKyAgIHsKKyAgICAgY2xkX3RvX3Vs IGZuID0gZ2NjX2ppdF9yZXN1bHRfZ2V0X2NvZGUgKHJlc3VsdCwgImNvbXBsZXhfbG9uZ19k b3VibGVfdG9fdV9sb25nIik7CisgICAgIENIRUNLX05PTl9OVUxMIChmbik7CisKKyAgICAg Q0hFQ0tfVkFMVUUgKGZuICgxLjEgKyAyLjJpKSwgMSk7CisgICAgIENIRUNLX1ZBTFVFIChm biAoMS4xICsgMC4waSksIDEpOworICAgICBDSEVDS19WQUxVRSAoZm4gKDAuMCArIDIuMmkp LCAwKTsKKyAgIH0KKyAgIHsKKyAgICAgY2xkX3RvX3VpIGZuID0gZ2NjX2ppdF9yZXN1bHRf Z2V0X2NvZGUgKHJlc3VsdCwgImNvbXBsZXhfbG9uZ19kb3VibGVfdG9fdV9pbnQiKTsKKyAg ICAgQ0hFQ0tfTk9OX05VTEwgKGZuKTsKKworICAgICBDSEVDS19WQUxVRSAoZm4gKDEuMSAr IDIuMmkpLCAxKTsKKyAgICAgQ0hFQ0tfVkFMVUUgKGZuICgxLjEgKyAwLjBpKSwgMSk7Cisg ICAgIENIRUNLX1ZBTFVFIChmbiAoMC4wICsgMi4yaSksIDApOworICAgfQorICAgeworICAg ICBjbGRfdG9fdWggZm4gPSBnY2Nfaml0X3Jlc3VsdF9nZXRfY29kZSAocmVzdWx0LCAiY29t cGxleF9sb25nX2RvdWJsZV90b191X3Nob3J0Iik7CisgICAgIENIRUNLX05PTl9OVUxMIChm bik7CisKKyAgICAgQ0hFQ0tfVkFMVUUgKGZuICgxLjEgKyAyLjJpKSwgMSk7CisgICAgIENI RUNLX1ZBTFVFIChmbiAoMS4xICsgMC4waSksIDEpOworICAgICBDSEVDS19WQUxVRSAoZm4g KDAuMCArIDIuMmkpLCAwKTsKKyAgIH0KKyAgIHsKKyAgICAgY2xkX3RvX3VjIGZuID0gZ2Nj X2ppdF9yZXN1bHRfZ2V0X2NvZGUgKHJlc3VsdCwgImNvbXBsZXhfbG9uZ19kb3VibGVfdG9f dV9jaGFyIik7CisgICAgIENIRUNLX05PTl9OVUxMIChmbik7CisKKyAgICAgQ0hFQ0tfVkFM VUUgKGZuICgxLjEgKyAyLjJpKSwgMSk7CisgICAgIENIRUNLX1ZBTFVFIChmbiAoMS4xICsg MC4waSksIDEpOworICAgICBDSEVDS19WQUxVRSAoZm4gKDAuMCArIDIuMmkpLCAwKTsKKyAg IH0KKyAgfQorCisgIHsgLyogVHJ5IGNhc3RpbmcgY29tcGxleCB0eXBlcyB0byBjb21wbGV4 IHR5cGVzICovCisgICB7CisgICAgIGNsZF90b19jbGQgZm4gPSBnY2Nfaml0X3Jlc3VsdF9n ZXRfY29kZSAocmVzdWx0LCAiY29tcGxleF9sb25nX2RvdWJsZV90b19jb21wbGV4X2xvbmdf ZG91YmxlIik7CisgICAgIENIRUNLX05PTl9OVUxMIChmbik7CisKKyAgICAgQ0hFQ0tfVkFM VUUgKGZuICgxLjFMICsgMi4yTGkpLCAxLjFMICsgMi4yTGkpOworICAgICBDSEVDS19WQUxV RSAoZm4gKDEuMUwgKyAwLjBMaSksIDEuMUwgKyAwLjBMaSk7CisgICAgIENIRUNLX1ZBTFVF IChmbiAoMC4wTCArIDIuMkxpKSwgMC4wTCArIDIuMkxpKTsKKyAgIH0KKyAgIHsKKyAgICAg Y2xkX3RvX2NkIGZuID0gZ2NjX2ppdF9yZXN1bHRfZ2V0X2NvZGUgKHJlc3VsdCwgImNvbXBs ZXhfbG9uZ19kb3VibGVfdG9fY29tcGxleF9kb3VibGUiKTsKKyAgICAgQ0hFQ0tfTk9OX05V TEwgKGZuKTsKKworICAgICBDSEVDS19WQUxVRSAoZm4gKDEuMUwgKyAyLjJMaSksIDEuMSAr IDIuMmkpOworICAgICBDSEVDS19WQUxVRSAoZm4gKDEuMUwgKyAwLjBMaSksIDEuMSArIDAu MGkpOworICAgICBDSEVDS19WQUxVRSAoZm4gKDAuMEwgKyAyLjJMaSksIDAuMCArIDIuMmkp OworICAgfQorICAgeworICAgICBjbGRfdG9fY2YgZm4gPSBnY2Nfaml0X3Jlc3VsdF9nZXRf Y29kZSAocmVzdWx0LCAiY29tcGxleF9sb25nX2RvdWJsZV90b19jb21wbGV4X2Zsb2F0Iik7 CisgICAgIENIRUNLX05PTl9OVUxMIChmbik7CisKKyAgICAgQ0hFQ0tfVkFMVUUgKGZuICgx LjFMICsgMi4yTGkpLCAxLjFmICsgMi4yZmkpOworICAgICBDSEVDS19WQUxVRSAoZm4gKDEu MUwgKyAwLjBMaSksIDEuMWYgKyAwLjBmaSk7CisgICAgIENIRUNLX1ZBTFVFIChmbiAoMC4w TCArIDIuMkxpKSwgMC4wZiArIDIuMmZpKTsKKyAgIH0KKyAgIHsKKyAgICAgY2RfdG9fY2xk IGZuID0gZ2NjX2ppdF9yZXN1bHRfZ2V0X2NvZGUgKHJlc3VsdCwgImNvbXBsZXhfZG91Ymxl X3RvX2NvbXBsZXhfbG9uZ19kb3VibGUiKTsKKyAgICAgQ0hFQ0tfTk9OX05VTEwgKGZuKTsK KworICAgICBDSEVDS19WQUxVRSAoZm4gKDEuMSArIDIuMmkpLCAxLjEgKyAyLjJpKTsKKyAg ICAgQ0hFQ0tfVkFMVUUgKGZuICgxLjEgKyAwLjBpKSwgMS4xICsgMC4waSk7CisgICAgIENI RUNLX1ZBTFVFIChmbiAoMC4wICsgMi4yaSksIDAuMCArIDIuMmkpOworICAgfQorICAgewor ICAgICBjZF90b19jZCBmbiA9IGdjY19qaXRfcmVzdWx0X2dldF9jb2RlIChyZXN1bHQsICJj b21wbGV4X2RvdWJsZV90b19jb21wbGV4X2RvdWJsZSIpOworICAgICBDSEVDS19OT05fTlVM TCAoZm4pOworCisgICAgIENIRUNLX1ZBTFVFIChmbiAoMS4xICsgMi4yaSksIDEuMSArIDIu MmkpOworICAgICBDSEVDS19WQUxVRSAoZm4gKDEuMSArIDAuMGkpLCAxLjEgKyAwLjBpKTsK KyAgICAgQ0hFQ0tfVkFMVUUgKGZuICgwLjAgKyAyLjJpKSwgMC4wICsgMi4yaSk7CisgICB9 CisgICB7CisgICAgIGNkX3RvX2NmIGZuID0gZ2NjX2ppdF9yZXN1bHRfZ2V0X2NvZGUgKHJl c3VsdCwgImNvbXBsZXhfZG91YmxlX3RvX2NvbXBsZXhfZmxvYXQiKTsKKyAgICAgQ0hFQ0tf Tk9OX05VTEwgKGZuKTsKKworICAgICBDSEVDS19WQUxVRSAoZm4gKDEuMSArIDIuMmkpLCAx LjFmICsgMi4yZmkpOworICAgICBDSEVDS19WQUxVRSAoZm4gKDEuMSArIDAuMGkpLCAxLjFm ICsgMC4wZmkpOworICAgICBDSEVDS19WQUxVRSAoZm4gKDAuMCArIDIuMmkpLCAwLjBmICsg Mi4yZmkpOworICAgfQorICAgeworICAgICBjZl90b19jbGQgZm4gPSBnY2Nfaml0X3Jlc3Vs dF9nZXRfY29kZSAocmVzdWx0LCAiY29tcGxleF9mbG9hdF90b19jb21wbGV4X2xvbmdfZG91 YmxlIik7CisgICAgIENIRUNLX05PTl9OVUxMIChmbik7CisKKyAgICAgQ0hFQ0tfVkFMVUUg KGZuICgxLjEgKyAyLjJpKSwgMS4xZiArIDIuMmZpKTsKKyAgICAgQ0hFQ0tfVkFMVUUgKGZu ICgxLjEgKyAwLjBpKSwgMS4xZiArIDAuMGZpKTsKKyAgICAgQ0hFQ0tfVkFMVUUgKGZuICgw LjAgKyAyLjJpKSwgMC4wZiArIDIuMmZpKTsKKyAgIH0KKyAgIHsKKyAgICAgY2ZfdG9fY2Qg Zm4gPSBnY2Nfaml0X3Jlc3VsdF9nZXRfY29kZSAocmVzdWx0LCAiY29tcGxleF9mbG9hdF90 b19jb21wbGV4X2RvdWJsZSIpOworICAgICBDSEVDS19OT05fTlVMTCAoZm4pOworCisgICAg IENIRUNLX1ZBTFVFIChmbiAoMS4xICsgMi4yaSksIDEuMWYgKyAyLjJmaSk7CisgICAgIENI RUNLX1ZBTFVFIChmbiAoMS4xICsgMC4waSksIDEuMWYgKyAwLjBmaSk7CisgICAgIENIRUNL X1ZBTFVFIChmbiAoMC4wICsgMi4yaSksIDAuMGYgKyAyLjJmaSk7CisgICB9CisgICB7Cisg ICAgIGNmX3RvX2NmIGZuID0gZ2NjX2ppdF9yZXN1bHRfZ2V0X2NvZGUgKHJlc3VsdCwgImNv bXBsZXhfZmxvYXRfdG9fY29tcGxleF9mbG9hdCIpOworICAgICBDSEVDS19OT05fTlVMTCAo Zm4pOworCisgICAgIENIRUNLX1ZBTFVFIChmbiAoMS4xICsgMi4yaSksIDEuMWYgKyAyLjJm aSk7CisgICAgIENIRUNLX1ZBTFVFIChmbiAoMS4xICsgMC4waSksIDEuMWYgKyAwLjBmaSk7 CisgICAgIENIRUNLX1ZBTFVFIChmbiAoMC4wICsgMi4yaSksIDAuMGYgKyAyLjJmaSk7Cisg ICB9CisgIH0KKworICB7LyogVGVzdCBzb21lIG9mIHRoZSBub24tY29tcGxleCB0byBub24t Y29tcGxleC9jb21wbGV4IGNhc3RzICAqLworICAgIHsKKyAgICAgIF9Db21wbGV4IGZsb2F0 KCpmbikoZmxvYXQpID0gZ2NjX2ppdF9yZXN1bHRfZ2V0X2NvZGUgKHJlc3VsdCwgImZsb2F0 X3RvX2NvbXBsZXhfZmxvYXQiKTsKKyAgICAgIENIRUNLX1ZBTFVFICggZm4oMy5mKSwgMy5m KTsKKyAgICB9CisgICAgeworICAgICAgX0NvbXBsZXggZmxvYXQoKmZuKShpbnQpID0gZ2Nj X2ppdF9yZXN1bHRfZ2V0X2NvZGUgKHJlc3VsdCwgImludF90b19jb21wbGV4X2Zsb2F0Iik7 CisgICAgICBDSEVDS19WQUxVRSAoIGZuKC0zKSwgLTMuZik7CisgICAgfQorICAgIHsKKyAg ICAgIF9Db21wbGV4IGRvdWJsZSgqZm4pKHVuc2lnbmVkIGxvbmcpID0gZ2NjX2ppdF9yZXN1 bHRfZ2V0X2NvZGUgKHJlc3VsdCwgInVuc2lnbmVkX2xvbmdfdG9fY29tcGxleF9kb3VibGUi KTsKKyAgICAgIENIRUNLX1ZBTFVFICggZm4oMyksIDMuZik7CisgICAgfQorICAgIHsKKyAg ICAgIGRvdWJsZSgqZm4pKGludCkgPSBnY2Nfaml0X3Jlc3VsdF9nZXRfY29kZSAocmVzdWx0 LCAiaW50X3RvX2RvdWJsZSIpOworICAgICAgQ0hFQ0tfVkFMVUUgKCBmbigzKSwgMy5mKTsK KyAgICB9CisgICAgeworICAgICAgaW50KCpmbikoZmxvYXQpID0gZ2NjX2ppdF9yZXN1bHRf Z2V0X2NvZGUgKHJlc3VsdCwgImZsb2F0X3RvX2ludCIpOworICAgICAgQ0hFQ0tfVkFMVUUg KCBmbigzLiksIDMpOworICAgIH0KKyAgfQorfQpkaWZmIC0tZ2l0IGEvZ2NjL3Rlc3RzdWl0 ZS9qaXQuZGcvdGVzdC1lcnJvci1jb21wbGV4LW5vZW5hYmxlLmMgYi9nY2MvdGVzdHN1aXRl L2ppdC5kZy90ZXN0LWVycm9yLWNvbXBsZXgtbm9lbmFibGUuYwpuZXcgZmlsZSBtb2RlIDEw MDY0NAppbmRleCAwMDAwMDAwMDAwMC4uMGE3YmExMzFmMjgKLS0tIC9kZXYvbnVsbAorKysg Yi9nY2MvdGVzdHN1aXRlL2ppdC5kZy90ZXN0LWVycm9yLWNvbXBsZXgtbm9lbmFibGUuYwpA QCAtMCwwICsxLDMxIEBACisvKgorICBUZXN0IHRoYXQgd2UgY2FuJ3QgZ2V0IGEgY29tcGxl eCB0eXBlIHdpdGhvdXQgZW5hYmxpbmcgdGhlbSBmaXJzdAorICB3aXRoCisgICAgZ2NjX2pp dF9jb250ZXh0X3NldF9ib29sX2VuYWJsZV9jb21wbGV4X3R5cGVzIChjdHh0LCAxKTsKKyov CisKKyNpbmNsdWRlICJsaWJnY2NqaXQuaCIKKyNpbmNsdWRlICJoYXJuZXNzLmgiCisKK3Zv aWQKK2NyZWF0ZV9jb2RlIChnY2Nfaml0X2NvbnRleHQgKmN0eHQsIHZvaWQgKnVzZXJfZGF0 YSkKK3sKKyAgKHZvaWQpIHVzZXJfZGF0YTsKKworICBnY2Nfaml0X3R5cGUgKnR0ID0gZ2Nj X2ppdF9jb250ZXh0X2dldF90eXBlIChjdHh0LAorCQkJCQkgICAgICAgR0NDX0pJVF9UWVBF X0NPTVBMRVhfRE9VQkxFKTsKKyAgQ0hFQ0tfVkFMVUUgKHR0LCBOVUxMKTsKK30KKwordm9p ZAordmVyaWZ5X2NvZGUgKGdjY19qaXRfY29udGV4dCAqY3R4dCwgZ2NjX2ppdF9yZXN1bHQg KnJlc3VsdCkKK3sKKyAgLyogVmVyaWZ5IHRoYXQgdGhlIGRpYWdub3N0aWMgbGVkIHRvIHRo ZSBjb250ZXh0IGZhaWxpbmcuLi4gKi8KKyAgQ0hFQ0tfVkFMVUUgKHJlc3VsdCwgTlVMTCk7 CisKKyAgLyogLi4uYW5kIHRoYXQgdGhlIG1lc3NhZ2Ugd2FzIGNhcHR1cmVkIGJ5IHRoZSBB UEkuICAqLworICBDSEVDS19TVFJJTkdfVkFMVUUgKGdjY19qaXRfY29udGV4dF9nZXRfZmly c3RfZXJyb3IgKGN0eHQpLAorCQkgICAgICAiZ2NjX2ppdF9jb250ZXh0X2dldF90eXBlOiBj b21wbGV4IHR5cGVzIGFyZSBvbmx5ICIKKwkJICAgICAgImF2YWlsYWJsZSBhZnRlciBlbmFi bGluZyB0aGVtIHdpdGggIgorCQkgICAgICAiZ2NjX2ppdF9jb250ZXh0X3NldF9ib29sX2Vu YWJsZV9jb21wbGV4X3R5cGVzKCkiKTsKK30KLS0gCjIuNDIuMAoK --------------luoXfkT5B80ulEydM5V6Or6U--