From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mail-wr1-x432.google.com (mail-wr1-x432.google.com [IPv6:2a00:1450:4864:20::432]) by sourceware.org (Postfix) with ESMTPS id C2BC63858285; Mon, 8 Aug 2022 05:07:30 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.1 sourceware.org C2BC63858285 Received: by mail-wr1-x432.google.com with SMTP id bv3so9561402wrb.5; Sun, 07 Aug 2022 22:07:30 -0700 (PDT) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=in-reply-to:references:cc:to:from:content-language:subject :user-agent:mime-version:date:message-id:x-gm-message-state:from:to :cc; bh=5u2mWTjRHVOrVX5Xq7icZEsBviRDVIpFMAs9h8wj560=; b=J/7/Yrz4mW7D7V0USJ184jQ/rnpRKRFCN8wSZPBRchoD/LmjAJAjN2DacQCybD+tM9 zhZf2pQ/oDcPOgkbek6sbq65eLevJci6MvZSKjR3NGw3S0tiDPiab3EgCJr00oAFyV5G XchFBVKwrunGuItnIGUoy7rxYngpMRaCkZaZN7bINEKguKTG3bm9M+ey+cuj7AKoHmjF 2FjcaRb0u1mz6sEXzdb0yy1I2EGXpkHEEl5yICNh35lzX+vztfu+/+0eIG7VPTxTc/xL AwVSN8CJIDX99MMY3hzdS7ciBrP8h5Pz22VytHb9DU4WeuGAEzqO5Dkx4MDEZh6Wty+V kGAg== X-Gm-Message-State: ACgBeo3iFjzTss6AnM6aXNt8z+aHhraSXmiyddqJqDbJ7Bgg6W+mV1YQ xzZMMAx/GdPzd1lFnkgDxbFd0ieBFtk= X-Google-Smtp-Source: AA6agR6xd72L+rsC/hMnbgzfUWXgS140415zMtP2NX4eiMAfPjPiGMAn/fSQEswkku0wCTfICQWhXA== X-Received: by 2002:a05:6000:144f:b0:222:d108:e80a with SMTP id v15-20020a056000144f00b00222d108e80amr1084372wrx.37.1659935248836; Sun, 07 Aug 2022 22:07:28 -0700 (PDT) Received: from [10.8.2.88] ([109.190.253.14]) by smtp.googlemail.com with ESMTPSA id l7-20020a05600c1d0700b003a524470beasm8401545wms.37.2022.08.07.22.07.27 (version=TLS1_3 cipher=TLS_AES_128_GCM_SHA256 bits=128/128); Sun, 07 Aug 2022 22:07:28 -0700 (PDT) Content-Type: multipart/mixed; boundary="------------F1rZts1YYINTZvMitLf1sQlF" Message-ID: Date: Mon, 8 Aug 2022 07:07:26 +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: en-US From: =?UTF-8?Q?Fran=c3=a7ois_Dumont?= To: "libstdc++@gcc.gnu.org" Cc: gcc-patches References: <3b6d1c3d-8bc7-e5e5-0a76-58d960f86e3f@gmail.com> In-Reply-To: <3b6d1c3d-8bc7-e5e5-0a76-58d960f86e3f@gmail.com> X-Spam-Status: No, score=-6.9 required=5.0 tests=BAYES_00, BODY_8BITS, DKIM_SIGNED, DKIM_VALID, DKIM_VALID_AU, DKIM_VALID_EF, FREEMAIL_FROM, GIT_PATCH_0, KAM_SHORT, NICE_REPLY_A, RCVD_IN_BARRACUDACENTRAL, RCVD_IN_DNSWL_NONE, RCVD_IN_SBL_CSS, 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 05:07:34 -0000 This is a multi-part message in MIME format. --------------F1rZts1YYINTZvMitLf1sQlF Content-Type: text/plain; charset=UTF-8; format=flowed Content-Transfer-Encoding: 8bit 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 --------------F1rZts1YYINTZvMitLf1sQlF 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 eCA0NzA2ZGVmZWRmMS4uY2Y4ZTZmNDgwODEgMTAwNjQ0Ci0tLSBhL2xpYnN0ZGMrKy12My9z cmMvYysrMTEvZGVidWcuY2MKKysrIGIvbGlic3RkYysrLXYzL3NyYy9jKysxMS9kZWJ1Zy5j YwpAQCAtNDI2LDcgKzQyNiw4IEBAIG5hbWVzcGFjZSBfX2dudV9kZWJ1ZwogICBfTV9yZXNl dCgpIHRocm93ICgpCiAgIHsKICAgICBfX2F0b21pY19zdG9yZV9uKCZfTV9zZXF1ZW5jZSwg KF9TYWZlX3NlcXVlbmNlX2Jhc2UqKTAsIF9fQVRPTUlDX1JFTEVBU0UpOwotICAgIF9NX3Zl cnNpb24gPSAwOworICAgIC8vIERldGFjaCBpdGVyYXRvciBzaGFsbCBub3QgbG9vayBsaWtl IGEgdmFsdWUtaW5pdGlhbGl6ZWQgb25lLgorICAgIC8vIF9NX3ZlcnNpb24gPSAwOwogICAg IF9NX3ByaW9yID0gMDsKICAgICBfTV9uZXh0ID0gMDsKICAgfQpAQCAtNzY3LDcgKzc2OCw4 IEBAIG5hbWVzcGFjZQogCSAiYmVmb3JlLWJlZ2luIiwKIAkgImRlcmVmZXJlbmNlYWJsZSAo c3RhcnQtb2YtcmV2ZXJzZS1zZXF1ZW5jZSkiLAogCSAiZGVyZWZlcmVuY2VhYmxlIChyZXZl cnNlKSIsCi0JICJwYXN0LXRoZS1yZXZlcnNlLWVuZCIKKwkgInBhc3QtdGhlLXJldmVyc2Ut ZW5kIiwKKwkgInNpbmd1bGFyICh2YWx1ZS1pbml0aWFsaXplZCkiCiAJfTsKICAgICAgIHBy aW50X3dvcmQoY3R4LCBzdGF0ZV9uYW1lc1tpdGVyYXRvci5fTV9zdGF0ZV0pOwogICAgIH0K ZGlmZiAtLWdpdCBhL2xpYnN0ZGMrKy12My90ZXN0c3VpdGUvMjNfY29udGFpbmVycy9kZXF1 ZS9kZWJ1Zy9pdGVyYXRvcjFfbmVnLmNjIGIvbGlic3RkYysrLXYzL3Rlc3RzdWl0ZS8yM19j b250YWluZXJzL2RlcXVlL2RlYnVnL2l0ZXJhdG9yMV9uZWcuY2MKbmV3IGZpbGUgbW9kZSAx MDA2NDQKaW5kZXggMDAwMDAwMDAwMDAuLjA5N2EwMzVjNDYxCi0tLSAvZGV2L251bGwKKysr IGIvbGlic3RkYysrLXYzL3Rlc3RzdWl0ZS8yM19jb250YWluZXJzL2RlcXVlL2RlYnVnL2l0 ZXJhdG9yMV9uZWcuY2MKQEAgLTAsMCArMSwzOSBAQAorLy8gQ29weXJpZ2h0IChDKSAyMDIy IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorLy8KKy8vIFRoaXMgZmlsZSBpcyBw YXJ0IG9mIHRoZSBHTlUgSVNPIEMrKyBMaWJyYXJ5LiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUK Ky8vIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0 IHVuZGVyIHRoZQorLy8gdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNl IGFzIHB1Ymxpc2hlZCBieSB0aGUKKy8vIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0 aGVyIHZlcnNpb24gMywgb3IgKGF0IHlvdXIgb3B0aW9uKQorLy8gYW55IGxhdGVyIHZlcnNp b24uCisvLworLy8gVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRo YXQgaXQgd2lsbCBiZSB1c2VmdWwsCisvLyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdp dGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorLy8gTUVSQ0hBTlRBQklMSVRZ IG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorLy8gR05V IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKy8vCisvLyBZb3Ug c2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMg TGljZW5zZSBhbG9uZworLy8gd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZ SU5HMy4gIElmIG5vdCBzZWUKKy8vIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4K Ky8vCisvLyB7IGRnLWRvIHJ1biB7IHhmYWlsICotKi0qIH0gfQorLy8geyBkZy1yZXF1aXJl LWRlYnVnLW1vZGUgIiIgfQorCisjaW5jbHVkZSA8ZGVxdWU+CisKKyNpbmNsdWRlIDx0ZXN0 c3VpdGVfaG9va3MuaD4KKwordm9pZCB0ZXN0MDEoKQoreworICB0eXBlZGVmIHR5cGVuYW1l IHN0ZDo6ZGVxdWU8aW50Pjo6aXRlcmF0b3IgSXQ7CisgIHN0ZDo6ZGVxdWU8aW50PiBkcTsK KyAgZHEucHVzaF9iYWNrKDEpOworCisgIEl0IGl0ID0gSXQoKTsKKyAgVkVSSUZZKCBkcS5i ZWdpbigpICE9IGl0ICk7Cit9CisKK2ludCBtYWluKCkKK3sKKyAgdGVzdDAxKCk7CisgIHJl dHVybiAwOworfQpkaWZmIC0tZ2l0IGEvbGlic3RkYysrLXYzL3Rlc3RzdWl0ZS8yM19jb250 YWluZXJzL2RlcXVlL2RlYnVnL2l0ZXJhdG9yMl9uZWcuY2MgYi9saWJzdGRjKystdjMvdGVz dHN1aXRlLzIzX2NvbnRhaW5lcnMvZGVxdWUvZGVidWcvaXRlcmF0b3IyX25lZy5jYwpuZXcg ZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMC4uMDk3YjViYTE1Y2IKLS0tIC9k ZXYvbnVsbAorKysgYi9saWJzdGRjKystdjMvdGVzdHN1aXRlLzIzX2NvbnRhaW5lcnMvZGVx dWUvZGVidWcvaXRlcmF0b3IyX25lZy5jYwpAQCAtMCwwICsxLDQyIEBACisvLyBDb3B5cmln aHQgKEMpIDIwMjIgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisvLworLy8gVGhp cyBmaWxlIGlzIHBhcnQgb2YgdGhlIEdOVSBJU08gQysrIExpYnJhcnkuICBUaGlzIGxpYnJh cnkgaXMgZnJlZQorLy8gc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9v ciBtb2RpZnkgaXQgdW5kZXIgdGhlCisvLyB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVi bGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZQorLy8gRnJlZSBTb2Z0d2FyZSBGb3Vu ZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAzLCBvciAoYXQgeW91ciBvcHRpb24pCisvLyBhbnkg bGF0ZXIgdmVyc2lvbi4KKy8vCisvLyBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4g dGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKy8vIGJ1dCBXSVRIT1VUIEFOWSBX QVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisvLyBNRVJD SEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUg dGhlCisvLyBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgor Ly8KKy8vIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5l cmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nCisvLyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRo ZSBmaWxlIENPUFlJTkczLiAgSWYgbm90IHNlZQorLy8gPGh0dHA6Ly93d3cuZ251Lm9yZy9s aWNlbnNlcy8+LgorLy8KKy8vIHsgZGctZG8gcnVuIHsgeGZhaWwgKi0qLSogfSB9CisvLyB7 IGRnLXJlcXVpcmUtZGVidWctbW9kZSAiIiB9CisKKyNpbmNsdWRlIDxkZXF1ZT4KKworI2lu Y2x1ZGUgPHRlc3RzdWl0ZV9ob29rcy5oPgorCit2b2lkIHRlc3QwMSgpCit7CisgIHR5cGVk ZWYgdHlwZW5hbWUgc3RkOjpkZXF1ZTxpbnQ+OjppdGVyYXRvciBJdDsKKyAgSXQgaXQ7Cisg IHsKKyAgICBzdGQ6OmRlcXVlPGludD4gZHE7CisgICAgaXQgPSBkcS5iZWdpbigpOworICB9 CisKKyAgSXQgdmFsdWVfaW5pdF9pdCA9IEl0KCk7CisgIFZFUklGWSggaXQgIT0gdmFsdWVf aW5pdF9pdCApOworfQorCitpbnQgbWFpbigpCit7CisgIHRlc3QwMSgpOworICByZXR1cm4g MDsKK30KZGlmZiAtLWdpdCBhL2xpYnN0ZGMrKy12My90ZXN0c3VpdGUvMjNfY29udGFpbmVy cy9mb3J3YXJkX2xpc3QvZGVidWcvaXRlcmF0b3IxX25lZy5jYyBiL2xpYnN0ZGMrKy12My90 ZXN0c3VpdGUvMjNfY29udGFpbmVycy9mb3J3YXJkX2xpc3QvZGVidWcvaXRlcmF0b3IxX25l Zy5jYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMC4uNTQ3MmIwZWQy MzEKLS0tIC9kZXYvbnVsbAorKysgYi9saWJzdGRjKystdjMvdGVzdHN1aXRlLzIzX2NvbnRh aW5lcnMvZm9yd2FyZF9saXN0L2RlYnVnL2l0ZXJhdG9yMV9uZWcuY2MKQEAgLTAsMCArMSwz OSBAQAorLy8gQ29weXJpZ2h0IChDKSAyMDIyIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwg SW5jLgorLy8KKy8vIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBHTlUgSVNPIEMrKyBMaWJy YXJ5LiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUKKy8vIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlz dHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0IHVuZGVyIHRoZQorLy8gdGVybXMgb2YgdGhl IEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUKKy8vIEZy ZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMywgb3IgKGF0IHlvdXIg b3B0aW9uKQorLy8gYW55IGxhdGVyIHZlcnNpb24uCisvLworLy8gVGhpcyBsaWJyYXJ5IGlz IGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisvLyBi dXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJy YW50eSBvZgorLy8gTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB UiBQVVJQT1NFLiAgU2VlIHRoZQorLy8gR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9y IG1vcmUgZGV0YWlscy4KKy8vCisvLyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5 IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZworLy8gd2l0aCB0aGlz IGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HMy4gIElmIG5vdCBzZWUKKy8vIDxodHRw Oi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4KKy8vCisvLyB7IGRnLWRvIHJ1biB7IHhmYWls ICotKi0qIH0gfQorLy8geyBkZy1yZXF1aXJlLWRlYnVnLW1vZGUgIiIgfQorCisjaW5jbHVk ZSA8Zm9yd2FyZF9saXN0PgorCisjaW5jbHVkZSA8dGVzdHN1aXRlX2hvb2tzLmg+CisKK3Zv aWQgdGVzdDAxKCkKK3sKKyAgdHlwZWRlZiB0eXBlbmFtZSBzdGQ6OmZvcndhcmRfbGlzdDxp bnQ+OjppdGVyYXRvciBJdDsKKyAgc3RkOjpmb3J3YXJkX2xpc3Q8aW50PiBmbDsKKyAgZmwu cHVzaF9mcm9udCgxKTsKKworICBJdCBpdCA9IEl0KCk7CisgIFZFUklGWSggZmwuYmVnaW4o KSAhPSBpdCApOworfQorCitpbnQgbWFpbigpCit7CisgIHRlc3QwMSgpOworICByZXR1cm4g MDsKK30KZGlmZiAtLWdpdCBhL2xpYnN0ZGMrKy12My90ZXN0c3VpdGUvMjNfY29udGFpbmVy cy9mb3J3YXJkX2xpc3QvZGVidWcvaXRlcmF0b3IyX25lZy5jYyBiL2xpYnN0ZGMrKy12My90 ZXN0c3VpdGUvMjNfY29udGFpbmVycy9mb3J3YXJkX2xpc3QvZGVidWcvaXRlcmF0b3IyX25l Zy5jYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMC4uNzQyNzhlYjhj YzgKLS0tIC9kZXYvbnVsbAorKysgYi9saWJzdGRjKystdjMvdGVzdHN1aXRlLzIzX2NvbnRh aW5lcnMvZm9yd2FyZF9saXN0L2RlYnVnL2l0ZXJhdG9yMl9uZWcuY2MKQEAgLTAsMCArMSw0 MiBAQAorLy8gQ29weXJpZ2h0IChDKSAyMDIyIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwg SW5jLgorLy8KKy8vIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBHTlUgSVNPIEMrKyBMaWJy YXJ5LiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUKKy8vIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlz dHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0IHVuZGVyIHRoZQorLy8gdGVybXMgb2YgdGhl IEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUKKy8vIEZy ZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMywgb3IgKGF0IHlvdXIg b3B0aW9uKQorLy8gYW55IGxhdGVyIHZlcnNpb24uCisvLworLy8gVGhpcyBsaWJyYXJ5IGlz IGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisvLyBi dXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJy YW50eSBvZgorLy8gTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB UiBQVVJQT1NFLiAgU2VlIHRoZQorLy8gR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9y IG1vcmUgZGV0YWlscy4KKy8vCisvLyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5 IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZworLy8gd2l0aCB0aGlz IGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HMy4gIElmIG5vdCBzZWUKKy8vIDxodHRw Oi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4KKy8vCisvLyB7IGRnLWRvIHJ1biB7IHRhcmdl dCBjKysxMSB4ZmFpbCAqLSotKiB9IH0KKy8vIHsgZGctcmVxdWlyZS1kZWJ1Zy1tb2RlICIi IH0KKworI2luY2x1ZGUgPGZvcndhcmRfbGlzdD4KKworI2luY2x1ZGUgPHRlc3RzdWl0ZV9o b29rcy5oPgorCit2b2lkIHRlc3QwMSgpCit7CisgIHR5cGVkZWYgdHlwZW5hbWUgc3RkOjpm b3J3YXJkX2xpc3Q8aW50Pjo6aXRlcmF0b3IgSXQ7CisgIEl0IGl0OworICB7CisgICAgc3Rk Ojpmb3J3YXJkX2xpc3Q8aW50PiBmbDsKKyAgICBpdCA9IGZsLmJlZ2luKCk7CisgIH0KKwor ICBJdCB2YWx1ZV9pbml0X2l0e307CisgIFZFUklGWSggaXQgIT0gdmFsdWVfaW5pdF9pdCAp OworfQorCitpbnQgbWFpbigpCit7CisgIHRlc3QwMSgpOworICByZXR1cm4gMDsKK30KZGlm ZiAtLWdpdCBhL2xpYnN0ZGMrKy12My90ZXN0c3VpdGUvMjNfY29udGFpbmVycy9mb3J3YXJk X2xpc3QvZGVidWcvaXRlcmF0b3IzX25lZy5jYyBiL2xpYnN0ZGMrKy12My90ZXN0c3VpdGUv MjNfY29udGFpbmVycy9mb3J3YXJkX2xpc3QvZGVidWcvaXRlcmF0b3IzX25lZy5jYwpuZXcg ZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMC4uMjA1YzU3ODI1YjYKLS0tIC9k ZXYvbnVsbAorKysgYi9saWJzdGRjKystdjMvdGVzdHN1aXRlLzIzX2NvbnRhaW5lcnMvZm9y d2FyZF9saXN0L2RlYnVnL2l0ZXJhdG9yM19uZWcuY2MKQEAgLTAsMCArMSw0NSBAQAorLy8g Q29weXJpZ2h0IChDKSAyMDIyIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorLy8K Ky8vIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBHTlUgSVNPIEMrKyBMaWJyYXJ5LiAgVGhp cyBsaWJyYXJ5IGlzIGZyZWUKKy8vIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBp dCBhbmQvb3IgbW9kaWZ5IGl0IHVuZGVyIHRoZQorLy8gdGVybXMgb2YgdGhlIEdOVSBHZW5l cmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUKKy8vIEZyZWUgU29mdHdh cmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMywgb3IgKGF0IHlvdXIgb3B0aW9uKQor Ly8gYW55IGxhdGVyIHZlcnNpb24uCisvLworLy8gVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1 dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisvLyBidXQgV0lUSE9V VCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgor Ly8gTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NF LiAgU2VlIHRoZQorLy8gR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0 YWlscy4KKy8vCisvLyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBH TlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZworLy8gd2l0aCB0aGlzIGxpYnJhcnk7 IHNlZSB0aGUgZmlsZSBDT1BZSU5HMy4gIElmIG5vdCBzZWUKKy8vIDxodHRwOi8vd3d3Lmdu dS5vcmcvbGljZW5zZXMvPi4KKy8vCisvLyB7IGRnLWRvIHJ1biB7IHhmYWlsICotKi0qIH0g fQorLy8geyBkZy1yZXF1aXJlLWRlYnVnLW1vZGUgIiIgfQorCisjaW5jbHVkZSA8Zm9yd2Fy ZF9saXN0PgorCisjaW5jbHVkZSA8dGVzdHN1aXRlX2hvb2tzLmg+CisKK3ZvaWQgdGVzdDAx KCkKK3sKKyAgdHlwZWRlZiB0eXBlbmFtZSBzdGQ6OmZvcndhcmRfbGlzdDxpbnQ+OjppdGVy YXRvciBJdDsKKyAgSXQgZW5kMSwgZW5kMjsKKworICB7CisgICAgc3RkOjpmb3J3YXJkX2xp c3Q8aW50PiBmbDsKKyAgICBmbC5wdXNoX2Zyb250KDEpOworCisgICAgZW5kMSA9IGVuZDIg PSBmbC5lbmQoKTsKKyAgICBWRVJJRlkoIGVuZDEgPT0gZW5kMiApOworICB9CisKKyAgVkVS SUZZKCBlbmQxID09IGVuZDIgKTsKK30KKworaW50IG1haW4oKQoreworICB0ZXN0MDEoKTsK KyAgcmV0dXJuIDA7Cit9Cg== --------------F1rZts1YYINTZvMitLf1sQlF--