Java Threads mailing list archive

Java's scheduling of objects waiting on a monitor

From: Oyvind Teig <Oyvind.Teig@autronica.no>
Date: Wed, 4 Feb 1998 08:27:18 +0100

--bw0k8cvyavZtV1thLImY5bPfW58AATUc
Content-type: text/plain; charset="us-ascii"

Dear all

The attached htm-file contains some letters between Peter
Welch and myself, about Java's scheduling of objects waiting on a monitor.

Cheers,  

Oyvind Teig, Autronica, Trondheim, Norway
Oyvind.Teig@autronica.no
Tel.: +47 73 58 12 68
Fax.: +47 73 91 93 20

--bw0k8cvyavZtV1thLImY5bPfW58AATUc
Content-type: application/octetstring
Content-transfer-encoding: base64

PEhUTUw+DQo8SEVBRD4NCjxNRVRBIEhUVFAtRVFVSVY9IkNvbnRlbnQtVHlwZSIgQ09OVEVOVD0i
dGV4dC9odG1sOyBjaGFyc2V0PUlTTy04ODU5LTEiPg0KPFRJVExFPm1vbml0b3I8L1RJVExFPg0K
DQo8TUVUQSBOQU1FPSJHRU5FUkFUT1IiIENPTlRFTlQ9IkludGVybmV0IEFzc2lzdGFudCBmb3Ig
TWljcm9zb2Z0IFdvcmQgMi4wNHoiPg0KPC9IRUFEPg0KPEJPRFk+DQo8SDI+PEEgTkFNRT0iSW5k
ZXgiPkphdmEncyBzY2hlZHVsaW5nIG9mIG9iamVjdHMgd2FpdGluZyBvbiBhDQo8L0E+PFRUPm1v
bml0b3I8L1RUPjwvSDI+DQo8UD4NCiZPc2xhc2g7LlRlaWcsIDQuRmViLjE5OTgNCjxQPg0KVGhp
cyBwYXBlciBpbiBhbiBleHRyYWN0IG9mIGNvbW11bmljYXRpb24gYmV0d2VlbiBQLkguV2VsY2gg
KHBod0B1a2MuYWMudWspDQphbmQgJk9zbGFzaDt5dmluZCBUZWlnIChveXZpbmQudGVpZ0BhdXRy
b25pY2Eubm8pLiANCjxQPg0KSXQgaXMgYW4gaHRtbC1maWxlIHBhcnRseSBiZWNhdXNlIHRoZSBu
b3J3ZWdpYW4gY2hhcmFjdGVyIHNldA0KY2xhc2hlcyB3aXRoIGVuZ2xpc2ggY3VybHkgYnJhY2tl
dHMuIFRoaXMgd2lsbCBtYWtlIHRoZSBkb2N1bWVudA0Kd2hvbGUsIHNvIHRvIHNwZWFrLg0KPFA+
DQpXZSBoYXZlIHJ1biB0d28gSmF2YSBwcm9ncmFtcyBvbiBkaWZmZXJlbnQgcGxhdGZvcm1zOiA8
Qj5Db2xsZWdlLmphdmE8L0I+DQphbmQgPEI+VGFrZV9SZXMuamF2YTwvQj4uIA0KPFA+DQpUaGUg
PEEgSFJFRj0iI05ld0NvbGxlZ2UiPm5ldyBDb2xsZWdlLmphdmE8L0E+IGlzIGJhc2VkIG9uIFBl
dGVyJ3MNCjxBIEhSRUY9IiNPcmlnaW5hbENvbGxlZ2VUaGVDb2RlIj5vcmlnaW5hbCBDb2xsZWdl
LmphdmE8L0E+LCBhbmQNCmhhcyBub3RoaW5nIG1vcmUgdGhhbiBtYWtlLXVwIHRvIGl0OiBpdCBz
dW1tYXJpemVzIGluIGEgdGFibGUNCmhvdyBtYW55IGNoaWNrZW5zIGVhY2ggcGhpbG9zb3BoZXIg
ZWF0cy4gVGhpcyB0YWJsZSBpcyBwcmludGVkDQp0byBzY3JlZW4gd2hlbiB5b3UgcnVuIHRoZSBw
cm9ncmFtLg0KPFA+DQo8QSBIUkVGPSIjVGFrZV9SZXMiPlRha2VfUmVzLmphdmE8L0E+IGhhcyBi
ZWVuIHdyaXR0ZW4gYWZ0ZXIgUGV0ZXIncw0Kc3BlY2lmaWNhdGlvbnMgaW4gYSBjb21tZW50IGlu
IDxBIEhSRUY9IiNPcmlnaW5hbENvbGxlZ2UiPm9yaWdpbmFsIENvbGxlZ2U8L0E+Lg0KQWdhaW4g
bWFrZS11cCBieSAmT3NsYXNoO3l2aW5kOiBhbiBpbXBsZW1lbnRhdGlvbiBvZiBUYWtlX1Jlcw0K
YWZ0ZXIgUGV0ZXIncyBzcGVjLg0KPFA+DQpJIGhhdmUgZG9uZSBzb21lIDxBIEhSRUY9IiNPeXZp
bmRzTWVhc3VyZW1lbnRzIj5tZWFzdXJlbWVudHM8L0E+DQpvbiBQQ3MuIFBldGVyIGhhcyBhbHNv
IGRvbmUgc29tZSBtZWFzdXJlbWVudHMsIHRoZXkgYXJlIHNjYXR0ZXJlZA0KYXJvdW5kLg0KPFA+
DQpUaGUgaW50ZXJlc3RpbmcgdGhpbmcgaXMgPEEgSFJFRj0iI1BldGVyc0NvbmNsdXNpb24iPlBl
dGVyJ3MgY29uY2x1c2lvbjwvQT4NCmJlbG93Lg0KPFA+DQpIb3dldmVyLCBJIGhhdmUgc29tZSBj
b21tZW50cy4gUGVyIEJyaW5jaCBIYW5zZW4gd3JpdGVzOg0KPEJMT0NLUVVPVEU+DQo8Q0lURT5B
bGwgcHJvY2Vzc2VzIHdhaXRpbmcgZm9yIG9uZSBjb25kaXRpb24gb3IgYW5vdGhlciBvbiB2YXJp
YWJsZTxCPg0KdjwvQj4gZW50ZXIgdGhlIHNhbWUgZXZlbnQgcXVldWUuV2hlbiBhbm90aGVyIHBy
b2Nlc3MgKGhlcmUgY2FsbGVkDQp0aGUgcHJvZHVjZXIpIGNoYW5nZXMgPEI+djwvQj4gYnkgYSBz
dGF0ZW1lbnQgPEI+UzI8L0I+IGluc2lkZQ0KYSBjcml0aWNhbCByZWdpb24sIGl0IGlzIHBvc3Np
YmxlIHRoYXQgb25lIG9yIG1vcmUgb2YgdGhlIGNvbmRpdGlvbnMNCmV4cGVjdGVkIGJ5IHByb2Nl
c3NlcyBpbiB0aGUgZXZlbnQgcXVldWUgd2lsbCBiZSBzYXRpc2ZpZWQuIFNvLA0KYWZ0ZXIgY29t
cGxldGlvbiBvZiBhIGNyaXRpY2FsIHJlZ2lvbiwgYWxsIHByb2Nlc3NlcyBpbiB0aGUgZXZlbnQN
CnF1ZXVlIDxCPlFlPC9CPiBhcmUgdHJhbnNmZXJyZWQgdG8gdGhlIG1haW4gcXVldWUgPEI+UXY8
L0I+IHRvDQplbmFibGUgdGhlbSB0byByZWVudGVyIHRoZWlyIGNyaXRpY2FsIHJlZ2lvbnMgYW5k
IGluc3BlY3QgdGhlDQpzaGFyZWQgdmFyaWFibGUgPEI+djwvQj4gYWdhaW4uIDwvQ0lURT5bU3Ry
dWN0dXJlZCBNdWx0aXByb2dyYW1taW5nLA0KQ29tbS5vZiBBQ00sIEp1bHkgMTk3MiwgcC41NzZd
DQo8L0JMT0NLUVVPVEU+DQo8UD4NCkRvZXMgdGhpcyBkZXNjcmliZSBKYXZhJ3Mgd2FpdGluZyBv
biBhIG1vbml0b3I6IG9uZSBxdWV1ZSBmb3INCnRoZSBvYmplY3QncyBtb25pdG9yLCBhbmQgb25l
IHJlYWR5LXF1ZXVlIG9mIHRocmVhZHMgdG8gcnVuPyBJDQppbWFnaW5lIHRoYXQgdGhlIHNpdHVh
dGlvbiBCcmluY2ggSGFuc2VuIGRlc2NyaWJlcyBpcyA8VFQ+bm90aWZ5QWxsPC9UVD4sDQpzaW5j
ZSA8ST5hbGw8L0k+IGFyZSBtb3ZlZCBvZmYgUWUgKHBsZWFzZSBjb3JyZWN0IG1lIGhlcmUpLiBX
aGVyZQ0KbGllcyB0aGUgSmF2YSBwcm9ibGVtPyBJcyBpdCBpbiB0aGUgbW9uaXRvciBxdWV1ZSBh
ZG1pbmlzdHJhdGlvbg0KKHF1ZXVlLCBzdGFjaywgY29tYmluYXRpb24/KSBvciBpcyBpdCB3aGVu
IHRoZSBtb25pdG9yIHF1ZXVlIGlzDQp0cmFuc2ZlcnJlZCB0byB0aGUgcmVhZHktcXVldWUgKGxp
bmVhciBvciBzd2FwIG9yIGNvbWJpbmF0aW9uKT8NCjxQPg0KSG9hcmUsIGluIGhpcyBzZW1pbmFs
IHBhcGVyIHN0YXRlcyB0aGF0Og0KPEJMT0NLUVVPVEU+DQo8Q0lURT4mcXVvdDtJZiBtb3JlIHRo
YW4gb25lIHByb2dyYW0gaXMgd2FpdGluZyBvbiBhIGNvbmRpdGlvbiwNCndlIHBvc3R1bGF0ZSB0
aGF0IHRoZSBzaWduYWwgb3BlcmF0aW9uIHdpbGwgcmVhY3RpdmF0ZSB0aGUgbG9uZ2VzdA0Kd2Fp
dGluZyBwcm9ncmFtLiBUaGlzIGdpdmVzIGEgc2ltcGxlIG5ldXRyYWwgcXVldWluZyBkaXNjaXBs
aW5lDQp3aGljaCBlbnN1cmVzIHRoYXQgZXZlcnkgcHJvZ3JhbSB3aWxsIGV2ZW50dWFsbHkgZ2V0
IGl0cyB0dXJuJnF1b3Q7Lg0KPC9DSVRFPltNb25pdG9yczogQW4gT3BlcmF0aW5nIFN5c3RlbSBT
dHJ1Y3R1cmluZyBDb25jZXB0LCBDb21tLm9mIEFDTSwNCjU0OS01NTcsIDE5NzRdDQo8L0JMT0NL
UVVPVEU+DQo8UD4NCklzbid0IHRoaXMgPEk+cG9zdHVsYXRlPC9JPiBhIDxJPnJlcXVpcmVtZW50
PC9JPj8NCjxIMz48QSBOQU1FPSJQZXRlcnNDb25jbHVzaW9uIj48L0E+PEEgSFJFRj0iI0luZGV4
Ij5QZXRlcnMncyBjb25jbHVzaW9uPC9BPg0KPC9IMz4NCjxQUkU+DQo8Q09ERT57e3sgIFBldGVy
cydzIGNvbmNsdXNpb24NCk95dmluZCwNCg0KV293ISAgWW91J3ZlIGJlZW4gd29ya2luZyBoYXJk
ISENCg0KWW91ciByZXN1bHRzIHNlZW0gdG8gYmUgYXMgcHJlZGljdGVkIC4uLiBhbmQgdGhlIGNv
bmNsdXNpb25zIHJlbWFpbiB0aGF0Og0KDQogIDEuIFN0YXJ2YXRpb24gaXMgaGFyZCAoaW1wb3Nz
aWJsZT8pIHRvIGVsaW1pbmF0ZSBpZiB5b3Ugc3luY2hyb25pc2UNCiAgICAgdmlhIGEgc3RhY2sg
LS0gZXZlbiB3b3JzZSBpZiB5b3Ugd2FpdCB2aWEgYSBzdGFjayBhcyB3ZWxsLiAgU2hhcmVkDQog
ICAgIEphdmFQUCBjaGFubmVscyBjYW5ub3QgYmUgZGVmZW5kZWQgYWdhaW5zdCBzdGFydmF0aW9u
IGluIHRoaXMgY2FzZS4NCg0KICAgICBUaGUgS2FmZmUgVmlydHVhbCBNYWNoaW5lIChvbiBMaW51
eCBhbmQgU3VuT1MpIHVzZXMgc3VjaCBzdGFja3MuDQoNCiAgMi4gU3RhcnZhdGlvbiAqY2FuKiBi
ZSBlbGltaW5hdGVkIGlmIHlvdSBzeW5jaHJvbmlzZSBhbmQgd2FpdCB2aWEgYSBxdWV1ZS4NCiAg
ICAgVGhlIG5vcm1hbCBwcm9ncmFtbWluZyBwYXR0ZXJuIGZvciBtb25pdG9ycyAod2FpdGluZyBp
biBhIGxvb3AgdGhhdA0KICAgICBhbHdheXMgcmV0ZXN0cyB0aGUgd2FpdCBjb25kaXRpb24pIGRv
ZXMgPFU+bm90PC9VPiBndWFyYW50ZWUgYWdhaW5zdA0KICAgICBzdGFydmF0aW9uIGFuZCBicmlu
Z3MgaW4gbGl2ZWxvY2sgZGFuZ2VyIGFzIHdlbGwuICBKYXZhUFAgY2hhbm5lbHMNCiAgICAgKGlu
Y2x1ZGluZyBzaGFyZWQgb25lcykgZG8gPFU+bm90PC9VPiBpbnRyb2R1Y2Ugc3RhcnZhdGlvbiBv
ciBsaXZlbG9jaw0KICAgICAoYWx0aG91Z2gsIG9mIGNvdXJzZSwgdGhleSBjb3VsZCBiZSBpbnRy
b2R1Y2VkIGF0IHRoZSBhcHBsaWNhdGlvbg0KICAgICBsZXZlbCkuDQoNCiAgICAgU3VuJ3MgYW5k
IHRoZSBTeW1hbnRpYyBKYXZhIFZpcnR1YWwgTWFjaGluZXMgKG9uICc5NSBhbmQgU3VuT1MvU29s
YXJpcykNCiAgICAgdXNlIHF1ZXVlcy4NCg0KRG8geW91IGhhdmUgYW55IHRpbWUgdG8gZm9yd2Fy
ZCBvdXIgZW1haWxzIG9uIHRoaXMgdG8gamF2YS10aHJlYWRzPEEgSFJFRj0iI0luZGV4Ij4/PC9B
Pg0KDQpDaGVlcnMsDQoNClBldGVyLg0KfX19ICANCg0KDQo8L0NPREU+DQo8L1BSRT4NCjxIND48
QSBOQU1FPSJPeXZpbmRzTWVhc3VyZW1lbnRzIj48L0E+PEEgSFJFRj0iI0luZGV4Ij4mT3NsYXNo
O3l2aW5kJ3MgbWVhc3VyZW1lbnRzPC9BPg0KPC9IND4NCjxQUkU+DQo8Q09ERT57e3sgICZPc2xh
c2g7eXZpbmQncyBjb25jbHVzaW9uDQpQZXRlcg0KM0ZlYjk4DQoNCkhlcmUgYXJlIHRoZSByZXN1
bHRzIG9mIG15IHRlc3RzOg0KDQpSdW50aW1lIEE6IFN1biAxLjEuNQ0KICAgICAgICAgICBXaW5k
b3dzIDk1DQogICAgICAgICAgIChMb2FkZWQgZnJvbSBTdW4sIHByb2R1Y2VkIGJ5IFN1bi4gQWN0
dWFsbHksIG9uDQogICAgICAgICAgIFN1bidzICZxdW90O0phdmEgRGV2ZWxvcGVyJ3MgQ29tcGFu
aW9uJnF1b3Q7IENEIHRoYXQgSSBvcmRlcmVkDQogICAgICAgICAgIGFuZCBwYWlkIG92ZXIgaW50
ZXJuZXQpDQoNClJ1bnRpbWUgQjogU3ltYW50ZWMgSmF2YSEgSnVzdEluVGltZSBDb21waWxlcg0K
ICAgICAgICAgICBXaW5kb3dzIDk1DQogICAgICAgICAgIFZlcnNpb24gMjEwLjA2MyBmb3IgSkRL
IDEuMS4zDQogICAgICAgICAgIChCb3VnaHQgZnJvbSBTeW1hbnRlYywgcGFydCBvZiAmcXVvdDtW
aXN1YWwgQ2FmZSZxdW90OykNCg0KUnVudGltZSBDOiBLYWZmZSBWaXJ0dWFsIE1hY2hpbmUsIFQu
Si5XaWxraW5zb24gJmFtcDsgQXNzLiBMb25kb24NCiAgICAgICAgICAgSklUIDAuOTIsIGphdmEg
MS4xLjINCiAgICAgICAgICAgTGludXggb24gUEMNCg0KQ29sbGVnZQ0KICBBbHNvIGNhbGxlZCAm
cXVvdDtHcmVlZHlQaGlsc29waGVyJnF1b3Q7DQogIFRoZSBncmVlZHkgcGhpbG9zb3BoZXIgZ2V0
cyBub3RoaW5nIG9yIHZlcnkgbGl0dGxlIGNvbXBhcmVkIHdpdGggdGhlIHJlc3QuDQogIFNhbWUg
YmVoYXZpb3VyIGluIHJ1bnRpbWUgQSBhbmQgQi4NCiAgUnVudGltZSBDOiBUaGUgR3JlZWR5IGdl
dCB2ZXJ5IG11Y2gsIG5vYm9keSBzdGFydmVzDQpUYWtlX1Jlcw0KICBDb21wZXRpbmcgZm9yIHJl
c291cmNlIHdpdGhvdXQgd2FpdHMuDQogIEJvdGggQSxCIGFuZCBDIGdldCB0aGUgcmVzb3VyY2Uu
DQogIFNhbWUgYmVoYXZpb3VyIGluIHJ1bnRpbWUgQSBhbmQgQi4NCiAgUnVudGltZSBDOiBCIGdl
dHMgbm90aGluZyENCg0KQ29uY2x1c2lvbjoNCiAgU3VuIGFuZCBTeW1hbnRlYyBvbiBXaW45NSBo
YXZlIHF1ZXVlLg0KICBLYWZmZSBvbiBMaW51eCBoYXMgc3RhY2suDQp9fX0gIA0KDQoNCjwvQ09E
RT4NCjwvUFJFPg0KPEgzPjxBIE5BTUU9Ik5ld0NvbGxlZ2UiPjwvQT48QSBIUkVGPSIjSW5kZXgi
Pk5ldyBDb2xsZWdlLmphdmE8L0E+DQo8L0gzPg0KPFA+DQpJIGhhdmUga2VwdCB0aGUgZmlsZSBm
b2xkaW5nIGluZm9ybWF0aW9uICh3aGljaCBsZWF2ZXMgdGhlIGNvZGUNCm5vdCB2ZXJ5IHJlYWRh
YmxlIGhlcmUpLg0KPFBSRT4NCjxDT0RFPnt7eyAgQ29sbGVnZS5qYXZhDQp7e3sgIENvbnN0YW50
cw0KY2xhc3MgQ29uc3RhbnRzew0KICAgcHJpdmF0ZSBpbnQgbm9PZlBoaWxvc29waGVyczsNCiAg
IHByaXZhdGUgaW50IGlkT2ZHcmVlZHlQaGlsb3NvcGhlcjsNCiAgIHByaXZhdGUgaW50IG5vT2ZD
aGlja2VuczsNCiAgIHByaXZhdGUgaW50IGNhbnRlZW5QbGFjZUFuZEhvbGRRdWV1ZV9tczsNCiAg
IHByaXZhdGUgaW50IGNvb2tCeUNoZWZfbXM7DQogICBwcml2YXRlIGludCB0aGlua0J5SHVtYmxl
UGhpbG9zb3BoZXJzX21zOw0KDQogICBwdWJsaWMgQ29uc3RhbnRzIChDb25zdGFudHMgY29uc3Rh
bnRzKXsNCiAgICAgIHRoaXMubm9PZlBoaWxvc29waGVycyAgICAgICAgICAgICA9IGNvbnN0YW50
cy5nZXROb09mUGhpbG9zb3BoZXJzKCk7DQogICAgICB0aGlzLmlkT2ZHcmVlZHlQaGlsb3NvcGhl
ciAgICAgICAgID0gY29uc3RhbnRzLmdldElkT2ZHcmVlZHlQaGlsb3NvcGhlcigpOw0KICAgICAg
dGhpcy5ub09mQ2hpY2tlbnMgICAgICAgICAgICAgICAgID0gY29uc3RhbnRzLmdldE5vT2ZDaGlj
a2VucygpOw0KICAgICAgdGhpcy5jYW50ZWVuUGxhY2VBbmRIb2xkUXVldWVfbXMgID0gY29uc3Rh
bnRzLmdldENhbnRlZW5QbGFjZUFuZEhvbGRRdWV1ZV9tcygpOw0KICAgICAgdGhpcy5jb29rQnlD
aGVmX21zICAgICAgICAgICAgICAgID0gY29uc3RhbnRzLmdldENvb2tCeUNoZWZfbXMoKTsNCiAg
ICAgIHRoaXMudGhpbmtCeUh1bWJsZVBoaWxvc29waGVyc19tcyA9IGNvbnN0YW50cy5nZXRUaGlu
a0J5SHVtYmxlUGhpbG9zb3BoZXJzX21zKCk7DQogICB9DQogICBwdWJsaWMgQ29uc3RhbnRzIChp
bnQgbm9PZlBoaWxvc29waGVycywNCiAgICAgIGludCBpZE9mR3JlZWR5UGhpbG9zcGhlLA0KICAg
ICAgaW50IG5vT2ZDaGlja2VucywNCiAgICAgIGludCBjYW50ZWVuUGxhY2VBbmRIb2xkUXVldWVf
bXMsDQogICAgICBpbnQgY29va0J5Q2hlZl9tcywNCiAgICAgIGludCB0aGlua0J5SHVtYmxlUGhp
bG9zb3BoZXJzX21zKXsNCg0KICAgICAgdGhpcy5ub09mUGhpbG9zb3BoZXJzICAgICAgICAgICAg
ID0gbm9PZlBoaWxvc29waGVyczsNCiAgICAgIHRoaXMuaWRPZkdyZWVkeVBoaWxvc29waGVyICAg
ICAgICAgPSBpZE9mR3JlZWR5UGhpbG9zb3BoZXI7DQogICAgICB0aGlzLm5vT2ZDaGlja2VucyAg
ICAgICAgICAgICAgICAgPSBub09mQ2hpY2tlbnM7DQogICAgICB0aGlzLmNhbnRlZW5QbGFjZUFu
ZEhvbGRRdWV1ZV9tcyAgPSBjYW50ZWVuUGxhY2VBbmRIb2xkUXVldWVfbXM7DQogICAgICB0aGlz
LmNvb2tCeUNoZWZfbXMgICAgICAgICAgICAgICAgPSBjb29rQnlDaGVmX21zOw0KICAgICAgdGhp
cy50aGlua0J5SHVtYmxlUGhpbG9zb3BoZXJzX21zID0gdGhpbmtCeUh1bWJsZVBoaWxvc29waGVy
c19tczsNCiAgIH0NCiAgIHB1YmxpYyBpbnQgZ2V0Tm9PZlBoaWxvc29waGVycygpew0KICAgICAg
cmV0dXJuIChub09mUGhpbG9zb3BoZXJzKTsNCiAgIH0NCiAgIHB1YmxpYyBpbnQgZ2V0SWRPZkdy
ZWVkeVBoaWxvc29waGVyKCl7DQogICAgICByZXR1cm4gKGlkT2ZHcmVlZHlQaGlsb3NvcGhlcik7
DQogICB9DQogICBwdWJsaWMgaW50IGdldE5vT2ZDaGlja2Vucygpew0KICAgICAgIHJldHVybiAo
bm9PZkNoaWNrZW5zKTsNCiAgIH0NCiAgIHB1YmxpYyBpbnQgZ2V0Q2FudGVlblBsYWNlQW5kSG9s
ZFF1ZXVlX21zKCl7DQogICAgICAgcmV0dXJuIChjYW50ZWVuUGxhY2VBbmRIb2xkUXVldWVfbXMp
Ow0KICAgfQ0KICAgcHVibGljIGludCBnZXRDb29rQnlDaGVmX21zKCl7DQogICAgICAgcmV0dXJu
IChjb29rQnlDaGVmX21zKTsNCiAgIH0NCiAgIHB1YmxpYyBpbnQgZ2V0VGhpbmtCeUh1bWJsZVBo
aWxvc29waGVyc19tcygpew0KICAgICAgIHJldHVybiAodGhpbmtCeUh1bWJsZVBoaWxvc29waGVy
c19tcyk7DQogICB9DQp9DQp9fX0gIA0KY2xhc3MgQ2FudGVlbnsgLy8gUGFzc2l2ZQ0KICAge3t7
ICBDb21tZW50DQogICAvLw0KICAgLy8gUGhpbG9zcGhlcnMgZWF0IGNoaWNrZW5zLiAgVGhleSBx
dWV1ZSB1cCBhdCB0aGUgY2FudGVlbiB0byB1c2UgdGhlIGBnZXQnDQogICAvLyBtZXRob2QuICBJ
bnNpZGUgdGhlIGBnZXQnIG1ldGhvZCwgdGhleSBnZXQgc2VydmVkIHN0cmFpZ2h0IGF3YXkgc28g
bG9uZw0KICAgLy8gYXMgdGhlcmUgYXJlIHNvbWUgY2hpY2tlbnMgcmVhZHkuICBPdGhlcndpc2Ug
dGhleSBgd2FpdCcgb24gc3RhbmQtYnkuDQogICAvLw0KICAgLy8gVGhlIGNoZWYgY29va3MgY2hp
Y2tlbnMuICBXaGVuIGhlIGhhcyBhIGJhdGNoIHJlYWR5LCBoZSBhbHNvIHF1ZXVlcyB1cA0KICAg
Ly8gYXQgdGhlIGNhbnRlZW4gaW4gb3JkZXIgdG8gdXNlIHRoZSBgcHV0JyBtZXRob2QuICBUaGlz
IGludm9sdmVzIHNldHRpbmcNCiAgIC8vIGRvd24gdGhlIGJhdGNoIC0tIHdoaWNoIHRha2VzIGFy
b3VuZCAzIHNlY29uZHMgLS0gYW5kIGNsZWFyaW5nIHRoZSBzdGFuZC1ieQ0KICAgLy8gcXVldWUg
KG9mIHBoaWxvc29waGVycyB3YWl0aW5nIGZvciBjaGlja2VucykgYnkgY2FsbGluZyBgbm90aWZ5
QWxsJy4NCiAgIC8vDQogICB7e3sgIG5vdGUgMQ0KICAgLy8NCiAgIC8vIENsZWFybHksIHRoZSBD
aGVmIHNob3VsZCBub3QgaGF2ZSB0byBxdWV1ZSB1cCB3aXRoIHRoZSBQaGlsb3NvcGhlcnMgdG8N
CiAgIC8vIGdldCBpbnRvIHRoZSBDYW50ZWVuLiAgVGhlIFBoaWxvc29waGVycyBzaG91bGQgaGF2
ZSB0aGVpciBvd24gcXVldWUgYW5kDQogICAvLyB0aGUgQ2hlZiBzaG91bGQgb25seSBoYXZlIHRv
IGNvbnRlbmQgd2l0aCBvbmUgUGhpbG9zcGhlciB3aGVuIGRlYWxpbmcgd2l0aA0KICAgLy8gdGhl
IGNoaWNrZW5zIGluIHRoZSBjYW50ZWVuLiAgU3VjaCBhIHNlcGFyYXRlIHF1ZXVlIGZvciB0aGUg
UGhpbG9zb3BoZXJzIGlzDQogICAvLyBqdXN0IGxpa2UgdGhlIHNlcGVyYXRlIHF1ZXVlcyBmb3Ig
cmVhZGVycy93cml0ZXJzIHRoYXQgd2UgbmVlZGVkIGZvciB0aGUNCiAgIC8vIHNlY3VyZWx5IHNo
YXJlZCBDaGFubmVsIG9yIEJ1ZmZlciBjbGFzcy4gIEhvd2V2ZXIsIHdlIGFyZSBtb2RlbGxpbmcg
dGhpcw0KICAgLy8gQ2FudGVlbiBvbiB0aGUgQ3ViYnlIb2xlIGNsYXNzICh0byBzaG93IHRoZSBk
YW5nZXIgb2Ygc3RhcnZhdGlvbiBpdCBjb250YWlucykNCiAgIC8vIGFuZCBDdWJieUhvbGUgaGFz
IGl0cyBxdWV1ZSBzaGFyZWQgYnkgYm90aCByZWFkZXJzIGFuZCB3cml0ZXJzLg0KICAgLy8NCiAg
IH19fSAgDQogICB7e3sgIG5vdGUgMg0KICAgLy8NCiAgIC8vIEFsbCBtZXRob2RzLCBhcGFydCBm
cm9tIHRoZSBgcnVuJyBtZXRob2QsIGFyZSBleGVjdXRlZCBhcyBwYXJ0IG9mIHRoZSB0aHJlYWQN
CiAgIC8vIG9mIGNvbnRyb2wgb2YgdGhlaXIgY2FsbGluZyBvYmplY3RzLiAgVGhpcyBpcyBwYXJ0
aWN1bGFybHkgY2xlYXIgaGVyZSwgd2hlcmUNCiAgIC8vIHdlIHNlZSB0aGVtIHNwZWFraW5nICph
cyogdGhvc2UgY2FsbGluZyBvYmplY3RzLiAgRm9yIGluc3RhbmNlLCB0aGUgYGdldCcNCiAgIC8v
IG1ldGhvZCBpcyBwYXJ0IG9mIHRoZSBsaWZlIG9mIHRoZSBjYWxsaW5nIFBoaWxvc29waGVyIGFu
ZCBgcHV0JyBpcyBwYXJ0IG9mDQogICAvLyB0aGUgbGlmZSBvZiB0aGUgQ2hlZi4gIFNvLCB0aGlz
IENhbnRlZW4gJnF1b3Q7b2JqZWN0JnF1b3Q7IGhhcyBiaXRzIG9mIFBoaWxvc29waGVyLQ0KICAg
Ly8gYWxnb3JpdGhtIGFuZCBiaXRzIG9mIENoZWYtYWxnb3JpdGhtIGZvciBpdHMgbWV0aG9kcyAt
LSBhIHNvbWV3aGF0IGNvbmZ1c2VkDQogICAvLyBzZXQgb2Ygcm9sZXMgZm9yIHNvbWV0aGluZyB0
aGF0J3Mgc3VwcG9zZWQgdG8gYmUgYSBDYW50ZWVuLiAgVGhlcmUncyBub3RoaW5nDQogICAvLyBp
biB0aGVzZSBtZXRob2RzIHRoYXQgYXJlIG9yaWVudGVkIHRvd2FyZHMgdGhlIGxpZmUgb2YgdGhl
IENhbnRlZW4uDQogICAvLw0KICAgLy8gU28sIGFsb25nc2lkZSB0aGUgc2VtYW50aWMgaW1wcmVj
aXNpb24gb2YgYHdhaXQvbm90aWZ5JyBhbmQgYWxvbmdzaWRlIHRoZQ0KICAgLy8gbm9uLWNvbXBv
c2l0aW9uYWwgKG9yLCBpZiB5b3UgcHJlZmVyLCBub24tcmVmZXJlbnRpYWxseS10cmFuc3BhcmVu
dCkgc2VtYW50aWNzDQogICAvLyBvZiBtZXRob2RzIGluIGdlbmVyYWwsIHdlIGhhdmUgdG8gY29t
ZSB0byB0ZXJtcyB3aXRoIHRoZSBpZGVhIHRoYXQgbm8gbWV0aG9kcw0KICAgLy8gKGFwYXJ0IGZy
b20gYHJ1bicpIGFyZSBvcmllbnRlZCB0b3dhcmRzIHRoZSAmcXVvdDtvYmplY3RzJnF1b3Q7IG9m
IHdoaWNoIHRoZXkgYXJlDQogICAvLyBzdXBwb3NlZCB0byBiZSBhIHBhcnQuICBTbyBtdWNoIGZv
ciAmcXVvdDtvYmplY3Qtb3JpZW50YXRpb24mcXVvdDsgaW4gdGhlIGZvcm1hbCwgYW5kDQogICAv
LyBxdWl0ZSBhcmJpdHJhcnksIGRlZmluaXRpb24gb2YgdGhlIHRlcm0hICBJIGJlbGlldmUgdGhh
dCB0aGUgZmlyc3QgdHdvDQogICAvLyBwcm9ibGVtcyByZWZlcmVuY2VkIGluIHRoaXMgcGFyYWdy
YXBoIGFyZSBhIGRpcmVjdCBjb25zZXF1ZW5jZSBvZiB0aGUgdGhpcmQuDQogICAvLyBUaGVzZSBw
cm9ibGVtcyBhcmUgbm90IHNwZWNpYWwgdG8gdGhpcyBDYW50ZWVuLCBidXQgYXJlIHVuaXZlcnNh
bCBhY3Jvc3MNCiAgIC8vIGFsbCBwYXNzaXZlIG9iamVjdHMuDQogICAvLw0KICAgLy8gVGhlIENh
bnRlZW4gc2hvdWxkLCBvZiBjb3Vyc2UsIGJlIGltcGxlbWVudGVkIGFzIGFuIGFjdGl2ZSBvYmpl
Y3QgY29ubmVjdGVkDQogICAvLyB0byB0aGUgcGhpbG9zb3BoZXJzIGFuZCB0aGUgY2hlZiB2aWEg
c2ltcGxlIGNoYW5uZWxzIG9yIGJ1ZmZlcnMuICBUaGVuLCB3ZQ0KICAgLy8gd291bGRuJ3QgaGF2
ZSB0aGUgcHJvYmxlbXMgYXJpc2luZyBmcm9tIHRoaXMgZGVzaWduLiAgVGhpcyBpcyBsZWZ0IGFz
IGFuDQogICAvLyBleGVyY2lzZSENCiAgIC8vDQogICB9fX0gIA0KICAgfX19ICANCiAgIHt7eyAg
RGVjbGFyYXRpb25zDQogICBwcml2YXRlIGludCBub09mQ2hpY2tlbnMgPSAwOw0KICAgcHJpdmF0
ZSBDb25zdGFudHMgY29uc3RhbnRzOw0KICAgcHJpdmF0ZSBpbnQgbm9PZk1lYWxzW107DQogICBw
cml2YXRlIGJvb2xlYW4gcmVwb3J0ID0gdHJ1ZTsNCiAgIH19fSAgDQogICB7e3sgIENhbnRlZW4N
CiAgIHB1YmxpYyBDYW50ZWVuIChDb25zdGFudHMgY29uc3RhbnRzKXsNCiAgICAgIHRoaXMuY29u
c3RhbnRzID0gbmV3IENvbnN0YW50cyhjb25zdGFudHMpOw0KICAgICAgbm9PZk1lYWxzID0gbmV3
IGludFtjb25zdGFudHMuZ2V0Tm9PZlBoaWxvc29waGVycygpXTsNCg0KICAgICAgZm9yIChpbnQg
aSA9IDA7IGkgJmx0OyBjb25zdGFudHMuZ2V0Tm9PZlBoaWxvc29waGVycygpOyBpKyspew0KICAg
ICAgICAgbm9PZk1lYWxzW2ldID0gMDsNCiAgICAgIH0NCiAgIH0NCiAgIH19fSAgDQogICB7e3sg
IHJlcG9ydA0KICAgcHVibGljIHN5bmNocm9uaXplZCB2b2lkIHJlcG9ydCAoYm9vbGVhbiByZXBv
cnQpew0KICAgICAgdGhpcy5yZXBvcnQgPSByZXBvcnQ7DQogICAgICBpZiAocmVwb3J0ID09IGZh
bHNlKXsNCiAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbg0KICAgICAgICAgICAgKCZxdW90O1xu
V0lMTCBOT1cgUkVQT1JUIE5VTUJFUiBPRiBFQVRFTiBDSElDS0VOUyBGT1IgRUFDSCBQSElMT1NP
UEhFUiZxdW90OyArDQogICAgICAgICAgICAgJnF1b3Q7XG5TaW5jZSBwcmludGluZyBpcyBtb3Jl
IHJhcmUsIHRoaXMgbWF5IGFmZmVjdCBzY2hlZHVsaW5nIC4uLiAmcXVvdDsgKw0KICAgICAgICAg
ICAgICZxdW90O1xuJnF1b3Q7KTsNCiAgICAgIH0NCiAgIH0NCiAgIH19fSAgDQogICB7e3sgIENh
bnRlZW4gZ2V0IChjb250YWlucyB0aGUgb25seSAmcXVvdDt3YWl0JnF1b3Q7KQ0KICAgcHVibGlj
IHN5bmNocm9uaXplZCBpbnQgZ2V0IChpbnQgaWQpew0KICAgICAgd2hpbGUgKG5vT2ZDaGlja2Vu
cyA9PSAwKXsNCiAgICAgICAgIGlmIChyZXBvcnQpew0KICAgICAgICAgICAgLy8gbW9hbg0KICAg
ICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuICgmcXVvdDsoJnF1b3Q7ICsgU3lzdGVtLmN1cnJl
bnRUaW1lTWlsbGlzKCkgKyAmcXVvdDspICZxdW90OyArDQogICAgICAgICAgICAgICAmcXVvdDtQ
aGlsICZxdW90OyArIGlkICsgJnF1b3Q7OiB3b3QsIG5vIGNoaWNrZW5zPyBJJ2xsIHdhaXQgLi4u
IFdBSVRJTkcgLi4uJnF1b3Q7KTsNCiAgICAgICAgIH0NCg0KICAgICAgICAgLy8gZ2V0IG9uIHN0
YW5kLWJ5IHF1ZXVlLCBsZXR0aW5nIGluIHRoZSBuZXh0IHBoaWxvc29waGVyIChvciBjaGVmKQ0K
ICAgICAgICAgLy8gRmlyc3QgYW5kIG9ubHkgJnF1b3Q7d2FpdCZxdW90OyBpcyBoZXJlIGluIENh
bnRlZW4uZ2V0DQogICAgICAgICB0cnkge3dhaXQoKTt9IGNhdGNoIChJbnRlcnJ1cHRlZEV4Y2Vw
dGlvbiBlKXt9DQoNCiAgICAgIH0NCiAgICAgIGlmIChyZXBvcnQpew0KICAgICAgICAgLy8gdGhh
bmtzDQogICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4gKCZxdW90OygmcXVvdDsgKyBTeXN0ZW0u
Y3VycmVudFRpbWVNaWxsaXMoKSArICZxdW90OykgJnF1b3Q7ICsNCiAgICAgICAgICAgICZxdW90
O1BoaWwgJnF1b3Q7ICsgaWQgKyAmcXVvdDs6IHRob3NlIGNoaWNrZW5zIGxvb2sgZ29vZCAuLi4g
b25lIHBsZWFzZSAuLi4gJnF1b3Q7KTsNCiAgICAgIH0NCiAgICAgIG5vT2ZDaGlja2VucyA9IG5v
T2ZDaGlja2VucyAtIDE7DQoNCiAgICAgIG5vT2ZNZWFsc1tpZF0rKzsNCiAgICAgIFN0cmluZ0J1
ZmZlciBzdHJpbmdCdWZmZXIgPSBuZXcgU3RyaW5nQnVmZmVyKCk7DQogICAgICBzdHJpbmdCdWZm
ZXIuYXBwZW5kKCZxdW90OygmcXVvdDsgKyBTeXN0ZW0uY3VycmVudFRpbWVNaWxsaXMoKSArICZx
dW90OykgJnF1b3Q7KTsNCg0KICAgICAgZm9yIChpbnQgaSA9IDA7IGkgJmx0OyBjb25zdGFudHMu
Z2V0Tm9PZlBoaWxvc29waGVycygpOyBpKyspew0KICAgICAgICAgc3RyaW5nQnVmZmVyLmFwcGVu
ZCAobm9PZk1lYWxzW2ldICsgJnF1b3Q7ICZxdW90Oyk7DQogICAgICB9DQogICAgICBpZiAocmVw
b3J0ID09IGZhbHNlKXsNCiAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbiAoc3RyaW5nQnVmZmVy
LnRvU3RyaW5nKCkpOw0KICAgICAgfQ0KICAgICAgcmV0dXJuIDE7DQogICB9DQogICB9fX0gIA0K
ICAge3t7ICBDYW50ZWVuIHB1dCAoY29udGFpbnMgb25seSAmcXVvdDtub3RpZnkmcXVvdDsgb3Ig
JnF1b3Q7bm90aWZ5QWxsJnF1b3Q7KQ0KICAgcHVibGljIHN5bmNocm9uaXplZCB2b2lkIHB1dCAo
aW50IG5vT2ZDaGlja2Vuc1RvQWRkKXsNCiAgICAgIC8vIGJyaW5nIGluIHRoZSB0cmF5DQogICAg
ICBpZiAocmVwb3J0KXsNCiAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbiAoJnF1b3Q7KCZxdW90
OyArIFN5c3RlbS5jdXJyZW50VGltZU1pbGxpcygpICsgJnF1b3Q7KSAmcXVvdDsgKw0KICAgICAg
ICAgICAgJnF1b3Q7Q2hlZiAgOiBvdWNoIC4uLiBtYWtlIHJvb20gLi4uIHRoaXMgZGlzaCBpcyB2
ZXJ5IGhvdCAuLi4gJnF1b3Q7KTsNCiAgICAgIH0NCg0KICAgICAgLy8gdGFrZSAzIHNlY29uZHMg
dG8gc2V0IGRvd24gdGhlIGRpc2ggKG1lYW53aGlsZSBhIHF1ZXVlIG1heSBiZSBkZXZlbG9waW5n
KQ0KICAgICAgdHJ5IHtUaHJlYWQuc2xlZXAoY29uc3RhbnRzLmdldENhbnRlZW5QbGFjZUFuZEhv
bGRRdWV1ZV9tcygpKTt9IGNhdGNoIChJbnRlcnJ1cHRlZEV4Y2VwdGlvbiBlKXt9DQoNCiAgICAg
IG5vT2ZDaGlja2VucyA9IG5vT2ZDaGlja2VucyArIG5vT2ZDaGlja2Vuc1RvQWRkOw0KICAgICAg
aWYgKHJlcG9ydCl7DQogICAgICAgICAvLyBhbm5vdW5jZSBhcnJpdmFsIG9mIG1vcmUgY2hpY2tl
bnMNCiAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbiAoJnF1b3Q7KCZxdW90OyArIFN5c3RlbS5j
dXJyZW50VGltZU1pbGxpcygpICsgJnF1b3Q7KSAmcXVvdDsgKw0KICAgICAgICAgICAgJnF1b3Q7
Q2hlZiAgOiBtb3JlIGNoaWNrZW5zIC4uLiAmcXVvdDsgKyBub09mQ2hpY2tlbnMgKyAmcXVvdDsg
bm93IGF2YWlsYWJsZSAuLi4gTk9USUZZSU5HIC4uLiZxdW90Oyk7DQogICAgICB9DQoNCiAgICAg
IC8vIFB1dCBhbnkgd2FpdGluZyBwaGlsb3NvcGhlcnMgYmFjayBvbiB0aGUgbWFpbiBxdWV1ZQ0K
ICAgICAgLy8gRmlyc3QgYW5kIG9ubHkgbm90aWZ5IG9yIG5vdGlmeUFsbCBpcyBoZXJlIGluIENh
bnRlZW4ucHV0DQogICAgICBub3RpZnlBbGwoKTsNCiAgIH0NCiAgIH19fSAgDQp9DQpjbGFzcyBD
aGVmIGV4dGVuZHMgVGhyZWFkeyAvLyBBY3RpdmUNCiAgIHt7eyAgQ29tbWVudA0KICAgLy8NCiAg
IC8vIEEgY2hlZiBpcyBhbiBhY3RpdmUgb2JqZWN0LiAgSGUgY29va3MgY2hpY2tlbnMgaW4gYmF0
Y2hlcyBvZiBmb3VyIC0tIHRha2luZw0KICAgLy8gYXJvdW5kIDIgc2Vjb25kcyBwZXIgYmF0Y2gg
LS0gYW5kIHRoZW4gdGFrZXMgdGhlbiB0byB0aGUgY2FudGVlbi4NCiAgIC8vDQogICAvLyBUaGlz
IGN5Y2xlIGNvbnRpbnVlcyBpbmRlZmluaXRlbHkuDQogICB9fX0gIA0KICAge3t7ICBEZWNsYXJh
dGlvbnMNCiAgIHByaXZhdGUgQ2FudGVlbiBjYW50ZWVuOw0KICAgcHJpdmF0ZSBDb25zdGFudHMg
Y29uc3RhbnRzOw0KICAgcHJpdmF0ZSBib29sZWFuIHJlcG9ydCA9IHRydWU7DQogICB9fX0gIA0K
ICAge3t7ICBDaGVmDQogICBwdWJsaWMgQ2hlZiAoQ2FudGVlbiBjYW50ZWVuLCBDb25zdGFudHMg
Y29uc3RhbnRzKXsNCiAgICAgIHRoaXMuY2FudGVlbiA9IGNhbnRlZW47DQogICAgICB0aGlzLmNv
bnN0YW50cyA9IG5ldyBDb25zdGFudHMoY29uc3RhbnRzKTsNCiAgICAgIHN0YXJ0KCk7DQogICB9
DQogICB9fX0gIA0KICAge3t7ICByZXBvcnQNCiAgIHB1YmxpYyBzeW5jaHJvbml6ZWQgdm9pZCBy
ZXBvcnQgKGJvb2xlYW4gcmVwb3J0KXsNCiAgICAgIHRoaXMucmVwb3J0ID0gcmVwb3J0Ow0KICAg
fQ0KICAgfX19ICANCiAgIHt7eyAgcnVuDQogICBwdWJsaWMgdm9pZCBydW4oKXsNCiAgICAgIGlm
IChyZXBvcnQpew0KICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuICgmcXVvdDsoJnF1b3Q7ICsg
U3lzdGVtLmN1cnJlbnRUaW1lTWlsbGlzKCkgKyAmcXVvdDspICZxdW90OyArDQogICAgICAgICAg
ICAmcXVvdDtDaGVmICA6IHN0YXJ0aW5nIC4uLiAmcXVvdDspOw0KICAgICAgfQ0KICAgICAgd2hp
bGUgKHRydWUpew0KICAgICAgICAgLy8gY29vayA0IGNoaWNrZW5zDQogICAgICAgICBpZiAocmVw
b3J0KXsNCiAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbiAoJnF1b3Q7KCZxdW90OyArIFN5
c3RlbS5jdXJyZW50VGltZU1pbGxpcygpICsgJnF1b3Q7KSAmcXVvdDsgKw0KICAgICAgICAgICAg
ICAgJnF1b3Q7Q2hlZiAgOiBjb29raW5nIC4uLiAmcXVvdDspOw0KICAgICAgICAgfQ0KDQogICAg
ICAgICAvLyBjb29rIGZvciBhcm91bmQgMiBzZWNvbmRzDQogICAgICAgICB0cnkge1RocmVhZC5z
bGVlcChjb25zdGFudHMuZ2V0Q29va0J5Q2hlZl9tcygpKTt9IGNhdGNoIChJbnRlcnJ1cHRlZEV4
Y2VwdGlvbiBlKXt9DQoNCiAgICAgICAgIGlmIChyZXBvcnQpew0KICAgICAgICAgICAgU3lzdGVt
Lm91dC5wcmludGxuICgmcXVvdDsoJnF1b3Q7ICsgU3lzdGVtLmN1cnJlbnRUaW1lTWlsbGlzKCkg
KyAmcXVvdDspICZxdW90OyArDQogICAgICAgICAgICAgICAmcXVvdDtDaGVmICA6ICZxdW90OyAr
IGNvbnN0YW50cy5nZXROb09mQ2hpY2tlbnMoKSArICZxdW90OyBjaGlja2VucywgcmVhZHktdG8t
Z28gLi4uICZxdW90Oyk7DQogICAgICAgICB9DQogICAgICAgICBjYW50ZWVuLnB1dChjb25zdGFu
dHMuZ2V0Tm9PZkNoaWNrZW5zKCkpOw0KICAgICAgfQ0KICAgfQ0KICAgfX19ICANCn0NCmNsYXNz
IFBoaWwgZXh0ZW5kcyBUaHJlYWR7IC8vIEFjdGl2ZQ0KICAge3t7ICBDb21tZW50DQogICAvLw0K
ICAgLy8gQSBwaGlsb3NvcGhlciB0aGlua3MgZm9yIGEgd2hpbGUgLS0gYXJvdW5kIDMgc2Vjb25k
cyAtLSBhbmQgdGhlbiBnb2VzIHRvIHRoZQ0KICAgLy8gY2FudGVlbiBmb3IgZm9vZCwgY29uc3Vt
aW5nIHdoYXQgaGUgZ2V0cyBzdHJhaWdodCBhd2F5LiAgIFRoaXMgY3ljbGUgY29udGludWVzDQog
ICAvLyBpbmRlZmluaXRlbHkuDQogICAvLw0KICAgLy8gRXhjZXB0LCB0aGF0IGlzLCBmb3IgcGhp
bG9zb3BoZXIgMCAuLi4gIHdobyByZWZ1c2VzIHRvIHRoaW5rIGFuZCBqdXN0IGtlZXBzDQogICAv
LyBnb2luZyB0byB0aGUgY2FudGVlbi4gIEhlIHdpbGwgZ2V0IGhpcyBjb21lLXVwcGFuY2Ugc2hv
cnRseS4NCiAgIC8vDQogICB9fX0gIA0KICAge3t7ICBEZWNsYXJhdGlvbnMNCiAgIHByaXZhdGUg
aW50IGlkOw0KICAgcHJpdmF0ZSBDYW50ZWVuIGNhbnRlZW47DQogICBwcml2YXRlIGJvb2xlYW4g
cmVwb3J0ID0gdHJ1ZTsNCiAgIHByaXZhdGUgQ29uc3RhbnRzIGNvbnN0YW50czsNCiAgIH19fSAg
DQogICB7e3sgIFBoaWwNCiAgIHB1YmxpYyBQaGlsIChpbnQgaWQsIENhbnRlZW4gY2FudGVlbiwg
Q29uc3RhbnRzIGNvbnN0YW50cyl7DQogICAgICB0aGlzLmlkID0gaWQ7DQogICAgICB0aGlzLmNh
bnRlZW4gPSBjYW50ZWVuOw0KICAgICAgdGhpcy5jb25zdGFudHMgPSBuZXcgQ29uc3RhbnRzKGNv
bnN0YW50cyk7DQogICAgICBzdGFydCgpOw0KICAgfQ0KICAgfX19ICANCiAgIHt7eyAgcmVwb3J0
DQogICBwdWJsaWMgc3luY2hyb25pemVkIHZvaWQgcmVwb3J0IChib29sZWFuIHJlcG9ydCl7DQog
ICAgICB0aGlzLnJlcG9ydCA9IHJlcG9ydDsNCiAgIH0NCiAgIH19fSAgDQogICB7e3sgIHJ1bg0K
ICAgcHVibGljIHZvaWQgcnVuKCl7DQogICAgICBpbnQgY2hpY2tlbjsNCg0KICAgICAgaWYgKHJl
cG9ydCl7DQogICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4gKCZxdW90OygmcXVvdDsgKyBTeXN0
ZW0uY3VycmVudFRpbWVNaWxsaXMoKSArICZxdW90OykgJnF1b3Q7ICsNCiAgICAgICAgICAgICZx
dW90O1BoaWwgJnF1b3Q7ICsgaWQgKyAmcXVvdDs6IHN0YXJ0aW5nIC4uLiZxdW90Oyk7DQogICAg
ICB9DQogICAgICB3aGlsZSAodHJ1ZSl7DQogICAgICAgICAvLyBldmVyeW9uZSwgYmFyIHRoZSBn
cmVlZHkgcGhpbG9zb3BoZXIgKDApLCBoYXMgYSBsaXR0bGUgdGhpbmsNCiAgICAgICAgIGlmIChp
ZCAhPSBjb25zdGFudHMuZ2V0SWRPZkdyZWVkeVBoaWxvc29waGVyKCkpew0KICAgICAgICAgICAg
Ly8gdGhpbmsgZm9yIGFyb3VuZCAzIHNlY29uZHMNCiAgICAgICAgICAgIHRyeSB7VGhyZWFkLnNs
ZWVwKGNvbnN0YW50cy5nZXRUaGlua0J5SHVtYmxlUGhpbG9zb3BoZXJzX21zKCkpO30gY2F0Y2gg
KEludGVycnVwdGVkRXhjZXB0aW9uIGUpe30NCiAgICAgICAgIH0NCiAgICAgICAgIGlmIChyZXBv
cnQpew0KICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuICgmcXVvdDsoJnF1b3Q7ICsgU3lz
dGVtLmN1cnJlbnRUaW1lTWlsbGlzKCkgKyAmcXVvdDspICZxdW90OyArDQogICAgICAgICAgICAg
ICAmcXVvdDtQaGlsICZxdW90OyArIGlkICsgJnF1b3Q7OiBnb3R0YSBlYXQgLi4uICZxdW90Oyk7
DQogICAgICAgICB9DQoNCiAgICAgICAgIC8vIHdhbnQgY2hpY2tlbg0KICAgICAgICAgY2hpY2tl
biA9IGNhbnRlZW4uZ2V0KGlkKTsNCg0KICAgICAgICAgLy8gY29uc3VtZSBjaGlja2VuDQogICAg
ICAgICBpZiAocmVwb3J0KXsNCiAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuICgmcXVvdDso
JnF1b3Q7ICsgU3lzdGVtLmN1cnJlbnRUaW1lTWlsbGlzKCkgKyAmcXVvdDspJnF1b3Q7ICsNCiAg
ICAgICAgICAgICAgJnF1b3Q7IFBoaWwgJnF1b3Q7ICsgaWQgKyAmcXVvdDs6IG1tbSAuLi4gdGhh
dCdzIGdvb2QgLi4uICZxdW90Oyk7DQogICAgICAgICB9DQoNCiAgICAgIH0NCiAgIH0NCiAgIH19
fSAgDQp9DQpwdWJsaWMgY2xhc3MgQ29sbGVnZXsNCiAgIHt7eyAgQ29tbWVudA0KICAgLy8NCiAg
IC8vIFRoZSBDb2xsZWdlIGNvbnNpc3RzIG9mIDUgUGhpbG9zb3BoZXJzLCBhIENoZWYgYW5kIHRo
ZSBDYW50ZWVuLiAgVGhlIENoZWYgYW5kDQogICAvLyB0aGUgUGhpbG9zb3BoZXJzIGFyZSAmcXVv
dDthY3RpdmUmcXVvdDsgb2JqZWN0cy4gIFRoZSBDYW50ZWVuIGlzIGEgJnF1b3Q7cGFzc2l2ZSZx
dW90OyBvYmplY3QNCiAgIC8vIHRocm91Z2ggd2hpY2ggdGhlIFBoaWxvc29waGVycyBhbmQgdGhl
IENoZWYgaGF2ZSB0byBpbnRlcmFjdC4NCiAgIC8vDQogICAvLyBUaGUgQ2FudGVlbiBpcyBpbXBs
ZW1lbnRlZCBpbiB0aGUgc3R5bGUgb2YgdGhlIEN1YmJ5SG9sZSBleGFtcGxlIGZyb20gU3VuJ3MN
CiAgIC8vIEphdmEgVHV0b3JpYWwuICBBcyBzdWNoLCBpdCBleHBvc2VzIGVhY2ggUGhpbG9zb3Bo
ZXIgdG8gdGhlIGRhbmdlciBvZg0KICAgLy8gc3RhcnZhdGlvbiAoYnkgaW5maW5pdGUgb3ZlcnRh
a2luZyBieSBmZWxsb3cgUGhpbG9zb3BoZXJzKS4gIFNhZGx5LCB0aGlzDQogICAvLyBkb2VzIGhh
cHBlbiB3aXRoIHRoZSBwYXJ0aWN1bGFyIGNpcmN1bXN0YW5jZXMgb2YgdGltaW5nIHNldCB1cCBp
biB0aGlzDQogICAvLyBkZW1vbnN0cmF0aW9uLiAgSGFwcGlseSwgaXQncyB0aGUgZ3JlZWR5IFBo
aWxvc29waGVyIHRoYXQgc3RhcnZlcyAtLSBoZQ0KICAgLy8gbmV2ZXIgZXZlbiBnZXRzIG9uZSBt
ZWFsLCBkZXNwaXRlIGJlaW5nIGluIHRoZSBDYW50ZWVuIHRoZSB3aG9sZSB0aW1lIQ0KICAgLy8N
CiAgIH19fSAgDQogICB7e3sgIG1haW4NCiAgIHB1YmxpYyBzdGF0aWMgdm9pZCBtYWluIChTdHJp
bmcgYXJndltdKXsNCg0KICAgICAgaW50IG5vT2ZQaGlsb3NvcGhlcnMgICAgICAgICAgICAgID0g
IDU7DQogICAgICBpbnQgaWRPZkdyZWVkeVBoaWxvc29waGVyICAgICAgICAgPSAgMDsNCiAgICAg
IGludCBub09mQ2hpY2tlbnMgICAgICAgICAgICAgICAgICA9ICA0Ow0KICAgICAgaW50IGNhbnRl
ZW5QbGFjZUFuZEhvbGRRdWV1ZV9zZWMgID0gIDM7DQogICAgICBpbnQgY29va0J5Q2hlZl9zZWMg
ICAgICAgICAgICAgICAgPSAgMjsNCiAgICAgIGludCB0aGlua0J5SHVtYmxlUGhpbG9zb3BoZXJz
X3NlYyA9ICAzOw0KICAgICAgaW50IHJlcG9ydE9mZl9zZWMgICAgICAgICAgICAgICAgID0gMzA7
DQogICAgICBpbnQgayA9IDEwMDA7DQoNCiAgICAgIFN5c3RlbS5vdXQucHJpbnRsbiAoJnF1b3Q7
JnF1b3Q7KTsNCiAgICAgIFN5c3RlbS5vdXQucHJpbnRsbiAoJnF1b3Q7QW5hbHlzZXIgb2Ygc2No
ZWR1bGluZyBvZiBvYmplY3RzIHdhaXRpbmcgb24gbW9uaXRvciZxdW90Oyk7DQogICAgICBTeXN0
ZW0ub3V0LnByaW50bG4gKCZxdW90O0NvbGxlZ2UgdmVyc2lvbiAyLjAgLSAzMC5KYW4uMTk5OCZx
dW90Oyk7DQogICAgICBTeXN0ZW0ub3V0LnByaW50bG4gKCZxdW90OyAgSWRlYSBhbmQgY29kZWQg
YnkgUGV0ZXIgV2VsY2gsIFVuaXZlcnNpdHkgb2YgS2VudCBhdCBDYW50ZXJidXJ5LCBVSyZxdW90
Oyk7DQogICAgICBTeXN0ZW0ub3V0LnByaW50bG4gKCZxdW90OyAgTWFrZS11cCBieSBPeXZpbmQg
VGVpZywgQXV0cm9uaWNhLCBOb3J3YXkmcXVvdDspOw0KICAgICAgU3lzdGVtLm91dC5wcmludGxu
ICgmcXVvdDsmcXVvdDspOw0KICAgICAgU3lzdGVtLm91dC5wcmludGxuICgmcXVvdDsgIG5vT2ZQ
aGlsb3NvcGhlcnM6ICAgICAgICAgICAgICAmcXVvdDsgKyBub09mUGhpbG9zb3BoZXJzKTsNCiAg
ICAgIFN5c3RlbS5vdXQucHJpbnRsbiAoJnF1b3Q7ICBpZE9mR3JlZWR5UGhpbG9zb3BoZXI6ICAg
ICAgICAgJnF1b3Q7ICsgaWRPZkdyZWVkeVBoaWxvc29waGVyKTsNCiAgICAgIFN5c3RlbS5vdXQu
cHJpbnRsbiAoJnF1b3Q7ICBub09mQ2hpY2tlbnM6ICAgICAgICAgICAgICAgICAgJnF1b3Q7ICsg
bm9PZkNoaWNrZW5zKTsNCiAgICAgIFN5c3RlbS5vdXQucHJpbnRsbiAoJnF1b3Q7ICBjYW50ZWVu
UGxhY2VBbmRIb2xkUXVldWVfc2VjOiAgJnF1b3Q7ICsgY2FudGVlblBsYWNlQW5kSG9sZFF1ZXVl
X3NlYyk7DQogICAgICBTeXN0ZW0ub3V0LnByaW50bG4gKCZxdW90OyAgY29va0J5Q2hlZl9zZWM6
ICAgICAgICAgICAgICAgICZxdW90OyArIGNvb2tCeUNoZWZfc2VjKTsNCiAgICAgIFN5c3RlbS5v
dXQucHJpbnRsbiAoJnF1b3Q7ICB0aGlua0J5SHVtYmxlUGhpbG9zb3BoZXJzX3NlYzogJnF1b3Q7
ICsgdGhpbmtCeUh1bWJsZVBoaWxvc29waGVyc19zZWMpOw0KICAgICAgU3lzdGVtLm91dC5wcmlu
dGxuICgmcXVvdDsgIHJlcG9ydE9mZl9zZWM6ICAgICAgICAgICAgICAgICAmcXVvdDsgKyByZXBv
cnRPZmZfc2VjKTsNCiAgICAgIFN5c3RlbS5vdXQucHJpbnRsbiAoJnF1b3Q7JnF1b3Q7KTsNCiAg
ICAgIFN5c3RlbS5vdXQucHJpbnRsbiAoJnF1b3Q7ICBUZXJtaW5hdGUgd2l0aCBDdHJsLUMmcXVv
dDspOw0KICAgICAgU3lzdGVtLm91dC5wcmludGxuICgmcXVvdDsmcXVvdDspOw0KDQogICAgICB0
cnkge1RocmVhZC5zbGVlcCgxMCAqIGspO30gY2F0Y2ggKEludGVycnVwdGVkRXhjZXB0aW9uIGUp
e30NCg0KICAgICAgQ29uc3RhbnRzIGNvbnN0YW50cyA9DQogICAgICAgICBuZXcgQ29uc3RhbnRz
ICgNCiAgICAgICAgICAgIG5vT2ZQaGlsb3NvcGhlcnMsDQogICAgICAgICAgICBpZE9mR3JlZWR5
UGhpbG9zb3BoZXIsDQogICAgICAgICAgICBub09mQ2hpY2tlbnMsDQogICAgICAgICAgICBjYW50
ZWVuUGxhY2VBbmRIb2xkUXVldWVfc2VjICogaywNCiAgICAgICAgICAgIGNvb2tCeUNoZWZfc2Vj
ICogaywNCiAgICAgICAgICAgIHRoaW5rQnlIdW1ibGVQaGlsb3NvcGhlcnNfc2VjICogayk7DQoN
CiAgICAgIENhbnRlZW4gY2FudGVlbiA9IG5ldyBDYW50ZWVuKGNvbnN0YW50cyk7DQogICAgICBD
aGVmIGNoZWYgPSBuZXcgQ2hlZihjYW50ZWVuLCBjb25zdGFudHMpOw0KICAgICAgUGhpbFtdIHBo
aWwgPSBuZXcgUGhpbFtub09mUGhpbG9zb3BoZXJzXTsNCg0KICAgICAgZm9yIChpbnQgaSA9IDA7
IGkgJmx0OyBub09mUGhpbG9zb3BoZXJzOyBpKyspew0KICAgICAgICAgcGhpbFtpXSA9IG5ldyBQ
aGlsIChpLCBjYW50ZWVuLCBjb25zdGFudHMpOw0KICAgICAgfQ0KICAgICAgdHJ5IHtUaHJlYWQu
c2xlZXAocmVwb3J0T2ZmX3NlYyAqIGspO30gY2F0Y2ggKEludGVycnVwdGVkRXhjZXB0aW9uIGUp
e30NCg0KICAgICAgZm9yIChpbnQgaSA9IDA7IGkgJmx0OyBub09mUGhpbG9zb3BoZXJzOyBpKysp
ew0KICAgICAgICAgcGhpbFtpXS5yZXBvcnQoZmFsc2UpOw0KICAgICAgfQ0KICAgICAgY2FudGVl
bi5yZXBvcnQoZmFsc2UpOw0KICAgICAgY2hlZi5yZXBvcnQoZmFsc2UpOw0KICAgfQ0KICAgfX19
ICANCn0NCn19fSAgDQoNCg0KPC9DT0RFPg0KPC9QUkU+DQo8SDM+PEEgTkFNRT0iVGFrZV9SZXMi
PjwvQT48QSBIUkVGPSIjSW5kZXgiPlRha2VfUmVzLmphdmE8L0E+DQo8L0gzPg0KPFBSRT4NCjxD
T0RFPnt7eyAgVGFrZV9SZXMuamF2YQ0KLy8gUHJvcG9zZWQgYnkgUGV0ZXIgV2VsY2ggaW4gZS1t
YWlsIHRvIG1lIG9uIDI5SmFuOTgNCi8vIFByb2dyYW1tZWQgYnkgJk9zbGFzaDt5dmluZCBUZWln
DQoNCi8vIEJvdGggQSxCIGFuZCBDIGdldCB0aGUgcmVzb3VyY2UNCg0KLy8gV2UgaGF2ZSB0aGUg
c2FtZSBiZWhhdmlvdXIgd2l0aA0KLy8gMS4gU3ltYW50ZWMgSmF2YSEgSnVzdEluVGltZSBDb21w
aWxlciBWZXJzaW9uIDIxMC4wNjMgZm9yIEpESyAxLjEuMw0KLy8gICAgQ29weXJpZ2h0IChDKSAx
OTk2LTk3IFN5bWFudGVjIENvcnBvcmF0aW9uDQovLyAgICBSdW5uaW5nIG9uIFdpbmRvdy05NQ0K
Ly8gMi4gSlZNIDEuMS41DQovLyAgICBSdW5uaW5nIG9uIFdpbmRvdy05NQ0KDQp7e3sgIFJlc291
cmNlDQpjbGFzcyBSZXNvdXJjZSB7DQogICBwdWJsaWMgc3luY2hyb25pemVkIHZvaWQgdGFrZSAo
U3RyaW5nIGlkKSB7DQogICAgICBTeXN0ZW0ub3V0LnByaW50bG4gKCZxdW90O1VzZXIgJnF1b3Q7
ICsgaWQgKyAmcXVvdDsgaGFzIHJlc291cmNlJnF1b3Q7KTsNCiAgICAgIHRyeSB7VGhyZWFkLnNs
ZWVwKDMwMDApO30gY2F0Y2ggKEludGVycnVwdGVkRXhjZXB0aW9uIGUpe30NCiAgIH0NCn0NCn19
fSAgDQp7e3sgIFVzZXINCmNsYXNzIFVzZXIgZXh0ZW5kcyBUaHJlYWQgew0KICAgcHJpdmF0ZSBT
dHJpbmcgaWQ7DQogICBwcml2YXRlIFJlc291cmNlIHJlc291cmNlOw0KDQogICBwdWJsaWMgVXNl
ciAoU3RyaW5nIGlkLCBSZXNvdXJjZSByZXNvdXJjZSkgew0KICAgICAgdGhpcy5pZCA9IGlkOw0K
ICAgICAgdGhpcy5yZXNvdXJjZSA9IHJlc291cmNlOw0KICAgICAgU3lzdGVtLm91dC5wcmludGxu
ICgmcXVvdDtVc2VyICZxdW90OyArIGlkICsgJnF1b3Q7IHN0YXJ0ZWQmcXVvdDspOw0KICAgICAg
c3RhcnQoKTsNCiAgIH0NCg0KICAgcHVibGljIHZvaWQgcnVuKCkgew0KICAgICAgd2hpbGUgKHRy
dWUpIHsNCiAgICAgICAgIHJlc291cmNlLnRha2UoaWQpOw0KICAgICAgICAgdHJ5IHtUaHJlYWQu
c2xlZXAoMTAwMCk7fSBjYXRjaCAoSW50ZXJydXB0ZWRFeGNlcHRpb24gZSl7fQ0KICAgICAgfQ0K
ICAgfQ0KfQ0KfX19ICANCg0KY2xhc3MgVGFrZV9SZXMgew0KICAge3t7ICBtYWluDQogICBwdWJs
aWMgc3RhdGljIHZvaWQgbWFpbiAoU3RyaW5nIGFyZ3ZbXSkgew0KICAgICAgUmVzb3VyY2UgcmVz
b3VyY2UgPSBuZXcgUmVzb3VyY2UoKTsNCg0KICAgICAgVXNlcltdIHVzZXIgPSBuZXcgVXNlclsz
XTsNCg0KICAgICAgdXNlclswXSA9IG5ldyBVc2VyICgmcXVvdDtBICAmcXVvdDssIHJlc291cmNl
KTsNCiAgICAgIHRyeSB7VGhyZWFkLnNsZWVwKDEwMDApO30gY2F0Y2ggKEludGVycnVwdGVkRXhj
ZXB0aW9uIGUpe30NCiAgICAgIHVzZXJbMV0gPSBuZXcgVXNlciAoJnF1b3Q7IEIgJnF1b3Q7LCBy
ZXNvdXJjZSk7DQogICAgICB0cnkge1RocmVhZC5zbGVlcCgxMDAwKTt9IGNhdGNoIChJbnRlcnJ1
cHRlZEV4Y2VwdGlvbiBlKXt9DQogICAgICB1c2VyWzJdID0gbmV3IFVzZXIgKCZxdW90OyAgQyZx
dW90OywgcmVzb3VyY2UpOw0KICAgfQ0KICAgfX19ICANCn0NCn19fSAgDQoNCg0KPC9DT0RFPg0K
PC9QUkU+DQo8SDM+PEEgTkFNRT0iT3JpZ2luYWxDb2xsZWdlIj48L0E+PEEgSFJFRj0iI0luZGV4
Ij5PcmlnaW5hbCBDb2xsZWdlLmphdmE8L0E+DQo8L0gzPg0KPFBSRT4NCjxDT0RFPnt7eyAgQ29s
bGVnZS5qYXZhDQoNCk95dmluZCwNCg0KJmd0OyBIYXZlIHlvdSB0cmllZCB0aGUgZWF0aW5nIHF1
ZXVlaW5nIHBoaWxvc29waGVycyBvbiBKYXZhIDEuMS41ID8/DQoNCk5vIC4uLiBpdCdzIGVuY2xv
c2VkLiAgUnVubmluZyB0aGlzIG9uIFNlbWFudGljJ3MgSlZNIC0tIHdoaWNoICpzdGFja3MqDQp3
YWl0aW5nIHRocmVhZHMgaW5zdGVhZCBvZiAqcXVldWluZyogdGhlbSAtLSBjYXVzZXMgdGhlIGdy
ZWVkeSBwaGlsb3NvcGhlcg0KdG8gc3VjY2VlZCEgIFRoZSBncmVlZHkgb25lIGp1c3QgZWF0cyBh
IGxvdCwgYnV0IG5vYm9keSBzdGFydmVzLg0KDQpUaGF0IHNvdW5kcyBncmVhdCBleGNlcHQgdGhh
dCBpdCdzIGRlYWQgZWFzeSB0byBtYWtlIGEgc2NlbmFyaW8gdGhhdCByZXN1bHRzDQppbiBpbmZp
bml0ZSBzdGFydmF0aW9uIGZvciBzdGFja2luZyB3YWl0cyAuLi4gYW5kIHlvdSBkb24ndCBldmVu
IGhhdmUgdG8NCmdldCBpbnZvbHZlZCB3aXRoIGB3YWl0J3MgLi4uDQoNCiAgbyB0YWtlIGEgcmVz
b3VyY2UgUiAoYSBtb25pdG9yKSB3aXRoIG9uZSBzeW5jaHJvbml6ZWQgbWV0aG9kIHRoYXQgdGFr
ZXMNCiAgICAzIHNlY29uZHMgdG8gZXhlY3V0ZTsNCg0KICBvIHRha2UgdGhyZWFkcyBBLCBCIGFu
ZCBDIHRoYXQganVzdCBjeWNsZSB0cnlpbmcgdG8gZXhlY3V0ZSBSJ3MgbWV0aG9kDQogICAgLS0g
dGhleSB3YWl0IG9uZSBzZWNvbmQgYWZ0ZXIgcmVsZWFzaW5nIFIgYmVmb3JlIHRyeWluZyBhZ2Fp
bjsNCg0KICBvIHN0YXJ0IEEgb2ZmIGF0IHRpbWUgMCwgQiBhdCB0aW1lIDEgYW5kIEMgYXQgdGlt
ZSAyOw0KDQogIG8gQiB3aWxsICpuZXZlciogZ2V0IHRoZSByZXNvdXJjZSENCg0KV2hhdCBoYXBw
ZW5zIGlzIHRoYXQ6DQoNCiAgICBUaW1lIDogV2hhdCdzIGhhcHBlbmluZyAgICAgICAgICAgOiBT
dGFjayB3YWl0aW5nIHRvIHN5bmMgb24gUg0KICAgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQogICAgICAwICA6IEEgZ2V0cyBS
ICAgICAgICAgICAgICAgICAgIDogW10NCiAgICAgIDEgIDogQiB3YW50cyBSIGFuZCBpcyBzdGFj
a2VkICAgOiBbQl0NCiAgICAgIDIgIDogQyB3YW50cyBSIGFuZCBpcyBzdGFja2VkICAgOiBbQywg
Ql0NCiAgICAgIDMgIDogQSByZWxlYXNlcyBSLCBDIGdldHMgUiAgICAgOiBbQl0NCiAgICAgIDQg
IDogQSB3YW50cyBSIGFuZCBpcyBzdGFja2VkICAgOiBbQSwgQl0NCiAgICAgIDYgIDogQyByZWxl
YXNlcyBSLCBBIGdldHMgUiAgICAgOiBbQl0NCiAgICAgIDcgIDogQyB3YW50cyBSIGFuZCBpcyBz
dGFja2VkICAgOiBbQywgQl0NCiAgICAgIDkgIDogQSByZWxlYXNlcyBSLCBDIGdldHMgUiAgICAg
OiBbQl0NCiAgICAgMTAgIDogQSB3YW50cyBSIGFuZCBpcyBzdGFja2VkICAgOiBbQSwgQl0NCiAg
ICAgMTIgIDogQyByZWxlYXNlcyBSLCBBIGdldHMgUiAgICAgOiBbQl0NCiAgICAgMTMgIDogQyB3
YW50cyBSIGFuZCBpcyBzdGFja2VkICAgOiBbQywgQl0NCiAgICAgMTUgIDogQSByZWxlYXNlcyBS
LCBDIGdldHMgUiAgICAgOiBbQl0NCiAgICAgMTYgIDogQSB3YW50cyBSIGFuZCBpcyBzdGFja2Vk
ICAgOiBbQSwgQl0NCiAgICAgLg0KICAgICAuDQogICAgIC4NCg0KV2UgYXJlIHJlcGVhdGluZyAu
Li4gQiBuZXZlciBnZXRzIGEgbG9vay1pbiEgIFRoZSBtb3JhbCBpcyB0aGF0IHN0YWNrcyBhcmUN
Cmp1c3QgYXMgYmFkIGFzIHF1ZXVlcyAtLSBubyBsaXZlbG9jay9zdGFydmF0aW9uIGd1YXJhbnRl
ZXMgZWl0aGVyIHdheSENCg0KV2hhdCdzIG5lZWRlZCBpcyB0aGUgSG9hcmUgc2VtYW50aWNzICh3
aGljaCByZWxlYXNlcyBjb250cm9sIG9mIHRoZSBtb25pdG9yDQpmcm9tIG5vdGlmaWVyIHRvIG5v
dGlmaWVlIGF0b21pY2FsbHkgLS0gYnV0IHdoaWNoIG1lYW5zIHRoYXQgYG5vdGlmeUFsbCcNCmhh
cyBubyBsb2dpY2FsIG1lYW5pbmcgYW5kIHdvdWxkIGhhdmUgdG8gYmUgZHJvcHBlZCkuICBPciwg
cG9zc2libHksDQppbnNpc3QgdGhhdCB0aGUgSlZNICh3ZWFrbHktKXF1ZXVlcyB0aHJlYWRzIHRy
eWluZyB0byBzeW5jaHJvbmlzZSBhbmQNCnRocmVhZHMgYHdhaXQnaW5nICphbmQqIHRoYXQgbm90
aWZpZWQgd2FpdGluZyB0aHJlYWRzIGJhcmdlIGluIHRvIHRoZSBmcm9udA0Kb2YgdGhlIGBxdWV1
ZScgb2YgdGhyZWFkcyB0cnlpbmcgdG8gc3luY2hyb25pemUgKHdoaWNoIGlzIGZhaXIgc2luY2Ug
dGhleSd2ZQ0KYWxyZWFkeSBiZWVuIHRocm91Z2ggdGhhdCBvbmNlKS4gIFRoZSB0cnlpbmctdG8t
c3luY2hyb25pemUgYHF1ZXVlJyBpcyBub3cNCmEgbWl4dHVyZSBvZiBhIHF1ZXVlIGFuZCBhIHN0
YWNrIC0tIHBlcmhhcHMgaXQgb3VnaHQgdG8gYmUgY2FsbCBhIGBzdGV3JyBvciwNCm1heWJlLCBh
IGBxdWFjaycgLi4uIDotKQ0KDQpCdXQgSSdkIGJlIGludGVyZXN0ZWQgaW4gaG93IEphdmEgMS4x
LjUgYmVoYXZlcyBvbiB0aGUgUEMuICBBcmUgdGhlc2UgdGhpbmdzDQpwcm9kdWN0cyBmcm9tIFN1
biAuLi4gSSdtIHZlcnkgaWdub3JhbnQgYWJvdXQgc3VjaCB0aGluZ3M/DQoNCkNoZWVycywNCg0K
UGV0ZXIuDQoNClBTLiBFbmNsb3NlZCBhcmUgNCBjbGFzc2VzOiBDYW50ZWVuLCBDaGVmLCBQaGls
b3NvcGhlciBhbmQgQ29sbGVnZSAod2hpY2gNCiAgICBoYXMgdGhlIGBtYWluJyBtZXRob2QuDQoN
CihjdXQgaGVyZSkNCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KPEEgTkFNRT0iT3JpZ2luYWxDb2xsZWdl
VGhlQ29kZSI+Ly97e3t9fX0NCg0KLy97e3sgIGNsYXNzIENhbnRlZW4gew0KY2xhc3MgQ2FudGVl
biB7DQogIC8ve3t7DQoNCiAgLy97e3sgIENPTU1FTlQgZG9jdW1lbnRhdGlvbg0KICAvLw0KICAv
L1BoaWxvc3BoZXJzIGVhdCBjaGlja2Vucy4gIFRoZXkgcXVldWUgdXAgYXQgdGhlIGNhbnRlZW4g
dG8gdXNlIHRoZSBgZ2V0Jw0KICAvL21ldGhvZC4gIEluc2lkZSB0aGUgYGdldCcgbWV0aG9kLCB0
aGV5IGdldCBzZXJ2ZWQgc3RyYWlnaHQgYXdheSBzbyBsb25nDQogIC8vYXMgdGhlcmUgYXJlIHNv
bWUgY2hpY2tlbnMgcmVhZHkuICBPdGhlcndpc2UgdGhleSBgd2FpdCcgb24gc3RhbmQtYnkuDQog
IC8vDQogIC8vVGhlIGNoZWYgY29va3MgY2hpY2tlbnMuICBXaGVuIGhlIGhhcyBhIGJhdGNoIHJl
YWR5LCBoZSBhbHNvIHF1ZXVlcyB1cA0KICAvL2F0IHRoZSBjYW50ZWVuIGluIG9yZGVyIHRvIHVz
ZSB0aGUgYHB1dCcgbWV0aG9kLiAgVGhpcyBpbnZvbHZlcyBzZXR0aW5nDQogIC8vZG93biB0aGUg
YmF0Y2ggLS0gd2hpY2ggdGFrZXMgYXJvdW5kIDMgc2Vjb25kcyAtLSBhbmQgY2xlYXJpbmcgdGhl
IHN0YW5kLWJ5DQogIC8vcXVldWUgKG9mIHBoaWxvc29waGVycyB3YWl0aW5nIGZvciBjaGlja2Vu
cykgYnkgY2FsbGluZyBgbm90aWZ5QWxsJy4NCiAgLy8NCiAgLy97e3sgIG5vdGUgMQ0KICAvLw0K
ICAvL0NsZWFybHksIHRoZSBDaGVmIHNob3VsZCBub3QgaGF2ZSB0byBxdWV1ZSB1cCB3aXRoIHRo
ZSBQaGlsb3NvcGhlcnMgdG8NCiAgLy9nZXQgaW50byB0aGUgQ2FudGVlbi4gIFRoZSBQaGlsb3Nv
cGhlcnMgc2hvdWxkIGhhdmUgdGhlaXIgb3duIHF1ZXVlIGFuZA0KICAvL3RoZSBDaGVmIHNob3Vs
ZCBvbmx5IGhhdmUgdG8gY29udGVuZCB3aXRoIG9uZSBQaGlsb3NwaGVyIHdoZW4gZGVhbGluZyB3
aXRoDQogIC8vdGhlIGNoaWNrZW5zIGluIHRoZSBjYW50ZWVuLiAgU3VjaCBhIHNlcGFyYXRlIHF1
ZXVlIGZvciB0aGUgUGhpbG9zb3BoZXJzIGlzDQogIC8vanVzdCBsaWtlIHRoZSBzZXBlcmF0ZSBx
dWV1ZXMgZm9yIHJlYWRlcnMvd3JpdGVycyB0aGF0IHdlIG5lZWRlZCBmb3IgdGhlDQogIC8vc2Vj
dXJlbHkgc2hhcmVkIENoYW5uZWwgb3IgQnVmZmVyIGNsYXNzLiAgSG93ZXZlciwgd2UgYXJlIG1v
ZGVsbGluZyB0aGlzDQogIC8vQ2FudGVlbiBvbiB0aGUgQ3ViYnlIb2xlIGNsYXNzICh0byBzaG93
IHRoZSBkYW5nZXIgb2Ygc3RhcnZhdGlvbiBpdCBjb250YWlucykNCiAgLy9hbmQgQ3ViYnlIb2xl
IGhhcyBpdHMgcXVldWUgc2hhcmVkIGJ5IGJvdGggcmVhZGVycyBhbmQgd3JpdGVycy4NCiAgLy8N
CiAgLy99fX0NCiAgLy8NCiAgLy97e3sgIG5vdGUgMg0KICAvLw0KICAvL0FsbCBtZXRob2RzLCBh
cGFydCBmcm9tIHRoZSBgcnVuJyBtZXRob2QsIGFyZSBleGVjdXRlZCBhcyBwYXJ0IG9mIHRoZSB0
aHJlYWQNCiAgLy9vZiBjb250cm9sIG9mIHRoZWlyIGNhbGxpbmcgb2JqZWN0cy4gIFRoaXMgaXMg
cGFydGljdWxhcmx5IGNsZWFyIGhlcmUsIHdoZXJlDQogIC8vd2Ugc2VlIHRoZW0gc3BlYWtpbmcg
KmFzKiB0aG9zZSBjYWxsaW5nIG9iamVjdHMuICBGb3IgaW5zdGFuY2UsIHRoZSBgZ2V0Jw0KICAv
L21ldGhvZCBpcyBwYXJ0IG9mIHRoZSBsaWZlIG9mIHRoZSBjYWxsaW5nIFBoaWxvc29waGVyIGFu
ZCBgcHV0JyBpcyBwYXJ0IG9mDQogIC8vdGhlIGxpZmUgb2YgdGhlIENoZWYuICBTbywgdGhpcyBD
YW50ZWVuICZxdW90O29iamVjdCZxdW90OyBoYXMgYml0cyBvZiBQaGlsb3NvcGhlci0NCiAgLy9h
bGdvcml0aG0gYW5kIGJpdHMgb2YgQ2hlZi1hbGdvcml0aG0gZm9yIGl0cyBtZXRob2RzIC0tIGEg
c29tZXdoYXQgY29uZnVzZWQNCiAgLy9zZXQgb2Ygcm9sZXMgZm9yIHNvbWV0aGluZyB0aGF0J3Mg
c3VwcG9zZWQgdG8gYmUgYSBDYW50ZWVuLiAgVGhlcmUncyBub3RoaW5nDQogIC8vaW4gdGhlc2Ug
bWV0aG9kcyB0aGF0IGFyZSBvcmllbnRlZCB0b3dhcmRzIHRoZSBsaWZlIG9mIHRoZSBDYW50ZWVu
Lg0KICAvLw0KICAvL1NvLCBhbG9uZ3NpZGUgdGhlIHNlbWFudGljIGltcHJlY2lzaW9uIG9mIGB3
YWl0L25vdGlmeScgYW5kIGFsb25nc2lkZSB0aGUNCiAgLy9ub24tY29tcG9zaXRpb25hbCAob3Is
IGlmIHlvdSBwcmVmZXIsIG5vbi1yZWZlcmVudGlhbGx5LXRyYW5zcGFyZW50KSBzZW1hbnRpY3MN
CiAgLy9vZiBtZXRob2RzIGluIGdlbmVyYWwsIHdlIGhhdmUgdG8gY29tZSB0byB0ZXJtcyB3aXRo
IHRoZSBpZGVhIHRoYXQgbm8gbWV0aG9kcw0KICAvLyhhcGFydCBmcm9tIGBydW4nKSBhcmUgb3Jp
ZW50ZWQgdG93YXJkcyB0aGUgJnF1b3Q7b2JqZWN0cyZxdW90OyBvZiB3aGljaCB0aGV5IGFyZQ0K
ICAvL3N1cHBvc2VkIHRvIGJlIGEgcGFydC4gIFNvIG11Y2ggZm9yICZxdW90O29iamVjdC1vcmll
bnRhdGlvbiZxdW90OyBpbiB0aGUgZm9ybWFsLCBhbmQNCiAgLy9xdWl0ZSBhcmJpdHJhcnksIGRl
ZmluaXRpb24gb2YgdGhlIHRlcm0hICBJIGJlbGlldmUgdGhhdCB0aGUgZmlyc3QgdHdvDQogIC8v
cHJvYmxlbXMgcmVmZXJlbmNlZCBpbiB0aGlzIHBhcmFncmFwaCBhcmUgYSBkaXJlY3QgY29uc2Vx
dWVuY2Ugb2YgdGhlIHRoaXJkLg0KICAvL1RoZXNlIHByb2JsZW1zIGFyZSBub3Qgc3BlY2lhbCB0
byB0aGlzIENhbnRlZW4sIGJ1dCBhcmUgdW5pdmVyc2FsIGFjcm9zcw0KICAvL2FsbCBwYXNzaXZl
IG9iamVjdHMuDQogIC8vDQogIC8vVGhlIENhbnRlZW4gc2hvdWxkLCBvZiBjb3Vyc2UsIGJlIGlt
cGxlbWVudGVkIGFzIGFuIGFjdGl2ZSBvYmplY3QgY29ubmVjdGVkDQogIC8vdG8gdGhlIHBoaWxv
c29waGVycyBhbmQgdGhlIGNoZWYgdmlhIHNpbXBsZSBjaGFubmVscyBvciBidWZmZXJzLiAgVGhl
biwgd2UNCiAgLy93b3VsZG4ndCBoYXZlIHRoZSBwcm9ibGVtcyBhcmlzaW5nIGZyb20gdGhpcyBk
ZXNpZ24uICBUaGlzIGlzIGxlZnQgYXMgYW4NCiAgLy9leGVyY2lzZSENCiAgLy8NCiAgLy99fX0N
CiAgLy8NCiAgLy99fX0NCg0KICBwcml2YXRlIGludCBuX2NoaWNrZW5zID0gMDsNCg0KICAvL3t7
eyAgc3luY2hyb25pemVkIGdldCAobm8gY2hpY2tlbnMgPT0mZ3Q7IHdhaXQpDQogIHB1YmxpYyBz
eW5jaHJvbml6ZWQgaW50IGdldCAoaW50IGlkKSB7DQogICAgLy97e3sNCiAgICB3aGlsZSAobl9j
aGlja2VucyA9PSAwKSB7DQogICAgICAvL3t7eyAgbW9hbg0KICAgICAgU3lzdGVtLm91dC5wcmlu
dGxuICgmcXVvdDsoJnF1b3Q7ICsgU3lzdGVtLmN1cnJlbnRUaW1lTWlsbGlzKCkgKyAmcXVvdDsp
ICZxdW90OyArDQogICAgICAgICAgICAgICAgICAgICAgICAgICZxdW90O1BoaWwgJnF1b3Q7ICsg
aWQgKyAmcXVvdDs6IHdvdCwgbm8gY2hpY2tlbnM/ICBJJ2xsIFdBSVQgLi4uICZxdW90Oyk7DQog
ICAgICAvL319fQ0KICAgICAgLy97e3sgIGdldCBvbiBzdGFuZC1ieSBxdWV1ZSwgbGV0dGluZyBp
biB0aGUgbmV4dCBwaGlsb3NvcGhlciAob3IgY2hlZikNCiAgICAgIHRyeSB7d2FpdCgpO30gY2F0
Y2ggKEludGVycnVwdGVkRXhjZXB0aW9uIGUpe30NCiAgICAgIC8vfX19DQogICAgfQ0KICAgIC8v
e3t7ICB0aGFua3MNCiAgICBTeXN0ZW0ub3V0LnByaW50bG4gKCZxdW90OygmcXVvdDsgKyBTeXN0
ZW0uY3VycmVudFRpbWVNaWxsaXMoKSArICZxdW90OykgJnF1b3Q7ICsNCiAgICAgICAgICAgICAg
ICAgICAgICAgICZxdW90O1BoaWwgJnF1b3Q7ICsgaWQgKyAmcXVvdDs6IHRob3NlIGNoaWNrZW5z
IGxvb2sgZ29vZCAuLi4gb25lIHBsZWFzZSAuLi4mcXVvdDspOw0KICAgIC8vfX19DQogICAgbl9j
aGlja2Vucy0tOw0KICAgIHJldHVybiAxOw0KICAgIC8vfX19DQogIH0NCiAgLy99fX0NCg0KICAv
L3t7eyAgc3luY2hyb25pemVkIHB1dCAodGFrZXMgYXQgbGVhc3QgMyBzZWNvbmRzKQ0KICBwdWJs
aWMgc3luY2hyb25pemVkIHZvaWQgcHV0IChpbnQgdmFsdWUpIHsNCiAgICAvL3t7ew0KICAgIC8v
e3t7ICBicmluZyBpbiB0aGUgdHJheQ0KICAgIFN5c3RlbS5vdXQucHJpbnRsbiAoJnF1b3Q7KCZx
dW90OyArIFN5c3RlbS5jdXJyZW50VGltZU1pbGxpcygpICsgJnF1b3Q7KSAmcXVvdDsgKw0KICAg
ICAgICAgICAgICAgICAgICAgICAgJnF1b3Q7Q2hlZiAgOiBvdWNoIC4uLiBtYWtlIHJvb20gLi4u
IHRoaXMgZGlzaCBpcyB2ZXJ5IGhvdCAuLi4gJnF1b3Q7KTsNCiAgICAvL319fQ0KICAgIC8ve3t7
ICB0YWtlIDMgc2Vjb25kcyB0byBzZXQgZG93biB0aGUgZGlzaCAobWVhbndoaWxlIGEgcXVldWUg
bWF5IGJlIGRldmVsb3BpbmcpDQogICAgdHJ5IHtUaHJlYWQuc2xlZXAgKDMwMDApO30gY2F0Y2gg
KEludGVycnVwdGVkRXhjZXB0aW9uIGUpIHt9DQogICAgLy99fX0NCiAgICBuX2NoaWNrZW5zICs9
IHZhbHVlOw0KICAgIC8ve3t7ICBhbm5vdW5jZSBhcnJpdmFsIG9mIG1vcmUgY2hpY2tlbnMNCiAg
ICBTeXN0ZW0ub3V0LnByaW50bG4gKCZxdW90OygmcXVvdDsgKyBTeXN0ZW0uY3VycmVudFRpbWVN
aWxsaXMoKSArICZxdW90OykgJnF1b3Q7ICsNCiAgICAgICAgICAgICAgICAgICAgICAgICZxdW90
O0NoZWYgIDogbW9yZSBjaGlja2VucyAuLi4gJnF1b3Q7ICsNCiAgICAgICAgICAgICAgICAgICAg
ICAgIG5fY2hpY2tlbnMgKyAmcXVvdDsgbm93IGF2YWlsYWJsZSAuLi4gTk9USUZZSU5HIC4uLiZx
dW90Oyk7DQogICAgLy99fX0NCiAgICAvL3t7eyAgcHV0IGFueSB3YWl0aW5nIHBoaWxvc29waGVy
cyBiYWNrIG9uIHRoZSBtYWluIHF1ZXVlDQogICAgbm90aWZ5QWxsICgpOw0KICAgIC8vfX19DQog
ICAgLy99fX0NCiAgfQ0KICAvL319fQ0KDQogIC8vfX19DQp9DQovL319fQ0KDQovL3t7eyAgY2xh
c3MgQ2hlZiBleHRlbmRzIFRocmVhZCB7DQpjbGFzcyBDaGVmIGV4dGVuZHMgVGhyZWFkIHsNCiAg
Ly97e3sNCg0KICAvL3t7eyAgQ09NTUVOVCBkb2N1bWVudGF0aW9uDQogIC8vDQogIC8vQSBjaGVm
IGlzIGFuIGFjdGl2ZSBvYmplY3QuICBIZSBjb29rcyBjaGlja2VucyBpbiBiYXRjaGVzIG9mIGZv
dXIgLS0gdGFraW5nDQogIC8vYXJvdW5kIDIgc2Vjb25kcyBwZXIgYmF0Y2ggLS0gYW5kIHRoZW4g
dGFrZXMgdGhlbiB0byB0aGUgY2FudGVlbi4NCiAgLy8NCiAgLy9UaGlzIGN5Y2xlIGNvbnRpbnVl
cyBpbmRlZmluaXRlbHkuDQogIC8vDQogIC8vfX19DQoNCiAgcHJpdmF0ZSBDYW50ZWVuIGNhbnRl
ZW47DQoNCiAgLy97e3sgIGNvbnN0cnVjdG9yDQogIHB1YmxpYyBDaGVmIChDYW50ZWVuIGNhbnRl
ZW4pIHsNCiAgICB0aGlzLmNhbnRlZW4gPSBjYW50ZWVuOw0KICAgIHN0YXJ0ICgpOw0KICB9DQog
IC8vfX19DQoNCiAgLy97e3sgIHJ1bg0KICBwdWJsaWMgdm9pZCBydW4gKCkgew0KICAgIC8ve3t7
DQogICAgaW50IG5fY2hpY2tlbnM7DQoNCiAgICAvL3t7eyAgc3RhcnRpbmcNCiAgICBTeXN0ZW0u
b3V0LnByaW50bG4gKCZxdW90OygmcXVvdDsgKyBTeXN0ZW0uY3VycmVudFRpbWVNaWxsaXMoKSAr
ICZxdW90OykmcXVvdDsgKw0KICAgICAgICAgICAgICAgICAgICAgICAgJnF1b3Q7IENoZWYgIDog
c3RhcnRpbmcgLi4uICZxdW90Oyk7DQogICAgLy99fX0NCiAgICB3aGlsZSAodHJ1ZSkgew0KICAg
ICAgLy97e3sgIGNvb2sgNCBjaGlja2Vucw0KICAgICAgU3lzdGVtLm91dC5wcmludGxuICgmcXVv
dDsoJnF1b3Q7ICsgU3lzdGVtLmN1cnJlbnRUaW1lTWlsbGlzKCkgKyAmcXVvdDspJnF1b3Q7ICsN
CiAgICAgICAgICAgICAgICAgICAgICAgICAgJnF1b3Q7IENoZWYgIDogY29va2luZyAuLi4gJnF1
b3Q7KTsNCiAgICAgIC8ve3t7ICBjb29rIGZvciBhcm91bmQgMiBzZWNvbmRzDQogICAgICB0cnkg
e3NsZWVwICgyMDAwKTt9IGNhdGNoIChJbnRlcnJ1cHRlZEV4Y2VwdGlvbiBlKSB7fQ0KICAgICAg
Ly99fX0NCiAgICAgIG5fY2hpY2tlbnMgPSA0Ow0KICAgICAgU3lzdGVtLm91dC5wcmludGxuICgm
cXVvdDsoJnF1b3Q7ICsgU3lzdGVtLmN1cnJlbnRUaW1lTWlsbGlzKCkgKyAmcXVvdDspJnF1b3Q7
ICsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgJnF1b3Q7IENoZWYgIDogJnF1b3Q7ICsgbl9j
aGlja2VucyArICZxdW90OyBjaGlja2VucywgcmVhZHktdG8tZ28gLi4uICZxdW90Oyk7DQogICAg
ICAvL319fQ0KICAgICAgY2FudGVlbi5wdXQgKG5fY2hpY2tlbnMpOw0KICAgIH0NCiAgICAvL319
fQ0KICB9DQogIC8vfX19DQoNCiAgLy99fX0NCn0NCi8vfX19DQoNCi8ve3t7ICBjbGFzcyBQaGls
IGV4dGVuZHMgVGhyZWFkIHsNCmNsYXNzIFBoaWwgZXh0ZW5kcyBUaHJlYWQgew0KICAvL3t7ew0K
DQogIC8ve3t7ICBDT01NRU5UIGRvY3VtZW50YXRpb24NCiAgLy8NCiAgLy9BIHBoaWxvc29waGVy
IHRoaW5rcyBmb3IgYSB3aGlsZSAtLSBhcm91bmQgMyBzZWNvbmRzIC0tIGFuZCB0aGVuIGdvZXMg
dG8gdGhlDQogIC8vY2FudGVlbiBmb3IgZm9vZCwgY29uc3VtaW5nIHdoYXQgaGUgZ2V0cyBzdHJh
aWdodCBhd2F5LiAgIFRoaXMgY3ljbGUgY29udGludWVzDQogIC8vaW5kZWZpbml0ZWx5Lg0KICAv
Lw0KICAvL0V4Y2VwdCwgdGhhdCBpcywgZm9yIHBoaWxvc29waGVyIDAgLi4uICB3aG8gcmVmdXNl
cyB0byB0aGluayBhbmQganVzdCBrZWVwcw0KICAvL2dvaW5nIHRvIHRoZSBjYW50ZWVuLiAgSGUg
d2lsbCBnZXQgaGlzIGNvbWUtdXBwYW5jZSBzaG9ydGx5Lg0KICAvLw0KICAvL319fQ0KDQogIHBy
aXZhdGUgaW50IGlkOw0KICBwcml2YXRlIENhbnRlZW4gY2FudGVlbjsNCg0KICAvL3t7eyAgY29u
c3RydWN0b3INCiAgcHVibGljIFBoaWwgKGludCBpZCwgQ2FudGVlbiBjYW50ZWVuKSB7DQogICAg
dGhpcy5pZCA9IGlkOw0KICAgIHRoaXMuY2FudGVlbiA9IGNhbnRlZW47DQogICAgc3RhcnQgKCk7
DQogIH0NCiAgLy99fX0NCg0KICAvL3t7eyAgcnVuDQogIHB1YmxpYyB2b2lkIHJ1biAoKSB7DQog
ICAgLy97e3sNCiAgICBpbnQgY2hpY2tlbjsNCg0KICAgIC8ve3t7ICBzdGFydGluZw0KICAgIFN5
c3RlbS5vdXQucHJpbnRsbiAoJnF1b3Q7KCZxdW90OyArIFN5c3RlbS5jdXJyZW50VGltZU1pbGxp
cygpICsgJnF1b3Q7KSZxdW90OyArDQogICAgICAgICAgICAgICAgICAgICAgICAmcXVvdDsgUGhp
bCAmcXVvdDsgKyBpZCArICZxdW90Ozogc3RhcnRpbmcgLi4uICZxdW90Oyk7DQogICAgLy99fX0N
CiAgICB3aGlsZSAodHJ1ZSkgew0KICAgICAgLy97e3sgIGV2ZXJ5b25lLCBiYXIgcGhpbG9zb3Bo
ZXIgMCwgaGFzIGEgbGl0dGxlIHRoaW5rDQogICAgICBpZiAoaWQgJmd0OyAwKSB7DQogICAgICAg
IC8ve3t7ICB0aGluayBmb3IgYXJvdW5kIDMgc2Vjb25kcw0KICAgICAgICB0cnkge3NsZWVwICgz
MDAwKTt9IGNhdGNoIChJbnRlcnJ1cHRlZEV4Y2VwdGlvbiBlKSB7fQ0KICAgICAgICAvL319fQ0K
ICAgICAgfQ0KICAgICAgLy99fX0NCiAgICAgIC8ve3t7ICB3YW50IGNoaWNrZW4NCiAgICAgIFN5
c3RlbS5vdXQucHJpbnRsbiAoJnF1b3Q7KCZxdW90OyArIFN5c3RlbS5jdXJyZW50VGltZU1pbGxp
cygpICsgJnF1b3Q7KSZxdW90OyArDQogICAgICAgICAgICAgICAgICAgICAgICAgICZxdW90OyBQ
aGlsICZxdW90OyArIGlkICsgJnF1b3Q7OiBnb3R0YSBlYXQgLi4uICZxdW90Oyk7DQogICAgICAv
L319fQ0KICAgICAgY2hpY2tlbiA9IGNhbnRlZW4uZ2V0IChpZCk7DQogICAgICAvL3t7eyAgY29u
c3VtZSBjaGlja2VuDQogICAgICBTeXN0ZW0ub3V0LnByaW50bG4gKCZxdW90OygmcXVvdDsgKyBT
eXN0ZW0uY3VycmVudFRpbWVNaWxsaXMoKSArICZxdW90OykmcXVvdDsgKw0KICAgICAgICAgICAg
ICAgICAgICAgICAgICAmcXVvdDsgUGhpbCAmcXVvdDsgKyBpZCArICZxdW90OzogbW1tIC4uLiB0
aGF0J3MgZ29vZCAuLi4gJnF1b3Q7KTsNCiAgICAgIC8vfX19DQogICAgfQ0KICAgIC8vfX19DQog
IH0NCiAgLy99fX0NCg0KICAvL319fQ0KfQ0KLy99fX0NCg0KLy97e3sgIGNsYXNzIENvbGxlZ2Ug
ew0KY2xhc3MgQ29sbGVnZSB7DQogIC8ve3t7DQoNCiAgLy97e3sgIENPTU1FTlQgZG9jdW1lbnRh
dGlvbg0KICAvLw0KICAvL1RoZSBDb2xsZWdlIGNvbnNpc3RzIG9mIDUgUGhpbG9zb3BoZXJzLCBh
IENoZWYgYW5kIHRoZSBDYW50ZWVuLiAgVGhlIENoZWYgYW5kDQogIC8vdGhlIFBoaWxvc29waGVy
cyBhcmUgJnF1b3Q7YWN0aXZlJnF1b3Q7IG9iamVjdHMuICBUaGUgQ2FudGVlbiBpcyBhICZxdW90
O3Bhc3NpdmUmcXVvdDsgb2JqZWN0DQogIC8vdGhyb3VnaCB3aGljaCB0aGUgUGhpbG9zb3BoZXJz
IGFuZCB0aGUgQ2hlZiBoYXZlIHRvIGludGVyYWN0Lg0KICAvLw0KICAvL1RoZSBDYW50ZWVuIGlz
IGltcGxlbWVudGVkIGluIHRoZSBzdHlsZSBvZiB0aGUgQ3ViYnlIb2xlIGV4YW1wbGUgZnJvbSBT
dW4ncw0KICAvL0phdmEgVHV0b3JpYWwuICBBcyBzdWNoLCBpdCBleHBvc2VzIGVhY2ggUGhpbG9z
b3BoZXIgdG8gdGhlIGRhbmdlciBvZg0KICAvL3N0YXJ2YXRpb24gKGJ5IGluZmluaXRlIG92ZXJ0
YWtpbmcgYnkgZmVsbG93IFBoaWxvc29waGVycykuICBTYWRseSwgdGhpcw0KICAvL2RvZXMgaGFw
cGVuIHdpdGggdGhlIHBhcnRpY3VsYXIgY2lyY3Vtc3RhbmNlcyBvZiB0aW1pbmcgc2V0IHVwIGlu
IHRoaXMNCiAgLy9kZW1vbnN0cmF0aW9uLiAgSGFwcGlseSwgaXQncyB0aGUgZ3JlZWR5IFBoaWxv
c29waGVyIHRoYXQgc3RhcnZlcyAtLSBoZQ0KICAvL25ldmVyIGV2ZW4gZ2V0cyBvbmUgbWVhbCwg
ZGVzcGl0ZSBiZWluZyBpbiB0aGUgQ2FudGVlbiB0aGUgd2hvbGUgdGltZSENCiAgLy8NCiAgLy99
fX0NCg0KICAvL3t7eyAgbWFpbg0KICBwdWJsaWMgc3RhdGljIHZvaWQgbWFpbiAoU3RyaW5nIGFy
Z3ZbXSkgew0KICAgIC8ve3t7DQoNCiAgICBpbnQgbl9waGlsb3NvcGhlcnMgPSA1Ow0KDQogICAg
Q2FudGVlbiBjYW50ZWVuID0gbmV3IENhbnRlZW4gKCk7DQoNCiAgICBDaGVmIGNoZWYgPSBuZXcg
Q2hlZiAoY2FudGVlbik7DQoNCiAgICBQaGlsW10gcGhpbCA9IG5ldyBQaGlsW25fcGhpbG9zb3Bo
ZXJzXTsNCg0KICAgIGZvciAoaW50IGkgPSAwOyBpICZsdDsgbl9waGlsb3NvcGhlcnM7IGkrKykg
ew0KICAgICAgcGhpbFtpXSA9IG5ldyBQaGlsIChpLCBjYW50ZWVuKTsNCiAgICB9DQoNCiAgICAv
L319fQ0KICB9DQogIC8vfX19DQoNCiAgLy99fX0NCn0NCi8vfX19DQp9fX0gIA0KDQoNCjwvQT4N
Cg0KPC9DT0RFPiANCjwvUFJFPg0KPC9CT0RZPg0KPC9IVE1MPg0KDQoNCg==

--bw0k8cvyavZtV1thLImY5bPfW58AATUc--

	


Last updated: Tue Nov 2 12:11:29 1999
Maintained by Peter Welch.