[OpenAFS-devel] Re: [PATCH] afs, bash: Fix open(O_CREAT) on an extant AFS file in a
sticky dir
Jeffrey E Altman
jaltman@auristor.com
Tue, 29 Apr 2025 13:35:36 -0400
This is a cryptographically signed message in MIME format.
--------------ms040907060507070909050309
Content-Type: text/plain; charset=UTF-8; format=flowed
Content-Transfer-Encoding: base64
RGF2aWQsDQoNClRoYW5rcyBmb3IgdGhpcyBwYXRjaC7CoMKgIEkgYmVsaWV2ZSB0aGVyZSBp
cyBvbmUgbWlzdGFrZSBpbiANCmFmc19oYXZlX3NhbWVfb3duZXIoKS4NCg0KSSd2ZSBhZGRl
ZCBhIGJpdCBtb3JlIGJhY2tncm91bmQgd2hpY2ggbWlnaHQgYmUgaW5jb3Jwb3JhdGVkIGlu
dG8gYSANCmZ1dHVyZSBjb21taXQgbWVzc2FnZS4NCg0KSSBoYXZlIGFsc28gYXNrZWQgaW5s
aW5lIGFib3V0IHRoZSBzYWZldHkgb2YgdGhlIHVzZSBvZiBpZC1tYXBwZWQgdWlkcyANCmZv
ciB0aGUgb3duZXJzaGlwIGNoZWNrcy4NCg0KT24gNC8yOS8yMDI1IDEyOjM3IFBNLCBEYXZp
ZCBIb3dlbGxzIHdyb3RlOg0KPiAgICAgIA0KPiBCYXNoIGhhcyBhIHdvcmsgYXJvdW5kIGlu
IHJlZGlyX29wZW4oKSB0aGF0IGNhdXNlcyBvcGVuKE9fQ1JFQVQpIG9mIGEgZmlsZQ0KPiBp
biBhIHN0aWNreSBkaXJlY3RvcnkgdG8gYmUgcmV0cmllZCB3aXRob3V0IE9fQ1JFQVQgaWYg
YmFzaCB3YXMgYnVpbHQgd2l0aA0KPiBBRlMgd29ya2Fyb3VuZHMgY29uZmlndXJlZDoNCj4N
Cj4gICAgICAgICAgI2lmIGRlZmluZWQgKEFGUykNCj4gICAgICAgICAgICAgICAgaWYgKChm
ZCA8IDApICYmIChlcnJubyA9PSBFQUNDRVMpKQ0KPiAgICAgICAgICAgICAgew0KPiAgICAg
ICAgICAgICAgICBmZCA9IG9wZW4gKGZpbGVuYW1lLCBmbGFncyAmIH5PX0NSRUFULCBtb2Rl
KTsNCj4gICAgICAgICAgICAgICAgZXJybm8gPSBFQUNDRVM7ICAgIC8qIHJlc3RvcmUgZXJy
bm8gKi8NCj4gICAgICAgICAgICAgIH0NCj4NCj4gICAgICAgICAgI2VuZGlmIC8qIEFGUyAq
Lw0KDQpJIHRoaW5rIGl0cyB3b3J0aCBjbGFyaWZ5aW5nIHRoZSBwdXJwb3NlIG9mIHRoaXMg
ZmFsbGJhY2sgbG9naWMgYW5kIHdoeSANCml0IGV4aXN0cy7CoCBUaGUgZmFsbGJhY2sNCmxv
Z2ljIHdhcyBhZGRlZCB0byBiYXNoIDEuMTQuNyBhcyBwYXJ0IG9mIHRoZSBpbnRyb2R1Y3Rp
b24gb2Ygc3VwcG9ydCANCmZvciBJQk0vVHJhbnNhcmMgQUZTIDMuNC4NCkl0IHdhcyBub3Rl
ZCB0aGF0IHNvbWV0aW1lcyBFRVhJU1Qgd291bGQgYmUgcmV0dXJuZWQgZnJvbSBvcGVuKGZp
bGVuYW1lLCANCmZsYWdzIHwgT19DUkVBVCkNCmJ1dCB3b3VsZCBzdWNjZWVkIGlmIG9wZW4o
ZmlsZW5hbWUsIGZsYWdzICYgfk9fQ1JFQVQpIHdhcyBjYWxsZWQuwqAgVGhlcmUgDQppcyBu
byBldmlkZW5jZSB0aGF0DQp0aGUgQUZTIGRldmVsb3BlcnMgd2VyZSBhd2FyZSBvZiB0aGUg
cHJvYmxlbS4NCg0KSSBjYW4gcmVwb3J0IHRoYXQgdGhlIGNhdXNlIG9mIHRoaXMgYmVoYXZp
b3IgaXMgdGhlIEFGUyBmaWxlc2VydmVyJ3MgDQpjaGVja2luZyBmb3IgUFJTRlNfSU5TRVJU
DQpyaWdodHMgb24gdGhlIGRpcmVjdG9yeSBwcmlvciB0byBwZXJmb3JtaW5nIHRoZSBDcmVh
dGVGaWxlIGFjdGlvbi7CoCBJZiANCnRoZSBjYWxsZXIgaXMgbm90IHBlcm1pdHRlZA0KdG8g
Y3JlYXRlIGEgZGlyZWN0b3J5IGVudHJ5IHRoZSBhY3Rpb24gZmFpbHMgd2l0aCBFQUNDRVMg
ZXZlbiBpZiB0aGUgDQpyZXF1ZXN0ZWQgZmlsZW5hbWUgYWxyZWFkeQ0KZXhpc3RzLsKgIFRo
ZSBtb3N0IHJlY2VudCB2ZXJzaW9ucyBvZiBJQk0gQUZTIDMuNiwgT3BlbkFGUywgYW5kIA0K
QXVyaVN0b3JGUyBmaWxlc2VydmVycyBhbGwNCmNvbnRpbnVlIHRvIGV4aGliaXQgdGhpcyBi
ZWhhdmlvciB0b2RheS4NCg0KVGhpcyBsb2dpYyBwcmVkYXRlZCAzMGFiYTY2NTZmNjFlZDQ0
Y2JhNDQ1YTNjMGQzOGIyOTZmYTllOGY1ICgibmFtZWk6IA0KYWxsb3cgcmVzdHJpY3RlZA0K
T19DUkVBVCBvZiBGSUZPcyBhbmQgcmVndWxhciBmaWxlcyIpIGJ5IGRlY2FkZXMuwqAgQXMg
YSBzaWRlIGVmZmVjdCwgd2hlbiANCnRoZSBmaWxlc3lzdGVtIGlzIGFuDQppbi10cmVlIG9y
IG91dC1vZi10cmVlIEFGUy1mYW1pbHkgZmlsZXN5c3RlbSAuLi4NCg0KPiBUaGlzIHdvcmtz
IGFyb3VuZCB0aGUga2VybmVsIG5vdCBiZWluZyBhYmxlIHRvIHZhbGlkbHkgY2hlY2sgdGhl
DQo+IGN1cnJlbnRfZnN1aWQoKSBhZ2FpbnN0IGlfdWlkIG9uIHRoZSBmaWxlIG9yIHRoZSBk
aXJlY3RvcnkgYmVjYXVzZSB0aGUNCj4gdWlkc3BhY2VzIG9mIHRoZSBzeXN0ZW0gYW5kIG9m
IEFGUyBtYXkgd2VsbCBiZSBkaXNqb2ludC4gIFRoZSBwcm9ibGVtIGxpZXMNCj4gd2l0aCB0
aGUgdWlkIGNoZWNrcyBpbiBtYXlfY3JlYXRlX2luX3N0aWNreSgpLg0KPg0KPiBIb3dldmVy
LCB0aGUgYmFzaCB3b3JrIGFyb3VuZCBpcyBnb2luZyB0byBiZSByZW1vdmVkOg0KPg0KPiAg
ICAgICAgICBodHRwczovL2dpdC5zYXZhbm5haC5nbnUub3JnL2NnaXQvYmFzaC5naXQvdHJl
ZS9yZWRpci5jP2g9YmFzaC01LjMtcmMxI243MzMNCj4NCj4gRml4IHRoaXMgaW4gdGhlIGtl
cm5lbCBieToNCj4NCj4gICAoMSkgUHJvdmlkZSBhbiAtPmlzX293bmVkX2J5X21lKCkgaW5v
ZGUgb3AsIHNpbWlsYXIgdG8gLT5wZXJtaXNzaW9uKCksDQo+ICAgICAgIGFuZCwgaWYgcHJv
dmlkZWQsIGNhbGwgdGhhdCB0byBkZXRlcm1pbmUgaWYgdGhlIGNhbGxlciBvd25zIHRoZSBm
aWxlDQo+ICAgICAgIGluc3RlYWQgb2YgY2hlY2tpbmcgdGhlIGlfdWlkIHRvIGN1cnJlbnRf
ZnN1aWQoKS4NCj4NCj4gICAoMikgUHJvdmlkZSBhIC0+aGF2ZV9zYW1lX293bmVyKCkgaW5v
ZGUgb3AsIHRoYXQsIGlmIHByb3ZpZGVkLCBjYW4gYmUNCj4gICAgICAgY2FsbGVkIHRvIHNl
ZSBpZiBhbiBpbm9kZSBoYXMgdGhlIHNhbWUgb3duZXIgYXMgdGhlIHBhcmVudCBvbiB0aGUg
cGF0aA0KPiAgICAgICB3YWxrZWQuDQo+DQo+IEZvciBrYWZzLCB1c2UgdGhlIGZpcnN0IGhv
b2sgdG8gY2hlY2sgdG8gc2VlIGlmIHRoZSBzZXJ2ZXIgaW5kaWNhdGVkIHRoZQ0KPiBBRE1J
TklTVEVSIGJpdCBpbiB0aGUgYWNjZXNzIHJpZ2h0cyByZXR1cm5lZCBieSB0aGUgRlMuRmV0
Y2hTdGF0dXMgYW5kDQo+IHN1Y2hsaWtlDQoNClRoZSBBRlNGZXRjaFN0YXR1cy5DYWxsZXJB
Y2Nlc3MgZmllbGQgcmV0dXJuZWQgZm9yIGEgbm9uLWRpcmVjdG9yeSANCm9iamVjdCBpbmNs
dWRlcyB0aGUNClBSU0ZTX0FETUlOSVNURVIgYml0IHNldCBpZiB0aGUgY2FsbGVyIGlzIGF1
dGhlbnRpY2F0ZWQgYW5kIHRoZSANCmF1dGhlbnRpY2F0ZWQgaWRlbnRpdHkNCmlzIHRoZSBB
RlMgSUQgcmV0dXJuZWQgaW4gdGhlIEFGU0ZldGNoU3RhdHVzLk93bmVyIGZpZWxkLg0KDQo+
IGFuZCB0aGUgc2Vjb25kIGhvb2sgdG8gY29tcGFyZSB0aGUgQUZTIHVzZXIgSURzIHJldHJp
ZXZlZCBieQ0KPiBGUy5GZXRjaFN0YXR1cyAod2hpY2ggbWF5IG5vdCBmaXQgaW4gYSBrdWlk
IGlmIEF1cmlTdG9yJ3MgWUZTIHZhcmlhbnQpLg0KDQpQZXJoYXBzIG1vcmUgaW1wb3J0YW50
bHksIHRoZSBBRlMgSURzIHNwZWNpZmllZCBpbiB0aGUgDQpBRlNGZXRjaFN0YXR1cy5Pd25l
ciBmaWVsZCBvZnRlbg0KaGF2ZSBubyByZWxhdGlvbnNoaXAgdG8gdGhlIGxvY2FsIHN5c3Rl
bSdzIHVpZCBuYW1lc3BhY2UgYW5kIG1pZ2h0IA0KY29sbGlkZSB3aXRoIHZhcmlvdXMNCnVp
ZCByYW5nZXMgd2hpY2ggbWlnaHQgYmUgdXNlZCBmb3IgaWQtbWFwcGluZyBieSBjb250YWlu
ZXIgbWFuYWdlcnMuDQoNCj4gVGhpcyBjYW4gYmUgdGVzdGVkIGJ5IGNyZWF0aW5nIGEgc3Rp
Y2t5IGRpcmVjdG9yeSAodGhlIHVzZXIgbXVzdCBoYXZlIGENCj4gdG9rZW4gdG8gZG8gdGhp
cykgYW5kIGNyZWF0aW5nIGEgZmlsZSBpbiBpdC4gIFRoZW4gc3RyYWNlIGJhc2ggZG9pbmcg
ImVjaG8NCj4gZm9vID4+ZmlsZSIgYW5kIGxvb2sgYXQgd2hldGhlciBiYXNoIGRvZXMgYSBz
aW5nbGUsIHN1Y2Nlc3NmdWwgT19DUkVBVCBvcGVuDQo+IG9uIHRoZSBmaWxlIG9yIHdoZXRo
ZXIgdGhhdCBvbmUgZmFpbHMgYW5kIHRoZW4gYmFzaCBkb2VzIG9uZSB3aXRob3V0DQo+IE9f
Q1JFQVQgdGhhdCBzdWNjZWVkcy4NCj4NCj4gUmVwb3J0ZWQtYnk6IEV0aWVubmUgQ2hhbXBl
dGllciA8Y2hhbXBldGllci5ldGllbm5lQGdtYWlsLmNvbT4NCj4gU2lnbmVkLW9mZi1ieTog
RGF2aWQgSG93ZWxscyA8ZGhvd2VsbHNAcmVkaGF0LmNvbT4NCj4gY2M6IE1hcmMgRGlvbm5l
IDxtYXJjLmRpb25uZUBhdXJpc3Rvci5jb20+DQo+IGNjOiBKZWZmcmV5IEFsdG1hbiA8amFs
dG1hbkBhdXJpc3Rvci5jb20+DQo+IGNjOiBDaGV0IFJhbWV5IDxjaGV0LnJhbWV5QGNhc2Uu
ZWR1Pg0KPiBjYzogQWxleGFuZGVyIFZpcm8gPHZpcm9AemVuaXYubGludXgub3JnLnVrPg0K
PiBjYzogQ2hyaXN0aWFuIEJyYXVuZXIgPGJyYXVuZXJAa2VybmVsLm9yZz4NCj4gY2M6IFN0
ZXZlIEZyZW5jaCA8c2ZyZW5jaEBzYW1iYS5vcmc+DQo+IGNjOiBsaW51eC1hZnNAbGlzdHMu
aW5mcmFkZWFkLm9yZw0KPiBjYzogb3BlbmFmcy1kZXZlbEBvcGVuYWZzLm9yZw0KPiBjYzog
bGludXgtY2lmc0B2Z2VyLmtlcm5lbC5vcmcNCj4gY2M6IGxpbnV4LWZzZGV2ZWxAdmdlci5r
ZXJuZWwub3JnDQo+IC0tLQ0KPiAgIGZzL2Fmcy9kaXIuYyAgICAgICB8ICAgIDIgKysNCj4g
ICBmcy9hZnMvZmlsZS5jICAgICAgfCAgICAyICsrDQo+ICAgZnMvYWZzL2ludGVybmFsLmgg
IHwgICAgMyArKysNCj4gICBmcy9hZnMvc2VjdXJpdHkuYyAgfCAgIDUyICsrKysrKysrKysr
KysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysNCj4gICBmcy9uYW1l
aS5jICAgICAgICAgfCAgIDIyICsrKysrKysrKysrKysrKysrKy0tLS0NCj4gICBpbmNsdWRl
L2xpbnV4L2ZzLmggfCAgICAzICsrKw0KPiAgIDYgZmlsZXMgY2hhbmdlZCwgODAgaW5zZXJ0
aW9ucygrKSwgNCBkZWxldGlvbnMoLSkNCj4NCj4gZGlmZiAtLWdpdCBhL2ZzL2Fmcy9kaXIu
YyBiL2ZzL2Fmcy9kaXIuYw0KPiBpbmRleCA5ZTdiMWZlODJjMjcuLjYzNjBkYjE2NzNiMCAx
MDA2NDQNCj4gLS0tIGEvZnMvYWZzL2Rpci5jDQo+ICsrKyBiL2ZzL2Fmcy9kaXIuYw0KPiBA
QCAtNjUsNiArNjUsOCBAQCBjb25zdCBzdHJ1Y3QgaW5vZGVfb3BlcmF0aW9ucyBhZnNfZGly
X2lub2RlX29wZXJhdGlvbnMgPSB7DQo+ICAgCS5wZXJtaXNzaW9uCT0gYWZzX3Blcm1pc3Np
b24sDQo+ICAgCS5nZXRhdHRyCT0gYWZzX2dldGF0dHIsDQo+ICAgCS5zZXRhdHRyCT0gYWZz
X3NldGF0dHIsDQo+ICsJLmlzX293bmVkX2J5X21lCT0gYWZzX2lzX293bmVkX2J5X21lLA0K
PiArCS5oYXZlX3NhbWVfb3duZXIgPSBhZnNfaGF2ZV9zYW1lX293bmVyLA0KPiAgIH07DQo+
ICAgDQo+ICAgY29uc3Qgc3RydWN0IGFkZHJlc3Nfc3BhY2Vfb3BlcmF0aW9ucyBhZnNfZGly
X2FvcHMgPSB7DQo+IGRpZmYgLS1naXQgYS9mcy9hZnMvZmlsZS5jIGIvZnMvYWZzL2ZpbGUu
Yw0KPiBpbmRleCBmYzE1NDk3NjA4YzYuLjAzMTdmMGEzNmNmMiAxMDA2NDQNCj4gLS0tIGEv
ZnMvYWZzL2ZpbGUuYw0KPiArKysgYi9mcy9hZnMvZmlsZS5jDQo+IEBAIC00Nyw2ICs0Nyw4
IEBAIGNvbnN0IHN0cnVjdCBpbm9kZV9vcGVyYXRpb25zIGFmc19maWxlX2lub2RlX29wZXJh
dGlvbnMgPSB7DQo+ICAgCS5nZXRhdHRyCT0gYWZzX2dldGF0dHIsDQo+ICAgCS5zZXRhdHRy
CT0gYWZzX3NldGF0dHIsDQo+ICAgCS5wZXJtaXNzaW9uCT0gYWZzX3Blcm1pc3Npb24sDQo+
ICsJLmlzX293bmVkX2J5X21lCT0gYWZzX2lzX293bmVkX2J5X21lLA0KPiArCS5oYXZlX3Nh
bWVfb3duZXIgPSBhZnNfaGF2ZV9zYW1lX293bmVyLA0KPiAgIH07DQo+ICAgDQo+ICAgY29u
c3Qgc3RydWN0IGFkZHJlc3Nfc3BhY2Vfb3BlcmF0aW9ucyBhZnNfZmlsZV9hb3BzID0gew0K
PiBkaWZmIC0tZ2l0IGEvZnMvYWZzL2ludGVybmFsLmggYi9mcy9hZnMvaW50ZXJuYWwuaA0K
PiBpbmRleCA0NDBiMGU3MzEwOTMuLmZiZmJmNjE1YWJlMyAxMDA2NDQNCj4gLS0tIGEvZnMv
YWZzL2ludGVybmFsLmgNCj4gKysrIGIvZnMvYWZzL2ludGVybmFsLmgNCj4gQEAgLTE0OTUs
NiArMTQ5NSw5IEBAIGV4dGVybiBzdHJ1Y3Qga2V5ICphZnNfcmVxdWVzdF9rZXkoc3RydWN0
IGFmc19jZWxsICopOw0KPiAgIGV4dGVybiBzdHJ1Y3Qga2V5ICphZnNfcmVxdWVzdF9rZXlf
cmN1KHN0cnVjdCBhZnNfY2VsbCAqKTsNCj4gICBleHRlcm4gaW50IGFmc19jaGVja19wZXJt
aXQoc3RydWN0IGFmc192bm9kZSAqLCBzdHJ1Y3Qga2V5ICosIGFmc19hY2Nlc3NfdCAqKTsN
Cj4gICBleHRlcm4gaW50IGFmc19wZXJtaXNzaW9uKHN0cnVjdCBtbnRfaWRtYXAgKiwgc3Ry
dWN0IGlub2RlICosIGludCk7DQo+ICtpbnQgYWZzX2lzX293bmVkX2J5X21lKHN0cnVjdCBt
bnRfaWRtYXAgKmlkbWFwLCBzdHJ1Y3QgaW5vZGUgKmlub2RlKTsNCj4gK2ludCBhZnNfaGF2
ZV9zYW1lX293bmVyKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLCBzdHJ1Y3QgaW5vZGUgKmlu
b2RlLA0KPiArCQkJc3RydWN0IGRlbnRyeSAqZGVudHJ5KTsNCj4gICBleHRlcm4gdm9pZCBf
X2V4aXQgYWZzX2NsZWFuX3VwX3Blcm1pdF9jYWNoZSh2b2lkKTsNCj4gICANCj4gICAvKg0K
PiBkaWZmIC0tZ2l0IGEvZnMvYWZzL3NlY3VyaXR5LmMgYi9mcy9hZnMvc2VjdXJpdHkuYw0K
PiBpbmRleCA2YTc3NDRjOWUyYTIuLmNjOTY4OWZiZWQ0NyAxMDA2NDQNCj4gLS0tIGEvZnMv
YWZzL3NlY3VyaXR5LmMNCj4gKysrIGIvZnMvYWZzL3NlY3VyaXR5LmMNCj4gQEAgLTQ3Nyw2
ICs0NzcsNTggQEAgaW50IGFmc19wZXJtaXNzaW9uKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFw
LCBzdHJ1Y3QgaW5vZGUgKmlub2RlLA0KPiAgIAlyZXR1cm4gcmV0Ow0KPiAgIH0NCj4gICAN
Cj4gKy8qDQo+ICsgKiBEZXRlcm1pbmUgaWYgYW4gaW5vZGUgaXMgb3duZWQgYnkgJ21lJyAt
IHdoYXRldmVyIHRoYXQgbWVhbnMgZm9yIHRoZQ0KPiArICogZmlsZXN5c3RlbS4gIEluIHRo
ZSBjYXNlIG9mIEFGUywgdGhpcyBtZWFucyB0aGF0IHRoZSBmaWxlIGlzIG93bmVkIGJ5IHRo
ZQ0KPiArICogQUZTIHVzZXIgcmVwcmVzZW50ZWQgYnkgdGhlIHRva2VuIChlLmcuIGZyb20g
YSBrZXJiZXJvcyBzZXJ2ZXIpIGhlbGQgaW4gYQ0KPiArICoga2V5LiAgUmV0dXJucyAwIGlm
IG93bmVkIGJ5IG1lLCAxIGlmIG5vdDsgY2FuIGFsc28gcmV0dXJuIGFuIGVycm9yLg0KPiAr
ICovDQo+ICtpbnQgYWZzX2lzX293bmVkX2J5X21lKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFw
LCBzdHJ1Y3QgaW5vZGUgKmlub2RlKQ0KPiArew0KPiArCXN0cnVjdCBhZnNfdm5vZGUgKnZu
b2RlID0gQUZTX0ZTX0koaW5vZGUpOw0KPiArCWFmc19hY2Nlc3NfdCBhY2Nlc3M7DQo+ICsJ
c3RydWN0IGtleSAqa2V5Ow0KPiArCWludCByZXQ7DQo+ICsNCj4gKwlrZXkgPSBhZnNfcmVx
dWVzdF9rZXkodm5vZGUtPnZvbHVtZS0+Y2VsbCk7DQo+ICsJaWYgKElTX0VSUihrZXkpKQ0K
PiArCQlyZXR1cm4gUFRSX0VSUihrZXkpOw0KPiArDQo+ICsJLyogR2V0IHRoZSBhY2Nlc3Mg
cmlnaHRzIGZvciB0aGUga2V5IG9uIHRoaXMgZmlsZS4gKi8NCj4gKwlyZXQgPSBhZnNfY2hl
Y2tfcGVybWl0KHZub2RlLCBrZXksICZhY2Nlc3MpOw0KPiArCWlmIChyZXQgPCAwKQ0KPiAr
CQlnb3RvIGVycm9yOw0KPiArDQo+ICsJLyogV2UgZ2V0IHRoZSBBRE1JTklTVEVSIGJpdCBp
ZiB3ZSBvd24gdGhlIGZpbGUuICovDQo+ICsJcmV0ID0gKGFjY2VzcyAmIEFGU19BQ0VfQURN
SU5JU1RFUikgPyAwIDogMTsNCj4gK2Vycm9yOg0KPiArCWtleV9wdXQoa2V5KTsNCj4gKwly
ZXR1cm4gcmV0Ow0KPiArfQ0KPiArDQo+ICsvKg0KPiArICogRGV0ZXJtaW5lIGlmIGEgZmls
ZSBoYXMgdGhlIHNhbWUgb3duZXIgYXMgaXRzIHBhcmVudCAtIHdoYXRldmVyIHRoYXQgbWVh
bnMNCj4gKyAqIGZvciB0aGUgZmlsZXN5c3RlbS4gIEluIHRoZSBjYXNlIG9mIEFGUywgdGhp
cyBtZWFucyBjb21wYXJpbmcgdGhlaXIgQUZTDQo+ICsgKiBVSURzLiAgUmV0dXJucyAwIGlm
IHNhbWUsIDEgaWYgbm90IHNhbWU7IGNhbiBhbHNvIHJldHVybiBhbiBlcnJvci4NCj4gKyAq
Lw0KPiAraW50IGFmc19oYXZlX3NhbWVfb3duZXIoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAs
IHN0cnVjdCBpbm9kZSAqaW5vZGUsDQo+ICsJCQlzdHJ1Y3QgZGVudHJ5ICpkZW50cnkpDQo+
ICt7DQo+ICsJc3RydWN0IGFmc192bm9kZSAqdm5vZGUgPSBBRlNfRlNfSShpbm9kZSk7DQo+
ICsJc3RydWN0IGRlbnRyeSAqcGFyZW50Ow0KPiArCXM2NCBvd25lcjsNCj4gKw0KPiArCS8q
IEdldCB0aGUgb3duZXIncyBJRCBmb3IgdGhlIGRpcmVjdG9yeS4gIElkZWFsbHksIHdlJ2Qg
dXNlIFJDVSB0bw0KPiArCSAqIGFjY2VzcyB0aGUgcGFyZW50IHJhdGhlciB0aGFuIGdldHRp
bmcgYSByZWYuDQo+ICsJICovDQo+ICsJcGFyZW50ID0gZGdldF9wYXJlbnQoZGVudHJ5KTsN
Cj4gKwl2bm9kZSA9IEFGU19GU19JKGRfYmFja2luZ19pbm9kZShwYXJlbnQpKTsNClRoaXMg
bGluZSBpcyBvdmVyd3JpdGluZyAndm5vZGUnIHdpdGggdGhlIHBhcmVudC7CoMKgIEkgdGhp
bmsgdGhlcmUgbmVlZHMgDQp0byBiZSBhIHNlcGFyYXRlIHB2bm9kZSBvciBzb21ldGhpbmcu
DQo+ICsJb3duZXIgPSB2bm9kZS0+c3RhdHVzLm93bmVyOw0KPiArCWRwdXQocGFyZW50KTsN
Cj4gKw0KPiArCXJldHVybiB2bm9kZS0+c3RhdHVzLm93bmVyICE9IG93bmVyOw0KPiArfQ0K
PiArDQo+ICAgdm9pZCBfX2V4aXQgYWZzX2NsZWFuX3VwX3Blcm1pdF9jYWNoZSh2b2lkKQ0K
PiAgIHsNCj4gICAJaW50IGk7DQo+IGRpZmYgLS1naXQgYS9mcy9uYW1laS5jIGIvZnMvbmFt
ZWkuYw0KPiBpbmRleCA4NGEwZTBiMDExMWMuLjc5ZThlZjFiNjkwMCAxMDA2NDQNCj4gLS0t
IGEvZnMvbmFtZWkuYw0KPiArKysgYi9mcy9uYW1laS5jDQo+IEBAIC0xMzE4LDExICsxMzE4
LDI1IEBAIHN0YXRpYyBpbnQgbWF5X2NyZWF0ZV9pbl9zdGlja3koc3RydWN0IG1udF9pZG1h
cCAqaWRtYXAsIHN0cnVjdCBuYW1laWRhdGEgKm5kLA0KPiAgIA0KPiAgIAlpX3Zmc3VpZCA9
IGlfdWlkX2ludG9fdmZzdWlkKGlkbWFwLCBpbm9kZSk7DQoNClVucmVsYXRlZCB0byB0aGlz
IGNoYW5nZSBidXQgaXMgdXNlIG9mIGlkLW1hcHBlZCB1aWQgdmFsdWVzIHNhZmUgZm9yIA0K
dGhpcyBwdXJwb3NlPw0KDQpJc24ndCBpdCBwb3NzaWJsZSBmb3IgbW9yZSB0aGFuIG9uZSB1
aWQgdG8gYmUgbWFwcGVkIHRvIHRoZSBzYW1lIHZmc3VpZCANCnZhbHVlPz0NCg0KPiAtCWlm
ICh2ZnN1aWRfZXEoaV92ZnN1aWQsIGRpcl92ZnN1aWQpKQ0KPiAtCQlyZXR1cm4gMDsNCj4g
KwlpZiAodW5saWtlbHkoaW5vZGUtPmlfb3AtPmhhdmVfc2FtZV9vd25lcikpIHsNCj4gKwkJ
aW50IHJldCA9IGlub2RlLT5pX29wLT5oYXZlX3NhbWVfb3duZXIoaWRtYXAsIGlub2RlLCBu
ZC0+cGF0aC5kZW50cnkpOw0KPiAgIA0KPiAtCWlmICh2ZnN1aWRfZXFfa3VpZChpX3Zmc3Vp
ZCwgY3VycmVudF9mc3VpZCgpKSkNCj4gLQkJcmV0dXJuIDA7DQo+ICsJCWlmIChyZXQgPD0g
MCkNCj4gKwkJCXJldHVybiByZXQ7DQo+ICsJfSBlbHNlIHsNCj4gKwkJaWYgKHZmc3VpZF9l
cShpX3Zmc3VpZCwgZGlyX3Zmc3VpZCkpDQo+ICsJCQlyZXR1cm4gMDsNCj4gKwl9DQo+ICsN
Cj4gKwlpZiAodW5saWtlbHkoaW5vZGUtPmlfb3AtPmlzX293bmVkX2J5X21lKSkgew0KPiAr
CQlpbnQgcmV0ID0gaW5vZGUtPmlfb3AtPmlzX293bmVkX2J5X21lKGlkbWFwLCBpbm9kZSk7
DQo+ICsNCj4gKwkJaWYgKHJldCA8PSAwKQ0KPiArCQkJcmV0dXJuIHJldDsNCj4gKwl9IGVs
c2Ugew0KPiArCQlpZiAodmZzdWlkX2VxX2t1aWQoaV92ZnN1aWQsIGN1cnJlbnRfZnN1aWQo
KSkpDQo+ICsJCQlyZXR1cm4gMDsNCj4gKwl9DQo+ICAgDQo+ICAgCWlmIChsaWtlbHkoZGly
X21vZGUgJiAwMDAyKSkgew0KPiAgIAkJYXVkaXRfbG9nX3BhdGhfZGVuaWVkKEFVRElUX0FO
T01fQ1JFQVQsICJzdGlja3lfY3JlYXRlIik7DQo+IGRpZmYgLS1naXQgYS9pbmNsdWRlL2xp
bnV4L2ZzLmggYi9pbmNsdWRlL2xpbnV4L2ZzLmgNCj4gaW5kZXggMDE2YjBmZTE1MzZlLi5l
YzI3OGQyZDM2MmEgMTAwNjQ0DQo+IC0tLSBhL2luY2x1ZGUvbGludXgvZnMuaA0KPiArKysg
Yi9pbmNsdWRlL2xpbnV4L2ZzLmgNCj4gQEAgLTIyMzYsNiArMjIzNiw5IEBAIHN0cnVjdCBp
bm9kZV9vcGVyYXRpb25zIHsNCj4gICAJCQkgICAgc3RydWN0IGRlbnRyeSAqZGVudHJ5LCBz
dHJ1Y3QgZmlsZWF0dHIgKmZhKTsNCj4gICAJaW50ICgqZmlsZWF0dHJfZ2V0KShzdHJ1Y3Qg
ZGVudHJ5ICpkZW50cnksIHN0cnVjdCBmaWxlYXR0ciAqZmEpOw0KPiAgIAlzdHJ1Y3Qgb2Zm
c2V0X2N0eCAqKCpnZXRfb2Zmc2V0X2N0eCkoc3RydWN0IGlub2RlICppbm9kZSk7DQo+ICsJ
aW50ICgqaXNfb3duZWRfYnlfbWUpKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLCBzdHJ1Y3Qg
aW5vZGUgKmlub2RlKTsNCj4gKwlpbnQgKCpoYXZlX3NhbWVfb3duZXIpKHN0cnVjdCBtbnRf
aWRtYXAgKmlkbWFwLCBzdHJ1Y3QgaW5vZGUgKmlub2RlLA0KPiArCQkJICAgICAgIHN0cnVj
dCBkZW50cnkgKmRlbnRyeSk7DQo+ICAgfSBfX19fY2FjaGVsaW5lX2FsaWduZWQ7DQo+ICAg
DQo+ICAgc3RhdGljIGlubGluZSBpbnQgY2FsbF9tbWFwKHN0cnVjdCBmaWxlICpmaWxlLCBz
dHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSkNCg0KDQpKZWZmcmV5IEFsdG1hbg0KDQoNCg==
--------------ms040907060507070909050309
Content-Type: application/pkcs7-signature; name="smime.p7s"
Content-Transfer-Encoding: base64
Content-Disposition: attachment; filename="smime.p7s"
Content-Description: S/MIME Cryptographic Signature
MIAGCSqGSIb3DQEHAqCAMIACAQExDzANBglghkgBZQMEAgEFADCABgkqhkiG9w0BBwEAAKCC
DHEwggXSMIIEuqADAgECAhBAAYJpmi/rPn/F0fJyDlzMMA0GCSqGSIb3DQEBCwUAMDoxCzAJ
BgNVBAYTAlVTMRIwEAYDVQQKEwlJZGVuVHJ1c3QxFzAVBgNVBAMTDlRydXN0SUQgQ0EgQTEz
MB4XDTIyMDgwNDE2MDQ0OFoXDTI1MTAzMTE2MDM0OFowcDEvMC0GCgmSJomT8ixkAQETH0Ew
MTQxMEQwMDAwMDE4MjY5OUEyRkQyMDAwMjMzQ0QxGTAXBgNVBAMTEEplZmZyZXkgRSBBbHRt
YW4xFTATBgNVBAoTDEF1cmlTdG9yIEluYzELMAkGA1UEBhMCVVMwggEiMA0GCSqGSIb3DQEB
AQUAA4IBDwAwggEKAoIBAQCkC7PKBBZnQqDKPtZPMLAy77zo2DPvwtGnd1hNjPvbXrpGxUb3
xHZRtv179LHKAOcsY2jIctzieMxf82OMyhpBziMPsFAG/ukihBMFj3/xEeZVso3K27pSAyyN
fO/wJ0rX7G+ges22Dd7goZul8rPaTJBIxbZDuaykJMGpNq4PQ8VPcnYZx+6b+nJwJJoJ46kI
EEfNh3UKvB/vM0qtxS690iAdgmQIhTl+qfXq4IxWB6b+3NeQxgR6KLU4P7v88/tvJTpxIKkg
9xj89ruzeThyRFd2DSe3vfdnq9+g4qJSHRXyTft6W3Lkp7UWTM4kMqOcc4VSRdufVKBQNXjG
IcnhAgMBAAGjggKcMIICmDAOBgNVHQ8BAf8EBAMCBPAwgYQGCCsGAQUFBwEBBHgwdjAwBggr
BgEFBQcwAYYkaHR0cDovL2NvbW1lcmNpYWwub2NzcC5pZGVudHJ1c3QuY29tMEIGCCsGAQUF
BzAChjZodHRwOi8vdmFsaWRhdGlvbi5pZGVudHJ1c3QuY29tL2NlcnRzL3RydXN0aWRjYWEx
My5wN2MwHwYDVR0jBBgwFoAULbfeG1l+KpguzeHUG+PFEBJe6RQwCQYDVR0TBAIwADCCASsG
A1UdIASCASIwggEeMIIBGgYLYIZIAYb5LwAGAgEwggEJMEoGCCsGAQUFBwIBFj5odHRwczov
L3NlY3VyZS5pZGVudHJ1c3QuY29tL2NlcnRpZmljYXRlcy9wb2xpY3kvdHMvaW5kZXguaHRt
bDCBugYIKwYBBQUHAgIwga0MgapUaGlzIFRydXN0SUQgQ2VydGlmaWNhdGUgaGFzIGJlZW4g
aXNzdWVkIGluIGFjY29yZGFuY2Ugd2l0aCBJZGVuVHJ1c3QncyBUcnVzdElEIENlcnRpZmlj
YXRlIFBvbGljeSBmb3VuZCBhdCBodHRwczovL3NlY3VyZS5pZGVudHJ1c3QuY29tL2NlcnRp
ZmljYXRlcy9wb2xpY3kvdHMvaW5kZXguaHRtbDBFBgNVHR8EPjA8MDqgOKA2hjRodHRwOi8v
dmFsaWRhdGlvbi5pZGVudHJ1c3QuY29tL2NybC90cnVzdGlkY2FhMTMuY3JsMB8GA1UdEQQY
MBaBFGphbHRtYW5AYXVyaXN0b3IuY29tMB0GA1UdDgQWBBQB+nzqgljLocLTsiUn2yWqEc2s
gjAdBgNVHSUEFjAUBggrBgEFBQcDAgYIKwYBBQUHAwQwDQYJKoZIhvcNAQELBQADggEBAJwV
eycprp8Ox1npiTyfwc5QaVaqtoe8Dcg2JXZc0h4DmYGW2rRLHp8YL43snEV93rPJVk6B2v4c
WLeQfaMrnyNeEuvHx/2CT44cdLtaEk5zyqo3GYJYlLcRVz6EcSGHv1qPXgDT0xB/25etwGYq
utYF4Chkxu4KzIpq90eDMw5ajkexw+8ARQz4N5+d6NRbmMCovd7wTGi8th/BZvz8hgKUiUJo
Qle4wDxrdXdnIhCP7g87InXKefWgZBF4VX21t2+hkc04qrhIJlHrocPG9mRSnnk2WpsY0MXt
a8ivbVKtfpY7uSNDZSKTDi1izEFH5oeQdYRkgIGb319a7FjslV8wggaXMIIEf6ADAgECAhBA
AXA7OrqBjMk8rp4OuNQSMA0GCSqGSIb3DQEBCwUAMEoxCzAJBgNVBAYTAlVTMRIwEAYDVQQK
EwlJZGVuVHJ1c3QxJzAlBgNVBAMTHklkZW5UcnVzdCBDb21tZXJjaWFsIFJvb3QgQ0EgMTAe
Fw0yMDAyMTIyMTA3NDlaFw0zMDAyMTIyMTA3NDlaMDoxCzAJBgNVBAYTAlVTMRIwEAYDVQQK
EwlJZGVuVHJ1c3QxFzAVBgNVBAMTDlRydXN0SUQgQ0EgQTEzMIIBIjANBgkqhkiG9w0BAQEF
AAOCAQ8AMIIBCgKCAQEAu6sUO01SDD99PM+QdZkNxKxJNt0NgQE+Zt6ixaNP0JKSjTd+SG5L
wqxBWjnOgI/3dlwgtSNeN77AgSs+rA4bK4GJ75cUZZANUXRKw/et8pf9Qn6iqgB63OdHxBN/
15KbM3HR+PyiHXQoUVIevCKW8nnlWnnZabT1FejOhRRKVUg5HACGOTfnCOONrlxlg+m1Vjgn
o1uNqNuLM/jkD1z6phNZ/G9IfZGI0ppHX5AA/bViWceX248VmefNhSR14ADZJtlAAWOi2un0
3bqrBPHA9nDyXxI8rgWLfUP5rDy8jx2hEItg95+ORF5wfkGUq787HBjspE86CcaduLka/Bk2
VwIDAQABo4IChzCCAoMwEgYDVR0TAQH/BAgwBgEB/wIBADAOBgNVHQ8BAf8EBAMCAYYwgYkG
CCsGAQUFBwEBBH0wezAwBggrBgEFBQcwAYYkaHR0cDovL2NvbW1lcmNpYWwub2NzcC5pZGVu
dHJ1c3QuY29tMEcGCCsGAQUFBzAChjtodHRwOi8vdmFsaWRhdGlvbi5pZGVudHJ1c3QuY29t
L3Jvb3RzL2NvbW1lcmNpYWxyb290Y2ExLnA3YzAfBgNVHSMEGDAWgBTtRBnA0/AGi+6ke75C
5yZUyI42djCCASQGA1UdIASCARswggEXMIIBEwYEVR0gADCCAQkwSgYIKwYBBQUHAgEWPmh0
dHBzOi8vc2VjdXJlLmlkZW50cnVzdC5jb20vY2VydGlmaWNhdGVzL3BvbGljeS90cy9pbmRl
eC5odG1sMIG6BggrBgEFBQcCAjCBrQyBqlRoaXMgVHJ1c3RJRCBDZXJ0aWZpY2F0ZSBoYXMg
YmVlbiBpc3N1ZWQgaW4gYWNjb3JkYW5jZSB3aXRoIElkZW5UcnVzdCdzIFRydXN0SUQgQ2Vy
dGlmaWNhdGUgUG9saWN5IGZvdW5kIGF0IGh0dHBzOi8vc2VjdXJlLmlkZW50cnVzdC5jb20v
Y2VydGlmaWNhdGVzL3BvbGljeS90cy9pbmRleC5odG1sMEoGA1UdHwRDMEEwP6A9oDuGOWh0
dHA6Ly92YWxpZGF0aW9uLmlkZW50cnVzdC5jb20vY3JsL2NvbW1lcmNpYWxyb290Y2ExLmNy
bDAdBgNVHQ4EFgQULbfeG1l+KpguzeHUG+PFEBJe6RQwHQYDVR0lBBYwFAYIKwYBBQUHAwIG
CCsGAQUFBwMEMA0GCSqGSIb3DQEBCwUAA4ICAQB/7BKcygLX6Nl4a03cDHt7TLdPxCzFvDF2
bkVYCFTRX47UfeomF1gBPFDee3H/IPlLRmuTPoNt0qjdpfQzmDWN95jUXLdLPRToNxyaoB5s
0hOhcV6H08u3FHACBif55i0DTDzVSaBv0AZ9h1XeuGx4Fih1Vm3Xxz24GBqqVudvPRLyMJ7u
6hvBqTIKJ53uCs3dyQLZT9DXnp+kJv8y7ZSAY+QVrI/dysT8avtn8d7k7azNBkfnbRq+0e88
QoBnel6u+fpwbd5NLRHywXeH+phbzULCa+bLPRMqJaW2lbhvSWrMHRDy3/d8HvgnLCBFK2s4
Spns4YCN4xVcbqlGWzgolHCKUH39vpcsDo1ymZFrJ8QR6ihIn8FmJ5oKwAnnd/G6ADXFC9bu
db9+532phSAXOZrrecIQn+vtP366PC+aClAPsIIDJDsotS5z4X2JUFsNIuEgXGqhiKE7SuZb
rFG9sdcLprSlJN7TsRDc0W2b9nqwD+rj/5MN0C+eKwha+8ydv0+qzTyxPP90KRgaegGowC4d
UsZyTk2n4Z3MuAHX5nAZL/Vh/SyDj/ajorV44yqZBzQ3ChKhXbfUSwe2xMmygA2Z5DRwMRJn
p/BscizYdNk2WXJMTnH+wVLN8sLEwEtQR4eTLoFmQvrK2AMBS9kW5sBkMzINt/ZbbcZ3F+eA
MDGCBAEwggP9AgEBME4wOjELMAkGA1UEBhMCVVMxEjAQBgNVBAoTCUlkZW5UcnVzdDEXMBUG
A1UEAxMOVHJ1c3RJRCBDQSBBMTMCEEABgmmaL+s+f8XR8nIOXMwwDQYJYIZIAWUDBAIBBQCg
ggKEMBgGCSqGSIb3DQEJAzELBgkqhkiG9w0BBwEwHAYJKoZIhvcNAQkFMQ8XDTI1MDQyOTE3
MzUzNlowLwYJKoZIhvcNAQkEMSIEILDaUCA3Mj8M1xaZqBzRCklnvEs4epgeUdi/7QKXr7r+
MF0GCSsGAQQBgjcQBDFQME4wOjELMAkGA1UEBhMCVVMxEjAQBgNVBAoTCUlkZW5UcnVzdDEX
MBUGA1UEAxMOVHJ1c3RJRCBDQSBBMTMCEEABgmmaL+s+f8XR8nIOXMwwXwYLKoZIhvcNAQkQ
AgsxUKBOMDoxCzAJBgNVBAYTAlVTMRIwEAYDVQQKEwlJZGVuVHJ1c3QxFzAVBgNVBAMTDlRy
dXN0SUQgQ0EgQTEzAhBAAYJpmi/rPn/F0fJyDlzMMIIBVwYJKoZIhvcNAQkPMYIBSDCCAUQw
CwYJYIZIAWUDBAEqMAsGCWCGSAFlAwQBAjAKBggqhkiG9w0DBzANBggqhkiG9w0DAgIBBTAN
BggqhkiG9w0DAgIBBTAHBgUrDgMCBzANBggqhkiG9w0DAgIBBTAHBgUrDgMCGjALBglghkgB
ZQMEAgEwCwYJYIZIAWUDBAICMAsGCWCGSAFlAwQCAzALBglghkgBZQMEAgQwCwYJYIZIAWUD
BAIHMAsGCWCGSAFlAwQCCDALBglghkgBZQMEAgkwCwYJYIZIAWUDBAIKMAsGCSqGSIb3DQEB
ATALBgkrgQUQhkg/AAIwCAYGK4EEAQsAMAgGBiuBBAELATAIBgYrgQQBCwIwCAYGK4EEAQsD
MAsGCSuBBRCGSD8AAzAIBgYrgQQBDgAwCAYGK4EEAQ4BMAgGBiuBBAEOAjAIBgYrgQQBDgMw
DQYJKoZIhvcNAQEBBQAEggEAN3ne4fgscLmjZj/cHpco9SsAf+S8PyECg+XCJO/oi+dHbswP
Gb8S3eVXuczUUuK4dThsnV7qjF6/YLsUaUNuc9xl7ANCptKFNUuu0pnQJAMnZp29icrjiCoW
wOaOcevmRz8W9m/IbMmLjfQ1xQDQUiDHuJnmULm5cqu6D6qDP8ayqCA3Ty7ysRJiQ27An1yc
Cw/fkuYWa7BSwQGWXSr0dxOV4IyNMw8mmNYQIdNX5MiqOMPLoUvfrJzlm5p+1jahJ90zEycy
tyHzAlpeEF/KV6q1d43jwKgSvjkz7UbPPsppmvdb5Q7L6Kn8SJF8dYx56sY9ORZ75bdneK1+
2ZxoaQAAAAAAAA==
--------------ms040907060507070909050309--