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 23DC6388883F for ; Thu, 20 Jun 2024 08:09:06 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.2 sourceware.org 23DC6388883F Authentication-Results: sourceware.org; dmarc=pass (p=none dis=none) header.from=redhat.com Authentication-Results: sourceware.org; spf=pass smtp.mailfrom=redhat.com ARC-Filter: OpenARC Filter v1.0.0 sourceware.org 23DC6388883F Authentication-Results: server2.sourceware.org; arc=none smtp.remote-ip=170.10.129.124 ARC-Seal: i=1; a=rsa-sha256; d=sourceware.org; s=key; t=1718870948; cv=none; b=OZGO3FtneWExC4QWNCKSldFvFYuojaMVTDe/PFr/1cRyHCoVD7GBDU6ZQreBEJpXD7iCvd+ILU5H7E2qhtEn8ii7g8oNVRbK5rape5Eq/92It4AGIChFv9aN3GiYN7iIRbhdO4qpVAdHFumJx6r3IuXbto33luwkeRx7R0gL8NY= ARC-Message-Signature: i=1; a=rsa-sha256; d=sourceware.org; s=key; t=1718870948; c=relaxed/simple; bh=glpup9uIz5FGhbJb9livtPbOx0EphZaCUkyZS1Huq34=; h=DKIM-Signature:MIME-Version:From:Date:Message-ID:Subject:To; b=m6uhIwGJCzPMibotn7iVsdbRYiW0pXKJREI+rNrq14vEucgpzLYlBVeNLYTvSUUgQmKReXUYMqEVwE1a0PXgjOrqTYcIRhsKo2CQMbRuffJM6e8+0lTUJLPZfHEVCM9sNkId6xNEu+fSA/dci5AvXxP2Chv/LlB57jkdGJbYgdU= ARC-Authentication-Results: i=1; server2.sourceware.org DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1718870945; 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: in-reply-to:in-reply-to:references:references; bh=4AYHEGmZTMzwiuQLeRvDafidwm0frXs+w1oTCrHAaOM=; b=OzwMwcflNENFvqYmDNujMRuKWSOlxIpCSLuBc2PSBR1D2ryRWMFn1d8qh2AlOsjSN1eCSD udFJIR6rbeMXSeAqIjARm/Ee9bVnuaw9cfFttw9Ig2MHgxnMKoyOfsgKlP6p6XNfj9AGMm G28BCBRy95h3RWQwbaTBJeKx5DH+lUM= Received: from mail-ej1-f71.google.com (mail-ej1-f71.google.com [209.85.218.71]) by relay.mimecast.com with ESMTP with STARTTLS (version=TLSv1.3, cipher=TLS_AES_256_GCM_SHA384) id us-mta-169-D8tUrV6lM5ybMZlFSLxn6A-1; Thu, 20 Jun 2024 04:09:03 -0400 X-MC-Unique: D8tUrV6lM5ybMZlFSLxn6A-1 Received: by mail-ej1-f71.google.com with SMTP id a640c23a62f3a-a6ec06ed579so27485366b.2 for ; Thu, 20 Jun 2024 01:09:03 -0700 (PDT) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1718870942; x=1719475742; h=cc:to:subject:message-id:date:from:in-reply-to:references :mime-version:x-gm-message-state:from:to:cc:subject:date:message-id :reply-to; bh=4AYHEGmZTMzwiuQLeRvDafidwm0frXs+w1oTCrHAaOM=; b=hG8z6/JvsIhtyCU0ofwsS1on2fG+dAcCrt6k/YcV6LF/bN9wWrcgGq5Hi4tKFuuvsz a3C45pPEiG+JTZMtvPTKTWs/67qahiiE3CDl5wbqDgF8xUdnPmkVwBiHqxCZvmd+Q0dh vfyBcTMoNqyJpU7ba2tQFJY9wgMpwgbJ9zjSAZdkajqSmnHxa8uqH/EY72+l99PfLSJt WpJisVD3moL2vUbnN5k1RcGW97Qj0/frim5oLy9A2idv0ZOZdrB371YwSdmCb0tZ050r BqNGTiq/4M8ssukPh/dIYdh7hr6k0AZ3voTXW3EEa1edbDqRn8zMV19V6YatbdBkA7hc 5Uyg== X-Forwarded-Encrypted: i=1; AJvYcCUTHejwPEiDQ7jbJ/99n+VDhYqmWtb5Gg/fc64nP8bqKYvgYqXNmGlff45CGBNNPvxth+E++OmKEL1b/UeAyJeipl/e0c5AWw== X-Gm-Message-State: AOJu0YxeDsdP3zhutwrZkxSsdmAH5QQKwjdvPK7914o1rhMyJetGky1N 0ygbfp9EFmJkRpsSGlGuCAQQgL379YFaNxWOKKMrv0CPpv4e9UUyeB4n0uBcBJJE52rPelDNkqt 2a0P+WYx140LhJ3Mk+GHBLnhsApdVfO17XUrb/1ZQkjvzX1oW22pBSkEu3kIjV75jdP+KXeVmYq phtBPB9t3RjV66IRxj77uIK6sI8cJNXQ== X-Received: by 2002:a17:907:770b:b0:a6f:7591:9222 with SMTP id a640c23a62f3a-a6fab77b448mr292326466b.47.1718870942534; Thu, 20 Jun 2024 01:09:02 -0700 (PDT) X-Google-Smtp-Source: AGHT+IEWLay0XXvYdUnXGEXfETCzR/LDf3sRfvkQmZdtrdM1+TiodBpAoKE9JXjAaMQAJBa/zUf45PtSjfz6JXt+984= X-Received: by 2002:a17:907:770b:b0:a6f:7591:9222 with SMTP id a640c23a62f3a-a6fab77b448mr292325166b.47.1718870942147; Thu, 20 Jun 2024 01:09:02 -0700 (PDT) MIME-Version: 1.0 References: <9D389AA5-F8D0-41E6-983F-B42E77AD2DC8@gmail.com> In-Reply-To: <9D389AA5-F8D0-41E6-983F-B42E77AD2DC8@gmail.com> From: Aldy Hernandez Date: Thu, 20 Jun 2024 10:08:50 +0200 Message-ID: Subject: Re: [PATCH] middle-end/114604 - ranger allocates bitmap without initialized obstack To: Richard Biener Cc: Richard Biener , Jakub Jelinek , gcc-patches@gcc.gnu.org, amacleod@redhat.com X-Mimecast-Spam-Score: 0 X-Mimecast-Originator: redhat.com Content-Type: multipart/mixed; boundary="000000000000ec1551061b4dd300" X-Spam-Status: No, score=-11.3 required=5.0 tests=BAYES_00,DKIMWL_WL_HIGH,DKIM_SIGNED,DKIM_VALID,DKIM_VALID_AU,DKIM_VALID_EF,GIT_PATCH_0,KAM_ASCII_DIVIDERS,RCVD_IN_DNSWL_NONE,RCVD_IN_MSPIKE_H4,RCVD_IN_MSPIKE_WL,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: --000000000000ec1551061b4dd300 Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: quoted-printable Hi. I came around to this, and whipped up the proposed patch. However, it does seem a bit verbose, and I'm wondering if it's cleaner to just leave things as they are. The attached patch passes tests and there's no difference in performance. I am wondering, whether it's better to get rid of all/most of the local obstacks we use in ranger, and just use the global (NULL) one? Thoughts? Aldy On Mon, Apr 8, 2024 at 7:47=E2=80=AFPM Richard Biener wrote: > > > > > Am 08.04.2024 um 18:40 schrieb Aldy Hernandez : > > > > =EF=BB=BFOn Mon, Apr 8, 2024 at 6:29=E2=80=AFPM Richard Biener wrote: > >> > >> > >> > >>>> Am 08.04.2024 um 18:09 schrieb Aldy Hernandez : > >>> > >>> =EF=BB=BFOn Mon, Apr 8, 2024 at 5:54=E2=80=AFPM Jakub Jelinek wrote: > >>>> > >>>> On Mon, Apr 08, 2024 at 05:40:23PM +0200, Aldy Hernandez wrote: > >>>>>> PR middle-end/114604 > >>>>>> * gimple-range.cc (enable_ranger): Initialize the global > >>>>>> bitmap obstack. > >>>>>> (disable_ranger): Release it. > >>>>>> --- > >>>>>> gcc/gimple-range.cc | 4 ++++ > >>>>>> 1 file changed, 4 insertions(+) > >>>>>> > >>>>>> diff --git a/gcc/gimple-range.cc b/gcc/gimple-range.cc > >>>>>> index c16b776c1e3..4d3b1ce8588 100644 > >>>>>> --- a/gcc/gimple-range.cc > >>>>>> +++ b/gcc/gimple-range.cc > >>>>>> @@ -689,6 +689,8 @@ enable_ranger (struct function *fun, bool use_= imm_uses) > >>>>>> { > >>>>>> gimple_ranger *r; > >>>>>> > >>>>>> + bitmap_obstack_initialize (NULL); > >>>>>> + > >>>>>> gcc_checking_assert (!fun->x_range_query); > >>>>>> r =3D new gimple_ranger (use_imm_uses); > >>>>>> fun->x_range_query =3D r; > >>>>>> @@ -705,6 +707,8 @@ disable_ranger (struct function *fun) > >>>>>> gcc_checking_assert (fun->x_range_query); > >>>>>> delete fun->x_range_query; > >>>>>> fun->x_range_query =3D NULL; > >>>>>> + > >>>>>> + bitmap_obstack_release (NULL); > >>>>> > >>>>> Are you not allowed to initialize/use obstacks unless > >>>>> bitmap_obstack_initialize(NULL) is called? > >>>> > >>>> You can use it with some other obstack, just not the default one. > >>>> > >>>>> If so, wouldn't it be > >>>>> better to lazily initialize it downstream (bitmap_alloc, or whomeve= r > >>>>> needs it initialized)? > >>>> > >>>> No, you still need to decide where is the safe point to release it. > >>>> Unlike the non-default bitmap_obstack_initialize/bitmap_obstack_rele= ase, > >>>> the default one can nest (has associated nesting counter). So, the = above > >>>> patch just says that ranger starts using the default obstack in > >>>> enable_ranger and stops using it in disable_ranger and anything rang= er > >>>> associated in the obstack can be freed at that point. > >>> > >>> I thought ranger never used the default one: > >>> > >>> $ grep bitmap_obstack_initialize *value* *range* > >>> value-relation.cc: bitmap_obstack_initialize (&m_bitmaps); > >>> value-relation.cc: bitmap_obstack_initialize (&m_bitmaps); > >>> gimple-range-cache.cc: bitmap_obstack_initialize (&m_bitmaps); > >>> gimple-range-gori.cc: bitmap_obstack_initialize (&m_bitmaps); > >>> gimple-range-infer.cc: bitmap_obstack_initialize (&m_bitmaps); > >>> gimple-range-phi.cc: bitmap_obstack_initialize (&m_bitmaps); > >>> > >>> or even: > >>> > >>> $ grep obstack.*NULL *value* *range* > >>> value-range-storage.cc: obstack_free (&m_obstack, NULL); > >>> value-relation.cc: obstack_free (&m_chain_obstack, NULL); > >>> value-relation.cc: obstack_free (&m_chain_obstack, NULL); > >>> gimple-range-infer.cc: obstack_free (&m_list_obstack, NULL); > >>> value-range-storage.cc: obstack_free (&m_obstack, NULL); > >>> > >>> I'm obviously missing something here. > >> > >> Look for BITMAP_ALLOC (NULL) in the backtrace in the PR > > > > Ahh! Thanks. > > > > A few default obstack uses snuck in while I wasn't looking. > > > > $ grep BITMAP_ALLOC.*NULL *range* > > gimple-range-cache.cc: m_propfail =3D BITMAP_ALLOC (NULL); > > gimple-range-cache.h: inline ssa_lazy_cache () { active_p =3D > > BITMAP_ALLOC (NULL); } > > gimple-range.cc: m_pop_list =3D BITMAP_ALLOC (NULL); > > > > I wonder if it would be cleaner to just change these to use named obsta= cks. > > I didn=E2=80=99t find any obvious obstack to use, but sure. This was the= easiest fix ;) > > Richard > > > Andrew, is there a reason we were using the default obstack for these? > > For reference, they are class update_list used in the ranger cache, > > ssa_lazy_cache, and dom_ranger. > > > > Aldy > > > --000000000000ec1551061b4dd300 Content-Type: text/x-patch; charset="US-ASCII"; name="0001-Avoid-global-bitmap-space-in-ranger.patch" Content-Disposition: attachment; filename="0001-Avoid-global-bitmap-space-in-ranger.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_lxmzaet40 RnJvbSBhYWQ5OTg0OWE4Y2ViNDFjYzhiOGU4MTEwNGI4NTczNmFjMDRhNjVhIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBBbGR5IEhlcm5hbmRleiA8YWxkeWhAcmVkaGF0LmNvbT4KRGF0 ZTogV2VkLCAxOSBKdW4gMjAyNCAxMTo0MjoxNiArMDIwMApTdWJqZWN0OiBbUEFUQ0hdIEF2b2lk IGdsb2JhbCBiaXRtYXAgc3BhY2UgaW4gcmFuZ2VyLgoKLS0tCiBnY2MvZ2ltcGxlLXJhbmdlLWNh Y2hlLmNjIHwgNiArKysrLS0KIGdjYy9naW1wbGUtcmFuZ2UtY2FjaGUuaCAgfCA5ICsrKysrKyst LQogZ2NjL2dpbXBsZS1yYW5nZS5jYyAgICAgICB8IDkgKysrLS0tLS0tCiBnY2MvZ2ltcGxlLXJh bmdlLmggICAgICAgIHwgMSArCiA0IGZpbGVzIGNoYW5nZWQsIDE1IGluc2VydGlvbnMoKyksIDEw IGRlbGV0aW9ucygtKQoKZGlmZiAtLWdpdCBhL2djYy9naW1wbGUtcmFuZ2UtY2FjaGUuY2MgYi9n Y2MvZ2ltcGxlLXJhbmdlLWNhY2hlLmNjCmluZGV4IGQ4NGZkMWNhMGU4Li42OTc5YTE0Y2JhYSAx MDA2NDQKLS0tIGEvZ2NjL2dpbXBsZS1yYW5nZS1jYWNoZS5jYworKysgYi9nY2MvZ2ltcGxlLXJh bmdlLWNhY2hlLmNjCkBAIC05MDYsNiArOTA2LDcgQEAgcHJpdmF0ZToKICAgdmVjPGludD4gbV91 cGRhdGVfbGlzdDsKICAgaW50IG1fdXBkYXRlX2hlYWQ7CiAgIGJpdG1hcCBtX3Byb3BmYWlsOwor ICBiaXRtYXBfb2JzdGFjayBtX2JpdG1hcHM7CiB9OwogCiAvLyBDcmVhdGUgYW4gdXBkYXRlIGxp c3QuCkBAIC05MTUsNyArOTE2LDggQEAgdXBkYXRlX2xpc3Q6OnVwZGF0ZV9saXN0ICgpCiAgIG1f dXBkYXRlX2xpc3QuY3JlYXRlICgwKTsKICAgbV91cGRhdGVfbGlzdC5zYWZlX2dyb3dfY2xlYXJl ZCAobGFzdF9iYXNpY19ibG9ja19mb3JfZm4gKGNmdW4pICsgNjQpOwogICBtX3VwZGF0ZV9oZWFk ID0gLTE7Ci0gIG1fcHJvcGZhaWwgPSBCSVRNQVBfQUxMT0MgKE5VTEwpOworICBiaXRtYXBfb2Jz dGFja19pbml0aWFsaXplICgmbV9iaXRtYXBzKTsKKyAgbV9wcm9wZmFpbCA9IEJJVE1BUF9BTExP QyAoJm1fYml0bWFwcyk7CiB9CiAKIC8vIERlc3Ryb3kgYW4gdXBkYXRlIGxpc3QuCkBAIC05MjMs NyArOTI1LDcgQEAgdXBkYXRlX2xpc3Q6OnVwZGF0ZV9saXN0ICgpCiB1cGRhdGVfbGlzdDo6fnVw ZGF0ZV9saXN0ICgpCiB7CiAgIG1fdXBkYXRlX2xpc3QucmVsZWFzZSAoKTsKLSAgQklUTUFQX0ZS RUUgKG1fcHJvcGZhaWwpOworICBiaXRtYXBfb2JzdGFja19yZWxlYXNlICgmbV9iaXRtYXBzKTsK IH0KIAogLy8gQWRkIEJCIHRvIHRoZSBsaXN0IG9mIGJsb2NrcyB0byB1cGRhdGUsIHVubGVzcyBp dCdzIGFscmVhZHkgaW4gdGhlIGxpc3QuCmRpZmYgLS1naXQgYS9nY2MvZ2ltcGxlLXJhbmdlLWNh Y2hlLmggYi9nY2MvZ2ltcGxlLXJhbmdlLWNhY2hlLmgKaW5kZXggNjM0MTBkNTQzN2UuLjBlYTM0 ZDNmNjg2IDEwMDY0NAotLS0gYS9nY2MvZ2ltcGxlLXJhbmdlLWNhY2hlLmgKKysrIGIvZ2NjL2dp bXBsZS1yYW5nZS1jYWNoZS5oCkBAIC03OCw4ICs3OCwxMiBAQCBwcm90ZWN0ZWQ6CiBjbGFzcyBz c2FfbGF6eV9jYWNoZSA6IHB1YmxpYyBzc2FfY2FjaGUKIHsKIHB1YmxpYzoKLSAgaW5saW5lIHNz YV9sYXp5X2NhY2hlICgpIHsgYWN0aXZlX3AgPSBCSVRNQVBfQUxMT0MgKE5VTEwpOyB9Ci0gIGlu bGluZSB+c3NhX2xhenlfY2FjaGUgKCkgeyBCSVRNQVBfRlJFRSAoYWN0aXZlX3ApOyB9CisgIGlu bGluZSBzc2FfbGF6eV9jYWNoZSAoKQorICB7CisgICAgYml0bWFwX29ic3RhY2tfaW5pdGlhbGl6 ZSAoJm1fYml0bWFwcyk7CisgICAgYWN0aXZlX3AgPSBCSVRNQVBfQUxMT0MgKCZtX2JpdG1hcHMp OworICB9CisgIGlubGluZSB+c3NhX2xhenlfY2FjaGUgKCkgeyBiaXRtYXBfb2JzdGFja19yZWxl YXNlICgmbV9iaXRtYXBzKTsgfQogICBpbmxpbmUgYm9vbCBlbXB0eV9wICgpIGNvbnN0IHsgcmV0 dXJuIGJpdG1hcF9lbXB0eV9wIChhY3RpdmVfcCk7IH0KICAgdmlydHVhbCBib29sIGhhc19yYW5n ZSAodHJlZSBuYW1lKSBjb25zdDsKICAgdmlydHVhbCBib29sIHNldF9yYW5nZSAodHJlZSBuYW1l LCBjb25zdCB2cmFuZ2UgJnIpOwpAQCAtODksNiArOTMsNyBAQCBwdWJsaWM6CiAgIHZpcnR1YWwg dm9pZCBjbGVhciAoKTsKICAgdm9pZCBtZXJnZSAoY29uc3Qgc3NhX2xhenlfY2FjaGUgJik7CiBw cm90ZWN0ZWQ6CisgIGJpdG1hcF9vYnN0YWNrIG1fYml0bWFwczsKICAgYml0bWFwIGFjdGl2ZV9w OwogfTsKIApkaWZmIC0tZ2l0IGEvZ2NjL2dpbXBsZS1yYW5nZS5jYyBiL2djYy9naW1wbGUtcmFu Z2UuY2MKaW5kZXggZjNlNGVjMmQyNDkuLjFjMzVmNWE0ZTk1IDEwMDY0NAotLS0gYS9nY2MvZ2lt cGxlLXJhbmdlLmNjCisrKyBiL2djYy9naW1wbGUtcmFuZ2UuY2MKQEAgLTcwMSw4ICs3MDEsNiBA QCBlbmFibGVfcmFuZ2VyIChzdHJ1Y3QgZnVuY3Rpb24gKmZ1biwgYm9vbCB1c2VfaW1tX3VzZXMp CiB7CiAgIGdpbXBsZV9yYW5nZXIgKnI7CiAKLSAgYml0bWFwX29ic3RhY2tfaW5pdGlhbGl6ZSAo TlVMTCk7Ci0KICAgZ2NjX2NoZWNraW5nX2Fzc2VydCAoIWZ1bi0+eF9yYW5nZV9xdWVyeSk7CiAg IHIgPSBuZXcgZ2ltcGxlX3JhbmdlciAodXNlX2ltbV91c2VzKTsKICAgZnVuLT54X3JhbmdlX3F1 ZXJ5ID0gcjsKQEAgLTcxOSw4ICs3MTcsNiBAQCBkaXNhYmxlX3JhbmdlciAoc3RydWN0IGZ1bmN0 aW9uICpmdW4pCiAgIGdjY19jaGVja2luZ19hc3NlcnQgKGZ1bi0+eF9yYW5nZV9xdWVyeSk7CiAg IGRlbGV0ZSBmdW4tPnhfcmFuZ2VfcXVlcnk7CiAgIGZ1bi0+eF9yYW5nZV9xdWVyeSA9IE5VTEw7 Ci0KLSAgYml0bWFwX29ic3RhY2tfcmVsZWFzZSAoTlVMTCk7CiB9CiAKIC8vIC0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLQpAQCAtOTMwLDcgKzkyNiw4IEBAIGRvbV9yYW5nZXI6OmRvbV9yYW5nZXIgKCkgOiBtX2ds b2JhbCAoKQogICBtX2UwLnNhZmVfZ3Jvd19jbGVhcmVkIChsYXN0X2Jhc2ljX2Jsb2NrX2Zvcl9m biAoY2Z1bikpOwogICBtX2UxLmNyZWF0ZSAoMCk7CiAgIG1fZTEuc2FmZV9ncm93X2NsZWFyZWQg KGxhc3RfYmFzaWNfYmxvY2tfZm9yX2ZuIChjZnVuKSk7Ci0gIG1fcG9wX2xpc3QgPSBCSVRNQVBf QUxMT0MgKE5VTEwpOworICBiaXRtYXBfb2JzdGFja19pbml0aWFsaXplICgmbV9iaXRtYXBzKTsK KyAgbV9wb3BfbGlzdCA9IEJJVE1BUF9BTExPQyAoJm1fYml0bWFwcyk7CiAgIGlmIChkdW1wX2Zp bGUgJiYgKHBhcmFtX3Jhbmdlcl9kZWJ1ZyAmIFJBTkdFUl9ERUJVR19UUkFDRSkpCiAgICAgdHJh Y2VyLmVuYWJsZV90cmFjZSAoKTsKIH0KQEAgLTk0NSw3ICs5NDIsNyBAQCBkb21fcmFuZ2VyOjp+ ZG9tX3JhbmdlciAoKQogICAgICAgZnByaW50ZiAoZHVtcF9maWxlLCAiPT09PT09PT09PT09PT09 PT09PT09PT09PTpcbiIpOwogICAgICAgbV9nbG9iYWwuZHVtcCAoZHVtcF9maWxlKTsKICAgICB9 Ci0gIEJJVE1BUF9GUkVFIChtX3BvcF9saXN0KTsKKyAgYml0bWFwX29ic3RhY2tfcmVsZWFzZSAo Jm1fYml0bWFwcyk7CiAgIG1fZTEucmVsZWFzZSAoKTsKICAgbV9lMC5yZWxlYXNlICgpOwogICBt X2ZyZWVsaXN0LnJlbGVhc2UgKCk7CmRpZmYgLS1naXQgYS9nY2MvZ2ltcGxlLXJhbmdlLmggYi9n Y2MvZ2ltcGxlLXJhbmdlLmgKaW5kZXggMTgwMDkwYmVkMTUuLjI2NDQxM2VlNDU4IDEwMDY0NAot LS0gYS9nY2MvZ2ltcGxlLXJhbmdlLmgKKysrIGIvZ2NjL2dpbXBsZS1yYW5nZS5oCkBAIC0xMjQs NiArMTI0LDcgQEAgcHJvdGVjdGVkOgogICB2ZWM8c3NhX2xhenlfY2FjaGUgKj4gbV9mcmVlbGlz dDsKICAgdmVjPHNzYV9sYXp5X2NhY2hlICo+IG1fZTA7CiAgIHZlYzxzc2FfbGF6eV9jYWNoZSAq PiBtX2UxOworICBiaXRtYXBfb2JzdGFjayBtX2JpdG1hcHM7CiAgIGJpdG1hcCBtX3BvcF9saXN0 OwogICByYW5nZV90cmFjZXIgdHJhY2VyOwogfTsKLS0gCjIuNDUuMAoK --000000000000ec1551061b4dd300--