[libre-riscv-dev] [Bug 335] Formal Correctness Proof for Branch pipeline
[libre-riscv-dev.git] / 47 / fb8c4a46f45212cc3b616f96f2c5c51e9d3428
1 Return-path: <libre-riscv-dev-bounces@lists.libre-riscv.org>
2 Envelope-to: publicinbox@libre-riscv.org
3 Delivery-date: Sat, 16 May 2020 21:16:37 +0100
4 Received: from localhost ([::1] helo=libre-riscv.org)
5 by libre-soc.org with esmtp (Exim 4.89)
6 (envelope-from <libre-riscv-dev-bounces@lists.libre-riscv.org>)
7 id 1ja3Ea-0005yr-Nc; Sat, 16 May 2020 21:16:36 +0100
8 Received: from mail-lj1-f179.google.com ([209.85.208.179])
9 by libre-soc.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128)
10 (Exim 4.89) (envelope-from <thejsingher@gmail.com>)
11 id 1ja3EZ-0005yl-C9
12 for libre-riscv-dev@lists.libre-riscv.org; Sat, 16 May 2020 21:16:35 +0100
13 Received: by mail-lj1-f179.google.com with SMTP id h4so5768877ljg.12
14 for <libre-riscv-dev@lists.libre-riscv.org>;
15 Sat, 16 May 2020 13:16:35 -0700 (PDT)
16 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025;
17 h=mime-version:references:in-reply-to:from:date:message-id:subject:to;
18 bh=ajKTXr01cEGXByX2Mfn+2ySJf2oZlH121LBcMfjFrwg=;
19 b=GzzYqEPHwthoa8FIjxY4ZeU9wEJ6yd9K4mds7aKT/DE7C2IovF7hrSPehLChOz0/aS
20 kAJ2Zt6VNwtEtszpV7kJCOehd0CQnxRz04bsFuB6fgefVN+uZGQbFaUSsuJNCjkmpjG/
21 uAeN+NGODrJMpdVoRvtifHU/cixozJBT3BCKHQz4t4wZ+YVJmPo3QodvDwFirJQ2CSj8
22 9DDQxUHOdEcJizvMz/UuJprjPIJ3UburmxmPTqvm0Dsk75eNHtfGMU+RAtUYicr6VCkf
23 iCdGL8RtV9ZXW1vMa7uYYmAZCli5nAhCO1oh8/T7VP/WomN0lC5ljQ5SCT8IsXjB4ghH
24 eVdA==
25 X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
26 d=1e100.net; s=20161025;
27 h=x-gm-message-state:mime-version:references:in-reply-to:from:date
28 :message-id:subject:to;
29 bh=ajKTXr01cEGXByX2Mfn+2ySJf2oZlH121LBcMfjFrwg=;
30 b=B1lb5ayBX0Ud6r/hBdYK31V1iAjM3eSJiLOJ7gFztZecKJEV/3KyFdcW174iSqnk6x
31 0rve9KptoinXReA3MPsVlafW9H26T03BPd9q1t7qMSmVAMQqFB4zsapiPAckcJbQMjvi
32 j2gx7XxKus0aZmQWh/LoQT9kM6828ZoxSNLeY/HkIcsGqhrR2XRr6g1PiH3i3tuGEeHE
33 8nD4tvSOPjtvgkH68yabL6XfhsGU7QthrVpPhvHCKE67AvBc3/pfTb4fOMqmm7Y7ZU0f
34 XyuTl1n1MuKlQ/04YNoy0yvArpf0IBEVV4OmmLZ9KNGuVSzWy6otd/FSMNiSuBMMyu1m
35 G7kw==
36 X-Gm-Message-State: AOAM532g2sHSxFfTput8m1XaPVorLWcoLVJWedHNbWkhqh5NGkQylU95
37 gdnLiqdowAxBVedkFRXx08+zeRS+EQzosfR6NwteDBeR
38 X-Google-Smtp-Source: ABdhPJw1nP4laMG1MvTBtQncvnNkSRNtjSuOwCGIhzosy8AifAz+VL6VMcCDbpcq3yyM2Gepq9jYCrzQNuN+aRb92TY=
39 X-Received: by 2002:a05:651c:50e:: with SMTP id
40 o14mr6082865ljp.52.1589660194239;
41 Sat, 16 May 2020 13:16:34 -0700 (PDT)
42 MIME-Version: 1.0
43 References: <13EDF987-9A19-4C96-89C2-6DB784CF2C96@gatech.edu>
44 <CAPweEDyDcmAJbJx+PKkL8MotPMNyHyFOEtuNOKP+V2PmmY5HvA@mail.gmail.com>
45 <CAPweEDyw+LSW2S4sKWk-V24NSHYe2qqWO+KFqikQ34Q1Guhaig@mail.gmail.com>
46 <CAPweEDweXSC5c_ROQ8a3Y4hQMaJYmD_jAriadcZk9PRrkjOXvA@mail.gmail.com>
47 <25AC8A2E-D48F-439F-AF9D-0EB3DC08D7CC@gatech.edu>
48 <CAPweEDx_TMOxQHLrhbdhnXsBE1s-u2mz3xD2DDFCMi6m9BZCZg@mail.gmail.com>
49 In-Reply-To: <CAPweEDx_TMOxQHLrhbdhnXsBE1s-u2mz3xD2DDFCMi6m9BZCZg@mail.gmail.com>
50 From: Jeremy Singher <thejsingher@gmail.com>
51 Date: Sat, 16 May 2020 13:16:23 -0700
52 Message-ID: <CAEoCstRd+hLfF5YtUbnS2gukPxVAjmheJrZ29QvJD3y4Y928JQ@mail.gmail.com>
53 To: Libre-RISCV General Development <libre-riscv-dev@lists.libre-riscv.org>
54 Subject: Re: [libre-riscv-dev] Scoreboard vs Tomasulo
55 X-BeenThere: libre-riscv-dev@lists.libre-riscv.org
56 X-Mailman-Version: 2.1.23
57 Precedence: list
58 List-Id: Libre-RISCV General Development
59 <libre-riscv-dev.lists.libre-riscv.org>
60 List-Unsubscribe: <http://lists.libre-riscv.org/mailman/options/libre-riscv-dev>,
61 <mailto:libre-riscv-dev-request@lists.libre-riscv.org?subject=unsubscribe>
62 List-Archive: <http://lists.libre-riscv.org/pipermail/libre-riscv-dev/>
63 List-Post: <mailto:libre-riscv-dev@lists.libre-riscv.org>
64 List-Help: <mailto:libre-riscv-dev-request@lists.libre-riscv.org?subject=help>
65 List-Subscribe: <http://lists.libre-riscv.org/mailman/listinfo/libre-riscv-dev>,
66 <mailto:libre-riscv-dev-request@lists.libre-riscv.org?subject=subscribe>
67 Reply-To: Libre-RISCV General Development
68 <libre-riscv-dev@lists.libre-riscv.org>
69 Content-Type: text/plain; charset="utf-8"
70 Content-Transfer-Encoding: base64
71 Errors-To: libre-riscv-dev-bounces@lists.libre-riscv.org
72 Sender: "libre-riscv-dev" <libre-riscv-dev-bounces@lists.libre-riscv.org>
73
74 PiBIb3dldmVyLCB0aGUgc2NvcmVib2FyZCBpcyBsaW1pdGVkIGluIHRoYXQgaXQgZG9lcyBub3Qg
75 aGFuZGxlIFdBUiBhbmQgV0FXCj4gaGF6YXJkcyB2ZXJ5IHdlbGwuCgo+IHRoZSBvcmlnaW5hbCA2
76 NjAwIGhhbmRsZXMgV0FSIGV4dHJlbWVseSB3ZWxsLCBvbmx5IHN0YWxsaW5nIG9uIFdhVwo+IGNv
77 bmRpdGlvbiwgZGV0ZWN0aW9uIHdoaWNoIGRpZCBub3QgbWF0dGVyIGdyZWF0bHkgYmVjYXVzZSB0
78 aGUgcGlwZWxpbmVzCj4gd2VyZSBvbmx5IGF0IG1vc3QgMiBzdGFnZXMgbG9uZyBhbnl3YXkgKE1p
79 dGNoIG9ubHkgbm90aWNlZCBhZnRlciByZXJlYWRpbmcKPiBsYXN0IHllYXIgdGhhdCB0aGUgRlAg
80 QUREIG9mIHRoZSA2NjAwIHdhcyAyIHN0YWdlIHBpcGVsaW5lZC4gIG5vIGFjYWRlbWljCj4gbGl0
81 ZXJhdHVyZSBoYXMgYWNrbm93bGVkZ2VkIG9yIG5vdGljZWQgdGhpcykuCgpJIHdvdWxkIGFyZ3Vl
82 IHRoYXQgdGhlIENEQzY2MDAgaGFuZGxlcyBXQVIgYmV0dGVyIHRoYW4gYW4gaW4tb3JkZXIKbWFj
83 aGluZSwgYnV0IG5vdCBiZXR0ZXIgdGhhbiBhIG1hY2hpbmUgd2l0aCBmdWxsIHJlbmFtaW5nLiBJ
84 biB0aGUKQ0RDNjYwMCwgdGhlIHNjb3JlYm9hcmQgd291bGQgYmxvY2sgdGhlIGNvbXBsZXRpb24g
85 b2YgdGhlIFcgaW5zdCB1bnRpbAp0aGUgUiBpbnN0IGhhcyByZWFkIGl0cyBvcGVyYW5kcy4gSW4g
86 VG9tYXN1bG8sIHRoZSBXIGluc3QgY2FuIHByb2NlZWQKaW1tZWRpYXRlbHkgYmVmb3JlIHRoZSBS
87 IGluc3QgaXMgcmVhZHksIHNpbmNlIHRoZSBkZXN0aW5hdGlvbiByZWdpc3RlcgppcyBwaHlzaWNh
88 bGx5IHJlbmFtZWQuCgo+ICBST0IgaXMgYSBDQU0sCgpXaGF0PyBUaGlzIGlzIG5vdCB0cnVlLiBJ
89 bnN0cnVjdGlvbnMgaW4gZmxpZ2h0IHRyYWNrIHRoZWlyIGluZGV4IGluCnRoZSBST0IsIGF0IGNv
90 bXBsZXRpb24sIHRoZXkgd3JpdGUgc3VjY2VzcyBiaXQgYWNjb3JkaW5nIHRvIHRoZSBpbmRleAp0
91 aGV5IGhhdmUuIE5vdCBhIENBTS4gU2ltcGxlIGFkZHJlc3NlZCB3cml0ZS4KCj4gZ2l2ZW4gdGhh
92 dCBJbnRlbCBwcm9jZXNzb3JzIHVzZSBUb21hc3Vsbywgd2Ugc3RhcnQgdG8gc2VlIHdoeSBJbnRl
93 bAo+IHByb2Nlc3NvcnMgc3VjayBzbyBtdWNoIHBvd2VyLgoKUG93ZXIgY29uc3VtcHRpb24gb24g
94 YSBwcm9jZXNzb3IgaXMgcHJpbWFyaWx5IGZyb20gaGlnaCBzd2l0Y2hpbmcKcmF0ZXMgb24gbGFy
95 Z2UgcmVnaXN0ZXIgZmlsZXMsIGFuZCBTUkFNIGxlYWthZ2UuIFRoZSBzY2hlZHVsaW5nIGxvZ2lj
96 CmlzIGEgbWluaXNjdWxlIHBvcnRpb24uIEludGVsIGNvcmVzIGFyZSBwb3dlci1odW5ncnkgYmVj
97 YXVzZQpoaXN0b3JpY2FsbHkgdGhleSBoYXZlIHRhcmdldGVkIHRoZSBkZXNrdG9wL3dvcmtzdGF0
98 aW9uIG1hcmtldCwgYW5kIGRvCm5vdCBoYXZlIGFzIG1hbnkgZGVjYWRlcyBvZiBleHBlcmllbmNl
99 IGFzIG90aGVyIGZpcm1zIG9wdGltaXppbmcgZm9yCnBvd2VyLWNvbnN0cmFpbmVkIGVudmlyb25t
100 ZW50cy4KCkFsc28gYWxtb3N0IGFsbCBtb2Rlcm4gT09PIGNvcmVzIHVzZSBUb21hc3VsbyBiZWNh
101 dXNlIFRvbWFzdWxvIGlzCmJldHRlciBhdCBhdm9pZGluZyBmYWxzZSBoYXphcmRzIGNvbXBhcmVk
102 IHRvIHNjb3JlYm9hcmRpbmcuIFRvbWFzdWxvCmFsc28gbWFrZXMgaXQgZWFzaWVyIHRvIGltcGxl
103 bWVudCBwcmVjaXNlIHRyYXBzLCBzb21ldGhpbmcgd2hpY2ggaXMKbm90b3Jpb3VzbHkgY2hhbGxl
104 bmdpbmcgIHdpdGgganVzdCBhIHNjb3JlYm9hcmQuCgpMZXRzIGJlIGNsZWFyIGhlcmUuIFRoZSBD
105 REM2NjAwIEFWT0lEUyBXQVIgYW5kIFdBVyBoYXphcmRzIGJ5IEJMT0NLSU5HCnlvdW5nZXIgaW5z
106 dHJ1Y3Rpb25zIChTZWUgcGczIGluIE1pdGNoIEFsc3VwJ3MgdGV4dCkuIFRvbWFzdWxvJ3MKc3Vw
107 cG9ydHMgT09PIGV4ZWN1dGlvbiBQQVNUIFdBUiBhbmQgV0FXIGhhemFyZHMsIGVuYWJsaW5nIHRo
108 ZSBjb3JlIHRvCmV4cGxvaXQgbW9yZSBJTFAgYWNyb3NzIGl0cyBmdW5jdGlvbmFsIHVuaXRzLgoK
109 THVrZSwgSSBhZ3JlZSB3aXRoIHlvdSB0aGF0IHRoZSByZXNlcnZhdGlvbiBzdGF0aW9uIHJvd3Mg
110 aW4gVG9tYXN1bG8ncwpjYW4gYmUgZXF1aXZhbGVudCB0byB0aGUgb3BlcmFuZCBsYXRjaGVzIGlu
111 IFNjb3JlYm9hcmRpbmcuIEhvd2V2ZXIsCmFkZGluZyBtYW55IG9wZXJhbmQtbGF0Y2hlcyAoYnkg
112 aGF2aW5nIG1hbnkgZnVuY3Rpb25hbCB1bml0cykgZG9lcyBub3QKc2NhbGUgYXMgbmljZWx5IGFz
113 IGp1c3QgYWRkaW5nIGEgZmV3IG1vcmUgcm93cyB0byBUb21hc3VsbydzCnJlc2VydmF0aW9uIHN0
114 YXRpb25zLiBFc3BlY2lhbGx5IHNpbmNlIGRlc2lnbmluZyB0aGUgQ0FNcyBmb3IKVG9tYXN1bG8n
115 cyBpcyBhIHdlbGwgc3R1ZGllZCwgYW5kIHdlbGwtdW5kZXJzdG9vZCBwcm9ibGVtCgo+IDMuIEV4
116 cGFuZCB0aGUgbnVtYmVyIG9mIFJTZXMgc28gdGhhdCBpZiB5b3Ugd2VyZSB0byBjb3VudCB0aGUg
117 dG90YWwgbnVtYmVyCj4gb2YgcGxhY2VzIG9wZXJhbmRzIGFyZSBzdG9yZWQsIHRoZXkgYXJlIHRo
118 ZSBzYW1lLgoKPiAoYW5vdGhlciB3YXkgdG8gcHV0IHRoaXMgaXMsICJmbGF0dGVuIGFsbCAyRCBS
119 U2VzIGludG8gMUQiKQoKVGhpcyBkb2VzIG5vdCBzY2FsZSB3ZWxsLiBBIDJEIENBTSBpcyBmYXIg
120 bW9yZSBhcmVhIGVmZmljaWVudCB0aGFuIGEKMUQgZmxhdHRlbmVkIHZlY3Rvci4KCj4gNy4gcmVu
121 YW1lIFJTZXMgdG8gIkZ1bmN0aW9uIFVuaXRzIiAoYWN0dWFsbHkgaW4gVGhvcm50b24ncyBib29r
122 IHRoZSBwaHJhc2UKPiAiQ29tcHV0YXRpb24gVW5pdHMiIGlzIHVzZWQpCgpTbyBhIFRvbWFzdWxv
123 J3MgZGVzaWduIHdpdGggNCByb3dzIG5vdyBiZWNvbWVzIGEgImZsYXR0ZW5lZCIgZGVzaWduCndp
124 dGggNCBmdW5jdGlvbmFsIHVuaXRzPyBUaGUgYWRkaXRpb25hbCBjb3N0IG9mIHRoZSBmdW5jdGlv
125 bmFsIHVuaXRzCmlzIGVub3Jtb3VzLgoKT24gU2F0LCBNYXkgMTYsIDIwMjAgYXQgMTA6MzMgQU0g
126 THVrZSBLZW5uZXRoIENhc3NvbiBMZWlnaHRvbgo8bGtjbEBsa2NsLm5ldD4gd3JvdGU6Cj4KPiBP
127 biBTYXR1cmRheSwgTWF5IDE2LCAyMDIwLCBZZWhvd3NodWEgPHlpbW1hbnVlbDNAZ2F0ZWNoLmVk
128 dT4gd3JvdGU6Cj4KPiA+IFRoaXMgaXMgYSB2ZXJ5IGludHJpY2F0ZSBhbmQgY29tcGxpY2F0ZWQg
129 c3ViamVjdCBtYXR0ZXIgZm9yIHN1cmUuCj4KPgo+IHllcywgZXhjZXB0IGl0IGRvZXNuJ3QgaGF2
130 ZSB0byBiZS4gIHRoZSBhY3R1YWwKPiBodHRwczovL2VuLndpa2lwZWRpYS5vcmcvd2lraS9MZXZl
131 bnNodGVpbl9kaXN0YW5jZSBiZXR3ZWVuIFRvbWFzdWxvIGFuZAo+IDY2MDAgcmVhbGx5IGlzIG5v
132 dCB0aGF0IGdyZWF0Lgo+Cj4gaSB0aG91Z2h0IGl0IHdvdWxkIGJlIGZ1biB0byB1c2UgYSBuZXcg
133 dW5wcm9ub3VuY2VhYmxlIHdvcmQgaSBsZWFybmVkCj4geWVzdGVyZGF5IDopCj4KPgo+ID4gQXQg
134 c29tZSBwb2ludCwgaXQgYmUgZ3JlYXQgdG8gcmVhbGx5IGJyZWFrIHRoaW5ncyBkb3duIGFuZCBt
135 YWtlIHRoZW0gbW9yZQo+ID4gYWNjZXNzaWJsZS4KPgo+Cj4geWVzLiBpdCBjb21lcyBkb3duIHRv
136 IHRpbWUuCj4KPiBzdGFydCB3aXRoIHRoaXMuCj4KPiAxLiBCZWdpbiBmcm9tIFRvbWFzdWxvLiAg
137 bmVpdGhlciBUUyBub3Igb3JpZ2luYWwgNjYwMCBoYXZlIHByZWNpc2UKPiBleGNlcHRpb25zIHNv
138 IHdlIGxlYXZlIHRoYXQgb3V0IGZvciBub3cuCj4KPiAyLiBTdGFydCBieSBvbmx5IGFsbG93aW5n
139 IG9uZSByb3cgcGVyIFJlc2VydmF0aW9uIFN0YXRpb24uCj4KPiAzLiBFeHBhbmQgdGhlIG51bWJl
140 ciBvZiBSU2VzIHNvIHRoYXQgaWYgeW91IHdlcmUgdG8gY291bnQgdGhlIHRvdGFsIG51bWJlcgo+
141 IG9mIHBsYWNlcyBvcGVyYW5kcyBhcmUgc3RvcmVkLCB0aGV5IGFyZSB0aGUgc2FtZS4KPgo+IChh
142 bm90aGVyIHdheSB0byBwdXQgdGhpcyBpcywgImZsYXR0ZW4gYWxsIDJEIFJTZXMgaW50byAxRCIp
143 Cj4KPiA0LiB3aGVyZSBwaXBlbGluZXMgd2VyZSBmb3JtZXJseSBjb25uZWN0ZWQgZXhjbHVzaXZl
144 bHkgdG8gb25lIFJTLAo+ICpwcmVzZXJ2ZSogdGhvc2UgY29ubmVjdGlvbnMgZXZlbiB0aG91Z2gg
145 dGhlIHJvd3MgYXJlIG5vdyAxRCBmbGF0dGVuZWQuCj4KPiAoYW5vdGhlciB3YXkgdG8gcHV0IHRo
146 aXMgaXM6IHdlIGhhdmUgYSBnbG9iYWwgMUQgbmFtaW5nIHNjaGVtZSB0byByZWZlcmVuY2UKPiB0
147 aGUgKm9wZXJhbmQgbGF0Y2hlcyogcmF0aGVyIHRoYW4gYSAyRCBzY2hlbWUgaW52b2x2aW5nIFJT
148 IG51bWJlciBpbiAxCj4gZGltZW5zaW9uIGFuZCB0aGUgcm93IG51bWJlciBpbiB0aGUgMm5kKQo+
149 Cj4gNS4gZ2l2ZSB0aGlzIDFEIGZsYXR0ZW5pbmcgYW4gVU5BUlkgbnVtYmVyaW5nIHNjaGVtZS4K
150 Pgo+IDYuIG1ha2UgdGhlIHNpemUgb2YgdGhlIFJlb3JkZXIgQnVmZmVyIEVYQUNUTFkgZXF1YWwg
151 dG8gdGhlIG51bWJlciBvZiAxRAo+IGZsYXR0ZW5lZCBSU2VzLgo+Cj4gNy4gcmVuYW1lIFJTZXMg
152 dG8gIkZ1bmN0aW9uIFVuaXRzIiAoYWN0dWFsbHkgaW4gVGhvcm50b24ncyBib29rIHRoZSBwaHJh
153 c2UKPiAiQ29tcHV0YXRpb24gVW5pdHMiIGlzIHVzZWQpCj4KPiB0aHVzLCBhdCB0aGlzIHBvaW50
154 IGluIHRoZSB0cmFuc2Zvcm1hdGlvbiwgdGhlIFJPQiByb3cgbnVtYmVyICpJUyogdGhlCj4gRnVu
155 Y3Rpb24gVW5pdCBOdW1iZXIsIHRoZSBuZWVkIHRvIGFjdHVhbGx5IHN0b3JlIHRoZSBST0IgIyBp
156 biB0aGUKPiBSZXNlcnZhdGlvbiBTdGF0aW9uIFJvdyBpcyBSRU1PVkVELCBhbmQgY29uc2VxdWVu
157 dGx5IHRoZSBSZXNlcnZhdGlvbgo+IFN0YXRpb25zIGFyZSBOTyBMT05HRVIgQSBDQU0uCj4KPiA4
158 LiBnaXZlIGFsbCByZWdpc3RlciBmaWxlIG51bWJlcnMgKElOVCBGUCkgYW4gVU5BUlkgbnVtYmVy
159 aW5nLgo+Cj4gdGhpcyBtZWFucyB0aGF0IGluIHRoZSBST0IsIHRoZSBDQU0sIHdoaWNoIGhhcyB0
160 byBsb29rIHVwIHRoZSByZWdpc3Rlcgo+IG51bWJlciBieSBoaXR0aW5nIHRoZSBDQU0gb24gZXZl
161 cnkgY3ljbGUsIG5vdyBvbmx5IGhhcyB0byBtYXRjaCBhIHNpbmdsZQo+IEFORCBnYXRlLgo+Cj4g
162 Yml0dmVjdG9ycyB0aGVyZWZvcmUgcmVwbGFjZSBDQU1zLgo+Cj4gd2l0aCB0aGUgUk9CIG5vdyBo
163 YXZpbmcgcm93cyBvZiBiaXR2ZWN0b3JzLCBpdCBpcyBub3cgdGVybWVkIGEgIk1hdHJpeCIuCj4K
164 PiB0aGUgbGVmdCBzaWRlIG9mIHRoZSBST0IsIHdoaWNoIHVzZWQgdG8gY29udGFpbiB0aGUgUlMg
165 TnVtYmVyIGluIHVuYXJ5LCBub3cKPiBjb250YWlucyBhICpiaXR2ZWN0b3IqIERpcmVjdGVkIEFj
166 eWNsaWMgR3JhcGggb2YgdGhlIEZVIHRvIEZVIGRlcGVuZGVuY2llcywKPiBhbmQgaXMgc3BsaXQg
167 b3V0IGludG8gaXRzIG93biBNYXRyaXguCj4KPiB0aGlzIHdlIGNhbGwgdGhlIEZVLUZVIERlcGVu
168 ZGVuY3kgTWF0cml4Lgo+Cj4gdGhlIHJlbWFpbmRlciBvZiB0aGUgIlJPQiIgY29udGFpbnMgdGhl
169 IHJlZ2lzdGVyIG51bWJlcnMgaW4gdW5hcnkgTWF0cml4Cj4gZm9ybSwgYW5kIHdpdGggZWFjaCBy
170 b3cgYmVpbmcgZGlyZWN0bHkgYXNzb2NpYXRlZCB3aXRoIGEgRnVuY3Rpb24gVW5pdCwgd2UKPiBu
171 b3cgaGF2ZSBhbiBhc3NvY2lhdGlvbiBiZXR3ZWVuIEZVIGFuZCBSZWdzIHdoaWNoIHByZXNlcnZl
172 cyB0aGUga25vd2xlZGdlCj4gb2Ygd2hhdCBpbnN0cnVjdGlvbiByZXF1aXJlZCB3aGljaCByZWdp
173 c3RlcnMsICphbmQqIHdobyB3aWxsIHByb2R1Y2UgdGhlCj4gcmVzdWx0Lgo+Cj4gdGhpcyB3ZSBj
174 YWxsIHRoZSBGVS1SZWdzIERlcGVuZGVuY3kgTWF0cml4Lgo+Cj4gdGhhdCAqcmVhbGx5IGlzIGl0
175 Ki4KPgo+IHRha2Ugc29tZSB0aW1lIHRvIGFic29yYiB0aGUgdHJhbnNmb3JtYXRpb24gd2hpY2gg
176 bm90IG9ubHkgcHJlc2VydmVzCj4gYWJzb2x1dGVseSBldmVyeSBmdW5jdGlvbmFsIGFzcGVjdCBv
177 ZiB0aGUgVG9tYXN1bG8gQWxnb3JpdGhtLCBpdAo+IGRyYXN0aWNhbGx5IHNpbXBsaWZpZXMgdGhl
178 IGltcGxlbWVudGF0aW9uLCByZWR1Y2VzIGdhdGUgY291bnQsIHJlZHVjZXMKPiBwb3dlciBjb25z
179 dW1wdGlvbiAqYW5kKiBwcm92aWRlcyBhIHN0cm9uZyBmb3VuZGF0aW9uIGZvciBkb2luZyBhcmJp
180 dHJhcnkKPiBtdWx0aS1pc3N1ZSBleGVjdXRpb24gd2l0aCBvbmx5IGFuIE8oTikgbGluZWFyIGlu
181 Y3JlYXNlIGluIGdhdGUgY291bnQgdG8gZG8KPiBzby4KPgo+Cj4gZnVydGhlciBoaWxhcmlvdXNs
182 eSBzaW1wbGUgYWRkaXRpb25hbCB0cmFuc2Zvcm1hdGlvbnMgb2NjdXIgdG8gcmVwbGFjZQo+IGZv
183 cm1lciBtYXNzaXZlIHJlc291cmNlIGNvbnN0cmFpbmVkIGJvdHRsZW5lY2tzLCBkdWUgdG8gdGhl
184 IGJpbmFyeQo+IG51bWJlcmluZyBvbiBib3RoIFJPQiBudW1iZXJzIGFuZCBSZWcgbnVtYmVycywg
185 d2l0aCBzaW1wbGUgbGFyZ2UgdW5hcnkgTk9SCj4gZ2F0ZXM6Cj4KPiAqIHRoZSBkZXRlcm1pbmF0
186 aW9uIG9mIHdoZW4gaGF6YXJkcyBhcmUgY2xlYXIsIG9uIGEgcGVyIHJlZ2lzdGVyIGJhc2lzLCBp
187 cwo+IGEgbGF1Z2hhYmx5IHRyaXZpYWwgTk9SIGdhdGUgYWNyb3NzIGFsbCBjb2x1bW5zIG9mIHRo
188 ZSBGVS1SRUdzIG1hdHJpeCwKPiBwcm9kdWNpbmcgYSByb3cgYml0dmVjdG9yIGZvciBlYWNoIHJl
189 YWQgcmVnaXN0ZXIgYW5kIGVhY2ggd3JpdGUgcmVnaXN0ZXIuCj4KPiAqIHRoZSBkZXRlcm1pbmF0
190 aW9uIG9mIHdoZW4gYSBGdW5jdGlvbiBVbml0IG1heSBwcm9jZWVkIGlzIGEgbGF1Z2hhYmx5Cj4g
191 dHJpdmlhbCBOT1IgZ2F0ZSBhY3Jvc3MgYWxsICpyb3dzKiBvZiB0aGUgKkZVLUZVKiBNYXRyaXgs
192 IHByb2R1Y2luZyBhCj4gcm93LWJhc2VkIHZlY3RvciwgZGV0ZXJtaW5pbmcgdGhhdCBpdCBpcyAi
193 cmVhZGFibGUiIGlmIHRoZXJlIGV4aXN0cyBubwo+IHdyaXRlIGhhemFyZCBhbmQgIndyaXRhYmxl
194 IiBpZiB0aGVyZSBleGlzdHMgbm8gcmVhZCBoYXphcmQuCj4KPiAqIHRoZSBUb21hc3VsbyBDb21t
195 b24gRGF0YSBCdXMsIGZvcm1lcmx5IGJlaW5nIGEgc2luZ2xlIGNob2tlcG9pbnQKPiBiaW5hcnkt
196 YWRkcmVzc2luZyBnbG9iYWwgQnVzLCBtYXkgbm93IGJlIHVwZ3JhZGVkIHRvICpNVUxUSVBMRSog
197 Q29tbW9uIERhdGEKPiBCdXNlcyB0aGF0LCBiZWNhdXNlIHRoZSBhZGRyZXNzaW5nIGluZm9ybWF0
198 aW9uIGFib3V0IHJlZ2lzdGVycyBpcyBub3cgaW4KPiB1bmFyeSwgaXMgbGlrZXdpc2UgbGF1Z2hh
199 Ymx5IHRyaXZpYWwgdG8gdXNlIGNhc2NhZGluZyBQcmlvcml0eSBQaWNrZXJzIChhCj4gbm1pZ2Vu
200 IFByaW9yaXR5RW5jb2RlciBhbmQgRGVjb2RlciwgYmFjay10by1iYWNrKSB0byBkZXRlcm1pbmUg
201 d2hpY2gKPiBGdW5jdGlvbiBVbml0IHNoYWxsIGJlIGdyYW50ZWQgYWNjZXNzIHRvIHdoaWNoIENE
202 QiBpbiBvcmRlciB0byByZWNlaXZlIChvcgo+IHNlbmQpIGl0cyBvcGVyYW5kIChvciByZXN1bHQp
203 Lgo+Cj4gKiBtdWx0aS1pc3N1ZSBhcyBpIG1lbnRpb25lZCBhIGZldyB0aW1lcyBpcyBhbiBlcXVh
204 bGx5IGxhdWdoYWJseSB0cml2aWFsCj4gbWF0dGVyIG9mIHRyYW5zaXRpdmVseSBjYXNjYWRpbmcg
205 dGhlIFJlZ2lzdGVyIERlcGVuZGVuY3kgSGF6YXJkcyAoYm90aCByZWFkCj4gYW5kIHdyaXRlKSBh
206 Y3Jvc3MgZnV0dXJlIGluc3RydWN0aW9ucyBpbiB0aGUgc2FtZSBtdWx0aSBpc3N1ZSBleGVjdXRp
207 b24KPiB3aW5kb3cuIGluc3RyMiBoYXMgaW5zdHIxIEFORCBpbnN0cjIncyBoYXphcmRzLiAgaW5z
208 dHIzIGhhcyBpbnN0cjEgQU5ECj4gaW5zdHIyIEFORCBpbnN0cjMncyBoYXphcmRzIGFuZCBzbyBv
209 bi4gIHRoaXMganVzdCBsZWF2ZXMgdGhlIG5lY2Vzc2l0eSBvZgo+IGluY3JlYXNpbmcgcmVnaXN0
210 ZXIgcG9ydCBudW1iZXJzLCBudW1iZXIgb2YgQ0RCcywgYW5kIExEL1NUIG1lbW9yeQo+IGJhbmR3
211 aWR0aCB0byBjb21wZW5zYXRlIGFuZCBjb3BlIHdpdGggdGhlIGFkZGl0aW9uYWwgcmVzb3VyY2Ug
212 ZGVtYW5kcyB0aGF0Cj4gd2lsbCBub3cgb2NjdXIuCj4KPiB0aGUgbGF0dGVyIGlzIHBhcnRpY3Vs
213 YXJseSB3aHkgd2UgaGF2ZSBhIGRlc2lnbiB0aGF0LCB1bHRpbWF0ZWx5LCB3ZSBjb3VsZAo+IHRh
214 a2Ugb24gQVJNLCBJbnRlbCwgYW5kIEFNRC4KPgo+IHRoZXJlIGlzIG5vIHJlYXNvbiB0ZWNobmlj
215 YWxseSB3aHkgd2UgY291bGQgbm90IGRvIGEgNCwgNiBvciA4IG11bHRpIGlzc3VlCj4gc3lzdGVt
216 LCBhbmQgd2l0aCBlbm91Z2ggRnVuY3Rpb24gVW5pdHMgYW5kIHRoZSBjeWNsaWMgYnVmZmVyIHN5
217 c3RlbSAoc28gYXMKPiBub3QgdG8gcmVxdWlyZSBhIGZ1bGwgY3Jvc3NiYXIgYXQgdGhlIENvbW1v
218 biBEYXRhIEJ1c2VzKSwgYW5kIHByb3Blcgo+IHN0cmF0aWZpY2F0aW9uIGFuZCBkZXNpZ24gb2Yg
219 dGhlIHJlZ2lzdGVyIGZpbGVzLCBtYXNzaXZlIFZlY3RvciBwYXJhbGxlbGlzbQo+IGF0IHRoZSBw
220 aXBlbGluZXMgd291bGQgYmUga2VwdCBmdWxseSBvY2N1cGllZCB3aXRob3V0IGFuIG92ZXJ3aGVs
221 bWluZwo+IGluY3JlYXNlIGluIGdhdGVzIG9yIHBvd2VyIGNvbnN1bXB0aW9uIHRoYXQgd291bGQg
222 bm9ybWFsbHkgYmUgZXhwZWN0ZWQsIGFuZAo+IHNjYWxhciBwZXJmb3JtYW5jZSB3b3VsZCBiZSBz
223 aW1pbGFybHkgaGlnaCBhcyB3ZWxsLgo+Cj4gbC4KPgo+Cj4KPgo+IC0tCj4gLS0tCj4gY3Jvd2Qt
224 ZnVuZGVkIGVjby1jb25zY2lvdXMgaGFyZHdhcmU6IGh0dHBzOi8vd3d3LmNyb3dkc3VwcGx5LmNv
225 bS9lb21hNjgKPiBfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
226 Xwo+IGxpYnJlLXJpc2N2LWRldiBtYWlsaW5nIGxpc3QKPiBsaWJyZS1yaXNjdi1kZXZAbGlzdHMu
227 bGlicmUtcmlzY3Yub3JnCj4gaHR0cDovL2xpc3RzLmxpYnJlLXJpc2N2Lm9yZy9tYWlsbWFuL2xp
228 c3RpbmZvL2xpYnJlLXJpc2N2LWRldgoKX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
229 X19fX19fX19fX19fX18KbGlicmUtcmlzY3YtZGV2IG1haWxpbmcgbGlzdApsaWJyZS1yaXNjdi1k
230 ZXZAbGlzdHMubGlicmUtcmlzY3Yub3JnCmh0dHA6Ly9saXN0cy5saWJyZS1yaXNjdi5vcmcvbWFp
231 bG1hbi9saXN0aW5mby9saWJyZS1yaXNjdi1kZXYK
232