From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mp10.migadu.com ([2001:41d0:403:58f0::]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits)) by ms8.migadu.com with LMTPS id GN5XBxxyUmUK4gAAG6o9tA:P1 (envelope-from ) for ; Mon, 13 Nov 2023 19:59:40 +0100 Received: from aspmx1.migadu.com ([2001:41d0:403:58f0::]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits)) by mp10.migadu.com with LMTPS id GN5XBxxyUmUK4gAAG6o9tA (envelope-from ) for ; Mon, 13 Nov 2023 19:59:40 +0100 Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by aspmx1.migadu.com (Postfix) with ESMTPS id 996C417493 for ; Mon, 13 Nov 2023 19:59:39 +0100 (CET) Authentication-Results: aspmx1.migadu.com; dkim=fail ("body hash did not verify") header.d=deeplinks-com.20230601.gappssmtp.com header.s=20230601 header.b=vxXZoREo; dmarc=none; spf=pass (aspmx1.migadu.com: domain of "guix-patches-bounces+larch=yhetil.org@gnu.org" designates 209.51.188.17 as permitted sender) smtp.mailfrom="guix-patches-bounces+larch=yhetil.org@gnu.org" ARC-Seal: i=1; s=key1; d=yhetil.org; t=1699901979; a=rsa-sha256; cv=none; b=uEcq22JwVF1bNmM4ssyhWDXGQAkPRASeHZ9yRYs0RSrFlO24VkndaopikJn4x8W9mNL6fF 9y+ygtxoCnccZ3ct/B18yUmaEytwjccixF+NvvMIN152nAjdudPDNwQPaFYFDnf1iYzKhD Q/0eX9CFFcopsm0HDrHawSeQSYOm5K7UfhHjj4NCPZo8NkK6rWBQja7j9WzAb23POangVZ bmDonaWBVx9BaftZG6wb7x/OUq9aMjKilGIVQqcyZ8HE9SclBeYBJZ/kRGEupIrVcXku6c 7qNfkyJqiPst/Cd30OtV1pk8ykavlNwBKX49cG2gjElrH3gBDhIDn5Aj7sj+8g== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=yhetil.org; s=key1; t=1699901979; h=from:from:sender:sender:reply-to:subject:subject:date:date: message-id:message-id:to:to:cc:cc:mime-version:mime-version: content-type:content-type:resent-cc:resent-from:resent-sender: resent-message-id:in-reply-to:in-reply-to:references:references: list-id:list-help:list-unsubscribe:list-subscribe:list-post: dkim-signature; bh=K0TCqRMORqUvAYZJkzdzbNuWvzu4prZa2mQPXDbu26o=; b=BLFxoae3e5FzUXK4Vw0cbn2j/gJNWRrXclCITjwM+VWdsa4lZoFUJ9folk/cVKsGdMgIeG gGJ24iE+hiFIuO8c/R/D842OskAEX3VW3ZkTf7mBSTTLAGzxojPlFWzWekiJQBjaMZX5fW qZr6bZOT5+0wT/Drr1C3rPkTYe3q/SjseCKUJMOVXYhiXe7EHZMTORD2eOVBv5/gW/yubg zIRU4Mu7pk3+JdztnszCQ9KdjkOmnWJwv8d6wYTIJews4JwIl8II/XBP/xASJbIfw01azD cyW+4BeTqlGruOxBfUsYX8isL+zjKOO887dHswQlKSpKk089EgjZYmrybCNa7g== ARC-Authentication-Results: i=1; aspmx1.migadu.com; dkim=fail ("body hash did not verify") header.d=deeplinks-com.20230601.gappssmtp.com header.s=20230601 header.b=vxXZoREo; dmarc=none; spf=pass (aspmx1.migadu.com: domain of "guix-patches-bounces+larch=yhetil.org@gnu.org" designates 209.51.188.17 as permitted sender) smtp.mailfrom="guix-patches-bounces+larch=yhetil.org@gnu.org" Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1r2c9d-00023J-Mo; Mon, 13 Nov 2023 13:59:25 -0500 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1r2c9Z-00022v-Bj for guix-patches@gnu.org; Mon, 13 Nov 2023 13:59:21 -0500 Received: from debbugs.gnu.org ([2001:470:142:5::43]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1r2c9Z-0007lB-3m for guix-patches@gnu.org; Mon, 13 Nov 2023 13:59:21 -0500 Received: from Debian-debbugs by debbugs.gnu.org with local (Exim 4.84_2) (envelope-from ) id 1r2cAE-0008NP-9g for guix-patches@gnu.org; Mon, 13 Nov 2023 14:00:02 -0500 X-Loop: help-debbugs@gnu.org Subject: [bug#66801] [PATCH 1/5] guix: build-system: rebar: build Erlang packages with dependencies. Resent-From: Pierre-Henry =?UTF-8?Q?Fr=C3=B6hring?= Original-Sender: "Debbugs-submit" Resent-CC: guix-patches@gnu.org Resent-Date: Mon, 13 Nov 2023 19:00:02 +0000 Resent-Message-ID: Resent-Sender: help-debbugs@gnu.org X-GNU-PR-Message: followup 66801 X-GNU-PR-Package: guix-patches X-GNU-PR-Keywords: patch To: Liliana Marie Prikler Cc: 66801@debbugs.gnu.org Received: via spool by 66801-submit@debbugs.gnu.org id=B66801.169990198632151 (code B ref 66801); Mon, 13 Nov 2023 19:00:02 +0000 Received: (at 66801) by debbugs.gnu.org; 13 Nov 2023 18:59:46 +0000 Received: from localhost ([127.0.0.1]:59340 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1r2c9x-0008MV-KC for submit@debbugs.gnu.org; Mon, 13 Nov 2023 13:59:46 -0500 Received: from mail-yw1-x1133.google.com ([2607:f8b0:4864:20::1133]:42027) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1r2c9w-0008MJ-1i for 66801@debbugs.gnu.org; Mon, 13 Nov 2023 13:59:44 -0500 Received: by mail-yw1-x1133.google.com with SMTP id 00721157ae682-5a8628e54d4so39843787b3.0 for <66801@debbugs.gnu.org>; Mon, 13 Nov 2023 10:59:02 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=deeplinks-com.20230601.gappssmtp.com; s=20230601; t=1699901937; x=1700506737; darn=debbugs.gnu.org; h=cc:to:subject:message-id:date:from:in-reply-to:references :mime-version:from:to:cc:subject:date:message-id:reply-to; bh=bdr/8XJeo800LrlzwN0TTixKwI163iGmkJYGeJmRHDA=; b=vxXZoREoCYrqbnTLGLWPe7GAviw1kOtukx6hA63wX3qcQyp9++vE8PFrO3j/C99yFB xcBCNd5r9JD/1+vLT4j5eM2tldQDU8Sx13tTjAOzg5btt93sjNXdTJHa2BrVN190pB+D JvLTY5y5uQ83M7iIgTtorLCXSHn5UIYObXAltgI1wEfPAC5oRGyUIDKL3Bi60UkEIAp4 O4ZxMF9Nxsv+XV6KVJ3nrd09sDZoQTp//n+rxQNeKZ2DiX9f6L80XGVDy0O6f6BaIi4c /pmYxWQJFVrGS1je6OOA6R0xVKsu8JZvdr+ze5fzl0Tzfa1DOnO7+ogCihUSIYFMU3xs DR1Q== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1699901937; x=1700506737; 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=bdr/8XJeo800LrlzwN0TTixKwI163iGmkJYGeJmRHDA=; b=FH4OU0ZuaYeDcSy5qNagC/9MsnFQY3F2sSlN/2SjRPcJWC69QOT1knEmJH+87eplhB jkzX9778QZzj+8A2Ixh0AVMlQ4e2NtYbMI9fo6zEdNPS6fuRa/eQncCASftusj3n6lxd xG/Ke9E3u6llKX7d+OPWGkq7BI4TaLRGpwVxzBUiW/tgYxk92X9fBKlFjJ0l2WkMW7Cz TA87ImzlVnfgW9UwrW0OU8xdCPp4IjwBekPZlqfBi5EX+04y+m1vr5EHIGK4ujXgOpwN eBN31i4m4l5xkkK48ZaHI2g6xjGbPiruUPP0YQA/OG7lA1rmeTPJmkyE7hLFD2BIFtiJ 3a6A== X-Gm-Message-State: AOJu0YyWMamomwlcja7snuUNGyEj4AcnpOSeL7IY1iNKiJpM0DRuQzvy chLV4mWysWcOIrZHQmEb+Y87Eh+/3M+iLZelK+fmwA== X-Google-Smtp-Source: AGHT+IG3vVbDRfEb7kBRPDldz3eC0zIz8K1NIWWOI3A9ggYoacz/NPbQ4oxj7H636wwxEYZoDk3LBflChFQDk8jtCE8= X-Received: by 2002:a0d:e5c7:0:b0:5c1:179b:2833 with SMTP id o190-20020a0de5c7000000b005c1179b2833mr347175ywe.3.1699901936694; Mon, 13 Nov 2023 10:58:56 -0800 (PST) MIME-Version: 1.0 References: <18844f77e7b742e93525ee1faa48e4808bf32b01.1699434044.git.phfrohring@deeplinks.com> <196ea16d78b1f2292b0dd7f3bfae254ae83c496f.camel@gmail.com> In-Reply-To: <196ea16d78b1f2292b0dd7f3bfae254ae83c496f.camel@gmail.com> From: Pierre-Henry =?UTF-8?Q?Fr=C3=B6hring?= Date: Mon, 13 Nov 2023 19:58:45 +0100 Message-ID: Content-Type: multipart/mixed; boundary="00000000000017cc62060a0d43a1" X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.18 Precedence: list X-BeenThere: guix-patches@gnu.org List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: guix-patches-bounces+larch=yhetil.org@gnu.org Sender: guix-patches-bounces+larch=yhetil.org@gnu.org X-Migadu-Flow: FLOW_IN X-Migadu-Country: US X-Migadu-Scanner: mx11.migadu.com X-Spam-Score: -2.10 X-Migadu-Queue-Id: 996C417493 X-Migadu-Spam-Score: -2.10 X-TUID: lRGRrj+jiH66 --00000000000017cc62060a0d43a1 Content-Type: multipart/alternative; boundary="00000000000017cc5f060a0d439f" --00000000000017cc5f060a0d439f Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: quoted-printable This loses the previous erlang-depends logic, which unpackaged the already compiled packages. I really don't think we should have erlang be yet another rust that heats up the planet compiling leftpad over and over again. Can we somehow have that cake? Okay, perhaps it would have been better to start working on the Mix building system and inform you simultaneously, instead of sending patches all at once. So, let's start anew. I have taken into account all of your suggestions and have crafted this patch introducing the mix-build-system. Yes, there are ChangeLogs now. Currently, the "Machete" package is compiled and tested without repeatedly compiling leftpad =E2=80=94 i.e., considering pure Elixir packages up to transitive dependencies, it works as expected. This is new. As I'm learning how all this works, I'm not entirely sure that updating the rebar build system is absolutely necessary. I suppose we will understand more as we add an increasing number of Elixir packages, especially when incorporating Elixir packages with Erlang dependencies. So, here's what's coming up: 1. A patch that introduces the mix-build-system variable. 2. Several patches that introduce Elixir packages, up to elixir-machete, which is one of the few packages that includes tests in the tarball. I guess the next steps are as follows: 1. To determine if the approach is acceptable. Will we boil the world by compiling left-pad endlessly? 2. If the approach is deemed acceptable, the next step is to evaluate the code. Is the code riddled with delicious regexes? 3. If the first two points are verified, it might be worthwhile to continue developing this implementation until Phoenix is successfully compiled and tested as expected. For reference, I have attached a file named `mix-build-system.org'. This file contains a description of a prototype in Bash that illustrates the approach taken in this patch. Cheers. --00000000000017cc5f060a0d439f Content-Type: text/html; charset="UTF-8" Content-Transfer-Encoding: quoted-printable
=C2=A0 =C2=A0 =C2=A0 This loses the previous erlang-depend= s logic, which unpackaged the
=C2=A0 =C2=A0 =C2=A0 already compiled pack= ages.=C2=A0 I really don't think we should have erlang be
=C2=A0 =C2= =A0 =C2=A0 yet another rust that heats up the planet compiling leftpad over= and over
=C2=A0 =C2=A0 =C2=A0 again.=C2=A0 Can we somehow have that cak= e?

Okay, perhaps it would have been better to start working on the M= ix building system
and inform you simultaneously, instead of sending pat= ches all at once. So, let's
start anew.

I have taken into acc= ount all of your suggestions and have crafted this patch
introducing the= mix-build-system. Yes, there are ChangeLogs now. Currently, the
"M= achete" package is compiled and tested without repeatedly compiling le= ftpad =E2=80=94 i.e.,
considering pure Elixir packages up to transitive = dependencies, it works as
expected. This is new.

As I'm learn= ing how all this works, I'm not entirely sure that updating the rebarbuild system is absolutely necessary. I suppose we will understand more a= s we add an
increasing number of Elixir packages, especially when incorp= orating Elixir packages
with Erlang dependencies.

So, here's = what's coming up:

1. A patch that introduces the mix-build-syste= m variable.
2. Several patches that introduce Elixir packages, up to eli= xir-machete, which is one
=C2=A0 =C2=A0of the few packages that includes= tests in the tarball.

I guess the next steps are as follows:
1. To determine if the approach is acceptable. Will we boil the world by c= ompiling
=C2=A0 =C2=A0left-pad endlessly?
2. If the approach is deeme= d acceptable, the next step is to evaluate the code. Is
=C2=A0 =C2=A0the= code riddled with delicious regexes?
3. If the first two points are ver= ified, it might be worthwhile to continue
=C2=A0 =C2=A0developing this i= mplementation until Phoenix is successfully compiled and tested
=C2=A0 = =C2=A0as expected.

For reference, I have attached a file named `mix-build-system.org'.
This= file contains a description of a prototype in Bash that
illustrates the= approach taken in this patch.

Cheers.
--00000000000017cc5f060a0d439f-- --00000000000017cc62060a0d43a1 Content-Type: application/octet-stream; name="mix-build-system.org" Content-Disposition: attachment; filename="mix-build-system.org" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_lox9pl3o0 IyBiZWdpbl9wcm9wZXJ0aWVzCiMrUFJPUEVSVFk6IGhlYWRlci1hcmdzIDpub3dlYiB5ZXMKIyBl bmRfcHJvcGVydGllcwoKCiMrVElUTEU6IE1peCBidWlsZCBzeXN0ZW0KCgoqIEludHJvZHVjdGlv bgpUaGUgYWltIGlzIHRvIGludHJvZHVjZSBhIH5taXggYnVpbGQgc3lzdGVtfiwgYSBzdGFuZGFy ZGl6ZWQgbWV0aG9kIHRoYXQgZW5hYmxlcyBHdWl4CnRvIGNvbnN0cnVjdCBFbGl4aXIgcGFja2Fn ZXMuIEluaXRpYWxseSwgd2UgZXN0YWJsaXNoIGEgQmFzaCBwcm9jZWR1cmUgZm9yIGJ1aWxkaW5n CkVsaXhpciBwYWNrYWdlcy4gV2UgdGhlbiBleHBsb3JlIHRoZSBhZGFwdGF0aW9uIG9mIHRoaXMg cHJvY2VkdXJlIHRvIEd1aXguCgoKKiBBIHByb2NlZHVyZSB0byBidWlsZCBFbGl4aXIgcGFja2Fn ZXMKVGhlIGJ1aWxkIHByb2NlZHVyZSBpcyBkaXZpZGVkIGludG8gdHdvIHN0ZXBzOiB+YnVpbGRf ZGlyZWN0b3J5fiBhbmQKfmNvbXBpbGVfdGVzdF9pbnN0YWxsfi4gVGhlc2Ugc3RlcHMgdXNlIGFy Z3VtZW50cyB0aGF0IG1pcnJvciB0aGUgcHJvamVjdCBjb25maWd1cmF0aW9uCm9wdGlvbnMgb3V0 bGluZWQgaW4gW1todHRwczovL2hleGRvY3MucG0vbWl4LzEuMTQvTWl4LlByb2plY3QuaHRtbF1b TWl4LlByb2plY3RdXS4KIytiZWdpbl9zcmMgYmFzaApndWl4IHNoZWxsIC1EIC1mIGd1aXguc2Nt IC0tIGJhc2ggYnVpbGRfZGlyZWN0b3J5IFwKICAgICAtLWFyY2hpdmUgPGZpbGVuYW1lPiBcCiAg ICAgLS1idWlsZC1wZXItZW52aXJvbm1lbnQgPGJvb2xlYW4+IFwKICAgICAtLWxvZyA8Ym9vbGVh bj4gXAogICAgIC0tb3V0IDxwYXRoPiBcCiAgICAgLS1kZXBzLXBhdGggPHBhdGg+IFwKICAgICAt LXRlc3QgPGJvb2xlYW4+IFwKICAgICAtLXdvcmtkaXIgPHBhdGg+CgpndWl4IHNoZWxsIC1DIC1E IC1mIGd1aXguc2NtIC0tIGJhc2ggY29tcGlsZV90ZXN0X2luc3RhbGwgXAogICAgIC0tYXJjaGl2 ZSA8ZmlsZW5hbWU+IFwKICAgICAtLWJ1aWxkLXBlci1lbnZpcm9ubWVudCA8Ym9vbGVhbj4gXAog ICAgIC0tbG9nIDxib29sZWFuPiBcCiAgICAgLS1vdXQgPHBhdGg+IFwKICAgICAtLWRlcHMtcGF0 aCA8cGF0aD4gXAogICAgIC0tdGVzdCA8Ym9vbGVhbj4gXAogICAgIC0td29ya2RpciA8cGF0aD4K IytlbmRfc3JjCi0gfmFyY2hpdmV+IHJlZmVycyB0byB0aGUgbmFtZSBvZiB0aGUgdGFyYmFsbCB0 byBiZSByZXRyaWV2ZWQgZnJvbSBbW2h0dHBzOi8vaGV4LnBtL11dLCBmb3IgZXhhbXBsZSwgfnBo b2VuaXgtMS43LjEwLnRhcn4uCi0gfmJ1aWxkLXBlci1lbnZpcm9ubWVudH4gaXMgYSBzZXR0aW5n IGRldGFpbGVkIGluIFtbaHR0cHM6Ly9oZXhkb2NzLnBtL21peC8xLjE0L01peC5Qcm9qZWN0Lmh0 bWxdW01peC5Qcm9qZWN0XV0uCi0gfmxvZ34gaW5kaWNhdGVzIHdoZXRoZXIgdGhlIGV4ZWN1dGlv biBzaG91bGQgYmUgbG9nZ2VkLgotIH50ZXN0fiBkZXRlcm1pbmVzIHdoZXRoZXIgdG8gcnVuIHRl c3RzLgotIH5vdXR+IHNwZWNpZmllcyB0aGUgZGlyZWN0b3J5IHBhdGggd2hlcmUgdGhlIHBhY2th Z2Ugd2lsbCBiZSBpbnN0YWxsZWQuCi0gfmRlcHN+IGlzIGEgY29uZmlndXJhdGlvbiBvcHRpb24g ZXhwbGFpbmVkIGluIFtbaHR0cHM6Ly9oZXhkb2NzLnBtL21peC8xLjE0L01peC5Qcm9qZWN0Lmh0 bWxdW01peC5Qcm9qZWN0XV0uCi0gfndvcmtkaXJ+IGlzIGVpdGhlciB0aGUgYWJzb2x1dGUgb3Ig cmVsYXRpdmUgcGF0aCB0byB0aGUgY3VycmVudCBkaXJlY3Rvcnkgd2hlcmUgdGhlIGJ1aWxkIHBy b2Nlc3Mgd2lsbCB0YWtlIHBsYWNlLgoKCioqIEVudmlyb25tZW50CjpQUk9QRVJUSUVTOgo6SUQ6 ICAgICAgIDVmNTVlZDJkLTYzMDEtNDYwYi1iYzc4LWM0MTAwZTk1ZTI3NAo6RU5EOgoKRXhjZXB0 IGZvciB+dHJlZX4sIGFsbCBuYXRpdmUgaW5wdXRzIGFyZSBuZWNlc3NhcnkgdG8gZXhlY3V0ZSB0 aGUgYnVpbGQKcHJvY2VkdXJlLiBUaGVzZSBpbnB1dHMgYXJlIGxpc3RlZCBpbiB0aGUgfm5hdGl2 ZS1pbnB1dHN+IHByb3BlcnR5IG9mIHRoZSBwYWNrYWdlIGluCn5ndWl4LnNjbX4uCiMrY2FwdGlv bjogZ3VpeC5zY20KIytiZWdpbl9zcmMgc2NoZW1lIDp0YW5nbGUgZ3VpeC5zY20KKHVzZS1tb2R1 bGVzIChndWl4IGJ1aWxkLXN5c3RlbSBnbnUpCiAgICAgICAgICAgICAoZ251IHBhY2thZ2VzKQog ICAgICAgICAgICAgKGd1aXggcGFja2FnZXMpCiAgICAgICAgICAgICAoZ251IHBhY2thZ2VzIGJh c2UpCiAgICAgICAgICAgICAoZ251IHBhY2thZ2VzIGVsaXhpcikKICAgICAgICAgICAgIChnbnUg cGFja2FnZXMgZXJsYW5nKQogICAgICAgICAgICAgKGdudSBwYWNrYWdlcyBhZG1pbikpCgooZGVm aW5lIGdsaWJjLXV0ZjgtbG9jYWxlcwogIChtYWtlLWdsaWJjLXV0ZjgtbG9jYWxlcyBnbGliYwog ICAgICAgICAgICAgICAgICAgICAgICAgICAjOmxvY2FsZXMgKGxpc3QgImVuX1VTIikKICAgICAg ICAgICAgICAgICAgICAgICAgICAgIzpuYW1lICJnbGliYy11dGY4LWxvY2FsZXMiKSkKCihwYWNr YWdlCiAgKG5hbWUgIiIpCiAgKHZlcnNpb24gIiIpCiAgKHNvdXJjZSAjZikKICAoYnVpbGQtc3lz dGVtIGdudS1idWlsZC1zeXN0ZW0pCiAgKG5hdGl2ZS1pbnB1dHMgKGxpc3QKICAgICAgICAgICAg ICAgICAgZ2xpYmMtdXRmOC1sb2NhbGVzCiAgICAgICAgICAgICAgICAgIGNvcmV1dGlscwogICAg ICAgICAgICAgICAgICB3aGljaAogICAgICAgICAgICAgICAgICBlbGl4aXIKICAgICAgICAgICAg ICAgICAgZXJsYW5nCiAgICAgICAgICAgICAgICAgIHJlYmFyMwogICAgICAgICAgICAgICAgICB0 cmVlCiAgICAgICAgICAgICAgICAgICkpCiAgKHN5bm9wc2lzICIiKQogIChkZXNjcmlwdGlvbiAi IikKICAoaG9tZS1wYWdlICIiKQogIChsaWNlbnNlICNmKSkKIytlbmRfc3JjCgoqKiBUaGUgfmJ1 aWxkX2RpcmVjdG9yeX4gU3RlcApUaGUgfmJ1aWxkX2RpcmVjdG9yeX4gc3RlcCBpbnZvbHZlcyB1 c2luZyB0aGUgbmV0d29yayB0byBmZXRjaCBhbnkgZXh0ZXJuYWwgZGF0YQpyZXF1aXJlZCBmb3Ig Y29tcGlsaW5nIGFuZCB0ZXN0aW5nIHRoZSBwYWNrYWdlLiBFYWNoIHN0ZXAgb2YgdGhlIHNjcmlw dCBpcyBkZXRhaWxlZAppbiB0aGUgZm9sbG93aW5nIHN1YnNlY3Rpb25zLgojK25hbWU6IGJ1aWxk X2RpcmVjdG9yeQojK2JlZ2luX3NyYyBiYXNoIDpzaGViYW5nICIjISAvdXNyL2Jpbi9lbnYgYmFz aCIgOnRhbmdsZSBidWlsZF9kaXJlY3RvcnkgOmV4cG9ydHMgbm9uZQo8PHNjcmlwdC1jb25mPj4K Cjw8YXJndW1lbnRzPj4KCjw8ZGVidWc+PgoKPDx3b3JrZGlyPj4KCjw8ZW52Pj4KCjw8aGV4Pj4K Cjw8cmViYXIzPj4KCjw8YXJjaGl2ZT4+Cgo8PHVucGFjaz4+Cgo8PGRlcHM+PgoKPDxzaG93OjA+ PgojK2VuZF9zcmMKCgoqKiogVGhlIEJhc2ggc2NyaXB0IGlzIGNvbmZpZ3VyZWQKIytuYW1lOiBz Y3JpcHQtY29uZgojK2JlZ2luX3NyYyBiYXNoCnNldCAtZXVvIHBpcGVmYWlsCklGUz0kJ1xuXHQn CiMrZW5kX3NyYwoKCioqKiBBcmd1bWVudHMKIytuYW1lOiBhcmd1bWVudHMKIytiZWdpbl9zcmMg YmFzaApERVBTX0RJUj0iZGVwcyIKTE9HPSJmYWxzZSIKQlVJTERfUEVSX0VOVklST05NRU5UPSJ0 cnVlIgp3aGlsZSBbICIkezE6LX0iICE9ICIiIF07IGRvCiAgY2FzZSAiJDEiIGluCiAgICAtLWFy Y2hpdmUpCiAgICAgICAgc2hpZnQKICAgICAgICBBUkNISVZFPSQxCiAgICAgIDs7CiAgICAtLWxv ZykKICAgICAgICBzaGlmdAogICAgICAgIExPRz0kMQogICAgICA7OwogICAgLS1idWlsZC1wZXIt ZW52aXJvbm1lbnQpCiAgICAgICAgc2hpZnQKICAgICAgICBCVUlMRF9QRVJfRU5WSVJPTk1FTlQ9 JDEKICAgICAgOzsKICAgIC0tb3V0KQogICAgICAgIHNoaWZ0CiAgICAgICAgT1VUPSQxCiAgICAg IDs7CiAgICAtLWRlcHMtcGF0aCkKICAgICAgICBzaGlmdAogICAgICAgIERFUFNfRElSPSQxCiAg ICAgIDs7CiAgICAtLXRlc3QpCiAgICAgICAgc2hpZnQKICAgICAgICBURVNUPSQxCiAgICAgIDs7 CiAgICAtLXdvcmtkaXIpCiAgICAgICAgc2hpZnQKICAgICAgICBXT1JLRElSPSQxCiAgICAgIDs7 CiAgICAsKikKICAgICAgZWNobyAiSW52YWxpZCBhcmd1bWVudDogJDEiCiAgICAgIGV4aXQgMQog IGVzYWMKICBzaGlmdApkb25lCiMrZW5kX3NyYwoKCioqKiBEZWJ1ZyBtb2RlCiMrbmFtZTogZGVi dWcKIytiZWdpbl9zcmMgYmFzaApbWyAkTE9HID09ICJ0cnVlIiBdXSAmJiBzZXQgLXgKIytlbmRf c3JjCgoKKioqIFdvcmsgZGlyZWN0b3J5CiMrbmFtZTogd29ya2RpcgojK2JlZ2luX3NyYyBiYXNo Cm1rZGlyIC1wICRXT1JLRElSCmNkICRXT1JLRElSCiMrZW5kX3NyYwoKCioqKiBFbnZpcm9ubWVu dCB2YXJpYWJsZXMKIytuYW1lOiBlbnYKIytiZWdpbl9zcmMgYmFzaCA6ZXhwb3J0cyBub25lCjw8 ZW52OjA+PgoKPDxlbnY6MT4+Cgo8PGVudjoyPj4KCjw8ZW52OjM+PgoKPDxlbnY6ND4+Cgo8PGVu djo1Pj4KIytlbmRfc3JjCgpUaGUgY3VycmVudCBsb2NhbGUgbXVzdCBiZSBzZXQgdG8gYSB+VVRG LTh+IGNvbXBhdGlibGUgZm9ybWF0OyBvdGhlcndpc2UsIHRoZSBFcmxhbmcgVk0Kd2lsbCBlbWl0 IGEgd2FybmluZzogIldhcm5pbmc6IFRoZSBWTSBpcyBydW5uaW5nIHdpdGggdGhlIG5hdGl2ZSBu YW1lIGVuY29kaW5nIG9mCmxhdGluMSwgd2hpY2ggbWF5IGNhdXNlIEVsaXhpciB0byBtYWxmdW5j dGlvbiwgYXMgaXQgZXhwZWN0cyBVVEYtOC4gUGxlYXNlIGVuc3VyZQp5b3VyIGxvY2FsZSBpcyBz ZXQgdG8gVVRGLTggKHdoaWNoIGNhbiBiZSB2ZXJpZmllZCBieSBydW5uaW5nICdsb2NhbGUnIGlu IHlvdXIKc2hlbGwpLiIKIytuYW1lOiBlbnY6MAojK2JlZ2luX3NyYyBiYXNoCmV4cG9ydCBMQ19B TEw9ZW5fVVMuVVRGLTgKIytlbmRfc3JjCgp+bWl4fiBleHBlY3RzIHRvIGhhdmUgYWNjZXNzIHRv IGEgZmV3IGxvY2FsIGRpcmVjdG9yaWVzLgojK25hbWU6IGVudjoxCiMrYmVnaW5fc3JjIGJhc2gK ZXhwb3J0IE1JWF9IT01FPSRQV0QvbWl4LWhvbWUKZXhwb3J0IE1JWF9BUkNISVZFUz0kTUlYX0hP TUUvYXJjaGl2ZXMKbWtkaXIgLXAgIiRNSVhfQVJDSElWRVMiCiMrZW5kX3NyYwoKfm1peH4gZXhw ZWN0cyB0byBpbnN0YWxsIGRlcGVuZGVuY2llcyBzb3VyY2VzIGluIH5ERVBTX0RJUn4uCiMrbmFt ZTogZW52OjIKIytiZWdpbl9zcmMgYmFzaApta2RpciAtcCAkREVQU19ESVIKIytlbmRfc3JjCgp+ bWl4fiBpbnN0YWxscyBjb21waWxhdGlvbnMgYXJ0aWZhY3RzIHVuZGVyIHRoZSB+QlVJTERfRElS fiBkaXJlY3RvcnkuCiMrbmFtZTogZW52OjMKIytiZWdpbl9zcmMgYmFzaApleHBvcnQgQlVJTERf RElSPV9idWlsZApta2RpciAtcCAiJEJVSUxEX0RJUiIKIytlbmRfc3JjCgp+bWl4fiBleHBlY3Rz IHRvIGZldGNoIHRhcmJhbGxzIGZyb20gfkhFWF9QTX4uCiMrbmFtZTogZW52OjQKIytiZWdpbl9z cmMgYmFzaApleHBvcnQgSEVYX1BNPWh0dHBzOi8vcmVwby5oZXgucG0vdGFyYmFsbHMKIytlbmRf c3JjCgpUaGlzIHByb2NlZHVyZSBpbnN0YWxscyBjb21waWxhdGlvbiBhcnRpZmFjdHMgdW5kZXIg fkVMSVhJUl9MSUJ+LiB+MS4xNH4gaXMgdGhlIHZlcnNpb24KbnVtYmVyIG9mIHRoZSBjdXJyZW50 IEVsaXhpciB1c2VkLgojK25hbWU6IGVudjo1CiMrYmVnaW5fc3JjIGJhc2gKZXhwb3J0IEVMSVhJ Ul9MSUI9bGliL2VsaXhpci8xLjE0CiMrZW5kX3NyYwoKCioqKiBIZXggaXMgaW5zdGFsbGVkCkhl eCBtdXN0IGJlIGluc3RhbGxlZCB1bmRlciB+TUlYX0FSQ0hJVkVTfjsgb3RoZXJ3aXNlLCB+bWl4 fiB3aWxsIHJlZnVzZSB0byBjb21waWxlLgojK25hbWU6IGhleAojK2JlZ2luX3NyYyBiYXNoCm1p eCBsb2NhbC5oZXggLS1mb3JjZQpbWyAkTE9HID09ICJ0cnVlIiBdXSAmJiB0cmVlICRNSVhfSE9N RQojK2VuZF9zcmMKCgoqKiogUmViYXIzIGlzIGluc3RhbGxlZApSZWJhcjMgbXVzdCBiZSBpbnN0 YWxsZWQgdW5kZXIgfk1JWF9BUkNISVZFU347IG90aGVyd2lzZSwgfm1peH4gd2lsbCByZWZ1c2Ug dG8gY29tcGlsZSBpZgpFcmxhbmcgZGVwZW5kZW5jaWVzIGFyZSBwcmVzZW50LgojK25hbWU6IHJl YmFyMwojK2JlZ2luX3NyYyBiYXNoCm1peCBsb2NhbC5yZWJhciAtLWZvcmNlIHJlYmFyMyAkKHdo aWNoIHJlYmFyMykKW1sgJExPRyA9PSAidHJ1ZSIgXV0gJiYgdHJlZSAkTUlYX0hPTUUKIytlbmRf c3JjCgoKKioqIFRoZSBhcmNoaXZlIGlzIGZldGNoZWQKIytuYW1lOiBhcmNoaXZlCiMrYmVnaW5f c3JjIGJhc2gKaWYgW1sgLWYgIi4uLyRBUkNISVZFIiBdXTsgdGhlbgogICAgY3AgIi4uLyRBUkNI SVZFIiAuLwplbHNlCiAgICB3Z2V0ICRIRVhfUE0vJEFSQ0hJVkUgPi9kZXYvbnVsbAogICAgY3Ag IiRBUkNISVZFIiAuLi8KZmkKbHMgLWFsICIkQVJDSElWRSIKIytlbmRfc3JjCgoKKioqIFRoZSBh cmNoaXZlIGlzIHVucGFja2VkClNvdXJjZXMgYXJlIHVucGFja2VkIGluIHRoZSBjdXJyZW50IGRp cmVjdG9yeS4KIytuYW1lOiB1bnBhY2sKIytiZWdpbl9zcmMgYmFzaAp0YXIgeGYgJEFSQ0hJVkUK dGFyIHh2ZiBjb250ZW50cy50YXIuZ3oKIytlbmRfc3JjCgoKKioqIERlcGVuZGVuY2llcyBhcmUg aW5zdGFsbGVkCjpQUk9QRVJUSUVTOgo6SUQ6ICAgICAgIDk1MjZlNTEwLTkwY2YtNDU5NS1iY2Fk LTQ0MTFlYTgyMmMyMwo6RU5EOgoKIytuYW1lOiBkZXBzCiMrYmVnaW5fc3JjIGJhc2ggOmV4cG9y dHMgbm9uZQo8PGRlcHM6MD4+Cgo8PGRlcHM6MT4+Cgo8PGRlcHM6Mj4+CiMrZW5kX3NyYwoKfk1J WF9FTlZTfiByZXByZXNlbnRzIGFsbCBlbnZpcm9ubWVudHMgdGhhdCBzaG91bGQgYmUgY29uc2lk ZXJlZCBmb3IgYnVpbGRpbmcgYW5kCnRlc3RpbmcgdGhlIHBhY2thZ2UuCiMrbmFtZTogZGVwczow CiMrYmVnaW5fc3JjIGJhc2gKaWYgW1sgIiRCVUlMRF9QRVJfRU5WSVJPTk1FTlQiID09ICJ0cnVl IiBdXTsgdGhlbgogICAgTUlYX0VOVlM9KCAicHJvZCIgKQogICAgaWYgW1sgJFRFU1QgPT0gInRy dWUiIF1dOyB0aGVuCiAgICAgICAgTUlYX0VOVlMrPSggInRlc3QiICkKICAgIGZpCmVsc2UKICAg IE1JWF9FTlZTPSggInNoYXJlZCIgKQpmaQojK2VuZF9zcmMKCnRoZW4sIGZvciBlYWNoIH5NSVhf RU5Wfiwgd2UgZ2V0IHRoZSBkZXBlbmRlbmNpZXMgYW5kIGNvbXBpbGUgdGhlbS4gRm9yIGVhY2gK ZW52aXJvbm1lbnQgfk1JWF9FTlZ+LCB0aGUgcmVzdWx0IHdpbGwgYmUgaW5zdGFsbGVkIGluIH5f YnVpbGQvJE1JWF9FTlZ+LgojK25hbWU6IGRlcHM6MQojK2JlZ2luX3NyYyBiYXNoCmZvciBwcm9m aWxlIGluICR7TUlYX0VOVlNbQF19OyBkbwogICAgZXhwb3J0IE1JWF9FTlY9JHByb2ZpbGUKCiAg ICBtaXggZGVwcy5nZXQgLS1vbmx5ICRNSVhfRU5WCiAgICBbWyAkTE9HID09ICJ0cnVlIiBdXSAm JiB0cmVlICRERVBTX0RJUgoKICAgIG1peCBkZXBzLmNvbXBpbGUKICAgIFtbICRMT0cgPT0gInRy dWUiIF1dICYmIHRyZWUgJEJVSUxEX0RJUgpkb25lCiMrZW5kX3NyYwoKdGhlbiwgd2UgcmVtb3Zl IHRoZSBzb3VyY2VzIGFzIHdlIG9ubHkgbmVlZCB0aGUgY29tcGlsZWQgZGVwZW5kZW5jaWVzLgoj K25hbWU6IGRlcHM6MgojK2JlZ2luX3NyYyBiYXNoCnJtIC1yZiAkREVQU19ESVIKIytlbmRfc3Jj CgoKKioqIFdoYXQgaGFzIGJlZW4gYnVpbHQgaXMgc2hvd24KIytuYW1lOiBzaG93OjAKIytiZWdp bl9zcmMgYmFzaAp0cmVlIC1MIDMgJHtCVUlMRF9ESVJ9CnRyZWUgLUwgMyAke01JWF9IT01FfQoj K2VuZF9zcmMKCgoqKiBUaGUgfmNvbXBpbGVfdGVzdF9pbnN0YWxsfiBzdGVwClRoZSB+Y29tcGls ZV90ZXN0X2luc3RhbGx+IHN0ZXAgY29tcGlsZXMsIHRlc3RzLCBhbmQgaW5zdGFsbHMgdGhlIHBh Y2thZ2Ugd2l0aGluIGEKY29udGFpbmVyLgojK25hbWU6IGNvbXBpbGVfdGVzdF9pbnN0YWxsCiMr YmVnaW5fc3JjIGJhc2ggOnNoZWJhbmcgIiMhIC91c3IvYmluL2VudiBiYXNoIiA6dGFuZ2xlIGNv bXBpbGVfdGVzdF9pbnN0YWxsIDpleHBvcnRzIG5vbmUKPDxzY3JpcHQtY29uZj4+Cgo8PGFyZ3Vt ZW50cz4+Cgo8PGRlYnVnPj4KCjw8d29ya2Rpcj4+Cgo8PGVudj4+Cgo8PHRlc3Q+PgoKPDxjb21w aWxlPj4KCjw8aW5zdGFsbD4+Cgo8PHNob3c6MT4+CiMrZW5kX3NyYwoKCioqKiBUaGUgcGFja2Fn ZSBpcyB0ZXN0ZWQKVGhlIGNvbXBpbGF0aW9uIGVudmlyb25tZW50IH5NSVhfRU5WfiBpcyBjb21w dXRlZCB0aGVuIHRoZSBwYWNrYWdlIGlzIGNvbXBpbGVkLAppbnN0YWxsZWQgaW4gfl9idWlsZC8k TUlYX0VOVn4gYW5kIHRlc3RlZC4KIytuYW1lOiB0ZXN0CiMrYmVnaW5fc3JjIGJhc2gKaWYgW1sg IiRURVNUIiA9PSAidHJ1ZSIgXV07IHRoZW4KICAgIGlmIFtbICIkQlVJTERfUEVSX0VOVklST05N RU5UIiA9PSAidHJ1ZSIgXV07IHRoZW4KICAgICAgICBleHBvcnQgTUlYX0VOVj10ZXN0CiAgICBl bHNlCiAgICAgICAgZXhwb3J0IE1JWF9FTlY9c2hhcmVkCiAgICBmaQogICAgVEVTVF9ESVI9JEJV SUxEX0RJUi8kTUlYX0VOVgogICAgbWl4IHRlc3QgLS1uby1kZXBzLWNoZWNrCiAgICBbWyAkTE9H ID09ICJ0cnVlIiBdXSAmJiB0cmVlICRURVNUX0RJUgpmaQojK2VuZF9zcmMKCgoqKiogVGhlIHBh Y2thZ2UgaXMgYnVpbHQKVGhlIGNvbXBpbGF0aW9uIGVudmlyb25tZW50IH5NSVhfRU5WfiBpcyBj b21wdXRlZCB0aGVuIHRoZSBwYWNrYWdlIGlzIGNvbXBpbGVkIGFuZAppbnN0YWxsZWQgaW4gfl9i dWlsZC8kTUlYX0VOVn4uCiMrbmFtZTogY29tcGlsZQojK2JlZ2luX3NyYyBiYXNoCmlmIFtbICIk QlVJTERfUEVSX0VOVklST05NRU5UIiA9PSAidHJ1ZSIgXV07IHRoZW4KICAgIGV4cG9ydCBNSVhf RU5WPXByb2QKZWxzZQogICAgZXhwb3J0IE1JWF9FTlY9c2hhcmVkCmZpClBST0RfRElSPSRCVUlM RF9ESVIvJE1JWF9FTlYKbWl4IGNvbXBpbGUgLS1uby1kZXBzLWNoZWNrCltbICRMT0cgPT0gInRy dWUiIF1dICYmIHRyZWUgJFBST0RfRElSCiMrZW5kX3NyYwoKCioqKiBUaGUgcGFja2FnZSBpcyBp bnN0YWxsZWQKVGhlIEVsaXhpciB2ZXJzaW9uIG51bWJlciB+WC5ZfiBpcyBjb21wdXRlZCBhbmQg dGhlIGJ1aWx0IHBhY2thZ2UgaXMgaW5zdGFsbGVkIHVuZGVyCn4kT1VUL2xpYi9lbGl4aXIvWC5Z L34uCiMrbmFtZTogaW5zdGFsbAojK2JlZ2luX3NyYyBiYXNoCk5BTUU9IiR7QVJDSElWRSUlLSp9 IgpJTlNUQUxMX0RJUj0kT1VULyR7RUxJWElSX0xJQn0vJHtOQU1FfQpta2RpciAtcCAkSU5TVEFM TF9ESVIKIyDigKYvKiBiZWNhdXNlIHdlIGRvbid0IHdhbnQgdG8gY29weSBoaWRkZW4gZmlsZXMu CmNwIC12THJmICRQUk9EX0RJUi8ke0VMSVhJUl9MSUIlJS8qfS8ke05BTUV9LyogJElOU1RBTExf RElSCiMrZW5kX3NyYwoKCioqKiBXaGF0IGhhcyBiZWVuIGJ1aWx0IGlzIHNob3duCiMrbmFtZTog c2hvdzoxCiMrYmVnaW5fc3JjIGJhc2gKdHJlZSAtTCAzICRCVUlMRF9ESVIKdHJlZSAtTCA0ICRP VVQKIytlbmRfc3JjCgoKKiBBIGZldyBwYWNrYWdlcyBoYXZlIGJlZW4gYnVpbHQKKiogfm1ha2V1 cH4KIytiZWdpbl9zcmMgYmFzaApXT1JLRElSPSRQV0Qvd29ya2RpcgpJTlNUQUxMRElSPSRXT1JL RElSL2luc3RhbGwKcm0gLXJmICRXT1JLRElSICRJTlNUQUxMRElSCgpndWl4IHNoZWxsIC1EIC1m IGd1aXguc2NtIC0tIGJhc2ggYnVpbGRfZGlyZWN0b3J5IFwKICAgICAtLWFyY2hpdmUgbWFrZXVw LTEuMS4xLnRhciBcCiAgICAgLS1sb2cgdHJ1ZSBcCiAgICAgLS1vdXQgJElOU1RBTExESVIgXAog ICAgIC0tZGVwcy1wYXRoIGRlcHMgXAogICAgIC0tdGVzdCBmYWxzZSBcCiAgICAgLS13b3JrZGly ICRXT1JLRElSCgpndWl4IHNoZWxsIC1DIC1EIC1mIGd1aXguc2NtIC0tIGJhc2ggY29tcGlsZV90 ZXN0X2luc3RhbGwgXAogICAgIC0tYXJjaGl2ZSBtYWtldXAtMS4xLjEudGFyIFwKICAgICAtLWxv ZyB0cnVlIFwKICAgICAtLW91dCAkSU5TVEFMTERJUiBcCiAgICAgLS1kZXBzLXBhdGggZGVwcyBc CiAgICAgLS10ZXN0IGZhbHNlIFwKICAgICAtLXdvcmtkaXIgJFdPUktESVIKIytlbmRfc3JjCgoK Kiogfm1hY2hldGV+CiMrYmVnaW5fc3JjIGJhc2gKV09SS0RJUj0kUFdEL3dvcmtkaXIKSU5TVEFM TERJUj0kV09SS0RJUi9pbnN0YWxsCnJtIC1yZiAkV09SS0RJUiAkSU5TVEFMTERJUgoKZ3VpeCBz aGVsbCAtRCAtZiBndWl4LnNjbSAtLSBiYXNoIGJ1aWxkX2RpcmVjdG9yeSBcCiAgICAgLS1hcmNo aXZlIG1hY2hldGUtMC4yLjgudGFyIFwKICAgICAtLWxvZyB0cnVlIFwKICAgICAtLW91dCAkSU5T VEFMTERJUiBcCiAgICAgLS1kZXBzLXBhdGggZGVwcyBcCiAgICAgLS10ZXN0IHRydWUgXAogICAg IC0td29ya2RpciAkV09SS0RJUgoKZ3VpeCBzaGVsbCAtQyAtRCAtZiBndWl4LnNjbSAtLSBiYXNo IGNvbXBpbGVfdGVzdF9pbnN0YWxsIFwKICAgICAtLWFyY2hpdmUgbWFjaGV0ZS0wLjIuOC50YXIg XAogICAgIC0tbG9nIHRydWUgXAogICAgIC0tb3V0ICRJTlNUQUxMRElSIFwKICAgICAtLWRlcHMt cGF0aCBkZXBzIFwKICAgICAtLXRlc3QgdHJ1ZSBcCiAgICAgLS13b3JrZGlyICRXT1JLRElSCiMr ZW5kX3NyYwoKCioqIH5waG9lbml4fgojK2JlZ2luX3NyYyBiYXNoCldPUktESVI9JFBXRC93b3Jr ZGlyCklOU1RBTExESVI9JFdPUktESVIvaW5zdGFsbApybSAtcmYgJFdPUktESVIgJElOU1RBTExE SVIKCmd1aXggc2hlbGwgLUQgLWYgZ3VpeC5zY20gLS0gYmFzaCBidWlsZF9kaXJlY3RvcnkgXAog ICAgIC0tYXJjaGl2ZSBwaG9lbml4LTEuNy4xMC50YXIgXAogICAgIC0tbG9nIHRydWUgXAogICAg IC0tb3V0ICRJTlNUQUxMRElSIFwKICAgICAtLWRlcHMtcGF0aCBkZXBzIFwKICAgICAtLXRlc3Qg ZmFsc2UgXAogICAgIC0td29ya2RpciAkV09SS0RJUgoKZ3VpeCBzaGVsbCAtQyAtRCAtZiBndWl4 LnNjbSAtLSBiYXNoIGNvbXBpbGVfdGVzdF9pbnN0YWxsIFwKICAgICAtLWFyY2hpdmUgcGhvZW5p eC0xLjcuMTAudGFyIFwKICAgICAtLWxvZyB0cnVlIFwKICAgICAtLW91dCAkSU5TVEFMTERJUiBc CiAgICAgLS1kZXBzLXBhdGggZGVwcyBcCiAgICAgLS10ZXN0IGZhbHNlIFwKICAgICAtLXdvcmtk aXIgJFdPUktESVIKIytlbmRfc3JjCgoKKiBBZGFwdGluZyB0aGUgcHJvY2VkdXJlIHRvIEd1aXgK VGhlIGdvYWwgaXMgdG8gYW5zd2VyIHRoZSBxdWVzdGlvbjogZ2l2ZW4gdGhlIGFib3ZlIHByb2Nl ZHVyZSwgaG93IHRvIGFkYXB0IGl0IHRvCkd1aXg/IFdlIGV4YW1pbmUgZWFjaCBzdGVwIGFuZCwg d2hlbiBuZWNlc3NhcnksIG1hcCBpdCB0byBHdWl4LgoxKSBUaGUgYnVpbGQgcHJvY2VkdXJlIHNo b3VsZCBtYXRjaCB0aGUgfm1peC1idWlsZC1zeXN0ZW1+IHZhcmlhYmxlLgoyKSBGb3IgYWxsIEVs aXhpciBwYWNrYWdlLCB0aGUgfm5hdGl2ZS1pbnB1dHN+IG9mIH5ndWl4LnNjbX4gZXhjZXB0IH50 cmVlfiBzaG91bGQgYmUgaW4KICAgZGVmYXVsdCBuYXRpdmUtaW5wdXRzLgozKSBUaGUgRWxpeGly IHZlcnNpb24gbnVtYmVyIHNob3VsZCBiZSBjb21wdXRlZCBmcm9tIHRoZSBFbGl4aXIgdXNlZCB0 byBjb21waWxlLgo0KSBBcmd1bWVudHMgc2hvdWxkIGJlIHByb3ZpZGVkOiB+Izp0ZXN0cz9+LCB+ IzpkZXBzLXBhdGh+LCB+IzpidWlsZC1wZXItZW52aXJvbm1lbnR+Lgo1KSBBIHBoYXNlIHNob3Vs ZCBpbnN0YWxsIH5IZXh+Lgo2KSBBIHBoYXNlIHNob3VsZCBpbnN0YWxsIH5SZWJhcjN+Lgo3KSBU aGUgfnVucGFja34gcGhhc2Ugc2hvdWxkIGJlIGFkYXB0ZWQgdG8gdGFyYmFsbHMgYW5kIHNvdXJj ZSBjaGVja291dHMuCjgpIEFsbCBFcmxhbmcgYW5kIEVsaXhpciBwYWNrYWdlcyBzaG91bGQgYmUg ZGVkdWNlZCBmcm9tIGFsbCB0aGUgaW5wdXRzIG9mIHRoZQogICBwYWNrYWdlIGJlaW5nIGJ1aWx0 IGFuZCBpbnN0YWxsZWQgaW4gdGhlIG5lY2Vzc2FyeSBidWlsZCBkaXJlY3RvcmllcyB0byBtaW1p YyB0aGUKICAgW1tpZDo5NTI2ZTUxMC05MGNmLTQ1OTUtYmNhZC00NDExZWE4MjJjMjNdW0RlcGVu ZGVuY2llcyBhcmUgaW5zdGFsbGVkXV0uCgoKKiBDb25jbHVzaW9uCiAgQSBwcmVsaW1pbmFyeSBi dWlsZCBwcm9jZWR1cmUgZm9yIEVsaXhpciBwYWNrYWdlcywgZGVzaWduZWQgZm9yIGludGVncmF0 aW9uIGludG8KICBHdWl4LCBoYXMgYmVlbiBwcmVzZW50ZWQuIFRoZSBpc3N1ZSBvZiBiaXQgcmVw cm9kdWNpYmlsaXR5IHdpdGhpbiB0aGUgYnVpbGQgcHJvY2VzcwogIHJlcXVpcmVzIGZ1cnRoZXIg aW52ZXN0aWdhdGlvbi4gSWYgdGhlIGN1cnJlbnQgbWV0aG9kb2xvZ3kgaXMgZGVlbWVkIHNhdGlz ZmFjdG9yeSwKICB0aGUgc3Vic2VxdWVudCBzdGVwIHdpbGwgYmUgdG8gaW1wbGVtZW50IHRoaXMg cHJvY2VkdXJlIGluIHRoZSBHdWl4IGJ1aWxkIHN5c3RlbS4KCgoqIEFubmV4CioqIH5idWlsZF9k aXJlY3Rvcnl+CiMrYmVnaW5fc3JjIGJhc2gKPDxidWlsZF9kaXJlY3Rvcnk+PgojK2VuZF9zcmMK CgoqKiB+Y29tcGlsZV90ZXN0X2luc3RhbGx+CiMrYmVnaW5fc3JjIGJhc2gKPDxjb21waWxlX3Rl c3RfaW5zdGFsbD4+CiMrZW5kX3NyYwoKCiMgTG9jYWwgVmFyaWFibGVzOgojIGZpbGwtY29sdW1u OiA4NQojIEVuZDoK --00000000000017cc62060a0d43a1--