[libre-riscv-dev] [Bug 216] LOAD STORE buffer needed
[libre-riscv-dev.git] / aa / 4e696ee3391c2bf3c379e79ed973da67eb310e
1 Return-path: <libre-riscv-dev-bounces@lists.libre-riscv.org>
2 Envelope-to: publicinbox@libre-riscv.org
3 Delivery-date: Tue, 24 Mar 2020 16:05:50 +0000
4 Received: from localhost ([::1] helo=libre-riscv.org)
5 by libre-riscv.org with esmtp (Exim 4.89)
6 (envelope-from <libre-riscv-dev-bounces@lists.libre-riscv.org>)
7 id 1jGm3q-0004U7-CT; Tue, 24 Mar 2020 16:05:50 +0000
8 Received: from lkcl.net ([217.147.94.29])
9 by libre-riscv.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128)
10 (Exim 4.89) (envelope-from <lkcl@lkcl.net>) id 1jGm3o-0004U1-P2
11 for libre-riscv-dev@lists.libre-riscv.org; Tue, 24 Mar 2020 16:05:48 +0000
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:In-Reply-To:References:MIME-Version;
15 bh=/vYjM3WcKB2HS/8yHM9GETPVFDNFRNIGM+qcBIrFEds=;
16 b=Ji3SODVzzk0qn/aFdUdMNRSUI3oU0k6rmlNHDMm6qNNjZc/Vd/rKZj7o2hxCdi/5DzzLnahP7BjOH7a5OpDzYESoGwUNVlnLbD/xSlJZIxjXVtLX1TFWgKkYA67VxCf8bSftPnPrd3rbJ0n7+rvGwPPZrt18ilO1zILdjGWR0Iw=;
17 Received: from mail-lf1-f54.google.com ([209.85.167.54])
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 1jGm3o-0006TX-DL
20 for libre-riscv-dev@lists.libre-riscv.org; Tue, 24 Mar 2020 16:05:48 +0000
21 Received: by mail-lf1-f54.google.com with SMTP id j17so13694249lfe.7
22 for <libre-riscv-dev@lists.libre-riscv.org>;
23 Tue, 24 Mar 2020 09:05:32 -0700 (PDT)
24 X-Gm-Message-State: ANhLgQ3Ov2xf7rr1dKB9/7fnXxTn4WZyFCg6zPTLC/25+DDUg5lKu3lg
25 ZtNEECD6E8ot93rftSpZznxfN9uTkfIVD90ApK4=
26 X-Google-Smtp-Source: ADFU+vsS5Ckwa/lzQKHAaLArjLrcyDQz7dRHOenZfsmceuq1KEr2aaCcSqQq+AlabsiYGb5A5ASGVHs3NzM8ZoTcpas=
27 X-Received: by 2002:a19:a93:: with SMTP id 141mr8176743lfk.107.1585065927308;
28 Tue, 24 Mar 2020 09:05:27 -0700 (PDT)
29 MIME-Version: 1.0
30 References: <69ea9c9d-431c-4b76-ad86-a8eec897ab44@googlegroups.com>
31 <7dcb89ad-c6b2-43dc-8ea9-e72342a2719b@googlegroups.com>
32 In-Reply-To: <7dcb89ad-c6b2-43dc-8ea9-e72342a2719b@googlegroups.com>
33 From: Luke Kenneth Casson Leighton <lkcl@lkcl.net>
34 Date: Tue, 24 Mar 2020 16:05:16 +0000
35 X-Gmail-Original-Message-ID: <CAPweEDzMvPvJ7oEfDC1r3eTVZY0KhP_7hkT7+mKisqzK7NKJ7g@mail.gmail.com>
36 Message-ID: <CAPweEDzMvPvJ7oEfDC1r3eTVZY0KhP_7hkT7+mKisqzK7NKJ7g@mail.gmail.com>
37 To: Libre-RISCV General Development <libre-riscv-dev@lists.libre-riscv.org>,
38 Staf Verhaegen <staf@fibraservi.eu>
39 Subject: [libre-riscv-dev] Fwd: multi-way LOAD/STORE buffers and misalignment
40 X-BeenThere: libre-riscv-dev@lists.libre-riscv.org
41 X-Mailman-Version: 2.1.23
42 Precedence: list
43 List-Id: Libre-RISCV General Development
44 <libre-riscv-dev.lists.libre-riscv.org>
45 List-Unsubscribe: <http://lists.libre-riscv.org/mailman/options/libre-riscv-dev>,
46 <mailto:libre-riscv-dev-request@lists.libre-riscv.org?subject=unsubscribe>
47 List-Archive: <http://lists.libre-riscv.org/pipermail/libre-riscv-dev/>
48 List-Post: <mailto:libre-riscv-dev@lists.libre-riscv.org>
49 List-Help: <mailto:libre-riscv-dev-request@lists.libre-riscv.org?subject=help>
50 List-Subscribe: <http://lists.libre-riscv.org/mailman/listinfo/libre-riscv-dev>,
51 <mailto:libre-riscv-dev-request@lists.libre-riscv.org?subject=subscribe>
52 Reply-To: Libre-RISCV General Development
53 <libre-riscv-dev@lists.libre-riscv.org>
54 Content-Type: text/plain; charset="utf-8"
55 Content-Transfer-Encoding: base64
56 Errors-To: libre-riscv-dev-bounces@lists.libre-riscv.org
57 Sender: "libre-riscv-dev" <libre-riscv-dev-bounces@lists.libre-riscv.org>
58
59 c3RhZiwgaGksIHRoaXMgY2FtZSBpbiBmcm9tIG1pdGNoIGFsc3VwLCBmcm9tIGNvbXAuYXJjaC4K
60 CnRoZSBMMSBjYWNoZSBtZW1vcnkgU1JBTSB0aGF0IHlvdSBhcmUgZG9pbmc6IGlzIGl0LCBhcyBN
61 aXRjaCBzdWdnZXN0cywKMVIgKm9yKiAxVywgYW5kIHRodXMgc2luZ2xlLWNsb2NrLWN5Y2xlPyAg
62 aSBnYXRoZXIgZnJvbSB3aGF0IGhlJ3MKc2F5aW5nIHRoYXQgaWYgeW91IGhhdmUgYSAxUjFXIFNS
63 QU0sIHRoYXQgZWZmZWN0aXZlbHkgbmVlZHMgMiBjbG9jawpjeWNsZXMgdG8gYWNjZXNzLgoKbC4K
64 Ci0tLQpjcm93ZC1mdW5kZWQgZWNvLWNvbnNjaW91cyBoYXJkd2FyZTogaHR0cHM6Ly93d3cuY3Jv
65 d2RzdXBwbHkuY29tL2VvbWE2OAoKCi0tLS0tLS0tLS0gRm9yd2FyZGVkIG1lc3NhZ2UgLS0tLS0t
66 LS0tCkZyb206ICdNaXRjaEFsc3VwJyB2aWEgY29tcC5hcmNoIDxjb21wLmFyY2hAZ29vZ2xlZ3Jv
67 dXBzLmNvbT4KRGF0ZTogVHVlLCBNYXIgMjQsIDIwMjAgYXQgMzoyNyBQTQpTdWJqZWN0OiBSZTog
68 bXVsdGktd2F5IExPQUQvU1RPUkUgYnVmZmVycyBhbmQgbWlzYWxpZ25tZW50ClRvOgoKCk9uIFR1
69 ZXNkYXksIE1hcmNoIDI0LCAyMDIwIGF0IDY6NTM6MjkgQU0gVVRDLTUsIGxrY2wgd3JvdGU6Cj4g
70 d2UncmUgZG9pbmcgYSBMRC9TVCBidWZmZXIgYXQgdGhlIG1vbWVudCwgYW5kIHNvbWUgZGVzaWdu
71 IHJldmlldyBhbmQKPiBjb25zdHJ1Y3RpdmUgZmVlZGJhY2sgYW5kIGFkdmljZSB3b3VsZCBiZSBn
72 cmVhdGx5IGFwcHJlY2lhdGVkLgo+IHVubGlrZSBtYW55ICJmaXJzdCB0aW1lIHByb2Nlc3NvcnMi
73 LCB3ZSBjYW5ub3QgcG9zc2libHkgZ2V0IGF3YXkKPiB3aXRoIGEgc2ltcGxlIHNpbmdsZS1pc3N1
74 ZSBMRC9TVCBkZXNpZ24gYXMgdGhlIGZpcnN0IGl0ZXJhdGlvbiBiZWNhdXNlCj4gb2YgdGhlIHZl
75 Y3RvciBlbmdpbmUgYmVpbmcgZWZmZWN0aXZlbHkgYSBtdWx0aS1pc3N1ZSBtdWx0aXBsaWVyIHRo
76 YXQsCj4gZnJvbSBhIHNpbmdsZSBpbnN0cnVjdGlvbiwgaGFtbWVycyB0aGUgaW50ZXJuYWwgZW5n
77 aW5lIHdpdGggYSAqYmF0Y2gqCj4gb2YgYWN0dWFsIG9wZXJhdGlvbnMuCj4KPiB0aGlzIGluY2x1
78 ZGVzIExEL1NUIGFuZCBzbyBjb25zZXF1ZW50bHkgd2UgbmVlZCBhIG11bHRpLWlzc3VlLWNhcGFi
79 bGUKPiBMRC9TVCBidWZmZXIgcmlnaHQgZnJvbSB0aGUgc3RhcnQuICBpdCBpcyBiZWluZyBkb2N1
80 bWVudGVkLCBoZXJlOgo+Cj4gaHR0cHM6Ly9saWJyZS1yaXNjdi5vcmcvM2RfZ3B1L2FyY2hpdGVj
81 dHVyZS82NjAwc2NvcmVib2FyZC8KPgo+IHdpdGggTWl0Y2gncyBoZWxwIGkgYWxyZWFkeSBoYXZl
82 IGEgUkFXIC8gV0FSIGRlcGVuZGVuY3kgZGV0ZWN0aW9uIG1hdHJpeAo+IGluIHBsYWNlLCB3aGlj
83 aCBkZXRlY3RzIChpbi1vcmRlcikgKmJhdGNoZXMqIG9mIExEcywgKmJhdGNoZXMqIG9mIFNUcywK
84 PiBhbmQgKmJhdGNoZXMqIG9mIGF0b21pYyBvcGVyYXRpb25zIChkZWZpbmVkIGJ5IGhhdmluZyBM
85 RC9TVCBib3RoIHNldCkuCj4KPiBhZGRpdGlvbmFsbHksIHdlIGhhdmUgKGFnYWluLCB0aGFua3Mg
86 dG8gTWl0Y2gpLCBhbiAiYWRkcmVzcyBjbGFzaCBkZXRlY3Rpb24iCj4gTWF0cml4LCB3aGVyZSB0
87 aGUgb3JpZ2luYWwgZGVzaWduIGNvbmNlcHQgZnJvbSBNaXRjaCB1c2VzIGJpdHMgNCB0aHJ1IDEx
88 Cj4gKHN0b3BwaW5nIGF0IGEgVk0gcGFnZSkgdG8gc2F5ICJ0aGlzIExEL1NUIGRlZmluaXRlbHkg
89 ZG9lc24ndCBvdmVybGFwIHdpdGgKPiBhbnkgb3RoZXJzLCBidXQgaXQgbWlnaHQgaGF2ZSBwaWNr
90 ZWQgdXAgYSBmZXcgdGhhdCAqcG90ZW50aWFsbHkqIGRvbid0Cj4gb3ZlcmxhcCwgYnV0IGhleSBi
91 ZXR0ZXIgc2FmZSB0aGFuIHNvcnJ5Ii4KPgo+IHRoaXMgaXMgcXVpdGUgZWZmaWNpZW50IGJlY2F1
92 c2UgdGhlIG51bWJlciBvZiBiaXRzIHVzZWQgdG8gZGV0ZWN0IGEgY2xhc2gKPiBpcyBkcmFzdGlj
93 YWxseSByZWR1Y2VkLCB3aGljaCBpcyBpbXBvcnRhbnQgZ2l2ZW4gdGhhdCBpdCdzIGFuIE54Ti8y
94 IHNldCBvZgo+IGJpbmFyeS1hZGRyZXNzIGNvbXBhcmF0b3JzIGludm9sdmVkLgo+Cj4gaG93ZXZl
95 ciB3ZSAqbW9kaWZpZWQqIHRoaXMgaWRlYSwgYnkgdHVybmluZyB0aGUgYWRkcitsZW4gKGxlbj0x
96 LzIvNC84IGJ5dGUpCj4gaW50byBhICpieXRlLW1hc2sqLCB3aGVyZSB0aGUgYnl0ZS1tYXNrIGlz
97 IGVmZmVjdGl2ZWx5IG5vdGhpbmcgbW9yZSB0aGFuCj4gKG9yLCAiY2FuIGJlIHVzZWQgYXMiKSBi
98 eXRlLWVuYWJsZSBsaW5lcyBvbiB0aGUgTDEgY2FjaGUgbWVtb3J5IHJlYWQvd3JpdGUuCj4KPiB0
99 aGlzIG1lYW5zIHR1cm5pbmcgbGVuPTEgaW50byAwYjEsIGxlbj0yIGludG8gMGIxMSwgbGVuPTQg
100 aW50byAwYjExMTEKPiBvciBsZW49OCBpbnRvIDBiMTExMSAxMTExIGFuZCB0aGVuIHNoaWZ0aW5n
101 IGl0IGJ5IHRoZSBMU0JzIG9mIHRoZSBhZGRyZXNzCj4gKGJpdHMgMC0zKS4KPgo+IGhvd2V2ZXIg
102 b2YgY291cnNlLCB0aGF0IGNvdWxkICJ3cmFwIG92ZXIiIHRvIGEgc2Vjb25kIGNhY2hlIGxpbmUs
103 IHRoZXJlZm9yZQo+IHdlIHNwbGl0IGl0IGludG8gdHdvOgo+Cj4gKiAxc3QgY2FjaGUgbGluZSwg
104 dGFrZSBiaXRzIDAuLjE1IG9mIHRoZSBtYXNrLCB1c2UgYWRkcls0Ol0gYXMgdGhlIGFkZHJlc3MK
105 PiAqIDFuZCBjYWNoZSBsaW5lLCB0YWtlIGJpdHMgMTUuLjI3IG9mIHRoZSBtYXNrLCB1c2UgYWRk
106 cls0Ol0gUExVUyBPTkUgYXMgYWRkcmVzcwo+Cj4gbm93IGFsbCBMRHMgYXJlIHBvdGVudGlhbGx5
107 ICp0d28qIExEcywgYW5kIGFsbCBTVHMgYXJlIHBvdGVudGlhbGx5ICp0d28qIFNUcywKPiByZXF1
108 aXJpbmcgc3luY2hyb25pc2F0aW9uLgo+Cj4gdGhpcyBkb2VzIGludGVyZXN0aW5nbHkgbWVhbiB0
109 aGF0IHRoZSAiYWRkcmVzcyBjbGFzaCBkZXRlY3Rpb24iIE1hdHJpeCBpcwo+IG5vdyBkb3VibGVk
110 IGluIHNpemUsIGJlY2F1c2UgZWFjaCBMRC9TVCBDb21wdXRhdGlvbiBVbml0IGNhbiBub3cgaXNz
111 dWUgKnR3byoKPiBMRHMvU1RzLCBub3Qgb25lLgo+Cj4gdGhlcmUgaXMgYSBiaWcgYWR2YW50YWdl
112 IHRvIHBhcnRpYWwtY29udmVyc2lvbiBvZiB0aGUgTEQvU1RzIHRvIHVuYXJ5LW1hc2tlZAo+IGZv
113 cm1hdDoKPgo+IDEpIHRob3NlICJtYXNrcyIgd2UgY2FuIG5vdyBkZXRlY3QgaW4gdGhlIGFkZHJl
114 c3MtY2xhc2ggdW5pdCwgd2hldGhlciB0aGVyZQo+ICAgIGFyZSBvdmVybGFwcywgYnkgc2ltcGxl
115 ICJ1bmFyeSIgKEFORGluZykuCj4KPiAyKSBvbmNlIGEgYmF0Y2ggb2YgZ3VhcmFudGVlZC1ub24t
116 b3ZlcmxhcHBpbmcgTERzIChvciBTVHMsIGJ1dCBub3QgYm90aCBhdAo+ICAgIG9uY2UpIGhhdmUg
117 YmVlbiBpZGVudGlmaWVkLCB0aGUgT1Jpbmcgb2YgdGhvc2UgbWFza3MgKnByZS1pZGVudGlmaWVz
118 KiwKPiAgICB3aGVyZSB0aGUgcmVtYWluaW5nIE1TQnMgYXJlIGlkZW50aWNhbCwgd2hpY2ggTERz
119 IGFuZCB3aGljaCBTVHMgYXJlCj4gICAgKnBhcnQgb2YgdGhlIHNhbWUgY2FjaGUgbGluZSouCj4K
120 PiAzKSB0aGUgT1JlZCBtYXNrcyBjYW4gYmUgZHJvcHBlZCAtIGFzLWlzIC0gZGlyZWN0bHkgb250
121 byBieXRlLWxldmVsCj4gICAgcmVhZC93cml0ZS1lbmFibGUgbGluZXMgb24gdGhlIEwxIENhY2hl
122 IHVuZGVybHlpbmcgbWVtb3J5IC0gd2l0aCB6ZXJvCj4gICAgc2hpZnRpbmcgb3Igb3RoZXIgbWVz
123 c2luZyBhYm91dC4KPgo+IHNvIHRoYXQncyB0aGUgYml0cyB0aGF0IHdlICJrbm93Ii4KPgo+IHRo
124 ZSBiaXRzIHRoYXQgd2UgKmRvbid0KiBrbm93IGFyZSB3aGF0IGlzIHRoZSBiZXN0IEwxIGNhY2hl
125 IGFycmFuZ2VtZW50Cj4gdG8gdXNlLiAgd2UgZGlzY3Vzc2VkIHRoZSBwb3NzaWJpbGl0eSBvZiBh
126 biA4LXdheSBzZXQtYXNzb2NpYXRpdmUgY2FjaGUKPiB3aXRoIDUxMi1iaXQgd2lkZSBkYXRhICgh
127 ISEpIC0geWVzLCByZWFsbHksIGJlY2F1c2Ugd2Ugd2lsbCBoYXZlIGEgbWluaW11bQo+IG9mIDQg
128 TEQvU1Qgb3BlcmF0aW9ucyBAIDY0LWJpdCBvY2N1cnJpbmcgZXZlcnkgY3ljbGUgKGluIHRoZSBm
129 aXJzdCB2ZXJzaW9uCj4gb2YgdGhlIHByb2Nlc3NvcjogdGhpcyAqd2lsbCogZ28gdXAgaW4gbGF0
130 ZXIgaXRlcmF0aW9ucykuCj4KPiBvbmUgdGhpbmcgdGhhdCB3b3VsZCBiZSBwYXJ0aWN1bGFybHkg
131 bmljZSB0byBhdm9pZCB3b3VsZCBiZSBtdWx0aS1wb3J0ZWQKPiBTUkFNIG9uIHRoZSBMMSBDYWNo
132 ZSBNZW1vcmllcy4gIGkgdGhvdWdodCB0aGVyZSBpdCBtYXkgYmUgcG9zc2libGUgdG8KPiAic3Ry
133 aXBlIiB0aGUgTDEgQ2FjaGUsIHN1Y2ggdGhhdCBiaXRzIDQtNSBvZiBldmVyeSBhZGRyZXNzIGdv
134 IHRocm91Z2ggdG8sCj4gZWZmZWN0aXZlbHksIGEgY29tcGxldGVseSBzZXBhcmF0ZSAoaXNvbGF0
135 ZWQsIGluZGVwZW5kZW50KSBMMSBDYWNoZS4KPgo+ICogQWRkciBiaXRzIFswOjNdIGFscmVhZHkg
136 dHVybmVkIGludG8gYnl0ZS1tYXAgbWFzayAoZW5hYmxlIGxpbmVzKQo+ICogQWRkciBiaXRzIFs0
137 OjVdIHVzZWQgdG8gc2VsZWN0IG9uZSBvZiBmb3VyIElOREVQRU5ERU5UIGNhY2hlcwo+ICogQWRk
138 ciBiaXRzIFs2OmVuZF0gdXNlZCAiYXMgbm9ybWFsIgo+Cj4gdGhlIG9ubHkgZG93bnNpZGUgb2Yg
139 dGhpcyBiZWluZzogTEQvU1RzIHRoYXQgaGFwcGVuIHRvIGJlIG9uIHRoZSBzYW1lCj4gNjQtYnl0
140 ZSBib3VuZGFyeSB3b3VsZCBiZSAicGVuYWxpc2VkIiBieSBiZWluZyBvbmx5IHNpbmdsZS1pc3N1
141 ZS1jYXBhYmxlLgo+Cj4gZG8gd2UgY2FyZT8gIGknbSBub3Qgc3VyZSB0aGF0IHdlIGRvIQoKWWVz
142 LCB5b3UgZG8gd2FudCB0byBjYXJlOjogeW91IHdhbnQgdG8gY2FyZSB0byAiZ2V0IGl0IGNvcnJl
143 Y3QiIGV2ZW4KYXQgc29tZSBtaW5vciBjb3N0IGluIHBlcmYuCj4KPiBfc2hvdWxkXyB3ZSBjYXJl
144 PyAgdGhhdCdzIHRoZSBxdWVzdGlvbiBpJ2QgbGlrZSB0byBrbm93IHRoZSBhbnN3ZXIgdG8gOikK
145 PiBhbiBhbHRlcm5hdGl2ZSBpcyB0aGF0IHdlIGhhdmUgdG8gbXVsdGktcG9ydCB0aGUgTDEgQ2Fj
146 aGUgbWVtb3J5LCB3aGljaAo+IHdvdWxkIGJlIHF1aXRlIGV4cGVuc2l2ZS4KPgo+IHdoYXQgYWx0
147 ZXJuYXRpdmVzIGFyZSB0aGVyZT8gIGlzIHRoZXJlIGEgd2F5IHRvLCBmb3IgZXhhbXBsZSwgaGF2
148 ZSBhbgo+IDgtd2F5IHNldC1hc3NvY2lhdGl2ZSBjYWNoZSB3aXRoIDggaW5kZXBlbmRlbnQgaW5w
149 dXQvb3V0cHV0IGRhdGEgcGF0aHMsCj4geWV0IHRoZXkgZG8gbm90IHJlcXVpcmUgdGhlIHRyaWNr
150 IG9mIGEgZnVsbCBzcGxpdCB1c2luZyBhZGRyIGJpdHMgWzQ6NV0sCj4gYnV0IGF0IHRoZSBzYW1l
151 IHRpbWUgZG8gbm90IHJlcXVpcmUgNFI0VyBTUkFNcz8KCldoYXQgeW91IHdhbnQgdG8ga25vdyBh
152 cmUgdGhlIGRpbWVuc2lvbnMgb2YgdGhlIFNSQU0gbWFjcm9zLiBHaXZlbiB0aGVzZQpkaW1lbnNp
153 b25zIHlvdSBhcmUgaW4gYSBwb3NpdGlvbiB0byBzdGFydCBtYWtpbmcgZ29vZCBjaG9pY2VzLCB3
154 aXRob3V0CnlvdSBhcmUgbm90LiBBIHR5cGljYWwgU1JBTSBkaW1lbnNpb24gbWlnaHQgYmUgMjU2
155 LWJpdHMgd2lkZSBhbmQgNjQtd29yZHMKZGVhcCAoMktCeXRlcykuCgpTaW5jZSB5b3Ugd2FudCB0
156 byByZWFkL3dyaXRlIDUxMi1iaXRzIHBlciBwb3J0LCB5b3Ugd2lsbCBuZWVkIDIgU1JBTQptYWNy
157 b3MgcGVyIHBvcnQgKHBlciBjeWNsZSkuIFNvIGlmIHlvdSBhcmUgbWFraW5nIDgtd2F5IFNBIGNh
158 Y2hlLCB5b3UKd2lsbCBuZWVkIGF0IGxlYXN0IDE2IFNSQU0gbWFjcm9zICgzMktCeXRlcyktLWFu
159 ZCAoQSBOIEQpIHlvdSBzdGlsbApoYXZlIGJ1dCBhIHNpbmdsZSBwb3J0IQoKT24gdGhlIG90aGVy
160 IGhhbmQsIGRyb3BwaW5nIGJhY2sgdG8gNC13YXkgc2V0LCBhbmQgdGhhdCBzYW1lIFNSQU0gYXJy
161 YXkKY2FuIG5vdyBzdXBwb3J0IDItcG9ydHMgb2YgNC13YXkgU0EgZWFjaC4gSW4gdGhpcyBvcmdh
162 bml6YXRpb24geW91IHdpbGwKYmUgdXNpbmcgbW9yZSBsb3dlci1hZGRyZXNzIGJpdHMgdG8gY2hv
163 b3NlIHBvcnRbMF0gdmVyc3VzIHBvcnRbMV0uIEFuZAp5b3Ugd2lsbCBzZWUgNDAlIGNvbmZsaWN0
164 cyBpZiB5b3UgYXJlIHJlYWxseSBydW5uaW5nIDIgcmVxdWVzdCBwZXIgY3ljbGUuCgpIb3dldmVy
165 LCBpZiB5b3Uga25vdyB0aGUgYWNjZXNzIHBhdHRlcm4gaXMgImRlbnNlIiwgdGhlbiB5b3Uga25v
166 dyB0aGF0CkxEW2ldW2suLmsrM10gYXJlIGFsbCBpbiB0aGUgc2FtZSBsaW5lLCBhbmQgeW91IGNh
167 biBUSEVOIG1ha2Ugb25lIGFjY2Vzcwpmb3IgZXZlcnkgNCBhY3R1YWwgTERzIGFuIHRoZW4gc29y
168 dCBpdCBvdXQgd2l0aCBtdWx0aXBsZXhlcnMuIEFuZCBOT1cgd2UKaGF2ZSBlbm91Z2ggcG9ydHMg
169 YW5kIHdpZHRoIHRvIHVzZSAxMDI0IGJpdHMgcGVyIGN5Y2xlIHRocm91Z2hwdXQgaW4gdGhlCmNh
170 Y2hlLiB7WW91IGNhbiBkZXRlcm1pbmUgYW4gYWNjZXNzIHBhdHRlcm4gd2lsbCBiZSBkZW5zZSB3
171 aGVuIHRoZSBsb29wCmluY3JlbWVudCBpcyArMSAob3IgLTEpIGFuZCB0aGUgbG9vcCBpbmRleCBp
172 cyB1c2VkIGluIHNjYWxlZCBmb3JtIGluCm1lbXJlZiBpbnN0cnVjdGlvbnM6CgogICAgIExEICAg
173 UngsW1JiK1JpPDxzY2FsZStESVNQXQoKfSBPdGhlciBmb3JtcyBvZiBkZW5zZSBhY2Nlc3MgYXJl
174 IGhhcmRlciBmb3IgSFcgdG8gZGV0ZWN0IGFuZCB1dGlsaXplLgo+Cj4gaSAqdGhpbmsqIHRoaXMg
175 aXMgZG9hYmxlLCB3aXRoIHRoZSBwb3RlbnRpYWwgZm9yIHNvbWUgd2FpdCBjeWNsZXMgaWYKPiBv
176 bmUgb2YgdGhlIDggd2F5cyBoYXBwZW5zIHRvIGhhdmUgcmVxdWVzdCBjb250ZW50aW9uLiAgaG9u
177 ZXN0bHkgaSBkb24ndCBrbm93Cj4gd2hhdCdzIGJlc3QgaGVyZS4KPgo+IGFkdmljZSBhbmQgZGlz
178 Y3Vzc2lvbiBhcHByZWNpYXRlZCBhcyBhbHdheXMsCj4KPiBsLgoKX19fX19fX19fX19fX19fX19f
179 X19fX19fX19fX19fX19fX19fX19fX19fX19fX18KbGlicmUtcmlzY3YtZGV2IG1haWxpbmcgbGlz
180 dApsaWJyZS1yaXNjdi1kZXZAbGlzdHMubGlicmUtcmlzY3Yub3JnCmh0dHA6Ly9saXN0cy5saWJy
181 ZS1yaXNjdi5vcmcvbWFpbG1hbi9saXN0aW5mby9saWJyZS1yaXNjdi1kZXYK
182