From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mail-wm1-x330.google.com (mail-wm1-x330.google.com [IPv6:2a00:1450:4864:20::330]) by sourceware.org (Postfix) with ESMTPS id 4FA683858C56; Thu, 4 Apr 2024 17:25:54 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.2 sourceware.org 4FA683858C56 Authentication-Results: sourceware.org; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: sourceware.org; spf=pass smtp.mailfrom=gmail.com ARC-Filter: OpenARC Filter v1.0.0 sourceware.org 4FA683858C56 Authentication-Results: server2.sourceware.org; arc=none smtp.remote-ip=2a00:1450:4864:20::330 ARC-Seal: i=1; a=rsa-sha256; d=sourceware.org; s=key; t=1712251561; cv=none; b=dryThD61d6/R1u23YeyQdUIm3ZZ2jHJ0bfq/PIvdjDdZG6jUkMH6SHE+oTSIBqPBG1EWehE7WIKUer5rR96tpmdSLBRlG0r38HYEsjSNY1PXHp7Q7OIUO8NtbFOmOHSsweDTe6C7Gfz1J0uXpYIQs/dmZD8NL5k1OzxCOCmbn3s= ARC-Message-Signature: i=1; a=rsa-sha256; d=sourceware.org; s=key; t=1712251561; c=relaxed/simple; bh=zP73Eacub79++ZTAFwlhGvhtVOxdVufVDHVLTh1qZ8Y=; h=DKIM-Signature:Message-ID:Date:MIME-Version:Subject:To:From; b=hU+qOiydzlOCJE4i/wba0zhS4Z+XDNYZBw9pylDZztadYtf2tlKcWCfmWDR2xJSQLkBobHaAcOOMaPZsYocTzIR8jiFLvlTchB9RfPxfZqo5d5clsvLXm5bJQDEvMt8KFaT2KVcsDMHeUj44WG3Ey12NAnrswr+BKgX7pNuOcDk= ARC-Authentication-Results: i=1; server2.sourceware.org Received: by mail-wm1-x330.google.com with SMTP id 5b1f17b1804b1-41551639550so9300945e9.2; Thu, 04 Apr 2024 10:25:54 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1712251553; x=1712856353; darn=gcc.gnu.org; h=in-reply-to:from:content-language:references:cc:to:subject :user-agent:mime-version:date:message-id:from:to:cc:subject:date :message-id:reply-to; bh=w9XI1glbb3Fig60jtGjSIZIbJ+nL2vseZl9sGUpNMqE=; b=Xh7fQ+qHS52EV0LmNKAptnnAhjjP37DjGhZKp0juT5NHex5+lxIG4YN5yEoHGc6sbp Sirmk/bgBTpPRz4W3ykGbuqv188Zv340NlRnGL2AzlGU/c4YL62fxtfqj3NXmj1R9KT7 1EkTPAMx24pbd1+6BEzWhcR5mOwDmfmQZs60G6ZoIGzYwIMJ8pTieXp3J9Nm35O4c6dY Ipdov6CxI3x8F6n2QH9blt9jgmFk8l39l/LcvV/Ut5yPhRrUicZc0HRX7j51qDlN9mJD YvFR9iY0Fr6IqifTx2iZ9GAi7gjtm3N++w3Ww+zyquimDMCPX9XEMY1Wc36sab1CgHF/ VyzQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1712251553; x=1712856353; h=in-reply-to:from:content-language:references:cc:to:subject :user-agent:mime-version:date:message-id:x-gm-message-state:from:to :cc:subject:date:message-id:reply-to; bh=w9XI1glbb3Fig60jtGjSIZIbJ+nL2vseZl9sGUpNMqE=; b=XOMl5aydGT1o3xUn0GNPLFEHhlttAH7L7xESp2yfEcozkBJhUMvQBss92sF1ZsH1NW vsBYm4/TTFc8RHKnfsh1bLy4yWS6tvBDTgqmV0Zxi/J63iqAMdYq4k+/OmGr9GL8VjwJ +o1yfpORV5tL3RLUC6zn+08tTv2w52gBvzlWUNotyIgoJYaly+xFW8Ao8dbPJMd/ncIw kjhT78ymyRarCiHt2ilCbRiNe9QJDXbwbWDZ5bPC2H93KKq9wr7+DGcwXcdAQ7JKY8DS vB2MYcFyAimLDkuSg7T4i0DVAwzA2Mk2IFk+IJxwLRDdt8mQ6fgP7bIi6/dlY4souBm6 BBhg== X-Forwarded-Encrypted: i=1; AJvYcCVHVBxMdYSxgJiIdyuKBt+t+0pndiaSraIEvnlFniqdc7BJwL1YRIlSR6BykxZUNJOiIUizQJ2C8LVcqM4zTbPyCfZditT+xQ== X-Gm-Message-State: AOJu0YzjYPXC68RH4ffLGWNxr8BcF4eaZcYaPJhVYui2t12mNcS4KzgQ z6cy2zONp0CGOU/rx8zGKfTbZjLigIYEyh3cWR8ZOLPd172WvBpRyYgbhBwZm94= X-Google-Smtp-Source: AGHT+IF+Y0yQ8HrjUj5deWp1vRhV7/4fMbQAvQKNw6U78ccAJ7GLxbLgX0QOXm3oH1q+y0ozIueIbA== X-Received: by 2002:a05:600c:5706:b0:414:113b:36a6 with SMTP id jv6-20020a05600c570600b00414113b36a6mr294189wmb.25.1712251552597; Thu, 04 Apr 2024 10:25:52 -0700 (PDT) Received: from [10.55.0.193] ([89.207.171.131]) by smtp.gmail.com with ESMTPSA id k6-20020a05600c1c8600b00416244a53b8sm3456906wms.4.2024.04.04.10.25.50 (version=TLS1_3 cipher=TLS_AES_128_GCM_SHA256 bits=128/128); Thu, 04 Apr 2024 10:25:51 -0700 (PDT) Content-Type: multipart/mixed; boundary="------------fWtQ9mWmZj95WU5oiBWfjqsb" Message-ID: Date: Thu, 4 Apr 2024 19:24:33 +0200 MIME-Version: 1.0 User-Agent: Mozilla Thunderbird Subject: Re: [PATCH] Reimplement __gnu_cxx::__ops operators To: Jonathan Wakely Cc: libstdc++ , gcc-patches References: <6b960f74-7ef7-8c3f-20bd-3f5a19d1f449@gmail.com> <9c9d0f26-4ca9-4c1b-86fa-63bc65d21ecf@gmail.com> Content-Language: en-US From: =?UTF-8?Q?Fran=C3=A7ois_Dumont?= In-Reply-To: X-Spam-Status: No, score=-10.9 required=5.0 tests=BAYES_00,DKIM_SIGNED,DKIM_VALID,DKIM_VALID_AU,DKIM_VALID_EF,FREEMAIL_FROM,GIT_PATCH_0,RCVD_IN_DNSWL_NONE,SPF_HELO_NONE,SPF_PASS,TXREP autolearn=ham autolearn_force=no version=3.4.6 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. --------------fWtQ9mWmZj95WU5oiBWfjqsb Content-Type: text/plain; charset=UTF-8; format=flowed Content-Transfer-Encoding: 8bit On 07/12/2023 15:04, Jonathan Wakely wrote: > On Thu, 7 Dec 2023 at 13:41, Jonathan Wakely wrote: >> On Wed, 6 Dec 2023 at 20:55, François Dumont wrote: >>> I think I still got no feedback about this cleanup proposal. >> Can you remind me why we have all those different functions in >> predefined_ops.h in the first place? I think it was to avoid having >> two versions of every algorithm, one that does *l < *r and one that >> does pred(*l, *r), right? Right ! >> >> One property of the current code is that _Iter_less_iter will compare >> exactly *lhs < *rhs and so works even with this type, where its >> operator< only accepts non-const arguments: >> >> struct X { bool operator<(X&); }; >> >> Doesn't your simplification break that, because the _Less function >> only accepts const references now? Yes, I thought it was ok to force users to do the right thing, make operators const-qualified and use mutable when they want to do fancy things. But you think otherwise so here is another version more user-friendly. In addition to simplifying, I think, predefined-ops it also implements perfect-forwarding of user functors. Some algos in stl_heap.h were already taking functor by ref. I wanted to show it to you now because thanks to this patch I have an interesting failure that I cannot really explain. I just guess that the new version allow more inline-ment and triggers this: In member function 'void std::__new_allocator<_Tp>::deallocate(_Tp*, size_type) [with _Tp = int]',     inlined from 'constexpr void std::allocator< >::deallocate(_Tp*, std::size_t) [with _Tp = int]' at /home/fdumont/dev/gcc/build/x86_64-pc-linux-gnu/libstdc++-v3/include/bits/allocator .h:208,     inlined from 'static constexpr void std::allocator_traits >::deallocate(allocator_type&, pointer, size_type) [with _Tp = int]' at /home/fdumont/dev/gcc/build/x86_64-pc-linux-gnu/libstd c++-v3/include/bits/alloc_traits.h:513,     inlined from 'constexpr void std::_Vector_base<_Tp, _Alloc>::_M_deallocate(pointer, std::size_t) [with _Tp = int; _Alloc = std::allocator]' at /home/fdumont/dev/gcc/build/x86_64-pc-linux-gnu/libstdc++-v 3/include/bits/stl_vector.h:389,     inlined from 'constexpr void std::_Vector_base<_Tp, _Alloc>::_M_deallocate(pointer, std::size_t) [with _Tp = int; _Alloc = std::allocator]' at /home/fdumont/dev/gcc/build/x86_64-pc-linux-gnu/libstdc++-v 3/include/bits/stl_vector.h:385,     inlined from 'constexpr std::_Vector_base<_Tp, _Alloc>::~_Vector_base() [with _Tp = int; _Alloc = std::allocator]' at /home/fdumont/dev/gcc/build/x86_64-pc-linux-gnu/libstdc++-v3/include/bits/stl_vector .h:368,     inlined from 'constexpr std::vector<_Tp, _Alloc>::~vector() [with _Tp = int; _Alloc = std::allocator]' at /home/fdumont/dev/gcc/build/x86_64-pc-linux-gnu/libstdc++-v3/include/bits/stl_vector.h:738,     inlined from 'void test01()' at /home/fdumont/dev/gcc/git/libstdc++-v3/testsuite/25_algorithms/merge/constrained.cc:52: /home/fdumont/dev/gcc/build/x86_64-pc-linux-gnu/libstdc++-v3/include/bits/new_allocator.h:172: warning: 'void operator delete(void*, std::size_t)' called on pointer '' with nonzero offset [4, 20] [-Wfre e-nonheap-object] In member function '_Tp* std::__new_allocator<_Tp>::allocate(size_type, const void*) [with _Tp = int]',     inlined from 'constexpr _Tp* std::allocator< >::allocate(std::size_t) [with _Tp = int]' at /home/fdumont/dev/gcc/build/x86_64-pc-linux-gnu/libstdc++-v3/include/bits/allocator.h:196,     inlined from 'static constexpr _Tp* std::allocator_traits >::allocate(allocator_type&, size_type) [with _Tp = int]' at /home/fdumont/dev/gcc/build/x86_64-pc-linux-gnu/libstdc++-v3/incl ude/bits/alloc_traits.h:478,     inlined from 'constexpr std::_Vector_base<_Tp, _Alloc>::pointer std::_Vector_base<_Tp, _Alloc>::_M_allocate(std::size_t) [with _Tp = int; _Alloc = std::allocator]' at /home/fdumont/dev/gcc/build/x86_64- pc-linux-gnu/libstdc++-v3/include/bits/stl_vector.h:380,     inlined from 'constexpr void std::vector<_Tp, _Alloc>::_M_range_initialize(_ForwardIterator, _ForwardIterator, std::forward_iterator_tag) [with _ForwardIterator = int*; _Tp = int; _Alloc = std::allocator]' at /home/fdumont/dev/gcc/build/x86_64-pc-linux-gnu/libstdc++-v3/include/bits/stl_vector.h:1694,     inlined from 'constexpr std::vector<_Tp, _Alloc>::vector(_InputIterator, _InputIterator, const allocator_type&) [with _InputIterator = int*; = void; _Tp = int; _Alloc = std::allocato r]' at /home/fdumont/dev/gcc/build/x86_64-pc-linux-gnu/libstdc++-v3/include/bits/stl_vector.h:711,     inlined from 'void test01()' at /home/fdumont/dev/gcc/git/libstdc++-v3/testsuite/25_algorithms/merge/constrained.cc:47: /home/fdumont/dev/gcc/build/x86_64-pc-linux-gnu/libstdc++-v3/include/bits/new_allocator.h:151: note: returned from 'void* operator new(std::size_t)' FAIL: 25_algorithms/merge/constrained.cc  -std=gnu++20 (test for excess errors) Just in case there is something to do before gcc 14 release... François --------------fWtQ9mWmZj95WU5oiBWfjqsb Content-Type: text/plain; charset=UTF-8; name="predefined_ops_patch.txt" Content-Disposition: attachment; filename="predefined_ops_patch.txt" Content-Transfer-Encoding: base64 ZGlmZiAtLWdpdCBhL2xpYnN0ZGMrKy12My9pbmNsdWRlL2JpdHMvbW92ZS5oIGIvbGlic3Rk YysrLXYzL2luY2x1ZGUvYml0cy9tb3ZlLmgKaW5kZXggYmIyMDBjOTU5NjQuLjI0Zjg3YWU0 MDk1IDEwMDY0NAotLS0gYS9saWJzdGRjKystdjMvaW5jbHVkZS9iaXRzL21vdmUuaAorKysg Yi9saWJzdGRjKystdjMvaW5jbHVkZS9iaXRzL21vdmUuaApAQCAtMTgxLDEwICsxODEsMTIg QEAgX0dMSUJDWFhfQkVHSU5fTkFNRVNQQUNFX1ZFUlNJT04KICAgLy8vIEB9IGdyb3VwIHV0 aWxpdGllcwogCiAjZGVmaW5lIF9HTElCQ1hYX0ZXRFJFRihfVHApIF9UcCYmCisjZGVmaW5l IF9HTElCQ1hYX0ZXRENSRUYoX1RwKSBfVHAmJgogI2RlZmluZSBfR0xJQkNYWF9NT1ZFKF9f dmFsKSBzdGQ6Om1vdmUoX192YWwpCiAjZGVmaW5lIF9HTElCQ1hYX0ZPUldBUkQoX1RwLCBf X3ZhbCkgc3RkOjpmb3J3YXJkPF9UcD4oX192YWwpCiAjZWxzZQotI2RlZmluZSBfR0xJQkNY WF9GV0RSRUYoX1RwKSBjb25zdCBfVHAmCisjZGVmaW5lIF9HTElCQ1hYX0ZXRFJFRihfVHAp IF9UcCYKKyNkZWZpbmUgX0dMSUJDWFhfRldEQ1JFRihfVHApIGNvbnN0IF9UcCYKICNkZWZp bmUgX0dMSUJDWFhfTU9WRShfX3ZhbCkgKF9fdmFsKQogI2RlZmluZSBfR0xJQkNYWF9GT1JX QVJEKF9UcCwgX192YWwpIChfX3ZhbCkKICNlbmRpZgpkaWZmIC0tZ2l0IGEvbGlic3RkYysr LXYzL2luY2x1ZGUvYml0cy9wcmVkZWZpbmVkX29wcy5oIGIvbGlic3RkYysrLXYzL2luY2x1 ZGUvYml0cy9wcmVkZWZpbmVkX29wcy5oCmluZGV4IGY3MmQ1MTEyMTBhLi5jYjkwMTdiNjg0 MCAxMDA2NDQKLS0tIGEvbGlic3RkYysrLXYzL2luY2x1ZGUvYml0cy9wcmVkZWZpbmVkX29w cy5oCisrKyBiL2xpYnN0ZGMrKy12My9pbmNsdWRlL2JpdHMvcHJlZGVmaW5lZF9vcHMuaApA QCAtMzEsMzc3ICszMSw1MjMgQEAKICNkZWZpbmUgX0dMSUJDWFhfUFJFREVGSU5FRF9PUFNf SAkxCiAKICNpbmNsdWRlIDxiaXRzL21vdmUuaD4KKyNpbmNsdWRlIDxiaXRzL3N0bF9pdGVy YXRvcl9iYXNlX3R5cGVzLmg+CisKKyNpZiBfX2NwbHVzcGx1cyA+PSAyMDExMDNMCisjIGlu Y2x1ZGUgPGJpdHMvaW52b2tlLmg+CisjZW5kaWYKIAogbmFtZXNwYWNlIF9fZ251X2N4eAog ewogbmFtZXNwYWNlIF9fb3BzCiB7Ci0gIHN0cnVjdCBfSXRlcl9sZXNzX2l0ZXIKKyNpZiBf X2NwbHVzcGx1cyA+PSAyMDExMDNMCisgIHN0cnVjdCBfTGVzcwogICB7Ci0gICAgdGVtcGxh dGU8dHlwZW5hbWUgX0l0ZXJhdG9yMSwgdHlwZW5hbWUgX0l0ZXJhdG9yMj4KKyAgICB0ZW1w bGF0ZTx0eXBlbmFtZSBfTGhzLCB0eXBlbmFtZSBfUmhzPgogICAgICAgX0dMSUJDWFgxNF9D T05TVEVYUFIKICAgICAgIGJvb2wKLSAgICAgIG9wZXJhdG9yKCkoX0l0ZXJhdG9yMSBfX2l0 MSwgX0l0ZXJhdG9yMiBfX2l0MikgY29uc3QKLSAgICAgIHsgcmV0dXJuICpfX2l0MSA8ICpf X2l0MjsgfQorICAgICAgb3BlcmF0b3IoKShfTGhzJiYgX19saHMsIF9SaHMmJiBfX3Jocykg Y29uc3QKKyAgICAgIG5vZXhjZXB0KCBub2V4Y2VwdChfX2xocyA8IF9fcmhzKSApCisgICAg ICB7IHJldHVybiBfX2xocyA8IF9fcmhzOyB9CiAgIH07CisjZWxzZQorICB0ZW1wbGF0ZTx0 eXBlbmFtZSBfUmVmMSwgdHlwZW5hbWUgX1JlZjI+CisgICAgc3RydWN0IF9MZXNzUmVmcwor ICAgIHsKKyAgICAgIGJvb2wKKyAgICAgIG9wZXJhdG9yKCkoX1JlZjEgX19saHMsIF9SZWYy IF9fcmhzKSBjb25zdAorICAgICAgeyByZXR1cm4gX19saHMgPCBfX3JoczsgfQogCi0gIF9H TElCQ1hYMTRfQ09OU1RFWFBSCi0gIGlubGluZSBfSXRlcl9sZXNzX2l0ZXIKLSAgX19pdGVy X2xlc3NfaXRlcigpCi0gIHsgcmV0dXJuIF9JdGVyX2xlc3NfaXRlcigpOyB9CisgICAgICBi b29sCisgICAgICBvcGVyYXRvcigpKF9SZWYyIF9fbGhzLCBfUmVmMSBfX3JocykgY29uc3QK KyAgICAgIHsgcmV0dXJuIF9fbGhzIDwgX19yaHM7IH0KIAotICBzdHJ1Y3QgX0l0ZXJfbGVz c192YWwKLSAgewotI2lmIF9fY3BsdXNwbHVzID49IDIwMTEwM0wKLSAgICBjb25zdGV4cHIg X0l0ZXJfbGVzc192YWwoKSA9IGRlZmF1bHQ7Ci0jZWxzZQotICAgIF9JdGVyX2xlc3NfdmFs KCkgeyB9Ci0jZW5kaWYKKyAgICAgIGJvb2wKKyAgICAgIG9wZXJhdG9yKCkoX1JlZjEgX19s aHMsIF9SZWYxIF9fcmhzKSBjb25zdAorICAgICAgeyByZXR1cm4gX19saHMgPCBfX3Joczsg fQogCi0gICAgX0dMSUJDWFgyMF9DT05TVEVYUFIKLSAgICBleHBsaWNpdAotICAgIF9JdGVy X2xlc3NfdmFsKF9JdGVyX2xlc3NfaXRlcikgeyB9CisgICAgICBib29sCisgICAgICBvcGVy YXRvcigpKF9SZWYyIF9fbGhzLCBfUmVmMiBfX3JocykgY29uc3QKKyAgICAgIHsgcmV0dXJu IF9fbGhzIDwgX19yaHM7IH0KKyAgICB9OwogCi0gICAgdGVtcGxhdGU8dHlwZW5hbWUgX0l0 ZXJhdG9yLCB0eXBlbmFtZSBfVmFsdWU+Ci0gICAgICBfR0xJQkNYWDIwX0NPTlNURVhQUgor ICB0ZW1wbGF0ZTx0eXBlbmFtZSBfUmVmPgorICAgIHN0cnVjdCBfTGVzc1JlZnM8X1JlZiwg X1JlZj4KKyAgICB7CiAgICAgICBib29sCi0gICAgICBvcGVyYXRvcigpKF9JdGVyYXRvciBf X2l0LCBfVmFsdWUmIF9fdmFsKSBjb25zdAotICAgICAgeyByZXR1cm4gKl9faXQgPCBfX3Zh bDsgfQorICAgICAgb3BlcmF0b3IoKShfUmVmIF9fbGhzLCBfUmVmIF9fcmhzKSBjb25zdAor ICAgICAgeyByZXR1cm4gX19saHMgPCBfX3JoczsgfQogICAgIH07CiAKLSAgX0dMSUJDWFgy MF9DT05TVEVYUFIKLSAgaW5saW5lIF9JdGVyX2xlc3NfdmFsCi0gIF9faXRlcl9sZXNzX3Zh bCgpCi0gIHsgcmV0dXJuIF9JdGVyX2xlc3NfdmFsKCk7IH0KKyAgdGVtcGxhdGU8dHlwZW5h bWUgX0l0ZTEsIHR5cGVuYW1lIF9JdGUyPgorICAgIHN0cnVjdCBfTGVzcworICAgIDogX0xl c3NSZWZzPHR5cGVuYW1lIHN0ZDo6aXRlcmF0b3JfdHJhaXRzPF9JdGUxPjo6cmVmZXJlbmNl LAorCQl0eXBlbmFtZSBzdGQ6Oml0ZXJhdG9yX3RyYWl0czxfSXRlMj46OnJlZmVyZW5jZT4K KyAgICB7IH07CisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX0l0ZT4KKyAgICBzdHJ1Y3QgX0xl c3NDUmVmCisgICAgOiBfTGVzc1JlZnM8dHlwZW5hbWUgc3RkOjppdGVyYXRvcl90cmFpdHM8 X0l0ZT46OnJlZmVyZW5jZSwKKwkJY29uc3QgdHlwZW5hbWUgc3RkOjppdGVyYXRvcl90cmFp dHM8X0l0ZT46OnZhbHVlX3R5cGUmPgorICAgIHsgfTsKKyNlbmRpZgogCi0gIF9HTElCQ1hY MjBfQ09OU1RFWFBSCi0gIGlubGluZSBfSXRlcl9sZXNzX3ZhbAotICBfX2l0ZXJfY29tcF92 YWwoX0l0ZXJfbGVzc19pdGVyKQotICB7IHJldHVybiBfSXRlcl9sZXNzX3ZhbCgpOyB9Cisj aWYgX19jcGx1c3BsdXMgPj0gMjAxMTAzTAorICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSXRlMSwg dHlwZW5hbWUgX0l0ZTI+CisgICAgY29uc3RleHByIF9MZXNzCisgICAgX19sZXNzKF9JdGUx LCBfSXRlMikgbm9leGNlcHQKKyAgICB7IHJldHVybiBfTGVzc3t9OyB9CisKKyAgY29uc3Rl eHByIF9MZXNzCisgIF9fbGVzcygpIG5vZXhjZXB0CisgIHsgcmV0dXJuIF9MZXNze307IH0K KyNlbHNlCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9JdGUxLCB0eXBlbmFtZSBfSXRlMj4KKyAg ICBpbmxpbmUgX0xlc3M8X0l0ZTEsIF9JdGUyPgorICAgIF9fbGVzcyhfSXRlMSwgX0l0ZTIp CisgICAgeyByZXR1cm4gX0xlc3M8X0l0ZTEsIF9JdGUyPigpOyB9CisjZW5kaWYKIAotICBz dHJ1Y3QgX1ZhbF9sZXNzX2l0ZXIKLSAgewogI2lmIF9fY3BsdXNwbHVzID49IDIwMTEwM0wK LSAgICBjb25zdGV4cHIgX1ZhbF9sZXNzX2l0ZXIoKSA9IGRlZmF1bHQ7CisgIHRlbXBsYXRl PHR5cGVuYW1lIF9JdGU+CisgICAgY29uc3RleHByIF9MZXNzCisgICAgX19sZXNzKF9JdGUp IG5vZXhjZXB0CisgICAgeyByZXR1cm4gX0xlc3N7fTsgfQogI2Vsc2UKLSAgICBfVmFsX2xl c3NfaXRlcigpIHsgfQorICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSXRlPgorICAgIGlubGluZSBf TGVzc0NSZWY8X0l0ZT4KKyAgICBfX2xlc3MoX0l0ZSkKKyAgICB7IHJldHVybiBfTGVzc0NS ZWY8X0l0ZT4oKTsgfQogI2VuZGlmCiAKLSAgICBfR0xJQkNYWDIwX0NPTlNURVhQUgotICAg IGV4cGxpY2l0Ci0gICAgX1ZhbF9sZXNzX2l0ZXIoX0l0ZXJfbGVzc19pdGVyKSB7IH0KKyNp ZiBfX2NwbHVzcGx1cyA+PSAyMDExMDNMCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9Db21wLCB0 eXBlbmFtZSBfSXRlMSwgdHlwZW5hbWUgX0l0ZTI+CisgICAgY29uc3RleHByIF9Db21wJiYK KyAgICBfX2xlc3MoX0NvbXAmJiBfX2NvbXAsIF9JdGUxLCBfSXRlMikgbm9leGNlcHQKKyAg ICB7IHJldHVybiBzdGQ6OmZvcndhcmQ8X0NvbXA+KF9fY29tcCk7IH0KKyNlbHNlCisgIHRl bXBsYXRlPHR5cGVuYW1lIF9Db21wLCB0eXBlbmFtZSBfSXRlMSwgdHlwZW5hbWUgX0l0ZTI+ CisgICAgaW5saW5lIF9Db21wCisgICAgX19sZXNzKF9Db21wIF9fY29tcCwgX0l0ZTEsIF9J dGUyKQorICAgIHsgcmV0dXJuIF9fY29tcDsgfQorCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9M ZXNzUmVmMSwgdHlwZW5hbWUgX0xlc3NSZWYyLCB0eXBlbmFtZSBfSXRlMSwgdHlwZW5hbWUg X0l0ZTI+CisgICAgaW5saW5lIF9MZXNzPF9JdGUxLCBfSXRlMj4KKyAgICBfX2xlc3MoY29u c3QgX0xlc3NSZWZzPF9MZXNzUmVmMSwgX0xlc3NSZWYyPiYsIF9JdGUxLCBfSXRlMikKKyAg ICB7IHJldHVybiBfTGVzczxfSXRlMSwgX0l0ZTI+KCk7IH0KKyNlbmRpZgogCi0gICAgdGVt cGxhdGU8dHlwZW5hbWUgX1ZhbHVlLCB0eXBlbmFtZSBfSXRlcmF0b3I+Ci0gICAgICBfR0xJ QkNYWDIwX0NPTlNURVhQUgotICAgICAgYm9vbAotICAgICAgb3BlcmF0b3IoKShfVmFsdWUm IF9fdmFsLCBfSXRlcmF0b3IgX19pdCkgY29uc3QKLSAgICAgIHsgcmV0dXJuIF9fdmFsIDwg Kl9faXQ7IH0KLSAgfTsKKyNpZiBfX2NwbHVzcGx1cyA8IDIwMTEwM0wKKyAgdGVtcGxhdGU8 dHlwZW5hbWUgX0l0ZSwgdHlwZW5hbWUgX1ZhbD4KKyAgICBzdHJ1Y3QgX0xlc3NWYWwgOiBf TGVzc1JlZnM8dHlwZW5hbWUgc3RkOjppdGVyYXRvcl90cmFpdHM8X0l0ZT46OnJlZmVyZW5j ZSwKKwkJCSAgICAgIF9WYWwmPgorICAgIHsgfTsKKyNlbmRpZgogCi0gIF9HTElCQ1hYMjBf Q09OU1RFWFBSCi0gIGlubGluZSBfVmFsX2xlc3NfaXRlcgotICBfX3ZhbF9sZXNzX2l0ZXIo KQotICB7IHJldHVybiBfVmFsX2xlc3NfaXRlcigpOyB9CisjaWYgX19jcGx1c3BsdXMgPj0g MjAxMTAzTAorICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSXRlLCB0eXBlbmFtZSBfVmFsPgorICAg IGNvbnN0ZXhwciBfTGVzcworICAgIF9fbGVzc192YWwoX0l0ZSwgX1ZhbCYmKSBub2V4Y2Vw dAorICAgIHsgcmV0dXJuIF9MZXNze307IH0KKyNlbHNlCisgIHRlbXBsYXRlPHR5cGVuYW1l IF9JdGUsIHR5cGVuYW1lIF9WYWw+CisgICAgaW5saW5lIF9MZXNzVmFsPF9JdGUsIF9WYWw+ CisgICAgX19sZXNzX3ZhbChfSXRlLCBfVmFsJikKKyAgICB7IHJldHVybiBfTGVzc1ZhbDxf SXRlLCBfVmFsPigpOyB9CisjZW5kaWYKIAotICBfR0xJQkNYWDIwX0NPTlNURVhQUgotICBp bmxpbmUgX1ZhbF9sZXNzX2l0ZXIKLSAgX192YWxfY29tcF9pdGVyKF9JdGVyX2xlc3NfaXRl cikKLSAgeyByZXR1cm4gX1ZhbF9sZXNzX2l0ZXIoKTsgfQorI2lmIF9fY3BsdXNwbHVzID49 IDIwMTEwM0wKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX0NvbXAsIHR5cGVuYW1lIF9JdGUsIHR5 cGVuYW1lIF9WYWw+CisgICAgY29uc3RleHByIF9Db21wJiYKKyAgICBfX2xlc3NfdmFsKF9D b21wJiYgX19jb21wLCBfSXRlLCBfVmFsJiYpIG5vZXhjZXB0CisgICAgeyByZXR1cm4gc3Rk Ojpmb3J3YXJkPF9Db21wPihfX2NvbXApOyB9CisjZWxzZQorICB0ZW1wbGF0ZTx0eXBlbmFt ZSBfQ29tcCwgdHlwZW5hbWUgX0l0ZSwgdHlwZW5hbWUgX1ZhbD4KKyAgICBpbmxpbmUgX0Nv bXAKKyAgICBfX2xlc3NfdmFsKF9Db21wIF9fY29tcCwgX0l0ZSwgX1ZhbCYpCisgICAgeyBy ZXR1cm4gX19jb21wOyB9CisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1JlZjEsIHR5cGVuYW1l IF9SZWYyLCB0eXBlbmFtZSBfSXRlLCB0eXBlbmFtZSBfVmFsPgorICAgIGlubGluZSBfTGVz c1ZhbDxfSXRlLCBfVmFsPgorICAgIF9fbGVzc192YWwoY29uc3QgX0xlc3NSZWZzPF9SZWYx LCBfUmVmMj4mLCBfSXRlLCBfVmFsJikKKyAgICB7IHJldHVybiBfTGVzc1ZhbDxfSXRlLCBf VmFsPigpOyB9CisjZW5kaWYKIAotICBzdHJ1Y3QgX0l0ZXJfZXF1YWxfdG9faXRlcgorI2lm IF9fY3BsdXNwbHVzID49IDIwMTEwM0wKKyAgc3RydWN0IF9FcXVhbFRvCiAgIHsKLSAgICB0 ZW1wbGF0ZTx0eXBlbmFtZSBfSXRlcmF0b3IxLCB0eXBlbmFtZSBfSXRlcmF0b3IyPgorICAg IHRlbXBsYXRlPHR5cGVuYW1lIF9MaHMsIHR5cGVuYW1lIF9SaHM+CiAgICAgICBfR0xJQkNY WDIwX0NPTlNURVhQUgogICAgICAgYm9vbAotICAgICAgb3BlcmF0b3IoKShfSXRlcmF0b3Ix IF9faXQxLCBfSXRlcmF0b3IyIF9faXQyKSBjb25zdAotICAgICAgeyByZXR1cm4gKl9faXQx ID09ICpfX2l0MjsgfQorICAgICAgb3BlcmF0b3IoKShfTGhzJiYgX19saHMsIF9SaHMmJiBf X3JocykgY29uc3QKKyAgICAgIG5vZXhjZXB0KCBub2V4Y2VwdChfX2xocyA9PSBfX3Jocykg KQorICAgICAgeyByZXR1cm4gX19saHMgPT0gX19yaHM7IH0KICAgfTsKLQotICBfR0xJQkNY WDIwX0NPTlNURVhQUgotICBpbmxpbmUgX0l0ZXJfZXF1YWxfdG9faXRlcgotICBfX2l0ZXJf ZXF1YWxfdG9faXRlcigpCi0gIHsgcmV0dXJuIF9JdGVyX2VxdWFsX3RvX2l0ZXIoKTsgfQot Ci0gIHN0cnVjdCBfSXRlcl9lcXVhbF90b192YWwKKyNlbHNlCisgIHRlbXBsYXRlPHR5cGVu YW1lIF9SZWYxLCB0eXBlbmFtZSBfUmVmMj4KKyAgICBzdHJ1Y3QgX0VxdWFsVG9SZWZzCiAg ICAgewotICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9JdGVyYXRvciwgdHlwZW5hbWUgX1ZhbHVl PgotICAgICAgX0dMSUJDWFgyMF9DT05TVEVYUFIKICAgICAgIGJvb2wKLSAgICAgIG9wZXJh dG9yKCkoX0l0ZXJhdG9yIF9faXQsIF9WYWx1ZSYgX192YWwpIGNvbnN0Ci0gICAgICB7IHJl dHVybiAqX19pdCA9PSBfX3ZhbDsgfQotICB9OwotCi0gIF9HTElCQ1hYMjBfQ09OU1RFWFBS Ci0gIGlubGluZSBfSXRlcl9lcXVhbF90b192YWwKLSAgX19pdGVyX2VxdWFsX3RvX3ZhbCgp Ci0gIHsgcmV0dXJuIF9JdGVyX2VxdWFsX3RvX3ZhbCgpOyB9Ci0KLSAgX0dMSUJDWFgyMF9D T05TVEVYUFIKLSAgaW5saW5lIF9JdGVyX2VxdWFsX3RvX3ZhbAotICBfX2l0ZXJfY29tcF92 YWwoX0l0ZXJfZXF1YWxfdG9faXRlcikKLSAgeyByZXR1cm4gX0l0ZXJfZXF1YWxfdG9fdmFs KCk7IH0KKyAgICAgIG9wZXJhdG9yKCkoX1JlZjEgX19saHMsIF9SZWYyIF9fcmhzKSBjb25z dAorICAgICAgeyByZXR1cm4gX19saHMgPT0gX19yaHM7IH0KIAotICB0ZW1wbGF0ZTx0eXBl bmFtZSBfQ29tcGFyZT4KLSAgICBzdHJ1Y3QgX0l0ZXJfY29tcF9pdGVyCi0gICAgewotICAg ICAgX0NvbXBhcmUgX01fY29tcDsKKyAgICAgIGJvb2wKKyAgICAgIG9wZXJhdG9yKCkoX1Jl ZjIgX19saHMsIF9SZWYxIF9fcmhzKSBjb25zdAorICAgICAgeyByZXR1cm4gX19saHMgPT0g X19yaHM7IH0KIAotICAgICAgZXhwbGljaXQgX0dMSUJDWFgxNF9DT05TVEVYUFIKLSAgICAg IF9JdGVyX2NvbXBfaXRlcihfQ29tcGFyZSBfX2NvbXApCi0JOiBfTV9jb21wKF9HTElCQ1hY X01PVkUoX19jb21wKSkKLSAgICAgIHsgfQorICAgICAgYm9vbAorICAgICAgb3BlcmF0b3Io KShfUmVmMSBfX2xocywgX1JlZjEgX19yaHMpIGNvbnN0CisgICAgICB7IHJldHVybiBfX2xo cyA9PSBfX3JoczsgfQogCi0gICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSXRlcmF0b3IxLCB0 eXBlbmFtZSBfSXRlcmF0b3IyPgotICAgICAgICBfR0xJQkNYWDE0X0NPTlNURVhQUgogICAg ICAgYm9vbAotICAgICAgICBvcGVyYXRvcigpKF9JdGVyYXRvcjEgX19pdDEsIF9JdGVyYXRv cjIgX19pdDIpCi0gICAgICAgIHsgcmV0dXJuIGJvb2woX01fY29tcCgqX19pdDEsICpfX2l0 MikpOyB9CisgICAgICBvcGVyYXRvcigpKF9SZWYyIF9fbGhzLCBfUmVmMiBfX3JocykgY29u c3QKKyAgICAgIHsgcmV0dXJuIF9fbGhzID09IF9fcmhzOyB9CiAgICAgfTsKIAotICB0ZW1w bGF0ZTx0eXBlbmFtZSBfQ29tcGFyZT4KLSAgICBfR0xJQkNYWDE0X0NPTlNURVhQUgotICAg IGlubGluZSBfSXRlcl9jb21wX2l0ZXI8X0NvbXBhcmU+Ci0gICAgX19pdGVyX2NvbXBfaXRl cihfQ29tcGFyZSBfX2NvbXApCi0gICAgeyByZXR1cm4gX0l0ZXJfY29tcF9pdGVyPF9Db21w YXJlPihfR0xJQkNYWF9NT1ZFKF9fY29tcCkpOyB9Ci0KLSAgdGVtcGxhdGU8dHlwZW5hbWUg X0NvbXBhcmU+Ci0gICAgc3RydWN0IF9JdGVyX2NvbXBfdmFsCisgIHRlbXBsYXRlPHR5cGVu YW1lIF9SZWY+CisgICAgc3RydWN0IF9FcXVhbFRvUmVmczxfUmVmLCBfUmVmPgogICAgIHsK LSAgICAgIF9Db21wYXJlIF9NX2NvbXA7Ci0KLSAgICAgIF9HTElCQ1hYMjBfQ09OU1RFWFBS Ci0gICAgICBleHBsaWNpdAotICAgICAgX0l0ZXJfY29tcF92YWwoX0NvbXBhcmUgX19jb21w KQotCTogX01fY29tcChfR0xJQkNYWF9NT1ZFKF9fY29tcCkpCi0gICAgICB7IH0KLQotICAg ICAgX0dMSUJDWFgyMF9DT05TVEVYUFIKLSAgICAgIGV4cGxpY2l0Ci0gICAgICBfSXRlcl9j b21wX3ZhbChjb25zdCBfSXRlcl9jb21wX2l0ZXI8X0NvbXBhcmU+JiBfX2NvbXApCi0JOiBf TV9jb21wKF9fY29tcC5fTV9jb21wKQotICAgICAgeyB9Ci0KLSNpZiBfX2NwbHVzcGx1cyA+ PSAyMDExMDNMCi0gICAgICBfR0xJQkNYWDIwX0NPTlNURVhQUgotICAgICAgZXhwbGljaXQK LSAgICAgIF9JdGVyX2NvbXBfdmFsKF9JdGVyX2NvbXBfaXRlcjxfQ29tcGFyZT4mJiBfX2Nv bXApCi0JOiBfTV9jb21wKHN0ZDo6bW92ZShfX2NvbXAuX01fY29tcCkpCi0gICAgICB7IH0K LSNlbmRpZgotCi0gICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSXRlcmF0b3IsIHR5cGVuYW1l IF9WYWx1ZT4KLQlfR0xJQkNYWDIwX0NPTlNURVhQUgogICAgICAgYm9vbAotCW9wZXJhdG9y KCkoX0l0ZXJhdG9yIF9faXQsIF9WYWx1ZSYgX192YWwpCi0JeyByZXR1cm4gYm9vbChfTV9j b21wKCpfX2l0LCBfX3ZhbCkpOyB9CisgICAgICBvcGVyYXRvcigpKF9SZWYgX19saHMsIF9S ZWYgX19yaHMpIGNvbnN0CisgICAgICB7IHJldHVybiBfX2xocyA9PSBfX3JoczsgfQogICAg IH07CiAKLSAgdGVtcGxhdGU8dHlwZW5hbWUgX0NvbXBhcmU+Ci0gICAgX0dMSUJDWFgyMF9D T05TVEVYUFIKLSAgICBpbmxpbmUgX0l0ZXJfY29tcF92YWw8X0NvbXBhcmU+Ci0gICAgX19p dGVyX2NvbXBfdmFsKF9Db21wYXJlIF9fY29tcCkKLSAgICB7IHJldHVybiBfSXRlcl9jb21w X3ZhbDxfQ29tcGFyZT4oX0dMSUJDWFhfTU9WRShfX2NvbXApKTsgfQotCi0gIHRlbXBsYXRl PHR5cGVuYW1lIF9Db21wYXJlPgotICAgIF9HTElCQ1hYMjBfQ09OU1RFWFBSCi0gICAgaW5s aW5lIF9JdGVyX2NvbXBfdmFsPF9Db21wYXJlPgotICAgIF9faXRlcl9jb21wX3ZhbChfSXRl cl9jb21wX2l0ZXI8X0NvbXBhcmU+IF9fY29tcCkKLSAgICB7IHJldHVybiBfSXRlcl9jb21w X3ZhbDxfQ29tcGFyZT4oX0dMSUJDWFhfTU9WRShfX2NvbXApKTsgfQotCi0gIHRlbXBsYXRl PHR5cGVuYW1lIF9Db21wYXJlPgotICAgIHN0cnVjdCBfVmFsX2NvbXBfaXRlcgotICAgIHsK LSAgICAgIF9Db21wYXJlIF9NX2NvbXA7Ci0KLSAgICAgIF9HTElCQ1hYMjBfQ09OU1RFWFBS Ci0gICAgICBleHBsaWNpdAotICAgICAgX1ZhbF9jb21wX2l0ZXIoX0NvbXBhcmUgX19jb21w KQotCTogX01fY29tcChfR0xJQkNYWF9NT1ZFKF9fY29tcCkpCi0gICAgICB7IH0KLQotICAg ICAgX0dMSUJDWFgyMF9DT05TVEVYUFIKLSAgICAgIGV4cGxpY2l0Ci0gICAgICBfVmFsX2Nv bXBfaXRlcihjb25zdCBfSXRlcl9jb21wX2l0ZXI8X0NvbXBhcmU+JiBfX2NvbXApCi0JOiBf TV9jb21wKF9fY29tcC5fTV9jb21wKQotICAgICAgeyB9CisgIHRlbXBsYXRlPHR5cGVuYW1l IF9JdGUxLCB0eXBlbmFtZSBfSXRlMj4KKyAgICBzdHJ1Y3QgX0VxdWFsVG8KKyAgICAgIDog X0VxdWFsVG9SZWZzPHR5cGVuYW1lIHN0ZDo6aXRlcmF0b3JfdHJhaXRzPF9JdGUxPjo6cmVm ZXJlbmNlLAorCQkgICAgIHR5cGVuYW1lIHN0ZDo6aXRlcmF0b3JfdHJhaXRzPF9JdGUyPjo6 cmVmZXJlbmNlPgorICAgIHsgfTsKKyNlbmRpZgogCiAjaWYgX19jcGx1c3BsdXMgPj0gMjAx MTAzTAotICAgICAgX0dMSUJDWFgyMF9DT05TVEVYUFIKLSAgICAgIGV4cGxpY2l0Ci0gICAg ICBfVmFsX2NvbXBfaXRlcihfSXRlcl9jb21wX2l0ZXI8X0NvbXBhcmU+JiYgX19jb21wKQot CTogX01fY29tcChzdGQ6Om1vdmUoX19jb21wLl9NX2NvbXApKQotICAgICAgeyB9CisgIHRl bXBsYXRlPHR5cGVuYW1lIF9JdGUxLCB0eXBlbmFtZSBfSXRlMj4KKyAgICBjb25zdGV4cHIg X0VxdWFsVG8KKyAgICBfX2VxdWFsX3RvKF9JdGUxLCBfSXRlMikgbm9leGNlcHQKKyAgICB7 IHJldHVybiBfRXF1YWxUb3t9OyB9CisKKyAgY29uc3RleHByIF9FcXVhbFRvCisgIF9fZXF1 YWxfdG8oKSBub2V4Y2VwdAorICB7IHJldHVybiBfRXF1YWxUb3t9OyB9CisjZWxzZQorICB0 ZW1wbGF0ZTx0eXBlbmFtZSBfSXRlMSwgdHlwZW5hbWUgX0l0ZTI+CisgICAgaW5saW5lIF9F cXVhbFRvPF9JdGUxLCBfSXRlMj4KKyAgICBfX2VxdWFsX3RvKF9JdGUxLCBfSXRlMikKKyAg ICB7IHJldHVybiBfRXF1YWxUbzxfSXRlMSwgX0l0ZTI+KCk7IH0KICNlbmRpZgogCi0gICAg ICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVmFsdWUsIHR5cGVuYW1lIF9JdGVyYXRvcj4KLQlfR0xJ QkNYWDIwX0NPTlNURVhQUgotCWJvb2wKLQlvcGVyYXRvcigpKF9WYWx1ZSYgX192YWwsIF9J dGVyYXRvciBfX2l0KQotCXsgcmV0dXJuIGJvb2woX01fY29tcChfX3ZhbCwgKl9faXQpKTsg fQotICAgIH07CisjaWYgX19jcGx1c3BsdXMgPj0gMjAxMTAzTAorICB0ZW1wbGF0ZTx0eXBl bmFtZSBfSXRlPgorICAgIGNvbnN0ZXhwciBfRXF1YWxUbworICAgIF9fZXF1YWxfdG8oX0l0 ZSkgbm9leGNlcHQKKyAgICB7IHJldHVybiBfRXF1YWxUb3t9OyB9CisjZWxzZQorICB0ZW1w bGF0ZTx0eXBlbmFtZSBfSXRlPgorICAgIGlubGluZSBfRXF1YWxUbzxfSXRlLCBfSXRlPgor ICAgIF9fZXF1YWxfdG8oX0l0ZSkKKyAgICB7IHJldHVybiBfRXF1YWxUbzxfSXRlLCBfSXRl PigpOyB9CisjZW5kaWYKIAotICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ29tcGFyZT4KLSAgICBf R0xJQkNYWDIwX0NPTlNURVhQUgotICAgIGlubGluZSBfVmFsX2NvbXBfaXRlcjxfQ29tcGFy ZT4KLSAgICBfX3ZhbF9jb21wX2l0ZXIoX0NvbXBhcmUgX19jb21wKQotICAgIHsgcmV0dXJu IF9WYWxfY29tcF9pdGVyPF9Db21wYXJlPihfR0xJQkNYWF9NT1ZFKF9fY29tcCkpOyB9Cisj aWYgX19jcGx1c3BsdXMgPCAyMDExMDNMCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9JdGUsIHR5 cGVuYW1lIF9WYWw+CisgICAgc3RydWN0IF9FcXVhbFRvVmFsCisgICAgICA6IF9FcXVhbFRv UmVmczx0eXBlbmFtZSBzdGQ6Oml0ZXJhdG9yX3RyYWl0czxfSXRlPjo6cmVmZXJlbmNlLCBf VmFsJj4KKyAgICB7IH07CisjZW5kaWYKIAotICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ29tcGFy ZT4KLSAgICBfR0xJQkNYWDIwX0NPTlNURVhQUgotICAgIGlubGluZSBfVmFsX2NvbXBfaXRl cjxfQ29tcGFyZT4KLSAgICBfX3ZhbF9jb21wX2l0ZXIoX0l0ZXJfY29tcF9pdGVyPF9Db21w YXJlPiBfX2NvbXApCi0gICAgeyByZXR1cm4gX1ZhbF9jb21wX2l0ZXI8X0NvbXBhcmU+KF9H TElCQ1hYX01PVkUoX19jb21wKSk7IH0KKyNpZiBfX2NwbHVzcGx1cyA+PSAyMDExMDNMCisg IHRlbXBsYXRlPHR5cGVuYW1lIF9Db21wLCB0eXBlbmFtZSBfSXRlLCB0eXBlbmFtZSBfVmFs PgorICAgIGNvbnN0ZXhwciBfQ29tcCYmCisgICAgX19lcXVhbF90b192YWwoX0NvbXAmJiBf X2NvbXAsIF9JdGUsIF9WYWwmJikgbm9leGNlcHQKKyAgICB7IHJldHVybiBzdGQ6OmZvcndh cmQ8X0NvbXA+KF9fY29tcCk7IH0KKyNlbHNlCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9Db21w LCB0eXBlbmFtZSBfSXRlLCB0eXBlbmFtZSBfVmFsPgorICAgIGlubGluZSBfQ29tcAorICAg IF9fZXF1YWxfdG9fdmFsKF9Db21wIF9fY29tcCwgX0l0ZSwgX1ZhbCYpCisgICAgeyByZXR1 cm4gX19jb21wOyB9CisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1JlZjEsIHR5cGVuYW1lIF9S ZWYyLCB0eXBlbmFtZSBfSXRlLCB0eXBlbmFtZSBfVmFsPgorICAgIGlubGluZSBfRXF1YWxU b1ZhbDxfSXRlLCBfVmFsPgorICAgIF9fZXF1YWxfdG9fdmFsKGNvbnN0IF9FcXVhbFRvUmVm czxfUmVmMSwgX1JlZjI+JiwgX0l0ZSwgX1ZhbCYpCisgICAgeyByZXR1cm4gX0VxdWFsVG9W YWw8X0l0ZSwgX1ZhbD4oKTsgfQorI2VuZGlmCiAKLSAgdGVtcGxhdGU8dHlwZW5hbWUgX1Zh bHVlPgotICAgIHN0cnVjdCBfSXRlcl9lcXVhbHNfdmFsCisjaWYgX19jcGx1c3BsdXMgPj0g MjAxMTAzTAorICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVmFsPgorICAgIHN0cnVjdCBfRXF1YWxW YWwKICAgICB7Ci0gICAgICBfVmFsdWUmIF9NX3ZhbHVlOworICAgIHByaXZhdGU6CisgICAg ICBfVmFsIF9NX3ZhbDsKIAotICAgICAgX0dMSUJDWFgyMF9DT05TVEVYUFIKLSAgICAgIGV4 cGxpY2l0Ci0gICAgICBfSXRlcl9lcXVhbHNfdmFsKF9WYWx1ZSYgX192YWx1ZSkKLQk6IF9N X3ZhbHVlKF9fdmFsdWUpCi0gICAgICB7IH0KKyAgICBwdWJsaWM6CisgICAgICBjb25zdGV4 cHIKKyAgICAgIF9FcXVhbFZhbChfVmFsIF9fdmFsKQorICAgICAgOiBfTV92YWwoX192YWwp IHsgfQogCi0gICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSXRlcmF0b3I+CisgICAgICB0ZW1w bGF0ZTx0eXBlbmFtZSBfTGhzPgogCV9HTElCQ1hYMjBfQ09OU1RFWFBSCiAJYm9vbAotCW9w ZXJhdG9yKCkoX0l0ZXJhdG9yIF9faXQpCi0JeyByZXR1cm4gKl9faXQgPT0gX01fdmFsdWU7 IH0KKwlvcGVyYXRvcigpKF9MaHMmJiBfX2xocykgY29uc3QKKwlub2V4Y2VwdCggbm9leGNl cHQoX19saHMgPT0gX01fdmFsKSApCisJeyByZXR1cm4gX19saHMgPT0gX01fdmFsOyB9CiAg ICAgfTsKLQotICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVmFsdWU+Ci0gICAgX0dMSUJDWFgyMF9D T05TVEVYUFIKLSAgICBpbmxpbmUgX0l0ZXJfZXF1YWxzX3ZhbDxfVmFsdWU+Ci0gICAgX19p dGVyX2VxdWFsc192YWwoX1ZhbHVlJiBfX3ZhbCkKLSAgICB7IHJldHVybiBfSXRlcl9lcXVh bHNfdmFsPF9WYWx1ZT4oX192YWwpOyB9Ci0KLSAgdGVtcGxhdGU8dHlwZW5hbWUgX0l0ZXJh dG9yMT4KLSAgICBzdHJ1Y3QgX0l0ZXJfZXF1YWxzX2l0ZXIKKyNlbHNlCisgIHRlbXBsYXRl PHR5cGVuYW1lIF9SZWYsIHR5cGVuYW1lIF9WYWw+CisgICAgc3RydWN0IF9FcXVhbFZhbFJl ZgogICAgIHsKLSAgICAgIF9JdGVyYXRvcjEgX01faXQxOworICAgIHByaXZhdGU6CisgICAg ICBfVmFsIF9NX3ZhbDsKIAotICAgICAgX0dMSUJDWFgyMF9DT05TVEVYUFIKLSAgICAgIGV4 cGxpY2l0Ci0gICAgICBfSXRlcl9lcXVhbHNfaXRlcihfSXRlcmF0b3IxIF9faXQxKQotCTog X01faXQxKF9faXQxKQorICAgIHB1YmxpYzoKKyAgICAgIF9FcXVhbFZhbFJlZihfVmFsIF9f dmFsKQorICAgICAgOiBfTV92YWwoX192YWwpCiAgICAgICB7IH0KIAotICAgICAgdGVtcGxh dGU8dHlwZW5hbWUgX0l0ZXJhdG9yMj4KLQlfR0xJQkNYWDIwX0NPTlNURVhQUgogICAgICAg Ym9vbAotCW9wZXJhdG9yKCkoX0l0ZXJhdG9yMiBfX2l0MikKLQl7IHJldHVybiAqX19pdDIg PT0gKl9NX2l0MTsgfQorICAgICAgb3BlcmF0b3IoKShfUmVmIF9fbGhzKSBjb25zdAorICAg ICAgeyByZXR1cm4gX19saHMgPT0gX01fdmFsOyB9CiAgICAgfTsKIAotICB0ZW1wbGF0ZTx0 eXBlbmFtZSBfSXRlcmF0b3I+Ci0gICAgX0dMSUJDWFgyMF9DT05TVEVYUFIKLSAgICBpbmxp bmUgX0l0ZXJfZXF1YWxzX2l0ZXI8X0l0ZXJhdG9yPgotICAgIF9faXRlcl9jb21wX2l0ZXIo X0l0ZXJfZXF1YWxfdG9faXRlciwgX0l0ZXJhdG9yIF9faXQpCi0gICAgeyByZXR1cm4gX0l0 ZXJfZXF1YWxzX2l0ZXI8X0l0ZXJhdG9yPihfX2l0KTsgfQotCi0gIHRlbXBsYXRlPHR5cGVu YW1lIF9QcmVkaWNhdGU+Ci0gICAgc3RydWN0IF9JdGVyX3ByZWQKKyAgdGVtcGxhdGU8dHlw ZW5hbWUgX0l0ZSwgdHlwZW5hbWUgX1ZhbD4KKyAgICBzdHJ1Y3QgX0VxdWFsVmFsCisgICAg OiBfRXF1YWxWYWxSZWY8dHlwZW5hbWUgc3RkOjppdGVyYXRvcl90cmFpdHM8X0l0ZT46OnJl ZmVyZW5jZSwgX1ZhbD4KICAgICB7Ci0gICAgICBfUHJlZGljYXRlIF9NX3ByZWQ7CisgICAg ICB0eXBlZGVmCisgICAgICBfRXF1YWxWYWxSZWY8dHlwZW5hbWUgc3RkOjppdGVyYXRvcl90 cmFpdHM8X0l0ZT46OnJlZmVyZW5jZSwgX1ZhbD4gX0Jhc2U7CiAKLSAgICAgIF9HTElCQ1hY MjBfQ09OU1RFWFBSCi0gICAgICBleHBsaWNpdAotICAgICAgX0l0ZXJfcHJlZChfUHJlZGlj YXRlIF9fcHJlZCkKLQk6IF9NX3ByZWQoX0dMSUJDWFhfTU9WRShfX3ByZWQpKQorICAgICAg X0VxdWFsVmFsKF9WYWwgX192YWwpCisgICAgICA6IF9CYXNlKF9fdmFsKQogICAgICAgeyB9 Ci0KLSAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9JdGVyYXRvcj4KLQlfR0xJQkNYWDIwX0NP TlNURVhQUgotCWJvb2wKLQlvcGVyYXRvcigpKF9JdGVyYXRvciBfX2l0KQotCXsgcmV0dXJu IGJvb2woX01fcHJlZCgqX19pdCkpOyB9CiAgICAgfTsKKyNlbmRpZgogCi0gIHRlbXBsYXRl PHR5cGVuYW1lIF9QcmVkaWNhdGU+Ci0gICAgX0dMSUJDWFgyMF9DT05TVEVYUFIKLSAgICBp bmxpbmUgX0l0ZXJfcHJlZDxfUHJlZGljYXRlPgotICAgIF9fcHJlZF9pdGVyKF9QcmVkaWNh dGUgX19wcmVkKQotICAgIHsgcmV0dXJuIF9JdGVyX3ByZWQ8X1ByZWRpY2F0ZT4oX0dMSUJD WFhfTU9WRShfX3ByZWQpKTsgfQorI2lmIF9fY3BsdXNwbHVzID49IDIwMTEwM0wKKyAgdGVt cGxhdGU8dHlwZW5hbWUgX0l0ZSwgdHlwZW5hbWUgX1ZhbD4KKyAgICBjb25zdGV4cHIgX0Vx dWFsVmFsPGNvbnN0IF9WYWwmPgorICAgIF9fZXF1YWxfdmFsKF9JdGUsIGNvbnN0IF9WYWwm IF9fdmFsKSBub2V4Y2VwdAorICAgIHtyZXR1cm4gX0VxdWFsVmFsPGNvbnN0IF9WYWwmPihf X3ZhbCk7fQorCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9WYWw+CisgICAgY29uc3RleHByIF9F cXVhbFZhbDxjb25zdCBfVmFsJj4KKyAgICBfX2VxdWFsX3ZhbChjb25zdCBfVmFsJiBfX3Zh bCkgbm9leGNlcHQKKyAgICB7cmV0dXJuIF9FcXVhbFZhbDxjb25zdCBfVmFsJj4oX192YWwp O30KKyNlbHNlCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9JdGUsIHR5cGVuYW1lIF9WYWw+Cisg ICAgaW5saW5lIF9FcXVhbFZhbDxfSXRlLCBjb25zdCBfVmFsJj4KKyAgICBfX2VxdWFsX3Zh bChfSXRlLCBjb25zdCBfVmFsJiBfX3ZhbCkKKyAgICB7IHJldHVybiBfRXF1YWxWYWw8X0l0 ZSwgY29uc3QgX1ZhbCY+KF9fdmFsKTsgfQorI2VuZGlmCiAKLSAgdGVtcGxhdGU8dHlwZW5h bWUgX0NvbXBhcmUsIHR5cGVuYW1lIF9WYWx1ZT4KLSAgICBzdHJ1Y3QgX0l0ZXJfY29tcF90 b192YWwKKyNpZiBfX2NwbHVzcGx1cyA+PSAyMDExMDNMCisgIHRlbXBsYXRlPHR5cGVuYW1l IF9CaW5hcnlQcmVkLCB0eXBlbmFtZSBfVmFsPgorICAgIHN0cnVjdCBfQ29tcFZhbAogICAg IHsKLSAgICAgIF9Db21wYXJlIF9NX2NvbXA7Ci0gICAgICBfVmFsdWUmIF9NX3ZhbHVlOwor ICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgX0JQcmVkPgorCWNvbnN0ZXhwcgorCV9Db21wVmFs KF9CUHJlZCYmIF9fcHJlZCwgX1ZhbCBfX3ZhbCkKKwk6IF9NX2JpbmFyeV9wcmVkKHN0ZDo6 Zm9yd2FyZDxfQlByZWQ+KF9fcHJlZCkpCisJLCBfTV92YWwoX192YWwpCisJeyB9CiAKLSAg ICAgIF9HTElCQ1hYMjBfQ09OU1RFWFBSCi0gICAgICBfSXRlcl9jb21wX3RvX3ZhbChfQ29t cGFyZSBfX2NvbXAsIF9WYWx1ZSYgX192YWx1ZSkKLQk6IF9NX2NvbXAoX0dMSUJDWFhfTU9W RShfX2NvbXApKSwgX01fdmFsdWUoX192YWx1ZSkKKyAgICAgIF9Db21wVmFsKGNvbnN0IF9D b21wVmFsJikgPSBkZWZhdWx0OworICAgICAgX0NvbXBWYWwoX0NvbXBWYWwmJikgPSBkZWZh dWx0OworICAgICAgfl9Db21wVmFsKCkgPSBkZWZhdWx0OworCisgICAgICAvLyBNYWNybyB0 byBkZWZpbmUgb3BlcmF0b3IoKSB3aXRoIGdpdmVuIGN2LXF1YWxpZmllcnMgcmVmLXF1YWxp ZmllcnMsCisgICAgICAvLyBmb3J3YXJkaW5nIF9NX2JpbmFyeV9wcmVkIGFuZCB0aGUgZnVu Y3Rpb24gYXJndW1lbnRzIHdpdGggdGhlIHNhbWUKKyAgICAgIC8vIHF1YWxpZmllcnMsIGFu ZCBkZWR1Y2luZyB0aGUgcmV0dXJuIHR5cGUgYW5kIGV4Y2VwdGlvbi1zcGVjaWZpY2F0aW9u LgorIyBkZWZpbmUgX0dMSUJDWFhfQklOQVJZX1BSRURfQ0FMTF9PUCggX1FVQUxTICkJCQkJ XAorICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgX0FyZywJCQkJCQlcCisJICAgICAgIHR5cGVu YW1lID0gc3RkOjpfX2VuYWJsZV9pZl90PHN0ZDo6X19pc19pbnZvY2FibGU8CVwKKwkJIF9C aW5hcnlQcmVkIF9RVUFMUywgX0FyZywgX1ZhbD46OnZhbHVlPj4gCVwKKwlfR0xJQkNYWDIw X0NPTlNURVhQUgkJCQkJCVwKKwlib29sCQkJCQkJCQlcCisJb3BlcmF0b3IoKShfQXJnJiYg X19hcmcpIF9RVUFMUwkJCQkJXAorCW5vZXhjZXB0KHN0ZDo6X19pc19ub3Rocm93X2ludm9j YWJsZTwJCQkJXAorCQkgX0JpbmFyeVByZWQgX1FVQUxTLCBfQXJnLCBfVmFsPjo6dmFsdWUp CQlcCisJewkJCQkJCQkJXAorCSAgcmV0dXJuIHN0ZDo6X19pbnZva2UoCQkJCQkJXAorCQkg ICBzdGQ6OmZvcndhcmQ8IF9CaW5hcnlQcmVkIF9RVUFMUyA+KF9NX2JpbmFyeV9wcmVkKSwJ XAorCQkgICBzdGQ6OmZvcndhcmQ8X0FyZz4oX19hcmcpLCBfTV92YWwpOwkJCVwKKwl9CQkJ CQkJCQlcCisJCQkJCQkJCQlcCisgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQXJnLAkJCQkJ CVwKKwkgICAgICAgdHlwZW5hbWUgPSBzdGQ6Ol9fZW5hYmxlX2lmX3Q8IXN0ZDo6X19pc19p bnZvY2FibGU8CVwKKwkJIF9CaW5hcnlQcmVkIF9RVUFMUywgX0FyZywgX1ZhbD46OnZhbHVl Pj4JXAorCXZvaWQgb3BlcmF0b3IoKShfQXJnJiYpIF9RVUFMUyA9IGRlbGV0ZTsKKworICAg ICAgX0dMSUJDWFhfQklOQVJZX1BSRURfQ0FMTF9PUCggJiApCisgICAgICBfR0xJQkNYWF9C SU5BUllfUFJFRF9DQUxMX09QKCBjb25zdCAmICkKKyAgICAgIF9HTElCQ1hYX0JJTkFSWV9Q UkVEX0NBTExfT1AoICYmICkKKyAgICAgIF9HTElCQ1hYX0JJTkFSWV9QUkVEX0NBTExfT1Ao IGNvbnN0ICYmICkKKyMgdW5kZWYgX0dMSUJDWFhfQklOQVJZX1BSRURfQ0FMTF9PUAorI2Vs c2UKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX0JpbmFyeVByZWQsIHR5cGVuYW1lIF9JdGUsIHR5 cGVuYW1lIF9WYWw+CisgICAgc3RydWN0IF9Db21wVmFsCisgICAgeworICAgICAgX0NvbXBW YWwoX0JpbmFyeVByZWQgX19wcmVkLCBfVmFsIF9fdmFsKQorICAgICAgOiBfTV9iaW5hcnlf cHJlZChfX3ByZWQpLCBfTV92YWwoX192YWwpCiAgICAgICB7IH0KIAotICAgICAgdGVtcGxh dGU8dHlwZW5hbWUgX0l0ZXJhdG9yPgotCV9HTElCQ1hYMjBfQ09OU1RFWFBSCiAgICAgICBi b29sCi0Jb3BlcmF0b3IoKShfSXRlcmF0b3IgX19pdCkKLQl7IHJldHVybiBib29sKF9NX2Nv bXAoKl9faXQsIF9NX3ZhbHVlKSk7IH0KKyAgICAgIG9wZXJhdG9yKCkodHlwZW5hbWUgc3Rk OjppdGVyYXRvcl90cmFpdHM8X0l0ZT46OnJlZmVyZW5jZSBfX2xocykKKyAgICAgIHsgcmV0 dXJuIGJvb2woX01fYmluYXJ5X3ByZWQoX19saHMsIF9NX3ZhbCkpOyB9CisjZW5kaWYKKwor ICAgIHByaXZhdGU6CisgICAgICBfQmluYXJ5UHJlZCBfTV9iaW5hcnlfcHJlZDsKKyAgICAg IF9WYWwJICBfTV92YWw7CiAgICAgfTsKIAotICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ29tcGFy ZSwgdHlwZW5hbWUgX1ZhbHVlPgotICAgIF9JdGVyX2NvbXBfdG9fdmFsPF9Db21wYXJlLCBf VmFsdWU+Ci0gICAgX0dMSUJDWFgyMF9DT05TVEVYUFIKLSAgICBfX2l0ZXJfY29tcF92YWwo X0NvbXBhcmUgX19jb21wLCBfVmFsdWUgJl9fdmFsKQorI2lmIF9fY3BsdXNwbHVzID49IDIw MTEwM0wKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX0JQcmVkLCB0eXBlbmFtZSBfSXRlLCB0eXBl bmFtZSBfVmFsPgorICAgIF9HTElCQ1hYMjBfQ09OU1RFWFBSIGlubGluZQorICAgIF9Db21w VmFsPHN0ZDo6X19kZWNheV90PF9CUHJlZD4sIGNvbnN0IF9WYWwmPgorICAgIF9fY29tcF92 YWwoX0JQcmVkJiYgX19wcmVkLCBfSXRlLCBjb25zdCBfVmFsJiBfX3ZhbCkKKyAgICBub2V4 Y2VwdChzdGQ6OmlzX25vdGhyb3dfY29uc3RydWN0aWJsZTxzdGQ6Ol9fZGVjYXlfdDxfQlBy ZWQ+LAorCSAgICAgX0JQcmVkJiY+Ojp2YWx1ZSkKICAgICB7Ci0gICAgICByZXR1cm4gX0l0 ZXJfY29tcF90b192YWw8X0NvbXBhcmUsIF9WYWx1ZT4oX0dMSUJDWFhfTU9WRShfX2NvbXAp LCBfX3ZhbCk7CisgICAgICByZXR1cm4KKwlfQ29tcFZhbDxzdGQ6Ol9fZGVjYXlfdDxfQlBy ZWQ+LCBjb25zdCBfVmFsJj4KKwkoc3RkOjpmb3J3YXJkPF9CUHJlZD4oX19wcmVkKSwgX192 YWwpOwogICAgIH0KKyNlbHNlCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9CUHJlZCwgdHlwZW5h bWUgX0l0ZSwgdHlwZW5hbWUgX1ZhbD4KKyAgICBpbmxpbmUgX0NvbXBWYWw8X0JQcmVkLCBf SXRlLCBjb25zdCBfVmFsJj4KKyAgICBfX2NvbXBfdmFsKF9CUHJlZCBfX3ByZWQsIF9JdGUs IGNvbnN0IF9WYWwmIF9fdmFsKQorICAgIHsgcmV0dXJuIF9Db21wVmFsPF9CUHJlZCwgX0l0 ZSwgY29uc3QgX1ZhbCY+KF9fcHJlZCwgX192YWwpOyB9CisjZW5kaWYKIAotICB0ZW1wbGF0 ZTx0eXBlbmFtZSBfQ29tcGFyZSwgdHlwZW5hbWUgX0l0ZXJhdG9yMT4KLSAgICBzdHJ1Y3Qg X0l0ZXJfY29tcF90b19pdGVyCisjaWYgX19jcGx1c3BsdXMgPj0gMjAxMTAzTAorICB0ZW1w bGF0ZTx0eXBlbmFtZSBfQlByZWQsIHR5cGVuYW1lIF9Jbkl0ZSwgdHlwZW5hbWUgX0l0ZT4K KyAgICBfR0xJQkNYWDIwX0NPTlNURVhQUiBpbmxpbmUKKyAgICBfQ29tcFZhbDxzdGQ6Ol9f ZGVjYXlfdDxfQlByZWQ+LAorCSAgICAgdHlwZW5hbWUgc3RkOjppdGVyYXRvcl90cmFpdHM8 X0l0ZT46OnJlZmVyZW5jZT4KKyAgICBfX2VxdWFsX2l0ZShfQlByZWQmJiBfX3ByZWQsIF9J bkl0ZSwgX0l0ZSAgX19pdGUpCisgICAgbm9leGNlcHQoc3RkOjppc19ub3Rocm93X2NvbnN0 cnVjdGlibGU8c3RkOjpfX2RlY2F5X3Q8X0JQcmVkPiwKKwkgICAgIF9CUHJlZCYmPjo6dmFs dWUpCiAgICAgewotICAgICAgX0NvbXBhcmUgX01fY29tcDsKLSAgICAgIF9JdGVyYXRvcjEg X01faXQxOwotCi0gICAgICBfR0xJQkNYWDIwX0NPTlNURVhQUgotICAgICAgX0l0ZXJfY29t cF90b19pdGVyKF9Db21wYXJlIF9fY29tcCwgX0l0ZXJhdG9yMSBfX2l0MSkKLQk6IF9NX2Nv bXAoX0dMSUJDWFhfTU9WRShfX2NvbXApKSwgX01faXQxKF9faXQxKQotICAgICAgeyB9Ci0K LSAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9JdGVyYXRvcjI+Ci0JX0dMSUJDWFgyMF9DT05T VEVYUFIKLQlib29sCi0Jb3BlcmF0b3IoKShfSXRlcmF0b3IyIF9faXQyKQotCXsgcmV0dXJu IGJvb2woX01fY29tcCgqX19pdDIsICpfTV9pdDEpKTsgfQotICAgIH07CisgICAgICByZXR1 cm4KKwlfQ29tcFZhbDxzdGQ6Ol9fZGVjYXlfdDxfQlByZWQ+LAorCQkgdHlwZW5hbWUgc3Rk OjppdGVyYXRvcl90cmFpdHM8X0l0ZT46OnJlZmVyZW5jZT4KKwkoc3RkOjpmb3J3YXJkPF9C UHJlZD4oX19wcmVkKSwgKl9faXRlKTsKKyAgICB9CiAKLSAgdGVtcGxhdGU8dHlwZW5hbWUg X0NvbXBhcmUsIHR5cGVuYW1lIF9JdGVyYXRvcj4KLSAgICBfR0xJQkNYWDIwX0NPTlNURVhQ UgotICAgIGlubGluZSBfSXRlcl9jb21wX3RvX2l0ZXI8X0NvbXBhcmUsIF9JdGVyYXRvcj4K LSAgICBfX2l0ZXJfY29tcF9pdGVyKF9JdGVyX2NvbXBfaXRlcjxfQ29tcGFyZT4gX19jb21w LCBfSXRlcmF0b3IgX19pdCkKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX0luSXRlLCB0eXBlbmFt ZSBfSXRlPgorICAgIF9HTElCQ1hYMjBfQ09OU1RFWFBSIGlubGluZQorICAgIF9FcXVhbFZh bDx0eXBlbmFtZSBzdGQ6Oml0ZXJhdG9yX3RyYWl0czxfSXRlPjo6cmVmZXJlbmNlPgorICAg IF9fZXF1YWxfaXRlKF9FcXVhbFRvLCBfSW5JdGUsIF9JdGUgX19pdGUpCiAgICAgewotICAg ICAgcmV0dXJuIF9JdGVyX2NvbXBfdG9faXRlcjxfQ29tcGFyZSwgX0l0ZXJhdG9yPigKLQkg IF9HTElCQ1hYX01PVkUoX19jb21wLl9NX2NvbXApLCBfX2l0KTsKKyAgICAgIHJldHVybgor CV9FcXVhbFZhbDx0eXBlbmFtZSBzdGQ6Oml0ZXJhdG9yX3RyYWl0czxfSXRlPjo6cmVmZXJl bmNlPigqX19pdGUpOworICAgIH0KKyNlbHNlCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9CUHJl ZCwgdHlwZW5hbWUgX0luSXRlLCB0eXBlbmFtZSBfSXRlPgorICAgIGlubGluZQorICAgICAg X0NvbXBWYWw8X0JQcmVkLCBfSW5JdGUsIHR5cGVuYW1lIHN0ZDo6aXRlcmF0b3JfdHJhaXRz PF9JdGU+OjpyZWZlcmVuY2U+CisgICAgX19lcXVhbF9pdGUoX0JQcmVkIF9fcHJlZCwgX0lu SXRlLCBfSXRlIF9faXRlKQorICAgIHsKKyAgICAgIHJldHVybgorCV9Db21wVmFsPF9CUHJl ZCwgX0luSXRlLCB0eXBlbmFtZSBzdGQ6Oml0ZXJhdG9yX3RyYWl0czxfSXRlPjo6cmVmZXJl bmNlPgorCShfX3ByZWQsICpfX2l0ZSk7CiAgICAgfQogCi0gIHRlbXBsYXRlPHR5cGVuYW1l IF9QcmVkaWNhdGU+Ci0gICAgc3RydWN0IF9JdGVyX25lZ2F0ZQorICB0ZW1wbGF0ZTx0eXBl bmFtZSBfUmVmMSwgdHlwZW5hbWUgX1JlZjIsIHR5cGVuYW1lIF9Jbkl0ZSwgdHlwZW5hbWUg X0l0ZT4KKyAgICBpbmxpbmUKKyAgICAgIF9FcXVhbFZhbDxfSW5JdGUsIHR5cGVuYW1lIHN0 ZDo6aXRlcmF0b3JfdHJhaXRzPF9JdGU+OjpyZWZlcmVuY2U+CisgICAgX19lcXVhbF9pdGUo Y29uc3QgX0VxdWFsVG9SZWZzPF9SZWYxLCBfUmVmMj4mLCBfSW5JdGUsIF9JdGUgX19pdGUp CiAgICAgewotICAgICAgX1ByZWRpY2F0ZSBfTV9wcmVkOworICAgICAgcmV0dXJuCisJX0Vx dWFsVmFsPF9Jbkl0ZSwgdHlwZW5hbWUgc3RkOjppdGVyYXRvcl90cmFpdHM8X0l0ZT46OnJl ZmVyZW5jZT4KKwkoKl9faXRlKTsKKyAgICB9CisjZW5kaWYKK30gLy8gbmFtZXNwYWNlIF9f b3BzCit9IC8vIG5hbWVzcGFjZSBfX2dudV9jeHgKIAotICAgICAgX0dMSUJDWFgyMF9DT05T VEVYUFIKLSAgICAgIGV4cGxpY2l0Ci0gICAgICBfSXRlcl9uZWdhdGUoX1ByZWRpY2F0ZSBf X3ByZWQpCi0JOiBfTV9wcmVkKF9HTElCQ1hYX01PVkUoX19wcmVkKSkKLSAgICAgIHsgfQog Ci0gICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSXRlcmF0b3I+Ci0JX0dMSUJDWFgyMF9DT05T VEVYUFIKK25hbWVzcGFjZSBzdGQgX0dMSUJDWFhfVklTSUJJTElUWShkZWZhdWx0KQorewor X0dMSUJDWFhfQkVHSU5fTkFNRVNQQUNFX1ZFUlNJT04KKworI2lmIF9fY3BsdXNwbHVzID49 IDIwMTEwM0wKKyAgLy8vIEdlbmVyYWxpemVkIG5lZ2F0b3IuCisgIHRlbXBsYXRlPHR5cGVu YW1lIF9Gbj4KKyAgICBjbGFzcyBfTm90X2ZuCisgICAgeworICAgICAgdGVtcGxhdGU8dHlw ZW5hbWUgX0ZuMiwgdHlwZW5hbWUuLi4gX0FyZ3M+CisJdXNpbmcgX19pbnZfcmVzX3QgPSB0 eXBlbmFtZSBfX2ludm9rZV9yZXN1bHQ8X0ZuMiwgX0FyZ3MuLi4+Ojp0eXBlOworCisgICAg ICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+CisJc3RhdGljIGRlY2x0eXBlKCFzdGQ6OmRlY2x2 YWw8X1RwPigpKQorCV9TX25vdCgpIG5vZXhjZXB0KG5vZXhjZXB0KCFzdGQ6OmRlY2x2YWw8 X1RwPigpKSk7CisKKyAgICBwdWJsaWM6CisgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBfRm4y PgorCWNvbnN0ZXhwcgorCV9Ob3RfZm4oX0ZuMiYmIF9fZm4sIGludCkKKwk6IF9NX2ZuKHN0 ZDo6Zm9yd2FyZDxfRm4yPihfX2ZuKSkgeyB9CisKKyAgICAgIF9Ob3RfZm4oY29uc3QgX05v dF9mbiYgX19mbikgPSBkZWZhdWx0OworICAgICAgX05vdF9mbihfTm90X2ZuJiYgX19mbikg PSBkZWZhdWx0OworICAgICAgfl9Ob3RfZm4oKSA9IGRlZmF1bHQ7CisKKyAgICAgIC8vIE1h Y3JvIHRvIGRlZmluZSBvcGVyYXRvcigpIHdpdGggZ2l2ZW4gY3YtcXVhbGlmaWVycyByZWYt cXVhbGlmaWVycywKKyAgICAgIC8vIGZvcndhcmRpbmcgX01fZm4gYW5kIHRoZSBmdW5jdGlv biBhcmd1bWVudHMgd2l0aCB0aGUgc2FtZSBxdWFsaWZpZXJzLAorICAgICAgLy8gYW5kIGRl ZHVjaW5nIHRoZSByZXR1cm4gdHlwZSBhbmQgZXhjZXB0aW9uLXNwZWNpZmljYXRpb24uCisj IGRlZmluZSBfR0xJQkNYWF9OT1RfRk5fQ0FMTF9PUCggX1FVQUxTICkJCQkJXAorICAgICAg dGVtcGxhdGU8dHlwZW5hbWUuLi4gX0FyZ3MsCQkJCQlcCisJICAgICAgIHR5cGVuYW1lID0g X19lbmFibGVfaWZfdDxfX2lzX2ludm9jYWJsZTxfRm4gX1FVQUxTLCBfQXJncy4uLj46OnZh bHVlPj4gXAorCV9HTElCQ1hYMjBfQ09OU1RFWFBSCQkJCQkJXAorCWRlY2x0eXBlKF9TX25v dDxfX2ludl9yZXNfdDxfRm4gX1FVQUxTLCBfQXJncy4uLj4+KCkpCQlcCisJb3BlcmF0b3Io KShfQXJncyYmLi4uIF9fYXJncykgX1FVQUxTCQkJCVwKKwlub2V4Y2VwdChfX2lzX25vdGhy b3dfaW52b2NhYmxlPF9GbiBfUVVBTFMsIF9BcmdzLi4uPjo6dmFsdWUJXAorCSAgICAmJiBu b2V4Y2VwdChfU19ub3Q8X19pbnZfcmVzX3Q8X0ZuIF9RVUFMUywgX0FyZ3MuLi4+PigpKSkJ XAorCXsJCQkJCQkJCVwKKwkgIHJldHVybiAhc3RkOjpfX2ludm9rZShzdGQ6OmZvcndhcmQ8 IF9GbiBfUVVBTFMgPihfTV9mbiksCVwKKwkJCQlzdGQ6OmZvcndhcmQ8X0FyZ3M+KF9fYXJn cykuLi4pOwlcCisJfQkJCQkJCQkJXAorCQkJCQkJCQkJXAorICAgICAgdGVtcGxhdGU8dHlw ZW5hbWUuLi4gX0FyZ3MsCQkJCQlcCisJICAgICAgIHR5cGVuYW1lID0gX19lbmFibGVfaWZf dDwhX19pc19pbnZvY2FibGU8X0ZuIF9RVUFMUywgX0FyZ3MuLi4+Ojp2YWx1ZT4+IFwKKwl2 b2lkIG9wZXJhdG9yKCkoX0FyZ3MmJi4uLiBfX2FyZ3MpIF9RVUFMUyA9IGRlbGV0ZTsKKwor ICAgICAgX0dMSUJDWFhfTk9UX0ZOX0NBTExfT1AoICYgKQorICAgICAgX0dMSUJDWFhfTk9U X0ZOX0NBTExfT1AoIGNvbnN0ICYgKQorICAgICAgX0dMSUJDWFhfTk9UX0ZOX0NBTExfT1Ao ICYmICkKKyAgICAgIF9HTElCQ1hYX05PVF9GTl9DQUxMX09QKCBjb25zdCAmJiApCisjIHVu ZGVmIF9HTElCQ1hYX05PVF9GTl9DQUxMX09QCisjZWxzZQorICAvLy8gR2VuZXJhbGl6ZWQg bmVnYXRvci4KKyAgdGVtcGxhdGU8dHlwZW5hbWUgX0ZuLCB0eXBlbmFtZSBfSXRlPgorICAg IGNsYXNzIF9Ob3RfZm4KKyAgICB7CisgICAgcHVibGljOgorICAgICAgX05vdF9mbihfRm4g X19mbikKKyAgICAgIDogX01fZm4oX19mbikgeyB9CisKICAgICAgIGJvb2wKLQlvcGVyYXRv cigpKF9JdGVyYXRvciBfX2l0KQotCXsgcmV0dXJuICFib29sKF9NX3ByZWQoKl9faXQpKTsg fQorICAgICAgb3BlcmF0b3IoKSh0eXBlbmFtZSBzdGQ6Oml0ZXJhdG9yX3RyYWl0czxfSXRl Pjo6cmVmZXJlbmNlIF9fYXJnKQorICAgICAgeyByZXR1cm4gIWJvb2woX01fZm4oX19hcmcp KTsgfQorI2VuZGlmCisgICAgcHJpdmF0ZToKKyAgICAgIF9GbiBfTV9mbjsKICAgICB9Owog Ci0gIHRlbXBsYXRlPHR5cGVuYW1lIF9QcmVkaWNhdGU+Ci0gICAgX0dMSUJDWFgyMF9DT05T VEVYUFIKLSAgICBpbmxpbmUgX0l0ZXJfbmVnYXRlPF9QcmVkaWNhdGU+Ci0gICAgX19uZWdh dGUoX0l0ZXJfcHJlZDxfUHJlZGljYXRlPiBfX3ByZWQpCi0gICAgeyByZXR1cm4gX0l0ZXJf bmVnYXRlPF9QcmVkaWNhdGU+KF9HTElCQ1hYX01PVkUoX19wcmVkLl9NX3ByZWQpKTsgfQor ICB0ZW1wbGF0ZTx0eXBlbmFtZSBfRm4sIHR5cGVuYW1lIF9JdGU+CisgICAgaW5saW5lIF9H TElCQ1hYMjBfQ09OU1RFWFBSCisjaWYgX19jcGx1c3BsdXMgPj0gMjAxMTAzTAorICAgIF9O b3RfZm48c3RkOjpfX2RlY2F5X3Q8X0ZuPj4KKyAgICBfX25vdF9mbihfRm4mJiBfX2ZuLCBf SXRlKQorICAgIG5vZXhjZXB0KHN0ZDo6aXNfbm90aHJvd19jb25zdHJ1Y3RpYmxlPHN0ZDo6 X19kZWNheV90PF9Gbj4sIF9GbiYmPjo6dmFsdWUpCisgICAgeyByZXR1cm4gX05vdF9mbjxz dGQ6Ol9fZGVjYXlfdDxfRm4+PntzdGQ6OmZvcndhcmQ8X0ZuPihfX2ZuKSwgMH07IH0KKyNl bHNlCisgICAgX05vdF9mbjxfRm4sIF9JdGU+CisgICAgX19ub3RfZm4oX0ZuIF9fZm4sIF9J dGUpCisgICAgeyByZXR1cm4gX05vdF9mbjxfRm4sIF9JdGU+KF9fZm4pOyB9CisjZW5kaWYK IAotfSAvLyBuYW1lc3BhY2UgX19vcHMKLX0gLy8gbmFtZXNwYWNlIF9fZ251X2N4eAorX0dM SUJDWFhfRU5EX05BTUVTUEFDRV9WRVJTSU9OCit9IC8vIG5hbWVzcGFjZSBzdGQKIAogI2Vu ZGlmCmRpZmYgLS1naXQgYS9saWJzdGRjKystdjMvaW5jbHVkZS9iaXRzL3N0bF9hbGdvLmgg Yi9saWJzdGRjKystdjMvaW5jbHVkZS9iaXRzL3N0bF9hbGdvLmgKaW5kZXggMWE5OTZhYTYx ZGEuLjMwZmQ4NTZiOTQxIDEwMDY0NAotLS0gYS9saWJzdGRjKystdjMvaW5jbHVkZS9iaXRz L3N0bF9hbGdvLmgKKysrIGIvbGlic3RkYysrLXYzL2luY2x1ZGUvYml0cy9zdGxfYWxnby5o CkBAIC04MiwyMSArODIsMjIgQEAgX0dMSUJDWFhfQkVHSU5fTkFNRVNQQUNFX1ZFUlNJT04K ICAgdGVtcGxhdGU8dHlwZW5hbWUgX0l0ZXJhdG9yLCB0eXBlbmFtZSBfQ29tcGFyZT4KICAg ICBfR0xJQkNYWDIwX0NPTlNURVhQUgogICAgIHZvaWQKLSAgICBfX21vdmVfbWVkaWFuX3Rv X2ZpcnN0KF9JdGVyYXRvciBfX3Jlc3VsdCxfSXRlcmF0b3IgX19hLCBfSXRlcmF0b3IgX19i LAotCQkJICAgX0l0ZXJhdG9yIF9fYywgX0NvbXBhcmUgX19jb21wKQorICAgIF9fbW92ZV9t ZWRpYW5fdG9fZmlyc3QoX0l0ZXJhdG9yIF9fcmVzdWx0LAorCQkJICAgX0l0ZXJhdG9yIF9f YSwgX0l0ZXJhdG9yIF9fYiwgX0l0ZXJhdG9yIF9fYywKKwkJCSAgIF9HTElCQ1hYX0ZXRFJF RihfQ29tcGFyZSkgX19jb21wKQogICAgIHsKLSAgICAgIGlmIChfX2NvbXAoX19hLCBfX2Ip KQorICAgICAgaWYgKF9fY29tcCgqX19hLCAqX19iKSkKIAl7Ci0JICBpZiAoX19jb21wKF9f YiwgX19jKSkKKwkgIGlmIChfX2NvbXAoKl9fYiwgKl9fYykpCiAJICAgIHN0ZDo6aXRlcl9z d2FwKF9fcmVzdWx0LCBfX2IpOwotCSAgZWxzZSBpZiAoX19jb21wKF9fYSwgX19jKSkKKwkg IGVsc2UgaWYgKF9fY29tcCgqX19hLCAqX19jKSkKIAkgICAgc3RkOjppdGVyX3N3YXAoX19y ZXN1bHQsIF9fYyk7CiAJICBlbHNlCiAJICAgIHN0ZDo6aXRlcl9zd2FwKF9fcmVzdWx0LCBf X2EpOwogCX0KLSAgICAgIGVsc2UgaWYgKF9fY29tcChfX2EsIF9fYykpCisgICAgICBlbHNl IGlmIChfX2NvbXAoKl9fYSwgKl9fYykpCiAJc3RkOjppdGVyX3N3YXAoX19yZXN1bHQsIF9f YSk7Ci0gICAgICBlbHNlIGlmIChfX2NvbXAoX19iLCBfX2MpKQorICAgICAgZWxzZSBpZiAo X19jb21wKCpfX2IsICpfX2MpKQogCXN0ZDo6aXRlcl9zd2FwKF9fcmVzdWx0LCBfX2MpOwog ICAgICAgZWxzZQogCXN0ZDo6aXRlcl9zd2FwKF9fcmVzdWx0LCBfX2IpOwpAQCAtMTA3LDEw ICsxMDgsMTEgQEAgX0dMSUJDWFhfQkVHSU5fTkFNRVNQQUNFX1ZFUlNJT04KICAgICBfR0xJ QkNYWDIwX0NPTlNURVhQUgogICAgIGlubGluZSBfSW5wdXRJdGVyYXRvcgogICAgIF9fZmlu ZF9pZl9ub3QoX0lucHV0SXRlcmF0b3IgX19maXJzdCwgX0lucHV0SXRlcmF0b3IgX19sYXN0 LAotCQkgIF9QcmVkaWNhdGUgX19wcmVkKQorCQkgIF9HTElCQ1hYX0ZXRFJFRihfUHJlZGlj YXRlKSBfX3ByZWQpCiAgICAgewotICAgICAgcmV0dXJuIHN0ZDo6X19maW5kX2lmKF9fZmly c3QsIF9fbGFzdCwKLQkJCSAgICBfX2dudV9jeHg6Ol9fb3BzOjpfX25lZ2F0ZShfX3ByZWQp LAorICAgICAgX19kZWNsdHlwZShzdGQ6Ol9fbm90X2ZuKF9HTElCQ1hYX0ZPUldBUkQoX1By ZWRpY2F0ZSwgX19wcmVkKSwgX19maXJzdCkpCisJX19wcmQgPSBzdGQ6Ol9fbm90X2ZuKF9H TElCQ1hYX0ZPUldBUkQoX1ByZWRpY2F0ZSwgX19wcmVkKSwgX19maXJzdCk7CisgICAgICBy ZXR1cm4gc3RkOjpfX2ZpbmRfaWYoX19maXJzdCwgX19sYXN0LCBfR0xJQkNYWF9NT1ZFKF9f cHJkKSwKIAkJCSAgICBzdGQ6Ol9faXRlcmF0b3JfY2F0ZWdvcnkoX19maXJzdCkpOwogICAg IH0KIApAQCAtMTIwLDEwICsxMjIsMTEgQEAgX0dMSUJDWFhfQkVHSU5fTkFNRVNQQUNFX1ZF UlNJT04KICAgdGVtcGxhdGU8dHlwZW5hbWUgX0lucHV0SXRlcmF0b3IsIHR5cGVuYW1lIF9Q cmVkaWNhdGUsIHR5cGVuYW1lIF9EaXN0YW5jZT4KICAgICBfR0xJQkNYWDIwX0NPTlNURVhQ UgogICAgIF9JbnB1dEl0ZXJhdG9yCi0gICAgX19maW5kX2lmX25vdF9uKF9JbnB1dEl0ZXJh dG9yIF9fZmlyc3QsIF9EaXN0YW5jZSYgX19sZW4sIF9QcmVkaWNhdGUgX19wcmVkKQorICAg IF9fZmluZF9pZl9ub3RfbihfSW5wdXRJdGVyYXRvciBfX2ZpcnN0LCBfRGlzdGFuY2UmIF9f bGVuLAorCQkgICAgX0dMSUJDWFhfRldEUkVGKF9QcmVkaWNhdGUpIF9fcHJlZCkKICAgICB7 CiAgICAgICBmb3IgKDsgX19sZW47IC0tX19sZW4sICAodm9pZCkgKytfX2ZpcnN0KQotCWlm ICghX19wcmVkKF9fZmlyc3QpKQorCWlmICghX19wcmVkKCpfX2ZpcnN0KSkKIAkgIGJyZWFr OwogICAgICAgcmV0dXJuIF9fZmlyc3Q7CiAgICAgfQpAQCAtMTUwLDcgKzE1Myw4IEBAIF9H TElCQ1hYX0JFR0lOX05BTUVTUEFDRV9WRVJTSU9OCiAgICAgX0dMSUJDWFgyMF9DT05TVEVY UFIKICAgICBfRm9yd2FyZEl0ZXJhdG9yCiAgICAgX19zZWFyY2hfbl9hdXgoX0ZvcndhcmRJ dGVyYXRvciBfX2ZpcnN0LCBfRm9yd2FyZEl0ZXJhdG9yIF9fbGFzdCwKLQkJICAgX0ludGVn ZXIgX19jb3VudCwgX1VuYXJ5UHJlZGljYXRlIF9fdW5hcnlfcHJlZCwKKwkJICAgX0ludGVn ZXIgX19jb3VudCwKKwkJICAgX0dMSUJDWFhfRldEUkVGKF9VbmFyeVByZWRpY2F0ZSkgX191 bmFyeV9wcmVkLAogCQkgICBzdGQ6OmZvcndhcmRfaXRlcmF0b3JfdGFnKQogICAgIHsKICAg ICAgIF9fZmlyc3QgPSBzdGQ6Ol9fZmluZF9pZihfX2ZpcnN0LCBfX2xhc3QsIF9fdW5hcnlf cHJlZCk7CkBAIC0xNjAsNyArMTY0LDcgQEAgX0dMSUJDWFhfQkVHSU5fTkFNRVNQQUNFX1ZF UlNJT04KIAkgICAgX19uID0gX19jb3VudDsKIAkgIF9Gb3J3YXJkSXRlcmF0b3IgX19pID0g X19maXJzdDsKIAkgICsrX19pOwotCSAgd2hpbGUgKF9faSAhPSBfX2xhc3QgJiYgX19uICE9 IDEgJiYgX191bmFyeV9wcmVkKF9faSkpCisJICB3aGlsZSAoX19pICE9IF9fbGFzdCAmJiBf X24gIT0gMSAmJiBfX3VuYXJ5X3ByZWQoKl9faSkpCiAJICAgIHsKIAkgICAgICArK19faTsK IAkgICAgICAtLV9fbjsKQEAgLTE4Myw3ICsxODcsOCBAQCBfR0xJQkNYWF9CRUdJTl9OQU1F U1BBQ0VfVkVSU0lPTgogICAgIF9HTElCQ1hYMjBfQ09OU1RFWFBSCiAgICAgX1JhbmRvbUFj Y2Vzc0l0ZXIKICAgICBfX3NlYXJjaF9uX2F1eChfUmFuZG9tQWNjZXNzSXRlciBfX2ZpcnN0 LCBfUmFuZG9tQWNjZXNzSXRlciBfX2xhc3QsCi0JCSAgIF9JbnRlZ2VyIF9fY291bnQsIF9V bmFyeVByZWRpY2F0ZSBfX3VuYXJ5X3ByZWQsCisJCSAgIF9JbnRlZ2VyIF9fY291bnQsCisJ CSAgIF9HTElCQ1hYX0ZXRFJFRihfVW5hcnlQcmVkaWNhdGUpIF9fdW5hcnlfcHJlZCwKIAkJ ICAgc3RkOjpyYW5kb21fYWNjZXNzX2l0ZXJhdG9yX3RhZykKICAgICB7CiAgICAgICB0eXBl ZGVmIHR5cGVuYW1lIHN0ZDo6aXRlcmF0b3JfdHJhaXRzPF9SYW5kb21BY2Nlc3NJdGVyPjo6 ZGlmZmVyZW5jZV90eXBlCkBAIC0xOTksNyArMjA0LDcgQEAgX0dMSUJDWFhfQkVHSU5fTkFN RVNQQUNFX1ZFUlNJT04KIAkgIC8vIF9fZmlyc3QgaGVyZSBpcyBhbHdheXMgcG9pbnRpbmcg dG8gb25lIHBhc3QgdGhlIGxhc3QgZWxlbWVudCBvZgogCSAgLy8gbmV4dCBwb3NzaWJsZSBt YXRjaC4KIAkgIF9SYW5kb21BY2Nlc3NJdGVyIF9fYmFja1RyYWNrID0gX19maXJzdDsgCi0J ICB3aGlsZSAoX191bmFyeV9wcmVkKC0tX19iYWNrVHJhY2spKQorCSAgd2hpbGUgKF9fdW5h cnlfcHJlZCgqKC0tX19iYWNrVHJhY2spKSkKIAkgICAgewogCSAgICAgIGlmICgtLV9fcmVt YWluZGVyID09IDApCiAJCXJldHVybiAoX19maXJzdCAtIF9fY291bnQpOyAvLyBTdWNjZXNz CkBAIC0yMTUsMTUgKzIyMCwxOCBAQCBfR0xJQkNYWF9CRUdJTl9OQU1FU1BBQ0VfVkVSU0lP TgogICAgIF9Gb3J3YXJkSXRlcmF0b3IKICAgICBfX3NlYXJjaF9uKF9Gb3J3YXJkSXRlcmF0 b3IgX19maXJzdCwgX0ZvcndhcmRJdGVyYXRvciBfX2xhc3QsCiAJICAgICAgIF9JbnRlZ2Vy IF9fY291bnQsCi0JICAgICAgIF9VbmFyeVByZWRpY2F0ZSBfX3VuYXJ5X3ByZWQpCisJICAg ICAgIF9HTElCQ1hYX0ZXRFJFRihfVW5hcnlQcmVkaWNhdGUpIF9fdW5hcnlfcHJlZCkKICAg ICB7CiAgICAgICBpZiAoX19jb3VudCA8PSAwKQogCXJldHVybiBfX2ZpcnN0OwogCiAgICAg ICBpZiAoX19jb3VudCA9PSAxKQotCXJldHVybiBzdGQ6Ol9fZmluZF9pZihfX2ZpcnN0LCBf X2xhc3QsIF9fdW5hcnlfcHJlZCk7CisJcmV0dXJuIHN0ZDo6X19maW5kX2lmKF9fZmlyc3Qs IF9fbGFzdCwKKwkJCSAgICAgIF9HTElCQ1hYX0ZPUldBUkQoX1VuYXJ5UHJlZGljYXRlLCBf X3VuYXJ5X3ByZWQpKTsKIAotICAgICAgcmV0dXJuIHN0ZDo6X19zZWFyY2hfbl9hdXgoX19m aXJzdCwgX19sYXN0LCBfX2NvdW50LCBfX3VuYXJ5X3ByZWQsCisgICAgICByZXR1cm4gc3Rk OjpfX3NlYXJjaF9uX2F1eAorCShfX2ZpcnN0LCBfX2xhc3QsIF9fY291bnQsCisJIF9HTElC Q1hYX0ZPUldBUkQoX1VuYXJ5UHJlZGljYXRlLCBfX3VuYXJ5X3ByZWQpLAogCSBzdGQ6Ol9f aXRlcmF0b3JfY2F0ZWdvcnkoX19maXJzdCkpOwogICAgIH0KIApAQCAtMjM1LDcgKzI0Myw3 IEBAIF9HTElCQ1hYX0JFR0lOX05BTUVTUEFDRV9WRVJTSU9OCiAgICAgX19maW5kX2VuZChf Rm9yd2FyZEl0ZXJhdG9yMSBfX2ZpcnN0MSwgX0ZvcndhcmRJdGVyYXRvcjEgX19sYXN0MSwK IAkgICAgICAgX0ZvcndhcmRJdGVyYXRvcjIgX19maXJzdDIsIF9Gb3J3YXJkSXRlcmF0b3Iy IF9fbGFzdDIsCiAJICAgICAgIGZvcndhcmRfaXRlcmF0b3JfdGFnLCBmb3J3YXJkX2l0ZXJh dG9yX3RhZywKLQkgICAgICAgX0JpbmFyeVByZWRpY2F0ZSBfX2NvbXApCisJICAgICAgIF9H TElCQ1hYX0ZXRFJFRihfQmluYXJ5UHJlZGljYXRlKSBfX2NvbXApCiAgICAgewogICAgICAg aWYgKF9fZmlyc3QyID09IF9fbGFzdDIpCiAJcmV0dXJuIF9fbGFzdDE7CkBAIC0yNDMsOCAr MjUxLDggQEAgX0dMSUJDWFhfQkVHSU5fTkFNRVNQQUNFX1ZFUlNJT04KICAgICAgIF9Gb3J3 YXJkSXRlcmF0b3IxIF9fcmVzdWx0ID0gX19sYXN0MTsKICAgICAgIHdoaWxlICgxKQogCXsK LQkgIF9Gb3J3YXJkSXRlcmF0b3IxIF9fbmV3X3Jlc3VsdAotCSAgICA9IHN0ZDo6X19zZWFy Y2goX19maXJzdDEsIF9fbGFzdDEsIF9fZmlyc3QyLCBfX2xhc3QyLCBfX2NvbXApOworCSAg X0ZvcndhcmRJdGVyYXRvcjEgX19uZXdfcmVzdWx0ID0gc3RkOjpfX3NlYXJjaAorCSAgICAo X19maXJzdDEsIF9fbGFzdDEsIF9fZmlyc3QyLCBfX2xhc3QyLCBfX2NvbXApOwogCSAgaWYg KF9fbmV3X3Jlc3VsdCA9PSBfX2xhc3QxKQogCSAgICByZXR1cm4gX19yZXN1bHQ7CiAJICBl bHNlCkBAIC0yNjYsNyArMjc0LDcgQEAgX0dMSUJDWFhfQkVHSU5fTkFNRVNQQUNFX1ZFUlNJ T04KIAkgICAgICAgX0JpZGlyZWN0aW9uYWxJdGVyYXRvcjIgX19maXJzdDIsCiAJICAgICAg IF9CaWRpcmVjdGlvbmFsSXRlcmF0b3IyIF9fbGFzdDIsCiAJICAgICAgIGJpZGlyZWN0aW9u YWxfaXRlcmF0b3JfdGFnLCBiaWRpcmVjdGlvbmFsX2l0ZXJhdG9yX3RhZywKLQkgICAgICAg X0JpbmFyeVByZWRpY2F0ZSBfX2NvbXApCisJICAgICAgIF9HTElCQ1hYX0ZXRFJFRihfQmlu YXJ5UHJlZGljYXRlKSBfX2NvbXApCiAgICAgewogICAgICAgLy8gY29uY2VwdCByZXF1aXJl bWVudHMKICAgICAgIF9fZ2xpYmN4eF9mdW5jdGlvbl9yZXF1aXJlcyhfQmlkaXJlY3Rpb25h bEl0ZXJhdG9yQ29uY2VwdDwKQEAgLTI3OSw5ICsyODcsOSBAQCBfR0xJQkNYWF9CRUdJTl9O QU1FU1BBQ0VfVkVSU0lPTgogCiAgICAgICBfUmV2SXRlcmF0b3IxIF9fcmxhc3QxKF9fZmly c3QxKTsKICAgICAgIF9SZXZJdGVyYXRvcjIgX19ybGFzdDIoX19maXJzdDIpOwotICAgICAg X1Jldkl0ZXJhdG9yMSBfX3JyZXN1bHQgPSBzdGQ6Ol9fc2VhcmNoKF9SZXZJdGVyYXRvcjEo X19sYXN0MSksIF9fcmxhc3QxLAotCQkJCQkgICAgICBfUmV2SXRlcmF0b3IyKF9fbGFzdDIp LCBfX3JsYXN0MiwKLQkJCQkJICAgICAgX19jb21wKTsKKyAgICAgIF9SZXZJdGVyYXRvcjEg X19ycmVzdWx0ID0gc3RkOjpfX3NlYXJjaAorCShfUmV2SXRlcmF0b3IxKF9fbGFzdDEpLCBf X3JsYXN0MSwgX1Jldkl0ZXJhdG9yMihfX2xhc3QyKSwgX19ybGFzdDIsCisJIF9HTElCQ1hY X0ZPUldBUkQoX0JpbmFyeVByZWRpY2F0ZSwgX19jb21wKSk7CiAKICAgICAgIGlmIChfX3Jy ZXN1bHQgPT0gX19ybGFzdDEpCiAJcmV0dXJuIF9fbGFzdDE7CkBAIC0zMzQsMTAgKzM0Miwx MiBAQCBfR0xJQkNYWF9CRUdJTl9OQU1FU1BBQ0VfVkVSU0lPTgogICAgICAgX19nbGliY3h4 X3JlcXVpcmVzX3ZhbGlkX3JhbmdlKF9fZmlyc3QxLCBfX2xhc3QxKTsKICAgICAgIF9fZ2xp YmN4eF9yZXF1aXJlc192YWxpZF9yYW5nZShfX2ZpcnN0MiwgX19sYXN0Mik7CiAKLSAgICAg IHJldHVybiBzdGQ6Ol9fZmluZF9lbmQoX19maXJzdDEsIF9fbGFzdDEsIF9fZmlyc3QyLCBf X2xhc3QyLAotCQkJICAgICBzdGQ6Ol9faXRlcmF0b3JfY2F0ZWdvcnkoX19maXJzdDEpLAot CQkJICAgICBzdGQ6Ol9faXRlcmF0b3JfY2F0ZWdvcnkoX19maXJzdDIpLAotCQkJICAgICBf X2dudV9jeHg6Ol9fb3BzOjpfX2l0ZXJfZXF1YWxfdG9faXRlcigpKTsKKyAgICAgIF9fZGVj bHR5cGUoX19nbnVfY3h4OjpfX29wczo6X19lcXVhbF90byhfX2ZpcnN0MSwgX19maXJzdDIp KSBfX2NvbXAgPQorCV9fZ251X2N4eDo6X19vcHM6Ol9fZXF1YWxfdG8oX19maXJzdDEsIF9f Zmlyc3QyKTsKKyAgICAgIHJldHVybiBzdGQ6Ol9fZmluZF9lbmQKKwkoX19maXJzdDEsIF9f bGFzdDEsIF9fZmlyc3QyLCBfX2xhc3QyLAorCSBzdGQ6Ol9faXRlcmF0b3JfY2F0ZWdvcnko X19maXJzdDEpLCBzdGQ6Ol9faXRlcmF0b3JfY2F0ZWdvcnkoX19maXJzdDIpLAorCSBfX2Nv bXApOwogICAgIH0KIAogICAvKioKQEAgLTM4NSwxMCArMzk1LDEwIEBAIF9HTElCQ1hYX0JF R0lOX05BTUVTUEFDRV9WRVJTSU9OCiAgICAgICBfX2dsaWJjeHhfcmVxdWlyZXNfdmFsaWRf cmFuZ2UoX19maXJzdDEsIF9fbGFzdDEpOwogICAgICAgX19nbGliY3h4X3JlcXVpcmVzX3Zh bGlkX3JhbmdlKF9fZmlyc3QyLCBfX2xhc3QyKTsKIAotICAgICAgcmV0dXJuIHN0ZDo6X19m aW5kX2VuZChfX2ZpcnN0MSwgX19sYXN0MSwgX19maXJzdDIsIF9fbGFzdDIsCi0JCQkgICAg IHN0ZDo6X19pdGVyYXRvcl9jYXRlZ29yeShfX2ZpcnN0MSksCi0JCQkgICAgIHN0ZDo6X19p dGVyYXRvcl9jYXRlZ29yeShfX2ZpcnN0MiksCi0JCQkgICAgIF9fZ251X2N4eDo6X19vcHM6 Ol9faXRlcl9jb21wX2l0ZXIoX19jb21wKSk7CisgICAgICByZXR1cm4gc3RkOjpfX2ZpbmRf ZW5kCisJKF9fZmlyc3QxLCBfX2xhc3QxLCBfX2ZpcnN0MiwgX19sYXN0MiwKKwkgc3RkOjpf X2l0ZXJhdG9yX2NhdGVnb3J5KF9fZmlyc3QxKSwgc3RkOjpfX2l0ZXJhdG9yX2NhdGVnb3J5 KF9fZmlyc3QyKSwKKwkgX0dMSUJDWFhfTU9WRShfX2NvbXApKTsKICAgICB9CiAKICNpZiBf X2NwbHVzcGx1cyA+PSAyMDExMDNMCkBAIC00MDgsNyArNDE4LDcgQEAgX0dMSUJDWFhfQkVH SU5fTkFNRVNQQUNFX1ZFUlNJT04KICAgICBfR0xJQkNYWF9OT0RJU0NBUkQgX0dMSUJDWFgy MF9DT05TVEVYUFIKICAgICBpbmxpbmUgYm9vbAogICAgIGFsbF9vZihfSW5wdXRJdGVyYXRv ciBfX2ZpcnN0LCBfSW5wdXRJdGVyYXRvciBfX2xhc3QsIF9QcmVkaWNhdGUgX19wcmVkKQot ICAgIHsgcmV0dXJuIF9fbGFzdCA9PSBzdGQ6OmZpbmRfaWZfbm90KF9fZmlyc3QsIF9fbGFz dCwgX19wcmVkKTsgfQorICAgIHsgcmV0dXJuIF9fbGFzdCA9PSBzdGQ6OmZpbmRfaWZfbm90 KF9fZmlyc3QsIF9fbGFzdCwgc3RkOjptb3ZlKF9fcHJlZCkpOyB9CiAKICAgLyoqCiAgICAq ICBAYnJpZWYgIENoZWNrcyB0aGF0IGEgcHJlZGljYXRlIGlzIGZhbHNlIGZvciBhbGwgdGhl IGVsZW1lbnRzCkBAIC00MjYsNyArNDM2LDEwIEBAIF9HTElCQ1hYX0JFR0lOX05BTUVTUEFD RV9WRVJTSU9OCiAgICAgX0dMSUJDWFhfTk9ESVNDQVJEIF9HTElCQ1hYMjBfQ09OU1RFWFBS CiAgICAgaW5saW5lIGJvb2wKICAgICBub25lX29mKF9JbnB1dEl0ZXJhdG9yIF9fZmlyc3Qs IF9JbnB1dEl0ZXJhdG9yIF9fbGFzdCwgX1ByZWRpY2F0ZSBfX3ByZWQpCi0gICAgeyByZXR1 cm4gX19sYXN0ID09IF9HTElCQ1hYX1NURF9BOjpmaW5kX2lmKF9fZmlyc3QsIF9fbGFzdCwg X19wcmVkKTsgfQorICAgIHsKKyAgICAgIHJldHVybgorCV9fbGFzdCA9PSBfR0xJQkNYWF9T VERfQTo6ZmluZF9pZihfX2ZpcnN0LCBfX2xhc3QsIHN0ZDo6bW92ZShfX3ByZWQpKTsKKyAg ICB9CiAKICAgLyoqCiAgICAqICBAYnJpZWYgIENoZWNrcyB0aGF0IGEgcHJlZGljYXRlIGlz IHRydWUgZm9yIGF0IGxlYXN0IG9uZSBlbGVtZW50CkBAIC00NDUsNyArNDU4LDcgQEAgX0dM SUJDWFhfQkVHSU5fTkFNRVNQQUNFX1ZFUlNJT04KICAgICBfR0xJQkNYWF9OT0RJU0NBUkQg X0dMSUJDWFgyMF9DT05TVEVYUFIKICAgICBpbmxpbmUgYm9vbAogICAgIGFueV9vZihfSW5w dXRJdGVyYXRvciBfX2ZpcnN0LCBfSW5wdXRJdGVyYXRvciBfX2xhc3QsIF9QcmVkaWNhdGUg X19wcmVkKQotICAgIHsgcmV0dXJuICFzdGQ6Om5vbmVfb2YoX19maXJzdCwgX19sYXN0LCBf X3ByZWQpOyB9CisgICAgeyByZXR1cm4gIXN0ZDo6bm9uZV9vZihfX2ZpcnN0LCBfX2xhc3Qs IHN0ZDo6bW92ZShfX3ByZWQpKTsgfQogCiAgIC8qKgogICAgKiAgQGJyaWVmICBGaW5kIHRo ZSBmaXJzdCBlbGVtZW50IGluIGEgc2VxdWVuY2UgZm9yIHdoaWNoIGEKQEAgLTQ2OCw4ICs0 ODEsNyBAQCBfR0xJQkNYWF9CRUdJTl9OQU1FU1BBQ0VfVkVSU0lPTgogICAgICAgX19nbGli Y3h4X2Z1bmN0aW9uX3JlcXVpcmVzKF9VbmFyeVByZWRpY2F0ZUNvbmNlcHQ8X1ByZWRpY2F0 ZSwKIAkgICAgICB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X0lucHV0SXRlcmF0b3I+Ojp2 YWx1ZV90eXBlPikKICAgICAgIF9fZ2xpYmN4eF9yZXF1aXJlc192YWxpZF9yYW5nZShfX2Zp cnN0LCBfX2xhc3QpOwotICAgICAgcmV0dXJuIHN0ZDo6X19maW5kX2lmX25vdChfX2ZpcnN0 LCBfX2xhc3QsCi0JCQkJX19nbnVfY3h4OjpfX29wczo6X19wcmVkX2l0ZXIoX19wcmVkKSk7 CisgICAgICByZXR1cm4gc3RkOjpfX2ZpbmRfaWZfbm90KF9fZmlyc3QsIF9fbGFzdCwgc3Rk Ojptb3ZlKF9fcHJlZCkpOwogICAgIH0KIAogICAvKioKQEAgLTQ5Miw3ICs1MDQsNyBAQCBf R0xJQkNYWF9CRUdJTl9OQU1FU1BBQ0VfVkVSU0lPTgogICAgICAgaWYgKF9fZmlyc3QgPT0g X19sYXN0KQogCXJldHVybiB0cnVlOwogICAgICAgKytfX2ZpcnN0OwotICAgICAgcmV0dXJu IHN0ZDo6bm9uZV9vZihfX2ZpcnN0LCBfX2xhc3QsIF9fcHJlZCk7CisgICAgICByZXR1cm4g c3RkOjpub25lX29mKF9fZmlyc3QsIF9fbGFzdCwgc3RkOjptb3ZlKF9fcHJlZCkpOwogICAg IH0KIAogICAvKioKQEAgLTUzOSwxNyArNTUxLDE4IEBAIF9HTElCQ1hYX0JFR0lOX05BTUVT UEFDRV9WRVJTSU9OCiAJfQogICAgICAgcmV0dXJuIF9fZmlyc3Q7CiAgICAgfQotI2VuZGlm CisjZW5kaWYgLy8gQysrMTEKIAogICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSW5wdXRJdGVyYXRv ciwgdHlwZW5hbWUgX091dHB1dEl0ZXJhdG9yLAogCSAgIHR5cGVuYW1lIF9QcmVkaWNhdGU+ CiAgICAgX0dMSUJDWFgyMF9DT05TVEVYUFIKICAgICBfT3V0cHV0SXRlcmF0b3IKICAgICBf X3JlbW92ZV9jb3B5X2lmKF9JbnB1dEl0ZXJhdG9yIF9fZmlyc3QsIF9JbnB1dEl0ZXJhdG9y IF9fbGFzdCwKLQkJICAgICBfT3V0cHV0SXRlcmF0b3IgX19yZXN1bHQsIF9QcmVkaWNhdGUg X19wcmVkKQorCQkgICAgIF9PdXRwdXRJdGVyYXRvciBfX3Jlc3VsdCwKKwkJICAgICBfR0xJ QkNYWF9GV0RSRUYoX1ByZWRpY2F0ZSkgX19wcmVkKQogICAgIHsKICAgICAgIGZvciAoOyBf X2ZpcnN0ICE9IF9fbGFzdDsgKytfX2ZpcnN0KQotCWlmICghX19wcmVkKF9fZmlyc3QpKQor CWlmICghX19wcmVkKCpfX2ZpcnN0KSkKIAkgIHsKIAkgICAgKl9fcmVzdWx0ID0gKl9fZmly c3Q7CiAJICAgICsrX19yZXN1bHQ7CkBAIC01ODUsOCArNTk4LDkgQEAgX0dMSUJDWFhfQkVH SU5fTkFNRVNQQUNFX1ZFUlNJT04KIAkgICAgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9J bnB1dEl0ZXJhdG9yPjo6dmFsdWVfdHlwZSwgX1RwPikKICAgICAgIF9fZ2xpYmN4eF9yZXF1 aXJlc192YWxpZF9yYW5nZShfX2ZpcnN0LCBfX2xhc3QpOwogCi0gICAgICByZXR1cm4gc3Rk OjpfX3JlbW92ZV9jb3B5X2lmKF9fZmlyc3QsIF9fbGFzdCwgX19yZXN1bHQsCi0JX19nbnVf Y3h4OjpfX29wczo6X19pdGVyX2VxdWFsc192YWwoX192YWx1ZSkpOworICAgICAgX19kZWNs dHlwZShfX2dudV9jeHg6Ol9fb3BzOjpfX2VxdWFsX3ZhbChfX2ZpcnN0LCBfX3ZhbHVlKSkg X19wcmVkID0KKwlfX2dudV9jeHg6Ol9fb3BzOjpfX2VxdWFsX3ZhbChfX2ZpcnN0LCBfX3Zh bHVlKTsKKyAgICAgIHJldHVybiBzdGQ6Ol9fcmVtb3ZlX2NvcHlfaWYoX19maXJzdCwgX19s YXN0LCBfX3Jlc3VsdCwgX19wcmVkKTsKICAgICB9CiAKICAgLyoqCkBAIC02MjAsNyArNjM0 LDcgQEAgX0dMSUJDWFhfQkVHSU5fTkFNRVNQQUNFX1ZFUlNJT04KICAgICAgIF9fZ2xpYmN4 eF9yZXF1aXJlc192YWxpZF9yYW5nZShfX2ZpcnN0LCBfX2xhc3QpOwogCiAgICAgICByZXR1 cm4gc3RkOjpfX3JlbW92ZV9jb3B5X2lmKF9fZmlyc3QsIF9fbGFzdCwgX19yZXN1bHQsCi0J CQkJICAgX19nbnVfY3h4OjpfX29wczo6X19wcmVkX2l0ZXIoX19wcmVkKSk7CisJCQkJICAg X0dMSUJDWFhfTU9WRShfX3ByZWQpKTsKICAgICB9CiAKICNpZiBfX2NwbHVzcGx1cyA+PSAy MDExMDNMCkBAIC03OTUsOCArODA5LDkgQEAgX0dMSUJDWFhfQkVHSU5fTkFNRVNQQUNFX1ZF UlNJT04KIAkgICAgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9Gb3J3YXJkSXRlcmF0b3I+ Ojp2YWx1ZV90eXBlLCBfVHA+KQogICAgICAgX19nbGliY3h4X3JlcXVpcmVzX3ZhbGlkX3Jh bmdlKF9fZmlyc3QsIF9fbGFzdCk7CiAKLSAgICAgIHJldHVybiBzdGQ6Ol9fcmVtb3ZlX2lm KF9fZmlyc3QsIF9fbGFzdCwKLQkJX19nbnVfY3h4OjpfX29wczo6X19pdGVyX2VxdWFsc192 YWwoX192YWx1ZSkpOworICAgICAgX19kZWNsdHlwZShfX2dudV9jeHg6Ol9fb3BzOjpfX2Vx dWFsX3ZhbChfX2ZpcnN0LCBfX3ZhbHVlKSkgX19jb21wID0KKwlfX2dudV9jeHg6Ol9fb3Bz OjpfX2VxdWFsX3ZhbChfX2ZpcnN0LCBfX3ZhbHVlKTsKKyAgICAgIHJldHVybiBzdGQ6Ol9f cmVtb3ZlX2lmKF9fZmlyc3QsIF9fbGFzdCwgX19jb21wKTsKICAgICB9CiAKICAgLyoqCkBA IC04MjksMjIgKzg0NCwyMSBAQCBfR0xJQkNYWF9CRUdJTl9OQU1FU1BBQ0VfVkVSU0lPTgog CSAgICB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X0ZvcndhcmRJdGVyYXRvcj46OnZhbHVl X3R5cGU+KQogICAgICAgX19nbGliY3h4X3JlcXVpcmVzX3ZhbGlkX3JhbmdlKF9fZmlyc3Qs IF9fbGFzdCk7CiAKLSAgICAgIHJldHVybiBzdGQ6Ol9fcmVtb3ZlX2lmKF9fZmlyc3QsIF9f bGFzdCwKLQkJCSAgICAgIF9fZ251X2N4eDo6X19vcHM6Ol9fcHJlZF9pdGVyKF9fcHJlZCkp OworICAgICAgcmV0dXJuIHN0ZDo6X19yZW1vdmVfaWYoX19maXJzdCwgX19sYXN0LCBfR0xJ QkNYWF9NT1ZFKF9fcHJlZCkpOwogICAgIH0KIAogICB0ZW1wbGF0ZTx0eXBlbmFtZSBfRm9y d2FyZEl0ZXJhdG9yLCB0eXBlbmFtZSBfQmluYXJ5UHJlZGljYXRlPgogICAgIF9HTElCQ1hY MjBfQ09OU1RFWFBSCiAgICAgX0ZvcndhcmRJdGVyYXRvcgogICAgIF9fYWRqYWNlbnRfZmlu ZChfRm9yd2FyZEl0ZXJhdG9yIF9fZmlyc3QsIF9Gb3J3YXJkSXRlcmF0b3IgX19sYXN0LAot CQkgICAgX0JpbmFyeVByZWRpY2F0ZSBfX2JpbmFyeV9wcmVkKQorCQkgICAgX0dMSUJDWFhf RldEUkVGKF9CaW5hcnlQcmVkaWNhdGUpIF9fYmluYXJ5X3ByZWQpCiAgICAgewogICAgICAg aWYgKF9fZmlyc3QgPT0gX19sYXN0KQogCXJldHVybiBfX2xhc3Q7CiAgICAgICBfRm9yd2Fy ZEl0ZXJhdG9yIF9fbmV4dCA9IF9fZmlyc3Q7CiAgICAgICB3aGlsZSAoKytfX25leHQgIT0g X19sYXN0KQogCXsKLQkgIGlmIChfX2JpbmFyeV9wcmVkKF9fZmlyc3QsIF9fbmV4dCkpCisJ ICBpZiAoX19iaW5hcnlfcHJlZCgqX19maXJzdCwgKl9fbmV4dCkpCiAJICAgIHJldHVybiBf X2ZpcnN0OwogCSAgX19maXJzdCA9IF9fbmV4dDsKIAl9CkBAIC04NTUsNyArODY5LDcgQEAg X0dMSUJDWFhfQkVHSU5fTkFNRVNQQUNFX1ZFUlNJT04KICAgICBfR0xJQkNYWDIwX0NPTlNU RVhQUgogICAgIF9Gb3J3YXJkSXRlcmF0b3IKICAgICBfX3VuaXF1ZShfRm9yd2FyZEl0ZXJh dG9yIF9fZmlyc3QsIF9Gb3J3YXJkSXRlcmF0b3IgX19sYXN0LAotCSAgICAgX0JpbmFyeVBy ZWRpY2F0ZSBfX2JpbmFyeV9wcmVkKQorCSAgICAgX0dMSUJDWFhfRldEUkVGKF9CaW5hcnlQ cmVkaWNhdGUpIF9fYmluYXJ5X3ByZWQpCiAgICAgewogICAgICAgLy8gU2tpcCB0aGUgYmVn aW5uaW5nLCBpZiBhbHJlYWR5IHVuaXF1ZS4KICAgICAgIF9fZmlyc3QgPSBzdGQ6Ol9fYWRq YWNlbnRfZmluZChfX2ZpcnN0LCBfX2xhc3QsIF9fYmluYXJ5X3ByZWQpOwpAQCAtODY2LDcg Kzg4MCw3IEBAIF9HTElCQ1hYX0JFR0lOX05BTUVTUEFDRV9WRVJTSU9OCiAgICAgICBfRm9y d2FyZEl0ZXJhdG9yIF9fZGVzdCA9IF9fZmlyc3Q7CiAgICAgICArK19fZmlyc3Q7CiAgICAg ICB3aGlsZSAoKytfX2ZpcnN0ICE9IF9fbGFzdCkKLQlpZiAoIV9fYmluYXJ5X3ByZWQoX19k ZXN0LCBfX2ZpcnN0KSkKKwlpZiAoIV9fYmluYXJ5X3ByZWQoKl9fZGVzdCwgKl9fZmlyc3Qp KQogCSAgKisrX19kZXN0ID0gX0dMSUJDWFhfTU9WRSgqX19maXJzdCk7CiAgICAgICByZXR1 cm4gKytfX2Rlc3Q7CiAgICAgfQpAQCAtODk3LDggKzkxMSw5IEBAIF9HTElCQ1hYX0JFR0lO X05BTUVTUEFDRV9WRVJTSU9OCiAJCSAgICAgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9G b3J3YXJkSXRlcmF0b3I+Ojp2YWx1ZV90eXBlPikKICAgICAgIF9fZ2xpYmN4eF9yZXF1aXJl c192YWxpZF9yYW5nZShfX2ZpcnN0LCBfX2xhc3QpOwogCi0gICAgICByZXR1cm4gc3RkOjpf X3VuaXF1ZShfX2ZpcnN0LCBfX2xhc3QsCi0JCQkgICBfX2dudV9jeHg6Ol9fb3BzOjpfX2l0 ZXJfZXF1YWxfdG9faXRlcigpKTsKKyAgICAgIF9fZGVjbHR5cGUoX19nbnVfY3h4OjpfX29w czo6X19lcXVhbF90byhfX2ZpcnN0KSkgX19jb21wID0KKwlfX2dudV9jeHg6Ol9fb3BzOjpf X2VxdWFsX3RvKF9fZmlyc3QpOworICAgICAgcmV0dXJuIHN0ZDo6X191bmlxdWUoX19maXJz dCwgX19sYXN0LCBfX2NvbXApOwogICAgIH0KIAogICAvKioKQEAgLTkzMCw4ICs5NDUsNyBA QCBfR0xJQkNYWF9CRUdJTl9OQU1FU1BBQ0VfVkVSU0lPTgogCQl0eXBlbmFtZSBpdGVyYXRv cl90cmFpdHM8X0ZvcndhcmRJdGVyYXRvcj46OnZhbHVlX3R5cGU+KQogICAgICAgX19nbGli Y3h4X3JlcXVpcmVzX3ZhbGlkX3JhbmdlKF9fZmlyc3QsIF9fbGFzdCk7CiAKLSAgICAgIHJl dHVybiBzdGQ6Ol9fdW5pcXVlKF9fZmlyc3QsIF9fbGFzdCwKLQkJCSAgIF9fZ251X2N4eDo6 X19vcHM6Ol9faXRlcl9jb21wX2l0ZXIoX19iaW5hcnlfcHJlZCkpOworICAgICAgcmV0dXJu IHN0ZDo6X191bmlxdWUoX19maXJzdCwgX19sYXN0LCBfR0xJQkNYWF9NT1ZFKF9fYmluYXJ5 X3ByZWQpKTsKICAgICB9CiAKICAgLyoqCkBAIC05NDUsNyArOTU5LDggQEAgX0dMSUJDWFhf QkVHSU5fTkFNRVNQQUNFX1ZFUlNJT04KICAgICBfR0xJQkNYWDIwX0NPTlNURVhQUgogICAg IF9PdXRwdXRJdGVyYXRvcgogICAgIF9fdW5pcXVlX2NvcHkoX0ZvcndhcmRJdGVyYXRvciBf X2ZpcnN0LCBfRm9yd2FyZEl0ZXJhdG9yIF9fbGFzdCwKLQkJICBfT3V0cHV0SXRlcmF0b3Ig X19yZXN1bHQsIF9CaW5hcnlQcmVkaWNhdGUgX19iaW5hcnlfcHJlZCwKKwkJICBfT3V0cHV0 SXRlcmF0b3IgX19yZXN1bHQsCisJCSAgX0dMSUJDWFhfRldEUkVGKF9CaW5hcnlQcmVkaWNh dGUpIF9fYmluYXJ5X3ByZWQsCiAJCSAgZm9yd2FyZF9pdGVyYXRvcl90YWcsIG91dHB1dF9p dGVyYXRvcl90YWcpCiAgICAgewogICAgICAgLy8gY29uY2VwdCByZXF1aXJlbWVudHMgLS0g aXRlcmF0b3JzIGFscmVhZHkgY2hlY2tlZApAQCAtOTU2LDcgKzk3MSw3IEBAIF9HTElCQ1hY X0JFR0lOX05BTUVTUEFDRV9WRVJTSU9OCiAgICAgICBfRm9yd2FyZEl0ZXJhdG9yIF9fbmV4 dCA9IF9fZmlyc3Q7CiAgICAgICAqX19yZXN1bHQgPSAqX19maXJzdDsKICAgICAgIHdoaWxl ICgrK19fbmV4dCAhPSBfX2xhc3QpCi0JaWYgKCFfX2JpbmFyeV9wcmVkKF9fZmlyc3QsIF9f bmV4dCkpCisJaWYgKCFfX2JpbmFyeV9wcmVkKCpfX2ZpcnN0LCAqX19uZXh0KSkKIAkgIHsK IAkgICAgX19maXJzdCA9IF9fbmV4dDsKIAkgICAgKisrX19yZXN1bHQgPSAqX19maXJzdDsK QEAgLTk3NSw3ICs5OTAsOCBAQCBfR0xJQkNYWF9CRUdJTl9OQU1FU1BBQ0VfVkVSU0lPTgog ICAgIF9HTElCQ1hYMjBfQ09OU1RFWFBSCiAgICAgX091dHB1dEl0ZXJhdG9yCiAgICAgX191 bmlxdWVfY29weShfSW5wdXRJdGVyYXRvciBfX2ZpcnN0LCBfSW5wdXRJdGVyYXRvciBfX2xh c3QsCi0JCSAgX091dHB1dEl0ZXJhdG9yIF9fcmVzdWx0LCBfQmluYXJ5UHJlZGljYXRlIF9f YmluYXJ5X3ByZWQsCisJCSAgX091dHB1dEl0ZXJhdG9yIF9fcmVzdWx0LAorCQkgIF9HTElC Q1hYX0ZXRFJFRihfQmluYXJ5UHJlZGljYXRlKSBfX2JpbmFyeV9wcmVkLAogCQkgIGlucHV0 X2l0ZXJhdG9yX3RhZywgb3V0cHV0X2l0ZXJhdG9yX3RhZykKICAgICB7CiAgICAgICAvLyBj b25jZXB0IHJlcXVpcmVtZW50cyAtLSBpdGVyYXRvcnMgYWxyZWFkeSBjaGVja2VkCkBAIC05 ODQsMTIgKzEwMDAsMTQgQEAgX0dMSUJDWFhfQkVHSU5fTkFNRVNQQUNFX1ZFUlNJT04KIAkg IHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfSW5wdXRJdGVyYXRvcj46OnZhbHVlX3R5cGU+ KQogCiAgICAgICB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X0lucHV0SXRlcmF0b3I+Ojp2 YWx1ZV90eXBlIF9fdmFsdWUgPSAqX19maXJzdDsKLSAgICAgIF9fZGVjbHR5cGUoX19nbnVf Y3h4OjpfX29wczo6X19pdGVyX2NvbXBfdmFsKF9fYmluYXJ5X3ByZWQpKQotCV9fcmVib3Vu ZF9wcmVkCi0JPSBfX2dudV9jeHg6Ol9fb3BzOjpfX2l0ZXJfY29tcF92YWwoX19iaW5hcnlf cHJlZCk7CiAgICAgICAqX19yZXN1bHQgPSBfX3ZhbHVlOworICAgICAgX19kZWNsdHlwZShf X2dudV9jeHg6Ol9fb3BzOjpfX2VxdWFsX3RvX3ZhbAorCQkgKF9HTElCQ1hYX0ZPUldBUkQo X0JpbmFyeVByZWRpY2F0ZSwgX19iaW5hcnlfcHJlZCksCisJCSAgX19maXJzdCwgX192YWx1 ZSkpIF9fYm5yeV9wcmVkID0KKwlfX2dudV9jeHg6Ol9fb3BzOjpfX2VxdWFsX3RvX3ZhbAor CShfR0xJQkNYWF9GT1JXQVJEKF9CaW5hcnlQcmVkaWNhdGUsIF9fYmluYXJ5X3ByZWQpLCBf X2ZpcnN0LCBfX3ZhbHVlKTsKICAgICAgIHdoaWxlICgrK19fZmlyc3QgIT0gX19sYXN0KQot CWlmICghX19yZWJvdW5kX3ByZWQoX19maXJzdCwgX192YWx1ZSkpCisJaWYgKCFfX2Jucnlf cHJlZCgqX19maXJzdCwgX192YWx1ZSkpCiAJICB7CiAJICAgIF9fdmFsdWUgPSAqX19maXJz dDsKIAkgICAgKisrX19yZXN1bHQgPSBfX3ZhbHVlOwpAQCAtMTAwOCw3ICsxMDI2LDggQEAg X0dMSUJDWFhfQkVHSU5fTkFNRVNQQUNFX1ZFUlNJT04KICAgICBfR0xJQkNYWDIwX0NPTlNU RVhQUgogICAgIF9Gb3J3YXJkSXRlcmF0b3IKICAgICBfX3VuaXF1ZV9jb3B5KF9JbnB1dEl0 ZXJhdG9yIF9fZmlyc3QsIF9JbnB1dEl0ZXJhdG9yIF9fbGFzdCwKLQkJICBfRm9yd2FyZEl0 ZXJhdG9yIF9fcmVzdWx0LCBfQmluYXJ5UHJlZGljYXRlIF9fYmluYXJ5X3ByZWQsCisJCSAg X0ZvcndhcmRJdGVyYXRvciBfX3Jlc3VsdCwKKwkJICBfR0xJQkNYWF9GV0RSRUYoX0JpbmFy eVByZWRpY2F0ZSkgX19iaW5hcnlfcHJlZCwKIAkJICBpbnB1dF9pdGVyYXRvcl90YWcsIGZv cndhcmRfaXRlcmF0b3JfdGFnKQogICAgIHsKICAgICAgIC8vIGNvbmNlcHQgcmVxdWlyZW1l bnRzIC0tIGl0ZXJhdG9ycyBhbHJlYWR5IGNoZWNrZWQKQEAgLTEwMTcsNyArMTAzNiw3IEBA IF9HTElCQ1hYX0JFR0lOX05BTUVTUEFDRV9WRVJTSU9OCiAJICB0eXBlbmFtZSBpdGVyYXRv cl90cmFpdHM8X0lucHV0SXRlcmF0b3I+Ojp2YWx1ZV90eXBlPikKICAgICAgICpfX3Jlc3Vs dCA9ICpfX2ZpcnN0OwogICAgICAgd2hpbGUgKCsrX19maXJzdCAhPSBfX2xhc3QpCi0JaWYg KCFfX2JpbmFyeV9wcmVkKF9fcmVzdWx0LCBfX2ZpcnN0KSkKKwlpZiAoIV9fYmluYXJ5X3By ZWQoKl9fcmVzdWx0LCAqX19maXJzdCkpCiAJICAqKytfX3Jlc3VsdCA9ICpfX2ZpcnN0Owog ICAgICAgcmV0dXJuICsrX19yZXN1bHQ7CiAgICAgfQpAQCAtMTQwMiw3ICsxNDIxLDcgQEAg X0dMSUJDWFhfRU5EX0lOTElORV9BQklfTkFNRVNQQUNFKF9WMikKICAgICBfR0xJQkNYWDIw X0NPTlNURVhQUgogICAgIF9Gb3J3YXJkSXRlcmF0b3IKICAgICBfX3BhcnRpdGlvbihfRm9y d2FyZEl0ZXJhdG9yIF9fZmlyc3QsIF9Gb3J3YXJkSXRlcmF0b3IgX19sYXN0LAotCQlfUHJl ZGljYXRlIF9fcHJlZCwgZm9yd2FyZF9pdGVyYXRvcl90YWcpCisJCV9HTElCQ1hYX0ZXRFJF RihfUHJlZGljYXRlKSBfX3ByZWQsIGZvcndhcmRfaXRlcmF0b3JfdGFnKQogICAgIHsKICAg ICAgIGlmIChfX2ZpcnN0ID09IF9fbGFzdCkKIAlyZXR1cm4gX19maXJzdDsKQEAgLTE0Mjgs NyArMTQ0Nyw3IEBAIF9HTElCQ1hYX0VORF9JTkxJTkVfQUJJX05BTUVTUEFDRShfVjIpCiAg ICAgX0dMSUJDWFgyMF9DT05TVEVYUFIKICAgICBfQmlkaXJlY3Rpb25hbEl0ZXJhdG9yCiAg ICAgX19wYXJ0aXRpb24oX0JpZGlyZWN0aW9uYWxJdGVyYXRvciBfX2ZpcnN0LCBfQmlkaXJl Y3Rpb25hbEl0ZXJhdG9yIF9fbGFzdCwKLQkJX1ByZWRpY2F0ZSBfX3ByZWQsIGJpZGlyZWN0 aW9uYWxfaXRlcmF0b3JfdGFnKQorCQlfR0xJQkNYWF9GV0RSRUYoX1ByZWRpY2F0ZSkgX19w cmVkLCBiaWRpcmVjdGlvbmFsX2l0ZXJhdG9yX3RhZykKICAgICB7CiAgICAgICB3aGlsZSAo dHJ1ZSkKIAl7CkBAIC0xNDY2LDkgKzE0ODUsOSBAQCBfR0xJQkNYWF9FTkRfSU5MSU5FX0FC SV9OQU1FU1BBQ0UoX1YyKQogICAgIF9Gb3J3YXJkSXRlcmF0b3IKICAgICBfX3N0YWJsZV9w YXJ0aXRpb25fYWRhcHRpdmUoX0ZvcndhcmRJdGVyYXRvciBfX2ZpcnN0LAogCQkJCV9Gb3J3 YXJkSXRlcmF0b3IgX19sYXN0LAotCQkJCV9QcmVkaWNhdGUgX19wcmVkLCBfRGlzdGFuY2Ug X19sZW4sCi0JCQkJX1BvaW50ZXIgX19idWZmZXIsCi0JCQkJX0Rpc3RhbmNlIF9fYnVmZmVy X3NpemUpCisJCQkJX0dMSUJDWFhfRldEUkVGKF9QcmVkaWNhdGUpIF9fcHJlZCwKKwkJCQlf RGlzdGFuY2UgX19sZW4sCisJCQkJX1BvaW50ZXIgX19idWZmZXIsIF9EaXN0YW5jZSBfX2J1 ZmZlcl9zaXplKQogICAgIHsKICAgICAgIGlmIChfX2xlbiA9PSAxKQogCXJldHVybiBfX2Zp cnN0OwpAQCAtMTQ4NSw3ICsxNTA0LDcgQEAgX0dMSUJDWFhfRU5EX0lOTElORV9BQklfTkFN RVNQQUNFKF9WMikKIAkgICsrX19yZXN1bHQyOwogCSAgKytfX2ZpcnN0OwogCSAgZm9yICg7 IF9fZmlyc3QgIT0gX19sYXN0OyArK19fZmlyc3QpCi0JICAgIGlmIChfX3ByZWQoX19maXJz dCkpCisJICAgIGlmIChfX3ByZWQoKl9fZmlyc3QpKQogCSAgICAgIHsKIAkJKl9fcmVzdWx0 MSA9IF9HTElCQ1hYX01PVkUoKl9fZmlyc3QpOwogCQkrK19fcmVzdWx0MTsKQEAgLTE1MTQs MTAgKzE1MzMsOSBAQCBfR0xJQkNYWF9FTkRfSU5MSU5FX0FCSV9OQU1FU1BBQ0UoX1YyKQog CXN0ZDo6X19maW5kX2lmX25vdF9uKF9fbWlkZGxlLCBfX3JpZ2h0X2xlbiwgX19wcmVkKTsK IAogICAgICAgaWYgKF9fcmlnaHRfbGVuKQotCV9fcmlnaHRfc3BsaXQgPQotCSAgc3RkOjpf X3N0YWJsZV9wYXJ0aXRpb25fYWRhcHRpdmUoX19yaWdodF9zcGxpdCwgX19sYXN0LCBfX3By ZWQsCi0JCQkJCSAgIF9fcmlnaHRfbGVuLAotCQkJCQkgICBfX2J1ZmZlciwgX19idWZmZXJf c2l6ZSk7CisJX19yaWdodF9zcGxpdCA9IHN0ZDo6X19zdGFibGVfcGFydGl0aW9uX2FkYXB0 aXZlCisJICAoX19yaWdodF9zcGxpdCwgX19sYXN0LCBfR0xJQkNYWF9GT1JXQVJEKF9QcmVk aWNhdGUsIF9fcHJlZCksCisJICAgX19yaWdodF9sZW4sIF9fYnVmZmVyLCBfX2J1ZmZlcl9z aXplKTsKIAogICAgICAgcmV0dXJuIHN0ZDo6cm90YXRlKF9fbGVmdF9zcGxpdCwgX19taWRk bGUsIF9fcmlnaHRfc3BsaXQpOwogICAgIH0KQEAgLTE1MjUsNyArMTU0Myw3IEBAIF9HTElC Q1hYX0VORF9JTkxJTkVfQUJJX05BTUVTUEFDRShfVjIpCiAgIHRlbXBsYXRlPHR5cGVuYW1l IF9Gb3J3YXJkSXRlcmF0b3IsIHR5cGVuYW1lIF9QcmVkaWNhdGU+CiAgICAgX0ZvcndhcmRJ dGVyYXRvcgogICAgIF9fc3RhYmxlX3BhcnRpdGlvbihfRm9yd2FyZEl0ZXJhdG9yIF9fZmly c3QsIF9Gb3J3YXJkSXRlcmF0b3IgX19sYXN0LAotCQkgICAgICAgX1ByZWRpY2F0ZSBfX3By ZWQpCisJCSAgICAgICBfR0xJQkNYWF9GV0RSRUYoX1ByZWRpY2F0ZSkgX19wcmVkKQogICAg IHsKICAgICAgIF9fZmlyc3QgPSBzdGQ6Ol9fZmluZF9pZl9ub3QoX19maXJzdCwgX19sYXN0 LCBfX3ByZWQpOwogCkBAIC0xNTQwLDEwICsxNTU4LDEwIEBAIF9HTElCQ1hYX0VORF9JTkxJ TkVfQUJJX05BTUVTUEFDRShfVjIpCiAgICAgICBfVGVtcG9yYXJ5X2J1ZmZlcjxfRm9yd2Fy ZEl0ZXJhdG9yLCBfVmFsdWVUeXBlPgogCV9fYnVmKF9fZmlyc3QsIHN0ZDo6ZGlzdGFuY2Uo X19maXJzdCwgX19sYXN0KSk7CiAgICAgICByZXR1cm4KLQlzdGQ6Ol9fc3RhYmxlX3BhcnRp dGlvbl9hZGFwdGl2ZShfX2ZpcnN0LCBfX2xhc3QsIF9fcHJlZCwKKwlzdGQ6Ol9fc3RhYmxl X3BhcnRpdGlvbl9hZGFwdGl2ZQorCShfX2ZpcnN0LCBfX2xhc3QsIF9HTElCQ1hYX0ZPUldB UkQoX1ByZWRpY2F0ZSwgX19wcmVkKSwKIAkgX0Rpc3RhbmNlVHlwZShfX2J1Zi5yZXF1ZXN0 ZWRfc2l6ZSgpKSwKLQkJCQkJIF9fYnVmLmJlZ2luKCksCi0JCQkJCSBfRGlzdGFuY2VUeXBl KF9fYnVmLnNpemUoKSkpOworCSBfX2J1Zi5iZWdpbigpLCBfRGlzdGFuY2VUeXBlKF9fYnVm LnNpemUoKSkpOwogICAgIH0KIAogICAvKioKQEAgLTE1NzUsOCArMTU5Myw3IEBAIF9HTElC Q1hYX0VORF9JTkxJTkVfQUJJX05BTUVTUEFDRShfVjIpCiAJICAgIHR5cGVuYW1lIGl0ZXJh dG9yX3RyYWl0czxfRm9yd2FyZEl0ZXJhdG9yPjo6dmFsdWVfdHlwZT4pCiAgICAgICBfX2ds aWJjeHhfcmVxdWlyZXNfdmFsaWRfcmFuZ2UoX19maXJzdCwgX19sYXN0KTsKIAotICAgICAg cmV0dXJuIHN0ZDo6X19zdGFibGVfcGFydGl0aW9uKF9fZmlyc3QsIF9fbGFzdCwKLQkJCQkg ICAgIF9fZ251X2N4eDo6X19vcHM6Ol9fcHJlZF9pdGVyKF9fcHJlZCkpOworICAgICAgcmV0 dXJuIHN0ZDo6X19zdGFibGVfcGFydGl0aW9uKF9fZmlyc3QsIF9fbGFzdCwgX0dMSUJDWFhf TU9WRShfX3ByZWQpKTsKICAgICB9CiAjZW5kaWYgLy8gSE9TVEVECiAKQEAgLTE1ODgsMTEg KzE2MDUsMTIgQEAgX0dMSUJDWFhfRU5EX0lOTElORV9BQklfTkFNRVNQQUNFKF9WMikKICAg ICB2b2lkCiAgICAgX19oZWFwX3NlbGVjdChfUmFuZG9tQWNjZXNzSXRlcmF0b3IgX19maXJz dCwKIAkJICBfUmFuZG9tQWNjZXNzSXRlcmF0b3IgX19taWRkbGUsCi0JCSAgX1JhbmRvbUFj Y2Vzc0l0ZXJhdG9yIF9fbGFzdCwgX0NvbXBhcmUgX19jb21wKQorCQkgIF9SYW5kb21BY2Nl c3NJdGVyYXRvciBfX2xhc3QsCisJCSAgX0dMSUJDWFhfRldEUkVGKF9Db21wYXJlKSBfX2Nv bXApCiAgICAgewogICAgICAgc3RkOjpfX21ha2VfaGVhcChfX2ZpcnN0LCBfX21pZGRsZSwg X19jb21wKTsKICAgICAgIGZvciAoX1JhbmRvbUFjY2Vzc0l0ZXJhdG9yIF9faSA9IF9fbWlk ZGxlOyBfX2kgPCBfX2xhc3Q7ICsrX19pKQotCWlmIChfX2NvbXAoX19pLCBfX2ZpcnN0KSkK KwlpZiAoX19jb21wKCpfX2ksICpfX2ZpcnN0KSkKIAkgIHN0ZDo6X19wb3BfaGVhcChfX2Zp cnN0LCBfX21pZGRsZSwgX19pLCBfX2NvbXApOwogICAgIH0KIApAQCAtMTYwNSw3ICsxNjIz LDcgQEAgX0dMSUJDWFhfRU5EX0lOTElORV9BQklfTkFNRVNQQUNFKF9WMikKICAgICBfX3Bh cnRpYWxfc29ydF9jb3B5KF9JbnB1dEl0ZXJhdG9yIF9fZmlyc3QsIF9JbnB1dEl0ZXJhdG9y IF9fbGFzdCwKIAkJCV9SYW5kb21BY2Nlc3NJdGVyYXRvciBfX3Jlc3VsdF9maXJzdCwKIAkJ CV9SYW5kb21BY2Nlc3NJdGVyYXRvciBfX3Jlc3VsdF9sYXN0LAotCQkJX0NvbXBhcmUgX19j b21wKQorCQkJX0dMSUJDWFhfRldEUkVGKF9Db21wYXJlKSBfX2NvbXApCiAgICAgewogICAg ICAgdHlwZWRlZiB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X0lucHV0SXRlcmF0b3I+Ojp2 YWx1ZV90eXBlCiAJX0lucHV0VmFsdWVUeXBlOwpAQCAtMTYyNSwxNCArMTY0MywxNSBAQCBf R0xJQkNYWF9FTkRfSU5MSU5FX0FCSV9OQU1FU1BBQ0UoX1YyKQogICAgICAgc3RkOjpfX21h a2VfaGVhcChfX3Jlc3VsdF9maXJzdCwgX19yZXN1bHRfcmVhbF9sYXN0LCBfX2NvbXApOwog ICAgICAgd2hpbGUgKF9fZmlyc3QgIT0gX19sYXN0KQogCXsKLQkgIGlmIChfX2NvbXAoX19m aXJzdCwgX19yZXN1bHRfZmlyc3QpKQorCSAgaWYgKF9fY29tcCgqX19maXJzdCwgKl9fcmVz dWx0X2ZpcnN0KSkKIAkgICAgc3RkOjpfX2FkanVzdF9oZWFwKF9fcmVzdWx0X2ZpcnN0LCBf RGlzdGFuY2VUeXBlKDApLAogCQkJICAgICAgIF9EaXN0YW5jZVR5cGUoX19yZXN1bHRfcmVh bF9sYXN0CiAJCQkJCSAgICAgLSBfX3Jlc3VsdF9maXJzdCksCiAJCQkgICAgICAgX0lucHV0 VmFsdWVUeXBlKCpfX2ZpcnN0KSwgX19jb21wKTsKIAkgICsrX19maXJzdDsKIAl9Ci0gICAg ICBzdGQ6Ol9fc29ydF9oZWFwKF9fcmVzdWx0X2ZpcnN0LCBfX3Jlc3VsdF9yZWFsX2xhc3Qs IF9fY29tcCk7CisgICAgICBzdGQ6Ol9fc29ydF9oZWFwKF9fcmVzdWx0X2ZpcnN0LCBfX3Jl c3VsdF9yZWFsX2xhc3QsCisJCSAgICAgICBfR0xJQkNYWF9GT1JXQVJEKF9Db21wYXJlLCBf X2NvbXApKTsKICAgICAgIHJldHVybiBfX3Jlc3VsdF9yZWFsX2xhc3Q7CiAgICAgfQogCkBA IC0xNjgxLDkgKzE3MDAsMTAgQEAgX0dMSUJDWFhfRU5EX0lOTElORV9BQklfTkFNRVNQQUNF KF9WMikKICAgICAgIF9fZ2xpYmN4eF9yZXF1aXJlc19pcnJlZmxleGl2ZShfX2ZpcnN0LCBf X2xhc3QpOwogICAgICAgX19nbGliY3h4X3JlcXVpcmVzX3ZhbGlkX3JhbmdlKF9fcmVzdWx0 X2ZpcnN0LCBfX3Jlc3VsdF9sYXN0KTsKIAotICAgICAgcmV0dXJuIHN0ZDo6X19wYXJ0aWFs X3NvcnRfY29weShfX2ZpcnN0LCBfX2xhc3QsCi0JCQkJICAgICAgX19yZXN1bHRfZmlyc3Qs IF9fcmVzdWx0X2xhc3QsCi0JCQkJICAgICAgX19nbnVfY3h4OjpfX29wczo6X19pdGVyX2xl c3NfaXRlcigpKTsKKyAgICAgIF9fZGVjbHR5cGUoX19nbnVfY3h4OjpfX29wczo6X19sZXNz KF9fZmlyc3QsIF9fcmVzdWx0X2ZpcnN0KSkgX19jb21wID0KKwlfX2dudV9jeHg6Ol9fb3Bz OjpfX2xlc3MoX19maXJzdCwgX19yZXN1bHRfZmlyc3QpOworICAgICAgcmV0dXJuIHN0ZDo6 X19wYXJ0aWFsX3NvcnRfY29weQorCShfX2ZpcnN0LCBfX2xhc3QsIF9fcmVzdWx0X2ZpcnN0 LCBfX3Jlc3VsdF9sYXN0LCBfX2NvbXApOwogICAgIH0KIAogICAvKioKQEAgLTE3MzgsMjMg KzE3NTgsMjEgQEAgX0dMSUJDWFhfRU5EX0lOTElORV9BQklfTkFNRVNQQUNFKF9WMikKIAog ICAgICAgcmV0dXJuIHN0ZDo6X19wYXJ0aWFsX3NvcnRfY29weShfX2ZpcnN0LCBfX2xhc3Qs CiAJCQkJICAgICAgX19yZXN1bHRfZmlyc3QsIF9fcmVzdWx0X2xhc3QsCi0JCQkJX19nbnVf Y3h4OjpfX29wczo6X19pdGVyX2NvbXBfaXRlcihfX2NvbXApKTsKKwkJCQkgICAgICBfR0xJ QkNYWF9NT1ZFKF9fY29tcCkpOwogICAgIH0KIAogICAvLy8gQGNvbmQgdW5kb2N1bWVudGVk CiAKICAgLy8vIFRoaXMgaXMgYSBoZWxwZXIgZnVuY3Rpb24gZm9yIHRoZSBzb3J0IHJvdXRp bmUuCi0gIHRlbXBsYXRlPHR5cGVuYW1lIF9SYW5kb21BY2Nlc3NJdGVyYXRvciwgdHlwZW5h bWUgX0NvbXBhcmU+CisgIHRlbXBsYXRlPHR5cGVuYW1lIF9SYW5kb21BY2Nlc3NJdGVyYXRv ciwgdHlwZW5hbWUgX1ZhbCwgdHlwZW5hbWUgX0NvbXBhcmU+CiAgICAgX0dMSUJDWFgyMF9D T05TVEVYUFIKICAgICB2b2lkCi0gICAgX191bmd1YXJkZWRfbGluZWFyX2luc2VydChfUmFu ZG9tQWNjZXNzSXRlcmF0b3IgX19sYXN0LAotCQkJICAgICAgX0NvbXBhcmUgX19jb21wKQor ICAgIF9fdW5ndWFyZGVkX2xpbmVhcl9pbnNlcnQoX1JhbmRvbUFjY2Vzc0l0ZXJhdG9yIF9f bGFzdCwgX1ZhbCBfX3ZhbCwKKwkJCSAgICAgIF9HTElCQ1hYX0ZXRFJFRihfQ29tcGFyZSkg X19jb21wKQogICAgIHsKLSAgICAgIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfUmFuZG9t QWNjZXNzSXRlcmF0b3I+Ojp2YWx1ZV90eXBlCi0JX192YWwgPSBfR0xJQkNYWF9NT1ZFKCpf X2xhc3QpOwogICAgICAgX1JhbmRvbUFjY2Vzc0l0ZXJhdG9yIF9fbmV4dCA9IF9fbGFzdDsK ICAgICAgIC0tX19uZXh0OwotICAgICAgd2hpbGUgKF9fY29tcChfX3ZhbCwgX19uZXh0KSkK KyAgICAgIHdoaWxlIChfX2NvbXAoX192YWwsICpfX25leHQpKQogCXsKIAkgICpfX2xhc3Qg PSBfR0xJQkNYWF9NT1ZFKCpfX25leHQpOwogCSAgX19sYXN0ID0gX19uZXh0OwpAQCAtMTc2 OCwxMyArMTc4NiwxNSBAQCBfR0xJQkNYWF9FTkRfSU5MSU5FX0FCSV9OQU1FU1BBQ0UoX1Yy KQogICAgIF9HTElCQ1hYMjBfQ09OU1RFWFBSCiAgICAgdm9pZAogICAgIF9faW5zZXJ0aW9u X3NvcnQoX1JhbmRvbUFjY2Vzc0l0ZXJhdG9yIF9fZmlyc3QsCi0JCSAgICAgX1JhbmRvbUFj Y2Vzc0l0ZXJhdG9yIF9fbGFzdCwgX0NvbXBhcmUgX19jb21wKQorCQkgICAgIF9SYW5kb21B Y2Nlc3NJdGVyYXRvciBfX2xhc3QsCisJCSAgICAgX0dMSUJDWFhfRldEUkVGKF9Db21wYXJl KSBfX2NvbXApCiAgICAgewotICAgICAgaWYgKF9fZmlyc3QgPT0gX19sYXN0KSByZXR1cm47 CisgICAgICBpZiAoX19maXJzdCA9PSBfX2xhc3QpCisJcmV0dXJuOwogCiAgICAgICBmb3Ig KF9SYW5kb21BY2Nlc3NJdGVyYXRvciBfX2kgPSBfX2ZpcnN0ICsgMTsgX19pICE9IF9fbGFz dDsgKytfX2kpCiAJewotCSAgaWYgKF9fY29tcChfX2ksIF9fZmlyc3QpKQorCSAgaWYgKF9f Y29tcCgqX19pLCAqX19maXJzdCkpCiAJICAgIHsKIAkgICAgICB0eXBlbmFtZSBpdGVyYXRv cl90cmFpdHM8X1JhbmRvbUFjY2Vzc0l0ZXJhdG9yPjo6dmFsdWVfdHlwZQogCQlfX3ZhbCA9 IF9HTElCQ1hYX01PVkUoKl9faSk7CkBAIC0xNzgyLDggKzE4MDIsMTEgQEAgX0dMSUJDWFhf RU5EX0lOTElORV9BQklfTkFNRVNQQUNFKF9WMikKIAkgICAgICAqX19maXJzdCA9IF9HTElC Q1hYX01PVkUoX192YWwpOwogCSAgICB9CiAJICBlbHNlCi0JICAgIHN0ZDo6X191bmd1YXJk ZWRfbGluZWFyX2luc2VydChfX2ksCi0JCQkJX19nbnVfY3h4OjpfX29wczo6X192YWxfY29t cF9pdGVyKF9fY29tcCkpOworCSAgICB7CisJICAgICAgdHlwZW5hbWUgaXRlcmF0b3JfdHJh aXRzPF9SYW5kb21BY2Nlc3NJdGVyYXRvcj46OnZhbHVlX3R5cGUKKwkJX192YWwgPSBfR0xJ QkNYWF9NT1ZFKCpfX2kpOworCSAgICAgIHN0ZDo6X191bmd1YXJkZWRfbGluZWFyX2luc2Vy dChfX2ksIF9HTElCQ1hYX01PVkUoX192YWwpLCBfX2NvbXApOworCSAgICB9CiAJfQogICAg IH0KIApAQCAtMTc5MiwxMSArMTgxNSwxOCBAQCBfR0xJQkNYWF9FTkRfSU5MSU5FX0FCSV9O QU1FU1BBQ0UoX1YyKQogICAgIF9HTElCQ1hYMjBfQ09OU1RFWFBSCiAgICAgaW5saW5lIHZv aWQKICAgICBfX3VuZ3VhcmRlZF9pbnNlcnRpb25fc29ydChfUmFuZG9tQWNjZXNzSXRlcmF0 b3IgX19maXJzdCwKLQkJCSAgICAgICBfUmFuZG9tQWNjZXNzSXRlcmF0b3IgX19sYXN0LCBf Q29tcGFyZSBfX2NvbXApCisJCQkgICAgICAgX1JhbmRvbUFjY2Vzc0l0ZXJhdG9yIF9fbGFz dCwKKwkJCSAgICAgICBfR0xJQkNYWF9GV0RSRUYoX0NvbXBhcmUpIF9fY29tcCkKICAgICB7 CisgICAgICBpZiAoX19maXJzdCA9PSBfX2xhc3QpCisJcmV0dXJuOworCiAgICAgICBmb3Ig KF9SYW5kb21BY2Nlc3NJdGVyYXRvciBfX2kgPSBfX2ZpcnN0OyBfX2kgIT0gX19sYXN0OyAr K19faSkKLQlzdGQ6Ol9fdW5ndWFyZGVkX2xpbmVhcl9pbnNlcnQoX19pLAotCQkJCV9fZ251 X2N4eDo6X19vcHM6Ol9fdmFsX2NvbXBfaXRlcihfX2NvbXApKTsKKwl7CisJICB0eXBlbmFt ZSBzdGQ6Oml0ZXJhdG9yX3RyYWl0czxfUmFuZG9tQWNjZXNzSXRlcmF0b3I+Ojp2YWx1ZV90 eXBlCisJICAgIF9fdmFsID0gX0dMSUJDWFhfTU9WRSgqX19pKTsKKwkgIHN0ZDo6X191bmd1 YXJkZWRfbGluZWFyX2luc2VydChfX2ksIF9HTElCQ1hYX01PVkUoX192YWwpLCBfX2NvbXAp OworCX0KICAgICB9CiAKICAgLyoqCkBAIC0xODEwLDE2ICsxODQwLDE4IEBAIF9HTElCQ1hY X0VORF9JTkxJTkVfQUJJX05BTUVTUEFDRShfVjIpCiAgICAgX0dMSUJDWFgyMF9DT05TVEVY UFIKICAgICB2b2lkCiAgICAgX19maW5hbF9pbnNlcnRpb25fc29ydChfUmFuZG9tQWNjZXNz SXRlcmF0b3IgX19maXJzdCwKLQkJCSAgIF9SYW5kb21BY2Nlc3NJdGVyYXRvciBfX2xhc3Qs IF9Db21wYXJlIF9fY29tcCkKKwkJCSAgIF9SYW5kb21BY2Nlc3NJdGVyYXRvciBfX2xhc3Qs CisJCQkgICBfR0xJQkNYWF9GV0RSRUYoX0NvbXBhcmUpIF9fY29tcCkKICAgICB7CiAgICAg ICBpZiAoX19sYXN0IC0gX19maXJzdCA+IGludChfU190aHJlc2hvbGQpKQogCXsKIAkgIHN0 ZDo6X19pbnNlcnRpb25fc29ydChfX2ZpcnN0LCBfX2ZpcnN0ICsgaW50KF9TX3RocmVzaG9s ZCksIF9fY29tcCk7CiAJICBzdGQ6Ol9fdW5ndWFyZGVkX2luc2VydGlvbl9zb3J0KF9fZmly c3QgKyBpbnQoX1NfdGhyZXNob2xkKSwgX19sYXN0LAotCQkJCQkgIF9fY29tcCk7CisJCQkJ CSAgX0dMSUJDWFhfRk9SV0FSRChfQ29tcGFyZSwgX19jb21wKSk7CiAJfQogICAgICAgZWxz ZQotCXN0ZDo6X19pbnNlcnRpb25fc29ydChfX2ZpcnN0LCBfX2xhc3QsIF9fY29tcCk7CisJ c3RkOjpfX2luc2VydGlvbl9zb3J0KF9fZmlyc3QsIF9fbGFzdCwKKwkJCSAgICAgIF9HTElC Q1hYX0ZPUldBUkQoX0NvbXBhcmUsIF9fY29tcCkpOwogICAgIH0KIAogICAvLy8gVGhpcyBp cyBhIGhlbHBlciBmdW5jdGlvbi4uLgpAQCAtMTgyOCwxNCArMTg2MCwxNSBAQCBfR0xJQkNY WF9FTkRfSU5MSU5FX0FCSV9OQU1FU1BBQ0UoX1YyKQogICAgIF9SYW5kb21BY2Nlc3NJdGVy YXRvcgogICAgIF9fdW5ndWFyZGVkX3BhcnRpdGlvbihfUmFuZG9tQWNjZXNzSXRlcmF0b3Ig X19maXJzdCwKIAkJCSAgX1JhbmRvbUFjY2Vzc0l0ZXJhdG9yIF9fbGFzdCwKLQkJCSAgX1Jh bmRvbUFjY2Vzc0l0ZXJhdG9yIF9fcGl2b3QsIF9Db21wYXJlIF9fY29tcCkKKwkJCSAgX1Jh bmRvbUFjY2Vzc0l0ZXJhdG9yIF9fcGl2b3QsCisJCQkgIF9HTElCQ1hYX0ZXRFJFRihfQ29t cGFyZSkgX19jb21wKQogICAgIHsKICAgICAgIHdoaWxlICh0cnVlKQogCXsKLQkgIHdoaWxl IChfX2NvbXAoX19maXJzdCwgX19waXZvdCkpCisJICB3aGlsZSAoX19jb21wKCpfX2ZpcnN0 LCAqX19waXZvdCkpCiAJICAgICsrX19maXJzdDsKIAkgIC0tX19sYXN0OwotCSAgd2hpbGUg KF9fY29tcChfX3Bpdm90LCBfX2xhc3QpKQorCSAgd2hpbGUgKF9fY29tcCgqX19waXZvdCwg Kl9fbGFzdCkpCiAJICAgIC0tX19sYXN0OwogCSAgaWYgKCEoX19maXJzdCA8IF9fbGFzdCkp CiAJICAgIHJldHVybiBfX2ZpcnN0OwpAQCAtMTg0OSwxMiArMTg4MiwxNCBAQCBfR0xJQkNY WF9FTkRfSU5MSU5FX0FCSV9OQU1FU1BBQ0UoX1YyKQogICAgIF9HTElCQ1hYMjBfQ09OU1RF WFBSCiAgICAgaW5saW5lIF9SYW5kb21BY2Nlc3NJdGVyYXRvcgogICAgIF9fdW5ndWFyZGVk X3BhcnRpdGlvbl9waXZvdChfUmFuZG9tQWNjZXNzSXRlcmF0b3IgX19maXJzdCwKLQkJCQlf UmFuZG9tQWNjZXNzSXRlcmF0b3IgX19sYXN0LCBfQ29tcGFyZSBfX2NvbXApCisJCQkJX1Jh bmRvbUFjY2Vzc0l0ZXJhdG9yIF9fbGFzdCwKKwkJCQlfR0xJQkNYWF9GV0RSRUYoX0NvbXBh cmUpIF9fY29tcCkKICAgICB7CiAgICAgICBfUmFuZG9tQWNjZXNzSXRlcmF0b3IgX19taWQg PSBfX2ZpcnN0ICsgKF9fbGFzdCAtIF9fZmlyc3QpIC8gMjsKLSAgICAgIHN0ZDo6X19tb3Zl X21lZGlhbl90b19maXJzdChfX2ZpcnN0LCBfX2ZpcnN0ICsgMSwgX19taWQsIF9fbGFzdCAt IDEsCi0JCQkJICBfX2NvbXApOwotICAgICAgcmV0dXJuIHN0ZDo6X191bmd1YXJkZWRfcGFy dGl0aW9uKF9fZmlyc3QgKyAxLCBfX2xhc3QsIF9fZmlyc3QsIF9fY29tcCk7CisgICAgICBz dGQ6Ol9fbW92ZV9tZWRpYW5fdG9fZmlyc3QKKwkoX19maXJzdCwgX19maXJzdCArIDEsIF9f bWlkLCBfX2xhc3QgLSAxLCBfX2NvbXApOworICAgICAgcmV0dXJuIHN0ZDo6X191bmd1YXJk ZWRfcGFydGl0aW9uCisJKF9fZmlyc3QgKyAxLCBfX2xhc3QsIF9fZmlyc3QsIF9HTElCQ1hY X0ZPUldBUkQoX0NvbXBhcmUsIF9fY29tcCkpOwogICAgIH0KIAogICB0ZW1wbGF0ZTx0eXBl bmFtZSBfUmFuZG9tQWNjZXNzSXRlcmF0b3IsIHR5cGVuYW1lIF9Db21wYXJlPgpAQCAtMTg2 MywxMCArMTg5OCwxMCBAQCBfR0xJQkNYWF9FTkRfSU5MSU5FX0FCSV9OQU1FU1BBQ0UoX1Yy KQogICAgIF9fcGFydGlhbF9zb3J0KF9SYW5kb21BY2Nlc3NJdGVyYXRvciBfX2ZpcnN0LAog CQkgICBfUmFuZG9tQWNjZXNzSXRlcmF0b3IgX19taWRkbGUsCiAJCSAgIF9SYW5kb21BY2Nl c3NJdGVyYXRvciBfX2xhc3QsCi0JCSAgIF9Db21wYXJlIF9fY29tcCkKKwkJICAgX0dMSUJD WFhfRldEUkVGKF9Db21wYXJlKSBfX2NvbXApCiAgICAgewogICAgICAgc3RkOjpfX2hlYXBf c2VsZWN0KF9fZmlyc3QsIF9fbWlkZGxlLCBfX2xhc3QsIF9fY29tcCk7Ci0gICAgICBzdGQ6 Ol9fc29ydF9oZWFwKF9fZmlyc3QsIF9fbWlkZGxlLCBfX2NvbXApOworICAgICAgc3RkOjpf X3NvcnRfaGVhcChfX2ZpcnN0LCBfX21pZGRsZSwgX0dMSUJDWFhfRk9SV0FSRChfQ29tcGFy ZSwgX19jb21wKSk7CiAgICAgfQogCiAgIC8vLyBUaGlzIGlzIGEgaGVscGVyIGZ1bmN0aW9u IGZvciB0aGUgc29ydCByb3V0aW5lLgpAQCAtMTg3NSwxMyArMTkxMCwxNCBAQCBfR0xJQkNY WF9FTkRfSU5MSU5FX0FCSV9OQU1FU1BBQ0UoX1YyKQogICAgIHZvaWQKICAgICBfX2ludHJv c29ydF9sb29wKF9SYW5kb21BY2Nlc3NJdGVyYXRvciBfX2ZpcnN0LAogCQkgICAgIF9SYW5k b21BY2Nlc3NJdGVyYXRvciBfX2xhc3QsCi0JCSAgICAgX1NpemUgX19kZXB0aF9saW1pdCwg X0NvbXBhcmUgX19jb21wKQorCQkgICAgIF9TaXplIF9fZGVwdGhfbGltaXQsIF9HTElCQ1hY X0ZXRFJFRihfQ29tcGFyZSkgX19jb21wKQogICAgIHsKICAgICAgIHdoaWxlIChfX2xhc3Qg LSBfX2ZpcnN0ID4gaW50KF9TX3RocmVzaG9sZCkpCiAJewogCSAgaWYgKF9fZGVwdGhfbGlt aXQgPT0gMCkKIAkgICAgewotCSAgICAgIHN0ZDo6X19wYXJ0aWFsX3NvcnQoX19maXJzdCwg X19sYXN0LCBfX2xhc3QsIF9fY29tcCk7CisJICAgICAgc3RkOjpfX3BhcnRpYWxfc29ydChf X2ZpcnN0LCBfX2xhc3QsIF9fbGFzdCwKKwkJCQkgIF9HTElCQ1hYX0ZPUldBUkQoX0NvbXBh cmUsIF9fY29tcCkpOwogCSAgICAgIHJldHVybjsKIAkgICAgfQogCSAgLS1fX2RlcHRoX2xp bWl0OwpAQCAtMTg5OCwxNCArMTkzNCwxNCBAQCBfR0xJQkNYWF9FTkRfSU5MSU5FX0FCSV9O QU1FU1BBQ0UoX1YyKQogICAgIF9HTElCQ1hYMjBfQ09OU1RFWFBSCiAgICAgaW5saW5lIHZv aWQKICAgICBfX3NvcnQoX1JhbmRvbUFjY2Vzc0l0ZXJhdG9yIF9fZmlyc3QsIF9SYW5kb21B Y2Nlc3NJdGVyYXRvciBfX2xhc3QsCi0JICAgX0NvbXBhcmUgX19jb21wKQorCSAgIF9HTElC Q1hYX0ZXRFJFRihfQ29tcGFyZSkgX19jb21wKQogICAgIHsKICAgICAgIGlmIChfX2ZpcnN0 ICE9IF9fbGFzdCkKIAl7Ci0JICBzdGQ6Ol9faW50cm9zb3J0X2xvb3AoX19maXJzdCwgX19s YXN0LAotCQkJCXN0ZDo6X19sZyhfX2xhc3QgLSBfX2ZpcnN0KSAqIDIsCi0JCQkJX19jb21w KTsKLQkgIHN0ZDo6X19maW5hbF9pbnNlcnRpb25fc29ydChfX2ZpcnN0LCBfX2xhc3QsIF9f Y29tcCk7CisJICBzdGQ6Ol9faW50cm9zb3J0X2xvb3AKKwkgICAgKF9fZmlyc3QsIF9fbGFz dCwgc3RkOjpfX2xnKF9fbGFzdCAtIF9fZmlyc3QpICogMiwgX19jb21wKTsKKwkgIHN0ZDo6 X19maW5hbF9pbnNlcnRpb25fc29ydAorCSAgICAoX19maXJzdCwgX19sYXN0LCBfR0xJQkNY WF9GT1JXQVJEKF9Db21wYXJlLCBfX2NvbXApKTsKIAl9CiAgICAgfQogCkBAIC0xOTE0LDEz ICsxOTUwLDE0IEBAIF9HTElCQ1hYX0VORF9JTkxJTkVfQUJJX05BTUVTUEFDRShfVjIpCiAg ICAgdm9pZAogICAgIF9faW50cm9zZWxlY3QoX1JhbmRvbUFjY2Vzc0l0ZXJhdG9yIF9fZmly c3QsIF9SYW5kb21BY2Nlc3NJdGVyYXRvciBfX250aCwKIAkJICBfUmFuZG9tQWNjZXNzSXRl cmF0b3IgX19sYXN0LCBfU2l6ZSBfX2RlcHRoX2xpbWl0LAotCQkgIF9Db21wYXJlIF9fY29t cCkKKwkJICBfR0xJQkNYWF9GV0RSRUYoX0NvbXBhcmUpIF9fY29tcCkKICAgICB7CiAgICAg ICB3aGlsZSAoX19sYXN0IC0gX19maXJzdCA+IDMpCiAJewogCSAgaWYgKF9fZGVwdGhfbGlt aXQgPT0gMCkKIAkgICAgewotCSAgICAgIHN0ZDo6X19oZWFwX3NlbGVjdChfX2ZpcnN0LCBf X250aCArIDEsIF9fbGFzdCwgX19jb21wKTsKKwkgICAgICBzdGQ6Ol9faGVhcF9zZWxlY3Qo X19maXJzdCwgX19udGggKyAxLCBfX2xhc3QsCisJCQkJIF9HTElCQ1hYX0ZPUldBUkQoX0Nv bXBhcmUsIF9fY29tcCkpOwogCSAgICAgIC8vIFBsYWNlIHRoZSBudGggbGFyZ2VzdCBlbGVt ZW50IGluIGl0cyBmaW5hbCBwb3NpdGlvbi4KIAkgICAgICBzdGQ6Oml0ZXJfc3dhcChfX2Zp cnN0LCBfX250aCk7CiAJICAgICAgcmV0dXJuOwpAQCAtMTkzMyw3ICsxOTcwLDggQEAgX0dM SUJDWFhfRU5EX0lOTElORV9BQklfTkFNRVNQQUNFKF9WMikKIAkgIGVsc2UKIAkgICAgX19s YXN0ID0gX19jdXQ7CiAJfQotICAgICAgc3RkOjpfX2luc2VydGlvbl9zb3J0KF9fZmlyc3Qs IF9fbGFzdCwgX19jb21wKTsKKyAgICAgIHN0ZDo6X19pbnNlcnRpb25fc29ydChfX2ZpcnN0 LCBfX2xhc3QsCisJCQkgICAgX0dMSUJDWFhfRk9SV0FSRChfQ29tcGFyZSwgX19jb21wKSk7 CiAgICAgfQogCiAgIC8vLyBAZW5kY29uZApAQCAtMTk3MCwxNSArMjAwOCwxNCBAQCBfR0xJ QkNYWF9FTkRfSU5MSU5FX0FCSV9OQU1FU1BBQ0UoX1YyKQogICAgICAgX19nbGliY3h4X3Jl cXVpcmVzX3BhcnRpdGlvbmVkX2xvd2VyX3ByZWQoX19maXJzdCwgX19sYXN0LAogCQkJCQkJ X192YWwsIF9fY29tcCk7CiAKLSAgICAgIHJldHVybiBzdGQ6Ol9fbG93ZXJfYm91bmQoX19m aXJzdCwgX19sYXN0LCBfX3ZhbCwKLQkJCQlfX2dudV9jeHg6Ol9fb3BzOjpfX2l0ZXJfY29t cF92YWwoX19jb21wKSk7CisgICAgICByZXR1cm4gc3RkOjpfX2xvd2VyX2JvdW5kKF9fZmly c3QsIF9fbGFzdCwgX192YWwsIF9HTElCQ1hYX01PVkUoX19jb21wKSk7CiAgICAgfQogCiAg IHRlbXBsYXRlPHR5cGVuYW1lIF9Gb3J3YXJkSXRlcmF0b3IsIHR5cGVuYW1lIF9UcCwgdHlw ZW5hbWUgX0NvbXBhcmU+CiAgICAgX0dMSUJDWFgyMF9DT05TVEVYUFIKICAgICBfRm9yd2Fy ZEl0ZXJhdG9yCiAgICAgX191cHBlcl9ib3VuZChfRm9yd2FyZEl0ZXJhdG9yIF9fZmlyc3Qs IF9Gb3J3YXJkSXRlcmF0b3IgX19sYXN0LAotCQkgIGNvbnN0IF9UcCYgX192YWwsIF9Db21w YXJlIF9fY29tcCkKKwkJICBjb25zdCBfVHAmIF9fdmFsLCBfR0xJQkNYWF9GV0RSRUYoX0Nv bXBhcmUpIF9fY29tcCkKICAgICB7CiAgICAgICB0eXBlZGVmIHR5cGVuYW1lIGl0ZXJhdG9y X3RyYWl0czxfRm9yd2FyZEl0ZXJhdG9yPjo6ZGlmZmVyZW5jZV90eXBlCiAJX0Rpc3RhbmNl VHlwZTsKQEAgLTE5OTAsNyArMjAyNyw3IEBAIF9HTElCQ1hYX0VORF9JTkxJTkVfQUJJX05B TUVTUEFDRShfVjIpCiAJICBfRGlzdGFuY2VUeXBlIF9faGFsZiA9IF9fbGVuID4+IDE7CiAJ ICBfRm9yd2FyZEl0ZXJhdG9yIF9fbWlkZGxlID0gX19maXJzdDsKIAkgIHN0ZDo6YWR2YW5j ZShfX21pZGRsZSwgX19oYWxmKTsKLQkgIGlmIChfX2NvbXAoX192YWwsIF9fbWlkZGxlKSkK KwkgIGlmIChfX2NvbXAoX192YWwsICpfX21pZGRsZSkpCiAJICAgIF9fbGVuID0gX19oYWxm OwogCSAgZWxzZQogCSAgICB7CkBAIC0yMDI1LDggKzIwNjIsOSBAQCBfR0xJQkNYWF9FTkRf SU5MSU5FX0FCSV9OQU1FU1BBQ0UoX1YyKQogCV9UcCwgdHlwZW5hbWUgaXRlcmF0b3JfdHJh aXRzPF9Gb3J3YXJkSXRlcmF0b3I+Ojp2YWx1ZV90eXBlPikKICAgICAgIF9fZ2xpYmN4eF9y ZXF1aXJlc19wYXJ0aXRpb25lZF91cHBlcihfX2ZpcnN0LCBfX2xhc3QsIF9fdmFsKTsKIAot ICAgICAgcmV0dXJuIHN0ZDo6X191cHBlcl9ib3VuZChfX2ZpcnN0LCBfX2xhc3QsIF9fdmFs LAotCQkJCV9fZ251X2N4eDo6X19vcHM6Ol9fdmFsX2xlc3NfaXRlcigpKTsKKyAgICAgIF9f ZGVjbHR5cGUoX19nbnVfY3h4OjpfX29wczo6X19sZXNzX3ZhbChfX2ZpcnN0LCBfX3ZhbCkp IF9fY29tcCA9CisJX19nbnVfY3h4OjpfX29wczo6X19sZXNzX3ZhbChfX2ZpcnN0LCBfX3Zh bCk7CisgICAgICByZXR1cm4gc3RkOjpfX3VwcGVyX2JvdW5kKF9fZmlyc3QsIF9fbGFzdCwg X192YWwsIF9fY29tcCk7CiAgICAgfQogCiAgIC8qKgpAQCAtMjA1NywxNyArMjA5NSwxNCBA QCBfR0xJQkNYWF9FTkRfSU5MSU5FX0FCSV9OQU1FU1BBQ0UoX1YyKQogICAgICAgX19nbGli Y3h4X3JlcXVpcmVzX3BhcnRpdGlvbmVkX3VwcGVyX3ByZWQoX19maXJzdCwgX19sYXN0LAog CQkJCQkJX192YWwsIF9fY29tcCk7CiAKLSAgICAgIHJldHVybiBzdGQ6Ol9fdXBwZXJfYm91 bmQoX19maXJzdCwgX19sYXN0LCBfX3ZhbCwKLQkJCQlfX2dudV9jeHg6Ol9fb3BzOjpfX3Zh bF9jb21wX2l0ZXIoX19jb21wKSk7CisgICAgICByZXR1cm4gc3RkOjpfX3VwcGVyX2JvdW5k KF9fZmlyc3QsIF9fbGFzdCwgX192YWwsIF9HTElCQ1hYX01PVkUoX19jb21wKSk7CiAgICAg fQogCi0gIHRlbXBsYXRlPHR5cGVuYW1lIF9Gb3J3YXJkSXRlcmF0b3IsIHR5cGVuYW1lIF9U cCwKLQkgICB0eXBlbmFtZSBfQ29tcGFyZUl0VHAsIHR5cGVuYW1lIF9Db21wYXJlVHBJdD4K KyAgdGVtcGxhdGU8dHlwZW5hbWUgX0ZvcndhcmRJdGVyYXRvciwgdHlwZW5hbWUgX1RwLCB0 eXBlbmFtZSBfQ29tcD4KICAgICBfR0xJQkNYWDIwX0NPTlNURVhQUgogICAgIHBhaXI8X0Zv cndhcmRJdGVyYXRvciwgX0ZvcndhcmRJdGVyYXRvcj4KICAgICBfX2VxdWFsX3JhbmdlKF9G b3J3YXJkSXRlcmF0b3IgX19maXJzdCwgX0ZvcndhcmRJdGVyYXRvciBfX2xhc3QsCi0JCSAg Y29uc3QgX1RwJiBfX3ZhbCwKLQkJICBfQ29tcGFyZUl0VHAgX19jb21wX2l0X3ZhbCwgX0Nv bXBhcmVUcEl0IF9fY29tcF92YWxfaXQpCisJCSAgY29uc3QgX1RwJiBfX3ZhbCwgX0dMSUJD WFhfRldEUkVGKF9Db21wKSBfX2NvbXApCiAgICAgewogICAgICAgdHlwZWRlZiB0eXBlbmFt ZSBpdGVyYXRvcl90cmFpdHM8X0ZvcndhcmRJdGVyYXRvcj46OmRpZmZlcmVuY2VfdHlwZQog CV9EaXN0YW5jZVR5cGU7CkBAIC0yMDc5LDIxICsyMTE0LDIyIEBAIF9HTElCQ1hYX0VORF9J TkxJTkVfQUJJX05BTUVTUEFDRShfVjIpCiAJICBfRGlzdGFuY2VUeXBlIF9faGFsZiA9IF9f bGVuID4+IDE7CiAJICBfRm9yd2FyZEl0ZXJhdG9yIF9fbWlkZGxlID0gX19maXJzdDsKIAkg IHN0ZDo6YWR2YW5jZShfX21pZGRsZSwgX19oYWxmKTsKLQkgIGlmIChfX2NvbXBfaXRfdmFs KF9fbWlkZGxlLCBfX3ZhbCkpCisJICBpZiAoX19jb21wKCpfX21pZGRsZSwgX192YWwpKQog CSAgICB7CiAJICAgICAgX19maXJzdCA9IF9fbWlkZGxlOwogCSAgICAgICsrX19maXJzdDsK IAkgICAgICBfX2xlbiA9IF9fbGVuIC0gX19oYWxmIC0gMTsKIAkgICAgfQotCSAgZWxzZSBp ZiAoX19jb21wX3ZhbF9pdChfX3ZhbCwgX19taWRkbGUpKQorCSAgZWxzZSBpZiAoX19jb21w KF9fdmFsLCAqX19taWRkbGUpKQogCSAgICBfX2xlbiA9IF9faGFsZjsKIAkgIGVsc2UKIAkg ICAgewogCSAgICAgIF9Gb3J3YXJkSXRlcmF0b3IgX19sZWZ0Ci0JCT0gc3RkOjpfX2xvd2Vy X2JvdW5kKF9fZmlyc3QsIF9fbWlkZGxlLCBfX3ZhbCwgX19jb21wX2l0X3ZhbCk7CisJCT0g c3RkOjpfX2xvd2VyX2JvdW5kKF9fZmlyc3QsIF9fbWlkZGxlLCBfX3ZhbCwgX19jb21wKTsK IAkgICAgICBzdGQ6OmFkdmFuY2UoX19maXJzdCwgX19sZW4pOwogCSAgICAgIF9Gb3J3YXJk SXRlcmF0b3IgX19yaWdodAotCQk9IHN0ZDo6X191cHBlcl9ib3VuZCgrK19fbWlkZGxlLCBf X2ZpcnN0LCBfX3ZhbCwgX19jb21wX3ZhbF9pdCk7CisJCT0gc3RkOjpfX3VwcGVyX2JvdW5k KCsrX19taWRkbGUsIF9fZmlyc3QsIF9fdmFsLAorCQkJCSAgICAgX0dMSUJDWFhfRk9SV0FS RChfQ29tcCwgX19jb21wKSk7CiAJICAgICAgcmV0dXJuIHBhaXI8X0ZvcndhcmRJdGVyYXRv ciwgX0ZvcndhcmRJdGVyYXRvcj4oX19sZWZ0LCBfX3JpZ2h0KTsKIAkgICAgfQogCX0KQEAg LTIxMzIsOSArMjE2OCw5IEBAIF9HTElCQ1hYX0VORF9JTkxJTkVfQUJJX05BTUVTUEFDRShf VjIpCiAgICAgICBfX2dsaWJjeHhfcmVxdWlyZXNfcGFydGl0aW9uZWRfbG93ZXIoX19maXJz dCwgX19sYXN0LCBfX3ZhbCk7CiAgICAgICBfX2dsaWJjeHhfcmVxdWlyZXNfcGFydGl0aW9u ZWRfdXBwZXIoX19maXJzdCwgX19sYXN0LCBfX3ZhbCk7CiAKLSAgICAgIHJldHVybiBzdGQ6 Ol9fZXF1YWxfcmFuZ2UoX19maXJzdCwgX19sYXN0LCBfX3ZhbCwKLQkJCQlfX2dudV9jeHg6 Ol9fb3BzOjpfX2l0ZXJfbGVzc192YWwoKSwKLQkJCQlfX2dudV9jeHg6Ol9fb3BzOjpfX3Zh bF9sZXNzX2l0ZXIoKSk7CisgICAgICBfX2RlY2x0eXBlKF9fZ251X2N4eDo6X19vcHM6Ol9f bGVzc192YWwoX19maXJzdCwgX192YWwpKSBfX2NvbXAgPQorCV9fZ251X2N4eDo6X19vcHM6 Ol9fbGVzc192YWwoX19maXJzdCwgX192YWwpOworICAgICAgcmV0dXJuIHN0ZDo6X19lcXVh bF9yYW5nZShfX2ZpcnN0LCBfX2xhc3QsIF9fdmFsLCBfX2NvbXApOwogICAgIH0KIAogICAv KioKQEAgLTIxNzEsOSArMjIwNyw3IEBAIF9HTElCQ1hYX0VORF9JTkxJTkVfQUJJX05BTUVT UEFDRShfVjIpCiAgICAgICBfX2dsaWJjeHhfcmVxdWlyZXNfcGFydGl0aW9uZWRfdXBwZXJf cHJlZChfX2ZpcnN0LCBfX2xhc3QsCiAJCQkJCQlfX3ZhbCwgX19jb21wKTsKIAotICAgICAg cmV0dXJuIHN0ZDo6X19lcXVhbF9yYW5nZShfX2ZpcnN0LCBfX2xhc3QsIF9fdmFsLAotCQkJ CV9fZ251X2N4eDo6X19vcHM6Ol9faXRlcl9jb21wX3ZhbChfX2NvbXApLAotCQkJCV9fZ251 X2N4eDo6X19vcHM6Ol9fdmFsX2NvbXBfaXRlcihfX2NvbXApKTsKKyAgICAgIHJldHVybiBz dGQ6Ol9fZXF1YWxfcmFuZ2UoX19maXJzdCwgX19sYXN0LCBfX3ZhbCwgX0dMSUJDWFhfTU9W RShfX2NvbXApKTsKICAgICB9CiAKICAgLyoqCkBAIC0yMjAxLDkgKzIyMzUsMTAgQEAgX0dM SUJDWFhfRU5EX0lOTElORV9BQklfTkFNRVNQQUNFKF9WMikKICAgICAgIF9fZ2xpYmN4eF9y ZXF1aXJlc19wYXJ0aXRpb25lZF9sb3dlcihfX2ZpcnN0LCBfX2xhc3QsIF9fdmFsKTsKICAg ICAgIF9fZ2xpYmN4eF9yZXF1aXJlc19wYXJ0aXRpb25lZF91cHBlcihfX2ZpcnN0LCBfX2xh c3QsIF9fdmFsKTsKIAotICAgICAgX0ZvcndhcmRJdGVyYXRvciBfX2kKLQk9IHN0ZDo6X19s b3dlcl9ib3VuZChfX2ZpcnN0LCBfX2xhc3QsIF9fdmFsLAotCQkJICAgICBfX2dudV9jeHg6 Ol9fb3BzOjpfX2l0ZXJfbGVzc192YWwoKSk7CisgICAgICBfX2RlY2x0eXBlKF9fZ251X2N4 eDo6X19vcHM6Ol9fbGVzc192YWwoX19maXJzdCwgX192YWwpKSBfX2NvbXAgPQorCV9fZ251 X2N4eDo6X19vcHM6Ol9fbGVzc192YWwoX19maXJzdCwgX192YWwpOworICAgICAgX0Zvcndh cmRJdGVyYXRvciBfX2kgPQorCXN0ZDo6X19sb3dlcl9ib3VuZChfX2ZpcnN0LCBfX2xhc3Qs IF9fdmFsLCBfX2NvbXApOwogICAgICAgcmV0dXJuIF9faSAhPSBfX2xhc3QgJiYgIShfX3Zh bCA8ICpfX2kpOwogICAgIH0KIApAQCAtMjIzOCw4ICsyMjczLDcgQEAgX0dMSUJDWFhfRU5E X0lOTElORV9BQklfTkFNRVNQQUNFKF9WMikKIAkJCQkJCV9fdmFsLCBfX2NvbXApOwogCiAg ICAgICBfRm9yd2FyZEl0ZXJhdG9yIF9faQotCT0gc3RkOjpfX2xvd2VyX2JvdW5kKF9fZmly c3QsIF9fbGFzdCwgX192YWwsCi0JCQkgICAgIF9fZ251X2N4eDo6X19vcHM6Ol9faXRlcl9j b21wX3ZhbChfX2NvbXApKTsKKwk9IHN0ZDo6X19sb3dlcl9ib3VuZChfX2ZpcnN0LCBfX2xh c3QsIF9fdmFsLCBfX2NvbXApOwogICAgICAgcmV0dXJuIF9faSAhPSBfX2xhc3QgJiYgIWJv b2woX19jb21wKF9fdmFsLCAqX19pKSk7CiAgICAgfQogCkBAIC0yMjUxLDExICsyMjg1LDEy IEBAIF9HTElCQ1hYX0VORF9JTkxJTkVfQUJJX05BTUVTUEFDRShfVjIpCiAgICAgdm9pZAog ICAgIF9fbW92ZV9tZXJnZV9hZGFwdGl2ZShfSW5wdXRJdGVyYXRvcjEgX19maXJzdDEsIF9J bnB1dEl0ZXJhdG9yMSBfX2xhc3QxLAogCQkJICBfSW5wdXRJdGVyYXRvcjIgX19maXJzdDIs IF9JbnB1dEl0ZXJhdG9yMiBfX2xhc3QyLAotCQkJICBfT3V0cHV0SXRlcmF0b3IgX19yZXN1 bHQsIF9Db21wYXJlIF9fY29tcCkKKwkJCSAgX091dHB1dEl0ZXJhdG9yIF9fcmVzdWx0LAor CQkJICBfR0xJQkNYWF9GV0RSRUYoX0NvbXBhcmUpIF9fY29tcCkKICAgICB7CiAgICAgICB3 aGlsZSAoX19maXJzdDEgIT0gX19sYXN0MSAmJiBfX2ZpcnN0MiAhPSBfX2xhc3QyKQogCXsK LQkgIGlmIChfX2NvbXAoX19maXJzdDIsIF9fZmlyc3QxKSkKKwkgIGlmIChfX2NvbXAoKl9f Zmlyc3QyLCAqX19maXJzdDEpKQogCSAgICB7CiAJICAgICAgKl9fcmVzdWx0ID0gX0dMSUJD WFhfTU9WRSgqX19maXJzdDIpOwogCSAgICAgICsrX19maXJzdDI7CkBAIC0yMjgwLDcgKzIz MTUsNyBAQCBfR0xJQkNYWF9FTkRfSU5MSU5FX0FCSV9OQU1FU1BBQ0UoX1YyKQogCQkJCSAg IF9CaWRpcmVjdGlvbmFsSXRlcmF0b3IyIF9fZmlyc3QyLAogCQkJCSAgIF9CaWRpcmVjdGlv bmFsSXRlcmF0b3IyIF9fbGFzdDIsCiAJCQkJICAgX0JpZGlyZWN0aW9uYWxJdGVyYXRvcjMg X19yZXN1bHQsCi0JCQkJICAgX0NvbXBhcmUgX19jb21wKQorCQkJCSAgIF9HTElCQ1hYX0ZX RFJFRihfQ29tcGFyZSkgX19jb21wKQogICAgIHsKICAgICAgIGlmIChfX2ZpcnN0MSA9PSBf X2xhc3QxKQogCXsKQEAgLTIyOTQsNyArMjMyOSw3IEBAIF9HTElCQ1hYX0VORF9JTkxJTkVf QUJJX05BTUVTUEFDRShfVjIpCiAgICAgICAtLV9fbGFzdDI7CiAgICAgICB3aGlsZSAodHJ1 ZSkKIAl7Ci0JICBpZiAoX19jb21wKF9fbGFzdDIsIF9fbGFzdDEpKQorCSAgaWYgKF9fY29t cCgqX19sYXN0MiwgKl9fbGFzdDEpKQogCSAgICB7CiAJICAgICAgKi0tX19yZXN1bHQgPSBf R0xJQkNYWF9NT1ZFKCpfX2xhc3QxKTsKIAkgICAgICBpZiAoX19maXJzdDEgPT0gX19sYXN0 MSkKQEAgLTIzNjAsMTkgKzIzOTUsMjUgQEAgX0dMSUJDWFhfRU5EX0lOTElORV9BQklfTkFN RVNQQUNFKF9WMikKIAkJICAgICBfQmlkaXJlY3Rpb25hbEl0ZXJhdG9yIF9fbWlkZGxlLAog CQkgICAgIF9CaWRpcmVjdGlvbmFsSXRlcmF0b3IgX19sYXN0LAogCQkgICAgIF9EaXN0YW5j ZSBfX2xlbjEsIF9EaXN0YW5jZSBfX2xlbjIsCi0JCSAgICAgX1BvaW50ZXIgX19idWZmZXIs IF9Db21wYXJlIF9fY29tcCkKKwkJICAgICBfUG9pbnRlciBfX2J1ZmZlciwgX0dMSUJDWFhf RldEUkVGKF9Db21wYXJlKSBfX2NvbXApCiAgICAgeworICAgICAgX19kZWNsdHlwZShfX2du dV9jeHg6Ol9fb3BzOjpfX2xlc3MoX0dMSUJDWFhfRk9SV0FSRChfQ29tcGFyZSwgX19jb21w KSwKKwkJCQkJICBfX2ZpcnN0LCBfX2J1ZmZlcikpIF9fY21wCisJPSBfX2dudV9jeHg6Ol9f b3BzOjpfX2xlc3MoX0dMSUJDWFhfRk9SV0FSRChfQ29tcGFyZSwgX19jb21wKSwKKwkJCQkg ICBfX2ZpcnN0LCBfX2J1ZmZlcik7CiAgICAgICBpZiAoX19sZW4xIDw9IF9fbGVuMikKIAl7 CiAJICBfUG9pbnRlciBfX2J1ZmZlcl9lbmQgPSBfR0xJQkNYWF9NT1ZFMyhfX2ZpcnN0LCBf X21pZGRsZSwgX19idWZmZXIpOwotCSAgc3RkOjpfX21vdmVfbWVyZ2VfYWRhcHRpdmUoX19i dWZmZXIsIF9fYnVmZmVyX2VuZCwgX19taWRkbGUsIF9fbGFzdCwKLQkJCQkgICAgIF9fZmly c3QsIF9fY29tcCk7CisJICBzdGQ6Ol9fbW92ZV9tZXJnZV9hZGFwdGl2ZQorCSAgICAoX19i dWZmZXIsIF9fYnVmZmVyX2VuZCwgX19taWRkbGUsIF9fbGFzdCwgX19maXJzdCwKKwkgICAg IF9HTElCQ1hYX0ZPUldBUkQoX0NvbXBhcmUsIF9fY21wKSk7CiAJfQogICAgICAgZWxzZQog CXsKIAkgIF9Qb2ludGVyIF9fYnVmZmVyX2VuZCA9IF9HTElCQ1hYX01PVkUzKF9fbWlkZGxl LCBfX2xhc3QsIF9fYnVmZmVyKTsKLQkgIHN0ZDo6X19tb3ZlX21lcmdlX2FkYXB0aXZlX2Jh Y2t3YXJkKF9fZmlyc3QsIF9fbWlkZGxlLCBfX2J1ZmZlciwKLQkJCQkJICAgICAgX19idWZm ZXJfZW5kLCBfX2xhc3QsIF9fY29tcCk7CisJICBzdGQ6Ol9fbW92ZV9tZXJnZV9hZGFwdGl2 ZV9iYWNrd2FyZAorCSAgICAoX19maXJzdCwgX19taWRkbGUsIF9fYnVmZmVyLCBfX2J1ZmZl cl9lbmQsIF9fbGFzdCwKKwkgICAgIF9HTElCQ1hYX0ZPUldBUkQoX0NvbXBhcmUsIF9fY21w KSk7CiAJfQogICAgIH0KIApAQCAtMjM4NCwxMyArMjQyNSwxNiBAQCBfR0xJQkNYWF9FTkRf SU5MSU5FX0FCSV9OQU1FU1BBQ0UoX1YyKQogCQkJICAgIF9CaWRpcmVjdGlvbmFsSXRlcmF0 b3IgX19sYXN0LAogCQkJICAgIF9EaXN0YW5jZSBfX2xlbjEsIF9EaXN0YW5jZSBfX2xlbjIs CiAJCQkgICAgX1BvaW50ZXIgX19idWZmZXIsIF9EaXN0YW5jZSBfX2J1ZmZlcl9zaXplLAot CQkJICAgIF9Db21wYXJlIF9fY29tcCkKKwkJCSAgICBfR0xJQkNYWF9GV0RSRUYoX0NvbXBh cmUpIF9fY29tcCkKICAgICB7CiAgICAgICBpZiAoX19sZW4xIDw9IF9fYnVmZmVyX3NpemUg fHwgX19sZW4yIDw9IF9fYnVmZmVyX3NpemUpCi0Jc3RkOjpfX21lcmdlX2FkYXB0aXZlKF9f Zmlyc3QsIF9fbWlkZGxlLCBfX2xhc3QsCi0JCQkgICAgICBfX2xlbjEsIF9fbGVuMiwgX19i dWZmZXIsIF9fY29tcCk7CisJc3RkOjpfX21lcmdlX2FkYXB0aXZlCisJICAoX19maXJzdCwg X19taWRkbGUsIF9fbGFzdCwgX19sZW4xLCBfX2xlbjIsIF9fYnVmZmVyLAorCSAgIF9HTElC Q1hYX0ZPUldBUkQoX0NvbXBhcmUsIF9fY29tcCkpOwogICAgICAgZWxzZQogCXsKKwkgIHR5 cGVkZWYgdHlwZW5hbWUKKwkgICAgc3RkOjppdGVyYXRvcl90cmFpdHM8X0JpZGlyZWN0aW9u YWxJdGVyYXRvcj46OnZhbHVlX3R5cGUgX1ZhbDsKIAkgIF9CaWRpcmVjdGlvbmFsSXRlcmF0 b3IgX19maXJzdF9jdXQgPSBfX2ZpcnN0OwogCSAgX0JpZGlyZWN0aW9uYWxJdGVyYXRvciBf X3NlY29uZF9jdXQgPSBfX21pZGRsZTsKIAkgIF9EaXN0YW5jZSBfX2xlbjExID0gMDsKQEAg LTIzOTksMTggKzI0NDMsMTggQEAgX0dMSUJDWFhfRU5EX0lOTElORV9BQklfTkFNRVNQQUNF KF9WMikKIAkgICAgewogCSAgICAgIF9fbGVuMTEgPSBfX2xlbjEgLyAyOwogCSAgICAgIHN0 ZDo6YWR2YW5jZShfX2ZpcnN0X2N1dCwgX19sZW4xMSk7Ci0JICAgICAgX19zZWNvbmRfY3V0 Ci0JCT0gc3RkOjpfX2xvd2VyX2JvdW5kKF9fbWlkZGxlLCBfX2xhc3QsICpfX2ZpcnN0X2N1 dCwKLQkJCQkgICAgIF9fZ251X2N4eDo6X19vcHM6Ol9faXRlcl9jb21wX3ZhbChfX2NvbXAp KTsKKwkgICAgICBjb25zdCBfVmFsJiBfX3ZhbCA9ICpfX2ZpcnN0X2N1dDsKKwkgICAgICBf X3NlY29uZF9jdXQgPQorCQlzdGQ6Ol9fbG93ZXJfYm91bmQoX19taWRkbGUsIF9fbGFzdCwg X192YWwsIF9fY29tcCk7CiAJICAgICAgX19sZW4yMiA9IHN0ZDo6ZGlzdGFuY2UoX19taWRk bGUsIF9fc2Vjb25kX2N1dCk7CiAJICAgIH0KIAkgIGVsc2UKIAkgICAgewogCSAgICAgIF9f bGVuMjIgPSBfX2xlbjIgLyAyOwogCSAgICAgIHN0ZDo6YWR2YW5jZShfX3NlY29uZF9jdXQs IF9fbGVuMjIpOwotCSAgICAgIF9fZmlyc3RfY3V0Ci0JCT0gc3RkOjpfX3VwcGVyX2JvdW5k KF9fZmlyc3QsIF9fbWlkZGxlLCAqX19zZWNvbmRfY3V0LAotCQkJCSAgICAgX19nbnVfY3h4 OjpfX29wczo6X192YWxfY29tcF9pdGVyKF9fY29tcCkpOworCSAgICAgIGNvbnN0IF9WYWwm IF9fdmFsID0gKl9fc2Vjb25kX2N1dDsKKwkgICAgICBfX2ZpcnN0X2N1dCA9CisJCXN0ZDo6 X191cHBlcl9ib3VuZChfX2ZpcnN0LCBfX21pZGRsZSwgX192YWwsIF9fY29tcCk7CiAJICAg ICAgX19sZW4xMSA9IHN0ZDo6ZGlzdGFuY2UoX19maXJzdCwgX19maXJzdF9jdXQpOwogCSAg ICB9CiAKQEAgLTI0MjQsNyArMjQ2OCw4IEBAIF9HTElCQ1hYX0VORF9JTkxJTkVfQUJJX05B TUVTUEFDRShfVjIpCiAJICBzdGQ6Ol9fbWVyZ2VfYWRhcHRpdmVfcmVzaXplKF9fbmV3X21p ZGRsZSwgX19zZWNvbmRfY3V0LCBfX2xhc3QsCiAJCQkJICAgICAgIF9EaXN0YW5jZShfX2xl bjEgLSBfX2xlbjExKSwKIAkJCQkgICAgICAgX0Rpc3RhbmNlKF9fbGVuMiAtIF9fbGVuMjIp LAotCQkJCSAgICAgICBfX2J1ZmZlciwgX19idWZmZXJfc2l6ZSwgX19jb21wKTsKKwkJCQkg ICAgICAgX19idWZmZXIsIF9fYnVmZmVyX3NpemUsCisJCQkJICAgICAgIF9HTElCQ1hYX0ZP UldBUkQoX0NvbXBhcmUsIF9fY29tcCkpOwogCX0KICAgICB9CiAKQEAgLTI0MzYsMTggKzI0 ODEsMjAgQEAgX0dMSUJDWFhfRU5EX0lOTElORV9BQklfTkFNRVNQQUNFKF9WMikKIAkJCSAg IF9CaWRpcmVjdGlvbmFsSXRlcmF0b3IgX19taWRkbGUsCiAJCQkgICBfQmlkaXJlY3Rpb25h bEl0ZXJhdG9yIF9fbGFzdCwKIAkJCSAgIF9EaXN0YW5jZSBfX2xlbjEsIF9EaXN0YW5jZSBf X2xlbjIsCi0JCQkgICBfQ29tcGFyZSBfX2NvbXApCisJCQkgICBfR0xJQkNYWF9GV0RSRUYo X0NvbXBhcmUpIF9fY29tcCkKICAgICB7CiAgICAgICBpZiAoX19sZW4xID09IDAgfHwgX19s ZW4yID09IDApCiAJcmV0dXJuOwogCiAgICAgICBpZiAoX19sZW4xICsgX19sZW4yID09IDIp CiAJewotCSAgaWYgKF9fY29tcChfX21pZGRsZSwgX19maXJzdCkpCisJICBpZiAoX19jb21w KCpfX21pZGRsZSwgKl9fZmlyc3QpKQogCSAgICBzdGQ6Oml0ZXJfc3dhcChfX2ZpcnN0LCBf X21pZGRsZSk7CiAJICByZXR1cm47CiAJfQogCisgICAgICB0eXBlZGVmCisJdHlwZW5hbWUg c3RkOjppdGVyYXRvcl90cmFpdHM8X0JpZGlyZWN0aW9uYWxJdGVyYXRvcj46OnZhbHVlX3R5 cGUgX1ZhbDsKICAgICAgIF9CaWRpcmVjdGlvbmFsSXRlcmF0b3IgX19maXJzdF9jdXQgPSBf X2ZpcnN0OwogICAgICAgX0JpZGlyZWN0aW9uYWxJdGVyYXRvciBfX3NlY29uZF9jdXQgPSBf X21pZGRsZTsKICAgICAgIF9EaXN0YW5jZSBfX2xlbjExID0gMDsKQEAgLTI0NTYsMTggKzI1 MDMsMTYgQEAgX0dMSUJDWFhfRU5EX0lOTElORV9BQklfTkFNRVNQQUNFKF9WMikKIAl7CiAJ ICBfX2xlbjExID0gX19sZW4xIC8gMjsKIAkgIHN0ZDo6YWR2YW5jZShfX2ZpcnN0X2N1dCwg X19sZW4xMSk7Ci0JICBfX3NlY29uZF9jdXQKLQkgICAgPSBzdGQ6Ol9fbG93ZXJfYm91bmQo X19taWRkbGUsIF9fbGFzdCwgKl9fZmlyc3RfY3V0LAotCQkJCSBfX2dudV9jeHg6Ol9fb3Bz OjpfX2l0ZXJfY29tcF92YWwoX19jb21wKSk7CisJICBjb25zdCBfVmFsJiBfX3ZhbCA9ICpf X2ZpcnN0X2N1dDsKKwkgIF9fc2Vjb25kX2N1dCA9IHN0ZDo6X19sb3dlcl9ib3VuZChfX21p ZGRsZSwgX19sYXN0LCBfX3ZhbCwgX19jb21wKTsKIAkgIF9fbGVuMjIgPSBzdGQ6OmRpc3Rh bmNlKF9fbWlkZGxlLCBfX3NlY29uZF9jdXQpOwogCX0KICAgICAgIGVsc2UKIAl7CiAJICBf X2xlbjIyID0gX19sZW4yIC8gMjsKIAkgIHN0ZDo6YWR2YW5jZShfX3NlY29uZF9jdXQsIF9f bGVuMjIpOwotCSAgX19maXJzdF9jdXQKLQkgICAgPSBzdGQ6Ol9fdXBwZXJfYm91bmQoX19m aXJzdCwgX19taWRkbGUsICpfX3NlY29uZF9jdXQsCi0JCQkJIF9fZ251X2N4eDo6X19vcHM6 Ol9fdmFsX2NvbXBfaXRlcihfX2NvbXApKTsKKwkgIGNvbnN0IF9WYWwmIF9fdmFsID0gKl9f c2Vjb25kX2N1dDsKKwkgIF9fZmlyc3RfY3V0ID0gc3RkOjpfX3VwcGVyX2JvdW5kKF9fZmly c3QsIF9fbWlkZGxlLCBfX3ZhbCwgX19jb21wKTsKIAkgIF9fbGVuMTEgPSBzdGQ6OmRpc3Rh bmNlKF9fZmlyc3QsIF9fZmlyc3RfY3V0KTsKIAl9CiAKQEAgLTI0NzYsNyArMjUyMSw4IEBA IF9HTElCQ1hYX0VORF9JTkxJTkVfQUJJX05BTUVTUEFDRShfVjIpCiAgICAgICBzdGQ6Ol9f bWVyZ2Vfd2l0aG91dF9idWZmZXIoX19maXJzdCwgX19maXJzdF9jdXQsIF9fbmV3X21pZGRs ZSwKIAkJCQkgIF9fbGVuMTEsIF9fbGVuMjIsIF9fY29tcCk7CiAgICAgICBzdGQ6Ol9fbWVy Z2Vfd2l0aG91dF9idWZmZXIoX19uZXdfbWlkZGxlLCBfX3NlY29uZF9jdXQsIF9fbGFzdCwK LQkJCQkgIF9fbGVuMSAtIF9fbGVuMTEsIF9fbGVuMiAtIF9fbGVuMjIsIF9fY29tcCk7CisJ CQkJICBfX2xlbjEgLSBfX2xlbjExLCBfX2xlbjIgLSBfX2xlbjIyLAorCQkJCSAgX0dMSUJD WFhfRk9SV0FSRChfQ29tcGFyZSwgX19jb21wKSk7CiAgICAgfQogCiAgIHRlbXBsYXRlPHR5 cGVuYW1lIF9CaWRpcmVjdGlvbmFsSXRlcmF0b3IsIHR5cGVuYW1lIF9Db21wYXJlPgpAQCAt MjQ4NCw3ICsyNTMwLDcgQEAgX0dMSUJDWFhfRU5EX0lOTElORV9BQklfTkFNRVNQQUNFKF9W MikKICAgICBfX2lucGxhY2VfbWVyZ2UoX0JpZGlyZWN0aW9uYWxJdGVyYXRvciBfX2ZpcnN0 LAogCQkgICAgX0JpZGlyZWN0aW9uYWxJdGVyYXRvciBfX21pZGRsZSwKIAkJICAgIF9CaWRp cmVjdGlvbmFsSXRlcmF0b3IgX19sYXN0LAotCQkgICAgX0NvbXBhcmUgX19jb21wKQorCQkg ICAgX0dMSUJDWFhfRldEUkVGKF9Db21wYXJlKSBfX2NvbXApCiAgICAgewogICAgICAgdHlw ZWRlZiB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X0JpZGlyZWN0aW9uYWxJdGVyYXRvcj46 OnZhbHVlX3R5cGUKIAkgIF9WYWx1ZVR5cGU7CkBAIC0yNTA1LDE3ICsyNTUxLDIxIEBAIF9H TElCQ1hYX0VORF9JTkxJTkVfQUJJX05BTUVTUEFDRShfVjIpCiAKICAgICAgIGlmIChfX2J1 aWx0aW5fZXhwZWN0KF9fYnVmLnNpemUoKSA9PSBfX2J1Zi5yZXF1ZXN0ZWRfc2l6ZSgpLCB0 cnVlKSkKIAlzdGQ6Ol9fbWVyZ2VfYWRhcHRpdmUKLQkgIChfX2ZpcnN0LCBfX21pZGRsZSwg X19sYXN0LCBfX2xlbjEsIF9fbGVuMiwgX19idWYuYmVnaW4oKSwgX19jb21wKTsKKwkgIChf X2ZpcnN0LCBfX21pZGRsZSwgX19sYXN0LCBfX2xlbjEsIF9fbGVuMiwgX19idWYuYmVnaW4o KSwKKwkgICBfR0xJQkNYWF9GT1JXQVJEKF9Db21wYXJlLCBfX2NvbXApKTsKICAgICAgIGVs c2UgaWYgKF9fYnVpbHRpbl9leHBlY3QoX19idWYuYmVnaW4oKSA9PSAwLCBmYWxzZSkpCiAJ c3RkOjpfX21lcmdlX3dpdGhvdXRfYnVmZmVyCi0JICAoX19maXJzdCwgX19taWRkbGUsIF9f bGFzdCwgX19sZW4xLCBfX2xlbjIsIF9fY29tcCk7CisJICAoX19maXJzdCwgX19taWRkbGUs IF9fbGFzdCwgX19sZW4xLCBfX2xlbjIsCisJICAgX0dMSUJDWFhfRk9SV0FSRChfQ29tcGFy ZSwgX19jb21wKSk7CiAgICAgICBlbHNlCiAJc3RkOjpfX21lcmdlX2FkYXB0aXZlX3Jlc2l6 ZQogCSAgKF9fZmlyc3QsIF9fbWlkZGxlLCBfX2xhc3QsIF9fbGVuMSwgX19sZW4yLCBfX2J1 Zi5iZWdpbigpLAotCSAgIF9EaXN0YW5jZVR5cGUoX19idWYuc2l6ZSgpKSwgX19jb21wKTsK KwkgICBfRGlzdGFuY2VUeXBlKF9fYnVmLnNpemUoKSksCisJICAgX0dMSUJDWFhfRk9SV0FS RChfQ29tcGFyZSwgX19jb21wKSk7CiAjZWxzZQogICAgICAgc3RkOjpfX21lcmdlX3dpdGhv dXRfYnVmZmVyCi0JKF9fZmlyc3QsIF9fbWlkZGxlLCBfX2xhc3QsIF9fbGVuMSwgX19sZW4y LCBfX2NvbXApOworCShfX2ZpcnN0LCBfX21pZGRsZSwgX19sYXN0LCBfX2xlbjEsIF9fbGVu MiwKKwkgX0dMSUJDWFhfRk9SV0FSRChfQ29tcGFyZSwgX19jb21wKSk7CiAjZW5kaWYKICAg ICB9CiAKQEAgLTI1NTIsOCArMjYwMiw5IEBAIF9HTElCQ1hYX0VORF9JTkxJTkVfQUJJX05B TUVTUEFDRShfVjIpCiAgICAgICBfX2dsaWJjeHhfcmVxdWlyZXNfc29ydGVkKF9fbWlkZGxl LCBfX2xhc3QpOwogICAgICAgX19nbGliY3h4X3JlcXVpcmVzX2lycmVmbGV4aXZlKF9fZmly c3QsIF9fbGFzdCk7CiAKLSAgICAgIHN0ZDo6X19pbnBsYWNlX21lcmdlKF9fZmlyc3QsIF9f bWlkZGxlLCBfX2xhc3QsCi0JCQkgICBfX2dudV9jeHg6Ol9fb3BzOjpfX2l0ZXJfbGVzc19p dGVyKCkpOworICAgICAgX19kZWNsdHlwZShfX2dudV9jeHg6Ol9fb3BzOjpfX2xlc3MoX19m aXJzdCkpIF9fY29tcCA9CisJX19nbnVfY3h4OjpfX29wczo6X19sZXNzKF9fZmlyc3QpOwor ICAgICAgc3RkOjpfX2lucGxhY2VfbWVyZ2UoX19maXJzdCwgX19taWRkbGUsIF9fbGFzdCwg X19jb21wKTsKICAgICB9CiAKICAgLyoqCkBAIC0yNTk1LDggKzI2NDYsNyBAQCBfR0xJQkNY WF9FTkRfSU5MSU5FX0FCSV9OQU1FU1BBQ0UoX1YyKQogICAgICAgX19nbGliY3h4X3JlcXVp cmVzX3NvcnRlZF9wcmVkKF9fbWlkZGxlLCBfX2xhc3QsIF9fY29tcCk7CiAgICAgICBfX2ds aWJjeHhfcmVxdWlyZXNfaXJyZWZsZXhpdmVfcHJlZChfX2ZpcnN0LCBfX2xhc3QsIF9fY29t cCk7CiAKLSAgICAgIHN0ZDo6X19pbnBsYWNlX21lcmdlKF9fZmlyc3QsIF9fbWlkZGxlLCBf X2xhc3QsCi0JCQkgICBfX2dudV9jeHg6Ol9fb3BzOjpfX2l0ZXJfY29tcF9pdGVyKF9fY29t cCkpOworICAgICAgc3RkOjpfX2lucGxhY2VfbWVyZ2UoX19maXJzdCwgX19taWRkbGUsIF9f bGFzdCwgX0dMSUJDWFhfTU9WRShfX2NvbXApKTsKICAgICB9CiAKIApAQCAtMjYwNiwxMSAr MjY1NiwxMSBAQCBfR0xJQkNYWF9FTkRfSU5MSU5FX0FCSV9OQU1FU1BBQ0UoX1YyKQogICAg IF9PdXRwdXRJdGVyYXRvcgogICAgIF9fbW92ZV9tZXJnZShfSW5wdXRJdGVyYXRvciBfX2Zp cnN0MSwgX0lucHV0SXRlcmF0b3IgX19sYXN0MSwKIAkJIF9JbnB1dEl0ZXJhdG9yIF9fZmly c3QyLCBfSW5wdXRJdGVyYXRvciBfX2xhc3QyLAotCQkgX091dHB1dEl0ZXJhdG9yIF9fcmVz dWx0LCBfQ29tcGFyZSBfX2NvbXApCisJCSBfT3V0cHV0SXRlcmF0b3IgX19yZXN1bHQsIF9H TElCQ1hYX0ZXRFJFRihfQ29tcGFyZSkgX19jb21wKQogICAgIHsKICAgICAgIHdoaWxlIChf X2ZpcnN0MSAhPSBfX2xhc3QxICYmIF9fZmlyc3QyICE9IF9fbGFzdDIpCiAJewotCSAgaWYg KF9fY29tcChfX2ZpcnN0MiwgX19maXJzdDEpKQorCSAgaWYgKF9fY29tcCgqX19maXJzdDIs ICpfX2ZpcnN0MSkpCiAJICAgIHsKIAkgICAgICAqX19yZXN1bHQgPSBfR0xJQkNYWF9NT1ZF KCpfX2ZpcnN0Mik7CiAJICAgICAgKytfX2ZpcnN0MjsKQEAgLTI2MjMsOCArMjY3Myw3IEBA IF9HTElCQ1hYX0VORF9JTkxJTkVfQUJJX05BTUVTUEFDRShfVjIpCiAJICArK19fcmVzdWx0 OwogCX0KICAgICAgIHJldHVybiBfR0xJQkNYWF9NT1ZFMyhfX2ZpcnN0MiwgX19sYXN0MiwK LQkJCSAgICBfR0xJQkNYWF9NT1ZFMyhfX2ZpcnN0MSwgX19sYXN0MSwKLQkJCQkJICAgX19y ZXN1bHQpKTsKKwkJCSAgICBfR0xJQkNYWF9NT1ZFMyhfX2ZpcnN0MSwgX19sYXN0MSwgX19y ZXN1bHQpKTsKICAgICB9CiAKICAgdGVtcGxhdGU8dHlwZW5hbWUgX1JhbmRvbUFjY2Vzc0l0 ZXJhdG9yMSwgdHlwZW5hbWUgX1JhbmRvbUFjY2Vzc0l0ZXJhdG9yMiwKQEAgLTI2MzMsNyAr MjY4Miw3IEBAIF9HTElCQ1hYX0VORF9JTkxJTkVfQUJJX05BTUVTUEFDRShfVjIpCiAgICAg X19tZXJnZV9zb3J0X2xvb3AoX1JhbmRvbUFjY2Vzc0l0ZXJhdG9yMSBfX2ZpcnN0LAogCQkg ICAgICBfUmFuZG9tQWNjZXNzSXRlcmF0b3IxIF9fbGFzdCwKIAkJICAgICAgX1JhbmRvbUFj Y2Vzc0l0ZXJhdG9yMiBfX3Jlc3VsdCwgX0Rpc3RhbmNlIF9fc3RlcF9zaXplLAotCQkgICAg ICBfQ29tcGFyZSBfX2NvbXApCisJCSAgICAgIF9HTElCQ1hYX0ZXRFJFRihfQ29tcGFyZSkg X19jb21wKQogICAgIHsKICAgICAgIGNvbnN0IF9EaXN0YW5jZSBfX3R3b19zdGVwID0gMiAq IF9fc3RlcF9zaXplOwogCkBAIC0yNjQ4LDcgKzI2OTcsOCBAQCBfR0xJQkNYWF9FTkRfSU5M SU5FX0FCSV9OQU1FU1BBQ0UoX1YyKQogICAgICAgX19zdGVwX3NpemUgPSBzdGQ6Om1pbihf RGlzdGFuY2UoX19sYXN0IC0gX19maXJzdCksIF9fc3RlcF9zaXplKTsKIAogICAgICAgc3Rk OjpfX21vdmVfbWVyZ2UoX19maXJzdCwgX19maXJzdCArIF9fc3RlcF9zaXplLAotCQkJX19m aXJzdCArIF9fc3RlcF9zaXplLCBfX2xhc3QsIF9fcmVzdWx0LCBfX2NvbXApOworCQkJX19m aXJzdCArIF9fc3RlcF9zaXplLCBfX2xhc3QsIF9fcmVzdWx0LAorCQkJX0dMSUJDWFhfRk9S V0FSRChfQ29tcGFyZSwgX19jb21wKSk7CiAgICAgfQogCiAgIHRlbXBsYXRlPHR5cGVuYW1l IF9SYW5kb21BY2Nlc3NJdGVyYXRvciwgdHlwZW5hbWUgX0Rpc3RhbmNlLApAQCAtMjY1Nywx NCArMjcwNywxNiBAQCBfR0xJQkNYWF9FTkRfSU5MSU5FX0FCSV9OQU1FU1BBQ0UoX1YyKQog ICAgIHZvaWQKICAgICBfX2NodW5rX2luc2VydGlvbl9zb3J0KF9SYW5kb21BY2Nlc3NJdGVy YXRvciBfX2ZpcnN0LAogCQkJICAgX1JhbmRvbUFjY2Vzc0l0ZXJhdG9yIF9fbGFzdCwKLQkJ CSAgIF9EaXN0YW5jZSBfX2NodW5rX3NpemUsIF9Db21wYXJlIF9fY29tcCkKKwkJCSAgIF9E aXN0YW5jZSBfX2NodW5rX3NpemUsCisJCQkgICBfR0xJQkNYWF9GV0RSRUYoX0NvbXBhcmUp IF9fY29tcCkKICAgICB7CiAgICAgICB3aGlsZSAoX19sYXN0IC0gX19maXJzdCA+PSBfX2No dW5rX3NpemUpCiAJewogCSAgc3RkOjpfX2luc2VydGlvbl9zb3J0KF9fZmlyc3QsIF9fZmly c3QgKyBfX2NodW5rX3NpemUsIF9fY29tcCk7CiAJICBfX2ZpcnN0ICs9IF9fY2h1bmtfc2l6 ZTsKIAl9Ci0gICAgICBzdGQ6Ol9faW5zZXJ0aW9uX3NvcnQoX19maXJzdCwgX19sYXN0LCBf X2NvbXApOworICAgICAgc3RkOjpfX2luc2VydGlvbl9zb3J0CisJKF9fZmlyc3QsIF9fbGFz dCwgX0dMSUJDWFhfRk9SV0FSRChfQ29tcGFyZSwgX19jb21wKSk7CiAgICAgfQogCiAgIGVu dW0geyBfU19jaHVua19zaXplID0gNyB9OwpAQCAtMjY3Myw3ICsyNzI1LDggQEAgX0dMSUJD WFhfRU5EX0lOTElORV9BQklfTkFNRVNQQUNFKF9WMikKICAgICB2b2lkCiAgICAgX19tZXJn ZV9zb3J0X3dpdGhfYnVmZmVyKF9SYW5kb21BY2Nlc3NJdGVyYXRvciBfX2ZpcnN0LAogCQkJ ICAgICBfUmFuZG9tQWNjZXNzSXRlcmF0b3IgX19sYXN0LAotCQkJICAgICBfUG9pbnRlciBf X2J1ZmZlciwgX0NvbXBhcmUgX19jb21wKQorCQkJICAgICBfUG9pbnRlciBfX2J1ZmZlciwK KwkJCSAgICAgX0dMSUJDWFhfRldEUkVGKF9Db21wYXJlKSBfX2NvbXApCiAgICAgewogICAg ICAgdHlwZWRlZiB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X1JhbmRvbUFjY2Vzc0l0ZXJh dG9yPjo6ZGlmZmVyZW5jZV90eXBlCiAJX0Rpc3RhbmNlOwpAQCAtMjY4NiwxMSArMjczOSwx MSBAQCBfR0xJQkNYWF9FTkRfSU5MSU5FX0FCSV9OQU1FU1BBQ0UoX1YyKQogCiAgICAgICB3 aGlsZSAoX19zdGVwX3NpemUgPCBfX2xlbikKIAl7Ci0JICBzdGQ6Ol9fbWVyZ2Vfc29ydF9s b29wKF9fZmlyc3QsIF9fbGFzdCwgX19idWZmZXIsCi0JCQkJIF9fc3RlcF9zaXplLCBfX2Nv bXApOworCSAgc3RkOjpfX21lcmdlX3NvcnRfbG9vcAorCSAgICAoX19maXJzdCwgX19sYXN0 LCBfX2J1ZmZlciwgX19zdGVwX3NpemUsIF9fY29tcCk7CiAJICBfX3N0ZXBfc2l6ZSAqPSAy OwotCSAgc3RkOjpfX21lcmdlX3NvcnRfbG9vcChfX2J1ZmZlciwgX19idWZmZXJfbGFzdCwg X19maXJzdCwKLQkJCQkgX19zdGVwX3NpemUsIF9fY29tcCk7CisJICBzdGQ6Ol9fbWVyZ2Vf c29ydF9sb29wCisJICAgIChfX2J1ZmZlciwgX19idWZmZXJfbGFzdCwgX19maXJzdCwgX19z dGVwX3NpemUsIF9fY29tcCk7CiAJICBfX3N0ZXBfc2l6ZSAqPSAyOwogCX0KICAgICB9CkBA IC0yNzAwLDE0ICsyNzUzLDE2IEBAIF9HTElCQ1hYX0VORF9JTkxJTkVfQUJJX05BTUVTUEFD RShfVjIpCiAgICAgX19zdGFibGVfc29ydF9hZGFwdGl2ZShfUmFuZG9tQWNjZXNzSXRlcmF0 b3IgX19maXJzdCwKIAkJCSAgIF9SYW5kb21BY2Nlc3NJdGVyYXRvciBfX21pZGRsZSwKIAkJ CSAgIF9SYW5kb21BY2Nlc3NJdGVyYXRvciBfX2xhc3QsCi0JCQkgICBfUG9pbnRlciBfX2J1 ZmZlciwgX0NvbXBhcmUgX19jb21wKQorCQkJICAgX1BvaW50ZXIgX19idWZmZXIsIF9HTElC Q1hYX0ZXRFJFRihfQ29tcGFyZSkgX19jb21wKQogICAgIHsKLSAgICAgIHN0ZDo6X19tZXJn ZV9zb3J0X3dpdGhfYnVmZmVyKF9fZmlyc3QsIF9fbWlkZGxlLCBfX2J1ZmZlciwgX19jb21w KTsKLSAgICAgIHN0ZDo6X19tZXJnZV9zb3J0X3dpdGhfYnVmZmVyKF9fbWlkZGxlLCBfX2xh c3QsIF9fYnVmZmVyLCBfX2NvbXApOworICAgICAgX19kZWNsdHlwZShfX2dudV9jeHg6Ol9f b3BzOjpfX2xlc3MoX19jb21wLCBfX2ZpcnN0LCBfX2J1ZmZlcikpIF9fY21wCisJPSBfX2du dV9jeHg6Ol9fb3BzOjpfX2xlc3MoX19jb21wLCBfX2ZpcnN0LCBfX2J1ZmZlcik7CisgICAg ICBzdGQ6Ol9fbWVyZ2Vfc29ydF93aXRoX2J1ZmZlcihfX2ZpcnN0LCBfX21pZGRsZSwgX19i dWZmZXIsIF9fY21wKTsKKyAgICAgIHN0ZDo6X19tZXJnZV9zb3J0X3dpdGhfYnVmZmVyKF9f bWlkZGxlLCBfX2xhc3QsIF9fYnVmZmVyLCBfX2NtcCk7CiAKICAgICAgIHN0ZDo6X19tZXJn ZV9hZGFwdGl2ZShfX2ZpcnN0LCBfX21pZGRsZSwgX19sYXN0LAogCQkJICAgIF9fbWlkZGxl IC0gX19maXJzdCwgX19sYXN0IC0gX19taWRkbGUsCi0JCQkgICAgX19idWZmZXIsIF9fY29t cCk7CisJCQkgICAgX19idWZmZXIsIF9HTElCQ1hYX0ZPUldBUkQoX0NvbXBhcmUsIF9fY29t cCkpOwogICAgIH0KIAogICB0ZW1wbGF0ZTx0eXBlbmFtZSBfUmFuZG9tQWNjZXNzSXRlcmF0 b3IsIHR5cGVuYW1lIF9Qb2ludGVyLApAQCAtMjcxNiwzNiArMjc3MSwzOCBAQCBfR0xJQkNY WF9FTkRfSU5MSU5FX0FCSV9OQU1FU1BBQ0UoX1YyKQogICAgIF9fc3RhYmxlX3NvcnRfYWRh cHRpdmVfcmVzaXplKF9SYW5kb21BY2Nlc3NJdGVyYXRvciBfX2ZpcnN0LAogCQkJCSAgX1Jh bmRvbUFjY2Vzc0l0ZXJhdG9yIF9fbGFzdCwKIAkJCQkgIF9Qb2ludGVyIF9fYnVmZmVyLCBf RGlzdGFuY2UgX19idWZmZXJfc2l6ZSwKLQkJCQkgIF9Db21wYXJlIF9fY29tcCkKKwkJCQkg IF9HTElCQ1hYX0ZXRFJFRihfQ29tcGFyZSkgX19jb21wKQogICAgIHsKICAgICAgIGNvbnN0 IF9EaXN0YW5jZSBfX2xlbiA9IChfX2xhc3QgLSBfX2ZpcnN0ICsgMSkgLyAyOwogICAgICAg Y29uc3QgX1JhbmRvbUFjY2Vzc0l0ZXJhdG9yIF9fbWlkZGxlID0gX19maXJzdCArIF9fbGVu OwogICAgICAgaWYgKF9fbGVuID4gX19idWZmZXJfc2l6ZSkKIAl7Ci0JICBzdGQ6Ol9fc3Rh YmxlX3NvcnRfYWRhcHRpdmVfcmVzaXplKF9fZmlyc3QsIF9fbWlkZGxlLCBfX2J1ZmZlciwK LQkJCQkJICAgICBfX2J1ZmZlcl9zaXplLCBfX2NvbXApOwotCSAgc3RkOjpfX3N0YWJsZV9z b3J0X2FkYXB0aXZlX3Jlc2l6ZShfX21pZGRsZSwgX19sYXN0LCBfX2J1ZmZlciwKLQkJCQkJ ICAgICBfX2J1ZmZlcl9zaXplLCBfX2NvbXApOwotCSAgc3RkOjpfX21lcmdlX2FkYXB0aXZl X3Jlc2l6ZShfX2ZpcnN0LCBfX21pZGRsZSwgX19sYXN0LAotCQkJCSAgICAgICBfRGlzdGFu Y2UoX19taWRkbGUgLSBfX2ZpcnN0KSwKLQkJCQkgICAgICAgX0Rpc3RhbmNlKF9fbGFzdCAt IF9fbWlkZGxlKSwKLQkJCQkgICAgICAgX19idWZmZXIsIF9fYnVmZmVyX3NpemUsCi0JCQkJ ICAgICAgIF9fY29tcCk7CisJICBzdGQ6Ol9fc3RhYmxlX3NvcnRfYWRhcHRpdmVfcmVzaXpl CisJICAgIChfX2ZpcnN0LCBfX21pZGRsZSwgX19idWZmZXIsIF9fYnVmZmVyX3NpemUsIF9f Y29tcCk7CisJICBzdGQ6Ol9fc3RhYmxlX3NvcnRfYWRhcHRpdmVfcmVzaXplCisJICAgIChf X21pZGRsZSwgX19sYXN0LCBfX2J1ZmZlciwgX19idWZmZXJfc2l6ZSwgX19jb21wKTsKKwkg IHN0ZDo6X19tZXJnZV9hZGFwdGl2ZV9yZXNpemUKKwkgICAgKF9fZmlyc3QsIF9fbWlkZGxl LCBfX2xhc3QsCisJICAgICBfRGlzdGFuY2UoX19taWRkbGUgLSBfX2ZpcnN0KSwgX0Rpc3Rh bmNlKF9fbGFzdCAtIF9fbWlkZGxlKSwKKwkgICAgIF9fYnVmZmVyLCBfX2J1ZmZlcl9zaXpl LCBfR0xJQkNYWF9GT1JXQVJEKF9Db21wYXJlLCBfX2NvbXApKTsKIAl9CiAgICAgICBlbHNl Ci0Jc3RkOjpfX3N0YWJsZV9zb3J0X2FkYXB0aXZlKF9fZmlyc3QsIF9fbWlkZGxlLCBfX2xh c3QsCi0JCQkJICAgIF9fYnVmZmVyLCBfX2NvbXApOworCXN0ZDo6X19zdGFibGVfc29ydF9h ZGFwdGl2ZQorCSAgKF9fZmlyc3QsIF9fbWlkZGxlLCBfX2xhc3QsIF9fYnVmZmVyLAorCSAg IF9HTElCQ1hYX0ZPUldBUkQoX0NvbXBhcmUsIF9fY29tcCkpOwogICAgIH0KIAogICAvLy8g VGhpcyBpcyBhIGhlbHBlciBmdW5jdGlvbiBmb3IgdGhlIHN0YWJsZSBzb3J0aW5nIHJvdXRp bmVzLgogICB0ZW1wbGF0ZTx0eXBlbmFtZSBfUmFuZG9tQWNjZXNzSXRlcmF0b3IsIHR5cGVu YW1lIF9Db21wYXJlPgogICAgIHZvaWQKICAgICBfX2lucGxhY2Vfc3RhYmxlX3NvcnQoX1Jh bmRvbUFjY2Vzc0l0ZXJhdG9yIF9fZmlyc3QsCi0JCQkgIF9SYW5kb21BY2Nlc3NJdGVyYXRv ciBfX2xhc3QsIF9Db21wYXJlIF9fY29tcCkKKwkJCSAgX1JhbmRvbUFjY2Vzc0l0ZXJhdG9y IF9fbGFzdCwKKwkJCSAgX0dMSUJDWFhfRldEUkVGKF9Db21wYXJlKSBfX2NvbXApCiAgICAg ewogICAgICAgaWYgKF9fbGFzdCAtIF9fZmlyc3QgPCAxNSkKIAl7Ci0JICBzdGQ6Ol9faW5z ZXJ0aW9uX3NvcnQoX19maXJzdCwgX19sYXN0LCBfX2NvbXApOworCSAgc3RkOjpfX2luc2Vy dGlvbl9zb3J0CisJICAgIChfX2ZpcnN0LCBfX2xhc3QsIF9HTElCQ1hYX0ZPUldBUkQoX0Nv bXBhcmUsIF9fY29tcCkpOwogCSAgcmV0dXJuOwogCX0KICAgICAgIF9SYW5kb21BY2Nlc3NJ dGVyYXRvciBfX21pZGRsZSA9IF9fZmlyc3QgKyAoX19sYXN0IC0gX19maXJzdCkgLyAyOwpA QCAtMjc1NCw3ICsyODExLDcgQEAgX0dMSUJDWFhfRU5EX0lOTElORV9BQklfTkFNRVNQQUNF KF9WMikKICAgICAgIHN0ZDo6X19tZXJnZV93aXRob3V0X2J1ZmZlcihfX2ZpcnN0LCBfX21p ZGRsZSwgX19sYXN0LAogCQkJCSAgX19taWRkbGUgLSBfX2ZpcnN0LAogCQkJCSAgX19sYXN0 IC0gX19taWRkbGUsCi0JCQkJICBfX2NvbXApOworCQkJCSAgX0dMSUJDWFhfRk9SV0FSRChf Q29tcGFyZSwgX19jb21wKSk7CiAgICAgfQogCiAgIC8vIHN0YWJsZV9zb3J0CkBAIC0yNzcw LDEzICsyODI3LDEzIEBAIF9HTElCQ1hYX0VORF9JTkxJTkVfQUJJX05BTUVTUEFDRShfVjIp CiAgICAgYm9vbAogICAgIF9faW5jbHVkZXMoX0lucHV0SXRlcmF0b3IxIF9fZmlyc3QxLCBf SW5wdXRJdGVyYXRvcjEgX19sYXN0MSwKIAkgICAgICAgX0lucHV0SXRlcmF0b3IyIF9fZmly c3QyLCBfSW5wdXRJdGVyYXRvcjIgX19sYXN0MiwKLQkgICAgICAgX0NvbXBhcmUgX19jb21w KQorCSAgICAgICBfR0xJQkNYWF9GV0RSRUYoX0NvbXBhcmUpIF9fY29tcCkKICAgICB7CiAg ICAgICB3aGlsZSAoX19maXJzdDEgIT0gX19sYXN0MSAmJiBfX2ZpcnN0MiAhPSBfX2xhc3Qy KQogCXsKLQkgIGlmIChfX2NvbXAoX19maXJzdDIsIF9fZmlyc3QxKSkKKwkgIGlmIChfX2Nv bXAoKl9fZmlyc3QyLCAqX19maXJzdDEpKQogCSAgICByZXR1cm4gZmFsc2U7Ci0JICBpZiAo IV9fY29tcChfX2ZpcnN0MSwgX19maXJzdDIpKQorCSAgaWYgKCFfX2NvbXAoKl9fZmlyc3Qx LCAqX19maXJzdDIpKQogCSAgICArK19fZmlyc3QyOwogCSAgKytfX2ZpcnN0MTsKIAl9CkBA IC0yODIyLDggKzI4NzksOSBAQCBfR0xJQkNYWF9FTkRfSU5MSU5FX0FCSV9OQU1FU1BBQ0Uo X1YyKQogICAgICAgX19nbGliY3h4X3JlcXVpcmVzX2lycmVmbGV4aXZlMihfX2ZpcnN0MSwg X19sYXN0MSk7CiAgICAgICBfX2dsaWJjeHhfcmVxdWlyZXNfaXJyZWZsZXhpdmUyKF9fZmly c3QyLCBfX2xhc3QyKTsKIAotICAgICAgcmV0dXJuIHN0ZDo6X19pbmNsdWRlcyhfX2ZpcnN0 MSwgX19sYXN0MSwgX19maXJzdDIsIF9fbGFzdDIsCi0JCQkgICAgIF9fZ251X2N4eDo6X19v cHM6Ol9faXRlcl9sZXNzX2l0ZXIoKSk7CisgICAgICBfX2RlY2x0eXBlKF9fZ251X2N4eDo6 X19vcHM6Ol9fbGVzcyhfX2ZpcnN0MSwgX19maXJzdDIpKSBfX2NvbXAgPQorCV9fZ251X2N4 eDo6X19vcHM6Ol9fbGVzcyhfX2ZpcnN0MSwgX19maXJzdDIpOworICAgICAgcmV0dXJuIHN0 ZDo6X19pbmNsdWRlcyhfX2ZpcnN0MSwgX19sYXN0MSwgX19maXJzdDIsIF9fbGFzdDIsIF9f Y29tcCk7CiAgICAgfQogCiAgIC8qKgpAQCAtMjg3MCw3ICsyOTI4LDcgQEAgX0dMSUJDWFhf RU5EX0lOTElORV9BQklfTkFNRVNQQUNFKF9WMikKICAgICAgIF9fZ2xpYmN4eF9yZXF1aXJl c19pcnJlZmxleGl2ZV9wcmVkMihfX2ZpcnN0MiwgX19sYXN0MiwgX19jb21wKTsKIAogICAg ICAgcmV0dXJuIHN0ZDo6X19pbmNsdWRlcyhfX2ZpcnN0MSwgX19sYXN0MSwgX19maXJzdDIs IF9fbGFzdDIsCi0JCQkgICAgIF9fZ251X2N4eDo6X19vcHM6Ol9faXRlcl9jb21wX2l0ZXIo X19jb21wKSk7CisJCQkgICAgIF9HTElCQ1hYX01PVkUoX19jb21wKSk7CiAgICAgfQogCiAg IC8vIG50aF9lbGVtZW50CkBAIC0yODg3LDcgKzI5NDUsOCBAQCBfR0xJQkNYWF9FTkRfSU5M SU5FX0FCSV9OQU1FU1BBQ0UoX1YyKQogICAgIF9HTElCQ1hYMjBfQ09OU1RFWFBSCiAgICAg Ym9vbAogICAgIF9fbmV4dF9wZXJtdXRhdGlvbihfQmlkaXJlY3Rpb25hbEl0ZXJhdG9yIF9f Zmlyc3QsCi0JCSAgICAgICBfQmlkaXJlY3Rpb25hbEl0ZXJhdG9yIF9fbGFzdCwgX0NvbXBh cmUgX19jb21wKQorCQkgICAgICAgX0JpZGlyZWN0aW9uYWxJdGVyYXRvciBfX2xhc3QsCisJ CSAgICAgICBfR0xJQkNYWF9GV0RSRUYoX0NvbXBhcmUpIF9fY29tcCkKICAgICB7CiAgICAg ICBpZiAoX19maXJzdCA9PSBfX2xhc3QpCiAJcmV0dXJuIGZhbHNlOwpAQCAtMjkwMiwxMCAr Mjk2MSwxMCBAQCBfR0xJQkNYWF9FTkRfSU5MSU5FX0FCSV9OQU1FU1BBQ0UoX1YyKQogCXsK IAkgIF9CaWRpcmVjdGlvbmFsSXRlcmF0b3IgX19paSA9IF9faTsKIAkgIC0tX19pOwotCSAg aWYgKF9fY29tcChfX2ksIF9faWkpKQorCSAgaWYgKF9fY29tcCgqX19pLCAqX19paSkpCiAJ ICAgIHsKIAkgICAgICBfQmlkaXJlY3Rpb25hbEl0ZXJhdG9yIF9faiA9IF9fbGFzdDsKLQkg ICAgICB3aGlsZSAoIV9fY29tcChfX2ksIC0tX19qKSkKKwkgICAgICB3aGlsZSAoIV9fY29t cCgqX19pLCAqKC0tX19qKSkpCiAJCXt9CiAJICAgICAgc3RkOjppdGVyX3N3YXAoX19pLCBf X2opOwogCSAgICAgIHN0ZDo6X19yZXZlcnNlKF9faWksIF9fbGFzdCwKQEAgLTI5NDcsOCAr MzAwNiw5IEBAIF9HTElCQ1hYX0VORF9JTkxJTkVfQUJJX05BTUVTUEFDRShfVjIpCiAgICAg ICBfX2dsaWJjeHhfcmVxdWlyZXNfdmFsaWRfcmFuZ2UoX19maXJzdCwgX19sYXN0KTsKICAg ICAgIF9fZ2xpYmN4eF9yZXF1aXJlc19pcnJlZmxleGl2ZShfX2ZpcnN0LCBfX2xhc3QpOwog Ci0gICAgICByZXR1cm4gc3RkOjpfX25leHRfcGVybXV0YXRpb24KLQkoX19maXJzdCwgX19s YXN0LCBfX2dudV9jeHg6Ol9fb3BzOjpfX2l0ZXJfbGVzc19pdGVyKCkpOworICAgICAgX19k ZWNsdHlwZShfX2dudV9jeHg6Ol9fb3BzOjpfX2xlc3MoX19maXJzdCkpIF9fY29tcCA9CisJ X19nbnVfY3h4OjpfX29wczo6X19sZXNzKF9fZmlyc3QpOworICAgICAgcmV0dXJuIHN0ZDo6 X19uZXh0X3Blcm11dGF0aW9uKF9fZmlyc3QsIF9fbGFzdCwgX19jb21wKTsKICAgICB9CiAK ICAgLyoqCkBAIC0yOTgxLDE1ICszMDQxLDE1IEBAIF9HTElCQ1hYX0VORF9JTkxJTkVfQUJJ X05BTUVTUEFDRShfVjIpCiAgICAgICBfX2dsaWJjeHhfcmVxdWlyZXNfdmFsaWRfcmFuZ2Uo X19maXJzdCwgX19sYXN0KTsKICAgICAgIF9fZ2xpYmN4eF9yZXF1aXJlc19pcnJlZmxleGl2 ZV9wcmVkKF9fZmlyc3QsIF9fbGFzdCwgX19jb21wKTsKIAotICAgICAgcmV0dXJuIHN0ZDo6 X19uZXh0X3Blcm11dGF0aW9uCi0JKF9fZmlyc3QsIF9fbGFzdCwgX19nbnVfY3h4OjpfX29w czo6X19pdGVyX2NvbXBfaXRlcihfX2NvbXApKTsKKyAgICAgIHJldHVybiBzdGQ6Ol9fbmV4 dF9wZXJtdXRhdGlvbihfX2ZpcnN0LCBfX2xhc3QsIF9HTElCQ1hYX01PVkUoX19jb21wKSk7 CiAgICAgfQogCiAgIHRlbXBsYXRlPHR5cGVuYW1lIF9CaWRpcmVjdGlvbmFsSXRlcmF0b3Is IHR5cGVuYW1lIF9Db21wYXJlPgogICAgIF9HTElCQ1hYMjBfQ09OU1RFWFBSCiAgICAgYm9v bAogICAgIF9fcHJldl9wZXJtdXRhdGlvbihfQmlkaXJlY3Rpb25hbEl0ZXJhdG9yIF9fZmly c3QsCi0JCSAgICAgICBfQmlkaXJlY3Rpb25hbEl0ZXJhdG9yIF9fbGFzdCwgX0NvbXBhcmUg X19jb21wKQorCQkgICAgICAgX0JpZGlyZWN0aW9uYWxJdGVyYXRvciBfX2xhc3QsCisJCSAg ICAgICBfR0xJQkNYWF9GV0RSRUYoX0NvbXBhcmUpIF9fY29tcCkKICAgICB7CiAgICAgICBp ZiAoX19maXJzdCA9PSBfX2xhc3QpCiAJcmV0dXJuIGZhbHNlOwpAQCAtMzAwNCwxMCArMzA2 NCwxMCBAQCBfR0xJQkNYWF9FTkRfSU5MSU5FX0FCSV9OQU1FU1BBQ0UoX1YyKQogCXsKIAkg IF9CaWRpcmVjdGlvbmFsSXRlcmF0b3IgX19paSA9IF9faTsKIAkgIC0tX19pOwotCSAgaWYg KF9fY29tcChfX2lpLCBfX2kpKQorCSAgaWYgKF9fY29tcCgqX19paSwgKl9faSkpCiAJICAg IHsKIAkgICAgICBfQmlkaXJlY3Rpb25hbEl0ZXJhdG9yIF9faiA9IF9fbGFzdDsKLQkgICAg ICB3aGlsZSAoIV9fY29tcCgtLV9faiwgX19pKSkKKwkgICAgICB3aGlsZSAoIV9fY29tcCgq KC0tX19qKSwgKl9faSkpCiAJCXt9CiAJICAgICAgc3RkOjppdGVyX3N3YXAoX19pLCBfX2op OwogCSAgICAgIHN0ZDo6X19yZXZlcnNlKF9faWksIF9fbGFzdCwKQEAgLTMwNTAsOCArMzEx MCw5IEBAIF9HTElCQ1hYX0VORF9JTkxJTkVfQUJJX05BTUVTUEFDRShfVjIpCiAgICAgICBf X2dsaWJjeHhfcmVxdWlyZXNfdmFsaWRfcmFuZ2UoX19maXJzdCwgX19sYXN0KTsKICAgICAg IF9fZ2xpYmN4eF9yZXF1aXJlc19pcnJlZmxleGl2ZShfX2ZpcnN0LCBfX2xhc3QpOwogCi0g ICAgICByZXR1cm4gc3RkOjpfX3ByZXZfcGVybXV0YXRpb24oX19maXJzdCwgX19sYXN0LAot CQkJCSAgICAgX19nbnVfY3h4OjpfX29wczo6X19pdGVyX2xlc3NfaXRlcigpKTsKKyAgICAg IF9fZGVjbHR5cGUoX19nbnVfY3h4OjpfX29wczo6X19sZXNzKF9fZmlyc3QpKSBfX2NvbXAg PQorCV9fZ251X2N4eDo6X19vcHM6Ol9fbGVzcyhfX2ZpcnN0KTsKKyAgICAgIHJldHVybiBz dGQ6Ol9fcHJldl9wZXJtdXRhdGlvbihfX2ZpcnN0LCBfX2xhc3QsIF9fY29tcCk7CiAgICAg fQogCiAgIC8qKgpAQCAtMzA4NCw4ICszMTQ1LDcgQEAgX0dMSUJDWFhfRU5EX0lOTElORV9B QklfTkFNRVNQQUNFKF9WMikKICAgICAgIF9fZ2xpYmN4eF9yZXF1aXJlc192YWxpZF9yYW5n ZShfX2ZpcnN0LCBfX2xhc3QpOwogICAgICAgX19nbGliY3h4X3JlcXVpcmVzX2lycmVmbGV4 aXZlX3ByZWQoX19maXJzdCwgX19sYXN0LCBfX2NvbXApOwogCi0gICAgICByZXR1cm4gc3Rk OjpfX3ByZXZfcGVybXV0YXRpb24oX19maXJzdCwgX19sYXN0LAotCQkJCV9fZ251X2N4eDo6 X19vcHM6Ol9faXRlcl9jb21wX2l0ZXIoX19jb21wKSk7CisgICAgICByZXR1cm4gc3RkOjpf X3ByZXZfcGVybXV0YXRpb24oX19maXJzdCwgX19sYXN0LCBfR0xJQkNYWF9NT1ZFKF9fY29t cCkpOwogICAgIH0KIAogICAvLyByZXBsYWNlCkBAIC0zMDk3LDEwICszMTU3LDExIEBAIF9H TElCQ1hYX0VORF9JTkxJTkVfQUJJX05BTUVTUEFDRShfVjIpCiAgICAgX091dHB1dEl0ZXJh dG9yCiAgICAgX19yZXBsYWNlX2NvcHlfaWYoX0lucHV0SXRlcmF0b3IgX19maXJzdCwgX0lu cHV0SXRlcmF0b3IgX19sYXN0LAogCQkgICAgICBfT3V0cHV0SXRlcmF0b3IgX19yZXN1bHQs Ci0JCSAgICAgIF9QcmVkaWNhdGUgX19wcmVkLCBjb25zdCBfVHAmIF9fbmV3X3ZhbHVlKQor CQkgICAgICBfR0xJQkNYWF9GV0RSRUYoX1ByZWRpY2F0ZSkgX19wcmVkLAorCQkgICAgICBj b25zdCBfVHAmIF9fbmV3X3ZhbHVlKQogICAgIHsKICAgICAgIGZvciAoOyBfX2ZpcnN0ICE9 IF9fbGFzdDsgKytfX2ZpcnN0LCAodm9pZCkrK19fcmVzdWx0KQotCWlmIChfX3ByZWQoX19m aXJzdCkpCisJaWYgKF9fcHJlZCgqX19maXJzdCkpCiAJICAqX19yZXN1bHQgPSBfX25ld192 YWx1ZTsKIAllbHNlCiAJICAqX19yZXN1bHQgPSAqX19maXJzdDsKQEAgLTMxMzYsOSArMzE5 NywxMCBAQCBfR0xJQkNYWF9FTkRfSU5MSU5FX0FCSV9OQU1FU1BBQ0UoX1YyKQogCSAgICB0 eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X0lucHV0SXRlcmF0b3I+Ojp2YWx1ZV90eXBlLCBf VHA+KQogICAgICAgX19nbGliY3h4X3JlcXVpcmVzX3ZhbGlkX3JhbmdlKF9fZmlyc3QsIF9f bGFzdCk7CiAKLSAgICAgIHJldHVybiBzdGQ6Ol9fcmVwbGFjZV9jb3B5X2lmKF9fZmlyc3Qs IF9fbGFzdCwgX19yZXN1bHQsCi0JCQlfX2dudV9jeHg6Ol9fb3BzOjpfX2l0ZXJfZXF1YWxz X3ZhbChfX29sZF92YWx1ZSksCi0JCQkJCSAgICAgIF9fbmV3X3ZhbHVlKTsKKyAgICAgIF9f ZGVjbHR5cGUoX19nbnVfY3h4OjpfX29wczo6X19lcXVhbF92YWwoX19maXJzdCwgX19vbGRf dmFsdWUpKSBfX3ByZWQgPQorCV9fZ251X2N4eDo6X19vcHM6Ol9fZXF1YWxfdmFsKF9fZmly c3QsIF9fb2xkX3ZhbHVlKTsKKyAgICAgIHJldHVybiBzdGQ6Ol9fcmVwbGFjZV9jb3B5X2lm CisJKF9fZmlyc3QsIF9fbGFzdCwgX19yZXN1bHQsIF9fcHJlZCwgX19uZXdfdmFsdWUpOwog ICAgIH0KIAogICAvKioKQEAgLTMxNzMsOCArMzIzNSw3IEBAIF9HTElCQ1hYX0VORF9JTkxJ TkVfQUJJX05BTUVTUEFDRShfVjIpCiAgICAgICBfX2dsaWJjeHhfcmVxdWlyZXNfdmFsaWRf cmFuZ2UoX19maXJzdCwgX19sYXN0KTsKIAogICAgICAgcmV0dXJuIHN0ZDo6X19yZXBsYWNl X2NvcHlfaWYoX19maXJzdCwgX19sYXN0LCBfX3Jlc3VsdCwKLQkJCQlfX2dudV9jeHg6Ol9f b3BzOjpfX3ByZWRfaXRlcihfX3ByZWQpLAotCQkJCQkgICAgICBfX25ld192YWx1ZSk7CisJ CQkJICAgIF9HTElCQ1hYX01PVkUoX19wcmVkKSwgX19uZXdfdmFsdWUpOwogICAgIH0KIAog I2lmIF9fY3BsdXNwbHVzID49IDIwMTEwM0wKQEAgLTMyMDUsMjAgKzMyNjYsMjIgQEAgX0dM SUJDWFhfRU5EX0lOTElORV9BQklfTkFNRVNQQUNFKF9WMikKICAgICBpbmxpbmUgYm9vbAog ICAgIGlzX3NvcnRlZChfRm9yd2FyZEl0ZXJhdG9yIF9fZmlyc3QsIF9Gb3J3YXJkSXRlcmF0 b3IgX19sYXN0LAogCSAgICAgIF9Db21wYXJlIF9fY29tcCkKLSAgICB7IHJldHVybiBzdGQ6 OmlzX3NvcnRlZF91bnRpbChfX2ZpcnN0LCBfX2xhc3QsIF9fY29tcCkgPT0gX19sYXN0OyB9 CisgICAgeworICAgICAgcmV0dXJuIHN0ZDo6aXNfc29ydGVkX3VudGlsKF9fZmlyc3QsIF9f bGFzdCwgc3RkOjptb3ZlKF9fY29tcCkpID09IF9fbGFzdDsKKyAgICB9CiAKICAgdGVtcGxh dGU8dHlwZW5hbWUgX0ZvcndhcmRJdGVyYXRvciwgdHlwZW5hbWUgX0NvbXBhcmU+CiAgICAg X0dMSUJDWFgyMF9DT05TVEVYUFIKICAgICBfRm9yd2FyZEl0ZXJhdG9yCiAgICAgX19pc19z b3J0ZWRfdW50aWwoX0ZvcndhcmRJdGVyYXRvciBfX2ZpcnN0LCBfRm9yd2FyZEl0ZXJhdG9y IF9fbGFzdCwKLQkJICAgICAgX0NvbXBhcmUgX19jb21wKQorCQkgICAgICBfQ29tcGFyZSYm IF9fY29tcCkKICAgICB7CiAgICAgICBpZiAoX19maXJzdCA9PSBfX2xhc3QpCiAJcmV0dXJu IF9fbGFzdDsKIAogICAgICAgX0ZvcndhcmRJdGVyYXRvciBfX25leHQgPSBfX2ZpcnN0Owog ICAgICAgZm9yICgrK19fbmV4dDsgX19uZXh0ICE9IF9fbGFzdDsgX19maXJzdCA9IF9fbmV4 dCwgKHZvaWQpKytfX25leHQpCi0JaWYgKF9fY29tcChfX25leHQsIF9fZmlyc3QpKQorCWlm IChfX2NvbXAoKl9fbmV4dCwgKl9fZmlyc3QpKQogCSAgcmV0dXJuIF9fbmV4dDsKICAgICAg IHJldHVybiBfX25leHQ7CiAgICAgfQpAQCAtMzI0NCw3ICszMzA3LDcgQEAgX0dMSUJDWFhf RU5EX0lOTElORV9BQklfTkFNRVNQQUNFKF9WMikKICAgICAgIF9fZ2xpYmN4eF9yZXF1aXJl c19pcnJlZmxleGl2ZShfX2ZpcnN0LCBfX2xhc3QpOwogCiAgICAgICByZXR1cm4gc3RkOjpf X2lzX3NvcnRlZF91bnRpbChfX2ZpcnN0LCBfX2xhc3QsCi0JCQkJICAgIF9fZ251X2N4eDo6 X19vcHM6Ol9faXRlcl9sZXNzX2l0ZXIoKSk7CisJCQkJICAgIF9fZ251X2N4eDo6X19vcHM6 Ol9fbGVzcygpKTsKICAgICB9CiAKICAgLyoqCkBAIC0zMjcwLDggKzMzMzMsNyBAQCBfR0xJ QkNYWF9FTkRfSU5MSU5FX0FCSV9OQU1FU1BBQ0UoX1YyKQogICAgICAgX19nbGliY3h4X3Jl cXVpcmVzX3ZhbGlkX3JhbmdlKF9fZmlyc3QsIF9fbGFzdCk7CiAgICAgICBfX2dsaWJjeHhf cmVxdWlyZXNfaXJyZWZsZXhpdmVfcHJlZChfX2ZpcnN0LCBfX2xhc3QsIF9fY29tcCk7CiAK LSAgICAgIHJldHVybiBzdGQ6Ol9faXNfc29ydGVkX3VudGlsKF9fZmlyc3QsIF9fbGFzdCwK LQkJCQkgICAgX19nbnVfY3h4OjpfX29wczo6X19pdGVyX2NvbXBfaXRlcihfX2NvbXApKTsK KyAgICAgIHJldHVybiBzdGQ6Ol9faXNfc29ydGVkX3VudGlsKF9fZmlyc3QsIF9fbGFzdCwg c3RkOjptb3ZlKF9fY29tcCkpOwogICAgIH0KIAogICAvKioKQEAgLTMzMTYsNyArMzM3OCw3 IEBAIF9HTElCQ1hYX0VORF9JTkxJTkVfQUJJX05BTUVTUEFDRShfVjIpCiAgICAgX0dMSUJD WFgxNF9DT05TVEVYUFIKICAgICBwYWlyPF9Gb3J3YXJkSXRlcmF0b3IsIF9Gb3J3YXJkSXRl cmF0b3I+CiAgICAgX19taW5tYXhfZWxlbWVudChfRm9yd2FyZEl0ZXJhdG9yIF9fZmlyc3Qs IF9Gb3J3YXJkSXRlcmF0b3IgX19sYXN0LAotCQkgICAgIF9Db21wYXJlIF9fY29tcCkKKwkJ ICAgICBfQ29tcGFyZSYmIF9fY29tcCkKICAgICB7CiAgICAgICBfRm9yd2FyZEl0ZXJhdG9y IF9fbmV4dCA9IF9fZmlyc3Q7CiAgICAgICBpZiAoX19maXJzdCA9PSBfX2xhc3QKQEAgLTMz MjQsNyArMzM4Niw3IEBAIF9HTElCQ1hYX0VORF9JTkxJTkVfQUJJX05BTUVTUEFDRShfVjIp CiAJcmV0dXJuIHN0ZDo6bWFrZV9wYWlyKF9fZmlyc3QsIF9fZmlyc3QpOwogCiAgICAgICBf Rm9yd2FyZEl0ZXJhdG9yIF9fbWlue30sIF9fbWF4e307Ci0gICAgICBpZiAoX19jb21wKF9f bmV4dCwgX19maXJzdCkpCisgICAgICBpZiAoX19jb21wKCpfX25leHQsICpfX2ZpcnN0KSkK IAl7CiAJICBfX21pbiA9IF9fbmV4dDsKIAkgIF9fbWF4ID0gX19maXJzdDsKQEAgLTMzNDMs MjUgKzM0MDUsMjUgQEAgX0dMSUJDWFhfRU5EX0lOTElORV9BQklfTkFNRVNQQUNFKF9WMikK IAkgIF9fbmV4dCA9IF9fZmlyc3Q7CiAJICBpZiAoKytfX25leHQgPT0gX19sYXN0KQogCSAg ICB7Ci0JICAgICAgaWYgKF9fY29tcChfX2ZpcnN0LCBfX21pbikpCisJICAgICAgaWYgKF9f Y29tcCgqX19maXJzdCwgKl9fbWluKSkKIAkJX19taW4gPSBfX2ZpcnN0OwotCSAgICAgIGVs c2UgaWYgKCFfX2NvbXAoX19maXJzdCwgX19tYXgpKQorCSAgICAgIGVsc2UgaWYgKCFfX2Nv bXAoKl9fZmlyc3QsICpfX21heCkpCiAJCV9fbWF4ID0gX19maXJzdDsKIAkgICAgICBicmVh azsKIAkgICAgfQogCi0JICBpZiAoX19jb21wKF9fbmV4dCwgX19maXJzdCkpCisJICBpZiAo X19jb21wKCpfX25leHQsICpfX2ZpcnN0KSkKIAkgICAgewotCSAgICAgIGlmIChfX2NvbXAo X19uZXh0LCBfX21pbikpCisJICAgICAgaWYgKF9fY29tcCgqX19uZXh0LCAqX19taW4pKQog CQlfX21pbiA9IF9fbmV4dDsKLQkgICAgICBpZiAoIV9fY29tcChfX2ZpcnN0LCBfX21heCkp CisJICAgICAgaWYgKCFfX2NvbXAoKl9fZmlyc3QsICpfX21heCkpCiAJCV9fbWF4ID0gX19m aXJzdDsKIAkgICAgfQogCSAgZWxzZQogCSAgICB7Ci0JICAgICAgaWYgKF9fY29tcChfX2Zp cnN0LCBfX21pbikpCisJICAgICAgaWYgKF9fY29tcCgqX19maXJzdCwgKl9fbWluKSkKIAkJ X19taW4gPSBfX2ZpcnN0OwotCSAgICAgIGlmICghX19jb21wKF9fbmV4dCwgX19tYXgpKQor CSAgICAgIGlmICghX19jb21wKCpfX25leHQsICpfX21heCkpCiAJCV9fbWF4ID0gX19uZXh0 OwogCSAgICB9CiAKQEAgLTMzOTYsNyArMzQ1OCw3IEBAIF9HTElCQ1hYX0VORF9JTkxJTkVf QUJJX05BTUVTUEFDRShfVjIpCiAgICAgICBfX2dsaWJjeHhfcmVxdWlyZXNfaXJyZWZsZXhp dmUoX19maXJzdCwgX19sYXN0KTsKIAogICAgICAgcmV0dXJuIHN0ZDo6X19taW5tYXhfZWxl bWVudChfX2ZpcnN0LCBfX2xhc3QsCi0JCQkJICAgX19nbnVfY3h4OjpfX29wczo6X19pdGVy X2xlc3NfaXRlcigpKTsKKwkJCQkgICBfX2dudV9jeHg6Ol9fb3BzOjpfX2xlc3MoKSk7CiAg ICAgfQogCiAgIC8qKgpAQCAtMzQyNSw4ICszNDg3LDcgQEAgX0dMSUJDWFhfRU5EX0lOTElO RV9BQklfTkFNRVNQQUNFKF9WMikKICAgICAgIF9fZ2xpYmN4eF9yZXF1aXJlc192YWxpZF9y YW5nZShfX2ZpcnN0LCBfX2xhc3QpOwogICAgICAgX19nbGliY3h4X3JlcXVpcmVzX2lycmVm bGV4aXZlX3ByZWQoX19maXJzdCwgX19sYXN0LCBfX2NvbXApOwogCi0gICAgICByZXR1cm4g c3RkOjpfX21pbm1heF9lbGVtZW50KF9fZmlyc3QsIF9fbGFzdCwKLQkJCQkgICBfX2dudV9j eHg6Ol9fb3BzOjpfX2l0ZXJfY29tcF9pdGVyKF9fY29tcCkpOworICAgICAgcmV0dXJuIHN0 ZDo6X19taW5tYXhfZWxlbWVudChfX2ZpcnN0LCBfX2xhc3QsIHN0ZDo6bW92ZShfX2NvbXAp KTsKICAgICB9CiAKICAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwPgpAQCAtMzQzNyw3ICszNDk4 LDcgQEAgX0dMSUJDWFhfRU5EX0lOTElORV9BQklfTkFNRVNQQUNFKF9WMikKICAgICAgIF9f Z2xpYmN4eF9yZXF1aXJlc19pcnJlZmxleGl2ZShfX2wuYmVnaW4oKSwgX19sLmVuZCgpKTsK ICAgICAgIHBhaXI8Y29uc3QgX1RwKiwgY29uc3QgX1RwKj4gX19wID0KIAlzdGQ6Ol9fbWlu bWF4X2VsZW1lbnQoX19sLmJlZ2luKCksIF9fbC5lbmQoKSwKLQkJCSAgICAgIF9fZ251X2N4 eDo6X19vcHM6Ol9faXRlcl9sZXNzX2l0ZXIoKSk7CisJCQkgICAgICBfX2dudV9jeHg6Ol9f b3BzOjpfX2xlc3MoKSk7CiAgICAgICByZXR1cm4gc3RkOjptYWtlX3BhaXIoKl9fcC5maXJz dCwgKl9fcC5zZWNvbmQpOwogICAgIH0KIApAQCAtMzQ0OCw4ICszNTA5LDcgQEAgX0dMSUJD WFhfRU5EX0lOTElORV9BQklfTkFNRVNQQUNFKF9WMikKICAgICB7CiAgICAgICBfX2dsaWJj eHhfcmVxdWlyZXNfaXJyZWZsZXhpdmVfcHJlZChfX2wuYmVnaW4oKSwgX19sLmVuZCgpLCBf X2NvbXApOwogICAgICAgcGFpcjxjb25zdCBfVHAqLCBjb25zdCBfVHAqPiBfX3AgPQotCXN0 ZDo6X19taW5tYXhfZWxlbWVudChfX2wuYmVnaW4oKSwgX19sLmVuZCgpLAotCQkJICAgICAg X19nbnVfY3h4OjpfX29wczo6X19pdGVyX2NvbXBfaXRlcihfX2NvbXApKTsKKwlzdGQ6Ol9f bWlubWF4X2VsZW1lbnQoX19sLmJlZ2luKCksIF9fbC5lbmQoKSwgc3RkOjptb3ZlKF9fY29t cCkpOwogICAgICAgcmV0dXJuIHN0ZDo6bWFrZV9wYWlyKCpfX3AuZmlyc3QsICpfX3Auc2Vj b25kKTsKICAgICB9CiAKQEAgLTM0ODMsNyArMzU0Myw3IEBAIF9HTElCQ1hYX0VORF9JTkxJ TkVfQUJJX05BTUVTUEFDRShfVjIpCiAgICAgICBfX2dsaWJjeHhfcmVxdWlyZXNfdmFsaWRf cmFuZ2UoX19maXJzdDEsIF9fbGFzdDEpOwogCiAgICAgICByZXR1cm4gc3RkOjpfX2lzX3Bl cm11dGF0aW9uKF9fZmlyc3QxLCBfX2xhc3QxLCBfX2ZpcnN0MiwKLQkJCQkgICBfX2dudV9j eHg6Ol9fb3BzOjpfX2l0ZXJfY29tcF9pdGVyKF9fcHJlZCkpOworCQkJCSAgIHN0ZDo6bW92 ZShfX3ByZWQpKTsKICAgICB9CiAKICNpZiBfX2NwbHVzcGx1cyA+IDIwMTEwM0wKQEAgLTM0 OTMsNyArMzU1Myw3IEBAIF9HTElCQ1hYX0VORF9JTkxJTkVfQUJJX05BTUVTUEFDRShfVjIp CiAgICAgYm9vbAogICAgIF9faXNfcGVybXV0YXRpb24oX0ZvcndhcmRJdGVyYXRvcjEgX19m aXJzdDEsIF9Gb3J3YXJkSXRlcmF0b3IxIF9fbGFzdDEsCiAJCSAgICAgX0ZvcndhcmRJdGVy YXRvcjIgX19maXJzdDIsIF9Gb3J3YXJkSXRlcmF0b3IyIF9fbGFzdDIsCi0JCSAgICAgX0Jp bmFyeVByZWRpY2F0ZSBfX3ByZWQpCisJCSAgICAgX0JpbmFyeVByZWRpY2F0ZSYmIF9fcHJl ZCkKICAgICB7CiAgICAgICB1c2luZyBfQ2F0MQogCT0gdHlwZW5hbWUgaXRlcmF0b3JfdHJh aXRzPF9Gb3J3YXJkSXRlcmF0b3IxPjo6aXRlcmF0b3JfY2F0ZWdvcnk7CkBAIC0zNTE0LDcg KzM1NzQsNyBAQCBfR0xJQkNYWF9FTkRfSU5MSU5FX0FCSV9OQU1FU1BBQ0UoX1YyKQogICAg ICAgLy8gaGF2ZSB0aGUgc2FtZSBlbGVtZW50cyBpbiB0aGUgc2FtZSBvcmRlci4KICAgICAg IGZvciAoOyBfX2ZpcnN0MSAhPSBfX2xhc3QxICYmIF9fZmlyc3QyICE9IF9fbGFzdDI7CiAJ ICArK19fZmlyc3QxLCAodm9pZCkrK19fZmlyc3QyKQotCWlmICghX19wcmVkKF9fZmlyc3Qx LCBfX2ZpcnN0MikpCisJaWYgKCFfX3ByZWQoKl9fZmlyc3QxLCAqX19maXJzdDIpKQogCSAg YnJlYWs7CiAKICAgICAgIGlmIChfX3JhX2l0ZXJzKQpAQCAtMzUzNSwxNCArMzU5NSwxNCBA QCBfR0xJQkNYWF9FTkRfSU5MSU5FX0FCSV9OQU1FU1BBQ0UoX1YyKQogICAgICAgZm9yIChf Rm9yd2FyZEl0ZXJhdG9yMSBfX3NjYW4gPSBfX2ZpcnN0MTsgX19zY2FuICE9IF9fbGFzdDE7 ICsrX19zY2FuKQogCXsKIAkgIGlmIChfX3NjYW4gIT0gc3RkOjpfX2ZpbmRfaWYoX19maXJz dDEsIF9fc2NhbiwKLQkJCV9fZ251X2N4eDo6X19vcHM6Ol9faXRlcl9jb21wX2l0ZXIoX19w cmVkLCBfX3NjYW4pKSkKKwkJX19nbnVfY3h4OjpfX29wczo6X19lcXVhbF9pdGUoX19wcmVk LCBfX2ZpcnN0MSwgX19zY2FuKSkpCiAJICAgIGNvbnRpbnVlOyAvLyBXZSd2ZSBzZWVuIHRo aXMgb25lIGJlZm9yZS4KIAogCSAgYXV0byBfX21hdGNoZXMgPSBzdGQ6Ol9fY291bnRfaWYo X19maXJzdDIsIF9fbGFzdDIsCi0JCV9fZ251X2N4eDo6X19vcHM6Ol9faXRlcl9jb21wX2l0 ZXIoX19wcmVkLCBfX3NjYW4pKTsKKwkgICAgX19nbnVfY3h4OjpfX29wczo6X19lcXVhbF9p dGUoX19wcmVkLCBfX2ZpcnN0MiwgX19zY2FuKSk7CiAJICBpZiAoMCA9PSBfX21hdGNoZXMK IAkgICAgICB8fCBzdGQ6Ol9fY291bnRfaWYoX19zY2FuLCBfX2xhc3QxLAotCQkJX19nbnVf Y3h4OjpfX29wczo6X19pdGVyX2NvbXBfaXRlcihfX3ByZWQsIF9fc2NhbikpCisJCSAgIF9f Z251X2N4eDo6X19vcHM6Ol9fZXF1YWxfaXRlKF9fcHJlZCwgX19maXJzdDEsIF9fc2Nhbikp CiAJICAgICAgIT0gX19tYXRjaGVzKQogCSAgICByZXR1cm4gZmFsc2U7CiAJfQpAQCAtMzU3 Myw3ICszNjMzLDcgQEAgX0dMSUJDWFhfRU5EX0lOTElORV9BQklfTkFNRVNQQUNFKF9WMikK IAogICAgICAgcmV0dXJuCiAJc3RkOjpfX2lzX3Blcm11dGF0aW9uKF9fZmlyc3QxLCBfX2xh c3QxLCBfX2ZpcnN0MiwgX19sYXN0MiwKLQkJCSAgICAgIF9fZ251X2N4eDo6X19vcHM6Ol9f aXRlcl9lcXVhbF90b19pdGVyKCkpOworCQkJICAgICAgX19nbnVfY3h4OjpfX29wczo6X19l cXVhbF90bygpKTsKICAgICB9CiAKICAgLyoqCkBAIC0zNjAyLDcgKzM2NjIsNyBAQCBfR0xJ QkNYWF9FTkRfSU5MSU5FX0FCSV9OQU1FU1BBQ0UoX1YyKQogICAgICAgX19nbGliY3h4X3Jl cXVpcmVzX3ZhbGlkX3JhbmdlKF9fZmlyc3QyLCBfX2xhc3QyKTsKIAogICAgICAgcmV0dXJu IHN0ZDo6X19pc19wZXJtdXRhdGlvbihfX2ZpcnN0MSwgX19sYXN0MSwgX19maXJzdDIsIF9f bGFzdDIsCi0JCQkJICAgX19nbnVfY3h4OjpfX29wczo6X19pdGVyX2NvbXBfaXRlcihfX3By ZWQpKTsKKwkJCQkgICBzdGQ6Om1vdmUoX19wcmVkKSk7CiAgICAgfQogI2VuZGlmIC8vIEMr KzE0CiAKQEAgLTM4NDYsOCArMzkwNiwxMCBAQCBfR0xJQkNYWF9CRUdJTl9OQU1FU1BBQ0Vf QUxHTwogICAgICAgX19nbGliY3h4X2Z1bmN0aW9uX3JlcXVpcmVzKF9FcXVhbE9wQ29uY2Vw dDwKIAkJdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9JbnB1dEl0ZXJhdG9yPjo6dmFsdWVf dHlwZSwgX1RwPikKICAgICAgIF9fZ2xpYmN4eF9yZXF1aXJlc192YWxpZF9yYW5nZShfX2Zp cnN0LCBfX2xhc3QpOwotICAgICAgcmV0dXJuIHN0ZDo6X19maW5kX2lmKF9fZmlyc3QsIF9f bGFzdCwKLQkJCSAgICBfX2dudV9jeHg6Ol9fb3BzOjpfX2l0ZXJfZXF1YWxzX3ZhbChfX3Zh bCkpOworCisgICAgICBfX2RlY2x0eXBlKF9fZ251X2N4eDo6X19vcHM6Ol9fZXF1YWxfdmFs KF9fZmlyc3QsIF9fdmFsKSkgX19jb21wID0KKwlfX2dudV9jeHg6Ol9fb3BzOjpfX2VxdWFs X3ZhbChfX2ZpcnN0LCBfX3ZhbCk7CisgICAgICByZXR1cm4gc3RkOjpfX2ZpbmRfaWYoX19m aXJzdCwgX19sYXN0LCBfX2NvbXApOwogICAgIH0KIAogICAvKioKQEAgLTM4NzIsOCArMzkz NCw3IEBAIF9HTElCQ1hYX0JFR0lOX05BTUVTUEFDRV9BTEdPCiAJICAgICAgdHlwZW5hbWUg aXRlcmF0b3JfdHJhaXRzPF9JbnB1dEl0ZXJhdG9yPjo6dmFsdWVfdHlwZT4pCiAgICAgICBf X2dsaWJjeHhfcmVxdWlyZXNfdmFsaWRfcmFuZ2UoX19maXJzdCwgX19sYXN0KTsKIAotICAg ICAgcmV0dXJuIHN0ZDo6X19maW5kX2lmKF9fZmlyc3QsIF9fbGFzdCwKLQkJCSAgICBfX2du dV9jeHg6Ol9fb3BzOjpfX3ByZWRfaXRlcihfX3ByZWQpKTsKKyAgICAgIHJldHVybiBzdGQ6 Ol9fZmluZF9pZihfX2ZpcnN0LCBfX2xhc3QsIF9HTElCQ1hYX01PVkUoX19wcmVkKSk7CiAg ICAgfQogCiAgIC8qKgpAQCAtMzk3Nyw4ICs0MDM4LDkgQEAgX0dMSUJDWFhfQkVHSU5fTkFN RVNQQUNFX0FMR08KIAkgICAgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9Gb3J3YXJkSXRl cmF0b3I+Ojp2YWx1ZV90eXBlPikKICAgICAgIF9fZ2xpYmN4eF9yZXF1aXJlc192YWxpZF9y YW5nZShfX2ZpcnN0LCBfX2xhc3QpOwogCi0gICAgICByZXR1cm4gc3RkOjpfX2FkamFjZW50 X2ZpbmQoX19maXJzdCwgX19sYXN0LAotCQkJCSAgX19nbnVfY3h4OjpfX29wczo6X19pdGVy X2VxdWFsX3RvX2l0ZXIoKSk7CisgICAgICBfX2RlY2x0eXBlKF9fZ251X2N4eDo6X19vcHM6 Ol9fZXF1YWxfdG8oX19maXJzdCkpIF9fY29tcCA9CisJX19nbnVfY3h4OjpfX29wczo6X19l cXVhbF90byhfX2ZpcnN0KTsKKyAgICAgIHJldHVybiBzdGQ6Ol9fYWRqYWNlbnRfZmluZChf X2ZpcnN0LCBfX2xhc3QsIF9fY29tcCk7CiAgICAgfQogCiAgIC8qKgpAQCAtNDAwNiw3ICs0 MDY4LDcgQEAgX0dMSUJDWFhfQkVHSU5fTkFNRVNQQUNFX0FMR08KICAgICAgIF9fZ2xpYmN4 eF9yZXF1aXJlc192YWxpZF9yYW5nZShfX2ZpcnN0LCBfX2xhc3QpOwogCiAgICAgICByZXR1 cm4gc3RkOjpfX2FkamFjZW50X2ZpbmQoX19maXJzdCwgX19sYXN0LAotCQkJX19nbnVfY3h4 OjpfX29wczo6X19pdGVyX2NvbXBfaXRlcihfX2JpbmFyeV9wcmVkKSk7CisJCQkJICBfR0xJ QkNYWF9NT1ZFKF9fYmluYXJ5X3ByZWQpKTsKICAgICB9CiAKICAgLyoqCkBAIC00MDI5LDgg KzQwOTEsOSBAQCBfR0xJQkNYWF9CRUdJTl9OQU1FU1BBQ0VfQUxHTwogCSAgICB0eXBlbmFt ZSBpdGVyYXRvcl90cmFpdHM8X0lucHV0SXRlcmF0b3I+Ojp2YWx1ZV90eXBlLCBfVHA+KQog ICAgICAgX19nbGliY3h4X3JlcXVpcmVzX3ZhbGlkX3JhbmdlKF9fZmlyc3QsIF9fbGFzdCk7 CiAKLSAgICAgIHJldHVybiBzdGQ6Ol9fY291bnRfaWYoX19maXJzdCwgX19sYXN0LAotCQkJ ICAgICBfX2dudV9jeHg6Ol9fb3BzOjpfX2l0ZXJfZXF1YWxzX3ZhbChfX3ZhbHVlKSk7Cisg ICAgICBfX2RlY2x0eXBlKF9fZ251X2N4eDo6X19vcHM6Ol9fZXF1YWxfdmFsKF9fZmlyc3Qs IF9fdmFsdWUpKSBfX2NvbXAgPQorCV9fZ251X2N4eDo6X19vcHM6Ol9fZXF1YWxfdmFsKF9f Zmlyc3QsIF9fdmFsdWUpOworICAgICAgcmV0dXJuIHN0ZDo6X19jb3VudF9pZihfX2ZpcnN0 LCBfX2xhc3QsIF9fY29tcCk7CiAgICAgfQogCiAgIC8qKgpAQCAtNDA1Myw4ICs0MTE2LDcg QEAgX0dMSUJDWFhfQkVHSU5fTkFNRVNQQUNFX0FMR08KIAkgICAgdHlwZW5hbWUgaXRlcmF0 b3JfdHJhaXRzPF9JbnB1dEl0ZXJhdG9yPjo6dmFsdWVfdHlwZT4pCiAgICAgICBfX2dsaWJj eHhfcmVxdWlyZXNfdmFsaWRfcmFuZ2UoX19maXJzdCwgX19sYXN0KTsKIAotICAgICAgcmV0 dXJuIHN0ZDo6X19jb3VudF9pZihfX2ZpcnN0LCBfX2xhc3QsCi0JCQkgICAgIF9fZ251X2N4 eDo6X19vcHM6Ol9fcHJlZF9pdGVyKF9fcHJlZCkpOworICAgICAgcmV0dXJuIHN0ZDo6X19j b3VudF9pZihfX2ZpcnN0LCBfX2xhc3QsIF9HTElCQ1hYX01PVkUoX19wcmVkKSk7CiAgICAg fQogCiAgIC8qKgpAQCAtNDA5OCw4ICs0MTYwLDkgQEAgX0dMSUJDWFhfQkVHSU5fTkFNRVNQ QUNFX0FMR08KICAgICAgIF9fZ2xpYmN4eF9yZXF1aXJlc192YWxpZF9yYW5nZShfX2ZpcnN0 MSwgX19sYXN0MSk7CiAgICAgICBfX2dsaWJjeHhfcmVxdWlyZXNfdmFsaWRfcmFuZ2UoX19m aXJzdDIsIF9fbGFzdDIpOwogCi0gICAgICByZXR1cm4gc3RkOjpfX3NlYXJjaChfX2ZpcnN0 MSwgX19sYXN0MSwgX19maXJzdDIsIF9fbGFzdDIsCi0JCQkgICBfX2dudV9jeHg6Ol9fb3Bz OjpfX2l0ZXJfZXF1YWxfdG9faXRlcigpKTsKKyAgICAgIF9fZGVjbHR5cGUoX19nbnVfY3h4 OjpfX29wczo6X19lcXVhbF90byhfX2ZpcnN0MSwgX19maXJzdDIpKSBfX2NvbXAgPQorCV9f Z251X2N4eDo6X19vcHM6Ol9fZXF1YWxfdG8oX19maXJzdDEsIF9fZmlyc3QyKTsKKyAgICAg IHJldHVybiBzdGQ6Ol9fc2VhcmNoKF9fZmlyc3QxLCBfX2xhc3QxLCBfX2ZpcnN0MiwgX19s YXN0MiwgX19jb21wKTsKICAgICB9CiAKICAgLyoqCkBAIC00MTI5LDggKzQxOTIsOSBAQCBf R0xJQkNYWF9CRUdJTl9OQU1FU1BBQ0VfQUxHTwogCSAgICB0eXBlbmFtZSBpdGVyYXRvcl90 cmFpdHM8X0ZvcndhcmRJdGVyYXRvcj46OnZhbHVlX3R5cGUsIF9UcD4pCiAgICAgICBfX2ds aWJjeHhfcmVxdWlyZXNfdmFsaWRfcmFuZ2UoX19maXJzdCwgX19sYXN0KTsKIAotICAgICAg cmV0dXJuIHN0ZDo6X19zZWFyY2hfbihfX2ZpcnN0LCBfX2xhc3QsIF9fY291bnQsCi0JCQkg ICAgIF9fZ251X2N4eDo6X19vcHM6Ol9faXRlcl9lcXVhbHNfdmFsKF9fdmFsKSk7CisgICAg ICBfX2RlY2x0eXBlKF9fZ251X2N4eDo6X19vcHM6Ol9fZXF1YWxfdmFsKF9fZmlyc3QsIF9f dmFsKSkgX19jb21wID0KKwlfX2dudV9jeHg6Ol9fb3BzOjpfX2VxdWFsX3ZhbChfX2ZpcnN0 LCBfX3ZhbCk7CisgICAgICByZXR1cm4gc3RkOjpfX3NlYXJjaF9uKF9fZmlyc3QsIF9fbGFz dCwgX19jb3VudCwgX19jb21wKTsKICAgICB9CiAKIApAQCAtNDE2NSw4ICs0MjI5LDEyIEBA IF9HTElCQ1hYX0JFR0lOX05BTUVTUEFDRV9BTEdPCiAJICAgIHR5cGVuYW1lIGl0ZXJhdG9y X3RyYWl0czxfRm9yd2FyZEl0ZXJhdG9yPjo6dmFsdWVfdHlwZSwgX1RwPikKICAgICAgIF9f Z2xpYmN4eF9yZXF1aXJlc192YWxpZF9yYW5nZShfX2ZpcnN0LCBfX2xhc3QpOwogCi0gICAg ICByZXR1cm4gc3RkOjpfX3NlYXJjaF9uKF9fZmlyc3QsIF9fbGFzdCwgX19jb3VudCwKLQkJ X19nbnVfY3h4OjpfX29wczo6X19pdGVyX2NvbXBfdmFsKF9fYmluYXJ5X3ByZWQsIF9fdmFs KSk7CisgICAgICBfX2RlY2x0eXBlKF9fZ251X2N4eDo6X19vcHM6Ol9fY29tcF92YWwKKwkJ IChfR0xJQkNYWF9NT1ZFKF9fYmluYXJ5X3ByZWQpLCBfX2ZpcnN0LCBfX3ZhbCkpIF9fdW5y eV9wcmVkID0KKwlfX2dudV9jeHg6Ol9fb3BzOjpfX2NvbXBfdmFsKF9HTElCQ1hYX01PVkUo X19iaW5hcnlfcHJlZCksCisJCQkJICAgICBfX2ZpcnN0LCBfX3ZhbCk7CisgICAgICByZXR1 cm4gc3RkOjpfX3NlYXJjaF9uCisJKF9fZmlyc3QsIF9fbGFzdCwgX19jb3VudCwgX0dMSUJD WFhfTU9WRShfX3VucnlfcHJlZCkpOwogICAgIH0KIAogI2lmIF9fY3BsdXNwbHVzID49IDIw MTcwM0wKQEAgLTQ0MjIsMTAgKzQ0OTAsMTIgQEAgX0dMSUJDWFhfQkVHSU5fTkFNRVNQQUNF X0FMR08KIAogICAgICAgaWYgKF9fZmlyc3QgPT0gX19sYXN0KQogCXJldHVybiBfX3Jlc3Vs dDsKLSAgICAgIHJldHVybiBzdGQ6Ol9fdW5pcXVlX2NvcHkoX19maXJzdCwgX19sYXN0LCBf X3Jlc3VsdCwKLQkJCQlfX2dudV9jeHg6Ol9fb3BzOjpfX2l0ZXJfZXF1YWxfdG9faXRlcigp LAotCQkJCXN0ZDo6X19pdGVyYXRvcl9jYXRlZ29yeShfX2ZpcnN0KSwKLQkJCQlzdGQ6Ol9f aXRlcmF0b3JfY2F0ZWdvcnkoX19yZXN1bHQpKTsKKworICAgICAgX19kZWNsdHlwZShfX2du dV9jeHg6Ol9fb3BzOjpfX2VxdWFsX3RvKF9fZmlyc3QpKSBfX2NvbXAgPQorCV9fZ251X2N4 eDo6X19vcHM6Ol9fZXF1YWxfdG8oX19maXJzdCk7CisgICAgICByZXR1cm4gc3RkOjpfX3Vu aXF1ZV9jb3B5CisJKF9fZmlyc3QsIF9fbGFzdCwgX19yZXN1bHQsIF9fY29tcCwKKwkgc3Rk OjpfX2l0ZXJhdG9yX2NhdGVnb3J5KF9fZmlyc3QpLCBzdGQ6Ol9faXRlcmF0b3JfY2F0ZWdv cnkoX19yZXN1bHQpKTsKICAgICB9CiAKICAgLyoqCkBAIC00NDYyLDEwICs0NTMyLDkgQEAg X0dMSUJDWFhfQkVHSU5fTkFNRVNQQUNFX0FMR08KIAogICAgICAgaWYgKF9fZmlyc3QgPT0g X19sYXN0KQogCXJldHVybiBfX3Jlc3VsdDsKLSAgICAgIHJldHVybiBzdGQ6Ol9fdW5pcXVl X2NvcHkoX19maXJzdCwgX19sYXN0LCBfX3Jlc3VsdCwKLQkJCV9fZ251X2N4eDo6X19vcHM6 Ol9faXRlcl9jb21wX2l0ZXIoX19iaW5hcnlfcHJlZCksCi0JCQkJc3RkOjpfX2l0ZXJhdG9y X2NhdGVnb3J5KF9fZmlyc3QpLAotCQkJCXN0ZDo6X19pdGVyYXRvcl9jYXRlZ29yeShfX3Jl c3VsdCkpOworICAgICAgcmV0dXJuIHN0ZDo6X191bmlxdWVfY29weQorCShfX2ZpcnN0LCBf X2xhc3QsIF9fcmVzdWx0LCBfR0xJQkNYWF9NT1ZFKF9fYmluYXJ5X3ByZWQpLAorCSBzdGQ6 Ol9faXRlcmF0b3JfY2F0ZWdvcnkoX19maXJzdCksIHN0ZDo6X19pdGVyYXRvcl9jYXRlZ29y eShfX3Jlc3VsdCkpOwogICAgIH0KIAogI2lmIF9fY3BsdXNwbHVzIDw9IDIwMTEwM0wgfHwg X0dMSUJDWFhfVVNFX0RFUFJFQ0FURUQKQEAgLTQ1NzksNyArNDY0OCw3IEBAIF9HTElCQ1hY X0JFR0lOX05BTUVTUEFDRV9BTEdPCiAJICAgIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxf Rm9yd2FyZEl0ZXJhdG9yPjo6dmFsdWVfdHlwZT4pCiAgICAgICBfX2dsaWJjeHhfcmVxdWly ZXNfdmFsaWRfcmFuZ2UoX19maXJzdCwgX19sYXN0KTsKIAotICAgICAgcmV0dXJuIHN0ZDo6 X19wYXJ0aXRpb24oX19maXJzdCwgX19sYXN0LCBfX3ByZWQsCisgICAgICByZXR1cm4gc3Rk OjpfX3BhcnRpdGlvbihfX2ZpcnN0LCBfX2xhc3QsIF9HTElCQ1hYX01PVkUoX19wcmVkKSwK IAkJCSAgICAgIHN0ZDo6X19pdGVyYXRvcl9jYXRlZ29yeShfX2ZpcnN0KSk7CiAgICAgfQog CkBAIC00NjE3LDggKzQ2ODYsOSBAQCBfR0xJQkNYWF9CRUdJTl9OQU1FU1BBQ0VfQUxHTwog ICAgICAgX19nbGliY3h4X3JlcXVpcmVzX3ZhbGlkX3JhbmdlKF9fbWlkZGxlLCBfX2xhc3Qp OwogICAgICAgX19nbGliY3h4X3JlcXVpcmVzX2lycmVmbGV4aXZlKF9fZmlyc3QsIF9fbGFz dCk7CiAKLSAgICAgIHN0ZDo6X19wYXJ0aWFsX3NvcnQoX19maXJzdCwgX19taWRkbGUsIF9f bGFzdCwKLQkJCSAgX19nbnVfY3h4OjpfX29wczo6X19pdGVyX2xlc3NfaXRlcigpKTsKKyAg ICAgIF9fZGVjbHR5cGUoX19nbnVfY3h4OjpfX29wczo6X19sZXNzKF9fZmlyc3QpKSBfX2Nv bXAgPQorCV9fZ251X2N4eDo6X19vcHM6Ol9fbGVzcyhfX2ZpcnN0KTsKKyAgICAgIHN0ZDo6 X19wYXJ0aWFsX3NvcnQoX19maXJzdCwgX19taWRkbGUsIF9fbGFzdCwgX19jb21wKTsKICAg ICB9CiAKICAgLyoqCkBAIC00NjU4LDggKzQ3MjgsNyBAQCBfR0xJQkNYWF9CRUdJTl9OQU1F U1BBQ0VfQUxHTwogICAgICAgX19nbGliY3h4X3JlcXVpcmVzX3ZhbGlkX3JhbmdlKF9fbWlk ZGxlLCBfX2xhc3QpOwogICAgICAgX19nbGliY3h4X3JlcXVpcmVzX2lycmVmbGV4aXZlX3By ZWQoX19maXJzdCwgX19sYXN0LCBfX2NvbXApOwogCi0gICAgICBzdGQ6Ol9fcGFydGlhbF9z b3J0KF9fZmlyc3QsIF9fbWlkZGxlLCBfX2xhc3QsCi0JCQkgIF9fZ251X2N4eDo6X19vcHM6 Ol9faXRlcl9jb21wX2l0ZXIoX19jb21wKSk7CisgICAgICBzdGQ6Ol9fcGFydGlhbF9zb3J0 KF9fZmlyc3QsIF9fbWlkZGxlLCBfX2xhc3QsIF9HTElCQ1hYX01PVkUoX19jb21wKSk7CiAg ICAgfQogCiAgIC8qKgpAQCAtNDY5NSw5ICs0NzY0LDEwIEBAIF9HTElCQ1hYX0JFR0lOX05B TUVTUEFDRV9BTEdPCiAgICAgICBpZiAoX19maXJzdCA9PSBfX2xhc3QgfHwgX19udGggPT0g X19sYXN0KQogCXJldHVybjsKIAotICAgICAgc3RkOjpfX2ludHJvc2VsZWN0KF9fZmlyc3Qs IF9fbnRoLCBfX2xhc3QsCi0JCQkgc3RkOjpfX2xnKF9fbGFzdCAtIF9fZmlyc3QpICogMiwK LQkJCSBfX2dudV9jeHg6Ol9fb3BzOjpfX2l0ZXJfbGVzc19pdGVyKCkpOworICAgICAgX19k ZWNsdHlwZShfX2dudV9jeHg6Ol9fb3BzOjpfX2xlc3MoX19maXJzdCkpIF9fY29tcCA9CisJ X19nbnVfY3h4OjpfX29wczo6X19sZXNzKF9fZmlyc3QpOworICAgICAgc3RkOjpfX2ludHJv c2VsZWN0CisJKF9fZmlyc3QsIF9fbnRoLCBfX2xhc3QsIHN0ZDo6X19sZyhfX2xhc3QgLSBf X2ZpcnN0KSAqIDIsIF9fY29tcCk7CiAgICAgfQogCiAgIC8qKgpAQCAtNDczNiw5ICs0ODA2 LDkgQEAgX0dMSUJDWFhfQkVHSU5fTkFNRVNQQUNFX0FMR08KICAgICAgIGlmIChfX2ZpcnN0 ID09IF9fbGFzdCB8fCBfX250aCA9PSBfX2xhc3QpCiAJcmV0dXJuOwogCi0gICAgICBzdGQ6 Ol9faW50cm9zZWxlY3QoX19maXJzdCwgX19udGgsIF9fbGFzdCwKLQkJCSBzdGQ6Ol9fbGco X19sYXN0IC0gX19maXJzdCkgKiAyLAotCQkJIF9fZ251X2N4eDo6X19vcHM6Ol9faXRlcl9j b21wX2l0ZXIoX19jb21wKSk7CisgICAgICBzdGQ6Ol9faW50cm9zZWxlY3QKKwkoX19maXJz dCwgX19udGgsIF9fbGFzdCwgc3RkOjpfX2xnKF9fbGFzdCAtIF9fZmlyc3QpICogMiwKKwkg X0dMSUJDWFhfTU9WRShfX2NvbXApKTsKICAgICB9CiAKICAgLyoqCkBAIC00NzY4LDcgKzQ4 MzgsOSBAQCBfR0xJQkNYWF9CRUdJTl9OQU1FU1BBQ0VfQUxHTwogICAgICAgX19nbGliY3h4 X3JlcXVpcmVzX3ZhbGlkX3JhbmdlKF9fZmlyc3QsIF9fbGFzdCk7CiAgICAgICBfX2dsaWJj eHhfcmVxdWlyZXNfaXJyZWZsZXhpdmUoX19maXJzdCwgX19sYXN0KTsKIAotICAgICAgc3Rk OjpfX3NvcnQoX19maXJzdCwgX19sYXN0LCBfX2dudV9jeHg6Ol9fb3BzOjpfX2l0ZXJfbGVz c19pdGVyKCkpOworICAgICAgX19kZWNsdHlwZShfX2dudV9jeHg6Ol9fb3BzOjpfX2xlc3Mo X19maXJzdCkpIF9fY29tcCA9CisJX19nbnVfY3h4OjpfX29wczo6X19sZXNzKF9fZmlyc3Qp OworICAgICAgc3RkOjpfX3NvcnQoX19maXJzdCwgX19sYXN0LCBfX2NvbXApOwogICAgIH0K IAogICAvKioKQEAgLTQ4MDEsNyArNDg3Myw3IEBAIF9HTElCQ1hYX0JFR0lOX05BTUVTUEFD RV9BTEdPCiAgICAgICBfX2dsaWJjeHhfcmVxdWlyZXNfdmFsaWRfcmFuZ2UoX19maXJzdCwg X19sYXN0KTsKICAgICAgIF9fZ2xpYmN4eF9yZXF1aXJlc19pcnJlZmxleGl2ZV9wcmVkKF9f Zmlyc3QsIF9fbGFzdCwgX19jb21wKTsKIAotICAgICAgc3RkOjpfX3NvcnQoX19maXJzdCwg X19sYXN0LCBfX2dudV9jeHg6Ol9fb3BzOjpfX2l0ZXJfY29tcF9pdGVyKF9fY29tcCkpOwor ICAgICAgc3RkOjpfX3NvcnQoX19maXJzdCwgX19sYXN0LCBfR0xJQkNYWF9NT1ZFKF9fY29t cCkpOwogICAgIH0KIAogICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSW5wdXRJdGVyYXRvcjEsIHR5 cGVuYW1lIF9JbnB1dEl0ZXJhdG9yMiwKQEAgLTQ4MTQsNyArNDg4Niw3IEBAIF9HTElCQ1hY X0JFR0lOX05BTUVTUEFDRV9BTEdPCiAgICAgewogICAgICAgd2hpbGUgKF9fZmlyc3QxICE9 IF9fbGFzdDEgJiYgX19maXJzdDIgIT0gX19sYXN0MikKIAl7Ci0JICBpZiAoX19jb21wKF9f Zmlyc3QyLCBfX2ZpcnN0MSkpCisJICBpZiAoX19jb21wKCpfX2ZpcnN0MiwgKl9fZmlyc3Qx KSkKIAkgICAgewogCSAgICAgICpfX3Jlc3VsdCA9ICpfX2ZpcnN0MjsKIAkgICAgICArK19f Zmlyc3QyOwpAQCAtNDg3Miw5ICs0OTQ0LDkgQEAgX0dMSUJDWFhfQkVHSU5fTkFNRVNQQUNF X0FMR08KICAgICAgIF9fZ2xpYmN4eF9yZXF1aXJlc19pcnJlZmxleGl2ZTIoX19maXJzdDEs IF9fbGFzdDEpOwogICAgICAgX19nbGliY3h4X3JlcXVpcmVzX2lycmVmbGV4aXZlMihfX2Zp cnN0MiwgX19sYXN0Mik7CiAKLSAgICAgIHJldHVybiBfR0xJQkNYWF9TVERfQTo6X19tZXJn ZShfX2ZpcnN0MSwgX19sYXN0MSwKLQkJCQkgICAgIF9fZmlyc3QyLCBfX2xhc3QyLCBfX3Jl c3VsdCwKLQkJCQkgICAgIF9fZ251X2N4eDo6X19vcHM6Ol9faXRlcl9sZXNzX2l0ZXIoKSk7 CisgICAgICByZXR1cm4gX0dMSUJDWFhfU1REX0E6Ol9fbWVyZ2UKKwkoX19maXJzdDEsIF9f bGFzdDEsIF9fZmlyc3QyLCBfX2xhc3QyLCBfX3Jlc3VsdCwKKwkgX19nbnVfY3h4OjpfX29w czo6X19sZXNzKF9fZmlyc3QxLCBfX2ZpcnN0MikpOwogICAgIH0KIAogICAvKioKQEAgLTQ5 MjUsMTMgKzQ5OTcsMTMgQEAgX0dMSUJDWFhfQkVHSU5fTkFNRVNQQUNFX0FMR08KIAogICAg ICAgcmV0dXJuIF9HTElCQ1hYX1NURF9BOjpfX21lcmdlKF9fZmlyc3QxLCBfX2xhc3QxLAog CQkJCSAgICAgX19maXJzdDIsIF9fbGFzdDIsIF9fcmVzdWx0LAotCQkJCV9fZ251X2N4eDo6 X19vcHM6Ol9faXRlcl9jb21wX2l0ZXIoX19jb21wKSk7CisJCQkJICAgICBfR0xJQkNYWF9N T1ZFKF9fY29tcCkpOwogICAgIH0KIAogICB0ZW1wbGF0ZTx0eXBlbmFtZSBfUmFuZG9tQWNj ZXNzSXRlcmF0b3IsIHR5cGVuYW1lIF9Db21wYXJlPgogICAgIGlubGluZSB2b2lkCiAgICAg X19zdGFibGVfc29ydChfUmFuZG9tQWNjZXNzSXRlcmF0b3IgX19maXJzdCwgX1JhbmRvbUFj Y2Vzc0l0ZXJhdG9yIF9fbGFzdCwKLQkJICBfQ29tcGFyZSBfX2NvbXApCisJCSAgX0dMSUJD WFhfRldEUkVGKF9Db21wYXJlKSBfX2NvbXApCiAgICAgewogICAgICAgdHlwZWRlZiB0eXBl bmFtZSBpdGVyYXRvcl90cmFpdHM8X1JhbmRvbUFjY2Vzc0l0ZXJhdG9yPjo6dmFsdWVfdHlw ZQogCV9WYWx1ZVR5cGU7CkBAIC00OTQ4LDE2ICs1MDIwLDE5IEBAIF9HTElCQ1hYX0JFR0lO X05BTUVTUEFDRV9BTEdPCiAgICAgICBfVG1wQnVmIF9fYnVmKF9fZmlyc3QsIChfX2xhc3Qg LSBfX2ZpcnN0ICsgMSkgLyAyKTsKIAogICAgICAgaWYgKF9fYnVpbHRpbl9leHBlY3QoX19i dWYucmVxdWVzdGVkX3NpemUoKSA9PSBfX2J1Zi5zaXplKCksIHRydWUpKQotCXN0ZDo6X19z dGFibGVfc29ydF9hZGFwdGl2ZShfX2ZpcnN0LAotCQkJCSAgICBfX2ZpcnN0ICsgX0Rpc3Rh bmNlVHlwZShfX2J1Zi5zaXplKCkpLAotCQkJCSAgICBfX2xhc3QsIF9fYnVmLmJlZ2luKCks IF9fY29tcCk7CisJc3RkOjpfX3N0YWJsZV9zb3J0X2FkYXB0aXZlCisJICAoX19maXJzdCwg X19maXJzdCArIF9EaXN0YW5jZVR5cGUoX19idWYuc2l6ZSgpKSwgX19sYXN0LAorCSAgIF9f YnVmLmJlZ2luKCksIF9HTElCQ1hYX0ZPUldBUkQoX0NvbXBhcmUsIF9fY29tcCkpOwogICAg ICAgZWxzZSBpZiAoX19idWlsdGluX2V4cGVjdChfX2J1Zi5iZWdpbigpID09IDAsIGZhbHNl KSkKLQlzdGQ6Ol9faW5wbGFjZV9zdGFibGVfc29ydChfX2ZpcnN0LCBfX2xhc3QsIF9fY29t cCk7CisJc3RkOjpfX2lucGxhY2Vfc3RhYmxlX3NvcnQKKwkgIChfX2ZpcnN0LCBfX2xhc3Qs IF9HTElCQ1hYX0ZPUldBUkQoX0NvbXBhcmUsIF9fY29tcCkpOwogICAgICAgZWxzZQotCXN0 ZDo6X19zdGFibGVfc29ydF9hZGFwdGl2ZV9yZXNpemUoX19maXJzdCwgX19sYXN0LCBfX2J1 Zi5iZWdpbigpLAotCQkJCQkgICBfRGlzdGFuY2VUeXBlKF9fYnVmLnNpemUoKSksIF9fY29t cCk7CisJc3RkOjpfX3N0YWJsZV9zb3J0X2FkYXB0aXZlX3Jlc2l6ZQorCSAgKF9fZmlyc3Qs IF9fbGFzdCwgX19idWYuYmVnaW4oKSwgX0Rpc3RhbmNlVHlwZShfX2J1Zi5zaXplKCkpLAor CSAgIF9HTElCQ1hYX0ZPUldBUkQoX0NvbXBhcmUsIF9fY29tcCkpOwogI2Vsc2UKLSAgICAg IHN0ZDo6X19pbnBsYWNlX3N0YWJsZV9zb3J0KF9fZmlyc3QsIF9fbGFzdCwgX19jb21wKTsK KyAgICAgIHN0ZDo6X19pbnBsYWNlX3N0YWJsZV9zb3J0CisJKF9fZmlyc3QsIF9fbGFzdCwg X0dMSUJDWFhfRk9SV0FSRChfQ29tcGFyZSwgX19jb21wKSk7CiAjZW5kaWYKICAgICB9CiAK QEAgLTQ5OTAsOCArNTA2NSw5IEBAIF9HTElCQ1hYX0JFR0lOX05BTUVTUEFDRV9BTEdPCiAg ICAgICBfX2dsaWJjeHhfcmVxdWlyZXNfdmFsaWRfcmFuZ2UoX19maXJzdCwgX19sYXN0KTsK ICAgICAgIF9fZ2xpYmN4eF9yZXF1aXJlc19pcnJlZmxleGl2ZShfX2ZpcnN0LCBfX2xhc3Qp OwogCi0gICAgICBfR0xJQkNYWF9TVERfQTo6X19zdGFibGVfc29ydChfX2ZpcnN0LCBfX2xh c3QsCi0JCQkJICAgIF9fZ251X2N4eDo6X19vcHM6Ol9faXRlcl9sZXNzX2l0ZXIoKSk7Cisg ICAgICBfX2RlY2x0eXBlKF9fZ251X2N4eDo6X19vcHM6Ol9fbGVzcyhfX2ZpcnN0KSkgX19j b21wID0KKwlfX2dudV9jeHg6Ol9fb3BzOjpfX2xlc3MoX19maXJzdCk7CisgICAgICBfR0xJ QkNYWF9TVERfQTo6X19zdGFibGVfc29ydChfX2ZpcnN0LCBfX2xhc3QsIF9fY29tcCk7CiAg ICAgfQogCiAgIC8qKgpAQCAtNTAyNiw4ICs1MTAyLDcgQEAgX0dMSUJDWFhfQkVHSU5fTkFN RVNQQUNFX0FMR08KICAgICAgIF9fZ2xpYmN4eF9yZXF1aXJlc192YWxpZF9yYW5nZShfX2Zp cnN0LCBfX2xhc3QpOwogICAgICAgX19nbGliY3h4X3JlcXVpcmVzX2lycmVmbGV4aXZlX3By ZWQoX19maXJzdCwgX19sYXN0LCBfX2NvbXApOwogCi0gICAgICBfR0xJQkNYWF9TVERfQTo6 X19zdGFibGVfc29ydChfX2ZpcnN0LCBfX2xhc3QsCi0JCQkJICAgIF9fZ251X2N4eDo6X19v cHM6Ol9faXRlcl9jb21wX2l0ZXIoX19jb21wKSk7CisgICAgICBfR0xJQkNYWF9TVERfQTo6 X19zdGFibGVfc29ydChfX2ZpcnN0LCBfX2xhc3QsIF9HTElCQ1hYX01PVkUoX19jb21wKSk7 CiAgICAgfQogCiAgIHRlbXBsYXRlPHR5cGVuYW1lIF9JbnB1dEl0ZXJhdG9yMSwgdHlwZW5h bWUgX0lucHV0SXRlcmF0b3IyLApAQCAtNTAzNywxNiArNTExMiwxNiBAQCBfR0xJQkNYWF9C RUdJTl9OQU1FU1BBQ0VfQUxHTwogICAgIF9PdXRwdXRJdGVyYXRvcgogICAgIF9fc2V0X3Vu aW9uKF9JbnB1dEl0ZXJhdG9yMSBfX2ZpcnN0MSwgX0lucHV0SXRlcmF0b3IxIF9fbGFzdDEs CiAJCV9JbnB1dEl0ZXJhdG9yMiBfX2ZpcnN0MiwgX0lucHV0SXRlcmF0b3IyIF9fbGFzdDIs Ci0JCV9PdXRwdXRJdGVyYXRvciBfX3Jlc3VsdCwgX0NvbXBhcmUgX19jb21wKQorCQlfT3V0 cHV0SXRlcmF0b3IgX19yZXN1bHQsIF9HTElCQ1hYX0ZXRFJFRihfQ29tcGFyZSkgX19jb21w KQogICAgIHsKICAgICAgIHdoaWxlIChfX2ZpcnN0MSAhPSBfX2xhc3QxICYmIF9fZmlyc3Qy ICE9IF9fbGFzdDIpCiAJewotCSAgaWYgKF9fY29tcChfX2ZpcnN0MSwgX19maXJzdDIpKQor CSAgaWYgKF9fY29tcCgqX19maXJzdDEsICpfX2ZpcnN0MikpCiAJICAgIHsKIAkgICAgICAq X19yZXN1bHQgPSAqX19maXJzdDE7CiAJICAgICAgKytfX2ZpcnN0MTsKIAkgICAgfQotCSAg ZWxzZSBpZiAoX19jb21wKF9fZmlyc3QyLCBfX2ZpcnN0MSkpCisJICBlbHNlIGlmIChfX2Nv bXAoKl9fZmlyc3QyLCAqX19maXJzdDEpKQogCSAgICB7CiAJICAgICAgKl9fcmVzdWx0ID0g Kl9fZmlyc3QyOwogCSAgICAgICsrX19maXJzdDI7CkBAIC01MTA4LDkgKzUxODMsMTAgQEAg X0dMSUJDWFhfQkVHSU5fTkFNRVNQQUNFX0FMR08KICAgICAgIF9fZ2xpYmN4eF9yZXF1aXJl c19pcnJlZmxleGl2ZTIoX19maXJzdDEsIF9fbGFzdDEpOwogICAgICAgX19nbGliY3h4X3Jl cXVpcmVzX2lycmVmbGV4aXZlMihfX2ZpcnN0MiwgX19sYXN0Mik7CiAKLSAgICAgIHJldHVy biBfR0xJQkNYWF9TVERfQTo6X19zZXRfdW5pb24oX19maXJzdDEsIF9fbGFzdDEsCi0JCQkJ X19maXJzdDIsIF9fbGFzdDIsIF9fcmVzdWx0LAotCQkJCV9fZ251X2N4eDo6X19vcHM6Ol9f aXRlcl9sZXNzX2l0ZXIoKSk7CisgICAgICBfX2RlY2x0eXBlKF9fZ251X2N4eDo6X19vcHM6 Ol9fbGVzcyhfX2ZpcnN0MSwgX19maXJzdDIpKSBfX2NvbXAgPQorCV9fZ251X2N4eDo6X19v cHM6Ol9fbGVzcyhfX2ZpcnN0MSwgX19maXJzdDIpOworICAgICAgcmV0dXJuIF9HTElCQ1hY X1NURF9BOjpfX3NldF91bmlvbgorCShfX2ZpcnN0MSwgX19sYXN0MSwgX19maXJzdDIsIF9f bGFzdDIsIF9fcmVzdWx0LCBfX2NvbXApOwogICAgIH0KIAogICAvKioKQEAgLTUxNTksOSAr NTIzNSw4IEBAIF9HTElCQ1hYX0JFR0lOX05BTUVTUEFDRV9BTEdPCiAgICAgICBfX2dsaWJj eHhfcmVxdWlyZXNfaXJyZWZsZXhpdmVfcHJlZDIoX19maXJzdDEsIF9fbGFzdDEsIF9fY29t cCk7CiAgICAgICBfX2dsaWJjeHhfcmVxdWlyZXNfaXJyZWZsZXhpdmVfcHJlZDIoX19maXJz dDIsIF9fbGFzdDIsIF9fY29tcCk7CiAKLSAgICAgIHJldHVybiBfR0xJQkNYWF9TVERfQTo6 X19zZXRfdW5pb24oX19maXJzdDEsIF9fbGFzdDEsCi0JCQkJX19maXJzdDIsIF9fbGFzdDIs IF9fcmVzdWx0LAotCQkJCV9fZ251X2N4eDo6X19vcHM6Ol9faXRlcl9jb21wX2l0ZXIoX19j b21wKSk7CisgICAgICByZXR1cm4gX0dMSUJDWFhfU1REX0E6Ol9fc2V0X3VuaW9uCisJKF9f Zmlyc3QxLCBfX2xhc3QxLCBfX2ZpcnN0MiwgX19sYXN0MiwgX19yZXN1bHQsIF9HTElCQ1hY X01PVkUoX19jb21wKSk7CiAgICAgfQogCiAgIHRlbXBsYXRlPHR5cGVuYW1lIF9JbnB1dEl0 ZXJhdG9yMSwgdHlwZW5hbWUgX0lucHV0SXRlcmF0b3IyLApAQCAtNTE3MSwxMiArNTI0Niwx MyBAQCBfR0xJQkNYWF9CRUdJTl9OQU1FU1BBQ0VfQUxHTwogICAgIF9PdXRwdXRJdGVyYXRv cgogICAgIF9fc2V0X2ludGVyc2VjdGlvbihfSW5wdXRJdGVyYXRvcjEgX19maXJzdDEsIF9J bnB1dEl0ZXJhdG9yMSBfX2xhc3QxLAogCQkgICAgICAgX0lucHV0SXRlcmF0b3IyIF9fZmly c3QyLCBfSW5wdXRJdGVyYXRvcjIgX19sYXN0MiwKLQkJICAgICAgIF9PdXRwdXRJdGVyYXRv ciBfX3Jlc3VsdCwgX0NvbXBhcmUgX19jb21wKQorCQkgICAgICAgX091dHB1dEl0ZXJhdG9y IF9fcmVzdWx0LAorCQkgICAgICAgX0dMSUJDWFhfRldEUkVGKF9Db21wYXJlKSBfX2NvbXAp CiAgICAgewogICAgICAgd2hpbGUgKF9fZmlyc3QxICE9IF9fbGFzdDEgJiYgX19maXJzdDIg IT0gX19sYXN0MikKLQlpZiAoX19jb21wKF9fZmlyc3QxLCBfX2ZpcnN0MikpCisJaWYgKF9f Y29tcCgqX19maXJzdDEsICpfX2ZpcnN0MikpCiAJICArK19fZmlyc3QxOwotCWVsc2UgaWYg KF9fY29tcChfX2ZpcnN0MiwgX19maXJzdDEpKQorCWVsc2UgaWYgKF9fY29tcCgqX19maXJz dDIsICpfX2ZpcnN0MSkpCiAJICArK19fZmlyc3QyOwogCWVsc2UKIAkgIHsKQEAgLTUyMzAs OSArNTMwNiwxMCBAQCBfR0xJQkNYWF9CRUdJTl9OQU1FU1BBQ0VfQUxHTwogICAgICAgX19n bGliY3h4X3JlcXVpcmVzX2lycmVmbGV4aXZlMihfX2ZpcnN0MSwgX19sYXN0MSk7CiAgICAg ICBfX2dsaWJjeHhfcmVxdWlyZXNfaXJyZWZsZXhpdmUyKF9fZmlyc3QyLCBfX2xhc3QyKTsK IAotICAgICAgcmV0dXJuIF9HTElCQ1hYX1NURF9BOjpfX3NldF9pbnRlcnNlY3Rpb24oX19m aXJzdDEsIF9fbGFzdDEsCi0JCQkJICAgICBfX2ZpcnN0MiwgX19sYXN0MiwgX19yZXN1bHQs Ci0JCQkJICAgICBfX2dudV9jeHg6Ol9fb3BzOjpfX2l0ZXJfbGVzc19pdGVyKCkpOworICAg ICAgX19kZWNsdHlwZShfX2dudV9jeHg6Ol9fb3BzOjpfX2xlc3MoX19maXJzdDEsIF9fZmly c3QyKSkgX19jb21wID0KKwlfX2dudV9jeHg6Ol9fb3BzOjpfX2xlc3MoX19maXJzdDEsIF9f Zmlyc3QyKTsKKyAgICAgIHJldHVybiBfR0xJQkNYWF9TVERfQTo6X19zZXRfaW50ZXJzZWN0 aW9uCisJKF9fZmlyc3QxLCBfX2xhc3QxLCBfX2ZpcnN0MiwgX19sYXN0MiwgX19yZXN1bHQs IF9fY29tcCk7CiAgICAgfQogCiAgIC8qKgpAQCAtNTI4MCw5ICs1MzU3LDggQEAgX0dMSUJD WFhfQkVHSU5fTkFNRVNQQUNFX0FMR08KICAgICAgIF9fZ2xpYmN4eF9yZXF1aXJlc19pcnJl ZmxleGl2ZV9wcmVkMihfX2ZpcnN0MSwgX19sYXN0MSwgX19jb21wKTsKICAgICAgIF9fZ2xp YmN4eF9yZXF1aXJlc19pcnJlZmxleGl2ZV9wcmVkMihfX2ZpcnN0MiwgX19sYXN0MiwgX19j b21wKTsKIAotICAgICAgcmV0dXJuIF9HTElCQ1hYX1NURF9BOjpfX3NldF9pbnRlcnNlY3Rp b24oX19maXJzdDEsIF9fbGFzdDEsCi0JCQkJX19maXJzdDIsIF9fbGFzdDIsIF9fcmVzdWx0 LAotCQkJCV9fZ251X2N4eDo6X19vcHM6Ol9faXRlcl9jb21wX2l0ZXIoX19jb21wKSk7Cisg ICAgICByZXR1cm4gX0dMSUJDWFhfU1REX0E6Ol9fc2V0X2ludGVyc2VjdGlvbgorCShfX2Zp cnN0MSwgX19sYXN0MSwgX19maXJzdDIsIF9fbGFzdDIsIF9fcmVzdWx0LCBfR0xJQkNYWF9N T1ZFKF9fY29tcCkpOwogICAgIH0KIAogICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSW5wdXRJdGVy YXRvcjEsIHR5cGVuYW1lIF9JbnB1dEl0ZXJhdG9yMiwKQEAgLTUyOTIsMTYgKzUzNjgsMTYg QEAgX0dMSUJDWFhfQkVHSU5fTkFNRVNQQUNFX0FMR08KICAgICBfT3V0cHV0SXRlcmF0b3IK ICAgICBfX3NldF9kaWZmZXJlbmNlKF9JbnB1dEl0ZXJhdG9yMSBfX2ZpcnN0MSwgX0lucHV0 SXRlcmF0b3IxIF9fbGFzdDEsCiAJCSAgICAgX0lucHV0SXRlcmF0b3IyIF9fZmlyc3QyLCBf SW5wdXRJdGVyYXRvcjIgX19sYXN0MiwKLQkJICAgICBfT3V0cHV0SXRlcmF0b3IgX19yZXN1 bHQsIF9Db21wYXJlIF9fY29tcCkKKwkJICAgICBfT3V0cHV0SXRlcmF0b3IgX19yZXN1bHQs IF9HTElCQ1hYX0ZXRFJFRihfQ29tcGFyZSkgX19jb21wKQogICAgIHsKICAgICAgIHdoaWxl IChfX2ZpcnN0MSAhPSBfX2xhc3QxICYmIF9fZmlyc3QyICE9IF9fbGFzdDIpCi0JaWYgKF9f Y29tcChfX2ZpcnN0MSwgX19maXJzdDIpKQorCWlmIChfX2NvbXAoKl9fZmlyc3QxLCAqX19m aXJzdDIpKQogCSAgewogCSAgICAqX19yZXN1bHQgPSAqX19maXJzdDE7CiAJICAgICsrX19m aXJzdDE7CiAJICAgICsrX19yZXN1bHQ7CiAJICB9Ci0JZWxzZSBpZiAoX19jb21wKF9fZmly c3QyLCBfX2ZpcnN0MSkpCisJZWxzZSBpZiAoX19jb21wKCpfX2ZpcnN0MiwgKl9fZmlyc3Qx KSkKIAkgICsrX19maXJzdDI7CiAJZWxzZQogCSAgewpAQCAtNTM1NSw5ICs1NDMxLDEwIEBA IF9HTElCQ1hYX0JFR0lOX05BTUVTUEFDRV9BTEdPCiAgICAgICBfX2dsaWJjeHhfcmVxdWly ZXNfaXJyZWZsZXhpdmUyKF9fZmlyc3QxLCBfX2xhc3QxKTsKICAgICAgIF9fZ2xpYmN4eF9y ZXF1aXJlc19pcnJlZmxleGl2ZTIoX19maXJzdDIsIF9fbGFzdDIpOwogCi0gICAgICByZXR1 cm4gX0dMSUJDWFhfU1REX0E6Ol9fc2V0X2RpZmZlcmVuY2UoX19maXJzdDEsIF9fbGFzdDEs Ci0JCQkJICAgX19maXJzdDIsIF9fbGFzdDIsIF9fcmVzdWx0LAotCQkJCSAgIF9fZ251X2N4 eDo6X19vcHM6Ol9faXRlcl9sZXNzX2l0ZXIoKSk7CisgICAgICBfX2RlY2x0eXBlKF9fZ251 X2N4eDo6X19vcHM6Ol9fbGVzcyhfX2ZpcnN0MSwgX19maXJzdDIpKSBfX2NvbXAgPQorCV9f Z251X2N4eDo6X19vcHM6Ol9fbGVzcyhfX2ZpcnN0MSwgX19maXJzdDIpOworICAgICAgcmV0 dXJuIF9HTElCQ1hYX1NURF9BOjpfX3NldF9kaWZmZXJlbmNlCisJKF9fZmlyc3QxLCBfX2xh c3QxLCBfX2ZpcnN0MiwgX19sYXN0MiwgX19yZXN1bHQsIF9fY29tcCk7CiAgICAgfQogCiAg IC8qKgpAQCAtNTQwNyw5ICs1NDg0LDggQEAgX0dMSUJDWFhfQkVHSU5fTkFNRVNQQUNFX0FM R08KICAgICAgIF9fZ2xpYmN4eF9yZXF1aXJlc19pcnJlZmxleGl2ZV9wcmVkMihfX2ZpcnN0 MSwgX19sYXN0MSwgX19jb21wKTsKICAgICAgIF9fZ2xpYmN4eF9yZXF1aXJlc19pcnJlZmxl eGl2ZV9wcmVkMihfX2ZpcnN0MiwgX19sYXN0MiwgX19jb21wKTsKIAotICAgICAgcmV0dXJu IF9HTElCQ1hYX1NURF9BOjpfX3NldF9kaWZmZXJlbmNlKF9fZmlyc3QxLCBfX2xhc3QxLAot CQkJCSAgIF9fZmlyc3QyLCBfX2xhc3QyLCBfX3Jlc3VsdCwKLQkJCQkgICBfX2dudV9jeHg6 Ol9fb3BzOjpfX2l0ZXJfY29tcF9pdGVyKF9fY29tcCkpOworICAgICAgcmV0dXJuIF9HTElC Q1hYX1NURF9BOjpfX3NldF9kaWZmZXJlbmNlCisJKF9fZmlyc3QxLCBfX2xhc3QxLCBfX2Zp cnN0MiwgX19sYXN0MiwgX19yZXN1bHQsIF9HTElCQ1hYX01PVkUoX19jb21wKSk7CiAgICAg fQogCiAgIHRlbXBsYXRlPHR5cGVuYW1lIF9JbnB1dEl0ZXJhdG9yMSwgdHlwZW5hbWUgX0lu cHV0SXRlcmF0b3IyLApAQCAtNTQyMiwxNiArNTQ5OCwxNiBAQCBfR0xJQkNYWF9CRUdJTl9O QU1FU1BBQ0VfQUxHTwogCQkJICAgICAgIF9JbnB1dEl0ZXJhdG9yMiBfX2ZpcnN0MiwKIAkJ CSAgICAgICBfSW5wdXRJdGVyYXRvcjIgX19sYXN0MiwKIAkJCSAgICAgICBfT3V0cHV0SXRl cmF0b3IgX19yZXN1bHQsCi0JCQkgICAgICAgX0NvbXBhcmUgX19jb21wKQorCQkJICAgICAg IF9HTElCQ1hYX0ZXRFJFRihfQ29tcGFyZSkgX19jb21wKQogICAgIHsKICAgICAgIHdoaWxl IChfX2ZpcnN0MSAhPSBfX2xhc3QxICYmIF9fZmlyc3QyICE9IF9fbGFzdDIpCi0JaWYgKF9f Y29tcChfX2ZpcnN0MSwgX19maXJzdDIpKQorCWlmIChfX2NvbXAoKl9fZmlyc3QxLCAqX19m aXJzdDIpKQogCSAgewogCSAgICAqX19yZXN1bHQgPSAqX19maXJzdDE7CiAJICAgICsrX19m aXJzdDE7CiAJICAgICsrX19yZXN1bHQ7CiAJICB9Ci0JZWxzZSBpZiAoX19jb21wKF9fZmly c3QyLCBfX2ZpcnN0MSkpCisJZWxzZSBpZiAoX19jb21wKCpfX2ZpcnN0MiwgKl9fZmlyc3Qx KSkKIAkgIHsKIAkgICAgKl9fcmVzdWx0ID0gKl9fZmlyc3QyOwogCSAgICArK19fZmlyc3Qy OwpAQCAtNTQ5MCw5ICs1NTY2LDEwIEBAIF9HTElCQ1hYX0JFR0lOX05BTUVTUEFDRV9BTEdP CiAgICAgICBfX2dsaWJjeHhfcmVxdWlyZXNfaXJyZWZsZXhpdmUyKF9fZmlyc3QxLCBfX2xh c3QxKTsKICAgICAgIF9fZ2xpYmN4eF9yZXF1aXJlc19pcnJlZmxleGl2ZTIoX19maXJzdDIs IF9fbGFzdDIpOwogCi0gICAgICByZXR1cm4gX0dMSUJDWFhfU1REX0E6Ol9fc2V0X3N5bW1l dHJpY19kaWZmZXJlbmNlKF9fZmlyc3QxLCBfX2xhc3QxLAotCQkJCQlfX2ZpcnN0MiwgX19s YXN0MiwgX19yZXN1bHQsCi0JCQkJCV9fZ251X2N4eDo6X19vcHM6Ol9faXRlcl9sZXNzX2l0 ZXIoKSk7CisgICAgICBfX2RlY2x0eXBlKF9fZ251X2N4eDo6X19vcHM6Ol9fbGVzcyhfX2Zp cnN0MSwgX19maXJzdDIpKSBfX2NvbXAgPQorCV9fZ251X2N4eDo6X19vcHM6Ol9fbGVzcyhf X2ZpcnN0MSwgX19maXJzdDIpOworICAgICAgcmV0dXJuIF9HTElCQ1hYX1NURF9BOjpfX3Nl dF9zeW1tZXRyaWNfZGlmZmVyZW5jZQorCShfX2ZpcnN0MSwgX19sYXN0MSwgX19maXJzdDIs IF9fbGFzdDIsIF9fcmVzdWx0LCBfX2NvbXApOwogICAgIH0KIAogICAvKioKQEAgLTU1NDMs MjIgKzU2MjAsMjEgQEAgX0dMSUJDWFhfQkVHSU5fTkFNRVNQQUNFX0FMR08KICAgICAgIF9f Z2xpYmN4eF9yZXF1aXJlc19pcnJlZmxleGl2ZV9wcmVkMihfX2ZpcnN0MSwgX19sYXN0MSwg X19jb21wKTsKICAgICAgIF9fZ2xpYmN4eF9yZXF1aXJlc19pcnJlZmxleGl2ZV9wcmVkMihf X2ZpcnN0MiwgX19sYXN0MiwgX19jb21wKTsKIAotICAgICAgcmV0dXJuIF9HTElCQ1hYX1NU RF9BOjpfX3NldF9zeW1tZXRyaWNfZGlmZmVyZW5jZShfX2ZpcnN0MSwgX19sYXN0MSwKLQkJ CQlfX2ZpcnN0MiwgX19sYXN0MiwgX19yZXN1bHQsCi0JCQkJX19nbnVfY3h4OjpfX29wczo6 X19pdGVyX2NvbXBfaXRlcihfX2NvbXApKTsKKyAgICAgIHJldHVybiBfR0xJQkNYWF9TVERf QTo6X19zZXRfc3ltbWV0cmljX2RpZmZlcmVuY2UKKwkoX19maXJzdDEsIF9fbGFzdDEsIF9f Zmlyc3QyLCBfX2xhc3QyLCBfX3Jlc3VsdCwgX0dMSUJDWFhfTU9WRShfX2NvbXApKTsKICAg ICB9CiAKICAgdGVtcGxhdGU8dHlwZW5hbWUgX0ZvcndhcmRJdGVyYXRvciwgdHlwZW5hbWUg X0NvbXBhcmU+CiAgICAgX0dMSUJDWFgxNF9DT05TVEVYUFIKICAgICBfRm9yd2FyZEl0ZXJh dG9yCiAgICAgX19taW5fZWxlbWVudChfRm9yd2FyZEl0ZXJhdG9yIF9fZmlyc3QsIF9Gb3J3 YXJkSXRlcmF0b3IgX19sYXN0LAotCQkgIF9Db21wYXJlIF9fY29tcCkKKwkJICBfR0xJQkNY WF9GV0RSRUYoX0NvbXBhcmUpIF9fY29tcCkKICAgICB7CiAgICAgICBpZiAoX19maXJzdCA9 PSBfX2xhc3QpCiAJcmV0dXJuIF9fZmlyc3Q7CiAgICAgICBfRm9yd2FyZEl0ZXJhdG9yIF9f cmVzdWx0ID0gX19maXJzdDsKICAgICAgIHdoaWxlICgrK19fZmlyc3QgIT0gX19sYXN0KQot CWlmIChfX2NvbXAoX19maXJzdCwgX19yZXN1bHQpKQorCWlmIChfX2NvbXAoKl9fZmlyc3Qs ICpfX3Jlc3VsdCkpCiAJICBfX3Jlc3VsdCA9IF9fZmlyc3Q7CiAgICAgICByZXR1cm4gX19y ZXN1bHQ7CiAgICAgfQpAQCAtNTU4Miw4ICs1NjU4LDkgQEAgX0dMSUJDWFhfQkVHSU5fTkFN RVNQQUNFX0FMR08KICAgICAgIF9fZ2xpYmN4eF9yZXF1aXJlc192YWxpZF9yYW5nZShfX2Zp cnN0LCBfX2xhc3QpOwogICAgICAgX19nbGliY3h4X3JlcXVpcmVzX2lycmVmbGV4aXZlKF9f Zmlyc3QsIF9fbGFzdCk7CiAKLSAgICAgIHJldHVybiBfR0xJQkNYWF9TVERfQTo6X19taW5f ZWxlbWVudChfX2ZpcnN0LCBfX2xhc3QsCi0JCQkJX19nbnVfY3h4OjpfX29wczo6X19pdGVy X2xlc3NfaXRlcigpKTsKKyAgICAgIF9fZGVjbHR5cGUoX19nbnVfY3h4OjpfX29wczo6X19s ZXNzKF9fZmlyc3QpKSBfX2NvbXAgPQorCV9fZ251X2N4eDo6X19vcHM6Ol9fbGVzcyhfX2Zp cnN0KTsKKyAgICAgIHJldHVybiBfR0xJQkNYWF9TVERfQTo6X19taW5fZWxlbWVudChfX2Zp cnN0LCBfX2xhc3QsIF9fY29tcCk7CiAgICAgfQogCiAgIC8qKgpAQCAtNTYwOSwyMCArNTY4 NiwyMCBAQCBfR0xJQkNYWF9CRUdJTl9OQU1FU1BBQ0VfQUxHTwogICAgICAgX19nbGliY3h4 X3JlcXVpcmVzX3ZhbGlkX3JhbmdlKF9fZmlyc3QsIF9fbGFzdCk7CiAgICAgICBfX2dsaWJj eHhfcmVxdWlyZXNfaXJyZWZsZXhpdmVfcHJlZChfX2ZpcnN0LCBfX2xhc3QsIF9fY29tcCk7 CiAKLSAgICAgIHJldHVybiBfR0xJQkNYWF9TVERfQTo6X19taW5fZWxlbWVudChfX2ZpcnN0 LCBfX2xhc3QsCi0JCQkJX19nbnVfY3h4OjpfX29wczo6X19pdGVyX2NvbXBfaXRlcihfX2Nv bXApKTsKKyAgICAgIHJldHVybiBfR0xJQkNYWF9TVERfQTo6X19taW5fZWxlbWVudAorCShf X2ZpcnN0LCBfX2xhc3QsIF9HTElCQ1hYX01PVkUoX19jb21wKSk7CiAgICAgfQogCiAgIHRl bXBsYXRlPHR5cGVuYW1lIF9Gb3J3YXJkSXRlcmF0b3IsIHR5cGVuYW1lIF9Db21wYXJlPgog ICAgIF9HTElCQ1hYMTRfQ09OU1RFWFBSCiAgICAgX0ZvcndhcmRJdGVyYXRvcgogICAgIF9f bWF4X2VsZW1lbnQoX0ZvcndhcmRJdGVyYXRvciBfX2ZpcnN0LCBfRm9yd2FyZEl0ZXJhdG9y IF9fbGFzdCwKLQkJICBfQ29tcGFyZSBfX2NvbXApCisJCSAgX0dMSUJDWFhfRldEUkVGKF9D b21wYXJlKSBfX2NvbXApCiAgICAgewogICAgICAgaWYgKF9fZmlyc3QgPT0gX19sYXN0KSBy ZXR1cm4gX19maXJzdDsKICAgICAgIF9Gb3J3YXJkSXRlcmF0b3IgX19yZXN1bHQgPSBfX2Zp cnN0OwogICAgICAgd2hpbGUgKCsrX19maXJzdCAhPSBfX2xhc3QpCi0JaWYgKF9fY29tcChf X3Jlc3VsdCwgX19maXJzdCkpCisJaWYgKF9fY29tcCgqX19yZXN1bHQsICpfX2ZpcnN0KSkK IAkgIF9fcmVzdWx0ID0gX19maXJzdDsKICAgICAgIHJldHVybiBfX3Jlc3VsdDsKICAgICB9 CkBAIC01NjQ2LDggKzU3MjMsOSBAQCBfR0xJQkNYWF9CRUdJTl9OQU1FU1BBQ0VfQUxHTwog ICAgICAgX19nbGliY3h4X3JlcXVpcmVzX3ZhbGlkX3JhbmdlKF9fZmlyc3QsIF9fbGFzdCk7 CiAgICAgICBfX2dsaWJjeHhfcmVxdWlyZXNfaXJyZWZsZXhpdmUoX19maXJzdCwgX19sYXN0 KTsKIAotICAgICAgcmV0dXJuIF9HTElCQ1hYX1NURF9BOjpfX21heF9lbGVtZW50KF9fZmly c3QsIF9fbGFzdCwKLQkJCQlfX2dudV9jeHg6Ol9fb3BzOjpfX2l0ZXJfbGVzc19pdGVyKCkp OworICAgICAgX19kZWNsdHlwZShfX2dudV9jeHg6Ol9fb3BzOjpfX2xlc3MoX19maXJzdCkp IF9fY29tcCA9CisJX19nbnVfY3h4OjpfX29wczo6X19sZXNzKF9fZmlyc3QpOworICAgICAg cmV0dXJuIF9HTElCQ1hYX1NURF9BOjpfX21heF9lbGVtZW50KF9fZmlyc3QsIF9fbGFzdCwg X19jb21wKTsKICAgICB9CiAKICAgLyoqCkBAIC01NjczLDggKzU3NTEsOCBAQCBfR0xJQkNY WF9CRUdJTl9OQU1FU1BBQ0VfQUxHTwogICAgICAgX19nbGliY3h4X3JlcXVpcmVzX3ZhbGlk X3JhbmdlKF9fZmlyc3QsIF9fbGFzdCk7CiAgICAgICBfX2dsaWJjeHhfcmVxdWlyZXNfaXJy ZWZsZXhpdmVfcHJlZChfX2ZpcnN0LCBfX2xhc3QsIF9fY29tcCk7CiAKLSAgICAgIHJldHVy biBfR0xJQkNYWF9TVERfQTo6X19tYXhfZWxlbWVudChfX2ZpcnN0LCBfX2xhc3QsCi0JCQkJ X19nbnVfY3h4OjpfX29wczo6X19pdGVyX2NvbXBfaXRlcihfX2NvbXApKTsKKyAgICAgIHJl dHVybiBfR0xJQkNYWF9TVERfQTo6X19tYXhfZWxlbWVudAorCShfX2ZpcnN0LCBfX2xhc3Qs IF9HTElCQ1hYX01PVkUoX19jb21wKSk7CiAgICAgfQogCiAjaWYgX19jcGx1c3BsdXMgPj0g MjAxMTAzTApAQCAtNTY4Niw3ICs1NzY0LDcgQEAgX0dMSUJDWFhfQkVHSU5fTkFNRVNQQUNF X0FMR08KICAgICB7CiAgICAgICBfX2dsaWJjeHhfcmVxdWlyZXNfaXJyZWZsZXhpdmUoX19s LmJlZ2luKCksIF9fbC5lbmQoKSk7CiAgICAgICByZXR1cm4gKl9HTElCQ1hYX1NURF9BOjpf X21pbl9lbGVtZW50KF9fbC5iZWdpbigpLCBfX2wuZW5kKCksCi0JICBfX2dudV9jeHg6Ol9f b3BzOjpfX2l0ZXJfbGVzc19pdGVyKCkpOworCQkJCQkgICAgX19nbnVfY3h4OjpfX29wczo6 X19sZXNzKCkpOwogICAgIH0KIAogICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHAsIHR5cGVuYW1l IF9Db21wYXJlPgpAQCAtNTY5Niw3ICs1Nzc0LDcgQEAgX0dMSUJDWFhfQkVHSU5fTkFNRVNQ QUNFX0FMR08KICAgICB7CiAgICAgICBfX2dsaWJjeHhfcmVxdWlyZXNfaXJyZWZsZXhpdmVf cHJlZChfX2wuYmVnaW4oKSwgX19sLmVuZCgpLCBfX2NvbXApOwogICAgICAgcmV0dXJuICpf R0xJQkNYWF9TVERfQTo6X19taW5fZWxlbWVudChfX2wuYmVnaW4oKSwgX19sLmVuZCgpLAot CSAgX19nbnVfY3h4OjpfX29wczo6X19pdGVyX2NvbXBfaXRlcihfX2NvbXApKTsKKwkJCQkJ ICAgIHN0ZDo6bW92ZShfX2NvbXApKTsKICAgICB9CiAKICAgdGVtcGxhdGU8dHlwZW5hbWUg X1RwPgpAQCAtNTcwNiw3ICs1Nzg0LDcgQEAgX0dMSUJDWFhfQkVHSU5fTkFNRVNQQUNFX0FM R08KICAgICB7CiAgICAgICBfX2dsaWJjeHhfcmVxdWlyZXNfaXJyZWZsZXhpdmUoX19sLmJl Z2luKCksIF9fbC5lbmQoKSk7CiAgICAgICByZXR1cm4gKl9HTElCQ1hYX1NURF9BOjpfX21h eF9lbGVtZW50KF9fbC5iZWdpbigpLCBfX2wuZW5kKCksCi0JICBfX2dudV9jeHg6Ol9fb3Bz OjpfX2l0ZXJfbGVzc19pdGVyKCkpOworCQkJCQkgICAgX19nbnVfY3h4OjpfX29wczo6X19s ZXNzKCkpOwogICAgIH0KIAogICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHAsIHR5cGVuYW1lIF9D b21wYXJlPgpAQCAtNTcxNiw3ICs1Nzk0LDcgQEAgX0dMSUJDWFhfQkVHSU5fTkFNRVNQQUNF X0FMR08KICAgICB7CiAgICAgICBfX2dsaWJjeHhfcmVxdWlyZXNfaXJyZWZsZXhpdmVfcHJl ZChfX2wuYmVnaW4oKSwgX19sLmVuZCgpLCBfX2NvbXApOwogICAgICAgcmV0dXJuICpfR0xJ QkNYWF9TVERfQTo6X19tYXhfZWxlbWVudChfX2wuYmVnaW4oKSwgX19sLmVuZCgpLAotCSAg X19nbnVfY3h4OjpfX29wczo6X19pdGVyX2NvbXBfaXRlcihfX2NvbXApKTsKKwkJCQkJICAg IHN0ZDo6bW92ZShfX2NvbXApKTsKICAgICB9CiAjZW5kaWYgLy8gQysrMTEKIApkaWZmIC0t Z2l0IGEvbGlic3RkYysrLXYzL2luY2x1ZGUvYml0cy9zdGxfYWxnb2Jhc2UuaCBiL2xpYnN0 ZGMrKy12My9pbmNsdWRlL2JpdHMvc3RsX2FsZ29iYXNlLmgKaW5kZXggZDgzMWUwZTk4ODMu LjliOGUyYzZhNTZkIDEwMDY0NAotLS0gYS9saWJzdGRjKystdjMvaW5jbHVkZS9iaXRzL3N0 bF9hbGdvYmFzZS5oCisrKyBiL2xpYnN0ZGMrKy12My9pbmNsdWRlL2JpdHMvc3RsX2FsZ29i YXNlLmgKQEAgLTEzMTYsNyArMTMxNiw3IEBAIF9HTElCQ1hYX0VORF9OQU1FU1BBQ0VfQ09O VEFJTkVSCiAgICAgYm9vbAogICAgIF9fbGV4aWNvZ3JhcGhpY2FsX2NvbXBhcmVfaW1wbChf SUkxIF9fZmlyc3QxLCBfSUkxIF9fbGFzdDEsCiAJCQkJICAgX0lJMiBfX2ZpcnN0MiwgX0lJ MiBfX2xhc3QyLAotCQkJCSAgIF9Db21wYXJlIF9fY29tcCkKKwkJCQkgICBfR0xJQkNYWF9G V0RSRUYoX0NvbXBhcmUpIF9fY29tcCkKICAgICB7CiAgICAgICB0eXBlZGVmIHR5cGVuYW1l IGl0ZXJhdG9yX3RyYWl0czxfSUkxPjo6aXRlcmF0b3JfY2F0ZWdvcnkgX0NhdGVnb3J5MTsK ICAgICAgIHR5cGVkZWYgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9JSTI+OjppdGVyYXRv cl9jYXRlZ29yeSBfQ2F0ZWdvcnkyOwpAQCAtMTMyNiw5ICsxMzI2LDkgQEAgX0dMSUJDWFhf RU5EX05BTUVTUEFDRV9DT05UQUlORVIKICAgICAgIGZvciAoOyBfX2ZpcnN0MSAhPSBfX2xh c3QxICYmIF9fcmFpX3R5cGU6Ol9fY25kMihfX2ZpcnN0MiwgX19sYXN0Mik7CiAJICAgKytf X2ZpcnN0MSwgKHZvaWQpKytfX2ZpcnN0MikKIAl7Ci0JICBpZiAoX19jb21wKF9fZmlyc3Qx LCBfX2ZpcnN0MikpCisJICBpZiAoX19jb21wKCpfX2ZpcnN0MSwgKl9fZmlyc3QyKSkKIAkg ICAgcmV0dXJuIHRydWU7Ci0JICBpZiAoX19jb21wKF9fZmlyc3QyLCBfX2ZpcnN0MSkpCisJ ICBpZiAoX19jb21wKCpfX2ZpcnN0MiwgKl9fZmlyc3QxKSkKIAkgICAgcmV0dXJuIGZhbHNl OwogCX0KICAgICAgIHJldHVybiBfX2ZpcnN0MSA9PSBfX2xhc3QxICYmIF9fZmlyc3QyICE9 IF9fbGFzdDI7CkBAIC0xMzQyLDEwICsxMzQyLDEwIEBAIF9HTElCQ1hYX0VORF9OQU1FU1BB Q0VfQ09OVEFJTkVSCiAJc3RhdGljIGJvb2wKIAlfX2xjKF9JSTEgX19maXJzdDEsIF9JSTEg X19sYXN0MSwgX0lJMiBfX2ZpcnN0MiwgX0lJMiBfX2xhc3QyKQogCXsKLQkgIHVzaW5nIF9f Z251X2N4eDo6X19vcHM6Ol9faXRlcl9sZXNzX2l0ZXI7Ci0JICByZXR1cm4gc3RkOjpfX2xl eGljb2dyYXBoaWNhbF9jb21wYXJlX2ltcGwoX19maXJzdDEsIF9fbGFzdDEsCi0JCQkJCQkg ICAgIF9fZmlyc3QyLCBfX2xhc3QyLAotCQkJCQkJICAgICBfX2l0ZXJfbGVzc19pdGVyKCkp OworCSAgX19kZWNsdHlwZShfX2dudV9jeHg6Ol9fb3BzOjpfX2xlc3MoX19maXJzdDEsIF9f Zmlyc3QyKSkgX19jb21wID0KKwkgICAgX19nbnVfY3h4OjpfX29wczo6X19sZXNzKF9fZmly c3QxLCBfX2ZpcnN0Mik7CisJICByZXR1cm4gc3RkOjpfX2xleGljb2dyYXBoaWNhbF9jb21w YXJlX2ltcGwKKwkgICAgKF9fZmlyc3QxLCBfX2xhc3QxLCBfX2ZpcnN0MiwgX19sYXN0Miwg X19jb21wKTsKIAl9CiAKICAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9JSTEsIHR5cGVuYW1l IF9JSTI+CkBAIC0xNDg2LDcgKzE0ODYsNyBAQCBfR0xJQkNYWF9FTkRfTkFNRVNQQUNFX0NP TlRBSU5FUgogICAgIF9HTElCQ1hYMjBfQ09OU1RFWFBSCiAgICAgX0ZvcndhcmRJdGVyYXRv cgogICAgIF9fbG93ZXJfYm91bmQoX0ZvcndhcmRJdGVyYXRvciBfX2ZpcnN0LCBfRm9yd2Fy ZEl0ZXJhdG9yIF9fbGFzdCwKLQkJICBjb25zdCBfVHAmIF9fdmFsLCBfQ29tcGFyZSBfX2Nv bXApCisJCSAgY29uc3QgX1RwJiBfX3ZhbCwgX0dMSUJDWFhfRldEUkVGKF9Db21wYXJlKSBf X2NvbXApCiAgICAgewogICAgICAgdHlwZWRlZiB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8 X0ZvcndhcmRJdGVyYXRvcj46OmRpZmZlcmVuY2VfdHlwZQogCV9EaXN0YW5jZVR5cGU7CkBA IC0xNDk4LDcgKzE0OTgsNyBAQCBfR0xJQkNYWF9FTkRfTkFNRVNQQUNFX0NPTlRBSU5FUgog CSAgX0Rpc3RhbmNlVHlwZSBfX2hhbGYgPSBfX2xlbiA+PiAxOwogCSAgX0ZvcndhcmRJdGVy YXRvciBfX21pZGRsZSA9IF9fZmlyc3Q7CiAJICBzdGQ6OmFkdmFuY2UoX19taWRkbGUsIF9f aGFsZik7Ci0JICBpZiAoX19jb21wKF9fbWlkZGxlLCBfX3ZhbCkpCisJICBpZiAoX19jb21w KCpfX21pZGRsZSwgX192YWwpKQogCSAgICB7CiAJICAgICAgX19maXJzdCA9IF9fbWlkZGxl OwogCSAgICAgICsrX19maXJzdDsKQEAgLTE1MzMsOCArMTUzMyw5IEBAIF9HTElCQ1hYX0VO RF9OQU1FU1BBQ0VfQ09OVEFJTkVSCiAJICAgIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxf Rm9yd2FyZEl0ZXJhdG9yPjo6dmFsdWVfdHlwZSwgX1RwPikKICAgICAgIF9fZ2xpYmN4eF9y ZXF1aXJlc19wYXJ0aXRpb25lZF9sb3dlcihfX2ZpcnN0LCBfX2xhc3QsIF9fdmFsKTsKIAot ICAgICAgcmV0dXJuIHN0ZDo6X19sb3dlcl9ib3VuZChfX2ZpcnN0LCBfX2xhc3QsIF9fdmFs LAotCQkJCV9fZ251X2N4eDo6X19vcHM6Ol9faXRlcl9sZXNzX3ZhbCgpKTsKKyAgICAgIF9f ZGVjbHR5cGUoX19nbnVfY3h4OjpfX29wczo6X19sZXNzX3ZhbChfX2ZpcnN0LCBfX3ZhbCkp IF9fY29tcCA9CisJX19nbnVfY3h4OjpfX29wczo6X19sZXNzX3ZhbChfX2ZpcnN0LCBfX3Zh bCk7CisgICAgICByZXR1cm4gc3RkOjpfX2xvd2VyX2JvdW5kKF9fZmlyc3QsIF9fbGFzdCwg X192YWwsIF9fY29tcCk7CiAgICAgfQogCiAgIC8vLyBUaGlzIGlzIGEgaGVscGVyIGZ1bmN0 aW9uIGZvciB0aGUgc29ydCByb3V0aW5lcyBhbmQgZm9yIHJhbmRvbS50Y2MuCkBAIC0xNjUw LDcgKzE2NTEsNyBAQCBfR0xJQkNYWF9CRUdJTl9OQU1FU1BBQ0VfQUxHTwogICAgIF9HTElC Q1hYMjBfQ09OU1RFWFBSCiAgICAgaW5saW5lIGJvb2wKICAgICBfX2VxdWFsNChfSUkxIF9f Zmlyc3QxLCBfSUkxIF9fbGFzdDEsIF9JSTIgX19maXJzdDIsIF9JSTIgX19sYXN0MiwKLQkg ICAgIF9CaW5hcnlQcmVkaWNhdGUgX19iaW5hcnlfcHJlZCkKKwkgICAgIF9CaW5hcnlQcmVk aWNhdGUmJiBfX2JpbmFyeV9wcmVkKQogICAgIHsKICAgICAgIHVzaW5nIF9SQVRhZyA9IHJh bmRvbV9hY2Nlc3NfaXRlcmF0b3JfdGFnOwogICAgICAgdXNpbmcgX0NhdDEgPSB0eXBlbmFt ZSBpdGVyYXRvcl90cmFpdHM8X0lJMT46Oml0ZXJhdG9yX2NhdGVnb3J5OwpAQCAtMTY2Miw4 ICsxNjYzLDkgQEAgX0dMSUJDWFhfQkVHSU5fTkFNRVNQQUNFX0FMR08KIAkgIGF1dG8gX19k MiA9IHN0ZDo6ZGlzdGFuY2UoX19maXJzdDIsIF9fbGFzdDIpOwogCSAgaWYgKF9fZDEgIT0g X19kMikKIAkgICAgcmV0dXJuIGZhbHNlOwotCSAgcmV0dXJuIF9HTElCQ1hYX1NURF9BOjpl cXVhbChfX2ZpcnN0MSwgX19sYXN0MSwgX19maXJzdDIsCi0JCQkJICAgICAgIF9fYmluYXJ5 X3ByZWQpOworCSAgcmV0dXJuIF9HTElCQ1hYX1NURF9BOjplcXVhbAorCSAgICAoX19maXJz dDEsIF9fbGFzdDEsIF9fZmlyc3QyLAorCSAgICAgc3RkOjpmb3J3YXJkPF9CaW5hcnlQcmVk aWNhdGU+KF9fYmluYXJ5X3ByZWQpKTsKIAl9CiAKICAgICAgIGZvciAoOyBfX2ZpcnN0MSAh PSBfX2xhc3QxICYmIF9fZmlyc3QyICE9IF9fbGFzdDI7CkBAIC0xNzM0LDcgKzE3MzYsNyBA QCBfR0xJQkNYWF9CRUdJTl9OQU1FU1BBQ0VfQUxHTwogICAgICAgX19nbGliY3h4X3JlcXVp cmVzX3ZhbGlkX3JhbmdlKF9fZmlyc3QyLCBfX2xhc3QyKTsKIAogICAgICAgcmV0dXJuIF9H TElCQ1hYX1NURF9BOjpfX2VxdWFsNChfX2ZpcnN0MSwgX19sYXN0MSwgX19maXJzdDIsIF9f bGFzdDIsCi0JCQkJICAgICAgX19iaW5hcnlfcHJlZCk7CisJCQkJICAgICAgc3RkOjptb3Zl KF9fYmluYXJ5X3ByZWQpKTsKICAgICB9CiAjZW5kaWYgLy8gX19nbGliY3h4X3JvYnVzdF9u b25tb2RpZnlpbmdfc2VxX29wcwogCkBAIC0xODAxLDggKzE4MDMsNyBAQCBfR0xJQkNYWF9C RUdJTl9OQU1FU1BBQ0VfQUxHTwogICAgICAgX19nbGliY3h4X3JlcXVpcmVzX3ZhbGlkX3Jh bmdlKF9fZmlyc3QyLCBfX2xhc3QyKTsKIAogICAgICAgcmV0dXJuIHN0ZDo6X19sZXhpY29n cmFwaGljYWxfY29tcGFyZV9pbXBsCi0JKF9fZmlyc3QxLCBfX2xhc3QxLCBfX2ZpcnN0Miwg X19sYXN0MiwKLQkgX19nbnVfY3h4OjpfX29wczo6X19pdGVyX2NvbXBfaXRlcihfX2NvbXAp KTsKKwkoX19maXJzdDEsIF9fbGFzdDEsIF9fZmlyc3QyLCBfX2xhc3QyLCBfR0xJQkNYWF9N T1ZFKF9fY29tcCkpOwogICAgIH0KIAogI2lmIF9fY3BwX2xpYl90aHJlZV93YXlfY29tcGFy aXNvbgpAQCAtMTkwOCw5ICsxOTA5LDEwIEBAIF9HTElCQ1hYX0JFR0lOX05BTUVTUEFDRV9B TEdPCiAgICAgX0dMSUJDWFgyMF9DT05TVEVYUFIKICAgICBwYWlyPF9JbnB1dEl0ZXJhdG9y MSwgX0lucHV0SXRlcmF0b3IyPgogICAgIF9fbWlzbWF0Y2goX0lucHV0SXRlcmF0b3IxIF9f Zmlyc3QxLCBfSW5wdXRJdGVyYXRvcjEgX19sYXN0MSwKLQkgICAgICAgX0lucHV0SXRlcmF0 b3IyIF9fZmlyc3QyLCBfQmluYXJ5UHJlZGljYXRlIF9fYmluYXJ5X3ByZWQpCisJICAgICAg IF9JbnB1dEl0ZXJhdG9yMiBfX2ZpcnN0MiwKKwkgICAgICAgX0dMSUJDWFhfRldEUkVGKF9C aW5hcnlQcmVkaWNhdGUpIF9fYmluYXJ5X3ByZWQpCiAgICAgewotICAgICAgd2hpbGUgKF9f Zmlyc3QxICE9IF9fbGFzdDEgJiYgX19iaW5hcnlfcHJlZChfX2ZpcnN0MSwgX19maXJzdDIp KQorICAgICAgd2hpbGUgKF9fZmlyc3QxICE9IF9fbGFzdDEgJiYgX19iaW5hcnlfcHJlZCgq X19maXJzdDEsICpfX2ZpcnN0MikpCiAJewogCSAgKytfX2ZpcnN0MTsKIAkgICsrX19maXJz dDI7CkBAIC0xOTQ1LDggKzE5NDcsOSBAQCBfR0xJQkNYWF9CRUdJTl9OQU1FU1BBQ0VfQUxH TwogCSAgICB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X0lucHV0SXRlcmF0b3IyPjo6dmFs dWVfdHlwZT4pCiAgICAgICBfX2dsaWJjeHhfcmVxdWlyZXNfdmFsaWRfcmFuZ2UoX19maXJz dDEsIF9fbGFzdDEpOwogCi0gICAgICByZXR1cm4gX0dMSUJDWFhfU1REX0E6Ol9fbWlzbWF0 Y2goX19maXJzdDEsIF9fbGFzdDEsIF9fZmlyc3QyLAotCQkJICAgICBfX2dudV9jeHg6Ol9f b3BzOjpfX2l0ZXJfZXF1YWxfdG9faXRlcigpKTsKKyAgICAgIF9fZGVjbHR5cGUoX19nbnVf Y3h4OjpfX29wczo6X19lcXVhbF90byhfX2ZpcnN0MSwgX19maXJzdDIpKSBfX2NvbXAgPQor CV9fZ251X2N4eDo6X19vcHM6Ol9fZXF1YWxfdG8oX19maXJzdDEsIF9fZmlyc3QyKTsKKyAg ICAgIHJldHVybiBfR0xJQkNYWF9TVERfQTo6X19taXNtYXRjaChfX2ZpcnN0MSwgX19sYXN0 MSwgX19maXJzdDIsIF9fY29tcCk7CiAgICAgfQogCiAgIC8qKgpAQCAtMTk3OCw3ICsxOTgx LDcgQEAgX0dMSUJDWFhfQkVHSU5fTkFNRVNQQUNFX0FMR08KICAgICAgIF9fZ2xpYmN4eF9y ZXF1aXJlc192YWxpZF9yYW5nZShfX2ZpcnN0MSwgX19sYXN0MSk7CiAKICAgICAgIHJldHVy biBfR0xJQkNYWF9TVERfQTo6X19taXNtYXRjaChfX2ZpcnN0MSwgX19sYXN0MSwgX19maXJz dDIsCi0JX19nbnVfY3h4OjpfX29wczo6X19pdGVyX2NvbXBfaXRlcihfX2JpbmFyeV9wcmVk KSk7CisJCQkJCV9HTElCQ1hYX01PVkUoX19iaW5hcnlfcHJlZCkpOwogICAgIH0KIAogI2lm IF9fZ2xpYmN4eF9yb2J1c3Rfbm9ubW9kaWZ5aW5nX3NlcV9vcHMgLy8gQysrID49IDE0CkBA IC0xOTg4LDEwICsxOTkxLDEwIEBAIF9HTElCQ1hYX0JFR0lOX05BTUVTUEFDRV9BTEdPCiAg ICAgcGFpcjxfSW5wdXRJdGVyYXRvcjEsIF9JbnB1dEl0ZXJhdG9yMj4KICAgICBfX21pc21h dGNoKF9JbnB1dEl0ZXJhdG9yMSBfX2ZpcnN0MSwgX0lucHV0SXRlcmF0b3IxIF9fbGFzdDEs CiAJICAgICAgIF9JbnB1dEl0ZXJhdG9yMiBfX2ZpcnN0MiwgX0lucHV0SXRlcmF0b3IyIF9f bGFzdDIsCi0JICAgICAgIF9CaW5hcnlQcmVkaWNhdGUgX19iaW5hcnlfcHJlZCkKKwkgICAg ICAgX0JpbmFyeVByZWRpY2F0ZSYmIF9fYmluYXJ5X3ByZWQpCiAgICAgewogICAgICAgd2hp bGUgKF9fZmlyc3QxICE9IF9fbGFzdDEgJiYgX19maXJzdDIgIT0gX19sYXN0MgotCSAgICAg JiYgX19iaW5hcnlfcHJlZChfX2ZpcnN0MSwgX19maXJzdDIpKQorCSAgICAgJiYgX19iaW5h cnlfcHJlZCgqX19maXJzdDEsICpfX2ZpcnN0MikpCiAJewogCSAgKytfX2ZpcnN0MTsKIAkg ICsrX19maXJzdDI7CkBAIC0yMDI4LDggKzIwMzEsOSBAQCBfR0xJQkNYWF9CRUdJTl9OQU1F U1BBQ0VfQUxHTwogICAgICAgX19nbGliY3h4X3JlcXVpcmVzX3ZhbGlkX3JhbmdlKF9fZmly c3QxLCBfX2xhc3QxKTsKICAgICAgIF9fZ2xpYmN4eF9yZXF1aXJlc192YWxpZF9yYW5nZShf X2ZpcnN0MiwgX19sYXN0Mik7CiAKLSAgICAgIHJldHVybiBfR0xJQkNYWF9TVERfQTo6X19t aXNtYXRjaChfX2ZpcnN0MSwgX19sYXN0MSwgX19maXJzdDIsIF9fbGFzdDIsCi0JCQkgICAg IF9fZ251X2N4eDo6X19vcHM6Ol9faXRlcl9lcXVhbF90b19pdGVyKCkpOworICAgICAgcmV0 dXJuIF9HTElCQ1hYX1NURF9BOjpfX21pc21hdGNoCisJKF9fZmlyc3QxLCBfX2xhc3QxLCBf X2ZpcnN0MiwgX19sYXN0MiwKKwkgX19nbnVfY3h4OjpfX29wczo6X19lcXVhbF90byhfX2Zp cnN0MSwgX19maXJzdDIpKTsKICAgICB9CiAKICAgLyoqCkBAIC0yMDY0LDcgKzIwNjgsNyBA QCBfR0xJQkNYWF9CRUdJTl9OQU1FU1BBQ0VfQUxHTwogICAgICAgX19nbGliY3h4X3JlcXVp cmVzX3ZhbGlkX3JhbmdlKF9fZmlyc3QyLCBfX2xhc3QyKTsKIAogICAgICAgcmV0dXJuIF9H TElCQ1hYX1NURF9BOjpfX21pc21hdGNoKF9fZmlyc3QxLCBfX2xhc3QxLCBfX2ZpcnN0Miwg X19sYXN0MiwKLQkJCSAgICAgX19nbnVfY3h4OjpfX29wczo6X19pdGVyX2NvbXBfaXRlcihf X2JpbmFyeV9wcmVkKSk7CisJCQkJCV9HTElCQ1hYX01PVkUoX19iaW5hcnlfcHJlZCkpOwog ICAgIH0KICNlbmRpZgogCkBAIC0yMDc1LDkgKzIwNzksOSBAQCBfR0xJQkNYWF9FTkRfTkFN RVNQQUNFX0FMR08KICAgICBfR0xJQkNYWDIwX0NPTlNURVhQUgogICAgIGlubGluZSBfSW5w dXRJdGVyYXRvcgogICAgIF9fZmluZF9pZihfSW5wdXRJdGVyYXRvciBfX2ZpcnN0LCBfSW5w dXRJdGVyYXRvciBfX2xhc3QsCi0JICAgICAgX1ByZWRpY2F0ZSBfX3ByZWQsIGlucHV0X2l0 ZXJhdG9yX3RhZykKKwkgICAgICBfR0xJQkNYWF9GV0RSRUYoX1ByZWRpY2F0ZSkgX19wcmVk LCBpbnB1dF9pdGVyYXRvcl90YWcpCiAgICAgewotICAgICAgd2hpbGUgKF9fZmlyc3QgIT0g X19sYXN0ICYmICFfX3ByZWQoX19maXJzdCkpCisgICAgICB3aGlsZSAoX19maXJzdCAhPSBf X2xhc3QgJiYgIV9fcHJlZCgqX19maXJzdCkpCiAJKytfX2ZpcnN0OwogICAgICAgcmV0dXJu IF9fZmlyc3Q7CiAgICAgfQpAQCAtMjA4NywyNiArMjA5MSwyNiBAQCBfR0xJQkNYWF9FTkRf TkFNRVNQQUNFX0FMR08KICAgICBfR0xJQkNYWDIwX0NPTlNURVhQUgogICAgIF9SYW5kb21B Y2Nlc3NJdGVyYXRvcgogICAgIF9fZmluZF9pZihfUmFuZG9tQWNjZXNzSXRlcmF0b3IgX19m aXJzdCwgX1JhbmRvbUFjY2Vzc0l0ZXJhdG9yIF9fbGFzdCwKLQkgICAgICBfUHJlZGljYXRl IF9fcHJlZCwgcmFuZG9tX2FjY2Vzc19pdGVyYXRvcl90YWcpCisJICAgICAgX0dMSUJDWFhf RldEUkVGKF9QcmVkaWNhdGUpIF9fcHJlZCwgcmFuZG9tX2FjY2Vzc19pdGVyYXRvcl90YWcp CiAgICAgewogICAgICAgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9SYW5kb21BY2Nlc3NJ dGVyYXRvcj46OmRpZmZlcmVuY2VfdHlwZQogCV9fdHJpcF9jb3VudCA9IChfX2xhc3QgLSBf X2ZpcnN0KSA+PiAyOwogCiAgICAgICBmb3IgKDsgX190cmlwX2NvdW50ID4gMDsgLS1fX3Ry aXBfY291bnQpCiAJewotCSAgaWYgKF9fcHJlZChfX2ZpcnN0KSkKKwkgIGlmIChfX3ByZWQo Kl9fZmlyc3QpKQogCSAgICByZXR1cm4gX19maXJzdDsKIAkgICsrX19maXJzdDsKIAotCSAg aWYgKF9fcHJlZChfX2ZpcnN0KSkKKwkgIGlmIChfX3ByZWQoKl9fZmlyc3QpKQogCSAgICBy ZXR1cm4gX19maXJzdDsKIAkgICsrX19maXJzdDsKIAotCSAgaWYgKF9fcHJlZChfX2ZpcnN0 KSkKKwkgIGlmIChfX3ByZWQoKl9fZmlyc3QpKQogCSAgICByZXR1cm4gX19maXJzdDsKIAkg ICsrX19maXJzdDsKIAotCSAgaWYgKF9fcHJlZChfX2ZpcnN0KSkKKwkgIGlmIChfX3ByZWQo Kl9fZmlyc3QpKQogCSAgICByZXR1cm4gX19maXJzdDsKIAkgICsrX19maXJzdDsKIAl9CkBA IC0yMTE0LDE3ICsyMTE4LDE3IEBAIF9HTElCQ1hYX0VORF9OQU1FU1BBQ0VfQUxHTwogICAg ICAgc3dpdGNoIChfX2xhc3QgLSBfX2ZpcnN0KQogCXsKIAljYXNlIDM6Ci0JICBpZiAoX19w cmVkKF9fZmlyc3QpKQorCSAgaWYgKF9fcHJlZCgqX19maXJzdCkpCiAJICAgIHJldHVybiBf X2ZpcnN0OwogCSAgKytfX2ZpcnN0OwogCSAgLy8gRkFMTFRIUlUKIAljYXNlIDI6Ci0JICBp ZiAoX19wcmVkKF9fZmlyc3QpKQorCSAgaWYgKF9fcHJlZCgqX19maXJzdCkpCiAJICAgIHJl dHVybiBfX2ZpcnN0OwogCSAgKytfX2ZpcnN0OwogCSAgLy8gRkFMTFRIUlUKIAljYXNlIDE6 Ci0JICBpZiAoX19wcmVkKF9fZmlyc3QpKQorCSAgaWYgKF9fcHJlZCgqX19maXJzdCkpCiAJ ICAgIHJldHVybiBfX2ZpcnN0OwogCSAgKytfX2ZpcnN0OwogCSAgLy8gRkFMTFRIUlUKQEAg LTIxMzcsMjAgKzIxNDEsMjIgQEAgX0dMSUJDWFhfRU5EX05BTUVTUEFDRV9BTEdPCiAgIHRl bXBsYXRlPHR5cGVuYW1lIF9JdGVyYXRvciwgdHlwZW5hbWUgX1ByZWRpY2F0ZT4KICAgICBf R0xJQkNYWDIwX0NPTlNURVhQUgogICAgIGlubGluZSBfSXRlcmF0b3IKLSAgICBfX2ZpbmRf aWYoX0l0ZXJhdG9yIF9fZmlyc3QsIF9JdGVyYXRvciBfX2xhc3QsIF9QcmVkaWNhdGUgX19w cmVkKQorICAgIF9fZmluZF9pZihfSXRlcmF0b3IgX19maXJzdCwgX0l0ZXJhdG9yIF9fbGFz dCwKKwkgICAgICBfR0xJQkNYWF9GV0RSRUYoX1ByZWRpY2F0ZSkgX19wcmVkKQogICAgIHsK LSAgICAgIHJldHVybiBfX2ZpbmRfaWYoX19maXJzdCwgX19sYXN0LCBfX3ByZWQsCisgICAg ICByZXR1cm4gX19maW5kX2lmKF9fZmlyc3QsIF9fbGFzdCwgX0dMSUJDWFhfRk9SV0FSRChf UHJlZGljYXRlLCBfX3ByZWQpLAogCQkgICAgICAgc3RkOjpfX2l0ZXJhdG9yX2NhdGVnb3J5 KF9fZmlyc3QpKTsKICAgICB9CiAKICAgdGVtcGxhdGU8dHlwZW5hbWUgX0lucHV0SXRlcmF0 b3IsIHR5cGVuYW1lIF9QcmVkaWNhdGU+CiAgICAgX0dMSUJDWFgyMF9DT05TVEVYUFIKICAg ICB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X0lucHV0SXRlcmF0b3I+OjpkaWZmZXJlbmNl X3R5cGUKLSAgICBfX2NvdW50X2lmKF9JbnB1dEl0ZXJhdG9yIF9fZmlyc3QsIF9JbnB1dEl0 ZXJhdG9yIF9fbGFzdCwgX1ByZWRpY2F0ZSBfX3ByZWQpCisgICAgX19jb3VudF9pZihfSW5w dXRJdGVyYXRvciBfX2ZpcnN0LCBfSW5wdXRJdGVyYXRvciBfX2xhc3QsCisJICAgICAgIF9H TElCQ1hYX0ZXRFJFRihfUHJlZGljYXRlKSBfX3ByZWQpCiAgICAgewogICAgICAgdHlwZW5h bWUgaXRlcmF0b3JfdHJhaXRzPF9JbnB1dEl0ZXJhdG9yPjo6ZGlmZmVyZW5jZV90eXBlIF9f biA9IDA7CiAgICAgICBmb3IgKDsgX19maXJzdCAhPSBfX2xhc3Q7ICsrX19maXJzdCkKLQlp ZiAoX19wcmVkKF9fZmlyc3QpKQorCWlmIChfX3ByZWQoKl9fZmlyc3QpKQogCSAgKytfX247 CiAgICAgICByZXR1cm4gX19uOwogICAgIH0KQEAgLTIxNTksNyArMjE2NSw3IEBAIF9HTElC Q1hYX0VORF9OQU1FU1BBQ0VfQUxHTwogICAgIF9HTElCQ1hYMjBfQ09OU1RFWFBSCiAgICAg X0ZvcndhcmRJdGVyYXRvcgogICAgIF9fcmVtb3ZlX2lmKF9Gb3J3YXJkSXRlcmF0b3IgX19m aXJzdCwgX0ZvcndhcmRJdGVyYXRvciBfX2xhc3QsCi0JCV9QcmVkaWNhdGUgX19wcmVkKQor CQlfR0xJQkNYWF9GV0RSRUYoX1ByZWRpY2F0ZSkgX19wcmVkKQogICAgIHsKICAgICAgIF9f Zmlyc3QgPSBzdGQ6Ol9fZmluZF9pZihfX2ZpcnN0LCBfX2xhc3QsIF9fcHJlZCk7CiAgICAg ICBpZiAoX19maXJzdCA9PSBfX2xhc3QpCkBAIC0yMTY3LDcgKzIxNzMsNyBAQCBfR0xJQkNY WF9FTkRfTkFNRVNQQUNFX0FMR08KICAgICAgIF9Gb3J3YXJkSXRlcmF0b3IgX19yZXN1bHQg PSBfX2ZpcnN0OwogICAgICAgKytfX2ZpcnN0OwogICAgICAgZm9yICg7IF9fZmlyc3QgIT0g X19sYXN0OyArK19fZmlyc3QpCi0JaWYgKCFfX3ByZWQoX19maXJzdCkpCisJaWYgKCFfX3By ZWQoKl9fZmlyc3QpKQogCSAgewogCSAgICAqX19yZXN1bHQgPSBfR0xJQkNYWF9NT1ZFKCpf X2ZpcnN0KTsKIAkgICAgKytfX3Jlc3VsdDsKQEAgLTIxODEsNyArMjE4Nyw3IEBAIF9HTElC Q1hYX0VORF9OQU1FU1BBQ0VfQUxHTwogICAgIF9Gb3J3YXJkSXRlcmF0b3IxCiAgICAgX19z ZWFyY2goX0ZvcndhcmRJdGVyYXRvcjEgX19maXJzdDEsIF9Gb3J3YXJkSXRlcmF0b3IxIF9f bGFzdDEsCiAJICAgICBfRm9yd2FyZEl0ZXJhdG9yMiBfX2ZpcnN0MiwgX0ZvcndhcmRJdGVy YXRvcjIgX19sYXN0MiwKLQkgICAgIF9CaW5hcnlQcmVkaWNhdGUgIF9fcHJlZGljYXRlKQor CSAgICAgX0dMSUJDWFhfRldEUkVGKF9CaW5hcnlQcmVkaWNhdGUpICBfX3ByZWRpY2F0ZSkK ICAgICB7CiAgICAgICAvLyBUZXN0IGZvciBlbXB0eSByYW5nZXMKICAgICAgIGlmIChfX2Zp cnN0MSA9PSBfX2xhc3QxIHx8IF9fZmlyc3QyID09IF9fbGFzdDIpCkBAIC0yMTkwLDE4ICsy MTk2LDI1IEBAIF9HTElCQ1hYX0VORF9OQU1FU1BBQ0VfQUxHTwogICAgICAgLy8gVGVzdCBm b3IgYSBwYXR0ZXJuIG9mIGxlbmd0aCAxLgogICAgICAgX0ZvcndhcmRJdGVyYXRvcjIgX19w MShfX2ZpcnN0Mik7CiAgICAgICBpZiAoKytfX3AxID09IF9fbGFzdDIpCi0JcmV0dXJuIHN0 ZDo6X19maW5kX2lmKF9fZmlyc3QxLCBfX2xhc3QxLAotCQlfX2dudV9jeHg6Ol9fb3BzOjpf X2l0ZXJfY29tcF9pdGVyKF9fcHJlZGljYXRlLCBfX2ZpcnN0MikpOworCXsKKwkgIF9fZGVj bHR5cGUoX19nbnVfY3h4OjpfX29wczo6X19lcXVhbF9pdGUKKwkJICAgICAoX0dMSUJDWFhf Rk9SV0FSRChfQmluYXJ5UHJlZGljYXRlLCBfX3ByZWRpY2F0ZSksCisJCSAgICAgIF9fZmly c3QxLCBfX2ZpcnN0MikpIF9fY21wID0KKwkgICAgX19nbnVfY3h4OjpfX29wczo6X19lcXVh bF9pdGUKKwkgICAgKF9HTElCQ1hYX0ZPUldBUkQoX0JpbmFyeVByZWRpY2F0ZSwgX19wcmVk aWNhdGUpLAorCSAgICAgX19maXJzdDEsIF9fZmlyc3QyKTsKKwkgIHJldHVybiBzdGQ6Ol9f ZmluZF9pZihfX2ZpcnN0MSwgX19sYXN0MSwgX0dMSUJDWFhfTU9WRShfX2NtcCkpOworCX0K IAogICAgICAgLy8gR2VuZXJhbCBjYXNlLgogICAgICAgX0ZvcndhcmRJdGVyYXRvcjEgX19j dXJyZW50ID0gX19maXJzdDE7CiAKKyAgICAgIF9fZGVjbHR5cGUoX19nbnVfY3h4OjpfX29w czo6X19lcXVhbF9pdGUoX19wcmVkaWNhdGUsIF9fZmlyc3QxLCBfX2ZpcnN0MikpCisJX191 bnJ5X3ByZWQgPSBfX2dudV9jeHg6Ol9fb3BzOjpfX2VxdWFsX2l0ZShfX3ByZWRpY2F0ZSwK KwkJCQkJCSAgICBfX2ZpcnN0MSwgX19maXJzdDIpOwogICAgICAgZm9yICg7OykKIAl7Ci0J ICBfX2ZpcnN0MSA9Ci0JICAgIHN0ZDo6X19maW5kX2lmKF9fZmlyc3QxLCBfX2xhc3QxLAot CQlfX2dudV9jeHg6Ol9fb3BzOjpfX2l0ZXJfY29tcF9pdGVyKF9fcHJlZGljYXRlLCBfX2Zp cnN0MikpOwotCisJICBfX2ZpcnN0MSA9IHN0ZDo6X19maW5kX2lmKF9fZmlyc3QxLCBfX2xh c3QxLCBfX3VucnlfcHJlZCk7CiAJICBpZiAoX19maXJzdDEgPT0gX19sYXN0MSkKIAkgICAg cmV0dXJuIF9fbGFzdDE7CiAKQEAgLTIyMTAsNyArMjIyMyw3IEBAIF9HTElCQ1hYX0VORF9O QU1FU1BBQ0VfQUxHTwogCSAgaWYgKCsrX19jdXJyZW50ID09IF9fbGFzdDEpCiAJICAgIHJl dHVybiBfX2xhc3QxOwogCi0JICB3aGlsZSAoX19wcmVkaWNhdGUoX19jdXJyZW50LCBfX3Ap KQorCSAgd2hpbGUgKF9fcHJlZGljYXRlKCpfX2N1cnJlbnQsICpfX3ApKQogCSAgICB7CiAJ ICAgICAgaWYgKCsrX19wID09IF9fbGFzdDIpCiAJCXJldHVybiBfX2ZpcnN0MTsKQEAgLTIy MzMsNyArMjI0Niw3IEBAIF9HTElCQ1hYX0VORF9OQU1FU1BBQ0VfQUxHTwogICAgICAgLy8g RWZmaWNpZW50bHkgY29tcGFyZSBpZGVudGljYWwgcHJlZml4ZXM6ICBPKE4pIGlmIHNlcXVl bmNlcwogICAgICAgLy8gaGF2ZSB0aGUgc2FtZSBlbGVtZW50cyBpbiB0aGUgc2FtZSBvcmRl ci4KICAgICAgIGZvciAoOyBfX2ZpcnN0MSAhPSBfX2xhc3QxOyArK19fZmlyc3QxLCAodm9p ZCkrK19fZmlyc3QyKQotCWlmICghX19wcmVkKF9fZmlyc3QxLCBfX2ZpcnN0MikpCisJaWYg KCFfX3ByZWQoKl9fZmlyc3QxLCAqX19maXJzdDIpKQogCSAgYnJlYWs7CiAKICAgICAgIGlm IChfX2ZpcnN0MSA9PSBfX2xhc3QxKQpAQCAtMjI0NiwxNSArMjI1OSwxNCBAQCBfR0xJQkNY WF9FTkRfTkFNRVNQQUNFX0FMR08KICAgICAgIGZvciAoX0ZvcndhcmRJdGVyYXRvcjEgX19z Y2FuID0gX19maXJzdDE7IF9fc2NhbiAhPSBfX2xhc3QxOyArK19fc2NhbikKIAl7CiAJICBp ZiAoX19zY2FuICE9IHN0ZDo6X19maW5kX2lmKF9fZmlyc3QxLCBfX3NjYW4sCi0JCQkgIF9f Z251X2N4eDo6X19vcHM6Ol9faXRlcl9jb21wX2l0ZXIoX19wcmVkLCBfX3NjYW4pKSkKKwkJ X19nbnVfY3h4OjpfX29wczo6X19lcXVhbF9pdGUoX19wcmVkLCBfX2ZpcnN0MSwgX19zY2Fu KSkpCiAJICAgIGNvbnRpbnVlOyAvLyBXZSd2ZSBzZWVuIHRoaXMgb25lIGJlZm9yZS4KIAot CSAgYXV0byBfX21hdGNoZXMKLQkgICAgPSBzdGQ6Ol9fY291bnRfaWYoX19maXJzdDIsIF9f bGFzdDIsCi0JCQlfX2dudV9jeHg6Ol9fb3BzOjpfX2l0ZXJfY29tcF9pdGVyKF9fcHJlZCwg X19zY2FuKSk7CisJICBhdXRvIF9fbWF0Y2hlcyA9IHN0ZDo6X19jb3VudF9pZihfX2ZpcnN0 MiwgX19sYXN0MiwKKwkJX19nbnVfY3h4OjpfX29wczo6X19lcXVhbF9pdGUoX19wcmVkLCBf X2ZpcnN0MiwgX19zY2FuKSk7CiAJICBpZiAoMCA9PSBfX21hdGNoZXMgfHwKIAkgICAgICBz dGQ6Ol9fY291bnRfaWYoX19zY2FuLCBfX2xhc3QxLAotCQkJX19nbnVfY3h4OjpfX29wczo6 X19pdGVyX2NvbXBfaXRlcihfX3ByZWQsIF9fc2NhbikpCisJCV9fZ251X2N4eDo6X19vcHM6 Ol9fZXF1YWxfaXRlKF9fcHJlZCwgX19maXJzdDEsIF9fc2NhbikpCiAJICAgICAgIT0gX19t YXRjaGVzKQogCSAgICByZXR1cm4gZmFsc2U7CiAJfQpAQCAtMjI4OCw3ICsyMzAwLDcgQEAg X0dMSUJDWFhfRU5EX05BTUVTUEFDRV9BTEdPCiAgICAgICBfX2dsaWJjeHhfcmVxdWlyZXNf dmFsaWRfcmFuZ2UoX19maXJzdDEsIF9fbGFzdDEpOwogCiAgICAgICByZXR1cm4gc3RkOjpf X2lzX3Blcm11dGF0aW9uKF9fZmlyc3QxLCBfX2xhc3QxLCBfX2ZpcnN0MiwKLQkJCQkgICBf X2dudV9jeHg6Ol9fb3BzOjpfX2l0ZXJfZXF1YWxfdG9faXRlcigpKTsKKwkJCQkgICBfX2du dV9jeHg6Ol9fb3BzOjpfX2VxdWFsX3RvKCkpOwogICAgIH0KICNlbmRpZiAvLyBDKysxMQog CkBAIC0yMzMzLDcgKzIzNDUsNyBAQCBfR0xJQkNYWF9CRUdJTl9OQU1FU1BBQ0VfQUxHTwog ICAgICAgX19nbGliY3h4X3JlcXVpcmVzX3ZhbGlkX3JhbmdlKF9fZmlyc3QyLCBfX2xhc3Qy KTsKIAogICAgICAgcmV0dXJuIHN0ZDo6X19zZWFyY2goX19maXJzdDEsIF9fbGFzdDEsIF9f Zmlyc3QyLCBfX2xhc3QyLAotCQkJICAgX19nbnVfY3h4OjpfX29wczo6X19pdGVyX2NvbXBf aXRlcihfX3ByZWRpY2F0ZSkpOworCQkJICAgX0dMSUJDWFhfTU9WRShfX3ByZWRpY2F0ZSkp OwogICAgIH0KIAogX0dMSUJDWFhfRU5EX05BTUVTUEFDRV9BTEdPCmRpZmYgLS1naXQgYS9s aWJzdGRjKystdjMvaW5jbHVkZS9iaXRzL3N0bF9oZWFwLmggYi9saWJzdGRjKystdjMvaW5j bHVkZS9iaXRzL3N0bF9oZWFwLmgKaW5kZXggOWMxMjE0YTJiMjEuLjdjNjU2ZmE2NjM3IDEw MDY0NAotLS0gYS9saWJzdGRjKystdjMvaW5jbHVkZS9iaXRzL3N0bF9oZWFwLmgKKysrIGIv bGlic3RkYysrLXYzL2luY2x1ZGUvYml0cy9zdGxfaGVhcC5oCkBAIC03NCwxMiArNzQsMTIg QEAgX0dMSUJDWFhfQkVHSU5fTkFNRVNQQUNFX1ZFUlNJT04KICAgICBfR0xJQkNYWDIwX0NP TlNURVhQUgogICAgIF9EaXN0YW5jZQogICAgIF9faXNfaGVhcF91bnRpbChfUmFuZG9tQWNj ZXNzSXRlcmF0b3IgX19maXJzdCwgX0Rpc3RhbmNlIF9fbiwKLQkJICAgIF9Db21wYXJlJiBf X2NvbXApCisJCSAgICBfR0xJQkNYWF9GV0RSRUYoX0NvbXBhcmUpIF9fY29tcCkKICAgICB7 CiAgICAgICBfRGlzdGFuY2UgX19wYXJlbnQgPSAwOwogICAgICAgZm9yIChfRGlzdGFuY2Ug X19jaGlsZCA9IDE7IF9fY2hpbGQgPCBfX247ICsrX19jaGlsZCkKIAl7Ci0JICBpZiAoX19j b21wKF9fZmlyc3QgKyBfX3BhcmVudCwgX19maXJzdCArIF9fY2hpbGQpKQorCSAgaWYgKF9f Y29tcChfX2ZpcnN0W19fcGFyZW50XSwgX19maXJzdFtfX2NoaWxkXSkpCiAJICAgIHJldHVy biBfX2NoaWxkOwogCSAgaWYgKChfX2NoaWxkICYgMSkgPT0gMCkKIAkgICAgKytfX3BhcmVu dDsKQEAgLTk0LDcgKzk0LDggQEAgX0dMSUJDWFhfQkVHSU5fTkFNRVNQQUNFX1ZFUlNJT04K ICAgICBpbmxpbmUgYm9vbAogICAgIF9faXNfaGVhcChfUmFuZG9tQWNjZXNzSXRlcmF0b3Ig X19maXJzdCwgX0Rpc3RhbmNlIF9fbikKICAgICB7Ci0gICAgICBfX2dudV9jeHg6Ol9fb3Bz OjpfSXRlcl9sZXNzX2l0ZXIgX19jb21wOworICAgICAgX19kZWNsdHlwZShfX2dudV9jeHg6 Ol9fb3BzOjpfX2xlc3MoX19maXJzdCkpIF9fY29tcCA9CisJX19nbnVfY3h4OjpfX29wczo6 X19sZXNzKF9fZmlyc3QpOwogICAgICAgcmV0dXJuIHN0ZDo6X19pc19oZWFwX3VudGlsKF9f Zmlyc3QsIF9fbiwgX19jb21wKSA9PSBfX247CiAgICAgfQogCkBAIC0xMDIsMTEgKzEwMywx MSBAQCBfR0xJQkNYWF9CRUdJTl9OQU1FU1BBQ0VfVkVSU0lPTgogCSAgIHR5cGVuYW1lIF9E aXN0YW5jZT4KICAgICBfR0xJQkNYWDIwX0NPTlNURVhQUgogICAgIGlubGluZSBib29sCi0g ICAgX19pc19oZWFwKF9SYW5kb21BY2Nlc3NJdGVyYXRvciBfX2ZpcnN0LCBfQ29tcGFyZSBf X2NvbXAsIF9EaXN0YW5jZSBfX24pCisgICAgX19pc19oZWFwKF9SYW5kb21BY2Nlc3NJdGVy YXRvciBfX2ZpcnN0LCBfR0xJQkNYWF9GV0RSRUYoX0NvbXBhcmUpIF9fY29tcCwKKwkgICAg ICBfRGlzdGFuY2UgX19uKQogICAgIHsKLSAgICAgIHR5cGVkZWYgX19kZWNsdHlwZShfX2Nv bXApIF9DbXA7Ci0gICAgICBfX2dudV9jeHg6Ol9fb3BzOjpfSXRlcl9jb21wX2l0ZXI8X0Nt cD4gX19jbXAoX0dMSUJDWFhfTU9WRShfX2NvbXApKTsKLSAgICAgIHJldHVybiBzdGQ6Ol9f aXNfaGVhcF91bnRpbChfX2ZpcnN0LCBfX24sIF9fY21wKSA9PSBfX247CisgICAgICByZXR1 cm4gc3RkOjpfX2lzX2hlYXBfdW50aWwKKwkoX19maXJzdCwgX19uLCBfR0xJQkNYWF9GT1JX QVJEKF9Db21wYXJlLCBfX2NvbXApKSA9PSBfX247CiAgICAgfQogCiAgIHRlbXBsYXRlPHR5 cGVuYW1lIF9SYW5kb21BY2Nlc3NJdGVyYXRvcj4KQEAgLTExOSw5ICsxMjAsOSBAQCBfR0xJ QkNYWF9CRUdJTl9OQU1FU1BBQ0VfVkVSU0lPTgogICAgIF9HTElCQ1hYMjBfQ09OU1RFWFBS CiAgICAgaW5saW5lIGJvb2wKICAgICBfX2lzX2hlYXAoX1JhbmRvbUFjY2Vzc0l0ZXJhdG9y IF9fZmlyc3QsIF9SYW5kb21BY2Nlc3NJdGVyYXRvciBfX2xhc3QsCi0JICAgICAgX0NvbXBh cmUgX19jb21wKQorCSAgICAgIF9HTElCQ1hYX0ZXRFJFRihfQ29tcGFyZSkgX19jb21wKQog ICAgIHsKLSAgICAgIHJldHVybiBzdGQ6Ol9faXNfaGVhcChfX2ZpcnN0LCBfR0xJQkNYWF9N T1ZFKF9fY29tcCksCisgICAgICByZXR1cm4gc3RkOjpfX2lzX2hlYXAoX19maXJzdCwgX0dM SUJDWFhfRk9SV0FSRChfQ29tcGFyZSwgX19jb21wKSwKIAkJCSAgICBzdGQ6OmRpc3RhbmNl KF9fZmlyc3QsIF9fbGFzdCkpOwogICAgIH0KIApAQCAtMTM0LDEwICsxMzUsMTAgQEAgX0dM SUJDWFhfQkVHSU5fTkFNRVNQQUNFX1ZFUlNJT04KICAgICB2b2lkCiAgICAgX19wdXNoX2hl YXAoX1JhbmRvbUFjY2Vzc0l0ZXJhdG9yIF9fZmlyc3QsCiAJCV9EaXN0YW5jZSBfX2hvbGVJ bmRleCwgX0Rpc3RhbmNlIF9fdG9wSW5kZXgsIF9UcCBfX3ZhbHVlLAotCQlfQ29tcGFyZSYg X19jb21wKQorCQlfR0xJQkNYWF9GV0RSRUYoX0NvbXBhcmUpIF9fY29tcCkKICAgICB7CiAg ICAgICBfRGlzdGFuY2UgX19wYXJlbnQgPSAoX19ob2xlSW5kZXggLSAxKSAvIDI7Ci0gICAg ICB3aGlsZSAoX19ob2xlSW5kZXggPiBfX3RvcEluZGV4ICYmIF9fY29tcChfX2ZpcnN0ICsg X19wYXJlbnQsIF9fdmFsdWUpKQorICAgICAgd2hpbGUgKF9faG9sZUluZGV4ID4gX190b3BJ bmRleCAmJiBfX2NvbXAoX19maXJzdFtfX3BhcmVudF0sIF9fdmFsdWUpKQogCXsKIAkgICoo X19maXJzdCArIF9faG9sZUluZGV4KSA9IF9HTElCQ1hYX01PVkUoKihfX2ZpcnN0ICsgX19w YXJlbnQpKTsKIAkgIF9faG9sZUluZGV4ID0gX19wYXJlbnQ7CkBAIC0xNzQsOCArMTc1LDkg QEAgX0dMSUJDWFhfQkVHSU5fTkFNRVNQQUNFX1ZFUlNJT04KICAgICAgIF9fZ2xpYmN4eF9y ZXF1aXJlc19pcnJlZmxleGl2ZShfX2ZpcnN0LCBfX2xhc3QpOwogICAgICAgX19nbGliY3h4 X3JlcXVpcmVzX2hlYXAoX19maXJzdCwgX19sYXN0IC0gMSk7CiAKLSAgICAgIF9fZ251X2N4 eDo6X19vcHM6Ol9JdGVyX2xlc3NfdmFsIF9fY29tcDsKICAgICAgIF9WYWx1ZVR5cGUgX192 YWx1ZSA9IF9HTElCQ1hYX01PVkUoKihfX2xhc3QgLSAxKSk7CisgICAgICBfX2RlY2x0eXBl KF9fZ251X2N4eDo6X19vcHM6Ol9fbGVzc192YWwoX19maXJzdCwgX192YWx1ZSkpIF9fY29t cCA9CisJX19nbnVfY3h4OjpfX29wczo6X19sZXNzX3ZhbChfX2ZpcnN0LCBfX3ZhbHVlKTsK ICAgICAgIHN0ZDo6X19wdXNoX2hlYXAoX19maXJzdCwgX0Rpc3RhbmNlVHlwZSgoX19sYXN0 IC0gX19maXJzdCkgLSAxKSwKIAkJICAgICAgIF9EaXN0YW5jZVR5cGUoMCksIF9HTElCQ1hY X01PVkUoX192YWx1ZSksIF9fY29tcCk7CiAgICAgfQpAQCAtMjEwLDExICsyMTIsMTAgQEAg X0dMSUJDWFhfQkVHSU5fTkFNRVNQQUNFX1ZFUlNJT04KICAgICAgIF9fZ2xpYmN4eF9yZXF1 aXJlc19pcnJlZmxleGl2ZV9wcmVkKF9fZmlyc3QsIF9fbGFzdCwgX19jb21wKTsKICAgICAg IF9fZ2xpYmN4eF9yZXF1aXJlc19oZWFwX3ByZWQoX19maXJzdCwgX19sYXN0IC0gMSwgX19j b21wKTsKIAotICAgICAgX19kZWNsdHlwZShfX2dudV9jeHg6Ol9fb3BzOjpfX2l0ZXJfY29t cF92YWwoX0dMSUJDWFhfTU9WRShfX2NvbXApKSkKLQlfX2NtcChfR0xJQkNYWF9NT1ZFKF9f Y29tcCkpOwogICAgICAgX1ZhbHVlVHlwZSBfX3ZhbHVlID0gX0dMSUJDWFhfTU9WRSgqKF9f bGFzdCAtIDEpKTsKICAgICAgIHN0ZDo6X19wdXNoX2hlYXAoX19maXJzdCwgX0Rpc3RhbmNl VHlwZSgoX19sYXN0IC0gX19maXJzdCkgLSAxKSwKLQkJICAgICAgIF9EaXN0YW5jZVR5cGUo MCksIF9HTElCQ1hYX01PVkUoX192YWx1ZSksIF9fY21wKTsKKwkJICAgICAgIF9EaXN0YW5j ZVR5cGUoMCksIF9HTElCQ1hYX01PVkUoX192YWx1ZSksCisJCSAgICAgICBfR0xJQkNYWF9N T1ZFKF9fY29tcCkpOwogICAgIH0KIAogICB0ZW1wbGF0ZTx0eXBlbmFtZSBfUmFuZG9tQWNj ZXNzSXRlcmF0b3IsIHR5cGVuYW1lIF9EaXN0YW5jZSwKQEAgLTIyMiwxNSArMjIzLDE2IEBA IF9HTElCQ1hYX0JFR0lOX05BTUVTUEFDRV9WRVJTSU9OCiAgICAgX0dMSUJDWFgyMF9DT05T VEVYUFIKICAgICB2b2lkCiAgICAgX19hZGp1c3RfaGVhcChfUmFuZG9tQWNjZXNzSXRlcmF0 b3IgX19maXJzdCwgX0Rpc3RhbmNlIF9faG9sZUluZGV4LAotCQkgIF9EaXN0YW5jZSBfX2xl biwgX1RwIF9fdmFsdWUsIF9Db21wYXJlIF9fY29tcCkKKwkJICBfRGlzdGFuY2UgX19sZW4s IF9UcCBfX3ZhbHVlLAorCQkgIF9HTElCQ1hYX0ZXRFJFRihfQ29tcGFyZSkgX19jb21wKQog ICAgIHsKICAgICAgIGNvbnN0IF9EaXN0YW5jZSBfX3RvcEluZGV4ID0gX19ob2xlSW5kZXg7 CiAgICAgICBfRGlzdGFuY2UgX19zZWNvbmRDaGlsZCA9IF9faG9sZUluZGV4OwogICAgICAg d2hpbGUgKF9fc2Vjb25kQ2hpbGQgPCAoX19sZW4gLSAxKSAvIDIpCiAJewogCSAgX19zZWNv bmRDaGlsZCA9IDIgKiAoX19zZWNvbmRDaGlsZCArIDEpOwotCSAgaWYgKF9fY29tcChfX2Zp cnN0ICsgX19zZWNvbmRDaGlsZCwKLQkJICAgICBfX2ZpcnN0ICsgKF9fc2Vjb25kQ2hpbGQg LSAxKSkpCisJICBpZiAoX19jb21wKF9fZmlyc3RbX19zZWNvbmRDaGlsZF0sCisJCSAgICAg X19maXJzdFtfX3NlY29uZENoaWxkIC0gMV0pKQogCSAgICBfX3NlY29uZENoaWxkLS07CiAJ ICAqKF9fZmlyc3QgKyBfX2hvbGVJbmRleCkgPSBfR0xJQkNYWF9NT1ZFKCooX19maXJzdCAr IF9fc2Vjb25kQ2hpbGQpKTsKIAkgIF9faG9sZUluZGV4ID0gX19zZWNvbmRDaGlsZDsKQEAg LTI0MiwxNyArMjQ0LDE5IEBAIF9HTElCQ1hYX0JFR0lOX05BTUVTUEFDRV9WRVJTSU9OCiAJ CQkJCQkgICAgICsgKF9fc2Vjb25kQ2hpbGQgLSAxKSkpOwogCSAgX19ob2xlSW5kZXggPSBf X3NlY29uZENoaWxkIC0gMTsKIAl9Ci0gICAgICBfX2RlY2x0eXBlKF9fZ251X2N4eDo6X19v cHM6Ol9faXRlcl9jb21wX3ZhbChfR0xJQkNYWF9NT1ZFKF9fY29tcCkpKQotCV9fY21wKF9H TElCQ1hYX01PVkUoX19jb21wKSk7Ci0gICAgICBzdGQ6Ol9fcHVzaF9oZWFwKF9fZmlyc3Qs IF9faG9sZUluZGV4LCBfX3RvcEluZGV4LAotCQkgICAgICAgX0dMSUJDWFhfTU9WRShfX3Zh bHVlKSwgX19jbXApOworICAgICAgX19kZWNsdHlwZShfX2dudV9jeHg6Ol9fb3BzOjpfX2xl c3NfdmFsKF9HTElCQ1hYX0ZPUldBUkQoX0NvbXBhcmUsIF9fY29tcCksCisJCQkJCSAgICAg IF9fZmlyc3QsIF9fdmFsdWUpKSBfX2NtcCA9CisJX19nbnVfY3h4OjpfX29wczo6X19sZXNz X3ZhbChfR0xJQkNYWF9GT1JXQVJEKF9Db21wYXJlLCBfX2NvbXApLAorCQkJCSAgICAgX19m aXJzdCwgX192YWx1ZSk7CisgICAgICBzdGQ6Ol9fcHVzaF9oZWFwKF9fZmlyc3QsIF9faG9s ZUluZGV4LCBfX3RvcEluZGV4LCBfR0xJQkNYWF9NT1ZFKF9fdmFsdWUpLAorCQkgICAgICAg X0dMSUJDWFhfRk9SV0FSRChfQ29tcGFyZSwgX19jbXApKTsKICAgICB9CiAKICAgdGVtcGxh dGU8dHlwZW5hbWUgX1JhbmRvbUFjY2Vzc0l0ZXJhdG9yLCB0eXBlbmFtZSBfQ29tcGFyZT4K ICAgICBfR0xJQkNYWDIwX0NPTlNURVhQUgogICAgIGlubGluZSB2b2lkCiAgICAgX19wb3Bf aGVhcChfUmFuZG9tQWNjZXNzSXRlcmF0b3IgX19maXJzdCwgX1JhbmRvbUFjY2Vzc0l0ZXJh dG9yIF9fbGFzdCwKLQkgICAgICAgX1JhbmRvbUFjY2Vzc0l0ZXJhdG9yIF9fcmVzdWx0LCBf Q29tcGFyZSYgX19jb21wKQorCSAgICAgICBfUmFuZG9tQWNjZXNzSXRlcmF0b3IgX19yZXN1 bHQsIF9HTElCQ1hYX0ZXRFJFRihfQ29tcGFyZSkgX19jb21wKQogICAgIHsKICAgICAgIHR5 cGVkZWYgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9SYW5kb21BY2Nlc3NJdGVyYXRvcj46 OnZhbHVlX3R5cGUKIAlfVmFsdWVUeXBlOwpAQCAtMjYxLDkgKzI2NSw5IEBAIF9HTElCQ1hY X0JFR0lOX05BTUVTUEFDRV9WRVJTSU9OCiAKICAgICAgIF9WYWx1ZVR5cGUgX192YWx1ZSA9 IF9HTElCQ1hYX01PVkUoKl9fcmVzdWx0KTsKICAgICAgICpfX3Jlc3VsdCA9IF9HTElCQ1hY X01PVkUoKl9fZmlyc3QpOwotICAgICAgc3RkOjpfX2FkanVzdF9oZWFwKF9fZmlyc3QsIF9E aXN0YW5jZVR5cGUoMCksCi0JCQkgX0Rpc3RhbmNlVHlwZShfX2xhc3QgLSBfX2ZpcnN0KSwK LQkJCSBfR0xJQkNYWF9NT1ZFKF9fdmFsdWUpLCBfX2NvbXApOworICAgICAgc3RkOjpfX2Fk anVzdF9oZWFwCisJKF9fZmlyc3QsIF9EaXN0YW5jZVR5cGUoMCksIF9EaXN0YW5jZVR5cGUo X19sYXN0IC0gX19maXJzdCksCisJIF9HTElCQ1hYX01PVkUoX192YWx1ZSksIF9HTElCQ1hY X0ZPUldBUkQoX0NvbXBhcmUsIF9fY29tcCkpOwogICAgIH0KIAogICAvKioKQEAgLTI5NSw3 ICsyOTksOCBAQCBfR0xJQkNYWF9CRUdJTl9OQU1FU1BBQ0VfVkVSU0lPTgogICAgICAgaWYg KF9fbGFzdCAtIF9fZmlyc3QgPiAxKQogCXsKIAkgIC0tX19sYXN0OwotCSAgX19nbnVfY3h4 OjpfX29wczo6X0l0ZXJfbGVzc19pdGVyIF9fY29tcDsKKwkgIF9fZGVjbHR5cGUoX19nbnVf Y3h4OjpfX29wczo6X19sZXNzKF9fZmlyc3QpKSBfX2NvbXAgPQorCSAgICBfX2dudV9jeHg6 Ol9fb3BzOjpfX2xlc3MoX19maXJzdCk7CiAJICBzdGQ6Ol9fcG9wX2hlYXAoX19maXJzdCwg X19sYXN0LCBfX2xhc3QsIF9fY29tcCk7CiAJfQogICAgIH0KQEAgLTMyNywxMCArMzMyLDgg QEAgX0dMSUJDWFhfQkVHSU5fTkFNRVNQQUNFX1ZFUlNJT04KIAogICAgICAgaWYgKF9fbGFz dCAtIF9fZmlyc3QgPiAxKQogCXsKLQkgIHR5cGVkZWYgX19kZWNsdHlwZShfX2NvbXApIF9D bXA7Ci0JICBfX2dudV9jeHg6Ol9fb3BzOjpfSXRlcl9jb21wX2l0ZXI8X0NtcD4gX19jbXAo X0dMSUJDWFhfTU9WRShfX2NvbXApKTsKIAkgIC0tX19sYXN0OwotCSAgc3RkOjpfX3BvcF9o ZWFwKF9fZmlyc3QsIF9fbGFzdCwgX19sYXN0LCBfX2NtcCk7CisJICBzdGQ6Ol9fcG9wX2hl YXAoX19maXJzdCwgX19sYXN0LCBfX2xhc3QsIF9HTElCQ1hYX01PVkUoX19jb21wKSk7CiAJ fQogICAgIH0KIApAQCAtMzM4LDcgKzM0MSw3IEBAIF9HTElCQ1hYX0JFR0lOX05BTUVTUEFD RV9WRVJTSU9OCiAgICAgX0dMSUJDWFgyMF9DT05TVEVYUFIKICAgICB2b2lkCiAgICAgX19t YWtlX2hlYXAoX1JhbmRvbUFjY2Vzc0l0ZXJhdG9yIF9fZmlyc3QsIF9SYW5kb21BY2Nlc3NJ dGVyYXRvciBfX2xhc3QsCi0JCV9Db21wYXJlJiBfX2NvbXApCisJCV9HTElCQ1hYX0ZXRFJF RihfQ29tcGFyZSkgX19jb21wKQogICAgIHsKICAgICAgIHR5cGVkZWYgdHlwZW5hbWUgaXRl cmF0b3JfdHJhaXRzPF9SYW5kb21BY2Nlc3NJdGVyYXRvcj46OnZhbHVlX3R5cGUKIAkgIF9W YWx1ZVR5cGU7CkBAIC0zODIsNyArMzg1LDggQEAgX0dMSUJDWFhfQkVHSU5fTkFNRVNQQUNF X1ZFUlNJT04KICAgICAgIF9fZ2xpYmN4eF9yZXF1aXJlc192YWxpZF9yYW5nZShfX2ZpcnN0 LCBfX2xhc3QpOwogICAgICAgX19nbGliY3h4X3JlcXVpcmVzX2lycmVmbGV4aXZlKF9fZmly c3QsIF9fbGFzdCk7CiAKLSAgICAgIF9fZ251X2N4eDo6X19vcHM6Ol9JdGVyX2xlc3NfaXRl ciBfX2NvbXA7CisgICAgICBfX2RlY2x0eXBlKF9fZ251X2N4eDo6X19vcHM6Ol9fbGVzcyhf X2ZpcnN0KSkgX19jb21wID0KKwlfX2dudV9jeHg6Ol9fb3BzOjpfX2xlc3MoX19maXJzdCk7 CiAgICAgICBzdGQ6Ol9fbWFrZV9oZWFwKF9fZmlyc3QsIF9fbGFzdCwgX19jb21wKTsKICAg ICB9CiAKQEAgLTQwOCwxNiArNDEyLDE0IEBAIF9HTElCQ1hYX0JFR0lOX05BTUVTUEFDRV9W RVJTSU9OCiAgICAgICBfX2dsaWJjeHhfcmVxdWlyZXNfdmFsaWRfcmFuZ2UoX19maXJzdCwg X19sYXN0KTsKICAgICAgIF9fZ2xpYmN4eF9yZXF1aXJlc19pcnJlZmxleGl2ZV9wcmVkKF9f Zmlyc3QsIF9fbGFzdCwgX19jb21wKTsKIAotICAgICAgdHlwZWRlZiBfX2RlY2x0eXBlKF9f Y29tcCkgX0NtcDsKLSAgICAgIF9fZ251X2N4eDo6X19vcHM6Ol9JdGVyX2NvbXBfaXRlcjxf Q21wPiBfX2NtcChfR0xJQkNYWF9NT1ZFKF9fY29tcCkpOwotICAgICAgc3RkOjpfX21ha2Vf aGVhcChfX2ZpcnN0LCBfX2xhc3QsIF9fY21wKTsKKyAgICAgIHN0ZDo6X19tYWtlX2hlYXAo X19maXJzdCwgX19sYXN0LCBfR0xJQkNYWF9NT1ZFKF9fY29tcCkpOwogICAgIH0KIAogICB0 ZW1wbGF0ZTx0eXBlbmFtZSBfUmFuZG9tQWNjZXNzSXRlcmF0b3IsIHR5cGVuYW1lIF9Db21w YXJlPgogICAgIF9HTElCQ1hYMjBfQ09OU1RFWFBSCiAgICAgdm9pZAogICAgIF9fc29ydF9o ZWFwKF9SYW5kb21BY2Nlc3NJdGVyYXRvciBfX2ZpcnN0LCBfUmFuZG9tQWNjZXNzSXRlcmF0 b3IgX19sYXN0LAotCQlfQ29tcGFyZSYgX19jb21wKQorCQlfR0xJQkNYWF9GV0RSRUYoX0Nv bXBhcmUpIF9fY29tcCkKICAgICB7CiAgICAgICB3aGlsZSAoX19sYXN0IC0gX19maXJzdCA+ IDEpCiAJewpAQCAtNDQ4LDcgKzQ1MCw4IEBAIF9HTElCQ1hYX0JFR0lOX05BTUVTUEFDRV9W RVJTSU9OCiAgICAgICBfX2dsaWJjeHhfcmVxdWlyZXNfaXJyZWZsZXhpdmUoX19maXJzdCwg X19sYXN0KTsKICAgICAgIF9fZ2xpYmN4eF9yZXF1aXJlc19oZWFwKF9fZmlyc3QsIF9fbGFz dCk7CiAKLSAgICAgIF9fZ251X2N4eDo6X19vcHM6Ol9JdGVyX2xlc3NfaXRlciBfX2NvbXA7 CisgICAgICBfX2RlY2x0eXBlKF9fZ251X2N4eDo6X19vcHM6Ol9fbGVzcyhfX2ZpcnN0KSkg X19jb21wID0KKwlfX2dudV9jeHg6Ol9fb3BzOjpfX2xlc3MoX19maXJzdCk7CiAgICAgICBz dGQ6Ol9fc29ydF9oZWFwKF9fZmlyc3QsIF9fbGFzdCwgX19jb21wKTsKICAgICB9CiAKQEAg LTQ3NSw5ICs0NzgsNyBAQCBfR0xJQkNYWF9CRUdJTl9OQU1FU1BBQ0VfVkVSU0lPTgogICAg ICAgX19nbGliY3h4X3JlcXVpcmVzX2lycmVmbGV4aXZlX3ByZWQoX19maXJzdCwgX19sYXN0 LCBfX2NvbXApOwogICAgICAgX19nbGliY3h4X3JlcXVpcmVzX2hlYXBfcHJlZChfX2ZpcnN0 LCBfX2xhc3QsIF9fY29tcCk7CiAKLSAgICAgIHR5cGVkZWYgX19kZWNsdHlwZShfX2NvbXAp IF9DbXA7Ci0gICAgICBfX2dudV9jeHg6Ol9fb3BzOjpfSXRlcl9jb21wX2l0ZXI8X0NtcD4g X19jbXAoX0dMSUJDWFhfTU9WRShfX2NvbXApKTsKLSAgICAgIHN0ZDo6X19zb3J0X2hlYXAo X19maXJzdCwgX19sYXN0LCBfX2NtcCk7CisgICAgICBzdGQ6Ol9fc29ydF9oZWFwKF9fZmly c3QsIF9fbGFzdCwgX0dMSUJDWFhfTU9WRShfX2NvbXApKTsKICAgICB9CiAKICNpZiBfX2Nw bHVzcGx1cyA+PSAyMDExMDNMCkBAIC01MDQsOSArNTA1LDkgQEAgX0dMSUJDWFhfQkVHSU5f TkFNRVNQQUNFX1ZFUlNJT04KICAgICAgIF9fZ2xpYmN4eF9yZXF1aXJlc192YWxpZF9yYW5n ZShfX2ZpcnN0LCBfX2xhc3QpOwogICAgICAgX19nbGliY3h4X3JlcXVpcmVzX2lycmVmbGV4 aXZlKF9fZmlyc3QsIF9fbGFzdCk7CiAKLSAgICAgIF9fZ251X2N4eDo6X19vcHM6Ol9JdGVy X2xlc3NfaXRlciBfX2NvbXA7CiAgICAgICByZXR1cm4gX19maXJzdCArIAotCXN0ZDo6X19p c19oZWFwX3VudGlsKF9fZmlyc3QsIHN0ZDo6ZGlzdGFuY2UoX19maXJzdCwgX19sYXN0KSwg X19jb21wKTsKKwlzdGQ6Ol9faXNfaGVhcF91bnRpbChfX2ZpcnN0LCBzdGQ6OmRpc3RhbmNl KF9fZmlyc3QsIF9fbGFzdCksCisJCQkgICAgIF9fZ251X2N4eDo6X19vcHM6Ol9fbGVzcygp KTsKICAgICB9CiAKICAgLyoqCkBAIC01MzIsMTAgKzUzMyw5IEBAIF9HTElCQ1hYX0JFR0lO X05BTUVTUEFDRV9WRVJTSU9OCiAgICAgICBfX2dsaWJjeHhfcmVxdWlyZXNfdmFsaWRfcmFu Z2UoX19maXJzdCwgX19sYXN0KTsKICAgICAgIF9fZ2xpYmN4eF9yZXF1aXJlc19pcnJlZmxl eGl2ZV9wcmVkKF9fZmlyc3QsIF9fbGFzdCwgX19jb21wKTsKIAotICAgICAgdHlwZWRlZiBf X2RlY2x0eXBlKF9fY29tcCkgX0NtcDsKLSAgICAgIF9fZ251X2N4eDo6X19vcHM6Ol9JdGVy X2NvbXBfaXRlcjxfQ21wPiBfX2NtcChfR0xJQkNYWF9NT1ZFKF9fY29tcCkpOwogICAgICAg cmV0dXJuIF9fZmlyc3QKLQkrIHN0ZDo6X19pc19oZWFwX3VudGlsKF9fZmlyc3QsIHN0ZDo6 ZGlzdGFuY2UoX19maXJzdCwgX19sYXN0KSwgX19jbXApOworCSsgc3RkOjpfX2lzX2hlYXBf dW50aWwoX19maXJzdCwgc3RkOjpkaXN0YW5jZShfX2ZpcnN0LCBfX2xhc3QpLAorCQkJICAg ICAgIHN0ZDo6bW92ZShfX2NvbXApKTsKICAgICB9CiAKICAgLyoqCkBAIC01NzIsMTEgKzU3 MiwxMCBAQCBfR0xJQkNYWF9CRUdJTl9OQU1FU1BBQ0VfVkVSU0lPTgogICAgICAgX19nbGli Y3h4X3JlcXVpcmVzX2lycmVmbGV4aXZlX3ByZWQoX19maXJzdCwgX19sYXN0LCBfX2NvbXAp OwogCiAgICAgICBjb25zdCBhdXRvIF9fZGlzdCA9IHN0ZDo6ZGlzdGFuY2UoX19maXJzdCwg X19sYXN0KTsKLSAgICAgIHR5cGVkZWYgX19kZWNsdHlwZShfX2NvbXApIF9DbXA7Ci0gICAg ICBfX2dudV9jeHg6Ol9fb3BzOjpfSXRlcl9jb21wX2l0ZXI8X0NtcD4gX19jbXAoX0dMSUJD WFhfTU9WRShfX2NvbXApKTsKLSAgICAgIHJldHVybiBzdGQ6Ol9faXNfaGVhcF91bnRpbChf X2ZpcnN0LCBfX2Rpc3QsIF9fY21wKSA9PSBfX2Rpc3Q7CisgICAgICByZXR1cm4gc3RkOjpf X2lzX2hlYXBfdW50aWwoX19maXJzdCwgX19kaXN0LAorCQkJCSAgc3RkOjptb3ZlKF9fY29t cCkpID09IF9fZGlzdDsKICAgICB9Ci0jZW5kaWYKKyNlbmRpZiAvLyBDKysxMQogCiBfR0xJ QkNYWF9FTkRfTkFNRVNQQUNFX1ZFUlNJT04KIH0gLy8gbmFtZXNwYWNlCmRpZmYgLS1naXQg YS9saWJzdGRjKystdjMvaW5jbHVkZS9iaXRzL3N0bF90cmVlLmggYi9saWJzdGRjKystdjMv aW5jbHVkZS9iaXRzL3N0bF90cmVlLmgKaW5kZXggOTc4MDkzZmM1ODcuLjljN2VjOGE0NzFi IDEwMDY0NAotLS0gYS9saWJzdGRjKystdjMvaW5jbHVkZS9iaXRzL3N0bF90cmVlLmgKKysr IGIvbGlic3RkYysrLXYzL2luY2x1ZGUvYml0cy9zdGxfdHJlZS5oCkBAIC00NjEsNyArNDYx LDcgQEAgX0dMSUJDWFhfQkVHSU5fTkFNRVNQQUNFX1ZFUlNJT04KIAogCXRlbXBsYXRlPHR5 cGVuYW1lIF9Bcmc+CiAJICBfTGlua190eXBlCi0JICBvcGVyYXRvcigpKF9HTElCQ1hYX0ZX RFJFRihfQXJnKSBfX2FyZykKKwkgIG9wZXJhdG9yKCkoX0dMSUJDWFhfRldEQ1JFRihfQXJn KSBfX2FyZykKIAkgIHsKIAkgICAgX0xpbmtfdHlwZSBfX25vZGUgPSBzdGF0aWNfY2FzdDxf TGlua190eXBlPihfTV9leHRyYWN0KCkpOwogCSAgICBpZiAoX19ub2RlKQpAQCAtNTIzLDcg KzUyMyw3IEBAIF9HTElCQ1hYX0JFR0lOX05BTUVTUEFDRV9WRVJTSU9OCiAKIAl0ZW1wbGF0 ZTx0eXBlbmFtZSBfQXJnPgogCSAgX0xpbmtfdHlwZQotCSAgb3BlcmF0b3IoKShfR0xJQkNY WF9GV0RSRUYoX0FyZykgX19hcmcpIGNvbnN0CisJICBvcGVyYXRvcigpKF9HTElCQ1hYX0ZX RENSRUYoX0FyZykgX19hcmcpIGNvbnN0CiAJICB7IHJldHVybiBfTV90Ll9NX2NyZWF0ZV9u b2RlKF9HTElCQ1hYX0ZPUldBUkQoX0FyZywgX19hcmcpKTsgfQogCiAgICAgICBwcml2YXRl OgpkaWZmIC0tZ2l0IGEvbGlic3RkYysrLXYzL2luY2x1ZGUvc3RkL2RlcXVlIGIvbGlic3Rk YysrLXYzL2luY2x1ZGUvc3RkL2RlcXVlCmluZGV4IDBiZjgzMDljMTlhLi44ZTBmMmM5Njlj NCAxMDA2NDQKLS0tIGEvbGlic3RkYysrLXYzL2luY2x1ZGUvc3RkL2RlcXVlCisrKyBiL2xp YnN0ZGMrKy12My9pbmNsdWRlL3N0ZC9kZXF1ZQpAQCAtNjQsNyArNjQsNyBAQAogI2luY2x1 ZGUgPGJpdHMvc3RsX2NvbnN0cnVjdC5oPgogI2luY2x1ZGUgPGJpdHMvc3RsX3VuaW5pdGlh bGl6ZWQuaD4KICNpbmNsdWRlIDxiaXRzL3N0bF9kZXF1ZS5oPgotI2luY2x1ZGUgPGJpdHMv cmVmd3JhcC5oPgorI2luY2x1ZGUgPGJpdHMvbW92ZS5oPgogI2luY2x1ZGUgPGJpdHMvcmFu Z2VfYWNjZXNzLmg+CiAjaW5jbHVkZSA8Yml0cy9kZXF1ZS50Y2M+CiAKQEAgLTk5LDEyICs5 OSwxMSBAQCBfR0xJQkNYWF9CRUdJTl9OQU1FU1BBQ0VfVkVSU0lPTgogICAgIGlubGluZSB0 eXBlbmFtZSBkZXF1ZTxfVHAsIF9BbGxvYz46OnNpemVfdHlwZQogICAgIGVyYXNlX2lmKGRl cXVlPF9UcCwgX0FsbG9jPiYgX19jb250LCBfUHJlZGljYXRlIF9fcHJlZCkKICAgICB7Ci0g ICAgICB1c2luZyBuYW1lc3BhY2UgX19nbnVfY3h4OwogICAgICAgX0dMSUJDWFhfU1REX0M6 OmRlcXVlPF9UcCwgX0FsbG9jPiYgX191Y29udCA9IF9fY29udDsKICAgICAgIGNvbnN0IGF1 dG8gX19vc3ogPSBfX2NvbnQuc2l6ZSgpOwogICAgICAgY29uc3QgYXV0byBfX2VuZCA9IF9f dWNvbnQuZW5kKCk7CiAgICAgICBhdXRvIF9fcmVtb3ZlZCA9IHN0ZDo6X19yZW1vdmVfaWYo X191Y29udC5iZWdpbigpLCBfX2VuZCwKLQkJCQkJX19vcHM6Ol9fcHJlZF9pdGVyKHN0ZDo6 cmVmKF9fcHJlZCkpKTsKKwkJCQkJc3RkOjptb3ZlKF9fcHJlZCkpOwogICAgICAgaWYgKF9f cmVtb3ZlZCAhPSBfX2VuZCkKIAl7CiAJICBfX2NvbnQuZXJhc2UoX19uaXRlcl93cmFwKF9f Y29udC5iZWdpbigpLCBfX3JlbW92ZWQpLApAQCAtMTI0LDcgKzEyMyw3IEBAIF9HTElCQ1hY X0JFR0lOX05BTUVTUEFDRV9WRVJTSU9OCiAgICAgICBjb25zdCBhdXRvIF9fb3N6ID0gX19j b250LnNpemUoKTsKICAgICAgIGNvbnN0IGF1dG8gX19lbmQgPSBfX3Vjb250LmVuZCgpOwog ICAgICAgYXV0byBfX3JlbW92ZWQgPSBzdGQ6Ol9fcmVtb3ZlX2lmKF9fdWNvbnQuYmVnaW4o KSwgX19lbmQsCi0JCQkJCV9fb3BzOjpfX2l0ZXJfZXF1YWxzX3ZhbChfX3ZhbHVlKSk7CisJ CQkJCV9fb3BzOjpfX2VxdWFsX3RvX3ZhbChfX3ZhbHVlKSk7CiAgICAgICBpZiAoX19yZW1v dmVkICE9IF9fZW5kKQogCXsKIAkgIF9fY29udC5lcmFzZShfX25pdGVyX3dyYXAoX19jb250 LmJlZ2luKCksIF9fcmVtb3ZlZCksCmRpZmYgLS1naXQgYS9saWJzdGRjKystdjMvaW5jbHVk ZS9zdGQvZnVuY3Rpb25hbCBiL2xpYnN0ZGMrKy12My9pbmNsdWRlL3N0ZC9mdW5jdGlvbmFs CmluZGV4IDc2NjU1OGIzY2UwLi4xZDZjNWMyYjRmOCAxMDA2NDQKLS0tIGEvbGlic3RkYysr LXYzL2luY2x1ZGUvc3RkL2Z1bmN0aW9uYWwKKysrIGIvbGlic3RkYysrLXYzL2luY2x1ZGUv c3RkL2Z1bmN0aW9uYWwKQEAgLTU4LDYgKzU4LDkgQEAKICNpZiBfR0xJQkNYWF9IT1NURUQK ICMgaW5jbHVkZSA8Yml0cy9zdGRfZnVuY3Rpb24uaD4JLy8gc3RkOjpmdW5jdGlvbgogI2Vu ZGlmCisjaWYgX19jcGx1c3BsdXMgPj0gMjAxNDAyTAorIyBpbmNsdWRlIDxiaXRzL3ByZWRl ZmluZWRfb3BzLmg+IC8vIHN0ZDo6X05vdF9mbgorI2VuZGlmCiAjaWYgX19jcGx1c3BsdXMg Pj0gMjAxNzAzTAogIyBpZiBfR0xJQkNYWF9IT1NURUQKICMgIGluY2x1ZGUgPHVub3JkZXJl ZF9tYXA+CkBAIC0xMTE2LDU3ICsxMTE5LDYgQEAgX0dMSUJDWFhfQkVHSU5fTkFNRVNQQUNF X1ZFUlNJT04KICNlbmRpZiAvLyBfX2NwcF9saWJfYmluZF9iYWNrCiAKICNpZiBfX2NwbHVz cGx1cyA+PSAyMDE0MDJMCi0gIC8vLyBHZW5lcmFsaXplZCBuZWdhdG9yLgotICB0ZW1wbGF0 ZTx0eXBlbmFtZSBfRm4+Ci0gICAgY2xhc3MgX05vdF9mbgotICAgIHsKLSAgICAgIHRlbXBs YXRlPHR5cGVuYW1lIF9GbjIsIHR5cGVuYW1lLi4uIF9BcmdzPgotCXVzaW5nIF9faW52X3Jl c190ID0gdHlwZW5hbWUgX19pbnZva2VfcmVzdWx0PF9GbjIsIF9BcmdzLi4uPjo6dHlwZTsK LQotICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwPgotCXN0YXRpYyBkZWNsdHlwZSghc3Rk OjpkZWNsdmFsPF9UcD4oKSkKLQlfU19ub3QoKSBub2V4Y2VwdChub2V4Y2VwdCghc3RkOjpk ZWNsdmFsPF9UcD4oKSkpOwotCi0gICAgcHVibGljOgotICAgICAgdGVtcGxhdGU8dHlwZW5h bWUgX0ZuMj4KLQljb25zdGV4cHIKLQlfTm90X2ZuKF9GbjImJiBfX2ZuLCBpbnQpCi0JOiBf TV9mbihzdGQ6OmZvcndhcmQ8X0ZuMj4oX19mbikpIHsgfQotCi0gICAgICBfTm90X2ZuKGNv bnN0IF9Ob3RfZm4mIF9fZm4pID0gZGVmYXVsdDsKLSAgICAgIF9Ob3RfZm4oX05vdF9mbiYm IF9fZm4pID0gZGVmYXVsdDsKLSAgICAgIH5fTm90X2ZuKCkgPSBkZWZhdWx0OwotCi0gICAg ICAvLyBNYWNybyB0byBkZWZpbmUgb3BlcmF0b3IoKSB3aXRoIGdpdmVuIGN2LXF1YWxpZmll cnMgcmVmLXF1YWxpZmllcnMsCi0gICAgICAvLyBmb3J3YXJkaW5nIF9NX2ZuIGFuZCB0aGUg ZnVuY3Rpb24gYXJndW1lbnRzIHdpdGggdGhlIHNhbWUgcXVhbGlmaWVycywKLSAgICAgIC8v IGFuZCBkZWR1Y2luZyB0aGUgcmV0dXJuIHR5cGUgYW5kIGV4Y2VwdGlvbi1zcGVjaWZpY2F0 aW9uLgotI2RlZmluZSBfR0xJQkNYWF9OT1RfRk5fQ0FMTF9PUCggX1FVQUxTICkJCQkJXAot ICAgICAgdGVtcGxhdGU8dHlwZW5hbWUuLi4gX0FyZ3MsCQkJCQlcCi0JICAgICAgIHR5cGVu YW1lID0gZW5hYmxlX2lmX3Q8X19pc19pbnZvY2FibGU8X0ZuIF9RVUFMUywgX0FyZ3MuLi4+ Ojp2YWx1ZT4+IFwKLQlfR0xJQkNYWDIwX0NPTlNURVhQUgkJCQkJCVwKLQlkZWNsdHlwZShf U19ub3Q8X19pbnZfcmVzX3Q8X0ZuIF9RVUFMUywgX0FyZ3MuLi4+PigpKQkJXAotCW9wZXJh dG9yKCkoX0FyZ3MmJi4uLiBfX2FyZ3MpIF9RVUFMUwkJCQlcCi0Jbm9leGNlcHQoX19pc19u b3Rocm93X2ludm9jYWJsZTxfRm4gX1FVQUxTLCBfQXJncy4uLj46OnZhbHVlCVwKLQkgICAg JiYgbm9leGNlcHQoX1Nfbm90PF9faW52X3Jlc190PF9GbiBfUVVBTFMsIF9BcmdzLi4uPj4o KSkpCVwKLQl7CQkJCQkJCQlcCi0JICByZXR1cm4gIXN0ZDo6X19pbnZva2Uoc3RkOjpmb3J3 YXJkPCBfRm4gX1FVQUxTID4oX01fZm4pLAlcCi0JCQkJc3RkOjpmb3J3YXJkPF9BcmdzPihf X2FyZ3MpLi4uKTsJXAotCX0JCQkJCQkJCVwKLQkJCQkJCQkJCVwKLSAgICAgIHRlbXBsYXRl PHR5cGVuYW1lLi4uIF9BcmdzLAkJCQkJXAotCSAgICAgICB0eXBlbmFtZSA9IGVuYWJsZV9p Zl90PCFfX2lzX2ludm9jYWJsZTxfRm4gX1FVQUxTLCBfQXJncy4uLj46OnZhbHVlPj4gXAot CXZvaWQgb3BlcmF0b3IoKShfQXJncyYmLi4uIF9fYXJncykgX1FVQUxTID0gZGVsZXRlOwot Ci0gICAgICBfR0xJQkNYWF9OT1RfRk5fQ0FMTF9PUCggJiApCi0gICAgICBfR0xJQkNYWF9O T1RfRk5fQ0FMTF9PUCggY29uc3QgJiApCi0gICAgICBfR0xJQkNYWF9OT1RfRk5fQ0FMTF9P UCggJiYgKQotICAgICAgX0dMSUJDWFhfTk9UX0ZOX0NBTExfT1AoIGNvbnN0ICYmICkKLSN1 bmRlZiBfR0xJQkNYWF9OT1RfRk5fQ0FMTF9PUAotCi0gICAgcHJpdmF0ZToKLSAgICAgIF9G biBfTV9mbjsKLSAgICB9OwotCiAgIHRlbXBsYXRlPHR5cGVuYW1lIF9UcCwgdHlwZW5hbWUg X1ByZWQ+CiAgICAgc3RydWN0IF9faXNfYnl0ZV9saWtlIDogZmFsc2VfdHlwZSB7IH07CiAK ZGlmZiAtLWdpdCBhL2xpYnN0ZGMrKy12My9pbmNsdWRlL3N0ZC9zdHJpbmcgYi9saWJzdGRj KystdjMvaW5jbHVkZS9zdGQvc3RyaW5nCmluZGV4IDU1MTQ0NDA5Y2NhLi5iN2QwNmY5ZDM3 YiAxMDA2NDQKLS0tIGEvbGlic3RkYysrLXYzL2luY2x1ZGUvc3RkL3N0cmluZworKysgYi9s aWJzdGRjKystdjMvaW5jbHVkZS9zdGQvc3RyaW5nCkBAIC00OSw3ICs0OSw3IEBACiAjaW5j bHVkZSA8Yml0cy9zdGxfZnVuY3Rpb24uaD4gLy8gRm9yIGxlc3MKICNpbmNsdWRlIDxleHQv bnVtZXJpY190cmFpdHMuaD4KICNpbmNsdWRlIDxiaXRzL3N0bF9hbGdvYmFzZS5oPgotI2lu Y2x1ZGUgPGJpdHMvcmVmd3JhcC5oPgorI2luY2x1ZGUgPGJpdHMvbW92ZS5oPgogI2luY2x1 ZGUgPGJpdHMvcmFuZ2VfYWNjZXNzLmg+CiAjaW5jbHVkZSA8Yml0cy9iYXNpY19zdHJpbmcu aD4KICNpbmNsdWRlIDxiaXRzL2Jhc2ljX3N0cmluZy50Y2M+CkBAIC05NSwxMSArOTUsMTAg QEAgX0dMSUJDWFhfQkVHSU5fTkFNRVNQQUNFX1ZFUlNJT04KICAgICBpbmxpbmUgdHlwZW5h bWUgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPjo6c2l6ZV90eXBlCiAg ICAgZXJhc2VfaWYoYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPiYgX19j b250LCBfUHJlZGljYXRlIF9fcHJlZCkKICAgICB7Ci0gICAgICB1c2luZyBuYW1lc3BhY2Ug X19nbnVfY3h4OwogICAgICAgY29uc3QgYXV0byBfX29zeiA9IF9fY29udC5zaXplKCk7CiAg ICAgICBjb25zdCBhdXRvIF9fZW5kID0gX19jb250LmVuZCgpOwogICAgICAgYXV0byBfX3Jl bW92ZWQgPSBzdGQ6Ol9fcmVtb3ZlX2lmKF9fY29udC5iZWdpbigpLCBfX2VuZCwKLQkJCQkJ X19vcHM6Ol9fcHJlZF9pdGVyKHN0ZDo6cmVmKF9fcHJlZCkpKTsKKwkJCQkJc3RkOjptb3Zl KF9fcHJlZCkpOwogICAgICAgX19jb250LmVyYXNlKF9fcmVtb3ZlZCwgX19lbmQpOwogICAg ICAgcmV0dXJuIF9fb3N6IC0gX19jb250LnNpemUoKTsKICAgICB9CkBAIC0xMTMsNyArMTEy LDcgQEAgX0dMSUJDWFhfQkVHSU5fTkFNRVNQQUNFX1ZFUlNJT04KICAgICAgIGNvbnN0IGF1 dG8gX19vc3ogPSBfX2NvbnQuc2l6ZSgpOwogICAgICAgY29uc3QgYXV0byBfX2VuZCA9IF9f Y29udC5lbmQoKTsKICAgICAgIGF1dG8gX19yZW1vdmVkID0gc3RkOjpfX3JlbW92ZV9pZihf X2NvbnQuYmVnaW4oKSwgX19lbmQsCi0JCQkJCV9fb3BzOjpfX2l0ZXJfZXF1YWxzX3ZhbChf X3ZhbHVlKSk7CisJCQkJCV9fb3BzOjpfX2VxdWFsX3RvKF9fdmFsdWUpKTsKICAgICAgIF9f Y29udC5lcmFzZShfX3JlbW92ZWQsIF9fZW5kKTsKICAgICAgIHJldHVybiBfX29zeiAtIF9f Y29udC5zaXplKCk7CiAgICAgfQpkaWZmIC0tZ2l0IGEvbGlic3RkYysrLXYzL2luY2x1ZGUv c3RkL3ZlY3RvciBiL2xpYnN0ZGMrKy12My9pbmNsdWRlL3N0ZC92ZWN0b3IKaW5kZXggYTFm N2VmODY4MjQuLjg3NzYyNzQ4M2JlIDEwMDY0NAotLS0gYS9saWJzdGRjKystdjMvaW5jbHVk ZS9zdGQvdmVjdG9yCisrKyBiL2xpYnN0ZGMrKy12My9pbmNsdWRlL3N0ZC92ZWN0b3IKQEAg LTY1LDcgKzY1LDcgQEAKICNpbmNsdWRlIDxiaXRzL3N0bF91bmluaXRpYWxpemVkLmg+CiAj aW5jbHVkZSA8Yml0cy9zdGxfdmVjdG9yLmg+CiAjaW5jbHVkZSA8Yml0cy9zdGxfYnZlY3Rv ci5oPgotI2luY2x1ZGUgPGJpdHMvcmVmd3JhcC5oPgorI2luY2x1ZGUgPGJpdHMvbW92ZS5o PgogI2luY2x1ZGUgPGJpdHMvcmFuZ2VfYWNjZXNzLmg+CiAKICNpZm5kZWYgX0dMSUJDWFhf RVhQT1JUX1RFTVBMQVRFCkBAIC0xMTIsMTIgKzExMiwxMSBAQCBfR0xJQkNYWF9CRUdJTl9O QU1FU1BBQ0VfVkVSU0lPTgogICAgIGlubGluZSB0eXBlbmFtZSB2ZWN0b3I8X1RwLCBfQWxs b2M+OjpzaXplX3R5cGUKICAgICBlcmFzZV9pZih2ZWN0b3I8X1RwLCBfQWxsb2M+JiBfX2Nv bnQsIF9QcmVkaWNhdGUgX19wcmVkKQogICAgIHsKLSAgICAgIHVzaW5nIG5hbWVzcGFjZSBf X2dudV9jeHg7CiAgICAgICBfR0xJQkNYWF9TVERfQzo6dmVjdG9yPF9UcCwgX0FsbG9jPiYg X191Y29udCA9IF9fY29udDsKICAgICAgIGNvbnN0IGF1dG8gX19vc3ogPSBfX2NvbnQuc2l6 ZSgpOwogICAgICAgY29uc3QgYXV0byBfX2VuZCA9IF9fdWNvbnQuZW5kKCk7CiAgICAgICBh dXRvIF9fcmVtb3ZlZCA9IHN0ZDo6X19yZW1vdmVfaWYoX191Y29udC5iZWdpbigpLCBfX2Vu ZCwKLQkJCQkJX19vcHM6Ol9fcHJlZF9pdGVyKHN0ZDo6cmVmKF9fcHJlZCkpKTsKKwkJCQkJ c3RkOjptb3ZlKF9fcHJlZCkpOwogICAgICAgaWYgKF9fcmVtb3ZlZCAhPSBfX2VuZCkKIAl7 CiAJICBfX2NvbnQuZXJhc2UoX19uaXRlcl93cmFwKF9fY29udC5iZWdpbigpLCBfX3JlbW92 ZWQpLApAQCAtMTM4LDcgKzEzNyw3IEBAIF9HTElCQ1hYX0JFR0lOX05BTUVTUEFDRV9WRVJT SU9OCiAgICAgICBjb25zdCBhdXRvIF9fb3N6ID0gX19jb250LnNpemUoKTsKICAgICAgIGNv bnN0IGF1dG8gX19lbmQgPSBfX3Vjb250LmVuZCgpOwogICAgICAgYXV0byBfX3JlbW92ZWQg PSBzdGQ6Ol9fcmVtb3ZlX2lmKF9fdWNvbnQuYmVnaW4oKSwgX19lbmQsCi0JCQkJCV9fb3Bz OjpfX2l0ZXJfZXF1YWxzX3ZhbChfX3ZhbHVlKSk7CisJCQkJCV9fb3BzOjpfX2VxdWFsX3Rv X3ZhbChfX3ZhbHVlKSk7CiAgICAgICBpZiAoX19yZW1vdmVkICE9IF9fZW5kKQogCXsKIAkg IF9fY29udC5lcmFzZShfX25pdGVyX3dyYXAoX19jb250LmJlZ2luKCksIF9fcmVtb3ZlZCks Cg== --------------fWtQ9mWmZj95WU5oiBWfjqsb--