PEP 489: Multi-phase extension module initialization; version 7

Petr Viktorin <[email protected]> Thu, 21 May 2015 13:27:16 +0200
Newsgroups gmane.comp.python.import
Message-ID <CA+=+wqD27JizXoDB8zU8RpyXYDBUj=86pnqu+9ze5ACrAR=_Dw@mail.gmail.com>
SGVsbG8sCkJhc2VkIG9uIHRoZSBsYXN0IHJvdW5kIG9mIGNvbW1lbnRzLCBJJ3ZlIHNlbnQgY2hh
bmdlcyB0byBQRVAgZWRpdG9ycy4KClRoZXJlIGlzIG9uZSBmdW5jdGlvbmFsIGNoYW5nZToKLSBE
b24ndCBhbGxvdyBleGVjdXRpb24gc2xvdHMgZm9yIG5vbi1tb2R1bGUgc3ViY2xhc3NlcwoKYW5k
IHNldmVyYWwgd29yZGluZyBmaXhlcy9jbGFyaWZpY2F0aW9uczoKLSBSZW1vdmUgbWlzbGVhZGlu
ZyByZWFzb24gZm9yIFB5TW9kdWxlRGVmX0luaXQKLSBDbGFyaWZ5IHRoYXQgc3lzLm1vZHVsZXMg
aXMgbm90IGNoZWNrZWQgYmV0d2VlbiBleGVjdXRpb24gc3RlcHMKLSBBZGQgYSBCYWNrd2FyZHMg
Q29tcGF0aWJpbGl0eSBzdW1tYXJ5Ci0gSGVhZGluZyBsZXZlbCBmaXgsIHR5cG8gZml4CgoKVGhl
IGZ1bGwgdGV4dCBmb2xsb3dzOgoKUEVQOiA0ODkKVGl0bGU6IE11bHRpLXBoYXNlIGV4dGVuc2lv
biBtb2R1bGUgaW5pdGlhbGl6YXRpb24KVmVyc2lvbjogJFJldmlzaW9uJApMYXN0LU1vZGlmaWVk
OiAkRGF0ZSQKQXV0aG9yOiBQZXRyIFZpa3RvcmluIDxlbmN1a291QGdtYWlsLmNvbT4sCiAgICAg
ICAgU3RlZmFuIEJlaG5lbCA8c3RlZmFuX21sQGJlaG5lbC5kZT4sCiAgICAgICAgTmljayBDb2do
bGFuIDxuY29naGxhbkBnbWFpbC5jb20+CkJERkwtRGVsZWdhdGU6IEVyaWMgU25vdyA8ZXJpY3Nu
b3djdXJyZW50bHlAZ21haWwuY29tPgpEaXNjdXNzaW9ucy1UbzogaW1wb3J0LXNpZ0BweXRob24u
b3JnClN0YXR1czogRHJhZnQKVHlwZTogU3RhbmRhcmRzIFRyYWNrCkNvbnRlbnQtVHlwZTogdGV4
dC94LXJzdApDcmVhdGVkOiAxMS1BdWctMjAxMwpQeXRob24tVmVyc2lvbjogMy41ClBvc3QtSGlz
dG9yeTogMjMtQXVnLTIwMTMsIDIwLUZlYi0yMDE1LCAxNi1BcHItMjAxNQpSZXNvbHV0aW9uOgoK
CkFic3RyYWN0Cj09PT09PT09CgpUaGlzIFBFUCBwcm9wb3NlcyBhIHJlZGVzaWduIG9mIHRoZSB3
YXkgaW4gd2hpY2ggYnVpbHQtaW4gYW5kIGV4dGVuc2lvbiBtb2R1bGVzCmludGVyYWN0IHdpdGgg
dGhlIGltcG9ydCBtYWNoaW5lcnkuIFRoaXMgd2FzIGxhc3QgcmV2aXNlZCBmb3IgUHl0aG9uIDMu
MCBpbiBQRVAKMzEyMSwgYnV0IGRpZCBub3Qgc29sdmUgYWxsIHByb2JsZW1zIGF0IHRoZSB0aW1l
LiBUaGUgZ29hbCBpcyB0byBzb2x2ZQppbXBvcnQtcmVsYXRlZCBwcm9ibGVtcyBieSBicmluZ2lu
ZyBleHRlbnNpb24gbW9kdWxlcyBjbG9zZXIgdG8gdGhlIHdheSBQeXRob24KbW9kdWxlcyBiZWhh
dmU7IHNwZWNpZmljYWxseSB0byBob29rIGludG8gdGhlIE1vZHVsZVNwZWMtYmFzZWQgbG9hZGlu
ZwptZWNoYW5pc20gaW50cm9kdWNlZCBpbiBQRVAgNDUxLgoKVGhpcyBwcm9wb3NhbCBkcmF3cyBp
bnNwaXJhdGlvbiBmcm9tIFB5VHlwZV9TcGVjIG9mIFBFUCAzODQgdG8gYWxsb3cgZXh0ZW5zaW9u
CmF1dGhvcnMgdG8gb25seSBkZWZpbmUgZmVhdHVyZXMgdGhleSBuZWVkLCBhbmQgdG8gYWxsb3cg
ZnV0dXJlIGFkZGl0aW9ucwp0byBleHRlbnNpb24gbW9kdWxlIGRlY2xhcmF0aW9ucy4KCkV4dGVu
c2lvbnMgbW9kdWxlcyBhcmUgY3JlYXRlZCBpbiBhIHR3by1zdGVwIHByb2Nlc3MsIGZpdHRpbmcg
YmV0dGVyIGludG8KdGhlIE1vZHVsZVNwZWMgYXJjaGl0ZWN0dXJlLCB3aXRoIHBhcmFsbGVscyB0
byBfX25ld19fIGFuZCBfX2luaXRfXyBvZiBjbGFzc2VzLgoKRXh0ZW5zaW9uIG1vZHVsZXMgY2Fu
IHNhZmVseSBzdG9yZSBhcmJpdHJhcnkgQy1sZXZlbCBwZXItbW9kdWxlIHN0YXRlIGluCnRoZSBt
b2R1bGUgdGhhdCBpcyBjb3ZlcmVkIGJ5IG5vcm1hbCBnYXJiYWdlIGNvbGxlY3Rpb24gYW5kIHN1
cHBvcnRzCnJlbG9hZGluZyBhbmQgc3ViLWludGVycHJldGVycy4KRXh0ZW5zaW9uIGF1dGhvcnMg
YXJlIGVuY291cmFnZWQgdG8gdGFrZSB0aGVzZSBpc3N1ZXMgaW50byBhY2NvdW50CndoZW4gdXNp
bmcgdGhlIG5ldyBBUEkuCgpUaGUgcHJvcG9zYWwgYWxzbyBhbGxvd3MgZXh0ZW5zaW9uIG1vZHVs
ZXMgd2l0aCBub24tQVNDSUkgbmFtZXMuCgpOb3QgYWxsIHByb2JsZW1zIHRhY2tsZWQgaW4gUEVQ
IDMxMjEgYXJlIHNvbHZlZCBpbiB0aGlzIHByb3Bvc2FsLgpJbiBwYXJ0aWN1bGFyLCBwcm9ibGVt
cyB3aXRoIHJ1bi10aW1lIG1vZHVsZSBsb29rdXAgKFB5U3RhdGVfRmluZE1vZHVsZSkKYXJlIGxl
ZnQgdG8gYSBmdXR1cmUgUEVQLgoKCk1vdGl2YXRpb24KPT09PT09PT09PQoKUHl0aG9uIG1vZHVs
ZXMgYW5kIGV4dGVuc2lvbiBtb2R1bGVzIGFyZSBub3QgYmVpbmcgc2V0IHVwIGluIHRoZSBzYW1l
IHdheS4KRm9yIFB5dGhvbiBtb2R1bGVzLCB0aGUgbW9kdWxlIG9iamVjdCBpcyBjcmVhdGVkIGFu
ZCBzZXQgdXAgZmlyc3QsIHRoZW4gdGhlCm1vZHVsZSBjb2RlIGlzIGJlaW5nIGV4ZWN1dGVkIChQ
RVAgMzAyKS4KQSBNb2R1bGVTcGVjIG9iamVjdCAoUEVQIDQ1MSkgaXMgdXNlZCB0byBob2xkIGlu
Zm9ybWF0aW9uIGFib3V0IHRoZSBtb2R1bGUsCmFuZCBwYXNzZWQgdG8gdGhlIHJlbGV2YW50IGhv
b2tzLgoKRm9yIGV4dGVuc2lvbnMgKGkuZS4gc2hhcmVkIGxpYnJhcmllcykgYW5kIGJ1aWx0LWlu
IG1vZHVsZXMsIHRoZSBtb2R1bGUKaW5pdCBmdW5jdGlvbiBpcyBleGVjdXRlZCBzdHJhaWdodCBh
d2F5IGFuZCBkb2VzIGJvdGggdGhlIGNyZWF0aW9uIGFuZAppbml0aWFsaXphdGlvbi4gVGhlIGlu
aXRpYWxpemF0aW9uIGZ1bmN0aW9uIGlzIG5vdCBwYXNzZWQgdGhlIE1vZHVsZVNwZWMsCm9yIGFu
eSBpbmZvcm1hdGlvbiBpdCBjb250YWlucywgc3VjaCBhcyB0aGUgX19maWxlX18gb3IgZnVsbHkt
cXVhbGlmaWVkCm5hbWUuIFRoaXMgaGluZGVycyByZWxhdGl2ZSBpbXBvcnRzIGFuZCByZXNvdXJj
ZSBsb2FkaW5nLgoKSW4gUHkzLCBtb2R1bGVzIGFyZSBhbHNvIG5vdCBiZWluZyBhZGRlZCB0byBz
eXMubW9kdWxlcywgd2hpY2ggbWVhbnMgdGhhdCBhCihwb3RlbnRpYWxseSB0cmFuc2l0aXZlKSBy
ZS1pbXBvcnQgb2YgdGhlIG1vZHVsZSB3aWxsIHJlYWxseSB0cnkgdG8gcmUtaW1wb3J0Cml0IGFu
ZCB0aHVzIHJ1biBpbnRvIGFuIGluZmluaXRlIGxvb3Agd2hlbiBpdCBleGVjdXRlcyB0aGUgbW9k
dWxlIGluaXQgZnVuY3Rpb24KYWdhaW4uIFdpdGhvdXQgYWNjZXNzIHRvIHRoZSBmdWxseS1xdWFs
aWZpZWQgbW9kdWxlIG5hbWUsIGl0IGlzIG5vdCB0cml2aWFsIHRvCmNvcnJlY3RseSBhZGQgdGhl
IG1vZHVsZSB0byBzeXMubW9kdWxlcyBlaXRoZXIuClRoaXMgaXMgc3BlY2lmaWNhbGx5IGEgcHJv
YmxlbSBmb3IgQ3l0aG9uIGdlbmVyYXRlZCBtb2R1bGVzLCBmb3Igd2hpY2ggaXQncwpub3QgdW5j
b21tb24gdGhhdCB0aGUgbW9kdWxlIGluaXQgY29kZSBoYXMgdGhlIHNhbWUgbGV2ZWwgb2YgY29t
cGxleGl0eSBhcwp0aGF0IG9mIGFueSAncmVndWxhcicgUHl0aG9uIG1vZHVsZS4gQWxzbywgdGhl
IGxhY2sgb2YgX19maWxlX18gYW5kIF9fbmFtZV9fCmluZm9ybWF0aW9uIGhpbmRlcnMgdGhlIGNv
bXBpbGF0aW9uIG9mICJfX2luaXRfXy5weSIgbW9kdWxlcywgaS5lLiBwYWNrYWdlcywKZXNwZWNp
YWxseSB3aGVuIHJlbGF0aXZlIGltcG9ydHMgYXJlIGJlaW5nIHVzZWQgYXQgbW9kdWxlIGluaXQg
dGltZS4KCkZ1cnRoZXJtb3JlLCB0aGUgbWFqb3JpdHkgb2YgY3VycmVudGx5IGV4aXN0aW5nIGV4
dGVuc2lvbiBtb2R1bGVzIGhhcwpwcm9ibGVtcyB3aXRoIHN1Yi1pbnRlcnByZXRlciBzdXBwb3J0
IGFuZC9vciBpbnRlcnByZXRlciByZWxvYWRpbmcsIGFuZCwgd2hpbGUKaXQgaXMgcG9zc2libGUg
d2l0aCB0aGUgY3VycmVudCBpbmZyYXN0cnVjdHVyZSB0byBzdXBwb3J0IHRoZXNlCmZlYXR1cmVz
LCBpdCBpcyBuZWl0aGVyIGVhc3kgbm9yIGVmZmljaWVudC4KQWRkcmVzc2luZyB0aGVzZSBpc3N1
ZXMgd2FzIHRoZSBnb2FsIG9mIFBFUCAzMTIxLCBidXQgbWFueSBleHRlbnNpb25zLAppbmNsdWRp
bmcgc29tZSBpbiB0aGUgc3RhbmRhcmQgbGlicmFyeSwgdG9vayB0aGUgbGVhc3QtZWZmb3J0IGFw
cHJvYWNoCnRvIHBvcnRpbmcgdG8gUHl0aG9uIDMsIGxlYXZpbmcgdGhlc2UgaXNzdWVzIHVucmVz
b2x2ZWQuClRoaXMgUEVQIGtlZXBzIGJhY2t3YXJkcyBjb21wYXRpYmlsaXR5LCB3aGljaCBzaG91
bGQgcmVkdWNlIHByZXNzdXJlIGFuZCBnaXZlCmV4dGVuc2lvbiBhdXRob3JzIGFkZXF1YXRlIHRp
bWUgdG8gY29uc2lkZXIgdGhlc2UgaXNzdWVzIHdoZW4gcG9ydGluZy4KCgpUaGUgY3VycmVudCBw
cm9jZXNzCj09PT09PT09PT09PT09PT09PT0KCkN1cnJlbnRseSwgZXh0ZW5zaW9uIGFuZCBidWls
dC1pbiBtb2R1bGVzIGV4cG9ydCBhbiBpbml0aWFsaXphdGlvbiBmdW5jdGlvbgpuYW1lZCAiUHlJ
bml0X21vZHVsZW5hbWUiLCBuYW1lZCBhZnRlciB0aGUgZmlsZSBuYW1lIG9mIHRoZSBzaGFyZWQg
bGlicmFyeS4KVGhpcyBmdW5jdGlvbiBpcyBleGVjdXRlZCBieSB0aGUgaW1wb3J0IG1hY2hpbmVy
eSBhbmQgbXVzdCByZXR1cm4gYSBmdWxseQppbml0aWFsaXplZCBtb2R1bGUgb2JqZWN0LgpUaGUg
ZnVuY3Rpb24gcmVjZWl2ZXMgbm8gYXJndW1lbnRzLCBzbyBpdCBoYXMgbm8gd2F5IG9mIGtub3dp
bmcgYWJvdXQgaXRzCmltcG9ydCBjb250ZXh0LgoKRHVyaW5nIGl0cyBleGVjdXRpb24sIHRoZSBt
b2R1bGUgaW5pdCBmdW5jdGlvbiBjcmVhdGVzIGEgbW9kdWxlIG9iamVjdApiYXNlZCBvbiBhIFB5
TW9kdWxlRGVmIG9iamVjdC4gSXQgdGhlbiBjb250aW51ZXMgdG8gaW5pdGlhbGl6ZSBpdCBieSBh
ZGRpbmcKYXR0cmlidXRlcyB0byB0aGUgbW9kdWxlIGRpY3QsIGNyZWF0aW5nIHR5cGVzLCBldGMu
CgpJbiB0aGUgYmFjaywgdGhlIHNoYXJlZCBsaWJyYXJ5IGxvYWRlciBrZWVwcyBhIG5vdGUgb2Yg
dGhlIGZ1bGx5IHF1YWxpZmllZAptb2R1bGUgbmFtZSBvZiB0aGUgbGFzdCBtb2R1bGUgdGhhdCBp
dCBsb2FkZWQsIGFuZCB3aGVuIGEgbW9kdWxlIGdldHMKY3JlYXRlZCB0aGF0IGhhcyBhIG1hdGNo
aW5nIG5hbWUsIHRoaXMgZ2xvYmFsIHZhcmlhYmxlIGlzIHVzZWQgdG8gZGV0ZXJtaW5lCnRoZSBm
dWxseSBxdWFsaWZpZWQgbmFtZSBvZiB0aGUgbW9kdWxlIG9iamVjdC4gVGhpcyBpcyBub3QgZW50
aXJlbHkgc2FmZSBhcyBpdApyZWxpZXMgb24gdGhlIG1vZHVsZSBpbml0IGZ1bmN0aW9uIGNyZWF0
aW5nIGl0cyBvd24gbW9kdWxlIG9iamVjdCBmaXJzdCwKYnV0IHRoaXMgYXNzdW1wdGlvbiB1c3Vh
bGx5IGhvbGRzIGluIHByYWN0aWNlLgoKClRoZSBwcm9wb3NhbAo9PT09PT09PT09PT0KClRoZSBp
bml0aWFsaXphdGlvbiBmdW5jdGlvbiAoUHlJbml0X21vZHVsZW5hbWUpIHdpbGwgYmUgYWxsb3dl
ZCB0byByZXR1cm4KYSBwb2ludGVyIHRvIGEgUHlNb2R1bGVEZWYgb2JqZWN0LiBUaGUgaW1wb3J0
IG1hY2hpbmVyeSB3aWxsIGJlIGluIGNoYXJnZQpvZiBjb25zdHJ1Y3RpbmcgdGhlIG1vZHVsZSBv
YmplY3QsIGNhbGxpbmcgaG9va3MgcHJvdmlkZWQgaW4gdGhlIFB5TW9kdWxlRGVmCmluIHRoZSBy
ZWxldmFudCBwaGFzZXMgb2YgaW5pdGlhbGl6YXRpb24gKGFzIGRlc2NyaWJlZCBiZWxvdykuCgpU
aGlzIG11bHRpLXBoYXNlIGluaXRpYWxpemF0aW9uIGlzIGFuIGFkZGl0aW9uYWwgcG9zc2liaWxp
dHkuIFNpbmdsZS1waGFzZQppbml0aWFsaXphdGlvbiwgdGhlIGN1cnJlbnQgcHJhY3RpY2Ugb2Yg
cmV0dXJuaW5nIGEgZnVsbHkgaW5pdGlhbGl6ZWQgbW9kdWxlCm9iamVjdCwgd2lsbCBzdGlsbCBi
ZSBhY2NlcHRlZCwgc28gZXhpc3RpbmcgY29kZSB3aWxsIHdvcmsgdW5jaGFuZ2VkLAppbmNsdWRp
bmcgYmluYXJ5IGNvbXBhdGliaWxpdHkuCgpUaGUgUHlNb2R1bGVEZWYgc3RydWN0dXJlIHdpbGwg
YmUgY2hhbmdlZCB0byBjb250YWluIGEgbGlzdCBvZiBzbG90cywKc2ltaWxhcmx5IHRvIFBFUCAz
ODQncyBQeVR5cGVfU3BlYyBmb3IgdHlwZXMuClRvIGtlZXAgYmluYXJ5IGNvbXBhdGliaWxpdHks
IGFuZCBhdm9pZCBuZWVkaW5nIHRvIGludHJvZHVjZSBhIG5ldyBzdHJ1Y3R1cmUKKHdoaWNoIHdv
dWxkIGludHJvZHVjZSBhZGRpdGlvbmFsIHN1cHBvcnRpbmcgZnVuY3Rpb25zIGFuZCBwZXItbW9k
dWxlIHN0b3JhZ2UpLAp0aGUgY3VycmVudGx5IHVudXNlZCBtX3JlbG9hZCBwb2ludGVyIG9mIFB5
TW9kdWxlRGVmIHdpbGwgYmUgY2hhbmdlZCB0bwpob2xkIHRoZSBzbG90cy4gVGhlIHN0cnVjdHVy
ZXMgYXJlIGRlZmluZWQgYXM6OgoKICAgIHR5cGVkZWYgc3RydWN0IHsKICAgICAgICBpbnQgc2xv
dDsKICAgICAgICB2b2lkICp2YWx1ZTsKICAgIH0gUHlNb2R1bGVEZWZfU2xvdDsKCiAgICB0eXBl
ZGVmIHN0cnVjdCBQeU1vZHVsZURlZiB7CiAgICAgICAgUHlNb2R1bGVEZWZfQmFzZSBtX2Jhc2U7
CiAgICAgICAgY29uc3QgY2hhciogbV9uYW1lOwogICAgICAgIGNvbnN0IGNoYXIqIG1fZG9jOwog
ICAgICAgIFB5X3NzaXplX3QgbV9zaXplOwogICAgICAgIFB5TWV0aG9kRGVmICptX21ldGhvZHM7
CiAgICAgICAgUHlNb2R1bGVEZWZfU2xvdCAqbV9zbG90czsgIC8qIGNoYW5nZWQgZnJvbSBgaW5x
dWlyeSBtX3JlbG9hZDtgICovCiAgICAgICAgdHJhdmVyc2Vwcm9jIG1fdHJhdmVyc2U7CiAgICAg
ICAgaW5xdWlyeSBtX2NsZWFyOwogICAgICAgIGZyZWVmdW5jIG1fZnJlZTsKICAgIH0gUHlNb2R1
bGVEZWY7CgpUaGUgKm1fc2xvdHMqIG1lbWJlciBtdXN0IGJlIGVpdGhlciBOVUxMLCBvciBwb2lu
dCB0byBhbiBhcnJheSBvZgpQeU1vZHVsZURlZl9TbG90IHN0cnVjdHVyZXMsIHRlcm1pbmF0ZWQg
YnkgYSBzbG90IHdpdGggaWQgc2V0IHRvIDAKKGkuZS4gYGB7MCwgTlVMTH1gYCkuCgpUbyBzcGVj
aWZ5IGEgc2xvdCwgYSB1bmlxdWUgc2xvdCBJRCBtdXN0IGJlIHByb3ZpZGVkLgpOZXcgUHl0aG9u
IHZlcnNpb25zIG1heSBpbnRyb2R1Y2UgbmV3IHNsb3QgSURzLCBidXQgc2xvdCBJRHMgd2lsbCBu
ZXZlciBiZQpyZWN5Y2xlZC4gU2xvdHMgbWF5IGdldCBkZXByZWNhdGVkLCBidXQgd2lsbCBjb250
aW51ZSB0byBiZSBzdXBwb3J0ZWQKdGhyb3VnaG91dCBQeXRob24gMy54LgoKQSBzbG90J3MgdmFs
dWUgcG9pbnRlciBtYXkgbm90IGJlIE5VTEwsIHVubGVzcyBzcGVjaWZpZWQgb3RoZXJ3aXNlIGlu
IHRoZQpzbG90J3MgZG9jdW1lbnRhdGlvbi4KClRoZSBmb2xsb3dpbmcgc2xvdHMgYXJlIGN1cnJl
bnRseSBhdmFpbGFibGUsIGFuZCBkZXNjcmliZWQgbGF0ZXI6CgoqIFB5X21vZF9jcmVhdGUKKiBQ
eV9tb2RfZXhlYwoKVW5rbm93biBzbG90IElEcyB3aWxsIGNhdXNlIHRoZSBpbXBvcnQgdG8gZmFp
bCB3aXRoIFN5c3RlbUVycm9yLgoKV2hlbiB1c2luZyBtdWx0aS1waGFzZSBpbml0aWFsaXphdGlv
biwgdGhlICptX25hbWUqIGZpZWxkIG9mIFB5TW9kdWxlRGVmIHdpbGwKbm90IGJlIHVzZWQgZHVy
aW5nIGltcG9ydGluZzsgdGhlIG1vZHVsZSBuYW1lIHdpbGwgYmUgdGFrZW4gZnJvbSB0aGUgTW9k
dWxlU3BlYy4KCkJlZm9yZSBpdCBpcyByZXR1cm5lZCBmcm9tIFB5SW5pdF8qLCB0aGUgUHlNb2R1
bGVEZWYgb2JqZWN0IG11c3QgYmUgaW5pdGlhbGl6ZWQKdXNpbmcgdGhlIG5ld2x5IGFkZGVkIFB5
TW9kdWxlRGVmX0luaXQgZnVuY3Rpb24uIFRoaXMgc2V0cyB0aGUgb2JqZWN0IHR5cGUKKHdoaWNo
IGNhbm5vdCBiZSBkb25lIHN0YXRpY2FsbHkgb24gY2VydGFpbiBjb21waWxlcnMpLCByZWZjb3Vu
dCwgYW5kIGludGVybmFsCmJvb2trZWVwaW5nIGRhdGEgKG1faW5kZXgpLgpGb3IgZXhhbXBsZSwg
YW4gZXh0ZW5zaW9uIG1vZHVsZSAiZXhhbXBsZSIgd291bGQgYmUgZXhwb3J0ZWQgYXM6OgoKICAg
IHN0YXRpYyBQeU1vZHVsZURlZiBleGFtcGxlX2RlZiA9IHsuLi59CgogICAgUHlNT0RJTklUX0ZV
TkMKICAgIFB5SW5pdF9leGFtcGxlKHZvaWQpCiAgICB7CiAgICAgICAgcmV0dXJuIFB5TW9kdWxl
RGVmX0luaXQoJmV4YW1wbGVfZGVmKTsKICAgIH0KClRoZSBQeU1vZHVsZURlZiBvYmplY3QgbXVz
dCBiZSBhdmFpbGFibGUgZm9yIHRoZSBsaWZldGltZSBvZiB0aGUgbW9kdWxlIGNyZWF0ZWQKZnJv
bSBpdCDigJMgdXN1YWxseSwgaXQgd2lsbCBiZSBkZWNsYXJlZCBzdGF0aWNhbGx5LgoKUHNldWRv
LWNvZGUgT3ZlcnZpZXcKLS0tLS0tLS0tLS0tLS0tLS0tLS0KCkhlcmUgaXMgYW4gb3ZlcnZpZXcg
b2YgaG93IHRoZSBtb2RpZmllZCBpbXBvcnRlcnMgd2lsbCBvcGVyYXRlLgpEZXRhaWxzIHN1Y2gg
YXMgbG9nZ2luZyBvciBoYW5kbGluZyBvZiBlcnJvcnMgYW5kIGludmFsaWQgc3RhdGVzCmFyZSBs
ZWZ0IG91dCwgYW5kIEMgY29kZSBpcyBwcmVzZW50ZWQgd2l0aCBhIGNvbmNpc2UgUHl0aG9uLWxp
a2Ugc3ludGF4LgoKVGhlIGZyYW1ld29yayB0aGF0IGNhbGxzIHRoZSBpbXBvcnRlcnMgaXMgZXhw
bGFpbmVkIGluIFBFUCA0NTEKWyNwZXAtMDQ1MS1sb2FkaW5nXV8uCgo6OgoKICAgIGltcG9ydGxp
Yi9fYm9vdHN0cmFwLnB5OgoKICAgICAgICBjbGFzcyBCdWlsdGluSW1wb3J0ZXI6CiAgICAgICAg
ICAgIGRlZiBjcmVhdGVfbW9kdWxlKHNlbGYsIHNwZWMpOgogICAgICAgICAgICAgICAgbW9kdWxl
ID0gX2ltcC5jcmVhdGVfYnVpbHRpbihzcGVjKQoKICAgICAgICAgICAgZGVmIGV4ZWNfbW9kdWxl
KHNlbGYsIG1vZHVsZSk6CiAgICAgICAgICAgICAgICBfaW1wLmV4ZWNfZHluYW1pYyhtb2R1bGUp
CgogICAgICAgICAgICBkZWYgbG9hZF9tb2R1bGUoc2VsZiwgbmFtZSk6CiAgICAgICAgICAgICAg
ICAjIHVzZSBhIGJhY2t3YXJkcyBjb21wYXRpYmlsaXR5IHNoaW0KICAgICAgICAgICAgICAgIF9s
b2FkX21vZHVsZV9zaGltKHNlbGYsIG5hbWUpCgogICAgaW1wb3J0bGliL19ib290c3RyYXBfZXh0
ZXJuYWwucHk6CgogICAgICAgIGNsYXNzIEV4dGVuc2lvbkZpbGVMb2FkZXI6CiAgICAgICAgICAg
IGRlZiBjcmVhdGVfbW9kdWxlKHNlbGYsIHNwZWMpOgogICAgICAgICAgICAgICAgbW9kdWxlID0g
X2ltcC5jcmVhdGVfZHluYW1pYyhzcGVjKQoKICAgICAgICAgICAgZGVmIGV4ZWNfbW9kdWxlKHNl
bGYsIG1vZHVsZSk6CiAgICAgICAgICAgICAgICBfaW1wLmV4ZWNfZHluYW1pYyhtb2R1bGUpCgog
ICAgICAgICAgICBkZWYgbG9hZF9tb2R1bGUoc2VsZiwgbmFtZSk6CiAgICAgICAgICAgICAgICAj
IHVzZSBhIGJhY2t3YXJkcyBjb21wYXRpYmlsaXR5IHNoaW0KICAgICAgICAgICAgICAgIF9sb2Fk
X21vZHVsZV9zaGltKHNlbGYsIG5hbWUpCgogICAgUHl0aG9uL2ltcG9ydC5jICh0aGUgX2ltcCBt
b2R1bGUpOgoKICAgICAgICBkZWYgY3JlYXRlX2R5bmFtaWMoc3BlYyk6CiAgICAgICAgICAgIG5h
bWUgPSBzcGVjLm5hbWUKICAgICAgICAgICAgcGF0aCA9IHNwZWMub3JpZ2luCgogICAgICAgICAg
ICAjIEZpbmQgYW4gYWxyZWFkeSBsb2FkZWQgbW9kdWxlIHRoYXQgdXNlZCBzaW5nbGUtcGhhc2Ug
aW5pdC4KICAgICAgICAgICAgIyBGb3IgbXVsdGktcGhhc2UgaW5pdGlhbGl6YXRpb24sIG1vZCBp
cyBOVUxMLCBzbyBhIG5ldyBtb2R1bGUKICAgICAgICAgICAgIyBpcyBhbHdheXMgY3JlYXRlZC4K
ICAgICAgICAgICAgbW9kID0gX1B5SW1wb3J0X0ZpbmRFeHRlbnNpb25PYmplY3QobmFtZSwgbmFt
ZSkKICAgICAgICAgICAgaWYgbW9kOgogICAgICAgICAgICAgICAgcmV0dXJuIG1vZAoKICAgICAg
ICAgICAgcmV0dXJuIF9QeUltcG9ydF9Mb2FkRHluYW1pY01vZHVsZVdpdGhTcGVjKHNwZWMpCgog
ICAgICAgIGRlZiBleGVjX2R5bmFtaWMobW9kdWxlKToKICAgICAgICAgICAgaWYgbm90IGlzaW5z
dGFuY2UobW9kdWxlLCB0eXBlcy5Nb2R1bGVUeXBlKToKICAgICAgICAgICAgICAgICMgbm9uLW1v
ZHVsZXMgYXJlIHNraXBwZWQgLS0gUHlNb2R1bGVfR2V0RGVmIGZhaWxzIG9uIHRoZW0KICAgICAg
ICAgICAgICAgIHJldHVybgoKICAgICAgICAgICAgZGVmID0gUHlNb2R1bGVfR2V0RGVmKG1vZHVs
ZSkKICAgICAgICAgICAgc3RhdGUgPSBQeU1vZHVsZV9HZXRTdGF0ZShtb2R1bGUpCiAgICAgICAg
ICAgIGlmIHN0YXRlIGlzIE5VTEw6CiAgICAgICAgICAgICAgICBQeU1vZHVsZV9FeGVjRGVmKG1v
ZHVsZSwgZGVmKQoKICAgICAgICBkZWYgY3JlYXRlX2J1aWx0aW4oc3BlYyk6CiAgICAgICAgICAg
IG5hbWUgPSBzcGVjLm5hbWUKCiAgICAgICAgICAgICMgRmluZCBhbiBhbHJlYWR5IGxvYWRlZCBt
b2R1bGUgdGhhdCB1c2VkIHNpbmdsZS1waGFzZSBpbml0LgogICAgICAgICAgICAjIEZvciBtdWx0
aS1waGFzZSBpbml0aWFsaXphdGlvbiwgbW9kIGlzIE5VTEwsIHNvIGEgbmV3IG1vZHVsZQogICAg
ICAgICAgICAjIGlzIGFsd2F5cyBjcmVhdGVkLgogICAgICAgICAgICBtb2QgPSBfUHlJbXBvcnRf
RmluZEV4dGVuc2lvbk9iamVjdChuYW1lLCBuYW1lKQogICAgICAgICAgICBpZiBtb2Q6CiAgICAg
ICAgICAgICAgICByZXR1cm4gbW9kCgogICAgICAgICAgICBmb3IgaW5pdG5hbWUsIGluaXRmdW5j
IGluIFB5SW1wb3J0X0luaXR0YWI6CiAgICAgICAgICAgICAgICBpZiBuYW1lID09IGluaXRuYW1l
OgogICAgICAgICAgICAgICAgICAgIG0gPSBpbml0ZnVuYygpCiAgICAgICAgICAgICAgICAgICAg
aWYgaXNpbnN0YW5jZShtLCBQeU1vZHVsZURlZik6CiAgICAgICAgICAgICAgICAgICAgICAgIGRl
ZiA9IG0KICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFB5TW9kdWxlX0Zyb21EZWZBbmRT
cGVjKGRlZiwgc3BlYykKICAgICAgICAgICAgICAgICAgICBlbHNlOgogICAgICAgICAgICAgICAg
ICAgICAgICAjIGZhbGwgYmFjayB0byBzaW5nbGUtcGhhc2UgaW5pdGlhbGl6YXRpb24KICAgICAg
ICAgICAgICAgICAgICAgICAgbW9kdWxlID0gbQogICAgICAgICAgICAgICAgICAgICAgICBfUHlJ
bXBvcnRfRml4dXBFeHRlbnNpb25PYmplY3QobW9kdWxlLCBuYW1lLCBuYW1lKQogICAgICAgICAg
ICAgICAgICAgICAgICByZXR1cm4gbW9kdWxlCgogICAgUHl0aG9uL2ltcG9ydGRsLmM6CgogICAg
ICAgIGRlZiBfUHlJbXBvcnRfTG9hZER5bmFtaWNNb2R1bGVXaXRoU3BlYyhzcGVjKToKICAgICAg
ICAgICAgcGF0aCA9IHNwZWMub3JpZ2luCiAgICAgICAgICAgIHBhY2thZ2UsIGRvdCwgbmFtZSA9
IHNwZWMubmFtZS5ycGFydGl0aW9uKCcuJykKCiAgICAgICAgICAgICMgc2VlIHRoZSAiTm9uLUFT
Q0lJIG1vZHVsZSBuYW1lcyIgc2VjdGlvbiBmb3IgZXhwb3J0X2hvb2tfbmFtZQogICAgICAgICAg
ICBob29rX25hbWUgPSBleHBvcnRfaG9va19uYW1lKG5hbWUpCgogICAgICAgICAgICAjIGNhbGwg
cGxhdGZvcm0tc3BlY2lmaWMgZnVuY3Rpb24gZm9yIGxvYWRpbmcgZXhwb3J0ZWQgZnVuY3Rpb24K
ICAgICAgICAgICAgIyBmcm9tIHNoYXJlZCBsaWJyYXJ5CiAgICAgICAgICAgIGV4cG9ydGZ1bmMg
PSBfZmluZF9zaGFyZWRfZnVuY3B0cihob29rX25hbWUsIHBhdGgpCgogICAgICAgICAgICBtID0g
ZXhwb3J0ZnVuYygpCiAgICAgICAgICAgIGlmIGlzaW5zdGFuY2UobSwgUHlNb2R1bGVEZWYpOgog
ICAgICAgICAgICAgICAgZGVmID0gbQogICAgICAgICAgICAgICAgcmV0dXJuIFB5TW9kdWxlX0Zy
b21EZWZBbmRTcGVjKGRlZiwgc3BlYykKCiAgICAgICAgICAgIG1vZHVsZSA9IG0KCiAgICAgICAg
ICAgICMgZmFsbCBiYWNrIHRvIHNpbmdsZS1waGFzZSBpbml0aWFsaXphdGlvbgogICAgICAgICAg
ICAuLi4uCgogICAgT2JqZWN0cy9tb2R1bGVvYmplY3QuYzoKCiAgICAgICAgZGVmIFB5TW9kdWxl
X0Zyb21EZWZBbmRTcGVjKGRlZiwgc3BlYyk6CiAgICAgICAgICAgIG5hbWUgPSBzcGVjLm5hbWUK
ICAgICAgICAgICAgY3JlYXRlID0gTm9uZQogICAgICAgICAgICBmb3Igc2xvdCwgdmFsdWUgaW4g
ZGVmLm1fc2xvdHM6CiAgICAgICAgICAgICAgICBpZiBzbG90ID09IFB5X21vZF9jcmVhdGU6CiAg
ICAgICAgICAgICAgICAgICAgY3JlYXRlID0gdmFsdWUKICAgICAgICAgICAgaWYgY3JlYXRlOgog
ICAgICAgICAgICAgICAgbSA9IGNyZWF0ZShzcGVjLCBkZWYpCiAgICAgICAgICAgIGVsc2U6CiAg
ICAgICAgICAgICAgICBtID0gUHlNb2R1bGVfTmV3KG5hbWUpCgogICAgICAgICAgICBpZiBpc2lu
c3RhbmNlKG0sIHR5cGVzLk1vZHVsZVR5cGUpOgogICAgICAgICAgICAgICAgbS5tZF9zdGF0ZSA9
IE5vbmUKICAgICAgICAgICAgICAgIG0ubWRfZGVmID0gZGVmCgogICAgICAgICAgICBpZiBkZWYu
bV9tZXRob2RzOgogICAgICAgICAgICAgICAgUHlNb2R1bGVfQWRkRnVuY3Rpb25zKG0sIGRlZi5t
X21ldGhvZHMpCiAgICAgICAgICAgIGlmIGRlZi5tX2RvYzoKICAgICAgICAgICAgICAgIFB5TW9k
dWxlX1NldERvY1N0cmluZyhtLCBkZWYubV9kb2MpCgogICAgICAgIGRlZiBQeU1vZHVsZV9FeGVj
RGVmKG1vZHVsZSwgZGVmKToKICAgICAgICAgICAgaWYgaXNpbnN0YW5jZShtb2R1bGUsIHR5cGVz
Lm1vZHVsZV90eXBlKToKICAgICAgICAgICAgICAgIGlmIG1vZHVsZS5tZF9zdGF0ZSBpcyBOVUxM
OgogICAgICAgICAgICAgICAgICAgICMgYWxsb2NhdGUgYSBibG9jayBvZiB6ZXJvZWQtb3V0IG1l
bW9yeQogICAgICAgICAgICAgICAgICAgIG1vZHVsZS5tZF9zdGF0ZSA9IF9hbGxvYyhtb2R1bGUu
bWRfc2l6ZSkKCiAgICAgICAgICAgIGlmIGRlZi5tX3Nsb3RzIGlzIE5VTEw6CiAgICAgICAgICAg
ICAgICByZXR1cm4KCiAgICAgICAgICAgIGZvciBzbG90LCB2YWx1ZSBpbiBkZWYubV9zbG90czoK
ICAgICAgICAgICAgICAgIGlmIHNsb3QgPT0gUHlfbW9kX2V4ZWM6CiAgICAgICAgICAgICAgICAg
ICAgdmFsdWUobW9kdWxlKQoKCk1vZHVsZSBDcmVhdGlvbiBQaGFzZQotLS0tLS0tLS0tLS0tLS0t
LS0tLS0KCkNyZWF0aW9uIG9mIHRoZSBtb2R1bGUgb2JqZWN0IOKAkyB0aGF0IGlzLCB0aGUgaW1w
bGVtZW50YXRpb24gb2YKRXhlY3V0aW9uTG9hZGVyLmNyZWF0ZV9tb2R1bGUg4oCTIGlzIGdvdmVy
bmVkIGJ5IHRoZSBQeV9tb2RfY3JlYXRlIHNsb3QuCgpUaGUgUHlfbW9kX2NyZWF0ZSBzbG90Ci4u
Li4uLi4uLi4uLi4uLi4uLi4uLi4KClRoZSBQeV9tb2RfY3JlYXRlIHNsb3QgaXMgdXNlZCB0byBz
dXBwb3J0IGN1c3RvbSBtb2R1bGUgc3ViY2xhc3Nlcy4KVGhlIHZhbHVlIHBvaW50ZXIgbXVzdCBw
b2ludCB0byBhIGZ1bmN0aW9uIHdpdGggdGhlIGZvbGxvd2luZyBzaWduYXR1cmU6OgoKICAgIFB5
T2JqZWN0KiAoKlB5TW9kdWxlQ3JlYXRlRnVuY3Rpb24pKFB5T2JqZWN0ICpzcGVjLCBQeU1vZHVs
ZURlZiAqZGVmKQoKVGhlIGZ1bmN0aW9uIHJlY2VpdmVzIGEgTW9kdWxlU3BlYyBpbnN0YW5jZSwg
YXMgZGVmaW5lZCBpbiBQRVAgNDUxLAphbmQgdGhlIFB5TW9kdWxlRGVmIHN0cnVjdHVyZS4KSXQg
c2hvdWxkIHJldHVybiBhIG5ldyBtb2R1bGUgb2JqZWN0LCBvciBzZXQgYW4gZXJyb3IKYW5kIHJl
dHVybiBOVUxMLgoKVGhpcyBmdW5jdGlvbiBpcyBub3QgcmVzcG9uc2libGUgZm9yIHNldHRpbmcg
aW1wb3J0LXJlbGF0ZWQgYXR0cmlidXRlcwpzcGVjaWZpZWQgaW4gUEVQIDQ1MSBbI3BlcC0wNDUx
LWF0dHJpYnV0ZXNdXyAoc3VjaCBhcyBgYF9fbmFtZV9fYGAgb3IKYGBfX2xvYWRlcl9fYGApIG9u
IHRoZSBuZXcgbW9kdWxlLgoKVGhlcmUgaXMgbm8gcmVxdWlyZW1lbnQgZm9yIHRoZSByZXR1cm5l
ZCBvYmplY3QgdG8gYmUgYW4gaW5zdGFuY2Ugb2YKdHlwZXMuTW9kdWxlVHlwZS4gQW55IHR5cGUg
Y2FuIGJlIHVzZWQsIGFzIGxvbmcgYXMgaXQgc3VwcG9ydHMgc2V0dGluZyBhbmQKZ2V0dGluZyBh
dHRyaWJ1dGVzLCBpbmNsdWRpbmcgYXQgbGVhc3QgdGhlIGltcG9ydC1yZWxhdGVkIGF0dHJpYnV0
ZXMuCkhvd2V2ZXIsIG9ubHkgTW9kdWxlVHlwZSBpbnN0YW5jZXMgc3VwcG9ydCBtb2R1bGUtc3Bl
Y2lmaWMgZnVuY3Rpb25hbGl0eQpzdWNoIGFzIHBlci1tb2R1bGUgc3RhdGUgYW5kIHByb2Nlc3Np
bmcgb2YgZXhlY3V0aW9uIHNsb3RzLgpJZiBzb21ldGhpbmcgb3RoZXIgdGhhbiBhIE1vZHVsZVR5
cGUgc3ViY2xhc3MgaXMgcmV0dXJuZWQsIG5vIGV4ZWN1dGlvbiBzbG90cwptYXkgYmUgZGVmaW5l
ZDsgaWYgYW55IGFyZSwgYSBTeXN0ZW1FcnJvciBpcyByYWlzZWQuCgpOb3RlIHRoYXQgd2hlbiB0
aGlzIGZ1bmN0aW9uIGlzIGNhbGxlZCwgdGhlIG1vZHVsZSdzIGVudHJ5IGluIHN5cy5tb2R1bGVz
CmlzIG5vdCBwb3B1bGF0ZWQgeWV0LiBBdHRlbXB0aW5nIHRvIGltcG9ydCB0aGUgc2FtZSBtb2R1
bGUgYWdhaW4KKHBvc3NpYmx5IHRyYW5zaXRpdmVseSksIG1heSBsZWFkIHRvIGFuIGluZmluaXRl
IGxvb3AuCkV4dGVuc2lvbiBhdXRob3JzIGFyZSBhZHZpc2VkIHRvIGtlZXAgUHlfbW9kX2NyZWF0
ZSBtaW5pbWFsLCBhbiBpbiBwYXJ0aWN1bGFyCnRvIG5vdCBjYWxsIHVzZXIgY29kZSBmcm9tIGl0
LgoKTXVsdGlwbGUgUHlfbW9kX2NyZWF0ZSBzbG90cyBtYXkgbm90IGJlIHNwZWNpZmllZC4gSWYg
dGhleSBhcmUsIGltcG9ydAp3aWxsIGZhaWwgd2l0aCBTeXN0ZW1FcnJvci4KCklmIFB5X21vZF9j
cmVhdGUgaXMgbm90IHNwZWNpZmllZCwgdGhlIGltcG9ydCBtYWNoaW5lcnkgd2lsbCBjcmVhdGUg
YSBub3JtYWwKbW9kdWxlIG9iamVjdCB1c2luZyBQeU1vZHVsZV9OZXcuIFRoZSBuYW1lIGlzIHRh
a2VuIGZyb20gKnNwZWMqLgoKClBvc3QtY3JlYXRpb24gc3RlcHMKLi4uLi4uLi4uLi4uLi4uLi4u
LgoKSWYgdGhlIFB5X21vZF9jcmVhdGUgZnVuY3Rpb24gcmV0dXJucyBhbiBpbnN0YW5jZSBvZiB0
eXBlcy5Nb2R1bGVUeXBlCm9yIGEgc3ViY2xhc3MgKG9yIGlmIGEgUHlfbW9kX2NyZWF0ZSBzbG90
IGlzIG5vdCBwcmVzZW50KSwgdGhlIGltcG9ydAptYWNoaW5lcnkgd2lsbCBhc3NvY2lhdGUgdGhl
IFB5TW9kdWxlRGVmIHdpdGggdGhlIG1vZHVsZS4KVGhpcyBhbHNvIG1ha2VzIHRoZSBQeU1vZHVs
ZURlZiBhY2Nlc3NpYmxlIHRvIGV4ZWN1dGlvbiBwaGFzZSwgdGhlClB5TW9kdWxlX0dldERlZiBm
dW5jdGlvbiwgYW5kIGdhcmJhZ2UgY29sbGVjdGlvbiByb3V0aW5lcyAodHJhdmVyc2UsCmNsZWFy
LCBmcmVlKS4KCklmIHRoZSBQeV9tb2RfY3JlYXRlIGZ1bmN0aW9uIGRvZXMgbm90IHJldHVybiBh
IG1vZHVsZSBzdWJjbGFzcywgdGhlbiBtX3NpemUKbXVzdCBiZSAwLCBhbmQgbV90cmF2ZXJzZSwg
bV9jbGVhciBhbmQgbV9mcmVlIG11c3QgYWxsIGJlIE5VTEwuCk90aGVyd2lzZSwgU3lzdGVtRXJy
b3IgaXMgcmFpc2VkLgoKQWRkaXRpb25hbGx5LCBpbml0aWFsIGF0dHJpYnV0ZXMgc3BlY2lmaWVk
IGluIHRoZSBQeU1vZHVsZURlZiBhcmUgc2V0IG9uIHRoZQptb2R1bGUgb2JqZWN0LCByZWdhcmRs
ZXNzIG9mIGl0cyB0eXBlOgoKKiBUaGUgZG9jc3RyaW5nIGlzIHNldCBmcm9tIG1fZG9jLCBpZiBu
b24tTlVMTC4KKiBUaGUgbW9kdWxlJ3MgZnVuY3Rpb25zIGFyZSBpbml0aWFsaXplZCBmcm9tIG1f
bWV0aG9kcywgaWYgYW55LgoKCk1vZHVsZSBFeGVjdXRpb24gUGhhc2UKLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLQoKTW9kdWxlIGV4ZWN1dGlvbiAtLSB0aGF0IGlzLCB0aGUgaW1wbGVtZW50YXRpb24g
b2YKRXhlY3V0aW9uTG9hZGVyLmV4ZWNfbW9kdWxlIC0tIGlzIGdvdmVybmVkIGJ5ICJleGVjdXRp
b24gc2xvdHMiLgpUaGlzIFBFUCBvbmx5IGFkZHMgb25lLCBQeV9tb2RfZXhlYywgYnV0IG90aGVy
cyBtYXkgYmUgYWRkZWQgaW4gdGhlIGZ1dHVyZS4KClRoZSBleGVjdXRpb24gcGhhc2UgaXMgZG9u
ZSBvbiB0aGUgUHlNb2R1bGVEZWYgYXNzb2NpYXRlZCB3aXRoIHRoZSBtb2R1bGUKb2JqZWN0LiBG
b3Igb2JqZWN0cyB0aGF0IGFyZSBub3QgYSBzdWJjbGFzcyBvZiBQeU1vZHVsZV9UeXBlIChmb3Ig
d2hpY2gKUHlNb2R1bGVfR2V0RGVmIHdvdWxkIGZhaWwpLCB0aGUgZXhlY3V0aW9uIHBoYXNlIGlz
IHNraXBwZWQuCgpFeGVjdXRpb24gc2xvdHMgbWF5IGJlIHNwZWNpZmllZCBtdWx0aXBsZSB0aW1l
cywgYW5kIGFyZSBwcm9jZXNzZWQgaW4gdGhlIG9yZGVyCnRoZXkgYXBwZWFyIGluIHRoZSBzbG90
cyBhcnJheS4KV2hlbiB1c2luZyB0aGUgZGVmYXVsdCBpbXBvcnQgbWFjaGluZXJ5LCB0aGV5IGFy
ZSBwcm9jZXNzZWQgYWZ0ZXIKaW1wb3J0LXJlbGF0ZWQgYXR0cmlidXRlcyBzcGVjaWZpZWQgaW4g
UEVQIDQ1MSBbI3BlcC0wNDUxLWF0dHJpYnV0ZXNdXwooc3VjaCBhcyBgYF9fbmFtZV9fYGAgb3Ig
YGBfX2xvYWRlcl9fYGApIGFyZSBzZXQgYW5kIHRoZSBtb2R1bGUgaXMgYWRkZWQKdG8gc3lzLm1v
ZHVsZXMuCgoKUHJlLUV4ZWN1dGlvbiBzdGVwcwouLi4uLi4uLi4uLi4uLi4uLi4uCgpCZWZvcmUg
cHJvY2Vzc2luZyB0aGUgZXhlY3V0aW9uIHNsb3RzLCBwZXItbW9kdWxlIHN0YXRlIGlzIGFsbG9j
YXRlZCBmb3IgdGhlCm1vZHVsZS4gRnJvbSB0aGlzIHBvaW50IG9uLCBwZXItbW9kdWxlIHN0YXRl
IGlzIGFjY2Vzc2libGUgdGhyb3VnaApQeU1vZHVsZV9HZXRTdGF0ZS4KCgpUaGUgUHlfbW9kX2V4
ZWMgc2xvdAouLi4uLi4uLi4uLi4uLi4uLi4uLgoKVGhlIGVudHJ5IGluIHRoaXMgc2xvdCBtdXN0
IHBvaW50IHRvIGEgZnVuY3Rpb24gd2l0aCB0aGUgZm9sbG93aW5nIHNpZ25hdHVyZTo6CgogICAg
aW50ICgqUHlNb2R1bGVFeGVjRnVuY3Rpb24pKFB5T2JqZWN0KiBtb2R1bGUpCgpJdCB3aWxsIGJl
IGNhbGxlZCB0byBpbml0aWFsaXplIGEgbW9kdWxlLiBVc3VhbGx5LCB0aGlzIGFtb3VudHMgdG8K
c2V0dGluZyB0aGUgbW9kdWxlJ3MgaW5pdGlhbCBhdHRyaWJ1dGVzLgpUaGUgIm1vZHVsZSIgYXJn
dW1lbnQgcmVjZWl2ZXMgdGhlIG1vZHVsZSBvYmplY3QgdG8gaW5pdGlhbGl6ZS4KClRoZSBmdW5j
dGlvbiBtdXN0IHJldHVybiBgYDBgYCBvbiBzdWNjZXNzLCBvciwgb24gZXJyb3IsIHNldCBhbiBl
eGNlcHRpb24gYW5kCnJldHVybiBgYC0xYGAuCgpJZiBQeU1vZHVsZUV4ZWMgcmVwbGFjZXMgdGhl
IG1vZHVsZSdzIGVudHJ5IGluIHN5cy5tb2R1bGVzLCB0aGUgbmV3IG9iamVjdAp3aWxsIGJlIHVz
ZWQgYW5kIHJldHVybmVkIGJ5IGltcG9ydGxpYiBtYWNoaW5lcnkgYWZ0ZXIgYWxsIGV4ZWN1dGlv
biBzbG90cwphcmUgcHJvY2Vzc2VkLiBUaGlzIGlzIGEgZmVhdHVyZSBvZiB0aGUgaW1wb3J0IG1h
Y2hpbmVyeSBpdHNlbGYuClRoZSBzbG90cyB0aGVtc2VsdmVzIGFyZSBhbGwgcHJvY2Vzc2VkIHVz
aW5nIHRoZSBtb2R1bGUgcmV0dXJuZWQgZnJvbSB0aGUKY3JlYXRpb24gcGhhc2U7IHN5cy5tb2R1
bGVzIGlzIG5vdCBjb25zdWx0ZWQgZHVyaW5nIHRoZSBleGVjdXRpb24gcGhhc2UuCihOb3RlIHRo
YXQgZm9yIGV4dGVuc2lvbiBtb2R1bGVzLCBpbXBsZW1lbnRpbmcgUHlfbW9kX2NyZWF0ZSBpcyB1
c3VhbGx5CmEgYmV0dGVyIHNvbHV0aW9uIGZvciB1c2luZyBjdXN0b20gbW9kdWxlIG9iamVjdHMu
KQoKCkxlZ2FjeSBJbml0Ci0tLS0tLS0tLS0tCgpUaGUgYmFja3dhcmRzLWNvbXBhdGlibGUgc2lu
Z2xlLXBoYXNlIGluaXRpYWxpemF0aW9uIGNvbnRpbnVlcyB0byBiZSBzdXBwb3J0ZWQuCkluIHRo
aXMgc2NoZW1lLCB0aGUgUHlJbml0IGZ1bmN0aW9uIHJldHVybnMgYSBmdWxseSBpbml0aWFsaXpl
ZCBtb2R1bGUgcmF0aGVyCnRoYW4gYSBQeU1vZHVsZURlZiBvYmplY3QuCkluIHRoaXMgY2FzZSwg
dGhlIFB5SW5pdCBob29rIGltcGxlbWVudHMgdGhlIGNyZWF0aW9uIHBoYXNlLCBhbmQgdGhlIGV4
ZWN1dGlvbgpwaGFzZSBpcyBhIG5vLW9wLgoKTW9kdWxlcyB0aGF0IG5lZWQgdG8gd29yayB1bmNo
YW5nZWQgb24gb2xkZXIgdmVyc2lvbnMgb2YgUHl0aG9uIHNob3VsZCBzdGljayB0bwpzaW5nbGUt
cGhhc2UgaW5pdGlhbGl6YXRpb24sIGJlY2F1c2UgdGhlIGJlbmVmaXRzIGl0IGJyaW5ncyBjYW4n
dCBiZQpiYWNrLXBvcnRlZC4KSGVyZSBpcyBhbiBleGFtcGxlIG9mIGEgbW9kdWxlIHRoYXQgc3Vw
cG9ydHMgbXVsdGktcGhhc2UgaW5pdGlhbGl6YXRpb24sCmFuZCBmYWxscyBiYWNrIHRvIHNpbmds
ZS1waGFzZSB3aGVuIGNvbXBpbGVkIGZvciBhbiBvbGRlciB2ZXJzaW9uIG9mIENQeXRob24uCkl0
IGlzIGluY2x1ZGVkIG1haW5seSBhcyBhbiBpbGx1c3RyYXRpb24gb2YgdGhlIGNoYW5nZXMgbmVl
ZGVkIHRvIGVuYWJsZQptdWx0aS1waGFzZSBpbml0OjoKCiAgICAjaW5jbHVkZSA8UHl0aG9uLmg+
CgogICAgc3RhdGljIGludCBzcGFtX2V4ZWMoUHlPYmplY3QgKm1vZHVsZSkgewogICAgICAgIFB5
TW9kdWxlX0FkZFN0cmluZ0NvbnN0YW50KG1vZHVsZSwgImZvb2QiLCAic3BhbSIpOwogICAgICAg
IHJldHVybiAwOwogICAgfQoKICAgICNpZmRlZiBQeV9tb2RfZXhlYwogICAgc3RhdGljIFB5TW9k
dWxlRGVmX1Nsb3Qgc3BhbV9zbG90c1tdID0gewogICAgICAgIHtQeV9tb2RfZXhlYywgc3BhbV9l
eGVjfSwKICAgICAgICB7MCwgTlVMTH0KICAgIH07CiAgICAjZW5kaWYKCiAgICBzdGF0aWMgUHlN
b2R1bGVEZWYgc3BhbV9kZWYgPSB7CiAgICAgICAgUHlNb2R1bGVEZWZfSEVBRF9JTklULCAgICAg
ICAgICAgICAgICAgICAgICAvKiBtX2Jhc2UgKi8KICAgICAgICAic3BhbSIsICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIC8qIG1fbmFtZSAqLwogICAgICAgIFB5RG9jX1NUUigi
VXRpbGl0aWVzIGZvciBjb29raW5nIHNwYW0iKSwgICAgLyogbV9kb2MgKi8KICAgICAgICAwLCAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIG1fc2l6ZSAqLwogICAg
ICAgIE5VTEwsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogbV9tZXRo
b2RzICovCiAgICAjaWZkZWYgUHlfbW9kX2V4ZWMKICAgICAgICBzcGFtX3Nsb3RzLCAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIC8qIG1fc2xvdHMgKi8KICAgICNlbHNlCiAgICAgICAg
TlVMTCwKICAgICNlbmRpZgogICAgICAgIE5VTEwsICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgLyogbV90cmF2ZXJzZSAqLwogICAgICAgIE5VTEwsICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgLyogbV9jbGVhciAqLwogICAgICAgIE5VTEwsICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogbV9mcmVlICovCiAgICB9OwoKICAg
IFB5TU9ESU5JVF9GVU5DCiAgICBQeUluaXRfc3BhbSh2b2lkKSB7CiAgICAjaWZkZWYgUHlfbW9k
X2V4ZWMKICAgICAgICByZXR1cm4gUHlNb2R1bGVEZWZfSW5pdCgmc3BhbV9kZWYpOwogICAgI2Vs
c2UKICAgICAgICBQeU9iamVjdCAqbW9kdWxlOwogICAgICAgIG1vZHVsZSA9IFB5TW9kdWxlX0Ny
ZWF0ZSgmc3BhbV9kZWYpOwogICAgICAgIGlmIChtb2R1bGUgPT0gTlVMTCkgcmV0dXJuIE5VTEw7
CiAgICAgICAgaWYgKHNwYW1fZXhlYyhtb2R1bGUpICE9IDApIHsKICAgICAgICAgICAgUHlfREVD
UkVGKG1vZHVsZSk7CiAgICAgICAgICAgIHJldHVybiBOVUxMOwogICAgICAgIH0KICAgICAgICBy
ZXR1cm4gbW9kdWxlOwogICAgI2VuZGlmCiAgICB9CgoKQnVpbHQtSW4gbW9kdWxlcwotLS0tLS0t
LS0tLS0tLS0tCgpBbnkgZXh0ZW5zaW9uIG1vZHVsZSBjYW4gYmUgdXNlZCBhcyBhIGJ1aWx0LWlu
IG1vZHVsZSBieSBsaW5raW5nIGl0IGludG8KdGhlIGV4ZWN1dGFibGUsIGFuZCBpbmNsdWRpbmcg
aXQgaW4gdGhlIGluaXR0YWIgKGVpdGhlciBhdCBydW50aW1lIHdpdGgKUHlJbXBvcnRfQXBwZW5k
SW5pdHRhYiwgb3IgYXQgY29uZmlndXJhdGlvbiB0aW1lLCB1c2luZyB0b29scyBsaWtlICpmcmVl
emUqKS4KClRvIGtlZXAgdGhpcyBwb3NzaWJpbGl0eSwgYWxsIGNoYW5nZXMgdG8gZXh0ZW5zaW9u
IG1vZHVsZSBsb2FkaW5nIGludHJvZHVjZWQKaW4gdGhpcyBQRVAgd2lsbCBhbHNvIGFwcGx5IHRv
IGJ1aWx0LWluIG1vZHVsZXMuClRoZSBvbmx5IGV4Y2VwdGlvbiBpcyBub24tQVNDSUkgbW9kdWxl
IG5hbWVzLCBleHBsYWluZWQgYmVsb3cuCgoKU3ViaW50ZXJwcmV0ZXJzIGFuZCBJbnRlcnByZXRl
ciBSZWxvYWRpbmcKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KCkV4
dGVuc2lvbnMgdXNpbmcgdGhlIG5ldyBpbml0aWFsaXphdGlvbiBzY2hlbWUgYXJlIGV4cGVjdGVk
IHRvIHN1cHBvcnQKc3ViaW50ZXJwcmV0ZXJzIGFuZCBtdWx0aXBsZSBQeV9Jbml0aWFsaXplL1B5
X0ZpbmFsaXplIGN5Y2xlcyBjb3JyZWN0bHksCmF2b2lkaW5nIHRoZSBpc3N1ZXMgbWVudGlvbmVk
IGluIFB5dGhvbiBkb2N1bWVudGF0aW9uIFsjc3ViaW50ZXJwcmV0ZXItZG9jc11fLgpUaGUgbWVj
aGFuaXNtIGlzIGRlc2lnbmVkIHRvIG1ha2UgdGhpcyBlYXN5LCBidXQgY2FyZSBpcyBzdGlsbCBy
ZXF1aXJlZApvbiB0aGUgcGFydCBvZiB0aGUgZXh0ZW5zaW9uIGF1dGhvci4KTm8gdXNlci1kZWZp
bmVkIGZ1bmN0aW9ucywgbWV0aG9kcywgb3IgaW5zdGFuY2VzIG1heSBsZWFrIHRvIGRpZmZlcmVu
dAppbnRlcnByZXRlcnMuClRvIGFjaGlldmUgdGhpcywgYWxsIG1vZHVsZS1sZXZlbCBzdGF0ZSBz
aG91bGQgYmUga2VwdCBpbiBlaXRoZXIgdGhlIG1vZHVsZQpkaWN0LCBvciBpbiB0aGUgbW9kdWxl
IG9iamVjdCdzIHN0b3JhZ2UgcmVhY2hhYmxlIGJ5IFB5TW9kdWxlX0dldFN0YXRlLgpBIHNpbXBs
ZSBydWxlIG9mIHRodW1iIGlzOiBEbyBub3QgZGVmaW5lIGFueSBzdGF0aWMgZGF0YSwgZXhjZXB0
IGJ1aWx0LWluIHR5cGVzCndpdGggbm8gbXV0YWJsZSBvciB1c2VyLXNldHRhYmxlIGNsYXNzIGF0
dHJpYnV0ZXMuCgoKRnVuY3Rpb25zIGluY29tcGF0aWJsZSB3aXRoIG11bHRpLXBoYXNlIGluaXRp
YWxpemF0aW9uCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLQoKVGhlIFB5TW9kdWxlX0NyZWF0ZSBmdW5jdGlvbiB3aWxsIGZhaWwgd2hlbiB1c2Vk
IG9uIGEgUHlNb2R1bGVEZWYgc3RydWN0dXJlCndpdGggYSBub24tTlVMTCAqbV9zbG90cyogcG9p
bnRlci4KVGhlIGZ1bmN0aW9uIGRvZXNuJ3QgaGF2ZSBhY2Nlc3MgdG8gdGhlIE1vZHVsZVNwZWMg
b2JqZWN0IG5lY2Vzc2FyeSBmb3IKbXVsdGktcGhhc2UgaW5pdGlhbGl6YXRpb24uCgpUaGUgUHlT
dGF0ZV9GaW5kTW9kdWxlIGZ1bmN0aW9uIHdpbGwgcmV0dXJuIE5VTEwsIGFuZCBQeVN0YXRlX0Fk
ZE1vZHVsZQphbmQgUHlTdGF0ZV9SZW1vdmVNb2R1bGUgd2lsbCBhbHNvIGZhaWwgb24gbW9kdWxl
cyB3aXRoIG5vbi1OVUxMICptX3Nsb3RzKi4KUHlTdGF0ZSByZWdpc3RyYXRpb24gaXMgZGlzYWJs
ZWQgYmVjYXVzZSBtdWx0aXBsZSBtb2R1bGUgb2JqZWN0cyBtYXkgYmUgY3JlYXRlZApmcm9tIHRo
ZSBzYW1lIFB5TW9kdWxlRGVmLgoKCk1vZHVsZSBzdGF0ZSBhbmQgQy1sZXZlbCBjYWxsYmFja3MK
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQoKRHVlIHRvIHRoZSB1bmF2YWlsYWJp
bGl0eSBvZiBQeVN0YXRlX0ZpbmRNb2R1bGUsIGFueSBmdW5jdGlvbiB0aGF0IG5lZWRzIGFjY2Vz
cwp0byBtb2R1bGUtbGV2ZWwgc3RhdGUgKGluY2x1ZGluZyBmdW5jdGlvbnMsIGNsYXNzZXMgb3Ig
ZXhjZXB0aW9ucyBkZWZpbmVkIGF0CnRoZSBtb2R1bGUgbGV2ZWwpIG11c3QgcmVjZWl2ZSBhIHJl
ZmVyZW5jZSB0byB0aGUgbW9kdWxlIG9iamVjdCAob3IgdGhlCnBhcnRpY3VsYXIgb2JqZWN0IGl0
IG5lZWRzKSwgZWl0aGVyIGRpcmVjdGx5IG9yIGluZGlyZWN0bHkuClRoaXMgaXMgY3VycmVudGx5
IGRpZmZpY3VsdCBpbiB0d28gc2l0dWF0aW9uczoKCiogTWV0aG9kcyBvZiBjbGFzc2VzLCB3aGlj
aCByZWNlaXZlIGEgcmVmZXJlbmNlIHRvIHRoZSBjbGFzcywgYnV0IG5vdCB0bwogIHRoZSBjbGFz
cydzIG1vZHVsZQoqIExpYnJhcmllcyB3aXRoIEMtbGV2ZWwgY2FsbGJhY2tzLCB1bmxlc3MgdGhl
IGNhbGxiYWNrcyBjYW4gcmVjZWl2ZSBjdXN0b20KICBkYXRhIHNldCBhdCBjYWxsYmFjayByZWdp
c3RyYXRpb24KCkZpeGluZyB0aGVzZSBjYXNlcyBpcyBvdXRzaWRlIG9mIHRoZSBzY29wZSBvZiB0
aGlzIFBFUCwgYnV0IHdpbGwgYmUgbmVlZGVkIGZvcgp0aGUgbmV3IG1lY2hhbmlzbSB0byBiZSB1
c2VmdWwgdG8gYWxsIG1vZHVsZXMuIFByb3BlciBmaXhlcyBoYXZlIGJlZW4gZGlzY3Vzc2VkCm9u
IHRoZSBpbXBvcnQtc2lnIG1haWxpbmcgbGlzdCBbI2ZpbmRtb2R1bGUtZGlzY3Vzc2lvbl1fLgoK
QXMgYSBydWxlIG9mIHRodW1iLCBtb2R1bGVzIHRoYXQgcmVseSBvbiBQeVN0YXRlX0ZpbmRNb2R1
bGUgYXJlLCBhdCB0aGUgbW9tZW50LApub3QgZ29vZCBjYW5kaWRhdGVzIGZvciBwb3J0aW5nIHRv
IHRoZSBuZXcgbWVjaGFuaXNtLgoKCk5ldyBGdW5jdGlvbnMKLS0tLS0tLS0tLS0tLQoKQSBuZXcg
ZnVuY3Rpb24gYW5kIG1hY3JvIGltcGxlbWVudGluZyB0aGUgbW9kdWxlIGNyZWF0aW9uIHBoYXNl
IHdpbGwgYmUgYWRkZWQuClRoZXNlIGFyZSBzaW1pbGFyIHRvIFB5TW9kdWxlX0NyZWF0ZSBhbmQg
UHlNb2R1bGVfQ3JlYXRlMiwgZXhjZXB0IHRoZXkKdGFrZSBhbiBhZGRpdGlvbmFsIE1vZHVsZVNw
ZWMgYXJndW1lbnQsIGFuZCBoYW5kbGUgbW9kdWxlIGRlZmluaXRpb25zIHdpdGgKbm9uLU5VTEwg
c2xvdHM6OgoKICAgIFB5T2JqZWN0ICogUHlNb2R1bGVfRnJvbURlZkFuZFNwZWMoUHlNb2R1bGVE
ZWYgKmRlZiwgUHlPYmplY3QgKnNwZWMpCiAgICBQeU9iamVjdCAqIFB5TW9kdWxlX0Zyb21EZWZB
bmRTcGVjMihQeU1vZHVsZURlZiAqZGVmLCBQeU9iamVjdCAqc3BlYywKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGludCBtb2R1bGVfYXBpX3ZlcnNpb24pCgpBIG5ldyBm
dW5jdGlvbiBpbXBsZW1lbnRpbmcgdGhlIG1vZHVsZSBleGVjdXRpb24gcGhhc2Ugd2lsbCBiZSBh
ZGRlZC4KVGhpcyBhbGxvY2F0ZXMgcGVyLW1vZHVsZSBzdGF0ZSAoaWYgbm90IGFsbG9jYXRlZCBh
bHJlYWR5KSwgYW5kICphbHdheXMqCnByb2Nlc3NlcyBleGVjdXRpb24gc2xvdHMuIFRoZSBpbXBv
cnQgbWFjaGluZXJ5IGNhbGxzIHRoaXMgbWV0aG9kIHdoZW4KYSBtb2R1bGUgaXMgZXhlY3V0ZWQs
IHVubGVzcyB0aGUgbW9kdWxlIGlzIGJlaW5nIHJlbG9hZGVkOjoKCiAgICBQeUFQSV9GVU5DKGlu
dCkgUHlNb2R1bGVfRXhlY0RlZihQeU9iamVjdCAqbW9kdWxlLCBQeU1vZHVsZURlZiAqZGVmKQoK
QW5vdGhlciBmdW5jdGlvbiB3aWxsIGJlIGludHJvZHVjZWQgdG8gaW5pdGlhbGl6ZSBhIFB5TW9k
dWxlRGVmIG9iamVjdC4KVGhpcyBpZGVtcG90ZW50IGZ1bmN0aW9uIGZpbGxzIGluIHRoZSB0eXBl
LCByZWZjb3VudCwgYW5kIG1vZHVsZSBpbmRleC4KSXQgcmV0dXJucyBpdHMgYXJndW1lbnQgY2Fz
dCB0byBQeU9iamVjdCosIHNvIGl0IGNhbiBiZSByZXR1cm5lZCBkaXJlY3RseQpmcm9tIGEgUHlJ
bml0IGZ1bmN0aW9uOjoKCiAgICBQeU9iamVjdCAqIFB5TW9kdWxlRGVmX0luaXQoUHlNb2R1bGVE
ZWYgKik7CgpBZGRpdGlvbmFsbHksIHR3byBoZWxwZXJzIHdpbGwgYmUgYWRkZWQgZm9yIHNldHRp
bmcgdGhlIGRvY3N0cmluZyBhbmQKbWV0aG9kcyBvbiBhIG1vZHVsZTo6CgogICAgaW50IFB5TW9k
dWxlX1NldERvY1N0cmluZyhQeU9iamVjdCAqLCBjb25zdCBjaGFyICopCiAgICBpbnQgUHlNb2R1
bGVfQWRkRnVuY3Rpb25zKFB5T2JqZWN0ICosIFB5TWV0aG9kRGVmICopCgoKRXhwb3J0IEhvb2sg
TmFtZQotLS0tLS0tLS0tLS0tLS0tCgpBcyBwb3J0YWJsZSBDIGlkZW50aWZpZXJzIGFyZSBsaW1p
dGVkIHRvIEFTQ0lJLCBtb2R1bGUgbmFtZXMKbXVzdCBiZSBlbmNvZGVkIHRvIGZvcm0gdGhlIFB5
SW5pdCBob29rIG5hbWUuCgpGb3IgQVNDSUkgbW9kdWxlIG5hbWVzLCB0aGUgaW1wb3J0IGhvb2sg
aXMgbmFtZWQKUHlJbml0Xzxtb2R1bGVuYW1lPiwgd2hlcmUgPG1vZHVsZW5hbWU+IGlzIHRoZSBu
YW1lIG9mIHRoZSBtb2R1bGUuCgpGb3IgbW9kdWxlIG5hbWVzIGNvbnRhaW5pbmcgbm9uLUFTQ0lJ
IGNoYXJhY3RlcnMsIHRoZSBpbXBvcnQgaG9vayBpcyBuYW1lZApQeUluaXRVXzxlbmNvZGVkbmFt
ZT4sIHdoZXJlIHRoZSBuYW1lIGlzIGVuY29kZWQgdXNpbmcgQ1B5dGhvbidzCiJwdW55Y29kZSIg
ZW5jb2RpbmcgKFB1bnljb2RlIFsjcmZjLTM0OTJdXyB3aXRoIGEgbG93ZXJjYXNlIHN1ZmZpeCks
CndpdGggaHlwaGVucyAoIi0iKSByZXBsYWNlZCBieSB1bmRlcnNjb3JlcyAoIl8iKS4KCgpJbiBQ
eXRob246OgoKICAgIGRlZiBleHBvcnRfaG9va19uYW1lKG5hbWUpOgogICAgICAgIHRyeToKICAg
ICAgICAgICAgc3VmZml4ID0gYidfJyArIG5hbWUuZW5jb2RlKCdhc2NpaScpCiAgICAgICAgZXhj
ZXB0IFVuaWNvZGVFbmNvZGVFcnJvcjoKICAgICAgICAgICAgc3VmZml4ID0gYidVXycgKyBuYW1l
LmVuY29kZSgncHVueWNvZGUnKS5yZXBsYWNlKGInLScsIGInXycpCiAgICAgICAgcmV0dXJuIGIn
UHlJbml0JyArIHN1ZmZpeAoKRXhhbXBsZXM6Cgo9PT09PT09PT09PT09ICA9PT09PT09PT09PT09
PT09PT09Ck1vZHVsZSBuYW1lICAgIEluaXQgaG9vayBuYW1lCj09PT09PT09PT09PT0gID09PT09
PT09PT09PT09PT09PT0Kc3BhbSAgICAgICAgICAgUHlJbml0X3NwYW0KbGFuxI1tw610ICAgICAg
ICBQeUluaXRVX2xhbm10XzJzYTZ0CuOCueODkeODoCAgICAgICAgICBQeUluaXRVX3pjazViMmIK
PT09PT09PT09PT09PSAgPT09PT09PT09PT09PT09PT09PQoKRm9yIG1vZHVsZXMgd2l0aCBub24t
QVNDSUkgbmFtZXMsIHNpbmdsZS1waGFzZSBpbml0aWFsaXphdGlvbiBpcyBub3Qgc3VwcG9ydGVk
LgoKSW4gdGhlIGluaXRpYWwgaW1wbGVtZW50YXRpb24gb2YgdGhpcyBQRVAsIGJ1aWx0LWluIG1v
ZHVsZXMgd2l0aCBub24tQVNDSUkKbmFtZXMgd2lsbCBub3QgYmUgc3VwcG9ydGVkLgoKCk1vZHVs
ZSBSZWxvYWRpbmcKLS0tLS0tLS0tLS0tLS0tLQoKUmVsb2FkaW5nIGFuIGV4dGVuc2lvbiBtb2R1
bGUgdXNpbmcgaW1wb3J0bGliLnJlbG9hZCgpIHdpbGwgY29udGludWUgdG8KaGF2ZSBubyBlZmZl
Y3QsIGV4Y2VwdCByZS1zZXR0aW5nIGltcG9ydC1yZWxhdGVkIGF0dHJpYnV0ZXMuCgpEdWUgdG8g
bGltaXRhdGlvbnMgaW4gc2hhcmVkIGxpYnJhcnkgbG9hZGluZyAoYm90aCBkbG9wZW4gb24gUE9T
SVggYW5kCkxvYWRNb2R1bGVFeCBvbiBXaW5kb3dzKSwgaXQgaXMgbm90IGdlbmVyYWxseSBwb3Nz
aWJsZSB0byBsb2FkCmEgbW9kaWZpZWQgbGlicmFyeSBhZnRlciBpdCBoYXMgY2hhbmdlZCBvbiBk
aXNrLgoKVXNlIGNhc2VzIGZvciByZWxvYWRpbmcgb3RoZXIgdGhhbiB0cnlpbmcgb3V0IGEgbmV3
IHZlcnNpb24gb2YgdGhlIG1vZHVsZQphcmUgdG9vIHJhcmUgdG8gcmVxdWlyZSBhbGwgbW9kdWxl
IGF1dGhvcnMgdG8ga2VlcCByZWxvYWRpbmcgaW4gbWluZC4KSWYgcmVsb2FkLWxpa2UgZnVuY3Rp
b25hbGl0eSBpcyBuZWVkZWQsIGF1dGhvcnMgY2FuIGV4cG9ydCBhIGRlZGljYXRlZApmdW5jdGlv
biBmb3IgaXQuCgoKTXVsdGlwbGUgbW9kdWxlcyBpbiBvbmUgbGlicmFyeQotLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tCgpUbyBzdXBwb3J0IG11bHRpcGxlIFB5dGhvbiBtb2R1bGVzIGlu
IG9uZSBzaGFyZWQgbGlicmFyeSwgdGhlIGxpYnJhcnkgY2FuCmV4cG9ydCBhZGRpdGlvbmFsIFB5
SW5pdCogc3ltYm9scyBiZXNpZGVzIHRoZSBvbmUgdGhhdCBjb3JyZXNwb25kcwp0byB0aGUgbGli
cmFyeSdzIGZpbGVuYW1lLgoKTm90ZSB0aGF0IHRoaXMgbWVjaGFuaXNtIGNhbiBjdXJyZW50bHkg
b25seSBiZSB1c2VkIHRvICpsb2FkKiBleHRyYSBtb2R1bGVzLApidXQgbm90IHRvICpmaW5kKiB0
aGVtLiAoVGhpcyBpcyBhIGxpbWl0YXRpb24gb2YgdGhlIGxvYWRlciBtZWNoYW5pc20sCndoaWNo
IHRoaXMgUEVQIGRvZXMgbm90IHRyeSB0byBtb2RpZnkuKQpUbyB3b3JrIGFyb3VuZCB0aGUgbGFj
ayBvZiBhIHN1aXRhYmxlIGZpbmRlciwgY29kZSBsaWtlIHRoZSBmb2xsb3dpbmcKY2FuIGJlIHVz
ZWQ6OgoKICAgIGltcG9ydCBpbXBvcnRsaWIubWFjaGluZXJ5CiAgICBpbXBvcnQgaW1wb3J0bGli
LnV0aWwKICAgIGxvYWRlciA9IGltcG9ydGxpYi5tYWNoaW5lcnkuRXh0ZW5zaW9uRmlsZUxvYWRl
cihuYW1lLCBwYXRoKQogICAgc3BlYyA9IGltcG9ydGxpYi51dGlsLnNwZWNfZnJvbV9sb2FkZXIo
bmFtZSwgbG9hZGVyKQogICAgbW9kdWxlID0gaW1wb3J0bGliLnV0aWwubW9kdWxlX2Zyb21fc3Bl
YyhzcGVjKQogICAgbG9hZGVyLmV4ZWNfbW9kdWxlKG1vZHVsZSkKICAgIHJldHVybiBtb2R1bGUK
Ck9uIHBsYXRmb3JtcyB0aGF0IHN1cHBvcnQgc3ltYm9saWMgbGlua3MsIHRoZXNlIG1heSBiZSB1
c2VkIHRvIGluc3RhbGwgb25lCmxpYnJhcnkgdW5kZXIgbXVsdGlwbGUgbmFtZXMsIGV4cG9zaW5n
IGFsbCBleHBvcnRlZCBtb2R1bGVzIHRvIG5vcm1hbAppbXBvcnQgbWFjaGluZXJ5LgoKClRlc3Rp
bmcgYW5kIGluaXRpYWwgaW1wbGVtZW50YXRpb25zCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tCgpGb3IgdGVzdGluZywgYSBuZXcgYnVpbHQtaW4gbW9kdWxlIGBgX3Rlc3RtdWx0
aXBoYXNlYGAgd2lsbCBiZSBjcmVhdGVkLgpUaGUgbGlicmFyeSB3aWxsIGV4cG9ydCBzZXZlcmFs
IGFkZGl0aW9uYWwgbW9kdWxlcyB1c2luZyB0aGUgbWVjaGFuaXNtCmRlc2NyaWJlZCBpbiAiTXVs
dGlwbGUgbW9kdWxlcyBpbiBvbmUgbGlicmFyeSIuCgpUaGUgYGBfdGVzdGNhcGlgYCBtb2R1bGUg
d2lsbCBiZSB1bmNoYW5nZWQsIGFuZCB3aWxsIHVzZSBzaW5nbGUtcGhhc2UKaW5pdGlhbGl6YXRp
b24gaW5kZWZpbml0ZWx5IChvciB1bnRpbCBpdCBpcyBubyBsb25nZXIgc3VwcG9ydGVkKS4KClRo
ZSBgYGFycmF5YGAgYW5kIGBgeHgqYGAgbW9kdWxlcyB3aWxsIGJlIGNvbnZlcnRlZCB0byB1c2Ug
bXVsdGktcGhhc2UKaW5pdGlhbGl6YXRpb24gYXMgcGFydCBvZiB0aGUgaW5pdGlhbCBpbXBsZW1l
bnRhdGlvbi4KCgpTdW1tYXJ5IG9mIEFQSSBDaGFuZ2VzIGFuZCBBZGRpdGlvbnMKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09CgpOZXcgZnVuY3Rpb25zOgoKKiBQeU1vZHVsZV9G
cm9tRGVmQW5kU3BlYyAobWFjcm8pCiogUHlNb2R1bGVfRnJvbURlZkFuZFNwZWMyCiogUHlNb2R1
bGVfRXhlY0RlZgoqIFB5TW9kdWxlX1NldERvY1N0cmluZwoqIFB5TW9kdWxlX0FkZEZ1bmN0aW9u
cwoqIFB5TW9kdWxlRGVmX0luaXQKCk5ldyBtYWNyb3M6CgoqIFB5X21vZF9jcmVhdGUKKiBQeV9t
b2RfZXhlYwoKTmV3IHR5cGVzOgoKKiBQeU1vZHVsZURlZl9UeXBlIHdpbGwgYmUgZXhwb3NlZAoK
TmV3IHN0cnVjdHVyZXM6CgoqIFB5TW9kdWxlRGVmX1Nsb3QKClB5TW9kdWxlRGVmLm1fcmVsb2Fk
IGNoYW5nZXMgdG8gUHlNb2R1bGVEZWYubV9zbG90cy4KClRoZSBpbnRlcm5hbCBgYF9pbXBgYCBt
b2R1bGUgd2lsbCBoYXZlIGJhY2t3YXJkcyBpbmNvbXBhdGlibGUgY2hhbmdlczoKYGBjcmVhdGVf
YnVpbHRpbmBgLCBgYGNyZWF0ZV9keW5hbWljYGAsIGFuZCBgYGV4ZWNfZHluYW1pY2BgIHdpbGwg
YmUgYWRkZWQ7CmBgaW5pdF9idWlsdGluYGAsIGBgbG9hZF9keW5hbWljYGAgd2lsbCBiZSByZW1v
dmVkLgoKVGhlIHVuZG9jdW1lbnRlZCBmdW5jdGlvbnMgYGBpbXAubG9hZF9keW5hbWljYGAgYW5k
IGBgaW1wLmluaXRfYnVpbHRpbmBgIHdpbGwKYmUgcmVwbGFjZWQgYnkgYmFja3dhcmRzLWNvbXBh
dGlibGUgc2hpbXMuCgoKQmFja3dhcmRzIENvbXBhdGliaWxpdHkKLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0KCkV4aXN0aW5nIG1vZHVsZXMgd2lsbCBjb250aW51ZSB0byBiZSBzb3VyY2UtIGFuZCBi
aW5hcnktY29tcGF0aWJsZSB3aXRoIG5ldwp2ZXJzaW9ucyBvZiBQeXRob24uCk1vZHVsZXMgdGhh
dCB1c2UgbXVsdGktcGhhc2UgaW5pdGlhbGl6YXRpb24gd2lsbCBub3QgYmUgY29tcGF0aWJsZSB3
aXRoCnZlcnNpb25zIG9mIFB5dGhvbiB0aGF0IGRvIG5vdCBpbXBsZW1lbnQgdGhpcyBQRVAuCgpU
aGUgZnVuY3Rpb25zIGBgaW5pdF9idWlsdGluYGAgYW5kIGBgbG9hZF9keW5hbWljYGAgd2lsbCBi
ZSByZW1vdmVkIGZyb20KdGhlIGBgX2ltcGBgIG1vZHVsZSAoYnV0IG5vdCBmcm9tIHRoZSBgYGlt
cGBgIG1vZHVsZSkuCgpBbGwgY2hhbmdlZCBsb2FkZXJzIChgYEJ1aWx0aW5JbXBvcnRlcmBgIGFu
ZCBgYEV4dGVuc2lvbkZpbGVMb2FkZXJgYCkgd2lsbApyZW1haW4gYmFja3dhcmRzLWNvbXBhdGli
bGU7IHRoZSBgYGxvYWRfbW9kdWxlYGAgbWV0aG9kIHdpbGwgYmUgcmVwbGFjZWQgYnkKYSBzaGlt
LgoKSW50ZXJuYWwgZnVuY3Rpb25zIG9mIFB5dGhvbi9pbXBvcnQuYyBhbmQgUHl0aG9uL2ltcG9y
dGRsLmMgd2lsbCBiZSByZW1vdmVkLgooU3BlY2lmaWNhbGx5LCB0aGVzZSBhcmUgYGBfUHlJbXBv
cnRfR2V0RHluTG9hZEZ1bmNgYCwKYGBfUHlJbXBvcnRfR2V0RHluTG9hZFdpbmRvd3NgYCwgYW5k
IGBgX1B5SW1wb3J0X0xvYWREeW5hbWljTW9kdWxlYGAuKQoKClBvc3NpYmxlIEZ1dHVyZSBFeHRl
bnNpb25zCj09PT09PT09PT09PT09PT09PT09PT09PT09CgpUaGUgc2xvdHMgbWVjaGFuaXNtLCBp
bnNwaXJlZCBieSBQeVR5cGVfU2xvdCBmcm9tIFBFUCAzODQsCmFsbG93cyBsYXRlciBleHRlbnNp
b25zLgoKU29tZSBleHRlbnNpb24gbW9kdWxlcyBleHBvcnRzIG1hbnkgY29uc3RhbnRzOyBmb3Ig
ZXhhbXBsZSBfc3NsIGhhcwphIGxvbmcgbGlzdCBvZiBjYWxscyBpbiB0aGUgZm9ybTo6CgogICAg
UHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIlNTTF9FUlJPUl9aRVJPX1JFVFVSTiIsCiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBQWV9TU0xfRVJST1JfWkVST19SRVRVUk4pOwoKQ29udmVy
dGluZyB0aGlzIHRvIGEgZGVjbGFyYXRpdmUgbGlzdCwgc2ltaWxhciB0byBQeU1ldGhvZERlZiwK
d291bGQgcmVkdWNlIGJvaWxlcnBsYXRlLCBhbmQgcHJvdmlkZSBmcmVlIGVycm9yLWNoZWNraW5n
IHdoaWNoCmlzIG9mdGVuIG1pc3NpbmcuCgpTdHJpbmcgY29uc3RhbnRzIGFuZCB0eXBlcyBjYW4g
YmUgaGFuZGxlZCBzaW1pbGFybHkuCihOb3RlIHRoYXQgbm9uLWRlZmF1bHQgYmFzZXMgZm9yIHR5
cGVzIGNhbm5vdCBiZSBwb3J0YWJseSBzcGVjaWZpZWQKc3RhdGljYWxseTsgdGhpcyBjYXNlIHdv
dWxkIG5lZWQgYSBQeV9tb2RfZXhlYyBmdW5jdGlvbiB0aGF0IHJ1bnMKYmVmb3JlIHRoZSBzbG90
cyBhcmUgYWRkZWQuIFRoZSBmcmVlIGVycm9yLWNoZWNraW5nIHdvdWxkIHN0aWxsIGJlCmJlbmVm
aWNpYWwsIHRob3VnaC4pCgpBbm90aGVyIHBvc3NpYmlsaXR5IGlzIHByb3ZpZGluZyBhICJtYWlu
IiBmdW5jdGlvbiB0aGF0IHdvdWxkIGJlIHJ1bgp3aGVuIHRoZSBtb2R1bGUgaXMgZ2l2ZW4gdG8g
UHl0aG9uJ3MgLW0gc3dpdGNoLgpGb3IgdGhpcyB0byB3b3JrLCB0aGUgcnVucHkgbW9kdWxlIHdp
bGwgbmVlZCB0byBiZSBtb2RpZmllZCB0byB0YWtlCmFkdmFudGFnZSBvZiBNb2R1bGVTcGVjLWJh
c2VkIGxvYWRpbmcgaW50cm9kdWNlZCBpbiBQRVAgNDUxLgpBbHNvLCBpdCB3aWxsIGJlIG5lY2Vz
c2FyeSB0byBhZGQgYSBtZWNoYW5pc20gZm9yIHNldHRpbmcgdXAgYSBtb2R1bGUKYWNjb3JkaW5n
IHRvIHNsb3RzIGl0IHdhc24ndCBvcmlnaW5hbGx5IGRlZmluZWQgd2l0aC4KCgpJbXBsZW1lbnRh
dGlvbgo9PT09PT09PT09PT09PQoKV29yay1pbi1wcm9ncmVzcyBpbXBsZW1lbnRhdGlvbiBpcyBh
dmFpbGFibGUgaW4gYSBHaXRodWIgcmVwb3NpdG9yeSBbI2doLXJlcG9dXzsKYSBwYXRjaHNldCBp
cyBhdCBbI2doLXBhdGNoXV8uCgoKUHJldmlvdXMgQXBwcm9hY2hlcwo9PT09PT09PT09PT09PT09
PT09CgpTdGVmYW4gQmVobmVsJ3MgaW5pdGlhbCBwcm90by1QRVAgWyNzdGVmYW5zX3Byb3RvcGVw
XV8KaGFkIGEgIlB5SW5pdF9tb2R1bGVuYW1lIiBob29rIHRoYXQgd291bGQgY3JlYXRlIGEgbW9k
dWxlIGNsYXNzLAp3aG9zZSBgYF9faW5pdF9fYGAgd291bGQgYmUgdGhlbiBjYWxsZWQgdG8gY3Jl
YXRlIHRoZSBtb2R1bGUuClRoaXMgcHJvcG9zYWwgZGlkIG5vdCBjb3JyZXNwb25kIHRvIHRoZSAo
dGhlbiBub25leGlzdGVudCkgUEVQIDQ1MSwKd2hlcmUgbW9kdWxlIGNyZWF0aW9uIGFuZCBpbml0
aWFsaXphdGlvbiBpcyBicm9rZW4gaW50byBkaXN0aW5jdCBzdGVwcy4KSXQgYWxzbyBkaWQgbm90
IHN1cHBvcnQgbG9hZGluZyBhbiBleHRlbnNpb24gaW50byBwcmUtZXhpc3RpbmcgbW9kdWxlIG9i
amVjdHMuCgpOaWNrIENvZ2hsYW4gcHJvcG9zZWQgIkNyZWF0ZSIgYW5kICJFeGVjIiBob29rcywg
YW5kIHdyb3RlIGEgcHJvdG90eXBlCmltcGxlbWVudGF0aW9uIFsjbmlja3MtcHJvdG90eXBlXV8u
CkF0IHRoaXMgdGltZSBQRVAgNDUxIHdhcyBzdGlsbCBub3QgaW1wbGVtZW50ZWQsIHNvIHRoZSBw
cm90b3R5cGUKZG9lcyBub3QgdXNlIE1vZHVsZVNwZWMuCgpUaGUgb3JpZ2luYWwgdmVyc2lvbiBv
ZiB0aGlzIFBFUCB1c2VkIENyZWF0ZSBhbmQgRXhlYyBob29rcywgYW5kIGFsbG93ZWQKbG9hZGlu
ZyBpbnRvIGFyYml0cmFyeSBwcmUtY29uc3RydWN0ZWQgb2JqZWN0cyB3aXRoIEV4ZWMgaG9vay4K
VGhlIHByb3Bvc2FsIG1hZGUgZXh0ZW5zaW9uIG1vZHVsZSBpbml0aWFsaXphdGlvbiBjbG9zZXIg
dG8gaG93IFB5dGhvbiBtb2R1bGVzCmFyZSBpbml0aWFsaXplZCwgYnV0IGl0IHdhcyBsYXRlciBy
ZWNvZ25pemVkIHRoYXQgdGhpcyBpc24ndCBhbiBpbXBvcnRhbnQgZ29hbC4KVGhlIGN1cnJlbnQg
UEVQIGRlc2NyaWJlcyBhIHNpbXBsZXIgc29sdXRpb24uCgpBIGZ1cnRoZXIgaXRlcmF0aW9uIHVz
ZWQgYSAiUHlNb2R1bGVFeHBvcnQiIGhvb2sgYXMgYW4gYWx0ZXJuYXRpdmUgdG8gUHlJbml0LAp3
aGVyZSBQeUluaXQgd2FzIHVzZWQgZm9yIGV4aXN0aW5nIHNjaGVtZSwgYW5kIFB5TW9kdWxlRXhw
b3J0IGZvciBtdWx0aS1waGFzZS4KSG93ZXZlciwgbm90IGJlaW5nIGFibGUgdG8gZGV0ZXJtaW5l
IHRoZSBob29rIG5hbWUgYmFzZWQgb24gbW9kdWxlIG5hbWUKY29tcGxpY2F0ZWQgYXV0b21hdGlj
IGdlbmVyYXRpb24gb2YgUHlJbXBvcnRfSW5pdHRhYiBieSB0b29scyBsaWtlIGZyZWV6ZS4KS2Vl
cGluZyBvbmx5IHRoZSBQeUluaXQgaG9vayBuYW1lLCBldmVuIGlmIGl0J3Mgbm90IGVudGlyZWx5
IGFwcHJvcHJpYXRlIGZvcgpleHBvcnRpbmcgYSBkZWZpbml0aW9uLCB5aWVsZGVkIGEgbXVjaCBz
aW1wbGVyIHNvbHV0aW9uLgoKClJlZmVyZW5jZXMKPT09PT09PT09PQoKLi4gWyNwZXAtMDQ1MS1h
dHRyaWJ1dGVzXQogICBodHRwczovL3d3dy5weXRob24ub3JnL2Rldi9wZXBzL3BlcC0wNDUxLyNh
dHRyaWJ1dGVzCgouLiBbI3N0ZWZhbnNfcHJvdG9wZXBdCiAgIGh0dHBzOi8vbWFpbC5weXRob24u
b3JnL3BpcGVybWFpbC9weXRob24tZGV2LzIwMTMtQXVndXN0LzEyODA4Ny5odG1sCgouLiBbI25p
Y2tzLXByb3RvdHlwZV0KICAgaHR0cHM6Ly9tYWlsLnB5dGhvbi5vcmcvcGlwZXJtYWlsL3B5dGhv
bi1kZXYvMjAxMy1BdWd1c3QvMTI4MTAxLmh0bWwKCi4uIFsjcmZjLTM0OTJdCiAgIGh0dHA6Ly90
b29scy5pZXRmLm9yZy9odG1sL3JmYzM0OTIKCi4uIFsjZ2gtcmVwb10KICAgaHR0cHM6Ly9naXRo
dWIuY29tL2VuY3Vrb3UvY3B5dGhvbi9jb21taXRzL3BlcDQ4OQoKLi4gWyNnaC1wYXRjaF0KICAg
aHR0cHM6Ly9naXRodWIuY29tL2VuY3Vrb3UvY3B5dGhvbi9jb21wYXJlL21hc3Rlci4uLmVuY3Vr
b3U6cGVwNDg5LnBhdGNoCgouLiBbI2ZpbmRtb2R1bGUtZGlzY3Vzc2lvbl0KICAgaHR0cHM6Ly9t
YWlsLnB5dGhvbi5vcmcvcGlwZXJtYWlsL2ltcG9ydC1zaWcvMjAxNS1BcHJpbC8wMDA5NTkuaHRt
bAoKLi4gWyNwZXAtMDQ1MS1sb2FkaW5nXQogICBodHRwczovL3d3dy5weXRob24ub3JnL2Rldi9w
ZXBzL3BlcC0wNDUxLyNob3ctbG9hZGluZy13aWxsLXdvcmtdCgouLiBbI3N1YmludGVycHJldGVy
LWRvY3NdCiAgIGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvYy1hcGkvaW5pdC5odG1sI3N1Yi1p
bnRlcnByZXRlci1zdXBwb3J0CgoKQ29weXJpZ2h0Cj09PT09PT09PQoKVGhpcyBkb2N1bWVudCBo
YXMgYmVlbiBwbGFjZWQgaW4gdGhlIHB1YmxpYyBkb21haW4uCl9fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fCkltcG9ydC1TSUcgbWFpbGluZyBsaXN0CkltcG9y
dC1TSUdAcHl0aG9uLm9yZwpodHRwczovL21haWwucHl0aG9uLm9yZy9tYWlsbWFuL2xpc3RpbmZv
L2ltcG9ydC1zaWcK