From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from us-smtp-delivery-124.mimecast.com (us-smtp-delivery-124.mimecast.com [170.10.129.124]) by sourceware.org (Postfix) with ESMTPS id 70CA43854154 for ; Wed, 26 Apr 2023 19:26:45 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.2 sourceware.org 70CA43854154 Authentication-Results: sourceware.org; dmarc=pass (p=none dis=none) header.from=redhat.com Authentication-Results: sourceware.org; spf=pass smtp.mailfrom=redhat.com DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1682537205; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version:content-type:content-type; bh=plOWSnPUmizQ9rZPdPot/7Ov7yrub7NyxGLmTMgUG08=; b=iVSZPjI9CSEuztaXkC749L2lj7kUQDiqYKFYdU7H7OHiqpHLNWNMIgSJErCE79t5yByxTL 4GgC6OYA560lckSYzwUG+RzcQvTE4EancSGdpRjVpYcERzfhn7W2dMn/JZMdNAZjQD+Umj la7ZoK++TcotCO8kM+TzcU17Cyvt5fQ= Received: from mail-qv1-f69.google.com (mail-qv1-f69.google.com [209.85.219.69]) by relay.mimecast.com with ESMTP with STARTTLS (version=TLSv1.3, cipher=TLS_AES_256_GCM_SHA384) id us-mta-529-jtTxxqIkPt2NPCxi6YD4Cw-1; Wed, 26 Apr 2023 15:26:43 -0400 X-MC-Unique: jtTxxqIkPt2NPCxi6YD4Cw-1 Received: by mail-qv1-f69.google.com with SMTP id 6a1803df08f44-5ef40d2af43so46810256d6.3 for ; Wed, 26 Apr 2023 12:26:43 -0700 (PDT) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20221208; t=1682537202; x=1685129202; h=subject:from:cc:to:content-language:user-agent:mime-version:date :message-id:x-gm-message-state:from:to:cc:subject:date:message-id :reply-to; bh=AzagLYIz+FTnfGtWed8s7i28VbltM+RE+fd/OGB8EVI=; b=Yjqtu3yFWKa2/OBv3z94DPrQ9UsU1J5BiSl5IlIFRc8UD6bNfmOPIJ9vmKFcSypAkb zvPruqU9dbCeOSM9mk7XgWPC+guEXYh83cZCSe4ajkNgNJTDPERk84/gnqxfBm3T8o+c iUFKbqBwjq5AWHXH0Gw8Y+o+5ZR662lahVL6D93bUegH89ubj7IBbkwQzhU8OnPqEkdL VtrvdedHaR2ARtHxdDG07/PUmxpcc+mNyjGYAATuKev0cOqxSQV3jBz5IG6i0HxwVr60 XRg9J6Abm/KIu33GhDeU/tV7OPyWVwHStBf9MSD+chsUuol5ZR787kVpq1a4EXnBY7YF DyJw== X-Gm-Message-State: AAQBX9erv5VP6aKi0CsJychIYCua+kXRtD9IVTnqZ7J7QbCKuBove3NN UKxwhTxOQL83grjfo4SOKwirgDr/gIx3wLkcgY2fIvQbcIvEN8/B6gScqYZYK+aw8OMb8dr0YCQ Eieh/1/6DS7oDlhfveFZtB0EeEfm5gK5poLdRlcCP+RpchPFOCxwnV4Mebd1DxZhQNn1Kwq5jQc 5q7A== X-Received: by 2002:a05:6214:da7:b0:56e:9986:4fa9 with SMTP id h7-20020a0562140da700b0056e99864fa9mr40395993qvh.7.1682537202432; Wed, 26 Apr 2023 12:26:42 -0700 (PDT) X-Google-Smtp-Source: AKy350Y4os1oxmk+r/k7dt7v+N5cgXaFc8Sl46X7XbqHPUFHqKn2MDD4TBvXKoD7rUU6085P737e9A== X-Received: by 2002:a05:6214:da7:b0:56e:9986:4fa9 with SMTP id h7-20020a0562140da700b0056e99864fa9mr40395966qvh.7.1682537202091; Wed, 26 Apr 2023 12:26:42 -0700 (PDT) Received: from ?IPV6:2607:fea8:51df:4200::1dcd? ([2607:fea8:51df:4200::1dcd]) by smtp.gmail.com with ESMTPSA id o15-20020a0ce40f000000b005ef616a7cc9sm5034784qvl.137.2023.04.26.12.26.41 (version=TLS1_3 cipher=TLS_AES_128_GCM_SHA256 bits=128/128); Wed, 26 Apr 2023 12:26:41 -0700 (PDT) Message-ID: Date: Wed, 26 Apr 2023 15:26:40 -0400 MIME-Version: 1.0 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:102.0) Gecko/20100101 Thunderbird/102.8.0 To: gcc-patches Cc: "hernandez, aldy" From: Andrew MacLeod Subject: [COMMITTED 3/5] Add sbr_lazy_vector and adjust (e)vrp sparse cache X-Mimecast-Spam-Score: 0 X-Mimecast-Originator: redhat.com Content-Type: multipart/mixed; boundary="------------sPg2xuasSGCI8tpYfC0PP0i0" Content-Language: en-US X-Spam-Status: No, score=-12.1 required=5.0 tests=BAYES_00,DKIMWL_WL_HIGH,DKIM_SIGNED,DKIM_VALID,DKIM_VALID_AU,DKIM_VALID_EF,GIT_PATCH_0,RCVD_IN_DNSWL_NONE,RCVD_IN_MSPIKE_H2,SPF_HELO_NONE,SPF_NONE,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. --------------sPg2xuasSGCI8tpYfC0PP0i0 Content-Type: text/plain; charset=UTF-8; format=flowed Content-Transfer-Encoding: 8bit This implements a sparse vector class for rangers cache and uses it bey default except when the CFG is very small, in qhich case the original full vectors are faster.  It works like a normal vector cache (in fact it inherits from it), but uses a sparse bitmap to determine whether a vector element is set or not.  This provide better performance for clearing the vector, as well as during initialization. A new param is added for this transition "vrp_vector_threshold" which defaults to 250.  Anything function with fewer than 250 basic blocks will use the simple vectors.  Various timing runs have indicated this is about the sweet spot where using the sparse bitmap overtakes the time required to clear the vector initially. Should we make ranger live across functions in the future, we'll probably want to lower this value again as clearing is significantly cheaper. This patch also rename the "evrp_*" params to "vrp_*" as there really is not a serperate EVRP pass any more, its all one vrp pass.   Eventually we'll probably want to change it to vrp1, vrp2 and vrp3 rather than evrp, vrp1  and vrp2.    But thats a task for later, perhaps when we reconsider pass orderings.. Bootstrapped on x86_64-pc-linux-gnu with no regressions.  Pushed. Andrew --------------sPg2xuasSGCI8tpYfC0PP0i0 Content-Type: text/x-patch; charset=UTF-8; name="0003-Add-sbr_lazy_vector-and-adjust-e-vrp-sparse-cache.patch" Content-Disposition: attachment; filename*0="0003-Add-sbr_lazy_vector-and-adjust-e-vrp-sparse-cache.patch" Content-Transfer-Encoding: base64 RnJvbSA2YTNiYWJmYmQ5YTJiMThiOWU4NmQzZDNhOTE1NjRmY2I5YjhmOWQ3IE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBBbmRyZXcgTWFjTGVvZCA8YW1hY2xlb2RAcmVkaGF0LmNvbT4K RGF0ZTogVGh1LCAxMyBBcHIgMjAyMyAxNDo0Nzo0NyAtMDQwMApTdWJqZWN0OiBbUEFUQ0ggMy81 XSBBZGQgc2JyX2xhenlfdmVjdG9yIGFuZCBhZGp1c3QgKGUpdnJwIHNwYXJzZSBjYWNoZQoKQWRk IGEgc3BhcnNlIHZlY3RvciBjbGFzcyBmb3IgY2FjaGUgYW5kIHVzZSBpZiBieSBkZWZhdWx0LgpS ZW5hbWUgdGhlIGV2cnBfKiBwYXJhbXMgdG8gdnJwXyosIGFuZCBhZGQgYSBwYXJhbSBmb3Igc21h bGwgQ0ZHUyB3aGljaCB1c2UKanVzdCB0aGUgb3JpZ2luYWwgYmFzaWMgdmVjdG9yLgoKCSogZ2lt cGxlLXJhbmdlLWNhY2hlLmNjIChzYnJfdmVjdG9yOjpzYnJfdmVjdG9yKTogQWRkIHBhcmFtZXRl cgoJYW5kIGxvY2FsIHRvIG9wdGlvbmFsbHkgemVybyBtZW1vcnkuCgkoYnJfdmVjdG9yOjpncm93 KTogT25seSB6ZXJvIG1lbW9yeSBpZiBmbGFnIGlzIHNldC4KCShjbGFzcyBzYnJfbGF6eV92ZWN0 b3IpOiBOZXcuCgkoc2JyX2xhenlfdmVjdG9yOjpzYnJfbGF6eV92ZWN0b3IpOiBOZXcuCgkoc2Jy X2xhenlfdmVjdG9yOjpzZXRfYmJfcmFuZ2UpOiBOZXcuCgkoc2JyX2xhenlfdmVjdG9yOjpnZXRf YmJfcmFuZ2UpOiBOZXcuCgkoc2JyX2xhenlfdmVjdG9yOjpiYl9yYW5nZV9wKTogTmV3LgoJKGJs b2NrX3JhbmdlX2NhY2hlOjpzZXRfYmJfcmFuZ2UpOiBDaGVjayBmbGFncyBhbmQgVXNlIHNicl9s YXp5X3ZlY3Rvci4KCSogZ2ltcGxlLXJhbmdlLWdvcmkuY2MgKGdvcmlfbWFwOjpjYWxjdWxhdGVf Z29yaSk6IFVzZQoJcGFyYW1fdnJwX3N3aXRjaF9saW1pdC4KCShnb3JpX2NvbXB1dGU6Omdvcmlf Y29tcHV0ZSk6IFVzZSBwYXJhbV92cnBfc3dpdGNoX2xpbWl0LgoJKiBwYXJhbXMub3B0ICh2cnBf c3BhcnNlX3RocmVzaG9sZCk6IFJlbmFtZSBmcm9tIGV2cnBfc3BhcnNlX3RocmVzaG9sZC4KCSh2 cnBfc3dpdGNoX2xpbWl0KTogUmVuYW1lIGZyb20gZXZycF9zd2l0Y2hfbGltaXQuCgkodnJwX3Zl Y3Rvcl90aHJlc2hvbGQpOiBOZXcuCi0tLQogZ2NjL2dpbXBsZS1yYW5nZS1jYWNoZS5jYyB8IDcy ICsrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKystLS0tLQogZ2NjL2dpbXBsZS1yYW5n ZS1nb3JpLmNjICB8ICA0ICstLQogZ2NjL3BhcmFtcy5vcHQgICAgICAgICAgICB8IDIwICsrKysr Ky0tLS0tCiAzIGZpbGVzIGNoYW5nZWQsIDc4IGluc2VydGlvbnMoKyksIDE4IGRlbGV0aW9ucygt KQoKZGlmZiAtLWdpdCBhL2djYy9naW1wbGUtcmFuZ2UtY2FjaGUuY2MgYi9nY2MvZ2ltcGxlLXJh bmdlLWNhY2hlLmNjCmluZGV4IDIzMTQ0NzhkNTU4Li44NjhkMmRkYTQyNCAxMDA2NDQKLS0tIGEv Z2NjL2dpbXBsZS1yYW5nZS1jYWNoZS5jYworKysgYi9nY2MvZ2ltcGxlLXJhbmdlLWNhY2hlLmNj CkBAIC03OSw3ICs3OSw3IEBAIHNzYV9ibG9ja19yYW5nZXM6OmR1bXAgKEZJTEUgKmYpCiBjbGFz cyBzYnJfdmVjdG9yIDogcHVibGljIHNzYV9ibG9ja19yYW5nZXMKIHsKIHB1YmxpYzoKLSAgc2Jy X3ZlY3RvciAodHJlZSB0LCB2cmFuZ2VfYWxsb2NhdG9yICphbGxvY2F0b3IpOworICBzYnJfdmVj dG9yICh0cmVlIHQsIHZyYW5nZV9hbGxvY2F0b3IgKmFsbG9jYXRvciwgYm9vbCB6ZXJvX3AgPSB0 cnVlKTsKIAogICB2aXJ0dWFsIGJvb2wgc2V0X2JiX3JhbmdlIChjb25zdF9iYXNpY19ibG9jayBi YiwgY29uc3QgdnJhbmdlICZyKSBvdmVycmlkZTsKICAgdmlydHVhbCBib29sIGdldF9iYl9yYW5n ZSAodnJhbmdlICZyLCBjb25zdF9iYXNpY19ibG9jayBiYikgb3ZlcnJpZGU7CkBAIC05MSwyMiAr OTEsMjUgQEAgcHJvdGVjdGVkOgogICB2cmFuZ2UgKm1fdW5kZWZpbmVkOwogICB0cmVlIG1fdHlw ZTsKICAgdnJhbmdlX2FsbG9jYXRvciAqbV9yYW5nZV9hbGxvY2F0b3I7CisgIGJvb2wgbV96ZXJv X3A7CiAgIHZvaWQgZ3JvdyAoKTsKIH07CiAKIAogLy8gSW5pdGlhbGl6ZSBhIGJsb2NrIGNhY2hl IGZvciBhbiBzc2FfbmFtZSBvZiB0eXBlIFQuCiAKLXNicl92ZWN0b3I6OnNicl92ZWN0b3IgKHRy ZWUgdCwgdnJhbmdlX2FsbG9jYXRvciAqYWxsb2NhdG9yKQorc2JyX3ZlY3Rvcjo6c2JyX3ZlY3Rv ciAodHJlZSB0LCB2cmFuZ2VfYWxsb2NhdG9yICphbGxvY2F0b3IsIGJvb2wgemVyb19wKQogICA6 IHNzYV9ibG9ja19yYW5nZXMgKHQpCiB7CiAgIGdjY19jaGVja2luZ19hc3NlcnQgKFRZUEVfUCAo dCkpOwogICBtX3R5cGUgPSB0OworICBtX3plcm9fcCA9IHplcm9fcDsKICAgbV9yYW5nZV9hbGxv Y2F0b3IgPSBhbGxvY2F0b3I7CiAgIG1fdGFiX3NpemUgPSBsYXN0X2Jhc2ljX2Jsb2NrX2Zvcl9m biAoY2Z1bikgKyAxOwogICBtX3RhYiA9IHN0YXRpY19jYXN0IDx2cmFuZ2UgKio+CiAgICAgKGFs bG9jYXRvci0+YWxsb2MgKG1fdGFiX3NpemUgKiBzaXplb2YgKHZyYW5nZSAqKSkpOwotICBtZW1z ZXQgKG1fdGFiLCAwLCBtX3RhYl9zaXplICogc2l6ZW9mICh2cmFuZ2UgKikpOworICBpZiAoemVy b19wKQorICAgIG1lbXNldCAobV90YWIsIDAsIG1fdGFiX3NpemUgKiBzaXplb2YgKHZyYW5nZSAq KSk7CiAKICAgLy8gQ3JlYXRlIHRoZSBjYWNoZWQgdHlwZSByYW5nZS4KICAgbV92YXJ5aW5nID0g bV9yYW5nZV9hbGxvY2F0b3ItPmFsbG9jX3ZyYW5nZSAodCk7CkBAIC0xMzIsNyArMTM1LDggQEAg c2JyX3ZlY3Rvcjo6Z3JvdyAoKQogICB2cmFuZ2UgKip0ID0gc3RhdGljX2Nhc3QgPHZyYW5nZSAq Kj4KICAgICAobV9yYW5nZV9hbGxvY2F0b3ItPmFsbG9jIChuZXdfc2l6ZSAqIHNpemVvZiAodnJh bmdlICopKSk7CiAgIG1lbWNweSAodCwgbV90YWIsIG1fdGFiX3NpemUgKiBzaXplb2YgKHZyYW5n ZSAqKSk7Ci0gIG1lbXNldCAodCArIG1fdGFiX3NpemUsIDAsIChuZXdfc2l6ZSAtIG1fdGFiX3Np emUpICogc2l6ZW9mICh2cmFuZ2UgKikpOworICBpZiAobV96ZXJvX3ApCisgICAgbWVtc2V0ICh0 ICsgbV90YWJfc2l6ZSwgMCwgKG5ld19zaXplIC0gbV90YWJfc2l6ZSkgKiBzaXplb2YgKHZyYW5n ZSAqKSk7CiAKICAgbV90YWIgPSB0OwogICBtX3RhYl9zaXplID0gbmV3X3NpemU7CkBAIC0xODMs NiArMTg3LDUwIEBAIHNicl92ZWN0b3I6OmJiX3JhbmdlX3AgKGNvbnN0X2Jhc2ljX2Jsb2NrIGJi KQogICByZXR1cm4gZmFsc2U7CiB9CiAKKy8vIExpa2UgYW4gc2JyX3ZlY3RvciwgZXhjZXB0IGl0 IHVzZXMgYSBiaXRtYXAgdG8gbWFuYWdlIHdoZXRlaHIgIHZhbGUgaXMgc2V0CisvLyBvciBub3Qg cmF0aGVyIHRoYW4gY2xlYXJlZCBtZW1vcnkuCisKK2NsYXNzIHNicl9sYXp5X3ZlY3RvciA6IHB1 YmxpYyBzYnJfdmVjdG9yCit7CitwdWJsaWM6CisgIHNicl9sYXp5X3ZlY3RvciAodHJlZSB0LCB2 cmFuZ2VfYWxsb2NhdG9yICphbGxvY2F0b3IsIGJpdG1hcF9vYnN0YWNrICpibSk7CisKKyAgdmly dHVhbCBib29sIHNldF9iYl9yYW5nZSAoY29uc3RfYmFzaWNfYmxvY2sgYmIsIGNvbnN0IHZyYW5n ZSAmcikgb3ZlcnJpZGU7CisgIHZpcnR1YWwgYm9vbCBnZXRfYmJfcmFuZ2UgKHZyYW5nZSAmciwg Y29uc3RfYmFzaWNfYmxvY2sgYmIpIG92ZXJyaWRlOworICB2aXJ0dWFsIGJvb2wgYmJfcmFuZ2Vf cCAoY29uc3RfYmFzaWNfYmxvY2sgYmIpIG92ZXJyaWRlOworcHJvdGVjdGVkOgorICBiaXRtYXAg bV9oYXNfdmFsdWU7Cit9OworCitzYnJfbGF6eV92ZWN0b3I6OnNicl9sYXp5X3ZlY3RvciAodHJl ZSB0LCB2cmFuZ2VfYWxsb2NhdG9yICphbGxvY2F0b3IsCisJCQkJICBiaXRtYXBfb2JzdGFjayAq Ym0pCisgIDogc2JyX3ZlY3RvciAodCwgYWxsb2NhdG9yLCBmYWxzZSkKK3sKKyAgbV9oYXNfdmFs dWUgPSBCSVRNQVBfQUxMT0MgKGJtKTsKK30KKworYm9vbAorc2JyX2xhenlfdmVjdG9yOjpzZXRf YmJfcmFuZ2UgKGNvbnN0X2Jhc2ljX2Jsb2NrIGJiLCBjb25zdCB2cmFuZ2UgJnIpCit7CisgIHNi cl92ZWN0b3I6OnNldF9iYl9yYW5nZSAoYmIsIHIpOworICBiaXRtYXBfc2V0X2JpdCAobV9oYXNf dmFsdWUsIGJiLT5pbmRleCk7CisgIHJldHVybiB0cnVlOworfQorCitib29sCitzYnJfbGF6eV92 ZWN0b3I6OmdldF9iYl9yYW5nZSAodnJhbmdlICZyLCBjb25zdF9iYXNpY19ibG9jayBiYikKK3sK KyAgaWYgKGJpdG1hcF9iaXRfcCAobV9oYXNfdmFsdWUsIGJiLT5pbmRleCkpCisgICAgcmV0dXJu IHNicl92ZWN0b3I6OmdldF9iYl9yYW5nZSAociwgYmIpOworICByZXR1cm4gZmFsc2U7Cit9CisK K2Jvb2wKK3Nicl9sYXp5X3ZlY3Rvcjo6YmJfcmFuZ2VfcCAoY29uc3RfYmFzaWNfYmxvY2sgYmIp Cit7CisgIHJldHVybiBiaXRtYXBfYml0X3AgKG1faGFzX3ZhbHVlLCBiYi0+aW5kZXgpOworfQor CiAvLyBUaGlzIGNsYXNzIGltcGxlbWVudHMgdGhlIG9uIGVudHJ5IGNhY2hlIHZpYSBhIHNwYXJz ZSBiaXRtYXAuCiAvLyBJdCB1c2VzIHRoZSBxdWFkIGJpdCByb3V0aW5lcyB0byBhY2Nlc3MgNCBi aXRzIGF0IGEgdGltZS4KIC8vIEEgdmFsdWUgb2YgMCAodGhlIGRlZmF1bHQpIG1lYW5zIHRoZXJl IGlzIG5vIGVudHJ5LCBhbmQgYSB2YWx1ZSBvZgpAQCAtMzQ3LDIxICszOTUsMjkgQEAgYmxvY2tf cmFuZ2VfY2FjaGU6OnNldF9iYl9yYW5nZSAodHJlZSBuYW1lLCBjb25zdF9iYXNpY19ibG9jayBi YiwKIAogICBpZiAoIW1fc3NhX3Jhbmdlc1t2XSkKICAgICB7Ci0gICAgICAvLyBVc2Ugc3BhcnNl IHJlcHJlc2VudGF0aW9uIGlmIHRoZXJlIGFyZSB0b28gbWFueSBiYXNpYyBibG9ja3MuCi0gICAg ICBpZiAobGFzdF9iYXNpY19ibG9ja19mb3JfZm4gKGNmdW4pID4gcGFyYW1fZXZycF9zcGFyc2Vf dGhyZXNob2xkKQorICAgICAgLy8gVXNlIHNwYXJzZSBiaXRtYXAgcmVwcmVzZW50YXRpb24gaWYg dGhlcmUgYXJlIHRvbyBtYW55IGJhc2ljIGJsb2Nrcy4KKyAgICAgIGlmIChsYXN0X2Jhc2ljX2Js b2NrX2Zvcl9mbiAoY2Z1bikgPiBwYXJhbV92cnBfc3BhcnNlX3RocmVzaG9sZCkKIAl7CiAJICB2 b2lkICpyID0gbV9yYW5nZV9hbGxvY2F0b3ItPmFsbG9jIChzaXplb2YgKHNicl9zcGFyc2VfYml0 bWFwKSk7CiAJICBtX3NzYV9yYW5nZXNbdl0gPSBuZXcgKHIpIHNicl9zcGFyc2VfYml0bWFwIChU UkVFX1RZUEUgKG5hbWUpLAogCQkJCQkJICAgICAgIG1fcmFuZ2VfYWxsb2NhdG9yLAogCQkJCQkJ ICAgICAgICZtX2JpdG1hcHMpOwogCX0KLSAgICAgIGVsc2UKKyAgICAgIGVsc2UgaWYgKGxhc3Rf YmFzaWNfYmxvY2tfZm9yX2ZuIChjZnVuKSA8IHBhcmFtX3ZycF92ZWN0b3JfdGhyZXNob2xkKQog CXsKLQkgIC8vIE90aGVyd2lzZSB1c2UgdGhlIGRlZmF1bHQgdmVjdG9yIGltcGxlbWVudGF0aW9u LgorCSAgLy8gRm9yIHNtYWxsIENGR3MgdXNlIHRoZSBiYXNpYyB2ZWN0b3IgaW1wbGVtbnRhdGlv bi4KIAkgIHZvaWQgKnIgPSBtX3JhbmdlX2FsbG9jYXRvci0+YWxsb2MgKHNpemVvZiAoc2JyX3Zl Y3RvcikpOwogCSAgbV9zc2FfcmFuZ2VzW3ZdID0gbmV3IChyKSBzYnJfdmVjdG9yIChUUkVFX1RZ UEUgKG5hbWUpLAogCQkJCQkJbV9yYW5nZV9hbGxvY2F0b3IpOwogCX0KKyAgICAgIGVsc2UKKwl7 CisJICAvLyBPdGhlcndpc2UgdXNlIHRoZSBzcGFyc2UgdmVjdG9yIGltcGxlbWVudGF0aW9uLgor CSAgdm9pZCAqciA9IG1fcmFuZ2VfYWxsb2NhdG9yLT5hbGxvYyAoc2l6ZW9mIChzYnJfbGF6eV92 ZWN0b3IpKTsKKwkgIG1fc3NhX3Jhbmdlc1t2XSA9IG5ldyAocikgc2JyX2xhenlfdmVjdG9yIChU UkVFX1RZUEUgKG5hbWUpLAorCQkJCQkJICAgICBtX3JhbmdlX2FsbG9jYXRvciwKKwkJCQkJCSAg ICAgJm1fYml0bWFwcyk7CisJfQogICAgIH0KICAgcmV0dXJuIG1fc3NhX3Jhbmdlc1t2XS0+c2V0 X2JiX3JhbmdlIChiYiwgcik7CiB9CmRpZmYgLS1naXQgYS9nY2MvZ2ltcGxlLXJhbmdlLWdvcmku Y2MgYi9nY2MvZ2ltcGxlLXJhbmdlLWdvcmkuY2MKaW5kZXggNWJiYTc3YzdiN2IuLjlkMGNjOTdi ZjhjIDEwMDY0NAotLS0gYS9nY2MvZ2ltcGxlLXJhbmdlLWdvcmkuY2MKKysrIGIvZ2NjL2dpbXBs ZS1yYW5nZS1nb3JpLmNjCkBAIC00ODYsNyArNDg2LDcgQEAgZ29yaV9tYXA6OmNhbGN1bGF0ZV9n b3JpIChiYXNpY19ibG9jayBiYikKICAgZWxzZQogICAgIHsKICAgICAgIC8vIERvIG5vdCBwcm9j ZXNzIHN3aXRjaGVzIGlmIHRoZXkgYXJlIHRvbyBsYXJnZS4KLSAgICAgIGlmIChFREdFX0NPVU5U IChiYi0+c3VjY3MpID4gKHVuc2lnbmVkKXBhcmFtX2V2cnBfc3dpdGNoX2xpbWl0KQorICAgICAg aWYgKEVER0VfQ09VTlQgKGJiLT5zdWNjcykgPiAodW5zaWduZWQpcGFyYW1fdnJwX3N3aXRjaF9s aW1pdCkKIAlyZXR1cm47CiAgICAgICBnc3dpdGNoICpncyA9IGFzX2E8Z3N3aXRjaCAqPihzdG10 KTsKICAgICAgIG5hbWUgPSBnaW1wbGVfcmFuZ2Vfc3NhX3AgKGdpbXBsZV9zd2l0Y2hfaW5kZXgg KGdzKSk7CkBAIC01NTgsNyArNTU4LDcgQEAgZGVidWcgKGdvcmlfbWFwICZnKQogLy8gQ29uc3Ry dWN0IGEgZ29yaV9jb21wdXRlIG9iamVjdC4KIAogZ29yaV9jb21wdXRlOjpnb3JpX2NvbXB1dGUg KGludCBub3RfZXhlY3V0YWJsZV9mbGFnKQotCQkgICAgICA6IG91dGdvaW5nIChwYXJhbV9ldnJw X3N3aXRjaF9saW1pdCksIHRyYWNlciAoIkdPUkkgIikKKwkJICAgICAgOiBvdXRnb2luZyAocGFy YW1fdnJwX3N3aXRjaF9saW1pdCksIHRyYWNlciAoIkdPUkkgIikKIHsKICAgbV9ub3RfZXhlY3V0 YWJsZV9mbGFnID0gbm90X2V4ZWN1dGFibGVfZmxhZzsKICAgLy8gQ3JlYXRlIGEgYm9vbGVhbl90 eXBlIHRydWUgYW5kIGZhbHNlIHJhbmdlLgpkaWZmIC0tZ2l0IGEvZ2NjL3BhcmFtcy5vcHQgYi9n Y2MvcGFyYW1zLm9wdAppbmRleCA4MjNjZGIyZmY4NS4uNjZmMWM5OTAzNmEgMTAwNjQ0Ci0tLSBh L2djYy9wYXJhbXMub3B0CisrKyBiL2djYy9wYXJhbXMub3B0CkBAIC0xMzAsMTQgKzEzMCw2IEBA IE1heGltdW0gc2l6ZSAoaW4gYnl0ZXMpIG9mIG9iamVjdHMgdHJhY2tlZCBieXRld2lzZSBieSBk ZWFkIHN0b3JlIGVsaW1pbmF0aW9uLgogQ29tbW9uIEpvaW5lZCBVSW50ZWdlciBWYXIocGFyYW1f ZWFybHlfaW5saW5pbmdfaW5zbnMpIEluaXQoNikgT3B0aW1pemF0aW9uIFBhcmFtCiBNYXhpbWFs IGVzdGltYXRlZCBncm93dGggb2YgZnVuY3Rpb24gYm9keSBjYXVzZWQgYnkgZWFybHkgaW5saW5p bmcgb2Ygc2luZ2xlIGNhbGwuCiAKLS1wYXJhbT1ldnJwLXNwYXJzZS10aHJlc2hvbGQ9Ci1Db21t b24gSm9pbmVkIFVJbnRlZ2VyIFZhcihwYXJhbV9ldnJwX3NwYXJzZV90aHJlc2hvbGQpIEluaXQo ODAwKSBPcHRpbWl6YXRpb24gUGFyYW0KLU1heGltdW0gbnVtYmVyIG9mIGJhc2ljIGJsb2NrcyBi ZWZvcmUgRVZSUCB1c2VzIGEgc3BhcnNlIGNhY2hlLgotCi0tcGFyYW09ZXZycC1zd2l0Y2gtbGlt aXQ9Ci1Db21tb24gSm9pbmVkIFVJbnRlZ2VyIFZhcihwYXJhbV9ldnJwX3N3aXRjaF9saW1pdCkg SW5pdCg1MCkgT3B0aW1pemF0aW9uIFBhcmFtCi1NYXhpbXVtIG51bWJlciBvZiBvdXRnb2luZyBl ZGdlcyBpbiBhIHN3aXRjaCBiZWZvcmUgRVZSUCB3aWxsIG5vdCBwcm9jZXNzIGl0LgotCiAtcGFy YW09ZnNtLXNjYWxlLXBhdGgtc3RtdHM9CiBDb21tb24gSm9pbmVkIFVJbnRlZ2VyIFZhcihwYXJh bV9mc21fc2NhbGVfcGF0aF9zdG10cykgSW5pdCgyKSBJbnRlZ2VyUmFuZ2UoMSwgMTApIFBhcmFt IE9wdGltaXphdGlvbgogU2NhbGUgZmFjdG9yIHRvIGFwcGx5IHRvIHRoZSBudW1iZXIgb2Ygc3Rh dGVtZW50cyBpbiBhIHRocmVhZGluZyBwYXRoIGNyb3NzaW5nIGEgbG9vcCBiYWNrZWRnZSB3aGVu IGNvbXBhcmluZyB0byBtYXgtanVtcC10aHJlYWQtZHVwbGljYXRpb24tc3RtdHMuCkBAIC0xMTgy LDQgKzExNzQsMTYgQEAgVGhlIG1heGltdW0gZmFjdG9yIHdoaWNoIHRoZSBsb29wIHZlY3Rvcml6 ZXIgYXBwbGllcyB0byB0aGUgY29zdCBvZiBzdGF0ZW1lbnRzIGkKIENvbW1vbiBKb2luZWQgVUlu dGVnZXIgVmFyKHBhcmFtX3ZlY3RfaW5kdWN0aW9uX2Zsb2F0KSBJbml0KDEpIEludGVnZXJSYW5n ZSgwLCAxKSBQYXJhbSBPcHRpbWl6YXRpb24KIEVuYWJsZSBsb29wIHZlY3Rvcml6YXRpb24gb2Yg ZmxvYXRpbmcgcG9pbnQgaW5kdWN0aW9ucy4KIAorLXBhcmFtPXZycC1zcGFyc2UtdGhyZXNob2xk PQorQ29tbW9uIEpvaW5lZCBVSW50ZWdlciBWYXIocGFyYW1fdnJwX3NwYXJzZV90aHJlc2hvbGQp IEluaXQoMzAwMCkgT3B0aW1pemF0aW9uIFBhcmFtCitNYXhpbXVtIG51bWJlciBvZiBiYXNpYyBi bG9ja3MgYmVmb3JlIFZSUCB1c2VzIGEgc3BhcnNlIGJpdG1hcCBjYWNoZS4KKworLXBhcmFtPXZy cC1zd2l0Y2gtbGltaXQ9CitDb21tb24gSm9pbmVkIFVJbnRlZ2VyIFZhcihwYXJhbV92cnBfc3dp dGNoX2xpbWl0KSBJbml0KDUwKSBPcHRpbWl6YXRpb24gUGFyYW0KK01heGltdW0gbnVtYmVyIG9m IG91dGdvaW5nIGVkZ2VzIGluIGEgc3dpdGNoIGJlZm9yZSBWUlAgd2lsbCBub3QgcHJvY2VzcyBp dC4KKworLXBhcmFtPXZycC12ZWN0b3ItdGhyZXNob2xkPQorQ29tbW9uIEpvaW5lZCBVSW50ZWdl ciBWYXIocGFyYW1fdnJwX3ZlY3Rvcl90aHJlc2hvbGQpIEluaXQoMjUwKSBPcHRpbWl6YXRpb24g UGFyYW0KK01heGltdW0gbnVtYmVyIG9mIGJhc2ljIGJsb2NrcyBmb3IgVlJQIHRvIHVzZSBhIGJh c2ljIGNhY2hlIHZlY3Rvci4KKwogOyBUaGlzIGNvbW1lbnQgaXMgdG8gZW5zdXJlIHdlIHJldGFp biB0aGUgYmxhbmsgbGluZSBhYm92ZS4KLS0gCjIuMzkuMgoK --------------sPg2xuasSGCI8tpYfC0PP0i0--