[libre-riscv-dev] [Bug 335] New: Formal Correctness Proof for Branch pipeline
[libre-riscv-dev.git] / 17 / 1721715cc7968aa3c25d43c1999f8c2b317560
1 Return-path: <libre-riscv-dev-bounces@lists.libre-riscv.org>
2 Envelope-to: publicinbox@libre-riscv.org
3 Delivery-date: Tue, 19 May 2020 14:48:02 +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 1jb2bA-0001BH-Up; Tue, 19 May 2020 14:48:00 +0100
8 Received: from lkcl.net ([217.147.94.29])
9 by libre-soc.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128)
10 (Exim 4.89) (envelope-from <lkcl@lkcl.net>) id 1jb2b9-0001BB-F6
11 for libre-riscv-dev@lists.libre-riscv.org; Tue, 19 May 2020 14:47:59 +0100
12 DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=lkcl.net;
13 s=201607131;
14 h=Content-Type:To:Subject:Message-ID:Date:From:MIME-Version;
15 bh=xsRbixC+5Oi5SDUDIMWSxVdm+u/cRB+WeGpcMG0osuM=;
16 b=KMvQY4YnFpEWrqLHFAVbMDm5PqW6JuaT/CnA1ZYIfCEfFj1QtsUkjL8oeGTm7ws+cm3y2Oesvs4ctKXaVZokSPmlXhzvhkhSakgpZjjCJyXJmyyzqqfpdHvEBaid9ILaxc0WJi1L7UyMX+ptUMYCDgwD+IEsZWmeZh9yzTF/PjE=;
17 Received: from mail-lf1-f46.google.com ([209.85.167.46])
18 by lkcl.net with esmtpsa (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128)
19 (Exim 4.84_2) (envelope-from <lkcl@lkcl.net>) id 1jb2b9-0006JA-1O
20 for libre-riscv-dev@lists.libre-riscv.org; Tue, 19 May 2020 13:47:59 +0000
21 Received: by mail-lf1-f46.google.com with SMTP id c12so7832558lfc.10
22 for <libre-riscv-dev@lists.libre-riscv.org>;
23 Tue, 19 May 2020 06:47:43 -0700 (PDT)
24 X-Gm-Message-State: AOAM530VBOt84j4MOlNJlpZ3gSpBOJaq8xExQCILPyq3LYcVMSealsCZ
25 Wv5hlSCyceHpHXnv1VBbyD+PcA9OgyDM42mj57A=
26 X-Google-Smtp-Source: ABdhPJwth8ABBjwEJ9pkVS5hoy7sgpRfIjIYnJM7pRUkWvzFxEmEyFOZ+gYpGIzfaaNncS2sr3wAO+8duy163igjlto=
27 X-Received: by 2002:a19:4f46:: with SMTP id a6mr7525572lfk.107.1589896057800;
28 Tue, 19 May 2020 06:47:37 -0700 (PDT)
29 MIME-Version: 1.0
30 Received: by 2002:a05:6504:31aa:0:0:0:0 with HTTP; Tue, 19 May 2020 06:47:36
31 -0700 (PDT)
32 From: Luke Kenneth Casson Leighton <lkcl@lkcl.net>
33 Date: Tue, 19 May 2020 14:47:36 +0100
34 X-Gmail-Original-Message-ID: <CAPweEDx6dn2i1YcUYX3DqH1Z29BmGOSt15-LEGEMykrwZipziw@mail.gmail.com>
35 Message-ID: <CAPweEDx6dn2i1YcUYX3DqH1Z29BmGOSt15-LEGEMykrwZipziw@mail.gmail.com>
36 To: Libre-RISCV General Development <libre-riscv-dev@lists.libre-riscv.org>
37 X-Content-Filtered-By: Mailman/MimeDel 2.1.23
38 Subject: [libre-riscv-dev] Tomasulo and Scoreboards
39 X-BeenThere: libre-riscv-dev@lists.libre-riscv.org
40 X-Mailman-Version: 2.1.23
41 Precedence: list
42 List-Id: Libre-RISCV General Development
43 <libre-riscv-dev.lists.libre-riscv.org>
44 List-Unsubscribe: <http://lists.libre-riscv.org/mailman/options/libre-riscv-dev>,
45 <mailto:libre-riscv-dev-request@lists.libre-riscv.org?subject=unsubscribe>
46 List-Archive: <http://lists.libre-riscv.org/pipermail/libre-riscv-dev/>
47 List-Post: <mailto:libre-riscv-dev@lists.libre-riscv.org>
48 List-Help: <mailto:libre-riscv-dev-request@lists.libre-riscv.org?subject=help>
49 List-Subscribe: <http://lists.libre-riscv.org/mailman/listinfo/libre-riscv-dev>,
50 <mailto:libre-riscv-dev-request@lists.libre-riscv.org?subject=subscribe>
51 Reply-To: Libre-RISCV General Development
52 <libre-riscv-dev@lists.libre-riscv.org>
53 Content-Type: text/plain; charset="utf-8"
54 Content-Transfer-Encoding: base64
55 Errors-To: libre-riscv-dev-bounces@lists.libre-riscv.org
56 Sender: "libre-riscv-dev" <libre-riscv-dev-bounces@lists.libre-riscv.org>
57
58 T24gVHVlc2RheSwgTWF5IDE5LCAyMDIwLCBTdGFmIFZlcmhhZWdlbiA8c3RhZkBmaWJyYXNlcnZp
59 LmV1PiB3cm90ZToKCj4gTHVrZSBLZW5uZXRoIENhc3NvbiBMZWlnaHRvbiBzY2hyZWVmIG9wIG1h
60 IDE4LTA1LTIwMjAgb20gMTI6NDUgWyswMTAwXToKPiA+ICogYW5kIGhhZCBhIGZhc2NpbmF0aW5n
61 IGNvbnZlcnNhdGlvbiB0aGFua3MgdG8geWVob3dzaHVhIGFuZCBqZXJlbXkoYWxzbwo+IHdlbGNv
62 bWUhKSwgd2hpY2ggcmVzdWx0ZWQgaW4gdGhpcyhodHRwczovL2xpYnJlLXNvYy5vcmcvM2RfCj4g
63 Z3B1L2FyY2hpdGVjdHVyZS90b21hc3Vsb190cmFuc2Zvcm1hdGlvbi8pLgo+Cj4gSWYgSSB1bmRl
64 cnN0YW5kIHRoaXMgY29ycmVjdCB0aGUgYmlnIGFyY2hpdGVjdHVyYWwgZGlmZmVyZW5jZSBiZXR3
65 ZWVuCj4gZXh0ZW5kZWQgc2NvcmVib2FyZGluZyBhbmQgVG9tYXN1bG8gaXMgdGhhdCBpbiB0aGUg
66 Zm9ybWVyIHRoZSByZWdpc3Rlcgo+IGNvbnRlbnQgaXMgc3RvcmVkIGluIGEgY2VudHJhbCByZWdp
67 c3RlciBmaWxlIGFuZCBmb3IgdGhlIGxhdHRlciBpdCBpcwo+IGRpc3RyaWJ1dGVkIG92ZXIgc2V2
68 ZXJhbCAncmVzZXJ2YXRpb24gc3RhdGlvbnMnLgoKCm5vdCBxdWl0ZS4gdGhpcyBpcyB0aGUgbnVt
69 YmVyIG9uZSBtaXN1bmRlcnN0YW5kaW5nIGFib3V0IFNjb3JlYm9hcmRzLCBkdWUKdG8gdGhlIEFj
70 YWRlbWljIGV4Y2x1c2l2ZSBmb2N1cyBvbiB0aGUgUSBUYWJsZXMuICBpdCBpcyBzaW1pbGFyIHRv
71 CmZvY3Vzc2luZyBvbiB0aGUgUk9CIGFuZCBjb25jbHVkaW5nIHRoYXQgVG9tYXN1bG8gZXF1YWxz
72 IFJPQiB0aGVyZWZvcmUKVG9tYXN1bG8gaXMgaW5jb21wZXRlbnQgYW5kIGluY29tcGxldGUsIGlu
73 Y2FwYWJsZSBvZiBPdXQgb2YgT3JkZXIgZXhlY3V0aW9uLgoKIHRoZSByZWFsaXR5IGlzIHZlcnkg
74 ZGlmZmVyZW50OiB0aGVyZSBpcyBhY3R1YWxseSBubyBmdW5jdGlvbmFsIGRpZmZlcmVuY2UuCgoq
75 IGJvdGggaGF2ZSBjZW50cmFsIHJlZ2lzdGVyIGZpbGVzCiogYm90aCBoYXZlICJpbiBmbGlnaHQi
76 IGRpc3RyaWJ1dGVkICJzdG9yYWdlIiB0aGF0IGhvbGQgcmVzdWx0cyBub3QgeWV0CmNvbW1pdHRl
77 ZCB0byB0aGUgcmVnZmlsZS4KCnRoZSBkaWZmZXJlbmNlIGlzOgoKKiBUb21hc3VsbyBpZGVudGlm
78 aWVkIGluLWZsaWdodCBhcyAiYmVpbmcgYSBwcm9ibGVtIiwgZ2F2ZSBhIG5hbWUgdG8gdGhlCmNv
79 bmNlcHQgKCJyZWdpc3RlciByZW5hbWluZyIpIGFuZCB1c2VkIENBTXMgaW4gdGhlIGZvcm0gb2Yg
80 UmVzZXJ2YXRpb24KU3RhdGlvbnMgdG8gZXhwbGljaXRseSAiaG91c2UiIHRoaXMgZGlzdHJpYnV0
81 ZWQgaW4tZmxpZ2h0IGRhdGEuCgoqIFNleW1vdXIgQ3JheSBhbmQgSmFtZXMgVGhvcm50b24gc2lt
82 cGx5IGdvdCBvbiB3aXRoIGl0LCBjb21pbmcgdXAgd2l0aCBhbgppbi1mbGlnaHQgc29sdXRpb24g
83 d2hlcmUgdGhlcmUgKndhcyogbm8gbmVlZCB0byBnaXZlIHRoZSBpbi1mbGlnaHQgZGF0YQoibmFt
84 ZXMiLiAgdGhleSB3ZXJlIGp1c3QgIkNvbXB1dGF0aW9uIFVuaXQgb3BlcmFuZCBsYXRjaC9yZWdp
85 c3RlcnMiLgoKYmVjYXVzZSB0aGV5IGRpZCBub3Qgc2VlIGl0IGFzIGFuIGFjdHVhbCAicHJvYmxl
86 bSIsIHRoZXJlIHdhcyBub3RoaW5nIHRvCiJ0YWxrIGFib3V0Ii4gIGl0IGlzIG9ubHkgdGhyb3Vn
87 aCByZXRyb3NwZWN0aXZlIGFuc2x5c2lzIHRoYXQgd2UgZmluZCB0aGF0CnRoZXkgc29sdmVkIHRo
88 ZSAicHJvYmxlbSIuCgp3aGF0IGkgY2FuIHRlbGwgeW91IGlzOgoKKiB0aG9zZSBsYXRjaGVzIGlu
89 IHRoZSBDb21wdXRhdGlvbiBVbml0ICphcmUqIFJlc2VydmF0aW9uIFN0YXRpb24gbGF0Y2hlcwoq
90 IGEgQ0FNIGlzICpOT1QqIG5lZWRlZAoqIHRoZXkgKmFyZSogMVIxVyBhbmQgREZGcyBhcmUgcGVy
91 ZmVjdGx5IGFkZXF1YXRlIHRvIGNvdmVyIHRoZW0KKiBjZW50cmFsaXNpbmcgdGhlbSBpcyBOT1Qg
92 bmVlZGVkIGFuZCBpdCB3b3VsZCBiZSBzZXZlcmVseSBkZXRyaW1lbnRhbCB0bwp0cnkgdG8gZG8g
93 c28uCgoKCj4gSW4gb3JkZXIgdG8gc2NhbGUgdG8gZm9yIGV4YW1wbGUgbXVsdGktaXNzdWUgeW91
94 IG5lZWQgdG8gZ28gdG8gaGlnaGVyCj4gb3JkZXIgblJtVyByZWdpc3RlciBmaWxlcyBmb3Igc2Nv
95 cmVib2FyZGluZwoKCnRoaXMgaXMgbmVjZXNzYXJ5IGZvciBUb21hc3VsbyBhcyB3ZWxsLiAgaSBh
96 bSByZWZlcnJpbmcgdG8gdGhlIElOVCBSZWdmaWxlLApub3QgdG8gdGhlIChtaXN1bmRlcnN0b29k
97 KSBpbmZsaWdodCBkYXRhIGxhdGNoZXMgbG9jYWwgdG8gUlNlcyAvCkNvbXB1dGF0aW9uIFVuaXRz
98 LgoKCj4KPiBhbmQgZm9yIFRvbWFzdWxvIHlvdSBpbmNyZWFzZSB0aGUgbnVtYmVyIG9mIHJlc2Vy
99 dmF0aW9uIHN0YXRpb25zCgoKbGlrZXdpc2UgeW91IGluY3JlYXNlIHRoZSBudW1iZXIgb2YgQ29t
100 cHV0YXRpb24gVW5pdHMgYmVjYXVzZSBkb2luZyBzbwppbmNyZWFzZXMgaW5mbGlnaHQgb3Bwb3J0
101 dW5pdHkuCgoKPgo+ICB0b2dldGhlciB3aXRoIGEgbW9yZSBjb21wbGV4IHRyYWNrZXIgb2YgdGhl
102 IHJlZ2lzdGVyIHRhZ2dpbmcvYWxpYXNpbmcuCgoKaW4gVG9tYXN1bG8sIHllcy4gIGl0IHF1aWNr
103 bHkgYmVjb21lcyBhIG5pZ2h0bWFyZSwgYXQgdGhlIFJTIENBTXMsIHRoZSBDREIsCnRoZSBST0Ig
104 LSBpbiBmYWN0IGV2ZXJ5dGhpbmcgdG8gZG8gd2l0aCB0aGUgZW50aXJlIFRvbWFzdWxvIGFsZ29y
105 aXRobS4KCmZvciBTY29yZWJvYXJkcywgbm8uICB0aGUgZXhhY3Qgc2FtZSBsb2dpYywgYnkgZW5j
106 b2RpbmcgYWxsIEZ1bmN0aW9uIFVuaXQKYW5kIFJlZ2lzdGVyIE51bWJlcnMgaW4gVU5BUlkgbm90
107 IGJpYmFyeSwgaXMgYXV0b25hdGljYWxseSBhbmQgaW5oZXJlbnRseQptdWx0aS1pc3N1ZSBjYXBh
108 YmxlIEJZIERFU0lHTi4KCmFsbW9zdCB6ZXJvIGV4dHJhIGxvZ2ljIGlzIHJlcXVpcmVkIHRvIG1h
109 a2UgVW5hcnkgKGJpdHZlY3RvcikgU2NvcmVib2FyZHMKbXVsdGkgaXNzdWUuCgoKCj4gU28gc29t
110 ZSAyIGNlbnRzIGZyb20gbWUuCj4gRnJvbSBwaHlzaWNhbCBpbXBsZW1lbnRhdGlvbiBwb2ludCBv
111 ZiB2aWV3IHRoZSBjZW50cmFsIGhpZ2ggb3JkZXIgblJtVwo+IHJlZ2lzdGVyIGZpbGUgYW5kIHNj
112 b3JlYm9hcmQgZG9lcyB3b3JyeSBtZS4KCgpkdWUgdG8gdGhlICh2ZXJ5IGNvbW1vbikgbWlzdW5k
113 ZXJzdGFuZGluZywgZ2l2ZW4gdGhhdCB0aGVyZSBpcyBubwpjZW50cmFsaXNlZCBzY29yZWJvYXJk
114 IHJlZ2ZpbGUsIGdpdmVuIHRoYXQgdGhlIGluZmxpZ2h0IGRhdGEgeW91IChhbmQgYWxsCkFjYWRl
115 bWljIGxpdGVyYXR1cmUgbWlzbGVhZGluZ2x5IHN0YXRlcykgaXMgZGlzdHJpYnV0ZWQgbm90IGNl
116 bnRyYWxpc2VkLAp0aGlzIGNvbmNlcm4gaXMgbW9vdC4KCndlIHdpbGwgdXNlIHN0YW5kYXJkIERG
117 RnMgdG8gc3RvcmUgdGhlIGluLWZsaWdodCBkYXRhLCBhcyBhbiBhYnNvbHV0ZWx5CnN0YW5kYXJk
118 ICJsYXRjaC9yZWdpc3RlciIsIGF0IHRoZSBDb21wVW5pdC4gdGhpcyBoYXMgYmVlbiBpbXBsZW1l
119 bnRlZCBvdmVyCmEgeWVhciBhZ28gYW5kIGhhcyBiZWVuIHdvcmtpbmcgZm9yIG92ZXIgYSB5ZWFy
120 LgoKCj4gSGlnaGVyIG9yZGVyIG5SbVcgcmVnaXN0ZXIgZmlsZXMgd2lsbCBiZWNvbWUgcG93ZXIg
121 YW5kIGFyZWEgaHVuZ3J5Cj4gY29tcGFyZWQgdG8gbXVsdGlwbGUgbG93ZXIgb3JkZXIgcmVzZXJ2
122 YXRpb24gc3RhdGlvbnMuCj4gSSBoYXZlIHNlZW4gbnVtYmVycyBvZiBhIGZldyB0ZW5zIG9mIGZ1
123 bmN0aW9uYWwgdW5pdHMgaW4geW91ciBkZXNpZ24uIEkKPiB0aGluayBpdCB3aWxsIGJlY29tZSBh
124 bHNvIGEgbmlnaHRtYXJlIHRvIGNvbm5lY3QgYW5kIHJvdXRlIGFsbCB0aGUgaW5wdXQKPiBhbmQg
125 b3V0cHV0cyBvZiBhbGwgdGhlIGZ1bmN0aW9uYWwgdW5pdHMgdG8gdGhlIGNlbnRyYWwgcmVnaXN0
126 ZXIgZmlsZSBhbmQKPiBzY29yZWJvYXJkLgoKCmkgYW0gZ29pbmcgb3ZlciB0aGlzIG5vdy4gIHRo
127 ZSBkaWZmZXJlbnQgcmVnZmlsZXMgKENvbmRpdGlvbiwgSU5ULCBTUFIsClhFUikgYXJlIHNlcGFy
128 YXRlIGFuZCBzbyBmcm9tIGEgU1JBTSBwb3J0aW5nIHBlcnNwZWN0aXZlIGFsbCBuZWVkIDFXICh3
129 aXRoCnRoZSBleGNlcHRpb24gb2YgTERTVCBVcGRhdGUgd2hpY2ggY2FuIGJlIHRpbWVzbGljZWQp
130 Cgp0aGUgbWF4aW11bSBudW1iZXIgb2YgcmVhZCBwb3J0cyBmb3IgYW55IG9uZSBSZWdmaWxlIFNS
131 QU0gaXMgMy4gIDQgd291bGQgYmUKbmljZS4KCnNvIHdlIG9ubHkgbmVlZCA0UjFXIHdoaWNoIGlz
132 IGRvYWJsZS4KCndoZW4gaXQgY29tZXMgdG8gbXVsdGkgaXNzdWUgdGhpcyBpcyB3aGVyZSB0aGUg
133 c3RyYXRpZmljYXRpb24gT0RELUVWRU4KUmVnZmlsZSBudW1iZXJpbmcgY29tZXMgaW50byBwbGF5
134 LCBhbmQgd2UgKnN0aWxsKiBvbmx5IG5lZWQgNFIxVy4KCgo+ICBTbyBhdCBmaXJzdCBzaWdodCwg
135 ZnJvbSBwaHlzaWNhbCBpbXBsZW1lbnRhdGlvbiBwb2ludCBmb3Igc21hbGxlciBub2RlcywKPiB0
136 aGUgVG9tYXN1bG8gYWxnb3JpdGhtIHNlZW1zIG1vcmUgc2NhbGFibGUgdGhhbiBleHRlbmRlZCBz
137 Y29yZWJvYXJkaW5nLgoKCml0IGRlZmluaXRlbHkgaXNuJ3QuCgp0byBnZXQgbXVsdGkgaXNzdWUg
138 aW4gVG9tYXN1bG8geW91IG5lZWQgbXVsdGlwbGUgQ29tbW9uIERhdGEgQnVzZXMsCm90aGVyd2lz
139 ZSBpdCBiZWNvbWVzIGV2ZW4gbW9yZSBhIGJvdHRsZW5lY2sgdGhhbiBpdCBhbHJlYWR5IGlzLiBh
140 c3N1bWluZyA0Cmlzc3VlLCB0byBhY2hpZXZlIHRoaXMgdGhlIFJPQiBuZWVkcyB0byBiZSBtYWRl
141 IGEgbXVsdGkgcG9ydGVkICg0UjRXKSBTUkFNLAphbmQsIHdvcnNlLCB0aGUgUmVzZXJ2YXRpb25T
142 dGF0aW9uIENBTXMgbm93IGFsc28gbmVlZCB0byBiZSA0UjRXLgoKcGx1cyBzb21lIG90aGVyIG5p
143 Z2h0bWFyZSBhc3BlY3RzLgoKCj4gIEkgaW5kaWNhdGVkIGJlZm9yZSB0aGF0IGluIHNtYWxsZXIg
144 bm9kZXMgcG93ZXIgY29uc3VtcHRpb24gYW5kIGRlbGF5IGlzCj4gbWFpbmx5IGRldGVybWluZWQg
145 YnkgdGhlIGxlbmd0aCBvZiB0aGUgaW50ZXJjb25uZWN0cyBhbmQgbm90IGJ5IHRoZSBpbnB1dAo+
146 IGxvYWQgb2YgdGhlIGxvZ2ljIGdhdGVzIGl0c2VsZjsgaW4gMTgwbm0gaXQgd2lsbCBiZSBtb3Jl
147 IGZpZnR5L2ZpZnR5LgoKCmFoLCBhcHByZWNpYXRlZCB0aGUgaW5zaWdodAoKd2l0aCB0aGUgQ29t
148 cHV0YXRpb24gVW5pdHMgbGF0Y2hlcyBiZWluZyBkaXN0cmlidXRlZCwgbm90IGNlbnRyYWxpc2Vk
149 LAp0aGVzZSBsYXRjaGVzIGNhcHR1cmUgdGhlIG9wZXJhbmRzIGNsb3NlIHRvIHRoZSBwb2ludCB3
150 aGVyZSB0aGV5IHdpbGwgYmUKZmVkIGludG8gdGhlIHBpcGVsaW5lcy4KCmkgcGxhbiB0byBoYXZl
151 IHRoZSBwaXBlbGluZXMgImRvdWJsZSBiYWNrIiBvbiB0aGVtc2VsdmVzLCBwbGFjaW5nIHRoZQpy
152 ZXN1bHQgKmJhY2sqIHdoZXJlIHRoZSBDb21wdXRhdGlvbiBVbml0IG1heSBsYXRjaCB0aGUgcmVz
153 dWx0LCBlYXNpbHksIHRoZW4Kd2FpdCBmb3IgdGhlIFJlZ2ZpbGUgQ29tbW9uIERhdGEgQnVzIGRl
154 ZGljYXRlZCB0byB3cml0aW5nIHRvIHRoZSByZWdmaWxlLgoKdGhlc2UgQnJvYWRjYXN0IEJ1c2Vz
155 IGFyZSBhbiB1bmF2b2lkYWJsZSBuZWNlc3NpdHkgYW5kIHdpbGwgbmVlZCBjYXJlZnVsCmRlc2ln
156 biBhbmQgbGF5b3V0LCBhbmQgYnVmZmVycyB0byBlbnN1cmUgdGhleSBjYW4gYmUgZHJpdmVuIGF0
157 IHNwZWVkLgoKYm90aCBUb21hc3VsbyBhbmQgU2NvcmVib2FyZHMgcmVxdWlyZSB0aGVzZSBsYXJn
158 ZSBmYW5vdXQgLyBmYW5pbiBCcm9hZGNhc3QKUmVnZmlsZSBCdXNlcy4KCmV4Y2VwdCB0aGF0IGlu
159 IFNjb3JlYm9hcmRzLCBSRUFEIGlzIGNvbXBsZXRlbHkgc2VwYXJhdGUgZnJvbSBXUklURS4KdGhl
160 cmVmb3JlLCBSRUFEIGlzIGZhbm91dCBPTkxZIGFuZCBXUklURSBpcyBmYW5pbiBPTkxZLgoKdGhp
161 cyBtYWtlcyBhIGNydWNpYWwgZGlmZmVyZW5jZSBiZWNhdXNlIHRoZSBUb21hc3VsbyBDREIgaXMg
162 YSBzaW5nbGUgcGF0aApSRUFEICpBTkQqIFdSSVRFIGNvbnRlbmRlZCBnbG9iYWwgcmVzb3VyY2Uu
163 CgpzaW5nbGUgZm9yIGRlbGl2ZXJ5IG9mICpBTEwqIGluZmxpZ2h0IGRhdGEuCgogQXMgSmVyZW15
164 IGluZGljYXRlZCB0aGlzIGlzIG5leHQgdG8gdGhlIHBvd2VyIGNvbnN1bXB0aW9uIGluIHRoZSBy
165 ZWdpc3Rlcgo+IGZpbGVzIGFuZCBjYWNoZSB3aGljaCBzY2FsZXMgd2l0aCB0aGUgdG90YWwgYml0
166 IGNvdW50IG9mIHRoZSBibG9jayBhbmQgdGhlCj4gblJtVyBvcmRlciBvZiB0aGUgYmxvY2suCgoK
167 NFIxVy4KCgo+IEFsc28gdGhlIHRyYXZpYWxuZXNzIG9mIGEgYmlnIGZhbi1pbiBOT1Igb3IgTkFO
168 RCBnYXRlIG1heSBiZSBkZWNlcHRpdmUsCj4gdGhlc2UgZ2F0ZXMgYXJlIG5vdCBmZWFzaWJsZSBh
169 bmQgd2lsbCBiZSBzeW50aGVzaXplZCB0byB0cmVlcyBvZiBOQU5EL05PUgo+IGdhdGVzLgoKCnBl
170 cmZlY3QuICBhcyBleHBlY3RlZC4gIGRpYWdyYW1zIGluIE1pdGNoJ3MgYm9vayBjaGFwdGVycyBz
171 aG93IHRoaXMgYmVpbmcKZG9uZSwgZXNwZWNpYWxseSBvbiB0aGUgMzIgcmVnIHZlY3RvcnMuCgoK
172 Cj4KPiAgSW4gdGhhdCByZXNwZWN0IGEgaGlnaCBmYW4taW4gTk9SL05BTkQgY2FuIGhhdmUgc2lt
173 aWxhciB0aW1lL3Bvd2VyCj4gY29uc3VtcHRpb24gdGhhbiBhIHNlZW1pbmdseSBtb3JlIGNvbXBs
174 ZXggY2FzZSBvZiBpZiBzdGF0ZW1lbnQuIEluIHplcm8KPiBvcmRlciwgZm9yIHNpbmdsZSBvdXRw
175 dXQgYmxvY2ssIGRlbGF5IGFuZCBwb3dlciBpcyBkZXRlcm1pbmVkIGJ5IHRoZSBudW1iZXIKPiBv
176 ZiBpbnB1dHMgaW5kZXBlbmRlbnQgb2YgdGhlIGNvbXBsZXhpdHkgb2YgdGhlIFJUTC9IREwgY29k
177 ZS4gSW4gZmlyc3Qgb3JkZXIKPiBvbmUgaGFzIHRvIGFjY291bnQgdGhhdCBOQU5EL05PUiBsb2dp
178 YyBpcyBtb3JlIGVmZmljaWVudCB0aGFuIFhPUi9YTk9SCj4gbG9naWMgYnV0IGZvciBiaWdnZXIg
179 dHJlZXMgdGhpcyBkaWZmZXJlbmNlIGlzIGxlc3MgcHJvbm91bmNlZCBhcyBYT1IvWE5PUgo+IHRy
180 ZWVzIHdpbGwgYmUgc3ludGhlc2l6ZWQgdG8gbW9yZSBlZmZpY2llbnQgdHJlZXMgdXNpbmcgQU9J
181 IChhbmQtb3ItaW52ZXJ0KQo+IGNlbGxzLgoKCmFwcHJlY2lhdGUgdGhlIGluc2lnaHRzLCBTdGFm
182 LgoKdG8gc3VtbWFyaXNlLCB0aGVuOgoKKiB3ZSBoYXZlIHNvbWUgY29udGludW91cyBtaXN1bmRl
183 cnN0YW5kaW5ncyBmcm9tIHRoZSBBY2FkZW1pYyBsaXRlcmF0dXJlCndoaWNoIHBlb3BsZSBjb250
184 aW51ZSB0byBiZWxpZXZlLCBhbmQgbmVlZCB0byBiZSBzdG9tcGVkIG9uIHdoZW5ldmVyIHRoZXkK
185 b2NjdXIuICBuaWNlbHkuCiogd2UgaGF2ZSBzb21lIGJpZyBOT1IvTkFORCBnYXRlcyAoMzIgaW4p
186 IHdoaWNoIGNyZWF0ZSBhIGNhc2NhZGUuICB0aGVzZQphcmUgZXhwZWN0ZWQuCiogREZGcyBhcmUg
187 dXNlZCBhdCB0aGUgZGVjZW50cmFsaXNlZCBDb21wdXRhdGlvbiBVbml0cyB0byBzdG9yZQpkZWNl
188 bnRyYWxpc2VkIGluZmxpZ2h0IGRhdGEKKiBDZW50cmFsaXNlZCA0UjFXIFJlZ2ZpbGVzIHN0b3Jl
189 IGNlbnRyYWxpc2VkIHJlZ2lzdGVyIGRhdGEuCiogVW5pZGlyZWN0aW9uYWwgQnJvYWRjYXN0IEJ1
190 c2VzIHRyYW5zZmVyIGRhdGEgYmV0d2VlbiBDb21wIFVuaXRzIGFuZApSZWdmaWxlcy4KCmwuCgoK
191 Ci0tIAotLS0KY3Jvd2QtZnVuZGVkIGVjby1jb25zY2lvdXMgaGFyZHdhcmU6IGh0dHBzOi8vd3d3
192 LmNyb3dkc3VwcGx5LmNvbS9lb21hNjgKX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
193 X19fX19fX19fX19fX18KbGlicmUtcmlzY3YtZGV2IG1haWxpbmcgbGlzdApsaWJyZS1yaXNjdi1k
194 ZXZAbGlzdHMubGlicmUtcmlzY3Yub3JnCmh0dHA6Ly9saXN0cy5saWJyZS1yaXNjdi5vcmcvbWFp
195 bG1hbi9saXN0aW5mby9saWJyZS1yaXNjdi1kZXYK
196