Subject: Re: esp/fas
To: None <eeh@netbsd.org>
From: Andrei Petrov <and@genesyslab.com>
List: port-sparc64
Date: 02/08/2001 15:23:40
  This message is in MIME format.  The first part should be readable text,
  while the remaining parts are likely unreadable without MIME-aware tools.
  Send mail to mime@docserver.cac.washington.edu for more info.

---559023410-1932422408-981674620=:702
Content-Type: TEXT/PLAIN; charset=US-ASCII


This is the latest and greatest:-). Could you please try this one on esp.
I ran it quite a while, looks stable for me. 
It can do wide scsi now. Although dd'ing from disk to /dev/null
gives me about 9 MB/sec which I'm going to investigate more.
If it could be possible to involve more people to testing it
that would be great; do whatever you think is appropoate to the
changes.

	Andrey

---559023410-1932422408-981674620=:702
Content-Type: TEXT/PLAIN; charset=US-ASCII; name="fas.0208.shar"
Content-Transfer-Encoding: BASE64
Content-ID: <Pine.GSO.4.10.10102081523400.702@muppet>
Content-Description: esp/fas driver
Content-Disposition: attachment; filename="fas.0208.shar"

IyBUaGlzIGlzIGEgc2hlbGwgYXJjaGl2ZS4gIFNhdmUgaXQgaW4gYSBmaWxl
LCByZW1vdmUgYW55dGhpbmcgYmVmb3JlDQojIHRoaXMgbGluZSwgYW5kIHRo
ZW4gdW5wYWNrIGl0IGJ5IGVudGVyaW5nICJzaCBmaWxlIi4gIE5vdGUsIGl0
IG1heQ0KIyBjcmVhdGUgZGlyZWN0b3JpZXM7IGZpbGVzIGFuZCBkaXJlY3Rv
cmllcyB3aWxsIGJlIG93bmVkIGJ5IHlvdSBhbmQNCiMgaGF2ZSBkZWZhdWx0
IHBlcm1pc3Npb25zLg0KIw0KIyBUaGlzIGFyY2hpdmUgY29udGFpbnM6DQoj
DQojCXNidXMvZXNwX3NidXMuYw0KIwlpYy9uY3I1M2M5eC5jDQojCWljL25j
cjUzYzl4cmVnLmgNCiMJaWMvbmNyNTNjOXh2YXIuaA0KIwlpYy9sc2k2NDg1
NC5jDQojCWljL2xzaTY0ODU0cmVnLmgNCiMJaWMvbHNpNjQ4NTR2YXIuaA0K
Iw0KZWNobyB4IC0gc2J1cy9lc3Bfc2J1cy5jDQpzZWQgJ3MvXlgvLycgPnNi
dXMvZXNwX3NidXMuYyA8PCAnRU5ELW9mLXNidXMvZXNwX3NidXMuYycNClgv
KgkkTmV0QlNEOiBlc3Bfc2J1cy5jLHYgMS4xMSAyMDAwLzA3LzA5IDIwOjU3
OjQyIHBrIEV4cCAkCSovDQpYDQpYLyotDQpYICogQ29weXJpZ2h0IChjKSAx
OTk3LCAxOTk4IFRoZSBOZXRCU0QgRm91bmRhdGlvbiwgSW5jLg0KWCAqIEFs
bCByaWdodHMgcmVzZXJ2ZWQuDQpYICoNClggKiBUaGlzIGNvZGUgaXMgZGVy
aXZlZCBmcm9tIHNvZnR3YXJlIGNvbnRyaWJ1dGVkIHRvIFRoZSBOZXRCU0Qg
Rm91bmRhdGlvbg0KWCAqIGJ5IENoYXJsZXMgTS4gSGFubnVtOyBKYXNvbiBS
LiBUaG9ycGUgb2YgdGhlIE51bWVyaWNhbCBBZXJvc3BhY2UNClggKiBTaW11
bGF0aW9uIEZhY2lsaXR5LCBOQVNBIEFtZXMgUmVzZWFyY2ggQ2VudGVyOyBQ
YXVsIEtyYW5lbmJ1cmcuDQpYICoNClggKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQNClggKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMNClggKiBhcmUgbWV0Og0K
WCAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJl
dGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0DQpYICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyLg0KWCAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0DQpYICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyIGluIHRoZQ0KWCAqICAgIGRvY3VtZW50YXRpb24gYW5k
L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmli
dXRpb24uDQpYICogMy4gQWxsIGFkdmVydGlzaW5nIG1hdGVyaWFscyBtZW50
aW9uaW5nIGZlYXR1cmVzIG9yIHVzZSBvZiB0aGlzIHNvZnR3YXJlDQpYICog
ICAgbXVzdCBkaXNwbGF5IHRoZSBmb2xsb3dpbmcgYWNrbm93bGVkZ2VtZW50
Og0KWCAqCVRoaXMgcHJvZHVjdCBpbmNsdWRlcyBzb2Z0d2FyZSBkZXZlbG9w
ZWQgYnkgdGhlIE5ldEJTRA0KWCAqCUZvdW5kYXRpb24sIEluYy4gYW5kIGl0
cyBjb250cmlidXRvcnMuDQpYICogNC4gTmVpdGhlciB0aGUgbmFtZSBvZiBU
aGUgTmV0QlNEIEZvdW5kYXRpb24gbm9yIHRoZSBuYW1lcyBvZiBpdHMNClgg
KiAgICBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBw
cm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQNClggKiAgICBmcm9tIHRoaXMgc29m
dHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Np
b24uDQpYICoNClggKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRI
RSBORVRCU0QgRk9VTkRBVElPTiwgSU5DLiBBTkQgQ09OVFJJQlVUT1JTDQpY
ICogYGBBUyBJUycnIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJB
TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEDQpYICogVE8sIFRI
RSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVINClggKiBQVVJQT1NFIEFSRSBESVND
TEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEZPVU5EQVRJT04gT1Ig
Q09OVFJJQlVUT1JTDQpYICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJ
TkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUg0K
WCAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GDQpYICogU1VCU1RJVFVURSBH
T09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJ
VFM7IE9SIEJVU0lORVNTDQpYICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENB
VVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4NClggKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAo
SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQ0KWCAqIEFSSVNJ
TkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YgVEhFDQpYICogUE9TU0lCSUxJVFkgT0Yg
U1VDSCBEQU1BR0UuDQpYICovDQpYDQpYI2luY2x1ZGUgPHN5cy90eXBlcy5o
Pg0KWCNpbmNsdWRlIDxzeXMvcGFyYW0uaD4NClgjaW5jbHVkZSA8c3lzL3N5
c3RtLmg+DQpYI2luY2x1ZGUgPHN5cy9rZXJuZWwuaD4NClgjaW5jbHVkZSA8
c3lzL2Vycm5vLmg+DQpYI2luY2x1ZGUgPHN5cy9kZXZpY2UuaD4NClgjaW5j
bHVkZSA8c3lzL2J1Zi5oPg0KWCNpbmNsdWRlIDxzeXMvbWFsbG9jLmg+DQpY
DQpYI2luY2x1ZGUgPGRldi9zY3NpcGkvc2NzaV9hbGwuaD4NClgjaW5jbHVk
ZSA8ZGV2L3Njc2lwaS9zY3NpcGlfYWxsLmg+DQpYI2luY2x1ZGUgPGRldi9z
Y3NpcGkvc2NzaWNvbmYuaD4NClgjaW5jbHVkZSA8ZGV2L3Njc2lwaS9zY3Np
X21lc3NhZ2UuaD4NClgNClgjaW5jbHVkZSA8bWFjaGluZS9idXMuaD4NClgj
aW5jbHVkZSA8bWFjaGluZS9pbnRyLmg+DQpYI2luY2x1ZGUgPG1hY2hpbmUv
YXV0b2NvbmYuaD4NClgNClgjaW5jbHVkZSA8ZGV2L2ljL2xzaTY0ODU0cmVn
Lmg+DQpYI2luY2x1ZGUgPGRldi9pYy9sc2k2NDg1NHZhci5oPg0KWA0KWCNp
bmNsdWRlIDxkZXYvaWMvbmNyNTNjOXhyZWcuaD4NClgjaW5jbHVkZSA8ZGV2
L2ljL25jcjUzYzl4dmFyLmg+DQpYDQpYI2luY2x1ZGUgPGRldi9zYnVzL3Ni
dXN2YXIuaD4NClgNClgjZGVmaW5lIEVTUF9TQlVTX0RFQlVHDQpYDQpYc3Ry
dWN0IGVzcF9zb2Z0YyB7DQpYCXN0cnVjdCBuY3I1M2M5eF9zb2Z0YyBzY19u
Y3I1M2M5eDsJLyogZ2x1ZSB0byBNSSBjb2RlICovDQpYCXN0cnVjdCBzYnVz
ZGV2CXNjX3NkOwkJCS8qIHNidXMgZGV2aWNlICovDQpYDQpYCWJ1c19zcGFj
ZV90YWdfdAlzY19idXN0YWc7DQpYCWJ1c19kbWFfdGFnX3QJc2NfZG1hdGFn
Ow0KWA0KWAlidXNfc3BhY2VfaGFuZGxlX3Qgc2NfcmVnOwkJLyogdGhlIHJl
Z2lzdGVycyAqLw0KWAlzdHJ1Y3QgbHNpNjQ4NTRfc29mdGMgKnNjX2RtYTsJ
CS8qIHBvaW50ZXIgdG8gbXkgZG1hICovDQpYDQpYCWludAlzY19wcmk7CQkJ
CS8qIFNCVVMgcHJpb3JpdHkgKi8NClh9Ow0KWA0KWHZvaWQJZXNwYXR0YWNo
X3NidXMJX19QKChzdHJ1Y3QgZGV2aWNlICosIHN0cnVjdCBkZXZpY2UgKiwg
dm9pZCAqKSk7DQpYdm9pZAllc3BhdHRhY2hfZG1hCV9fUCgoc3RydWN0IGRl
dmljZSAqLCBzdHJ1Y3QgZGV2aWNlICosIHZvaWQgKikpOw0KWGludAllc3Bt
YXRjaF9zYnVzCV9fUCgoc3RydWN0IGRldmljZSAqLCBzdHJ1Y3QgY2ZkYXRh
ICosIHZvaWQgKikpOw0KWA0KWA0KWC8qIExpbmt1cCB0byB0aGUgcmVzdCBv
ZiB0aGUga2VybmVsICovDQpYc3RydWN0IGNmYXR0YWNoIGVzcF9zYnVzX2Nh
ID0gew0KWAlzaXplb2Yoc3RydWN0IGVzcF9zb2Z0YyksIGVzcG1hdGNoX3Ni
dXMsIGVzcGF0dGFjaF9zYnVzDQpYfTsNClhzdHJ1Y3QgY2ZhdHRhY2ggZXNw
X2RtYV9jYSA9IHsNClgJc2l6ZW9mKHN0cnVjdCBlc3Bfc29mdGMpLCBlc3Bt
YXRjaF9zYnVzLCBlc3BhdHRhY2hfZG1hDQpYfTsNClgNClgvKg0KWCAqIEZ1
bmN0aW9ucyBhbmQgdGhlIHN3aXRjaCBmb3IgdGhlIE1JIGNvZGUuDQpYICov
DQpYc3RhdGljIHVfY2hhcgllc3BfcmVhZF9yZWcgX19QKChzdHJ1Y3QgbmNy
NTNjOXhfc29mdGMgKiwgaW50KSk7DQpYc3RhdGljIHZvaWQJZXNwX3dyaXRl
X3JlZyBfX1AoKHN0cnVjdCBuY3I1M2M5eF9zb2Z0YyAqLCBpbnQsIHVfY2hh
cikpOw0KWHN0YXRpYyB1X2NoYXIJZXNwX3JkcmVnMSBfX1AoKHN0cnVjdCBu
Y3I1M2M5eF9zb2Z0YyAqLCBpbnQpKTsNClhzdGF0aWMgdm9pZAllc3Bfd3Jy
ZWcxIF9fUCgoc3RydWN0IG5jcjUzYzl4X3NvZnRjICosIGludCwgdV9jaGFy
KSk7DQpYc3RhdGljIGludAllc3BfZG1hX2lzaW50ciBfX1AoKHN0cnVjdCBu
Y3I1M2M5eF9zb2Z0YyAqKSk7DQpYc3RhdGljIHZvaWQJZXNwX2RtYV9yZXNl
dCBfX1AoKHN0cnVjdCBuY3I1M2M5eF9zb2Z0YyAqKSk7DQpYc3RhdGljIGlu
dAllc3BfZG1hX2ludHIgX19QKChzdHJ1Y3QgbmNyNTNjOXhfc29mdGMgKikp
Ow0KWHN0YXRpYyBpbnQJZXNwX2RtYV9zZXR1cCBfX1AoKHN0cnVjdCBuY3I1
M2M5eF9zb2Z0YyAqLCBjYWRkcl90ICosDQpYCQkJCSAgICBzaXplX3QgKiwg
aW50LCBzaXplX3QgKikpOw0KWHN0YXRpYyB2b2lkCWVzcF9kbWFfZ28gX19Q
KChzdHJ1Y3QgbmNyNTNjOXhfc29mdGMgKikpOw0KWHN0YXRpYyB2b2lkCWVz
cF9kbWFfc3RvcCBfX1AoKHN0cnVjdCBuY3I1M2M5eF9zb2Z0YyAqKSk7DQpY
c3RhdGljIGludAllc3BfZG1hX2lzYWN0aXZlIF9fUCgoc3RydWN0IG5jcjUz
Yzl4X3NvZnRjICopKTsNClgNClhzdGF0aWMgc3RydWN0IG5jcjUzYzl4X2ds
dWUgZXNwX3NidXNfZ2x1ZSA9IHsNClgJZXNwX3JlYWRfcmVnLA0KWAllc3Bf
d3JpdGVfcmVnLA0KWAllc3BfZG1hX2lzaW50ciwNClgJZXNwX2RtYV9yZXNl
dCwNClgJZXNwX2RtYV9pbnRyLA0KWAllc3BfZG1hX3NldHVwLA0KWAllc3Bf
ZG1hX2dvLA0KWAllc3BfZG1hX3N0b3AsDQpYCWVzcF9kbWFfaXNhY3RpdmUs
DQpYCU5VTEwsCQkJLyogZ2xfY2xlYXJfbGF0Y2hlZF9pbnRyICovDQpYfTsN
ClgNClhzdGF0aWMgc3RydWN0IG5jcjUzYzl4X2dsdWUgZXNwX3NidXNfZ2x1
ZTEgPSB7DQpYCWVzcF9yZHJlZzEsDQpYCWVzcF93cnJlZzEsDQpYCWVzcF9k
bWFfaXNpbnRyLA0KWAllc3BfZG1hX3Jlc2V0LA0KWAllc3BfZG1hX2ludHIs
DQpYCWVzcF9kbWFfc2V0dXAsDQpYCWVzcF9kbWFfZ28sDQpYCWVzcF9kbWFf
c3RvcCwNClgJZXNwX2RtYV9pc2FjdGl2ZSwNClgJTlVMTCwJCQkvKiBnbF9j
bGVhcl9sYXRjaGVkX2ludHIgKi8NClh9Ow0KWA0KWHN0YXRpYyB2b2lkCWVz
cGF0dGFjaCBfX1AoKHN0cnVjdCBlc3Bfc29mdGMgKiwgc3RydWN0IG5jcjUz
Yzl4X2dsdWUgKikpOw0KWA0KWGludA0KWGVzcG1hdGNoX3NidXMocGFyZW50
LCBjZiwgYXV4KQ0KWAlzdHJ1Y3QgZGV2aWNlICpwYXJlbnQ7DQpYCXN0cnVj
dCBjZmRhdGEgKmNmOw0KWAl2b2lkICphdXg7DQpYew0KWAlpbnQgcnY7DQpY
CXN0cnVjdCBzYnVzX2F0dGFjaF9hcmdzICpzYSA9IGF1eDsNClgNClgjaWZk
ZWYgRVNQX1NCVVNfREVCVUcNClgJcHJpbnRmKCJlc3BtYXRjaF9zYnVzOiAl
c1xuIiwgc2EtPnNhX25hbWUpOw0KWCNlbmRpZg0KWA0KWAlpZiAoc3RyY21w
KCJTVU5XLGZhcyIsIHNhLT5zYV9uYW1lKSA9PSAwKQ0KWAkgICAgICAgIHJl
dHVybiAxOw0KWA0KWAlydiA9IChzdHJjbXAoY2YtPmNmX2RyaXZlci0+Y2Rf
bmFtZSwgc2EtPnNhX25hbWUpID09IDAgfHwNClgJICAgIHN0cmNtcCgicHRz
Y0lJIiwgc2EtPnNhX25hbWUpID09IDApOw0KWAlyZXR1cm4gKHJ2KTsNClh9
DQpYDQpYdm9pZA0KWGVzcGF0dGFjaF9zYnVzKHBhcmVudCwgc2VsZiwgYXV4
KQ0KWAlzdHJ1Y3QgZGV2aWNlICpwYXJlbnQsICpzZWxmOw0KWAl2b2lkICph
dXg7DQpYew0KWAlzdHJ1Y3QgZXNwX3NvZnRjICplc2MgPSAodm9pZCAqKXNl
bGY7DQpYCXN0cnVjdCBuY3I1M2M5eF9zb2Z0YyAqc2MgPSAmZXNjLT5zY19u
Y3I1M2M5eDsNClgJc3RydWN0IHNidXNfYXR0YWNoX2FyZ3MgKnNhID0gYXV4
Ow0KWAlzdHJ1Y3QgbHNpNjQ4NTRfc29mdGMgKmxzYzsNClgJaW50IGJ1cnN0
LCBzYnVzYnVyc3Q7DQpYDQpYCWVzYy0+c2NfYnVzdGFnID0gc2EtPnNhX2J1
c3RhZzsNClgJZXNjLT5zY19kbWF0YWcgPSBzYS0+c2FfZG1hdGFnOw0KWA0K
WAlzYy0+c2NfaWQgPSBnZXRwcm9waW50KHNhLT5zYV9ub2RlLCAiaW5pdGlh
dG9yLWlkIiwgNyk7DQpYCXNjLT5zY19mcmVxID0gZ2V0cHJvcGludChzYS0+
c2Ffbm9kZSwgImNsb2NrLWZyZXF1ZW5jeSIsIC0xKTsNClgJaWYgKHNjLT5z
Y19mcmVxIDwgMCkNClgJCXNjLT5zY19mcmVxID0gKChzdHJ1Y3Qgc2J1c19z
b2Z0YyAqKQ0KWAkJICAgIHNjLT5zY19kZXYuZHZfcGFyZW50KS0+c2NfY2xv
Y2tmcmVxOw0KWA0KWCNpZmRlZiBFU1BfU0JVU19ERUJVRw0KWAlwcmludGYo
IiVzOiBlc3BhdHRhY2hfc2J1czogc2NfaWQgJWQsIGZyZXEgJWRcbiIsDQpY
CSAgICAgICBzZWxmLT5kdl94bmFtZSwgc2MtPnNjX2lkLCBzYy0+c2NfZnJl
cSk7DQpYI2VuZGlmDQpYDQpYCWlmIChzdHJjbXAoIlNVTlcsZmFzIiwgc2Et
PnNhX25hbWUpID09IDApIHsNClgNClgJCS8qDQpYCQkgKiBmYXMgaGFzIDIg
cmVnaXN0ZXIgc3BhY2VzOiBkbWEobHNpNjQ4NTQpIGFuZCBTQ1NJIGNvcmUg
KG5jcjUzYzl4KQ0KWAkJICovDQpYCQlpZiAoc2EtPnNhX25yZWcgIT0gMikg
ew0KWAkJCXByaW50ZigiJXM6ICVkIHJlZ2lzdGVyIHNwYWNlc1xuIiwgc2Vs
Zi0+ZHZfeG5hbWUsIHNhLT5zYV9ucmVnKTsNClgJCQlyZXR1cm47DQpYCQl9
DQpYDQpYCQkvKg0KWAkJICogaW4gU1VOVyxmYXMgdGhlIHBhcmVudCBpcyBz
YnVzIGhlcnNlbGYNClgJCSAqLw0KWAkJZXNjLT5zY19kbWEgPSBsc2MgPSBt
YWxsb2Moc2l6ZW9mIChzdHJ1Y3QgbHNpNjQ4NTRfc29mdGMpLCBNX0RFVkJV
RiwgTV9OT1dBSVQpOw0KWA0KWAkJaWYgKGxzYyA9PSBOVUxMKSB7DQpYCQkJ
cHJpbnRmKCIlczogb3V0IG9mIG1lbW9yeSAobHNpNjQ4NTRfc29mdGMpXG4i
LCBzZWxmLT5kdl94bmFtZSk7DQpYCQkJcmV0dXJuOw0KWAkJfQ0KWA0KWAkJ
bHNjLT5zY19idXN0YWcgPSBzYS0+c2FfYnVzdGFnOw0KWAkJbHNjLT5zY19k
bWF0YWcgPSBzYS0+c2FfZG1hdGFnOw0KWA0KWAkJYmNvcHkoIHNjLT5zY19k
ZXYuZHZfeG5hbWUsIGxzYy0+c2NfZGV2LmR2X3huYW1lLA0KWAkJICAgICAg
c2l6ZW9mIChsc2MtPnNjX2Rldi5kdl94bmFtZSkpOw0KWA0KWAkJLyogTWFw
IGRldmljZSByZWdpc3RlcnMgKi8NClgJCWlmIChidXNfc3BhY2VfbWFwMihz
YS0+c2FfYnVzdGFnLA0KWAkJICAgICAgICAgICAgICAgICAgIHNhLT5zYV9y
ZWdbMF0uc2JyX3Nsb3QsDQpYCQkJICAgICAgICAgICBzYS0+c2FfcmVnWzBd
LnNicl9vZmZzZXQsDQpYCQkJICAgICAgICAgICBzYS0+c2FfcmVnWzBdLnNi
cl9zaXplLA0KWAkJCSAgICAgICAgICAgQlVTX1NQQUNFX01BUF9MSU5FQVIs
DQpYCQkJICAgICAgICAgICAwLCAmbHNjLT5zY19yZWdzKSAhPSAwKSB7DQpY
CQkJcHJpbnRmKCIlczogY2Fubm90IG1hcCBkbWEgcmVnaXN0ZXJzXG4iLCBz
ZWxmLT5kdl94bmFtZSk7DQpYCQkJcmV0dXJuOw0KWAkJfQ0KWA0KWAkJLyoN
ClgJCSAqIFhYWCBpcyB0aGlzIGNvbW1vbihmcm9tIGJwcC5jKSwgdGhlIHNh
bWUgaW4gZG1hX3NidXMuLi5ldGMuDQpYCQkgKg0KWAkJICogR2V0IHRyYW5z
ZmVyIGJ1cnN0IHNpemUgZnJvbSBQUk9NIGFuZCBwbHVnIGl0IGludG8gdGhl
DQpYCQkgKiBjb250cm9sbGVyIHJlZ2lzdGVycy4gVGhpcyBpcyBuZWVkZWQg
b24gdGhlIFN1bjRtOyBkbw0KWAkJICogb3RoZXJzIG5lZWQgaXQgdG9vPw0K
WAkJICovDQpYCQlzYnVzYnVyc3QgPSAoKHN0cnVjdCBzYnVzX3NvZnRjICop
cGFyZW50KS0+c2NfYnVyc3Q7DQpYCQlpZiAoc2J1c2J1cnN0ID09IDApDQpY
CQkJc2J1c2J1cnN0ID0gU0JVU19CVVJTVF8zMiAtIDE7IC8qIDEtPjE2ICov
DQpYDQpYCQlidXJzdCA9IGdldHByb3BpbnQoc2EtPnNhX25vZGUsICJidXJz
dC1zaXplcyIsIC0xKTsNClgNClgJCXByaW50ZigiZXNwYXR0YWNoX3NidXM6
IGJ1cnN0IDB4JXgsIHNidXMgMHgleFxuIiwNClgJCSAgICBidXJzdCwgc2J1
c2J1cnN0KTsNClgNClgJCWlmIChidXJzdCA9PSAtMSkNClgJCQkvKiB0YWtl
IFNCdXMgYnVyc3Qgc2l6ZXMgKi8NClgJCQlidXJzdCA9IHNidXNidXJzdDsN
ClgNClgJCS8qIENsYW1wIGF0IHBhcmVudCdzIGJ1cnN0IHNpemVzICovDQpY
CQlidXJzdCAmPSBzYnVzYnVyc3Q7DQpYCQlsc2MtPnNjX2J1cnN0ID0gKGJ1
cnN0ICYgU0JVU19CVVJTVF8zMikgPyAzMiA6DQpYCQkgICAgKGJ1cnN0ICYg
U0JVU19CVVJTVF8xNikgPyAxNiA6IDA7DQpYDQpYCQkvKg0KWAkJICogWFhY
IHNob3VsZCBsc2kgYmUgYW1vbmcgc2J1cyBkZXZpY2VzIChzYnVzX2VzdGFi
bGlzaCkNClgJCSAqLw0KWAkJbHNjLT5zY19jaGFubmVsID0gTDY0ODU0X0NI
QU5ORUxfU0NTSTsNClgJCWxzYy0+c2NfY2xpZW50ID0gc2M7DQpYDQpYCQls
c2k2NDg1NF9hdHRhY2gobHNjKTsNClgNClgJCS8qDQpYCQkgKiBwcmVwYXJl
IFNDU0kgY29yZQ0KWAkJICovDQpYCQlpZiAoc2J1c19idXNfbWFwKHNhLT5z
YV9idXN0YWcsDQpYCQkgICAgICAgICBzYS0+c2FfcmVnWzFdLnNicl9zbG90
LA0KWAkgICAgICAgICAgICAgICAgIHNhLT5zYV9yZWdbMV0uc2JyX29mZnNl
dCwNClgJICAgICAgICAgICAgICAgICBzYS0+c2FfcmVnWzFdLnNicl9zaXpl
LA0KWAkgICAgICAgICAgICAgICAgIEJVU19TUEFDRV9NQVBfTElORUFSLCAN
ClgJCQkgMCwgJmVzYy0+c2NfcmVnKSAhPSAwKSB7DQpYCQkJcHJpbnRmKCIl
cyBAIHNidXM6IGNhbm5vdCBtYXAgc2NzaSBjb3JlIHJlZ2lzdGVyc1xuIiwN
ClgJCQkgICAgc2VsZi0+ZHZfeG5hbWUpOw0KWAkJCXJldHVybjsNClgJCX0N
ClgNClgNClgJCWlmIChzYS0+c2FfbmludHIgPT0gMCkgew0KWAkJCS8qDQpY
CQkJICogTm8gaW50ZXJydXB0IHByb3BlcnRpZXM6IHdlIHF1aXQ7IHRoaXMg
bWlnaHQNClgJCQkgKiBoYXBwZW4gb24gZS5nLiBhIFNwYXJjIFggdGVybWlu
YWwuDQpYCQkJICovDQpYCQkJcHJpbnRmKCJcbiVzOiBubyBpbnRlcnJ1cHQg
cHJvcGVydHlcbiIsIHNlbGYtPmR2X3huYW1lKTsNClgJCQlyZXR1cm47DQpY
CQl9DQpYDQpYCQllc2MtPnNjX3ByaSA9IHNhLT5zYV9wcmk7DQpYDQpYCQkv
KiBhZGQgbWUgdG8gdGhlIHNidXMgc3RydWN0dXJlcyAqLw0KWAkJZXNjLT5z
Y19zZC5zZF9yZXNldCA9ICh2b2lkICopIG5jcjUzYzl4X3Jlc2V0Ow0KWAkJ
c2J1c19lc3RhYmxpc2goJmVzYy0+c2Nfc2QsICZzYy0+c2NfZGV2KTsNClgN
ClgJCWVzcGF0dGFjaChlc2MsICZlc3Bfc2J1c19nbHVlKTsNClgNClgJCXJl
dHVybjsNClgJfQ0KWA0KWAkvKg0KWAkgKiBGaW5kIHRoZSBETUEgYnkgcG9r
aW5nIGFyb3VuZCB0aGUgZG1hIGRldmljZSBzdHJ1Y3R1cmVzDQpYCSAqDQpY
CSAqIFdoYXQgaGFwcGVucyBoZXJlIGlzIHRoYXQgaWYgdGhlIGRtYSBkcml2
ZXIgaGFzIG5vdCBiZWVuDQpYCSAqIGNvbmZpZ3VyZWQsIHRoZW4gdGhpcyBy
ZXR1cm5zIGEgTlVMTCBwb2ludGVyLiBUaGVuIHdoZW4gdGhlDQpYCSAqIGRt
YSBhY3R1YWxseSBnZXRzIGNvbmZpZ3VyZWQsIGl0IGRvZXMgdGhlIG9wcG9z
aW5nIHRlc3QsIGFuZA0KWAkgKiBpZiB0aGUgc2MtPnNjX2VzcCBmaWVsZCBp
biBpdCdzIHNvZnRjIGlzIE5VTEwsIHRoZW4gdHJpZXMgdG8NClgJICogZmlu
ZCB0aGUgbWF0Y2hpbmcgZXNwIGRyaXZlci4NClgJICovDQpYCWVzYy0+c2Nf
ZG1hID0gKHN0cnVjdCBsc2k2NDg1NF9zb2Z0YyAqKQ0KWAkJCQlnZXRkZXZ1
bml0KCJkbWEiLCBzYy0+c2NfZGV2LmR2X3VuaXQpOw0KWA0KWAkvKg0KWAkg
KiBhbmQgYSBiYWNrIHBvaW50ZXIgdG8gdXMsIGZvciBETUENClgJICovDQpY
CWlmIChlc2MtPnNjX2RtYSkNClgJCWVzYy0+c2NfZG1hLT5zY19jbGllbnQg
PSBzYzsNClgJZWxzZSB7DQpYCQlwcmludGYoIlxuIik7DQpYCQlwYW5pYygi
ZXNwYXR0YWNoOiBubyBkbWEgZm91bmQiKTsNClgJfQ0KWA0KWAkvKg0KWAkg
KiBNYXAgbXkgcmVnaXN0ZXJzIGluLCBpZiB0aGV5IGFyZW4ndCBhbHJlYWR5
IGluIHZpcnR1YWwNClgJICogYWRkcmVzcyBzcGFjZS4NClgJICovDQpYCWlm
IChzYS0+c2FfbnByb212YWRkcnMpDQpYCQllc2MtPnNjX3JlZyA9IChidXNf
c3BhY2VfaGFuZGxlX3Qpc2EtPnNhX3Byb212YWRkcnNbMF07DQpYCWVsc2Ug
ew0KWAkJaWYgKHNidXNfYnVzX21hcChzYS0+c2FfYnVzdGFnLCBzYS0+c2Ff
c2xvdCwNClgJCQkJIHNhLT5zYV9vZmZzZXQsDQpYCQkJCSBzYS0+c2Ffc2l6
ZSwNClgJCQkJIEJVU19TUEFDRV9NQVBfTElORUFSLA0KWAkJCQkgMCwgJmVz
Yy0+c2NfcmVnKSAhPSAwKSB7DQpYCQkJcHJpbnRmKCIlcyBAIHNidXM6IGNh
bm5vdCBtYXAgcmVnaXN0ZXJzXG4iLA0KWAkJCQlzZWxmLT5kdl94bmFtZSk7
DQpYCQkJcmV0dXJuOw0KWAkJfQ0KWAl9DQpYDQpYCWlmIChzYS0+c2Ffbmlu
dHIgPT0gMCkgew0KWAkJLyoNClgJCSAqIE5vIGludGVycnVwdCBwcm9wZXJ0
aWVzOiB3ZSBxdWl0OyB0aGlzIG1pZ2h0DQpYCQkgKiBoYXBwZW4gb24gZS5n
LiBhIFNwYXJjIFggdGVybWluYWwuDQpYCQkgKi8NClgJCXByaW50ZigiXG4l
czogbm8gaW50ZXJydXB0IHByb3BlcnR5XG4iLCBzZWxmLT5kdl94bmFtZSk7
DQpYCQlyZXR1cm47DQpYCX0NClgNClgJZXNjLT5zY19wcmkgPSBzYS0+c2Ff
cHJpOw0KWA0KWAkvKiBhZGQgbWUgdG8gdGhlIHNidXMgc3RydWN0dXJlcyAq
Lw0KWAllc2MtPnNjX3NkLnNkX3Jlc2V0ID0gKHZvaWQgKikgbmNyNTNjOXhf
cmVzZXQ7DQpYCXNidXNfZXN0YWJsaXNoKCZlc2MtPnNjX3NkLCAmc2MtPnNj
X2Rldik7DQpYDQpYCWlmIChzdHJjbXAoInB0c2NJSSIsIHNhLT5zYV9uYW1l
KSA9PSAwKSB7DQpYCQllc3BhdHRhY2goZXNjLCAmZXNwX3NidXNfZ2x1ZTEp
Ow0KWAl9IGVsc2Ugew0KWAkJZXNwYXR0YWNoKGVzYywgJmVzcF9zYnVzX2ds
dWUpOw0KWAl9DQpYfQ0KWA0KWHZvaWQNClhlc3BhdHRhY2hfZG1hKHBhcmVu
dCwgc2VsZiwgYXV4KQ0KWAlzdHJ1Y3QgZGV2aWNlICpwYXJlbnQsICpzZWxm
Ow0KWAl2b2lkICphdXg7DQpYew0KWAlzdHJ1Y3QgZXNwX3NvZnRjICplc2Mg
PSAodm9pZCAqKXNlbGY7DQpYCXN0cnVjdCBuY3I1M2M5eF9zb2Z0YyAqc2Mg
PSAmZXNjLT5zY19uY3I1M2M5eDsNClgJc3RydWN0IHNidXNfYXR0YWNoX2Fy
Z3MgKnNhID0gYXV4Ow0KWA0KWCNpZmRlZiBFU1BfU0JVU19ERUJVRw0KWAlw
cmludGYoImVzcGF0dGFjaF9kbWE6ICVzXG4iLCBzYS0+c2FfbmFtZSk7DQpY
I2VuZGlmDQpYDQpYCWlmIChzdHJjbXAoInB0c2NJSSIsIHNhLT5zYV9uYW1l
KSA9PSAwKSB7DQpYCQlyZXR1cm47DQpYCX0NClgNClgJZXNjLT5zY19idXN0
YWcgPSBzYS0+c2FfYnVzdGFnOw0KWAllc2MtPnNjX2RtYXRhZyA9IHNhLT5z
YV9kbWF0YWc7DQpYDQpYCXNjLT5zY19pZCA9IGdldHByb3BpbnQoc2EtPnNh
X25vZGUsICJpbml0aWF0b3ItaWQiLCA3KTsNClgJc2MtPnNjX2ZyZXEgPSBn
ZXRwcm9waW50KHNhLT5zYV9ub2RlLCAiY2xvY2stZnJlcXVlbmN5IiwgLTEp
Ow0KWA0KWAllc2MtPnNjX2RtYSA9IChzdHJ1Y3QgbHNpNjQ4NTRfc29mdGMg
KilwYXJlbnQ7DQpYCWVzYy0+c2NfZG1hLT5zY19jbGllbnQgPSBzYzsNClgN
ClgJLyoNClgJICogTWFwIG15IHJlZ2lzdGVycyBpbiwgaWYgdGhleSBhcmVu
J3QgYWxyZWFkeSBpbiB2aXJ0dWFsDQpYCSAqIGFkZHJlc3Mgc3BhY2UuDQpY
CSAqLw0KWAlpZiAoc2EtPnNhX25wcm9tdmFkZHJzKQ0KWAkJZXNjLT5zY19y
ZWcgPSAoYnVzX3NwYWNlX2hhbmRsZV90KXNhLT5zYV9wcm9tdmFkZHJzWzBd
Ow0KWAllbHNlIHsNClgJCWlmIChidXNfc3BhY2VfbWFwMihzYS0+c2FfYnVz
dGFnLA0KWAkJCQkgICBzYS0+c2Ffc2xvdCwNClgJCQkJICAgc2EtPnNhX29m
ZnNldCwNClgJCQkJICAgc2EtPnNhX3NpemUsDQpYCQkJCSAgIEJVU19TUEFD
RV9NQVBfTElORUFSLA0KWAkJCQkgICAwLCAmZXNjLT5zY19yZWcpICE9IDAp
IHsNClgJCQlwcmludGYoIiVzIEAgZG1hOiBjYW5ub3QgbWFwIHJlZ2lzdGVy
c1xuIiwNClgJCQkJc2VsZi0+ZHZfeG5hbWUpOw0KWAkJCXJldHVybjsNClgJ
CX0NClgJfQ0KWA0KWAlpZiAoc2EtPnNhX25pbnRyID09IDApIHsNClgJCS8q
DQpYCQkgKiBObyBpbnRlcnJ1cHQgcHJvcGVydGllczogd2UgcXVpdDsgdGhp
cyBtaWdodA0KWAkJICogaGFwcGVuIG9uIGUuZy4gYSBTcGFyYyBYIHRlcm1p
bmFsLg0KWAkJICovDQpYCQlwcmludGYoIlxuJXM6IG5vIGludGVycnVwdCBw
cm9wZXJ0eVxuIiwgc2VsZi0+ZHZfeG5hbWUpOw0KWAkJcmV0dXJuOw0KWAl9
DQpYDQpYCWVzYy0+c2NfcHJpID0gc2EtPnNhX3ByaTsNClgNClgJLyogQXNz
dW1lIFNCdXMgaXMgZ3JhbmRwYXJlbnQgKi8NClgJZXNjLT5zY19zZC5zZF9y
ZXNldCA9ICh2b2lkICopIG5jcjUzYzl4X3Jlc2V0Ow0KWAlzYnVzX2VzdGFi
bGlzaCgmZXNjLT5zY19zZCwgcGFyZW50KTsNClgNClgJZXNwYXR0YWNoKGVz
YywgJmVzcF9zYnVzX2dsdWUpOw0KWH0NClgNClgNClgvKg0KWCAqIEF0dGFj
aCB0aGlzIGluc3RhbmNlLCBhbmQgdGhlbiBhbGwgdGhlIHN1Yi1kZXZpY2Vz
DQpYICovDQpYdm9pZA0KWGVzcGF0dGFjaChlc2MsIGdsdWVwKQ0KWAlzdHJ1
Y3QgZXNwX3NvZnRjICplc2M7DQpYCXN0cnVjdCBuY3I1M2M5eF9nbHVlICpn
bHVlcDsNClh7DQpYCXN0cnVjdCBuY3I1M2M5eF9zb2Z0YyAqc2MgPSAmZXNj
LT5zY19uY3I1M2M5eDsNClgJdm9pZCAqaWNvb2tpZTsNClgJdW5zaWduZWQg
aW50IHVpZCA9IDA7DQpYDQpYCS8qDQpYCSAqIFNldCB1cCBnbHVlIGZvciBN
SSBjb2RlIGVhcmx5OyB3ZSB1c2Ugc29tZSBvZiBpdCBoZXJlLg0KWAkgKi8N
ClgJc2MtPnNjX2dsdWUgPSBnbHVlcDsNClgNClgJLyogZ2ltbWUgTWh6ICov
DQpYCXNjLT5zY19mcmVxIC89IDEwMDAwMDA7DQpYDQpYCS8qDQpYCSAqIFhY
WCBNb3JlIG9mIHRoaXMgc2hvdWxkIGJlIGluIG5jcjUzYzl4X2F0dGFjaCgp
LCBidXQNClgJICogWFhYIHNob3VsZCB3ZSByZWFsbHkgcG9rZSBhcm91bmQg
dGhlIGNoaXAgdGhhdCBtdWNoIGluDQpYCSAqIFhYWCB0aGUgTUkgY29kZT8g
IFRoaW5rIGFib3V0IHRoaXMgbW9yZS4uLg0KWAkgKi8NClgNClgJLyoNClgJ
ICogSXQgaXMgbmVjZXNzYXJ5IHRvIHRyeSB0byBsb2FkIHRoZSAybmQgY29u
ZmlnIHJlZ2lzdGVyIGhlcmUsDQpYCSAqIHRvIGZpbmQgb3V0IHdoYXQgcmV2
IHRoZSBlc3AgY2hpcCBpcywgZWxzZSB0aGUgbmNyNTNjOXhfcmVzZXQNClgJ
ICogd2lsbCBub3Qgc2V0IHVwIHRoZSBkZWZhdWx0cyBjb3JyZWN0bHkuDQpY
CSAqLw0KWAlzYy0+c2NfY2ZnMSA9IHNjLT5zY19pZCB8IE5DUkNGRzFfUEFS
RU5COw0KWAlzYy0+c2NfY2ZnMiA9IE5DUkNGRzJfU0NTSTIgfCBOQ1JDRkcy
X1JQRTsNClgJc2MtPnNjX2NmZzMgPSBOQ1JDRkczX0NEQjsNClgJTkNSX1dS
SVRFX1JFRyhzYywgTkNSX0NGRzIsIHNjLT5zY19jZmcyKTsNClgNClgJaWYg
KChOQ1JfUkVBRF9SRUcoc2MsIE5DUl9DRkcyKSAmIH5OQ1JDRkcyX1JTVkQp
ICE9DQpYCSAgICAoTkNSQ0ZHMl9TQ1NJMiB8IE5DUkNGRzJfUlBFKSkgew0K
WAkJc2MtPnNjX3JldiA9IE5DUl9WQVJJQU5UX0VTUDEwMDsNClgJfSBlbHNl
IHsNClgJCXNjLT5zY19jZmcyID0gTkNSQ0ZHMl9TQ1NJMjsNClgJCU5DUl9X
UklURV9SRUcoc2MsIE5DUl9DRkcyLCBzYy0+c2NfY2ZnMik7DQpYCQlzYy0+
c2NfY2ZnMyA9IDA7DQpYCQlOQ1JfV1JJVEVfUkVHKHNjLCBOQ1JfQ0ZHMywg
c2MtPnNjX2NmZzMpOw0KWAkJc2MtPnNjX2NmZzMgPSAoTkNSQ0ZHM19DREIg
fCBOQ1JDRkczX0ZDTEspOw0KWAkJTkNSX1dSSVRFX1JFRyhzYywgTkNSX0NG
RzMsIHNjLT5zY19jZmczKTsNClgJCWlmIChOQ1JfUkVBRF9SRUcoc2MsIE5D
Ul9DRkczKSAhPQ0KWAkJICAgIChOQ1JDRkczX0NEQiB8IE5DUkNGRzNfRkNM
SykpIHsNClgJCQlzYy0+c2NfcmV2ID0gTkNSX1ZBUklBTlRfRVNQMTAwQTsN
ClgJCX0gZWxzZSB7DQpYCQkJLyogTkNSQ0ZHMl9GRSBlbmFibGVzID4gNjRL
IHRyYW5zZmVycyAqLw0KWAkJCXNjLT5zY19jZmcyIHw9IE5DUkNGRzJfRkU7
DQpYCQkJc2MtPnNjX2NmZzMgPSAwOw0KWAkJCU5DUl9XUklURV9SRUcoc2Ms
IE5DUl9DRkczLCBzYy0+c2NfY2ZnMyk7DQpYCQkJc2MtPnNjX3JldiA9IE5D
Ul9WQVJJQU5UX0VTUDIwMDsNClgNClgJCQkvKiBYWFggc3BlYyBzYXlzIGl0
J3MgdmFsaWQgYWZ0ZXIgcG93ZXIgdXAgb3IgY2hpcCByZXNldCAqLw0KWAkJ
CXVpZCA9IE5DUl9SRUFEX1JFRyhzYywgTkNSX1VJRCk7DQpYCQkJaWYgKCgo
dWlkICYgMHhmOCkgPj4gMykgPT0gMHgwYSkgLyogWFhYICovDQpYCQkJCXNj
LT5zY19yZXYgPSBOQ1JfVkFSSUFOVF9GQVMzNjY7DQpYCQl9DQpYCX0NClgN
ClgJcHJpbnRmKCJlc3BhdHRhY2g6IHJldmlzaW9uICVkLCB1aWQgMHgleFxu
Iiwgc2MtPnNjX3JldiwgdWlkKTsNClgNClgJLyoNClgJICogWFhYIG1pbnN5
bmMgYW5kIG1heHhmZXIgX3Nob3VsZF8gYmUgc2V0IHVwIGluIE1JIGNvZGUs
DQpYCSAqIFhYWCBidXQgaXQgYXBwZWFycyB0byBoYXZlIHNvbWUgZGVwZW5k
ZW5jeSBvbiB3aGF0IHNvcnQNClgJICogWFhYIG9mIERNQSB3ZSdyZSBob29r
ZWQgdXAgdG8sIGV0Yy4NClgJICovDQpYDQpYCS8qDQpYCSAqIFRoaXMgaXMg
dGhlIHZhbHVlIHVzZWQgdG8gc3RhcnQgc3luYyBuZWdvdGlhdGlvbnMNClgJ
ICogTm90ZSB0aGF0IHRoZSBOQ1IgcmVnaXN0ZXIgIlNZTkNUUCIgaXMgcHJv
Z3JhbW1lZA0KWAkgKiBpbiAiY2xvY2tzIHBlciBieXRlIiwgYW5kIGhhcyBh
IG1pbmltdW0gdmFsdWUgb2YgNC4NClgJICogVGhlIFNDU0kgcGVyaW9kIHVz
ZWQgaW4gbmVnb3RpYXRpb24gaXMgb25lLWZvdXJ0aA0KWAkgKiBvZiB0aGUg
dGltZSAoaW4gbmFub3NlY29uZHMpIG5lZWRlZCB0byB0cmFuc2ZlciBvbmUg
Ynl0ZS4NClgJICogU2luY2UgdGhlIGNoaXAncyBjbG9jayBpcyBnaXZlbiBp
biBNSHosIHdlIGhhdmUgdGhlIGZvbGxvd2luZw0KWAkgKiBmb3JtdWxhOiA0
ICogcGVyaW9kID0gKDEwMDAgLyBmcmVxKSAqIDQNClgJICovDQpYCXNjLT5z
Y19taW5zeW5jID0gMTAwMCAvIHNjLT5zY19mcmVxOw0KWA0KWAkvKg0KWAkg
KiBBbGFzLCB3ZSBtdXN0IG5vdyBtb2RpZnkgdGhlIHZhbHVlIGEgYml0LCBi
ZWNhdXNlIGl0J3MNClgJICogb25seSB2YWxpZCB3aGVuIGNhbiBzd2l0Y2gg
b24gRkFTVENMSyBhbmQgRkFTVFNDU0kgYml0cyAgDQpYCSAqIGluIGNvbmZp
ZyByZWdpc3RlciAzLi4uIA0KWAkgKi8NClgJc3dpdGNoIChzYy0+c2NfcmV2
KSB7DQpYCWNhc2UgTkNSX1ZBUklBTlRfRVNQMTAwOg0KWAkJc2MtPnNjX21h
eHhmZXIgPSA2NCAqIDEwMjQ7DQpYCQlzYy0+c2NfbWluc3luYyA9IDA7CS8q
IE5vIHN5bmNoIG9uIG9sZCBjaGlwPyAqLw0KWAkJYnJlYWs7DQpYDQpYCWNh
c2UgTkNSX1ZBUklBTlRfRVNQMTAwQToNClgJCXNjLT5zY19tYXh4ZmVyID0g
NjQgKiAxMDI0Ow0KWAkJLyogTWluIGNsb2Nrcy9ieXRlIGlzIDUgKi8NClgJ
CXNjLT5zY19taW5zeW5jID0gbmNyNTNjOXhfY3BiMnN0cChzYywgNSk7DQpY
CQlicmVhazsNClgNClgJY2FzZSBOQ1JfVkFSSUFOVF9FU1AyMDA6DQpYCWNh
c2UgTkNSX1ZBUklBTlRfRkFTMzY2Og0KWAkJc2MtPnNjX21heHhmZXIgPSAx
NiAqIDEwMjQgKiAxMDI0Ow0KWAkJLyogWFhYIC0gZG8gYWN0dWFsbHkgc2V0
IEZBU1QqIGJpdHMgKi8NClgJCWJyZWFrOw0KWAl9DQpYDQpYCS8qIEVzdGFi
bGlzaCBpbnRlcnJ1cHQgY2hhbm5lbCAqLw0KWAlpY29va2llID0gYnVzX2lu
dHJfZXN0YWJsaXNoKGVzYy0+c2NfYnVzdGFnLCBlc2MtPnNjX3ByaSwgSVBM
X0JJTywgMCwNClgJCQkJICAgICBuY3I1M2M5eF9pbnRyLCBzYyk7DQpYDQpY
CS8qIHJlZ2lzdGVyIGludGVycnVwdCBzdGF0cyAqLw0KWAlldmNudF9hdHRh
Y2hfZHluYW1pYygmc2MtPnNjX2ludHJjbnQsIEVWQ05UX1RZUEVfSU5UUiwg
TlVMTCwNClgJICAgIHNjLT5zY19kZXYuZHZfeG5hbWUsICJpbnRyIik7DQpY
DQpYCS8qIFR1cm4gb24gdGFyZ2V0IHNlbGVjdGlvbiB1c2luZyB0aGUgYGRt
YScgbWV0aG9kICovDQpYCW5jcjUzYzl4X2RtYXNlbGVjdCA9IDE7DQpYDQpY
CS8qIERvIHRoZSBjb21tb24gcGFydHMgb2YgYXR0YWNobWVudC4gKi8NClgJ
bmNyNTNjOXhfYXR0YWNoKHNjLCBOVUxMLCBOVUxMKTsNClh9DQpYDQpYLyoN
ClggKiBHbHVlIGZ1bmN0aW9ucy4NClggKi8NClgNClgjaWZkZWYgRVNQX1NC
VVNfREVCVUcNClhpbnQgZXNwX3NidXNfZGVidWcgPSAwOw0KWA0KWHN0YXRp
YyBzdHJ1Y3Qgew0KWAljaGFyICpyX25hbWU7DQpYCWludCAgIHJfZmxhZzsg
DQpYfSBlc3BfX3JlYWRfcmVnbmFtZXMgW10gPSB7DQpYCXsgIlRDTCIsIDB9
LAkJCS8qIDAvMDAgKi8NClgJeyAiVENNIiwgMH0sCQkJLyogMS8wNCAqLw0K
WAl7ICJGSUZPIiwgMH0sCQkJLyogMi8wOCAqLw0KWAl7ICJDTUQiLCAwfSwJ
CQkvKiAzLzBjICovDQpYCXsgIlNUQVQiLCAwfSwJCQkvKiA0LzEwICovDQpY
CXsgIklOVFIiLCAwfSwJCQkvKiA1LzE0ICovDQpYCXsgIlNURVAiLCAwfSwJ
CQkvKiA2LzE4ICovDQpYCXsgIkZGTEFHUyIsIDF9LAkJCS8qIDcvMWMgKi8N
ClgJeyAiQ0ZHMSIsIDF9LAkJCS8qIDgvMjAgKi8NClgJeyAiU1RBVDIiLCAw
fSwJCQkvKiA5LzI0ICovDQpYCXsgIkNGRzQiLCAxfSwJCQkvKiBhLzI4ICov
DQpYCXsgIkNGRzIiLCAxfSwJCQkvKiBiLzJjICovDQpYCXsgIkNGRzMiLCAx
fSwJCQkvKiBjLzMwICovDQpYCXsgIi1ub25lIiwgMX0sCQkJLyogZC8zNCAq
Lw0KWAl7ICJUQ0giLCAxfSwJCQkvKiBlLzM4ICovDQpYCXsgIlRDWCIsIDF9
LAkJCS8qIGYvM2MgKi8NClh9Ow0KWA0KWHN0YXRpYyBzdHJ1Y3Qgew0KWAlj
aGFyICpyX25hbWU7DQpYCWludCAgIHJfZmxhZzsNClh9IGVzcF9fd3JpdGVf
cmVnbmFtZXNbXSA9IHsNClgJeyAiVENMIiwgMX0sCQkJLyogMC8wMCAqLw0K
WAl7ICJUQ00iLCAxfSwJCQkvKiAxLzA0ICovDQpYCXsgIkZJRk8iLCAwfSwJ
CQkvKiAyLzA4ICovDQpYCXsgIkNNRCIsIDB9LAkJCS8qIDMvMGMgKi8NClgJ
eyAiU0VMSUQiLCAxfSwJCQkvKiA0LzEwICovDQpYCXsgIlRJTUVPVVQiLCAx
fSwJCS8qIDUvMTQgKi8NClgJeyAiU1lOQ1RQIiwgMX0sCQkJLyogNi8xOCAq
Lw0KWAl7ICJTWU5DT0ZGIiwgMX0sCQkvKiA3LzFjICovDQpYCXsgIkNGRzEi
LCAxfSwJCQkvKiA4LzIwICovDQpYCXsgIkNDRiIsIDF9LAkJCS8qIDkvMjQg
Ki8NClgJeyAiVEVTVCIsIDF9LAkJCS8qIGEvMjggKi8NClgJeyAiQ0ZHMiIs
IDF9LAkJCS8qIGIvMmMgKi8NClgJeyAiQ0ZHMyIsIDF9LAkJCS8qIGMvMzAg
Ki8NClgJeyAiLW5vbmUiLCAxfSwJCQkvKiBkLzM0ICovDQpYCXsgIlRDSCIs
IDF9LAkJCS8qIGUvMzggKi8NClgJeyAiVENYIiwgMX0sCQkJLyogZi8zYyAq
Lw0KWH07DQpYI2VuZGlmDQpYDQpYdV9jaGFyDQpYZXNwX3JlYWRfcmVnKHNj
LCByZWcpDQpYCXN0cnVjdCBuY3I1M2M5eF9zb2Z0YyAqc2M7DQpYCWludCBy
ZWc7DQpYew0KWAlzdHJ1Y3QgZXNwX3NvZnRjICplc2MgPSAoc3RydWN0IGVz
cF9zb2Z0YyAqKXNjOw0KWAl1X2NoYXIgdjsNClgNClgJdiA9IGJ1c19zcGFj
ZV9yZWFkXzEoZXNjLT5zY19idXN0YWcsIGVzYy0+c2NfcmVnLCByZWcgKiA0
KTsNClgjaWZkZWYgRVNQX1NCVVNfREVCVUcNClgJaWYgKGVzcF9zYnVzX2Rl
YnVnICYmIChyZWcgPCAweDEwKSAmJiBlc3BfX3JlYWRfcmVnbmFtZXNbcmVn
XS5yX2ZsYWcpDQpYCQlwcmludGYoIlJEOiV4IDwlcz4gJXhcbiIsIHJlZyAq
IDQsDQpYCQkgICAgKCh1bnNpZ25lZClyZWcgPCAweDEwKSA/IGVzcF9fcmVh
ZF9yZWduYW1lc1tyZWddLnJfbmFtZSA6ICI8KioqPiIsIHYpOw0KWCNlbmRp
Zg0KWAlyZXR1cm4gdjsNClh9DQpYDQpYdm9pZA0KWGVzcF93cml0ZV9yZWco
c2MsIHJlZywgdikNClgJc3RydWN0IG5jcjUzYzl4X3NvZnRjICpzYzsNClgJ
aW50IHJlZzsNClgJdV9jaGFyIHY7DQpYew0KWAlzdHJ1Y3QgZXNwX3NvZnRj
ICplc2MgPSAoc3RydWN0IGVzcF9zb2Z0YyAqKXNjOw0KWA0KWCNpZmRlZiBF
U1BfU0JVU19ERUJVRw0KWAlpZiAoZXNwX3NidXNfZGVidWcgJiYgKHJlZyA8
IDB4MTApICYmIGVzcF9fd3JpdGVfcmVnbmFtZXNbcmVnXS5yX2ZsYWcpDQpY
CQlwcmludGYoIldSOiV4IDwlcz4gJXhcbiIsIHJlZyAqIDQsDQpYCQkgICAg
KCh1bnNpZ25lZClyZWcgPCAweDEwKSA/IGVzcF9fd3JpdGVfcmVnbmFtZXNb
cmVnXS5yX25hbWUgOiAiPCoqKj4iLCB2KTsNClgjZW5kaWYNClgJYnVzX3Nw
YWNlX3dyaXRlXzEoZXNjLT5zY19idXN0YWcsIGVzYy0+c2NfcmVnLCByZWcg
KiA0LCB2KTsNClh9DQpYDQpYdV9jaGFyDQpYZXNwX3JkcmVnMShzYywgcmVn
KQ0KWAlzdHJ1Y3QgbmNyNTNjOXhfc29mdGMgKnNjOw0KWAlpbnQgcmVnOw0K
WHsNClgJc3RydWN0IGVzcF9zb2Z0YyAqZXNjID0gKHN0cnVjdCBlc3Bfc29m
dGMgKilzYzsNClgNClgJcmV0dXJuIChidXNfc3BhY2VfcmVhZF8xKGVzYy0+
c2NfYnVzdGFnLCBlc2MtPnNjX3JlZywgcmVnKSk7DQpYfQ0KWA0KWHZvaWQN
Clhlc3Bfd3JyZWcxKHNjLCByZWcsIHYpDQpYCXN0cnVjdCBuY3I1M2M5eF9z
b2Z0YyAqc2M7DQpYCWludCByZWc7DQpYCXVfY2hhciB2Ow0KWHsNClgJc3Ry
dWN0IGVzcF9zb2Z0YyAqZXNjID0gKHN0cnVjdCBlc3Bfc29mdGMgKilzYzsN
ClgNClgJYnVzX3NwYWNlX3dyaXRlXzEoZXNjLT5zY19idXN0YWcsIGVzYy0+
c2NfcmVnLCByZWcsIHYpOw0KWH0NClgNClhpbnQNClhlc3BfZG1hX2lzaW50
cihzYykNClgJc3RydWN0IG5jcjUzYzl4X3NvZnRjICpzYzsNClh7DQpYCXN0
cnVjdCBlc3Bfc29mdGMgKmVzYyA9IChzdHJ1Y3QgZXNwX3NvZnRjICopc2M7
DQpYDQpYCXJldHVybiAoRE1BX0lTSU5UUihlc2MtPnNjX2RtYSkpOw0KWH0N
ClgNClh2b2lkDQpYZXNwX2RtYV9yZXNldChzYykNClgJc3RydWN0IG5jcjUz
Yzl4X3NvZnRjICpzYzsNClh7DQpYCXN0cnVjdCBlc3Bfc29mdGMgKmVzYyA9
IChzdHJ1Y3QgZXNwX3NvZnRjICopc2M7DQpYDQpYCURNQV9SRVNFVChlc2Mt
PnNjX2RtYSk7DQpYfQ0KWA0KWGludA0KWGVzcF9kbWFfaW50cihzYykNClgJ
c3RydWN0IG5jcjUzYzl4X3NvZnRjICpzYzsNClh7DQpYCXN0cnVjdCBlc3Bf
c29mdGMgKmVzYyA9IChzdHJ1Y3QgZXNwX3NvZnRjICopc2M7DQpYDQpYCXJl
dHVybiAoRE1BX0lOVFIoZXNjLT5zY19kbWEpKTsNClh9DQpYDQpYaW50DQpY
ZXNwX2RtYV9zZXR1cChzYywgYWRkciwgbGVuLCBkYXRhaW4sIGRtYXNpemUp
DQpYCXN0cnVjdCBuY3I1M2M5eF9zb2Z0YyAqc2M7DQpYCWNhZGRyX3QgKmFk
ZHI7DQpYCXNpemVfdCAqbGVuOw0KWAlpbnQgZGF0YWluOw0KWAlzaXplX3Qg
KmRtYXNpemU7DQpYew0KWAlzdHJ1Y3QgZXNwX3NvZnRjICplc2MgPSAoc3Ry
dWN0IGVzcF9zb2Z0YyAqKXNjOw0KWA0KWAlyZXR1cm4gKERNQV9TRVRVUChl
c2MtPnNjX2RtYSwgYWRkciwgbGVuLCBkYXRhaW4sIGRtYXNpemUpKTsNClh9
DQpYDQpYdm9pZA0KWGVzcF9kbWFfZ28oc2MpDQpYCXN0cnVjdCBuY3I1M2M5
eF9zb2Z0YyAqc2M7DQpYew0KWAlzdHJ1Y3QgZXNwX3NvZnRjICplc2MgPSAo
c3RydWN0IGVzcF9zb2Z0YyAqKXNjOw0KWA0KWAlETUFfR08oZXNjLT5zY19k
bWEpOw0KWH0NClgNClh2b2lkDQpYZXNwX2RtYV9zdG9wKHNjKQ0KWAlzdHJ1
Y3QgbmNyNTNjOXhfc29mdGMgKnNjOw0KWHsNClgJc3RydWN0IGVzcF9zb2Z0
YyAqZXNjID0gKHN0cnVjdCBlc3Bfc29mdGMgKilzYzsNClgJdV9pbnQzMl90
IGNzcjsNClgNClgJY3NyID0gTDY0ODU0X0dDU1IoZXNjLT5zY19kbWEpOw0K
WAljc3IgJj0gfkRfRU5fRE1BOw0KWAlMNjQ4NTRfU0NTUihlc2MtPnNjX2Rt
YSwgY3NyKTsNClh9DQpYDQpYaW50DQpYZXNwX2RtYV9pc2FjdGl2ZShzYykN
ClgJc3RydWN0IG5jcjUzYzl4X3NvZnRjICpzYzsNClh7DQpYCXN0cnVjdCBl
c3Bfc29mdGMgKmVzYyA9IChzdHJ1Y3QgZXNwX3NvZnRjICopc2M7DQpYDQpY
CXJldHVybiAoRE1BX0lTQUNUSVZFKGVzYy0+c2NfZG1hKSk7DQpYfQ0KWA0K
WCNpbmNsdWRlICJvcHRfZGRiLmgiDQpYI2lmZGVmIEREQg0KWCNpbmNsdWRl
IDxtYWNoaW5lL2RiX21hY2hkZXAuaD4NClgjaW5jbHVkZSA8ZGRiL2RiX291
dHB1dC5oPg0KWA0KWHZvaWQgZGJfZXNwIF9fUCgoZGJfZXhwcl90LCBpbnQs
IGRiX2V4cHJfdCwgY2hhciopKTsNClgNClh2b2lkDQpYZGJfZXNwKGFkZHIs
IGhhdmVfYWRkciwgY291bnQsIG1vZGlmKQ0KWAlkYl9leHByX3QgYWRkcjsN
ClgJaW50IGhhdmVfYWRkcjsNClgJZGJfZXhwcl90IGNvdW50Ow0KWAljaGFy
ICptb2RpZjsNClh7DQpYCXN0cnVjdCBuY3I1M2M5eF9zb2Z0YyAqc2M7DQpY
CXN0cnVjdCBuY3I1M2M5eF9lY2IgKmVjYjsNClgJc3RydWN0IG5jcjUzYzl4
X2xpbmZvICpsaTsNClgJaW50IHUsIHQsIGk7DQpYDQpYCWZvciAodT0wOyB1
PDEwOyB1KyspIHsNClgJCXNjID0gKHN0cnVjdCBuY3I1M2M5eF9zb2Z0YyAq
KQ0KWAkJCWdldGRldnVuaXQoImVzcCIsIHUpOw0KWAkJaWYgKCFzYykgY29u
dGludWU7DQpYDQpYCQlkYl9wcmludGYoImVzcCVkOiBuZXh1cyAlcCBwaGFz
ZSAleCBwcmV2ICV4IGRwICVwIGRsZWZ0ICVseCBpZnkgJXhcbiIsDQpYCQkJ
ICB1LCBzYy0+c2NfbmV4dXMsIHNjLT5zY19waGFzZSwgc2MtPnNjX3ByZXZw
aGFzZSwgDQpYCQkJICBzYy0+c2NfZHAsIHNjLT5zY19kbGVmdCwgc2MtPnNj
X21zZ2lmeSk7DQpYCQlkYl9wcmludGYoIlx0bXNnb3V0ICV4IG1zZ3ByaXEg
JXggbXNnaW4gJXg6JXg6JXg6JXg6JXhcbiIsDQpYCQkJICBzYy0+c2NfbXNn
b3V0LCBzYy0+c2NfbXNncHJpcSwgc2MtPnNjX2ltZXNzWzBdLA0KWAkJCSAg
c2MtPnNjX2ltZXNzWzFdLCBzYy0+c2NfaW1lc3NbMl0sIHNjLT5zY19pbWVz
c1szXSwNClgJCQkgIHNjLT5zY19pbWVzc1swXSk7DQpYCQlkYl9wcmludGYo
InJlYWR5OiAiKTsNClgJCWZvciAoZWNiID0gc2MtPnJlYWR5X2xpc3QudHFo
X2ZpcnN0OyBlY2I7IGVjYiA9IGVjYi0+Y2hhaW4udHFlX25leHQpIHsNClgJ
CQlkYl9wcmludGYoImVjYiAlcCAiLCBlY2IpOw0KWAkJCWlmIChlY2IgPT0g
ZWNiLT5jaGFpbi50cWVfbmV4dCkgew0KWAkJCQlkYl9wcmludGYoIlxuV0FS
TklORzogdGFpbHEgbG9vcCBvbiBlY2IgJXAiLCBlY2IpOw0KWAkJCQlicmVh
azsNClgJCQl9DQpYCQl9DQpYCQlkYl9wcmludGYoIlxuIik7DQpYCQkNClgJ
CWZvciAodD0wOyB0PE5DUl9OVEFSRzsgdCsrKSB7DQpYCQkJTElTVF9GT1JF
QUNIKGxpLCAmc2MtPnNjX3RpbmZvW3RdLmx1bnMsIGxpbmspIHsNClgJCQkJ
ZGJfcHJpbnRmKCJ0JWQgbHVuICVkIHVudGFnZ2VkICVwIGJ1c3kgJWQgdXNl
ZCAleFxuIiwNClgJCQkJCSAgdCwgKGludClsaS0+bHVuLCBsaS0+dW50YWdn
ZWQsIGxpLT5idXN5LA0KWAkJCQkJICBsaS0+dXNlZCk7DQpYCQkJCWZvciAo
aT0wOyBpPDI1NjsgaSsrKQ0KWAkJCQkJaWYgKChlY2IgPSBsaS0+cXVldWVk
W2ldKSkgew0KWAkJCQkJCWRiX3ByaW50ZigiZWNiICVwIHRhZyAleFxuIiwg
ZWNiLCBpKTsNClgJCQkJCX0NClgJCQl9DQpYCQl9DQpYCX0NClh9DQpYI2Vu
ZGlmDQpYDQpFTkQtb2Ytc2J1cy9lc3Bfc2J1cy5jDQplY2hvIHggLSBpYy9u
Y3I1M2M5eC5jDQpzZWQgJ3MvXlgvLycgPmljL25jcjUzYzl4LmMgPDwgJ0VO
RC1vZi1pYy9uY3I1M2M5eC5jJw0KWC8qCSROZXRCU0Q6IG5jcjUzYzl4LmMs
diAxLjcwIDIwMDEvMDEvMTkgMjM6MDQ6MjMgZWVoIEV4cCAkCSovDQpYDQpY
LyotDQpYICogQ29weXJpZ2h0IChjKSAxOTk4IFRoZSBOZXRCU0QgRm91bmRh
dGlvbiwgSW5jLg0KWCAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuDQpYICoNClgg
KiBUaGlzIGNvZGUgaXMgZGVyaXZlZCBmcm9tIHNvZnR3YXJlIGNvbnRyaWJ1
dGVkIHRvIFRoZSBOZXRCU0QgRm91bmRhdGlvbg0KWCAqIGJ5IENoYXJsZXMg
TS4gSGFubnVtLg0KWCAqDQpYICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0DQpY
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zDQpYICogYXJlIG1ldDoNClggKiAx
LiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g
dGhlIGFib3ZlIGNvcHlyaWdodA0KWCAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4N
ClggKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCBy
ZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodA0KWCAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lciBpbiB0aGUNClggKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBv
dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9u
Lg0KWCAqIDMuIEFsbCBhZHZlcnRpc2luZyBtYXRlcmlhbHMgbWVudGlvbmlu
ZyBmZWF0dXJlcyBvciB1c2Ugb2YgdGhpcyBzb2Z0d2FyZQ0KWCAqICAgIG11
c3QgZGlzcGxheSB0aGUgZm9sbG93aW5nIGFja25vd2xlZGdlbWVudDoNClgg
KiAgICAgICAgVGhpcyBwcm9kdWN0IGluY2x1ZGVzIHNvZnR3YXJlIGRldmVs
b3BlZCBieSB0aGUgTmV0QlNEDQpYICogICAgICAgIEZvdW5kYXRpb24sIElu
Yy4gYW5kIGl0cyBjb250cmlidXRvcnMuDQpYICogNC4gTmVpdGhlciB0aGUg
bmFtZSBvZiBUaGUgTmV0QlNEIEZvdW5kYXRpb24gbm9yIHRoZSBuYW1lcyBv
ZiBpdHMNClggKiAgICBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5k
b3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQNClggKiAgICBmcm9t
IHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVu
IHBlcm1pc3Npb24uDQpYICoNClggKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIFRIRSBORVRCU0QgRk9VTkRBVElPTiwgSU5DLiBBTkQgQ09OVFJJ
QlVUT1JTDQpYICogYGBBUyBJUycnIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBM
SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEDQpY
ICogVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM
SVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVINClggKiBQVVJQT1NF
IEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEZPVU5E
QVRJT04gT1IgQ09OVFJJQlVUT1JTDQpYICogQkUgTElBQkxFIEZPUiBBTlkg
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBM
QVJZLCBPUg0KWCAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GDQpYICogU1VC
U1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEs
IE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTDQpYICogSU5URVJSVVBUSU9OKSBI
T1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFks
IFdIRVRIRVIgSU4NClggKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwg
T1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQ0K
WCAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFDQpYICogUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuDQpYICovDQpYDQpYLyoNClggKiBDb3B5
cmlnaHQgKGMpIDE5OTQgUGV0ZXIgR2FsYmF2eQ0KWCAqIENvcHlyaWdodCAo
YykgMTk5NSBQYXVsIEtyYW5lbmJ1cmcNClggKiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLg0KWCAqDQpYICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0DQpYICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zDQpYICogYXJlIG1ldDoNClggKiAxLiBSZWRp
c3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFi
b3ZlIGNvcHlyaWdodA0KWCAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4NClggKiAy
LiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1
Y2UgdGhlIGFib3ZlIGNvcHlyaWdodA0KWCAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ciBpbiB0aGUNClggKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLg0KWCAq
IDMuIEFsbCBhZHZlcnRpc2luZyBtYXRlcmlhbHMgbWVudGlvbmluZyBmZWF0
dXJlcyBvciB1c2Ugb2YgdGhpcyBzb2Z0d2FyZQ0KWCAqICAgIG11c3QgZGlz
cGxheSB0aGUgZm9sbG93aW5nIGFja25vd2xlZGdlbWVudDoNClggKglUaGlz
IHByb2R1Y3QgaW5jbHVkZXMgc29mdHdhcmUgZGV2ZWxvcGVkIGJ5IFBldGVy
IEdhbGJhdnkNClggKiA0LiBUaGUgbmFtZSBvZiB0aGUgYXV0aG9yIG1heSBu
b3QgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMNClgg
KiAgICBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNp
ZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4NClggKg0KWCAqIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIEFVVEhPUiBgYEFTIElTJycg
QU5EIEFOWSBFWFBSRVNTIE9SDQpYICogSU1QTElFRCBXQVJSQU5USUVTLCBJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQNClgg
KiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFDQpYICogRElTQ0xBSU1FRC4g
IElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1IgQkUgTElBQkxFIEZPUiBB
TlkgRElSRUNULA0KWCAqIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFM
LCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUw0KWCAqIChJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0Yg
U1VCU1RJVFVURSBHT09EUyBPUg0KWCAqIFNFUlZJQ0VTOyBMT1NTIE9GIFVT
RSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9O
KQ0KWCAqIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJ
QUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwNClggKiBTVFJJQ1QgTElB
QklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhF
UldJU0UpIEFSSVNJTkcgSU4NClggKiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
IE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUNClgg
KiBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4NClggKi8NClgNClgvKg0K
WCAqIEJhc2VkIG9uIGFpYzYzNjAgYnkgSmFybGUgR3JlaXBzbGFuZA0KWCAq
DQpYICogQWNrbm93bGVkZ2VtZW50czogTWFueSBvZiB0aGUgYWxnb3JpdGht
cyB1c2VkIGluIHRoaXMgZHJpdmVyIGFyZQ0KWCAqIGluc3BpcmVkIGJ5IHRo
ZSB3b3JrIG9mIEp1bGlhbiBFbGlzY2hlciAoanVsaWFuQHRmcy5jb20pIGFu
ZA0KWCAqIENoYXJsZXMgSGFubnVtIChteWNyb2Z0QGR1YWxpdHkuZ251LmFp
Lm1pdC5lZHUpLiAgVGhhbmtzIGEgbWlsbGlvbiENClggKi8NClgNClgjaW5j
bHVkZSA8c3lzL3R5cGVzLmg+DQpYI2luY2x1ZGUgPHN5cy9wYXJhbS5oPg0K
WCNpbmNsdWRlIDxzeXMvc3lzdG0uaD4NClgjaW5jbHVkZSA8c3lzL2NhbGxv
dXQuaD4NClgjaW5jbHVkZSA8c3lzL2tlcm5lbC5oPg0KWCNpbmNsdWRlIDxz
eXMvZXJybm8uaD4NClgjaW5jbHVkZSA8c3lzL2lvY3RsLmg+DQpYI2luY2x1
ZGUgPHN5cy9kZXZpY2UuaD4NClgjaW5jbHVkZSA8c3lzL2J1Zi5oPg0KWCNp
bmNsdWRlIDxzeXMvbWFsbG9jLmg+DQpYI2luY2x1ZGUgPHN5cy9wcm9jLmg+
DQpYI2luY2x1ZGUgPHN5cy9xdWV1ZS5oPg0KWCNpbmNsdWRlIDxzeXMvcG9v
bC5oPg0KWCNpbmNsdWRlIDxzeXMvc2NzaWlvLmg+DQpYDQpYI2luY2x1ZGUg
PGRldi9zY3NpcGkvc2NzaV9hbGwuaD4NClgjaW5jbHVkZSA8ZGV2L3Njc2lw
aS9zY3NpcGlfYWxsLmg+DQpYI2luY2x1ZGUgPGRldi9zY3NpcGkvc2NzaWNv
bmYuaD4NClgjaW5jbHVkZSA8ZGV2L3Njc2lwaS9zY3NpX21lc3NhZ2UuaD4N
ClgNClgjaW5jbHVkZSA8ZGV2L2ljL25jcjUzYzl4cmVnLmg+DQpYI2luY2x1
ZGUgPGRldi9pYy9uY3I1M2M5eHZhci5oPg0KWA0KWGludCBuY3I1M2M5eF9k
ZWJ1ZyA9IDA7IC8qTkNSX1NIT1dQSEFTRXxOQ1JfU0hPV01JU0N8TkNSX1NI
T1dUUkFDfE5DUl9TSE9XQ01EUzsqLw0KWCNpZmRlZiBERUJVRw0KWGludCBu
Y3I1M2M5eF9ub3RhZyA9IDA7DQpYI2VuZGlmDQpYDQpYLypzdGF0aWMqLyB2
b2lkCW5jcjUzYzl4X3JlYWRyZWdzKHN0cnVjdCBuY3I1M2M5eF9zb2Z0YyAq
KTsNClgvKnN0YXRpYyovIHZvaWQJbmNyNTNjOXhfc2VsZWN0KHN0cnVjdCBu
Y3I1M2M5eF9zb2Z0YyAqLCBzdHJ1Y3QgbmNyNTNjOXhfZWNiICopOw0KWC8q
c3RhdGljKi8gaW50IG5jcjUzYzl4X3Jlc2VsZWN0KHN0cnVjdCBuY3I1M2M5
eF9zb2Z0YyAqLCBpbnQsIGludCwgaW50KTsNClgvKnN0YXRpYyovIHZvaWQJ
bmNyNTNjOXhfc2NzaV9yZXNldChzdHJ1Y3QgbmNyNTNjOXhfc29mdGMgKik7
DQpYLypzdGF0aWMqLyBpbnQJbmNyNTNjOXhfcG9sbChzdHJ1Y3QgbmNyNTNj
OXhfc29mdGMgKiwNClgJCQkgICAgICBzdHJ1Y3Qgc2NzaXBpX3hmZXIgKiwg
aW50KTsNClgvKnN0YXRpYyovIHZvaWQJbmNyNTNjOXhfc2NoZWQoc3RydWN0
IG5jcjUzYzl4X3NvZnRjICopOw0KWC8qc3RhdGljKi8gdm9pZAluY3I1M2M5
eF9kb25lKHN0cnVjdCBuY3I1M2M5eF9zb2Z0YyAqLCBzdHJ1Y3QgbmNyNTNj
OXhfZWNiICopOw0KWC8qc3RhdGljKi8gdm9pZAluY3I1M2M5eF9tc2dpbihz
dHJ1Y3QgbmNyNTNjOXhfc29mdGMgKik7DQpYLypzdGF0aWMqLyB2b2lkCW5j
cjUzYzl4X21zZ291dChzdHJ1Y3QgbmNyNTNjOXhfc29mdGMgKik7DQpYLypz
dGF0aWMqLyB2b2lkCW5jcjUzYzl4X3RpbWVvdXQodm9pZCAqYXJnKTsNClgv
KnN0YXRpYyovIHZvaWQJbmNyNTNjOXhfd2F0Y2godm9pZCAqYXJnKTsNClgv
KnN0YXRpYyovIHZvaWQJbmNyNTNjOXhfYWJvcnQoc3RydWN0IG5jcjUzYzl4
X3NvZnRjICosIHN0cnVjdCBuY3I1M2M5eF9lY2IgKik7DQpYLypzdGF0aWMq
LyB2b2lkIG5jcjUzYzl4X2RlcXVldWUoc3RydWN0IG5jcjUzYzl4X3NvZnRj
ICosIHN0cnVjdCBuY3I1M2M5eF9lY2IgKik7DQpYLypzdGF0aWMqLyBpbnQJ
bmNyNTNjOXhfaW9jdGwoc3RydWN0IHNjc2lwaV9saW5rICosIHVfbG9uZywN
ClgJCQkgICAgICAgY2FkZHJfdCwgaW50LCBzdHJ1Y3QgcHJvYyAqKTsNClgN
Clh2b2lkIG5jcjUzYzl4X3NlbnNlKHN0cnVjdCBuY3I1M2M5eF9zb2Z0YyAq
LCBzdHJ1Y3QgbmNyNTNjOXhfZWNiICopOw0KWHZvaWQgbmNyNTNjOXhfZnJl
ZV9lY2Ioc3RydWN0IG5jcjUzYzl4X3NvZnRjICosIHN0cnVjdCBuY3I1M2M5
eF9lY2IgKiwgaW50KTsNClhzdHJ1Y3QgbmNyNTNjOXhfZWNiICpuY3I1M2M5
eF9nZXRfZWNiKHN0cnVjdCBuY3I1M2M5eF9zb2Z0YyAqLCBpbnQpOw0KWA0K
WHN0YXRpYyBpbmxpbmUgaW50IG5jcjUzYzl4X3N0cDJjcGIoc3RydWN0IG5j
cjUzYzl4X3NvZnRjICosIGludCk7DQpYc3RhdGljIGlubGluZSB2b2lkIG5j
cjUzYzl4X3NldHN5bmMoc3RydWN0IG5jcjUzYzl4X3NvZnRjICosDQpYCQkJ
CSAgICBzdHJ1Y3QgbmNyNTNjOXhfdGluZm8gKik7DQpYc3RhdGljIHN0cnVj
dCBuY3I1M2M5eF9saW5mbyAqbmNyNTNjOXhfbHVuc2VhcmNoKHN0cnVjdCBu
Y3I1M2M5eF90aW5mbyAqLA0KWAkJCQkJCSBpbnQ2NF90IGx1bik7DQpYDQpY
c3RhdGljIHZvaWQgbmNyNTNjOXhfd3JmaWZvKHN0cnVjdCBuY3I1M2M5eF9z
b2Z0YyAqLCB1X2NoYXIgKiwgaW50KTsNClgNClhzdGF0aWMgaW50ICBuY3I1
M2M5eF9yZGZpZm8oc3RydWN0IG5jcjUzYzl4X3NvZnRjICosIGludCk7DQpY
I2RlZmluZSBOQ1JfUkRGSUZPX1NUQVJUICAgMA0KWCNkZWZpbmUgTkNSX1JE
RklGT19DT05USU5VRSAxDQpYDQpYDQpYI2RlZmluZSBOQ1JfU0VUX0NPVU5U
KHNjLCBzaXplKSBkbyB7IFwNClgJCQlOQ1JfV1JJVEVfUkVHKChzYyksIE5D
Ul9UQ0wsIChzaXplKSk7IAkJCVwNClgJCQlOQ1JfV1JJVEVfUkVHKChzYyks
IE5DUl9UQ00sIChzaXplKSA+PiA4KTsJCVwNClgJCQlpZiAoKHNjLT5zY19j
ZmcyICYgTkNSQ0ZHMl9GRSkgfHwgCQkJXA0KWAkJCSAgICAoc2MtPnNjX3Jl
diA9PSBOQ1JfVkFSSUFOVF9GQVMzNjYpKSB7CQlcDQpYCQkJCU5DUl9XUklU
RV9SRUcoKHNjKSwgTkNSX1RDSCwgKHNpemUpID4+IDE2KTsJXA0KWAkJCX0J
CQkJCQkJXA0KWAkJCWlmIChzYy0+c2NfcmV2ID09IE5DUl9WQVJJQU5UX0ZB
UzM2NikgewkJCVwNClgJCQkJTkNSX1dSSVRFX1JFRyhzYywgTkNSX1JDSCwg
MCk7CQkJXA0KWAkJCX0JCQkJCQkJXA0KWH0gd2hpbGUgKDApDQpYDQpYc3Rh
dGljIGludCBlY2JfcG9vbF9pbml0aWFsaXplZCA9IDA7DQpYc3RhdGljIHN0
cnVjdCBwb29sIGVjYl9wb29sOw0KWA0KWC8qDQpYICogTmFtZXMgZm9yIHRo
ZSBOQ1I1M2M5eCB2YXJpYW50cywgY29ycmVzcG5kaW5nIHRvIHRoZSB2YXJp
YW50IHRhZ3MNClggKiBpbiBuY3I1M2M5eHZhci5oLg0KWCAqLw0KWHN0YXRp
YyBjb25zdCBjaGFyICpuY3I1M2M5eF92YXJpYW50X25hbWVzW10gPSB7DQpY
CSJFU1AxMDAiLA0KWAkiRVNQMTAwQSIsDQpYCSJFU1AyMDAiLA0KWAkiTkNS
NTNDOTQiLA0KWAkiTkNSNTNDOTYiLA0KWAkiRVNQNDA2IiwNClgJIkZBUzQw
OCIsDQpYCSJGQVMyMTYiLA0KWAkiQU01M0M5NzQiLA0KWAkiRkFTMzY2L0hN
RSIsDQpYfTsNClgNClhzdGF0aWMgc3RydWN0IHNjc2lwaV9hZGFwdGVyIG5j
cjUzYzl4X2FkYXB0ZXIgPSB7DQpYCTAsCQkJLyogYWRhcHRlciByZWZjbnQg
Ki8NClgJbmNyNTNjOXhfc2NzaV9jbWQsCS8qIGNtZCAqLw0KWAltaW5waHlz
LAkJLyogbWlucGh5cyAqLw0KWAluY3I1M2M5eF9pb2N0bCwJCS8qIGlvY3Rs
ICovDQpYCU5VTEwsCQkJLyogZW5hYmxlICovDQpYCU5VTEwsCQkJLyogZ2V0
Z2VvbSAqLw0KWH07DQpYDQpYc3RhdGljIHN0cnVjdCBzY3NpcGlfZGV2aWNl
IG5jcjUzYzl4X2RldmljZSA9IHsNClgJTlVMTCwJCQkvKiB1c2UgZGVmYXVs
dCBlcnJvciBoYW5kbGVyICovDQpYCU5VTEwsCQkJLyogaGF2ZSBhIHF1ZXVl
LCBzZXJ2ZWQgYnkgdGhpcyAqLw0KWAlOVUxMLAkJCS8qIGhhdmUgbm8gYXN5
bmMgaGFuZGxlciAqLw0KWAlOVUxMLAkJCS8qIHVzZSBkZWZhdWx0ICdkb25l
JyByb3V0aW5lICovDQpYfTsNClgNClgvKg0KWCAqIFNlYXJjaCBsaW5rZWQg
bGlzdCBmb3IgTFVOIGluZm8gYnkgTFVOIGlkLg0KWCAqLw0KWHN0YXRpYyBz
dHJ1Y3QgbmNyNTNjOXhfbGluZm8gKg0KWG5jcjUzYzl4X2x1bnNlYXJjaCh0
aSwgbHVuKQ0KWAlzdHJ1Y3QgbmNyNTNjOXhfdGluZm8gKnRpOw0KWAlpbnQ2
NF90IGx1bjsNClh7DQpYCXN0cnVjdCBuY3I1M2M5eF9saW5mbyAqbGk7DQpY
CUxJU1RfRk9SRUFDSChsaSwgJnRpLT5sdW5zLCBsaW5rKSANClgJCWlmIChs
aS0+bHVuID09IGx1bikNClgJCQlyZXR1cm4gKGxpKTsNClgJcmV0dXJuIChO
VUxMKTsNClh9DQpYDQpYLyoNClggKiBBdHRhY2ggdGhpcyBpbnN0YW5jZSwg
YW5kIHRoZW4gYWxsIHRoZSBzdWItZGV2aWNlcw0KWCAqLw0KWHZvaWQNClhu
Y3I1M2M5eF9hdHRhY2goc2MsIGFkYXB0ZXIsIGRldmljZSkNClgJc3RydWN0
IG5jcjUzYzl4X3NvZnRjICpzYzsNClgJc3RydWN0IHNjc2lwaV9hZGFwdGVy
ICphZGFwdGVyOw0KWAlzdHJ1Y3Qgc2NzaXBpX2RldmljZSAqZGV2aWNlOw0K
WHsNClgNClgJY2FsbG91dF9pbml0KCZzYy0+c2Nfd2F0Y2hkb2cpOw0KWAkv
Kg0KWAkgKiBBbGxvY2F0ZSBTQ1NJIG1lc3NhZ2UgYnVmZmVycy4NClgJICog
RnJvbnQtZW5kcyBjYW4gb3ZlcnJpZGUgYWxsb2NhdGlvbiB0byBhdm9pZCBh
bGlnbm1lbnQNClgJICogaGFuZGxpbmcgaW4gdGhlIERNQSBlbmdpbmVzLiBO
b3RlIHRoYXQgdGhhdCBuY3I1M2M5eF9tc2dvdXQoKQ0KWAkgKiBjYW4gcmVx
dWVzdCBhIDEgYnl0ZSBETUEgdHJhbnNmZXIuDQpYCSAqLw0KWAlpZiAoc2Mt
PnNjX29tZXNzID09IE5VTEwpDQpYCQlzYy0+c2Nfb21lc3MgPSBtYWxsb2Mo
TkNSX01BWF9NU0dfTEVOLCBNX0RFVkJVRiwgTV9OT1dBSVQpOw0KWA0KWAlp
ZiAoc2MtPnNjX2ltZXNzID09IE5VTEwpDQpYCQlzYy0+c2NfaW1lc3MgPSBt
YWxsb2MoTkNSX01BWF9NU0dfTEVOKzEsIE1fREVWQlVGLCBNX05PV0FJVCk7
DQpYDQpYCWlmIChzYy0+c2Nfb21lc3MgPT0gTlVMTCB8fCBzYy0+c2NfaW1l
c3MgPT0gTlVMTCkgew0KWAkJcHJpbnRmKCJvdXQgb2YgbWVtb3J5XG4iKTsN
ClgJCXJldHVybjsNClgJfQ0KWA0KWAkvKg0KWAkgKiBOb3RlLCB0aGUgZnJv
bnQtZW5kIGhhcyBzZXQgdXMgdXAgdG8gcHJpbnQgdGhlIGNoaXAgdmFyaWF0
aW9uLg0KWAkgKi8NClgJaWYgKHNjLT5zY19yZXYgPj0gTkNSX1ZBUklBTlRf
TUFYKSB7DQpYCQlwcmludGYoIlxuJXM6IHVua25vd24gdmFyaWFudCAlZCwg
ZGV2aWNlcyBub3QgYXR0YWNoZWRcbiIsDQpYCQkgICAgc2MtPnNjX2Rldi5k
dl94bmFtZSwgc2MtPnNjX3Jldik7DQpYCQlyZXR1cm47DQpYCX0NClgNClgJ
cHJpbnRmKCI6ICVzLCAlZE1IeiwgU0NTSSBJRCAlZFxuIiwNClgJICAgIG5j
cjUzYzl4X3ZhcmlhbnRfbmFtZXNbc2MtPnNjX3Jldl0sIHNjLT5zY19mcmVx
LCBzYy0+c2NfaWQpOw0KWA0KWAlzYy0+c2NfY2NmID0gRlJFUVRPQ0NGKHNj
LT5zY19mcmVxKTsNClgNClgJLyogVGhlIHZhbHVlICptdXN0IG5vdCogYmUg
PT0gMS4gTWFrZSBpdCAyICovDQpYCWlmIChzYy0+c2NfY2NmID09IDEpDQpY
CQlzYy0+c2NfY2NmID0gMjsNClgNClgJLyoNClgJICogVGhlIHJlY29tbWVu
ZGVkIHRpbWVvdXQgaXMgMjUwbXMuIFRoaXMgcmVnaXN0ZXIgaXMgbG9hZGVk
DQpYCSAqIHdpdGggYSB2YWx1ZSBjYWxjdWxhdGVkIGFzIGZvbGxvd3MsIGZy
b20gdGhlIGRvY3M6DQpYCSAqDQpYCSAqCQkodGltb3V0IHBlcmlvZCkgeCAo
Q0xLIGZyZXF1ZW5jeSkNClgJICoJcmVnID0gLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLQ0KWAkgKgkJIDgxOTIgeCAoQ2xvY2sgQ29u
dmVyc2lvbiBGYWN0b3IpDQpYCSAqDQpYCSAqIFNpbmNlIENDRiBoYXMgYSBs
aW5lYXIgcmVsYXRpb24gdG8gQ0xLLCB0aGlzIGdlbmVyYWxseSBjb21wdXRl
cw0KWAkgKiB0byB0aGUgY29uc3RhbnQgb2YgMTUzLg0KWAkgKi8NClgJc2Mt
PnNjX3RpbWVvdXQgPSAoKDI1MCAqIDEwMDApICogc2MtPnNjX2ZyZXEpIC8g
KDgxOTIgKiBzYy0+c2NfY2NmKTsNClgNClgJLyogQ0NGIHJlZ2lzdGVyIG9u
bHkgaGFzIDMgYml0czsgMCBpcyBhY3R1YWxseSA4ICovDQpYCXNjLT5zY19j
Y2YgJj0gNzsNClgNClgJLyoNClgJICogZmlsbCBpbiB0aGUgcHJvdG90eXBl
IHNjc2lwaV9saW5rLg0KWAkgKi8NClgJc2MtPnNjX2xpbmsuc2NzaXBpX3Nj
c2kuY2hhbm5lbCA9IFNDU0lfQ0hBTk5FTF9PTkxZX09ORTsNClgJc2MtPnNj
X2xpbmsuYWRhcHRlcl9zb2Z0YyA9IHNjOw0KWAlzYy0+c2NfbGluay5zY3Np
cGlfc2NzaS5hZGFwdGVyX3RhcmdldCA9IHNjLT5zY19pZDsNClgJc2MtPnNj
X2xpbmsuYWRhcHRlciA9IChhZGFwdGVyKSA/IGFkYXB0ZXIgOiAmbmNyNTNj
OXhfYWRhcHRlcjsNClgJc2MtPnNjX2xpbmsuZGV2aWNlID0gKGRldmljZSkg
PyBkZXZpY2UgOiAmbmNyNTNjOXhfZGV2aWNlOw0KWAlzYy0+c2NfbGluay5v
cGVuaW5ncyA9IDI7DQpYCXNjLT5zY19saW5rLnNjc2lwaV9zY3NpLm1heF90
YXJnZXQgPSA3OwkvKiBYWFggZmFzIGhhcyAxNiAqLw0KWAlzYy0+c2NfbGlu
ay5zY3NpcGlfc2NzaS5tYXhfbHVuID0gNzsNClgJc2MtPnNjX2xpbmsudHlw
ZSA9IEJVU19TQ1NJOw0KWA0KWAlpZiAobmNyNTNjOXhfZG1hc2VsZWN0ICYm
IHNjLT5zY19yZXYgIT0gTkNSX1ZBUklBTlRfRkFTMzY2KQ0KWAkJc2MtPnNj
X2ZlYXR1cmVzIHw9IE5DUl9GX0RNQVNFTEVDVDsNClgjaWYgMA0KWCAgICAg
ICAgew0KWAkJZXh0ZXJuIGludCBlc3Bfc2J1c19kZWJ1ZzsNClgJCWV4dGVy
biBpbnQgbHNpNjQ4NTRkZWJ1ZzsNClgJCQkJLyogWFhYIFNERVZfREIxfCBT
REVWX0RCMiB8IFNERVZfREIzfCBTREVWX0RCNCAqLw0KWAkJc2MtPnNjX2xp
bmsuZmxhZ3MgfD0gMHgxMDsNClgJCWxzaTY0ODU0ZGVidWcgPSAweGZmLyog
TERCX0FOWSAqLzsNClgJCW5jcjUzYzl4X2RlYnVnID0gMHgzZmY7DQpYCQll
c3Bfc2J1c19kZWJ1ZyA9IDE7DQpYCX0NClgjZW5kaWYNClgJLyoNClgJICog
QWRkIHJlZmVyZW5jZSB0byBhZGFwdGVyIHNvIHRoYXQgd2UgZHJvcCB0aGUg
cmVmZXJlbmNlIGFmdGVyDQpYCSAqIGNvbmZpZ19mb3VuZCgpIHRvIG1ha2Ug
c3VyZSB0aGUgYWRhdHBlciBpcyBkaXNhYmxlZC4NClgJICovDQpYCWlmIChz
Y3NpcGlfYWRhcHRlcl9hZGRyZWYoJnNjLT5zY19saW5rKSAhPSAwKSB7DQpY
CQlwcmludGYoIiVzOiB1bmFibGUgdG8gZW5hYmxlIGNvbnRyb2xsZXJcbiIs
DQpYCQkgICAgc2MtPnNjX2Rldi5kdl94bmFtZSk7DQpYCQlyZXR1cm47DQpY
CX0NClgNClgJLyogUmVzZXQgc3RhdGUgJiBidXMgKi8NClgJc2MtPnNjX2Nm
ZmxhZ3MgPSBzYy0+c2NfZGV2LmR2X2NmZGF0YS0+Y2ZfZmxhZ3M7DQpYCXNj
LT5zY19zdGF0ZSA9IDA7DQpYCW5jcjUzYzl4X2luaXQoc2MsIDEpOw0KWA0K
WAkvKg0KWAkgKiBOb3cgdHJ5IHRvIGF0dGFjaCBhbGwgdGhlIHN1Yi1kZXZp
Y2VzDQpYCSAqLw0KWAlzYy0+c2NfY2hpbGQgPSBjb25maWdfZm91bmQoJnNj
LT5zY19kZXYsICZzYy0+c2NfbGluaywgc2NzaXByaW50KTsNClgNClgJc2Nz
aXBpX2FkYXB0ZXJfZGVscmVmKCZzYy0+c2NfbGluayk7DQpYCWNhbGxvdXRf
cmVzZXQoJnNjLT5zY193YXRjaGRvZywgNjAqaHosIG5jcjUzYzl4X3dhdGNo
LCBzYyk7DQpYfQ0KWA0KWGludA0KWG5jcjUzYzl4X2RldGFjaChzYywgZmxh
Z3MpDQpYCXN0cnVjdCBuY3I1M2M5eF9zb2Z0YyAqc2M7DQpYCWludCBmbGFn
czsNClh7DQpYCWludCBlcnJvcjsNClgNClgJaWYgKHNjLT5zY19jaGlsZCkg
ew0KWAkJZXJyb3IgPSBjb25maWdfZGV0YWNoKHNjLT5zY19jaGlsZCwgZmxh
Z3MpOw0KWAkJaWYgKGVycm9yKQ0KWAkJCXJldHVybiAoZXJyb3IpOw0KWAl9
DQpYDQpYCWZyZWUoc2MtPnNjX2ltZXNzLCBNX0RFVkJVRik7DQpYCWZyZWUo
c2MtPnNjX29tZXNzLCBNX0RFVkJVRik7DQpYDQpYCXJldHVybiAoMCk7DQpY
fQ0KWA0KWC8qDQpYICogVGhpcyBpcyB0aGUgZ2VuZXJpYyBuY3I1M2M5eCBy
ZXNldCBmdW5jdGlvbi4gSXQgZG9lcyBub3QgcmVzZXQgdGhlIFNDU0kgYnVz
LA0KWCAqIG9ubHkgdGhpcyBjb250cm9sbGVyLCBidXQga2lsbHMgYW55IG9u
LWdvaW5nIGNvbW1hbmRzLCBhbmQgYWxzbyBzdG9wcw0KWCAqIGFuZCByZXNl
dHMgdGhlIERNQS4NClggKg0KWCAqIEFmdGVyIHJlc2V0LCByZWdpc3RlcnMg
YXJlIGxvYWRlZCB3aXRoIHRoZSBkZWZhdWx0cyBmcm9tIHRoZSBhdHRhY2gN
ClggKiByb3V0aW5lIGFib3ZlLg0KWCAqLw0KWHZvaWQNClhuY3I1M2M5eF9y
ZXNldChzYykNClgJc3RydWN0IG5jcjUzYzl4X3NvZnRjICpzYzsNClh7DQpY
DQpYCS8qIHJlc2V0IERNQSBmaXJzdCAqLw0KWAlOQ1JETUFfUkVTRVQoc2Mp
Ow0KWA0KWAkvKiByZXNldCBTQ1NJIGNoaXAgKi8NClgJTkNSQ01EKHNjLCBO
Q1JDTURfUlNUQ0hJUCk7DQpYCU5DUkNNRChzYywgTkNSQ01EX05PUCk7DQpY
CURFTEFZKDUwMCk7DQpYDQpYCS8qIGRvIHRoZXNlIGJhY2t3YXJkcywgYW5k
IGZhbGwgdGhyb3VnaCAqLw0KWAlzd2l0Y2ggKHNjLT5zY19yZXYpIHsNClgJ
Y2FzZSBOQ1JfVkFSSUFOVF9FU1A0MDY6DQpYCWNhc2UgTkNSX1ZBUklBTlRf
RkFTNDA4Og0KWAkJTkNSX1dSSVRFX1JFRyhzYywgTkNSX0NGRzUsIHNjLT5z
Y19jZmc1IHwgTkNSQ0ZHNV9TSU5UKTsNClgJCU5DUl9XUklURV9SRUcoc2Ms
IE5DUl9DRkc0LCBzYy0+c2NfY2ZnNCk7DQpYCWNhc2UgTkNSX1ZBUklBTlRf
QU01M0M5NzQ6DQpYCWNhc2UgTkNSX1ZBUklBTlRfRkFTMjE2Og0KWAljYXNl
IE5DUl9WQVJJQU5UX05DUjUzQzk0Og0KWAljYXNlIE5DUl9WQVJJQU5UX05D
UjUzQzk2Og0KWAljYXNlIE5DUl9WQVJJQU5UX0VTUDIwMDoNClgJCXNjLT5z
Y19mZWF0dXJlcyB8PSBOQ1JfRl9IQVNDRkczOw0KWAkJTkNSX1dSSVRFX1JF
RyhzYywgTkNSX0NGRzMsIHNjLT5zY19jZmczKTsNClgJY2FzZSBOQ1JfVkFS
SUFOVF9FU1AxMDBBOg0KWAkJTkNSX1dSSVRFX1JFRyhzYywgTkNSX0NGRzIs
IHNjLT5zY19jZmcyKTsNClgJY2FzZSBOQ1JfVkFSSUFOVF9FU1AxMDA6DQpY
CQlOQ1JfV1JJVEVfUkVHKHNjLCBOQ1JfQ0ZHMSwgc2MtPnNjX2NmZzEpOw0K
WAkJTkNSX1dSSVRFX1JFRyhzYywgTkNSX0NDRiwgc2MtPnNjX2NjZik7DQpY
CQlOQ1JfV1JJVEVfUkVHKHNjLCBOQ1JfU1lOQ09GRiwgMCk7DQpYCQlOQ1Jf
V1JJVEVfUkVHKHNjLCBOQ1JfVElNRU9VVCwgc2MtPnNjX3RpbWVvdXQpOw0K
WAkJYnJlYWs7DQpYDQpYCWNhc2UgTkNSX1ZBUklBTlRfRkFTMzY2Og0KWAkJ
c2MtPnNjX2ZlYXR1cmVzIHw9IE5DUl9GX0hBU0NGRzMgfCBOQ1JfRl9GQVNU
U0NTSTsNClgJCXNjLT5zY19jZmczID0gIE5DUkZBU0NGRzNfRkFTVENMSyB8
IE5DUkZBU0NGRzNfT0JBVVRPOw0KWAkJc2MtPnNjX2NmZzNfZnNjc2kgPSAg
TkNSRkFTQ0ZHM19GQVNUU0NTSTsNClgJCU5DUl9XUklURV9SRUcoc2MsIE5D
Ul9DRkczLCBzYy0+c2NfY2ZnMyk7DQpYCQlzYy0+c2NfY2ZnMiA9IDA7IC8q
IE5DUkNGRzJfSE1FRkV8IE5DUkNGRzJfSE1FMzIgKi8NClgJCU5DUl9XUklU
RV9SRUcoc2MsIE5DUl9DRkcyLCBzYy0+c2NfY2ZnMik7DQpYCQlOQ1JfV1JJ
VEVfUkVHKHNjLCBOQ1JfQ0ZHMSwgc2MtPnNjX2NmZzEpOw0KWAkJTkNSX1dS
SVRFX1JFRyhzYywgTkNSX0NDRiwgc2MtPnNjX2NjZik7DQpYCQlOQ1JfV1JJ
VEVfUkVHKHNjLCBOQ1JfU1lOQ09GRiwgMCk7DQpYCQlOQ1JfV1JJVEVfUkVH
KHNjLCBOQ1JfVElNRU9VVCwgc2MtPnNjX3RpbWVvdXQpOw0KWAkJYnJlYWs7
DQpYDQpYCWRlZmF1bHQ6DQpYCQlwcmludGYoIiVzOiB1bmtub3duIHJldmlz
aW9uIGNvZGUsIGFzc3VtaW5nIEVTUDEwMFxuIiwNClgJCSAgICBzYy0+c2Nf
ZGV2LmR2X3huYW1lKTsNClgJCU5DUl9XUklURV9SRUcoc2MsIE5DUl9DRkcx
LCBzYy0+c2NfY2ZnMSk7DQpYCQlOQ1JfV1JJVEVfUkVHKHNjLCBOQ1JfQ0NG
LCBzYy0+c2NfY2NmKTsNClgJCU5DUl9XUklURV9SRUcoc2MsIE5DUl9TWU5D
T0ZGLCAwKTsNClgJCU5DUl9XUklURV9SRUcoc2MsIE5DUl9USU1FT1VULCBz
Yy0+c2NfdGltZW91dCk7DQpYCX0NClgNClgJaWYgKHNjLT5zY19yZXYgPT0g
TkNSX1ZBUklBTlRfQU01M0M5NzQpDQpYCQlOQ1JfV1JJVEVfUkVHKHNjLCBO
Q1JfQU1EQ0ZHNCwgc2MtPnNjX2NmZzQpOw0KWA0KWAlwcmludGYoIiVzOiBu
Y3I1M2M5eF9yZXNldDogcmV2aXNpb24gJWRcbiIsDQpYCSAgICBzYy0+c2Nf
ZGV2LmR2X3huYW1lLCBzYy0+c2NfcmV2KTsNClgJcHJpbnRmKCIlczogbmNy
NTNjOXhfcmVzZXQ6IGNmZzEgMHgleCwgY2ZnMiAweCV4LCBjZmczIDB4JXgs
IGNjZiAweCV4LCB0aW1lb3V0IDB4JXhcbiIsDQpYCSAgICAgICBzYy0+c2Nf
ZGV2LmR2X3huYW1lLA0KWAkgICAgICAgc2MtPnNjX2NmZzEsIHNjLT5zY19j
ZmcyLCBzYy0+c2NfY2ZnMywNClgJICAgICAgIHNjLT5zY19jY2YsIHNjLT5z
Y190aW1lb3V0KTsNClh9DQpYDQpYLyoNClggKiBSZXNldCB0aGUgU0NTSSBi
dXMsIGJ1dCBub3QgdGhlIGNoaXANClggKi8NClh2b2lkDQpYbmNyNTNjOXhf
c2NzaV9yZXNldChzYykNClgJc3RydWN0IG5jcjUzYzl4X3NvZnRjICpzYzsN
Clh7DQpYDQpYCSgqc2MtPnNjX2dsdWUtPmdsX2RtYV9zdG9wKShzYyk7DQpY
DQpYCXByaW50ZigiJXM6IHJlc2V0dGluZyBTQ1NJIGJ1c1xuIiwgc2MtPnNj
X2Rldi5kdl94bmFtZSk7DQpYCU5DUkNNRChzYywgTkNSQ01EX1JTVFNDU0kp
Ow0KWH0NClgNClgvKg0KWCAqIEluaXRpYWxpemUgbmNyNTNjOXggc3RhdGUg
bWFjaGluZQ0KWCAqLw0KWHZvaWQNClhuY3I1M2M5eF9pbml0KHNjLCBkb3Jl
c2V0KQ0KWAlzdHJ1Y3QgbmNyNTNjOXhfc29mdGMgKnNjOw0KWAlpbnQgZG9y
ZXNldDsNClh7DQpYCXN0cnVjdCBuY3I1M2M5eF9lY2IgKmVjYjsNClgJc3Ry
dWN0IG5jcjUzYzl4X2xpbmZvICpsaTsNClgJaW50IGksIHI7DQpYDQpYCU5D
Ul9UUkFDRSgoIltOQ1JfSU5JVCglZCkgJWRdICIsIGRvcmVzZXQsIHNjLT5z
Y19zdGF0ZSkpOw0KWA0KWAlpZiAoIWVjYl9wb29sX2luaXRpYWxpemVkKSB7
DQpYCQkvKiBBbGwgaW5zdGFuY2VzIHNoYXJlIHRoaXMgcG9vbCAqLw0KWAkJ
cG9vbF9pbml0KCZlY2JfcG9vbCwgc2l6ZW9mKHN0cnVjdCBuY3I1M2M5eF9l
Y2IpLCAwLCAwLCAwLCANClgJCQkgICJuY3I1M2M5eF9lY2IiLCAwLCBOVUxM
LCBOVUxMLCAwKTsNClgJCWVjYl9wb29sX2luaXRpYWxpemVkID0gMTsNClgJ
fQ0KWA0KWAlpZiAoc2MtPnNjX3N0YXRlID09IDApIHsNClgJCS8qIEZpcnN0
IHRpbWUgdGhyb3VnaDsgaW5pdGlhbGl6ZS4gKi8NClgNClgJCVRBSUxRX0lO
SVQoJnNjLT5yZWFkeV9saXN0KTsNClgJCXNjLT5zY19uZXh1cyA9IE5VTEw7
DQpYCQliemVybyhzYy0+c2NfdGluZm8sIHNpemVvZihzYy0+c2NfdGluZm8p
KTsNClgJCWZvciAociA9IDA7IHIgPCBOQ1JfTlRBUkc7IHIrKykgew0KWAkJ
CUxJU1RfSU5JVCgmc2MtPnNjX3RpbmZvW3JdLmx1bnMpOw0KWAkJfQ0KWAl9
IGVsc2Ugew0KWAkJLyogQ2FuY2VsIGFueSBhY3RpdmUgY29tbWFuZHMuICov
DQpYCQlzYy0+c2Nfc3RhdGUgPSBOQ1JfQ0xFQU5JTkc7DQpYCQlzYy0+c2Nf
bXNnaWZ5ID0gMDsNClgJCWlmICgoZWNiID0gc2MtPnNjX25leHVzKSAhPSBO
VUxMKSB7DQpYCQkJZWNiLT54cy0+ZXJyb3IgPSBYU19USU1FT1VUOw0KWAkJ
CW5jcjUzYzl4X2RvbmUoc2MsIGVjYik7DQpYCQl9DQpYCQkvKiBDYW5jZWwg
b3V0c3RhbmRpbmcgZGlzY29ubmVjdGVkIGNvbW1hbmRzIG9uIGVhY2ggTFVO
ICovDQpYCQlmb3IgKHIgPSAwOyByIDwgODsgcisrKSB7DQpYCQkJTElTVF9G
T1JFQUNIKGxpLCAmc2MtPnNjX3RpbmZvW3JdLmx1bnMsIGxpbmspIHsNClgJ
CQkJaWYgKChlY2IgPSBsaS0+dW50YWdnZWQpICE9IE5VTEwpIHsNClgJCQkJ
CWxpLT51bnRhZ2dlZCA9IE5VTEw7DQpYCQkJCQkvKiANClgJCQkJCSAqIFhY
WFhYWFgNClgJCQkJCSAqDQpYCQkJCQkgKiBTaG91bGQgd2UgdGVybWluYXRl
IGEgY29tbWFuZCANClgJCQkJCSAqIHRoYXQgbmV2ZXIgcmVhY2hlZCB0aGUg
ZGlzaz8gDQpYCQkJCQkgKi8NClgJCQkJCWxpLT5idXN5ID0gMDsNClgJCQkJ
CWVjYi0+eHMtPmVycm9yID0gWFNfVElNRU9VVDsNClgJCQkJCW5jcjUzYzl4
X2RvbmUoc2MsIGVjYik7DQpYCQkJCX0NClgJCQkJZm9yIChpID0gMDsgaSA8
IDI1NjsgaSsrKQ0KWAkJCQkJaWYgKChlY2IgPSBsaS0+cXVldWVkW2ldKSkg
ew0KWAkJCQkJCWxpLT5xdWV1ZWRbaV0gPSBOVUxMOw0KWAkJCQkJCWVjYi0+
eHMtPmVycm9yID0gWFNfVElNRU9VVDsNClgJCQkJCQluY3I1M2M5eF9kb25l
KHNjLCBlY2IpOw0KWAkJCQkJfQ0KWAkJCQlsaS0+dXNlZCA9IDA7DQpYCQkJ
fQ0KWAkJfQ0KWAl9DQpYDQpYCS8qDQpYCSAqIHJlc2V0IHRoZSBjaGlwIHRv
IGEga25vd24gc3RhdGUNClgJICovDQpYCW5jcjUzYzl4X3Jlc2V0KHNjKTsN
ClgNClgJc2MtPnNjX3BoYXNlID0gc2MtPnNjX3ByZXZwaGFzZSA9IElOVkFM
SURfUEhBU0U7DQpYCWZvciAociA9IDA7IHIgPCA4OyByKyspIHsNClgJCXN0
cnVjdCBuY3I1M2M5eF90aW5mbyAqdGkgPSAmc2MtPnNjX3RpbmZvW3JdOw0K
WC8qIFhYWCAtIGNvbmZpZyBmbGFncyBwZXIgdGFyZ2V0OiBsb3cgYml0czog
bm8gcmVzZWxlY3Q7IGhpZ2ggYml0czogbm8gc3luY2ggKi8NClgNClgJCXRp
LT5mbGFncyA9ICgoc2MtPnNjX21pbnN5bmMgJiYgIShzYy0+c2NfY2ZmbGFn
cyAmICgxPDwocis4KSkpKQ0KWAkJCSA/IDAgOiBUX1NZTkNIT0ZGKSB8DQpY
CQkJKChzYy0+c2NfY2ZmbGFncyAmICgxPDxyKSkgPyBUX1JTRUxFQ1RPRkYg
OiAwKSB8DQpYCQkJVF9ORUVEX1RPX1JFU0VUOw0KWCNpZmRlZiBERUJVRw0K
WAkJaWYgKG5jcjUzYzl4X25vdGFnKQ0KWAkJCXRpLT5mbGFncyAmPSB+VF9U
QUc7DQpYI2VuZGlmDQpYCQl0aS0+cGVyaW9kID0gc2MtPnNjX21pbnN5bmM7
DQpYCQl0aS0+b2Zmc2V0ID0gMDsNClgJCXRpLT5jZmczICAgPSAwOw0KWAl9
DQpYDQpYCWlmIChkb3Jlc2V0KSB7DQpYCQlzYy0+c2Nfc3RhdGUgPSBOQ1Jf
U0JSOw0KWAkJTkNSQ01EKHNjLCBOQ1JDTURfUlNUU0NTSSk7DQpYCX0gZWxz
ZSB7DQpYCQlzYy0+c2Nfc3RhdGUgPSBOQ1JfSURMRTsNClgJCW5jcjUzYzl4
X3NjaGVkKHNjKTsNClgJfQ0KWH0NClgNClgvKg0KWCAqIFJlYWQgdGhlIE5D
UiByZWdpc3RlcnMsIGFuZCBzYXZlIHRoZWlyIGNvbnRlbnRzIGZvciBsYXRl
ciB1c2UuDQpYICogTkNSX1NUQVQsIE5DUl9TVEVQICYgTkNSX0lOVFIgYXJl
IG1vc3RseSB6ZXJvZWQgb3V0IHdoZW4gcmVhZGluZw0KWCAqIE5DUl9JTlRS
IC0gc28gbWFrZSBzdXJlIGl0IGlzIHRoZSBsYXN0IHJlYWQuDQpYICoNClgg
KiBJIHRoaW5rIHRoYXQgKGZyb20gcmVhZGluZyB0aGUgZG9jcykgbW9zdCBi
aXRzIGluIHRoZXNlIHJlZ2lzdGVycw0KWCAqIG9ubHkgbWFrZSBzZW5zZSB3
aGVuIGhlIERNQSBDU1IgaGFzIGFuIGludGVycnVwdCBzaG93aW5nLiBDYWxs
IG9ubHkNClggKiBpZiBhbiBpbnRlcnJ1cHQgaXMgcGVuZGluZy4NClggKi8N
ClhfX2lubGluZV9fIHZvaWQNClhuY3I1M2M5eF9yZWFkcmVncyhzYykNClgJ
c3RydWN0IG5jcjUzYzl4X3NvZnRjICpzYzsNClh7DQpYDQpYCXNjLT5zY19l
c3BzdGF0ID0gTkNSX1JFQURfUkVHKHNjLCBOQ1JfU1RBVCk7DQpYCS8qIE9u
bHkgdGhlIHN0ZXBvIGJpdHMgYXJlIG9mIGludGVyZXN0ICovDQpYCXNjLT5z
Y19lc3BzdGVwID0gTkNSX1JFQURfUkVHKHNjLCBOQ1JfU1RFUCkgJiBOQ1JT
VEVQX01BU0s7DQpYDQpYCWlmIChzYy0+c2NfcmV2ID09IE5DUl9WQVJJQU5U
X0ZBUzM2NikgDQpYCQlzYy0+c2NfZXNwc3RhdDIgPSBOQ1JfUkVBRF9SRUco
c2MsIE5DUl9TVEFUMik7DQpYDQpYCXNjLT5zY19lc3BpbnRyID0gTkNSX1JF
QURfUkVHKHNjLCBOQ1JfSU5UUik7DQpYDQpYCWlmIChzYy0+c2NfZ2x1ZS0+
Z2xfY2xlYXJfbGF0Y2hlZF9pbnRyICE9IE5VTEwpDQpYCQkoKnNjLT5zY19n
bHVlLT5nbF9jbGVhcl9sYXRjaGVkX2ludHIpKHNjKTsNClgNClgJLyoNClgJ
ICogRGV0ZXJtaW5lIHRoZSBTQ1NJIGJ1cyBwaGFzZSwgcmV0dXJuIGVpdGhl
ciBhIHJlYWwgU0NTSSBidXMgcGhhc2UNClgJICogb3Igc29tZSBwc2V1ZG8g
cGhhc2Ugd2UgdXNlIHRvIGRldGVjdCBjZXJ0YWluIGV4Y2VwdGlvbnMuDQpY
CSAqLw0KWA0KWAlzYy0+c2NfcGhhc2UgPSAoc2MtPnNjX2VzcGludHIgJiBO
Q1JJTlRSX0RJUykNClgJCQk/IC8qIERpc2Nvbm5lY3RlZCAqLyBCVVNGUkVF
X1BIQVNFDQpYCQkJOiBzYy0+c2NfZXNwc3RhdCAmIE5DUlNUQVRfUEhBU0U7
DQpYDQpYCU5DUl9NSVNDKCgicmVnc1tpbnRyPSUwMngsc3RhdD0lMDJ4LHN0
ZXA9JTAyeCxzdGF0Mj0lMDJ4XSAiLA0KWAkJc2MtPnNjX2VzcGludHIsIHNj
LT5zY19lc3BzdGF0LCBzYy0+c2NfZXNwc3RlcCwgc2MtPnNjX2VzcHN0YXQy
KSk7DQpYfQ0KWA0KWC8qDQpYICogQ29udmVydCBTeW5jaHJvbm91cyBUcmFu
c2ZlciBQZXJpb2QgdG8gY2hpcCByZWdpc3RlciBDbG9jayBQZXIgQnl0ZSB2
YWx1ZS4NClggKi8NClhzdGF0aWMgaW5saW5lIGludA0KWG5jcjUzYzl4X3N0
cDJjcGIoc2MsIHBlcmlvZCkNClgJc3RydWN0IG5jcjUzYzl4X3NvZnRjICpz
YzsNClgJaW50IHBlcmlvZDsNClh7DQpYCWludCB2Ow0KWAl2ID0gKHNjLT5z
Y19mcmVxICogcGVyaW9kKSAvIDI1MDsNClgJaWYgKG5jcjUzYzl4X2NwYjJz
dHAoc2MsIHYpIDwgcGVyaW9kKQ0KWAkJLyogQ29ycmVjdCByb3VuZC1kb3du
IGVycm9yICovDQpYCQl2Kys7DQpYCXJldHVybiAodik7DQpYfQ0KWA0KWHN0
YXRpYyBpbmxpbmUgdm9pZA0KWG5jcjUzYzl4X3NldHN5bmMoc2MsIHRpKQ0K
WAlzdHJ1Y3QgbmNyNTNjOXhfc29mdGMgKnNjOw0KWAlzdHJ1Y3QgbmNyNTNj
OXhfdGluZm8gKnRpOw0KWHsNClgJdV9jaGFyIHN5bmNvZmYsIHN5bmN0cDsN
ClgJdV9jaGFyIGNmZzMgPSBzYy0+c2NfY2ZnMyB8IHRpLT5jZmczOw0KWA0K
WAlpZiAodGktPmZsYWdzICYgVF9TWU5DTU9ERSkgew0KWAkJc3luY29mZiA9
IHRpLT5vZmZzZXQ7DQpYCQlzeW5jdHAgPSBuY3I1M2M5eF9zdHAyY3BiKHNj
LCB0aS0+cGVyaW9kKTsNClgJCWlmIChzYy0+c2NfZmVhdHVyZXMgJiBOQ1Jf
Rl9GQVNUU0NTSSkgew0KWAkJCS8qDQpYCQkJICogSWYgdGhlIHBlcmlvZCBp
cyAyMDBucyBvciBsZXNzICh0aS0+cGVyaW9kIDw9IDUwKSwNClgJCQkgKiBw
dXQgdGhlIGNoaXAgaW4gRmFzdCBTQ1NJIG1vZGUuDQpYCQkJICovDQpYCQkJ
aWYgKHRpLT5wZXJpb2QgPD0gNTApDQpYCQkJCS8qDQpYCQkJCSAqIFRoZXJl
IGFyZSAoYXQgbGVhc3QpIDQgdmFyaWF0aW9ucyBvZiB0aGUNClgJCQkJICog
Y29uZmlndXJhdGlvbiAzIHJlZ2lzdGVyLiAgVGhlIGRyaXZlIGF0dGFjaA0K
WAkJCQkgKiByb3V0aW5lIHNldHMgdGhlIGFwcHJvcHJpYXRlIGJpdCB0byBw
dXQgdGhlDQpYCQkJCSAqIGNoaXAgaW50byBGYXN0IFNDU0kgbW9kZSBzbyB0
aGF0IGl0IGRvZXNuJ3QNClgJCQkJICogaGF2ZSB0byBiZSBmaWd1cmVkIG91
dCBoZXJlIGVhY2ggdGltZS4NClgJCQkJICovDQpYCQkJCWNmZzMgfD0gc2Mt
PnNjX2NmZzNfZnNjc2k7DQpYCQl9DQpYDQpYCQkvKg0KWAkJICogQW01M2M5
NzQgcmVxdWlyZXMgZGlmZmVyZW50IFNZTkNUUCB2YWx1ZXMgd2hlbiB0aGUN
ClgJCSAqIEZTQ1NJIGJpdCBpcyBvZmYuDQpYCQkgKi8NClgJCWlmIChzYy0+
c2NfcmV2ID09IE5DUl9WQVJJQU5UX0FNNTNDOTc0ICYmDQpYCQkgICAgKGNm
ZzMgJiBOQ1JBTURDRkczX0ZTQ1NJKSA9PSAwKQ0KWAkJCXN5bmN0cC0tOw0K
WAl9IGVsc2Ugew0KWAkJc3luY29mZiA9IDA7DQpYCQlzeW5jdHAgPSAwOw0K
WAl9DQpYDQpYCWlmIChzYy0+c2NfZmVhdHVyZXMgJiBOQ1JfRl9IQVNDRkcz
KQ0KWAkJTkNSX1dSSVRFX1JFRyhzYywgTkNSX0NGRzMsIGNmZzMpOw0KWA0K
WAlOQ1JfV1JJVEVfUkVHKHNjLCBOQ1JfU1lOQ09GRiwgc3luY29mZik7DQpY
CU5DUl9XUklURV9SRUcoc2MsIE5DUl9TWU5DVFAsIHN5bmN0cCk7DQpYfQ0K
WA0KWGludCBuY3I1M2M5eF9kbWFzZWxlY3QgPSAwOw0KWC8qDQpYICogU2Vu
ZCBhIGNvbW1hbmQgdG8gYSB0YXJnZXQsIHNldCB0aGUgZHJpdmVyIHN0YXRl
IHRvIE5DUl9TRUxFQ1RJTkcNClggKiBhbmQgbGV0IHRoZSBjYWxsZXIgdGFr
ZSBjYXJlIG9mIHRoZSByZXN0Lg0KWCAqDQpYICogS2VlcGluZyB0aGlzIGFz
IGEgZnVuY3Rpb24gYWxsb3dzIG1lIHRvIHNheSB0aGF0IHRoaXMgbWF5IGJl
IGRvbmUNClggKiBieSBETUEgaW5zdGVhZCBvZiBwcm9ncmFtbWVkIEkvTyBz
b29uLg0KWCAqLw0KWHZvaWQNClhuY3I1M2M5eF9zZWxlY3Qoc2MsIGVjYikN
ClgJc3RydWN0IG5jcjUzYzl4X3NvZnRjICpzYzsNClgJc3RydWN0IG5jcjUz
Yzl4X2VjYiAqZWNiOw0KWHsNClgJc3RydWN0IHNjc2lwaV9saW5rICpzY19s
aW5rID0gZWNiLT54cy0+c2NfbGluazsNClgJaW50IHRhcmdldCA9IHNjX2xp
bmstPnNjc2lwaV9zY3NpLnRhcmdldDsNClgJaW50IGx1biA9IHNjX2xpbmst
PnNjc2lwaV9zY3NpLmx1bjsNClgJc3RydWN0IG5jcjUzYzl4X3RpbmZvICp0
aSA9ICZzYy0+c2NfdGluZm9bdGFyZ2V0XTsNClgJaW50IHRpZmxhZ3MgPSB0
aS0+ZmxhZ3M7DQpYCXVfY2hhciAqY21kOw0KWAlpbnQgY2xlbjsNClgJaW50
IHNlbGF0bjMgPSAxOw0KWAlpbnQgc2VsYW5kc3RvcCA9IDA7DQpYCXNpemVf
dCBkbWFzaXplOw0KWA0KWAlOQ1JfVFJBQ0UoKCJbbmNyNTNjOXhfc2VsZWN0
KHQlZCxsJWQsY21kOiV4LHRhZzoleCwleCldICIsDQpYCQkgICB0YXJnZXQs
IGx1biwgZWNiLT5jbWQuY21kLm9wY29kZSwgZWNiLT50YWdbMF0sIGVjYi0+
dGFnWzFdKSk7DQpYDQpYCXNjLT5zY19zdGF0ZSA9IE5DUl9TRUxFQ1RJTkc7
DQpYCS8qDQpYCSAqIFNjaGVkdWxlIHRoZSB0aW1lb3V0IG5vdywgdGhlIGZp
cnN0IHRpbWUgd2Ugd2lsbCBnbyBhd2F5DQpYCSAqIGV4cGVjdGluZyB0byBj
b21lIGJhY2sgZHVlIHRvIGFuIGludGVycnVwdCwgYmVjYXVzZSBpdCBpcw0K
WAkgKiBhbHdheXMgcG9zc2libGUgdGhhdCB0aGUgaW50ZXJydXB0IG1heSBu
ZXZlciBoYXBwZW4uDQpYCSAqLw0KWAlpZiAoKGVjYi0+eHMtPnhzX2NvbnRy
b2wgJiBYU19DVExfUE9MTCkgPT0gMCkgew0KWAkJaW50IHRpbWVvdXQgPSBl
Y2ItPnRpbWVvdXQ7DQpYDQpYCQlpZiAoaHogPiAxMDAgJiYgdGltZW91dCA+
IDEwMDApDQpYCQkJdGltZW91dCA9ICh0aW1lb3V0IC8gMTAwMCkgKiBoejsN
ClgJCWVsc2UNClgJCQl0aW1lb3V0ID0gKHRpbWVvdXQgKiBoeikgLyAxMDAw
Ow0KWA0KWAkJY2FsbG91dF9yZXNldCgmZWNiLT54cy0+eHNfY2FsbG91dCwg
dGltZW91dCwNClgJCQkgICAgICBuY3I1M2M5eF90aW1lb3V0LCBlY2IpOw0K
WAl9DQpYDQpYCS8qDQpYCSAqIFRoZSBkb2NzIHNheSB0aGUgdGFyZ2V0IHJl
Z2lzdGVyIGlzIG5ldmVyIHJlc2V0LCBhbmQgSQ0KWAkgKiBjYW4ndCB0aGlu
ayBvZiBhIGJldHRlciBwbGFjZSB0byBzZXQgaXQNClgJICovDQpYCWlmIChz
Yy0+c2NfcmV2ID09IE5DUl9WQVJJQU5UX0ZBUzM2Nikgew0KWAkJTkNSQ01E
KHNjLCBOQ1JDTURfRkxVU0gpOw0KWAkJTkNSX1dSSVRFX1JFRyhzYywgTkNS
X1NFTElELCB0YXJnZXQgfCBOQ1JfQlVTSURfSE1FKTsNClgJfSBlbHNlIHsN
ClgJCU5DUl9XUklURV9SRUcoc2MsIE5DUl9TRUxJRCwgdGFyZ2V0KTsNClgJ
fQ0KWAluY3I1M2M5eF9zZXRzeW5jKHNjLCB0aSk7DQpYDQpYCS8qIA0KWAkg
KiBDaGVjayB0byBzZWUgaWYgd2UgY2FuIHVzZSBTRUxBVE4zLg0KWAkgKi8N
ClgJc3dpdGNoIChzYy0+c2NfcmV2KSB7DQpYCWNhc2UgTkNSX1ZBUklBTlRf
RVNQMTAwOg0KWAkJLyogRG9uJ3QgaGF2ZSBOQ1JDTURfU0VMQVROMyAqLw0K
WAkJc2VsYXRuMyA9IDA7DQpYCQlicmVhazsNClgJZGVmYXVsdDoJDQpYCQli
cmVhazsNClgJfQ0KWA0KWAlpZiAoKGVjYi0+ZmxhZ3MgJiBFQ0JfU0VOU0Up
ICE9IDApIHsNClgJCS8qDQpYCQkgKiBGb3IgUkVRVUVTVCBTRU5TRSwgd2Ug
c2hvdWxkIG5vdCBzZW5kIGFuIElERU5USUZZIG9yDQpYCQkgKiBvdGhlcndp
c2UgbWFuZ2xlIHRoZSB0YXJnZXQuICBUaGVyZSBzaG91bGQgYmUgbm8gTUVT
U0FHRSBJTg0KWAkJICogcGhhc2UuDQpYCQkgKi8NClgJCWlmIChzYy0+c2Nf
ZmVhdHVyZXMgJiBOQ1JfRl9ETUFTRUxFQ1QpIHsNClgJCQkvKiBzZXR1cCBE
TUEgdHJhbnNmZXIgZm9yIGNvbW1hbmQgKi8NClgJCQlkbWFzaXplID0gY2xl
biA9IGVjYi0+Y2xlbjsNClgJCQlzYy0+c2NfY21kbGVuID0gY2xlbjsNClgJ
CQlzYy0+c2NfY21kcCA9IChjYWRkcl90KSZlY2ItPmNtZC5jbWQ7DQpYCQ0K
WAkJCS8qIFByb2dyYW0gdGhlIFNDU0kgY291bnRlciAqLw0KWAkJCU5DUl9T
RVRfQ09VTlQoc2MsIGRtYXNpemUpOw0KWA0KWAkJCWlmIChzYy0+c2NfcmV2
ICE9IE5DUl9WQVJJQU5UX0ZBUzM2NikNClgJCQkJTkNSQ01EKHNjLCBOQ1JD
TURfTk9QfE5DUkNNRF9ETUEpOw0KWA0KWAkJCS8qIEFuZCBnZXQgdGhlIHRh
cmdldHMgYXR0ZW50aW9uICovDQpYCQkJTkNSQ01EKHNjLCBOQ1JDTURfU0VM
TkFUTiB8IE5DUkNNRF9ETUEpOw0KWAkJCU5DUkRNQV9TRVRVUChzYywgJnNj
LT5zY19jbWRwLCAmc2MtPnNjX2NtZGxlbiwgMCwgJmRtYXNpemUpOw0KWAkJ
CU5DUkRNQV9HTyhzYyk7DQpYCQl9IGVsc2Ugew0KWA0KWAkJCW5jcjUzYzl4
X3dyZmlmbyhzYywgKHVfY2hhciAqKSZlY2ItPmNtZC5jbWQsIGVjYi0+Y2xl
bik7DQpYDQpYCQkJTkNSQ01EKHNjLCBOQ1JDTURfU0VMTkFUTik7DQpYCQl9
DQpYCQlyZXR1cm47DQpYCX0NClgNClgJaWYgKHRpZmxhZ3MgJiBUX05FR09U
SUFURSkgc2VsYW5kc3RvcCA9IDE7DQpYCWNtZCA9ICh1X2NoYXIgKikmZWNi
LT5jbWQuY21kOw0KWA0KWAlpZiAoZWNiLT50YWdbMF0gJiYgIXNlbGF0bjMp
DQpYCQlzZWxhbmRzdG9wID0gMTsNClgNClgJaWYgKGVjYi0+dGFnWzBdICYm
IHNlbGF0bjMgJiYgIXNlbGFuZHN0b3ApIHsNClgJCS8qIFdlJ2xsIHVzZSB0
YWdzICovDQpYCQljbGVuID0gZWNiLT5jbGVuICsgMzsNClgJCWNtZCAtPSAz
Ow0KWAkJY21kWzBdID0gTVNHX0lERU5USUZZKGx1biwgMSk7CS8qIG1zZ1sw
XSAqLw0KWAkJY21kWzFdID0gZWNiLT50YWdbMF07CQkvKiBtc2dbMV0gKi8N
ClgJCWNtZFsyXSA9IGVjYi0+dGFnWzFdOwkJLyogbXNnWzJdICovDQpYCX0g
ZWxzZSB7DQpYCQlzZWxhdG4zID0gMDsJLyogRG8gbm90IHVzZSBzZWxhdG4z
IGV2ZW4gaWYgd2UgaGF2ZSBpdCAqLw0KWAkJY2xlbiA9IGVjYi0+Y2xlbiAr
IDE7DQpYCQljbWQgLT0gMTsNClgJCWNtZFswXSA9IE1TR19JREVOVElGWShs
dW4sICh0aWZsYWdzICYgVF9SU0VMRUNUT0ZGKT8wOjEpOw0KWAl9DQpYDQpY
CWlmICgoc2MtPnNjX2ZlYXR1cmVzICYgTkNSX0ZfRE1BU0VMRUNUKSAmJiAh
c2VsYW5kc3RvcCkgew0KWA0KWAkJLyogc2V0dXAgRE1BIHRyYW5zZmVyIGZv
ciBjb21tYW5kICovDQpYCQlkbWFzaXplID0gY2xlbjsNClgJCXNjLT5zY19j
bWRsZW4gPSBjbGVuOw0KWAkJc2MtPnNjX2NtZHAgPSBjbWQ7DQpYDQpYCQkv
KiBQcm9ncmFtIHRoZSBTQ1NJIGNvdW50ZXIgKi8NClgJCU5DUl9TRVRfQ09V
TlQoc2MsIGRtYXNpemUpOw0KWA0KWAkJLyogbG9hZCB0aGUgY291bnQgaW4g
Ki8NClgJCS8qIGlmIChzYy0+c2NfcmV2ICE9IE5DUl9WQVJJQU5UX0ZBUzM2
NikgKi8NClgJCQlOQ1JDTUQoc2MsIE5DUkNNRF9OT1B8TkNSQ01EX0RNQSk7
DQpYDQpYCQkvKiBBbmQgZ2V0IHRoZSB0YXJnZXRzIGF0dGVudGlvbiAqLw0K
WAkJaWYgKHNlbGF0bjMpIHsNClgJCQlzYy0+c2NfbXNnb3V0ID0gU0VORF9U
QUc7DQpYCQkJc2MtPnNjX2ZsYWdzIHw9IE5DUl9BVE47DQpYCQkJTkNSQ01E
KHNjLCBOQ1JDTURfU0VMQVROMyB8IE5DUkNNRF9ETUEpOw0KWAkJfSBlbHNl
DQpYCQkJTkNSQ01EKHNjLCBOQ1JDTURfU0VMQVROIHwgTkNSQ01EX0RNQSk7
DQpYCQlOQ1JETUFfU0VUVVAoc2MsICZzYy0+c2NfY21kcCwgJnNjLT5zY19j
bWRsZW4sIDAsICZkbWFzaXplKTsNClgJCU5DUkRNQV9HTyhzYyk7DQpYCQly
ZXR1cm47DQpYCX0NClgNClgJLyoNClgJICogV2hvIGFtIEkuIFRoaXMgaXMg
d2hlcmUgd2UgdGVsbCB0aGUgdGFyZ2V0IHRoYXQgd2UgYXJlDQpYCSAqIGhh
cHB5IGZvciBpdCB0byBkaXNjb25uZWN0IGV0Yy4NClgJICovDQpYCW5jcjUz
Yzl4X3dyZmlmbyhzYywgY21kLCAxKTsNClgJY21kKys7IGNsZW4tLTsNClgN
ClgJaWYgKHNlbGFuZHN0b3ApIHsNClgJCU5DUl9NSVNDKCgiU0VMQVROUyBc
biIpKTsNClgJCS8qIEFyYml0cmF0ZSwgc2VsZWN0IGFuZCBzdG9wIGFmdGVy
IElERU5USUZZIG1lc3NhZ2UgKi8NClgJCU5DUkNNRChzYywgTkNSQ01EX1NF
TEFUTlMpOw0KWAkJcmV0dXJuOw0KWAl9DQpYDQpYI2lmIDANClgJLyogSWYg
d2Ugd2FudCB0byBzZW5kIGEgdGFnLCBnZXQgaXQgaW50byB0aGUgZmlmbyAq
Lw0KWAlpZiAoZWNiLT50YWdbMF0pIHsNClgJCW5jcjUzYzl4X3dyZmlmbyhz
YywgY21kLCAyKTsNClgJCWNtZCArPSAyOyBjbGVuIC09IDI7DQpYCX0NClgj
ZW5kaWYNClgNClgJLyogTm93IGdldCB0aGUgY29tbWFuZCBpbnRvIHRoZSBG
SUZPICovDQpYCW5jcjUzYzl4X3dyZmlmbyhzYywgY21kLCBjbGVuKTsNClgN
ClgJLyogQW5kIGdldCB0aGUgdGFyZ2V0cyBhdHRlbnRpb24gKi8NClgJaWYg
KHNlbGF0bjMpIHsNClgJCXNjLT5zY19tc2dvdXQgPSBTRU5EX1RBRzsNClgJ
CXNjLT5zY19mbGFncyB8PSBOQ1JfQVROOw0KWAkJTkNSQ01EKHNjLCBOQ1JD
TURfU0VMQVROMyk7DQpYCX0gZWxzZQ0KWAkJTkNSQ01EKHNjLCBOQ1JDTURf
U0VMQVROKTsNClh9DQpYDQpYdm9pZA0KWG5jcjUzYzl4X2ZyZWVfZWNiKHNj
LCBlY2IsIGZsYWdzKQ0KWAlzdHJ1Y3QgbmNyNTNjOXhfc29mdGMgKnNjOw0K
WAlzdHJ1Y3QgbmNyNTNjOXhfZWNiICplY2I7DQpYCWludCBmbGFnczsNClh7
DQpYCWludCBzOw0KWA0KWAlzID0gc3BsYmlvKCk7DQpYCWVjYi0+ZmxhZ3Mg
PSAwOw0KWAlwb29sX3B1dCgmZWNiX3Bvb2wsICh2b2lkICopZWNiKTsNClgJ
c3BseChzKTsNClgJcmV0dXJuOw0KWH0NClgNClhzdHJ1Y3QgbmNyNTNjOXhf
ZWNiICoNClhuY3I1M2M5eF9nZXRfZWNiKHNjLCBmbGFncykNClgJc3RydWN0
IG5jcjUzYzl4X3NvZnRjICpzYzsNClgJaW50IGZsYWdzOw0KWHsNClgJc3Ry
dWN0IG5jcjUzYzl4X2VjYiAqZWNiOw0KWAlpbnQgcywgd2FpdCA9IDA7DQpY
DQpYCWlmICgoY3VycHJvYyAhPSBOVUxMKSAmJiAoKGZsYWdzICYgWFNfQ1RM
X05PU0xFRVApID09IDApKQ0KWAkJd2FpdCA9IFBSX1dBSVRPSzsNClgNClgJ
cyA9IHNwbGJpbygpOw0KWAllY2IgPSAoc3RydWN0IG5jcjUzYzl4X2VjYiAq
KXBvb2xfZ2V0KCZlY2JfcG9vbCwgd2FpdCk7DQpYCXNwbHgocyk7DQpYCWJ6
ZXJvKGVjYiwgc2l6ZW9mKCplY2IpKTsNClgJaWYgKGVjYikNClgJCWVjYi0+
ZmxhZ3MgfD0gRUNCX0FMTE9DOw0KWAlyZXR1cm4gKGVjYik7DQpYfQ0KWA0K
WC8qDQpYICogRFJJVkVSIEZVTkNUSU9OUyBDQUxMQUJMRSBGUk9NIEhJR0hF
UiBMRVZFTCBEUklWRVJTDQpYICovDQpYDQpYLyoNClggKiBTdGFydCBhIFND
U0ktY29tbWFuZA0KWCAqIFRoaXMgZnVuY3Rpb24gaXMgY2FsbGVkIGJ5IHRo
ZSBoaWdoZXIgbGV2ZWwgU0NTSS1kcml2ZXIgdG8gcXVldWUvcnVuDQpYICog
U0NTSS1jb21tYW5kcy4NClggKi8NClhpbnQNClhuY3I1M2M5eF9zY3NpX2Nt
ZCh4cykNClgJc3RydWN0IHNjc2lwaV94ZmVyICp4czsNClh7DQpYCXN0cnVj
dCBzY3NpcGlfbGluayAqc2NfbGluayA9IHhzLT5zY19saW5rOw0KWAlzdHJ1
Y3QgbmNyNTNjOXhfc29mdGMgKnNjID0gc2NfbGluay0+YWRhcHRlcl9zb2Z0
YzsNClgJc3RydWN0IG5jcjUzYzl4X2VjYiAqZWNiOw0KWAlzdHJ1Y3QgbmNy
NTNjOXhfdGluZm8gKnRpOw0KWAlzdHJ1Y3QgbmNyNTNjOXhfbGluZm8gKmxp
Ow0KWAlpbnQ2NF90IGx1biA9IHNjX2xpbmstPnNjc2lwaV9zY3NpLmx1bjsN
ClgJaW50IHMsIGZsYWdzOw0KWA0KWAlOQ1JfVFJBQ0UoKCJbbmNyNTNjOXhf
c2NzaV9jbWRdICIpKTsNClgJTkNSX0NNRFMoKCJbMHgleCwgJWRdLT4lZCAi
LCAoaW50KXhzLT5jbWQtPm9wY29kZSwgeHMtPmNtZGxlbiwNClgJICAgIHNj
X2xpbmstPnNjc2lwaV9zY3NpLnRhcmdldCkpOw0KWA0KWAkvKg0KWAkgKiBG
aW5kIHRoZSBMVU4gaW5mbyBzdHJ1Y3R1cmUgYW5kIGFsbG9jYXRlIG9uZSBp
ZiBpdCBkb2VzDQpYCSAqIG5vdCBleGlzdC4NClgJICovDQpYCWZsYWdzID0g
eHMtPnhzX2NvbnRyb2w7DQpYCXRpID0gJnNjLT5zY190aW5mb1tzY19saW5r
LT5zY3NpcGlfc2NzaS50YXJnZXRdOw0KWAlsaSA9IFRJTkZPX0xVTih0aSwg
bHVuKTsNClgJaWYgKGxpID09IE5VTEwpIHsNClgJCWludCB3YWl0ID0gTV9O
T1dBSVQ7DQpYDQpYCQkvKiBJbml0aWFsaXplIExVTiBpbmZvIGFuZCBhZGQg
dG8gbGlzdC4gKi8NClgJCWlmICgoY3VycHJvYyAhPSBOVUxMKSAmJiAoKGZs
YWdzICYgWFNfQ1RMX05PU0xFRVApID09IDApKQ0KWAkJCXdhaXQgPSBNX1dB
SVRPSzsNClgJCWlmICgobGkgPSBtYWxsb2Moc2l6ZW9mKCpsaSksIE1fREVW
QlVGLCBNX05PV0FJVCkpID09IE5VTEwpIHsNClgJCSAgICByZXR1cm4gKFRS
WV9BR0FJTl9MQVRFUik7DQpYCQl9DQpYCQliemVybyhsaSwgc2l6ZW9mKCps
aSkpOw0KWAkJbGktPmxhc3RfdXNlZCA9IHRpbWUudHZfc2VjOw0KWAkJbGkt
Pmx1biA9IGx1bjsNClgJCXMgPSBzcGxiaW8oKTsNClgJCUxJU1RfSU5TRVJU
X0hFQUQoJnRpLT5sdW5zLCBsaSwgbGluayk7DQpYCQlpZiAobHVuIDwgTkNS
X05MVU4pDQpYCQkJdGktPmx1bltsdW5dID0gbGk7DQpYCQlzcGx4KHMpOw0K
WAl9DQpYDQpYCWlmICgoZWNiID0gbmNyNTNjOXhfZ2V0X2VjYihzYywgZmxh
Z3MpKSA9PSBOVUxMKQ0KWAkJcmV0dXJuIChUUllfQUdBSU5fTEFURVIpOw0K
WA0KWAkvKiBJbml0aWFsaXplIGVjYiAqLw0KWAllY2ItPnhzID0geHM7DQpY
CWVjYi0+dGltZW91dCA9IHhzLT50aW1lb3V0Ow0KWA0KWAlpZiAoZmxhZ3Mg
JiBYU19DVExfUkVTRVQpIHsNClgJCWVjYi0+ZmxhZ3MgfD0gRUNCX1JFU0VU
Ow0KWAkJZWNiLT5jbGVuID0gMDsNClgJCWVjYi0+ZGxlZnQgPSAwOw0KWAl9
IGVsc2Ugew0KWAkJYmNvcHkoeHMtPmNtZCwgJmVjYi0+Y21kLmNtZCwgeHMt
PmNtZGxlbik7DQpYCQllY2ItPmNsZW4gPSB4cy0+Y21kbGVuOw0KWAkJZWNi
LT5kYWRkciA9IHhzLT5kYXRhOw0KWAkJZWNiLT5kbGVmdCA9IHhzLT5kYXRh
bGVuOw0KWAl9DQpYCWVjYi0+c3RhdCA9IDA7DQpYDQpYCXMgPSBzcGxiaW8o
KTsNClgNClgJVEFJTFFfSU5TRVJUX1RBSUwoJnNjLT5yZWFkeV9saXN0LCBl
Y2IsIGNoYWluKTsNClgJZWNiLT5mbGFncyB8PSBFQ0JfUkVBRFk7DQpYCWlm
IChzYy0+c2Nfc3RhdGUgPT0gTkNSX0lETEUpDQpYCQluY3I1M2M5eF9zY2hl
ZChzYyk7DQpYDQpYCXNwbHgocyk7DQpYDQpYCWlmICgoZmxhZ3MgJiBYU19D
VExfUE9MTCkgPT0gMCkNClgJCXJldHVybiAoU1VDQ0VTU0ZVTExZX1FVRVVF
RCk7DQpYDQpYCS8qIE5vdCBhbGxvd2VkIHRvIHVzZSBpbnRlcnJ1cHRzLCB1
c2UgcG9sbGluZyBpbnN0ZWFkICovDQpYCWlmIChuY3I1M2M5eF9wb2xsKHNj
LCB4cywgZWNiLT50aW1lb3V0KSkgew0KWAkJbmNyNTNjOXhfdGltZW91dChl
Y2IpOw0KWAkJaWYgKG5jcjUzYzl4X3BvbGwoc2MsIHhzLCBlY2ItPnRpbWVv
dXQpKQ0KWAkJCW5jcjUzYzl4X3RpbWVvdXQoZWNiKTsNClgJfQ0KWAlyZXR1
cm4gKENPTVBMRVRFKTsNClh9DQpYDQpYLyoNClggKiBVc2VkIHdoZW4gaW50
ZXJydXB0IGRyaXZlbiBJL08gaXNuJ3QgYWxsb3dlZCwgZS5nLiBkdXJpbmcg
Ym9vdC4NClggKi8NClhpbnQNClhuY3I1M2M5eF9wb2xsKHNjLCB4cywgY291
bnQpDQpYCXN0cnVjdCBuY3I1M2M5eF9zb2Z0YyAqc2M7DQpYCXN0cnVjdCBz
Y3NpcGlfeGZlciAqeHM7DQpYCWludCBjb3VudDsNClh7DQpYDQpYCU5DUl9U
UkFDRSgoIltuY3I1M2M5eF9wb2xsXSAiKSk7DQpYCXdoaWxlIChjb3VudCkg
ew0KWAkJaWYgKE5DUkRNQV9JU0lOVFIoc2MpKSB7DQpYCQkJbmNyNTNjOXhf
aW50cihzYyk7DQpYCQl9DQpYI2lmIGFsdGVybmF0aXZlbHkNClgJCWlmIChO
Q1JfUkVBRF9SRUcoc2MsIE5DUl9TVEFUKSAmIE5DUlNUQVRfSU5UKQ0KWAkJ
CW5jcjUzYzl4X2ludHIoc2MpOw0KWCNlbmRpZg0KWAkJaWYgKCh4cy0+eHNf
c3RhdHVzICYgWFNfU1RTX0RPTkUpICE9IDApDQpYCQkJcmV0dXJuICgwKTsN
ClgJCWlmIChzYy0+c2Nfc3RhdGUgPT0gTkNSX0lETEUpIHsNClgJCQlOQ1Jf
VFJBQ0UoKCJbbmNyNTNjOXhfcG9sbDogcmVzY2hlZHVsaW5nXSAiKSk7DQpY
CQkJbmNyNTNjOXhfc2NoZWQoc2MpOw0KWAkJfQ0KWAkJREVMQVkoMTAwMCk7
DQpYCQljb3VudC0tOw0KWAl9DQpYCXJldHVybiAoMSk7DQpYfQ0KWA0KWGlu
dA0KWG5jcjUzYzl4X2lvY3RsKGxpbmssIGNtZCwgYXJnLCBmbGFnLCBwKQ0K
WAlzdHJ1Y3Qgc2NzaXBpX2xpbmsgKmxpbms7DQpYCXVfbG9uZyBjbWQ7DQpY
CWNhZGRyX3QgYXJnOw0KWAlpbnQgZmxhZzsNClgJc3RydWN0IHByb2MgKnA7
DQpYew0KWAlzdHJ1Y3QgbmNyNTNjOXhfc29mdGMgKnNjID0gbGluay0+YWRh
cHRlcl9zb2Z0YzsNClgJaW50IHMsIGVycm9yID0gMDsNClgNClgJcyA9IHNw
bGJpbygpOw0KWA0KWAlzd2l0Y2ggKGNtZCkgew0KWAljYXNlIFNDQlVTQUND
RUw6IHsNClgJCXN0cnVjdCBzY2J1c2FjY2VsX2FyZ3MgKnNwID0gKHN0cnVj
dCBzY2J1c2FjY2VsX2FyZ3MgKilhcmc7DQpYCQlzdHJ1Y3QgbmNyNTNjOXhf
dGluZm8gKnRpID0gJnNjLT5zY190aW5mb1tzcC0+c2FfdGFyZ2V0XTsNClgN
ClgJCWlmIChzcC0+c2FfbHVuICE9IDApDQpYCQkJYnJlYWs7DQpYDQpYCQlO
Q1JfTUlTQygoIiVzOiBTQ0JVU0FDQ0VMIGZsYWcgMHgleFxuIiwgc2MtPnNj
X2Rldi5kdl94bmFtZSwNClgJCSAgICBzcC0+c2FfZmxhZ3MpKTsNClgNClgJ
CWlmICgoc3AtPnNhX2ZsYWdzICYgU0NfQUNDRUxfV0lERSkgIT0gMCkgew0K
WAkJCXByaW50ZigiJXM6IHRhcmdldCAlZDogd2lkZSBzY3NpXG4iLA0KWAkJ
CSAgICBzYy0+c2NfZGV2LmR2X3huYW1lLCBzcC0+c2FfdGFyZ2V0KTsNClgN
ClgJCQlpZiAoc2MtPnNjX3JldiA9PSBOQ1JfVkFSSUFOVF9GQVMzNjYpIHsN
ClgJCQkJdGktPmZsYWdzIHw9IFRfV0lERTsNClgJCQkJdGktPndpZHRoID0g
MTsNClgJCQl9DQpYDQpYI2lmIDANClgJCQlpZiAoc2MtPnNjX3JldiA9PSBO
Q1JfVkFSSUFOVF9GQVMzNjYpDQpYCQkJCXRpLT5jZmczIHw9IE5DUkZBU0NG
RzNfRVdJREU7DQpYI2VuZGlmDQpYCQl9DQpYDQpYCQlpZiAoKHNwLT5zYV9m
bGFncyAmIFNDX0FDQ0VMX1NZTkMpICE9IDApIHsNClgJCQkvKiBJZiB0aGlz
IGFkYXB0ZXIgY2FuJ3QgZG8gc3luYzsgZHJvcCBpdCAqLw0KWAkJCWlmIChz
Yy0+c2NfbWluc3luYyA9PSAwKQ0KWAkJCQlicmVhazsNClgNClgJCQkvKg0K
WAkJCSAqIENoZWNrIHdoZXRoZXIgdGFyZ2V0IGlzIGFscmVhZHkgY2xhbXBl
ZCBhdA0KWAkJCSAqIG5vbi1zeW5jIG9wZXJhdGlvbiBvbiB1c2VyIHJlcXVl
c3QuDQpYCQkJICovDQpYCQkJaWYgKCh0aS0+ZmxhZ3MgJiBUX1NZTkNIT0ZG
KSAhPSAwKQ0KWAkJCQlicmVhazsNClgNClgJCQlwcmludGYoIiVzOiB0YXJn
ZXQgJWQ6IHN5bmMgbmVnb3RpYXRpb25cbiIsDQpYCQkJCQlzYy0+c2NfZGV2
LmR2X3huYW1lLCBzcC0+c2FfdGFyZ2V0KTsNClgJCQl0aS0+ZmxhZ3MgfD0g
VF9ORUdPVElBVEU7DQpYCQl9DQpYDQpYCQlpZiAoKHNwLT5zYV9mbGFncyAm
IFNDX0FDQ0VMX1RBR1MpICE9IDApIHsNClgJCQlpZiAoKHNjLT5zY19jZmZs
YWdzICYgKDE8PCgoc3AtPnNhX3RhcmdldCkrMTYpKSkgPT0gMCkgew0KWAkJ
CQl0aS0+ZmxhZ3MgfD0gVF9UQUc7DQpYCQkJCWxpbmstPm9wZW5pbmdzID0g
MjU1Ow0KWA0KWAkJCQlwcmludGYoIiVzOiB0YXJnZXQgJWQ6IHRhZ3NcbiIs
DQpYCQkJCSAgICBzYy0+c2NfZGV2LmR2X3huYW1lLCBzcC0+c2FfdGFyZ2V0
KTsNClgJCQl9DQpYCQl9DQpYCWJyZWFrOw0KWAl9DQpYCWRlZmF1bHQ6DQpY
CQllcnJvciA9IEVOT1RUWTsNClgJCWJyZWFrOw0KWAl9DQpYCXNwbHgocyk7
DQpYCXJldHVybiAoZXJyb3IpOw0KWH0NClgNClgNClgvKg0KWCAqIExPVyBM
RVZFTCBTQ1NJIFVUSUxJVElFUw0KWCAqLw0KWA0KWC8qDQpYICogU2NoZWR1
bGUgYSBzY3NpIG9wZXJhdGlvbi4gIFRoaXMgaGFzIG5vdyBiZWVuIHB1bGxl
ZCBvdXQgb2YgdGhlIGludGVycnVwdA0KWCAqIGhhbmRsZXIgc28gdGhhdCB3
ZSBtYXkgY2FsbCBpdCBmcm9tIG5jcjUzYzl4X3Njc2lfY21kIGFuZCBuY3I1
M2M5eF9kb25lLg0KWCAqIFRoaXMgbWF5IHNhdmUgdXMgYW4gdW5lY2Vzc2Fy
eSBpbnRlcnJ1cHQganVzdCB0byBnZXQgdGhpbmdzIGdvaW5nLg0KWCAqIFNo
b3VsZCBvbmx5IGJlIGNhbGxlZCB3aGVuIHN0YXRlID09IE5DUl9JRExFIGFu
ZCBhdCBiaW8gcGwuDQpYICovDQpYdm9pZA0KWG5jcjUzYzl4X3NjaGVkKHNj
KQ0KWAlzdHJ1Y3QgbmNyNTNjOXhfc29mdGMgKnNjOw0KWHsNClgJc3RydWN0
IG5jcjUzYzl4X2VjYiAqZWNiOw0KWAlzdHJ1Y3Qgc2NzaXBpX2xpbmsgKnNj
X2xpbms7DQpYCXN0cnVjdCBuY3I1M2M5eF90aW5mbyAqdGk7DQpYCWludCBs
dW47DQpYCXN0cnVjdCBuY3I1M2M5eF9saW5mbyAqbGk7DQpYCWludCBzLCB0
YWc7DQpYDQpYCU5DUl9UUkFDRSgoIltuY3I1M2M5eF9zY2hlZF0gIikpOw0K
WAlpZiAoc2MtPnNjX3N0YXRlICE9IE5DUl9JRExFKQ0KWAkJcGFuaWMoIm5j
cjUzYzl4X3NjaGVkOiBub3QgSURMRSAoc3RhdGU9JWQpIiwgc2MtPnNjX3N0
YXRlKTsNClgNClgJLyoNClgJICogRmluZCBmaXJzdCBlY2IgaW4gcmVhZHkg
cXVldWUgdGhhdCBpcyBmb3IgYSB0YXJnZXQvbHVuaXQNClgJICogY29tYmlu
YXRpb25zIHRoYXQgaXMgbm90IGJ1c3kuDQpYCSAqLw0KWAlmb3IgKGVjYiA9
IFRBSUxRX0ZJUlNUKCZzYy0+cmVhZHlfbGlzdCk7IGVjYiAhPSBOVUxMOw0K
WAkgICAgIGVjYiA9IFRBSUxRX05FWFQoZWNiLCBjaGFpbikpIHsNClgJCXNj
X2xpbmsgPSBlY2ItPnhzLT5zY19saW5rOw0KWAkJdGkgPSAmc2MtPnNjX3Rp
bmZvW3NjX2xpbmstPnNjc2lwaV9zY3NpLnRhcmdldF07DQpYCQlsdW4gPSBz
Y19saW5rLT5zY3NpcGlfc2NzaS5sdW47DQpYDQpYCQkvKiBTZWxlY3QgdHlw
ZSBvZiB0YWcgZm9yIHRoaXMgY29tbWFuZCAqLw0KWAkJaWYgKCh0aS0+Zmxh
Z3MgJiAoVF9SU0VMRUNUT0ZGKSkgIT0gMCkgDQpYCQkJdGFnID0gMDsNClgJ
CWVsc2UgaWYgKCh0aS0+ZmxhZ3MgJiAoVF9UQUcpKSA9PSAwKQ0KWAkJCXRh
ZyA9IDA7DQpYCQllbHNlIGlmICgoZWNiLT5mbGFncyAmIEVDQl9TRU5TRSkg
IT0gMCkNClgJCQl0YWcgPSAwOw0KWAkJZWxzZSBpZiAoZWNiLT54cy0+eHNf
Y29udHJvbCAmIFhTX0NUTF9VUkdFTlQpDQpYCQkJdGFnID0gTVNHX0hFQURf
T0ZfUV9UQUc7DQpYCQllbHNlDQpYCQkJdGFnID0gTVNHX1NJTVBMRV9RX1RB
RzsNClgjaWYgMA0KWAkJLyogWFhYWCBVc2UgdGFncyBmb3IgcG9sbGVkIGNv
bW1hbmRzPyAqLw0KWAkJaWYgKGVjYi0+eHMtPnhzX2NvbnRyb2wgJiBYU19D
VExfUE9MTCkNClgJCQl0YWcgPSAwOw0KWCNlbmRpZg0KWA0KWAkJcyA9IHNw
bGJpbygpOw0KWAkJbGkgPSBUSU5GT19MVU4odGksIGx1bik7DQpYCQlpZiAo
bGkgPT0gTlVMTCkgew0KWAkJCWludCB3YWl0ID0gTV9OT1dBSVQ7DQpYCQkJ
aW50IGZsYWdzID0gZWNiLT54cy0+eHNfY29udHJvbDsNClgNClgJCQkvKiBJ
bml0aWFsaXplIExVTiBpbmZvIGFuZCBhZGQgdG8gbGlzdC4gKi8NClgJCQlp
ZiAoKGN1cnByb2MgIT0gTlVMTCkgJiYgKChmbGFncyAmIFhTX0NUTF9OT1NM
RUVQKSA9PSAwKSkNClgJCQkJd2FpdCA9IE1fV0FJVE9LOw0KWAkJCWlmICgo
bGkgPSBtYWxsb2Moc2l6ZW9mKCpsaSksIE1fREVWQlVGLCBNX05PV0FJVCkp
ID09IE5VTEwpIHsNClgJCQkJc3BseChzKTsNClgJCQkJY29udGludWU7DQpY
CQkJfQ0KWAkJCWJ6ZXJvKGxpLCBzaXplb2YoKmxpKSk7DQpYCQkJbGktPmx1
biA9IGx1bjsNClgNClgJCQlMSVNUX0lOU0VSVF9IRUFEKCZ0aS0+bHVucywg
bGksIGxpbmspOw0KWAkJCWlmIChsdW4gPCBOQ1JfTkxVTikNClgJCQkJdGkt
Pmx1bltsdW5dID0gbGk7DQpYCQl9DQpYCQlsaS0+bGFzdF91c2VkID0gdGlt
ZS50dl9zZWM7DQpYCQlpZiAodGFnID09IDApIHsNClgJCQkvKiBUcnkgdG8g
aXNzdWUgdGhpcyBhcyBhbiB1bi10YWdnZWQgY29tbWFuZCAqLw0KWAkJCWlm
IChsaS0+dW50YWdnZWQgPT0gTlVMTCkNClgJCQkJbGktPnVudGFnZ2VkID0g
ZWNiOw0KWAkJfQ0KWAkJaWYgKGxpLT51bnRhZ2dlZCAhPSBOVUxMKSB7DQpY
CQkJdGFnID0gMDsNClgJCQlpZiAoKGxpLT5idXN5ICE9IDEpICYmIGxpLT51
c2VkID09IDApIHsNClgJCQkJLyogV2UgbmVlZCB0byBpc3N1ZSB0aGlzIHVu
dGFnZ2VkIGNvbW1hbmQgbm93ICovDQpYCQkJCWVjYiA9IGxpLT51bnRhZ2dl
ZDsNClgJCQkJc2NfbGluayA9IGVjYi0+eHMtPnNjX2xpbms7DQpYCQkJfSAN
ClgJCQllbHNlIHsNClgJCQkJLyogTm90IHJlYWR5IHlldCAqLw0KWAkJCQlz
cGx4KHMpOw0KWAkJCQljb250aW51ZTsNClgJCQl9DQpYCQl9DQpYCQllY2It
PnRhZ1swXSA9IHRhZzsNClgJCWlmICh0YWcgIT0gMCkgew0KWAkJCWludCBp
Ow0KWA0KWAkJCS8qIEFsbG9jYXRlIGEgdGFnICovDQpYCQkJaWYgKGxpLT51
c2VkID09IDI1NSkgew0KWAkJCQkvKiBubyBmcmVlIHRhZ3MgKi8NClgJCQkJ
c3BseChzKTsNClgJCQkJY29udGludWU7DQpYCQkJfQ0KWAkJCS8qIFN0YXJ0
IGZyb20gdGhlIGxhc3QgdXNlZCBsb2NhdGlvbiAqLw0KWAkJCWZvciAoaSA9
IGxpLT5hdmFpbDsgaSA8IDI1NjsgaSsrKSB7DQpYCQkJCWlmIChsaS0+cXVl
dWVkW2ldID09IE5VTEwpDQpYCQkJCQlicmVhazsNClgJCQl9DQpYCQkJLyog
Q291bGRuJ3QgZmluZCBvbmUsIHN0YXJ0IGFnYWluIGZyb20gdGhlIGJlZ2lu
bmluZyAqLw0KWAkJCWlmIChpID09IDI1Nikgew0KWAkJCQlmb3IgKGkgPSAw
OyBpIDwgMjU2OyBpKyspIHsNClgJCQkJCWlmIChsaS0+cXVldWVkW2ldID09
IE5VTEwpDQpYCQkJCQkJYnJlYWs7DQpYCQkJCX0NClgJCQl9DQpYI2lmZGVm
IERJQUdOT1NUSUMNClgJCQkvKiBUaGVyZSdzIHN1cHBvc2VkIHRvIGJlIGF0
IGxlYXN0IDEgdGFnIGF2YWlsICovDQpYCQkJaWYgKGkgPT0gMjU2KQ0KWAkJ
CQlwYW5pYygibmNyNTNjOXhfc2NoZWQ6IHRhZyBhbGxvYyBmYWlsdXJlXG4i
KTsNClgjZW5kaWYNClgNClgJCQkvKiBTYXZlIHdoZXJlIHRvIHN0YXJ0IG5l
eHQgdGltZS4gKi8NClgJCQlsaS0+YXZhaWwgPSBpKzE7DQpYCQkJbGktPnVz
ZWQgKys7DQpYDQpYCQkJbGktPnF1ZXVlZFtpXSA9IGVjYjsNClgJCQllY2It
PnRhZ1sxXSA9IGk7DQpYCQl9DQpYCQlzcGx4KHMpOw0KWAkJaWYgKGxpLT51
bnRhZ2dlZCAhPSBOVUxMICYmIChsaS0+YnVzeSAhPSAxKSkgew0KWAkJCWxp
LT5idXN5ID0gMTsNClgJCQlUQUlMUV9SRU1PVkUoJnNjLT5yZWFkeV9saXN0
LCBlY2IsIGNoYWluKTsNClgJCQllY2ItPmZsYWdzICY9IH5FQ0JfUkVBRFk7
DQpYCQkJc2MtPnNjX25leHVzID0gZWNiOw0KWAkJCW5jcjUzYzl4X3NlbGVj
dChzYywgZWNiKTsNClgJCQlicmVhazsNClgJCX0NClgJCWlmIChsaS0+dW50
YWdnZWQgPT0gTlVMTCAmJiB0YWcgIT0gMCkgew0KWAkJCVRBSUxRX1JFTU9W
RSgmc2MtPnJlYWR5X2xpc3QsIGVjYiwgY2hhaW4pOw0KWAkJCWVjYi0+Zmxh
Z3MgJj0gfkVDQl9SRUFEWTsNClgJCQlzYy0+c2NfbmV4dXMgPSBlY2I7DQpY
CQkJbmNyNTNjOXhfc2VsZWN0KHNjLCBlY2IpOw0KWAkJCWJyZWFrOw0KWAkJ
fSBlbHNlDQpYCQkJTkNSX01JU0MoKCIlZDolZCBidXN5XG4iLA0KWAkJCQkg
IHNjX2xpbmstPnNjc2lwaV9zY3NpLnRhcmdldCwNClgJCQkJICBzY19saW5r
LT5zY3NpcGlfc2NzaS5sdW4pKTsNClgJfQ0KWH0NClgNClh2b2lkDQpYbmNy
NTNjOXhfc2Vuc2Uoc2MsIGVjYikNClgJc3RydWN0IG5jcjUzYzl4X3NvZnRj
ICpzYzsNClgJc3RydWN0IG5jcjUzYzl4X2VjYiAqZWNiOw0KWHsNClgJc3Ry
dWN0IHNjc2lwaV94ZmVyICp4cyA9IGVjYi0+eHM7DQpYCXN0cnVjdCBzY3Np
cGlfbGluayAqc2NfbGluayA9IHhzLT5zY19saW5rOw0KWAlzdHJ1Y3QgbmNy
NTNjOXhfdGluZm8gKnRpID0gJnNjLT5zY190aW5mb1tzY19saW5rLT5zY3Np
cGlfc2NzaS50YXJnZXRdOw0KWAlzdHJ1Y3Qgc2NzaXBpX3NlbnNlICpzcyA9
ICh2b2lkICopJmVjYi0+Y21kLmNtZDsNClgJc3RydWN0IG5jcjUzYzl4X2xp
bmZvICpsaTsNClgJaW50IGx1biA9IHNjX2xpbmstPnNjc2lwaV9zY3NpLmx1
bjsNClgNClgJTkNSX01JU0MoKCJyZXF1ZXN0aW5nIHNlbnNlICIpKTsNClgJ
LyogTmV4dCwgc2V0dXAgYSByZXF1ZXN0IHNlbnNlIGNvbW1hbmQgYmxvY2sg
Ki8NClgJYnplcm8oc3MsIHNpemVvZigqc3MpKTsNClgJc3MtPm9wY29kZSA9
IFJFUVVFU1RfU0VOU0U7DQpYCXNzLT5ieXRlMiA9IHNjX2xpbmstPnNjc2lw
aV9zY3NpLmx1biA8PCA1Ow0KWAlzcy0+bGVuZ3RoID0gc2l6ZW9mKHN0cnVj
dCBzY3NpcGlfc2Vuc2VfZGF0YSk7DQpYCWVjYi0+Y2xlbiA9IHNpemVvZigq
c3MpOw0KWAllY2ItPmRhZGRyID0gKGNoYXIgKikmeHMtPnNlbnNlLnNjc2lf
c2Vuc2U7DQpYCWVjYi0+ZGxlZnQgPSBzaXplb2Yoc3RydWN0IHNjc2lwaV9z
ZW5zZV9kYXRhKTsNClgJZWNiLT5mbGFncyB8PSBFQ0JfU0VOU0U7DQpYCWVj
Yi0+dGltZW91dCA9IE5DUl9TRU5TRV9USU1FT1VUOw0KWAl0aS0+c2Vuc2Vz
Kys7DQpYCWxpID0gVElORk9fTFVOKHRpLCBsdW4pOw0KWAlpZiAobGktPmJ1
c3kpIGxpLT5idXN5ID0gMDsNClgJbmNyNTNjOXhfZGVxdWV1ZShzYywgZWNi
KTsNClgJbGktPnVudGFnZ2VkID0gZWNiOyAvKiBtdXN0IGJlIGV4ZWN1dGVk
IGZpcnN0IHRvIGZpeCBDL0EgKi8NClgJbGktPmJ1c3kgPSAyOw0KWAlpZiAo
ZWNiID09IHNjLT5zY19uZXh1cykgew0KWAkJbmNyNTNjOXhfc2VsZWN0KHNj
LCBlY2IpOw0KWAl9IGVsc2Ugew0KWAkJVEFJTFFfSU5TRVJUX0hFQUQoJnNj
LT5yZWFkeV9saXN0LCBlY2IsIGNoYWluKTsNClgJCWVjYi0+ZmxhZ3MgfD0g
RUNCX1JFQURZOw0KWAkJaWYgKHNjLT5zY19zdGF0ZSA9PSBOQ1JfSURMRSkN
ClgJCQluY3I1M2M5eF9zY2hlZChzYyk7DQpYCX0NClh9DQpYDQpYLyoNClgg
KiBQT1NUIFBST0NFU1NJTkcgT0YgU0NTSV9DTUQgKHVzdWFsbHkgY3VycmVu
dCkNClggKi8NClh2b2lkDQpYbmNyNTNjOXhfZG9uZShzYywgZWNiKQ0KWAlz
dHJ1Y3QgbmNyNTNjOXhfc29mdGMgKnNjOw0KWAlzdHJ1Y3QgbmNyNTNjOXhf
ZWNiICplY2I7DQpYew0KWAlzdHJ1Y3Qgc2NzaXBpX3hmZXIgKnhzID0gZWNi
LT54czsNClgJc3RydWN0IHNjc2lwaV9saW5rICpzY19saW5rID0geHMtPnNj
X2xpbms7DQpYCXN0cnVjdCBuY3I1M2M5eF90aW5mbyAqdGkgPSAmc2MtPnNj
X3RpbmZvW3NjX2xpbmstPnNjc2lwaV9zY3NpLnRhcmdldF07DQpYCWludCBs
dW4gPSBzY19saW5rLT5zY3NpcGlfc2NzaS5sdW47DQpYCXN0cnVjdCBuY3I1
M2M5eF9saW5mbyAqbGkgPSBUSU5GT19MVU4odGksIGx1bik7DQpYDQpYCU5D
Ul9UUkFDRSgoIltuY3I1M2M5eF9kb25lKGVycm9yOiV4KV0gIiwgeHMtPmVy
cm9yKSk7DQpYDQpYCWNhbGxvdXRfc3RvcCgmZWNiLT54cy0+eHNfY2FsbG91
dCk7DQpYDQpYCWlmIChlY2ItPnN0YXQgPT0gU0NTSV9RVUVVRV9GVUxMKSB7
DQpYCQkvKiANClgJCSAqIFNldCBjdXJyZW50IHRocm90dGxlIC0tIHdlIHNo
b3VsZCByZXNldCANClgJCSAqIHRoaXMgcGVyaW9kaWNhbGx5IA0KWAkJICov
DQpYCQlzY19saW5rLT5vcGVuaW5ncyA9IGxpLT51c2VkIC0gMTsNClgJCXBy
aW50ZigiXG4lczogUUZVTEwgLS0gdGhyb3R0bGluZyB0byAlZCBjb21tYW5k
c1xuIiwNClgJCSAgICBzYy0+c2NfZGV2LmR2X3huYW1lLCBzY19saW5rLT5v
cGVuaW5ncyk7DQpYDQpYCX0NClgNClgJLyoNClgJICogTm93LCBpZiB3ZSd2
ZSBjb21lIGhlcmUgd2l0aCBubyBlcnJvciBjb2RlLCBpLmUuIHdlJ3ZlIGtl
cHQgdGhlDQpYCSAqIGluaXRpYWwgWFNfTk9FUlJPUiwgYW5kIHRoZSBzdGF0
dXMgY29kZSBzaWduYWxzIHRoYXQgd2Ugc2hvdWxkDQpYCSAqIGNoZWNrIHNl
bnNlLCB3ZSdsbCBuZWVkIHRvIHNldCB1cCBhIHJlcXVlc3Qgc2Vuc2UgY21k
IGJsb2NrIGFuZA0KWAkgKiBwdXNoIHRoZSBjb21tYW5kIGJhY2sgaW50byB0
aGUgcmVhZHkgcXVldWUgKmJlZm9yZSogYW55IG90aGVyDQpYCSAqIGNvbW1h
bmRzIGZvciB0aGlzIHRhcmdldC9sdW5pdCwgZWxzZSB3ZSBsb3NlIHRoZSBz
ZW5zZSBpbmZvLg0KWAkgKiBXZSBkb24ndCBzdXBwb3J0IGNoayBzZW5zZSBj
b25kaXRpb25zIGZvciB0aGUgcmVxdWVzdCBzZW5zZSBjbWQuDQpYCSAqLw0K
WAlpZiAoeHMtPmVycm9yID09IFhTX05PRVJST1IpIHsNClgJCXhzLT5zdGF0
dXMgPSBlY2ItPnN0YXQ7DQpYCQlpZiAoKGVjYi0+ZmxhZ3MgJiBFQ0JfQUJP
UlQpICE9IDApIHsNClgJCQl4cy0+ZXJyb3IgPSBYU19USU1FT1VUOw0KWAkJ
fSBlbHNlIGlmICgoZWNiLT5mbGFncyAmIEVDQl9TRU5TRSkgIT0gMCkgew0K
WAkJCXhzLT5lcnJvciA9IFhTX1NFTlNFOw0KWAkJfSBlbHNlIGlmICgoZWNi
LT5zdGF0ICYgU1RfTUFTSykgPT0gU0NTSV9DSEVDSykgew0KWAkJCS8qIEZp
cnN0LCBzYXZlIHRoZSByZXR1cm4gdmFsdWVzICovDQpYCQkJeHMtPnJlc2lk
ID0gZWNiLT5kbGVmdDsNClgJCQluY3I1M2M5eF9zZW5zZShzYywgZWNiKTsN
ClgJCQlyZXR1cm47DQpYCQl9IGVsc2Ugew0KWAkJCXhzLT5yZXNpZCA9IGVj
Yi0+ZGxlZnQ7DQpYCQl9DQpYCX0NClgNClgJeHMtPnhzX3N0YXR1cyB8PSBY
U19TVFNfRE9ORTsNClgNClgjaWZkZWYgTkNSNTNDOVhfREVCVUcNClgJaWYg
KG5jcjUzYzl4X2RlYnVnICYgTkNSX1NIT1dNSVNDKSB7DQpYCQlpZiAoeHMt
PnJlc2lkICE9IDApDQpYCQkJcHJpbnRmKCJyZXNpZD0lZCAiLCB4cy0+cmVz
aWQpOw0KWAkJaWYgKHhzLT5lcnJvciA9PSBYU19TRU5TRSkNClgJCQlwcmlu
dGYoInNlbnNlPTB4JTAyeFxuIiwgeHMtPnNlbnNlLnNjc2lfc2Vuc2UuZXJy
b3JfY29kZSk7DQpYCQllbHNlDQpYCQkJcHJpbnRmKCJlcnJvcj0lZFxuIiwg
eHMtPmVycm9yKTsNClgJfQ0KWCNlbmRpZg0KWA0KWAkvKg0KWAkgKiBSZW1v
dmUgdGhlIEVDQiBmcm9tIHdoYXRldmVyIHF1ZXVlIGl0J3Mgb24uDQpYCSAq
Lw0KWAluY3I1M2M5eF9kZXF1ZXVlKHNjLCBlY2IpOw0KWAlpZiAoZWNiID09
IHNjLT5zY19uZXh1cykgew0KWAkJc2MtPnNjX25leHVzID0gTlVMTDsNClgJ
CWlmIChzYy0+c2Nfc3RhdGUgIT0gTkNSX0NMRUFOSU5HKSB7DQpYCQkJc2Mt
PnNjX3N0YXRlID0gTkNSX0lETEU7DQpYCQkJbmNyNTNjOXhfc2NoZWQoc2Mp
Ow0KWAkJfQ0KWAl9DQpYDQpYCWlmICh4cy0+ZXJyb3IgPT0gWFNfU0VMVElN
RU9VVCkgew0KWAkJLyogU2VsZWN0aW9uIHRpbWVvdXQgLS0gZGlzY2FyZCB0
aGlzIExVTiBpZiBlbXB0eSAqLw0KWAkJaWYgKGxpLT51bnRhZ2dlZCA9PSBO
VUxMICYmIGxpLT51c2VkID09IDApIHsNClgJCQlpZiAobHVuIDwgTkNSX05M
VU4pDQpYCQkJCXRpLT5sdW5bbHVuXSA9IE5VTEw7DQpYCQkJTElTVF9SRU1P
VkUobGksIGxpbmspOw0KWAkJCWZyZWUobGksIE1fREVWQlVGKTsNClgJCX0N
ClgJfQ0KWA0KWAluY3I1M2M5eF9mcmVlX2VjYihzYywgZWNiLCB4cy0+eHNf
Y29udHJvbCk7DQpYCXRpLT5jbWRzKys7DQpYCXNjc2lwaV9kb25lKHhzKTsN
Clh9DQpYDQpYdm9pZA0KWG5jcjUzYzl4X2RlcXVldWUoc2MsIGVjYikNClgJ
c3RydWN0IG5jcjUzYzl4X3NvZnRjICpzYzsNClgJc3RydWN0IG5jcjUzYzl4
X2VjYiAqZWNiOw0KWHsNClgJc3RydWN0IG5jcjUzYzl4X3RpbmZvICp0aSA9
IA0KWAkJJnNjLT5zY190aW5mb1tlY2ItPnhzLT5zY19saW5rLT5zY3NpcGlf
c2NzaS50YXJnZXRdOw0KWAlzdHJ1Y3QgbmNyNTNjOXhfbGluZm8gKmxpOw0K
WAlpbnQ2NF90IGx1biA9IGVjYi0+eHMtPnNjX2xpbmstPnNjc2lwaV9zY3Np
Lmx1bjsNClgJDQpYCWxpID0gVElORk9fTFVOKHRpLCBsdW4pOw0KWCNpZmRl
ZiBESUFHTk9TVElDDQpYCWlmIChsaSA9PSBOVUxMIHx8IGxpLT5sdW4gIT0g
bHVuKQ0KWAkJcGFuaWMoIm5jcjUzYzl4X2RlcXVldWU6IGx1biAlcXggZm9y
IGVjYiAlcCBkb2VzIG5vdCBleGlzdFxuIiwNClgJCSAgICAgIChsb25nIGxv
bmcpIGx1biwgZWNiKTsNClgjZW5kaWYNClgJaWYgKGxpLT51bnRhZ2dlZCA9
PSBlY2IpIHsNClgJCWxpLT5idXN5ID0gMDsNClgJCWxpLT51bnRhZ2dlZCA9
IE5VTEw7DQpYCX0NClgJaWYgKGVjYi0+dGFnWzBdICYmIGxpLT5xdWV1ZWRb
ZWNiLT50YWdbMV1dICE9IE5VTEwpIHsNClgjaWZkZWYgRElBR05PU1RJQw0K
WAkJaWYgKGxpLT5xdWV1ZWRbZWNiLT50YWdbMV1dICE9IE5VTEwgJiYNClgJ
CSAgICAobGktPnF1ZXVlZFtlY2ItPnRhZ1sxXV0gIT0gZWNiKSkNClgJCQlw
YW5pYygibmNyNTNjOXhfZGVxdWV1ZTogc2xvdCAlZCBmb3IgbHVuICVxeCBo
YXMgJXAgIg0KWAkJCSAgICAgICJpbnN0ZWFkIG9mIGVjYiAlcFxuIiwgZWNi
LT50YWdbMV0sDQpYCQkJICAgICAgKGxvbmcgbG9uZykgbHVuLA0KWAkJCSAg
ICAgIGxpLT5xdWV1ZWRbZWNiLT50YWdbMV1dLCBlY2IpOw0KWCNlbmRpZg0K
WAkJbGktPnF1ZXVlZFtlY2ItPnRhZ1sxXV0gPSBOVUxMOw0KWAkJbGktPnVz
ZWQgLS07DQpYCX0gDQpYDQpYCWlmICgoZWNiLT5mbGFncyAmIEVDQl9SRUFE
WSkgIT0gMCkgew0KWAkJZWNiLT5mbGFncyAmPSB+RUNCX1JFQURZOw0KWAkJ
VEFJTFFfUkVNT1ZFKCZzYy0+cmVhZHlfbGlzdCwgZWNiLCBjaGFpbik7DQpY
CX0NClh9DQpYDQpYLyoNClggKiBJTlRFUlJVUFQvUFJPVE9DT0wgRU5HSU5F
DQpYICovDQpYDQpYLyoNClggKiBTY2hlZHVsZSBhbiBvdXRnb2luZyBtZXNz
YWdlIGJ5IHByaW9yaXRpemluZyBpdCwgYW5kIGFzc2VydGluZw0KWCAqIGF0
dGVudGlvbiBvbiB0aGUgYnVzLiBXZSBjYW4gb25seSBkbyB0aGlzIHdoZW4g
d2UgYXJlIHRoZSBpbml0aWF0b3INClggKiBlbHNlIHRoZXJlIHdpbGwgYmUg
YW4gaWxsZWdhbCBjb21tYW5kIGludGVycnVwdC4NClggKi8NClgjZGVmaW5l
IG5jcjUzYzl4X3NjaGVkX21zZ291dChtKSBcDQpYCWRvIHsJCQkJCQkJXA0K
WAkJTkNSX01JU0MoKCJuY3I1M2M5eF9zY2hlZF9tc2dvdXQgJXggJWQiLCBt
LCBfX0xJTkVfXykpOwlcDQpYCQlOQ1JDTUQoc2MsIE5DUkNNRF9TRVRBVE4p
OwkJCVwNClgJCXNjLT5zY19mbGFncyB8PSBOQ1JfQVROOwkJCVwNClgJCXNj
LT5zY19tc2dwcmlxIHw9IChtKTsJCQkJXA0KWAl9IHdoaWxlICgwKQ0KWA0K
WA0KWA0KWHN0YXRpYyB2b2lkDQpYbmNyNTNjOXhfZmx1c2hmaWZvKHN0cnVj
dCBuY3I1M2M5eF9zb2Z0YyAqc2MpDQpYew0KWAlOQ1JfTUlTQygoIltmbHVz
aGZpZm9dICIpKTsNClgNClgJTkNSQ01EKHNjLCBOQ1JDTURfRkxVU0gpOw0K
WA0KWAlpZiAoc2MtPnNjX3BoYXNlID09IENPTU1BTkRfUEhBU0UgfHwNClgJ
ICAgIHNjLT5zY19waGFzZSA9PSBNRVNTQUdFX09VVF9QSEFTRSkNClgJCURF
TEFZKDIpOw0KWH0NClgNClhzdGF0aWMgaW50DQpYbmNyNTNjOXhfcmRmaWZv
KHN0cnVjdCBuY3I1M2M5eF9zb2Z0YyAqc2MsIGludCBob3cpDQpYew0KWAlp
bnQgaSwgbjsNClgJdV9jaGFyICpidWY7DQpYDQpYCXN3aXRjaChob3cpIHsN
ClgJY2FzZSBOQ1JfUkRGSUZPX1NUQVJUOg0KWAkJYnVmID0gc2MtPnNjX2lt
ZXNzOw0KWAkJc2MtPnNjX2ltbGVuID0gMDsNClgJCWJyZWFrOw0KWAljYXNl
IE5DUl9SREZJRk9fQ09OVElOVUU6DQpYCQlidWYgPSBzYy0+c2NfaW1lc3Mg
KyBzYy0+c2NfaW1sZW47DQpYCQlicmVhazsNClgJZGVmYXVsdDoNClgJCXBh
bmljKCJuY3I1M2M5eF9yZGZpZm86IGJhZCBmbGFnXG4iKTsNClgJCWJyZWFr
Ow0KWAl9DQpYDQpYCS8qDQpYCSAqIFhYWCBidWZmZXIgKHNjX2ltZXNzKSBz
aXplIGZvciBtZXNzYWdlDQpYCSAqLw0KWA0KWAluID0gTkNSX1JFQURfUkVH
KHNjLCBOQ1JfRkZMQUcpICYgTkNSRklGT19GRjsNClgNClgJaWYgKHNjLT5z
Y19yZXYgPT0gTkNSX1ZBUklBTlRfRkFTMzY2KSB7DQpYCQluICo9IDI7DQpY
DQpYCQlmb3IgKGkgPSAwOyBpIDwgbjsgaSsrKQ0KWAkJCWJ1ZltpXSA9IE5D
Ul9SRUFEX1JFRyhzYywgTkNSX0ZJRk8pOw0KWA0KWAkJaWYgKHNjLT5zY19l
c3BzdGF0MiAmIEZBU19TVEFUMl9JU0hVVFRMRSkgew0KWA0KWAkJCU5DUl9X
UklURV9SRUcoc2MsIE5DUl9GSUZPLCAwKTsNClgJCQlidWZbaSsrXSA9IE5D
Ul9SRUFEX1JFRyhzYywgTkNSX0ZJRk8pOw0KWA0KWAkJCU5DUl9SRUFEX1JF
RyhzYywgTkNSX0ZJRk8pOw0KWA0KWAkJCW5jcjUzYzl4X2ZsdXNoZmlmbyhz
Yyk7DQpYCQl9DQpYCX0gZWxzZSB7DQpYCQlmb3IgKGkgPSAwOyBpIDwgbjsg
aSsrKQ0KWAkJCWJ1ZltpXSA9IE5DUl9SRUFEX1JFRyhzYywgTkNSX0ZJRk8p
Ow0KWAl9DQpYDQpYCXNjLT5zY19pbWxlbiArPSBpOw0KWA0KWCNpZmRlZiBO
Q1I1M0M5WF9ERUJVRw0KWCAJew0KWAkJaW50IGo7DQpYDQpYCQlOQ1JfVFJB
Q0UoKCJcbltyZGZpZm8gJXMgKCVkKToiLA0KWAkJICAgIChob3cgPT0gTkNS
X1JERklGT19TVEFSVCkgPyAic3RhcnQiIDogImNvbnQiLA0KWAkJICAgIChp
bnQpc2MtPnNjX2ltbGVuKSk7DQpYCQlpZiAobmNyNTNjOXhfZGVidWcgJiBO
Q1JfU0hPV1RSQUMpIHsNClgJCQlmb3IgKGogPSAwOyBqIDwgc2MtPnNjX2lt
bGVuOyBqKyspDQpYCQkJCXByaW50ZigiICUwMngiLCBzYy0+c2NfaW1lc3Nb
al0pOw0KWAkJCXByaW50ZigiXVxuIik7DQpYCQl9DQpYCX0NClgjZW5kaWYN
ClgJcmV0dXJuIHNjLT5zY19pbWxlbjsNClh9DQpYDQpYc3RhdGljIHZvaWQN
ClhuY3I1M2M5eF93cmZpZm8oc3RydWN0IG5jcjUzYzl4X3NvZnRjICpzYywg
dV9jaGFyICpwLCBpbnQgbGVuKQ0KWHsNClgJaW50IGk7DQpYDQpYI2lmZGVm
IE5DUjUzQzlYX0RFQlVHDQpYCU5DUl9NSVNDKCgiW3dyZmlmbyglZCk6Iiwg
bGVuKSk7DQpYCWlmIChuY3I1M2M5eF9kZWJ1ZyAmIE5DUl9TSE9XVFJBQykg
ew0KWAkJZm9yIChpID0gMDsgaSA8IGxlbjsgaSsrKQ0KWAkJCXByaW50Zigi
ICUwMngiLCBwW2ldKTsNClgJCXByaW50ZigiXVxuIik7DQpYCX0NClgjZW5k
aWYNClgNClgJZm9yIChpID0gMDsgaSA8IGxlbjsgaSsrKSB7DQpYCQlOQ1Jf
V1JJVEVfUkVHKHNjLCBOQ1JfRklGTywgcFtpXSk7DQpYDQpYCQlpZiAoc2Mt
PnNjX3JldiA9PSBOQ1JfVkFSSUFOVF9GQVMzNjYpDQpYCQkJTkNSX1dSSVRF
X1JFRyhzYywgTkNSX0ZJRk8sIDApOw0KWAl9DQpYfQ0KWA0KWGludA0KWG5j
cjUzYzl4X3Jlc2VsZWN0KHNjLCBtZXNzYWdlLCB0YWd0eXBlLCB0YWdpZCkN
ClgJc3RydWN0IG5jcjUzYzl4X3NvZnRjICpzYzsNClgJaW50IG1lc3NhZ2U7
DQpYCWludCB0YWd0eXBlLCB0YWdpZDsNClh7DQpYCXVfY2hhciBzZWxpZCwg
dGFyZ2V0LCBsdW47DQpYCXN0cnVjdCBuY3I1M2M5eF9lY2IgKmVjYiA9IE5V
TEw7DQpYCXN0cnVjdCBuY3I1M2M5eF90aW5mbyAqdGk7DQpYCXN0cnVjdCBu
Y3I1M2M5eF9saW5mbyAqbGk7DQpYDQpYCWlmIChzYy0+c2NfcmV2ID09IE5D
Ul9WQVJJQU5UX0ZBUzM2Nikgew0KWAkJdGFyZ2V0ID0gc2MtPnNjX3NlbGlk
Ow0KWAl9IGVsc2Ugew0KWAkJLyoNClgJCSAqIFRoZSBTQ1NJIGNoaXAgbWFk
ZSBhIHNuYXBzaG90IG9mIHRoZSBkYXRhIGJ1cyB3aGlsZSB0aGUgcmVzZWxl
Y3Rpb24NClgJCSAqIHdhcyBiZWluZyBuZWdvdGlhdGVkLiAgVGhpcyBlbmFi
bGVzIHVzIHRvIGRldGVybWluZSB3aGljaCB0YXJnZXQgZGlkDQpYCQkgKiB0
aGUgcmVzZWxlY3QuDQpYCQkgKi8NClgJCXNlbGlkID0gc2MtPnNjX3NlbGlk
ICYgfigxIDw8IHNjLT5zY19pZCk7DQpYCQlpZiAoc2VsaWQgJiAoc2VsaWQg
LSAxKSkgew0KWAkJCXByaW50ZigiJXM6IHJlc2VsZWN0IHdpdGggaW52YWxp
ZCBzZWxpZCAlMDJ4OyINClgJCQkgICAgIiBzZW5kaW5nIERFVklDRSBSRVNF
VFxuIiwgc2MtPnNjX2Rldi5kdl94bmFtZSwgc2VsaWQpOw0KWAkJCWdvdG8g
cmVzZXQ7DQpYCQl9DQpYDQpYCQl0YXJnZXQgPSBmZnMoc2VsaWQpIC0gMTsN
ClgJfQ0KWAlsdW4gPSBtZXNzYWdlICYgMHgwNzsNClgNClgJLyoNClgJICog
U2VhcmNoIHdhaXQgcXVldWUgZm9yIGRpc2Nvbm5lY3RlZCBjbWQNClgJICog
VGhlIGxpc3Qgc2hvdWxkIGJlIHNob3J0LCBzbyBJIGhhdmVuJ3QgYm90aGVy
ZWQgd2l0aA0KWAkgKiBhbnkgbW9yZSBzb3BoaXN0aWNhdGVkIHN0cnVjdHVy
ZXMgdGhhbiBhIHNpbXBsZQ0KWAkgKiBzaW5nbHkgbGlua2VkIGxpc3QuDQpY
CSAqLw0KWAl0aSA9ICZzYy0+c2NfdGluZm9bdGFyZ2V0XTsNClgJbGkgPSBU
SU5GT19MVU4odGksIGx1bik7DQpYDQpYCS8qDQpYCSAqIFdlIGNhbiBnZXQg
YXMgZmFyIGFzIHRoZSBMVU4gd2l0aCB0aGUgSURFTlRJRlkNClgJICogbWVz
c2FnZS4gIENoZWNrIHRvIHNlZSBpZiB3ZSdyZSBydW5uaW5nIGFuIA0KWAkg
KiB1bi10YWdnZWQgY29tbWFuZC4gIE90aGVyd2lzZSBhY2sgdGhlIElERU5U
SUZZDQpYCSAqIGFuZCB3YWl0IGZvciBhIHRhZyBtZXNzYWdlLg0KWAkgKi8N
ClgJDQpYCWlmIChsaSAhPSBOVUxMKSB7DQpYCQlpZiAobGktPnVudGFnZ2Vk
ICE9IE5VTEwgJiYgbGktPmJ1c3kpDQpYCQkJZWNiID0gbGktPnVudGFnZ2Vk
Ow0KWAkJZWxzZSBpZiAodGFndHlwZSAhPSBNU0dfU0lNUExFX1FfVEFHKSB7
DQpYCQkJLyogV2FpdCBmb3IgdGFnIHRvIGNvbWUgYnkgKi8NClgJCQlzYy0+
c2Nfc3RhdGUgPSBOQ1JfSURFTlRJRklFRDsNClgJCQlyZXR1cm4gKDApOw0K
WAkJfSBlbHNlIGlmICh0YWd0eXBlKQ0KWAkJCWVjYiA9IGxpLT5xdWV1ZWRb
dGFnaWRdOw0KWAl9DQpYCWlmIChlY2IgPT0gTlVMTCkgew0KWAkJcHJpbnRm
KCIlczogcmVzZWxlY3QgZnJvbSB0YXJnZXQgJWQgbHVuICVkIHRhZyAleDol
eCB3aXRoIG5vIG5leHVzOyINClgJCSAgICAiIHNlbmRpbmcgQUJPUlRcbiIs
DQpYCQkJc2MtPnNjX2Rldi5kdl94bmFtZSwgdGFyZ2V0LCBsdW4sIHRhZ3R5
cGUsIHRhZ2lkKTsNClgJCWdvdG8gYWJvcnQ7DQpYCX0NClgNClgJLyogTWFr
ZSB0aGlzIG5leHVzIGFjdGl2ZSBhZ2Fpbi4gKi8NClgJc2MtPnNjX3N0YXRl
ID0gTkNSX0NPTk5FQ1RFRDsNClgJc2MtPnNjX25leHVzID0gZWNiOw0KWAlu
Y3I1M2M5eF9zZXRzeW5jKHNjLCB0aSk7DQpYDQpYCWlmIChlY2ItPmZsYWdz
ICYgRUNCX1JFU0VUKQ0KWAkJbmNyNTNjOXhfc2NoZWRfbXNnb3V0KFNFTkRf
REVWX1JFU0VUKTsNClgJZWxzZSBpZiAoZWNiLT5mbGFncyAmIEVDQl9BQk9S
VCkNClgJCW5jcjUzYzl4X3NjaGVkX21zZ291dChTRU5EX0FCT1JUKTsNClgN
ClgJLyogRG8gYW4gaW1wbGljaXQgUkVTVE9SRSBQT0lOVEVSUy4gKi8NClgJ
c2MtPnNjX2RwID0gZWNiLT5kYWRkcjsNClgJc2MtPnNjX2RsZWZ0ID0gZWNi
LT5kbGVmdDsNClgNClgJcmV0dXJuICgwKTsNClgNClhyZXNldDoNClgJbmNy
NTNjOXhfc2NoZWRfbXNnb3V0KFNFTkRfREVWX1JFU0VUKTsNClgJcmV0dXJu
ICgxKTsNClgNClhhYm9ydDoNClgJbmNyNTNjOXhfc2NoZWRfbXNnb3V0KFNF
TkRfQUJPUlQpOw0KWAlyZXR1cm4gKDEpOw0KWH0NClgNClgjZGVmaW5lIElT
MUJZVEVNU0cobSkgKCgobSkgIT0gMSAmJiAobSkgPCAweDIwKSB8fCAobSkg
JiAweDgwKQ0KWCNkZWZpbmUgSVMyQllURU1TRyhtKSAoKChtKSAmIDB4ZjAp
ID09IDB4MjApDQpYI2RlZmluZSBJU0VYVE1TRyhtKSAoKG0pID09IDEpDQpY
DQpYLyoNClggKiBHZXQgYW4gaW5jb21pbmcgbWVzc2FnZSBhcyBpbml0aWF0
b3IuDQpYICoNClggKiBUaGUgU0NTSSBidXMgbXVzdCBhbHJlYWR5IGJlIGlu
IE1FU1NBR0VfSU5fUEhBU0UgYW5kIHRoZXJlIGlzIGENClggKiBieXRlIGlu
IHRoZSBGSUZPDQpYICovDQpYdm9pZA0KWG5jcjUzYzl4X21zZ2luKHNjKQ0K
WAlzdHJ1Y3QgbmNyNTNjOXhfc29mdGMgKnNjOw0KWHsNClgNClgJTkNSX1RS
QUNFKCgiW25jcjUzYzl4X21zZ2luKGN1cm1zZ2xlbjolbGQpXSAiLCAobG9u
ZylzYy0+c2NfaW1sZW4pKTsNClgNClgJaWYgKHNjLT5zY19pbWxlbiA9PSAw
KSB7DQpYCQlwcmludGYoIiVzOiBtc2dpbjogbm8gbXNnIGJ5dGUgYXZhaWxh
YmxlXG4iLCBzYy0+c2NfZGV2LmR2X3huYW1lKTsNClgJCXJldHVybjsNClgJ
fQ0KWA0KWAkvKg0KWAkgKiBQcmVwYXJlIGZvciBhIG5ldyBtZXNzYWdlLiAg
QSBtZXNzYWdlIHNob3VsZCAoYWNjb3JkaW5nDQpYCSAqIHRvIHRoZSBTQ1NJ
IHN0YW5kYXJkKSBiZSB0cmFuc21pdHRlZCBpbiBvbmUgc2luZ2xlDQpYCSAq
IE1FU1NBR0VfSU5fUEhBU0UuIElmIHdlIGhhdmUgYmVlbiBpbiBzb21lIG90
aGVyIHBoYXNlLA0KWAkgKiB0aGVuIHRoaXMgaXMgYSBuZXcgbWVzc2FnZS4N
ClgJICovDQpYCWlmIChzYy0+c2NfcHJldnBoYXNlICE9IE1FU1NBR0VfSU5f
UEhBU0UpIHsNClgJCXNjLT5zY19mbGFncyAmPSB+TkNSX0RST1BfTVNHSTsN
ClgJCXNjLT5zY19pbWxlbiA9IDA7DQpYCX0NClgNClgJTkNSX1RSQUNFKCgi
PG1zZ2J5dGU6MHglMDJ4PiIsIHNjLT5zY19pbWVzc1swXSkpOw0KWA0KWCNp
ZiAwDQpYCWlmIChzYy0+c2Nfc3RhdGUgPT0gTkNSX1JFU0VMRUNURUQgJiYg
c2MtPnNjX2ltbGVuID09IDApIHsNClgJCS8qDQpYCQkgKiBXaGljaCB0YXJn
ZXQgaXMgcmVzZWxlY3RpbmcgdXM/IChUaGUgSUQgYml0IHJlYWxseSkNClgJ
CSAqLw0KWAkJc2MtPnNjX3NlbGlkID0gdjsNClgJCU5DUl9NSVNDKCgic2Vs
aWQ9MHglMnggIiwgc2MtPnNjX3NlbGlkKSk7DQpYCQlyZXR1cm47DQpYCX0N
ClgjZW5kaWYNClgNClgJLyoNClgJICogSWYgd2UncmUgZ29pbmcgdG8gcmVq
ZWN0IHRoZSBtZXNzYWdlLCBkb24ndCBib3RoZXIgc3RvcmluZw0KWAkgKiB0
aGUgaW5jb21pbmcgYnl0ZXMuICBCdXQgc3RpbGwsIHdlIG5lZWQgdG8gQUNL
IHRoZW0uDQpYCSAqLw0KWA0KWAlpZiAoKHNjLT5zY19mbGFncyAmIE5DUl9E
Uk9QX01TR0kpICE9IDApIHsNClgJCU5DUkNNRChzYywgTkNSQ01EX01TR09L
KTsNClgJCXByaW50ZigiPGRyb3BwaW5nIG1zZyBieXRlICV4PiIsDQpYCQkJ
c2MtPnNjX2ltZXNzW3NjLT5zY19pbWxlbl0pOw0KWAkJcmV0dXJuOw0KWAl9
DQpYDQpYCWlmIChzYy0+c2NfaW1sZW4gPj0gTkNSX01BWF9NU0dfTEVOKSB7
DQpYCQluY3I1M2M5eF9zY2hlZF9tc2dvdXQoU0VORF9SRUpFQ1QpOw0KWAkJ
c2MtPnNjX2ZsYWdzIHw9IE5DUl9EUk9QX01TR0k7DQpYCX0gZWxzZSB7DQpY
DQpYCQkvKg0KWAkJICogaWYgcmVjZWl2ZWQgbWVzc2FnZSBpcyB0aGUgZmly
c3Qgb2YgcmVzZWxlY3Rpb24NClgJCSAqIHRoZW4gZmlyc3QgYnl0ZSBpcyBz
ZWxpZCwgYW5kIHRoZW4gbWVzc2FnZQ0KWAkJICogWFhYIG1lc3NhZ2UgY2hl
Y2sgc2tpcGVkDQpYCQkgKi8NClgJCWlmIChzYy0+c2Nfc3RhdGUgPT0gTkNS
X1JFU0VMRUNURUQpDQpYCQkJZ290byBnb3RpdDsNClgNClgJCS8qDQpYCQkg
KiBUaGlzIHRlc3RpbmcgaXMgc3Vib3B0aW1hbCwgYnV0IG1vc3QNClgJCSAq
IG1lc3NhZ2VzIHdpbGwgYmUgb2YgdGhlIG9uZSBieXRlIHZhcmlldHksIHNv
DQpYCQkgKiBpdCBzaG91bGQgbm90IGVmZmVjdCBwZXJmb3JtYW5jZQ0KWAkJ
ICogc2lnbmlmaWNhbnRseS4NClgJCSAqLw0KWAkJaWYgKHNjLT5zY19pbWxl
biA9PSAxICYmIElTMUJZVEVNU0coc2MtPnNjX2ltZXNzWzBdKSkNClgJCQln
b3RvIGdvdGl0Ow0KWAkJaWYgKHNjLT5zY19pbWxlbiA9PSAyICYmIElTMkJZ
VEVNU0coc2MtPnNjX2ltZXNzWzBdKSkNClgJCQlnb3RvIGdvdGl0Ow0KWAkJ
aWYgKHNjLT5zY19pbWxlbiA+PSAzICYmIElTRVhUTVNHKHNjLT5zY19pbWVz
c1swXSkgJiYNClgJCSAgICBzYy0+c2NfaW1sZW4gPT0gc2MtPnNjX2ltZXNz
WzFdICsgMikNClgJCQlnb3RvIGdvdGl0Ow0KWAl9DQpYCS8qIEFjayB3aGF0
IHdlIGhhdmUgc28gZmFyICovDQpYCU5DUkNNRChzYywgTkNSQ01EX01TR09L
KTsNClgJcmV0dXJuOw0KWA0KWGdvdGl0Og0KWAlOQ1JfTVNHUygoImdvdG1z
ZygleCkiLCBzYy0+c2NfaW1lc3NbMF0pKTsNClgJLyogd2UgZ290IGNvbXBs
ZXRlIG1lc3NhZ2UsIGZsdXNoIHRoZSBpbWVzcywgWFhYIG5vYm9keSB1c2Vz
IGltbGVuIGJlbG93ICovDQpYCXNjLT5zY19pbWxlbiA9IDA7DQpYCS8qDQpY
CSAqIE5vdyB3ZSBzaG91bGQgaGF2ZSBhIGNvbXBsZXRlIG1lc3NhZ2UgKDEg
Ynl0ZSwgMiBieXRlDQpYCSAqIGFuZCBtb2RlcmF0ZWx5IGxvbmcgZXh0ZW5k
ZWQgbWVzc2FnZXMpLiAgV2Ugb25seSBoYW5kbGUNClgJICogZXh0ZW5kZWQg
bWVzc2FnZXMgd2hpY2ggdG90YWwgbGVuZ3RoIGlzIHNob3J0ZXIgdGhhbg0K
WAkgKiBOQ1JfTUFYX01TR19MRU4uICBMb25nZXIgbWVzc2FnZXMgd2lsbCBi
ZSBhbXB1dGF0ZWQuDQpYCSAqLw0KWAlzd2l0Y2ggKHNjLT5zY19zdGF0ZSkg
ew0KWAkJc3RydWN0IG5jcjUzYzl4X2VjYiAqZWNiOw0KWAkJc3RydWN0IG5j
cjUzYzl4X3RpbmZvICp0aTsNClgJCXN0cnVjdCBuY3I1M2M5eF9saW5mbyAq
bGk7DQpYCQlpbnQgbHVuOw0KWA0KWAljYXNlIE5DUl9DT05ORUNURUQ6DQpY
CQllY2IgPSBzYy0+c2NfbmV4dXM7DQpYCQl0aSA9ICZzYy0+c2NfdGluZm9b
ZWNiLT54cy0+c2NfbGluay0+c2NzaXBpX3Njc2kudGFyZ2V0XTsNClgNClgJ
CXN3aXRjaCAoc2MtPnNjX2ltZXNzWzBdKSB7DQpYCQljYXNlIE1TR19DTURD
T01QTEVURToNClgJCQlOQ1JfTVNHUygoImNtZGNvbXBsZXRlICIpKTsNClgJ
CQlpZiAoc2MtPnNjX2RsZWZ0IDwgMCkgew0KWAkJCQlzY3NpX3ByaW50X2Fk
ZHIoZWNiLT54cy0+c2NfbGluayk7DQpYCQkJCXByaW50ZigiZ290ICVsZCBl
eHRyYSBieXRlc1xuIiwNClgJCQkJICAgICAgIC0obG9uZylzYy0+c2NfZGxl
ZnQpOw0KWAkJCQlzYy0+c2NfZGxlZnQgPSAwOw0KWAkJCX0NClgJCQllY2It
PmRsZWZ0ID0gKGVjYi0+ZmxhZ3MgJiBFQ0JfVEVOVEFUSVZFX0RPTkUpDQpY
CQkJCT8gMA0KWAkJCQk6IHNjLT5zY19kbGVmdDsNClgJCQlpZiAoKGVjYi0+
ZmxhZ3MgJiBFQ0JfU0VOU0UpID09IDApDQpYCQkJCWVjYi0+eHMtPnJlc2lk
ID0gZWNiLT5kbGVmdDsNClgJCQlzYy0+c2Nfc3RhdGUgPSBOQ1JfQ01EQ09N
UExFVEU7DQpYCQkJYnJlYWs7DQpYDQpYCQljYXNlIE1TR19NRVNTQUdFX1JF
SkVDVDoNClgJCQlOQ1JfTVNHUygoIm1zZyByZWplY3QgKG1zZ291dD0leCkg
Iiwgc2MtPnNjX21zZ291dCkpOw0KWAkJCXN3aXRjaCAoc2MtPnNjX21zZ291
dCkgew0KWAkJCWNhc2UgU0VORF9UQUc6DQpYCQkJCS8qDQpYCQkJCSAqIFRh
cmdldCBkb2VzIG5vdCBsaWtlIHRhZ2dlZCBxdWV1aW5nLg0KWAkJCQkgKiAg
LSBGbHVzaCB0aGUgY29tbWFuZCBxdWV1ZQ0KWAkJCQkgKiAgLSBEaXNhYmxl
IHRhZ2dlZCBxdWV1aW5nIGZvciB0aGUgdGFyZ2V0DQpYCQkJCSAqICAtIERl
cXVldWUgZWNiIGZyb20gdGhlIHF1ZXVlZCBhcnJheS4NClgJCQkJICovDQpY
CQkJCU5DUl9NU0dTKCgiKHJlamVjdGVkIHNlbnQgdGFnKSIpKTsNClgJCQkJ
TkNSQ01EKHNjLCBOQ1JDTURfRkxVU0gpOw0KWAkJCQlERUxBWSgxKTsNClgJ
CQkJdGktPmZsYWdzICY9IH5UX1RBRzsNClgJCQkJbHVuID0gZWNiLT54cy0+
c2NfbGluay0+c2NzaXBpX3Njc2kubHVuOw0KWAkJCQlsaSA9IFRJTkZPX0xV
Tih0aSwgbHVuKTsNClgJCQkJaWYgKGVjYi0+dGFnWzBdICYmDQpYCQkJCSAg
ICBsaS0+cXVldWVkW2VjYi0+dGFnWzFdXSAhPSBOVUxMKSB7DQpYCQkJCQls
aS0+cXVldWVkW2VjYi0+dGFnWzFdXSA9IE5VTEw7DQpYCQkJCQlsaS0+dXNl
ZCAtLTsNClgJCQkJfQ0KWAkJCQllY2ItPnRhZ1swXSA9IGVjYi0+dGFnWzFd
ID0gMDsNClgJCQkJbGktPnVudGFnZ2VkID0gZWNiOw0KWAkJCQlsaS0+YnVz
eSA9IDE7DQpYCQkJCWJyZWFrOw0KWA0KWAkJCWNhc2UgU0VORF9TRFRSOg0K
WAkJCQlzYy0+c2NfZmxhZ3MgJj0gfk5DUl9TWU5DSE5FR087DQpYCQkJCXRp
LT5mbGFncyAmPSB+KFRfTkVHT1RJQVRFIHwgVF9TWU5DTU9ERSk7DQpYCQkJ
CW5jcjUzYzl4X3NldHN5bmMoc2MsIHRpKTsNClgJCQkJYnJlYWs7DQpYDQpY
CQkJY2FzZSBTRU5EX1dEVFI6DQpYCQkJCXRpLT5mbGFncyAmPSB+VF9XSURF
Ow0KWAkJCQlicmVhazsNClgNClgJCQljYXNlIFNFTkRfSU5JVF9ERVRfRVJS
Og0KWAkJCQlnb3RvIGFib3J0Ow0KWAkJCX0NClgJCQlicmVhazsNClgNClgJ
CWNhc2UgTVNHX05PT1A6DQpYCQkJTkNSX01TR1MoKCJub29wICIpKTsNClgJ
CQlicmVhazsNClgNClgJCWNhc2UgTVNHX0hFQURfT0ZfUV9UQUc6DQpYCQlj
YXNlIE1TR19TSU1QTEVfUV9UQUc6DQpYCQljYXNlIE1TR19PUkRFUkVEX1Ff
VEFHOg0KWAkJCU5DUl9NU0dTKCgiVEFHICV4OiV4Iiwgc2MtPnNjX2ltZXNz
WzBdLCBzYy0+c2NfaW1lc3NbMV0pKTsNClgJCQlicmVhazsNClgNClgJCWNh
c2UgTVNHX0RJU0NPTk5FQ1Q6DQpYCQkJTkNSX01TR1MoKCJkaXNjb25uZWN0
ICIpKTsNClgJCQl0aS0+ZGNvbm5zKys7DQpYCQkJc2MtPnNjX3N0YXRlID0g
TkNSX0RJU0NPTk5FQ1Q7DQpYDQpYCQkJLyoNClgJCQkgKiBNYXJrIHRoZSBm
YWN0IHRoYXQgYWxsIGJ5dGVzIGhhdmUgbW92ZWQuIFRoZQ0KWAkJCSAqIHRh
cmdldCBtYXkgbm90IGJvdGhlciB0byBkbyBhIFNBVkUgUE9JTlRFUlMNClgJ
CQkgKiBhdCB0aGlzIHN0YWdlLiBUaGlzIGZsYWcgd2lsbCBzZXQgdGhlIHJl
c2lkdWFsDQpYCQkJICogY291bnQgdG8gemVybyBvbiBNU0cgQ09NUExFVEUu
DQpYCQkJICovDQpYCQkJaWYgKHNjLT5zY19kbGVmdCA9PSAwKQ0KWAkJCQll
Y2ItPmZsYWdzIHw9IEVDQl9URU5UQVRJVkVfRE9ORTsNClgNClgJCQlicmVh
azsNClgNClgJCWNhc2UgTVNHX1NBVkVEQVRBUE9JTlRFUjoNClgJCQlOQ1Jf
TVNHUygoInNhdmUgZGF0YXBvaW50ZXIgIikpOw0KWAkJCWVjYi0+ZGFkZHIg
PSBzYy0+c2NfZHA7DQpYCQkJZWNiLT5kbGVmdCA9IHNjLT5zY19kbGVmdDsN
ClgJCQlicmVhazsNClgNClgJCWNhc2UgTVNHX1JFU1RPUkVQT0lOVEVSUzoN
ClgJCQlOQ1JfTVNHUygoInJlc3RvcmUgZGF0YXBvaW50ZXIgIikpOw0KWAkJ
CXNjLT5zY19kcCA9IGVjYi0+ZGFkZHI7DQpYCQkJc2MtPnNjX2RsZWZ0ID0g
ZWNiLT5kbGVmdDsNClgJCQlicmVhazsNClgNClgJCWNhc2UgTVNHX0VYVEVO
REVEOg0KWAkJCU5DUl9NU0dTKCgiZXh0ZW5kZWQoJXgpICIsIHNjLT5zY19p
bWVzc1syXSkpOw0KWAkJCXN3aXRjaCAoc2MtPnNjX2ltZXNzWzJdKSB7DQpY
CQkJY2FzZSBNU0dfRVhUX1NEVFI6DQpYCQkJCU5DUl9NU0dTKCgiU0RUUiBw
ZXJpb2QgJWQsIG9mZnNldCAlZCAiLA0KWAkJCQkJc2MtPnNjX2ltZXNzWzNd
LCBzYy0+c2NfaW1lc3NbNF0pKTsNClgJCQkJaWYgKHNjLT5zY19pbWVzc1sx
XSAhPSAzKQ0KWAkJCQkJZ290byByZWplY3Q7DQpYCQkJCXRpLT5wZXJpb2Qg
PSBzYy0+c2NfaW1lc3NbM107DQpYCQkJCXRpLT5vZmZzZXQgPSBzYy0+c2Nf
aW1lc3NbNF07DQpYCQkJCXRpLT5mbGFncyAmPSB+VF9ORUdPVElBVEU7DQpY
CQkJCWlmIChzYy0+c2NfbWluc3luYyA9PSAwIHx8DQpYCQkJCSAgICB0aS0+
b2Zmc2V0ID09IDAgfHwNClgJCQkJICAgIHRpLT5wZXJpb2QgPiAxMjQpIHsN
ClgjaWZkZWYgTkNSNTNDOVhfREVCVUcNClgJCQkJCXNjc2lfcHJpbnRfYWRk
cihlY2ItPnhzLT5zY19saW5rKTsNClgJCQkJCXByaW50ZigiYXN5bmMgbW9k
ZVxuIik7DQpYI2VuZGlmDQpYCQkJCQlpZiAoKHNjLT5zY19mbGFncyZOQ1Jf
U1lOQ0hORUdPKSA9PSAwKSB7DQpYCQkJCQkJLyoNClgJCQkJCQkgKiB0YXJn
ZXQgaW5pdGlhdGVkIG5lZ290aWF0aW9uDQpYCQkJCQkJICovDQpYCQkJCQkJ
dGktPm9mZnNldCA9IDA7DQpYCQkJCQkJdGktPmZsYWdzICY9IH5UX1NZTkNN
T0RFOw0KWAkJCQkJCW5jcjUzYzl4X3NjaGVkX21zZ291dCgNClgJCQkJCQkg
ICAgU0VORF9TRFRSKTsNClgJCQkJCX0gZWxzZSB7DQpYCQkJCQkJLyogd2Ug
YXJlIGFzeW5jICovDQpYCQkJCQkJdGktPmZsYWdzICY9IH5UX1NZTkNNT0RF
Ow0KWAkJCQkJfQ0KWAkJCQl9IGVsc2Ugew0KWAkJCQkJaW50IHIgPSAyNTAv
dGktPnBlcmlvZDsNClgJCQkJCWludCBzID0gKDEwMCoyNTApL3RpLT5wZXJp
b2QgLSAxMDAqcjsNClgJCQkJCWludCBwOw0KWA0KWAkJCQkJcCA9IG5jcjUz
Yzl4X3N0cDJjcGIoc2MsIHRpLT5wZXJpb2QpOw0KWAkJCQkJdGktPnBlcmlv
ZCA9IG5jcjUzYzl4X2NwYjJzdHAoc2MsIHApOw0KWCNpZmRlZiBOQ1I1M0M5
WF9ERUJVRw0KWAkJCQkJc2NzaV9wcmludF9hZGRyKGVjYi0+eHMtPnNjX2xp
bmspOw0KWAkJCQkJcHJpbnRmKCJtYXggc3luYyByYXRlICVkLiUwMmRNQi9z
XG4iLA0KWAkJCQkJCXIsIHMpOw0KWCNlbmRpZg0KWAkJCQkJaWYgKChzYy0+
c2NfZmxhZ3MmTkNSX1NZTkNITkVHTykgPT0gMCkgew0KWAkJCQkJCS8qDQpY
CQkJCQkJICogdGFyZ2V0IGluaXRpYXRlZCBuZWdvdGlhdGlvbg0KWAkJCQkJ
CSAqLw0KWAkJCQkJCWlmICh0aS0+cGVyaW9kIDwNClgJCQkJCQkgICAgc2Mt
PnNjX21pbnN5bmMpDQpYCQkJCQkJCXRpLT5wZXJpb2QgPQ0KWAkJCQkJCQkg
ICAgc2MtPnNjX21pbnN5bmM7DQpYCQkJCQkJaWYgKHRpLT5vZmZzZXQgPiAx
NSkNClgJCQkJCQkJdGktPm9mZnNldCA9IDE1Ow0KWAkJCQkJCXRpLT5mbGFn
cyAmPSB+VF9TWU5DTU9ERTsNClgJCQkJCQluY3I1M2M5eF9zY2hlZF9tc2dv
dXQoDQpYCQkJCQkJICAgIFNFTkRfU0RUUik7DQpYCQkJCQl9IGVsc2Ugew0K
WAkJCQkJCS8qIHdlIGFyZSBzeW5jICovDQpYCQkJCQkJdGktPmZsYWdzIHw9
IFRfU1lOQ01PREU7DQpYCQkJCQl9DQpYCQkJCX0NClgJCQkJc2MtPnNjX2Zs
YWdzICY9IH5OQ1JfU1lOQ0hORUdPOw0KWAkJCQluY3I1M2M5eF9zZXRzeW5j
KHNjLCB0aSk7DQpYCQkJCWJyZWFrOw0KWA0KWAkJCWNhc2UgTVNHX0VYVF9X
RFRSOg0KWAkJCQlwcmludGYoIiVzOiB3aWRlIG1vZGUgJWRcbiIsDQpYCQkJ
CSAgICBzYy0+c2NfZGV2LmR2X3huYW1lLCBzYy0+c2NfaW1lc3NbM10pOw0K
WAkJCQlpZiAoc2MtPnNjX2ltZXNzWzNdID09IDEpIHsNClgJCQkJCXRpLT5j
ZmczIHw9IE5DUkZBU0NGRzNfRVdJREU7DQpYCQkJCQluY3I1M2M5eF9zZXRz
eW5jKHNjLCB0aSk7DQpYCQkJCX0NClgJCQkJdGktPmZsYWdzICY9IH5UX1dJ
REU7DQpYCQkJCWJyZWFrOw0KWAkJCWRlZmF1bHQ6DQpYCQkJCXNjc2lfcHJp
bnRfYWRkcihlY2ItPnhzLT5zY19saW5rKTsNClgJCQkJcHJpbnRmKCJ1bnJl
Y29nbml6ZWQgTUVTU0FHRSBFWFRFTkRFRDsiDQpYCQkJCSAgICAgICAiIHNl
bmRpbmcgUkVKRUNUXG4iKTsNClgJCQkJZ290byByZWplY3Q7DQpYCQkJfQ0K
WAkJCWJyZWFrOw0KWA0KWAkJZGVmYXVsdDoNClgJCQlOQ1JfTVNHUygoImlk
ZW50ICIpKTsNClgJCQlzY3NpX3ByaW50X2FkZHIoZWNiLT54cy0+c2NfbGlu
ayk7DQpYCQkJcHJpbnRmKCJ1bnJlY29nbml6ZWQgTUVTU0FHRTsgc2VuZGlu
ZyBSRUpFQ1RcbiIpOw0KWAkJcmVqZWN0Og0KWAkJCW5jcjUzYzl4X3NjaGVk
X21zZ291dChTRU5EX1JFSkVDVCk7DQpYCQkJYnJlYWs7DQpYCQl9DQpYCQli
cmVhazsNClgNClgJY2FzZSBOQ1JfUkVTRUxFQ1RFRDoNClgJY2FzZSBOQ1Jf
SURFTlRJRklFRDoNClgJCWlmIChNU0dfSVNJREVOVElGWShzYy0+c2NfaW1l
c3NbMV0pKSB7DQpYCQkJc2MtPnNjX21zZ2lmeSA9IHNjLT5zY19pbWVzc1sx
XTsNClgJCX0gZWxzZSBpZiAoc2MtPnNjX2ltZXNzWzFdID09IE1TR19TSU1Q
TEVfUV9UQUcpIHsNClgJCQlpZiAoc2MtPnNjX21zZ2lmeSA9PSAwKSB7DQpY
CQkJCXByaW50ZigiJXM6IFRBRyByZXNlbGVjdCB3aXRob3V0IElERU5USUZZ
OyINClgJCQkJICAgICAgICIgTVNHICV4OyINClgJCQkJICAgICAgICIgc2Vu
ZGluZyBERVZJQ0UgUkVTRVRcbiIsDQpYCQkJCSAgICAgICBzYy0+c2NfZGV2
LmR2X3huYW1lLA0KWAkJCQkgICAgICAgc2MtPnNjX2ltZXNzWzFdKTsNClgJ
CQkJZ290byByZXNldDsNClgJCQl9DQpYCQl9IGVsc2Ugew0KWAkJCXByaW50
ZigiJXM6IHJlc2VsZWN0IHdpdGhvdXQgSURFTlRJRlk7Ig0KWAkJCSAgICAg
ICAiIE1TRyAleDsiDQpYCQkJICAgICAgICIgc2VuZGluZyBERVZJQ0UgUkVT
RVRcbiIsDQpYCQkJICAgICAgIHNjLT5zY19kZXYuZHZfeG5hbWUsDQpYCQkJ
ICAgICAgIHNjLT5zY19pbWVzc1sxXSk7DQpYCQkJZ290byByZXNldDsNClgJ
CX0NClgNClgJCSh2b2lkKSBuY3I1M2M5eF9yZXNlbGVjdChzYywgc2MtPnNj
X21zZ2lmeSwgDQpYCQkJCQkgc2MtPnNjX2ltZXNzWzFdLCANClgJCQkJCSBz
Yy0+c2NfaW1lc3NbMl0pOw0KWAkJYnJlYWs7DQpYDQpYCWRlZmF1bHQ6DQpY
CQlwcmludGYoIiVzOiB1bmV4cGVjdGVkIE1FU1NBR0UgSU47IHNlbmRpbmcg
REVWSUNFIFJFU0VUXG4iLA0KWAkJCXNjLT5zY19kZXYuZHZfeG5hbWUpOw0K
WAlyZXNldDoNClgJCW5jcjUzYzl4X3NjaGVkX21zZ291dChTRU5EX0RFVl9S
RVNFVCk7DQpYCQlicmVhazsNClgNClgJYWJvcnQ6DQpYCQluY3I1M2M5eF9z
Y2hlZF9tc2dvdXQoU0VORF9BQk9SVCk7DQpYCQlicmVhazsNClgJfQ0KWA0K
WAkvKiBpZiB3ZSBoYXZlIG1vcmUgbWVzc2FnZXMgdG8gc2VuZCBzZXQgQVRO
ICovDQpYCWlmIChzYy0+c2NfbXNncHJpcSkgTkNSQ01EKHNjLCBOQ1JDTURf
U0VUQVROKTsNClgNClgJLyogQWNrIGxhc3QgbWVzc2FnZSBieXRlICovDQpY
CU5DUkNNRChzYywgTkNSQ01EX01TR09LKTsNClgNClgJLyogRG9uZSwgcmVz
ZXQgbWVzc2FnZSBwb2ludGVyLiAqLw0KWAlzYy0+c2NfZmxhZ3MgJj0gfk5D
Ul9EUk9QX01TR0k7DQpYCXNjLT5zY19pbWxlbiA9IDA7DQpYfQ0KWA0KWA0K
WC8qDQpYICogU2VuZCB0aGUgaGlnaGVzdCBwcmlvcml0eSwgc2NoZWR1bGVk
IG1lc3NhZ2UNClggKi8NClh2b2lkDQpYbmNyNTNjOXhfbXNnb3V0KHNjKQ0K
WAlzdHJ1Y3QgbmNyNTNjOXhfc29mdGMgKnNjOw0KWHsNClgJc3RydWN0IG5j
cjUzYzl4X3RpbmZvICp0aTsNClgJc3RydWN0IG5jcjUzYzl4X2VjYiAqZWNi
Ow0KWAlzaXplX3Qgc2l6ZTsNClgNClgJTkNSX1RSQUNFKCgiW25jcjUzYzl4
X21zZ291dChwcmlxOiV4LCBwcmV2cGhhc2U6JXgpXSIsDQpYCSAgICBzYy0+
c2NfbXNncHJpcSwgc2MtPnNjX3ByZXZwaGFzZSkpOw0KWA0KWAkvKg0KWAkg
KiBYWFggLSB0aGUgTkNSX0FUTiBmbGFnIGlzIG5vdCBpbiBzeW5jIHdpdGgg
dGhlIGFjdHVhbCBBVE4NClgJICoJIGNvbmRpdGlvbiBvbiB0aGUgU0NTSSBi
dXMuIFRoZSA1M2M5eCBjaGlwDQpYCSAqCSBhdXRvbWF0aWNhbGx5IHR1cm5z
IG9mZiBBVE4gYmVmb3JlIHNlbmRpbmcgdGhlDQpYCSAqCSBtZXNzYWdlIGJ5
dGUuICAoc2VlIGFsc28gdGhlIGNvbW1lbnQgYmVsb3cgaW4gdGhlDQpYCSAq
CSBkZWZhdWx0IGNhc2Ugd2hlbiBwaWNraW5nIG91dCBhIG1lc3NhZ2UgdG8g
c2VuZCkNClgJICovDQpYCWlmIChzYy0+c2NfZmxhZ3MgJiBOQ1JfQVROKSB7
DQpYCQlpZiAoc2MtPnNjX3ByZXZwaGFzZSAhPSBNRVNTQUdFX09VVF9QSEFT
RSkgew0KWAkJbmV3Og0KWAkJCU5DUkNNRChzYywgTkNSQ01EX0ZMVVNIKTsN
ClgvKgkJCURFTEFZKDEpOyAqLw0KWAkJCXNjLT5zY19tc2dvdXRxID0gMDsN
ClgJCQlzYy0+c2Nfb21sZW4gPSAwOw0KWAkJfQ0KWAl9IGVsc2Ugew0KWAkJ
aWYgKHNjLT5zY19wcmV2cGhhc2UgPT0gTUVTU0FHRV9PVVRfUEhBU0UpIHsN
ClgJCQluY3I1M2M5eF9zY2hlZF9tc2dvdXQoc2MtPnNjX21zZ291dHEpOw0K
WAkJCWdvdG8gbmV3Ow0KWAkJfSBlbHNlIHsNClgJCQlwcmludGYoIiVzIGF0
IGxpbmUgJWQ6IHVuZXhwZWN0ZWQgTUVTU0FHRSBPVVQgcGhhc2VcbiIsDQpY
CQkJICAgIHNjLT5zY19kZXYuZHZfeG5hbWUsIF9fTElORV9fKTsNClgJCX0N
ClgJfQ0KWAkJCQ0KWAlpZiAoc2MtPnNjX29tbGVuID09IDApIHsNClgJCS8q
IFBpY2sgdXAgaGlnaGVzdCBwcmlvcml0eSBtZXNzYWdlICovDQpYCQlzYy0+
c2NfbXNnb3V0ID0gc2MtPnNjX21zZ3ByaXEgJiAtc2MtPnNjX21zZ3ByaXE7
DQpYCQlzYy0+c2NfbXNnb3V0cSB8PSBzYy0+c2NfbXNnb3V0Ow0KWAkJc2Mt
PnNjX21zZ3ByaXEgJj0gfnNjLT5zY19tc2dvdXQ7DQpYCQlzYy0+c2Nfb21s
ZW4gPSAxOwkJLyogIkRlZmF1bHQiIG1lc3NhZ2UgbGVuICovDQpYCQlzd2l0
Y2ggKHNjLT5zY19tc2dvdXQpIHsNClgJCWNhc2UgU0VORF9TRFRSOg0KWAkJ
CWVjYiA9IHNjLT5zY19uZXh1czsNClgJCQl0aSA9ICZzYy0+c2NfdGluZm9b
ZWNiLT54cy0+c2NfbGluay0+c2NzaXBpX3Njc2kudGFyZ2V0XTsNClgJCQlz
Yy0+c2Nfb21lc3NbMF0gPSBNU0dfRVhURU5ERUQ7DQpYCQkJc2MtPnNjX29t
ZXNzWzFdID0gMzsNClgJCQlzYy0+c2Nfb21lc3NbMl0gPSBNU0dfRVhUX1NE
VFI7DQpYCQkJc2MtPnNjX29tZXNzWzNdID0gdGktPnBlcmlvZDsNClgJCQlz
Yy0+c2Nfb21lc3NbNF0gPSB0aS0+b2Zmc2V0Ow0KWAkJCXNjLT5zY19vbWxl
biA9IDU7DQpYCQkJaWYgKChzYy0+c2NfZmxhZ3MgJiBOQ1JfU1lOQ0hORUdP
KSA9PSAwKSB7DQpYCQkJCXRpLT5mbGFncyB8PSBUX1NZTkNNT0RFOw0KWAkJ
CQluY3I1M2M5eF9zZXRzeW5jKHNjLCB0aSk7DQpYCQkJfQ0KWAkJCWJyZWFr
Ow0KWAkJY2FzZSBTRU5EX1dEVFI6DQpYCQkJZWNiID0gc2MtPnNjX25leHVz
Ow0KWAkJCXRpID0gJnNjLT5zY190aW5mb1tlY2ItPnhzLT5zY19saW5rLT5z
Y3NpcGlfc2NzaS50YXJnZXRdOw0KWAkJCXNjLT5zY19vbWVzc1swXSA9IE1T
R19FWFRFTkRFRDsNClgJCQlzYy0+c2Nfb21lc3NbMV0gPSAyOw0KWAkJCXNj
LT5zY19vbWVzc1syXSA9IE1TR19FWFRfV0RUUjsNClgJCQlzYy0+c2Nfb21l
c3NbM10gPSB0aS0+d2lkdGg7DQpYCQkJc2MtPnNjX29tbGVuID0gNDsNClgJ
CQlicmVhazsNClggICAgICAgICAgICAgICAgY2FzZSBTRU5EX0lERU5USUZZ
Og0KWCAgICAgICAgICAgICAgICAgICAgICAgIGlmIChzYy0+c2Nfc3RhdGUg
IT0gTkNSX0NPTk5FQ1RFRCkgew0KWCAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgcHJpbnRmKCIlcyBhdCBsaW5lICVkOiBubyBuZXh1c1xuIiwN
ClggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzYy0+c2Nf
ZGV2LmR2X3huYW1lLCBfX0xJTkVfXyk7DQpYICAgICAgICAgICAgICAgICAg
ICAgICAgfQ0KWCAgICAgICAgICAgICAgICAgICAgICAgIGVjYiA9IHNjLT5z
Y19uZXh1czsNClggICAgICAgICAgICAgICAgICAgICAgICBzYy0+c2Nfb21l
c3NbMF0gPQ0KWCAgICAgICAgICAgICAgICAgICAgICAgICAgICBNU0dfSURF
TlRJRlkoZWNiLT54cy0+c2NfbGluay0+c2NzaXBpX3Njc2kubHVuLCAwKTsN
ClggICAgICAgICAgICAgICAgICAgICAgICBicmVhazsNClgJCWNhc2UgU0VO
RF9UQUc6DQpYCQkJaWYgKHNjLT5zY19zdGF0ZSAhPSBOQ1JfQ09OTkVDVEVE
KSB7DQpYCQkJCXByaW50ZigiJXMgYXQgbGluZSAlZDogbm8gbmV4dXNcbiIs
DQpYCQkJCSAgICBzYy0+c2NfZGV2LmR2X3huYW1lLCBfX0xJTkVfXyk7DQpY
CQkJfQ0KWAkJCWVjYiA9IHNjLT5zY19uZXh1czsNClgJCQlzYy0+c2Nfb21l
c3NbMF0gPSBlY2ItPnRhZ1swXTsNClgJCQlzYy0+c2Nfb21lc3NbMV0gPSBl
Y2ItPnRhZ1sxXTsNClgJCQlzYy0+c2Nfb21sZW4gPSAyOw0KWAkJCWJyZWFr
Ow0KWAkJY2FzZSBTRU5EX0RFVl9SRVNFVDoNClgJCQlzYy0+c2NfZmxhZ3Mg
fD0gTkNSX0FCT1JUSU5HOw0KWAkJCXNjLT5zY19vbWVzc1swXSA9IE1TR19C
VVNfREVWX1JFU0VUOw0KWAkJCWVjYiA9IHNjLT5zY19uZXh1czsNClgJCQl0
aSA9ICZzYy0+c2NfdGluZm9bZWNiLT54cy0+c2NfbGluay0+c2NzaXBpX3Nj
c2kudGFyZ2V0XTsNClgJCQl0aS0+ZmxhZ3MgJj0gflRfU1lOQ01PREU7DQpY
CQkJaWYgKCh0aS0+ZmxhZ3MgJiBUX1NZTkNIT0ZGKSA9PSAwKQ0KWAkJCQkv
KiBXZSBjYW4gcmUtc3RhcnQgc3luYyBuZWdvdGlhdGlvbiAqLw0KWAkJCQl0
aS0+ZmxhZ3MgfD0gVF9ORUdPVElBVEU7DQpYCQkJYnJlYWs7DQpYCQljYXNl
IFNFTkRfUEFSSVRZX0VSUk9SOg0KWAkJCXNjLT5zY19vbWVzc1swXSA9IE1T
R19QQVJJVFlfRVJST1I7DQpYCQkJYnJlYWs7DQpYCQljYXNlIFNFTkRfQUJP
UlQ6DQpYCQkJc2MtPnNjX2ZsYWdzIHw9IE5DUl9BQk9SVElORzsNClgJCQlz
Yy0+c2Nfb21lc3NbMF0gPSBNU0dfQUJPUlQ7DQpYCQkJYnJlYWs7DQpYCQlj
YXNlIFNFTkRfSU5JVF9ERVRfRVJSOg0KWAkJCXNjLT5zY19vbWVzc1swXSA9
IE1TR19JTklUSUFUT1JfREVUX0VSUjsNClgJCQlicmVhazsNClgJCWNhc2Ug
U0VORF9SRUpFQ1Q6DQpYCQkJc2MtPnNjX29tZXNzWzBdID0gTVNHX01FU1NB
R0VfUkVKRUNUOw0KWAkJCWJyZWFrOw0KWAkJZGVmYXVsdDoNClgJCQkvKg0K
WAkJCSAqIFdlIG5vcm1hbGx5IGRvIG5vdCBnZXQgaGVyZSwgc2luY2UgdGhl
IGNoaXANClgJCQkgKiBhdXRvbWF0aWNhbGx5IHR1cm5zIG9mZiBBVE4gYmVm
b3JlIHRoZSBsYXN0DQpYCQkJICogYnl0ZSBvZiBhIG1lc3NhZ2UgaXMgc2Vu
dCB0byB0aGUgdGFyZ2V0Lg0KWAkJCSAqIEhvd2V2ZXIsIGlmIHRoZSB0YXJn
ZXQgcmVqZWN0cyBvdXIgKG11bHRpLWJ5dGUpDQpYCQkJICogbWVzc2FnZSBl
YXJseSBieSBzd2l0Y2hpbmcgdG8gTVNHIElOIHBoYXNlDQpYCQkJICogQVRO
IHJlbWFpbnMgb24sIHNvIHRoZSB0YXJnZXQgbWF5IHJldHVybiB0bw0KWAkJ
CSAqIE1TRyBPVVQgcGhhc2UuIElmIHRoZXJlIGFyZSBubyBzY2hlZHVsZWQg
bWVzc2FnZXMNClgJCQkgKiBsZWZ0IHdlIHNlbmQgYSBOTy1PUC4NClgJCQkg
Kg0KWAkJCSAqIFhYWCAtIE5vdGUgdGhhdCB0aGlzIGxlYXZlcyBubyB1c2Vm
dWwgcHVycG9zZSBmb3INClgJCQkgKiB0aGUgTkNSX0FUTiBmbGFnLg0KWAkJ
CSAqLw0KWAkJCXNjLT5zY19mbGFncyAmPSB+TkNSX0FUTjsNClgJCQlzYy0+
c2Nfb21lc3NbMF0gPSBNU0dfTk9PUDsNClgJCQlicmVhazsNClgJCX0NClgJ
CXNjLT5zY19vbXAgPSBzYy0+c2Nfb21lc3M7DQpYCX0NClgNClgjaWZkZWYg
REVCVUcNClgJew0KWAkJaW50IGk7DQpYCQkNClgJCU5DUl9NSVNDKCgiPG1z
Z291dDoiKSk7DQpYCQlmb3IgKGkgPSAwOyBpIDwgc2MtPnNjX29tbGVuOyBp
KyspIA0KWAkJCU5DUl9NSVNDKCgiICUwMngiLCBzYy0+c2Nfb21lc3NbaV0p
KTsNClgJCU5DUl9NSVNDKCgiPiAiKSk7DQpYCX0NClgjZW5kaWYNClgJaWYg
KHNjLT5zY19yZXYgPT0gTkNSX1ZBUklBTlRfRkFTMzY2KSB7DQpYCQkvKgkN
ClgJCSAqIFhYWCBmaWZvIHNpemUNClgJCSAqLw0KWAkJbmNyNTNjOXhfZmx1
c2hmaWZvKHNjKTsNClgJCW5jcjUzYzl4X3dyZmlmbyhzYywgc2MtPnNjX29t
cCwgc2MtPnNjX29tbGVuKTsNClgJCU5DUkNNRChzYywgTkNSQ01EX1RSQU5T
KTsNClgJfSBlbHNlIHsNClgJCS8qIChyZSlzZW5kIHRoZSBtZXNzYWdlICov
DQpYCQlzaXplID0gbWluKHNjLT5zY19vbWxlbiwgc2MtPnNjX21heHhmZXIp
Ow0KWAkJTkNSRE1BX1NFVFVQKHNjLCAmc2MtPnNjX29tcCwgJnNjLT5zY19v
bWxlbiwgMCwgJnNpemUpOw0KWAkJLyogUHJvZ3JhbSB0aGUgU0NTSSBjb3Vu
dGVyICovDQpYCQlOQ1JfU0VUX0NPVU5UKHNjLCBzaXplKTsNClgNClgJCS8q
IExvYWQgdGhlIGNvdW50IGluIGFuZCBzdGFydCB0aGUgbWVzc2FnZS1vdXQg
dHJhbnNmZXIgKi8NClgJCU5DUkNNRChzYywgTkNSQ01EX05PUHxOQ1JDTURf
RE1BKTsNClgJCU5DUkNNRChzYywgTkNSQ01EX1RSQU5TfE5DUkNNRF9ETUEp
Ow0KWAkJTkNSRE1BX0dPKHNjKTsNClgJfQ0KWH0NClgNClgvKg0KWCAqIFRo
aXMgaXMgdGhlIG1vc3QgY3JpdGljYWwgcGFydCBvZiB0aGUgZHJpdmVyLCBh
bmQgaGFzIHRvIGtub3cNClggKiBob3cgdG8gZGVhbCB3aXRoICphbGwqIGVy
cm9yIGNvbmRpdGlvbnMgYW5kIHBoYXNlcyBmcm9tIHRoZSBTQ1NJDQpYICog
YnVzLiBJZiB0aGVyZSBhcmUgbm8gZXJyb3JzIGFuZCB0aGUgRE1BIHdhcyBh
Y3RpdmUsIHRoZW4gY2FsbCB0aGUNClggKiBETUEgcHNldWRvLWludGVycnVw
dCBoYW5kbGVyLiBJZiB0aGlzIHJldHVybnMgMSwgdGhlbiB0aGF0IHdhcyBp
dA0KWCAqIGFuZCB3ZSBjYW4gcmV0dXJuIGZyb20gaGVyZSB3aXRob3V0IGZ1
cnRoZXIgcHJvY2Vzc2luZy4NClggKg0KWCAqIE1vc3Qgb2YgdGhpcyBuZWVk
cyB2ZXJpZnlpbmcuDQpYICovDQpYaW50DQpYbmNyNTNjOXhfaW50cihhcmcp
DQpYCXZvaWQgKmFyZzsNClh7DQpYCXN0cnVjdCBuY3I1M2M5eF9zb2Z0YyAq
c2MgPSBhcmc7DQpYCXN0cnVjdCBuY3I1M2M5eF9lY2IgKmVjYjsNClgJc3Ry
dWN0IHNjc2lwaV9saW5rICpzY19saW5rOw0KWAlzdHJ1Y3QgbmNyNTNjOXhf
dGluZm8gKnRpOw0KWAlzaXplX3Qgc2l6ZTsNClgJaW50IG5maWZvOw0KWA0K
WAlOQ1JfVFJBQ0UoKCJbbmNyNTNjOXhfaW50cjogc3RhdGUgJWRdIiwgc2Mt
PnNjX3N0YXRlKSk7DQpYDQpYCWlmICghTkNSRE1BX0lTSU5UUihzYykpDQpY
CQlyZXR1cm4gKDApOw0KWA0KWGFnYWluOg0KWAkvKiBhbmQgd2hhdCBkbyB0
aGUgcmVnaXN0ZXJzIHNheS4uLiAqLw0KWAluY3I1M2M5eF9yZWFkcmVncyhz
Yyk7DQpYDQpYCXNjLT5zY19pbnRyY250LmV2X2NvdW50Kys7DQpYDQpYCS8q
DQpYCSAqIEF0IHRoZSBtb21lbnQsIG9ubHkgYSBTQ1NJIEJ1cyBSZXNldCBv
ciBJbGxlZ2FsDQpYCSAqIENvbW1hbmQgYXJlIGNsYXNzZWQgYXMgZXJyb3Jz
LiBBIGRpc2Nvbm5lY3QgaXMgYQ0KWAkgKiB2YWxpZCBjb25kaXRpb24sIGFu
ZCB3ZSBsZXQgdGhlIGNvZGUgY2hlY2sgaXMgdGhlDQpYCSAqICJOQ1JfQlVT
RlJFRV9PSyIgZmxhZyB3YXMgc2V0IGJlZm9yZSBkZWNsYXJpbmcgaXQNClgJ
ICogYW5kIGVycm9yLg0KWAkgKg0KWAkgKiBBbHNvLCB0aGUgc3RhdHVzIHJl
Z2lzdGVyIHRlbGxzIHVzIGFib3V0ICJHcm9zcw0KWAkgKiBFcnJvcnMiIGFu
ZCAiUGFyaXR5IGVycm9ycyIuIE9ubHkgdGhlIEdyb3NzIEVycm9yDQpYCSAq
IGlzIHJlYWxseSBiYWQsIGFuZCB0aGUgcGFyaXR5IGVycm9ycyBhcmUgZGVh
bHQNClgJICogd2l0aCBsYXRlcg0KWAkgKg0KWAkgKiBUT0RPDQpYCSAqCUlm
IHRoZXJlIGFyZSB0b28gbWFueSBwYXJpdHkgZXJyb3IsIGdvIHRvIHNsb3cN
ClgJICoJY2FibGUgbW9kZSA/DQpYCSAqLw0KWA0KWAkvKiBTQ1NJIFJlc2V0
ICovDQpYCWlmICgoc2MtPnNjX2VzcGludHIgJiBOQ1JJTlRSX1NCUikgIT0g
MCkgew0KWAkJaWYgKChOQ1JfUkVBRF9SRUcoc2MsIE5DUl9GRkxBRykgJiBO
Q1JGSUZPX0ZGKSAhPSAwKSB7DQpYCQkJTkNSQ01EKHNjLCBOQ1JDTURfRkxV
U0gpOw0KWAkJCURFTEFZKDEpOw0KWAkJfQ0KWAkJaWYgKHNjLT5zY19zdGF0
ZSAhPSBOQ1JfU0JSKSB7DQpYCQkJcHJpbnRmKCIlczogU0NTSSBidXMgcmVz
ZXRcbiIsDQpYCQkJCXNjLT5zY19kZXYuZHZfeG5hbWUpOw0KWAkJCW5jcjUz
Yzl4X2luaXQoc2MsIDApOyAvKiBSZXN0YXJ0IGV2ZXJ5dGhpbmcgKi8NClgJ
CQlyZXR1cm4gKDEpOw0KWAkJfQ0KWCNpZiAwDQpYLypYWFgqLwkJcHJpbnRm
KCI8ZXhwZWN0ZWQgYnVzIHJlc2V0OiAiDQpYCQkJIltpbnRyICV4LCBzdGF0
ICV4LCBzdGVwICVkXT5cbiIsDQpYCQkJc2MtPnNjX2VzcGludHIsIHNjLT5z
Y19lc3BzdGF0LA0KWAkJCXNjLT5zY19lc3BzdGVwKTsNClgjZW5kaWYNClgJ
CWlmIChzYy0+c2NfbmV4dXMgIT0gTlVMTCkNClgJCQlwYW5pYygiJXM6IG5l
eHVzIGluIHJlc2V0IHN0YXRlIiwNClgJCQkgICAgICBzYy0+c2NfZGV2LmR2
X3huYW1lKTsNClgJCWdvdG8gc2NoZWQ7DQpYCX0NClgNClgJZWNiID0gc2Mt
PnNjX25leHVzOw0KWA0KWCNkZWZpbmUgTkNSSU5UUl9FUlIgKE5DUklOVFJf
U0JSfE5DUklOVFJfSUxMKQ0KWAlpZiAoc2MtPnNjX2VzcGludHIgJiBOQ1JJ
TlRSX0VSUiB8fA0KWAkgICAgc2MtPnNjX2VzcHN0YXQgJiBOQ1JTVEFUX0dF
KSB7DQpYDQpYCQlpZiAoKHNjLT5zY19lc3BzdGF0ICYgTkNSU1RBVF9HRSkg
IT0gMCkgew0KWAkJCS8qIEdyb3NzIEVycm9yOyBubyB0YXJnZXQgPyAqLw0K
WAkJCWlmIChOQ1JfUkVBRF9SRUcoc2MsIE5DUl9GRkxBRykgJiBOQ1JGSUZP
X0ZGKSB7DQpYCQkJCU5DUkNNRChzYywgTkNSQ01EX0ZMVVNIKTsNClgJCQkJ
REVMQVkoMSk7DQpYCQkJfQ0KWAkJCWlmIChzYy0+c2Nfc3RhdGUgPT0gTkNS
X0NPTk5FQ1RFRCB8fA0KWAkJCSAgICBzYy0+c2Nfc3RhdGUgPT0gTkNSX1NF
TEVDVElORykgew0KWAkJCQllY2ItPnhzLT5lcnJvciA9IFhTX1RJTUVPVVQ7
DQpYCQkJCW5jcjUzYzl4X2RvbmUoc2MsIGVjYik7DQpYCQkJfQ0KWAkJCXJl
dHVybiAoMSk7DQpYCQl9DQpYDQpYCQlpZiAoKHNjLT5zY19lc3BpbnRyICYg
TkNSSU5UUl9JTEwpICE9IDApIHsNClgJCQlpZiAoKHNjLT5zY19mbGFncyAm
IE5DUl9FWFBFQ1RfSUxMQ01EKSAhPSAwKSB7DQpYCQkJCS8qDQpYCQkJCSAq
IEVhdCBhd2F5ICJJbGxlZ2FsIGNvbW1hbmQiIGludGVycnVwdA0KWAkJCQkg
KiBvbiBhIEVTUDEwMCBjYXVzZWQgYnkgYSByZS1zZWxlY3Rpb24NClgJCQkJ
ICogd2hpbGUgd2Ugd2VyZSB0cnlpbmcgdG8gc2VsZWN0DQpYCQkJCSAqIGFu
b3RoZXIgdGFyZ2V0Lg0KWAkJCQkgKi8NClgjaWZkZWYgREVCVUcNClgJCQkJ
cHJpbnRmKCIlczogRVNQMTAwIHdvcmstYXJvdW5kIGFjdGl2YXRlZFxuIiwN
ClgJCQkJCXNjLT5zY19kZXYuZHZfeG5hbWUpOw0KWCNlbmRpZg0KWAkJCQlz
Yy0+c2NfZmxhZ3MgJj0gfk5DUl9FWFBFQ1RfSUxMQ01EOw0KWAkJCQlyZXR1
cm4gKDEpOw0KWAkJCX0NClgJCQkvKiBpbGxlZ2FsIGNvbW1hbmQsIG91dCBv
ZiBzeW5jID8gKi8NClgJCQlwcmludGYoIiVzOiBpbGxlZ2FsIGNvbW1hbmQ6
IDB4JXggIg0KWAkJCSAgICAiKHN0YXRlICVkLCBwaGFzZSAleCwgcHJldnBo
YXNlICV4KVxuIiwNClgJCQkJc2MtPnNjX2Rldi5kdl94bmFtZSwgc2MtPnNj
X2xhc3RjbWQsDQpYCQkJCXNjLT5zY19zdGF0ZSwgc2MtPnNjX3BoYXNlLA0K
WAkJCQlzYy0+c2NfcHJldnBoYXNlKTsNClgJCQlpZiAoTkNSX1JFQURfUkVH
KHNjLCBOQ1JfRkZMQUcpICYgTkNSRklGT19GRikgew0KWAkJCQlOQ1JDTUQo
c2MsIE5DUkNNRF9GTFVTSCk7DQpYCQkJCURFTEFZKDEpOw0KWAkJCX0NClgJ
CQluY3I1M2M5eF9pbml0KHNjLCAxKTsgLyogUmVzdGFydCBldmVyeXRoaW5n
ICovDQpYCQkJcmV0dXJuICgxKTsNClgJCX0NClgJfQ0KWAlzYy0+c2NfZmxh
Z3MgJj0gfk5DUl9FWFBFQ1RfSUxMQ01EOw0KWA0KWAkvKg0KWAkgKiBDYWxs
IGlmIERNQSBpcyBhY3RpdmUuDQpYCSAqDQpYCSAqIElmIERNQV9JTlRSIHJl
dHVybnMgdHJ1ZSwgdGhlbiBtYXliZSBnbyAncm91bmQgdGhlIGxvb3ANClgJ
ICogYWdhaW4gaW4gY2FzZSB0aGVyZSBpcyBubyBtb3JlIERNQSBxdWV1ZWQs
IGJ1dCBhIHBoYXNlDQpYCSAqIGNoYW5nZSBpcyBleHBlY3RlZC4NClgJICov
DQpYCWlmIChOQ1JETUFfSVNBQ1RJVkUoc2MpKSB7DQpYCQlpbnQgciA9IE5D
UkRNQV9JTlRSKHNjKTsNClgJCWlmIChyID09IC0xKSB7DQpYCQkJcHJpbnRm
KCIlczogRE1BIGVycm9yOyByZXNldHRpbmdcbiIsDQpYCQkJCXNjLT5zY19k
ZXYuZHZfeG5hbWUpOw0KWAkJCW5jcjUzYzl4X2luaXQoc2MsIDEpOw0KWAkJ
fQ0KWAkJLyogSWYgRE1BIGFjdGl2ZSBoZXJlLCB0aGVuIGdvIGJhY2sgdG8g
d29yay4uLiAqLw0KWAkJaWYgKE5DUkRNQV9JU0FDVElWRShzYykpDQpYCQkJ
cmV0dXJuICgxKTsNClgNClgJCWlmICgoc2MtPnNjX2VzcHN0YXQgJiBOQ1JT
VEFUX1RDKSA9PSAwKSB7DQpYCQkJLyoNClgJCQkgKiBETUEgbm90IGNvbXBs
ZXRlZC4gIElmIHdlIGNhbiBub3QgZmluZCBhDQpYCQkJICogYWNjZXB0YWJs
ZSBleHBsYW5hdGlvbiwgcHJpbnQgYSBkaWFnbm9zdGljLg0KWAkJCSAqLw0K
WAkJCWlmIChzYy0+c2Nfc3RhdGUgPT0gTkNSX1NFTEVDVElORykNClgJCQkJ
LyoNClgJCQkJICogVGhpcyBjYW4gaGFwcGVuIGlmIHdlIGFyZSByZXNlbGVj
dGVkDQpYCQkJCSAqIHdoaWxlIHVzaW5nIERNQSB0byBzZWxlY3QgYSB0YXJn
ZXQuDQpYCQkJCSAqLw0KWAkJCQkvKnZvaWQqLzsNClgJCQllbHNlIGlmIChz
Yy0+c2NfcHJldnBoYXNlID09IE1FU1NBR0VfT1VUX1BIQVNFKSB7DQpYCQkJ
CS8qDQpYCQkJCSAqIE91ciAobXVsdGktYnl0ZSkgbWVzc2FnZSAoZWcgU0RU
Uikgd2FzDQpYCQkJCSAqIGludGVycnVwdGVkIGJ5IHRoZSB0YXJnZXQgdG8g
c2VuZA0KWAkJCQkgKiBhIE1TRyBSRUpFQ1QuDQpYCQkJCSAqIFByaW50IGRp
YWdub3N0aWMgaWYgY3VycmVudCBwaGFzZQ0KWAkJCQkgKiBpcyBub3QgTUVT
U0FHRSBJTi4NClgJCQkJICovDQpYCQkJCWlmIChzYy0+c2NfcGhhc2UgIT0g
TUVTU0FHRV9JTl9QSEFTRSkNClgJCQkJICAgIHByaW50ZigiJXM6ICFUQyBv
biBNU0cgT1VUIg0KWAkJCQkgICAgICAgIiBbaW50ciAleCwgc3RhdCAleCwg
c3RlcCAlZF0iDQpYCQkJCSAgICAgICAiIHByZXZwaGFzZSAleCwgcmVzaWQg
JWx4XG4iLA0KWAkJCQkJc2MtPnNjX2Rldi5kdl94bmFtZSwNClgJCQkJCXNj
LT5zY19lc3BpbnRyLA0KWAkJCQkJc2MtPnNjX2VzcHN0YXQsDQpYCQkJCQlz
Yy0+c2NfZXNwc3RlcCwNClgJCQkJCXNjLT5zY19wcmV2cGhhc2UsDQpYCQkJ
CQkodV9sb25nKXNjLT5zY19vbWxlbik7DQpYCQkJfSBlbHNlIGlmIChzYy0+
c2NfZGxlZnQgPT0gMCkgew0KWAkJCQkvKg0KWAkJCQkgKiBUaGUgRE1BIG9w
ZXJhdGlvbiB3YXMgc3RhcnRlZCBmb3INClgJCQkJICogYSBEQVRBIHRyYW5z
ZmVyLiBQcmludCBhIGRpYWdub3N0aWMNClgJCQkJICogaWYgdGhlIERNQSBj
b3VudGVyIGFuZCBUQyBiaXQNClgJCQkJICogYXBwZWFyIHRvIGJlIG91dCBv
ZiBzeW5jLg0KWAkJCQkgKi8NClgJCQkJcHJpbnRmKCIlczogIVRDIG9uIERB
VEEgWEZFUiINClgJCQkJICAgICAgICIgW2ludHIgJXgsIHN0YXQgJXgsIHN0
ZXAgJWRdIg0KWAkJCQkgICAgICAgIiBwcmV2cGhhc2UgJXgsIHJlc2lkICV4
XG4iLA0KWAkJCQkJc2MtPnNjX2Rldi5kdl94bmFtZSwNClgJCQkJCXNjLT5z
Y19lc3BpbnRyLA0KWAkJCQkJc2MtPnNjX2VzcHN0YXQsDQpYCQkJCQlzYy0+
c2NfZXNwc3RlcCwNClgJCQkJCXNjLT5zY19wcmV2cGhhc2UsDQpYCQkJCQll
Y2I/ZWNiLT5kbGVmdDotMSk7DQpYCQkJfQ0KWAkJfQ0KWAl9DQpYDQpYCS8q
DQpYCSAqIENoZWNrIGZvciBsZXNzIHNlcmlvdXMgZXJyb3JzLg0KWAkgKi8N
ClgJaWYgKChzYy0+c2NfZXNwc3RhdCAmIE5DUlNUQVRfUEUpICE9IDApIHsN
ClgJCXByaW50ZigiJXM6IFNDU0kgYnVzIHBhcml0eSBlcnJvclxuIiwgc2Mt
PnNjX2Rldi5kdl94bmFtZSk7DQpYCQlpZiAoc2MtPnNjX3ByZXZwaGFzZSA9
PSBNRVNTQUdFX0lOX1BIQVNFKQ0KWAkJCW5jcjUzYzl4X3NjaGVkX21zZ291
dChTRU5EX1BBUklUWV9FUlJPUik7DQpYCQllbHNlDQpYCQkJbmNyNTNjOXhf
c2NoZWRfbXNnb3V0KFNFTkRfSU5JVF9ERVRfRVJSKTsNClgJfQ0KWA0KWAlp
ZiAoKHNjLT5zY19lc3BpbnRyICYgTkNSSU5UUl9ESVMpICE9IDApIHsNClgJ
CXNjLT5zY19tc2dpZnkgPSAwOw0KWAkJTkNSX01JU0MoKCI8RElTQyBbaW50
ciAleCwgc3RhdCAleCwgc3RlcCAlZF0+IiwNClgJCQlzYy0+c2NfZXNwaW50
cixzYy0+c2NfZXNwc3RhdCxzYy0+c2NfZXNwc3RlcCkpOw0KWAkJaWYgKE5D
Ul9SRUFEX1JFRyhzYywgTkNSX0ZGTEFHKSAmIE5DUkZJRk9fRkYpIHsNClgJ
CQlOQ1JDTUQoc2MsIE5DUkNNRF9GTFVTSCk7DQpYLyoJCQlERUxBWSgxKTsg
Ki8NClgJCX0NClgJCS8qDQpYCQkgKiBUaGlzIGNvbW1hbmQgbXVzdCAoYXBw
YXJlbnRseSkgYmUgaXNzdWVkIHdpdGhpbg0KWAkJICogMjUwbVMgb2YgYSBk
aXNjb25uZWN0LiBTbyBoZXJlIHlvdSBhcmUuLi4NClgJCSAqLw0KWAkJTkNS
Q01EKHNjLCBOQ1JDTURfRU5TRUwpOw0KWA0KWAkJc3dpdGNoIChzYy0+c2Nf
c3RhdGUpIHsNClgJCWNhc2UgTkNSX1JFU0VMRUNURUQ6DQpYCQkJZ290byBz
Y2hlZDsNClgNClgJCWNhc2UgTkNSX1NFTEVDVElORzogDQpYCQl7DQpYCQkJ
c3RydWN0IG5jcjUzYzl4X2xpbmZvICpsaTsNClgNClgJCQllY2ItPnhzLT5l
cnJvciA9IFhTX1NFTFRJTUVPVVQ7DQpYDQpYCQkJLyogU2VsZWN0aW9uIHRp
bWVvdXQgLS0gZGlzY2FyZCBhbGwgTFVOcyBpZiBlbXB0eSAqLw0KWAkJCXNj
X2xpbmsgPSBlY2ItPnhzLT5zY19saW5rOw0KWAkJCXRpID0gJnNjLT5zY190
aW5mb1tzY19saW5rLT5zY3NpcGlfc2NzaS50YXJnZXRdOw0KWAkJCWxpID0g
TElTVF9GSVJTVCgmdGktPmx1bnMpOw0KWAkJCXdoaWxlIChsaSAhPSBOVUxM
KSB7DQpYCQkJCWlmIChsaS0+dW50YWdnZWQgPT0gTlVMTCAmJiBsaS0+dXNl
ZCA9PSAwKSB7DQpYCQkJCQlpZiAobGktPmx1biA8IE5DUl9OTFVOKQ0KWAkJ
CQkJCXRpLT5sdW5bbGktPmx1bl0gPSBOVUxMOw0KWAkJCQkJTElTVF9SRU1P
VkUobGksIGxpbmspOw0KWAkJCQkJZnJlZShsaSwgTV9ERVZCVUYpOw0KWAkJ
CQkJLyogUmVzdGFydCB0aGUgc2VhcmNoIGF0IHRoZSBiZWdpbm5pbmcgKi8N
ClgJCQkJCWxpID0gTElTVF9GSVJTVCgmdGktPmx1bnMpOw0KWAkJCQkJY29u
dGludWU7DQpYCQkJCX0NClgJCQkJbGkgPSBMSVNUX05FWFQobGksIGxpbmsp
Ow0KWAkJCX0NClgJCQlnb3RvIGZpbmlzaDsNClgJCX0NClgJCWNhc2UgTkNS
X0NPTk5FQ1RFRDoNClgJCQlpZiAoKHNjLT5zY19mbGFncyAmIE5DUl9TWU5D
SE5FR08pICE9IDApIHsNClgjaWZkZWYgTkNSNTNDOVhfREVCVUcNClgJCQkJ
aWYgKGVjYiAhPSBOVUxMKQ0KWAkJCQkJc2NzaV9wcmludF9hZGRyKGVjYi0+
eHMtPnNjX2xpbmspOw0KWAkJCQlwcmludGYoInN5bmMgbmVnbyBub3QgY29t
cGxldGVkIVxuIik7DQpYI2VuZGlmDQpYCQkJCXRpID0gJnNjLT5zY190aW5m
b1tlY2ItPnhzLT5zY19saW5rLT5zY3NpcGlfc2NzaS50YXJnZXRdOw0KWAkJ
CQlzYy0+c2NfZmxhZ3MgJj0gfk5DUl9TWU5DSE5FR087DQpYCQkJCXRpLT5m
bGFncyAmPSB+KFRfTkVHT1RJQVRFIHwgVF9TWU5DTU9ERSk7DQpYCQkJfQ0K
WA0KWAkJCS8qIGl0IG1heSBiZSBPSyB0byBkaXNjb25uZWN0ICovDQpYCQkJ
aWYgKChzYy0+c2NfZmxhZ3MgJiBOQ1JfQUJPUlRJTkcpID09IDApIHsNClgJ
CQkJLyogIA0KWAkJCQkgKiBTZWN0aW9uIDUuMS4xIG9mIHRoZSBTQ1NJIDIg
c3BlYw0KWAkJCQkgKiBzdWdnZXN0cyBpc3N1aW5nIGEgUkVRVUVTVCBTRU5T
RQ0KWAkJCQkgKiBmb2xsb3dpbmcgYW4gdW5leHBlY3RlZCBkaXNjb25uZWN0
Lg0KWAkJCQkgKiBTb21lIGRldmljZXMgZ28gaW50byBhIGNvbnRpbmdlbnQN
ClgJCQkJICogYWxsZWdpYW5jZSBjb25kaXRpb24gd2hlbg0KWAkJCQkgKiBk
aXNjb25uZWN0aW5nLCBhbmQgdGhpcyBpcyBuZWNlc3NhcnkNClgJCQkJICog
dG8gY2xlYW4gdXAgdGhlaXIgc3RhdGUuDQpYCQkJCSAqLyAgICAgDQpYCQkJ
CXByaW50ZigiJXM6IHVuZXhwZWN0ZWQgZGlzY29ubmVjdDsgIiwNClgJCQkJ
ICAgIHNjLT5zY19kZXYuZHZfeG5hbWUpOw0KWAkJCQlpZiAoKGVjYi0+Zmxh
Z3MgJiBFQ0JfU0VOU0UpICE9IDApIHsNClgJCQkJCXByaW50ZigicmVzZXR0
aW5nXG4iKTsNClgJCQkJCWdvdG8gcmVzZXQ7DQpYCQkJCX0NClgJCQkJcHJp
bnRmKCJzZW5kaW5nIFJFUVVFU1QgU0VOU0VcbiIpOw0KWAkJCQljYWxsb3V0
X3N0b3AoJmVjYi0+eHMtPnhzX2NhbGxvdXQpOw0KWAkJCQluY3I1M2M5eF9z
ZW5zZShzYywgZWNiKTsNClgJCQkJZ290byBvdXQ7DQpYCQkJfQ0KWA0KWAkJ
CWVjYi0+eHMtPmVycm9yID0gWFNfVElNRU9VVDsNClgJCQlnb3RvIGZpbmlz
aDsNClgNClgJCWNhc2UgTkNSX0RJU0NPTk5FQ1Q6DQpYCQkJc2MtPnNjX25l
eHVzID0gTlVMTDsNClgJCQlnb3RvIHNjaGVkOw0KWA0KWAkJY2FzZSBOQ1Jf
Q01EQ09NUExFVEU6DQpYCQkJZ290byBmaW5pc2g7DQpYCQl9DQpYCX0NClgN
ClgJc3dpdGNoIChzYy0+c2Nfc3RhdGUpIHsNClgNClgJY2FzZSBOQ1JfU0JS
Og0KWAkJcHJpbnRmKCIlczogd2FpdGluZyBmb3IgU0NTSSBCdXMgUmVzZXQg
dG8gaGFwcGVuXG4iLA0KWAkJCXNjLT5zY19kZXYuZHZfeG5hbWUpOw0KWAkJ
cmV0dXJuICgxKTsNClgNClgJY2FzZSBOQ1JfUkVTRUxFQ1RFRDoNClgJCS8q
DQpYCQkgKiB3ZSBtdXN0IGJlIGNvbnRpbnVpbmcgYSBtZXNzYWdlID8NClgJ
CSAqLw0KWAkJaWYgKHNjLT5zY19waGFzZSAhPSBNRVNTQUdFX0lOX1BIQVNF
KSB7DQpYCQkJcHJpbnRmKCIlczogdGFyZ2V0IGRpZG4ndCBpZGVudGlmeVxu
IiwNClgJCQkJc2MtPnNjX2Rldi5kdl94bmFtZSk7DQpYCQkJbmNyNTNjOXhf
aW5pdChzYywgMSk7DQpYCQkJcmV0dXJuICgxKTsNClgJCX0NClhwcmludGYo
Ijw8UkVTRUxFQ1QgQ09OVCdkPj4iKTsNClgjaWYgWFhYWA0KWAkJbmNyNTNj
OXhfbXNnaW4oc2MpOw0KWAkJaWYgKHNjLT5zY19zdGF0ZSAhPSBOQ1JfQ09O
TkVDVEVEKSB7DQpYCQkJLyogSURFTlRJRlkgZmFpbD8hICovDQpYCQkJcHJp
bnRmKCIlczogaWRlbnRpZnkgZmFpbGVkXG4iLA0KWAkJCQlzYy0+c2NfZGV2
LmR2X3huYW1lKTsNClgJCQluY3I1M2M5eF9pbml0KHNjLCAxKTsNClgJCQly
ZXR1cm4gKDEpOw0KWAkJfQ0KWCNlbmRpZg0KWAkJYnJlYWs7DQpYDQpYCWNh
c2UgTkNSX0lERU5USUZJRUQ6DQpYCQllY2IgPSBzYy0+c2NfbmV4dXM7DQpY
CQlpZiAoc2MtPnNjX3BoYXNlICE9IE1FU1NBR0VfSU5fUEhBU0UpIHsNClgJ
CQlpbnQgaSA9IChOQ1JfUkVBRF9SRUcoc2MsIE5DUl9GRkxBRykNClgJCQkJ
ICYgTkNSRklGT19GRik7DQpYIAkJCS8qDQpYCQkJICogVGhpbmdzIGFyZSBz
ZXJpb3VzbHkgZnVja2VkIHVwLg0KWAkJCSAqIFB1bGwgdGhlIGJyYWtlcywg
aS5lLiByZXNldA0KWAkJCSAqLw0KWAkJCXByaW50ZigiJXM6IHRhcmdldCBk
aWRuJ3Qgc2VuZCB0YWc6ICVkIGJ5dGVzIGluIGZpZm9cbiIsDQpYCQkJICAg
ICAgIHNjLT5zY19kZXYuZHZfeG5hbWUsIGkpOw0KWAkJCS8qIERyYWluIGFu
ZCBkaXNwbGF5IGZpZm8gKi8NClgJCQl3aGlsZSAoaS0tID4gMCkNClgJCQkJ
cHJpbnRmKCJbJWRdICIsIE5DUl9SRUFEX1JFRyhzYywgTkNSX0ZJRk8pKTsN
ClgJCQkNClgJCQluY3I1M2M5eF9pbml0KHNjLCAxKTsNClgJCQlyZXR1cm4g
KDEpOw0KWAkJfSBlbHNlIA0KWAkJCWdvdG8gbXNnaW47DQpYDQpYCQlicmVh
azsNClgNClgJY2FzZSBOQ1JfSURMRToNClgJY2FzZSBOQ1JfU0VMRUNUSU5H
Og0KWAkJZWNiID0gc2MtPnNjX25leHVzOw0KWAkJaWYgKHNjLT5zY19lc3Bp
bnRyICYgTkNSSU5UUl9SRVNFTCkgew0KWAkJCXNjLT5zY19tc2dwcmlxID0g
c2MtPnNjX21zZ291dCA9IHNjLT5zY19tc2dvdXRxID0gMDsNClgJCQlzYy0+
c2NfZmxhZ3MgPSAwOw0KWAkJCS8qDQpYCQkJICogSWYgd2UncmUgdHJ5aW5n
IHRvIHNlbGVjdCBhDQpYCQkJICogdGFyZ2V0IG91cnNlbHZlcywgcHVzaCBv
dXIgY29tbWFuZA0KWAkJCSAqIGJhY2sgaW50byB0aGUgcmVhZHkgbGlzdC4N
ClgJCQkgKi8NClgJCQlpZiAoc2MtPnNjX3N0YXRlID09IE5DUl9TRUxFQ1RJ
TkcpIHsNClgJCQkJTkNSX01JU0MoKCJiYWNrb2ZmIHNlbGVjdG9yICIpKTsN
ClgJCQkJY2FsbG91dF9zdG9wKCZlY2ItPnhzLT54c19jYWxsb3V0KTsNClgJ
CQkJbmNyNTNjOXhfZGVxdWV1ZShzYywgZWNiKTsNClgJCQkJVEFJTFFfSU5T
RVJUX0hFQUQoJnNjLT5yZWFkeV9saXN0LCBlY2IsIGNoYWluKTsNClgJCQkJ
ZWNiLT5mbGFncyB8PSBFQ0JfUkVBRFk7DQpYCQkJCWVjYiA9IHNjLT5zY19u
ZXh1cyA9IE5VTEw7DQpYCQkJfQ0KWAkJCXNjLT5zY19zdGF0ZSA9IE5DUl9S
RVNFTEVDVEVEOw0KWAkJCWlmIChzYy0+c2NfcGhhc2UgIT0gTUVTU0FHRV9J
Tl9QSEFTRSkgew0KWAkJCQkvKg0KWAkJCQkgKiBUaGluZ3MgYXJlIHNlcmlv
dXNseSBmdWNrZWQgdXAuDQpYCQkJCSAqIFB1bGwgdGhlIGJyYWtlcywgaS5l
LiByZXNldA0KWAkJCQkgKi8NClgJCQkJcHJpbnRmKCIlczogdGFyZ2V0IGRp
ZG4ndCBpZGVudGlmeVxuIiwNClgJCQkJCXNjLT5zY19kZXYuZHZfeG5hbWUp
Ow0KWAkJCQluY3I1M2M5eF9pbml0KHNjLCAxKTsNClgJCQkJcmV0dXJuICgx
KTsNClgJCQl9DQpYCQkJLyoNClgJCQkgKiBUaGUgQzkwIG9ubHkgaW5oaWJp
dHMgRklGTyB3cml0ZXMgdW50aWwNClgJCQkgKiByZXNlbGVjdGlvbiBpcyBj
b21wbGV0ZSwgaW5zdGVhZCBvZg0KWAkJCSAqIHdhaXRpbmcgdW50aWwgdGhl
IGludGVycnVwdCBzdGF0dXMgcmVnaXN0ZXINClgJCQkgKiBoYXMgYmVlbiBy
ZWFkLiBTbywgaWYgdGhlIHJlc2VsZWN0IGhhcHBlbnMNClgJCQkgKiB3aGls
ZSB3ZSB3ZXJlIGVudGVyaW5nIGEgY29tbWFuZCBieXRlcyAoZm9yDQpYCQkJ
ICogYW5vdGhlciB0YXJnZXQpIHNvbWUgb2YgdGhvc2UgYnl0ZXMgY2FuDQpY
CQkJICogYXBwZWFyIGluIHRoZSBGSUZPIGhlcmUsIGFmdGVyIHRoZQ0KWAkJ
CSAqIGludGVycnVwdCBpcyB0YWtlbi4NClgJCQkgKi8NClgJCQluZmlmbyA9
IG5jcjUzYzl4X3JkZmlmbyhzYywgTkNSX1JERklGT19TVEFSVCk7DQpYDQpY
CQkJaWYgKG5maWZvIDwgMiB8fA0KWAkJCSAgICAobmZpZm8gPiAyICYmDQpY
CQkJICAgICBzYy0+c2NfcmV2ICE9IE5DUl9WQVJJQU5UX0VTUDEwMCkpIHsN
ClgJCQkJcHJpbnRmKCIlczogUkVTRUxFQ1Q6ICVkIGJ5dGVzIGluIEZJRk8h
ICINClgJCQkJICAgICJbaW50ciAleCwgc3RhdCAleCwgc3RlcCAlZCwgcHJl
dnBoYXNlICV4XVxuIiwNClgJCQkJCXNjLT5zY19kZXYuZHZfeG5hbWUsDQpY
CQkJCQluZmlmbywNClgJCQkJCXNjLT5zY19lc3BpbnRyLA0KWAkJCQkJc2Mt
PnNjX2VzcHN0YXQsDQpYCQkJCQlzYy0+c2NfZXNwc3RlcCwNClgJCQkJCXNj
LT5zY19wcmV2cGhhc2UpOw0KWAkJCQluY3I1M2M5eF9pbml0KHNjLCAxKTsN
ClgJCQkJcmV0dXJuICgxKTsNClgJCQl9DQpYCQkJc2MtPnNjX3NlbGlkID0g
c2MtPnNjX2ltZXNzWzBdOw0KWAkJCU5DUl9NSVNDKCgic2VsaWQ9JTAyeCAi
LCBzYy0+c2Nfc2VsaWQpKTsNClgNClgJCQkvKiBIYW5kbGUgaWRlbnRpZnkg
bWVzc2FnZSAqLw0KWAkJCW5jcjUzYzl4X21zZ2luKHNjKTsNClgJCQlpZiAo
bmZpZm8gIT0gMikgew0KWAkJCQkvKg0KWAkJCQkgKiBOb3RlOiB0aGlzIHNo
b3VsZCBub3QgaGFwcGVuDQpYCQkJCSAqIHdpdGggYGRtYXNlbGVjdCcgb24u
DQpYCQkJCSAqLw0KWAkJCQlzYy0+c2NfZmxhZ3MgfD0gTkNSX0VYUEVDVF9J
TExDTUQ7DQpYCQkJCU5DUkNNRChzYywgTkNSQ01EX0ZMVVNIKTsNClgJCQl9
IGVsc2UgaWYgKHNjLT5zY19mZWF0dXJlcyAmIE5DUl9GX0RNQVNFTEVDVCAm
Jg0KWAkJCQkgICBzYy0+c2NfcmV2ID09IE5DUl9WQVJJQU5UX0VTUDEwMCkg
ew0KWAkJCQlzYy0+c2NfZmxhZ3MgfD0gTkNSX0VYUEVDVF9JTExDTUQ7DQpY
CQkJfQ0KWA0KWAkJCWlmIChzYy0+c2Nfc3RhdGUgIT0gTkNSX0NPTk5FQ1RF
RCAmJg0KWAkJCSAgICBzYy0+c2Nfc3RhdGUgIT0gTkNSX0lERU5USUZJRUQp
IHsNClgJCQkJLyogSURFTlRJRlkgZmFpbD8hICovDQpYCQkJCXByaW50Zigi
JXM6IGlkZW50aWZ5IGZhaWxlZFxuIiwNClgJCQkJCXNjLT5zY19kZXYuZHZf
eG5hbWUpOw0KWAkJCQluY3I1M2M5eF9pbml0KHNjLCAxKTsNClgJCQkJcmV0
dXJuICgxKTsNClgJCQl9DQpYCQkJZ290byBzaG9ydGN1dDsgLyogaWUuIG5l
eHQgcGhhc2UgZXhwZWN0ZWQgc29vbiAqLw0KWAkJfQ0KWA0KWCNkZWZpbmUJ
TkNSSU5UUl9ET05FCShOQ1JJTlRSX0ZDfE5DUklOVFJfQlMpDQpYCQlpZiAo
KHNjLT5zY19lc3BpbnRyICYgTkNSSU5UUl9ET05FKSA9PSBOQ1JJTlRSX0RP
TkUpIHsNClgJCQkvKg0KWAkJCSAqIEFyYml0cmF0aW9uIHdvbjsgZXhhbWlu
ZSB0aGUgYHN0ZXAnIHJlZ2lzdGVyDQpYCQkJICogdG8gZGV0ZXJtaW5lIGhv
dyBmYXIgdGhlIHNlbGVjdGlvbiBjb3VsZCBwcm9ncmVzcy4NClgJCQkgKi8N
ClgJCQllY2IgPSBzYy0+c2NfbmV4dXM7DQpYCQkJaWYgKGVjYiA9PSBOVUxM
KQ0KWAkJCQlwYW5pYygibmNyNTNjOXg6IG5vIG5leHVzIik7DQpYDQpYCQkJ
c2NfbGluayA9IGVjYi0+eHMtPnNjX2xpbms7DQpYCQkJdGkgPSAmc2MtPnNj
X3RpbmZvW3NjX2xpbmstPnNjc2lwaV9zY3NpLnRhcmdldF07DQpYDQpYCQkJ
c3dpdGNoIChzYy0+c2NfZXNwc3RlcCkgew0KWAkJCWNhc2UgMDoNClgJCQkJ
LyoNClgJCQkJICogVGhlIHRhcmdldCBkaWQgbm90IHJlc3BvbmQgd2l0aCBh
DQpYCQkJCSAqIG1lc3NhZ2Ugb3V0IHBoYXNlIC0gcHJvYmFibHkgYW4gb2xk
DQpYCQkJCSAqIGRldmljZSB0aGF0IGRvZXNuJ3QgcmVjb2duaXplIEFUTi4N
ClgJCQkJICogQ2xlYXIgQVROIGFuZCBqdXN0IGNvbnRpbnVlLCB0aGUNClgJ
CQkJICogdGFyZ2V0IHNob3VsZCBiZSBpbiB0aGUgY29tbWFuZA0KWAkJCQkg
KiBwaGFzZS4NClgJCQkJICogWFhYWCBjaGVjayBmb3IgY29tbWFuZCBwaGFz
ZT8NClgJCQkJICovDQpYCQkJCU5DUkNNRChzYywgTkNSQ01EX1JTVEFUTik7
DQpYCQkJCWJyZWFrOw0KWAkJCWNhc2UgMToNClgJCQkJaWYgKCh0aS0+Zmxh
Z3MgJiBUX05FR09USUFURSkgPT0gMCAmJiANClgJCQkJICAgIGVjYi0+dGFn
WzBdID09IDApIHsNClgJCQkJCXByaW50ZigiJXM6IHN0ZXAgMSAmICFORUdc
biIsDQpYCQkJCQkJc2MtPnNjX2Rldi5kdl94bmFtZSk7DQpYCQkJCQlnb3Rv
IHJlc2V0Ow0KWAkJCQl9DQpYCQkJCWlmIChzYy0+c2NfcGhhc2UgIT0gTUVT
U0FHRV9PVVRfUEhBU0UpIHsNClgJCQkJCXByaW50ZigiJXM6ICFNU0dPVVRc
biIsDQpYCQkJCQkJc2MtPnNjX2Rldi5kdl94bmFtZSk7DQpYCQkJCQlnb3Rv
IHJlc2V0Ow0KWAkJCQl9DQpYCQkJCWlmICh0aS0+ZmxhZ3MgJiBUX1dJREUp
IHsNClgJCQkJCW5jcjUzYzl4X3NjaGVkX21zZ291dChTRU5EX1dEVFIpOw0K
WAkJCQl9DQpYCQkJCWlmICh0aS0+ZmxhZ3MgJiBUX05FR09USUFURSkgew0K
WAkJCQkJLyogU3RhcnQgbmVnb3RpYXRpbmcgKi8NClgJCQkJCXRpLT5wZXJp
b2QgPSBzYy0+c2NfbWluc3luYzsNClgJCQkJCXRpLT5vZmZzZXQgPSAxNTsN
ClgJCQkJCXNjLT5zY19mbGFncyB8PSBOQ1JfU1lOQ0hORUdPOw0KWAkJCQkJ
aWYgKGVjYi0+dGFnWzBdKQ0KWAkJCQkJCW5jcjUzYzl4X3NjaGVkX21zZ291
dChTRU5EX1RBR3xTRU5EX1NEVFIpOw0KWAkJCQkJZWxzZQ0KWAkJCQkJCW5j
cjUzYzl4X3NjaGVkX21zZ291dChTRU5EX1NEVFIpOw0KWAkJCQl9IGVsc2Ug
ew0KWAkJCQkJLyogQ291bGQgbm90IGRvIEFUTjMgc28gc2VuZCBUQUcgKi8N
ClgJCQkJCW5jcjUzYzl4X3NjaGVkX21zZ291dChTRU5EX1RBRyk7DQpYCQkJ
CX0NClgJCQkJc2MtPnNjX3ByZXZwaGFzZSA9IE1FU1NBR0VfT1VUX1BIQVNF
OyAvKiBYWFhYICovDQpYCQkJCWJyZWFrOw0KWAkJCWNhc2UgMzoNClgJCQkJ
LyoNClgJCQkJICogR3JyLCB0aGlzIGlzIHN1cHBvc2VkIHRvIG1lYW4NClgJ
CQkJICogInRhcmdldCBsZWZ0IGNvbW1hbmQgcGhhc2UgIHByZW1hdHVyZWx5
Ii4NClgJCQkJICogSXQgc2VlbXMgdG8gaGFwcGVuIHJlZ3VsYXJseSB3aGVu
DQpYCQkJCSAqIHN5bmMgbW9kZSBpcyBvbi4NClgJCQkJICogTG9vayBhdCBG
SUZPIHRvIHNlZSBpZiBjb21tYW5kIHdlbnQgb3V0Lg0KWAkJCQkgKiAoVGlt
aW5nIHByb2JsZW1zPykNClgJCQkJICovDQpYCQkJCWlmIChzYy0+c2NfZmVh
dHVyZXMgJiBOQ1JfRl9ETUFTRUxFQ1QpIHsNClgJCQkJCWlmIChzYy0+c2Nf
Y21kbGVuID09IDApDQpYCQkJCQkJLyogSG9wZSBmb3IgdGhlIGJlc3QuLiAq
Lw0KWAkJCQkJCWJyZWFrOw0KWAkJCQl9IGVsc2UgaWYgKChOQ1JfUkVBRF9S
RUcoc2MsIE5DUl9GRkxBRykNClgJCQkJCSAgICAmIE5DUkZJRk9fRkYpID09
IDApIHsNClgJCQkJCS8qIEhvcGUgZm9yIHRoZSBiZXN0Li4gKi8NClgJCQkJ
CWJyZWFrOw0KWAkJCQl9DQpYCQkJCXByaW50ZigiKCVzOiVkOiVkKTogc2Vs
ZWN0aW9uIGZhaWxlZDsiDQpYCQkJCQkiICVkIGxlZnQgaW4gRklGTyAiDQpY
CQkJCQkiW2ludHIgJXgsIHN0YXQgJXgsIHN0ZXAgJWRdXG4iLA0KWAkJCQkJ
c2MtPnNjX2Rldi5kdl94bmFtZSwNClgJCQkJCXNjX2xpbmstPnNjc2lwaV9z
Y3NpLnRhcmdldCwNClgJCQkJCXNjX2xpbmstPnNjc2lwaV9zY3NpLmx1biwN
ClgJCQkJCU5DUl9SRUFEX1JFRyhzYywgTkNSX0ZGTEFHKQ0KWAkJCQkJICYg
TkNSRklGT19GRiwNClgJCQkJCXNjLT5zY19lc3BpbnRyLCBzYy0+c2NfZXNw
c3RhdCwNClgJCQkJCXNjLT5zY19lc3BzdGVwKTsNClgJCQkJTkNSQ01EKHNj
LCBOQ1JDTURfRkxVU0gpOw0KWAkJCQluY3I1M2M5eF9zY2hlZF9tc2dvdXQo
U0VORF9BQk9SVCk7DQpYCQkJCXJldHVybiAoMSk7DQpYCQkJY2FzZSAyOg0K
WAkJCQkvKiBTZWxlY3Qgc3R1Y2sgYXQgQ29tbWFuZCBQaGFzZSAqLw0KWAkJ
CQlOQ1JDTUQoc2MsIE5DUkNNRF9GTFVTSCk7DQpYCQkJCWJyZWFrOw0KWAkJ
CWNhc2UgNDoNClgJCQkJaWYgKHNjLT5zY19mZWF0dXJlcyAmIE5DUl9GX0RN
QVNFTEVDVCAmJg0KWAkJCQkgICAgc2MtPnNjX2NtZGxlbiAhPSAwKQ0KWAkJ
CQkJcHJpbnRmKCIoJXM6JWQ6JWQpOiBzZWxlY3Q7ICINClgJCQkJCSAgICAg
ICAiJWx1IGxlZnQgaW4gRE1BIGJ1ZmZlciAiDQpYCQkJCQkiW2ludHIgJXgs
IHN0YXQgJXgsIHN0ZXAgJWRdXG4iLA0KWAkJCQkJCXNjLT5zY19kZXYuZHZf
eG5hbWUsDQpYCQkJCQkJc2NfbGluay0+c2NzaXBpX3Njc2kudGFyZ2V0LA0K
WAkJCQkJCXNjX2xpbmstPnNjc2lwaV9zY3NpLmx1biwNClgJCQkJCQkodV9s
b25nKXNjLT5zY19jbWRsZW4sDQpYCQkJCQkJc2MtPnNjX2VzcGludHIsDQpY
CQkJCQkJc2MtPnNjX2VzcHN0YXQsDQpYCQkJCQkJc2MtPnNjX2VzcHN0ZXAp
Ow0KWAkJCQkvKiBTbyBmYXIsIGV2ZXJ5dGhpbmcgd2VudCBmaW5lICovDQpY
CQkJCWJyZWFrOw0KWAkJCX0NClgNClgJCQlzYy0+c2NfcHJldnBoYXNlID0g
SU5WQUxJRF9QSEFTRTsgLyogPz8gKi8NClgJCQkvKiBEbyBhbiBpbXBsaWNp
dCBSRVNUT1JFIFBPSU5URVJTLiAqLw0KWAkJCXNjLT5zY19kcCA9IGVjYi0+
ZGFkZHI7DQpYCQkJc2MtPnNjX2RsZWZ0ID0gZWNiLT5kbGVmdDsNClgJCQlz
Yy0+c2Nfc3RhdGUgPSBOQ1JfQ09OTkVDVEVEOw0KWAkJCWJyZWFrOw0KWA0K
WAkJfSBlbHNlIHsNClgNClgJCQlwcmludGYoIiVzOiB1bmV4cGVjdGVkIHN0
YXR1cyBhZnRlciBzZWxlY3QiDQpYCQkJCSI6IFtpbnRyICV4LCBzdGF0ICV4
LCBzdGVwICV4XVxuIiwNClgJCQkJc2MtPnNjX2Rldi5kdl94bmFtZSwNClgJ
CQkJc2MtPnNjX2VzcGludHIsIHNjLT5zY19lc3BzdGF0LA0KWAkJCQlzYy0+
c2NfZXNwc3RlcCk7DQpYCQkJTkNSQ01EKHNjLCBOQ1JDTURfRkxVU0gpOw0K
WAkJCURFTEFZKDEpOw0KWAkJCWdvdG8gcmVzZXQ7DQpYCQl9DQpYCQlpZiAo
c2MtPnNjX3N0YXRlID09IE5DUl9JRExFKSB7DQpYCQkJcHJpbnRmKCIlczog
c3RyYXkgaW50ZXJydXB0XG4iLCBzYy0+c2NfZGV2LmR2X3huYW1lKTsNClgJ
CQlyZXR1cm4gKDApOw0KWAkJfQ0KWAkJYnJlYWs7DQpYDQpYCWNhc2UgTkNS
X0NPTk5FQ1RFRDoNClgJCWlmICgoc2MtPnNjX2ZsYWdzICYgTkNSX0lDQ1Mp
ICE9IDApIHsNClgJCQkvKiAiSW5pdGlhdGUgQ29tbWFuZCBDb21wbGV0ZSBT
dGVwcyIgaW4gcHJvZ3Jlc3MgKi8NClgJCQl1X2NoYXIgbXNnOw0KWA0KWAkJ
CXNjLT5zY19mbGFncyAmPSB+TkNSX0lDQ1M7DQpYDQpYCQkJaWYgKCEoc2Mt
PnNjX2VzcGludHIgJiBOQ1JJTlRSX0RPTkUpKSB7DQpYCQkJCXByaW50Zigi
JXM6IElDQ1M6ICINClgJCQkJICAgICAgIjogW2ludHIgJXgsIHN0YXQgJXgs
IHN0ZXAgJXhdXG4iLA0KWAkJCQkJc2MtPnNjX2Rldi5kdl94bmFtZSwNClgJ
CQkJCXNjLT5zY19lc3BpbnRyLCBzYy0+c2NfZXNwc3RhdCwNClgJCQkJCXNj
LT5zY19lc3BzdGVwKTsNClgJCQl9DQpYCQkJbmNyNTNjOXhfcmRmaWZvKHNj
LCBOQ1JfUkRGSUZPX1NUQVJUKTsNClgJCQlpZiAoc2MtPnNjX2ltbGVuIDwg
MikNClgJCQkJcHJpbnRmKCIlczogY2FuJ3QgZ2V0IHN0YXR1cywgb25seSAl
ZCBieXRlc1xuIiwgDQpYCQkJCSAgICAgICBzYy0+c2NfZGV2LmR2X3huYW1l
LCAoaW50KXNjLT5zY19pbWxlbik7DQpYCQkJZWNiLT5zdGF0ID0gc2MtPnNj
X2ltZXNzW3NjLT5zY19pbWxlbiAtIDJdOw0KWAkJCW1zZyA9IHNjLT5zY19p
bWVzc1tzYy0+c2NfaW1sZW4gLSAxXTsNClgJCQlOQ1JfUEhBU0UoKCI8c3Rh
dDooJXgsJXgpPiIsIGVjYi0+c3RhdCwgbXNnKSk7DQpYCQkJaWYgKG1zZyA9
PSBNU0dfQ01EQ09NUExFVEUpIHsNClgJCQkJZWNiLT5kbGVmdCA9IChlY2It
PmZsYWdzICYgRUNCX1RFTlRBVElWRV9ET05FKQ0KWAkJCQkJPyAwDQpYCQkJ
CQk6IHNjLT5zY19kbGVmdDsNClgJCQkJaWYgKChlY2ItPmZsYWdzICYgRUNC
X1NFTlNFKSA9PSAwKQ0KWAkJCQkJZWNiLT54cy0+cmVzaWQgPSBlY2ItPmRs
ZWZ0Ow0KWAkJCQlzYy0+c2Nfc3RhdGUgPSBOQ1JfQ01EQ09NUExFVEU7DQpY
CQkJfSBlbHNlDQpYCQkJCXByaW50ZigiJXM6IFNUQVRVU19QSEFTRTogbXNn
ICVkXG4iLA0KWAkJCQkJc2MtPnNjX2Rldi5kdl94bmFtZSwgbXNnKTsNClgJ
CQlzYy0+c2NfaW1sZW4gPSAwOw0KWAkJCU5DUkNNRChzYywgTkNSQ01EX01T
R09LKTsNClgJCQlnb3RvIHNob3J0Y3V0OyAvKiBpZS4gd2FpdCBmb3IgZGlz
Y29ubmVjdCAqLw0KWAkJfQ0KWAkJYnJlYWs7DQpYDQpYCWRlZmF1bHQ6DQpY
CQlwYW5pYygiJXM6IGludmFsaWQgc3RhdGU6ICVkIiwNClgJCSAgICAgIHNj
LT5zY19kZXYuZHZfeG5hbWUsDQpYCQkgICAgICBzYy0+c2Nfc3RhdGUpOw0K
WAl9DQpYDQpYCS8qDQpYCSAqIERyaXZlciBpcyBub3cgaW4gc3RhdGUgTkNS
X0NPTk5FQ1RFRCwgaS5lLiB3ZQ0KWAkgKiBoYXZlIGEgY3VycmVudCBjb21t
YW5kIHdvcmtpbmcgdGhlIFNDU0kgYnVzLg0KWAkgKi8NClgJaWYgKHNjLT5z
Y19zdGF0ZSAhPSBOQ1JfQ09OTkVDVEVEIHx8IGVjYiA9PSBOVUxMKSB7DQpY
CQlwYW5pYygibmNyNTNjOXg6IG5vIG5leHVzIik7DQpYCX0NClgNClgJc3dp
dGNoIChzYy0+c2NfcGhhc2UpIHsNClgJY2FzZSBNRVNTQUdFX09VVF9QSEFT
RToNClgJCU5DUl9QSEFTRSgoIk1FU1NBR0VfT1VUX1BIQVNFICIpKTsNClgJ
CW5jcjUzYzl4X21zZ291dChzYyk7DQpYCQlzYy0+c2NfcHJldnBoYXNlID0g
TUVTU0FHRV9PVVRfUEhBU0U7DQpYCQlicmVhazsNClgNClgJY2FzZSBNRVNT
QUdFX0lOX1BIQVNFOg0KWG1zZ2luOg0KWAkJTkNSX1BIQVNFKCgiTUVTU0FH
RV9JTl9QSEFTRSAiKSk7DQpYCQlpZiAoKHNjLT5zY19lc3BpbnRyICYgTkNS
SU5UUl9CUykgIT0gMCkgew0KWAkJCWlmICgoc2MtPnNjX3JldiAhPSBOQ1Jf
VkFSSUFOVF9GQVMzNjYpIHx8DQpYCQkJICAgICEoc2MtPnNjX2VzcHN0YXQy
ICYgRkFTX1NUQVQyX0VNUFRZKSkgew0KWAkJCQlOQ1JDTUQoc2MsIE5DUkNN
RF9GTFVTSCk7DQpYCQkJfQ0KWAkJCXNjLT5zY19mbGFncyB8PSBOQ1JfV0FJ
VEk7DQpYCQkJTkNSQ01EKHNjLCBOQ1JDTURfVFJBTlMpOw0KWAkJfSBlbHNl
IGlmICgoc2MtPnNjX2VzcGludHIgJiBOQ1JJTlRSX0ZDKSAhPSAwKSB7DQpY
CQkJaWYgKChzYy0+c2NfZmxhZ3MgJiBOQ1JfV0FJVEkpID09IDApIHsNClgJ
CQkJcHJpbnRmKCIlczogTVNHSU46IHVuZXhwZWN0ZWQgRkMgYml0OiAiDQpY
CQkJCQkiW2ludHIgJXgsIHN0YXQgJXgsIHN0ZXAgJXhdXG4iLA0KWAkJCQlz
Yy0+c2NfZGV2LmR2X3huYW1lLA0KWAkJCQlzYy0+c2NfZXNwaW50ciwgc2Mt
PnNjX2VzcHN0YXQsDQpYCQkJCXNjLT5zY19lc3BzdGVwKTsNClgJCQl9DQpY
CQkJc2MtPnNjX2ZsYWdzICY9IH5OQ1JfV0FJVEk7DQpYCQkJbmNyNTNjOXhf
cmRmaWZvKHNjLA0KWAkJCSAgICAoc2MtPnNjX3ByZXZwaGFzZSA9PSBzYy0+
c2NfcGhhc2UpID8gDQpYCQkJICAgIE5DUl9SREZJRk9fQ09OVElOVUUgOiBO
Q1JfUkRGSUZPX1NUQVJUKTsNClgJCQluY3I1M2M5eF9tc2dpbihzYyk7DQpY
CQl9IGVsc2Ugew0KWAkJCXByaW50ZigiJXM6IE1TR0lOOiB3ZWlyZCBiaXRz
OiAiDQpYCQkJCSJbaW50ciAleCwgc3RhdCAleCwgc3RlcCAleF1cbiIsDQpY
CQkJCXNjLT5zY19kZXYuZHZfeG5hbWUsDQpYCQkJCXNjLT5zY19lc3BpbnRy
LCBzYy0+c2NfZXNwc3RhdCwNClgJCQkJc2MtPnNjX2VzcHN0ZXApOw0KWAkJ
fQ0KWAkJc2MtPnNjX3ByZXZwaGFzZSA9IE1FU1NBR0VfSU5fUEhBU0U7DQpY
CQlnb3RvIHNob3J0Y3V0OwkvKiBpLmUuIGV4cGVjdCBkYXRhIHRvIGJlIHJl
YWR5ICovDQpYCQlicmVhazsNClgNClgJY2FzZSBDT01NQU5EX1BIQVNFOg0K
WAkJLyoNClgJCSAqIFNlbmQgdGhlIGNvbW1hbmQgYmxvY2suIE5vcm1hbGx5
IHdlIGRvbid0IHNlZSB0aGlzDQpYCQkgKiBwaGFzZSBiZWNhdXNlIHRoZSBT
RUxfQVROIGNvbW1hbmQgdGFrZXMgY2FyZSBvZg0KWAkJICogYWxsIHRoaXMu
IEhvd2V2ZXIsIHdlIGVuZCB1cCBoZXJlIGlmIGVpdGhlciB0aGUNClgJCSAq
IHRhcmdldCBvciB3ZSB3YW50ZWQgdG8gZXhjaGFuZ2Ugc29tZSBtb3JlIG1l
c3NhZ2VzDQpYCQkgKiBmaXJzdCAoZS5nLiB0byBzdGFydCBuZWdvdGlhdGlv
bnMpLg0KWAkJICovDQpYDQpYCQlOQ1JfUEhBU0UoKCJDT01NQU5EX1BIQVNF
IDB4JTAyeCAoJWQpICIsDQpYCQkJZWNiLT5jbWQuY21kLm9wY29kZSwgZWNi
LT5jbGVuKSk7DQpYCQlpZiAoTkNSX1JFQURfUkVHKHNjLCBOQ1JfRkZMQUcp
ICYgTkNSRklGT19GRikgew0KWAkJCU5DUkNNRChzYywgTkNSQ01EX0ZMVVNI
KTsNClgvKgkJCURFTEFZKDEpOyovDQpYCQl9DQpYCQlpZiAoc2MtPnNjX2Zl
YXR1cmVzICYgTkNSX0ZfRE1BU0VMRUNUKSB7DQpYCQkJc2l6ZV90IHNpemU7
DQpYCQkJLyogc2V0dXAgRE1BIHRyYW5zZmVyIGZvciBjb21tYW5kICovDQpY
CQkJc2l6ZSA9IGVjYi0+Y2xlbjsNClgJCQlzYy0+c2NfY21kbGVuID0gc2l6
ZTsNClgJCQlzYy0+c2NfY21kcCA9IChjYWRkcl90KSZlY2ItPmNtZC5jbWQ7
DQpYCQkJTkNSRE1BX1NFVFVQKHNjLCAmc2MtPnNjX2NtZHAsICZzYy0+c2Nf
Y21kbGVuLA0KWAkJCQkgICAgIDAsICZzaXplKTsNClgJCQkvKiBQcm9ncmFt
IHRoZSBTQ1NJIGNvdW50ZXIgKi8NClgJCQlOQ1JfU0VUX0NPVU5UKHNjLCBz
aXplKTsNClgNClgJCQkvKiBsb2FkIHRoZSBjb3VudCBpbiAqLw0KWAkJCU5D
UkNNRChzYywgTkNSQ01EX05PUHxOQ1JDTURfRE1BKTsNClgNClgJCQkvKiBz
dGFydCB0aGUgY29tbWFuZCB0cmFuc2ZlciAqLw0KWAkJCU5DUkNNRChzYywg
TkNSQ01EX1RSQU5TIHwgTkNSQ01EX0RNQSk7DQpYCQkJTkNSRE1BX0dPKHNj
KTsNClgJCX0gZWxzZSB7DQpYCQkJbmNyNTNjOXhfd3JmaWZvKHNjLCAodV9j
aGFyICopJmVjYi0+Y21kLmNtZCwgZWNiLT5jbGVuKTsNClgJCQlOQ1JDTUQo
c2MsIE5DUkNNRF9UUkFOUyk7DQpYCQl9DQpYCQlzYy0+c2NfcHJldnBoYXNl
ID0gQ09NTUFORF9QSEFTRTsNClgJCWJyZWFrOw0KWA0KWAljYXNlIERBVEFf
T1VUX1BIQVNFOg0KWAkJTkNSX1BIQVNFKCgiREFUQV9PVVRfUEhBU0UgWyVs
ZF0gIiwobG9uZylzYy0+c2NfZGxlZnQpKTsNClgJCU5DUkNNRChzYywgTkNS
Q01EX0ZMVVNIKTsNClgJCXNpemUgPSBtaW4oc2MtPnNjX2RsZWZ0LCBzYy0+
c2NfbWF4eGZlcik7DQpYCQlOQ1JETUFfU0VUVVAoc2MsICZzYy0+c2NfZHAs
ICZzYy0+c2NfZGxlZnQsDQpYCQkJICAwLCAmc2l6ZSk7DQpYCQlzYy0+c2Nf
cHJldnBoYXNlID0gREFUQV9PVVRfUEhBU0U7DQpYCQlnb3RvIHNldHVwX3hm
ZXI7DQpYDQpYCWNhc2UgREFUQV9JTl9QSEFTRToNClgJCU5DUl9QSEFTRSgo
IkRBVEFfSU5fUEhBU0UgIikpOw0KWAkJaWYgKHNjLT5zY19yZXYgPT0gTkNS
X1ZBUklBTlRfRVNQMTAwKQ0KWAkJCU5DUkNNRChzYywgTkNSQ01EX0ZMVVNI
KTsNClgJCXNpemUgPSBtaW4oc2MtPnNjX2RsZWZ0LCBzYy0+c2NfbWF4eGZl
cik7DQpYCQlOQ1JETUFfU0VUVVAoc2MsICZzYy0+c2NfZHAsICZzYy0+c2Nf
ZGxlZnQsDQpYCQkJICAxLCAmc2l6ZSk7DQpYCQlzYy0+c2NfcHJldnBoYXNl
ID0gREFUQV9JTl9QSEFTRTsNClgJc2V0dXBfeGZlcjoNClgJCS8qIFRhcmdl
dCByZXR1cm5lZCB0byBkYXRhIHBoYXNlOiB3aXBlICJkb25lIiBtZW1vcnkg
Ki8NClgJCWVjYi0+ZmxhZ3MgJj0gfkVDQl9URU5UQVRJVkVfRE9ORTsNClgN
ClgJCS8qIFByb2dyYW0gdGhlIFNDU0kgY291bnRlciAqLw0KWAkJTkNSX1NF
VF9DT1VOVChzYywgc2l6ZSk7DQpYDQpYCQkvKiBsb2FkIHRoZSBjb3VudCBp
biAqLw0KWAkJTkNSQ01EKHNjLCBOQ1JDTURfTk9QfE5DUkNNRF9ETUEpOw0K
WA0KWAkJLyoNClgJCSAqIE5vdGUgdGhhdCBpZiBgc2l6ZScgaXMgMCwgd2Un
dmUgYWxyZWFkeSB0cmFuc2NlaXZlZA0KWAkJICogYWxsIHRoZSBieXRlcyB3
ZSB3YW50IGJ1dCB3ZSdyZSBzdGlsbCBpbiBEQVRBIFBIQVNFLg0KWAkJICog
QXBwYXJlbnRseSwgdGhlIGRldmljZSBuZWVkcyBwYWRkaW5nLiBBbHNvLCBh
DQpYCQkgKiB0cmFuc2ZlciBzaXplIG9mIDAgbWVhbnMgIm1heGltdW0iIHRv
IHRoZSBjaGlwDQpYCQkgKiBETUEgbG9naWMuDQpYCQkgKi8NClgJCU5DUkNN
RChzYywNClgJCSAgICAgICAoc2l6ZT09MD9OQ1JDTURfVFJQQUQ6TkNSQ01E
X1RSQU5TKXxOQ1JDTURfRE1BKTsNClgJCU5DUkRNQV9HTyhzYyk7DQpYCQly
ZXR1cm4gKDEpOw0KWA0KWAljYXNlIFNUQVRVU19QSEFTRToNClgJCU5DUl9Q
SEFTRSgoIlNUQVRVU19QSEFTRSAiKSk7DQpYCQlzYy0+c2NfZmxhZ3MgfD0g
TkNSX0lDQ1M7DQpYCQlOQ1JDTUQoc2MsIE5DUkNNRF9JQ0NTKTsNClgJCXNj
LT5zY19wcmV2cGhhc2UgPSBTVEFUVVNfUEhBU0U7DQpYCQlnb3RvIHNob3J0
Y3V0OwkvKiBpLmUuIGV4cGVjdCBzdGF0dXMgcmVzdWx0cyBzb29uICovDQpY
CQlicmVhazsNClgNClgJY2FzZSBJTlZBTElEX1BIQVNFOg0KWAkJYnJlYWs7
DQpYDQpYCWRlZmF1bHQ6DQpYCQlwcmludGYoIiVzOiB1bmV4cGVjdGVkIGJ1
cyBwaGFzZTsgcmVzZXR0aW5nXG4iLA0KWAkJICAgICAgIHNjLT5zY19kZXYu
ZHZfeG5hbWUpOw0KWAkJZ290byByZXNldDsNClgJfQ0KWA0KWG91dDoNClgJ
cmV0dXJuICgxKTsNClgNClhyZXNldDoNClgJbmNyNTNjOXhfaW5pdChzYywg
MSk7DQpYCWdvdG8gb3V0Ow0KWA0KWGZpbmlzaDoNClgJbmNyNTNjOXhfZG9u
ZShzYywgZWNiKTsNClgJZ290byBvdXQ7DQpYDQpYc2NoZWQ6DQpYCXNjLT5z
Y19zdGF0ZSA9IE5DUl9JRExFOw0KWAluY3I1M2M5eF9zY2hlZChzYyk7DQpY
CWdvdG8gb3V0Ow0KWA0KWHNob3J0Y3V0Og0KWAkvKg0KWAkgKiBUaGUgaWRl
YSBpcyB0aGF0IG1hbnkgb2YgdGhlIFNDU0kgb3BlcmF0aW9ucyB0YWtlIHZl
cnkgbGl0dGxlDQpYCSAqIHRpbWUsIGFuZCBnb2luZyBhd2F5IGFuZCBnZXR0
aW5nIGludGVycnVwdGVkIGlzIHRvbyBoaWdoIGFuDQpYCSAqIG92ZXJoZWFk
IHRvIHBheS4gRm9yIGV4YW1wbGUsIHNlbGVjdGluZywgc2VuZGluZyBhIG1l
c3NhZ2UNClgJICogYW5kIGNvbW1hbmQgYW5kIHRoZW4gZG9pbmcgc29tZSB3
b3JrIGNhbiBiZSBkb25lIGluIG9uZSAicGFzcyIuDQpYCSAqDQpYCSAqIFRo
ZSBkZWxheSBpcyBhIGhldXJpc3RpYy4gSXQgaXMgMiB3aGVuIGF0IDIwTWh6
LCAyIGF0IDI1TWh6IGFuZCAxDQpYCSAqIGF0IDQwTWh6LiBUaGlzIG5lZWRz
IHRlc3RpbmcuDQpYCSAqLw0KWAl7IA0KWAkJc3RydWN0IHRpbWV2YWwgd2Fp
dCwgY3VyOw0KWA0KWAkJbWljcm90aW1lKCZ3YWl0KTsNClgJCXdhaXQudHZf
dXNlYyArPSA1MC9zYy0+c2NfZnJlcTsNClgJCWlmICh3YWl0LnR2X3VzZWMg
PiAxMDAwMDAwKSB7DQpYCQkJd2FpdC50dl9zZWMrKzsNClgJCQl3YWl0LnR2
X3VzZWMgLT0gMTAwMDAwMDsNClgJCX0NClgJCWRvIHsNClgJCQlpZiAoTkNS
RE1BX0lTSU5UUihzYykpDQpYCQkJCWdvdG8gYWdhaW47DQpYCQkJbWljcm90
aW1lKCZjdXIpOw0KWAkJfSB3aGlsZSAoY3VyLnR2X3NlYyA8PSB3YWl0LnR2
X3NlYyAmJiANClgJCQkgY3VyLnR2X3VzZWMgPD0gd2FpdC50dl91c2VjKTsN
ClgJfQ0KWAlnb3RvIG91dDsNClh9DQpYDQpYdm9pZA0KWG5jcjUzYzl4X2Fi
b3J0KHNjLCBlY2IpDQpYCXN0cnVjdCBuY3I1M2M5eF9zb2Z0YyAqc2M7DQpY
CXN0cnVjdCBuY3I1M2M5eF9lY2IgKmVjYjsNClh7DQpYDQpYCS8qIDIgc2Vj
cyBmb3IgdGhlIGFib3J0ICovDQpYCWVjYi0+dGltZW91dCA9IE5DUl9BQk9S
VF9USU1FT1VUOw0KWAllY2ItPmZsYWdzIHw9IEVDQl9BQk9SVDsNClgNClgJ
aWYgKGVjYiA9PSBzYy0+c2NfbmV4dXMpIHsNClgJCWludCB0aW1lb3V0Ow0K
WA0KWAkJLyoNClgJCSAqIElmIHdlJ3JlIHN0aWxsIHNlbGVjdGluZywgdGhl
IG1lc3NhZ2Ugd2lsbCBiZSBzY2hlZHVsZWQNClgJCSAqIGFmdGVyIHNlbGVj
dGlvbiBpcyBjb21wbGV0ZS4NClgJCSAqLw0KWAkJaWYgKHNjLT5zY19zdGF0
ZSA9PSBOQ1JfQ09OTkVDVEVEKQ0KWAkJCW5jcjUzYzl4X3NjaGVkX21zZ291
dChTRU5EX0FCT1JUKTsNClgNClgJCS8qDQpYCQkgKiBSZXNjaGVkdWxlIHRp
bWVvdXQuDQpYCQkgKi8NClgJCXRpbWVvdXQgPSBlY2ItPnRpbWVvdXQ7DQpY
CQlpZiAoaHogPiAxMDAgJiYgdGltZW91dCA+IDEwMDApDQpYCQkJdGltZW91
dCA9ICh0aW1lb3V0IC8gMTAwMCkgKiBoejsNClgJCWVsc2UNClgJCQl0aW1l
b3V0ID0gKHRpbWVvdXQgKiBoeikgLyAxMDAwOw0KWAkJY2FsbG91dF9yZXNl
dCgmZWNiLT54cy0+eHNfY2FsbG91dCwgdGltZW91dCwNClgJCSAgICBuY3I1
M2M5eF90aW1lb3V0LCBlY2IpOw0KWAl9IGVsc2Ugew0KWAkJLyoNClgJCSAq
IEp1c3QgbGVhdmUgdGhlIGNvbW1hbmQgd2hlcmUgaXQgaXMuDQpYCQkgKiBY
WFggLSB3aGF0IGNob2ljZSBkbyB3ZSBoYXZlIGJ1dCB0byByZXNldCB0aGUg
U0NTSQ0KWAkJICoJIGV2ZW50dWFsbHk/DQpYCQkgKi8NClgJCWlmIChzYy0+
c2Nfc3RhdGUgPT0gTkNSX0lETEUpDQpYCQkJbmNyNTNjOXhfc2NoZWQoc2Mp
Ow0KWAl9DQpYfQ0KWA0KWHZvaWQNClhuY3I1M2M5eF90aW1lb3V0KGFyZykN
ClgJdm9pZCAqYXJnOw0KWHsNClgJc3RydWN0IG5jcjUzYzl4X2VjYiAqZWNi
ID0gYXJnOw0KWAlzdHJ1Y3Qgc2NzaXBpX3hmZXIgKnhzID0gZWNiLT54czsN
ClgJc3RydWN0IHNjc2lwaV9saW5rICpzY19saW5rID0geHMtPnNjX2xpbms7
DQpYCXN0cnVjdCBuY3I1M2M5eF9zb2Z0YyAqc2MgPSBzY19saW5rLT5hZGFw
dGVyX3NvZnRjOw0KWAlzdHJ1Y3QgbmNyNTNjOXhfdGluZm8gKnRpID0gJnNj
LT5zY190aW5mb1tzY19saW5rLT5zY3NpcGlfc2NzaS50YXJnZXRdOw0KWAlp
bnQgczsNClgNClgJc2NzaV9wcmludF9hZGRyKHNjX2xpbmspOw0KWAlwcmlu
dGYoIiVzOiB0aW1lZCBvdXQgW2VjYiAlcCAoZmxhZ3MgMHgleCwgZGxlZnQg
JXgsIHN0YXQgJXgpXSwgIg0KWAkgICAgICAgIjxzdGF0ZSAlZCwgbmV4dXMg
JXAsIHBoYXNlKGwgJXgsIGMgJXgsIHAgJXgpLCByZXNpZCAlbHgsICINClgJ
ICAgICAgICJtc2cocSAleCxvICV4KSAlcz4iLA0KWAkJc2MtPnNjX2Rldi5k
dl94bmFtZSwNClgJCWVjYiwgZWNiLT5mbGFncywgZWNiLT5kbGVmdCwgZWNi
LT5zdGF0LA0KWAkJc2MtPnNjX3N0YXRlLCBzYy0+c2NfbmV4dXMsDQpYCQlO
Q1JfUkVBRF9SRUcoc2MsIE5DUl9TVEFUKSwNClgJCXNjLT5zY19waGFzZSwg
c2MtPnNjX3ByZXZwaGFzZSwNClgJCShsb25nKXNjLT5zY19kbGVmdCwgc2Mt
PnNjX21zZ3ByaXEsIHNjLT5zY19tc2dvdXQsDQpYCQlOQ1JETUFfSVNBQ1RJ
VkUoc2MpID8gIkRNQSBhY3RpdmUiIDogIiIpOw0KWCNpZiBOQ1I1M0M5WF9E
RUJVRyA+IDENClgJcHJpbnRmKCJUUkFDRTogJXMuIiwgZWNiLT50cmFjZSk7
DQpYI2VuZGlmDQpYDQpYCXMgPSBzcGxiaW8oKTsNClgNClgJaWYgKGVjYi0+
ZmxhZ3MgJiBFQ0JfQUJPUlQpIHsNClgJCS8qIGFib3J0IHRpbWVkIG91dCAq
Lw0KWAkJcHJpbnRmKCIgQUdBSU5cbiIpOw0KWA0KWAkJbmNyNTNjOXhfaW5p
dChzYywgMSk7DQpYCX0gZWxzZSB7DQpYCQkvKiBhYm9ydCB0aGUgb3BlcmF0
aW9uIHRoYXQgaGFzIHRpbWVkIG91dCAqLw0KWAkJcHJpbnRmKCJcbiIpOw0K
WAkJeHMtPmVycm9yID0gWFNfVElNRU9VVDsNClgJCW5jcjUzYzl4X2Fib3J0
KHNjLCBlY2IpOw0KWA0KWAkJLyogRGlzYWJsZSBzeW5jIG1vZGUgaWYgc3R1
Y2sgaW4gYSBkYXRhIHBoYXNlICovDQpYCQlpZiAoZWNiID09IHNjLT5zY19u
ZXh1cyAmJg0KWAkJICAgICh0aS0+ZmxhZ3MgJiBUX1NZTkNNT0RFKSAhPSAw
ICYmDQpYCQkgICAgKHNjLT5zY19waGFzZSAmIChNU0dJfENESSkpID09IDAp
IHsNClgJCQlzY3NpX3ByaW50X2FkZHIoc2NfbGluayk7DQpYCQkJcHJpbnRm
KCJzeW5jIG5lZ290aWF0aW9uIGRpc2FibGVkXG4iKTsNClgJCQlzYy0+c2Nf
Y2ZmbGFncyB8PSAoMTw8KHNjX2xpbmstPnNjc2lwaV9zY3NpLnRhcmdldCs4
KSk7DQpYCQl9DQpYCX0NClgNClgJc3BseChzKTsNClh9DQpYDQpYdm9pZA0K
WG5jcjUzYzl4X3dhdGNoKGFyZykNClgJdm9pZCAqYXJnOw0KWHsNClgJc3Ry
dWN0IG5jcjUzYzl4X3NvZnRjICpzYyA9IChzdHJ1Y3QgbmNyNTNjOXhfc29m
dGMgKilhcmc7DQpYCXN0cnVjdCBuY3I1M2M5eF90aW5mbyAqdGk7DQpYCXN0
cnVjdCBuY3I1M2M5eF9saW5mbyAqbGk7DQpYCWludCB0LCBzOw0KWAkvKiBE
ZWxldGUgYW55IHN0cnVjdHVyZXMgdGhhdCBoYXZlIG5vdCBiZWVuIHVzZWQg
aW4gMTBtaW4uICovDQpYCXRpbWVfdCBvbGQgPSB0aW1lLnR2X3NlYyAtICgx
MCo2MCk7DQpYDQpYCXMgPSBzcGxiaW8oKTsNClgJZm9yICh0PTA7IHQ8TkNS
X05UQVJHOyB0KyspIHsNClgJCXRpID0gJnNjLT5zY190aW5mb1t0XTsNClgJ
CWxpID0gTElTVF9GSVJTVCgmdGktPmx1bnMpOw0KWAkJd2hpbGUgKGxpKSB7
DQpYCQkJaWYgKGxpLT5sYXN0X3VzZWQgPCBvbGQgJiYgbGktPnVudGFnZ2Vk
ID09IE5VTEwgJiYNClgJCQkgICAgbGktPnVzZWQgPT0gMCkgew0KWAkJCQlp
ZiAobGktPmx1biA8IE5DUl9OTFVOKQ0KWAkJCQkJdGktPmx1bltsaS0+bHVu
XSA9IE5VTEw7DQpYCQkJCUxJU1RfUkVNT1ZFKGxpLCBsaW5rKTsNClgJCQkJ
ZnJlZShsaSwgTV9ERVZCVUYpOw0KWAkJCQkvKiBSZXN0YXJ0IHRoZSBzZWFy
Y2ggYXQgdGhlIGJlZ2lubmluZyAqLw0KWAkJCQlsaSA9IExJU1RfRklSU1Qo
JnRpLT5sdW5zKTsNClgJCQkJY29udGludWU7IA0KWAkJCX0NClgJCQlsaSA9
IExJU1RfTkVYVChsaSwgbGluayk7DQpYCQl9DQpYCX0NClgJc3BseChzKTsN
ClgJY2FsbG91dF9yZXNldCgmc2MtPnNjX3dhdGNoZG9nLCA2MCpoeiwgbmNy
NTNjOXhfd2F0Y2gsIHNjKTsNClh9DQpYDQpFTkQtb2YtaWMvbmNyNTNjOXgu
Yw0KZWNobyB4IC0gaWMvbmNyNTNjOXhyZWcuaA0Kc2VkICdzL15YLy8nID5p
Yy9uY3I1M2M5eHJlZy5oIDw8ICdFTkQtb2YtaWMvbmNyNTNjOXhyZWcuaCcN
ClgvKgkkTmV0QlNEOiBuY3I1M2M5eHJlZy5oLHYgMS43IDIwMDAvMDMvMjAg
MDA6NTA6MjAgbXljcm9mdCBFeHAgJAkqLw0KWA0KWC8qDQpYICogQ29weXJp
Z2h0IChjKSAxOTk0IFBldGVyIEdhbGJhdnkuICBBbGwgcmlnaHRzIHJlc2Vy
dmVkLg0KWCAqDQpYICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0DQpYICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zDQpYICogYXJlIG1ldDoNClggKiAxLiBSZWRp
c3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFi
b3ZlIGNvcHlyaWdodA0KWCAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4NClggKiAy
LiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1
Y2UgdGhlIGFib3ZlIGNvcHlyaWdodA0KWCAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ciBpbiB0aGUNClggKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLg0KWCAq
IDMuIEFsbCBhZHZlcnRpc2luZyBtYXRlcmlhbHMgbWVudGlvbmluZyBmZWF0
dXJlcyBvciB1c2Ugb2YgdGhpcyBzb2Z0d2FyZQ0KWCAqICAgIG11c3QgZGlz
cGxheSB0aGUgZm9sbG93aW5nIGFja25vd2xlZGdlbWVudDoNClggKglUaGlz
IHByb2R1Y3QgaW5jbHVkZXMgc29mdHdhcmUgZGV2ZWxvcGVkIGJ5IFBldGVy
IEdhbGJhdnkuDQpYICogNC4gVGhlIG5hbWUgb2YgdGhlIGF1dGhvciBtYXkg
bm90IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzDQpY
ICogICAgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVj
aWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uDQpYICoNClggKiBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBBVVRIT1IgYGBBUyBJUycn
IEFORCBBTlkgRVhQUkVTUyBPUg0KWCAqIElNUExJRUQgV0FSUkFOVElFUywg
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdB
UlJBTlRJRVMNClggKiBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELg0KWCAq
IElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1IgQkUgTElBQkxFIEZPUiBB
TlkgRElSRUNULCBJTkRJUkVDVCwNClggKiBJTkNJREVOVEFMLCBTUEVDSUFM
LCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVE
SU5HLCBCVVQNClggKiBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0Yg
U1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsDQpY
ICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9O
KSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZDQpYICogVEhFT1JZIE9GIExJ
QUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElU
WSwgT1IgVE9SVA0KWCAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhF
UldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRg0K
WCAqIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuDQpYICovDQpYDQpYLyoNClggKiBS
ZWdpc3RlciBhZGRyZXNzZXMsIHJlbGF0aXZlIHRvIHNvbWUgYmFzZSBhZGRy
ZXNzDQpYICovDQpYDQpYI2RlZmluZQlOQ1JfVENMCQkweDAwCQkvKiBSVyAt
IFRyYW5zZmVyIENvdW50IExvdwkqLw0KWCNkZWZpbmUJTkNSX1RDTQkJMHgw
MQkJLyogUlcgLSBUcmFuc2ZlciBDb3VudCBNaWQJKi8NClgjZGVmaW5lCU5D
Ul9UQ0gJCTB4MGUJCS8qIFJXIC0gVHJhbnNmZXIgQ291bnQgSGlnaAkqLw0K
WAkJCQkJLyoJTk9UIG9uIDUzQzkwCQkqLw0KWA0KWCNkZWZpbmUJTkNSX0ZJ
Rk8JMHgwMgkJLyogUlcgLSBGSUZPIGRhdGEJCSovDQpYDQpYI2RlZmluZQlO
Q1JfQ01ECQkweDAzCQkvKiBSVyAtIENvbW1hbmQgKDIgZGVlcCkJKi8NClgj
ZGVmaW5lICBOQ1JDTURfRE1BCTB4ODAJCS8qCURNQSBCaXQJCQkqLw0KWCNk
ZWZpbmUgIE5DUkNNRF9OT1AJMHgwMAkJLyoJTm8gT3BlcmF0aW9uCQkqLw0K
WCNkZWZpbmUgIE5DUkNNRF9GTFVTSAkweDAxCQkvKglGbHVzaCBGSUZPCQkq
Lw0KWCNkZWZpbmUgIE5DUkNNRF9SU1RDSElQCTB4MDIJCS8qCVJlc2V0IENo
aXAJCSovDQpYI2RlZmluZSAgTkNSQ01EX1JTVFNDU0kJMHgwMwkJLyoJUmVz
ZXQgU0NTSSBCdXMJCSovDQpYI2RlZmluZSAgTkNSQ01EX1JFU0VMCTB4NDAJ
CS8qCVJlc2VsZWN0IFNlcXVlbmNlCSovDQpYI2RlZmluZSAgTkNSQ01EX1NF
TE5BVE4JMHg0MQkJLyoJU2VsZWN0IHdpdGhvdXQgQVROCSovDQpYI2RlZmlu
ZSAgTkNSQ01EX1NFTEFUTgkweDQyCQkvKglTZWxlY3Qgd2l0aCBBVE4JCSov
DQpYI2RlZmluZSAgTkNSQ01EX1NFTEFUTlMJMHg0MwkJLyoJU2VsZWN0IHdp
dGggQVROICYgU3RvcAkqLw0KWCNkZWZpbmUgIE5DUkNNRF9FTlNFTAkweDQ0
CQkvKglFbmFibGUgKFJlKVNlbGVjdGlvbgkqLw0KWCNkZWZpbmUgIE5DUkNN
RF9ESVNTRUwJMHg0NQkJLyoJRGlzYWJsZSAoUmUpU2VsZWN0aW9uCSovDQpY
I2RlZmluZSAgTkNSQ01EX1NFTEFUTjMJMHg0NgkJLyoJU2VsZWN0IHdpdGgg
QVROMwkqLw0KWCNkZWZpbmUgIE5DUkNNRF9SRVNFTDMJMHg0NwkJLyoJUmVz
ZWxlY3QzIFNlcXVlbmNlCSovDQpYI2RlZmluZSAgTkNSQ01EX1NORE1TRwkw
eDIwCQkvKglTZW5kIE1lc3NhZ2UJCSovDQpYI2RlZmluZSAgTkNSQ01EX1NO
RFNUQVQJMHgyMQkJLyoJU2VuZCBTdGF0dXMJCSovDQpYI2RlZmluZSAgTkNS
Q01EX1NORERBVEEJMHgyMgkJLyoJU2VuZCBEYXRhCQkqLw0KWCNkZWZpbmUg
IE5DUkNNRF9ESVNDU0VRCTB4MjMJCS8qCURpc2Nvbm5lY3QgU2VxdWVuY2UJ
Ki8NClgjZGVmaW5lICBOQ1JDTURfVEVSTVNFUQkweDI0CQkvKglUZXJtaW5h
dGUgU2VxdWVuY2UJKi8NClgjZGVmaW5lICBOQ1JDTURfVENDUwkweDI1CQkv
KglUYXJnZXQgQ29tbWFuZCBDb21wIFNlcQkqLw0KWCNkZWZpbmUgIE5DUkNN
RF9ESVNDCTB4MjcJCS8qCURpc2Nvbm5lY3QJCSovDQpYI2RlZmluZSAgTkNS
Q01EX1JFQ01TRwkweDI4CQkvKglSZWNlaXZlIE1lc3NhZ2UJCSovDQpYI2Rl
ZmluZSAgTkNSQ01EX1JFQ0NNRAkweDI5CQkvKglSZWNlaXZlIENvbW1hbmQg
CSovDQpYI2RlZmluZSAgTkNSQ01EX1JFQ0RBVEEJMHgyYQkJLyoJUmVjZWl2
ZSBEYXRhCQkqLw0KWCNkZWZpbmUgIE5DUkNNRF9SRUNDU0VRCTB4MmIJCS8q
CVJlY2VpdmUgQ29tbWFuZCBTZXF1ZW5jZSovDQpYI2RlZmluZSAgTkNSQ01E
X0FCT1JUCTB4MDQJCS8qCVRhcmdldCBBYm9ydCBETUEJKi8NClgjZGVmaW5l
ICBOQ1JDTURfVFJBTlMJMHgxMAkJLyoJVHJhbnNmZXIgSW5mb3JtYXRpb24J
Ki8NClgjZGVmaW5lICBOQ1JDTURfSUNDUwkweDExCQkvKglJbml0aWF0b3Ig
Q21kIENvbXAgU2VxIAkqLw0KWCNkZWZpbmUgIE5DUkNNRF9NU0dPSwkweDEy
CQkvKglNZXNzYWdlIEFjY2VwdGVkCSovDQpYI2RlZmluZSAgTkNSQ01EX1RS
UEFECTB4MTgJCS8qCVRyYW5zZmVyIFBhZAkJKi8NClgjZGVmaW5lICBOQ1JD
TURfU0VUQVROCTB4MWEJCS8qCVNldCBBVE4JCQkqLw0KWCNkZWZpbmUgIE5D
UkNNRF9SU1RBVE4JMHgxYgkJLyoJUmVzZXQgQVROCQkqLw0KWA0KWCNkZWZp
bmUJTkNSX1NUQVQJMHgwNAkJLyogUk8gLSBTdGF0dXMJCQkqLw0KWCNkZWZp
bmUgIE5DUlNUQVRfSU5UCTB4ODAJCS8qCUludGVycnVwdAkJKi8NClgjZGVm
aW5lICBOQ1JTVEFUX0dFCTB4NDAJCS8qCUdyb3NzIEVycm9yCQkqLw0KWCNk
ZWZpbmUgIE5DUlNUQVRfUEUJMHgyMAkJLyoJUGFyaXR5IEVycm9yCQkqLw0K
WCNkZWZpbmUgIE5DUlNUQVRfVEMJMHgxMAkJLyoJVGVybWluYWwgQ291bnQJ
CSovDQpYI2RlZmluZSAgTkNSU1RBVF9WR0MJMHgwOAkJLyoJVmFsaWQgR3Jv
dXAgQ29kZQkqLw0KWCNkZWZpbmUgIE5DUlNUQVRfUEhBU0UJMHgwNwkJLyoJ
UGhhc2UgYml0cwkJKi8NClgNClgjZGVmaW5lCU5DUl9TRUxJRAkweDA0CQkv
KiBXTyAtIFNlbGVjdC9SZXNlbGVjdCBCdXMgSUQJKi8NClgjZGVmaW5lICBO
Q1JfQlVTSURfSE1FCQkweDEwIAkvKiBYWFggSE1FIHJlc2VsZWN0IElEIAkJ
Ki8NClgjZGVmaW5lICBOQ1JfQlVTSURfSE1FMzIJMHg0MAkvKiBYWFggSE1F
IHRvIHNlbGVjdCBtb3JlIHRoZW4gMTYgKi8NClgNClgjZGVmaW5lCU5DUl9J
TlRSCTB4MDUJCS8qIFJPIC0gSW50ZXJydXB0CQkqLw0KWCNkZWZpbmUgIE5D
UklOVFJfU0JSCTB4ODAJCS8qCVNDU0kgQnVzIFJlc2V0CQkqLw0KWCNkZWZp
bmUgIE5DUklOVFJfSUxMCTB4NDAJCS8qCUlsbGVnYWwgQ29tbWFuZAkJKi8N
ClgjZGVmaW5lICBOQ1JJTlRSX0RJUwkweDIwCQkvKglEaXNjb25uZWN0CQkq
Lw0KWCNkZWZpbmUgIE5DUklOVFJfQlMJMHgxMAkJLyoJQnVzIFNlcnZpY2UJ
CSovDQpYI2RlZmluZSAgTkNSSU5UUl9GQwkweDA4CQkvKglGdW5jdGlvbiBD
b21wbGV0ZQkqLw0KWCNkZWZpbmUgIE5DUklOVFJfUkVTRUwJMHgwNAkJLyoJ
UmVzZWxlY3RlZAkJKi8NClgjZGVmaW5lICBOQ1JJTlRSX1NFTEFUTgkweDAy
CQkvKglTZWxlY3Qgd2l0aCBBVE4JCSovDQpYI2RlZmluZSAgTkNSSU5UUl9T
RUwJMHgwMQkJLyoJU2VsZWN0ZWQJCSovDQpYDQpYI2RlZmluZQlOQ1JfVElN
RU9VVAkweDA1CQkvKiBXTyAtIFNlbGVjdC9SZXNlbGVjdCBUaW1lb3V0ICov
DQpYDQpYI2RlZmluZQlOQ1JfU1RFUAkweDA2CQkvKiBSTyAtIFNlcXVlbmNl
IFN0ZXAJCSovDQpYI2RlZmluZSAgTkNSU1RFUF9NQVNLCTB4MDcJCS8qCXRo
ZSBsYXN0IDMgYml0cwkJKi8NClgjZGVmaW5lICBOQ1JTVEVQX0RPTkUJMHgw
NAkJLyoJY29tbWFuZCB3ZW50IG91dAkqLw0KWA0KWCNkZWZpbmUJTkNSX1NZ
TkNUUAkweDA2CQkvKiBXTyAtIFN5bmNoIFRyYW5zZmVyIFBlcmlvZAkqLw0K
WAkJCQkJLyoJRGVmYXVsdCA1ICg1M0M5WCkJKi8NClgNClgjZGVmaW5lCU5D
Ul9GRkxBRwkweDA3CQkvKiBSTyAtIEZJRk8gRmxhZ3MJCSovDQpYI2RlZmlu
ZSAgTkNSRklGT19TUwkweGUwCQkvKglTZXF1ZW5jZSBTdGVwIChEdXApCSov
DQpYI2RlZmluZSAgTkNSRklGT19GRgkweDFmCQkvKglCeXRlcyBpbiBGSUZP
CQkqLw0KWA0KWCNkZWZpbmUJTkNSX1NZTkNPRkYJMHgwNwkJLyogV08gLSBT
eW5jaCBPZmZzZXQJCSovDQpYCQkJCQkvKgkwID0gQVNZTkMJCSovDQpYCQkJ
CQkvKgkxIC0gMTUgPSBTWU5DIGJ5dGVzCSovDQpYDQpYI2RlZmluZQlOQ1Jf
Q0ZHMQkweDA4CQkvKiBSVyAtIENvbmZpZ3VyYXRpb24gIzEJKi8NClgjZGVm
aW5lICBOQ1JDRkcxX1NMT1cJMHg4MAkJLyoJU2xvdyBDYWJsZSBNb2RlCQkq
Lw0KWCNkZWZpbmUgIE5DUkNGRzFfU1JSCTB4NDAJCS8qCVNDU0kgUmVzZXQg
UmVwIEludCBEaXMJKi8NClgjZGVmaW5lICBOQ1JDRkcxX1BURVNUCTB4MjAJ
CS8qCVBhcml0eSBUZXN0IE1vZAkJKi8NClgjZGVmaW5lICBOQ1JDRkcxX1BB
UkVOQgkweDEwCQkvKglFbmFibGUgUGFyaXR5IENoZWNrCSovDQpYI2RlZmlu
ZSAgTkNSQ0ZHMV9DVEVTVAkweDA4CQkvKglFbmFibGUgQ2hpcCBUZXN0CSov
DQpYI2RlZmluZSAgTkNSQ0ZHMV9CVVNJRAkweDA3CQkvKglCdXMgSUQJCQkq
Lw0KWA0KWCNkZWZpbmUJTkNSX0NDRgkJMHgwOQkJLyogV08gLQlDbG9jayBD
b252ZXJzaW9uIEZhY3RvcgkqLw0KWAkJCQkJLyoJMCA9IDM1LjAxIC0gNDBN
aHoJKi8NClgJCQkJCS8qCU5FVkVSIFNFVCBUTyAxCQkqLw0KWAkJCQkJLyoJ
MiA9IDEwTWh6CQkqLw0KWAkJCQkJLyoJMyA9IDEwLjAxIC0gMTVNaHoJKi8N
ClgJCQkJCS8qCTQgPSAxNS4wMSAtIDIwTWh6CSovDQpYCQkJCQkvKgk1ID0g
MjAuMDEgLSAyNU1oegkqLw0KWAkJCQkJLyoJNiA9IDI1LjAxIC0gMzBNaHoJ
Ki8NClgJCQkJCS8qCTcgPSAzMC4wMSAtIDM1TWh6CSovDQpYDQpYI2RlZmlu
ZQlOQ1JfVEVTVAkweDBhCQkvKiBXTyAtIFRlc3QgKENoaXAgVGVzdCBPbmx5
KQkqLw0KWA0KWCNkZWZpbmUJTkNSX0NGRzIJMHgwYgkJLyogUlcgLSBDb25m
aWd1cmF0aW9uICMyCSovDQpYI2RlZmluZQkgTkNSQ0ZHMl9SU1ZECTB4YTAJ
CS8qCXJlc2VydmVkCQkqLw0KWCNkZWZpbmUgIE5DUkNGRzJfRkUJMHg0MAkJ
LyogCUZlYXR1cmVzIEVuYWJsZQkJKi8NClgjZGVmaW5lICBOQ1JDRkcyX0RS
RVEJMHgxMAkJLyogCURSRVEgSGlnaCBJbXBlZGFuY2UJKi8NClgjZGVmaW5l
ICBOQ1JDRkcyX1NDU0kyCTB4MDgJCS8qIAlTQ1NJLTIgRW5hYmxlCQkqLw0K
WCNkZWZpbmUgIE5DUkNGRzJfQlBBCTB4MDQJCS8qIAlUYXJnZXQgQmFkIFBh
cml0eSBBYm9ydAkqLw0KWCNkZWZpbmUgIE5DUkNGRzJfUlBFCTB4MDIJCS8q
IAlSZWdpc3RlciBQYXJpdHkgRXJyb3IJKi8NClgjZGVmaW5lICBOQ1JDRkcy
X0RQRQkweDAxCQkvKiAJRE1BIFBhcml0eSBFcnJvcgkqLw0KWA0KWCNkZWZp
bmUgIE5DUkNGRzJfSE1FRkUJMHgxMAkJLyoJSE1FIGZlYXR1cmUgZW5hYmxl
CSovDQpYI2RlZmluZQkgTkNSQ0ZHMl9ITUUzMiAgMHg4MAkJLyoJSE1FIDMy
IGV4dGVuZGVkCQkqLw0KWA0KWC8qIENvbmZpZyAjMyBvbmx5IG9uIDUzQzlY
ICovDQpYI2RlZmluZQlOQ1JfQ0ZHMwkweDBjCQkvKiBSVyAtIENvbmZpZ3Vy
YXRpb24gIzMJKi8NClgjZGVmaW5lCSBOQ1JDRkczX1JTVkQJMHhlMAkJLyoJ
cmVzZXJ2ZWQJCSovDQpYI2RlZmluZSAgTkNSQ0ZHM19JRE0JMHgxMAkJLyoJ
SUQgTWVzc2FnZSBSZXMgQ2hlY2sJKi8NClgjZGVmaW5lICBOQ1JDRkczX1FU
RQkweDA4CQkvKglRdWV1ZSBUYWcgRW5hYmxlCSovDQpYI2RlZmluZSAgTkNS
Q0ZHM19DREIJMHgwNAkJLyoJQ0RCIDEwLWJ5dGVzIE9LCQkqLw0KWCNkZWZp
bmUgIE5DUkNGRzNfRlNDU0kJMHgwMgkJLyoJRmFzdCBTQ1NJCQkqLw0KWCNk
ZWZpbmUgIE5DUkNGRzNfRkNMSwkweDAxCQkvKglGYXN0IENsb2NrICg+MjVN
aHopCSovDQpYDQpYLyoNClggKiBGb3Igc29tZSB1bmtub3duIHJlYXNvbiwg
dGhlIEVTUDQwNi9GQVM0MDggbG9va3MgbGlrZSBldmVyeQ0KWCAqIG90aGVy
IG5jcjUzYzl4LCBleGNlcHQgZm9yIGNvbmZpZ3VyYXRpb24gIzMgcmVnaXN0
ZXIuICBBdCBhbnkNClggKiByYXRlLCBpZiB5b3UncmUgZGVhbGluZyB3aXRo
IHRoZXNlIGNoaXBzLCB5b3UgbmVlZCB0byB1c2UgdGhlc2UNClggKiBkZWZp
bmVzIGluc3RlYWQuDQpYICovDQpYDQpYLyogQ29uZmlnICMzIGRpZmZlcmVu
dCBvbiBFU1A0MDYvRkFTNDA4ICovDQpYI2RlZmluZQlOQ1JfRVNQQ0ZHMwkJ
MHgwYwkvKiBSVyAtIENvbmZpZ3VyYXRpb24gIzMJKi8NClgjZGVmaW5lICBO
Q1JFU1BDRkczX0lETQkJMHg4MAkvKglJRCBNZXNzYWdlIFJlcyBDaGVjawkq
Lw0KWCNkZWZpbmUgIE5DUkVTUENGRzNfUVRFCQkweDQwCS8qCVF1ZXVlIFRh
ZyBFbmFibGUJKi8NClgjZGVmaW5lICBOQ1JFU1BDRkczX0NEQgkJMHgyMAkv
KglDREIgMTAtYnl0ZXMgT0sJCSovDQpYI2RlZmluZSAgTkNSRVNQQ0ZHM19G
U0NTSQkweDEwCS8qCUZhc3QgU0NTSQkJKi8NClgjZGVmaW5lCSBOQ1JFU1BD
RkczX1NSRVNCCTB4MDgJLyoJU2F2ZSBSZXNpZHVhbCBCeXRlCSovDQpYI2Rl
ZmluZSAgTkNSRVNQQ0ZHM19GQ0xLCTB4MDQJLyoJRmFzdCBDbG9jayAoPjI1
TWh6KQkqLw0KWCNkZWZpbmUJIE5DUkVTUENGRzNfQURNQQkweDAyCS8qCUFs
dGVybmF0ZSBETUEgTW9kZQkqLw0KWCNkZWZpbmUJIE5DUkVTUENGRzNfVDhN
CQkweDAxCS8qCVRocmVzaG9sZCA4IE1vZGUJKi8NClgNClgvKiBDb25maWcg
IzMgYWxzbyBkaWZmZXJlbnQgb24gTkNSNTNDRjl4L0ZBUzIxNiAqLw0KWCNk
ZWZpbmUJTkNSX0Y5WENGRzMJCTB4MGMJLyogUlcgLSBDb25maWd1cmF0aW9u
ICMzCSovDQpYI2RlZmluZSAgTkNSRjlYQ0ZHM19JRE0JCTB4ODAJLyoJSUQg
TWVzc2FnZSBSZXMgQ2hlY2sJKi8NClgjZGVmaW5lICBOQ1JGOVhDRkczX1FU
RQkJMHg0MAkvKglRdWV1ZSBUYWcgRW5hYmxlCSovDQpYI2RlZmluZSAgTkNS
RjlYQ0ZHM19DREIJCTB4MjAJLyoJQ0RCIDEwLWJ5dGVzIE9LCQkqLw0KWCNk
ZWZpbmUgIE5DUkY5WENGRzNfRlNDU0kJMHgxMAkvKglGYXN0IFNDU0kJCSov
DQpYI2RlZmluZSAgTkNSRjlYQ0ZHM19GQ0xLCTB4MDgJLyoJRmFzdCBDbG9j
ayAoPjI1TWh6KQkqLw0KWCNkZWZpbmUgIE5DUkY5WENGRzNfU1JFU0IJMHgw
NAkvKglTYXZlIFJlc2lkdWFsIEJ5dGUJKi8NClgjZGVmaW5lICBOQ1JGOVhD
RkczX0FETUEJMHgwMgkvKglBbHRlcm5hdGUgRE1BIE1vZGUJKi8NClgjZGVm
aW5lICBOQ1JGOVhDRkczX1Q4TQkJMHgwMQkvKglUaHJlc2hvbGQgOCBNb2Rl
CSovDQpYDQpYLyogQ29uZmlnICMzIG9uIEZBUzM2NiAqLw0KWCNkZWZpbmUg
IE5DUkZBU0NGRzNfT0JBVVRPICAgIAkweDgwICAgIC8qCWF1dG8gcHVzaCBv
ZGQtYnl0ZSB0byBkbWEgKi8NClgjZGVmaW5lICBOQ1JGQVNDRkczX0VXSURF
ICAgICAJMHg0MCAgICAvKiAJRW5hYmxlIFdpZGUtU0NTSSAgICAgKi8NClgj
ZGVmaW5lICBOQ1JGQVNDRkczX0lEQklUMwkweDIwCS8qIAlCaXQgMyBvZiBI
TUUgU0NTSS1JRCAqLw0KWCNkZWZpbmUJIE5DUkZBU0NGRzNfSURSRVNDSEsJ
MHgxMAkvKiAJSUQgbWVzc2FnZSBjaGVja2luZyAqLw0KWCNkZWZpbmUJIE5D
UkZBU0NGRzNfUVVFTkIJMHgwOAkvKiAJMy1ieXRlIG1zZyBzdXBwb3J0ICov
DQpYI2RlZmluZQkgTkNSRkFTQ0ZHM19DREIxMAkweDA0CS8qIAlncm91cCAy
IHNjc2ktMiBzdXBwb3J0ICovDQpYI2RlZmluZQkgTkNSRkFTQ0ZHM19GQVNU
U0NTSQkweDAyCS8qIAkxMCBNQi9TIGZhc3Qgc2NzaSBtb2RlICovDQpYI2Rl
ZmluZQkgTkNSRkFTQ0ZHM19GQVNUQ0xLCTB4MDEJLyogCWZhc3QgY2xvY2sg
bW9kZSAqLw0KWA0KWC8qIENvbmZpZyAjNCBvbmx5IG9uIEVTUDQwNi9GQVM0
MDggKi8NClgjZGVmaW5lCU5DUl9DRkc0CTB4MGQJCS8qIFJXIC0gQ29uZmln
dXJhdGlvbiAjNAkqLw0KWCNkZWZpbmUJIE5DUkNGRzRfQ1JTMQkweDgwCQkv
KglTZWxlY3QgcmVnaXN0ZXIgc2V0ICMxCSovDQpYI2RlZmluZQkgTkNSQ0ZH
NF9SU1ZECTB4N2IJCS8qCXJlc2VydmVkCQkqLw0KWCNkZWZpbmUJIE5DUkNG
RzRfQUNUTkVHCTB4MDQJCS8qCUFjdGl2ZSBuZWdhdGlvbgkJKi8NClgNClgv
Kg0KWCAgIFRoZSBmb2xsb3dpbmcgcmVnaXN0ZXJzIGFyZSBvbmx5IG9uIHRo
ZSBFU1A0MDYvRkFTNDA4LiAgVGhlDQpYICAgZG9jdW1lbnRhdGlvbiByZWZl
cnMgdG8gdGhlbSBhcyAiQ29udHJvbCBSZWdpc3RlciBTZXQgIzEiLg0KWCAg
IFRoZXNlIGFyZSB0aGUgcmVnaXN0ZXJzIHRoYXQgYXJlIHZpc2libGUgd2hl
biBiaXQgNyBvZiANClggICByZWdpc3RlciAweDBkIGlzIHNldC4gIFRoaXMg
Yml0IGlzIGNvbW1vbiB0byBib3RoIHJlZ2lzdGVyIHNldHMuDQpYKi8NClgN
ClgjZGVmaW5lCU5DUl9KTVAJCTB4MDAJCS8qIFJPIC0gSnVtcGVyIFNlbnNl
IFJlZ2lzdGVyCSovDQpYI2RlZmluZSAgTkNSSk1QX1JTVkQJMHhjMAkJLyoJ
cmVzZXJ2ZWQJCSovDQpYI2RlZmluZSAgTkNSSk1QX1JPTVNaCTB4MjAJCS8q
CVJPTSBTaXplIDE9MTZLLCAwPTMySwkqLw0KWCNkZWZpbmUJIE5DUkpNUF9K
NAkweDEwCQkvKglKdW1wZXIgIzQJCSovDQpYI2RlZmluZQkgTkNSSk1QX0oz
CTB4MDgJCS8qCUp1bXBlciAjMwkJKi8NClgjZGVmaW5lCSBOQ1JKTVBfSjIJ
MHgwNAkJLyoJSnVtcGVyICMyCQkqLw0KWCNkZWZpbmUJIE5DUkpNUF9KMQkw
eDAyCQkvKglKdW1wZXIgIzEJCSovDQpYI2RlZmluZQkgTkNSSk1QX0owCTB4
MDEJCS8qCUp1bXBlciAjMAkJKi8NClgNClgjZGVmaW5lCU5DUl9QSU9GSUZP
CTB4MDQJCS8qIFdPIC0gUElPIEZJRk8sIDQgYnl0ZXMgZGVlcAkqLw0KWA0K
WCNkZWZpbmUgTkNSX1BTVEFUCTB4MDgJCS8qIFJXIC0gUElPIFN0YXR1cyBS
ZWdpc3RlcgkqLw0KWCNkZWZpbmUgIE5DUlBTVEFUX1BFUlIJMHg4MAkJLyoJ
UElPIEVycm9yCQkqLw0KWCNkZWZpbmUgIE5DUlBTVEFUX1NJUlEJMHg0MAkJ
LyoJQWN0aXZlIEhpZ2ggb2YgU0NTSSBJUlEgKi8NClgjZGVmaW5lICBOQ1JQ
U1RBVF9BVEFJCTB4MjAJCS8qCUFUQSBJUlEJCQkqLw0KWCNkZWZpbmUgIE5D
UlBTVEFUX0ZFTVBUCTB4MTAJCS8qCVBJTyBGSUZPIEVtcHR5CQkqLw0KWCNk
ZWZpbmUgIE5DUlBTVEFUX0YxMwkweDA4CQkvKglQSU8gRklGTyAxLzMJCSov
DQpYI2RlZmluZSAgTkNSUFNUQVRfRjIzCTB4MDQJCS8qCVBJTyBGSUZPIDIv
MwkJKi8NClgjZGVmaW5lICBOQ1JQU1RBVF9GRlVMTAkweDAyCQkvKglQSU8g
RklGTyBGdWxsCQkqLw0KWCNkZWZpbmUgIE5DUlBTVEFUX1BJT00JMHgwMQkJ
LyoJUElPL0RNQSBNb2RlCQkqLw0KWA0KWCNkZWZpbmUgTkNSX1BJT0kJMHgw
YgkJLyogUlcgLSBQSU8gSW50ZXJydXB0IEVuYWJsZQkqLw0KWCNkZWZpbmUJ
IE5DUlBJT0lfUlNWRAkweGUwCQkvKglyZXNlcnZlZAkJKi8NClgjZGVmaW5l
CSBOQ1JQSU9JX0VNUFRZCTB4MTAJCS8qCUlSUSBXaGVuIEVtcHR5CQkqLw0K
WCNkZWZpbmUJIE5DUlBJT0lfMTMJMHgwOAkJLyoJSVJRIFdoZW4gMS8zCQkq
Lw0KWCNkZWZpbmUJIE5DUlBJT0lfMjMJMHgwNAkJLyoJSVJRIFdoZW4gMi8z
CQkqLw0KWCNkZWZpbmUJIE5DUlBJT0lfRlVMTAkweDAyCQkvKglJUlEgV2hl
biBGdWxsCQkqLw0KWCNkZWZpbmUJIE5DUlBJT0lfRklOVgkweDAxCQkvKglG
bGFnIEludmVydAkJKi8NClgNClgjZGVmaW5lCU5DUl9DRkc1CTB4MGQJCS8q
IFJXIC0gQ29uZmlndXJhdGlvbiAjNQkqLw0KWCNkZWZpbmUJIE5DUkNGRzVf
Q1JTMQkweDgwCQkvKglTZWxlY3QgUmVnaXN0ZXIgU2V0ICMxCSovDQpYI2Rl
ZmluZQkgTkNSQ0ZHNV9TUkFNCTB4NDAJCS8qCVNSQU0gTWVtb3J5IE1hcAkJ
Ki8NClgjZGVmaW5lICBOQ1JDRkc1X0FBRERSCTB4MjAJCS8qCUF1dG8gQWRk
cmVzcwkJKi8NClgjZGVmaW5lICBOQ1JDRkc1X1BUUklOQwkweDEwCQkvKglQ
b2ludGVyIEluY3JlbWVudAkqLw0KWCNkZWZpbmUgIE5DUkNGRzVfTE9XUFdS
CTB4MDgJCS8qCUxvdyBQb3dlciBNb2RlCQkqLw0KWCNkZWZpbmUgIE5DUkNG
RzVfU0lOVAkweDA0CQkvKglTQ1NJIEludGVydXB0IEVuYWJsZQkqLw0KWCNk
ZWZpbmUgIE5DUkNGRzVfSU5UUAkweDAyCQkvKglJTlQgUG9sYXJpdHkJCSov
DQpYI2RlZmluZSAgTkNSQ0ZHNV9BSU5UCTB4MDEJCS8qCUFUQSBJbnRlcnVw
dCBFbmFibGUJKi8NClgNClgjZGVmaW5lCU5DUl9TSUdOVFIJMHgwZQkJLyog
Uk8gLSBTaWduYXR1cmUJCSovDQpYDQpYLyogQW01M2M5NzQgQ29uZmlnICMz
ICovDQpYI2RlZmluZQlOQ1JfQU1EQ0ZHMwkJMHgwYwkvKiBSVyAtIENvbmZp
Z3VyYXRpb24gIzMJKi8NClgjZGVmaW5lCSBOQ1JBTURDRkczX0lETQkJMHg4
MAkvKglJRCBNZXNzYWdlIFJlcyBDaGVjawkqLw0KWCNkZWZpbmUJIE5DUkFN
RENGRzNfUVRFCQkweDQwCS8qCVF1ZXVlIFRhZyBFbmFibGUJKi8NClgjZGVm
aW5lCSBOQ1JBTURDRkczX0NEQgkJMHgyMAkvKglDREIgMTAtYnl0ZXMgT0sJ
CSovDQpYI2RlZmluZQkgTkNSQU1EQ0ZHM19GU0NTSQkweDEwCS8qCUZhc3Qg
U0NTSQkJKi8NClgjZGVmaW5lCSBOQ1JBTURDRkczX0ZDTEsJMHgwOAkvKglG
YXN0IENsb2NrICg0ME1IeikJKi8NClgjZGVmaW5lCSBOQ1JBTURDRkczX1JT
VkQJMHgwNwkvKglSZXNlcnZlZAkJKi8NClgNClgvKiBBbTUzYzk3NCBDb25m
aWcgIzQgKi8NClgjZGVmaW5lCU5DUl9BTURDRkc0CQkweDBkCS8qIFJXIC0g
Q29uZmlndXJhdGlvbiAjNAkqLw0KWCNkZWZpbmUJIE5DUkFNRENGRzRfR0UJ
CTB4YzAJLyoJR2xpdGNoIEVhdGVyCQkqLw0KWCNkZWZpbmUJIE5DUkFNRENG
RzRfR0UxMk5TCTB4MDAJLyoJU2lnbmFsIHdpbmRvdyAxMm5zCSovDQpYI2Rl
ZmluZQkgTkNSQU1EQ0ZHNF9HRTI1TlMJMHg4MAkvKglTaWduYWwgd2luZG93
IDI1bnMJKi8NClgjZGVmaW5lCSBOQ1JBTURDRkc0X0dFMzVOUwkweDQwCS8q
CVNpZ25hbCB3aW5kb3cgMzVucwkqLw0KWCNkZWZpbmUJIE5DUkFNRENGRzRf
R0UwTlMJMHhjMAkvKglTaWduYWwgd2luZG93IDBucwkqLw0KWCNkZWZpbmUJ
IE5DUkFNRENGRzRfUFdECQkweDIwCS8qCVJlZHVjZWQgcG93ZXIgZmVhdHVy
ZQkqLw0KWCNkZWZpbmUJIE5DUkFNRENGRzRfUlNWRAkweDEzCS8qCVJlc2Vy
dmVkCQkqLw0KWCNkZWZpbmUJIE5DUkFNRENGRzRfUkFFCQkweDA4CS8qCUFj
dGl2ZSBuZWcuIFJFUS9BQ0sJKi8NClgjZGVmaW5lCSBOQ1JBTURDRkc0X1JB
REUJMHgwNAkvKglBY3RpdmUgbmVnLiBSRVEvQUNLL0RBVAkqLw0KWA0KWC8q
DQpYICogRkFTMzY2DQpYICovIA0KWCNkZWZpbmUgTkNSX1JDTAkJTkNSX1RD
SAkvKiBSZWNvbW1hbmQgY291bnRlciBsb3cgKi8NClgjZGVmaW5lIE5DUl9S
Q0gJCTB4ZgkvKiBSZWNvbW1hbmQgY291bnRlciBoaWdoICovDQpYI2RlZmlu
ZSBOQ1JfVUlECQlOQ1JfUkNMCS8qIGZhczM2NiBwYXJ0LXVuaXEgaWQgKi8N
ClgNClgNClgvKiBzdGF0dXMgcmVnaXN0ZXIgIzIgZGVmaW5pdGlvbnMgKHJl
YWQJb25seSkgKi8NClgjZGVmaW5lIE5DUl9TVEFUMglOQ1JfQ0NGDQpYI2Rl
ZmluZQlGQVNfU1RBVDJfU0VRQ05UICAgMHgwMQkgICAvKiBTZXF1ZW5jZSBj
b3VudGVyIGJpdCA3LTMgZW5hYmxlZCAqLw0KWCNkZWZpbmUJRkFTX1NUQVQy
X0ZMQVRDSEVEIDB4MDIJICAgLyogRklGTyBmbGFncyByZWdpc3RlciBsYXRj
aGVkICovDQpYI2RlZmluZQlGQVNfU1RBVDJfQ0xBVENIRUQgMHgwNAkgICAv
KiBYZmVyIGNudHIJJiByZWNvbW1hbmQgY3RyCWxhdGNoZWQgKi8NClgjZGVm
aW5lCUZBU19TVEFUMl9DQUNUSVZFICAweDA4CSAgIC8qIENvbW1hbmQgcmVn
aXN0ZXIgaXMgYWN0aXZlICovDQpYI2RlZmluZQlGQVNfU1RBVDJfU0NTSTE2
ICAgMHgxMAkgICAvKiBTQ1NJIGludGVyZmFjZSBpcwl3aWRlICovDQpYI2Rl
ZmluZQlGQVNfU1RBVDJfSVNIVVRUTEUgMHgyMAkgICAvKiBGSUZPIFRvcCBy
ZWdpc3Rlcgljb250YWlucyAxIGJ5dGUgKi8NClgjZGVmaW5lCUZBU19TVEFU
Ml9PU0hVVFRMRSAweDQwCSAgIC8qIG5leHQgYnl0ZQlmcm9tIEZJRk8gaXMg
TVNCICovDQpYI2RlZmluZQlGQVNfU1RBVDJfRU1QVFkJICAgMHg4MAkgICAv
KiBGSUZPIGlzIGVtcHR5ICovDQpYDQpFTkQtb2YtaWMvbmNyNTNjOXhyZWcu
aA0KZWNobyB4IC0gaWMvbmNyNTNjOXh2YXIuaA0Kc2VkICdzL15YLy8nID5p
Yy9uY3I1M2M5eHZhci5oIDw8ICdFTkQtb2YtaWMvbmNyNTNjOXh2YXIuaCcN
ClgvKgkkTmV0QlNEOiBuY3I1M2M5eHZhci5oLHYgMS4yNSAyMDAwLzExLzEz
IDE1OjI0OjIyIHBrIEV4cCAkCSovDQpYDQpYLyotDQpYICogQ29weXJpZ2h0
IChjKSAxOTk3IFRoZSBOZXRCU0QgRm91bmRhdGlvbiwgSW5jLg0KWCAqIEFs
bCByaWdodHMgcmVzZXJ2ZWQuDQpYICoNClggKiBUaGlzIGNvZGUgaXMgZGVy
aXZlZCBmcm9tIHNvZnR3YXJlIGNvbnRyaWJ1dGVkIHRvIFRoZSBOZXRCU0Qg
Rm91bmRhdGlvbg0KWCAqIGJ5IEphc29uIFIuIFRob3JwZSBvZiB0aGUgTnVt
ZXJpY2FsIEFlcm9zcGFjZSBTaW11bGF0aW9uIEZhY2lsaXR5LA0KWCAqIE5B
U0EgQW1lcyBSZXNlYXJjaCBDZW50ZXIuDQpYICoNClggKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQNClggKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMNClggKiBh
cmUgbWV0Og0KWCAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29k
ZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0DQpYICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyLg0KWCAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5h
cnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0DQpY
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQ0KWCAqICAgIGRvY3VtZW50
YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRo
ZSBkaXN0cmlidXRpb24uDQpYICogMy4gQWxsIGFkdmVydGlzaW5nIG1hdGVy
aWFscyBtZW50aW9uaW5nIGZlYXR1cmVzIG9yIHVzZSBvZiB0aGlzIHNvZnR3
YXJlDQpYICogICAgbXVzdCBkaXNwbGF5IHRoZSBmb2xsb3dpbmcgYWNrbm93
bGVkZ2VtZW50Og0KWCAqCVRoaXMgcHJvZHVjdCBpbmNsdWRlcyBzb2Z0d2Fy
ZSBkZXZlbG9wZWQgYnkgdGhlIE5ldEJTRA0KWCAqCUZvdW5kYXRpb24sIElu
Yy4gYW5kIGl0cyBjb250cmlidXRvcnMuDQpYICogNC4gTmVpdGhlciB0aGUg
bmFtZSBvZiBUaGUgTmV0QlNEIEZvdW5kYXRpb24gbm9yIHRoZSBuYW1lcyBv
ZiBpdHMNClggKiAgICBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5k
b3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQNClggKiAgICBmcm9t
IHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVu
IHBlcm1pc3Npb24uDQpYICoNClggKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIFRIRSBORVRCU0QgRk9VTkRBVElPTiwgSU5DLiBBTkQgQ09OVFJJ
QlVUT1JTDQpYICogYGBBUyBJUycnIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBM
SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEDQpY
ICogVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM
SVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVINClggKiBQVVJQT1NF
IEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEZPVU5E
QVRJT04gT1IgQ09OVFJJQlVUT1JTDQpYICogQkUgTElBQkxFIEZPUiBBTlkg
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBM
QVJZLCBPUg0KWCAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GDQpYICogU1VC
U1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEs
IE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTDQpYICogSU5URVJSVVBUSU9OKSBI
T1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFks
IFdIRVRIRVIgSU4NClggKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwg
T1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQ0K
WCAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFDQpYICogUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuDQpYICovDQpYDQpYLyoNClggKiBDb3B5
cmlnaHQgKGMpIDE5OTQgUGV0ZXIgR2FsYmF2eS4gIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuDQpYICoNClggKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQNClggKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMNClggKiBhcmUgbWV0Og0KWCAqIDEuIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg
YWJvdmUgY29weXJpZ2h0DQpYICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLg0KWCAq
IDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv
ZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0DQpYICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyIGluIHRoZQ0KWCAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy
IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uDQpY
ICogMy4gQWxsIGFkdmVydGlzaW5nIG1hdGVyaWFscyBtZW50aW9uaW5nIGZl
YXR1cmVzIG9yIHVzZSBvZiB0aGlzIHNvZnR3YXJlDQpYICogICAgbXVzdCBk
aXNwbGF5IHRoZSBmb2xsb3dpbmcgYWNrbm93bGVkZ2VtZW50Og0KWCAqCVRo
aXMgcHJvZHVjdCBpbmNsdWRlcyBzb2Z0d2FyZSBkZXZlbG9wZWQgYnkgUGV0
ZXIgR2FsYmF2eS4NClggKiA0LiBUaGUgbmFtZSBvZiB0aGUgYXV0aG9yIG1h
eSBub3QgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMN
ClggKiAgICBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNw
ZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4NClggKg0KWCAqIFRI
SVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIEFVVEhPUiBgYEFTIElT
JycgQU5EIEFOWSBFWFBSRVNTIE9SDQpYICogSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQg
V0FSUkFOVElFUw0KWCAqIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuDQpY
ICogSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUiBCRSBMSUFCTEUgRk9S
IEFOWSBESVJFQ1QsIElORElSRUNULA0KWCAqIElOQ0lERU5UQUwsIFNQRUNJ
QUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNM
VURJTkcsIEJVVA0KWCAqIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBP
RiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwN
ClggKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJ
T04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkNClggKiBUSEVPUlkgT0Yg
TElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLCBPUiBUT1JUDQpYICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U
SEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9G
DQpYICogVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4NClggKi8NClgNClgvKiBTZXQg
dGhpcyB0byAxIGZvciBub3JtYWwgZGVidWcsIG9yIDIgZm9yIHBlci10YXJn
ZXQgdHJhY2luZy4gKi8NClgjZGVmaW5lIE5DUjUzQzlYX0RFQlVHCQkyDQpY
DQpYLyogV2lkZSBvciBkaWZmZXJlbnRpYWwgY2FuIGhhdmUgMTYgdGFyZ2V0
cyAqLw0KWCNkZWZpbmUgTkNSX05UQVJHCQk4DQpYI2RlZmluZSBOQ1JfTkxV
TgkJOA0KWA0KWCNkZWZpbmUJTkNSX0FCT1JUX1RJTUVPVVQJMjAwMAkvKiB0
aW1lIHRvIHdhaXQgZm9yIGFib3J0ICovDQpYI2RlZmluZQlOQ1JfU0VOU0Vf
VElNRU9VVAkxMDAwCS8qIHRpbWUgdG8gd2FpdCBmb3Igc2Vuc2UgKi8NClgN
ClgjZGVmaW5lIEZSRVFUT0NDRihmcmVxKQkoKChmcmVxICsgNCkgLyA1KSkN
ClgNClgvKg0KWCAqIE5DUiA1M2M5eCB2YXJpYW50cy4gIE5vdGUsIHRoZXNl
IHZhbHVlcyBhcmUgdXNlZCBhcyBpbmRleGVzIGludG8NClggKiBhIHRhYmxl
OyBkb24ndCBtb2RpZnkgdGhlbSB1bmxlc3MgeW91IGtub3cgd2hhdCB5b3Un
cmUgZG9pbmcuDQpYICovDQpYI2RlZmluZQlOQ1JfVkFSSUFOVF9FU1AxMDAJ
CTANClgjZGVmaW5lCU5DUl9WQVJJQU5UX0VTUDEwMEEJCTENClgjZGVmaW5l
CU5DUl9WQVJJQU5UX0VTUDIwMAkJMg0KWCNkZWZpbmUJTkNSX1ZBUklBTlRf
TkNSNTNDOTQJCTMNClgjZGVmaW5lCU5DUl9WQVJJQU5UX05DUjUzQzk2CQk0
DQpYI2RlZmluZQlOQ1JfVkFSSUFOVF9FU1A0MDYJCTUNClgjZGVmaW5lCU5D
Ul9WQVJJQU5UX0ZBUzQwOAkJNg0KWCNkZWZpbmUJTkNSX1ZBUklBTlRfRkFT
MjE2CQk3DQpYI2RlZmluZQlOQ1JfVkFSSUFOVF9BTTUzQzk3NAkJOA0KWCNk
ZWZpbmUJTkNSX1ZBUklBTlRfRkFTMzY2CQk5DQpYI2RlZmluZQlOQ1JfVkFS
SUFOVF9NQVgJCQkxMA0KWA0KWC8qDQpYICogRUNCLiBIb2xkcyBhZGRpdGlv
bmFsIGluZm9ybWF0aW9uIGZvciBlYWNoIFNDU0kgY29tbWFuZCBDb21tZW50
czogV2UNClggKiBuZWVkIGEgc2VwYXJhdGUgc2NzaSBjb21tYW5kIGJsb2Nr
IGJlY2F1c2Ugd2UgbWF5IG5lZWQgdG8gb3ZlcndyaXRlIGl0DQpYICogd2l0
aCBhIHJlcXVlc3Qgc2Vuc2UgY29tbWFuZC4gIEJhc2ljbHksIHdlIHJlZnJh
aW4gZnJvbSBmaWRkbGluZyB3aXRoDQpYICogdGhlIHNjc2lwaV94ZmVyIHN0
cnVjdCAoZXhjZXB0IGRvIHRoZSBleHBlY3RlZCB1cGRhdGluZyBvZiByZXR1
cm4gdmFsdWVzKS4NClggKiBXZSdsbCBnZW5lcmFsbHkgdXBkYXRlOiB4cy0+
e2ZsYWdzLHJlc2lkLGVycm9yLHNlbnNlLHN0YXR1c30gYW5kDQpYICogb2Nj
YXNpb25hbGx5IHhzLT5yZXRyaWVzLg0KWCAqLw0KWHN0cnVjdCBuY3I1M2M5
eF9lY2Igew0KWAlUQUlMUV9FTlRSWShuY3I1M2M5eF9lY2IpIGNoYWluOw0K
WAlzdHJ1Y3Qgc2NzaXBpX3hmZXIgKnhzOwkvKiBTQ1NJIHhmZXIgY3RybCBi
bG9jayBmcm9tIGFib3ZlICovDQpYCWludCBmbGFnczsNClgjZGVmaW5lCUVD
Ql9BTExPQwkJMHgwMQ0KWCNkZWZpbmUJRUNCX1JFQURZCQkweDAyDQpYI2Rl
ZmluZQlFQ0JfU0VOU0UJCTB4MDQNClgjZGVmaW5lCUVDQl9BQk9SVAkJMHg0
MA0KWCNkZWZpbmUJRUNCX1JFU0VUCQkweDgwDQpYI2RlZmluZQlFQ0JfVEVO
VEFUSVZFX0RPTkUJMHgxMDANClgJaW50IHRpbWVvdXQ7DQpYDQpYCXN0cnVj
dCB7DQpYCQl1X2NoYXIJbXNnWzNdOwkJCS8qIFNlbGVjdGlvbiBJZCBtc2cg
YW5kIHRhZ3MgKi8NClgJCXN0cnVjdCBzY3NpX2dlbmVyaWMgY21kOwkvKiBT
Q1NJIGNvbW1hbmQgYmxvY2sgKi8NClgJfSBjbWQ7DQpYCWNoYXIJKmRhZGRy
OwkJLyogU2F2ZWQgZGF0YSBwb2ludGVyICovDQpYCWludAkgY2xlbjsJCS8q
IFNpemUgb2YgY29tbWFuZCBpbiBjbWQuY21kICovDQpYCWludAkgZGxlZnQ7
CQkvKiBSZXNpZHVlICovDQpYCXVfY2hhciAJIHN0YXQ7CQkvKiBTQ1NJIHN0
YXR1cyBieXRlICovDQpYCXVfY2hhcgkgdGFnWzJdOwkvKiBUQUcgYnl0ZXMg
Ki8NClgJdV9jaGFyCSBwYWRbMV07DQpYDQpYI2lmIE5DUjUzQzlYX0RFQlVH
ID4gMQ0KWAljaGFyIHRyYWNlWzEwMDBdOw0KWCNlbmRpZg0KWH07DQpYI2lm
IE5DUjUzQzlYX0RFQlVHID4gMQ0KWCNkZWZpbmUgRUNCX1RSQUNFKGVjYiwg
bXNnLCBhLCBiKSBkbyB7IFwNClgJY29uc3QgY2hhciAqZiA9ICJbIiBtc2cg
Il0iOyBcDQpYCWludCBuID0gc3RybGVuKChlY2IpLT50cmFjZSk7IFwNClgJ
aWYgKG4gPCAoc2l6ZW9mKChlY2IpLT50cmFjZSktMTAwKSkgXA0KWAkJc3By
aW50ZigoZWNiKS0+dHJhY2UgKyBuLCBmLCAgYSwgYik7IFwNClh9IHdoaWxl
KDApDQpYI2Vsc2UNClgjZGVmaW5lIEVDQl9UUkFDRShlY2IsIG1zZywgYSwg
YikNClgjZW5kaWYNClgNClgvKg0KWCAqIFNvbWUgaW5mbyBhYm91dCBlYWNo
IChwb3NzaWJsZSkgdGFyZ2V0IGFuZCBMVU4gb24gdGhlIFNDU0kgYnVzLg0K
WCAqDQpYICogU0NTSSBJIGFuZCBJSSBkZXZpY2VzIGNhbiBoYXZlIHVwIHRv
IDggTFVOcywgZWFjaCB3aXRoIHVwIHRvIDI1Ng0KWCAqIG91dHN0YW5kaW5n
IHRhZ3MuICBTQ1NJIElJSSBkZXZpY2VzIGhhdmUgNjQtYml0IExVTiBpZGVu
dGlmaWVycw0KWCAqIHRoYXQgY2FuIGJlIHNwYXJzZWx5IGFsbG9jYXRlZC4N
ClggKg0KWCAqIFNpbmNlIFNDU0kgSUkgZGV2aWNlcyBjYW4gaGF2ZSB1cCB0
byA4IExVTnMsIHdlIHVzZSBhbiBhcnJheQ0KWCAqIG9mIDggcG9pbnRlcnMg
dG8gbmNyNTNjOXhfbGluZm8gc3RydWN0dXJlcyBmb3IgZmFzdCBsb29rdXAu
DQpYICogTG9uZ2VyIExVTnMgbmVlZCB0byB0cmF2ZXJzZSB0aGUgbGlua2Vk
IGxpc3QuDQpYICovDQpYDQpYc3RydWN0IG5jcjUzYzl4X2xpbmZvIHsNClgJ
aW50NjRfdAkJCWx1bjsNClgJTElTVF9FTlRSWShuY3I1M2M5eF9saW5mbykg
bGluazsNClgJdGltZV90CQkJbGFzdF91c2VkOw0KWAl1bnNpZ25lZCBjaGFy
CQl1c2VkOwkvKiAjIHNsb3RzIGluIHVzZSAqLw0KWAl1bnNpZ25lZCBjaGFy
CQlhdmFpbDsJLyogd2hlcmUgdG8gc3RhcnQgc2Nhbm5pbmcgKi8NClgJdW5z
aWduZWQgY2hhcgkJYnVzeTsNClgJc3RydWN0IG5jcjUzYzl4X2VjYgkqdW50
YWdnZWQ7DQpYCXN0cnVjdCBuY3I1M2M5eF9lY2IJKnF1ZXVlZFsyNTZdOw0K
WH07DQpYDQpYc3RydWN0IG5jcjUzYzl4X3RpbmZvIHsNClgJaW50CWNtZHM7
CQkvKiAjIG9mIGNvbW1hbmRzIHByb2Nlc3NlZCAqLw0KWAlpbnQJZGNvbm5z
OwkJLyogIyBvZiBkaXNjb25uZWN0cyAqLw0KWAlpbnQJdG91dHM7CQkvKiAj
IG9mIHRpbWVvdXRzICovDQpYCWludAlwZXJyczsJCS8qICMgb2YgcGFyaXR5
IGVycm9ycyAqLw0KWAlpbnQJc2Vuc2VzOwkJLyogIyBvZiByZXF1ZXN0IHNl
bnNlIGNvbW1hbmRzIHNlbnQgKi8NClgJdV9jaGFyICBmbGFnczsNClgjZGVm
aW5lIFRfTkVFRF9UT19SRVNFVAkweDAxCS8qIFNob3VsZCBzZW5kIGEgQlVT
X0RFVl9SRVNFVCAqLw0KWCNkZWZpbmUgVF9ORUdPVElBVEUJMHgwMgkvKiAo
UmUpTmVnb3RpYXRlIHN5bmNocm9ub3VzIG9wdGlvbnMgKi8NClgjZGVmaW5l
IFRfQlVTWQkJMHgwNAkvKiBUYXJnZXQgaXMgYnVzeSwgaS5lLiBjbWQgaW4g
cHJvZ3Jlc3MgKi8NClgjZGVmaW5lIFRfU1lOQ01PREUJMHgwOAkvKiBTWU5D
IG1vZGUgaGFzIGJlZW4gbmVnb3RpYXRlZCAqLw0KWCNkZWZpbmUgVF9TWU5D
SE9GRgkweDEwCS8qIFNZTkMgbW9kZSBmb3IgaXMgcGVybWFuZW50bHkgb2Zm
ICovDQpYI2RlZmluZSBUX1JTRUxFQ1RPRkYJMHgyMAkvKiBSRS1TRUxFQ1Qg
bW9kZSBpcyBvZmYgKi8NClgjZGVmaW5lIFRfVEFHCQkweDQwCS8qIFR1cm4g
b24gVEFHIFFVRVVFcyAqLw0KWCNkZWZpbmUgVF9XSURFCQkweDgwCS8qIE5l
Z290aWF0ZSB3aWRlIG9wdGlvbnMgKi8NClgJdV9jaGFyICBwZXJpb2Q7CQkv
KiBQZXJpb2Qgc3VnZ2VzdGlvbiAqLw0KWAl1X2NoYXIgIG9mZnNldDsJCS8q
IE9mZnNldCBzdWdnZXN0aW9uICovDQpYCXVfY2hhciAgY2ZnMzsJCS8qIHBl
ciB0YXJnZXQgY29uZmlnIDMgICovDQpYCXVfY2hhcgluZXh0YWc7CQkvKiBO
ZXh0IGF2YWlsYWJsZSB0YWcgKi8NClgJdV9jaGFyICB3aWR0aDsJCS8qIHdp
ZHRoIHN1Z2dlc2lvbiAqLw0KWAlMSVNUX0hFQUQobHVuX2xpc3QsIG5jcjUz
Yzl4X2xpbmZvKSBsdW5zOw0KWAlzdHJ1Y3QgbmNyNTNjOXhfbGluZm8gKmx1
bltOQ1JfTkxVTl07IC8qIEZvciBzcGVlZHkgbG9va3VwcyAqLw0KWH07DQpY
DQpYLyogTG9vayB1cCBhIGx1biBpbiBhIHRpbmZvICovDQpYI2RlZmluZSBU
SU5GT19MVU4odCwgbCkgKAkJCQkJXA0KWAkoKChsKSA8IE5DUl9OTFVOKSAm
JiAoKCh0KS0+bHVuWyhsKV0pICE9IE5VTEwpKQkJXA0KWAkJPyAoKHQpLT5s
dW5bKGwpXSkJCQkJXA0KWAkJOiBuY3I1M2M5eF9sdW5zZWFyY2goKHQpLCAo
aW50NjRfdCkobCkpCQlcDQpYKQ0KWA0KWC8qIFJlZ2lzdGVyIGEgbGluZW51
bWJlciAoZm9yIGRlYnVnZ2luZykgKi8NClgjZGVmaW5lIExPR0xJTkUocCkN
ClgNClgjZGVmaW5lIE5DUl9TSE9XRUNCUwkweDAxDQpYI2RlZmluZSBOQ1Jf
U0hPV0lOVFMJMHgwMg0KWCNkZWZpbmUgTkNSX1NIT1dDTURTCTB4MDQNClgj
ZGVmaW5lIE5DUl9TSE9XTUlTQwkweDA4DQpYI2RlZmluZSBOQ1JfU0hPV1RS
QUMJMHgxMA0KWCNkZWZpbmUgTkNSX1NIT1dTVEFSVAkweDIwDQpYI2RlZmlu
ZSBOQ1JfU0hPV1BIQVNFCTB4NDANClgjZGVmaW5lIE5DUl9TSE9XRE1BCTB4
ODANClgjZGVmaW5lIE5DUl9TSE9XQ0NNRFMJMHgxMDANClgjZGVmaW5lIE5D
Ul9TSE9XTVNHUwkweDIwMA0KWA0KWCNpZmRlZiBOQ1I1M0M5WF9ERUJVRw0K
WGV4dGVybiBpbnQgbmNyNTNjOXhfZGVidWc7DQpYI2RlZmluZSBOQ1JfRUNC
UyhzdHIpCVwNClgJZG8ge2lmIChuY3I1M2M5eF9kZWJ1ZyAmIE5DUl9TSE9X
RUNCUykgcHJpbnRmIHN0cjt9IHdoaWxlICgwKQ0KWCNkZWZpbmUgTkNSX01J
U0Moc3RyKQlcDQpYCWRvIHtpZiAobmNyNTNjOXhfZGVidWcgJiBOQ1JfU0hP
V01JU0MpIHByaW50ZiBzdHI7fSB3aGlsZSAoMCkNClgjZGVmaW5lIE5DUl9J
TlRTKHN0cikJXA0KWAlkbyB7aWYgKG5jcjUzYzl4X2RlYnVnICYgTkNSX1NI
T1dJTlRTKSBwcmludGYgc3RyO30gd2hpbGUgKDApDQpYI2RlZmluZSBOQ1Jf
VFJBQ0Uoc3RyKQlcDQpYCWRvIHtpZiAobmNyNTNjOXhfZGVidWcgJiBOQ1Jf
U0hPV1RSQUMpIHByaW50ZiBzdHI7fSB3aGlsZSAoMCkNClgjZGVmaW5lIE5D
Ul9DTURTKHN0cikJXA0KWAlkbyB7aWYgKG5jcjUzYzl4X2RlYnVnICYgTkNS
X1NIT1dDTURTKSBwcmludGYgc3RyO30gd2hpbGUgKDApDQpYI2RlZmluZSBO
Q1JfU1RBUlQoc3RyKQlcDQpYCWRvIHtpZiAobmNyNTNjOXhfZGVidWcgJiBO
Q1JfU0hPV1NUQVJUKSBwcmludGYgc3RyO313aGlsZSAoMCkNClgjZGVmaW5l
IE5DUl9QSEFTRShzdHIpCVwNClgJZG8ge2lmIChuY3I1M2M5eF9kZWJ1ZyAm
IE5DUl9TSE9XUEhBU0UpIHByaW50ZiBzdHI7fXdoaWxlICgwKQ0KWCNkZWZp
bmUgTkNSX0RNQShzdHIpCVwNClgJZG8ge2lmIChuY3I1M2M5eF9kZWJ1ZyAm
IE5DUl9TSE9XRE1BKSBwcmludGYgc3RyO313aGlsZSAoMCkNClgjZGVmaW5l
IE5DUl9NU0dTKHN0cikJXA0KWAlkbyB7aWYgKG5jcjUzYzl4X2RlYnVnICYg
TkNSX1NIT1dNU0dTKSBwcmludGYgc3RyO313aGlsZSAoMCkNClgjZWxzZQ0K
WCNkZWZpbmUgTkNSX0VDQlMoc3RyKQ0KWCNkZWZpbmUgTkNSX01JU0Moc3Ry
KQ0KWCNkZWZpbmUgTkNSX0lOVFMoc3RyKQ0KWCNkZWZpbmUgTkNSX1RSQUNF
KHN0cikNClgjZGVmaW5lIE5DUl9DTURTKHN0cikNClgjZGVmaW5lIE5DUl9T
VEFSVChzdHIpDQpYI2RlZmluZSBOQ1JfUEhBU0Uoc3RyKQ0KWCNkZWZpbmUg
TkNSX0RNQShzdHIpDQpYI2RlZmluZSBOQ1JfTVNHUyhzdHIpDQpYI2VuZGlm
DQpYDQpYI2RlZmluZSBOQ1JfTUFYX01TR19MRU4gOA0KWA0KWHN0cnVjdCBu
Y3I1M2M5eF9zb2Z0YzsNClgNClgvKg0KWCAqIEZ1bmN0aW9uIHN3aXRjaCB1
c2VkIGFzIGdsdWUgdG8gTUQgY29kZS4NClggKi8NClhzdHJ1Y3QgbmNyNTNj
OXhfZ2x1ZSB7DQpYCS8qIE1hbmRhdG9yeSBlbnRyeSBwb2ludHMuICovDQpY
CXVfY2hhcgkoKmdsX3JlYWRfcmVnKShzdHJ1Y3QgbmNyNTNjOXhfc29mdGMg
KiwgaW50KTsNClgJdm9pZAkoKmdsX3dyaXRlX3JlZykoc3RydWN0IG5jcjUz
Yzl4X3NvZnRjICosIGludCwgdV9jaGFyKTsNClgJaW50CSgqZ2xfZG1hX2lz
aW50cikoc3RydWN0IG5jcjUzYzl4X3NvZnRjICopOw0KWAl2b2lkCSgqZ2xf
ZG1hX3Jlc2V0KShzdHJ1Y3QgbmNyNTNjOXhfc29mdGMgKik7DQpYCWludAko
KmdsX2RtYV9pbnRyKShzdHJ1Y3QgbmNyNTNjOXhfc29mdGMgKik7DQpYCWlu
dAkoKmdsX2RtYV9zZXR1cCkoc3RydWN0IG5jcjUzYzl4X3NvZnRjICosDQpY
CQkgICAgY2FkZHJfdCAqLCBzaXplX3QgKiwgaW50LCBzaXplX3QgKik7DQpY
CXZvaWQJKCpnbF9kbWFfZ28pKHN0cnVjdCBuY3I1M2M5eF9zb2Z0YyAqKTsN
ClgJdm9pZAkoKmdsX2RtYV9zdG9wKShzdHJ1Y3QgbmNyNTNjOXhfc29mdGMg
Kik7DQpYCWludAkoKmdsX2RtYV9pc2FjdGl2ZSkoc3RydWN0IG5jcjUzYzl4
X3NvZnRjICopOw0KWA0KWAkvKiBPcHRpb25hbCBlbnRyeSBwb2ludHMuICov
DQpYCXZvaWQJKCpnbF9jbGVhcl9sYXRjaGVkX2ludHIpKHN0cnVjdCBuY3I1
M2M5eF9zb2Z0YyAqKTsNClh9Ow0KWA0KWHN0cnVjdCBuY3I1M2M5eF9zb2Z0
YyB7DQpYCXN0cnVjdCBkZXZpY2Ugc2NfZGV2OwkJCS8qIHVzIGFzIGEgZGV2
aWNlICovDQpYDQpYCXN0cnVjdCBldmNudCBzY19pbnRyY250OwkJLyogaW50
ciBjb3VudCAqLw0KWAlzdHJ1Y3Qgc2NzaXBpX2xpbmsgc2NfbGluazsJCS8q
IHNjc2lwaSBsaW5rIHN0cnVjdCAqLw0KWAlzdHJ1Y3QgZGV2aWNlICpzY19j
aGlsZDsJCS8qIGF0dGFjaGVkIHNjc2lidXMsIGlmIGFueSAqLw0KWAlzdHJ1
Y3QgY2FsbG91dCBzY193YXRjaGRvZzsJCS8qIHBlcmlvZGljIHRpbWVyICov
DQpYDQpYCXN0cnVjdCBuY3I1M2M5eF9nbHVlICpzY19nbHVlOwkJLyogZ2x1
ZSB0byBNRCBjb2RlICovDQpYDQpYCWludAlzY19jZmZsYWdzOwkJCS8qIENv
cHkgb2YgY29uZmlnIGZsYWdzICovDQpYDQpYCS8qIHJlZ2lzdGVyIGRlZmF1
bHRzICovDQpYCXVfY2hhcglzY19jZmcxOwkJCS8qIENvbmZpZyAxICovDQpY
CXVfY2hhcglzY19jZmcyOwkJCS8qIENvbmZpZyAyLCBub3QgRVNQMTAwICov
DQpYCXVfY2hhcglzY19jZmczOwkJCS8qIENvbmZpZyAzLCBvbmx5IEVTUDIw
MCAqLw0KWAl1X2NoYXIJc2NfY2ZnM19mc2NzaTsJCQkvKiBDaGlwLXNwZWNp
ZmljIEZTQ1NJIGJpdCAqLw0KWAl1X2NoYXIJc2NfY2ZnNDsJCQkvKiBDb25m
aWcgMywgb25seSBFU1AyMDAgKi8NClgJdV9jaGFyCXNjX2NmZzU7CQkJLyog
Q29uZmlnIDMsIG9ubHkgRVNQMjAwICovDQpYCXVfY2hhcglzY19jY2Y7CQkJ
CS8qIENsb2NrIENvbnZlcnNpb24gKi8NClgJdV9jaGFyCXNjX3RpbWVvdXQ7
DQpYDQpYCS8qIHJlZ2lzdGVyIGNvcGllcywgc2VlIGVzcHJlYWRyZWdzKCkg
Ki8NClgJdV9jaGFyCXNjX2VzcGludHI7DQpYCXVfY2hhcglzY19lc3BzdGF0
Ow0KWAl1X2NoYXIJc2NfZXNwc3RlcDsNClgJdV9jaGFyICBzY19lc3BzdGF0
MjsNClgJdV9jaGFyCXNjX2VzcGZmbGFnczsNClgNClgJLyogTGlzdHMgb2Yg
Y29tbWFuZCBibG9ja3MgKi8NClgJVEFJTFFfSEVBRChlY2JfbGlzdCwgbmNy
NTNjOXhfZWNiKQ0KWAkJcmVhZHlfbGlzdDsNClgNClgJc3RydWN0IG5jcjUz
Yzl4X2VjYiAqc2NfbmV4dXM7CQkvKiBDdXJyZW50IGNvbW1hbmQgKi8NClgJ
c3RydWN0IG5jcjUzYzl4X3RpbmZvIHNjX3RpbmZvW05DUl9OVEFSR107DQpY
DQpYCS8qIERhdGEgYWJvdXQgdGhlIGN1cnJlbnQgbmV4dXMgKHVwZGF0ZWQg
Zm9yIGV2ZXJ5IGNtZCBzd2l0Y2gpICovDQpYCWNhZGRyX3QJc2NfZHA7CQkv
KiBDdXJyZW50IGRhdGEgcG9pbnRlciAqLw0KWAlzc2l6ZV90CXNjX2RsZWZ0
OwkvKiBEYXRhIGxlZnQgdG8gdHJhbnNmZXIgKi8NClgNClgJLyogQWRhcHRl
ciBzdGF0ZSAqLw0KWAlpbnQJc2NfcGhhc2U7CS8qIENvcHkgb2Ygd2hhdCBi
dXMgcGhhc2Ugd2UgYXJlIGluICovDQpYCWludAlzY19wcmV2cGhhc2U7CS8q
IENvcHkgb2Ygd2hhdCBidXMgcGhhc2Ugd2Ugd2VyZSBpbiAqLw0KWAl1X2No
YXIJc2Nfc3RhdGU7CS8qIFN0YXRlIGFwcGxpY2FibGUgdG8gdGhlIGFkYXB0
ZXIgKi8NClgJdV9jaGFyCXNjX2ZsYWdzOwkvKiBTZWUgYmVsb3cgKi8NClgJ
dV9jaGFyCXNjX3NlbGlkOw0KWAl1X2NoYXIJc2NfbGFzdGNtZDsNClgNClgJ
LyogTWVzc2FnZSBzdHVmZiAqLw0KWAl1X3Nob3J0IHNjX21zZ2lmeTsJLyog
SURFTlRJRlkgbWVzc2FnZSBhc3NvY2lhdGVkIHdpdGggdGhpcyBuZXh1cyAq
Lw0KWAl1X3Nob3J0CXNjX21zZ291dDsJLyogV2hhdCBtZXNzYWdlIGlzIG9u
IGl0cyB3YXkgb3V0PyAqLw0KWAl1X3Nob3J0CXNjX21zZ3ByaXE7CS8qIE9u
ZSBvciBtb3JlIG1lc3NhZ2VzIHRvIHNlbmQgKGVuY29kZWQpICovDQpYCXVf
c2hvcnQJc2NfbXNnb3V0cTsJLyogV2hhdCBtZXNzYWdlcyBoYXZlIGJlZW4g
c2VudCBzbyBmYXI/ICovDQpYDQpYCXVfY2hhcgkqc2Nfb21lc3M7CS8qIE1T
R09VVCBidWZmZXIgKi8NClgJY2FkZHJfdAlzY19vbXA7CQkvKiBNZXNzYWdl
IHBvaW50ZXIgKGZvciBtdWx0aWJ5dGUgbWVzc2FnZXMpICovDQpYCXNpemVf
dAlzY19vbWxlbjsNClgJdV9jaGFyCSpzY19pbWVzczsJLyogTVNHSU4gYnVm
ZmVyICovDQpYCWNhZGRyX3QJc2NfaW1wOwkJLyogTWVzc2FnZSBwb2ludGVy
IChmb3IgbXVsdGlieXRlIG1lc3NhZ2VzKSAqLw0KWAlzaXplX3QJc2NfaW1s
ZW47DQpYDQpYCWNhZGRyX3QJc2NfY21kcDsJLyogQ29tbWFuZCBwb2ludGVy
IChmb3IgRE1BZWQgY29tbWFuZHMpICovDQpYCXNpemVfdAlzY19jbWRsZW47
CS8qIFNpemUgb2YgY29tbWFuZCBpbiB0cmFuc2l0ICovDQpYDQpYCS8qIEhh
cmR3YXJlIGF0dHJpYnV0ZXMgKi8NClgJaW50IHNjX2ZyZXE7CQkvKiBTQ1NJ
IGJ1cyBmcmVxdWVuY3kgaW4gTUh6ICovDQpYCWludCBzY19pZDsJCS8qIE91
ciBTQ1NJIGlkICovDQpYCWludCBzY19yZXY7CQkvKiBDaGlwIHJldmlzaW9u
ICovDQpYCWludCBzY19mZWF0dXJlczsJLyogQ2hpcCBmZWF0dXJlcyAqLw0K
WAlpbnQgc2NfbWluc3luYzsJCS8qIE1pbmltdW0gc3luYyBwZXJpb2QgLyA0
ICovDQpYCWludCBzY19tYXh4ZmVyOwkJLyogTWF4aW11bSB0cmFuc2ZlciBz
aXplICovDQpYfTsNClgNClgvKiB2YWx1ZXMgZm9yIHNjX3N0YXRlICovDQpY
I2RlZmluZSBOQ1JfSURMRQkxCS8qIHdhaXRpbmcgZm9yIHNvbWV0aGluZyB0
byBkbyAqLw0KWCNkZWZpbmUgTkNSX1NFTEVDVElORwkyCS8qIFNDU0kgY29t
bWFuZCBpcyBhcmJpdGluZyAgKi8NClgjZGVmaW5lIE5DUl9SRVNFTEVDVEVE
CTMJLyogSGFzIGJlZW4gcmVzZWxlY3RlZCAqLw0KWCNkZWZpbmUgTkNSX0lE
RU5USUZJRUQJNAkvKiBIYXMgZ290dGVuIElGWSBidXQgbm90IFRBRyAqLw0K
WCNkZWZpbmUgTkNSX0NPTk5FQ1RFRAk1CS8qIEFjdGl2ZWx5IHVzaW5nIHRo
ZSBTQ1NJIGJ1cyAqLw0KWCNkZWZpbmUJTkNSX0RJU0NPTk5FQ1QJNgkvKiBN
U0dfRElTQ09OTkVDVCByZWNlaXZlZCAqLw0KWCNkZWZpbmUJTkNSX0NNRENP
TVBMRVRFCTcJLyogTVNHX0NNRENPTVBMRVRFIHJlY2VpdmVkICovDQpYI2Rl
ZmluZQlOQ1JfQ0xFQU5JTkcJOA0KWCNkZWZpbmUgTkNSX1NCUgkJOQkvKiBF
eHBlY3QgYSBTQ1NJIFJTVCBiZWNhdXNlIHdlIGNvbW1hbmRlZCBpdCAqLw0K
WA0KWC8qIHZhbHVlcyBmb3Igc2NfZmxhZ3MgKi8NClgjZGVmaW5lIE5DUl9E
Uk9QX01TR0kJMHgwMQkvKiBEaXNjYXJkIGFsbCBtc2dzIChwYXJpdHkgZXJy
IGRldGVjdGVkKSAqLw0KWCNkZWZpbmUgTkNSX0FCT1JUSU5HCTB4MDIJLyog
QmFpbGluZyBvdXQgKi8NClgjZGVmaW5lIE5DUl9ET0lOR0RNQQkweDA0CS8q
IFRoZSBGSUZPIGRhdGEgcGF0aCBpcyBhY3RpdmUhICovDQpYI2RlZmluZSBO
Q1JfU1lOQ0hORUdPCTB4MDgJLyogU3luY2ggbmVnb3RpYXRpb24gaW4gcHJv
Z3Jlc3MuICovDQpYI2RlZmluZSBOQ1JfSUNDUwkweDEwCS8qIEV4cGVjdCBz
dGF0dXMgcGhhc2UgcmVzdWx0cyAqLw0KWCNkZWZpbmUgTkNSX1dBSVRJCTB4
MjAJLyogV2FpdGluZyBmb3Igbm9uLURNQSBkYXRhIHRvIGFycml2ZSAqLw0K
WCNkZWZpbmUJTkNSX0FUTgkJMHg0MAkvKiBBVE4gYXNzZXJ0ZWQgKi8NClgj
ZGVmaW5lCU5DUl9FWFBFQ1RfSUxMQ01ECTB4ODAJLyogRXhwZWN0IElsbGVn
YWwgQ29tbWFuZCBJbnRlcnJ1cHQgKi8NClgNClgvKiB2YWx1ZXMgZm9yIHNj
X2ZlYXR1cmVzICovDQpYI2RlZmluZQlOQ1JfRl9IQVNDRkczCTB4MDEJLyog
Y2hpcCBoYXMgQ0ZHMyByZWdpc3RlciAqLw0KWCNkZWZpbmUJTkNSX0ZfRkFT
VFNDU0kJMHgwMgkvKiBjaGlwIHN1cHBvcnRzIEZhc3QgbW9kZSAqLw0KWCNk
ZWZpbmUgTkNSX0ZfRE1BU0VMRUNUIDB4MDQJLyogICAgICBjYW4gZG8gZG1h
c2VsZWN0ICovDQpYDQpYLyogdmFsdWVzIGZvciBzY19tc2dvdXQgKi8NClgj
ZGVmaW5lIFNFTkRfREVWX1JFU0VUCQkweDAwMDENClgjZGVmaW5lIFNFTkRf
UEFSSVRZX0VSUk9SCTB4MDAwMg0KWCNkZWZpbmUgU0VORF9JTklUX0RFVF9F
UlIJMHgwMDA0DQpYI2RlZmluZSBTRU5EX1JFSkVDVAkJMHgwMDA4DQpYI2Rl
ZmluZSBTRU5EX0lERU5USUZZICAJCTB4MDAxMA0KWCNkZWZpbmUgU0VORF9B
Qk9SVAkJMHgwMDIwDQpYI2RlZmluZSBTRU5EX1dEVFIJCTB4MDA0MA0KWCNk
ZWZpbmUgU0VORF9TRFRSCQkweDAwODANClgjZGVmaW5lIFNFTkRfVEFHCQkw
eDAxMDANClgNClgvKiBTQ1NJIFN0YXR1cyBjb2RlcyAqLw0KWCNkZWZpbmUg
U1RfTUFTSwkJCTB4M2UgLyogYml0IDAsNiw3IGlzIHJlc2VydmVkICovDQpY
DQpYLyogcGhhc2UgYml0cyAqLw0KWCNkZWZpbmUgSU9JCQkJMHgwMQ0KWCNk
ZWZpbmUgQ0RJCQkJMHgwMg0KWCNkZWZpbmUgTVNHSQkJCTB4MDQNClgNClgv
KiBJbmZvcm1hdGlvbiB0cmFuc2ZlciBwaGFzZXMgKi8NClgjZGVmaW5lIERB
VEFfT1VUX1BIQVNFCQkoMCkNClgjZGVmaW5lIERBVEFfSU5fUEhBU0UJCShJ
T0kpDQpYI2RlZmluZSBDT01NQU5EX1BIQVNFCQkoQ0RJKQ0KWCNkZWZpbmUg
U1RBVFVTX1BIQVNFCQkoQ0RJfElPSSkNClgjZGVmaW5lIE1FU1NBR0VfT1VU
X1BIQVNFCShNU0dJfENESSkNClgjZGVmaW5lIE1FU1NBR0VfSU5fUEhBU0UJ
KE1TR0l8Q0RJfElPSSkNClgNClgjZGVmaW5lIFBIQVNFX01BU0sJCShNU0dJ
fENESXxJT0kpDQpYDQpYLyogU29tZSBwc2V1ZG8gcGhhc2VzIGZvciBnZXRw
aGFzZSgpKi8NClgjZGVmaW5lIEJVU0ZSRUVfUEhBU0UJCTB4MTAwCS8qIFJl
L1NlbGVjdGlvbiBubyBsb25nZXIgdmFsaWQgKi8NClgjZGVmaW5lIElOVkFM
SURfUEhBU0UJCTB4MTAxCS8qIFJlL1NlbGVjdGlvbiB2YWxpZCwgYnV0IG5v
IFJFUSB5ZXQgKi8NClgjZGVmaW5lIFBTRVVET19QSEFTRQkJMHgxMDAJLyog
InBzZXVkbyIgYml0ICovDQpYDQpYLyoNClggKiBNYWNyb3MgdG8gcmVhZCBh
bmQgd3JpdGUgdGhlIGNoaXAncyByZWdpc3RlcnMuDQpYICovDQpYI2RlZmlu
ZQlOQ1JfUkVBRF9SRUcoc2MsIHJlZykJCVwNClgJKCooc2MpLT5zY19nbHVl
LT5nbF9yZWFkX3JlZykoKHNjKSwgKHJlZykpDQpYI2RlZmluZQlOQ1JfV1JJ
VEVfUkVHKHNjLCByZWcsIHZhbCkJXA0KWAkoKihzYyktPnNjX2dsdWUtPmds
X3dyaXRlX3JlZykoKHNjKSwgKHJlZyksICh2YWwpKQ0KWA0KWCNpZmRlZiBO
Q1I1M0M5WF9ERUJVRw0KWCNkZWZpbmUJTkNSQ01EKHNjLCBjbWQpIGRvIHsJ
CQkJCQlcDQpYCWlmICgobmNyNTNjOXhfZGVidWcgJiBOQ1JfU0hPV0NDTURT
KSAhPSAwKQkJCVwNClgJCXByaW50ZigiPGNtZDoweCV4ICVkPiIsICh1bnNp
Z25lZCljbWQsIF9fTElORV9fKTsJXA0KWAlzYy0+c2NfbGFzdGNtZCA9IGNt
ZDsJCQkJCQlcDQpYCU5DUl9XUklURV9SRUcoc2MsIE5DUl9DTUQsIGNtZCk7
CQkJCVwNClh9IHdoaWxlICgwKQ0KWCNlbHNlDQpYI2RlZmluZQlOQ1JDTUQo
c2MsIGNtZCkJCU5DUl9XUklURV9SRUcoc2MsIE5DUl9DTUQsIGNtZCkNClgj
ZW5kaWYNClgNClgvKg0KWCAqIERNQSBtYWNyb3MgZm9yIE5DUjUzYzl4DQpY
ICovDQpYI2RlZmluZQlOQ1JETUFfSVNJTlRSKHNjKQkoKihzYyktPnNjX2ds
dWUtPmdsX2RtYV9pc2ludHIpKChzYykpDQpYI2RlZmluZQlOQ1JETUFfUkVT
RVQoc2MpCSgqKHNjKS0+c2NfZ2x1ZS0+Z2xfZG1hX3Jlc2V0KSgoc2MpKQ0K
WCNkZWZpbmUJTkNSRE1BX0lOVFIoc2MpCQkoKihzYyktPnNjX2dsdWUtPmds
X2RtYV9pbnRyKSgoc2MpKQ0KWCNkZWZpbmUJTkNSRE1BX1NFVFVQKHNjLCBh
ZGRyLCBsZW4sIGRhdGFpbiwgZG1hc2l6ZSkJXA0KWCAgICAgKCooc2MpLT5z
Y19nbHVlLT5nbF9kbWFfc2V0dXApKChzYyksIChhZGRyKSwgKGxlbiksIChk
YXRhaW4pLCAoZG1hc2l6ZSkpDQpYI2RlZmluZQlOQ1JETUFfR08oc2MpCQko
KihzYyktPnNjX2dsdWUtPmdsX2RtYV9nbykoKHNjKSkNClgjZGVmaW5lCU5D
UkRNQV9JU0FDVElWRShzYykJKCooc2MpLT5zY19nbHVlLT5nbF9kbWFfaXNh
Y3RpdmUpKChzYykpDQpYDQpYLyoNClggKiBNYWNybyB0byBjb252ZXJ0IHRo
ZSBjaGlwIHJlZ2lzdGVyIENsb2NrIFBlciBCeXRlIHZhbHVlIHRvDQpYICog
U3VuY2hyb25vdXMgVHJhbnNmZXIgUGVyaW9kLg0KWCAqLw0KWCNkZWZpbmUJ
bmNyNTNjOXhfY3BiMnN0cChzYywgY3BiKQlcDQpYCSgoMjUwICogKGNwYikp
IC8gKHNjKS0+c2NfZnJlcSkNClgNClh2b2lkCW5jcjUzYzl4X2F0dGFjaChz
dHJ1Y3QgbmNyNTNjOXhfc29mdGMgKiwNClgJCQlzdHJ1Y3Qgc2NzaXBpX2Fk
YXB0ZXIgKiwgc3RydWN0IHNjc2lwaV9kZXZpY2UgKik7DQpYaW50CW5jcjUz
Yzl4X2RldGFjaChzdHJ1Y3QgbmNyNTNjOXhfc29mdGMgKiwgaW50KTsNClhp
bnQJbmNyNTNjOXhfc2NzaV9jbWQoc3RydWN0IHNjc2lwaV94ZmVyICopOw0K
WHZvaWQJbmNyNTNjOXhfcmVzZXQoc3RydWN0IG5jcjUzYzl4X3NvZnRjICop
Ow0KWGludAluY3I1M2M5eF9pbnRyKHZvaWQgKik7DQpYdm9pZAluY3I1M2M5
eF9pbml0KHN0cnVjdCBuY3I1M2M5eF9zb2Z0YyAqLCBpbnQpOw0KWA0KWGV4
dGVybglpbnQgbmNyNTNjOXhfZG1hc2VsZWN0Ow0KRU5ELW9mLWljL25jcjUz
Yzl4dmFyLmgNCmVjaG8geCAtIGljL2xzaTY0ODU0LmMNCnNlZCAncy9eWC8v
JyA+aWMvbHNpNjQ4NTQuYyA8PCAnRU5ELW9mLWljL2xzaTY0ODU0LmMnDQpY
LyoJJE5ldEJTRDogbHNpNjQ4NTQuYyx2IDEuMTQgMjAwMC8xMS8xNCAxODoy
MTowMiB0aG9ycGVqIEV4cCAkICovDQpYDQpYLyotDQpYICogQ29weXJpZ2h0
IChjKSAxOTk4IFRoZSBOZXRCU0QgRm91bmRhdGlvbiwgSW5jLg0KWCAqIEFs
bCByaWdodHMgcmVzZXJ2ZWQuDQpYICoNClggKiBUaGlzIGNvZGUgaXMgZGVy
aXZlZCBmcm9tIHNvZnR3YXJlIGNvbnRyaWJ1dGVkIHRvIFRoZSBOZXRCU0Qg
Rm91bmRhdGlvbg0KWCAqIGJ5IFBhdWwgS3JhbmVuYnVyZy4NClggKg0KWCAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dA0KWCAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucw0KWCAqIGFyZSBtZXQ6DQpYICogMS4gUmVkaXN0cmlidXRpb25zIG9m
IHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQN
ClggKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuDQpYICogMi4gUmVkaXN0cmlidXRp
b25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBj
b3B5cmlnaHQNClggKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlDQpYICog
ICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4NClggKiAzLiBBbGwgYWR2ZXJ0
aXNpbmcgbWF0ZXJpYWxzIG1lbnRpb25pbmcgZmVhdHVyZXMgb3IgdXNlIG9m
IHRoaXMgc29mdHdhcmUNClggKiAgICBtdXN0IGRpc3BsYXkgdGhlIGZvbGxv
d2luZyBhY2tub3dsZWRnZW1lbnQ6DQpYICogICAgICAgIFRoaXMgcHJvZHVj
dCBpbmNsdWRlcyBzb2Z0d2FyZSBkZXZlbG9wZWQgYnkgdGhlIE5ldEJTRA0K
WCAqICAgICAgICBGb3VuZGF0aW9uLCBJbmMuIGFuZCBpdHMgY29udHJpYnV0
b3JzLg0KWCAqIDQuIE5laXRoZXIgdGhlIG5hbWUgb2YgVGhlIE5ldEJTRCBG
b3VuZGF0aW9uIG5vciB0aGUgbmFtZXMgb2YgaXRzDQpYICogICAgY29udHJp
YnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9k
dWN0cyBkZXJpdmVkDQpYICogICAgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhv
dXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLg0KWCAqDQpY
ICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgTkVUQlNEIEZP
VU5EQVRJT04sIElOQy4gQU5EIENPTlRSSUJVVE9SUw0KWCAqIGBgQVMgSVMn
JyBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRA0KWCAqIFRPLCBUSEUgSU1QTElFRCBX
QVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSDQpYICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElO
IE5PIEVWRU5UIFNIQUxMIFRIRSBGT1VOREFUSU9OIE9SIENPTlRSSUJVVE9S
Uw0KWCAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1INClggKiBDT05TRVFV
RU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBQUk9DVVJFTUVOVCBPRg0KWCAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VS
VklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJ
TkVTUw0KWCAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9O
IEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElODQpYICogQ09O
VFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkNClggKiBBUklTSU5HIElOIEFOWSBX
QVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GIFRIRQ0KWCAqIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
Lg0KWCAqLw0KWA0KWCNpbmNsdWRlIDxzeXMvdHlwZXMuaD4NClgjaW5jbHVk
ZSA8c3lzL3BhcmFtLmg+DQpYI2luY2x1ZGUgPHN5cy9zeXN0bS5oPg0KWCNp
bmNsdWRlIDxzeXMva2VybmVsLmg+DQpYI2luY2x1ZGUgPHN5cy9lcnJuby5o
Pg0KWCNpbmNsdWRlIDxzeXMvZGV2aWNlLmg+DQpYI2luY2x1ZGUgPHN5cy9t
YWxsb2MuaD4NClgNClgjaW5jbHVkZSA8dXZtL3V2bV9leHRlcm4uaD4NClgN
ClgjaW5jbHVkZSA8bWFjaGluZS9idXMuaD4NClgjaW5jbHVkZSA8bWFjaGlu
ZS9hdXRvY29uZi5oPg0KWCNpbmNsdWRlIDxtYWNoaW5lL2NwdS5oPg0KWA0K
WCNpbmNsdWRlIDxkZXYvc2NzaXBpL3Njc2lfYWxsLmg+DQpYI2luY2x1ZGUg
PGRldi9zY3NpcGkvc2NzaXBpX2FsbC5oPg0KWCNpbmNsdWRlIDxkZXYvc2Nz
aXBpL3Njc2ljb25mLmg+DQpYDQpYI2luY2x1ZGUgPGRldi9pYy9sc2k2NDg1
NHJlZy5oPg0KWCNpbmNsdWRlIDxkZXYvaWMvbHNpNjQ4NTR2YXIuaD4NClgN
ClgjaW5jbHVkZSA8ZGV2L2ljL25jcjUzYzl4cmVnLmg+DQpYI2luY2x1ZGUg
PGRldi9pYy9uY3I1M2M5eHZhci5oPg0KWA0KWHZvaWQJbHNpNjQ4NTRfcmVz
ZXQJX19QKChzdHJ1Y3QgbHNpNjQ4NTRfc29mdGMgKikpOw0KWGludAlsc2k2
NDg1NF9zZXR1cAlfX1AoKHN0cnVjdCBsc2k2NDg1NF9zb2Z0YyAqLCBjYWRk
cl90ICosIHNpemVfdCAqLA0KWAkJCSAgICAgaW50LCBzaXplX3QgKikpOw0K
WGludAlsc2k2NDg1NF9zZXR1cF9wcCBfX1AoKHN0cnVjdCBsc2k2NDg1NF9z
b2Z0YyAqLCBjYWRkcl90ICosIHNpemVfdCAqLA0KWAkJCSAgICAgaW50LCBz
aXplX3QgKikpOw0KWA0KWCNpZmRlZiBERUJVRw0KWCNkZWZpbmUgTERCX1ND
U0kJMQ0KWCNkZWZpbmUgTERCX0VORVQJMg0KWCNkZWZpbmUgTERCX1BQCQk0
DQpYI2RlZmluZSBMREJfQU5ZCQkweGZmDQpYaW50IGxzaTY0ODU0ZGVidWcg
PSAwOw0KWCNkZWZpbmUgRFBSSU5URihhLHgpIGRvIHsgaWYgKGxzaTY0ODU0
ZGVidWcgJiAoYSkpIHByaW50ZiB4IDsgfSB3aGlsZSAoMCkNClgjZWxzZQ0K
WCNkZWZpbmUgRFBSSU5URihhLHgpDQpYI2VuZGlmDQpYDQpYI2RlZmluZSBN
QVhfRE1BX1NaCSgxNioxMDI0KjEwMjQpDQpYDQpYLyoNClggKiBGaW5pc2gg
YXR0YWNoaW5nIHRoaXMgRE1BIGRldmljZS4NClggKiBGcm9udC1lbmQgbXVz
dCBmaWxsIGluIHRoZXNlIGZpZWxkczoNClggKglzY19idXN0YWcNClggKglz
Y19kbWF0YWcNClggKglzY19yZWdzDQpYICoJc2NfYnVyc3QNClggKglzY19j
aGFubmVsIChvbmUgb2YgU0NTSSwgRU5FVCwgUFApDQpYICoJc2NfY2xpZW50
IChvbmUgb2YgU0NTSSwgRU5FVCwgUFAgYHNvZnRfYycgcG9pbnRlcnMpDQpY
ICovDQpYdm9pZA0KWGxzaTY0ODU0X2F0dGFjaChzYykNClgJc3RydWN0IGxz
aTY0ODU0X3NvZnRjICpzYzsNClh7DQpYCXVfaW50MzJfdCBjc3I7DQpYDQpY
CS8qIEluZGlyZWN0IGZ1bmN0aW9ucyAqLw0KWAlzd2l0Y2ggKHNjLT5zY19j
aGFubmVsKSB7DQpYCWNhc2UgTDY0ODU0X0NIQU5ORUxfU0NTSToNClgJCXNj
LT5pbnRyID0gbHNpNjQ4NTRfc2NzaV9pbnRyOw0KWAkJc2MtPnNldHVwID0g
bHNpNjQ4NTRfc2V0dXA7DQpYCQlicmVhazsNClgJY2FzZSBMNjQ4NTRfQ0hB
Tk5FTF9FTkVUOg0KWAkJc2MtPmludHIgPSBsc2k2NDg1NF9lbmV0X2ludHI7
DQpYCQlicmVhazsNClgJY2FzZSBMNjQ4NTRfQ0hBTk5FTF9QUDoNClgJCXNj
LT5zZXR1cCA9IGxzaTY0ODU0X3NldHVwX3BwOw0KWAkJYnJlYWs7DQpYCWRl
ZmF1bHQ6DQpYCQlwcmludGYoIiVzOiB1bmtub3duIGNoYW5uZWxcbiIsIHNj
LT5zY19kZXYuZHZfeG5hbWUpOw0KWAl9DQpYCXNjLT5yZXNldCA9IGxzaTY0
ODU0X3Jlc2V0Ow0KWA0KWAkvKiBBbGxvY2F0ZSBhIGRtYW1hcCAqLw0KWAlp
ZiAoYnVzX2RtYW1hcF9jcmVhdGUoc2MtPnNjX2RtYXRhZywgTUFYX0RNQV9T
WiwgMSwgTUFYX0RNQV9TWiwNClgJCQkgICAgICAwLCBCVVNfRE1BX1dBSVRP
SywgJnNjLT5zY19kbWFtYXApICE9IDApIHsNClgJCXByaW50ZigiJXM6IGRt
YSBtYXAgY3JlYXRlIGZhaWxlZFxuIiwgc2MtPnNjX2Rldi5kdl94bmFtZSk7
DQpYCQlyZXR1cm47DQpYCX0NClgNClgJcHJpbnRmKCIlczogIHJldiAiLCBz
Yy0+c2NfZGV2LmR2X3huYW1lKTsNClgJY3NyID0gTDY0ODU0X0dDU1Ioc2Mp
Ow0KWAlzYy0+c2NfcmV2ID0gY3NyICYgTDY0ODU0X0RFVklEOw0KWAlzd2l0
Y2ggKHNjLT5zY19yZXYpIHsNClgJY2FzZSBETUFSRVZfMDoNClgJCXByaW50
ZigiMCIpOw0KWAkJYnJlYWs7DQpYCWNhc2UgRE1BUkVWX0VTQzoNClgJCXBy
aW50ZigiZXNjIik7DQpYCQlicmVhazsNClgJY2FzZSBETUFSRVZfMToNClgJ
CXByaW50ZigiMSIpOw0KWAkJYnJlYWs7DQpYCWNhc2UgRE1BUkVWX1BMVVM6
DQpYCQlwcmludGYoIjErIik7DQpYCQlicmVhazsNClgJY2FzZSBETUFSRVZf
MjoNClgJCXByaW50ZigiMiIpOw0KWAkJYnJlYWs7DQpYCWNhc2UgRE1BUkVW
X0hNRToNClgJCXByaW50ZigiZmFzIik7DQpYCQlicmVhazsNClgJZGVmYXVs
dDoNClgJCXByaW50ZigidW5rbm93biAoMHgleCkiLCBzYy0+c2NfcmV2KTsN
ClgJfQ0KWA0KWAlEUFJJTlRGKExEQl9BTlksICgiLCBidXJzdCAweCV4LCBj
c3IgMHgleFxuIiwgc2MtPnNjX2J1cnN0LCBjc3IpKTsNClh9DQpYDQpYLyoN
ClggKiBETUFXQUlUICB3YWl0cyB3aGlsZSBjb25kaXRpb24gaXMgdHJ1ZQ0K
WCAqLw0KWCNkZWZpbmUgRE1BV0FJVChTQywgQ09ORCwgTVNHLCBET05UUEFO
SUMpIGRvIGlmIChDT05EKSB7CQlcDQpYCWludCBjb3VudCA9IDUwMDAwMDsJ
CQkJCQlcDQpYCXdoaWxlICgoQ09ORCkgJiYgLS1jb3VudCA+IDApIERFTEFZ
KDEpOwkJCQlcDQpYCWlmIChjb3VudCA9PSAwKSB7CQkJCQkJXA0KWAkJcHJp
bnRmKCIlczogbGluZSAlZDogQ1NSID0gMHglbHhcbiIsIF9fRklMRV9fLCBf
X0xJTkVfXywgXA0KWAkJCSh1X2xvbmcpTDY0ODU0X0dDU1IoU0MpKTsJCQlc
DQpYCQlpZiAoRE9OVFBBTklDKQkJCQkJCVwNClgJCQlwcmludGYoTVNHKTsJ
CQkJCVwNClgJCWVsc2UJCQkJCQkJXA0KWAkJCXBhbmljKE1TRyk7CQkJCQlc
DQpYCX0JCQkJCQkJCVwNClh9IHdoaWxlICgwKQ0KWA0KWCNkZWZpbmUgRE1B
X0RSQUlOKHNjLCBkb250cGFuaWMpIGRvIHsJCQkJCVwNClgJdV9pbnQzMl90
IGNzcjsJCQkJCQkJXA0KWAkvKgkJCQkJCQkJXA0KWAkgKiBETUEgcmV2MCAm
IHJldjE6IHdlIGFyZSBub3QgYWxsb3dlZCB0byB0b3VjaCB0aGUgRE1BICJm
bHVzaCIJXA0KWAkgKiAgICAgYW5kICJkcmFpbiIgYml0cyB3aGlsZSBpdCBp
cyBzdGlsbCB0aGlua2luZyBhYm91dCBhCVwNClgJICogICAgIHJlcXVlc3Qu
CQkJCQkJCVwNClgJICogb3RoZXIgcmV2czogRF9FU0NfUl9QRU5EIGJpdCBy
ZWFkcyBhcyAwCQkJXA0KWAkgKi8JCQkJCQkJCVwNClgJRE1BV0FJVChzYywg
TDY0ODU0X0dDU1Ioc2MpICYgRF9FU0NfUl9QRU5ELCAiUl9QRU5EIiwgZG9u
dHBhbmljKTtcDQpYCWlmIChzYy0+c2NfcmV2ICE9IERNQVJFVl9ITUUpIHsg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcDQpYCSAgICAgICAg
LyoJCQkJCQkJXA0KWAkgICAgICAgICAqIFNlbGVjdCBkcmFpbiBiaXQgYmFz
ZWQgb24gcmV2aXNpb24JCQlcDQpYCSAgICAgICAgICogYWxzbyBjbGVhcnMg
ZXJyb3JzIGFuZCBEX1RDIGZsYWcJCQlcDQpYCSAgICAgICAgICovCQkJCQkJ
CVwNClgJICAgICAgICBjc3IgPSBMNjQ4NTRfR0NTUihzYyk7CQkJCQlcDQpY
CSAgICAgICAgaWYgKHNjLT5zY19yZXYgPT0gRE1BUkVWXzEgfHwgc2MtPnNj
X3JldiA9PSBETUFSRVZfMCkJXA0KWAkJICAgICAgICBjc3IgfD0gRF9FU0Nf
RFJBSU47CQkJCVwNClgJICAgICAgICBlbHNlCQkJCQkJCVwNClgJCSAgICAg
ICAgY3NyIHw9IEw2NDg1NF9JTlZBTElEQVRFOwkJCVwNClgJCQkJCQkJCQlc
DQpYCSAgICAgICAgTDY0ODU0X1NDU1Ioc2MsY3NyKTsJCQkJCVwNClgJfQkJ
CQkJCQkJXA0KWAkvKgkJCQkJCQkJXA0KWAkgKiBXYWl0IGZvciBkcmFpbmlu
ZyB0byBmaW5pc2gJCQkJCVwNClgJICogIHJldjAgJiByZXYxIGNhbGwgdGhp
cyBQQUNLQ05UCQkJCVwNClgJICovCQkJCQkJCQlcDQpYCURNQVdBSVQoc2Ms
IEw2NDg1NF9HQ1NSKHNjKSAmIEw2NDg1NF9EUkFJTklORywgIkRSQUlOSU5H
IiwgZG9udHBhbmljKTtcDQpYfSB3aGlsZSgwKQ0KWA0KWCNkZWZpbmUgRE1B
X0ZMVVNIKHNjLCBkb250cGFuaWMpIGRvIHsJCQkJCVwNClgJdV9pbnQzMl90
IGNzcjsJCQkJCQkJXA0KWAkvKgkJCQkJCQkJXA0KWAkgKiBETUEgcmV2MCAm
IHJldjE6IHdlIGFyZSBub3QgYWxsb3dlZCB0byB0b3VjaCB0aGUgRE1BICJm
bHVzaCIJXA0KWAkgKiAgICAgYW5kICJkcmFpbiIgYml0cyB3aGlsZSBpdCBp
cyBzdGlsbCB0aGlua2luZyBhYm91dCBhCVwNClgJICogICAgIHJlcXVlc3Qu
CQkJCQkJCVwNClgJICogb3RoZXIgcmV2czogRF9FU0NfUl9QRU5EIGJpdCBy
ZWFkcyBhcyAwCQkJXA0KWAkgKi8JCQkJCQkJCVwNClgJRE1BV0FJVChzYywg
TDY0ODU0X0dDU1Ioc2MpICYgRF9FU0NfUl9QRU5ELCAiUl9QRU5EIiwgZG9u
dHBhbmljKTtcDQpYCWNzciA9IEw2NDg1NF9HQ1NSKHNjKTsJCQkJCVwNClgJ
Y3NyICY9IH4oTDY0ODU0X1dSSVRFfEw2NDg1NF9FTl9ETUEpOyAvKiBuby1v
cHMgb24gRU5FVCAqLwlcDQpYCWNzciB8PSBMNjQ4NTRfSU5WQUxJREFURTsJ
IAkvKiBYWFggRkFTID8gKi8JCVwNClgJTDY0ODU0X1NDU1Ioc2MsY3NyKTsJ
CQkJCQlcDQpYfSB3aGlsZSgwKQ0KWA0KWHZvaWQNClhsc2k2NDg1NF9yZXNl
dChzYykNClgJc3RydWN0IGxzaTY0ODU0X3NvZnRjICpzYzsNClh7DQpYCXVf
aW50MzJfdCBjc3I7DQpYDQpYCURNQV9GTFVTSChzYywgMSk7DQpYCWNzciA9
IEw2NDg1NF9HQ1NSKHNjKTsNClgNClgJRFBSSU5URihMREJfQU5ZLCAoImxz
aTY0ODU0X3Jlc2V0OiBjc3IgMHgleFxuIiwgY3NyKSk7DQpYDQpYCS8qDQpY
CSAqIFhYWCBpcyBzeW5jIG5lZWRlZD8NClgJICovDQpYCWlmIChzYy0+c2Nf
ZG1hbWFwLT5kbV9uc2VncyA+IDApDQpYCQlidXNfZG1hbWFwX3VubG9hZChz
Yy0+c2NfZG1hdGFnLCBzYy0+c2NfZG1hbWFwKTsNClgNClgJaWYgKHNjLT5z
Y19yZXYgPT0gRE1BUkVWX0hNRSkNClgJCUw2NDg1NF9TQ1NSKHNjLCBjc3Ig
fCBEX0hXX1JFU0VUX0ZBUzM2Nik7DQpYDQpYDQpYCWNzciB8PSBMNjQ4NTRf
UkVTRVQ7CQkvKiByZXNldCBETUEgKi8NClgJTDY0ODU0X1NDU1Ioc2MsIGNz
cik7DQpYCURFTEFZKDIwMCk7CQkJLyogPiAxMCBTYnVzIGNsb2Nrcyg/KSAq
Lw0KWA0KWAkvKkRNQVdBSVQxKHNjKTsgd2h5IHdhcyB0aGlzIGhlcmU/ICov
DQpYCWNzciA9IEw2NDg1NF9HQ1NSKHNjKTsNClgJY3NyICY9IH5MNjQ4NTRf
UkVTRVQ7CQkvKiBkZS1hc3NlcnQgcmVzZXQgbGluZSAqLw0KWAlMNjQ4NTRf
U0NTUihzYywgY3NyKTsNClgJREVMQVkoNSk7CQkJLyogYWxsb3cgYSBmZXcg
dGlja3MgdG8gc2V0dGxlICovDQpYDQpYCWNzciA9IEw2NDg1NF9HQ1NSKHNj
KTsNClgJY3NyIHw9IEw2NDg1NF9JTlRfRU47CQkvKiBlbmFibGUgaW50ZXJy
dXB0cyAqLw0KWAlpZiAoc2MtPnNjX3JldiA+IERNQVJFVl8xICYmIHNjLT5z
Y19jaGFubmVsID09IEw2NDg1NF9DSEFOTkVMX1NDU0kpIHsNClgJCWlmIChz
Yy0+c2NfcmV2ID09IERNQVJFVl9ITUUpDQpYCQkJY3NyIHw9IERfVFdPX0NZ
Q0xFOw0KWAkJZWxzZQ0KWAkJCWNzciB8PSBEX0ZBU1RFUjsNClgJfQ0KWA0K
WAkvKiBTZXQgYnVyc3QgKi8NClgJc3dpdGNoIChzYy0+c2NfcmV2KSB7DQpY
CWNhc2UgRE1BUkVWX0hNRToNClgJY2FzZSBETUFSRVZfMjoNClgJCWNzciAm
PSB+TDY0ODU0X0JVUlNUX1NJWkU7DQpYCQlpZiAoc2MtPnNjX2J1cnN0ID09
IDMyKSB7DQpYCQkJY3NyIHw9IEw2NDg1NF9CVVJTVF8zMjsNClgJCX0gZWxz
ZSBpZiAoc2MtPnNjX2J1cnN0ID09IDE2KSB7DQpYCQkJY3NyIHw9IEw2NDg1
NF9CVVJTVF8xNjsNClgJCX0gZWxzZSB7DQpYCQkJY3NyIHw9IEw2NDg1NF9C
VVJTVF8wOw0KWAkJfQ0KWAkJYnJlYWs7DQpYCWNhc2UgRE1BUkVWX0VTQzoN
ClgJCWNzciB8PSBEX0VTQ19BVVRPRFJBSU47CS8qIEF1dG8tZHJhaW4gKi8N
ClgJCWlmIChzYy0+c2NfYnVyc3QgPT0gMzIpIHsNClgJCQljc3IgJj0gfkRf
RVNDX0JVUlNUOw0KWAkJfSBlbHNlDQpYCQkJY3NyIHw9IERfRVNDX0JVUlNU
Ow0KWAkJYnJlYWs7DQpYCWRlZmF1bHQ6DQpYCX0NClgJTDY0ODU0X1NDU1Io
c2MsIGNzcik7DQpYDQpYCWlmIChzYy0+c2NfcmV2ID09IERNQVJFVl9ITUUp
IHsNClgJCWJ1c19zcGFjZV93cml0ZV80KHNjLT5zY19idXN0YWcsIHNjLT5z
Y19yZWdzLCBMNjQ4NTRfUkVHX0FERFIsIDApOw0KWAkJc2MtPnNjX2RtYWN0
bCA9IGNzcjsNClgJfQ0KWAlzYy0+c2NfYWN0aXZlID0gMDsNClgNClgJRFBS
SU5URihMREJfQU5ZLCAoImxzaTY0ODU0X3Jlc2V0OiBkb25lLCBjc3IgMHgl
eFxuIiwgY3NyKSk7DQpYfQ0KWA0KWA0KWCNkZWZpbmUgRE1BTUFYKGEpCShN
QVhfRE1BX1NaIC0gKChhKSAmIChNQVhfRE1BX1NaLTEpKSkNClgvKg0KWCAq
IHNldHVwIGEgZG1hIHRyYW5zZmVyDQpYICovDQpYaW50DQpYbHNpNjQ4NTRf
c2V0dXAoc2MsIGFkZHIsIGxlbiwgZGF0YWluLCBkbWFzaXplKQ0KWAlzdHJ1
Y3QgbHNpNjQ4NTRfc29mdGMgKnNjOw0KWAljYWRkcl90ICphZGRyOw0KWAlz
aXplX3QgKmxlbjsNClgJaW50IGRhdGFpbjsNClgJc2l6ZV90ICpkbWFzaXpl
OwkvKiBJTi1PVVQgKi8NClh7DQpYCXVfaW50MzJfdCBjc3I7DQpYDQpYCURN
QV9GTFVTSChzYywgMCk7DQpYDQpYI2lmIDANClgJRE1BQ1NSKHNjKSAmPSB+
RF9JTlRfRU47DQpYI2VuZGlmDQpYCXNjLT5zY19kbWFhZGRyID0gYWRkcjsN
ClgJc2MtPnNjX2RtYWxlbiA9IGxlbjsNClgNClgJLyoNClgJICogdGhlIHJ1
bGVzIHNheSB3ZSBjYW5ub3QgdHJhbnNmZXIgbW9yZSB0aGFuIHRoZSBsaW1p
dA0KWAkgKiBvZiB0aGlzIERNQSBjaGlwICg2NGsgZm9yIG9sZCBhbmQgMTZN
YiBmb3IgbmV3KSwNClgJICogYW5kIHdlIGNhbm5vdCBjcm9zcyBhIDE2TWIg
Ym91bmRhcnkuDQpYCSAqLw0KWAkqZG1hc2l6ZSA9IHNjLT5zY19kbWFzaXpl
ID0NClgJCW1pbigqZG1hc2l6ZSwgRE1BTUFYKChzaXplX3QpICpzYy0+c2Nf
ZG1hYWRkcikpOw0KWA0KWAlEUFJJTlRGKExEQl9BTlksICgiZG1hX3NldHVw
OiBkbWFzaXplID0gJWxkXG4iLCAobG9uZylzYy0+c2NfZG1hc2l6ZSkpOw0K
WA0KWAkvKg0KWAkgKiBYWFggd2hhdCBsZW5ndGg/IA0KWAkgKi8NClgJaWYg
KHNjLT5zY19yZXYgPT0gRE1BUkVWX0hNRSkgew0KWA0KWAkJTDY0ODU0X1ND
U1Ioc2MsIHNjLT5zY19kbWFjdGwgfCBMNjQ4NTRfUkVTRVQpOw0KWAkJTDY0
ODU0X1NDU1Ioc2MsIHNjLT5zY19kbWFjdGwpOw0KWA0KWAkJYnVzX3NwYWNl
X3dyaXRlXzQoc2MtPnNjX2J1c3RhZywgc2MtPnNjX3JlZ3MsIEw2NDg1NF9S
RUdfQ05ULCAqZG1hc2l6ZSk7DQpYCX0NClgNClgJLyogUHJvZ3JhbSB0aGUg
RE1BIGFkZHJlc3MgKi8NClgJaWYgKHNjLT5zY19kbWFzaXplKSB7DQpYCQlz
Yy0+c2NfZHZtYWFkZHIgPSAqc2MtPnNjX2RtYWFkZHI7DQpYCQlpZiAoYnVz
X2RtYW1hcF9sb2FkKHNjLT5zY19kbWF0YWcsIHNjLT5zY19kbWFtYXAsDQpY
CQkJCSpzYy0+c2NfZG1hYWRkciwgc2MtPnNjX2RtYXNpemUsDQpYCQkJCU5V
TEwgLyoga2VybmVsIGFkZHJlc3MgKi8sICAgDQpYCQkgICAgICAgICAgICAg
ICAgQlVTX0RNQV9OT1dBSVQgfCBCVVNfRE1BX0NPSEVSRU5UKSkNClgJCQlw
YW5pYygiJXM6IGNhbm5vdCBhbGxvY2F0ZSBEVk1BIGFkZHJlc3MiLA0KWAkJ
CSAgICAgIHNjLT5zY19kZXYuZHZfeG5hbWUpOw0KWAkJYnVzX2RtYW1hcF9z
eW5jKHNjLT5zY19kbWF0YWcsIHNjLT5zY19kbWFtYXAsDQpYCQkJCShidXNf
YWRkcl90KSh1X2xvbmcpc2MtPnNjX2R2bWFhZGRyLCBzYy0+c2NfZG1hc2l6
ZSwNClgJCQkJZGF0YWluDQpYCQkJCQk/IEJVU19ETUFTWU5DX1BSRVJFQUQN
ClgJCQkJCTogQlVTX0RNQVNZTkNfUFJFV1JJVEUpOw0KWAkJYnVzX3NwYWNl
X3dyaXRlXzQoc2MtPnNjX2J1c3RhZywgc2MtPnNjX3JlZ3MsIEw2NDg1NF9S
RUdfQUREUiwNClgJCQkJICBzYy0+c2NfZG1hbWFwLT5kbV9zZWdzWzBdLmRz
X2FkZHIpOw0KWAl9DQpYDQpYCWlmIChzYy0+c2NfcmV2ID09IERNQVJFVl9F
U0MpIHsNClgJCS8qIERNQSBFU0MgY2hpcCBidWcgd29yay1hcm91bmQgKi8N
ClgJCWxvbmcgYmNudCA9IHNjLT5zY19kbWFzaXplOw0KWAkJbG9uZyBlYWRk
ciA9IGJjbnQgKyAobG9uZykqc2MtPnNjX2RtYWFkZHI7DQpYCQlpZiAoKGVh
ZGRyICYgUEdPRlNFVCkgIT0gMCkNClgJCQliY250ID0gcm91bmR1cChiY250
LCBQQUdFX1NJWkUpOw0KWAkJYnVzX3NwYWNlX3dyaXRlXzQoc2MtPnNjX2J1
c3RhZywgc2MtPnNjX3JlZ3MsIEw2NDg1NF9SRUdfQ05ULA0KWAkJCQkgIGJj
bnQpOw0KWAl9DQpYDQpYCS8qIFNldHVwIERNQSBjb250cm9sIHJlZ2lzdGVy
ICovDQpYCWNzciA9IEw2NDg1NF9HQ1NSKHNjKTsNClgNClgJaWYgKGRhdGFp
bikNClgJCWNzciB8PSBMNjQ4NTRfV1JJVEU7DQpYCWVsc2UNClgJCWNzciAm
PSB+TDY0ODU0X1dSSVRFOw0KWAljc3IgfD0gTDY0ODU0X0lOVF9FTjsNClgN
ClgJaWYgKHNjLT5zY19yZXYgPT0gRE1BUkVWX0hNRSkgew0KWAkJY3NyIHw9
IChEX0RTQkxfU0NTSV9EUk4gfCBEX0VOX0RNQSk7DQpYCX0NClgNClgJTDY0
ODU0X1NDU1Ioc2MsIGNzcik7DQpYDQpYCXJldHVybiAoMCk7DQpYfQ0KWA0K
WC8qDQpYICogUHNldWRvIChjaGFpbmVkKSBpbnRlcnJ1cHQgZnJvbSB0aGUg
ZXNwIGRyaXZlciB0byBraWNrIHRoZQ0KWCAqIGN1cnJlbnQgcnVubmluZyBE
TUEgdHJhbnNmZXIuIENhbGxlZCBmcm9tIG5jcjUzYzl4X2ludHIoKQ0KWCAq
IGZvciBub3cuDQpYICoNClggKiByZXR1cm4gMSBpZiBpdCB3YXMgYSBETUEg
Y29udGludWUuDQpYICovDQpYaW50DQpYbHNpNjQ4NTRfc2NzaV9pbnRyKGFy
ZykNClgJdm9pZCAqYXJnOw0KWHsNClgJc3RydWN0IGxzaTY0ODU0X3NvZnRj
ICpzYyA9IGFyZzsNClgJc3RydWN0IG5jcjUzYzl4X3NvZnRjICpuc2MgPSBz
Yy0+c2NfY2xpZW50Ow0KWAljaGFyIGJpdHNbNjRdOw0KWAlpbnQgdHJhbnMs
IHJlc2lkOw0KWAl1X2ludDMyX3QgY3NyOw0KWA0KWAljc3IgPSBMNjQ4NTRf
R0NTUihzYyk7DQpYDQpYCURQUklOVEYoTERCX1NDU0ksICgiJXM6IGRtYWlu
dHI6IGFkZHIgMHgleCwgY3NyICVzXG4iLCBzYy0+c2NfZGV2LmR2X3huYW1l
LA0KWAkJIGJ1c19zcGFjZV9yZWFkXzQoc2MtPnNjX2J1c3RhZywgc2MtPnNj
X3JlZ3MsIEw2NDg1NF9SRUdfQUREUiksDQpYCQkgYml0bWFza19zbnByaW50
Zihjc3IsIERETUFDU1JfQklUUywgYml0cywgc2l6ZW9mKGJpdHMpKSkpOw0K
WA0KWAlpZiAoY3NyICYgKERfRVJSX1BFTkR8RF9TTEFWRV9FUlIpKSB7DQpY
CQlwcmludGYoIiVzOiBlcnJvcjogY3NyPSVzXG4iLCBzYy0+c2NfZGV2LmR2
X3huYW1lLA0KWAkJCWJpdG1hc2tfc25wcmludGYoY3NyLCBERE1BQ1NSX0JJ
VFMsIGJpdHMsc2l6ZW9mKGJpdHMpKSk7DQpYCQljc3IgJj0gfkRfRU5fRE1B
OwkvKiBTdG9wIERNQSAqLw0KWAkJLyogSW52YWxpZGF0ZSB0aGUgcXVldWU7
IFNMQVZFX0VSUiBiaXQgaXMgd3JpdGUtdG8tY2xlYXIgKi8NClgJCWNzciB8
PSBEX0lOVkFMSURBVEV8RF9TTEFWRV9FUlI7DQpYCQlMNjQ4NTRfU0NTUihz
YywgY3NyKTsNClgJCXJldHVybiAoLTEpOw0KWAl9DQpYDQpYCS8qIFRoaXMg
aXMgYW4gImFzc2VydGlvbiIgOikgKi8NClgJaWYgKHNjLT5zY19hY3RpdmUg
PT0gMCkNClgJCXBhbmljKCJkbWFpbnRyOiBETUEgd2Fzbid0IGFjdGl2ZSIp
Ow0KWA0KWAlETUFfRFJBSU4oc2MsIDApOw0KWA0KWAkvKiBETUEgaGFzIHN0
b3BwZWQgKi8NClgJY3NyICY9IH5EX0VOX0RNQTsNClgJTDY0ODU0X1NDU1Io
c2MsIGNzcik7DQpYCXNjLT5zY19hY3RpdmUgPSAwOw0KWA0KWAlpZiAoc2Mt
PnNjX2RtYXNpemUgPT0gMCkgew0KWAkJLyogQSAiVHJhbnNmZXIgUGFkIiBv
cGVyYXRpb24gY29tcGxldGVkICovDQpYCQlEUFJJTlRGKExEQl9TQ1NJLCAo
ImRtYWludHI6IGRpc2NhcmRlZCAlZCBieXRlcyAodGNsPSVkLCB0Y209JWQp
XG4iLA0KWAkJICAgIE5DUl9SRUFEX1JFRyhuc2MsIE5DUl9UQ0wpIHwNClgJ
CSAgICAoTkNSX1JFQURfUkVHKG5zYywgTkNSX1RDTSkgPDwgOCksDQpYCQkg
ICAgTkNSX1JFQURfUkVHKG5zYywgTkNSX1RDTCksDQpYCQkgICAgTkNSX1JF
QURfUkVHKG5zYywgTkNSX1RDTSkpKTsNClgJCXJldHVybiAwOw0KWAl9DQpY
DQpYCXJlc2lkID0gMDsNClgJLyoNClgJICogSWYgYSB0cmFuc2ZlciBvbnRv
IHRoZSBTQ1NJIGJ1cyBnZXRzIGludGVycnVwdGVkIGJ5IHRoZSBkZXZpY2UN
ClgJICogKGUuZy4gZm9yIGEgU0FWRVBPSU5URVIgbWVzc2FnZSksIHRoZSBk
YXRhIGluIHRoZSBGSUZPIGNvdW50cw0KWAkgKiBhcyByZXNpZHVhbCBzaW5j
ZSB0aGUgTkNSNTNDOVggY291bnRlciByZWdpc3RlcnMgZ2V0IGRlY3JlbWVu
dGVkDQpYCSAqIGFzIGJ5dGVzIGFyZSBjbG9ja2VkIGludG8gdGhlIEZJRk8u
DQpYCSAqLw0KWAlpZiAoIShjc3IgJiBEX1dSSVRFKSAmJg0KWAkgICAgKHJl
c2lkID0gKE5DUl9SRUFEX1JFRyhuc2MsIE5DUl9GRkxBRykgJiBOQ1JGSUZP
X0ZGKSkgIT0gMCkgew0KWAkJRFBSSU5URihMREJfU0NTSSwgKCJkbWFpbnRy
OiBlbXB0eSBlc3AgRklGTyBvZiAlZCAiLCByZXNpZCkpOw0KWAl9DQpYDQpY
CWlmICgobnNjLT5zY19lc3BzdGF0ICYgTkNSU1RBVF9UQykgPT0gMCkgew0K
WAkJLyoNClgJCSAqIGBUZXJtaW5hbCBjb3VudCcgaXMgb2ZmLCBzbyByZWFk
IHRoZSByZXNpZHVlDQpYCQkgKiBvdXQgb2YgdGhlIE5DUjUzQzlYIGNvdW50
ZXIgcmVnaXN0ZXJzLg0KWAkJICovDQpYCQlyZXNpZCArPSAoTkNSX1JFQURf
UkVHKG5zYywgTkNSX1RDTCkgfA0KWAkJCSAgKE5DUl9SRUFEX1JFRyhuc2Ms
IE5DUl9UQ00pIDw8IDgpIHwNClgJCQkgICAoKG5zYy0+c2NfY2ZnMiAmIE5D
UkNGRzJfRkUpDQpYCQkJCT8gKE5DUl9SRUFEX1JFRyhuc2MsIE5DUl9UQ0gp
IDw8IDE2KQ0KWAkJCQk6IDApKTsNClgNClgJCWlmIChyZXNpZCA9PSAwICYm
IHNjLT5zY19kbWFzaXplID09IDY1NTM2ICYmDQpYCQkgICAgKG5zYy0+c2Nf
Y2ZnMiAmIE5DUkNGRzJfRkUpID09IDApDQpYCQkJLyogQSB0cmFuc2ZlciBv
ZiA2NEsgaXMgZW5jb2RlZCBhcyBgVENMPVRDTT0wJyAqLw0KWAkJCXJlc2lk
ID0gNjU1MzY7DQpYCX0NClgNClgJdHJhbnMgPSBzYy0+c2NfZG1hc2l6ZSAt
IHJlc2lkOw0KWAlpZiAodHJhbnMgPCAwKSB7CQkJLyogdHJhbnNmZXJyZWQg
PCAwID8gKi8NClgjaWYgMA0KWAkJLyoNClgJCSAqIFRoaXMgc2l0dWF0aW9u
IGNhbiBoYXBwZW4gaW4gcGVyZmVjdGx5IG5vcm1hbCBvcGVyYXRpb24NClgJ
CSAqIGlmIHRoZSBFU1AgaXMgcmVzZWxlY3RlZCB3aGlsZSB1c2luZyBETUEg
dG8gc2VsZWN0DQpYCQkgKiBhbm90aGVyIHRhcmdldC4gIEFzIHN1Y2gsIGRv
bid0IHByaW50IHRoZSB3YXJuaW5nLg0KWAkJICovDQpYCQlwcmludGYoIiVz
OiB4ZmVyICglZCkgPiByZXEgKCVkKVxuIiwNClgJCSAgICBzYy0+c2NfZGV2
LmR2X3huYW1lLCB0cmFucywgc2MtPnNjX2RtYXNpemUpOw0KWCNlbmRpZg0K
WAkJdHJhbnMgPSBzYy0+c2NfZG1hc2l6ZTsNClgJfQ0KWA0KWAlEUFJJTlRG
KExEQl9TQ1NJLCAoImRtYWludHI6IHRjbD0lZCwgdGNtPSVkLCB0Y2g9JWQ7
IHRyYW5zPSVkLCByZXNpZD0lZFxuIiwNClgJCU5DUl9SRUFEX1JFRyhuc2Ms
IE5DUl9UQ0wpLA0KWAkJTkNSX1JFQURfUkVHKG5zYywgTkNSX1RDTSksDQpY
CQkobnNjLT5zY19jZmcyICYgTkNSQ0ZHMl9GRSkNClgJCQk/IE5DUl9SRUFE
X1JFRyhuc2MsIE5DUl9UQ0gpIDogMCwNClgJCXRyYW5zLCByZXNpZCkpOw0K
WA0KWAlpZiAoc2MtPnNjX2RtYW1hcC0+ZG1fbnNlZ3MgPiAwKSB7DQpYCQli
dXNfZG1hbWFwX3N5bmMoc2MtPnNjX2RtYXRhZywgc2MtPnNjX2RtYW1hcCwN
ClgJCQkJKGJ1c19hZGRyX3QpKHVfbG9uZylzYy0+c2NfZHZtYWFkZHIsIHNj
LT5zY19kbWFzaXplLA0KWAkJCQkoY3NyICYgRF9XUklURSkgIT0gMA0KWAkJ
CQkJPyBCVVNfRE1BU1lOQ19QT1NUUkVBRA0KWAkJCQkJOiBCVVNfRE1BU1lO
Q19QT1NUV1JJVEUpOw0KWAkJYnVzX2RtYW1hcF91bmxvYWQoc2MtPnNjX2Rt
YXRhZywgc2MtPnNjX2RtYW1hcCk7DQpYCX0NClgNClgJKnNjLT5zY19kbWFs
ZW4gLT0gdHJhbnM7DQpYCSpzYy0+c2NfZG1hYWRkciArPSB0cmFuczsNClgN
ClgjaWYgMAkvKiB0aGlzIGlzIG5vdCBub3JtYWwgb3BlcmF0aW9uIGp1c3Qg
eWV0ICovDQpYCWlmICgqc2MtPnNjX2RtYWxlbiA9PSAwIHx8DQpYCSAgICBu
c2MtPnNjX3BoYXNlICE9IG5zYy0+c2NfcHJldnBoYXNlKQ0KWAkJcmV0dXJu
IDA7DQpYDQpYCS8qIGFuZCBhZ2FpbiAqLw0KWAlkbWFfc3RhcnQoc2MsIHNj
LT5zY19kbWFhZGRyLCBzYy0+c2NfZG1hbGVuLCBETUFDU1Ioc2MpICYgRF9X
UklURSk7DQpYCXJldHVybiAxOw0KWCNlbmRpZg0KWAlyZXR1cm4gMDsNClh9
DQpYDQpYLyoNClggKiBQc2V1ZG8gKGNoYWluZWQpIGludGVycnVwdCB0byBs
ZSBkcml2ZXIgdG8gaGFuZGxlIERNQSBlcnJvcnMuDQpYICovDQpYaW50DQpY
bHNpNjQ4NTRfZW5ldF9pbnRyKGFyZykNClgJdm9pZAkqYXJnOw0KWHsNClgJ
c3RydWN0IGxzaTY0ODU0X3NvZnRjICpzYyA9IGFyZzsNClgJY2hhciBiaXRz
WzY0XTsNClgJdV9pbnQzMl90IGNzcjsNClgJc3RhdGljIGludCBkb2RyYWlu
ID0gMDsNClgJaW50IHJ2Ow0KWA0KWAljc3IgPSBMNjQ4NTRfR0NTUihzYyk7
DQpYDQpYCS8qIElmIHRoZSBETUEgbG9naWMgc2hvd3MgYW4gaW50ZXJydXB0
LCBjbGFpbSBpdCAqLw0KWAlydiA9ICgoY3NyICYgRV9JTlRfUEVORCkgIT0g
MCkgPyAxIDogMDsNClgNClgJaWYgKGNzciAmIChFX0VSUl9QRU5EfEVfU0xB
VkVfRVJSKSkgew0KWAkJcHJpbnRmKCIlczogZXJyb3I6IGNzcj0lc1xuIiwg
c2MtPnNjX2Rldi5kdl94bmFtZSwNClgJCQliaXRtYXNrX3NucHJpbnRmKGNz
ciwgRURNQUNTUl9CSVRTLCBiaXRzLHNpemVvZihiaXRzKSkpOw0KWAkJY3Ny
ICY9IH5MNjQ4NTRfRU5fRE1BOwkvKiBTdG9wIERNQSAqLw0KWAkJLyogSW52
YWxpZGF0ZSB0aGUgcXVldWU7IFNMQVZFX0VSUiBiaXQgaXMgd3JpdGUtdG8t
Y2xlYXIgKi8NClgJCWNzciB8PSBFX0lOVkFMSURBVEV8RV9TTEFWRV9FUlI7
DQpYCQlMNjQ4NTRfU0NTUihzYywgY3NyKTsNClgJCURNQV9SRVNFVChzYyk7
DQpYCQlkb2RyYWluID0gMTsNClgJCXJldHVybiAoMSk7DQpYCX0NClgNClgJ
aWYgKGRvZHJhaW4pIHsJLyogWFhYIC0gaXMgdGhpcyBuZWNlc3Nhcnkgd2l0
aCBEX0RTQkxfV1JJTlZBTCBvbj8gKi8NClgJCWludCBpID0gMTA7DQpYCQlj
c3IgfD0gRV9EUkFJTjsNClgJCUw2NDg1NF9TQ1NSKHNjLCBjc3IpOw0KWAkJ
d2hpbGUgKGktLSA+IDAgJiYgKEw2NDg1NF9HQ1NSKHNjKSAmIERfRFJBSU5J
TkcpKQ0KWAkJCWRlbGF5KDEpOw0KWAl9DQpYDQpYCXJldHVybiAocnYgfCAo
KnNjLT5zY19pbnRyY2hhaW4pKHNjLT5zY19pbnRyY2hhaW5hcmcpKTsNClh9
DQpYDQpYLyoNClggKiBzZXR1cCBhIGRtYSB0cmFuc2Zlcg0KWCAqLw0KWGlu
dA0KWGxzaTY0ODU0X3NldHVwX3BwKHNjLCBhZGRyLCBsZW4sIGRhdGFpbiwg
ZG1hc2l6ZSkNClgJc3RydWN0IGxzaTY0ODU0X3NvZnRjICpzYzsNClgJY2Fk
ZHJfdCAqYWRkcjsNClgJc2l6ZV90ICpsZW47DQpYCWludCBkYXRhaW47DQpY
CXNpemVfdCAqZG1hc2l6ZTsJLyogSU4tT1VUICovDQpYew0KWAl1X2ludDMy
X3QgY3NyOw0KWA0KWAlETUFfRkxVU0goc2MsIDApOw0KWA0KWAlzYy0+c2Nf
ZG1hYWRkciA9IGFkZHI7DQpYCXNjLT5zY19kbWFsZW4gPSBsZW47DQpYDQpY
CURQUklOVEYoTERCX1BQLCAoIiVzOiBwcCBzdGFydCAlbGRAJXAsJWRcbiIs
IHNjLT5zY19kZXYuZHZfeG5hbWUsDQpYCQkobG9uZykqc2MtPnNjX2RtYWxl
biwgKnNjLT5zY19kbWFhZGRyLCBkYXRhaW4gPyAxIDogMCkpOw0KWA0KWAkv
Kg0KWAkgKiB0aGUgcnVsZXMgc2F5IHdlIGNhbm5vdCB0cmFuc2ZlciBtb3Jl
IHRoYW4gdGhlIGxpbWl0DQpYCSAqIG9mIHRoaXMgRE1BIGNoaXAgKDY0ayBm
b3Igb2xkIGFuZCAxNk1iIGZvciBuZXcpLA0KWAkgKiBhbmQgd2UgY2Fubm90
IGNyb3NzIGEgMTZNYiBib3VuZGFyeS4NClgJICovDQpYCSpkbWFzaXplID0g
c2MtPnNjX2RtYXNpemUgPQ0KWAkJbWluKCpkbWFzaXplLCBETUFNQVgoKHNp
emVfdCkgKnNjLT5zY19kbWFhZGRyKSk7DQpYDQpYCURQUklOVEYoTERCX1BQ
LCAoImRtYV9zZXR1cF9wcDogZG1hc2l6ZSA9ICVsZFxuIiwgKGxvbmcpc2Mt
PnNjX2RtYXNpemUpKTsNClgNClgJLyogUHJvZ3JhbSB0aGUgRE1BIGFkZHJl
c3MgKi8NClgJaWYgKHNjLT5zY19kbWFzaXplKSB7DQpYCQlzYy0+c2NfZHZt
YWFkZHIgPSAqc2MtPnNjX2RtYWFkZHI7DQpYCQlpZiAoYnVzX2RtYW1hcF9s
b2FkKHNjLT5zY19kbWF0YWcsIHNjLT5zY19kbWFtYXAsDQpYCQkJCSpzYy0+
c2NfZG1hYWRkciwgc2MtPnNjX2RtYXNpemUsDQpYCQkJCU5VTEwgLyoga2Vy
bmVsIGFkZHJlc3MgKi8sICAgDQpYCQkJCSAgICBCVVNfRE1BX05PV0FJVC8q
fEJVU19ETUFfQ09IRVJFTlQqLykpDQpYCQkJcGFuaWMoIiVzOiBwcCBjYW5u
b3QgYWxsb2NhdGUgRFZNQSBhZGRyZXNzIiwNClgJCQkgICAgICBzYy0+c2Nf
ZGV2LmR2X3huYW1lKTsNClgJCWJ1c19kbWFtYXBfc3luYyhzYy0+c2NfZG1h
dGFnLCBzYy0+c2NfZG1hbWFwLA0KWAkJCQkoYnVzX2FkZHJfdCkodV9sb25n
KXNjLT5zY19kdm1hYWRkciwgc2MtPnNjX2RtYXNpemUsDQpYCQkJCWRhdGFp
bg0KWAkJCQkJPyBCVVNfRE1BU1lOQ19QUkVSRUFEDQpYCQkJCQk6IEJVU19E
TUFTWU5DX1BSRVdSSVRFKTsNClgJCWJ1c19zcGFjZV93cml0ZV80KHNjLT5z
Y19idXN0YWcsIHNjLT5zY19yZWdzLCBMNjQ4NTRfUkVHX0FERFIsDQpYCQkJ
CSAgc2MtPnNjX2RtYW1hcC0+ZG1fc2Vnc1swXS5kc19hZGRyKTsNClgNClgJ
CWJ1c19zcGFjZV93cml0ZV80KHNjLT5zY19idXN0YWcsIHNjLT5zY19yZWdz
LCBMNjQ4NTRfUkVHX0NOVCwNClgJCQkJICBzYy0+c2NfZG1hc2l6ZSk7DQpY
CX0NClgNClgJLyogU2V0dXAgRE1BIGNvbnRyb2wgcmVnaXN0ZXIgKi8NClgJ
Y3NyID0gTDY0ODU0X0dDU1Ioc2MpOw0KWAljc3IgJj0gfkw2NDg1NF9CVVJT
VF9TSVpFOw0KWAlpZiAoc2MtPnNjX2J1cnN0ID09IDMyKSB7DQpYCQljc3Ig
fD0gTDY0ODU0X0JVUlNUXzMyOw0KWAl9IGVsc2UgaWYgKHNjLT5zY19idXJz
dCA9PSAxNikgew0KWAkJY3NyIHw9IEw2NDg1NF9CVVJTVF8xNjsNClgJfSBl
bHNlIHsNClgJCWNzciB8PSBMNjQ4NTRfQlVSU1RfMDsNClgJfQ0KWAljc3Ig
fD0gUF9FTl9ETUF8UF9JTlRfRU58UF9FTl9DTlQ7DQpYI2lmIDANClgJLyog
VGhpcyBiaXQgaXMgcmVhZC1vbmx5IGluIFBQIGNzciByZWdpc3RlciAqLw0K
WAlpZiAoZGF0YWluKQ0KWAkJY3NyIHw9IFBfV1JJVEU7DQpYCWVsc2UNClgJ
CWNzciAmPSB+UF9XUklURTsNClgjZW5kaWYNClgJTDY0ODU0X1NDU1Ioc2Ms
IGNzcik7DQpYDQpYCXJldHVybiAoMCk7DQpYfQ0KWC8qDQpYICogUGFyYWxs
ZWwgcG9ydCBETUEgaW50ZXJydXB0Lg0KWCAqLw0KWGludA0KWGxzaTY0ODU0
X3BwX2ludHIoYXJnKQ0KWAl2b2lkICphcmc7DQpYew0KWAlzdHJ1Y3QgbHNp
NjQ4NTRfc29mdGMgKnNjID0gYXJnOw0KWAljaGFyIGJpdHNbNjRdOw0KWAlp
bnQgcmV0LCB0cmFucywgcmVzaWQgPSAwOw0KWAl1X2ludDMyX3QgY3NyOw0K
WA0KWAljc3IgPSBMNjQ4NTRfR0NTUihzYyk7DQpYDQpYCURQUklOVEYoTERC
X1BQLCAoIiVzOiBwcCBpbnRyOiBhZGRyIDB4JXgsIGNzciAlc1xuIiwgc2Mt
PnNjX2Rldi5kdl94bmFtZSwNClgJCSBidXNfc3BhY2VfcmVhZF80KHNjLT5z
Y19idXN0YWcsIHNjLT5zY19yZWdzLCBMNjQ4NTRfUkVHX0FERFIpLA0KWAkJ
IGJpdG1hc2tfc25wcmludGYoY3NyLCBQRE1BQ1NSX0JJVFMsIGJpdHMsIHNp
emVvZihiaXRzKSkpKTsNClgNClgJaWYgKGNzciAmIChQX0VSUl9QRU5EfFBf
U0xBVkVfRVJSKSkgew0KWAkJcmVzaWQgPSBidXNfc3BhY2VfcmVhZF80KHNj
LT5zY19idXN0YWcsIHNjLT5zY19yZWdzLA0KWAkJCQkJIEw2NDg1NF9SRUdf
Q05UKTsNClgJCXByaW50ZigiJXM6IHBwIGVycm9yOiByZXNpZCAlZCBjc3I9
JXNcbiIsIHNjLT5zY19kZXYuZHZfeG5hbWUsDQpYCQkgICAgICAgcmVzaWQs
DQpYCQkgICAgICAgYml0bWFza19zbnByaW50Zihjc3IsIFBETUFDU1JfQklU
UywgYml0cyxzaXplb2YoYml0cykpKTsNClgJCWNzciAmPSB+UF9FTl9ETUE7
CS8qIFN0b3AgRE1BICovDQpYCQkvKiBJbnZhbGlkYXRlIHRoZSBxdWV1ZTsg
U0xBVkVfRVJSIGJpdCBpcyB3cml0ZS10by1jbGVhciAqLw0KWAkJY3NyIHw9
IFBfSU5WQUxJREFURXxQX1NMQVZFX0VSUjsNClgJCUw2NDg1NF9TQ1NSKHNj
LCBjc3IpOw0KWAkJcmV0dXJuICgxKTsNClgJfQ0KWA0KWAlyZXQgPSAoY3Ny
ICYgUF9JTlRfUEVORCkgIT0gMDsNClgNClgJaWYgKHNjLT5zY19hY3RpdmUg
IT0gMCkgew0KWAkJRE1BX0RSQUlOKHNjLCAwKTsNClgJCXJlc2lkID0gYnVz
X3NwYWNlX3JlYWRfNChzYy0+c2NfYnVzdGFnLCBzYy0+c2NfcmVncywNClgJ
CQkJCSBMNjQ4NTRfUkVHX0NOVCk7DQpYCX0NClgNClgJLyogRE1BIGhhcyBz
dG9wcGVkICovDQpYCWNzciAmPSB+RF9FTl9ETUE7DQpYCUw2NDg1NF9TQ1NS
KHNjLCBjc3IpOw0KWAlzYy0+c2NfYWN0aXZlID0gMDsNClgNClgJdHJhbnMg
PSBzYy0+c2NfZG1hc2l6ZSAtIHJlc2lkOw0KWAlpZiAodHJhbnMgPCAwKSB7
CQkJLyogdHJhbnNmZXJyZWQgPCAwID8gKi8NClgJCXRyYW5zID0gc2MtPnNj
X2RtYXNpemU7DQpYCX0NClgJKnNjLT5zY19kbWFsZW4gLT0gdHJhbnM7DQpY
CSpzYy0+c2NfZG1hYWRkciArPSB0cmFuczsNClgNClgJaWYgKHNjLT5zY19k
bWFtYXAtPmRtX25zZWdzID4gMCkgew0KWAkJYnVzX2RtYW1hcF9zeW5jKHNj
LT5zY19kbWF0YWcsIHNjLT5zY19kbWFtYXAsDQpYCQkJCShidXNfYWRkcl90
KSh1X2xvbmcpc2MtPnNjX2R2bWFhZGRyLCBzYy0+c2NfZG1hc2l6ZSwNClgJ
CQkJKGNzciAmIERfV1JJVEUpICE9IDANClgJCQkJCT8gQlVTX0RNQVNZTkNf
UE9TVFJFQUQNClgJCQkJCTogQlVTX0RNQVNZTkNfUE9TVFdSSVRFKTsNClgJ
CWJ1c19kbWFtYXBfdW5sb2FkKHNjLT5zY19kbWF0YWcsIHNjLT5zY19kbWFt
YXApOw0KWAl9DQpYDQpYCXJldHVybiAocmV0ICE9IDApOw0KWH0NCkVORC1v
Zi1pYy9sc2k2NDg1NC5jDQplY2hvIHggLSBpYy9sc2k2NDg1NHJlZy5oDQpz
ZWQgJ3MvXlgvLycgPmljL2xzaTY0ODU0cmVnLmggPDwgJ0VORC1vZi1pYy9s
c2k2NDg1NHJlZy5oJw0KWC8qCSROZXRCU0Q6IGxzaTY0ODU0cmVnLmgsdiAx
LjQgMTk5OC8wOS8yMSAyMToyNjo1MiBwayBFeHAgJCAqLw0KWA0KWC8qLQ0K
WCAqIENvcHlyaWdodCAoYykgMTk5OCBUaGUgTmV0QlNEIEZvdW5kYXRpb24s
IEluYy4NClggKiBBbGwgcmlnaHRzIHJlc2VydmVkLg0KWCAqDQpYICogVGhp
cyBjb2RlIGlzIGRlcml2ZWQgZnJvbSBzb2Z0d2FyZSBjb250cmlidXRlZCB0
byBUaGUgTmV0QlNEIEZvdW5kYXRpb24NClggKiBieSBQYXVsIEtyYW5lbmJ1
cmcuDQpYICoNClggKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQNClggKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMNClggKiBhcmUgbWV0Og0KWCAqIDEuIFJlZGlz
dHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUgY29weXJpZ2h0DQpYICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLg0KWCAqIDIu
IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj
ZSB0aGUgYWJvdmUgY29weXJpZ2h0DQpYICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
IGluIHRoZQ0KWCAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1h
dGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uDQpYICog
My4gQWxsIGFkdmVydGlzaW5nIG1hdGVyaWFscyBtZW50aW9uaW5nIGZlYXR1
cmVzIG9yIHVzZSBvZiB0aGlzIHNvZnR3YXJlDQpYICogICAgbXVzdCBkaXNw
bGF5IHRoZSBmb2xsb3dpbmcgYWNrbm93bGVkZ2VtZW50Og0KWCAqICAgICAg
ICBUaGlzIHByb2R1Y3QgaW5jbHVkZXMgc29mdHdhcmUgZGV2ZWxvcGVkIGJ5
IHRoZSBOZXRCU0QNClggKiAgICAgICAgRm91bmRhdGlvbiwgSW5jLiBhbmQg
aXRzIGNvbnRyaWJ1dG9ycy4NClggKiA0LiBOZWl0aGVyIHRoZSBuYW1lIG9m
IFRoZSBOZXRCU0QgRm91bmRhdGlvbiBub3IgdGhlIG5hbWVzIG9mIGl0cw0K
WCAqICAgIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9y
IHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZA0KWCAqICAgIGZyb20gdGhpcyBz
b2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlz
c2lvbi4NClggKg0KWCAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkg
VEhFIE5FVEJTRCBGT1VOREFUSU9OLCBJTkMuIEFORCBDT05UUklCVVRPUlMN
ClggKiBgYEFTIElTJycgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FS
UkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQNClggKiBUTywg
VEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5E
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUg0KWCAqIFBVUlBPU0UgQVJFIERJ
U0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgRk9VTkRBVElPTiBP
UiBDT05UUklCVVRPUlMNClggKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9S
DQpYICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YNClggKiBTVUJTVElUVVRF
IEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJP
RklUUzsgT1IgQlVTSU5FU1MNClggKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIg
Q0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTg0KWCAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JU
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpDQpYICogQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdB
UkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUNClggKiBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4NClggKi8NClgNClgvKg0KWCAqIExTSSA2NDg1NCBE
TUEgZW5naW5lLiBDb250YWlucyB0aHJlZSBpbmRlcGVuZGVudCBjaGFubmVs
cw0KWCAqIGRlc2lnbmVkIHRvIGludGVyZmFjZSB3aXRoIChhKSBhIE5DUjUz
OVggU0NTSSBjb250cm9sbGVyLA0KWCAqIChiKSBhIEFNNzk5MCBFdGhlcm5l
dCBjb250cm9sbGVyLCAoYykgUGFyYWxsZWwgcG9ydCBoYXJkd2FyZS4uDQpY
ICovDQpYDQpYLyoNClggKiBSZWdpc3RlciBvZmZzZXRzIHRvIGJ1cyBoYW5k
bGUuDQpYICovDQpYI2RlZmluZSBMNjQ4NTRfUkVHX0NTUgkJMAkJLyogQ29u
dHJvbCBiaXRzICovDQpYI2RlZmluZSBMNjQ4NTRfUkVHX0FERFIJCTQJCS8q
IERNQSBBZGRyZXNzICovDQpYI2RlZmluZSBMNjQ4NTRfUkVHX0NOVAkJOAkJ
LyogRE1BIGNvdW50ICovDQpYI2RlZmluZSBMNjQ4NTRfUkVHX0NOVF9NQVNL
CTB4MDBmZmZmZmYJLyogICBvbmx5IDI0IGJpdHMgKi8NClgjZGVmaW5lIEw2
NDg1NF9SRUdfRU5CQVIJMTIJCS8qIEVORVQgQmFzZSByZWdpc3RlciAqLw0K
WCNkZWZpbmUgTDY0ODU0X1JFR19URVNUCQkxMgkJLyogU0NTSSBUZXN0IHJl
Z2lzdGVyICovDQpYI2RlZmluZSBMNjQ4NTRfUkVHX0hDUgkJMTYJCS8qIFBQ
IEhhcmR3YXJlIENvbmZpZ3VyYXRpb24gKi8NClgjZGVmaW5lIEw2NDg1NF9S
RUdfT0NSCQkxOAkJLyogUFAgT3BlcmF0aW9uIENvbmZpZ3VyYXRpb24gKi8N
ClgjZGVmaW5lIEw2NDg1NF9SRUdfRFIJCTIwCQkvKiBQUCBEYXRhIHJlZ2lz
dGVyICovDQpYI2RlZmluZSBMNjQ4NTRfUkVHX1RDUgkJMjEJCS8qIFBQIFRy
YW5zZmVyIENvbnRyb2wgKi8NClgjZGVmaW5lIEw2NDg1NF9SRUdfT1IJCTIy
CQkvKiBQUCBPdXRwdXQgcmVnaXN0ZXIgKi8NClgjZGVmaW5lIEw2NDg1NF9S
RUdfSVIJCTIzCQkvKiBQUCBJbnB1dCByZWdpc3RlciAqLw0KWCNkZWZpbmUg
TDY0ODU0X1JFR19JQ1IJCTI0CQkvKiBQUCBJbnRlcnJ1cHQgQ29udHJvbCAq
Lw0KWA0KWA0KWC8qDQpYICogQ29udHJvbCBiaXRzIGNvbW1vbiB0byBhbGwg
dGhyZWUgY2hhbm5lbHMuDQpYICovDQpYI2RlZmluZSBMNjQ4NTRfSU5UX1BF
TkQJMHgwMDAwMDAwMQkvKiBJbnRlcnJ1cHQgcGVuZGluZyAqLw0KWCNkZWZp
bmUgTDY0ODU0X0VSUl9QRU5ECTB4MDAwMDAwMDIJLyogRXJyb3IgcGVuZGlu
ZyAqLw0KWCNkZWZpbmUgTDY0ODU0X0RSQUlOSU5HCTB4MDAwMDAwMGMJLyog
RklGTyBkcmFpbmluZyAqLw0KWCNkZWZpbmUgTDY0ODU0X0lOVF9FTgkweDAw
MDAwMDEwCS8qIEludGVycnVwdCBlbmFibGUgKi8NClgjZGVmaW5lIEw2NDg1
NF9JTlZBTElEQVRFCTB4MDAwMDAwMjAJLyogSW52YWxpZGF0ZSBGSUZPICov
DQpYI2RlZmluZSBMNjQ4NTRfU0xBVkVfRVJSCTB4MDAwMDAwNDAJLyogU2xh
dmUgYWNjZXNzIHNpemUgZXJyb3IgKi8NClgjZGVmaW5lIEw2NDg1NF9SRVNF
VAkweDAwMDAwMDgwCS8qIFJlc2V0IGRldmljZSAqLw0KWCNkZWZpbmUgTDY0
ODU0X1dSSVRFCTB4MDAwMDAxMDAJLyogMTogeGZlciB0byBtZW1vcnkgKi8N
ClgjZGVmaW5lIEw2NDg1NF9FTl9ETUEJMHgwMDAwMDIwMAkvKiBlbmFibGUg
RE1BIHRyYW5zZmVycyAqLw0KWA0KWCNkZWZpbmUgTDY0ODU0X0JVUlNUX1NJ
WkUJMHgwMDBjMDAwMAkvKiBSZWFkL3dyaXRlIGJ1cnN0IHNpemUgKi8NClgj
ZGVmaW5lICBMNjQ4NTRfQlVSU1RfMAkJMHgwMDA4MDAwMAkvKiAgIG5vIGJ1
cnN0cyAoU0NTSS1vbmx5KSAqLw0KWCNkZWZpbmUgIEw2NDg1NF9CVVJTVF8x
NgkweDAwMDAwMDAwCS8qICAgMTYtYnl0ZSBidXJzdHMgKi8NClgjZGVmaW5l
ICBMNjQ4NTRfQlVSU1RfMzIgICAgCTB4MDAwNDAwMDAJLyogICAzMi1ieXRl
IGJ1cnN0cyAqLw0KWCNkZWZpbmUgIEw2NDg1NF9CVVJTVF82NAkweDAwMGMw
MDAwCS8qICAgNjQtYnl0ZSBidXJzdHMgKGZhcykgKi8NClgNClgjZGVmaW5l
IEw2NDg1NF9SU1RfRkFTMzY2CTB4MDgwMDAwMDAJLyogRkFTMzY2IGhhcmR3
YXJlIHJlc2V0ICovDQpYDQpYI2RlZmluZSBMNjQ4NTRfREVWSUQJCTB4ZjAw
MDAwMDAJLyogZGV2aWNlIElEIGJpdHMgKi8NClgNClgvKg0KWCAqIFNDU0kg
RE1BIGNvbnRyb2wgYml0cy4NClggKi8NClgjZGVmaW5lIERfSU5UX1BFTkQJ
TDY0ODU0X0lOVF9QRU5ECS8qIGludGVycnVwdCBwZW5kaW5nICovDQpYI2Rl
ZmluZSBEX0VSUl9QRU5ECUw2NDg1NF9FUlJfUEVORAkvKiBlcnJvciBwZW5k
aW5nICovDQpYI2RlZmluZSBEX0RSQUlOSU5HCUw2NDg1NF9EUkFJTklORwkv
KiBmaWZvIGRyYWluaW5nICovDQpYI2RlZmluZSBEX0lOVF9FTglMNjQ4NTRf
SU5UX0VOCS8qIGludGVycnVwdCBlbmFibGUgKi8NClgjZGVmaW5lIERfSU5W
QUxJREFURQlMNjQ4NTRfSU5WQUxJREFURS8qIGludmFsaWRhdGUgZmlmbyAq
Lw0KWCNkZWZpbmUgRF9TTEFWRV9FUlIJTDY0ODU0X1NMQVZFX0VSUi8qIHNs
YXZlIGFjY2VzcyBzaXplIGVycm9yICovDQpYI2RlZmluZSBEX1JFU0VUCQlM
NjQ4NTRfUkVTRVQJLyogcmVzZXQgc2NzaSAqLw0KWCNkZWZpbmUgRF9XUklU
RQkJTDY0ODU0X1dSSVRFCS8qIDEgPSBkZXYgLT4gbWVtICovDQpYI2RlZmlu
ZSBEX0VOX0RNQQlMNjQ4NTRfRU5fRE1BCS8qIGVuYWJsZSBETUEgcmVxdWVz
dHMgKi8NClgjZGVmaW5lIERfRU5fQ05UCTB4MDAwMDIwMDAJLyogZW5hYmxl
IGJ5dGUgY291bnRlciAqLw0KWCNkZWZpbmUgRF9UQwkJMHgwMDAwNDAwMAkv
KiB0ZXJtaW5hbCBjb3VudCAqLw0KWCNkZWZpbmUgRF9XSURFX0VOCTB4MDAw
MDgwMDAJLyogZW5hYmxlIHdpZGUgbW9kZSBTQlVTIERNQSAoZmFzKSAqLw0K
WCNkZWZpbmUgRF9EU0JMX0NTUl9EUk4JMHgwMDAxMDAwMAkvKiBkaXNhYmxl
IGZpZm8gZHJhaW4gb24gY3NyICovDQpYI2RlZmluZSBEX0RTQkxfU0NTSV9E
Uk4JMHgwMDAyMDAwMAkvKiBkaXNhYmxlIGZpZm8gZHJhaW4gb24gcmVnICov
DQpYDQpYI2RlZmluZSBEX0RJQUcJCTB4MDAxMDAwMDAJLyogZGlzYWJsZSBm
aWZvIGRyYWluIG9uIGFkZHIgKi8NClgjZGVmaW5lIERfVFdPX0NZQ0xFCTB4
MDAyMDAwMDAJLyogMiBjbG9ja3MgcGVyIHRyYW5zZmVyICovDQpYI2RlZmlu
ZSBEX0ZBU1RFUgkweDAwNDAwMDAwCS8qIDMgY2xvY2tzIHBlciB0cmFuc2Zl
ciAqLw0KWCNkZWZpbmUgRF9UQ0lfRElTCTB4MDA4MDAwMDAJLyogZGlzYWJs
ZSBpbnRyIG9uIERfVEMgKi8NClgjZGVmaW5lIERfRU5fTkVYVAkweDAxMDAw
MDAwCS8qIGVuYWJsZSBhdXRvIG5leHQgYWRkcmVzcyAqLw0KWCNkZWZpbmUg
RF9ETUFfT04JMHgwMjAwMDAwMAkvKiBlbmFibGUgZG1hIGZyb20gc2NzaSBY
WFggKi8NClgjZGVmaW5lIERfRFNCTF9QQVJJVFlfQ0hLIFwNClgJCQkweDAy
MDAwMDAwCS8qIGRpc2FibGUgY2hlY2tpbmcgZm9yIHBhcml0eSBvbiBidXMg
KGRlZmF1bHQgMTpmYXMpICovDQpYI2RlZmluZSBEX0FfTE9BREVECTB4MDQw
MDAwMDAJLyogYWRkcmVzcyBsb2FkZWQgKi8NClgjZGVmaW5lIERfTkFfTE9B
REVECTB4MDgwMDAwMDAJLyogbmV4dCBhZGRyZXNzIGxvYWRlZCAqLw0KWCNk
ZWZpbmUgRF9IV19SRVNFVF9GQVMzNjYgXA0KWAkJCTB4MDgwMDAwMDAJLyog
aGFyZHdhcmUgcmVzZXQgRkFTMzY2IChmYXMpICovDQpYI2RlZmluZSBEX0RF
Vl9JRAlMNjQ4NTRfREVWSUQJLyogZGV2aWNlIElEICovDQpYI2RlZmluZSAg
RE1BUkVWXzAJMHgwMDAwMDAwMAkvKiBTdW5yYXkgRE1BICovDQpYI2RlZmlu
ZSAgRE1BUkVWX0VTQwkweDQwMDAwMDAwCS8qICBETUEgRVNDIGFycmF5ICov
DQpYI2RlZmluZSAgRE1BUkVWXzEJMHg4MDAwMDAwMAkvKiAnRE1BJyAqLw0K
WCNkZWZpbmUgIERNQVJFVl9QTFVTCTB4OTAwMDAwMDAJLyogJ0RNQSsnICov
DQpYI2RlZmluZSAgRE1BUkVWXzIJMHhhMDAwMDAwMAkvKiAnRE1BMicgKi8N
ClgjZGVmaW5lICBETUFSRVZfSE1FICAgICAweGIwMDAwMDAwIAkvKiAnSE1F
JyAgKi8NClgNClgvKg0KWCAqIHJldmlzaW9ucyAwLDEgYW5kIEVTQyBoYXZl
IGRpZmZlcmVudCBiaXRzLg0KWCAqLw0KWCNkZWZpbmUgRF9FU0NfRFJBSU4J
MHgwMDAwMDA0MAkvKiByZXYwLDEsZXNjOiBkcmFpbiBmaWZvICovDQpYI2Rl
ZmluZSBEX0VTQ19SX1BFTkQJMHgwMDAwMDQwMAkvKiByZXYwLDE6IHJlcXVl
c3QgcGVuZGluZyAqLw0KWCNkZWZpbmUgRF9FU0NfQlVSU1QJMHgwMDAwMDgw
MAkvKiBETUEgRVNDOiAxNiBieXRlIGJ1cnN0cyAqLw0KWCNkZWZpbmUgRF9F
U0NfQVVUT0RSQUlOCTB4MDAwNDAwMDAJLyogRE1BIEVTQzogQXV0by1kcmFp
biAqLw0KWA0KWCNkZWZpbmUgRERNQUNTUl9CSVRTCSJcMTc3XDAyMCIJCQkJ
XA0KWAkiYlwwMElOVFwwYlwwMUVSUlwwZlwwMlwwMkRSQUlOSU5HXDBiXDA0
SUVOXDAiCQlcDQpYCSJiXDA2U0xWRVJSXDBiXDA3UlNUXDBiXDEwV1JJVEVc
MGJcMTFFTkRNQVwwIgkJXA0KWAkiYlwxNUVOQ05UXDBiXDE2VENcMFxiXDIw
RFNCTF9DU1JfRFJOXDAiCQlcDQpYCSJiXDIxRFNCTF9TQ1NJX0RSTlwwZlwy
MlwyQlVSU1RcMGJcMjVUV09DWUNMRVwwIglcDQpYCSJiXDI2RkFTVEVSXDBi
XDI3VENJRElTXDBiXDMwRU5OWFRcMGJcMDMxRE1BT05cMCIJXA0KWAkiYlwz
MkFMT0FERURcMGJcMzNOQUxPQURFRFwwIg0KWA0KWA0KWC8qDQpYICogRU5F
VCBETUEgY29udHJvbCBiaXRzLg0KWCAqLw0KWCNkZWZpbmUgRV9JTlRfUEVO
RAlMNjQ4NTRfSU5UX1BFTkQJLyogaW50ZXJydXB0IHBlbmRpbmcgKi8NClgj
ZGVmaW5lIEVfRVJSX1BFTkQJTDY0ODU0X0VSUl9QRU5ECS8qIGVycm9yIHBl
bmRpbmcgKi8NClgjZGVmaW5lIEVfRFJBSU5JTkcJTDY0ODU0X0RSQUlOSU5H
CS8qIGZpZm8gZHJhaW5pbmcgKi8NClgjZGVmaW5lIEVfSU5UX0VOCUw2NDg1
NF9JTlRfRU4JLyogaW50ZXJydXB0IGVuYWJsZSAqLw0KWCNkZWZpbmUgRV9J
TlZBTElEQVRFCUw2NDg1NF9JTlZBTElEQVRFLyogaW52YWxpZGF0ZSBmaWZv
ICovDQpYI2RlZmluZSBFX1NMQVZFX0VSUglMNjQ4NTRfU0xBVkVfRVJSLyog
c2xhdmUgYWNjZXNzIHNpemUgZXJyb3IgKi8NClgjZGVmaW5lIEVfUkVTRVQJ
CUw2NDg1NF9SRVNFVAkvKiByZXNldCBFTkVUICovDQpYI2RlZmluZSBFX3Jl
c2VydmVkMQkweDAwMDAwMzAwCS8qICovDQpYI2RlZmluZSBFX0RSQUlOCQkw
eDAwMDAwNDAwCS8qIGZvcmNlIEVjYWNoZSBkcmFpbiAqLw0KWCNkZWZpbmUg
RV9EU0JMX1dSX0RSTgkweDAwMDAwODAwCS8qIGRpc2FibGUgRWNhY2hlIGRy
YWluIG9uIC4uICovDQpYI2RlZmluZSBFX0RTQkxfUkRfRFJOCTB4MDAwMDEw
MDAJLyogZGlzYWJsZSBFY2FjaGUgZHJhaW4gb24gLi4gKi8NClgjZGVmaW5l
IEVfcmVzZXJ2ZWQyCTB4MDAwMDYwMDAJLyogKi8NClgjZGVmaW5lIEVfSUxB
Q0MJCTB4MDAwMDgwMDAJLyogLi4uICovDQpYI2RlZmluZSBFX0RTQkxfQlVG
X1dSCTB4MDAwMTAwMDAJLyogbm8gYnVmZmVyaW5nIG9mIHNsYXZlIHdyaXRl
cyAqLw0KWCNkZWZpbmUgRV9EU0JMX1dSX0lOVkFMCTB4MDAwMjAwMDAJLyog
bm8gRWNhY2hlIGludmFsaWRhdGUgb24gc2xhdmUgd3JpdGVzICovDQpYDQpY
I2RlZmluZSBFX3Jlc2VydmVkMwkweDAwMTAwMDAwCS8qICovDQpYI2RlZmlu
ZSBFX0xPT1BfVEVTVAkweDAwMjAwMDAwCS8qIGxvb3BiYWNrIG1vZGUgKi8N
ClgjZGVmaW5lIEVfVFBfQVVJCTB4MDA0MDAwMDAJLyogMSBmb3IgVFAsIDAg
Zm9yIEFVSSAqLw0KWCNkZWZpbmUgRV9yZXNlcnZlZDQJMHgwYzgwMDAwMAkv
KiAqLw0KWCNkZWZpbmUgRV9ERVZfSUQJTDY0ODU0X0RFVklECS8qIElEIGJp
dHMgKi8NClgNClgjZGVmaW5lIEVETUFDU1JfQklUUwkiXDE3N1wwMjAiCQkJ
CVwNClgJImJcMDBJTlRcMGJcMDFFUlJcMGZcMDJcMDJEUkFJTklOR1wwYlww
NElFTlwwIgkJXA0KWAkiYlwwNlNMVkVSUlwwYlwwN1JTVFwwYlwxMFdSSVRF
XDBiXDEyRFJBSU5cMCIJCVwNClgJImJcMTNEU0JMX1dSX0RSTlwwYlwxNERT
QkxfUkRfRFJOXDBiXDE3SUxBQ0NcMCIJCVwNClgJImJcMjBEU0JMX0JVRl9X
UlwwYlwyMURTQkxfV1JfSU5WQUxcMCIJCQlcDQpYCSJiXDI1TE9PUFRFU1Rc
MGJcMjZUUFwwIg0KWA0KWC8qDQpYICogUFAgRE1BIGNvbnRyb2wgYml0cy4N
ClggKi8NClgjZGVmaW5lIFBfSU5UX1BFTkQJTDY0ODU0X0lOVF9QRU5ECS8q
IGludGVycnVwdCBwZW5kaW5nICovDQpYI2RlZmluZSBQX0VSUl9QRU5ECUw2
NDg1NF9FUlJfUEVORAkvKiBlcnJvciBwZW5kaW5nICovDQpYI2RlZmluZSBQ
X0RSQUlOSU5HCUw2NDg1NF9EUkFJTklORwkvKiBmaWZvIGRyYWluaW5nICov
DQpYI2RlZmluZSBQX0lOVF9FTglMNjQ4NTRfSU5UX0VOCS8qIGludGVycnVw
dCBlbmFibGUgKi8NClgjZGVmaW5lIFBfSU5WQUxJREFURQlMNjQ4NTRfSU5W
QUxJREFURS8qIGludmFsaWRhdGUgZmlmbyAqLw0KWCNkZWZpbmUgUF9TTEFW
RV9FUlIJTDY0ODU0X1NMQVZFX0VSUi8qIHNsYXZlIGFjY2VzcyBzaXplIGVy
cm9yICovDQpYI2RlZmluZSBQX1JFU0VUCQlMNjQ4NTRfUkVTRVQJLyogcmVz
ZXQgUFAgKi8NClgjZGVmaW5lIFBfV1JJVEUJCUw2NDg1NF9XUklURQkvKiAx
OiB4ZmVyIHRvIG1lbW9yeSAqLw0KWCNkZWZpbmUgUF9FTl9ETUEJTDY0ODU0
X0VOX0RNQQkvKiBlbmFibGUgRE1BIHRyYW5zZmVycyAqLw0KWCNkZWZpbmUg
UF9yZXNlcnZlZDEJMHgwMDAwMWMwMAkvKiAqLw0KWCNkZWZpbmUgUF9FTl9D
TlQJMHgwMDAwMjAwMAkvKiBlbmFibGUgY291bnRlciAqLw0KWCNkZWZpbmUg
UF9UQwkJMHgwMDAwNDAwMAkvKiB0ZXJtaW5hbCBjb3VudCAqLw0KWCNkZWZp
bmUgUF9yZXNlcnZlZDIJMHgwMDAzODAwMAkvKiAqLw0KWA0KWCNkZWZpbmUg
UF9ESUFHCQkweDAwMTAwMDAwCS8qIC4uLiAqLw0KWCNkZWZpbmUgUF9yZXNl
cnZlZDMJMHgwMDYwMDAwMAkvKiAqLw0KWCNkZWZpbmUgUF9UQ0lfRElTCTB4
MDA4MDAwMDAJLyogbm8gaW50ZXJydXB0IG9uIHRlcm1pbmFsIGNvdW50ICov
DQpYI2RlZmluZSBQX0VOX05FWFQJMHgwMTAwMDAwMAkvKiBlbmFibGUgRE1B
IGNoYWluaW5nICovDQpYI2RlZmluZSBQX0RNQV9PTgkweDAyMDAwMDAwCS8q
IERNQSB4ZmVycyBlbmFibGVkICovDQpYI2RlZmluZSBQX0FfTE9BREVECTB4
MDQwMDAwMDAJLyogYWRkciBhbmQgYnl0ZSBjb3VudCB2YWxpZCAqLw0KWCNk
ZWZpbmUgUF9OQV9MT0FERUQJMHgwODAwMDAwMAkvKiBuZXh0IGFkZHIgJiBj
b3VudCB2YWxpZCBidXQgbm90IHVzZWQgKi8NClgjZGVmaW5lIFBfREVWX0lE
CUw2NDg1NF9ERVZJRAkvKiBJRCBiaXRzICovDQpYDQpYI2RlZmluZSBQRE1B
Q1NSX0JJVFMJIlwxNzdcMDIwIgkJCQlcDQpYCSJiXDAwSU5UXDBiXDAxRVJS
XDBmXDAyXDAyRFJBSU5JTkdcMGJcMDRJRU5cMCIJCVwNClgJImJcMDZTTFZF
UlJcMGJcMDdSU1RcMGJcMTBXUklURVwwYlwxMUVORE1BXDAiCQlcDQpYCSJi
XDE1RU5DTlRcMGJcMTZUQ1wwXGJcMjRESUFHXDBiXDI3VENJRElTXDAiCQlc
DQpYCSJiXDMwRU5OWFRcMGJcMDMxRE1BT05cMGJcMzJBTE9BREVEXDBiXDMz
TkFMT0FERURcMCINCkVORC1vZi1pYy9sc2k2NDg1NHJlZy5oDQplY2hvIHgg
LSBpYy9sc2k2NDg1NHZhci5oDQpzZWQgJ3MvXlgvLycgPmljL2xzaTY0ODU0
dmFyLmggPDwgJ0VORC1vZi1pYy9sc2k2NDg1NHZhci5oJw0KWC8qCSROZXRC
U0Q6IGxzaTY0ODU0dmFyLmgsdiAxLjMgMTk5OC8wOS8yMSAyMToyNjo1MiBw
ayBFeHAgJCAqLw0KWA0KWC8qLQ0KWCAqIENvcHlyaWdodCAoYykgMTk5OCBU
aGUgTmV0QlNEIEZvdW5kYXRpb24sIEluYy4NClggKiBBbGwgcmlnaHRzIHJl
c2VydmVkLg0KWCAqDQpYICogVGhpcyBjb2RlIGlzIGRlcml2ZWQgZnJvbSBz
b2Z0d2FyZSBjb250cmlidXRlZCB0byBUaGUgTmV0QlNEIEZvdW5kYXRpb24N
ClggKiBieSBQYXVsIEtyYW5lbmJ1cmcuDQpYICoNClggKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQNClggKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMNClggKiBh
cmUgbWV0Og0KWCAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29k
ZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0DQpYICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyLg0KWCAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5h
cnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0DQpY
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQ0KWCAqICAgIGRvY3VtZW50
YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRo
ZSBkaXN0cmlidXRpb24uDQpYICogMy4gQWxsIGFkdmVydGlzaW5nIG1hdGVy
aWFscyBtZW50aW9uaW5nIGZlYXR1cmVzIG9yIHVzZSBvZiB0aGlzIHNvZnR3
YXJlDQpYICogICAgbXVzdCBkaXNwbGF5IHRoZSBmb2xsb3dpbmcgYWNrbm93
bGVkZ2VtZW50Og0KWCAqICAgICAgICBUaGlzIHByb2R1Y3QgaW5jbHVkZXMg
c29mdHdhcmUgZGV2ZWxvcGVkIGJ5IHRoZSBOZXRCU0QNClggKiAgICAgICAg
Rm91bmRhdGlvbiwgSW5jLiBhbmQgaXRzIGNvbnRyaWJ1dG9ycy4NClggKiA0
LiBOZWl0aGVyIHRoZSBuYW1lIG9mIFRoZSBOZXRCU0QgRm91bmRhdGlvbiBu
b3IgdGhlIG5hbWVzIG9mIGl0cw0KWCAqICAgIGNvbnRyaWJ1dG9ycyBtYXkg
YmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZl
ZA0KWCAqICAgIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmlj
IHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4NClggKg0KWCAqIFRISVMgU09G
VFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIE5FVEJTRCBGT1VOREFUSU9OLCBJ
TkMuIEFORCBDT05UUklCVVRPUlMNClggKiBgYEFTIElTJycgQU5EIEFOWSBF
WFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQNClggKiBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
Ug0KWCAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBT
SEFMTCBUSEUgRk9VTkRBVElPTiBPUiBDT05UUklCVVRPUlMNClggKiBCRSBM
SUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBT
UEVDSUFMLCBFWEVNUExBUlksIE9SDQpYICogQ09OU0VRVUVOVElBTCBEQU1B
R0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1F
TlQgT0YNClggKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NT
IE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MNClggKiBJ
TlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZ
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTg0KWCAqIENPTlRSQUNULCBTVFJJ
Q1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBP
UiBPVEhFUldJU0UpDQpYICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBU
SEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBU
SEUNClggKiBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4NClggKi8NClgN
ClhzdHJ1Y3QgbHNpNjQ4NTRfc29mdGMgew0KWAlzdHJ1Y3QgZGV2aWNlCQlz
Y19kZXY7CQkvKiBiYXNlIGRldmljZSAqLw0KWAlidXNfc3BhY2VfdGFnX3QJ
CXNjX2J1c3RhZzsJLyogYnVzIHRhZ3MgKi8NClgJYnVzX2RtYV90YWdfdAkJ
c2NfZG1hdGFnOw0KWA0KWAlidXNfc3BhY2VfaGFuZGxlX3QJc2NfcmVnczsJ
LyogdGhlIHJlZ2lzdGVycyAqLw0KWAl1X2ludAkJCXNjX3JldjsJCS8qIHJl
dmlzaW9uICovDQpYCWludAkJCXNjX2J1cnN0OwkvKiBtYXggc3Vwb3J0ZWQg
YnVyc3Qgc2l6ZSAqLw0KWA0KWAlpbnQJCQlzY19jaGFubmVsOw0KWCNkZWZp
bmUgTDY0ODU0X0NIQU5ORUxfU0NTSQkxDQpYI2RlZmluZSBMNjQ4NTRfQ0hB
Tk5FTF9FTkVUCTINClgjZGVmaW5lIEw2NDg1NF9DSEFOTkVMX1BQCTMNClgJ
dm9pZAkJCSpzY19jbGllbnQ7DQpYDQpYCWludAkJCXNjX2FjdGl2ZTsJLyog
RE1BIGFjdGl2ZSA/ICovDQpYCWJ1c19kbWFtYXBfdAkJc2NfZG1hbWFwOwkv
KiBETUEgbWFwIGZvciBidXNfZG1hXyogKi8NClgJY2FkZHJfdAkJCXNjX2R2
bWFhZGRyOwkvKiBEVk1BIGNvb2tpZSAqLw0KWAlzaXplX3QJCQlzY19kbWFz
aXplOw0KWAljYWRkcl90CQkJKnNjX2RtYWFkZHI7DQpYCXNpemVfdAkJCSpz
Y19kbWFsZW47DQpYDQpYCXZvaWQJKCpyZXNldCkgX19QKChzdHJ1Y3QgbHNp
NjQ4NTRfc29mdGMgKikpOy8qIHJlc2V0IHJvdXRpbmUgKi8NClgJaW50CSgq
c2V0dXApIF9fUCgoc3RydWN0IGxzaTY0ODU0X3NvZnRjICosIGNhZGRyX3Qg
Kiwgc2l6ZV90ICosDQpYCQkJICAgICAgaW50LCBzaXplX3QgKikpOwkvKiBk
bWEgc2V0dXAgKi8NClgJaW50CSgqaW50cikgX19QKCh2b2lkICopKTsJCS8q
IGludGVycnVwdCBoYW5kbGVyICovDQpYDQpYCWludAkoKnNjX2ludHJjaGFp
bikgX19QKCh2b2lkICopKTsJLyogbmV4dCBoYW5kbGVyIGluIGludHIgY2hh
aW4gKi8NClgJdm9pZAkqc2NfaW50cmNoYWluYXJnOwkJLyogYXJnIGZvciBu
ZXh0IGludHIgaGFuZGxlciAqLw0KWA0KWAl1X2ludCAJCQlzY19kbWFjdGw7
DQpYfTsNClgNClgjZGVmaW5lIEw2NDg1NF9HQ1NSKHNjKQlcDQpYCShidXNf
c3BhY2VfcmVhZF80KChzYyktPnNjX2J1c3RhZywgKHNjKS0+c2NfcmVncywg
TDY0ODU0X1JFR19DU1IpKQ0KWA0KWCNkZWZpbmUgTDY0ODU0X1NDU1Ioc2Ms
IGNzcikJXA0KWAlidXNfc3BhY2Vfd3JpdGVfNCgoc2MpLT5zY19idXN0YWcs
IChzYyktPnNjX3JlZ3MsIEw2NDg1NF9SRUdfQ1NSLCBjc3IpDQpYDQpYDQpY
LyoNClggKiBETUEgZW5naW5lIGludGVyZmFjZSBmdW5jdGlvbnMuDQpYICov
DQpYI2RlZmluZSBETUFfUkVTRVQoc2MpCQkJKCgoc2MpLT5yZXNldCkoc2Mp
KQ0KWCNkZWZpbmUgRE1BX0lOVFIoc2MpCQkJKCgoc2MpLT5pbnRyKShzYykp
DQpYI2RlZmluZSBETUFfU0VUVVAoc2MsIGEsIGwsIGQsIHMpCSgoKHNjKS0+
c2V0dXApKHNjLCBhLCBsLCBkLCBzKSkNClgNClgjZGVmaW5lIERNQV9JU0FD
VElWRShzYykJCSgoc2MpLT5zY19hY3RpdmUpDQpYDQpYI2RlZmluZSBETUFf
RU5JTlRSKHNjKSBkbyB7CQkJXA0KWAl1X2ludDMyX3QgY3NyID0gTDY0ODU0
X0dDU1Ioc2MpOwlcDQpYCWNzciB8PSBMNjQ4NTRfSU5UX0VOOwkJCVwNClgJ
TDY0ODU0X1NDU1Ioc2MsIGNzcik7CQkJXA0KWH0gd2hpbGUgKDApDQpYDQpY
I2RlZmluZSBETUFfSVNJTlRSKHNjKQkoTDY0ODU0X0dDU1Ioc2MpICYgKERf
SU5UX1BFTkR8RF9FUlJfUEVORCkpDQpYDQpYI2RlZmluZSBETUFfR08oc2Mp
IGRvIHsJCQkJXA0KWAl1X2ludDMyX3QgY3NyID0gTDY0ODU0X0dDU1Ioc2Mp
OwlcDQpYCWNzciB8PSBEX0VOX0RNQTsJCQlcDQpYCUw2NDg1NF9TQ1NSKHNj
LCBjc3IpOwkJCVwNClgJc2MtPnNjX2FjdGl2ZSA9IDE7CQkJXA0KWH0gd2hp
bGUgKDApDQpYDQpYDQpYdm9pZAlsc2k2NDg1NF9hdHRhY2gJX19QKChzdHJ1
Y3QgbHNpNjQ4NTRfc29mdGMgKikpOw0KWGludAlsc2k2NDg1NF9zY3NpX2lu
dHIJX19QKCh2b2lkICopKTsNClhpbnQJbHNpNjQ4NTRfZW5ldF9pbnRyCV9f
UCgodm9pZCAqKSk7DQpYaW50CWxzaTY0ODU0X3BwX2ludHIJX19QKCh2b2lk
ICopKTsNCkVORC1vZi1pYy9sc2k2NDg1NHZhci5oDQpleGl0DQoNCg==
---559023410-1932422408-981674620=:702--