Re: [libre-riscv-dev] Scoreboard vs Tomasulo
authorJeremy Singher <thejsingher@gmail.com>
Sat, 16 May 2020 22:45:17 +0000 (15:45 -0700)
committerlibre-riscv-dev <libre-riscv-dev@lists.libre-riscv.org>
Sat, 16 May 2020 22:45:31 +0000 (23:45 +0100)
f8/06eb869f7507c95310c3965d2388e87650a4da [new file with mode: 0644]

diff --git a/f8/06eb869f7507c95310c3965d2388e87650a4da b/f8/06eb869f7507c95310c3965d2388e87650a4da
new file mode 100644 (file)
index 0000000..c2b99bb
--- /dev/null
@@ -0,0 +1,363 @@
+Return-path: <libre-riscv-dev-bounces@lists.libre-riscv.org>
+Envelope-to: publicinbox@libre-riscv.org
+Delivery-date: Sat, 16 May 2020 23:45:32 +0100
+Received: from localhost ([::1] helo=libre-riscv.org)
+       by libre-soc.org with esmtp (Exim 4.89)
+       (envelope-from <libre-riscv-dev-bounces@lists.libre-riscv.org>)
+       id 1ja5Yh-0001ZK-UW; Sat, 16 May 2020 23:45:31 +0100
+Received: from mail-lf1-f44.google.com ([209.85.167.44])
+ by libre-soc.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128)
+ (Exim 4.89) (envelope-from <thejsingher@gmail.com>)
+ id 1ja5Yg-0001ZD-4v
+ for libre-riscv-dev@lists.libre-riscv.org; Sat, 16 May 2020 23:45:30 +0100
+Received: by mail-lf1-f44.google.com with SMTP id x22so1905890lfd.4
+ for <libre-riscv-dev@lists.libre-riscv.org>;
+ Sat, 16 May 2020 15:45:30 -0700 (PDT)
+DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025;
+ h=mime-version:references:in-reply-to:from:date:message-id:subject:to;
+ bh=dKhclSNnFd90609ov61VmWCX1YBIWbNA/l2E1mOwmqM=;
+ b=B1K4wIXC/HfPWRjNQxN1DnWk1kJjWAn5cHPkM6vL0xJjK0J6rSHSea6RPFDwa4V5jU
+ 5IZdaY9lsVfFhwGJdpMcPLURDJSW9at9y3V931Mgs0Kn4r1AUtwyVCpDOvETLC/oQ9O6
+ 9vQJDUHe7hM0X+0WDBedT9m2McrCoJsQZVBMnisLeKNZ/B9My6PKZei6yo337nFuo85R
+ VsAwkkM1UlFEGjdzFhRZD47cOiLjmHtNWf5G4dH2+rQfNy9IrNOxbtkm4n9GPYi+2/q4
+ Vi5lAR5Zne30sSJKm/BHdPsAUJRywFnSW2dC55drnP3Pctq6qPGawC1OqJZQuKM0V98l
+ mLig==
+X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
+ d=1e100.net; s=20161025;
+ h=x-gm-message-state:mime-version:references:in-reply-to:from:date
+ :message-id:subject:to;
+ bh=dKhclSNnFd90609ov61VmWCX1YBIWbNA/l2E1mOwmqM=;
+ b=sng8jaEqGPMwZvy3xn5k9f7D+fPxGTTJ4vkSc6o7hV0spUvwGDLBcZ03pPQ19JqyC7
+ bTRukISduzWu1mvQZAacPTWQkMn23R33zbwxWJr2SIvQaVpNyatiB2wixchFCVKXUzMo
+ 0F7onMuSECy0gR23uqRB/C/8Qwc6SU2LlcdrqzVMh09VOqS/KVkSS9aP+fHe/Zc7Sguh
+ jAmjFaipyDBbLIQNLEpDlhXEqC2ns16DJ8GFj5uYpUXWujZDo53vjqCLDK2UbxwptHGq
+ 77y2P+v+Gh6drgadSu3bkPJj0bCwEYIzr+1XuWJsnaayC6y4zzk3kIDVSoQy2YQVlDMF
+ DOFA==
+X-Gm-Message-State: AOAM531PppTRz6OzxgK1d57Tcz16pWWkEE5AjaEEmqm9oUA/yuQrU+sa
+ dasVTkm2lHkYxnBN/68tATH85LKFMQxbOx0Q4euIR0Qq
+X-Google-Smtp-Source: ABdhPJz6MCJkdGfPlvMLJoYStSQitkzqTNPsNf35mLcYJQIARXNxYUaz+N2iwEfQMqB8WPy2gFW9AhENsjgzwxpBtgc=
+X-Received: by 2002:a05:6512:31c5:: with SMTP id
+ j5mr6707612lfe.26.1589669128854; 
+ Sat, 16 May 2020 15:45:28 -0700 (PDT)
+MIME-Version: 1.0
+References: <13EDF987-9A19-4C96-89C2-6DB784CF2C96@gatech.edu>
+ <CAPweEDyDcmAJbJx+PKkL8MotPMNyHyFOEtuNOKP+V2PmmY5HvA@mail.gmail.com>
+ <CAPweEDyw+LSW2S4sKWk-V24NSHYe2qqWO+KFqikQ34Q1Guhaig@mail.gmail.com>
+ <CAPweEDweXSC5c_ROQ8a3Y4hQMaJYmD_jAriadcZk9PRrkjOXvA@mail.gmail.com>
+ <25AC8A2E-D48F-439F-AF9D-0EB3DC08D7CC@gatech.edu>
+ <CAPweEDx_TMOxQHLrhbdhnXsBE1s-u2mz3xD2DDFCMi6m9BZCZg@mail.gmail.com>
+ <CAEoCstRd+hLfF5YtUbnS2gukPxVAjmheJrZ29QvJD3y4Y928JQ@mail.gmail.com>
+ <CAPweEDxXGedm-4QwmU2UuYvb4G2nNaoAsy_P2eyviQ42pbmyXA@mail.gmail.com>
+In-Reply-To: <CAPweEDxXGedm-4QwmU2UuYvb4G2nNaoAsy_P2eyviQ42pbmyXA@mail.gmail.com>
+From: Jeremy Singher <thejsingher@gmail.com>
+Date: Sat, 16 May 2020 15:45:17 -0700
+Message-ID: <CAEoCstSGxwV88JUHTQmUp=75kHWxSZNSPu==_pxsUYf29ctd9w@mail.gmail.com>
+To: Libre-RISCV General Development <libre-riscv-dev@lists.libre-riscv.org>
+Subject: Re: [libre-riscv-dev] Scoreboard vs Tomasulo
+X-BeenThere: libre-riscv-dev@lists.libre-riscv.org
+X-Mailman-Version: 2.1.23
+Precedence: list
+List-Id: Libre-RISCV General Development
+ <libre-riscv-dev.lists.libre-riscv.org>
+List-Unsubscribe: <http://lists.libre-riscv.org/mailman/options/libre-riscv-dev>, 
+ <mailto:libre-riscv-dev-request@lists.libre-riscv.org?subject=unsubscribe>
+List-Archive: <http://lists.libre-riscv.org/pipermail/libre-riscv-dev/>
+List-Post: <mailto:libre-riscv-dev@lists.libre-riscv.org>
+List-Help: <mailto:libre-riscv-dev-request@lists.libre-riscv.org?subject=help>
+List-Subscribe: <http://lists.libre-riscv.org/mailman/listinfo/libre-riscv-dev>, 
+ <mailto:libre-riscv-dev-request@lists.libre-riscv.org?subject=subscribe>
+Reply-To: Libre-RISCV General Development
+ <libre-riscv-dev@lists.libre-riscv.org>
+Content-Type: text/plain; charset="utf-8"
+Content-Transfer-Encoding: base64
+Errors-To: libre-riscv-dev-bounces@lists.libre-riscv.org
+Sender: "libre-riscv-dev" <libre-riscv-dev-bounces@lists.libre-riscv.org>
+
+SSBoYXZlIGZpbmFsbHkgZmluaXNoZWQgcGFyc2luZyBNaXRjaCdzIGNoYXB0ZXJzLCBhbmQgbm93
+IEkgc2VlIHdoYXQKdGhlIHByaW1hcnkgY29uZnVzaW9uIGlzIGZyb20uIFRoZSBzY29yZWJvYXJk
+IGJlaW5nIGRldmVsb3BlZCBoZXJlIGhhcwpiZWVuIHJlZmVycmVkIHRvIGluIHRoZSBtYWlsaW5n
+IGxpc3RzIGFzIGEgIkNEQyA2NjAwLWxpa2UiIHNjb3JlYm9hcmQsCndoaWxlIGluIHJlYWxpdHks
+IHRoZSBmaW5hbCBkZXNpZ24gaXMgZmFyIGV4dGVuZGVkIGZhciBiZXlvbmQgdGhlCm9yaWdpbmFs
+IENEQyA2NjAwIGltcGxlbWVudGF0aW9uLiBJIHdvdWxkIHN1Z2dlc3Qgbm90IGNhbGxpbmcgaXQg
+YQoiQ0RDIDY2MDAtbGlrZSBzY29yZWJvYXJkIiBpbiB0aGUgZnV0dXJlLCBpbnN0ZWFkIGEgImV4
+dGVuZGVkCnNjb3JlYm9hcmQiIGlzIG1vcmUgYWNjdXJhdGUuCgpMZXQgbWUgdHJ5IHRvIGNvbXBv
+c2UgbXkgdGhvdWdodHMuCkluIG9yZGVyIGZvciBPT08gZXhlY3V0aW9uIHRvIGJlIHBvc3NpYmxl
+LCB3cml0ZSBkYXRhIGZyb20Kc3BlY3VsYXRpdmVseSBleGVjdXRlZCBpbnN0cnVjdGlvbnMgbXVz
+dCBiZSBidWZmZXJlZCwgZm9yIGluIHRoZSBjYXNlCm9mIG1pc3NwZWN1bGF0aW9uLCB0aGV5IG11
+c3Qgbm90IGJlIGFsbG93ZWQgdG8gY29tbWl0IGludG8gdGhlCmFyY2hpdGVjdHVyYWwgcmVnaXN0
+ZXIgZmlsZS4KCkluIFRvbWFzdWxvJ3MsIHNwZWN1bGF0aXZlIHdyaXRlIGRhdGEgYXJlIGhlbGQg
+aW4gcGh5c2ljYWxseSByZW5hbWVkIHJlZ2lzdGVycy4KSW4gdGhlIGV4dGVuZGVkIHNjb3JlYm9h
+cmQgc2NoZW1lLCBzcGVjdWxhdGl2ZSB3cml0ZSBkYXRhIGFyZSBoZWxkIGluCmNvbXB1dGUgdW5p
+dCBsYXRjaGVzLgpJbiBUb21hc3VsbydzLCBicmFuY2ggZGVwZW5kZW5jeSBtYXNrcyBhcmUgdXNl
+ZCB0byBkcmFpbiBtaXNzcGVjdWxhdGVkCmluc3RydWN0aW9ucy4KSW4gZXh0ZW5kZWQgc2NvcmVi
+b2FyZCwgdGhlIG1pc3NwZWN1bGF0ZWQgaW5zdHJ1Y3Rpb25zIGRyYWluCnRoZW1zZWx2ZXMgZnJv
+bSB0aGUgc3lzdGVtLgpCb3RoIHNjaGVtZXMgY2FuIGJlIGRlc2lnbmVkIHRvIGFjaGlldmUgc2lt
+aWxhciBPT08gYmVoYXZpb3JzLgpUaHVzLCBvbmUgY2Fubm90IGRyYXcgYSBwZXJmb3JtYW5jZSBj
+b25jbHVzaW9uIGp1c3QgYnkgc2VlaW5nIHdoaWNoCnNjaGVtZSBpcyBiZWluZyB1c2VkLgoKSWRl
+YWxseSB0aGUgYWJvdmUgdGV4dCBzaG91bGQgYmUgdW5jb250cm92ZXJzaWFsLCBwbGVhc2UgbGV0
+IG1lIGtub3cKaWYgdGhlcmUgaXMgYSBsYXJnZSBtaXN1bmRlcnN0YW5kaW5nIGhlcmUuCgpNeSBv
+cGluaW9uIGlzIHRoYXQgVG9tYXN1bG8ncyBpcyBhIG1vcmUgZWxlZ2FudCBhbmQgd2VsbC1wcm92
+ZW4gc2NoZW1lCmZvciBhY2hpZXZpbmcgT09PIGV4ZWN1dGlvbiwgY29tcGFyZWQgdG8gYW4gZXh0
+ZW5kZWQgc2NvcmVib2FyZC4gSQphbHNvIGFyZ3VlIHRoYXQgdGhlIGV4dGVuZGVkIHNjb3JlYm9h
+cmQgc2NoZW1lIGRvZXMgbm90IHByZXNlbnQKc2lnbmlmaWNhbnQgcG93ZXIvYXJlYSBhZHZhbnRh
+Z2VzIGNvbXBhcmVkIHRvIFRvbWFzdWxvJ3MuIEdpdmVuIHRoYXQKZXN0aW1hdGVzIG9uIHBvd2Vy
+L2FyZWEgdGVuZCB0byBiZSB3aWxkbHkgaW5hY2N1cmF0ZSwgSSB0aGluayB3ZSB3aWxsCmhhdmUg
+dG8gd2FpdCBmb3IgcG93ZXIgYW5hbHlzaXMgb2YgTGlicmVTb0MgdG8gZ2V0IGEgZGVmaW5pdGl2
+ZSBhbnN3ZXIKdG8gdGhpcyBkZWJhdGUgOikuCgpJIGRlZXBseSBhcG9sb2dpemUgaWYgYW55IG9m
+IG15IHRob3VnaHRzIGNvdWxkIGJlIGludGVycHJldGVkIGFzCmNyaXRpY2lzbS4gSSBmdWxseSBz
+dXBwb3J0IHRoaXMga2luZCBvZiBleHBsb3JhdGlvbiBpbiBPT08gZGVzaWduLiBJCmFsc28gYXBv
+bG9naXplIGlmIEkgc2VlbSB0byBzdWdnZXN0IGEgY2hhbmdlIGluIGRlc2lnbiwgYXMgSQp1bmRl
+cnN0YW5kIHRoYXQgaGFyZHdhcmUgZGVzaWduIGlzIG5vdCBuZWFybHkgYXMgZmxleGlibGUgYXMg
+c29mdHdhcmUKZGVzaWduLgoKCgpPbiBTYXQsIE1heSAxNiwgMjAyMCBhdCAyOjM4IFBNIEx1a2Ug
+S2VubmV0aCBDYXNzb24gTGVpZ2h0b24KPGxrY2xAbGtjbC5uZXQ+IHdyb3RlOgo+Cj4gT24gU2F0
+LCBNYXkgMTYsIDIwMjAgYXQgOToxNiBQTSBKZXJlbXkgU2luZ2hlciA8dGhlanNpbmdoZXJAZ21h
+aWwuY29tPiB3cm90ZToKPgo+ID4gPiBIb3dldmVyLCB0aGUgc2NvcmVib2FyZCBpcyBsaW1pdGVk
+IGluIHRoYXQgaXQgZG9lcyBub3QgaGFuZGxlIFdBUiBhbmQgV0FXCj4gPiA+IGhhemFyZHMgdmVy
+eSB3ZWxsLgo+ID4KPiA+ID4gdGhlIG9yaWdpbmFsIDY2MDAgaGFuZGxlcyBXQVIgZXh0cmVtZWx5
+IHdlbGwsIG9ubHkgc3RhbGxpbmcgb24gV2FXCj4gPiA+IGNvbmRpdGlvbiwgZGV0ZWN0aW9uIHdo
+aWNoIGRpZCBub3QgbWF0dGVyIGdyZWF0bHkgYmVjYXVzZSB0aGUgcGlwZWxpbmVzCj4gPiA+IHdl
+cmUgb25seSBhdCBtb3N0IDIgc3RhZ2VzIGxvbmcgYW55d2F5IChNaXRjaCBvbmx5IG5vdGljZWQg
+YWZ0ZXIgcmVyZWFkaW5nCj4gPiA+IGxhc3QgeWVhciB0aGF0IHRoZSBGUCBBREQgb2YgdGhlIDY2
+MDAgd2FzIDIgc3RhZ2UgcGlwZWxpbmVkLiAgbm8gYWNhZGVtaWMKPiA+ID4gbGl0ZXJhdHVyZSBo
+YXMgYWNrbm93bGVkZ2VkIG9yIG5vdGljZWQgdGhpcykuCj4gPgo+ID4gSSB3b3VsZCBhcmd1ZSB0
+aGF0IHRoZSBDREM2NjAwIGhhbmRsZXMgV0FSIGJldHRlciB0aGFuIGFuIGluLW9yZGVyCj4gPiBt
+YWNoaW5lLCBidXQgbm90IGJldHRlciB0aGFuIGEgbWFjaGluZSB3aXRoIGZ1bGwgcmVuYW1pbmcu
+Cj4KPiBKZXJlbXk6IDY2MDAgZGVzaWducyAqZG8qIGhhdmUgcmVnaXN0ZXIgInJlbmFtaW5nIi4g
+IGkgc2FpZCBhbHJlYWR5LAo+IGEgbnVtYmVyIG9mIHRpbWVzLiAgYW5kIGlmIHlvdSBoYXZlIHN0
+dWRpZWQgYW5kIGxpc3RlbmVkIHRvIHRoZSBBY2FkZW1pYwo+IGxpdGVyYXR1cmUgLSBhbmQgYmVs
+aWV2ZSBpdCAtIHlvdSBhcmUgbWlzaW5mb3JtZWQgYnkgdGhhdCBsaXRlcmF0dXJlLCBhbmQgd2ls
+bAo+IGNvbnRpbnVlIHRvIGJlIG1pc2luZm9ybWVkIGJ5IHRoYXQgbGl0ZXJhdHVyZS4KPgo+IHBs
+ZWFzZSB1bmRlcnN0YW5kOiBpIGhhdmUgc3BlbnQgb3ZlciBuaW5lIG1vbnRocyBzdHVkeWluZyB0
+aGlzLCBsZWFybmluZwo+IGZyb20gTWl0Y2ggQWxzdXAsIG9uZSBvZiB0aGUgd29ybGQncyBsZWFk
+aW5nIGhpZ2gtcGVyZm9ybWFuY2UgY29tcHV0aW5nCj4gYXJjaGl0ZWN0cywgaW1wbGVtZW50aW5n
+IHRoaXMgYW5kIGl0J3Mgbm90IGdvaW5nIHRvIGdldCBjaHVja2VkIG91dCB0bwo+IGltcGxlbWVu
+dCBzb21ldGhpbmcgdGhhdCB0YWtlcyBzaXggTU9OVEhTIHRvIGZ1bGx5IHVuZGVyc3RhbmQgaXMg
+YQo+IGJldHRlciBkZXNpZ24sIHRvIGJlIHJlcGxhY2VkIGJ5IHNvbWV0aGluZyB0aGF0IHdvdWxk
+IHRha2UgYW5vdGhlciBzaXgKPiBtb250aHMgdG8gaW1wbGVtZW50ICphbmQgd2UgdGhlbiBjb3Vs
+ZCBub3QgZG8gbXVsdGktaXNzdWUgb24gdG9wIG9mIGl0Ki4KPgo+IHBsZWFzZSB0aGVyZWZvcmUg
+dGFrZSB0aGUgdGltZSB0byB1bmRlcnN0YW5kIHRoaXMgZGVzaWduLCBwYXJ0aWN1bGFybHkgd2hl
+bgo+IHdlIGFyZSByaWdodCBpbiB0aGUgbWlkZGxlIG9mIGEgdGltZS1jcml0aWNhbCBkZWFkbGlu
+ZS4KPgo+ID4gSW4gdGhlCj4gPiBDREM2NjAwLCB0aGUgc2NvcmVib2FyZCB3b3VsZCBibG9jayB0
+aGUgY29tcGxldGlvbiBvZiB0aGUgVyBpbnN0IHVudGlsCj4gPiB0aGUgUiBpbnN0IGhhcyByZWFk
+IGl0cyBvcGVyYW5kcy4gSW4gVG9tYXN1bG8sIHRoZSBXIGluc3QgY2FuIHByb2NlZWQKPiA+IGlt
+bWVkaWF0ZWx5IGJlZm9yZSB0aGUgUiBpbnN0IGlzIHJlYWR5LCBzaW5jZSB0aGUgZGVzdGluYXRp
+b24gcmVnaXN0ZXIKPiA+IGlzIHBoeXNpY2FsbHkgcmVuYW1lZC4KPgo+IEplcmVteTogdGhlICJy
+ZW5hbWluZyIgY2FycmllZCBvdXQgYnkgdGhlIDY2MDAgZG9lcyBleGFjdGx5IHRoaXMgc2FtZQo+
+IGpvYi4KPgo+IEFjYWRlbWljcyB1bmZvcnR1bmF0ZWx5IGhhdmUgKm9ubHkqIHN0dWRpZWQgdGhl
+ICpwYXRlbnQqIC0gbm90IFRob3JudG9uJ3MKPiBib29rIG5vciByZWFkIE1pdGNoIEFsc3VwJ3Mg
+Ym9vayBjaGFwdGVycyB3aGljaCBoZSB3cm90ZSBiYXNlZCBvbiAzMCsKPiB5ZWFycyBleHBlcmll
+bmNlIG9mIGltcGxlbWVudGluZyA2NjAwLXN0eWxlIGV4ZWN1dGlvbiBpbiB0aGUgODgxMDAsCj4g
+QU1EIEs5IGFuZCBBTUQgT3B0ZXJvbiBTZXJpZXMgb2YgQ1BVcy4KPgo+IHRoZSA2NjAwIHBhdGVu
+dCAqT05MWSogY292ZXJzIHRoZSBRLVRhYmxlcy4KPgo+IHRoZSBkZXNjcmlwdGlvbiBvZiB0aGUg
+US1UYWJsZXMgZG9lcyAqTk9UKiBpbmNsdWRlIHRoZSBDb21wdXRhdGlvbiBVbml0cwo+IHdoZXJl
+IHRoZSBvcGVyYW5kIGxhdGNoZXMgYXJlLgo+Cj4gdGhlc2UgbGF0Y2hlcyAqQVJFKiB0aGUgInJl
+bmFtZWQgcmVnaXN0ZXJzIiAoYWN0dWFsbHksIG5hbWVsZXNzIHJlZ2lzdGVycykuCj4KPiA+ID4g
+IFJPQiBpcyBhIENBTSwKPiA+Cj4gPiBXaGF0PyBUaGlzIGlzIG5vdCB0cnVlLiBJbnN0cnVjdGlv
+bnMgaW4gZmxpZ2h0IHRyYWNrIHRoZWlyIGluZGV4IGluCj4gPiB0aGUgUk9CLCBhdCBjb21wbGV0
+aW9uLCB0aGV5IHdyaXRlIHN1Y2Nlc3MgYml0IGFjY29yZGluZyB0byB0aGUgaW5kZXgKPiA+IHRo
+ZXkgaGF2ZS4gTm90IGEgQ0FNLiBTaW1wbGUgYWRkcmVzc2VkIHdyaXRlLgo+Cj4gYWggYXBwcmVj
+aWF0ZWQgdGhlIGNvcnJlY3Rpb24uICBpIGtuZXcgdGhlcmUgd2VyZSBDQU1zIHNvbWV3aGVyZS4K
+PiB3aGVuIGkgZGlzY292ZXJlZCB0aGF0LCBpIGRyb3BwZWQgZnVydGhlciBpbnZlc3RpZ2F0aW9u
+Lgo+Cj4gaSBhbSBob3dldmVyIGF3YXJlIHRoYXQgaWYgeW91IHdpc2ggdG8gZG8gbXVsdGktaXNz
+dWUsIHRoZSBST0Igd2lsbCBuZWVkCj4gdG8gYmUgbXVsdGktcG9ydGVkIFNSQU0uICB3aXRob3V0
+IG11bHRpLXBvcnRpbmcgdGhlIFNSQU0sIHlvdSBzaW1wbHkKPiBjYW5ub3Qgd3JpdGUgbXVsdGlw
+bGUgZW50cmllcy4KPgo+IHRoaXMgaXMgd2hlcmUgdGhlIHByb2JsZW1zIChyZWFkOiBuaWdodG1h
+cmVzKSBmb3IgVG9tYXN1bG8gc3RhcnQgdG8gbWFuaWZlc3QsCj4gYW5kIHByb2dyZXNzIGZyb20g
+dGhlcmUgdGhyb3VnaCBtdWx0aXBsZSBDb21tb24gRGF0YSBCdXMgY2hhbm5lbHMgaW50bwo+IG11
+bHRpLXBvcnRlZCAoTnhSLCBOeFcpIENBTXMgYXQgdGhlIFJlc2VydmF0aW9uIFN0YXRpb24gbGV2
+ZWwuCj4KPiBpJ3ZlIGJlZW4gdGhyb3VnaCB0aGlzLCBvaywgb3ZlciAxOCBtb250aHMgYWdvLgo+
+Cj4gYnkgY29udHJhc3QsIHdoZW4gY29udmVydGVkIHRvIHNpbmdsZS1iaXQgdW5hcnkgdmVjdG9y
+cywgZWFjaCBlbnRyeSBpbiB0aGUKPiBNYXRyaWNlcyAoY292ZXJlZCBieSBhIHNpbmdsZSBTUiBO
+QU5EIGxhdGNoKSBpcyAqaW5kZXBlbmRlbnQqLiAgbXVsdGlwbGUKPiBvZiB0aG9zZSBtYXkgYmUg
+c2V0IGluIGEgc2luZ2xlIGN5Y2xlLgo+Cj4gdGhlcmUgaGFzIGJlZW4gYSAqbWFzc2l2ZSogYW1v
+dW50IG9mIHRob3VnaHQgZ29uZSBpbnRvIHRoaXMsIG9rPwo+Cj4KPiA+ID4gZ2l2ZW4gdGhhdCBJ
+bnRlbCBwcm9jZXNzb3JzIHVzZSBUb21hc3Vsbywgd2Ugc3RhcnQgdG8gc2VlIHdoeSBJbnRlbAo+
+ID4gPiBwcm9jZXNzb3JzIHN1Y2sgc28gbXVjaCBwb3dlci4KPiA+Cj4gPiBQb3dlciBjb25zdW1w
+dGlvbiBvbiBhIHByb2Nlc3NvciBpcyBwcmltYXJpbHkgZnJvbSBoaWdoIHN3aXRjaGluZwo+ID4g
+cmF0ZXMgb24gbGFyZ2UgcmVnaXN0ZXIgZmlsZXMsIGFuZCBTUkFNIGxlYWthZ2UuCj4KPiBnaXZl
+biB0aGF0IHdlJ3JlIHBsYW5uaW5nIGFyb3VuZCAyOCBGdW5jdGlvbiBVbml0cyBhbmQgaGF2ZSBh
+IDEyOC1lbnRyeQo+IHJlZ2lzdGVyIGZpbGUsIHRoZSBjYWxjdWxhdGlvbnMgdGhhdCBpIGRpZCBm
+b3IgdGhhdCB3b3VsZCBwdXQgdGhlIERlcGVuZGVuY3kKPiBNYXRyaWNlcyBhcm91bmQgYSB3aG9w
+cGluZyA1MCwwMDAgZ2F0ZXMsIHVzaW5nIFNSIE5BTkQgTGF0Y2hlcy4KPgo+IChpZiB3ZSBkaWQg
+aXQgYXMgREZGcyBpdCB3b3VsZCBiZSBhbiB1bmFjY2VwdGFibGUgMjUwLDAwMCBnYXRlcykKPgo+
+ID4gVGhlIHNjaGVkdWxpbmcgbG9naWMgaXMgYSBtaW5pc2N1bGUgcG9ydGlvbi4KPgo+IG5vdCBm
+b3IgdGhlIGxhcmdlLXNjYWxlIG91dC1vZi1vcmRlciBzeXN0ZW1zIHRoYXQgd2UgYXJlIHBsYW5u
+aW5nIHRvCj4gZG8sIGl0J3Mgbm90LAo+IGR1ZSB0byB0aGUgbGFyZ2Ugc2l6ZWQgR1BVIHJlZ2lz
+dGVyIGZpbGUgKDEyOCBlbnRyaWVzLiAgYWN0dWFsbHkgMngKPiAxMjggLSAxMjggRlAsCj4gMTI4
+IElOVCkuCj4KPiB3ZSBtYXkgaGF2ZSB0byAqZG93biotc2NhbGUgdmlhIGEgcmVnZmlsZSBjYWNo
+ZSB0byBjb3BlIHdpdGggdGhhdC4KPiBkaXNjdXNzaW9uIGZvciBhbm90aGVyIHRpbWUuCj4KPgo+
+ID4gSW50ZWwgY29yZXMgYXJlIHBvd2VyLWh1bmdyeSBiZWNhdXNlCj4gPiBoaXN0b3JpY2FsbHkg
+dGhleSBoYXZlIHRhcmdldGVkIHRoZSBkZXNrdG9wL3dvcmtzdGF0aW9uIG1hcmtldCwgYW5kIGRv
+Cj4gPiBub3QgaGF2ZSBhcyBtYW55IGRlY2FkZXMgb2YgZXhwZXJpZW5jZSBhcyBvdGhlciBmaXJt
+cyBvcHRpbWl6aW5nIGZvcgo+ID4gcG93ZXItY29uc3RyYWluZWQgZW52aXJvbm1lbnRzLgo+Cj4g
+YXBwcmVjaWF0ZWQgdGhlIGluc2lnaHQuCj4KPiA+IEFsc28gYWxtb3N0IGFsbCBtb2Rlcm4gT09P
+IGNvcmVzIHVzZSBUb21hc3VsbyBiZWNhdXNlIFRvbWFzdWxvIGlzCj4gPiBiZXR0ZXIgYXQgYXZv
+aWRpbmcgZmFsc2UgaGF6YXJkcyBjb21wYXJlZCB0byBzY29yZWJvYXJkaW5nLgo+Cj4gaW4gdGhl
+IHZlcnNpb25zIG9mIHNjb3JlYm9hcmRzIGltcGxlbWVudGVkIGJ5IGFjYWRlbWljcyAtIGJlY2F1
+c2UgdGhleQo+IGZhaWwgdG8gY29tcHJlaGVuZCB0aGVtIHByb3Blcmx5IC0gYmVjYXVzZSB0aGV5
+IG9ubHkgcmVhZCB0aGUgcGF0ZW50Cj4gb24gUS1UYWJsZXMgLSB5ZXMuCj4KPiBpbiB0aGUgdmVy
+c2lvbiB0aGF0IE1pdGNoIEFsc3VwIC0gYSB3b3JsZCBsZWFkaW5nIGV4cGVydCBvbiBTY29yZWJv
+YXJkCj4gTWVjaGFuaWNzIC0gdGF1Z2h0IG1lOgo+Cj4gbm8uCj4KPiBhbHNvLCB0aGUgSUlUIE1h
+ZHJhcyBSSVNFIEdyb3VwIFNoYWt0aSBFLUNsYXNzIHByb2Nlc3NvciBpcyAqYWxzbyogYQo+IHNj
+b3JlYm9hcmQgZGVzaWduLiAgdGhpcyB3YXMgZGVzaWduZWQgImZyb20gZmlyc3QgcHJpbmNpcGxl
+cyIgYnkgUHJvZmVzc29yCj4gS2FtYXRvdGksIGFuZCBpdCB3YXMgb25seSB0aHJvdWdoIGxlYXJu
+aW5nIGZyb20gTWl0Y2ggdGhhdCBpIHdhcyBhYmxlCj4gdG8gcmVjb2duaXNlIHdoYXQgaGUgaGFk
+IGRvbmUgYXMgYmVpbmcgaWRlbnRpY2FsIHRvIGEgNjYwMCBzY29yZWJvYXJkLgo+Cj4gPiBUb21h
+c3Vsbwo+ID4gYWxzbyBtYWtlcyBpdCBlYXNpZXIgdG8gaW1wbGVtZW50IHByZWNpc2UgdHJhcHMs
+IHNvbWV0aGluZyB3aGljaCBpcwo+ID4gbm90b3Jpb3VzbHkgY2hhbGxlbmdpbmcgIHdpdGgganVz
+dCBhIHNjb3JlYm9hcmQuCj4KPiBubyBpdCBpcyBub3QuICB0aGlzIGlzICp5ZXQgYWdhaW4qIGNv
+bXBsZXRlIGZhY3R1YWwgbWlzaW5mb3JtYXRpb24gYW5kIGlnbm9yYW5jZQo+IGZyb20gQWNhZGVt
+aWMgbGl0ZXJhdHVyZS4KPgo+IGNhbiBpIGFzazogaGF2ZSB5b3UgcmVhZCBQYXR0ZXJzb24ncyBi
+b29rPyAgdGhpcyBpcyB0aGUgdXN1YWwgcGxhY2Ugd2hlcmUKPiBtb3N0IHBlb3BsZSBnZXQgdGhl
+aXIgbWlzaW5mb3JtYXRpb24gZnJvbS4gIHRoZSByZWxlYXNlIG9mIHRoaXMgbWlzaW5mb3JtYXRp
+b24KPiB3YXMgd2h5IE1pdGNoIEFsc3VwIC0gYSB2ZXJ5IHBpc3NlZC1vZmYgYW5kIGV4YXNwZXJh
+dGVkIE1pdGNoIC0gd3JvdGUgdGhvc2UKPiB0d28gY2hhcHRlcnMsIGJhY2sgYXJvdW5kLi4uIDIw
+MDggKGkgdGhpbmspLgo+Cj4gcHJlY2lzZSBleGNlcHRpb25zLCB0cmFwcywgaW50ZXJydXB0cywg
+YnJhbmNoIHNwZWN1bGF0aW9uIGFuZCBwcmVkaWNhdGlvbiBtYXkKPiBhbGwgYmUgYWNoaWV2ZWQg
+dGhyb3VnaCAic2hhZG93aW5nIi4gIHNlZSB0aGUgbGF0dGVyIHBhcnQgb2YgdGhlIDJuZCBjaGFw
+dGVyIG9mCj4gTWl0Y2gncyBib29rLgo+Cj4gc2VlIHRoZSBzZWN0aW9uICJTaGFkb3dpbmciIGlu
+IHRoaXMgcGFnZToKPiBodHRwczovL2xpYnJlLXNvYy5vcmcvM2RfZ3B1L2FyY2hpdGVjdHVyZS82
+NjAwc2NvcmVib2FyZC8KPgo+IGl0J3MgdmVyeSBzaW1wbGU6IHlvdSBob2xkIHdyaXRlIHVudGls
+IHN1Y2ggdGltZSBhcyB0aGUgb3Bwb3J0dW5pdHkgZm9yICJkYW1hZ2UiCj4gaXMgY2xlYXJlZC4g
+IE9wZXJhbmQgRm9yd2FyZGluZyBhbGxvd3MgaW5zdHJ1Y3Rpb25zIHRvIHJ1biBhaGVhZCwgdXNp
+bmcgcmVzdWx0cwo+IHRoYXQgd291bGQgb3RoZXJ3aXNlIGhhdmUgdG8gYmUgcmVjZWl2ZWQgb25s
+eSBmaXJzdCBieSBnb2luZyB0aHJvdWdoCj4gdGhlIFJlZ2ZpbGUuCj4KPiAqdGhpcyBpcyBhbHJl
+YWR5IGltcGxlbWVudGVkKiBhbmQgdGhlIHVuaXQgdGVzdHMgZGVtb25zdHJhdGVkIGl0IGFzCj4g
+KmZ1bGx5IGZ1bmN0aW9uYWwqCj4KPgo+ID4gTGV0cyBiZSBjbGVhciBoZXJlLiBUaGUgQ0RDNjYw
+MCBBVk9JRFMgV0FSIGFuZCBXQVcgaGF6YXJkcyBieSBCTE9DS0lORwo+ID4geW91bmdlciBpbnN0
+cnVjdGlvbnMgKFNlZSBwZzMgaW4gTWl0Y2ggQWxzdXAncyB0ZXh0KS4gVG9tYXN1bG8ncwo+ID4g
+c3VwcG9ydHMgT09PIGV4ZWN1dGlvbiBQQVNUIFdBUiBhbmQgV0FXIGhhemFyZHMsIGVuYWJsaW5n
+IHRoZSBjb3JlIHRvCj4gPiBleHBsb2l0IG1vcmUgSUxQIGFjcm9zcyBpdHMgZnVuY3Rpb25hbCB1
+bml0cy4KPgo+IHRoaXMgaXMgb25seSBiZWNhdXNlIHRoZSAxOTY1IENEQzY2MDAgZGlkIG5vdCBo
+YXZlIGFuIE9wZXJhbmQgRm9yd2FyZGluZyBCdXMKPiAoaW5zdGVhZCBpdCB1c2VkIHRoZSByZWdm
+aWxlIGFzIGEgc2FtZS1jbG9jayBmb3J3YXJkaW5nIGJ1cywgYnkgcmVhZGluZyBvbiBvbmUKPiBl
+ZGdlIGFuZCB3cml0aW5nIG9uIHRoZSBvdGhlci4gIHRoaXMgdW5mb3J0dW5hdGVseSBtZWFudCB0
+aGF0IHdpdGhvdXQgYW4gT3BGd2QKPiBCdXMsIHN0YWxsIGhhZCB0byBvY2N1cikuCj4KPiB0aGlz
+IERPRVMgTk9UIElOSEVSRU5UTFkgTUVBTiB0aGF0ICoqQUxMKiogU2NvcmVib2FyZHMgYXJlIHJ1
+YmJpc2guCj4KPiBpZiB5b3UgYWRkIGFuIE9wZXJhbmQgRm9yd2FyZGluZyBCdXMgKGVxdWl2YWxl
+bnQgdG8gdGhlIENEQiBpbiBUb21hc3VsbykKPiB0aGUgZXhhY3Qgc2FtZSBwYXJpdHkgZnVuY3Rp
+b25hbGl0eSBpcyBhY2hpZXZlZCAod2l0aG91dCB0aGUgc2V2ZXJlIGRvd25zaWRlcykuCj4KPgo+
+ID4gTHVrZSwgSSBhZ3JlZSB3aXRoIHlvdSB0aGF0IHRoZSByZXNlcnZhdGlvbiBzdGF0aW9uIHJv
+d3MgaW4gVG9tYXN1bG8ncwo+ID4gY2FuIGJlIGVxdWl2YWxlbnQgdG8gdGhlIG9wZXJhbmQgbGF0
+Y2hlcyBpbiBTY29yZWJvYXJkaW5nLiBIb3dldmVyLAo+ID4gYWRkaW5nIG1hbnkgb3BlcmFuZC1s
+YXRjaGVzIChieSBoYXZpbmcgbWFueSBmdW5jdGlvbmFsIHVuaXRzKSBkb2VzIG5vdAo+ID4gc2Nh
+bGUgYXMgbmljZWx5IGFzIGp1c3QgYWRkaW5nIGEgZmV3IG1vcmUgcm93cyB0byBUb21hc3Vsbydz
+Cj4gPiByZXNlcnZhdGlvbiBzdGF0aW9ucy4KPgo+IHRoaXMgaXMgaW5jb3JyZWN0LiAgeW91IG1h
+eSBiZSB1bmRlciB0aGUgbWlzdGFrZW4gaW1wcmVzc2lvbiB0aGF0IHRoZSBwaXBlbGluZXMKPiBk
+dXBsaWNhdGVkIGFzIHdlbGwuICB0aGlzIGNsZWFybHkgd291bGQgYmUgaW5hZHZpc2VhYmxlIGJl
+Y2F1c2UgdGhlIEZVJ3Mgam9iCj4gaXMgdG8gc2VydmUgb25lIGFuZCBvbmx5IG9uZSByZXN1bHQu
+ICB0aGVyZWZvcmUgeW91IGtub3cgdGhhdCB0aGlzIGlzIGEgbWlzdGFrZW4KPiB1bmRlcnN0YW5k
+aW5nLCBhbmQgdGhhdCBjb25zZXF1ZW50bHkgeW91IGhhdmUgbXVsdGlwbGUgRlVzIGZvciB0aGUg
+c2FtZQo+IHBpcGVsaW5lLiAgKHRlcm1lZCAiQ29uY3VycmVudCBDb21wdXRhdGlvbiBVbml0Iiku
+Cj4KPiB0aGVyZWZvcmUgaXQncyBtaW5pbWFsLiAgZXhjbHVkaW5nIHRoZSBsYXRjaGVzIHRoZW1z
+ZWx2ZXMgKHRoZSByb3dzCj4gaGF2ZSBsYXRjaGVzLCB0aGUKPiBDb21wVW5pdHMgLSBha2EgRnVu
+Y3Rpb25Vbml0cyBoYXZlIGxhdGNoZXMsIHRoZSB0b3RhbCBudW1iZXIgb2YgbGF0Y2hlcyBhZnRl
+cgo+IGZsYXR0ZW5pbmcgaXMgdGhlIHNhbWUpLCB0aGUgbnVtYmVyIG9mIGdhdGVzIGFkZGVkIGJ5
+IGVhY2ggQ29tcFVuaXQgaXMKPiBtaW5pbWFsOiBhcm91bmQuLi4gODAsIG1heGltdW0uCj4KPiB0
+aGF0J3MgcGVhbnV0cy4KPgo+ID4gRXNwZWNpYWxseSBzaW5jZSBkZXNpZ25pbmcgdGhlIENBTXMg
+Zm9yCj4gPiBUb21hc3VsbydzIGlzIGEgd2VsbCBzdHVkaWVkLCBhbmQgd2VsbC11bmRlcnN0b29k
+IHByb2JsZW0KPgo+IHRoZSBrZXkgaXMgdGhlIGNvbWJpbmF0aW9uIG9mIHRob3NlIHR3bzoKPgo+
+IEEpIHdlbGwtdW5kZXJzdG9vZC4uLiAqYW5kKgo+IEIpIGEgcHJvYmxlbS4KPgo+IGhhdmUgYSBs
+b29rIGF0IGhvdyBtdWx0aS1pc3N1ZSBpcyBkb25lIHVzaW5nIFRvbWFzdWxvLiAgaXQncyBzaG9j
+a2luZ2x5IGJhZC4KPgo+Cj4gPiA+IDMuIEV4cGFuZCB0aGUgbnVtYmVyIG9mIFJTZXMgc28gdGhh
+dCBpZiB5b3Ugd2VyZSB0byBjb3VudCB0aGUgdG90YWwgbnVtYmVyCj4gPiA+IG9mIHBsYWNlcyBv
+cGVyYW5kcyBhcmUgc3RvcmVkLCB0aGV5IGFyZSB0aGUgc2FtZS4KPiA+Cj4gPiA+IChhbm90aGVy
+IHdheSB0byBwdXQgdGhpcyBpcywgImZsYXR0ZW4gYWxsIDJEIFJTZXMgaW50byAxRCIpCj4gPgo+
+ID4gVGhpcyBkb2VzIG5vdCBzY2FsZSB3ZWxsLiBBIDJEIENBTSBpcyBmYXIgbW9yZSBhcmVhIGVm
+ZmljaWVudCB0aGFuIGEKPiA+IDFEIGZsYXR0ZW5lZCB2ZWN0b3IuCj4KPiBhIDFEIGJpdHZlY3Rv
+ci4gIGEgc2luZ2xlLCAxRCBiaXR2ZWN0b3IuICBvZiAzMiBiaXRzIGluIGxlbmd0aC4KPgo+IGNv
+bXBhcmVkIHRvIDMyIDUtYml0IGJpbmFyeSBhZGRyZXNzZXMuCj4KPiBqdXN0IHRoZSBsYXRjaGVz
+IGFsb25lLCB0aGF0IG1hdGggZG9lcyBub3Qgc3RhY2sgdXAuCj4KPiBub3cgbGV0J3MgdGFrZSBp
+dCB0byAyRC4KPgo+IGxldCdzIHNheSB0aGF0IHdlIGhhdmUgMTAgRlVzIGFuZCAzMiAgUmVncy4K
+Pgo+IGluIFRvbWFzdWxvIHRoYXQgaXMgYSA1LWJpdCBhZGRyZXNzLiAgMTB4NSA9IDUwIERGRiBs
+YXRjaGVzLiAgREZGCj4gbGF0Y2hlcyBhcmUgMTAgZ2F0ZXMgc28gdGhhdCdzIDUwMCBnYXRlcy4K
+Pgo+IGluIDY2MDAgdGhhdCBpcyAxMHgzMiA9IDMyMCBTUiBOQU5EIExhdGNoZXMuICBTUiBOQU5E
+IGxhdGNoZXMgYXJlIDIKPiBnYXRlcy4gIDMyMHgyIGlzIDY0MCBnYXRlcy4KPgo+IG5vdCB2ZXJ5
+IGRpZmZlcmVudCBpbiB0ZXJtcyBvZiBsYXRjaCBjb3VudCwgaXMgaXQ/Cj4KPgo+IG5vdyBsZXQn
+cyBkbyB0aGUgYWRkcmVzcy1jaGVja2luZy4KPgo+IHRvIGNoZWNrIGEgcmVnaXN0ZXIgYXMgImFj
+dGl2ZSIgLSBiZWFyIGluIG1pbmQgdGhhdCB0aGlzIGlzIHBlcgo+IHJlZ2lzdGVyIGFuZCBjb25z
+ZXF1ZW50bHkKPiBpZiBkb2luZyBtdWx0aS1pc3N1ZSB0aGF0J3MgYSBiYXRjaCBvZiBhZGRyZXNz
+LWNoZWNraW5nIGdhdGVzICpwZXIgcmVnaXN0ZXIqLgo+Cj4gZm9yIFRvbWFzdWx1LCB0aGlzIHJl
+cXVpcmVzIDEweDUgPSA1MDAgWE9SIGdhdGVzIChwbHVzIHNvbWUKPiBtdWx0aS1pbnB1dCBBTkQg
+Z2F0ZXMgb24gZWFjaCByb3cpICAgWE9SIGlzIDQgZ2F0ZXMsIHNvIHRoYXQncyAyLDAwMAo+IGdh
+dGVzICpQRVIgTVVMVEktSVNTVUUgTEFORSouCj4KPiBmb3IgdGhlIDY2MDAsIHRoYXQncyAxMHgz
+MiAqKkFORCoqIGdhdGVzLiAgMzIwIEFORCBnYXRlcy4KPgo+IGFuZCBvZiB0aG9zZSAzMjAgQU5E
+IGdhdGVzLCB0aGV5IGFyZSByZS11c2VhYmxlIGZvciBtdWx0aS1pc3N1ZQo+IFdJVEhPVVQgUkVR
+VUlSSU5HIEFERElUSU9OQUwgR0FURVMuCj4KPiBzbyB0aGF0IGlzIDMyMCBBTkQgZ2F0ZXMgZm9y
+IHNpbmdsZS1pc3N1ZQo+IHRoYXQgaXMgemVybyBleHRyYSBnYXRlcyBmb3IgZHVhbC1pc3N1ZQo+
+IHRoYXQgaXMgemVybyBleHRyYSBnYXRlcyBmb3IgcXVhZC1pc3N1ZQo+IHplcm8gZXh0cmEgZ2F0
+ZXMgZm9yIG9jdGFsLWlzc3VlLgo+Cj4gc3RhcnQgdG8gbWFrZSBzZW5zZSBub3csIHdoeSB1bmFy
+eSBlbmNvZGluZyBhcyAxRCB2ZWN0b3JzIGlzIGxlc3MKPiBnYXRlcyBhbmQgbGVzcyBwb3dlciB0
+aGFuIGJpbmFyeSBDQU1zPwo+Cj4gaWYgeW91IHdhbnQgdG8gY2hlY2sgbXVsdGlwbGUgdW5hcnkg
+Yml0cyAoYSBjcml0aWNhbCBwcmVyZXF1aXNpdGUgZm9yCj4gbXVsdGktaXNzdWUpLCBhbGwgeW91
+IGRvIGlzLi4uIHNldC4uLiBtdWx0aXBsZS4uLiBiaXRzLgo+Cj4gd2hhdCBoYXBwZW5zPyAgbXVs
+dGlwbGUgQU5EIGdhdGVzIGZpcmUuICBpbiB0aGUgc2FtZSBjbG9jay4gICBhbmQKPiB0aGF0J3Mg
+ZXhhY3RseSB3aGF0IHdlIHdhbnQuCj4KPgo+ID4gPiA3LiByZW5hbWUgUlNlcyB0byAiRnVuY3Rp
+b24gVW5pdHMiIChhY3R1YWxseSBpbiBUaG9ybnRvbidzIGJvb2sgdGhlIHBocmFzZQo+ID4gPiAi
+Q29tcHV0YXRpb24gVW5pdHMiIGlzIHVzZWQpCj4gPgo+ID4gU28gYSBUb21hc3VsbydzIGRlc2ln
+biB3aXRoIDQgcm93cyBub3cgYmVjb21lcyBhICJmbGF0dGVuZWQiIGRlc2lnbgo+ID4gd2l0aCA0
+IGZ1bmN0aW9uYWwgdW5pdHM/IFRoZSBhZGRpdGlvbmFsIGNvc3Qgb2YgdGhlIGZ1bmN0aW9uYWwg
+dW5pdHMKPiA+IGlzIGVub3Jtb3VzLgo+Cj4gbm8sIGl0J3MgNCB4IDgwIGdhdGVzIChhcHByb3gp
+LiAgdGhhdCdzIG5vdCA0eCBkdXBsaWNhdGlvbiBvZiBBTFUKPiBwaXBlbGluZXMgKmJlaGluZCog
+dGhvc2UgNCBGdW5jdGlvbiBVbml0cy4gIHNlZSBNaXRjaCdzIDJuZCBDaGFwdGVyLAo+ICJDb25j
+dXJyZW50IENvbXB1dGF0aW9uIFVuaXQiCj4KPiBodHRwczovL2xpYnJlLXNvYy5vcmcvM2RfZ3B1
+L2FyY2hpdGVjdHVyZS82NjAwc2NvcmVib2FyZC82MDB4LWNvbmN1cnJlbnRfY29tcF91bml0LnBu
+Zwo+Cj4gSmVyZW15OiBpdCdzIHJhdGhlciB1bmZvcnR1bmF0ZSB0aW1pbmcuICBzaXggdG8gdHdl
+bHZlIG1vbnRocyBhZ28sIHdlCj4gY291bGQgaGF2ZSBoYWQgdGhpcyBkZWJhdGUgYW5kIGl0IHdv
+dWxkIGhhdmUgYmVlbiBmdW4sIGluZm9ybWF0aXZlLAo+IHVzZWZ1bCBhbmQgcHJvZHVjdGl2ZS4g
+IGl0IHdvdWxkIGFsc28gaGF2ZSBiZWVuIHBvc3NpYmxlIHRvIGJyaW5nIHlvdQo+IGluIHRvIHRo
+ZSBkaXNjdXNzaW9ucyB0aGF0IHRvb2sgcGxhY2UgKE5vdiAyMDE4IHRvIGFyb3VuZCBBcHItTWF5
+Cj4gMjAxOSkgYmV0d2VlbiBteXNlbGYsIFNhbXVlbCBGYWx2bywgTWl0Y2ggQWxzdXAgYW5kIHRo
+ZSB0ZWFtIGVpdGhlcgo+IGhlcmUgb24gdGhpcyBsaXN0LCBvciBvbiBjb21wLmFyY2guCj4KPiBo
+b3dldmVyIHdpdGggdGhlIHVwY29taW5nIGRlYWRsaW5lLCB0aGlzIGtpbmQgb2Ygb3RoZXJ3aXNl
+IHJlYWxseQo+IHZhbHVhYmxlIGRpc2N1c3Npb24gaXMsIHNhZGx5LCBzb21ldGhpbmcgdGhhdCB3
+ZSAqZG8gbm90IGhhdmUgdGltZQo+IGZvciouCj4KPiByZXRyb3NwZWN0aXZlIHJlY29tbWVuZGF0
+aW9uIHRoYXQgd2UgcmVjb25zaWRlciBhbmQgdXNlIFRvbWFzdWxvIHdvdWxkCj4gbm90IG9ubHkg
+cmVzdWx0IGluIHVzIGNvbXBsZXRlbHkgbWlzc2luZyB0aGUgdXBjb21pbmcgT2N0IDIwMjAKPiBk
+ZWFkbGluZSwgd2Ugd291bGQgZW5kIHVwIHdpdGggYW4gZXhjZXB0aW9uYWxseSBwb29ybHktcGVy
+Zm9ybWluZywKPiBsaW1pdGVkIGFuZCBzZXJpb3VzbHkgcHJvYmxlbWF0aWMgcHJvY2Vzc29yIGFz
+IHdlbGwuICB3b3JzZSB0aGFuIHRoYXQsCj4gc2FkbHkgaSBoYXZlIHRvIHNheSB0aGF0IGkgYW0g
+Y29uY2VybmVkIHRoYXQgYW55IHJldHJvc3BlY3RpdmUKPiBkaXNjdXNzaW9uIHdvdWxkIGl0c2Vs
+ZiAoYXNpZGUgZnJvbSB2YWx1YWJsZSBjb3JyZWN0aW9ucyBhbmQKPiBhc3Npc3RhbmNlIGluIGNy
+ZWF0aW5nIGEgY29tcGFyYXRpdmUgYW5hbHlzaXMpIGJlY29tZSBhIHNlcmlvdXMKPiBkaXN0cmFj
+dGlvbi4KPgo+IGl0J3MgbGlpdHRlcmFsbGx5IHRha2VuIDE4IE1PTlRIcyB0byBnZXQgdG8gdGhl
+IHBvaW50IHdoZXJlIHdlIGFyZSBub3cKPiB3aXRoIHRoZSBjb2RlIGFuZCB0aGUgZGVzaWduLiAg
+d2UgbmVlZCB0byBmaW5pc2ggdGhlIGRlc2lnbiBpbiBhIHZlcnkKPiBzaG9ydCB0aW1lZnJhbWUg
+KDE0IHdlZWtzKSwgYW5kIGFzIFllaG93c2h1YSBwb2ludHMgb3V0LCBkdWUgdG8gdGhlCj4gY29t
+cGxleGl0eSBvZiB0aGlzIHBhcnRpY3VsYXIgYXJlYSBvZiBDb21wdXRlciBTY2llbmNlLCB0aGF0
+IGluIHR1cm4KPiBpbXBsaWVzIHRoYXQgeW91J2xsIG5lZWQgdG8gdHJ1c3QgbWUgb24gdGhlIGFy
+Y2hpdGVjdHVyYWwgYW5hbHlzaXMKPiAod2hpY2ggdG9vayA1IG1vbnRocyB0byBjb21wbGV0ZSwg
+dW5kZXIgTWl0Y2gncyBndWlkYW5jZSkuCj4KPiBzbywgbXkgYXBvbG9naWVzIGZvciBuZWVkaW5n
+IHRvIGJlIGZpcm0gb24gdGhpczogdGhlIG9wcG9ydHVuaXR5IHRvCj4gaGVscCBleGlzdHMgd2l0
+aGluIHRoZSB0aW1lLWZyYW1lIGFuZCBmaW5hbmNpYWwgY29uc3RyYWludHMgdGhhdCB3ZXJlCj4g
+ZGV0ZXJtaW5lZCBhbmQgc2V0LCBvdmVyIDE4IG1vbnRocyBhZ28sIGJlZm9yZSB5b3Ugam9pbmVk
+Lgo+Cj4gdGhlcmVmb3JlLCBpZiB5b3UnZCBsaWtlIHRvIGhlbHAsIHRoZW4gYXNraW5nIHF1ZXN0
+aW9ucyB3aGljaCBhcmUKPiByZWxhdGVkIHRvICp1bmRlcnN0YW5kaW5nKiBvZiB0aGUgcHJlY2lz
+ZS1hdWdtZW50ZWQgU2NvcmVib2FyZCBzeXN0ZW0sCj4gdGFyZ2V0dGVkIHZlcnkgc3BlY2lmaWNh
+bGx5IGF0IGFsbG93aW5nIHlvdSB0byBlbmdhZ2UgYW5kIGFzc2lzdCB1cyBpbgo+IG1lZXRpbmcg
+dGhhdCBkZWFkbGluZSwgYXJlIHZlcnkgd2VsY29tZS4KPgo+IGFueXRoaW5nIG90aGVyIHRoYW4g
+dGhhdCB2ZXJ5IHNwZWNpZmljIGdvYWwtb3JpZW50YXRlZCBmb2N1cywgaSBhbQo+IHJlYWxseSBz
+b3JyeSwgd2UgcmVhbGx5IG5lZWQgdG8gbW92ZSBpdCB0byBvbmUgc2lkZSwgYW5kIGZvciB0aGF0
+LCBpCj4gcmVjb21tZW5kIGNvbXAuYXJjaC4KPgo+IHRoZXJlZm9yZSwgaWYgeW91IHdvdWxkIGxp
+a2UgdG8gZGlzY3VzcyB0aGUgbWVyaXRzIG9mIFRvbWFzdWxvIHZzCj4gU2NvcmVib2FyZCAocGFy
+dGljdWxhcmx5IHRob3NlIHRoYXQgcHVyc3VlIHJlY29tbWVuZGluZyBUb21hc3Vsbwo+ICpvdmVy
+KiBTY29yZWJvYXJkKSBmdXJ0aGVyLCBpIHJlY29tbWVuZCBkb2luZyBzbyBvbiBjb21wLmFyY2gs
+IHdoaWNoCj4gaXMgd2hlcmUgTWl0Y2ggQWxzdXAgbW9zdCByZWd1bGFybHkgbWF5IGJlIGZvdW5k
+LiAgd2l0aCB0aGUgcmlnaHQKPiBpbnRlcmVzdGluZyBxdWVzdGlvbiwgYm90aCBoZSBhbmQgbWFu
+eSBvdGhlcnMgd2lsbCBwaXRjaCBpbi4KPgo+IHRoZSBvbmUgdGhpbmcgdGhhdCB5b3UgbmVlZCB0
+byBiZSBhd2FyZSBvZiBpcyB0aGF0IE1pdGNoIGlzIGJvdGgKPiBoeXBlci1pbnRlbGxpZ2VudCwg
+YW5kIHNlY29uZCB0aGF0IGhlIGRvZXMgbm90IHRvbGVyYXRlIHBlb3BsZSB3aG8KPiBjYW5ub3Qg
+a2VlcCB1cCB3aXRoIGhpbSwgZXNwZWNpYWxseSBpZiB0aGV5IHRyeSB0byBjb252aW5jZSBoaW0g
+b2YKPiBzb21ldGhpbmcgd2l0aG91dCBoYXZpbmcgZmlyc3QgZGVtb25zdHJhdGVkIHRoYXQgdGhl
+eSd2ZSB1bmRlcnN0b29kCj4gKmhpbSouICBoZSdzIHdlbGwgb3ZlciA3MCwgaGUncyByZXRpcmVk
+LCBoZSBtYWRlIGVub3VnaCAieHh4eC15b3UiCj4gbW9uZXkgb24gc2VsbGluZyBHUFUgcGF0ZW50
+cyB0byBTYW1zdW5nLCBzbyBoZSBkb2Vzbid0IGhhdmUgdG8gcHV0IHVwCj4gd2l0aCBhbnl0aGlu
+ZyB0aGF0IGhlIGRvZXNuJ3Qgd2FudCB0byA6KQo+Cj4gbC4KPgo+IF9fX19fX19fX19fX19fX19f
+X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCj4gbGlicmUtcmlzY3YtZGV2IG1haWxpbmcg
+bGlzdAo+IGxpYnJlLXJpc2N2LWRldkBsaXN0cy5saWJyZS1yaXNjdi5vcmcKPiBodHRwOi8vbGlz
+dHMubGlicmUtcmlzY3Yub3JnL21haWxtYW4vbGlzdGluZm8vbGlicmUtcmlzY3YtZGV2CgpfX19f
+X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwpsaWJyZS1yaXNjdi1k
+ZXYgbWFpbGluZyBsaXN0CmxpYnJlLXJpc2N2LWRldkBsaXN0cy5saWJyZS1yaXNjdi5vcmcKaHR0
+cDovL2xpc3RzLmxpYnJlLXJpc2N2Lm9yZy9tYWlsbWFuL2xpc3RpbmZvL2xpYnJlLXJpc2N2LWRl
+dgo=
+