RFC - Tk::DualLists
Todd Littlefield <[email protected]> Thu, 11 Oct 2007 09:46:44 -0400
| Newsgroups | gmane.comp.lang.perl.tk |
|---|---|
| Message-ID | <[email protected]> |
This is a multi-part message in MIME format.
--------------040603050507060901020609
Content-Type: text/plain; charset=ISO-8859-1; format=flowed
Content-Transfer-Encoding: 7bit
Hello,
I recently had need to implement two list widgets with
the ability to move items between them. There didn't seem
to be a comparable widget out on CPAN. So, rather than just
put the code in the script, it was made into a module.
It is attached with a test program as well. The main pieces
are there. A couple of small issues like custom sorting
of the lists, allowing duplicate entries, etc. need to be
implemented to make it more flexible. Also the ability to
display a widget allowing the user to add items without
needing to write extra code would be nice.
If any of the more knowledgeable Tk hackers would care to
comment, I'd appreciate it. Tips, pointers, suggestions and
even gentle flames welcome... If you have any serious flaming
to do, please wait until December or January. The additional
heat will be welcome in the New England weather ;-)
Thanks in advance.
- Todd
--------------040603050507060901020609
Content-Type: text/plain;
name="TestDualLists.pl"
Content-Transfer-Encoding: base64
Content-Disposition: inline;
filename="TestDualLists.pl"
IyEvdXNyL2Jpbi9wZXJsIC13DQoNCnVzZSBzdHJpY3Q7DQoNCnVzZSBUazsNCnVzZSBUazo6
RHVhbExpc3RzOw0KDQojIENyZWF0ZSB0aGUgbWFpbiB3aW5kb3cgb2JqZWN0Li4uIGFsbCBv
dGhlcnMgYXJlIGNyZWF0ZWQgZnJvbSB0aGlzLi4uDQp1c2UgdmFycyBxdyggJXdpZGdldHMg
KTsNCg0KJHdpZGdldHN7J01XJ30gPSBNYWluV2luZG93LT5uZXcoICk7DQokd2lkZ2V0c3sn
TVcnfS0+dGl0bGUoICJUZXN0IER1YWwgTGlzdHMiICk7DQokd2lkZ2V0c3snTVcnfS0+Zm9j
dXNGb2xsb3dzTW91c2U7DQokd2lkZ2V0c3snTVcnfS0+bWluc2l6ZSggNjQwLCA0ODAgKTsN
Cg0KDQpteSBAbGlzdHZhcmlhYmxlID0gKCdvbmUnLCAndHdvJywgJ3RocmVlJywgJ2ZvdXIn
LCAnZml2ZScsICdzaXgnKTsNCm15IEBkZWZhdWx0cyAgICAgPSAoJ2FscGhhJywgJ2JyYXZv
JywgJ2NoYXJsaWUnLCAnZGVsdGEnKTsNCiR3aWRnZXRzeydkdWFsbGlzdCd9ID0gJHdpZGdl
dHN7J01XJ30tPkR1YWxMaXN0cygNCiAgICAtZGVidWcgID0+IDEsDQogICAgLWhlaWdodCA9
PiAyMCwNCiAgICAtd2lkdGggID0+IDE1LA0KICAgIC1mZyAgICAgPT4gJ25hdnknLA0KICAg
IC1iZyAgICAgPT4gJ2xpZ2h0eWVsbG93JywNCiAgICAtYWN0aXZlc3R5bGUgPT4gJ2RvdGJv
eCcsDQogICAgLWxpc3R2YXJpYWJsZSA9PiBcQGxpc3R2YXJpYWJsZSwNCiAgICAtZGVmYXVs
dHMgICAgID0+IFxAZGVmYXVsdHMsDQogICAgKS0+cGFjaygtc2lkZSA9PiAndG9wJywgLWV4
cGFuZCA9PiAxLCAtZmlsbCA9PiAnYm90aCcpOw0KICAgIA0KbXkgJGJvdHRvbUZyYW1lID0g
JHdpZGdldHN7J01XJ30tPkZyYW1lKCktPnBhY2soIC1zaWRlID0+ICdib3R0b20nICk7DQoN
CiR3aWRnZXRzeydwcmludENvbnRlbnRzJ30gPSAkYm90dG9tRnJhbWUtPkJ1dHRvbigNCiAg
ICAtY29tbWFuZCA9PiBbIFwmR2V0Q29udGVudHMgXSwNCiAgICAtdGV4dCAgICA9PiAiR2V0
IENvbnRlbnRzIiwNCiAgICApLT5wYWNrKCAtc2lkZSA9PiAnbGVmdCcsIC1wYWR4ID0+IDIw
LCk7DQogICAgDQokd2lkZ2V0c3snYWRkQ29udGVudHMnfSA9ICRib3R0b21GcmFtZS0+QnV0
dG9uKA0KICAgIC1jb21tYW5kID0+IFsgXCZBZGRDb250ZW50cyBdLA0KICAgIC10ZXh0ICAg
ID0+ICJBZGQgQ29udGVudHMiLA0KICAgICktPnBhY2soIC1zaWRlID0+ICdsZWZ0JywgLXBh
ZHggPT4gMjAsKTsNCg0KJHdpZGdldHN7J2RlbENvbnRlbnRzJ30gPSAkYm90dG9tRnJhbWUt
PkJ1dHRvbigNCiAgICAtY29tbWFuZCA9PiBbIFwmRGVsQ29udGVudHMgXSwNCiAgICAtdGV4
dCAgICA9PiAiRGVsIENvbnRlbnRzIiwNCiAgICApLT5wYWNrKCAtc2lkZSA9PiAnbGVmdCcs
IC1wYWR4ID0+IDIwLCk7DQogICAgDQokd2lkZ2V0c3snY2hnU2V0dGluZ3MnfSA9ICRib3R0
b21GcmFtZS0+QnV0dG9uKA0KICAgIC1jb21tYW5kID0+IFsgXCZjaGdTZXR0aW5ncyBdLA0K
ICAgIC10ZXh0ICAgID0+ICJDaGFuZ2UgU2V0dGluZ3MiLA0KICAgICktPnBhY2soIC1zaWRl
ID0+ICdsZWZ0JywgLXBhZHggPT4gMjAsKTsNCg0KIyBtYWluIGV2ZW50IGxvb3AgZm9yIHRo
ZSBhcHBsaWNhdGlvbg0KTWFpbkxvb3A7DQoNCg0KDQpzdWIgR2V0Q29udGVudHMNCnsNCiAg
ICBteSBAY29udGVudHMgPSAkd2lkZ2V0c3snZHVhbGxpc3QnfS0+R2V0TGVmdENvbnRlbnRz
KCk7DQogICAgcHJpbnQgIkxlZnQgQ29udGVudHMgYXJlOlxuIiwgam9pbigiXG4iLCBAY29u
dGVudHMgKSwgIlxuXG4iOw0KICAgIA0KICAgIEBjb250ZW50cyA9ICR3aWRnZXRzeydkdWFs
bGlzdCd9LT5HZXRSaWdodENvbnRlbnRzKCk7DQogICAgcHJpbnQgIlJpZ2h0IENvbnRlbnRz
IGFyZTpcbiIsIGpvaW4oIlxuIiwgQGNvbnRlbnRzICksICJcblxuIjsNCn0NCg0KDQpzdWIg
QWRkQ29udGVudHMNCnsNCiAgICBteSBAYXJyYXkgPSAoIDEsIDIsIDMsIDQsIDUsIDYgKTsN
CiAgICAkd2lkZ2V0c3snZHVhbGxpc3QnfS0+QWRkSXRlbSggQGFycmF5ICk7DQp9DQoNCg0K
c3ViIERlbENvbnRlbnRzDQp7DQogICAgbXkgQGFycmF5ID0gKCAxLCAyLCAzLCA0LCA1LCA2
ICk7DQogICAgbXkgJGNvdW50ID0gJHdpZGdldHN7J2R1YWxsaXN0J30tPkRlbGV0ZUl0ZW0o
IEBhcnJheSApOw0KICAgIA0KICAgIHByaW50ICJyZW1vdmVkICRjb3VudCBlbGVtZW50cyBm
cm9tIHRoZSBsaXN0c1xuIjsNCn0NCg0KDQpzdWIgY2hnU2V0dGluZ3MNCnsNCiAgICAkd2lk
Z2V0c3snZHVhbGxpc3QnfS0+Y29uZmlndXJlKA0KICAgICAgICAtc2VsZWN0bW9kZSAgPT4g
J3NpbmdsZScsDQogICAgICAgIC1iZyAgICAgICAgICA9PiAncHVycGxlJywNCiAgICAgICAg
LWZnICAgICAgICAgID0+ICd5ZWxsb3cnLA0KICAgICAgICAtYWN0aXZlc3R5bGUgPT4gJ25v
bmUnLA0KICAgICAgICApOw0KfQ==
--------------040603050507060901020609
Content-Type: text/plain;
name="DualLists.pm"
Content-Transfer-Encoding: base64
Content-Disposition: inline;
filename="DualLists.pm"
Iw0KIyBEdWFsTGlzdHMucG0NCiMNCiMgVGhpcyBtb2R1bGUgaW1wbGVtZW50cyB0d28gbGlz
dCBib3hlcyBvZiB0aGUgc2FtZSBoZWlnaHQgd2l0aCBhDQojIHNlcmllcyBvZiBidXR0b25z
IGJldHdlZW4gdGhlbS4gIFRoZSBidXR0b25zIGFsbG93IGZvciBtb3ZpbmcNCiMgaXRlbXMg
ZnJvbSBvbmUgbGlzdCB0byB0aGUgb3RoZXIuDQojDQojIEl0IGlzIHJlbGVhc2VkIHVuZGVy
IHRoZSBzYW1lIGxpY2Vuc2UgYXMgcGVybCBpdHNlbGYNCiMNCiMgQXV0aG9yICAtIFRvZGQg
TGl0dGxlZmllbGQNCiMNCiMgTGljZW5zZSAtIHBlcmwgQXJ0aXN0aWMgbGljZW5zZQ0KIw0K
IyBWZXJzaW9uIEhpc3RvcnkNCiMNCiMgMC4wMSAtIGluaXRpYWwgY29kaW5nIGFuZCByZWxl
YXNlIGZvciBjb21tZW50cw0KIw0KIw0KIyBUT0RPDQojDQojIC0gUE9EIGRvY3VtZW50YXRp
b24NCiMgLSBjb25maWdzcGVjcyBmb3IgdXNlciBjdXN0b21pemFibGUgcGFyYW1ldGVycyAo
c29tZSB0aGVyZSBtYXkgbmVlZCBvdGhlcnMpDQojIC0gYSB1c2VyIGN1c3RvbWl6YWJsZSBz
b3J0IHJvdXRpbmUNCiMgICAtc29ydG1ldGhvZCAmDQojIC0gYSB0ZXN0IHNjcmlwdCB0byB0
aGUgbWl4IGZvciBkaXN0cmlidXRpb24gcHVycG9zZXMNCiMgLSBlbmZvcmNlIHVuaXF1ZW5l
c3MgaW4gdGhlIGxpc3RzLi4uIGkuZS4gY2FuJ3QgYWRkIHRoZSBzYW1lIHRoaW5nIHR3aWNl
DQojICAgLXVuaXF1ZSAoMHwxKSBkZWZhdWx0cyB0byAxDQojIC0gYWxsb3cgdGhlIHByb2dy
YW1tZXIgdG8gdG9nZ2xlIHdoZXRoZXIgaXRlbXMgYXJlIHJlbW92ZWQgZnJvbSB0aGUgbGlz
dHMNCiMgICB3aGVuIHRoZXkgYXJlIG1vdmVkLCB0aGlzIHNob3VsZCBvbmx5IGFmZmVjdCB0
aGUgbGVmdCBsaXN0LCBub3QgdGhlIHJpZ2h0DQojICAgLXJlbW92ZSAoMHwxKSBkZWZhdWx0
cyB0byAxDQojIC0gYWxsb3cgdXNlcnMgdG8gYWRkL2RlbGV0ZSBlbnRyaWVzIHRvIHRoZSBs
ZWZ0IGxpc3QNCiMgICAtIGFkZCBhIHN3aXRjaCB0aGF0IHNob3dzIGFuIGVudHJ5IGJveCB3
aXRoIGFuIGFkZCBidXR0b24NCiMgICAtIGRvZXMgdGhpcyBuZWVkIHRvIGhhdmUgYSBkZWxl
dGUgb3B0aW9uIGFzIHdlbGw/DQojDQoNCnBhY2thZ2UgVGs6OkR1YWxMaXN0czsNCg0KdXNl
IHN0cmljdDsNCnVzZSBDYXJwOw0KDQojIFRrIGluY2x1ZGVzDQp1c2UgVGsgKCk7DQp1c2Ug
VGs6OkJ1dHRvbjsNCnVzZSBUazo6RGVyaXZlZDsNCnVzZSBUazo6RnJhbWU7DQp1c2UgVGs6
Okxpc3Rib3g7DQoNCnVzZSB2YXJzIHF3KEBJU0EgJFZFUlNJT04pOw0KQElTQSA9IHF3KFRr
OjpEZXJpdmVkIFRrOjpGcmFtZSk7DQoNCiRWRVJTSU9OID0gJzAuMDEnOw0KDQp1c2UgYmFz
ZSBxdyhUazo6RnJhbWUpOw0KDQpUazo6V2lkZ2V0LT5Db25zdHJ1Y3QoJ0R1YWxMaXN0cycp
Ow0KDQojIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj
IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIw0KIw0KIyBQb3B1bGF0ZQ0KIw0KIyBQ
YXJzZSBvdXQgdGhlIGFyZ3VtZW50cyB0byB0aGUgJ2NvbnN0cnVjdG9yJyBhbmQgY3JlYXRl
IHRoZSB3aWRnZXRzDQojIHdlIG5lZWQuDQojDQojIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj
IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj
Iw0Kc3ViIFBvcHVsYXRlDQp7DQogICAgbXkgKCRzZWxmLCAkYXJncykgPSBAXzsNCiAgICAN
CiAgICAjIGNoZWNrIHRvIHNlZSBpZiBkZWJ1ZyBpcyBzZXQgZm9yIHRoZSBtb2R1bGUuLi4N
CiAgICAkc2VsZi0+eydkZWJ1Zyd9ID0gZGVsZXRlICQkYXJnc3snLWRlYnVnJ30gICB8fCAw
Ow0KDQogICAgJHNlbGYtPl9kZWJ1Z1ByaW50KCAiREVCVUcgLSBQb3B1bGF0ZTogZGVidWcg
ZW5hYmxlZFxuIiApOw0KDQogICAgIw0KICAgICMgbm93IGdyYWIgdGhlIHNldHRpbmdzIGZv
ciBvdXIgd2lkZ2V0cy4uLg0KICAgICMNCiAgICAkc2VsZi0+eydsaXN0dmFyaWFibGUnfSA9
IGRlbGV0ZSAkJGFyZ3N7Jy1saXN0dmFyaWFibGUnfSB8fCB1bmRlZjsNCiAgICAkc2VsZi0+
eydkZWZhdWx0cyd9ICAgICA9IGRlbGV0ZSAkJGFyZ3N7Jy1kZWZhdWx0cyd9ICAgICB8fCB1
bmRlZjsNCiAgICAkc2VsZi0+eydzb3J0bWV0aG9kJ30gICA9IGRlbGV0ZSAkJGFyZ3N7Jy1z
b3J0bWV0aG9kJ30gICB8fCB1bmRlZjsNCiAgICAkc2VsZi0+eyd1bmlxdWUnfSAgICAgICA9
IGRlbGV0ZSAkJGFyZ3N7Jy11bmlxdWUnfSAgICAgICB8fCAwOw0KICAgICRzZWxmLT57J3Jl
bW92ZSd9ICAgICAgID0gZGVsZXRlICQkYXJnc3snLXJlbW92ZSd9ICAgICAgIHx8IDE7DQog
ICAgDQogICAgIyBzdGFuZGFyZCBvcHRpb25zLi4uDQogICAgJHNlbGYtPnsnc2VsZWN0bW9k
ZSd9ICA9IGRlbGV0ZSAkJGFyZ3N7Jy1zZWxlY3Rtb2RlJ30gIHx8ICdleHRlbmRlZCc7DQog
ICAgJHNlbGYtPnsnaGVpZ2h0J30gICAgICA9IGRlbGV0ZSAkJGFyZ3N7Jy1oZWlnaHQnfSAg
ICAgIHx8IDEwOw0KICAgICRzZWxmLT57J3dpZHRoJ30gICAgICAgPSBkZWxldGUgJCRhcmdz
eyctd2lkdGgnfSAgICAgICB8fCAyNTsNCiAgICAkc2VsZi0+eydiZyd9ICAgICAgICAgID0g
ZGVsZXRlICQkYXJnc3snLWJnJ30gICAgICAgICAgfHwgJ3doaXRlJzsNCiAgICAkc2VsZi0+
eydmZyd9ICAgICAgICAgID0gZGVsZXRlICQkYXJnc3snLWZnJ30gICAgICAgICAgfHwgJ2Js
YWNrJzsNCiAgICAkc2VsZi0+eydhY3RpdmVzdHlsZSd9ID0gZGVsZXRlICQkYXJnc3snLWFj
dGl2ZXN0eWxlJ30gfHwgJ25vbmUnOw0KICAgIA0KICAgICMgbm93IHBvcHVsYXRlIHRoZSBz
dXBlcmNsYXNzDQogICAgIyRzZWxmLT5TVVBFUjo6UG9wdWxhdGUoJGFyZ3MpOw0KDQogICAg
IyBjcmVhdGUgdGhlIGluaXRpYWwgZnJhbWUuLi4gKGRvIHdlIG5lZWQgdGhpcz8/Pyk7DQog
ICAgJHNlbGYtPnsnbWFpbkZyYW1lJ30gPSAkc2VsZi0+RnJhbWUoDQogICAgICAgIC1iZyA9
PiB1bmRlZiwNCiAgICAgICAgLWZnID0+IHVuZGVmLA0KICAgICAgICApLT5wYWNrKCAtc2lk
ZSA9PiAndG9wJywgLWV4cGFuZCA9PiAxLCAtZmlsbCA9PiAnYm90aCcsIC1wYWR5ID0+IDIs
IC1wYWR4ID0+IDIpOw0KICAgIA0KICAgIA0KICAgICMgYWRkIHRoZSBsZWZ0IGxpc3Rib3gu
Li4NCiAgICAkc2VsZi0+eydsZWZ0RnJhbWUnfSA9ICRzZWxmLT57J21haW5GcmFtZSd9LT5G
cmFtZSgNCiAgICAgICAgKS0+cGFjayggLXNpZGUgPT4gJ2xlZnQnLCAtYW5jaG9yID0+ICdu
dycsIC1leHBhbmQgPT4gMSwgLWZpbGwgPT4gJ2JvdGgnKTsNCiAgICANCiAgICAkc2VsZi0+
eydsZWZ0TGlzdGJveCd9ID0gJHNlbGYtPnsnbGVmdEZyYW1lJ30tPlNjcm9sbGVkKCAnTGlz
dGJveCcsDQogICAgICAgIC1oZWlnaHQgICAgID0+ICRzZWxmLT57J2hlaWdodCd9LA0KICAg
ICAgICAtc2VsZWN0bW9kZSA9PiAkc2VsZi0+eydzZWxlY3Rtb2RlJ30sDQogICAgICAgIC1z
Y3JvbGxiYXJzID0+ICdvc29lJywNCiAgICAgICAgLXdpZHRoICAgICAgPT4gJHNlbGYtPnsn
d2lkdGgnfSwNCiAgICAgICAgLWJnICAgICAgICAgPT4gJHNlbGYtPnsnYmcnfSwNCiAgICAg
ICAgLWZnICAgICAgICAgPT4gJHNlbGYtPnsnZmcnfSwNCiAgICAgICAgLWFjdGl2ZXN0eWxl
ID0+ICRzZWxmLT57J2FjdGl2ZXN0eWxlJ30sDQogICAgICAgICV7JGFyZ3N9LCAgICAgICMg
dXNlciBzcGVjaWZpZWQgYXJndW1lbnRzLi4uDQogICAgICAgICktPnBhY2soLXNpZGUgPT4g
J3RvcCcsIC1leHBhbmQgPT4gMSwgLWZpbGwgPT4gJ2JvdGgnKTsNCiAgICANCiAgICAkc2Vs
Zi0+eydtaWRGcmFtZSd9ID0gJHNlbGYtPnsnbWFpbkZyYW1lJ30tPkZyYW1lKA0KICAgICAg
ICApLT5wYWNrKCAtc2lkZSA9PiAnbGVmdCcsIC1hbmNob3IgPT4gJ2NlbnRlcicsIC1wYWR4
ID0+IDMsICk7DQogICAgDQogICAgDQogICAgIyBhZGQgdGhlIHJpZ2h0IGxpc3Rib3guLi4N
CiAgICAkc2VsZi0+eydyaWdodEZyYW1lJ30gPSAkc2VsZi0+eydtYWluRnJhbWUnfS0+RnJh
bWUoDQogICAgICAgICktPnBhY2soIC1zaWRlID0+ICdsZWZ0JywgLWFuY2hvciA9PiAnbncn
LCAtZXhwYW5kID0+IDEsIC1maWxsID0+ICdib3RoJyk7DQoNCiAgICAkc2VsZi0+eydyaWdo
dExpc3Rib3gnfSA9ICRzZWxmLT57J3JpZ2h0RnJhbWUnfS0+U2Nyb2xsZWQoICdMaXN0Ym94
JywNCiAgICAgICAgLWhlaWdodCAgICAgPT4gJHNlbGYtPnsnaGVpZ2h0J30sDQogICAgICAg
IC1zZWxlY3Rtb2RlID0+ICRzZWxmLT57J3NlbGVjdG1vZGUnfSwNCiAgICAgICAgLXNjcm9s
bGJhcnMgPT4gJ29zb2UnLA0KICAgICAgICAtd2lkdGggICAgICA9PiAkc2VsZi0+eyd3aWR0
aCd9LA0KICAgICAgICAtYmcgICAgICAgICA9PiAkc2VsZi0+eydiZyd9LA0KICAgICAgICAt
ZmcgICAgICAgICA9PiAkc2VsZi0+eydmZyd9LA0KICAgICAgICAtYWN0aXZlc3R5bGUgPT4g
JHNlbGYtPnsnYWN0aXZlc3R5bGUnfSwNCiAgICAgICAgJXskYXJnc30sICAgICAgIyB1c2Vy
IHNwZWNpZmllZCBhcmd1bWVudHMuLi4NCiAgICAgICAgKS0+cGFjaygtc2lkZSA9PiAndG9w
JywgLWV4cGFuZCA9PiAxLCAtZmlsbCA9PiAnYm90aCcpOw0KICAgICAgICANCiAgICAjIEFk
ZCBhIHNlcmllcyBvZiBidXR0b25zIHRvIG1vdmUgaXRlbXMgbGVmdCBhbmQgcmlnaHQuLi4N
CiAgICAkc2VsZi0+eydtb3ZlQWxsUmlnaHQnfSA9ICRzZWxmLT57J21pZEZyYW1lJ30tPkJ1
dHRvbigNCiAgICAgICAgLWNvbW1hbmQgPT4gW1wmX01vdmVBbGwsICRzZWxmLCAkc2VsZi0+
eydsZWZ0TGlzdGJveCd9LCAkc2VsZi0+eydyaWdodExpc3Rib3gnfSBdLA0KICAgICAgICAt
dGV4dCAgICA9PiAnPj4nLA0KICAgICAgICAtd2lkdGggICA9PiAzLA0KICAgICAgICApLT5w
YWNrKCAtc2lkZSA9PiAndG9wJywgLXBhZHkgPT4gMywgKTsNCiAgICANCiAgICAkc2VsZi0+
eydtb3ZlU2VsZWN0ZWRSaWdodCd9ID0gJHNlbGYtPnsnbWlkRnJhbWUnfS0+QnV0dG9uKA0K
ICAgICAgICAtY29tbWFuZCA9PiBbIFwmX01vdmUsICRzZWxmLCAkc2VsZi0+eydsZWZ0TGlz
dGJveCd9LCAkc2VsZi0+eydyaWdodExpc3Rib3gnfSBdLA0KICAgICAgICAtdGV4dCA9PiAn
PicsDQogICAgICAgIC13aWR0aCA9PiAzLA0KICAgICAgICApLT5wYWNrKCAtc2lkZSA9PiAn
dG9wJywgLXBhZHkgPT4gMywgKTsNCiAgICANCiAgICAkc2VsZi0+eydtb3ZlU2VsZWN0ZWRM
ZWZ0J30gPSAkc2VsZi0+eydtaWRGcmFtZSd9LT5CdXR0b24oDQogICAgICAgIC1jb21tYW5k
ID0+IFtcJl9Nb3ZlLCAkc2VsZiwgJHNlbGYtPnsncmlnaHRMaXN0Ym94J30sICRzZWxmLT57
J2xlZnRMaXN0Ym94J30gXSwNCiAgICAgICAgLXRleHQgPT4gJzwnLA0KICAgICAgICAtd2lk
dGggPT4gMywNCiAgICAgICAgKS0+cGFjayggLXNpZGUgPT4gJ3RvcCcsIC1wYWR5ID0+IDMs
ICk7DQogICAgDQogICAgJHNlbGYtPnsnbW92ZUFsbExlZnQnfSA9ICRzZWxmLT57J21pZEZy
YW1lJ30tPkJ1dHRvbigNCiAgICAgICAgLWNvbW1hbmQgPT4gW1wmX01vdmVBbGwsICRzZWxm
LCAkc2VsZi0+eydyaWdodExpc3Rib3gnfSwgJHNlbGYtPnsnbGVmdExpc3Rib3gnfSBdLA0K
ICAgICAgICAtdGV4dCA9PiAnPDwnLA0KICAgICAgICAtd2lkdGggPT4gMywNCiAgICAgICAg
KS0+cGFjayggLXNpZGUgPT4gJ3RvcCcsIC1wYWR5ID0+IDMsICk7DQoNCiAgICANCiAgICAj
IG5vdyBwb3B1bGF0ZSB0aGUgbGVmdCBsaXN0IGJveCBpZiB3ZSByZWNlaXZlZCBhbnkgZGF0
YSBpbg0KICAgICMgdGhlIGxpc3R2YXJpYWJsZQ0KICAgIGlmICggZGVmaW5lZCAkc2VsZi0+
eydsaXN0dmFyaWFibGUnfSApDQogICAgew0KICAgICAgICBmb3JlYWNoIChzb3J0KCBAeyRz
ZWxmLT57J2xpc3R2YXJpYWJsZSd9fSApICkNCiAgICAgICAgew0KICAgICAgICAgICAgJHNl
bGYtPl9kZWJ1Z1ByaW50KCAiaW5zZXJ0aW5nICRfXG4iICk7DQogICAgICAgICAgICAkc2Vs
Zi0+eydsZWZ0TGlzdGJveCd9LT5pbnNlcnQoICdlbmQnLCAkXyk7DQogICAgICAgIH0NCiAg
ICB9DQogICAgDQogICAgIyBhZGQgYW55IHByZXNlbGVjdGVkIGRlZmF1bHRzIHRvIHRoZSBy
aWdodCBoYW5kIHNpZGUuLi4NCiAgICBpZiAoIGRlZmluZWQgJHNlbGYtPnsnZGVmYXVsdHMn
fSApDQogICAgew0KICAgICAgICBmb3JlYWNoIChzb3J0KCBAeyRzZWxmLT57J2RlZmF1bHRz
J319ICkgKQ0KICAgICAgICB7DQogICAgICAgICAgICBwcmludCAiaW5zZXJ0aW5nICRfXG4i
Ow0KICAgICAgICAgICAgJHNlbGYtPnsncmlnaHRMaXN0Ym94J30tPmluc2VydCggJ2VuZCcs
ICRfKTsNCiAgICAgICAgfQ0KICAgIH0NCiAgICANCiAgICAjIHNldHVwIGJpbmRpbmdzIGZv
ciB0aGUgbGVmdCBhbmQgcmlnaHQgbGlzdCBib3hlcyB0byBjaGVjayBmb3INCiAgICAjIG1v
dXNlIGJ1dHRvbiAxIHVwIGV2ZW50cy4uLg0KICAgICRzZWxmLT57J2xlZnRMaXN0Ym94J30t
PmJpbmQoICc8QnV0dG9uLTE+JywgICAgICAgIFtcJl9TZXRCdXR0b25TdGF0ZSwgJHNlbGZd
ICk7DQogICAgJHNlbGYtPnsnbGVmdExpc3Rib3gnfS0+YmluZCggJzxEb3VibGUtQnV0dG9u
LTE+JywgW1wmX0JpbmRNb3ZlLCAkc2VsZiwgJHNlbGYtPnsnbGVmdExpc3Rib3gnfSwgJHNl
bGYtPnsncmlnaHRMaXN0Ym94J31dKTsNCiAgICAkc2VsZi0+eydsZWZ0TGlzdGJveCd9LT5i
aW5kKCAnPEtleVByZXNzLVJpZ2h0PicsICBbXCZfQmluZE1vdmUsICRzZWxmLCAkc2VsZi0+
eydsZWZ0TGlzdGJveCd9LCAkc2VsZi0+eydyaWdodExpc3Rib3gnfV0pOw0KICAgIA0KICAg
ICRzZWxmLT57J3JpZ2h0TGlzdGJveCd9LT5iaW5kKCAnPEJ1dHRvbi0xPicsICAgICAgICBb
XCZfU2V0QnV0dG9uU3RhdGUsICRzZWxmXSApOw0KICAgICRzZWxmLT57J3JpZ2h0TGlzdGJv
eCd9LT5iaW5kKCAnPERvdWJsZS1CdXR0b24tMT4nLCBbXCZfQmluZE1vdmUsICRzZWxmLCAk
c2VsZi0+eydyaWdodExpc3Rib3gnfSwgJHNlbGYtPnsnbGVmdExpc3Rib3gnfV0pOw0KICAg
ICRzZWxmLT57J3JpZ2h0TGlzdGJveCd9LT5iaW5kKCAnPEtleVByZXNzLUxlZnQ+JywgICBb
XCZfQmluZE1vdmUsICRzZWxmLCAkc2VsZi0+eydyaWdodExpc3Rib3gnfSwgJHNlbGYtPnsn
bGVmdExpc3Rib3gnfV0pOw0KICAgIA0KICAgICMNCiAgICAjIHNldHVwIHRoZSBDb25maWdT
cGVjcyBoZXJlIGZvciBub24gaW5zdGFudGlhdGlvbiB0aW1lIHZhbHVlcw0KICAgICMNCiAg
ICAkc2VsZi0+Q29uZmlnU3BlY3MoIC1zdGF0dXNCRyAgICAgICAgICA9PiBbJ01FVEhPRCcs
ICwgLCAnbGlnaHRncmV5J10gKTsNCiAgICANCiAgICAkc2VsZi0+Q29uZmlnU3BlY3MoDQog
ICAgICAgIC1kZWJ1ZyAgICAgICA9PiBbJ01FVEhPRCcsIHVuZGVmLCB1bmRlZiwgdW5kZWZd
LA0KICAgICAgICAtc29ydG1ldGhvZCAgPT4gWydNRVRIT0QnLCB1bmRlZiwgdW5kZWYsIHVu
ZGVmXSwNCiAgICAgICAgLXVuaXF1ZSAgICAgID0+IFsnTUVUSE9EJywgdW5kZWYsIHVuZGVm
LCB1bmRlZl0sDQogICAgICAgIC1yZW1vdmUgICAgICA9PiBbJ01FVEhPRCcsIHVuZGVmLCB1
bmRlZiwgdW5kZWZdLA0KIyAgICAgICAgLWhlaWdodCAgICAgID0+IFsnTUVUSE9EJywgdW5k
ZWYsIHVuZGVmLCB1bmRlZl0sDQojICAgICAgICAtd2lkdGggICAgICAgPT4gWydNRVRIT0Qn
LCB1bmRlZiwgdW5kZWYsIHVuZGVmXSwNCiAgICAgICAgLXNlbGVjdG1vZGUgID0+IFsnTUVU
SE9EJywgdW5kZWYsIHVuZGVmLCB1bmRlZl0sDQogICAgICAgIC1iZyAgICAgICAgICA9PiBb
J01FVEhPRCcsIHVuZGVmLCB1bmRlZiwgdW5kZWZdLA0KICAgICAgICAtZmcgICAgICAgICAg
PT4gWydNRVRIT0QnLCB1bmRlZiwgdW5kZWYsIHVuZGVmXSwNCiAgICAgICAgLWFjdGl2ZXN0
eWxlID0+IFsnTUVUSE9EJywgdW5kZWYsIHVuZGVmLCB1bmRlZl0sDQogICAgKTsNCg0KICAg
IHJldHVybiAkc2VsZjsNCn0NCg0KDQoNCiMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj
IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjDQoj
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQdWJsaWMgTWV0aG9kcyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIw0KIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj
IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMN
Cg0KDQoNCiMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj
IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjDQojDQojIEdldExlZnRDb250ZW50
cw0KIw0KIyBUaGlzIGlzIGEgcHVibGljIGZhY2luZyBtZXRob2QgdGhhdCByZXR1cm5zIHRo
ZSBjb250ZW50cyBvZiB0aGUgbGVmdCBMaXN0Ym94DQojIHRvIHRoZSB1c2VyLg0KIw0KIyMj
IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj
IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMNCnN1YiBHZXRMZWZ0Q29udGVudHMNCnsNCiAgICBt
eSAkc2VsZiA9IHNoaWZ0IEBfOw0KICAgIA0KICAgIHJldHVybiggJHNlbGYtPnsnbGVmdExp
c3Rib3gnfS0+Z2V0KCAwLCAnZW5kJyApKTsNCn0NCg0KDQoNCg0KIyMjIyMjIyMjIyMjIyMj
IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj
IyMjIyMjIyMjIyMNCiMNCiMgR2V0UmlnaHRDb250ZW50cw0KIw0KIyBUaGlzIGlzIGEgcHVi
bGljIGZhY2luZyBtZXRob2QgdGhhdCByZXR1cm5zIHRoZSBjb250ZW50cyBvZiB0aGUgcmln
aHQgTGlzdGJveA0KIyB0byB0aGUgdXNlci4NCiMNCiMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj
IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj
IyMjDQpzdWIgR2V0UmlnaHRDb250ZW50cw0Kew0KICAgIG15ICRzZWxmID0gc2hpZnQgQF87
DQogICAgDQogICAgcmV0dXJuKCAkc2VsZi0+eydyaWdodExpc3Rib3gnfS0+Z2V0KCAwLCAn
ZW5kJyApKTsNCn0NCg0KDQoNCg0KDQoNCiMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj
IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjDQoj
DQojIEFkZEl0ZW0NCiMNCiMgQWxsb3dzIHRoZSB1c2VyIHRvIGFkZCBpdGVtcyB0byB0aGUg
bGVmdCBwYW5lbCBvbmx5LiAgSXQgaXMgdXAgdG8gdGhlIHVzZXINCiMgdG8gbW92ZSB0aGVt
IGZyb20gb25lIHNpZGUgdG8gdGhlIG90aGVyLg0KIw0KIyMjIyMjIyMjIyMjIyMjIyMjIyMj
IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj
IyMjIyMNCnN1YiBBZGRJdGVtDQp7DQogICAgbXkgJHNlbGYgPSBzaGlmdCBAXzsNCiAgICAN
CiAgICBteSBAbGVmdExpc3QgPSAkc2VsZi0+eydsZWZ0TGlzdGJveCd9LT5nZXQoIDAsICdl
bmQnICk7DQogICAgJHNlbGYtPnsnbGVmdExpc3Rib3gnfS0+ZGVsZXRlKCAwLCAnZW5kJyAp
Ow0KICAgIA0KICAgIHB1c2ggQGxlZnRMaXN0LCBAXzsNCiAgICBmb3JlYWNoIChzb3J0IEBs
ZWZ0TGlzdCkNCiAgICB7DQogICAgICAgICRzZWxmLT57J2xlZnRMaXN0Ym94J30tPmluc2Vy
dCggJ2VuZCcsICRfICk7DQogICAgfQ0KICAgIA0KICAgICRzZWxmLT5fU2V0QnV0dG9uU3Rh
dGUoICRzZWxmICk7DQp9DQoNCg0KDQojIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj
IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIw0KIw0K
IyBEZWxldGVJdGVtDQojDQojIElmIHRoZSB1c2VyIHdpc2hlcyB0byByZW1vdmUgaXRlbXMg
ZnJvbSB0aGUgbGlzdHMsIHRoaXMgbWV0aG9kIGlzIHVzZWQuDQojIFRoZSB1c2VyIHdpbGwg
cGFzcyBhbiBhcnJheSBvZiBpdGVtcyB0byBiZSBkZWxldGVkIGFuZCBib3RoIHNpZGVzIHdp
bGwgYmUNCiMgY2hlY2tlZC4gIEFueSBpbnN0YW5jZXMgd2lsbCBiZSByZW1vdmVkLg0KIw0K
IyBBIGNvdW50IG9mIHRoZSBudW1iZXIgb2YgaXRlbXMgcmVtb3ZlZCBpcyByZXR1cm5lZC4N
CiMNCiMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj
IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjDQpzdWIgRGVsZXRlSXRlbQ0Kew0KICAg
IG15ICRzZWxmID0gc2hpZnQgQF87DQogICAgDQogICAgbXkgJHJlbW92ZWRDb3VudCA9IDA7
DQogICAgDQogICAgJHNlbGYtPl9kZWJ1Z1ByaW50KCAiRW50ZXJpbmcgRGVsZXRlSXRlbVxu
Iik7DQogICAgDQogICAgIyBnZXQgdGhlIGxpc3Qgb2YgaXRlbXMgaW4gZWFjaCBMaXN0Ym94
DQogICAgbXkgQGxlZnRMaXN0ID0gJHNlbGYtPnsnbGVmdExpc3Rib3gnfS0+Z2V0KCAwLCAn
ZW5kJyApOw0KICAgIG15IEByaWdodExpc3QgPSAkc2VsZi0+eydyaWdodExpc3Rib3gnfS0+
Z2V0KCAwLCAnZW5kJyApOw0KICAgIA0KICAgICMgZm9yZWFjaCBpdGVtIGluIEBfLCBjaGVj
ayBib3RoIHRoZSBsZWZ0IGFuZCByaWdodCBsaXN0cw0KICAgICMgdG8gc2VlIGlmIGl0IGV4
aXN0cy4uLg0KICAgIGZvcmVhY2ggKCBAXyApDQogICAgew0KICAgICAgICAkc2VsZi0+X2Rl
YnVnUHJpbnQoICJcdGxvb2tpbmcgZm9yICRfXG4iKTsNCiAgICAgICAgDQogICAgICAgIGZv
ciAoIG15ICRpID0gMDsgJGkgPD0gJCNsZWZ0TGlzdDsgJGkgKysgKQ0KICAgICAgICB7DQog
ICAgICAgICAgICBpZiAoICRfIGVxICRsZWZ0TGlzdFskaV0gKQ0KICAgICAgICAgICAgew0K
ICAgICAgICAgICAgICAgICRzZWxmLT5fZGVidWdQcmludCggIlx0Zm91bmQgJF8gaW4gdGhl
IGxlZnQgbGlzdCwgZGVsZXRpbmdcbiIpOw0KICAgICAgICAgICAgICAgICMgZGVsZXRlIHRo
ZSBpdGVtIGZyb20gdGhlIGxpc3QgYW5kIHRoZSBhcnJheSBzbyB0aGUNCiAgICAgICAgICAg
ICAgICAjIGluZGljZXMgbGluZSB1cC4NCiAgICAgICAgICAgICAgICAkc2VsZi0+eydsZWZ0
TGlzdGJveCd9LT5kZWxldGUoICRpICk7DQogICAgICAgICAgICAgICAgc3BsaWNlKCBAbGVm
dExpc3QsICRpLCAxICk7DQogICAgICAgICAgICAgICAgDQogICAgICAgICAgICAgICAgIyBp
bmNyZW1lbnQgdGhlIHJlbW92ZWQgY291bnQNCiAgICAgICAgICAgICAgICAkcmVtb3ZlZENv
dW50ICsrDQogICAgICAgICAgICB9DQogICAgICAgIH0NCiAgICAgICAgDQogICAgICAgIGZv
ciAoIG15ICRpID0gMDsgJGkgPD0gJCNyaWdodExpc3Q7ICRpICsrICkNCiAgICAgICAgew0K
ICAgICAgICAgICAgaWYgKCAkXyBlcSAkcmlnaHRMaXN0WyRpXSApDQogICAgICAgICAgICB7
DQogICAgICAgICAgICAgICAgJHNlbGYtPl9kZWJ1Z1ByaW50KCAiXHRmb3VuZCAkXyBpbiB0
aGUgcmlnaHQgbGlzdCwgZGVsZXRpbmdcbiIpOw0KICAgICAgICAgICAgICAgICMgZGVsZXRl
IHRoZSBpdGVtIGZyb20gdGhlIGxpc3QgYW5kIHRoZSBhcnJheSBzbyB0aGUNCiAgICAgICAg
ICAgICAgICAjIGluZGljZXMgbGluZSB1cC4NCiAgICAgICAgICAgICAgICAkc2VsZi0+eydy
aWdodExpc3Rib3gnfS0+ZGVsZXRlKCAkaSApOw0KICAgICAgICAgICAgICAgIHNwbGljZSgg
QHJpZ2h0TGlzdCwgJGksIDEgKTsNCiAgICAgICAgICAgICAgICANCiAgICAgICAgICAgICAg
ICAjIGluY3JlbWVudCB0aGUgcmVtb3ZlZCBjb3VudA0KICAgICAgICAgICAgICAgICRyZW1v
dmVkQ291bnQgKysNCiAgICAgICAgICAgIH0NCiAgICAgICAgfQ0KICAgIH0NCiAgICANCiAg
ICAjIHNlZSBpZiB3ZSBuZWVkIHRvIGRvIGFueSB1cGRhdGVzIHRvIHRoZSBidXR0b24gc3Rh
dGVzLi4uDQogICAgJHNlbGYtPl9TZXRCdXR0b25TdGF0ZSggJHNlbGYgKTsNCiAgICANCiAg
ICAkc2VsZi0+X2RlYnVnUHJpbnQoICJMZWF2aW5nIERlbGV0ZUl0ZW1cbiIpOw0KICAgIA0K
ICAgIHJldHVybiAkcmVtb3ZlZENvdW50Ow0KfQ0KDQoNCiMjIyMjIyMjIyMjIyMjIyMjIyMj
IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj
IyMjIyMjDQojICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ29uZmlnc3BlY3Mg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIw0KIyMjIyMjIyMjIyMjIyMjIyMj
IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj
IyMjIyMjIyMNCg0KIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj
IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMNCiMNCiMgZGVidWcNCiMN
CiMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj
IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjDQpzdWIgZGVidWcNCnsNCiAgICBteSAkc2Vs
ZiA9IHNoaWZ0IEBfOw0KICAgIA0KICAgICRzZWxmLT5fZGVidWdQcmludCggIkVudGVyaW5n
IGRlYnVnXG4iICk7DQogICAgDQogICAgaWYgKCAkI18gPj0gMCApDQogICAgew0KICAgICAg
ICAkc2VsZi0+eydkZWJ1Zyd9ID0gc2hpZnQgQF87DQogICAgfQ0KICAgICRzZWxmLT5fZGVi
dWdQcmludCggIkxlYXZpbmcgZGVidWdcbiIgKTsNCiAgICANCiAgICByZXR1cm4gJHNlbGYt
PnsnZGVidWcnfTsNCn0NCg0KDQoNCiMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj
IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjDQojDQoj
IHVuaXF1ZQ0KIw0KIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj
IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMNCnN1YiB1bmlxdWUNCnsN
CiAgICBteSAkc2VsZiA9IHNoaWZ0IEBfOw0KICAgIA0KICAgICRzZWxmLT5fZGVidWdQcmlu
dCggIkVudGVyaW5nIHVuaXF1ZVxuIiApOw0KICAgIA0KICAgIGlmICggJCNfID49IDAgKQ0K
ICAgIHsNCiAgICAgICAgJHNlbGYtPnsndW5pcXVlJ30gPSBzaGlmdCBAXzsNCiAgICB9DQog
ICAgDQogICAgJHNlbGYtPl9kZWJ1Z1ByaW50KCAiTGVhdmluZyB1bmlxdWVcbiIgKTsNCiAg
ICANCiAgICByZXR1cm4gJHNlbGYtPnsndW5pcXVlJ307DQp9DQoNCg0KDQojIyMjIyMjIyMj
IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj
IyMjIyMjIyMjIyMjIyMjIw0KIw0KIyByZW1vdmUNCiMNCiMjIyMjIyMjIyMjIyMjIyMjIyMj
IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj
IyMjIyMjDQpzdWIgcmVtb3ZlDQp7DQogICAgbXkgJHNlbGYgPSBzaGlmdCBAXzsNCiAgICAN
CiAgICAkc2VsZi0+X2RlYnVnUHJpbnQoICJFbnRlcmluZyByZW1vdmVcbiIgKTsNCiAgICAN
CiAgICBpZiAoICQjXyA+PSAwICkNCiAgICB7DQogICAgICAgICRzZWxmLT57J3JlbW92ZSd9
ID0gc2hpZnQgQF87DQogICAgfQ0KICAgIA0KICAgICRzZWxmLT5fZGVidWdQcmludCggIkxl
YXZpbmcgcmVtb3ZlXG4iICk7DQogICAgDQogICAgcmV0dXJuICRzZWxmLT57J3JlbW92ZSd9
Ow0KfQ0KDQoNCiMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj
IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjDQojDQojIHNlbGVjdG1vZGUN
CiMNCiMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj
IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjDQpzdWIgc2VsZWN0bW9kZQ0Kew0KICAg
IG15ICRzZWxmID0gc2hpZnQgQF87DQogICAgDQogICAgJHNlbGYtPl9kZWJ1Z1ByaW50KCAi
RW50ZXJpbmcgc2VsZWN0bW9kZVxuIiApOw0KICAgIA0KICAgIGlmICggJCNfID49IDAgKQ0K
ICAgIHsNCiAgICAgICAgaWYgKCAkX1swXSA9fiAvKF5zaW5nbGUkKXwoXmJyb3dzZSQpfChe
bXVsdGlwbGUkKXwoXmV4dGVuZGVkJCkvICkNCiAgICAgICAgew0KICAgICAgICAgICAgJHNl
bGYtPl9kZWJ1Z1ByaW50KCAiU2V0dGluZyBzZWxlY3Rtb2RlIG9uIGxpc3Rib3hlcyB0bzog
JF9bMF1cbiIgKTsNCiAgICAgICAgICAgICRzZWxmLT57J3NlbGVjdG1vZGUnfSA9IHNoaWZ0
IEBfOw0KICAgICAgICAgICAgDQogICAgICAgICAgICAkc2VsZi0+eydsZWZ0TGlzdGJveCd9
LT5jb25maWd1cmUoIC1zZWxlY3Rtb2RlID0+ICRzZWxmLT57J3NlbGVjdG1vZGUnfSApOw0K
ICAgICAgICAgICAgJHNlbGYtPnsncmlnaHRMaXN0Ym94J30tPmNvbmZpZ3VyZSggLXNlbGVj
dG1vZGUgPT4gJHNlbGYtPnsnc2VsZWN0bW9kZSd9ICk7DQogICAgICAgIH0NCiAgICAgICAg
ZWxzZQ0KICAgICAgICB7DQogICAgICAgICAgICAkc2VsZi0+X2RlYnVnUHJpbnQoICJXYXJu
aW5nLCBzZWxlY3Rtb2RlIG11c3QgYmUgb25lIG9mIHNpbmdsZSwgYnJvd3NlLCBtdWx0aXBs
ZSBvciBleHRlbmRlZFxuIiApOw0KICAgICAgICB9ICAgICAgICANCiAgICB9DQogICAgDQog
ICAgJHNlbGYtPl9kZWJ1Z1ByaW50KCAiTGVhdmluZyBzZWxlY3Rtb2RlXG4iICk7DQogICAg
DQogICAgcmV0dXJuICRzZWxmLT57J3NlbGVjdG1vZGUnfTsNCn0NCg0KDQojIyMjIyMjIyMj
IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj
IyMjIyMjIyMjIyMjIyMjIw0KIw0KIyBiZw0KIw0KIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj
IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj
IyMNCnN1YiBiZw0Kew0KICAgIG15ICRzZWxmID0gc2hpZnQgQF87DQogICAgDQogICAgJHNl
bGYtPl9kZWJ1Z1ByaW50KCAiRW50ZXJpbmcgYmdcbiIgKTsNCiAgICANCiAgICBpZiAoICQj
XyA+PSAwICkNCiAgICB7DQogICAgICAgICRzZWxmLT5fZGVidWdQcmludCggIlNldHRpbmcg
Ymcgb24gbGlzdGJveGVzIHRvOiAkX1swXVxuIiApOw0KICAgICAgICAkc2VsZi0+eydiZyd9
ID0gc2hpZnQgQF87DQogICAgICAgIA0KICAgICAgICAkc2VsZi0+eydsZWZ0TGlzdGJveCd9
LT5jb25maWd1cmUoIC1iZyA9PiAkc2VsZi0+eydiZyd9ICk7DQogICAgICAgICRzZWxmLT57
J3JpZ2h0TGlzdGJveCd9LT5jb25maWd1cmUoIC1iZyA9PiAkc2VsZi0+eydiZyd9ICk7DQog
ICAgfQ0KICAgIA0KICAgICRzZWxmLT5fZGVidWdQcmludCggIkxlYXZpbmcgYmdcbiIgKTsN
CiAgICANCiAgICByZXR1cm4gJHNlbGYtPnsnYmcnfTsNCn0NCg0KDQojIyMjIyMjIyMjIyMj
IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj
IyMjIyMjIyMjIyMjIw0KIw0KIyBmZw0KIw0KIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj
IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMN
CnN1YiBmZw0Kew0KICAgIG15ICRzZWxmID0gc2hpZnQgQF87DQogICAgDQogICAgJHNlbGYt
Pl9kZWJ1Z1ByaW50KCAiRW50ZXJpbmcgZmdcbiIgKTsNCiAgICANCiAgICBpZiAoICQjXyA+
PSAwICkNCiAgICB7DQogICAgICAgICRzZWxmLT5fZGVidWdQcmludCggIlNldHRpbmcgZmcg
b24gbGlzdGJveGVzIHRvOiAkX1swXVxuIiApOw0KICAgICAgICAkc2VsZi0+eydmZyd9ID0g
c2hpZnQgQF87DQogICAgICAgIA0KICAgICAgICAkc2VsZi0+eydsZWZ0TGlzdGJveCd9LT5j
b25maWd1cmUoIC1mZyA9PiAkc2VsZi0+eydiZyd9ICk7DQogICAgICAgICRzZWxmLT57J3Jp
Z2h0TGlzdGJveCd9LT5jb25maWd1cmUoIC1mZyA9PiAkc2VsZi0+eydiZyd9ICk7DQogICAg
fQ0KICAgIA0KICAgICRzZWxmLT5fZGVidWdQcmludCggIkxlYXZpbmcgZmdcbiIgKTsNCiAg
ICANCiAgICByZXR1cm4gJHNlbGYtPnsnZmcnfTsNCn0NCg0KDQojIyMjIyMjIyMjIyMjIyMj
IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj
IyMjIyMjIyMjIw0KIw0KIyBhY3RpdmVzdHlsZQ0KIw0KIyMjIyMjIyMjIyMjIyMjIyMjIyMj
IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj
IyMjIyMNCnN1YiBhY3RpdmVzdHlsZQ0Kew0KICAgIG15ICRzZWxmID0gc2hpZnQgQF87DQog
ICAgDQogICAgJHNlbGYtPl9kZWJ1Z1ByaW50KCAiRW50ZXJpbmcgYWN0aXZlc3R5bGVcbiIg
KTsNCiAgICANCiAgICBpZiAoICQjXyA+PSAwICkNCiAgICB7DQogICAgICAgIGlmICggJF9b
MF0gPX4gLyheZG90Ym94KXwoXnVuZGVybGluZSl8KF5ub25lKS8gKQ0KICAgICAgICB7DQog
ICAgICAgICAgICAkc2VsZi0+X2RlYnVnUHJpbnQoICJTZXR0aW5nIHNlbGVjdG1vZGUgb24g
bGlzdGJveGVzIHRvOiAkX1swXVxuIiApOw0KICAgICAgICAgICAgJHNlbGYtPnsnc2VsZWN0
bW9kZSd9ID0gc2hpZnQgQF87DQogICAgICAgICAgICANCiAgICAgICAgICAgICRzZWxmLT57
J2xlZnRMaXN0Ym94J30tPmNvbmZpZ3VyZSggLXNlbGVjdG1vZGUgPT4gJHNlbGYtPnsnc2Vs
ZWN0bW9kZSd9ICk7DQogICAgICAgICAgICAkc2VsZi0+eydyaWdodExpc3Rib3gnfS0+Y29u
ZmlndXJlKCAtc2VsZWN0bW9kZSA9PiAkc2VsZi0+eydzZWxlY3Rtb2RlJ30gKTsNCiAgICAg
ICAgfQ0KICAgICAgICBlbHNlDQogICAgICAgIHsNCiAgICAgICAgICAgICRzZWxmLT5fZGVi
dWdQcmludCggIldhcm5pbmcsIGFjdGl2ZXN0eWxlIG11c3QgYmUgb25lIG9mIGRvdGJveCwg
dW5kZXJsaW5lIG9yIG5vbmVcbiIgKTsNCiAgICAgICAgfQ0KICAgIH0NCiAgICANCiAgICAk
c2VsZi0+X2RlYnVnUHJpbnQoICJMZWF2aW5nIGFjdGl2ZXN0eWxlXG4iICk7DQogICAgDQog
ICAgcmV0dXJuICRzZWxmLT57J2FjdGl2ZXN0eWxlJ307DQp9DQoNCg0KDQojIyMjIyMjIyMj
IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj
IyMjIyMjIyMjIyMjIyMjIw0KIyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHJp
dmF0ZSBNZXRob2RzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMNCiMjIyMjIyMj
IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj
IyMjIyMjIyMjIyMjIyMjIyMjDQoNCg0KDQojIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj
IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIw0K
Iw0KIyBfTW92ZUFsbA0KIw0KIyBUaGlzIGlzIGFuIGludGVybmFsIG1ldGhvZCByZXNwb25z
aWJsZSBmb3IgdGFraW5nIGFsbCB0aGUgaXRlbXMgZnJvbSBvbmUNCiMgbGlzdGJveCBhbmQg
bW92aW5nIHRoZW0gdG8gdGhlIG90aGVyLg0KIw0KIyBJdCB0YWtlcyBhcyB0d28gcGFyYW1l
dGVycywgdGhlIHNvdXJjZSBhbmQgZGVzdGluYXRpb24gbGlzdGJveCB3aWRnZXRzLg0KIw0K
IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj
IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMNCnN1YiBfTW92ZUFsbA0Kew0KICAgIG15ICRz
ZWxmICAgICAgID0gc2hpZnQgQF87DQogICAgbXkgJHNyY0xpc3Rib3ggPSBzaGlmdCBAXzsN
CiAgICBteSAkZHN0TGlzdGJveCA9IHNoaWZ0IEBfOw0KICAgIA0KICAgICRzZWxmLT5fZGVi
dWdQcmludCggIkVudGVyaW5nIF9Nb3ZlQWxsXG4iICk7DQogICAgDQogICAgaWYgKCBkZWZp
bmVkICRzcmNMaXN0Ym94ICYmIGRlZmluZWQgJGRzdExpc3Rib3ggKQ0KICAgIHsNCiAgICAg
ICAgIyBnZXQgYSBsaXN0IG9mIHRoZSBpdGVtcyByZW1haW5pbmcgaW4gdGhlIGxlZnQgbGlz
dC4uLg0KICAgICAgICBteSBAbGVmdExpc3QgPSAkc3JjTGlzdGJveC0+Z2V0KCAwLCAnZW5k
Jyk7DQogICAgICAgIA0KICAgICAgICAjIGRlbGV0ZSBhbGwgdGhlIGl0ZW1zIGZyb20gdGhl
IGxlZnQgTGlzdGJveA0KICAgICAgICAkc3JjTGlzdGJveC0+ZGVsZXRlKCAwLCAnZW5kJyAp
Ow0KICAgICAgICANCiAgICAgICAgIyBsb29wIHRocm91Z2ggYW5kIGluc2VydCB0aGVtIGFs
bCBpbnRvIHRoZSByaWdodCBsaXN0DQogICAgICAgIGlmICggJCNsZWZ0TGlzdCA+PSAwICkN
CiAgICAgICAgew0KICAgICAgICAgICAgIyBnZXQgdGhlIGxpc3Qgb2YgaXRlbXMgaW4gdGhl
IHJpZ2h0IGxpc3QNCiAgICAgICAgICAgIG15IEByaWdodExpc3QgPSAkZHN0TGlzdGJveC0+
Z2V0KCAwLCAnZW5kJyk7DQogICAgICAgICAgICAkZHN0TGlzdGJveC0+ZGVsZXRlKCAwLCAn
ZW5kJyApOw0KICAgICAgICAgICAgDQogICAgICAgICAgICAjIGFkZCB0aGUgcmlnaHQgbGlz
dCB0byB0aGUgbGVmdCBsaXN0IGFuZCB0aGVuIHNvcnQgdGhlbQ0KICAgICAgICAgICAgcHVz
aCBAbGVmdExpc3QsIEByaWdodExpc3Q7DQogICAgICAgICAgICBAbGVmdExpc3QgPSBzb3J0
KCBAbGVmdExpc3QgKTsNCiAgICAgICAgICAgIA0KICAgICAgICAgICAgZm9yZWFjaCAoQGxl
ZnRMaXN0KQ0KICAgICAgICAgICAgew0KICAgICAgICAgICAgICAgIHByaW50ICJpbnNlcnRp
bmcgJF9cbiI7DQogICAgICAgICAgICAgICAgJGRzdExpc3Rib3gtPmluc2VydCggJ2VuZCcs
ICRfICk7DQogICAgICAgICAgICB9DQogICAgICAgICAgICANCiAgICAgICAgICAgICMgbm93
IHNldCB0aGUgY29ycmVjdCBzdGF0ZSBmb3IgdGhlIE1vdmVBbGwoTGVmdHxSaWdodCkgYnV0
dG9ucw0KICAgICAgICAgICAgJHNlbGYtPl9TZXRCdXR0b25TdGF0ZSggJHNlbGYgKTsNCiAg
ICAgICAgfQ0KICAgIH0NCiAgICANCiAgICAkc2VsZi0+X2RlYnVnUHJpbnQoICJMZWF2aW5n
IF9Nb3ZlQWxsXG4iICk7DQp9DQoNCg0KDQojIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj
IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIw0K
Iw0KIyBfTW92ZQ0KIw0KIyBUaGlzIGlzIGFuIGludGVybmFsIG1ldGhvZC4gIEl0IGlzIHJl
c3BvbnNpYmxlIGZvciBtb3Zpbmcgc2VsZWN0ZWQgaXRlbXMNCiMgZnJvbSB0aGUgc291cmNl
IGxpc3QgdG8gdGhlIGRlc3RpbmF0aW9uIGxpc3QuDQojDQojIyMjIyMjIyMjIyMjIyMjIyMj
IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj
IyMjIyMjIw0Kc3ViIF9Nb3ZlDQp7DQogICAgbXkgJHNlbGYgICAgICAgPSBzaGlmdCBAXzsN
CiAgICBteSAkc3JjTGlzdGJveCA9IHNoaWZ0IEBfOw0KICAgIG15ICRkc3RMaXN0Ym94ID0g
c2hpZnQgQF87DQogICAgDQogICAgJHNlbGYtPl9kZWJ1Z1ByaW50KCAiRW50ZXJpbmcgX01v
dmVcbiIgKTsNCiAgICAjIGdldCB0aGUgbGlzdCBvZiBzZWxlY3RlZCBpdGVtcyBvbiB0aGUg
bGVmdCBhbmQgbW92ZSB0aGVtIHRvIHRoZSByaWdodA0KICAgIG15IEBzZWxlY3Rpb24gPSBy
ZXZlcnNlKCRzcmNMaXN0Ym94LT5jdXJzZWxlY3Rpb24oKSk7DQogICAgDQogICAgIyBjbGVh
ciB0aGUgc2VsZWN0aW9uLi4uDQogICAgJHNyY0xpc3Rib3gtPnNlbGVjdGlvbkNsZWFyKCAw
LCAnZW5kJyApOw0KICAgIA0KICAgIG15IEBsZWZ0TGlzdDsNCiAgICANCiAgICBmb3JlYWNo
IChAc2VsZWN0aW9uKQ0KICAgIHsNCiAgICAgICAgcHJpbnQgImdldHRpbmcgJF8gd2hpY2gg
aXMgIiwgJHNyY0xpc3Rib3gtPmdldCggJF8gKSwgIlxuIjsNCiAgICAgICAgcHVzaCBAbGVm
dExpc3QsICRzcmNMaXN0Ym94LT5nZXQoICRfICk7DQogICAgICAgICRzcmNMaXN0Ym94LT5k
ZWxldGUoICRfICk7DQogICAgfQ0KICAgIA0KICAgIGlmICggJCNsZWZ0TGlzdCA+PSAwICkN
CiAgICB7DQogICAgICAgICRzZWxmLT5fZGVidWdQcmludCggIm1vdmluZyB0aGUgZm9sbG93
aW5nOlxuIiwgam9pbiggIlxuIiwgQGxlZnRMaXN0ICksICJcbiIgKTsNCiAgICAgICAgDQog
ICAgICAgICMgZ2V0IHRoZSBsaXN0IG9mIGl0ZW1zIGluIHRoZSByaWdodCBsaXN0Ym94DQog
ICAgICAgIG15IEByaWdodExpc3QgPSAkZHN0TGlzdGJveC0+Z2V0KCAwLCAnZW5kJyApOw0K
ICAgICAgICAkZHN0TGlzdGJveC0+ZGVsZXRlKCAwLCAnZW5kJyApOw0KICAgICAgICAgICAg
DQogICAgICAgICMgYWRkIHRoZSByaWdodCBsaXN0IHRvIHRoZSBsZWZ0IGxpc3QgYW5kIHRo
ZW4gc29ydCB0aGVtDQogICAgICAgIHB1c2ggQGxlZnRMaXN0LCBAcmlnaHRMaXN0Ow0KICAg
ICAgICBAbGVmdExpc3QgPSBzb3J0KCBAbGVmdExpc3QgKTsNCiAgICAgICAgDQogICAgICAg
IGZvcmVhY2ggKEBsZWZ0TGlzdCkNCiAgICAgICAgew0KICAgICAgICAgICAgcHJpbnQgImlu
c2VydGluZyAkX1xuIjsNCiAgICAgICAgICAgICRkc3RMaXN0Ym94LT5pbnNlcnQoICdlbmQn
LCAkXyApOw0KICAgICAgICB9DQogICAgfQ0KICAgICRzZWxmLT5fU2V0QnV0dG9uU3RhdGUo
ICRzZWxmICk7DQogICAgDQogICAgJHNlbGYtPl9kZWJ1Z1ByaW50KCAiTGVhdmluZyBfTW92
ZVxuIiApOw0KfQ0KDQoNCg0KIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj
IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMNCiMNCiMgX0Jp
bmRNb3ZlDQojDQojIFRoaXMgaXMgYSBjb252ZW5pZW5jZSByb3V0aW5lLiAgSXQgc3RyaXBz
IG9mZiB0aGUgd2lkZ2V0IHRoYXQgaGFkIHRoZSBldmVudA0KIyBhbmQgdGhlIHNlbGYgd2lk
Z2V0IGFuZCB0aGVuIGNhbGxzIHRoZSBpbnRlcm5hbCBfTW92ZSBtZXRob2QNCiMNCiMjIyMj
IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj
IyMjIyMjIyMjIyMjIyMjIyMjIyMjDQpzdWIgX0JpbmRNb3ZlDQp7DQogICAgbXkgJHdpZGdl
dCA9IHNoaWZ0IEBfOw0KICAgIG15ICRzZWxmICAgPSBzaGlmdCBAXzsNCiAgICANCiAgICAk
c2VsZi0+X2RlYnVnUHJpbnQoICJFbnRlcmluZyBfQmluZE1vdmVcbiIgKTsNCiAgICANCiAg
ICAkc2VsZi0+X01vdmUoIEBfICk7DQogICAgDQogICAgJHNlbGYtPl9kZWJ1Z1ByaW50KCAi
TGVhdmluZyBfQmluZE1vdmVcbiIgKTsNCn0NCg0KDQoNCiMjIyMjIyMjIyMjIyMjIyMjIyMj
IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj
IyMjIyMjDQojDQojIF9TZXRCdXR0b25TdGF0ZQ0KIw0KIyBfU2V0QnV0dG9uU3RhdGUgY2hl
Y2tzIGFsbCB0aGUgbGlzdGJveGVzIGZvciBpdGVtcyBhbmQgZm9yIGEgc2VsZWN0aW9uLg0K
IyBJdCB0aGVuIGNvbmZpZ3VyZXMgdGhlIHN0YXRlIG9mIHRoZSBtb3ZlIGJ1dHRvbnMgdG8g
cmVmbGVjdCB3aGF0IGNhbg0KIyBiZSBkb25lLg0KIw0KIyBpLmUuIGlmIHRoZSBsZWZ0IGxp
c3QgaXMgZW1wdHksIGRpc2FibGUgdGhlIG1vdmUgYWxsIHJpZ2h0IGJ1dHRvbi4uLg0KIw0K
IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj
IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMNCnN1YiBfU2V0QnV0dG9uU3RhdGUNCnsNCiAg
ICBteSAkd2lkZ2V0ID0gc2hpZnQgQF87DQogICAgbXkgJHNlbGYgICA9IHNoaWZ0IEBfOw0K
ICAgIA0KICAgICRzZWxmLT5fZGVidWdQcmludCggIkVudGVyaW5nIF9TZXRCdXR0b25TdGF0
ZVxuIik7DQogICAgDQogICAgIyB3ZSBuZWVkIHRvIGZvciBhbGwgYnV0dG9uczoNCiAgICAj
ICAtIGdldCB0aGUgY291bnQgb2YgaXRlbXMgbGVmdCBpbiB0aGUgbGlzdGJveA0KICAgICMg
ICAgLSBpZiBubyBpdGVtcyBsZWZ0LCBkaXNhYmxlIHRoZSBtb3ZlIGFsbCBidXR0b24NCiAg
ICAjICAtIHNlZSBpZiB0aGVyZSBpcyBhIHNlbGVjdGlvbg0KICAgICMgICAgLSBpZiB0aGVy
ZSBpcyBhIHNlbGVjdGlvbiwgZW5hYmxlIHRoZSBtb3ZlIHNlbGVjdGlvbiBidXR0b24NCiAg
ICAjICAgIC0gZWxzZSwgZGlzYWJsZSB0aGUgbW92ZSBzZWxlY3Rpb24gYnV0dG9uDQogICAg
DQogICAgIyBIYW5kbGUgdGhlIGxlZnRMaXN0Ym94IGFuZCBNb3ZlUmlnaHQqIA0KICAgIGlm
ICggJHNlbGYtPnsnbGVmdExpc3Rib3gnfS0+c2l6ZSA+IDAgKQ0KICAgIHsNCiAgICAgICAg
IyBva2F5LCB3ZSBjYW4gY29uZmlndXJlIHRoZSBtb3ZlIGFsbCByaWdodCBidXR0b24gdG8g
YmUgYWN0aXZlDQogICAgICAgICRzZWxmLT57J21vdmVBbGxSaWdodCd9LT5jb25maWd1cmUo
IC1zdGF0ZSA9PiAnbm9ybWFsJyApOw0KICAgIH0NCiAgICBlbHNlDQogICAgew0KICAgICAg
ICAkc2VsZi0+eydtb3ZlQWxsUmlnaHQnfS0+Y29uZmlndXJlKCAtc3RhdGUgPT4gJ2Rpc2Fi
bGVkJyApOw0KICAgIH0NCiAgICANCiAgICBteSBAc2VsZWN0ZWQgPSAkc2VsZi0+eydsZWZ0
TGlzdGJveCd9LT5jdXJzZWxlY3Rpb24oKTsNCiAgICBpZiAoICQjc2VsZWN0ZWQgPj0gMCAp
DQogICAgew0KICAgICAgICAkc2VsZi0+eydtb3ZlU2VsZWN0ZWRSaWdodCd9LT5jb25maWd1
cmUoIC1zdGF0ZSA9PiAnbm9ybWFsJyk7DQogICAgfQ0KICAgIGVsc2UNCiAgICB7DQogICAg
ICAgICRzZWxmLT57J21vdmVTZWxlY3RlZFJpZ2h0J30tPmNvbmZpZ3VyZSggLXN0YXRlID0+
ICdkaXNhYmxlZCcpOw0KICAgIH0NCiAgICANCiAgICAjIEhhbmRsZSB0aGUgcmlnaHRMaXN0
Ym94IGFuZCBNb3ZlTGVmdCoNCiAgICBpZiAoICRzZWxmLT57J3JpZ2h0TGlzdGJveCd9LT5z
aXplID4gMCApDQogICAgew0KICAgICAgICAjIG9rYXksIHdlIGNhbiBjb25maWd1cmUgdGhl
IG1vdmUgYWxsIHJpZ2h0IGJ1dHRvbiB0byBiZSBhY3RpdmUNCiAgICAgICAgJHNlbGYtPnsn
bW92ZUFsbExlZnQnfS0+Y29uZmlndXJlKCAtc3RhdGUgPT4gJ25vcm1hbCcgKTsNCiAgICB9
DQogICAgZWxzZQ0KICAgIHsNCiAgICAgICAgJHNlbGYtPnsnbW92ZUFsbExlZnQnfS0+Y29u
ZmlndXJlKCAtc3RhdGUgPT4gJ2Rpc2FibGVkJyApOw0KICAgIH0NCiAgICANCiAgICBAc2Vs
ZWN0ZWQgPSAkc2VsZi0+eydyaWdodExpc3Rib3gnfS0+Y3Vyc2VsZWN0aW9uKCk7DQogICAg
aWYgKCAkI3NlbGVjdGVkID49IDAgKQ0KICAgIHsNCiAgICAgICAgJHNlbGYtPnsnbW92ZVNl
bGVjdGVkTGVmdCd9LT5jb25maWd1cmUoIC1zdGF0ZSA9PiAnbm9ybWFsJyk7DQogICAgfQ0K
ICAgIGVsc2UNCiAgICB7DQogICAgICAgICRzZWxmLT57J21vdmVTZWxlY3RlZExlZnQnfS0+
Y29uZmlndXJlKCAtc3RhdGUgPT4gJ2Rpc2FibGVkJyk7DQogICAgfQ0KICAgIA0KICAgICRz
ZWxmLT5fZGVidWdQcmludCggIkxlYXZpbmcgX1NldEJ1dHRvblN0YXRlXG4iKTsgICAgICAg
IA0KfQ0KDQoNCg0KIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj
IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMNCiMNCiMgX2RlYnVnUHJp
bnQNCiMNCiMgQSBzaW1wbGUgbWV0aG9kIHRvIHByaW50IGRlYnVnIGluZm9ybWF0aW9uIGJ1
dCBvbmx5IHdoZW4gZXhwbGljaXRseSB0dXJuZWQNCiMgb24gYnkgdGhlIHVzZXIuDQojDQoj
IFRoZSBtZXRob2Qgc2ltcGx5IHByaW50cyBlYWNoIHN0cmluZyBwYXNzZWQgaW4gdG8gc3Rk
b3V0LiAgVGhlcmUgaXMgbm8NCiMgZm9ybWF0dGluZyBkb25lIG9yIGV4dHJhIG5ld2xpbmVz
IGFkZGVkIGluLiAgVGhlIGZvcm1hdCBhbmQgd2hpdGUgc3BhY2UNCiMgaXMgZW50aXJlbHkg
bGVmdCB0byB0aGUgY2FsbGVyLg0KIw0KIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj
IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMNCnN1
YiBfZGVidWdQcmludA0Kew0KICAgIG15ICRzZWxmID0gc2hpZnQgQF87DQogICAgaWYgKCAk
c2VsZi0+eydkZWJ1Zyd9ICkNCiAgICB7DQogICAgICAgIGZvcmVhY2ggKEBfKQ0KICAgICAg
ICB7DQogICAgICAgICAgICBwcmludCAkXzsNCiAgICAgICAgfQ0KICAgIH0NCn0NCg0KX19F
TkRfXw0KPWhlYWQxIFRrOjpEdWFsTGlzdHMgLSBDcmVhdGUgYSBwYWlyIG9mIGxpc3RzIGFu
ZCBidXR0b25zIHRvIG1vdmUgaXRlbXMgYmV0d2VlbiB0aGVtDQoNCj1vdmVyIDQNCg0KICAg
ICogU1lOT1BTSVMNCiAgICAqIFNUQU5EQVJEIE9QVElPTlMNCiAgICAqIFdJREdFVC1TUEVD
SUZJQyBPUFRJT05TDQogICAgKiBERVNDUklQVElPTg0KICAgICogRElTUExBWSBJVEVNUw0K
ICAgICogV0lER0VUIE1FVEhPRFMNCiAgICAqIEJJTkRJTkdTDQogICAgKiBFWEFNUExFDQog
ICAgKiBCVUdTDQogICAgKiBLRVlXT1JEUw0KICAgICogU0VFIEFMU08NCiAgICAqIEFUVFJJ
QlVUSU9OL0xJQ0VOU0UNCj1iYWNrDQoNCj1oZWFkMiBTWU5PUFNJUw0KJGR1YWxsaXN0ID0g
JHBhcmVudC0+RHVhbExpc3RzKD9vcHRpb25zPyk7DQoNCj1oZWFkMiBTVEFOREFSRCBPUFRJ
T05TDQoNCkR1YWxMaXN0cyB0YWtlcyBtb3N0IG9mIHRoZSBvcHRpb25zIGEgc3RhbmRhcmQg
TGlzdGJveCBkb2VzLiAgVGhleSB3aWxsIGJlDQphcHBsaWVkIHRvIGJvdGggbGlzdHMuDQoN
Cj1oZWFkMiBXSURHRVQtU1BFQ0lGSUMgT1BUSU9OUw0KDQpCPC1saXN0dmFyaWFibGU+DQoN
CkEgcmVmZXJlbmNlIHRvIGFuIGFycmF5IG9mIGl0ZW1zLiAgU2ltaWxhciB0byB0aGUgLWxp
c3R2YXJpYWJsZSBvZg0KdGhlIHN0YW5kYXJkIExpc3Rib3ggYnV0IG9ubHkgYWZmZWN0cyB0
aGUgbGVmdCBoYW5kIHNpZGUuDQoNCkI8LWRlZmF1bHRzPg0KDQpUaGlzIGlzIGEgcmVmZXJl
bmNlIHRvIGFuIGFycmF5IG9mIGl0ZW1zLiAgVGhleSBhcmUgaW5zZXJ0ZWQgaW50byB0aGUg
cmlnaHQNCmhhbmQgbGlzdC4NCg0KQjwtc29ydG1ldGhvZD4gLSBjdXJyZW50bHkgbm90IGlt
cGxlbWVudGVkDQoNCkI8LXVuaXF1ZT4gLSBjdXJyZW50bHkgbm90IGltcGxlbWVudGVkDQoN
CkI8LXJlbW92ZT4gLSBjdXJyZW50bHkgbm90IGltcGxlbWVudGVkDQoNCg0KDQo9aGVhZDIg
REVTQ1JJUFRJT04NCg0KVGs6OkR1YWxMaXN0cyBpcyBhbiBhdHRlbXB0IHRvIGltcGxlbWVu
dCBhIHBhaXIgb2YgbGlzdCB3aWRnZXRzDQp3aXRoIGJ1dHRvbnMgdG8gbW92ZSBpdGVtcyBp
biBiZXR3ZWVuIHRoZW0uDQoNClRoZSBsZWZ0IGhhbmQsIGRlcGVuZGluZyBvbiBvcHRpb25z
LCBjb250YWlucyBhIGxpc3Qgb2YgaXRlbXMgdGhlIHVzZXINCmNhbiBtb3ZlIHRvIHRoZSBy
aWdodCBoYW5kIGxpc3QuICBCeSBkZWZhdWx0LCBpdGVtcyBtb3ZlZCBkaXNhcHBlYXIgZnJv
bQ0KdGhlIHNvdXJjZSBsaXN0IGFuZCBhcHBlYXIgaW4gdGhlIGRlc3RpbmF0aW9uIGxpc3Qu
ICBObyBkdXBsaWNhdGlvbiBpcyBhbGxvd2VkLg0KVGhpcyBtYXkgYmUgYWx0ZXJlZCBpbiB0
aGUgZnV0dXJlIHdpdGggdGhlIEI8LXVuaXF1ZT4gYW5kIEI8LXJlbW92ZT4gb3B0aW9ucy4N
Cg0KVHlwaWNhbGx5IHRoZSBhcHBsaWNhdGlvbiB3aWxsIHF1ZXJ5IHRoZSByaWdodCBoYW5k
IGxpc3QgZm9yIHRoZSBjb250ZW50cy4NClRoZSB1c2VyJ3MgY2hvaWNlcyBjYW4gdGhlbiBi
ZSBhY3RlZCB1cG9uLiANCg0KPWhlYWQyIFdJREdFVCBNRVRIT0RTDQoNCj1vdmVyIDQNCg0K
PWl0ZW0gSTwkZHVhbGxpc3Q+LT5FPEdldExlZnRDb250ZW50cz4oKQ0KDQpSZXR1cm4sIGlu
IGFuIGFycmF5IHRoZSBjb250ZW50cyBvZiB0aGUgbGVmdCBoYW5kIExpc3Rib3gNCg0KPWl0
ZW0gSTwkZHVhbGxpc3Q+LT5FPEdldFJpZ2h0Q29udGVudHM+KCkNCg0KUmV0dXJuLCBpbiBh
biBhcnJheSwgdGhlIGNvbnRlbnRzIG9mIHRoZSByaWdodCBoYW5kIExpc3Rib3gNCg0KPWl0
ZW0gSTwkZHVhbGxpc3Q+LT5FPEFkZEl0ZW0+KCAkYXJnMSwgJGFyZzIsIC4uLiwgJGFyZ04g
KQ0KDQpJbnNlcnQgaW50byB0aGUgbGVmdCBhcnJheSBhbnkgbnVtYmVyIG9mIGFyZ3VtZW50
cy4NCg0KPWl0ZW0gSTwkZHVhbGxpc3Q+LT5FPERlbGV0ZUl0ZW0+KCAkYXJnMSwgJGFyZzIs
IC4uLiwgJGFyZ04gKQ0KDQpSZW1vdmUgZnJvbSBlaXRoZXIgbGlzdCBhbnkgb2YgdGhlIGFy
Z3VtZW50cyBzcGVjaWZpZWQuICBCb3RoDQpsaXN0cyBhcmUgY2hlY2tlZCBhbmQgYW55IG9j
Y3VyYW5jZXMgcmVtb3ZlZCB0byBtYWtlIHN1cmUgdGhleQ0Kd2VyZSBub3QgbWlzc2VkLg0K
DQo9YmFjaw0KDQo9aGVhZDIgQklORElOR1MNCg0KPWl0ZW0gQnkgZGVmYXVsdCBhIGRvdWJs
ZSBjbGljayBvbiBhbiBpdGVtIGluIGVpdGhlciBsaXN0IG1vdmVzIHRoZSBzZWxlY3RlZA0K
aXRlbSB0byB0aGUgb3RoZXIgc2lkZQ0KDQo9aXRlbSBQcmVzc2luZyB0aGUgcmlnaHQgYXJy
b3cga2V5IHdoZW4gaXRlbXMgYXJlIHNlbGVjdGVkIGluIHRoZSBsZWZ0IGxpc3QNCndpbGwg
bW92ZSBhbGwgc2VsZWN0ZWQgaXRlbXMgdG8gdGhlIHJpZ2h0LiAgQ29udmVyc2VseSB0aGUg
c2FtZSBpcyB0cnVlIHdoZW4NCnVzaW5nIHRoZSBsZWZ0IGFycm93IGtleSBvbiBpdGVtcyBp
biB0aGUgcmlnaHQgbGlzdC4NCg0KPWhlYWQyIEVYQU1QTEUNCg0KPWhlYWQyIEJVR1MNCg0K
Tm9uZSBrbm93biBhdCB0aGlzIHRpbWUuLi4NCg0KPWhlYWQyIEFUVFJJQlVUSU9OL0xJQ0VO
U0UNClRoaXMgbW9kdWxlIHdhcyB3cml0dGVuIGJ5IFRvZGQgTGl0dGxlZmllbGQuICBJdCBp
cyByZWxlYXNlZCB1bmRlciB0aGUNCnNhbWUgbGljZW5zZSAoQXJ0aXN0aWMpIGFzIHBlcmwg
aXRzZWxmIGFuZCBtYXkgYmUgZnJlZWx5IGRpc3RyaWJ1dGVkIGFzIGxvbmcgYXMNCnRoZSBh
dHRyaWJ1dGlvbiBpcyBpbmNsdWRlZC4NCg0KQ29udGFjdCB0IGRvdCBsaXR0bGVmaWVsZCBh
dCBjb21jYXN0IGRvdCBuZXQgb3Igc2VuZCBhbiBlbWFpbCB0byB0aGUgcGVybC9Uaw0KZW1h
aWwgbGlzdCBpZiB5b3UgaGF2ZSBwcm9ibGVtcyBhbmQgSSdsbCB0cnkgdG8gcmVzcG9uZCB0
byB0aGVtLiA=
--------------040603050507060901020609
Content-Type: text/plain; charset="us-ascii"
MIME-Version: 1.0
Content-Transfer-Encoding: 7bit
Content-Disposition: inline
--++**==--++**==--++**==--++**==--++**==--++**==--++**==
ptk mailing list
[email protected]
https://mailman.stanford.edu/mailman/listinfo/ptk
--------------040603050507060901020609--