Re: PEP 489: Multi-phase extension module initialization; version 5

Eric Snow <[email protected]> Tue, 19 May 2015 18:22:47 -0600
Newsgroups gmane.comp.python.import
Message-ID <CALFfu7DQs_njKixMVcXPXxXG=jmu1OAP1tD1k8FMwD=Zu0vC6w@mail.gmail.com>
T24gVHVlLCBNYXkgMTksIDIwMTUgYXQgNTowNiBBTSwgUGV0ciBWaWt0b3JpbiA8ZW5jdWtvdUBn
bWFpbC5jb20+IHdyb3RlOgo+IE9uIDA1LzE5LzIwMTUgMDU6NTEgQU0sIE5pY2sgQ29naGxhbiB3
cm90ZToKPj4gT24gMTkgTWF5IDIwMTUgYXQgMTA6MDcsIEVyaWMgU25vdyA8ZXJpY3Nub3djdXJy
ZW50bHlAZ21haWwuY29tPiB3cm90ZToKPj4+IE9uIE1vbiwgTWF5IDE4LCAyMDE1IGF0IDg6MDIg
QU0sIFBldHIgVmlrdG9yaW4gPGVuY3Vrb3VAZ21haWwuY29tPiB3cm90ZToKPj4+PiBbc25pcF0K
Pj4+Pgo+Pj4+IEZ1cnRoZXJtb3JlLCB0aGUgbWFqb3JpdHkgb2YgY3VycmVudGx5IGV4aXN0aW5n
IGV4dGVuc2lvbiBtb2R1bGVzIGhhcwo+Pj4+IHByb2JsZW1zIHdpdGggc3ViLWludGVycHJldGVy
IHN1cHBvcnQgYW5kL29yIGludGVycHJldGVyIHJlbG9hZGluZywgYW5kLAo+Pj4+IHdoaWxlCj4+
Pj4gaXQgaXMgcG9zc2libGUgd2l0aCB0aGUgY3VycmVudCBpbmZyYXN0cnVjdHVyZSB0byBzdXBw
b3J0IHRoZXNlCj4+Pj4gZmVhdHVyZXMsIGl0IGlzIG5laXRoZXIgZWFzeSBub3IgZWZmaWNpZW50
Lgo+Pj4+IEFkZHJlc3NpbmcgdGhlc2UgaXNzdWVzIHdhcyB0aGUgZ29hbCBvZiBQRVAgMzEyMSwg
YnV0IG1hbnkgZXh0ZW5zaW9ucywKPj4+PiBpbmNsdWRpbmcgc29tZSBpbiB0aGUgc3RhbmRhcmQg
bGlicmFyeSwgdG9vayB0aGUgbGVhc3QtZWZmb3J0IGFwcHJvYWNoCj4+Pj4gdG8gcG9ydGluZyB0
byBQeXRob24gMywgbGVhdmluZyB0aGVzZSBpc3N1ZXMgdW5yZXNvbHZlZC4KPj4+PiBUaGlzIFBF
UCBrZWVwcyBiYWNrd2FyZHMgY29tcGF0aWJpbGl0eSwgd2hpY2ggc2hvdWxkIHJlZHVjZSBwcmVz
c3VyZSBhbmQKPj4+PiBnaXZlCj4+Pj4gZXh0ZW5zaW9uIGF1dGhvcnMgYWRlcXVhdGUgdGltZSB0
byBjb25zaWRlciB0aGVzZSBpc3N1ZXMgd2hlbiBwb3J0aW5nLgo+Pj4KPj4+IFNvIGp1c3QgYmUg
dG8gc3VyZSBJIHVuZGVyc3RhbmQsIG5vdyBQeU1vZHVsZURlZi5tX3Nsb3RzIHdpbGwKPj4+IHVu
YW1iaWd1b3VzbHkgaW5kaWNhdGUgd2hldGhlciBvciBub3QgYW4gZXh0ZW5zaW9uIG1vZHVsZSBp
cwo+Pj4gY29tcGxpYW50LCByaWdodD8KPj4KPj4gSSdtIG5vdCBzdXJlIHdoYXQgeW91IG1lYW4g
YnkgImNvbXBsaWFudCIuIEEgbm9uLU5VTEwgbV9zbG90cyB3aWxsCj4+IGluZGljYXRlIHVzYWdl
IG9mIG11bHRpLXBoYXNlIGluaXRpYWxpc2F0aW9uLCBzbyBpdCBhdCBsZWFzdCBpbmRpY2F0ZXMK
Pj4gKmludGVudCogdG8gY29ycmVjdGx5IHN1cHBvcnQgc3ViaW50ZXJwcmV0ZXJzIGV0IGFsLiBB
Y3R1YWwgZGVsaXZlcnkKPj4gb24gdGhhdCBwcm9taXNlIGlzIHN0aWxsIGEgZGlmZmVyZW50IHF1
ZXN0aW9uIDopCj4KPiBZZXMsIG5vbi1OVUxMIG1fc2xvdHMgbWVhbnMgdGhlIG1vZHVsZSBpcyBj
b21wbGlhbnQuIElmIGl0J3Mgbm90LCBpdCdzIGEKPiBidWcgaW4gdGhlICptb2R1bGUqIChpLmUu
IGNvbXBsaWFuY2UgaXMgbm90ICpqdXN0KiBhIG1hdHRlciBvZiBzZXR0aW5nCj4gc2V0dGluZyBt
X3Nsb3RzKS4KPiBUaGlzIHdpbGwgYmUgZXhwbGFpbmVkIGluIHRoZSBkb2NzLgoKUGVyZmVjdC4K
Cj4KPj4+PiBbc25pcF0KPj4+Pgo+Pj4+IFRoZSBwcm9wb3NhbAo+Pj4+ID09PT09PT09PT09PQo+
Pj4KPj4+IFRoaXMgc2VjdGlvbiBzaG91bGQgaW5jbHVkZSBhbiBpbmRpY2F0aW9uIG9mIGhvdyB0
aGUgbG9hZGVyIChhbmQKPj4+IHBlcmhhcHMgZmluZGVyKSB3aWxsIGNoYW5nZSBmb3IgYnVpbHRp
biwgZnJvemVuLCBhbmQgZXh0ZW5zaW9uCj4+PiBtb2R1bGVzLiAgSXQgbWF5IGhlbHAgdG8gZGVz
Y3JpYmUgdGhlIHByb3Bvc2FsIHVwIGZyb250IGJ5IGhvdyB0aGUKPj4+IGxvYWRlciBpbXBsZW1l
bnRhdGlvbiB3b3VsZCBsb29rIGlmIGl0IHdlcmUgc29tZWhvdyBpbXBsZW1lbnRlZCBpbgo+Pj4g
UHl0aG9uIGNvZGUuICBUaGUgc3Vic2VxdWVudCBzZWN0aW9ucyBzb21ldGltZXMgaW5kaWNhdGUg
d2hlcmUKPj4+IGRpZmZlcmVudCB0aGluZ3MgdGFrZSBwbGFjZSwgYnV0IGFuIGV4cGxpY2l0IG91
dGxpbmUgKGFzIFB5dGhvbiBjb2RlKQo+Pj4gd291bGQgbWFrZSB0aGUgZW50aXJlIGZsb3cgcmVh
bGx5IG9idmlvdXMuICBQdXR0aW5nIHRoYXQgdG93YXJkIHRoZQo+Pj4gYmVnaW5uaW5nIG9mIHRo
aXMgc2VjdGlvbiB3b3VsZCBoZWxwIGNsZWFybHkgc2V0IHRoZSBzdGFnZSBmb3IgdGhlCj4+PiBy
ZXN0IG9mIHRoZSBwcm9wb3NhbC4KPj4KPj4gKzEgZm9yIGEgcHNldWRvLWNvZGUgb3ZlcnZpZXcg
b2YgdGhlIGxvYWRlciBpbXBsZW1lbnRhdGlvbi4KPgo+IE9LLiBBbG9uZyB3aXRoIGEgbGluayB0
byBQRVAgNDUxIGNvZGUgWypdLCBpdCBzaG91bGQgbWFrZSB0aGluZ3MgY2xlYXJlci4KPiBbKl0g
aHR0cHM6Ly93d3cucHl0aG9uLm9yZy9kZXYvcGVwcy9wZXAtMDQ1MS8jaG93LWxvYWRpbmctd2ls
bC13b3JrCgpTb3VuZHMgZ29vZC4KCj4KPj4+PiBbc25pcF0KPj4+PiBVbmtub3duIHNsb3QgSURz
IHdpbGwgY2F1c2UgdGhlIGltcG9ydCB0byBmYWlsIHdpdGggU3lzdGVtRXJyb3IuCj4+Pgo+Pj4g
V2FzIHRoZXJlIGFueSBjb25zaWRlcmF0aW9uIG1hZGUgZm9yIGp1c3QgaWdub3JpbmcgdW5rbm93
biBzbG90IElEcz8KPj4+IE15IGd1dCByZWFjdGlvbiBpcyB0aGF0IHlvdSBoYXZlIGl0IHRoZSBy
aWdodCB3YXksIGJ1dCBJIGNhbiBzdGlsbAo+Pj4gaW1hZ2luZSB1c2UgY2FzZXMgZm9yIGN1c3Rv
bSBzbG90cyB0aGF0IFB5TW9kdWxlRGVmX0luaXQgd291bGRuJ3Qga25vdwo+Pj4gYWJvdXQuCj4+
Cj4+IFRoZSAia25vd24gc2xvdHMgb25seSwgYWxsIG90aGVyIHNsb3QgSURzIGFyZSByZXNlcnZl
ZCBmb3IgZnV0dXJlIHVzZSIKPj4gc2xvdCBzZW1hbnRpY3Mgd2VyZSBjb3BpZWQgZGlyZWN0bHkg
ZnJvbSBQeVR5cGVfRnJvbVNwZWMgaW4gUEVQIDM4NC4KPj4gU2luY2UgaXQncyBqdXN0IGEgbnVt
ZXJpYyBzbG90IElELCB5b3UnZCBydW4gYSBoaWdoIHJpc2sgb2YgY29uZmxpY3RzCj4+IGlmIHlv
dSBhbGxvd2VkIGZvciBjdXN0b20gZXh0ZW5zaW9ucy4KPj4KPj4gSWYgZm9sa3Mgd2FudCB0byBk
byBtb3JlIGNsZXZlciB0aGluZ3MsIHRoZXknbGwgbmVlZCB0byB1c2UgdGhlIGNyZWF0ZQo+PiBv
ciBleGVjIHNsb3QgdG8gc3Rhc2ggdGhlbSBvbiB0aGUgbW9kdWxlIG9iamVjdCwgcmF0aGVyIHRo
YW4gc3RvcmluZwo+PiB0aGVtIGluIHRoZSBtb2R1bGUgZGVmaW5pdGlvbi4KPgo+IFJpZ2h0LCBp
ZiB5b3UgbmVlZCBjdXN0b20gYmVoYXZpb3IsIHB1dCBpdCBpbiBhIGZ1bmN0aW9uIGFuZCB1c2Ug
dGhlCj4gcHJvdmlkZWQgaG9vay4gKElmIHlvdSBuZWVkIGN1c3RvbSAic2xvdHMiIG9uIFB5TW9k
dWxlRGVmIGZvciBzb21lCj4gcmVhc29uLCB1c2UgYSBQeU1vZHVsZURlZiBzdWJjbGFzcyAtLSBi
dXQgSSBjYW4ndCBzZWUgd2hlcmUgaXQgd291bGQgYmUKPiBoZWxwZnVsLikKPiBJZ25vcmluZyB1
bmtub3duIHNsb3QgSURzIHdvdWxkIG1lYW4gbGV0dGluZyBlcnJvcnMgZ28gdW5ub3RpY2VkLgoK
VGhpcyBpcyByZWFzb25hYmxlLiAgVGhhbmtzLgoKPgo+IChUZWNobmljYWxpdHk6IFB5TW9kdWxl
RGVmX0luaXQgZG9lc24ndCBjYXJlIGFib3V0IHNsb3RzOwo+IFB5TW9kdWxlX0Zyb21EZWZBbmRT
cGVjIGFuZCBQeU1vZHVsZV9FeGVjRGVmIGRvLiBhbmQgdGhleSB3aWxsIHJhaXNlIHRoZQo+IGVy
cm9ycy4pCj4KPj4+IFdoZW4gdXNpbmcgbXVsdGktcGhhc2UgaW5pdGlhbGl6YXRpb24sIHRoZSAq
bV9uYW1lKiBmaWVsZCBvZiBQeU1vZHVsZURlZgo+Pj4gd2lsbAo+Pj4gbm90IGJlIHVzZWQgZHVy
aW5nIGltcG9ydGluZzsgdGhlIG1vZHVsZSBuYW1lIHdpbGwgYmUgdGFrZW4gZnJvbSB0aGUKPj4+
IE1vZHVsZVNwZWMuCj4+Cj4+IFNvIG1fbmFtZSB3aWxsIGJlIHN0cmljdGx5IGlnbm9yZWQgYnkg
UHlNb2R1bGVEZWZfSW5pdD8KPgo+IFllcy4gVGhlIG5hbWUgaXMgdXNlZnVsIGZvciBpbnRyb3Nw
ZWN0aW9uLCBidXQgdGhlIGltcG9ydCBtYWNoaW5lcnkgd2lsbAo+IHVzZSB0aGUgbmFtZSBwcm92
aWRlZCBieSB0aGUgTW9kdWxlU3BlYy4KCk9rYXkuCgo+Cj4gKFRlY2huaWNhbGl0eTogYWdhaW4s
IFB5TW9kdWxlRGVmX0luaXQgZG9lc24ndCB0b3VjaCBuYW1lcyBhdCBhbGwuCj4gUHlNb2R1bGVf
RnJvbURlZkFuZFNwZWMgYW5kIFB5TW9kdWxlX0V4ZWNEZWYgZG8sIGFuZCB0aGV5IHdpbGwgaWdu
b3JlCj4gdGhlIG5hbWUgZnJvbSB0aGUgZGVmLikKPgo+Pj4+IFRoZSBQeU1vZHVsZURlZiBvYmpl
Y3QgbXVzdCBiZSBhdmFpbGFibGUgZm9yIHRoZSBsaWZldGltZSBvZiB0aGUgbW9kdWxlCj4+Pj4g
Y3JlYXRlZAo+Pj4+IGZyb20gaXQg4oCTIHVzdWFsbHksIGl0IHdpbGwgYmUgZGVjbGFyZWQgc3Rh
dGljYWxseS4KPj4+Cj4+PiBIb3cgZWFzaWx5IHdpbGwgdGhpcyBiZSBhIHNvdXJjZSBvZiBteXN0
ZXJpb3VzIGVycm9ycy1hdC1hLWRpc3RhbmNlPwo+Pgo+PiBJdCBzaG91bGRuJ3QgYmUgYW55IHdv
cnNlIHRoYW4gc3RhdGljIHR5cGUgZGVmaW5pdGlvbnMsIGFuZCBub3JtYWwKPj4gcmVmZXJlbmNl
IGNvdW50aW5nIHNlbWFudGljcyBzaG91bGQga2VlcCBpdCBhbGl2ZSByZWdhcmRsZXNzLgo+Cj4g
SXQncyB0aGUgdGhlIHNhbWUgYXMgdGhlIGN1cnJlbnQgYmVoYXZpb3IgKFBFUCAzMTIxKSwgd2hl
cmUgYQo+IFB5TW9kdWxlRGVmIGlzIHN0b3JlZCBpbiB0aGUgbW9kdWxlLCBhbmQgaWYgeW91IGxl
dCBpdCBkaWUsCj4gUHlNb2R1bGVfR2V0U3RhdGUgd2lsbCBnaXZlIHlvdSBhbiBpbnZhbGlkIHBv
aW50ZXIuIEl0J3MganVzdCB0aGF0IGluCj4gUEVQIDQ4OSwgdGhlIGltcG9ydCBtYWNoaW5lcnkg
aXRzZWxmIHVzZXMgZGVmLCBzbyB5b3UgYWN0dWFsbHkgZ2V0IHRvCj4gZmVlbCB0aGUgcGFpbiBp
ZiB5b3UgZGVhbGxvY2F0ZSBpdC4KPiBBbGwgaW4gYWxsLCB0aGlzIHNob3VsZCBub3QgYmUgYSBw
cm9ibGVtIGluIHByYWN0aWNlOyB0aGUgUEVQIHNwZWNpZmllcwo+IHdoYXQnbGwgaGFwcGVuIGlm
IHlvdSBnbyBvZmYgZG9pbmcgZXhvdGljIHRoaW5ncy4gKEZvciBleGFtcGxlLCBDeXRob24KPiBt
aWdodCBydW4gaW50byB0aGlzIGlmIGl0IHRyaWVzIGltcGxlbWVudGluZyBhIHJlbG9hZGluZyBz
Y2hlbWUgd2UKPiB0YWxrZWQgYWJvdXQgZWFybGllciBpbiB0aGUgdGhyZWFkLCBhbmQgZXZlbiB0
aGVuIGl0IHNob3VsZG4ndCBiZSBhCj4gbWFqb3Igc291cmNlIG9mIG15c3RlcmlvdXMgZXJyb3Jz
LikgTm9ybWFsIG1vcnRhbHMgd2lsbCBiZSBPSy4KClRoYW5rcyBmb3IgZXhwbGFpbmluZy4gIEkn
bSBsZXNzIGNvbmNlcm5lZCBub3cuCgo+Cj4+PiBbc25pcF0KPj4+IEhvd2V2ZXIsIG9ubHkgTW9k
dWxlVHlwZSBpbnN0YW5jZXMgc3VwcG9ydCBtb2R1bGUtc3BlY2lmaWMgZnVuY3Rpb25hbGl0eQo+
Pj4gc3VjaCBhcyBwZXItbW9kdWxlIHN0YXRlLgo+Pgo+PiBUaGlzIGlzIGEgcHJldHR5IGltcG9y
dGFudCBwb2ludC4gIFByZXN1bWFibHkgdGhpcyBjb25zdHJhaW50cyBsYXRlcgo+PiBiZWhhdmlv
ciBhbmQgcHJlY2VkZXMgYWxsIGZ1bmN0aW9uYWxpdHkgcmVsYXRlZCB0byBwZXItbW9kdWxlIHN0
YXRlLgo+Cj4gWWVzLiBNb2R1bGUgb2JqZWN0cyBzdXBwb3J0IG1vcmUgbW9kdWxlLWxpa2UgYmVo
YXZpb3IgdGhhbiBvdGhlcgo+IG9iamVjdHMuIFdoYXQgeW91IGNhbiBhbmQgY2Fubm90IHVzZSBz
aG91bGQgYmUgY2xlYXIgZnJvbSB0aGUgQVBJLiBJJ2xsCj4gY2xhcmlmeSBhIGJpdCBtb3JlIHdo
YXQgZnVuY3Rpb25hbGl0eSBkZXBlbmRzIG9uIHVzaW5nIGEgUHlNb2R1bGVfVHlwZQo+IChvciBz
dWJjbGFzcykgaW5zdGFuY2UuCj4gT25lIHRoaW5nIEkgc2VlIEkgZm9yZ290IHRvIGFkZCBpcyB0
aGF0IGV4ZWN1dGlvbiBzbG90cyBhcmUgbG9va2VkIHVwCj4gdmlhIFB5TW9kdWxlX0dldERlZiwg
c28gdGhleSB3b24ndCBiZSBwcm9jZXNzZWQgb24gbm9uLW1vZHVsZSBvYmplY3RzLgoKT2theS4g
IFRoYXQgbWFrZXMgc2Vuc2Ugbm93LgoKPgo+IEl0J3MgYSB2ZXJ5IGdvb2QgaWRlYSB0byB1c2Ug
YSBtb2R1bGUgc3ViY2xhc3MgcmF0aGVyIHRoYW4gYSBjb21wbGV0ZWx5Cj4gY3VzdG9tIG9iamVj
dC4gVGhlIGRvY3Mgd2lsbCBuZWVkIHRvIHN0cm9uZ2x5IHJlY29tbWVuZCB0aGlzLgoKQWdyZWVk
LiAgQW5kIHRoZSBkb2NzIHNob3VsZCBhbHNvIGJlIGNsZWFyIG9uIGhvdyBub24tbW9kdWxlIG9i
amVjdHMKYXJlIGJhc2ljYWxseSBpZ25vcmVkLCBzbG90LXdpc2UuCgo+Cj4+Pj4gW3NuaXBdCj4+
Pj4gRXh0ZW5zaW9uIGF1dGhvcnMgYXJlIGFkdmlzZWQgdG8ga2VlcCBQeV9tb2RfY3JlYXRlIG1p
bmltYWwsIGFuIGluCj4+Pj4gcGFydGljdWxhcgo+Pj4+IHRvIG5vdCBjYWxsIHVzZXIgY29kZSBm
cm9tIGl0Lgo+Pj4KPj4+IFRoaXMgaXMgYSBwcmV0dHkgaW1wb3J0YW50IHBvaW50IGFzIHdlbGwu
ICBXZSdsbCBuZWVkIHRvIG1ha2Ugc3VyZQo+Pj4gdGhpcyBpcyBzdWZmaWNpZW50bHkgY2xlYXIg
aW4gdGhlIGRvY3VtZW50YXRpb24uICBXb3VsZCBpdCBtYWtlIHNlbnNlCj4+PiB0byBwcm92aWRl
IGhlbHBlcnMgZm9yIGNvbW1vbiBjYXNlcywgdG8gZW5jb3VyYWdlIGV4dGVuc2lvbiBhdXRob3Jz
IHRvCj4+PiBrZWVwIHRoZSBjcmVhdGUgZnVuY3Rpb24gbWluaW1hbD8KPj4KPj4gVGhlIG1haW4g
ZW5jb3VyYWdlbWVudCBpcyB0byBub3QgaGFuZGNvZGUgeW91ciBleHRlbnNpb24gbW9kdWxlcyBh
dAo+PiBhbGwsIGFuZCBsZXQgc29tZXRoaW5nIGxpa2UgQ3l0aG9uIG9yIFNXSUcgdGFrZSBjYXJl
IG9mIHRoZQo+PiBib2lsZXJwbGF0ZSA6KQo+Cj4gWWVzLCBDeXRob24gc2hvdWxkIGJlIGRlZmF1
bHQuIEZvciBoYW5kLXdyaXR0ZW4gbW9kdWxlcywgdGhlIGNvbW1vbiBjYXNlCj4gc2hvdWxkIGJl
IG5vdCBkZWZpbmluZyBjcmVhdGUgYXQgYWxsLgoKVGhlIGRvY3Mgc2hvdWxkIGJlIGV4cGxpY2l0
IGFib3V0IHRoaXMuCgo+Cj4+Pj4gW3NuaXBdCj4+Pj4KPj4+PiBJZiBQeU1vZHVsZUV4ZWMgcmVw
bGFjZXMgdGhlIG1vZHVsZSdzIGVudHJ5IGluIHN5cy5tb2R1bGVzLAo+Pj4+IHRoZSBuZXcgb2Jq
ZWN0IHdpbGwgYmUgdXNlZCBhbmQgcmV0dXJuZWQgYnkgaW1wb3J0bGliIG1hY2hpbmVyeS4KPj4+
Cj4+PiBKdXN0IHRvIGJlIHN1cmUsIHNvbWV0aGluZyBsaWtlICJtb2QgPSBzeXMubW9kdWxlc1tt
b2RuYW1lXSIgaXMgZG9uZQo+Pj4gYmVmb3JlIGVhY2ggZXhlY3V0aW9uIHNsb3QuICBJbiBvdGhl
ciB3b3JkcywgdGhlIHJlc3VsdCBvZiB0aGUKPj4+IHByZXZpb3VzIGV4ZWN1dGlvbiBzbG90IHNo
b3VsZCBiZSB1c2VkIGZvciB0aGUgbmV4dCBvbmUuCj4+Cj4+IFRoYXQncyBub3QgdGhlIG9yaWdp
bmFsIGludGVudCBvZiB0aGlzIHBhcmFncmFwaCAtIHJhdGhlciwgaXQgaXMKPj4gcmVmZXJyaW5n
IHRvIHRoZSBleGlzdGluZyBiZWhhdmlvdXIgb2YgdGhlIGltcG9ydCBtYWNoaW5lcnkuCj4+Cj4+
IEhvd2V2ZXIsIEkgYWdyZWUgdGhhdCBub3cgd2UncmUgYWxsb3dpbmcgdGhlIFB5X21vZF9leGVj
IHNsb3QgdG8gYmUKPj4gc3VwcGxpZWQgbXVsdGlwbGUgdGltZXMsIHdlIHNob3VsZCBhbHNvIGJl
IHVwZGF0aW5nIHRoZSBtb2R1bGUKPj4gcmVmZXJlbmNlIGJldHdlZW4gc2xvdCBpbnZvY2F0aW9u
cy4KPgo+IE5vLCB0aGF0IHdvbid0IHdvcmsuIEl0J3MgcG9zc2libGUgKHZpYSBkaXJlY3QgY2Fs
bHMgdG8gdGhlIGltcG9ydAo+IG1hY2hpbmVyeSkgdG8gbG9hZCBhIG1vZHVsZSB3aXRob3V0IGFk
ZGluZyBpdCB0byBzeXMubW9kdWxlcy4KCldoYXQgZGlyZWN0IGNhbGxzIGRvIHlvdSBtZWFuPyAg
SSB3b3VsZCBub3QgZXhwZWN0IGFueSBzdWNoIG1lY2hhbmlzbQp0byB3b3JrIHByb3Blcmx5IHdp
dGggZXh0ZW5zaW9uIG1vZHVsZXMuCgo+IFRoZSBiZWhhdmlvciBzaG91bGQgYmUgY2xlYXIgKHdo
ZW4geW91IHRoaW5rIGFib3V0IGl0KSBhZnRlciBJIGluY2x1ZGUKPiB0aGUgbG9hZGVyIGltcGxl
bWVudGF0aW9uIHBzZXVkb2NvZGUuCgpPa2F5LgoKPgo+PiBJIGFsc28gdGhpbmsgdGhlIFBFUCBj
b3VsZCBkbyB3aXRoIGEgYnJpZWYgbWVudGlvbiBvZiB0aGUgYWRkaXRpb25hbAo+PiBtb2R1bGFy
aXR5IHRoaXMgYXBwcm9hY2ggYnJpbmdzIGF0IHRoZSBDIGxldmVsIC0gcmF0aGVyIHRoYW4gaGF2
aW5nIHRvCj4+IGphbSBldmVyeXRoaW5nIGludG8gb25lIGZ1bmN0aW9uLCBhbiBleHRlbnNpb24g
bW9kdWxlIGNhbiBlYXNpbHkgYnJlYWsKPj4gdXAgaXRzIGluaXRpYWxpc2F0aW9uIGludG8gbXVs
dGlwbGUgc3RlcHMsIGFuZCBpdHMgdGVjaG5pY2FsbHkgZXZlbgo+PiBwb3NzaWJsZSB0byBzaGFy
ZSBjb21tb24gc3RlcHMgYmV0d2VlbiBkaWZmZXJlbnQgbW9kdWxlcy4KPgo+IEVoLCBJIHRoaW5r
IGl0J3MgYmV0dGVyIHRvIGNyZWF0ZSBvbmUgZnVuY3Rpb24gdGhhdCBjYWxscyB0aGUgcGFydHMs
Cj4gd2hpY2ggd2FzIGFsd2F5cyBwb3NzaWJsZSwgYW5kIHdvcmtzIGp1c3QgYXMgd2VsbC4KPiBS
ZXBlYXRpbmcgc2xvdHMgaXMgYWxsb3dlZCBiZWNhdXNlIGl0IHdvdWxkIGJlIGFuIHVubmVjZXNz
YXJ5IGJvdGhlciB0bwo+IGNoZWNrIGZvciBkdXBsaWNhdGVzLiBJdCdzIG5vdCBhIGZlYXR1cmUg
dG8gYWR2ZXJ0aXNlLCB0aGUgUEVQIGp1c3QKPiBzcGVjaWZpZXMgdGhhdCBpbiB0aGUgd2VpcmQg
ZWRnZSBjYXNlLCB0aGUgaW50dWl0aXZlIHRoaW5nIHdpbGwgaGFwcGVuLgoKQmUgdGhhdCBhcyBp
dCBtYXksIEkgdGhpbmsgaXQgd291bGQgYmUgYSBtaXN0YWtlIHRvIHRyZWF0IHN1cHBvcnQgZm9y
Cm11bHRpcGxlIGV4ZWMgc2xvdHMgYXMgYSBzZWNvbmQtY2xhc3MgY2l0aXplbiBpbiB0aGUgZGVz
aWduLgpQZXJzb25hbGx5IEkgZmluZCBpdCBhbiBhcHBlYWxpbmcgZmVhdHVyZS4KCj4KPiAoSSBk
aWQgaGF2ZSBhIHVzZWZ1bCBmdXR1cmUgdXNlIGNhc2UgZm9yIHJlcGVhdGVkIHNsb3RzLCBidXQg
dGhlIGN1cnJlbnQKPiBQRVAgYWxsb3dzIGEgYmV0dGVyIGFuZCBtb3JlIG9idmlvdXMgc29sdXRp
b24gc28gSSdsbCBub3QgZXZlbiBtZW50aW9uCj4gaXQgYWdhaW4uKQo+Cj4gU3RpbGwsIHRoZSBz
dGVwcyBhcmUgcHJvY2Vzc2VkIGluIGEgbG9vcCBmcm9tIGEgc2luZ2xlIGZ1bmN0aW9uCj4gKFB5
TW9kdWxlX0V4ZWNEZWYpLCBhbmQgdGhhdCBmdW5jdGlvbiBvcGVyYXRlcyBvbiBhIG1vZHVsZSBv
YmplY3QgLS0gaXQKPiBkb2Vzbid0IGtub3cgYWJvdXQgc3lzLm1vZHVsZXMgYW5kIGNhbid0IGVh
c2lseSBjaGVjayBpZiB5b3UgcmVwbGFjZWQKPiB0aGUgbW9kdWxlIHNvbWV3aGVyZS4KCkkgd291
bGQgY29uc2lkZXIgdGhpcyBhcHByb2FjaCB0byBiZSBhIG1pc3Rha2UgYXMgd2VsbC4gIFRoZSBh
cHByb2FjaApzaG91bGQgc3RheSBjb25zaXN0ZW50IHdpdGggdGhlIHNlbWFudGljcyBvZiB0aGUg
d2hvbGUgaW1wb3J0IHN5c3RlbSwKd2hlcmUgc3lzLm1vZHVsZXMgaXMgY2hlY2tlZCBkaXJlY3Rs
eS4gIFVuZm9ydHVuYXRlbHksIHRoYXQgc2hpcCBoYXMKYWxyZWFkeSBzYWlsZWQuCgo+Cj4+Pj4g
KFRoaXMgbWlycm9ycyB0aGUgYmVoYXZpb3Igb2YgUHl0aG9uIG1vZHVsZXMuIE5vdGUgdGhhdCBp
bXBsZW1lbnRpbmcKPj4+PiBQeV9tb2RfY3JlYXRlIGlzIHVzdWFsbHkgYSBiZXR0ZXIgc29sdXRp
b24gZm9yIHRoZSB1c2UgY2FzZXMgdGhpcyBzZXJ2ZXMuKQo+Pj4KPj4+IENvdWxkIHlvdSBlbGFi
b3JhdGU/ICBXaGF0IGFyZSB0aG9zZSB1c2UgY2FzZXMgYW5kIHdoeSB3b3VsZAo+Pj4gUHlfbW9k
X2NyZWF0ZSBiZSBiZXR0ZXI/Cj4+Cj4+IFJhdGhlciB0aGFuIHJlcGxhY2luZyB0aGUgaW1wbGlj
aXRseSBjcmVhdGVkIG5vcm1hbCBtb2R1bGUgZHVyaW5nCj4+IFB5X21vZF9leGVjICh3aGljaCBp
cyB0aGUgb25seSBvcHRpb24gYXZhaWxhYmxlIHRvIFB5dGhvbiBtb2R1bGVzKSwKPj4gUEVQIDQ4
OSBsZXRzIHlvdSBkZWZpbmUgdGhlIFB5X21vZF9jcmVhdGUgc2xvdCB0byBvdmVycmlkZSB0aGUg
bW9kdWxlCj4+IG9iamVjdCBjcmVhdGlvbiBkaXJlY3RseS4KPj4KPj4gT3V0c2lkZSBjb252ZXJz
aW9uIG9mIGEgUHl0aG9uIG1vZHVsZSB0aGF0IG1hbmlwdWxhdGVzIHN5cy5tb2R1bGVzIHRvCj4+
IGFuIGV4dGVuc2lvbiBtb2R1bGUgd2l0aCBDeXRob24sIHRoZXJlJ3Mgbm8gcmVhbCByZWFzb24g
dG8gdXNlIHRoZQo+PiAicmVwbGFjaW5nIHlvdXJzZWxmIGluIHN5cy5tb2R1bGVzIiBvcHRpb24g
b3ZlciB1c2luZyBQeV9tb2RfY3JlYXRlCj4+IGRpcmVjdGx5Lgo+Cj4gWWVzLiBUaGUgd29ya2Fy
b3VuZCB5b3UgbmVlZCB0byB1c2UgaW4gUHl0aG9uIG1vZHVsZXMgaXMgcG9zc2libGUgZm9yCj4g
ZXh0ZW5zaW9ucywgYnV0IHRoZXJlJ3Mgbm8gcmVhc29uIHRvIHVzZSBpdC4gSSdsbCB0cnkgdG8g
bWFrZSBpdCBjbGVhcmVyCj4gdGhhdCBpdCdzIGFuIHVubmVjZXNzYXJ5IHdvcmthcm91bmQuCgpU
aGFuayB5b3UuCgo+Cj4+Pj4gW3NuaXBdCj4+Pj4KPj4+PiBNb2R1bGVzIHRoYXQgbmVlZCB0byB3
b3JrIHVuY2hhbmdlZCBvbiBvbGRlciB2ZXJzaW9ucyBvZiBQeXRob24gc2hvdWxkIG5vdAo+Pj4+
IHVzZSBtdWx0aS1waGFzZSBpbml0aWFsaXphdGlvbiwgYmVjYXVzZSB0aGUgYmVuZWZpdHMgaXQg
YnJpbmdzIGNhbid0IGJlCj4+Pj4gYmFjay1wb3J0ZWQuCj4+Pgo+Pj4gR2l2ZW4geW91ciBleGFt
cGxlIGJlbG93LCAic2hvdWxkIG5vdCIgc2VlbXMgYSBiaXQgc3Ryb25nIHRvIG1lLiAgSW4KPj4+
IGZhY3QsIHdoYXQgYXJlIHRoZSBvYmplY3Rpb25zIHRvIGVuY291cmFnaW5nIHRoZSBhcHByb2Fj
aCBmcm9tIHRoZQo+Pj4gZXhhbXBsZT8KPj4KPj4gQWdyZWVkLCAic2hvdWxkIG5vdCIgaXMgcHJv
YmFibHkgdG9vIHN0cm9uZyBoZXJlLiBPbiB0aGUgb3RoZXIgaGFuZCwKPj4gcHJlc2VydmluZyBj
b21wYXRpYmlsaXR5IHdpdGggb2xkZXIgUHl0aG9uIHZlcnNpb25zIGluIGEgbW9kdWxlIHRoYXQK
Pj4gaGFzIGJlZW4gdXBkYXRlZCB0byByZWx5IG9uIG11bHRpLXBoYXNlIGluaXRpYWxpemF0aW9u
IGlzIGxpa2VseSB0byBiZQo+PiBhIG1hdHRlciBvZiAiZ3JhY2VmdWwgZGVncmFkYXRpb24iLCBy
YXRoZXIgdGhhbiBiZWluZyBhYmxlIHRvCj4+IHJlcHJvZHVjZSBjb21wYXJhYmxlIGZ1bmN0aW9u
YWxpdHkgKHdoaWNoIEkgYmVsaWV2ZSBtYXkgaGF2ZSBiZWVuIHRoZQo+PiBwb2ludCBQZXRyIHdh
cyB0cnlpbmcgdG8gY29udmV5KS4KPgo+IE15IHBvaW50IGlzIHRoYXQgaWYgeW91IG5lZWQgZ3Jh
Y2VmdWwgZGVncmFkYXRpb24sIHlvdXIgYmVzdCBiZXQgaXMgdG8KPiBzdGljayB3aXRoIHNpbmds
ZS1waGFzZSBpbml0LiBUaGVuIHlvdSdsbCBoYXZlIG9uZSBjb2RlIHBhdGggdGhhdCB3b3Jrcwo+
IHRoZSBzYW1lIG9uIGFsbCB2ZXJzaW9ucy4KPiBJZiB5b3UgKm5lZWQqIHRoZSBmZWF0dXJlcyBv
ZiBtdWx0aS1waGFzZSBpbml0LCB5b3UgbmVlZCB0byByZW1vdmUKPiBzdXBwb3J0IGZvciBQeXRo
b25zIHRoYXQgZG9uJ3QgaGF2ZSBpdC4KPiBJZiB5b3UgbmVlZCBib3RoIGJhY2t3YXJkcyBjb21w
YXRpYmlsaXR5IGFuZCBtdWx0aS1waGFzZSBpbml0LCB5b3UKPiBlc3NlbnRpYWxseSBuZWVkIHRv
IGNyZWF0ZSB0d28gbW9kdWxlcyAod2l0aCBzaGFyZWQgY29udGVudHMpLCBhbmQgbWFrZQo+IHN1
cmUgdGhleSBlbmQgdXAgaW4gdGhlIHNhbWUgc3RhdGUgYWZ0ZXIgdGhleSdyZSBsb2FkZWQuCj4K
Pj4gSSBleHBlY3QgQ3l0aG9uIGFuZCBTV0lHIG1heSBiZSBhYmxlIHRvIG1hbmFnZSB0aGF0IHRo
cm91Z2gKPj4gYXBwcm9wcmlhdGUgdXNlIG9mICNpZmRlZidzIGluIHRoZSBnZW5lcmF0ZWQgY29k
ZSwgYnV0IGRvaW5nIGl0IGJ5Cj4+IGhhbmQgaXMgbGlrZWx5IHRvIGJlIHBhaW5mdWwsIGhlbmNl
IHRoZSBwb3RlbnRpYWwgYmVuZWZpdHMgb2YganVzdAo+PiBzdGlja2luZyB3aXRoIHNpbmdsZS1w
aGFzZSBpbml0aWFsaXNhdGlvbiBmb3IgdGhlIHRpbWUgYmVpbmcuCj4KPiBZZXMsIGNvZGUgZ2Vu
ZXJhdG9ycyBhcmUgaW4gYSBwb3NpdGlvbiB0byBjcmVhdGUgdHdvIHZlcnNpb25zIG9mIHRoZQo+
IG1vZHVsZSwgYW5kIHNlbGVjdCBvbmUgdXNpbmcgdXNpbmcgI2lmZGVmLgo+Cj4gVGhlIGV4YW1w
bGUgaW4gdGhlIFBFUCBpcyBoZWxwZnVsIGZvciBvdGhlciByZWFzb25zIHRoYW4gZW5jb3VyYWdp
bmcKPiAjaWZkZWY6IGl0IHNob3dzIHdoYXQgbmVlZHMgdG8gY2hhbmdlIHdoZW4gcG9ydGluZy4g
VGhpbmsgb2YgaXQgYXMgYSBkaWZmIDopCgpJdCBtYXkgYmUgd29ydGggYmVpbmcgbW9yZSBjbGVh
ciBhYm91dCB0aGF0LgoKPgo+Pj4+IFtzbmlwXQo+Pj4+Cj4+Pj4gU3ViaW50ZXJwcmV0ZXJzIGFu
ZCBJbnRlcnByZXRlciBSZWxvYWRpbmcKPj4+PiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLQo+Pj4+Cj4+Pj4gRXh0ZW5zaW9ucyB1c2luZyB0aGUgbmV3IGluaXRpYWxp
emF0aW9uIHNjaGVtZSBhcmUgZXhwZWN0ZWQgdG8gc3VwcG9ydAo+Pj4+IHN1YmludGVycHJldGVy
cyBhbmQgbXVsdGlwbGUgUHlfSW5pdGlhbGl6ZS9QeV9GaW5hbGl6ZSBjeWNsZXMgY29ycmVjdGx5
Lgo+Pj4KPj4+IFByZXN1bWFibHkgdGhpcyBzdXBwb3J0IGlzIGV4cGxpY2l0bHkgYW5kIGNvbXBs
ZXRlbHkgZGVmaW5lZCBpbiB0aGUKPj4+IHN1YnNlcXVlbnQgc2VudGVuY2VzLiAgSXMgaXQgcmVh
bGx5IGp1c3Qga2VlcGluZyAiaGlkZGVuIiBtb2R1bGUgc3RhdGUKPj4+IGVuY2Fwc3VsYXRlZCBv
biB0aGUgbW9kdWxlIG9iamVjdD8gIElmIG5vdCB0aGVuIGl0IG1heSBtYWtlIHNlbnNlIHRvCj4+
PiBlbnVtZXJhdGUgdGhlIHJlcXVpcmVtZW50cyBiZXR0ZXIgZm9yIHRoZSBzYWtlIG9mIGV4dGVu
c2lvbiBtb2R1bGUKPj4+IGF1dGhvcnMuCj4KPiBJdCBpcyBleHBsYWluZWQgaW4gdGhlIGRvY3Ms
IHNlZSAiQnVncyBhbmQgY2F2ZWF0cyIgaGVyZToKPiBodHRwczovL2RvY3MucHl0aG9uLm9yZy8z
L2MtYXBpL2luaXQuaHRtbCNzdWItaW50ZXJwcmV0ZXItc3VwcG9ydAo+IEknbGwgYWRkIGEgbGlu
ayB0byB0aGF0IHBhZ2UuCgpDb29sLgoKPgo+PiBJJ2QgYWN0dWFsbHkgbGlrZSB0byBoYXZlIGEg
YmV0dGVyIHdheSBvZiBkb2luZyBzY2VuYXJpbyB0ZXN0aW5nIGZvcgo+PiBleHRlbnNpb24gbW9k
dWxlcyAoc3ViaW50ZXJwcmV0ZXJzLCBtdWx0aXBsZSBpbml0aWFsaXplL2ZpbmFsaXplCj4+IGN5
Y2xlcywgZnJlZXppbmcpLCBidXQgSSdtIG5vdCBzdXJlIHRoaXMgUEVQIGlzIHRoZSBiZXN0IHBs
YWNlIHRvCj4+IGRlZmluZSB0aGF0LiBQZXJoYXBzIHdlIGNvdWxkIGRvIGEgUHlQSSBwcm9qZWN0
IHRoYXQgd2FzIGEgdG94LWJhc2VkCj4+IHRlc3QgYmF0dGVyeSBmb3IgdGhpcyBraW5kIG9mIHRo
aW5nPwo+Cj4gSSB0aGluayB0aGF0J3MgdGhlIHdyb25nIHBsYWNlIHRvIHN0YXJ0LiBDdXJyZW50
bHksIHN1Yi1pbnRlcnByZXRlcgo+IHN1cHBvcnQgaXMgYnVyaWVkIGF3YXkgaW4gYSBkb2NzIGNo
YXB0ZXIgYWJvdXQgUHl0aG9uCj4gaW5pdGlhbGl6YXRpb24vZmluYWxpemF0aW9uLCBzbyBhIHR5
cGljYWwgZXh0ZW5zaW9uIGF1dGhvciB3b24ndCBldmVuCj4gbm90aWNlIGl0LiBXZSBuZWVkIHRv
IGZpcnN0IG1ha2UgaXQgKnBvc3NpYmxlKiB0byBzdXBwb3J0Cj4gc3ViaW50ZXJwcmV0ZXJzIGVh
c2lseSBhbmQgY29ycmVjdGx5IChzbyB0aGF0IEN5dGhvbiBjYW4gZG8gaXQpLCBhbmQgdG8KPiBk
b2N1bWVudCBpdCBwcm9taW5lbnRseSBpbiB0aGUgIndyaXRpbmcgZXh0ZW5zaW9ucyIgcGFydCBv
ZiB0aGUgZG9jcywKPiBub3Qgb25seSBpbiAiZXh0ZW5kaW5nIFB5dGhvbiIuIFRoZW4sCj4gVGhp
cyBQRVAgZG9lcyBwYXJ0IG9mIHRoZSBmaXJzdCBzdGVwLCBhbmQgdGhlIGRvY3MgZm9yIGl0ICh3
aGljaCBhcmVuJ3QKPiB3cml0dGVuIHlldCkgd2lsbCBkbyB0aGUgc2Vjb25kIHN0ZXAuCj4gQWZ0
ZXIgdGhhdCwgaXQgY291bGQgbWFrZSBzZW5zZSB0byBwcm92aWRlIGEgdG9vbCBmb3IgdGVzdGlu
ZyB0aGlzLgoKVGhlcmUncyBub3RoaW5nIGFib3V0IHRoZSBkb2NzIHRoYXQgcHJlY2x1ZGVzIHB1
dHRpbmcgdGVzdGluZyBoZWxwZXJzCnVwIG9uIFB5UEkgdGhvdWdoLiAgSG93ZXZlciwgSSdtIGRl
ZmluaXRlbHkgKzEgb24gaW1wcm92aW5nIHRoZSBkb2NzLgoKPgo+Pj4+IFRoZSBtZWNoYW5pc20g
aXMgZGVzaWduZWQgdG8gbWFrZSB0aGlzIGVhc3ksIGJ1dCBjYXJlIGlzIHN0aWxsIHJlcXVpcmVk
Cj4+Pj4gb24gdGhlIHBhcnQgb2YgdGhlIGV4dGVuc2lvbiBhdXRob3IuCj4+Pj4gTm8gdXNlci1k
ZWZpbmVkIGZ1bmN0aW9ucywgbWV0aG9kcywgb3IgaW5zdGFuY2VzIG1heSBsZWFrIHRvIGRpZmZl
cmVudAo+Pj4+IGludGVycHJldGVycy4KPj4+PiBUbyBhY2hpZXZlIHRoaXMsIGFsbCBtb2R1bGUt
bGV2ZWwgc3RhdGUgc2hvdWxkIGJlIGtlcHQgaW4gZWl0aGVyIHRoZSBtb2R1bGUKPj4+PiBkaWN0
LCBvciBpbiB0aGUgbW9kdWxlIG9iamVjdCdzIHN0b3JhZ2UgcmVhY2hhYmxlIGJ5IFB5TW9kdWxl
X0dldFN0YXRlLgo+Pj4KPj4+IElzIHRoaXMgcHJvZ3JhbW1hdGljYWxseSBlbmZvcmNlYWJsZT8K
Pgo+IE5vLiAoSSBiZWxpZXZlIHlvdSBjb3VsZCBldmVuIHByb3ZlIHRoaXMgZm9ybWFsbHkuKQo+
Cj4+PiBJcyB0aGVyZSBhbnkgbWVjaGFuaXNtIGZvciBlYXNpbHkgY29weWluZyBtb2R1bGUgc3Rh
dGU/Cj4KPiBOby4gVGhpcyB3b3VsZCBiZSBpbXBvc3NpYmxlIHRvIHByb3ZpZGUgaW4gdGhlIGdl
bmVyYWwgY2FzZS4gSXQncyB0aGUKPiByZXNwb25zaWJpbGl0eSBvZiB5b3VyIEMgY29kZS4KPiBU
aGF0IHNhaWQsIGlmIHlvdSBuZWVkIHRvIGNvcHkgbW9kdWxlIHN0YXRlLCBjaGFuY2VzIGFyZSB5
b3VyIGRlc2lnbgo+IGNvdWxkIHVzZSBzb21lIHJldGhpbmtpbmcuCj4KPj4+IEhvdyBhYm91dCBz
aGFyaW5nIHNvbWUgc3RhdGUgYmV0d2VlbiBzdWJpbnRlcnByZXRlcnM/Cj4KPiBUaGUgUHlDYXBz
dWxlIEFQSSB3YXMgZGVzaWduZWQgZm9yIHRoaXMuCgpJJ20gc2ltcGx5IHRoaW5raW5nIGluIHRl
cm1zIG9mIHRoZSBvcHRpb25zIHdlIGhhdmUgZm9yIGEgUEVQIEknbQp3b3JraW5nIG9uIHRoYXQg
d2lsbCBmYWNpbGl0YXRlIHBhc3Npbmcgb2JqZWN0cyBiZXR3ZWVuCnN1YmludGVycHJldGVycyBh
bmQgZXZlbiBwb3NzaWJseSBzaGFyaW5nIHNvbWUgc3RhdGUgYmV0d2VlbiB0aGVtLgpDdXJyZW50
bHkgaXQgd2lsbCBiZSBwcmFjdGljYWxseSBuZWNlc3NhcnkgdG8gZXhjbHVkZSBleHRlbnNpb24K
bW9kdWxlcyBmcm9tIGFueSBzdWNoIG1lY2hhbmlzbS4gIFNvIEkgd2FzIHdvbmRlcmluZyBpZiB0
aGVyZSB3b3VsZCBiZQphIHdheSB0byBhbGxvdyBleHRlbnNpb24gbW9kdWxlIGF1dGhvcnMgdG8g
ZGVmaW5lIGhvdyBhdCBsZWFzdCBzb21lIG9mCnRoZSBtb2R1bGUncyBkYXRhIGNvdWxkIGJlIHNo
YXJlZCBiZXR3ZWVuIHN1YmludGVycHJldGVycy4KCj4KPj4+IEhvdyBtdWNoIHJvb20gaXMgdGhl
cmUgZm9yIGxldHRpbmcgZXh0ZW5zaW9uIG1vZHVsZQo+Pj4gYXV0aG9ycyBkZWZpbmUgaG93IHRo
ZWlyIG1vZHVsZSBiZWhhdmVzIGFjcm9zcyBtdWx0aXBsZSBpbnRlcnByZXRlcnMKPj4+IG9yIGFj
cm9zcyBtdWx0aXBsZSBJbml0aWFsaXplL0ZpbmFsaXplIGN5Y2xlcz8KPgo+IFRlY2huaWNhbGx5
LCB5b3UgaGF2ZSBhbGwgdGhlIGZyZWVkb20geW91IHdhbnQuIEJ1dCBpZiBJIGVtYmVkIFB5dGhv
bgo+IGludG8gbXkgcHJvamVjdC9saWJyYXJ5LCBJJ2Qgd2FudCBtdWx0aXBsZSBzdWItaW50ZXJw
cmV0ZXJzIGNvbXBsZXRlbHkKPiBpc29sYXRlZCBieSBkZWZhdWx0LiBJZiBJIHVzZSB0d28gbGli
cmFyaWVzIHRoYXQgZWFjaCBlbWJlZCBQeXRob24gaW50bwo+IG15IGFwcCwgSSBkZWZpbml0ZWx5
IHdhbnQgdGhlbSBpc29sYXRlZC4KPiBTbyB0aGUgUEVQIHRyaWVzIHRvIG1ha2UgaXQgZWFzeSB0
byBrZWVwIG11bHRpcGxlIGludGVycHJldGVycyBpc29sYXRlZC4KCkFzIEkganVzdCBub3RlZCwg
SSdtIGxvb2tpbmcgYXQgbWFraW5nIHVzZSBvZiBzdWJpbnRlcnByZXRlcnMgZm9yIGEKZGlmZmVy
ZW50IHVzZSBjYXNlIHdoZXJlIGl0ICpkb2VzKiBtYWtlIHNlbnNlIHRvIGVmZmVjdGl2ZWx5IHNo
YXJlCm9iamVjdHMgYmV0d2VlbiB0aGVtLgoKICBbc25pcF0KPj4+IEF0IHRoZSBzYW1lIHRpbWUs
IG9uZSBtYXkgYXJndWUgdGhhdCByZWxvYWRpbmcgbW9kdWxlcyBpcyBub3QKPj4+IHNvbWV0aGlu
ZyB0byBlbmNvdXJhZ2UuIDopCj4+Cj4+IFRoZXJlJ3MgYSByZWFzb24gaW1wb3J0X2ZyZXNoX21v
ZHVsZSBoYXMgbmV2ZXIgbWFkZSBpdCBvdXQgb2YgdGVzdC5zdXBwb3J0IDopCj4KPiBSaWdodC4g
SW1wbGVtZW50YXRpb24td2lzZSwgaXQgd291bGQgYWN0dWFsbHkgYmUgbXVjaCBlYXNpZXIgdG8g
c3VwcG9ydAo+IHJlbG9hZCByYXRoZXIgdGhhbiBtYWtlIGl0IGEgbm8tb3AuIEJ1dCB0aGVuIEMg
bW9kdWxlIGF1dGhvcnMgd291bGQgbmVlZAo+IHRvIHRoaW5rIGFib3V0IHRoaXMgZWRnZSBjYXNl
LCB3aGljaCBtaWdodCBiZSB0cmlja3kgdG8gZ2V0IHJpZ2h0LCB3b3VsZAo+IG5vdCBiZSBsaWtl
bHkgdG8gZ2V0IHRlc3QgY292ZXJhZ2UsIGFuZCBpcyBnZW5lcmFsbHkgbm90IHVzZWZ1bCBhbnl3
YXksIC4KPgo+IElmIGl0IHR1cm5zIG91dCB0byBiZSB1c2VmdWwsIGl0IHdvdWxkIGJlIHZlcnkg
c2ltcGxlIHRvIGFkZCBhbiBleHBsaWNpdAo+IHJlbG9hZCBzbG90IGluIHRoZSBmdXR1cmUuCgpB
Z3JlZWQuCgogIFtzbmlwXQo+PiBUaGlzIHNlY3Rpb24gaXMgbWlzc2luZyBhbnkgZXhwbGFuYXRp
b24gb2YgdGhlIGltcGFjdCBvbgo+PiBQeXRob24vaW1wb3J0LmMsIG9uIHRoZSBfaW1wL2ltcCBt
b2R1bGUsIGFuZCBvbiB0aGUgMyBmaW5kZXJzL2xvYWRlcnMKPj4gaW4gTGliL2ltcG9ydGxpYi9f
Ym9vdHN0cmFwW19leHRlcm5hbF0ucHkgKGJ1aWx0aW4vZnJvemVuL2V4dGVuc2lvbikuCj4KPiBJ
J2xsIGFkZCBhIHN1bW1hcnkuCj4KPiBUaGUgaW50ZXJuYWwgX2ltcCBtb2R1bGUgd2lsbCBoYXZl
IGJhY2t3YXJkcyBpbmNvbXBhdGlibGUgY2hhbmdlcyAtLQo+IGZ1bmN0aW9ucyB3aWxsIGJlIGFk
ZGVkIGFuZCByZW1vdmVkIGFzIG5lY2Vzc2FyeS4gVGhhdCdzIHdoYXQgdGhlCj4gdW5kZXJzY29y
ZSBtZWFucyA6KQoKQmUgY2FyZWZ1bCB3aXRoIHRoYXQgYXNzdW1wdGlvbi4gIFdlJ3ZlIGhhZCBw
bGVudHkgb2YgZXhwZXJpZW5jZXMKd2hlcmUgdGhlIGFzc3VtcHRpb24gYmVjYXVzZSB1bnJlbGlh
YmxlLgoKPiBUaGUgZGVwcmVjYXRlZCBpbXAgbW9kdWxlIHdpbGwgZ2V0IGEgYmFja3dhcmRzIGNv
bXBhdGliaWxpdHkgc2hpbSBmb3IKPiBhbnl0aGluZyBpdCBpbXBvcnRlZCBmcm9tIF9pbXAgdGhh
dCBnb3QgcmVtb3ZlZC4KPiBpbXBvcnRsaWIgd2lsbCBzdGF5IGJhY2t3YXJkcyBjb21wYXRpYmxl
Lgo+Cj4gUHl0aG9uL2ltcG9ydC5jIGFuZCBQeXRob24vaW1wb3J0ZGwuKiB3aWxsIGJlIHJld3Jp
dHRlbiBlbnRpcmVseS4KPiBTZWUgdGhlIHBhdGNoZXMgKGxpbmtlZCBmcm9tIHRoZSBQRVApIGZv
ciBkZXRhaWxzLgo+CgotZXJpYwpfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fXwpJbXBvcnQtU0lHIG1haWxpbmcgbGlzdApJbXBvcnQtU0lHQHB5dGhvbi5vcmcK
aHR0cHM6Ly9tYWlsLnB5dGhvbi5vcmcvbWFpbG1hbi9saXN0aW5mby9pbXBvcnQtc2lnCg==