[XviD-devel] [TODOLIST ITEM] Bit rate controler module

suxen_drol xvid-devel@xvid.org
Sat, 21 Dec 2002 12:41:04 +1100


--------_3E03C1A49C25038DF00C_MULTIPART_MIXED_
Content-Type: text/plain; charset="US-ASCII"
Content-Transfer-Encoding: 7bit


On Fri, 6 Dec 2002 21:01:52 +0100 Edouard Gomez <ed.gomez@wanadoo.fr> wrote:

> Hello,
> 
> Just to mention  i am currently splitting/adapting my  xvid vbr port lib
> to  merge it  into  core. I'm  changing a  lot  the design  so it  needs
> reworking all  internals (boring stuff) but  i hope having  at least the
> interfaces and API ready for tomorrow,  so you could tell me if it fills
> our needs for API3.
> 
> Basically, for  all of  you that know  about my  port of vfw  2pass, i'm
> splitting the  source so each bit  rate control algorithm  will have its
> own file  (better to review code).  I am also modularizing  all the rate
> control API,  so it will support  some kind of external  RC (external RC
> will have to implement the same internal interfaces i'm 'designing', and
> just  plug the  functions  together and  pass  them to  core during  the
> encoder  initialization -  kinda plugin).  I must  also  extract current
> 1pass to integrate it into this series of RC modules... bla bla bla
> 
> i don't like to talk before showing code so wait and we'll see...
> 
> PS: i remember michael that you  wanted to change something into the vfw
> port when i  first talked about merging it. But you  never told what you
> wanted to change... it's now time to give me your ideas so my new design
> could be ready ASAP
> 

ed, i too have recently been working on xvidcore-based ratecontrol (cbr,fquant,2pass)
with proper bframes handling. i've attached a diff of my current
progress to give u an idea of my API mods, though the "internal 2pass"
curve code is unfinished.

i have focused on the api & bframes-linkup stuff, and havent made many
changes to the 2pass code organisation/structure, so hopefully our
efforts we'rent wasted.

-- pete; my friggin keyboard has no spacebar

--------_3E03C1A49C25038DF00C_MULTIPART_MIXED_
Content-Type: application/octet-stream; name="rc-xvidcore.diff"
Content-Disposition: attachment;
 filename="rc-xvidcore.diff"
Content-Transfer-Encoding: base64

PyBidWlsZC93aW4zMi9jb3JlLm5jYg0KPyBidWlsZC93aW4zMi9SZWxlYXNlX1NNUA0KPyBidWls
ZC93aW4zMi9jb3JlLnBsZw0KPyBidWlsZC93aW4zMi9jb3JlLm9wdA0KPyBidWlsZC93aW4zMi9i
aW4NCj8gYnVpbGQvd2luMzIvUmVsZWFzZQ0KPyBidWlsZC93aW4zMi9EZWJ1Zw0KPyBzcmMvaW1h
Z2UvdG1wDQo/IHNyYy91dGlscy8ycGFzcy5jDQo/IHNyYy91dGlscy8ycGFzcy5oDQpJbmRleDog
YnVpbGQvd2luMzIvY29yZS5kc3ANCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0NClJDUyBmaWxlOiAveHZpZC94dmlkY29y
ZS9idWlsZC93aW4zMi9BdHRpYy9jb3JlLmRzcCx2DQpyZXRyaWV2aW5nIHJldmlzaW9uIDEuMTMu
Mi4zDQpkaWZmIC11IC1yMS4xMy4yLjMgY29yZS5kc3ANCi0tLSBidWlsZC93aW4zMi9jb3JlLmRz
cAk4IE5vdiAyMDAyIDIyOjQzOjUxIC0wMDAwCTEuMTMuMi4zDQorKysgYnVpbGQvd2luMzIvY29y
ZS5kc3AJNyBEZWMgMjAwMiAwMToyNToxOSAtMDAwMA0KQEAgLTM4Niw3ICszODYsNyBAQA0KICFJ
RiAgIiQoQ0ZHKSIgPT0gImNvcmUgLSBXaW4zMiBSZWxlYXNlIg0KIA0KICMgQmVnaW4gQ3VzdG9t
IEJ1aWxkIC0gQXNzZW1ibGluZyAkKElucHV0UGF0aCkNCi1JbnB1dERpcj1ceHZpZC1kZXZceHZp
ZGNvcmVcc3JjXGltYWdlXHg4Nl9hc20NCitJbnB1dERpcj1ceHZpZFxkZXYtYXBpLTNceHZpZGNv
cmVcc3JjXGltYWdlXHg4Nl9hc20NCiBJbnREaXI9LlxSZWxlYXNlDQogSW5wdXRQYXRoPS4uXC4u
XHNyY1xpbWFnZVx4ODZfYXNtXGNvbG9yc3BhY2VfcmdiX21teC5hc20NCiBJbnB1dE5hbWU9Y29s
b3JzcGFjZV9yZ2JfbW14DQpAQCAtMzk5LDcgKzM5OSw3IEBADQogIUVMU0VJRiAgIiQoQ0ZHKSIg
PT0gImNvcmUgLSBXaW4zMiBEZWJ1ZyINCiANCiAjIEJlZ2luIEN1c3RvbSBCdWlsZCAtIEFzc2Vt
YmxpbmcgJChJbnB1dFBhdGgpDQotSW5wdXREaXI9XHh2aWQtZGV2XHh2aWRjb3JlXHNyY1xpbWFn
ZVx4ODZfYXNtDQorSW5wdXREaXI9XHh2aWRcZGV2LWFwaS0zXHh2aWRjb3JlXHNyY1xpbWFnZVx4
ODZfYXNtDQogSW50RGlyPS5cRGVidWcNCiBJbnB1dFBhdGg9Li5cLi5cc3JjXGltYWdlXHg4Nl9h
c21cY29sb3JzcGFjZV9yZ2JfbW14LmFzbQ0KIElucHV0TmFtZT1jb2xvcnNwYWNlX3JnYl9tbXgN
CkBAIC00MTIsNyArNDEyLDcgQEANCiAhRUxTRUlGICAiJChDRkcpIiA9PSAiY29yZSAtIFdpbjMy
IFJlbGVhc2UgX1NNUCINCiANCiAjIEJlZ2luIEN1c3RvbSBCdWlsZCAtIEFzc2VtYmxpbmcgJChJ
bnB1dFBhdGgpDQotSW5wdXREaXI9XHh2aWQtZGV2XHh2aWRjb3JlXHNyY1xpbWFnZVx4ODZfYXNt
DQorSW5wdXREaXI9XHh2aWRcZGV2LWFwaS0zXHh2aWRjb3JlXHNyY1xpbWFnZVx4ODZfYXNtDQog
SW50RGlyPS5cUmVsZWFzZV9TTVANCiBJbnB1dFBhdGg9Li5cLi5cc3JjXGltYWdlXHg4Nl9hc21c
Y29sb3JzcGFjZV9yZ2JfbW14LmFzbQ0KIElucHV0TmFtZT1jb2xvcnNwYWNlX3JnYl9tbXgNCkBA
IC00MzIsNyArNDMyLDcgQEANCiAhSUYgICIkKENGRykiID09ICJjb3JlIC0gV2luMzIgUmVsZWFz
ZSINCiANCiAjIEJlZ2luIEN1c3RvbSBCdWlsZCAtIEFzc2VtYmxpbmcgJChJbnB1dFBhdGgpDQot
SW5wdXREaXI9XHh2aWQtZGV2XHh2aWRjb3JlXHNyY1xpbWFnZVx4ODZfYXNtDQorSW5wdXREaXI9
XHh2aWRcZGV2LWFwaS0zXHh2aWRjb3JlXHNyY1xpbWFnZVx4ODZfYXNtDQogSW50RGlyPS5cUmVs
ZWFzZQ0KIElucHV0UGF0aD0uLlwuLlxzcmNcaW1hZ2VceDg2X2FzbVxjb2xvcnNwYWNlX3l1dl9t
bXguYXNtDQogSW5wdXROYW1lPWNvbG9yc3BhY2VfeXV2X21teA0KQEAgLTQ0NSw3ICs0NDUsNyBA
QA0KICFFTFNFSUYgICIkKENGRykiID09ICJjb3JlIC0gV2luMzIgRGVidWciDQogDQogIyBCZWdp
biBDdXN0b20gQnVpbGQgLSBBc3NlbWJsaW5nICQoSW5wdXRQYXRoKQ0KLUlucHV0RGlyPVx4dmlk
LWRldlx4dmlkY29yZVxzcmNcaW1hZ2VceDg2X2FzbQ0KK0lucHV0RGlyPVx4dmlkXGRldi1hcGkt
M1x4dmlkY29yZVxzcmNcaW1hZ2VceDg2X2FzbQ0KIEludERpcj0uXERlYnVnDQogSW5wdXRQYXRo
PS4uXC4uXHNyY1xpbWFnZVx4ODZfYXNtXGNvbG9yc3BhY2VfeXV2X21teC5hc20NCiBJbnB1dE5h
bWU9Y29sb3JzcGFjZV95dXZfbW14DQpAQCAtNDU4LDcgKzQ1OCw3IEBADQogIUVMU0VJRiAgIiQo
Q0ZHKSIgPT0gImNvcmUgLSBXaW4zMiBSZWxlYXNlIF9TTVAiDQogDQogIyBCZWdpbiBDdXN0b20g
QnVpbGQgLSBBc3NlbWJsaW5nICQoSW5wdXRQYXRoKQ0KLUlucHV0RGlyPVx4dmlkLWRldlx4dmlk
Y29yZVxzcmNcaW1hZ2VceDg2X2FzbQ0KK0lucHV0RGlyPVx4dmlkXGRldi1hcGktM1x4dmlkY29y
ZVxzcmNcaW1hZ2VceDg2X2FzbQ0KIEludERpcj0uXFJlbGVhc2VfU01QDQogSW5wdXRQYXRoPS4u
XC4uXHNyY1xpbWFnZVx4ODZfYXNtXGNvbG9yc3BhY2VfeXV2X21teC5hc20NCiBJbnB1dE5hbWU9
Y29sb3JzcGFjZV95dXZfbW14DQpAQCAtNDc4LDcgKzQ3OCw3IEBADQogIUlGICAiJChDRkcpIiA9
PSAiY29yZSAtIFdpbjMyIFJlbGVhc2UiDQogDQogIyBCZWdpbiBDdXN0b20gQnVpbGQgLSBBc3Nl
bWJsaW5nICQoSW5wdXRQYXRoKQ0KLUlucHV0RGlyPVx4dmlkLWRldlx4dmlkY29yZVxzcmNcaW1h
Z2VceDg2X2FzbQ0KK0lucHV0RGlyPVx4dmlkXGRldi1hcGktM1x4dmlkY29yZVxzcmNcaW1hZ2Vc
eDg2X2FzbQ0KIEludERpcj0uXFJlbGVhc2UNCiBJbnB1dFBhdGg9Li5cLi5cc3JjXGltYWdlXHg4
Nl9hc21cY29sb3JzcGFjZV95dXl2X21teC5hc20NCiBJbnB1dE5hbWU9Y29sb3JzcGFjZV95dXl2
X21teA0KQEAgLTQ5MSw3ICs0OTEsNyBAQA0KICFFTFNFSUYgICIkKENGRykiID09ICJjb3JlIC0g
V2luMzIgRGVidWciDQogDQogIyBCZWdpbiBDdXN0b20gQnVpbGQgLSBBc3NlbWJsaW5nICQoSW5w
dXRQYXRoKQ0KLUlucHV0RGlyPVx4dmlkLWRldlx4dmlkY29yZVxzcmNcaW1hZ2VceDg2X2FzbQ0K
K0lucHV0RGlyPVx4dmlkXGRldi1hcGktM1x4dmlkY29yZVxzcmNcaW1hZ2VceDg2X2FzbQ0KIElu
dERpcj0uXERlYnVnDQogSW5wdXRQYXRoPS4uXC4uXHNyY1xpbWFnZVx4ODZfYXNtXGNvbG9yc3Bh
Y2VfeXV5dl9tbXguYXNtDQogSW5wdXROYW1lPWNvbG9yc3BhY2VfeXV5dl9tbXgNCkBAIC01MDQs
NyArNTA0LDcgQEANCiAhRUxTRUlGICAiJChDRkcpIiA9PSAiY29yZSAtIFdpbjMyIFJlbGVhc2Ug
X1NNUCINCiANCiAjIEJlZ2luIEN1c3RvbSBCdWlsZCAtIEFzc2VtYmxpbmcgJChJbnB1dFBhdGgp
DQotSW5wdXREaXI9XHh2aWQtZGV2XHh2aWRjb3JlXHNyY1xpbWFnZVx4ODZfYXNtDQorSW5wdXRE
aXI9XHh2aWRcZGV2LWFwaS0zXHh2aWRjb3JlXHNyY1xpbWFnZVx4ODZfYXNtDQogSW50RGlyPS5c
UmVsZWFzZV9TTVANCiBJbnB1dFBhdGg9Li5cLi5cc3JjXGltYWdlXHg4Nl9hc21cY29sb3JzcGFj
ZV95dXl2X21teC5hc20NCiBJbnB1dE5hbWU9Y29sb3JzcGFjZV95dXl2X21teA0KQEAgLTExODQs
NiArMTE4NCwxMCBAQA0KICMgUFJPUCBEZWZhdWx0X0ZpbHRlciAiIg0KICMgQmVnaW4gU291cmNl
IEZpbGUNCiANCitTT1VSQ0U9Li5cLi5cc3JjXHV0aWxzXDJwYXNzLmgNCisjIEVuZCBTb3VyY2Ug
RmlsZQ0KKyMgQmVnaW4gU291cmNlIEZpbGUNCisNCiBTT1VSQ0U9Li5cLi5cc3JjXHV0aWxzXGVt
bXMuaA0KICMgRW5kIFNvdXJjZSBGaWxlDQogIyBCZWdpbiBTb3VyY2UgRmlsZQ0KQEAgLTEyMDcs
NiArMTIxMSwyMyBAQA0KIFNPVVJDRT0uLlwuLlxzcmNcdXRpbHNcdGltZXIuaA0KICMgRW5kIFNv
dXJjZSBGaWxlDQogIyBFbmQgR3JvdXANCisjIEJlZ2luIFNvdXJjZSBGaWxlDQorDQorU09VUkNF
PS4uXC4uXHNyY1x1dGlsc1wycGFzcy5jDQorDQorIUlGICAiJChDRkcpIiA9PSAiY29yZSAtIFdp
bjMyIFJlbGVhc2UiDQorDQorIyBQUk9QIEV4Y2x1ZGVfRnJvbV9CdWlsZCAxDQorDQorIUVMU0VJ
RiAgIiQoQ0ZHKSIgPT0gImNvcmUgLSBXaW4zMiBEZWJ1ZyINCisNCisjIFBST1AgRXhjbHVkZV9G
cm9tX0J1aWxkIDENCisNCishRUxTRUlGICAiJChDRkcpIiA9PSAiY29yZSAtIFdpbjMyIFJlbGVh
c2UgX1NNUCINCisNCishRU5ESUYgDQorDQorIyBFbmQgU291cmNlIEZpbGUNCiAjIEJlZ2luIFNv
dXJjZSBGaWxlDQogDQogU09VUkNFPS4uXC4uXHNyY1x1dGlsc1xlbW1zLmMNCkluZGV4OiBzcmMv
ZGl2eDQuYw0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQ0KUkNTIGZpbGU6IC94dmlkL3h2aWRjb3JlL3NyYy9kaXZ4NC5j
LHYNCnJldHJpZXZpbmcgcmV2aXNpb24gMS4xNi4yLjMNCmRpZmYgLXUgLXIxLjE2LjIuMyBkaXZ4
NC5jDQotLS0gc3JjL2Rpdng0LmMJNyBOb3YgMjAwMiAxMDoyODoxNSAtMDAwMAkxLjE2LjIuMw0K
KysrIHNyYy9kaXZ4NC5jCTcgRGVjIDIwMDIgMDE6MjU6MjEgLTAwMDANCkBAIC0zNzMsNyArMzcz
LDcgQEANCiAJCQl4cGFyYW0uZnJhbWVfZHJvcF9yYXRpbyA9IDA7CS8qIGRvbnQgZHJvcCBmcmFt
ZXMgKi8NCiANCiAJCQkvKiBDcmVhdGUgdGhlIGVuY29kZXIgc2Vzc2lvbiAqLw0KLQkJCXhlcnIg
PSBlbmNvZGVyX2NyZWF0ZSgmeHBhcmFtKTsNCisJCQl4ZXJyID0gZW5jb2Rlcl9jcmVhdGUoJnhw
YXJhbSwgTlVMTCk7DQogDQogCQkJZXBhcmFtLT5oYW5kbGUgPSB4cGFyYW0uaGFuZGxlOw0KIA0K
SW5kZXg6IHNyYy9lbmNvZGVyLmMNCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0NClJDUyBmaWxlOiAveHZpZC94dmlkY29y
ZS9zcmMvZW5jb2Rlci5jLHYNCnJldHJpZXZpbmcgcmV2aXNpb24gMS43Ni4yLjI0DQpkaWZmIC11
IC1yMS43Ni4yLjI0IGVuY29kZXIuYw0KLS0tIHNyYy9lbmNvZGVyLmMJNCBEZWMgMjAwMiAxMjoz
MToxOCAtMDAwMAkxLjc2LjIuMjQNCisrKyBzcmMvZW5jb2Rlci5jCTcgRGVjIDIwMDIgMDE6MjU6
MjcgLTAwMDANCkBAIC04MCwxOSArODAsMTYgQEANCiAgKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8NCiAN
CiBzdGF0aWMgaW50IEZyYW1lQ29kZUkoRW5jb2RlciAqIHBFbmMsDQotCQkJCQkgIEJpdHN0cmVh
bSAqIGJzLA0KLQkJCQkJICB1aW50MzJfdCAqIHBCaXRzKTsNCisJCQkJCSAgQml0c3RyZWFtICog
YnMpOw0KIA0KIHN0YXRpYyBpbnQgRnJhbWVDb2RlUChFbmNvZGVyICogcEVuYywNCiAJCQkJCSAg
Qml0c3RyZWFtICogYnMsDQotCQkJCQkgIHVpbnQzMl90ICogcEJpdHMsDQogCQkJCQkgIGJvb2wg
Zm9yY2VfaW50ZXIsDQogCQkJCQkgIGJvb2wgdm9sX2hlYWRlcik7DQogDQogc3RhdGljIHZvaWQg
RnJhbWVDb2RlQihFbmNvZGVyICogcEVuYywNCiAJCQkJCSAgIEZSQU1FSU5GTyAqIGZyYW1lLA0K
LQkJCQkJICAgQml0c3RyZWFtICogYnMsDQotCQkJCQkgICB1aW50MzJfdCAqIHBCaXRzKTsNCisJ
CQkJCSAgIEJpdHN0cmVhbSAqIGJzKTsNCiANCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCiAgKiBM
b2NhbCBkYXRhDQpAQCAtMTI2LDcgKzEyMyw3IEBADQogICoqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovDQog
DQogaW50DQotZW5jb2Rlcl9jcmVhdGUoWFZJRF9FTkNfUEFSQU0gKiBwUGFyYW0pDQorZW5jb2Rl
cl9jcmVhdGUoWFZJRF9FTkNfUEFSQU0gKiBwUGFyYW0sIFhWSURfRU5DX1JDICogcFJDKQ0KIHsN
CiAJRW5jb2RlciAqcEVuYzsNCiAJaW50IGk7DQpAQCAtNDEwLDEyICs0MDcsMTcgQEANCiANCiAJ
cFBhcmFtLT5oYW5kbGUgPSAodm9pZCAqKSBwRW5jOw0KIA0KLQlpZiAocFBhcmFtLT5yY19iaXRy
YXRlKSB7DQotCQlSYXRlQ29udHJvbEluaXQoJnBFbmMtPnJhdGVfY29udHJvbCwgcFBhcmFtLT5y
Y19iaXRyYXRlLA0KLQkJCQkJCXBQYXJhbS0+cmNfcmVhY3Rpb25fZGVsYXlfZmFjdG9yLA0KLQkJ
CQkJCXBQYXJhbS0+cmNfYXZlcmFnaW5nX3BlcmlvZCwgcFBhcmFtLT5yY19idWZmZXIsDQotCQkJ
CQkJcFBhcmFtLT5mYmFzZSAqIDEwMDAgLyBwUGFyYW0tPmZpbmNyLA0KLQkJCQkJCXBQYXJhbS0+
bWF4X3F1YW50aXplciwgcFBhcmFtLT5taW5fcXVhbnRpemVyKTsNCisJaWYgKHBSQyA9PSBOVUxM
KQ0KKwl7DQorCQlpZiAocFBhcmFtLT5yY19iaXRyYXRlKSB7DQorCQkJUmF0ZUNvbnRyb2xJbml0
Q0JSKCZwRW5jLT5yYXRlX2NvbnRyb2wsIHBQYXJhbS0+cmNfYml0cmF0ZSwNCisJCQkJCQkJcFBh
cmFtLT5yY19yZWFjdGlvbl9kZWxheV9mYWN0b3IsDQorCQkJCQkJCXBQYXJhbS0+cmNfYXZlcmFn
aW5nX3BlcmlvZCwgcFBhcmFtLT5yY19idWZmZXIsDQorCQkJCQkJCXBQYXJhbS0+ZmJhc2UgKiAx
MDAwIC8gcFBhcmFtLT5maW5jciwNCisJCQkJCQkJcFBhcmFtLT5tYXhfcXVhbnRpemVyLCBwUGFy
YW0tPm1pbl9xdWFudGl6ZXIpOw0KKwkJfQ0KKwl9IGVsc2Ugew0KKwkJUmF0ZUNvbnRyb2xJbml0
KCZwRW5jLT5yYXRlX2NvbnRyb2wsIHBQYXJhbSwgcFJDKTsNCiAJfQ0KIA0KIAlpbml0X3RpbWVy
KCk7DQpAQCAtNTg3LDYgKzU4OSw4IEBADQogCXh2aWRfZnJlZShwRW5jLT5yZWZlcmVuY2UtPm1i
cyk7DQogCXh2aWRfZnJlZShwRW5jLT5yZWZlcmVuY2UpOw0KIA0KKwlSYXRlQ29udHJvbERlSW5p
dCgmcEVuYy0+cmF0ZV9jb250cm9sKTsNCisNCiAJeHZpZF9mcmVlKHBFbmMpOw0KIA0KIAlyZXR1
cm4gWFZJRF9FUlJfT0s7DQpAQCAtNjQ1LDcgKzY0OSwxNSBAQA0KIH0NCiANCiANCi0NCisvKiBj
b252ZXJ0IHBGcmFtZS0+aW50cmEgdG8gY29kaW5nX3R5cGUgKi8NCitzdGF0aWMgaW50IGludHJh
MmNvZGluZ190eXBlKGludCBpbnRyYSkNCit7DQorCWlmIChpbnRyYSA8IDApCQlyZXR1cm4gLTE7
DQorCWlmIChpbnRyYSA9PSAxKQkJcmV0dXJuIElfVk9QOw0KKwlpZiAoaW50cmEgPT0gMikJCXJl
dHVybiBCX1ZPUDsNCisJDQorCXJldHVybiBQX1ZPUDsNCit9DQogDQogDQogLyoqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqDQpAQCAtNjY0LDcgKzY3Niw3IEBADQogew0KIAl1aW50MTZfdCB4LCB5Ow0KIAlC
aXRzdHJlYW0gYnM7DQotCXVpbnQzMl90IGJpdHMsIG1vZGU7DQorCXVpbnQzMl90IG1vZGU7DQog
DQogCWludCBpbnB1dF92YWxpZCA9IDE7DQogCWludCBiZnJhbWVzX2NvdW50ID0gMDsNCkBAIC03
MDcsNyArNzE5LDcgQEANCiANCiAJCQlTV0FQKHBFbmMtPmN1cnJlbnQsIHBFbmMtPmJmcmFtZXNb
cEVuYy0+YmZyYW1lbnVtX3RhaWxdKTsNCiANCi0JCQlGcmFtZUNvZGVQKHBFbmMsICZicywgJmJp
dHMsIDEsIDApOw0KKwkJCUZyYW1lQ29kZVAocEVuYywgJmJzLCAxLCAwKTsNCiAJCQliZnJhbWVz
X2NvdW50ID0gMDsNCiANCiAJCQlCaXRzdHJlYW1QYWQoJmJzKTsNCkBAIC03MTYsNiArNzI4LDkg
QEANCiANCiAJCQllbW1zKCk7DQogDQorCQkJaWYgKHBGcmFtZS0+cXVhbnQgPT0gMCkNCisJCQkJ
UmF0ZUNvbnRyb2xVcGRhdGUoJnBFbmMtPnJhdGVfY29udHJvbCwgcEVuYy0+Y3VycmVudCk7DQor
DQogCQkJcmV0dXJuIFhWSURfRVJSX09LOw0KIAkJfQ0KIA0KQEAgLTcyNCwxNiArNzM5LDE5IEBA
DQogCQkJCXBFbmMtPmJmcmFtZW51bV9oZWFkLCBwRW5jLT5iZnJhbWVudW1fdGFpbCwNCiAJCQkJ
cEVuYy0+cXVldWVfaGVhZCwgcEVuYy0+cXVldWVfdGFpbCwgcEVuYy0+cXVldWVfc2l6ZSk7DQog
DQotCQlGcmFtZUNvZGVCKHBFbmMsIHBFbmMtPmJmcmFtZXNbcEVuYy0+YmZyYW1lbnVtX2hlYWRd
LCAmYnMsICZiaXRzKTsNCi0JCXBFbmMtPmJmcmFtZW51bV9oZWFkKys7DQorCQlGcmFtZUNvZGVC
KHBFbmMsIHBFbmMtPmJmcmFtZXNbcEVuYy0+YmZyYW1lbnVtX2hlYWRdLCAmYnMpOw0KIA0KLQkJ
Qml0c3RyZWFtUGFkKCZicyk7DQogCQlwRnJhbWUtPmxlbmd0aCA9IEJpdHN0cmVhbUxlbmd0aCgm
YnMpOw0KIAkJcEZyYW1lLT5pbnRyYSA9IDI7DQogDQogCQlpZiAoaW5wdXRfdmFsaWQpDQogCQkJ
cXVldWVfaW1hZ2UocEVuYywgcEZyYW1lKTsNCiANCisNCisJCWlmIChwRnJhbWUtPnF1YW50ID09
IDApDQorCQkJUmF0ZUNvbnRyb2xVcGRhdGUoJnBFbmMtPnJhdGVfY29udHJvbCwgcEVuYy0+YmZy
YW1lc1twRW5jLT5iZnJhbWVudW1faGVhZF0pOw0KKwkJcEVuYy0+YmZyYW1lbnVtX2hlYWQrKzsN
CisNCiAJCWVtbXMoKTsNCiANCiAJCXJldHVybiBYVklEX0VSUl9PSzsNCkBAIC03NDIsNiArNzYw
LDEwIEBADQogCWlmIChwRW5jLT5iZnJhbWVudW1faGVhZCA+IDApIHsNCiAJCXBFbmMtPmJmcmFt
ZW51bV9oZWFkID0gcEVuYy0+YmZyYW1lbnVtX3RhaWwgPSAwOw0KIA0KKwkJLyogcmVvcmRlcmlu
ZzogdXBkYXRlIHJjIGZvciB0aGUgcC1mcmFtZSAqLw0KKwkJaWYgKHBGcmFtZS0+cXVhbnQgPT0g
MCkNCisJCQlSYXRlQ29udHJvbFVwZGF0ZSgmcEVuYy0+cmF0ZV9jb250cm9sLCBwRW5jLT5jdXJy
ZW50KTsNCisNCiAJCS8qIHdyaXRlIGFuIGVtcHR5IG1hcmtlciB0byB0aGUgYml0c3RyZWFtLg0K
IAkJICAgDQogCQkgICBmb3IgZGl2eDUgZGVjb2RlciBjb21wYXRpYmlsaXR5LCB0aGlzIG1hcmtl
ciBtdXN0IGNvbnNpc3QNCkBAIC03NTYsMTEgKzc3OCwxMCBAQA0KIAkJCQlwRW5jLT5iZnJhbWVu
dW1faGVhZCwgcEVuYy0+YmZyYW1lbnVtX3RhaWwsDQogCQkJCXBFbmMtPnF1ZXVlX2hlYWQsIHBF
bmMtPnF1ZXVlX3RhaWwsIHBFbmMtPnF1ZXVlX3NpemUpOw0KIA0KLQkJCUJpdHN0cmVhbVBhZCgm
YnMpOw0KLQ0KIAkJCXRtcCA9IHBFbmMtPmN1cnJlbnQtPnNlY29uZHM7DQogCQkJcEVuYy0+Y3Vy
cmVudC0+c2Vjb25kcyA9IDA7IC8qIGZvcmNlIHRpbWVfYmFzZSA9IDAgKi8NCiAJCQlCaXRzdHJl
YW1Xcml0ZVZvcEhlYWRlcigmYnMsICZwRW5jLT5tYlBhcmFtLCBwRW5jLT5jdXJyZW50LCAwKTsN
CisJCQlCaXRzdHJlYW1QYWQoJmJzKTsNCiAJCQlwRW5jLT5jdXJyZW50LT5zZWNvbmRzID0gdG1w
Ow0KIA0KIAkJCXBGcmFtZS0+bGVuZ3RoID0gQml0c3RyZWFtTGVuZ3RoKCZicyk7DQpAQCAtODU1
LDggKzg3Niw5IEBADQogCS8vIG9ubHkgaW5jIGZyYW1lIG51bSwgYWRhcHQgcXVhbnQsIGV0Yy4g
aWYgd2UgaGF2ZW50IHNlZW4gaXQgYmVmb3JlDQogCWlmIChwRW5jLT5iZnJhbWVudW1fZHg1MGJ2
b3AgPCAwICkNCiAJew0KKwkJbW9kZSA9IGludHJhMmNvZGluZ190eXBlKHBGcmFtZS0+aW50cmEp
Ow0KIAkJaWYgKHBGcmFtZS0+cXVhbnQgPT0gMCkNCi0JCQlwRW5jLT5jdXJyZW50LT5xdWFudCA9
IFJhdGVDb250cm9sR2V0USgmcEVuYy0+cmF0ZV9jb250cm9sLCAwKTsNCisJCQlwRW5jLT5jdXJy
ZW50LT5xdWFudCA9IFJhdGVDb250cm9sR2V0USgmcEVuYy0+cmF0ZV9jb250cm9sLCAmbW9kZSk7
DQogCQllbHNlDQogCQkJcEVuYy0+Y3VycmVudC0+cXVhbnQgPSBwRnJhbWUtPnF1YW50Ow0KIA0K
QEAgLTkyOCwxMyArOTUwLDIyIEBADQogCSAqICUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUl
JSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUgKi8NCiAJcEVuYy0+aUZyYW1lTnVt
Kys7DQogDQotCWlmIChwRW5jLT5pRnJhbWVOdW0gPT0gMCB8fCBwRnJhbWUtPmludHJhID09IDEg
fHwgcEVuYy0+YmZyYW1lbnVtX2R4NTBidm9wID49IDAgfHwNCi0JCShwRnJhbWUtPmludHJhIDwg
MCAmJiBwRW5jLT5pTWF4S2V5SW50ZXJ2YWwgPiAwICYmDQotCQkgcEVuYy0+aUZyYW1lTnVtID49
IHBFbmMtPmlNYXhLZXlJbnRlcnZhbCkNCi0JCXx8IDIgPT0gKG1vZGUgPSBNRWFuYWx5c2lzKCZw
RW5jLT5yZWZlcmVuY2UtPmltYWdlLCBwRW5jLT5jdXJyZW50LA0KLQkJCQkJCQkJCSZwRW5jLT5t
YlBhcmFtLCBwRW5jLT5pTWF4S2V5SW50ZXJ2YWwsDQotCQkJCQkJCQkJKHBGcmFtZS0+aW50cmEg
PCAwKSA/IHBFbmMtPmlGcmFtZU51bSA6IDAsDQotCQkJCQkJCQkJYmZyYW1lc19jb3VudCsrKSkp
IHsNCisJaWYgKG1vZGUgPCAwKQkJLyogcGVyZm9ybSBhdXRvIGZyYW1lIHR5cGUgc2VsZWN0aW9u
ICAqLw0KKwl7DQorCQlpZiAocEVuYy0+aUZyYW1lTnVtID09IDAgfHwgcEVuYy0+YmZyYW1lbnVt
X2R4NTBidm9wID49IDAgfHwNCisJCQkocEVuYy0+aU1heEtleUludGVydmFsID4gMCAmJiBwRW5j
LT5pRnJhbWVOdW0gPj0gcEVuYy0+aU1heEtleUludGVydmFsKSkNCisJCXsNCisJCQltb2RlID0g
SV9WT1A7DQorCQl9ZWxzZXsNCisJCQltb2RlID0gTUVhbmFseXNpcygmcEVuYy0+cmVmZXJlbmNl
LT5pbWFnZSwgcEVuYy0+Y3VycmVudCwNCisJCQkJCQkJICAmcEVuYy0+bWJQYXJhbSwgcEVuYy0+
aU1heEtleUludGVydmFsLA0KKwkJCQkJCQkgKG1vZGUgPCAwKSA/IHBFbmMtPmlGcmFtZU51bSA6
IDAsDQorCQkJCQkJCSBiZnJhbWVzX2NvdW50KTsNCisJCQliZnJhbWVzX2NvdW50Kys7CS8qIHd0
Zj8gKi8NCisJCX0NCisJfQ0KKw0KKwlpZiAobW9kZSA9PSBJX1ZPUCkgew0KIA0KIAkJLyoNCiAJ
CSAqIFRoaXMgd2lsbCBiZSBjb2RlZCBhcyBhbiBJbnRyYSBGcmFtZQ0KQEAgLTk3MywxNCArMTAw
NCwxNCBAQA0KIAkJCWlmICgocEVuYy0+Z2xvYmFsICYgWFZJRF9HTE9CQUxfREVCVUcpKSB7DQog
CQkJCWltYWdlX3ByaW50ZigmcEVuYy0+Y3VycmVudC0+aW1hZ2UsIHBFbmMtPm1iUGFyYW0uZWRn
ZWRfd2lkdGgsIHBFbmMtPm1iUGFyYW0uaGVpZ2h0LCA1LCAxMDAsICJEWDUwIEJWT1AtPlBWT1Ai
KTsNCiAJCQl9DQotCQkJRnJhbWVDb2RlUChwRW5jLCAmYnMsICZiaXRzLCAxLCAwKTsNCisJCQlG
cmFtZUNvZGVQKHBFbmMsICZicywgMSwgMCk7DQogCQkJYmZyYW1lc19jb3VudCA9IDA7DQogDQog
CQkJcEZyYW1lLT5pbnRyYSA9IDA7DQogCQkJDQogCQl9IGVsc2Ugew0KIA0KLQkJCUZyYW1lQ29k
ZUkocEVuYywgJmJzLCAmYml0cyk7DQorCQkJRnJhbWVDb2RlSShwRW5jLCAmYnMpOw0KIAkJCWJm
cmFtZXNfY291bnQgPSAwOw0KIAkJCXBGcmFtZS0+aW50cmEgPSAxOw0KIA0KQEAgLTk5OSw4ICsx
MDMwLDcgQEANCiAJCSAqIE5CIDogc2VxdWVuY2VzIGxpa2UgIklJQkIiIGRlY29kZSBmaW5lIHdp
dGggbXNmZGFtIGJ1dCwNCiAJCSAqICAgICAgZ28gc2NyZXd5IHdpdGggZGl2eCA1LjAwDQogCQkg
Ki8NCi0JfSBlbHNlIGlmIChwRW5jLT5iZnJhbWVudW1fdGFpbCA+PSBwRW5jLT5tYlBhcmFtLm1h
eF9iZnJhbWVzIHx8IG1vZGUgIT0gMCkgew0KLS8vIAl9IGVsc2UgaWYgKHBGcmFtZS0+aW50cmEg
PT0gMCB8fCBwRW5jLT5iZnJhbWVudW1fdGFpbCA+PSBwRW5jLT5tYlBhcmFtLm1heF9iZnJhbWVz
IHx8IG1vZGUgIT0gMCkgeyANCisJfSBlbHNlIGlmIChtb2RlID09IFBfVk9QIHx8IHBFbmMtPmJm
cmFtZW51bV90YWlsID49IHBFbmMtPm1iUGFyYW0ubWF4X2JmcmFtZXMpIHsNCiAJCS8qDQogCQkg
KiBUaGlzIHdpbGwgYmUgY29kZWQgYXMgYSBQcmVkaWN0ZWQgRnJhbWUNCiAJCSAqLw0KQEAgLTEw
MTMsNyArMTA0Myw3IEBADQogCQkJaW1hZ2VfcHJpbnRmKCZwRW5jLT5jdXJyZW50LT5pbWFnZSwg
cEVuYy0+bWJQYXJhbS5lZGdlZF93aWR0aCwgcEVuYy0+bWJQYXJhbS5oZWlnaHQsIDUsIDIwMCwg
IlBWT1AiKTsNCiAJCX0NCiANCi0JCUZyYW1lQ29kZVAocEVuYywgJmJzLCAmYml0cywgMSwgMCk7
DQorCQlGcmFtZUNvZGVQKHBFbmMsICZicywgMSwgMCk7DQogCQliZnJhbWVzX2NvdW50ID0gMDsN
CiAJCXBGcmFtZS0+aW50cmEgPSAwOw0KIAkJcEVuYy0+Zmx1c2hfYmZyYW1lcyA9IDE7DQpAQCAt
MTAyNCw3ICsxMDU0LDcgQEANCiAJCQlnb3RvIGlwdm9wX2xvb3A7DQogCQl9DQogDQotCX0gZWxz
ZSB7DQorCX0gZWxzZSB7CS8qIG1vZGUgPT0gQl9WT1AgKi8NCiAJCS8qDQogCQkgKiBUaGlzIHdp
bGwgYmUgY29kZWQgYXMgYSBCaWRpcmVjdGlvbmFsIEZyYW1lDQogCQkgKi8NCkBAIC0xMDY0LDcg
KzEwOTQsNiBAQA0KIAkJZ290byBidm9wX2xvb3A7DQogCX0NCiANCi0JQml0c3RyZWFtUGFkKCZi
cyk7DQogCXBGcmFtZS0+bGVuZ3RoID0gQml0c3RyZWFtTGVuZ3RoKCZicyk7DQogDQogCWlmIChw
UmVzdWx0KSB7DQpAQCAtMTA4NywxMSArMTExNiw5IEBADQogCURFQlVHKHRlbXApOw0KICNlbmRp
Zg0KIA0KLQlpZiAocEZyYW1lLT5xdWFudCA9PSAwKSB7DQotCQlSYXRlQ29udHJvbFVwZGF0ZSgm
cEVuYy0+cmF0ZV9jb250cm9sLCBwRW5jLT5jdXJyZW50LT5xdWFudCwNCi0JCQkJCQkgIHBGcmFt
ZS0+bGVuZ3RoLCBwRnJhbWUtPmludHJhKTsNCi0JfQ0KLQ0KKwlpZiAocEZyYW1lLT5xdWFudCA9
PSAwKQ0KKwkJUmF0ZUNvbnRyb2xVcGRhdGUoJnBFbmMtPnJhdGVfY29udHJvbCwgcEVuYy0+Y3Vy
cmVudCk7DQorCQ0KIAlzdG9wX2dsb2JhbF90aW1lcigpOw0KIAl3cml0ZV90aW1lcigpOw0KIA0K
QEAgLTExMTcsOCArMTE0NCw4IEBADQogew0KIAl1aW50MTZfdCB4LCB5Ow0KIAlCaXRzdHJlYW0g
YnM7DQotCXVpbnQzMl90IGJpdHM7DQogCXVpbnQxNl90IHdyaXRlX3ZvbF9oZWFkZXIgPSAwOw0K
KwlpbnQgbW9kZTsNCiANCiAjaWZkZWYgX0RFQlVHX1BTTlINCiAJZmxvYXQgcHNucjsNCkBAIC0x
MTYzLDEyICsxMTkwLDE3IEBADQogDQogCUJpdHN0cmVhbUluaXQoJmJzLCBwRnJhbWUtPmJpdHN0
cmVhbSwgMCk7DQogDQorCQ0KKwltb2RlID0gaW50cmEyY29kaW5nX3R5cGUocEZyYW1lLT5pbnRy
YSk7DQogCWlmIChwRnJhbWUtPnF1YW50ID09IDApIHsNCi0JCXBFbmMtPmN1cnJlbnQtPnF1YW50
ID0gUmF0ZUNvbnRyb2xHZXRRKCZwRW5jLT5yYXRlX2NvbnRyb2wsIDApOw0KKwkJcEVuYy0+Y3Vy
cmVudC0+cXVhbnQgPSBSYXRlQ29udHJvbEdldFEoJnBFbmMtPnJhdGVfY29udHJvbCwgJm1vZGUp
Ow0KIAl9IGVsc2Ugew0KIAkJcEVuYy0+Y3VycmVudC0+cXVhbnQgPSBwRnJhbWUtPnF1YW50Ow0K
IAl9DQogDQorCS8qRFBSSU5URihEUFJJTlRGX1JDLCAiLS0tIHBGcmFtZS0+aW50cmE9JWkscEZy
YW1lLT5xdWFudD0laSAgIHwgcXVhbnQ9JWksIG1vZGU9JWkgLS0tIiwgDQorCQlwRnJhbWUtPmlu
dHJhLCBwRnJhbWUtPnF1YW50LCBwRW5jLT5jdXJyZW50LT5xdWFudCwgbW9kZSk7Ki8NCisNCiAJ
aWYgKChwRW5jLT5jdXJyZW50LT5nbG9iYWxfZmxhZ3MgJiBYVklEX1FVQVJURVJQRUwpKQ0KIAkJ
cEVuYy0+bWJQYXJhbS5tX3F1YXJ0ZXJwZWwgPSAxOw0KIAllbHNlDQpAQCAtMTIzMywyNiArMTI2
NSwyNiBAQA0KIAkJCXdyaXRlX3ZvbF9oZWFkZXIgPSBtYXRyaXgxX2NoYW5nZWQgfCBtYXRyaXgy
X2NoYW5nZWQ7DQogCX0NCiANCi0JaWYgKHBGcmFtZS0+aW50cmEgPCAwKSB7DQorCWlmIChtb2Rl
IDwgMCkgew0KIAkJaWYgKChwRW5jLT5pRnJhbWVOdW0gPT0gMCkNCiAJCQl8fCAoKHBFbmMtPmlN
YXhLZXlJbnRlcnZhbCA+IDApDQogCQkJCSYmIChwRW5jLT5pRnJhbWVOdW0gPj0gcEVuYy0+aU1h
eEtleUludGVydmFsKSkpIHsNCi0JCQlwRnJhbWUtPmludHJhID0gRnJhbWVDb2RlSShwRW5jLCAm
YnMsICZiaXRzKTsNCisJCQlwRnJhbWUtPmludHJhID0gRnJhbWVDb2RlSShwRW5jLCAmYnMpOw0K
IAkJfSBlbHNlIHsNCi0JCQlwRnJhbWUtPmludHJhID0gRnJhbWVDb2RlUChwRW5jLCAmYnMsICZi
aXRzLCAwLCB3cml0ZV92b2xfaGVhZGVyKTsNCisJCQlwRnJhbWUtPmludHJhID0gRnJhbWVDb2Rl
UChwRW5jLCAmYnMsIDAsIHdyaXRlX3ZvbF9oZWFkZXIpOw0KIAkJfQ0KIAl9IGVsc2Ugew0KLQkJ
aWYgKHBGcmFtZS0+aW50cmEgPT0gMSkgew0KLQkJCXBGcmFtZS0+aW50cmEgPSBGcmFtZUNvZGVJ
KHBFbmMsICZicywgJmJpdHMpOw0KKwkJaWYgKG1vZGUgPT0gSV9WT1ApIHsNCisJCQlwRnJhbWUt
PmludHJhID0gRnJhbWVDb2RlSShwRW5jLCAmYnMpOw0KIAkJfSBlbHNlIHsNCi0JCQlwRnJhbWUt
PmludHJhID0gRnJhbWVDb2RlUChwRW5jLCAmYnMsICZiaXRzLCAxLCB3cml0ZV92b2xfaGVhZGVy
KTsNCisJCQlwRnJhbWUtPmludHJhID0gRnJhbWVDb2RlUChwRW5jLCAmYnMsIDEsIHdyaXRlX3Zv
bF9oZWFkZXIpOw0KIAkJfQ0KIA0KIAl9DQogDQorLyoJQml0c3RyZWFtUHV0Qml0cygmYnMsIDB4
RkZGRiwgMTYpOw0KIAlCaXRzdHJlYW1QdXRCaXRzKCZicywgMHhGRkZGLCAxNik7DQotCUJpdHN0
cmVhbVB1dEJpdHMoJmJzLCAweEZGRkYsIDE2KTsNCi0JQml0c3RyZWFtUGFkKCZicyk7DQorCUJp
dHN0cmVhbVBhZCgmYnMpOyovDQogCXBGcmFtZS0+bGVuZ3RoID0gQml0c3RyZWFtTGVuZ3RoKCZi
cyk7DQogDQogCWlmIChwUmVzdWx0KSB7DQpAQCAtMTI2NSwxMCArMTI5Nyw5IEBADQogDQogCWVt
bXMoKTsNCiANCi0JaWYgKHBGcmFtZS0+cXVhbnQgPT0gMCkgew0KLQkJUmF0ZUNvbnRyb2xVcGRh
dGUoJnBFbmMtPnJhdGVfY29udHJvbCwgcEVuYy0+Y3VycmVudC0+cXVhbnQsDQotCQkJCQkJICBw
RnJhbWUtPmxlbmd0aCwgcEZyYW1lLT5pbnRyYSk7DQotCX0NCisJaWYgKHBGcmFtZS0+cXVhbnQg
PT0gMCkNCisJCVJhdGVDb250cm9sVXBkYXRlKCZwRW5jLT5yYXRlX2NvbnRyb2wsIHBFbmMtPmN1
cnJlbnQpOw0KKw0KICNpZmRlZiBfREVCVUdfUFNOUg0KIAlwc25yID0NCiAJCWltYWdlX3BzbnIo
JnBFbmMtPnNPcmlnaW5hbCwgJnBFbmMtPmN1cnJlbnQtPmltYWdlLA0KQEAgLTE1MTUsOSArMTU0
Niw5IEBADQogDQogc3RhdGljIGludA0KIEZyYW1lQ29kZUkoRW5jb2RlciAqIHBFbmMsDQotCQkg
ICBCaXRzdHJlYW0gKiBicywNCi0JCSAgIHVpbnQzMl90ICogcEJpdHMpDQorCQkgICBCaXRzdHJl
YW0gKiBicykNCiB7DQorCXVpbnQzMl90IGJpdHMgPSBCaXRzdHJlYW1Qb3MoYnMpOw0KIA0KIAlE
RUNMQVJFX0FMSUdORURfTUFUUklYKGRjdF9jb2RlcywgNiwgNjQsIGludDE2X3QsIENBQ0hFX0xJ
TkUpOw0KIAlERUNMQVJFX0FMSUdORURfTUFUUklYKHFjb2VmZiwgNiwgNjQsIGludDE2X3QsIENB
Q0hFX0xJTkUpOw0KQEAgLTE1NDMsOCArMTU3NCw2IEBADQogCXNldF90aW1lY29kZXMocEVuYy0+
Y3VycmVudCxwRW5jLT5yZWZlcmVuY2UscEVuYy0+bWJQYXJhbS5mYmFzZSk7DQogCUJpdHN0cmVh
bVdyaXRlVm9wSGVhZGVyKGJzLCAmcEVuYy0+bWJQYXJhbSwgcEVuYy0+Y3VycmVudCwgMSk7DQog
DQotCSpwQml0cyA9IEJpdHN0cmVhbVBvcyhicyk7DQotDQogCXBFbmMtPmN1cnJlbnQtPnNTdGF0
LmlUZXh0Qml0cyA9IDA7DQogCXBFbmMtPmN1cnJlbnQtPnNTdGF0LmtibGtzID0gcEVuYy0+bWJQ
YXJhbS5tYl93aWR0aCAqIHBFbmMtPm1iUGFyYW0ubWJfaGVpZ2h0Ow0KIAlwRW5jLT5jdXJyZW50
LT5zU3RhdC5tYmxrcyA9IHBFbmMtPmN1cnJlbnQtPnNTdGF0LnVibGtzID0gMDsNCkBAIC0xNTc1
LDcgKzE2MDQsOSBAQA0KIA0KIAllbW1zKCk7DQogDQotCSpwQml0cyA9IEJpdHN0cmVhbVBvcyhi
cykgLSAqcEJpdHM7DQorCUJpdHN0cmVhbVBhZChicyk7DQorCXBFbmMtPmN1cnJlbnQtPmxlbmd0
aCA9IChCaXRzdHJlYW1Qb3MoYnMpIC0gYml0cykgLyA4Ow0KKw0KIAlwRW5jLT5mTXZQcmV2U2ln
bWEgPSAtMTsNCiAJcEVuYy0+bWJQYXJhbS5tX2Zjb2RlID0gMjsNCiANCkBAIC0xNTkzLDExICsx
NjI0LDExIEBADQogc3RhdGljIGludA0KIEZyYW1lQ29kZVAoRW5jb2RlciAqIHBFbmMsDQogCQkg
ICBCaXRzdHJlYW0gKiBicywNCi0JCSAgIHVpbnQzMl90ICogcEJpdHMsDQogCQkgICBib29sIGZv
cmNlX2ludGVyLA0KIAkJICAgYm9vbCB2b2xfaGVhZGVyKQ0KIHsNCiAJZmxvYXQgZlNpZ21hOw0K
Kwl1aW50MzJfdCBiaXRzID0gQml0c3RyZWFtUG9zKGJzKTsNCiANCiAJREVDTEFSRV9BTElHTkVE
X01BVFJJWChkY3RfY29kZXMsIDYsIDY0LCBpbnQxNl90LCBDQUNIRV9MSU5FKTsNCiAJREVDTEFS
RV9BTElHTkVEX01BVFJJWChxY29lZmYsIDYsIDY0LCBpbnQxNl90LCBDQUNIRV9MSU5FKTsNCkBA
IC0xNjYyLDcgKzE2OTMsNyBAQA0KIAl9DQogCXN0b3BfbW90aW9uX3RpbWVyKCk7DQogDQotCWlm
IChiSW50cmEgPT0gMSkgcmV0dXJuIEZyYW1lQ29kZUkocEVuYywgYnMsIHBCaXRzKTsNCisJaWYg
KGJJbnRyYSA9PSAxKSByZXR1cm4gRnJhbWVDb2RlSShwRW5jLCBicyk7DQogDQogCWlmICggKHBF
bmMtPmN1cnJlbnQtPkdNQ19NVi54ID09IDApICYmIChwRW5jLT5jdXJyZW50LT5HTUNfTVYueSA9
PSAwKSApDQogCQkJcEVuYy0+Y3VycmVudC0+Y29kaW5nX3R5cGUgPSBQX1ZPUDsJCS8qIG5vIGds
b2JhbCBtb3Rpb24gLT4gbm8gR01DICovDQpAQCAtMTY3NSw4ICsxNzA2LDYgQEANCiAJc2V0X3Rp
bWVjb2RlcyhwRW5jLT5jdXJyZW50LHBFbmMtPnJlZmVyZW5jZSxwRW5jLT5tYlBhcmFtLmZiYXNl
KTsNCiAJQml0c3RyZWFtV3JpdGVWb3BIZWFkZXIoYnMsICZwRW5jLT5tYlBhcmFtLCBwRW5jLT5j
dXJyZW50LCAxKTsNCiANCi0JKnBCaXRzID0gQml0c3RyZWFtUG9zKGJzKTsNCi0NCiAJcEVuYy0+
Y3VycmVudC0+c1N0YXQuaVRleHRCaXRzID0gcEVuYy0+Y3VycmVudC0+c1N0YXQuaU12U3VtID0g
cEVuYy0+Y3VycmVudC0+c1N0YXQuaU12Q291bnQgPSANCiAJCXBFbmMtPmN1cnJlbnQtPnNTdGF0
LmtibGtzID0gcEVuYy0+Y3VycmVudC0+c1N0YXQubWJsa3MgPSBwRW5jLT5jdXJyZW50LT5zU3Rh
dC51YmxrcyA9IDA7DQogDQpAQCAtMTg1OSw3ICsxODg4LDggQEANCiANCiAJfQ0KIA0KLQkqcEJp
dHMgPSBCaXRzdHJlYW1Qb3MoYnMpIC0gKnBCaXRzOw0KKwlCaXRzdHJlYW1QYWQoYnMpOw0KKwlw
RW5jLT5jdXJyZW50LT5sZW5ndGggPSAoQml0c3RyZWFtUG9zKGJzKSAtIGJpdHMpIC8gODsNCiAN
CiAJcmV0dXJuIDA7CQkJCQkvLyBpbnRlcg0KIH0NCkBAIC0xODY4LDkgKzE4OTgsOSBAQA0KIHN0
YXRpYyBfX2lubGluZSB2b2lkDQogRnJhbWVDb2RlQihFbmNvZGVyICogcEVuYywNCiAJCSAgIEZS
QU1FSU5GTyAqIGZyYW1lLA0KLQkJICAgQml0c3RyZWFtICogYnMsDQotCQkgICB1aW50MzJfdCAq
IHBCaXRzKQ0KKwkJICAgQml0c3RyZWFtICogYnMpDQogew0KKwl1aW50MzJfdCBiaXRzID0gQml0
c3RyZWFtUG9zKGJzKTsNCiAJaW50MTZfdCBkY3RfY29kZXNbNiAqIDY0XTsNCiAJaW50MTZfdCBx
Y29lZmZbNiAqIDY0XTsNCiAJdWludDMyX3QgeCwgeTsNCkBAIC0xOTM1LDggKzE5NjUsNiBAQA0K
IAlzZXRfdGltZWNvZGVzKGZyYW1lLCBwRW5jLT5yZWZlcmVuY2UscEVuYy0+bWJQYXJhbS5mYmFz
ZSk7DQogCUJpdHN0cmVhbVdyaXRlVm9wSGVhZGVyKGJzLCAmcEVuYy0+bWJQYXJhbSwgZnJhbWUs
IDEpOw0KIA0KLQkqcEJpdHMgPSBCaXRzdHJlYW1Qb3MoYnMpOw0KLQ0KIAlmcmFtZS0+c1N0YXQu
aVRleHRCaXRzID0gMDsNCiAJZnJhbWUtPnNTdGF0LmlNdlN1bSA9IDA7DQogCWZyYW1lLT5zU3Rh
dC5pTXZDb3VudCA9IDA7DQpAQCAtMTk4Nyw3ICsyMDE1LDkgQEANCiANCiAJLy8gVE9ETzogZHlu
YW1pYyBmY29kZS9iY29kZSA/Pz8NCiANCi0JKnBCaXRzID0gQml0c3RyZWFtUG9zKGJzKSAtICpw
Qml0czsNCisJQml0c3RyZWFtUGFkKGJzKTsNCisJZnJhbWUtPmxlbmd0aCA9IChCaXRzdHJlYW1Q
b3MoYnMpIC0gYml0cykgLyA4Ow0KKw0KIA0KICNpZmRlZiBCRlJBTUVTX0RFQ19ERUJVRw0KIAlp
ZiAoIWZpcnN0KXsNCkluZGV4OiBzcmMvZW5jb2Rlci5oDQo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09DQpSQ1MgZmlsZTog
L3h2aWQveHZpZGNvcmUvc3JjL2VuY29kZXIuaCx2DQpyZXRyaWV2aW5nIHJldmlzaW9uIDEuMTgu
Mi42DQpkaWZmIC11IC1yMS4xOC4yLjYgZW5jb2Rlci5oDQotLS0gc3JjL2VuY29kZXIuaAk0IERl
YyAyMDAyIDEyOjMxOjE4IC0wMDAwCTEuMTguMi42DQorKysgc3JjL2VuY29kZXIuaAk3IERlYyAy
MDAyIDAxOjI1OjI5IC0wMDAwDQpAQCAtNDcsNyArNDcsNiBAQA0KICNpbmNsdWRlICJwb3J0YWIu
aCINCiAjaW5jbHVkZSAiZ2xvYmFsLmgiDQogI2luY2x1ZGUgImltYWdlL2ltYWdlLmgiDQotI2lu
Y2x1ZGUgInV0aWxzL3JhdGVjb250cm9sLmgiDQogDQogLyoqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQog
ICogQ29uc3RhbnRzDQpAQCAtMTQ1LDYgKzE0NCw4IEBADQogCXVpbnQzMl90IHRpY2tzOw0KIAlp
bnQ2NF90IHN0YW1wOw0KIA0KKwl1aW50MzJfdCBsZW5ndGg7DQorDQogCUlNQUdFIGltYWdlOw0K
IA0KIAlNQUNST0JMT0NLICptYnM7DQpAQCAtMTU2LDYgKzE1NywxNjggQEANCiANCiANCiANCisj
ZGVmaW5lIE5OU1RBVFNfS0VZRlJBTUUJKDE8PDMxKQ0KKyNkZWZpbmUgTk5TVEFUU19CRlJBTUUJ
CSgxPDwzMCkNCisNCit0eXBlZGVmIHN0cnVjdA0KK3sNCisJLyogZnJhbWUgbGVuZ3RoIChieXRl
cykgKi8NCisNCisJdWludDMyX3QgYnl0ZXM7DQorDQorCS8qIGlnbm9yZWQgJiB6ZXJvJ2QgYnkg
Z2sgDQorCXh2aWQgc3BlY2lmaWM6IGRrX3YgPSBmcmFtZSBoZWFkZXIgYnl0ZXMNCisJKi8NCisN
CisJaW50IGRrX3YsIGRrX3UsIGRrX3k7DQorCWludCBkZF92LCBkZF91LCBkZF95Ow0KKwlpbnQg
bWtfdSwgbWtfeTsNCisJaW50IG1kX3UsIG1kX3k7DQorDQorCS8qIHEgdXNlZCBmb3IgdGhpcyBm
cmFtZQ0KKwkJc2V0IGJpdCAzMSBmb3Iga2V5ZnJhbWUgKi8NCisNCisJaW50IHF1YW50Ow0KKw0K
KwkvKiBrZXksIG1vdGlvbiwgbm90LWNvZGVkIG1hY3JvYmxvY2tzICovDQorDQorCWludCBrYmxr
LCBtYmxrLCB1YmxrOw0KKwkNCisJLyogbHVtX25vaXNlIGlzIGFjdHVhbGx5IGEgZG91YmxlIChh
cyA4IGJ5dGVzKQ0KKwkJZm9yIHNvbWUgcmVhc29uIG1zdmM2LjAgc3RvcmVzIGRvdWJsZXMgYXMg
MTIgYnl0ZXMhPw0KKwkJbHVtX25vaXNlIGlzIG5vdCB1c2VkIHNvIGl0IGRvZXNudCBtYXR0ZXIg
Ki8NCisNCisJZmxvYXQgbHVtX25vaXNlWzJdOw0KK30gTk5TVEFUUzsNCisNCisNCisNCit0eXBl
ZGVmIHN0cnVjdA0KK3sNCisJLyogIyMjIyMjIyMgZ2xvYmFsIHN0dWZmICMjIyMjIyMjICovDQor
DQorCS8qIGNvbnN0YW50ICovDQorCWludCBtb2RlOw0KKwlpbnQgbWluX2lxdWFudDsNCisJaW50
IG1heF9pcXVhbnQ7DQorCWludCBtaW5fcHF1YW50Ow0KKwlpbnQgbWF4X3BxdWFudDsNCisJDQor
CWludCBjcmVkaXRzX3N0YXJ0Ow0KKwlpbnQgY3JlZGl0c19zdGFydF9iZWdpbjsNCisJaW50IGNy
ZWRpdHNfc3RhcnRfZW5kOw0KKwlpbnQgY3JlZGl0c19lbmQ7DQorCWludCBjcmVkaXRzX2VuZF9i
ZWdpbjsNCisJaW50IGNyZWRpdHNfZW5kX2VuZDsNCisNCisJaW50IGNyZWRpdHNfbW9kZTsNCisJ
aW50IGNyZWRpdHNfZ3JleXNjYWxlOw0KKwlpbnQgY3JlZGl0c19yYXRlOw0KKwlpbnQgY3JlZGl0
c19xdWFudF9pOw0KKwlpbnQgY3JlZGl0c19xdWFudF9wOw0KKwkNCisJLyogdmFyaWFibGUgKi8N
CisJaW50NjRfdCBmcmFtZV9udW07DQorCWludDY0X3QgdG90YWxfc2l6ZTsNCisJaW50IHF1YW50
X2NvdW50WzMyXTsJCS8qIHF1YW50aXplciBoaXN0b3JncmFtICovDQorDQorCS8qICMjIyMjIyMj
IGZpeGVkIHF1YW50aXplciAjIyMjIyMjIyAqLw0KKw0KKwkvKiBjb25zdGFudCovDQorCWZsb2F0
IGZxdWFudDsNCisNCisJLyogdmFyaWFibGUgKi8NCisJZmxvYXQgZnF1YW50X3J1bm5pbmc7DQor
DQorCS8qICMjIyMjIyMjIGNvbnN0YW50IGJpdHJhdGUgIyMjIyMjIyMgKi8NCisNCisJLyogY29u
c3RhbnQsdmFyaWFibGUgKi8NCisJaW50MzJfdCBjYnJfcXVhbnQ7DQorCWRvdWJsZSBmcmFtZXJh
dGU7DQorCWludDMyX3QgdGFyZ2V0X3JhdGU7DQorCWludDY0X3QgbGFzdF9jaGFuZ2U7DQorCWlu
dDY0X3QgcXVhbnRfc3VtOw0KKwlkb3VibGUgcXVhbnRfZXJyb3JbMzJdOw0KKwlkb3VibGUgYXZn
X2ZyYW1lc2l6ZTsNCisJZG91YmxlIHRhcmdldF9mcmFtZXNpemU7DQorCWRvdWJsZSBzZXF1ZW5j
ZV9xdWFsaXR5Ow0KKwlpbnQzMl90IGF2ZXJhZ2luZ19wZXJpb2Q7DQorCWludDMyX3QgcmVhY3Rp
b25fZGVsYXlfZmFjdG9yOw0KKwlpbnQzMl90IGJ1ZmZlcjsNCisNCisJLyogIyMjIyMjIyMgdmJy
MnBhc3MxICMjIyMjIyMjICovDQorDQorCS8qIGNvbnN0YW50ICovDQorCUZJTEUgKiBzdGF0czE7
DQorDQorCS8qICMjIyMjIyMjIHZicjJwYXNzMiAjIyMjIyMjIyAqLw0KKw0KKwkvKiBjb25zdGFu
dCAqLw0KKwlsb25nIGRlc2lyZWRfc2l6ZTsJLyogW2luXQkJCWRlc2lyZWQgZmlsZSBzaXplOiBi
eXRlcyAqLw0KKw0KKwlpbnQgY3JlZGl0c19zdGFydF9zaXplOw0KKwlpbnQgY3JlZGl0c19lbmRf
c2l6ZTsNCisJaW50IGtleWZyYW1lX2Jvb3N0Ow0KKwlpbnQga2Z0cmVzaG9sZDsJCS8vYWRkZWQg
Ynkga29lcGkgZm9yIG5ldyAycGFzcyBjdXJ2ZSB0cmVhdG1lbnQNCisJaW50IGtmcmVkdWN0aW9u
Ow0KKwlpbnQgY3VydmVfY29tcHJlc3Npb25faGlnaDsNCisJaW50IGN1cnZlX2NvbXByZXNzaW9u
X2xvdzsNCisJaW50IHVzZV9hbHRfY3VydmU7DQorCWludCBhbHRfY3VydmVfdXNlX2F1dG87DQor
CWludCBhbHRfY3VydmVfYXV0b19zdHI7DQorCWludCBhbHRfY3VydmVfdXNlX2F1dG9fYm9udXNf
YmlhczsNCisJaW50IGFsdF9jdXJ2ZV9ib251c19iaWFzOw0KKwlpbnQgYWx0X2N1cnZlX3R5cGU7
DQorCWludCBhbHRfY3VydmVfaGlnaF9kaXN0Ow0KKwlpbnQgYWx0X2N1cnZlX2xvd19kaXN0Ow0K
KwlpbnQgYWx0X2N1cnZlX21pbl9yZWxfcXVhbDsNCisJaW50IG1heF9vdmVyZmxvd19pbXByb3Zl
bWVudDsNCisJaW50IG1heF9vdmVyZmxvd19kZWdyYWRhdGlvbjsNCisJaW50IGJpdHJhdGVfcGF5
YmFja19kZWxheTsNCisJaW50IGJpdHJhdGVfcGF5YmFja19tZXRob2Q7DQorCWludCBtaW5fa2V5
X2ludGVydmFsOw0KKw0KKwkvKiB2YXJpYWJsZSAqLw0KKwlOTlNUQVRTKiBubnMxOwkJLyogc3Rh
dHMxIGFycmF5ICovDQorCU5OU1RBVFMqIG5uczI7CQkvKiBzdGF0czIgYXJyYXkgKi8NCisJaW50
IG5uc19mcmFtZXM7CQkvKiBudW0gb2Ygc3RhdHMgZnJhbWVzICovDQorDQorCWludCBrZXlmcmFt
ZV9sb2NhdGlvbnNbMjA0ODBdOw0KKw0KKwlpbnQgYnl0ZXMxOwkJCQkvKiBieXRlcyBmcm9tIHN0
YXRzMSAqLw0KKwlpbnQgZGVzaXJlZF9ieXRlczsJCS8qIGRlc2lyZWQgYnl0ZXMgKi8NCisJDQor
CWludCBtYXhfZnJhbWVzaXplOw0KKwlpbnQgbWluYnNpemUsIG1pbnBzaXplLCBtaW5pc2l6ZTsN
CisJDQorCWRvdWJsZSBtb3ZpZV9jdXJ2ZTsNCisJZG91YmxlIGNyZWRpdHNfc3RhcnRfY3VydmU7
DQorCWRvdWJsZSBjcmVkaXRzX2VuZF9jdXJ2ZTsNCisNCisJZG91YmxlIGF2ZXJhZ2VfcGZyYW1l
Ow0KKwlkb3VibGUgYXZlcmFnZV9iZnJhbWU7DQorDQorCWRvdWJsZSBjdXJ2ZV9jb21wX3NjYWxl
Ow0KKwlkb3VibGUgY3VydmVfYmlhc19ib251czsNCisNCisJZG91YmxlIGFsdF9jdXJ2ZV9sb3c7
DQorCWRvdWJsZSBhbHRfY3VydmVfaGlnaDsNCisJZG91YmxlIGFsdF9jdXJ2ZV9sb3dfZGlmZjsN
CisJZG91YmxlIGFsdF9jdXJ2ZV9oaWdoX2RpZmY7DQorCWRvdWJsZSBhbHRfY3VydmVfbWlkX3F1
YWw7DQorCWRvdWJsZSBhbHRfY3VydmVfcXVhbF9kZXY7DQorCWludCBvdmVyZmxvdywgS0ZfaWR4
LCBLRm92ZXJmbG93LCBLRm92ZXJmbG93X3BhcnRpYWw7DQorDQorDQorCWRvdWJsZSBicXVhbnRf
ZXJyb3JbMzJdOw0KKwlkb3VibGUgcHF1YW50X2Vycm9yWzMyXTsNCisJZG91YmxlIGN1cnZlX2Nv
bXBfZXJyb3I7DQorCWludCBsYXN0X2JxdWFudCwgbGFzdF9wcXVhbnQ7DQorDQorfQ0KK1JhdGVD
b250cm9sOw0KKw0KKw0KIHR5cGVkZWYgc3RydWN0DQogew0KIAlNQlBhcmFtIG1iUGFyYW07DQpA
QCAtMjQ4LDcgKzQxMSw3IEBADQogDQogdm9pZCBpbml0X2VuY29kZXIodWludDMyX3QgY3B1X2Zs
YWdzKTsNCiANCi1pbnQgZW5jb2Rlcl9jcmVhdGUoWFZJRF9FTkNfUEFSQU0gKiBwUGFyYW0pOw0K
K2ludCBlbmNvZGVyX2NyZWF0ZShYVklEX0VOQ19QQVJBTSAqIHBQYXJhbSwgWFZJRF9FTkNfUkMg
KiBwUkMpOw0KIGludCBlbmNvZGVyX2Rlc3Ryb3koRW5jb2RlciAqIHBFbmMpOw0KIGludCBlbmNv
ZGVyX2VuY29kZShFbmNvZGVyICogcEVuYywNCiAJCQkJICAgWFZJRF9FTkNfRlJBTUUgKiBwRnJh
bWUsDQpJbmRleDogc3JjL3BvcnRhYi5oDQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09DQpSQ1MgZmlsZTogL3h2aWQveHZp
ZGNvcmUvc3JjL3BvcnRhYi5oLHYNCnJldHJpZXZpbmcgcmV2aXNpb24gMS4yNi4yLjINCmRpZmYg
LXUgLXIxLjI2LjIuMiBwb3J0YWIuaA0KLS0tIHNyYy9wb3J0YWIuaAk3IE5vdiAyMDAyIDEwOjI4
OjE1IC0wMDAwCTEuMjYuMi4yDQorKysgc3JjL3BvcnRhYi5oCTcgRGVjIDIwMDIgMDE6MjU6MzAg
LTAwMDANCkBAIC0xMCwxNCArMTAsMTYgQEANCiAjZGVmaW5lIERQUklOVEZfTUIJCQkweDAwMDAw
MDEwDQogI2RlZmluZSBEUFJJTlRGX0NPRUZGCQkweDAwMDAwMDIwDQogI2RlZmluZSBEUFJJTlRG
X01WCQkJMHgwMDAwMDA0MA0KLSNkZWZpbmUgRFBSSU5URl9ERUJVRwkJMHg4MDAwMDAwMA0KKyNk
ZWZpbmUgRFBSSU5URl9ERUJVRwkJMHgwMTAwMDAwMA0KKyNkZWZpbmUgRFBSSU5URl9SQyAgCQkw
eDgwMDAwMDAwDQorDQogDQogDQogI2lmZGVmIF9ERUJVRw0KIC8vIGRlYnVnIGxldmVsDQotI2Rl
ZmluZSBEUFJJTlRGX0xFVkVMCQkweDAwMDAwMDBmDQorI2RlZmluZSBEUFJJTlRGX0xFVkVMCQko
RFBSSU5URl9SQyB8IERQUklOVEZfREVCVUcgfCAweGYpDQogI2Vsc2UNCi0jZGVmaW5lIERQUklO
VEZfTEVWRUwJCTB4MA0KKyNkZWZpbmUgRFBSSU5URl9MRVZFTAkJRFBSSU5URl9SQw0KICNlbmRp
Zg0KIA0KIA0KQEAgLTQ2LDggKzQ4LDYgQEANCiAJfQ0KIH0NCiANCi0NCi0jZGVmaW5lIERFQlVH
Q0JSKEEsQixDKSB7IGNoYXIgdG1wWzEwMF07IHdzcHJpbnRmKHRtcCwgIkNCUjogZnJhbWU6ICVp
LCBxdWFudDogJWksIGRldmlhdGlvbjogJWlcbiIsIChBKSwgKEIpLCAoQykpOyBPdXRwdXREZWJ1
Z1N0cmluZyh0bXApOyB9DQogDQogI2lmZGVmIF9ERUJVRw0KICNkZWZpbmUgREVCVUcoUykgT3V0
cHV0RGVidWdTdHJpbmcoKFMpKTsNCkluZGV4OiBzcmMveHZpZC5jDQo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09DQpSQ1Mg
ZmlsZTogL3h2aWQveHZpZGNvcmUvc3JjL3h2aWQuYyx2DQpyZXRyaWV2aW5nIHJldmlzaW9uIDEu
MzMuMi4xNA0KZGlmZiAtdSAtcjEuMzMuMi4xNCB4dmlkLmMNCi0tLSBzcmMveHZpZC5jCTIwIE5v
diAyMDAyIDE5OjUyOjMyIC0wMDAwCTEuMzMuMi4xNA0KKysrIHNyYy94dmlkLmMJNyBEZWMgMjAw
MiAwMToyNTozMiAtMDAwMA0KQEAgLTU5Myw3ICs1OTMsNyBAQA0KIAkJCQkJCQkgIChYVklEX0VO
Q19TVEFUUyAqKSBwYXJhbTIpOw0KIA0KIAljYXNlIFhWSURfRU5DX0NSRUFURToNCi0JCXJldHVy
biBlbmNvZGVyX2NyZWF0ZSgoWFZJRF9FTkNfUEFSQU0gKikgcGFyYW0xKTsNCisJCXJldHVybiBl
bmNvZGVyX2NyZWF0ZSgoWFZJRF9FTkNfUEFSQU0gKikgcGFyYW0xLCAoWFZJRF9FTkNfUkMgKikg
cGFyYW0yKTsNCiANCiAJY2FzZSBYVklEX0VOQ19ERVNUUk9ZOg0KIAkJcmV0dXJuIGVuY29kZXJf
ZGVzdHJveSgoRW5jb2RlciAqKSBoYW5kbGUpOw0KSW5kZXg6IHNyYy94dmlkLmgNCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0NClJDUyBmaWxlOiAveHZpZC94dmlkY29yZS9zcmMveHZpZC5oLHYNCnJldHJpZXZpbmcgcmV2
aXNpb24gMS4xNy4yLjEyDQpkaWZmIC11IC1yMS4xNy4yLjEyIHh2aWQuaA0KLS0tIHNyYy94dmlk
LmgJMTkgTm92IDIwMDIgMTM6MjE6MjUgLTAwMDAJMS4xNy4yLjEyDQorKysgc3JjL3h2aWQuaAk3
IERlYyAyMDAyIDAxOjI1OjM0IC0wMDAwDQpAQCAtMjQwLDYgKzI0MCwxOCBAQA0KICAqIEVuY29k
ZXIgY29uc3RhbnRzDQogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovDQogDQorLyogRmxhZ3MgZm9yIFhW
SURfRU5DX1JDLm1vZGUgKi8NCisjZGVmaW5lIFhWSURfTk9ORQkJCQkwDQorI2RlZmluZSBYVklE
X0ZJWEVEUVVBTlQJCQkxDQorI2RlZmluZSBYVklEX0NCUgkJCQkyDQorI2RlZmluZSBYVklEX1ZC
UjJQQVNTMQkJCTMNCisjZGVmaW5lIFhWSURfVkJSMlBBU1MyCQkJNA0KKw0KKyNkZWZpbmUgWFZJ
RF9DUkVESVRTX01PREVfUkFURQkJMA0KKyNkZWZpbmUgWFZJRF9DUkVESVRTX01PREVfUVVBTlQJ
CTENCisjZGVmaW5lIFhWSURfQ1JFRElUU19NT0RFX1NJWkUJCTINCisNCisNCiAvKiBGbGFncyBm
b3IgWFZJRF9FTkNfUEFSQU0uZ2xvYmFsICovDQogI2RlZmluZSBYVklEX0dMT0JBTF9QQUNLRUQJ
CTB4MDAwMDAwMDEJLyogcGFja2VkIGJpdHN0cmVhbSAqLw0KICNkZWZpbmUgWFZJRF9HTE9CQUxf
RFg1MEJWT1AJMHgwMDAwMDAwMgkvKiBkeDUwIGJ2b3AgY29tcGF0aWJpbGl0eSAqLw0KQEAgLTMz
Miw2ICszNDQsODEgQEANCiAJCXZvaWQgKmhhbmRsZTsJCQkvKiBbb3V0XSBlbmNvZGVyIGluc3Rh
bmNlIGhhbmRsZSAqLw0KIAl9DQogCVhWSURfRU5DX1BBUkFNOw0KKw0KKwl0eXBlZGVmIHN0cnVj
dA0KKwl7DQorCQlpbnQgdmVyc2lvbjsNCisJCWludCBtb2RlOwkJCQkvKiBbaW5dCQlyYXRlIGNv
bnRyb2wgbW9kZSAqLw0KKw0KKwkJaW50IGNyZWRpdHNfc3RhcnQ7DQorCQlpbnQgY3JlZGl0c19z
dGFydF9iZWdpbjsNCisJCWludCBjcmVkaXRzX3N0YXJ0X2VuZDsNCisJCWludCBjcmVkaXRzX2Vu
ZDsNCisJCWludCBjcmVkaXRzX2VuZF9iZWdpbjsNCisJCWludCBjcmVkaXRzX2VuZF9lbmQ7DQor
CQ0KKwkJaW50IGNyZWRpdHNfbW9kZTsNCisJCWludCBjcmVkaXRzX2dyZXlzY2FsZTsNCisJCWlu
dCBjcmVkaXRzX3JhdGU7DQorCQlpbnQgY3JlZGl0c19xdWFudF9pOw0KKwkJaW50IGNyZWRpdHNf
cXVhbnRfcDsNCisNCisJCXVuaW9uDQorCQl7DQorCQkJc3RydWN0CQkJCS8qIFhWSURfRklYRURR
VUFOVCAqLw0KKwkJCXsNCisJCQkJZmxvYXQgcXVhbnQ7DQorCQkJfSBmaXhlZF9xdWFudDsNCisN
CisJCQlzdHJ1Y3QJCQkJLyogWFZJRF9DQlIgKi8NCisJCQl7DQorCQkJCWludCBiaXRyYXRlOwkJ
LyogW2luXSB0aGUgYml0cmF0ZSBvZiB0aGUgdGFyZ2V0IGVuY29kZWQgc3RyZWFtLCBpbiBiaXRz
L3NlY29uZCAqLw0KKwkJCQlpbnQgcmVhY3Rpb25fZGVsYXlfZmFjdG9yOwkvKiBbaW5dIGhvdyBm
YXN0IHRoZSByYXRlIGNvbnRyb2wgcmVhY3RzIC0gbG93ZXIgdmFsdWVzIGFyZSBmYXN0ZXIgKi8N
CisJCQkJaW50IGF2ZXJhZ2luZ19wZXJpb2Q7CS8qIFtpbl0gYXMgYWJvdmUgKi8NCisJCQkJaW50
IGJ1ZmZlcjsJCQkvKiBbaW5dCQkJIGFzIGFib3ZlICovDQorCQkJfSBjYnI7DQorDQorCQkJc3Ry
dWN0CQkJCS8qIFhWSURfVkJSMlBBU1MxICovDQorCQkJew0KKwkJCQljaGFyICogc3RhdF9maWxl
OwkvKiBbaW5dCQkJb3V0cHV0IHN0YXRzIGZpbGUgKi8NCisJCQkJY2hhciAqIGhpbnRfZmlsZTsJ
LyogW2luOm9wdF0JCW91cHV0IG1vdGlvbiB2ZWN0b3IgaGludCBmaWxlICovDQorCQkJfSB2YnIy
cGFzczE7DQorDQorCQkJc3RydWN0CQkJCS8qIFhWSURfVkJSMlBBU1MyICovDQorCQkJew0KKwkJ
CQljaGFyICogc3RhdHMxX2ZpbGU7CS8qIFtpbl0JCQlpbnB1dCBzdGF0cyBmaWxlICovDQorCQkJ
CWNoYXIgKiBzdGF0czJfZmlsZTsJLyogW2luXQkJCWlucHV0IHNjYWxlZCBzdGF0cyBmaWxlIChz
ZXQgdG8gTlVMTCBmb3IgaW50ZXJuYWwgY3VydmUgc2NhbGluZykgKi8NCisJCQkJbG9uZyBkZXNp
cmVkX3NpemU7CS8qIFtpbl0JCQlkZXNpcmVkIGZpbGUgc2l6ZTogYnl0ZXMgKi8NCisNCisJCQkJ
aW50IGNyZWRpdHNfc3RhcnRfc2l6ZTsNCisJCQkJaW50IGNyZWRpdHNfZW5kX3NpemU7DQorDQor
CQkJCWludCBrZXlmcmFtZV9ib29zdDsNCisJCQkJaW50IGtmdHJlc2hvbGQ7CQkvL2FkZGVkIGJ5
IGtvZXBpIGZvciBuZXcgMnBhc3MgY3VydmUgdHJlYXRtZW50DQorCQkJCWludCBrZnJlZHVjdGlv
bjsNCisJCQkJaW50IGN1cnZlX2NvbXByZXNzaW9uX2hpZ2g7DQorCQkJCWludCBjdXJ2ZV9jb21w
cmVzc2lvbl9sb3c7DQorCQkJCWludCB1c2VfYWx0X2N1cnZlOw0KKwkJCQlpbnQgYWx0X2N1cnZl
X3VzZV9hdXRvOw0KKwkJCQlpbnQgYWx0X2N1cnZlX2F1dG9fc3RyOw0KKwkJCQlpbnQgYWx0X2N1
cnZlX3VzZV9hdXRvX2JvbnVzX2JpYXM7DQorCQkJCWludCBhbHRfY3VydmVfYm9udXNfYmlhczsN
CisJCQkJaW50IGFsdF9jdXJ2ZV90eXBlOw0KKwkJCQlpbnQgYWx0X2N1cnZlX2hpZ2hfZGlzdDsN
CisJCQkJaW50IGFsdF9jdXJ2ZV9sb3dfZGlzdDsNCisJCQkJaW50IGFsdF9jdXJ2ZV9taW5fcmVs
X3F1YWw7DQorCQkJCWludCB0d29wYXNzX21heF9iaXRyYXRlOw0KKwkJCQlpbnQgdHdvcGFzc19t
YXhfb3ZlcmZsb3dfaW1wcm92ZW1lbnQ7DQorCQkJCWludCB0d29wYXNzX21heF9vdmVyZmxvd19k
ZWdyYWRhdGlvbjsNCisJCQkJaW50IGJpdHJhdGVfcGF5YmFja19kZWxheTsNCisJCQkJaW50IGJp
dHJhdGVfcGF5YmFja19tZXRob2Q7DQorCQkJCWludCBtaW5fa2V5X2ludGVydmFsOw0KKw0KKwkJ
CX0gdmJyMnBhc3MyOw0KKwkJfSBkYXRhOw0KKw0KKwl9IFhWSURfRU5DX1JDOw0KKw0KIA0KIAl0
eXBlZGVmIHN0cnVjdA0KIAl7DQpJbmRleDogc3JjL2JpdHN0cmVhbS9iaXRzdHJlYW0uYw0KPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQ0KUkNTIGZpbGU6IC94dmlkL3h2aWRjb3JlL3NyYy9iaXRzdHJlYW0vYml0c3RyZWFt
LmMsdg0KcmV0cmlldmluZyByZXZpc2lvbiAxLjI4LjIuNg0KZGlmZiAtdSAtcjEuMjguMi42IGJp
dHN0cmVhbS5jDQotLS0gc3JjL2JpdHN0cmVhbS9iaXRzdHJlYW0uYwkxMiBOb3YgMjAwMiAxNTo1
MzoyMyAtMDAwMAkxLjI4LjIuNg0KKysrIHNyYy9iaXRzdHJlYW0vYml0c3RyZWFtLmMJNyBEZWMg
MjAwMiAwMToyNTozOCAtMDAwMA0KQEAgLTExMjMsNiArMTEyMyw5IEBADQogCQkvLyBubyBzdXBw
b3J0IGZvciBicmlnaHRuZXNzX2NoYW5nZSENCiAJfQ0KIAkNCisNCisJRFBSSU5URihEUFJJTlRG
X0hFQURFUiwgInF1YW50ID0gJWkiLCBmcmFtZS0+cXVhbnQpOw0KKw0KIAlCaXRzdHJlYW1QdXRC
aXRzKGJzLCBmcmFtZS0+cXVhbnQsIDUpOwkvLyBxdWFudGl6ZXINCiANCiAJaWYgKGZyYW1lLT5j
b2RpbmdfdHlwZSAhPSBJX1ZPUCkNCkluZGV4OiBzcmMvdXRpbHMvcmF0ZWNvbnRyb2wuYw0KPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQ0KUkNTIGZpbGU6IC94dmlkL3h2aWRjb3JlL3NyYy91dGlscy9yYXRlY29udHJvbC5j
LHYNCnJldHJpZXZpbmcgcmV2aXNpb24gMS4xMw0KZGlmZiAtdSAtcjEuMTMgcmF0ZWNvbnRyb2wu
Yw0KLS0tIHNyYy91dGlscy9yYXRlY29udHJvbC5jCTE3IEp1biAyMDAyIDEyOjIzOjMyIC0wMDAw
CTEuMTMNCisrKyBzcmMvdXRpbHMvcmF0ZWNvbnRyb2wuYwk3IERlYyAyMDAyIDAxOjI1OjQ0IC0w
MDAwDQpAQCAtMzEsMTkgKzMxLDc3IEBADQogDQogLyogRm9yIHRoZSBmYWJzIGZ1bmN0aW9uICov
DQogI2luY2x1ZGUgPG1hdGguaD4NCi0NCisjaW5jbHVkZSAiLi4veHZpZC5oIg0KICNpbmNsdWRl
ICJyYXRlY29udHJvbC5oIg0KKy8vI2luY2x1ZGUgIjJwYXNzLmgiDQorDQorDQorI2RlZmluZSBJ
TklUSUFMX0NCUl9RVUFOVAkJNQkvKiBjYnIgaW5pdGlhbCBxdWFudCAqLw0KKw0KKyNkZWZpbmUg
UkFEMkRFRyA1Ny4yOTU3Nzk1MTMwODIzMjA4NzY3OTgxNTQ4MTQxMDUNCisjZGVmaW5lIERFRzJS
QUQgMC4wMTc0NTMyOTI1MTk5NDMyOTU3NjkyMzY5MDc2ODQ4ODYNCisNCisNCisvKiBmZXRjaCBj
b2RpbmdfdHlwZSBkZXNjcmlwdGlvbiAqLw0KKw0KK3N0YXRpYw0KK2NvbnN0IGNoYXIgKiBjb2Rp
bmdfdHlwZV9zeihpbnQgY29kaW5nX3R5cGUpDQorew0KKwlzd2l0Y2goY29kaW5nX3R5cGUpDQor
CXsNCisJY2FzZSBJX1ZPUCA6IHJldHVybiAiaS12b3AiOw0KKwljYXNlIFBfVk9QIDogcmV0dXJu
ICJwLXZvcCI7DQorCWNhc2UgQl9WT1AgOiByZXR1cm4gImItdm9wIjsNCisJY2FzZSBTX1ZPUCA6
IHJldHVybiAicy12b3AiOw0KKwlkZWZhdWx0IDogcmV0dXJuICJ1bmtub3duIjsNCisJfQ0KK30N
CisNCisNCisvKiBmZXRjaCBxdWFudF90eXBlIGRlc2NyaXB0aW9uICovDQorDQorc3RhdGljDQor
Y29uc3QgY2hhciAqIHF1YW50X3R5cGVfc3ooaW50IGdlbmVyYWxfZmxhZ3MpDQorew0KKwlpZiAo
KGdlbmVyYWxfZmxhZ3MgJiBYVklEX0gyNjNRVUFOVCkpDQorCQlyZXR1cm4gImgyNjMiOw0KKw0K
KwlpZiAoKGdlbmVyYWxfZmxhZ3MgJiBYVklEX0NVU1RPTV9RTUFUUklYKSkNCisJCXJldHVybiAi
Y3VzdG9tIjsNCisNCisJaWYgKChnZW5lcmFsX2ZsYWdzICYgWFZJRF9NUEVHUVVBTlQpKQ0KKwkJ
cmV0dXJuICJtcGVnIjsNCisNCisJcmV0dXJuICJ1bmtub3duIjsNCit9DQorDQorDQorLyogcmV0
dXJucyBub24temVybyBpZiBlbmNvZGluZyBjcmVkaXRzLCBvciB6ZXJvIGlmIG5vdCAqLw0KKw0K
KyNkZWZpbmUgUkNfQ1JFRElUU19TVEFSVAkJLTENCisjZGVmaW5lIFJDX0NSRURJVFNfRU5ECQkJ
MQ0KKw0KK3N0YXRpYyANCitpbnQgUmF0ZUNvbnRyb2xfaW5fY3JlZGl0cyhSYXRlQ29udHJvbCAq
cmMsIGludDY0X3QgZnJhbWVfbnVtKQ0KK3sNCisJaWYgKHJjLT5jcmVkaXRzX3N0YXJ0ICYmIA0K
KwkJZnJhbWVfbnVtID49IHJjLT5jcmVkaXRzX3N0YXJ0X2JlZ2luICYmIGZyYW1lX251bSA8PSBy
Yy0+Y3JlZGl0c19zdGFydF9lbmQpDQorCQlyZXR1cm4gUkNfQ1JFRElUU19TVEFSVDsNCisNCisJ
aWYgKHJjLT5jcmVkaXRzX2VuZCAmJg0KKwkJZnJhbWVfbnVtID49IHJjLT5jcmVkaXRzX2VuZF9i
ZWdpbiAmJiBmcmFtZV9udW0gPD0gcmMtPmNyZWRpdHNfZW5kX2VuZCkNCisJCXJldHVybiBSQ19D
UkVESVRTX0VORDsNCisNCisJcmV0dXJuIDA7DQorfQ0KKw0KIA0KLS8qKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKg0KLSAqIExvY2FsIHByb3RvdHlwZSAtIGRlZmluZWQgYXQgdGhlIGVuZCBvZiB0aGUgZmls
ZQ0KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqLw0KIA0KLXN0YXRpYyBpbnQgZ2V0X2luaXRpYWxfcXVh
bnQoaW50IGJwcCk7DQogDQogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQogICogUmF0ZUNvbnRyb2xJ
bml0DQogICoNCi0gKiBUaGlzIGZ1bmN0aW9uIGluaXRpYWxpemUgdGhlIHN0cnVjdHVyZSBtZW1i
ZXJzIG9mICdyYXRlX2NvbnRyb2wnIGFyZ3VtZW50DQorICogVGhpcyBmdW5jdGlvbiBpbml0aWFs
aXplIHRoZSBzdHJ1Y3R1cmUgbWVtYmVycyBvZiAncmMnIGFyZ3VtZW50DQogICogYWNjb3JkaW5n
IHRvIHRoZSBvdGhlciBhcmd1bWVudHMuDQogICoNCiAgKiBSZXR1cm5lZCB2YWx1ZSA6IE5vbmUN
CkBAIC01MSw3ICsxMDksNyBAQA0KICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLw0KIA0KIHZvaWQNCi1S
YXRlQ29udHJvbEluaXQoUmF0ZUNvbnRyb2wgKiByYXRlX2NvbnRyb2wsDQorUmF0ZUNvbnRyb2xJ
bml0Q0JSKFJhdGVDb250cm9sICogcmMsDQogCQkJCXVpbnQzMl90IHRhcmdldF9yYXRlLA0KIAkJ
CQl1aW50MzJfdCByZWFjdGlvbl9kZWxheV9mYWN0b3IsDQogCQkJCXVpbnQzMl90IGF2ZXJhZ2lu
Z19wZXJpb2QsDQpAQCAtNjIsMTQ4ICsxMjAsMTcxMCBAQA0KIHsNCiAJaW50IGk7DQogDQotCXJh
dGVfY29udHJvbC0+ZnJhbWVzID0gMDsNCi0JcmF0ZV9jb250cm9sLT50b3RhbF9zaXplID0gMDsN
CisJRFBSSU5URihEUFJJTlRGX1JDLCJpbml0OlhWSURfQ0JSIGZ1bmN0aW9uIik7DQogDQotCXJh
dGVfY29udHJvbC0+ZnJhbWVyYXRlID0gZnJhbWVyYXRlIC8gMTAwMC4wOw0KLQlyYXRlX2NvbnRy
b2wtPnRhcmdldF9yYXRlID0gdGFyZ2V0X3JhdGU7DQorCS8qIFhYWDogdGhpcyBzdHVmZiBpcyBy
ZXBlYXRlZCB0byBlbnN1cmUgYmFja3dhcmQgY29tcGF0aWJpbGl0eSovDQorCXJjLT5tb2RlID0g
WFZJRF9DQlI7DQorCXJjLT5mcmFtZV9udW0gPSAwOw0KKwlyYy0+dG90YWxfc2l6ZSA9IDA7DQor
CW1lbXNldChyYy0+cXVhbnRfY291bnQsIDAsIHNpemVvZihyYy0+cXVhbnRfY291bnQpKTsNCisJ
cmMtPm1pbl9pcXVhbnQgPSBtaW5fcXVhbnQ7DQorCXJjLT5tYXhfaXF1YW50ID0gbWF4X3F1YW50
Ow0KKwlyYy0+bWluX3BxdWFudCA9IG1pbl9xdWFudDsNCisJcmMtPm1heF9wcXVhbnQgPSBtYXhf
cXVhbnQ7DQorCS8qIF5YWFggKi8NCiANCi0JcmF0ZV9jb250cm9sLT5ydG5fcXVhbnQgPSBnZXRf
aW5pdGlhbF9xdWFudCgwKTsNCi0JcmF0ZV9jb250cm9sLT5tYXhfcXVhbnQgPSBtYXhfcXVhbnQ7
DQotCXJhdGVfY29udHJvbC0+bWluX3F1YW50ID0gbWluX3F1YW50Ow0KKwlyYy0+ZnJhbWVyYXRl
ID0gZnJhbWVyYXRlIC8gMTAwMC4wOw0KKwlyYy0+dGFyZ2V0X3JhdGUgPSB0YXJnZXRfcmF0ZTsN
CisNCisJcmMtPmNicl9xdWFudCA9IElOSVRJQUxfQ0JSX1FVQU5UOw0KIA0KIAlmb3IgKGkgPSAw
OyBpIDwgMzI7ICsraSkgew0KLQkJcmF0ZV9jb250cm9sLT5xdWFudF9lcnJvcltpXSA9IDAuMDsN
CisJCXJjLT5xdWFudF9lcnJvcltpXSA9IDAuMDsNCisJfQ0KKw0KKwlyYy0+dGFyZ2V0X2ZyYW1l
c2l6ZSA9KGRvdWJsZSkgdGFyZ2V0X3JhdGUgLyA4LjAgLyByYy0+ZnJhbWVyYXRlOw0KKwlyYy0+
c2VxdWVuY2VfcXVhbGl0eSA9IDIuMCAvIChkb3VibGUpIHJjLT5jYnJfcXVhbnQ7DQorCXJjLT5h
dmdfZnJhbWVzaXplID0gcmMtPnRhcmdldF9mcmFtZXNpemU7DQorDQorCXJjLT5yZWFjdGlvbl9k
ZWxheV9mYWN0b3IgPSByZWFjdGlvbl9kZWxheV9mYWN0b3I7DQorCXJjLT5hdmVyYWdpbmdfcGVy
aW9kID0gYXZlcmFnaW5nX3BlcmlvZDsNCisJcmMtPmJ1ZmZlciA9IGJ1ZmZlcjsNCit9DQorDQor
DQorDQorLyoNCisJbWFsbG9jIHN0YXRzIGFycmF5LCBhbmQgcmVhZCBpbiBzdGF0cyBkYXRhIA0K
KwlyZXR1cm5zIE5VTEwgb24gZmFpbHVyZQ0KKyovDQorDQorTk5TVEFUUyAqIFJhdGVDb250cm9s
X3JlYWRfc3RhdHMoY2hhciAqIGZpbGVuYW1lLCB1bnNpZ25lZCBpbnQgKiBmcmFtZXMpDQorew0K
KwlOTlNUQVRTICogbm5zOw0KKwlGSUxFICogZjsNCisJaW50MzJfdCB2ZXJzaW9uOw0KKw0KKwlm
ID0gZm9wZW4oZmlsZW5hbWUsICJyYiIpOw0KKwlpZiAoZiA9PSBOVUxMKQ0KKwl7DQorCQlEUFJJ
TlRGKERQUklOVEZfUkMsICIycGFzcyBpbml0IGVycm9yIC0gZmFpbGVkIHRvIG9wZW4gJXMiLCBm
aWxlbmFtZSk7DQorCQlyZXR1cm4gTlVMTDsNCisJfQ0KKw0KKwlpZiAoZnJlYWQoJnZlcnNpb24s
IHNpemVvZihpbnQzMl90KSwgMSwgZikgIT0gMSkNCisJew0KKwkJRFBSSU5URihEUFJJTlRGX1JD
LCIycGFzcyBpbml0IGVycm9yIC0gY291bGRuJ3QgcmVhZCBmcm9tICVzIiwgZmlsZW5hbWUpOw0K
KwkJZmNsb3NlKGYpOw0KKwkJcmV0dXJuIE5VTEw7DQogCX0NCiANCi0JcmF0ZV9jb250cm9sLT50
YXJnZXRfZnJhbWVzaXplID0NCi0JCShkb3VibGUpIHRhcmdldF9yYXRlIC8gOC4wIC8gcmF0ZV9j
b250cm9sLT5mcmFtZXJhdGU7DQotCXJhdGVfY29udHJvbC0+c2VxdWVuY2VfcXVhbGl0eSA9IDIu
MCAvIChkb3VibGUpIHJhdGVfY29udHJvbC0+cnRuX3F1YW50Ow0KLQlyYXRlX2NvbnRyb2wtPmF2
Z19mcmFtZXNpemUgPSByYXRlX2NvbnRyb2wtPnRhcmdldF9mcmFtZXNpemU7DQorCWlmICh2ZXJz
aW9uICE9IC0yMCkNCisJew0KKwkJRFBSSU5URihEUFJJTlRGX1JDLCIycGFzcyBpbml0IGVycm9y
IC0gJXMgdXNlcyB3cm9uZyAuc3RhdHMgdmVyc2lvbiIsIGZpbGVuYW1lKTsNCisJCWZjbG9zZShm
KTsNCisJCXJldHVybiBOVUxMOw0KKwl9DQorDQorCWZzZWVrKGYsIDAsIFNFRUtfRU5EKTsNCisJ
KmZyYW1lcyA9IChmdGVsbChmKSAtIDQpIC8gc2l6ZW9mKE5OU1RBVFMpOw0KKwlmc2VlayhmLCA0
LCBTRUVLX1NFVCk7DQorDQorCW5ucyA9IG1hbGxvYygqZnJhbWVzICogc2l6ZW9mKE5OU1RBVFMp
KTsNCisJaWYgKG5ucyA9PSBOVUxMKQ0KKwl7DQorCQlEUFJJTlRGKERQUklOVEZfUkMsIjJwYXNz
IGluaXQgZXJyb3IgLSBtYWxsb2MgZmFpbGVkIG9uICVzICIsIGZpbGVuYW1lKTsNCisJCWZjbG9z
ZShmKTsNCisJCXJldHVybiBOVUxMOw0KKwl9DQorDQorCWlmIChmcmVhZChubnMsIHNpemVvZihO
TlNUQVRTKSwgKmZyYW1lcywgZikgIT0gKmZyYW1lcykNCisJew0KKwkJRFBSSU5URihEUFJJTlRG
X1JDLCIycGFzcyBpbml0IGVycm9yIC0gZnJlYWQgZmFpbGVkIG9uICVzICIsIGZpbGVuYW1lKTsN
CisJCWZyZWUobm5zKTsNCisJCWZjbG9zZShmKTsNCisJCXJldHVybiBOVUxMOw0KKwl9DQorDQor
CWZjbG9zZShmKTsNCisNCisJRFBSSU5URihEUFJJTlRGX1JDLCAiJXMgcmVhZCwgJWkgZnJhbWVz
IHJlYWQiLCBmaWxlbmFtZSwgKmZyYW1lcyk7DQorDQorCXJldHVybiBubnM7DQorfQ0KKw0KIA0K
LQlyYXRlX2NvbnRyb2wtPnJlYWN0aW9uX2RlbGF5X2ZhY3RvciA9IHJlYWN0aW9uX2RlbGF5X2Zh
Y3RvcjsNCi0JcmF0ZV9jb250cm9sLT5hdmVyYWdpbmdfcGVyaW9kID0gYXZlcmFnaW5nX3Blcmlv
ZDsNCi0JcmF0ZV9jb250cm9sLT5idWZmZXIgPSBidWZmZXI7DQorLyogYWx0IGN1cnZlIHN0dWZm
LCBjb21tb24gdG8gaW50ZXJuYWwgYW5kIGV4dGVybmFsIDJwYXNzIGluaXQgKi8NCisNCitpbnQg
UmF0ZUNvbnRyb2xfaW5pdF9hbHRjdXJ2ZShSYXRlQ29udHJvbCAqIHJjLCBkb3VibGUgdG90YWwx
LCBkb3VibGUgdG90YWwyLCBpbnQgY3JlZGl0c19mcmFtZXMsIGludCBpX2ZyYW1lcykNCit7DQor
CWRvdWJsZSBjdXJ2ZV90ZW1wLCBkYnl0ZXM7DQorCWludCBpLCBuZXdxdWFudCwgcGVyY2VudDsN
CisJaW50IG9sZHF1YW50ID0gMTsNCisNCisJCQ0KKwlpZiAocmMtPmFsdF9jdXJ2ZV91c2VfYXV0
b19ib251c19iaWFzKQ0KKwkJcmMtPmFsdF9jdXJ2ZV9ib251c19iaWFzID0gcmMtPmFsdF9jdXJ2
ZV9taW5fcmVsX3F1YWw7DQorDQorCXJjLT5jdXJ2ZV9iaWFzX2JvbnVzID0gKHRvdGFsMSAtIHRv
dGFsMikgKiAoZG91YmxlKXJjLT5hbHRfY3VydmVfYm9udXNfYmlhcyAvIDEwMC4wIC8gKGRvdWJs
ZSkocmMtPm5uc19mcmFtZXMgLSBjcmVkaXRzX2ZyYW1lcyAtIGlfZnJhbWVzKTsNCisJcmMtPmN1
cnZlX2NvbXBfc2NhbGUgPSAoKHRvdGFsMSAtIHRvdGFsMikgKiAoMS4wIC0gKGRvdWJsZSlyYy0+
YWx0X2N1cnZlX2JvbnVzX2JpYXMgLyAxMDAuMCkgKyB0b3RhbDIpIC8gdG90YWwyOw0KKw0KKw0K
KwkvLyBzcGVjaWFsIGluZm8gZm9yIGFsdCBjdXJ2ZTogIGJpYXMgYm9udXMgYW5kIHF1YW50aXpl
ciB0aHJlc2hvbGRzLCANCisNCisJRFBSSU5URihEUFJJTlRGX1JDLCAiYXZnIHNjYWxlZCBmcmFt
ZXNpemU6JWkiLCAoaW50KShyYy0+YXZlcmFnZV9wZnJhbWUpKTsNCisNCisJRFBSSU5URihEUFJJ
TlRGX1JDLCAiYmlhcyBib251czolaSBieXRlcyIsIChpbnQpKHJjLT5jdXJ2ZV9iaWFzX2JvbnVz
KSk7DQorDQorCWZvciAoaT0xOyBpIDw9IChpbnQpKHJjLT5hbHRfY3VydmVfaGlnaCoyKSsxOyBp
KyspDQorCXsNCisJCWRieXRlcyA9IGk7DQorCQlpZiAoZGJ5dGVzID4gcmMtPmF2ZXJhZ2VfcGZy
YW1lKQ0KKwkJew0KKwkJCWlmIChkYnl0ZXMgPj0gcmMtPmFsdF9jdXJ2ZV9oaWdoKQ0KKwkJCQlj
dXJ2ZV90ZW1wID0gZGJ5dGVzICogKHJjLT5hbHRfY3VydmVfbWlkX3F1YWwgLSByYy0+YWx0X2N1
cnZlX3F1YWxfZGV2KTsNCisJCQllbHNlDQorCQkJew0KKwkJCQlzd2l0Y2gocmMtPmFsdF9jdXJ2
ZV90eXBlKQ0KKwkJCQl7DQorCQkJCWNhc2UgMjoNCisJCQkJY3VydmVfdGVtcCA9IGRieXRlcyAq
IChyYy0+YWx0X2N1cnZlX21pZF9xdWFsIC0gcmMtPmFsdF9jdXJ2ZV9xdWFsX2RldiAqDQorCQkJ
CQlzaW4oREVHMlJBRCAqICgoZGJ5dGVzIC0gcmMtPmF2ZXJhZ2VfcGZyYW1lKSAqIDkwLjAgLyBy
Yy0+YWx0X2N1cnZlX2hpZ2hfZGlmZikpKTsNCisJCQkJCWJyZWFrOw0KKwkJCQljYXNlIDE6DQor
CQkJCWN1cnZlX3RlbXAgPSBkYnl0ZXMgKiAocmMtPmFsdF9jdXJ2ZV9taWRfcXVhbCAtIHJjLT5h
bHRfY3VydmVfcXVhbF9kZXYgKg0KKwkJCQkJKGRieXRlcyAtIHJjLT5hdmVyYWdlX3BmcmFtZSkg
LyByYy0+YWx0X2N1cnZlX2hpZ2hfZGlmZik7DQorCQkJCQlicmVhazsNCisJCQkJY2FzZSAwOg0K
KwkJCQljdXJ2ZV90ZW1wID0gZGJ5dGVzICogKHJjLT5hbHRfY3VydmVfbWlkX3F1YWwgLSByYy0+
YWx0X2N1cnZlX3F1YWxfZGV2ICoNCisJCQkJCSgxLjAgLSBjb3MoREVHMlJBRCAqICgoZGJ5dGVz
IC0gcmMtPmF2ZXJhZ2VfcGZyYW1lKSAqIDkwLjAgLyByYy0+YWx0X2N1cnZlX2hpZ2hfZGlmZikp
KSk7DQorCQkJCX0NCisJCQl9DQorCQl9DQorCQllbHNlDQorCQl7DQorCQkJaWYgKGRieXRlcyA8
PSByYy0+YWx0X2N1cnZlX2xvdykNCisJCQkJY3VydmVfdGVtcCA9IGRieXRlczsNCisJCQllbHNl
DQorCQkJew0KKwkJCQlzd2l0Y2gocmMtPmFsdF9jdXJ2ZV90eXBlKQ0KKwkJCQl7DQorCQkJCWNh
c2UgMjoNCisJCQkJY3VydmVfdGVtcCA9IGRieXRlcyAqIChyYy0+YWx0X2N1cnZlX21pZF9xdWFs
IC0gcmMtPmFsdF9jdXJ2ZV9xdWFsX2RldiAqDQorCQkJCQlzaW4oREVHMlJBRCAqICgoZGJ5dGVz
IC0gcmMtPmF2ZXJhZ2VfcGZyYW1lKSAqIDkwLjAgLyByYy0+YWx0X2N1cnZlX2xvd19kaWZmKSkp
Ow0KKwkJCQkJYnJlYWs7DQorCQkJCWNhc2UgMToNCisJCQkJY3VydmVfdGVtcCA9IGRieXRlcyAq
IChyYy0+YWx0X2N1cnZlX21pZF9xdWFsIC0gcmMtPmFsdF9jdXJ2ZV9xdWFsX2RldiAqDQorCQkJ
CQkoZGJ5dGVzIC0gcmMtPmF2ZXJhZ2VfcGZyYW1lKSAvIHJjLT5hbHRfY3VydmVfbG93X2RpZmYp
Ow0KKwkJCQkJYnJlYWs7DQorCQkJCWNhc2UgMDoNCisJCQkJY3VydmVfdGVtcCA9IGRieXRlcyAq
IChyYy0+YWx0X2N1cnZlX21pZF9xdWFsICsgcmMtPmFsdF9jdXJ2ZV9xdWFsX2RldiAqDQorCQkJ
CQkoMS4wIC0gY29zKERFRzJSQUQgKiAoKGRieXRlcyAtIHJjLT5hdmVyYWdlX3BmcmFtZSkgKiA5
MC4wIC8gcmMtPmFsdF9jdXJ2ZV9sb3dfZGlmZikpKSk7DQorCQkJCX0NCisJCQl9DQorCQl9DQor
DQorCQlpZiAocmMtPm1vdmllX2N1cnZlID4gMS4wKQ0KKwkJCWRieXRlcyAqPSByYy0+bW92aWVf
Y3VydmU7DQorDQorCQluZXdxdWFudCA9IChpbnQpKGRieXRlcyAqIDIuMCAvIChjdXJ2ZV90ZW1w
ICogcmMtPmN1cnZlX2NvbXBfc2NhbGUgKyByYy0+Y3VydmVfYmlhc19ib251cykpOw0KKwkJaWYg
KG5ld3F1YW50ID4gMSkNCisJCXsNCisJCQlpZiAobmV3cXVhbnQgIT0gb2xkcXVhbnQpDQorCQkJ
ew0KKwkJCQlvbGRxdWFudCA9IG5ld3F1YW50Ow0KKwkJCQlwZXJjZW50ID0gKGludCkoKGkgLSBy
Yy0+YXZlcmFnZV9wZnJhbWUpICogMTAwLjAgLyByYy0+YXZlcmFnZV9wZnJhbWUpOw0KKwkJCQlE
UFJJTlRGKERQUklOVEZfUkMsICJxdWFudDolaSB0aHJlc2hvbGQgYXQgJWkgOiAlaSBwZXJjZW50
IiwgbmV3cXVhbnQsIGksIHBlcmNlbnQpOw0KKwkJCX0NCisJCX0NCisJfQ0KKw0KKwlyZXR1cm4g
MDsNCiB9DQogDQorDQorDQorLyogaW5pdCBleHRlcm5hbCAycGFzcyBjdXJ2ZSAqLw0KKw0KK2lu
dCBSYXRlQ29udHJvbF9pbml0X2V4dGVybmFsKFJhdGVDb250cm9sICogcmMpDQorew0KKwlpbnQJ
ZnJhbWVzID0gMCwgYmZyYW1lcyA9IDAsIHBmcmFtZXMgPSAwLCBjcmVkaXRzX2ZyYW1lcyA9IDAs
IGlfZnJhbWVzID0gMCwgcmVjbWluYnNpemUgPSAwLCByZWNtaW5wc2l6ZSA9IDAsIHJlY21pbmlz
aXplID0gMDsNCisJX19pbnQ2NCBiZnJhbWVfdG90YWxfZXh0ID0gMCwgcGZyYW1lX3RvdGFsX2V4
dCA9IDAsIHBmcmFtZV90b3RhbCA9IDAsIGJmcmFtZV90b3RhbCA9IDAsIGlfdG90YWwgPSAwLCBp
X3RvdGFsX2V4dCA9IDAsIGlfYm9vc3RfdG90YWwgPSAwLCBzdGFydCA9IDAsIGVuZCA9IDAsIHN0
YXJ0X2N1cnZlZCA9IDAsIGVuZF9jdXJ2ZWQgPSAwOw0KKwlfX2ludDY0IGRlc2lyZWQgPSAoX19p
bnQ2NClyYy0+ZGVzaXJlZF9zaXplICogMTAyNDsNCisNCisJZG91YmxlIHRvdGFsMSA9IDAuMDsN
CisJZG91YmxlIHRvdGFsMiA9IDAuMDsNCisJZG91YmxlIGRieXRlcywgZGJ5dGVzMjsNCisNCisJ
aW50IGk7DQorDQorCWZvciAoaSA9IDA7IGkgPCByYy0+bm5zX2ZyYW1lczsgaSsrKQ0KKwl7DQor
CQljb25zdCBOTlNUQVRTICogbm5zMSA9ICZyYy0+bm5zMVtpXTsNCisJCWNvbnN0IE5OU1RBVFMg
KiBubnMyID0gJnJjLT5ubnMyW2ldOw0KKw0KKwkJaWYgKCFSYXRlQ29udHJvbF9pbl9jcmVkaXRz
KHJjLCBpKSkNCisJCXsNCisJCQlpZiAobm5zMS0+cXVhbnQgJiBOTlNUQVRTX0tFWUZSQU1FKQ0K
KwkJCXsNCisJCQkJaV90b3RhbCArPSBubnMyLT5ieXRlczsNCisJCQkJaV9ib29zdF90b3RhbCAr
PSBubnMyLT5ieXRlcyAqIHJjLT5rZXlmcmFtZV9ib29zdCAvIDEwMDsNCisJCQkJcmMtPmtleWZy
YW1lX2xvY2F0aW9uc1tpX2ZyYW1lc10gPSBpOw0KKwkJCQkrK2lfZnJhbWVzOw0KKwkJCX0NCisJ
CQllbHNlDQorCQkJew0KKwkJCQlpZiAobm5zMS0+ZGRfdiAmIE5OU1RBVFNfQkZSQU1FKQ0KKwkJ
CQl7DQorCQkJCQliZnJhbWVfdG90YWwgKz0gbm5zMS0+Ynl0ZXM7DQorCQkJCQliZnJhbWVfdG90
YWxfZXh0ICs9IG5uczItPmJ5dGVzOw0KKwkJCQkJYmZyYW1lcysrOw0KKwkJCQl9DQorCQkJCWVs
c2UNCisJCQkJew0KKwkJCQkJcGZyYW1lX3RvdGFsICs9IG5uczEtPmJ5dGVzOw0KKwkJCQkJcGZy
YW1lX3RvdGFsX2V4dCArPSBubnMyLT5ieXRlczsNCisJCQkJCXBmcmFtZXMrKzsNCisJCQkJfQ0K
KwkJCX0NCisJCX0NCisJCWVsc2UNCisJCQkrK2NyZWRpdHNfZnJhbWVzOw0KKw0KKwkJaWYgKG5u
czEtPnF1YW50ICYgTk5TVEFUU19LRVlGUkFNRSkNCisJCXsNCisJCQkvLyB0aGlzIHRlc3QgbmVl
ZHMgdG8gYmUgY29ycmVjdGVkLi4NCisJCQlpZiAobm5zMS0+a2JsayArIG5uczEtPm1ibGsgPT0g
MCkNCisJCQkJcmVjbWluaXNpemUgPSBubnMxLT5ieXRlczsNCisJCX0NCisJCWVsc2UgaWYgKG5u
czEtPmRkX3YgJiBOTlNUQVRTX0JGUkFNRSkNCisJCXsNCisJCQlpZiAobm5zMS0+a2JsayArIG5u
czEtPm1ibGsgPT0gMCkNCisJCQkJcmVjbWluYnNpemUgPSBubnMxLT5ieXRlczsNCisJCX0NCisJ
CWVsc2UNCisJCXsNCisJCQlpZiAobm5zMS0+a2JsayArIG5uczEtPm1ibGsgPT0gMCkNCisJCQkJ
cmVjbWlucHNpemUgPSBubnMxLT5ieXRlczsNCisJCX0NCisJfQ0KKw0KKwkvKkRQUklOVEYoRFBS
SU5URl9SQywgImJmcmFtZXM9JWksIGJmcmFtZV90b3RhbF9leHQ9JWksIHBmcmFtZXM9JWksIHBm
cmFtZV90b3RhbF9leHQ9JWksIHJjLT5tb3ZpZV9jdXJ2ZT0laSIsDQorCQliZnJhbWVzLA0KKwkJ
YmZyYW1lX3RvdGFsX2V4dCwNCisJCXBmcmFtZXMsDQorCQlwZnJhbWVfdG90YWxfZXh0LA0KKwkJ
cmMtPm1vdmllX2N1cnZlKTsqLyAgDQorDQorDQorCXJjLT5rZXlmcmFtZV9sb2NhdGlvbnNbaV9m
cmFtZXNdID0gaTsJLyogaHVoPyAqLw0KKw0KKwlyYy0+bW92aWVfY3VydmUgPSAoKGRvdWJsZSko
YmZyYW1lX3RvdGFsX2V4dCArIHBmcmFtZV90b3RhbF9leHQgKyBpX2Jvb3N0X3RvdGFsKSAvDQor
CQkoYmZyYW1lX3RvdGFsX2V4dCArIHBmcmFtZV90b3RhbF9leHQpKTsNCisNCisJaWYgKGJmcmFt
ZXMpDQorCQlyYy0+YXZlcmFnZV9iZnJhbWUgPSAoZG91YmxlKWJmcmFtZV90b3RhbF9leHQgLyBi
ZnJhbWVzIC8gcmMtPm1vdmllX2N1cnZlOw0KKw0KKwlpZiAocGZyYW1lcykNCisJCXJjLT5hdmVy
YWdlX3BmcmFtZSA9IChkb3VibGUpcGZyYW1lX3RvdGFsX2V4dCAvIHBmcmFtZXMgLyByYy0+bW92
aWVfY3VydmU7DQorCWVsc2UNCisJCWlmIChiZnJhbWVzKQ0KKwkJCXJjLT5hdmVyYWdlX3BmcmFt
ZSA9IHJjLT5hdmVyYWdlX2JmcmFtZTsgIC8vIGItZnJhbWUgcGFja2VkIGJpdHN0cmVhbSBmaXgN
CisJCWVsc2UNCisJCXsNCisJCQlEUFJJTlRGKERQUklOVEZfUkMsIkVSUk9SOiAgTm8gcC1mcmFt
ZXMgb3IgYi1mcmFtZXMgd2VyZSBwcmVzZW50IGluIHRoZSAxc3QgcGFzcy4gIFJhdGUgY29udHJv
bCBjYW5ub3QgZnVuY3Rpb24gcHJvcGVybHkhIik7DQorCQkJcmV0dXJuIC0xOw0KKwkJfQ0KKw0K
Kw0KKw0KKwkvLyBwZXJmb3JtIHByZXBhc3MgdG8gY29tcGVuc2F0ZSBmb3Igb3Zlci91bmRlcnNp
emluZw0KKwlmcmFtZXMgPSAwOw0KKw0KKwlpZiAocmMtPnVzZV9hbHRfY3VydmUpDQorCXsNCisJ
CXJjLT5hbHRfY3VydmVfbG93ID0gcmMtPmF2ZXJhZ2VfcGZyYW1lIC0gcmMtPmF2ZXJhZ2VfcGZy
YW1lICogKGRvdWJsZSlyYy0+YWx0X2N1cnZlX2xvd19kaXN0IC8gMTAwLjA7DQorCQlyYy0+YWx0
X2N1cnZlX2xvd19kaWZmID0gcmMtPmF2ZXJhZ2VfcGZyYW1lIC0gcmMtPmFsdF9jdXJ2ZV9sb3c7
DQorCQlyYy0+YWx0X2N1cnZlX2hpZ2ggPSByYy0+YXZlcmFnZV9wZnJhbWUgKyByYy0+YXZlcmFn
ZV9wZnJhbWUgKiAoZG91YmxlKXJjLT5hbHRfY3VydmVfaGlnaF9kaXN0IC8gMTAwLjA7DQorCQly
Yy0+YWx0X2N1cnZlX2hpZ2hfZGlmZiA9IHJjLT5hbHRfY3VydmVfaGlnaCAtIHJjLT5hdmVyYWdl
X3BmcmFtZTsNCisJCWlmIChyYy0+YWx0X2N1cnZlX3VzZV9hdXRvKQ0KKwkJew0KKwkJCWlmIChi
ZnJhbWVfdG90YWwgKyBwZnJhbWVfdG90YWwgPiBiZnJhbWVfdG90YWxfZXh0ICsgcGZyYW1lX3Rv
dGFsX2V4dCkNCisJCQl7DQorCQkJCXJjLT5hbHRfY3VydmVfbWluX3JlbF9xdWFsID0gKGludCko
MTAwLjAgLSAoMTAwLjAgLSAxMDAuMCAvDQorCQkJCQkoKGRvdWJsZSkoYmZyYW1lX3RvdGFsICsg
cGZyYW1lX3RvdGFsKSAvIChkb3VibGUpKGJmcmFtZV90b3RhbF9leHQgKyBwZnJhbWVfdG90YWxf
ZXh0KSkpICoNCisJCQkJCShkb3VibGUpcmMtPmFsdF9jdXJ2ZV9hdXRvX3N0ciAvIDEwMC4wKTsN
CisNCisJCQkJaWYgKHJjLT5hbHRfY3VydmVfbWluX3JlbF9xdWFsIDwgMjApDQorCQkJCQlyYy0+
YWx0X2N1cnZlX21pbl9yZWxfcXVhbCA9IDIwOw0KKwkJCX0NCisJCQllbHNlDQorCQkJCXJjLT5h
bHRfY3VydmVfbWluX3JlbF9xdWFsID0gMTAwOw0KKwkJfQ0KKwkJcmMtPmFsdF9jdXJ2ZV9taWRf
cXVhbCA9ICgxLjAgKyAoZG91YmxlKXJjLT5hbHRfY3VydmVfbWluX3JlbF9xdWFsIC8gMTAwLjAp
IC8gMi4wOw0KKwkJcmMtPmFsdF9jdXJ2ZV9xdWFsX2RldiA9IDEuMCAtIHJjLT5hbHRfY3VydmVf
bWlkX3F1YWw7DQorCQlpZiAocmMtPmFsdF9jdXJ2ZV9sb3dfZGlzdCA+IDEwMCkNCisJCXsNCisJ
CQlzd2l0Y2gocmMtPmFsdF9jdXJ2ZV90eXBlKQ0KKwkJCXsNCisJCQljYXNlIDI6IC8vIFNpbmUg
Q3VydmUgKGhpZ2ggYWdncmVzc2l2ZW5lc3MpDQorCQkJCXJjLT5hbHRfY3VydmVfcXVhbF9kZXYg
Kj0gMi4wIC8gKDEuMCArIA0KKwkJCQkJc2luKERFRzJSQUQgKiAocmMtPmF2ZXJhZ2VfcGZyYW1l
ICogOTAuMCAvIHJjLT5hbHRfY3VydmVfbG93X2RpZmYpKSk7DQorCQkJCXJjLT5hbHRfY3VydmVf
bWlkX3F1YWwgPSAxLjAgLSByYy0+YWx0X2N1cnZlX3F1YWxfZGV2ICoNCisJCQkJCXNpbihERUcy
UkFEICogKHJjLT5hdmVyYWdlX3BmcmFtZSAqIDkwLjAgLyByYy0+YWx0X2N1cnZlX2xvd19kaWZm
KSk7DQorCQkJCWJyZWFrOw0KKwkJCWNhc2UgMTogLy8gTGluZWFyIChtZWRpdW0gYWdncmVzc2l2
ZW5lc3MpDQorCQkJCXJjLT5hbHRfY3VydmVfcXVhbF9kZXYgKj0gMi4wIC8gKDEuMCArDQorCQkJ
CQlyYy0+YXZlcmFnZV9wZnJhbWUgLyByYy0+YWx0X2N1cnZlX2xvd19kaWZmKTsNCisJCQkJcmMt
PmFsdF9jdXJ2ZV9taWRfcXVhbCA9IDEuMCAtIHJjLT5hbHRfY3VydmVfcXVhbF9kZXYgKg0KKwkJ
CQkJcmMtPmF2ZXJhZ2VfcGZyYW1lIC8gcmMtPmFsdF9jdXJ2ZV9sb3dfZGlmZjsNCisJCQkJYnJl
YWs7DQorCQkJY2FzZSAwOiAvLyBDb3NpbmUgQ3VydmUgKGxvdyBhZ2dyZXNzaXZlbmVzcykNCisJ
CQkJcmMtPmFsdF9jdXJ2ZV9xdWFsX2RldiAqPSAyLjAgLyAoMS4wICsgDQorCQkJCQkoMS4wIC0g
Y29zKERFRzJSQUQgKiAocmMtPmF2ZXJhZ2VfcGZyYW1lICogOTAuMCAvIHJjLT5hbHRfY3VydmVf
bG93X2RpZmYpKSkpOw0KKwkJCQlyYy0+YWx0X2N1cnZlX21pZF9xdWFsID0gMS4wIC0gcmMtPmFs
dF9jdXJ2ZV9xdWFsX2RldiAqDQorCQkJCQkoMS4wIC0gY29zKERFRzJSQUQgKiAocmMtPmF2ZXJh
Z2VfcGZyYW1lICogOTAuMCAvIHJjLT5hbHRfY3VydmVfbG93X2RpZmYpKSk7DQorCQkJfQ0KKwkJ
fQ0KKwl9DQorDQorCWZvciAoaSA9IDA7IGkgPCByYy0+bm5zX2ZyYW1lczsgaSsrKQ0KKwl7DQor
CQljb25zdCBOTlNUQVRTICogbm5zMSA9ICZyYy0+bm5zMVtpXTsNCisJCWNvbnN0IE5OU1RBVFMg
KiBubnMyID0gJnJjLT5ubnMyW2ldOw0KKw0KKwkJaWYgKGkgPT0gMCkNCisJCXsNCisJCQlyYy0+
bWluYnNpemUgPSAobm5zMS0+a2JsayArIDg4KSAvIDg7DQorCQkJcmMtPm1pbnBzaXplID0gKG5u
czEtPmtibGsgKyA4OCkgLyA4Ow0KKwkJCXJjLT5taW5pc2l6ZSA9ICgobm5zMS0+a2JsayAqIDIy
KSArIDI0MCkgLyA4Ow0KKwkJCS8qIERQUklOVEYoRFBSSU5URl9SQywgInJjLT5taW5pc2l6ZSA9
ICVpIGluaXQiLCByYy0+bWluaXNpemUpOyAqLw0KKwkJCWlmIChyZWNtaW5ic2l6ZSA+IHJjLT5t
aW5ic2l6ZSkNCisJCQkJcmMtPm1pbmJzaXplID0gcmVjbWluYnNpemU7DQorCQkJaWYgKHJlY21p
bnBzaXplID4gcmMtPm1pbnBzaXplKQ0KKwkJCQlyYy0+bWlucHNpemUgPSByZWNtaW5wc2l6ZTsN
CisJCQlpZiAocmVjbWluaXNpemUgPiByYy0+bWluaXNpemUpDQorCQkJCXJjLT5taW5pc2l6ZSA9
IHJlY21pbmlzaXplOw0KKwkJfQ0KKw0KKwkJaWYgKCFSYXRlQ29udHJvbF9pbl9jcmVkaXRzKHJj
LCBpKSAmJiAhKG5uczEtPnF1YW50ICYgTk5TVEFUU19LRVlGUkFNRSkpDQorCQl7DQorCQkJZGJ5
dGVzID0gbm5zMi0+Ynl0ZXMgLyByYy0+bW92aWVfY3VydmU7DQorCQkJdG90YWwxICs9IGRieXRl
czsNCisNCisJCQlpZiAobm5zMS0+ZGRfdiAmIE5OU1RBVFNfQkZSQU1FKQ0KKwkJCQlkYnl0ZXMg
Kj0gcmMtPmF2ZXJhZ2VfcGZyYW1lIC8gcmMtPmF2ZXJhZ2VfYmZyYW1lOw0KKw0KKwkJCWlmIChy
Yy0+dXNlX2FsdF9jdXJ2ZSkNCisJCQl7DQorCQkJCWlmIChkYnl0ZXMgPiByYy0+YXZlcmFnZV9w
ZnJhbWUpDQorCQkJCXsNCisJCQkJCWlmIChkYnl0ZXMgPj0gcmMtPmFsdF9jdXJ2ZV9oaWdoKQ0K
KwkJCQkJCWRieXRlczIgPSBkYnl0ZXMgKiAocmMtPmFsdF9jdXJ2ZV9taWRfcXVhbCAtIHJjLT5h
bHRfY3VydmVfcXVhbF9kZXYpOw0KKwkJCQkJZWxzZQ0KKwkJCQkJew0KKwkJCQkJCXN3aXRjaChy
Yy0+YWx0X2N1cnZlX3R5cGUpDQorCQkJCQkJew0KKwkJCQkJCWNhc2UgMjoNCisJCQkJCQlkYnl0
ZXMyID0gZGJ5dGVzICogKHJjLT5hbHRfY3VydmVfbWlkX3F1YWwgLSByYy0+YWx0X2N1cnZlX3F1
YWxfZGV2ICoNCisJCQkJCQkJc2luKERFRzJSQUQgKiAoKGRieXRlcyAtIHJjLT5hdmVyYWdlX3Bm
cmFtZSkgKiA5MC4wIC8gcmMtPmFsdF9jdXJ2ZV9oaWdoX2RpZmYpKSk7DQorCQkJCQkJCWJyZWFr
Ow0KKwkJCQkJCWNhc2UgMToNCisJCQkJCQlkYnl0ZXMyID0gZGJ5dGVzICogKHJjLT5hbHRfY3Vy
dmVfbWlkX3F1YWwgLSByYy0+YWx0X2N1cnZlX3F1YWxfZGV2ICoNCisJCQkJCQkJKGRieXRlcyAt
IHJjLT5hdmVyYWdlX3BmcmFtZSkgLyByYy0+YWx0X2N1cnZlX2hpZ2hfZGlmZik7DQorCQkJCQkJ
CWJyZWFrOw0KKwkJCQkJCWNhc2UgMDoNCisJCQkJCQlkYnl0ZXMyID0gZGJ5dGVzICogKHJjLT5h
bHRfY3VydmVfbWlkX3F1YWwgLSByYy0+YWx0X2N1cnZlX3F1YWxfZGV2ICoNCisJCQkJCQkJKDEu
MCAtIGNvcyhERUcyUkFEICogKChkYnl0ZXMgLSByYy0+YXZlcmFnZV9wZnJhbWUpICogOTAuMCAv
IHJjLT5hbHRfY3VydmVfaGlnaF9kaWZmKSkpKTsNCisJCQkJCQl9DQorCQkJCQl9DQorCQkJCX0N
CisJCQkJZWxzZQ0KKwkJCQl7DQorCQkJCQlpZiAoZGJ5dGVzIDw9IHJjLT5hbHRfY3VydmVfbG93
KQ0KKwkJCQkJCWRieXRlczIgPSBkYnl0ZXM7DQorCQkJCQllbHNlDQorCQkJCQl7DQorCQkJCQkJ
c3dpdGNoKHJjLT5hbHRfY3VydmVfdHlwZSkNCisJCQkJCQl7DQorCQkJCQkJY2FzZSAyOg0KKwkJ
CQkJCWRieXRlczIgPSBkYnl0ZXMgKiAocmMtPmFsdF9jdXJ2ZV9taWRfcXVhbCAtIHJjLT5hbHRf
Y3VydmVfcXVhbF9kZXYgKg0KKwkJCQkJCQlzaW4oREVHMlJBRCAqICgoZGJ5dGVzIC0gcmMtPmF2
ZXJhZ2VfcGZyYW1lKSAqIDkwLjAgLyByYy0+YWx0X2N1cnZlX2xvd19kaWZmKSkpOw0KKwkJCQkJ
CQlicmVhazsNCisJCQkJCQljYXNlIDE6DQorCQkJCQkJZGJ5dGVzMiA9IGRieXRlcyAqIChyYy0+
YWx0X2N1cnZlX21pZF9xdWFsIC0gcmMtPmFsdF9jdXJ2ZV9xdWFsX2RldiAqDQorCQkJCQkJCShk
Ynl0ZXMgLSByYy0+YXZlcmFnZV9wZnJhbWUpIC8gcmMtPmFsdF9jdXJ2ZV9sb3dfZGlmZik7DQor
CQkJCQkJCWJyZWFrOw0KKwkJCQkJCWNhc2UgMDoNCisJCQkJCQlkYnl0ZXMyID0gZGJ5dGVzICog
KHJjLT5hbHRfY3VydmVfbWlkX3F1YWwgKyByYy0+YWx0X2N1cnZlX3F1YWxfZGV2ICoNCisJCQkJ
CQkJKDEuMCAtIGNvcyhERUcyUkFEICogKChkYnl0ZXMgLSByYy0+YXZlcmFnZV9wZnJhbWUpICog
OTAuMCAvIHJjLT5hbHRfY3VydmVfbG93X2RpZmYpKSkpOw0KKwkJCQkJCX0NCisJCQkJCX0NCisJ
CQkJfQ0KKwkJCX0NCisJCQllbHNlDQorCQkJew0KKwkJCQlpZiAoZGJ5dGVzID4gcmMtPmF2ZXJh
Z2VfcGZyYW1lKQ0KKwkJCQl7DQorCQkJCQlkYnl0ZXMyID0gKChkb3VibGUpZGJ5dGVzICsgKHJj
LT5hdmVyYWdlX3BmcmFtZSAtIGRieXRlcykgKg0KKwkJCQkJCXJjLT5jdXJ2ZV9jb21wcmVzc2lv
bl9oaWdoIC8gMTAwLjApOw0KKwkJCQl9DQorCQkJCWVsc2UNCisJCQkJew0KKwkJCQkJZGJ5dGVz
MiA9ICgoZG91YmxlKWRieXRlcyArIChyYy0+YXZlcmFnZV9wZnJhbWUgLSBkYnl0ZXMpICoNCisJ
CQkJCQlyYy0+Y3VydmVfY29tcHJlc3Npb25fbG93IC8gMTAwLjApOw0KKwkJCQl9DQorCQkJfQ0K
Kw0KKwkJCWlmIChubnMxLT5kZF92ICYgTk5TVEFUU19CRlJBTUUpDQorCQkJew0KKwkJCQlkYnl0
ZXMyICo9IHJjLT5hdmVyYWdlX2JmcmFtZSAvIHJjLT5hdmVyYWdlX3BmcmFtZTsNCisJCQkJaWYg
KGRieXRlczIgPCByYy0+bWluYnNpemUpDQorCQkJCQlkYnl0ZXMyID0gcmMtPm1pbmJzaXplOw0K
KwkJCX0NCisJCQllbHNlDQorCQkJew0KKwkJCQlpZiAoZGJ5dGVzMiA8IHJjLT5taW5wc2l6ZSkN
CisJCQkJCWRieXRlczIgPSByYy0+bWlucHNpemU7DQorCQkJfQ0KKw0KKwkJCXRvdGFsMiArPSBk
Ynl0ZXMyOw0KKwkJfQ0KKwl9DQorDQorCXJjLT5jdXJ2ZV9jb21wX3NjYWxlID0gdG90YWwxIC8g
dG90YWwyOw0KKw0KKwlpZiAoIXJjLT51c2VfYWx0X2N1cnZlKQ0KKwl7DQorCQlpbnQgYXN5bW1l
dHJpY19hdmVyYWdlX2ZyYW1lOw0KKw0KKwkJYXN5bW1ldHJpY19hdmVyYWdlX2ZyYW1lID0gKGlu
dCkocmMtPmF2ZXJhZ2VfcGZyYW1lICogcmMtPmN1cnZlX2NvbXBfc2NhbGUpOw0KKwkJRFBSSU5U
RihEUFJJTlRGX1JDLCAibWlkZGxlIGZyYW1lIHNpemUgZm9yIGFzeW1tZXRyaWMgY3VydmUgY29t
cHJlc3Npb246ICVpIiwgYXN5bW1ldHJpY19hdmVyYWdlX2ZyYW1lKTsNCisJfQ0KKw0KKwlpZiAo
cmMtPnVzZV9hbHRfY3VydmUpDQorCQlSYXRlQ29udHJvbF9pbml0X2FsdGN1cnZlKHJjLCB0b3Rh
bDEsIHRvdGFsMiwgY3JlZGl0c19mcmFtZXMsIGlfZnJhbWVzKTsNCisNCisJcmV0dXJuIDA7DQor
fQ0KKw0KKw0KKw0KKy8qIGluaXQgaW50ZXJuYWwgMnBhc3MgY3VydmUgKi8NCisNCitpbnQgUmF0
ZUNvbnRyb2xfaW5pdF9pbnRlcm5hbChSYXRlQ29udHJvbCAqIHJjKQ0KK3sNCisJaW50CWZyYW1l
cyA9IDAsIGJmcmFtZXMgPSAwLCBwZnJhbWVzID0gMCwgY3JlZGl0c19mcmFtZXMgPSAwLCBpX2Zy
YW1lcyA9IDAsIHJlY21pbmJzaXplID0gMCwgcmVjbWlucHNpemUgPSAwLCByZWNtaW5pc2l6ZSA9
IDA7DQorCV9faW50NjQgYmZyYW1lX3RvdGFsX2V4dCA9IDAsIHBmcmFtZV90b3RhbF9leHQgPSAw
LCBwZnJhbWVfdG90YWwgPSAwLCBiZnJhbWVfdG90YWwgPSAwLCBpX3RvdGFsID0gMCwgaV90b3Rh
bF9leHQgPSAwLCBpX2Jvb3N0X3RvdGFsID0gMCwgc3RhcnQgPSAwLCBlbmQgPSAwLCBzdGFydF9j
dXJ2ZWQgPSAwLCBlbmRfY3VydmVkID0gMDsNCisJX19pbnQ2NCBkZXNpcmVkID0gKF9faW50NjQp
cmMtPmRlc2lyZWRfc2l6ZSAqIDEwMjQ7DQorDQorCWRvdWJsZSB0b3RhbDEgPSAwLjA7DQorCWRv
dWJsZSB0b3RhbDIgPSAwLjA7DQorCWRvdWJsZSBkYnl0ZXMsIGRieXRlczI7DQorDQorCWludCBp
Ow0KKw0KKw0KKwlmb3IgKGkgPSAwOyBpIDwgcmMtPm5uc19mcmFtZXM7IGkrKykNCisJew0KKwkJ
Y29uc3QgTk5TVEFUUyAqIG5uczEgPSAmcmMtPm5uczFbaV07DQorDQorCQlpZiAoUmF0ZUNvbnRy
b2xfaW5fY3JlZGl0cyhyYywgaSkgPT0gUkNfQ1JFRElUU19TVEFSVCkNCisJCXsNCisJCQlzdGFy
dCArPSBubnMxLT5ieXRlczsNCisJCQkrK2NyZWRpdHNfZnJhbWVzOw0KKwkJfQ0KKwkJZWxzZSBp
ZiAoUmF0ZUNvbnRyb2xfaW5fY3JlZGl0cyhyYywgaSkgPT0gUkNfQ1JFRElUU19FTkQpDQorCQl7
DQorCQkJZW5kICs9IG5uczEtPmJ5dGVzOw0KKwkJCSsrY3JlZGl0c19mcmFtZXM7DQorCQl9DQor
CQllbHNlIGlmIChubnMxLT5xdWFudCAmIE5OU1RBVFNfS0VZRlJBTUUpDQorCQl7DQorCQkJaV90
b3RhbCArPSBubnMxLT5ieXRlcyArIG5uczEtPmJ5dGVzICogcmMtPmtleWZyYW1lX2Jvb3N0IC8g
MTAwOw0KKwkJCXJjLT5rZXlmcmFtZV9sb2NhdGlvbnNbaV9mcmFtZXNdID0gaTsNCisJCQkrK2lf
ZnJhbWVzOw0KKwkJfQ0KKwkJZWxzZQ0KKwkJew0KKwkJCWlmIChubnMxLT5kZF92ICYgTk5TVEFU
U19CRlJBTUUpDQorCQkJew0KKwkJCQliZnJhbWVfdG90YWwgKz0gbm5zMS0+Ynl0ZXM7DQorCQkJ
CWJmcmFtZXMrKzsNCisJCQl9DQorCQkJZWxzZQ0KKwkJCXsNCisJCQkJcGZyYW1lX3RvdGFsICs9
IG5uczEtPmJ5dGVzOw0KKwkJCQlwZnJhbWVzKys7DQorCQkJfQ0KKwkJfQ0KKw0KKwkJaWYgKG5u
czEtPnF1YW50ICYgTk5TVEFUU19LRVlGUkFNRSkNCisJCXsNCisJCQkvLyB0aGlzIHRlc3QgbmVl
ZHMgdG8gYmUgY29ycmVjdGVkLi4NCisJCQlpZiAoIShubnMxLT5rYmxrICsgbm5zMS0+bWJsaykp
DQorCQkJCXJlY21pbmlzaXplID0gbm5zMS0+Ynl0ZXM7DQorCQl9DQorCQllbHNlIGlmIChubnMx
LT5kZF92ICYgTk5TVEFUU19CRlJBTUUpDQorCQl7DQorCQkJaWYgKCEobm5zMS0+a2JsayArIG5u
czEtPm1ibGspKQ0KKwkJCQlyZWNtaW5ic2l6ZSA9IG5uczEtPmJ5dGVzOw0KKwkJfQ0KKwkJZWxz
ZQ0KKwkJew0KKwkJCWlmICghKG5uczEtPmtibGsgKyBubnMxLT5tYmxrKSkNCisJCQkJcmVjbWlu
cHNpemUgPSBubnMxLT5ieXRlczsNCisJCX0NCisJfQ0KKwlyYy0+a2V5ZnJhbWVfbG9jYXRpb25z
W2lfZnJhbWVzXSA9IGk7CS8qIGh1aCAqLw0KKw0KKw0KKwkvLyBjb21wZW5zYXRlIGZvciBhdmkg
ZnJhbWUgb3ZlcmhlYWQNCisJZGVzaXJlZCAtPSBmcmFtZXMgKiAyNDsNCisNCisJc3dpdGNoIChy
Yy0+Y3JlZGl0c19tb2RlKQ0KKwl7DQorCWNhc2UgWFZJRF9DUkVESVRTX01PREVfUkFURSA6DQor
DQorCQkvLyBjcmVkaXRzIGN1cnZlID0gKHRvdGFsIC8gZGVzaXJlZF9zaXplKSAqICgxMDAgLyBj
cmVkaXRzX3JhdGUpDQorCQlyYy0+Y3JlZGl0c19zdGFydF9jdXJ2ZSA9IHJjLT5jcmVkaXRzX2Vu
ZF9jdXJ2ZSA9DQorCQkJKChkb3VibGUpKGJmcmFtZV90b3RhbCArIHBmcmFtZV90b3RhbCArIGlf
dG90YWwgKyBzdGFydCArIGVuZCkgLyBkZXNpcmVkKSAqDQorCQkJKChkb3VibGUpMTAwIC8gcmMt
PmNyZWRpdHNfcmF0ZSk7DQorDQorCQlzdGFydF9jdXJ2ZWQgPSAoX19pbnQ2NCkoc3RhcnQgLyBy
Yy0+Y3JlZGl0c19zdGFydF9jdXJ2ZSk7DQorCQllbmRfY3VydmVkID0gKF9faW50NjQpKGVuZCAv
IHJjLT5jcmVkaXRzX2VuZF9jdXJ2ZSk7DQorDQorCQkvLyBtb3ZpZSBjdXJ2ZSA9ICh0b3RhbCAt
IGNyZWRpdHMpIC8gKGRlc2lyZWRfc2l6ZSAtIGN1cnZlZCBjcmVkaXRzKQ0KKwkJcmMtPm1vdmll
X2N1cnZlID0gKGRvdWJsZSkNCisJCQkoYmZyYW1lX3RvdGFsICsgcGZyYW1lX3RvdGFsICsgaV90
b3RhbCkgLw0KKwkJCShkZXNpcmVkIC0gc3RhcnRfY3VydmVkIC0gZW5kX2N1cnZlZCk7DQorDQor
CQlicmVhazsNCisNCisJY2FzZSBYVklEX0NSRURJVFNfTU9ERV9RVUFOVCA6DQorDQorCQkvLyBt
b3ZpZSBjdXJ2ZSA9ICh0b3RhbCAtIGNyZWRpdHMpIC8gKGRlc2lyZWRfc2l6ZSAtIGNyZWRpdHMp
DQorCQlyYy0+bW92aWVfY3VydmUgPSAoZG91YmxlKQ0KKwkJCShiZnJhbWVfdG90YWwgKyBwZnJh
bWVfdG90YWwgKyBpX3RvdGFsKSAvIChkZXNpcmVkIC0gc3RhcnQgLSBlbmQpOw0KKw0KKwkJLy8g
YWlkIHRoZSBhdmVyYWdlIGFzeW1tZXRyaWMgZnJhbWUgY2FsY3VsYXRpb24gYmVsb3cNCisJCXN0
YXJ0X2N1cnZlZCA9IHN0YXJ0Ow0KKwkJZW5kX2N1cnZlZCA9IGVuZDsNCisNCisJCWJyZWFrOw0K
Kw0KKwljYXNlIFhWSURfQ1JFRElUU19NT0RFX1NJWkUgOg0KKw0KKwkJLy8gc3RhcnQgY3VydmUg
PSAoc3RhcnQgLyBzdGFydCBkZXNpcmVkIHNpemUpDQorCQlyYy0+Y3JlZGl0c19zdGFydF9jdXJ2
ZSA9IChkb3VibGUpDQorCQkJKHN0YXJ0IC8gMTAyNCkgLyByYy0+Y3JlZGl0c19zdGFydF9zaXpl
Ow0KKw0KKwkJLy8gZW5kIGN1cnZlID0gKGVuZCAvIGVuZCBkZXNpcmVkIHNpemUpDQorCQlyYy0+
Y3JlZGl0c19lbmRfY3VydmUgPSAoZG91YmxlKQ0KKwkJCShlbmQgLyAxMDI0KSAvIHJjLT5jcmVk
aXRzX2VuZF9zaXplOw0KKw0KKwkJc3RhcnRfY3VydmVkID0gKF9faW50NjQpKHN0YXJ0IC8gcmMt
PmNyZWRpdHNfc3RhcnRfY3VydmUpOw0KKwkJZW5kX2N1cnZlZCA9IChfX2ludDY0KShlbmQgLyBy
Yy0+Y3JlZGl0c19lbmRfY3VydmUpOw0KKw0KKwkJLy8gbW92aWUgY3VydmUgPSAodG90YWwgLSBj
cmVkaXRzKSAvIChkZXNpcmVkX3NpemUgLSBjdXJ2ZWQgY3JlZGl0cykNCisJCXJjLT5tb3ZpZV9j
dXJ2ZSA9IChkb3VibGUpDQorCQkJKGJmcmFtZV90b3RhbCArIHBmcmFtZV90b3RhbCArIGlfdG90
YWwpIC8NCisJCQkoZGVzaXJlZCAtIHN0YXJ0X2N1cnZlZCAtIGVuZF9jdXJ2ZWQpOw0KKw0KKwkJ
YnJlYWs7DQorCX0NCisNCisJaWYgKGJmcmFtZXMpDQorCQlyYy0+YXZlcmFnZV9iZnJhbWUgPSAo
ZG91YmxlKWJmcmFtZV90b3RhbCAvIGJmcmFtZXMgLyByYy0+bW92aWVfY3VydmU7DQorDQorCWlm
IChwZnJhbWVzKQ0KKwkJcmMtPmF2ZXJhZ2VfcGZyYW1lID0gKGRvdWJsZSlwZnJhbWVfdG90YWwg
LyBwZnJhbWVzIC8gcmMtPm1vdmllX2N1cnZlOw0KKwllbHNlDQorCQlpZiAoYmZyYW1lcykNCisJ
CQlyYy0+YXZlcmFnZV9wZnJhbWUgPSByYy0+YXZlcmFnZV9iZnJhbWU7ICAvLyBiLWZyYW1lIHBh
Y2tlZCBiaXRzdHJlYW0gZml4DQorCQllbHNlDQorCQl7DQorCQkJRFBSSU5URihEUFJJTlRGX1JD
LCJFUlJPUjogIE5vIHAtZnJhbWVzIG9yIGItZnJhbWVzIHdlcmUgcHJlc2VudCBpbiB0aGUgMXN0
IHBhc3MuICBSYXRlIGNvbnRyb2wgY2Fubm90IGZ1bmN0aW9uIHByb3Blcmx5ISIpOw0KKwkJCXJl
dHVybiAtMTsNCisJCX0NCisNCisNCisNCisJLy8gcGVyZm9ybSBwcmVwYXNzIHRvIGNvbXBlbnNh
dGUgZm9yIG92ZXIvdW5kZXJzaXppbmcNCisNCisJaWYgKHJjLT51c2VfYWx0X2N1cnZlKQ0KKwl7
DQorCQlyYy0+YWx0X2N1cnZlX2xvdyA9IHJjLT5hdmVyYWdlX3BmcmFtZSAtIHJjLT5hdmVyYWdl
X3BmcmFtZSAqIChkb3VibGUpcmMtPmFsdF9jdXJ2ZV9sb3dfZGlzdCAvIDEwMC4wOw0KKwkJcmMt
PmFsdF9jdXJ2ZV9sb3dfZGlmZiA9IHJjLT5hdmVyYWdlX3BmcmFtZSAtIHJjLT5hbHRfY3VydmVf
bG93Ow0KKwkJcmMtPmFsdF9jdXJ2ZV9oaWdoID0gcmMtPmF2ZXJhZ2VfcGZyYW1lICsgcmMtPmF2
ZXJhZ2VfcGZyYW1lICogKGRvdWJsZSlyYy0+YWx0X2N1cnZlX2hpZ2hfZGlzdCAvIDEwMC4wOw0K
KwkJcmMtPmFsdF9jdXJ2ZV9oaWdoX2RpZmYgPSByYy0+YWx0X2N1cnZlX2hpZ2ggLSByYy0+YXZl
cmFnZV9wZnJhbWU7DQorCQlpZiAocmMtPmFsdF9jdXJ2ZV91c2VfYXV0bykNCisJCXsNCisJCQlp
ZiAocmMtPm1vdmllX2N1cnZlID4gMS4wKQ0KKwkJCXsNCisJCQkJcmMtPmFsdF9jdXJ2ZV9taW5f
cmVsX3F1YWwgPSAoaW50KSgxMDAuMCAtICgxMDAuMCAtIDEwMC4wIC8gcmMtPm1vdmllX2N1cnZl
KSAqIChkb3VibGUpcmMtPmFsdF9jdXJ2ZV9hdXRvX3N0ciAvIDEwMC4wKTsNCisJCQkJaWYgKHJj
LT5hbHRfY3VydmVfbWluX3JlbF9xdWFsIDwgMjApDQorCQkJCQlyYy0+YWx0X2N1cnZlX21pbl9y
ZWxfcXVhbCA9IDIwOw0KKwkJCX0NCisJCQllbHNlDQorCQkJCXJjLT5hbHRfY3VydmVfbWluX3Jl
bF9xdWFsID0gMTAwOw0KKwkJfQ0KKwkJcmMtPmFsdF9jdXJ2ZV9taWRfcXVhbCA9ICgxLjAgKyAo
ZG91YmxlKXJjLT5hbHRfY3VydmVfbWluX3JlbF9xdWFsIC8gMTAwLjApIC8gMi4wOw0KKwkJcmMt
PmFsdF9jdXJ2ZV9xdWFsX2RldiA9IDEuMCAtIHJjLT5hbHRfY3VydmVfbWlkX3F1YWw7DQorCQlp
ZiAocmMtPmFsdF9jdXJ2ZV9sb3dfZGlzdCA+IDEwMCkNCisJCXsNCisJCQlzd2l0Y2gocmMtPmFs
dF9jdXJ2ZV90eXBlKQ0KKwkJCXsNCisJCQljYXNlIDI6IC8vIFNpbmUgQ3VydmUgKGhpZ2ggYWdn
cmVzc2l2ZW5lc3MpDQorCQkJCXJjLT5hbHRfY3VydmVfcXVhbF9kZXYgKj0gMi4wIC8gKDEuMCAr
IA0KKwkJCQkJc2luKERFRzJSQUQgKiAocmMtPmF2ZXJhZ2VfcGZyYW1lICogOTAuMCAvIHJjLT5h
bHRfY3VydmVfbG93X2RpZmYpKSk7DQorCQkJCXJjLT5hbHRfY3VydmVfbWlkX3F1YWwgPSAxLjAg
LSByYy0+YWx0X2N1cnZlX3F1YWxfZGV2ICoNCisJCQkJCXNpbihERUcyUkFEICogKHJjLT5hdmVy
YWdlX3BmcmFtZSAqIDkwLjAgLyByYy0+YWx0X2N1cnZlX2xvd19kaWZmKSk7DQorCQkJCWJyZWFr
Ow0KKwkJCWNhc2UgMTogLy8gTGluZWFyIChtZWRpdW0gYWdncmVzc2l2ZW5lc3MpDQorCQkJCXJj
LT5hbHRfY3VydmVfcXVhbF9kZXYgKj0gMi4wIC8gKDEuMCArDQorCQkJCQlyYy0+YXZlcmFnZV9w
ZnJhbWUgLyByYy0+YWx0X2N1cnZlX2xvd19kaWZmKTsNCisJCQkJcmMtPmFsdF9jdXJ2ZV9taWRf
cXVhbCA9IDEuMCAtIHJjLT5hbHRfY3VydmVfcXVhbF9kZXYgKg0KKwkJCQkJcmMtPmF2ZXJhZ2Vf
cGZyYW1lIC8gcmMtPmFsdF9jdXJ2ZV9sb3dfZGlmZjsNCisJCQkJYnJlYWs7DQorCQkJY2FzZSAw
OiAvLyBDb3NpbmUgQ3VydmUgKGxvdyBhZ2dyZXNzaXZlbmVzcykNCisJCQkJcmMtPmFsdF9jdXJ2
ZV9xdWFsX2RldiAqPSAyLjAgLyAoMS4wICsgDQorCQkJCQkoMS4wIC0gY29zKERFRzJSQUQgKiAo
cmMtPmF2ZXJhZ2VfcGZyYW1lICogOTAuMCAvIHJjLT5hbHRfY3VydmVfbG93X2RpZmYpKSkpOw0K
KwkJCQlyYy0+YWx0X2N1cnZlX21pZF9xdWFsID0gMS4wIC0gcmMtPmFsdF9jdXJ2ZV9xdWFsX2Rl
diAqDQorCQkJCQkoMS4wIC0gY29zKERFRzJSQUQgKiAocmMtPmF2ZXJhZ2VfcGZyYW1lICogOTAu
MCAvIHJjLT5hbHRfY3VydmVfbG93X2RpZmYpKSk7DQorCQkJfQ0KKwkJfQ0KKwl9DQorDQorCWZv
ciAoaSA9IDA7IGkgPCByYy0+bm5zX2ZyYW1lczsgaSsrKQ0KKwl7DQorCQljb25zdCBOTlNUQVRT
ICogbm5zMSA9ICZyYy0+bm5zMVtpXTsNCisNCisJCWlmIChpID09IDApDQorCQl7DQorCQkJcmMt
Pm1pbmJzaXplID0gKG5uczEtPmtibGsgKyA4OCkgLyA4Ow0KKwkJCXJjLT5taW5wc2l6ZSA9IChu
bnMxLT5rYmxrICsgODgpIC8gODsNCisJCQlyYy0+bWluaXNpemUgPSAoKG5uczEtPmtibGsgKiAy
MikgKyAyNDApIC8gODsNCisJCQlpZiAocmVjbWluYnNpemUgPiByYy0+bWluYnNpemUpDQorCQkJ
CXJjLT5taW5ic2l6ZSA9IHJlY21pbmJzaXplOw0KKwkJCWlmIChyZWNtaW5wc2l6ZSA+IHJjLT5t
aW5wc2l6ZSkNCisJCQkJcmMtPm1pbnBzaXplID0gcmVjbWlucHNpemU7DQorCQkJaWYgKHJlY21p
bmlzaXplID4gcmMtPm1pbmlzaXplKQ0KKwkJCQlyYy0+bWluaXNpemUgPSByZWNtaW5pc2l6ZTsN
CisJCX0NCisNCisJCWlmICghUmF0ZUNvbnRyb2xfaW5fY3JlZGl0cyhyYywgaSkgJiYgIShubnMx
LT5xdWFudCAmIE5OU1RBVFNfS0VZRlJBTUUpKQ0KKwkJew0KKwkJCWRieXRlcyA9IG5uczEtPmJ5
dGVzIC8gcmMtPm1vdmllX2N1cnZlOw0KKwkJCXRvdGFsMSArPSBkYnl0ZXM7DQorDQorCQkJaWYg
KG5uczEtPmRkX3YgJiBOTlNUQVRTX0JGUkFNRSkNCisJCQkJZGJ5dGVzICo9IHJjLT5hdmVyYWdl
X3BmcmFtZSAvIHJjLT5hdmVyYWdlX2JmcmFtZTsNCisNCisJCQlpZiAocmMtPnVzZV9hbHRfY3Vy
dmUpDQorCQkJew0KKwkJCQlpZiAoZGJ5dGVzID4gcmMtPmF2ZXJhZ2VfcGZyYW1lKQ0KKwkJCQl7
DQorCQkJCQlpZiAoZGJ5dGVzID49IHJjLT5hbHRfY3VydmVfaGlnaCkNCisJCQkJCQlkYnl0ZXMy
ID0gZGJ5dGVzICogKHJjLT5hbHRfY3VydmVfbWlkX3F1YWwgLSByYy0+YWx0X2N1cnZlX3F1YWxf
ZGV2KTsNCisJCQkJCWVsc2UNCisJCQkJCXsNCisJCQkJCQlzd2l0Y2gocmMtPmFsdF9jdXJ2ZV90
eXBlKQ0KKwkJCQkJCXsNCisJCQkJCQljYXNlIDI6DQorCQkJCQkJZGJ5dGVzMiA9IGRieXRlcyAq
IChyYy0+YWx0X2N1cnZlX21pZF9xdWFsIC0gcmMtPmFsdF9jdXJ2ZV9xdWFsX2RldiAqDQorCQkJ
CQkJCXNpbihERUcyUkFEICogKChkYnl0ZXMgLSByYy0+YXZlcmFnZV9wZnJhbWUpICogOTAuMCAv
IHJjLT5hbHRfY3VydmVfaGlnaF9kaWZmKSkpOw0KKwkJCQkJCQlicmVhazsNCisJCQkJCQljYXNl
IDE6DQorCQkJCQkJZGJ5dGVzMiA9IGRieXRlcyAqIChyYy0+YWx0X2N1cnZlX21pZF9xdWFsIC0g
cmMtPmFsdF9jdXJ2ZV9xdWFsX2RldiAqDQorCQkJCQkJCShkYnl0ZXMgLSByYy0+YXZlcmFnZV9w
ZnJhbWUpIC8gcmMtPmFsdF9jdXJ2ZV9oaWdoX2RpZmYpOw0KKwkJCQkJCQlicmVhazsNCisJCQkJ
CQljYXNlIDA6DQorCQkJCQkJZGJ5dGVzMiA9IGRieXRlcyAqIChyYy0+YWx0X2N1cnZlX21pZF9x
dWFsIC0gcmMtPmFsdF9jdXJ2ZV9xdWFsX2RldiAqDQorCQkJCQkJCSgxLjAgLSBjb3MoREVHMlJB
RCAqICgoZGJ5dGVzIC0gcmMtPmF2ZXJhZ2VfcGZyYW1lKSAqIDkwLjAgLyByYy0+YWx0X2N1cnZl
X2hpZ2hfZGlmZikpKSk7DQorCQkJCQkJfQ0KKwkJCQkJfQ0KKwkJCQl9DQorCQkJCWVsc2UNCisJ
CQkJew0KKwkJCQkJaWYgKGRieXRlcyA8PSByYy0+YWx0X2N1cnZlX2xvdykNCisJCQkJCQlkYnl0
ZXMyID0gZGJ5dGVzOw0KKwkJCQkJZWxzZQ0KKwkJCQkJew0KKwkJCQkJCXN3aXRjaChyYy0+YWx0
X2N1cnZlX3R5cGUpDQorCQkJCQkJew0KKwkJCQkJCWNhc2UgMjoNCisJCQkJCQlkYnl0ZXMyID0g
ZGJ5dGVzICogKHJjLT5hbHRfY3VydmVfbWlkX3F1YWwgLSByYy0+YWx0X2N1cnZlX3F1YWxfZGV2
ICoNCisJCQkJCQkJc2luKERFRzJSQUQgKiAoKGRieXRlcyAtIHJjLT5hdmVyYWdlX3BmcmFtZSkg
KiA5MC4wIC8gcmMtPmFsdF9jdXJ2ZV9sb3dfZGlmZikpKTsNCisJCQkJCQkJYnJlYWs7DQorCQkJ
CQkJY2FzZSAxOg0KKwkJCQkJCWRieXRlczIgPSBkYnl0ZXMgKiAocmMtPmFsdF9jdXJ2ZV9taWRf
cXVhbCAtIHJjLT5hbHRfY3VydmVfcXVhbF9kZXYgKg0KKwkJCQkJCQkoZGJ5dGVzIC0gcmMtPmF2
ZXJhZ2VfcGZyYW1lKSAvIHJjLT5hbHRfY3VydmVfbG93X2RpZmYpOw0KKwkJCQkJCQlicmVhazsN
CisJCQkJCQljYXNlIDA6DQorCQkJCQkJZGJ5dGVzMiA9IGRieXRlcyAqIChyYy0+YWx0X2N1cnZl
X21pZF9xdWFsICsgcmMtPmFsdF9jdXJ2ZV9xdWFsX2RldiAqDQorCQkJCQkJCSgxLjAgLSBjb3Mo
REVHMlJBRCAqICgoZGJ5dGVzIC0gcmMtPmF2ZXJhZ2VfcGZyYW1lKSAqIDkwLjAgLyByYy0+YWx0
X2N1cnZlX2xvd19kaWZmKSkpKTsNCisJCQkJCQl9DQorCQkJCQl9DQorCQkJCX0NCisJCQl9DQor
CQkJZWxzZQ0KKwkJCXsNCisJCQkJaWYgKGRieXRlcyA+IHJjLT5hdmVyYWdlX3BmcmFtZSkNCisJ
CQkJew0KKwkJCQkJZGJ5dGVzMiA9ICgoZG91YmxlKWRieXRlcyArIChyYy0+YXZlcmFnZV9wZnJh
bWUgLSBkYnl0ZXMpICoNCisJCQkJCQlyYy0+Y3VydmVfY29tcHJlc3Npb25faGlnaCAvIDEwMC4w
KTsNCisJCQkJfQ0KKwkJCQllbHNlDQorCQkJCXsNCisJCQkJCWRieXRlczIgPSAoKGRvdWJsZSlk
Ynl0ZXMgKyAocmMtPmF2ZXJhZ2VfcGZyYW1lIC0gZGJ5dGVzKSAqDQorCQkJCQkJcmMtPmN1cnZl
X2NvbXByZXNzaW9uX2xvdyAvIDEwMC4wKTsNCisJCQkJfQ0KKwkJCX0NCisNCisJCQlpZiAobm5z
MS0+ZGRfdiAmIE5OU1RBVFNfQkZSQU1FKQ0KKwkJCXsNCisJCQkJZGJ5dGVzMiAqPSByYy0+YXZl
cmFnZV9iZnJhbWUgLyByYy0+YXZlcmFnZV9wZnJhbWU7DQorCQkJCWlmIChkYnl0ZXMyIDwgcmMt
Pm1pbmJzaXplKQ0KKwkJCQkJZGJ5dGVzMiA9IHJjLT5taW5ic2l6ZTsNCisJCQl9DQorCQkJZWxz
ZQ0KKwkJCXsNCisJCQkJaWYgKGRieXRlczIgPCByYy0+bWlucHNpemUpDQorCQkJCQlkYnl0ZXMy
ID0gcmMtPm1pbnBzaXplOw0KKwkJCX0NCisNCisJCQl0b3RhbDIgKz0gZGJ5dGVzMjsNCisJCX0N
CisJfQ0KKw0KKwlyYy0+Y3VydmVfY29tcF9zY2FsZSA9IHRvdGFsMSAvIHRvdGFsMjsNCisNCisJ
aWYgKCFyYy0+dXNlX2FsdF9jdXJ2ZSkNCisJew0KKwkJaW50IGFzeW1tZXRyaWNfYXZlcmFnZV9m
cmFtZTsNCisNCisJCWFzeW1tZXRyaWNfYXZlcmFnZV9mcmFtZSA9IChpbnQpKHJjLT5hdmVyYWdl
X3BmcmFtZSAqIHJjLT5jdXJ2ZV9jb21wX3NjYWxlKTsNCisJCURQUklOVEYoRFBSSU5URl9SQywg
Im1pZGRsZSBmcmFtZSBzaXplIGZvciBhc3ltbWV0cmljIGN1cnZlIGNvbXByZXNzaW9uOiAlaSIs
IGFzeW1tZXRyaWNfYXZlcmFnZV9mcmFtZSk7DQorCX0NCisNCisJaWYgKHJjLT51c2VfYWx0X2N1
cnZlKQ0KKwkJUmF0ZUNvbnRyb2xfaW5pdF9hbHRjdXJ2ZShyYywgdG90YWwxLCB0b3RhbDIsIGNy
ZWRpdHNfZnJhbWVzLCBpX2ZyYW1lcyk7DQorDQorCXJldHVybiAwOw0KK30NCisNCisNCisvKiBp
bml0IHJhdGUgY29udHJvbCAqLw0KKw0KK2ludCBSYXRlQ29udHJvbEluaXQoUmF0ZUNvbnRyb2wg
KiByYywNCisJCQkJCSBYVklEX0VOQ19QQVJBTSAqIHBhcmFtLA0KKwkJCQkJIFhWSURfRU5DX1JD
ICogcmNwYXJhbSkNCit7DQorCXJjLT5tb2RlID0gcmNwYXJhbS0+bW9kZTsNCisJcmMtPmZyYW1l
X251bSA9IDA7DQorCXJjLT50b3RhbF9zaXplID0gMDsNCisJbWVtc2V0KHJjLT5xdWFudF9jb3Vu
dCwgMCwgc2l6ZW9mKHJjLT5xdWFudF9jb3VudCkpOw0KKw0KKwlyYy0+bWluX2lxdWFudCA9IHBh
cmFtLT5taW5fcXVhbnRpemVyOw0KKwlyYy0+bWF4X2lxdWFudCA9IHBhcmFtLT5tYXhfcXVhbnRp
emVyOw0KKwlyYy0+bWluX3BxdWFudCA9IHBhcmFtLT5taW5fcXVhbnRpemVyOw0KKwlyYy0+bWF4
X3BxdWFudCA9IHBhcmFtLT5tYXhfcXVhbnRpemVyOw0KKw0KKwlyYy0+Y3JlZGl0c19zdGFydCA9
IHJjcGFyYW0tPmNyZWRpdHNfc3RhcnQ7DQorCXJjLT5jcmVkaXRzX3N0YXJ0X2JlZ2luID0gcmNw
YXJhbS0+Y3JlZGl0c19zdGFydF9iZWdpbjsNCisJcmMtPmNyZWRpdHNfc3RhcnRfZW5kID0gcmNw
YXJhbS0+Y3JlZGl0c19zdGFydF9lbmQ7DQorCXJjLT5jcmVkaXRzX2VuZCA9IHJjcGFyYW0tPmNy
ZWRpdHNfZW5kOw0KKwlyYy0+Y3JlZGl0c19lbmRfYmVnaW4gPSByY3BhcmFtLT5jcmVkaXRzX2Vu
ZF9iZWdpbjsNCisJcmMtPmNyZWRpdHNfZW5kX2VuZCA9IHJjcGFyYW0tPmNyZWRpdHNfZW5kX2Vu
ZDsNCisNCisJcmMtPmNyZWRpdHNfbW9kZSA9IHJjcGFyYW0tPmNyZWRpdHNfbW9kZTsNCisJcmMt
PmNyZWRpdHNfZ3JleXNjYWxlID0gcmNwYXJhbS0+Y3JlZGl0c19ncmV5c2NhbGU7DQorCXJjLT5j
cmVkaXRzX3JhdGUgPSByY3BhcmFtLT5jcmVkaXRzX3JhdGU7DQorCXJjLT5jcmVkaXRzX3F1YW50
X2kgPSByY3BhcmFtLT5jcmVkaXRzX3F1YW50X2k7DQorCXJjLT5jcmVkaXRzX3F1YW50X3AgPSBy
Y3BhcmFtLT5jcmVkaXRzX3F1YW50X3A7DQorDQorCXN3aXRjaCAocmMtPm1vZGUpDQorCXsNCisJ
Y2FzZSBYVklEX0ZJWEVEUVVBTlQgOg0KKwkJcmMtPmZxdWFudCA9IHJjLT5mcXVhbnRfcnVubmlu
ZyA9IHJjcGFyYW0tPmRhdGEuZml4ZWRfcXVhbnQucXVhbnQ7DQorCQlEUFJJTlRGKERQUklOVEZf
UkMsImluaXQ6WFZJRF9GSVhFRFFVQU5ULCBmcXVhbnQ9JWYiLCByYy0+ZnF1YW50KTsNCisJCWJy
ZWFrOw0KKw0KKwljYXNlIFhWSURfQ0JSIDoNCisJCVJhdGVDb250cm9sSW5pdENCUihyYywgcmNw
YXJhbS0+ZGF0YS5jYnIuYml0cmF0ZSwNCisJCQlyY3BhcmFtLT5kYXRhLmNici5yZWFjdGlvbl9k
ZWxheV9mYWN0b3IsDQorCQkJcmNwYXJhbS0+ZGF0YS5jYnIuYXZlcmFnaW5nX3BlcmlvZCwNCisJ
CQlyY3BhcmFtLT5kYXRhLmNici5idWZmZXIsDQorCQkJcGFyYW0tPmZiYXNlICogMTAwMCAvIHBh
cmFtLT5maW5jciwgDQorCQkJcGFyYW0tPm1heF9xdWFudGl6ZXIsDQorCQkJcGFyYW0tPm1pbl9x
dWFudGl6ZXIpOw0KKwkJRFBSSU5URihEUFJJTlRGX1JDLCJpbml0OlhWSURfQ0JSIik7DQorCQli
cmVhazsNCisNCisJY2FzZSBYVklEX1ZCUjJQQVNTMSA6DQorCXsNCisJCXN0YXRpYyBjb25zdCB1
aW50MzJfdCBubnNfdmVyc2lvbl8yMCA9IC0yMDsNCisNCisJCXJjLT5zdGF0czEgPSBmb3Blbihy
Y3BhcmFtLT5kYXRhLnZicjJwYXNzMS5zdGF0X2ZpbGUsICJ3YiIpOw0KKwkJaWYgKHJjLT5zdGF0
czEgPT0gTlVMTCkNCisJCXsNCisJCQlEUFJJTlRGKERQUklOVEZfUkMsICIycGFzcyBpbml0IGVy
cm9yIC0gY291bGRuJ3QgY3JlYXRlIHN0YXRzMSIpOw0KKwkJCXJldHVybiAtMTsNCisJCX0NCisN
CisJCWZ3cml0ZSgmbm5zX3ZlcnNpb25fMjAsIHNpemVvZih1aW50MzJfdCksIDEsIHJjLT5zdGF0
czEpOw0KKw0KKwkJRFBSSU5URihEUFJJTlRGX1JDLCJpbml0OlhWSURfVkJSMlBBU1MxLCBzdGF0
czF0PVwiJWlcIiIsIHJjLT5zdGF0czEpOw0KKwkJYnJlYWs7DQorCX0NCisNCisJY2FzZSBYVklE
X1ZCUjJQQVNTMgk6DQorCXsNCisJCXJjLT5kZXNpcmVkX3NpemUgPSByY3BhcmFtLT5kYXRhLnZi
cjJwYXNzMi5kZXNpcmVkX3NpemU7DQorCQlyYy0+Y3JlZGl0c19zdGFydF9zaXplID0gcmNwYXJh
bS0+ZGF0YS52YnIycGFzczIuY3JlZGl0c19zdGFydF9zaXplOw0KKwkJcmMtPmNyZWRpdHNfZW5k
X3NpemUgPSByY3BhcmFtLT5kYXRhLnZicjJwYXNzMi5jcmVkaXRzX2VuZF9zaXplOw0KKwkJcmMt
PmtleWZyYW1lX2Jvb3N0ID0gcmNwYXJhbS0+ZGF0YS52YnIycGFzczIua2V5ZnJhbWVfYm9vc3Q7
DQorCQlyYy0+a2Z0cmVzaG9sZCA9IHJjcGFyYW0tPmRhdGEudmJyMnBhc3MyLmtmdHJlc2hvbGQ7
DQorCQlyYy0+a2ZyZWR1Y3Rpb24gPSByY3BhcmFtLT5kYXRhLnZicjJwYXNzMi5rZnJlZHVjdGlv
bjsNCisJCXJjLT5jdXJ2ZV9jb21wcmVzc2lvbl9oaWdoID0gcmNwYXJhbS0+ZGF0YS52YnIycGFz
czIuY3VydmVfY29tcHJlc3Npb25faGlnaDsNCisJCXJjLT5jdXJ2ZV9jb21wcmVzc2lvbl9sb3cg
PSByY3BhcmFtLT5kYXRhLnZicjJwYXNzMi5jdXJ2ZV9jb21wcmVzc2lvbl9sb3c7DQorCQlyYy0+
dXNlX2FsdF9jdXJ2ZSA9IHJjcGFyYW0tPmRhdGEudmJyMnBhc3MyLnVzZV9hbHRfY3VydmU7DQor
CQlyYy0+YWx0X2N1cnZlX3VzZV9hdXRvID0gcmNwYXJhbS0+ZGF0YS52YnIycGFzczIuYWx0X2N1
cnZlX3VzZV9hdXRvOw0KKwkJcmMtPmFsdF9jdXJ2ZV9hdXRvX3N0ciA9IHJjcGFyYW0tPmRhdGEu
dmJyMnBhc3MyLmFsdF9jdXJ2ZV9hdXRvX3N0cjsNCisJCXJjLT5hbHRfY3VydmVfdXNlX2F1dG9f
Ym9udXNfYmlhcyA9IHJjcGFyYW0tPmRhdGEudmJyMnBhc3MyLmFsdF9jdXJ2ZV91c2VfYXV0b19i
b251c19iaWFzOw0KKwkJcmMtPmFsdF9jdXJ2ZV9ib251c19iaWFzID0gcmNwYXJhbS0+ZGF0YS52
YnIycGFzczIuYWx0X2N1cnZlX2JvbnVzX2JpYXM7DQorCQlyYy0+YWx0X2N1cnZlX3R5cGUgPSBy
Y3BhcmFtLT5kYXRhLnZicjJwYXNzMi5hbHRfY3VydmVfdHlwZTsNCisJCXJjLT5hbHRfY3VydmVf
aGlnaF9kaXN0ID0gcmNwYXJhbS0+ZGF0YS52YnIycGFzczIuYWx0X2N1cnZlX2hpZ2hfZGlzdDsN
CisJCXJjLT5hbHRfY3VydmVfbG93X2Rpc3QgPSByY3BhcmFtLT5kYXRhLnZicjJwYXNzMi5hbHRf
Y3VydmVfbG93X2Rpc3Q7DQorCQlyYy0+YWx0X2N1cnZlX21pbl9yZWxfcXVhbCA9IHJjcGFyYW0t
PmRhdGEudmJyMnBhc3MyLmFsdF9jdXJ2ZV9taW5fcmVsX3F1YWw7DQorCQlyYy0+bWF4X292ZXJm
bG93X2ltcHJvdmVtZW50ID0gcmNwYXJhbS0+ZGF0YS52YnIycGFzczIudHdvcGFzc19tYXhfb3Zl
cmZsb3dfaW1wcm92ZW1lbnQ7DQorCQlyYy0+bWF4X292ZXJmbG93X2RlZ3JhZGF0aW9uID0gcmNw
YXJhbS0+ZGF0YS52YnIycGFzczIudHdvcGFzc19tYXhfb3ZlcmZsb3dfZGVncmFkYXRpb247DQor
CQlyYy0+Yml0cmF0ZV9wYXliYWNrX2RlbGF5ID0gcmNwYXJhbS0+ZGF0YS52YnIycGFzczIuYml0
cmF0ZV9wYXliYWNrX2RlbGF5Ow0KKwkJcmMtPmJpdHJhdGVfcGF5YmFja19tZXRob2QgPSByY3Bh
cmFtLT5kYXRhLnZicjJwYXNzMi5iaXRyYXRlX3BheWJhY2tfbWV0aG9kOw0KKwkJcmMtPm1pbl9r
ZXlfaW50ZXJ2YWw9cmNwYXJhbS0+ZGF0YS52YnIycGFzczIubWluX2tleV9pbnRlcnZhbDsNCisN
CisJCXJjLT5tYXhfZnJhbWVzaXplID0gKGludCkoKGRvdWJsZSlyY3BhcmFtLT5kYXRhLnZicjJw
YXNzMi50d29wYXNzX21heF9iaXRyYXRlIC8gOC4wIC8gKChkb3VibGUpcGFyYW0tPmZiYXNlIC8g
KGRvdWJsZSlwYXJhbS0+ZmluY3IpKTsNCisJCQ0KKwkJcmMtPm5uczEgPSBSYXRlQ29udHJvbF9y
ZWFkX3N0YXRzKHJjcGFyYW0tPmRhdGEudmJyMnBhc3MyLnN0YXRzMV9maWxlLCAmcmMtPm5uc19m
cmFtZXMpOw0KKwkJaWYgKHJjLT5ubnMxID09IE5VTEwpDQorCQkJcmV0dXJuIC0xOw0KKw0KKwkJ
aWYgKHJjcGFyYW0tPmRhdGEudmJyMnBhc3MyLnN0YXRzMl9maWxlKQkvKiB1c2UgZXh0ZXJuYWwg
MiBwYXNzICovDQorCQl7DQorCQkJaW50IGZyYW1lczI7DQorDQorCQkJcmMtPm5uczIgPSBSYXRl
Q29udHJvbF9yZWFkX3N0YXRzKHJjcGFyYW0tPmRhdGEudmJyMnBhc3MyLnN0YXRzMl9maWxlLCAm
ZnJhbWVzMik7DQorCQkJaWYgKHJjLT5ubnMyID09IE5VTEwpDQorCQkJew0KKwkJCQlmcmVlKHJj
LT5ubnMxKTsNCisJCQkJcmV0dXJuIC0xOw0KKwkJCX0NCisNCisJCQlpZiAoZnJhbWVzMiA8IHJj
LT5ubnNfZnJhbWVzKQ0KKwkJCQlyYy0+bm5zX2ZyYW1lcyA9IGZyYW1lczI7DQorCQkJDQorCQkJ
UmF0ZUNvbnRyb2xfaW5pdF9leHRlcm5hbChyYyk7DQorCQl9DQorCQllbHNlDQorCQl7DQorCQkJ
cmMtPm5uczIgPSBOVUxMOw0KKwkJCVJhdGVDb250cm9sX2luaXRfaW50ZXJuYWwocmMpOw0KKwkJ
fQ0KKw0KKwkJcmMtPm92ZXJmbG93ID0gMDsNCisJCXJjLT5LRm92ZXJmbG93ID0gMDsNCisJCXJj
LT5LRm92ZXJmbG93X3BhcnRpYWwgPSAwOw0KKwkJcmMtPktGX2lkeCA9IDE7DQorDQorCQltZW1z
ZXQocmMtPmJxdWFudF9lcnJvciwgMCwgc2l6ZW9mKHJjLT5icXVhbnRfZXJyb3IpKTsNCisJCW1l
bXNldChyYy0+cHF1YW50X2Vycm9yLCAwLCBzaXplb2YocmMtPnBxdWFudF9lcnJvcikpOw0KKwkJ
cmMtPmN1cnZlX2NvbXBfZXJyb3IgPSAwLjA7DQorCQlyYy0+bGFzdF9icXVhbnQgPSAwOw0KKwkJ
cmMtPmxhc3RfcHF1YW50ID0gMDsNCisNCisJCS8qRFBSSU5URihEUFJJTlRGX1JDLCJpbml0OlhW
SURfVkJSMlBBU1MyIik7Ki8NCisJCWJyZWFrOw0KKwl9DQorDQorCWRlZmF1bHQgOg0KKwkJcmV0
dXJuIC0xOw0KKwl9DQorDQorCXJldHVybiAwOw0KK30NCisNCisNCit2b2lkDQorUmF0ZUNvbnRy
b2xEZUluaXQoUmF0ZUNvbnRyb2wgKiByYykNCit7DQorCWludCBpOw0KKwkvLyBvdXRwdXQgdGhl
IHF1YW50aXplciBkaXN0cmlidXRpb24gZm9yIHRoaXMgZW5jb2RlLg0KKw0KKwlEUFJJTlRGKERQ
UklOVEZfUkMsICJRdWFudGl6ZXIgZGlzdHJpYnV0aW9uIik7DQorCWZvciAoaT0xOyBpPD0zMTsg
aSsrKQ0KKwl7DQorCQlpZiAocmMtPnF1YW50X2NvdW50W2ldKQ0KKwkJCURQUklOVEYoRFBSSU5U
Rl9SQywgIlE6JWk6JWkiLCBpLCByYy0+cXVhbnRfY291bnRbaV0pOw0KKwl9DQorDQorCXN3aXRj
aCAocmMtPm1vZGUpDQorCXsNCisJY2FzZSBYVklEX0ZJWEVEUVVBTlQgOg0KKwljYXNlIFhWSURf
Q0JSIDoNCisJCXJldHVybjsNCisNCisJY2FzZSBYVklEX1ZCUjJQQVNTMSA6DQorCQlyZXR1cm47
DQorDQorCWNhc2UgWFZJRF9WQlIyUEFTUzIJOg0KKwkJaWYgKHJjLT5ubnMxKSBmcmVlKHJjLT5u
bnMxKTsNCisJCWlmIChyYy0+bm5zMikgZnJlZShyYy0+bm5zMik7DQorCQlyZXR1cm47DQorDQor
CWRlZmF1bHQgOg0KKwkJcmV0dXJuOw0KKwl9DQorfQ0KKw0KKw0KKw0KKw0KIC8qKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKg0KICAqIFJhdGVDb250cm9sR2V0UQ0KICAqDQotICogUmV0dXJuZWQgdmFsdWUg
OiAtIHRoZSBjdXJyZW50ICdyYXRlX2NvbnRyb2wnIHF1YW50aXplciB2YWx1ZQ0KKyAqIFJldHVy
bmVkIHZhbHVlIDogLSB0aGUgY3VycmVudCAncmMnIHF1YW50aXplciB2YWx1ZQ0KICAqDQogICoq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKiovDQogDQoraW50IFJhdGVDb250cm9sXzJwYXNzX2dldF9xdWFudChS
YXRlQ29udHJvbCogcmMsIGludCAqIGNvZGluZ190eXBlKQ0KK3sNCisJaW50IHF1YW50Ow0KKw0K
Kwljb25zdCBOTlNUQVRTICogbm5zMSA9ICZyYy0+bm5zMVtyYy0+ZnJhbWVfbnVtXTsNCisJY29u
c3QgTk5TVEFUUyAqIG5uczIgPSAmcmMtPm5uczJbcmMtPmZyYW1lX251bV07DQorCWludCBieXRl
czEsIGJ5dGVzMjsNCisJaW50IG92ZXJmbG93Ow0KKwlpbnQgaW5fY3JlZGl0czsNCisJaW50IGNh
cHBlZF90b19tYXhfZnJhbWVzaXplID0gMDsNCisJaW50IEtGZGlzdGFuY2UsIEtGX21pbl9zaXpl
Ow0KKw0KKwlpZiAocmMtPmZyYW1lX251bSA+PSByYy0+bm5zX2ZyYW1lcykNCisJew0KKwkJRFBS
SU5URihEUFJJTlRGX1JDLCJFUlJPUjogVklERU8gRVhDRUVEUyAxU1QgUEFTUyEhISIpOw0KKwkJ
cmV0dXJuIC0xOw0KKwl9DQorDQorCQ0KKwlieXRlczEgPSBubnMxLT5ieXRlczsNCisJb3ZlcmZs
b3cgPSByYy0+b3ZlcmZsb3cgLyA4Ow0KKw0KKwkvLyBmb3JjZSBjb2RpbmdfdHlwZSBkZWNpc2lv
bg0KKwlpZiAobm5zMS0+cXVhbnQgJiBOTlNUQVRTX0tFWUZSQU1FKQ0KKwl7DQorCQlvdmVyZmxv
dyA9IDA7DQorCQkqY29kaW5nX3R5cGUgPSBJX1ZPUDsNCisJfQ0KKwllbHNlIGlmIChubnMxLT5k
ZF92ICYgTk5TVEFUU19CRlJBTUUpDQorCXsNCisJCSpjb2RpbmdfdHlwZSA9IEJfVk9QOw0KKwl9
DQorCWVsc2UNCisJew0KKwkJKmNvZGluZ190eXBlID0gLTE7DQorCX0NCisNCisJaW5fY3JlZGl0
cyA9IFJhdGVDb250cm9sX2luX2NyZWRpdHMocmMsIHJjLT5mcmFtZV9udW0pOw0KKw0KKwlpZiAo
aW5fY3JlZGl0cykNCisJew0KKwkJaWYgKHJjLT5ubnMyID09IE5VTEwpCS8qIGludGVybmFsICov
DQorCQl7DQorCQkJc3dpdGNoIChyYy0+Y3JlZGl0c19tb2RlKQ0KKwkJCXsNCisJCQljYXNlIFhW
SURfQ1JFRElUU19NT0RFX1JBVEUgOg0KKwkJCWNhc2UgWFZJRF9DUkVESVRTX01PREVfU0laRSA6
DQorCQkJCWlmIChpbl9jcmVkaXRzID09IFJDX0NSRURJVFNfU1RBUlQpDQorCQkJCXsNCisJCQkJ
CWJ5dGVzMiA9IChpbnQpKGJ5dGVzMSAvIHJjLT5jcmVkaXRzX3N0YXJ0X2N1cnZlKTsNCisJCQkJ
fQ0KKwkJCQllbHNlIC8vIENSRURJVFNfRU5EDQorCQkJCXsNCisJCQkJCWJ5dGVzMiA9IChpbnQp
KGJ5dGVzMSAvIHJjLT5jcmVkaXRzX2VuZF9jdXJ2ZSk7DQorCQkJCX0NCisNCisJCQkJKmNvZGlu
Z190eXBlID0gLTE7DQorCQkJCWJyZWFrOw0KKw0KKwkJCWNhc2UgWFZJRF9DUkVESVRTX01PREVf
UVVBTlQgOg0KKwkJCQlpZiAocmMtPmNyZWRpdHNfcXVhbnRfaSAhPSByYy0+Y3JlZGl0c19xdWFu
dF9wKQ0KKwkJCQl7DQorCQkJCQlxdWFudCA9ICpjb2RpbmdfdHlwZSA9PSBJX1ZPUCA/DQorCQkJ
CQkJcmMtPmNyZWRpdHNfcXVhbnRfaSA6DQorCQkJCQkJcmMtPmNyZWRpdHNfcXVhbnRfcDsNCisJ
CQkJfQ0KKwkJCQllbHNlDQorCQkJCXsNCisJCQkJCXF1YW50ID0gcmMtPmNyZWRpdHNfcXVhbnRf
cDsNCisJCQkJCSpjb2RpbmdfdHlwZSA9IC0xOw0KKwkJCQl9DQorDQorCQkJCXJjLT5ieXRlczEg
PSBieXRlczE7DQorCQkJCXJjLT5kZXNpcmVkX2J5dGVzID0gYnl0ZXMxOw0KKwkJCQlyZXR1cm4g
cXVhbnQ7DQorCQkJfQ0KKwkJfQ0KKwkJZWxzZQkvKiBleHRlcm5hbCAqLw0KKwkJew0KKwkJCWlm
IChyYy0+Y3JlZGl0c19tb2RlID09IFhWSURfQ1JFRElUU19NT0RFX1FVQU5UKQ0KKwkJCXsNCisJ
CQkJaWYgKHJjLT5jcmVkaXRzX3F1YW50X2kgIT0gcmMtPmNyZWRpdHNfcXVhbnRfcCkNCisJCQkJ
ew0KKwkJCQkJcXVhbnQgPSAqY29kaW5nX3R5cGUgPT0gSV9WT1AgPw0KKwkJCQkJCXJjLT5jcmVk
aXRzX3F1YW50X2kgOg0KKwkJCQkJCXJjLT5jcmVkaXRzX3F1YW50X3A7DQorCQkJCX0NCisJCQkJ
ZWxzZQ0KKwkJCQl7DQorCQkJCQlxdWFudCA9IHJjLT5jcmVkaXRzX3F1YW50X3A7DQorCQkJCQkq
Y29kaW5nX3R5cGUgPSAtMTsNCisJCQkJfQ0KKw0KKwkJCQlyYy0+Ynl0ZXMxID0gYnl0ZXMxOw0K
KwkJCQlyYy0+ZGVzaXJlZF9ieXRlcyA9IGJ5dGVzMTsNCisJCQkJcmV0dXJuIHF1YW50Ow0KKwkJ
CX0NCisNCisJCQlieXRlczIgPSBubnMyLT5ieXRlczsNCisJCX0NCisJfQ0KKwllbHNlCS8vIEZv
eGVyOiBhcHBseSBjdXJ2ZSBjb21wcmVzc2lvbiBvdXRzaWRlIGNyZWRpdHMNCisJew0KKwkJZG91
YmxlIGRieXRlcywgY3VydmVfdGVtcDsNCisNCisJCWJ5dGVzMiA9IChyYy0+bm5zMiA9PSBOVUxM
KSA/IGJ5dGVzMSA6IG5uczItPmJ5dGVzOw0KKw0KKwkJRFBSSU5URihEUFJJTlRGX1JDLCAiICAg
Ynl0ZXMyPSVpIGJ5dGVzMT0laSBubnMyLT5ieXRlcz0laSIsIGJ5dGVzMiwgYnl0ZXMxLCAocmMt
Pm5uczIgPT0gTlVMTCkgPyAtMSA6IG5uczItPmJ5dGVzKTsNCisNCisJCWlmICgqY29kaW5nX3R5
cGUgPT0gSV9WT1ApDQorCQl7DQorCQkJZGJ5dGVzID0gKChpbnQpKGJ5dGVzMiArIGJ5dGVzMiAq
IHJjLT5rZXlmcmFtZV9ib29zdCAvIDEwMCkpIC8NCisJCQkJcmMtPm1vdmllX2N1cnZlOw0KKwkJ
fQ0KKwkJZWxzZQ0KKwkJew0KKwkJCWRieXRlcyA9IGJ5dGVzMiAvIHJjLT5tb3ZpZV9jdXJ2ZTsN
CisJCX0NCisNCisJCWlmIChubnMxLT5kZF92ICYgTk5TVEFUU19CRlJBTUUpDQorCQkJZGJ5dGVz
ICo9IHJjLT5hdmVyYWdlX3BmcmFtZSAvIHJjLT5hdmVyYWdlX2JmcmFtZTsNCisNCisJCS8qIERQ
UklOVEYoRFBSSU5URl9SQywgInJjLT5jdXJ2ZV9jb21wX2Vycm9yPSVpLCByYy0+Yml0cmF0ZV9w
YXliYWNrX2RlbGF5PSVpIiwNCisJCQlyYy0+Y3VydmVfY29tcF9lcnJvciwNCisJCQlyYy0+Yml0
cmF0ZV9wYXliYWNrX2RlbGF5KTsgKi8NCisNCisJCS8vIHNwcmVhZCB0aGUgY29tcHJlc3Npb24g
ZXJyb3IgYWNyb3NzIHBheWJhY2tfZGVsYXkgZnJhbWVzDQorCQlpZiAocmMtPmJpdHJhdGVfcGF5
YmFja19tZXRob2QgPT0gMCkJLyogYmlhcyAqLw0KKwkJew0KKwkJCWJ5dGVzMiA9IChpbnQpKHJj
LT5jdXJ2ZV9jb21wX2Vycm9yIC8gcmMtPmJpdHJhdGVfcGF5YmFja19kZWxheSk7DQorCQkJRFBS
SU5URihEUFJJTlRGX1JDLCIgICBiaWFzOiBieXRlczI9JWkiLGJ5dGVzMik7DQorCQl9DQorCQll
bHNlCS8qIHByb3BvcnRpb25hbCAqLw0KKwkJew0KKwkJCWJ5dGVzMiA9IChpbnQpKHJjLT5jdXJ2
ZV9jb21wX2Vycm9yICogZGJ5dGVzIC8NCisJCQkJcmMtPmF2ZXJhZ2VfcGZyYW1lIC8gcmMtPmJp
dHJhdGVfcGF5YmFja19kZWxheSk7DQorDQorCQkJaWYgKGxhYnMoYnl0ZXMyKSA+IGZhYnMocmMt
PmN1cnZlX2NvbXBfZXJyb3IpKQ0KKwkJCXsNCisJCQkJYnl0ZXMyID0gKGludClyYy0+Y3VydmVf
Y29tcF9lcnJvcjsNCisJCQl9DQorCQl9DQorDQorCQkvKkRQUklOVEYoRFBSSU5URl9SQywgImFm
dGVyIHBhY2tiYWNrIGJ5dGVzMj0laSIsIGJ5dGVzMik7Ki8NCisNCisJCXJjLT5jdXJ2ZV9jb21w
X2Vycm9yIC09IGJ5dGVzMjsNCisNCisJCWlmIChyYy0+dXNlX2FsdF9jdXJ2ZSkNCisJCXsNCisJ
CQlpZiAoKmNvZGluZ190eXBlICE9IElfVk9QKQ0KKwkJCXsNCisJCQkJaWYgKGRieXRlcyA+IHJj
LT5hdmVyYWdlX3BmcmFtZSkNCisJCQkJew0KKwkJCQkJaWYgKGRieXRlcyA+PSByYy0+YWx0X2N1
cnZlX2hpZ2gpDQorCQkJCQkJY3VydmVfdGVtcCA9IGRieXRlcyAqIChyYy0+YWx0X2N1cnZlX21p
ZF9xdWFsIC0gcmMtPmFsdF9jdXJ2ZV9xdWFsX2Rldik7DQorCQkJCQllbHNlDQorCQkJCQl7DQor
CQkJCQkJc3dpdGNoKHJjLT5hbHRfY3VydmVfdHlwZSkNCisJCQkJCQl7DQorCQkJCQkJY2FzZSAy
Og0KKwkJCQkJCWN1cnZlX3RlbXAgPSBkYnl0ZXMgKiAocmMtPmFsdF9jdXJ2ZV9taWRfcXVhbCAt
IHJjLT5hbHRfY3VydmVfcXVhbF9kZXYgKg0KKwkJCQkJCQlzaW4oREVHMlJBRCAqICgoZGJ5dGVz
IC0gcmMtPmF2ZXJhZ2VfcGZyYW1lKSAqIDkwLjAgLyByYy0+YWx0X2N1cnZlX2hpZ2hfZGlmZikp
KTsNCisJCQkJCQkJYnJlYWs7DQorCQkJCQkJY2FzZSAxOg0KKwkJCQkJCWN1cnZlX3RlbXAgPSBk
Ynl0ZXMgKiAocmMtPmFsdF9jdXJ2ZV9taWRfcXVhbCAtIHJjLT5hbHRfY3VydmVfcXVhbF9kZXYg
Kg0KKwkJCQkJCQkoZGJ5dGVzIC0gcmMtPmF2ZXJhZ2VfcGZyYW1lKSAvIHJjLT5hbHRfY3VydmVf
aGlnaF9kaWZmKTsNCisJCQkJCQkJYnJlYWs7DQorCQkJCQkJY2FzZSAwOg0KKwkJCQkJCWN1cnZl
X3RlbXAgPSBkYnl0ZXMgKiAocmMtPmFsdF9jdXJ2ZV9taWRfcXVhbCAtIHJjLT5hbHRfY3VydmVf
cXVhbF9kZXYgKg0KKwkJCQkJCQkoMS4wIC0gY29zKERFRzJSQUQgKiAoKGRieXRlcyAtIHJjLT5h
dmVyYWdlX3BmcmFtZSkgKiA5MC4wIC8gcmMtPmFsdF9jdXJ2ZV9oaWdoX2RpZmYpKSkpOw0KKwkJ
CQkJCX0NCisJCQkJCX0NCisJCQkJfQ0KKwkJCQllbHNlDQorCQkJCXsNCisJCQkJCWlmIChkYnl0
ZXMgPD0gcmMtPmFsdF9jdXJ2ZV9sb3cpDQorCQkJCQkJY3VydmVfdGVtcCA9IGRieXRlczsNCisJ
CQkJCWVsc2UNCisJCQkJCXsNCisJCQkJCQlzd2l0Y2gocmMtPmFsdF9jdXJ2ZV90eXBlKQ0KKwkJ
CQkJCXsNCisJCQkJCQljYXNlIDI6DQorCQkJCQkJY3VydmVfdGVtcCA9IGRieXRlcyAqIChyYy0+
YWx0X2N1cnZlX21pZF9xdWFsIC0gcmMtPmFsdF9jdXJ2ZV9xdWFsX2RldiAqDQorCQkJCQkJCXNp
bihERUcyUkFEICogKChkYnl0ZXMgLSByYy0+YXZlcmFnZV9wZnJhbWUpICogOTAuMCAvIHJjLT5h
bHRfY3VydmVfbG93X2RpZmYpKSk7DQorCQkJCQkJCWJyZWFrOw0KKwkJCQkJCWNhc2UgMToNCisJ
CQkJCQljdXJ2ZV90ZW1wID0gZGJ5dGVzICogKHJjLT5hbHRfY3VydmVfbWlkX3F1YWwgLSByYy0+
YWx0X2N1cnZlX3F1YWxfZGV2ICoNCisJCQkJCQkJKGRieXRlcyAtIHJjLT5hdmVyYWdlX3BmcmFt
ZSkgLyByYy0+YWx0X2N1cnZlX2xvd19kaWZmKTsNCisJCQkJCQkJYnJlYWs7DQorCQkJCQkJY2Fz
ZSAwOg0KKwkJCQkJCWN1cnZlX3RlbXAgPSBkYnl0ZXMgKiAocmMtPmFsdF9jdXJ2ZV9taWRfcXVh
bCArIHJjLT5hbHRfY3VydmVfcXVhbF9kZXYgKg0KKwkJCQkJCQkoMS4wIC0gY29zKERFRzJSQUQg
KiAoKGRieXRlcyAtIHJjLT5hdmVyYWdlX3BmcmFtZSkgKiA5MC4wIC8gcmMtPmFsdF9jdXJ2ZV9s
b3dfZGlmZikpKSk7DQorCQkJCQkJfQ0KKwkJCQkJfQ0KKwkJCQl9DQorCQkJCWlmIChubnMxLT5k
ZF92ICYgTk5TVEFUU19CRlJBTUUpDQorCQkJCQljdXJ2ZV90ZW1wICo9IHJjLT5hdmVyYWdlX2Jm
cmFtZSAvIHJjLT5hdmVyYWdlX3BmcmFtZTsNCisNCisJCQkJY3VydmVfdGVtcCA9IGN1cnZlX3Rl
bXAgKiByYy0+Y3VydmVfY29tcF9zY2FsZSArIHJjLT5jdXJ2ZV9iaWFzX2JvbnVzOw0KKw0KKwkJ
CQlieXRlczIgKz0gKChpbnQpY3VydmVfdGVtcCk7DQorCQkJCXJjLT5jdXJ2ZV9jb21wX2Vycm9y
ICs9IGN1cnZlX3RlbXAgLSAoKGludCljdXJ2ZV90ZW1wKTsNCisJCQl9DQorCQkJZWxzZQ0KKwkJ
CXsNCisJCQkJaWYgKG5uczEtPmRkX3YgJiBOTlNUQVRTX0JGUkFNRSkNCisJCQkJCWRieXRlcyAq
PSByYy0+YXZlcmFnZV9iZnJhbWUgLyByYy0+YXZlcmFnZV9wZnJhbWU7DQorDQorCQkJCWJ5dGVz
MiArPSAoKGludClkYnl0ZXMpOw0KKwkJCQlyYy0+Y3VydmVfY29tcF9lcnJvciArPSBkYnl0ZXMg
LSAoKGludClkYnl0ZXMpOw0KKwkJCX0NCisJCX0NCisJCWVsc2UgaWYgKCAocmMtPmN1cnZlX2Nv
bXByZXNzaW9uX2hpZ2ggKyByYy0+Y3VydmVfY29tcHJlc3Npb25fbG93KT4wICYmDQorCQkJKmNv
ZGluZ190eXBlICE9IElfVk9QKQ0KKwkJew0KKwkJCWlmIChkYnl0ZXMgPiByYy0+YXZlcmFnZV9w
ZnJhbWUpDQorCQkJew0KKwkJCQljdXJ2ZV90ZW1wID0gcmMtPmN1cnZlX2NvbXBfc2NhbGUgKg0K
KwkJCQkJKChkb3VibGUpZGJ5dGVzICsgKHJjLT5hdmVyYWdlX3BmcmFtZSAtIGRieXRlcykgKg0K
KwkJCQkJcmMtPmN1cnZlX2NvbXByZXNzaW9uX2hpZ2ggLyAxMDAuMCk7DQorCQkJfQ0KKwkJCWVs
c2UNCisJCQl7DQorCQkJCWN1cnZlX3RlbXAgPSByYy0+Y3VydmVfY29tcF9zY2FsZSAqDQorCQkJ
CQkoKGRvdWJsZSlkYnl0ZXMgKyAocmMtPmF2ZXJhZ2VfcGZyYW1lIC0gZGJ5dGVzKSAqDQorCQkJ
CQlyYy0+Y3VydmVfY29tcHJlc3Npb25fbG93IC8gMTAwLjApOw0KKwkJCX0NCisNCisJCQlpZiAo
bm5zMS0+ZGRfdiAmIE5OU1RBVFNfQkZSQU1FKQ0KKwkJCQljdXJ2ZV90ZW1wICo9IHJjLT5hdmVy
YWdlX2JmcmFtZSAvIHJjLT5hdmVyYWdlX3BmcmFtZTsNCisNCisJCQlieXRlczIgKz0gKChpbnQp
Y3VydmVfdGVtcCk7DQorCQkJRFBSSU5URihEUFJJTlRGX1JDLCIgICBjdXJ2ZTogYnl0ZXMyPSVp
IixieXRlczIpOw0KKwkJCXJjLT5jdXJ2ZV9jb21wX2Vycm9yICs9IGN1cnZlX3RlbXAgLSAoKGlu
dCljdXJ2ZV90ZW1wKTsNCisJCX0NCisJCWVsc2UNCisJCXsNCisJCQlpZiAobm5zMS0+ZGRfdiAm
IE5OU1RBVFNfQkZSQU1FKQ0KKwkJCQlkYnl0ZXMgKj0gcmMtPmF2ZXJhZ2VfYmZyYW1lIC8gcmMt
PmF2ZXJhZ2VfcGZyYW1lOw0KKw0KKwkJCWJ5dGVzMiArPSAoKGludClkYnl0ZXMpOw0KKwkJCURQ
UklOVEYoRFBSSU5URl9SQywiICAgY3VydmUyOiBieXRlczI9JWkiLGJ5dGVzMik7DQorCQkJcmMt
PmN1cnZlX2NvbXBfZXJyb3IgKz0gZGJ5dGVzIC0gKChpbnQpZGJ5dGVzKTsNCisJCX0NCisNCisJ
CS8vIGNhcCBieXRlczIgdG8gZmlyc3QgcGFzcyBzaXplLCBsb3dlcnMgbnVtYmVyIG9mIHF1YW50
PTEgZnJhbWVzDQorCQlpZiAoYnl0ZXMyID4gYnl0ZXMxKQ0KKwkJew0KKwkJCXJjLT5jdXJ2ZV9j
b21wX2Vycm9yICs9IGJ5dGVzMiAtIGJ5dGVzMTsNCisJCQlieXRlczIgPSBieXRlczE7DQorCQl9
DQorCQllbHNlDQorCQl7DQorCQkJaWYgKCpjb2RpbmdfdHlwZSA9PSBJX1ZPUCkNCisJCQl7DQor
CQkJCWlmIChieXRlczIgPCByYy0+bWluaXNpemUpDQorCQkJCXsNCisJCQkJCXJjLT5jdXJ2ZV9j
b21wX2Vycm9yIC09IHJjLT5taW5pc2l6ZSAtIGJ5dGVzMjsNCisJCQkJCWJ5dGVzMiA9IHJjLT5t
aW5pc2l6ZTsNCisJCQkJfQ0KKw0KKwkJCQkvKkRQUklOVEYoRFBSSU5URl9SQywgIioqKiBieXRl
czI9JWksIHJjLT5taW5pc2l6ZT0laSIsIGJ5dGVzMiwgcmMtPm1pbmlzaXplKTsqLw0KKw0KKwkJ
CX0NCisJCQllbHNlIGlmIChubnMxLT5kZF92ICYgTk5TVEFUU19CRlJBTUUpDQorCQkJew0KKwkJ
CQlpZiAoYnl0ZXMyIDwgcmMtPm1pbmJzaXplKQ0KKwkJCQkJYnl0ZXMyID0gcmMtPm1pbmJzaXpl
Ow0KKwkJCX0NCisJCQllbHNlDQorCQkJew0KKwkJCQlpZiAoYnl0ZXMyIDwgcmMtPm1pbnBzaXpl
KQ0KKwkJCQkJYnl0ZXMyID0gcmMtPm1pbnBzaXplOw0KKwkJCX0NCisJCX0NCisJfQ0KKwlEUFJJ
TlRGKERQUklOVEZfUkMsIiAgIGNhcDogYnl0ZXMyPSVpIiwgYnl0ZXMyKTsNCisNCisJcmMtPmRl
c2lyZWRfYnl0ZXMgPSBieXRlczI7DQorDQorCS8vIGlmIHRoaXMga2V5ZnJhbWUgaXMgdG9vIGNs
b3NlIHRvIHRoZSBuZXh0LCByZWR1Y2UgaXQncyBieXRlIGFsbG90bWVudA0KKwlpZiAoKmNvZGlu
Z190eXBlID09IElfVk9QICYmICFpbl9jcmVkaXRzKQ0KKwl7DQorCQlLRmRpc3RhbmNlID0gcmMt
PmtleWZyYW1lX2xvY2F0aW9uc1tyYy0+S0ZfaWR4XSAtDQorCQkJcmMtPmtleWZyYW1lX2xvY2F0
aW9uc1tyYy0+S0ZfaWR4IC0gMV07DQorDQorCQlpZiAoS0ZkaXN0YW5jZSA8IHJjLT5rZnRyZXNo
b2xkKQ0KKwkJew0KKwkJCS8qRFBSSU5URihEUFJJTlRGX1JDLCAiS0ZkaXN0YW5jZSIpOyovDQor
CQkJS0ZkaXN0YW5jZSA9IEtGZGlzdGFuY2UgLSByYy0+bWluX2tleV9pbnRlcnZhbDsNCisNCisJ
CQlpZiAoS0ZkaXN0YW5jZSA+PSAwKQ0KKwkJCXsNCisJCQkJS0ZfbWluX3NpemUgPSBieXRlczIg
KiAoMTAwIC0gcmMtPmtmcmVkdWN0aW9uKSAvIDEwMDsNCisJCQkJaWYgKEtGX21pbl9zaXplIDwg
MSkNCisJCQkJCUtGX21pbl9zaXplID0gMTsNCisNCisJCQkJYnl0ZXMyID0gS0ZfbWluX3NpemUg
KyAoYnl0ZXMyIC0gS0ZfbWluX3NpemUpICogS0ZkaXN0YW5jZSAvDQorCQkJCQkocmMtPmtmdHJl
c2hvbGQgLSByYy0+bWluX2tleV9pbnRlcnZhbCk7DQorDQorCQkJCWlmIChieXRlczIgPCAxKQ0K
KwkJCQkJYnl0ZXMyID0gMTsNCisJCQkJDQorCQkJCURQUklOVEYoRFBSSU5URl9SQywiICAga2Y6
IGJ5dGVzMj0laSIsIGJ5dGVzMik7DQorDQorCQkJfQ0KKwkJfQ0KKwl9DQorDQorCS8vIEZveGVy
OiBzY2FsZSBvdmVyZmxvdyBpbiByZWxhdGlvbiB0byBhdmVyYWdlIHNpemUsIHNvIHNtYWxsZXIg
ZnJhbWVzIGRvbid0IGdldA0KKwkvLyB0b28gbXVjaC9saXR0bGUgYml0cmF0ZQ0KKwlvdmVyZmxv
dyA9IChpbnQpKChkb3VibGUpb3ZlcmZsb3cgKiBieXRlczIgLyByYy0+YXZlcmFnZV9wZnJhbWUp
Ow0KKw0KKwkvLyBGb3hlcjogcmVpZ24gaW4gb3ZlcmZsb3cgd2l0aCBodWdlIGZyYW1lcw0KKwlp
ZiAobGFicyhvdmVyZmxvdykgPiBsYWJzKHJjLT5vdmVyZmxvdykpDQorCXsNCisJCW92ZXJmbG93
ID0gcmMtPm92ZXJmbG93Ow0KKwl9DQorDQorCS8vIEZveGVyOiBtYWtlIHN1cmUgb3ZlcmZsb3cg
ZG9lc24ndCBydW4gYXdheQ0KKwlpZiAob3ZlcmZsb3cgPiBieXRlczIgKiByYy0+bWF4X292ZXJm
bG93X2ltcHJvdmVtZW50IC8gMTAwKQ0KKwl7DQorCQlieXRlczIgKz0gKG92ZXJmbG93IDw9IGJ5
dGVzMikgPyBieXRlczIgKiByYy0+bWF4X292ZXJmbG93X2ltcHJvdmVtZW50IC8gMTAwIDoNCisJ
CQlvdmVyZmxvdyAqIHJjLT5tYXhfb3ZlcmZsb3dfaW1wcm92ZW1lbnQgLyAxMDA7DQorCQlEUFJJ
TlRGKERQUklOVEZfUkMsIiAgIG92ZXJmbG93MTogYnl0ZXMyPSVpLG92ZXJmbG93PSVpIiwgYnl0
ZXMyLCBvdmVyZmxvdyk7DQorCX0NCisJZWxzZSBpZiAob3ZlcmZsb3cgPCBieXRlczIgKiByYy0+
bWF4X292ZXJmbG93X2RlZ3JhZGF0aW9uIC8gLTEwMCkNCisJew0KKwkJYnl0ZXMyICs9IGJ5dGVz
MiAqIHJjLT5tYXhfb3ZlcmZsb3dfZGVncmFkYXRpb24gLyAtMTAwOw0KKwkJRFBSSU5URihEUFJJ
TlRGX1JDLCIgICBvdmVyZmxvdzI6IGJ5dGVzMj0laSxvdmVyZmxvdz0laSIsIGJ5dGVzMiwgb3Zl
cmZsb3cpOw0KKwl9DQorCWVsc2UNCisJew0KKwkJYnl0ZXMyICs9IG92ZXJmbG93Ow0KKwkJRFBS
SU5URihEUFJJTlRGX1JDLCIgICBvdmVyZmxvdzM6IGJ5dGVzMj0laSxvdmVyZmxvdz0laSIsIGJ5
dGVzMiwgb3ZlcmZsb3cpOw0KKwl9DQorDQorCWlmIChieXRlczIgPiByYy0+bWF4X2ZyYW1lc2l6
ZSkNCisJew0KKwkJY2FwcGVkX3RvX21heF9mcmFtZXNpemUgPSAxOw0KKwkJYnl0ZXMyID0gcmMt
Pm1heF9mcmFtZXNpemU7DQorCX0NCisNCisJLy8gbWFrZSBzdXJlIHRvIG5vdCBzY2FsZSBiZWxv
dyB0aGUgbWluaW11bSBmcmFtZXNpemUNCisJaWYgKG5uczEtPnF1YW50ICYgTk5TVEFUU19LRVlG
UkFNRSkNCisJew0KKwkJaWYgKGJ5dGVzMiA8IHJjLT5taW5pc2l6ZSkNCisJCQlieXRlczIgPSBy
Yy0+bWluaXNpemU7DQorCX0NCisJZWxzZSBpZiAobm5zMS0+ZGRfdiAmIE5OU1RBVFNfQkZSQU1F
KQ0KKwl7DQorCQlpZiAoYnl0ZXMyIDwgcmMtPm1pbmJzaXplKQ0KKwkJCWJ5dGVzMiA9IHJjLT5t
aW5ic2l6ZTsNCisJfQ0KKwllbHNlDQorCXsNCisJCWlmIChieXRlczIgPCByYy0+bWlucHNpemUp
DQorCQkJYnl0ZXMyID0gcmMtPm1pbnBzaXplOw0KKwl9DQorDQorCURQUklOVEYoRFBSSU5URl9S
QywiICAgbWluc2l6ZTogYnl0ZXMyPSVpIiwgYnl0ZXMyKTsNCisNCisJcmMtPmJ5dGVzMSA9IGJ5
dGVzMTsNCisNCisJLy8gdmVyeSAnc2ltcGxlJyBxdWFudDwtPmZpbGVzaXplIHJlbGF0aW9uc2hp
cA0KKwlxdWFudCA9ICgobm5zMS0+cXVhbnQgJiB+Tk5TVEFUU19LRVlGUkFNRSkgKiBieXRlczEp
IC8gYnl0ZXMyOw0KKw0KKw0KKwlEUFJJTlRGKERQUklOVEZfUkMsIiAgIHF1YW50PSVpICBubnMx
LT5xdWFudD0laSwgYnl0ZXMxPSVpLCBieXRlczI9JWkiLA0KKwkJcXVhbnQsIChubnMxLT5xdWFu
dCAmIH5OTlNUQVRTX0tFWUZSQU1FKSwgYnl0ZXMxLCBieXRlczIpOw0KKw0KKwlpZiAocXVhbnQg
PCAxKQ0KKwl7DQorCQlxdWFudCA9IDE7DQorCX0NCisJZWxzZSBpZiAocXVhbnQgPiAzMSkNCisJ
ew0KKwkJcXVhbnQgPSAzMTsNCisJfQ0KKwllbHNlIGlmICgqY29kaW5nX3R5cGUgIT0gSV9WT1Ap
DQorCXsNCisJCS8vIEZveGVyOiBhaWQgZGVzaXJlZCBxdWFudGl6ZXIgcHJlY2lzaW9uIGJ5IGFj
Y3VtdWxhdGluZyBkZWNpc2lvbiBlcnJvcg0KKwkJaWYgKG5uczEtPmRkX3YgJiBOTlNUQVRTX0JG
UkFNRSkNCisJCXsNCisJCQlyYy0+YnF1YW50X2Vycm9yW3F1YW50XSArPSAoKGRvdWJsZSkoKG5u
czEtPnF1YW50ICYgfk5OU1RBVFNfS0VZRlJBTUUpICogDQorCQkJCWJ5dGVzMSkgLyBieXRlczIp
IC0gcXVhbnQ7DQorDQorCQkJaWYgKHJjLT5icXVhbnRfZXJyb3JbcXVhbnRdID49IDEuMCkNCisJ
CQl7DQorCQkJCXJjLT5icXVhbnRfZXJyb3JbcXVhbnRdIC09IDEuMDsNCisJCQkJKHF1YW50KSsr
Ow0KKwkJCX0NCisJCX0NCisJCWVsc2UNCisJCXsNCisJCQlyYy0+cHF1YW50X2Vycm9yW3F1YW50
XSArPSAoKGRvdWJsZSkoKG5uczEtPnF1YW50ICYgfk5OU1RBVFNfS0VZRlJBTUUpICogDQorCQkJ
CWJ5dGVzMSkgLyBieXRlczIpIC0gcXVhbnQ7DQorDQorCQkJaWYgKHJjLT5wcXVhbnRfZXJyb3Jb
cXVhbnRdID49IDEuMCkNCisJCQl7DQorCQkJCXJjLT5wcXVhbnRfZXJyb3JbcXVhbnRdIC09IDEu
MDsNCisJCQkJKHF1YW50KSsrOw0KKwkJCX0NCisJCX0NCisJfQ0KKw0KKwkvLyB3ZSdyZSBkb25l
IHdpdGggY3JlZGl0cw0KKwlpZiAoUmF0ZUNvbnRyb2xfaW5fY3JlZGl0cyhyYywgcmMtPmZyYW1l
X251bSkpDQorCXsNCisJCXJldHVybiBxdWFudDsNCisJfQ0KKw0KKwlpZiAoKmNvZGluZ190eXBl
ID09IElfVk9QKQ0KKwl7DQorCQlpZiAocXVhbnQgPCByYy0+bWluX2lxdWFudCkNCisJCXsNCisJ
CQlxdWFudCA9IHJjLT5taW5faXF1YW50Ow0KKwkJCURQUklOVEYoRFBSSU5URl9SQywgIkktZnJh
bWUgcXVhbnRpemVyIHJhaXNlZCIpOw0KKwkJfQ0KKwkJaWYgKHF1YW50ID4gcmMtPm1heF9pcXVh
bnQpDQorCQl7DQorCQkJcXVhbnQgPSByYy0+bWF4X2lxdWFudDsNCisJCQlEUFJJTlRGKERQUklO
VEZfUkMsICJJLWZyYW1lIHF1YW50aXplciBsb3dlcmVkIik7DQorCQl9DQorCX0NCisJZWxzZQ0K
Kwl7DQorCQlpZiAocXVhbnQgPiByYy0+bWF4X3BxdWFudCkNCisJCXsNCisJCQlxdWFudCA9IHJj
LT5tYXhfcHF1YW50Ow0KKwkJfQ0KKwkJaWYgKHF1YW50IDwgcmMtPm1pbl9wcXVhbnQpDQorCQl7
DQorCQkJcXVhbnQgPSByYy0+bWluX3BxdWFudDsNCisJCX0NCisNCisJCS8vIHN1YnNlcXVlbnQg
ZnJhbWUgcXVhbnRzIGNhbiBvbmx5IGJlICstIDINCisJCWlmICgocmMtPmxhc3RfcHF1YW50IHx8
IHJjLT5sYXN0X2JxdWFudCkgJiYgY2FwcGVkX3RvX21heF9mcmFtZXNpemUgPT0gMCkNCisJCXsN
CisJCQlpZiAobm5zMS0+ZGRfdiAmIE5OU1RBVFNfQkZSQU1FKQ0KKwkJCXsNCisJCQkJLy8gdGhp
cyBiZnJhbWUgcXVhbnRpemVyIHZhcmlhdGlvbg0KKwkJCQkvLyByZXN0cmljdGlvbiBuZWVkcyB0
byBiZSByZWRvbmUuDQorCQkJCWlmIChxdWFudCA+IHJjLT5sYXN0X2JxdWFudCArIDIpDQorCQkJ
CXsNCisJCQkJCXF1YW50ID0gcmMtPmxhc3RfYnF1YW50ICsgMjsNCisJCQkJCURQUklOVEYoRFBS
SU5URl9SQywgIkItZnJhbWUgcXVhbnRpemVyIHByZXZlbnRlZCBmcm9tIHJpc2luZyB0b28gc3Rl
ZXBseSIpOw0KKwkJCQl9DQorCQkJCWlmIChxdWFudCA8IHJjLT5sYXN0X2JxdWFudCAtIDIpDQor
CQkJCXsNCisJCQkJCXF1YW50ID0gcmMtPmxhc3RfYnF1YW50IC0gMjsNCisJCQkJCURQUklOVEYo
RFBSSU5URl9SQywgIkItZnJhbWUgcXVhbnRpemVyIHByZXZlbnRlZCBmcm9tIGZhbGxpbmcgdG9v
IHN0ZWVwbHkiKTsNCisJCQkJfQ0KKwkJCX0NCisJCQllbHNlDQorCQkJew0KKwkJCQlpZiAocXVh
bnQgPiByYy0+bGFzdF9wcXVhbnQgKyAyKQ0KKwkJCQl7DQorCQkJCQlxdWFudCA9IHJjLT5sYXN0
X3BxdWFudCArIDI7DQorCQkJCQlEUFJJTlRGKERQUklOVEZfUkMsICJQLWZyYW1lIHF1YW50aXpl
ciBwcmV2ZW50ZWQgZnJvbSByaXNpbmcgdG9vIHN0ZWVwbHkiKTsNCisJCQkJfQ0KKwkJCQlpZiAo
cXVhbnQgPCByYy0+bGFzdF9wcXVhbnQgLSAyKQ0KKwkJCQl7DQorCQkJCQlxdWFudCA9IHJjLT5s
YXN0X3BxdWFudCAtIDI7DQorCQkJCQlEUFJJTlRGKERQUklOVEZfUkMsICJQLWZyYW1lIHF1YW50
aXplciBwcmV2ZW50ZWQgZnJvbSBmYWxsaW5nIHRvbyBzdGVlcGx5Iik7DQorCQkJCX0NCisJCQl9
DQorCQl9DQorCX0NCisNCisJaWYgKGNhcHBlZF90b19tYXhfZnJhbWVzaXplID09IDApDQorCXsN
CisJCWlmIChubnMxLT5xdWFudCAmIE5OU1RBVFNfS0VZRlJBTUUpDQorCQl7DQorCQkJcmMtPmxh
c3RfYnF1YW50ID0gcXVhbnQ7DQorCQkJcmMtPmxhc3RfcHF1YW50ID0gcXVhbnQ7DQorCQl9DQor
CQllbHNlIGlmIChubnMxLT5kZF92ICYgTk5TVEFUU19CRlJBTUUpDQorCQkJcmMtPmxhc3RfYnF1
YW50ID0gcXVhbnQ7DQorCQllbHNlDQorCQkJcmMtPmxhc3RfcHF1YW50ID0gcXVhbnQ7DQorCX0N
CisNCisvKglpZiAocmMtPnF1YW50X3R5cGUgPT0gUVVBTlRfTU9ERV9NT0QpDQorCXsNCisJCSpn
bG9iYWxfZmxhZ3MgfD0gKHF1YW50IDwgNCkgPyBYVklEX01QRUdRVUFOVCA6IFhWSURfSDI2M1FV
QU5UOw0KKwkJKmdsb2JhbF9mbGFncyAmPSAocXVhbnQgPCA0KSA/IH5YVklEX0gyNjNRVUFOVCA6
IH5YVklEX01QRUdRVUFOVDsNCisJfSovDQorLyoNCisJaWYgKHJjLT5xdWFudF90eXBlID09IFFV
QU5UX01PREVfTU9EX05FVykNCisJew0KKwkJKmdsb2JhbF9mbGFncyB8PSAocXVhbnQgPCA0KSA/
IFhWSURfSDI2M1FVQU5UIDogWFZJRF9NUEVHUVVBTlQ7DQorCQkqZ2xvYmFsX2ZsYWdzICY9IChx
dWFudCA8IDQpID8gflhWSURfTVBFR1FVQU5UIDogflhWSURfSDI2M1FVQU5UOw0KKwl9DQorKi8N
CisJcmV0dXJuIHF1YW50Ow0KK30NCisvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLQ0KKw0KKw0KKw0KIGludA0KLVJhdGVDb250cm9sR2V0UShSYXRlQ29udHJvbCAqIHJh
dGVfY29udHJvbCwNCi0JCQkJaW50IGtleWZyYW1lKQ0KK1JhdGVDb250cm9sR2V0UShSYXRlQ29u
dHJvbCAqIHJjLCBpbnQgKiBjb2RpbmdfdHlwZSkNCiB7DQotCXJldHVybiByYXRlX2NvbnRyb2wt
PnJ0bl9xdWFudDsNCisJaW50IHF1YW50Ow0KKw0KKwlpZiAocmMtPmNyZWRpdHNfZ3JleXNjYWxl
ICYmIFJhdGVDb250cm9sX2luX2NyZWRpdHMocmMsIHJjLT5mcmFtZV9udW0pKQ0KKwl7DQorCQkv
KiBYWFg6IHNldCBHUkVZU0NBTEUgZW5jb2RpbmcgbW9kZSAqLw0KKwl9DQorDQorCXN3aXRjaCAo
cmMtPm1vZGUpDQorCXsNCisJY2FzZSBYVklEX0ZJWEVEUVVBTlQgOg0KKwkJaWYgKHJjLT5mcXVh
bnRfcnVubmluZyA8IHJjLT5taW5fcHF1YW50KQ0KKwkJew0KKwkJCXJjLT5mcXVhbnRfcnVubmlu
ZyA9IChmbG9hdCkgcmMtPm1pbl9wcXVhbnQ7DQorCQl9DQorCQllbHNlIGlmKHJjLT5mcXVhbnRf
cnVubmluZyA+IHJjLT5tYXhfcHF1YW50KQ0KKwkJew0KKwkJCXJjLT5mcXVhbnRfcnVubmluZyA9
IChmbG9hdCkgcmMtPm1heF9wcXVhbnQ7DQorCQl9DQorDQorCQlxdWFudCA9IChpbnQpIHJjLT5m
cXVhbnRfcnVubmluZzsNCisNCisJCS8vIGFkZCBlcnJvciBiZXR3ZWVuIGZxdWFudCBhbmQgcXVh
bnQgdG8gZnF1YW50X3J1bm5pbmcNCisJCXJjLT5mcXVhbnRfcnVubmluZyArPSByYy0+ZnF1YW50
IC0gcXVhbnQ7DQorCQlicmVhazsNCisNCisJY2FzZSBYVklEX0NCUiA6IA0KKwkJcXVhbnQgPSBy
Yy0+Y2JyX3F1YW50Ow0KKwkJYnJlYWs7DQorDQorCWNhc2UgWFZJRF9WQlIyUEFTUzEgOg0KKwkJ
cXVhbnQgPSAyOw0KKwkJYnJlYWs7DQorDQorCWNhc2UgWFZJRF9WQlIyUEFTUzIgOg0KKwkJcXVh
bnQgPSBSYXRlQ29udHJvbF8ycGFzc19nZXRfcXVhbnQocmMsIGNvZGluZ190eXBlKTsNCisJCWJy
ZWFrOw0KKw0KKwlkZWZhdWx0IDoNCisJCXJldHVybiAtMTsJLyogZXJyb3IgKi8NCisJfQ0KKw0K
KwlyYy0+cXVhbnRfY291bnRbcXVhbnRdKys7CS8qIGluY3JlbWVudCBoaXN0b2dyYW0gKi8NCisN
CisJLypEUFJJTlRGKERQUklOVEZfUkMsICJxdWFudD0laVxuIiwgcXVhbnQpOyovDQorDQorCXJl
dHVybiBxdWFudDsNCiB9DQogDQorDQorDQorDQogLyoqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQogICog
UmF0ZUNvbnRyb2xVcGRhdGUNCiAgKg0KICAqIFRoaXMgZnVuY3Rpb24gaXMgY2FsbGVkIG9uY2Ug
YSBjb2RlZCBmcmFtZSB0byB1cGRhdGUgYWxsIGludGVybmFsDQotICogcGFyYW1ldGVycyBvZiAn
cmF0ZV9jb250cm9sJy4NCisgKiBwYXJhbWV0ZXJzIG9mICdyYycuDQogICoNCiAgKiBSZXR1cm5l
ZCB2YWx1ZSA6IE5vbmUNCiAgKg0KICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLw0KIA0KLXZvaWQNCi1S
YXRlQ29udHJvbFVwZGF0ZShSYXRlQ29udHJvbCAqIHJhdGVfY29udHJvbCwNCi0JCQkJICBpbnQx
Nl90IHF1YW50LA0KLQkJCQkgIGludCBmcmFtZV9zaXplLA0KLQkJCQkgIGludCBrZXlmcmFtZSkN
Ci17DQotCWludDY0X3QgZGV2aWF0aW9uOw0KLQlkb3VibGUgb3ZlcmZsb3csIGF2ZXJhZ2luZ19w
ZXJpb2QsIHJlYWN0aW9uX2RlbGF5X2ZhY3RvcjsNCi0JZG91YmxlIHF1YWxpdHlfc2NhbGUsIGJh
c2VfcXVhbGl0eSwgdGFyZ2V0X3F1YWxpdHk7DQotCWludDMyX3QgcnRuX3F1YW50Ow0KLQ0KLQly
YXRlX2NvbnRyb2wtPmZyYW1lcysrOw0KLQlyYXRlX2NvbnRyb2wtPnRvdGFsX3NpemUgKz0gZnJh
bWVfc2l6ZTsNCi0NCi0JZGV2aWF0aW9uID0NCi0JCShpbnQ2NF90KSAoKGRvdWJsZSkgcmF0ZV9j
b250cm9sLT50b3RhbF9zaXplIC0NCi0JCQkJICAgKChkb3VibGUpDQotCQkJCQkoKGRvdWJsZSkg
cmF0ZV9jb250cm9sLT50YXJnZXRfcmF0ZSAvIDguMCAvDQotCQkJCQkgKGRvdWJsZSkgcmF0ZV9j
b250cm9sLT5mcmFtZXJhdGUpICoNCi0JCQkJCShkb3VibGUpIHJhdGVfY29udHJvbC0+ZnJhbWVz
KSk7DQotDQotCURFQlVHQ0JSKChpbnQzMl90KSAocmF0ZV9jb250cm9sLT5mcmFtZXMgLSAxKSwg
cmF0ZV9jb250cm9sLT5ydG5fcXVhbnQsDQotCQkJIChpbnQzMl90KSBkZXZpYXRpb24pOw0KLQ0K
LQlpZiAocmF0ZV9jb250cm9sLT5ydG5fcXVhbnQgPj0gMikgew0KLQkJYXZlcmFnaW5nX3Blcmlv
ZCA9IChkb3VibGUpIHJhdGVfY29udHJvbC0+YXZlcmFnaW5nX3BlcmlvZDsNCi0JCXJhdGVfY29u
dHJvbC0+c2VxdWVuY2VfcXVhbGl0eSAtPQ0KLQkJCXJhdGVfY29udHJvbC0+c2VxdWVuY2VfcXVh
bGl0eSAvIGF2ZXJhZ2luZ19wZXJpb2Q7DQotCQlyYXRlX2NvbnRyb2wtPnNlcXVlbmNlX3F1YWxp
dHkgKz0NCi0JCQkyLjAgLyAoZG91YmxlKSByYXRlX2NvbnRyb2wtPnJ0bl9xdWFudCAvIGF2ZXJh
Z2luZ19wZXJpb2Q7DQotCQlpZiAocmF0ZV9jb250cm9sLT5zZXF1ZW5jZV9xdWFsaXR5IDwgMC4x
KQ0KLQkJCXJhdGVfY29udHJvbC0+c2VxdWVuY2VfcXVhbGl0eSA9IDAuMTsNCi0NCi0JCWlmICgh
a2V5ZnJhbWUpIHsNCi0JCQlyZWFjdGlvbl9kZWxheV9mYWN0b3IgPQ0KLQkJCQkoZG91YmxlKSBy
YXRlX2NvbnRyb2wtPnJlYWN0aW9uX2RlbGF5X2ZhY3RvcjsNCi0JCQlyYXRlX2NvbnRyb2wtPmF2
Z19mcmFtZXNpemUgLT0NCi0JCQkJcmF0ZV9jb250cm9sLT5hdmdfZnJhbWVzaXplIC8gcmVhY3Rp
b25fZGVsYXlfZmFjdG9yOw0KLQkJCXJhdGVfY29udHJvbC0+YXZnX2ZyYW1lc2l6ZSArPSBmcmFt
ZV9zaXplIC8gcmVhY3Rpb25fZGVsYXlfZmFjdG9yOw0KLQkJfQ0KLQl9DQotDQotCXF1YWxpdHlf
c2NhbGUgPQ0KLQkJcmF0ZV9jb250cm9sLT50YXJnZXRfZnJhbWVzaXplIC8gcmF0ZV9jb250cm9s
LT5hdmdfZnJhbWVzaXplICoNCi0JCXJhdGVfY29udHJvbC0+dGFyZ2V0X2ZyYW1lc2l6ZSAvIHJh
dGVfY29udHJvbC0+YXZnX2ZyYW1lc2l6ZTsNCi0NCi0JYmFzZV9xdWFsaXR5ID0gcmF0ZV9jb250
cm9sLT5zZXF1ZW5jZV9xdWFsaXR5Ow0KLQlpZiAocXVhbGl0eV9zY2FsZSA+PSAxLjApIHsNCi0J
CWJhc2VfcXVhbGl0eSA9IDEuMCAtICgxLjAgLSBiYXNlX3F1YWxpdHkpIC8gcXVhbGl0eV9zY2Fs
ZTsNCi0JfSBlbHNlIHsNCi0JCWJhc2VfcXVhbGl0eSA9IDAuMDY0NTIgKyAoYmFzZV9xdWFsaXR5
IC0gMC4wNjQ1MikgKiBxdWFsaXR5X3NjYWxlOw0KLQl9DQotDQotCW92ZXJmbG93ID0gLSgoZG91
YmxlKSBkZXZpYXRpb24gLyAoZG91YmxlKSByYXRlX2NvbnRyb2wtPmJ1ZmZlcik7DQotDQotCXRh
cmdldF9xdWFsaXR5ID0NCi0JCWJhc2VfcXVhbGl0eSArIChiYXNlX3F1YWxpdHkgLQ0KLQkJCQkJ
CTAuMDY0NTIpICogb3ZlcmZsb3cgLyByYXRlX2NvbnRyb2wtPnRhcmdldF9mcmFtZXNpemU7DQot
DQotCWlmICh0YXJnZXRfcXVhbGl0eSA+IDIuMCkNCi0JCXRhcmdldF9xdWFsaXR5ID0gMi4wOw0K
LQllbHNlIGlmICh0YXJnZXRfcXVhbGl0eSA8IDAuMDY0NTIpDQotCQl0YXJnZXRfcXVhbGl0eSA9
IDAuMDY0NTI7DQotDQotCXJ0bl9xdWFudCA9IChpbnQzMl90KSAoMi4wIC8gdGFyZ2V0X3F1YWxp
dHkpOw0KLQ0KLQlpZiAocnRuX3F1YW50IDwgMzEpIHsNCi0JCXJhdGVfY29udHJvbC0+cXVhbnRf
ZXJyb3JbcnRuX3F1YW50XSArPQ0KLQkJCTIuMCAvIHRhcmdldF9xdWFsaXR5IC0gcnRuX3F1YW50
Ow0KLQkJaWYgKHJhdGVfY29udHJvbC0+cXVhbnRfZXJyb3JbcnRuX3F1YW50XSA+PSAxLjApIHsN
Ci0JCQlyYXRlX2NvbnRyb2wtPnF1YW50X2Vycm9yW3J0bl9xdWFudF0gLT0gMS4wOw0KLQkJCXJ0
bl9xdWFudCsrOw0KLQkJfQ0KLQl9DQotDQotCWlmIChydG5fcXVhbnQgPiByYXRlX2NvbnRyb2wt
PnJ0bl9xdWFudCArIDEpDQotCQlydG5fcXVhbnQgPSByYXRlX2NvbnRyb2wtPnJ0bl9xdWFudCAr
IDE7DQotCWVsc2UgaWYgKHJ0bl9xdWFudCA8IHJhdGVfY29udHJvbC0+cnRuX3F1YW50IC0gMSkN
Ci0JCXJ0bl9xdWFudCA9IHJhdGVfY29udHJvbC0+cnRuX3F1YW50IC0gMTsNCi0NCi0JaWYgKHJ0
bl9xdWFudCA+IHJhdGVfY29udHJvbC0+bWF4X3F1YW50KQ0KLQkJcnRuX3F1YW50ID0gcmF0ZV9j
b250cm9sLT5tYXhfcXVhbnQ7DQotCWVsc2UgaWYgKHJ0bl9xdWFudCA8IHJhdGVfY29udHJvbC0+
bWluX3F1YW50KQ0KLQkJcnRuX3F1YW50ID0gcmF0ZV9jb250cm9sLT5taW5fcXVhbnQ7DQoraW50
DQorUmF0ZUNvbnRyb2xVcGRhdGUoUmF0ZUNvbnRyb2wgKiByYywgRlJBTUVJTkZPICogZnJhbWUp
DQorew0KKwlyYy0+dG90YWxfc2l6ZSArPSBmcmFtZS0+bGVuZ3RoOw0KIA0KLQlyYXRlX2NvbnRy
b2wtPnJ0bl9xdWFudCA9IHJ0bl9xdWFudDsNCi19DQorCXN3aXRjaChyYy0+bW9kZSkNCisJew0K
KwljYXNlIFhWSURfRklYRURRVUFOVCA6DQorCQlicmVhazsNCisNCisJY2FzZSBYVklEX0NCUiA6
DQorCXsNCisJCWludDMyX3QgY2JyX3F1YW50Ow0KKwkJZG91YmxlIG92ZXJmbG93LCBhdmVyYWdp
bmdfcGVyaW9kLCByZWFjdGlvbl9kZWxheV9mYWN0b3I7DQorCQlkb3VibGUgcXVhbGl0eV9zY2Fs
ZSwgYmFzZV9xdWFsaXR5LCB0YXJnZXRfcXVhbGl0eTsNCisNCisJCWludDY0X3QgZGV2aWF0aW9u
ID0gKGludDY0X3QpICgoZG91YmxlKSByYy0+dG90YWxfc2l6ZSAtICgoZG91YmxlKQ0KKwkJCSgo
ZG91YmxlKXJjLT50YXJnZXRfcmF0ZSAvIDguMCAvIChkb3VibGUpcmMtPmZyYW1lcmF0ZSkgKiAo
ZG91YmxlKXJjLT5mcmFtZV9udW0pKTsNCisNCisJCURQUklOVEYoRFBSSU5URl9SQywgIkNCUjog
ZnJhbWU6ICVpLCBxdWFudDogJWksIGRldmlhdGlvbjogJWkiLA0KKwkJCShpbnQzMl90KSAocmMt
PmZyYW1lX251bSksDQorCQkJcmMtPmNicl9xdWFudCwNCisJCQkoaW50MzJfdClkZXZpYXRpb24p
Ow0KKw0KKwkJaWYgKHJjLT5jYnJfcXVhbnQgPj0gMikgew0KKwkJCWF2ZXJhZ2luZ19wZXJpb2Qg
PSAoZG91YmxlKSByYy0+YXZlcmFnaW5nX3BlcmlvZDsNCisJCQlyYy0+c2VxdWVuY2VfcXVhbGl0
eSAtPSByYy0+c2VxdWVuY2VfcXVhbGl0eSAvIGF2ZXJhZ2luZ19wZXJpb2Q7DQorCQkJcmMtPnNl
cXVlbmNlX3F1YWxpdHkgKz0gMi4wIC8gKGRvdWJsZSkgcmMtPmNicl9xdWFudCAvIGF2ZXJhZ2lu
Z19wZXJpb2Q7DQorCQkJDQorCQkJaWYgKHJjLT5zZXF1ZW5jZV9xdWFsaXR5IDwgMC4xKQ0KKwkJ
CQlyYy0+c2VxdWVuY2VfcXVhbGl0eSA9IDAuMTsNCisNCisJCQlpZiAoZnJhbWUtPmNvZGluZ190
eXBlICE9IElfVk9QKSB7DQorCQkJCXJlYWN0aW9uX2RlbGF5X2ZhY3RvciA9DQorCQkJCQkoZG91
YmxlKSByYy0+cmVhY3Rpb25fZGVsYXlfZmFjdG9yOw0KKwkJCQlyYy0+YXZnX2ZyYW1lc2l6ZSAt
PQ0KKwkJCQkJcmMtPmF2Z19mcmFtZXNpemUgLyByZWFjdGlvbl9kZWxheV9mYWN0b3I7DQorCQkJ
CXJjLT5hdmdfZnJhbWVzaXplICs9IGZyYW1lLT5sZW5ndGggLyByZWFjdGlvbl9kZWxheV9mYWN0
b3I7DQorCQkJfQ0KKwkJfQ0KIA0KLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KLSAqIExvY2FsIGZ1
bmN0aW9ucw0KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLw0KKwkJcXVhbGl0eV9zY2FsZSA9IHJjLT50
YXJnZXRfZnJhbWVzaXplIC8gcmMtPmF2Z19mcmFtZXNpemUgKg0KKwkJCXJjLT50YXJnZXRfZnJh
bWVzaXplIC8gcmMtPmF2Z19mcmFtZXNpemU7DQogDQotc3RhdGljIGludA0KLWdldF9pbml0aWFs
X3F1YW50KGludCBicHApDQotew0KLQlyZXR1cm4gNTsNCisJCWJhc2VfcXVhbGl0eSA9IHJjLT5z
ZXF1ZW5jZV9xdWFsaXR5Ow0KKwkJaWYgKHF1YWxpdHlfc2NhbGUgPj0gMS4wKSB7DQorCQkJYmFz
ZV9xdWFsaXR5ID0gMS4wIC0gKDEuMCAtIGJhc2VfcXVhbGl0eSkgLyBxdWFsaXR5X3NjYWxlOw0K
KwkJfSBlbHNlIHsNCisJCQliYXNlX3F1YWxpdHkgPSAwLjA2NDUyICsgKGJhc2VfcXVhbGl0eSAt
IDAuMDY0NTIpICogcXVhbGl0eV9zY2FsZTsNCisJCX0NCisNCisJCW92ZXJmbG93ID0gLSgoZG91
YmxlKSBkZXZpYXRpb24gLyAoZG91YmxlKSByYy0+YnVmZmVyKTsNCisNCisJCXRhcmdldF9xdWFs
aXR5ID0gYmFzZV9xdWFsaXR5ICsgKGJhc2VfcXVhbGl0eSAtDQorCQkJCQkJCTAuMDY0NTIpICog
b3ZlcmZsb3cgLyByYy0+dGFyZ2V0X2ZyYW1lc2l6ZTsNCisNCisJCWlmICh0YXJnZXRfcXVhbGl0
eSA+IDIuMCkNCisJCQl0YXJnZXRfcXVhbGl0eSA9IDIuMDsNCisJCWVsc2UgaWYgKHRhcmdldF9x
dWFsaXR5IDwgMC4wNjQ1MikNCisJCQl0YXJnZXRfcXVhbGl0eSA9IDAuMDY0NTI7DQorDQorCQlj
YnJfcXVhbnQgPSAoaW50MzJfdCkgKDIuMCAvIHRhcmdldF9xdWFsaXR5KTsNCisNCisJCWlmIChj
YnJfcXVhbnQgPCAzMSkgew0KKwkJCXJjLT5xdWFudF9lcnJvcltjYnJfcXVhbnRdICs9IDIuMCAv
IHRhcmdldF9xdWFsaXR5IC0gY2JyX3F1YW50Ow0KKwkJCWlmIChyYy0+cXVhbnRfZXJyb3JbY2Jy
X3F1YW50XSA+PSAxLjApIHsNCisJCQkJcmMtPnF1YW50X2Vycm9yW2Nicl9xdWFudF0gLT0gMS4w
Ow0KKwkJCQljYnJfcXVhbnQrKzsNCisJCQl9DQorCQl9DQorDQorCQlpZiAoY2JyX3F1YW50ID4g
cmMtPmNicl9xdWFudCArIDEpDQorCQkJY2JyX3F1YW50ID0gcmMtPmNicl9xdWFudCArIDE7DQor
CQllbHNlIGlmIChjYnJfcXVhbnQgPCByYy0+Y2JyX3F1YW50IC0gMSkNCisJCQljYnJfcXVhbnQg
PSByYy0+Y2JyX3F1YW50IC0gMTsNCisNCisJCWlmIChjYnJfcXVhbnQgPiByYy0+bWF4X3BxdWFu
dCkNCisJCQljYnJfcXVhbnQgPSByYy0+bWF4X3BxdWFudDsNCisJCWVsc2UgaWYgKGNicl9xdWFu
dCA8IHJjLT5taW5fcHF1YW50KQ0KKwkJCWNicl9xdWFudCA9IHJjLT5taW5fcHF1YW50Ow0KKw0K
KwkJcmMtPmNicl9xdWFudCA9IGNicl9xdWFudDsNCisNCisJCWJyZWFrOw0KKwl9DQorDQorCWNh
c2UgWFZJRF9WQlIyUEFTUzEgOg0KKwl7DQorCQlOTlNUQVRTIG5uczE7DQorDQorCQkvKiB3cml0
ZSBzdGF0cyBmaWVsZCAqLw0KKw0KKwkJbm5zMS5ieXRlcyA9IGZyYW1lLT5sZW5ndGg7CS8vIHRv
dGFsIGJ5dGVzDQorCQlubnMxLmRkX3YgPSBmcmFtZS0+bGVuZ3RoIC0gKGZyYW1lLT5zU3RhdC5p
VGV4dEJpdHMgLyA4KTsJLy8gaGVhZGVyIGJ5dGVzDQorDQorCQlubnMxLmRkX3UgPSBubnMxLmRk
X3kgPSAwOw0KKwkJbm5zMS5ka192ID0gbm5zMS5ka191ID0gbm5zMS5ka195ID0gMDsNCisJCW5u
czEubWRfdSA9IG5uczEubWRfeSA9IDA7DQorCQlubnMxLm1rX3UgPSBubnMxLm1rX3kgPSAwOw0K
Kw0KKwkJbm5zMS5xdWFudCA9IDI7CQkJCS8vIHVnbHkgZml4IGZvciBsdW1pIG1hc2tpbmcgaW4g
MXN0IHBhc3MgcmV0dXJuaW5nIG5ldyBxdWFudA0KKw0KKwkJaWYgKGZyYW1lLT5jb2RpbmdfdHlw
ZSA9PSBJX1ZPUCkgew0KKwkJCW5uczEucXVhbnQgfD0gTk5TVEFUU19LRVlGUkFNRTsNCisJCX0g
ZWxzZSBpZiAoZnJhbWUtPmNvZGluZ190eXBlID09IEJfVk9QKSB7DQorCQkJbm5zMS5kZF92IHw9
IE5OU1RBVFNfQkZSQU1FOw0KKwkJfQ0KKw0KKwkJbm5zMS5rYmxrID0gZnJhbWUtPnNTdGF0Lmti
bGtzOw0KKwkJbm5zMS5tYmxrID0gZnJhbWUtPnNTdGF0Lm1ibGtzOw0KKwkJbm5zMS51YmxrID0g
ZnJhbWUtPnNTdGF0LnVibGtzOw0KKwkJbm5zMS5sdW1fbm9pc2VbMF0gPSBubnMxLmx1bV9ub2lz
ZVsxXSA9IDE7DQorCQkNCisJCURQUklOVEYoRFBSSU5URl9SQywgDQorCQkJIjFzdC1wYXNzOiBz
aXplOiVkIHRvdGFsLWtieXRlczolZCAlcyBxdWFudDolZCAlcyBrYmxvY2tzOiVkIG1ibG9ja3M6
JWQiLCANCisJCQlmcmFtZS0+bGVuZ3RoLA0KKwkJCShpbnQpcmMtPnRvdGFsX3NpemUvMTAyNCwN
CisJCQljb2RpbmdfdHlwZV9zeihmcmFtZS0+Y29kaW5nX3R5cGUpLA0KKwkJCWZyYW1lLT5xdWFu
dCwgDQorCQkJcXVhbnRfdHlwZV9zeihmcmFtZS0+Z2xvYmFsX2ZsYWdzKSwNCisJCQlmcmFtZS0+
c1N0YXQua2Jsa3MsIA0KKwkJCWZyYW1lLT5zU3RhdC5tYmxrcyk7DQorDQorCQlpZiAoZndyaXRl
KCZubnMxLCBzaXplb2YoTk5TVEFUUyksIDEsIHJjLT5zdGF0czEpICE9IDEpDQorCQl7DQorCQkJ
RFBSSU5URihEUFJJTlRGX1JDLCJzdGF0czE6IFdyaXRlRmlsZSBlcnJvciIpOw0KKwkJCXJldHVy
biAtMTsNCisJCX0NCisJCWJyZWFrOw0KKwl9DQorDQorCWNhc2UgWFZJRF9WQlIyUEFTUzIgOg0K
Kwl7DQorCQkvKiB1cGRhdGUgYnVja2V0IGJ1ZmZlciAqLw0KKw0KKwkJaW50IGluX2NyZWRpdHMg
PSBSYXRlQ29udHJvbF9pbl9jcmVkaXRzKHJjLCByYy0+ZnJhbWVfbnVtKTsNCisJCWludCB0ZW1w
ZGl2Ow0KKw0KKwkJaWYgKCFpbl9jcmVkaXRzKQ0KKwkJew0KKwkJCWlmICgocmMtPm5uczFbcmMt
PmZyYW1lX251bV0ucXVhbnQgJiBOTlNUQVRTX0tFWUZSQU1FKSkNCisJCQl7DQorCQkJCS8vIGNh
bGN1bGF0ZSBob3cgbXVjaCB0byBkaXN0cmlidXRlIHBlciBmcmFtZSBpbg0KKwkJCQkvLyBvcmRl
ciB0byBtYWtlIHVwIGZvciB0aGlzIGtleWZyYW1lJ3Mgb3ZlcmZsb3cNCisNCisJCQkJcmMtPm92
ZXJmbG93ICs9IHJjLT5LRm92ZXJmbG93Ow0KKwkJCQlyYy0+S0ZvdmVyZmxvdyA9IHJjLT5kZXNp
cmVkX2J5dGVzIC0gZnJhbWUtPmxlbmd0aDsNCisNCisJCQkJdGVtcGRpdiA9IChyYy0+a2V5ZnJh
bWVfbG9jYXRpb25zW3JjLT5LRl9pZHhdIC0NCisJCQkJCXJjLT5rZXlmcmFtZV9sb2NhdGlvbnNb
cmMtPktGX2lkeCAtIDFdKTsNCisNCisJCQkJaWYgKHRlbXBkaXYgPiAxKQ0KKwkJCQl7DQorCQkJ
CQkvLyBub24tY29uc2VjdXRpdmUga2V5ZnJhbWVzDQorCQkJCQlyYy0+S0ZvdmVyZmxvd19wYXJ0
aWFsID0gcmMtPktGb3ZlcmZsb3cgLyAodGVtcGRpdiAtIDEpOw0KKwkJCQl9DQorCQkJCWVsc2UN
CisJCQkJew0KKwkJCQkJLy8gY29uc2VjdXRpdmUga2V5ZnJhbWVzDQorCQkJCQlyYy0+b3ZlcmZs
b3cgKz0gcmMtPktGb3ZlcmZsb3c7DQorCQkJCQlyYy0+S0ZvdmVyZmxvdyA9IDA7DQorCQkJCQly
Yy0+S0ZvdmVyZmxvd19wYXJ0aWFsID0gMDsNCisJCQkJfQ0KKwkJCQlyYy0+S0ZfaWR4Kys7DQor
CQkJfQ0KKwkJCWVsc2UNCisJCQl7DQorCQkJCS8vIGRpc3RyaWJ1dGUgcGFydCBvZiB0aGUga2V5
ZnJhbWUgb3ZlcmZsb3cNCisNCisJCQkJcmMtPm92ZXJmbG93ICs9IHJjLT5kZXNpcmVkX2J5dGVz
IC0gZnJhbWUtPmxlbmd0aCArDQorCQkJCQlyYy0+S0ZvdmVyZmxvd19wYXJ0aWFsOw0KKwkJCQly
Yy0+S0ZvdmVyZmxvdyAtPSByYy0+S0ZvdmVyZmxvd19wYXJ0aWFsOw0KKwkJCX0NCisJCX0NCisJ
CWVsc2UNCisJCXsNCisJCQlyYy0+b3ZlcmZsb3cgKz0gcmMtPmRlc2lyZWRfYnl0ZXMgLSBmcmFt
ZS0+bGVuZ3RoOw0KKw0KKwkJCS8vIHVnbHkgZml4IGZvciBjcmVkaXRzLi4NCisJCQlyYy0+b3Zl
cmZsb3cgKz0gcmMtPktGb3ZlcmZsb3c7DQorCQkJcmMtPktGb3ZlcmZsb3cgPSAwOw0KKwkJCXJj
LT5LRm92ZXJmbG93X3BhcnRpYWwgPSAwOw0KKwkJfQ0KKw0KKwkJRFBSSU5URihEUFJJTlRGX1JD
LCAiMm5kLXBhc3M6IHF1YW50OiVkICVzICVzIHN0YXRzMTolZCBzY2FsZWQ6JWQgYWN0dWFsOiVk
IG92ZXJmbG93OiVkICVzIiwNCisJCQlmcmFtZS0+cXVhbnQsDQorCQkJcXVhbnRfdHlwZV9zeihm
cmFtZS0+Z2xvYmFsX2ZsYWdzKSwNCisJCQljb2RpbmdfdHlwZV9zeihmcmFtZS0+Y29kaW5nX3R5
cGUpLCANCisJCQlyYy0+Ynl0ZXMxLCANCisJCQlyYy0+ZGVzaXJlZF9ieXRlcywgDQorCQkJZnJh
bWUtPmxlbmd0aCwgDQorCQkJcmMtPm92ZXJmbG93LCANCisJCQlpbl9jcmVkaXRzID8gImNyZWRp
dHMiIDogIm1vdmllIik7DQorCQlicmVhazsNCisJfQ0KKw0KKwlkZWZhdWx0IDoNCisJCXJldHVy
biAtMTsNCisJDQorCX0NCisNCisJcmMtPmZyYW1lX251bSsrOw0KKw0KKwlyZXR1cm4gMDsNCiB9
DQorDQpJbmRleDogc3JjL3V0aWxzL3JhdGVjb250cm9sLmgNCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0NClJDUyBmaWxl
OiAveHZpZC94dmlkY29yZS9zcmMvdXRpbHMvcmF0ZWNvbnRyb2wuaCx2DQpyZXRyaWV2aW5nIHJl
dmlzaW9uIDEuNQ0KZGlmZiAtdSAtcjEuNSByYXRlY29udHJvbC5oDQotLS0gc3JjL3V0aWxzL3Jh
dGVjb250cm9sLmgJMTIgSnVuIDIwMDIgMjA6Mzg6NDEgLTAwMDAJMS41DQorKysgc3JjL3V0aWxz
L3JhdGVjb250cm9sLmgJNyBEZWMgMjAwMiAwMToyNTo0NCAtMDAwMA0KQEAgLTIsMzYgKzIsMTAg
QEANCiAjZGVmaW5lIF9SQVRFQ09OVFJPTF9IXw0KIA0KICNpbmNsdWRlICIuLi9wb3J0YWIuaCIN
CisjaW5jbHVkZSAiLi4veHZpZC5oIg0KKyNpbmNsdWRlICIuLi9lbmNvZGVyLmgiDQogDQotdHlw
ZWRlZiBzdHJ1Y3QNCi17DQotCWludDY0X3Qgc2l6ZTsNCi0JaW50MzJfdCBjb3VudDsNCi19DQot
UXVhbnRJbmZvOw0KLQ0KLXR5cGVkZWYgc3RydWN0DQotew0KLQlpbnQzMl90IHJ0bl9xdWFudDsN
Ci0JaW50NjRfdCBmcmFtZXM7DQotCWludDY0X3QgdG90YWxfc2l6ZTsNCi0JZG91YmxlIGZyYW1l
cmF0ZTsNCi0JaW50MzJfdCB0YXJnZXRfcmF0ZTsNCi0JaW50MTZfdCBtYXhfcXVhbnQ7DQotCWlu
dDE2X3QgbWluX3F1YW50Ow0KLQlpbnQ2NF90IGxhc3RfY2hhbmdlOw0KLQlpbnQ2NF90IHF1YW50
X3N1bTsNCi0JZG91YmxlIHF1YW50X2Vycm9yWzMyXTsNCi0JZG91YmxlIGF2Z19mcmFtZXNpemU7
DQotCWRvdWJsZSB0YXJnZXRfZnJhbWVzaXplOw0KLQlkb3VibGUgc2VxdWVuY2VfcXVhbGl0eTsN
Ci0JaW50MzJfdCBhdmVyYWdpbmdfcGVyaW9kOw0KLQlpbnQzMl90IHJlYWN0aW9uX2RlbGF5X2Zh
Y3RvcjsNCi0JaW50MzJfdCBidWZmZXI7DQotfQ0KLVJhdGVDb250cm9sOw0KLQ0KLXZvaWQgUmF0
ZUNvbnRyb2xJbml0KFJhdGVDb250cm9sICogcmF0ZV9jb250cm9sLA0KK3ZvaWQgUmF0ZUNvbnRy
b2xJbml0Q0JSKFJhdGVDb250cm9sICogcmF0ZV9jb250cm9sLA0KIAkJCQkJIHVpbnQzMl90IHRh
cmdldF9yYXRlLA0KIAkJCQkJIHVpbnQzMl90IHJlYWN0aW9uX2RlbGF5X2ZhY3RvciwNCiAJCQkJ
CSB1aW50MzJfdCBhdmVyYWdpbmdfcGVyaW9kLA0KQEAgLTQwLDEyICsxNCwxNiBAQA0KIAkJCQkJ
IGludCBtYXhfcXVhbnQsDQogCQkJCQkgaW50IG1pbl9xdWFudCk7DQogDQotaW50IFJhdGVDb250
cm9sR2V0UShSYXRlQ29udHJvbCAqIHJhdGVfY29udHJvbCwNCi0JCQkJCWludCBrZXlmcmFtZSk7
DQoraW50IFJhdGVDb250cm9sSW5pdChSYXRlQ29udHJvbCAqIHJhdGVfY29udHJvbCwNCisJCQkJ
CSBYVklEX0VOQ19QQVJBTSAqIHBhcmFtLA0KKwkJCQkJIFhWSURfRU5DX1JDICogcmNwYXJhbSk7
DQorDQordm9pZCBSYXRlQ29udHJvbERlSW5pdChSYXRlQ29udHJvbCAqIHJjKTsNCisNCisNCitp
bnQgUmF0ZUNvbnRyb2xHZXRRKFJhdGVDb250cm9sICogcmF0ZV9jb250cm9sLCBpbnQgKiBjb2Rp
bmdfdHlwZSk7DQogDQotdm9pZCBSYXRlQ29udHJvbFVwZGF0ZShSYXRlQ29udHJvbCAqIHJhdGVf
Y29udHJvbCwNCi0JCQkJCSAgIGludDE2X3QgcXVhbnQsDQotCQkJCQkgICBpbnQgZnJhbWVfc2l6
ZSwNCi0JCQkJCSAgIGludCBrZXlmcmFtZSk7DQoraW50IFJhdGVDb250cm9sVXBkYXRlKFJhdGVD
b250cm9sICogcmF0ZV9jb250cm9sLCANCisJCQkJCSAgIEZSQU1FSU5GTyAqIGZyYW1lKTsNCiAN
CiAjZW5kaWYJCQkJCQkJLyogX1JBVEVDT05UUk9MX0hfICovDQo=

--------_3E03C1A49C25038DF00C_MULTIPART_MIXED_
Content-Type: application/octet-stream; name="rc-vfw.diff"
Content-Disposition: attachment;
 filename="rc-vfw.diff"
Content-Transfer-Encoding: base64

PyB2ZncubmNiDQo/IFJlbGVhc2VfU01QDQo/IHZmdy5wbGcNCj8gUmVsZWFzZQ0KPyB2Zncub3B0
DQo/IERlYnVnDQo/IGJpbi94dmlkLmRsbA0KPyBzcmMvY29uZmlnLmFwcw0KSW5kZXg6IHNyYy8y
cGFzcy5jDQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09DQpSQ1MgZmlsZTogL3h2aWQvdmZ3L3NyYy8ycGFzcy5jLHYNCnJl
dHJpZXZpbmcgcmV2aXNpb24gMS43LjIuNQ0KZGlmZiAtdSAtcjEuNy4yLjUgMnBhc3MuYw0KLS0t
IHNyYy8ycGFzcy5jCTI4IE5vdiAyMDAyIDA3OjQzOjE2IC0wMDAwCTEuNy4yLjUNCisrKyBzcmMv
MnBhc3MuYwk3IERlYyAyMDAyIDAxOjI3OjM4IC0wMDAwDQpAQCAtMzMzLDYgKzMzMywxNSBAQA0K
IA0KIAkJCQkrK2ZyYW1lczsNCiAJCQl9DQorDQorCQkJLypEUFJJTlRGKCJiZnJhbWVzPSVpLCBi
ZnJhbWVfdG90YWxfZXh0PSVpLCBwZnJhbWVzPSVpLCBwZnJhbWVfdG90YWxfZXh0PSVpLCByYy0+
bW92aWVfY3VydmU9JWkiLA0KKwkJCQliZnJhbWVzLA0KKwkJCQliZnJhbWVfdG90YWxfZXh0LA0K
KwkJCQlwZnJhbWVzLA0KKwkJCQlwZnJhbWVfdG90YWxfZXh0LA0KKwkJCQl0d29wYXNzLT5tb3Zp
ZV9jdXJ2ZSk7Ki8NCisNCisNCiAJCQl0d29wYXNzLT5rZXlmcmFtZV9sb2NhdGlvbnNbaV9mcmFt
ZXNdID0gZnJhbWVzOw0KIA0KIAkJCXR3b3Bhc3MtPm1vdmllX2N1cnZlID0gKChkb3VibGUpKGJm
cmFtZV90b3RhbF9leHQgKyBwZnJhbWVfdG90YWxfZXh0ICsgaV9ib29zdF90b3RhbCkgLw0KQEAg
LTQyMSw2ICs0MzAsNyBAQA0KIAkJCQkJdHdvcGFzcy0+bWluYnNpemUgPSAodHdvcGFzcy0+bm5z
MS5rYmxrICsgODgpIC8gODsNCiAJCQkJCXR3b3Bhc3MtPm1pbnBzaXplID0gKHR3b3Bhc3MtPm5u
czEua2JsayArIDg4KSAvIDg7DQogCQkJCQl0d29wYXNzLT5taW5pc2l6ZSA9ICgodHdvcGFzcy0+
bm5zMS5rYmxrICogMjIpICsgMjQwKSAvIDg7DQorCQkJCQkvKkRQUklOVEYoInJjLT5taW5pc2l6
ZSA9ICVpIGluaXQiLCB0d29wYXNzLT5taW5pc2l6ZSk7Ki8NCiAJCQkJCWlmIChyZWNtaW5ic2l6
ZSA+IHR3b3Bhc3MtPm1pbmJzaXplKQ0KIAkJCQkJCXR3b3Bhc3MtPm1pbmJzaXplID0gcmVjbWlu
YnNpemU7DQogCQkJCQlpZiAocmVjbWlucHNpemUgPiB0d29wYXNzLT5taW5wc2l6ZSkNCkBAIC05
ODgsNyArOTk4LDcgQEANCiANCiAJaWYgKHR3b3Bhc3MtPm5uc19hcnJheV9wb3MgPj0gdHdvcGFz
cy0+bm5zX2FycmF5X2xlbmd0aCkNCiAJew0KLQkJdHdvcGFzcy0+bm5zX2FycmF5X3BvcyA9IDA7
DQorCQkvKnR3b3Bhc3MtPm5uc19hcnJheV9wb3MgPSAwOyovDQogCQlERUJVR0VSUigiRVJST1I6
IFZJREVPIEVYQ0VFRFMgMVNUIFBBU1MhISEiKTsNCiAJCXJldHVybiBJQ0VSUl9FUlJPUjsNCiAJ
fQ0KQEAgLTExMTMsNiArMTEyMyw4IEBADQogDQogCQlieXRlczIgPSAoY29kZWMtPmNvbmZpZy5t
b2RlID09IERMR19NT0RFXzJQQVNTXzJfSU5UKSA/IGJ5dGVzMSA6IHR3b3Bhc3MtPm5uczIuYnl0
ZXM7DQogDQorCQlEUFJJTlRGKCIgICBieXRlczI9JWkgYnl0ZXMxPSVpIG5uczItPmJ5dGVzPSVp
IiwgYnl0ZXMyLCBieXRlczEsIChjb2RlYy0+Y29uZmlnLm1vZGUgPT0gRExHX01PREVfMlBBU1Nf
Ml9JTlQpICA/IC0xIDogdHdvcGFzcy0+bm5zMi5ieXRlcyk7DQorDQogCQlpZiAoZnJhbWUtPmlu
dHJhPT0xKQ0KIAkJew0KIAkJCWRieXRlcyA9ICgoaW50KShieXRlczIgKyBieXRlczIgKiBjb2Rl
Yy0+Y29uZmlnLmtleWZyYW1lX2Jvb3N0IC8gMTAwKSkgLw0KQEAgLTExMjYsMTAgKzExMzgsMTUg
QEANCiAJCWlmICh0d29wYXNzLT5ubnMxLmRkX3YgJiBOTlNUQVRTX0JGUkFNRSkNCiAJCQlkYnl0
ZXMgKj0gdHdvcGFzcy0+YXZlcmFnZV9wZnJhbWUgLyB0d29wYXNzLT5hdmVyYWdlX2JmcmFtZTsN
CiANCisJCS8qRFBSSU5URiggInJjLT5jdXJ2ZV9jb21wX2Vycm9yPSVpLCByYy0+Yml0cmF0ZV9w
YXliYWNrX2RlbGF5PSVpIiwNCisJCQljdXJ2ZV9jb21wX2Vycm9yLA0KKwkJCWNvZGVjLT5jb25m
aWcuYml0cmF0ZV9wYXliYWNrX2RlbGF5KTsqLw0KKw0KIAkJLy8gc3ByZWFkIHRoZSBjb21wcmVz
c2lvbiBlcnJvciBhY3Jvc3MgcGF5YmFja19kZWxheSBmcmFtZXMNCiAJCWlmIChjb2RlYy0+Y29u
ZmlnLmJpdHJhdGVfcGF5YmFja19tZXRob2QgPT0gMCkNCiAJCXsNCiAJCQlieXRlczIgPSAoaW50
KShjdXJ2ZV9jb21wX2Vycm9yIC8gY29kZWMtPmNvbmZpZy5iaXRyYXRlX3BheWJhY2tfZGVsYXkp
Ow0KKwkJCURQUklOVEYoIiAgIGJpYXM6IGJ5dGVzMj0laSIsYnl0ZXMyKTsNCiAJCX0NCiAJCWVs
c2UNCiAJCXsNCkBAIC0xMTQyLDYgKzExNTksOCBAQA0KIAkJCX0NCiAJCX0NCiANCisJCS8qRFBS
SU5URigiYWZ0ZXIgcGFja2JhY2sgYnl0ZXMyPSVpIiwgYnl0ZXMyKTsqLw0KKw0KIAkJY3VydmVf
Y29tcF9lcnJvciAtPSBieXRlczI7DQogDQogCQlpZiAoY29kZWMtPmNvbmZpZy51c2VfYWx0X2N1
cnZlKQ0KQEAgLTEyMjksNiArMTI0OCw3IEBADQogCQkJCWN1cnZlX3RlbXAgKj0gdHdvcGFzcy0+
YXZlcmFnZV9iZnJhbWUgLyB0d29wYXNzLT5hdmVyYWdlX3BmcmFtZTsNCiANCiAJCQlieXRlczIg
Kz0gKChpbnQpY3VydmVfdGVtcCk7DQorCQkJRFBSSU5URigiICAgY3VydmU6IGJ5dGVzMj0laSIs
Ynl0ZXMyKTsNCiAJCQljdXJ2ZV9jb21wX2Vycm9yICs9IGN1cnZlX3RlbXAgLSAoKGludCljdXJ2
ZV90ZW1wKTsNCiAJCX0NCiAJCWVsc2UNCkBAIC0xMjM3LDYgKzEyNTcsNyBAQA0KIAkJCQlkYnl0
ZXMgKj0gdHdvcGFzcy0+YXZlcmFnZV9iZnJhbWUgLyB0d29wYXNzLT5hdmVyYWdlX3BmcmFtZTsN
CiANCiAJCQlieXRlczIgKz0gKChpbnQpZGJ5dGVzKTsNCisJCQlEUFJJTlRGKCIgICBjdXJ2ZTI6
IGJ5dGVzMj0laSIsYnl0ZXMyKTsNCiAJCQljdXJ2ZV9jb21wX2Vycm9yICs9IGRieXRlcyAtICgo
aW50KWRieXRlcyk7DQogCQl9DQogDQpAQCAtMTI2OCw2ICsxMjg5LDcgQEANCiAJCQl9DQogCQl9
DQogCX0NCisJRFBSSU5URiggIiAgIGNhcDogYnl0ZXMyPSVpIiwgYnl0ZXMyKTsNCiANCiAJdHdv
cGFzcy0+ZGVzaXJlZF9ieXRlczIgPSBieXRlczI7DQogDQpAQCAtMTI5Myw2ICsxMzE1LDggQEAN
CiANCiAJCQkJaWYgKGJ5dGVzMiA8IDEpDQogCQkJCQlieXRlczIgPSAxOw0KKw0KKwkJCQlEUFJJ
TlRGKCIgICBrZjogYnl0ZXMyPSVpIiwgYnl0ZXMyKTsNCiAJCQl9DQogCQl9DQogCX0NCkBAIC0x
MzEyLDE0ICsxMzM2LDE3IEBADQogCXsNCiAJCWJ5dGVzMiArPSAob3ZlcmZsb3cgPD0gYnl0ZXMy
KSA/IGJ5dGVzMiAqIGNvZGVjLT5jb25maWcudHdvcGFzc19tYXhfb3ZlcmZsb3dfaW1wcm92ZW1l
bnQgLyAxMDAgOg0KIAkJCW92ZXJmbG93ICogY29kZWMtPmNvbmZpZy50d29wYXNzX21heF9vdmVy
Zmxvd19pbXByb3ZlbWVudCAvIDEwMDsNCisJCURQUklOVEYoIiAgIG92ZXJmbG93MTogYnl0ZXMy
PSVpLG92ZXJmbG93PSVpIiwgYnl0ZXMyLCBvdmVyZmxvdyk7DQogCX0NCiAJZWxzZSBpZiAob3Zl
cmZsb3cgPCBieXRlczIgKiBjb2RlYy0+Y29uZmlnLnR3b3Bhc3NfbWF4X292ZXJmbG93X2RlZ3Jh
ZGF0aW9uIC8gLTEwMCkNCiAJew0KIAkJYnl0ZXMyICs9IGJ5dGVzMiAqIGNvZGVjLT5jb25maWcu
dHdvcGFzc19tYXhfb3ZlcmZsb3dfZGVncmFkYXRpb24gLyAtMTAwOw0KKwkJRFBSSU5URigiICAg
b3ZlcmZsb3cyOiBieXRlczI9JWksb3ZlcmZsb3c9JWkiLCBieXRlczIsIG92ZXJmbG93KTsNCiAJ
fQ0KIAllbHNlDQogCXsNCiAJCWJ5dGVzMiArPSBvdmVyZmxvdzsNCisJCURQUklOVEYoIiAgIG92
ZXJmbG93MzogYnl0ZXMyPSVpLG92ZXJmbG93PSVpIiwgYnl0ZXMyLCBvdmVyZmxvdyk7DQogCX0N
CiANCiAJaWYgKGJ5dGVzMiA+IHR3b3Bhc3MtPm1heF9mcmFtZXNpemUpDQpAQCAtMTM0NSwxMSAr
MTM3MiwxNyBAQA0KIAkJCWJ5dGVzMiA9IHR3b3Bhc3MtPm1pbnBzaXplOw0KIAl9DQogDQorCURQ
UklOVEYoIiAgIG1pbnNpemU6IGJ5dGVzMj0laSIsIGJ5dGVzMik7DQorDQogCXR3b3Bhc3MtPmJ5
dGVzMSA9IGJ5dGVzMTsNCiAJdHdvcGFzcy0+Ynl0ZXMyID0gYnl0ZXMyOw0KIA0KIAkvLyB2ZXJ5
ICdzaW1wbGUnIHF1YW50PC0+ZmlsZXNpemUgcmVsYXRpb25zaGlwDQogCWZyYW1lLT5xdWFudCA9
ICgodHdvcGFzcy0+bm5zMS5xdWFudCAmIH5OTlNUQVRTX0tFWUZSQU1FKSAqIGJ5dGVzMSkgLyBi
eXRlczI7DQorDQorCURQUklOVEYoIiAgIHF1YW50PSVpICBubnMxLT5xdWFudD0laSwgYnl0ZXMx
PSVpLCBieXRlczI9JWkiLA0KKwkJZnJhbWUtPnF1YW50LCAodHdvcGFzcy0+bm5zMS5xdWFudCAm
IH5OTlNUQVRTX0tFWUZSQU1FKSwgYnl0ZXMxLCBieXRlczIpOw0KKw0KIA0KIAlpZiAoZnJhbWUt
PnF1YW50IDwgMSkNCiAJew0KSW5kZXg6IHNyYy9jb2RlYy5jDQo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09DQpSQ1MgZmls
ZTogL3h2aWQvdmZ3L3NyYy9jb2RlYy5jLHYNCnJldHJpZXZpbmcgcmV2aXNpb24gMS4yMy4yLjEw
DQpkaWZmIC11IC1yMS4yMy4yLjEwIGNvZGVjLmMNCi0tLSBzcmMvY29kZWMuYwkyMSBOb3YgMjAw
MiAxMjo1MToyOCAtMDAwMAkxLjIzLjIuMTANCisrKyBzcmMvY29kZWMuYwk3IERlYyAyMDAyIDAx
OjI3OjQxIC0wMDAwDQpAQCAtMjM5LDggKzIzOSwxMiBAQA0KIExSRVNVTFQgY29tcHJlc3NfYmVn
aW4oQ09ERUMgKiBjb2RlYywgQklUTUFQSU5GTyAqIGxwYmlJbnB1dCwgQklUTUFQSU5GTyAqIGxw
YmlPdXRwdXQpDQogew0KIAlYVklEX0VOQ19QQVJBTSBwYXJhbTsNCisJWFZJRF9FTkNfUkMgcmM7
DQogCVhWSURfSU5JVF9QQVJBTSBpbml0X3BhcmFtOw0KIA0KK2lmICghY29kZWMtPmNvbmZpZy5y
Y194dmlkY29yZSkNCit7DQorDQogCXN3aXRjaCAoY29kZWMtPmNvbmZpZy5tb2RlKSANCiAJew0K
IAljYXNlIERMR19NT0RFX0NCUiA6DQpAQCAtMjczLDYgKzI3NywxMDAgQEANCiAJZGVmYXVsdCA6
DQogCQlicmVhazsNCiAJfQ0KK31lbHNlew0KKwltZW1zZXQoJnJjLCAwLCBzaXplb2YoWFZJRF9F
TkNfUkMpKTsNCisJcmMudmVyc2lvbiA9IEFQSV9WRVJTSU9OOw0KKw0KKwlyYy5jcmVkaXRzX3N0
YXJ0ID0gY29kZWMtPmNvbmZpZy5jcmVkaXRzX3N0YXJ0Ow0KKwlyYy5jcmVkaXRzX3N0YXJ0X2Jl
Z2luID0gY29kZWMtPmNvbmZpZy5jcmVkaXRzX3N0YXJ0X2JlZ2luOw0KKwlyYy5jcmVkaXRzX3N0
YXJ0X2VuZCA9IGNvZGVjLT5jb25maWcuY3JlZGl0c19zdGFydF9lbmQ7DQorCXJjLmNyZWRpdHNf
ZW5kID0gY29kZWMtPmNvbmZpZy5jcmVkaXRzX2VuZDsNCisJcmMuY3JlZGl0c19lbmRfYmVnaW4g
PSBjb2RlYy0+Y29uZmlnLmNyZWRpdHNfZW5kX2JlZ2luOw0KKwlyYy5jcmVkaXRzX2VuZF9lbmQg
PSBjb2RlYy0+Y29uZmlnLmNyZWRpdHNfZW5kX2VuZDsNCisNCisJcmMuY3JlZGl0c19tb2RlID0g
Y29kZWMtPmNvbmZpZy5jcmVkaXRzX21vZGU7DQorCXJjLmNyZWRpdHNfZ3JleXNjYWxlID0gY29k
ZWMtPmNvbmZpZy5jcmVkaXRzX2dyZXlzY2FsZTsNCisJcmMuY3JlZGl0c19yYXRlID0gY29kZWMt
PmNvbmZpZy5jcmVkaXRzX3JhdGU7DQorCXJjLmNyZWRpdHNfcXVhbnRfaSA9IGNvZGVjLT5jb25m
aWcuY3JlZGl0c19xdWFudF9pOw0KKwlyYy5jcmVkaXRzX3F1YW50X3AgPSBjb2RlYy0+Y29uZmln
LmNyZWRpdHNfcXVhbnRfcDsNCisNCisJc3dpdGNoIChjb2RlYy0+Y29uZmlnLm1vZGUpIA0KKwl7
DQorCWNhc2UgRExHX01PREVfTlVMTCA6DQorCQlyZXR1cm4gSUNFUlJfT0s7DQorDQorDQorCWNh
c2UgRExHX01PREVfVkJSX1FVQUwgOg0KKwkJLyogWFhYOiBkZWJ1ZzsgcmVtb3ZlICJxdWFsaXR5
IiBiYXNlZCBlbmNvZGluZywgaXRzIGR1bWIgKi8NCisJCXJjLm1vZGUgPSBYVklEX0ZJWEVEUVVB
TlQ7DQorCQlyYy5kYXRhLmZpeGVkX3F1YW50LnF1YW50ID0gKChmbG9hdCljb2RlYy0+Y29uZmln
LnF1YWxpdHkpIC8gMTA7DQorCQlicmVhazsNCisNCisJY2FzZSBETEdfTU9ERV9WQlJfUVVBTlQg
Og0KKwkJcmMubW9kZSA9IFhWSURfRklYRURRVUFOVDsNCisJCXJjLmRhdGEuZml4ZWRfcXVhbnQu
cXVhbnQgPSAoZmxvYXQpY29kZWMtPmNvbmZpZy5xdWFudDsNCisJCWJyZWFrOw0KKwkNCisJY2Fz
ZSBETEdfTU9ERV9DQlIgOg0KKwkJcmMubW9kZSA9IFhWSURfQ0JSOw0KKwkJcmMuZGF0YS5jYnIu
Yml0cmF0ZSA9IGNvZGVjLT5jb25maWcucmNfYml0cmF0ZTsNCisJCXJjLmRhdGEuY2JyLnJlYWN0
aW9uX2RlbGF5X2ZhY3RvciA9IGNvZGVjLT5jb25maWcucmNfcmVhY3Rpb25fZGVsYXlfZmFjdG9y
Ow0KKwkJcmMuZGF0YS5jYnIuYXZlcmFnaW5nX3BlcmlvZCA9IGNvZGVjLT5jb25maWcucmNfYXZl
cmFnaW5nX3BlcmlvZDsNCisJCXJjLmRhdGEuY2JyLmJ1ZmZlciA9IGNvZGVjLT5jb25maWcucmNf
YnVmZmVyOw0KKwkJYnJlYWs7DQorDQorCWNhc2UgRExHX01PREVfMlBBU1NfMSA6DQorCQlyYy5t
b2RlID0gWFZJRF9WQlIyUEFTUzE7DQorCQlyYy5kYXRhLnZicjJwYXNzMS5zdGF0X2ZpbGUgPSBj
b2RlYy0+Y29uZmlnLnN0YXRzMTsNCisJCWJyZWFrOw0KKw0KKwljYXNlIERMR19NT0RFXzJQQVNT
XzJfRVhUIDoNCisJY2FzZSBETEdfTU9ERV8yUEFTU18yX0lOVCA6DQorDQorCQkJcmMubW9kZSA9
IFhWSURfVkJSMlBBU1MyOw0KKw0KKwkJCWlmIChjb2RlYy0+Y29uZmlnLm1vZGUgPT0gRExHX01P
REVfMlBBU1NfMl9FWFQpDQorCQkJew0KKwkJCQlyYy5kYXRhLnZicjJwYXNzMi5zdGF0czJfZmls
ZSA9IGNvZGVjLT5jb25maWcuc3RhdHMyOw0KKwkJCX0NCisJCQllbHNlDQorCQkJew0KKwkJCQly
Yy5kYXRhLnZicjJwYXNzMi5zdGF0czJfZmlsZSA9IE5VTEw7DQorCQkJfQ0KKwkJCQ0KKwkJCXJj
LmRhdGEudmJyMnBhc3MyLnN0YXRzMV9maWxlID0gY29kZWMtPmNvbmZpZy5zdGF0czE7DQorDQor
CQkJcmMuZGF0YS52YnIycGFzczIuZGVzaXJlZF9zaXplID0gY29kZWMtPmNvbmZpZy5kZXNpcmVk
X3NpemU7DQorDQorCQkJcmMuZGF0YS52YnIycGFzczIuY3JlZGl0c19zdGFydF9zaXplID0gY29k
ZWMtPmNvbmZpZy5jcmVkaXRzX3N0YXJ0X3NpemU7DQorCQkJcmMuZGF0YS52YnIycGFzczIuY3Jl
ZGl0c19lbmRfc2l6ZSA9IGNvZGVjLT5jb25maWcuY3JlZGl0c19lbmRfc2l6ZTsNCisNCisJCQly
Yy5kYXRhLnZicjJwYXNzMi5rZXlmcmFtZV9ib29zdCA9IGNvZGVjLT5jb25maWcua2V5ZnJhbWVf
Ym9vc3Q7DQorCQkJcmMuZGF0YS52YnIycGFzczIua2Z0cmVzaG9sZCA9IGNvZGVjLT5jb25maWcu
a2Z0cmVzaG9sZDsNCisJCQlyYy5kYXRhLnZicjJwYXNzMi5rZnJlZHVjdGlvbiA9IGNvZGVjLT5j
b25maWcua2ZyZWR1Y3Rpb247DQorCQkJcmMuZGF0YS52YnIycGFzczIuY3VydmVfY29tcHJlc3Np
b25faGlnaCA9IGNvZGVjLT5jb25maWcuY3VydmVfY29tcHJlc3Npb25faGlnaDsNCisJCQlyYy5k
YXRhLnZicjJwYXNzMi5jdXJ2ZV9jb21wcmVzc2lvbl9sb3cgPSBjb2RlYy0+Y29uZmlnLmN1cnZl
X2NvbXByZXNzaW9uX2xvdzsNCisJCQlyYy5kYXRhLnZicjJwYXNzMi51c2VfYWx0X2N1cnZlID0g
Y29kZWMtPmNvbmZpZy51c2VfYWx0X2N1cnZlOw0KKwkJCXJjLmRhdGEudmJyMnBhc3MyLmFsdF9j
dXJ2ZV91c2VfYXV0byA9IGNvZGVjLT5jb25maWcuYWx0X2N1cnZlX3VzZV9hdXRvOw0KKwkJCXJj
LmRhdGEudmJyMnBhc3MyLmFsdF9jdXJ2ZV9hdXRvX3N0ciA9IGNvZGVjLT5jb25maWcuYWx0X2N1
cnZlX2F1dG9fc3RyOw0KKwkJCXJjLmRhdGEudmJyMnBhc3MyLmFsdF9jdXJ2ZV91c2VfYXV0b19i
b251c19iaWFzID0gY29kZWMtPmNvbmZpZy5hbHRfY3VydmVfdXNlX2F1dG9fYm9udXNfYmlhczsN
CisJCQlyYy5kYXRhLnZicjJwYXNzMi5hbHRfY3VydmVfYm9udXNfYmlhcyA9IGNvZGVjLT5jb25m
aWcuYWx0X2N1cnZlX2JvbnVzX2JpYXM7DQorCQkJcmMuZGF0YS52YnIycGFzczIuYWx0X2N1cnZl
X3R5cGUgPSBjb2RlYy0+Y29uZmlnLmFsdF9jdXJ2ZV90eXBlOw0KKwkJCXJjLmRhdGEudmJyMnBh
c3MyLmFsdF9jdXJ2ZV9oaWdoX2Rpc3QgPSBjb2RlYy0+Y29uZmlnLmFsdF9jdXJ2ZV9oaWdoX2Rp
c3Q7DQorCQkJcmMuZGF0YS52YnIycGFzczIuYWx0X2N1cnZlX2xvd19kaXN0ID0gY29kZWMtPmNv
bmZpZy5hbHRfY3VydmVfbG93X2Rpc3Q7DQorCQkJcmMuZGF0YS52YnIycGFzczIuYWx0X2N1cnZl
X21pbl9yZWxfcXVhbCA9IGNvZGVjLT5jb25maWcuYWx0X2N1cnZlX21pbl9yZWxfcXVhbDsNCisJ
CQlyYy5kYXRhLnZicjJwYXNzMi50d29wYXNzX21heF9iaXRyYXRlID0gY29kZWMtPmNvbmZpZy50
d29wYXNzX21heF9iaXRyYXRlOw0KKwkJCXJjLmRhdGEudmJyMnBhc3MyLnR3b3Bhc3NfbWF4X292
ZXJmbG93X2ltcHJvdmVtZW50ID0gY29kZWMtPmNvbmZpZy50d29wYXNzX21heF9vdmVyZmxvd19p
bXByb3ZlbWVudDsNCisJCQlyYy5kYXRhLnZicjJwYXNzMi50d29wYXNzX21heF9vdmVyZmxvd19k
ZWdyYWRhdGlvbiA9IGNvZGVjLT5jb25maWcudHdvcGFzc19tYXhfb3ZlcmZsb3dfZGVncmFkYXRp
b247DQorCQkJcmMuZGF0YS52YnIycGFzczIuYml0cmF0ZV9wYXliYWNrX2RlbGF5ID0gY29kZWMt
PmNvbmZpZy5iaXRyYXRlX3BheWJhY2tfZGVsYXk7DQorCQkJcmMuZGF0YS52YnIycGFzczIuYml0
cmF0ZV9wYXliYWNrX21ldGhvZCA9IGNvZGVjLT5jb25maWcuYml0cmF0ZV9wYXliYWNrX21ldGhv
ZDsNCisJCQlyYy5kYXRhLnZicjJwYXNzMi5taW5fa2V5X2ludGVydmFsPWNvZGVjLT5jb25maWcu
bWluX2tleV9pbnRlcnZhbDsNCisJCQlicmVhazsNCisNCisJCWRlZmF1bHQgOg0KKwkJCWJyZWFr
Ow0KKwl9DQorfQ0KIA0KIAlpZihjb2RlYy0+ZWhhbmRsZSkNCiAJew0KQEAgLTMwNyw3ICs0MDUs
NyBAQA0KIAlwYXJhbS5icXVhbnRfb2Zmc2V0ID0gY29kZWMtPmNvbmZpZy5icXVhbnRfb2Zmc2V0
Ow0KIAlwYXJhbS5mcmFtZV9kcm9wX3JhdGlvID0gY29kZWMtPmNvbmZpZy5mcmFtZV9kcm9wX3Jh
dGlvOw0KIA0KLQlzd2l0Y2goeHZpZF9lbmNvcmUoMCwgWFZJRF9FTkNfQ1JFQVRFLCAmcGFyYW0s
IE5VTEwpKSANCisJc3dpdGNoKHh2aWRfZW5jb3JlKDAsIFhWSURfRU5DX0NSRUFURSwgJnBhcmFt
LCBjb2RlYy0+Y29uZmlnLnJjX3h2aWRjb3JlPyZyYzpOVUxMKSkgDQogCXsNCiAJY2FzZSBYVklE
X0VSUl9GQUlMIDoJDQogCQlyZXR1cm4gSUNFUlJfRVJST1I7DQpAQCAtMzU1LDcgKzQ1MywxMCBA
QA0KIA0KIAkJY29kZWMtPmVoYW5kbGUgPSBOVUxMOw0KIA0KK2lmICghY29kZWMtPmNvbmZpZy5y
Y194dmlkY29yZSkNCit7DQogCQljb2RlY18ycGFzc19maW5pc2goY29kZWMpOw0KK30NCiAJfQ0K
IA0KIAlyZXR1cm4gSUNFUlJfT0s7DQpAQCAtMzcwLDYgKzQ3MSw4IEBADQogCVhWSURfRU5DX1NU
QVRTIHN0YXRzOw0KIAkNCiAJLy8gbXBlZzJhdmkgeXV2IGJ1ZyB3b3JrYXJvdW5kICgyIGluc3Rh
bmNlcyBvZiBDT0RFQykNCitpZiAoIWNvZGVjLT5jb25maWcucmNfeHZpZGNvcmUpDQorew0KIAlp
ZiAoY29kZWMtPnR3b3Bhc3Muc3RhdHMxID09IElOVkFMSURfSEFORExFX1ZBTFVFKQ0KIAl7DQog
CQlpZiAoY29kZWNfMnBhc3NfaW5pdChjb2RlYykgPT0gSUNFUlJfRVJST1IpDQpAQCAtMzc3LDYg
KzQ4MCw3IEBADQogCQkJcmV0dXJuIElDRVJSX0VSUk9SOw0KIAkJfQ0KIAl9DQorfQ0KIA0KIAlm
cmFtZS5nZW5lcmFsID0gMDsNCiAJZnJhbWUubW90aW9uID0gMDsNCkBAIC00NjUsNiArNTY5LDkg
QEANCiAJZnJhbWUuYml0c3RyZWFtID0gaWNjLT5scE91dHB1dDsNCiAJZnJhbWUubGVuZ3RoID0g
aWNjLT5scGJpT3V0cHV0LT5iaVNpemVJbWFnZTsNCiANCisNCitpZiAoIWNvZGVjLT5jb25maWcu
cmNfeHZpZGNvcmUpDQorew0KIAlzd2l0Y2ggKGNvZGVjLT5jb25maWcubW9kZSkgDQogCXsNCiAJ
Y2FzZSBETEdfTU9ERV9DQlIgOg0KQEAgLTQ4MiwxMCArNTg5LDEyIEBADQogDQogCWNhc2UgRExH
X01PREVfMlBBU1NfMl9FWFQgOg0KIAljYXNlIERMR19NT0RFXzJQQVNTXzJfSU5UIDoNCi0JCWlm
IChjb2RlY18ycGFzc19nZXRfcXVhbnQoY29kZWMsICZmcmFtZSkgPT0gSUNFUlJfRVJST1IpDQor
CQkvKmlmIChjb2RlY18ycGFzc19nZXRfcXVhbnQoY29kZWMsICZmcmFtZSkgPT0gSUNFUlJfRVJS
T1IpDQogCQl7DQogCQkJcmV0dXJuIElDRVJSX0VSUk9SOw0KIAkJfQ0KKwkJKi8NCisJCXdoaWxl
IChjb2RlY18ycGFzc19nZXRfcXVhbnQoY29kZWMsICZmcmFtZSkgPT0gMikgOw0KIAkJaWYgKGNv
ZGVjLT5jb25maWcuZHVtbXkycGFzcykNCiAJCXsNCiAJCQlvdXRoZHItPmJpU2l6ZUltYWdlID0g
Y29kZWMtPnR3b3Bhc3MuYnl0ZXMyOw0KQEAgLTUwMyw2ICs2MTIsMjUgQEANCiAJCURFQlVHRVJS
KCJJbnZhbGlkIGVuY29kaW5nIG1vZGUiKTsNCiAJCXJldHVybiBJQ0VSUl9FUlJPUjsNCiAJfQ0K
K31lbHNlew0KKwlmcmFtZS5xdWFudCA9IDA7DQorDQorCWlmIChjb2RlYy0+Y29uZmlnLm1vZGUg
PT0gRExHX01PREVfTlVMTCkNCisJew0KKwkJb3V0aGRyLT5iaVNpemVJbWFnZSA9IDA7DQorCQkq
aWNjLT5scGR3RmxhZ3MgPSBBVklJRl9LRVlGUkFNRTsNCisJCXJldHVybiBJQ0VSUl9PSzsNCisJ
fQ0KKw0KKwlpZiAoKGNvZGVjLT5jb25maWcubW9kZSA9PSBETEdfTU9ERV8yUEFTU18yX0lOVCB8
fCBjb2RlYy0+Y29uZmlnLm1vZGUgPT0gRExHX01PREVfMlBBU1NfMl9FWFQpICYmDQorCQljb2Rl
Yy0+Y29uZmlnLmR1bW15MnBhc3MpDQorCXsNCisJCW91dGhkci0+YmlTaXplSW1hZ2UgPSBjb2Rl
Yy0+dHdvcGFzcy5ieXRlczI7DQorCQkqaWNjLT5scGR3RmxhZ3MgPSAoY29kZWMtPnR3b3Bhc3Mu
bm5zMS5xdWFudCAmIE5OU1RBVFNfS0VZRlJBTUUpID8gQVZJSUZfS0VZRlJBTUUgOiAwOw0KKwkJ
cmV0dXJuIElDRVJSX09LOw0KKwl9DQorfQ0KKw0KIA0KIAlpZiAoY29kZWMtPmNvbmZpZy5xdWFu
dF90eXBlID09IFFVQU5UX01PREVfSDI2MykNCiAJew0KQEAgLTU5Miw5ICs3MjAsMTUgQEANCiAJ
CX0NCiAJfQ0KIA0KKw0KK2lmICghY29kZWMtPmNvbmZpZy5yY194dmlkY29yZSkNCit7DQogLy9x
dWljayBmaXggZm9yIGRlbGF5ZWQgZnJhbWVzDQogLy8JaWYgKGZyYW1lLmludHJhICE9IDUpDQor
CQ0KKwlpZiAoZnJhbWUuaW50cmEgPD0gMikJCS8qIG9ubHkgdXBkYXRlIGZvciBpLHAsYiBmcmFt
ZSAqLw0KIAkJY29kZWNfMnBhc3NfdXBkYXRlKGNvZGVjLCAmZnJhbWUsICZzdGF0cyk7DQorfQ0K
IA0KIAkrK2NvZGVjLT5mcmFtZW51bTsNCiAJKytjb2RlYy0+a2V5c3BhY2luZzsNCkluZGV4OiBz
cmMvY29kZWMuaA0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQ0KUkNTIGZpbGU6IC94dmlkL3Zmdy9zcmMvY29kZWMuaCx2
DQpyZXRyaWV2aW5nIHJldmlzaW9uIDEuMTIuMi4zDQpkaWZmIC11IC1yMS4xMi4yLjMgY29kZWMu
aA0KLS0tIHNyYy9jb2RlYy5oCTE5IE5vdiAyMDAyIDEzOjIzOjE3IC0wMDAwCTEuMTIuMi4zDQor
Kysgc3JjL2NvZGVjLmgJNyBEZWMgMjAwMiAwMToyNzo0MiAtMDAwMA0KQEAgLTYsNiArNiwyMSBA
QA0KICNpbmNsdWRlICJjb25maWcuaCINCiAjaW5jbHVkZSAieHZpZC5oIg0KIA0KKyNpbmNsdWRl
IDxzdGRpby5oPg0KKyNkZWZpbmUgRFBSSU5URl9CVUZfU1ogIDEwMjQNCisNCitzdGF0aWMgX19p
bmxpbmUgdm9pZA0KK0RQUklOVEYoY2hhciAqZm10LCAuLi4pDQorew0KKwl2YV9saXN0IGFyZ3M7
DQorCWNoYXIgYnVmW0RQUklOVEZfQlVGX1NaXTsNCisNCisJdmFfc3RhcnQoYXJncywgZm10KTsN
CisJdnNwcmludGYoYnVmLCBmbXQsIGFyZ3MpOw0KKwlPdXRwdXREZWJ1Z1N0cmluZyhidWYpOw0K
K30NCisNCisNCiAjaWYgZGVmaW5lZChfREVCVUcpDQogI2RlZmluZSBERUJVRyhYKSBPdXRwdXRE
ZWJ1Z1N0cmluZyhYKQ0KICNkZWZpbmUgREVCVUcxKFgsQSkgeyBjaGFyIHRtcFsxMjBdOyB3c3By
aW50Zih0bXAsICIlcyAlaSIsIChYKSwgKEEpKTsgT3V0cHV0RGVidWdTdHJpbmcodG1wKTsgfQ0K
SW5kZXg6IHNyYy9jb25maWcuYw0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQ0KUkNTIGZpbGU6IC94dmlkL3Zmdy9zcmMv
Y29uZmlnLmMsdg0KcmV0cmlldmluZyByZXZpc2lvbiAxLjIwLjIuNA0KZGlmZiAtdSAtcjEuMjAu
Mi40IGNvbmZpZy5jDQotLS0gc3JjL2NvbmZpZy5jCTI5IE5vdiAyMDAyIDEwOjQ2OjE1IC0wMDAw
CTEuMjAuMi40DQorKysgc3JjL2NvbmZpZy5jCTcgRGVjIDIwMDIgMDE6Mjc6NDcgLTAwMDANCkBA
IC04Myw2ICs4Myw3IEBADQogCXsicmNfcmVhY3Rpb25fZGVsYXlfZmFjdG9yIiwmcmVnLnJjX3Jl
YWN0aW9uX2RlbGF5X2ZhY3RvciwJMTZ9LA0KIAl7InJjX2F2ZXJhZ2luZ19wZXJpb2QiLAkJJnJl
Zy5yY19hdmVyYWdpbmdfcGVyaW9kLAkJMTAwfSwNCiAJeyJyY19idWZmZXIiLAkJCQkmcmVnLnJj
X2J1ZmZlciwJCQkJCTEwMH0sDQorCXsicmNfeHZpZGNvcmUiLAkJCQkmcmVnLnJjX3h2aWRjb3Jl
LAkJCQkwfSwNCiANCiAJeyJtb3Rpb25fc2VhcmNoIiwJCQkmcmVnLm1vdGlvbl9zZWFyY2gsCQkJ
CTV9LA0KIAl7InF1YW50X3R5cGUiLAkJCQkmcmVnLnF1YW50X3R5cGUsCQkJCTB9LA0KQEAgLTM1
MCw2ICszNTEsNyBAQA0KIAl9DQogDQogCWNvbmZpZy0+bW9kZSA9IFNlbmREbGdJdGVtTWVzc2Fn
ZShoRGxnLCBJRENfTU9ERSwgQ0JfR0VUQ1VSU0VMLCAwLCAwKTsNCisJY29uZmlnLT5yY194dmlk
Y29yZSA9IElzRGxnQnV0dG9uQ2hlY2tlZChoRGxnLCBJRENfUkNfWFZJRENPUkUpID09IEJTVF9D
SEVDS0VEOw0KIH0NCiANCiANCkBAIC03NTAsNyArNzUyLDcgQEANCiAJCVNldERsZ0l0ZW1JbnQo
aERsZywgSURDX0ZSQU1FRFJPUCwgY29uZmlnLT5mcmFtZV9kcm9wX3JhdGlvLCBGQUxTRSk7DQog
CQlTZXREbGdJdGVtSW50KGhEbGcsIElEQ19DQlJfUkVBQ1RJT05ERUxBWSwgY29uZmlnLT5yY19y
ZWFjdGlvbl9kZWxheV9mYWN0b3IsIEZBTFNFKTsNCiAJCVNldERsZ0l0ZW1JbnQoaERsZywgSURD
X0NCUl9BVkVSQUdJTkdQRVJJT0QsIGNvbmZpZy0+cmNfYXZlcmFnaW5nX3BlcmlvZCwgRkFMU0Up
Ow0KLQkJU2V0RGxnSXRlbUludChoRGxnLCBJRENfQ0JSX0JVRkZFUiwgY29uZmlnLT5yY19idWZm
ZXIsIEZBTFNFKTsNCisJCQ0KIAkJYnJlYWs7DQogCX0NCiB9DQpAQCAtOTk0LDYgKzk5Niw3IEBA
DQogCQlTZW5kRGxnSXRlbU1lc3NhZ2UoaERsZywgSURDX01PREUsIENCX0FERFNUUklORywgMCwg
KExQQVJBTSkiTnVsbCAtIHRlc3Qgc3BlZWQiKTsNCiANCiAJCVNlbmREbGdJdGVtTWVzc2FnZSho
RGxnLCBJRENfTU9ERSwgQ0JfU0VUQ1VSU0VMLCBjb25maWctPm1vZGUsIDApOw0KKwkJQ2hlY2tE
bGdCdXR0b24oaERsZywgSURDX1JDX1hWSURDT1JFLCBjb25maWctPnJjX3h2aWRjb3JlID8gQlNU
X0NIRUNLRUQgOiBCU1RfVU5DSEVDS0VEKTsNCiANCiAJCUluaXRDb21tb25Db250cm9scygpOw0K
IA0KSW5kZXg6IHNyYy9jb25maWcuaA0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQ0KUkNTIGZpbGU6IC94dmlkL3Zmdy9z
cmMvY29uZmlnLmgsdg0KcmV0cmlldmluZyByZXZpc2lvbiAxLjE0LjIuMg0KZGlmZiAtdSAtcjEu
MTQuMi4yIGNvbmZpZy5oDQotLS0gc3JjL2NvbmZpZy5oCTIxIE5vdiAyMDAyIDEyOjUxOjI4IC0w
MDAwCTEuMTQuMi4yDQorKysgc3JjL2NvbmZpZy5oCTcgRGVjIDIwMDIgMDE6Mjc6NDggLTAwMDAN
CkBAIC03NSwxMyArNzUsMTcgQEANCiAJaW50IHJjX2JpdHJhdGU7CQkJCS8vDQogCWludCBkZXNp
cmVkX3NpemU7CQkJLy8gcGxlYXNlIHRyeSB0byBhdm9pZCBtb2RpZmljYXRpb25zIGhlcmUNCiAJ
Y2hhciBzdGF0czFbTUFYX1BBVEhdOwkJLy8NCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKi8NCisJY2hhciBzdGF0czJbTUFYX1BBVEhdOw0KKwlpbnQgaGludGVkX21lOw0KKwljaGFy
IGhpbnRmaWxlW01BWF9QQVRIXTsNCisJLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiov
DQogDQogCWludCBxdWFsaXR5Ow0KIAlpbnQJcXVhbnQ7DQogCWludCByY19yZWFjdGlvbl9kZWxh
eV9mYWN0b3I7DQogCWludCByY19hdmVyYWdpbmdfcGVyaW9kOw0KIAlpbnQgcmNfYnVmZmVyOw0K
KwlpbnQgcmNfeHZpZGNvcmU7DQogDQogCWludCBtb3Rpb25fc2VhcmNoOw0KIAlpbnQgcXVhbnRf
dHlwZTsNCkBAIC0xMzMsOSArMTM3LDYgQEANCiAJaW50IHR3b3Bhc3NfbWF4X292ZXJmbG93X2Rl
Z3JhZGF0aW9uOw0KIAlpbnQgYml0cmF0ZV9wYXliYWNrX2RlbGF5Ow0KIAlpbnQgYml0cmF0ZV9w
YXliYWNrX21ldGhvZDsNCi0JaW50IGhpbnRlZF9tZTsNCi0JY2hhciBoaW50ZmlsZVtNQVhfUEFU
SF07DQotCWNoYXIgc3RhdHMyW01BWF9QQVRIXTsNCiANCiAJaW50IGNyZWRpdHNfc3RhcnQ7DQog
CWludCBjcmVkaXRzX3N0YXJ0X2JlZ2luOw0KSW5kZXg6IHNyYy9jb25maWcucmMNCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0NClJDUyBmaWxlOiAveHZpZC92Zncvc3JjL2NvbmZpZy5yYyx2DQpyZXRyaWV2aW5nIHJldmlz
aW9uIDEuMTcuMi4xDQpkaWZmIC11IC1yMS4xNy4yLjEgY29uZmlnLnJjDQotLS0gc3JjL2NvbmZp
Zy5yYwkxOSBOb3YgMjAwMiAxMzoyMzoxNyAtMDAwMAkxLjE3LjIuMQ0KKysrIHNyYy9jb25maWcu
cmMJNyBEZWMgMjAwMiAwMToyNzo1MiAtMDAwMA0KQEAgLTg4LDYgKzg4LDggQEANCiAgICAgTFRF
WFQgICAgICAgICAgICIiLElEQ19TTElERVJfU1RBVElDLDEyLDMyLDgwLDEyLFNTX0NFTlRFUklN
QUdFDQogICAgIExURVhUICAgICAgICAgICAiIixJRENfVkFMVUVfU1RBVElDLDEyLDQ4LDgwLDEy
LFNTX0NFTlRFUklNQUdFDQogICAgIEdST1VQQk9YICAgICAgICAiRW5jb2Rpbmcgb3B0aW9ucyIs
SURDX1NUQVRJQyw0LDQsMTc2LDY0DQorICAgIENPTlRST0wgICAgICAgICAiVXNlIHh2aWRjb3Jl
IHJhdGUgY29udHJvbCIsSURDX1JDX1hWSURDT1JFLCJCdXR0b24iLA0KKyAgICAgICAgICAgICAg
ICAgICAgQlNfQVVUT0NIRUNLQk9YIHwgV1NfVEFCU1RPUCw0Myw2Myw5NSwxMA0KIEVORA0KIA0K
IElERF9HTE9CQUwgRElBTE9HIERJU0NBUkRBQkxFICAwLCAwLCAyMDAsIDIxNw0KSW5kZXg6IHNy
Yy9yZXNvdXJjZS5oDQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09DQpSQ1MgZmlsZTogL3h2aWQvdmZ3L3NyYy9yZXNvdXJj
ZS5oLHYNCnJldHJpZXZpbmcgcmV2aXNpb24gMS4xMy4yLjENCmRpZmYgLXUgLXIxLjEzLjIuMSBy
ZXNvdXJjZS5oDQotLS0gc3JjL3Jlc291cmNlLmgJMTkgTm92IDIwMDIgMTM6MjM6MTcgLTAwMDAJ
MS4xMy4yLjENCisrKyBzcmMvcmVzb3VyY2UuaAk3IERlYyAyMDAyIDAxOjI3OjUzIC0wMDAwDQpA
QCAtMjQyLDYgKzI0Miw3IEBADQogI2RlZmluZSBJRENfUVBFTCAgICAgICAgICAgICAgICAgICAg
ICAgIDEyMzINCiAjZGVmaW5lIElEQ19DSFJPTUFNRSAgICAgICAgICAgICAgICAgICAgMTIzMw0K
ICNkZWZpbmUgSURDX0JRVUFOVE9GRlNFVCAgICAgICAgICAgICAgICAxMjM0DQorI2RlZmluZSBJ
RENfUkNfWFZJRENPUkUgICAgICAgICAgICAgICAgIDEyMzUNCiANCiAvLyBOZXh0IGRlZmF1bHQg
dmFsdWVzIGZvciBuZXcgb2JqZWN0cw0KIC8vIA0KQEAgLTI0OSw3ICsyNTAsNyBAQA0KICNpZm5k
ZWYgQVBTVFVESU9fUkVBRE9OTFlfU1lNQk9MUw0KICNkZWZpbmUgX0FQU19ORVhUX1JFU09VUkNF
X1ZBTFVFICAgICAgICAxMDkNCiAjZGVmaW5lIF9BUFNfTkVYVF9DT01NQU5EX1ZBTFVFICAgICAg
ICAgNDAwMDENCi0jZGVmaW5lIF9BUFNfTkVYVF9DT05UUk9MX1ZBTFVFICAgICAgICAgMTIzNQ0K
KyNkZWZpbmUgX0FQU19ORVhUX0NPTlRST0xfVkFMVUUgICAgICAgICAxMjM2DQogI2RlZmluZSBf
QVBTX05FWFRfU1lNRURfVkFMVUUgICAgICAgICAgIDEwMQ0KICNlbmRpZg0KICNlbmRpZg0K

--------_3E03C1A49C25038DF00C_MULTIPART_MIXED_--