r27200 - trunk/freenet/test/freenet/crypt

[email protected] Wed, 22 Apr 2009 07:46:49 +0000
Newsgroups gmane.network.freenet.cvs
Message-ID <[email protected]>
QXV0aG9yOiBqMTZzZGl6CkRhdGU6IDIwMDktMDQtMjIgMDc6NDY6NDkgKzAwMDAgKFdlZCwgMjIg
QXByIDIwMDkpCk5ldyBSZXZpc2lvbjogMjcyMDAKClJlbW92ZWQ6CiAgIHRydW5rL2ZyZWVuZXQv
dGVzdC9mcmVlbmV0L2NyeXB0L0RTQUdyb3VwR2VuZXJhdG9yLmphdmEKICAgdHJ1bmsvZnJlZW5l
dC90ZXN0L2ZyZWVuZXQvY3J5cHQvRFNBR3JvdXBHZW5lcmF0b3JUZXN0LmphdmEKTG9nOgpEb2hn
aXQgcm0gdGVzdC9mcmVlbmV0L2NyeXB0L0RTQUdyb3VwR2VuZXJhdG9yLmphdmEgdGVzdC9mcmVl
bmV0L2NyeXB0L0RTQUdyb3VwR2VuZXJhdG9yVGVzdC5qYXZhIFJlbW92ZSB0aGUgdW5pdCB0ZXN0
IHRvbwoKRGVsZXRlZDogdHJ1bmsvZnJlZW5ldC90ZXN0L2ZyZWVuZXQvY3J5cHQvRFNBR3JvdXBH
ZW5lcmF0b3IuamF2YQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSB0cnVuay9mcmVlbmV0L3Rlc3QvZnJlZW5ldC9j
cnlwdC9EU0FHcm91cEdlbmVyYXRvci5qYXZhCTIwMDktMDQtMjIgMDc6NDE6MjQgVVRDIChyZXYg
MjcxOTkpCisrKyB0cnVuay9mcmVlbmV0L3Rlc3QvZnJlZW5ldC9jcnlwdC9EU0FHcm91cEdlbmVy
YXRvci5qYXZhCTIwMDktMDQtMjIgMDc6NDY6NDkgVVRDIChyZXYgMjcyMDApCkBAIC0xLDIwMiAr
MCwwIEBACi0vKiBUaGlzIGNvZGUgaXMgcGFydCBvZiBGcmVlbmV0LiBJdCBpcyBkaXN0cmlidXRl
ZCB1bmRlciB0aGUgR05VIEdlbmVyYWwKLSAqIFB1YmxpYyBMaWNlbnNlLCB2ZXJzaW9uIDIgKG9y
IGF0IHlvdXIgb3B0aW9uIGFueSBsYXRlciB2ZXJzaW9uKS4gU2VlCi0gKiBodHRwOi8vd3d3Lmdu
dS5vcmcvIGZvciBmdXJ0aGVyIGRldGFpbHMgb2YgdGhlIEdQTC4gKi8KLXBhY2thZ2UgZnJlZW5l
dC5jcnlwdDsKLQotaW1wb3J0IGphdmEubWF0aC5CaWdJbnRlZ2VyOwotaW1wb3J0IGphdmEuc2Vj
dXJpdHkuTWVzc2FnZURpZ2VzdDsKLWltcG9ydCBqYXZhLnNlY3VyaXR5Lk5vU3VjaEFsZ29yaXRo
bUV4Y2VwdGlvbjsKLQotaW1wb3J0IG5ldC5pMnAudXRpbC5OYXRpdmVCaWdJbnRlZ2VyOwotCi1p
bXBvcnQgZnJlZW5ldC5zdXBwb3J0LkhleFV0aWw7Ci0KLS8qKgotICogRFNBIEdyb3VwIEdlbmVy
YXRvci4KLSAqIEFkYXB0ZWQgZnJvbSBGSVBTIDE4Ni0yLgotICogQ2FuIGdlbmVyYXRlIHZhbGlk
IGdyb3VwcyBvZiBhbnkga2V5c2l6ZSBhbmQgYW55IGhhc2ggbGVuZ3RoLgotICovCi1wdWJsaWMg
Y2xhc3MgRFNBR3JvdXBHZW5lcmF0b3IgewotCi0gICAgc3RhdGljIEJpZ0ludGVnZXIgc21hbGxQ
cmltZXNbXSA9IG5ldyBCaWdJbnRlZ2VyW10geyBCaWdJbnRlZ2VyLnZhbHVlT2YoMyksCi0gICAg
ICAgIEJpZ0ludGVnZXIudmFsdWVPZig1KSwgQmlnSW50ZWdlci52YWx1ZU9mKDcpLAotICAgICAg
ICBCaWdJbnRlZ2VyLnZhbHVlT2YoMTEpLCBCaWdJbnRlZ2VyLnZhbHVlT2YoMTMpLAotICAgICAg
ICBCaWdJbnRlZ2VyLnZhbHVlT2YoMTcpLCBCaWdJbnRlZ2VyLnZhbHVlT2YoMTkpLAotICAgICAg
ICBCaWdJbnRlZ2VyLnZhbHVlT2YoMjMpLCBCaWdJbnRlZ2VyLnZhbHVlT2YoMjkpfTsKLQotCXB1
YmxpYyBzdGF0aWMgdm9pZCBtYWluKFN0cmluZ1tdIGFyZ3MpIHRocm93cyBOb1N1Y2hBbGdvcml0
aG1FeGNlcHRpb24gewotCQlZYXJyb3cgciA9IG5ldyBZYXJyb3coKTsKLQkJaW50IGtleUxlbmd0
aCA9IEludGVnZXIucGFyc2VJbnQoYXJnc1swXSk7Ci0JCWludCBoYXNoTGVuZ3RoID0gSW50ZWdl
ci5wYXJzZUludChhcmdzWzFdKTsKLQkJU3lzdGVtLm91dC5wcmludGxuKCJLZXkgbGVuZ3RoOiAi
K2tleUxlbmd0aCk7Ci0JCVN5c3RlbS5vdXQucHJpbnRsbigiSGFzaCBsZW5ndGg6ICIraGFzaExl
bmd0aCk7Ci0JCWlmKGhhc2hMZW5ndGggPiBrZXlMZW5ndGgpCi0JCQl0aHJvdyBuZXcgSWxsZWdh
bEFyZ3VtZW50RXhjZXB0aW9uKCJoYXNoTGVuZ3RoIG11c3Qgbm90IGJlIGdyZWF0ZXIgdGhhbiBr
ZXlMZW5ndGgiKTsKLQkJTWVzc2FnZURpZ2VzdCBtZDsKLQkJaWYoaGFzaExlbmd0aCA9PSAyNTYp
IHsKLQkJCW1kID0gU0hBMjU2LmdldE1lc3NhZ2VEaWdlc3QoKTsKLQkJfSBlbHNlIGlmKGhhc2hM
ZW5ndGggPT0gMTYwKSB7Ci0JCQltZCA9IE1lc3NhZ2VEaWdlc3QuZ2V0SW5zdGFuY2UoIlNIQS0x
NjAiKTsKLQkJfSBlbHNlIHsKLQkJCXRocm93IG5ldyBJbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24o
IkludmFsaWQgaGFzaCBsZW5ndGggIitoYXNoTGVuZ3RoKTsKLQkJfQotCQlpZihrZXlMZW5ndGgg
JSA2NCAhPSAwKQotCQkJdGhyb3cgbmV3IElsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbigiS2V5IGxl
bmd0aCBtdXN0IGJlIGRpdmlzaWJsZSBieSA2NCIpOwotCQlpZihrZXlMZW5ndGggJSBoYXNoTGVu
Z3RoICE9IDApCi0JCQl0aHJvdyBuZXcgSWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uKCJLZXkgbGVu
Z3RoIG11c3QgYmUgZGl2aXNpYmxlIGJ5IGhhc2ggbGVuZ3RoIChzaG9ydCBjdXQgdGFrZW4gaGVy
ZSkiKTsKLQkJd2hpbGUoIWdlbmVyYXRlKHIsIGtleUxlbmd0aCwgaGFzaExlbmd0aCwgbWQpKTsK
LQl9Ci0KLQlwcml2YXRlIHN0YXRpYyBib29sZWFuIGdlbmVyYXRlKFJhbmRvbVNvdXJjZSByLCBp
bnQga2V5TGVuZ3RoLCBpbnQgaGFzaExlbmd0aCwgTWVzc2FnZURpZ2VzdCBtZCkgewotCQkKLQkJ
aW50IG4gPSBrZXlMZW5ndGggLyBoYXNoTGVuZ3RoOwotCQkKLQkJLy8gMTogU0VFRCA9IGFyYml0
cmFyeSBzZXF1ZW5jZSBvZiBhdCBsZWFzdCBoYXNoTGVuZ3RoIGJpdHMKLQkJLy8gZyA9IGxlbmd0
aCBvZiBTRUVEIGluIGJpdHMKLQkJaW50IGcgPSBoYXNoTGVuZ3RoICogMjsKLQkJYnl0ZVtdIHNl
ZWQgPSBuZXcgYnl0ZVtnLzhdOwotCQlyLm5leHRCeXRlcyhzZWVkKTsKLQkJCi0JCS8vIDI6IFUg
PSBTSEEtMjU2KFNFRUQpIFhPUiBTSEEtMjU2KFNFRUQrMSBtb2QgMl5nKQotCQlieXRlW10gc2Vl
ZFBsdXMxID0gaW5jcmVtZW50KHNlZWQpOwotCQlieXRlW10gc2VlZEhhc2ggPSBtZC5kaWdlc3Qo
c2VlZCk7Ci0JCWJ5dGVbXSBzZWVkUGx1czFIYXNoID0gbWQuZGlnZXN0KHNlZWRQbHVzMSk7Ci0J
CWJ5dGVbXSBVID0gbmV3IGJ5dGVbaGFzaExlbmd0aC84XTsKLQkJZm9yKGludCBpPTA7aTxVLmxl
bmd0aDtpKyspCi0JCQlVW2ldID0gKGJ5dGUpIChzZWVkSGFzaFtpXSBeIHNlZWRQbHVzMUhhc2hb
aV0pOwotCQkKLQkJLy8gMzogU2V0IExTQiBhbmQgTVNCIG9uIFUgdG8gMSwgcSA9IFUKLQkJYnl0
ZVtdIHFCdWYgPSBuZXcgYnl0ZVtoYXNoTGVuZ3RoLzhdOwotCQlTeXN0ZW0uYXJyYXljb3B5KFUs
IDAsIHFCdWYsIDAsIGhhc2hMZW5ndGgvOCk7Ci0JCXFCdWZbMF0gPSAoYnl0ZSkgKHFCdWZbMF0g
fCAxMjgpOwotCQlxQnVmW3FCdWYubGVuZ3RoLTFdID0gKGJ5dGUpIChxQnVmW3FCdWYubGVuZ3Ro
LTFdIHwgMSk7Ci0JCUJpZ0ludGVnZXIgcSA9IG5ldyBCaWdJbnRlZ2VyKDEsIHFCdWYpOwotCQkK
LQkJLy8gNDogQ2hlY2sgdGhhdCBxIGlzIHByaW1lLCBhbmQgMnErMSBpcyBwcmltZQotCQkvLyA1
OiBJZiBub3QsIHJlc3RhcnQgZnJvbSBzdGVwIDEKLQkJCi0JCVN5c3RlbS5vdXQucHJpbnRsbigi
TWF5YmUgZ290IHByaW1lOiAiK3EudG9TdHJpbmcoMTYpKyAiICgiK3EuYml0TGVuZ3RoKCkrICcp
Jyk7Ci0JCQotCQlpZighaXNQcmltZShxKSkKLQkJCXJldHVybiBmYWxzZTsKLQkJCi0JCVN5c3Rl
bS5vdXQucHJpbnRsbigiR290IHByaW1lIHEiKTsKLQkJCi0JCUJpZ0ludGVnZXIgc29waGllR2Vy
bWFpbkNoZWNrID0gcS5hZGQocSkuYWRkKEJpZ0ludGVnZXIuT05FKTsKLQkJaWYoIWlzUHJpbWUo
c29waGllR2VybWFpbkNoZWNrKSkKLQkJCXJldHVybiBmYWxzZTsKLQotCQlTeXN0ZW0ub3V0LnBy
aW50bG4oIkdvdCBTRy1wcmltZSBxIik7Ci0JCQotCQkvLyA2OiBMZXQgY291bnRlciA9IDAgYW5k
IG9mZnNldCA9IDIKLQkJCi0JCWludCBjb3VudGVyID0gMDsKLQkJaW50IG9mZnNldCA9IDI7Ci0J
CQotCQlieXRlW10gY3VyU2VlZCA9IHNlZWRQbHVzMTsKLQkJCi0JCXdoaWxlKHRydWUpIHsKLQkJ
Ci0JCQkvLyA3OiBGb3IgayA9IDAuLi5uIGxldCBWX2sgPSBTSEEtMjU2KChTRUVEK29mZnNldCtr
KSBtb2QgMl5nKQotCQkJCi0JCQlieXRlW11bXSBWID0gbmV3IGJ5dGVbbl1bXTsKLQkJCQotCQkJ
Zm9yKGludCBpPTA7aTxuO2krKykgewotCQkJCWN1clNlZWQgPSBpbmNyZW1lbnQoY3VyU2VlZCk7
Ci0JCQkJVltpXSA9IG1kLmRpZ2VzdChjdXJTZWVkKTsKLQkJCX0KLQkJCQotCQkJLy8gODogUGFj
ayBhbGwgdGhlIFYncyBpbnRvIFcgYml0LXdpc2UsIHNldCB0aGUgdG9wIGJpdCBzbyBpcyBiZXR3
ZWVuIDJeKEwtMSkgYW5kIDJeTAotCQkJYnl0ZVtdIFdidWYgPSBuZXcgYnl0ZVtrZXlMZW5ndGgv
OF07Ci0JCQlmb3IoaW50IGk9MDtpPGtleUxlbmd0aDtpKz1oYXNoTGVuZ3RoKSB7Ci0JCQkJU3lz
dGVtLmFycmF5Y29weShWW2kvaGFzaExlbmd0aF0sIDAsIFdidWYsIGkvOCwgaGFzaExlbmd0aC84
KTsKLQkJCX0KLQkJCVdidWZbMF0gPSAoYnl0ZSkgKFdidWZbMF0gfCAxMjgpOwotCQkJCi0JCQlC
aWdJbnRlZ2VyIFggPSBuZXcgTmF0aXZlQmlnSW50ZWdlcigxLCBXYnVmKTsKLQkJCQotCQkJLy8g
OTogTGV0IGMgPSBYIG1vZCAycS4gU2V0IHAgPSBYIC0gKCBjIC0gMSApLiBUaGVyZWZvcmUgcCBt
b2QgMnEgPSAxLgotCQkJCi0JCQlCaWdJbnRlZ2VyIGMgPSBYLm1vZChxLmFkZChxKSk7Ci0JCQlC
aWdJbnRlZ2VyIHAgPSBYLnN1YnRyYWN0KGMuc3VidHJhY3QoQmlnSW50ZWdlci5PTkUpKTsKLQkJ
CQotCQkJaWYocC5iaXRMZW5ndGgoKSA+PSBrZXlMZW5ndGgtMSkgewotCQkJCWlmKGlzUHJpbWUo
cCkpIHsKLQkJCQkJZmluaXNoKHIsIGhhc2hMZW5ndGgsIG5ldyBOYXRpdmVCaWdJbnRlZ2VyKHAp
LCBuZXcgTmF0aXZlQmlnSW50ZWdlcihxKSwgc2VlZCwgY291bnRlcik7Ci0JCQkJCXJldHVybiB0
cnVlOwotCQkJCX0KLQkJCX0KLQkJCQotCQkJY291bnRlcisrOwotCQkJb2Zmc2V0ICs9IG47Ci0J
CQlpZihjb3VudGVyID49IDQwOTYpIHJldHVybiBmYWxzZTsKLQkJfQkJCi0JfQotCi0gICAgcHJp
dmF0ZSBzdGF0aWMgdm9pZCBmaW5pc2goUmFuZG9tU291cmNlIHIsIGludCBoYXNoTGVuZ3RoLCBO
YXRpdmVCaWdJbnRlZ2VyIHAsIE5hdGl2ZUJpZ0ludGVnZXIgcSwgYnl0ZVtdIHNlZWQsIGludCBj
b3VudGVyKSB7Ci0gICAgCVN5c3RlbS5vdXQucHJpbnRsbigiU0VFRDogIitIZXhVdGlsLmJ5dGVz
VG9IZXgoc2VlZCkpOwotICAgIAlTeXN0ZW0ub3V0LnByaW50bG4oIkNPVU5URVI6ICIrY291bnRl
cik7Ci0gICAgCVN5c3RlbS5vdXQucHJpbnRsbigicDogIitwLnRvU3RyaW5nKDE2KSsiICgiK3Au
Yml0TGVuZ3RoKCkrICcpJyk7Ci0gICAgCVN5c3RlbS5vdXQucHJpbnRsbigicTogIitxLnRvU3Ry
aW5nKDE2KSsiICgiK3EuYml0TGVuZ3RoKCkrICcpJyk7Ci0JCS8vIE5vdyBnZW5lcmF0ZSBnIChh
bGdvcml0aG0gZnJvbSBhcHBlbmRpeCA0IG9mIEZJUFMgMTg2LTIpCi0gICAgCU5hdGl2ZUJpZ0lu
dGVnZXIgZzsKLSAgICAJZG8gewotICAgIAkJQmlnSW50ZWdlciBlID0gcC5zdWJ0cmFjdChCaWdJ
bnRlZ2VyLk9ORSkuZGl2aWRlKHEpOwotICAgIAkJTmF0aXZlQmlnSW50ZWdlciBoOwotICAgIAkJ
ZG8gewotICAgIAkJCWggPSBuZXcgTmF0aXZlQmlnSW50ZWdlcihoYXNoTGVuZ3RoLCByKTsKLSAg
ICAJCX0gd2hpbGUoaC5jb21wYXJlVG8ocC5zdWJ0cmFjdChCaWdJbnRlZ2VyLk9ORSkpID49IDAp
OwotICAgIAkJZyA9IChOYXRpdmVCaWdJbnRlZ2VyKSBoLm1vZFBvdyhlLCBwKTsKLSAgICAJfSB3
aGlsZSAoZy5lcXVhbHMoQmlnSW50ZWdlci5PTkUpKTsKLSAgICAJRFNBR3JvdXAgZ3JvdXAgPSBu
ZXcgRFNBR3JvdXAocCwgcSwgZyk7Ci0gICAgCVN5c3RlbS5vdXQucHJpbnRsbigiZzogIitnLnRv
SGV4U3RyaW5nKCkrIiAoIitnLmJpdExlbmd0aCgpKyAnKScpOwotICAgIAlTeXN0ZW0ub3V0LnBy
aW50bG4oIkdyb3VwOiAiK2dyb3VwLnZlcmJvc2VUb1N0cmluZygpKTsKLSAgICAJbG9uZyB0b3Rh
bFNpZ1RpbWUgPSAwOwotICAgIAlsb25nIHRvdGFsVmVyaWZ5VGltZSA9IDA7Ci0gICAgCWZvcihp
bnQgaT0wO2k8MTAwMDA7aSsrKSB7Ci0gICAgCWJ5dGVbXSB0ZXN0SGFzaCA9IG5ldyBieXRlW2hh
c2hMZW5ndGgvOF07Ci0gICAgCXIubmV4dEJ5dGVzKHRlc3RIYXNoKTsKLSAgICAJTmF0aXZlQmln
SW50ZWdlciBtID0gbmV3IE5hdGl2ZUJpZ0ludGVnZXIoMSwgdGVzdEhhc2gpOwotICAgIAlEU0FQ
cml2YXRlS2V5IHByaXZLZXkgPSBuZXcgRFNBUHJpdmF0ZUtleShncm91cCwgcik7Ci0gICAgCURT
QVB1YmxpY0tleSBwdWJLZXkgPSBuZXcgRFNBUHVibGljS2V5KGdyb3VwLCBwcml2S2V5KTsKLSAg
ICAJbG9uZyBub3cgPSBTeXN0ZW0uY3VycmVudFRpbWVNaWxsaXMoKTsKLSAgICAJRFNBU2lnbmF0
dXJlIHNpZyA9IERTQS5zaWduKGdyb3VwLCBwcml2S2V5LCBtLCByKTsKLSAgICAJbG9uZyBtaWRk
bGUgPSBTeXN0ZW0uY3VycmVudFRpbWVNaWxsaXMoKTsKLSAgICAJYm9vbGVhbiBzdWNjZXNzID0g
RFNBLnZlcmlmeShwdWJLZXksIHNpZywgbSwgZmFsc2UpOwotICAgIAlsb25nIGVuZCA9IFN5c3Rl
bS5jdXJyZW50VGltZU1pbGxpcygpOwotICAgIAlpZihzdWNjZXNzKSB7Ci0gICAgCQl0b3RhbFNp
Z1RpbWUgKz0gKG1pZGRsZSAtIG5vdyk7Ci0gICAgCQl0b3RhbFZlcmlmeVRpbWUgKz0gKGVuZCAt
IG1pZGRsZSk7Ci0gICAgCX0gZWxzZSB7Ci0gICAgCQlTeXN0ZW0ub3V0LnByaW50bG4oIlNJR05B
VFVSRSBWRVJJRklDQVRJT04gRkFJTEVEISEhIik7Ci0gICAgCQlTeXN0ZW0uZXhpdCgxKTsKLSAg
ICAJfQotICAgIAl9Ci0gICAgCVN5c3RlbS5vdXQucHJpbnRsbigiU3VjY2Vzc2Z1bGx5IHNpZ25l
ZCBhbmQgdmVyaWZpZWQgMTAsMDAwIHRpbWVzLCBhdmVyYWdlIHNpZyB0aW1lICIrdG90YWxTaWdU
aW1lIC8gMTAwMDAuMCArIiwgYXZlcmFnZSB2ZXJpZnkgdGltZSAiK3RvdGFsVmVyaWZ5VGltZS8x
MDAwMC4wKTsKLQl9Ci0KLQlwcml2YXRlIHN0YXRpYyBieXRlW10gaW5jcmVtZW50KGJ5dGVbXSBz
ZWVkKSB7Ci0gICAgCWJ5dGVbXSBvYnVmID0gbmV3IGJ5dGVbc2VlZC5sZW5ndGhdOwotICAgIAlT
eXN0ZW0uYXJyYXljb3B5KHNlZWQsIDAsIG9idWYsIDAsIHNlZWQubGVuZ3RoKTsKLSAgICAJaW50
IHBvcyA9IHNlZWQubGVuZ3RoLTE7Ci0gICAgCXdoaWxlKHBvcyA+PSAwKSB7Ci0gICAgCQlieXRl
IGIgPSAoYnl0ZSkgKG9idWZbcG9zXSArIDEpOwotICAgIAkJb2J1Zltwb3NdID0gYjsKLSAgICAJ
CWlmKGIgIT0gMCkgcmV0dXJuIG9idWY7Ci0gICAgCQlwb3MtLTsKLSAgICAJfQotICAgIAlyZXR1
cm4gb2J1ZjsKLQl9Ci0KLQlwdWJsaWMgc3RhdGljIGJvb2xlYW4gaXNQcmltZShCaWdJbnRlZ2Vy
IGIpIHsKLQkJaWYoQmlnSW50ZWdlci5PTkUuY29tcGFyZVRvKGIpID4gLTEpCi0JCQl0aHJvdyBu
ZXcgSWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uKCJDYW4ndCBiZSBhIHByaW1lIG51bWJlciEiKTsK
LQkJZm9yKGludCBpID0gMDsgaSA8IHNtYWxsUHJpbWVzLmxlbmd0aDsgaSsrKSB7Ci0JCQlpZihi
Lm1vZChzbWFsbFByaW1lc1tpXSkuZXF1YWxzKEJpZ0ludGVnZXIuWkVSTykpCi0JCQkJcmV0dXJu
IGZhbHNlOwotCQl9Ci0JCS8vIEZJUFMgMTg2LTIgcmVjb21tZW5kcyAyXjEwMDoxIGNvbmZpZGVu
Y2UKLSAgICAgICAgcmV0dXJuIGIuaXNQcm9iYWJsZVByaW1lKDIwMCk7Ci0gICAgfQotCi19CgpE
ZWxldGVkOiB0cnVuay9mcmVlbmV0L3Rlc3QvZnJlZW5ldC9jcnlwdC9EU0FHcm91cEdlbmVyYXRv
clRlc3QuamF2YQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSB0cnVuay9mcmVlbmV0L3Rlc3QvZnJlZW5ldC9jcnlw
dC9EU0FHcm91cEdlbmVyYXRvclRlc3QuamF2YQkyMDA5LTA0LTIyIDA3OjQxOjI0IFVUQyAocmV2
IDI3MTk5KQorKysgdHJ1bmsvZnJlZW5ldC90ZXN0L2ZyZWVuZXQvY3J5cHQvRFNBR3JvdXBHZW5l
cmF0b3JUZXN0LmphdmEJMjAwOS0wNC0yMiAwNzo0Njo0OSBVVEMgKHJldiAyNzIwMCkKQEAgLTEs
MzkgKzAsMCBAQAotLyoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2Fu
IHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5Ci0gKiBpdCB1bmRlciB0aGUgdGVybXMgb2Yg
dGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQotICogdGhlIEZy
ZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwg
b3IKLSAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogVGhpcyBw
cm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWws
Ci0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3
YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UiBQVVJQT1NFLiAgU2VlIHRoZQotICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1v
cmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRo
ZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07
IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKLSAqIEZvdW5kYXRpb24sIEluYy4s
IDU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3LCBVU0Eu
Ci0gKi8KLQotcGFja2FnZSBmcmVlbmV0LmNyeXB0OwotCi1pbXBvcnQgamF2YS5tYXRoLkJpZ0lu
dGVnZXI7Ci0KLWltcG9ydCBqdW5pdC5mcmFtZXdvcmsuVGVzdENhc2U7Ci0KLS8qKgotICogVGVz
dCBjYXNlIGZvciB0aGUge0BsaW5rIGZyZWVuZXQuY3J5cHQuRFNBR3JvdXBHZW5lcmF0b3JUZXN0
fSBjbGFzcy4KLSAqIAotICogQGF1dGhvciBGbG9yZW50IERhaWduae+/vXJlICZsdDtuZXh0Z2Vu
c0BmcmVlbmV0cHJvamVjdC5vcmcmZ3Q7Ci0gKi8KLXB1YmxpYyBjbGFzcyBEU0FHcm91cEdlbmVy
YXRvclRlc3QgZXh0ZW5kcyBUZXN0Q2FzZSB7Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0SXNQcmltZSgp
IHsgLy8gTm8gbmVlZCB0byB0ZXN0IGJlbG93IDMwIGFzIGl0IHdvbid0IHdvcmsgYW55d2F5Ci0J
CXRyeSB7IERTQUdyb3VwR2VuZXJhdG9yLmlzUHJpbWUoQmlnSW50ZWdlci5aRVJPKTsgZmFpbCgp
OyB9IGNhdGNoIChJbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24gZSkge30KLQkJdHJ5IHsgRFNBR3Jv
dXBHZW5lcmF0b3IuaXNQcmltZShCaWdJbnRlZ2VyLk9ORSk7IGZhaWwoKTsgfSBjYXRjaCAoSWxs
ZWdhbEFyZ3VtZW50RXhjZXB0aW9uIGUpIHt9Ci0JCQotCQlhc3NlcnRUcnVlKERTQUdyb3VwR2Vu
ZXJhdG9yLmlzUHJpbWUoQmlnSW50ZWdlci52YWx1ZU9mKDIpKSk7Ci0JCWFzc2VydFRydWUoRFNB
R3JvdXBHZW5lcmF0b3IuaXNQcmltZShCaWdJbnRlZ2VyLnZhbHVlT2YoMTAyMSkpKTsKLQkJCi0J
CWFzc2VydEZhbHNlKERTQUdyb3VwR2VuZXJhdG9yLmlzUHJpbWUoQmlnSW50ZWdlci52YWx1ZU9m
KDU1KSkpOwotCX0KLX0KCl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fCmN2cyBtYWlsaW5nIGxpc3QKY3ZzQGZyZWVuZXRwcm9qZWN0Lm9yZwpodHRwOi8vZW11
LmZyZWVuZXRwcm9qZWN0Lm9yZy9jZ2ktYmluL21haWxtYW4vbGlzdGluZm8vY3Zz