From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mail-wr1-x429.google.com (mail-wr1-x429.google.com [IPv6:2a00:1450:4864:20::429]) by sourceware.org (Postfix) with ESMTPS id 1F5DB385700C; Mon, 8 Aug 2022 18:15:09 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.1 sourceware.org 1F5DB385700C Received: by mail-wr1-x429.google.com with SMTP id bv3so11775278wrb.5; Mon, 08 Aug 2022 11:15:09 -0700 (PDT) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=in-reply-to:from:references:cc:to:content-language:subject :user-agent:mime-version:date:message-id:x-gm-message-state:from:to :cc; bh=2S1Zc6sLsvvsHMCtTvInL+SH/ufKtr6hOBVA/X3Q7+A=; b=XsKMQfuWQMe73n4cocevzWGZkiDV7W7RiSsVKKoNrambzg9YVSrnZmxyAirR8XDvIM V2xxR4M4SV6K041HpGnMmR/Te2jFb1OnG3df8mzW724O3xrZrlQvw6WKKNXPeOMJ5QME aLtLYf8uUIzVplCulFUtTE/gK2FfuKZFiLSs2ORUOYRTLgucKDompYpTdhR78Ww7Cqk3 HB41S6NKamKAyGeuTTMFijctgdJlokNviclfiBpQNIwnbiwTVQQeMKsaTpi/+Yq0IfJW jm3h1ZGsN3nzX+z3dxNn2aXE/3hcyBLijc0SzkVi5a+SvOG5HfCwWa4+r6DmeeHoqhi8 az3A== X-Gm-Message-State: ACgBeo0PsZoI2tADoG+SThY0PDBJ91DRatOxMgpsxCroNMQDioC5hC6I I0plGtmrxgYgqSWAAFNHP2I= X-Google-Smtp-Source: AA6agR7ft6VQ5NiFZtVFqrhW2T/G9T0f4N9T2Np5UwTDj17dRTssqHSth6/PEKT1OtRiOVbd20X4aw== X-Received: by 2002:a5d:47c4:0:b0:21f:f34:56fd with SMTP id o4-20020a5d47c4000000b0021f0f3456fdmr11700163wrc.585.1659982507287; Mon, 08 Aug 2022 11:15:07 -0700 (PDT) Received: from [10.37.2.200] ([109.190.253.11]) by smtp.googlemail.com with ESMTPSA id o4-20020a056000010400b0021e501519d3sm11672745wrx.67.2022.08.08.11.15.06 (version=TLS1_3 cipher=TLS_AES_128_GCM_SHA256 bits=128/128); Mon, 08 Aug 2022 11:15:06 -0700 (PDT) Content-Type: multipart/mixed; boundary="------------BHf2D2IybyROdsT6YWMUQE20" Message-ID: <047769c5-7833-4b1f-787d-5de0a2755aa1@gmail.com> Date: Mon, 8 Aug 2022 20:15:04 +0200 MIME-Version: 1.0 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:91.0) Gecko/20100101 Thunderbird/91.11.0 Subject: Re: [PATCH][_GLIBCXX_DEBUG] Refine singular iterator state Content-Language: fr To: Jonathan Wakely Cc: "libstdc++@gcc.gnu.org" , gcc-patches References: <3b6d1c3d-8bc7-e5e5-0a76-58d960f86e3f@gmail.com> From: =?UTF-8?Q?Fran=c3=a7ois_Dumont?= In-Reply-To: X-Spam-Status: No, score=-8.2 required=5.0 tests=BAYES_00, DKIM_SIGNED, DKIM_VALID, DKIM_VALID_AU, DKIM_VALID_EF, FREEMAIL_FROM, GIT_PATCH_0, KAM_SHORT, NICE_REPLY_A, RCVD_IN_ABUSEAT, RCVD_IN_BARRACUDACENTRAL, RCVD_IN_DNSWL_NONE, SPF_HELO_NONE, SPF_PASS, TXREP, T_SCC_BODY_TEXT_LINE autolearn=ham autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on server2.sourceware.org X-BeenThere: libstdc++@gcc.gnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: Libstdc++ mailing list List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Mon, 08 Aug 2022 18:15:12 -0000 This is a multi-part message in MIME format. --------------BHf2D2IybyROdsT6YWMUQE20 Content-Type: text/plain; charset=UTF-8; format=flowed Content-Transfer-Encoding: 8bit On 08/08/22 15:19, Jonathan Wakely wrote: > On Mon, 8 Aug 2022 at 06:07, François Dumont via Libstdc++ > wrote: >> Another version of this patch with just a new test case showing what >> wrong code was unnoticed previously by the _GLIBCXX_DEBUG mode. >> >> On 04/08/22 22:56, François Dumont wrote: >>> This an old patch I had prepared a long time ago, I don't think I ever >>> submitted it. >>> >>> libstdc++: [_GLIBCXX_DEBUG] Do not consider detached iterators as >>> value-initialized >>> >>> An attach iterator has its _M_version set to something != 0. This >>> value shall be preserved >>> when detaching it so that the iterator does not look like a value >>> initialized one. >>> >>> libstdc++-v3/ChangeLog: >>> >>> * include/debug/formatter.h (__singular_value_init): New >>> _Iterator_state enum entry. >>> (_Parameter<>(const _Safe_iterator<>&, const char*, >>> _Is_iterator)): Check if iterator >>> parameter is value-initialized. >>> (_Parameter<>(const _Safe_local_iterator<>&, const char*, >>> _Is_iterator)): Likewise. >>> * include/debug/safe_iterator.h >>> (_Safe_iterator<>::_M_value_initialized()): New. Adapt >>> checks. >>> * include/debug/safe_local_iterator.h >>> (_Safe_local_iterator<>::_M_value_initialized()): New. >>> Adapt checks. >>> * src/c++11/debug.cc (_Safe_iterator_base::_M_reset): Do >>> not reset _M_version. >>> (print_field(PrintContext&, const _Parameter&, const >>> char*)): Adapt state_names. >>> * testsuite/23_containers/deque/debug/iterator1_neg.cc: >>> New test. >>> * testsuite/23_containers/deque/debug/iterator2_neg.cc: >>> New test. >>> * >>> testsuite/23_containers/forward_list/debug/iterator1_neg.cc: New test. >>> * >>> testsuite/23_containers/forward_list/debug/iterator2_neg.cc: New test. >>> >>> Tested under Linux x86_64 _GLIBCXX_DEBUG mode. >>> >>> Ok to commit ? >>> >>> François > >> diff --git a/libstdc++-v3/src/c++11/debug.cc b/libstdc++-v3/src/c++11/debug.cc >> index 4706defedf1..cf8e6f48081 100644 >> --- a/libstdc++-v3/src/c++11/debug.cc >> +++ b/libstdc++-v3/src/c++11/debug.cc >> @@ -426,7 +426,8 @@ namespace __gnu_debug >> _M_reset() throw () >> { >> __atomic_store_n(&_M_sequence, (_Safe_sequence_base*)0, __ATOMIC_RELEASE); >> - _M_version = 0; >> + // Detach iterator shall not look like a value-initialized one. >> + // _M_version = 0; >> _M_prior = 0; >> _M_next = 0; >> } > I think this would be clearer as "Do not reset version, so that a > detached iterator does not look like a value-initialized one." > >> +// { dg-do run { xfail *-*-* } } >> +// { dg-require-debug-mode "" } >> + >> +#include >> + >> +#include >> + >> +void test01() >> +{ >> + typedef typename std::deque::iterator It; >> + std::deque dq; >> + dq.push_back(1); >> + >> + It it = It(); >> + VERIFY( dq.begin() != it ); > Is there any reason to use VERIFY here? Only make sure the compiler do not optimize this check away. > > We're expecting the comparison to abort in the debug mode checks, > right? Which would happen if we just do: > > (void) dq.begin() == it; I guess this (void) cast is doing the same so adopted. > Using VERIFY just makes it look like we're expecting the test to be > XFAIL because the assertion will fail, but that's not what is being > tested. > > OK for trunk with those changes, thanks. > Updated committed patch attached. --------------BHf2D2IybyROdsT6YWMUQE20 Content-Type: text/x-patch; charset=UTF-8; name="singular_value_init.patch" Content-Disposition: attachment; filename="singular_value_init.patch" Content-Transfer-Encoding: base64 ZGlmZiAtLWdpdCBhL2xpYnN0ZGMrKy12My9pbmNsdWRlL2RlYnVnL2Zvcm1hdHRlci5oIGIv bGlic3RkYysrLXYzL2luY2x1ZGUvZGVidWcvZm9ybWF0dGVyLmgKaW5kZXggODBlOGJhNDZk MWUuLjc0OGQ0ZmJmZWE0IDEwMDY0NAotLS0gYS9saWJzdGRjKystdjMvaW5jbHVkZS9kZWJ1 Zy9mb3JtYXR0ZXIuaAorKysgYi9saWJzdGRjKystdjMvaW5jbHVkZS9kZWJ1Zy9mb3JtYXR0 ZXIuaApAQCAtMTg1LDYgKzE4NSw3IEBAIG5hbWVzcGFjZSBfX2dudV9kZWJ1ZwogICAgICAg X19yYmVnaW4sCQkvLyBkZXJlZmVyZW5jZWFibGUsIGFuZCBhdCB0aGUgcmV2ZXJzZS1iZWdp bm5pbmcKICAgICAgIF9fcm1pZGRsZSwJLy8gcmV2ZXJzZS1kZXJlZmVyZW5jZWFibGUsIG5v dCBhdCB0aGUgcmV2ZXJzZS1iZWdpbm5pbmcKICAgICAgIF9fcmVuZCwJCS8vIHJldmVyc2Ut cGFzdC10aGUtZW5kCisgICAgICBfX3Npbmd1bGFyX3ZhbHVlX2luaXQsCS8vIHNpbmd1bGFy LCB2YWx1ZSBpbml0aWFsaXplZAogICAgICAgX19sYXN0X3N0YXRlCiAgICAgfTsKIApAQCAt MjgwLDcgKzI4MSwxMiBAQCBuYW1lc3BhY2UgX19nbnVfZGVidWcKIAkgIF9NX3ZhcmlhbnQu X01faXRlcmF0b3IuX01fc2VxX3R5cGUgPSBfR0xJQkNYWF9UWVBFSUQoX1NlcXVlbmNlKTsK IAogCSAgaWYgKF9faXQuX01fc2luZ3VsYXIoKSkKLQkgICAgX01fdmFyaWFudC5fTV9pdGVy YXRvci5fTV9zdGF0ZSA9IF9fc2luZ3VsYXI7CisJICAgIHsKKwkgICAgICBpZiAoX19pdC5f TV92YWx1ZV9pbml0aWFsaXplZCgpKQorCQlfTV92YXJpYW50Ll9NX2l0ZXJhdG9yLl9NX3N0 YXRlID0gX19zaW5ndWxhcl92YWx1ZV9pbml0OworCSAgICAgIGVsc2UKKwkJX01fdmFyaWFu dC5fTV9pdGVyYXRvci5fTV9zdGF0ZSA9IF9fc2luZ3VsYXI7CisJICAgIH0KIAkgIGVsc2UK IAkgICAgewogCSAgICAgIGlmIChfX2l0Ll9NX2lzX2JlZm9yZV9iZWdpbigpKQpAQCAtMzA4 LDcgKzMxNCwxMiBAQCBuYW1lc3BhY2UgX19nbnVfZGVidWcKIAkgIF9NX3ZhcmlhbnQuX01f aXRlcmF0b3IuX01fc2VxX3R5cGUgPSBfR0xJQkNYWF9UWVBFSUQoX1NlcXVlbmNlKTsKIAog CSAgaWYgKF9faXQuX01fc2luZ3VsYXIoKSkKLQkgICAgX01fdmFyaWFudC5fTV9pdGVyYXRv ci5fTV9zdGF0ZSA9IF9fc2luZ3VsYXI7CisJICAgIHsKKwkgICAgICBpZiAoX19pdC5fTV92 YWx1ZV9pbml0aWFsaXplZCgpKQorCQlfTV92YXJpYW50Ll9NX2l0ZXJhdG9yLl9NX3N0YXRl ID0gX19zaW5ndWxhcl92YWx1ZV9pbml0OworCSAgICAgIGVsc2UKKwkJX01fdmFyaWFudC5f TV9pdGVyYXRvci5fTV9zdGF0ZSA9IF9fc2luZ3VsYXI7CisJICAgIH0KIAkgIGVsc2UKIAkg ICAgewogCSAgICAgIGlmIChfX2l0Ll9NX2lzX2VuZCgpKQpkaWZmIC0tZ2l0IGEvbGlic3Rk YysrLXYzL2luY2x1ZGUvZGVidWcvc2FmZV9pdGVyYXRvci5oIGIvbGlic3RkYysrLXYzL2lu Y2x1ZGUvZGVidWcvc2FmZV9pdGVyYXRvci5oCmluZGV4IGQ2MTM5MzNlMjM2Li4zM2Y3YTg2 NDc4YSAxMDA2NDQKLS0tIGEvbGlic3RkYysrLXYzL2luY2x1ZGUvZGVidWcvc2FmZV9pdGVy YXRvci5oCisrKyBiL2xpYnN0ZGMrKy12My9pbmNsdWRlL2RlYnVnL3NhZmVfaXRlcmF0b3Iu aApAQCAtNDEsOCArNDEsOCBAQAogCiAjZGVmaW5lIF9HTElCQ1hYX0RFQlVHX1ZFUklGWV9P UEVSQU5EUyhfTGhzLCBfUmhzLCBfQmFkTXNnSWQsIF9EaWZmTXNnSWQpIFwKICAgX0dMSUJD WFhfREVCVUdfVkVSSUZZKCFfTGhzLl9NX3Npbmd1bGFyKCkgJiYgIV9SaHMuX01fc2luZ3Vs YXIoKQlcCi0JCQl8fCAoX0xocy5iYXNlKCkgPT0gX0l0ZXJhdG9yKCkJCQlcCi0JCQkgICAg JiYgX1Jocy5iYXNlKCkgPT0gX0l0ZXJhdG9yKCkpLAkJXAorCQkJfHwgKF9MaHMuX01fdmFs dWVfaW5pdGlhbGl6ZWQoKQkJCVwKKwkJCSAgICAmJiBfUmhzLl9NX3ZhbHVlX2luaXRpYWxp emVkKCkpLAkJXAogCQkJX01fbWVzc2FnZShfQmFkTXNnSWQpCQkJCVwKIAkJCS5fTV9pdGVy YXRvcihfTGhzLCAjX0xocykJCQlcCiAJCQkuX01faXRlcmF0b3IoX1JocywgI19SaHMpKTsJ CQlcCkBAIC0xNzcsNyArMTc3LDcgQEAgbmFtZXNwYWNlIF9fZ251X2RlYnVnCiAJLy8gX0dM SUJDWFhfUkVTT0xWRV9MSUJfREVGRUNUUwogCS8vIERSIDQwOC4gSXMgdmVjdG9yPHJldmVy c2VfaXRlcmF0b3I8Y2hhcio+ID4gZm9yYmlkZGVuPwogCV9HTElCQ1hYX0RFQlVHX1ZFUklG WSghX194Ll9NX3Npbmd1bGFyKCkKLQkJCSAgICAgIHx8IF9feC5iYXNlKCkgPT0gX0l0ZXJh dG9yKCksCisJCQkgICAgICB8fCBfX3guX01fdmFsdWVfaW5pdGlhbGl6ZWQoKSwKIAkJCSAg ICAgIF9NX21lc3NhZ2UoX19tc2dfaW5pdF9jb3B5X3Npbmd1bGFyKQogCQkJICAgICAgLl9N X2l0ZXJhdG9yKCp0aGlzLCAidGhpcyIpCiAJCQkgICAgICAuX01faXRlcmF0b3IoX194LCAi b3RoZXIiKSk7CkBAIC0xOTMsNyArMTkzLDcgQEAgbmFtZXNwYWNlIF9fZ251X2RlYnVnCiAg ICAgICA6IF9JdGVyX2Jhc2UoKQogICAgICAgewogCV9HTElCQ1hYX0RFQlVHX1ZFUklGWSgh X194Ll9NX3Npbmd1bGFyKCkKLQkJCSAgICAgIHx8IF9feC5iYXNlKCkgPT0gX0l0ZXJhdG9y KCksCisJCQkgICAgICB8fCBfX3guX01fdmFsdWVfaW5pdGlhbGl6ZWQoKSwKIAkJCSAgICAg IF9NX21lc3NhZ2UoX19tc2dfaW5pdF9jb3B5X3Npbmd1bGFyKQogCQkJICAgICAgLl9NX2l0 ZXJhdG9yKCp0aGlzLCAidGhpcyIpCiAJCQkgICAgICAuX01faXRlcmF0b3IoX194LCAib3Ro ZXIiKSk7CkBAIC0yMjAsNyArMjIwLDcgQEAgbmFtZXNwYWNlIF9fZ251X2RlYnVnCiAJICAv LyBfR0xJQkNYWF9SRVNPTFZFX0xJQl9ERUZFQ1RTCiAJICAvLyBEUiA0MDguIElzIHZlY3Rv cjxyZXZlcnNlX2l0ZXJhdG9yPGNoYXIqPiA+IGZvcmJpZGRlbj8KIAkgIF9HTElCQ1hYX0RF QlVHX1ZFUklGWSghX194Ll9NX3Npbmd1bGFyKCkKLQkJCQl8fCBfX3guYmFzZSgpID09IF9N dXRhYmxlSXRlcmF0b3IoKSwKKwkJCQl8fCBfX3guX01fdmFsdWVfaW5pdGlhbGl6ZWQoKSwK IAkJCQlfTV9tZXNzYWdlKF9fbXNnX2luaXRfY29uc3Rfc2luZ3VsYXIpCiAJCQkJLl9NX2l0 ZXJhdG9yKCp0aGlzLCAidGhpcyIpCiAJCQkJLl9NX2l0ZXJhdG9yKF9feCwgIm90aGVyIikp OwpAQCAtMjM2LDcgKzIzNiw3IEBAIG5hbWVzcGFjZSBfX2dudV9kZWJ1ZwogCS8vIF9HTElC Q1hYX1JFU09MVkVfTElCX0RFRkVDVFMKIAkvLyBEUiA0MDguIElzIHZlY3RvcjxyZXZlcnNl X2l0ZXJhdG9yPGNoYXIqPiA+IGZvcmJpZGRlbj8KIAlfR0xJQkNYWF9ERUJVR19WRVJJRlko IV9feC5fTV9zaW5ndWxhcigpCi0JCQkgICAgICB8fCBfX3guYmFzZSgpID09IF9JdGVyYXRv cigpLAorCQkJICAgICAgfHwgX194Ll9NX3ZhbHVlX2luaXRpYWxpemVkKCksCiAJCQkgICAg ICBfTV9tZXNzYWdlKF9fbXNnX2NvcHlfc2luZ3VsYXIpCiAJCQkgICAgICAuX01faXRlcmF0 b3IoKnRoaXMsICJ0aGlzIikKIAkJCSAgICAgIC5fTV9pdGVyYXRvcihfX3gsICJvdGhlciIp KTsKQEAgLTI2Niw3ICsyNjYsNyBAQCBuYW1lc3BhY2UgX19nbnVfZGVidWcKICAgICAgIG9w ZXJhdG9yPShfU2FmZV9pdGVyYXRvciYmIF9feCkgbm9leGNlcHQKICAgICAgIHsKIAlfR0xJ QkNYWF9ERUJVR19WRVJJRlkoIV9feC5fTV9zaW5ndWxhcigpCi0JCQkgICAgICB8fCBfX3gu YmFzZSgpID09IF9JdGVyYXRvcigpLAorCQkJICAgICAgfHwgX194Ll9NX3ZhbHVlX2luaXRp YWxpemVkKCksCiAJCQkgICAgICBfTV9tZXNzYWdlKF9fbXNnX2NvcHlfc2luZ3VsYXIpCiAJ CQkgICAgICAuX01faXRlcmF0b3IoKnRoaXMsICJ0aGlzIikKIAkJCSAgICAgIC5fTV9pdGVy YXRvcihfX3gsICJvdGhlciIpKTsKQEAgLTQwNSw2ICs0MDUsMTEgQEAgbmFtZXNwYWNlIF9f Z251X2RlYnVnCiAgICAgICBfTV9pbmNyZW1lbnRhYmxlKCkgY29uc3QKICAgICAgIHsgcmV0 dXJuICF0aGlzLT5fTV9zaW5ndWxhcigpICYmICFfTV9pc19lbmQoKTsgfQogCisgICAgICAv Ly8gSXMgdGhlIGl0ZXJhdG9yIHZhbHVlLWluaXRpYWxpemVkPworICAgICAgYm9vbAorICAg ICAgX01fdmFsdWVfaW5pdGlhbGl6ZWQoKSBjb25zdAorICAgICAgeyByZXR1cm4gX01fdmVy c2lvbiA9PSAwICYmIGJhc2UoKSA9PSBfSXRlcl9iYXNlKCk7IH0KKwogICAgICAgLy8gQ2Fu IHdlIGFkdmFuY2UgdGhlIGl0ZXJhdG9yIEBwIF9fbiBzdGVwcyAoQHAgX19uIG1heSBiZSBu ZWdhdGl2ZSkKICAgICAgIGJvb2wKICAgICAgIF9NX2Nhbl9hZHZhbmNlKGRpZmZlcmVuY2Vf dHlwZSBfX24sIGJvb2wgX19zdHJpY3QgPSBmYWxzZSkgY29uc3Q7CmRpZmYgLS1naXQgYS9s aWJzdGRjKystdjMvaW5jbHVkZS9kZWJ1Zy9zYWZlX2xvY2FsX2l0ZXJhdG9yLmggYi9saWJz dGRjKystdjMvaW5jbHVkZS9kZWJ1Zy9zYWZlX2xvY2FsX2l0ZXJhdG9yLmgKaW5kZXggYjUz MThmNTBiNmEuLjZlM2M0ZWIxNTA1IDEwMDY0NAotLS0gYS9saWJzdGRjKystdjMvaW5jbHVk ZS9kZWJ1Zy9zYWZlX2xvY2FsX2l0ZXJhdG9yLmgKKysrIGIvbGlic3RkYysrLXYzL2luY2x1 ZGUvZGVidWcvc2FmZV9sb2NhbF9pdGVyYXRvci5oCkBAIC0zMyw4ICszMyw4IEBACiAKICNk ZWZpbmUgX0dMSUJDWFhfREVCVUdfVkVSSUZZX09QRVJBTkRTKF9MaHMsIF9SaHMpIFwKICAg X0dMSUJDWFhfREVCVUdfVkVSSUZZKCFfTGhzLl9NX3Npbmd1bGFyKCkgJiYgIV9SaHMuX01f c2luZ3VsYXIoKQlcCi0JCQl8fCAoX0xocy5iYXNlKCkgPT0gX0l0ZXJhdG9ye30JCQlcCi0J CQkgICAgJiYgX1Jocy5iYXNlKCkgPT0gX0l0ZXJhdG9ye30pLAkJXAorCQkJfHwgKF9MaHMu X01fdmFsdWVfaW5pdGlhbGl6ZWQoKQkJCVwKKwkJCSAgICAmJiBfUmhzLl9NX3ZhbHVlX2lu aXRpYWxpemVkKCkpLAkJXAogCQkJX01fbWVzc2FnZShfX21zZ19pdGVyX2NvbXBhcmVfYmFk KQkJXAogCQkJLl9NX2l0ZXJhdG9yKF9MaHMsICJsaHMiKQkJCVwKIAkJCS5fTV9pdGVyYXRv cihfUmhzLCAicmhzIikpOwkJCVwKQEAgLTEyNyw3ICsxMjcsNyBAQCBuYW1lc3BhY2UgX19n bnVfZGVidWcKIAkvLyBfR0xJQkNYWF9SRVNPTFZFX0xJQl9ERUZFQ1RTCiAJLy8gRFIgNDA4 LiBJcyB2ZWN0b3I8cmV2ZXJzZV9pdGVyYXRvcjxjaGFyKj4gPiBmb3JiaWRkZW4/CiAJX0dM SUJDWFhfREVCVUdfVkVSSUZZKCFfX3guX01fc2luZ3VsYXIoKQotCQkJICAgICAgfHwgX194 LmJhc2UoKSA9PSBfSXRlcmF0b3IoKSwKKwkJCSAgICAgIHx8IF9feC5fTV92YWx1ZV9pbml0 aWFsaXplZCgpLAogCQkJICAgICAgX01fbWVzc2FnZShfX21zZ19pbml0X2NvcHlfc2luZ3Vs YXIpCiAJCQkgICAgICAuX01faXRlcmF0b3IoKnRoaXMsICJ0aGlzIikKIAkJCSAgICAgIC5f TV9pdGVyYXRvcihfX3gsICJvdGhlciIpKTsKQEAgLTE0Miw3ICsxNDIsNyBAQCBuYW1lc3Bh Y2UgX19nbnVfZGVidWcKICAgICAgIDogX0l0ZXJfYmFzZSgpCiAgICAgICB7CiAJX0dMSUJD WFhfREVCVUdfVkVSSUZZKCFfX3guX01fc2luZ3VsYXIoKQotCQkJICAgICAgfHwgX194LmJh c2UoKSA9PSBfSXRlcmF0b3IoKSwKKwkJCSAgICAgIHx8IF9feC5fTV92YWx1ZV9pbml0aWFs aXplZCgpLAogCQkJICAgICAgX01fbWVzc2FnZShfX21zZ19pbml0X2NvcHlfc2luZ3VsYXIp CiAJCQkgICAgICAuX01faXRlcmF0b3IoKnRoaXMsICJ0aGlzIikKIAkJCSAgICAgIC5fTV9p dGVyYXRvcihfX3gsICJvdGhlciIpKTsKQEAgLTE2Nyw3ICsxNjcsNyBAQCBuYW1lc3BhY2Ug X19nbnVfZGVidWcKIAkgIC8vIF9HTElCQ1hYX1JFU09MVkVfTElCX0RFRkVDVFMKIAkgIC8v IERSIDQwOC4gSXMgdmVjdG9yPHJldmVyc2VfaXRlcmF0b3I8Y2hhcio+ID4gZm9yYmlkZGVu PwogCSAgX0dMSUJDWFhfREVCVUdfVkVSSUZZKCFfX3guX01fc2luZ3VsYXIoKQotCQkJCXx8 IF9feC5iYXNlKCkgPT0gX011dGFibGVJdGVyYXRvcigpLAorCQkJCXx8IF9feC5fTV92YWx1 ZV9pbml0aWFsaXplZCgpLAogCQkJCV9NX21lc3NhZ2UoX19tc2dfaW5pdF9jb25zdF9zaW5n dWxhcikKIAkJCQkuX01faXRlcmF0b3IoKnRoaXMsICJ0aGlzIikKIAkJCQkuX01faXRlcmF0 b3IoX194LCAib3RoZXIiKSk7CkBAIC0xODMsNyArMTgzLDcgQEAgbmFtZXNwYWNlIF9fZ251 X2RlYnVnCiAJLy8gX0dMSUJDWFhfUkVTT0xWRV9MSUJfREVGRUNUUwogCS8vIERSIDQwOC4g SXMgdmVjdG9yPHJldmVyc2VfaXRlcmF0b3I8Y2hhcio+ID4gZm9yYmlkZGVuPwogCV9HTElC Q1hYX0RFQlVHX1ZFUklGWSghX194Ll9NX3Npbmd1bGFyKCkKLQkJCSAgICAgIHx8IF9feC5i YXNlKCkgPT0gX0l0ZXJhdG9yKCksCisJCQkgICAgICB8fCBfX3guX01fdmFsdWVfaW5pdGlh bGl6ZWQoKSwKIAkJCSAgICAgIF9NX21lc3NhZ2UoX19tc2dfY29weV9zaW5ndWxhcikKIAkJ CSAgICAgIC5fTV9pdGVyYXRvcigqdGhpcywgInRoaXMiKQogCQkJICAgICAgLl9NX2l0ZXJh dG9yKF9feCwgIm90aGVyIikpOwpAQCAtMjEyLDcgKzIxMiw3IEBAIG5hbWVzcGFjZSBfX2du dV9kZWJ1ZwogICAgICAgb3BlcmF0b3I9KF9TYWZlX2xvY2FsX2l0ZXJhdG9yJiYgX194KSBu b2V4Y2VwdAogICAgICAgewogCV9HTElCQ1hYX0RFQlVHX1ZFUklGWSghX194Ll9NX3Npbmd1 bGFyKCkKLQkJCSAgICAgIHx8IF9feC5iYXNlKCkgPT0gX0l0ZXJhdG9yKCksCisJCQkgICAg ICB8fCBfX3guX01fdmFsdWVfaW5pdGlhbGl6ZWQoKSwKIAkJCSAgICAgIF9NX21lc3NhZ2Uo X19tc2dfY29weV9zaW5ndWxhcikKIAkJCSAgICAgIC5fTV9pdGVyYXRvcigqdGhpcywgInRo aXMiKQogCQkJICAgICAgLl9NX2l0ZXJhdG9yKF9feCwgIm90aGVyIikpOwpAQCAtMzQzLDYg KzM0MywxMSBAQCBuYW1lc3BhY2UgX19nbnVfZGVidWcKICAgICAgIF9NX2luY3JlbWVudGFi bGUoKSBjb25zdAogICAgICAgeyByZXR1cm4gIXRoaXMtPl9NX3Npbmd1bGFyKCkgJiYgIV9N X2lzX2VuZCgpOyB9CiAKKyAgICAgIC8vLyBJcyB0aGUgaXRlcmF0b3IgdmFsdWUtaW5pdGlh bGl6ZWQ/CisgICAgICBib29sCisgICAgICBfTV92YWx1ZV9pbml0aWFsaXplZCgpIGNvbnN0 CisgICAgICB7IHJldHVybiBfTV92ZXJzaW9uID09IDAgJiYgYmFzZSgpID09IF9JdGVyX2Jh c2V7fTsgfQorCiAgICAgICAvLyBJcyB0aGUgaXRlcmF0b3IgcmFuZ2UgWyp0aGlzLCBfX3Jo cykgdmFsaWQ/CiAgICAgICBib29sCiAgICAgICBfTV92YWxpZF9yYW5nZShjb25zdCBfU2Fm ZV9sb2NhbF9pdGVyYXRvciYgX19yaHMsCmRpZmYgLS1naXQgYS9saWJzdGRjKystdjMvc3Jj L2MrKzExL2RlYnVnLmNjIGIvbGlic3RkYysrLXYzL3NyYy9jKysxMS9kZWJ1Zy5jYwppbmRl eCA0NzA2ZGVmZWRmMS4uOGVkNjFhNjk5MTMgMTAwNjQ0Ci0tLSBhL2xpYnN0ZGMrKy12My9z cmMvYysrMTEvZGVidWcuY2MKKysrIGIvbGlic3RkYysrLXYzL3NyYy9jKysxMS9kZWJ1Zy5j YwpAQCAtNDI2LDcgKzQyNiw5IEBAIG5hbWVzcGFjZSBfX2dudV9kZWJ1ZwogICBfTV9yZXNl dCgpIHRocm93ICgpCiAgIHsKICAgICBfX2F0b21pY19zdG9yZV9uKCZfTV9zZXF1ZW5jZSwg KF9TYWZlX3NlcXVlbmNlX2Jhc2UqKTAsIF9fQVRPTUlDX1JFTEVBU0UpOwotICAgIF9NX3Zl cnNpb24gPSAwOworICAgIC8vIERvIG5vdCByZXNldCB2ZXJzaW9uLCBzbyB0aGF0IGEgZGV0 YWNoZWQgaXRlcmF0b3IgZG9lcyBub3QgbG9vayBsaWtlIGEKKyAgICAvLyB2YWx1ZS1pbml0 aWFsaXplZCBvbmUuCisgICAgLy8gX01fdmVyc2lvbiA9IDA7CiAgICAgX01fcHJpb3IgPSAw OwogICAgIF9NX25leHQgPSAwOwogICB9CkBAIC03NjcsNyArNzY5LDggQEAgbmFtZXNwYWNl CiAJICJiZWZvcmUtYmVnaW4iLAogCSAiZGVyZWZlcmVuY2VhYmxlIChzdGFydC1vZi1yZXZl cnNlLXNlcXVlbmNlKSIsCiAJICJkZXJlZmVyZW5jZWFibGUgKHJldmVyc2UpIiwKLQkgInBh c3QtdGhlLXJldmVyc2UtZW5kIgorCSAicGFzdC10aGUtcmV2ZXJzZS1lbmQiLAorCSAic2lu Z3VsYXIgKHZhbHVlLWluaXRpYWxpemVkKSIKIAl9OwogICAgICAgcHJpbnRfd29yZChjdHgs IHN0YXRlX25hbWVzW2l0ZXJhdG9yLl9NX3N0YXRlXSk7CiAgICAgfQpkaWZmIC0tZ2l0IGEv bGlic3RkYysrLXYzL3Rlc3RzdWl0ZS8yM19jb250YWluZXJzL2RlcXVlL2RlYnVnL2l0ZXJh dG9yMV9uZWcuY2MgYi9saWJzdGRjKystdjMvdGVzdHN1aXRlLzIzX2NvbnRhaW5lcnMvZGVx dWUvZGVidWcvaXRlcmF0b3IxX25lZy5jYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAw MDAwMDAwMDAwMC4uNzNmOGEwNDRkNDMKLS0tIC9kZXYvbnVsbAorKysgYi9saWJzdGRjKyst djMvdGVzdHN1aXRlLzIzX2NvbnRhaW5lcnMvZGVxdWUvZGVidWcvaXRlcmF0b3IxX25lZy5j YwpAQCAtMCwwICsxLDM3IEBACisvLyBDb3B5cmlnaHQgKEMpIDIwMjIgRnJlZSBTb2Z0d2Fy ZSBGb3VuZGF0aW9uLCBJbmMuCisvLworLy8gVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEdO VSBJU08gQysrIExpYnJhcnkuICBUaGlzIGxpYnJhcnkgaXMgZnJlZQorLy8gc29mdHdhcmU7 IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQgdW5kZXIgdGhlCisv LyB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVk IGJ5IHRoZQorLy8gRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAz LCBvciAoYXQgeW91ciBvcHRpb24pCisvLyBhbnkgbGF0ZXIgdmVyc2lvbi4KKy8vCisvLyBU aGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJl IHVzZWZ1bCwKKy8vIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRo ZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisvLyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBG T1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisvLyBHTlUgR2VuZXJhbCBQdWJs aWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorLy8KKy8vIFlvdSBzaG91bGQgaGF2ZSBy ZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25n CisvLyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkczLiAgSWYgbm90 IHNlZQorLy8gPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgorLy8KKy8vIHsgZGct ZG8gcnVuIHsgeGZhaWwgKi0qLSogfSB9CisvLyB7IGRnLXJlcXVpcmUtZGVidWctbW9kZSAi IiB9CisKKyNpbmNsdWRlIDxkZXF1ZT4KKwordm9pZCB0ZXN0MDEoKQoreworICB0eXBlZGVm IHR5cGVuYW1lIHN0ZDo6ZGVxdWU8aW50Pjo6aXRlcmF0b3IgSXQ7CisgIHN0ZDo6ZGVxdWU8 aW50PiBkcTsKKyAgZHEucHVzaF9iYWNrKDEpOworCisgIEl0IGl0ID0gSXQoKTsKKyAgKHZv aWQpKGRxLmJlZ2luKCkgIT0gaXQpOworfQorCitpbnQgbWFpbigpCit7CisgIHRlc3QwMSgp OworICByZXR1cm4gMDsKK30KZGlmZiAtLWdpdCBhL2xpYnN0ZGMrKy12My90ZXN0c3VpdGUv MjNfY29udGFpbmVycy9kZXF1ZS9kZWJ1Zy9pdGVyYXRvcjJfbmVnLmNjIGIvbGlic3RkYysr LXYzL3Rlc3RzdWl0ZS8yM19jb250YWluZXJzL2RlcXVlL2RlYnVnL2l0ZXJhdG9yMl9uZWcu Y2MKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAuLjBhYmY1Y2JkNGVj Ci0tLSAvZGV2L251bGwKKysrIGIvbGlic3RkYysrLXYzL3Rlc3RzdWl0ZS8yM19jb250YWlu ZXJzL2RlcXVlL2RlYnVnL2l0ZXJhdG9yMl9uZWcuY2MKQEAgLTAsMCArMSw0MCBAQAorLy8g Q29weXJpZ2h0IChDKSAyMDIyIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorLy8K Ky8vIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBHTlUgSVNPIEMrKyBMaWJyYXJ5LiAgVGhp cyBsaWJyYXJ5IGlzIGZyZWUKKy8vIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBp dCBhbmQvb3IgbW9kaWZ5IGl0IHVuZGVyIHRoZQorLy8gdGVybXMgb2YgdGhlIEdOVSBHZW5l cmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUKKy8vIEZyZWUgU29mdHdh cmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMywgb3IgKGF0IHlvdXIgb3B0aW9uKQor Ly8gYW55IGxhdGVyIHZlcnNpb24uCisvLworLy8gVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1 dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisvLyBidXQgV0lUSE9V VCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgor Ly8gTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NF LiAgU2VlIHRoZQorLy8gR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0 YWlscy4KKy8vCisvLyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBH TlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZworLy8gd2l0aCB0aGlzIGxpYnJhcnk7 IHNlZSB0aGUgZmlsZSBDT1BZSU5HMy4gIElmIG5vdCBzZWUKKy8vIDxodHRwOi8vd3d3Lmdu dS5vcmcvbGljZW5zZXMvPi4KKy8vCisvLyB7IGRnLWRvIHJ1biB7IHhmYWlsICotKi0qIH0g fQorLy8geyBkZy1yZXF1aXJlLWRlYnVnLW1vZGUgIiIgfQorCisjaW5jbHVkZSA8ZGVxdWU+ CisKK3ZvaWQgdGVzdDAxKCkKK3sKKyAgdHlwZWRlZiB0eXBlbmFtZSBzdGQ6OmRlcXVlPGlu dD46Oml0ZXJhdG9yIEl0OworICBJdCBpdDsKKyAgeworICAgIHN0ZDo6ZGVxdWU8aW50PiBk cTsKKyAgICBpdCA9IGRxLmJlZ2luKCk7CisgIH0KKworICBJdCB2YWx1ZV9pbml0X2l0ID0g SXQoKTsKKyAgKHZvaWQpKGl0ICE9IHZhbHVlX2luaXRfaXQpOworfQorCitpbnQgbWFpbigp Cit7CisgIHRlc3QwMSgpOworICByZXR1cm4gMDsKK30KZGlmZiAtLWdpdCBhL2xpYnN0ZGMr Ky12My90ZXN0c3VpdGUvMjNfY29udGFpbmVycy9mb3J3YXJkX2xpc3QvZGVidWcvaXRlcmF0 b3IxX25lZy5jYyBiL2xpYnN0ZGMrKy12My90ZXN0c3VpdGUvMjNfY29udGFpbmVycy9mb3J3 YXJkX2xpc3QvZGVidWcvaXRlcmF0b3IxX25lZy5jYwpuZXcgZmlsZSBtb2RlIDEwMDY0NApp bmRleCAwMDAwMDAwMDAwMC4uOGNhNDRlMjQ4ZWQKLS0tIC9kZXYvbnVsbAorKysgYi9saWJz dGRjKystdjMvdGVzdHN1aXRlLzIzX2NvbnRhaW5lcnMvZm9yd2FyZF9saXN0L2RlYnVnL2l0 ZXJhdG9yMV9uZWcuY2MKQEAgLTAsMCArMSwzNyBAQAorLy8gQ29weXJpZ2h0IChDKSAyMDIy IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorLy8KKy8vIFRoaXMgZmlsZSBpcyBw YXJ0IG9mIHRoZSBHTlUgSVNPIEMrKyBMaWJyYXJ5LiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUK Ky8vIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0 IHVuZGVyIHRoZQorLy8gdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNl IGFzIHB1Ymxpc2hlZCBieSB0aGUKKy8vIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0 aGVyIHZlcnNpb24gMywgb3IgKGF0IHlvdXIgb3B0aW9uKQorLy8gYW55IGxhdGVyIHZlcnNp b24uCisvLworLy8gVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRo YXQgaXQgd2lsbCBiZSB1c2VmdWwsCisvLyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdp dGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorLy8gTUVSQ0hBTlRBQklMSVRZ IG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorLy8gR05V IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKy8vCisvLyBZb3Ug c2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMg TGljZW5zZSBhbG9uZworLy8gd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZ SU5HMy4gIElmIG5vdCBzZWUKKy8vIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4K Ky8vCisvLyB7IGRnLWRvIHJ1biB7IHhmYWlsICotKi0qIH0gfQorLy8geyBkZy1yZXF1aXJl LWRlYnVnLW1vZGUgIiIgfQorCisjaW5jbHVkZSA8Zm9yd2FyZF9saXN0PgorCit2b2lkIHRl c3QwMSgpCit7CisgIHR5cGVkZWYgdHlwZW5hbWUgc3RkOjpmb3J3YXJkX2xpc3Q8aW50Pjo6 aXRlcmF0b3IgSXQ7CisgIHN0ZDo6Zm9yd2FyZF9saXN0PGludD4gZmw7CisgIGZsLnB1c2hf ZnJvbnQoMSk7CisKKyAgSXQgaXQgPSBJdCgpOworICAodm9pZCkoZmwuYmVnaW4oKSAhPSBp dCk7Cit9CisKK2ludCBtYWluKCkKK3sKKyAgdGVzdDAxKCk7CisgIHJldHVybiAwOworfQpk aWZmIC0tZ2l0IGEvbGlic3RkYysrLXYzL3Rlc3RzdWl0ZS8yM19jb250YWluZXJzL2Zvcndh cmRfbGlzdC9kZWJ1Zy9pdGVyYXRvcjJfbmVnLmNjIGIvbGlic3RkYysrLXYzL3Rlc3RzdWl0 ZS8yM19jb250YWluZXJzL2ZvcndhcmRfbGlzdC9kZWJ1Zy9pdGVyYXRvcjJfbmVnLmNjCm5l dyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwLi45MmFiMDU5ZTZiOAotLS0g L2Rldi9udWxsCisrKyBiL2xpYnN0ZGMrKy12My90ZXN0c3VpdGUvMjNfY29udGFpbmVycy9m b3J3YXJkX2xpc3QvZGVidWcvaXRlcmF0b3IyX25lZy5jYwpAQCAtMCwwICsxLDQwIEBACisv LyBDb3B5cmlnaHQgKEMpIDIwMjIgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisv LworLy8gVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEdOVSBJU08gQysrIExpYnJhcnkuICBU aGlzIGxpYnJhcnkgaXMgZnJlZQorLy8gc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRl IGl0IGFuZC9vciBtb2RpZnkgaXQgdW5kZXIgdGhlCisvLyB0ZXJtcyBvZiB0aGUgR05VIEdl bmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZQorLy8gRnJlZSBTb2Z0 d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAzLCBvciAoYXQgeW91ciBvcHRpb24p CisvLyBhbnkgbGF0ZXIgdmVyc2lvbi4KKy8vCisvLyBUaGlzIGxpYnJhcnkgaXMgZGlzdHJp YnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKy8vIGJ1dCBXSVRI T1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9m CisvLyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBP U0UuICBTZWUgdGhlCisvLyBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBk ZXRhaWxzLgorLy8KKy8vIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhl IEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nCisvLyB3aXRoIHRoaXMgbGlicmFy eTsgc2VlIHRoZSBmaWxlIENPUFlJTkczLiAgSWYgbm90IHNlZQorLy8gPGh0dHA6Ly93d3cu Z251Lm9yZy9saWNlbnNlcy8+LgorLy8KKy8vIHsgZGctZG8gcnVuIHsgdGFyZ2V0IGMrKzEx IHhmYWlsICotKi0qIH0gfQorLy8geyBkZy1yZXF1aXJlLWRlYnVnLW1vZGUgIiIgfQorCisj aW5jbHVkZSA8Zm9yd2FyZF9saXN0PgorCit2b2lkIHRlc3QwMSgpCit7CisgIHR5cGVkZWYg dHlwZW5hbWUgc3RkOjpmb3J3YXJkX2xpc3Q8aW50Pjo6aXRlcmF0b3IgSXQ7CisgIEl0IGl0 OworICB7CisgICAgc3RkOjpmb3J3YXJkX2xpc3Q8aW50PiBmbDsKKyAgICBpdCA9IGZsLmJl Z2luKCk7CisgIH0KKworICBJdCB2YWx1ZV9pbml0X2l0e307CisgICh2b2lkKShpdCAhPSB2 YWx1ZV9pbml0X2l0KTsKK30KKworaW50IG1haW4oKQoreworICB0ZXN0MDEoKTsKKyAgcmV0 dXJuIDA7Cit9CmRpZmYgLS1naXQgYS9saWJzdGRjKystdjMvdGVzdHN1aXRlLzIzX2NvbnRh aW5lcnMvZm9yd2FyZF9saXN0L2RlYnVnL2l0ZXJhdG9yM19uZWcuY2MgYi9saWJzdGRjKyst djMvdGVzdHN1aXRlLzIzX2NvbnRhaW5lcnMvZm9yd2FyZF9saXN0L2RlYnVnL2l0ZXJhdG9y M19uZWcuY2MKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAuLjMyYWU3 YTViN2E2Ci0tLSAvZGV2L251bGwKKysrIGIvbGlic3RkYysrLXYzL3Rlc3RzdWl0ZS8yM19j b250YWluZXJzL2ZvcndhcmRfbGlzdC9kZWJ1Zy9pdGVyYXRvcjNfbmVnLmNjCkBAIC0wLDAg KzEsNDUgQEAKKy8vIENvcHlyaWdodCAoQykgMjAyMiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRp b24sIEluYy4KKy8vCisvLyBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgR05VIElTTyBDKysg TGlicmFyeS4gIFRoaXMgbGlicmFyeSBpcyBmcmVlCisvLyBzb2Z0d2FyZTsgeW91IGNhbiBy ZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdCB1bmRlciB0aGUKKy8vIHRlcm1zIG9m IHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlCisv LyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDMsIG9yIChhdCB5 b3VyIG9wdGlvbikKKy8vIGFueSBsYXRlciB2ZXJzaW9uLgorLy8KKy8vIFRoaXMgbGlicmFy eSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAor Ly8gYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQg d2FycmFudHkgb2YKKy8vIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJ Q1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKy8vIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNl IGZvciBtb3JlIGRldGFpbHMuCisvLworLy8gWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEg Y29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcKKy8vIHdpdGgg dGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORzMuICBJZiBub3Qgc2VlCisvLyA8 aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uCisvLworLy8geyBkZy1kbyBydW4geyB4 ZmFpbCAqLSotKiB9IH0KKy8vIHsgZGctcmVxdWlyZS1kZWJ1Zy1tb2RlICIiIH0KKworI2lu Y2x1ZGUgPGZvcndhcmRfbGlzdD4KKworI2luY2x1ZGUgPHRlc3RzdWl0ZV9ob29rcy5oPgor Cit2b2lkIHRlc3QwMSgpCit7CisgIHR5cGVkZWYgdHlwZW5hbWUgc3RkOjpmb3J3YXJkX2xp c3Q8aW50Pjo6aXRlcmF0b3IgSXQ7CisgIEl0IGVuZDEsIGVuZDI7CisKKyAgeworICAgIHN0 ZDo6Zm9yd2FyZF9saXN0PGludD4gZmw7CisgICAgZmwucHVzaF9mcm9udCgxKTsKKworICAg IGVuZDEgPSBlbmQyID0gZmwuZW5kKCk7CisgICAgVkVSSUZZKCBlbmQxID09IGVuZDIgKTsK KyAgfQorCisgICh2b2lkKShlbmQxID09IGVuZDIpOworfQorCitpbnQgbWFpbigpCit7Cisg IHRlc3QwMSgpOworICByZXR1cm4gMDsKK30K --------------BHf2D2IybyROdsT6YWMUQE20--