2013-02-19 17:18:24

by Bodo Stroesser

[permalink] [raw]
Subject: [PATCH] sunrpc.ko: RPC cache fix races

U2Vjb25kIGF0dGVtcHQgdXNpbmcgdGhlIGNvcnJlY3QgRlJPTS4gU29ycnkgZm9yIHRoZSBu
b2lzZS4KCgpIaSwKCkkgZm91bmQgYSBwcm9ibGVtIGluIHN1bnJwYy5rbyBvbiBhIFNMRVMx
MSBTUDEgKDIuNi4zMi41OS0wLDcuMSkKYW5kIGZpeGVkIGl0IChzZWUgZmlyc3QgcGF0Y2gg
aWZvciAyLjYuMzIuNjAgYmVsb3cpLgpGb3IgdXMgdGhlIHBhdGNoIHdvcmtzIGZpbmUgKHRl
c3RlZCBvbiAyLjYuMzIuNTktMC43LjEpLgoKQUZBSUNTIGZyb20gdGhlIGNvZGUsIHRoZSBw
cm9ibGVtIHNlZW1zIHRvIHBlcnNpc3QgaW4gY3VycmVudAprZXJuZWwgdmVyc2lvbnMgYWxz
by4gVGh1cywgSSBhZGRlZCB0aGUgc2Vjb25kIHBhdGNoIGZvciAzLjcuOS4KQXMgdGhlIHNl
dHVwIHRvIHJlcHJvZHVjZSB0aGUgcHJvYmxlbSBpcyBxdWl0ZSBjb21wbGV4LCBJIGNvdWxk
bid0CnRlc3QgdGhlIHNlY29uZCBwYXRjaCB5ZXQuIFNvIGNvbnNpZGVyIHRoaXMgb25lIGFz
IGEgUkZDLgoKQmVzdCByZWdhcmRzLApCb2RvCgpQbGVhc2UgQ0MgbWUsIEknbSBub3Qgb24g
dGhlIGxpc3QuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpG
cm9tOiBCb2RvIFN0cm9lc3NlciA8YnN0cm9lc3NlckB0cy5mdWppdHN1LmNvbT4KRGF0ZTog
RnJpLCAwOCBGZWIgMjAxMwpTdWJqZWN0OiBbUEFUQ0hdIG5ldDogc3VucnBjOiBmaXggcmFj
ZXMgaW4gUlBDIGNhY2hlCgpXZSBmb3VuZCB0aGUgcHJvYmxlbSBhbmQgdGVzdGVkIHRoZSBw
YXRjaCBvbiBhIFNMRVMxMSBTUDEgMi42LjMyLjU5LTAuNy4xCgpUaGlzIHBhdGNoIGFwcGxp
ZXMgdG8gbGludXgtMi42LjMyLjYwIChjaGFuZ2VkIG1vbm90b25pY19zZWNvbmRzIC0tPgpn
ZXRfc2Vjb25kcygpKQoKU3BvcmFkaWNhbGx5IE5GUzMgUlBDIHJlcXVlc3RzIHRvIHRoZSBu
ZnMgc2VydmVyIGFyZSBkcm9wcGVkIGR1ZSB0bwpjYWNoZV9jaGVjaygpIChuZXQvc3VucnBj
L2NhY2hlLmMpIHJldHVybmluZyAtRVRJTUVET1VUIGZvciBhbiBlbnRyeQpvZiB0aGUgImF1
dGgudW5peC5naWQiIGNhY2hlLgpJbiB0aGlzIGNhc2UsIG5vIE5GUyByZXBseSBpcyBzZW50
IHRvIHRoZSBjbGllbnQuCgpUaGUgcmVhc29uIGZvciB0aGUgZHJvcHBlZCByZXF1ZXN0cyBh
cmUgcmFjZXMgaW4gY2FjaGVfY2hlY2soKSB3aGVuCmNhY2hlX21ha2VfdXBjYWxsKCkgcmV0
dXJucyAtRUlOVkFMIChiZWNhdXNlIGl0IGlzIGNhbGxlZCBmb3IgYSBjYWNoZQp3aXRob3V0
IHJlYWRlcnMpIGFuZCBjYWNoZV9jaGVjaygpIHRoZXJlZm9yZSByZWZyZXNoZXMgdGhlIGNh
Y2hlIGVudHJ5IAoocnYgPT0gLUVBR0FJTikuCgpUaGVyZSBhcmUgdGhyZWUgZGV0YWlscyB0
aGF0IG5lZWQgdG8gYmUgY2hhbmdlZDoKIDEpIGNhY2hlX3JldmlzaXRfcmVxdWVzdCgpIG11
c3Qgbm90IGJlIGNhbGxlZCBiZWZvcmUgY2FjaGVfZnJlc2hfbG9ja2VkKCkKICAgIGhhcyB1
cGRhdGVkIHRoZSBjYWNoZSBlbnRyeSwgYXMgY2FjaGVfcmV2aXNpdF9yZXF1ZXN0KCkgd2Fr
ZXMgdXAKICAgIHRocmVhZHMgd2FpdGluZyBmb3IgdGhlIGNhY2hlIGVudHJ5IHRvIGJlIHVw
ZGF0ZWQuCiAgICBUaGUgZXhwbGljaXQgY2FsbCB0byBjYWNoZV9yZXZpc2l0X3JlcXVlc3Qo
KSBpcyBub3QgbmVlZGVkLCBhcwogICAgY2FjaGVfZnJlc2hfdW5sb2NrZWQoKSBjYWxscyBp
dCBhbnl3YXkuCiAgICAoQnV0IGluIGNhc2Ugb2Ygbm90IHVwZGF0aW5nIHRoZSBjYWNoZSBl
bnRyeSwgY2FjaGVfcmV2aXNpdF9yZXF1ZXN0KCkKICAgIG11c3QgYmUgY2FsbGVkLiBUaHVz
LCB3ZSB1c2UgYSBmYWxsIHRocm91Z2ggaW4gdGhlICJjYXNlIikuCiAyKSBDQUNIRV9QRU5E
SU5HIG11c3Qgbm90IGJlIGNsZWFyZWQgYmVmb3JlIGNhY2hlX2ZyZXNoX2xvY2tlZCgpIGhh
cwogICAgdXBkYXRlZCB0aGUgY2FjaGUgZW50cnksIGFzIGNhY2hlX2RlZmVyX3JlcSgpIGNh
biByZXR1cm4gd2l0aG91dCByZWFsbHkKICAgIHNsZWVwaW5nIGlmIGl0IGRldGVjdHMgQ0FD
SEVfUEVORElORyB1bnNldC4KICAgIChJbiBjYXNlIG9mIG5vdCB1cGRhdGluZyB0aGUgY2Fj
aGUgZW50cnkgYWdhaW4gd2UgdXNlIHRoZSBmYWxsIHRocm91Z2gpCiAzKSBJbWFnaW5lIGEg
dGhyZWFkIHRoYXQgY2FsbHMgY2FjaGVfY2hlY2soKSBhbmQgZ2V0cyBydiA9IC1FTk9FTlQg
ZnJvbQogICAgY2FjaGVfaXNfdmFsaWQoKS4gVGhlbiBpdCBzZXRzIENBQ0hFX1BFTkRJTkdz
IGFuZCBjYWxscwogICAgY2FjaGVfbWFrZV91cGNhbGwoKS4KICAgIFdlIGFzc3VtZSB0aGF0
IG1lYW53aGlsZSBnZXRfc2Vjb25kcygpIGFkdmFuY2VzIHRvIHRoZSBuZXh0CiAgICBzZWMu
IGFuZCBhIHNlY29uZCB0aHJlYWQgYWxzbyBjYWxscyBjYWNoZV9jaGVjaygpLiBJdCBnZXRz
IC1FQUdBSU4gZnJvbQogICAgY2FjaGVfaXNfdmFsaWQoKSBmb3IgdGhlIHNhbWUgY2FjaGUg
ZW50cnkuIEFzIENBQ0hFX1BFTkRJTkcgc3RpbGwgaXMKICAgIHNldCwgaXQgY2FsbHMgY2Fj
aGVfZGVmZXJfcmVxKCkgaW1tZWRpYXRlbHkgYW5kIHdhaXRzIGZvciBhIHdha2V1cCBmcm9t
CiAgICB0aGUgZmlyc3QgdGhyZWFkLgogICAgQWZ0ZXIgY2FjaGVfbWFrZV91cGNhbGwoKSBy
ZXR1cm5lZCAtRUlOVkFMLCB0aGUgZmlyc3QgdGhyZWFkIGRvZXMgbm90CiAgICB1cGRhdGUg
dGhlIGNhY2hlIGVudHJ5IGFzIGl0IGhhZCBnb3QgcnYgPSAtRU5PRU5ULCBidXQgd2FrZXMg
dXAgdGhlCiAgICBzZWNvbmQgdGhyZWFkIGJ5IGNhbGxpbmcgY2FjaGVfcmV2aXNpdF9yZXF1
ZXN0KCkuCiAgICBUaHJlYWQgdHdvIHdha2VzIHVwLCBjYWxscyBjYWNoZV9pc192YWxpZCgp
IGFuZCBhZ2FpbiBnZXRzIC1FQUdBSU4uCiAgICBUaHVzLCB0aGUgcmVzdWx0IG9mIHRoZSBz
ZWNvbmQgY2FjaGVfY2hlY2soKSBpcyAtRVRJTUVET1VUIGFuZCB0aGUKICAgIE5GUyByZXF1
ZXN0IGlzIGRyb3BwZWQuCiAgICBUbyBzb2x2ZSB0aGlzLCB0aGUgY2FjaGUgZW50cnkgbm93
IGlzIHVwZGF0ZWQgbm90IG9ubHkgaWYgcnYgPT0gLUVBR0FJTgogICAgYnV0IGlmIHJ2ID09
IC1FTk9FTlQgYWxzby4gVGhpcyBpcyBhIHN1ZmZpY2llbnQgd29ya2Fyb3VuZCwgYXMgdGhl
CiAgICBmaXJzdCB0aHJlYWQgd291bGQgaGF2ZSB0byBzdGF5IGluIGNhY2hlX2NoZWNrKCkg
YmV0d2VlbiBpdHMgY2FsbCB0bwogICAgY2FjaGVfaXNfdmFsaWQoKSBhbmQgY2xlYXJpbmcg
Q0FDSEVfUEVORElORyBmb3IgbW9yZSB0aGFuIDYwIHNlY29uZHMKICAgIHRvIGJyZWFrIHRo
ZSB3b3JrYXJvdW5kLgogICAgClNpZ25lZC1vZmYtYnk6IEJvZG8gU3Ryb2Vzc2VyIDxic3Ry
b2Vzc2VyQHRzLmZ1aml0c3UuY29tPgotLS0KCi0tLSBhL25ldC9zdW5ycGMvY2FjaGUuYwky
MDEyLTA4LTA4IDIxOjM1OjA5LjAwMDAwMDAwMCArMDIwMAorKysgYi9uZXQvc3VucnBjL2Nh
Y2hlLmMJMjAxMy0wMi0wOCAxNDoyOTo0MS4wMDAwMDAwMDAgKzAxMDAKQEAgLTIzMywxNSAr
MjMzLDE0IEBAIGludCBjYWNoZV9jaGVjayhzdHJ1Y3QgY2FjaGVfZGV0YWlsICpkZXQKIAkJ
aWYgKCF0ZXN0X2FuZF9zZXRfYml0KENBQ0hFX1BFTkRJTkcsICZoLT5mbGFncykpIHsKIAkJ
CXN3aXRjaCAoY2FjaGVfbWFrZV91cGNhbGwoZGV0YWlsLCBoKSkgewogCQkJY2FzZSAtRUlO
VkFMOgotCQkJCWNsZWFyX2JpdChDQUNIRV9QRU5ESU5HLCAmaC0+ZmxhZ3MpOwotCQkJCWNh
Y2hlX3JldmlzaXRfcmVxdWVzdChoKTsKLQkJCQlpZiAocnYgPT0gLUVBR0FJTikgeworCQkJ
CWlmIChydiA9PSAtRUFHQUlOIHx8IHJ2ID09IC1FTk9FTlQpIHsKIAkJCQkJc2V0X2JpdChD
QUNIRV9ORUdBVElWRSwgJmgtPmZsYWdzKTsKIAkJCQkJY2FjaGVfZnJlc2hfbG9ja2VkKGgs
IGdldF9zZWNvbmRzKCkrQ0FDSEVfTkVXX0VYUElSWSk7CisJCQkJCWNsZWFyX2JpdChDQUNI
RV9QRU5ESU5HLCAmaC0+ZmxhZ3MpOwogCQkJCQljYWNoZV9mcmVzaF91bmxvY2tlZChoLCBk
ZXRhaWwpOwogCQkJCQlydiA9IC1FTk9FTlQ7CisJCQkJCWJyZWFrOwogCQkJCX0KLQkJCQli
cmVhazsKIAogCQkJY2FzZSAtRUFHQUlOOgogCQkJCWNsZWFyX2JpdChDQUNIRV9QRU5ESU5H
LCAmaC0+ZmxhZ3MpOwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQpGcm9tOiBCb2RvIFN0cm9lc3NlciA8YnN0cm9lc3NlckB0cy5mdWppdHN1LmNvbT4KRGF0
ZTogRnJpLCAwOCBGZWIgMjAxMwpTdWJqZWN0OiBbUEFUQ0hdIG5ldDogc3VucnBjOiBmaXgg
cmFjZXMgaW4gUlBDIGNhY2hlCgpUaGlzIHBhdGNoIGFwcGxpZXMgdG8gU0xFUyAxMSBTUDIg
bGludXgtMy4wLjUxLTAuNy45IGFuZCBhbHNvIHRvCnZhbmlsbGEgbGludXgtMy43LjkKCkl0
IGlzIHVudGVzdGVkIGFuZCBpcyBvbmx5IGJhc2VkIG9uIGEgY29kZSByZXZpZXcgYWZ0ZXIg
d2UKYW5hbHl6ZWQgdGhlIHJlYXNvbiBmb3IgTkZTIHJlcXVlc3RzIGJlaW5nIGRyb3BwZWQg
b24gYQpTTEVTMTEgU1AxIChsaW51eC0yLjYuMzIuNTktMC43LjEpCgpTcG9yYWRpY2FsbHkg
TkZTMyBSUEMgcmVxdWVzdHMgdG8gdGhlIG5mcyBzZXJ2ZXIgYXJlIGRyb3BwZWQgZHVlIHRv
CmNhY2hlX2NoZWNrKCkgKG5ldC9zdW5ycGMvY2FjaGUuYykgcmV0dXJuaW5nIC1FVElNRURP
VVQgZm9yIGFuIGVudHJ5Cm9mIHRoZSAiYXV0aC51bml4LmdpZCIgY2FjaGUuCkluIHRoaXMg
Y2FzZSwgbm8gTkZTIHJlcGx5IGlzIHNlbnQgdG8gdGhlIGNsaWVudC4KClRoZSByZWFzb24g
Zm9yIHRoZSBkcm9wcGVkIHJlcXVlc3RzIGFyZSByYWNlcyBpbiBjYWNoZV9jaGVjaygpIHdo
ZW4KY2FjaGVfbWFrZV91cGNhbGwoKSByZXR1cm5zIC1FSU5WQUwgKGJlY2F1c2UgaXQgaXMg
Y2FsbGVkIGZvciBhIGNhY2hlCndpdGhvdXQgcmVhZGVycykgYW5kIGNhY2hlX2NoZWNrKCkg
dGhlcmVmb3JlIHJlZnJlc2hlcyB0aGUgY2FjaGUgZW50cnkgCihydiA9PSAtRUFHQUlOKS4K
ClRoZXJlIGFyZSB0d28gZGV0YWlscyB0aGF0IG5lZWQgdG8gYmUgY2hhbmdlZDoKIDEpIGNh
Y2hlX3JldmlzaXRfcmVxdWVzdCgpIG11c3Qgbm90IGJlIGNhbGxlZCBiZWZvcmUgY2FjaGVf
ZnJlc2hfbG9ja2VkKCkKICAgIGhhcyB1cGRhdGVkIHRoZSBjYWNoZSBlbnRyeSwgYXMgY2Fj
aGVfcmV2aXNpdF9yZXF1ZXN0KCkgd2FrZXMgdXAKICAgIHRocmVhZHMgd2FpdGluZyBmb3Ig
dGhlIGNhY2hlIGVudHJ5IHRvIGJlIHVwZGF0ZWQuCiAgICBUaGUgZXhwbGljaXQgY2FsbCB0
byBjYWNoZV9yZXZpc2l0X3JlcXVlc3QoKSBpcyBub3QgbmVlZGVkLCBhcwogICAgY2FjaGVf
ZnJlc2hfdW5sb2NrZWQoKSBjYWxscyBpdCBhbnl3YXkuCiAgICAoQnV0IGluIGNhc2Ugb2Yg
bm90IHVwZGF0aW5nIHRoZSBjYWNoZSBlbnRyeSwgY2FjaGVfcmV2aXNpdF9yZXF1ZXN0KCkK
ICAgIG11c3QgYmUgY2FsbGVkKS4KIDIpIENBQ0hFX1BFTkRJTkcgbXVzdCBub3QgYmUgY2xl
YXJlZCBiZWZvcmUgY2FjaGVfZnJlc2hfbG9ja2VkKCkgaGFzCiAgICB1cGRhdGVkIHRoZSBj
YWNoZSBlbnRyeSwgYXMgY2FjaGVfd2FpdF9yZXEoKSBjYWxsZWQgYnkKICAgIGNhY2hlX2Rl
ZmVyX3JlcSgpIGNhbiByZXR1cm4gd2l0aG91dCByZWFsbHkgc2xlZXBpbmcgaWYgaXQgZGV0
ZWN0cwogICAgQ0FDSEVfUEVORElORyB1bnNldC4KClNpZ25lZC1vZmYtYnk6IEJvZG8gU3Ry
b2Vzc2VyIDxic3Ryb2Vzc2VyQHRzLmZ1aml0c3UuY29tPgotLS0KCi0tLSBhL25ldC9zdW5y
cGMvY2FjaGUuYwkyMDEzLTAyLTA4IDE1OjU2OjA3LjAwMDAwMDAwMCArMDEwMAorKysgYi9u
ZXQvc3VucnBjL2NhY2hlLmMJMjAxMy0wMi0wOCAxNjowNDozMi4wMDAwMDAwMDAgKzAxMDAK
QEAgLTIzMCwxMSArMjMwLDE0IEBAIHN0YXRpYyBpbnQgdHJ5X3RvX25lZ2F0ZV9lbnRyeShz
dHJ1Y3QgY2EKIAlydiA9IGNhY2hlX2lzX3ZhbGlkKGRldGFpbCwgaCk7CiAJaWYgKHJ2ICE9
IC1FQUdBSU4pIHsKIAkJd3JpdGVfdW5sb2NrKCZkZXRhaWwtPmhhc2hfbG9jayk7CisJCWNs
ZWFyX2JpdChDQUNIRV9QRU5ESU5HLCAmaC0+ZmxhZ3MpOworCQljYWNoZV9yZXZpc2l0X3Jl
cXVlc3QoaCk7CiAJCXJldHVybiBydjsKIAl9CiAJc2V0X2JpdChDQUNIRV9ORUdBVElWRSwg
JmgtPmZsYWdzKTsKIAljYWNoZV9mcmVzaF9sb2NrZWQoaCwgc2Vjb25kc19zaW5jZV9ib290
KCkrQ0FDSEVfTkVXX0VYUElSWSk7CiAJd3JpdGVfdW5sb2NrKCZkZXRhaWwtPmhhc2hfbG9j
ayk7CisJY2xlYXJfYml0KENBQ0hFX1BFTkRJTkcsICZoLT5mbGFncyk7CiAJY2FjaGVfZnJl
c2hfdW5sb2NrZWQoaCwgZGV0YWlsKTsKIAlyZXR1cm4gLUVOT0VOVDsKIH0KQEAgLTI3NSw4
ICsyNzgsNiBAQCBpbnQgY2FjaGVfY2hlY2soc3RydWN0IGNhY2hlX2RldGFpbCAqZGV0CiAJ
CWlmICghdGVzdF9hbmRfc2V0X2JpdChDQUNIRV9QRU5ESU5HLCAmaC0+ZmxhZ3MpKSB7CiAJ
CQlzd2l0Y2ggKGNhY2hlX21ha2VfdXBjYWxsKGRldGFpbCwgaCkpIHsKIAkJCWNhc2UgLUVJ
TlZBTDoKLQkJCQljbGVhcl9iaXQoQ0FDSEVfUEVORElORywgJmgtPmZsYWdzKTsKLQkJCQlj
YWNoZV9yZXZpc2l0X3JlcXVlc3QoaCk7CiAJCQkJcnYgPSB0cnlfdG9fbmVnYXRlX2VudHJ5
KGRldGFpbCwgaCk7CiAJCQkJYnJlYWs7CiAJCQljYXNlIC1FQUdBSU46Cg==




2013-02-25 19:55:51

by Bodo Stroesser

[permalink] [raw]
Subject: Re: [PATCH] sunrpc.ko: RPC cache fix races

T24gMjQgRmViIDIwMTMgMjM6NTM6MDAgKzAxMDAgbmVpbGJAc3VzZS5kZSB3cm90ZToKCj4g
T24gMjEgRmViIDIwMTMgMTY6NDQ6NDEgKzAxMDAgQm9kbyBTdHJvZXNzZXIgPGJzdHJvZXNz
ZXJAdHMuZnVqaXRzdS5jb20+Cj4gd3JvdGU6Cj4gCj4gPiBPbiAyMSBGZWIgMjAxMyAwMDo1
NTowMCArMDEwMCBuZWlsYkBzdXNlLmRlIHdyb3RlOgo+ID4gCj4gPiA+IE9uIDIwIEZlYiAy
MDEzIDE0OjU3OjA3ICswMTAwIGJzdHJvZXNzZXJAdHMuZnVqaXRzdS5jb20gd3JvdGU6Cj4g
PiA+IAo+ID4gPiA+IE9uIDIwIEZlYiAyMDEzIDA0OjA5OjAwICswMTAwIG5laWxiQHN1c2Uu
ZGUgd3JvdGU6Cj4gPiAKPiA+IHNuaXAKPiA+IAo+ID4gPiA+ID4gTWF5YmU6Cj4gPiA+ID4g
PiAKPiA+ID4gPiA+ICAgc3dpdGNoKGNhY2hlX21ha2VfdXBjYWxsKGRldGFpbCwgaCkpIHsK
PiA+ID4gPiA+ICAgY2FzZSAtRUlOVkFMOgo+ID4gPiA+ID4gICAgICAgICBpZiAocnYpIHsK
PiA+ID4gPiA+IAkJc2V0X2JpdChDQUNIRV9ORUdBVElWRSwgJmgtPmZsYWdzKTsKPiA+ID4g
PiA+IAkJY2FjaGVfZnJlc2hfbG9ja2VkKGgsIGdldF9zZWNvbmRzKCkgKyBDQUNIRV9ORVdf
RVhQSVJZKTsKPiA+ID4gPiA+IAkJcnYgPSAtRU5PRU5UOwo+ID4gPiA+ID4gCX0KPiA+ID4g
PiA+IAkvKiBGQUxMVEhST1VHSCAqLwo+ID4gPiA+ID4gICBjYXNlIC1FQUdBSU46Cj4gPiA+
ID4gPiAJY2FjaGVfZnJlc2hfdW5sb2NrZWQoaCwgZGV0YWlsKTsKPiA+ID4gPiA+ICAgfQo+
ID4gPiA+IAo+ID4gPiA+IEkgYWdyZWUsIHlvdXIgcGF0Y2ggaXMgb2J2aW91c2x5IGJldHRl
ciB0aGFuIHRoZSBtaW5lLgo+ID4gPiA+IEJ1dCBsZXQgbWUgc3VnZ2VzdCBvbmUgbGl0dGxl
IGNoYW5nZTogSSB3b3VsZCBsaWtlIHRvIHN1YnN0aXR1dGUKPiA+ID4gPiBjYWNoZV9mcmVz
aF91bmxvY2tlZCgpIGJ5IGNsZWFyX2JpdCgpIGFuZCBjYWNoZV9yZXZpc2l0X3JlcXVlc3Qo
KSwKPiA+ID4gPiBhcyB0aGUgY2FsbCB0byBjYWNoZV9kZXF1ZXVlKCkgaW4gY2FjaGVfZnJl
c2hfdW5sb2NrZWQoKSBzZWVtcyB0bwo+ID4gPiA+IGJlIG9ic29sZXRlIGhlcmU6Cj4gPiA+
IAo+ID4gPiBJdCBpcyBleGFjdGx5IHRoaXMgc29ydCBvZiB0aGlua2luZyAob24gbXkgcGFy
dCkgdGhhdCBnb3QgdXMgaW50byB0aGlzIG1lc3MKPiA+ID4gaW4gdGhlIGZpcnN0IHBsYWNl
LiAgSSByZWFzb25lZCB0aGF0IHRoZSBmdWxsIGxvY2tpbmcvdGVzdGluZy93aGF0ZXZlciB3
YXNuJ3QKPiA+ID4gbmVjZXNzYXJ5IGFuZCB0b29rIGEgc2hvcnQgY3V0LiAgSXQgd2Fzbid0
IGEgZ29vZCBpZGVhLgo+ID4gCj4gPiBNYXliZSBJJ20gdG90YWxseSB3cm9uZywgYnV0IEFG
QUlDUywgY2FsbGluZyBjYWNoZV9kZXF1ZXVlKCkgaGVyZSBpbiBleHRyZW1lCj4gPiBzaXR1
YXRpb25zICh0d28gdGhyZWFkcyBpbiBwYXJhbGxlbCBjYWxsaW5nIGNoZWNrX2NhY2hlKCkg
d2hpbGUgYSBmaXJzdCByZWFkZXIKPiA+IGlzIGdvaW5nIHRvIG9wZW4gY2FjaGUgYWNjZXNz
KSBjb3VsZCBhZ2FpbiBjYXVzZSBhIHJhY2UgKD8pCj4gCj4gQ2FuIHlvdSBleHBsYWluIHRo
ZSByYWNlIHlvdSBzZWU/CgpPLmsuLCBsZXQgbWUgdHJ5IC4uLgoKU3VwcHBvc2VkIHRoZXJl
IGFyZSAyIHRocmVhZHMgY2FsbGluZyBjYWNoZV9jaGVjayBjb25jdXJyZW50bHkgYW5kIGEK
dXNlciBwcm9jZXNzIHRoYXQgaXMgZ29pbmcgdG8gYmVjb21lIGEgcmVhZGVyIGZvciB0aGUg
aW52b2x2ZWQgY2FjaGUuCgpUaGUgZmlyc3QgdGhyZWFkIGNhbGxzIGNhY2hlX2lzX3ZhbGlk
KCkgYW5kIGdldHMgLUVBR0FJTi4KTmV4dCwgaXQgc2V0cyBDQUNIRV9QRU5ESU5HIGFuZCBj
YWxscyBjYWNoZV9tYWtlX3VwY2FsbCgpLCB3aGljaApyZXR1cm5zIC1FSU5WQUwsIGFzIHRo
ZXJlIGlzIG5vIHJlYWRlciB5ZXQuCgpNZWFud2hpbGUgdGhlIHNlY29uZCB0aHJlYWQgYWxz
byBjYWxscyBjYWNoZV9pc192YWxpZCgpLCBhbHNvIGdldHMKLUVBR0FJTiwgYnV0IG5vdyBp
cyBpbnRlcnJ1cHRlZCBhbmQgZGVsYXllZCBmb3IgYSB3aGlsZS4KClRoZSBmaXJzdCB0aHJl
YWQgY29udGludWVzIGl0cyB3b3JrLCBuZWdhdGVzIHRoZSBlbnRyeSBhbmQgY2FsbHMKY2Fj
aGVfZnJlc2hfbG9ja2VkKCkgZm9sbG93ZWQgYnkgY2FjaGVfZnJlc2hfdW5sb2NrZWQoKS4K
SW4gY2FjaGVfZnJlc2hfdW5sb2NrZWQgaXQgcmVzZXRzIENBQ0hFX1BFTkRJTkcgYW5kIGNh
bGxzCmNhY2hlX3JldmlzaXRfcmVxdWVzdCgpLiBXaGlsZSB0aGlzLCBpdCBpcyBpbnRlcnJ1
cHRlZCBhbmQgZGVsYXllZC4KClRoZSB1c2VyIHByb2Nlc3MgaXMgc2NoZWR1bGVkIGFuZCBv
cGVucyB0aGUgY2hhbm5lbCB0byBiZWNvbWUgYSByZWFkZXIuCgpUaGUgc2Vjb25kIHRocmVh
ZCB3YWtlcyB1cCBhZ2FpbiBhbmQgc2V0cyBDQUNIRV9QRU5ESU5HLiBOZXh0IGl0IGNhbGxz
CmNhY2hlX21ha2VfdXBjYWxsKCksIHdoaWNoIHJlc3VsdHMgaW4gYSByZXF1ZXN0IGJlaW5n
IHF1ZXVlZCwgYXMgdGhlcmUKaXMgYSByZWFkZXIgbm93LgoKVGhlIGZpcnN0IHRocmVhZCB3
YWtlcyB1cCBhbmQgY29udGludWVzIGl0cyB3b3JrIGNhbGxpbmcgY2FjaGVfZGVxdWV1ZSgp
LgpNYXliZSB0aGUgcmVxdWVzdCBpcyBkcm9wcGVkIGJlZm9yZSB0aGUgcmVhZGVyIGNvdWxk
IHByb2Nlc3MgaXQuCgpEbyB5b3UgYWdyZWUgb3IgZGlkIEkgbWlzcyBzb21ldGhpbmc/CgoK
PiAKPiA+IAo+ID4gQlRXOiBpZiB0aGVyZSBpcyBhIHJlYWRlciBmb3IgYSBjYWNoZSwgaXMg
dGhlcmUgYW55IHByb3RlY3Rpb24gYWdhaW5zdCBtYW55Cj4gPiB1cGNhbGxzIGJlaW5nIHF1
ZXVlZCBmb3IgdGhlIHNhbWUgY2FjaGUgZW50cnk/Cj4gCj4gVGhlIENBQ0hFX1BFTkRJTkcg
ZmxhZyBzaG91bGQgcHJvdmlkZSB0aGF0IHByb3RlY3Rpb24uICBXZSBvbmx5IHF1ZXVlIGFu
Cj4gdXBjYWxsIGFmdGVyICJ0ZXN0X2FuZF9zZXQiLCBhbmQgYWx3YXlzIGRlcXVldWUgYWZ0
ZXIgImNsZWFyX2JpdCIuCgpTb3JyeSwgbXkgcXVlc3Rpb24gd2Fzbid0IHZlcnkgY2xlYXIu
IENBQ0hFX1BFTkRJTkcgKmRvZXMqIHByb3ZpZGUgdGhlCnByb3RlY3Rpb24gYWdhaW5zdCBw
YXJhbGxlbCB1cGNhbGxzLgoKT1RPSCwgYXMgY2FjaGVfaXNfdmFsaWQoKSBpcyBjYWxsZWQg
YmVmb3JlIHRlc3RfYW5kX3NldF9iaXQoQ0FDSEVfUEVORElORykKYW5kIHRoZW4gdGhlIHVw
Y2FsbCBpcyBtYWRlIHdpdGhvdXQgYWdhaW4gY2FsbGluZyBjYWNoZV9pc192YWxpZCgpLApJ
IHNlZSBhIHNtYWxsIGNoYW5jZSBvZiBhIHNlY29uZCByZXF1ZXN0IGJlaW5nIHF1ZXVlZCB1
bm5lY2Vzc2FyaWx5IGp1c3QKYWZ0ZXIgdGhlIGZpcnN0IHJlcXVlc3Qgd2FzIGFuc3dlcmVk
LiAKCkJvZG8KCj4gCj4gTmVpbEJyb3duCj4gCj4gCj4gPiAKPiA+IEJvZG8KPiA+IAo+ID4g
PiAKPiA+ID4gR2l2ZW4gdGhhdCB0aGlzIGlzIG9idmlvdXNseSBkaWZmaWN1bHQgY29kZSB0
byBnZXQgcmlnaHQsIHdlIHNob3VsZCBtYWtlIGl0Cj4gPiA+IGFzIGVhc3kgdG8gcmV2aWV3
IGFzIHBvc3NpYmxlLiAgSGF2ZSAiY2FjaGVfZnJlc2hfdW5sb2NrZWQiIG1ha2VzIGl0IG1v
cmUKPiA+ID4gb2J2aW91c2x5IGNvcnJlY3QsIGFuZCB0aGF0IGlzIGEgZ29vZCB0aGluZy4K
PiA+ID4gTWF5YmUgY2FjaGVfZGVxdWV1ZSBpc24ndCBuZWVkZWQgaGVyZSwgYnV0IGl0IHdv
bid0IGh1cnQgc28gSSdkIG11Y2ggcmF0aGVyCj4gPiA+IGhhdmUgdGhlIGNsZWFyZXIgY29k
ZS4KPiA+ID4gSW4gZmFjdCwgSSdkIGFsc28gbGlrZSB0byBjaGFuZ2UKPiA+ID4gCj4gPiA+
IAkJCWlmICh0ZXN0X2FuZF9jbGVhcl9iaXQoQ0FDSEVfUEVORElORywgJmNoLT5mbGFncykp
Cj4gPiA+IAkJCQljYWNoZV9kZXF1ZXVlKGN1cnJlbnRfZGV0YWlsLCBjaCk7Cj4gPiA+IAkJ
CWNhY2hlX3JldmlzaXRfcmVxdWVzdChjaCk7Cj4gPiA+IAo+ID4gPiBuZWFyIHRoZSBlbmQg
b2YgY2FjaGVfY2xlYW4gdG8gY2FsbCAgY2FjaGVfZnJlc2hfdW5sb2NrZWQoKS4KPiA+ID4g
Cg==