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.133.124]) by sourceware.org (Postfix) with ESMTPS id 7BA8D3834E7B for ; Wed, 1 Jun 2022 09:01:28 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.1 sourceware.org 7BA8D3834E7B Received: from mail-oi1-f199.google.com (mail-oi1-f199.google.com [209.85.167.199]) by relay.mimecast.com with ESMTP with STARTTLS (version=TLSv1.2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id us-mta-494-mKB9yM05NsSzN2FdOmjYYA-1; Wed, 01 Jun 2022 05:01:26 -0400 X-MC-Unique: mKB9yM05NsSzN2FdOmjYYA-1 Received: by mail-oi1-f199.google.com with SMTP id d67-20020acab446000000b0032ae7767585so768797oif.6 for ; Wed, 01 Jun 2022 02:01:26 -0700 (PDT) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=x-gm-message-state:mime-version:references:in-reply-to:from:date :message-id:subject:to:cc; bh=nGIXN90Kj4daWGMj+QlTjnG1RzD9I7JzdEzCDUei+/w=; b=VpFYz5rQ5CQYHU866iveY/3qNHSteU/NZ9EUmr6o/bNM7F24kPkntdiBbae1Ov9QRn UvTkV0B4XrHeZW+Ksz5IXZ1Cp6Af8/rEJUbjkktqenyezTNF5BD2onIvzuipBIsyaBE1 pt3FDBFSeDW2XwLplzSwlC/fugy5dkNlbMlspZE4OVHdV9eencM57KLWmKdI6VbMZL5G Ok4oGdlmdbbBb1vX93SinG0n+gNI37r34eyKJytXI2rLC7axm870U9lj4TbFe72+GIeM p+Tp1MMYglgld3449zmaGmXBYTBT+bZSIoIkVYoiev5vMgbneT+8PEcEntsdLBXci8EA +YUQ== X-Gm-Message-State: AOAM5330NVE0ThE+cbJf6NfCXTsOqjIF76teNcH2gQjeIU5OHpnqjdO5 gvzHJ8Co0jaPioIMcHroX2dgVihHwW2zKfL9DXajnn7/pnKt8RyHdbHwcw+7CWJxcBEwa9Jsejz QUgU6vlFqKKJA+1EeC1hxki8xP+2B6XLynQ== X-Received: by 2002:a05:6830:4110:b0:60b:20e7:84f2 with SMTP id w16-20020a056830411000b0060b20e784f2mr15278607ott.276.1654074085994; Wed, 01 Jun 2022 02:01:25 -0700 (PDT) X-Google-Smtp-Source: ABdhPJz244MxSL37zKH8wQU4B53mPO4ZMS9pr/ILAPNrNtOqmniCXhhW3BBaD3o6Xjyv84FlB+xToQJXAQAQWbzNWI4= X-Received: by 2002:a05:6830:4110:b0:60b:20e7:84f2 with SMTP id w16-20020a056830411000b0060b20e784f2mr15278597ott.276.1654074085719; Wed, 01 Jun 2022 02:01:25 -0700 (PDT) MIME-Version: 1.0 References: <20220530132751.1752112-1-aldyh@redhat.com> <20220530132751.1752112-2-aldyh@redhat.com> In-Reply-To: From: Aldy Hernandez Date: Wed, 1 Jun 2022 11:01:14 +0200 Message-ID: Subject: Re: [PATCH 2/5] Implement generic range temporaries. To: Andrew MacLeod Cc: GCC patches X-Mimecast-Spam-Score: 0 X-Mimecast-Originator: redhat.com Content-Type: multipart/mixed; boundary="00000000000050339b05e05f226f" X-Spam-Status: No, score=-11.5 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, 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 X-BeenThere: gcc-patches@gcc.gnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: Gcc-patches mailing list List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Wed, 01 Jun 2022 09:01:31 -0000 --00000000000050339b05e05f226f Content-Type: text/plain; charset="UTF-8" Final patch committed. tmp_range has been renamed to Value_Range. Value_Range::init() has been renamed to set_type() which is more obvious. Default constructor for Value_Range now points the vrange to the unsupported_range object, so we always have an object available. Re-tested on x86-64 Linux. On Tue, May 31, 2022 at 8:21 AM Aldy Hernandez wrote: > > On Mon, May 30, 2022 at 4:56 PM Andrew MacLeod wrote: > > > > On 5/30/22 09:27, Aldy Hernandez wrote: > > > Now that we have generic ranges, we need a way to define generic local > > > temporaries on the stack for intermediate calculations in the ranger > > > and elsewhere. We need temporaries analogous to int_range_max, but > > > for any of the supported types (currently just integers, but soon > > > integers, pointers, and floats). > > > > > > The tmp_range object is such a temporary. It is designed to be > > > transparently used as a vrange. It shares vrange's abstract API, and > > > implicitly casts itself to a vrange when passed around. > > > > > > The ultimate name will be value_range, but we need to remove legacy > > > first for that to happen. Until then, tmp_range will do. > > > > > I was going to suggest maybe renaming value_range to legacy_range or > > something, and then start using value_range for ranges of any time. > > Then it occurred to me that numerous places which use value_range > > will/can continue to use value_range going forward.. ie > > > > value_range vr; > > if (!rvals->range_of_expr (vr, name, stmt)) > > return -1; > > > > would be unaffected, to it would be pointless turmoil to rename that and > > then rename it back to value_range. > > > > I also notice there are already a few instance of local variable named > > tmp_range, which make name renames annoying. Perhaps we should use > > Value_Range or something like that in the interim for the multi-type > > ranges? Then the rename is trivial down the road, formatting will be > > unaffected, and then we're kinda sorta using the end_goal name? > > OMG that is so ugly! Although I guess it would be temporary. > > Speaking of which, how far away are we from enabling ranger in VRP1? > Because once we do that, we can start nuking legacy and cleaning all > this up. > > Aldy --00000000000050339b05e05f226f Content-Type: text/x-patch; charset="US-ASCII"; name="0002-Implement-generic-range-temporaries.patch" Content-Disposition: attachment; filename="0002-Implement-generic-range-temporaries.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_l3vcw6t20 RnJvbSA1OWM4ZTk2ZGQwMjM4M2JhZWM0YzE1NjY1OTg1ZGEzY2FhZGFhYTVlIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBBbGR5IEhlcm5hbmRleiA8YWxkeWhAcmVkaGF0LmNvbT4KRGF0 ZTogTW9uLCAxNCBNYXIgMjAyMiAxMzoyNzozNiArMDEwMApTdWJqZWN0OiBbUEFUQ0hdIEltcGxl bWVudCBnZW5lcmljIHJhbmdlIHRlbXBvcmFyaWVzLgoKTm93IHRoYXQgd2UgaGF2ZSBnZW5lcmlj IHJhbmdlcywgd2UgbmVlZCBhIHdheSB0byBkZWZpbmUgZ2VuZXJpYyBsb2NhbAp0ZW1wb3Jhcmll cyBvbiB0aGUgc3RhY2sgZm9yIGludGVybWVkaWF0ZSBjYWxjdWxhdGlvbnMgaW4gdGhlIHJhbmdl cgphbmQgZWxzZXdoZXJlLiAgV2UgbmVlZCB0ZW1wb3JhcmllcyBhbmFsb2dvdXMgdG8gaW50X3Jh bmdlX21heCwgYnV0CmZvciBhbnkgb2YgdGhlIHN1cHBvcnRlZCB0eXBlcyAoY3VycmVudGx5IGp1 c3QgaW50ZWdlcnMsIGJ1dCBzb29uCmludGVnZXJzLCBwb2ludGVycywgYW5kIGZsb2F0cykuCgpU aGUgVmFsdWVfUmFuZ2Ugb2JqZWN0IGlzIHN1Y2ggYSB0ZW1wb3JhcnkuICBJdCBpcyBkZXNpZ25l ZCB0byBiZQp0cmFuc3BhcmVudGx5IHVzZWQgYXMgYSB2cmFuZ2UuICBJdCBzaGFyZXMgdnJhbmdl J3MgYWJzdHJhY3QgQVBJLCBhbmQKaW1wbGljaXRseSBjYXN0cyBpdHNlbGYgdG8gYSB2cmFuZ2Ug d2hlbiBwYXNzZWQgYXJvdW5kLgoKVGhlIHVsdGltYXRlIG5hbWUgd2lsbCBiZSB2YWx1ZV9yYW5n ZSwgYnV0IHdlIG5lZWQgdG8gcmVtb3ZlIGxlZ2FjeQpmaXJzdCBmb3IgdGhhdCB0byBoYXBwZW4u ICBVbnRpbCB0aGVuLCBWYWx1ZV9SYW5nZSB3aWxsIGRvLgoKU2FtcGxlIHVzYWdlIGlzIGFzIGZv bGxvd3MuICBJbnN0ZWFkIG9mOgoKCWV4dGVybiB2b2lkIGZvbyAodnJhbmdlICYpOwoKCWludF9y YW5nZV9tYXggdDsKCXQuc2V0X25vbnplcm8gKHR5cGUpOwoJZm9vICh0KTsKCm9uZSBkb2VzOgoK CVZhbHVlX1JhbmdlIHQgKHR5cGUpOwoJdC5zZXRfbm9uemVybyAodHlwZSk7Cglmb28gKHQpOwoK WW91IGNhbiBhbHNvIGRlbGF5IGluaXRpYWxpemF0aW9uLCBmb3IgdXNlIGluIGxvb3BzIGZvciBl eGFtcGxlOgoKCVZhbHVlX1JhbmdlIHQ7CgkuLi4KCXQuc2V0X3R5cGUgKHR5cGUpOwoJdC5zZXRf dmFyeWluZyAodHlwZSk7CgpDcmVhdGluZyBhbiBzdXBwb3J0ZWQgcmFuZ2UgdHlwZSwgd2lsbCBy ZXN1bHQgaW4gYW4gdW5zdXBwb3J0ZWRfcmFuZ2UKb2JqZWN0IGJlaW5nIGNyZWF0ZWQsIHdoaWNo IHdpbGwgdHJhcCBpZiBhbnl0aGluZyBidXQgc2V0X3VuZGVmaW5lZCgpCmFuZCB1bmRlZmluZWRf cCgpIGFyZSBjYWxsZWQgb24gaXQuICBUaGVyZSdzIG5vIHNpemUgcGVuYWx0eSBmb3IgdGhlCnVu c3VwcG9ydGVkX3JhbmdlLCBzaW5jZSBpdHMgaW1tdXRhYmxlIGFuZCBjYW4gYmUgc2hhcmVkIGFj cm9zcwppbnN0YW5jZXMuCgpTaW5jZSBzdXBwb3J0c190eXBlX3AoKSBpcyBjYWxsZWQgYXQgY29u c3RydWN0aW9uIHRpbWUgZm9yIGVhY2gKdGVtcG9yYXJ5LCBJJ3ZlIHJlbW92ZWQgdGhlIG5vbi16 ZXJvIGNoZWNrIGZyb20gdGhpcyBmdW5jdGlvbiwgd2hpY2gKd2FzIG1vc3RseSB1bm5lZWRlZC4g IEkgZml4ZWQgdGhlIGhhbmRmdWwgb2YgY2FsbGVycyB0aGF0IHdlcmUKcGFzc2luZyBudWxsIHR5 cGVzLCBhbmQgaW4gdGhlIHByb2Nlc3Mgc3BlZCB0aGluZ3MgdXAgYSBiaXQuCgpBcyBtb3JlIHJh bmdlIHR5cGVzIGNvbWUgYWJvdXQsIHRoZSBWYWx1ZV9SYW5nZSBjbGFzcyB3aWxsIGJlIGF1Z21l bnRlZAp0byBzdXBwb3J0IHRoZW0gYnkgYWRkaW5nIHRoZSByZWxldmFudCBiaXRzIGluIHRoZSBp bml0aWFsaXphdGlvbgpjb2RlLCBldGMuCgpUZXN0ZWQgb24geDg2LTY0ICYgcHBjNjRsZSBMaW51 eC4KCmdjYy9DaGFuZ2VMb2c6CgoJKiBnaW1wbGUtcmFuZ2UtZm9sZC5oIChnaW1wbGVfcmFuZ2Vf dHlwZSk6IENoZWNrIHR5cGUgYmVmb3JlCgljYWxsaW5nIHN1cHBvcnRzX3R5cGVfcC4KCSogZ2lt cGxlLXJhbmdlLXBhdGguY2MgKHBhdGhfcmFuZ2VfcXVlcnk6OnJhbmdlX29mX3N0bXQpOiBTYW1l LgoJKiB2YWx1ZS1xdWVyeS5jYyAocmFuZ2VfcXVlcnk6OmdldF90cmVlX3JhbmdlKTogU2FtZS4K CSogdmFsdWUtcmFuZ2UuY2MgKFZhbHVlX1JhbmdlOjpsb3dlcl9ib3VuZCk6IE5ldy4KCShWYWx1 ZV9SYW5nZTo6dXBwZXJfYm91bmQpOiBOZXcuCgkoVmFsdWVfUmFuZ2U6OmR1bXApOiBOZXcuCgkq IHZhbHVlLXJhbmdlLmggKGNsYXNzIFZhbHVlX1JhbmdlKTogTmV3LgoJKGlyYW5nZTo6c3VwcG9y dHNfdHlwZV9wKTogRG8gbm90IGNoZWNrIGlmIHR5cGUgaXMgbm9uLXplcm8uCi0tLQogZ2NjL2dp bXBsZS1yYW5nZS1mb2xkLmggIHwgICAyICstCiBnY2MvZ2ltcGxlLXJhbmdlLXBhdGguY2MgfCAg IDIgKy0KIGdjYy92YWx1ZS1xdWVyeS5jYyAgICAgICB8ICAgMyArLQogZ2NjL3ZhbHVlLXJhbmdl LmNjICAgICAgIHwgIDM4ICsrKysrKysrKysrCiBnY2MvdmFsdWUtcmFuZ2UuaCAgICAgICAgfCAx MzUgKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKystCiA1IGZpbGVzIGNoYW5n ZWQsIDE3NCBpbnNlcnRpb25zKCspLCA2IGRlbGV0aW9ucygtKQoKZGlmZiAtLWdpdCBhL2djYy9n aW1wbGUtcmFuZ2UtZm9sZC5oIGIvZ2NjL2dpbXBsZS1yYW5nZS1mb2xkLmgKaW5kZXggNTNhNWJm ODVkZDQuLjIwY2I3M2RhYmI5IDEwMDY0NAotLS0gYS9nY2MvZ2ltcGxlLXJhbmdlLWZvbGQuaAor KysgYi9nY2MvZ2ltcGxlLXJhbmdlLWZvbGQuaApAQCAtODEsNyArODEsNyBAQCBnaW1wbGVfcmFu Z2VfdHlwZSAoY29uc3QgZ2ltcGxlICpzKQogCSAgICB0eXBlID0gVFJFRV9UWVBFICh0eXBlKTsK IAl9CiAgICAgfQotICBpZiAoaXJhbmdlOjpzdXBwb3J0c190eXBlX3AgKHR5cGUpKQorICBpZiAo dHlwZSAmJiBpcmFuZ2U6OnN1cHBvcnRzX3R5cGVfcCAodHlwZSkpCiAgICAgcmV0dXJuIHR5cGU7 CiAgIHJldHVybiBOVUxMX1RSRUU7CiB9CmRpZmYgLS1naXQgYS9nY2MvZ2ltcGxlLXJhbmdlLXBh dGguY2MgYi9nY2MvZ2ltcGxlLXJhbmdlLXBhdGguY2MKaW5kZXggNDU5ZDM3OTdkYTcuLjY2ZjQz M2RkMWQ1IDEwMDY0NAotLS0gYS9nY2MvZ2ltcGxlLXJhbmdlLXBhdGguY2MKKysrIGIvZ2NjL2dp bXBsZS1yYW5nZS1wYXRoLmNjCkBAIC03NTUsNyArNzU1LDcgQEAgcGF0aF9yYW5nZV9xdWVyeTo6 cmFuZ2Vfb2Zfc3RtdCAoaXJhbmdlICZyLCBnaW1wbGUgKnN0bXQsIHRyZWUpCiB7CiAgIHRyZWUg dHlwZSA9IGdpbXBsZV9yYW5nZV90eXBlIChzdG10KTsKIAotICBpZiAoIWlyYW5nZTo6c3VwcG9y dHNfdHlwZV9wICh0eXBlKSkKKyAgaWYgKCF0eXBlIHx8ICFpcmFuZ2U6OnN1cHBvcnRzX3R5cGVf cCAodHlwZSkpCiAgICAgcmV0dXJuIGZhbHNlOwogCiAgIC8vIElmIHJlc29sdmluZyB1bmtub3du cywgZm9sZCB0aGUgc3RhdGVtZW50IG1ha2luZyB1c2Ugb2YgYW55CmRpZmYgLS1naXQgYS9nY2Mv dmFsdWUtcXVlcnkuY2MgYi9nY2MvdmFsdWUtcXVlcnkuY2MKaW5kZXggOWNjZDgwMjQ1N2IuLjI2 ZTM4NTgxMDNiIDEwMDY0NAotLS0gYS9nY2MvdmFsdWUtcXVlcnkuY2MKKysrIGIvZ2NjL3ZhbHVl LXF1ZXJ5LmNjCkBAIC0yNDksNyArMjQ5LDggQEAgcmFuZ2VfcXVlcnk6OmdldF90cmVlX3Jhbmdl IChpcmFuZ2UgJnIsIHRyZWUgZXhwciwgZ2ltcGxlICpzdG10KQogICBpZiAoVU5BUllfQ0xBU1Nf UCAoZXhwcikpCiAgICAgewogICAgICAgcmFuZ2Vfb3BlcmF0b3IgKm9wID0gcmFuZ2Vfb3BfaGFu ZGxlciAoVFJFRV9DT0RFIChleHByKSwgdHlwZSk7Ci0gICAgICBpZiAob3ApCisgICAgICB0cmVl IG9wMF90eXBlID0gVFJFRV9UWVBFIChUUkVFX09QRVJBTkQgKGV4cHIsIDApKTsKKyAgICAgIGlm IChvcCAmJiBpcmFuZ2U6OnN1cHBvcnRzX3R5cGVfcCAob3AwX3R5cGUpKQogCXsKIAkgIGludF9y YW5nZV9tYXggcjA7CiAJICByYW5nZV9vZl9leHByIChyMCwgVFJFRV9PUEVSQU5EIChleHByLCAw KSwgc3RtdCk7CmRpZmYgLS1naXQgYS9nY2MvdmFsdWUtcmFuZ2UuY2MgYi9nY2MvdmFsdWUtcmFu Z2UuY2MKaW5kZXggOTdmZjA2MTRmNDguLjQyOTY3MjczN2E4IDEwMDY0NAotLS0gYS9nY2MvdmFs dWUtcmFuZ2UuY2MKKysrIGIvZ2NjL3ZhbHVlLXJhbmdlLmNjCkBAIC0zMCw2ICszMCw0MiBAQCBh bG9uZyB3aXRoIEdDQzsgc2VlIHRoZSBmaWxlIENPUFlJTkczLiAgSWYgbm90IHNlZQogI2luY2x1 ZGUgImZvbGQtY29uc3QuaCIKICNpbmNsdWRlICJnaW1wbGUtcmFuZ2UuaCIKIAorLy8gQ29udmVu aWVuY2UgZnVuY3Rpb24gb25seSBhdmFpbGFibGUgZm9yIGludGVnZXJzIGFuZCBwb2ludGVycy4K Kword2lkZV9pbnQKK1ZhbHVlX1JhbmdlOjpsb3dlcl9ib3VuZCAoKSBjb25zdAoreworICBpZiAo aXNfYSA8aXJhbmdlPiAoKm1fdnJhbmdlKSkKKyAgICByZXR1cm4gYXNfYSA8aXJhbmdlPiAoKm1f dnJhbmdlKS5sb3dlcl9ib3VuZCAoKTsKKyAgZ2NjX3VucmVhY2hhYmxlICgpOworfQorCisvLyBD b252ZW5pZW5jZSBmdW5jdGlvbiBvbmx5IGF2YWlsYWJsZSBmb3IgaW50ZWdlcnMgYW5kIHBvaW50 ZXJzLgorCit3aWRlX2ludAorVmFsdWVfUmFuZ2U6OnVwcGVyX2JvdW5kICgpIGNvbnN0Cit7Cisg IGlmIChpc19hIDxpcmFuZ2U+ICgqbV92cmFuZ2UpKQorICAgIHJldHVybiBhc19hIDxpcmFuZ2U+ ICgqbV92cmFuZ2UpLnVwcGVyX2JvdW5kICgpOworICBnY2NfdW5yZWFjaGFibGUgKCk7Cit9CisK K3ZvaWQKK1ZhbHVlX1JhbmdlOjpkdW1wIChGSUxFICpvdXQpIGNvbnN0Cit7CisgIGlmIChtX3Zy YW5nZSkKKyAgICBtX3ZyYW5nZS0+ZHVtcCAob3V0KTsKKyAgZWxzZQorICAgIGZwcmludGYgKG91 dCwgIk5VTEwiKTsKK30KKworREVCVUdfRlVOQ1RJT04gdm9pZAorZGVidWcgKGNvbnN0IFZhbHVl X1JhbmdlICZyKQoreworICByLmR1bXAgKHN0ZGVycik7CisgIGZwcmludGYgKHN0ZGVyciwgIlxu Iik7Cit9CisKIC8vIERlZmF1bHQgaW1wbGVtZW50YXRpb24gd2hlbiBub25lIGhhcyBiZWVuIGRl ZmluZWQuCiAKIGJvb2wKQEAgLTE4Niw2ICsyMjIsOCBAQCB1bnN1cHBvcnRlZF9yYW5nZTo6Zml0 c19wIChjb25zdCB2cmFuZ2UgJikgY29uc3QKICAgcmV0dXJuIGZhbHNlOwogfQogCit1bnN1cHBv cnRlZF9yYW5nZSBWYWx1ZV9SYW5nZTo6bV91bnN1cHBvcnRlZDsKKwogLy8gSGVyZSB3ZSBjb3B5 IGJldHdlZW4gYW55IHR3byBpcmFuZ2Uncy4gIFRoZSByYW5nZXMgY2FuIGJlIGxlZ2FjeSBvcgog Ly8gbXVsdGktcmFuZ2VzLCBhbmQgY29weWluZyBiZXR3ZWVuIGFueSBjb21iaW5hdGlvbiB3b3Jr cyBjb3JyZWN0bHkuCiAKZGlmZiAtLWdpdCBhL2djYy92YWx1ZS1yYW5nZS5oIGIvZ2NjL3ZhbHVl LXJhbmdlLmgKaW5kZXggMDA2MWY2NjcwOTIuLmI3ZWE4Yzc2Zjg3IDEwMDY0NAotLS0gYS9nY2Mv dmFsdWUtcmFuZ2UuaAorKysgYi9nY2MvdmFsdWUtcmFuZ2UuaApAQCAtNTQsNiArNTQsNyBAQCBl bnVtIHZhbHVlX3JhbmdlX2Rpc2NyaW1pbmF0b3IKIGNsYXNzIHZyYW5nZQogewogICB0ZW1wbGF0 ZSA8dHlwZW5hbWUgVD4gZnJpZW5kIGJvb2wgaXNfYSAodnJhbmdlICYpOworICBmcmllbmQgY2xh c3MgVmFsdWVfUmFuZ2U7CiBwdWJsaWM6CiAgIHZpcnR1YWwgdm9pZCBzZXQgKHRyZWUsIHRyZWUs IHZhbHVlX3JhbmdlX2tpbmQgPSBWUl9SQU5HRSkgPSAwOwogICB2aXJ0dWFsIHRyZWUgdHlwZSAo KSBjb25zdCA9IDA7CkBAIC0zMTMsNiArMzE0LDEzNiBAQCB0eXBlZGVmIGludF9yYW5nZTwxPiB2 YWx1ZV9yYW5nZTsKIC8vIGNhbGN1bGF0aW9ucy4KIHR5cGVkZWYgaW50X3JhbmdlPDI1NT4gaW50 X3JhbmdlX21heDsKIAorLy8gVGhpcyBpcyBhbiAiaW5maW5pdGUiIHByZWNpc2lvbiByYW5nZSBv YmplY3QgZm9yIHVzZSBpbiB0ZW1wb3JhcnkKKy8vIGNhbGN1bGF0aW9ucyBmb3IgYW55IG9mIHRo ZSBoYW5kbGVkIHR5cGVzLiAgVGhlIG9iamVjdCBjYW4gYmUKKy8vIHRyYW5zcGFyZW50bHkgdXNl ZCBhcyBhIHZyYW5nZS4KKworY2xhc3MgVmFsdWVfUmFuZ2UKK3sKK3B1YmxpYzoKKyAgVmFsdWVf UmFuZ2UgKCk7CisgIFZhbHVlX1JhbmdlIChjb25zdCB2cmFuZ2UgJnIpOworICBWYWx1ZV9SYW5n ZSAodHJlZSB0eXBlKTsKKyAgdm9pZCBzZXRfdHlwZSAodHJlZSB0eXBlKTsKKyAgdnJhbmdlJiBv cGVyYXRvcj0gKGNvbnN0IHZyYW5nZSAmKTsKKyAgYm9vbCBvcGVyYXRvcj09IChjb25zdCBWYWx1 ZV9SYW5nZSAmcikgY29uc3Q7CisgIGJvb2wgb3BlcmF0b3IhPSAoY29uc3QgVmFsdWVfUmFuZ2Ug JnIpIGNvbnN0OworICBvcGVyYXRvciB2cmFuZ2UgJigpOworICBvcGVyYXRvciBjb25zdCB2cmFu Z2UgJigpIGNvbnN0OworICB2b2lkIGR1bXAgKEZJTEUgKm91dCA9IHN0ZGVycikgY29uc3Q7CisK KyAgLy8gQ29udmVuaWVuY2UgbWV0aG9kcyBmb3IgdnJhbmdlIGNvbXBhdGFiaWxpdHkuCisgIHZv aWQgc2V0ICh0cmVlIG1pbiwgdHJlZSBtYXgsIHZhbHVlX3JhbmdlX2tpbmQga2luZCA9IFZSX1JB TkdFKQorICAgIHsgcmV0dXJuIG1fdnJhbmdlLT5zZXQgKG1pbiwgbWF4LCBraW5kKTsgfQorICB0 cmVlIHR5cGUgKCkgeyByZXR1cm4gbV92cmFuZ2UtPnR5cGUgKCk7IH0KKyAgZW51bSB2YWx1ZV9y YW5nZV9raW5kIGtpbmQgKCkgeyByZXR1cm4gbV92cmFuZ2UtPmtpbmQgKCk7IH0KKyAgYm9vbCB2 YXJ5aW5nX3AgKCkgY29uc3QgeyByZXR1cm4gbV92cmFuZ2UtPnZhcnlpbmdfcCAoKTsgfQorICBi b29sIHVuZGVmaW5lZF9wICgpIGNvbnN0IHsgcmV0dXJuIG1fdnJhbmdlLT51bmRlZmluZWRfcCAo KTsgfQorICB2b2lkIHNldF92YXJ5aW5nICh0cmVlIHR5cGUpIHsgbV92cmFuZ2UtPnNldF92YXJ5 aW5nICh0eXBlKTsgfQorICB2b2lkIHNldF91bmRlZmluZWQgKCkgeyBtX3ZyYW5nZS0+c2V0X3Vu ZGVmaW5lZCAoKTsgfQorICBib29sIHVuaW9uXyAoY29uc3QgdnJhbmdlICZyKSB7IHJldHVybiBt X3ZyYW5nZS0+dW5pb25fIChyKTsgfQorICBib29sIGludGVyc2VjdCAoY29uc3QgdnJhbmdlICZy KSB7IHJldHVybiBtX3ZyYW5nZS0+aW50ZXJzZWN0IChyKTsgfQorICBib29sIHNpbmdsZXRvbl9w ICh0cmVlICpyZXN1bHQgPSBOVUxMKSBjb25zdAorICAgIHsgcmV0dXJuIG1fdnJhbmdlLT5zaW5n bGV0b25fcCAocmVzdWx0KTsgfQorICBib29sIHplcm9fcCAoKSBjb25zdCB7IHJldHVybiBtX3Zy YW5nZS0+emVyb19wICgpOyB9CisgIHdpZGVfaW50IGxvd2VyX2JvdW5kICgpIGNvbnN0OyAvLyBG b3IgaXJhbmdlL3ByYW5nZSBjb21wYXRhYmlsaXR5LgorICB3aWRlX2ludCB1cHBlcl9ib3VuZCAo KSBjb25zdDsgLy8gRm9yIGlyYW5nZS9wcmFuZ2UgY29tcGF0YWJpbGl0eS4KK3ByaXZhdGU6Cisg IHZvaWQgaW5pdCAodHJlZSB0eXBlKTsKKyAgc3RhdGljIHVuc3VwcG9ydGVkX3JhbmdlIG1fdW5z dXBwb3J0ZWQ7CisgIHZyYW5nZSAqbV92cmFuZ2U7CisgIGludF9yYW5nZV9tYXggbV9pcmFuZ2U7 CisgIERJU0FCTEVfQ09QWV9BTkRfQVNTSUdOIChWYWx1ZV9SYW5nZSk7Cit9OworCitpbmxpbmUK K1ZhbHVlX1JhbmdlOjpWYWx1ZV9SYW5nZSAoKQoreworICBtX3ZyYW5nZSA9ICZtX3Vuc3VwcG9y dGVkOworfQorCisvLyBDb3B5IGNvbnN0cnVjdG9yIGZyb20gYSB2cmFuZ2UuCisKK2lubGluZQor VmFsdWVfUmFuZ2U6OlZhbHVlX1JhbmdlIChjb25zdCB2cmFuZ2UgJnIpCit7CisgICp0aGlzID0g cjsKK30KKworLy8gQ29weSBjb25zdHJ1Y3RvciBmcm9tIGEgVFlQRS4gIFRoZSByYW5nZSBvZiB0 aGUgdGVtcG9yYXJ5IGlzIHNldCB0bworLy8gVU5ERUZJTkVELgorCitpbmxpbmUKK1ZhbHVlX1Jh bmdlOjpWYWx1ZV9SYW5nZSAodHJlZSB0eXBlKQoreworICBpbml0ICh0eXBlKTsKK30KKworLy8g SW5pdGlhbGl6ZSBvYmplY3Qgc28gaXQgaXMgcG9zc2libGUgdG8gc3RvcmUgdGVtcG9yYXJpZXMg b2YgVFlQRQorLy8gaW50byBpdC4KKworaW5saW5lIHZvaWQKK1ZhbHVlX1JhbmdlOjppbml0ICh0 cmVlIHR5cGUpCit7CisgIGdjY19jaGVja2luZ19hc3NlcnQgKFRZUEVfUCAodHlwZSkpOworCisg IGlmIChpcmFuZ2U6OnN1cHBvcnRzX3R5cGVfcCAodHlwZSkpCisgICAgbV92cmFuZ2UgPSAmbV9p cmFuZ2U7CisgIGVsc2UKKyAgICBtX3ZyYW5nZSA9ICZtX3Vuc3VwcG9ydGVkOworfQorCisvLyBT ZXQgdGhlIHRlbXBvcmFyeSB0byBhbGxvdyBzdG9yaW5nIHRlbXBvcmFyaWVzIG9mIFRZUEUuICBU aGUgcmFuZ2UKKy8vIG9mIHRoZSB0ZW1wb3JhcnkgaXMgc2V0IHRvIFVOREVGSU5FRC4KKworaW5s aW5lIHZvaWQKK1ZhbHVlX1JhbmdlOjpzZXRfdHlwZSAodHJlZSB0eXBlKQoreworICBpbml0ICh0 eXBlKTsKKyAgbV92cmFuZ2UtPnNldF91bmRlZmluZWQgKCk7Cit9CisKKy8vIEFzc2lnbm1lbnQg b3BlcmF0b3IgZm9yIHRlbXBvcmFyaWVzLiAgQ29weWluZyBpbmNvbXBhdGlibGUgdHlwZXMgaXMK Ky8vIGFsbG93ZWQuCisKK2lubGluZSB2cmFuZ2UgJgorVmFsdWVfUmFuZ2U6Om9wZXJhdG9yPSAo Y29uc3QgdnJhbmdlICZyKQoreworICBpZiAoaXNfYSA8aXJhbmdlPiAocikpCisgICAgeworICAg ICAgbV9pcmFuZ2UgPSBhc19hIDxpcmFuZ2U+IChyKTsKKyAgICAgIG1fdnJhbmdlID0gJm1faXJh bmdlOworICAgIH0KKyAgZWxzZQorICAgIGdjY191bnJlYWNoYWJsZSAoKTsKKworICByZXR1cm4g Km1fdnJhbmdlOworfQorCitpbmxpbmUgYm9vbAorVmFsdWVfUmFuZ2U6Om9wZXJhdG9yPT0gKGNv bnN0IFZhbHVlX1JhbmdlICZyKSBjb25zdAoreworICByZXR1cm4gKm1fdnJhbmdlID09ICpyLm1f dnJhbmdlOworfQorCitpbmxpbmUgYm9vbAorVmFsdWVfUmFuZ2U6Om9wZXJhdG9yIT0gKGNvbnN0 IFZhbHVlX1JhbmdlICZyKSBjb25zdAoreworICByZXR1cm4gKm1fdnJhbmdlICE9ICpyLm1fdnJh bmdlOworfQorCitpbmxpbmUKK1ZhbHVlX1JhbmdlOjpvcGVyYXRvciB2cmFuZ2UgJigpCit7Cisg IHJldHVybiAqbV92cmFuZ2U7Cit9CisKK2lubGluZQorVmFsdWVfUmFuZ2U6Om9wZXJhdG9yIGNv bnN0IHZyYW5nZSAmKCkgY29uc3QKK3sKKyAgcmV0dXJuICptX3ZyYW5nZTsKK30KKwogLy8gUmV0 dXJucyB0cnVlIGZvciBhbiBvbGQtc2Nob29sIHZhbHVlX3JhbmdlIGFzIGRlc2NyaWJlZCBhYm92 ZS4KIGlubGluZSBib29sCiBpcmFuZ2U6OmxlZ2FjeV9tb2RlX3AgKCkgY29uc3QKQEAgLTQ1MSw5 ICs1ODIsNyBAQCBpcmFuZ2U6Om5vbnplcm9fcCAoKSBjb25zdAogaW5saW5lIGJvb2wKIGlyYW5n ZTo6c3VwcG9ydHNfdHlwZV9wICh0cmVlIHR5cGUpCiB7Ci0gIGlmICh0eXBlICYmIChJTlRFR1JB TF9UWVBFX1AgKHR5cGUpIHx8IFBPSU5URVJfVFlQRV9QICh0eXBlKSkpCi0gICAgcmV0dXJuIHR5 cGU7Ci0gIHJldHVybiBmYWxzZTsKKyAgcmV0dXJuIElOVEVHUkFMX1RZUEVfUCAodHlwZSkgfHwg UE9JTlRFUl9UWVBFX1AgKHR5cGUpOwogfQogCiBpbmxpbmUgYm9vbAotLSAKMi4zNi4xCgo= --00000000000050339b05e05f226f--