From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mail-wm1-x335.google.com (mail-wm1-x335.google.com [IPv6:2a00:1450:4864:20::335]) by sourceware.org (Postfix) with ESMTPS id BD62A38582A5; Thu, 23 Nov 2023 21:58:43 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.2 sourceware.org BD62A38582A5 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 BD62A38582A5 Authentication-Results: server2.sourceware.org; arc=none smtp.remote-ip=2a00:1450:4864:20::335 ARC-Seal: i=1; a=rsa-sha256; d=sourceware.org; s=key; t=1700776726; cv=none; b=c19XefIksEyIgXFoXS3RWYm3tVA3UD7bN9v+Y5sf6iDU2166K+E/G7F8IFLXZrZU6ykSidr/nvuXjmCzq6+Voz8G9z3k78MSqTAwu93NzpGk82sxZzamovdNrPL82uHsJeYMBIJS5UQXxkOJVnWTefZQkFADHLm6HI1VyJ5/q5I= ARC-Message-Signature: i=1; a=rsa-sha256; d=sourceware.org; s=key; t=1700776726; c=relaxed/simple; bh=Chw4+PBM/6T90QUTMv2lKNKcHp+0vC3aI0kbEQNhi7Y=; h=DKIM-Signature:Message-ID:Date:MIME-Version:From:Subject:To; b=VwAkcEfWi6LxLoQCsFTPaKgEoUPkOL2CVR38TuzXWg78Tdz6LInEr4IWzDug+hhkEf5W+AD2sTsh/lbt4i7dhSrmMUckwcfFH+M2XbcGmYljdeVqchHu042zCjGZk1LOCRenV6PIVqmyOYjIXJfjESVnW9Xl4SqLTbeyiaoJUu8= ARC-Authentication-Results: i=1; server2.sourceware.org Received: by mail-wm1-x335.google.com with SMTP id 5b1f17b1804b1-40790b0a224so8683935e9.0; Thu, 23 Nov 2023 13:58:43 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1700776721; x=1701381521; darn=gcc.gnu.org; h=content-language:cc:to:subject:from:user-agent:mime-version:date :message-id:from:to:cc:subject:date:message-id:reply-to; bh=d1bZAoN21BhFLqrDdrtHn2KjnFkKSSuSu9ElmYnJc0w=; b=lpaxfHloLXMhYcCTtoB1bf05XJEz7IqRImmUEGu2SbFSrn+MBcTnn1q4E4RytT5fU/ KxrqmSjftw3MR5P4nYp7y+ExJC0w7FiqevF0z+wJ18kgF7CIPT53xzzdHPdAxH22upXR FBwNMi6moHdlx7C6Qx/YH8fBWJGkWHhYXUgyjRifeVL1Crq5ZzAyf3kjZSjXxU9/KKun X3HJ+00/IIU8ALdC7iBHI+B7vePR3DrzR32OHffhdFI7p6EY4kdVAAOIcbTCOJX9Ua/e HlhUlnycjGw4k0R1mKscUEr6aINZepcoHxOitqyv/FLdgh1Fxu21OXpmRzVNc+u4/Lve g+9w== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1700776721; x=1701381521; h=content-language:cc:to:subject:from:user-agent:mime-version:date :message-id:x-gm-message-state:from:to:cc:subject:date:message-id :reply-to; bh=d1bZAoN21BhFLqrDdrtHn2KjnFkKSSuSu9ElmYnJc0w=; b=AcR4GBwyTNnTfVWIZYatcFxxVlRTKiGnSt3LsTsYWuG93aDqQLal1Ifxay41yLH+Eg 2hKbzYF/yZ87c90XzodBuPtfhjhJLHArotZPyBEOl65TmiImCHAGT/AWCZchsGy5frqc GPawlfF1+lTzs6tYcsU34QamPzpctnLuLqWrsZMX/xuojzIaIYQDYEtxqT54DyniHuYU +CR3tEqB7vxlhrh3sjJL7EQfEigxEyi6LKFVYXcD+G7lErzzA+r3boENOLEGtqsvD/6b jNRPAky6hzJZE456wWdJX6xV/6qnREim71D4x8UbJh/MMUQ7lDwU0v9loWgyh4MdqFel cqmA== X-Gm-Message-State: AOJu0Ywq1OF/gfoeWR9bYX8uh6A4YkRkwkJux/31TUt6c9g3RrqEUIoh d8q+flXRtY8dhVhNw3DNe2cp0QT2kqc= X-Google-Smtp-Source: AGHT+IECKX34si0iUaGsIi84PVdxK4PYj6F8nGmGoMNL8/4aaEjkG/p1HUxPV6NAooIofC7ENlQxiA== X-Received: by 2002:a05:6000:b03:b0:332:cada:84a with SMTP id dj3-20020a0560000b0300b00332cada084amr534240wrb.61.1700776721265; Thu, 23 Nov 2023 13:58:41 -0800 (PST) Received: from ?IPV6:2a01:e0a:1dc:b1c0:fc8d:30b8:64d5:2ae8? ([2a01:e0a:1dc:b1c0:fc8d:30b8:64d5:2ae8]) by smtp.gmail.com with ESMTPSA id o7-20020a05600c510700b0040b36ad5413sm2995518wms.46.2023.11.23.13.58.40 (version=TLS1_3 cipher=TLS_AES_128_GCM_SHA256 bits=128/128); Thu, 23 Nov 2023 13:58:40 -0800 (PST) Content-Type: multipart/mixed; boundary="------------kzPotFvCWdi08LzgWm81Kx75" Message-ID: <1e319e88-62ae-476f-bae0-afa8ba126310@gmail.com> Date: Thu, 23 Nov 2023 22:58:40 +0100 MIME-Version: 1.0 User-Agent: Mozilla Thunderbird From: =?UTF-8?Q?Fran=C3=A7ois_Dumont?= Subject: [PATCH 2/5][_Hashtable] Fix implementation inconsistencies To: libstdc++ Cc: gcc-patches Content-Language: en-US X-Spam-Status: No, score=-9.1 required=5.0 tests=BAYES_00,BODY_8BITS,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,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 List-Id: This is a multi-part message in MIME format. --------------kzPotFvCWdi08LzgWm81Kx75 Content-Type: text/plain; charset=UTF-8; format=flowed Content-Transfer-Encoding: 8bit     libstdc++: [_Hashtable] Fix some implementation inconsistencies     Get rid of the different usages of the mutable keyword. For     _Prime_rehash_policy methods are exported from the library, we need to     keep their const qualifier, so adapt implementation to update previously     mutable member.     Remove useless noexcept qualification on _Hashtable _M_bucket_index overload.     Fix comment to explain that we need the computation of bucket index to be     noexcept to be able to rehash the container when needed. For Standard     instantiations through std::unordered_xxx containers we already force     usage of hash code cache when hash functor is not noexcep so it is guarantied.     The static_assert purpose in _Hashtable on _M_bucket_index is thus limited     to usages of _Hashtable with exotic _Hashtable_traits.     libstdc++-v3/ChangeLog:             * include/bits/hashtable_policy.h (_NodeBuilder<>::_S_build): Remove             const qualification on _NodeGenerator instance. (_ReuseOrAllocNode<>::operator()(_Args&&...)): Remove const qualification.             (_ReuseOrAllocNode<>::_M_nodes): Remove mutable.             (_Prime_rehash_policy::max_load_factor()): Remove noexcept.             (_Prime_rehash_policy::_M_reset()): Remove noexcept.             (_Prime_rehash_policy::_M_next_resize): Remove mutable.             (_Power2_rehash_policy::_M_next_bkt(size_t)): Remove noexcept.             (_Power2_rehash_policy::_M_bkt_for_elements(size_t)): Remove noexcept.             (_Power2_rehash_policy::_M_neeed_rehash): Remove noexcept.             (_Power2_rehash_policy::_M_reset): Remove noexcept.             (_Insert_base<>::_M_insert_range): Remove _NodeGetter const qualification.             (_Hash_code_base<>::_M_bucket_index(const _Hash_node_value<>&, size_t)):             Simplify noexcept declaration, we already static_assert that _RangeHash functor             is noexcept.             * include/bits/hashtable.h: Rework comments. Remove const qualifier on             _NodeGenerator& arguments.             (_Hashtable<>::_M_bucket_index(const __node_value_type&)): Remove useless             noexcept qualification.             * src/c++11/hashtable_c++0x.cc (_Prime_rehash_policy): Workaround             _M_next_resize not being mutable anymore. Tested under Linux x86_64, ok to commit ? François --------------kzPotFvCWdi08LzgWm81Kx75 Content-Type: text/plain; charset=UTF-8; name="hashtable_inconsistencies.txt" Content-Disposition: attachment; filename="hashtable_inconsistencies.txt" Content-Transfer-Encoding: base64 ZGlmZiAtLWdpdCBhL2xpYnN0ZGMrKy12My9pbmNsdWRlL2JpdHMvaGFzaHRhYmxlLmggYi9s aWJzdGRjKystdjMvaW5jbHVkZS9iaXRzL2hhc2h0YWJsZS5oCmluZGV4IDlmZjkxMDRhMmFi Li44MzI5ZDMyZTY4ZSAxMDA2NDQKLS0tIGEvbGlic3RkYysrLXYzL2luY2x1ZGUvYml0cy9o YXNodGFibGUuaAorKysgYi9saWJzdGRjKystdjMvaW5jbHVkZS9iaXRzL2hhc2h0YWJsZS5o CkBAIC00OCw3ICs0OCw3IEBAIF9HTElCQ1hYX0JFR0lOX05BTUVTUEFDRV9WRVJTSU9OCiAg ICAgdXNpbmcgX19jYWNoZV9kZWZhdWx0CiAgICAgICA9ICBfX25vdF88X19hbmRfPC8vIERv IG5vdCBjYWNoZSBmb3IgZmFzdCBoYXNoZXIuCiAJCSAgICAgICBfX2lzX2Zhc3RfaGFzaDxf SGFzaD4sCi0JCSAgICAgICAvLyBNYW5kYXRvcnkgdG8gaGF2ZSBlcmFzZSBub3QgdGhyb3dp bmcuCisJCSAgICAgICAvLyBNYW5kYXRvcnkgZm9yIHRoZSByZWhhc2ggcHJvY2Vzcy4KIAkJ ICAgICAgIF9faXNfbm90aHJvd19pbnZvY2FibGU8Y29uc3QgX0hhc2gmLCBjb25zdCBfVHAm Pj4+OwogCiAgIC8vIEhlbHBlciB0byBjb25kaXRpb25hbGx5IGRlbGV0ZSB0aGUgZGVmYXVs dCBjb25zdHJ1Y3Rvci4KQEAgLTQ3Nyw3ICs0NzcsNyBAQCBfR0xJQkNYWF9CRUdJTl9OQU1F U1BBQ0VfVkVSU0lPTgogCiAgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSHQsIHR5cGVuYW1l IF9Ob2RlR2VuZXJhdG9yPgogCXZvaWQKLQlfTV9hc3NpZ24oX0h0JiYsIGNvbnN0IF9Ob2Rl R2VuZXJhdG9yJik7CisJX01fYXNzaWduKF9IdCYmLCBfTm9kZUdlbmVyYXRvciYpOwogCiAg ICAgICB2b2lkCiAgICAgICBfTV9tb3ZlX2Fzc2lnbihfSGFzaHRhYmxlJiYsIHRydWVfdHlw ZSk7CkBAIC03OTIsNyArNzkyLDcgQEAgX0dMSUJDWFhfQkVHSU5fTkFNRVNQQUNFX1ZFUlNJ T04KICAgICBwcml2YXRlOgogICAgICAgLy8gQnVja2V0IGluZGV4IGNvbXB1dGF0aW9uIGhl bHBlcnMuCiAgICAgICBzaXplX3R5cGUKLSAgICAgIF9NX2J1Y2tldF9pbmRleChjb25zdCBf X25vZGVfdmFsdWVfdHlwZSYgX19uKSBjb25zdCBub2V4Y2VwdAorICAgICAgX01fYnVja2V0 X2luZGV4KGNvbnN0IF9fbm9kZV92YWx1ZV90eXBlJiBfX24pIGNvbnN0CiAgICAgICB7IHJl dHVybiBfX2hhc2hfY29kZV9iYXNlOjpfTV9idWNrZXRfaW5kZXgoX19uLCBfTV9idWNrZXRf Y291bnQpOyB9CiAKICAgICAgIHNpemVfdHlwZQpAQCAtOTIwLDcgKzkyMCw3IEBAIF9HTElC Q1hYX0JFR0lOX05BTUVTUEFDRV9WRVJTSU9OCiAKICAgICAgIHRlbXBsYXRlPHR5cGVuYW1l IF9LdCwgdHlwZW5hbWUgX0FyZywgdHlwZW5hbWUgX05vZGVHZW5lcmF0b3I+CiAJc3RkOjpw YWlyPGl0ZXJhdG9yLCBib29sPgotCV9NX2luc2VydF91bmlxdWUoX0t0JiYsIF9BcmcmJiwg Y29uc3QgX05vZGVHZW5lcmF0b3ImKTsKKwlfTV9pbnNlcnRfdW5pcXVlKF9LdCYmLCBfQXJn JiYsIF9Ob2RlR2VuZXJhdG9yJik7CiAKICAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9LdD4K IAlzdGF0aWMgX19jb25kaXRpb25hbF90PApAQCAtOTQwLDcgKzk0MCw3IEBAIF9HTElCQ1hY X0JFR0lOX05BTUVTUEFDRV9WRVJTSU9OCiAKICAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9B cmcsIHR5cGVuYW1lIF9Ob2RlR2VuZXJhdG9yPgogCXN0ZDo6cGFpcjxpdGVyYXRvciwgYm9v bD4KLQlfTV9pbnNlcnRfdW5pcXVlX2F1eChfQXJnJiYgX19hcmcsIGNvbnN0IF9Ob2RlR2Vu ZXJhdG9yJiBfX25vZGVfZ2VuKQorCV9NX2luc2VydF91bmlxdWVfYXV4KF9BcmcmJiBfX2Fy ZywgX05vZGVHZW5lcmF0b3ImIF9fbm9kZV9nZW4pCiAJewogCSAgcmV0dXJuIF9NX2luc2Vy dF91bmlxdWUoCiAJICAgIF9TX2ZvcndhcmRfa2V5KF9FeHRyYWN0S2V5e30oc3RkOjpmb3J3 YXJkPF9Bcmc+KF9fYXJnKSkpLApAQCAtOTQ5LDcgKzk0OSw3IEBAIF9HTElCQ1hYX0JFR0lO X05BTUVTUEFDRV9WRVJTSU9OCiAKICAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9BcmcsIHR5 cGVuYW1lIF9Ob2RlR2VuZXJhdG9yPgogCXN0ZDo6cGFpcjxpdGVyYXRvciwgYm9vbD4KLQlf TV9pbnNlcnQoX0FyZyYmIF9fYXJnLCBjb25zdCBfTm9kZUdlbmVyYXRvciYgX19ub2RlX2dl biwKKwlfTV9pbnNlcnQoX0FyZyYmIF9fYXJnLCBfTm9kZUdlbmVyYXRvciYgX19ub2RlX2dl biwKIAkJICB0cnVlX3R5cGUgLyogX191a3MgKi8pCiAJewogCSAgdXNpbmcgX190b192YWx1 ZQpAQCAtOTYwLDcgKzk2MCw3IEBAIF9HTElCQ1hYX0JFR0lOX05BTUVTUEFDRV9WRVJTSU9O CiAKICAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9BcmcsIHR5cGVuYW1lIF9Ob2RlR2VuZXJh dG9yPgogCWl0ZXJhdG9yCi0JX01faW5zZXJ0KF9BcmcmJiBfX2FyZywgY29uc3QgX05vZGVH ZW5lcmF0b3ImIF9fbm9kZV9nZW4sCisJX01faW5zZXJ0KF9BcmcmJiBfX2FyZywgX05vZGVH ZW5lcmF0b3ImIF9fbm9kZV9nZW4sCiAJCSAgZmFsc2VfdHlwZSBfX3VrcykKIAl7CiAJICB1 c2luZyBfX3RvX3ZhbHVlCkBAIC05NzMsNyArOTczLDcgQEAgX0dMSUJDWFhfQkVHSU5fTkFN RVNQQUNFX1ZFUlNJT04KICAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9BcmcsIHR5cGVuYW1l IF9Ob2RlR2VuZXJhdG9yPgogCWl0ZXJhdG9yCiAJX01faW5zZXJ0KGNvbnN0X2l0ZXJhdG9y LCBfQXJnJiYgX19hcmcsCi0JCSAgY29uc3QgX05vZGVHZW5lcmF0b3ImIF9fbm9kZV9nZW4s IHRydWVfdHlwZSBfX3VrcykKKwkJICBfTm9kZUdlbmVyYXRvciYgX19ub2RlX2dlbiwgdHJ1 ZV90eXBlIF9fdWtzKQogCXsKIAkgIHJldHVybgogCSAgICBfTV9pbnNlcnQoc3RkOjpmb3J3 YXJkPF9Bcmc+KF9fYXJnKSwgX19ub2RlX2dlbiwgX191a3MpLmZpcnN0OwpAQCAtOTgzLDcg Kzk4Myw3IEBAIF9HTElCQ1hYX0JFR0lOX05BTUVTUEFDRV9WRVJTSU9OCiAgICAgICB0ZW1w bGF0ZTx0eXBlbmFtZSBfQXJnLCB0eXBlbmFtZSBfTm9kZUdlbmVyYXRvcj4KIAlpdGVyYXRv cgogCV9NX2luc2VydChjb25zdF9pdGVyYXRvciwgX0FyZyYmLAotCQkgIGNvbnN0IF9Ob2Rl R2VuZXJhdG9yJiwgZmFsc2VfdHlwZSBfX3Vrcyk7CisJCSAgX05vZGVHZW5lcmF0b3ImLCBm YWxzZV90eXBlIF9fdWtzKTsKIAogICAgICAgc2l6ZV90eXBlCiAgICAgICBfTV9lcmFzZSh0 cnVlX3R5cGUgX191a3MsIGNvbnN0IGtleV90eXBlJik7CkBAIC0xMzc4LDcgKzEzNzgsNyBA QCBfR0xJQkNYWF9CRUdJTl9OQU1FU1BBQ0VfVkVSU0lPTgogICAgICAgdm9pZAogICAgICAg X0hhc2h0YWJsZTxfS2V5LCBfVmFsdWUsIF9BbGxvYywgX0V4dHJhY3RLZXksIF9FcXVhbCwK IAkJIF9IYXNoLCBfUmFuZ2VIYXNoLCBfVW51c2VkLCBfUmVoYXNoUG9saWN5LCBfVHJhaXRz Pjo6Ci0gICAgICBfTV9hc3NpZ24oX0h0JiYgX19odCwgY29uc3QgX05vZGVHZW5lcmF0b3Im IF9fbm9kZV9nZW4pCisgICAgICBfTV9hc3NpZ24oX0h0JiYgX19odCwgX05vZGVHZW5lcmF0 b3ImIF9fbm9kZV9nZW4pCiAgICAgICB7CiAJX19idWNrZXRzX3B0ciBfX2J1Y2tldHMgPSBu dWxscHRyOwogCWlmICghX01fYnVja2V0cykKQEAgLTE2MjAsOCArMTYyMCwxMCBAQCBfR0xJ QkNYWF9CRUdJTl9OQU1FU1BBQ0VfVkVSU0lPTgogICAgIH5fSGFzaHRhYmxlKCkgbm9leGNl cHQKICAgICB7CiAgICAgICAvLyBHZXR0aW5nIGEgYnVja2V0IGluZGV4IGZyb20gYSBub2Rl IHNoYWxsIG5vdCB0aHJvdyBiZWNhdXNlIGl0IGlzIHVzZWQKLSAgICAgIC8vIGluIG1ldGhv ZHMgKGVyYXNlLCBzd2FwLi4uKSB0aGF0IHNoYWxsIG5vdCB0aHJvdy4gTmVlZCBhIGNvbXBs ZXRlCi0gICAgICAvLyB0eXBlIHRvIGNoZWNrIHRoaXMsIHNvIGRvIGl0IGluIHRoZSBkZXN0 cnVjdG9yIG5vdCBhdCBjbGFzcyBzY29wZS4KKyAgICAgIC8vIGR1cmluZyB0aGUgcmVoYXNo IHByb2Nlc3MuIFRoaXMgc3RhdGljX2Fzc2VydCBwdXJwb3NlIGlzIGxpbWl0ZWQgdG8gdXNh Z2UKKyAgICAgIC8vIG9mIF9IYXNodGFibGUgd2l0aCBfSGFzaHRhYmxlX3RyYWl0cyByZXF1 ZXN0aW5nIG5vbi1jYWNoZWQgaGFzaCBjb2RlLgorICAgICAgLy8gTmVlZCBhIGNvbXBsZXRl IHR5cGUgdG8gY2hlY2sgdGhpcywgc28gZG8gaXQgaW4gdGhlIGRlc3RydWN0b3Igbm90IGF0 CisgICAgICAvLyBjbGFzcyBzY29wZS4KICAgICAgIHN0YXRpY19hc3NlcnQobm9leGNlcHQo ZGVjbHZhbDxjb25zdCBfX2hhc2hfY29kZV9iYXNlX2FjY2VzcyY+KCkKIAkJCS5fTV9idWNr ZXRfaW5kZXgoZGVjbHZhbDxjb25zdCBfX25vZGVfdmFsdWVfdHlwZSY+KCksCiAJCQkJCSAo c3RkOjpzaXplX3QpMCkpLApAQCAtMjIyMiw3ICsyMjI0LDcgQEAgX0dMSUJDWFhfQkVHSU5f TkFNRVNQQUNFX1ZFUlNJT04KICAgICAgIF9IYXNodGFibGU8X0tleSwgX1ZhbHVlLCBfQWxs b2MsIF9FeHRyYWN0S2V5LCBfRXF1YWwsCiAJCSBfSGFzaCwgX1JhbmdlSGFzaCwgX1VudXNl ZCwgX1JlaGFzaFBvbGljeSwgX1RyYWl0cz46OgogICAgICAgX01faW5zZXJ0X3VuaXF1ZShf S3QmJiBfX2ssIF9BcmcmJiBfX3YsCi0JCSAgICAgICBjb25zdCBfTm9kZUdlbmVyYXRvciYg X19ub2RlX2dlbikKKwkJICAgICAgIF9Ob2RlR2VuZXJhdG9yJiBfX25vZGVfZ2VuKQogICAg ICAgLT4gcGFpcjxpdGVyYXRvciwgYm9vbD4KICAgICAgIHsKIAlpZiAoc2l6ZSgpIDw9IF9f c21hbGxfc2l6ZV90aHJlc2hvbGQoKSkKQEAgLTIyNTksNyArMjI2MSw3IEBAIF9HTElCQ1hY X0JFR0lOX05BTUVTUEFDRV9WRVJTSU9OCiAgICAgICBfSGFzaHRhYmxlPF9LZXksIF9WYWx1 ZSwgX0FsbG9jLCBfRXh0cmFjdEtleSwgX0VxdWFsLAogCQkgX0hhc2gsIF9SYW5nZUhhc2gs IF9VbnVzZWQsIF9SZWhhc2hQb2xpY3ksIF9UcmFpdHM+OjoKICAgICAgIF9NX2luc2VydChj b25zdF9pdGVyYXRvciBfX2hpbnQsIF9BcmcmJiBfX3YsCi0JCWNvbnN0IF9Ob2RlR2VuZXJh dG9yJiBfX25vZGVfZ2VuLAorCQlfTm9kZUdlbmVyYXRvciYgX19ub2RlX2dlbiwKIAkJZmFs c2VfdHlwZSAvKiBfX3VrcyAqLykKICAgICAgIC0+IGl0ZXJhdG9yCiAgICAgICB7CmRpZmYg LS1naXQgYS9saWJzdGRjKystdjMvaW5jbHVkZS9iaXRzL2hhc2h0YWJsZV9wb2xpY3kuaCBi L2xpYnN0ZGMrKy12My9pbmNsdWRlL2JpdHMvaGFzaHRhYmxlX3BvbGljeS5oCmluZGV4IGM2 N2VlYmQzYjJiLi41YzQwYmUyY2I3MiAxMDA2NDQKLS0tIGEvbGlic3RkYysrLXYzL2luY2x1 ZGUvYml0cy9oYXNodGFibGVfcG9saWN5LmgKKysrIGIvbGlic3RkYysrLXYzL2luY2x1ZGUv Yml0cy9oYXNodGFibGVfcG9saWN5LmgKQEAgLTE1NSw3ICsxNTUsNyBAQCBuYW1lc3BhY2Ug X19kZXRhaWwKICAgICB7CiAgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBfS3QsIHR5cGVuYW1l IF9BcmcsIHR5cGVuYW1lIF9Ob2RlR2VuZXJhdG9yPgogCXN0YXRpYyBhdXRvCi0JX1NfYnVp bGQoX0t0JiYgX19rLCBfQXJnJiYgX19hcmcsIGNvbnN0IF9Ob2RlR2VuZXJhdG9yJiBfX25v ZGVfZ2VuKQorCV9TX2J1aWxkKF9LdCYmIF9faywgX0FyZyYmIF9fYXJnLCBfTm9kZUdlbmVy YXRvciYgX19ub2RlX2dlbikKIAktPiB0eXBlbmFtZSBfTm9kZUdlbmVyYXRvcjo6X19ub2Rl X3B0cgogCXsKIAkgIHJldHVybiBfX25vZGVfZ2VuKHN0ZDo6Zm9yd2FyZDxfS3Q+KF9fayks CkBAIC0xNjgsNyArMTY4LDcgQEAgbmFtZXNwYWNlIF9fZGV0YWlsCiAgICAgewogICAgICAg dGVtcGxhdGU8dHlwZW5hbWUgX0t0LCB0eXBlbmFtZSBfQXJnLCB0eXBlbmFtZSBfTm9kZUdl bmVyYXRvcj4KIAlzdGF0aWMgYXV0bwotCV9TX2J1aWxkKF9LdCYmIF9faywgX0FyZyYmLCBj b25zdCBfTm9kZUdlbmVyYXRvciYgX19ub2RlX2dlbikKKwlfU19idWlsZChfS3QmJiBfX2ss IF9BcmcmJiwgX05vZGVHZW5lcmF0b3ImIF9fbm9kZV9nZW4pCiAJLT4gdHlwZW5hbWUgX05v ZGVHZW5lcmF0b3I6Ol9fbm9kZV9wdHIKIAl7IHJldHVybiBfX25vZGVfZ2VuKHN0ZDo6Zm9y d2FyZDxfS3Q+KF9faykpOyB9CiAgICAgfTsKQEAgLTIxMiw3ICsyMTIsNyBAQCBuYW1lc3Bh Y2UgX19kZXRhaWwKIAogICAgICAgdGVtcGxhdGU8dHlwZW5hbWUuLi4gX0FyZ3M+CiAJX19u b2RlX3B0cgotCW9wZXJhdG9yKCkoX0FyZ3MmJi4uLiBfX2FyZ3MpIGNvbnN0CisJb3BlcmF0 b3IoKShfQXJncyYmLi4uIF9fYXJncykKIAl7CiAJICBpZiAoIV9NX25vZGVzKQogCSAgICBy ZXR1cm4gX01faC5fTV9hbGxvY2F0ZV9ub2RlKHN0ZDo6Zm9yd2FyZDxfQXJncz4oX19hcmdz KS4uLik7CkBAIC0yMzAsNyArMjMwLDcgQEAgbmFtZXNwYWNlIF9fZGV0YWlsCiAJfQogCiAg ICAgcHJpdmF0ZToKLSAgICAgIG11dGFibGUgX19ub2RlX3B0ciBfTV9ub2RlczsKKyAgICAg IF9fbm9kZV9wdHIgX01fbm9kZXM7CiAgICAgICBfX2hhc2h0YWJsZV9hbGxvYyYgX01faDsK ICAgICB9OwogCkBAIC01NTEsMTAgKzU1MSwxMSBAQCBuYW1lc3BhY2UgX19kZXRhaWwKICAg ICA6IF9NX21heF9sb2FkX2ZhY3RvcihfX3opLCBfTV9uZXh0X3Jlc2l6ZSgwKSB7IH0KIAog ICAgIGZsb2F0Ci0gICAgbWF4X2xvYWRfZmFjdG9yKCkgY29uc3Qgbm9leGNlcHQKKyAgICBt YXhfbG9hZF9mYWN0b3IoKSBjb25zdAogICAgIHsgcmV0dXJuIF9NX21heF9sb2FkX2ZhY3Rv cjsgfQogCiAgICAgLy8gUmV0dXJuIGEgYnVja2V0IHNpemUgbm8gc21hbGxlciB0aGFuIG4u CisgICAgLy8gVE9ETzogJ2NvbnN0JyBxdWFsaWZpZXIgaXMga2VwdCBmb3IgYWJpIGNvbXBh dGliaWxpdHkgcmVhc29uLgogICAgIHN0ZDo6c2l6ZV90CiAgICAgX01fbmV4dF9ia3Qoc3Rk OjpzaXplX3QgX19uKSBjb25zdDsKIApAQCAtNTY3LDYgKzU2OCw3IEBAIG5hbWVzcGFjZSBf X2RldGFpbAogICAgIC8vIGFuZCBfX25faW5zIGlzIG51bWJlciBvZiBlbGVtZW50cyB0byBi ZSBpbnNlcnRlZC4gIERvIHdlIG5lZWQgdG8KICAgICAvLyBpbmNyZWFzZSBidWNrZXQgY291 bnQ/ICBJZiBzbywgcmV0dXJuIG1ha2VfcGFpcih0cnVlLCBuKSwgd2hlcmUgbgogICAgIC8v IGlzIHRoZSBuZXcgYnVja2V0IGNvdW50LiAgSWYgbm90LCByZXR1cm4gbWFrZV9wYWlyKGZh bHNlLCAwKS4KKyAgICAvLyBUT0RPOiAnY29uc3QnIHF1YWxpZmllciBpcyBrZXB0IGZvciBh YmkgY29tcGF0aWJpbGl0eSByZWFzb24uCiAgICAgc3RkOjpwYWlyPGJvb2wsIHN0ZDo6c2l6 ZV90PgogICAgIF9NX25lZWRfcmVoYXNoKHN0ZDo6c2l6ZV90IF9fbl9ia3QsIHN0ZDo6c2l6 ZV90IF9fbl9lbHQsCiAJCSAgIHN0ZDo6c2l6ZV90IF9fbl9pbnMpIGNvbnN0OwpAQCAtNTc4 LDcgKzU4MCw3IEBAIG5hbWVzcGFjZSBfX2RldGFpbAogICAgIHsgcmV0dXJuIF9NX25leHRf cmVzaXplOyB9CiAKICAgICB2b2lkCi0gICAgX01fcmVzZXQoKSBub2V4Y2VwdAorICAgIF9N X3Jlc2V0KCkKICAgICB7IF9NX25leHRfcmVzaXplID0gMDsgfQogCiAgICAgdm9pZApAQCAt NTg4LDcgKzU5MCw3IEBAIG5hbWVzcGFjZSBfX2RldGFpbAogICAgIHN0YXRpYyBjb25zdCBz dGQ6OnNpemVfdCBfU19ncm93dGhfZmFjdG9yID0gMjsKIAogICAgIGZsb2F0CQlfTV9tYXhf bG9hZF9mYWN0b3I7Ci0gICAgbXV0YWJsZSBzdGQ6OnNpemVfdAlfTV9uZXh0X3Jlc2l6ZTsK KyAgICBzdGQ6OnNpemVfdAkJX01fbmV4dF9yZXNpemU7CiAgIH07CiAKICAgLy8vIFJhbmdl IGhhc2hpbmcgZnVuY3Rpb24gYXNzdW1pbmcgdGhhdCBzZWNvbmQgYXJnIGlzIGEgcG93ZXIg b2YgMi4KQEAgLTYyOSwxMyArNjMxLDEzIEBAIG5hbWVzcGFjZSBfX2RldGFpbAogICAgIDog X01fbWF4X2xvYWRfZmFjdG9yKF9feiksIF9NX25leHRfcmVzaXplKDApIHsgfQogCiAgICAg ZmxvYXQKLSAgICBtYXhfbG9hZF9mYWN0b3IoKSBjb25zdCBub2V4Y2VwdAorICAgIG1heF9s b2FkX2ZhY3RvcigpIGNvbnN0CiAgICAgeyByZXR1cm4gX01fbWF4X2xvYWRfZmFjdG9yOyB9 CiAKICAgICAvLyBSZXR1cm4gYSBidWNrZXQgc2l6ZSBubyBzbWFsbGVyIHRoYW4gbiAoYXMg bG9uZyBhcyBuIGlzIG5vdCBhYm92ZSB0aGUKICAgICAvLyBoaWdoZXN0IHBvd2VyIG9mIDIp LgogICAgIHN0ZDo6c2l6ZV90Ci0gICAgX01fbmV4dF9ia3Qoc3RkOjpzaXplX3QgX19uKSBu b2V4Y2VwdAorICAgIF9NX25leHRfYmt0KHN0ZDo6c2l6ZV90IF9fbikKICAgICB7CiAgICAg ICBpZiAoX19uID09IDApCiAJLy8gU3BlY2lhbCBjYXNlIG9uIGNvbnRhaW5lciAxc3QgaW5p dGlhbGl6YXRpb24gd2l0aCAwIGJ1Y2tldCBjb3VudApAQCAtNjY5LDcgKzY3MSw3IEBAIG5h bWVzcGFjZSBfX2RldGFpbAogCiAgICAgLy8gUmV0dXJuIGEgYnVja2V0IGNvdW50IGFwcHJv cHJpYXRlIGZvciBuIGVsZW1lbnRzCiAgICAgc3RkOjpzaXplX3QKLSAgICBfTV9ia3RfZm9y X2VsZW1lbnRzKHN0ZDo6c2l6ZV90IF9fbikgY29uc3Qgbm9leGNlcHQKKyAgICBfTV9ia3Rf Zm9yX2VsZW1lbnRzKHN0ZDo6c2l6ZV90IF9fbikgY29uc3QKICAgICB7IHJldHVybiBfX2J1 aWx0aW5fY2VpbChfX24gLyAoZG91YmxlKV9NX21heF9sb2FkX2ZhY3Rvcik7IH0KIAogICAg IC8vIF9fbl9ia3QgaXMgY3VycmVudCBidWNrZXQgY291bnQsIF9fbl9lbHQgaXMgY3VycmVu dCBlbGVtZW50IGNvdW50LApAQCAtNjc4LDcgKzY4MCw3IEBAIG5hbWVzcGFjZSBfX2RldGFp bAogICAgIC8vIGlzIHRoZSBuZXcgYnVja2V0IGNvdW50LiAgSWYgbm90LCByZXR1cm4gbWFr ZV9wYWlyKGZhbHNlLCAwKS4KICAgICBzdGQ6OnBhaXI8Ym9vbCwgc3RkOjpzaXplX3Q+CiAg ICAgX01fbmVlZF9yZWhhc2goc3RkOjpzaXplX3QgX19uX2JrdCwgc3RkOjpzaXplX3QgX19u X2VsdCwKLQkJICAgc3RkOjpzaXplX3QgX19uX2lucykgbm9leGNlcHQKKwkJICAgc3RkOjpz aXplX3QgX19uX2lucykKICAgICB7CiAgICAgICBpZiAoX19uX2VsdCArIF9fbl9pbnMgPiBf TV9uZXh0X3Jlc2l6ZSkKIAl7CkBAIC03MDgsMTEgKzcxMCwxMSBAQCBuYW1lc3BhY2UgX19k ZXRhaWwKICAgICB7IHJldHVybiBfTV9uZXh0X3Jlc2l6ZTsgfQogCiAgICAgdm9pZAotICAg IF9NX3Jlc2V0KCkgbm9leGNlcHQKKyAgICBfTV9yZXNldCgpCiAgICAgeyBfTV9uZXh0X3Jl c2l6ZSA9IDA7IH0KIAogICAgIHZvaWQKLSAgICBfTV9yZXNldChfU3RhdGUgX19zdGF0ZSkg bm9leGNlcHQKKyAgICBfTV9yZXNldChfU3RhdGUgX19zdGF0ZSkKICAgICB7IF9NX25leHRf cmVzaXplID0gX19zdGF0ZTsgfQogCiAgICAgc3RhdGljIGNvbnN0IHN0ZDo6c2l6ZV90IF9T X2dyb3d0aF9mYWN0b3IgPSAyOwpAQCAtOTMxLDEyICs5MzMsMTIgQEAgbmFtZXNwYWNlIF9f ZGV0YWlsCiAgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSW5wdXRJdGVyYXRvciwgdHlwZW5h bWUgX05vZGVHZXR0ZXI+CiAJdm9pZAogCV9NX2luc2VydF9yYW5nZShfSW5wdXRJdGVyYXRv ciBfX2ZpcnN0LCBfSW5wdXRJdGVyYXRvciBfX2xhc3QsCi0JCQljb25zdCBfTm9kZUdldHRl ciYsIHRydWVfdHlwZSBfX3Vrcyk7CisJCQlfTm9kZUdldHRlciYsIHRydWVfdHlwZSBfX3Vr cyk7CiAKICAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9JbnB1dEl0ZXJhdG9yLCB0eXBlbmFt ZSBfTm9kZUdldHRlcj4KIAl2b2lkCiAJX01faW5zZXJ0X3JhbmdlKF9JbnB1dEl0ZXJhdG9y IF9fZmlyc3QsIF9JbnB1dEl0ZXJhdG9yIF9fbGFzdCwKLQkJCWNvbnN0IF9Ob2RlR2V0dGVy JiwgZmFsc2VfdHlwZSBfX3Vrcyk7CisJCQlfTm9kZUdldHRlciYsIGZhbHNlX3R5cGUgX191 a3MpOwogCiAgICAgcHVibGljOgogICAgICAgdXNpbmcgaXRlcmF0b3IgPSBfTm9kZV9pdGVy YXRvcjxfVmFsdWUsIF9fY29uc3RhbnRfaXRlcmF0b3JzOjp2YWx1ZSwKQEAgLTEwMTIsNyAr MTAxNCw3IEBAIG5hbWVzcGFjZSBfX2RldGFpbAogCQkgICBfSGFzaCwgX1JhbmdlSGFzaCwg X1VudXNlZCwKIAkJICAgX1JlaGFzaFBvbGljeSwgX1RyYWl0cz46OgogICAgICAgX01faW5z ZXJ0X3JhbmdlKF9JbnB1dEl0ZXJhdG9yIF9fZmlyc3QsIF9JbnB1dEl0ZXJhdG9yIF9fbGFz dCwKLQkJICAgICAgY29uc3QgX05vZGVHZXR0ZXImIF9fbm9kZV9nZW4sIHRydWVfdHlwZSBf X3VrcykKKwkJICAgICAgX05vZGVHZXR0ZXImIF9fbm9kZV9nZW4sIHRydWVfdHlwZSBfX3Vr cykKICAgICAgIHsKIAlfX2hhc2h0YWJsZSYgX19oID0gX01fY29uanVyZV9oYXNodGFibGUo KTsKIAlmb3IgKDsgX19maXJzdCAhPSBfX2xhc3Q7ICsrX19maXJzdCkKQEAgLTEwMjksNyAr MTAzMSw3IEBAIG5hbWVzcGFjZSBfX2RldGFpbAogCQkgICBfSGFzaCwgX1JhbmdlSGFzaCwg X1VudXNlZCwKIAkJICAgX1JlaGFzaFBvbGljeSwgX1RyYWl0cz46OgogICAgICAgX01faW5z ZXJ0X3JhbmdlKF9JbnB1dEl0ZXJhdG9yIF9fZmlyc3QsIF9JbnB1dEl0ZXJhdG9yIF9fbGFz dCwKLQkJICAgICAgY29uc3QgX05vZGVHZXR0ZXImIF9fbm9kZV9nZW4sIGZhbHNlX3R5cGUg X191a3MpCisJCSAgICAgIF9Ob2RlR2V0dGVyJiBfX25vZGVfZ2VuLCBmYWxzZV90eXBlIF9f dWtzKQogICAgICAgewogCXVzaW5nIF9fcmVoYXNoX2d1YXJkX3QgPSB0eXBlbmFtZSBfX2hh c2h0YWJsZTo6X19yZWhhc2hfZ3VhcmRfdDsKIAl1c2luZyBfX3BhaXJfdHlwZSA9IHN0ZDo6 cGFpcjxib29sLCBzdGQ6OnNpemVfdD47CkBAIC0xMzU5LDkgKzEzNjEsNyBAQCBuYW1lc3Bh Y2UgX19kZXRhaWwKICAgICAgIHN0ZDo6c2l6ZV90CiAgICAgICBfTV9idWNrZXRfaW5kZXgo Y29uc3QgX0hhc2hfbm9kZV92YWx1ZTxfVmFsdWUsIGZhbHNlPiYgX19uLAogCQkgICAgICBz dGQ6OnNpemVfdCBfX2JrdF9jb3VudCkgY29uc3QKLQlub2V4Y2VwdCggbm9leGNlcHQoZGVj bHZhbDxjb25zdCBfSGFzaCY+KCkoZGVjbHZhbDxjb25zdCBfS2V5Jj4oKSkpCi0JCSAgJiYg bm9leGNlcHQoZGVjbHZhbDxjb25zdCBfUmFuZ2VIYXNoJj4oKSgoX19oYXNoX2NvZGUpMCwK LQkJCQkJCQkgICAoc3RkOjpzaXplX3QpMCkpICkKKyAgICAgIG5vZXhjZXB0KCBub2V4Y2Vw dChkZWNsdmFsPGNvbnN0IF9IYXNoJj4oKShkZWNsdmFsPGNvbnN0IF9LZXkmPigpKSkgKQog ICAgICAgewogCXJldHVybiBfUmFuZ2VIYXNoe30oX01faGFzaF9jb2RlKF9FeHRyYWN0S2V5 e30oX19uLl9NX3YoKSkpLAogCQkJICAgIF9fYmt0X2NvdW50KTsKQEAgLTEzNjksOSArMTM2 OSw3IEBAIG5hbWVzcGFjZSBfX2RldGFpbAogCiAgICAgICBzdGQ6OnNpemVfdAogICAgICAg X01fYnVja2V0X2luZGV4KGNvbnN0IF9IYXNoX25vZGVfdmFsdWU8X1ZhbHVlLCB0cnVlPiYg X19uLAotCQkgICAgICBzdGQ6OnNpemVfdCBfX2JrdF9jb3VudCkgY29uc3QKLQlub2V4Y2Vw dCggbm9leGNlcHQoZGVjbHZhbDxjb25zdCBfUmFuZ2VIYXNoJj4oKSgoX19oYXNoX2NvZGUp MCwKLQkJCQkJCQkoc3RkOjpzaXplX3QpMCkpICkKKwkJICAgICAgc3RkOjpzaXplX3QgX19i a3RfY291bnQpIGNvbnN0IG5vZXhjZXB0CiAgICAgICB7IHJldHVybiBfUmFuZ2VIYXNoe30o X19uLl9NX2hhc2hfY29kZSwgX19ia3RfY291bnQpOyB9CiAKICAgICAgIHZvaWQKZGlmZiAt LWdpdCBhL2xpYnN0ZGMrKy12My9zcmMvYysrMTEvaGFzaHRhYmxlX2MrKzB4LmNjIGIvbGli c3RkYysrLXYzL3NyYy9jKysxMS9oYXNodGFibGVfYysrMHguY2MKaW5kZXggOTY3M2Q4Njc0 MDIuLmU3NWIwOWEzMWJiIDEwMDY0NAotLS0gYS9saWJzdGRjKystdjMvc3JjL2MrKzExL2hh c2h0YWJsZV9jKysweC5jYworKysgYi9saWJzdGRjKystdjMvc3JjL2MrKzExL2hhc2h0YWJs ZV9jKysweC5jYwpAQCAtNDUsNiArNDUsNyBAQCBuYW1lc3BhY2UgX19kZXRhaWwKICAgc3Rk OjpzaXplX3QKICAgX1ByaW1lX3JlaGFzaF9wb2xpY3k6Ol9NX25leHRfYmt0KHN0ZDo6c2l6 ZV90IF9fbikgY29uc3QKICAgeworICAgIGF1dG8gX19tdXRhYmxlX3RoaXMgPSBjb25zdF9j YXN0PF9QcmltZV9yZWhhc2hfcG9saWN5Kj4odGhpcyk7CiAgICAgLy8gT3B0aW1pemUgbG9v a3VwcyBpbnZvbHZpbmcgdGhlIGZpcnN0IGVsZW1lbnRzIG9mIF9fcHJpbWVfbGlzdC4KICAg ICAvLyAodXNlZnVsIHRvIHNwZWVkLXVwLCBlZywgY29uc3RydWN0b3JzKQogICAgIHN0YXRp YyBjb25zdCB1bnNpZ25lZCBjaGFyIF9fZmFzdF9ia3RbXQpAQCAtNTgsNyArNTksNyBAQCBu YW1lc3BhY2UgX19kZXRhaWwKIAkgIC8vIHdhbnQgdG8gYWRkIGFuIGVsZW1lbnQgYWxsb2Nh dGlvbiB3aWxsIHRha2UgcGxhY2UuCiAJICByZXR1cm4gMTsKIAotCV9NX25leHRfcmVzaXpl ID0KKwlfX211dGFibGVfdGhpcy0+X01fbmV4dF9yZXNpemUgPQogCSAgX19idWlsdGluX2Zs b29yKF9fZmFzdF9ia3RbX19uXSAqIChkb3VibGUpX01fbWF4X2xvYWRfZmFjdG9yKTsKIAly ZXR1cm4gX19mYXN0X2JrdFtfX25dOwogICAgICAgfQpAQCAtNzksOSArODAsOSBAQCBuYW1l c3BhY2UgX19kZXRhaWwKICAgICAgIC8vIFNldCBuZXh0IHJlc2l6ZSB0byB0aGUgbWF4IHZh bHVlIHNvIHRoYXQgd2UgbmV2ZXIgdHJ5IHRvIHJlaGFzaCBhZ2FpbgogICAgICAgLy8gYXMg d2UgYWxyZWFkeSByZWFjaCB0aGUgYmlnZ2VzdCBwb3NzaWJsZSBidWNrZXQgbnVtYmVyLgog ICAgICAgLy8gTm90ZSB0aGF0IGl0IG1pZ2h0IHJlc3VsdCBpbiBtYXhfbG9hZF9mYWN0b3Ig bm90IGJlaW5nIHJlc3BlY3RlZC4KLSAgICAgIF9NX25leHRfcmVzaXplID0gc2l6ZV90KC0x KTsKKyAgICAgIF9fbXV0YWJsZV90aGlzLT5fTV9uZXh0X3Jlc2l6ZSA9IHNpemVfdCgtMSk7 CiAgICAgZWxzZQotICAgICAgX01fbmV4dF9yZXNpemUgPQorICAgICAgX19tdXRhYmxlX3Ro aXMtPl9NX25leHRfcmVzaXplID0KIAlfX2J1aWx0aW5fZmxvb3IoKl9fbmV4dF9ia3QgKiAo ZG91YmxlKV9NX21heF9sb2FkX2ZhY3Rvcik7CiAKICAgICByZXR1cm4gKl9fbmV4dF9ia3Q7 CkBAIC0xMDEsNiArMTAyLDcgQEAgbmFtZXNwYWNlIF9fZGV0YWlsCiAgIF9NX25lZWRfcmVo YXNoKHN0ZDo6c2l6ZV90IF9fbl9ia3QsIHN0ZDo6c2l6ZV90IF9fbl9lbHQsCiAJCSBzdGQ6 OnNpemVfdCBfX25faW5zKSBjb25zdAogICB7CisgICAgYXV0byBfX211dGFibGVfdGhpcyA9 IGNvbnN0X2Nhc3Q8X1ByaW1lX3JlaGFzaF9wb2xpY3kqPih0aGlzKTsKICAgICBpZiAoX19u X2VsdCArIF9fbl9pbnMgPiBfTV9uZXh0X3Jlc2l6ZSkKICAgICAgIHsKIAkvLyBJZiBfTV9u ZXh0X3Jlc2l6ZSBpcyAwIGl0IG1lYW5zIHRoYXQgd2UgaGF2ZSBub3RoaW5nIGFsbG9jYXRl ZCBzbwpAQCAtMTE0LDcgKzExNiw3IEBAIG5hbWVzcGFjZSBfX2RldGFpbAogCSAgICBfTV9u ZXh0X2JrdChzdGQ6Om1heDxzdGQ6OnNpemVfdD4oX19idWlsdGluX2Zsb29yKF9fbWluX2Jr dHMpICsgMSwKIAkJCQkJICAgICAgX19uX2JrdCAqIF9TX2dyb3d0aF9mYWN0b3IpKSB9Owog Ci0JX01fbmV4dF9yZXNpemUKKwlfX211dGFibGVfdGhpcy0+X01fbmV4dF9yZXNpemUKIAkg ID0gX19idWlsdGluX2Zsb29yKF9fbl9ia3QgKiAoZG91YmxlKV9NX21heF9sb2FkX2ZhY3Rv cik7CiAJcmV0dXJuIHsgZmFsc2UsIDAgfTsKICAgICAgIH0K --------------kzPotFvCWdi08LzgWm81Kx75--