From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mail-ej1-x635.google.com (mail-ej1-x635.google.com [IPv6:2a00:1450:4864:20::635]) by sourceware.org (Postfix) with ESMTPS id 24D023851AB8; Mon, 20 Jun 2022 16:58:39 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.1 sourceware.org 24D023851AB8 Received: by mail-ej1-x635.google.com with SMTP id ay16so2956526ejb.6; Mon, 20 Jun 2022 09:58:39 -0700 (PDT) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=x-gm-message-state:message-id:date:mime-version:user-agent:from :subject:to:cc:content-language; bh=6/gVPThlHo27RZdDl+Vg3TVUX5EDD9AuhhJ8SNY4rcE=; b=CeDN77avS9lLRBGOTK7li5pyf6Bu7wK8M2tRhxo1kWOjs3QJ8vP0JHk2zOOhB6NgoV MA47EH/qhPujWk/p/NeH+FxJLqpaNQNBgZatxw27MVYqyo4VyfFqhAv/Ss3be0SHcrKq bPnNiFSihc1xrgfJpPdC12xoqUlctR/d9Rxlw7CyBnXcMjoa4Ze+DhpRTz+/sI+lI3S4 +aY9q+TS87egZAevmmU/a21mrbwfGQo+4E1nkfdjHVvPEWg0ML1VIlITjufqq1Yes6jW 5Zp31i4O5OrGy4xMPYo8CVEpqpPW0mKNtcouuxPfjRBC8LE5QB6xixvupRD6wpmkqBaB 9M3Q== X-Gm-Message-State: AJIora87okxLTkaYr+fwL4sSpy5gLMB3PxzaVUS5aSdzbx2B6goA70vs DmCbcbpNsEvqsStnLaazOZ7bH5qZnwg= X-Google-Smtp-Source: AGRyM1sKnt7mg+fd5Bu14kBvu2jW2iY90T9ZzTO1mIJsuAH4wKojw+Hvmh5hN8gssm3ttUnuD9r79g== X-Received: by 2002:a17:907:8a17:b0:711:e3fe:7767 with SMTP id sc23-20020a1709078a1700b00711e3fe7767mr21226036ejc.380.1655744317769; Mon, 20 Jun 2022 09:58:37 -0700 (PDT) Received: from [10.126.3.254] ([109.190.253.11]) by smtp.googlemail.com with ESMTPSA id o16-20020a170906601000b0070662b3b792sm6233668ejj.222.2022.06.20.09.58.35 (version=TLS1_3 cipher=TLS_AES_128_GCM_SHA256 bits=128/128); Mon, 20 Jun 2022 09:58:37 -0700 (PDT) Content-Type: multipart/mixed; boundary="------------drZET42F5JZUg2HdIC5ZQMyA" Message-ID: <524eabf5-179e-7432-3a6e-774609085680@gmail.com> Date: Mon, 20 Jun 2022 18:58:31 +0200 MIME-Version: 1.0 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:91.0) Gecko/20100101 Thunderbird/91.9.1 From: =?UTF-8?Q?Fran=c3=a7ois_Dumont?= Subject: [PATCH 5/5][_Hahtable] Prealloc nodes on copy To: "libstdc++@gcc.gnu.org" Cc: gcc-patches Content-Language: fr X-Spam-Status: No, score=-9.8 required=5.0 tests=BAYES_00, DKIM_SIGNED, DKIM_VALID, DKIM_VALID_AU, DKIM_VALID_EF, FREEMAIL_FROM, GIT_PATCH_0, 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, 20 Jun 2022 16:58:41 -0000 This is a multi-part message in MIME format. --------------drZET42F5JZUg2HdIC5ZQMyA Content-Type: text/plain; charset=UTF-8; format=flowed Content-Transfer-Encoding: 8bit libstdc++: [_Hashtable] Prealloc nodes on _Hashtable copy Prealloc nodes on copy to reduce memory fragmentation of nodes. Create a new assignment method which copy hashtable instances respecting order of nodes in the bucket rather than order of node in the singly-linked list. libstdc++-v3/ChangeLog:     * include/bits/hashtable_policy.h: Include stl_tempbuf.h.     (_Hashtable_alloc<>::_M_allocate_node_ptr): New.     (_PreAllocHashtableNodes<>): New.     * include/bits/hashtable.h (_Hashtable<>::__prealloc_hashtable_nodes_gen_t): New.     (_Hashtable<>::_M_assign_stable):New.     (_Hashtable<>::operator=(const _Hashtable&)): Use latter.     (_Hashtable(const _Hashtable&)): Likewise.     (_Hashtable(const _Hashtable&, const allocator_type&)): Likewise.     (_Hashtable(_Hashtable&&, __node_alloc_type&&, false_type)): Likewise.     * testsuite/util/exception/safety.h (setup_base::compare): Compare containers     rather than compare iterators.     * testsuite/23_containers/unordered_multiset/cons/copy.cc (main): Likewise. Tested under Linux x86_64. François --------------drZET42F5JZUg2HdIC5ZQMyA Content-Type: text/x-patch; charset=UTF-8; name="5_hashtable_prealloc_nodes.patch" Content-Disposition: attachment; filename="5_hashtable_prealloc_nodes.patch" Content-Transfer-Encoding: base64 ZGlmZiAtLWdpdCBhL2xpYnN0ZGMrKy12My9pbmNsdWRlL2JpdHMvaGFzaHRhYmxlLmggYi9s aWJzdGRjKystdjMvaW5jbHVkZS9iaXRzL2hhc2h0YWJsZS5oCmluZGV4IDAxMWE3MDc2MDVm Li5iNDk3ZjE2ZDAxNyAxMDA2NDQKLS0tIGEvbGlic3RkYysrLXYzL2luY2x1ZGUvYml0cy9o YXNodGFibGUuaAorKysgYi9saWJzdGRjKystdjMvaW5jbHVkZS9iaXRzL2hhc2h0YWJsZS5o CkBAIC0yOTAsNiArMjkwLDkgQEAgX0dMSUJDWFhfQkVHSU5fTkFNRVNQQUNFX1ZFUlNJT04K IAlfX2RldGFpbDo6X1JldXNlT3JBbGxvY05vZGU8X19ub2RlX2FsbG9jX3R5cGU+OwogICAg ICAgdXNpbmcgX19hbGxvY19ub2RlX2dlbl9jYWNoZV9iYmVnaW5fdCA9CiAJX19kZXRhaWw6 Ol9BbGxvY05vZGU8X19ub2RlX2FsbG9jX3R5cGUsIF9fZGV0YWlsOjpfQ2FjaGVCQmVnaW5Q b2xpY3k+OworICAgICAgdXNpbmcgX19wcmVhbGxvY19oYXNodGFibGVfbm9kZXNfZ2VuX3Qg PQorCV9fZGV0YWlsOjpfUHJlQWxsb2NIYXNodGFibGVOb2RlczxfX25vZGVfYWxsb2NfdHlw ZT47CisKICAgICAgIHVzaW5nIF9fbm9kZV9idWlsZGVyX3QgPQogCV9fZGV0YWlsOjpfTm9k ZUJ1aWxkZXI8X0V4dHJhY3RLZXk+OwogICAgICAgdXNpbmcgX19ub19jYWNoZV9iYmVnaW5f cG9saWN5X3QgPQpAQCAtNDgzLDYgKzQ4NiwxMCBAQCBfR0xJQkNYWF9CRUdJTl9OQU1FU1BB Q0VfVkVSU0lPTgogCXZvaWQKIAlfTV9hc3NpZ24oX0h0JiYsIGNvbnN0IF9Ob2RlR2VuZXJh dG9yJik7CiAKKyAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9IdCwgdHlwZW5hbWUgX05vZGVH ZW5lcmF0b3I+CisJdm9pZAorCV9NX2Fzc2lnbl9zdGFibGUoX0h0JiYsIGNvbnN0IF9Ob2Rl R2VuZXJhdG9yJik7CisKICAgICAgIHZvaWQKICAgICAgIF9NX21vdmVfYXNzaWduKF9IYXNo dGFibGUmJiwgdHJ1ZV90eXBlKTsKIApAQCAtMTM2NCwxMCArMTM3MSwxMCBAQCBfR0xJQkNY WF9CRUdJTl9OQU1FU1BBQ0VfVkVSU0lPTgogCSAgICAgIF9NX2J1Y2tldF9jb3VudCA9IF9f aHQuX01fYnVja2V0X2NvdW50OwogCSAgICAgIF9NX2VsZW1lbnRfY291bnQgPSBfX2h0Ll9N X2VsZW1lbnRfY291bnQ7CiAJICAgICAgX01fcmVoYXNoX3BvbGljeSA9IF9faHQuX01fcmVo YXNoX3BvbGljeTsKLQkgICAgICBfX2FsbG9jX25vZGVfZ2VuX2NhY2hlX2JiZWdpbl90IF9f bm9kZV9nZW4oKnRoaXMpOwogCSAgICAgIF9fdHJ5CiAJCXsKLQkJICBfTV9hc3NpZ24oX19o dCwgX19ub2RlX2dlbik7CisJCSAgX19wcmVhbGxvY19oYXNodGFibGVfbm9kZXNfZ2VuX3Qg X19ub2RlX2dlbihfX2h0LCAqdGhpcyk7CisJCSAgX01fYXNzaWduX3N0YWJsZShfX2h0LCBf X25vZGVfZ2VuKTsKIAkJfQogCSAgICAgIF9fY2F0Y2goLi4uKQogCQl7CkBAIC0xNDg3LDYg KzE0OTQsNzIgQEAgX0dMSUJDWFhfQkVHSU5fTkFNRVNQQUNFX1ZFUlNJT04KIAkgIH0KICAg ICAgIH0KIAorICB0ZW1wbGF0ZTx0eXBlbmFtZSBfS2V5LCB0eXBlbmFtZSBfVmFsdWUsIHR5 cGVuYW1lIF9BbGxvYywKKwkgICB0eXBlbmFtZSBfRXh0cmFjdEtleSwgdHlwZW5hbWUgX0Vx dWFsLAorCSAgIHR5cGVuYW1lIF9IYXNoLCB0eXBlbmFtZSBfUmFuZ2VIYXNoLCB0eXBlbmFt ZSBfVW51c2VkLAorCSAgIHR5cGVuYW1lIF9SZWhhc2hQb2xpY3ksIHR5cGVuYW1lIF9UcmFp dHM+CisgICAgdGVtcGxhdGU8dHlwZW5hbWUgX0h0LCB0eXBlbmFtZSBfTm9kZUdlbmVyYXRv cj4KKyAgICAgIHZvaWQKKyAgICAgIF9IYXNodGFibGU8X0tleSwgX1ZhbHVlLCBfQWxsb2Ms IF9FeHRyYWN0S2V5LCBfRXF1YWwsCisJCSBfSGFzaCwgX1JhbmdlSGFzaCwgX1VudXNlZCwg X1JlaGFzaFBvbGljeSwgX1RyYWl0cz46OgorICAgICAgX01fYXNzaWduX3N0YWJsZShfSHQm JiBfX2h0LCBjb25zdCBfTm9kZUdlbmVyYXRvciYgX19ub2RlX2dlbikKKyAgICAgIHsKKwlf X2J1Y2tldHNfcHRyIF9fYnVja2V0cyA9IG51bGxwdHI7CisJaWYgKCFfTV9idWNrZXRzKQor CSAgX01fYnVja2V0cyA9IF9fYnVja2V0cyA9IF9NX2FsbG9jYXRlX2J1Y2tldHMoX01fYnVj a2V0X2NvdW50KTsKKworCV9fdHJ5CisJICB7CisJICAgIGlmICghX19odC5fTV9iZWZvcmVf YmVnaW4uX01fbnh0KQorCSAgICAgIHJldHVybjsKKworCSAgICBfX25vZGVfcHRyIF9fcHJl dl9uID0gbnVsbHB0cjsKKwkgICAgZm9yIChzdGQ6OnNpemVfdCBfX2JrdCA9IDA7IF9fYmt0 ICE9IF9NX2J1Y2tldF9jb3VudDsgKytfX2JrdCkKKwkgICAgICB7CisJCWlmIChfX2h0Ll9N X2J1Y2tldHNbX19ia3RdID09IG51bGxwdHIpCisJCSAgY29udGludWU7CisKKwkJX19ub2Rl X3B0ciBfX2h0X24gPQorCQkgIHN0YXRpY19jYXN0PF9fbm9kZV9wdHI+KF9faHQuX01fYnVj a2V0c1tfX2JrdF0tPl9NX254dCk7CisJCV9fbm9kZV9wdHIgX19wcmV2X2h0X24gPSBfX2h0 X247CisJCV9fbm9kZV9iYXNlX3B0ciBfX254dF9ia3RfbiA9IF9fYmt0IDwgX01fYnVja2V0 X2NvdW50IC0gMQorCQkgID8gX19odC5fTV9idWNrZXRzW19fYmt0ICsgMV0gOiBudWxscHRy OworCQlkbworCQkgIHsKKwkJICAgIF9fbm9kZV9wdHIgX190aGlzX24KKwkJICAgICAgPSBf X25vZGVfZ2VuKF9fcHJldl9uLCBfX2JrdCwKKwkJCQkgICBfX2Z3ZF92YWx1ZV9mb3I8X0h0 PihfX2h0X24tPl9NX3YoKSkpOworCQkgICAgdGhpcy0+X01fY29weV9jb2RlKCpfX3RoaXNf biwgKl9faHRfbik7CisJCSAgICBpZiAoX19wcmV2X24pCisJCSAgICAgIHsKKwkJCWlmICgh X01fYnVja2V0c1tfX2JrdF0pCisJCQkgIF9NX2J1Y2tldHNbX19ia3RdID0gX19wcmV2X247 CisJCQlfX3ByZXZfbi0+X01fbnh0ID0gX190aGlzX247CisJCSAgICAgIH0KKwkJICAgIGVs c2UKKwkJICAgICAgeworCQkJX01fYnVja2V0c1tfX2JrdF0gPSAmX01fYmVmb3JlX2JlZ2lu OworCQkJX01fYmVmb3JlX2JlZ2luLl9NX254dCA9IF9fdGhpc19uOworCQkgICAgICB9CisK KwkJICAgIF9fcHJldl9uID0gX190aGlzX247CisJCSAgICBfX3ByZXZfaHRfbiA9IF9faHRf bjsKKwkJICAgIF9faHRfbiA9IF9faHRfbi0+X01fbmV4dCgpOworCQkgIH0KKwkJd2hpbGUg KF9faHRfbgorCQkgICAgICAgJiYgX19odC5fTV9pc19ueHRfaW5fYnVja2V0KF9fYmt0LCBf X3ByZXZfaHRfbiwKKwkJCQkJCSAgIF9fbnh0X2JrdF9uKSk7CisJICAgICAgfQorCSAgfQor CV9fY2F0Y2goLi4uKQorCSAgeworCSAgICBjbGVhcigpOworCSAgICBpZiAoX19idWNrZXRz KQorCSAgICAgIF9NX2RlYWxsb2NhdGVfYnVja2V0cygpOworCSAgICBfX3Rocm93X2V4Y2Vw dGlvbl9hZ2FpbjsKKwkgIH0KKyAgICAgIH0KKwogICB0ZW1wbGF0ZTx0eXBlbmFtZSBfS2V5 LCB0eXBlbmFtZSBfVmFsdWUsIHR5cGVuYW1lIF9BbGxvYywKIAkgICB0eXBlbmFtZSBfRXh0 cmFjdEtleSwgdHlwZW5hbWUgX0VxdWFsLAogCSAgIHR5cGVuYW1lIF9IYXNoLCB0eXBlbmFt ZSBfUmFuZ2VIYXNoLCB0eXBlbmFtZSBfVW51c2VkLApAQCAtMTU3NSw4ICsxNjQ4LDggQEAg X0dMSUJDWFhfQkVHSU5fTkFNRVNQQUNFX1ZFUlNJT04KICAgICAgIF9NX2VsZW1lbnRfY291 bnQoX19odC5fTV9lbGVtZW50X2NvdW50KSwKICAgICAgIF9NX3JlaGFzaF9wb2xpY3koX19o dC5fTV9yZWhhc2hfcG9saWN5KQogICAgIHsKLSAgICAgIF9fYWxsb2Nfbm9kZV9nZW5fY2Fj aGVfYmJlZ2luX3QgX19ub2RlX2dlbigqdGhpcyk7Ci0gICAgICBfTV9hc3NpZ24oX19odCwg X19ub2RlX2dlbik7CisgICAgICBfX3ByZWFsbG9jX2hhc2h0YWJsZV9ub2Rlc19nZW5fdCBf X25vZGVfZ2VuKF9faHQsICp0aGlzKTsKKyAgICAgIF9NX2Fzc2lnbl9zdGFibGUoX19odCwg X19ub2RlX2dlbik7CiAgICAgfQogCiAgIHRlbXBsYXRlPHR5cGVuYW1lIF9LZXksIHR5cGVu YW1lIF9WYWx1ZSwgdHlwZW5hbWUgX0FsbG9jLApAQCAtMTYyOSw4ICsxNzAyLDggQEAgX0dM SUJDWFhfQkVHSU5fTkFNRVNQQUNFX1ZFUlNJT04KICAgICAgIF9NX2VsZW1lbnRfY291bnQo X19odC5fTV9lbGVtZW50X2NvdW50KSwKICAgICAgIF9NX3JlaGFzaF9wb2xpY3koX19odC5f TV9yZWhhc2hfcG9saWN5KQogICAgIHsKLSAgICAgIF9fYWxsb2Nfbm9kZV9nZW5fY2FjaGVf YmJlZ2luX3QgX19ub2RlX2dlbigqdGhpcyk7Ci0gICAgICBfTV9hc3NpZ24oX19odCwgX19u b2RlX2dlbik7CisgICAgICBfX3ByZWFsbG9jX2hhc2h0YWJsZV9ub2Rlc19nZW5fdCBfX25v ZGVfZ2VuKF9faHQsICp0aGlzKTsKKyAgICAgIF9NX2Fzc2lnbl9zdGFibGUoX19odCwgX19u b2RlX2dlbik7CiAgICAgfQogCiAgIHRlbXBsYXRlPHR5cGVuYW1lIF9LZXksIHR5cGVuYW1l IF9WYWx1ZSwgdHlwZW5hbWUgX0FsbG9jLApAQCAtMTY2OSwxMSArMTc0MiwxMSBAQCBfR0xJ QkNYWF9CRUdJTl9OQU1FU1BBQ0VfVkVSU0lPTgogCX0KICAgICAgIGVsc2UKIAl7Ci0JICBf X2FsbG9jX25vZGVfZ2VuX2NhY2hlX2JiZWdpbl90IF9fbm9kZV9nZW4oKnRoaXMpOworCSAg X19wcmVhbGxvY19oYXNodGFibGVfbm9kZXNfZ2VuX3QgX19ub2RlX2dlbihfX2h0LCAqdGhp cyk7CiAJICB1c2luZyBfRndkX0h0ID0gX19jb25kaXRpb25hbF90PAogCSAgICBfX21vdmVf aWZfbm9leGNlcHRfY29uZDx2YWx1ZV90eXBlPjo6dmFsdWUsCiAJICAgIGNvbnN0IF9IYXNo dGFibGUmLCBfSGFzaHRhYmxlJiY+OwotCSAgX01fYXNzaWduKHN0ZDo6Zm9yd2FyZDxfRndk X0h0PihfX2h0KSwgX19ub2RlX2dlbik7CisJICBfTV9hc3NpZ25fc3RhYmxlKHN0ZDo6Zm9y d2FyZDxfRndkX0h0PihfX2h0KSwgX19ub2RlX2dlbik7CiAJICBfX2h0LmNsZWFyKCk7CiAJ fQogICAgIH0KZGlmZiAtLWdpdCBhL2xpYnN0ZGMrKy12My9pbmNsdWRlL2JpdHMvaGFzaHRh YmxlX3BvbGljeS5oIGIvbGlic3RkYysrLXYzL2luY2x1ZGUvYml0cy9oYXNodGFibGVfcG9s aWN5LmgKaW5kZXggZmYyMDZhNmVkMjAuLmJlY2FmY2QzMjQ5IDEwMDY0NAotLS0gYS9saWJz dGRjKystdjMvaW5jbHVkZS9iaXRzL2hhc2h0YWJsZV9wb2xpY3kuaAorKysgYi9saWJzdGRj KystdjMvaW5jbHVkZS9iaXRzL2hhc2h0YWJsZV9wb2xpY3kuaApAQCAtMzcsNiArMzcsNyBA QAogI2luY2x1ZGUgPGJpdHMvc3RsX3BhaXIuaD4JLy8gZm9yIHN0ZDo6cGFpcgogI2luY2x1 ZGUgPGV4dC9hbGlnbmVkX2J1ZmZlci5oPgkvLyBmb3IgX19nbnVfY3h4OjpfX2FsaWduZWRf YnVmZmVyCiAjaW5jbHVkZSA8ZXh0L2FsbG9jX3RyYWl0cy5oPgkvLyBmb3Igc3RkOjpfX2Fs bG9jX3JlYmluZAorI2luY2x1ZGUgPGJpdHMvc3RsX3RlbXBidWYuaD4JLy8gZm9yIHN0ZDo6 Z2V0X3RlbXBvcmFyeV9idWZmZXIuCiAjaW5jbHVkZSA8ZXh0L251bWVyaWNfdHJhaXRzLmg+ CS8vIGZvciBfX2dudV9jeHg6Ol9faW50X3RyYWl0cwogCiBuYW1lc3BhY2Ugc3RkIF9HTElC Q1hYX1ZJU0lCSUxJVFkoZGVmYXVsdCkKQEAgLTI5MSw2ICsyOTIsMTEzIEBAIG5hbWVzcGFj ZSBfX2RldGFpbAogICAgICAgX19oYXNodGFibGVfYWxsb2MmIF9NX2g7CiAgICAgfTsKIAor ICB0ZW1wbGF0ZTx0eXBlbmFtZSBfTm9kZUFsbG9jPgorICAgIHN0cnVjdCBfUHJlQWxsb2NI YXNodGFibGVOb2RlcworICAgIHsKKyAgICBwcml2YXRlOgorICAgICAgdXNpbmcgX19ub2Rl X2FsbG9jX3R5cGUgPSBfTm9kZUFsbG9jOworICAgICAgdXNpbmcgX19oYXNodGFibGVfYWxs b2MgPSBfSGFzaHRhYmxlX2FsbG9jPF9fbm9kZV9hbGxvY190eXBlPjsKKyAgICAgIHVzaW5n IF9fbm9kZV9hbGxvY190cmFpdHMgPQorCXR5cGVuYW1lIF9faGFzaHRhYmxlX2FsbG9jOjpf X25vZGVfYWxsb2NfdHJhaXRzOworICAgICAgdXNpbmcgX19ub2RlX2Jhc2UgPSB0eXBlbmFt ZSBfX2hhc2h0YWJsZV9hbGxvYzo6X19ub2RlX2Jhc2U7CisKKyAgICBwdWJsaWM6CisgICAg ICB1c2luZyBfX25vZGVfcHRyID0gdHlwZW5hbWUgX19oYXNodGFibGVfYWxsb2M6Ol9fbm9k ZV9wdHI7CisKKyAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9IdD4KKwlfUHJlQWxsb2NIYXNo dGFibGVOb2RlcyhfSHQmIF9faHQsIF9faGFzaHRhYmxlX2FsbG9jJiBfX2hhKQorCTogX01f aChfX2hhKSwgX01fYmVmb3JlX2ZyZWVfbm9kZXMoKQorCSwgX01fYnVja2V0cyhzdGQ6Omdl dF90ZW1wb3JhcnlfYnVmZmVyPF9fbm9kZV9iYXNlKj4oX19odC5idWNrZXRfY291bnQoKSkp CisJeworCSAgX19idWlsdGluX21lbXNldChfTV9idWNrZXRzLmZpcnN0LCAwLAorCQkJICAg X01fYnVja2V0cy5zZWNvbmQgKiBzaXplb2YoX19ub2RlX2Jhc2UqKSk7CisJICBfX3RyeQor CSAgICB7CisJICAgICAgX19ub2RlX3B0ciBfX2hpbnQgPSBudWxscHRyOworCSAgICAgIF9f bm9kZV9iYXNlKiBfX3ByZXYgPSBzdGQ6Ol9fYWRkcmVzc29mKF9NX2JlZm9yZV9mcmVlX25v ZGVzKTsKKwkgICAgICBmb3IgKHN0ZDo6c2l6ZV90IF9fYmt0ID0gMDsgX19ia3QgIT0gX01f YnVja2V0cy5zZWNvbmQ7ICsrX19ia3QpCisJCWZvciAoYXV0byBfX2xpdCA9IF9faHQuYmVn aW4oX19ia3QpOyBfX2xpdCAhPSBfX2h0LmVuZChfX2JrdCk7CisJCSAgICAgKytfX2xpdCkK KwkJICB7CisJCSAgICBfX25vZGVfcHRyIF9fdG1wID0gX01faC5fTV9hbGxvY2F0ZV9ub2Rl X3B0cihfX2hpbnQpOworCQkgICAgaWYgKCFfTV9idWNrZXRzLmZpcnN0W19fYmt0XSkKKwkJ ICAgICAgX01fYnVja2V0cy5maXJzdFtfX2JrdF0gPSBfX3ByZXY7CisKKwkJICAgIF9fcHJl di0+X01fbnh0ID0gX190bXA7CisJCSAgICBfX3ByZXYgPSBfX2hpbnQgPSBfX3RtcDsKKwkJ ICB9CisJICAgIH0KKwkgIF9fY2F0Y2goLi4uKQorCSAgeworCSAgICBfTV9kZWFsbG9jYXRl X25vZGVzKCk7CisJICAgIF9fdGhyb3dfZXhjZXB0aW9uX2FnYWluOworCSAgfQorCX0KKwor ICAgICAgX1ByZUFsbG9jSGFzaHRhYmxlTm9kZXMoY29uc3QgX1ByZUFsbG9jSGFzaHRhYmxl Tm9kZXMmKSA9IGRlbGV0ZTsKKworICAgICAgfl9QcmVBbGxvY0hhc2h0YWJsZU5vZGVzKCkK KyAgICAgIHsgX01fZGVhbGxvY2F0ZV9ub2RlcygpOyB9CisKKyAgICAgIHRlbXBsYXRlPHR5 cGVuYW1lLi4uIF9BcmdzPgorCV9fbm9kZV9wdHIKKwlvcGVyYXRvcigpKF9fbm9kZV9wdHIg X19oaW50LCBzdGQ6OnNpemVfdCBfX2JrdCwgX0FyZ3MmJi4uLiBfX2FyZ3MpIGNvbnN0CisJ eworCSAgaWYgKF9fYmt0ID49IF9NX2J1Y2tldHMuc2Vjb25kIHx8IF9NX2J1Y2tldHMuZmly c3RbX19ia3RdID09IG51bGxwdHIpCisJICAgIHJldHVybiBfTV9oLl9NX2FsbG9jYXRlX25v ZGUoX19oaW50LAorCQkJCQkgc3RkOjpmb3J3YXJkPF9BcmdzPihfX2FyZ3MpLi4uKTsKKwor CSAgaWYgKF9NX2J1Y2tldHMuZmlyc3RbX19ia3RdICE9IHN0ZDo6X19hZGRyZXNzb2YoX01f YmVmb3JlX2ZyZWVfbm9kZXMpKQorCSAgICB7CisJICAgICAgX01fYnVja2V0cy5maXJzdFtf TV9sYXN0X2FjY2Vzc19ia3RdID0gbnVsbHB0cjsKKwkgICAgICBfTV9idWNrZXRzLmZpcnN0 W19fYmt0XSA9IHN0ZDo6X19hZGRyZXNzb2YoX01fYmVmb3JlX2ZyZWVfbm9kZXMpOworCSAg ICB9CisKKwkgIF9NX2xhc3RfYWNjZXNzX2JrdCA9IF9fYmt0OworCSAgYXV0byBfX3ByZXYg PSBfTV9idWNrZXRzLmZpcnN0W19fYmt0XTsKKwkgIF9fbm9kZV9wdHIgX19ub2RlID0gc3Rh dGljX2Nhc3Q8X19ub2RlX3B0cj4oX19wcmV2LT5fTV9ueHQpOworCSAgX01fYmVmb3JlX2Zy ZWVfbm9kZXMuX01fbnh0ID0gX19ub2RlLT5fTV9ueHQ7CisJICBpZiAoX01fYmVmb3JlX2Zy ZWVfbm9kZXMuX01fbnh0ID09IG51bGxwdHIpCisJICAgIF9NX2J1Y2tldHMuZmlyc3RbX19i a3RdID0gbnVsbHB0cjsKKworCSAgX19ub2RlLT5fTV9ueHQgPSBudWxscHRyOworCSAgYXV0 byYgX19hID0gX01faC5fTV9ub2RlX2FsbG9jYXRvcigpOworCSAgX190cnkKKwkgICAgewor CSAgICAgIF9fbm9kZV9hbGxvY190cmFpdHM6OmNvbnN0cnVjdChfX2EsIF9fbm9kZS0+X01f dmFscHRyKCksCisJCQkJCSAgICAgc3RkOjpmb3J3YXJkPF9BcmdzPihfX2FyZ3MpLi4uKTsK KwkgICAgfQorCSAgX19jYXRjaCguLi4pCisJICB7CisJICAgIF9NX2guX01fZGVhbGxvY2F0 ZV9ub2RlX3B0cihfX25vZGUpOworCSAgICBfX3Rocm93X2V4Y2VwdGlvbl9hZ2FpbjsKKwkg IH0KKworCSAgcmV0dXJuIF9fbm9kZTsKKwl9CisKKyAgICBwcml2YXRlOgorICAgICAgdm9p ZAorICAgICAgX01fZGVhbGxvY2F0ZV9ub2RlcygpCisgICAgICB7CisJX19ub2RlX3B0ciBf X24KKwkgID0gc3RhdGljX2Nhc3Q8X19ub2RlX3B0cj4oX01fYmVmb3JlX2ZyZWVfbm9kZXMu X01fbnh0KTsKKwl3aGlsZSAoX19uKQorCSAgeworCSAgICBfX25vZGVfcHRyIF9fdG1wID0g X19uOworCSAgICBfX24gPSBfX24tPl9NX25leHQoKTsKKwkgICAgX01faC5fTV9kZWFsbG9j YXRlX25vZGVfcHRyKF9fdG1wKTsKKwkgIH0KKworCXN0ZDo6cmV0dXJuX3RlbXBvcmFyeV9i dWZmZXIoX01fYnVja2V0cy5maXJzdCk7CisgICAgICB9CisKKyAgICAgIG11dGFibGUgX19u b2RlX2Jhc2UgX01fYmVmb3JlX2ZyZWVfbm9kZXM7CisgICAgICBtdXRhYmxlIHN0ZDo6cGFp cjxfX25vZGVfYmFzZSoqLCBzdGQ6OnB0cmRpZmZfdD4gX01fYnVja2V0czsKKyAgICAgIG11 dGFibGUgc3RkOjpzaXplX3QgX01fbGFzdF9hY2Nlc3NfYmt0ID0gMDsKKyAgICAgIF9faGFz aHRhYmxlX2FsbG9jJiBfTV9oOworICAgIH07CisKICAgLy8gQXV4aWxpYXJ5IHR5cGVzIHVz ZWQgZm9yIGFsbCBpbnN0YW50aWF0aW9ucyBvZiBfSGFzaHRhYmxlIG5vZGVzCiAgIC8vIGFu ZCBpdGVyYXRvcnMuCiAKQEAgLTIwMzEsNiArMjEzOSwxMCBAQCBuYW1lc3BhY2UgX19kZXRh aWwKICAgICAgIF9NX25vZGVfYWxsb2NhdG9yKCkgY29uc3QKICAgICAgIHsgcmV0dXJuIF9f ZWJvX25vZGVfYWxsb2M6Ol9NX2NnZXQoKTsgfQogCisgICAgICAvLyBBbGxvY2F0ZSBhIG5v ZGUuCisgICAgICBfX25vZGVfcHRyCisgICAgICBfTV9hbGxvY2F0ZV9ub2RlX3B0cihfX25v ZGVfcHRyIF9faGludCk7CisKICAgICAgIC8vIEFsbG9jYXRlIGEgbm9kZSBhbmQgY29uc3Ry dWN0IGFuIGVsZW1lbnQgd2l0aGluIGl0LgogICAgICAgdGVtcGxhdGU8dHlwZW5hbWUuLi4g X0FyZ3M+CiAJX19ub2RlX3B0cgpAQCAtMjA1OCw2ICsyMTcwLDI3IEBAIG5hbWVzcGFjZSBf X2RldGFpbAogCiAgIC8vIERlZmluaXRpb25zIG9mIGNsYXNzIHRlbXBsYXRlIF9IYXNodGFi bGVfYWxsb2MncyBvdXQtb2YtbGluZSBtZW1iZXIKICAgLy8gZnVuY3Rpb25zLgorICB0ZW1w bGF0ZTx0eXBlbmFtZSBfTm9kZUFsbG9jPgorICAgIGF1dG8KKyAgICBfSGFzaHRhYmxlX2Fs bG9jPF9Ob2RlQWxsb2M+OjpfTV9hbGxvY2F0ZV9ub2RlX3B0cihfX25vZGVfcHRyIF9faGlu dCkKKyAgICAtPiBfX25vZGVfcHRyCisgICAgeworICAgICAgYXV0byYgX19hbGxvYyA9IF9N X25vZGVfYWxsb2NhdG9yKCk7CisgICAgICB0eXBlbmFtZSBfX25vZGVfYWxsb2NfdHJhaXRz Ojpwb2ludGVyIF9fbnB0cjsKKyAgICAgIGlmIChfX2hpbnQpCisJeworCSAgdHlwZWRlZiB0 eXBlbmFtZSBfX25vZGVfYWxsb2NfdHJhaXRzOjpjb25zdF9wb2ludGVyIF9DUHRyOworCSAg YXV0byBfX2hwdHIgPSBzdGQ6OnBvaW50ZXJfdHJhaXRzPF9DUHRyPjo6cG9pbnRlcl90bygq X19oaW50KTsKKwkgIF9fbnB0ciA9IF9fbm9kZV9hbGxvY190cmFpdHM6OmFsbG9jYXRlKF9f YWxsb2MsIDEsIF9faHB0cik7CisJfQorICAgICAgZWxzZQorCV9fbnB0ciA9IF9fbm9kZV9h bGxvY190cmFpdHM6OmFsbG9jYXRlKF9fYWxsb2MsIDEpOworCisgICAgICBfX25vZGVfcHRy IF9fbiA9IHN0ZDo6X190b19hZGRyZXNzKF9fbnB0cik7CisgICAgICA6Om5ldyAoKHZvaWQq KV9fbikgX19ub2RlX3R5cGU7CisgICAgICByZXR1cm4gX19uOworICAgIH0KKwogICB0ZW1w bGF0ZTx0eXBlbmFtZSBfTm9kZUFsbG9jPgogICAgIHRlbXBsYXRlPHR5cGVuYW1lLi4uIF9B cmdzPgogICAgICAgYXV0bwpkaWZmIC0tZ2l0IGEvbGlic3RkYysrLXYzL3Rlc3RzdWl0ZS8y M19jb250YWluZXJzL3Vub3JkZXJlZF9tdWx0aXNldC9jb25zL2NvcHkuY2MgYi9saWJzdGRj KystdjMvdGVzdHN1aXRlLzIzX2NvbnRhaW5lcnMvdW5vcmRlcmVkX211bHRpc2V0L2NvbnMv Y29weS5jYwppbmRleCAyMmJlZGI5MDY1Zi4uYzRlNTIxYWI2NjIgMTAwNjQ0Ci0tLSBhL2xp YnN0ZGMrKy12My90ZXN0c3VpdGUvMjNfY29udGFpbmVycy91bm9yZGVyZWRfbXVsdGlzZXQv Y29ucy9jb3B5LmNjCisrKyBiL2xpYnN0ZGMrKy12My90ZXN0c3VpdGUvMjNfY29udGFpbmVy cy91bm9yZGVyZWRfbXVsdGlzZXQvY29ucy9jb3B5LmNjCkBAIC0zOCw2ICszOCw2IEBAIGlu dCBtYWluKCkKIAogICBzdGQ6OnVub3JkZXJlZF9tdWx0aXNldDxpbnQ+IGNvcHkocmVmKTsK ICAgVkVSSUZZKCBjb3B5LnNpemUoKSA9PSByZWYuc2l6ZSgpICk7Ci0gIFZFUklGWSggc3Rk OjplcXVhbChyZWYuYmVnaW4oKSwgcmVmLmVuZCgpLCBjb3B5LmJlZ2luKCkpICk7CisgIFZF UklGWSggY29weSA9PSByZWYgKTsKICAgcmV0dXJuIDA7CiB9CmRpZmYgLS1naXQgYS9saWJz dGRjKystdjMvdGVzdHN1aXRlL3V0aWwvZXhjZXB0aW9uL3NhZmV0eS5oIGIvbGlic3RkYysr LXYzL3Rlc3RzdWl0ZS91dGlsL2V4Y2VwdGlvbi9zYWZldHkuaAppbmRleCA4ZWY5MTY0OGFm Ni4uYWQ1NTgxMmJlMWEgMTAwNjQ0Ci0tLSBhL2xpYnN0ZGMrKy12My90ZXN0c3VpdGUvdXRp bC9leGNlcHRpb24vc2FmZXR5LmgKKysrIGIvbGlic3RkYysrLXYzL3Rlc3RzdWl0ZS91dGls L2V4Y2VwdGlvbi9zYWZldHkuaApAQCAtMjM1LDEyICsyMzUsMTEgQEAgbmFtZXNwYWNlIF9f Z251X3Rlc3QKIAkJInNldHVwX2Jhc2U6OmNvbXBhcmUgY29udGFpbmVycyBzaXplIG5vdCBl cXVhbCIpOwogCiAJLy8gU2hvdWxkIHRlc3QgaXRlcmF0b3IgdmFsaWRpdHkgYmVmb3JlIGFu ZCBhZnRlciBleGNlcHRpb24uCi0JYm9vbCBfX2VxdWFsX2l0ID0gc3RkOjplcXVhbChfX3Rl c3QuYmVnaW4oKSwgX190ZXN0LmVuZCgpLAotCQkJCSAgICAgX19jb250cm9sLmJlZ2luKCkp OworCWJvb2wgX19lcXVhbCA9IF9fdGVzdCA9PSBfX2NvbnRyb2w7CiAKLQlpZiAoIV9fZXF1 YWxfaXQpCisJaWYgKCFfX2VxdWFsKQogCSAgdGhyb3cgc3RkOjpsb2dpY19lcnJvcigKLQkJ InNldHVwX2Jhc2U6OmNvbXBhcmUgY29udGFpbmVycyBpdGVyYXRvcnMgbm90IGVxdWFsIik7 CisJCSJzZXR1cF9iYXNlOjpjb21wYXJlIGNvbnRhaW5lcnMgbm90IGVxdWFsIik7CiAKIAly ZXR1cm4gdHJ1ZTsKICAgICAgIH0K --------------drZET42F5JZUg2HdIC5ZQMyA--