From mboxrd@z Thu Jan 1 00:00:00 1970 From: zhuyj Subject: Re: [PATCH 1/1] vxlan: insert ipv6 macro Date: Thu, 13 Oct 2016 13:28:25 +0800 Message-ID: References: <1476174211-9358-1-git-send-email-zyjzyj2000@gmail.com> <20161011160615.7f7f7746@griffin> <20161012151638.6250dff6@griffin> Mime-Version: 1.0 Content-Type: multipart/mixed; boundary=001a114e63c20871e1053eb86123 Cc: netdev , pabeni@redhat.com, daniel@iogearbox.net, Pravin B Shelar , Alexander Duyck , hannes@stressinduktion.org, "David S. Miller" To: Jiri Benc Return-path: Received: from mail-vk0-f44.google.com ([209.85.213.44]:35671 "EHLO mail-vk0-f44.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1754839AbcJMF2e (ORCPT ); Thu, 13 Oct 2016 01:28:34 -0400 Received: by mail-vk0-f44.google.com with SMTP id q126so13621094vkd.2 for ; Wed, 12 Oct 2016 22:28:27 -0700 (PDT) In-Reply-To: <20161012151638.6250dff6@griffin> Sender: netdev-owner@vger.kernel.org List-ID: --001a114e63c20871e1053eb86123 Content-Type: text/plain; charset=UTF-8 Hi, Jiri The dumped source code is in the attachment. Please check it. I think this file can explain all. If anything, please just let me know. Thanks a lot. On Wed, Oct 12, 2016 at 9:16 PM, Jiri Benc wrote: > On Wed, 12 Oct 2016 21:01:54 +0800, zhuyj wrote: >> How to explain the following source code? As you mentioned, are the >> #ifdefs in the following source pointless? > > They are not, the code would not compile without them. Look how struct > vxlan_dev is defined. > > Those are really basic questions you have. I suggest you try yourself > before asking such questions next time. In this case, you could > trivially remove the #ifdef and see for yourself, as I explained in the > previous email. Please do not try to offload your homework to other > people. It's very obvious you didn't even try to understand this, even > after the feedback you received. > > And do not top post. > > Thanks, > > Jiri --001a114e63c20871e1053eb86123 Content-Type: text/plain; charset=US-ASCII; name="dump-vxlan.txt" Content-Disposition: attachment; filename="dump-vxlan.txt" Content-Transfer-Encoding: base64 X-Attachment-Id: f_iu7wlb7o0 CnZ4bGFuLmtvOiAgICAgZmlsZSBmb3JtYXQgZWxmNjQteDg2LTY0CgoKRGlzYXNzZW1ibHkgb2Yg c2VjdGlvbiAudGV4dDoKCjAwMDAwMDAwMDAwMDAwMDAgPF9fdnhsYW5fZmluZF9tYWM+Ogp9Cgov KiBMb29rIHVwIEV0aGVybmV0IGFkZHJlc3MgaW4gZm9yd2FyZGluZyB0YWJsZSAqLwpzdGF0aWMg c3RydWN0IHZ4bGFuX2ZkYiAqX192eGxhbl9maW5kX21hYyhzdHJ1Y3QgdnhsYW5fZGV2ICp2eGxh biwKCQkJCQljb25zdCB1OCAqbWFjKQp7CiAgICAgICAwOgllOCAwMCAwMCAwMCAwMCAgICAgICAJ Y2FsbHEgIDUgPF9fdnhsYW5fZmluZF9tYWMrMHg1PgogICAgICAgNToJNTUgICAgICAgICAgICAg ICAgICAgCXB1c2ggICAlcmJwCiAgICAgICA2Ogk0OCA4YiAxNiAgICAgICAgICAgICAJbW92ICAg ICglcnNpKSwlcmR4CiAgICAgICA5Ogk0OCBiOCBlYiA4MyBiNSA4MCA0NiAJbW92YWJzICQweDYx Yzg4NjQ2ODBiNTgzZWIsJXJheAogICAgICAxMDoJODYgYzggNjEgCiAgICAgIDEzOgk0OCA4OSBl NSAgICAgICAgICAgICAJbW92ICAgICVyc3AsJXJicAogICAgICAxNjoJNDggYzEgZTIgMTAgICAg ICAgICAgCXNobCAgICAkMHgxMCwlcmR4CiAgICAgIDFhOgk0OCAwZiBhZiBjMiAgICAgICAgICAJ aW11bCAgICVyZHgsJXJheAogICAgICAxZToJNDggYzEgZTggMzggICAgICAgICAgCXNociAgICAk MHgzOCwlcmF4CiAgICAgIDIyOgk0OCA4ZCA4NCBjNyA2MCAwMSAwMCAJbGVhICAgIDB4MTYwKCVy ZGksJXJheCw4KSwlcmF4CiAgICAgIDI5OgkwMCAKICAgICAgMmE6CTQ4IDhiIDAwICAgICAgICAg ICAgIAltb3YgICAgKCVyYXgpLCVyYXgKICAgICAgMmQ6CTQ4IDg1IGMwICAgICAgICAgICAgIAl0 ZXN0ICAgJXJheCwlcmF4CiAgICAgIDMwOgk3NCAyMiAgICAgICAgICAgICAgICAJamUgICAgIDU0 IDxfX3Z4bGFuX2ZpbmRfbWFjKzB4NTQ+CiAgICAgIDMyOgk4YiAzZSAgICAgICAgICAgICAgICAJ bW92ICAgICglcnNpKSwlZWRpCiAgICAgIDM0OgkwZiBiNyA3NiAwNCAgICAgICAgICAJbW92ends IDB4NCglcnNpKSwlZXNpCglzdHJ1Y3QgaGxpc3RfaGVhZCAqaGVhZCA9IHZ4bGFuX2ZkYl9oZWFk KHZ4bGFuLCBtYWMpOwoJc3RydWN0IHZ4bGFuX2ZkYiAqZjsKCglobGlzdF9mb3JfZWFjaF9lbnRy eV9yY3UoZiwgaGVhZCwgaGxpc3QpIHsKICAgICAgMzg6CTg5IGYyICAgICAgICAgICAgICAgIAlt b3YgICAgJWVzaSwlZWR4CiAgICAgIDNhOgk2NiAzMyA1MCA0NCAgICAgICAgICAJeG9yICAgIDB4 NDQoJXJheCksJWR4CiAgICAgIDNlOgk4YiA0OCA0MCAgICAgICAgICAgICAJbW92ICAgIDB4NDAo JXJheCksJWVjeAogICAgICA0MToJMzEgZjkgICAgICAgICAgICAgICAgCXhvciAgICAlZWRpLCVl Y3gKfQoKLyogTG9vayB1cCBFdGhlcm5ldCBhZGRyZXNzIGluIGZvcndhcmRpbmcgdGFibGUgKi8K c3RhdGljIHN0cnVjdCB2eGxhbl9mZGIgKl9fdnhsYW5fZmluZF9tYWMoc3RydWN0IHZ4bGFuX2Rl diAqdnhsYW4sCgkJCQkJY29uc3QgdTggKm1hYykKewogICAgICA0MzoJMGYgYjcgZDIgICAgICAg ICAgICAgCW1vdnp3bCAlZHgsJWVkeAoJc3RydWN0IGhsaXN0X2hlYWQgKmhlYWQgPSB2eGxhbl9m ZGJfaGVhZCh2eGxhbiwgbWFjKTsKCXN0cnVjdCB2eGxhbl9mZGIgKmY7CgoJaGxpc3RfZm9yX2Vh Y2hfZW50cnlfcmN1KGYsIGhlYWQsIGhsaXN0KSB7CiAgICAgIDQ2OgkwOSBkMSAgICAgICAgICAg ICAgICAJb3IgICAgICVlZHgsJWVjeAogICAgICA0ODoJNzQgMDggICAgICAgICAgICAgICAgCWpl ICAgICA1MiA8X192eGxhbl9maW5kX21hYysweDUyPgogICAgICA0YToJNDggOGIgMDAgICAgICAg ICAgICAgCW1vdiAgICAoJXJheCksJXJheAogICAgICA0ZDoJNDggODUgYzAgICAgICAgICAgICAg CXRlc3QgICAlcmF4LCVyYXgKICAgICAgNTA6CTc1IGU2ICAgICAgICAgICAgICAgIAlqbmUgICAg MzggPF9fdnhsYW5fZmluZF9tYWMrMHgzOD4KICAgICAgNTI6CTVkICAgICAgICAgICAgICAgICAg IAlwb3AgICAgJXJicAogICAgICA1MzoJYzMgICAgICAgICAgICAgICAgICAgCXJldHEgICAKICAg ICAgNTQ6CTMxIGMwICAgICAgICAgICAgICAgIAl4b3IgICAgJWVheCwlZWF4CiAgICAgIDU2Ogk1 ZCAgICAgICAgICAgICAgICAgICAJcG9wICAgICVyYnAKICAgICAgNTc6CWMzICAgICAgICAgICAg ICAgICAgIAlyZXRxICAgCiAgICAgIDU4OgkwZiAxZiA4NCAwMCAwMCAwMCAwMCAJbm9wbCAgIDB4 MCglcmF4LCVyYXgsMSkKICAgICAgNWY6CTAwIAoKMDAwMDAwMDAwMDAwMDA2MCA8dnhsYW5fc2V0 X211bHRpY2FzdF9saXN0PjoKICAgICAgNjA6CWU4IDAwIDAwIDAwIDAwICAgICAgIAljYWxscSAg NjUgPHZ4bGFuX3NldF9tdWx0aWNhc3RfbGlzdCsweDU+CiAgICAgIDY1Ogk1NSAgICAgICAgICAg ICAgICAgICAJcHVzaCAgICVyYnAKICAgICAgNjY6CTQ4IDg5IGU1ICAgICAgICAgICAgIAltb3Yg ICAgJXJzcCwlcmJwCgkJaWYgKGV0aGVyX2FkZHJfZXF1YWwobWFjLCBmLT5ldGhfYWRkcikpCiAg ICAgIDY5Ogk1ZCAgICAgICAgICAgICAgICAgICAJcG9wICAgICVyYnAKICAgICAgNmE6CWMzICAg ICAgICAgICAgICAgICAgIAlyZXRxICAgCiAgICAgIDZiOgkwZiAxZiA0NCAwMCAwMCAgICAgICAJ bm9wbCAgIDB4MCglcmF4LCVyYXgsMSkKCjAwMDAwMDAwMDAwMDAwNzAgPHZ4bGFuX2dldF9zaXpl PjoKICAgICAgNzA6CWU4IDAwIDAwIDAwIDAwICAgICAgIAljYWxscSAgNzUgPHZ4bGFuX2dldF9z aXplKzB4NT4KICAgICAgNzU6CTU1ICAgICAgICAgICAgICAgICAgIAlwdXNoICAgJXJicAogICAg ICA3NjoJYjggYzggMDAgMDAgMDAgICAgICAgCW1vdiAgICAkMHhjOCwlZWF4Cn0pCgpzdGF0aWMg X19hbHdheXNfaW5saW5lCnZvaWQgX19yZWFkX29uY2Vfc2l6ZShjb25zdCB2b2xhdGlsZSB2b2lk ICpwLCB2b2lkICpyZXMsIGludCBzaXplKQp7CglfX1JFQURfT05DRV9TSVpFOwogICAgICA3YjoJ NDggODkgZTUgICAgICAgICAgICAgCW1vdiAgICAlcnNwLCVyYnAKCQkJCQljb25zdCB1OCAqbWFj KQp7CglzdHJ1Y3QgaGxpc3RfaGVhZCAqaGVhZCA9IHZ4bGFuX2ZkYl9oZWFkKHZ4bGFuLCBtYWMp OwoJc3RydWN0IHZ4bGFuX2ZkYiAqZjsKCglobGlzdF9mb3JfZWFjaF9lbnRyeV9yY3UoZiwgaGVh ZCwgaGxpc3QpIHsKICAgICAgN2U6CTVkICAgICAgICAgICAgICAgICAgIAlwb3AgICAgJXJicAog ICAgICA3ZjoJYzMgICAgICAgICAgICAgICAgICAgCXJldHEgICAKCjAwMDAwMDAwMDAwMDAwODAg PHZ4bGFuX2dldF9saW5rX25ldD46CiAgICAgIDgwOgllOCAwMCAwMCAwMCAwMCAgICAgICAJY2Fs bHEgIDg1IDx2eGxhbl9nZXRfbGlua19uZXQrMHg1PgoJCWlmIChldGhlcl9hZGRyX2VxdWFsKG1h YywgZi0+ZXRoX2FkZHIpKQoJCQlyZXR1cm4gZjsKCX0KCglyZXR1cm4gTlVMTDsKICAgICAgODU6 CTU1ICAgICAgICAgICAgICAgICAgIAlwdXNoICAgJXJicAp9CiAgICAgIDg2Ogk0OCA4YiA4NyA3 OCAwOCAwMCAwMCAJbW92ICAgIDB4ODc4KCVyZGkpLCVyYXgKICAgICAgOGQ6CTQ4IDg5IGU1ICAg ICAgICAgICAgIAltb3YgICAgJXJzcCwlcmJwCglyZXR1cm4gcmV0Owp9CgovKiBTdHViLCBub3Ro aW5nIG5lZWRzIHRvIGJlIGRvbmUuICovCnN0YXRpYyB2b2lkIHZ4bGFuX3NldF9tdWx0aWNhc3Rf bGlzdChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQp7CiAgICAgIDkwOgk1ZCAgICAgICAgICAgICAg ICAgICAJcG9wICAgICVyYnAKICAgICAgOTE6CWMzICAgICAgICAgICAgICAgICAgIAlyZXRxICAg CiAgICAgIDkyOgkwZiAxZiA0MCAwMCAgICAgICAgICAJbm9wbCAgIDB4MCglcmF4KQogICAgICA5 NjoJNjYgMmUgMGYgMWYgODQgMDAgMDAgCW5vcHcgICAlY3M6MHgwKCVyYXgsJXJheCwxKQogICAg ICA5ZDoJMDAgMDAgMDAgCgowMDAwMDAwMDAwMDAwMGEwIDx2eGxhbl9pbml0X25ldD46CglsaXN0 X2RlbCgmdnhsYW4tPm5leHQpOwoJdW5yZWdpc3Rlcl9uZXRkZXZpY2VfcXVldWUoZGV2LCBoZWFk KTsKfQoKc3RhdGljIHNpemVfdCB2eGxhbl9nZXRfc2l6ZShjb25zdCBzdHJ1Y3QgbmV0X2Rldmlj ZSAqZGV2KQp7CiAgICAgIGEwOgllOCAwMCAwMCAwMCAwMCAgICAgICAJY2FsbHEgIGE1IDx2eGxh bl9pbml0X25ldCsweDU+CiAgICAgIGE1Ogk4YiAwNSAwMCAwMCAwMCAwMCAgICAJbW92ICAgIDB4 MCglcmlwKSwlZWF4ICAgICAgICAjIGFiIDx2eGxhbl9pbml0X25ldCsweGI+CiAgICAgIGFiOgk0 OCA4YiA5NyA4OCAxNCAwMCAwMCAJbW92ICAgIDB4MTQ4OCglcmRpKSwlcmR4Cm5sYV9wdXRfZmFp bHVyZToKCXJldHVybiAtRU1TR1NJWkU7Cn0KCnN0YXRpYyBzdHJ1Y3QgbmV0ICp2eGxhbl9nZXRf bGlua19uZXQoY29uc3Qgc3RydWN0IG5ldF9kZXZpY2UgKmRldikKewogICAgICBiMjoJNTUgICAg ICAgICAgICAgICAgICAgCXB1c2ggICAlcmJwCiAgICAgIGIzOgk4MyBlOCAwMSAgICAgICAgICAg ICAJc3ViICAgICQweDEsJWVheAoJc3RydWN0IHZ4bGFuX2RldiAqdnhsYW4gPSBuZXRkZXZfcHJp dihkZXYpOwoKCXJldHVybiB2eGxhbi0+bmV0OwogICAgICBiNjoJNDggODkgZTUgICAgICAgICAg ICAgCW1vdiAgICAlcnNwLCVyYnAKICAgICAgYjk6CTQ4IDk4ICAgICAgICAgICAgICAgIAljbHRx ICAgCiAgICAgIGJiOgk0OCA4YiA1NCBjMiAxOCAgICAgICAJbW92ICAgIDB4MTgoJXJkeCwlcmF4 LDgpLCVyZHgKfQogICAgICBjMDoJNDggODkgMTIgICAgICAgICAgICAgCW1vdiAgICAlcmR4LCgl cmR4KQogICAgICBjMzoJNDggODkgNTIgMDggICAgICAgICAgCW1vdiAgICAlcmR4LDB4OCglcmR4 KQogICAgICBjNzoJNDggOGQgNDIgMTAgICAgICAgICAgCWxlYSAgICAweDEwKCVyZHgpLCVyYXgK ICAgICAgY2I6CWM3IDgyIDEwIDA4IDAwIDAwIDAwIAltb3ZsICAgJDB4MCwweDgxMCglcmR4KQog ICAgICBkMjoJMDAgMDAgMDAgCglzdHJ1Y3QgbmV0X2dlbmVyaWMgKm5nOwoJdm9pZCAqcHRyOwoK CXJjdV9yZWFkX2xvY2soKTsKCW5nID0gcmN1X2RlcmVmZXJlbmNlKG5ldC0+Z2VuKTsKCXB0ciA9 IG5nLT5wdHJbaWQgLSAxXTsKICAgICAgZDU6CTQ4IDgxIGMyIDEwIDA4IDAwIDAwIAlhZGQgICAg JDB4ODEwLCVyZHgKICAgICAgZGM6CTQ4IGM3IDAwIDAwIDAwIDAwIDAwIAltb3ZxICAgJDB4MCwo JXJheCkKICAgICAgZTM6CTQ4IDgzIGMwIDA4ICAgICAgICAgIAlhZGQgICAgJDB4OCwlcmF4CnN0 YXRpYyBzdHJ1Y3Qgbm90aWZpZXJfYmxvY2sgdnhsYW5fbm90aWZpZXJfYmxvY2sgX19yZWFkX21v c3RseSA9IHsKCS5ub3RpZmllcl9jYWxsID0gdnhsYW5fbmV0ZGV2aWNlX2V2ZW50LAp9OwoKc3Rh dGljIF9fbmV0X2luaXQgaW50IHZ4bGFuX2luaXRfbmV0KHN0cnVjdCBuZXQgKm5ldCkKewogICAg ICBlNzoJNDggMzkgZDAgICAgICAgICAgICAgCWNtcCAgICAlcmR4LCVyYXgKICAgICAgZWE6CTc1 IGYwICAgICAgICAgICAgICAgIAlqbmUgICAgZGMgPHZ4bGFuX2luaXRfbmV0KzB4M2M+CiAgICAg IGVjOgkzMSBjMCAgICAgICAgICAgICAgICAJeG9yICAgICVlYXgsJWVheAogICAgICBlZToJNWQg ICAgICAgICAgICAgICAgICAgCXBvcCAgICAlcmJwCiAgICAgIGVmOgljMyAgICAgICAgICAgICAg ICAgICAJcmV0cSAgIAoKMDAwMDAwMDAwMDAwMDBmMCA8dnhsYW5fZmluZF9zb2NrPjoKewoJc3dp dGNoIChzaXplKSB7CgljYXNlIDE6ICoodm9sYXRpbGUgX191OCAqKXAgPSAqKF9fdTggKilyZXM7 IGJyZWFrOwoJY2FzZSAyOiAqKHZvbGF0aWxlIF9fdTE2ICopcCA9ICooX191MTYgKilyZXM7IGJy ZWFrOwoJY2FzZSA0OiAqKHZvbGF0aWxlIF9fdTMyICopcCA9ICooX191MzIgKilyZXM7IGJyZWFr OwoJY2FzZSA4OiAqKHZvbGF0aWxlIF9fdTY0ICopcCA9ICooX191NjQgKilyZXM7IGJyZWFrOwog ICAgICBmMDoJZTggMDAgMDAgMDAgMDAgICAgICAgCWNhbGxxICBmNSA8dnhsYW5fZmluZF9zb2Nr KzB4NT4KCXN0cnVjdCBsaXN0X2hlYWQgbmFtZSA9IExJU1RfSEVBRF9JTklUKG5hbWUpCgpzdGF0 aWMgaW5saW5lIHZvaWQgSU5JVF9MSVNUX0hFQUQoc3RydWN0IGxpc3RfaGVhZCAqbGlzdCkKewoJ V1JJVEVfT05DRShsaXN0LT5uZXh0LCBsaXN0KTsKCWxpc3QtPnByZXYgPSBsaXN0OwogICAgICBm NToJOGIgMDUgMDAgMDAgMDAgMDAgICAgCW1vdiAgICAweDAoJXJpcCksJWVheCAgICAgICAgIyBm YiA8dnhsYW5fZmluZF9zb2NrKzB4Yj4KCXN0cnVjdCB2eGxhbl9uZXQgKnZuID0gbmV0X2dlbmVy aWMobmV0LCB2eGxhbl9uZXRfaWQpOwoJdW5zaWduZWQgaW50IGg7CgoJSU5JVF9MSVNUX0hFQUQo JnZuLT52eGxhbl9saXN0KTsKCXNwaW5fbG9ja19pbml0KCZ2bi0+c29ja19sb2NrKTsKICAgICAg ZmI6CTU1ICAgICAgICAgICAgICAgICAgIAlwdXNoICAgJXJicAogICAgICBmYzoJNDEgODkgZDAg ICAgICAgICAgICAgCW1vdiAgICAlZWR4LCVyOGQKICAgICAgZmY6CTRjIDhiIDhmIDg4IDE0IDAw IDAwIAltb3YgICAgMHgxNDg4KCVyZGkpLCVyOQogICAgIDEwNjoJNjYgYzEgYzIgMDggICAgICAg ICAgCXJvbCAgICAkMHg4LCVkeAogICAgIDEwYToJODEgZTEgMDAgN2QgMDAgMDAgICAgCWFuZCAg ICAkMHg3ZDAwLCVlY3gKCglmb3IgKGggPSAwOyBoIDwgUE9SVF9IQVNIX1NJWkU7ICsraCkKCQlJ TklUX0hMSVNUX0hFQUQoJnZuLT5zb2NrX2xpc3RbaF0pOwogICAgIDExMDoJNDggODkgZTUgICAg ICAgICAgICAgCW1vdiAgICAlcnNwLCVyYnAKICAgICAxMTM6CThkIDc4IGZmICAgICAgICAgICAg IAlsZWEgICAgLTB4MSglcmF4KSwlZWRpCiAgICAgMTE2OgkwZiBiNyBjMiAgICAgICAgICAgICAJ bW92endsICVkeCwlZWF4Cgl1bnNpZ25lZCBpbnQgaDsKCglJTklUX0xJU1RfSEVBRCgmdm4tPnZ4 bGFuX2xpc3QpOwoJc3Bpbl9sb2NrX2luaXQoJnZuLT5zb2NrX2xvY2spOwoKCWZvciAoaCA9IDA7 IGggPCBQT1JUX0hBU0hfU0laRTsgKytoKQogICAgIDExOToJNjkgYzAgNDcgODYgYzggNjEgICAg CWltdWwgICAkMHg2MWM4ODY0NywlZWF4LCVlYXgKCQlJTklUX0hMSVNUX0hFQUQoJnZuLT5zb2Nr X2xpc3RbaF0pOwoKCXJldHVybiAwOwp9CiAgICAgMTFmOgk0OCA2MyBmZiAgICAgICAgICAgICAJ bW92c2xxICVlZGksJXJkaQovKiBGaW5kIFZYTEFOIHNvY2tldCBiYXNlZCBvbiBuZXR3b3JrIG5h bWVzcGFjZSwgYWRkcmVzcyBmYW1pbHkgYW5kIFVEUCBwb3J0CiAqIGFuZCBlbmFibGVkIHVuc2hh cmVhYmxlIGZsYWdzLgogKi8Kc3RhdGljIHN0cnVjdCB2eGxhbl9zb2NrICp2eGxhbl9maW5kX3Nv Y2soc3RydWN0IG5ldCAqbmV0LCBzYV9mYW1pbHlfdCBmYW1pbHksCgkJCQkJICBfX2JlMTYgcG9y dCwgdTMyIGZsYWdzKQp7CiAgICAgMTIyOgk0OSA4YiA1NCBmOSAxOCAgICAgICAJbW92ICAgIDB4 MTgoJXI5LCVyZGksOCksJXJkeAogICAgIDEyNzoJYzEgZTggMTggICAgICAgICAgICAgCXNociAg ICAkMHgxOCwlZWF4CiAgICAgMTJhOgk0OCA4ZCA0NCBjMiAxMCAgICAgICAJbGVhICAgIDB4MTAo JXJkeCwlcmF4LDgpLCVyYXgKfSkKCnN0YXRpYyBfX2Fsd2F5c19pbmxpbmUKdm9pZCBfX3JlYWRf b25jZV9zaXplKGNvbnN0IHZvbGF0aWxlIHZvaWQgKnAsIHZvaWQgKnJlcywgaW50IHNpemUpCnsK CV9fUkVBRF9PTkNFX1NJWkU7CiAgICAgMTJmOgk0OCA4YiAwMCAgICAgICAgICAgICAJbW92ICAg ICglcmF4KSwlcmF4CiAgICAgMTMyOgk0OCA4NSBjMCAgICAgICAgICAgICAJdGVzdCAgICVyYXgs JXJheAogICAgIDEzNToJNzUgMWEgICAgICAgICAgICAgICAgCWpuZSAgICAxNTEgPHZ4bGFuX2Zp bmRfc29jaysweDYxPgovKiBTb2NrZXQgaGFzaCB0YWJsZSBoZWFkICovCnN0YXRpYyBpbmxpbmUg c3RydWN0IGhsaXN0X2hlYWQgKnZzX2hlYWQoc3RydWN0IG5ldCAqbmV0LCBfX2JlMTYgcG9ydCkK ewoJc3RydWN0IHZ4bGFuX25ldCAqdm4gPSBuZXRfZ2VuZXJpYyhuZXQsIHZ4bGFuX25ldF9pZCk7 CgoJcmV0dXJuICZ2bi0+c29ja19saXN0W2hhc2hfMzIobnRvaHMocG9ydCksIFBPUlRfSEFTSF9C SVRTKV07CiAgICAgMTM3OgkzMSBjMCAgICAgICAgICAgICAgICAJeG9yICAgICVlYXgsJWVheAog ICAgIDEzOToJNWQgICAgICAgICAgICAgICAgICAgCXBvcCAgICAlcmJwCnN0YXRpYyBzdHJ1Y3Qg dnhsYW5fc29jayAqdnhsYW5fZmluZF9zb2NrKHN0cnVjdCBuZXQgKm5ldCwgc2FfZmFtaWx5X3Qg ZmFtaWx5LAoJCQkJCSAgX19iZTE2IHBvcnQsIHUzMiBmbGFncykKewoJc3RydWN0IHZ4bGFuX3Nv Y2sgKnZzOwoKCWZsYWdzICY9IFZYTEFOX0ZfUkNWX0ZMQUdTOwogICAgIDEzYToJYzMgICAgICAg ICAgICAgICAgICAgCXJldHEgICAKICAgICAxM2I6CTY2IDNiIDcyIDEwICAgICAgICAgIAljbXAg ICAgMHgxMCglcmR4KSwlc2kKICAgICAxM2Y6CTc1IDA4ICAgICAgICAgICAgICAgIAlqbmUgICAg MTQ5IDx2eGxhbl9maW5kX3NvY2srMHg1OT4KLyogRmluZCBWWExBTiBzb2NrZXQgYmFzZWQgb24g bmV0d29yayBuYW1lc3BhY2UsIGFkZHJlc3MgZmFtaWx5IGFuZCBVRFAgcG9ydAogKiBhbmQgZW5h YmxlZCB1bnNoYXJlYWJsZSBmbGFncy4KICovCnN0YXRpYyBzdHJ1Y3QgdnhsYW5fc29jayAqdnhs YW5fZmluZF9zb2NrKHN0cnVjdCBuZXQgKm5ldCwgc2FfZmFtaWx5X3QgZmFtaWx5LAoJCQkJCSAg X19iZTE2IHBvcnQsIHUzMiBmbGFncykKewogICAgIDE0MToJM2IgODggMWMgMjAgMDAgMDAgICAg CWNtcCAgICAweDIwMWMoJXJheCksJWVjeAoJc3RydWN0IHZ4bGFuX3NvY2sgKnZzOwoKCWZsYWdz ICY9IFZYTEFOX0ZfUkNWX0ZMQUdTOwoKCWhsaXN0X2Zvcl9lYWNoX2VudHJ5X3JjdSh2cywgdnNf aGVhZChuZXQsIHBvcnQpLCBobGlzdCkgewogICAgIDE0NzoJNzQgZjAgICAgICAgICAgICAgICAg CWplICAgICAxMzkgPHZ4bGFuX2ZpbmRfc29jaysweDQ5PgogICAgIDE0OToJNDggOGIgMDAgICAg ICAgICAgICAgCW1vdiAgICAoJXJheCksJXJheAogICAgIDE0YzoJNDggODUgYzAgICAgICAgICAg ICAgCXRlc3QgICAlcmF4LCVyYXgKICAgICAxNGY6CTc0IGU4ICAgICAgICAgICAgICAgIAlqZSAg ICAgMTM5IDx2eGxhbl9maW5kX3NvY2srMHg0OT4KICAgICAxNTE6CTQ4IDhiIDUwIDEwICAgICAg ICAgIAltb3YgICAgMHgxMCglcmF4KSwlcmR4CiAgICAgMTU1Ogk0OCA4YiA1MiAyMCAgICAgICAg ICAJbW92ICAgIDB4MjAoJXJkeCksJXJkeAogICAgIDE1OToJNjYgNDQgM2IgODIgZTAgMDIgMDAg CWNtcCAgICAweDJlMCglcmR4KSwlcjh3CiAgICAgMTYwOgkwMCAKICAgICAxNjE6CTc1IGU2ICAg ICAgICAgICAgICAgIAlqbmUgICAgMTQ5IDx2eGxhbl9maW5kX3NvY2srMHg1OT4KICAgICAxNjM6 CWViIGQ2ICAgICAgICAgICAgICAgIAlqbXAgICAgMTNiIDx2eGxhbl9maW5kX3NvY2srMHg0Yj4K ICAgICAxNjU6CTkwICAgICAgICAgICAgICAgICAgIAlub3AKICAgICAxNjY6CTY2IDJlIDBmIDFm IDg0IDAwIDAwIAlub3B3ICAgJWNzOjB4MCglcmF4LCVyYXgsMSkKICAgICAxNmQ6CTAwIDAwIDAw IAoKMDAwMDAwMDAwMDAwMDE3MCA8dnhsYW5fZmluZF92bmk+OgoJCWlmIChpbmV0X3NrKHZzLT5z b2NrLT5zayktPmluZXRfc3BvcnQgPT0gcG9ydCAmJgogICAgIDE3MDoJZTggMDAgMDAgMDAgMDAg ICAgICAgCWNhbGxxICAxNzUgPHZ4bGFuX2ZpbmRfdm5pKzB4NT4KCQkgICAgdnhsYW5fZ2V0X3Nr X2ZhbWlseSh2cykgPT0gZmFtaWx5ICYmCiAgICAgMTc1Ogk1NSAgICAgICAgICAgICAgICAgICAJ cHVzaCAgICVyYnAKICAgICAxNzY6CTQ4IDg5IGU1ICAgICAgICAgICAgIAltb3YgICAgJXJzcCwl cmJwCiAgICAgMTc5Ogk1MyAgICAgICAgICAgICAgICAgICAJcHVzaCAgICVyYngKICAgICAxN2E6 CTg5IGYzICAgICAgICAgICAgICAgIAltb3YgICAgJWVzaSwlZWJ4CnsKCXN0cnVjdCB2eGxhbl9z b2NrICp2czsKCglmbGFncyAmPSBWWExBTl9GX1JDVl9GTEFHUzsKCglobGlzdF9mb3JfZWFjaF9l bnRyeV9yY3UodnMsIHZzX2hlYWQobmV0LCBwb3J0KSwgaGxpc3QpIHsKICAgICAxN2M6CTg5IGQ2 ICAgICAgICAgICAgICAgIAltb3YgICAgJWVkeCwlZXNpCiAgICAgMTdlOgkwZiBiNyBkMSAgICAg ICAgICAgICAJbW92endsICVjeCwlZWR4CgkJaWYgKGluZXRfc2sodnMtPnNvY2stPnNrKS0+aW5l dF9zcG9ydCA9PSBwb3J0ICYmCiAgICAgMTgxOgk0NCA4OSBjMSAgICAgICAgICAgICAJbW92ICAg ICVyOGQsJWVjeAogICAgIDE4NDoJMGYgYjcgZjYgICAgICAgICAgICAgCW1vdnp3bCAlc2ksJWVz aQogICAgIDE4NzoJZTggNjQgZmYgZmYgZmYgICAgICAgCWNhbGxxICBmMCA8dnhsYW5fZmluZF9z b2NrPgogICAgIDE4YzoJNDggODUgYzAgICAgICAgICAgICAgCXRlc3QgICAlcmF4LCVyYXgKICAg ICAxOGY6CTc0IDJmICAgICAgICAgICAgICAgIAlqZSAgICAgMWMwIDx2eGxhbl9maW5kX3ZuaSsw eDUwPgogICAgIDE5MToJZjYgODAgMWQgMjAgMDAgMDAgMjAgCXRlc3RiICAkMHgyMCwweDIwMWQo JXJheCkKICAgICAxOTg6CTc1IDJiICAgICAgICAgICAgICAgIAlqbmUgICAgMWM1IDx2eGxhbl9m aW5kX3ZuaSsweDU1PgogICAgIDE5YToJNjkgZDMgNDcgODYgYzggNjEgICAgCWltdWwgICAkMHg2 MWM4ODY0NywlZWJ4LCVlZHgKCi8qIExvb2sgdXAgVk5JIGluIGEgcGVyIG5ldCBuYW1lc3BhY2Ug dGFibGUgKi8Kc3RhdGljIHN0cnVjdCB2eGxhbl9kZXYgKnZ4bGFuX2ZpbmRfdm5pKHN0cnVjdCBu ZXQgKm5ldCwgX19iZTMyIHZuaSwKCQkJCQlzYV9mYW1pbHlfdCBmYW1pbHksIF9fYmUxNiBwb3J0 LAoJCQkJCXUzMiBmbGFncykKewogICAgIDFhMDoJYzEgZWEgMTYgICAgICAgICAgICAgCXNociAg ICAkMHgxNiwlZWR4CiAgICAgMWEzOgk0OCA4ZCA0NCBkMCAxMCAgICAgICAJbGVhICAgIDB4MTAo JXJheCwlcmR4LDgpLCVyYXgKICAgICAxYTg6CTQ4IDhiIDUwIDA4ICAgICAgICAgIAltb3YgICAg MHg4KCVyYXgpLCVyZHgKICAgICAxYWM6CTMxIGMwICAgICAgICAgICAgICAgIAl4b3IgICAgJWVh eCwlZWF4CglzdHJ1Y3QgdnhsYW5fc29jayAqdnM7CgoJdnMgPSB2eGxhbl9maW5kX3NvY2sobmV0 LCBmYW1pbHksIHBvcnQsIGZsYWdzKTsKICAgICAxYWU6CTQ4IDg1IGQyICAgICAgICAgICAgIAl0 ZXN0ICAgJXJkeCwlcmR4CiAgICAgMWIxOgk3NCAwZiAgICAgICAgICAgICAgICAJamUgICAgIDFj MiA8dnhsYW5fZmluZF92bmkrMHg1Mj4KICAgICAxYjM6CTNiIDVhIDYwICAgICAgICAgICAgIAlj bXAgICAgMHg2MCglcmR4KSwlZWJ4CiAgICAgMWI2Ogk3NCAxMyAgICAgICAgICAgICAgICAJamUg ICAgIDFjYiA8dnhsYW5fZmluZF92bmkrMHg1Yj4KICAgICAxYjg6CTQ4IDhiIDEyICAgICAgICAg ICAgIAltb3YgICAgKCVyZHgpLCVyZHgKICAgICAxYmI6CTQ4IDg1IGQyICAgICAgICAgICAgIAl0 ZXN0ICAgJXJkeCwlcmR4CglpZiAoIXZzKQogICAgIDFiZToJNzUgZjMgICAgICAgICAgICAgICAg CWpuZSAgICAxYjMgPHZ4bGFuX2ZpbmRfdm5pKzB4NDM+CiAgICAgMWMwOgkzMSBjMCAgICAgICAg ICAgICAgICAJeG9yICAgICVlYXgsJWVheApzdGF0aWMgc3RydWN0IHZ4bGFuX2RldiAqdnhsYW5f dnNfZmluZF92bmkoc3RydWN0IHZ4bGFuX3NvY2sgKnZzLCBfX2JlMzIgdm5pKQp7CglzdHJ1Y3Qg dnhsYW5fZGV2ICp2eGxhbjsKCgkvKiBGb3IgZmxvdyBiYXNlZCBkZXZpY2VzLCBtYXAgYWxsIHBh Y2tldHMgdG8gVk5JIDAgKi8KCWlmICh2cy0+ZmxhZ3MgJiBWWExBTl9GX0NPTExFQ1RfTUVUQURB VEEpCiAgICAgMWMyOgk1YiAgICAgICAgICAgICAgICAgICAJcG9wICAgICVyYngKICAgICAxYzM6 CTVkICAgICAgICAgICAgICAgICAgIAlwb3AgICAgJXJicAogICAgIDFjNDoJYzMgICAgICAgICAg ICAgICAgICAgCXJldHEgICAKICAgICAxYzU6CTMxIGQyICAgICAgICAgICAgICAgIAl4b3IgICAg JWVkeCwlZWR4CiAgICAgMWM3OgkzMSBkYiAgICAgICAgICAgICAgICAJeG9yICAgICVlYngsJWVi eAogICAgIDFjOToJZWIgZDggICAgICAgICAgICAgICAgCWptcCAgICAxYTMgPHZ4bGFuX2ZpbmRf dm5pKzB4MzM+CiAgICAgMWNiOgk0OCA4OSBkMCAgICAgICAgICAgICAJbW92ICAgICVyZHgsJXJh eAogICAgIDFjZToJNWIgICAgICAgICAgICAgICAgICAgCXBvcCAgICAlcmJ4CiAgICAgMWNmOgk1 ZCAgICAgICAgICAgICAgICAgICAJcG9wICAgICVyYnAKICAgICAxZDA6CWMzICAgICAgICAgICAg ICAgICAgIAlyZXRxICAgCiAgICAgMWQxOgkwZiAxZiA0NCAwMCAwMCAgICAgICAJbm9wbCAgIDB4 MCglcmF4LCVyYXgsMSkKCQl2bmkgPSAwOwoKCWhsaXN0X2Zvcl9lYWNoX2VudHJ5X3JjdSh2eGxh biwgdm5pX2hlYWQodnMsIHZuaSksIGhsaXN0KSB7CiAgICAgMWQ2Ogk2NiAyZSAwZiAxZiA4NCAw MCAwMCAJbm9wdyAgICVjczoweDAoJXJheCwlcmF4LDEpCiAgICAgMWRkOgkwMCAwMCAwMCAKCjAw MDAwMDAwMDAwMDAxZTAgPHZ4bGFuX3ZhbGlkYXRlPjoKICAgICAxZTA6CWU4IDAwIDAwIDAwIDAw ICAgICAgIAljYWxscSAgMWU1IDx2eGxhbl92YWxpZGF0ZSsweDU+CgkJaWYgKHZ4bGFuLT5kZWZh dWx0X2RzdC5yZW1vdGVfdm5pID09IHZuaSkKICAgICAxZTU6CTU1ICAgICAgICAgICAgICAgICAg IAlwdXNoICAgJXJicAogICAgIDFlNjoJNDggOGIgNDcgMDggICAgICAgICAgCW1vdiAgICAweDgo JXJkaSksJXJheAogICAgIDFlYToJNDggODkgZTUgICAgICAgICAgICAgCW1vdiAgICAlcnNwLCVy YnAKCgkvKiBGb3IgZmxvdyBiYXNlZCBkZXZpY2VzLCBtYXAgYWxsIHBhY2tldHMgdG8gVk5JIDAg Ki8KCWlmICh2cy0+ZmxhZ3MgJiBWWExBTl9GX0NPTExFQ1RfTUVUQURBVEEpCgkJdm5pID0gMDsK CglobGlzdF9mb3JfZWFjaF9lbnRyeV9yY3UodnhsYW4sIHZuaV9oZWFkKHZzLCB2bmkpLCBobGlz dCkgewogICAgIDFlZDoJNDggODUgYzAgICAgICAgICAgICAgCXRlc3QgICAlcmF4LCVyYXgKewoJ c3RydWN0IHZ4bGFuX3NvY2sgKnZzOwoKCXZzID0gdnhsYW5fZmluZF9zb2NrKG5ldCwgZmFtaWx5 LCBwb3J0LCBmbGFncyk7CglpZiAoIXZzKQoJCXJldHVybiBOVUxMOwogICAgIDFmMDoJNzQgM2Mg ICAgICAgICAgICAgICAgCWplICAgICAyMmUgPHZ4bGFuX3ZhbGlkYXRlKzB4NGU+CgoJcmV0dXJu IHZ4bGFuX3ZzX2ZpbmRfdm5pKHZzLCB2bmkpOwp9CiAgICAgMWYyOgk2NiA4MyAzOCAwYSAgICAg ICAgICAJY21wdyAgICQweGEsKCVyYXgpCnN0YXRpYyBzdHJ1Y3QgdnhsYW5fZGV2ICp2eGxhbl92 c19maW5kX3ZuaShzdHJ1Y3QgdnhsYW5fc29jayAqdnMsIF9fYmUzMiB2bmkpCnsKCXN0cnVjdCB2 eGxhbl9kZXYgKnZ4bGFuOwoKCS8qIEZvciBmbG93IGJhc2VkIGRldmljZXMsIG1hcCBhbGwgcGFj a2V0cyB0byBWTkkgMCAqLwoJaWYgKHZzLT5mbGFncyAmIFZYTEFOX0ZfQ09MTEVDVF9NRVRBREFU QSkKICAgICAxZjY6CTc0IDI2ICAgICAgICAgICAgICAgIAlqZSAgICAgMjFlIDx2eGxhbl92YWxp ZGF0ZSsweDNlPgoJCXZuaSA9IDA7CiAgICAgMWY4OgkwZiAxZiA0NCAwMCAwMCAgICAgICAJbm9w bCAgIDB4MCglcmF4LCVyYXgsMSkKCglobGlzdF9mb3JfZWFjaF9lbnRyeV9yY3UodnhsYW4sIHZu aV9oZWFkKHZzLCB2bmkpLCBobGlzdCkgewoJCWlmICh2eGxhbi0+ZGVmYXVsdF9kc3QucmVtb3Rl X3ZuaSA9PSB2bmkpCiAgICAgMWZkOgliOCBlYSBmZiBmZiBmZiAgICAgICAJbW92ICAgICQweGZm ZmZmZmVhLCVlYXgKCXZzID0gdnhsYW5fZmluZF9zb2NrKG5ldCwgZmFtaWx5LCBwb3J0LCBmbGFn cyk7CglpZiAoIXZzKQoJCXJldHVybiBOVUxMOwoKCXJldHVybiB2eGxhbl92c19maW5kX3ZuaSh2 cywgdm5pKTsKfQogICAgIDIwMjoJNWQgICAgICAgICAgICAgICAgICAgCXBvcCAgICAlcmJwCiAg ICAgMjAzOgljMyAgICAgICAgICAgICAgICAgICAJcmV0cSAgIAogICAgIDIwNDoJNDggYzcgYzYg MDAgMDAgMDAgMDAgCW1vdiAgICAkMHgwLCVyc2kKICAgICAyMGI6CTQ4IGM3IGM3IDAwIDAwIDAw IDAwIAltb3YgICAgJDB4MCwlcmRpCglbSUZMQV9WWExBTl9HUEVdCT0geyAudHlwZSA9IE5MQV9G TEFHLCB9LAoJW0lGTEFfVlhMQU5fUkVNQ1NVTV9OT1BBUlRJQUxdCT0geyAudHlwZSA9IE5MQV9G TEFHIH0sCn07CgpzdGF0aWMgaW50IHZ4bGFuX3ZhbGlkYXRlKHN0cnVjdCBubGF0dHIgKnRiW10s IHN0cnVjdCBubGF0dHIgKmRhdGFbXSkKewogICAgIDIxMjoJZTggMDAgMDAgMDAgMDAgICAgICAg CWNhbGxxICAyMTcgPHZ4bGFuX3ZhbGlkYXRlKzB4Mzc+CglpZiAodGJbSUZMQV9BRERSRVNTXSkg ewogICAgIDIxNzoJYjggZWEgZmYgZmYgZmYgICAgICAgCW1vdiAgICAkMHhmZmZmZmZlYSwlZWF4 CglbSUZMQV9WWExBTl9HUEVdCT0geyAudHlwZSA9IE5MQV9GTEFHLCB9LAoJW0lGTEFfVlhMQU5f UkVNQ1NVTV9OT1BBUlRJQUxdCT0geyAudHlwZSA9IE5MQV9GTEFHIH0sCn07CgpzdGF0aWMgaW50 IHZ4bGFuX3ZhbGlkYXRlKHN0cnVjdCBubGF0dHIgKnRiW10sIHN0cnVjdCBubGF0dHIgKmRhdGFb XSkKewogICAgIDIxYzoJNWQgICAgICAgICAgICAgICAgICAgCXBvcCAgICAlcmJwCglpZiAodGJb SUZMQV9BRERSRVNTXSkgewogICAgIDIxZDoJYzMgICAgICAgICAgICAgICAgICAgCXJldHEgICAK ICAgICAyMWU6CThiIDUwIDA0ICAgICAgICAgICAgIAltb3YgICAgMHg0KCVyYXgpLCVlZHgKICAg ICAyMjE6CWY2IGMyIDAxICAgICAgICAgICAgIAl0ZXN0ICAgJDB4MSwlZGwKCQlpZiAobmxhX2xl bih0YltJRkxBX0FERFJFU1NdKSAhPSBFVEhfQUxFTikgewogICAgIDIyNDoJNzUgNDYgICAgICAg ICAgICAgICAgCWpuZSAgICAyNmMgPHZ4bGFuX3ZhbGlkYXRlKzB4OGM+CiAgICAgMjI2OgkwZiBi NyA0MCAwOCAgICAgICAgICAJbW92endsIDB4OCglcmF4KSwlZWF4CiAgICAgMjJhOgkwOSBkMCAg ICAgICAgICAgICAgICAJb3IgICAgICVlZHgsJWVheAogICAgIDIyYzoJNzQgM2UgICAgICAgICAg ICAgICAgCWplICAgICAyNmMgPHZ4bGFuX3ZhbGlkYXRlKzB4OGM+CgkJCT0gbmxhX2RhdGEoZGF0 YVtJRkxBX1ZYTEFOX1BPUlRfUkFOR0VdKTsKCgkJaWYgKG50b2hzKHAtPmhpZ2gpIDwgbnRvaHMo cC0+bG93KSkgewoJCQlwcl9kZWJ1ZygicG9ydCByYW5nZSAldSAuLiAldSBub3QgdmFsaWRcbiIs CgkJCQkgbnRvaHMocC0+bG93KSwgbnRvaHMocC0+aGlnaCkpOwoJCQlyZXR1cm4gLUVJTlZBTDsK ICAgICAyMmU6CTQ4IDg1IGY2ICAgICAgICAgICAgIAl0ZXN0ICAgJXJzaSwlcnNpCiAgICAgMjMx Ogk3NCA1ZSAgICAgICAgICAgICAgICAJamUgICAgIDI5MSA8dnhsYW5fdmFsaWRhdGUrMHhiMT4K CQl9Cgl9CgoJcmV0dXJuIDA7Cn0KICAgICAyMzM6CTQ4IDhiIDQ2IDA4ICAgICAgICAgIAltb3Yg ICAgMHg4KCVyc2kpLCVyYXgKCnN0YXRpYyBpbnQgdnhsYW5fdmFsaWRhdGUoc3RydWN0IG5sYXR0 ciAqdGJbXSwgc3RydWN0IG5sYXR0ciAqZGF0YVtdKQp7CglpZiAodGJbSUZMQV9BRERSRVNTXSkg ewoJCWlmIChubGFfbGVuKHRiW0lGTEFfQUREUkVTU10pICE9IEVUSF9BTEVOKSB7CgkJCXByX2Rl YnVnKCJpbnZhbGlkIGxpbmsgYWRkcmVzcyAobm90IGV0aGVybmV0KVxuIik7CiAgICAgMjM3Ogk0 OCA4NSBjMCAgICAgICAgICAgICAJdGVzdCAgICVyYXgsJXJheAogICAgIDIzYToJNzQgMDkgICAg ICAgICAgICAgICAgCWplICAgICAyNDUgPHZ4bGFuX3ZhbGlkYXRlKzB4NjU+CiAgICAgMjNjOgk4 MSA3OCAwNCBmZSBmZiBmZiAwMCAJY21wbCAgICQweGZmZmZmZSwweDQoJXJheCkKICAgICAyNDM6 CTc3IDcxICAgICAgICAgICAgICAgIAlqYSAgICAgMmI2IDx2eGxhbl92YWxpZGF0ZSsweGQ2Pgog ICAgIDI0NToJNDggOGIgNDYgNTAgICAgICAgICAgCW1vdiAgICAweDUwKCVyc2kpLCVyYXgKCQkJ cmV0dXJuIC1FSU5WQUw7CiAgICAgMjQ5Ogk0OCA4NSBjMCAgICAgICAgICAgICAJdGVzdCAgICVy YXgsJXJheAoJCQlyZXR1cm4gLUVJTlZBTDsKCQl9Cgl9CgoJcmV0dXJuIDA7Cn0KICAgICAyNGM6 CTc0IDY0ICAgICAgICAgICAgICAgIAlqZSAgICAgMmIyIDx2eGxhbl92YWxpZGF0ZSsweGQyPgog KiBCeSBkZWZpbml0aW9uIHRoZSBicm9hZGNhc3QgYWRkcmVzcyBpcyBhbHNvIGEgbXVsdGljYXN0 IGFkZHJlc3MuCiAqLwpzdGF0aWMgaW5saW5lIGJvb2wgaXNfbXVsdGljYXN0X2V0aGVyX2FkZHIo Y29uc3QgdTggKmFkZHIpCnsKI2lmIGRlZmluZWQoQ09ORklHX0hBVkVfRUZGSUNJRU5UX1VOQUxJ R05FRF9BQ0NFU1MpCgl1MzIgYSA9ICooY29uc3QgdTMyICopYWRkcjsKICAgICAyNGU6CTBmIGI3 IDQ4IDA2ICAgICAgICAgIAltb3Z6d2wgMHg2KCVyYXgpLCVlY3gKICovCnN0YXRpYyBpbmxpbmUg Ym9vbCBpc192YWxpZF9ldGhlcl9hZGRyKGNvbnN0IHU4ICphZGRyKQp7CgkvKiBGRjpGRjpGRjpG RjpGRjpGRiBpcyBhIG11bHRpY2FzdCBhZGRyZXNzIHNvIHdlIGRvbid0IG5lZWQgdG8KCSAqIGV4 cGxpY2l0bHkgY2hlY2sgZm9yIGl0IGhlcmUuICovCglyZXR1cm4gIWlzX211bHRpY2FzdF9ldGhl cl9hZGRyKGFkZHIpICYmICFpc196ZXJvX2V0aGVyX2FkZHIoYWRkcik7CiAgICAgMjUyOgkwZiBi NyA1MCAwNCAgICAgICAgICAJbW92endsIDB4NCglcmF4KSwlZWR4CiAgICAgMjU2OgkzMSBjMCAg ICAgICAgICAgICAgICAJeG9yICAgICVlYXgsJWVheAogICAgIDI1ODoJNjYgYzEgYzEgMDggICAg ICAgICAgCXJvbCAgICAkMHg4LCVjeAogICAgIDI1YzoJNjYgYzEgYzIgMDggICAgICAgICAgCXJv bCAgICAkMHg4LCVkeAoJCQlwcl9kZWJ1ZygiaW52YWxpZCBhbGwgemVybyBldGhlcm5ldCBhZGRy ZXNzXG4iKTsKCQkJcmV0dXJuIC1FQUREUk5PVEFWQUlMOwoJCX0KCX0KCglpZiAoIWRhdGEpCiAg ICAgMjYwOgk2NiAzOSBkMSAgICAgICAgICAgICAJY21wICAgICVkeCwlY3gKCQlyZXR1cm4gLUVJ TlZBTDsKCglpZiAoZGF0YVtJRkxBX1ZYTEFOX0lEXSkgewogICAgIDI2MzoJNzMgOWQgICAgICAg ICAgICAgICAgCWphZSAgICAyMDIgPHZ4bGFuX3ZhbGlkYXRlKzB4MjI+CiAgICAgMjY1OgkwZiAx ZiA0NCAwMCAwMCAgICAgICAJbm9wbCAgIDB4MCglcmF4LCVyYXgsMSkKICAgICAyNmE6CWViIDkx ICAgICAgICAgICAgICAgIAlqbXAgICAgMWZkIDx2eGxhbl92YWxpZGF0ZSsweDFkPgoJCV9fdTMy IGlkID0gbmxhX2dldF91MzIoZGF0YVtJRkxBX1ZYTEFOX0lEXSk7CgkJaWYgKGlkID49IFZYTEFO X1ZJRF9NQVNLKQogICAgIDI2YzoJMGYgMWYgNDQgMDAgMDAgICAgICAgCW5vcGwgICAweDAoJXJh eCwlcmF4LDEpCiAgICAgMjcxOgliOCA5ZCBmZiBmZiBmZiAgICAgICAJbW92ICAgICQweGZmZmZm ZjlkLCVlYXgKCQkJcmV0dXJuIC1FUkFOR0U7Cgl9CgoJaWYgKGRhdGFbSUZMQV9WWExBTl9QT1JU X1JBTkdFXSkgewogICAgIDI3NjoJNWQgICAgICAgICAgICAgICAgICAgCXBvcCAgICAlcmJwCiAg ICAgMjc3OgljMyAgICAgICAgICAgICAgICAgICAJcmV0cSAgIAogICAgIDI3ODoJMGYgYjcgYzkg ICAgICAgICAgICAgCW1vdnp3bCAlY3gsJWVjeAogICAgIDI3YjoJMGYgYjcgZDIgICAgICAgICAg ICAgCW1vdnp3bCAlZHgsJWVkeAoJCWNvbnN0IHN0cnVjdCBpZmxhX3Z4bGFuX3BvcnRfcmFuZ2Ug KnAKCQkJPSBubGFfZGF0YShkYXRhW0lGTEFfVlhMQU5fUE9SVF9SQU5HRV0pOwoKCQlpZiAobnRv aHMocC0+aGlnaCkgPCBudG9ocyhwLT5sb3cpKSB7CiAgICAgMjdlOgk0OCBjNyBjNiAwMCAwMCAw MCAwMCAJbW92ICAgICQweDAsJXJzaQogICAgIDI4NToJNDggYzcgYzcgMDAgMDAgMDAgMDAgCW1v diAgICAkMHgwLCVyZGkKICAgICAyOGM6CWU4IDAwIDAwIDAwIDAwICAgICAgIAljYWxscSAgMjkx IDx2eGxhbl92YWxpZGF0ZSsweGIxPgogICAgIDI5MToJYjggZWEgZmYgZmYgZmYgICAgICAgCW1v diAgICAkMHhmZmZmZmZlYSwlZWF4CiAgICAgMjk2Ogk1ZCAgICAgICAgICAgICAgICAgICAJcG9w ICAgICVyYnAKICAgICAyOTc6CWMzICAgICAgICAgICAgICAgICAgIAlyZXRxICAgCiAgICAgMjk4 Ogk0OCBjNyBjNiAwMCAwMCAwMCAwMCAJbW92ICAgICQweDAsJXJzaQojaW5jbHVkZSA8bGludXgv c3RyaW5naWZ5Lmg+CiNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgoKc3RhdGljIF9fYWx3YXlzX2lu bGluZSBib29sIGFyY2hfc3RhdGljX2JyYW5jaChzdHJ1Y3Qgc3RhdGljX2tleSAqa2V5LCBib29s IGJyYW5jaCkKewoJYXNtX3ZvbGF0aWxlX2dvdG8oIjE6IgogICAgIDI5ZjoJNDggYzcgYzcgMDAg MDAgMDAgMDAgCW1vdiAgICAkMHgwLCVyZGkKCQkJcmV0dXJuIC1FSU5WQUw7CgkJfQoJfQoKCXJl dHVybiAwOwp9CiAgICAgMmE2OgllOCAwMCAwMCAwMCAwMCAgICAgICAJY2FsbHEgIDJhYiA8dnhs YW5fdmFsaWRhdGUrMHhjYj4KCWlmIChkYXRhW0lGTEFfVlhMQU5fUE9SVF9SQU5HRV0pIHsKCQlj b25zdCBzdHJ1Y3QgaWZsYV92eGxhbl9wb3J0X3JhbmdlICpwCgkJCT0gbmxhX2RhdGEoZGF0YVtJ RkxBX1ZYTEFOX1BPUlRfUkFOR0VdKTsKCgkJaWYgKG50b2hzKHAtPmhpZ2gpIDwgbnRvaHMocC0+ bG93KSkgewoJCQlwcl9kZWJ1ZygicG9ydCByYW5nZSAldSAuLiAldSBub3QgdmFsaWRcbiIsCiAg ICAgMmFiOgliOCA5ZCBmZiBmZiBmZiAgICAgICAJbW92ICAgICQweGZmZmZmZjlkLCVlYXgKICAg ICAyYjA6CTVkICAgICAgICAgICAgICAgICAgIAlwb3AgICAgJXJicAogICAgIDJiMToJYzMgICAg ICAgICAgICAgICAgICAgCXJldHEgICAKICAgICAyYjI6CTMxIGMwICAgICAgICAgICAgICAgIAl4 b3IgICAgJWVheCwlZWF4CiAgICAgMmI0Ogk1ZCAgICAgICAgICAgICAgICAgICAJcG9wICAgICVy YnAKICAgICAyYjU6CWMzICAgICAgICAgICAgICAgICAgIAlyZXRxICAgCiAgICAgMmI2OgliOCBk ZSBmZiBmZiBmZiAgICAgICAJbW92ICAgICQweGZmZmZmZmRlLCVlYXgKICAgICAyYmI6CTVkICAg ICAgICAgICAgICAgICAgIAlwb3AgICAgJXJicAogICAgIDJiYzoJYzMgICAgICAgICAgICAgICAg ICAgCXJldHEgICAKICAgICAyYmQ6CTBmIDFmIDAwICAgICAgICAgICAgIAlub3BsICAgKCVyYXgp CgowMDAwMDAwMDAwMDAwMmMwIDx2eGxhbl9mZGJfZnJlZT46CiAgICAgMmMwOgllOCAwMCAwMCAw MCAwMCAgICAgICAJY2FsbHEgIDJjNSA8dnhsYW5fZmRiX2ZyZWUrMHg1PgoJCQkJIG50b2hzKHAt PmxvdyksIG50b2hzKHAtPmhpZ2gpKTsKCQkJcmV0dXJuIC1FSU5WQUw7CiAgICAgMmM1Ogk1NSAg ICAgICAgICAgICAgICAgICAJcHVzaCAgICVyYnAKCQl9Cgl9CgoJcmV0dXJuIDA7Cn0KICAgICAy YzY6CTQ4IDg5IGU1ICAgICAgICAgICAgIAltb3YgICAgJXJzcCwlcmJwCgkJCXByX2RlYnVnKCJp bnZhbGlkIGxpbmsgYWRkcmVzcyAobm90IGV0aGVybmV0KVxuIik7CgkJCXJldHVybiAtRUlOVkFM OwoJCX0KCgkJaWYgKCFpc192YWxpZF9ldGhlcl9hZGRyKG5sYV9kYXRhKHRiW0lGTEFfQUREUkVT U10pKSkgewoJCQlwcl9kZWJ1ZygiaW52YWxpZCBhbGwgemVybyBldGhlcm5ldCBhZGRyZXNzXG4i KTsKICAgICAyYzk6CTQxIDU2ICAgICAgICAgICAgICAgIAlwdXNoICAgJXIxNAogICAgIDJjYjoJ NDEgNTUgICAgICAgICAgICAgICAgCXB1c2ggICAlcjEzCiAgICAgMmNkOgk0MSA1NCAgICAgICAg ICAgICAgICAJcHVzaCAgICVyMTIKICAgICAyY2Y6CTUzICAgICAgICAgICAgICAgICAgIAlwdXNo ICAgJXJieAogICAgIDJkMDoJNGMgOGQgNmYgMjAgICAgICAgICAgCWxlYSAgICAweDIwKCVyZGkp LCVyMTMKICAgICAyZDQ6CTQ4IDhiIDQ3IDIwICAgICAgICAgIAltb3YgICAgMHgyMCglcmRpKSwl cmF4CiAgICAgMmQ4Ogk0YyA4ZCA3NyBmMCAgICAgICAgICAJbGVhICAgIC0weDEwKCVyZGkpLCVy MTQKCQkJcmV0dXJuIC1FQUREUk5PVEFWQUlMOwogICAgIDJkYzoJNDggOGIgMDggICAgICAgICAg ICAgCW1vdiAgICAoJXJheCksJXJjeAogICAgIDJkZjoJNDkgMzkgYzUgICAgICAgICAgICAgCWNt cCAgICAlcmF4LCVyMTMKCQkJCSBudG9ocyhwLT5sb3cpLCBudG9ocyhwLT5oaWdoKSk7CgkJCXJl dHVybiAtRUlOVkFMOwoJCX0KCX0KCglyZXR1cm4gMDsKICAgICAyZTI6CTRjIDhkIDYwIGQ4ICAg ICAgICAgIAlsZWEgICAgLTB4MjgoJXJheCksJXIxMgoJCXJldHVybiAtRUlOVkFMOwoKCWlmIChk YXRhW0lGTEFfVlhMQU5fSURdKSB7CgkJX191MzIgaWQgPSBubGFfZ2V0X3UzMihkYXRhW0lGTEFf VlhMQU5fSURdKTsKCQlpZiAoaWQgPj0gVlhMQU5fVklEX01BU0spCgkJCXJldHVybiAtRVJBTkdF OwogICAgIDJlNjoJNDggOGQgNTkgZDggICAgICAgICAgCWxlYSAgICAtMHgyOCglcmN4KSwlcmJ4 CiAgICAgMmVhOgk3NCAyNiAgICAgICAgICAgICAgICAJamUgICAgIDMxMiA8dnhsYW5fZmRiX2Zy ZWUrMHg1Mj4KCQkJcmV0dXJuIC1FSU5WQUw7CgkJfQoJfQoKCXJldHVybiAwOwp9CiAgICAgMmVj Ogk0OSA4ZCA3YyAyNCA0OCAgICAgICAJbGVhICAgIDB4NDgoJXIxMiksJXJkaQoKCXJldHVybiAw Owp9CgpzdGF0aWMgdm9pZCB2eGxhbl9mZGJfZnJlZShzdHJ1Y3QgcmN1X2hlYWQgKmhlYWQpCnsK ICAgICAyZjE6CWU4IDAwIDAwIDAwIDAwICAgICAgIAljYWxscSAgMmY2IDx2eGxhbl9mZGJfZnJl ZSsweDM2PgogICAgIDJmNjoJNGMgODkgZTcgICAgICAgICAgICAgCW1vdiAgICAlcjEyLCVyZGkK ICAgICAyZjk6CTQ5IDg5IGRjICAgICAgICAgICAgIAltb3YgICAgJXJieCwlcjEyCiAgICAgMmZj OgllOCAwMCAwMCAwMCAwMCAgICAgICAJY2FsbHEgIDMwMSA8dnhsYW5fZmRiX2ZyZWUrMHg0MT4K CXN0cnVjdCB2eGxhbl9mZGIgKmYgPSBjb250YWluZXJfb2YoaGVhZCwgc3RydWN0IHZ4bGFuX2Zk YiwgcmN1KTsKCXN0cnVjdCB2eGxhbl9yZHN0ICpyZCwgKm5kOwoKCWxpc3RfZm9yX2VhY2hfZW50 cnlfc2FmZShyZCwgbmQsICZmLT5yZW1vdGVzLCBsaXN0KSB7CiAgICAgMzAxOgk0OCA4ZCA0MyAy OCAgICAgICAgICAJbGVhICAgIDB4MjgoJXJieCksJXJheAogICAgIDMwNToJNDggOGIgNTMgMjgg ICAgICAgICAgCW1vdiAgICAweDI4KCVyYngpLCVyZHgKCXJldHVybiAwOwp9CgpzdGF0aWMgdm9p ZCB2eGxhbl9mZGJfZnJlZShzdHJ1Y3QgcmN1X2hlYWQgKmhlYWQpCnsKCXN0cnVjdCB2eGxhbl9m ZGIgKmYgPSBjb250YWluZXJfb2YoaGVhZCwgc3RydWN0IHZ4bGFuX2ZkYiwgcmN1KTsKICAgICAz MDk6CTRjIDM5IGU4ICAgICAgICAgICAgIAljbXAgICAgJXIxMywlcmF4CglzdHJ1Y3QgdnhsYW5f cmRzdCAqcmQsICpuZDsKCglsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUocmQsIG5kLCAmZi0+cmVt b3RlcywgbGlzdCkgewogICAgIDMwYzoJNDggOGQgNWEgZDggICAgICAgICAgCWxlYSAgICAtMHgy OCglcmR4KSwlcmJ4CiAgICAgMzEwOgk3NSBkYSAgICAgICAgICAgICAgICAJam5lICAgIDJlYyA8 dnhsYW5fZmRiX2ZyZWUrMHgyYz4KICAgICAzMTI6CTRjIDg5IGY3ICAgICAgICAgICAgIAltb3Yg ICAgJXIxNCwlcmRpCiAgICAgMzE1OgllOCAwMCAwMCAwMCAwMCAgICAgICAJY2FsbHEgIDMxYSA8 dnhsYW5fZmRiX2ZyZWUrMHg1YT4KICAgICAzMWE6CTViICAgICAgICAgICAgICAgICAgIAlwb3Ag ICAgJXJieAogICAgIDMxYjoJNDEgNWMgICAgICAgICAgICAgICAgCXBvcCAgICAlcjEyCgkJZHN0 X2NhY2hlX2Rlc3Ryb3koJnJkLT5kc3RfY2FjaGUpOwogICAgIDMxZDoJNDEgNWQgICAgICAgICAg ICAgICAgCXBvcCAgICAlcjEzCiAgICAgMzFmOgk0MSA1ZSAgICAgICAgICAgICAgICAJcG9wICAg ICVyMTQKICAgICAzMjE6CTVkICAgICAgICAgICAgICAgICAgIAlwb3AgICAgJXJicAogICAgIDMy MjoJYzMgICAgICAgICAgICAgICAgICAgCXJldHEgICAKICAgICAzMjM6CTBmIDFmIDAwICAgICAg ICAgICAgIAlub3BsICAgKCVyYXgpCgkJa2ZyZWUocmQpOwogICAgIDMyNjoJNjYgMmUgMGYgMWYg ODQgMDAgMDAgCW5vcHcgICAlY3M6MHgwKCVyYXgsJXJheCwxKQogICAgIDMyZDoJMDAgMDAgMDAg CgowMDAwMDAwMDAwMDAwMzMwIDxncm9fY2VsbF9wb2xsPjoKICAgICAzMzA6CTU1ICAgICAgICAg ICAgICAgICAgIAlwdXNoICAgJXJicApzdGF0aWMgdm9pZCB2eGxhbl9mZGJfZnJlZShzdHJ1Y3Qg cmN1X2hlYWQgKmhlYWQpCnsKCXN0cnVjdCB2eGxhbl9mZGIgKmYgPSBjb250YWluZXJfb2YoaGVh ZCwgc3RydWN0IHZ4bGFuX2ZkYiwgcmN1KTsKCXN0cnVjdCB2eGxhbl9yZHN0ICpyZCwgKm5kOwoK CWxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShyZCwgbmQsICZmLT5yZW1vdGVzLCBsaXN0KSB7CiAg ICAgMzMxOgk0OCA4OSBlNSAgICAgICAgICAgICAJbW92ICAgICVyc3AsJXJicAogICAgIDMzNDoJ NDEgNTYgICAgICAgICAgICAgICAgCXB1c2ggICAlcjE0CiAgICAgMzM2Ogk0MSA1NSAgICAgICAg ICAgICAgICAJcHVzaCAgICVyMTMKICAgICAzMzg6CTQ1IDMxIGVkICAgICAgICAgICAgIAl4b3Ig ICAgJXIxM2QsJXIxM2QKICAgICAzM2I6CTg1IGY2ICAgICAgICAgICAgICAgIAl0ZXN0ICAgJWVz aSwlZXNpCiAgICAgMzNkOgk0MSA1NCAgICAgICAgICAgICAgICAJcHVzaCAgICVyMTIKICAgICAz M2Y6CTUzICAgICAgICAgICAgICAgICAgIAlwdXNoICAgJXJieAogICAgIDM0MDoJN2UgNmUgICAg ICAgICAgICAgICAgCWpsZSAgICAzYjAgPGdyb19jZWxsX3BvbGwrMHg4MD4KCQlkc3RfY2FjaGVf ZGVzdHJveSgmcmQtPmRzdF9jYWNoZSk7CgkJa2ZyZWUocmQpOwoJfQoJa2ZyZWUoZik7CiAgICAg MzQyOgk0MSA4OSBmNSAgICAgICAgICAgICAJbW92ICAgICVlc2ksJXIxM2QKICAgICAzNDU6CTQ4 IDhiIDc3IGU4ICAgICAgICAgIAltb3YgICAgLTB4MTgoJXJkaSksJXJzaQogICAgIDM0OToJNGMg OGQgNzcgZTggICAgICAgICAgCWxlYSAgICAtMHgxOCglcmRpKSwlcjE0Cn0KICAgICAzNGQ6CTQ4 IDg5IGZiICAgICAgICAgICAgIAltb3YgICAgJXJkaSwlcmJ4CiAgICAgMzUwOgk0OSAzOSBmNiAg ICAgICAgICAgICAJY21wICAgICVyc2ksJXIxNAogICAgIDM1MzoJNzQgNGQgICAgICAgICAgICAg ICAgCWplICAgICAzYTIgPGdyb19jZWxsX3BvbGwrMHg3Mj4KICAgICAzNTU6CTQ4IDg1IGY2ICAg ICAgICAgICAgIAl0ZXN0ICAgJXJzaSwlcnNpCiAgICAgMzU4Ogk3NCA0OCAgICAgICAgICAgICAg ICAJamUgICAgIDNhMiA8Z3JvX2NlbGxfcG9sbCsweDcyPgogICAgIDM1YToJNDUgMzEgZTQgICAg ICAgICAgICAgCXhvciAgICAlcjEyZCwlcjEyZAogICAgIDM1ZDoJODMgNmIgZjggMDEgICAgICAg ICAgCXN1YmwgICAkMHgxLC0weDgoJXJieCkKCXJldHVybiBORVRfUlhfU1VDQ0VTUzsKfQoKLyog Y2FsbGVkIHVuZGVyIEJIIGNvbnRleHQgKi8Kc3RhdGljIGlubGluZSBpbnQgZ3JvX2NlbGxfcG9s bChzdHJ1Y3QgbmFwaV9zdHJ1Y3QgKm5hcGksIGludCBidWRnZXQpCnsKICAgICAzNjE6CTQ4IDg5 IGRmICAgICAgICAgICAgIAltb3YgICAgJXJieCwlcmRpCiAgICAgMzY0Ogk0MSA4MyBjNCAwMSAg ICAgICAgICAJYWRkICAgICQweDEsJXIxMmQKCXN0cnVjdCBncm9fY2VsbCAqY2VsbCA9IGNvbnRh aW5lcl9vZihuYXBpLCBzdHJ1Y3QgZ3JvX2NlbGwsIG5hcGkpOwoJc3RydWN0IHNrX2J1ZmYgKnNr YjsKCWludCB3b3JrX2RvbmUgPSAwOwogICAgIDM2ODoJNDggOGIgMTYgICAgICAgICAgICAgCW1v diAgICAoJXJzaSksJXJkeAoKCXdoaWxlICh3b3JrX2RvbmUgPCBidWRnZXQpIHsKICAgICAzNmI6 CTQ4IDhiIDQ2IDA4ICAgICAgICAgIAltb3YgICAgMHg4KCVyc2kpLCVyYXgKCXJldHVybiBORVRf UlhfU1VDQ0VTUzsKfQoKLyogY2FsbGVkIHVuZGVyIEJIIGNvbnRleHQgKi8Kc3RhdGljIGlubGlu ZSBpbnQgZ3JvX2NlbGxfcG9sbChzdHJ1Y3QgbmFwaV9zdHJ1Y3QgKm5hcGksIGludCBidWRnZXQp CnsKICAgICAzNmY6CTQ4IGM3IDA2IDAwIDAwIDAwIDAwIAltb3ZxICAgJDB4MCwoJXJzaSkKICoJ VGhlIHJlZmVyZW5jZSBjb3VudCBpcyBub3QgaW5jcmVtZW50ZWQgYW5kIHRoZSByZWZlcmVuY2Ug aXMgdGhlcmVmb3JlCiAqCXZvbGF0aWxlLiBVc2Ugd2l0aCBjYXV0aW9uLgogKi8Kc3RhdGljIGlu bGluZSBzdHJ1Y3Qgc2tfYnVmZiAqc2tiX3BlZWsoY29uc3Qgc3RydWN0IHNrX2J1ZmZfaGVhZCAq bGlzdF8pCnsKCXN0cnVjdCBza19idWZmICpza2IgPSBsaXN0Xy0+bmV4dDsKICAgICAzNzY6CTQ4 IGM3IDQ2IDA4IDAwIDAwIDAwIAltb3ZxICAgJDB4MCwweDgoJXJzaSkKICAgICAzN2Q6CTAwIAoJ c3RydWN0IGdyb19jZWxsICpjZWxsID0gY29udGFpbmVyX29mKG5hcGksIHN0cnVjdCBncm9fY2Vs bCwgbmFwaSk7CglzdHJ1Y3Qgc2tfYnVmZiAqc2tiOwoJaW50IHdvcmtfZG9uZSA9IDA7CgoJd2hp bGUgKHdvcmtfZG9uZSA8IGJ1ZGdldCkgewoJCXNrYiA9IF9fc2tiX2RlcXVldWUoJmNlbGwtPm5h cGlfc2ticyk7CiAgICAgMzdlOgk0OCA4OSA0MiAwOCAgICAgICAgICAJbW92ICAgICVyYXgsMHg4 KCVyZHgpCiAqLwpzdHJ1Y3Qgc2tfYnVmZiAqc2tiX2RlcXVldWUoc3RydWN0IHNrX2J1ZmZfaGVh ZCAqbGlzdCk7CnN0YXRpYyBpbmxpbmUgc3RydWN0IHNrX2J1ZmYgKl9fc2tiX2RlcXVldWUoc3Ry dWN0IHNrX2J1ZmZfaGVhZCAqbGlzdCkKewoJc3RydWN0IHNrX2J1ZmYgKnNrYiA9IHNrYl9wZWVr KGxpc3QpOwoJaWYgKHNrYikKICAgICAzODI6CTQ4IDg5IDEwICAgICAgICAgICAgIAltb3YgICAg JXJkeCwoJXJheCkKICAgICAzODU6CWU4IDAwIDAwIDAwIDAwICAgICAgIAljYWxscSAgMzhhIDxn cm9fY2VsbF9wb2xsKzB4NWE+CiAgICAgMzhhOgk0NSAzOSBlNSAgICAgICAgICAgICAJY21wICAg ICVyMTJkLCVyMTNkCnZvaWQgc2tiX3VubGluayhzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3Qg c2tfYnVmZl9oZWFkICpsaXN0KTsKc3RhdGljIGlubGluZSB2b2lkIF9fc2tiX3VubGluayhzdHJ1 Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3Qgc2tfYnVmZl9oZWFkICpsaXN0KQp7CglzdHJ1Y3Qgc2tf YnVmZiAqbmV4dCwgKnByZXY7CgoJbGlzdC0+cWxlbi0tOwogICAgIDM4ZDoJNzQgMjEgICAgICAg ICAgICAgICAgCWplICAgICAzYjAgPGdyb19jZWxsX3BvbGwrMHg4MD4KICAgICAzOGY6CTQ4IDhi IDczIGU4ICAgICAgICAgIAltb3YgICAgLTB4MTgoJXJieCksJXJzaQoJCWlmICghc2tiKQoJCQli cmVhazsKCQluYXBpX2dyb19yZWNlaXZlKG5hcGksIHNrYik7CiAgICAgMzkzOgk0OCA4NSBmNiAg ICAgICAgICAgICAJdGVzdCAgICVyc2ksJXJzaQoJCXdvcmtfZG9uZSsrOwogICAgIDM5NjoJNzQg MDUgICAgICAgICAgICAgICAgCWplICAgICAzOWQgPGdyb19jZWxsX3BvbGwrMHg2ZD4KCW5leHQJ ICAgPSBza2ItPm5leHQ7CiAgICAgMzk4Ogk0YyAzOSBmNiAgICAgICAgICAgICAJY21wICAgICVy MTQsJXJzaQoJcHJldgkgICA9IHNrYi0+cHJldjsKICAgICAzOWI6CTc1IGMwICAgICAgICAgICAg ICAgIAlqbmUgICAgMzVkIDxncm9fY2VsbF9wb2xsKzB4MmQ+CiAgICAgMzlkOgk0NSA4OSBlNSAg ICAgICAgICAgICAJbW92ICAgICVyMTJkLCVyMTNkCglza2ItPm5leHQgID0gc2tiLT5wcmV2ID0g TlVMTDsKICAgICAzYTA6CWViIDAzICAgICAgICAgICAgICAgIAlqbXAgICAgM2E1IDxncm9fY2Vs bF9wb2xsKzB4NzU+CiAgICAgM2EyOgk0NSAzMSBlZCAgICAgICAgICAgICAJeG9yICAgICVyMTNk LCVyMTNkCiAgICAgM2E1Ogk0NCA4OSBlZSAgICAgICAgICAgICAJbW92ICAgICVyMTNkLCVlc2kK ICAgICAzYTg6CTQ4IDg5IGRmICAgICAgICAgICAgIAltb3YgICAgJXJieCwlcmRpCiAgICAgM2Fi OgllOCAwMCAwMCAwMCAwMCAgICAgICAJY2FsbHEgIDNiMCA8Z3JvX2NlbGxfcG9sbCsweDgwPgoJ bmV4dC0+cHJldiA9IHByZXY7CiAgICAgM2IwOgk1YiAgICAgICAgICAgICAgICAgICAJcG9wICAg ICVyYngKICAgICAzYjE6CTQ0IDg5IGU4ICAgICAgICAgICAgIAltb3YgICAgJXIxM2QsJWVheAoJ cHJldi0+bmV4dCA9IG5leHQ7CiAgICAgM2I0Ogk0MSA1YyAgICAgICAgICAgICAgICAJcG9wICAg ICVyMTIKCgl3aGlsZSAod29ya19kb25lIDwgYnVkZ2V0KSB7CgkJc2tiID0gX19za2JfZGVxdWV1 ZSgmY2VsbC0+bmFwaV9za2JzKTsKCQlpZiAoIXNrYikKCQkJYnJlYWs7CgkJbmFwaV9ncm9fcmVj ZWl2ZShuYXBpLCBza2IpOwogICAgIDNiNjoJNDEgNWQgICAgICAgICAgICAgICAgCXBvcCAgICAl cjEzCiAgICAgM2I4Ogk0MSA1ZSAgICAgICAgICAgICAgICAJcG9wICAgICVyMTQKewoJc3RydWN0 IGdyb19jZWxsICpjZWxsID0gY29udGFpbmVyX29mKG5hcGksIHN0cnVjdCBncm9fY2VsbCwgbmFw aSk7CglzdHJ1Y3Qgc2tfYnVmZiAqc2tiOwoJaW50IHdvcmtfZG9uZSA9IDA7CgoJd2hpbGUgKHdv cmtfZG9uZSA8IGJ1ZGdldCkgewogICAgIDNiYToJNWQgICAgICAgICAgICAgICAgICAgCXBvcCAg ICAlcmJwCiAgICAgM2JiOgljMyAgICAgICAgICAgICAgICAgICAJcmV0cSAgIAogICAgIDNiYzoJ MGYgMWYgNDAgMDAgICAgICAgICAgCW5vcGwgICAweDAoJXJheCkKCjAwMDAwMDAwMDAwMDAzYzAg PHZ4bGFuX3NldHVwPjoKICoJVGhlIHJlZmVyZW5jZSBjb3VudCBpcyBub3QgaW5jcmVtZW50ZWQg YW5kIHRoZSByZWZlcmVuY2UgaXMgdGhlcmVmb3JlCiAqCXZvbGF0aWxlLiBVc2Ugd2l0aCBjYXV0 aW9uLgogKi8Kc3RhdGljIGlubGluZSBzdHJ1Y3Qgc2tfYnVmZiAqc2tiX3BlZWsoY29uc3Qgc3Ry dWN0IHNrX2J1ZmZfaGVhZCAqbGlzdF8pCnsKCXN0cnVjdCBza19idWZmICpza2IgPSBsaXN0Xy0+ bmV4dDsKICAgICAzYzA6CWU4IDAwIDAwIDAwIDAwICAgICAgIAljYWxscSAgM2M1IDx2eGxhbl9z ZXR1cCsweDU+CiAqLwpzdHJ1Y3Qgc2tfYnVmZiAqc2tiX2RlcXVldWUoc3RydWN0IHNrX2J1ZmZf aGVhZCAqbGlzdCk7CnN0YXRpYyBpbmxpbmUgc3RydWN0IHNrX2J1ZmYgKl9fc2tiX2RlcXVldWUo c3RydWN0IHNrX2J1ZmZfaGVhZCAqbGlzdCkKewoJc3RydWN0IHNrX2J1ZmYgKnNrYiA9IHNrYl9w ZWVrKGxpc3QpOwoJaWYgKHNrYikKICAgICAzYzU6CTU1ICAgICAgICAgICAgICAgICAgIAlwdXNo ICAgJXJicAogICAgIDNjNjoJYmUgMDYgMDAgMDAgMDAgICAgICAgCW1vdiAgICAkMHg2LCVlc2kK ICAgICAzY2I6CTQ4IDg5IGU1ICAgICAgICAgICAgIAltb3YgICAgJXJzcCwlcmJwCgkJc2tiID0g X19za2JfZGVxdWV1ZSgmY2VsbC0+bmFwaV9za2JzKTsKCQlpZiAoIXNrYikKCQkJYnJlYWs7CgkJ bmFwaV9ncm9fcmVjZWl2ZShuYXBpLCBza2IpOwoJCXdvcmtfZG9uZSsrOwogICAgIDNjZToJNDEg NTUgICAgICAgICAgICAgICAgCXB1c2ggICAlcjEzCiAgICAgM2QwOgk0MSA1NCAgICAgICAgICAg ICAgICAJcHVzaCAgICVyMTIKLyogY2FsbGVkIHVuZGVyIEJIIGNvbnRleHQgKi8Kc3RhdGljIGlu bGluZSBpbnQgZ3JvX2NlbGxfcG9sbChzdHJ1Y3QgbmFwaV9zdHJ1Y3QgKm5hcGksIGludCBidWRn ZXQpCnsKCXN0cnVjdCBncm9fY2VsbCAqY2VsbCA9IGNvbnRhaW5lcl9vZihuYXBpLCBzdHJ1Y3Qg Z3JvX2NlbGwsIG5hcGkpOwoJc3RydWN0IHNrX2J1ZmYgKnNrYjsKCWludCB3b3JrX2RvbmUgPSAw OwogICAgIDNkMjoJNTMgICAgICAgICAgICAgICAgICAgCXB1c2ggICAlcmJ4CiAgICAgM2QzOgk0 OCA4YiA5ZiAzOCAwMyAwMCAwMCAJbW92ICAgIDB4MzM4KCVyZGkpLCVyYngKCQluYXBpX2dyb19y ZWNlaXZlKG5hcGksIHNrYik7CgkJd29ya19kb25lKys7Cgl9CgoJaWYgKHdvcmtfZG9uZSA8IGJ1 ZGdldCkKCQluYXBpX2NvbXBsZXRlX2RvbmUobmFwaSwgd29ya19kb25lKTsKICAgICAzZGE6CTQ5 IDg5IGZjICAgICAgICAgICAgIAltb3YgICAgJXJkaSwlcjEyCiAgICAgM2RkOgljNiA4NyA3NCAw MiAwMCAwMCAwMSAJbW92YiAgICQweDEsMHgyNzQoJXJkaSkKCXJldHVybiB3b3JrX2RvbmU7Cn0K ICAgICAzZTQ6CTQ4IDg5IGRmICAgICAgICAgICAgIAltb3YgICAgJXJieCwlcmRpCiAgICAgM2U3 OgllOCAwMCAwMCAwMCAwMCAgICAgICAJY2FsbHEgIDNlYyA8dnhsYW5fc2V0dXArMHgyYz4KICAg ICAzZWM6CTBmIGI2IDAzICAgICAgICAgICAgIAltb3Z6YmwgKCVyYngpLCVlYXgKICAgICAzZWY6 CTRjIDg5IGU3ICAgICAgICAgICAgIAltb3YgICAgJXIxMiwlcmRpCglzcGluX3VubG9jaygmdm4t PnNvY2tfbG9jayk7Cn0KCi8qIEluaXRpYWxpemUgdGhlIGRldmljZSBzdHJ1Y3R1cmUuICovCnN0 YXRpYyB2b2lkIHZ4bGFuX3NldHVwKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCnsKICAgICAzZjI6 CTgzIGUwIGZlICAgICAgICAgICAgIAlhbmQgICAgJDB4ZmZmZmZmZmUsJWVheAogICAgIDNmNToJ ODMgYzggMDIgICAgICAgICAgICAgCW9yICAgICAkMHgyLCVlYXgKICogR2VuZXJhdGUgYSByYW5k b20gRXRoZXJuZXQgYWRkcmVzcyAoTUFDKSB0aGF0IGlzIG5vdCBtdWx0aWNhc3QKICogYW5kIGhh cyB0aGUgbG9jYWwgYXNzaWduZWQgYml0IHNldC4KICovCnN0YXRpYyBpbmxpbmUgdm9pZCBldGhf cmFuZG9tX2FkZHIodTggKmFkZHIpCnsKCWdldF9yYW5kb21fYnl0ZXMoYWRkciwgRVRIX0FMRU4p OwogICAgIDNmODoJODggMDMgICAgICAgICAgICAgICAgCW1vdiAgICAlYWwsKCVyYngpCiAgICAg M2ZhOgk0OSA4ZCA5YyAyNCA0MCAwOCAwMCAJbGVhICAgIDB4ODQwKCVyMTIpLCVyYngKICAgICA0 MDE6CTAwIAogICAgIDQwMjoJZTggMDAgMDAgMDAgMDAgICAgICAgCWNhbGxxICA0MDcgPHZ4bGFu X3NldHVwKzB4NDc+CiAgICAgNDA3Ogk0OSA4YiA4YyAyNCBmMCAwMCAwMCAJbW92ICAgIDB4ZjAo JXIxMiksJXJjeAogICAgIDQwZToJMDAgCiAqIGFuZCBzZXQgYWRkcl9hc3NpZ25fdHlwZSBzbyB0 aGUgc3RhdGUgY2FuIGJlIHJlYWQgYnkgc3lzZnMgYW5kIGJlCiAqIHVzZWQgYnkgdXNlcnNwYWNl LgogKi8Kc3RhdGljIGlubGluZSB2b2lkIGV0aF9od19hZGRyX3JhbmRvbShzdHJ1Y3QgbmV0X2Rl dmljZSAqZGV2KQp7CglkZXYtPmFkZHJfYXNzaWduX3R5cGUgPSBORVRfQUREUl9SQU5ET007CiAg ICAgNDBmOgk0OCBiOCA4OSAxMCAzYiA4MCAyMCAJbW92YWJzICQweDQyMDgwM2IxMDg5LCVyYXgK ICAgICA0MTY6CTA0IDAwIDAwIAogKiBHZW5lcmF0ZSBhIHJhbmRvbSBFdGhlcm5ldCBhZGRyZXNz IChNQUMpIHRoYXQgaXMgbm90IG11bHRpY2FzdAogKiBhbmQgaGFzIHRoZSBsb2NhbCBhc3NpZ25l ZCBiaXQgc2V0LgogKi8Kc3RhdGljIGlubGluZSB2b2lkIGV0aF9yYW5kb21fYWRkcih1OCAqYWRk cikKewoJZ2V0X3JhbmRvbV9ieXRlcyhhZGRyLCBFVEhfQUxFTik7CiAgICAgNDE5Ogk0OCBiYSAw OSAxMCAzYiA4MCAyMCAJbW92YWJzICQweDIwODAzYjEwMDksJXJkeAogICAgIDQyMDoJMDAgMDAg MDAgCglhZGRyWzBdICY9IDB4ZmU7CS8qIGNsZWFyIG11bHRpY2FzdCBiaXQgKi8KCWFkZHJbMF0g fD0gMHgwMjsJLyogc2V0IGxvY2FsIGFzc2lnbm1lbnQgYml0IChJRUVFODAyKSAqLwogICAgIDQy MzoJNDkgOGQgYmMgMjQgZTAgMDggMDAgCWxlYSAgICAweDhlMCglcjEyKSwlcmRpCiAgICAgNDJh OgkwMCAKCWRldi0+aHdfZmVhdHVyZXMgfD0gTkVUSUZfRl9HU09fU09GVFdBUkU7CglkZXYtPmh3 X2ZlYXR1cmVzIHw9IE5FVElGX0ZfSFdfVkxBTl9DVEFHX1RYIHwgTkVUSUZfRl9IV19WTEFOX1NU QUdfVFg7CgluZXRpZl9rZWVwX2RzdChkZXYpOwoJZGV2LT5wcml2X2ZsYWdzIHw9IElGRl9OT19R VUVVRTsKCglJTklUX0xJU1RfSEVBRCgmdnhsYW4tPm5leHQpOwogICAgIDQyYjoJYmUgMDAgMDAg MDggMDAgICAgICAgCW1vdiAgICAkMHg4MDAwMCwlZXNpCiAgICAgNDMwOgk0OSBjNyA4NCAyNCA3 MCAwNCAwMCAJbW92cSAgICQweDAsMHg0NzAoJXIxMikKICAgICA0Mzc6CTAwIDAwIDAwIDAwIDAw IAoJZXRoZXJfc2V0dXAoZGV2KTsKCglkZXYtPmRlc3RydWN0b3IgPSBmcmVlX25ldGRldjsKCVNF VF9ORVRERVZfREVWVFlQRShkZXYsICZ2eGxhbl90eXBlKTsKCglkZXYtPmZlYXR1cmVzCXw9IE5F VElGX0ZfTExUWDsKICAgICA0M2M6CTQ5IGM3IDg0IDI0IGY4IDA0IDAwIAltb3ZxICAgJDB4MCww eDRmOCglcjEyKQogICAgIDQ0MzoJMDAgMDAgMDAgMDAgMDAgCglkZXYtPmZlYXR1cmVzCXw9IE5F VElGX0ZfU0cgfCBORVRJRl9GX0hXX0NTVU07CglkZXYtPmZlYXR1cmVzICAgfD0gTkVUSUZfRl9S WENTVU07CglkZXYtPmZlYXR1cmVzICAgfD0gTkVUSUZfRl9HU09fU09GVFdBUkU7CgoJZGV2LT52 bGFuX2ZlYXR1cmVzID0gZGV2LT5mZWF0dXJlczsKCWRldi0+ZmVhdHVyZXMgfD0gTkVUSUZfRl9I V19WTEFOX0NUQUdfVFggfCBORVRJRl9GX0hXX1ZMQU5fU1RBR19UWDsKICAgICA0NDg6CTQxIGM3 IDg0IDI0IDI4IDA5IDAwIAltb3ZsICAgJDB4MCwweDkyOCglcjEyKQogICAgIDQ0ZjoJMDAgMDAg MDAgMDAgMDAgCglkZXYtPnByaXZfZmxhZ3MgfD0gSUZGX05PX1FVRVVFOwoKCUlOSVRfTElTVF9I RUFEKCZ2eGxhbi0+bmV4dCk7CglzcGluX2xvY2tfaW5pdCgmdnhsYW4tPmhhc2hfbG9jayk7CgoJ aW5pdF90aW1lcl9kZWZlcnJhYmxlKCZ2eGxhbi0+YWdlX3RpbWVyKTsKICAgICA0NTQ6CTQ4IDA5 IGM4ICAgICAgICAgICAgIAlvciAgICAgJXJjeCwlcmF4CiAgICAgNDU3Ogk0OCAwOSBjYSAgICAg ICAgICAgICAJb3IgICAgICVyY3gsJXJkeAogICAgIDQ1YToJMzEgYzkgICAgICAgICAgICAgICAg CXhvciAgICAlZWN4LCVlY3gKICAgICA0NWM6CTQ5IDg5IDg0IDI0IGYwIDAwIDAwIAltb3YgICAg JXJheCwweGYwKCVyMTIpCiAgICAgNDYzOgkwMCAKCXVuc2lnbmVkIGludCBoOwoKCWV0aF9od19h ZGRyX3JhbmRvbShkZXYpOwoJZXRoZXJfc2V0dXAoZGV2KTsKCglkZXYtPmRlc3RydWN0b3IgPSBm cmVlX25ldGRldjsKICAgICA0NjQ6CTQ4IGI4IDg5IDAwIDNiIDgwIDIwIAltb3ZhYnMgJDB4NDIw ODAzYjAwODksJXJheAogICAgIDQ2YjoJMDQgMDAgMDAgCglTRVRfTkVUREVWX0RFVlRZUEUoZGV2 LCAmdnhsYW5fdHlwZSk7CiAgICAgNDZlOgk0OSAwOSA4NCAyNCBmOCAwMCAwMCAJb3IgICAgICVy YXgsMHhmOCglcjEyKQogICAgIDQ3NToJMDAgCiAgICAgNDc2Ogk0MSA4YiA4NCAyNCAzYyAwMiAw MCAJbW92ICAgIDB4MjNjKCVyMTIpLCVlYXgKICAgICA0N2Q6CTAwIAoJZGV2LT5od19mZWF0dXJl cyB8PSBORVRJRl9GX0hXX1ZMQU5fQ1RBR19UWCB8IE5FVElGX0ZfSFdfVkxBTl9TVEFHX1RYOwoJ bmV0aWZfa2VlcF9kc3QoZGV2KTsKCWRldi0+cHJpdl9mbGFncyB8PSBJRkZfTk9fUVVFVUU7CgoJ SU5JVF9MSVNUX0hFQUQoJnZ4bGFuLT5uZXh0KTsKCXNwaW5fbG9ja19pbml0KCZ2eGxhbi0+aGFz aF9sb2NrKTsKICAgICA0N2U6CTQ5IDg5IDk0IDI0IDA4IDAxIDAwIAltb3YgICAgJXJkeCwweDEw OCglcjEyKQogICAgIDQ4NToJMDAgCglkZXYtPmZlYXR1cmVzCXw9IE5FVElGX0ZfU0cgfCBORVRJ Rl9GX0hXX0NTVU07CglkZXYtPmZlYXR1cmVzICAgfD0gTkVUSUZfRl9SWENTVU07CglkZXYtPmZl YXR1cmVzICAgfD0gTkVUSUZfRl9HU09fU09GVFdBUkU7CgoJZGV2LT52bGFuX2ZlYXR1cmVzID0g ZGV2LT5mZWF0dXJlczsKCWRldi0+ZmVhdHVyZXMgfD0gTkVUSUZfRl9IV19WTEFOX0NUQUdfVFgg fCBORVRJRl9GX0hXX1ZMQU5fU1RBR19UWDsKICAgICA0ODY6CTMxIGQyICAgICAgICAgICAgICAg IAl4b3IgICAgJWVkeCwlZWR4CglkZXYtPmZlYXR1cmVzCXw9IE5FVElGX0ZfTExUWDsKCWRldi0+ ZmVhdHVyZXMJfD0gTkVUSUZfRl9TRyB8IE5FVElGX0ZfSFdfQ1NVTTsKCWRldi0+ZmVhdHVyZXMg ICB8PSBORVRJRl9GX1JYQ1NVTTsKCWRldi0+ZmVhdHVyZXMgICB8PSBORVRJRl9GX0dTT19TT0ZU V0FSRTsKCglkZXYtPnZsYW5fZmVhdHVyZXMgPSBkZXYtPmZlYXR1cmVzOwogICAgIDQ4ODoJMjUg ZGYgZmYgZmQgZmYgICAgICAgCWFuZCAgICAkMHhmZmZkZmZkZiwlZWF4CglkZXYtPmZlYXR1cmVz IHw9IE5FVElGX0ZfSFdfVkxBTl9DVEFHX1RYIHwgTkVUSUZfRl9IV19WTEFOX1NUQUdfVFg7CiAg ICAgNDhkOgkwZCAwMCAwMCAyMCAwMCAgICAgICAJb3IgICAgICQweDIwMDAwMCwlZWF4CiAgICAg NDkyOgk0MSA4OSA4NCAyNCAzYyAwMiAwMCAJbW92ICAgICVlYXgsMHgyM2MoJXIxMikKICAgICA0 OTk6CTAwIAoJZGV2LT5od19mZWF0dXJlcyB8PSBORVRJRl9GX1NHIHwgTkVUSUZfRl9IV19DU1VN IHwgTkVUSUZfRl9SWENTVU07CglkZXYtPmh3X2ZlYXR1cmVzIHw9IE5FVElGX0ZfR1NPX1NPRlRX QVJFOwoJZGV2LT5od19mZWF0dXJlcyB8PSBORVRJRl9GX0hXX1ZMQU5fQ1RBR19UWCB8IE5FVElG X0ZfSFdfVkxBTl9TVEFHX1RYOwogICAgIDQ5YToJNDkgOGQgODQgMjQgNTAgMDggMDAgCWxlYSAg ICAweDg1MCglcjEyKSwlcmF4CiAgICAgNGExOgkwMCAKICAgICA0YTI6CTQ5IDg5IDg0IDI0IDUw IDA4IDAwIAltb3YgICAgJXJheCwweDg1MCglcjEyKQogICAgIDRhOToJMDAgCgluZXRpZl9rZWVw X2RzdChkZXYpOwoJZGV2LT5wcml2X2ZsYWdzIHw9IElGRl9OT19RVUVVRTsKICAgICA0YWE6CTQ5 IDg5IDg0IDI0IDU4IDA4IDAwIAltb3YgICAgJXJheCwweDg1OCglcjEyKQogICAgIDRiMToJMDAg CglkZXYtPmZlYXR1cmVzCXw9IE5FVElGX0ZfTExUWDsKCWRldi0+ZmVhdHVyZXMJfD0gTkVUSUZf Rl9TRyB8IE5FVElGX0ZfSFdfQ1NVTTsKCWRldi0+ZmVhdHVyZXMgICB8PSBORVRJRl9GX1JYQ1NV TTsKCWRldi0+ZmVhdHVyZXMgICB8PSBORVRJRl9GX0dTT19TT0ZUV0FSRTsKCglkZXYtPnZsYW5f ZmVhdHVyZXMgPSBkZXYtPmZlYXR1cmVzOwogICAgIDRiMjoJZTggMDAgMDAgMDAgMDAgICAgICAg CWNhbGxxICA0YjcgPHZ4bGFuX3NldHVwKzB4Zjc+CglkZXYtPnByaXZfZmxhZ3MgfD0gSUZGX05P X1FVRVVFOwoKCUlOSVRfTElTVF9IRUFEKCZ2eGxhbi0+bmV4dCk7CglzcGluX2xvY2tfaW5pdCgm dnhsYW4tPmhhc2hfbG9jayk7CgoJaW5pdF90aW1lcl9kZWZlcnJhYmxlKCZ2eGxhbi0+YWdlX3Rp bWVyKTsKICAgICA0Yjc6CTBmIGI3IDA1IDAwIDAwIDAwIDAwIAltb3Z6d2wgMHgwKCVyaXApLCVl YXggICAgICAgICMgNGJlIDx2eGxhbl9zZXR1cCsweGZlPgoJZGV2LT5mZWF0dXJlcyB8PSBORVRJ Rl9GX0hXX1ZMQU5fQ1RBR19UWCB8IE5FVElGX0ZfSFdfVkxBTl9TVEFHX1RYOwoJZGV2LT5od19m ZWF0dXJlcyB8PSBORVRJRl9GX1NHIHwgTkVUSUZfRl9IV19DU1VNIHwgTkVUSUZfRl9SWENTVU07 CglkZXYtPmh3X2ZlYXR1cmVzIHw9IE5FVElGX0ZfR1NPX1NPRlRXQVJFOwoJZGV2LT5od19mZWF0 dXJlcyB8PSBORVRJRl9GX0hXX1ZMQU5fQ1RBR19UWCB8IE5FVElGX0ZfSFdfVkxBTl9TVEFHX1RY OwoJbmV0aWZfa2VlcF9kc3QoZGV2KTsKCWRldi0+cHJpdl9mbGFncyB8PSBJRkZfTk9fUVVFVUU7 CiAgICAgNGJlOgk0OSBjNyA4NCAyNCBmOCAwOCAwMCAJbW92cSAgICQweDAsMHg4ZjgoJXIxMikK ICAgICA0YzU6CTAwIDAwIDAwIDAwIDAwIAoKCUlOSVRfTElTVF9IRUFEKCZ2eGxhbi0+bmV4dCk7 CiAgICAgNGNhOgliZSAwOCAwMCAwMCAwMCAgICAgICAJbW92ICAgICQweDgsJWVzaQogICAgIDRj ZjoJNDkgODkgOWMgMjQgMDAgMDkgMDAgCW1vdiAgICAlcmJ4LDB4OTAwKCVyMTIpCiAgICAgNGQ2 OgkwMCAKewoJc3dpdGNoIChzaXplKSB7CgljYXNlIDE6ICoodm9sYXRpbGUgX191OCAqKXAgPSAq KF9fdTggKilyZXM7IGJyZWFrOwoJY2FzZSAyOiAqKHZvbGF0aWxlIF9fdTE2ICopcCA9ICooX191 MTYgKilyZXM7IGJyZWFrOwoJY2FzZSA0OiAqKHZvbGF0aWxlIF9fdTMyICopcCA9ICooX191MzIg KilyZXM7IGJyZWFrOwoJY2FzZSA4OiAqKHZvbGF0aWxlIF9fdTY0ICopcCA9ICooX191NjQgKily ZXM7IGJyZWFrOwogICAgIDRkNzoJNGQgODkgYTQgMjQgNzAgMDggMDAgCW1vdiAgICAlcjEyLDB4 ODcwKCVyMTIpCiAgICAgNGRlOgkwMCAKICAgICA0ZGY6CWJmIGUwIDAwIDAwIDAwICAgICAgIAlt b3YgICAgJDB4ZTAsJWVkaQoJc3Bpbl9sb2NrX2luaXQoJnZ4bGFuLT5oYXNoX2xvY2spOwoKCWlu aXRfdGltZXJfZGVmZXJyYWJsZSgmdnhsYW4tPmFnZV90aW1lcik7CiAgICAgNGU0Ogk2NiBjMSBj MCAwOCAgICAgICAgICAJcm9sICAgICQweDgsJWF4Cgl2eGxhbi0+YWdlX3RpbWVyLmZ1bmN0aW9u ID0gdnhsYW5fY2xlYW51cDsKCXZ4bGFuLT5hZ2VfdGltZXIuZGF0YSA9ICh1bnNpZ25lZCBsb25n KSB2eGxhbjsKCgl2eGxhbi0+Y2ZnLmRzdF9wb3J0ID0gaHRvbnModnhsYW5fcG9ydCk7CiAgICAg NGU4Ogk2NiA0MSA4OSA4NCAyNCA3YyAwOSAJbW92ICAgICVheCwweDk3YyglcjEyKQogICAgIDRl ZjoJMDAgMDAgCgoJSU5JVF9MSVNUX0hFQUQoJnZ4bGFuLT5uZXh0KTsKCXNwaW5fbG9ja19pbml0 KCZ2eGxhbi0+aGFzaF9sb2NrKTsKCglpbml0X3RpbWVyX2RlZmVycmFibGUoJnZ4bGFuLT5hZ2Vf dGltZXIpOwoJdnhsYW4tPmFnZV90aW1lci5mdW5jdGlvbiA9IHZ4bGFuX2NsZWFudXA7CiAgICAg NGYxOgllOCAwMCAwMCAwMCAwMCAgICAgICAJY2FsbHEgIDRmNiA8dnhsYW5fc2V0dXArMHgxMzY+ CiAgICAgNGY2Ogk0OCA4NSBjMCAgICAgICAgICAgICAJdGVzdCAgICVyYXgsJXJheAogICAgIDRm OToJNDkgODkgODQgMjQgMzAgMDkgMDAgCW1vdiAgICAlcmF4LDB4OTMwKCVyMTIpCiAgICAgNTAw OgkwMCAKCXZ4bGFuLT5hZ2VfdGltZXIuZGF0YSA9ICh1bnNpZ25lZCBsb25nKSB2eGxhbjsKICAg ICA1MDE6CTc0IDc3ICAgICAgICAgICAgICAgIAlqZSAgICAgNTdhIDx2eGxhbl9zZXR1cCsweDFi YT4KICAgICA1MDM6CTQxIGJkIGZmIGZmIGZmIGZmICAgIAltb3YgICAgJDB4ZmZmZmZmZmYsJXIx M2QKCgl2eGxhbi0+Y2ZnLmRzdF9wb3J0ID0gaHRvbnModnhsYW5fcG9ydCk7CgoJdnhsYW4tPmRl diA9IGRldjsKICAgICA1MDk6CWViIDBhICAgICAgICAgICAgICAgIAlqbXAgICAgNTE1IDx2eGxh bl9zZXR1cCsweDE1NT4KICAgICA1MGI6CWYwIDgwIDYzIDI4IGZlICAgICAgIAlsb2NrIGFuZGIg JDB4ZmUsMHgyOCglcmJ4KQoKc3RhdGljIGlubGluZSBpbnQgZ3JvX2NlbGxzX2luaXQoc3RydWN0 IGdyb19jZWxscyAqZ2NlbGxzLCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQp7CglpbnQgaTsKCgln Y2VsbHMtPmNlbGxzID0gYWxsb2NfcGVyY3B1KHN0cnVjdCBncm9fY2VsbCk7CiAgICAgNTEwOglm MCA4MCA2MyAyOCBmYiAgICAgICAJbG9jayBhbmRiICQweGZiLDB4MjgoJXJieCkKCglpbml0X3Rp bWVyX2RlZmVycmFibGUoJnZ4bGFuLT5hZ2VfdGltZXIpOwoJdnhsYW4tPmFnZV90aW1lci5mdW5j dGlvbiA9IHZ4bGFuX2NsZWFudXA7Cgl2eGxhbi0+YWdlX3RpbWVyLmRhdGEgPSAodW5zaWduZWQg bG9uZykgdnhsYW47CgoJdnhsYW4tPmNmZy5kc3RfcG9ydCA9IGh0b25zKHZ4bGFuX3BvcnQpOwog ICAgIDUxNToJNDEgOGQgNTUgMDEgICAgICAgICAgCWxlYSAgICAweDEoJXIxMyksJWVkeAogICAg IDUxOToJYmUgMDAgMDEgMDAgMDAgICAgICAgCW1vdiAgICAkMHgxMDAsJWVzaQogICAgIDUxZToJ NDggYzcgYzcgMDAgMDAgMDAgMDAgCW1vdiAgICAkMHgwLCVyZGkKICAgICA1MjU6CTQ4IDYzIGQy ICAgICAgICAgICAgIAltb3ZzbHEgJWVkeCwlcmR4CglpZiAoIWdjZWxscy0+Y2VsbHMpCiAgICAg NTI4OgllOCAwMCAwMCAwMCAwMCAgICAgICAJY2FsbHEgIDUyZCA8dnhsYW5fc2V0dXArMHgxNmQ+ CgpzdGF0aWMgaW5saW5lIGludCBncm9fY2VsbHNfaW5pdChzdHJ1Y3QgZ3JvX2NlbGxzICpnY2Vs bHMsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCnsKCWludCBpOwoKCWdjZWxscy0+Y2VsbHMgPSBh bGxvY19wZXJjcHUoc3RydWN0IGdyb19jZWxsKTsKICAgICA1MmQ6CTNiIDA1IDAwIDAwIDAwIDAw ICAgIAljbXAgICAgMHgwKCVyaXApLCVlYXggICAgICAgICMgNTMzIDx2eGxhbl9zZXR1cCsweDE3 Mz4KCWlmICghZ2NlbGxzLT5jZWxscykKICAgICA1MzM6CTQxIDg5IGM1ICAgICAgICAgICAgIAlt b3YgICAgJWVheCwlcjEzZAogICAgIDUzNjoJN2QgNDIgICAgICAgICAgICAgICAgCWpnZSAgICA1 N2EgPHZ4bGFuX3NldHVwKzB4MWJhPgogICAgIDUzODoJNDggOTggICAgICAgICAgICAgICAgCWNs dHEgICAKICAgICA1M2E6CTQ5IDhiIDljIDI0IDMwIDA5IDAwIAltb3YgICAgMHg5MzAoJXIxMiks JXJieAogICAgIDU0MToJMDAgCiAqLwpzdGF0aWMgX19hbHdheXNfaW5saW5lIHZvaWQKY2xlYXJf Yml0KGxvbmcgbnIsIHZvbGF0aWxlIHVuc2lnbmVkIGxvbmcgKmFkZHIpCnsKCWlmIChJU19JTU1F RElBVEUobnIpKSB7CgkJYXNtIHZvbGF0aWxlKExPQ0tfUFJFRklYICJhbmRiICUxLCUwIgogICAg IDU0MjoJYjkgNDAgMDAgMDAgMDAgICAgICAgCW1vdiAgICAkMHg0MCwlZWN4CnN0YXRpYyBpbmxp bmUgdW5zaWduZWQgaW50IGNwdW1hc2tfbmV4dChpbnQgbiwgY29uc3Qgc3RydWN0IGNwdW1hc2sg KnNyY3ApCnsKCS8qIC0xIGlzIGEgbGVnYWwgYXJnIGhlcmUuICovCglpZiAobiAhPSAtMSkKCQlj cHVtYXNrX2NoZWNrKG4pOwoJcmV0dXJuIGZpbmRfbmV4dF9iaXQoY3B1bWFza19iaXRzKHNyY3Ap LCBucl9jcHVtYXNrX2JpdHMsIG4rMSk7CiAgICAgNTQ3Ogk0OCAwMyAxYyBjNSAwMCAwMCAwMCAJ YWRkICAgIDB4MCgsJXJheCw4KSwlcmJ4CiAgICAgNTRlOgkwMCAKICAgICA1NGY6CTQ4IGM3IGMy IDAwIDAwIDAwIDAwIAltb3YgICAgJDB4MCwlcmR4CiAgICAgNTU2Ogk0YyA4OSBlNyAgICAgICAg ICAgICAJbW92ICAgICVyMTIsJXJkaQogICAgIDU1OToJNDggOGQgNzMgMTggICAgICAgICAgCWxl YSAgICAweDE4KCVyYngpLCVyc2kKCQlyZXR1cm4gLUVOT01FTTsKCglmb3JfZWFjaF9wb3NzaWJs ZV9jcHUoaSkgewogICAgIDU1ZDoJNDggODkgMWIgICAgICAgICAgICAgCW1vdiAgICAlcmJ4LCgl cmJ4KQogICAgIDU2MDoJNDggODkgNWIgMDggICAgICAgICAgCW1vdiAgICAlcmJ4LDB4OCglcmJ4 KQogICAgIDU2NDoJYzcgNDMgMTAgMDAgMDAgMDAgMDAgCW1vdmwgICAkMHgwLDB4MTAoJXJieCkK CQlzdHJ1Y3QgZ3JvX2NlbGwgKmNlbGwgPSBwZXJfY3B1X3B0cihnY2VsbHMtPmNlbGxzLCBpKTsK ICAgICA1NmI6CWU4IDAwIDAwIDAwIDAwICAgICAgIAljYWxscSAgNTcwIDx2eGxhbl9zZXR1cCsw eDFiMD4KICAgICA1NzA6CTQ4IDhiIDQzIDI4ICAgICAgICAgIAltb3YgICAgMHgyOCglcmJ4KSwl cmF4CgoJCV9fc2tiX3F1ZXVlX2hlYWRfaW5pdCgmY2VsbC0+bmFwaV9za2JzKTsKCQluZXRpZl9u YXBpX2FkZChkZXYsICZjZWxsLT5uYXBpLCBncm9fY2VsbF9wb2xsLCA2NCk7CiAgICAgNTc0Oglh OCAwMSAgICAgICAgICAgICAgICAJdGVzdCAgICQweDEsJWFsCiAgICAgNTc2Ogk3NSA5MyAgICAg ICAgICAgICAgICAJam5lICAgIDUwYiA8dnhsYW5fc2V0dXArMHgxNGI+CglnY2VsbHMtPmNlbGxz ID0gYWxsb2NfcGVyY3B1KHN0cnVjdCBncm9fY2VsbCk7CglpZiAoIWdjZWxscy0+Y2VsbHMpCgkJ cmV0dXJuIC1FTk9NRU07CgoJZm9yX2VhY2hfcG9zc2libGVfY3B1KGkpIHsKCQlzdHJ1Y3QgZ3Jv X2NlbGwgKmNlbGwgPSBwZXJfY3B1X3B0cihnY2VsbHMtPmNlbGxzLCBpKTsKICAgICA1Nzg6CTBm IDBiICAgICAgICAgICAgICAgIAl1ZDIgICAgCiAgICAgNTdhOgk0OSA4ZCA4NCAyNCBhMCAwOSAw MCAJbGVhICAgIDB4OWEwKCVyMTIpLCVyYXgKICAgICA1ODE6CTAwIAoKCQlfX3NrYl9xdWV1ZV9o ZWFkX2luaXQoJmNlbGwtPm5hcGlfc2ticyk7CgkJbmV0aWZfbmFwaV9hZGQoZGV2LCAmY2VsbC0+ bmFwaSwgZ3JvX2NlbGxfcG9sbCwgNjQpOwogICAgIDU4MjoJNDkgOGQgOTQgMjQgYTAgMTEgMDAg CWxlYSAgICAweDExYTAoJXIxMiksJXJkeAogICAgIDU4OToJMDAgCiAgICAgNThhOgk0OCBjNyAw MCAwMCAwMCAwMCAwMCAJbW92cSAgICQweDAsKCVyYXgpCiAqCXRoZSBzcGlubG9jay4gIEl0IGNh biBhbHNvIGJlIHVzZWQgZm9yIG9uLXN0YWNrIHNrX2J1ZmZfaGVhZAogKglvYmplY3RzIHdoZXJl IHRoZSBzcGlubG9jayBpcyBrbm93biB0byBub3QgYmUgdXNlZC4KICovCnN0YXRpYyBpbmxpbmUg dm9pZCBfX3NrYl9xdWV1ZV9oZWFkX2luaXQoc3RydWN0IHNrX2J1ZmZfaGVhZCAqbGlzdCkKewoJ bGlzdC0+cHJldiA9IGxpc3QtPm5leHQgPSAoc3RydWN0IHNrX2J1ZmYgKilsaXN0OwogICAgIDU5 MToJNDggODMgYzAgMDggICAgICAgICAgCWFkZCAgICAkMHg4LCVyYXgKCWxpc3QtPnFsZW4gPSAw OwogICAgIDU5NToJNDggMzkgZDAgICAgICAgICAgICAgCWNtcCAgICAlcmR4LCVyYXgKICAgICA1 OTg6CTc1IGYwICAgICAgICAgICAgICAgIAlqbmUgICAgNThhIDx2eGxhbl9zZXR1cCsweDFjYT4K ICAgICA1OWE6CTViICAgICAgICAgICAgICAgICAgIAlwb3AgICAgJXJieAogICAgIDU5YjoJNDEg NWMgICAgICAgICAgICAgICAgCXBvcCAgICAlcjEyCiAgICAgNTlkOgk0MSA1ZCAgICAgICAgICAg ICAgICAJcG9wICAgICVyMTMKICAgICA1OWY6CTVkICAgICAgICAgICAgICAgICAgIAlwb3AgICAg JXJicAp9CgpzdGF0aWMgX19hbHdheXNfaW5saW5lIGJvb2wgY29uc3RhbnRfdGVzdF9iaXQobG9u ZyBuciwgY29uc3Qgdm9sYXRpbGUgdW5zaWduZWQgbG9uZyAqYWRkcikKewoJcmV0dXJuICgoMVVM IDw8IChuciAmIChCSVRTX1BFUl9MT05HLTEpKSkgJgoJCShhZGRyW25yID4+IF9CSVRPUFNfTE9O R19TSElGVF0pKSAhPSAwOwogICAgIDVhMDoJYzMgICAgICAgICAgICAgICAgICAgCXJldHEgICAK ICAgICA1YTE6CTBmIDFmIDQ0IDAwIDAwICAgICAgIAlub3BsICAgMHgwKCVyYXgsJXJheCwxKQog KiBSZXN1bWUgTkFQSSBmcm9tIGJlaW5nIHNjaGVkdWxlZCBvbiB0aGlzIGNvbnRleHQuCiAqIE11 c3QgYmUgcGFpcmVkIHdpdGggbmFwaV9kaXNhYmxlLgogKi8Kc3RhdGljIGlubGluZSB2b2lkIG5h cGlfZW5hYmxlKHN0cnVjdCBuYXBpX3N0cnVjdCAqbikKewoJQlVHX09OKCF0ZXN0X2JpdChOQVBJ X1NUQVRFX1NDSEVELCAmbi0+c3RhdGUpKTsKICAgICA1YTY6CTY2IDJlIDBmIDFmIDg0IDAwIDAw IAlub3B3ICAgJWNzOjB4MCglcmF4LCVyYXgsMSkKICAgICA1YWQ6CTAwIDAwIDAwIAoKMDAwMDAw MDAwMDAwMDViMCA8dnhsYW5fY2hhbmdlX210dT46CiAgICAgNWIwOgllOCAwMCAwMCAwMCAwMCAg ICAgICAJY2FsbHEgIDViNSA8dnhsYW5fY2hhbmdlX210dSsweDU+CiAgICAgNWI1Ogk1NSAgICAg ICAgICAgICAgICAgICAJcHVzaCAgICVyYnAKICAgICA1YjY6CTQ4IDg5IGU1ICAgICAgICAgICAg IAltb3YgICAgJXJzcCwlcmJwCiAgICAgNWI5Ogk0MSA1NCAgICAgICAgICAgICAgICAJcHVzaCAg ICVyMTIKCXZ4bGFuLT5kZXYgPSBkZXY7CgoJZ3JvX2NlbGxzX2luaXQoJnZ4bGFuLT5ncm9fY2Vs bHMsIGRldik7CgoJZm9yIChoID0gMDsgaCA8IEZEQl9IQVNIX1NJWkU7ICsraCkKCQlJTklUX0hM SVNUX0hFQUQoJnZ4bGFuLT5mZGJfaGVhZFtoXSk7CiAgICAgNWJiOgk0MSA4OSBmNCAgICAgICAg ICAgICAJbW92ICAgICVlc2ksJXIxMmQKICAgICA1YmU6CTUzICAgICAgICAgICAgICAgICAgIAlw dXNoICAgJXJieAogICAgIDViZjoJNDggODkgZmIgICAgICAgICAgICAgCW1vdiAgICAlcmRpLCVy YngKICAgICA1YzI6CThiIGI3IGE0IDA4IDAwIDAwICAgIAltb3YgICAgMHg4YTQoJXJkaSksJWVz aQoKCXZ4bGFuLT5kZXYgPSBkZXY7CgoJZ3JvX2NlbGxzX2luaXQoJnZ4bGFuLT5ncm9fY2VsbHMs IGRldik7CgoJZm9yIChoID0gMDsgaCA8IEZEQl9IQVNIX1NJWkU7ICsraCkKICAgICA1Yzg6CTQ4 IDhiIGJmIDc4IDA4IDAwIDAwIAltb3YgICAgMHg4NzgoJXJkaSksJXJkaQoJCUlOSVRfSExJU1Rf SEVBRCgmdnhsYW4tPmZkYl9oZWFkW2hdKTsKfQogICAgIDVjZjoJZTggMDAgMDAgMDAgMDAgICAg ICAgCWNhbGxxICA1ZDQgPHZ4bGFuX2NoYW5nZV9tdHUrMHgyND4KICAgICA1ZDQ6CTQ4IDg1IGMw ICAgICAgICAgICAgIAl0ZXN0ICAgJXJheCwlcmF4CiAgICAgNWQ3Ogk3NCAzMCAgICAgICAgICAg ICAgICAJamUgICAgIDYwOSA8dnhsYW5fY2hhbmdlX210dSsweDU5PgogICAgIDVkOToJOGIgODAg NDggMDIgMDAgMDAgICAgCW1vdiAgICAweDI0OCglcmF4KSwlZWF4CiAgICAgNWRmOgk4ZCA1MCBi YSAgICAgICAgICAgICAJbGVhICAgIC0weDQ2KCVyYXgpLCVlZHgKCWRldi0+bXR1ID0gbmV3X210 dTsKCXJldHVybiAwOwp9CgpzdGF0aWMgaW50IHZ4bGFuX2NoYW5nZV9tdHUoc3RydWN0IG5ldF9k ZXZpY2UgKmRldiwgaW50IG5ld19tdHUpCnsKICAgICA1ZTI6CTgzIGU4IDMyICAgICAgICAgICAg IAlzdWIgICAgJDB4MzIsJWVheAogICAgIDVlNToJNjYgODMgYmIgODAgMDggMDAgMDAgCWNtcHcg ICAkMHhhLDB4ODgwKCVyYngpCiAgICAgNWVjOgkwYSAKICAgICA1ZWQ6CTBmIDQ0IGMyICAgICAg ICAgICAgIAljbW92ZSAgJWVkeCwlZWF4CiAgICAgNWYwOgk0MSAzOSBjNCAgICAgICAgICAgICAJ Y21wICAgICVlYXgsJXIxMmQKCXN0cnVjdCB2eGxhbl9kZXYgKnZ4bGFuID0gbmV0ZGV2X3ByaXYo ZGV2KTsKCXN0cnVjdCB2eGxhbl9yZHN0ICpkc3QgPSAmdnhsYW4tPmRlZmF1bHRfZHN0OwoJc3Ry dWN0IG5ldF9kZXZpY2UgKmxvd2VyZGV2ID0gX19kZXZfZ2V0X2J5X2luZGV4KHZ4bGFuLT5uZXQs CiAgICAgNWYzOgk3ZiAxYiAgICAgICAgICAgICAgICAJamcgICAgIDYxMCA8dnhsYW5fY2hhbmdl X210dSsweDYwPgogICAgIDVmNToJNDEgODMgZmMgNDMgICAgICAgICAgCWNtcCAgICAkMHg0Mywl cjEyZAogICAgIDVmOToJN2UgMTUgICAgICAgICAgICAgICAgCWpsZSAgICA2MTAgPHZ4bGFuX2No YW5nZV9tdHUrMHg2MD4KICAgICA1ZmI6CTQ0IDg5IGEzIDQ4IDAyIDAwIDAwIAltb3YgICAgJXIx MmQsMHgyNDgoJXJieCkKICAgICA2MDI6CTMxIGMwICAgICAgICAgICAgICAgIAl4b3IgICAgJWVh eCwlZWF4CgkJCSAgICAgIHN0cnVjdCBuZXRfZGV2aWNlICpsb3dlcmRldiwKCQkJICAgICAgc3Ry dWN0IHZ4bGFuX3Jkc3QgKmRzdCwgaW50IG5ld19tdHUsIGJvb2wgc3RyaWN0KQp7CglpbnQgbWF4 X210dSA9IElQX01BWF9NVFU7CgoJaWYgKGxvd2VyZGV2KQogICAgIDYwNDoJNWIgICAgICAgICAg ICAgICAgICAgCXBvcCAgICAlcmJ4CiAgICAgNjA1Ogk0MSA1YyAgICAgICAgICAgICAgICAJcG9w ICAgICVyMTIKICAgICA2MDc6CTVkICAgICAgICAgICAgICAgICAgIAlwb3AgICAgJXJicAogICAg IDYwODoJYzMgICAgICAgICAgICAgICAgICAgCXJldHEgICAKCQltYXhfbXR1ID0gbG93ZXJkZXYt Pm10dTsKICAgICA2MDk6CWI4IGZmIGZmIDAwIDAwICAgICAgIAltb3YgICAgJDB4ZmZmZiwlZWF4 CiAgICAgNjBlOgllYiBjZiAgICAgICAgICAgICAgICAJam1wICAgIDVkZiA8dnhsYW5fY2hhbmdl X210dSsweDJmPgoKCWlmIChkc3QtPnJlbW90ZV9pcC5zYS5zYV9mYW1pbHkgPT0gQUZfSU5FVDYp CgkJbWF4X210dSAtPSBWWExBTjZfSEVBRFJPT007CiAgICAgNjEwOgliOCBlYSBmZiBmZiBmZiAg ICAgICAJbW92ICAgICQweGZmZmZmZmVhLCVlYXgKICAgICA2MTU6CWViIGVkICAgICAgICAgICAg ICAgIAlqbXAgICAgNjA0IDx2eGxhbl9jaGFuZ2VfbXR1KzB4NTQ+CiAgICAgNjE3Ogk2NiAwZiAx ZiA4NCAwMCAwMCAwMCAJbm9wdyAgIDB4MCglcmF4LCVyYXgsMSkKICAgICA2MWU6CTAwIDAwIAoK MDAwMDAwMDAwMDAwMDYyMCA8dnhsYW5fZmRiX3BhcnNlPjoKCQltYXhfbXR1IC09IFZYTEFOX0hF QURST09NOwoKCWlmIChuZXdfbXR1IDwgNjgpCgkJcmV0dXJuIC1FSU5WQUw7CgoJaWYgKG5ld19t dHUgPiBtYXhfbXR1KSB7CiAgICAgNjIwOgllOCAwMCAwMCAwMCAwMCAgICAgICAJY2FsbHEgIDYy NSA8dnhsYW5fZmRiX3BhcnNlKzB4NT4KICAgICA2MjU6CTU1ICAgICAgICAgICAgICAgICAgIAlw dXNoICAgJXJicAogICAgIDYyNjoJNDggODkgZTUgICAgICAgICAgICAgCW1vdiAgICAlcnNwLCVy YnAKICAgICA2Mjk6CTQxIDU2ICAgICAgICAgICAgICAgIAlwdXNoICAgJXIxNAoJCQlyZXR1cm4g LUVJTlZBTDsKCgkJbmV3X210dSA9IG1heF9tdHU7Cgl9CgoJZGV2LT5tdHUgPSBuZXdfbXR1Owog ICAgIDYyYjoJNDEgNTUgICAgICAgICAgICAgICAgCXB1c2ggICAlcjEzCiAgICAgNjJkOgk0MSA1 NCAgICAgICAgICAgICAgICAJcHVzaCAgICVyMTIKICAgICA2MmY6CTUzICAgICAgICAgICAgICAg ICAgIAlwdXNoICAgJXJieAogICAgIDYzMDoJNDkgODkgZjUgICAgICAgICAgICAgCW1vdiAgICAl cnNpLCVyMTMKCXJldHVybiAwOwogICAgIDYzMzoJNDggODkgZmIgICAgICAgICAgICAgCW1vdiAg ICAlcmRpLCVyYngKCXN0cnVjdCB2eGxhbl9kZXYgKnZ4bGFuID0gbmV0ZGV2X3ByaXYoZGV2KTsK CXN0cnVjdCB2eGxhbl9yZHN0ICpkc3QgPSAmdnhsYW4tPmRlZmF1bHRfZHN0OwoJc3RydWN0IG5l dF9kZXZpY2UgKmxvd2VyZGV2ID0gX19kZXZfZ2V0X2J5X2luZGV4KHZ4bGFuLT5uZXQsCgkJCQkJ CQkgZHN0LT5yZW1vdGVfaWZpbmRleCk7CglyZXR1cm4gX192eGxhbl9jaGFuZ2VfbXR1KGRldiwg bG93ZXJkZXYsIGRzdCwgbmV3X210dSwgdHJ1ZSk7Cn0KICAgICA2MzY6CTQ5IDg5IGQ0ICAgICAg ICAgICAgIAltb3YgICAgJXJkeCwlcjEyCgpzdGF0aWMgaW50IF9fdnhsYW5fY2hhbmdlX210dShz dHJ1Y3QgbmV0X2RldmljZSAqZGV2LAoJCQkgICAgICBzdHJ1Y3QgbmV0X2RldmljZSAqbG93ZXJk ZXYsCgkJCSAgICAgIHN0cnVjdCB2eGxhbl9yZHN0ICpkc3QsIGludCBuZXdfbXR1LCBib29sIHN0 cmljdCkKewoJaW50IG1heF9tdHUgPSBJUF9NQVhfTVRVOwogICAgIDYzOToJNDggODMgZTQgZjAg ICAgICAgICAgCWFuZCAgICAkMHhmZmZmZmZmZmZmZmZmZmYwLCVyc3AKICAgICA2M2Q6CTQ4IDgz IGVjIDQwICAgICAgICAgIAlzdWIgICAgJDB4NDAsJXJzcAoJaWYgKG5ld19tdHUgPCA2OCkKCQly ZXR1cm4gLUVJTlZBTDsKCglpZiAobmV3X210dSA+IG1heF9tdHUpIHsKCQlpZiAoc3RyaWN0KQoJ CQlyZXR1cm4gLUVJTlZBTDsKICAgICA2NDE6CTY1IDQ4IDhiIDA0IDI1IDI4IDAwIAltb3YgICAg JWdzOjB4MjgsJXJheAogICAgIDY0ODoJMDAgMDAgCiAgICAgNjRhOgk0OCA4OSA0NCAyNCAzOCAg ICAgICAJbW92ICAgICVyYXgsMHgzOCglcnNwKQogICAgIDY0ZjoJMzEgYzAgICAgICAgICAgICAg ICAgCXhvciAgICAlZWF4LCVlYXgKfQoKc3RhdGljIGludCB2eGxhbl9mZGJfcGFyc2Uoc3RydWN0 IG5sYXR0ciAqdGJbXSwgc3RydWN0IHZ4bGFuX2RldiAqdnhsYW4sCgkJCSAgIHVuaW9uIHZ4bGFu X2FkZHIgKmlwLCBfX2JlMTYgKnBvcnQsIF9fYmUzMiAqdm5pLAoJCQkgICB1MzIgKmlmaW5kZXgp CnsKICAgICA2NTE6CTQ4IDhiIDQ2IDMwICAgICAgICAgIAltb3YgICAgMHgzMCglcnNpKSwlcmF4 CiAgICAgNjU1Ogk0OCA4YiA3NyAwOCAgICAgICAgICAJbW92ICAgIDB4OCglcmRpKSwlcnNpCiAg ICAgNjU5Ogk0OCA4NSBmNiAgICAgICAgICAgICAJdGVzdCAgICVyc2ksJXJzaQogICAgIDY1YzoJ NGMgOGIgYjAgODAgMDQgMDAgMDAgCW1vdiAgICAweDQ4MCglcmF4KSwlcjE0CiAgICAgNjYzOgkw ZiA4NCBhZCAwMCAwMCAwMCAgICAJamUgICAgIDcxNiA8dnhsYW5fZmRiX3BhcnNlKzB4ZjY+CiAg ICAgNjY5OgkwZiBiNyAwNiAgICAgICAgICAgICAJbW92endsICglcnNpKSwlZWF4CiAgICAgNjZj Ogk4MyBlOCAwNCAgICAgICAgICAgICAJc3ViICAgICQweDQsJWVheAogICAgIDY2ZjoJODMgZjgg MGYgICAgICAgICAgICAgCWNtcCAgICAkMHhmLCVlYXgKICAgICA2NzI6CTBmIDg3IGZkIDAwIDAw IDAwICAgIAlqYSAgICAgNzc1IDx2eGxhbl9mZGJfcGFyc2UrMHgxNTU+CiAgICAgNjc4Ogk4MyBm OCAwMyAgICAgICAgICAgICAJY21wICAgICQweDMsJWVheAogICAgIDY3YjoJMGYgODYgNjggMDEg MDAgMDAgICAgCWpiZSAgICA3ZTkgPHZ4bGFuX2ZkYl9wYXJzZSsweDFjOT4KfQoKc3RhdGljIGlu bGluZSBzdHJ1Y3QgbmV0ICpyZWFkX3BuZXQoY29uc3QgcG9zc2libGVfbmV0X3QgKnBuZXQpCnsK I2lmZGVmIENPTkZJR19ORVRfTlMKCXJldHVybiBwbmV0LT5uZXQ7CiAgICAgNjgxOgk4YiA0NiAw NCAgICAgICAgICAgICAJbW92ICAgIDB4NCglcnNpKSwlZWF4CiAgICAgNjg0OgliZSAwMiAwMCAw MCAwMCAgICAgICAJbW92ICAgICQweDIsJWVzaQoJc3RydWN0IG5ldCAqbmV0ID0gZGV2X25ldCh2 eGxhbi0+ZGV2KTsKCWludCBlcnI7CgoJaWYgKHRiW05EQV9EU1RdKSB7CiAgICAgNjg5Ogk2NiA4 OSAzMiAgICAgICAgICAgICAJbW92ICAgICVzaSwoJXJkeCkKICAgICA2OGM6CTg5IDQyIDA0ICAg ICAgICAgICAgIAltb3YgICAgJWVheCwweDQoJXJkeCkKICAgICA2OGY6CTQ4IDhiIDQzIDMwICAg ICAgICAgIAltb3YgICAgMHgzMCglcmJ4KSwlcmF4CiAgICAgNjkzOgk0OCA4NSBjMCAgICAgICAg ICAgICAJdGVzdCAgICVyYXgsJXJheAogICAgIDY5NjoJMGYgODQgYjUgMDAgMDAgMDAgICAgCWpl ICAgICA3NTEgPHZ4bGFuX2ZkYl9wYXJzZSsweDEzMT4KCQlyZXR1cm4gSU5fTVVMVElDQVNUKG50 b2hsKGlwYS0+c2luLnNpbl9hZGRyLnNfYWRkcikpOwp9CgpzdGF0aWMgaW50IHZ4bGFuX25sYV9n ZXRfYWRkcih1bmlvbiB2eGxhbl9hZGRyICppcCwgc3RydWN0IG5sYXR0ciAqbmxhKQp7CglpZiAo bmxhX2xlbihubGEpID49IHNpemVvZihzdHJ1Y3QgaW42X2FkZHIpKSB7CiAgICAgNjljOgk2NiA4 MyAzOCAwNiAgICAgICAgICAJY21wdyAgICQweDYsKCVyYXgpCiAgICAgNmEwOgk3NSA2ZCAgICAg ICAgICAgICAgICAJam5lICAgIDcwZiA8dnhsYW5fZmRiX3BhcnNlKzB4ZWY+CiAgICAgNmEyOgkw ZiBiNyA0MCAwNCAgICAgICAgICAJbW92endsIDB4NCglcmF4KSwlZWF4CiAgICAgNmE2Ogk2NiA4 OSAwMSAgICAgICAgICAgICAJbW92ICAgICVheCwoJXJjeCkKCQlpcC0+c2luNi5zaW42X2FkZHIg PSBubGFfZ2V0X2luNl9hZGRyKG5sYSk7CgkJaXAtPnNhLnNhX2ZhbWlseSA9IEFGX0lORVQ2OwoJ CXJldHVybiAwOwoJfSBlbHNlIGlmIChubGFfbGVuKG5sYSkgPj0gc2l6ZW9mKF9fYmUzMikpIHsK ICAgICA2YTk6CTQ4IDhiIDQzIDM4ICAgICAgICAgIAltb3YgICAgMHgzOCglcmJ4KSwlcmF4CiAg ICAgNmFkOgk0OCA4NSBjMCAgICAgICAgICAgICAJdGVzdCAgICVyYXgsJXJheAogICAgIDZiMDoJ MGYgODQgYjMgMDAgMDAgMDAgICAgCWplICAgICA3NjkgPHZ4bGFuX2ZkYl9wYXJzZSsweDE0OT4K CQlpcC0+c2luLnNpbl9hZGRyLnNfYWRkciA9IG5sYV9nZXRfaW5fYWRkcihubGEpOwoJCWlwLT5z YS5zYV9mYW1pbHkgPSBBRl9JTkVUOwogICAgIDZiNjoJNjYgODMgMzggMDggICAgICAgICAgCWNt cHcgICAkMHg4LCglcmF4KQogICAgIDZiYToJNzUgNTMgICAgICAgICAgICAgICAgCWpuZSAgICA3 MGYgPHZ4bGFuX2ZkYl9wYXJzZSsweGVmPgoJaWYgKG5sYV9sZW4obmxhKSA+PSBzaXplb2Yoc3Ry dWN0IGluNl9hZGRyKSkgewoJCWlwLT5zaW42LnNpbjZfYWRkciA9IG5sYV9nZXRfaW42X2FkZHIo bmxhKTsKCQlpcC0+c2Euc2FfZmFtaWx5ID0gQUZfSU5FVDY7CgkJcmV0dXJuIDA7Cgl9IGVsc2Ug aWYgKG5sYV9sZW4obmxhKSA+PSBzaXplb2YoX19iZTMyKSkgewoJCWlwLT5zaW4uc2luX2FkZHIu c19hZGRyID0gbmxhX2dldF9pbl9hZGRyKG5sYSk7CiAgICAgNmJjOgk4YiA0MCAwNCAgICAgICAg ICAgICAJbW92ICAgIDB4NCglcmF4KSwlZWF4CgkJCWlwLT5zYS5zYV9mYW1pbHkgPSBBRl9JTkVU NjsKI2VuZGlmCgkJfQoJfQoKCWlmICh0YltOREFfUE9SVF0pIHsKICAgICA2YmY6CTBmIGM4ICAg ICAgICAgICAgICAgIAlic3dhcCAgJWVheAogICAgIDZjMToJNDEgODkgMDAgICAgICAgICAgICAg CW1vdiAgICAlZWF4LCglcjgpCiAgICAgNmM0Ogk0OCA4YiA0MyA0MCAgICAgICAgICAJbW92ICAg IDB4NDAoJXJieCksJXJheAogICAgIDZjODoJNDggODUgYzAgICAgICAgICAgICAgCXRlc3QgICAl cmF4LCVyYXgKICAgICA2Y2I6CTBmIDg0IGY0IDAwIDAwIDAwICAgIAlqZSAgICAgN2M1IDx2eGxh bl9mZGJfcGFyc2UrMHgxYTU+CgkJaWYgKG5sYV9sZW4odGJbTkRBX1BPUlRdKSAhPSBzaXplb2Yo X19iZTE2KSkKICAgICA2ZDE6CTY2IDgzIDM4IDA4ICAgICAgICAgIAljbXB3ICAgJDB4OCwoJXJh eCkKICogbmxhX2dldF9iZTE2IC0gcmV0dXJuIHBheWxvYWQgb2YgX19iZTE2IGF0dHJpYnV0ZQog KiBAbmxhOiBfX2JlMTYgbmV0bGluayBhdHRyaWJ1dGUKICovCnN0YXRpYyBpbmxpbmUgX19iZTE2 IG5sYV9nZXRfYmUxNihjb25zdCBzdHJ1Y3QgbmxhdHRyICpubGEpCnsKCXJldHVybiAqKF9fYmUx NiAqKSBubGFfZGF0YShubGEpOwogICAgIDZkNToJNzUgMzggICAgICAgICAgICAgICAgCWpuZSAg ICA3MGYgPHZ4bGFuX2ZkYl9wYXJzZSsweGVmPgoJCQlyZXR1cm4gLUVJTlZBTDsKCQkqcG9ydCA9 IG5sYV9nZXRfYmUxNih0YltOREFfUE9SVF0pOwogICAgIDZkNzoJOGIgNzAgMDQgICAgICAgICAg ICAgCW1vdiAgICAweDQoJXJheCksJWVzaQoJfSBlbHNlIHsKCQkqcG9ydCA9IHZ4bGFuLT5jZmcu ZHN0X3BvcnQ7Cgl9CgoJaWYgKHRiW05EQV9WTkldKSB7CiAgICAgNmRhOgk0YyA4OSBmNyAgICAg ICAgICAgICAJbW92ICAgICVyMTQsJXJkaQogICAgIDZkZDoJNDEgODkgMzEgICAgICAgICAgICAg CW1vdiAgICAlZXNpLCglcjkpCiAgICAgNmUwOgllOCAwMCAwMCAwMCAwMCAgICAgICAJY2FsbHEg IDZlNSA8dnhsYW5fZmRiX3BhcnNlKzB4YzU+CiAgICAgNmU1Ogk0OCA4MyBmOCAwMSAgICAgICAg ICAJY21wICAgICQweDEsJXJheAoJCWlmIChubGFfbGVuKHRiW05EQV9WTkldKSAhPSBzaXplb2Yo dTMyKSkKICAgICA2ZTk6CTE5IGMwICAgICAgICAgICAgICAgIAlzYmIgICAgJWVheCwlZWF4CiAg ICAgNmViOgk4MyBlMCA5ZCAgICAgICAgICAgICAJYW5kICAgICQweGZmZmZmZjlkLCVlYXgKCQkJ cmV0dXJuIC1FSU5WQUw7CgkJKnZuaSA9IGNwdV90b19iZTMyKG5sYV9nZXRfdTMyKHRiW05EQV9W TkldKSk7CiAgICAgNmVlOgk0OCA4YiA1NCAyNCAzOCAgICAgICAJbW92ICAgIDB4MzgoJXJzcCks JXJkeAogICAgIDZmMzoJNjUgNDggMzMgMTQgMjUgMjggMDAgCXhvciAgICAlZ3M6MHgyOCwlcmR4 CiAgICAgNmZhOgkwMCAwMCAKCX0gZWxzZSB7CgkJKnZuaSA9IHZ4bGFuLT5kZWZhdWx0X2RzdC5y ZW1vdGVfdm5pOwoJfQoKCWlmICh0YltOREFfSUZJTkRFWF0pIHsKICAgICA2ZmM6CTBmIDg1IGYx IDAwIDAwIDAwICAgIAlqbmUgICAgN2YzIDx2eGxhbl9mZGJfcGFyc2UrMHgxZDM+CgkJc3RydWN0 IG5ldF9kZXZpY2UgKnRkZXY7CgoJCWlmIChubGFfbGVuKHRiW05EQV9JRklOREVYXSkgIT0gc2l6 ZW9mKHUzMikpCiAgICAgNzAyOgk0OCA4ZCA2NSBlMCAgICAgICAgICAJbGVhICAgIC0weDIwKCVy YnApLCVyc3AKICAgICA3MDY6CTViICAgICAgICAgICAgICAgICAgIAlwb3AgICAgJXJieAogKiBu bGFfZ2V0X3UzMiAtIHJldHVybiBwYXlsb2FkIG9mIHUzMiBhdHRyaWJ1dGUKICogQG5sYTogdTMy IG5ldGxpbmsgYXR0cmlidXRlCiAqLwpzdGF0aWMgaW5saW5lIHUzMiBubGFfZ2V0X3UzMihjb25z dCBzdHJ1Y3QgbmxhdHRyICpubGEpCnsKCXJldHVybiAqKHUzMiAqKSBubGFfZGF0YShubGEpOwog ICAgIDcwNzoJNDEgNWMgICAgICAgICAgICAgICAgCXBvcCAgICAlcjEyCiAgICAgNzA5Ogk0MSA1 ZCAgICAgICAgICAgICAgICAJcG9wICAgICVyMTMKCQkJcmV0dXJuIC1FSU5WQUw7CgkJKmlmaW5k ZXggPSBubGFfZ2V0X3UzMih0YltOREFfSUZJTkRFWF0pOwoJCXRkZXYgPSBfX2Rldl9nZXRfYnlf aW5kZXgobmV0LCAqaWZpbmRleCk7CiAgICAgNzBiOgk0MSA1ZSAgICAgICAgICAgICAgICAJcG9w ICAgICVyMTQKCWlmICh0YltOREFfSUZJTkRFWF0pIHsKCQlzdHJ1Y3QgbmV0X2RldmljZSAqdGRl djsKCgkJaWYgKG5sYV9sZW4odGJbTkRBX0lGSU5ERVhdKSAhPSBzaXplb2YodTMyKSkKCQkJcmV0 dXJuIC1FSU5WQUw7CgkJKmlmaW5kZXggPSBubGFfZ2V0X3UzMih0YltOREFfSUZJTkRFWF0pOwog ICAgIDcwZDoJNWQgICAgICAgICAgICAgICAgICAgCXBvcCAgICAlcmJwCiAgICAgNzBlOgljMyAg ICAgICAgICAgICAgICAgICAJcmV0cSAgIAogICAgIDcwZjoJYjggZWEgZmYgZmYgZmYgICAgICAg CW1vdiAgICAkMHhmZmZmZmZlYSwlZWF4CgkJdGRldiA9IF9fZGV2X2dldF9ieV9pbmRleChuZXQs ICppZmluZGV4KTsKICAgICA3MTQ6CWViIGQ4ICAgICAgICAgICAgICAgIAlqbXAgICAgNmVlIDx2 eGxhbl9mZGJfcGFyc2UrMHhjZT4KCQkJcmV0dXJuIC1FQUREUk5PVEFWQUlMOwoJfSBlbHNlIHsK CQkqaWZpbmRleCA9IDA7Cgl9CgoJcmV0dXJuIDA7CiAgICAgNzE2Ogk2NiA0MSA4MyA3ZCA0MCAw MiAgICAJY21wdyAgICQweDIsMHg0MCglcjEzKQogICAgIDcxYzoJMGYgODQgYjEgMDAgMDAgMDAg ICAgCWplICAgICA3ZDMgPHZ4bGFuX2ZkYl9wYXJzZSsweDFiMz4KfQogICAgIDcyMjoJNDggOGIg MDUgMDAgMDAgMDAgMDAgCW1vdiAgICAweDAoJXJpcCksJXJheCAgICAgICAgIyA3MjkgPHZ4bGFu X2ZkYl9wYXJzZSsweDEwOT4KICAgICA3Mjk6CTQ4IDhiIDE1IDAwIDAwIDAwIDAwIAltb3YgICAg MHgwKCVyaXApLCVyZHggICAgICAgICMgNzMwIDx2eGxhbl9mZGJfcGFyc2UrMHgxMTA+CiAgICAg NzMwOgk0OSA4OSA0NCAyNCAwOCAgICAgICAJbW92ICAgICVyYXgsMHg4KCVyMTIpCiAgICAgNzM1 OgliOCAwYSAwMCAwMCAwMCAgICAgICAJbW92ICAgICQweGEsJWVheAogICAgIDczYToJNDkgODkg NTQgMjQgMTAgICAgICAgCW1vdiAgICAlcmR4LDB4MTAoJXIxMikKCQl9Cgl9CgoJaWYgKHRiW05E QV9QT1JUXSkgewoJCWlmIChubGFfbGVuKHRiW05EQV9QT1JUXSkgIT0gc2l6ZW9mKF9fYmUxNikp CgkJCXJldHVybiAtRUlOVkFMOwogICAgIDczZjoJNjYgNDEgODkgMDQgMjQgICAgICAgCW1vdiAg ICAlYXgsKCVyMTIpCiAgICAgNzQ0Ogk0OCA4YiA0MyAzMCAgICAgICAgICAJbW92ICAgIDB4MzAo JXJieCksJXJheAoJCWVyciA9IHZ4bGFuX25sYV9nZXRfYWRkcihpcCwgdGJbTkRBX0RTVF0pOwoJ CWlmIChlcnIpCgkJCXJldHVybiBlcnI7Cgl9IGVsc2UgewoJCXVuaW9uIHZ4bGFuX2FkZHIgKnJl bW90ZSA9ICZ2eGxhbi0+ZGVmYXVsdF9kc3QucmVtb3RlX2lwOwoJCWlmIChyZW1vdGUtPnNhLnNh X2ZhbWlseSA9PSBBRl9JTkVUKSB7CiAgICAgNzQ4Ogk0OCA4NSBjMCAgICAgICAgICAgICAJdGVz dCAgICVyYXgsJXJheAogICAgIDc0YjoJMGYgODUgNGIgZmYgZmYgZmYgICAgCWpuZSAgICA2OWMg PHZ4bGFuX2ZkYl9wYXJzZSsweDdjPgogICAgIDc1MToJNDEgMGYgYjcgODUgM2MgMDEgMDAgCW1v dnp3bCAweDEzYyglcjEzKSwlZWF4CiAgICAgNzU4OgkwMCAKCQkJaXAtPnNpbi5zaW5fYWRkci5z X2FkZHIgPSBodG9ubChJTkFERFJfQU5ZKTsKCQkJaXAtPnNhLnNhX2ZhbWlseSA9IEFGX0lORVQ7 CiNpZiBJU19FTkFCTEVEKENPTkZJR19JUFY2KQoJCX0gZWxzZSB7CgkJCWlwLT5zaW42LnNpbjZf YWRkciA9IGluNmFkZHJfYW55OwogICAgIDc1OToJNjYgODkgMDEgICAgICAgICAgICAgCW1vdiAg ICAlYXgsKCVyY3gpCiAgICAgNzVjOgk0OCA4YiA0MyAzOCAgICAgICAgICAJbW92ICAgIDB4Mzgo JXJieCksJXJheAogICAgIDc2MDoJNDggODUgYzAgICAgICAgICAgICAgCXRlc3QgICAlcmF4LCVy YXgKICAgICA3NjM6CTBmIDg1IDRkIGZmIGZmIGZmICAgIAlqbmUgICAgNmI2IDx2eGxhbl9mZGJf cGFyc2UrMHg5Nj4KCQkJaXAtPnNhLnNhX2ZhbWlseSA9IEFGX0lORVQ2OwogICAgIDc2OToJNDEg OGIgNDUgNjAgICAgICAgICAgCW1vdiAgICAweDYwKCVyMTMpLCVlYXgKCQlpZiAocmVtb3RlLT5z YS5zYV9mYW1pbHkgPT0gQUZfSU5FVCkgewoJCQlpcC0+c2luLnNpbl9hZGRyLnNfYWRkciA9IGh0 b25sKElOQUREUl9BTlkpOwoJCQlpcC0+c2Euc2FfZmFtaWx5ID0gQUZfSU5FVDsKI2lmIElTX0VO QUJMRUQoQ09ORklHX0lQVjYpCgkJfSBlbHNlIHsKCQkJaXAtPnNpbjYuc2luNl9hZGRyID0gaW42 YWRkcl9hbnk7CiAgICAgNzZkOgk0MSA4OSAwMCAgICAgICAgICAgICAJbW92ICAgICVlYXgsKCVy OCkKCQkJaXAtPnNhLnNhX2ZhbWlseSA9IEFGX0lORVQ2OwogICAgIDc3MDoJZTkgNGYgZmYgZmYg ZmYgICAgICAgCWptcHEgICA2YzQgPHZ4bGFuX2ZkYl9wYXJzZSsweGE0PgojZW5kaWYKCQl9Cgl9 CgoJaWYgKHRiW05EQV9QT1JUXSkgewogICAgIDc3NToJNDggOGQgN2MgMjQgMjAgICAgICAgCWxl YSAgICAweDIwKCVyc3ApLCVyZGkKICAgICA3N2E6CWJhIDEwIDAwIDAwIDAwICAgICAgIAltb3Yg ICAgJDB4MTAsJWVkeAogICAgIDc3ZjoJNGMgODkgNGMgMjQgMDggICAgICAgCW1vdiAgICAlcjks MHg4KCVyc3ApCgkJaWYgKG5sYV9sZW4odGJbTkRBX1BPUlRdKSAhPSBzaXplb2YoX19iZTE2KSkK CQkJcmV0dXJuIC1FSU5WQUw7CgkJKnBvcnQgPSBubGFfZ2V0X2JlMTYodGJbTkRBX1BPUlRdKTsK CX0gZWxzZSB7CgkJKnBvcnQgPSB2eGxhbi0+Y2ZnLmRzdF9wb3J0OwogICAgIDc4NDoJNGMgODkg NDQgMjQgMTAgICAgICAgCW1vdiAgICAlcjgsMHgxMCglcnNwKQogICAgIDc4OToJNDggODkgNGMg MjQgMTggICAgICAgCW1vdiAgICAlcmN4LDB4MTgoJXJzcCkKCX0KCglpZiAodGJbTkRBX1ZOSV0p IHsKICAgICA3OGU6CWU4IDAwIDAwIDAwIDAwICAgICAgIAljYWxscSAgNzkzIDx2eGxhbl9mZGJf cGFyc2UrMHgxNzM+CiAgICAgNzkzOgk0OCA4YiA0NCAyNCAyMCAgICAgICAJbW92ICAgIDB4MjAo JXJzcCksJXJheAogICAgIDc5ODoJNDggOGIgNTQgMjQgMjggICAgICAgCW1vdiAgICAweDI4KCVy c3ApLCVyZHgKCQlpZiAobmxhX2xlbih0YltOREFfVk5JXSkgIT0gc2l6ZW9mKHUzMikpCgkJCXJl dHVybiAtRUlOVkFMOwoJCSp2bmkgPSBjcHVfdG9fYmUzMihubGFfZ2V0X3UzMih0YltOREFfVk5J XSkpOwoJfSBlbHNlIHsKCQkqdm5pID0gdnhsYW4tPmRlZmF1bHRfZHN0LnJlbW90ZV92bmk7CiAg ICAgNzlkOgliZiAwYSAwMCAwMCAwMCAgICAgICAJbW92ICAgICQweGEsJWVkaQogICAgIDdhMjoJ NjYgNDEgODkgM2MgMjQgICAgICAgCW1vdiAgICAlZGksKCVyMTIpCiAqLwpzdGF0aWMgaW5saW5l IHN0cnVjdCBpbjZfYWRkciBubGFfZ2V0X2luNl9hZGRyKGNvbnN0IHN0cnVjdCBubGF0dHIgKm5s YSkKewoJc3RydWN0IGluNl9hZGRyIHRtcDsKCglubGFfbWVtY3B5KCZ0bXAsIG5sYSwgc2l6ZW9m KHRtcCkpOwogICAgIDdhNzoJNDggOGIgNGMgMjQgMTggICAgICAgCW1vdiAgICAweDE4KCVyc3Ap LCVyY3gKICAgICA3YWM6CTRjIDhiIDQ0IDI0IDEwICAgICAgIAltb3YgICAgMHgxMCglcnNwKSwl cjgKICAgICA3YjE6CTRjIDhiIDRjIDI0IDA4ICAgICAgIAltb3YgICAgMHg4KCVyc3ApLCVyOQog ICAgIDdiNjoJNDkgODkgNDQgMjQgMDggICAgICAgCW1vdiAgICAlcmF4LDB4OCglcjEyKQogICAg IDdiYjoJNDkgODkgNTQgMjQgMTAgICAgICAgCW1vdiAgICAlcmR4LDB4MTAoJXIxMikKICAgICA3 YzA6CWU5IGNhIGZlIGZmIGZmICAgICAgIAlqbXBxICAgNjhmIDx2eGxhbl9mZGJfcGFyc2UrMHg2 Zj4KCXJldHVybiB0bXA7CiAgICAgN2M1Ogk0MSBjNyAwMSAwMCAwMCAwMCAwMCAJbW92bCAgICQw eDAsKCVyOSkKICAgICA3Y2M6CTMxIGMwICAgICAgICAgICAgICAgIAl4b3IgICAgJWVheCwlZWF4 CgpzdGF0aWMgaW50IHZ4bGFuX25sYV9nZXRfYWRkcih1bmlvbiB2eGxhbl9hZGRyICppcCwgc3Ry dWN0IG5sYXR0ciAqbmxhKQp7CglpZiAobmxhX2xlbihubGEpID49IHNpemVvZihzdHJ1Y3QgaW42 X2FkZHIpKSB7CgkJaXAtPnNpbjYuc2luNl9hZGRyID0gbmxhX2dldF9pbjZfYWRkcihubGEpOwoJ CWlwLT5zYS5zYV9mYW1pbHkgPSBBRl9JTkVUNjsKICAgICA3Y2U6CWU5IDFiIGZmIGZmIGZmICAg ICAgIAlqbXBxICAgNmVlIDx2eGxhbl9mZGJfcGFyc2UrMHhjZT4KICAgICA3ZDM6CWM3IDQyIDA0 IDAwIDAwIDAwIDAwIAltb3ZsICAgJDB4MCwweDQoJXJkeCkKICAgICA3ZGE6CWJhIDAyIDAwIDAw IDAwICAgICAgIAltb3YgICAgJDB4MiwlZWR4CiAgICAgN2RmOgk2NiA0MSA4OSAxNCAyNCAgICAg ICAJbW92ICAgICVkeCwoJXIxMikKICAgICA3ZTQ6CWU5IGE2IGZlIGZmIGZmICAgICAgIAlqbXBx ICAgNjhmIDx2eGxhbl9mZGJfcGFyc2UrMHg2Zj4KfQoKc3RhdGljIGludCB2eGxhbl9ubGFfZ2V0 X2FkZHIodW5pb24gdnhsYW5fYWRkciAqaXAsIHN0cnVjdCBubGF0dHIgKm5sYSkKewoJaWYgKG5s YV9sZW4obmxhKSA+PSBzaXplb2Yoc3RydWN0IGluNl9hZGRyKSkgewoJCWlwLT5zaW42LnNpbjZf YWRkciA9IG5sYV9nZXRfaW42X2FkZHIobmxhKTsKICAgICA3ZTk6CWI4IDlmIGZmIGZmIGZmICAg ICAgIAltb3YgICAgJDB4ZmZmZmZmOWYsJWVheAogICAgIDdlZToJZTkgZmIgZmUgZmYgZmYgICAg ICAgCWptcHEgICA2ZWUgPHZ4bGFuX2ZkYl9wYXJzZSsweGNlPgogICAgIDdmMzoJZTggMDAgMDAg MDAgMDAgICAgICAgCWNhbGxxICA3ZjggPHZ4bGFuX2ZkYl9wYXJzZSsweDFkOD4KCQkqaWZpbmRl eCA9IG5sYV9nZXRfdTMyKHRiW05EQV9JRklOREVYXSk7CgkJdGRldiA9IF9fZGV2X2dldF9ieV9p bmRleChuZXQsICppZmluZGV4KTsKCQlpZiAoIXRkZXYpCgkJCXJldHVybiAtRUFERFJOT1RBVkFJ TDsKCX0gZWxzZSB7CgkJKmlmaW5kZXggPSAwOwogICAgIDdmODoJMGYgMWYgODQgMDAgMDAgMDAg MDAgCW5vcGwgICAweDAoJXJheCwlcmF4LDEpCiAgICAgN2ZmOgkwMCAKCjAwMDAwMDAwMDAwMDA4 MDAgPHZ4bGFuX2dldF9kcnZpbmZvPjoKCX0KCglyZXR1cm4gMDsKICAgICA4MDA6CWU4IDAwIDAw IDAwIDAwICAgICAgIAljYWxscSAgODA1IDx2eGxhbl9nZXRfZHJ2aW5mbysweDU+CgkJaWYgKGVy cikKCQkJcmV0dXJuIGVycjsKCX0gZWxzZSB7CgkJdW5pb24gdnhsYW5fYWRkciAqcmVtb3RlID0g JnZ4bGFuLT5kZWZhdWx0X2RzdC5yZW1vdGVfaXA7CgkJaWYgKHJlbW90ZS0+c2Euc2FfZmFtaWx5 ID09IEFGX0lORVQpIHsKCQkJaXAtPnNpbi5zaW5fYWRkci5zX2FkZHIgPSBodG9ubChJTkFERFJf QU5ZKTsKICAgICA4MDU6CTU1ICAgICAgICAgICAgICAgICAgIAlwdXNoICAgJXJicAogICAgIDgw NjoJNDggOGQgN2UgMjQgICAgICAgICAgCWxlYSAgICAweDI0KCVyc2kpLCVyZGkKCQkJaXAtPnNh LnNhX2ZhbWlseSA9IEFGX0lORVQ7CiAgICAgODBhOgliYSAyMCAwMCAwMCAwMCAgICAgICAJbW92 ICAgICQweDIwLCVlZHgKICAgICA4MGY6CTQ4IDg5IGU1ICAgICAgICAgICAgIAltb3YgICAgJXJz cCwlcmJwCiAgICAgODEyOgk1MyAgICAgICAgICAgICAgICAgICAJcHVzaCAgICVyYngKICAgICA4 MTM6CTQ4IDg5IGYzICAgICAgICAgICAgIAltb3YgICAgJXJzaSwlcmJ4CiAgICAgODE2Ogk0OCBj NyBjNiAwMCAwMCAwMCAwMCAJbW92ICAgICQweDAsJXJzaQoJfSBlbHNlIGlmIChubGFfbGVuKG5s YSkgPj0gc2l6ZW9mKF9fYmUzMikpIHsKCQlpcC0+c2luLnNpbl9hZGRyLnNfYWRkciA9IG5sYV9n ZXRfaW5fYWRkcihubGEpOwoJCWlwLT5zYS5zYV9mYW1pbHkgPSBBRl9JTkVUOwoJCXJldHVybiAw OwoJfSBlbHNlIHsKCQlyZXR1cm4gLUVBRk5PU1VQUE9SVDsKICAgICA4MWQ6CWU4IDAwIDAwIDAw IDAwICAgICAgIAljYWxscSAgODIyIDx2eGxhbl9nZXRfZHJ2aW5mbysweDIyPgogICAgIDgyMjoJ NDggOGQgN2IgMDQgICAgICAgICAgCWxlYSAgICAweDQoJXJieCksJXJkaQoJfSBlbHNlIHsKCQkq aWZpbmRleCA9IDA7Cgl9CgoJcmV0dXJuIDA7Cn0KICAgICA4MjY6CWJhIDIwIDAwIDAwIDAwICAg ICAgIAltb3YgICAgJDB4MjAsJWVkeAogICAgIDgyYjoJNDggYzcgYzYgMDAgMDAgMDAgMDAgCW1v diAgICAkMHgwLCVyc2kKCXJldHVybiAwOwp9CgpzdGF0aWMgdm9pZCB2eGxhbl9nZXRfZHJ2aW5m byhzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LAoJCQkgICAgICBzdHJ1Y3QgZXRodG9vbF9kcnZp bmZvICpkcnZpbmZvKQp7CiAgICAgODMyOgllOCAwMCAwMCAwMCAwMCAgICAgICAJY2FsbHEgIDgz NyA8dnhsYW5fZ2V0X2RydmluZm8rMHgzNz4KCXN0cmxjcHkoZHJ2aW5mby0+dmVyc2lvbiwgVlhM QU5fVkVSU0lPTiwgc2l6ZW9mKGRydmluZm8tPnZlcnNpb24pKTsKICAgICA4Mzc6CTViICAgICAg ICAgICAgICAgICAgIAlwb3AgICAgJXJieAogICAgIDgzODoJNWQgICAgICAgICAgICAgICAgICAg CXBvcCAgICAlcmJwCiAgICAgODM5OgljMyAgICAgICAgICAgICAgICAgICAJcmV0cSAgIAogICAg IDgzYToJNjYgMGYgMWYgNDQgMDAgMDAgICAgCW5vcHcgICAweDAoJXJheCwlcmF4LDEpCgowMDAw MDAwMDAwMDAwODQwIDxuZWlnaF9yZWxlYXNlPjoKCXJldHVybiAwOwp9CgpzdGF0aWMgdm9pZCB2 eGxhbl9nZXRfZHJ2aW5mbyhzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LAoJCQkgICAgICBzdHJ1 Y3QgZXRodG9vbF9kcnZpbmZvICpkcnZpbmZvKQp7CiAgICAgODQwOglmMCBmZiA0ZiAzMCAgICAg ICAgICAJbG9jayBkZWNsIDB4MzAoJXJkaSkKICAgICA4NDQ6CTc0IDAxICAgICAgICAgICAgICAg IAlqZSAgICAgODQ3IDxuZWlnaF9yZWxlYXNlKzB4Nz4KCXN0cmxjcHkoZHJ2aW5mby0+dmVyc2lv biwgVlhMQU5fVkVSU0lPTiwgc2l6ZW9mKGRydmluZm8tPnZlcnNpb24pKTsKICAgICA4NDY6CWMz ICAgICAgICAgICAgICAgICAgIAlyZXRxICAgCiAgICAgODQ3Ogk1NSAgICAgICAgICAgICAgICAg ICAJcHVzaCAgICVyYnAKICAgICA4NDg6CTQ4IDg5IGU1ICAgICAgICAgICAgIAltb3YgICAgJXJz cCwlcmJwCiAgICAgODRiOgllOCAwMCAwMCAwMCAwMCAgICAgICAJY2FsbHEgIDg1MCA8bmVpZ2hf cmVsZWFzZSsweDEwPgogICAgIDg1MDoJNWQgICAgICAgICAgICAgICAgICAgCXBvcCAgICAlcmJw CiAgICAgODUxOgljMyAgICAgICAgICAgICAgICAgICAJcmV0cSAgIAoJc3RybGNweShkcnZpbmZv LT5kcml2ZXIsICJ2eGxhbiIsIHNpemVvZihkcnZpbmZvLT5kcml2ZXIpKTsKICAgICA4NTI6CTBm IDFmIDQwIDAwICAgICAgICAgIAlub3BsICAgMHgwKCVyYXgpCiAgICAgODU2Ogk2NiAyZSAwZiAx ZiA4NCAwMCAwMCAJbm9wdyAgICVjczoweDAoJXJheCwlcmF4LDEpCiAgICAgODVkOgkwMCAwMCAw MCAKCjAwMDAwMDAwMDAwMDA4NjAgPHZ4bGFuX2dyb19jb21wbGV0ZT46CiAgICAgODYwOgllOCAw MCAwMCAwMCAwMCAgICAgICAJY2FsbHEgIDg2NSA8dnhsYW5fZ3JvX2NvbXBsZXRlKzB4NT4KICAg ICA4NjU6CTU1ICAgICAgICAgICAgICAgICAgIAlwdXNoICAgJXJicAogICAgIDg2NjoJNDggODkg ZjcgICAgICAgICAgICAgCW1vdiAgICAlcnNpLCVyZGkKfQogICAgIDg2OToJOGQgNzIgMDggICAg ICAgICAgICAgCWxlYSAgICAweDgoJXJkeCksJWVzaQogICAgIDg2YzoJNDggODkgZTUgICAgICAg ICAgICAgCW1vdiAgICAlcnNwLCVyYnAKICAgICA4NmY6CWU4IDAwIDAwIDAwIDAwICAgICAgIAlj YWxscSAgODc0IDx2eGxhbl9ncm9fY29tcGxldGUrMHgxND4KICogcmV0dXJucyB0cnVlIGlmIHRo ZSByZXN1bHQgaXMgMCwgb3IgZmFsc2UgZm9yIGFsbCBvdGhlcgogKiBjYXNlcy4KICovCnN0YXRp YyBfX2Fsd2F5c19pbmxpbmUgYm9vbCBhdG9taWNfZGVjX2FuZF90ZXN0KGF0b21pY190ICp2KQp7 CglHRU5fVU5BUllfUk1XY2MoTE9DS19QUkVGSVggImRlY2wiLCB2LT5jb3VudGVyLCAiJTAiLCBl KTsKICAgICA4NzQ6CTVkICAgICAgICAgICAgICAgICAgIAlwb3AgICAgJXJicAogICAgIDg3NToJ YzMgICAgICAgICAgICAgICAgICAgCXJldHEgICAKICAgICA4NzY6CTY2IDJlIDBmIDFmIDg0IDAw IDAwIAlub3B3ICAgJWNzOjB4MCglcmF4LCVyYXgsMSkKICAgICA4N2Q6CTAwIDAwIDAwIAoKMDAw MDAwMDAwMDAwMDg4MCA8dnhsYW5faW5pdD46CgpzdGF0aWMgaW5saW5lIHZvaWQgbmVpZ2hfcmVs ZWFzZShzdHJ1Y3QgbmVpZ2hib3VyICpuZWlnaCkKewoJaWYgKGF0b21pY19kZWNfYW5kX3Rlc3Qo Jm5laWdoLT5yZWZjbnQpKQoJCW5laWdoX2Rlc3Ryb3kobmVpZ2gpOwp9CiAgICAgODgwOgllOCAw MCAwMCAwMCAwMCAgICAgICAJY2FsbHEgIDg4NSA8dnhsYW5faW5pdCsweDU+CiAgICAgODg1Ogk1 NSAgICAgICAgICAgICAgICAgICAJcHVzaCAgICVyYnAKICAgICA4ODY6CWJhIGMwIDAwIDQwIDAy ICAgICAgIAltb3YgICAgJDB4MjQwMDBjMCwlZWR4CiAgICAgODhiOgliZSAwOCAwMCAwMCAwMCAg ICAgICAJbW92ICAgICQweDgsJWVzaQoKCXJldHVybiBwcDsKfQoKc3RhdGljIGludCB2eGxhbl9n cm9fY29tcGxldGUoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBpbnQgbmhv ZmYpCnsKICAgICA4OTA6CTQ4IDg5IGU1ICAgICAgICAgICAgIAltb3YgICAgJXJzcCwlcmJwCiAg ICAgODkzOgk0MSA1NCAgICAgICAgICAgICAgICAJcHVzaCAgICVyMTIKICAgICA4OTU6CTUzICAg ICAgICAgICAgICAgICAgIAlwdXNoICAgJXJieAogICAgIDg5NjoJNDkgODkgZmMgICAgICAgICAg ICAgCW1vdiAgICAlcmRpLCVyMTIKCS8qIFNldHMgJ3NrYi0+aW5uZXJfbWFjX2hlYWRlcicgc2lu Y2Ugd2UgYXJlIGFsd2F5cyBjYWxsZWQgd2l0aAoJICogJ3NrYi0+ZW5jYXBzdWxhdGlvbicgc2V0 LgoJICovCglyZXR1cm4gZXRoX2dyb19jb21wbGV0ZShza2IsIG5ob2ZmICsgc2l6ZW9mKHN0cnVj dCB2eGxhbmhkcikpOwogICAgIDg5OToJYmYgMjAgMDAgMDAgMDAgICAgICAgCW1vdiAgICAkMHgy MCwlZWRpCgoJcmV0dXJuIHBwOwp9CgpzdGF0aWMgaW50IHZ4bGFuX2dyb19jb21wbGV0ZShzdHJ1 Y3Qgc29jayAqc2ssIHN0cnVjdCBza19idWZmICpza2IsIGludCBuaG9mZikKewogICAgIDg5ZToJ ZTggMDAgMDAgMDAgMDAgICAgICAgCWNhbGxxICA4YTMgPHZ4bGFuX2luaXQrMHgyMz4KCS8qIFNl dHMgJ3NrYi0+aW5uZXJfbWFjX2hlYWRlcicgc2luY2Ugd2UgYXJlIGFsd2F5cyBjYWxsZWQgd2l0 aAoJICogJ3NrYi0+ZW5jYXBzdWxhdGlvbicgc2V0LgoJICovCglyZXR1cm4gZXRoX2dyb19jb21w bGV0ZShza2IsIG5ob2ZmICsgc2l6ZW9mKHN0cnVjdCB2eGxhbmhkcikpOwogICAgIDhhMzoJNDgg ODUgYzAgICAgICAgICAgICAgCXRlc3QgICAlcmF4LCVyYXgKfQogICAgIDhhNjoJNzQgMzggICAg ICAgICAgICAgICAgCWplICAgICA4ZTAgPHZ4bGFuX2luaXQrMHg2MD4KICAgICA4YTg6CTQ4IDg5 IGMzICAgICAgICAgICAgIAltb3YgICAgJXJheCwlcmJ4CiAgICAgOGFiOgliYSBmZiBmZiBmZiBm ZiAgICAgICAJbW92ICAgICQweGZmZmZmZmZmLCVlZHgKCXNwaW5fdW5sb2NrKCZ2bi0+c29ja19s b2NrKTsKfQoKLyogU2V0dXAgc3RhdHMgd2hlbiBkZXZpY2UgaXMgY3JlYXRlZCAqLwpzdGF0aWMg aW50IHZ4bGFuX2luaXQoc3RydWN0IG5ldF9kZXZpY2UgKmRldikKewogICAgIDhiMDoJODMgYzIg MDEgICAgICAgICAgICAgCWFkZCAgICAkMHgxLCVlZHgKICAgICA4YjM6CWJlIDAwIDAxIDAwIDAw ICAgICAgIAltb3YgICAgJDB4MTAwLCVlc2kKCWRldi0+dHN0YXRzID0gbmV0ZGV2X2FsbG9jX3Bj cHVfc3RhdHMoc3RydWN0IHBjcHVfc3dfbmV0c3RhdHMpOwogICAgIDhiODoJNDggYzcgYzcgMDAg MDAgMDAgMDAgCW1vdiAgICAkMHgwLCVyZGkKICAgICA4YmY6CTQ4IDYzIGQyICAgICAgICAgICAg IAltb3ZzbHEgJWVkeCwlcmR4CglzcGluX3VubG9jaygmdm4tPnNvY2tfbG9jayk7Cn0KCi8qIFNl dHVwIHN0YXRzIHdoZW4gZGV2aWNlIGlzIGNyZWF0ZWQgKi8Kc3RhdGljIGludCB2eGxhbl9pbml0 KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCnsKICAgICA4YzI6CWU4IDAwIDAwIDAwIDAwICAgICAg IAljYWxscSAgOGM3IDx2eGxhbl9pbml0KzB4NDc+CiAgICAgOGM3OgkzYiAwNSAwMCAwMCAwMCAw MCAgICAJY21wICAgIDB4MCglcmlwKSwlZWF4ICAgICAgICAjIDhjZCA8dnhsYW5faW5pdCsweDRk PgoJZGV2LT50c3RhdHMgPSBuZXRkZXZfYWxsb2NfcGNwdV9zdGF0cyhzdHJ1Y3QgcGNwdV9zd19u ZXRzdGF0cyk7CiAgICAgOGNkOgk4OSBjMiAgICAgICAgICAgICAgICAJbW92ICAgICVlYXgsJWVk eAogICAgIDhjZjoJN2MgZGYgICAgICAgICAgICAgICAgCWpsICAgICA4YjAgPHZ4bGFuX2luaXQr MHgzMD4KICAgICA4ZDE6CTQ5IDg5IDljIDI0IDg4IDA0IDAwIAltb3YgICAgJXJieCwweDQ4OCgl cjEyKQogICAgIDhkODoJMDAgCiAgICAgOGQ5OgkzMSBjMCAgICAgICAgICAgICAgICAJeG9yICAg ICVlYXgsJWVheAogICAgIDhkYjoJNWIgICAgICAgICAgICAgICAgICAgCXBvcCAgICAlcmJ4CiAg ICAgOGRjOgk0MSA1YyAgICAgICAgICAgICAgICAJcG9wICAgICVyMTIKICAgICA4ZGU6CTVkICAg ICAgICAgICAgICAgICAgIAlwb3AgICAgJXJicAogICAgIDhkZjoJYzMgICAgICAgICAgICAgICAg ICAgCXJldHEgICAKICAgICA4ZTA6CTViICAgICAgICAgICAgICAgICAgIAlwb3AgICAgJXJieAog ICAgIDhlMToJNDkgYzcgODQgMjQgODggMDQgMDAgCW1vdnEgICAkMHgwLDB4NDg4KCVyMTIpCiAg ICAgOGU4OgkwMCAwMCAwMCAwMCAwMCAKICAgICA4ZWQ6CWI4IGY0IGZmIGZmIGZmICAgICAgIAlt b3YgICAgJDB4ZmZmZmZmZjQsJWVheAogICAgIDhmMjoJNDEgNWMgICAgICAgICAgICAgICAgCXBv cCAgICAlcjEyCiAgICAgOGY0Ogk1ZCAgICAgICAgICAgICAgICAgICAJcG9wICAgICVyYnAKICAg ICA4ZjU6CWMzICAgICAgICAgICAgICAgICAgIAlyZXRxICAgCiAgICAgOGY2Ogk2NiAyZSAwZiAx ZiA4NCAwMCAwMCAJbm9wdyAgICVjczoweDAoJXJheCwlcmF4LDEpCiAgICAgOGZkOgkwMCAwMCAw MCAKCjAwMDAwMDAwMDAwMDA5MDAgPHZ4bGFuX2RlbGxpbms+OgogICAgIDkwMDoJZTggMDAgMDAg MDAgMDAgICAgICAgCWNhbGxxICA5MDUgPHZ4bGFuX2RlbGxpbmsrMHg1PgogICAgIDkwNToJNTUg ICAgICAgICAgICAgICAgICAgCXB1c2ggICAlcmJwCiAgICAgOTA2Ogk0OCA4OSBlNSAgICAgICAg ICAgICAJbW92ICAgICVyc3AsJXJicAoJaWYgKCFkZXYtPnRzdGF0cykKCQlyZXR1cm4gLUVOT01F TTsKCglyZXR1cm4gMDsKICAgICA5MDk6CTQxIDU2ICAgICAgICAgICAgICAgIAlwdXNoICAgJXIx NAp9CiAgICAgOTBiOgk0MSA1NSAgICAgICAgICAgICAgICAJcHVzaCAgICVyMTMKICAgICA5MGQ6 CTQxIDU0ICAgICAgICAgICAgICAgIAlwdXNoICAgJXIxMgogICAgIDkwZjoJNTMgICAgICAgICAg ICAgICAgICAgCXB1c2ggICAlcmJ4CiAgICAgOTEwOgk0OSA4OSBmZCAgICAgICAgICAgICAJbW92 ICAgICVyZGksJXIxMwp9CgovKiBTZXR1cCBzdGF0cyB3aGVuIGRldmljZSBpcyBjcmVhdGVkICov CnN0YXRpYyBpbnQgdnhsYW5faW5pdChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQp7CglkZXYtPnRz dGF0cyA9IG5ldGRldl9hbGxvY19wY3B1X3N0YXRzKHN0cnVjdCBwY3B1X3N3X25ldHN0YXRzKTsK ICAgICA5MTM6CTQ4IDhiIDg3IDc4IDA4IDAwIDAwIAltb3YgICAgMHg4NzgoJXJkaSksJXJheAog ICAgIDkxYToJNDkgODkgZjYgICAgICAgICAgICAgCW1vdiAgICAlcnNpLCVyMTQKCWlmICghZGV2 LT50c3RhdHMpCgkJcmV0dXJuIC1FTk9NRU07CiAgICAgOTFkOgk0OCA4YiA5MCA4OCAxNCAwMCAw MCAJbW92ICAgIDB4MTQ4OCglcmF4KSwlcmR4CgoJcmV0dXJuIDA7Cn0KICAgICA5MjQ6CThiIDA1 IDAwIDAwIDAwIDAwICAgIAltb3YgICAgMHgwKCVyaXApLCVlYXggICAgICAgICMgOTJhIDx2eGxh bl9kZWxsaW5rKzB4MmE+CiAgICAgOTJhOgk4MyBlOCAwMSAgICAgICAgICAgICAJc3ViICAgICQw eDEsJWVheAogICAgIDkyZDoJNDggOTggICAgICAgICAgICAgICAgCWNsdHEgICAKICAgICA5MmY6 CTQ4IDhiIDVjIGMyIDE4ICAgICAgIAltb3YgICAgMHgxOCglcmR4LCVyYXgsOCksJXJieAoKCXJl dHVybiB2eGxhbl9kZXZfY29uZmlndXJlKHNyY19uZXQsIGRldiwgJmNvbmYpOwp9CgpzdGF0aWMg dm9pZCB2eGxhbl9kZWxsaW5rKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCBsaXN0X2hl YWQgKmhlYWQpCnsKICAgICA5MzQ6CTQ4IDgxIGMzIDEwIDA4IDAwIDAwIAlhZGQgICAgJDB4ODEw LCVyYngKICAgICA5M2I6CTQ4IDg5IGRmICAgICAgICAgICAgIAltb3YgICAgJXJieCwlcmRpCiAg ICAgOTNlOgllOCAwMCAwMCAwMCAwMCAgICAgICAJY2FsbHEgIDk0MyA8dnhsYW5fZGVsbGluaysw eDQzPgoJc3RydWN0IHZ4bGFuX2RldiAqdnhsYW4gPSBuZXRkZXZfcHJpdihkZXYpOwoJc3RydWN0 IHZ4bGFuX25ldCAqdm4gPSBuZXRfZ2VuZXJpYyh2eGxhbi0+bmV0LCB2eGxhbl9uZXRfaWQpOwog ICAgIDk0MzoJNDkgOGIgODUgNDggMDggMDAgMDAgCW1vdiAgICAweDg0OCglcjEzKSwlcmF4CgoJ cmV0dXJuIHZ4bGFuX2Rldl9jb25maWd1cmUoc3JjX25ldCwgZGV2LCAmY29uZik7Cn0KCnN0YXRp YyB2b2lkIHZ4bGFuX2RlbGxpbmsoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgc3RydWN0IGxpc3Rf aGVhZCAqaGVhZCkKewogICAgIDk0YToJNDggODUgYzAgICAgICAgICAgICAgCXRlc3QgICAlcmF4 LCVyYXgKfSkKCnN0YXRpYyBfX2Fsd2F5c19pbmxpbmUKdm9pZCBfX3JlYWRfb25jZV9zaXplKGNv bnN0IHZvbGF0aWxlIHZvaWQgKnAsIHZvaWQgKnJlcywgaW50IHNpemUpCnsKCV9fUkVBRF9PTkNF X1NJWkU7CiAgICAgOTRkOgk3NCAyNCAgICAgICAgICAgICAgICAJamUgICAgIDk3MyA8dnhsYW5f ZGVsbGluaysweDczPgogICAgIDk0ZjoJNDkgOGIgOTUgNDAgMDggMDAgMDAgCW1vdiAgICAweDg0 MCglcjEzKSwlcmR4CiAgICAgOTU2Ogk0OCA4NSBkMiAgICAgICAgICAgICAJdGVzdCAgICVyZHgs JXJkeAogICAgIDk1OToJNDggODkgMTAgICAgICAgICAgICAgCW1vdiAgICAlcmR4LCglcmF4KQog ICAgIDk1YzoJNzQgMDQgICAgICAgICAgICAgICAgCWplICAgICA5NjIgPHZ4bGFuX2RlbGxpbmsr MHg2Mj4KICAgICA5NWU6CTQ4IDg5IDQyIDA4ICAgICAgICAgIAltb3YgICAgJXJheCwweDgoJXJk eCkKCXJhd19zcGluX2xvY2tfaW5pdCgmKF9sb2NrKS0+cmxvY2spOwkJXAp9IHdoaWxlICgwKQoK c3RhdGljIF9fYWx3YXlzX2lubGluZSB2b2lkIHNwaW5fbG9jayhzcGlubG9ja190ICpsb2NrKQp7 CglyYXdfc3Bpbl9sb2NrKCZsb2NrLT5ybG9jayk7CiAgICAgOTYyOgk0OCBiOCAwMCAwMiAwMCAw MCAwMCAJbW92YWJzICQweGRlYWQwMDAwMDAwMDAyMDAsJXJheAogICAgIDk2OToJMDAgYWQgZGUg CiAgICAgOTZjOgk0OSA4OSA4NSA0OCAwOCAwMCAwMCAJbW92ICAgICVyYXgsMHg4NDgoJXIxMykK ICAgICA5NzM6CTQ4IDg5IGRmICAgICAgICAgICAgIAltb3YgICAgJXJieCwlcmRpCiAgICAgOTc2 OglmZiAxNCAyNSAwMCAwMCAwMCAwMCAJY2FsbHEgICoweDAKCXN0cnVjdCB2eGxhbl9kZXYgKnZ4 bGFuID0gbmV0ZGV2X3ByaXYoZGV2KTsKCXN0cnVjdCB2eGxhbl9uZXQgKnZuID0gbmV0X2dlbmVy aWModnhsYW4tPm5ldCwgdnhsYW5fbmV0X2lkKTsKCglzcGluX2xvY2soJnZuLT5zb2NrX2xvY2sp OwoJaWYgKCFobGlzdF91bmhhc2hlZCgmdnhsYW4tPmhsaXN0KSkKICAgICA5N2Q6CTQ5IDgzIGJk IDMwIDA5IDAwIDAwIAljbXBxICAgJDB4MCwweDkzMCglcjEzKQogICAgIDk4NDoJMDAgCglyZXR1 cm4gIVJFQURfT05DRShoLT5maXJzdCk7Cn0KCnN0YXRpYyBpbmxpbmUgdm9pZCBfX2hsaXN0X2Rl bChzdHJ1Y3QgaGxpc3Rfbm9kZSAqbikKewoJc3RydWN0IGhsaXN0X25vZGUgKm5leHQgPSBuLT5u ZXh0OwogICAgIDk4NToJNDEgYmMgZmYgZmYgZmYgZmYgICAgCW1vdiAgICAkMHhmZmZmZmZmZiwl cjEyZAp7Cglzd2l0Y2ggKHNpemUpIHsKCWNhc2UgMTogKih2b2xhdGlsZSBfX3U4ICopcCA9ICoo X191OCAqKXJlczsgYnJlYWs7CgljYXNlIDI6ICoodm9sYXRpbGUgX191MTYgKilwID0gKihfX3Ux NiAqKXJlczsgYnJlYWs7CgljYXNlIDQ6ICoodm9sYXRpbGUgX191MzIgKilwID0gKihfX3UzMiAq KXJlczsgYnJlYWs7CgljYXNlIDg6ICoodm9sYXRpbGUgX191NjQgKilwID0gKihfX3U2NCAqKXJl czsgYnJlYWs7CiAgICAgOThiOgkwZiA4NCA4YSAwMCAwMCAwMCAgICAJamUgICAgIGExYiA8dnhs YW5fZGVsbGluaysweDExYj4KCXN0cnVjdCBobGlzdF9ub2RlICoqcHByZXYgPSBuLT5wcHJldjsK CglXUklURV9PTkNFKCpwcHJldiwgbmV4dCk7CglpZiAobmV4dCkKCQluZXh0LT5wcHJldiA9IHBw cmV2OwogICAgIDk5MToJNDEgOGQgNTQgMjQgMDEgICAgICAgCWxlYSAgICAweDEoJXIxMiksJWVk eAogKiBobGlzdF9mb3JfZWFjaF9lbnRyeSgpLgogKi8Kc3RhdGljIGlubGluZSB2b2lkIGhsaXN0 X2RlbF9yY3Uoc3RydWN0IGhsaXN0X25vZGUgKm4pCnsKCV9faGxpc3RfZGVsKG4pOwoJbi0+cHBy ZXYgPSBMSVNUX1BPSVNPTjI7CiAgICAgOTk2OgliZSAwMCAwMSAwMCAwMCAgICAgICAJbW92ICAg ICQweDEwMCwlZXNpCiAgICAgOTliOgk0OCBjNyBjNyAwMCAwMCAwMCAwMCAJbW92ICAgICQweDAs JXJkaQogICAgIDlhMjoJNDggNjMgZDIgICAgICAgICAgICAgCW1vdnNscSAlZWR4LCVyZHgKCVBW T1BfVkNBTEwyKHB2X2xvY2tfb3BzLnF1ZXVlZF9zcGluX2xvY2tfc2xvd3BhdGgsIGxvY2ssIHZh bCk7Cn0KCnN0YXRpYyBfX2Fsd2F5c19pbmxpbmUgdm9pZCBwdl9xdWV1ZWRfc3Bpbl91bmxvY2so c3RydWN0IHFzcGlubG9jayAqbG9jaykKewoJUFZPUF9WQ0FMTEVFMShwdl9sb2NrX29wcy5xdWV1 ZWRfc3Bpbl91bmxvY2ssIGxvY2spOwogICAgIDlhNToJZTggMDAgMDAgMDAgMDAgICAgICAgCWNh bGxxICA5YWEgPHZ4bGFuX2RlbGxpbmsrMHhhYT4KICAgICA5YWE6CTNiIDA1IDAwIDAwIDAwIDAw ICAgIAljbXAgICAgMHgwKCVyaXApLCVlYXggICAgICAgICMgOWIwIDx2eGxhbl9kZWxsaW5rKzB4 YjA+CgpzdGF0aWMgaW5saW5lIHZvaWQgZ3JvX2NlbGxzX2Rlc3Ryb3koc3RydWN0IGdyb19jZWxs cyAqZ2NlbGxzKQp7CglpbnQgaTsKCglpZiAoIWdjZWxscy0+Y2VsbHMpCiAgICAgOWIwOgk0MSA4 OSBjNCAgICAgICAgICAgICAJbW92ICAgICVlYXgsJXIxMmQKICAgICA5YjM6CTdkIDRmICAgICAg ICAgICAgICAgIAlqZ2UgICAgYTA0IDx2eGxhbl9kZWxsaW5rKzB4MTA0PgogICAgIDliNToJNDgg OTggICAgICAgICAgICAgICAgCWNsdHEgICAKICAgICA5Yjc6CTQ5IDhiIDlkIDMwIDA5IDAwIDAw IAltb3YgICAgMHg5MzAoJXIxMyksJXJieAogICAgIDliZToJNDggMDMgMWMgYzUgMDAgMDAgMDAg CWFkZCAgICAweDAoLCVyYXgsOCksJXJieAogICAgIDljNToJMDAgCiAgICAgOWM2Ogk0OCA4ZCA3 YiAxOCAgICAgICAgICAJbGVhICAgIDB4MTgoJXJieCksJXJkaQogICAgIDljYToJZTggMDAgMDAg MDAgMDAgICAgICAgCWNhbGxxICA5Y2YgPHZ4bGFuX2RlbGxpbmsrMHhjZj4KICAgICA5Y2Y6CTQ4 IDhiIDNiICAgICAgICAgICAgIAltb3YgICAgKCVyYngpLCVyZGkKICAgICA5ZDI6CTQ4IDM5IGZi ICAgICAgICAgICAgIAljbXAgICAgJXJkaSwlcmJ4CiAgICAgOWQ1Ogk3NCBiYSAgICAgICAgICAg ICAgICAJamUgICAgIDk5MSA8dnhsYW5fZGVsbGluaysweDkxPgogICAgIDlkNzoJNDggODUgZmYg ICAgICAgICAgICAgCXRlc3QgICAlcmRpLCVyZGkKCQlyZXR1cm47Cglmb3JfZWFjaF9wb3NzaWJs ZV9jcHUoaSkgewogICAgIDlkYToJNzQgYjUgICAgICAgICAgICAgICAgCWplICAgICA5OTEgPHZ4 bGFuX2RlbGxpbmsrMHg5MT4KICAgICA5ZGM6CTgzIDZiIDEwIDAxICAgICAgICAgIAlzdWJsICAg JDB4MSwweDEwKCVyYngpCiAgICAgOWUwOgk0OCA4YiAxNyAgICAgICAgICAgICAJbW92ICAgICgl cmRpKSwlcmR4CiAgICAgOWUzOgk0OCA4YiA0NyAwOCAgICAgICAgICAJbW92ICAgIDB4OCglcmRp KSwlcmF4CgkJc3RydWN0IGdyb19jZWxsICpjZWxsID0gcGVyX2NwdV9wdHIoZ2NlbGxzLT5jZWxs cywgaSk7CiAgICAgOWU3Ogk0OCBjNyAwNyAwMCAwMCAwMCAwMCAJbW92cSAgICQweDAsKCVyZGkp CiAgICAgOWVlOgk0OCBjNyA0NyAwOCAwMCAwMCAwMCAJbW92cSAgICQweDAsMHg4KCVyZGkpCiAg ICAgOWY1OgkwMCAKCgkJbmV0aWZfbmFwaV9kZWwoJmNlbGwtPm5hcGkpOwogICAgIDlmNjoJNDgg ODkgNDIgMDggICAgICAgICAgCW1vdiAgICAlcmF4LDB4OCglcmR4KQogICAgIDlmYToJNDggODkg MTAgICAgICAgICAgICAgCW1vdiAgICAlcmR4LCglcmF4KQogICAgIDlmZDoJZTggMDAgMDAgMDAg MDAgICAgICAgCWNhbGxxICBhMDIgPHZ4bGFuX2RlbGxpbmsrMHgxMDI+CiAqLwpzdGF0aWMgaW5s aW5lIHN0cnVjdCBza19idWZmICpza2JfcGVlayhjb25zdCBzdHJ1Y3Qgc2tfYnVmZl9oZWFkICps aXN0XykKewoJc3RydWN0IHNrX2J1ZmYgKnNrYiA9IGxpc3RfLT5uZXh0OwoKCWlmIChza2IgPT0g KHN0cnVjdCBza19idWZmICopbGlzdF8pCiAgICAgYTAyOgllYiBjYiAgICAgICAgICAgICAgICAJ am1wICAgIDljZiA8dnhsYW5fZGVsbGluaysweGNmPgogICAgIGEwNDoJNDkgOGIgYmQgMzAgMDkg MDAgMDAgCW1vdiAgICAweDkzMCglcjEzKSwlcmRpCiAqLwpzdHJ1Y3Qgc2tfYnVmZiAqc2tiX2Rl cXVldWUoc3RydWN0IHNrX2J1ZmZfaGVhZCAqbGlzdCk7CnN0YXRpYyBpbmxpbmUgc3RydWN0IHNr X2J1ZmYgKl9fc2tiX2RlcXVldWUoc3RydWN0IHNrX2J1ZmZfaGVhZCAqbGlzdCkKewoJc3RydWN0 IHNrX2J1ZmYgKnNrYiA9IHNrYl9wZWVrKGxpc3QpOwoJaWYgKHNrYikKICAgICBhMGI6CWU4IDAw IDAwIDAwIDAwICAgICAgIAljYWxscSAgYTEwIDx2eGxhbl9kZWxsaW5rKzB4MTEwPgpzdGF0aWMg aW5saW5lIHZvaWQgX19za2JfdW5saW5rKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBza19i dWZmX2hlYWQgKmxpc3QpCnsKCXN0cnVjdCBza19idWZmICpuZXh0LCAqcHJldjsKCglsaXN0LT5x bGVuLS07CgluZXh0CSAgID0gc2tiLT5uZXh0OwogICAgIGExMDoJNDkgYzcgODUgMzAgMDkgMDAg MDAgCW1vdnEgICAkMHgwLDB4OTMwKCVyMTMpCiAgICAgYTE3OgkwMCAwMCAwMCAwMCAKCXByZXYJ ICAgPSBza2ItPnByZXY7Cglza2ItPm5leHQgID0gc2tiLT5wcmV2ID0gTlVMTDsKICAgICBhMWI6 CTQ5IDhiIDg1IDU4IDA4IDAwIDAwIAltb3YgICAgMHg4NTgoJXIxMyksJXJheAogICAgIGEyMjoJ NDkgOGIgOTUgNTAgMDggMDAgMDAgCW1vdiAgICAweDg1MCglcjEzKSwlcmR4CgluZXh0LT5wcmV2 ID0gcHJldjsKICAgICBhMjk6CTRjIDg5IGY2ICAgICAgICAgICAgIAltb3YgICAgJXIxNCwlcnNp CglwcmV2LT5uZXh0ID0gbmV4dDsKICAgICBhMmM6CTRjIDg5IGVmICAgICAgICAgICAgIAltb3Yg ICAgJXIxMywlcmRpCnZvaWQgc2tiX3F1ZXVlX3B1cmdlKHN0cnVjdCBza19idWZmX2hlYWQgKmxp c3QpOwpzdGF0aWMgaW5saW5lIHZvaWQgX19za2JfcXVldWVfcHVyZ2Uoc3RydWN0IHNrX2J1ZmZf aGVhZCAqbGlzdCkKewoJc3RydWN0IHNrX2J1ZmYgKnNrYjsKCXdoaWxlICgoc2tiID0gX19za2Jf ZGVxdWV1ZShsaXN0KSkgIT0gTlVMTCkKCQlrZnJlZV9za2Ioc2tiKTsKICAgICBhMmY6CTQ4IDg5 IDQyIDA4ICAgICAgICAgIAltb3YgICAgJXJheCwweDgoJXJkeCkKICAgICBhMzM6CTQ4IDg5IDEw ICAgICAgICAgICAgIAltb3YgICAgJXJkeCwoJXJheCkKCQlfX3NrYl9xdWV1ZV9wdXJnZSgmY2Vs bC0+bmFwaV9za2JzKTsKCX0KCWZyZWVfcGVyY3B1KGdjZWxscy0+Y2VsbHMpOwogICAgIGEzNjoJ NDggYjggMDAgMDEgMDAgMDAgMDAgCW1vdmFicyAkMHhkZWFkMDAwMDAwMDAwMTAwLCVyYXgKICAg ICBhM2Q6CTAwIGFkIGRlIAoJZ2NlbGxzLT5jZWxscyA9IE5VTEw7CiAgICAgYTQwOgk0OSA4OSA4 NSA1MCAwOCAwMCAwMCAJbW92ICAgICVyYXgsMHg4NTAoJXIxMykKICAgICBhNDc6CTQ4IGI4IDAw IDAyIDAwIDAwIDAwIAltb3ZhYnMgJDB4ZGVhZDAwMDAwMDAwMDIwMCwlcmF4CiAgICAgYTRlOgkw MCBhZCBkZSAKCV9fbGlzdF9kZWwoZW50cnktPnByZXYsIGVudHJ5LT5uZXh0KTsKfQoKc3RhdGlj IGlubGluZSB2b2lkIGxpc3RfZGVsKHN0cnVjdCBsaXN0X2hlYWQgKmVudHJ5KQp7CglfX2xpc3Rf ZGVsKGVudHJ5LT5wcmV2LCBlbnRyeS0+bmV4dCk7CiAgICAgYTUxOgk0OSA4OSA4NSA1OCAwOCAw MCAwMCAJbW92ICAgICVyYXgsMHg4NTgoJXIxMykKICAgICBhNTg6CWU4IDAwIDAwIDAwIDAwICAg ICAgIAljYWxscSAgYTVkIDx2eGxhbl9kZWxsaW5rKzB4MTVkPgoJCWhsaXN0X2RlbF9yY3UoJnZ4 bGFuLT5obGlzdCk7CglzcGluX3VubG9jaygmdm4tPnNvY2tfbG9jayk7CgoJZ3JvX2NlbGxzX2Rl c3Ryb3koJnZ4bGFuLT5ncm9fY2VsbHMpOwoJbGlzdF9kZWwoJnZ4bGFuLT5uZXh0KTsKCXVucmVn aXN0ZXJfbmV0ZGV2aWNlX3F1ZXVlKGRldiwgaGVhZCk7CiAgICAgYTVkOgk1YiAgICAgICAgICAg ICAgICAgICAJcG9wICAgICVyYngKICAgICBhNWU6CTQxIDVjICAgICAgICAgICAgICAgIAlwb3Ag ICAgJXIxMgogKiBUaGlzIGlzIG9ubHkgZm9yIGludGVybmFsIGxpc3QgbWFuaXB1bGF0aW9uIHdo ZXJlIHdlIGtub3cKICogdGhlIHByZXYvbmV4dCBlbnRyaWVzIGFscmVhZHkhCiAqLwpzdGF0aWMg aW5saW5lIHZvaWQgX19saXN0X2RlbChzdHJ1Y3QgbGlzdF9oZWFkICogcHJldiwgc3RydWN0IGxp c3RfaGVhZCAqIG5leHQpCnsKCW5leHQtPnByZXYgPSBwcmV2OwogICAgIGE2MDoJNDEgNWQgICAg ICAgICAgICAgICAgCXBvcCAgICAlcjEzCiAgICAgYTYyOgk0MSA1ZSAgICAgICAgICAgICAgICAJ cG9wICAgICVyMTQKICAgICBhNjQ6CTVkICAgICAgICAgICAgICAgICAgIAlwb3AgICAgJXJicAog ICAgIGE2NToJYzMgICAgICAgICAgICAgICAgICAgCXJldHEgICAKfQoKc3RhdGljIGlubGluZSB2 b2lkIGxpc3RfZGVsKHN0cnVjdCBsaXN0X2hlYWQgKmVudHJ5KQp7CglfX2xpc3RfZGVsKGVudHJ5 LT5wcmV2LCBlbnRyeS0+bmV4dCk7CgllbnRyeS0+bmV4dCA9IExJU1RfUE9JU09OMTsKICAgICBh NjY6CTY2IDJlIDBmIDFmIDg0IDAwIDAwIAlub3B3ICAgJWNzOjB4MCglcmF4LCVyYXgsMSkKICAg ICBhNmQ6CTAwIDAwIDAwIAoKMDAwMDAwMDAwMDAwMGE3MCA8dnhsYW42X2dldF9yb3V0ZT46CiAg ICAgYTcwOgllOCAwMCAwMCAwMCAwMCAgICAgICAJY2FsbHEgIGE3NSA8dnhsYW42X2dldF9yb3V0 ZSsweDU+CiAgICAgYTc1Ogk1NSAgICAgICAgICAgICAgICAgICAJcHVzaCAgICVyYnAKICAgICBh NzY6CTQ4IDg5IGU1ICAgICAgICAgICAgIAltb3YgICAgJXJzcCwlcmJwCgllbnRyeS0+cHJldiA9 IExJU1RfUE9JU09OMjsKICAgICBhNzk6CTQxIDU3ICAgICAgICAgICAgICAgIAlwdXNoICAgJXIx NQogICAgIGE3YjoJNDEgNTYgICAgICAgICAgICAgICAgCXB1c2ggICAlcjE0CiAgICAgYTdkOgk0 MSA1NSAgICAgICAgICAgICAgICAJcHVzaCAgICVyMTMKICAgICBhN2Y6CTQxIDU0ICAgICAgICAg ICAgICAgIAlwdXNoICAgJXIxMgogICAgIGE4MToJNDkgODkgZjcgICAgICAgICAgICAgCW1vdiAg ICAlcnNpLCVyMTUKICAgICBhODQ6CTUzICAgICAgICAgICAgICAgICAgIAlwdXNoICAgJXJieAog ICAgIGE4NToJODkgY2IgICAgICAgICAgICAgICAgCW1vdiAgICAlZWN4LCVlYngKICAgICBhODc6 CTQ5IDg5IGZlICAgICAgICAgICAgIAltb3YgICAgJXJkaSwlcjE0CiAgICAgYThhOgk0OCA4MyBl YyA2OCAgICAgICAgICAJc3ViICAgICQweDY4LCVyc3AKfQogICAgIGE4ZToJOGIgYjYgYjQgMDAg MDAgMDAgICAgCW1vdiAgICAweGI0KCVyc2kpLCVlc2kKICAgICBhOTQ6CTRjIDhiIDY1IDEwICAg ICAgICAgIAltb3YgICAgMHgxMCglcmJwKSwlcjEyCiAgICAgYTk4Ogk2NSA0OCA4YiAwYyAyNSAy OCAwMCAJbW92ICAgICVnczoweDI4LCVyY3gKICAgICBhOWY6CTAwIDAwIAoJCQkJCSAgX19iZTMy IGxhYmVsLAoJCQkJCSAgY29uc3Qgc3RydWN0IGluNl9hZGRyICpkYWRkciwKCQkJCQkgIHN0cnVj dCBpbjZfYWRkciAqc2FkZHIsCgkJCQkJICBzdHJ1Y3QgZHN0X2NhY2hlICpkc3RfY2FjaGUsCgkJ CQkJICBjb25zdCBzdHJ1Y3QgaXBfdHVubmVsX2luZm8gKmluZm8pCnsKICAgICBhYTE6CTQ4IDg5 IDRjIDI0IDYwICAgICAgIAltb3YgICAgJXJjeCwweDYwKCVyc3ApCiAgICAgYWE2OgkzMSBjOSAg ICAgICAgICAgICAgICAJeG9yICAgICVlY3gsJWVjeAogICAgIGFhODoJNGMgOGIgNmQgMTggICAg ICAgICAgCW1vdiAgICAweDE4KCVyYnApLCVyMTMKICAgICBhYWM6CTQ4IDhiIDQ1IDIwICAgICAg ICAgIAltb3YgICAgMHgyMCglcmJwKSwlcmF4CiAgICAgYWIwOgk4NSBmNiAgICAgICAgICAgICAg ICAJdGVzdCAgICVlc2ksJWVzaQogICAgIGFiMjoJNzUgNTEgICAgICAgICAgICAgICAgCWpuZSAg ICBiMDUgPHZ4bGFuNl9nZXRfcm91dGUrMHg5NT4KICAgICBhYjQ6CTQ4IDg1IGMwICAgICAgICAg ICAgIAl0ZXN0ICAgJXJheCwlcmF4CiAgICAgYWI3Ogk3NCA0OCAgICAgICAgICAgICAgICAJamUg ICAgIGIwMSA8dnhsYW42X2dldF9yb3V0ZSsweDkxPgogICAgIGFiOToJZjYgNDAgMjggMjAgICAg ICAgICAgCXRlc3RiICAkMHgyMCwweDI4KCVyYXgpCiAgICAgYWJkOgk3NSA0NiAgICAgICAgICAg ICAgICAJam5lICAgIGIwNSA8dnhsYW42X2dldF9yb3V0ZSsweDk1PgogICAgIGFiZjoJNGMgODkg ZTYgICAgICAgICAgICAgCW1vdiAgICAlcjEyLCVyc2kKICAgICBhYzI6CTRjIDg5IGVmICAgICAg ICAgICAgIAltb3YgICAgJXIxMywlcmRpCiAgICAgYWM1Ogk0YyA4OSAwYyAyNCAgICAgICAgICAJ bW92ICAgICVyOSwoJXJzcCkKICAgICBhYzk6CTQ0IDg5IDQ0IDI0IDA4ICAgICAgIAltb3YgICAg JXI4ZCwweDgoJXJzcCkKICAgICBhY2U6CTg5IDU0IDI0IDBjICAgICAgICAgIAltb3YgICAgJWVk eCwweGMoJXJzcCkKICAgICBhZDI6CWU4IDAwIDAwIDAwIDAwICAgICAgIAljYWxscSAgYWQ3IDx2 eGxhbjZfZ2V0X3JvdXRlKzB4Njc+CiAgICAgYWQ3Ogk0OCA4NSBjMCAgICAgICAgICAgICAJdGVz dCAgICVyYXgsJXJheAogICAgIGFkYToJNDggODkgNDQgMjQgMTAgICAgICAgCW1vdiAgICAlcmF4 LDB4MTAoJXJzcCkKICAgICBhZGY6CThiIDU0IDI0IDBjICAgICAgICAgIAltb3YgICAgMHhjKCVy c3ApLCVlZHgKCnN0YXRpYyBpbmxpbmUgYm9vbAppcF90dW5uZWxfZHN0X2NhY2hlX3VzYWJsZShj b25zdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAoJCQkgICBjb25zdCBzdHJ1Y3QgaXBfdHVubmVsX2lu Zm8gKmluZm8pCnsKCWlmIChza2ItPm1hcmspCiAgICAgYWUzOgk0NCA4YiA0NCAyNCAwOCAgICAg ICAJbW92ICAgIDB4OCglcnNwKSwlcjhkCgkJcmV0dXJuIGZhbHNlOwoJaWYgKCFpbmZvKQogICAg IGFlODoJNGMgOGIgMGMgMjQgICAgICAgICAgCW1vdiAgICAoJXJzcCksJXI5CgkJcmV0dXJuIHRy dWU7CglpZiAoaW5mby0+a2V5LnR1bl9mbGFncyAmIFRVTk5FTF9OT0NBQ0hFKQogICAgIGFlYzoJ MGYgODUgYWMgMDAgMDAgMDAgICAgCWpuZSAgICBiOWUgPHZ4bGFuNl9nZXRfcm91dGUrMHgxMmU+ CglpbnQgZXJyOwoKCWlmICh0b3MgJiYgIWluZm8pCgkJdXNlX2NhY2hlID0gZmFsc2U7CglpZiAo dXNlX2NhY2hlKSB7CgkJbmRzdCA9IGRzdF9jYWNoZV9nZXRfaXA2KGRzdF9jYWNoZSwgc2FkZHIp OwogICAgIGFmMjoJNDEgOGIgYjcgYjQgMDAgMDAgMDAgCW1vdiAgICAweGI0KCVyMTUpLCVlc2kK ICAgICBhZjk6CTQxIGJmIDAxIDAwIDAwIDAwICAgIAltb3YgICAgJDB4MSwlcjE1ZAogICAgIGFm ZjoJZWIgMDcgICAgICAgICAgICAgICAgCWptcCAgICBiMDggPHZ4bGFuNl9nZXRfcm91dGUrMHg5 OD4KICAgICBiMDE6CTg0IGRiICAgICAgICAgICAgICAgIAl0ZXN0ICAgJWJsLCVibAogICAgIGIw MzoJNzQgYmEgICAgICAgICAgICAgICAgCWplICAgICBhYmYgPHZ4bGFuNl9nZXRfcm91dGUrMHg0 Zj4KICAgICBiMDU6CTQ1IDMxIGZmICAgICAgICAgICAgIAl4b3IgICAgJXIxNWQsJXIxNWQKCQlp ZiAobmRzdCkKICAgICBiMDg6CTRjIDhkIDU0IDI0IDE4ICAgICAgIAlsZWEgICAgMHgxOCglcnNw KSwlcjEwCglpbnQgZXJyOwoKCWlmICh0b3MgJiYgIWluZm8pCgkJdXNlX2NhY2hlID0gZmFsc2U7 CglpZiAodXNlX2NhY2hlKSB7CgkJbmRzdCA9IGRzdF9jYWNoZV9nZXRfaXA2KGRzdF9jYWNoZSwg c2FkZHIpOwogICAgIGIwZDoJMzEgYzAgICAgICAgICAgICAgICAgCXhvciAgICAlZWF4LCVlYXgK CQlpZiAobmRzdCkKICAgICBiMGY6CWI5IDA5IDAwIDAwIDAwICAgICAgIAltb3YgICAgJDB4OSwl ZWN4CiAgICAgYjE0Ogk4MyBlMyAxZSAgICAgICAgICAgICAJYW5kICAgICQweDFlLCVlYngKICAg ICBiMTc6CTRjIDg5IGQ3ICAgICAgICAgICAgIAltb3YgICAgJXIxMCwlcmRpCiAgICAgYjFhOglj MSBlMyAxNCAgICAgICAgICAgICAJc2hsICAgICQweDE0LCVlYngKICAgICBiMWQ6CWYzIDQ4IGFi ICAgICAgICAgICAgIAlyZXAgc3RvcyAlcmF4LCVlczooJXJkaSkKICAgICBiMjA6CTQ5IDhiIDAx ICAgICAgICAgICAgIAltb3YgICAgKCVyOSksJXJheAogICAgIGIyMzoJODkgNTQgMjQgMTggICAg ICAgICAgCW1vdiAgICAlZWR4LDB4MTgoJXJzcCkKICAgICBiMjc6CTBmIGNiICAgICAgICAgICAg ICAgIAlic3dhcCAgJWVieAogICAgIGIyOToJNDkgOGIgNTEgMDggICAgICAgICAgCW1vdiAgICAw eDgoJXI5KSwlcmR4CiAgICAgYjJkOgk0MSAwOSBkOCAgICAgICAgICAgICAJb3IgICAgICVlYngs JXI4ZAogICAgIGIzMDoJODkgNzQgMjQgMjAgICAgICAgICAgCW1vdiAgICAlZXNpLDB4MjAoJXJz cCkKCWJvb2wgdXNlX2NhY2hlID0gaXBfdHVubmVsX2RzdF9jYWNoZV91c2FibGUoc2tiLCBpbmZv KTsKCXN0cnVjdCBkc3RfZW50cnkgKm5kc3Q7CglzdHJ1Y3QgZmxvd2k2IGZsNjsKCWludCBlcnI7 CgoJaWYgKHRvcyAmJiAhaW5mbykKICAgICBiMzQ6CTQ0IDg5IDQ0IDI0IDU4ICAgICAgIAltb3Yg ICAgJXI4ZCwweDU4KCVyc3ApCgkJbmRzdCA9IGRzdF9jYWNoZV9nZXRfaXA2KGRzdF9jYWNoZSwg c2FkZHIpOwoJCWlmIChuZHN0KQoJCQlyZXR1cm4gbmRzdDsKCX0KCgltZW1zZXQoJmZsNiwgMCwg c2l6ZW9mKGZsNikpOwogICAgIGIzOToJYzYgNDQgMjQgMjYgMTEgICAgICAgCW1vdmIgICAkMHgx MSwweDI2KCVyc3ApCiAgICAgYjNlOgk0YyA4OSBkMSAgICAgICAgICAgICAJbW92ICAgICVyMTAs JXJjeAogICAgIGI0MToJNDggODkgNDQgMjQgMzggICAgICAgCW1vdiAgICAlcmF4LDB4MzgoJXJz cCkKCXJldHVybiBudG9obChmbG93aW5mbyAmIElQVjZfVENMQVNTX01BU0spID4+IElQVjZfVENM QVNTX1NISUZUOwp9CgpzdGF0aWMgaW5saW5lIF9fYmUzMiBpcDZfbWFrZV9mbG93aW5mbyh1bnNp Z25lZCBpbnQgdGNsYXNzLCBfX2JlMzIgZmxvd2xhYmVsKQp7CglyZXR1cm4gaHRvbmwodGNsYXNz IDw8IElQVjZfVENMQVNTX1NISUZUKSB8IGZsb3dsYWJlbDsKICAgICBiNDY6CTQ5IDhiIDA0IDI0 ICAgICAgICAgIAltb3YgICAgKCVyMTIpLCVyYXgKICAgICBiNGE6CTQ4IDg5IDU0IDI0IDQwICAg ICAgIAltb3YgICAgJXJkeCwweDQwKCVyc3ApCiAgICAgYjRmOgk0OSA4YiA1NCAyNCAwOCAgICAg ICAJbW92ICAgIDB4OCglcjEyKSwlcmR4CglmbDYuZmxvd2k2X29pZiA9IG9pZjsKICAgICBiNTQ6 CTQ5IDhiIDdlIDM4ICAgICAgICAgIAltb3YgICAgMHgzOCglcjE0KSwlcmRpCiAgICAgYjU4Ogk0 OCA4OSA0NCAyNCA0OCAgICAgICAJbW92ICAgICVyYXgsMHg0OCglcnNwKQoJZmw2LmRhZGRyID0g KmRhZGRyOwoJZmw2LnNhZGRyID0gKnNhZGRyOwoJZmw2LmZsb3dsYWJlbCA9IGlwNl9tYWtlX2Zs b3dpbmZvKFJUX1RPUyh0b3MpLCBsYWJlbCk7CiAgICAgYjVkOgk0OSA4YiA0NiAyOCAgICAgICAg ICAJbW92ICAgIDB4MjgoJXIxNCksJXJheAoJZmw2LmZsb3dpNl9tYXJrID0gc2tiLT5tYXJrOwog ICAgIGI2MToJNDggODkgNTQgMjQgNTAgICAgICAgCW1vdiAgICAlcmR4LDB4NTAoJXJzcCkKCglt ZW1zZXQoJmZsNiwgMCwgc2l6ZW9mKGZsNikpOwoJZmw2LmZsb3dpNl9vaWYgPSBvaWY7CglmbDYu ZGFkZHIgPSAqZGFkZHI7CglmbDYuc2FkZHIgPSAqc2FkZHI7CglmbDYuZmxvd2xhYmVsID0gaXA2 X21ha2VfZmxvd2luZm8oUlRfVE9TKHRvcyksIGxhYmVsKTsKICAgICBiNjY6CTQ4IDhkIDU0IDI0 IDEwICAgICAgIAlsZWEgICAgMHgxMCglcnNwKSwlcmR4CglmbDYuZmxvd2k2X21hcmsgPSBza2It Pm1hcms7CglmbDYuZmxvd2k2X3Byb3RvID0gSVBQUk9UT19VRFA7CiAgICAgYjZiOgk0OCA4YiA0 MCAxMCAgICAgICAgICAJbW92ICAgIDB4MTAoJXJheCksJXJheAoKCWVyciA9IGlwdjZfc3R1Yi0+ aXB2Nl9kc3RfbG9va3VwKHZ4bGFuLT5uZXQsCiAgICAgYjZmOgk0OCA4YiA3MCAyMCAgICAgICAg ICAJbW92ICAgIDB4MjAoJXJheCksJXJzaQoJCQlyZXR1cm4gbmRzdDsKCX0KCgltZW1zZXQoJmZs NiwgMCwgc2l6ZW9mKGZsNikpOwoJZmw2LmZsb3dpNl9vaWYgPSBvaWY7CglmbDYuZGFkZHIgPSAq ZGFkZHI7CiAgICAgYjczOgk0OCA4YiAwNSAwMCAwMCAwMCAwMCAJbW92ICAgIDB4MCglcmlwKSwl cmF4ICAgICAgICAjIGI3YSA8dnhsYW42X2dldF9yb3V0ZSsweDEwYT4KICAgICBiN2E6CWZmIDUw IDEwICAgICAgICAgICAgIAljYWxscSAgKjB4MTAoJXJheCkKICAgICBiN2Q6CTg1IGMwICAgICAg ICAgICAgICAgIAl0ZXN0ICAgJWVheCwlZWF4CglmbDYuc2FkZHIgPSAqc2FkZHI7CiAgICAgYjdm Ogk3OCAzYyAgICAgICAgICAgICAgICAJanMgICAgIGJiZCA8dnhsYW42X2dldF9yb3V0ZSsweDE0 ZD4KICAgICBiODE6CTQ4IDhiIDQ0IDI0IDQ4ICAgICAgIAltb3YgICAgMHg0OCglcnNwKSwlcmF4 CglmbDYuZmxvd2xhYmVsID0gaXA2X21ha2VfZmxvd2luZm8oUlRfVE9TKHRvcyksIGxhYmVsKTsK CWZsNi5mbG93aTZfbWFyayA9IHNrYi0+bWFyazsKCWZsNi5mbG93aTZfcHJvdG8gPSBJUFBST1RP X1VEUDsKCgllcnIgPSBpcHY2X3N0dWItPmlwdjZfZHN0X2xvb2t1cCh2eGxhbi0+bmV0LAogICAg IGI4NjoJNDggOGIgNTQgMjQgNTAgICAgICAgCW1vdiAgICAweDUwKCVyc3ApLCVyZHgKCX0KCglt ZW1zZXQoJmZsNiwgMCwgc2l6ZW9mKGZsNikpOwoJZmw2LmZsb3dpNl9vaWYgPSBvaWY7CglmbDYu ZGFkZHIgPSAqZGFkZHI7CglmbDYuc2FkZHIgPSAqc2FkZHI7CiAgICAgYjhiOgk0NSA4NCBmZiAg ICAgICAgICAgICAJdGVzdCAgICVyMTViLCVyMTViCglmbDYuZmxvd2xhYmVsID0gaXA2X21ha2Vf Zmxvd2luZm8oUlRfVE9TKHRvcyksIGxhYmVsKTsKCWZsNi5mbG93aTZfbWFyayA9IHNrYi0+bWFy azsKCWZsNi5mbG93aTZfcHJvdG8gPSBJUFBST1RPX1VEUDsKCgllcnIgPSBpcHY2X3N0dWItPmlw djZfZHN0X2xvb2t1cCh2eGxhbi0+bmV0LAoJCQkJCSB2eGxhbi0+dm42X3NvY2stPnNvY2stPnNr LAogICAgIGI4ZToJNDkgODkgMDQgMjQgICAgICAgICAgCW1vdiAgICAlcmF4LCglcjEyKQoJfQoK CW1lbXNldCgmZmw2LCAwLCBzaXplb2YoZmw2KSk7CglmbDYuZmxvd2k2X29pZiA9IG9pZjsKCWZs Ni5kYWRkciA9ICpkYWRkcjsKCWZsNi5zYWRkciA9ICpzYWRkcjsKICAgICBiOTI6CTQ5IDg5IDU0 IDI0IDA4ICAgICAgIAltb3YgICAgJXJkeCwweDgoJXIxMikKCWZsNi5mbG93bGFiZWwgPSBpcDZf bWFrZV9mbG93aW5mbyhSVF9UT1ModG9zKSwgbGFiZWwpOwoJZmw2LmZsb3dpNl9tYXJrID0gc2ti LT5tYXJrOwoJZmw2LmZsb3dpNl9wcm90byA9IElQUFJPVE9fVURQOwoKCWVyciA9IGlwdjZfc3R1 Yi0+aXB2Nl9kc3RfbG9va3VwKHZ4bGFuLT5uZXQsCiAgICAgYjk3Ogk3NSAyOCAgICAgICAgICAg ICAgICAJam5lICAgIGJjMSA8dnhsYW42X2dldF9yb3V0ZSsweDE1MT4KICAgICBiOTk6CTQ4IDhi IDQ0IDI0IDEwICAgICAgIAltb3YgICAgMHgxMCglcnNwKSwlcmF4CiAgICAgYjllOgk0OCA4YiA0 YyAyNCA2MCAgICAgICAJbW92ICAgIDB4NjAoJXJzcCksJXJjeAogICAgIGJhMzoJNjUgNDggMzMg MGMgMjUgMjggMDAgCXhvciAgICAlZ3M6MHgyOCwlcmN4CiAgICAgYmFhOgkwMCAwMCAKICAgICBi YWM6CTc1IDI1ICAgICAgICAgICAgICAgIAlqbmUgICAgYmQzIDx2eGxhbjZfZ2V0X3JvdXRlKzB4 MTYzPgoJCQkJCSB2eGxhbi0+dm42X3NvY2stPnNvY2stPnNrLAoJCQkJCSAmbmRzdCwgJmZsNik7 CglpZiAoZXJyIDwgMCkKICAgICBiYWU6CTQ4IDgzIGM0IDY4ICAgICAgICAgIAlhZGQgICAgJDB4 NjgsJXJzcAoJCXJldHVybiBFUlJfUFRSKGVycik7CgoJKnNhZGRyID0gZmw2LnNhZGRyOwogICAg IGJiMjoJNWIgICAgICAgICAgICAgICAgICAgCXBvcCAgICAlcmJ4CiAgICAgYmIzOgk0MSA1YyAg ICAgICAgICAgICAgICAJcG9wICAgICVyMTIKICAgICBiYjU6CTQxIDVkICAgICAgICAgICAgICAg IAlwb3AgICAgJXIxMwogICAgIGJiNzoJNDEgNWUgICAgICAgICAgICAgICAgCXBvcCAgICAlcjE0 CiAgICAgYmI5Ogk0MSA1ZiAgICAgICAgICAgICAgICAJcG9wICAgICVyMTUKCWlmICh1c2VfY2Fj aGUpCiAgICAgYmJiOgk1ZCAgICAgICAgICAgICAgICAgICAJcG9wICAgICVyYnAKICAgICBiYmM6 CWMzICAgICAgICAgICAgICAgICAgIAlyZXRxICAgCiAgICAgYmJkOgk0OCA5OCAgICAgICAgICAg ICAgICAJY2x0cSAgIAoJCQkJCSB2eGxhbi0+dm42X3NvY2stPnNvY2stPnNrLAoJCQkJCSAmbmRz dCwgJmZsNik7CglpZiAoZXJyIDwgMCkKCQlyZXR1cm4gRVJSX1BUUihlcnIpOwoKCSpzYWRkciA9 IGZsNi5zYWRkcjsKICAgICBiYmY6CWViIGRkICAgICAgICAgICAgICAgIAlqbXAgICAgYjllIDx2 eGxhbjZfZ2V0X3JvdXRlKzB4MTJlPgogICAgIGJjMToJNDggOGIgNzQgMjQgMTAgICAgICAgCW1v diAgICAweDEwKCVyc3ApLCVyc2kKICAgICBiYzY6CTRjIDg5IGUyICAgICAgICAgICAgIAltb3Yg ICAgJXIxMiwlcmR4CglpZiAodXNlX2NhY2hlKQoJCWRzdF9jYWNoZV9zZXRfaXA2KGRzdF9jYWNo ZSwgbmRzdCwgc2FkZHIpOwoJcmV0dXJuIG5kc3Q7CiAgICAgYmM5Ogk0YyA4OSBlZiAgICAgICAg ICAgICAJbW92ICAgICVyMTMsJXJkaQogICAgIGJjYzoJZTggMDAgMDAgMDAgMDAgICAgICAgCWNh bGxxICBiZDEgPHZ4bGFuNl9nZXRfcm91dGUrMHgxNjE+Cn0KICAgICBiZDE6CWViIGM2ICAgICAg ICAgICAgICAgIAlqbXAgICAgYjk5IDx2eGxhbjZfZ2V0X3JvdXRlKzB4MTI5PgogICAgIGJkMzoJ ZTggMDAgMDAgMDAgMDAgICAgICAgCWNhbGxxICBiZDggPHZ4bGFuNl9nZXRfcm91dGUrMHgxNjg+ CiAgICAgYmQ4OgkwZiAxZiA4NCAwMCAwMCAwMCAwMCAJbm9wbCAgIDB4MCglcmF4LCVyYXgsMSkK ICAgICBiZGY6CTAwIAoKMDAwMDAwMDAwMDAwMGJlMCA8X192eGxhbl9zb2NrX3JlbGVhc2VfcHJl cD46CiAgICAgYmUwOgllOCAwMCAwMCAwMCAwMCAgICAgICAJY2FsbHEgIGJlNSA8X192eGxhbl9z b2NrX3JlbGVhc2VfcHJlcCsweDU+CiAgICAgYmU1Ogk0OCA4NSBmZiAgICAgICAgICAgICAJdGVz dCAgICVyZGksJXJkaQogICAgIGJlODoJMGYgODQgOTIgMDAgMDAgMDAgICAgCWplICAgICBjODAg PF9fdnhsYW5fc29ja19yZWxlYXNlX3ByZXArMHhhMD4KCiNkZWZpbmUgSVNfRVJSX1ZBTFVFKHgp IHVubGlrZWx5KCh1bnNpZ25lZCBsb25nKSh2b2lkICopKHgpID49ICh1bnNpZ25lZCBsb25nKS1N QVhfRVJSTk8pCgpzdGF0aWMgaW5saW5lIHZvaWQgKiBfX211c3RfY2hlY2sgRVJSX1BUUihsb25n IGVycm9yKQp7CglyZXR1cm4gKHZvaWQgKikgZXJyb3I7CiAgICAgYmVlOglmMCBmZiA4ZiAxOCAy MCAwMCAwMCAJbG9jayBkZWNsIDB4MjAxOCglcmRpKQoJaWYgKGVyciA8IDApCgkJcmV0dXJuIEVS Ul9QVFIoZXJyKTsKCgkqc2FkZHIgPSBmbDYuc2FkZHI7CglpZiAodXNlX2NhY2hlKQoJCWRzdF9j YWNoZV9zZXRfaXA2KGRzdF9jYWNoZSwgbmRzdCwgc2FkZHIpOwogICAgIGJmNToJNzQgMDMgICAg ICAgICAgICAgICAgCWplICAgICBiZmEgPF9fdnhsYW5fc29ja19yZWxlYXNlX3ByZXArMHgxYT4K ICAgICBiZjc6CTMxIGMwICAgICAgICAgICAgICAgIAl4b3IgICAgJWVheCwlZWF4CiAgICAgYmY5 OgljMyAgICAgICAgICAgICAgICAgICAJcmV0cSAgIAogICAgIGJmYToJNTUgICAgICAgICAgICAg ICAgICAgCXB1c2ggICAlcmJwCiAgICAgYmZiOgk0OCA4OSBlNSAgICAgICAgICAgICAJbW92ICAg ICVyc3AsJXJicAogICAgIGJmZToJNDEgNTQgICAgICAgICAgICAgICAgCXB1c2ggICAlcjEyCiAg ICAgYzAwOgk1MyAgICAgICAgICAgICAgICAgICAJcHVzaCAgICVyYngKICAgICBjMDE6CTQ4IDhi IDQ3IDEwICAgICAgICAgIAltb3YgICAgMHgxMCglcmRpKSwlcmF4CglyZXR1cm4gbmRzdDsKfQog ICAgIGMwNToJNDggODkgZmIgICAgICAgICAgICAgCW1vdiAgICAlcmRpLCVyYngKICAgICBjMDg6 CTQ4IDhiIDQwIDIwICAgICAgICAgIAltb3YgICAgMHgyMCglcmF4KSwlcmF4CiAgICAgYzBjOgk0 OCA4YiA0MCAzMCAgICAgICAgICAJbW92ICAgIDB4MzAoJXJheCksJXJheAoKCXJldHVybiBmYWxz ZTsKfQoKc3RhdGljIGJvb2wgX192eGxhbl9zb2NrX3JlbGVhc2VfcHJlcChzdHJ1Y3QgdnhsYW5f c29jayAqdnMpCnsKICAgICBjMTA6CTQ4IDhiIDkwIDg4IDE0IDAwIDAwIAltb3YgICAgMHgxNDg4 KCVyYXgpLCVyZHgKCXN0cnVjdCB2eGxhbl9uZXQgKnZuOwoKCWlmICghdnMpCiAgICAgYzE3Ogk4 YiAwNSAwMCAwMCAwMCAwMCAgICAJbW92ICAgIDB4MCglcmlwKSwlZWF4ICAgICAgICAjIGMxZCA8 X192eGxhbl9zb2NrX3JlbGVhc2VfcHJlcCsweDNkPgogICAgIGMxZDoJODMgZTggMDEgICAgICAg ICAgICAgCXN1YiAgICAkMHgxLCVlYXgKICAgICBjMjA6CTQ4IDk4ICAgICAgICAgICAgICAgIAlj bHRxICAgCiAgICAgYzIyOgk0YyA4YiA2NCBjMiAxOCAgICAgICAJbW92ICAgIDB4MTgoJXJkeCwl cmF4LDgpLCVyMTIKCQlyZXR1cm4gZmFsc2U7CglpZiAoIWF0b21pY19kZWNfYW5kX3Rlc3QoJnZz LT5yZWZjbnQpKQoJCXJldHVybiBmYWxzZTsKICAgICBjMjc6CTQ5IDgxIGM0IDEwIDA4IDAwIDAw IAlhZGQgICAgJDB4ODEwLCVyMTIKCglyZXR1cm4gZmFsc2U7Cn0KCnN0YXRpYyBib29sIF9fdnhs YW5fc29ja19yZWxlYXNlX3ByZXAoc3RydWN0IHZ4bGFuX3NvY2sgKnZzKQp7CiAgICAgYzJlOgk0 YyA4OSBlNyAgICAgICAgICAgICAJbW92ICAgICVyMTIsJXJkaQoJaWYgKCF2cykKCQlyZXR1cm4g ZmFsc2U7CglpZiAoIWF0b21pY19kZWNfYW5kX3Rlc3QoJnZzLT5yZWZjbnQpKQoJCXJldHVybiBm YWxzZTsKCgl2biA9IG5ldF9nZW5lcmljKHNvY2tfbmV0KHZzLT5zb2NrLT5zayksIHZ4bGFuX25l dF9pZCk7CiAgICAgYzMxOgllOCAwMCAwMCAwMCAwMCAgICAgICAJY2FsbHEgIGMzNiA8X192eGxh bl9zb2NrX3JlbGVhc2VfcHJlcCsweDU2PgogICAgIGMzNjoJNDggOGIgMDMgICAgICAgICAgICAg CW1vdiAgICAoJXJieCksJXJheAogICAgIGMzOToJNDggOGIgNTMgMDggICAgICAgICAgCW1vdiAg ICAweDgoJXJieCksJXJkeAogICAgIGMzZDoJNDggODUgYzAgICAgICAgICAgICAgCXRlc3QgICAl cmF4LCVyYXgKfSkKCnN0YXRpYyBfX2Fsd2F5c19pbmxpbmUKdm9pZCBfX3JlYWRfb25jZV9zaXpl KGNvbnN0IHZvbGF0aWxlIHZvaWQgKnAsIHZvaWQgKnJlcywgaW50IHNpemUpCnsKCV9fUkVBRF9P TkNFX1NJWkU7CiAgICAgYzQwOgk0OCA4OSAwMiAgICAgICAgICAgICAJbW92ICAgICVyYXgsKCVy ZHgpCiAgICAgYzQzOgk3NCAwNCAgICAgICAgICAgICAgICAJamUgICAgIGM0OSA8X192eGxhbl9z b2NrX3JlbGVhc2VfcHJlcCsweDY5PgogICAgIGM0NToJNDggODkgNTAgMDggICAgICAgICAgCW1v diAgICAlcmR4LDB4OCglcmF4KQogICAgIGM0OToJOGIgYjMgMWMgMjAgMDAgMDAgICAgCW1vdiAg ICAweDIwMWMoJXJieCksJWVzaQogICAgIGM0ZjoJNDggOGIgN2IgMTAgICAgICAgICAgCW1vdiAg ICAweDEwKCVyYngpLCVyZGkKICAgICBjNTM6CTQ4IGI4IDAwIDAyIDAwIDAwIDAwIAltb3ZhYnMg JDB4ZGVhZDAwMDAwMDAwMDIwMCwlcmF4CiAgICAgYzVhOgkwMCBhZCBkZSAKICAgICBjNWQ6CTQ4 IDg5IDQzIDA4ICAgICAgICAgIAltb3YgICAgJXJheCwweDgoJXJieCkKICAgICBjNjE6CWMxIGVl IDBkICAgICAgICAgICAgIAlzaHIgICAgJDB4ZCwlZXNpCiAgICAgYzY0Ogk4MyBlNiAwMiAgICAg ICAgICAgICAJYW5kICAgICQweDIsJWVzaQoJcmV0dXJuICFSRUFEX09OQ0UoaC0+Zmlyc3QpOwp9 CgpzdGF0aWMgaW5saW5lIHZvaWQgX19obGlzdF9kZWwoc3RydWN0IGhsaXN0X25vZGUgKm4pCnsK CXN0cnVjdCBobGlzdF9ub2RlICpuZXh0ID0gbi0+bmV4dDsKICAgICBjNjc6CWU4IDAwIDAwIDAw IDAwICAgICAgIAljYWxscSAgYzZjIDxfX3Z4bGFuX3NvY2tfcmVsZWFzZV9wcmVwKzB4OGM+Cglz dHJ1Y3QgaGxpc3Rfbm9kZSAqKnBwcmV2ID0gbi0+cHByZXY7CiAgICAgYzZjOgk0YyA4OSBlNyAg ICAgICAgICAgICAJbW92ICAgICVyMTIsJXJkaQoKCVdSSVRFX09OQ0UoKnBwcmV2LCBuZXh0KTsK CWlmIChuZXh0KQogICAgIGM2ZjoJZmYgMTQgMjUgMDAgMDAgMDAgMDAgCWNhbGxxICAqMHgwCgkJ bmV4dC0+cHByZXYgPSBwcHJldjsKICAgICBjNzY6CWI4IDAxIDAwIDAwIDAwICAgICAgIAltb3Yg ICAgJDB4MSwlZWF4CglzcGluX2xvY2soJnZuLT5zb2NrX2xvY2spOwoJaGxpc3RfZGVsX3JjdSgm dnMtPmhsaXN0KTsKCXVkcF90dW5uZWxfbm90aWZ5X2RlbF9yeF9wb3J0KHZzLT5zb2NrLAogICAg IGM3YjoJNWIgICAgICAgICAgICAgICAgICAgCXBvcCAgICAlcmJ4CiAgICAgYzdjOgk0MSA1YyAg ICAgICAgICAgICAgICAJcG9wICAgICVyMTIKICAgICBjN2U6CTVkICAgICAgICAgICAgICAgICAg IAlwb3AgICAgJXJicAogICAgIGM3ZjoJYzMgICAgICAgICAgICAgICAgICAgCXJldHEgICAKICAg ICBjODA6CTMxIGMwICAgICAgICAgICAgICAgIAl4b3IgICAgJWVheCwlZWF4CiAgICAgYzgyOglj MyAgICAgICAgICAgICAgICAgICAJcmV0cSAgIAogICAgIGM4MzoJMGYgMWYgMDAgICAgICAgICAg ICAgCW5vcGwgICAoJXJheCkKICAgICBjODY6CTY2IDJlIDBmIDFmIDg0IDAwIDAwIAlub3B3ICAg JWNzOjB4MCglcmF4LCVyYXgsMSkKICAgICBjOGQ6CTAwIDAwIDAwIAoKMDAwMDAwMDAwMDAwMGM5 MCA8dnhsYW5fc29ja19yZWxlYXNlLmlzcmEuNDQ+OgogICAgIGM5MDoJZTggMDAgMDAgMDAgMDAg ICAgICAgCWNhbGxxICBjOTUgPHZ4bGFuX3NvY2tfcmVsZWFzZS5pc3JhLjQ0KzB4NT4KICAgICBj OTU6CTU1ICAgICAgICAgICAgICAgICAgIAlwdXNoICAgJXJicAogICAgIGM5NjoJNDggODkgZTUg ICAgICAgICAgICAgCW1vdiAgICAlcnNwLCVyYnAKICAgICBjOTk6CTQxIDU2ICAgICAgICAgICAg ICAgIAlwdXNoICAgJXIxNAogICAgIGM5YjoJNDEgNTUgICAgICAgICAgICAgICAgCXB1c2ggICAl cjEzCiAgICAgYzlkOgk0MSA1NCAgICAgICAgICAgICAgICAJcHVzaCAgICVyMTIKICAgICBjOWY6 CTQ5IDg5IGZjICAgICAgICAgICAgIAltb3YgICAgJXJkaSwlcjEyCiAgICAgY2EyOgk1MyAgICAg ICAgICAgICAgICAgICAJcHVzaCAgICVyYngKICAgICBjYTM6CTQ4IDhiIDNmICAgICAgICAgICAg IAltb3YgICAgKCVyZGkpLCVyZGkKCnN0YXRpYyBpbmxpbmUgdm9pZCBfX3Jhd19zcGluX3VubG9j ayhyYXdfc3BpbmxvY2tfdCAqbG9jaykKewoJc3Bpbl9yZWxlYXNlKCZsb2NrLT5kZXBfbWFwLCAx LCBfUkVUX0lQXyk7Cglkb19yYXdfc3Bpbl91bmxvY2sobG9jayk7CglwcmVlbXB0X2VuYWJsZSgp OwogICAgIGNhNjoJNDggODkgZjMgICAgICAgICAgICAgCW1vdiAgICAlcnNpLCVyYngKICAgICBj YTk6CWU4IDMyIGZmIGZmIGZmICAgICAgIAljYWxscSAgYmUwIDxfX3Z4bGFuX3NvY2tfcmVsZWFz ZV9wcmVwPgoJCQkJICAgICAgVURQX1RVTk5FTF9UWVBFX1ZYTEFOX0dQRSA6CgkJCQkgICAgICBV RFBfVFVOTkVMX1RZUEVfVlhMQU4pOwoJc3Bpbl91bmxvY2soJnZuLT5zb2NrX2xvY2spOwoKCXJl dHVybiB0cnVlOwp9CiAgICAgY2FlOgk0OCA4YiAzYiAgICAgICAgICAgICAJbW92ICAgICglcmJ4 KSwlcmRpCnN0YXRpYyBib29sIF9fdnhsYW5fc29ja19yZWxlYXNlX3ByZXAoc3RydWN0IHZ4bGFu X3NvY2sgKnZzKQp7CglzdHJ1Y3QgdnhsYW5fbmV0ICp2bjsKCglpZiAoIXZzKQoJCXJldHVybiBm YWxzZTsKICAgICBjYjE6CTQxIDg5IGM2ICAgICAgICAgICAgIAltb3YgICAgJWVheCwlcjE0ZAog ICAgIGNiNDoJZTggMjcgZmYgZmYgZmYgICAgICAgCWNhbGxxICBiZTAgPF9fdnhsYW5fc29ja19y ZWxlYXNlX3ByZXA+CiAgICAgY2I5Ogk0MSA4OSBjNSAgICAgICAgICAgICAJbW92ICAgICVlYXgs JXIxM2QKICAgICBjYmM6CWU4IDAwIDAwIDAwIDAwICAgICAgIAljYWxscSAgY2MxIDx2eGxhbl9z b2NrX3JlbGVhc2UuaXNyYS40NCsweDMxPgoJc3Bpbl91bmxvY2soJnZuLT5zb2NrX2xvY2spOwoK CXJldHVybiB0cnVlOwp9CgpzdGF0aWMgdm9pZCB2eGxhbl9zb2NrX3JlbGVhc2Uoc3RydWN0IHZ4 bGFuX2RldiAqdnhsYW4pCiAgICAgY2MxOgk0NSA4NCBmNiAgICAgICAgICAgICAJdGVzdCAgICVy MTRiLCVyMTRiCiAgICAgY2M0Ogk3NSAyMiAgICAgICAgICAgICAgICAJam5lICAgIGNlOCA8dnhs YW5fc29ja19yZWxlYXNlLmlzcmEuNDQrMHg1OD4KICAgICBjYzY6CTQ1IDg0IGVkICAgICAgICAg ICAgIAl0ZXN0ICAgJXIxM2IsJXIxM2IKICAgICBjYzk6CTc0IDE0ICAgICAgICAgICAgICAgIAlq ZSAgICAgY2RmIDx2eGxhbl9zb2NrX3JlbGVhc2UuaXNyYS40NCsweDRmPgogICAgIGNjYjoJNDgg OGIgMDMgICAgICAgICAgICAgCW1vdiAgICAoJXJieCksJXJheAogICAgIGNjZToJNDggOGIgNzgg MTAgICAgICAgICAgCW1vdiAgICAweDEwKCVyYXgpLCVyZGkKICAgICBjZDI6CWU4IDAwIDAwIDAw IDAwICAgICAgIAljYWxscSAgY2Q3IDx2eGxhbl9zb2NrX3JlbGVhc2UuaXNyYS40NCsweDQ3Pgog ICAgIGNkNzoJNDggOGIgM2IgICAgICAgICAgICAgCW1vdiAgICAoJXJieCksJXJkaQp7Cglib29s IGlwdjQgPSBfX3Z4bGFuX3NvY2tfcmVsZWFzZV9wcmVwKHZ4bGFuLT52bjRfc29jayk7CiAgICAg Y2RhOgllOCAwMCAwMCAwMCAwMCAgICAgICAJY2FsbHEgIGNkZiA8dnhsYW5fc29ja19yZWxlYXNl LmlzcmEuNDQrMHg0Zj4KI2lmIElTX0VOQUJMRUQoQ09ORklHX0lQVjYpCglib29sIGlwdjYgPSBf X3Z4bGFuX3NvY2tfcmVsZWFzZV9wcmVwKHZ4bGFuLT52bjZfc29jayk7CiAgICAgY2RmOgk1YiAg ICAgICAgICAgICAgICAgICAJcG9wICAgICVyYngKICAgICBjZTA6CTQxIDVjICAgICAgICAgICAg ICAgIAlwb3AgICAgJXIxMgoJcmV0dXJuIHRydWU7Cn0KCnN0YXRpYyB2b2lkIHZ4bGFuX3NvY2tf cmVsZWFzZShzdHJ1Y3QgdnhsYW5fZGV2ICp2eGxhbikKewoJYm9vbCBpcHY0ID0gX192eGxhbl9z b2NrX3JlbGVhc2VfcHJlcCh2eGxhbi0+dm40X3NvY2spOwogICAgIGNlMjoJNDEgNWQgICAgICAg ICAgICAgICAgCXBvcCAgICAlcjEzCiNpZiBJU19FTkFCTEVEKENPTkZJR19JUFY2KQoJYm9vbCBp cHY2ID0gX192eGxhbl9zb2NrX3JlbGVhc2VfcHJlcCh2eGxhbi0+dm42X3NvY2spOwogICAgIGNl NDoJNDEgNWUgICAgICAgICAgICAgICAgCXBvcCAgICAlcjE0CiAgICAgY2U2Ogk1ZCAgICAgICAg ICAgICAgICAgICAJcG9wICAgICVyYnAKICAgICBjZTc6CWMzICAgICAgICAgICAgICAgICAgIAly ZXRxICAgCiAgICAgY2U4Ogk0OSA4YiAwNCAyNCAgICAgICAgICAJbW92ICAgICglcjEyKSwlcmF4 CiNlbmRpZgoKCXN5bmNocm9uaXplX25ldCgpOwogICAgIGNlYzoJNDggOGIgNzggMTAgICAgICAg ICAgCW1vdiAgICAweDEwKCVyYXgpLCVyZGkKICAgICBjZjA6CWU4IDAwIDAwIDAwIDAwICAgICAg IAljYWxscSAgY2Y1IDx2eGxhbl9zb2NrX3JlbGVhc2UuaXNyYS40NCsweDY1PgoKCWlmIChpcHY0 KSB7CiAgICAgY2Y1Ogk0OSA4YiAzYyAyNCAgICAgICAgICAJbW92ICAgICglcjEyKSwlcmRpCgkJ dWRwX3R1bm5lbF9zb2NrX3JlbGVhc2UodnhsYW4tPnZuNF9zb2NrLT5zb2NrKTsKCQlrZnJlZSh2 eGxhbi0+dm40X3NvY2spOwoJfQoKI2lmIElTX0VOQUJMRUQoQ09ORklHX0lQVjYpCglpZiAoaXB2 NikgewogICAgIGNmOToJZTggMDAgMDAgMDAgMDAgICAgICAgCWNhbGxxICBjZmUgPHZ4bGFuX3Nv Y2tfcmVsZWFzZS5pc3JhLjQ0KzB4NmU+CgkJdWRwX3R1bm5lbF9zb2NrX3JlbGVhc2UodnhsYW4t PnZuNl9zb2NrLT5zb2NrKTsKICAgICBjZmU6CWViIGM2ICAgICAgICAgICAgICAgIAlqbXAgICAg Y2M2IDx2eGxhbl9zb2NrX3JlbGVhc2UuaXNyYS40NCsweDM2PgoKMDAwMDAwMDAwMDAwMGQwMCA8 dnhsYW5fbmV0ZGV2aWNlX2V2ZW50PjoKICAgICBkMDA6CWU4IDAwIDAwIDAwIDAwICAgICAgIAlj YWxscSAgZDA1IDx2eGxhbl9uZXRkZXZpY2VfZXZlbnQrMHg1PgogICAgIGQwNToJNTUgICAgICAg ICAgICAgICAgICAgCXB1c2ggICAlcmJwCiAgICAgZDA2Ogk0OCA4OSBlNSAgICAgICAgICAgICAJ bW92ICAgICVyc3AsJXJicAoJCWtmcmVlKHZ4bGFuLT52bjZfc29jayk7CiAgICAgZDA5Ogk0MSA1 NiAgICAgICAgICAgICAgICAJcHVzaCAgICVyMTQKICAgICBkMGI6CTQxIDU1ICAgICAgICAgICAg ICAgIAlwdXNoICAgJXIxMwogICAgIGQwZDoJNDEgNTQgICAgICAgICAgICAgICAgCXB1c2ggICAl cjEyCgl9CiNlbmRpZgp9CiAgICAgZDBmOgk1MyAgICAgICAgICAgICAgICAgICAJcHVzaCAgICVy YngKICAgICBkMTA6CTQ4IDgzIGVjIDE4ICAgICAgICAgIAlzdWIgICAgJDB4MTgsJXJzcAogICAg IGQxNDoJNGMgOGIgMjIgICAgICAgICAgICAgCW1vdiAgICAoJXJkeCksJXIxMgogICAgIGQxNzoJ NjUgNDggOGIgMDQgMjUgMjggMDAgCW1vdiAgICAlZ3M6MHgyOCwlcmF4CiAgICAgZDFlOgkwMCAw MCAKI2VuZGlmCgoJc3luY2hyb25pemVfbmV0KCk7CgoJaWYgKGlwdjQpIHsKCQl1ZHBfdHVubmVs X3NvY2tfcmVsZWFzZSh2eGxhbi0+dm40X3NvY2stPnNvY2spOwogICAgIGQyMDoJNDggODkgNDUg ZDggICAgICAgICAgCW1vdiAgICAlcmF4LC0weDI4KCVyYnApCiAgICAgZDI0OgkzMSBjMCAgICAg ICAgICAgICAgICAJeG9yICAgICVlYXgsJWVheAoJCWtmcmVlKHZ4bGFuLT52bjRfc29jayk7CiAg ICAgZDI2Ogk4YiAwNSAwMCAwMCAwMCAwMCAgICAJbW92ICAgIDB4MCglcmlwKSwlZWF4ICAgICAg ICAjIGQyYyA8dnhsYW5fbmV0ZGV2aWNlX2V2ZW50KzB4MmM+CiAgICAgZDJjOgk0OSA4YiA5NCAy NCA4MCAwNCAwMCAJbW92ICAgIDB4NDgwKCVyMTIpLCVyZHgKICAgICBkMzM6CTAwIAoJdW5yZWdp c3Rlcl9uZXRkZXZpY2VfbWFueSgmbGlzdF9raWxsKTsKfQoKc3RhdGljIGludCB2eGxhbl9uZXRk ZXZpY2VfZXZlbnQoc3RydWN0IG5vdGlmaWVyX2Jsb2NrICp1bnVzZWQsCgkJCQkgdW5zaWduZWQg bG9uZyBldmVudCwgdm9pZCAqcHRyKQp7CiAgICAgZDM0Ogk4MyBlOCAwMSAgICAgICAgICAgICAJ c3ViICAgICQweDEsJWVheAogICAgIGQzNzoJNDggODMgZmUgMDYgICAgICAgICAgCWNtcCAgICAk MHg2LCVyc2kKICAgICBkM2I6CTQ4IDhiIDhhIDg4IDE0IDAwIDAwIAltb3YgICAgMHgxNDg4KCVy ZHgpLCVyY3gKICAgICBkNDI6CTBmIDg0IDhhIDAwIDAwIDAwICAgIAlqZSAgICAgZGQyIDx2eGxh bl9uZXRkZXZpY2VfZXZlbnQrMHhkMj4KICAgICBkNDg6CTQ4IDgzIGZlIDFjICAgICAgICAgIAlj bXAgICAgJDB4MWMsJXJzaQogICAgIGQ0YzoJNzQgMjIgICAgICAgICAgICAgICAgCWplICAgICBk NzAgPHZ4bGFuX25ldGRldmljZV9ldmVudCsweDcwPgogICAgIGQ0ZToJMzEgYzAgICAgICAgICAg ICAgICAgCXhvciAgICAlZWF4LCVlYXgKICAgICBkNTA6CTQ4IDhiIDRkIGQ4ICAgICAgICAgIAlt b3YgICAgLTB4MjgoJXJicCksJXJjeAogICAgIGQ1NDoJNjUgNDggMzMgMGMgMjUgMjggMDAgCXhv ciAgICAlZ3M6MHgyOCwlcmN4CiAgICAgZDViOgkwMCAwMCAKICAgICBkNWQ6CTBmIDg1IGQ3IDAw IDAwIDAwICAgIAlqbmUgICAgZTNhIDx2eGxhbl9uZXRkZXZpY2VfZXZlbnQrMHgxM2E+CiAgICAg ZDYzOgk0OCA4MyBjNCAxOCAgICAgICAgICAJYWRkICAgICQweDE4LCVyc3AKCXN0cnVjdCBuZXRf ZGV2aWNlICpkZXYgPSBuZXRkZXZfbm90aWZpZXJfaW5mb190b19kZXYocHRyKTsKCXN0cnVjdCB2 eGxhbl9uZXQgKnZuID0gbmV0X2dlbmVyaWMoZGV2X25ldChkZXYpLCB2eGxhbl9uZXRfaWQpOwoK CWlmIChldmVudCA9PSBORVRERVZfVU5SRUdJU1RFUikKICAgICBkNjc6CTViICAgICAgICAgICAg ICAgICAgIAlwb3AgICAgJXJieAogICAgIGQ2ODoJNDEgNWMgICAgICAgICAgICAgICAgCXBvcCAg ICAlcjEyCiAgICAgZDZhOgk0MSA1ZCAgICAgICAgICAgICAgICAJcG9wICAgICVyMTMKICAgICBk NmM6CTQxIDVlICAgICAgICAgICAgICAgIAlwb3AgICAgJXIxNAogICAgIGQ2ZToJNWQgICAgICAg ICAgICAgICAgICAgCXBvcCAgICAlcmJwCiAgICAgZDZmOgljMyAgICAgICAgICAgICAgICAgICAJ cmV0cSAgIAogICAgIGQ3MDoJNDggOGIgOTIgODggMTQgMDAgMDAgCW1vdiAgICAweDE0ODgoJXJk eCksJXJkeAogICAgIGQ3NzoJNDggOTggICAgICAgICAgICAgICAgCWNsdHEgICAKCQl2eGxhbl9o YW5kbGVfbG93ZXJkZXZfdW5yZWdpc3Rlcih2biwgZGV2KTsKCWVsc2UgaWYgKGV2ZW50ID09IE5F VERFVl9VRFBfVFVOTkVMX1BVU0hfSU5GTykKICAgICBkNzk6CTRjIDhiIDZjIGMyIDE4ICAgICAg IAltb3YgICAgMHgxOCglcmR4LCVyYXgsOCksJXIxMwoJCXZ4bGFuX3B1c2hfcnhfcG9ydHMoZGV2 KTsKCglyZXR1cm4gTk9USUZZX0RPTkU7Cn0KICAgICBkN2U6CTRkIDhkIGI1IDEwIDA4IDAwIDAw IAlsZWEgICAgMHg4MTAoJXIxMyksJXIxNAogICAgIGQ4NToJNDkgODMgYzUgMTAgICAgICAgICAg CWFkZCAgICAkMHgxMCwlcjEzCiAgICAgZDg5Ogk0YyA4OSBmNyAgICAgICAgICAgICAJbW92ICAg ICVyMTQsJXJkaQogICAgIGQ4YzoJZTggMDAgMDAgMDAgMDAgICAgICAgCWNhbGxxICBkOTEgPHZ4 bGFuX25ldGRldmljZV9ldmVudCsweDkxPgogICAgIGQ5MToJNDkgOGIgNWQgMDAgICAgICAgICAg CW1vdiAgICAweDAoJXIxMyksJXJieAogICAgIGQ5NToJNDggODUgZGIgICAgICAgICAgICAgCXRl c3QgICAlcmJ4LCVyYngKICAgICBkOTg6CTc0IDIwICAgICAgICAgICAgICAgIAlqZSAgICAgZGJh IDx2eGxhbl9uZXRkZXZpY2VfZXZlbnQrMHhiYT4KICAgICBkOWE6CThiIDkzIDFjIDIwIDAwIDAw ICAgIAltb3YgICAgMHgyMDFjKCVyYngpLCVlZHgKICAgICBkYTA6CTQ4IDhiIDczIDEwICAgICAg ICAgIAltb3YgICAgMHgxMCglcmJ4KSwlcnNpCiAgICAgZGE0Ogk0YyA4OSBlNyAgICAgICAgICAg ICAJbW92ICAgICVyMTIsJXJkaQogICAgIGRhNzoJYzEgZWEgMGQgICAgICAgICAgICAgCXNociAg ICAkMHhkLCVlZHgKICAgICBkYWE6CTgzIGUyIDAyICAgICAgICAgICAgIAlhbmQgICAgJDB4Miwl ZWR4CiAgICAgZGFkOgllOCAwMCAwMCAwMCAwMCAgICAgICAJY2FsbHEgIGRiMiA8dnhsYW5fbmV0 ZGV2aWNlX2V2ZW50KzB4YjI+CiAgICAgZGIyOgk0OCA4YiAxYiAgICAgICAgICAgICAJbW92ICAg ICglcmJ4KSwlcmJ4CiAgICAgZGI1Ogk0OCA4NSBkYiAgICAgICAgICAgICAJdGVzdCAgICVyYngs JXJieAogICAgIGRiODoJNzUgZTAgICAgICAgICAgICAgICAgCWpuZSAgICBkOWEgPHZ4bGFuX25l dGRldmljZV9ldmVudCsweDlhPgogICAgIGRiYToJNDkgODMgYzUgMDggICAgICAgICAgCWFkZCAg ICAkMHg4LCVyMTMKICAgICBkYmU6CTRkIDM5IGVlICAgICAgICAgICAgIAljbXAgICAgJXIxMywl cjE0CiAgICAgZGMxOgk3NSBjZSAgICAgICAgICAgICAgICAJam5lICAgIGQ5MSA8dnhsYW5fbmV0 ZGV2aWNlX2V2ZW50KzB4OTE+CiAgICAgZGMzOgk0YyA4OSBmNyAgICAgICAgICAgICAJbW92ICAg ICVyMTQsJXJkaQoJc3RydWN0IHZ4bGFuX25ldCAqdm4gPSBuZXRfZ2VuZXJpYyhuZXQsIHZ4bGFu X25ldF9pZCk7Cgl1bnNpZ25lZCBpbnQgaTsKCglzcGluX2xvY2soJnZuLT5zb2NrX2xvY2spOwoJ Zm9yIChpID0gMDsgaSA8IFBPUlRfSEFTSF9TSVpFOyArK2kpIHsKCQlobGlzdF9mb3JfZWFjaF9l bnRyeV9yY3UodnMsICZ2bi0+c29ja19saXN0W2ldLCBobGlzdCkKICAgICBkYzY6CWZmIDE0IDI1 IDAwIDAwIDAwIDAwIAljYWxscSAgKjB4MAoJCQl1ZHBfdHVubmVsX3B1c2hfcnhfcG9ydChkZXYs IHZzLT5zb2NrLAogICAgIGRjZDoJZTkgN2MgZmYgZmYgZmYgICAgICAgCWptcHEgICBkNGUgPHZ4 bGFuX25ldGRldmljZV9ldmVudCsweDRlPgogICAgIGRkMjoJNDggOTggICAgICAgICAgICAgICAg CWNsdHEgICAKICAgICBkZDQ6CTRjIDhkIDc1IGM4ICAgICAgICAgIAlsZWEgICAgLTB4MzgoJXJi cCksJXIxNAogICAgIGRkODoJNGMgOGIgNmMgYzEgMTggICAgICAgCW1vdiAgICAweDE4KCVyY3gs JXJheCw4KSwlcjEzCiAgICAgZGRkOgk0YyA4OSA3NSBjOCAgICAgICAgICAJbW92ICAgICVyMTQs LTB4MzgoJXJicCkKICAgICBkZTE6CTRjIDg5IDc1IGQwICAgICAgICAgIAltb3YgICAgJXIxNCwt MHgzMCglcmJwKQoJc3RydWN0IHZ4bGFuX25ldCAqdm4gPSBuZXRfZ2VuZXJpYyhuZXQsIHZ4bGFu X25ldF9pZCk7Cgl1bnNpZ25lZCBpbnQgaTsKCglzcGluX2xvY2soJnZuLT5zb2NrX2xvY2spOwoJ Zm9yIChpID0gMDsgaSA8IFBPUlRfSEFTSF9TSVpFOyArK2kpIHsKCQlobGlzdF9mb3JfZWFjaF9l bnRyeV9yY3UodnMsICZ2bi0+c29ja19saXN0W2ldLCBobGlzdCkKICAgICBkZTU6CTQ5IDhiIDQ1 IDAwICAgICAgICAgIAltb3YgICAgMHgwKCVyMTMpLCVyYXgKICAgICBkZTk6CTQ4IDhiIDA4ICAg ICAgICAgICAgIAltb3YgICAgKCVyYXgpLCVyY3gKICAgICBkZWM6CTQ5IDM5IGM1ICAgICAgICAg ICAgIAljbXAgICAgJXJheCwlcjEzCglzdHJ1Y3QgbmV0ICpuZXQgPSBkZXZfbmV0KGRldik7Cglz dHJ1Y3QgdnhsYW5fbmV0ICp2biA9IG5ldF9nZW5lcmljKG5ldCwgdnhsYW5fbmV0X2lkKTsKCXVu c2lnbmVkIGludCBpOwoKCXNwaW5fbG9jaygmdm4tPnNvY2tfbG9jayk7Cglmb3IgKGkgPSAwOyBp IDwgUE9SVF9IQVNIX1NJWkU7ICsraSkgewogICAgIGRlZjoJNDggOGQgNTAgZjAgICAgICAgICAg CWxlYSAgICAtMHgxMCglcmF4KSwlcmR4CiAgICAgZGYzOgk0OCA4ZCA1OSBmMCAgICAgICAgICAJ bGVhICAgIC0weDEwKCVyY3gpLCVyYngKICAgICBkZjc6CTc1IDE5ICAgICAgICAgICAgICAgIAlq bmUgICAgZTEyIDx2eGxhbl9uZXRkZXZpY2VfZXZlbnQrMHgxMTI+CiAgICAgZGY5OgllYiAzMiAg ICAgICAgICAgICAgICAJam1wICAgIGUyZCA8dnhsYW5fbmV0ZGV2aWNlX2V2ZW50KzB4MTJkPgog ICAgIGRmYjoJNDggOGIgNDMgMTAgICAgICAgICAgCW1vdiAgICAweDEwKCVyYngpLCVyYXgKICAg ICBkZmY6CTQ4IDhkIDRiIDEwICAgICAgICAgIAlsZWEgICAgMHgxMCglcmJ4KSwlcmN4CiAgICAg ZTAzOgk0OCA4OSBkYSAgICAgICAgICAgICAJbW92ICAgICVyYngsJXJkeAoKc3RhdGljIHZvaWQg dnhsYW5faGFuZGxlX2xvd2VyZGV2X3VucmVnaXN0ZXIoc3RydWN0IHZ4bGFuX25ldCAqdm4sCgkJ CQkJICAgICBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQp7CglzdHJ1Y3QgdnhsYW5fZGV2ICp2eGxh biwgKm5leHQ7CglMSVNUX0hFQUQobGlzdF9raWxsKTsKICAgICBlMDY6CTQ4IDgzIGU4IDEwICAg ICAgICAgIAlzdWIgICAgJDB4MTAsJXJheAogICAgIGUwYToJNDkgMzkgY2QgICAgICAgICAgICAg CWNtcCAgICAlcmN4LCVyMTMKICAgICBlMGQ6CTc0IDFlICAgICAgICAgICAgICAgIAlqZSAgICAg ZTJkIDx2eGxhbl9uZXRkZXZpY2VfZXZlbnQrMHgxMmQ+CiAgICAgZTBmOgk0OCA4OSBjMyAgICAg ICAgICAgICAJbW92ICAgICVyYXgsJXJieAogICAgIGUxMjoJNDEgOGIgODQgMjQgMjggMDEgMDAg CW1vdiAgICAweDEyOCglcjEyKSwlZWF4CiAgICAgZTE5OgkwMCAKCglsaXN0X2Zvcl9lYWNoX2Vu dHJ5X3NhZmUodnhsYW4sIG5leHQsICZ2bi0+dnhsYW5fbGlzdCwgbmV4dCkgewogICAgIGUxYToJ MzkgNDIgNjQgICAgICAgICAgICAgCWNtcCAgICAlZWF4LDB4NjQoJXJkeCkKICAgICBlMWQ6CTc1 IGRjICAgICAgICAgICAgICAgIAlqbmUgICAgZGZiIDx2eGxhbl9uZXRkZXZpY2VfZXZlbnQrMHhm Yj4KICAgICBlMWY6CTQ4IDhiIDdhIDMwICAgICAgICAgIAltb3YgICAgMHgzMCglcmR4KSwlcmRp CiAgICAgZTIzOgk0YyA4OSBmNiAgICAgICAgICAgICAJbW92ICAgICVyMTQsJXJzaQogICAgIGUy NjoJZTggZDUgZmEgZmYgZmYgICAgICAgCWNhbGxxICA5MDAgPHZ4bGFuX2RlbGxpbms+CiAgICAg ZTJiOgllYiBjZSAgICAgICAgICAgICAgICAJam1wICAgIGRmYiA8dnhsYW5fbmV0ZGV2aWNlX2V2 ZW50KzB4ZmI+CiAgICAgZTJkOgk0YyA4OSBmNyAgICAgICAgICAgICAJbW92ICAgICVyMTQsJXJk aQogICAgIGUzMDoJZTggMDAgMDAgMDAgMDAgICAgICAgCWNhbGxxICBlMzUgPHZ4bGFuX25ldGRl dmljZV9ldmVudCsweDEzNT4KICAgICBlMzU6CWU5IDE0IGZmIGZmIGZmICAgICAgIAlqbXBxICAg ZDRlIDx2eGxhbl9uZXRkZXZpY2VfZXZlbnQrMHg0ZT4KICAgICBlM2E6CWU4IDAwIDAwIDAwIDAw ICAgICAgIAljYWxscSAgZTNmIDx2eGxhbl9uZXRkZXZpY2VfZXZlbnQrMHgxM2Y+CiAgICAgZTNm Ogk5MCAgICAgICAgICAgICAgICAgICAJbm9wCgowMDAwMDAwMDAwMDAwZTQwIDxfX3Z4bGFuX3Nv Y2tfYWRkPjoKICAgICBlNDA6CWU4IDAwIDAwIDAwIDAwICAgICAgIAljYWxscSAgZTQ1IDxfX3Z4 bGFuX3NvY2tfYWRkKzB4NT4KCQkgKiBhbmQgd2UgbG9vc2UgdGhlIGNhcnJpZXIgZHVlIHRvIG1v ZHVsZSB1bmxvYWQKCQkgKiB3ZSBhbHNvIG5lZWQgdG8gcmVtb3ZlIHZ4bGFuIGRldmljZS4gSW4g b3RoZXIKCQkgKiBjYXNlcywgaXQncyBub3QgbmVjZXNzYXJ5IGFuZCByZW1vdGVfaWZpbmRleAoJ CSAqIGlzIDAgaGVyZSwgc28gbm8gbWF0Y2hlcy4KCQkgKi8KCQlpZiAoZHN0LT5yZW1vdGVfaWZp bmRleCA9PSBkZXYtPmlmaW5kZXgpCiAgICAgZTQ1Ogk1NSAgICAgICAgICAgICAgICAgICAJcHVz aCAgICVyYnAKICAgICBlNDY6CTQ4IDg5IGU1ICAgICAgICAgICAgIAltb3YgICAgJXJzcCwlcmJw CiAgICAgZTQ5Ogk0MSA1NyAgICAgICAgICAgICAgICAJcHVzaCAgICVyMTUKICAgICBlNGI6CTQx IDU2ICAgICAgICAgICAgICAgIAlwdXNoICAgJXIxNAogICAgIGU0ZDoJNDEgNTUgICAgICAgICAg ICAgICAgCXB1c2ggICAlcjEzCgkJCXZ4bGFuX2RlbGxpbmsodnhsYW4tPmRldiwgJmxpc3Rfa2ls bCk7CiAgICAgZTRmOgk0MSA1NCAgICAgICAgICAgICAgICAJcHVzaCAgICVyMTIKICAgICBlNTE6 CTQxIDg5IGY1ICAgICAgICAgICAgIAltb3YgICAgJWVzaSwlcjEzZAogICAgIGU1NDoJNTMgICAg ICAgICAgICAgICAgICAgCXB1c2ggICAlcmJ4CiAgICAgZTU1Ogk0OCA4OSBmYiAgICAgICAgICAg ICAJbW92ICAgICVyZGksJXJieAogICAgIGU1ODoJNDggODEgZWMgODggMDAgMDAgMDAgCXN1YiAg ICAkMHg4OCwlcnNwCgl9CgoJdW5yZWdpc3Rlcl9uZXRkZXZpY2VfbWFueSgmbGlzdF9raWxsKTsK ICAgICBlNWY6CTRjIDhiIDc3IDM4ICAgICAgICAgIAltb3YgICAgMHgzOCglcmRpKSwlcjE0CiAg ICAgZTYzOgk2NSA0OCA4YiAwNCAyNSAyOCAwMCAJbW92ICAgICVnczoweDI4LCVyYXgKICAgICBl NmE6CTAwIDAwIAoJCXZ4bGFuX2hhbmRsZV9sb3dlcmRldl91bnJlZ2lzdGVyKHZuLCBkZXYpOwoJ ZWxzZSBpZiAoZXZlbnQgPT0gTkVUREVWX1VEUF9UVU5ORUxfUFVTSF9JTkZPKQoJCXZ4bGFuX3B1 c2hfcnhfcG9ydHMoZGV2KTsKCglyZXR1cm4gTk9USUZZX0RPTkU7Cn0KICAgICBlNmM6CTQ4IDg5 IDQ1IGQwICAgICAgICAgIAltb3YgICAgJXJheCwtMHgzMCglcmJwKQoKCXJldHVybiB2czsKfQoK c3RhdGljIGludCBfX3Z4bGFuX3NvY2tfYWRkKHN0cnVjdCB2eGxhbl9kZXYgKnZ4bGFuLCBib29s IGlwdjYpCnsKICAgICBlNzA6CTMxIGMwICAgICAgICAgICAgICAgIAl4b3IgICAgJWVheCwlZWF4 CiAgICAgZTcyOgk4YiAwNSAwMCAwMCAwMCAwMCAgICAJbW92ICAgIDB4MCglcmlwKSwlZWF4ICAg ICAgICAjIGU3OCA8X192eGxhbl9zb2NrX2FkZCsweDM4PgogICAgIGU3ODoJNDkgOGIgOTYgODgg MTQgMDAgMDAgCW1vdiAgICAweDE0ODgoJXIxNCksJXJkeAogICAgIGU3ZjoJODMgZTggMDEgICAg ICAgICAgICAgCXN1YiAgICAkMHgxLCVlYXgKICAgICBlODI6CTgwIGJmIDVjIDAxIDAwIDAwIDAw IAljbXBiICAgJDB4MCwweDE1YyglcmRpKQogICAgIGU4OToJMGYgODQgZTYgMDEgMDAgMDAgICAg CWplICAgICAxMDc1IDxfX3Z4bGFuX3NvY2tfYWRkKzB4MjM1PgoJc3RydWN0IHZ4bGFuX25ldCAq dm4gPSBuZXRfZ2VuZXJpYyh2eGxhbi0+bmV0LCB2eGxhbl9uZXRfaWQpOwogICAgIGU4ZjoJNDkg OGIgOTYgODggMTQgMDAgMDAgCW1vdiAgICAweDE0ODgoJXIxNCksJXJkeAoKCXJldHVybiB2czsK fQoKc3RhdGljIGludCBfX3Z4bGFuX3NvY2tfYWRkKHN0cnVjdCB2eGxhbl9kZXYgKnZ4bGFuLCBi b29sIGlwdjYpCnsKICAgICBlOTY6CTQ4IDk4ICAgICAgICAgICAgICAgIAljbHRxICAgCiAgICAg ZTk4Ogk4YiA4YiA5OCAwMCAwMCAwMCAgICAJbW92ICAgIDB4OTgoJXJieCksJWVjeAogICAgIGU5 ZToJYmUgYzAgODAgNDAgMDIgICAgICAgCW1vdiAgICAkMHgyNDA4MGMwLCVlc2kKICAgICBlYTM6 CWJmIDIwIDIwIDAwIDAwICAgICAgIAltb3YgICAgJDB4MjAyMCwlZWRpCiAgICAgZWE4Ogk0NCAw ZiBiNyBhMyAzYyAwMSAwMCAJbW92endsIDB4MTNjKCVyYngpLCVyMTJkCiAgICAgZWFmOgkwMCAK ICAgICBlYjA6CTQ4IDhiIDQ0IGMyIDE4ICAgICAgIAltb3YgICAgMHgxOCglcmR4LCVyYXgsOCks JXJheAoJc3RydWN0IHZ4bGFuX25ldCAqdm4gPSBuZXRfZ2VuZXJpYyh2eGxhbi0+bmV0LCB2eGxh bl9uZXRfaWQpOwoJc3RydWN0IHZ4bGFuX3NvY2sgKnZzID0gTlVMTDsKCglpZiAoIXZ4bGFuLT5j Zmcubm9fc2hhcmUpIHsKICAgICBlYjU6CWJhIDAyIDAwIDAwIDAwICAgICAgIAltb3YgICAgJDB4 MiwlZWR4CiAgICAgZWJhOgk4OSA4ZCA2OCBmZiBmZiBmZiAgICAJbW92ICAgICVlY3gsLTB4OTgo JXJicCkKICAgICBlYzA6CTQ4IDg5IDg1IDU4IGZmIGZmIGZmIAltb3YgICAgJXJheCwtMHhhOCgl cmJwKQogICAgIGVjNzoJZTggMDAgMDAgMDAgMDAgICAgICAgCWNhbGxxICBlY2MgPF9fdnhsYW5f c29ja19hZGQrMHg4Yz4KCQkJcmV0dXJuIC1FQlVTWTsKCQl9CgkJc3Bpbl91bmxvY2soJnZuLT5z b2NrX2xvY2spOwoJfQoJaWYgKCF2cykKCQl2cyA9IHZ4bGFuX3NvY2tldF9jcmVhdGUodnhsYW4t Pm5ldCwgaXB2NiwKICAgICBlY2M6CTQ4IDg1IGMwICAgICAgICAgICAgIAl0ZXN0ICAgJXJheCwl cmF4CiNlbmRpZgoKc3RhdGljIF9fYWx3YXlzX2lubGluZSB2b2lkICprbWFsbG9jX2xhcmdlKHNp emVfdCBzaXplLCBnZnBfdCBmbGFncykKewoJdW5zaWduZWQgaW50IG9yZGVyID0gZ2V0X29yZGVy KHNpemUpOwoJcmV0dXJuIGttYWxsb2Nfb3JkZXJfdHJhY2Uoc2l6ZSwgZmxhZ3MsIG9yZGVyKTsK ICAgICBlY2Y6CTQ5IDg5IGM3ICAgICAgICAgICAgIAltb3YgICAgJXJheCwlcjE1CiAgICAgZWQy OgkwZiA4NCBkMSAwMiAwMCAwMCAgICAJamUgICAgIDExYTkgPF9fdnhsYW5fc29ja19hZGQrMHgz Njk+CgkJCQkJIHZ4bGFuLT5jZmcuZHN0X3BvcnQsIHZ4bGFuLT5mbGFncyk7CiAgICAgZWQ4Ogk0 OCA4ZCA0MCAxOCAgICAgICAgICAJbGVhICAgIDB4MTgoJXJheCksJXJheAogICAgIGVkYzoJNDkg OGQgOTcgMTggMjAgMDAgMDAgCWxlYSAgICAweDIwMTgoJXIxNSksJXJkeAogICAgIGVlMzoJNDgg YzcgMDAgMDAgMDAgMDAgMDAgCW1vdnEgICAkMHgwLCglcmF4KQoJCQlyZXR1cm4gLUVCVVNZOwoJ CX0KCQlzcGluX3VubG9jaygmdm4tPnNvY2tfbG9jayk7Cgl9CglpZiAoIXZzKQoJCXZzID0gdnhs YW5fc29ja2V0X2NyZWF0ZSh2eGxhbi0+bmV0LCBpcHY2LAogICAgIGVlYToJNDggODMgYzAgMDgg ICAgICAgICAgCWFkZCAgICAkMHg4LCVyYXgKICAgICBlZWU6CTQ4IDM5IGMyICAgICAgICAgICAg IAljbXAgICAgJXJheCwlcmR4CiAgICAgZWYxOgk3NSBmMCAgICAgICAgICAgICAgICAJam5lICAg IGVlMyA8X192eGxhbl9zb2NrX2FkZCsweGEzPgogICAgIGVmMzoJNDggOGQgNzUgYTQgICAgICAg ICAgCWxlYSAgICAtMHg1YyglcmJwKSwlcnNpCiAgICAgZWY3Ogk0OCA4ZCA3ZCBhOCAgICAgICAg ICAJbGVhICAgIC0weDU4KCVyYnApLCVyZGkKICAgICBlZmI6CTMxIGMwICAgICAgICAgICAgICAg IAl4b3IgICAgJWVheCwlZWF4CglzdHJ1Y3Qgc29ja2V0ICpzb2NrOwoJdW5zaWduZWQgaW50IGg7 CglzdHJ1Y3QgdWRwX3R1bm5lbF9zb2NrX2NmZyB0dW5uZWxfY2ZnOwoKCXZzID0ga3phbGxvYyhz aXplb2YoKnZzKSwgR0ZQX0tFUk5FTCk7CglpZiAoIXZzKQogICAgIGVmZDoJNDggYzcgNDUgYTQg MDAgMDAgMDAgCW1vdnEgICAkMHgwLC0weDVjKCVyYnApCiAgICAgZjA0OgkwMCAKICAgICBmMDU6 CTQ4IGM3IDQ1IGM4IDAwIDAwIDAwIAltb3ZxICAgJDB4MCwtMHgzOCglcmJwKQogICAgIGYwYzoJ MDAgCiAgICAgZjBkOgk0OCA4OSBmMSAgICAgICAgICAgICAJbW92ICAgICVyc2ksJXJjeAogICAg IGYxMDoJNDggMjkgZjkgICAgICAgICAgICAgCXN1YiAgICAlcmRpLCVyY3gKCQlyZXR1cm4gRVJS X1BUUigtRU5PTUVNKTsKCglmb3IgKGggPSAwOyBoIDwgVk5JX0hBU0hfU0laRTsgKytoKQoJCUlO SVRfSExJU1RfSEVBRCgmdnMtPnZuaV9saXN0W2hdKTsKICAgICBmMTM6CTgzIGMxIDJjICAgICAg ICAgICAgIAlhZGQgICAgJDB4MmMsJWVjeAogICAgIGYxNjoJYzEgZTkgMDMgICAgICAgICAgICAg CXNociAgICAkMHgzLCVlY3gKICAgICBmMTk6CTQ1IDg0IGVkICAgICAgICAgICAgIAl0ZXN0ICAg JXIxM2IsJXIxM2IKICAgICBmMWM6CWYzIDQ4IGFiICAgICAgICAgICAgIAlyZXAgc3RvcyAlcmF4 LCVlczooJXJkaSkKCgl2cyA9IGt6YWxsb2Moc2l6ZW9mKCp2cyksIEdGUF9LRVJORUwpOwoJaWYg KCF2cykKCQlyZXR1cm4gRVJSX1BUUigtRU5PTUVNKTsKCglmb3IgKGggPSAwOyBoIDwgVk5JX0hB U0hfU0laRTsgKytoKQogICAgIGYxZjoJMGYgODUgYmMgMDIgMDAgMDAgICAgCWpuZSAgICAxMWUx IDxfX3Z4bGFuX3NvY2tfYWRkKzB4M2ExPgp7CglzdHJ1Y3Qgc29ja2V0ICpzb2NrOwoJc3RydWN0 IHVkcF9wb3J0X2NmZyB1ZHBfY29uZjsKCWludCBlcnI7CgoJbWVtc2V0KCZ1ZHBfY29uZiwgMCwg c2l6ZW9mKHVkcF9jb25mKSk7CiAgICAgZjI1Ogk0OCA4ZCA4NSA3MCBmZiBmZiBmZiAJbGVhICAg IC0weDkwKCVyYnApLCVyYXgKICAgICBmMmM6CTRjIDg5IGY3ICAgICAgICAgICAgIAltb3YgICAg JXIxNCwlcmRpCiAgICAgZjJmOgljNiA0NSBhNCAwMiAgICAgICAgICAJbW92YiAgICQweDIsLTB4 NWMoJXJicCkKICAgICBmMzM6CTY2IDQ0IDg5IDY1IGM4ICAgICAgIAltb3YgICAgJXIxMncsLTB4 MzgoJXJicCkKICAgICBmMzg6CTQ4IDg5IGMyICAgICAgICAgICAgIAltb3YgICAgJXJheCwlcmR4 CiAgICAgZjNiOgk0OCA4OSA4NSA2MCBmZiBmZiBmZiAJbW92ICAgICVyYXgsLTB4YTAoJXJicCkK ICAgICBmNDI6CWU4IDAwIDAwIDAwIDAwICAgICAgIAljYWxscSAgZjQ3IDxfX3Z4bGFuX3NvY2tf YWRkKzB4MTA3PgogICAgIGY0NzoJODUgYzAgICAgICAgICAgICAgICAgCXRlc3QgICAlZWF4LCVl YXgKCglpZiAoaXB2NikgewogICAgIGY0OToJMGYgODggMTYgMDMgMDAgMDAgICAgCWpzICAgICAx MjY1IDxfX3Z4bGFuX3NvY2tfYWRkKzB4NDI1PgogICAgIGY0ZjoJNGMgOGIgOWQgNzAgZmYgZmYg ZmYgCW1vdiAgICAtMHg5MCglcmJwKSwlcjExCnN0YXRpYyBpbmxpbmUgaW50IHVkcF9zb2NrX2Ny ZWF0ZShzdHJ1Y3QgbmV0ICpuZXQsCgkJCQkgIHN0cnVjdCB1ZHBfcG9ydF9jZmcgKmNmZywKCQkJ CSAgc3RydWN0IHNvY2tldCAqKnNvY2twKQp7CglpZiAoY2ZnLT5mYW1pbHkgPT0gQUZfSU5FVCkK CQlyZXR1cm4gdWRwX3NvY2tfY3JlYXRlNChuZXQsIGNmZywgc29ja3ApOwogICAgIGY1NjoJNDkg ODEgZmIgMDAgZjAgZmYgZmYgCWNtcCAgICAkMHhmZmZmZmZmZmZmZmZmMDAwLCVyMTEKICAgICBm NWQ6CTBmIDg3IGM2IDAyIDAwIDAwICAgIAlqYSAgICAgMTIyOSA8X192eGxhbl9zb2NrX2FkZCsw eDNlOT4KCQl1ZHBfY29uZi5pcHY2X3Y2b25seSA9IDE7Cgl9IGVsc2UgewoJCXVkcF9jb25mLmZh bWlseSA9IEFGX0lORVQ7Cgl9CgoJdWRwX2NvbmYubG9jYWxfdWRwX3BvcnQgPSBwb3J0OwogICAg IGY2MzoJOGIgODUgNjggZmYgZmYgZmYgICAgCW1vdiAgICAtMHg5OCglcmJwKSwlZWF4CiAgICAg ZjY5Ogk0ZCA4OSA1ZiAxMCAgICAgICAgICAJbW92ICAgICVyMTEsMHgxMCglcjE1KQogICAgIGY2 ZDoJNjYgNDEgYzEgYzQgMDggICAgICAgCXJvbCAgICAkMHg4LCVyMTJ3CiAgICAgZjcyOgk0MSBj NyA4NyAxOCAyMCAwMCAwMCAJbW92bCAgICQweDEsMHgyMDE4KCVyMTUpCiAgICAgZjc5OgkwMSAw MCAwMCAwMCAKCgkvKiBPcGVuIFVEUCBzb2NrZXQgKi8KCWVyciA9IHVkcF9zb2NrX2NyZWF0ZShu ZXQsICZ1ZHBfY29uZiwgJnNvY2spOwoJaWYgKGVyciA8IDApCiAgICAgZjdkOgk0YyA4OSA5ZCA1 MCBmZiBmZiBmZiAJbW92ICAgICVyMTEsLTB4YjAoJXJicCkKCQlyZXR1cm4gRVJSX1BUUihlcnIp OwoKCXJldHVybiBzb2NrOwogICAgIGY4NDoJMjUgMDAgN2QgMDAgMDAgICAgICAgCWFuZCAgICAk MHg3ZDAwLCVlYXgKCglmb3IgKGggPSAwOyBoIDwgVk5JX0hBU0hfU0laRTsgKytoKQoJCUlOSVRf SExJU1RfSEVBRCgmdnMtPnZuaV9saXN0W2hdKTsKCglzb2NrID0gdnhsYW5fY3JlYXRlX3NvY2so bmV0LCBpcHY2LCBwb3J0LCBmbGFncyk7CglpZiAoSVNfRVJSKHNvY2spKSB7CiAgICAgZjg5Ogk0 MSA4OSA4NyAxYyAyMCAwMCAwMCAJbW92ICAgICVlYXgsMHgyMDFjKCVyMTUpCiAgICAgZjkwOgk0 OCA4YiA4NSA1OCBmZiBmZiBmZiAJbW92ICAgIC0weGE4KCVyYnApLCVyYXgKCQlyZXR1cm4gRVJS X0NBU1Qoc29jayk7Cgl9CgoJdnMtPnNvY2sgPSBzb2NrOwoJYXRvbWljX3NldCgmdnMtPnJlZmNu dCwgMSk7Cgl2cy0+ZmxhZ3MgPSAoZmxhZ3MgJiBWWExBTl9GX1JDVl9GTEFHUyk7CiAgICAgZjk3 Ogk0OCAwNSAxMCAwOCAwMCAwMCAgICAJYWRkICAgICQweDgxMCwlcmF4Ci8qIFNvY2tldCBoYXNo IHRhYmxlIGhlYWQgKi8Kc3RhdGljIGlubGluZSBzdHJ1Y3QgaGxpc3RfaGVhZCAqdnNfaGVhZChz dHJ1Y3QgbmV0ICpuZXQsIF9fYmUxNiBwb3J0KQp7CglzdHJ1Y3QgdnhsYW5fbmV0ICp2biA9IG5l dF9nZW5lcmljKG5ldCwgdnhsYW5fbmV0X2lkKTsKCglyZXR1cm4gJnZuLT5zb2NrX2xpc3RbaGFz aF8zMihudG9ocyhwb3J0KSwgUE9SVF9IQVNIX0JJVFMpXTsKICAgICBmOWQ6CTQ4IDg5IGM3ICAg ICAgICAgICAgIAltb3YgICAgJXJheCwlcmRpCiAgICAgZmEwOgk0OCA4OSA4NSA2OCBmZiBmZiBm ZiAJbW92ICAgICVyYXgsLTB4OTgoJXJicCkKc3RhdGljIF9fYWx3YXlzX2lubGluZSB2b2lkIF9f d3JpdGVfb25jZV9zaXplKHZvbGF0aWxlIHZvaWQgKnAsIHZvaWQgKnJlcywgaW50IHNpemUpCnsK CXN3aXRjaCAoc2l6ZSkgewoJY2FzZSAxOiAqKHZvbGF0aWxlIF9fdTggKilwID0gKihfX3U4ICop cmVzOyBicmVhazsKCWNhc2UgMjogKih2b2xhdGlsZSBfX3UxNiAqKXAgPSAqKF9fdTE2ICopcmVz OyBicmVhazsKCWNhc2UgNDogKih2b2xhdGlsZSBfX3UzMiAqKXAgPSAqKF9fdTMyICopcmVzOyBi cmVhazsKICAgICBmYTc6CWU4IDAwIDAwIDAwIDAwICAgICAgIAljYWxscSAgZmFjIDxfX3Z4bGFu X3NvY2tfYWRkKzB4MTZjPgogICAgIGZhYzoJOGIgMDUgMDAgMDAgMDAgMDAgICAgCW1vdiAgICAw eDAoJXJpcCksJWVheCAgICAgICAgIyBmYjIgPF9fdnhsYW5fc29ja19hZGQrMHgxNzI+CgkJCVBU Ul9FUlIoc29jaykpOwoJCWtmcmVlKHZzKTsKCQlyZXR1cm4gRVJSX0NBU1Qoc29jayk7Cgl9CgoJ dnMtPnNvY2sgPSBzb2NrOwogICAgIGZiMjoJNDkgOGIgOTYgODggMTQgMDAgMDAgCW1vdiAgICAw eDE0ODgoJXIxNCksJXJkeAoJYXRvbWljX3NldCgmdnMtPnJlZmNudCwgMSk7Cgl2cy0+ZmxhZ3Mg PSAoZmxhZ3MgJiBWWExBTl9GX1JDVl9GTEFHUyk7CiAgICAgZmI5Ogk4MyBlOCAwMSAgICAgICAg ICAgICAJc3ViICAgICQweDEsJWVheAogICAgIGZiYzoJNDggOTggICAgICAgICAgICAgICAgCWNs dHEgICAKICAgICBmYmU6CTQ4IDhiIDU0IGMyIDE4ICAgICAgIAltb3YgICAgMHgxOCglcmR4LCVy YXgsOCksJXJkeAogICAgIGZjMzoJNDEgMGYgYjcgYzQgICAgICAgICAgCW1vdnp3bCAlcjEydywl ZWF4CiAgICAgZmM3Ogk2OSBjMCA0NyA4NiBjOCA2MSAgICAJaW11bCAgICQweDYxYzg4NjQ3LCVl YXgsJWVheAogICAgIGZjZDoJYzEgZTggMTggICAgICAgICAgICAgCXNociAgICAkMHgxOCwlZWF4 CiAgICAgZmQwOgk0OCA4MyBjMCAwMiAgICAgICAgICAJYWRkICAgICQweDIsJXJheAogICAgIGZk NDoJNDggOGQgMGMgYzIgICAgICAgICAgCWxlYSAgICAoJXJkeCwlcmF4LDgpLCVyY3gKICAgICBm ZDg6CTQ4IDhiIDA0IGMyICAgICAgICAgIAltb3YgICAgKCVyZHgsJXJheCw4KSwlcmF4CiAgICAg ZmRjOgk0OSA4OSA0ZiAwOCAgICAgICAgICAJbW92ICAgICVyY3gsMHg4KCVyMTUpCiAgICAgZmUw Ogk0OSA4OSAwNyAgICAgICAgICAgICAJbW92ICAgICVyYXgsKCVyMTUpCn0pCgpzdGF0aWMgX19h bHdheXNfaW5saW5lCnZvaWQgX19yZWFkX29uY2Vfc2l6ZShjb25zdCB2b2xhdGlsZSB2b2lkICpw LCB2b2lkICpyZXMsIGludCBzaXplKQp7CglfX1JFQURfT05DRV9TSVpFOwogICAgIGZlMzoJNDgg ODUgYzAgICAgICAgICAgICAgCXRlc3QgICAlcmF4LCVyYXgKICAgICBmZTY6CTRjIDg5IDM5ICAg ICAgICAgICAgIAltb3YgICAgJXIxNSwoJXJjeCkKICAgICBmZTk6CTRjIDhiIDlkIDUwIGZmIGZm IGZmIAltb3YgICAgLTB4YjAoJXJicCksJXIxMQogICAgIGZmMDoJNzQgMDQgICAgICAgICAgICAg ICAgCWplICAgICBmZjYgPF9fdnhsYW5fc29ja19hZGQrMHgxYjY+CiAgICAgZmYyOgk0YyA4OSA3 OCAwOCAgICAgICAgICAJbW92ICAgICVyMTUsMHg4KCVyYXgpCiNkZWZpbmUgaGFzaF8zMiBoYXNo XzMyX2dlbmVyaWMKI2VuZGlmCnN0YXRpYyBpbmxpbmUgdTMyIGhhc2hfMzJfZ2VuZXJpYyh1MzIg dmFsLCB1bnNpZ25lZCBpbnQgYml0cykKewoJLyogSGlnaCBiaXRzIGFyZSBtb3JlIHJhbmRvbSwg c28gdXNlIHRoZW0uICovCglyZXR1cm4gX19oYXNoXzMyKHZhbCkgPj4gKDMyIC0gYml0cyk7CiAg ICAgZmY2Ogk0MSA4YiBiNyAxYyAyMCAwMCAwMCAJbW92ICAgIDB4MjAxYyglcjE1KSwlZXNpCiAg ICAgZmZkOgk0YyA4OSBkZiAgICAgICAgICAgICAJbW92ICAgICVyMTEsJXJkaQovKiBTb2NrZXQg aGFzaCB0YWJsZSBoZWFkICovCnN0YXRpYyBpbmxpbmUgc3RydWN0IGhsaXN0X2hlYWQgKnZzX2hl YWQoc3RydWN0IG5ldCAqbmV0LCBfX2JlMTYgcG9ydCkKewoJc3RydWN0IHZ4bGFuX25ldCAqdm4g PSBuZXRfZ2VuZXJpYyhuZXQsIHZ4bGFuX25ldF9pZCk7CgoJcmV0dXJuICZ2bi0+c29ja19saXN0 W2hhc2hfMzIobnRvaHMocG9ydCksIFBPUlRfSEFTSF9CSVRTKV07CiAgICAxMDAwOgk0YyA4OSA5 ZCA1OCBmZiBmZiBmZiAJbW92ICAgICVyMTEsLTB4YTgoJXJicCkKICAgIDEwMDc6CWMxIGVlIDBk ICAgICAgICAgICAgIAlzaHIgICAgJDB4ZCwlZXNpCiAqIGxpc3QtdHJhdmVyc2FsIHByaW1pdGl2 ZSBtdXN0IGJlIGd1YXJkZWQgYnkgcmN1X3JlYWRfbG9jaygpLgogKi8Kc3RhdGljIGlubGluZSB2 b2lkIGhsaXN0X2FkZF9oZWFkX3JjdShzdHJ1Y3QgaGxpc3Rfbm9kZSAqbiwKCQkJCQlzdHJ1Y3Qg aGxpc3RfaGVhZCAqaCkKewoJc3RydWN0IGhsaXN0X25vZGUgKmZpcnN0ID0gaC0+Zmlyc3Q7CiAg ICAxMDBhOgk4MyBlNiAwMiAgICAgICAgICAgICAJYW5kICAgICQweDIsJWVzaQoKCW4tPm5leHQg PSBmaXJzdDsKCW4tPnBwcmV2ID0gJmgtPmZpcnN0OwogICAgMTAwZDoJZTggMDAgMDAgMDAgMDAg ICAgICAgCWNhbGxxICAxMDEyIDxfX3Z4bGFuX3NvY2tfYWRkKzB4MWQyPgpzdGF0aWMgaW5saW5l IHZvaWQgaGxpc3RfYWRkX2hlYWRfcmN1KHN0cnVjdCBobGlzdF9ub2RlICpuLAoJCQkJCXN0cnVj dCBobGlzdF9oZWFkICpoKQp7CglzdHJ1Y3QgaGxpc3Rfbm9kZSAqZmlyc3QgPSBoLT5maXJzdDsK CgluLT5uZXh0ID0gZmlyc3Q7CiAgICAxMDEyOgk0OCA4YiBiZCA2OCBmZiBmZiBmZiAJbW92ICAg IC0weDk4KCVyYnApLCVyZGkKCW4tPnBwcmV2ID0gJmgtPmZpcnN0OwoJcmN1X2Fzc2lnbl9wb2lu dGVyKGhsaXN0X2ZpcnN0X3JjdShoKSwgbik7CglpZiAoZmlyc3QpCiAgICAxMDE5OglmZiAxNCAy NSAwMCAwMCAwMCAwMCAJY2FsbHEgICoweDAKICAgIDEwMjA6CTQ4IDhiIGJkIDYwIGZmIGZmIGZm IAltb3YgICAgLTB4YTAoJXJicCksJXJkaQoJYXRvbWljX3NldCgmdnMtPnJlZmNudCwgMSk7Cgl2 cy0+ZmxhZ3MgPSAoZmxhZ3MgJiBWWExBTl9GX1JDVl9GTEFHUyk7CgoJc3Bpbl9sb2NrKCZ2bi0+ c29ja19sb2NrKTsKCWhsaXN0X2FkZF9oZWFkX3JjdSgmdnMtPmhsaXN0LCB2c19oZWFkKG5ldCwg cG9ydCkpOwoJdWRwX3R1bm5lbF9ub3RpZnlfYWRkX3J4X3BvcnQoc29jaywKICAgIDEwMjc6CTMx IGMwICAgICAgICAgICAgICAgIAl4b3IgICAgJWVheCwlZWF4CiAgICAxMDI5OgliOSAwNiAwMCAw MCAwMCAgICAgICAJbW92ICAgICQweDYsJWVjeAogICAgMTAyZToJNGMgOGIgOWQgNTggZmYgZmYg ZmYgCW1vdiAgICAtMHhhOCglcmJwKSwlcjExCiAgICAxMDM1Ogk0OCA4YiA5NSA2MCBmZiBmZiBm ZiAJbW92ICAgIC0weGEwKCVyYnApLCVyZHgKICAgIDEwM2M6CWYzIDQ4IGFiICAgICAgICAgICAg IAlyZXAgc3RvcyAlcmF4LCVlczooJXJkaSkKICAgIDEwM2Y6CTRjIDg5IGRlICAgICAgICAgICAg IAltb3YgICAgJXIxMSwlcnNpCiAgICAxMDQyOgk0YyA4OSBmNyAgICAgICAgICAgICAJbW92ICAg ICVyMTQsJXJkaQogICAgMTA0NToJNGMgODkgYmQgNzAgZmYgZmYgZmYgCW1vdiAgICAlcjE1LC0w eDkwKCVyYnApCiAgICAxMDRjOgljNiA4NSA3OCBmZiBmZiBmZiAwMSAJbW92YiAgICQweDEsLTB4 ODgoJXJicCkKCQkJCSAgICAgIFVEUF9UVU5ORUxfVFlQRV9WWExBTl9HUEUgOgoJCQkJICAgICAg VURQX1RVTk5FTF9UWVBFX1ZYTEFOKTsKCXNwaW5fdW5sb2NrKCZ2bi0+c29ja19sb2NrKTsKCgkv KiBNYXJrIHNvY2tldCBhcyBhbiBlbmNhcHN1bGF0aW9uIHNvY2tldC4gKi8KCW1lbXNldCgmdHVu bmVsX2NmZywgMCwgc2l6ZW9mKHR1bm5lbF9jZmcpKTsKICAgIDEwNTM6CTQ4IGM3IDQ1IDgwIDAw IDAwIDAwIAltb3ZxICAgJDB4MCwtMHg4MCglcmJwKQogICAgMTA1YToJMDAgCiAgICAxMDViOgk0 OCBjNyA0NSA5MCAwMCAwMCAwMCAJbW92cSAgICQweDAsLTB4NzAoJXJicCkKICAgIDEwNjI6CTAw IAoJdHVubmVsX2NmZy5lbmNhcF9yY3YgPSB2eGxhbl9yY3Y7Cgl0dW5uZWxfY2ZnLmVuY2FwX2Rl c3Ryb3kgPSBOVUxMOwoJdHVubmVsX2NmZy5ncm9fcmVjZWl2ZSA9IHZ4bGFuX2dyb19yZWNlaXZl OwoJdHVubmVsX2NmZy5ncm9fY29tcGxldGUgPSB2eGxhbl9ncm9fY29tcGxldGU7CgoJc2V0dXBf dWRwX3R1bm5lbF9zb2NrKG5ldCwgc29jaywgJnR1bm5lbF9jZmcpOwogICAgMTA2MzoJNDggYzcg NDUgOTggMDAgMDAgMDAgCW1vdnEgICAkMHgwLC0weDY4KCVyYnApCiAgICAxMDZhOgkwMCAKICAg IDEwNmI6CWU4IDAwIDAwIDAwIDAwICAgICAgIAljYWxscSAgMTA3MCA8X192eGxhbl9zb2NrX2Fk ZCsweDIzMD4KICAgIDEwNzA6CWU5IDgwIDAwIDAwIDAwICAgICAgIAlqbXBxICAgMTBmNSA8X192 eGxhbl9zb2NrX2FkZCsweDJiNT4KCQkJCSAgICAgIFVEUF9UVU5ORUxfVFlQRV9WWExBTik7Cglz cGluX3VubG9jaygmdm4tPnNvY2tfbG9jayk7CgoJLyogTWFyayBzb2NrZXQgYXMgYW4gZW5jYXBz dWxhdGlvbiBzb2NrZXQuICovCgltZW1zZXQoJnR1bm5lbF9jZmcsIDAsIHNpemVvZih0dW5uZWxf Y2ZnKSk7Cgl0dW5uZWxfY2ZnLnNrX3VzZXJfZGF0YSA9IHZzOwogICAgMTA3NToJNDggOTggICAg ICAgICAgICAgICAgCWNsdHEgICAKICAgIDEwNzc6CTRjIDhiIDY0IGMyIDE4ICAgICAgIAltb3Yg ICAgMHgxOCglcmR4LCVyYXgsOCksJXIxMgoJdHVubmVsX2NmZy5lbmNhcF90eXBlID0gMTsKICAg IDEwN2M6CTQ5IDgxIGM0IDEwIDA4IDAwIDAwIAlhZGQgICAgJDB4ODEwLCVyMTIKCXR1bm5lbF9j ZmcuZW5jYXBfcmN2ID0gdnhsYW5fcmN2OwogICAgMTA4MzoJNGMgODkgZTcgICAgICAgICAgICAg CW1vdiAgICAlcjEyLCVyZGkKICAgIDEwODY6CWU4IDAwIDAwIDAwIDAwICAgICAgIAljYWxscSAg MTA4YiA8X192eGxhbl9zb2NrX2FkZCsweDI0Yj4KCXR1bm5lbF9jZmcuZW5jYXBfZGVzdHJveSA9 IE5VTEw7Cgl0dW5uZWxfY2ZnLmdyb19yZWNlaXZlID0gdnhsYW5fZ3JvX3JlY2VpdmU7CiAgICAx MDhiOgk0MSA4MCBmZCAwMSAgICAgICAgICAJY21wICAgICQweDEsJXIxM2IKICAgIDEwOGY6CTBm IGI3IDkzIDNjIDAxIDAwIDAwIAltb3Z6d2wgMHgxM2MoJXJieCksJWVkeAoJdHVubmVsX2NmZy5n cm9fY29tcGxldGUgPSB2eGxhbl9ncm9fY29tcGxldGU7CiAgICAxMDk2Ogk4YiA4YiA5OCAwMCAw MCAwMCAgICAJbW92ICAgIDB4OTgoJXJieCksJWVjeAoKCXNldHVwX3VkcF90dW5uZWxfc29jayhu ZXQsIHNvY2ssICZ0dW5uZWxfY2ZnKTsKICAgIDEwOWM6CTE5IGY2ICAgICAgICAgICAgICAgIAlz YmIgICAgJWVzaSwlZXNpCiAgICAxMDllOgk0OCA4YiA3YiAzOCAgICAgICAgICAJbW92ICAgIDB4 MzgoJXJieCksJXJkaQogICAgMTBhMjoJODMgZTYgZjggICAgICAgICAgICAgCWFuZCAgICAkMHhm ZmZmZmZmOCwlZXNpCiAgICAxMGE1Ogk4MyBjNiAwYSAgICAgICAgICAgICAJYWRkICAgICQweGEs JWVzaQogICAgMTBhODoJZTggNDMgZjAgZmYgZmYgICAgICAgCWNhbGxxICBmMCA8dnhsYW5fZmlu ZF9zb2NrPgogICAgMTBhZDoJNDggODUgYzAgICAgICAgICAgICAgCXRlc3QgICAlcmF4LCVyYXgK ICAgIDEwYjA6CTQ5IDg5IGM3ICAgICAgICAgICAgIAltb3YgICAgJXJheCwlcjE1CiAgICAxMGIz Ogk3NCAyZCAgICAgICAgICAgICAgICAJamUgICAgIDEwZTIgPF9fdnhsYW5fc29ja19hZGQrMHgy YTI+CiAgICAxMGI1Ogk4YiA4OCAxOCAyMCAwMCAwMCAgICAJbW92ICAgIDB4MjAxOCglcmF4KSwl ZWN4CglzdHJ1Y3QgdnhsYW5fbmV0ICp2biA9IG5ldF9nZW5lcmljKHZ4bGFuLT5uZXQsIHZ4bGFu X25ldF9pZCk7CglzdHJ1Y3QgdnhsYW5fc29jayAqdnMgPSBOVUxMOwoKCWlmICghdnhsYW4tPmNm Zy5ub19zaGFyZSkgewoJCXNwaW5fbG9jaygmdm4tPnNvY2tfbG9jayk7CgkJdnMgPSB2eGxhbl9m aW5kX3NvY2sodnhsYW4tPm5ldCwgaXB2NiA/IEFGX0lORVQ2IDogQUZfSU5FVCwKICAgIDEwYmI6 CTg1IGM5ICAgICAgICAgICAgICAgIAl0ZXN0ICAgJWVjeCwlZWN4CiAgICAxMGJkOgkwZiA4NCAw ZCAwMSAwMCAwMCAgICAJamUgICAgIDExZDAgPF9fdnhsYW5fc29ja19hZGQrMHgzOTA+CiAgICAx MGMzOgk0OCA4ZCBiMCAxOCAyMCAwMCAwMCAJbGVhICAgIDB4MjAxOCglcmF4KSwlcnNpCiAgICAx MGNhOgk4ZCA1MSAwMSAgICAgICAgICAgICAJbGVhICAgIDB4MSglcmN4KSwlZWR4CiAgICAxMGNk Ogk4OSBjOCAgICAgICAgICAgICAgICAJbW92ICAgICVlY3gsJWVheAogICAgMTBjZjoJZjAgNDEg MGYgYjEgOTcgMTggMjAgCWxvY2sgY21weGNoZyAlZWR4LDB4MjAxOCglcjE1KQogICAgMTBkNjoJ MDAgMDAgCiAgICAxMGQ4OgkzOSBjMSAgICAgICAgICAgICAgICAJY21wICAgICVlYXgsJWVjeAog ICAgMTBkYToJODkgYzIgICAgICAgICAgICAgICAgCW1vdiAgICAlZWF4LCVlZHgKICAgIDEwZGM6 CTBmIDg1IGQzIDAwIDAwIDAwICAgIAlqbmUgICAgMTFiNSA8X192eGxhbl9zb2NrX2FkZCsweDM3 NT4KICAgIDEwZTI6CTRjIDg5IGU3ICAgICAgICAgICAgIAltb3YgICAgJXIxMiwlcmRpCiAgICAx MGU1OglmZiAxNCAyNSAwMCAwMCAwMCAwMCAJY2FsbHEgICoweDAKc3RhdGljIF9fYWx3YXlzX2lu bGluZSBpbnQgX19hdG9taWNfYWRkX3VubGVzcyhhdG9taWNfdCAqdiwgaW50IGEsIGludCB1KQp7 CglpbnQgYywgb2xkOwoJYyA9IGF0b21pY19yZWFkKHYpOwoJZm9yICg7OykgewoJCWlmICh1bmxp a2VseShjID09ICh1KSkpCiAgICAxMGVjOgk0ZCA4NSBmZiAgICAgICAgICAgICAJdGVzdCAgICVy MTUsJXIxNQogICAgMTBlZjoJMGYgODQgNzggMDEgMDAgMDAgICAgCWplICAgICAxMjZkIDxfX3Z4 bGFuX3NvY2tfYWRkKzB4NDJkPgoJcmV0dXJuIHhhZGQoJnYtPmNvdW50ZXIsIC1pKTsKfQoKc3Rh dGljIF9fYWx3YXlzX2lubGluZSBpbnQgYXRvbWljX2NtcHhjaGcoYXRvbWljX3QgKnYsIGludCBv bGQsIGludCBuZXcpCnsKCXJldHVybiBjbXB4Y2hnKCZ2LT5jb3VudGVyLCBvbGQsIG5ldyk7CiAg ICAxMGY1Ogk0ZCA4OSBmYiAgICAgICAgICAgICAJbW92ICAgICVyMTUsJXIxMQogICAgMTBmODoJ NDkgODEgZmIgMDAgZjAgZmYgZmYgCWNtcCAgICAkMHhmZmZmZmZmZmZmZmZmMDAwLCVyMTEKICAg IDEwZmY6CTBmIDg3IGFiIDAwIDAwIDAwICAgIAlqYSAgICAgMTFiMCA8X192eGxhbl9zb2NrX2Fk ZCsweDM3MD4KICAgIDExMDU6CTQ1IDg0IGVkICAgICAgICAgICAgIAl0ZXN0ICAgJXIxM2IsJXIx M2IKCWMgPSBhdG9taWNfcmVhZCh2KTsKCWZvciAoOzspIHsKCQlpZiAodW5saWtlbHkoYyA9PSAo dSkpKQoJCQlicmVhazsKCQlvbGQgPSBhdG9taWNfY21weGNoZygodiksIGMsIGMgKyAoYSkpOwoJ CWlmIChsaWtlbHkob2xkID09IGMpKQogICAgMTEwODoJMGYgODQgOTIgMDAgMDAgMDAgICAgCWpl ICAgICAxMWEwIDxfX3Z4bGFuX3NvY2tfYWRkKzB4MzYwPgogICAgMTEwZToJNGMgODkgN2IgMjgg ICAgICAgICAgCW1vdiAgICAlcjE1LDB4MjgoJXJieCkKICAgIDExMTI6CTQ4IDhiIDQzIDM4ICAg ICAgICAgIAltb3YgICAgMHgzOCglcmJ4KSwlcmF4CiAgICAxMTE2Ogk0NCA4YiA2MyA2MCAgICAg ICAgICAJbW92ICAgIDB4NjAoJXJieCksJXIxMmQKICAgIDExMWE6CTQ4IDhiIDkwIDg4IDE0IDAw IDAwIAltb3YgICAgMHgxNDg4KCVyYXgpLCVyZHgKCQkJc3Bpbl91bmxvY2soJnZuLT5zb2NrX2xv Y2spOwoJCQlyZXR1cm4gLUVCVVNZOwoJCX0KCQlzcGluX3VubG9jaygmdm4tPnNvY2tfbG9jayk7 Cgl9CglpZiAoIXZzKQogICAgMTEyMToJOGIgMDUgMDAgMDAgMDAgMDAgICAgCW1vdiAgICAweDAo JXJpcCksJWVheCAgICAgICAgIyAxMTI3IDxfX3Z4bGFuX3NvY2tfYWRkKzB4MmU3PgogICAgMTEy NzoJODMgZTggMDEgICAgICAgICAgICAgCXN1YiAgICAkMHgxLCVlYXgKCQl2cyA9IHZ4bGFuX3Nv Y2tldF9jcmVhdGUodnhsYW4tPm5ldCwgaXB2NiwKCQkJCQkgdnhsYW4tPmNmZy5kc3RfcG9ydCwg dnhsYW4tPmZsYWdzKTsKCWlmIChJU19FUlIodnMpKQogICAgMTEyYToJNDggOTggICAgICAgICAg ICAgICAgCWNsdHEgICAKICAgIDExMmM6CTRjIDhiIDZjIGMyIDE4ICAgICAgIAltb3YgICAgMHgx OCglcmR4LCVyYXgsOCksJXIxMwogICAgMTEzMToJNDkgODEgYzUgMTAgMDggMDAgMDAgCWFkZCAg ICAkMHg4MTAsJXIxMwoJCXJldHVybiBQVFJfRVJSKHZzKTsKI2lmIElTX0VOQUJMRUQoQ09ORklH X0lQVjYpCglpZiAoaXB2NikKICAgIDExMzg6CTRjIDg5IGVmICAgICAgICAgICAgIAltb3YgICAg JXIxMywlcmRpCiAgICAxMTNiOgllOCAwMCAwMCAwMCAwMCAgICAgICAJY2FsbHEgIDExNDAgPF9f dnhsYW5fc29ja19hZGQrMHgzMDA+CgkJdnhsYW4tPnZuNl9zb2NrID0gdnM7CiAgICAxMTQwOgk0 MSA2OSBkNCA0NyA4NiBjOCA2MSAJaW11bCAgICQweDYxYzg4NjQ3LCVyMTJkLCVlZHgKfQoKc3Rh dGljIHZvaWQgdnhsYW5fdnNfYWRkX2RldihzdHJ1Y3QgdnhsYW5fc29jayAqdnMsIHN0cnVjdCB2 eGxhbl9kZXYgKnZ4bGFuKQp7CglzdHJ1Y3QgdnhsYW5fbmV0ICp2biA9IG5ldF9nZW5lcmljKHZ4 bGFuLT5uZXQsIHZ4bGFuX25ldF9pZCk7CglfX2JlMzIgdm5pID0gdnhsYW4tPmRlZmF1bHRfZHN0 LnJlbW90ZV92bmk7CiAgICAxMTQ3OgljMSBlYSAxNiAgICAgICAgICAgICAJc2hyICAgICQweDE2 LCVlZHgKICAgIDExNGE6CTQ4IDgzIGMyIDAyICAgICAgICAgIAlhZGQgICAgJDB4MiwlcmR4CiAg ICAxMTRlOgk0OSA4ZCAwYyBkNyAgICAgICAgICAJbGVhICAgICglcjE1LCVyZHgsOCksJXJjeAog ICAgMTE1MjoJNDkgOGIgNDQgZDcgMDggICAgICAgCW1vdiAgICAweDgoJXIxNSwlcmR4LDgpLCVy YXgKICAgIDExNTc6CTQ4IDhkIDcxIDA4ICAgICAgICAgIAlsZWEgICAgMHg4KCVyY3gpLCVyc2kK ICAgIDExNWI6CTQ4IDg5IDAzICAgICAgICAgICAgIAltb3YgICAgJXJheCwoJXJieCkKICAgIDEx NWU6CTQ4IDg5IDczIDA4ICAgICAgICAgIAltb3YgICAgJXJzaSwweDgoJXJieCkKICAgIDExNjI6 CTQ4IDg1IGMwICAgICAgICAgICAgIAl0ZXN0ICAgJXJheCwlcmF4CiAgICAxMTY1Ogk0OCA4OSA1 OSAwOCAgICAgICAgICAJbW92ICAgICVyYngsMHg4KCVyY3gpCiAgICAxMTY5Ogk3NCAwNCAgICAg ICAgICAgICAgICAJamUgICAgIDExNmYgPF9fdnhsYW5fc29ja19hZGQrMHgzMmY+CiAgICAxMTZi Ogk0OCA4OSA1OCAwOCAgICAgICAgICAJbW92ICAgICVyYngsMHg4KCVyYXgpCiAgICAxMTZmOgk0 YyA4OSBlZiAgICAgICAgICAgICAJbW92ICAgICVyMTMsJXJkaQogICAgMTE3MjoJZmYgMTQgMjUg MDAgMDAgMDAgMDAgCWNhbGxxICAqMHgwCiAgICAxMTc5OgkzMSBjMCAgICAgICAgICAgICAgICAJ eG9yICAgICVlYXgsJWVheAojZW5kaWYKCi8qIFZpcnR1YWwgTmV0d29yayBoYXNoIHRhYmxlIGhl YWQgKi8Kc3RhdGljIGlubGluZSBzdHJ1Y3QgaGxpc3RfaGVhZCAqdm5pX2hlYWQoc3RydWN0IHZ4 bGFuX3NvY2sgKnZzLCBfX2JlMzIgdm5pKQp7CglyZXR1cm4gJnZzLT52bmlfbGlzdFtoYXNoXzMy KChfX2ZvcmNlIHUzMil2bmksIFZOSV9IQVNIX0JJVFMpXTsKICAgIDExN2I6CTQ4IDhiIDc1IGQw ICAgICAgICAgIAltb3YgICAgLTB4MzAoJXJicCksJXJzaQogICAgMTE3ZjoJNjUgNDggMzMgMzQg MjUgMjggMDAgCXhvciAgICAlZ3M6MHgyOCwlcnNpCiAgICAxMTg2OgkwMCAwMCAKICAgIDExODg6 CTBmIDg1IGQyIDAwIDAwIDAwICAgIAlqbmUgICAgMTI2MCA8X192eGxhbl9zb2NrX2FkZCsweDQy MD4KCQkJCQlzdHJ1Y3QgaGxpc3RfaGVhZCAqaCkKewoJc3RydWN0IGhsaXN0X25vZGUgKmZpcnN0 ID0gaC0+Zmlyc3Q7CgoJbi0+bmV4dCA9IGZpcnN0OwoJbi0+cHByZXYgPSAmaC0+Zmlyc3Q7CiAg ICAxMThlOgk0OCA4MSBjNCA4OCAwMCAwMCAwMCAJYWRkICAgICQweDg4LCVyc3AKewoJc3dpdGNo IChzaXplKSB7CgljYXNlIDE6ICoodm9sYXRpbGUgX191OCAqKXAgPSAqKF9fdTggKilyZXM7IGJy ZWFrOwoJY2FzZSAyOiAqKHZvbGF0aWxlIF9fdTE2ICopcCA9ICooX191MTYgKilyZXM7IGJyZWFr OwoJY2FzZSA0OiAqKHZvbGF0aWxlIF9fdTMyICopcCA9ICooX191MzIgKilyZXM7IGJyZWFrOwoJ Y2FzZSA4OiAqKHZvbGF0aWxlIF9fdTY0ICopcCA9ICooX191NjQgKilyZXM7IGJyZWFrOwogICAg MTE5NToJNWIgICAgICAgICAgICAgICAgICAgCXBvcCAgICAlcmJ4CiAgICAxMTk2Ogk0MSA1YyAg ICAgICAgICAgICAgICAJcG9wICAgICVyMTIKICAgIDExOTg6CTQxIDVkICAgICAgICAgICAgICAg IAlwb3AgICAgJXIxMwoJcmN1X2Fzc2lnbl9wb2ludGVyKGhsaXN0X2ZpcnN0X3JjdShoKSwgbik7 CglpZiAoZmlyc3QpCiAgICAxMTlhOgk0MSA1ZSAgICAgICAgICAgICAgICAJcG9wICAgICVyMTQK CQlmaXJzdC0+cHByZXYgPSAmbi0+bmV4dDsKICAgIDExOWM6CTQxIDVmICAgICAgICAgICAgICAg IAlwb3AgICAgJXIxNQogICAgMTE5ZToJNWQgICAgICAgICAgICAgICAgICAgCXBvcCAgICAlcmJw CiAgICAxMTlmOgljMyAgICAgICAgICAgICAgICAgICAJcmV0cSAgIAogICAgMTFhMDoJNGMgODkg N2IgMjAgICAgICAgICAgCW1vdiAgICAlcjE1LDB4MjAoJXJieCkKICAgIDExYTQ6CWU5IDY5IGZm IGZmIGZmICAgICAgIAlqbXBxICAgMTExMiA8X192eGxhbl9zb2NrX2FkZCsweDJkMj4KCQl2eGxh bi0+dm42X3NvY2sgPSB2czsKCWVsc2UKI2VuZGlmCgkJdnhsYW4tPnZuNF9zb2NrID0gdnM7Cgl2 eGxhbl92c19hZGRfZGV2KHZzLCB2eGxhbik7CglyZXR1cm4gMDsKICAgIDExYTk6CTQ5IGM3IGM3 IGY0IGZmIGZmIGZmIAltb3YgICAgJDB4ZmZmZmZmZmZmZmZmZmZmNCwlcjE1Cn0KICAgIDExYjA6 CTQ0IDg5IGY4ICAgICAgICAgICAgIAltb3YgICAgJXIxNWQsJWVheAogICAgMTFiMzoJZWIgYzYg ICAgICAgICAgICAgICAgCWptcCAgICAxMTdiIDxfX3Z4bGFuX3NvY2tfYWRkKzB4MzNiPgogICAg MTFiNToJODUgZDIgICAgICAgICAgICAgICAgCXRlc3QgICAlZWR4LCVlZHgKICAgIDExYjc6CTc0 IDE3ICAgICAgICAgICAgICAgIAlqZSAgICAgMTFkMCA8X192eGxhbl9zb2NrX2FkZCsweDM5MD4K ICAgIDExYjk6CThkIDRhIDAxICAgICAgICAgICAgIAlsZWEgICAgMHgxKCVyZHgpLCVlY3gKICAg IDExYmM6CTg5IGQwICAgICAgICAgICAgICAgIAltb3YgICAgJWVkeCwlZWF4CiAgICAxMWJlOglm MCAwZiBiMSAwZSAgICAgICAgICAJbG9jayBjbXB4Y2hnICVlY3gsKCVyc2kpCiAgICAxMWMyOgkz OSBkMCAgICAgICAgICAgICAgICAJY21wICAgICVlZHgsJWVheAogICAgMTFjNDoJMGYgODQgMTgg ZmYgZmYgZmYgICAgCWplICAgICAxMGUyIDxfX3Z4bGFuX3NvY2tfYWRkKzB4MmEyPgogICAgMTFj YToJODkgYzIgICAgICAgICAgICAgICAgCW1vdiAgICAlZWF4LCVlZHgKICAgIDExY2M6CTg1IGQy ICAgICAgICAgICAgICAgIAl0ZXN0ICAgJWVkeCwlZWR4CiAgICAxMWNlOgk3NSBlOSAgICAgICAg ICAgICAgICAJam5lICAgIDExYjkgPF9fdnhsYW5fc29ja19hZGQrMHgzNzk+CiNpZiBJU19FTkFC TEVEKENPTkZJR19JUFY2KQoJaWYgKGlwdjYpCgkJdnhsYW4tPnZuNl9zb2NrID0gdnM7CgllbHNl CiNlbmRpZgoJCXZ4bGFuLT52bjRfc29jayA9IHZzOwogICAgMTFkMDoJNGMgODkgZTcgICAgICAg ICAgICAgCW1vdiAgICAlcjEyLCVyZGkKICAgIDExZDM6CWZmIDE0IDI1IDAwIDAwIDAwIDAwIAlj YWxscSAgKjB4MAoJdW5zaWduZWQgaW50IGg7CglzdHJ1Y3QgdWRwX3R1bm5lbF9zb2NrX2NmZyB0 dW5uZWxfY2ZnOwoKCXZzID0ga3phbGxvYyhzaXplb2YoKnZzKSwgR0ZQX0tFUk5FTCk7CglpZiAo IXZzKQoJCXJldHVybiBFUlJfUFRSKC1FTk9NRU0pOwogICAgMTFkYToJYjggZjAgZmYgZmYgZmYg ICAgICAgCW1vdiAgICAkMHhmZmZmZmZmMCwlZWF4CiAgICAxMWRmOgllYiA5YSAgICAgICAgICAg ICAgICAJam1wICAgIDExN2IgPF9fdnhsYW5fc29ja19hZGQrMHgzM2I+Cgl9CglpZiAoIXZzKQoJ CXZzID0gdnhsYW5fc29ja2V0X2NyZWF0ZSh2eGxhbi0+bmV0LCBpcHY2LAoJCQkJCSB2eGxhbi0+ Y2ZnLmRzdF9wb3J0LCB2eGxhbi0+ZmxhZ3MpOwoJaWYgKElTX0VSUih2cykpCgkJcmV0dXJuIFBU Ul9FUlIodnMpOwogICAgMTFlMToJOGIgODUgNjggZmYgZmYgZmYgICAgCW1vdiAgICAtMHg5OCgl cmJwKSwlZWF4CnN0YXRpYyBfX2Fsd2F5c19pbmxpbmUgaW50IF9fYXRvbWljX2FkZF91bmxlc3Mo YXRvbWljX3QgKnYsIGludCBhLCBpbnQgdSkKewoJaW50IGMsIG9sZDsKCWMgPSBhdG9taWNfcmVh ZCh2KTsKCWZvciAoOzspIHsKCQlpZiAodW5saWtlbHkoYyA9PSAodSkpKQogICAgMTFlNzoJMGYg YjYgNTUgY2MgICAgICAgICAgCW1vdnpibCAtMHgzNCglcmJwKSwlZWR4CgkJCWJyZWFrOwoJCW9s ZCA9IGF0b21pY19jbXB4Y2hnKCh2KSwgYywgYyArIChhKSk7CiAgICAxMWViOgk0YyA4OSBmNyAg ICAgICAgICAgICAJbW92ICAgICVyMTQsJXJkaQoJcmV0dXJuIHhhZGQoJnYtPmNvdW50ZXIsIC1p KTsKfQoKc3RhdGljIF9fYWx3YXlzX2lubGluZSBpbnQgYXRvbWljX2NtcHhjaGcoYXRvbWljX3Qg KnYsIGludCBvbGQsIGludCBuZXcpCnsKCXJldHVybiBjbXB4Y2hnKCZ2LT5jb3VudGVyLCBvbGQs IG5ldyk7CiAgICAxMWVlOgljNiA0NSBhNCAwYSAgICAgICAgICAJbW92YiAgICQweGEsLTB4NWMo JXJicCkKCWMgPSBhdG9taWNfcmVhZCh2KTsKCWZvciAoOzspIHsKCQlpZiAodW5saWtlbHkoYyA9 PSAodSkpKQoJCQlicmVhazsKCQlvbGQgPSBhdG9taWNfY21weGNoZygodiksIGMsIGMgKyAoYSkp OwoJCWlmIChsaWtlbHkob2xkID09IGMpKQogICAgMTFmMjoJNjYgNDQgODkgNjUgYzggICAgICAg CW1vdiAgICAlcjEydywtMHgzOCglcmJwKQogICAgMTFmNzoJYzEgZTggMDggICAgICAgICAgICAg CXNociAgICAkMHg4LCVlYXgKICAgIDExZmE6CTgzIGYwIDAxICAgICAgICAgICAgIAl4b3IgICAg JDB4MSwlZWF4CnN0YXRpYyBfX2Fsd2F5c19pbmxpbmUgaW50IF9fYXRvbWljX2FkZF91bmxlc3Mo YXRvbWljX3QgKnYsIGludCBhLCBpbnQgdSkKewoJaW50IGMsIG9sZDsKCWMgPSBhdG9taWNfcmVh ZCh2KTsKCWZvciAoOzspIHsKCQlpZiAodW5saWtlbHkoYyA9PSAodSkpKQogICAgMTFmZDoJODMg ZTIgZmIgICAgICAgICAgICAgCWFuZCAgICAkMHhmZmZmZmZmYiwlZWR4CiAgICAxMjAwOgk4MyBl MCAwMSAgICAgICAgICAgICAJYW5kICAgICQweDEsJWVheAogICAgMTIwMzoJYzEgZTAgMDIgICAg ICAgICAgICAgCXNobCAgICAkMHgyLCVlYXgKICAgIDEyMDY6CTA5IGQwICAgICAgICAgICAgICAg IAlvciAgICAgJWVkeCwlZWF4CiAgICAxMjA4Ogk4MyBjOCAwOCAgICAgICAgICAgICAJb3IgICAg ICQweDgsJWVheAoJCXNwaW5fbG9jaygmdm4tPnNvY2tfbG9jayk7CgkJdnMgPSB2eGxhbl9maW5k X3NvY2sodnhsYW4tPm5ldCwgaXB2NiA/IEFGX0lORVQ2IDogQUZfSU5FVCwKCQkJCSAgICAgdnhs YW4tPmNmZy5kc3RfcG9ydCwgdnhsYW4tPmZsYWdzKTsKCQlpZiAodnMgJiYgIWF0b21pY19hZGRf dW5sZXNzKCZ2cy0+cmVmY250LCAxLCAwKSkgewoJCQlzcGluX3VubG9jaygmdm4tPnNvY2tfbG9j ayk7CgkJCXJldHVybiAtRUJVU1k7CiAgICAxMjBiOgk4OCA0NSBjYyAgICAgICAgICAgICAJbW92 ICAgICVhbCwtMHgzNCglcmJwKQogICAgMTIwZToJNDggOGQgODUgNzAgZmYgZmYgZmYgCWxlYSAg ICAtMHg5MCglcmJwKSwlcmF4CgoJbWVtc2V0KCZ1ZHBfY29uZiwgMCwgc2l6ZW9mKHVkcF9jb25m KSk7CgoJaWYgKGlwdjYpIHsKCQl1ZHBfY29uZi5mYW1pbHkgPSBBRl9JTkVUNjsKCQl1ZHBfY29u Zi51c2VfdWRwNl9yeF9jaGVja3N1bXMgPQogICAgMTIxNToJNDggODkgYzIgICAgICAgICAgICAg CW1vdiAgICAlcmF4LCVyZHgKICAgIDEyMTg6CTQ4IDg5IDg1IDYwIGZmIGZmIGZmIAltb3YgICAg JXJheCwtMHhhMCglcmJwKQoJaW50IGVycjsKCgltZW1zZXQoJnVkcF9jb25mLCAwLCBzaXplb2Yo dWRwX2NvbmYpKTsKCglpZiAoaXB2NikgewoJCXVkcF9jb25mLmZhbWlseSA9IEFGX0lORVQ2Owog ICAgMTIxZjoJZTggMDAgMDAgMDAgMDAgICAgICAgCWNhbGxxICAxMjI0IDxfX3Z4bGFuX3NvY2tf YWRkKzB4M2U0PgoJCXVkcF9jb25mLmlwdjZfdjZvbmx5ID0gMTsKCX0gZWxzZSB7CgkJdWRwX2Nv bmYuZmFtaWx5ID0gQUZfSU5FVDsKCX0KCgl1ZHBfY29uZi5sb2NhbF91ZHBfcG9ydCA9IHBvcnQ7 CiAgICAxMjI0OgllOSAxZSBmZCBmZiBmZiAgICAgICAJam1wcSAgIGY0NyA8X192eGxhbl9zb2Nr X2FkZCsweDEwNz4KCgltZW1zZXQoJnVkcF9jb25mLCAwLCBzaXplb2YodWRwX2NvbmYpKTsKCglp ZiAoaXB2NikgewoJCXVkcF9jb25mLmZhbWlseSA9IEFGX0lORVQ2OwoJCXVkcF9jb25mLnVzZV91 ZHA2X3J4X2NoZWNrc3VtcyA9CiAgICAxMjI5Ogk0NCA4OSBlNiAgICAgICAgICAgICAJbW92ICAg ICVyMTJkLCVlc2kKICAgIDEyMmM6CTRjIDg5IGRhICAgICAgICAgICAgIAltb3YgICAgJXIxMSwl cmR4CiAgICAxMjJmOgk0OCBjNyBjNyAwMCAwMCAwMCAwMCAJbW92ICAgICQweDAsJXJkaQogICAg MTIzNjoJNjYgYzEgYzYgMDggICAgICAgICAgCXJvbCAgICAkMHg4LCVzaQoJCSAgICAhKGZsYWdz ICYgVlhMQU5fRl9VRFBfWkVST19DU1VNNl9SWCk7CgkJdWRwX2NvbmYuaXB2Nl92Nm9ubHkgPSAx OwogICAgMTIzYToJNGMgODkgOWQgNjggZmYgZmYgZmYgCW1vdiAgICAlcjExLC0weDk4KCVyYnAp CgoJaWYgKGNmZy0+ZmFtaWx5ID09IEFGX0lORVQ2KQoJCXJldHVybiB1ZHBfc29ja19jcmVhdGU2 KG5ldCwgY2ZnLCBzb2NrcCk7CiAgICAxMjQxOgkwZiBiNyBmNiAgICAgICAgICAgICAJbW92ends ICVzaSwlZXNpCiAgICAxMjQ0OgllOCAwMCAwMCAwMCAwMCAgICAgICAJY2FsbHEgIDEyNDkgPF9f dnhsYW5fc29ja19hZGQrMHg0MDk+CiAgICAxMjQ5Ogk0YyA4OSBmZiAgICAgICAgICAgICAJbW92 ICAgICVyMTUsJXJkaQogICAgMTI0YzoJZTggMDAgMDAgMDAgMDAgICAgICAgCWNhbGxxICAxMjUx IDxfX3Z4bGFuX3NvY2tfYWRkKzB4NDExPgogICAgMTI1MToJNGMgOGIgOWQgNjggZmYgZmYgZmYg CW1vdiAgICAtMHg5OCglcmJwKSwlcjExCiAgICAxMjU4Ogk0ZCA4OSBkZiAgICAgICAgICAgICAJ bW92ICAgICVyMTEsJXIxNQoJZm9yIChoID0gMDsgaCA8IFZOSV9IQVNIX1NJWkU7ICsraCkKCQlJ TklUX0hMSVNUX0hFQUQoJnZzLT52bmlfbGlzdFtoXSk7CgoJc29jayA9IHZ4bGFuX2NyZWF0ZV9z b2NrKG5ldCwgaXB2NiwgcG9ydCwgZmxhZ3MpOwoJaWYgKElTX0VSUihzb2NrKSkgewoJCXByX2lu Zm8oIkNhbm5vdCBiaW5kIHBvcnQgJWQsIGVycj0lbGRcbiIsIG50b2hzKHBvcnQpLAogICAgMTI1 YjoJZTkgOTggZmUgZmYgZmYgICAgICAgCWptcHEgICAxMGY4IDxfX3Z4bGFuX3NvY2tfYWRkKzB4 MmI4PgogICAgMTI2MDoJZTggMDAgMDAgMDAgMDAgICAgICAgCWNhbGxxICAxMjY1IDxfX3Z4bGFu X3NvY2tfYWRkKzB4NDI1PgogICAgMTI2NToJNGMgNjMgZDggICAgICAgICAgICAgCW1vdnNscSAl ZWF4LCVyMTEKICAgIDEyNjg6CWU5IGU5IGZjIGZmIGZmICAgICAgIAlqbXBxICAgZjU2IDxfX3Z4 bGFuX3NvY2tfYWRkKzB4MTE2PgogICAgMTI2ZDoJOGIgMDUgMDAgMDAgMDAgMDAgICAgCW1vdiAg ICAweDAoJXJpcCksJWVheCAgICAgICAgIyAxMjczIDxfX3Z4bGFuX3NvY2tfYWRkKzB4NDMzPgog ICAgMTI3MzoJNGMgOGIgNzMgMzggICAgICAgICAgCW1vdiAgICAweDM4KCVyYngpLCVyMTQKICAg IDEyNzc6CTgzIGU4IDAxICAgICAgICAgICAgIAlzdWIgICAgJDB4MSwlZWF4CgkJCVBUUl9FUlIo c29jaykpOwoJCWtmcmVlKHZzKTsKICAgIDEyN2E6CWU5IDEwIGZjIGZmIGZmICAgICAgIAlqbXBx ICAgZThmIDxfX3Z4bGFuX3NvY2tfYWRkKzB4NGY+CiAgICAxMjdmOgk5MCAgICAgICAgICAgICAg ICAgICAJbm9wCgowMDAwMDAwMDAwMDAxMjgwIDx2eGxhbl9vcGVuPjoKICAgIDEyODA6CWU4IDAw IDAwIDAwIDAwICAgICAgIAljYWxscSAgMTI4NSA8dnhsYW5fb3BlbisweDU+CiAgICAxMjg1Ogk1 NSAgICAgICAgICAgICAgICAgICAJcHVzaCAgICVyYnAKICAgIDEyODY6CTQ4IDg5IGU1ICAgICAg ICAgICAgIAltb3YgICAgJXJzcCwlcmJwCiAgICAxMjg5Ogk0MSA1NyAgICAgICAgICAgICAgICAJ cHVzaCAgICVyMTUKICAgIDEyOGI6CTQxIDU2ICAgICAgICAgICAgICAgIAlwdXNoICAgJXIxNAog ICAgMTI4ZDoJNDEgNTUgICAgICAgICAgICAgICAgCXB1c2ggICAlcjEzCiAgICAxMjhmOgk0MSA1 NCAgICAgICAgICAgICAgICAJcHVzaCAgICVyMTIKCWVsc2UKI2VuZGlmCgkJdnhsYW4tPnZuNF9z b2NrID0gdnM7Cgl2eGxhbl92c19hZGRfZGV2KHZzLCB2eGxhbik7CglyZXR1cm4gMDsKfQogICAg MTI5MToJNGMgOGQgYmYgNDAgMDggMDAgMDAgCWxlYSAgICAweDg0MCglcmRpKSwlcjE1CiAgICAx Mjk4Ogk1MyAgICAgICAgICAgICAgICAgICAJcHVzaCAgICVyYngKICAgIDEyOTk6CTQ4IDg5IGZi ICAgICAgICAgICAgIAltb3YgICAgJXJkaSwlcmJ4CiAgICAxMjljOgk0OCA4MyBlYyAxOCAgICAg ICAgICAJc3ViICAgICQweDE4LCVyc3AKICAgIDEyYTA6CTQ4IGM3IDg3IDYwIDA4IDAwIDAwIAlt b3ZxICAgJDB4MCwweDg2MCglcmRpKQogICAgMTJhNzoJMDAgMDAgMDAgMDAgCiAgICAxMmFiOgk0 OCBjNyA4NyA2OCAwOCAwMCAwMCAJbW92cSAgICQweDAsMHg4NjgoJXJkaSkKICAgIDEyYjI6CTAw IDAwIDAwIDAwIAoJZnJlZV9wZXJjcHUoZGV2LT50c3RhdHMpOwp9CgovKiBTdGFydCBhZ2Vpbmcg dGltZXIgYW5kIGpvaW4gZ3JvdXAgd2hlbiBkZXZpY2UgaXMgYnJvdWdodCB1cCAqLwpzdGF0aWMg aW50IHZ4bGFuX29wZW4oc3RydWN0IG5ldF9kZXZpY2UgKmRldikKewogICAgMTJiNjoJNjUgNDgg OGIgMDQgMjUgMjggMDAgCW1vdiAgICAlZ3M6MHgyOCwlcmF4CiAgICAxMmJkOgkwMCAwMCAKICAg IDEyYmY6CTQ4IDg5IDQ1IGQwICAgICAgICAgIAltb3YgICAgJXJheCwtMHgzMCglcmJwKQogKgog KiBHZXQgbmV0d29yayBkZXZpY2UgcHJpdmF0ZSBkYXRhCiAqLwpzdGF0aWMgaW5saW5lIHZvaWQg Km5ldGRldl9wcml2KGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCnsKCXJldHVybiAoY2hh ciAqKWRldiArIEFMSUdOKHNpemVvZihzdHJ1Y3QgbmV0X2RldmljZSksIE5FVERFVl9BTElHTik7 CiAgICAxMmMzOgkzMSBjMCAgICAgICAgICAgICAgICAJeG9yICAgICVlYXgsJWVheAogICAgMTJj NToJOGIgODcgZDggMDggMDAgMDAgICAgCW1vdiAgICAweDhkOCglcmRpKSwlZWF4CiAgICAxMmNi Ogk0MSA4OSBjNSAgICAgICAgICAgICAJbW92ICAgICVlYXgsJXIxM2QKICAgIDEyY2U6CTQxIGMx IGVkIDBkICAgICAgICAgIAlzaHIgICAgJDB4ZCwlcjEzZAp7Cglib29sIGlwdjYgPSB2eGxhbi0+ ZmxhZ3MgJiBWWExBTl9GX0lQVjY7Cglib29sIG1ldGFkYXRhID0gdnhsYW4tPmZsYWdzICYgVlhM QU5fRl9DT0xMRUNUX01FVEFEQVRBOwoJaW50IHJldCA9IDA7CgoJdnhsYW4tPnZuNF9zb2NrID0g TlVMTDsKICAgIDEyZDI6CTQxIDgzIGU1IDAxICAgICAgICAgIAlhbmQgICAgJDB4MSwlcjEzZAog ICAgMTJkNjoJODMgZTAgMjAgICAgICAgICAgICAgCWFuZCAgICAkMHgyMCwlZWF4CiAgICAxMmQ5 Ogk0MSA4OSBjNCAgICAgICAgICAgICAJbW92ICAgICVlYXgsJXIxMmQKI2lmIElTX0VOQUJMRUQo Q09ORklHX0lQVjYpCgl2eGxhbi0+dm42X3NvY2sgPSBOVUxMOwogICAgMTJkYzoJMGYgODUgOTQg MDAgMDAgMDAgICAgCWpuZSAgICAxMzc2IDx2eGxhbl9vcGVuKzB4ZjY+CiAgICAxMmUyOgk0NSA4 NCBlZCAgICAgICAgICAgICAJdGVzdCAgICVyMTNiLCVyMTNiCiAgICAxMmU1OgkwZiA4NSA4YiAw MCAwMCAwMCAgICAJam5lICAgIDEzNzYgPHZ4bGFuX29wZW4rMHhmNj4KCWZyZWVfcGVyY3B1KGRl di0+dHN0YXRzKTsKfQoKLyogU3RhcnQgYWdlaW5nIHRpbWVyIGFuZCBqb2luIGdyb3VwIHdoZW4g ZGV2aWNlIGlzIGJyb3VnaHQgdXAgKi8Kc3RhdGljIGludCB2eGxhbl9vcGVuKHN0cnVjdCBuZXRf ZGV2aWNlICpkZXYpCnsKICAgIDEyZWI6CTQ1IDg1IGU0ICAgICAgICAgICAgIAl0ZXN0ICAgJXIx MmQsJXIxMmQKICAgIDEyZWU6CTBmIDg0IDNmIDAxIDAwIDAwICAgIAlqZSAgICAgMTQzMyA8dnhs YW5fb3BlbisweDFiMz4KICAgIDEyZjQ6CTQ1IDg0IGVkICAgICAgICAgICAgIAl0ZXN0ICAgJXIx M2IsJXIxM2IKCXJldHVybiAwOwp9CgpzdGF0aWMgaW50IHZ4bGFuX3NvY2tfYWRkKHN0cnVjdCB2 eGxhbl9kZXYgKnZ4bGFuKQp7Cglib29sIGlwdjYgPSB2eGxhbi0+ZmxhZ3MgJiBWWExBTl9GX0lQ VjY7CiAgICAxMmY3OgkwZiA4NSAzNiAwMSAwMCAwMCAgICAJam5lICAgIDE0MzMgPHZ4bGFuX29w ZW4rMHgxYjM+Cglib29sIG1ldGFkYXRhID0gdnhsYW4tPmZsYWdzICYgVlhMQU5fRl9DT0xMRUNU X01FVEFEQVRBOwogICAgMTJmZDoJNDUgMzEgZjYgICAgICAgICAgICAgCXhvciAgICAlcjE0ZCwl cjE0ZAogICAgMTMwMDoJMGYgYjcgODMgODAgMDggMDAgMDAgCW1vdnp3bCAweDg4MCglcmJ4KSwl ZWF4CglpbnQgcmV0ID0gMDsKCgl2eGxhbi0+dm40X3NvY2sgPSBOVUxMOwojaWYgSVNfRU5BQkxF RChDT05GSUdfSVBWNikKCXZ4bGFuLT52bjZfc29jayA9IE5VTEw7CglpZiAoaXB2NiB8fCBtZXRh ZGF0YSkKICAgIDEzMDc6CTY2IDgzIGY4IDBhICAgICAgICAgIAljbXAgICAgJDB4YSwlYXgKICAg IDEzMGI6CTBmIDg0IDliIDAwIDAwIDAwICAgIAlqZSAgICAgMTNhYyA8dnhsYW5fb3BlbisweDEy Yz4KICAgIDEzMTE6CThiIDkzIDg0IDA4IDAwIDAwICAgIAltb3YgICAgMHg4ODQoJXJieCksJWVk eAogICAgMTMxNzoJODkgZDEgICAgICAgICAgICAgICAgCW1vdiAgICAlZWR4LCVlY3gKICAgIDEz MTk6CTgxIGUxIGYwIDAwIDAwIDAwICAgIAlhbmQgICAgJDB4ZjAsJWVjeAoJCXJldCA9IF9fdnhs YW5fc29ja19hZGQodnhsYW4sIHRydWUpOwojZW5kaWYKCWlmICghcmV0ICYmICghaXB2NiB8fCBt ZXRhZGF0YSkpCiAgICAxMzFmOgk4MSBmOSBlMCAwMCAwMCAwMCAgICAJY21wICAgICQweGUwLCVl Y3gKICAgIDEzMjU6CTBmIDg0IDljIDAwIDAwIDAwICAgIAlqZSAgICAgMTNjNyA8dnhsYW5fb3Bl bisweDE0Nz4KICAgIDEzMmI6CTQ4IDgzIGJiIDkwIDA5IDAwIDAwIAljbXBxICAgJDB4MCwweDk5 MCglcmJ4KQogICAgMTMzMjoJMDAgCgkJcmV0dXJuIGlwYS0+c2luLnNpbl9hZGRyLnNfYWRkciA9 PSBodG9ubChJTkFERFJfQU5ZKTsKfQoKc3RhdGljIGlubGluZSBib29sIHZ4bGFuX2FkZHJfbXVs dGljYXN0KGNvbnN0IHVuaW9uIHZ4bGFuX2FkZHIgKmlwYSkKewoJaWYgKGlwYS0+c2Euc2FfZmFt aWx5ID09IEFGX0lORVQ2KQogICAgMTMzMzoJNzUgMjUgICAgICAgICAgICAgICAgCWpuZSAgICAx MzVhIDx2eGxhbl9vcGVuKzB4ZGE+CiAgICAxMzM1Ogk0OCA4YiA1NSBkMCAgICAgICAgICAJbW92 ICAgIC0weDMwKCVyYnApLCVyZHgKICAgIDEzMzk6CTY1IDQ4IDMzIDE0IDI1IDI4IDAwIAl4b3Ig ICAgJWdzOjB4MjgsJXJkeAogICAgMTM0MDoJMDAgMDAgCgkJcmV0dXJuIGlwdjZfYWRkcl9pc19t dWx0aWNhc3QoJmlwYS0+c2luNi5zaW42X2FkZHIpOwoJZWxzZQoJCXJldHVybiBJTl9NVUxUSUNB U1QobnRvaGwoaXBhLT5zaW4uc2luX2FkZHIuc19hZGRyKSk7CiAgICAxMzQyOgk0NCA4OSBmMCAg ICAgICAgICAgICAJbW92ICAgICVyMTRkLCVlYXgKICAgIDEzNDU6CTBmIDg1IDNiIDAxIDAwIDAw ICAgIAlqbmUgICAgMTQ4NiA8dnhsYW5fb3BlbisweDIwNj4KCglyZXQgPSB2eGxhbl9zb2NrX2Fk ZCh2eGxhbik7CglpZiAocmV0IDwgMCkKCQlyZXR1cm4gcmV0OwoKCWlmICh2eGxhbl9hZGRyX211 bHRpY2FzdCgmdnhsYW4tPmRlZmF1bHRfZHN0LnJlbW90ZV9pcCkpIHsKICAgIDEzNGI6CTQ4IDgz IGM0IDE4ICAgICAgICAgIAlhZGQgICAgJDB4MTgsJXJzcAogICAgMTM0ZjoJNWIgICAgICAgICAg ICAgICAgICAgCXBvcCAgICAlcmJ4CiAgICAxMzUwOgk0MSA1YyAgICAgICAgICAgICAgICAJcG9w ICAgICVyMTIKICAgIDEzNTI6CTQxIDVkICAgICAgICAgICAgICAgIAlwb3AgICAgJXIxMwogICAg MTM1NDoJNDEgNWUgICAgICAgICAgICAgICAgCXBvcCAgICAlcjE0CiAgICAxMzU2Ogk0MSA1ZiAg ICAgICAgICAgICAgICAJcG9wICAgICVyMTUKICAgIDEzNTg6CTVkICAgICAgICAgICAgICAgICAg IAlwb3AgICAgJXJicAogICAgMTM1OToJYzMgICAgICAgICAgICAgICAgICAgCXJldHEgICAKICAg IDEzNWE6CTQ4IDhiIDM1IDAwIDAwIDAwIDAwIAltb3YgICAgMHgwKCVyaXApLCVyc2kgICAgICAg ICMgMTM2MSA8dnhsYW5fb3BlbisweGUxPgoJCQl2eGxhbl9zb2NrX3JlbGVhc2UodnhsYW4pOwoJ CQlyZXR1cm4gcmV0OwoJCX0KCX0KCglpZiAodnhsYW4tPmNmZy5hZ2VfaW50ZXJ2YWwpCiAgICAx MzYxOgk0OCA4ZCBiYiBlMCAwOCAwMCAwMCAJbGVhICAgIDB4OGUwKCVyYngpLCVyZGkKCQltb2Rf dGltZXIoJnZ4bGFuLT5hZ2VfdGltZXIsIGppZmZpZXMgKyBGREJfQUdFX0lOVEVSVkFMKTsKCgly ZXR1cm4gcmV0Owp9CiAgICAxMzY4Ogk0OCA4MSBjNiBjNCAwOSAwMCAwMCAJYWRkICAgICQweDlj NCwlcnNpCiAgICAxMzZmOgllOCAwMCAwMCAwMCAwMCAgICAgICAJY2FsbHEgIDEzNzQgPHZ4bGFu X29wZW4rMHhmND4KICAgIDEzNzQ6CWViIGJmICAgICAgICAgICAgICAgIAlqbXAgICAgMTMzNSA8 dnhsYW5fb3BlbisweGI1PgogICAgMTM3NjoJYmUgMDEgMDAgMDAgMDAgICAgICAgCW1vdiAgICAk MHgxLCVlc2kKICAgIDEzN2I6CTRjIDg5IGZmICAgICAgICAgICAgIAltb3YgICAgJXIxNSwlcmRp CiAgICAxMzdlOgllOCBiZCBmYSBmZiBmZiAgICAgICAJY2FsbHEgIGU0MCA8X192eGxhbl9zb2Nr X2FkZD4KICAgIDEzODM6CTg1IGMwICAgICAgICAgICAgICAgIAl0ZXN0ICAgJWVheCwlZWF4CiAg ICAxMzg1Ogk0MSA4OSBjNiAgICAgICAgICAgICAJbW92ICAgICVlYXgsJXIxNGQKICAgIDEzODg6 CTBmIDg0IDVkIGZmIGZmIGZmICAgIAlqZSAgICAgMTJlYiA8dnhsYW5fb3BlbisweDZiPgoJCQly ZXR1cm4gcmV0OwoJCX0KCX0KCglpZiAodnhsYW4tPmNmZy5hZ2VfaW50ZXJ2YWwpCgkJbW9kX3Rp bWVyKCZ2eGxhbi0+YWdlX3RpbWVyLCBqaWZmaWVzICsgRkRCX0FHRV9JTlRFUlZBTCk7CiAgICAx MzhlOgk0NSA4NSBmNiAgICAgICAgICAgICAJdGVzdCAgICVyMTRkLCVyMTRkCiAgICAxMzkxOgkw ZiA4OSA2OSBmZiBmZiBmZiAgICAJam5zICAgIDEzMDAgPHZ4bGFuX29wZW4rMHg4MD4KICAgIDEz OTc6CTQ4IDhkIGIzIDY4IDA4IDAwIDAwIAlsZWEgICAgMHg4NjgoJXJieCksJXJzaQogICAgMTM5 ZToJNDggOGQgYmIgNjAgMDggMDAgMDAgCWxlYSAgICAweDg2MCglcmJ4KSwlcmRpCiAgICAxM2E1 OgllOCBlNiBmOCBmZiBmZiAgICAgICAJY2FsbHEgIGM5MCA8dnhsYW5fc29ja19yZWxlYXNlLmlz cmEuNDQ+CgoJdnhsYW4tPnZuNF9zb2NrID0gTlVMTDsKI2lmIElTX0VOQUJMRUQoQ09ORklHX0lQ VjYpCgl2eGxhbi0+dm42X3NvY2sgPSBOVUxMOwoJaWYgKGlwdjYgfHwgbWV0YWRhdGEpCgkJcmV0 ID0gX192eGxhbl9zb2NrX2FkZCh2eGxhbiwgdHJ1ZSk7CiAgICAxM2FhOgllYiA4OSAgICAgICAg ICAgICAgICAJam1wICAgIDEzMzUgPHZ4bGFuX29wZW4rMHhiNT4KICAgIDEzYWM6CTBmIGI2IDgz IDg4IDA4IDAwIDAwIAltb3Z6YmwgMHg4ODgoJXJieCksJWVheAojZW5kaWYKCWlmICghcmV0ICYm ICghaXB2NiB8fCBtZXRhZGF0YSkpCiAgICAxM2IzOgkzZCBmZiAwMCAwMCAwMCAgICAgICAJY21w ICAgICQweGZmLCVlYXgKICAgIDEzYjg6CTBmIDg1IDZkIGZmIGZmIGZmICAgIAlqbmUgICAgMTMy YiA8dnhsYW5fb3BlbisweGFiPgoJCXJldCA9IF9fdnhsYW5fc29ja19hZGQodnhsYW4sIGZhbHNl KTsKCWlmIChyZXQgPCAwKQogICAgMTNiZToJNDQgOGIgYWIgYTQgMDggMDAgMDAgCW1vdiAgICAw eDhhNCglcmJ4KSwlcjEzZAogICAgMTNjNToJZWIgMGQgICAgICAgICAgICAgICAgCWptcCAgICAx M2Q0IDx2eGxhbl9vcGVuKzB4MTU0PgogICAgMTNjNzoJNjYgODMgZjggMDIgICAgICAgICAgCWNt cCAgICAkMHgyLCVheAogICAgMTNjYjoJNDQgOGIgYWIgYTQgMDggMDAgMDAgCW1vdiAgICAweDhh NCglcmJ4KSwlcjEzZAogICAgMTNkMjoJNzQgNzEgICAgICAgICAgICAgICAgCWplICAgICAxNDQ1 IDx2eGxhbl9vcGVuKzB4MWM1PgogICAgMTNkNDoJNDggOGIgODMgNjggMDggMDAgMDAgCW1vdiAg ICAweDg2OCglcmJ4KSwlcmF4CgkJcmV0ID0gdnhsYW5faWdtcF9qb2luKHZ4bGFuKTsKCQlpZiAo cmV0ID09IC1FQUREUklOVVNFKQoJCQlyZXQgPSAwOwoJCWlmIChyZXQpIHsKCQkJdnhsYW5fc29j a19yZWxlYXNlKHZ4bGFuKTsKCQkJcmV0dXJuIHJldDsKICAgIDEzZGI6CTMxIGY2ICAgICAgICAg ICAgICAgIAl4b3IgICAgJWVzaSwlZXNpCgoJcmV0ID0gdnhsYW5fc29ja19hZGQodnhsYW4pOwoJ aWYgKHJldCA8IDApCgkJcmV0dXJuIHJldDsKCglpZiAodnhsYW5fYWRkcl9tdWx0aWNhc3QoJnZ4 bGFuLT5kZWZhdWx0X2RzdC5yZW1vdGVfaXApKSB7CiAgICAxM2RkOgk0OCA4YiA0MCAxMCAgICAg ICAgICAJbW92ICAgIDB4MTAoJXJheCksJXJheAogICAgMTNlMToJNGMgOGIgNjAgMjAgICAgICAg ICAgCW1vdiAgICAweDIwKCVyYXgpLCVyMTIKICAgIDEzZTU6CTRjIDg5IGU3ICAgICAgICAgICAg IAltb3YgICAgJXIxMiwlcmRpCiAgICAxM2U4OgllOCAwMCAwMCAwMCAwMCAgICAgICAJY2FsbHEg IDEzZWQgPHZ4bGFuX29wZW4rMHgxNmQ+CiAgICAxM2VkOgk0OCA4YiAwNSAwMCAwMCAwMCAwMCAJ bW92ICAgIDB4MCglcmlwKSwlcmF4ICAgICAgICAjIDEzZjQgPHZ4bGFuX29wZW4rMHgxNzQ+CiAq LwpzdGF0aWMgaW50IHZ4bGFuX2lnbXBfam9pbihzdHJ1Y3QgdnhsYW5fZGV2ICp2eGxhbikKewoJ c3RydWN0IHNvY2sgKnNrOwoJdW5pb24gdnhsYW5fYWRkciAqaXAgPSAmdnhsYW4tPmRlZmF1bHRf ZHN0LnJlbW90ZV9pcDsKCWludCBpZmluZGV4ID0gdnhsYW4tPmRlZmF1bHRfZHN0LnJlbW90ZV9p ZmluZGV4OwogICAgMTNmNDoJNGMgODkgZTcgICAgICAgICAgICAgCW1vdiAgICAlcjEyLCVyZGkK CWludCByZXQgPSAtRUlOVkFMOwoKCWlmIChpcC0+c2Euc2FfZmFtaWx5ID09IEFGX0lORVQpIHsK ICAgIDEzZjc6CTQ4IDhkIDkzIDg4IDA4IDAwIDAwIAlsZWEgICAgMHg4ODgoJXJieCksJXJkeAog Ki8Kc3RhdGljIGludCB2eGxhbl9pZ21wX2pvaW4oc3RydWN0IHZ4bGFuX2RldiAqdnhsYW4pCnsK CXN0cnVjdCBzb2NrICpzazsKCXVuaW9uIHZ4bGFuX2FkZHIgKmlwID0gJnZ4bGFuLT5kZWZhdWx0 X2RzdC5yZW1vdGVfaXA7CglpbnQgaWZpbmRleCA9IHZ4bGFuLT5kZWZhdWx0X2RzdC5yZW1vdGVf aWZpbmRleDsKICAgIDEzZmU6CTQ0IDg5IGVlICAgICAgICAgICAgIAltb3YgICAgJXIxM2QsJWVz aQogICAgMTQwMToJZmYgMTAgICAgICAgICAgICAgICAgCWNhbGxxICAqKCVyYXgpCglpbnQgcmV0 ID0gLUVJTlZBTDsKCglpZiAoaXAtPnNhLnNhX2ZhbWlseSA9PSBBRl9JTkVUKSB7CiAgICAxNDAz Ogk0YyA4OSBlNyAgICAgICAgICAgICAJbW92ICAgICVyMTIsJXJkaQoJCWxvY2tfc29jayhzayk7 CgkJcmV0ID0gaXBfbWNfam9pbl9ncm91cChzaywgJm1yZXEpOwoJCXJlbGVhc2Vfc29jayhzayk7 CiNpZiBJU19FTkFCTEVEKENPTkZJR19JUFY2KQoJfSBlbHNlIHsKCQlzayA9IHZ4bGFuLT52bjZf c29jay0+c29jay0+c2s7CiAgICAxNDA2Ogk0MSA4OSBjNiAgICAgICAgICAgICAJbW92ICAgICVl YXgsJXIxNGQKICAgIDE0MDk6CWU4IDAwIDAwIDAwIDAwICAgICAgIAljYWxscSAgMTQwZSA8dnhs YW5fb3BlbisweDE4ZT4KICAgIDE0MGU6CTQxIDgzIGZlIDllICAgICAgICAgIAljbXAgICAgJDB4 ZmZmZmZmOWUsJXIxNGQKICAgIDE0MTI6CTc0IDA5ICAgICAgICAgICAgICAgIAlqZSAgICAgMTQx ZCA8dnhsYW5fb3BlbisweDE5ZD4KICAgIDE0MTQ6CTQ1IDg1IGY2ICAgICAgICAgICAgIAl0ZXN0 ICAgJXIxNGQsJXIxNGQKCnZvaWQgbG9ja19zb2NrX25lc3RlZChzdHJ1Y3Qgc29jayAqc2ssIGlu dCBzdWJjbGFzcyk7CgpzdGF0aWMgaW5saW5lIHZvaWQgbG9ja19zb2NrKHN0cnVjdCBzb2NrICpz aykKewoJbG9ja19zb2NrX25lc3RlZChzaywgMCk7CiAgICAxNDE3OgkwZiA4NSA3YSBmZiBmZiBm ZiAgICAJam5lICAgIDEzOTcgPHZ4bGFuX29wZW4rMHgxMTc+CgkJbG9ja19zb2NrKHNrKTsKCQly ZXQgPSBpcHY2X3N0dWItPmlwdjZfc29ja19tY19qb2luKHNrLCBpZmluZGV4LAogICAgMTQxZDoJ NDUgMzEgZjYgICAgICAgICAgICAgCXhvciAgICAlcjE0ZCwlcjE0ZAogICAgMTQyMDoJNDggODMg YmIgOTAgMDkgMDAgMDAgCWNtcHEgICAkMHgwLDB4OTkwKCVyYngpCiAgICAxNDI3OgkwMCAKCQkJ CQkJICAgJmlwLT5zaW42LnNpbjZfYWRkcik7CiAgICAxNDI4OgkwZiA4NCAwNyBmZiBmZiBmZiAg ICAJamUgICAgIDEzMzUgPHZ4bGFuX29wZW4rMHhiNT4KCQlyZWxlYXNlX3NvY2soc2spOwojaWYg SVNfRU5BQkxFRChDT05GSUdfSVBWNikKCX0gZWxzZSB7CgkJc2sgPSB2eGxhbi0+dm42X3NvY2st PnNvY2stPnNrOwoJCWxvY2tfc29jayhzayk7CgkJcmV0ID0gaXB2Nl9zdHViLT5pcHY2X3NvY2tf bWNfam9pbihzaywgaWZpbmRleCwKICAgIDE0MmU6CWU5IDI3IGZmIGZmIGZmICAgICAgIAlqbXBx ICAgMTM1YSA8dnhsYW5fb3BlbisweGRhPgoJCQkJCQkgICAmaXAtPnNpbjYuc2luNl9hZGRyKTsK CQlyZWxlYXNlX3NvY2soc2spOwogICAgMTQzMzoJMzEgZjYgICAgICAgICAgICAgICAgCXhvciAg ICAlZXNpLCVlc2kKICAgIDE0MzU6CTRjIDg5IGZmICAgICAgICAgICAgIAltb3YgICAgJXIxNSwl cmRpCgkJcmVsZWFzZV9zb2NrKHNrKTsKI2lmIElTX0VOQUJMRUQoQ09ORklHX0lQVjYpCgl9IGVs c2UgewoJCXNrID0gdnhsYW4tPnZuNl9zb2NrLT5zb2NrLT5zazsKCQlsb2NrX3NvY2soc2spOwoJ CXJldCA9IGlwdjZfc3R1Yi0+aXB2Nl9zb2NrX21jX2pvaW4oc2ssIGlmaW5kZXgsCiAgICAxNDM4 OgllOCAwMyBmYSBmZiBmZiAgICAgICAJY2FsbHEgIGU0MCA8X192eGxhbl9zb2NrX2FkZD4KCQkJ CQkJICAgJmlwLT5zaW42LnNpbjZfYWRkcik7CgkJcmVsZWFzZV9zb2NrKHNrKTsKICAgIDE0M2Q6 CTQxIDg5IGM2ICAgICAgICAgICAgIAltb3YgICAgJWVheCwlcjE0ZAoKCWlmICh2eGxhbl9hZGRy X211bHRpY2FzdCgmdnhsYW4tPmRlZmF1bHRfZHN0LnJlbW90ZV9pcCkpIHsKCQlyZXQgPSB2eGxh bl9pZ21wX2pvaW4odnhsYW4pOwoJCWlmIChyZXQgPT0gLUVBRERSSU5VU0UpCgkJCXJldCA9IDA7 CgkJaWYgKHJldCkgewogICAgMTQ0MDoJZTkgNDkgZmYgZmYgZmYgICAgICAgCWptcHEgICAxMzhl IDx2eGxhbl9vcGVuKzB4MTBlPgogICAgMTQ0NToJNDggOGIgODMgNjAgMDggMDAgMDAgCW1vdiAg ICAweDg2MCglcmJ4KSwlcmF4CiAgICAxNDRjOgkzMSBmNiAgICAgICAgICAgICAgICAJeG9yICAg ICVlc2ksJWVzaQogICAgMTQ0ZToJNDggYzcgNDUgYzQgMDAgMDAgMDAgCW1vdnEgICAkMHgwLC0w eDNjKCVyYnApCiAgICAxNDU1OgkwMCAKCQkJdnhsYW5fc29ja19yZWxlYXNlKHZ4bGFuKTsKCQkJ cmV0dXJuIHJldDsKCQl9Cgl9CgoJaWYgKHZ4bGFuLT5jZmcuYWdlX2ludGVydmFsKQogICAgMTQ1 NjoJNDQgODkgNmQgY2MgICAgICAgICAgCW1vdiAgICAlcjEzZCwtMHgzNCglcmJwKQogICAgMTQ1 YToJODkgNTUgYzQgICAgICAgICAgICAgCW1vdiAgICAlZWR4LC0weDNjKCVyYnApCiAgICAxNDVk Ogk0OCA4YiA0MCAxMCAgICAgICAgICAJbW92ICAgIDB4MTAoJXJheCksJXJheAogICAgMTQ2MToJ NGMgOGIgNjAgMjAgICAgICAgICAgCW1vdiAgICAweDIwKCVyYXgpLCVyMTIKCXZ4bGFuLT52bjZf c29jayA9IE5VTEw7CglpZiAoaXB2NiB8fCBtZXRhZGF0YSkKCQlyZXQgPSBfX3Z4bGFuX3NvY2tf YWRkKHZ4bGFuLCB0cnVlKTsKI2VuZGlmCglpZiAoIXJldCAmJiAoIWlwdjYgfHwgbWV0YWRhdGEp KQoJCXJldCA9IF9fdnhsYW5fc29ja19hZGQodnhsYW4sIGZhbHNlKTsKICAgIDE0NjU6CTRjIDg5 IGU3ICAgICAgICAgICAgIAltb3YgICAgJXIxMiwlcmRpCiAgICAxNDY4OgllOCAwMCAwMCAwMCAw MCAgICAgICAJY2FsbHEgIDE0NmQgPHZ4bGFuX29wZW4rMHgxZWQ+CiAgICAxNDZkOgk0OCA4ZCA3 NSBjNCAgICAgICAgICAJbGVhICAgIC0weDNjKCVyYnApLCVyc2kKICAgIDE0NzE6CTRjIDg5IGU3 ICAgICAgICAgICAgIAltb3YgICAgJXIxMiwlcmRpCiAgICAxNDc0OgllOCAwMCAwMCAwMCAwMCAg ICAgICAJY2FsbHEgIDE0NzkgPHZ4bGFuX29wZW4rMHgxZjk+CgkJc3RydWN0IGlwX21yZXFuIG1y ZXEgPSB7CgkJCS5pbXJfbXVsdGlhZGRyLnNfYWRkcgk9IGlwLT5zaW4uc2luX2FkZHIuc19hZGRy LAoJCQkuaW1yX2lmaW5kZXgJCT0gaWZpbmRleCwKCQl9OwoKCQlzayA9IHZ4bGFuLT52bjRfc29j ay0+c29jay0+c2s7CiAgICAxNDc5Ogk0YyA4OSBlNyAgICAgICAgICAgICAJbW92ICAgICVyMTIs JXJkaQogICAgMTQ3YzoJNDEgODkgYzYgICAgICAgICAgICAgCW1vdiAgICAlZWF4LCVyMTRkCgl1 bmlvbiB2eGxhbl9hZGRyICppcCA9ICZ2eGxhbi0+ZGVmYXVsdF9kc3QucmVtb3RlX2lwOwoJaW50 IGlmaW5kZXggPSB2eGxhbi0+ZGVmYXVsdF9kc3QucmVtb3RlX2lmaW5kZXg7CglpbnQgcmV0ID0g LUVJTlZBTDsKCglpZiAoaXAtPnNhLnNhX2ZhbWlseSA9PSBBRl9JTkVUKSB7CgkJc3RydWN0IGlw X21yZXFuIG1yZXEgPSB7CiAgICAxNDdmOgllOCAwMCAwMCAwMCAwMCAgICAgICAJY2FsbHEgIDE0 ODQgPHZ4bGFuX29wZW4rMHgyMDQ+CiAgICAxNDg0OgllYiA4OCAgICAgICAgICAgICAgICAJam1w ICAgIDE0MGUgPHZ4bGFuX29wZW4rMHgxOGU+CiAgICAxNDg2OgllOCAwMCAwMCAwMCAwMCAgICAg ICAJY2FsbHEgIDE0OGIgPHZ4bGFuX29wZW4rMHgyMGI+CiAgICAxNDhiOgkwZiAxZiA0NCAwMCAw MCAgICAgICAJbm9wbCAgIDB4MCglcmF4LCVyYXgsMSkKCjAwMDAwMDAwMDAwMDE0OTAgPHZ4bGFu X2ZpbGxfaW5mbz46CgkJCS5pbXJfbXVsdGlhZGRyLnNfYWRkcgk9IGlwLT5zaW4uc2luX2FkZHIu c19hZGRyLAoJCQkuaW1yX2lmaW5kZXgJCT0gaWZpbmRleCwKCQl9OwoKCQlzayA9IHZ4bGFuLT52 bjRfc29jay0+c29jay0+c2s7CiAgICAxNDkwOgllOCAwMCAwMCAwMCAwMCAgICAgICAJY2FsbHEg IDE0OTUgPHZ4bGFuX2ZpbGxfaW5mbysweDU+CiAgICAxNDk1Ogk1NSAgICAgICAgICAgICAgICAg ICAJcHVzaCAgICVyYnAKICAgIDE0OTY6CWJhIDA0IDAwIDAwIDAwICAgICAgIAltb3YgICAgJDB4 NCwlZWR4CiAgICAxNDliOgk0OCA4OSBlNSAgICAgICAgICAgICAJbW92ICAgICVyc3AsJXJicAoJ CWxvY2tfc29jayhzayk7CgkJcmV0ID0gaXBfbWNfam9pbl9ncm91cChzaywgJm1yZXEpOwogICAg MTQ5ZToJNDEgNTUgICAgICAgICAgICAgICAgCXB1c2ggICAlcjEzCiAgICAxNGEwOgk0MSA1NCAg ICAgICAgICAgICAgICAJcHVzaCAgICVyMTIKICAgIDE0YTI6CTUzICAgICAgICAgICAgICAgICAg IAlwdXNoICAgJXJieAogICAgMTRhMzoJNDggOGQgNGQgYzAgICAgICAgICAgCWxlYSAgICAtMHg0 MCglcmJwKSwlcmN4CiAgICAxNGE3Ogk0OCA4OSBmMyAgICAgICAgICAgICAJbW92ICAgICVyc2ks JXJieAoJCXJlbGVhc2Vfc29jayhzayk7CiAgICAxNGFhOgk0OSA4OSBmYyAgICAgICAgICAgICAJ bW92ICAgICVyZGksJXIxMgoJCQkuaW1yX2lmaW5kZXgJCT0gaWZpbmRleCwKCQl9OwoKCQlzayA9 IHZ4bGFuLT52bjRfc29jay0+c29jay0+c2s7CgkJbG9ja19zb2NrKHNrKTsKCQlyZXQgPSBpcF9t Y19qb2luX2dyb3VwKHNrLCAmbXJlcSk7CiAgICAxNGFkOgk0OCA4MyBlYyAzOCAgICAgICAgICAJ c3ViICAgICQweDM4LCVyc3AKCQlyZWxlYXNlX3NvY2soc2spOwogICAgMTRiMToJNjUgNDggOGIg MDQgMjUgMjggMDAgCW1vdiAgICAlZ3M6MHgyOCwlcmF4CiAgICAxNGI4OgkwMCAwMCAKCglpZiAo dnhsYW4tPmNmZy5hZ2VfaW50ZXJ2YWwpCgkJbW9kX3RpbWVyKCZ2eGxhbi0+YWdlX3RpbWVyLCBq aWZmaWVzICsgRkRCX0FHRV9JTlRFUlZBTCk7CgoJcmV0dXJuIHJldDsKfQogICAgMTRiYToJNDgg ODkgNDUgZTAgICAgICAgICAgCW1vdiAgICAlcmF4LC0weDIwKCVyYnApCiAgICAxNGJlOgkzMSBj MCAgICAgICAgICAgICAgICAJeG9yICAgICVlYXgsJWVheAoJCW5sYV90b3RhbF9zaXplKHNpemVv ZihfX3U4KSkgKyAvKiBJRkxBX1ZYTEFOX1JFTUNTVU1fUlggKi8KCQkwOwp9CgpzdGF0aWMgaW50 IHZ4bGFuX2ZpbGxfaW5mbyhzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBjb25zdCBzdHJ1Y3QgbmV0X2Rl dmljZSAqZGV2KQp7CiAgICAxNGMwOgkwZiBiNyA4NiA3ZSAwOSAwMCAwMCAJbW92endsIDB4OTdl KCVyc2kpLCVlYXgKICogQGF0dHJ0eXBlOiBhdHRyaWJ1dGUgdHlwZQogKiBAdmFsdWU6IG51bWVy aWMgdmFsdWUKICovCnN0YXRpYyBpbmxpbmUgaW50IG5sYV9wdXRfdTMyKHN0cnVjdCBza19idWZm ICpza2IsIGludCBhdHRydHlwZSwgdTMyIHZhbHVlKQp7CglyZXR1cm4gbmxhX3B1dChza2IsIGF0 dHJ0eXBlLCBzaXplb2YodTMyKSwgJnZhbHVlKTsKICAgIDE0Yzc6CTY2IGMxIGMwIDA4ICAgICAg ICAgIAlyb2wgICAgJDB4OCwlYXgKICAgIDE0Y2I6CTY2IDg5IDQ1IGRjICAgICAgICAgIAltb3Yg ICAgJWF4LC0weDI0KCVyYnApCiAgICAxNGNmOgkwZiBiNyA4NiA4MCAwOSAwMCAwMCAJbW92ends IDB4OTgwKCVyc2kpLCVlYXgKICAgIDE0ZDY6CTY2IGMxIGMwIDA4ICAgICAgICAgIAlyb2wgICAg JDB4OCwlYXgKICAgIDE0ZGE6CTY2IDg5IDQ1IGRlICAgICAgICAgIAltb3YgICAgJWF4LC0weDIy KCVyYnApCiAgICAxNGRlOgk4YiA4NiBhMCAwOCAwMCAwMCAgICAJbW92ICAgIDB4OGEwKCVyc2kp LCVlYXgKICAgIDE0ZTQ6CWJlIDAxIDAwIDAwIDAwICAgICAgIAltb3YgICAgJDB4MSwlZXNpCiAg ICAxNGU5OgkwZiBjOCAgICAgICAgICAgICAgICAJYnN3YXAgICVlYXgKICAgIDE0ZWI6CTg5IDQ1 IGMwICAgICAgICAgICAgIAltb3YgICAgJWVheCwtMHg0MCglcmJwKQogICAgMTRlZToJZTggMDAg MDAgMDAgMDAgICAgICAgCWNhbGxxICAxNGYzIDx2eGxhbl9maWxsX2luZm8rMHg2Mz4KCWNvbnN0 IHN0cnVjdCB2eGxhbl9kZXYgKnZ4bGFuID0gbmV0ZGV2X3ByaXYoZGV2KTsKCWNvbnN0IHN0cnVj dCB2eGxhbl9yZHN0ICpkc3QgPSAmdnhsYW4tPmRlZmF1bHRfZHN0OwoJc3RydWN0IGlmbGFfdnhs YW5fcG9ydF9yYW5nZSBwb3J0cyA9IHsKCQkubG93ID0gIGh0b25zKHZ4bGFuLT5jZmcucG9ydF9t aW4pLAogICAgMTRmMzoJODUgYzAgICAgICAgICAgICAgICAgCXRlc3QgICAlZWF4LCVlYXgKICAg IDE0ZjU6CTBmIDg1IDliIDAzIDAwIDAwICAgIAlqbmUgICAgMTg5NiA8dnhsYW5fZmlsbF9pbmZv KzB4NDA2PgoKc3RhdGljIGludCB2eGxhbl9maWxsX2luZm8oc3RydWN0IHNrX2J1ZmYgKnNrYiwg Y29uc3Qgc3RydWN0IG5ldF9kZXZpY2UgKmRldikKewoJY29uc3Qgc3RydWN0IHZ4bGFuX2RldiAq dnhsYW4gPSBuZXRkZXZfcHJpdihkZXYpOwoJY29uc3Qgc3RydWN0IHZ4bGFuX3Jkc3QgKmRzdCA9 ICZ2eGxhbi0+ZGVmYXVsdF9kc3Q7CglzdHJ1Y3QgaWZsYV92eGxhbl9wb3J0X3JhbmdlIHBvcnRz ID0gewogICAgMTRmYjoJMGYgYjcgODMgODAgMDggMDAgMDAgCW1vdnp3bCAweDg4MCglcmJ4KSwl ZWF4CgkJLmxvdyA9ICBodG9ucyh2eGxhbi0+Y2ZnLnBvcnRfbWluKSwKCQkuaGlnaCA9IGh0b25z KHZ4bGFuLT5jZmcucG9ydF9tYXgpLAogICAgMTUwMjoJNjYgODMgZjggMGEgICAgICAgICAgCWNt cCAgICAkMHhhLCVheAogICAgMTUwNjoJMGYgODQgMmQgMDQgMDAgMDAgICAgCWplICAgICAxOTM5 IDx2eGxhbl9maWxsX2luZm8rMHg0YTk+CgpzdGF0aWMgaW50IHZ4bGFuX2ZpbGxfaW5mbyhzdHJ1 Y3Qgc2tfYnVmZiAqc2tiLCBjb25zdCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQp7Cgljb25zdCBz dHJ1Y3QgdnhsYW5fZGV2ICp2eGxhbiA9IG5ldGRldl9wcml2KGRldik7Cgljb25zdCBzdHJ1Y3Qg dnhsYW5fcmRzdCAqZHN0ID0gJnZ4bGFuLT5kZWZhdWx0X2RzdDsKCXN0cnVjdCBpZmxhX3Z4bGFu X3BvcnRfcmFuZ2UgcG9ydHMgPSB7CiAgICAxNTBjOgk4YiA5MyA4NCAwOCAwMCAwMCAgICAJbW92 ICAgIDB4ODg0KCVyYngpLCVlZHgKCQkubG93ID0gIGh0b25zKHZ4bGFuLT5jZmcucG9ydF9taW4p LAoJCS5oaWdoID0gaHRvbnModnhsYW4tPmNmZy5wb3J0X21heCksCgl9OwoKCWlmIChubGFfcHV0 X3UzMihza2IsIElGTEFfVlhMQU5fSUQsIGJlMzJfdG9fY3B1KGRzdC0+cmVtb3RlX3ZuaSkpKQog ICAgMTUxMjoJODUgZDIgICAgICAgICAgICAgICAgCXRlc3QgICAlZWR4LCVlZHgKICAgIDE1MTQ6 CTBmIDg1IGEzIDAzIDAwIDAwICAgIAlqbmUgICAgMThiZCA8dnhsYW5fZmlsbF9pbmZvKzB4NDJk PgogICAgMTUxYToJOGIgODMgYTQgMDggMDAgMDAgICAgCW1vdiAgICAweDhhNCglcmJ4KSwlZWF4 CiAgICAxNTIwOgk4NSBjMCAgICAgICAgICAgICAgICAJdGVzdCAgICVlYXgsJWVheAogICAgMTUy MjoJMGYgODUgY2EgMDMgMDAgMDAgICAgCWpuZSAgICAxOGYyIDx2eGxhbl9maWxsX2luZm8rMHg0 NjI+CiAgICAxNTI4OgkwZiBiNyA4MyA1NCAwOSAwMCAwMCAJbW92endsIDB4OTU0KCVyYngpLCVl YXgKCQlyZXR1cm4gYS0+c2luLnNpbl9hZGRyLnNfYWRkciA9PSBiLT5zaW4uc2luX2FkZHIuc19h ZGRyOwp9CgpzdGF0aWMgaW5saW5lIGJvb2wgdnhsYW5fYWRkcl9hbnkoY29uc3QgdW5pb24gdnhs YW5fYWRkciAqaXBhKQp7CglpZiAoaXBhLT5zYS5zYV9mYW1pbHkgPT0gQUZfSU5FVDYpCiAgICAx NTJmOgk2NiA4MyBmOCAwYSAgICAgICAgICAJY21wICAgICQweGEsJWF4CiAgICAxNTMzOgkwZiA4 NCBlNyAwMyAwMCAwMCAgICAJamUgICAgIDE5MjAgPHZ4bGFuX2ZpbGxfaW5mbysweDQ5MD4KICAg IDE1Mzk6CThiIDkzIDU4IDA5IDAwIDAwICAgIAltb3YgICAgMHg5NTgoJXJieCksJWVkeAoJCXJl dHVybiBpcHY2X2FkZHJfYW55KCZpcGEtPnNpbjYuc2luNl9hZGRyKTsKCWVsc2UKCQlyZXR1cm4g aXBhLT5zaW4uc2luX2FkZHIuc19hZGRyID09IGh0b25sKElOQUREUl9BTlkpOwogICAgMTUzZjoJ ODUgZDIgICAgICAgICAgICAgICAgCXRlc3QgICAlZWR4LCVlZHgKICAgIDE1NDE6CTc0IDJiICAg ICAgICAgICAgICAgIAlqZSAgICAgMTU2ZSA8dnhsYW5fZmlsbF9pbmZvKzB4ZGU+Cgl9OwoKCWlm IChubGFfcHV0X3UzMihza2IsIElGTEFfVlhMQU5fSUQsIGJlMzJfdG9fY3B1KGRzdC0+cmVtb3Rl X3ZuaSkpKQoJCWdvdG8gbmxhX3B1dF9mYWlsdXJlOwoKCWlmICghdnhsYW5fYWRkcl9hbnkoJmRz dC0+cmVtb3RlX2lwKSkgewogICAgMTU0MzoJNjYgODMgZjggMDIgICAgICAgICAgCWNtcCAgICAk MHgyLCVheAogICAgMTU0NzoJMGYgODQgMDUgMDQgMDAgMDAgICAgCWplICAgICAxOTUyIDx2eGxh bl9maWxsX2luZm8rMHg0YzI+CgkJCQlnb3RvIG5sYV9wdXRfZmFpbHVyZTsKI2VuZGlmCgkJfQoJ fQoKCWlmIChkc3QtPnJlbW90ZV9pZmluZGV4ICYmIG5sYV9wdXRfdTMyKHNrYiwgSUZMQV9WWExB Tl9MSU5LLCBkc3QtPnJlbW90ZV9pZmluZGV4KSkKICAgIDE1NGQ6CTQ4IDhkIDhiIDVjIDA5IDAw IDAwIAlsZWEgICAgMHg5NWMoJXJieCksJXJjeAogICAgMTU1NDoJYmEgMTAgMDAgMDAgMDAgICAg ICAgCW1vdiAgICAkMHgxMCwlZWR4CgkJcmV0dXJuIGEtPnNpbi5zaW5fYWRkci5zX2FkZHIgPT0g Yi0+c2luLnNpbl9hZGRyLnNfYWRkcjsKfQoKc3RhdGljIGlubGluZSBib29sIHZ4bGFuX2FkZHJf YW55KGNvbnN0IHVuaW9uIHZ4bGFuX2FkZHIgKmlwYSkKewoJaWYgKGlwYS0+c2Euc2FfZmFtaWx5 ID09IEFGX0lORVQ2KQogICAgMTU1OToJYmUgMTEgMDAgMDAgMDAgICAgICAgCW1vdiAgICAkMHgx MSwlZXNpCiAgICAxNTVlOgk0YyA4OSBlNyAgICAgICAgICAgICAJbW92ICAgICVyMTIsJXJkaQog ICAgMTU2MToJZTggMDAgMDAgMDAgMDAgICAgICAgCWNhbGxxICAxNTY2IDx2eGxhbl9maWxsX2lu Zm8rMHhkNj4KICAgIDE1NjY6CTg1IGMwICAgICAgICAgICAgICAgIAl0ZXN0ICAgJWVheCwlZWF4 CiAgICAxNTY4OgkwZiA4NSAyOCAwMyAwMCAwMCAgICAJam5lICAgIDE4OTYgPHZ4bGFuX2ZpbGxf aW5mbysweDQwNj4KCQlyZXR1cm4gaXB2Nl9hZGRyX2FueSgmaXBhLT5zaW42LnNpbjZfYWRkcik7 CgllbHNlCgkJcmV0dXJuIGlwYS0+c2luLnNpbl9hZGRyLnNfYWRkciA9PSBodG9ubChJTkFERFJf QU5ZKTsKICAgIDE1NmU6CTBmIGI2IDgzIDgzIDA5IDAwIDAwIAltb3Z6YmwgMHg5ODMoJXJieCks JWVheAoKCWlmIChkc3QtPnJlbW90ZV9pZmluZGV4ICYmIG5sYV9wdXRfdTMyKHNrYiwgSUZMQV9W WExBTl9MSU5LLCBkc3QtPnJlbW90ZV9pZmluZGV4KSkKCQlnb3RvIG5sYV9wdXRfZmFpbHVyZTsK CglpZiAoIXZ4bGFuX2FkZHJfYW55KCZ2eGxhbi0+Y2ZnLnNhZGRyKSkgewoJCWlmICh2eGxhbi0+ Y2ZnLnNhZGRyLnNhLnNhX2ZhbWlseSA9PSBBRl9JTkVUKSB7CiAgICAxNTc1Ogk0OCA4ZCA0ZCBi MSAgICAgICAgICAJbGVhICAgIC0weDRmKCVyYnApLCVyY3gKICAgIDE1Nzk6CWJhIDAxIDAwIDAw IDAwICAgICAgIAltb3YgICAgJDB4MSwlZWR4CgkJCWlmIChubGFfcHV0X2luX2FkZHIoc2tiLCBJ RkxBX1ZYTEFOX0xPQ0FMLAoJCQkJCSAgICB2eGxhbi0+Y2ZnLnNhZGRyLnNpbi5zaW5fYWRkci5z X2FkZHIpKQoJCQkJZ290byBubGFfcHV0X2ZhaWx1cmU7CiNpZiBJU19FTkFCTEVEKENPTkZJR19J UFY2KQoJCX0gZWxzZSB7CgkJCWlmIChubGFfcHV0X2luNl9hZGRyKHNrYiwgSUZMQV9WWExBTl9M T0NBTDYsCiAgICAxNTdlOgliZSAwNSAwMCAwMCAwMCAgICAgICAJbW92ICAgICQweDUsJWVzaQog ICAgMTU4MzoJNGMgODkgZTcgICAgICAgICAgICAgCW1vdiAgICAlcjEyLCVyZGkKICogQGFkZHI6 IElQdjYgYWRkcmVzcwogKi8Kc3RhdGljIGlubGluZSBpbnQgbmxhX3B1dF9pbjZfYWRkcihzdHJ1 Y3Qgc2tfYnVmZiAqc2tiLCBpbnQgYXR0cnR5cGUsCgkJCQkgICBjb25zdCBzdHJ1Y3QgaW42X2Fk ZHIgKmFkZHIpCnsKCXJldHVybiBubGFfcHV0KHNrYiwgYXR0cnR5cGUsIHNpemVvZigqYWRkciks IGFkZHIpOwogICAgMTU4NjoJODggNDUgYjEgICAgICAgICAgICAgCW1vdiAgICAlYWwsLTB4NGYo JXJicCkKICAgIDE1ODk6CWU4IDAwIDAwIDAwIDAwICAgICAgIAljYWxscSAgMTU4ZSA8dnhsYW5f ZmlsbF9pbmZvKzB4ZmU+CiAgICAxNThlOgk4NSBjMCAgICAgICAgICAgICAgICAJdGVzdCAgICVl YXgsJWVheAogICAgMTU5MDoJMGYgODUgMDAgMDMgMDAgMDAgICAgCWpuZSAgICAxODk2IDx2eGxh bl9maWxsX2luZm8rMHg0MDY+CiAgICAxNTk2OgkwZiBiNiA4MyA4MiAwOSAwMCAwMCAJbW92emJs IDB4OTgyKCVyYngpLCVlYXgKICAgIDE1OWQ6CTQ4IDhkIDRkIGIyICAgICAgICAgIAlsZWEgICAg LTB4NGUoJXJicCksJXJjeAogICAgMTVhMToJYmEgMDEgMDAgMDAgMDAgICAgICAgCW1vdiAgICAk MHgxLCVlZHgKICogQGF0dHJ0eXBlOiBhdHRyaWJ1dGUgdHlwZQogKiBAdmFsdWU6IG51bWVyaWMg dmFsdWUKICovCnN0YXRpYyBpbmxpbmUgaW50IG5sYV9wdXRfdTgoc3RydWN0IHNrX2J1ZmYgKnNr YiwgaW50IGF0dHJ0eXBlLCB1OCB2YWx1ZSkKewoJcmV0dXJuIG5sYV9wdXQoc2tiLCBhdHRydHlw ZSwgc2l6ZW9mKHU4KSwgJnZhbHVlKTsKICAgIDE1YTY6CWJlIDA2IDAwIDAwIDAwICAgICAgIAlt b3YgICAgJDB4NiwlZXNpCiAgICAxNWFiOgk0YyA4OSBlNyAgICAgICAgICAgICAJbW92ICAgICVy MTIsJXJkaQogICAgMTVhZToJODggNDUgYjIgICAgICAgICAgICAgCW1vdiAgICAlYWwsLTB4NGUo JXJicCkKICAgIDE1YjE6CWU4IDAwIDAwIDAwIDAwICAgICAgIAljYWxscSAgMTViNiA8dnhsYW5f ZmlsbF9pbmZvKzB4MTI2PgogICAgMTViNjoJODUgYzAgICAgICAgICAgICAgICAgCXRlc3QgICAl ZWF4LCVlYXgKICAgIDE1Yjg6CTBmIDg1IGQ4IDAyIDAwIDAwICAgIAlqbmUgICAgMTg5NiA8dnhs YW5fZmlsbF9pbmZvKzB4NDA2PgoJCQkJZ290byBubGFfcHV0X2ZhaWx1cmU7CiNlbmRpZgoJCX0K CX0KCglpZiAobmxhX3B1dF91OChza2IsIElGTEFfVlhMQU5fVFRMLCB2eGxhbi0+Y2ZnLnR0bCkg fHwKICAgIDE1YmU6CThiIDgzIDg0IDA5IDAwIDAwICAgIAltb3YgICAgMHg5ODQoJXJieCksJWVh eAogICAgMTVjNDoJNDggOGQgNGQgZDAgICAgICAgICAgCWxlYSAgICAtMHgzMCglcmJwKSwlcmN4 CiAgICAxNWM4OgliYSAwNCAwMCAwMCAwMCAgICAgICAJbW92ICAgICQweDQsJWVkeAogICAgMTVj ZDoJYmUgMWEgMDAgMDAgMDAgICAgICAgCW1vdiAgICAkMHgxYSwlZXNpCiAgICAxNWQyOgk0YyA4 OSBlNyAgICAgICAgICAgICAJbW92ICAgICVyMTIsJXJkaQogICAgMTVkNToJODkgNDUgZDAgICAg ICAgICAgICAgCW1vdiAgICAlZWF4LC0weDMwKCVyYnApCiAgICAxNWQ4OgllOCAwMCAwMCAwMCAw MCAgICAgICAJY2FsbHEgIDE1ZGQgPHZ4bGFuX2ZpbGxfaW5mbysweDE0ZD4KICAgIDE1ZGQ6CTg1 IGMwICAgICAgICAgICAgICAgIAl0ZXN0ICAgJWVheCwlZWF4CiAgICAxNWRmOgkwZiA4NSBiMSAw MiAwMCAwMCAgICAJam5lICAgIDE4OTYgPHZ4bGFuX2ZpbGxfaW5mbysweDQwNj4KICAgIDE1ZTU6 CThiIDgzIGQ4IDA4IDAwIDAwICAgIAltb3YgICAgMHg4ZDgoJXJieCksJWVheAogICAgMTVlYjoJ NDggOGQgNGQgYjMgICAgICAgICAgCWxlYSAgICAtMHg0ZCglcmJwKSwlcmN4CiAgICAxNWVmOgli YSAwMSAwMCAwMCAwMCAgICAgICAJbW92ICAgICQweDEsJWVkeAogKiBAYXR0cnR5cGU6IGF0dHJp YnV0ZSB0eXBlCiAqIEB2YWx1ZTogbnVtZXJpYyB2YWx1ZQogKi8Kc3RhdGljIGlubGluZSBpbnQg bmxhX3B1dF9iZTMyKHN0cnVjdCBza19idWZmICpza2IsIGludCBhdHRydHlwZSwgX19iZTMyIHZh bHVlKQp7CglyZXR1cm4gbmxhX3B1dChza2IsIGF0dHJ0eXBlLCBzaXplb2YoX19iZTMyKSwgJnZh bHVlKTsKICAgIDE1ZjQ6CWJlIDA3IDAwIDAwIDAwICAgICAgIAltb3YgICAgJDB4NywlZXNpCiAg ICAxNWY5Ogk0YyA4OSBlNyAgICAgICAgICAgICAJbW92ICAgICVyMTIsJXJkaQogICAgMTVmYzoJ ODggNDUgYjMgICAgICAgICAgICAgCW1vdiAgICAlYWwsLTB4NGQoJXJicCkKICAgIDE1ZmY6CTgw IDY1IGIzIDAxICAgICAgICAgIAlhbmRiICAgJDB4MSwtMHg0ZCglcmJwKQogICAgMTYwMzoJZTgg MDAgMDAgMDAgMDAgICAgICAgCWNhbGxxICAxNjA4IDx2eGxhbl9maWxsX2luZm8rMHgxNzg+CiAg ICAxNjA4Ogk4NSBjMCAgICAgICAgICAgICAgICAJdGVzdCAgICVlYXgsJWVheAogICAgMTYwYToJ MGYgODUgODYgMDIgMDAgMDAgICAgCWpuZSAgICAxODk2IDx2eGxhbl9maWxsX2luZm8rMHg0MDY+ CgkgICAgbmxhX3B1dF91OChza2IsIElGTEFfVlhMQU5fVE9TLCB2eGxhbi0+Y2ZnLnRvcykgfHwK ICAgIDE2MTA6CThiIDgzIGQ4IDA4IDAwIDAwICAgIAltb3YgICAgMHg4ZDgoJXJieCksJWVheAog ICAgMTYxNjoJNDggOGQgNGQgYjQgICAgICAgICAgCWxlYSAgICAtMHg0YyglcmJwKSwlcmN4CiAg ICAxNjFhOgliYSAwMSAwMCAwMCAwMCAgICAgICAJbW92ICAgICQweDEsJWVkeAogKiBAYXR0cnR5 cGU6IGF0dHJpYnV0ZSB0eXBlCiAqIEB2YWx1ZTogbnVtZXJpYyB2YWx1ZQogKi8Kc3RhdGljIGlu bGluZSBpbnQgbmxhX3B1dF91OChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBpbnQgYXR0cnR5cGUsIHU4 IHZhbHVlKQp7CglyZXR1cm4gbmxhX3B1dChza2IsIGF0dHJ0eXBlLCBzaXplb2YodTgpLCAmdmFs dWUpOwogICAgMTYxZjoJYmUgMGIgMDAgMDAgMDAgICAgICAgCW1vdiAgICAkMHhiLCVlc2kKICAg IDE2MjQ6CTRjIDg5IGU3ICAgICAgICAgICAgIAltb3YgICAgJXIxMiwlcmRpCiAgICAxNjI3Oglk MSBlOCAgICAgICAgICAgICAgICAJc2hyICAgICVlYXgKICAgIDE2Mjk6CTgzIGUwIDAxICAgICAg ICAgICAgIAlhbmQgICAgJDB4MSwlZWF4CiAgICAxNjJjOgk4OCA0NSBiNCAgICAgICAgICAgICAJ bW92ICAgICVhbCwtMHg0YyglcmJwKQogICAgMTYyZjoJZTggMDAgMDAgMDAgMDAgICAgICAgCWNh bGxxICAxNjM0IDx2eGxhbl9maWxsX2luZm8rMHgxYTQ+CiAgICAxNjM0Ogk4NSBjMCAgICAgICAg ICAgICAgICAJdGVzdCAgICVlYXgsJWVheAogICAgMTYzNjoJMGYgODUgNWEgMDIgMDAgMDAgICAg CWpuZSAgICAxODk2IDx2eGxhbl9maWxsX2luZm8rMHg0MDY+CgkgICAgbmxhX3B1dF9iZTMyKHNr YiwgSUZMQV9WWExBTl9MQUJFTCwgdnhsYW4tPmNmZy5sYWJlbCkgfHwKICAgIDE2M2M6CThiIDgz IGQ4IDA4IDAwIDAwICAgIAltb3YgICAgMHg4ZDgoJXJieCksJWVheAogICAgMTY0MjoJNDggOGQg NGQgYjUgICAgICAgICAgCWxlYSAgICAtMHg0YiglcmJwKSwlcmN4CiAgICAxNjQ2OgliYSAwMSAw MCAwMCAwMCAgICAgICAJbW92ICAgICQweDEsJWVkeAogICAgMTY0YjoJYmUgMGMgMDAgMDAgMDAg ICAgICAgCW1vdiAgICAkMHhjLCVlc2kKICAgIDE2NTA6CTRjIDg5IGU3ICAgICAgICAgICAgIAlt b3YgICAgJXIxMiwlcmRpCiAgICAxNjUzOgljMSBlOCAwMiAgICAgICAgICAgICAJc2hyICAgICQw eDIsJWVheAogICAgMTY1NjoJODMgZTAgMDEgICAgICAgICAgICAgCWFuZCAgICAkMHgxLCVlYXgK ICAgIDE2NTk6CTg4IDQ1IGI1ICAgICAgICAgICAgIAltb3YgICAgJWFsLC0weDRiKCVyYnApCiAg ICAxNjVjOgllOCAwMCAwMCAwMCAwMCAgICAgICAJY2FsbHEgIDE2NjEgPHZ4bGFuX2ZpbGxfaW5m bysweDFkMT4KICAgIDE2NjE6CTg1IGMwICAgICAgICAgICAgICAgIAl0ZXN0ICAgJWVheCwlZWF4 CiAgICAxNjYzOgkwZiA4NSAyZCAwMiAwMCAwMCAgICAJam5lICAgIDE4OTYgPHZ4bGFuX2ZpbGxf aW5mbysweDQwNj4KCSAgICBubGFfcHV0X3U4KHNrYiwgSUZMQV9WWExBTl9MRUFSTklORywKCQkJ ISEodnhsYW4tPmZsYWdzICYgVlhMQU5fRl9MRUFSTikpIHx8CiAgICAxNjY5Ogk4YiA4MyBkOCAw OCAwMCAwMCAgICAJbW92ICAgIDB4OGQ4KCVyYngpLCVlYXgKICAgIDE2NmY6CTQ4IDhkIDRkIGI2 ICAgICAgICAgIAlsZWEgICAgLTB4NGEoJXJicCksJXJjeAogICAgMTY3MzoJYmEgMDEgMDAgMDAg MDAgICAgICAgCW1vdiAgICAkMHgxLCVlZHgKICAgIDE2Nzg6CWJlIDBkIDAwIDAwIDAwICAgICAg IAltb3YgICAgJDB4ZCwlZXNpCiAgICAxNjdkOgk0YyA4OSBlNyAgICAgICAgICAgICAJbW92ICAg ICVyMTIsJXJkaQogICAgMTY4MDoJYzEgZTggMDMgICAgICAgICAgICAgCXNociAgICAkMHgzLCVl YXgKICAgIDE2ODM6CTgzIGUwIDAxICAgICAgICAgICAgIAlhbmQgICAgJDB4MSwlZWF4CiAgICAx Njg2Ogk4OCA0NSBiNiAgICAgICAgICAgICAJbW92ICAgICVhbCwtMHg0YSglcmJwKQogICAgMTY4 OToJZTggMDAgMDAgMDAgMDAgICAgICAgCWNhbGxxICAxNjhlIDx2eGxhbl9maWxsX2luZm8rMHgx ZmU+CiAgICAxNjhlOgk4NSBjMCAgICAgICAgICAgICAgICAJdGVzdCAgICVlYXgsJWVheAogICAg MTY5MDoJMGYgODUgMDAgMDIgMDAgMDAgICAgCWpuZSAgICAxODk2IDx2eGxhbl9maWxsX2luZm8r MHg0MDY+CgkgICAgbmxhX3B1dF91OChza2IsIElGTEFfVlhMQU5fUFJPWFksCgkJCSEhKHZ4bGFu LT5mbGFncyAmIFZYTEFOX0ZfUFJPWFkpKSB8fAogICAgMTY5NjoJOGIgODMgZDggMDggMDAgMDAg ICAgCW1vdiAgICAweDhkOCglcmJ4KSwlZWF4CiAgICAxNjljOgk0OCA4ZCA0ZCBiNyAgICAgICAg ICAJbGVhICAgIC0weDQ5KCVyYnApLCVyY3gKICAgIDE2YTA6CWJhIDAxIDAwIDAwIDAwICAgICAg IAltb3YgICAgJDB4MSwlZWR4CiAgICAxNmE1OgliZSAwZSAwMCAwMCAwMCAgICAgICAJbW92ICAg ICQweGUsJWVzaQogICAgMTZhYToJNGMgODkgZTcgICAgICAgICAgICAgCW1vdiAgICAlcjEyLCVy ZGkKICAgIDE2YWQ6CWMxIGU4IDA0ICAgICAgICAgICAgIAlzaHIgICAgJDB4NCwlZWF4CiAgICAx NmIwOgk4MyBlMCAwMSAgICAgICAgICAgICAJYW5kICAgICQweDEsJWVheAogICAgMTZiMzoJODgg NDUgYjcgICAgICAgICAgICAgCW1vdiAgICAlYWwsLTB4NDkoJXJicCkKICAgIDE2YjY6CWU4IDAw IDAwIDAwIDAwICAgICAgIAljYWxscSAgMTZiYiA8dnhsYW5fZmlsbF9pbmZvKzB4MjJiPgogICAg MTZiYjoJODUgYzAgICAgICAgICAgICAgICAgCXRlc3QgICAlZWF4LCVlYXgKICAgIDE2YmQ6CTBm IDg1IGQzIDAxIDAwIDAwICAgIAlqbmUgICAgMTg5NiA8dnhsYW5fZmlsbF9pbmZvKzB4NDA2PgoJ ICAgIG5sYV9wdXRfdTgoc2tiLCBJRkxBX1ZYTEFOX1JTQywgISEodnhsYW4tPmZsYWdzICYgVlhM QU5fRl9SU0MpKSB8fAogICAgMTZjMzoJOGIgODMgZDggMDggMDAgMDAgICAgCW1vdiAgICAweDhk OCglcmJ4KSwlZWF4CiAgICAxNmM5Ogk0OCA4ZCA0ZCBiOCAgICAgICAgICAJbGVhICAgIC0weDQ4 KCVyYnApLCVyY3gKICAgIDE2Y2Q6CWJhIDAxIDAwIDAwIDAwICAgICAgIAltb3YgICAgJDB4MSwl ZWR4CiAgICAxNmQyOgliZSAxOSAwMCAwMCAwMCAgICAgICAJbW92ICAgICQweDE5LCVlc2kKICAg IDE2ZDc6CTRjIDg5IGU3ICAgICAgICAgICAgIAltb3YgICAgJXIxMiwlcmRpCiAgICAxNmRhOglj MSBlOCAwZCAgICAgICAgICAgICAJc2hyICAgICQweGQsJWVheAogICAgMTZkZDoJODMgZTAgMDEg ICAgICAgICAgICAgCWFuZCAgICAkMHgxLCVlYXgKICAgIDE2ZTA6CTg4IDQ1IGI4ICAgICAgICAg ICAgIAltb3YgICAgJWFsLC0weDQ4KCVyYnApCiAgICAxNmUzOgllOCAwMCAwMCAwMCAwMCAgICAg ICAJY2FsbHEgIDE2ZTggPHZ4bGFuX2ZpbGxfaW5mbysweDI1OD4KICAgIDE2ZTg6CTg1IGMwICAg ICAgICAgICAgICAgIAl0ZXN0ICAgJWVheCwlZWF4CiAgICAxNmVhOgkwZiA4NSBhNiAwMSAwMCAw MCAgICAJam5lICAgIDE4OTYgPHZ4bGFuX2ZpbGxfaW5mbysweDQwNj4KCSAgICBubGFfcHV0X3U4 KHNrYiwgSUZMQV9WWExBTl9MMk1JU1MsCgkJCSEhKHZ4bGFuLT5mbGFncyAmIFZYTEFOX0ZfTDJN SVNTKSkgfHwKICAgIDE2ZjA6CTQ4IDhiIDgzIDkwIDA5IDAwIDAwIAltb3YgICAgMHg5OTAoJXJi eCksJXJheAogICAgMTZmNzoJNDggOGQgNGQgZDQgICAgICAgICAgCWxlYSAgICAtMHgyYyglcmJw KSwlcmN4CiAgICAxNmZiOgliYSAwNCAwMCAwMCAwMCAgICAgICAJbW92ICAgICQweDQsJWVkeAog ICAgMTcwMDoJYmUgMDggMDAgMDAgMDAgICAgICAgCW1vdiAgICAkMHg4LCVlc2kKICAgIDE3MDU6 CTRjIDg5IGU3ICAgICAgICAgICAgIAltb3YgICAgJXIxMiwlcmRpCiAgICAxNzA4Ogk4OSA0NSBk NCAgICAgICAgICAgICAJbW92ICAgICVlYXgsLTB4MmMoJXJicCkKICAgIDE3MGI6CWU4IDAwIDAw IDAwIDAwICAgICAgIAljYWxscSAgMTcxMCA8dnhsYW5fZmlsbF9pbmZvKzB4MjgwPgogICAgMTcx MDoJODUgYzAgICAgICAgICAgICAgICAgCXRlc3QgICAlZWF4LCVlYXgKICAgIDE3MTI6CTBmIDg1 IDdlIDAxIDAwIDAwICAgIAlqbmUgICAgMTg5NiA8dnhsYW5fZmlsbF9pbmZvKzB4NDA2PgoJICAg IG5sYV9wdXRfdTgoc2tiLCBJRkxBX1ZYTEFOX0wzTUlTUywKCQkJISEodnhsYW4tPmZsYWdzICYg VlhMQU5fRl9MM01JU1MpKSB8fAogICAgMTcxODoJOGIgODMgOTggMDkgMDAgMDAgICAgCW1vdiAg ICAweDk5OCglcmJ4KSwlZWF4CiAgICAxNzFlOgk0OCA4ZCA0ZCBkOCAgICAgICAgICAJbGVhICAg IC0weDI4KCVyYnApLCVyY3gKICAgIDE3MjI6CWJhIDA0IDAwIDAwIDAwICAgICAgIAltb3YgICAg JDB4NCwlZWR4CiAqIEBhdHRydHlwZTogYXR0cmlidXRlIHR5cGUKICogQHZhbHVlOiBudW1lcmlj IHZhbHVlCiAqLwpzdGF0aWMgaW5saW5lIGludCBubGFfcHV0X3UzMihzdHJ1Y3Qgc2tfYnVmZiAq c2tiLCBpbnQgYXR0cnR5cGUsIHUzMiB2YWx1ZSkKewoJcmV0dXJuIG5sYV9wdXQoc2tiLCBhdHRy dHlwZSwgc2l6ZW9mKHUzMiksICZ2YWx1ZSk7CiAgICAxNzI3OgliZSAwOSAwMCAwMCAwMCAgICAg ICAJbW92ICAgICQweDksJWVzaQogICAgMTcyYzoJNGMgODkgZTcgICAgICAgICAgICAgCW1vdiAg ICAlcjEyLCVyZGkKICAgIDE3MmY6CTg5IDQ1IGQ4ICAgICAgICAgICAgIAltb3YgICAgJWVheCwt MHgyOCglcmJwKQogICAgMTczMjoJZTggMDAgMDAgMDAgMDAgICAgICAgCWNhbGxxICAxNzM3IDx2 eGxhbl9maWxsX2luZm8rMHgyYTc+CiAgICAxNzM3Ogk4NSBjMCAgICAgICAgICAgICAgICAJdGVz dCAgICVlYXgsJWVheAogICAgMTczOToJMGYgODUgNTcgMDEgMDAgMDAgICAgCWpuZSAgICAxODk2 IDx2eGxhbl9maWxsX2luZm8rMHg0MDY+CiAgICAxNzNmOgkwZiBiNyA4MyA3YyAwOSAwMCAwMCAJ bW92endsIDB4OTdjKCVyYngpLCVlYXgKCSAgICBubGFfcHV0X3U4KHNrYiwgSUZMQV9WWExBTl9D T0xMRUNUX01FVEFEQVRBLAoJCSAgICAgICAhISh2eGxhbi0+ZmxhZ3MgJiBWWExBTl9GX0NPTExF Q1RfTUVUQURBVEEpKSB8fAogICAgMTc0NjoJNDggOGQgNGQgYmUgICAgICAgICAgCWxlYSAgICAt MHg0MiglcmJwKSwlcmN4CiAgICAxNzRhOgliYSAwMiAwMCAwMCAwMCAgICAgICAJbW92ICAgICQw eDIsJWVkeAogICAgMTc0ZjoJYmUgMGYgMDAgMDAgMDAgICAgICAgCW1vdiAgICAkMHhmLCVlc2kK ICAgIDE3NTQ6CTRjIDg5IGU3ICAgICAgICAgICAgIAltb3YgICAgJXIxMiwlcmRpCiAgICAxNzU3 Ogk2NiA4OSA0NSBiZSAgICAgICAgICAJbW92ICAgICVheCwtMHg0MiglcmJwKQogICAgMTc1YjoJ ZTggMDAgMDAgMDAgMDAgICAgICAgCWNhbGxxICAxNzYwIDx2eGxhbl9maWxsX2luZm8rMHgyZDA+ CiAgICAxNzYwOgk4NSBjMCAgICAgICAgICAgICAgICAJdGVzdCAgICVlYXgsJWVheAogICAgMTc2 MjoJMGYgODUgMmUgMDEgMDAgMDAgICAgCWpuZSAgICAxODk2IDx2eGxhbl9maWxsX2luZm8rMHg0 MDY+CgkgICAgbmxhX3B1dF91MzIoc2tiLCBJRkxBX1ZYTEFOX0FHRUlORywgdnhsYW4tPmNmZy5h Z2VfaW50ZXJ2YWwpIHx8CiAgICAxNzY4Ogk4YiA4MyBkOCAwOCAwMCAwMCAgICAJbW92ICAgIDB4 OGQ4KCVyYngpLCVlYXgKICAgIDE3NmU6CTQ4IDhkIDRkIGI5ICAgICAgICAgIAlsZWEgICAgLTB4 NDcoJXJicCksJXJjeAogICAgMTc3MjoJYmEgMDEgMDAgMDAgMDAgICAgICAgCW1vdiAgICAkMHgx LCVlZHgKICogQGF0dHJ0eXBlOiBhdHRyaWJ1dGUgdHlwZQogKiBAdmFsdWU6IG51bWVyaWMgdmFs dWUKICovCnN0YXRpYyBpbmxpbmUgaW50IG5sYV9wdXRfYmUxNihzdHJ1Y3Qgc2tfYnVmZiAqc2ti LCBpbnQgYXR0cnR5cGUsIF9fYmUxNiB2YWx1ZSkKewoJcmV0dXJuIG5sYV9wdXQoc2tiLCBhdHRy dHlwZSwgc2l6ZW9mKF9fYmUxNiksICZ2YWx1ZSk7CiAgICAxNzc3OgliZSAxMiAwMCAwMCAwMCAg ICAgICAJbW92ICAgICQweDEyLCVlc2kKICAgIDE3N2M6CTRjIDg5IGU3ICAgICAgICAgICAgIAlt b3YgICAgJXIxMiwlcmRpCiAgICAxNzdmOgljMSBlOCAwNiAgICAgICAgICAgICAJc2hyICAgICQw eDYsJWVheAogICAgMTc4MjoJODMgZjAgMDEgICAgICAgICAgICAgCXhvciAgICAkMHgxLCVlYXgK ICAgIDE3ODU6CTgzIGUwIDAxICAgICAgICAgICAgIAlhbmQgICAgJDB4MSwlZWF4CiAgICAxNzg4 Ogk4OCA0NSBiOSAgICAgICAgICAgICAJbW92ICAgICVhbCwtMHg0NyglcmJwKQogICAgMTc4YjoJ ZTggMDAgMDAgMDAgMDAgICAgICAgCWNhbGxxICAxNzkwIDx2eGxhbl9maWxsX2luZm8rMHgzMDA+ CgkgICAgbmxhX3B1dF91MzIoc2tiLCBJRkxBX1ZYTEFOX0xJTUlULCB2eGxhbi0+Y2ZnLmFkZHJt YXgpIHx8CiAgICAxNzkwOgk4NSBjMCAgICAgICAgICAgICAgICAJdGVzdCAgICVlYXgsJWVheAog ICAgMTc5MjoJMGYgODUgZmUgMDAgMDAgMDAgICAgCWpuZSAgICAxODk2IDx2eGxhbl9maWxsX2lu Zm8rMHg0MDY+CiAgICAxNzk4Ogk4YiA4MyBkOCAwOCAwMCAwMCAgICAJbW92ICAgIDB4OGQ4KCVy YngpLCVlYXgKICogQGF0dHJ0eXBlOiBhdHRyaWJ1dGUgdHlwZQogKiBAdmFsdWU6IG51bWVyaWMg dmFsdWUKICovCnN0YXRpYyBpbmxpbmUgaW50IG5sYV9wdXRfdTgoc3RydWN0IHNrX2J1ZmYgKnNr YiwgaW50IGF0dHJ0eXBlLCB1OCB2YWx1ZSkKewoJcmV0dXJuIG5sYV9wdXQoc2tiLCBhdHRydHlw ZSwgc2l6ZW9mKHU4KSwgJnZhbHVlKTsKICAgIDE3OWU6CTQ4IDhkIDRkIGJhICAgICAgICAgIAls ZWEgICAgLTB4NDYoJXJicCksJXJjeAogICAgMTdhMjoJYmEgMDEgMDAgMDAgMDAgICAgICAgCW1v diAgICAkMHgxLCVlZHgKICAgIDE3YTc6CWJlIDEzIDAwIDAwIDAwICAgICAgIAltb3YgICAgJDB4 MTMsJWVzaQogICAgMTdhYzoJNGMgODkgZTcgICAgICAgICAgICAgCW1vdiAgICAlcjEyLCVyZGkK ICAgIDE3YWY6CWMxIGU4IDA3ICAgICAgICAgICAgIAlzaHIgICAgJDB4NywlZWF4CiAgICAxN2Iy Ogk4MyBlMCAwMSAgICAgICAgICAgICAJYW5kICAgICQweDEsJWVheAogICAgMTdiNToJODggNDUg YmEgICAgICAgICAgICAgCW1vdiAgICAlYWwsLTB4NDYoJXJicCkKICAgIDE3Yjg6CWU4IDAwIDAw IDAwIDAwICAgICAgIAljYWxscSAgMTdiZCA8dnhsYW5fZmlsbF9pbmZvKzB4MzJkPgogICAgMTdi ZDoJODUgYzAgICAgICAgICAgICAgICAgCXRlc3QgICAlZWF4LCVlYXgKICAgIDE3YmY6CTBmIDg1 IGQxIDAwIDAwIDAwICAgIAlqbmUgICAgMTg5NiA8dnhsYW5fZmlsbF9pbmZvKzB4NDA2PgoJICAg IG5sYV9wdXRfYmUxNihza2IsIElGTEFfVlhMQU5fUE9SVCwgdnhsYW4tPmNmZy5kc3RfcG9ydCkg fHwKICAgIDE3YzU6CThiIDgzIGQ4IDA4IDAwIDAwICAgIAltb3YgICAgMHg4ZDgoJXJieCksJWVh eAogICAgMTdjYjoJNDggOGQgNGQgYmIgICAgICAgICAgCWxlYSAgICAtMHg0NSglcmJwKSwlcmN4 CiAgICAxN2NmOgliYSAwMSAwMCAwMCAwMCAgICAgICAJbW92ICAgICQweDEsJWVkeAogICAgMTdk NDoJYmUgMTQgMDAgMDAgMDAgICAgICAgCW1vdiAgICAkMHgxNCwlZXNpCiAgICAxN2Q5Ogk0YyA4 OSBlNyAgICAgICAgICAgICAJbW92ICAgICVyMTIsJXJkaQogICAgMTdkYzoJYzEgZTggMDggICAg ICAgICAgICAgCXNociAgICAkMHg4LCVlYXgKICAgIDE3ZGY6CTgzIGUwIDAxICAgICAgICAgICAg IAlhbmQgICAgJDB4MSwlZWF4CiAgICAxN2UyOgk4OCA0NSBiYiAgICAgICAgICAgICAJbW92ICAg ICVhbCwtMHg0NSglcmJwKQogICAgMTdlNToJZTggMDAgMDAgMDAgMDAgICAgICAgCWNhbGxxICAx N2VhIDx2eGxhbl9maWxsX2luZm8rMHgzNWE+CiAgICAxN2VhOgk4NSBjMCAgICAgICAgICAgICAg ICAJdGVzdCAgICVlYXgsJWVheAogICAgMTdlYzoJMGYgODUgYTQgMDAgMDAgMDAgICAgCWpuZSAg ICAxODk2IDx2eGxhbl9maWxsX2luZm8rMHg0MDY+CgkgICAgbmxhX3B1dF91OChza2IsIElGTEFf VlhMQU5fVURQX0NTVU0sCgkJCSEodnhsYW4tPmZsYWdzICYgVlhMQU5fRl9VRFBfWkVST19DU1VN X1RYKSkgfHwKICAgIDE3ZjI6CThiIDgzIGQ4IDA4IDAwIDAwICAgIAltb3YgICAgMHg4ZDgoJXJi eCksJWVheAogICAgMTdmODoJNDggOGQgNGQgYmMgICAgICAgICAgCWxlYSAgICAtMHg0NCglcmJw KSwlcmN4CiAgICAxN2ZjOgliYSAwMSAwMCAwMCAwMCAgICAgICAJbW92ICAgICQweDEsJWVkeAog ICAgMTgwMToJYmUgMTUgMDAgMDAgMDAgICAgICAgCW1vdiAgICAkMHgxNSwlZXNpCiAgICAxODA2 Ogk0YyA4OSBlNyAgICAgICAgICAgICAJbW92ICAgICVyMTIsJXJkaQogICAgMTgwOToJYzEgZTgg MDkgICAgICAgICAgICAgCXNociAgICAkMHg5LCVlYXgKICAgIDE4MGM6CTgzIGUwIDAxICAgICAg ICAgICAgIAlhbmQgICAgJDB4MSwlZWF4CiAgICAxODBmOgk4OCA0NSBiYyAgICAgICAgICAgICAJ bW92ICAgICVhbCwtMHg0NCglcmJwKQogICAgMTgxMjoJZTggMDAgMDAgMDAgMDAgICAgICAgCWNh bGxxICAxODE3IDx2eGxhbl9maWxsX2luZm8rMHgzODc+CiAgICAxODE3Ogk4NSBjMCAgICAgICAg ICAgICAgICAJdGVzdCAgICVlYXgsJWVheAogICAgMTgxOToJNzUgN2IgICAgICAgICAgICAgICAg CWpuZSAgICAxODk2IDx2eGxhbl9maWxsX2luZm8rMHg0MDY+CgkgICAgbmxhX3B1dF91OChza2Is IElGTEFfVlhMQU5fVURQX1pFUk9fQ1NVTTZfVFgsCgkJCSEhKHZ4bGFuLT5mbGFncyAmIFZYTEFO X0ZfVURQX1pFUk9fQ1NVTTZfVFgpKSB8fAogICAgMTgxYjoJOGIgODMgZDggMDggMDAgMDAgICAg CW1vdiAgICAweDhkOCglcmJ4KSwlZWF4CiAgICAxODIxOgk0OCA4ZCA0ZCBiZCAgICAgICAgICAJ bGVhICAgIC0weDQzKCVyYnApLCVyY3gKICAgIDE4MjU6CWJhIDAxIDAwIDAwIDAwICAgICAgIAlt b3YgICAgJDB4MSwlZWR4CiAgICAxODJhOgliZSAxNiAwMCAwMCAwMCAgICAgICAJbW92ICAgICQw eDE2LCVlc2kKICAgIDE4MmY6CTRjIDg5IGU3ICAgICAgICAgICAgIAltb3YgICAgJXIxMiwlcmRp CiAgICAxODMyOgljMSBlOCAwYSAgICAgICAgICAgICAJc2hyICAgICQweGEsJWVheAogICAgMTgz NToJODMgZTAgMDEgICAgICAgICAgICAgCWFuZCAgICAkMHgxLCVlYXgKICAgIDE4Mzg6CTg4IDQ1 IGJkICAgICAgICAgICAgIAltb3YgICAgJWFsLC0weDQzKCVyYnApCiAgICAxODNiOgllOCAwMCAw MCAwMCAwMCAgICAgICAJY2FsbHEgIDE4NDAgPHZ4bGFuX2ZpbGxfaW5mbysweDNiMD4KICAgIDE4 NDA6CTg1IGMwICAgICAgICAgICAgICAgIAl0ZXN0ICAgJWVheCwlZWF4CiAgICAxODQyOgk3NSA1 MiAgICAgICAgICAgICAgICAJam5lICAgIDE4OTYgPHZ4bGFuX2ZpbGxfaW5mbysweDQwNj4KICAg IDE4NDQ6CTQ4IDhkIDRkIGRjICAgICAgICAgIAlsZWEgICAgLTB4MjQoJXJicCksJXJjeAoJICAg IG5sYV9wdXRfdTgoc2tiLCBJRkxBX1ZYTEFOX1VEUF9aRVJPX0NTVU02X1JYLAoJCQkhISh2eGxh bi0+ZmxhZ3MgJiBWWExBTl9GX1VEUF9aRVJPX0NTVU02X1JYKSkgfHwKICAgIDE4NDg6CWJhIDA0 IDAwIDAwIDAwICAgICAgIAltb3YgICAgJDB4NCwlZWR4CiAgICAxODRkOgliZSAwYSAwMCAwMCAw MCAgICAgICAJbW92ICAgICQweGEsJWVzaQogICAgMTg1MjoJNGMgODkgZTcgICAgICAgICAgICAg CW1vdiAgICAlcjEyLCVyZGkKICAgIDE4NTU6CWU4IDAwIDAwIDAwIDAwICAgICAgIAljYWxscSAg MTg1YSA8dnhsYW5fZmlsbF9pbmZvKzB4M2NhPgogICAgMTg1YToJODUgYzAgICAgICAgICAgICAg ICAgCXRlc3QgICAlZWF4LCVlYXgKICAgIDE4NWM6CTQxIDg5IGM1ICAgICAgICAgICAgIAltb3Yg ICAgJWVheCwlcjEzZAogICAgMTg1ZjoJNzUgMzUgICAgICAgICAgICAgICAgCWpuZSAgICAxODk2 IDx2eGxhbl9maWxsX2luZm8rMHg0MDY+CiAgICAxODYxOgk4YiA4MyBkOCAwOCAwMCAwMCAgICAJ bW92ICAgIDB4OGQ4KCVyYngpLCVlYXgKICAgIDE4Njc6CWY2IGM0IDA4ICAgICAgICAgICAgIAl0 ZXN0ICAgJDB4OCwlYWgKICAgIDE4NmE6CTBmIDg1IDJlIDAxIDAwIDAwICAgIAlqbmUgICAgMTk5 ZSA8dnhsYW5fZmlsbF9pbmZvKzB4NTBlPgoJICAgIG5sYV9wdXRfdTgoc2tiLCBJRkxBX1ZYTEFO X1JFTUNTVU1fVFgsCgkJCSEhKHZ4bGFuLT5mbGFncyAmIFZYTEFOX0ZfUkVNQ1NVTV9UWCkpIHx8 CiAgICAxODcwOglmNiBjNCA0MCAgICAgICAgICAgICAJdGVzdCAgICQweDQwLCVhaAogICAgMTg3 MzoJMGYgODUgNDkgMDEgMDAgMDAgICAgCWpuZSAgICAxOWMyIDx2eGxhbl9maWxsX2luZm8rMHg1 MzI+CgkgICAgbmxhX3B1dF91OChza2IsIElGTEFfVlhMQU5fUkVNQ1NVTV9SWCwKCQkJISEodnhs YW4tPmZsYWdzICYgVlhMQU5fRl9SRU1DU1VNX1JYKSkpCgkJZ290byBubGFfcHV0X2ZhaWx1cmU7 CgoJaWYgKG5sYV9wdXQoc2tiLCBJRkxBX1ZYTEFOX1BPUlRfUkFOR0UsIHNpemVvZihwb3J0cyks ICZwb3J0cykpCiAgICAxODc5OglmNiBjNCAxMCAgICAgICAgICAgICAJdGVzdCAgICQweDEwLCVh aAogICAgMTg3YzoJNzQgMWUgICAgICAgICAgICAgICAgCWplICAgICAxODljIDx2eGxhbl9maWxs X2luZm8rMHg0MGM+CiAgICAxODdlOgkzMSBjOSAgICAgICAgICAgICAgICAJeG9yICAgICVlY3gs JWVjeAogICAgMTg4MDoJMzEgZDIgICAgICAgICAgICAgICAgCXhvciAgICAlZWR4LCVlZHgKICAg IDE4ODI6CWJlIDE4IDAwIDAwIDAwICAgICAgIAltb3YgICAgJDB4MTgsJWVzaQogICAgMTg4NzoJ NGMgODkgZTcgICAgICAgICAgICAgCW1vdiAgICAlcjEyLCVyZGkKICAgIDE4OGE6CWU4IDAwIDAw IDAwIDAwICAgICAgIAljYWxscSAgMTg4ZiA8dnhsYW5fZmlsbF9pbmZvKzB4M2ZmPgogICAgMTg4 ZjoJODUgYzAgICAgICAgICAgICAgICAgCXRlc3QgICAlZWF4LCVlYXgKCQlnb3RvIG5sYV9wdXRf ZmFpbHVyZTsKCglpZiAodnhsYW4tPmZsYWdzICYgVlhMQU5fRl9HQlAgJiYKICAgIDE4OTE6CTQx IDg5IGM1ICAgICAgICAgICAgIAltb3YgICAgJWVheCwlcjEzZAogICAgMTg5NDoJNzQgMDYgICAg ICAgICAgICAgICAgCWplICAgICAxODljIDx2eGxhbl9maWxsX2luZm8rMHg0MGM+CiAgICAxODk2 Ogk0MSBiZCBhNiBmZiBmZiBmZiAgICAJbW92ICAgICQweGZmZmZmZmE2LCVyMTNkCiAgICAxODlj Ogk0OCA4YiA3NSBlMCAgICAgICAgICAJbW92ICAgIC0weDIwKCVyYnApLCVyc2kKCSAgICBubGFf cHV0X2ZsYWcoc2tiLCBJRkxBX1ZYTEFOX0dCUCkpCgkJZ290byBubGFfcHV0X2ZhaWx1cmU7CgoJ aWYgKHZ4bGFuLT5mbGFncyAmIFZYTEFOX0ZfR1BFICYmCiAgICAxOGEwOgk2NSA0OCAzMyAzNCAy NSAyOCAwMCAJeG9yICAgICVnczoweDI4LCVyc2kKICAgIDE4YTc6CTAwIDAwIAoJICAgIG5sYV9w dXRfZmxhZyhza2IsIElGTEFfVlhMQU5fR1BFKSkKCQlnb3RvIG5sYV9wdXRfZmFpbHVyZTsKCglp ZiAodnhsYW4tPmZsYWdzICYgVlhMQU5fRl9SRU1DU1VNX05PUEFSVElBTCAmJgogICAgMThhOToJ NDQgODkgZTggICAgICAgICAgICAgCW1vdiAgICAlcjEzZCwlZWF4CiAgICAxOGFjOgkwZiA4NSAz NCAwMSAwMCAwMCAgICAJam5lICAgIDE5ZTYgPHZ4bGFuX2ZpbGxfaW5mbysweDU1Nj4KICogQHNr Yjogc29ja2V0IGJ1ZmZlciB0byBhZGQgYXR0cmlidXRlIHRvCiAqIEBhdHRydHlwZTogYXR0cmli dXRlIHR5cGUKICovCnN0YXRpYyBpbmxpbmUgaW50IG5sYV9wdXRfZmxhZyhzdHJ1Y3Qgc2tfYnVm ZiAqc2tiLCBpbnQgYXR0cnR5cGUpCnsKCXJldHVybiBubGFfcHV0KHNrYiwgYXR0cnR5cGUsIDAs IE5VTEwpOwogICAgMThiMjoJNDggODMgYzQgMzggICAgICAgICAgCWFkZCAgICAkMHgzOCwlcnNw CiAgICAxOGI2Ogk1YiAgICAgICAgICAgICAgICAgICAJcG9wICAgICVyYngKICAgIDE4Yjc6CTQx IDVjICAgICAgICAgICAgICAgIAlwb3AgICAgJXIxMgogICAgMThiOToJNDEgNWQgICAgICAgICAg ICAgICAgCXBvcCAgICAlcjEzCiAgICAxOGJiOgk1ZCAgICAgICAgICAgICAgICAgICAJcG9wICAg ICVyYnAKICAgIDE4YmM6CWMzICAgICAgICAgICAgICAgICAgIAlyZXRxICAgCiAgICAxOGJkOgk2 NiA4MyBmOCAwMiAgICAgICAgICAJY21wICAgICQweDIsJWF4CiAgICAxOGMxOgkwZiA4NCBiMSAw MCAwMCAwMCAgICAJamUgICAgIDE5NzggPHZ4bGFuX2ZpbGxfaW5mbysweDRlOD4KCQlnb3RvIG5s YV9wdXRfZmFpbHVyZTsKCglyZXR1cm4gMDsKCm5sYV9wdXRfZmFpbHVyZToKCXJldHVybiAtRU1T R1NJWkU7CiAgICAxOGM3Ogk0OCA4ZCA4YiA4OCAwOCAwMCAwMCAJbGVhICAgIDB4ODg4KCVyYngp LCVyY3gKfQogICAgMThjZToJYmEgMTAgMDAgMDAgMDAgICAgICAgCW1vdiAgICAkMHgxMCwlZWR4 CiAgICAxOGQzOgliZSAxMCAwMCAwMCAwMCAgICAgICAJbW92ICAgICQweDEwLCVlc2kKICAgIDE4 ZDg6CTRjIDg5IGU3ICAgICAgICAgICAgIAltb3YgICAgJXIxMiwlcmRpCiAgICAxOGRiOgllOCAw MCAwMCAwMCAwMCAgICAgICAJY2FsbHEgIDE4ZTAgPHZ4bGFuX2ZpbGxfaW5mbysweDQ1MD4KICAg IDE4ZTA6CTg1IGMwICAgICAgICAgICAgICAgIAl0ZXN0ICAgJWVheCwlZWF4CiAgICAxOGUyOgk3 NSBiMiAgICAgICAgICAgICAgICAJam5lICAgIDE4OTYgPHZ4bGFuX2ZpbGxfaW5mbysweDQwNj4K ICAgIDE4ZTQ6CThiIDgzIGE0IDA4IDAwIDAwICAgIAltb3YgICAgMHg4YTQoJXJieCksJWVheAog ICAgMThlYToJODUgYzAgICAgICAgICAgICAgICAgCXRlc3QgICAlZWF4LCVlYXgKICAgIDE4ZWM6 CTBmIDg0IDM2IGZjIGZmIGZmICAgIAlqZSAgICAgMTUyOCA8dnhsYW5fZmlsbF9pbmZvKzB4OTg+ CgoJaWYgKG5sYV9wdXRfdTMyKHNrYiwgSUZMQV9WWExBTl9JRCwgYmUzMl90b19jcHUoZHN0LT5y ZW1vdGVfdm5pKSkpCgkJZ290byBubGFfcHV0X2ZhaWx1cmU7CgoJaWYgKCF2eGxhbl9hZGRyX2Fu eSgmZHN0LT5yZW1vdGVfaXApKSB7CgkJaWYgKGRzdC0+cmVtb3RlX2lwLnNhLnNhX2ZhbWlseSA9 PSBBRl9JTkVUKSB7CiAgICAxOGYyOgk0OCA4ZCA0ZCBjOCAgICAgICAgICAJbGVhICAgIC0weDM4 KCVyYnApLCVyY3gKICAgIDE4ZjY6CWJhIDA0IDAwIDAwIDAwICAgICAgIAltb3YgICAgJDB4NCwl ZWR4CgkJCWlmIChubGFfcHV0X2luX2FkZHIoc2tiLCBJRkxBX1ZYTEFOX0dST1VQLAoJCQkJCSAg ICBkc3QtPnJlbW90ZV9pcC5zaW4uc2luX2FkZHIuc19hZGRyKSkKCQkJCWdvdG8gbmxhX3B1dF9m YWlsdXJlOwojaWYgSVNfRU5BQkxFRChDT05GSUdfSVBWNikKCQl9IGVsc2UgewoJCQlpZiAobmxh X3B1dF9pbjZfYWRkcihza2IsIElGTEFfVlhMQU5fR1JPVVA2LAogICAgMThmYjoJYmUgMDMgMDAg MDAgMDAgICAgICAgCW1vdiAgICAkMHgzLCVlc2kKICogQGFkZHI6IElQdjYgYWRkcmVzcwogKi8K c3RhdGljIGlubGluZSBpbnQgbmxhX3B1dF9pbjZfYWRkcihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBp bnQgYXR0cnR5cGUsCgkJCQkgICBjb25zdCBzdHJ1Y3QgaW42X2FkZHIgKmFkZHIpCnsKCXJldHVy biBubGFfcHV0KHNrYiwgYXR0cnR5cGUsIHNpemVvZigqYWRkciksIGFkZHIpOwogICAgMTkwMDoJ NGMgODkgZTcgICAgICAgICAgICAgCW1vdiAgICAlcjEyLCVyZGkKICAgIDE5MDM6CTg5IDQ1IGM4 ICAgICAgICAgICAgIAltb3YgICAgJWVheCwtMHgzOCglcmJwKQogICAgMTkwNjoJZTggMDAgMDAg MDAgMDAgICAgICAgCWNhbGxxICAxOTBiIDx2eGxhbl9maWxsX2luZm8rMHg0N2I+CiAgICAxOTBi Ogk4NSBjMCAgICAgICAgICAgICAgICAJdGVzdCAgICVlYXgsJWVheAogICAgMTkwZDoJNzUgODcg ICAgICAgICAgICAgICAgCWpuZSAgICAxODk2IDx2eGxhbl9maWxsX2luZm8rMHg0MDY+CiAgICAx OTBmOgkwZiBiNyA4MyA1NCAwOSAwMCAwMCAJbW92endsIDB4OTU0KCVyYngpLCVlYXgKCQkJCWdv dG8gbmxhX3B1dF9mYWlsdXJlOwojZW5kaWYKCQl9Cgl9CgoJaWYgKGRzdC0+cmVtb3RlX2lmaW5k ZXggJiYgbmxhX3B1dF91MzIoc2tiLCBJRkxBX1ZYTEFOX0xJTkssIGRzdC0+cmVtb3RlX2lmaW5k ZXgpKQogICAgMTkxNjoJNjYgODMgZjggMGEgICAgICAgICAgCWNtcCAgICAkMHhhLCVheAogICAg MTkxYToJMGYgODUgMTkgZmMgZmYgZmYgICAgCWpuZSAgICAxNTM5IDx2eGxhbl9maWxsX2luZm8r MHhhOT4KICAgIDE5MjA6CTQ4IDhiIDgzIDVjIDA5IDAwIDAwIAltb3YgICAgMHg5NWMoJXJieCks JXJheAogKiBAYXR0cnR5cGU6IGF0dHJpYnV0ZSB0eXBlCiAqIEB2YWx1ZTogbnVtZXJpYyB2YWx1 ZQogKi8Kc3RhdGljIGlubGluZSBpbnQgbmxhX3B1dF91MzIoc3RydWN0IHNrX2J1ZmYgKnNrYiwg aW50IGF0dHJ0eXBlLCB1MzIgdmFsdWUpCnsKCXJldHVybiBubGFfcHV0KHNrYiwgYXR0cnR5cGUs IHNpemVvZih1MzIpLCAmdmFsdWUpOwogICAgMTkyNzoJNDggMGIgODMgNjQgMDkgMDAgMDAgCW9y ICAgICAweDk2NCglcmJ4KSwlcmF4CiAgICAxOTJlOgkwZiA4NSAxOSBmYyBmZiBmZiAgICAJam5l ICAgIDE1NGQgPHZ4bGFuX2ZpbGxfaW5mbysweGJkPgogICAgMTkzNDoJZTkgMzUgZmMgZmYgZmYg ICAgICAgCWptcHEgICAxNTZlIDx2eGxhbl9maWxsX2luZm8rMHhkZT4KICAgIDE5Mzk6CTQ4IDhi IDgzIDg4IDA4IDAwIDAwIAltb3YgICAgMHg4ODgoJXJieCksJXJheAoJCXJldHVybiBhLT5zaW4u c2luX2FkZHIuc19hZGRyID09IGItPnNpbi5zaW5fYWRkci5zX2FkZHI7Cn0KCnN0YXRpYyBpbmxp bmUgYm9vbCB2eGxhbl9hZGRyX2FueShjb25zdCB1bmlvbiB2eGxhbl9hZGRyICppcGEpCnsKCWlm IChpcGEtPnNhLnNhX2ZhbWlseSA9PSBBRl9JTkVUNikKICAgIDE5NDA6CTQ4IDBiIDgzIDkwIDA4 IDAwIDAwIAlvciAgICAgMHg4OTAoJXJieCksJXJheAogICAgMTk0NzoJMGYgODUgN2EgZmYgZmYg ZmYgICAgCWpuZSAgICAxOGM3IDx2eGxhbl9maWxsX2luZm8rMHg0Mzc+CiAgICAxOTRkOgllOSBj OCBmYiBmZiBmZiAgICAgICAJam1wcSAgIDE1MWEgPHZ4bGFuX2ZpbGxfaW5mbysweDhhPgoJfQoK CWlmIChkc3QtPnJlbW90ZV9pZmluZGV4ICYmIG5sYV9wdXRfdTMyKHNrYiwgSUZMQV9WWExBTl9M SU5LLCBkc3QtPnJlbW90ZV9pZmluZGV4KSkKCQlnb3RvIG5sYV9wdXRfZmFpbHVyZTsKCglpZiAo IXZ4bGFuX2FkZHJfYW55KCZ2eGxhbi0+Y2ZnLnNhZGRyKSkgewogICAgMTk1MjoJNDggOGQgNGQg Y2MgICAgICAgICAgCWxlYSAgICAtMHgzNCglcmJwKSwlcmN4CiAgICAxOTU2Ogk4OSA1NSBjYyAg ICAgICAgICAgICAJbW92ICAgICVlZHgsLTB4MzQoJXJicCkKICAgIDE5NTk6CWJlIDA0IDAwIDAw IDAwICAgICAgIAltb3YgICAgJDB4NCwlZXNpCiAgICAxOTVlOgliYSAwNCAwMCAwMCAwMCAgICAg ICAJbW92ICAgICQweDQsJWVkeAogICAgMTk2MzoJNGMgODkgZTcgICAgICAgICAgICAgCW1vdiAg ICAlcjEyLCVyZGkKICAgIDE5NjY6CWU4IDAwIDAwIDAwIDAwICAgICAgIAljYWxscSAgMTk2YiA8 dnhsYW5fZmlsbF9pbmZvKzB4NGRiPgoJfTsKCglpZiAobmxhX3B1dF91MzIoc2tiLCBJRkxBX1ZY TEFOX0lELCBiZTMyX3RvX2NwdShkc3QtPnJlbW90ZV92bmkpKSkKCQlnb3RvIG5sYV9wdXRfZmFp bHVyZTsKCglpZiAoIXZ4bGFuX2FkZHJfYW55KCZkc3QtPnJlbW90ZV9pcCkpIHsKICAgIDE5NmI6 CTg1IGMwICAgICAgICAgICAgICAgIAl0ZXN0ICAgJWVheCwlZWF4CiAgICAxOTZkOgkwZiA4NCBm YiBmYiBmZiBmZiAgICAJamUgICAgIDE1NmUgPHZ4bGFuX2ZpbGxfaW5mbysweGRlPgogICAgMTk3 MzoJZTkgMWUgZmYgZmYgZmYgICAgICAgCWptcHEgICAxODk2IDx2eGxhbl9maWxsX2luZm8rMHg0 MDY+CiAgICAxOTc4Ogk0OCA4ZCA0ZCBjNCAgICAgICAgICAJbGVhICAgIC0weDNjKCVyYnApLCVy Y3gKICAgIDE5N2M6CTg5IDU1IGM0ICAgICAgICAgICAgIAltb3YgICAgJWVkeCwtMHgzYyglcmJw KQogICAgMTk3ZjoJYmUgMDIgMDAgMDAgMDAgICAgICAgCW1vdiAgICAkMHgyLCVlc2kKICogQGF0 dHJ0eXBlOiBhdHRyaWJ1dGUgdHlwZQogKiBAdmFsdWU6IG51bWVyaWMgdmFsdWUKICovCnN0YXRp YyBpbmxpbmUgaW50IG5sYV9wdXRfYmUzMihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBpbnQgYXR0cnR5 cGUsIF9fYmUzMiB2YWx1ZSkKewoJcmV0dXJuIG5sYV9wdXQoc2tiLCBhdHRydHlwZSwgc2l6ZW9m KF9fYmUzMiksICZ2YWx1ZSk7CiAgICAxOTg0OgliYSAwNCAwMCAwMCAwMCAgICAgICAJbW92ICAg ICQweDQsJWVkeAogICAgMTk4OToJNGMgODkgZTcgICAgICAgICAgICAgCW1vdiAgICAlcjEyLCVy ZGkKICAgIDE5OGM6CWU4IDAwIDAwIDAwIDAwICAgICAgIAljYWxscSAgMTk5MSA8dnhsYW5fZmls bF9pbmZvKzB4NTAxPgogICAgMTk5MToJODUgYzAgICAgICAgICAgICAgICAgCXRlc3QgICAlZWF4 LCVlYXgKICAgIDE5OTM6CTBmIDg0IDgxIGZiIGZmIGZmICAgIAlqZSAgICAgMTUxYSA8dnhsYW5f ZmlsbF9pbmZvKzB4OGE+CiAgICAxOTk5OgllOSBmOCBmZSBmZiBmZiAgICAgICAJam1wcSAgIDE4 OTYgPHZ4bGFuX2ZpbGxfaW5mbysweDQwNj4KCWlmIChkc3QtPnJlbW90ZV9pZmluZGV4ICYmIG5s YV9wdXRfdTMyKHNrYiwgSUZMQV9WWExBTl9MSU5LLCBkc3QtPnJlbW90ZV9pZmluZGV4KSkKCQln b3RvIG5sYV9wdXRfZmFpbHVyZTsKCglpZiAoIXZ4bGFuX2FkZHJfYW55KCZ2eGxhbi0+Y2ZnLnNh ZGRyKSkgewoJCWlmICh2eGxhbi0+Y2ZnLnNhZGRyLnNhLnNhX2ZhbWlseSA9PSBBRl9JTkVUKSB7 CgkJCWlmIChubGFfcHV0X2luX2FkZHIoc2tiLCBJRkxBX1ZYTEFOX0xPQ0FMLAogICAgMTk5ZToJ MzEgYzkgICAgICAgICAgICAgICAgCXhvciAgICAlZWN4LCVlY3gKICAgIDE5YTA6CTMxIGQyICAg ICAgICAgICAgICAgIAl4b3IgICAgJWVkeCwlZWR4CiAgICAxOWEyOgliZSAxNyAwMCAwMCAwMCAg ICAgICAJbW92ICAgICQweDE3LCVlc2kKICAgIDE5YTc6CTRjIDg5IGU3ICAgICAgICAgICAgIAlt b3YgICAgJXIxMiwlcmRpCiAgICAxOWFhOgllOCAwMCAwMCAwMCAwMCAgICAgICAJY2FsbHEgIDE5 YWYgPHZ4bGFuX2ZpbGxfaW5mbysweDUxZj4KICAgIDE5YWY6CTg1IGMwICAgICAgICAgICAgICAg IAl0ZXN0ICAgJWVheCwlZWF4CiAgICAxOWIxOgkwZiA4NSBkZiBmZSBmZiBmZiAgICAJam5lICAg IDE4OTYgPHZ4bGFuX2ZpbGxfaW5mbysweDQwNj4KICAgIDE5Yjc6CThiIDgzIGQ4IDA4IDAwIDAw ICAgIAltb3YgICAgMHg4ZDgoJXJieCksJWVheAogICAgMTliZDoJZTkgYWUgZmUgZmYgZmYgICAg ICAgCWptcHEgICAxODcwIDx2eGxhbl9maWxsX2luZm8rMHgzZTA+CglpZiAobmxhX3B1dF91MzIo c2tiLCBJRkxBX1ZYTEFOX0lELCBiZTMyX3RvX2NwdShkc3QtPnJlbW90ZV92bmkpKSkKCQlnb3Rv IG5sYV9wdXRfZmFpbHVyZTsKCglpZiAoIXZ4bGFuX2FkZHJfYW55KCZkc3QtPnJlbW90ZV9pcCkp IHsKCQlpZiAoZHN0LT5yZW1vdGVfaXAuc2Euc2FfZmFtaWx5ID09IEFGX0lORVQpIHsKCQkJaWYg KG5sYV9wdXRfaW5fYWRkcihza2IsIElGTEFfVlhMQU5fR1JPVVAsCiAgICAxOWMyOgkzMSBjOSAg ICAgICAgICAgICAgICAJeG9yICAgICVlY3gsJWVjeAogICAgMTljNDoJMzEgZDIgICAgICAgICAg ICAgICAgCXhvciAgICAlZWR4LCVlZHgKICAgIDE5YzY6CWJlIDFiIDAwIDAwIDAwICAgICAgIAlt b3YgICAgJDB4MWIsJWVzaQogICAgMTljYjoJNGMgODkgZTcgICAgICAgICAgICAgCW1vdiAgICAl cjEyLCVyZGkKICogQHNrYjogc29ja2V0IGJ1ZmZlciB0byBhZGQgYXR0cmlidXRlIHRvCiAqIEBh dHRydHlwZTogYXR0cmlidXRlIHR5cGUKICovCnN0YXRpYyBpbmxpbmUgaW50IG5sYV9wdXRfZmxh ZyhzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBpbnQgYXR0cnR5cGUpCnsKCXJldHVybiBubGFfcHV0KHNr YiwgYXR0cnR5cGUsIDAsIE5VTEwpOwogICAgMTljZToJZTggMDAgMDAgMDAgMDAgICAgICAgCWNh bGxxICAxOWQzIDx2eGxhbl9maWxsX2luZm8rMHg1NDM+CiAgICAxOWQzOgk4NSBjMCAgICAgICAg ICAgICAgICAJdGVzdCAgICVlYXgsJWVheAogICAgMTlkNToJMGYgODUgYmIgZmUgZmYgZmYgICAg CWpuZSAgICAxODk2IDx2eGxhbl9maWxsX2luZm8rMHg0MDY+CiAgICAxOWRiOgk4YiA4MyBkOCAw OCAwMCAwMCAgICAJbW92ICAgIDB4OGQ4KCVyYngpLCVlYXgKCQlnb3RvIG5sYV9wdXRfZmFpbHVy ZTsKCglpZiAobmxhX3B1dChza2IsIElGTEFfVlhMQU5fUE9SVF9SQU5HRSwgc2l6ZW9mKHBvcnRz KSwgJnBvcnRzKSkKCQlnb3RvIG5sYV9wdXRfZmFpbHVyZTsKCglpZiAodnhsYW4tPmZsYWdzICYg VlhMQU5fRl9HQlAgJiYKICAgIDE5ZTE6CWU5IDkzIGZlIGZmIGZmICAgICAgIAlqbXBxICAgMTg3 OSA8dnhsYW5fZmlsbF9pbmZvKzB4M2U5PgogICAgMTllNjoJZTggMDAgMDAgMDAgMDAgICAgICAg CWNhbGxxICAxOWViIDx2eGxhbl9maWxsX2luZm8rMHg1NWI+CiAgICAxOWViOgkwZiAxZiA0NCAw MCAwMCAgICAgICAJbm9wbCAgIDB4MCglcmF4LCVyYXgsMSkKCjAwMDAwMDAwMDAwMDE5ZjAgPHZ4 bGFuX2ZkYl9pbmZvPjoKICAgIDE5ZjA6CWU4IDAwIDAwIDAwIDAwICAgICAgIAljYWxscSAgMTlm NSA8dnhsYW5fZmRiX2luZm8rMHg1PgogICAgMTlmNToJNTUgICAgICAgICAgICAgICAgICAgCXB1 c2ggICAlcmJwCiAgICAxOWY2Ogk0OCA4OSBlNSAgICAgICAgICAgICAJbW92ICAgICVyc3AsJXJi cAogICAgMTlmOToJNDEgNTcgICAgICAgICAgICAgICAgCXB1c2ggICAlcjE1CiAgICAxOWZiOgk0 MSA1NiAgICAgICAgICAgICAgICAJcHVzaCAgICVyMTQKICAgIDE5ZmQ6CTQxIDU1ICAgICAgICAg ICAgICAgIAlwdXNoICAgJXIxMwogICAgMTlmZjoJNDEgNTQgICAgICAgICAgICAgICAgCXB1c2gg ICAlcjEyCiAgICAxYTAxOgk1MyAgICAgICAgICAgICAgICAgICAJcHVzaCAgICVyYngKICAgIDFh MDI6CTQ4IDgzIGVjIDQwICAgICAgICAgIAlzdWIgICAgJDB4NDAsJXJzcAoJICAgIG5sYV9wdXRf ZmxhZyhza2IsIElGTEFfVlhMQU5fR0JQKSkKCQlnb3RvIG5sYV9wdXRfZmFpbHVyZTsKCglpZiAo dnhsYW4tPmZsYWdzICYgVlhMQU5fRl9HUEUgJiYKICAgIDFhMDY6CTQ0IDhiIDk3IDg0IDAwIDAw IDAwIAltb3YgICAgMHg4NCglcmRpKSwlcjEwZAogICAgMWEwZDoJNGMgOGIgNzUgMTggICAgICAg ICAgCW1vdiAgICAweDE4KCVyYnApLCVyMTQKICAgIDFhMTE6CTY1IDQ4IDhiIDA0IDI1IDI4IDAw IAltb3YgICAgJWdzOjB4MjgsJXJheAogICAgMWExODoJMDAgMDAgCgoJcmV0dXJuIDA7CgpubGFf cHV0X2ZhaWx1cmU6CglyZXR1cm4gLUVNU0dTSVpFOwp9CiAgICAxYTFhOgk0OCA4OSA0NSBkMCAg ICAgICAgICAJbW92ICAgICVyYXgsLTB4MzAoJXJicCkKICAgIDFhMWU6CTMxIGMwICAgICAgICAg ICAgICAgIAl4b3IgICAgJWVheCwlZWF4Ci8qIEZpbGwgaW4gbmVpZ2hib3VyIG1lc3NhZ2UgaW4g c2tidWZmLiAqLwpzdGF0aWMgaW50IHZ4bGFuX2ZkYl9pbmZvKHN0cnVjdCBza19idWZmICpza2Is IHN0cnVjdCB2eGxhbl9kZXYgKnZ4bGFuLAoJCQkgIGNvbnN0IHN0cnVjdCB2eGxhbl9mZGIgKmZk YiwKCQkJICB1MzIgcG9ydGlkLCB1MzIgc2VxLCBpbnQgdHlwZSwgdW5zaWduZWQgaW50IGZsYWdz LAoJCQkgIGNvbnN0IHN0cnVjdCB2eGxhbl9yZHN0ICpyZHN0KQp7CiAgICAxYTIwOgk0OCA4YiAw NSAwMCAwMCAwMCAwMCAJbW92ICAgIDB4MCglcmlwKSwlcmF4ICAgICAgICAjIDFhMjcgPHZ4bGFu X2ZkYl9pbmZvKzB4Mzc+CiAgICAxYTI3Ogk0NSA4NSBkMiAgICAgICAgICAgICAJdGVzdCAgICVy MTBkLCVyMTBkCiAgICAxYTJhOgk0OCA4OSA0NSBhMCAgICAgICAgICAJbW92ICAgICVyYXgsLTB4 NjAoJXJicCkKICAgIDFhMmU6CTBmIDg1IDM0IDAyIDAwIDAwICAgIAlqbmUgICAgMWM2OCA8dnhs YW5fZmRiX2luZm8rMHgyNzg+CiAgICAxYTM0Ogk4YiA4NyBjYyAwMCAwMCAwMCAgICAJbW92ICAg IDB4Y2MoJXJkaSksJWVheAogKgogKglSZXR1cm4gdGhlIG51bWJlciBvZiBieXRlcyBvZiBmcmVl IHNwYWNlIGF0IHRoZSB0YWlsIG9mIGFuIHNrX2J1ZmYKICovCnN0YXRpYyBpbmxpbmUgaW50IHNr Yl90YWlscm9vbShjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQp7CglyZXR1cm4gc2tiX2lzX25v bmxpbmVhcihza2IpID8gMCA6IHNrYi0+ZW5kIC0gc2tiLT50YWlsOwogICAgMWEzYToJMmIgODcg YzggMDAgMDAgMDAgICAgCXN1YiAgICAweGM4KCVyZGkpLCVlYXgKICAgIDFhNDA6CTQ5IDg5IGZj ICAgICAgICAgICAgIAltb3YgICAgJXJkaSwlcjEyCiAgICAxYTQzOgk4MyBmOCAxYiAgICAgICAg ICAgICAJY21wICAgICQweDFiLCVlYXgKICAgIDFhNDY6CTBmIDhlIDFjIDAyIDAwIDAwICAgIAlq bGUgICAgMWM2OCA8dnhsYW5fZmRiX2luZm8rMHgyNzg+CiAgICAxYTRjOgk0NSA4OSBjYiAgICAg ICAgICAgICAJbW92ICAgICVyOWQsJXIxMWQKICAgIDFhNGY6CTQ0IDhiIDRkIDEwICAgICAgICAg IAltb3YgICAgMHgxMCglcmJwKSwlcjlkCgl1bnNpZ25lZCBsb25nIG5vdyA9IGppZmZpZXM7CiAg ICAxYTUzOgk0OSA4OSBmNyAgICAgICAgICAgICAJbW92ICAgICVyc2ksJXIxNQogICAgMWE1NjoJ NDkgODkgZDUgICAgICAgICAgICAgCW1vdiAgICAlcmR4LCVyMTMKICAgIDFhNTk6CTg5IGNlICAg ICAgICAgICAgICAgIAltb3YgICAgJWVjeCwlZXNpCiAgICAxYTViOgk0NCA4OSBjMiAgICAgICAg ICAgICAJbW92ICAgICVyOGQsJWVkeAogICAgMWE1ZToJNDQgODkgZDkgICAgICAgICAgICAgCW1v diAgICAlcjExZCwlZWN4CiAgICAxYTYxOgk0MSBiOCAwYyAwMCAwMCAwMCAgICAJbW92ICAgICQw eGMsJXI4ZAogKiB0aGUgbWVzc2FnZSBoZWFkZXIgYW5kIHBheWxvYWQuCiAqLwpzdGF0aWMgaW5s aW5lIHN0cnVjdCBubG1zZ2hkciAqbmxtc2dfcHV0KHN0cnVjdCBza19idWZmICpza2IsIHUzMiBw b3J0aWQsIHUzMiBzZXEsCgkJCQkJIGludCB0eXBlLCBpbnQgcGF5bG9hZCwgaW50IGZsYWdzKQp7 CglpZiAodW5saWtlbHkoc2tiX3RhaWxyb29tKHNrYikgPCBubG1zZ190b3RhbF9zaXplKHBheWxv YWQpKSkKICAgIDFhNjc6CTQ0IDg5IDVkIDljICAgICAgICAgIAltb3YgICAgJXIxMWQsLTB4NjQo JXJicCkKICAgIDFhNmI6CWU4IDAwIDAwIDAwIDAwICAgICAgIAljYWxscSAgMWE3MCA8dnhsYW5f ZmRiX2luZm8rMHg4MD4KICAgIDFhNzA6CTQ4IDg1IGMwICAgICAgICAgICAgIAl0ZXN0ICAgJXJh eCwlcmF4CiAgICAxYTczOgk0OCA4OSBjMyAgICAgICAgICAgICAJbW92ICAgICVyYXgsJXJieAog ICAgMWE3NjoJMGYgODQgZWMgMDEgMDAgMDAgICAgCWplICAgICAxYzY4IDx2eGxhbl9mZGJfaW5m bysweDI3OD4KICAgIDFhN2M6CTQ0IDhiIDVkIDljICAgICAgICAgIAltb3YgICAgLTB4NjQoJXJi cCksJXIxMWQKCQlyZXR1cm4gTlVMTDsKCglyZXR1cm4gX19ubG1zZ19wdXQoc2tiLCBwb3J0aWQs IHNlcSwgdHlwZSwgcGF5bG9hZCwgZmxhZ3MpOwogICAgMWE4MDoJNDggYzcgNDAgMTAgMDAgMDAg MDAgCW1vdnEgICAkMHgwLDB4MTAoJXJheCkKICAgIDFhODc6CTAwIAogICAgMWE4ODoJYzcgNDAg MTggMDAgMDAgMDAgMDAgCW1vdmwgICAkMHgwLDB4MTgoJXJheCkKICAgIDFhOGY6CTQxIDgzIGZi IDFlICAgICAgICAgIAljbXAgICAgJDB4MWUsJXIxMWQKICAgIDFhOTM6CTBmIDg0IDIyIDAyIDAw IDAwICAgIAlqZSAgICAgMWNiYiA8dnhsYW5fZmRiX2luZm8rMHgyY2I+CiAgICAxYTk5OgljNiA0 MCAxMCAwNyAgICAgICAgICAJbW92YiAgICQweDcsMHgxMCglcmF4KQogICAgMWE5ZDoJNDEgYjkg MDEgMDAgMDAgMDAgICAgCW1vdiAgICAkMHgxLCVyOWQKICAgIDFhYTM6CTQxIGI4IDAxIDAwIDAw IDAwICAgIAltb3YgICAgJDB4MSwlcjhkCglzdHJ1Y3Qgbmxtc2doZHIgKm5saDsKCXN0cnVjdCBu ZG1zZyAqbmRtOwoJYm9vbCBzZW5kX2lwLCBzZW5kX2V0aDsKCglubGggPSBubG1zZ19wdXQoc2ti LCBwb3J0aWQsIHNlcSwgdHlwZSwgc2l6ZW9mKCpuZG0pLCBmbGFncyk7CglpZiAobmxoID09IE5V TEwpCiAgICAxYWE5Ogk0MSAwZiBiNyA0NSA0NiAgICAgICAJbW92endsIDB4NDYoJXIxMyksJWVh eAoJbmRtID0gbmxtc2dfZGF0YShubGgpOwoJbWVtc2V0KG5kbSwgMCwgc2l6ZW9mKCpuZG0pKTsK CglzZW5kX2V0aCA9IHNlbmRfaXAgPSB0cnVlOwoKCWlmICh0eXBlID09IFJUTV9HRVRORUlHSCkg ewogICAgMWFhZToJNjYgODkgNDMgMTggICAgICAgICAgCW1vdiAgICAlYXgsMHgxOCglcmJ4KQoJ bmxoID0gbmxtc2dfcHV0KHNrYiwgcG9ydGlkLCBzZXEsIHR5cGUsIHNpemVvZigqbmRtKSwgZmxh Z3MpOwoJaWYgKG5saCA9PSBOVUxMKQoJCXJldHVybiAtRU1TR1NJWkU7CgoJbmRtID0gbmxtc2df ZGF0YShubGgpOwoJbWVtc2V0KG5kbSwgMCwgc2l6ZW9mKCpuZG0pKTsKICAgIDFhYjI6CTQ5IDhi IDQ3IDMwICAgICAgICAgIAltb3YgICAgMHgzMCglcjE1KSwlcmF4CiAgICAxYWI2Ogk4YiA4MCAy OCAwMSAwMCAwMCAgICAJbW92ICAgIDB4MTI4KCVyYXgpLCVlYXgKICAgIDFhYmM6CTg5IDQzIDE0 ICAgICAgICAgICAgIAltb3YgICAgJWVheCwweDE0KCVyYngpCgoJc2VuZF9ldGggPSBzZW5kX2lw ID0gdHJ1ZTsKCglpZiAodHlwZSA9PSBSVE1fR0VUTkVJR0gpIHsKICAgIDFhYmY6CTQxIDBmIGI2 IDQ1IDQ4ICAgICAgIAltb3Z6YmwgMHg0OCglcjEzKSwlZWF4CiAgICAxYWM0OgljNiA0MyAxYiAw MSAgICAgICAgICAJbW92YiAgICQweDEsMHgxYiglcmJ4KQogICAgMWFjODoJODggNDMgMWEgICAg ICAgICAgICAgCW1vdiAgICAlYWwsMHgxYSglcmJ4KQoJCW5kbS0+bmRtX2ZhbWlseQk9IEFGX0lO RVQ7CgkJc2VuZF9pcCA9ICF2eGxhbl9hZGRyX2FueSgmcmRzdC0+cmVtb3RlX2lwKTsKCQlzZW5k X2V0aCA9ICFpc196ZXJvX2V0aGVyX2FkZHIoZmRiLT5ldGhfYWRkcik7Cgl9IGVsc2UKCQluZG0t Pm5kbV9mYW1pbHkJPSBBRl9CUklER0U7CiAgICAxYWNiOgk0OSA4YiA0NyAzMCAgICAgICAgICAJ bW92ICAgIDB4MzAoJXIxNSksJXJheAoJCXJldHVybiAtRU1TR1NJWkU7CgoJbmRtID0gbmxtc2df ZGF0YShubGgpOwoJbWVtc2V0KG5kbSwgMCwgc2l6ZW9mKCpuZG0pKTsKCglzZW5kX2V0aCA9IHNl bmRfaXAgPSB0cnVlOwogICAgMWFjZjoJNDkgOGIgNzcgMzggICAgICAgICAgCW1vdiAgICAweDM4 KCVyMTUpLCVyc2kKICAgIDFhZDM6CTQ4IDhiIGI4IDgwIDA0IDAwIDAwIAltb3YgICAgMHg0ODAo JXJheCksJXJkaQoJCW5kbS0+bmRtX2ZhbWlseQk9IEFGX0lORVQ7CgkJc2VuZF9pcCA9ICF2eGxh bl9hZGRyX2FueSgmcmRzdC0+cmVtb3RlX2lwKTsKCQlzZW5kX2V0aCA9ICFpc196ZXJvX2V0aGVy X2FkZHIoZmRiLT5ldGhfYWRkcik7Cgl9IGVsc2UKCQluZG0tPm5kbV9mYW1pbHkJPSBBRl9CUklE R0U7CgluZG0tPm5kbV9zdGF0ZSA9IGZkYi0+c3RhdGU7CiAgICAxYWRhOgk0OCAzOSBmZSAgICAg ICAgICAgICAJY21wICAgICVyZGksJXJzaQogICAgMWFkZDoJNzQgMzggICAgICAgICAgICAgICAg CWplICAgICAxYjE3IDx2eGxhbl9mZGJfaW5mbysweDEyNz4KICAgIDFhZGY6CTQ0IDg4IDRkIDli ICAgICAgICAgIAltb3YgICAgJXI5YiwtMHg2NSglcmJwKQoJbmRtLT5uZG1faWZpbmRleCA9IHZ4 bGFuLT5kZXYtPmlmaW5kZXg7CiAgICAxYWUzOgk0NCA4OCA0NSA5YyAgICAgICAgICAJbW92ICAg ICVyOGIsLTB4NjQoJXJicCkKICAgIDFhZTc6CWU4IDAwIDAwIDAwIDAwICAgICAgIAljYWxscSAg MWFlYyA8dnhsYW5fZmRiX2luZm8rMHhmYz4KICAgIDFhZWM6CTQ4IDhkIDRkIGIwICAgICAgICAg IAlsZWEgICAgLTB4NTAoJXJicCksJXJjeAoJbmRtLT5uZG1fZmxhZ3MgPSBmZGItPmZsYWdzOwog ICAgMWFmMDoJYmEgMDQgMDAgMDAgMDAgICAgICAgCW1vdiAgICAkMHg0LCVlZHgKCW5kbS0+bmRt X3R5cGUgPSBSVE5fVU5JQ0FTVDsKICAgIDFhZjU6CWJlIDBhIDAwIDAwIDAwICAgICAgIAltb3Yg ICAgJDB4YSwlZXNpCgkJc2VuZF9ldGggPSAhaXNfemVyb19ldGhlcl9hZGRyKGZkYi0+ZXRoX2Fk ZHIpOwoJfSBlbHNlCgkJbmRtLT5uZG1fZmFtaWx5CT0gQUZfQlJJREdFOwoJbmRtLT5uZG1fc3Rh dGUgPSBmZGItPnN0YXRlOwoJbmRtLT5uZG1faWZpbmRleCA9IHZ4bGFuLT5kZXYtPmlmaW5kZXg7 CgluZG0tPm5kbV9mbGFncyA9IGZkYi0+ZmxhZ3M7CiAgICAxYWZhOgk0YyA4OSBlNyAgICAgICAg ICAgICAJbW92ICAgICVyMTIsJXJkaQogICAgMWFmZDoJODkgNDUgYjAgICAgICAgICAgICAgCW1v diAgICAlZWF4LC0weDUwKCVyYnApCgluZG0tPm5kbV90eXBlID0gUlROX1VOSUNBU1Q7CgoJaWYg KCFuZXRfZXEoZGV2X25ldCh2eGxhbi0+ZGV2KSwgdnhsYW4tPm5ldCkgJiYKICAgIDFiMDA6CWU4 IDAwIDAwIDAwIDAwICAgICAgIAljYWxscSAgMWIwNSA8dnhsYW5fZmRiX2luZm8rMHgxMTU+CiAg ICAxYjA1Ogk4NSBjMCAgICAgICAgICAgICAgICAJdGVzdCAgICVlYXgsJWVheAogICAgMWIwNzoJ NDQgMGYgYjYgNDUgOWMgICAgICAgCW1vdnpibCAtMHg2NCglcmJwKSwlcjhkCiAgICAxYjBjOgk0 NCAwZiBiNiA0ZCA5YiAgICAgICAJbW92emJsIC0weDY1KCVyYnApLCVyOWQKICAgIDFiMTE6CTBm IDg1IDMyIDAxIDAwIDAwICAgIAlqbmUgICAgMWM0OSA8dnhsYW5fZmRiX2luZm8rMHgyNTk+Cgkg ICAgbmxhX3B1dF9zMzIoc2tiLCBOREFfTElOS19ORVROU0lELAogICAgMWIxNzoJNDUgODQgYzkg ICAgICAgICAgICAgCXRlc3QgICAlcjliLCVyOWIKICAgIDFiMWE6CTBmIDg1IDcyIDAxIDAwIDAw ICAgIAlqbmUgICAgMWM5MiA8dnhsYW5fZmRiX2luZm8rMHgyYTI+CiAqIEBhdHRydHlwZTogYXR0 cmlidXRlIHR5cGUKICogQHZhbHVlOiBudW1lcmljIHZhbHVlCiAqLwpzdGF0aWMgaW5saW5lIGlu dCBubGFfcHV0X3MzMihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBpbnQgYXR0cnR5cGUsIHMzMiB2YWx1 ZSkKewoJcmV0dXJuIG5sYV9wdXQoc2tiLCBhdHRydHlwZSwgc2l6ZW9mKHMzMiksICZ2YWx1ZSk7 CiAgICAxYjIwOgk0NSA4NCBjMCAgICAgICAgICAgICAJdGVzdCAgICVyOGIsJXI4YgogICAgMWIy MzoJMGYgODUgZjAgMDAgMDAgMDAgICAgCWpuZSAgICAxYzE5IDx2eGxhbl9mZGJfaW5mbysweDIy OT4KICAgIDFiMjk6CTQxIDBmIGI3IDQ2IDFjICAgICAgIAltb3Z6d2wgMHgxYyglcjE0KSwlZWF4 CiAgICAxYjJlOgk2NiA4NSBjMCAgICAgICAgICAgICAJdGVzdCAgICVheCwlYXgKICAgIDFiMzE6 CTc0IDJjICAgICAgICAgICAgICAgIAlqZSAgICAgMWI1ZiA8dnhsYW5fZmRiX2luZm8rMHgxNmY+ CiAgICAxYjMzOgk2NiA0MSAzYiA4NyAzYyAwMSAwMCAJY21wICAgIDB4MTNjKCVyMTUpLCVheAog ICAgMWIzYToJMDAgCgluZG0tPm5kbV9zdGF0ZSA9IGZkYi0+c3RhdGU7CgluZG0tPm5kbV9pZmlu ZGV4ID0gdnhsYW4tPmRldi0+aWZpbmRleDsKCW5kbS0+bmRtX2ZsYWdzID0gZmRiLT5mbGFnczsK CW5kbS0+bmRtX3R5cGUgPSBSVE5fVU5JQ0FTVDsKCglpZiAoIW5ldF9lcShkZXZfbmV0KHZ4bGFu LT5kZXYpLCB2eGxhbi0+bmV0KSAmJgogICAgMWIzYjoJNzQgMjIgICAgICAgICAgICAgICAgCWpl ICAgICAxYjVmIDx2eGxhbl9mZGJfaW5mbysweDE2Zj4KICAgIDFiM2Q6CTQ4IDhkIDRkIGFlICAg ICAgICAgIAlsZWEgICAgLTB4NTIoJXJicCksJXJjeAogICAgMWI0MToJYmEgMDIgMDAgMDAgMDAg ICAgICAgCW1vdiAgICAkMHgyLCVlZHgKICAgIDFiNDY6CWJlIDA2IDAwIDAwIDAwICAgICAgIAlt b3YgICAgJDB4NiwlZXNpCgkgICAgbmxhX3B1dF9zMzIoc2tiLCBOREFfTElOS19ORVROU0lELAoJ CQlwZWVybmV0MmlkX2FsbG9jKGRldl9uZXQodnhsYW4tPmRldiksIHZ4bGFuLT5uZXQpKSkKCQln b3RvIG5sYV9wdXRfZmFpbHVyZTsKCglpZiAoc2VuZF9ldGggJiYgbmxhX3B1dChza2IsIE5EQV9M TEFERFIsIEVUSF9BTEVOLCAmZmRiLT5ldGhfYWRkcikpCiAgICAxYjRiOgk0YyA4OSBlNyAgICAg ICAgICAgICAJbW92ICAgICVyMTIsJXJkaQogICAgMWI0ZToJNjYgODkgNDUgYWUgICAgICAgICAg CW1vdiAgICAlYXgsLTB4NTIoJXJicCkKCQlnb3RvIG5sYV9wdXRfZmFpbHVyZTsKCglpZiAoc2Vu ZF9pcCAmJiB2eGxhbl9ubGFfcHV0X2FkZHIoc2tiLCBOREFfRFNULCAmcmRzdC0+cmVtb3RlX2lw KSkKICAgIDFiNTI6CWU4IDAwIDAwIDAwIDAwICAgICAgIAljYWxscSAgMWI1NyA8dnhsYW5fZmRi X2luZm8rMHgxNjc+CiAgICAxYjU3Ogk4NSBjMCAgICAgICAgICAgICAgICAJdGVzdCAgICVlYXgs JWVheAoJCWdvdG8gbmxhX3B1dF9mYWlsdXJlOwoKCWlmIChyZHN0LT5yZW1vdGVfcG9ydCAmJiBy ZHN0LT5yZW1vdGVfcG9ydCAhPSB2eGxhbi0+Y2ZnLmRzdF9wb3J0ICYmCiAgICAxYjU5OgkwZiA4 NSBlYSAwMCAwMCAwMCAgICAJam5lICAgIDFjNDkgPHZ4bGFuX2ZkYl9pbmZvKzB4MjU5PgogICAg MWI1ZjoJNDEgOGIgNDYgMjAgICAgICAgICAgCW1vdiAgICAweDIwKCVyMTQpLCVlYXgKICAgIDFi NjM6CTQxIDNiIDQ3IDYwICAgICAgICAgIAljbXAgICAgMHg2MCglcjE1KSwlZWF4CiAgICAxYjY3 Ogk3NCAyMyAgICAgICAgICAgICAgICAJamUgICAgIDFiOGMgPHZ4bGFuX2ZkYl9pbmZvKzB4MTlj PgogICAgMWI2OToJNDggOGQgNGQgYjQgICAgICAgICAgCWxlYSAgICAtMHg0YyglcmJwKSwlcmN4 CiAqIEBhdHRydHlwZTogYXR0cmlidXRlIHR5cGUKICogQHZhbHVlOiBudW1lcmljIHZhbHVlCiAq LwpzdGF0aWMgaW5saW5lIGludCBubGFfcHV0X2JlMTYoc3RydWN0IHNrX2J1ZmYgKnNrYiwgaW50 IGF0dHJ0eXBlLCBfX2JlMTYgdmFsdWUpCnsKCXJldHVybiBubGFfcHV0KHNrYiwgYXR0cnR5cGUs IHNpemVvZihfX2JlMTYpLCAmdmFsdWUpOwogICAgMWI2ZDoJMGYgYzggICAgICAgICAgICAgICAg CWJzd2FwICAlZWF4CiAgICAxYjZmOgliYSAwNCAwMCAwMCAwMCAgICAgICAJbW92ICAgICQweDQs JWVkeAogICAgMWI3NDoJYmUgMDcgMDAgMDAgMDAgICAgICAgCW1vdiAgICAkMHg3LCVlc2kKICAg IDFiNzk6CTRjIDg5IGU3ICAgICAgICAgICAgIAltb3YgICAgJXIxMiwlcmRpCiAgICAxYjdjOgk4 OSA0NSBiNCAgICAgICAgICAgICAJbW92ICAgICVlYXgsLTB4NGMoJXJicCkKICAgIDFiN2Y6CWU4 IDAwIDAwIDAwIDAwICAgICAgIAljYWxscSAgMWI4NCA8dnhsYW5fZmRiX2luZm8rMHgxOTQ+CiAg ICAxYjg0Ogk4NSBjMCAgICAgICAgICAgICAgICAJdGVzdCAgICVlYXgsJWVheAogICAgMWI4NjoJ MGYgODUgYmQgMDAgMDAgMDAgICAgCWpuZSAgICAxYzQ5IDx2eGxhbl9mZGJfaW5mbysweDI1OT4K ICAgIDFiOGM6CTQxIDhiIDQ2IDI0ICAgICAgICAgIAltb3YgICAgMHgyNCglcjE0KSwlZWF4Cgkg ICAgbmxhX3B1dF9iZTE2KHNrYiwgTkRBX1BPUlQsIHJkc3QtPnJlbW90ZV9wb3J0KSkKCQlnb3Rv IG5sYV9wdXRfZmFpbHVyZTsKCWlmIChyZHN0LT5yZW1vdGVfdm5pICE9IHZ4bGFuLT5kZWZhdWx0 X2RzdC5yZW1vdGVfdm5pICYmCiAgICAxYjkwOgk4NSBjMCAgICAgICAgICAgICAgICAJdGVzdCAg ICVlYXgsJWVheAogICAgMWI5MjoJMGYgODUgZDcgMDAgMDAgMDAgICAgCWpuZSAgICAxYzZmIDx2 eGxhbl9mZGJfaW5mbysweDI3Zj4KICAgIDFiOTg6CTRjIDhiIDc1IGEwICAgICAgICAgIAltb3Yg ICAgLTB4NjAoJXJicCksJXIxNAogKiBAYXR0cnR5cGU6IGF0dHJpYnV0ZSB0eXBlCiAqIEB2YWx1 ZTogbnVtZXJpYyB2YWx1ZQogKi8Kc3RhdGljIGlubGluZSBpbnQgbmxhX3B1dF91MzIoc3RydWN0 IHNrX2J1ZmYgKnNrYiwgaW50IGF0dHJ0eXBlLCB1MzIgdmFsdWUpCnsKCXJldHVybiBubGFfcHV0 KHNrYiwgYXR0cnR5cGUsIHNpemVvZih1MzIpLCAmdmFsdWUpOwogICAgMWI5YzoJNGMgODkgZjcg ICAgICAgICAgICAgCW1vdiAgICAlcjE0LCVyZGkKICAgIDFiOWY6CTQ5IDJiIDdkIDI4ICAgICAg ICAgIAlzdWIgICAgMHgyOCglcjEzKSwlcmRpCiAgICAxYmEzOgllOCAwMCAwMCAwMCAwMCAgICAg ICAJY2FsbHEgIDFiYTggPHZ4bGFuX2ZkYl9pbmZvKzB4MWI4PgogICAgMWJhODoJNGMgODkgZjcg ICAgICAgICAgICAgCW1vdiAgICAlcjE0LCVyZGkKICAgIDFiYWI6CTQ5IDJiIDdkIDIwICAgICAg ICAgIAlzdWIgICAgMHgyMCglcjEzKSwlcmRpCiAgICAxYmFmOgk4OSA0NSBjNCAgICAgICAgICAg ICAJbW92ICAgICVlYXgsLTB4M2MoJXJicCkKICAgIDFiYjI6CWM3IDQ1IGMwIDAwIDAwIDAwIDAw IAltb3ZsICAgJDB4MCwtMHg0MCglcmJwKQogICAgMWJiOToJZTggMDAgMDAgMDAgMDAgICAgICAg CWNhbGxxICAxYmJlIDx2eGxhbl9mZGJfaW5mbysweDFjZT4KCSAgICBubGFfcHV0X3UzMihza2Is IE5EQV9WTkksIGJlMzJfdG9fY3B1KHJkc3QtPnJlbW90ZV92bmkpKSkKCQlnb3RvIG5sYV9wdXRf ZmFpbHVyZTsKCWlmIChyZHN0LT5yZW1vdGVfaWZpbmRleCAmJgogICAgMWJiZToJNDggOGQgNGQg YzAgICAgICAgICAgCWxlYSAgICAtMHg0MCglcmJwKSwlcmN4CiAgICAxYmMyOgliYSAxMCAwMCAw MCAwMCAgICAgICAJbW92ICAgICQweDEwLCVlZHgKICAgIDFiYzc6CWJlIDAzIDAwIDAwIDAwICAg ICAgIAltb3YgICAgJDB4MywlZXNpCgkgICAgbmxhX3B1dF91MzIoc2tiLCBOREFfSUZJTkRFWCwg cmRzdC0+cmVtb3RlX2lmaW5kZXgpKQoJCWdvdG8gbmxhX3B1dF9mYWlsdXJlOwoKCWNpLm5kbV91 c2VkCSA9IGppZmZpZXNfdG9fY2xvY2tfdChub3cgLSBmZGItPnVzZWQpOwogICAgMWJjYzoJNGMg ODkgZTcgICAgICAgICAgICAgCW1vdiAgICAlcjEyLCVyZGkKICAgIDFiY2Y6CTg5IDQ1IGM4ICAg ICAgICAgICAgIAltb3YgICAgJWVheCwtMHgzOCglcmJwKQogICAgMWJkMjoJYzcgNDUgY2MgMDAg MDAgMDAgMDAgCW1vdmwgICAkMHgwLC0weDM0KCVyYnApCgljaS5uZG1fY29uZmlybWVkID0gMDsK CWNpLm5kbV91cGRhdGVkCSA9IGppZmZpZXNfdG9fY2xvY2tfdChub3cgLSBmZGItPnVwZGF0ZWQp OwogICAgMWJkOToJZTggMDAgMDAgMDAgMDAgICAgICAgCWNhbGxxICAxYmRlIDx2eGxhbl9mZGJf aW5mbysweDFlZT4KICAgIDFiZGU6CTg1IGMwICAgICAgICAgICAgICAgIAl0ZXN0ICAgJWVheCwl ZWF4CgkJZ290byBubGFfcHV0X2ZhaWx1cmU7CglpZiAocmRzdC0+cmVtb3RlX2lmaW5kZXggJiYK CSAgICBubGFfcHV0X3UzMihza2IsIE5EQV9JRklOREVYLCByZHN0LT5yZW1vdGVfaWZpbmRleCkp CgkJZ290byBubGFfcHV0X2ZhaWx1cmU7CgoJY2kubmRtX3VzZWQJID0gamlmZmllc190b19jbG9j a190KG5vdyAtIGZkYi0+dXNlZCk7CiAgICAxYmUwOgk3NSA2NyAgICAgICAgICAgICAgICAJam5l ICAgIDFjNDkgPHZ4bGFuX2ZkYl9pbmZvKzB4MjU5PgoJY2kubmRtX2NvbmZpcm1lZCA9IDA7CiAg ICAxYmUyOgk0MSA4YiA5NCAyNCBjOCAwMCAwMCAJbW92ICAgIDB4YzgoJXIxMiksJWVkeAogICAg MWJlOToJMDAgCgljaS5uZG1fdXBkYXRlZAkgPSBqaWZmaWVzX3RvX2Nsb2NrX3Qobm93IC0gZmRi LT51cGRhdGVkKTsKICAgIDFiZWE6CTQ5IDAzIDk0IDI0IGQwIDAwIDAwIAlhZGQgICAgMHhkMCgl cjEyKSwlcmR4CiAgICAxYmYxOgkwMCAKCWNpLm5kbV9yZWZjbnQJID0gMDsKCglpZiAobmxhX3B1 dChza2IsIE5EQV9DQUNIRUlORk8sIHNpemVvZihjaSksICZjaSkpCiAgICAxYmYyOgk0OCAyOSBk YSAgICAgICAgICAgICAJc3ViICAgICVyYngsJXJkeAogICAgMWJmNToJODkgMTMgICAgICAgICAg ICAgICAgCW1vdiAgICAlZWR4LCglcmJ4KQogICAgMWJmNzoJNDggOGIgNGQgZDAgICAgICAgICAg CW1vdiAgICAtMHgzMCglcmJwKSwlcmN4CiAgICAxYmZiOgk2NSA0OCAzMyAwYyAyNSAyOCAwMCAJ eG9yICAgICVnczoweDI4LCVyY3gKICAgIDFjMDI6CTAwIDAwIAoJCWdvdG8gbmxhX3B1dF9mYWls dXJlOwoKCWNpLm5kbV91c2VkCSA9IGppZmZpZXNfdG9fY2xvY2tfdChub3cgLSBmZGItPnVzZWQp OwoJY2kubmRtX2NvbmZpcm1lZCA9IDA7CgljaS5uZG1fdXBkYXRlZAkgPSBqaWZmaWVzX3RvX2Ns b2NrX3Qobm93IC0gZmRiLT51cGRhdGVkKTsKCWNpLm5kbV9yZWZjbnQJID0gMDsKICAgIDFjMDQ6 CTBmIDg1IDIzIDAxIDAwIDAwICAgIAlqbmUgICAgMWQyZCA8dnhsYW5fZmRiX2luZm8rMHgzM2Q+ CgoJaWYgKG5sYV9wdXQoc2tiLCBOREFfQ0FDSEVJTkZPLCBzaXplb2YoY2kpLCAmY2kpKQogICAg MWMwYToJNDggODMgYzQgNDAgICAgICAgICAgCWFkZCAgICAkMHg0MCwlcnNwCiAgICAxYzBlOgk1 YiAgICAgICAgICAgICAgICAgICAJcG9wICAgICVyYngKICAgIDFjMGY6CTQxIDVjICAgICAgICAg ICAgICAgIAlwb3AgICAgJXIxMgogICAgMWMxMToJNDEgNWQgICAgICAgICAgICAgICAgCXBvcCAg ICAlcjEzCiAqIGF0dHJpYnV0ZXMuIE9ubHkgbmVjZXNzYXJ5IGlmIGF0dHJpYnV0ZXMgaGF2ZSBi ZWVuIGFkZGVkIHRvCiAqIHRoZSBtZXNzYWdlLgogKi8Kc3RhdGljIGlubGluZSB2b2lkIG5sbXNn X2VuZChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3Qgbmxtc2doZHIgKm5saCkKewoJbmxoLT5u bG1zZ19sZW4gPSBza2JfdGFpbF9wb2ludGVyKHNrYikgLSAodW5zaWduZWQgY2hhciAqKW5saDsK ICAgIDFjMTM6CTQxIDVlICAgICAgICAgICAgICAgIAlwb3AgICAgJXIxNAogICAgMWMxNToJNDEg NWYgICAgICAgICAgICAgICAgCXBvcCAgICAlcjE1CiAgICAxYzE3Ogk1ZCAgICAgICAgICAgICAg ICAgICAJcG9wICAgICVyYnAKICAgIDFjMTg6CWMzICAgICAgICAgICAgICAgICAgIAlyZXRxICAg CiAgICAxYzE5Ogk2NiA0MSA4MyAzZSAwYSAgICAgICAJY21wdyAgICQweGEsKCVyMTQpCiAgICAx YzFlOgkwZiA4NCBkMCAwMCAwMCAwMCAgICAJamUgICAgIDFjZjQgPHZ4bGFuX2ZkYl9pbmZvKzB4 MzA0PgogICAgMWMyNDoJNDEgOGIgNDYgMDQgICAgICAgICAgCW1vdiAgICAweDQoJXIxNCksJWVh eAoJcmV0dXJuIDA7CgpubGFfcHV0X2ZhaWx1cmU6CglubG1zZ19jYW5jZWwoc2tiLCBubGgpOwoJ cmV0dXJuIC1FTVNHU0laRTsKfQogICAgMWMyODoJNDggOGQgNGQgYmMgICAgICAgICAgCWxlYSAg ICAtMHg0NCglcmJwKSwlcmN4CiAgICAxYzJjOgliYSAwNCAwMCAwMCAwMCAgICAgICAJbW92ICAg ICQweDQsJWVkeAogICAgMWMzMToJYmUgMDEgMDAgMDAgMDAgICAgICAgCW1vdiAgICAkMHgxLCVl c2kKICAgIDFjMzY6CTRjIDg5IGU3ICAgICAgICAgICAgIAltb3YgICAgJXIxMiwlcmRpCiAgICAx YzM5Ogk4OSA0NSBiYyAgICAgICAgICAgICAJbW92ICAgICVlYXgsLTB4NDQoJXJicCkKICAgIDFj M2M6CWU4IDAwIDAwIDAwIDAwICAgICAgIAljYWxscSAgMWM0MSA8dnhsYW5fZmRiX2luZm8rMHgy NTE+CiAgICAxYzQxOgk4NSBjMCAgICAgICAgICAgICAgICAJdGVzdCAgICVlYXgsJWVheAogICAg MWM0MzoJMGYgODQgZTAgZmUgZmYgZmYgICAgCWplICAgICAxYjI5IDx2eGxhbl9mZGJfaW5mbysw eDEzOT4KfQoKc3RhdGljIGludCB2eGxhbl9ubGFfcHV0X2FkZHIoc3RydWN0IHNrX2J1ZmYgKnNr YiwgaW50IGF0dHIsCgkJCSAgICAgIGNvbnN0IHVuaW9uIHZ4bGFuX2FkZHIgKmlwKQp7CglpZiAo aXAtPnNhLnNhX2ZhbWlseSA9PSBBRl9JTkVUNikKICAgIDFjNDk6CTQ5IDhiIDg0IDI0IGQ4IDAw IDAwIAltb3YgICAgMHhkOCglcjEyKSwlcmF4CiAgICAxYzUwOgkwMCAKICAgIDFjNTE6CTQ4IDM5 IGQ4ICAgICAgICAgICAgIAljbXAgICAgJXJieCwlcmF4CiAgICAxYzU0OgkwZiA4NyBiNSAwMCAw MCAwMCAgICAJamEgICAgIDFkMGYgPHZ4bGFuX2ZkYl9pbmZvKzB4MzFmPgogKiBAYXR0cnR5cGU6 IGF0dHJpYnV0ZSB0eXBlCiAqIEB2YWx1ZTogbnVtZXJpYyB2YWx1ZQogKi8Kc3RhdGljIGlubGlu ZSBpbnQgbmxhX3B1dF9iZTMyKHN0cnVjdCBza19idWZmICpza2IsIGludCBhdHRydHlwZSwgX19i ZTMyIHZhbHVlKQp7CglyZXR1cm4gbmxhX3B1dChza2IsIGF0dHJ0eXBlLCBzaXplb2YoX19iZTMy KSwgJnZhbHVlKTsKICAgIDFjNWE6CTQ4IDI5IGMzICAgICAgICAgICAgIAlzdWIgICAgJXJheCwl cmJ4CiAgICAxYzVkOgk0YyA4OSBlNyAgICAgICAgICAgICAJbW92ICAgICVyMTIsJXJkaQogICAg MWM2MDoJNDggODkgZGUgICAgICAgICAgICAgCW1vdiAgICAlcmJ4LCVyc2kKICAgIDFjNjM6CWU4 IDAwIDAwIDAwIDAwICAgICAgIAljYWxscSAgMWM2OCA8dnhsYW5fZmRiX2luZm8rMHgyNzg+CiAg ICAxYzY4OgliOCBhNiBmZiBmZiBmZiAgICAgICAJbW92ICAgICQweGZmZmZmZmE2LCVlYXgKICAg IDFjNmQ6CWViIDg4ICAgICAgICAgICAgICAgIAlqbXAgICAgMWJmNyA8dnhsYW5fZmRiX2luZm8r MHgyMDc+CiAgICAxYzZmOgk0OCA4ZCA0ZCBiOCAgICAgICAgICAJbGVhICAgIC0weDQ4KCVyYnAp LCVyY3gKCQlnb3RvIG5sYV9wdXRfZmFpbHVyZTsKCglpZiAoc2VuZF9ldGggJiYgbmxhX3B1dChz a2IsIE5EQV9MTEFERFIsIEVUSF9BTEVOLCAmZmRiLT5ldGhfYWRkcikpCgkJZ290byBubGFfcHV0 X2ZhaWx1cmU7CgoJaWYgKHNlbmRfaXAgJiYgdnhsYW5fbmxhX3B1dF9hZGRyKHNrYiwgTkRBX0RT VCwgJnJkc3QtPnJlbW90ZV9pcCkpCiAgICAxYzczOgliYSAwNCAwMCAwMCAwMCAgICAgICAJbW92 ICAgICQweDQsJWVkeAogICAgMWM3ODoJYmUgMDggMDAgMDAgMDAgICAgICAgCW1vdiAgICAkMHg4 LCVlc2kKICogVHJpbXMgdGhlIG1lc3NhZ2UgdG8gdGhlIHByb3ZpZGVkIG1hcmsuCiAqLwpzdGF0 aWMgaW5saW5lIHZvaWQgbmxtc2dfdHJpbShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBjb25zdCB2b2lk ICptYXJrKQp7CglpZiAobWFyaykgewoJCVdBUk5fT04oKHVuc2lnbmVkIGNoYXIgKikgbWFyayA8 IHNrYi0+ZGF0YSk7CiAgICAxYzdkOgk0YyA4OSBlNyAgICAgICAgICAgICAJbW92ICAgICVyMTIs JXJkaQogICAgMWM4MDoJODkgNDUgYjggICAgICAgICAgICAgCW1vdiAgICAlZWF4LC0weDQ4KCVy YnApCiAgICAxYzgzOgllOCAwMCAwMCAwMCAwMCAgICAgICAJY2FsbHEgIDFjODggPHZ4bGFuX2Zk Yl9pbmZvKzB4Mjk4PgogICAgMWM4ODoJODUgYzAgICAgICAgICAgICAgICAgCXRlc3QgICAlZWF4 LCVlYXgKCQlza2JfdHJpbShza2IsICh1bnNpZ25lZCBjaGFyICopIG1hcmsgLSBza2ItPmRhdGEp OwogICAgMWM4YToJMGYgODQgMDggZmYgZmYgZmYgICAgCWplICAgICAxYjk4IDx2eGxhbl9mZGJf aW5mbysweDFhOD4KICAgIDFjOTA6CWViIGI3ICAgICAgICAgICAgICAgIAlqbXAgICAgMWM0OSA8 dnhsYW5fZmRiX2luZm8rMHgyNTk+CiAgICAxYzkyOgk0OSA4ZCA0ZCA0MCAgICAgICAgICAJbGVh ICAgIDB4NDAoJXIxMyksJXJjeAogICAgMWM5NjoJYmEgMDYgMDAgMDAgMDAgICAgICAgCW1vdiAg ICAkMHg2LCVlZHgKCW5sbXNnX2VuZChza2IsIG5saCk7CglyZXR1cm4gMDsKCm5sYV9wdXRfZmFp bHVyZToKCW5sbXNnX2NhbmNlbChza2IsIG5saCk7CglyZXR1cm4gLUVNU0dTSVpFOwogICAgMWM5 YjoJYmUgMDIgMDAgMDAgMDAgICAgICAgCW1vdiAgICAkMHgyLCVlc2kKICogQGF0dHJ0eXBlOiBh dHRyaWJ1dGUgdHlwZQogKiBAdmFsdWU6IG51bWVyaWMgdmFsdWUKICovCnN0YXRpYyBpbmxpbmUg aW50IG5sYV9wdXRfdTMyKHN0cnVjdCBza19idWZmICpza2IsIGludCBhdHRydHlwZSwgdTMyIHZh bHVlKQp7CglyZXR1cm4gbmxhX3B1dChza2IsIGF0dHJ0eXBlLCBzaXplb2YodTMyKSwgJnZhbHVl KTsKICAgIDFjYTA6CTRjIDg5IGU3ICAgICAgICAgICAgIAltb3YgICAgJXIxMiwlcmRpCiAgICAx Y2EzOgk0NCA4OCA0NSA5YyAgICAgICAgICAJbW92ICAgICVyOGIsLTB4NjQoJXJicCkKICAgIDFj YTc6CWU4IDAwIDAwIDAwIDAwICAgICAgIAljYWxscSAgMWNhYyA8dnhsYW5fZmRiX2luZm8rMHgy YmM+CiAgICAxY2FjOgk4NSBjMCAgICAgICAgICAgICAgICAJdGVzdCAgICVlYXgsJWVheAogICAg MWNhZToJNDQgMGYgYjYgNDUgOWMgICAgICAgCW1vdnpibCAtMHg2NCglcmJwKSwlcjhkCiAgICAx Y2IzOgkwZiA4NCA2NyBmZSBmZiBmZiAgICAJamUgICAgIDFiMjAgPHZ4bGFuX2ZkYl9pbmZvKzB4 MTMwPgoJICAgIG5sYV9wdXRfYmUxNihza2IsIE5EQV9QT1JULCByZHN0LT5yZW1vdGVfcG9ydCkp CgkJZ290byBubGFfcHV0X2ZhaWx1cmU7CglpZiAocmRzdC0+cmVtb3RlX3ZuaSAhPSB2eGxhbi0+ ZGVmYXVsdF9kc3QucmVtb3RlX3ZuaSAmJgoJICAgIG5sYV9wdXRfdTMyKHNrYiwgTkRBX1ZOSSwg YmUzMl90b19jcHUocmRzdC0+cmVtb3RlX3ZuaSkpKQoJCWdvdG8gbmxhX3B1dF9mYWlsdXJlOwoJ aWYgKHJkc3QtPnJlbW90ZV9pZmluZGV4ICYmCiAgICAxY2I5OgllYiA4ZSAgICAgICAgICAgICAg ICAJam1wICAgIDFjNDkgPHZ4bGFuX2ZkYl9pbmZvKzB4MjU5PgogICAgMWNiYjoJYzYgNDAgMTAg MDIgICAgICAgICAgCW1vdmIgICAkMHgyLDB4MTAoJXJheCkKICAgIDFjYmY6CTY2IDQxIDgzIDNl IDBhICAgICAgIAljbXB3ICAgJDB4YSwoJXIxNCkKCWlmICghbmV0X2VxKGRldl9uZXQodnhsYW4t PmRldiksIHZ4bGFuLT5uZXQpICYmCgkgICAgbmxhX3B1dF9zMzIoc2tiLCBOREFfTElOS19ORVRO U0lELAoJCQlwZWVybmV0MmlkX2FsbG9jKGRldl9uZXQodnhsYW4tPmRldiksIHZ4bGFuLT5uZXQp KSkKCQlnb3RvIG5sYV9wdXRfZmFpbHVyZTsKCglpZiAoc2VuZF9ldGggJiYgbmxhX3B1dChza2Is IE5EQV9MTEFERFIsIEVUSF9BTEVOLCAmZmRiLT5ldGhfYWRkcikpCiAgICAxY2M0Ogk3NCAyMCAg ICAgICAgICAgICAgICAJamUgICAgIDFjZTYgPHZ4bGFuX2ZkYl9pbmZvKzB4MmY2PgogICAgMWNj NjoJNDEgOGIgNDYgMDQgICAgICAgICAgCW1vdiAgICAweDQoJXIxNCksJWVheAogICAgMWNjYToJ ODUgYzAgICAgICAgICAgICAgICAgCXRlc3QgICAlZWF4LCVlYXgKICAgIDFjY2M6CTQxIDBmIDk0 IGMwICAgICAgICAgIAlzZXRlICAgJXI4YgogICAgMWNkMDoJNDEgMGYgYjcgNDUgNDQgICAgICAg CW1vdnp3bCAweDQ0KCVyMTMpLCVlYXgKICAgIDFjZDU6CTQxIDgzIGYwIDAxICAgICAgICAgIAl4 b3IgICAgJDB4MSwlcjhkCiAgICAxY2Q5Ogk0MSAwYiA0NSA0MCAgICAgICAgICAJb3IgICAgIDB4 NDAoJXIxMyksJWVheAogICAgMWNkZDoJNDEgMGYgOTUgYzEgICAgICAgICAgCXNldG5lICAlcjli CiAgICAxY2UxOgllOSBjMyBmZCBmZiBmZiAgICAgICAJam1wcSAgIDFhYTkgPHZ4bGFuX2ZkYl9p bmZvKzB4Yjk+CiAgICAxY2U2Ogk0OSA4YiA0NiAwOCAgICAgICAgICAJbW92ICAgIDB4OCglcjE0 KSwlcmF4CiAgICAxY2VhOgk0OSAwYiA0NiAxMCAgICAgICAgICAJb3IgICAgIDB4MTAoJXIxNCks JXJheAoJbWVtc2V0KG5kbSwgMCwgc2l6ZW9mKCpuZG0pKTsKCglzZW5kX2V0aCA9IHNlbmRfaXAg PSB0cnVlOwoKCWlmICh0eXBlID09IFJUTV9HRVRORUlHSCkgewoJCW5kbS0+bmRtX2ZhbWlseQk9 IEFGX0lORVQ7CiAgICAxY2VlOgk0MSAwZiA5NCBjMCAgICAgICAgICAJc2V0ZSAgICVyOGIKCQly ZXR1cm4gYS0+c2luLnNpbl9hZGRyLnNfYWRkciA9PSBiLT5zaW4uc2luX2FkZHIuc19hZGRyOwp9 CgpzdGF0aWMgaW5saW5lIGJvb2wgdnhsYW5fYWRkcl9hbnkoY29uc3QgdW5pb24gdnhsYW5fYWRk ciAqaXBhKQp7CglpZiAoaXBhLT5zYS5zYV9mYW1pbHkgPT0gQUZfSU5FVDYpCiAgICAxY2YyOgll YiBkYyAgICAgICAgICAgICAgICAJam1wICAgIDFjZDAgPHZ4bGFuX2ZkYl9pbmZvKzB4MmUwPgog ICAgMWNmNDoJNDkgOGQgNGUgMDggICAgICAgICAgCWxlYSAgICAweDgoJXIxNCksJXJjeAoJCXJl dHVybiBpcHY2X2FkZHJfYW55KCZpcGEtPnNpbjYuc2luNl9hZGRyKTsKCWVsc2UKCQlyZXR1cm4g aXBhLT5zaW4uc2luX2FkZHIuc19hZGRyID09IGh0b25sKElOQUREUl9BTlkpOwogICAgMWNmODoJ YmEgMTAgMDAgMDAgMDAgICAgICAgCW1vdiAgICAkMHgxMCwlZWR4CiAgICAxY2ZkOgliZSAwMSAw MCAwMCAwMCAgICAgICAJbW92ICAgICQweDEsJWVzaQoJc2VuZF9ldGggPSBzZW5kX2lwID0gdHJ1 ZTsKCglpZiAodHlwZSA9PSBSVE1fR0VUTkVJR0gpIHsKCQluZG0tPm5kbV9mYW1pbHkJPSBBRl9J TkVUOwoJCXNlbmRfaXAgPSAhdnhsYW5fYWRkcl9hbnkoJnJkc3QtPnJlbW90ZV9pcCk7CgkJc2Vu ZF9ldGggPSAhaXNfemVyb19ldGhlcl9hZGRyKGZkYi0+ZXRoX2FkZHIpOwogICAgMWQwMjoJNGMg ODkgZTcgICAgICAgICAgICAgCW1vdiAgICAlcjEyLCVyZGkKCglzZW5kX2V0aCA9IHNlbmRfaXAg PSB0cnVlOwoKCWlmICh0eXBlID09IFJUTV9HRVRORUlHSCkgewoJCW5kbS0+bmRtX2ZhbWlseQk9 IEFGX0lORVQ7CgkJc2VuZF9pcCA9ICF2eGxhbl9hZGRyX2FueSgmcmRzdC0+cmVtb3RlX2lwKTsK ICAgIDFkMDU6CWU4IDAwIDAwIDAwIDAwICAgICAgIAljYWxscSAgMWQwYSA8dnhsYW5fZmRiX2lu Zm8rMHgzMWE+CgkJc2VuZF9ldGggPSAhaXNfemVyb19ldGhlcl9hZGRyKGZkYi0+ZXRoX2FkZHIp OwogICAgMWQwYToJZTkgMzIgZmYgZmYgZmYgICAgICAgCWptcHEgICAxYzQxIDx2eGxhbl9mZGJf aW5mbysweDI1MT4KICAgIDFkMGY6CWJlIDE2IDAyIDAwIDAwICAgICAgIAltb3YgICAgJDB4MjE2 LCVlc2kKICAgIDFkMTQ6CTQ4IGM3IGM3IDAwIDAwIDAwIDAwIAltb3YgICAgJDB4MCwlcmRpCnN0 YXRpYyBpbmxpbmUgYm9vbCBpcHY2X2FkZHJfYW55KGNvbnN0IHN0cnVjdCBpbjZfYWRkciAqYSkK ewojaWYgZGVmaW5lZChDT05GSUdfSEFWRV9FRkZJQ0lFTlRfVU5BTElHTkVEX0FDQ0VTUykgJiYg QklUU19QRVJfTE9ORyA9PSA2NAoJY29uc3QgdW5zaWduZWQgbG9uZyAqdWwgPSAoY29uc3QgdW5z aWduZWQgbG9uZyAqKWE7CgoJcmV0dXJuICh1bFswXSB8IHVsWzFdKSA9PSAwVUw7CiAgICAxZDFi OgllOCAwMCAwMCAwMCAwMCAgICAgICAJY2FsbHEgIDFkMjAgPHZ4bGFuX2ZkYl9pbmZvKzB4MzMw PgogICAgMWQyMDoJNDkgOGIgODQgMjQgZDggMDAgMDAgCW1vdiAgICAweGQ4KCVyMTIpLCVyYXgK ICAgIDFkMjc6CTAwIAogKiBAYWRkcjogSVB2NiBhZGRyZXNzCiAqLwpzdGF0aWMgaW5saW5lIGlu dCBubGFfcHV0X2luNl9hZGRyKHN0cnVjdCBza19idWZmICpza2IsIGludCBhdHRydHlwZSwKCQkJ CSAgIGNvbnN0IHN0cnVjdCBpbjZfYWRkciAqYWRkcikKewoJcmV0dXJuIG5sYV9wdXQoc2tiLCBh dHRydHlwZSwgc2l6ZW9mKCphZGRyKSwgYWRkcik7CiAgICAxZDI4OgllOSAyZCBmZiBmZiBmZiAg ICAgICAJam1wcSAgIDFjNWEgPHZ4bGFuX2ZkYl9pbmZvKzB4MjZhPgogICAgMWQyZDoJZTggMDAg MDAgMDAgMDAgICAgICAgCWNhbGxxICAxZDMyIDx2eGxhbl9mZGJfaW5mbysweDM0Mj4KICAgIDFk MzI6CTBmIDFmIDQwIDAwICAgICAgICAgIAlub3BsICAgMHgwKCVyYXgpCiAgICAxZDM2Ogk2NiAy ZSAwZiAxZiA4NCAwMCAwMCAJbm9wdyAgICVjczoweDAoJXJheCwlcmF4LDEpCiAgICAxZDNkOgkw MCAwMCAwMCAKCjAwMDAwMDAwMDAwMDFkNDAgPHZ4bGFuX2ZkYl9ub3RpZnk+OgogKiBUcmltcyB0 aGUgbWVzc2FnZSB0byB0aGUgcHJvdmlkZWQgbWFyay4KICovCnN0YXRpYyBpbmxpbmUgdm9pZCBu bG1zZ190cmltKHN0cnVjdCBza19idWZmICpza2IsIGNvbnN0IHZvaWQgKm1hcmspCnsKCWlmICht YXJrKSB7CgkJV0FSTl9PTigodW5zaWduZWQgY2hhciAqKSBtYXJrIDwgc2tiLT5kYXRhKTsKICAg IDFkNDA6CWU4IDAwIDAwIDAwIDAwICAgICAgIAljYWxscSAgMWQ0NSA8dnhsYW5fZmRiX25vdGlm eSsweDU+CiAgICAxZDQ1Ogk1NSAgICAgICAgICAgICAgICAgICAJcHVzaCAgICVyYnAKICAgIDFk NDY6CTQ4IDg5IGU1ICAgICAgICAgICAgIAltb3YgICAgJXJzcCwlcmJwCiAgICAxZDQ5Ogk0MSA1 NyAgICAgICAgICAgICAgICAJcHVzaCAgICVyMTUKICAgIDFkNGI6CTQxIDU2ICAgICAgICAgICAg ICAgIAlwdXNoICAgJXIxNAogICAgMWQ0ZDoJNDEgNTUgICAgICAgICAgICAgICAgCXB1c2ggICAl cjEzCiAgICAxZDRmOgk0MSA1NCAgICAgICAgICAgICAgICAJcHVzaCAgICVyMTIKICAgIDFkNTE6 CTQ5IDg5IGY2ICAgICAgICAgICAgIAltb3YgICAgJXJzaSwlcjE0CiAgICAxZDU0Ogk1MyAgICAg ICAgICAgICAgICAgICAJcHVzaCAgICVyYngKICAgIDFkNTU6CTQ5IDg5IGZjICAgICAgICAgICAg IAltb3YgICAgJXJkaSwlcjEyCiAgICAxZDU4Ogk0OSA4OSBkNyAgICAgICAgICAgICAJbW92ICAg ICVyZHgsJXIxNQogICAgMWQ1YjoJYmUgMjAgMDAgMDggMDIgICAgICAgCW1vdiAgICAkMHgyMDgw MDIwLCVlc2kKCXJldHVybiAwOwoKbmxhX3B1dF9mYWlsdXJlOgoJbmxtc2dfY2FuY2VsKHNrYiwg bmxoKTsKCXJldHVybiAtRU1TR1NJWkU7Cn0KICAgIDFkNjA6CTMxIGQyICAgICAgICAgICAgICAg IAl4b3IgICAgJWVkeCwlZWR4CiAgICAxZDYyOgk0OCA4MyBlYyAxOCAgICAgICAgICAJc3ViICAg ICQweDE4LCVyc3AKICAgIDFkNjY6CTQ4IDhiIDQ3IDMwICAgICAgICAgIAltb3YgICAgMHgzMCgl cmRpKSwlcmF4CiAgICAxZDZhOgk4OSA0ZCBkNCAgICAgICAgICAgICAJbW92ICAgICVlY3gsLTB4 MmMoJXJicCkKICAgIDFkNmQ6CWJmIDcwIDAwIDAwIDAwICAgICAgIAltb3YgICAgJDB4NzAsJWVk aQoJCSsgbmxhX3RvdGFsX3NpemUoc2l6ZW9mKHN0cnVjdCBuZGFfY2FjaGVpbmZvKSk7Cn0KCnN0 YXRpYyB2b2lkIHZ4bGFuX2ZkYl9ub3RpZnkoc3RydWN0IHZ4bGFuX2RldiAqdnhsYW4sIHN0cnVj dCB2eGxhbl9mZGIgKmZkYiwKCQkJICAgICBzdHJ1Y3QgdnhsYW5fcmRzdCAqcmQsIGludCB0eXBl KQp7CiAgICAxZDcyOgliOSBmZiBmZiBmZiBmZiAgICAgICAJbW92ICAgICQweGZmZmZmZmZmLCVl Y3gKICAgIDFkNzc6CTRjIDhiIGE4IDgwIDA0IDAwIDAwIAltb3YgICAgMHg0ODAoJXJheCksJXIx MwogICAgMWQ3ZToJZTggMDAgMDAgMDAgMDAgICAgICAgCWNhbGxxICAxZDgzIDx2eGxhbl9mZGJf bm90aWZ5KzB4NDM+CiAgICAxZDgzOgk0OCA4NSBjMCAgICAgICAgICAgICAJdGVzdCAgICVyYXgs JXJheAogICAgMWQ4NjoJMGYgODQgODMgMDAgMDAgMDAgICAgCWplICAgICAxZTBmIDx2eGxhbl9m ZGJfbm90aWZ5KzB4Y2Y+CnN0cnVjdCBza19idWZmICpfX2J1aWxkX3NrYih2b2lkICpkYXRhLCB1 bnNpZ25lZCBpbnQgZnJhZ19zaXplKTsKc3RydWN0IHNrX2J1ZmYgKmJ1aWxkX3NrYih2b2lkICpk YXRhLCB1bnNpZ25lZCBpbnQgZnJhZ19zaXplKTsKc3RhdGljIGlubGluZSBzdHJ1Y3Qgc2tfYnVm ZiAqYWxsb2Nfc2tiKHVuc2lnbmVkIGludCBzaXplLAoJCQkJCWdmcF90IHByaW9yaXR5KQp7Cgly ZXR1cm4gX19hbGxvY19za2Ioc2l6ZSwgcHJpb3JpdHksIDAsIE5VTUFfTk9fTk9ERSk7CiAgICAx ZDhjOgk0NCA4YiA0ZCBkNCAgICAgICAgICAJbW92ICAgIC0weDJjKCVyYnApLCVyOWQKICAgIDFk OTA6CTQ1IDMxIGMwICAgICAgICAgICAgIAl4b3IgICAgJXI4ZCwlcjhkCiAgICAxZDkzOgkzMSBj OSAgICAgICAgICAgICAgICAJeG9yICAgICVlY3gsJWVjeAogICAgMWQ5NToJNGMgODkgZTYgICAg ICAgICAgICAgCW1vdiAgICAlcjEyLCVyc2kKICAgIDFkOTg6CTRjIDg5IDdjIDI0IDA4ICAgICAg IAltb3YgICAgJXIxNSwweDgoJXJzcCkKICAgIDFkOWQ6CWM3IDA0IDI0IDAwIDAwIDAwIDAwIAlt b3ZsICAgJDB4MCwoJXJzcCkKICAgIDFkYTQ6CTRjIDg5IGYyICAgICAgICAgICAgIAltb3YgICAg JXIxNCwlcmR4CiAgICAxZGE3Ogk0OCA4OSBjNyAgICAgICAgICAgICAJbW92ICAgICVyYXgsJXJk aQogICAgMWRhYToJNDggODkgYzMgICAgICAgICAgICAgCW1vdiAgICAlcmF4LCVyYngKICAgIDFk YWQ6CWU4IDNlIGZjIGZmIGZmICAgICAgIAljYWxscSAgMTlmMCA8dnhsYW5fZmRiX2luZm8+CiAg ICAxZGIyOgk4NSBjMCAgICAgICAgICAgICAgICAJdGVzdCAgICVlYXgsJWVheAoJc3RydWN0IG5l dCAqbmV0ID0gZGV2X25ldCh2eGxhbi0+ZGV2KTsKCXN0cnVjdCBza19idWZmICpza2I7CglpbnQg ZXJyID0gLUVOT0JVRlM7CgoJc2tiID0gbmxtc2dfbmV3KHZ4bGFuX25sbXNnX3NpemUoKSwgR0ZQ X0FUT01JQyk7CglpZiAoc2tiID09IE5VTEwpCiAgICAxZGI0Ogk0MSA4OSBjNCAgICAgICAgICAg ICAJbW92ICAgICVlYXgsJXIxMmQKICAgIDFkYjc6CTc5IDJjICAgICAgICAgICAgICAgIAlqbnMg ICAgMWRlNSA8dnhsYW5fZmRiX25vdGlmeSsweGE1PgogICAgMWRiOToJODMgZjggYTYgICAgICAg ICAgICAgCWNtcCAgICAkMHhmZmZmZmZhNiwlZWF4CgkJZ290byBlcnJvdXQ7CgoJZXJyID0gdnhs YW5fZmRiX2luZm8oc2tiLCB2eGxhbiwgZmRiLCAwLCAwLCB0eXBlLCAwLCByZCk7CiAgICAxZGJj Ogk3NCA1OSAgICAgICAgICAgICAgICAJamUgICAgIDFlMTcgPHZ4bGFuX2ZkYl9ub3RpZnkrMHhk Nz4KICAgIDFkYmU6CTQ4IDg5IGRmICAgICAgICAgICAgIAltb3YgICAgJXJieCwlcmRpCiAgICAx ZGMxOgllOCAwMCAwMCAwMCAwMCAgICAgICAJY2FsbHEgIDFkYzYgPHZ4bGFuX2ZkYl9ub3RpZnkr MHg4Nj4KICAgIDFkYzY6CTQ0IDg5IGUyICAgICAgICAgICAgIAltb3YgICAgJXIxMmQsJWVkeAog ICAgMWRjOToJNGMgODkgZWYgICAgICAgICAgICAgCW1vdiAgICAlcjEzLCVyZGkKICAgIDFkY2M6 CWJlIDAzIDAwIDAwIDAwICAgICAgIAltb3YgICAgJDB4MywlZXNpCiAgICAxZGQxOgllOCAwMCAw MCAwMCAwMCAgICAgICAJY2FsbHEgIDFkZDYgPHZ4bGFuX2ZkYl9ub3RpZnkrMHg5Nj4KICAgIDFk ZDY6CTQ4IDgzIGM0IDE4ICAgICAgICAgIAlhZGQgICAgJDB4MTgsJXJzcAogICAgMWRkYToJNWIg ICAgICAgICAgICAgICAgICAgCXBvcCAgICAlcmJ4CiAgICAxZGRiOgk0MSA1YyAgICAgICAgICAg ICAgICAJcG9wICAgICVyMTIKICAgIDFkZGQ6CTQxIDVkICAgICAgICAgICAgICAgIAlwb3AgICAg JXIxMwogICAgMWRkZjoJNDEgNWUgICAgICAgICAgICAgICAgCXBvcCAgICAlcjE0CiAgICAxZGUx Ogk0MSA1ZiAgICAgICAgICAgICAgICAJcG9wICAgICVyMTUKCWlmIChlcnIgPCAwKSB7CiAgICAx ZGUzOgk1ZCAgICAgICAgICAgICAgICAgICAJcG9wICAgICVyYnAKCglza2IgPSBubG1zZ19uZXco dnhsYW5fbmxtc2dfc2l6ZSgpLCBHRlBfQVRPTUlDKTsKCWlmIChza2IgPT0gTlVMTCkKCQlnb3Rv IGVycm91dDsKCgllcnIgPSB2eGxhbl9mZGJfaW5mbyhza2IsIHZ4bGFuLCBmZGIsIDAsIDAsIHR5 cGUsIDAsIHJkKTsKICAgIDFkZTQ6CWMzICAgICAgICAgICAgICAgICAgIAlyZXRxICAgCiAgICAx ZGU1Ogk0YyA4OSBlZSAgICAgICAgICAgICAJbW92ICAgICVyMTMsJXJzaQoJaWYgKGVyciA8IDAp IHsKICAgIDFkZTg6CTQ4IDg5IGRmICAgICAgICAgICAgIAltb3YgICAgJXJieCwlcmRpCgkJLyog LUVNU0dTSVpFIGltcGxpZXMgQlVHIGluIHZ4bGFuX25sbXNnX3NpemUoKSAqLwoJCVdBUk5fT04o ZXJyID09IC1FTVNHU0laRSk7CiAgICAxZGViOgk0MSBiOSAyMCAwMCAwOCAwMiAgICAJbW92ICAg ICQweDIwODAwMjAsJXI5ZAoJCWtmcmVlX3NrYihza2IpOwogICAgMWRmMToJNDUgMzEgYzAgICAg ICAgICAgICAgCXhvciAgICAlcjhkLCVyOGQKICAgIDFkZjQ6CWI5IDAzIDAwIDAwIDAwICAgICAg IAltb3YgICAgJDB4MywlZWN4CgoJcnRubF9ub3RpZnkoc2tiLCBuZXQsIDAsIFJUTkxHUlBfTkVJ R0gsIE5VTEwsIEdGUF9BVE9NSUMpOwoJcmV0dXJuOwplcnJvdXQ6CglpZiAoZXJyIDwgMCkKCQly dG5sX3NldF9za19lcnIobmV0LCBSVE5MR1JQX05FSUdILCBlcnIpOwogICAgMWRmOToJMzEgZDIg ICAgICAgICAgICAgICAgCXhvciAgICAlZWR4LCVlZHgKICAgIDFkZmI6CWU4IDAwIDAwIDAwIDAw ICAgICAgIAljYWxscSAgMWUwMCA8dnhsYW5fZmRiX25vdGlmeSsweGMwPgogICAgMWUwMDoJNDgg ODMgYzQgMTggICAgICAgICAgCWFkZCAgICAkMHgxOCwlcnNwCiAgICAxZTA0Ogk1YiAgICAgICAg ICAgICAgICAgICAJcG9wICAgICVyYngKICAgIDFlMDU6CTQxIDVjICAgICAgICAgICAgICAgIAlw b3AgICAgJXIxMgp9CiAgICAxZTA3Ogk0MSA1ZCAgICAgICAgICAgICAgICAJcG9wICAgICVyMTMK ICAgIDFlMDk6CTQxIDVlICAgICAgICAgICAgICAgIAlwb3AgICAgJXIxNAogICAgMWUwYjoJNDEg NWYgICAgICAgICAgICAgICAgCXBvcCAgICAlcjE1CiAgICAxZTBkOgk1ZCAgICAgICAgICAgICAg ICAgICAJcG9wICAgICVyYnAKICAgIDFlMGU6CWMzICAgICAgICAgICAgICAgICAgIAlyZXRxICAg CiAgICAxZTBmOgk0MSBiYyA5NyBmZiBmZiBmZiAgICAJbW92ICAgICQweGZmZmZmZjk3LCVyMTJk CgkJV0FSTl9PTihlcnIgPT0gLUVNU0dTSVpFKTsKCQlrZnJlZV9za2Ioc2tiKTsKCQlnb3RvIGVy cm91dDsKCX0KCglydG5sX25vdGlmeShza2IsIG5ldCwgMCwgUlROTEdSUF9ORUlHSCwgTlVMTCwg R0ZQX0FUT01JQyk7CiAgICAxZTE1OgllYiBhZiAgICAgICAgICAgICAgICAJam1wICAgIDFkYzYg PHZ4bGFuX2ZkYl9ub3RpZnkrMHg4Nj4KICAgIDFlMTc6CWJlIDYwIDAxIDAwIDAwICAgICAgIAlt b3YgICAgJDB4MTYwLCVlc2kKICAgIDFlMWM6CTQ4IGM3IGM3IDAwIDAwIDAwIDAwIAltb3YgICAg JDB4MCwlcmRpCiAgICAxZTIzOgllOCAwMCAwMCAwMCAwMCAgICAgICAJY2FsbHEgIDFlMjggPHZ4 bGFuX2ZkYl9ub3RpZnkrMHhlOD4KICAgIDFlMjg6CWViIDk0ICAgICAgICAgICAgICAgIAlqbXAg ICAgMWRiZSA8dnhsYW5fZmRiX25vdGlmeSsweDdlPgogICAgMWUyYToJNjYgMGYgMWYgNDQgMDAg MDAgICAgCW5vcHcgICAweDAoJXJheCwlcmF4LDEpCgowMDAwMDAwMDAwMDAxZTMwIDx2eGxhbl9m ZGJfZGVzdHJveT46CglyZXR1cm47CmVycm91dDoKCWlmIChlcnIgPCAwKQoJCXJ0bmxfc2V0X3Nr X2VycihuZXQsIFJUTkxHUlBfTkVJR0gsIGVycik7Cn0KICAgIDFlMzA6CWU4IDAwIDAwIDAwIDAw ICAgICAgIAljYWxscSAgMWUzNSA8dnhsYW5fZmRiX2Rlc3Ryb3krMHg1PgogICAgMWUzNToJNTUg ICAgICAgICAgICAgICAgICAgCXB1c2ggICAlcmJwCiAgICAxZTM2Ogk0OCA4OSBlNSAgICAgICAg ICAgICAJbW92ICAgICVyc3AsJXJicAogICAgMWUzOToJNDEgNTQgICAgICAgICAgICAgICAgCXB1 c2ggICAlcjEyCiAgICAxZTNiOgk1MyAgICAgICAgICAgICAgICAgICAJcHVzaCAgICVyYngKICAg IDFlM2M6CTQ5IDg5IGZjICAgICAgICAgICAgIAltb3YgICAgJXJkaSwlcjEyCnN0YXRpYyB2b2lk IHZ4bGFuX2ZkYl9ub3RpZnkoc3RydWN0IHZ4bGFuX2RldiAqdnhsYW4sIHN0cnVjdCB2eGxhbl9m ZGIgKmZkYiwKCQkJICAgICBzdHJ1Y3QgdnhsYW5fcmRzdCAqcmQsIGludCB0eXBlKQp7CglzdHJ1 Y3QgbmV0ICpuZXQgPSBkZXZfbmV0KHZ4bGFuLT5kZXYpOwoJc3RydWN0IHNrX2J1ZmYgKnNrYjsK CWludCBlcnIgPSAtRU5PQlVGUzsKICAgIDFlM2Y6CTQ4IDg5IGYzICAgICAgICAgICAgIAltb3Yg ICAgJXJzaSwlcmJ4CiAgICAxZTQyOgkwZiAxZiA0NCAwMCAwMCAgICAgICAJbm9wbCAgIDB4MCgl cmF4LCVyYXgsMSkKCQlnb3RvIGVycm91dDsKCgllcnIgPSB2eGxhbl9mZGJfaW5mbyhza2IsIHZ4 bGFuLCBmZGIsIDAsIDAsIHR5cGUsIDAsIHJkKTsKCWlmIChlcnIgPCAwKSB7CgkJLyogLUVNU0dT SVpFIGltcGxpZXMgQlVHIGluIHZ4bGFuX25sbXNnX3NpemUoKSAqLwoJCVdBUk5fT04oZXJyID09 IC1FTVNHU0laRSk7CiAgICAxZTQ3Ogk0MSA4MyBhYyAyNCBlYyAwMCAwMCAJc3VibCAgICQweDEs MHhlYyglcjEyKQogICAgMWU0ZToJMDAgMDEgCiAgICAxZTUwOgliOSAxZCAwMCAwMCAwMCAgICAg ICAJbW92ICAgICQweDFkLCVlY3gKICAgIDFlNTU6CTQ4IDg5IGRlICAgICAgICAgICAgIAltb3Yg ICAgJXJieCwlcnNpCiAgICAxZTU4Ogk0OCA4YiA0MyAzMCAgICAgICAgICAJbW92ICAgIDB4MzAo JXJieCksJXJheAogICAgMWU1YzoJNGMgODkgZTcgICAgICAgICAgICAgCW1vdiAgICAlcjEyLCVy ZGkKICAgIDFlNWY6CTQ4IDhkIDUwIGQ4ICAgICAgICAgIAlsZWEgICAgLTB4MjgoJXJheCksJXJk eAoJfQoJa2ZyZWUoZik7Cn0KCnN0YXRpYyB2b2lkIHZ4bGFuX2ZkYl9kZXN0cm95KHN0cnVjdCB2 eGxhbl9kZXYgKnZ4bGFuLCBzdHJ1Y3QgdnhsYW5fZmRiICpmKQp7CiAgICAxZTYzOgllOCBkOCBm ZSBmZiBmZiAgICAgICAJY2FsbHEgIDFkNDAgPHZ4bGFuX2ZkYl9ub3RpZnk+CiAgICAxZTY4Ogk0 OCA4YiAwMyAgICAgICAgICAgICAJbW92ICAgICglcmJ4KSwlcmF4CiAgICAxZTZiOgk0OCA4YiA1 MyAwOCAgICAgICAgICAJbW92ICAgIDB4OCglcmJ4KSwlcmR4CiAgICAxZTZmOgk0OCA4NSBjMCAg ICAgICAgICAgICAJdGVzdCAgICVyYXgsJXJheAogICAgMWU3MjoJNDggODkgMDIgICAgICAgICAg ICAgCW1vdiAgICAlcmF4LCglcmR4KQogICAgMWU3NToJNzQgMDQgICAgICAgICAgICAgICAgCWpl ICAgICAxZTdiIDx2eGxhbl9mZGJfZGVzdHJveSsweDRiPgoJbmV0ZGV2X2RiZyh2eGxhbi0+ZGV2 LAoJCSAgICAiZGVsZXRlICVwTVxuIiwgZi0+ZXRoX2FkZHIpOwoKCS0tdnhsYW4tPmFkZHJjbnQ7 CiAgICAxZTc3Ogk0OCA4OSA1MCAwOCAgICAgICAgICAJbW92ICAgICVyZHgsMHg4KCVyYXgpCiAg ICAxZTdiOgk0OCBiOCAwMCAwMiAwMCAwMCAwMCAJbW92YWJzICQweGRlYWQwMDAwMDAwMDAyMDAs JXJheAogICAgMWU4MjoJMDAgYWQgZGUgCgl2eGxhbl9mZGJfbm90aWZ5KHZ4bGFuLCBmLCBmaXJz dF9yZW1vdGVfcnRubChmKSwgUlRNX0RFTE5FSUdIKTsKICAgIDFlODU6CTQ4IDhkIDdiIDEwICAg ICAgICAgIAlsZWEgICAgMHgxMCglcmJ4KSwlcmRpCiAgICAxZTg5Ogk0OCBjNyBjNiAwMCAwMCAw MCAwMCAJbW92ICAgICQweDAsJXJzaQogICAgMWU5MDoJNDggODkgNDMgMDggICAgICAgICAgCW1v diAgICAlcmF4LDB4OCglcmJ4KQogICAgMWU5NDoJZTggMDAgMDAgMDAgMDAgICAgICAgCWNhbGxx ICAxZTk5IDx2eGxhbl9mZGJfZGVzdHJveSsweDY5PgoJcmV0dXJuICFSRUFEX09OQ0UoaC0+Zmly c3QpOwp9CgpzdGF0aWMgaW5saW5lIHZvaWQgX19obGlzdF9kZWwoc3RydWN0IGhsaXN0X25vZGUg Km4pCnsKCXN0cnVjdCBobGlzdF9ub2RlICpuZXh0ID0gbi0+bmV4dDsKICAgIDFlOTk6CTViICAg ICAgICAgICAgICAgICAgIAlwb3AgICAgJXJieAogICAgMWU5YToJNDEgNWMgICAgICAgICAgICAg ICAgCXBvcCAgICAlcjEyCglzdHJ1Y3QgaGxpc3Rfbm9kZSAqKnBwcmV2ID0gbi0+cHByZXY7CiAg ICAxZTljOgk1ZCAgICAgICAgICAgICAgICAgICAJcG9wICAgICVyYnAKICAgIDFlOWQ6CWMzICAg ICAgICAgICAgICAgICAgIAlyZXRxICAgCiAgICAxZTllOgk0OCA4ZCA0ZSA0MCAgICAgICAgICAJ bGVhICAgIDB4NDAoJXJzaSksJXJjeAogICAgMWVhMjoJNDggOGIgNzcgMzAgICAgICAgICAgCW1v diAgICAweDMwKCVyZGkpLCVyc2kKCglXUklURV9PTkNFKCpwcHJldiwgbmV4dCk7CglpZiAobmV4 dCkKICAgIDFlYTY6CTQ4IGM3IGMyIDAwIDAwIDAwIDAwIAltb3YgICAgJDB4MCwlcmR4CiAqIGhs aXN0X2Zvcl9lYWNoX2VudHJ5KCkuCiAqLwpzdGF0aWMgaW5saW5lIHZvaWQgaGxpc3RfZGVsX3Jj dShzdHJ1Y3QgaGxpc3Rfbm9kZSAqbikKewoJX19obGlzdF9kZWwobik7CgluLT5wcHJldiA9IExJ U1RfUE9JU09OMjsKICAgIDFlYWQ6CTQ4IGM3IGM3IDAwIDAwIDAwIDAwIAltb3YgICAgJDB4MCwl cmRpCiAgICAxZWI0OgllOCAwMCAwMCAwMCAwMCAgICAgICAJY2FsbHEgIDFlYjkgPHZ4bGFuX2Zk Yl9kZXN0cm95KzB4ODk+CgoJaGxpc3RfZGVsX3JjdSgmZi0+aGxpc3QpOwoJY2FsbF9yY3UoJmYt PnJjdSwgdnhsYW5fZmRiX2ZyZWUpOwogICAgMWViOToJZWIgOGMgICAgICAgICAgICAgICAgCWpt cCAgICAxZTQ3IDx2eGxhbl9mZGJfZGVzdHJveSsweDE3PgogICAgMWViYjoJMGYgMWYgNDQgMDAg MDAgICAgICAgCW5vcGwgICAweDAoJXJheCwlcmF4LDEpCgowMDAwMDAwMDAwMDAxZWMwIDx2eGxh bl9jbGVhbnVwPjoKICAgIDFlYzA6CWU4IDAwIDAwIDAwIDAwICAgICAgIAljYWxscSAgMWVjNSA8 dnhsYW5fY2xlYW51cCsweDU+CiAgICAxZWM1Ogk1NSAgICAgICAgICAgICAgICAgICAJcHVzaCAg ICVyYnAKICAgIDFlYzY6CTQ4IDg5IGU1ICAgICAgICAgICAgIAltb3YgICAgJXJzcCwlcmJwCn0K ICAgIDFlYzk6CTQxIDU3ICAgICAgICAgICAgICAgIAlwdXNoICAgJXIxNQogICAgMWVjYjoJNDEg NTYgICAgICAgICAgICAgICAgCXB1c2ggICAlcjE0CiAgICAxZWNkOgk0MSA1NSAgICAgICAgICAg ICAgICAJcHVzaCAgICVyMTMKCWtmcmVlKGYpOwp9CgpzdGF0aWMgdm9pZCB2eGxhbl9mZGJfZGVz dHJveShzdHJ1Y3QgdnhsYW5fZGV2ICp2eGxhbiwgc3RydWN0IHZ4bGFuX2ZkYiAqZikKewoJbmV0 ZGV2X2RiZyh2eGxhbi0+ZGV2LAogICAgMWVjZjoJNDEgNTQgICAgICAgICAgICAgICAgCXB1c2gg ICAlcjEyCiAgICAxZWQxOgk1MyAgICAgICAgICAgICAgICAgICAJcHVzaCAgICVyYngKICAgIDFl ZDI6CTQ4IDgzIGVjIDEwICAgICAgICAgIAlzdWIgICAgJDB4MTAsJXJzcAogICAgMWVkNjoJNDgg OGIgNDcgMzAgICAgICAgICAgCW1vdiAgICAweDMwKCVyZGkpLCVyYXgKICAgIDFlZGE6CTRjIDhi IDI1IDAwIDAwIDAwIDAwIAltb3YgICAgMHgwKCVyaXApLCVyMTIgICAgICAgICMgMWVlMSA8dnhs YW5fY2xlYW51cCsweDIxPgogICAgMWVlMToJNDggOGIgNDAgNDggICAgICAgICAgCW1vdiAgICAw eDQ4KCVyYXgpLCVyYXgKICAgIDFlZTU6CWE4IDAxICAgICAgICAgICAgICAgIAl0ZXN0ICAgJDB4 MSwlYWwKICAgIDFlZTc6CTBmIDg0IGIzIDAwIDAwIDAwICAgIAlqZSAgICAgMWZhMCA8dnhsYW5f Y2xlYW51cCsweGUwPgogICAgMWVlZDoJNDggOGQgODcgZTggMDAgMDAgMDAgCWxlYSAgICAweGU4 KCVyZGkpLCVyYXgKCXJldHVybiBORVRERVZfVFhfT0s7Cn0KCi8qIFdhbGsgdGhlIGZvcndhcmRp bmcgdGFibGUgYW5kIHB1cmdlIHN0YWxlIGVudHJpZXMgKi8Kc3RhdGljIHZvaWQgdnhsYW5fY2xl YW51cCh1bnNpZ25lZCBsb25nIGFyZykKewogICAgMWVmNDoJNGMgOGQgYWYgNjAgMDEgMDAgMDAg CWxlYSAgICAweDE2MCglcmRpKSwlcjEzCiAgICAxZWZiOgk0OCA4OSBmYiAgICAgICAgICAgICAJ bW92ICAgICVyZGksJXJieAogICAgMWVmZToJNDkgODEgYzQgYzQgMDkgMDAgMDAgCWFkZCAgICAk MHg5YzQsJXIxMgogICAgMWYwNToJNDggODkgNDUgZDAgICAgICAgICAgCW1vdiAgICAlcmF4LC0w eDMwKCVyYnApCglzdHJ1Y3QgdnhsYW5fZGV2ICp2eGxhbiA9IChzdHJ1Y3QgdnhsYW5fZGV2ICop IGFyZzsKCXVuc2lnbmVkIGxvbmcgbmV4dF90aW1lciA9IGppZmZpZXMgKyBGREJfQUdFX0lOVEVS VkFMOwoJdW5zaWduZWQgaW50IGg7CgoJaWYgKCFuZXRpZl9ydW5uaW5nKHZ4bGFuLT5kZXYpKQog ICAgMWYwOToJNDggOGQgODcgNjAgMDkgMDAgMDAgCWxlYSAgICAweDk2MCglcmRpKSwlcmF4Cgov KiBXYWxrIHRoZSBmb3J3YXJkaW5nIHRhYmxlIGFuZCBwdXJnZSBzdGFsZSBlbnRyaWVzICovCnN0 YXRpYyB2b2lkIHZ4bGFuX2NsZWFudXAodW5zaWduZWQgbG9uZyBhcmcpCnsKCXN0cnVjdCB2eGxh bl9kZXYgKnZ4bGFuID0gKHN0cnVjdCB2eGxhbl9kZXYgKikgYXJnOwoJdW5zaWduZWQgbG9uZyBu ZXh0X3RpbWVyID0gamlmZmllcyArIEZEQl9BR0VfSU5URVJWQUw7CiAgICAxZjEwOgk0OCA4OSA0 NSBjOCAgICAgICAgICAJbW92ICAgICVyYXgsLTB4MzgoJXJicCkKICAgIDFmMTQ6CTQ4IDhiIDdk IGQwICAgICAgICAgIAltb3YgICAgLTB4MzAoJXJicCksJXJkaQoJdW5zaWduZWQgaW50IGg7CgoJ aWYgKCFuZXRpZl9ydW5uaW5nKHZ4bGFuLT5kZXYpKQogICAgMWYxODoJZTggMDAgMDAgMDAgMDAg ICAgICAgCWNhbGxxICAxZjFkIDx2eGxhbl9jbGVhbnVwKzB4NWQ+CiAgICAxZjFkOgk0ZCA4YiA3 ZCAwMCAgICAgICAgICAJbW92ICAgIDB4MCglcjEzKSwlcjE1CiAgICAxZjIxOgk0ZCA4NSBmZiAg ICAgICAgICAgICAJdGVzdCAgICVyMTUsJXIxNQogICAgMWYyNDoJNzUgMjQgICAgICAgICAgICAg ICAgCWpuZSAgICAxZjRhIDx2eGxhbl9jbGVhbnVwKzB4OGE+CiAgICAxZjI2OgllYiA1NiAgICAg ICAgICAgICAgICAJam1wICAgIDFmN2UgPHZ4bGFuX2NsZWFudXArMHhiZT4KICAgIDFmMjg6CTBm IDFmIDQ0IDAwIDAwICAgICAgIAlub3BsICAgMHgwKCVyYXgsJXJheCwxKQogICAgMWYyZDoJYjgg MDQgMDAgMDAgMDAgICAgICAgCW1vdiAgICAkMHg0LCVlYXgKCi8qIFdhbGsgdGhlIGZvcndhcmRp bmcgdGFibGUgYW5kIHB1cmdlIHN0YWxlIGVudHJpZXMgKi8Kc3RhdGljIHZvaWQgdnhsYW5fY2xl YW51cCh1bnNpZ25lZCBsb25nIGFyZykKewoJc3RydWN0IHZ4bGFuX2RldiAqdnhsYW4gPSAoc3Ry dWN0IHZ4bGFuX2RldiAqKSBhcmc7Cgl1bnNpZ25lZCBsb25nIG5leHRfdGltZXIgPSBqaWZmaWVz ICsgRkRCX0FHRV9JTlRFUlZBTDsKICAgIDFmMzI6CTRjIDg5IGZlICAgICAgICAgICAgIAltb3Yg ICAgJXIxNSwlcnNpCiAgICAxZjM1Ogk0OCA4OSBkZiAgICAgICAgICAgICAJbW92ICAgICVyYngs JXJkaQogICAgMWYzODoJNjYgNDEgODkgNDcgNDYgICAgICAgCW1vdiAgICAlYXgsMHg0NiglcjE1 KQogICAgMWYzZDoJZTggZWUgZmUgZmYgZmYgICAgICAgCWNhbGxxICAxZTMwIDx2eGxhbl9mZGJf ZGVzdHJveT4KICAgIDFmNDI6CTRkIDg1IGY2ICAgICAgICAgICAgIAl0ZXN0ICAgJXIxNCwlcjE0 Cn0KCnN0YXRpYyBfX2Fsd2F5c19pbmxpbmUgdm9pZCBzcGluX2xvY2tfYmgoc3BpbmxvY2tfdCAq bG9jaykKewoJcmF3X3NwaW5fbG9ja19iaCgmbG9jay0+cmxvY2spOwogICAgMWY0NToJNGQgODkg ZjcgICAgICAgICAgICAgCW1vdiAgICAlcjE0LCVyMTUKICAgIDFmNDg6CTc0IDM0ICAgICAgICAg ICAgICAgIAlqZSAgICAgMWY3ZSA8dnhsYW5fY2xlYW51cCsweGJlPgogICAgMWY0YToJNDEgZjYg NDcgNDYgODAgICAgICAgCXRlc3RiICAkMHg4MCwweDQ2KCVyMTUpCgoJZm9yIChoID0gMDsgaCA8 IEZEQl9IQVNIX1NJWkU7ICsraCkgewoJCXN0cnVjdCBobGlzdF9ub2RlICpwLCAqbjsKCgkJc3Bp bl9sb2NrX2JoKCZ2eGxhbi0+aGFzaF9sb2NrKTsKCQlobGlzdF9mb3JfZWFjaF9zYWZlKHAsIG4s ICZ2eGxhbi0+ZmRiX2hlYWRbaF0pIHsKICAgIDFmNGY6CTRkIDhiIDM3ICAgICAgICAgICAgIAlt b3YgICAgKCVyMTUpLCVyMTQKICAgIDFmNTI6CTc1IGVlICAgICAgICAgICAgICAgIAlqbmUgICAg MWY0MiA8dnhsYW5fY2xlYW51cCsweDgyPgogICAgMWY1NDoJNDggNjkgOTMgNTAgMDEgMDAgMDAg CWltdWwgICAkMHhmYSwweDE1MCglcmJ4KSwlcmR4CiAgICAxZjViOglmYSAwMCAwMCAwMCAKCQkJ dGltZW91dCA9IGYtPnVzZWQgKyB2eGxhbi0+Y2ZnLmFnZV9pbnRlcnZhbCAqIEhaOwoJCQlpZiAo dGltZV9iZWZvcmVfZXEodGltZW91dCwgamlmZmllcykpIHsKCQkJCW5ldGRldl9kYmcodnhsYW4t PmRldiwKCQkJCQkgICAiZ2FyYmFnZSBjb2xsZWN0ICVwTVxuIiwKCQkJCQkgICBmLT5ldGhfYWRk cik7CgkJCQlmLT5zdGF0ZSA9IE5VRF9TVEFMRTsKICAgIDFmNWY6CTQ4IDhiIDBkIDAwIDAwIDAw IDAwIAltb3YgICAgMHgwKCVyaXApLCVyY3ggICAgICAgICMgMWY2NiA8dnhsYW5fY2xlYW51cCsw eGE2PgoJCQkJdnhsYW5fZmRiX2Rlc3Ryb3kodnhsYW4sIGYpOwogICAgMWY2NjoJNDkgMDMgNTcg MjggICAgICAgICAgCWFkZCAgICAweDI4KCVyMTUpLCVyZHgKCQkJdGltZW91dCA9IGYtPnVzZWQg KyB2eGxhbi0+Y2ZnLmFnZV9pbnRlcnZhbCAqIEhaOwoJCQlpZiAodGltZV9iZWZvcmVfZXEodGlt ZW91dCwgamlmZmllcykpIHsKCQkJCW5ldGRldl9kYmcodnhsYW4tPmRldiwKCQkJCQkgICAiZ2Fy YmFnZSBjb2xsZWN0ICVwTVxuIiwKCQkJCQkgICBmLT5ldGhfYWRkcik7CgkJCQlmLT5zdGF0ZSA9 IE5VRF9TVEFMRTsKICAgIDFmNmE6CTQ4IDM5IGQxICAgICAgICAgICAgIAljbXAgICAgJXJkeCwl cmN4CgkJCQl2eGxhbl9mZGJfZGVzdHJveSh2eGxhbiwgZik7CiAgICAxZjZkOgk3OSBiOSAgICAg ICAgICAgICAgICAJam5zICAgIDFmMjggPHZ4bGFuX2NsZWFudXArMHg2OD4KICAgIDFmNmY6CTRj IDM5IGUyICAgICAgICAgICAgIAljbXAgICAgJXIxMiwlcmR4CgoJZm9yIChoID0gMDsgaCA8IEZE Ql9IQVNIX1NJWkU7ICsraCkgewoJCXN0cnVjdCBobGlzdF9ub2RlICpwLCAqbjsKCgkJc3Bpbl9s b2NrX2JoKCZ2eGxhbi0+aGFzaF9sb2NrKTsKCQlobGlzdF9mb3JfZWFjaF9zYWZlKHAsIG4sICZ2 eGxhbi0+ZmRiX2hlYWRbaF0pIHsKICAgIDFmNzI6CTRkIDg5IGY3ICAgICAgICAgICAgIAltb3Yg ICAgJXIxNCwlcjE1CiAgICAxZjc1Ogk0YyAwZiA0OCBlMiAgICAgICAgICAJY21vdnMgICVyZHgs JXIxMgogICAgMWY3OToJNGQgODUgZjYgICAgICAgICAgICAgCXRlc3QgICAlcjE0LCVyMTQKCQkJ c3RydWN0IHZ4bGFuX2ZkYiAqZgoJCQkJPSBjb250YWluZXJfb2YocCwgc3RydWN0IHZ4bGFuX2Zk YiwgaGxpc3QpOwoJCQl1bnNpZ25lZCBsb25nIHRpbWVvdXQ7CgoJCQlpZiAoZi0+c3RhdGUgJiBO VURfUEVSTUFORU5UKQogICAgMWY3YzoJNzUgY2MgICAgICAgICAgICAgICAgCWpuZSAgICAxZjRh IDx2eGxhbl9jbGVhbnVwKzB4OGE+CiAgICAxZjdlOgk0OCA4YiA3ZCBkMCAgICAgICAgICAJbW92 ICAgIC0weDMwKCVyYnApLCVyZGkKICAgIDFmODI6CTQ5IDgzIGM1IDA4ICAgICAgICAgIAlhZGQg ICAgJDB4OCwlcjEzCgkJCQljb250aW51ZTsKCgkJCXRpbWVvdXQgPSBmLT51c2VkICsgdnhsYW4t PmNmZy5hZ2VfaW50ZXJ2YWwgKiBIWjsKICAgIDFmODY6CWU4IDAwIDAwIDAwIDAwICAgICAgIAlj YWxscSAgMWY4YiA8dnhsYW5fY2xlYW51cCsweGNiPgogICAgMWY4YjoJNGMgM2IgNmQgYzggICAg ICAgICAgCWNtcCAgICAtMHgzOCglcmJwKSwlcjEzCgkJCWlmICh0aW1lX2JlZm9yZV9lcSh0aW1l b3V0LCBqaWZmaWVzKSkgewogICAgMWY4ZjoJNzUgODMgICAgICAgICAgICAgICAgCWpuZSAgICAx ZjE0IDx2eGxhbl9jbGVhbnVwKzB4NTQ+CiAgICAxZjkxOgk0OCA4ZCBiYiBhMCAwMCAwMCAwMCAJ bGVhICAgIDB4YTAoJXJieCksJXJkaQoJCQl1bnNpZ25lZCBsb25nIHRpbWVvdXQ7CgoJCQlpZiAo Zi0+c3RhdGUgJiBOVURfUEVSTUFORU5UKQoJCQkJY29udGludWU7CgoJCQl0aW1lb3V0ID0gZi0+ dXNlZCArIHZ4bGFuLT5jZmcuYWdlX2ludGVydmFsICogSFo7CiAgICAxZjk4Ogk0YyA4OSBlNiAg ICAgICAgICAgICAJbW92ICAgICVyMTIsJXJzaQoJCQlpZiAodGltZV9iZWZvcmVfZXEodGltZW91 dCwgamlmZmllcykpIHsKICAgIDFmOWI6CWU4IDAwIDAwIDAwIDAwICAgICAgIAljYWxscSAgMWZh MCA8dnhsYW5fY2xlYW51cCsweGUwPgoJCQkJCSAgICJnYXJiYWdlIGNvbGxlY3QgJXBNXG4iLAoJ CQkJCSAgIGYtPmV0aF9hZGRyKTsKCQkJCWYtPnN0YXRlID0gTlVEX1NUQUxFOwoJCQkJdnhsYW5f ZmRiX2Rlc3Ryb3kodnhsYW4sIGYpOwoJCQl9IGVsc2UgaWYgKHRpbWVfYmVmb3JlKHRpbWVvdXQs IG5leHRfdGltZXIpKQoJCQkJbmV4dF90aW1lciA9IHRpbWVvdXQ7CiAgICAxZmEwOgk0OCA4MyBj NCAxMCAgICAgICAgICAJYWRkICAgICQweDEwLCVyc3AKICAgIDFmYTQ6CTViICAgICAgICAgICAg ICAgICAgIAlwb3AgICAgJXJieAogICAgMWZhNToJNDEgNWMgICAgICAgICAgICAgICAgCXBvcCAg ICAlcjEyCiAgICAxZmE3Ogk0MSA1ZCAgICAgICAgICAgICAgICAJcG9wICAgICVyMTMKCglmb3Ig KGggPSAwOyBoIDwgRkRCX0hBU0hfU0laRTsgKytoKSB7CgkJc3RydWN0IGhsaXN0X25vZGUgKnAs ICpuOwoKCQlzcGluX2xvY2tfYmgoJnZ4bGFuLT5oYXNoX2xvY2spOwoJCWhsaXN0X2Zvcl9lYWNo X3NhZmUocCwgbiwgJnZ4bGFuLT5mZGJfaGVhZFtoXSkgewogICAgMWZhOToJNDEgNWUgICAgICAg ICAgICAgICAgCXBvcCAgICAlcjE0CiAgICAxZmFiOgk0MSA1ZiAgICAgICAgICAgICAgICAJcG9w ICAgICVyMTUKICAgIDFmYWQ6CTVkICAgICAgICAgICAgICAgICAgIAlwb3AgICAgJXJicAoJcmF3 X3NwaW5fdW5sb2NrKCZsb2NrLT5ybG9jayk7Cn0KCnN0YXRpYyBfX2Fsd2F5c19pbmxpbmUgdm9p ZCBzcGluX3VubG9ja19iaChzcGlubG9ja190ICpsb2NrKQp7CglyYXdfc3Bpbl91bmxvY2tfYmgo JmxvY2stPnJsb2NrKTsKICAgIDFmYWU6CWMzICAgICAgICAgICAgICAgICAgIAlyZXRxICAgCiAg ICAxZmFmOgk0OCA4YiA3MyAzMCAgICAgICAgICAJbW92ICAgIDB4MzAoJXJieCksJXJzaQogICAg MWZiMzoJNDkgOGQgNGYgNDAgICAgICAgICAgCWxlYSAgICAweDQwKCVyMTUpLCVyY3gKICAgIDFm Yjc6CTQ4IGM3IGMyIDAwIDAwIDAwIDAwIAltb3YgICAgJDB4MCwlcmR4Cgl1bnNpZ25lZCBpbnQg aDsKCglpZiAoIW5ldGlmX3J1bm5pbmcodnhsYW4tPmRldikpCgkJcmV0dXJuOwoKCWZvciAoaCA9 IDA7IGggPCBGREJfSEFTSF9TSVpFOyArK2gpIHsKICAgIDFmYmU6CTQ4IGM3IGM3IDAwIDAwIDAw IDAwIAltb3YgICAgJDB4MCwlcmRpCgkJCQluZXh0X3RpbWVyID0gdGltZW91dDsKCQl9CgkJc3Bp bl91bmxvY2tfYmgoJnZ4bGFuLT5oYXNoX2xvY2spOwoJfQoKCW1vZF90aW1lcigmdnhsYW4tPmFn ZV90aW1lciwgbmV4dF90aW1lcik7CiAgICAxZmM1OgllOCAwMCAwMCAwMCAwMCAgICAgICAJY2Fs bHEgIDFmY2EgPHZ4bGFuX2NsZWFudXArMHgxMGE+CiAgICAxZmNhOgllOSA1ZSBmZiBmZiBmZiAg ICAgICAJam1wcSAgIDFmMmQgPHZ4bGFuX2NsZWFudXArMHg2ZD4KICAgIDFmY2Y6CTkwICAgICAg ICAgICAgICAgICAgIAlub3AKCjAwMDAwMDAwMDAwMDFmZDAgPHZ4bGFuX2ZkYl9kZWxldGVfZGVm YXVsdD46Cn0KICAgIDFmZDA6CWU4IDAwIDAwIDAwIDAwICAgICAgIAljYWxscSAgMWZkNSA8dnhs YW5fZmRiX2RlbGV0ZV9kZWZhdWx0KzB4NT4KICAgIDFmZDU6CTU1ICAgICAgICAgICAgICAgICAg IAlwdXNoICAgJXJicAogICAgMWZkNjoJNDggODkgZTUgICAgICAgICAgICAgCW1vdiAgICAlcnNw LCVyYnAKICAgIDFmZDk6CTQxIDU0ICAgICAgICAgICAgICAgIAlwdXNoICAgJXIxMgogICAgMWZk YjoJNGMgOGQgYTcgZTggMDAgMDAgMDAgCWxlYSAgICAweGU4KCVyZGkpLCVyMTIKCQkJaWYgKGYt PnN0YXRlICYgTlVEX1BFUk1BTkVOVCkKCQkJCWNvbnRpbnVlOwoKCQkJdGltZW91dCA9IGYtPnVz ZWQgKyB2eGxhbi0+Y2ZnLmFnZV9pbnRlcnZhbCAqIEhaOwoJCQlpZiAodGltZV9iZWZvcmVfZXEo dGltZW91dCwgamlmZmllcykpIHsKCQkJCW5ldGRldl9kYmcodnhsYW4tPmRldiwKICAgIDFmZTI6 CTUzICAgICAgICAgICAgICAgICAgIAlwdXNoICAgJXJieAogICAgMWZlMzoJNDggODkgZmIgICAg ICAgICAgICAgCW1vdiAgICAlcmRpLCVyYngKICAgIDFmZTY6CTRjIDg5IGU3ICAgICAgICAgICAg IAltb3YgICAgJXIxMiwlcmRpCiAgICAxZmU5OgllOCAwMCAwMCAwMCAwMCAgICAgICAJY2FsbHEg IDFmZWUgPHZ4bGFuX2ZkYl9kZWxldGVfZGVmYXVsdCsweDFlPgogICAgMWZlZToJNDggYzcgYzYg MDAgMDAgMDAgMDAgCW1vdiAgICAkMHgwLCVyc2kKICAgIDFmZjU6CTQ4IDg5IGRmICAgICAgICAg ICAgIAltb3YgICAgJXJieCwlcmRpCiAgICAxZmY4OgllOCAwMyBlMCBmZiBmZiAgICAgICAJY2Fs bHEgIDAgPF9fdnhsYW5fZmluZF9tYWM+CiAgICAxZmZkOgk0OCA4NSBjMCAgICAgICAgICAgICAJ dGVzdCAgICVyYXgsJXJheAoKCXJldHVybiAwOwp9CgpzdGF0aWMgdm9pZCB2eGxhbl9mZGJfZGVs ZXRlX2RlZmF1bHQoc3RydWN0IHZ4bGFuX2RldiAqdnhsYW4pCnsKICAgIDIwMDA6CTc0IDBiICAg ICAgICAgICAgICAgIAlqZSAgICAgMjAwZCA8dnhsYW5fZmRiX2RlbGV0ZV9kZWZhdWx0KzB4M2Q+ CiAgICAyMDAyOgk0OCA4OSBjNiAgICAgICAgICAgICAJbW92ICAgICVyYXgsJXJzaQogICAgMjAw NToJNDggODkgZGYgICAgICAgICAgICAgCW1vdiAgICAlcmJ4LCVyZGkKICAgIDIwMDg6CWU4IDIz IGZlIGZmIGZmICAgICAgIAljYWxscSAgMWUzMCA8dnhsYW5fZmRiX2Rlc3Ryb3k+CglyYXdfc3Bp bl9sb2NrKCZsb2NrLT5ybG9jayk7Cn0KCnN0YXRpYyBfX2Fsd2F5c19pbmxpbmUgdm9pZCBzcGlu X2xvY2tfYmgoc3BpbmxvY2tfdCAqbG9jaykKewoJcmF3X3NwaW5fbG9ja19iaCgmbG9jay0+cmxv Y2spOwogICAgMjAwZDoJNGMgODkgZTcgICAgICAgICAgICAgCW1vdiAgICAlcjEyLCVyZGkKICAg IDIwMTA6CWU4IDAwIDAwIDAwIDAwICAgICAgIAljYWxscSAgMjAxNSA8dnhsYW5fZmRiX2RlbGV0 ZV9kZWZhdWx0KzB4NDU+CiAgICAyMDE1Ogk1YiAgICAgICAgICAgICAgICAgICAJcG9wICAgICVy YngKICAgIDIwMTY6CTQxIDVjICAgICAgICAgICAgICAgIAlwb3AgICAgJXIxMgogICAgMjAxODoJ NWQgICAgICAgICAgICAgICAgICAgCXBvcCAgICAlcmJwCiAgICAyMDE5OgljMyAgICAgICAgICAg ICAgICAgICAJcmV0cSAgIAogICAgMjAxYToJNjYgMGYgMWYgNDQgMDAgMDAgICAgCW5vcHcgICAw eDAoJXJheCwlcmF4LDEpCgowMDAwMDAwMDAwMDAyMDIwIDx2eGxhbl91bmluaXQ+OgoJc3RydWN0 IHZ4bGFuX2ZkYiAqZjsKCglzcGluX2xvY2tfYmgoJnZ4bGFuLT5oYXNoX2xvY2spOwoJZiA9IF9f dnhsYW5fZmluZF9tYWModnhsYW4sIGFsbF96ZXJvc19tYWMpOwogICAgMjAyMDoJZTggMDAgMDAg MDAgMDAgICAgICAgCWNhbGxxICAyMDI1IDx2eGxhbl91bmluaXQrMHg1PgogICAgMjAyNToJNTUg ICAgICAgICAgICAgICAgICAgCXB1c2ggICAlcmJwCiAgICAyMDI2Ogk0OCA4OSBlNSAgICAgICAg ICAgICAJbW92ICAgICVyc3AsJXJicAogICAgMjAyOToJNTMgICAgICAgICAgICAgICAgICAgCXB1 c2ggICAlcmJ4CiAgICAyMDJhOgk0OCA4OSBmYiAgICAgICAgICAgICAJbW92ICAgICVyZGksJXJi eAoJaWYgKGYpCiAgICAyMDJkOgk0OCA4ZCBiZiA0MCAwOCAwMCAwMCAJbGVhICAgIDB4ODQwKCVy ZGkpLCVyZGkKCQl2eGxhbl9mZGJfZGVzdHJveSh2eGxhbiwgZik7CiAgICAyMDM0OgllOCA5NyBm ZiBmZiBmZiAgICAgICAJY2FsbHEgIDFmZDAgPHZ4bGFuX2ZkYl9kZWxldGVfZGVmYXVsdD4KICAg IDIwMzk6CTQ4IDhiIGJiIDg4IDA0IDAwIDAwIAltb3YgICAgMHg0ODgoJXJieCksJXJkaQoJcmF3 X3NwaW5fdW5sb2NrKCZsb2NrLT5ybG9jayk7Cn0KCnN0YXRpYyBfX2Fsd2F5c19pbmxpbmUgdm9p ZCBzcGluX3VubG9ja19iaChzcGlubG9ja190ICpsb2NrKQp7CglyYXdfc3Bpbl91bmxvY2tfYmgo JmxvY2stPnJsb2NrKTsKICAgIDIwNDA6CWU4IDAwIDAwIDAwIDAwICAgICAgIAljYWxscSAgMjA0 NSA8dnhsYW5fdW5pbml0KzB4MjU+CglzcGluX3VubG9ja19iaCgmdnhsYW4tPmhhc2hfbG9jayk7 Cn0KICAgIDIwNDU6CTViICAgICAgICAgICAgICAgICAgIAlwb3AgICAgJXJieAogICAgMjA0NjoJ NWQgICAgICAgICAgICAgICAgICAgCXBvcCAgICAlcmJwCiAgICAyMDQ3OgljMyAgICAgICAgICAg ICAgICAgICAJcmV0cSAgIAogICAgMjA0ODoJMGYgMWYgODQgMDAgMDAgMDAgMDAgCW5vcGwgICAw eDAoJXJheCwlcmF4LDEpCiAgICAyMDRmOgkwMCAKCjAwMDAwMDAwMDAwMDIwNTAgPHZ4bGFuX2lw X21pc3M+OgoKc3RhdGljIHZvaWQgdnhsYW5fdW5pbml0KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYp CnsKICAgIDIwNTA6CWU4IDAwIDAwIDAwIDAwICAgICAgIAljYWxscSAgMjA1NSA8dnhsYW5faXBf bWlzcysweDU+CiAgICAyMDU1Ogk1NSAgICAgICAgICAgICAgICAgICAJcHVzaCAgICVyYnAKICAg IDIwNTY6CTQ4IDg5IGZhICAgICAgICAgICAgIAltb3YgICAgJXJkaSwlcmR4CiAgICAyMDU5Ogli OSAwYSAwMCAwMCAwMCAgICAgICAJbW92ICAgICQweGEsJWVjeAoJc3RydWN0IHZ4bGFuX2RldiAq dnhsYW4gPSBuZXRkZXZfcHJpdihkZXYpOwoKCXZ4bGFuX2ZkYl9kZWxldGVfZGVmYXVsdCh2eGxh bik7CiAgICAyMDVlOgk0OCA4OSBlNSAgICAgICAgICAgICAJbW92ICAgICVyc3AsJXJicAogICAg MjA2MToJNDggODMgZTQgZjAgICAgICAgICAgCWFuZCAgICAkMHhmZmZmZmZmZmZmZmZmZmYwLCVy c3AKICAgIDIwNjU6CTQ4IDgxIGVjIGIwIDAwIDAwIDAwIAlzdWIgICAgJDB4YjAsJXJzcAoKCWZy ZWVfcGVyY3B1KGRldi0+dHN0YXRzKTsKICAgIDIwNmM6CTY1IDQ4IDhiIDA0IDI1IDI4IDAwIAlt b3YgICAgJWdzOjB4MjgsJXJheAogICAgMjA3MzoJMDAgMDAgCn0KICAgIDIwNzU6CTQ4IDg5IDg0 IDI0IGE4IDAwIDAwIAltb3YgICAgJXJheCwweGE4KCVyc3ApCiAgICAyMDdjOgkwMCAKICAgIDIw N2Q6CTMxIGMwICAgICAgICAgICAgICAgIAl4b3IgICAgJWVheCwlZWF4CiAgICAyMDdmOgk0OCA4 OSBlNyAgICAgICAgICAgICAJbW92ICAgICVyc3AsJXJkaQoJaWYgKGVyciA8IDApCgkJcnRubF9z ZXRfc2tfZXJyKG5ldCwgUlROTEdSUF9ORUlHSCwgZXJyKTsKfQoKc3RhdGljIHZvaWQgdnhsYW5f aXBfbWlzcyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCB1bmlvbiB2eGxhbl9hZGRyICppcGEpCnsK ICAgIDIwODI6CWYzIDQ4IGFiICAgICAgICAgICAgIAlyZXAgc3RvcyAlcmF4LCVlczooJXJkaSkK ICAgIDIwODU6CWI5IDA0IDAwIDAwIDAwICAgICAgIAltb3YgICAgJDB4NCwlZWN4CglzdHJ1Y3Qg dnhsYW5fZGV2ICp2eGxhbiA9IG5ldGRldl9wcml2KGRldik7CglzdHJ1Y3QgdnhsYW5fZmRiIGYg PSB7CiAgICAyMDhhOgk0OCA4ZCA3YyAyNCA1MCAgICAgICAJbGVhICAgIDB4NTAoJXJzcCksJXJk aQoJaWYgKGVyciA8IDApCgkJcnRubF9zZXRfc2tfZXJyKG5ldCwgUlROTEdSUF9ORUlHSCwgZXJy KTsKfQoKc3RhdGljIHZvaWQgdnhsYW5faXBfbWlzcyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCB1 bmlvbiB2eGxhbl9hZGRyICppcGEpCnsKICAgIDIwOGY6CTY2IDg5IDRjIDI0IDQ2ICAgICAgIAlt b3YgICAgJWN4LDB4NDYoJXJzcCkKICAgIDIwOTQ6CWI5IDBiIDAwIDAwIDAwICAgICAgIAltb3Yg ICAgJDB4YiwlZWN4CiAgICAyMDk5OglmMyA0OCBhYiAgICAgICAgICAgICAJcmVwIHN0b3MgJXJh eCwlZXM6KCVyZGkpCiAgICAyMDljOgk0OCA4YiAwNiAgICAgICAgICAgICAJbW92ICAgICglcnNp KSwlcmF4CiAgICAyMDlmOgk0OCA4ZCBiYSA0MCAwOCAwMCAwMCAJbGVhICAgIDB4ODQwKCVyZHgp LCVyZGkKICAgIDIwYTY6CTQ4IDhkIDU0IDI0IDUwICAgICAgIAlsZWEgICAgMHg1MCglcnNwKSwl cmR4CiAgICAyMGFiOgliOSAxZSAwMCAwMCAwMCAgICAgICAJbW92ICAgICQweDFlLCVlY3gKCXN0 cnVjdCB2eGxhbl9kZXYgKnZ4bGFuID0gbmV0ZGV2X3ByaXYoZGV2KTsKCXN0cnVjdCB2eGxhbl9m ZGIgZiA9IHsKICAgIDIwYjA6CWM3IDQ0IDI0IDcwIDAxIDAwIDAwIAltb3ZsICAgJDB4MSwweDcw KCVyc3ApCiAgICAyMGI3OgkwMCAKICAgIDIwYjg6CTQ4IDg5IDQ0IDI0IDUwICAgICAgIAltb3Yg ICAgJXJheCwweDUwKCVyc3ApCgkJLnN0YXRlID0gTlVEX1NUQUxFLAoJfTsKCXN0cnVjdCB2eGxh bl9yZHN0IHJlbW90ZSA9IHsKICAgIDIwYmQ6CTQ4IDhiIDQ2IDA4ICAgICAgICAgIAltb3YgICAg MHg4KCVyc2kpLCVyYXgKfQoKc3RhdGljIHZvaWQgdnhsYW5faXBfbWlzcyhzdHJ1Y3QgbmV0X2Rl dmljZSAqZGV2LCB1bmlvbiB2eGxhbl9hZGRyICppcGEpCnsKCXN0cnVjdCB2eGxhbl9kZXYgKnZ4 bGFuID0gbmV0ZGV2X3ByaXYoZGV2KTsKCXN0cnVjdCB2eGxhbl9mZGIgZiA9IHsKICAgIDIwYzE6 CTQ4IDg5IDQ0IDI0IDU4ICAgICAgIAltb3YgICAgJXJheCwweDU4KCVyc3ApCgkJLnN0YXRlID0g TlVEX1NUQUxFLAoJfTsKCXN0cnVjdCB2eGxhbl9yZHN0IHJlbW90ZSA9IHsKICAgIDIwYzY6CTQ4 IDhiIDQ2IDEwICAgICAgICAgIAltb3YgICAgMHgxMCglcnNpKSwlcmF4CiAgICAyMGNhOgk0OCA4 OSA0NCAyNCA2MCAgICAgICAJbW92ICAgICVyYXgsMHg2MCglcnNwKQoJCS5yZW1vdGVfaXAgPSAq aXBhLCAvKiBnb2VzIHRvIE5EQV9EU1QgKi8KCQkucmVtb3RlX3ZuaSA9IGNwdV90b19iZTMyKFZY TEFOX05fVklEKSwKCX07CgoJdnhsYW5fZmRiX25vdGlmeSh2eGxhbiwgJmYsICZyZW1vdGUsIFJU TV9HRVRORUlHSCk7CiAgICAyMGNmOgk4YiA0NiAxOCAgICAgICAgICAgICAJbW92ICAgIDB4MTgo JXJzaSksJWVheAogICAgMjBkMjoJNDggODkgZTYgICAgICAgICAgICAgCW1vdiAgICAlcnNwLCVy c2kKICAgIDIwZDU6CTg5IDQ0IDI0IDY4ICAgICAgICAgIAltb3YgICAgJWVheCwweDY4KCVyc3Ap CiAgICAyMGQ5OgllOCA2MiBmYyBmZiBmZiAgICAgICAJY2FsbHEgIDFkNDAgPHZ4bGFuX2ZkYl9u b3RpZnk+CiAgICAyMGRlOgk0OCA4YiA4NCAyNCBhOCAwMCAwMCAJbW92ICAgIDB4YTgoJXJzcCks JXJheAogICAgMjBlNToJMDAgCnsKCXN0cnVjdCB2eGxhbl9kZXYgKnZ4bGFuID0gbmV0ZGV2X3By aXYoZGV2KTsKCXN0cnVjdCB2eGxhbl9mZGIgZiA9IHsKCQkuc3RhdGUgPSBOVURfU1RBTEUsCgl9 OwoJc3RydWN0IHZ4bGFuX3Jkc3QgcmVtb3RlID0gewogICAgMjBlNjoJNjUgNDggMzMgMDQgMjUg MjggMDAgCXhvciAgICAlZ3M6MHgyOCwlcmF4CiAgICAyMGVkOgkwMCAwMCAKICAgIDIwZWY6CTc1 IDAyICAgICAgICAgICAgICAgIAlqbmUgICAgMjBmMyA8dnhsYW5faXBfbWlzcysweGEzPgogICAg MjBmMToJYzkgICAgICAgICAgICAgICAgICAgCWxlYXZlcSAKICAgIDIwZjI6CWMzICAgICAgICAg ICAgICAgICAgIAlyZXRxICAgCiAgICAyMGYzOgllOCAwMCAwMCAwMCAwMCAgICAgICAJY2FsbHEg IDIwZjggPHZ4bGFuX2lwX21pc3MrMHhhOD4KICAgIDIwZjg6CTBmIDFmIDg0IDAwIDAwIDAwIDAw IAlub3BsICAgMHgwKCVyYXgsJXJheCwxKQogICAgMjBmZjoJMDAgCgowMDAwMDAwMDAwMDAyMTAw IDx2eGxhbl9mZGJfbWlzcz46CiAgICAyMTAwOgllOCAwMCAwMCAwMCAwMCAgICAgICAJY2FsbHEg IDIxMDUgPHZ4bGFuX2ZkYl9taXNzKzB4NT4KICAgIDIxMDU6CTU1ICAgICAgICAgICAgICAgICAg IAlwdXNoICAgJXJicAogICAgMjEwNjoJNDkgODkgZjggICAgICAgICAgICAgCW1vdiAgICAlcmRp LCVyOAoJCS5yZW1vdGVfaXAgPSAqaXBhLCAvKiBnb2VzIHRvIE5EQV9EU1QgKi8KCQkucmVtb3Rl X3ZuaSA9IGNwdV90b19iZTMyKFZYTEFOX05fVklEKSwKCX07CgoJdnhsYW5fZmRiX25vdGlmeSh2 eGxhbiwgJmYsICZyZW1vdGUsIFJUTV9HRVRORUlHSCk7CiAgICAyMTA5OgliOSAwYSAwMCAwMCAw MCAgICAgICAJbW92ICAgICQweGEsJWVjeAp9CiAgICAyMTBlOgliYSAwNCAwMCAwMCAwMCAgICAg ICAJbW92ICAgICQweDQsJWVkeAogICAgMjExMzoJNDggODkgZTUgICAgICAgICAgICAgCW1vdiAg ICAlcnNwLCVyYnAKICAgIDIxMTY6CTQ4IDgzIGU0IGYwICAgICAgICAgIAlhbmQgICAgJDB4ZmZm ZmZmZmZmZmZmZmZmMCwlcnNwCiAgICAyMTFhOgk0OCA4MSBlYyBiMCAwMCAwMCAwMCAJc3ViICAg ICQweGIwLCVyc3AKICAgIDIxMjE6CTY1IDQ4IDhiIDA0IDI1IDI4IDAwIAltb3YgICAgJWdzOjB4 MjgsJXJheAogICAgMjEyODoJMDAgMDAgCiAgICAyMTJhOgk0OCA4OSA4NCAyNCBhOCAwMCAwMCAJ bW92ICAgICVyYXgsMHhhOCglcnNwKQogICAgMjEzMToJMDAgCgpzdGF0aWMgdm9pZCB2eGxhbl9m ZGJfbWlzcyhzdHJ1Y3QgdnhsYW5fZGV2ICp2eGxhbiwgY29uc3QgdTggZXRoX2FkZHJbRVRIX0FM RU5dKQp7CiAgICAyMTMyOgkzMSBjMCAgICAgICAgICAgICAgICAJeG9yICAgICVlYXgsJWVheAog ICAgMjEzNDoJNDggODkgZTcgICAgICAgICAgICAgCW1vdiAgICAlcnNwLCVyZGkKICAgIDIxMzc6 CWYzIDQ4IGFiICAgICAgICAgICAgIAlyZXAgc3RvcyAlcmF4LCVlczooJXJkaSkKCXN0cnVjdCB2 eGxhbl9mZGIgZiA9IHsKICAgIDIxM2E6CTQ4IDhkIDdjIDI0IDUwICAgICAgIAlsZWEgICAgMHg1 MCglcnNwKSwlcmRpCiAgICAyMTNmOgliOSAwYiAwMCAwMCAwMCAgICAgICAJbW92ICAgICQweGIs JWVjeAoKCXZ4bGFuX2ZkYl9ub3RpZnkodnhsYW4sICZmLCAmcmVtb3RlLCBSVE1fR0VUTkVJR0gp Owp9CgpzdGF0aWMgdm9pZCB2eGxhbl9mZGJfbWlzcyhzdHJ1Y3QgdnhsYW5fZGV2ICp2eGxhbiwg Y29uc3QgdTggZXRoX2FkZHJbRVRIX0FMRU5dKQp7CiAgICAyMTQ0Ogk2NiA4OSA1NCAyNCA0NiAg ICAgICAJbW92ICAgICVkeCwweDQ2KCVyc3ApCiAgICAyMTQ5Ogk0OCA4ZCA1NCAyNCA1MCAgICAg ICAJbGVhICAgIDB4NTAoJXJzcCksJXJkeAogICAgMjE0ZToJZjMgNDggYWIgICAgICAgICAgICAg CXJlcCBzdG9zICVyYXgsJWVzOiglcmRpKQogICAgMjE1MToJOGIgMDYgICAgICAgICAgICAgICAg CW1vdiAgICAoJXJzaSksJWVheAogICAgMjE1MzoJYjkgMWUgMDAgMDAgMDAgICAgICAgCW1vdiAg ICAkMHgxZSwlZWN4CiAgICAyMTU4Ogk0YyA4OSBjNyAgICAgICAgICAgICAJbW92ICAgICVyOCwl cmRpCiAgICAyMTViOgk4OSA0NCAyNCA0MCAgICAgICAgICAJbW92ICAgICVlYXgsMHg0MCglcnNw KQogICAgMjE1ZjoJMGYgYjcgNDYgMDQgICAgICAgICAgCW1vdnp3bCAweDQoJXJzaSksJWVheAog ICAgMjE2MzoJNDggODkgZTYgICAgICAgICAgICAgCW1vdiAgICAlcnNwLCVyc2kKCXN0cnVjdCB2 eGxhbl9mZGIgZiA9IHsKICAgIDIxNjY6CTY2IDg5IDQ0IDI0IDQ0ICAgICAgIAltb3YgICAgJWF4 LDB4NDQoJXJzcCkKCQkuc3RhdGUgPSBOVURfU1RBTEUsCgl9OwoJc3RydWN0IHZ4bGFuX3Jkc3Qg cmVtb3RlID0geyB9OwogICAgMjE2YjoJZTggZDAgZmIgZmYgZmYgICAgICAgCWNhbGxxICAxZDQw IDx2eGxhbl9mZGJfbm90aWZ5PgogICAgMjE3MDoJNDggOGIgODQgMjQgYTggMDAgMDAgCW1vdiAg ICAweGE4KCVyc3ApLCVyYXgKICAgIDIxNzc6CTAwIAoJdnhsYW5fZmRiX25vdGlmeSh2eGxhbiwg JmYsICZyZW1vdGUsIFJUTV9HRVRORUlHSCk7Cn0KCnN0YXRpYyB2b2lkIHZ4bGFuX2ZkYl9taXNz KHN0cnVjdCB2eGxhbl9kZXYgKnZ4bGFuLCBjb25zdCB1OCBldGhfYWRkcltFVEhfQUxFTl0pCnsK CXN0cnVjdCB2eGxhbl9mZGIgZiA9IHsKICAgIDIxNzg6CTY1IDQ4IDMzIDA0IDI1IDI4IDAwIAl4 b3IgICAgJWdzOjB4MjgsJXJheAogICAgMjE3ZjoJMDAgMDAgCgkJLnN0YXRlID0gTlVEX1NUQUxF LAoJfTsKCXN0cnVjdCB2eGxhbl9yZHN0IHJlbW90ZSA9IHsgfTsKCgltZW1jcHkoZi5ldGhfYWRk ciwgZXRoX2FkZHIsIEVUSF9BTEVOKTsKICAgIDIxODE6CTc1IDAyICAgICAgICAgICAgICAgIAlq bmUgICAgMjE4NSA8dnhsYW5fZmRiX21pc3MrMHg4NT4KCgl2eGxhbl9mZGJfbm90aWZ5KHZ4bGFu LCAmZiwgJnJlbW90ZSwgUlRNX0dFVE5FSUdIKTsKICAgIDIxODM6CWM5ICAgICAgICAgICAgICAg ICAgIAlsZWF2ZXEgCiAgICAyMTg0OgljMyAgICAgICAgICAgICAgICAgICAJcmV0cSAgIAogICAg MjE4NToJZTggMDAgMDAgMDAgMDAgICAgICAgCWNhbGxxICAyMThhIDx2eGxhbl9mZGJfbWlzcysw eDhhPgogICAgMjE4YToJNjYgMGYgMWYgNDQgMDAgMDAgICAgCW5vcHcgICAweDAoJXJheCwlcmF4 LDEpCgowMDAwMDAwMDAwMDAyMTkwIDx2eGxhbl9mZGJfZHVtcD46CglzdHJ1Y3QgdnhsYW5fZmRi IGYgPSB7CgkJLnN0YXRlID0gTlVEX1NUQUxFLAoJfTsKCXN0cnVjdCB2eGxhbl9yZHN0IHJlbW90 ZSA9IHsgfTsKCgltZW1jcHkoZi5ldGhfYWRkciwgZXRoX2FkZHIsIEVUSF9BTEVOKTsKICAgIDIx OTA6CWU4IDAwIDAwIDAwIDAwICAgICAgIAljYWxscSAgMjE5NSA8dnhsYW5fZmRiX2R1bXArMHg1 PgoKCXZ4bGFuX2ZkYl9ub3RpZnkodnhsYW4sICZmLCAmcmVtb3RlLCBSVE1fR0VUTkVJR0gpOwog ICAgMjE5NToJNTUgICAgICAgICAgICAgICAgICAgCXB1c2ggICAlcmJwCglzdHJ1Y3QgdnhsYW5f ZmRiIGYgPSB7CgkJLnN0YXRlID0gTlVEX1NUQUxFLAoJfTsKCXN0cnVjdCB2eGxhbl9yZHN0IHJl bW90ZSA9IHsgfTsKCgltZW1jcHkoZi5ldGhfYWRkciwgZXRoX2FkZHIsIEVUSF9BTEVOKTsKICAg IDIxOTY6CTQ4IDhkIDgyIDQwIDA4IDAwIDAwIAlsZWEgICAgMHg4NDAoJXJkeCksJXJheAoKCXZ4 bGFuX2ZkYl9ub3RpZnkodnhsYW4sICZmLCAmcmVtb3RlLCBSVE1fR0VUTkVJR0gpOwogICAgMjE5 ZDoJNDggODkgZTUgICAgICAgICAgICAgCW1vdiAgICAlcnNwLCVyYnAKfQogICAgMjFhMDoJNDEg NTcgICAgICAgICAgICAgICAgCXB1c2ggICAlcjE1CiAgICAyMWEyOgk0MSA1NiAgICAgICAgICAg ICAgICAJcHVzaCAgICVyMTQKICAgIDIxYTQ6CTQxIDU1ICAgICAgICAgICAgICAgIAlwdXNoICAg JXIxMwogICAgMjFhNjoJNDEgNTQgICAgICAgICAgICAgICAgCXB1c2ggICAlcjEyCiAgICAyMWE4 Ogk0OSA4OSBmNiAgICAgICAgICAgICAJbW92ICAgICVyc2ksJXIxNAogICAgMjFhYjoJNTMgICAg ICAgICAgICAgICAgICAgCXB1c2ggICAlcmJ4CiAgICAyMWFjOgk0NCA4OSBjMyAgICAgICAgICAg ICAJbW92ICAgICVyOGQsJWVieAogICAgMjFhZjoJNDggODMgZWMgMzAgICAgICAgICAgCXN1YiAg ICAkMHgzMCwlcnNwCiAgICAyMWIzOgk0OCA4OSA0NSBkMCAgICAgICAgICAJbW92ICAgICVyYXgs LTB4MzAoJXJicCkKICAgIDIxYjc6CTQ4IDhkIDgyIGEwIDA5IDAwIDAwIAlsZWEgICAgMHg5YTAo JXJkeCksJXJheAogICAgMjFiZToJNDggODkgN2QgYzggICAgICAgICAgCW1vdiAgICAlcmRpLC0w eDM4KCVyYnApCgovKiBEdW1wIGZvcndhcmRpbmcgdGFibGUgKi8Kc3RhdGljIGludCB2eGxhbl9m ZGJfZHVtcChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0bGlua19jYWxsYmFjayAqY2Is CgkJCSAgc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKCQkJICBzdHJ1Y3QgbmV0X2RldmljZSAqZmls dGVyX2RldiwgaW50IGlkeCkKewogICAgMjFjMjoJNDggODkgNDUgYzAgICAgICAgICAgCW1vdiAg ICAlcmF4LC0weDQwKCVyYnApCiAgICAyMWM2Ogk0OCA4ZCA4MiBhMCAxMSAwMCAwMCAJbGVhICAg IDB4MTFhMCglcmR4KSwlcmF4CiAgICAyMWNkOgk0OCA4OSA0NSBiOCAgICAgICAgICAJbW92ICAg ICVyYXgsLTB4NDgoJXJicCkKICAgIDIxZDE6CTQ4IDhiIDQ1IGMwICAgICAgICAgIAltb3YgICAg LTB4NDAoJXJicCksJXJheAogICAgMjFkNToJNGMgOGIgMjggICAgICAgICAgICAgCW1vdiAgICAo JXJheCksJXIxMwogICAgMjFkODoJNGQgODUgZWQgICAgICAgICAgICAgCXRlc3QgICAlcjEzLCVy MTMKICAgIDIxZGI6CTBmIDg0IDkxIDAwIDAwIDAwICAgIAlqZSAgICAgMjI3MiA8dnhsYW5fZmRi X2R1bXArMHhlMj4KICAgIDIxZTE6CTQ5IDhiIDQ1IDMwICAgICAgICAgIAltb3YgICAgMHgzMCgl cjEzKSwlcmF4CiAgICAyMWU1Ogk0ZCA4ZCA3ZCAzMCAgICAgICAgICAJbGVhICAgIDB4MzAoJXIx MyksJXIxNQogICAgMjFlOToJNDkgMzkgYzcgICAgICAgICAgICAgCWNtcCAgICAlcmF4LCVyMTUK ICAgIDIxZWM6CTRjIDhkIDYwIGQ4ICAgICAgICAgIAlsZWEgICAgLTB4MjgoJXJheCksJXIxMgog ICAgMjFmMDoJNzQgNzMgICAgICAgICAgICAgICAgCWplICAgICAyMjY1IDx2eGxhbl9mZGJfZHVt cCsweGQ1PgogICAgMjFmMjoJNGMgODkgZjAgICAgICAgICAgICAgCW1vdiAgICAlcjE0LCVyYXgK ICAgIDIxZjU6CTRkIDg5IGZlICAgICAgICAgICAgIAltb3YgICAgJXIxNSwlcjE0CiAgICAyMWY4 Ogk0OSA4OSBjNyAgICAgICAgICAgICAJbW92ICAgICVyYXgsJXIxNQogICAgMjFmYjoJZWIgMTEg ICAgICAgICAgICAgICAgCWptcCAgICAyMjBlIDx2eGxhbl9mZGJfZHVtcCsweDdlPgogICAgMjFm ZDoJNDkgOGIgNDQgMjQgMjggICAgICAgCW1vdiAgICAweDI4KCVyMTIpLCVyYXgKfSkKCnN0YXRp YyBfX2Fsd2F5c19pbmxpbmUKdm9pZCBfX3JlYWRfb25jZV9zaXplKGNvbnN0IHZvbGF0aWxlIHZv aWQgKnAsIHZvaWQgKnJlcywgaW50IHNpemUpCnsKCV9fUkVBRF9PTkNFX1NJWkU7CiAgICAyMjAy Ogk4MyBjMyAwMSAgICAgICAgICAgICAJYWRkICAgICQweDEsJWVieAogICAgMjIwNToJNDkgMzkg YzYgICAgICAgICAgICAgCWNtcCAgICAlcmF4LCVyMTQKCglmb3IgKGggPSAwOyBoIDwgRkRCX0hB U0hfU0laRTsgKytoKSB7CgkJc3RydWN0IHZ4bGFuX2ZkYiAqZjsKCQlpbnQgZXJyOwoKCQlobGlz dF9mb3JfZWFjaF9lbnRyeV9yY3UoZiwgJnZ4bGFuLT5mZGJfaGVhZFtoXSwgaGxpc3QpIHsKICAg IDIyMDg6CTRjIDhkIDYwIGQ4ICAgICAgICAgIAlsZWEgICAgLTB4MjgoJXJheCksJXIxMgogICAg MjIwYzoJNzQgNTQgICAgICAgICAgICAgICAgCWplICAgICAyMjYyIDx2eGxhbl9mZGJfZHVtcCsw eGQyPgogICAgMjIwZToJNDggNjMgYzMgICAgICAgICAgICAgCW1vdnNscSAlZWJ4LCVyYXgKICAg IDIyMTE6CTQ5IDNiIDQ3IDQ4ICAgICAgICAgIAljbXAgICAgMHg0OCglcjE1KSwlcmF4CgkJCXN0 cnVjdCB2eGxhbl9yZHN0ICpyZDsKCgkJCWxpc3RfZm9yX2VhY2hfZW50cnlfcmN1KHJkLCAmZi0+ cmVtb3RlcywgbGlzdCkgewogICAgMjIxNToJN2MgZTYgICAgICAgICAgICAgICAgCWpsICAgICAy MWZkIDx2eGxhbl9mZGJfZHVtcCsweDZkPgogICAgMjIxNzoJNDkgOGIgNDcgMDggICAgICAgICAg CW1vdiAgICAweDgoJXIxNSksJXJheAogICAgMjIxYjoJNDggOGIgNzUgZDAgICAgICAgICAgCW1v diAgICAtMHgzMCglcmJwKSwlcnNpCiAgICAyMjFmOgk0MSBiOSAxYyAwMCAwMCAwMCAgICAJbW92 ICAgICQweDFjLCVyOWQKICAgIDIyMjU6CTQ4IDhiIDdkIGM4ICAgICAgICAgIAltb3YgICAgLTB4 MzgoJXJicCksJXJkaQogICAgMjIyOToJNGMgODkgZWEgICAgICAgICAgICAgCW1vdiAgICAlcjEz LCVyZHgKICAgIDIyMmM6CTQ0IDhiIDQwIDA4ICAgICAgICAgIAltb3YgICAgMHg4KCVyYXgpLCVy OGQKICAgIDIyMzA6CTQ5IDhiIDA3ICAgICAgICAgICAgIAltb3YgICAgKCVyMTUpLCVyYXgKCQkJ CWlmIChlcnIgPCAwKSB7CgkJCQkJY2ItPmFyZ3NbMV0gPSBlcnI7CgkJCQkJZ290byBvdXQ7CgkJ CQl9CnNraXA6CgkJCQkrK2lkeDsKICAgIDIyMzM6CThiIDQ4IDM0ICAgICAgICAgICAgIAltb3Yg ICAgMHgzNCglcmF4KSwlZWN4CgkJaW50IGVycjsKCgkJaGxpc3RfZm9yX2VhY2hfZW50cnlfcmN1 KGYsICZ2eGxhbi0+ZmRiX2hlYWRbaF0sIGhsaXN0KSB7CgkJCXN0cnVjdCB2eGxhbl9yZHN0ICpy ZDsKCgkJCWxpc3RfZm9yX2VhY2hfZW50cnlfcmN1KHJkLCAmZi0+cmVtb3RlcywgbGlzdCkgewog ICAgMjIzNjoJNGMgODkgNjQgMjQgMDggICAgICAgCW1vdiAgICAlcjEyLDB4OCglcnNwKQogICAg MjIzYjoJYzcgMDQgMjQgMDIgMDAgMDAgMDAgCW1vdmwgICAkMHgyLCglcnNwKQoJCQkJaWYgKGlk eCA8IGNiLT5hcmdzWzBdKQogICAgMjI0MjoJZTggYTkgZjcgZmYgZmYgICAgICAgCWNhbGxxICAx OWYwIDx2eGxhbl9mZGJfaW5mbz4KCQkJCQlnb3RvIHNraXA7CgoJCQkJZXJyID0gdnhsYW5fZmRi X2luZm8oc2tiLCB2eGxhbiwgZiwKICAgIDIyNDc6CTg1IGMwICAgICAgICAgICAgICAgIAl0ZXN0 ICAgJWVheCwlZWF4CiAgICAyMjQ5Ogk3OSBiMiAgICAgICAgICAgICAgICAJam5zICAgIDIxZmQg PHZ4bGFuX2ZkYl9kdW1wKzB4NmQ+CiAgICAyMjRiOgk0OCA5OCAgICAgICAgICAgICAgICAJY2x0 cSAgIAogICAgMjI0ZDoJNDkgODkgNDcgNTAgICAgICAgICAgCW1vdiAgICAlcmF4LDB4NTAoJXIx NSkKICAgIDIyNTE6CTQ4IDgzIGM0IDMwICAgICAgICAgIAlhZGQgICAgJDB4MzAsJXJzcAogICAg MjI1NToJODkgZDggICAgICAgICAgICAgICAgCW1vdiAgICAlZWJ4LCVlYXgKICAgIDIyNTc6CTVi ICAgICAgICAgICAgICAgICAgIAlwb3AgICAgJXJieAogICAgMjI1ODoJNDEgNWMgICAgICAgICAg ICAgICAgCXBvcCAgICAlcjEyCiAgICAyMjVhOgk0MSA1ZCAgICAgICAgICAgICAgICAJcG9wICAg ICVyMTMKICAgIDIyNWM6CTQxIDVlICAgICAgICAgICAgICAgIAlwb3AgICAgJXIxNAogICAgMjI1 ZToJNDEgNWYgICAgICAgICAgICAgICAgCXBvcCAgICAlcjE1CiAgICAyMjYwOgk1ZCAgICAgICAg ICAgICAgICAgICAJcG9wICAgICVyYnAKICAgIDIyNjE6CWMzICAgICAgICAgICAgICAgICAgIAly ZXRxICAgCiAgICAyMjYyOgk0ZCA4OSBmZSAgICAgICAgICAgICAJbW92ICAgICVyMTUsJXIxNAog ICAgMjI2NToJNGQgOGIgNmQgMDAgICAgICAgICAgCW1vdiAgICAweDAoJXIxMyksJXIxMwogICAg MjI2OToJNGQgODUgZWQgICAgICAgICAgICAgCXRlc3QgICAlcjEzLCVyMTMKICAgIDIyNmM6CTBm IDg1IDZmIGZmIGZmIGZmICAgIAlqbmUgICAgMjFlMSA8dnhsYW5fZmRiX2R1bXArMHg1MT4KICAg IDIyNzI6CTQ4IDgzIDQ1IGMwIDA4ICAgICAgIAlhZGRxICAgJDB4OCwtMHg0MCglcmJwKQoJCQkJ CQkgICAgIE5FVExJTktfQ0IoY2ItPnNrYikucG9ydGlkLAoJCQkJCQkgICAgIGNiLT5ubGgtPm5s bXNnX3NlcSwKCQkJCQkJICAgICBSVE1fTkVXTkVJR0gsCgkJCQkJCSAgICAgTkxNX0ZfTVVMVEks IHJkKTsKCQkJCWlmIChlcnIgPCAwKSB7CiAgICAyMjc3Ogk0OCA4YiA0NSBjMCAgICAgICAgICAJ bW92ICAgIC0weDQwKCVyYnApLCVyYXgKCQkJCQljYi0+YXJnc1sxXSA9IGVycjsKICAgIDIyN2I6 CTQ4IDM5IDQ1IGI4ICAgICAgICAgIAljbXAgICAgJXJheCwtMHg0OCglcmJwKQogICAgMjI3ZjoJ MGYgODUgNGMgZmYgZmYgZmYgICAgCWpuZSAgICAyMWQxIDx2eGxhbl9mZGJfZHVtcCsweDQxPgoJ CQl9CgkJfQoJfQpvdXQ6CglyZXR1cm4gaWR4Owp9CiAgICAyMjg1OgllYiBjYSAgICAgICAgICAg ICAgICAJam1wICAgIDIyNTEgPHZ4bGFuX2ZkYl9kdW1wKzB4YzE+CiAgICAyMjg3Ogk2NiAwZiAx ZiA4NCAwMCAwMCAwMCAJbm9wdyAgIDB4MCglcmF4LCVyYXgsMSkKICAgIDIyOGU6CTAwIDAwIAoK MDAwMDAwMDAwMDAwMjI5MCA8dnhsYW5fZmRiX2ZpbmRfcmRzdD46CiAgICAyMjkwOgllOCAwMCAw MCAwMCAwMCAgICAgICAJY2FsbHEgIDIyOTUgPHZ4bGFuX2ZkYl9maW5kX3Jkc3QrMHg1PgogICAg MjI5NToJNTUgICAgICAgICAgICAgICAgICAgCXB1c2ggICAlcmJwCiAgICAyMjk2Ogk0YyA4YiA0 ZiAzMCAgICAgICAgICAJbW92ICAgIDB4MzAoJXJkaSksJXI5CgoJZm9yIChoID0gMDsgaCA8IEZE Ql9IQVNIX1NJWkU7ICsraCkgewoJCXN0cnVjdCB2eGxhbl9mZGIgKmY7CgkJaW50IGVycjsKCgkJ aGxpc3RfZm9yX2VhY2hfZW50cnlfcmN1KGYsICZ2eGxhbi0+ZmRiX2hlYWRbaF0sIGhsaXN0KSB7 CiAgICAyMjlhOgk0OCA4MyBjNyAzMCAgICAgICAgICAJYWRkICAgICQweDMwLCVyZGkKICAgIDIy OWU6CTQ4IDg5IGU1ICAgICAgICAgICAgIAltb3YgICAgJXJzcCwlcmJwCiAgICAyMmExOgk0YyAz OSBjZiAgICAgICAgICAgICAJY21wICAgICVyOSwlcmRpCiAgICAyMmE0Ogk3NCA2MSAgICAgICAg ICAgICAgICAJamUgICAgIDIzMDcgPHZ4bGFuX2ZkYl9maW5kX3Jkc3QrMHg3Nz4KICAgIDIyYTY6 CTQ5IDhkIDQxIGQ4ICAgICAgICAgIAlsZWEgICAgLTB4MjgoJXI5KSwlcmF4CiAgICAyMmFhOgk0 NCAwZiBiNyAxNiAgICAgICAgICAJbW92endsICglcnNpKSwlcjEwZAoJCQkgIHN0cnVjdCBuZXRf ZGV2aWNlICpmaWx0ZXJfZGV2LCBpbnQgaWR4KQp7CglzdHJ1Y3QgdnhsYW5fZGV2ICp2eGxhbiA9 IG5ldGRldl9wcml2KGRldik7Cgl1bnNpZ25lZCBpbnQgaDsKCglmb3IgKGggPSAwOyBoIDwgRkRC X0hBU0hfU0laRTsgKytoKSB7CiAgICAyMmFlOgllYiAwZCAgICAgICAgICAgICAgICAJam1wICAg IDIyYmQgPHZ4bGFuX2ZkYl9maW5kX3Jkc3QrMHgyZD4KICAgIDIyYjA6CTRjIDhiIDQ4IDI4ICAg ICAgICAgIAltb3YgICAgMHgyOCglcmF4KSwlcjkKICAgIDIyYjQ6CTRjIDM5IGNmICAgICAgICAg ICAgIAljbXAgICAgJXI5LCVyZGkKICAgIDIyYjc6CTQ5IDhkIDQxIGQ4ICAgICAgICAgIAlsZWEg ICAgLTB4MjgoJXI5KSwlcmF4CiAgICAyMmJiOgk3NCA0YSAgICAgICAgICAgICAgICAJamUgICAg IDIzMDcgPHZ4bGFuX2ZkYl9maW5kX3Jkc3QrMHg3Nz4KICAgIDIyYmQ6CTY2IDQ0IDNiIDEwICAg ICAgICAgIAljbXAgICAgKCVyYXgpLCVyMTB3CgovKiBjYWxsZXIgc2hvdWxkIGhvbGQgdnhsYW4t Pmhhc2hfbG9jayAqLwpzdGF0aWMgc3RydWN0IHZ4bGFuX3Jkc3QgKnZ4bGFuX2ZkYl9maW5kX3Jk c3Qoc3RydWN0IHZ4bGFuX2ZkYiAqZiwKCQkJCQkgICAgICB1bmlvbiB2eGxhbl9hZGRyICppcCwg X19iZTE2IHBvcnQsCgkJCQkJICAgICAgX19iZTMyIHZuaSwgX191MzIgaWZpbmRleCkKewogICAg MjJjMToJNzUgZWQgICAgICAgICAgICAgICAgCWpuZSAgICAyMmIwIDx2eGxhbl9mZGJfZmluZF9y ZHN0KzB4MjA+CiAgICAyMmMzOgk2NiA0MSA4MyBmYSAwYSAgICAgICAJY21wICAgICQweGEsJXIx MHcKCXN0cnVjdCB2eGxhbl9yZHN0ICpyZDsKCglsaXN0X2Zvcl9lYWNoX2VudHJ5KHJkLCAmZi0+ cmVtb3RlcywgbGlzdCkgewogICAgMjJjODoJNzQgMjQgICAgICAgICAgICAgICAgCWplICAgICAy MmVlIDx2eGxhbl9mZGJfZmluZF9yZHN0KzB4NWU+CiAgICAyMmNhOgk0NCA4YiA1ZSAwNCAgICAg ICAgICAJbW92ICAgIDB4NCglcnNpKSwlcjExZAoKLyogY2FsbGVyIHNob3VsZCBob2xkIHZ4bGFu LT5oYXNoX2xvY2sgKi8Kc3RhdGljIHN0cnVjdCB2eGxhbl9yZHN0ICp2eGxhbl9mZGJfZmluZF9y ZHN0KHN0cnVjdCB2eGxhbl9mZGIgKmYsCgkJCQkJICAgICAgdW5pb24gdnhsYW5fYWRkciAqaXAs IF9fYmUxNiBwb3J0LAoJCQkJCSAgICAgIF9fYmUzMiB2bmksIF9fdTMyIGlmaW5kZXgpCnsKICAg IDIyY2U6CTQ0IDM5IDU4IDA0ICAgICAgICAgIAljbXAgICAgJXIxMWQsMHg0KCVyYXgpCglzdHJ1 Y3QgdnhsYW5fcmRzdCAqcmQ7CgoJbGlzdF9mb3JfZWFjaF9lbnRyeShyZCwgJmYtPnJlbW90ZXMs IGxpc3QpIHsKICAgIDIyZDI6CTQxIDBmIDk0IGMxICAgICAgICAgIAlzZXRlICAgJXI5YgogICAg MjJkNjoJNDUgODQgYzkgICAgICAgICAgICAgCXRlc3QgICAlcjliLCVyOWIKICAgIDIyZDk6CTc0 IGQ1ICAgICAgICAgICAgICAgIAlqZSAgICAgMjJiMCA8dnhsYW5fZmRiX2ZpbmRfcmRzdCsweDIw PgogICAgMjJkYjoJNjYgMzkgNTAgMWMgICAgICAgICAgCWNtcCAgICAlZHgsMHgxYyglcmF4KQog ICAgMjJkZjoJNzUgY2YgICAgICAgICAgICAgICAgCWpuZSAgICAyMmIwIDx2eGxhbl9mZGJfZmlu ZF9yZHN0KzB4MjA+CiAgICAyMmUxOgkzOSA0OCAyMCAgICAgICAgICAgICAJY21wICAgICVlY3gs MHgyMCglcmF4KQogICAgMjJlNDoJNzUgY2EgICAgICAgICAgICAgICAgCWpuZSAgICAyMmIwIDx2 eGxhbl9mZGJfZmluZF9yZHN0KzB4MjA+CiAgICAyMmU2Ogk0NCAzOSA0MCAyNCAgICAgICAgICAJ Y21wICAgICVyOGQsMHgyNCglcmF4KQogICAgMjJlYToJNzUgYzQgICAgICAgICAgICAgICAgCWpu ZSAgICAyMmIwIDx2eGxhbl9mZGJfZmluZF9yZHN0KzB4MjA+CiAgICAyMmVjOgk1ZCAgICAgICAg ICAgICAgICAgICAJcG9wICAgICVyYnAKCiNpZiBJU19FTkFCTEVEKENPTkZJR19JUFY2KQpzdGF0 aWMgaW5saW5lCmJvb2wgdnhsYW5fYWRkcl9lcXVhbChjb25zdCB1bmlvbiB2eGxhbl9hZGRyICph LCBjb25zdCB1bmlvbiB2eGxhbl9hZGRyICpiKQp7CglpZiAoYS0+c2Euc2FfZmFtaWx5ICE9IGIt PnNhLnNhX2ZhbWlseSkKICAgIDIyZWQ6CWMzICAgICAgICAgICAgICAgICAgIAlyZXRxICAgCiAg ICAyMmVlOgk0YyA4YiA1OCAwOCAgICAgICAgICAJbW92ICAgIDB4OCglcmF4KSwlcjExCiAgICAy MmYyOgk0YyA4YiA0OCAxMCAgICAgICAgICAJbW92ICAgIDB4MTAoJXJheCksJXI5CgkJcmV0dXJu IGZhbHNlOwoJaWYgKGEtPnNhLnNhX2ZhbWlseSA9PSBBRl9JTkVUNikKICAgIDIyZjY6CTRjIDMz IDVlIDA4ICAgICAgICAgIAl4b3IgICAgMHg4KCVyc2kpLCVyMTEKCQlyZXR1cm4gaXB2Nl9hZGRy X2VxdWFsKCZhLT5zaW42LnNpbjZfYWRkciwgJmItPnNpbjYuc2luNl9hZGRyKTsKCWVsc2UKCQly ZXR1cm4gYS0+c2luLnNpbl9hZGRyLnNfYWRkciA9PSBiLT5zaW4uc2luX2FkZHIuc19hZGRyOwog ICAgMjJmYToJNGMgMzMgNGUgMTAgICAgICAgICAgCXhvciAgICAweDEwKCVyc2kpLCVyOQogICAg MjJmZToJNGQgMDkgY2IgICAgICAgICAgICAgCW9yICAgICAlcjksJXIxMQogICAgMjMwMToJNDEg MGYgOTQgYzEgICAgICAgICAgCXNldGUgICAlcjliCiAgICAyMzA1OgllYiBjZiAgICAgICAgICAg ICAgICAJam1wICAgIDIyZDYgPHZ4bGFuX2ZkYl9maW5kX3Jkc3QrMHg0Nj4KCQkJCQkgICAgICBf X2JlMzIgdm5pLCBfX3UzMiBpZmluZGV4KQp7CglzdHJ1Y3QgdnhsYW5fcmRzdCAqcmQ7CgoJbGlz dF9mb3JfZWFjaF9lbnRyeShyZCwgJmYtPnJlbW90ZXMsIGxpc3QpIHsKCQlpZiAodnhsYW5fYWRk cl9lcXVhbCgmcmQtPnJlbW90ZV9pcCwgaXApICYmCiAgICAyMzA3OgkzMSBjMCAgICAgICAgICAg ICAgICAJeG9yICAgICVlYXgsJWVheAogICAgMjMwOToJNWQgICAgICAgICAgICAgICAgICAgCXBv cCAgICAlcmJwCiAgICAyMzBhOgljMyAgICAgICAgICAgICAgICAgICAJcmV0cSAgIAogICAgMjMw YjoJMGYgMWYgNDQgMDAgMDAgICAgICAgCW5vcGwgICAweDAoJXJheCwlcmF4LDEpCgowMDAwMDAw MDAwMDAyMzEwIDx2eGxhbl9mZGJfZGVsZXRlPjoKICAgIDIzMTA6CWU4IDAwIDAwIDAwIDAwICAg ICAgIAljYWxscSAgMjMxNSA8dnhsYW5fZmRiX2RlbGV0ZSsweDU+CgkJICAgIHJkLT5yZW1vdGVf cG9ydCA9PSBwb3J0ICYmCiAgICAyMzE1Ogk1NSAgICAgICAgICAgICAgICAgICAJcHVzaCAgICVy YnAKCQkgICAgcmQtPnJlbW90ZV92bmkgPT0gdm5pICYmCiAgICAyMzE2Ogk0OCA4OSBmNyAgICAg ICAgICAgICAJbW92ICAgICVyc2ksJXJkaQogICAgMjMxOToJNDggODkgZTUgICAgICAgICAgICAg CW1vdiAgICAlcnNwLCVyYnAKCQkgICAgcmQtPnJlbW90ZV9pZmluZGV4ID09IGlmaW5kZXgpCgkJ CXJldHVybiByZDsKCX0KCglyZXR1cm4gTlVMTDsKfQogICAgMjMxYzoJNDEgNTcgICAgICAgICAg ICAgICAgCXB1c2ggICAlcjE1CnsKI2lmIGRlZmluZWQoQ09ORklHX0hBVkVfRUZGSUNJRU5UX1VO QUxJR05FRF9BQ0NFU1MpICYmIEJJVFNfUEVSX0xPTkcgPT0gNjQKCWNvbnN0IHVuc2lnbmVkIGxv bmcgKnVsMSA9IChjb25zdCB1bnNpZ25lZCBsb25nICopYTE7Cgljb25zdCB1bnNpZ25lZCBsb25n ICp1bDIgPSAoY29uc3QgdW5zaWduZWQgbG9uZyAqKWEyOwoKCXJldHVybiAoKHVsMVswXSBeIHVs MlswXSkgfCAodWwxWzFdIF4gdWwyWzFdKSkgPT0gMFVMOwogICAgMjMxZToJNDEgNTYgICAgICAg ICAgICAgICAgCXB1c2ggICAlcjE0CiAgICAyMzIwOgk0MSA1NSAgICAgICAgICAgICAgICAJcHVz aCAgICVyMTMKICAgIDIzMjI6CTQxIDU0ICAgICAgICAgICAgICAgIAlwdXNoICAgJXIxMgogICAg MjMyNDoJNGMgOGQgYjIgNDAgMDggMDAgMDAgCWxlYSAgICAweDg0MCglcmR4KSwlcjE0CiAgICAy MzJiOgk1MyAgICAgICAgICAgICAgICAgICAJcHVzaCAgICVyYngKICAgIDIzMmM6CTQ5IDg5IGQ0 ICAgICAgICAgICAgIAltb3YgICAgJXJkeCwlcjEyCiAgICAyMzJmOgk0OSA4OSBjZiAgICAgICAg ICAgICAJbW92ICAgICVyY3gsJXIxNQogICAgMjMzMjoJNGMgODkgZjYgICAgICAgICAgICAgCW1v diAgICAlcjE0LCVyc2kKICAgIDIzMzU6CTQ4IDgzIGU0IGYwICAgICAgICAgIAlhbmQgICAgJDB4 ZmZmZmZmZmZmZmZmZmZmMCwlcnNwCiAgICAyMzM5Ogk0OCA4MyBlYyA0MCAgICAgICAgICAJc3Vi ICAgICQweDQwLCVyc3AKICAgIDIzM2Q6CTRjIDhkIDRjIDI0IDBjICAgICAgIAlsZWEgICAgMHhj KCVyc3ApLCVyOQoKLyogRGVsZXRlIGVudHJ5ICh2aWEgbmV0bGluaykgKi8Kc3RhdGljIGludCB2 eGxhbl9mZGJfZGVsZXRlKHN0cnVjdCBuZG1zZyAqbmRtLCBzdHJ1Y3QgbmxhdHRyICp0YltdLAoJ CQkgICAgc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKCQkJICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIg KmFkZHIsIHUxNiB2aWQpCnsKICAgIDIzNDI6CTRjIDhkIDQ0IDI0IDA4ICAgICAgIAlsZWEgICAg MHg4KCVyc3ApLCVyOAogICAgMjM0NzoJNDggOGQgNGMgMjQgMDYgICAgICAgCWxlYSAgICAweDYo JXJzcCksJXJjeAogICAgMjM0YzoJNDggOGQgNTQgMjQgMTAgICAgICAgCWxlYSAgICAweDEwKCVy c3ApLCVyZHgKICAgIDIzNTE6CTY1IDQ4IDhiIDA0IDI1IDI4IDAwIAltb3YgICAgJWdzOjB4Mjgs JXJheAogICAgMjM1ODoJMDAgMDAgCiAgICAyMzVhOgk0OCA4OSA0NCAyNCAzOCAgICAgICAJbW92 ICAgICVyYXgsMHgzOCglcnNwKQogICAgMjM1ZjoJMzEgYzAgICAgICAgICAgICAgICAgCXhvciAg ICAlZWF4LCVlYXgKICAgIDIzNjE6CWU4IGJhIGUyIGZmIGZmICAgICAgIAljYWxscSAgNjIwIDx2 eGxhbl9mZGJfcGFyc2U+CiAgICAyMzY2Ogk4NSBjMCAgICAgICAgICAgICAgICAJdGVzdCAgICVl YXgsJWVheAogICAgMjM2ODoJODkgYzMgICAgICAgICAgICAgICAgCW1vdiAgICAlZWF4LCVlYngK ICAgIDIzNmE6CTc0IDI1ICAgICAgICAgICAgICAgIAlqZSAgICAgMjM5MSA8dnhsYW5fZmRiX2Rl bGV0ZSsweDgxPgogICAgMjM2YzoJODkgZDggICAgICAgICAgICAgICAgCW1vdiAgICAlZWJ4LCVl YXgKCV9fYmUxNiBwb3J0OwoJX19iZTMyIHZuaTsKCXUzMiBpZmluZGV4OwoJaW50IGVycjsKCgll cnIgPSB2eGxhbl9mZGJfcGFyc2UodGIsIHZ4bGFuLCAmaXAsICZwb3J0LCAmdm5pLCAmaWZpbmRl eCk7CiAgICAyMzZlOgk0OCA4YiA1YyAyNCAzOCAgICAgICAJbW92ICAgIDB4MzgoJXJzcCksJXJi eAogICAgMjM3MzoJNjUgNDggMzMgMWMgMjUgMjggMDAgCXhvciAgICAlZ3M6MHgyOCwlcmJ4CiAg ICAyMzdhOgkwMCAwMCAKICAgIDIzN2M6CTBmIDg1IDEwIDAxIDAwIDAwICAgIAlqbmUgICAgMjQ5 MiA8dnhsYW5fZmRiX2RlbGV0ZSsweDE4Mj4KCi8qIERlbGV0ZSBlbnRyeSAodmlhIG5ldGxpbmsp ICovCnN0YXRpYyBpbnQgdnhsYW5fZmRiX2RlbGV0ZShzdHJ1Y3QgbmRtc2cgKm5kbSwgc3RydWN0 IG5sYXR0ciAqdGJbXSwKCQkJICAgIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCgkJCSAgICBjb25z dCB1bnNpZ25lZCBjaGFyICphZGRyLCB1MTYgdmlkKQp7CiAgICAyMzgyOgk0OCA4ZCA2NSBkOCAg ICAgICAgICAJbGVhICAgIC0weDI4KCVyYnApLCVyc3AKICAgIDIzODY6CTViICAgICAgICAgICAg ICAgICAgIAlwb3AgICAgJXJieAogICAgMjM4NzoJNDEgNWMgICAgICAgICAgICAgICAgCXBvcCAg ICAlcjEyCiAgICAyMzg5Ogk0MSA1ZCAgICAgICAgICAgICAgICAJcG9wICAgICVyMTMKICAgIDIz OGI6CTQxIDVlICAgICAgICAgICAgICAgIAlwb3AgICAgJXIxNAogICAgMjM4ZDoJNDEgNWYgICAg ICAgICAgICAgICAgCXBvcCAgICAlcjE1CiAgICAyMzhmOgk1ZCAgICAgICAgICAgICAgICAgICAJ cG9wICAgICVyYnAKICAgIDIzOTA6CWMzICAgICAgICAgICAgICAgICAgIAlyZXRxICAgCglfX2Jl MTYgcG9ydDsKCV9fYmUzMiB2bmk7Cgl1MzIgaWZpbmRleDsKCWludCBlcnI7CgoJZXJyID0gdnhs YW5fZmRiX3BhcnNlKHRiLCB2eGxhbiwgJmlwLCAmcG9ydCwgJnZuaSwgJmlmaW5kZXgpOwogICAg MjM5MToJNGQgOGQgYWMgMjQgMjggMDkgMDAgCWxlYSAgICAweDkyOCglcjEyKSwlcjEzCiAgICAy Mzk4OgkwMCAKICAgIDIzOTk6CTRjIDg5IGVmICAgICAgICAgICAgIAltb3YgICAgJXIxMywlcmRp CgpvdXQ6CglzcGluX3VubG9ja19iaCgmdnhsYW4tPmhhc2hfbG9jayk7CgoJcmV0dXJuIGVycjsK fQogICAgMjM5YzoJZTggMDAgMDAgMDAgMDAgICAgICAgCWNhbGxxICAyM2ExIDx2eGxhbl9mZGJf ZGVsZXRlKzB4OTE+CiAgICAyM2ExOgk0YyA4OSBmZSAgICAgICAgICAgICAJbW92ICAgICVyMTUs JXJzaQogICAgMjNhNDoJNGMgODkgZjcgICAgICAgICAgICAgCW1vdiAgICAlcjE0LCVyZGkKICAg IDIzYTc6CWU4IDU0IGRjIGZmIGZmICAgICAgIAljYWxscSAgMCA8X192eGxhbl9maW5kX21hYz4K ICAgIDIzYWM6CTQ4IDg1IGMwICAgICAgICAgICAgIAl0ZXN0ICAgJXJheCwlcmF4CiAgICAyM2Fm Ogk0OSA4OSBjNCAgICAgICAgICAgICAJbW92ICAgICVyYXgsJXIxMgogICAgMjNiMjoJMGYgODQg ZDAgMDAgMDAgMDAgICAgCWplICAgICAyNDg4IDx2eGxhbl9mZGJfZGVsZXRlKzB4MTc4PgogICAg MjNiODoJNjYgODMgN2MgMjQgMTAgMGEgICAgCWNtcHcgICAkMHhhLDB4MTAoJXJzcCkKICAgIDIz YmU6CTQ4IDhiIDA1IDAwIDAwIDAwIDAwIAltb3YgICAgMHgwKCVyaXApLCVyYXggICAgICAgICMg MjNjNSA8dnhsYW5fZmRiX2RlbGV0ZSsweGI1PgoJcmF3X3NwaW5fbG9jaygmbG9jay0+cmxvY2sp Owp9CgpzdGF0aWMgX19hbHdheXNfaW5saW5lIHZvaWQgc3Bpbl9sb2NrX2JoKHNwaW5sb2NrX3Qg KmxvY2spCnsKCXJhd19zcGluX2xvY2tfYmgoJmxvY2stPnJsb2NrKTsKICAgIDIzYzU6CTQ5IDg5 IDQ0IDI0IDI4ICAgICAgIAltb3YgICAgJXJheCwweDI4KCVyMTIpCiAgICAyM2NhOgkwZiA4NCBh NiAwMCAwMCAwMCAgICAJamUgICAgIDI0NzYgPHZ4bGFuX2ZkYl9kZWxldGUrMHgxNjY+CiAgICAy M2QwOgk4YiA0NCAyNCAxNCAgICAgICAgICAJbW92ICAgIDB4MTQoJXJzcCksJWVheApzdGF0aWMg c3RydWN0IHZ4bGFuX2ZkYiAqdnhsYW5fZmluZF9tYWMoc3RydWN0IHZ4bGFuX2RldiAqdnhsYW4s CgkJCQkJY29uc3QgdTggKm1hYykKewoJc3RydWN0IHZ4bGFuX2ZkYiAqZjsKCglmID0gX192eGxh bl9maW5kX21hYyh2eGxhbiwgbWFjKTsKICAgIDIzZDQ6CTg1IGMwICAgICAgICAgICAgICAgIAl0 ZXN0ICAgJWVheCwlZWF4CiAgICAyM2Q2OgkwZiA5NCBjMCAgICAgICAgICAgICAJc2V0ZSAgICVh bAogICAgMjNkOToJODQgYzAgICAgICAgICAgICAgICAgCXRlc3QgICAlYWwsJWFsCiAgICAyM2Ri Ogk3NCAxOCAgICAgICAgICAgICAgICAJamUgICAgIDIzZjUgPHZ4bGFuX2ZkYl9kZWxldGUrMHhl NT4KCWlmIChmKQogICAgMjNkZDoJNGMgODkgZTYgICAgICAgICAgICAgCW1vdiAgICAlcjEyLCVy c2kKc3RhdGljIHN0cnVjdCB2eGxhbl9mZGIgKnZ4bGFuX2ZpbmRfbWFjKHN0cnVjdCB2eGxhbl9k ZXYgKnZ4bGFuLAoJCQkJCWNvbnN0IHU4ICptYWMpCnsKCXN0cnVjdCB2eGxhbl9mZGIgKmY7CgoJ ZiA9IF9fdnhsYW5fZmluZF9tYWModnhsYW4sIG1hYyk7CiAgICAyM2UwOgk0YyA4OSBmNyAgICAg ICAgICAgICAJbW92ICAgICVyMTQsJXJkaQoJaWYgKGYpCiAgICAyM2UzOgllOCA0OCBmYSBmZiBm ZiAgICAgICAJY2FsbHEgIDFlMzAgPHZ4bGFuX2ZkYl9kZXN0cm95PgoJCXJldHVybiBhLT5zaW4u c2luX2FkZHIuc19hZGRyID09IGItPnNpbi5zaW5fYWRkci5zX2FkZHI7Cn0KCnN0YXRpYyBpbmxp bmUgYm9vbCB2eGxhbl9hZGRyX2FueShjb25zdCB1bmlvbiB2eGxhbl9hZGRyICppcGEpCnsKCWlm IChpcGEtPnNhLnNhX2ZhbWlseSA9PSBBRl9JTkVUNikKICAgIDIzZTg6CTRjIDg5IGVmICAgICAg ICAgICAgIAltb3YgICAgJXIxMywlcmRpCiAgICAyM2ViOgllOCAwMCAwMCAwMCAwMCAgICAgICAJ Y2FsbHEgIDIzZjAgPHZ4bGFuX2ZkYl9kZWxldGUrMHhlMD4KewoJc3RydWN0IHZ4bGFuX2ZkYiAq ZjsKCglmID0gX192eGxhbl9maW5kX21hYyh2eGxhbiwgbWFjKTsKCWlmIChmKQoJCWYtPnVzZWQg PSBqaWZmaWVzOwogICAgMjNmMDoJZTkgNzcgZmYgZmYgZmYgICAgICAgCWptcHEgICAyMzZjIDx2 eGxhbl9mZGJfZGVsZXRlKzB4NWM+CiAgICAyM2Y1OgkwZiBiNyA1NCAyNCAwNiAgICAgICAJbW92 endsIDB4NiglcnNwKSwlZWR4CgkJcmV0dXJuIGEtPnNpbi5zaW5fYWRkci5zX2FkZHIgPT0gYi0+ c2luLnNpbl9hZGRyLnNfYWRkcjsKfQoKc3RhdGljIGlubGluZSBib29sIHZ4bGFuX2FkZHJfYW55 KGNvbnN0IHVuaW9uIHZ4bGFuX2FkZHIgKmlwYSkKewoJaWYgKGlwYS0+c2Euc2FfZmFtaWx5ID09 IEFGX0lORVQ2KQogICAgMjNmYToJNDQgOGIgNDQgMjQgMGMgICAgICAgCW1vdiAgICAweGMoJXJz cCksJXI4ZAogICAgMjNmZjoJNDggOGQgNzQgMjQgMTAgICAgICAgCWxlYSAgICAweDEwKCVyc3Ap LCVyc2kKCQlyZXR1cm4gaXB2Nl9hZGRyX2FueSgmaXBhLT5zaW42LnNpbjZfYWRkcik7CgllbHNl CgkJcmV0dXJuIGlwYS0+c2luLnNpbl9hZGRyLnNfYWRkciA9PSBodG9ubChJTkFERFJfQU5ZKTsK ICAgIDI0MDQ6CThiIDRjIDI0IDA4ICAgICAgICAgIAltb3YgICAgMHg4KCVyc3ApLCVlY3gKICAg IDI0MDg6CTRjIDg5IGU3ICAgICAgICAgICAgIAltb3YgICAgJXIxMiwlcmRpCglzcGluX2xvY2tf YmgoJnZ4bGFuLT5oYXNoX2xvY2spOwoJZiA9IHZ4bGFuX2ZpbmRfbWFjKHZ4bGFuLCBhZGRyKTsK CWlmICghZikKCQlnb3RvIG91dDsKCglpZiAoIXZ4bGFuX2FkZHJfYW55KCZpcCkpIHsKICAgIDI0 MGI6CWU4IDgwIGZlIGZmIGZmICAgICAgIAljYWxscSAgMjI5MCA8dnhsYW5fZmRiX2ZpbmRfcmRz dD4KCQl2eGxhbl9mZGJfbm90aWZ5KHZ4bGFuLCBmLCByZCwgUlRNX0RFTE5FSUdIKTsKCQlrZnJl ZV9yY3UocmQsIHJjdSk7CgkJZ290byBvdXQ7Cgl9CgoJdnhsYW5fZmRiX2Rlc3Ryb3kodnhsYW4s IGYpOwogICAgMjQxMDoJNDggODUgYzAgICAgICAgICAgICAgCXRlc3QgICAlcmF4LCVyYXgKICAg IDI0MTM6CTQ5IDg5IGM3ICAgICAgICAgICAgIAltb3YgICAgJXJheCwlcjE1CiAgICAyNDE2Ogk3 NCA3MCAgICAgICAgICAgICAgICAJamUgICAgIDI0ODggPHZ4bGFuX2ZkYl9kZWxldGUrMHgxNzg+ CglyYXdfc3Bpbl91bmxvY2soJmxvY2stPnJsb2NrKTsKfQoKc3RhdGljIF9fYWx3YXlzX2lubGlu ZSB2b2lkIHNwaW5fdW5sb2NrX2JoKHNwaW5sb2NrX3QgKmxvY2spCnsKCXJhd19zcGluX3VubG9j a19iaCgmbG9jay0+cmxvY2spOwogICAgMjQxODoJNDkgOGIgNDQgMjQgMzAgICAgICAgCW1vdiAg ICAweDMwKCVyMTIpLCVyYXgKICAgIDI0MWQ6CTQ5IDhkIDU0IDI0IDMwICAgICAgIAlsZWEgICAg MHgzMCglcjEyKSwlcmR4CgpvdXQ6CglzcGluX3VubG9ja19iaCgmdnhsYW4tPmhhc2hfbG9jayk7 CgoJcmV0dXJuIGVycjsKICAgIDI0MjI6CTQ4IDM5IGMyICAgICAgICAgICAgIAljbXAgICAgJXJh eCwlcmR4CglmID0gdnhsYW5fZmluZF9tYWModnhsYW4sIGFkZHIpOwoJaWYgKCFmKQoJCWdvdG8g b3V0OwoKCWlmICghdnhsYW5fYWRkcl9hbnkoJmlwKSkgewoJCXJkID0gdnhsYW5fZmRiX2ZpbmRf cmRzdChmLCAmaXAsIHBvcnQsIHZuaSwgaWZpbmRleCk7CiAgICAyNDI1Ogk3NCAwYyAgICAgICAg ICAgICAgICAJamUgICAgIDI0MzMgPHZ4bGFuX2ZkYl9kZWxldGUrMHgxMjM+CiAgICAyNDI3Ogk0 OSA4YiA0NCAyNCAzOCAgICAgICAJbW92ICAgIDB4MzgoJXIxMiksJXJheAogICAgMjQyYzoJNDkg MzkgNDQgMjQgMzAgICAgICAgCWNtcCAgICAlcmF4LDB4MzAoJXIxMikKICAgIDI0MzE6CTc0IGFh ICAgICAgICAgICAgICAgIAlqZSAgICAgMjNkZCA8dnhsYW5fZmRiX2RlbGV0ZSsweGNkPgogICAg MjQzMzoJNDkgOGIgNDcgMzAgICAgICAgICAgCW1vdiAgICAweDMwKCVyMTUpLCVyYXgKICAgIDI0 Mzc6CTQ5IDhiIDU3IDI4ICAgICAgICAgIAltb3YgICAgMHgyOCglcjE1KSwlcmR4CiAgICAyNDNi Ogk0YyA4OSBlNiAgICAgICAgICAgICAJbW92ICAgICVyMTIsJXJzaQogICAgMjQzZToJNGMgODkg ZjcgICAgICAgICAgICAgCW1vdiAgICAlcjE0LCVyZGkKCQlpZiAoIXJkKQogICAgMjQ0MToJYjkg MWQgMDAgMDAgMDAgICAgICAgCW1vdiAgICAkMHgxZCwlZWN4CiAgICAyNDQ2Ogk0OCA4OSA0MiAw OCAgICAgICAgICAJbW92ICAgICVyYXgsMHg4KCVyZHgpCiAgICAyNDRhOgk0OCA4OSAxMCAgICAg ICAgICAgICAJbW92ICAgICVyZHgsKCVyYXgpCgllcnIgPSAwOwoKCS8qIHJlbW92ZSBhIGRlc3Rp bmF0aW9uIGlmIGl0J3Mgbm90IHRoZSBvbmx5IG9uZSBvbiB0aGUgbGlzdCwKCSAqIG90aGVyd2lz ZSBkZXN0cm95IHRoZSBmZGIgZW50cnkKCSAqLwoJaWYgKHJkICYmICFsaXN0X2lzX3Npbmd1bGFy KCZmLT5yZW1vdGVzKSkgewogICAgMjQ0ZDoJNDggYjggMDAgMDIgMDAgMDAgMDAgCW1vdmFicyAk MHhkZWFkMDAwMDAwMDAwMjAwLCVyYXgKICAgIDI0NTQ6CTAwIGFkIGRlIAogKiBsaXN0X2lzX3Np bmd1bGFyIC0gdGVzdHMgd2hldGhlciBhIGxpc3QgaGFzIGp1c3Qgb25lIGVudHJ5LgogKiBAaGVh ZDogdGhlIGxpc3QgdG8gdGVzdC4KICovCnN0YXRpYyBpbmxpbmUgaW50IGxpc3RfaXNfc2luZ3Vs YXIoY29uc3Qgc3RydWN0IGxpc3RfaGVhZCAqaGVhZCkKewoJcmV0dXJuICFsaXN0X2VtcHR5KGhl YWQpICYmIChoZWFkLT5uZXh0ID09IGhlYWQtPnByZXYpOwogICAgMjQ1NzoJNDkgODkgNDcgMzAg ICAgICAgICAgCW1vdiAgICAlcmF4LDB4MzAoJXIxNSkKICAgIDI0NWI6CTRjIDg5IGZhICAgICAg ICAgICAgIAltb3YgICAgJXIxNSwlcmR4CiAgICAyNDVlOgllOCBkZCBmOCBmZiBmZiAgICAgICAJ Y2FsbHEgIDFkNDAgPHZ4bGFuX2ZkYl9ub3RpZnk+CiAqIGluIGFuIHVuZGVmaW5lZCBzdGF0ZS4K ICovCiNpZm5kZWYgQ09ORklHX0RFQlVHX0xJU1QKc3RhdGljIGlubGluZSB2b2lkIF9fbGlzdF9k ZWxfZW50cnkoc3RydWN0IGxpc3RfaGVhZCAqZW50cnkpCnsKCV9fbGlzdF9kZWwoZW50cnktPnBy ZXYsIGVudHJ5LT5uZXh0KTsKICAgIDI0NjM6CTQ5IDhkIDdmIDM4ICAgICAgICAgIAlsZWEgICAg MHgzOCglcjE1KSwlcmRpCiAgICAyNDY3OgliZSAzOCAwMCAwMCAwMCAgICAgICAJbW92ICAgICQw eDM4LCVlc2kKCQlsaXN0X2RlbF9yY3UoJnJkLT5saXN0KTsKCQl2eGxhbl9mZGJfbm90aWZ5KHZ4 bGFuLCBmLCByZCwgUlRNX0RFTE5FSUdIKTsKICAgIDI0NmM6CWU4IDAwIDAwIDAwIDAwICAgICAg IAljYWxscSAgMjQ3MSA8dnhsYW5fZmRiX2RlbGV0ZSsweDE2MT4KICAgIDI0NzE6CWU5IDcyIGZm IGZmIGZmICAgICAgIAlqbXBxICAgMjNlOCA8dnhsYW5fZmRiX2RlbGV0ZSsweGQ4PgogKiBUaGlz IGlzIG9ubHkgZm9yIGludGVybmFsIGxpc3QgbWFuaXB1bGF0aW9uIHdoZXJlIHdlIGtub3cKICog dGhlIHByZXYvbmV4dCBlbnRyaWVzIGFscmVhZHkhCiAqLwpzdGF0aWMgaW5saW5lIHZvaWQgX19s aXN0X2RlbChzdHJ1Y3QgbGlzdF9oZWFkICogcHJldiwgc3RydWN0IGxpc3RfaGVhZCAqIG5leHQp CnsKCW5leHQtPnByZXYgPSBwcmV2OwogICAgMjQ3NjoJNDggOGIgNDQgMjQgMTggICAgICAgCW1v diAgICAweDE4KCVyc3ApLCVyYXgKewoJc3dpdGNoIChzaXplKSB7CgljYXNlIDE6ICoodm9sYXRp bGUgX191OCAqKXAgPSAqKF9fdTggKilyZXM7IGJyZWFrOwoJY2FzZSAyOiAqKHZvbGF0aWxlIF9f dTE2ICopcCA9ICooX191MTYgKilyZXM7IGJyZWFrOwoJY2FzZSA0OiAqKHZvbGF0aWxlIF9fdTMy ICopcCA9ICooX191MzIgKilyZXM7IGJyZWFrOwoJY2FzZSA4OiAqKHZvbGF0aWxlIF9fdTY0ICop cCA9ICooX191NjQgKilyZXM7IGJyZWFrOwogICAgMjQ3YjoJNDggMGIgNDQgMjQgMjAgICAgICAg CW9yICAgICAweDIwKCVyc3ApLCVyYXgKICogZ3JhY2UgcGVyaW9kIGhhcyBlbGFwc2VkLgogKi8K c3RhdGljIGlubGluZSB2b2lkIGxpc3RfZGVsX3JjdShzdHJ1Y3QgbGlzdF9oZWFkICplbnRyeSkK ewoJX19saXN0X2RlbF9lbnRyeShlbnRyeSk7CgllbnRyeS0+cHJldiA9IExJU1RfUE9JU09OMjsK ICAgIDI0ODA6CTBmIDk0IGMwICAgICAgICAgICAgIAlzZXRlICAgJWFsCiAgICAyNDgzOgllOSA1 MSBmZiBmZiBmZiAgICAgICAJam1wcSAgIDIzZDkgPHZ4bGFuX2ZkYl9kZWxldGUrMHhjOT4KICAg IDI0ODg6CWJiIGZlIGZmIGZmIGZmICAgICAgIAltb3YgICAgJDB4ZmZmZmZmZmUsJWVieAogICAg MjQ4ZDoJZTkgNTYgZmYgZmYgZmYgICAgICAgCWptcHEgICAyM2U4IDx2eGxhbl9mZGJfZGVsZXRl KzB4ZDg+CiAgICAyNDkyOgllOCAwMCAwMCAwMCAwMCAgICAgICAJY2FsbHEgIDI0OTcgPHZ4bGFu X2ZkYl9kZWxldGUrMHgxODc+CgkJa2ZyZWVfcmN1KHJkLCByY3UpOwogICAgMjQ5NzoJNjYgMGYg MWYgODQgMDAgMDAgMDAgCW5vcHcgICAweDAoJXJheCwlcmF4LDEpCiAgICAyNDllOgkwMCAwMCAK CjAwMDAwMDAwMDAwMDI0YTAgPHZ4bGFuX2ZkYl9hcHBlbmQ+OgogICAgMjRhMDoJZTggMDAgMDAg MDAgMDAgICAgICAgCWNhbGxxICAyNGE1IDx2eGxhbl9mZGJfYXBwZW5kKzB4NT4KCQlnb3RvIG91 dDsKICAgIDI0YTU6CTU1ICAgICAgICAgICAgICAgICAgIAlwdXNoICAgJXJicApzdGF0aWMgaW5s aW5lIGJvb2wgaXB2Nl9hZGRyX2FueShjb25zdCBzdHJ1Y3QgaW42X2FkZHIgKmEpCnsKI2lmIGRl ZmluZWQoQ09ORklHX0hBVkVfRUZGSUNJRU5UX1VOQUxJR05FRF9BQ0NFU1MpICYmIEJJVFNfUEVS X0xPTkcgPT0gNjQKCWNvbnN0IHVuc2lnbmVkIGxvbmcgKnVsID0gKGNvbnN0IHVuc2lnbmVkIGxv bmcgKilhOwoKCXJldHVybiAodWxbMF0gfCB1bFsxXSkgPT0gMFVMOwogICAgMjRhNjoJNDggODkg ZTUgICAgICAgICAgICAgCW1vdiAgICAlcnNwLCVyYnAKICAgIDI0YTk6CTQxIDU3ICAgICAgICAg ICAgICAgIAlwdXNoICAgJXIxNQogICAgMjRhYjoJNDEgNTYgICAgICAgICAgICAgICAgCXB1c2gg ICAlcjE0CiAgICAyNGFkOgk0MSA1NSAgICAgICAgICAgICAgICAJcHVzaCAgICVyMTMKICAgIDI0 YWY6CTQxIDU0ICAgICAgICAgICAgICAgIAlwdXNoICAgJXIxMgogICAgMjRiMToJNDEgODkgZDYg ICAgICAgICAgICAgCW1vdiAgICAlZWR4LCVyMTRkCiAgICAyNGI0Ogk1MyAgICAgICAgICAgICAg ICAgICAJcHVzaCAgICVyYngKICAgIDI0YjU6CTBmIGI3IGQyICAgICAgICAgICAgIAltb3Z6d2wg JWR4LCVlZHgKCgllcnIgPSB2eGxhbl9mZGJfcGFyc2UodGIsIHZ4bGFuLCAmaXAsICZwb3J0LCAm dm5pLCAmaWZpbmRleCk7CglpZiAoZXJyKQoJCXJldHVybiBlcnI7CgoJZXJyID0gLUVOT0VOVDsK ICAgIDI0Yjg6CTQ4IDg5IGZiICAgICAgICAgICAgIAltb3YgICAgJXJkaSwlcmJ4CiAgICAyNGJi Ogk0OSA4OSBmNyAgICAgICAgICAgICAJbW92ICAgICVyc2ksJXIxNQogICAgMjRiZToJNDEgODkg Y2QgICAgICAgICAgICAgCW1vdiAgICAlZWN4LCVyMTNkCiAgICAyNGMxOgk0NSA4OSBjNCAgICAg ICAgICAgICAJbW92ICAgICVyOGQsJXIxMmQKCm91dDoKCXNwaW5fdW5sb2NrX2JoKCZ2eGxhbi0+ aGFzaF9sb2NrKTsKCglyZXR1cm4gZXJyOwp9CiAgICAyNGM0Ogk0OCA4MyBlYyAxMCAgICAgICAg ICAJc3ViICAgICQweDEwLCVyc3AKICAgIDI0Yzg6CTRjIDg5IDRkIGQwICAgICAgICAgIAltb3Yg ICAgJXI5LC0weDMwKCVyYnApCiAgICAyNGNjOgllOCBiZiBmZCBmZiBmZiAgICAgICAJY2FsbHEg IDIyOTAgPHZ4bGFuX2ZkYl9maW5kX3Jkc3Q+CgovKiBBZGQvdXBkYXRlIGRlc3RpbmF0aW9ucyBm b3IgbXVsdGljYXN0ICovCnN0YXRpYyBpbnQgdnhsYW5fZmRiX2FwcGVuZChzdHJ1Y3QgdnhsYW5f ZmRiICpmLAoJCQkgICAgdW5pb24gdnhsYW5fYWRkciAqaXAsIF9fYmUxNiBwb3J0LCBfX2JlMzIg dm5pLAoJCQkgICAgX191MzIgaWZpbmRleCwgc3RydWN0IHZ4bGFuX3Jkc3QgKipyZHApCnsKICAg IDI0ZDE6CTMxIGQyICAgICAgICAgICAgICAgIAl4b3IgICAgJWVkeCwlZWR4CiAgICAyNGQzOgk0 OCA4NSBjMCAgICAgICAgICAgICAJdGVzdCAgICVyYXgsJXJheAogICAgMjRkNjoJNzQgMTEgICAg ICAgICAgICAgICAgCWplICAgICAyNGU5IDx2eGxhbl9mZGJfYXBwZW5kKzB4NDk+CiAgICAyNGQ4 Ogk0OCA4MyBjNCAxMCAgICAgICAgICAJYWRkICAgICQweDEwLCVyc3AKICAgIDI0ZGM6CTg5IGQw ICAgICAgICAgICAgICAgIAltb3YgICAgJWVkeCwlZWF4CiAgICAyNGRlOgk1YiAgICAgICAgICAg ICAgICAgICAJcG9wICAgICVyYngKICAgIDI0ZGY6CTQxIDVjICAgICAgICAgICAgICAgIAlwb3Ag ICAgJXIxMgogICAgMjRlMToJNDEgNWQgICAgICAgICAgICAgICAgCXBvcCAgICAlcjEzCiAgICAy NGUzOgk0MSA1ZSAgICAgICAgICAgICAgICAJcG9wICAgICVyMTQKCXN0cnVjdCB2eGxhbl9yZHN0 ICpyZDsKCglyZCA9IHZ4bGFuX2ZkYl9maW5kX3Jkc3QoZiwgaXAsIHBvcnQsIHZuaSwgaWZpbmRl eCk7CiAgICAyNGU1Ogk0MSA1ZiAgICAgICAgICAgICAgICAJcG9wICAgICVyMTUKICAgIDI0ZTc6 CTVkICAgICAgICAgICAgICAgICAgIAlwb3AgICAgJXJicAoKLyogQWRkL3VwZGF0ZSBkZXN0aW5h dGlvbnMgZm9yIG11bHRpY2FzdCAqLwpzdGF0aWMgaW50IHZ4bGFuX2ZkYl9hcHBlbmQoc3RydWN0 IHZ4bGFuX2ZkYiAqZiwKCQkJICAgIHVuaW9uIHZ4bGFuX2FkZHIgKmlwLCBfX2JlMTYgcG9ydCwg X19iZTMyIHZuaSwKCQkJICAgIF9fdTMyIGlmaW5kZXgsIHN0cnVjdCB2eGxhbl9yZHN0ICoqcmRw KQp7CiAgICAyNGU4OgljMyAgICAgICAgICAgICAgICAgICAJcmV0cSAgIAogICAgMjRlOToJNDgg OGIgM2QgMDAgMDAgMDAgMDAgCW1vdiAgICAweDAoJXJpcCksJXJkaSAgICAgICAgIyAyNGYwIDx2 eGxhbl9mZGJfYXBwZW5kKzB4NTA+CiAgICAyNGYwOgliYSA1OCAwMCAwMCAwMCAgICAgICAJbW92 ICAgICQweDU4LCVlZHgKICAgIDI0ZjU6CWJlIDIwIDAwIDA4IDAyICAgICAgIAltb3YgICAgJDB4 MjA4MDAyMCwlZXNpCiAgICAyNGZhOgllOCAwMCAwMCAwMCAwMCAgICAgICAJY2FsbHEgIDI0ZmYg PHZ4bGFuX2ZkYl9hcHBlbmQrMHg1Zj4KCXN0cnVjdCB2eGxhbl9yZHN0ICpyZDsKCglyZCA9IHZ4 bGFuX2ZkYl9maW5kX3Jkc3QoZiwgaXAsIHBvcnQsIHZuaSwgaWZpbmRleCk7CiAgICAyNGZmOgk0 OCA4NSBjMCAgICAgICAgICAgICAJdGVzdCAgICVyYXgsJXJheAoJaWYgKHJkKQoJCXJldHVybiAw OwogICAgMjUwMjoJNzQgNzAgICAgICAgICAgICAgICAgCWplICAgICAyNTc0IDx2eGxhbl9mZGJf YXBwZW5kKzB4ZDQ+CgkJCSAgICBfX3UzMiBpZmluZGV4LCBzdHJ1Y3QgdnhsYW5fcmRzdCAqKnJk cCkKewoJc3RydWN0IHZ4bGFuX3Jkc3QgKnJkOwoKCXJkID0gdnhsYW5fZmRiX2ZpbmRfcmRzdChm LCBpcCwgcG9ydCwgdm5pLCBpZmluZGV4KTsKCWlmIChyZCkKICAgIDI1MDQ6CTQ4IDhkIDc4IDQ4 ICAgICAgICAgIAlsZWEgICAgMHg0OCglcmF4KSwlcmRpCgoJbGlzdF9hZGRfdGFpbF9yY3UoJnJk LT5saXN0LCAmZi0+cmVtb3Rlcyk7CgoJKnJkcCA9IHJkOwoJcmV0dXJuIDE7Cn0KICAgIDI1MDg6 CWJlIDIwIDAwIDA4IDAyICAgICAgIAltb3YgICAgJDB4MjA4MDAyMCwlZXNpCiAgICAyNTBkOgk0 OCA4OSA0NSBjOCAgICAgICAgICAJbW92ICAgICVyYXgsLTB4MzgoJXJicCkKICAgIDI1MTE6CWU4 IDAwIDAwIDAwIDAwICAgICAgIAljYWxscSAgMjUxNiA8dnhsYW5fZmRiX2FwcGVuZCsweDc2Pgog ICAgMjUxNjoJODUgYzAgICAgICAgICAgICAgICAgCXRlc3QgICAlZWF4LCVlYXgKICAgIDI1MTg6 CTQ4IDhiIDU1IGM4ICAgICAgICAgIAltb3YgICAgLTB4MzgoJXJicCksJXJkeAoJCQlpbnQgaW5k ZXggPSBrbWFsbG9jX2luZGV4KHNpemUpOwoKCQkJaWYgKCFpbmRleCkKCQkJCXJldHVybiBaRVJP X1NJWkVfUFRSOwoKCQkJcmV0dXJuIGttZW1fY2FjaGVfYWxsb2NfdHJhY2Uoa21hbGxvY19jYWNo ZXNbaW5kZXhdLAogICAgMjUxYzoJNzUgNjAgICAgICAgICAgICAgICAgCWpuZSAgICAyNTdlIDx2 eGxhbl9mZGJfYXBwZW5kKzB4ZGU+CiAgICAyNTFlOgk0OSA4YiAwNyAgICAgICAgICAgICAJbW92 ICAgICglcjE1KSwlcmF4CiAgICAyNTIxOgk0OCA4YiA0YiAzOCAgICAgICAgICAJbW92ICAgIDB4 MzgoJXJieCksJXJjeAogICAgMjUyNToJNDggOGQgNzMgMzAgICAgICAgICAgCWxlYSAgICAweDMw KCVyYngpLCVyc2kKICAgIDI1Mjk6CTY2IDQ0IDg5IDcyIDFjICAgICAgIAltb3YgICAgJXIxNHcs MHgxYyglcmR4KQogICAgMjUyZToJNDQgODkgNmEgMjAgICAgICAgICAgCW1vdiAgICAlcjEzZCww eDIwKCVyZHgpCglyZCA9IHZ4bGFuX2ZkYl9maW5kX3Jkc3QoZiwgaXAsIHBvcnQsIHZuaSwgaWZp bmRleCk7CglpZiAocmQpCgkJcmV0dXJuIDA7CgoJcmQgPSBrbWFsbG9jKHNpemVvZigqcmQpLCBH RlBfQVRPTUlDKTsKCWlmIChyZCA9PSBOVUxMKQogICAgMjUzMjoJNDQgODkgNjIgMjQgICAgICAg ICAgCW1vdiAgICAlcjEyZCwweDI0KCVyZHgpCgkJcmV0dXJuIC1FTk9CVUZTOwoKCWlmIChkc3Rf Y2FjaGVfaW5pdCgmcmQtPmRzdF9jYWNoZSwgR0ZQX0FUT01JQykpIHsKICAgIDI1MzY6CTQ4IDg5 IDcyIDI4ICAgICAgICAgIAltb3YgICAgJXJzaSwweDI4KCVyZHgpCiAgICAyNTNhOgk0OCA4OSAw MiAgICAgICAgICAgICAJbW92ICAgICVyYXgsKCVyZHgpCiAgICAyNTNkOgk0OSA4YiA0NyAwOCAg ICAgICAgICAJbW92ICAgIDB4OCglcjE1KSwlcmF4CiAgICAyNTQxOgk0OCA4OSA0YSAzMCAgICAg ICAgICAJbW92ICAgICVyY3gsMHgzMCglcmR4KQogICAgMjU0NToJNDggODkgNDIgMDggICAgICAg ICAgCW1vdiAgICAlcmF4LDB4OCglcmR4KQogICAgMjU0OToJNDkgOGIgNDcgMTAgICAgICAgICAg CW1vdiAgICAweDEwKCVyMTUpLCVyYXgKICAgIDI1NGQ6CTQ4IDg5IDQyIDEwICAgICAgICAgIAlt b3YgICAgJXJheCwweDEwKCVyZHgpCiAqIGxpc3RfZm9yX2VhY2hfZW50cnlfcmN1KCkuCiAqLwpz dGF0aWMgaW5saW5lIHZvaWQgbGlzdF9hZGRfdGFpbF9yY3Uoc3RydWN0IGxpc3RfaGVhZCAqbmV3 LAoJCQkJCXN0cnVjdCBsaXN0X2hlYWQgKmhlYWQpCnsKCV9fbGlzdF9hZGRfcmN1KG5ldywgaGVh ZC0+cHJldiwgaGVhZCk7CiAgICAyNTUxOgk0MSA4YiA0NyAxOCAgICAgICAgICAJbW92ICAgIDB4 MTgoJXIxNSksJWVheAoJcmQtPnJlbW90ZV9pcCA9ICppcDsKCXJkLT5yZW1vdGVfcG9ydCA9IHBv cnQ7CglyZC0+cmVtb3RlX3ZuaSA9IHZuaTsKCXJkLT5yZW1vdGVfaWZpbmRleCA9IGlmaW5kZXg7 CgoJbGlzdF9hZGRfdGFpbF9yY3UoJnJkLT5saXN0LCAmZi0+cmVtb3Rlcyk7CiAgICAyNTU1Ogk4 OSA0MiAxOCAgICAgICAgICAgICAJbW92ICAgICVlYXgsMHgxOCglcmR4KQogICAgMjU1ODoJNDgg OGQgNDIgMjggICAgICAgICAgCWxlYSAgICAweDI4KCVyZHgpLCVyYXgKCQlrZnJlZShyZCk7CgkJ cmV0dXJuIC1FTk9CVUZTOwoJfQoKCXJkLT5yZW1vdGVfaXAgPSAqaXA7CglyZC0+cmVtb3RlX3Bv cnQgPSBwb3J0OwogICAgMjU1YzoJNDggODkgMDEgICAgICAgICAgICAgCW1vdiAgICAlcmF4LCgl cmN4KQoJcmQtPnJlbW90ZV92bmkgPSB2bmk7CiAgICAyNTVmOgk0OCA4OSA0MyAzOCAgICAgICAg ICAJbW92ICAgICVyYXgsMHgzOCglcmJ4KQoJcmQtPnJlbW90ZV9pZmluZGV4ID0gaWZpbmRleDsK ICAgIDI1NjM6CTQ4IDhiIDQ1IGQwICAgICAgICAgIAltb3YgICAgLTB4MzAoJXJicCksJXJheAoK CWxpc3RfYWRkX3RhaWxfcmN1KCZyZC0+bGlzdCwgJmYtPnJlbW90ZXMpOwogICAgMjU2NzoJNDgg ODkgMTAgICAgICAgICAgICAgCW1vdiAgICAlcmR4LCglcmF4KQoJaWYgKGRzdF9jYWNoZV9pbml0 KCZyZC0+ZHN0X2NhY2hlLCBHRlBfQVRPTUlDKSkgewoJCWtmcmVlKHJkKTsKCQlyZXR1cm4gLUVO T0JVRlM7Cgl9CgoJcmQtPnJlbW90ZV9pcCA9ICppcDsKICAgIDI1NmE6CWJhIDAxIDAwIDAwIDAw ICAgICAgIAltb3YgICAgJDB4MSwlZWR4CiAgICAyNTZmOgllOSA2NCBmZiBmZiBmZiAgICAgICAJ am1wcSAgIDI0ZDggPHZ4bGFuX2ZkYl9hcHBlbmQrMHgzOD4KI2lmbmRlZiBDT05GSUdfREVCVUdf TElTVApzdGF0aWMgaW5saW5lIHZvaWQgX19saXN0X2FkZF9yY3Uoc3RydWN0IGxpc3RfaGVhZCAq bmV3LAoJCXN0cnVjdCBsaXN0X2hlYWQgKnByZXYsIHN0cnVjdCBsaXN0X2hlYWQgKm5leHQpCnsK CW5ldy0+bmV4dCA9IG5leHQ7CgluZXctPnByZXYgPSBwcmV2OwogICAgMjU3NDoJYmEgOTcgZmYg ZmYgZmYgICAgICAgCW1vdiAgICAkMHhmZmZmZmY5NywlZWR4CiAgICAyNTc5OgllOSA1YSBmZiBm ZiBmZiAgICAgICAJam1wcSAgIDI0ZDggPHZ4bGFuX2ZkYl9hcHBlbmQrMHgzOD4KICAgIDI1N2U6 CTQ4IDg5IGQ3ICAgICAgICAgICAgIAltb3YgICAgJXJkeCwlcmRpCiAgICAyNTgxOgllOCAwMCAw MCAwMCAwMCAgICAgICAJY2FsbHEgIDI1ODYgPHZ4bGFuX2ZkYl9hcHBlbmQrMHhlNj4KICAgIDI1 ODY6CWJhIDk3IGZmIGZmIGZmICAgICAgIAltb3YgICAgJDB4ZmZmZmZmOTcsJWVkeAoJcmQtPnJl bW90ZV9wb3J0ID0gcG9ydDsKCXJkLT5yZW1vdGVfdm5pID0gdm5pOwoJcmQtPnJlbW90ZV9pZmlu ZGV4ID0gaWZpbmRleDsKCglsaXN0X2FkZF90YWlsX3JjdSgmcmQtPmxpc3QsICZmLT5yZW1vdGVz KTsKICAgIDI1OGI6CWU5IDQ4IGZmIGZmIGZmICAgICAgIAlqbXBxICAgMjRkOCA8dnhsYW5fZmRi X2FwcGVuZCsweDM4PgoKMDAwMDAwMDAwMDAwMjU5MCA8dnhsYW5fZmRiX2NyZWF0ZT46CglyY3Vf YXNzaWduX3BvaW50ZXIobGlzdF9uZXh0X3JjdShwcmV2KSwgbmV3KTsKCW5leHQtPnByZXYgPSBu ZXc7CiAgICAyNTkwOgllOCAwMCAwMCAwMCAwMCAgICAgICAJY2FsbHEgIDI1OTUgPHZ4bGFuX2Zk Yl9jcmVhdGUrMHg1PgoKCSpyZHAgPSByZDsKICAgIDI1OTU6CTU1ICAgICAgICAgICAgICAgICAg IAlwdXNoICAgJXJicAogICAgMjU5NjoJNDggODkgZTUgICAgICAgICAgICAgCW1vdiAgICAlcnNw LCVyYnAKICAgIDI1OTk6CTQxIDU3ICAgICAgICAgICAgICAgIAlwdXNoICAgJXIxNQoJcmV0dXJu IDE7CiAgICAyNTliOgk0MSA1NiAgICAgICAgICAgICAgICAJcHVzaCAgICVyMTQKICAgIDI1OWQ6 CTQxIDU1ICAgICAgICAgICAgICAgIAlwdXNoICAgJXIxMwogICAgMjU5ZjoJNDEgNTQgICAgICAg ICAgICAgICAgCXB1c2ggICAlcjEyCiAgICAyNWExOgk0OSA4OSBmNyAgICAgICAgICAgICAJbW92 ICAgICVyc2ksJXIxNQoJaWYgKHJkKQoJCXJldHVybiAwOwoKCXJkID0ga21hbGxvYyhzaXplb2Yo KnJkKSwgR0ZQX0FUT01JQyk7CglpZiAocmQgPT0gTlVMTCkKCQlyZXR1cm4gLUVOT0JVRlM7CiAg ICAyNWE0Ogk1MyAgICAgICAgICAgICAgICAgICAJcHVzaCAgICVyYngKICAgIDI1YTU6CTQ5IDg5 IGZjICAgICAgICAgICAgIAltb3YgICAgJXJkaSwlcjEyCiAgICAyNWE4Ogk0NSA4OSBjNSAgICAg ICAgICAgICAJbW92ICAgICVyOGQsJXIxM2QKICAgIDI1YWI6CTQ4IDgzIGVjIDIwICAgICAgICAg IAlzdWIgICAgJDB4MjAsJXJzcAoKCWlmIChkc3RfY2FjaGVfaW5pdCgmcmQtPmRzdF9jYWNoZSwg R0ZQX0FUT01JQykpIHsKCQlrZnJlZShyZCk7CiAgICAyNWFmOgk0OCA4OSA1NSBiOCAgICAgICAg ICAJbW92ICAgICVyZHgsLTB4NDgoJXJicCkKICAgIDI1YjM6CTg5IDRkIGM0ICAgICAgICAgICAg IAltb3YgICAgJWVjeCwtMHgzYyglcmJwKQoJCXJldHVybiAtRU5PQlVGUzsKICAgIDI1YjY6CTY1 IDQ4IDhiIDA0IDI1IDI4IDAwIAltb3YgICAgJWdzOjB4MjgsJXJheAogICAgMjViZDoJMDAgMDAg CiAgICAyNWJmOgk0OCA4OSA0NSBkMCAgICAgICAgICAJbW92ICAgICVyYXgsLTB4MzAoJXJicCkK c3RhdGljIGludCB2eGxhbl9mZGJfY3JlYXRlKHN0cnVjdCB2eGxhbl9kZXYgKnZ4bGFuLAoJCQkg ICAgY29uc3QgdTggKm1hYywgdW5pb24gdnhsYW5fYWRkciAqaXAsCgkJCSAgICBfX3UxNiBzdGF0 ZSwgX191MTYgZmxhZ3MsCgkJCSAgICBfX2JlMTYgcG9ydCwgX19iZTMyIHZuaSwgX191MzIgaWZp bmRleCwKCQkJICAgIF9fdTggbmRtX2ZsYWdzKQp7CiAgICAyNWMzOgkzMSBjMCAgICAgICAgICAg ICAgICAJeG9yICAgICVlYXgsJWVheAogICAgMjVjNToJNDQgODkgNGQgYzAgICAgICAgICAgCW1v diAgICAlcjlkLC0weDQwKCVyYnApCiAgICAyNWM5Ogk0NCA4YiA3NSAyMCAgICAgICAgICAJbW92 ICAgIDB4MjAoJXJicCksJXIxNGQKICAgIDI1Y2Q6CTQ4IGM3IDQ1IGM4IDAwIDAwIDAwIAltb3Zx ICAgJDB4MCwtMHgzOCglcmJwKQogICAgMjVkNDoJMDAgCiAgICAyNWQ1OgllOCAyNiBkYSBmZiBm ZiAgICAgICAJY2FsbHEgIDAgPF9fdnhsYW5fZmluZF9tYWM+CiAgICAyNWRhOgk0OCA4NSBjMCAg ICAgICAgICAgICAJdGVzdCAgICVyYXgsJXJheAogICAgMjVkZDoJMGYgODQgNDEgMDEgMDAgMDAg ICAgCWplICAgICAyNzI0IDx2eGxhbl9mZGJfY3JlYXRlKzB4MTk0PgogICAgMjVlMzoJNDEgZjcg YzUgMDAgMDIgMDAgMDAgCXRlc3QgICAkMHgyMDAsJXIxM2QKICAgIDI1ZWE6CTBmIDg1IGU2IDAw IDAwIDAwICAgIAlqbmUgICAgMjZkNiA8dnhsYW5fZmRiX2NyZWF0ZSsweDE0Nj4KICAgIDI1ZjA6 CTQ4IDg5IGMzICAgICAgICAgICAgIAltb3YgICAgJXJheCwlcmJ4CiAgICAyNWYzOgk0NSAzMSBm ZiAgICAgICAgICAgICAJeG9yICAgICVyMTVkLCVyMTVkCiAgICAyNWY2Ogk4YiA0NSBjNCAgICAg ICAgICAgICAJbW92ICAgIC0weDNjKCVyYnApLCVlYXgKICAgIDI1Zjk6CTY2IDM5IDQzIDQ2ICAg ICAgICAgIAljbXAgICAgJWF4LDB4NDYoJXJieCkKCXN0cnVjdCB2eGxhbl9yZHN0ICpyZCA9IE5V TEw7CiAgICAyNWZkOgk3NCAxNSAgICAgICAgICAgICAgICAJamUgICAgIDI2MTQgPHZ4bGFuX2Zk Yl9jcmVhdGUrMHg4ND4KICAgIDI1ZmY6CTY2IDg5IDQzIDQ2ICAgICAgICAgIAltb3YgICAgJWF4 LDB4NDYoJXJieCkKICAgIDI2MDM6CTQ4IDhiIDA1IDAwIDAwIDAwIDAwIAltb3YgICAgMHgwKCVy aXApLCVyYXggICAgICAgICMgMjYwYSA8dnhsYW5fZmRiX2NyZWF0ZSsweDdhPgoJc3RydWN0IHZ4 bGFuX2ZkYiAqZjsKCWludCBub3RpZnkgPSAwOwoKCWYgPSBfX3Z4bGFuX2ZpbmRfbWFjKHZ4bGFu LCBtYWMpOwoJaWYgKGYpIHsKICAgIDI2MGE6CTQxIGJmIDAxIDAwIDAwIDAwICAgIAltb3YgICAg JDB4MSwlcjE1ZAogICAgMjYxMDoJNDggODkgNDMgMjAgICAgICAgICAgCW1vdiAgICAlcmF4LDB4 MjAoJXJieCkKCQlpZiAoZmxhZ3MgJiBOTE1fRl9FWENMKSB7CiAgICAyNjE0Ogk0NCAzOCA3MyA0 OCAgICAgICAgICAJY21wICAgICVyMTRiLDB4NDgoJXJieCkKICAgIDI2MTg6CTc0IDE1ICAgICAg ICAgICAgICAgIAlqZSAgICAgMjYyZiA8dnhsYW5fZmRiX2NyZWF0ZSsweDlmPgogICAgMjYxYToJ NDggOGIgMDUgMDAgMDAgMDAgMDAgCW1vdiAgICAweDAoJXJpcCksJXJheCAgICAgICAgIyAyNjIx IDx2eGxhbl9mZGJfY3JlYXRlKzB4OTE+CiAgICAyNjIxOgk0NCA4OCA3MyA0OCAgICAgICAgICAJ bW92ICAgICVyMTRiLDB4NDgoJXJieCkKCQkJICAgIF9fYmUxNiBwb3J0LCBfX2JlMzIgdm5pLCBf X3UzMiBpZmluZGV4LAoJCQkgICAgX191OCBuZG1fZmxhZ3MpCnsKCXN0cnVjdCB2eGxhbl9yZHN0 ICpyZCA9IE5VTEw7CglzdHJ1Y3QgdnhsYW5fZmRiICpmOwoJaW50IG5vdGlmeSA9IDA7CiAgICAy NjI1Ogk0MSBiZiAwMSAwMCAwMCAwMCAgICAJbW92ICAgICQweDEsJXIxNWQKCQlpZiAoZmxhZ3Mg JiBOTE1fRl9FWENMKSB7CgkJCW5ldGRldl9kYmcodnhsYW4tPmRldiwKCQkJCSAgICJsb3N0IHJh Y2UgdG8gY3JlYXRlICVwTVxuIiwgbWFjKTsKCQkJcmV0dXJuIC1FRVhJU1Q7CgkJfQoJCWlmIChm LT5zdGF0ZSAhPSBzdGF0ZSkgewogICAgMjYyYjoJNDggODkgNDMgMjAgICAgICAgICAgCW1vdiAg ICAlcmF4LDB4MjAoJXJieCkKCQkJZi0+c3RhdGUgPSBzdGF0ZTsKICAgIDI2MmY6CTQxIGY3IGM1 IDAwIDAxIDAwIDAwIAl0ZXN0ICAgJDB4MTAwLCVyMTNkCgkJCWYtPnVwZGF0ZWQgPSBqaWZmaWVz OwogICAgMjYzNjoJNzQgM2MgICAgICAgICAgICAgICAgCWplICAgICAyNjc0IDx2eGxhbl9mZGJf Y3JlYXRlKzB4ZTQ+CiAgICAyNjM4Ogk4YiA0MyA0MCAgICAgICAgICAgICAJbW92ICAgIDB4NDAo JXJieCksJWVheAoJCQlub3RpZnkgPSAxOwogICAgMjYzYjoJYTggMDEgICAgICAgICAgICAgICAg CXRlc3QgICAkMHgxLCVhbAogICAgMjYzZDoJMGYgODUgMGYgMDIgMDAgMDAgICAgCWpuZSAgICAy ODUyIDx2eGxhbl9mZGJfY3JlYXRlKzB4MmMyPgoJCQkJICAgImxvc3QgcmFjZSB0byBjcmVhdGUg JXBNXG4iLCBtYWMpOwoJCQlyZXR1cm4gLUVFWElTVDsKCQl9CgkJaWYgKGYtPnN0YXRlICE9IHN0 YXRlKSB7CgkJCWYtPnN0YXRlID0gc3RhdGU7CgkJCWYtPnVwZGF0ZWQgPSBqaWZmaWVzOwogICAg MjY0MzoJMGYgYjcgNTMgNDQgICAgICAgICAgCW1vdnp3bCAweDQ0KCVyYngpLCVlZHgKCQkJbm90 aWZ5ID0gMTsKCQl9CgkJaWYgKGYtPmZsYWdzICE9IG5kbV9mbGFncykgewogICAgMjY0NzoJMDkg YzIgICAgICAgICAgICAgICAgCW9yICAgICAlZWF4LCVlZHgKICAgIDI2NDk6CTBmIDg0IDAzIDAy IDAwIDAwICAgIAlqZSAgICAgMjg1MiA8dnhsYW5fZmRiX2NyZWF0ZSsweDJjMj4KCQkJZi0+Zmxh Z3MgPSBuZG1fZmxhZ3M7CgkJCWYtPnVwZGF0ZWQgPSBqaWZmaWVzOwogICAgMjY0ZjoJMGYgYjcg NTUgYzAgICAgICAgICAgCW1vdnp3bCAtMHg0MCglcmJwKSwlZWR4CgkJCWYtPnN0YXRlID0gc3Rh dGU7CgkJCWYtPnVwZGF0ZWQgPSBqaWZmaWVzOwoJCQlub3RpZnkgPSAxOwoJCX0KCQlpZiAoZi0+ ZmxhZ3MgIT0gbmRtX2ZsYWdzKSB7CgkJCWYtPmZsYWdzID0gbmRtX2ZsYWdzOwogICAgMjY1MzoJ NDQgOGIgNDUgMTggICAgICAgICAgCW1vdiAgICAweDE4KCVyYnApLCVyOGQKCQkJZi0+dXBkYXRl ZCA9IGppZmZpZXM7CgkJCW5vdGlmeSA9IDE7CiAgICAyNjU3Ogk0OCA4OSBkZiAgICAgICAgICAg ICAJbW92ICAgICVyYngsJXJkaQogICAgMjY1YToJOGIgNGQgMTAgICAgICAgICAgICAgCW1vdiAg ICAweDEwKCVyYnApLCVlY3gKCQkJZi0+dXBkYXRlZCA9IGppZmZpZXM7CgkJCW5vdGlmeSA9IDE7 CgkJfQoJCWlmIChmLT5mbGFncyAhPSBuZG1fZmxhZ3MpIHsKCQkJZi0+ZmxhZ3MgPSBuZG1fZmxh Z3M7CgkJCWYtPnVwZGF0ZWQgPSBqaWZmaWVzOwogICAgMjY1ZDoJNDggOGIgNzUgYjggICAgICAg ICAgCW1vdiAgICAtMHg0OCglcmJwKSwlcnNpCgkJCW5vdGlmeSA9IDE7CgkJfQoJCWlmICgoZmxh Z3MgJiBOTE1fRl9SRVBMQUNFKSkgewogICAgMjY2MToJZTggMmEgZmMgZmYgZmYgICAgICAgCWNh bGxxICAyMjkwIDx2eGxhbl9mZGJfZmluZF9yZHN0PgogICAgMjY2NjoJMzEgZDIgICAgICAgICAg ICAgICAgCXhvciAgICAlZWR4LCVlZHgKICogQnkgZGVmaW5pdGlvbiB0aGUgYnJvYWRjYXN0IGFk ZHJlc3MgaXMgYWxzbyBhIG11bHRpY2FzdCBhZGRyZXNzLgogKi8Kc3RhdGljIGlubGluZSBib29s IGlzX211bHRpY2FzdF9ldGhlcl9hZGRyKGNvbnN0IHU4ICphZGRyKQp7CiNpZiBkZWZpbmVkKENP TkZJR19IQVZFX0VGRklDSUVOVF9VTkFMSUdORURfQUNDRVNTKQoJdTMyIGEgPSAqKGNvbnN0IHUz MiAqKWFkZHI7CiAgICAyNjY4Ogk0OCA4NSBjMCAgICAgICAgICAgICAJdGVzdCAgICVyYXgsJXJh eAoJCQkvKiBPbmx5IGNoYW5nZSB1bmljYXN0cyAqLwoJCQlpZiAoIShpc19tdWx0aWNhc3RfZXRo ZXJfYWRkcihmLT5ldGhfYWRkcikgfHwKICAgIDI2NmI6CTBmIDg0IGZjIDAxIDAwIDAwICAgIAlq ZSAgICAgMjg2ZCA8dnhsYW5fZmRiX2NyZWF0ZSsweDJkZD4KICAgIDI2NzE6CTQxIDA5IGQ3ICAg ICAgICAgICAgIAlvciAgICAgJWVkeCwlcjE1ZAogICAgMjY3NDoJNDEgODEgZTUgMDAgMDggMDAg MDAgCWFuZCAgICAkMHg4MDAsJXIxM2QKICAgIDI2N2I6CTc0IDMxICAgICAgICAgICAgICAgIAlq ZSAgICAgMjZhZSA8dnhsYW5fZmRiX2NyZWF0ZSsweDExZT4KICAgIDI2N2Q6CThiIDQzIDQwICAg ICAgICAgICAgIAltb3YgICAgMHg0MCglcmJ4KSwlZWF4CgkJCSAgICAgdW5pb24gdnhsYW5fYWRk ciAqaXAsIF9fYmUxNiBwb3J0LCBfX2JlMzIgdm5pLAoJCQkgICAgIF9fdTMyIGlmaW5kZXgpCnsK CXN0cnVjdCB2eGxhbl9yZHN0ICpyZDsKCglyZCA9IHZ4bGFuX2ZkYl9maW5kX3Jkc3QoZiwgaXAs IHBvcnQsIHZuaSwgaWZpbmRleCk7CiAgICAyNjgwOglhOCAwMSAgICAgICAgICAgICAgICAJdGVz dCAgICQweDEsJWFsCiAgICAyNjgyOgk3NSAwOCAgICAgICAgICAgICAgICAJam5lICAgIDI2OGMg PHZ4bGFuX2ZkYl9jcmVhdGUrMHhmYz4KICAgIDI2ODQ6CTBmIGI3IDUzIDQ0ICAgICAgICAgIAlt b3Z6d2wgMHg0NCglcmJ4KSwlZWR4CiAgICAyNjg4OgkwOSBjMiAgICAgICAgICAgICAgICAJb3Ig ICAgICVlYXgsJWVkeAogICAgMjY4YToJNzUgMjIgICAgICAgICAgICAgICAgCWpuZSAgICAyNmFl IDx2eGxhbl9mZGJfY3JlYXRlKzB4MTFlPgogICAgMjY4YzoJMGYgYjcgNTUgYzAgICAgICAgICAg CW1vdnp3bCAtMHg0MCglcmJwKSwlZWR4CiAgICAyNjkwOgk0NCA4YiA0NSAxOCAgICAgICAgICAJ bW92ICAgIDB4MTgoJXJicCksJXI4ZAogICAgMjY5NDoJNGMgOGQgNGQgYzggICAgICAgICAgCWxl YSAgICAtMHgzOCglcmJwKSwlcjkKCWlmIChyZCkKICAgIDI2OTg6CThiIDRkIDEwICAgICAgICAg ICAgIAltb3YgICAgMHgxMCglcmJwKSwlZWN4CiAgICAyNjliOgk0OCA4YiA3NSBiOCAgICAgICAg ICAJbW92ICAgIC0weDQ4KCVyYnApLCVyc2kKICAgIDI2OWY6CTQ4IDg5IGRmICAgICAgICAgICAg IAltb3YgICAgJXJieCwlcmRpCgkJfQoJCWlmICgoZmxhZ3MgJiBOTE1fRl9SRVBMQUNFKSkgewoJ CQkvKiBPbmx5IGNoYW5nZSB1bmljYXN0cyAqLwoJCQlpZiAoIShpc19tdWx0aWNhc3RfZXRoZXJf YWRkcihmLT5ldGhfYWRkcikgfHwKCQkJICAgICBpc196ZXJvX2V0aGVyX2FkZHIoZi0+ZXRoX2Fk ZHIpKSkgewoJCQkJbm90aWZ5IHw9IHZ4bGFuX2ZkYl9yZXBsYWNlKGYsIGlwLCBwb3J0LCB2bmks CiAgICAyNmEyOgllOCBmOSBmZCBmZiBmZiAgICAgICAJY2FsbHEgIDI0YTAgPHZ4bGFuX2ZkYl9h cHBlbmQ+CgkJCQkJCQkgICBpZmluZGV4KTsKCQkJfSBlbHNlCgkJCQlyZXR1cm4gLUVPUE5PVFNV UFA7CgkJfQoJCWlmICgoZmxhZ3MgJiBOTE1fRl9BUFBFTkQpICYmCiAgICAyNmE3Ogk4NSBjMCAg ICAgICAgICAgICAgICAJdGVzdCAgICVlYXgsJWVheAogICAgMjZhOToJNzggMzUgICAgICAgICAg ICAgICAgCWpzICAgICAyNmUwIDx2eGxhbl9mZGJfY3JlYXRlKzB4MTUwPgogICAgMjZhYjoJNDEg MDkgYzcgICAgICAgICAgICAgCW9yICAgICAlZWF4LCVyMTVkCiAgICAyNmFlOgkzMSBjMCAgICAg ICAgICAgICAgICAJeG9yICAgICVlYXgsJWVheAogICAgMjZiMDoJNDUgODUgZmYgICAgICAgICAg ICAgCXRlc3QgICAlcjE1ZCwlcjE1ZAogICAgMjZiMzoJNzQgMmIgICAgICAgICAgICAgICAgCWpl ICAgICAyNmUwIDx2eGxhbl9mZGJfY3JlYXRlKzB4MTUwPgoJCSAgICAoaXNfbXVsdGljYXN0X2V0 aGVyX2FkZHIoZi0+ZXRoX2FkZHIpIHx8CiAgICAyNmI1Ogk0OCA4YiA1NSBjOCAgICAgICAgICAJ bW92ICAgIC0weDM4KCVyYnApLCVyZHgKICAgIDI2Yjk6CTQ4IDg1IGQyICAgICAgICAgICAgIAl0 ZXN0ICAgJXJkeCwlcmR4CgkJICAgICBpc196ZXJvX2V0aGVyX2FkZHIoZi0+ZXRoX2FkZHIpKSkg ewoJCQlpbnQgcmMgPSB2eGxhbl9mZGJfYXBwZW5kKGYsIGlwLCBwb3J0LCB2bmksIGlmaW5kZXgs CiAgICAyNmJjOgkwZiA4NCA5YSAwMSAwMCAwMCAgICAJamUgICAgIDI4NWMgPHZ4bGFuX2ZkYl9j cmVhdGUrMHgyY2M+CiAgICAyNmMyOgliOSAxYyAwMCAwMCAwMCAgICAgICAJbW92ICAgICQweDFj LCVlY3gKICAgIDI2Yzc6CTQ4IDg5IGRlICAgICAgICAgICAgIAltb3YgICAgJXJieCwlcnNpCiAg ICAyNmNhOgk0YyA4OSBlNyAgICAgICAgICAgICAJbW92ICAgICVyMTIsJXJkaQogICAgMjZjZDoJ ZTggNmUgZjYgZmYgZmYgICAgICAgCWNhbGxxICAxZDQwIDx2eGxhbl9mZGJfbm90aWZ5PgogICAg MjZkMjoJMzEgYzAgICAgICAgICAgICAgICAgCXhvciAgICAlZWF4LCVlYXgKICAgIDI2ZDQ6CWVi IDBhICAgICAgICAgICAgICAgIAlqbXAgICAgMjZlMCA8dnhsYW5fZmRiX2NyZWF0ZSsweDE1MD4K ICAgIDI2ZDY6CTBmIDFmIDQ0IDAwIDAwICAgICAgIAlub3BsICAgMHgwKCVyYXgsJXJheCwxKQoJ CQkJCQkgICZyZCk7CgoJCQlpZiAocmMgPCAwKQoJCQkJcmV0dXJuIHJjOwoJCQlub3RpZnkgfD0g cmM7CiAgICAyNmRiOgliOCBlZiBmZiBmZiBmZiAgICAgICAJbW92ICAgICQweGZmZmZmZmVmLCVl YXgKCQkrK3Z4bGFuLT5hZGRyY250OwoJCWhsaXN0X2FkZF9oZWFkX3JjdSgmZi0+aGxpc3QsCgkJ CQkgICB2eGxhbl9mZGJfaGVhZCh2eGxhbiwgbWFjKSk7Cgl9CgoJaWYgKG5vdGlmeSkgewogICAg MjZlMDoJNDggOGIgNGQgZDAgICAgICAgICAgCW1vdiAgICAtMHgzMCglcmJwKSwlcmN4CiAgICAy NmU0Ogk2NSA0OCAzMyAwYyAyNSAyOCAwMCAJeG9yICAgICVnczoweDI4LCVyY3gKICAgIDI2ZWI6 CTAwIDAwIAoJCWlmIChyZCA9PSBOVUxMKQogICAgMjZlZDoJMGYgODUgMDEgMDIgMDAgMDAgICAg CWpuZSAgICAyOGY0IDx2eGxhbl9mZGJfY3JlYXRlKzB4MzY0PgoJCQlyZCA9IGZpcnN0X3JlbW90 ZV9ydG5sKGYpOwoJCXZ4bGFuX2ZkYl9ub3RpZnkodnhsYW4sIGYsIHJkLCBSVE1fTkVXTkVJR0gp OwogICAgMjZmMzoJNDggODMgYzQgMjAgICAgICAgICAgCWFkZCAgICAkMHgyMCwlcnNwCiAgICAy NmY3Ogk1YiAgICAgICAgICAgICAgICAgICAJcG9wICAgICVyYngKICAgIDI2Zjg6CTQxIDVjICAg ICAgICAgICAgICAgIAlwb3AgICAgJXIxMgogICAgMjZmYToJNDEgNWQgICAgICAgICAgICAgICAg CXBvcCAgICAlcjEzCiAgICAyNmZjOgk0MSA1ZSAgICAgICAgICAgICAgICAJcG9wICAgICVyMTQK ICAgIDI2ZmU6CTQxIDVmICAgICAgICAgICAgICAgIAlwb3AgICAgJXIxNQogICAgMjcwMDoJNWQg ICAgICAgICAgICAgICAgICAgCXBvcCAgICAlcmJwCiAgICAyNzAxOgljMyAgICAgICAgICAgICAg ICAgICAJcmV0cSAgIAoJfQoKCXJldHVybiAwOwogICAgMjcwMjoJNDkgOGIgNzQgMjQgMzAgICAg ICAgCW1vdiAgICAweDMwKCVyMTIpLCVyc2kKICAgIDI3MDc6CTRjIDg5IGY5ICAgICAgICAgICAg IAltb3YgICAgJXIxNSwlcmN4CiAgICAyNzBhOgk0OCBjNyBjMiAwMCAwMCAwMCAwMCAJbW92ICAg ICQweDAsJXJkeAp9CiAgICAyNzExOgk0OCBjNyBjNyAwMCAwMCAwMCAwMCAJbW92ICAgICQweDAs JXJkaQogICAgMjcxODoJZTggMDAgMDAgMDAgMDAgICAgICAgCWNhbGxxICAyNzFkIDx2eGxhbl9m ZGJfY3JlYXRlKzB4MThkPgogICAgMjcxZDoJYjggZWYgZmYgZmYgZmYgICAgICAgCW1vdiAgICAk MHhmZmZmZmZlZiwlZWF4CiAgICAyNzIyOgllYiBiYyAgICAgICAgICAgICAgICAJam1wICAgIDI2 ZTAgPHZ4bGFuX2ZkYl9jcmVhdGUrMHgxNTA+CiAgICAyNzI0Ogk0MSBmNyBjNSAwMCAwNCAwMCAw MCAJdGVzdCAgICQweDQwMCwlcjEzZAogICAgMjcyYjoJMGYgODQgYTUgMDEgMDAgMDAgICAgCWpl ICAgICAyOGQ2IDx2eGxhbl9mZGJfY3JlYXRlKzB4MzQ2PgogICAgMjczMToJNDEgOGIgODQgMjQg NTggMDEgMDAgCW1vdiAgICAweDE1OCglcjEyKSwlZWF4CiAgICAyNzM4OgkwMCAKCWludCBub3Rp ZnkgPSAwOwoKCWYgPSBfX3Z4bGFuX2ZpbmRfbWFjKHZ4bGFuLCBtYWMpOwoJaWYgKGYpIHsKCQlp ZiAoZmxhZ3MgJiBOTE1fRl9FWENMKSB7CgkJCW5ldGRldl9kYmcodnhsYW4tPmRldiwKICAgIDI3 Mzk6CTg1IGMwICAgICAgICAgICAgICAgIAl0ZXN0ICAgJWVheCwlZWF4CiAgICAyNzNiOgk3NCAw ZSAgICAgICAgICAgICAgICAJamUgICAgIDI3NGIgPHZ4bGFuX2ZkYl9jcmVhdGUrMHgxYmI+CiAg ICAyNzNkOgk0MSAzYiA4NCAyNCBlYyAwMCAwMCAJY21wICAgIDB4ZWMoJXIxMiksJWVheAogICAg Mjc0NDoJMDAgCiAgICAyNzQ1OgkwZiA4NiA5NSAwMSAwMCAwMCAgICAJamJlICAgIDI4ZTAgPHZ4 bGFuX2ZkYl9jcmVhdGUrMHgzNTA+CiAgICAyNzRiOgk0MSA4MSBlNSAwMCAwMSAwMCAwMCAJYW5k ICAgICQweDEwMCwlcjEzZAoJCQkJICAgImxvc3QgcmFjZSB0byBjcmVhdGUgJXBNXG4iLCBtYWMp OwoJCQlyZXR1cm4gLUVFWElTVDsKICAgIDI3NTI6CTc0IDE4ICAgICAgICAgICAgICAgIAlqZSAg ICAgMjc2YyA8dnhsYW5fZmRiX2NyZWF0ZSsweDFkYz4KCQkJaWYgKHJjIDwgMCkKCQkJCXJldHVy biByYzsKCQkJbm90aWZ5IHw9IHJjOwoJCX0KCX0gZWxzZSB7CgkJaWYgKCEoZmxhZ3MgJiBOTE1f Rl9DUkVBVEUpKQogICAgMjc1NDoJNDEgOGIgMDcgICAgICAgICAgICAgCW1vdiAgICAoJXIxNSks JWVheAogICAgMjc1NzoJYTggMDEgICAgICAgICAgICAgICAgCXRlc3QgICAkMHgxLCVhbAogICAg Mjc1OToJMGYgODUgZjMgMDAgMDAgMDAgICAgCWpuZSAgICAyODUyIDx2eGxhbl9mZGJfY3JlYXRl KzB4MmMyPgogICAgMjc1ZjoJNDEgMGYgYjcgNTcgMDQgICAgICAgCW1vdnp3bCAweDQoJXIxNSks JWVkeAoJCQlyZXR1cm4gLUVOT0VOVDsKCgkJaWYgKHZ4bGFuLT5jZmcuYWRkcm1heCAmJgogICAg Mjc2NDoJMDkgYzIgICAgICAgICAgICAgICAgCW9yICAgICAlZWF4LCVlZHgKICAgIDI3NjY6CTBm IDg0IGU2IDAwIDAwIDAwICAgIAlqZSAgICAgMjg1MiA8dnhsYW5fZmRiX2NyZWF0ZSsweDJjMj4K ICAgIDI3NmM6CTBmIDFmIDQ0IDAwIDAwICAgICAgIAlub3BsICAgMHgwKCVyYXgsJXJheCwxKQog ICAgMjc3MToJNDggOGIgM2QgMDAgMDAgMDAgMDAgCW1vdiAgICAweDAoJXJpcCksJXJkaSAgICAg ICAgIyAyNzc4IDx2eGxhbl9mZGJfY3JlYXRlKzB4MWU4PgogICAgMjc3ODoJYmEgNTAgMDAgMDAg MDAgICAgICAgCW1vdiAgICAkMHg1MCwlZWR4CgkJICAgIHZ4bGFuLT5hZGRyY250ID49IHZ4bGFu LT5jZmcuYWRkcm1heCkKCQkJcmV0dXJuIC1FTk9TUEM7CgoJCS8qIERpc2FsbG93IHJlcGxhY2Ug dG8gYWRkIGEgbXVsdGljYXN0IGVudHJ5ICovCgkJaWYgKChmbGFncyAmIE5MTV9GX1JFUExBQ0Up ICYmCiAgICAyNzdkOgliZSAyMCAwMCAwOCAwMiAgICAgICAJbW92ICAgICQweDIwODAwMjAsJWVz aQogICAgMjc4MjoJZTggMDAgMDAgMDAgMDAgICAgICAgCWNhbGxxICAyNzg3IDx2eGxhbl9mZGJf Y3JlYXRlKzB4MWY3PgogICAgMjc4NzoJNDggODUgYzAgICAgICAgICAgICAgCXRlc3QgICAlcmF4 LCVyYXgKICAgIDI3OGE6CTQ4IDg5IGMzICAgICAgICAgICAgIAltb3YgICAgJXJheCwlcmJ4CiAg ICAyNzhkOgkwZiA4NCA1NyAwMSAwMCAwMCAgICAJamUgICAgIDI4ZWEgPHZ4bGFuX2ZkYl9jcmVh dGUrMHgzNWE+CgkJICAgIChpc19tdWx0aWNhc3RfZXRoZXJfYWRkcihtYWMpIHx8IGlzX3plcm9f ZXRoZXJfYWRkcihtYWMpKSkKICAgIDI3OTM6CTBmIGI3IDQ1IGM0ICAgICAgICAgIAltb3Z6d2wg LTB4M2MoJXJicCksJWVheAogICAgMjc5NzoJMGYgYjcgNTUgYzAgICAgICAgICAgCW1vdnp3bCAt MHg0MCglcmJwKSwlZWR4CiAgICAyNzliOgk0YyA4ZCA0ZCBjOCAgICAgICAgICAJbGVhICAgIC0w eDM4KCVyYnApLCVyOQogICAgMjc5ZjoJNDQgOGIgNDUgMTggICAgICAgICAgCW1vdiAgICAweDE4 KCVyYnApLCVyOGQKICAgIDI3YTM6CThiIDRkIDEwICAgICAgICAgICAgIAltb3YgICAgMHgxMCgl cmJwKSwlZWN4CiAgICAyN2E2Ogk0OCA4OSBkZiAgICAgICAgICAgICAJbW92ICAgICVyYngsJXJk aQogICAgMjdhOToJNDggOGIgNzUgYjggICAgICAgICAgCW1vdiAgICAtMHg0OCglcmJwKSwlcnNp CiAgICAyN2FkOgk0NCA4OCA3MyA0OCAgICAgICAgICAJbW92ICAgICVyMTRiLDB4NDgoJXJieCkK ICAgIDI3YjE6CTY2IDg5IDQzIDQ2ICAgICAgICAgIAltb3YgICAgJWF4LDB4NDYoJXJieCkKICAg IDI3YjU6CTQ4IDhiIDA1IDAwIDAwIDAwIDAwIAltb3YgICAgMHgwKCVyaXApLCVyYXggICAgICAg ICMgMjdiYyA8dnhsYW5fZmRiX2NyZWF0ZSsweDIyYz4KICAgIDI3YmM6CTQ4IDg5IDQzIDI4ICAg ICAgICAgIAltb3YgICAgJXJheCwweDI4KCVyYngpCgkJCXJldHVybiAtRU9QTk9UU1VQUDsKCgkJ bmV0ZGV2X2RiZyh2eGxhbi0+ZGV2LCAiYWRkICVwTSAtPiAlcElTXG4iLCBtYWMsIGlwKTsKCQlm ID0ga21hbGxvYyhzaXplb2YoKmYpLCBHRlBfQVRPTUlDKTsKCQlpZiAoIWYpCiAgICAyN2MwOgk0 OCA4OSA0MyAyMCAgICAgICAgICAJbW92ICAgICVyYXgsMHgyMCglcmJ4KQoJCQlyZXR1cm4gLUVO T01FTTsKCgkJbm90aWZ5ID0gMTsKCQlmLT5zdGF0ZSA9IHN0YXRlOwogICAgMjdjNDoJNDggOGQg NDMgMzAgICAgICAgICAgCWxlYSAgICAweDMwKCVyYngpLCVyYXgKCQlmLT5mbGFncyA9IG5kbV9m bGFnczsKCQlmLT51cGRhdGVkID0gZi0+dXNlZCA9IGppZmZpZXM7CgkJSU5JVF9MSVNUX0hFQUQo JmYtPnJlbW90ZXMpOwoJCW1lbWNweShmLT5ldGhfYWRkciwgbWFjLCBFVEhfQUxFTik7CgoJCXZ4 bGFuX2ZkYl9hcHBlbmQoZiwgaXAsIHBvcnQsIHZuaSwgaWZpbmRleCwgJnJkKTsKICAgIDI3Yzg6 CTQ4IDg5IDQzIDMwICAgICAgICAgIAltb3YgICAgJXJheCwweDMwKCVyYngpCiAgICAyN2NjOgk0 OCA4OSA0MyAzOCAgICAgICAgICAJbW92ICAgICVyYXgsMHgzOCglcmJ4KQogICAgMjdkMDoJNDEg OGIgMDcgICAgICAgICAgICAgCW1vdiAgICAoJXIxNSksJWVheAogICAgMjdkMzoJODkgNDMgNDAg ICAgICAgICAgICAgCW1vdiAgICAlZWF4LDB4NDAoJXJieCkKICAgIDI3ZDY6CTQxIDBmIGI3IDQ3 IDA0ICAgICAgIAltb3Z6d2wgMHg0KCVyMTUpLCVlYXgKICAgIDI3ZGI6CTY2IDg5IDQzIDQ0ICAg ICAgICAgIAltb3YgICAgJWF4LDB4NDQoJXJieCkKCQlpZiAoIWYpCgkJCXJldHVybiAtRU5PTUVN OwoKCQlub3RpZnkgPSAxOwoJCWYtPnN0YXRlID0gc3RhdGU7CgkJZi0+ZmxhZ3MgPSBuZG1fZmxh Z3M7CiAgICAyN2RmOgllOCBiYyBmYyBmZiBmZiAgICAgICAJY2FsbHEgIDI0YTAgPHZ4bGFuX2Zk Yl9hcHBlbmQ+CgkJZiA9IGttYWxsb2Moc2l6ZW9mKCpmKSwgR0ZQX0FUT01JQyk7CgkJaWYgKCFm KQoJCQlyZXR1cm4gLUVOT01FTTsKCgkJbm90aWZ5ID0gMTsKCQlmLT5zdGF0ZSA9IHN0YXRlOwog ICAgMjdlNDoJNDEgODMgODQgMjQgZWMgMDAgMDAgCWFkZGwgICAkMHgxLDB4ZWMoJXIxMikKICAg IDI3ZWI6CTAwIDAxIAoJCWYtPmZsYWdzID0gbmRtX2ZsYWdzOwoJCWYtPnVwZGF0ZWQgPSBmLT51 c2VkID0gamlmZmllczsKICAgIDI3ZWQ6CTQ4IGJhIGViIDgzIGI1IDgwIDQ2IAltb3ZhYnMgJDB4 NjFjODg2NDY4MGI1ODNlYiwlcmR4CiAgICAyN2Y0Ogk4NiBjOCA2MSAKCQlJTklUX0xJU1RfSEVB RCgmZi0+cmVtb3Rlcyk7CiAgICAyN2Y3Ogk0OSA4YiAwNyAgICAgICAgICAgICAJbW92ICAgICgl cjE1KSwlcmF4CiAgICAyN2ZhOgk0OCBjMSBlMCAxMCAgICAgICAgICAJc2hsICAgICQweDEwLCVy YXgKCXN0cnVjdCBsaXN0X2hlYWQgbmFtZSA9IExJU1RfSEVBRF9JTklUKG5hbWUpCgpzdGF0aWMg aW5saW5lIHZvaWQgSU5JVF9MSVNUX0hFQUQoc3RydWN0IGxpc3RfaGVhZCAqbGlzdCkKewoJV1JJ VEVfT05DRShsaXN0LT5uZXh0LCBsaXN0KTsKCWxpc3QtPnByZXYgPSBsaXN0OwogICAgMjdmZToJ NDggMGYgYWYgYzIgICAgICAgICAgCWltdWwgICAlcmR4LCVyYXgKCQltZW1jcHkoZi0+ZXRoX2Fk ZHIsIG1hYywgRVRIX0FMRU4pOwogICAgMjgwMjoJNDggYzEgZTggMzggICAgICAgICAgCXNociAg ICAkMHgzOCwlcmF4CiAgICAyODA2Ogk0OCA4MyBjMCAyYyAgICAgICAgICAJYWRkICAgICQweDJj LCVyYXgKICAgIDI4MGE6CTQ5IDhkIDE0IGM0ICAgICAgICAgIAlsZWEgICAgKCVyMTIsJXJheCw4 KSwlcmR4CiAgICAyODBlOgk0OSA4YiAwNCBjNCAgICAgICAgICAJbW92ICAgICglcjEyLCVyYXgs OCksJXJheAoKCQl2eGxhbl9mZGJfYXBwZW5kKGYsIGlwLCBwb3J0LCB2bmksIGlmaW5kZXgsICZy ZCk7CiAgICAyODEyOgk0OCA4OSA1MyAwOCAgICAgICAgICAJbW92ICAgICVyZHgsMHg4KCVyYngp CgoJCSsrdnhsYW4tPmFkZHJjbnQ7CiAgICAyODE2Ogk0OCA4OSAwMyAgICAgICAgICAgICAJbW92 ICAgICVyYXgsKCVyYngpCiAgICAyODE5Ogk0OCA4NSBjMCAgICAgICAgICAgICAJdGVzdCAgICVy YXgsJXJheAogICAgMjgxYzoJNDggODkgMWEgICAgICAgICAgICAgCW1vdiAgICAlcmJ4LCglcmR4 KQojZW5kaWYKc3RhdGljIF9fYWx3YXlzX2lubGluZSB1MzIgaGFzaF82NF9nZW5lcmljKHU2NCB2 YWwsIHVuc2lnbmVkIGludCBiaXRzKQp7CiNpZiBCSVRTX1BFUl9MT05HID09IDY0CgkvKiA2NHg2 NC1iaXQgbXVsdGlwbHkgaXMgZWZmaWNpZW50IG9uIGFsbCA2NC1iaXQgcHJvY2Vzc29ycyAqLwoJ cmV0dXJuIHZhbCAqIEdPTERFTl9SQVRJT182NCA+PiAoNjQgLSBiaXRzKTsKICAgIDI4MWY6CTBm IDg0IDkwIGZlIGZmIGZmICAgIAlqZSAgICAgMjZiNSA8dnhsYW5fZmRiX2NyZWF0ZSsweDEyNT4K ICAgIDI4MjU6CTQ4IDg5IDU4IDA4ICAgICAgICAgIAltb3YgICAgJXJieCwweDgoJXJheCkKICAg IDI4Mjk6CWU5IDg3IGZlIGZmIGZmICAgICAgIAlqbXBxICAgMjZiNSA8dnhsYW5fZmRiX2NyZWF0 ZSsweDEyNT4KICAgIDI4MmU6CTQ5IDhiIDc0IDI0IDMwICAgICAgIAltb3YgICAgMHgzMCglcjEy KSwlcnNpCgovKiBIYXNoIGNoYWluIHRvIHVzZSBnaXZlbiBtYWMgYWRkcmVzcyAqLwpzdGF0aWMg aW5saW5lIHN0cnVjdCBobGlzdF9oZWFkICp2eGxhbl9mZGJfaGVhZChzdHJ1Y3QgdnhsYW5fZGV2 ICp2eGxhbiwKCQkJCQkJY29uc3QgdTggKm1hYykKewoJcmV0dXJuICZ2eGxhbi0+ZmRiX2hlYWRb ZXRoX2hhc2gobWFjKV07CiAgICAyODMzOgk0YyA4YiA0NSBiOCAgICAgICAgICAJbW92ICAgIC0w eDQ4KCVyYnApLCVyOAogICAgMjgzNzoJNGMgODkgZjkgICAgICAgICAgICAgCW1vdiAgICAlcjE1 LCVyY3gKICAgIDI4M2E6CTQ4IGM3IGMyIDAwIDAwIDAwIDAwIAltb3YgICAgJDB4MCwlcmR4CiAq IGxpc3QtdHJhdmVyc2FsIHByaW1pdGl2ZSBtdXN0IGJlIGd1YXJkZWQgYnkgcmN1X3JlYWRfbG9j aygpLgogKi8Kc3RhdGljIGlubGluZSB2b2lkIGhsaXN0X2FkZF9oZWFkX3JjdShzdHJ1Y3QgaGxp c3Rfbm9kZSAqbiwKCQkJCQlzdHJ1Y3QgaGxpc3RfaGVhZCAqaCkKewoJc3RydWN0IGhsaXN0X25v ZGUgKmZpcnN0ID0gaC0+Zmlyc3Q7CiAgICAyODQxOgk0OCBjNyBjNyAwMCAwMCAwMCAwMCAJbW92 ICAgICQweDAsJXJkaQoKCW4tPm5leHQgPSBmaXJzdDsKICAgIDI4NDg6CWU4IDAwIDAwIDAwIDAw ICAgICAgIAljYWxscSAgMjg0ZCA8dnhsYW5fZmRiX2NyZWF0ZSsweDJiZD4KICAgIDI4NGQ6CWU5 IDFmIGZmIGZmIGZmICAgICAgIAlqbXBxICAgMjc3MSA8dnhsYW5fZmRiX2NyZWF0ZSsweDFlMT4K CW4tPnBwcmV2ID0gJmgtPmZpcnN0OwoJcmN1X2Fzc2lnbl9wb2ludGVyKGhsaXN0X2ZpcnN0X3Jj dShoKSwgbik7CglpZiAoZmlyc3QpCiAgICAyODUyOgliOCBhMSBmZiBmZiBmZiAgICAgICAJbW92 ICAgICQweGZmZmZmZmExLCVlYXgKCQlmaXJzdC0+cHByZXYgPSAmbi0+bmV4dDsKICAgIDI4NTc6 CWU5IDg0IGZlIGZmIGZmICAgICAgIAlqbXBxICAgMjZlMCA8dnhsYW5fZmRiX2NyZWF0ZSsweDE1 MD4KICAgIDI4NWM6CTQ4IDhiIDQzIDMwICAgICAgICAgIAltb3YgICAgMHgzMCglcmJ4KSwlcmF4 CgkJLyogRGlzYWxsb3cgcmVwbGFjZSB0byBhZGQgYSBtdWx0aWNhc3QgZW50cnkgKi8KCQlpZiAo KGZsYWdzICYgTkxNX0ZfUkVQTEFDRSkgJiYKCQkgICAgKGlzX211bHRpY2FzdF9ldGhlcl9hZGRy KG1hYykgfHwgaXNfemVyb19ldGhlcl9hZGRyKG1hYykpKQoJCQlyZXR1cm4gLUVPUE5PVFNVUFA7 CgoJCW5ldGRldl9kYmcodnhsYW4tPmRldiwgImFkZCAlcE0gLT4gJXBJU1xuIiwgbWFjLCBpcCk7 CiAgICAyODYwOgk0OCA4ZCA1MCBkOCAgICAgICAgICAJbGVhICAgIC0weDI4KCVyYXgpLCVyZHgK ICAgIDI4NjQ6CTQ4IDg5IDU1IGM4ICAgICAgICAgIAltb3YgICAgJXJkeCwtMHgzOCglcmJwKQog ICAgMjg2ODoJZTkgNTUgZmUgZmYgZmYgICAgICAgCWptcHEgICAyNmMyIDx2eGxhbl9mZGJfY3Jl YXRlKzB4MTMyPgogICAgMjg2ZDoJNDggOGIgNDMgMzAgICAgICAgICAgCW1vdiAgICAweDMwKCVy YngpLCVyYXgKICAgIDI4NzE6CTQ4IDhkIDRiIDMwICAgICAgICAgIAlsZWEgICAgMHgzMCglcmJ4 KSwlcmN4CiAgICAyODc1Ogk0OCAzOSBjMSAgICAgICAgICAgICAJY21wICAgICVyYXgsJXJjeAog ICAgMjg3ODoJMGYgODQgZjMgZmQgZmYgZmYgICAgCWplICAgICAyNjcxIDx2eGxhbl9mZGJfY3Jl YXRlKzB4ZTE+CiAgICAyODdlOgk0OCA4YiA0MyAzMCAgICAgICAgICAJbW92ICAgIDB4MzAoJXJi eCksJXJheAoJCQlpZiAoIShpc19tdWx0aWNhc3RfZXRoZXJfYWRkcihmLT5ldGhfYWRkcikgfHwK CQkJICAgICBpc196ZXJvX2V0aGVyX2FkZHIoZi0+ZXRoX2FkZHIpKSkgewoJCQkJbm90aWZ5IHw9 IHZ4bGFuX2ZkYl9yZXBsYWNlKGYsIGlwLCBwb3J0LCB2bmksCgkJCQkJCQkgICBpZmluZGV4KTsK CQkJfSBlbHNlCgkJCQlyZXR1cm4gLUVPUE5PVFNVUFA7CiAgICAyODgyOgk0OCA4MyBmOCAyOCAg ICAgICAgICAJY21wICAgICQweDI4LCVyYXgKICAgIDI4ODY6CTBmIDg0IGU1IGZkIGZmIGZmICAg IAlqZSAgICAgMjY3MSA8dnhsYW5fZmRiX2NyZWF0ZSsweGUxPgoJcmV0dXJuIGxpc3RfZW50cnlf cmN1KGZkYi0+cmVtb3Rlcy5uZXh0LCBzdHJ1Y3QgdnhsYW5fcmRzdCwgbGlzdCk7Cn0KCnN0YXRp YyBpbmxpbmUgc3RydWN0IHZ4bGFuX3Jkc3QgKmZpcnN0X3JlbW90ZV9ydG5sKHN0cnVjdCB2eGxh bl9mZGIgKmZkYikKewoJcmV0dXJuIGxpc3RfZmlyc3RfZW50cnkoJmZkYi0+cmVtb3Rlcywgc3Ry dWN0IHZ4bGFuX3Jkc3QsIGxpc3QpOwogICAgMjg4YzoJNDggOGIgMTUgMDAgMDAgMDAgMDAgCW1v diAgICAweDAoJXJpcCksJXJkeCAgICAgICAgIyAyODkzIDx2eGxhbl9mZGJfY3JlYXRlKzB4MzAz PgogICAgMjg5MzoJNDggOGIgN2QgYjggICAgICAgICAgCW1vdiAgICAtMHg0OCglcmJwKSwlcmRp CgkJCQkgICB2eGxhbl9mZGJfaGVhZCh2eGxhbiwgbWFjKSk7Cgl9CgoJaWYgKG5vdGlmeSkgewoJ CWlmIChyZCA9PSBOVUxMKQoJCQlyZCA9IGZpcnN0X3JlbW90ZV9ydG5sKGYpOwogICAgMjg5NzoJ MGYgYjcgNzUgYzAgICAgICAgICAgCW1vdnp3bCAtMHg0MCglcmJwKSwlZXNpCiAgICAyODliOgk0 OCA4OSA1MCAyOCAgICAgICAgICAJbW92ICAgICVyZHgsMHgyOCglcmF4KQp9KQoKc3RhdGljIF9f YWx3YXlzX2lubGluZQp2b2lkIF9fcmVhZF9vbmNlX3NpemUoY29uc3Qgdm9sYXRpbGUgdm9pZCAq cCwgdm9pZCAqcmVzLCBpbnQgc2l6ZSkKewoJX19SRUFEX09OQ0VfU0laRTsKICAgIDI4OWY6CTQ4 IDhiIDE3ICAgICAgICAgICAgIAltb3YgICAgKCVyZGkpLCVyZHgKCglyZCA9IHZ4bGFuX2ZkYl9m aW5kX3Jkc3QoZiwgaXAsIHBvcnQsIHZuaSwgaWZpbmRleCk7CglpZiAocmQpCgkJcmV0dXJuIDA7 CgoJcmQgPSBsaXN0X2ZpcnN0X2VudHJ5X29yX251bGwoJmYtPnJlbW90ZXMsIHN0cnVjdCB2eGxh bl9yZHN0LCBsaXN0KTsKICAgIDI4YTI6CTQ4IDg5IDUwIGQ4ICAgICAgICAgIAltb3YgICAgJXJk eCwtMHgyOCglcmF4KQogICAgMjhhNjoJNDggOGIgNTcgMDggICAgICAgICAgCW1vdiAgICAweDgo JXJkaSksJXJkeAogICAgMjhhYToJNDggODkgNTAgZTAgICAgICAgICAgCW1vdiAgICAlcmR4LC0w eDIwKCVyYXgpCiAgICAyOGFlOgk0OCA4YiA1NyAxMCAgICAgICAgICAJbW92ICAgIDB4MTAoJXJk aSksJXJkeAoJaWYgKCFyZCkKICAgIDI4YjI6CTQ4IDg5IDUwIGU4ICAgICAgICAgIAltb3YgICAg JXJkeCwtMHgxOCglcmF4KQogICAgMjhiNjoJOGIgNTcgMTggICAgICAgICAgICAgCW1vdiAgICAw eDE4KCVyZGkpLCVlZHgKICAgIDI4Yjk6CTY2IDg5IDcwIGY0ICAgICAgICAgIAltb3YgICAgJXNp LC0weGMoJXJheCkKICoJVGhpcyBkbyBub3QgZnJlZSB0aGUgY2FjaGVkIGRzdCB0byBhdm9pZCBy YWNlcyBhbmQgY29udGVudGlvbnMuCiAqCXRoZSBkc3Qgd2lsbCBiZSBmcmVlZCBvbiBsYXRlciBj YWNoZSBsb29rdXAuCiAqLwpzdGF0aWMgaW5saW5lIHZvaWQgZHN0X2NhY2hlX3Jlc2V0KHN0cnVj dCBkc3RfY2FjaGUgKmRzdF9jYWNoZSkKewoJZHN0X2NhY2hlLT5yZXNldF90cyA9IGppZmZpZXM7 CiAgICAyOGJkOgk4YiA3ZCAxMCAgICAgICAgICAgICAJbW92ICAgIDB4MTAoJXJicCksJWVkaQog ICAgMjhjMDoJOGIgNzUgMTggICAgICAgICAgICAgCW1vdiAgICAweDE4KCVyYnApLCVlc2kKCQly ZXR1cm4gMDsKCglkc3RfY2FjaGVfcmVzZXQoJnJkLT5kc3RfY2FjaGUpOwoJcmQtPnJlbW90ZV9p cCA9ICppcDsKICAgIDI4YzM6CTg5IDUwIGYwICAgICAgICAgICAgIAltb3YgICAgJWVkeCwtMHgx MCglcmF4KQogICAgMjhjNjoJYmEgMDEgMDAgMDAgMDAgICAgICAgCW1vdiAgICAkMHgxLCVlZHgK ICAgIDI4Y2I6CTg5IDc4IGY4ICAgICAgICAgICAgIAltb3YgICAgJWVkaSwtMHg4KCVyYXgpCiAg ICAyOGNlOgk4OSA3MCBmYyAgICAgICAgICAgICAJbW92ICAgICVlc2ksLTB4NCglcmF4KQogICAg MjhkMToJZTkgOWIgZmQgZmYgZmYgICAgICAgCWptcHEgICAyNjcxIDx2eGxhbl9mZGJfY3JlYXRl KzB4ZTE+CiAgICAyOGQ2OgliOCBmZSBmZiBmZiBmZiAgICAgICAJbW92ICAgICQweGZmZmZmZmZl LCVlYXgKICAgIDI4ZGI6CWU5IDAwIGZlIGZmIGZmICAgICAgIAlqbXBxICAgMjZlMCA8dnhsYW5f ZmRiX2NyZWF0ZSsweDE1MD4KICAgIDI4ZTA6CWI4IGU0IGZmIGZmIGZmICAgICAgIAltb3YgICAg JDB4ZmZmZmZmZTQsJWVheAogICAgMjhlNToJZTkgZjYgZmQgZmYgZmYgICAgICAgCWptcHEgICAy NmUwIDx2eGxhbl9mZGJfY3JlYXRlKzB4MTUwPgoJcmQtPnJlbW90ZV9wb3J0ID0gcG9ydDsKICAg IDI4ZWE6CWI4IGY0IGZmIGZmIGZmICAgICAgIAltb3YgICAgJDB4ZmZmZmZmZjQsJWVheAoJcmQt PnJlbW90ZV92bmkgPSB2bmk7CiAgICAyOGVmOgllOSBlYyBmZCBmZiBmZiAgICAgICAJam1wcSAg IDI2ZTAgPHZ4bGFuX2ZkYl9jcmVhdGUrMHgxNTA+CglyZCA9IGxpc3RfZmlyc3RfZW50cnlfb3Jf bnVsbCgmZi0+cmVtb3Rlcywgc3RydWN0IHZ4bGFuX3Jkc3QsIGxpc3QpOwoJaWYgKCFyZCkKCQly ZXR1cm4gMDsKCglkc3RfY2FjaGVfcmVzZXQoJnJkLT5kc3RfY2FjaGUpOwoJcmQtPnJlbW90ZV9p cCA9ICppcDsKICAgIDI4ZjQ6CWU4IDAwIDAwIDAwIDAwICAgICAgIAljYWxscSAgMjhmOSA8dnhs YW5fZmRiX2NyZWF0ZSsweDM2OT4KCXJkLT5yZW1vdGVfcG9ydCA9IHBvcnQ7CglyZC0+cmVtb3Rl X3ZuaSA9IHZuaTsKCXJkLT5yZW1vdGVfaWZpbmRleCA9IGlmaW5kZXg7CglyZXR1cm4gMTsKICAg IDI4Zjk6CTBmIDFmIDgwIDAwIDAwIDAwIDAwIAlub3BsICAgMHgwKCVyYXgpCgowMDAwMDAwMDAw MDAyOTAwIDx2eGxhbl9kZXZfY29uZmlndXJlPjoKCglkc3RfY2FjaGVfcmVzZXQoJnJkLT5kc3Rf Y2FjaGUpOwoJcmQtPnJlbW90ZV9pcCA9ICppcDsKCXJkLT5yZW1vdGVfcG9ydCA9IHBvcnQ7Cgly ZC0+cmVtb3RlX3ZuaSA9IHZuaTsKCXJkLT5yZW1vdGVfaWZpbmRleCA9IGlmaW5kZXg7CiAgICAy OTAwOgllOCAwMCAwMCAwMCAwMCAgICAgICAJY2FsbHEgIDI5MDUgPHZ4bGFuX2Rldl9jb25maWd1 cmUrMHg1PgogICAgMjkwNToJNTUgICAgICAgICAgICAgICAgICAgCXB1c2ggICAlcmJwCgkJCQly ZXR1cm4gcmM7CgkJCW5vdGlmeSB8PSByYzsKCQl9Cgl9IGVsc2UgewoJCWlmICghKGZsYWdzICYg TkxNX0ZfQ1JFQVRFKSkKCQkJcmV0dXJuIC1FTk9FTlQ7CiAgICAyOTA2Ogk0OCA4OSBlNSAgICAg ICAgICAgICAJbW92ICAgICVyc3AsJXJicAogICAgMjkwOToJNDEgNTcgICAgICAgICAgICAgICAg CXB1c2ggICAlcjE1CiAgICAyOTBiOgk0MSA1NiAgICAgICAgICAgICAgICAJcHVzaCAgICVyMTQK ICAgIDI5MGQ6CTQxIDU1ICAgICAgICAgICAgICAgIAlwdXNoICAgJXIxMwogICAgMjkwZjoJNDEg NTQgICAgICAgICAgICAgICAgCXB1c2ggICAlcjEyCgoJCWlmICh2eGxhbi0+Y2ZnLmFkZHJtYXgg JiYKCQkgICAgdnhsYW4tPmFkZHJjbnQgPj0gdnhsYW4tPmNmZy5hZGRybWF4KQoJCQlyZXR1cm4g LUVOT1NQQzsKICAgIDI5MTE6CTQ5IDg5IGQ0ICAgICAgICAgICAgIAltb3YgICAgJXJkeCwlcjEy CiAgICAyOTE0Ogk1MyAgICAgICAgICAgICAgICAgICAJcHVzaCAgICVyYngKICAgIDI5MTU6CTQ4 IDg5IGYzICAgICAgICAgICAgIAltb3YgICAgJXJzaSwlcmJ4CiAgICAyOTE4Ogk0YyA4ZCBhZSA0 MCAwOCAwMCAwMCAJbGVhICAgIDB4ODQwKCVyc2kpLCVyMTMKCQkJcmV0dXJuIC1FT1BOT1RTVVBQ OwoKCQluZXRkZXZfZGJnKHZ4bGFuLT5kZXYsICJhZGQgJXBNIC0+ICVwSVNcbiIsIG1hYywgaXAp OwoJCWYgPSBrbWFsbG9jKHNpemVvZigqZiksIEdGUF9BVE9NSUMpOwoJCWlmICghZikKCQkJcmV0 dXJuIC1FTk9NRU07CiAgICAyOTFmOgk0OCA4MyBlYyAyMCAgICAgICAgICAJc3ViICAgICQweDIw LCVyc3AKICAgIDI5MjM6CThiIDA1IDAwIDAwIDAwIDAwICAgIAltb3YgICAgMHgwKCVyaXApLCVl YXggICAgICAgICMgMjkyOSA8dnhsYW5fZGV2X2NvbmZpZ3VyZSsweDI5PgoJCQlyZCA9IGZpcnN0 X3JlbW90ZV9ydG5sKGYpOwoJCXZ4bGFuX2ZkYl9ub3RpZnkodnhsYW4sIGYsIHJkLCBSVE1fTkVX TkVJR0gpOwoJfQoKCXJldHVybiAwOwp9CiAgICAyOTI5Ogk0OCA4YiA5NyA4OCAxNCAwMCAwMCAJ bW92ICAgIDB4MTQ4OCglcmRpKSwlcmR4CglyZXR1cm4gcmV0Owp9CgpzdGF0aWMgaW50IHZ4bGFu X2Rldl9jb25maWd1cmUoc3RydWN0IG5ldCAqc3JjX25ldCwgc3RydWN0IG5ldF9kZXZpY2UgKmRl diwKCQkJICAgICAgIHN0cnVjdCB2eGxhbl9jb25maWcgKmNvbmYpCnsKICAgIDI5MzA6CTBmIGI3 IDhlIDdjIDA5IDAwIDAwIAltb3Z6d2wgMHg5N2MoJXJzaSksJWVjeAogICAgMjkzNzoJODMgZTgg MDEgICAgICAgICAgICAgCXN1YiAgICAkMHgxLCVlYXgKICAgIDI5M2E6CTQ4IDk4ICAgICAgICAg ICAgICAgIAljbHRxICAgCiAgICAyOTNjOgk0YyA4YiA3NCBjMiAxOCAgICAgICAJbW92ICAgIDB4 MTgoJXJkeCwlcmF4LDgpLCVyMTQKICAgIDI5NDE6CTQxIDhiIDQ0IDI0IDUwICAgICAgIAltb3Yg ICAgMHg1MCglcjEyKSwlZWF4CiAgICAyOTQ2OglmNiBjNCA0MCAgICAgICAgICAgICAJdGVzdCAg ICQweDQwLCVhaAogICAgMjk0OToJMGYgODQgODIgMDIgMDAgMDAgICAgCWplICAgICAyYmQxIDx2 eGxhbl9kZXZfY29uZmlndXJlKzB4MmQxPgogICAgMjk0ZjoJMjUgMWYgYmUgZmYgZmYgICAgICAg CWFuZCAgICAkMHhmZmZmYmUxZiwlZWF4CiAgICAyOTU0OgkzZCAwMCAyMCAwMCAwMCAgICAgICAJ Y21wICAgICQweDIwMDAsJWVheAogICAgMjk1OToJMGYgODUgMGEgMDUgMDAgMDAgICAgCWpuZSAg ICAyZTY5IDx2eGxhbl9kZXZfY29uZmlndXJlKzB4NTY5PgogICAgMjk1ZjoJNDEgYjkgZmUgZmYg ZmYgZmYgICAgCW1vdiAgICAkMHhmZmZmZmZmZSwlcjlkCglzdHJ1Y3QgdnhsYW5fZGV2ICp2eGxh biA9IG5ldGRldl9wcml2KGRldiksICp0bXA7CglzdHJ1Y3QgdnhsYW5fcmRzdCAqZHN0ID0gJnZ4 bGFuLT5kZWZhdWx0X2RzdDsKCXVuc2lnbmVkIHNob3J0IG5lZWRlZF9oZWFkcm9vbSA9IEVUSF9I TEVOOwoJaW50IGVycjsKCWJvb2wgdXNlX2lwdjYgPSBmYWxzZTsKCV9fYmUxNiBkZWZhdWx0X3Bv cnQgPSB2eGxhbi0+Y2ZnLmRzdF9wb3J0OwogICAgMjk2NToJNDUgMzEgZDIgICAgICAgICAgICAg CXhvciAgICAlcjEwZCwlcjEwZAogICAgMjk2ODoJNDggYzcgODYgMzAgMDIgMDAgMDAgCW1vdnEg ICAkMHgwLDB4MjMwKCVyc2kpCiAgICAyOTZmOgkwMCAwMCAwMCAwMCAKCXN0cnVjdCBuZXRfZGV2 aWNlICpsb3dlcmRldiA9IE5VTEw7CgoJaWYgKGNvbmYtPmZsYWdzICYgVlhMQU5fRl9HUEUpIHsK ICAgIDI5NzM6CTY2IDQ0IDg5IDhlIDRjIDAyIDAwIAltb3YgICAgJXI5dywweDI0YyglcnNpKQog ICAgMjk3YToJMDAgCiAgICAyOTdiOgk2NiA0NCA4OSA5NiA0ZSAwMiAwMCAJbW92ICAgICVyMTB3 LDB4MjRlKCVyc2kpCiAgICAyOTgyOgkwMCAKCQkvKiBGb3Igbm93LCBhbGxvdyBHUEUgb25seSB0 b2dldGhlciB3aXRoIENPTExFQ1RfTUVUQURBVEEuCgkJICogVGhpcyBjYW4gYmUgcmVsYXhlZCBs YXRlcjsgaW4gc3VjaCBjYXNlLCB0aGUgb3RoZXIgc2lkZQoJCSAqIG9mIHRoZSBQdFAgbGluayB3 aWxsIGhhdmUgdG8gYmUgcHJvdmlkZWQuCgkJICovCgkJaWYgKChjb25mLT5mbGFncyAmIH5WWExB Tl9GX0FMTE9XRURfR1BFKSB8fAogICAgMjk4MzoJYzYgODYgNzUgMDIgMDAgMDAgMDAgCW1vdmIg ICAkMHgwLDB4Mjc1KCVyc2kpCiAgICAyOThhOgljNyA4NiAzOCAwMiAwMCAwMCA5MCAJbW92bCAg ICQweDEwOTAsMHgyMzgoJXJzaSkKICAgIDI5OTE6CTEwIDAwIDAwIAp9CgpzdGF0aWMgdm9pZCB2 eGxhbl9yYXdfc2V0dXAoc3RydWN0IG5ldF9kZXZpY2UgKmRldikKewoJZGV2LT5oZWFkZXJfb3Bz ID0gTlVMTDsKCWRldi0+dHlwZSA9IEFSUEhSRF9OT05FOwogICAgMjk5NDoJNDggYzcgODYgMTAg MDIgMDAgMDAgCW1vdnEgICAkMHgwLDB4MjEwKCVyc2kpCiAgICAyOTliOgkwMCAwMCAwMCAwMCAK CWRldi0+bmV0ZGV2X29wcyA9ICZ2eGxhbl9uZXRkZXZfZXRoZXJfb3BzOwp9CgpzdGF0aWMgdm9p ZCB2eGxhbl9yYXdfc2V0dXAoc3RydWN0IG5ldF9kZXZpY2UgKmRldikKewoJZGV2LT5oZWFkZXJf b3BzID0gTlVMTDsKICAgIDI5OWY6CTQ4IDg5IGJiIDc4IDA4IDAwIDAwIAltb3YgICAgJXJkaSww eDg3OCglcmJ4KQoJZGV2LT50eXBlID0gQVJQSFJEX05PTkU7CiAgICAyOWE2Ogk0MSA4YiA0NCAy NCAzOCAgICAgICAJbW92ICAgIDB4MzgoJXIxMiksJWVheAoJZGV2LT5oYXJkX2hlYWRlcl9sZW4g PSAwOwogICAgMjlhYjoJNGMgOGQgYmIgODAgMDggMDAgMDAgCWxlYSAgICAweDg4MCglcmJ4KSwl cjE1CiAgICAyOWIyOgk4OSA4MyBhMCAwOCAwMCAwMCAgICAJbW92ICAgICVlYXgsMHg4YTAoJXJi eCkKCWRldi0+YWRkcl9sZW4gPSAwOwogICAgMjliODoJNDkgOGIgMDQgMjQgICAgICAgICAgCW1v diAgICAoJXIxMiksJXJheAoJZGV2LT5mbGFncyA9IElGRl9QT0lOVE9QT0lOVCB8IElGRl9OT0FS UCB8IElGRl9NVUxUSUNBU1Q7CiAgICAyOWJjOgk0OCA4OSA4MyA4MCAwOCAwMCAwMCAJbW92ICAg ICVyYXgsMHg4ODAoJXJieCkKICAgIDI5YzM6CTQ5IDhiIDQ0IDI0IDA4ICAgICAgIAltb3YgICAg MHg4KCVyMTIpLCVyYXgKCWRldi0+bmV0ZGV2X29wcyA9ICZ2eGxhbl9uZXRkZXZfcmF3X29wczsK ICAgIDI5Yzg6CTQ5IDg5IDQ3IDA4ICAgICAgICAgIAltb3YgICAgJXJheCwweDgoJXIxNSkKICAg IDI5Y2M6CTQ5IDhiIDQ0IDI0IDEwICAgICAgIAltb3YgICAgMHgxMCglcjEyKSwlcmF4CgkJdnhs YW5fcmF3X3NldHVwKGRldik7Cgl9IGVsc2UgewoJCXZ4bGFuX2V0aGVyX3NldHVwKGRldik7Cgl9 CgoJdnhsYW4tPm5ldCA9IHNyY19uZXQ7CiAgICAyOWQxOgk0OSA4OSA0NyAxMCAgICAgICAgICAJ bW92ICAgICVyYXgsMHgxMCglcjE1KQogICAgMjlkNToJNDEgOGIgNDQgMjQgMTggICAgICAgCW1v diAgICAweDE4KCVyMTIpLCVlYXgKCglkc3QtPnJlbW90ZV92bmkgPSBjb25mLT52bmk7CiAgICAy OWRhOgk0MSA4OSA0NyAxOCAgICAgICAgICAJbW92ICAgICVlYXgsMHgxOCglcjE1KQoKCW1lbWNw eSgmZHN0LT5yZW1vdGVfaXAsICZjb25mLT5yZW1vdGVfaXAsIHNpemVvZihjb25mLT5yZW1vdGVf aXApKTsKICAgIDI5ZGU6CTBmIGI3IDgzIDgwIDA4IDAwIDAwIAltb3Z6d2wgMHg4ODAoJXJieCks JWVheAoJCXZ4bGFuX2V0aGVyX3NldHVwKGRldik7Cgl9CgoJdnhsYW4tPm5ldCA9IHNyY19uZXQ7 CgoJZHN0LT5yZW1vdGVfdm5pID0gY29uZi0+dm5pOwogICAgMjllNToJNjYgODUgYzAgICAgICAg ICAgICAgCXRlc3QgICAlYXgsJWF4CgoJbWVtY3B5KCZkc3QtPnJlbW90ZV9pcCwgJmNvbmYtPnJl bW90ZV9pcCwgc2l6ZW9mKGNvbmYtPnJlbW90ZV9pcCkpOwogICAgMjllODoJMGYgODUgYjEgMDIg MDAgMDAgICAgCWpuZSAgICAyYzlmIDx2eGxhbl9kZXZfY29uZmlndXJlKzB4MzlmPgogICAgMjll ZToJNDEgYjggMDIgMDAgMDAgMDAgICAgCW1vdiAgICAkMHgyLCVyOGQKICAgIDI5ZjQ6CTY2IDQ0 IDg5IDgzIDgwIDA4IDAwIAltb3YgICAgJXI4dywweDg4MCglcmJ4KQogICAgMjlmYjoJMDAgCiAg ICAyOWZjOgk2NiA4MyBiYiA1NCAwOSAwMCAwMCAJY21wdyAgICQweGEsMHg5NTQoJXJieCkKICAg IDJhMDM6CTBhIAogICAgMmEwNDoJMGYgODQgZTIgMDIgMDAgMDAgICAgCWplICAgICAyY2VjIDx2 eGxhbl9kZXZfY29uZmlndXJlKzB4M2VjPgogICAgMmEwYToJNDEgOGIgNDQgMjQgNGMgICAgICAg CW1vdiAgICAweDRjKCVyMTIpLCVlYXgKCgkvKiBVbmxlc3MgSVB2NiBpcyBleHBsaWNpdGx5IHJl cXVlc3RlZCwgYXNzdW1lIElQdjQgKi8KCWlmICghZHN0LT5yZW1vdGVfaXAuc2Euc2FfZmFtaWx5 KQogICAgMmEwZjoJODUgYzAgICAgICAgICAgICAgICAgCXRlc3QgICAlZWF4LCVlYXgKICAgIDJh MTE6CTBmIDg1IDI2IDA0IDAwIDAwICAgIAlqbmUgICAgMmUzZCA8dnhsYW5fZGV2X2NvbmZpZ3Vy ZSsweDUzZD4KICAgIDJhMTc6CTQxIDhiIDc0IDI0IDNjICAgICAgIAltb3YgICAgMHgzYyglcjEy KSwlZXNpCiAgICAyYTFjOgk4NSBmNiAgICAgICAgICAgICAgICAJdGVzdCAgICVlc2ksJWVzaQoJ CWRzdC0+cmVtb3RlX2lwLnNhLnNhX2ZhbWlseSA9IEFGX0lORVQ7CiAgICAyYTFlOgkwZiA4NSBl NiAwMiAwMCAwMCAgICAJam5lICAgIDJkMGEgPHZ4bGFuX2Rldl9jb25maWd1cmUrMHg0MGE+CiAg ICAyYTI0OgkzMSBmZiAgICAgICAgICAgICAgICAJeG9yICAgICVlZGksJWVkaQogICAgMmEyNjoJ OGIgODMgODQgMDggMDAgMDAgICAgCW1vdiAgICAweDg4NCglcmJ4KSwlZWF4CgoJaWYgKGRzdC0+ cmVtb3RlX2lwLnNhLnNhX2ZhbWlseSA9PSBBRl9JTkVUNiB8fAogICAgMmEyYzoJMjUgZjAgMDAg MDAgMDAgICAgICAgCWFuZCAgICAkMHhmMCwlZWF4CiAgICAyYTMxOgkzZCBlMCAwMCAwMCAwMCAg ICAgICAJY21wICAgICQweGUwLCVlYXgKICAgIDJhMzY6CTBmIDk0IGMwICAgICAgICAgICAgIAlz ZXRlICAgJWFsCiAgICAyYTM5Ogk4NCBjMCAgICAgICAgICAgICAgICAJdGVzdCAgICVhbCwlYWwK CQkJcmV0dXJuIC1FUEZOT1NVUFBPUlQ7CgkJdXNlX2lwdjYgPSB0cnVlOwoJCXZ4bGFuLT5mbGFn cyB8PSBWWExBTl9GX0lQVjY7Cgl9CgoJaWYgKGNvbmYtPmxhYmVsICYmICF1c2VfaXB2Nikgewog ICAgMmEzYjoJMGYgODUgMTIgMDQgMDAgMDAgICAgCWpuZSAgICAyZTUzIDx2eGxhbl9kZXZfY29u ZmlndXJlKzB4NTUzPgogICAgMmE0MToJNDEgOGIgNzQgMjQgNDAgICAgICAgCW1vdiAgICAweDQw KCVyMTIpLCVlc2kKICAgIDJhNDY6CTQxIGI4IDBlIDAwIDAwIDAwICAgIAltb3YgICAgJDB4ZSwl cjhkCgkJcHJfaW5mbygibGFiZWwgb25seSBzdXBwb3J0ZWQgaW4gdXNlIHdpdGggSVB2NlxuIik7 CgkJcmV0dXJuIC1FSU5WQUw7Cgl9CgoJaWYgKGNvbmYtPnJlbW90ZV9pZmluZGV4KSB7CiAgICAy YTRjOgk4NSBmNiAgICAgICAgICAgICAgICAJdGVzdCAgICVlc2ksJWVzaQogICAgMmE0ZToJMGYg ODUgYzkgMDMgMDAgMDAgICAgCWpuZSAgICAyZTFkIDx2eGxhbl9kZXZfY29uZmlndXJlKzB4NTFk PgoJc3RydWN0IHZ4bGFuX25ldCAqdm4gPSBuZXRfZ2VuZXJpYyhzcmNfbmV0LCB2eGxhbl9uZXRf aWQpOwoJc3RydWN0IHZ4bGFuX2RldiAqdnhsYW4gPSBuZXRkZXZfcHJpdihkZXYpLCAqdG1wOwoJ c3RydWN0IHZ4bGFuX3Jkc3QgKmRzdCA9ICZ2eGxhbi0+ZGVmYXVsdF9kc3Q7Cgl1bnNpZ25lZCBz aG9ydCBuZWVkZWRfaGVhZHJvb20gPSBFVEhfSExFTjsKCWludCBlcnI7Cglib29sIHVzZV9pcHY2 ID0gZmFsc2U7CiAgICAyYTU0Ogk0MCA4NCBmZiAgICAgICAgICAgICAJdGVzdCAgICVkaWwsJWRp bApzdGF0aWMgaW5saW5lIGJvb2wgdnhsYW5fYWRkcl9tdWx0aWNhc3QoY29uc3QgdW5pb24gdnhs YW5fYWRkciAqaXBhKQp7CglpZiAoaXBhLT5zYS5zYV9mYW1pbHkgPT0gQUZfSU5FVDYpCgkJcmV0 dXJuIGlwdjZfYWRkcl9pc19tdWx0aWNhc3QoJmlwYS0+c2luNi5zaW42X2FkZHIpOwoJZWxzZQoJ CXJldHVybiBJTl9NVUxUSUNBU1QobnRvaGwoaXBhLT5zaW4uc2luX2FkZHIuc19hZGRyKSk7CiAg ICAyYTU3Ogk3NSAwYyAgICAgICAgICAgICAgICAJam5lICAgIDJhNjUgPHZ4bGFuX2Rldl9jb25m aWd1cmUrMHgxNjU+CiAgICAyYTU5Ogk0MSBmNiA0NCAyNCA1MSAyMCAgICAJdGVzdGIgICQweDIw LDB4NTEoJXIxMikKICAgIDJhNWY6CTQxIDhkIDQwIDMyICAgICAgICAgIAlsZWEgICAgMHgzMigl cjgpLCVlYXgKICAgIDJhNjM6CTc0IDA0ICAgICAgICAgICAgICAgIAlqZSAgICAgMmE2OSA8dnhs YW5fZGV2X2NvbmZpZ3VyZSsweDE2OT4KICAgIDJhNjU6CTQxIDhkIDQwIDQ2ICAgICAgICAgIAls ZWEgICAgMHg0NiglcjgpLCVlYXgKCgkJaWYgKCFjb25mLT5tdHUpCgkJCWRldi0+bXR1ID0gbG93 ZXJkZXYtPm10dSAtICh1c2VfaXB2NiA/IFZYTEFONl9IRUFEUk9PTSA6IFZYTEFOX0hFQURST09N KTsKCgkJbmVlZGVkX2hlYWRyb29tID0gbG93ZXJkZXYtPmhhcmRfaGVhZGVyX2xlbjsKCX0gZWxz ZSBpZiAodnhsYW5fYWRkcl9tdWx0aWNhc3QoJmRzdC0+cmVtb3RlX2lwKSkgewogICAgMmE2OToJ NjYgODkgODMgNTAgMDIgMDAgMDAgCW1vdiAgICAlYXgsMHgyNTAoJXJieCkKICAgIDJhNzA6CTQ5 IDhiIDE0IDI0ICAgICAgICAgIAltb3YgICAgKCVyMTIpLCVyZHgKCQlwcl9pbmZvKCJtdWx0aWNh c3QgZGVzdGluYXRpb24gcmVxdWlyZXMgaW50ZXJmYWNlIHRvIGJlIHNwZWNpZmllZFxuIik7CgkJ cmV0dXJuIC1FSU5WQUw7Cgl9CgoJaWYgKGNvbmYtPm10dSkgewogICAgMmE3NDoJNDggODkgOTMg MzggMDkgMDAgMDAgCW1vdiAgICAlcmR4LDB4OTM4KCVyYngpCgkJCSAgICAgICBzdHJ1Y3Qgdnhs YW5fY29uZmlnICpjb25mKQp7CglzdHJ1Y3QgdnhsYW5fbmV0ICp2biA9IG5ldF9nZW5lcmljKHNy Y19uZXQsIHZ4bGFuX25ldF9pZCk7CglzdHJ1Y3QgdnhsYW5fZGV2ICp2eGxhbiA9IG5ldGRldl9w cml2KGRldiksICp0bXA7CglzdHJ1Y3QgdnhsYW5fcmRzdCAqZHN0ID0gJnZ4bGFuLT5kZWZhdWx0 X2RzdDsKCXVuc2lnbmVkIHNob3J0IG5lZWRlZF9oZWFkcm9vbSA9IEVUSF9ITEVOOwogICAgMmE3 YjoJNDkgOGIgNTQgMjQgMDggICAgICAgCW1vdiAgICAweDgoJXIxMiksJXJkeAoJfSBlbHNlIGlm ICh2eGxhbl9hZGRyX211bHRpY2FzdCgmZHN0LT5yZW1vdGVfaXApKSB7CgkJcHJfaW5mbygibXVs dGljYXN0IGRlc3RpbmF0aW9uIHJlcXVpcmVzIGludGVyZmFjZSB0byBiZSBzcGVjaWZpZWRcbiIp OwoJCXJldHVybiAtRUlOVkFMOwoJfQoKCWlmIChjb25mLT5tdHUpIHsKICAgIDJhODA6CTQ4IDg5 IDkzIDQwIDA5IDAwIDAwIAltb3YgICAgJXJkeCwweDk0MCglcmJ4KQoJCWVyciA9IF9fdnhsYW5f Y2hhbmdlX210dShkZXYsIGxvd2VyZGV2LCBkc3QsIGNvbmYtPm10dSwgZmFsc2UpOwoJCWlmIChl cnIpCgkJCXJldHVybiBlcnI7Cgl9CgoJaWYgKHVzZV9pcHY2IHx8IGNvbmYtPmZsYWdzICYgVlhM QU5fRl9DT0xMRUNUX01FVEFEQVRBKQogICAgMmE4NzoJNDkgOGIgNTQgMjQgMTAgICAgICAgCW1v diAgICAweDEwKCVyMTIpLCVyZHgKICAgIDJhOGM6CTQ4IDg5IDkzIDQ4IDA5IDAwIDAwIAltb3Yg ICAgJXJkeCwweDk0OCglcmJ4KQogICAgMmE5MzoJNDkgOGIgNTQgMjQgMTggICAgICAgCW1vdiAg ICAweDE4KCVyMTIpLCVyZHgKCQluZWVkZWRfaGVhZHJvb20gKz0gVlhMQU42X0hFQURST09NOwog ICAgMmE5ODoJNDggODkgOTMgNTAgMDkgMDAgMDAgCW1vdiAgICAlcmR4LDB4OTUwKCVyYngpCgll bHNlCgkJbmVlZGVkX2hlYWRyb29tICs9IFZYTEFOX0hFQURST09NOwoJZGV2LT5uZWVkZWRfaGVh ZHJvb20gPSBuZWVkZWRfaGVhZHJvb207CiAgICAyYTlmOgk0OSA4YiA1NCAyNCAyMCAgICAgICAJ bW92ICAgIDB4MjAoJXIxMiksJXJkeAoKCW1lbWNweSgmdnhsYW4tPmNmZywgY29uZiwgc2l6ZW9m KCpjb25mKSk7CiAgICAyYWE0Ogk0OCA4OSA5MyA1OCAwOSAwMCAwMCAJbW92ICAgICVyZHgsMHg5 NTgoJXJieCkKICAgIDJhYWI6CTQ5IDhiIDU0IDI0IDI4ICAgICAgIAltb3YgICAgMHgyOCglcjEy KSwlcmR4CiAgICAyYWIwOgk0OCA4OSA5MyA2MCAwOSAwMCAwMCAJbW92ICAgICVyZHgsMHg5NjAo JXJieCkKICAgIDJhYjc6CTQ5IDhiIDU0IDI0IDMwICAgICAgIAltb3YgICAgMHgzMCglcjEyKSwl cmR4CiAgICAyYWJjOgk0OCA4OSA5MyA2OCAwOSAwMCAwMCAJbW92ICAgICVyZHgsMHg5NjgoJXJi eCkKICAgIDJhYzM6CTQ5IDhiIDU0IDI0IDM4ICAgICAgIAltb3YgICAgMHgzOCglcjEyKSwlcmR4 CiAgICAyYWM4Ogk0OCA4OSA5MyA3MCAwOSAwMCAwMCAJbW92ICAgICVyZHgsMHg5NzAoJXJieCkK ICAgIDJhY2Y6CTQ5IDhiIDU0IDI0IDQwICAgICAgIAltb3YgICAgMHg0MCglcjEyKSwlcmR4CiAg ICAyYWQ0Ogk0OCA4OSA5MyA3OCAwOSAwMCAwMCAJbW92ICAgICVyZHgsMHg5NzgoJXJieCkKICAg IDJhZGI6CTQ5IDhiIDU0IDI0IDQ4ICAgICAgIAltb3YgICAgMHg0OCglcjEyKSwlcmR4CiAgICAy YWUwOgk2NiA4MyBiYiA3YyAwOSAwMCAwMCAJY21wdyAgICQweDAsMHg5N2MoJXJieCkKICAgIDJh ZTc6CTAwIAogICAgMmFlODoJNDggODkgOTMgODAgMDkgMDAgMDAgCW1vdiAgICAlcmR4LDB4OTgw KCVyYngpCiAgICAyYWVmOgk0OSA4YiA1NCAyNCA1MCAgICAgICAJbW92ICAgIDB4NTAoJXIxMiks JXJkeAogICAgMmFmNDoJNDggODkgOTMgODggMDkgMDAgMDAgCW1vdiAgICAlcmR4LDB4OTg4KCVy YngpCiAgICAyYWZiOgk0OSA4YiA1NCAyNCA1OCAgICAgICAJbW92ICAgIDB4NTgoJXIxMiksJXJk eAogICAgMmIwMDoJNDggODkgOTMgOTAgMDkgMDAgMDAgCW1vdiAgICAlcmR4LDB4OTkwKCVyYngp CiAgICAyYjA3Ogk0OSA4YiA1NCAyNCA2MCAgICAgICAJbW92ICAgIDB4NjAoJXIxMiksJXJkeAog ICAgMmIwYzoJNDggODkgOTMgOTggMDkgMDAgMDAgCW1vdiAgICAlcmR4LDB4OTk4KCVyYngpCglp ZiAoIXZ4bGFuLT5jZmcuZHN0X3BvcnQpIHsKICAgIDJiMTM6CTc1IDE1ICAgICAgICAgICAgICAg IAlqbmUgICAgMmIyYSA8dnhsYW5fZGV2X2NvbmZpZ3VyZSsweDIyYT4KICAgIDJiMTU6CTQxIGY2 IDQ0IDI0IDUxIDQwICAgIAl0ZXN0YiAgJDB4NDAsMHg1MSglcjEyKQoJCW5lZWRlZF9oZWFkcm9v bSArPSBWWExBTjZfSEVBRFJPT007CgllbHNlCgkJbmVlZGVkX2hlYWRyb29tICs9IFZYTEFOX0hF QURST09NOwoJZGV2LT5uZWVkZWRfaGVhZHJvb20gPSBuZWVkZWRfaGVhZHJvb207CgoJbWVtY3B5 KCZ2eGxhbi0+Y2ZnLCBjb25mLCBzaXplb2YoKmNvbmYpKTsKICAgIDJiMWI6CWI4IGI2IDEyIDAw IDAwICAgICAgIAltb3YgICAgJDB4MTJiNiwlZWF4CiAgICAyYjIwOgkwZiA0NSBjOCAgICAgICAg ICAgICAJY21vdm5lICVlYXgsJWVjeAogICAgMmIyMzoJNjYgODkgOGIgN2MgMDkgMDAgMDAgCW1v diAgICAlY3gsMHg5N2MoJXJieCkKICAgIDJiMmE6CTQ0IDhiIDgzIGQ4IDA4IDAwIDAwIAltb3Yg ICAgMHg4ZDgoJXJieCksJXI4ZAogICAgMmIzMToJNDUgMGIgNDQgMjQgNTAgICAgICAgCW9yICAg ICAweDUwKCVyMTIpLCVyOGQKICAgIDJiMzY6CTQ4IDgzIGJiIDkwIDA5IDAwIDAwIAljbXBxICAg JDB4MCwweDk5MCglcmJ4KQogICAgMmIzZDoJMDAgCiAgICAyYjNlOgk0NCA4OSA4MyBkOCAwOCAw MCAwMCAJbW92ICAgICVyOGQsMHg4ZDgoJXJieCkKCWlmICghdnhsYW4tPmNmZy5kc3RfcG9ydCkg ewoJCWlmIChjb25mLT5mbGFncyAmIFZYTEFOX0ZfR1BFKQoJCQl2eGxhbi0+Y2ZnLmRzdF9wb3J0 ID0gNDc5MDsgLyogSUFOQSBhc3NpZ25lZCBWWExBTi1HUEUgcG9ydCAqLwogICAgMmI0NToJNzUg MGIgICAgICAgICAgICAgICAgCWpuZSAgICAyYjUyIDx2eGxhbl9kZXZfY29uZmlndXJlKzB4MjUy PgogICAgMmI0NzoJNDggYzcgODMgOTAgMDkgMDAgMDAgCW1vdnEgICAkMHgxMmMsMHg5OTAoJXJi eCkKICAgIDJiNGU6CTJjIDAxIDAwIDAwIAogICAgMmI1MjoJNDkgOGIgMTYgICAgICAgICAgICAg CW1vdiAgICAoJXIxNCksJXJkeAogICAgMmI1NToJNDkgMzkgZDYgICAgICAgICAgICAgCWNtcCAg ICAlcmR4LCVyMTQKICAgIDJiNTg6CTQ4IDhkIDQyIGYwICAgICAgICAgIAlsZWEgICAgLTB4MTAo JXJkeCksJXJheAoJCWVsc2UKCQkJdnhsYW4tPmNmZy5kc3RfcG9ydCA9IGRlZmF1bHRfcG9ydDsK CX0KCXZ4bGFuLT5mbGFncyB8PSBjb25mLT5mbGFnczsKICAgIDJiNWM6CTBmIDg0IDkxIDAwIDAw IDAwICAgIAlqZSAgICAgMmJmMyA8dnhsYW5fZGV2X2NvbmZpZ3VyZSsweDJmMz4KICAgIDJiNjI6 CTQxIDhiIDc0IDI0IDM4ICAgICAgIAltb3YgICAgMHgzOCglcjEyKSwlZXNpCgoJaWYgKCF2eGxh bi0+Y2ZnLmFnZV9pbnRlcnZhbCkKICAgIDJiNjc6CWViIDBkICAgICAgICAgICAgICAgIAlqbXAg ICAgMmI3NiA8dnhsYW5fZGV2X2NvbmZpZ3VyZSsweDI3Nj4KICAgIDJiNjk6CTQ4IDhiIDQ4IDEw ICAgICAgICAgIAltb3YgICAgMHgxMCglcmF4KSwlcmN4CiAgICAyYjZkOgk0OSAzOSBjZSAgICAg ICAgICAgICAJY21wICAgICVyY3gsJXIxNAoJCWlmIChjb25mLT5mbGFncyAmIFZYTEFOX0ZfR1BF KQoJCQl2eGxhbi0+Y2ZnLmRzdF9wb3J0ID0gNDc5MDsgLyogSUFOQSBhc3NpZ25lZCBWWExBTi1H UEUgcG9ydCAqLwoJCWVsc2UKCQkJdnhsYW4tPmNmZy5kc3RfcG9ydCA9IGRlZmF1bHRfcG9ydDsK CX0KCXZ4bGFuLT5mbGFncyB8PSBjb25mLT5mbGFnczsKICAgIDJiNzA6CTQ4IDhkIDQxIGYwICAg ICAgICAgIAlsZWEgICAgLTB4MTAoJXJjeCksJXJheAogICAgMmI3NDoJNzQgN2QgICAgICAgICAg ICAgICAgCWplICAgICAyYmYzIDx2eGxhbl9kZXZfY29uZmlndXJlKzB4MmYzPgoKCWlmICghdnhs YW4tPmNmZy5hZ2VfaW50ZXJ2YWwpCiAgICAyYjc2OgkzOSBiMCAzMCAwMSAwMCAwMCAgICAJY21w ICAgICVlc2ksMHgxMzAoJXJheCkKCQl2eGxhbi0+Y2ZnLmFnZV9pbnRlcnZhbCA9IEZEQl9BR0Vf REVGQVVMVDsKICAgIDJiN2M6CTc1IGViICAgICAgICAgICAgICAgIAlqbmUgICAgMmI2OSA8dnhs YW5fZGV2X2NvbmZpZ3VyZSsweDI2OT4KICAgIDJiN2U6CTY2IDgzIDc4IDQwIDBhICAgICAgIAlj bXB3ICAgJDB4YSwweDQwKCVyYXgpCgoJbGlzdF9mb3JfZWFjaF9lbnRyeSh0bXAsICZ2bi0+dnhs YW5fbGlzdCwgbmV4dCkgewogICAgMmI4MzoJYmEgMDEgMDAgMDAgMDAgICAgICAgCW1vdiAgICAk MHgxLCVlZHgKICAgIDJiODg6CTc0IDBkICAgICAgICAgICAgICAgIAlqZSAgICAgMmI5NyA8dnhs YW5fZGV2X2NvbmZpZ3VyZSsweDI5Nz4KICAgIDJiOGE6CTMxIGQyICAgICAgICAgICAgICAgIAl4 b3IgICAgJWVkeCwlZWR4CiAgICAyYjhjOgk2NiA4MyBiOCAxNCAwMSAwMCAwMCAJY21wdyAgICQw eGEsMHgxMTQoJXJheCkKICAgIDJiOTM6CTBhIAogICAgMmI5NDoJMGYgOTQgYzIgICAgICAgICAg ICAgCXNldGUgICAlZGwKICAgIDJiOTc6CTM5IGZhICAgICAgICAgICAgICAgIAljbXAgICAgJWVk aSwlZWR4CiAgICAyYjk5Ogk3NSBjZSAgICAgICAgICAgICAgICAJam5lICAgIDJiNjkgPHZ4bGFu X2Rldl9jb25maWd1cmUrMHgyNjk+CiAgICAyYjliOgkwZiBiNyA5MyA3YyAwOSAwMCAwMCAJbW92 endsIDB4OTdjKCVyYngpLCVlZHgKICAgIDJiYTI6CTY2IDM5IDkwIDNjIDAxIDAwIDAwIAljbXAg ICAgJWR4LDB4MTNjKCVyYXgpCgkJaWYgKHRtcC0+Y2ZnLnZuaSA9PSBjb25mLT52bmkgJiYKICAg IDJiYTk6CTc1IGJlICAgICAgICAgICAgICAgIAlqbmUgICAgMmI2OSA8dnhsYW5fZGV2X2NvbmZp Z3VyZSsweDI2OT4KICAgIDJiYWI6CThiIDkwIDk4IDAwIDAwIDAwICAgIAltb3YgICAgMHg5OCgl cmF4KSwlZWR4CgkJICAgICh0bXAtPmRlZmF1bHRfZHN0LnJlbW90ZV9pcC5zYS5zYV9mYW1pbHkg PT0gQUZfSU5FVDYgfHwKICAgIDJiYjE6CTQ0IDMxIGMyICAgICAgICAgICAgIAl4b3IgICAgJXI4 ZCwlZWR4CiAgICAyYmI0Ogk4MCBlNiA3ZCAgICAgICAgICAgICAJYW5kICAgICQweDdkLCVkaAog ICAgMmJiNzoJNzUgYjAgICAgICAgICAgICAgICAgCWpuZSAgICAyYjY5IDx2eGxhbl9kZXZfY29u ZmlndXJlKzB4MjY5PgogICAgMmJiOToJMGYgY2UgICAgICAgICAgICAgICAgCWJzd2FwICAlZXNp CiAgICAyYmJiOgk0OCBjNyBjNyAwMCAwMCAwMCAwMCAJbW92ICAgICQweDAsJXJkaQogICAgMmJj MjoJZTggMDAgMDAgMDAgMDAgICAgICAgCWNhbGxxICAyYmM3IDx2eGxhbl9kZXZfY29uZmlndXJl KzB4MmM3PgoKCWlmICghdnhsYW4tPmNmZy5hZ2VfaW50ZXJ2YWwpCgkJdnhsYW4tPmNmZy5hZ2Vf aW50ZXJ2YWwgPSBGREJfQUdFX0RFRkFVTFQ7CgoJbGlzdF9mb3JfZWFjaF9lbnRyeSh0bXAsICZ2 bi0+dnhsYW5fbGlzdCwgbmV4dCkgewoJCWlmICh0bXAtPmNmZy52bmkgPT0gY29uZi0+dm5pICYm CiAgICAyYmM3OgliOCBlZiBmZiBmZiBmZiAgICAgICAJbW92ICAgICQweGZmZmZmZmVmLCVlYXgK CQkgICAgKHRtcC0+ZGVmYXVsdF9kc3QucmVtb3RlX2lwLnNhLnNhX2ZhbWlseSA9PSBBRl9JTkVU NiB8fAoJCSAgICAgdG1wLT5jZmcuc2FkZHIuc2Euc2FfZmFtaWx5ID09IEFGX0lORVQ2KSA9PSB1 c2VfaXB2NiAmJgogICAgMmJjYzoJZTkgYmYgMDAgMDAgMDAgICAgICAgCWptcHEgICAyYzkwIDx2 eGxhbl9kZXZfY29uZmlndXJlKzB4MzkwPgogICAgMmJkMToJOGIgODYgM2MgMDIgMDAgMDAgICAg CW1vdiAgICAweDIzYyglcnNpKSwlZWF4CiAgICAyYmQ3Ogk0OCBjNyA4NiAxMCAwMiAwMCAwMCAJ bW92cSAgICQweDAsMHgyMTAoJXJzaSkKICAgIDJiZGU6CTAwIDAwIDAwIDAwIAoJCSAgICB0bXAt PmNmZy5kc3RfcG9ydCA9PSB2eGxhbi0+Y2ZnLmRzdF9wb3J0ICYmCiAgICAyYmUyOgk4MCBlNCBm NyAgICAgICAgICAgICAJYW5kICAgICQweGY3LCVhaAogICAgMmJlNToJODAgY2MgODAgICAgICAg ICAgICAgCW9yICAgICAkMHg4MCwlYWgKICAgIDJiZTg6CTg5IDg2IDNjIDAyIDAwIDAwICAgIAlt b3YgICAgJWVheCwweDIzYyglcnNpKQoJCSAgICAodG1wLT5mbGFncyAmIFZYTEFOX0ZfUkNWX0ZM QUdTKSA9PQoJCSAgICAodnhsYW4tPmZsYWdzICYgVlhMQU5fRl9SQ1ZfRkxBR1MpKSB7CgkJCXBy X2luZm8oImR1cGxpY2F0ZSBWTkkgJXVcbiIsIGJlMzJfdG9fY3B1KGNvbmYtPnZuaSkpOwogICAg MmJlZToJZTkgYWMgZmQgZmYgZmYgICAgICAgCWptcHEgICAyOTlmIDx2eGxhbl9kZXZfY29uZmln dXJlKzB4OWY+CiAgICAyYmYzOgk2NiA4MyBiYiA4MCAwOCAwMCAwMCAJY21wdyAgICQweGEsMHg4 ODAoJXJieCkKICAgIDJiZmE6CTBhIAoJCQlyZXR1cm4gLUVFWElTVDsKICAgIDJiZmI6CTQ4IGM3 IDgzIDE4IDAyIDAwIDAwIAltb3ZxICAgJDB4MCwweDIxOCglcmJ4KQogICAgMmMwMjoJMDAgMDAg MDAgMDAgCn0KCnN0YXRpYyB2b2lkIHZ4bGFuX2V0aGVyX3NldHVwKHN0cnVjdCBuZXRfZGV2aWNl ICpkZXYpCnsKCWRldi0+cHJpdl9mbGFncyAmPSB+SUZGX1RYX1NLQl9TSEFSSU5HOwoJZGV2LT5w cml2X2ZsYWdzIHw9IElGRl9MSVZFX0FERFJfQ0hBTkdFOwogICAgMmMwNjoJMGYgODQgY2EgMDAg MDAgMDAgICAgCWplICAgICAyY2Q2IDx2eGxhbl9kZXZfY29uZmlndXJlKzB4M2Q2PgoJZGV2LT5u ZXRkZXZfb3BzID0gJnZ4bGFuX25ldGRldl9ldGhlcl9vcHM7CiAgICAyYzBjOgk4YiA5MyA4NCAw OCAwMCAwMCAgICAJbW92ICAgIDB4ODg0KCVyYngpLCVlZHgKfQoKc3RhdGljIHZvaWQgdnhsYW5f ZXRoZXJfc2V0dXAoc3RydWN0IG5ldF9kZXZpY2UgKmRldikKewoJZGV2LT5wcml2X2ZsYWdzICY9 IH5JRkZfVFhfU0tCX1NIQVJJTkc7CglkZXYtPnByaXZfZmxhZ3MgfD0gSUZGX0xJVkVfQUREUl9D SEFOR0U7CiAgICAyYzEyOgk4NSBkMiAgICAgICAgICAgICAgICAJdGVzdCAgICVlZHgsJWVkeAog ICAgMmMxNDoJMGYgOTQgYzAgICAgICAgICAgICAgCXNldGUgICAlYWwKICAgIDJjMTc6CTg0IGMw ICAgICAgICAgICAgICAgIAl0ZXN0ICAgJWFsLCVhbAogICAgMmMxOToJNzUgNDQgICAgICAgICAg ICAgICAgCWpuZSAgICAyYzVmIDx2eGxhbl9kZXZfY29uZmlndXJlKzB4MzVmPgogICAgMmMxYjoJ OGIgODMgYTQgMDggMDAgMDAgICAgCW1vdiAgICAweDhhNCglcmJ4KSwlZWF4CiAgICAyYzIxOgk0 NCAwZiBiNyA4YiA3YyAwOSAwMCAJbW92endsIDB4OTdjKCVyYngpLCVyOWQKICAgIDJjMjg6CTAw IAoJCXJldHVybiBhLT5zaW4uc2luX2FkZHIuc19hZGRyID09IGItPnNpbi5zaW5fYWRkci5zX2Fk ZHI7Cn0KCnN0YXRpYyBpbmxpbmUgYm9vbCB2eGxhbl9hZGRyX2FueShjb25zdCB1bmlvbiB2eGxh bl9hZGRyICppcGEpCnsKCWlmIChpcGEtPnNhLnNhX2ZhbWlseSA9PSBBRl9JTkVUNikKICAgIDJj Mjk6CTQxIGI4IDAwIDA2IDAwIDAwICAgIAltb3YgICAgJDB4NjAwLCVyOGQKCQkJcHJfaW5mbygi ZHVwbGljYXRlIFZOSSAldVxuIiwgYmUzMl90b19jcHUoY29uZi0+dm5pKSk7CgkJCXJldHVybiAt RUVYSVNUOwoJCX0KCX0KCglkZXYtPmV0aHRvb2xfb3BzID0gJnZ4bGFuX2V0aHRvb2xfb3BzOwog ICAgMmMyZjoJYzcgNDQgMjQgMTAgMDIgMDAgMDAgCW1vdmwgICAkMHgyLDB4MTAoJXJzcCkKICAg IDJjMzY6CTAwIAoJCXJldHVybiBhLT5zaW4uc2luX2FkZHIuc19hZGRyID09IGItPnNpbi5zaW5f YWRkci5zX2FkZHI7Cn0KCnN0YXRpYyBpbmxpbmUgYm9vbCB2eGxhbl9hZGRyX2FueShjb25zdCB1 bmlvbiB2eGxhbl9hZGRyICppcGEpCnsKCWlmIChpcGEtPnNhLnNhX2ZhbWlseSA9PSBBRl9JTkVU NikKICAgIDJjMzc6CWI5IDgyIDAwIDAwIDAwICAgICAgIAltb3YgICAgJDB4ODIsJWVjeAoJCXJl dHVybiBpcHY2X2FkZHJfYW55KCZpcGEtPnNpbjYuc2luNl9hZGRyKTsKCWVsc2UKCQlyZXR1cm4g aXBhLT5zaW4uc2luX2FkZHIuc19hZGRyID09IGh0b25sKElOQUREUl9BTlkpOwogICAgMmMzYzoJ NGMgODkgZmEgICAgICAgICAgICAgCW1vdiAgICAlcjE1LCVyZHgKICAgIDJjM2Y6CTQ4IGM3IGM2 IDAwIDAwIDAwIDAwIAltb3YgICAgJDB4MCwlcnNpCiAgICAyYzQ2Ogk0YyA4OSBlZiAgICAgICAg ICAgICAJbW92ICAgICVyMTMsJXJkaQoJfQoKCWRldi0+ZXRodG9vbF9vcHMgPSAmdnhsYW5fZXRo dG9vbF9vcHM7CgoJLyogY3JlYXRlIGFuIGZkYiBlbnRyeSBmb3IgYSB2YWxpZCBkZWZhdWx0IGRl c3RpbmF0aW9uICovCglpZiAoIXZ4bGFuX2FkZHJfYW55KCZ2eGxhbi0+ZGVmYXVsdF9kc3QucmVt b3RlX2lwKSkgewogICAgMmM0OToJODkgNDQgMjQgMDggICAgICAgICAgCW1vdiAgICAlZWF4LDB4 OCglcnNwKQoJCWVyciA9IHZ4bGFuX2ZkYl9jcmVhdGUodnhsYW4sIGFsbF96ZXJvc19tYWMsCiAg ICAyYzRkOgk4YiA4MyBhMCAwOCAwMCAwMCAgICAJbW92ICAgIDB4OGEwKCVyYngpLCVlYXgKICAg IDJjNTM6CTg5IDA0IDI0ICAgICAgICAgICAgIAltb3YgICAgJWVheCwoJXJzcCkKICAgIDJjNTY6 CWU4IDM1IGY5IGZmIGZmICAgICAgIAljYWxscSAgMjU5MCA8dnhsYW5fZmRiX2NyZWF0ZT4KICAg IDJjNWI6CTg1IGMwICAgICAgICAgICAgICAgIAl0ZXN0ICAgJWVheCwlZWF4CiAgICAyYzVkOgk3 NSAzMSAgICAgICAgICAgICAgICAJam5lICAgIDJjOTAgPHZ4bGFuX2Rldl9jb25maWd1cmUrMHgz OTA+CiAgICAyYzVmOgk0OCA4OSBkZiAgICAgICAgICAgICAJbW92ICAgICVyYngsJXJkaQogICAg MmM2MjoJZTggMDAgMDAgMDAgMDAgICAgICAgCWNhbGxxICAyYzY3IDx2eGxhbl9kZXZfY29uZmln dXJlKzB4MzY3PgogICAgMmM2NzoJODUgYzAgICAgICAgICAgICAgICAgCXRlc3QgICAlZWF4LCVl YXgKICAgIDJjNjk6CTBmIDg1IDkxIDAxIDAwIDAwICAgIAlqbmUgICAgMmUwMCA8dnhsYW5fZGV2 X2NvbmZpZ3VyZSsweDUwMD4KICAgIDJjNmY6CTQ5IDhiIDE2ICAgICAgICAgICAgIAltb3YgICAg KCVyMTQpLCVyZHgKICAgIDJjNzI6CTQ4IDhkIDgzIDUwIDA4IDAwIDAwIAlsZWEgICAgMHg4NTAo JXJieCksJXJheAogICAgMmM3OToJNDggODkgNDIgMDggICAgICAgICAgCW1vdiAgICAlcmF4LDB4 OCglcmR4KQogICAgMmM3ZDoJNDggODkgOTMgNTAgMDggMDAgMDAgCW1vdiAgICAlcmR4LDB4ODUw KCVyYngpCiAgICAyYzg0Ogk0YyA4OSBiMyA1OCAwOCAwMCAwMCAJbW92ICAgICVyMTQsMHg4NTgo JXJieCkKCQkJCSAgICAgICBOTE1fRl9FWENMfE5MTV9GX0NSRUFURSwKCQkJCSAgICAgICB2eGxh bi0+Y2ZnLmRzdF9wb3J0LAoJCQkJICAgICAgIHZ4bGFuLT5kZWZhdWx0X2RzdC5yZW1vdGVfdm5p LAoJCQkJICAgICAgIHZ4bGFuLT5kZWZhdWx0X2RzdC5yZW1vdGVfaWZpbmRleCwKCQkJCSAgICAg ICBOVEZfU0VMRik7CgkJaWYgKGVycikKICAgIDJjOGI6CTQ5IDg5IDA2ICAgICAgICAgICAgIAlt b3YgICAgJXJheCwoJXIxNCkKICAgIDJjOGU6CTMxIGMwICAgICAgICAgICAgICAgIAl4b3IgICAg JWVheCwlZWF4CgkJCXJldHVybiBlcnI7Cgl9CgoJZXJyID0gcmVnaXN0ZXJfbmV0ZGV2aWNlKGRl dik7CiAgICAyYzkwOgk0OCA4MyBjNCAyMCAgICAgICAgICAJYWRkICAgICQweDIwLCVyc3AKICAg IDJjOTQ6CTViICAgICAgICAgICAgICAgICAgIAlwb3AgICAgJXJieAogICAgMmM5NToJNDEgNWMg ICAgICAgICAgICAgICAgCXBvcCAgICAlcjEyCglpZiAoZXJyKSB7CiAgICAyYzk3Ogk0MSA1ZCAg ICAgICAgICAgICAgICAJcG9wICAgICVyMTMKICAgIDJjOTk6CTQxIDVlICAgICAgICAgICAgICAg IAlwb3AgICAgJXIxNAogICAgMmM5YjoJNDEgNWYgICAgICAgICAgICAgICAgCXBvcCAgICAlcjE1 CiAgICAyYzlkOgk1ZCAgICAgICAgICAgICAgICAgICAJcG9wICAgICVyYnAKICAgIDJjOWU6CWMz ICAgICAgICAgICAgICAgICAgIAlyZXRxICAgCiAqIEluc2VydCBhIG5ldyBlbnRyeSBhZnRlciB0 aGUgc3BlY2lmaWVkIGhlYWQuCiAqIFRoaXMgaXMgZ29vZCBmb3IgaW1wbGVtZW50aW5nIHN0YWNr cy4KICovCnN0YXRpYyBpbmxpbmUgdm9pZCBsaXN0X2FkZChzdHJ1Y3QgbGlzdF9oZWFkICpuZXcs IHN0cnVjdCBsaXN0X2hlYWQgKmhlYWQpCnsKCV9fbGlzdF9hZGQobmV3LCBoZWFkLCBoZWFkLT5u ZXh0KTsKICAgIDJjOWY6CTY2IDgzIGY4IDBhICAgICAgICAgIAljbXAgICAgJDB4YSwlYXgKCQl2 eGxhbl9mZGJfZGVsZXRlX2RlZmF1bHQodnhsYW4pOwoJCXJldHVybiBlcnI7Cgl9CgoJbGlzdF9h ZGQoJnZ4bGFuLT5uZXh0LCAmdm4tPnZ4bGFuX2xpc3QpOwogICAgMmNhMzoJMGYgODUgNTMgZmQg ZmYgZmYgICAgCWpuZSAgICAyOWZjIDx2eGxhbl9kZXZfY29uZmlndXJlKzB4ZmM+CiNpZm5kZWYg Q09ORklHX0RFQlVHX0xJU1QKc3RhdGljIGlubGluZSB2b2lkIF9fbGlzdF9hZGQoc3RydWN0IGxp c3RfaGVhZCAqbmV3LAoJCQkgICAgICBzdHJ1Y3QgbGlzdF9oZWFkICpwcmV2LAoJCQkgICAgICBz dHJ1Y3QgbGlzdF9oZWFkICpuZXh0KQp7CgluZXh0LT5wcmV2ID0gbmV3OwogICAgMmNhOToJODMg OGIgZDggMDggMDAgMDAgMjAgCW9ybCAgICAkMHgyMCwweDhkOCglcmJ4KQoJbmV3LT5uZXh0ID0g bmV4dDsKICAgIDJjYjA6CTQxIDhiIDc0IDI0IDNjICAgICAgIAltb3YgICAgMHgzYyglcjEyKSwl ZXNpCgluZXctPnByZXYgPSBwcmV2OwogICAgMmNiNToJODUgZjYgICAgICAgICAgICAgICAgCXRl c3QgICAlZXNpLCVlc2kKICAgIDJjYjc6CTBmIDg1IGRjIDAwIDAwIDAwICAgIAlqbmUgICAgMmQ5 OSA8dnhsYW5fZGV2X2NvbmZpZ3VyZSsweDQ5OT4KewoJc3dpdGNoIChzaXplKSB7CgljYXNlIDE6 ICoodm9sYXRpbGUgX191OCAqKXAgPSAqKF9fdTggKilyZXM7IGJyZWFrOwoJY2FzZSAyOiAqKHZv bGF0aWxlIF9fdTE2ICopcCA9ICooX191MTYgKilyZXM7IGJyZWFrOwoJY2FzZSA0OiAqKHZvbGF0 aWxlIF9fdTMyICopcCA9ICooX191MzIgKilyZXM7IGJyZWFrOwoJY2FzZSA4OiAqKHZvbGF0aWxl IF9fdTY0ICopcCA9ICooX191NjQgKilyZXM7IGJyZWFrOwogICAgMmNiZDoJMGYgYjYgODMgODgg MDggMDAgMDAgCW1vdnpibCAweDg4OCglcmJ4KSwlZWF4CgoJcmV0dXJuIDA7Cn0KICAgIDJjYzQ6 CWJmIDAxIDAwIDAwIDAwICAgICAgIAltb3YgICAgJDB4MSwlZWRpCiAgICAyY2M5OgkzZCBmZiAw MCAwMCAwMCAgICAgICAJY21wICAgICQweGZmLCVlYXgKICAgIDJjY2U6CTBmIDk0IGMwICAgICAg ICAgICAgIAlzZXRlICAgJWFsCgoJLyogVW5sZXNzIElQdjYgaXMgZXhwbGljaXRseSByZXF1ZXN0 ZWQsIGFzc3VtZSBJUHY0ICovCglpZiAoIWRzdC0+cmVtb3RlX2lwLnNhLnNhX2ZhbWlseSkKCQlk c3QtPnJlbW90ZV9pcC5zYS5zYV9mYW1pbHkgPSBBRl9JTkVUOwoKCWlmIChkc3QtPnJlbW90ZV9p cC5zYS5zYV9mYW1pbHkgPT0gQUZfSU5FVDYgfHwKICAgIDJjZDE6CWU5IDYzIGZkIGZmIGZmICAg ICAgIAlqbXBxICAgMmEzOSA8dnhsYW5fZGV2X2NvbmZpZ3VyZSsweDEzOT4KICAgIDJjZDY6CTQ4 IDhiIDgzIDg4IDA4IDAwIDAwIAltb3YgICAgMHg4ODgoJXJieCksJXJheAoJICAgIHZ4bGFuLT5j Zmcuc2FkZHIuc2Euc2FfZmFtaWx5ID09IEFGX0lORVQ2KSB7CgkJaWYgKCFJU19FTkFCTEVEKENP TkZJR19JUFY2KSkKCQkJcmV0dXJuIC1FUEZOT1NVUFBPUlQ7CgkJdXNlX2lwdjYgPSB0cnVlOwoJ CXZ4bGFuLT5mbGFncyB8PSBWWExBTl9GX0lQVjY7CiAgICAyY2RkOgk0OCAwYiA4MyA5MCAwOCAw MCAwMCAJb3IgICAgIDB4ODkwKCVyYngpLCVyYXgKCWlmIChjb25mLT5sYWJlbCAmJiAhdXNlX2lw djYpIHsKCQlwcl9pbmZvKCJsYWJlbCBvbmx5IHN1cHBvcnRlZCBpbiB1c2Ugd2l0aCBJUHY2XG4i KTsKCQlyZXR1cm4gLUVJTlZBTDsKCX0KCglpZiAoY29uZi0+cmVtb3RlX2lmaW5kZXgpIHsKICAg IDJjZTQ6CTBmIDk0IGMwICAgICAgICAgICAgIAlzZXRlICAgJWFsCiAgICAyY2U3OgllOSAyYiBm ZiBmZiBmZiAgICAgICAJam1wcSAgIDJjMTcgPHZ4bGFuX2Rldl9jb25maWd1cmUrMHgzMTc+CiAg ICAyY2VjOgk4MyA4YiBkOCAwOCAwMCAwMCAyMCAJb3JsICAgICQweDIwLDB4OGQ4KCVyYngpCgly ZXR1cm4gKGEtPnM2X2FkZHIzMlswXSAmIGh0b25sKDB4ZmZmZmZmZjApKSA9PSBodG9ubCgweDIw MDEwMDEwKTsKfQoKc3RhdGljIGlubGluZSBib29sIGlwdjZfYWRkcl9pc19tdWx0aWNhc3QoY29u c3Qgc3RydWN0IGluNl9hZGRyICphZGRyKQp7CglyZXR1cm4gKGFkZHItPnM2X2FkZHIzMlswXSAm IGh0b25sKDB4RkYwMDAwMDApKSA9PSBodG9ubCgweEZGMDAwMDAwKTsKICAgIDJjZjM6CTQxIDhi IDc0IDI0IDNjICAgICAgIAltb3YgICAgMHgzYyglcjEyKSwlZXNpCgoJaWYgKGRzdC0+cmVtb3Rl X2lwLnNhLnNhX2ZhbWlseSA9PSBBRl9JTkVUNiB8fAoJICAgIHZ4bGFuLT5jZmcuc2FkZHIuc2Eu c2FfZmFtaWx5ID09IEFGX0lORVQ2KSB7CgkJaWYgKCFJU19FTkFCTEVEKENPTkZJR19JUFY2KSkK CQkJcmV0dXJuIC1FUEZOT1NVUFBPUlQ7CgkJdXNlX2lwdjYgPSB0cnVlOwogICAgMmNmODoJODUg ZjYgICAgICAgICAgICAgICAgCXRlc3QgICAlZXNpLCVlc2kKICAgIDJjZmE6CTBmIDg1IDk5IDAw IDAwIDAwICAgIAlqbmUgICAgMmQ5OSA8dnhsYW5fZGV2X2NvbmZpZ3VyZSsweDQ5OT4KICAgIDJk MDA6CWJmIDAxIDAwIDAwIDAwICAgICAgIAltb3YgICAgJDB4MSwlZWRpCiAgICAyZDA1OgllOSAx YyBmZCBmZiBmZiAgICAgICAJam1wcSAgIDJhMjYgPHZ4bGFuX2Rldl9jb25maWd1cmUrMHgxMjY+ CnN0YXRpYyBpbmxpbmUgYm9vbCBpcHY2X2FkZHJfYW55KGNvbnN0IHN0cnVjdCBpbjZfYWRkciAq YSkKewojaWYgZGVmaW5lZChDT05GSUdfSEFWRV9FRkZJQ0lFTlRfVU5BTElHTkVEX0FDQ0VTUykg JiYgQklUU19QRVJfTE9ORyA9PSA2NAoJY29uc3QgdW5zaWduZWQgbG9uZyAqdWwgPSAoY29uc3Qg dW5zaWduZWQgbG9uZyAqKWE7CgoJcmV0dXJuICh1bFswXSB8IHVsWzFdKSA9PSAwVUw7CiAgICAy ZDBhOgk4OSA0ZCBkNCAgICAgICAgICAgICAJbW92ICAgICVlY3gsLTB4MmMoJXJicCkKICAgIDJk MGQ6CWU4IDAwIDAwIDAwIDAwICAgICAgIAljYWxscSAgMmQxMiA8dnhsYW5fZGV2X2NvbmZpZ3Vy ZSsweDQxMj4KICAgIDJkMTI6CTQxIDhiIDc0IDI0IDNjICAgICAgIAltb3YgICAgMHgzYyglcjEy KSwlZXNpCiAgICAyZDE3Ogk0OCA4NSBjMCAgICAgICAgICAgICAJdGVzdCAgICVyYXgsJXJheAog ICAgMmQxYToJOGIgNGQgZDQgICAgICAgICAgICAgCW1vdiAgICAtMHgyYyglcmJwKSwlZWN4CgkJ dnhsYW4tPmZsYWdzIHw9IFZYTEFOX0ZfSVBWNjsKICAgIDJkMWQ6CTg5IGIzIGE0IDA4IDAwIDAw ICAgIAltb3YgICAgJWVzaSwweDhhNCglcmJ4KQoJaWYgKGNvbmYtPmxhYmVsICYmICF1c2VfaXB2 NikgewoJCXByX2luZm8oImxhYmVsIG9ubHkgc3VwcG9ydGVkIGluIHVzZSB3aXRoIElQdjZcbiIp OwoJCXJldHVybiAtRUlOVkFMOwoJfQoKCWlmIChjb25mLT5yZW1vdGVfaWZpbmRleCkgewogICAg MmQyMzoJMGYgODQgZmUgMDAgMDAgMDAgICAgCWplICAgICAyZTI3IDx2eGxhbl9kZXZfY29uZmln dXJlKzB4NTI3PgogICAgMmQyOToJNDEgOGIgNTQgMjQgNDAgICAgICAgCW1vdiAgICAweDQwKCVy MTIpLCVlZHgKICAgIDJkMmU6CTMxIGZmICAgICAgICAgICAgICAgIAl4b3IgICAgJWVkaSwlZWRp CgoJaWYgKGRzdC0+cmVtb3RlX2lwLnNhLnNhX2ZhbWlseSA9PSBBRl9JTkVUNiB8fAoJICAgIHZ4 bGFuLT5jZmcuc2FkZHIuc2Euc2FfZmFtaWx5ID09IEFGX0lORVQ2KSB7CgkJaWYgKCFJU19FTkFC TEVEKENPTkZJR19JUFY2KSkKCQkJcmV0dXJuIC1FUEZOT1NVUFBPUlQ7CgkJdXNlX2lwdjYgPSB0 cnVlOwogICAgMmQzMDoJODUgZDIgICAgICAgICAgICAgICAgCXRlc3QgICAlZWR4LCVlZHgKICAg IDJkMzI6CTBmIDg1IGI5IDAwIDAwIDAwICAgIAlqbmUgICAgMmRmMSA8dnhsYW5fZGV2X2NvbmZp Z3VyZSsweDRmMT4KICAgIDJkMzg6CThiIDkwIDQ4IDAyIDAwIDAwICAgIAltb3YgICAgMHgyNDgo JXJheCksJWVkeAoJCXByX2luZm8oImxhYmVsIG9ubHkgc3VwcG9ydGVkIGluIHVzZSB3aXRoIElQ djZcbiIpOwoJCXJldHVybiAtRUlOVkFMOwoJfQoKCWlmIChjb25mLT5yZW1vdGVfaWZpbmRleCkg ewoJCWxvd2VyZGV2ID0gX19kZXZfZ2V0X2J5X2luZGV4KHNyY19uZXQsIGNvbmYtPnJlbW90ZV9p ZmluZGV4KTsKICAgIDJkM2U6CTMxIGZmICAgICAgICAgICAgICAgIAl4b3IgICAgJWVkaSwlZWRp CiAgICAyZDQwOgliZSAzMiAwMCAwMCAwMCAgICAgICAJbW92ICAgICQweDMyLCVlc2kKCQlkc3Qt PnJlbW90ZV9pZmluZGV4ID0gY29uZi0+cmVtb3RlX2lmaW5kZXg7CiAgICAyZDQ1OgkyOSBmMiAg ICAgICAgICAgICAgICAJc3ViICAgICVlc2ksJWVkeAoKCQlpZiAoIWxvd2VyZGV2KSB7CiAgICAy ZDQ3Ogk4OSA5MyA0OCAwMiAwMCAwMCAgICAJbW92ICAgICVlZHgsMHgyNDgoJXJieCkKCQlyZXR1 cm4gLUVJTlZBTDsKCX0KCglpZiAoY29uZi0+cmVtb3RlX2lmaW5kZXgpIHsKCQlsb3dlcmRldiA9 IF9fZGV2X2dldF9ieV9pbmRleChzcmNfbmV0LCBjb25mLT5yZW1vdGVfaWZpbmRleCk7CgkJZHN0 LT5yZW1vdGVfaWZpbmRleCA9IGNvbmYtPnJlbW90ZV9pZmluZGV4OwogICAgMmQ0ZDoJNDEgOGIg NTQgMjQgNDAgICAgICAgCW1vdiAgICAweDQwKCVyMTIpLCVlZHgKICAgIDJkNTI6CTQ0IDBmIGI3 IDgwIDRlIDAyIDAwIAltb3Z6d2wgMHgyNGUoJXJheCksJXI4ZAogICAgMmQ1OToJMDAgCgkJCQly ZXR1cm4gLUVQRVJNOwoJCQl9CgkJfQojZW5kaWYKCgkJaWYgKCFjb25mLT5tdHUpCiAgICAyZDVh Ogk4NSBkMiAgICAgICAgICAgICAgICAJdGVzdCAgICVlZHgsJWVkeAogICAgMmQ1YzoJMGYgODQg ZjIgZmMgZmYgZmYgICAgCWplICAgICAyYTU0IDx2eGxhbl9kZXZfY29uZmlndXJlKzB4MTU0Pgog ICAgMmQ2MjoJODkgZDYgICAgICAgICAgICAgICAgCW1vdiAgICAlZWR4LCVlc2kKICAgIDJkNjQ6 CThiIDgwIDQ4IDAyIDAwIDAwICAgIAltb3YgICAgMHgyNDgoJXJheCksJWVheAoJCQlkZXYtPm10 dSA9IGxvd2VyZGV2LT5tdHUgLSAodXNlX2lwdjYgPyBWWExBTjZfSEVBRFJPT00gOiBWWExBTl9I RUFEUk9PTSk7CiAgICAyZDZhOgk4ZCA1MCBiYSAgICAgICAgICAgICAJbGVhICAgIC0weDQ2KCVy YXgpLCVlZHgKICAgIDJkNmQ6CTgzIGU4IDMyICAgICAgICAgICAgIAlzdWIgICAgJDB4MzIsJWVh eAogICAgMmQ3MDoJNjYgODMgYmIgODAgMDggMDAgMDAgCWNtcHcgICAkMHhhLDB4ODgwKCVyYngp CiAgICAyZDc3OgkwYSAKICAgIDJkNzg6CTBmIDQ1IGQwICAgICAgICAgICAgIAljbW92bmUgJWVh eCwlZWR4CiAgICAyZDdiOgk4MyBmZSA0MyAgICAgICAgICAgICAJY21wICAgICQweDQzLCVlc2kK ICAgIDJkN2U6CWI4IGVhIGZmIGZmIGZmICAgICAgIAltb3YgICAgJDB4ZmZmZmZmZWEsJWVheAoK CQluZWVkZWRfaGVhZHJvb20gPSBsb3dlcmRldi0+aGFyZF9oZWFkZXJfbGVuOwogICAgMmQ4MzoJ MGYgOGUgMDcgZmYgZmYgZmYgICAgCWpsZSAgICAyYzkwIDx2eGxhbl9kZXZfY29uZmlndXJlKzB4 MzkwPgogICAgMmQ4OToJMzkgZjIgICAgICAgICAgICAgICAgCWNtcCAgICAlZXNpLCVlZHgKCX0g ZWxzZSBpZiAodnhsYW5fYWRkcl9tdWx0aWNhc3QoJmRzdC0+cmVtb3RlX2lwKSkgewoJCXByX2lu Zm8oIm11bHRpY2FzdCBkZXN0aW5hdGlvbiByZXF1aXJlcyBpbnRlcmZhY2UgdG8gYmUgc3BlY2lm aWVkXG4iKTsKCQlyZXR1cm4gLUVJTlZBTDsKCX0KCglpZiAoY29uZi0+bXR1KSB7CiAgICAyZDhi OgkwZiA0ZiBkNiAgICAgICAgICAgICAJY21vdmcgICVlc2ksJWVkeAogICAgMmQ4ZToJODkgOTMg NDggMDIgMDAgMDAgICAgCW1vdiAgICAlZWR4LDB4MjQ4KCVyYngpCgkJCSAgICAgIHN0cnVjdCB2 eGxhbl9yZHN0ICpkc3QsIGludCBuZXdfbXR1LCBib29sIHN0cmljdCkKewoJaW50IG1heF9tdHUg PSBJUF9NQVhfTVRVOwoKCWlmIChsb3dlcmRldikKCQltYXhfbXR1ID0gbG93ZXJkZXYtPm10dTsK ICAgIDJkOTQ6CWU5IGJiIGZjIGZmIGZmICAgICAgIAlqbXBxICAgMmE1NCA8dnhsYW5fZGV2X2Nv bmZpZ3VyZSsweDE1ND4KICAgIDJkOTk6CTg5IDRkIGQ0ICAgICAgICAgICAgIAltb3YgICAgJWVj eCwtMHgyYyglcmJwKQoKCWlmIChkc3QtPnJlbW90ZV9pcC5zYS5zYV9mYW1pbHkgPT0gQUZfSU5F VDYpCgkJbWF4X210dSAtPSBWWExBTjZfSEVBRFJPT007CiAgICAyZDljOgllOCAwMCAwMCAwMCAw MCAgICAgICAJY2FsbHEgIDJkYTEgPHZ4bGFuX2Rldl9jb25maWd1cmUrMHg0YTE+CiAgICAyZGEx Ogk0MSA4YiA3NCAyNCAzYyAgICAgICAJbW92ICAgIDB4M2MoJXIxMiksJWVzaQogICAgMmRhNjoJ NDggODUgYzAgICAgICAgICAgICAgCXRlc3QgICAlcmF4LCVyYXgKICAgIDJkYTk6CThiIDRkIGQ0 ICAgICAgICAgICAgIAltb3YgICAgLTB4MmMoJXJicCksJWVjeAoJZWxzZQoJCW1heF9tdHUgLT0g VlhMQU5fSEVBRFJPT007CgoJaWYgKG5ld19tdHUgPCA2OCkKICAgIDJkYWM6CTg5IGIzIGE0IDA4 IDAwIDAwICAgIAltb3YgICAgJWVzaSwweDhhNCglcmJ4KQoJCXJldHVybiAtRUlOVkFMOwogICAg MmRiMjoJNzQgNzMgICAgICAgICAgICAgICAgCWplICAgICAyZTI3IDx2eGxhbl9kZXZfY29uZmln dXJlKzB4NTI3PgoJaWYgKGRzdC0+cmVtb3RlX2lwLnNhLnNhX2ZhbWlseSA9PSBBRl9JTkVUNikK CQltYXhfbXR1IC09IFZYTEFONl9IRUFEUk9PTTsKCWVsc2UKCQltYXhfbXR1IC09IFZYTEFOX0hF QURST09NOwoKCWlmIChuZXdfbXR1IDwgNjgpCiAgICAyZGI0Ogk0OCA4YiA5MCAwOCAwMyAwMCAw MCAJbW92ICAgIDB4MzA4KCVyYXgpLCVyZHgKCQkJcmV0dXJuIC1FSU5WQUw7CgoJCW5ld19tdHUg PSBtYXhfbXR1OwoJfQoKCWRldi0+bXR1ID0gbmV3X210dTsKICAgIDJkYmI6CTQ4IDg1IGQyICAg ICAgICAgICAgIAl0ZXN0ICAgJXJkeCwlcmR4CiAgICAyZGJlOgk3NCAwZSAgICAgICAgICAgICAg ICAJamUgICAgIDJkY2UgPHZ4bGFuX2Rldl9jb25maWd1cmUrMHg0Y2U+CiAgICAyZGMwOgk4YiBi MiAzOCAwMiAwMCAwMCAgICAJbW92ICAgIDB4MjM4KCVyZHgpLCVlc2kKICAgIDJkYzY6CTg1IGY2 ICAgICAgICAgICAgICAgIAl0ZXN0ICAgJWVzaSwlZXNpCiAgICAyZGM4OgkwZiA4NSBiMSAwMCAw MCAwMCAgICAJam5lICAgIDJlN2YgPHZ4bGFuX2Rldl9jb25maWd1cmUrMHg1N2Y+CgkJcHJfaW5m bygibGFiZWwgb25seSBzdXBwb3J0ZWQgaW4gdXNlIHdpdGggSVB2NlxuIik7CgkJcmV0dXJuIC1F SU5WQUw7Cgl9CgoJaWYgKGNvbmYtPnJlbW90ZV9pZmluZGV4KSB7CgkJbG93ZXJkZXYgPSBfX2Rl dl9nZXRfYnlfaW5kZXgoc3JjX25ldCwgY29uZi0+cmVtb3RlX2lmaW5kZXgpOwogICAgMmRjZToJ NDEgOGIgNTQgMjQgNDAgICAgICAgCW1vdiAgICAweDQwKCVyMTIpLCVlZHgKCQlkc3QtPnJlbW90 ZV9pZmluZGV4ID0gY29uZi0+cmVtb3RlX2lmaW5kZXg7CiAgICAyZGQzOgliZiAwMSAwMCAwMCAw MCAgICAgICAJbW92ICAgICQweDEsJWVkaQoKCQlpZiAoIWxvd2VyZGV2KSB7CiAgICAyZGQ4Ogk4 NSBkMiAgICAgICAgICAgICAgICAJdGVzdCAgICVlZHgsJWVkeAogICAgMmRkYToJNzUgMTUgICAg ICAgICAgICAgICAgCWpuZSAgICAyZGYxIDx2eGxhbl9kZXZfY29uZmlndXJlKzB4NGYxPgoJCXJl dHVybiAtRUlOVkFMOwoJfQoKCWlmIChjb25mLT5yZW1vdGVfaWZpbmRleCkgewoJCWxvd2VyZGV2 ID0gX19kZXZfZ2V0X2J5X2luZGV4KHNyY19uZXQsIGNvbmYtPnJlbW90ZV9pZmluZGV4KTsKCQlk c3QtPnJlbW90ZV9pZmluZGV4ID0gY29uZi0+cmVtb3RlX2lmaW5kZXg7CiAgICAyZGRjOgk4YiA5 MCA0OCAwMiAwMCAwMCAgICAJbW92ICAgIDB4MjQ4KCVyYXgpLCVlZHgKCgkJaWYgKCFsb3dlcmRl dikgewogICAgMmRlMjoJYmYgMDEgMDAgMDAgMDAgICAgICAgCW1vdiAgICAkMHgxLCVlZGkKfSkK CnN0YXRpYyBfX2Fsd2F5c19pbmxpbmUKdm9pZCBfX3JlYWRfb25jZV9zaXplKGNvbnN0IHZvbGF0 aWxlIHZvaWQgKnAsIHZvaWQgKnJlcywgaW50IHNpemUpCnsKCV9fUkVBRF9PTkNFX1NJWkU7CiAg ICAyZGU3OgliZSA0NiAwMCAwMCAwMCAgICAgICAJbW92ICAgICQweDQ2LCVlc2kKCQl9CgojaWYg SVNfRU5BQkxFRChDT05GSUdfSVBWNikKCQlpZiAodXNlX2lwdjYpIHsKCQkJc3RydWN0IGluZXQ2 X2RldiAqaWRldiA9IF9faW42X2Rldl9nZXQobG93ZXJkZXYpOwoJCQlpZiAoaWRldiAmJiBpZGV2 LT5jbmYuZGlzYWJsZV9pcHY2KSB7CiAgICAyZGVjOgllOSA1NCBmZiBmZiBmZiAgICAgICAJam1w cSAgIDJkNDUgPHZ4bGFuX2Rldl9jb25maWd1cmUrMHg0NDU+CiAgICAyZGYxOgk0NCAwZiBiNyA4 MCA0ZSAwMiAwMCAJbW92endsIDB4MjRlKCVyYXgpLCVyOGQKICAgIDJkZjg6CTAwIAogICAgMmRm OToJODkgZDYgICAgICAgICAgICAgICAgCW1vdiAgICAlZWR4LCVlc2kKICAgIDJkZmI6CWU5IDY0 IGZmIGZmIGZmICAgICAgIAlqbXBxICAgMmQ2NCA8dnhsYW5fZGV2X2NvbmZpZ3VyZSsweDQ2ND4K CQkJCXJldHVybiAtRVBFUk07CgkJCX0KCQl9CiNlbmRpZgoKCQlpZiAoIWNvbmYtPm10dSkKICAg IDJlMDA6CTRjIDg5IGVmICAgICAgICAgICAgIAltb3YgICAgJXIxMywlcmRpCiAgICAyZTAzOgk4 OSA0NSBkNCAgICAgICAgICAgICAJbW92ICAgICVlYXgsLTB4MmMoJXJicCkKICAgIDJlMDY6CWU4 IGM1IGYxIGZmIGZmICAgICAgIAljYWxscSAgMWZkMCA8dnhsYW5fZmRiX2RlbGV0ZV9kZWZhdWx0 PgogICAgMmUwYjoJOGIgNDUgZDQgICAgICAgICAgICAgCW1vdiAgICAtMHgyYyglcmJwKSwlZWF4 CgkJCWRldi0+bXR1ID0gbG93ZXJkZXYtPm10dSAtICh1c2VfaXB2NiA/IFZYTEFONl9IRUFEUk9P TSA6IFZYTEFOX0hFQURST09NKTsKICAgIDJlMGU6CTQ4IDgzIGM0IDIwICAgICAgICAgIAlhZGQg ICAgJDB4MjAsJXJzcAogICAgMmUxMjoJNWIgICAgICAgICAgICAgICAgICAgCXBvcCAgICAlcmJ4 CiAgICAyZTEzOgk0MSA1YyAgICAgICAgICAgICAgICAJcG9wICAgICVyMTIKICAgIDJlMTU6CTQx IDVkICAgICAgICAgICAgICAgIAlwb3AgICAgJXIxMwogICAgMmUxNzoJNDEgNWUgICAgICAgICAg ICAgICAgCXBvcCAgICAlcjE0CiAgICAyZTE5Ogk0MSA1ZiAgICAgICAgICAgICAgICAJcG9wICAg ICVyMTUKICAgIDJlMWI6CTVkICAgICAgICAgICAgICAgICAgIAlwb3AgICAgJXJicAogICAgMmUx YzoJYzMgICAgICAgICAgICAgICAgICAgCXJldHEgICAKICAgIDJlMWQ6CWI4IGZmIGZmIDAwIDAw ICAgICAgIAltb3YgICAgJDB4ZmZmZiwlZWF4CgoJCW5lZWRlZF9oZWFkcm9vbSA9IGxvd2VyZGV2 LT5oYXJkX2hlYWRlcl9sZW47CiAgICAyZTIyOgllOSA0MyBmZiBmZiBmZiAgICAgICAJam1wcSAg IDJkNmEgPHZ4bGFuX2Rldl9jb25maWd1cmUrMHg0NmE+CiAgICAyZTI3Ogk0OCBjNyBjNyAwMCAw MCAwMCAwMCAJbW92ICAgICQweDAsJXJkaQogICAgMmUyZToJZTggMDAgMDAgMDAgMDAgICAgICAg CWNhbGxxICAyZTMzIDx2eGxhbl9kZXZfY29uZmlndXJlKzB4NTMzPgoJCQlyZXR1cm4gZXJyOwoJ fQoKCWVyciA9IHJlZ2lzdGVyX25ldGRldmljZShkZXYpOwoJaWYgKGVycikgewoJCXZ4bGFuX2Zk Yl9kZWxldGVfZGVmYXVsdCh2eGxhbik7CiAgICAyZTMzOgliOCBlZCBmZiBmZiBmZiAgICAgICAJ bW92ICAgICQweGZmZmZmZmVkLCVlYXgKICAgIDJlMzg6CWU5IDUzIGZlIGZmIGZmICAgICAgIAlq bXBxICAgMmM5MCA8dnhsYW5fZGV2X2NvbmZpZ3VyZSsweDM5MD4KCQlyZXR1cm4gZXJyOwogICAg MmUzZDoJNDggYzcgYzcgMDAgMDAgMDAgMDAgCW1vdiAgICAkMHgwLCVyZGkKCX0KCglsaXN0X2Fk ZCgmdnhsYW4tPm5leHQsICZ2bi0+dnhsYW5fbGlzdCk7CgoJcmV0dXJuIDA7Cn0KICAgIDJlNDQ6 CWU4IDAwIDAwIDAwIDAwICAgICAgIAljYWxscSAgMmU0OSA8dnhsYW5fZGV2X2NvbmZpZ3VyZSsw eDU0OT4KICAgIDJlNDk6CWI4IGVhIGZmIGZmIGZmICAgICAgIAltb3YgICAgJDB4ZmZmZmZmZWEs JWVheAoKc3RhdGljIGludCBfX3Z4bGFuX2NoYW5nZV9tdHUoc3RydWN0IG5ldF9kZXZpY2UgKmRl diwKCQkJICAgICAgc3RydWN0IG5ldF9kZXZpY2UgKmxvd2VyZGV2LAoJCQkgICAgICBzdHJ1Y3Qg dnhsYW5fcmRzdCAqZHN0LCBpbnQgbmV3X210dSwgYm9vbCBzdHJpY3QpCnsKCWludCBtYXhfbXR1 ID0gSVBfTUFYX01UVTsKICAgIDJlNGU6CWU5IDNkIGZlIGZmIGZmICAgICAgIAlqbXBxICAgMmM5 MCA8dnhsYW5fZGV2X2NvbmZpZ3VyZSsweDM5MD4KICAgIDJlNTM6CTQ4IGM3IGM3IDAwIDAwIDAw IDAwIAltb3YgICAgJDB4MCwlcmRpCglpZiAoY29uZi0+cmVtb3RlX2lmaW5kZXgpIHsKCQlsb3dl cmRldiA9IF9fZGV2X2dldF9ieV9pbmRleChzcmNfbmV0LCBjb25mLT5yZW1vdGVfaWZpbmRleCk7 CgkJZHN0LT5yZW1vdGVfaWZpbmRleCA9IGNvbmYtPnJlbW90ZV9pZmluZGV4OwoKCQlpZiAoIWxv d2VyZGV2KSB7CgkJCXByX2luZm8oImlmaW5kZXggJWQgZG9lcyBub3QgZXhpc3RcbiIsIGRzdC0+ cmVtb3RlX2lmaW5kZXgpOwogICAgMmU1YToJZTggMDAgMDAgMDAgMDAgICAgICAgCWNhbGxxICAy ZTVmIDx2eGxhbl9kZXZfY29uZmlndXJlKzB4NTVmPgogICAgMmU1ZjoJYjggZWEgZmYgZmYgZmYg ICAgICAgCW1vdiAgICAkMHhmZmZmZmZlYSwlZWF4CgkJCXJldHVybiAtRU5PREVWOwogICAgMmU2 NDoJZTkgMjcgZmUgZmYgZmYgICAgICAgCWptcHEgICAyYzkwIDx2eGxhbl9kZXZfY29uZmlndXJl KzB4MzkwPgogICAgMmU2OToJNDggYzcgYzcgMDAgMDAgMDAgMDAgCW1vdiAgICAkMHgwLCVyZGkK CQl1c2VfaXB2NiA9IHRydWU7CgkJdnhsYW4tPmZsYWdzIHw9IFZYTEFOX0ZfSVBWNjsKCX0KCglp ZiAoY29uZi0+bGFiZWwgJiYgIXVzZV9pcHY2KSB7CgkJcHJfaW5mbygibGFiZWwgb25seSBzdXBw b3J0ZWQgaW4gdXNlIHdpdGggSVB2NlxuIik7CiAgICAyZTcwOgllOCAwMCAwMCAwMCAwMCAgICAg ICAJY2FsbHEgIDJlNzUgPHZ4bGFuX2Rldl9jb25maWd1cmUrMHg1NzU+CiAgICAyZTc1OgliOCBl YSBmZiBmZiBmZiAgICAgICAJbW92ICAgICQweGZmZmZmZmVhLCVlYXgKCQlyZXR1cm4gLUVJTlZB TDsKICAgIDJlN2E6CWU5IDExIGZlIGZmIGZmICAgICAgIAlqbXBxICAgMmM5MCA8dnhsYW5fZGV2 X2NvbmZpZ3VyZSsweDM5MD4KICAgIDJlN2Y6CTQ4IGM3IGM3IDAwIDAwIDAwIDAwIAltb3YgICAg JDB4MCwlcmRpCgkJaWYgKCFjb25mLT5tdHUpCgkJCWRldi0+bXR1ID0gbG93ZXJkZXYtPm10dSAt ICh1c2VfaXB2NiA/IFZYTEFONl9IRUFEUk9PTSA6IFZYTEFOX0hFQURST09NKTsKCgkJbmVlZGVk X2hlYWRyb29tID0gbG93ZXJkZXYtPmhhcmRfaGVhZGVyX2xlbjsKCX0gZWxzZSBpZiAodnhsYW5f YWRkcl9tdWx0aWNhc3QoJmRzdC0+cmVtb3RlX2lwKSkgewoJCXByX2luZm8oIm11bHRpY2FzdCBk ZXN0aW5hdGlvbiByZXF1aXJlcyBpbnRlcmZhY2UgdG8gYmUgc3BlY2lmaWVkXG4iKTsKICAgIDJl ODY6CWU4IDAwIDAwIDAwIDAwICAgICAgIAljYWxscSAgMmU4YiA8dnhsYW5fZGV2X2NvbmZpZ3Vy ZSsweDU4Yj4KICAgIDJlOGI6CWI4IGZmIGZmIGZmIGZmICAgICAgIAltb3YgICAgJDB4ZmZmZmZm ZmYsJWVheAoJCXJldHVybiAtRUlOVkFMOwogICAgMmU5MDoJZTkgZmIgZmQgZmYgZmYgICAgICAg CWptcHEgICAyYzkwIDx2eGxhbl9kZXZfY29uZmlndXJlKzB4MzkwPgogICAgMmU5NToJOTAgICAg ICAgICAgICAgICAgICAgCW5vcAogICAgMmU5NjoJNjYgMmUgMGYgMWYgODQgMDAgMDAgCW5vcHcg ICAlY3M6MHgwKCVyYXgsJXJheCwxKQogICAgMmU5ZDoJMDAgMDAgMDAgCgowMDAwMDAwMDAwMDAy ZWEwIDx2eGxhbl9uZXdsaW5rPjoKCQkgKiBUaGlzIGNhbiBiZSByZWxheGVkIGxhdGVyOyBpbiBz dWNoIGNhc2UsIHRoZSBvdGhlciBzaWRlCgkJICogb2YgdGhlIFB0UCBsaW5rIHdpbGwgaGF2ZSB0 byBiZSBwcm92aWRlZC4KCQkgKi8KCQlpZiAoKGNvbmYtPmZsYWdzICYgflZYTEFOX0ZfQUxMT1dF RF9HUEUpIHx8CgkJICAgICEoY29uZi0+ZmxhZ3MgJiBWWExBTl9GX0NPTExFQ1RfTUVUQURBVEEp KSB7CgkJCXByX2luZm8oInVuc3VwcG9ydGVkIGNvbWJpbmF0aW9uIG9mIGV4dGVuc2lvbnNcbiIp OwogICAgMmVhMDoJZTggMDAgMDAgMDAgMDAgICAgICAgCWNhbGxxICAyZWE1IDx2eGxhbl9uZXds aW5rKzB4NT4KCQkJcmV0dXJuIC1FSU5WQUw7CiAgICAyZWE1Ogk1NSAgICAgICAgICAgICAgICAg ICAJcHVzaCAgICVyYnAKICAgIDJlYTY6CTQ4IDg5IGU1ICAgICAgICAgICAgIAltb3YgICAgJXJz cCwlcmJwCiAgICAyZWE5Ogk0MSA1NyAgICAgICAgICAgICAgICAJcHVzaCAgICVyMTUKICAgIDJl YWI6CTQxIDU2ICAgICAgICAgICAgICAgIAlwdXNoICAgJXIxNAogICAgMmVhZDoJNDEgNTUgICAg ICAgICAgICAgICAgCXB1c2ggICAlcjEzCgojaWYgSVNfRU5BQkxFRChDT05GSUdfSVBWNikKCQlp ZiAodXNlX2lwdjYpIHsKCQkJc3RydWN0IGluZXQ2X2RldiAqaWRldiA9IF9faW42X2Rldl9nZXQo bG93ZXJkZXYpOwoJCQlpZiAoaWRldiAmJiBpZGV2LT5jbmYuZGlzYWJsZV9pcHY2KSB7CgkJCQlw cl9pbmZvKCJJUHY2IGlzIGRpc2FibGVkIHZpYSBzeXNjdGxcbiIpOwogICAgMmVhZjoJNDEgNTQg ICAgICAgICAgICAgICAgCXB1c2ggICAlcjEyCiAgICAyZWIxOgk0OSA4OSBmZCAgICAgICAgICAg ICAJbW92ICAgICVyZGksJXIxMwogICAgMmViNDoJNTMgICAgICAgICAgICAgICAgICAgCXB1c2gg ICAlcmJ4CiAgICAyZWI1Ogk0OCA4OSBjYiAgICAgICAgICAgICAJbW92ICAgICVyY3gsJXJieAog ICAgMmViODoJYjkgMGQgMDAgMDAgMDAgICAgICAgCW1vdiAgICAkMHhkLCVlY3gKCQkJCXJldHVy biAtRVBFUk07CiAgICAyZWJkOgk0OSA4OSBmNiAgICAgICAgICAgICAJbW92ICAgICVyc2ksJXIx NAogICAgMmVjMDoJNDkgODkgZDcgICAgICAgICAgICAgCW1vdiAgICAlcmR4LCVyMTUKICAgIDJl YzM6CTQ4IDgzIGU0IGYwICAgICAgICAgIAlhbmQgICAgJDB4ZmZmZmZmZmZmZmZmZmZmMCwlcnNw CiAgICAyZWM3Ogk0OCA4MyBjNCA4MCAgICAgICAgICAJYWRkICAgICQweGZmZmZmZmZmZmZmZmZm ODAsJXJzcAogICAgMmVjYjoJNGMgOGQgNjQgMjQgMTAgICAgICAgCWxlYSAgICAweDEwKCVyc3Ap LCVyMTIKCXJldHVybiAwOwp9CgpzdGF0aWMgaW50IHZ4bGFuX25ld2xpbmsoc3RydWN0IG5ldCAq c3JjX25ldCwgc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKCQkJIHN0cnVjdCBubGF0dHIgKnRiW10s IHN0cnVjdCBubGF0dHIgKmRhdGFbXSkKewogICAgMmVkMDoJNjUgNDggOGIgMDQgMjUgMjggMDAg CW1vdiAgICAlZ3M6MHgyOCwlcmF4CiAgICAyZWQ3OgkwMCAwMCAKICAgIDJlZDk6CTQ4IDg5IDQ0 IDI0IDc4ICAgICAgIAltb3YgICAgJXJheCwweDc4KCVyc3ApCiAgICAyZWRlOgkzMSBjMCAgICAg ICAgICAgICAgICAJeG9yICAgICVlYXgsJWVheAogICAgMmVlMDoJNGMgODkgZTcgICAgICAgICAg ICAgCW1vdiAgICAlcjEyLCVyZGkKICAgIDJlZTM6CWYzIDQ4IGFiICAgICAgICAgICAgIAlyZXAg c3RvcyAlcmF4LCVlczooJXJkaSkKICAgIDJlZTY6CTQ4IDhiIDQzIDA4ICAgICAgICAgIAltb3Yg ICAgMHg4KCVyYngpLCVyYXgKCXN0cnVjdCB2eGxhbl9jb25maWcgY29uZjsKCgltZW1zZXQoJmNv bmYsIDAsIHNpemVvZihjb25mKSk7CiAgICAyZWVhOgk0OCA4NSBjMCAgICAgICAgICAgICAJdGVz dCAgICVyYXgsJXJheAoJcmV0dXJuIDA7Cn0KCnN0YXRpYyBpbnQgdnhsYW5fbmV3bGluayhzdHJ1 Y3QgbmV0ICpzcmNfbmV0LCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LAoJCQkgc3RydWN0IG5sYXR0 ciAqdGJbXSwgc3RydWN0IG5sYXR0ciAqZGF0YVtdKQp7CiAgICAyZWVkOgk3NCAwOSAgICAgICAg ICAgICAgICAJamUgICAgIDJlZjggPHZ4bGFuX25ld2xpbmsrMHg1OD4KICAgIDJlZWY6CThiIDQw IDA0ICAgICAgICAgICAgIAltb3YgICAgMHg0KCVyYXgpLCVlYXgKICAgIDJlZjI6CTBmIGM4ICAg ICAgICAgICAgICAgIAlic3dhcCAgJWVheAogICAgMmVmNDoJODkgNDQgMjQgNDggICAgICAgICAg CW1vdiAgICAlZWF4LDB4NDgoJXJzcCkKICAgIDJlZjg6CTQ4IDhiIDQzIDEwICAgICAgICAgIAlt b3YgICAgMHgxMCglcmJ4KSwlcmF4CglzdHJ1Y3QgdnhsYW5fY29uZmlnIGNvbmY7CgoJbWVtc2V0 KCZjb25mLCAwLCBzaXplb2YoY29uZikpOwogICAgMmVmYzoJNDggODUgYzAgICAgICAgICAgICAg CXRlc3QgICAlcmF4LCVyYXgKICAgIDJlZmY6CTBmIDg0IGRmIDAyIDAwIDAwICAgIAlqZSAgICAg MzFlNCA8dnhsYW5fbmV3bGluaysweDM0ND4KCXJldHVybiAwOwp9CgpzdGF0aWMgaW50IHZ4bGFu X25ld2xpbmsoc3RydWN0IG5ldCAqc3JjX25ldCwgc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKCQkJ IHN0cnVjdCBubGF0dHIgKnRiW10sIHN0cnVjdCBubGF0dHIgKmRhdGFbXSkKewogICAgMmYwNToJ OGIgNDAgMDQgICAgICAgICAgICAgCW1vdiAgICAweDQoJXJheCksJWVheAogICAgMmYwODoJODkg NDQgMjQgMTQgICAgICAgICAgCW1vdiAgICAlZWF4LDB4MTQoJXJzcCkKICAgIDJmMGM6CTQ4IDhi IDQzIDIwICAgICAgICAgIAltb3YgICAgMHgyMCglcmJ4KSwlcmF4CglzdHJ1Y3QgdnhsYW5fY29u ZmlnIGNvbmY7CgoJbWVtc2V0KCZjb25mLCAwLCBzaXplb2YoY29uZikpOwogICAgMmYxMDoJNDgg ODUgYzAgICAgICAgICAgICAgCXRlc3QgICAlcmF4LCVyYXgKICAgIDJmMTM6CTBmIDg0IDhjIDAy IDAwIDAwICAgIAlqZSAgICAgMzFhNSA8dnhsYW5fbmV3bGluaysweDMwNT4KCglpZiAoZGF0YVtJ RkxBX1ZYTEFOX0lEXSkKICAgIDJmMTk6CThiIDQwIDA0ICAgICAgICAgICAgIAltb3YgICAgMHg0 KCVyYXgpLCVlYXgKICAgIDJmMWM6CWJhIDAyIDAwIDAwIDAwICAgICAgIAltb3YgICAgJDB4Miwl ZWR4CgkJY29uZi52bmkgPSBjcHVfdG9fYmUzMihubGFfZ2V0X3UzMihkYXRhW0lGTEFfVlhMQU5f SURdKSk7CiAgICAyZjIxOgk2NiA4OSA1NCAyNCAyYyAgICAgICAJbW92ICAgICVkeCwweDJjKCVy c3ApCiAgICAyZjI2Ogk4OSA0NCAyNCAzMCAgICAgICAgICAJbW92ICAgICVlYXgsMHgzMCglcnNw KQoKCWlmIChkYXRhW0lGTEFfVlhMQU5fR1JPVVBdKSB7CiAgICAyZjJhOgk0OCA4YiA0MyAxOCAg ICAgICAgICAJbW92ICAgIDB4MTgoJXJieCksJXJheAogICAgMmYyZToJNDggODUgYzAgICAgICAg ICAgICAgCXRlc3QgICAlcmF4LCVyYXgKICAgIDJmMzE6CTc0IDA3ICAgICAgICAgICAgICAgIAlq ZSAgICAgMmYzYSA8dnhsYW5fbmV3bGluaysweDlhPgogICAgMmYzMzoJOGIgNDAgMDQgICAgICAg ICAgICAgCW1vdiAgICAweDQoJXJheCksJWVheAogKiBubGFfZ2V0X2luX2FkZHIgLSByZXR1cm4g cGF5bG9hZCBvZiBJUHY0IGFkZHJlc3MgYXR0cmlidXRlCiAqIEBubGE6IElQdjQgYWRkcmVzcyBu ZXRsaW5rIGF0dHJpYnV0ZQogKi8Kc3RhdGljIGlubGluZSBfX2JlMzIgbmxhX2dldF9pbl9hZGRy KGNvbnN0IHN0cnVjdCBubGF0dHIgKm5sYSkKewoJcmV0dXJuICooX19iZTMyICopIG5sYV9kYXRh KG5sYSk7CiAgICAyZjM2Ogk4OSA0NCAyNCA0YyAgICAgICAgICAJbW92ICAgICVlYXgsMHg0Yygl cnNwKQoJCWNvbmYucmVtb3RlX2lwLnNpbi5zaW5fYWRkci5zX2FkZHIgPSBubGFfZ2V0X2luX2Fk ZHIoZGF0YVtJRkxBX1ZYTEFOX0dST1VQXSk7CiAgICAyZjNhOgk0OCA4YiA0MyAzMCAgICAgICAg ICAJbW92ICAgIDB4MzAoJXJieCksJXJheAoKCQljb25mLnJlbW90ZV9pcC5zaW42LnNpbjZfYWRk ciA9IG5sYV9nZXRfaW42X2FkZHIoZGF0YVtJRkxBX1ZYTEFOX0dST1VQNl0pOwoJCWNvbmYucmVt b3RlX2lwLnNhLnNhX2ZhbWlseSA9IEFGX0lORVQ2OwoJfQoKCWlmIChkYXRhW0lGTEFfVlhMQU5f TE9DQUxdKSB7CiAgICAyZjNlOgk0OCA4NSBjMCAgICAgICAgICAgICAJdGVzdCAgICVyYXgsJXJh eAogICAgMmY0MToJNzQgMDggICAgICAgICAgICAgICAgCWplICAgICAyZjRiIDx2eGxhbl9uZXds aW5rKzB4YWI+CiAgICAyZjQzOgkwZiBiNiA0MCAwNCAgICAgICAgICAJbW92emJsIDB4NCglcmF4 KSwlZWF4CiAgICAyZjQ3Ogk4OCA0NCAyNCA1YSAgICAgICAgICAJbW92ICAgICVhbCwweDVhKCVy c3ApCiAgICAyZjRiOgk0OCA4YiA0MyAyOCAgICAgICAgICAJbW92ICAgIDB4MjgoJXJieCksJXJh eAoJCWNvbmYuc2FkZHIuc2luLnNpbl9hZGRyLnNfYWRkciA9IG5sYV9nZXRfaW5fYWRkcihkYXRh W0lGTEFfVlhMQU5fTE9DQUxdKTsKCQljb25mLnNhZGRyLnNhLnNhX2ZhbWlseSA9IEFGX0lORVQ7 CiAgICAyZjRmOgk0OCA4NSBjMCAgICAgICAgICAgICAJdGVzdCAgICVyYXgsJXJheAogICAgMmY1 MjoJNzQgMDggICAgICAgICAgICAgICAgCWplICAgICAyZjVjIDx2eGxhbl9uZXdsaW5rKzB4YmM+ CiAgICAyZjU0OgkwZiBiNiA0MCAwNCAgICAgICAgICAJbW92emJsIDB4NCglcmF4KSwlZWF4CgkJ Y29uZi5yZW1vdGVfaXAuc2luNi5zaW42X2FkZHIgPSBubGFfZ2V0X2luNl9hZGRyKGRhdGFbSUZM QV9WWExBTl9HUk9VUDZdKTsKCQljb25mLnJlbW90ZV9pcC5zYS5zYV9mYW1pbHkgPSBBRl9JTkVU NjsKCX0KCglpZiAoZGF0YVtJRkxBX1ZYTEFOX0xPQ0FMXSkgewoJCWNvbmYuc2FkZHIuc2luLnNp bl9hZGRyLnNfYWRkciA9IG5sYV9nZXRfaW5fYWRkcihkYXRhW0lGTEFfVlhMQU5fTE9DQUxdKTsK ICAgIDJmNTg6CTg4IDQ0IDI0IDViICAgICAgICAgIAltb3YgICAgJWFsLDB4NWIoJXJzcCkKCQkv KiBUT0RPOiByZXNwZWN0IHNjb3BlIGlkICovCgkJY29uZi5zYWRkci5zaW42LnNpbjZfYWRkciA9 IG5sYV9nZXRfaW42X2FkZHIoZGF0YVtJRkxBX1ZYTEFOX0xPQ0FMNl0pOwoJCWNvbmYuc2FkZHIu c2Euc2FfZmFtaWx5ID0gQUZfSU5FVDY7Cgl9CgoJaWYgKGRhdGFbSUZMQV9WWExBTl9MSU5LXSkK ICAgIDJmNWM6CTQ4IDhiIDgzIGQwIDAwIDAwIDAwIAltb3YgICAgMHhkMCglcmJ4KSwlcmF4CgkJ Y29uZi5yZW1vdGVfaWZpbmRleCA9IG5sYV9nZXRfdTMyKGRhdGFbSUZMQV9WWExBTl9MSU5LXSk7 CiAgICAyZjYzOgk0OCA4NSBjMCAgICAgICAgICAgICAJdGVzdCAgICVyYXgsJXJheAogICAgMmY2 NjoJNzQgMGMgICAgICAgICAgICAgICAgCWplICAgICAyZjc0IDx2eGxhbl9uZXdsaW5rKzB4ZDQ+ CiAgICAyZjY4Ogk4YiA0MCAwNCAgICAgICAgICAgICAJbW92ICAgIDB4NCglcmF4KSwlZWF4CgoJ aWYgKGRhdGFbSUZMQV9WWExBTl9UT1NdKQogICAgMmY2YjoJMjUgMDAgMGYgZmYgZmYgICAgICAg CWFuZCAgICAkMHhmZmZmMGYwMCwlZWF4CiAgICAyZjcwOgk4OSA0NCAyNCA1YyAgICAgICAgICAJ bW92ICAgICVlYXgsMHg1YyglcnNwKQogKiBubGFfZ2V0X3U4IC0gcmV0dXJuIHBheWxvYWQgb2Yg dTggYXR0cmlidXRlCiAqIEBubGE6IHU4IG5ldGxpbmsgYXR0cmlidXRlCiAqLwpzdGF0aWMgaW5s aW5lIHU4IG5sYV9nZXRfdTgoY29uc3Qgc3RydWN0IG5sYXR0ciAqbmxhKQp7CglyZXR1cm4gKih1 OCAqKSBubGFfZGF0YShubGEpOwogICAgMmY3NDoJNDggOGIgNDMgMzggICAgICAgICAgCW1vdiAg ICAweDM4KCVyYngpLCVyYXgKCQljb25mLnRvcyAgPSBubGFfZ2V0X3U4KGRhdGFbSUZMQV9WWExB Tl9UT1NdKTsKICAgIDJmNzg6CTQ4IDg1IGMwICAgICAgICAgICAgIAl0ZXN0ICAgJXJheCwlcmF4 CgoJaWYgKGRhdGFbSUZMQV9WWExBTl9UVExdKQogICAgMmY3YjoJMGYgODQgYTcgMDEgMDAgMDAg ICAgCWplICAgICAzMTI4IDx2eGxhbl9uZXdsaW5rKzB4Mjg4PgogICAgMmY4MToJODAgNzggMDQg MDAgICAgICAgICAgCWNtcGIgICAkMHgwLDB4NCglcmF4KQogICAgMmY4NToJMGYgODUgOWQgMDEg MDAgMDAgICAgCWpuZSAgICAzMTI4IDx2eGxhbl9uZXdsaW5rKzB4Mjg4PgoJCWNvbmYudHRsID0g bmxhX2dldF91OChkYXRhW0lGTEFfVlhMQU5fVFRMXSk7CiAgICAyZjhiOgk0OCA4YiA0MyA0MCAg ICAgICAgICAJbW92ICAgIDB4NDAoJXJieCksJXJheAoKCWlmIChkYXRhW0lGTEFfVlhMQU5fTEFC RUxdKQogICAgMmY4ZjoJNDggODUgYzAgICAgICAgICAgICAgCXRlc3QgICAlcmF4LCVyYXgKICAg IDJmOTI6CTc0IDA4ICAgICAgICAgICAgICAgIAlqZSAgICAgMmY5YyA8dnhsYW5fbmV3bGluaysw eGZjPgogICAgMmY5NDoJOGIgNDAgMDQgICAgICAgICAgICAgCW1vdiAgICAweDQoJXJheCksJWVh eAogICAgMmY5NzoJNDggODkgNDQgMjQgNjggICAgICAgCW1vdiAgICAlcmF4LDB4NjgoJXJzcCkK CQljb25mLmxhYmVsID0gbmxhX2dldF9iZTMyKGRhdGFbSUZMQV9WWExBTl9MQUJFTF0pICYKICAg IDJmOWM6CTQ4IDhiIDQzIDU4ICAgICAgICAgIAltb3YgICAgMHg1OCglcmJ4KSwlcmF4CiAgICAy ZmEwOgk0OCA4NSBjMCAgICAgICAgICAgICAJdGVzdCAgICVyYXgsJXJheAogICAgMmZhMzoJNzQg MGEgICAgICAgICAgICAgICAgCWplICAgICAyZmFmIDx2eGxhbl9uZXdsaW5rKzB4MTBmPgoJCQkg ICAgIElQVjZfRkxPV0xBQkVMX01BU0s7CgoJaWYgKCFkYXRhW0lGTEFfVlhMQU5fTEVBUk5JTkdd IHx8IG5sYV9nZXRfdTgoZGF0YVtJRkxBX1ZYTEFOX0xFQVJOSU5HXSkpCiAgICAyZmE1Ogk4MCA3 OCAwNCAwMCAgICAgICAgICAJY21wYiAgICQweDAsMHg0KCVyYXgpCiAgICAyZmE5OgkwZiA4NSBl YyAwMSAwMCAwMCAgICAJam5lICAgIDMxOWIgPHZ4bGFuX25ld2xpbmsrMHgyZmI+CiAgICAyZmFm Ogk0OCA4YiA0MyA2MCAgICAgICAgICAJbW92ICAgIDB4NjAoJXJieCksJXJheAogICAgMmZiMzoJ NDggODUgYzAgICAgICAgICAgICAgCXRlc3QgICAlcmF4LCVyYXgKICAgIDJmYjY6CTc0IDBhICAg ICAgICAgICAgICAgIAlqZSAgICAgMmZjMiA8dnhsYW5fbmV3bGluaysweDEyMj4KICAgIDJmYjg6 CTgwIDc4IDA0IDAwICAgICAgICAgIAljbXBiICAgJDB4MCwweDQoJXJheCkKCQljb25mLmZsYWdz IHw9IFZYTEFOX0ZfTEVBUk47CgoJaWYgKGRhdGFbSUZMQV9WWExBTl9BR0VJTkddKQogICAgMmZi YzoJMGYgODUgY2YgMDEgMDAgMDAgICAgCWpuZSAgICAzMTkxIDx2eGxhbl9uZXdsaW5rKzB4MmYx PgogICAgMmZjMjoJNDggOGIgNDMgNjggICAgICAgICAgCW1vdiAgICAweDY4KCVyYngpLCVyYXgK CQljb25mLmFnZV9pbnRlcnZhbCA9IG5sYV9nZXRfdTMyKGRhdGFbSUZMQV9WWExBTl9BR0VJTkdd KTsKICAgIDJmYzY6CTQ4IDg1IGMwICAgICAgICAgICAgIAl0ZXN0ICAgJXJheCwlcmF4CiAgICAy ZmM5Ogk3NCAwYSAgICAgICAgICAgICAgICAJamUgICAgIDJmZDUgPHZ4bGFuX25ld2xpbmsrMHgx MzU+CiAgICAyZmNiOgk4MCA3OCAwNCAwMCAgICAgICAgICAJY21wYiAgICQweDAsMHg0KCVyYXgp CgoJaWYgKGRhdGFbSUZMQV9WWExBTl9QUk9YWV0gJiYgbmxhX2dldF91OChkYXRhW0lGTEFfVlhM QU5fUFJPWFldKSkKICAgIDJmY2Y6CTBmIDg1IGIyIDAxIDAwIDAwICAgIAlqbmUgICAgMzE4NyA8 dnhsYW5fbmV3bGluaysweDJlNz4KICAgIDJmZDU6CTQ4IDhiIDQzIDcwICAgICAgICAgIAltb3Yg ICAgMHg3MCglcmJ4KSwlcmF4CiAgICAyZmQ5Ogk0OCA4NSBjMCAgICAgICAgICAgICAJdGVzdCAg ICVyYXgsJXJheAogICAgMmZkYzoJNzQgMGEgICAgICAgICAgICAgICAgCWplICAgICAyZmU4IDx2 eGxhbl9uZXdsaW5rKzB4MTQ4PgogICAgMmZkZToJODAgNzggMDQgMDAgICAgICAgICAgCWNtcGIg ICAkMHgwLDB4NCglcmF4KQoJCWNvbmYuZmxhZ3MgfD0gVlhMQU5fRl9QUk9YWTsKCglpZiAoZGF0 YVtJRkxBX1ZYTEFOX1JTQ10gJiYgbmxhX2dldF91OChkYXRhW0lGTEFfVlhMQU5fUlNDXSkpCiAg ICAyZmUyOgkwZiA4NSA5NSAwMSAwMCAwMCAgICAJam5lICAgIDMxN2QgPHZ4bGFuX25ld2xpbmsr MHgyZGQ+CiAgICAyZmU4Ogk0OCA4YiA0MyA0OCAgICAgICAgICAJbW92ICAgIDB4NDgoJXJieCks JXJheAogICAgMmZlYzoJNDggODUgYzAgICAgICAgICAgICAgCXRlc3QgICAlcmF4LCVyYXgKICAg IDJmZWY6CTc0IDA3ICAgICAgICAgICAgICAgIAlqZSAgICAgMmZmOCA8dnhsYW5fbmV3bGluaysw eDE1OD4KICAgIDJmZjE6CThiIDQwIDA0ICAgICAgICAgICAgIAltb3YgICAgMHg0KCVyYXgpLCVl YXgKCQljb25mLmZsYWdzIHw9IFZYTEFOX0ZfUlNDOwoKCWlmIChkYXRhW0lGTEFfVlhMQU5fTDJN SVNTXSAmJiBubGFfZ2V0X3U4KGRhdGFbSUZMQV9WWExBTl9MMk1JU1NdKSkKICAgIDJmZjQ6CTg5 IDQ0IDI0IDcwICAgICAgICAgIAltb3YgICAgJWVheCwweDcwKCVyc3ApCiAgICAyZmY4Ogk0OCA4 YiA4MyBjOCAwMCAwMCAwMCAJbW92ICAgIDB4YzgoJXJieCksJXJheAogICAgMmZmZjoJNDggODUg YzAgICAgICAgICAgICAgCXRlc3QgICAlcmF4LCVyYXgKICAgIDMwMDI6CTc0IDBhICAgICAgICAg ICAgICAgIAlqZSAgICAgMzAwZSA8dnhsYW5fbmV3bGluaysweDE2ZT4KICAgIDMwMDQ6CTgwIDc4 IDA0IDAwICAgICAgICAgIAljbXBiICAgJDB4MCwweDQoJXJheCkKCQljb25mLmZsYWdzIHw9IFZY TEFOX0ZfTDJNSVNTOwoKCWlmIChkYXRhW0lGTEFfVlhMQU5fTDNNSVNTXSAmJiBubGFfZ2V0X3U4 KGRhdGFbSUZMQV9WWExBTl9MM01JU1NdKSkKICAgIDMwMDg6CTBmIDg1IDYyIDAxIDAwIDAwICAg IAlqbmUgICAgMzE3MCA8dnhsYW5fbmV3bGluaysweDJkMD4KICAgIDMwMGU6CTQ4IDhiIDQzIDUw ICAgICAgICAgIAltb3YgICAgMHg1MCglcmJ4KSwlcmF4CiAgICAzMDEyOgk0OCA4NSBjMCAgICAg ICAgICAgICAJdGVzdCAgICVyYXgsJXJheAogICAgMzAxNToJNzQgMWEgICAgICAgICAgICAgICAg CWplICAgICAzMDMxIDx2eGxhbl9uZXdsaW5rKzB4MTkxPgogICAgMzAxNzoJMGYgYjcgNTAgMDQg ICAgICAgICAgCW1vdnp3bCAweDQoJXJheCksJWVkeAoJCWNvbmYuZmxhZ3MgfD0gVlhMQU5fRl9M M01JU1M7CgoJaWYgKGRhdGFbSUZMQV9WWExBTl9MSU1JVF0pCiAgICAzMDFiOgk2NiBjMSBjMiAw OCAgICAgICAgICAJcm9sICAgICQweDgsJWR4CiAgICAzMDFmOgk2NiA4OSA1NCAyNCA1NiAgICAg ICAJbW92ICAgICVkeCwweDU2KCVyc3ApCgkJY29uZi5hZGRybWF4ID0gbmxhX2dldF91MzIoZGF0 YVtJRkxBX1ZYTEFOX0xJTUlUXSk7CiAgICAzMDI0OgkwZiBiNyA0MCAwNiAgICAgICAgICAJbW92 endsIDB4NiglcmF4KSwlZWF4CgoJaWYgKGRhdGFbSUZMQV9WWExBTl9DT0xMRUNUX01FVEFEQVRB XSAmJgogICAgMzAyODoJNjYgYzEgYzAgMDggICAgICAgICAgCXJvbCAgICAkMHg4LCVheAogICAg MzAyYzoJNjYgODkgNDQgMjQgNTggICAgICAgCW1vdiAgICAlYXgsMHg1OCglcnNwKQogICAgMzAz MToJNDggOGIgNDMgNzggICAgICAgICAgCW1vdiAgICAweDc4KCVyYngpLCVyYXgKICAgIDMwMzU6 CTQ4IDg1IGMwICAgICAgICAgICAgIAl0ZXN0ICAgJXJheCwlcmF4CiAgICAzMDM4Ogk3NCAwOSAg ICAgICAgICAgICAgICAJamUgICAgIDMwNDMgPHZ4bGFuX25ld2xpbmsrMHgxYTM+CiAgICAzMDNh OgkwZiBiNyA0MCAwNCAgICAgICAgICAJbW92endsIDB4NCglcmF4KSwlZWF4CgkgICAgbmxhX2dl dF91OChkYXRhW0lGTEFfVlhMQU5fQ09MTEVDVF9NRVRBREFUQV0pKQoJCWNvbmYuZmxhZ3MgfD0g VlhMQU5fRl9DT0xMRUNUX01FVEFEQVRBOwoKCWlmIChkYXRhW0lGTEFfVlhMQU5fUE9SVF9SQU5H RV0pIHsKICAgIDMwM2U6CTY2IDg5IDQ0IDI0IDU0ICAgICAgIAltb3YgICAgJWF4LDB4NTQoJXJz cCkKICAgIDMwNDM6CTQ4IDhiIDgzIDkwIDAwIDAwIDAwIAltb3YgICAgMHg5MCglcmJ4KSwlcmF4 CgkJY29uc3Qgc3RydWN0IGlmbGFfdnhsYW5fcG9ydF9yYW5nZSAqcAoJCQk9IG5sYV9kYXRhKGRh dGFbSUZMQV9WWExBTl9QT1JUX1JBTkdFXSk7CgkJY29uZi5wb3J0X21pbiA9IG50b2hzKHAtPmxv dyk7CiAgICAzMDRhOgk0OCA4NSBjMCAgICAgICAgICAgICAJdGVzdCAgICVyYXgsJXJheAogICAg MzA0ZDoJNzQgMGEgICAgICAgICAgICAgICAgCWplICAgICAzMDU5IDx2eGxhbl9uZXdsaW5rKzB4 MWI5PgogICAgMzA0ZjoJODAgNzggMDQgMDAgICAgICAgICAgCWNtcGIgICAkMHgwLDB4NCglcmF4 KQogICAgMzA1MzoJMGYgODQgMGQgMDEgMDAgMDAgICAgCWplICAgICAzMTY2IDx2eGxhbl9uZXds aW5rKzB4MmM2PgoJCWNvbmYucG9ydF9tYXggPSBudG9ocyhwLT5oaWdoKTsKICAgIDMwNTk6CTQ4 IDhiIDgzIDk4IDAwIDAwIDAwIAltb3YgICAgMHg5OCglcmJ4KSwlcmF4CiAgICAzMDYwOgk0OCA4 NSBjMCAgICAgICAgICAgICAJdGVzdCAgICVyYXgsJXJheAoJfQoKCWlmIChkYXRhW0lGTEFfVlhM QU5fUE9SVF0pCiAgICAzMDYzOgk3NCAwYSAgICAgICAgICAgICAgICAJamUgICAgIDMwNmYgPHZ4 bGFuX25ld2xpbmsrMHgxY2Y+CiAgICAzMDY1Ogk4MCA3OCAwNCAwMCAgICAgICAgICAJY21wYiAg ICQweDAsMHg0KCVyYXgpCiAgICAzMDY5OgkwZiA4NSBlYSAwMCAwMCAwMCAgICAJam5lICAgIDMx NTkgPHZ4bGFuX25ld2xpbmsrMHgyYjk+CgkJY29uZi5kc3RfcG9ydCA9IG5sYV9nZXRfYmUxNihk YXRhW0lGTEFfVlhMQU5fUE9SVF0pOwogICAgMzA2ZjoJNDggOGIgODMgYTAgMDAgMDAgMDAgCW1v diAgICAweGEwKCVyYngpLCVyYXgKCglpZiAoZGF0YVtJRkxBX1ZYTEFOX1VEUF9DU1VNXSAmJgog ICAgMzA3NjoJNDggODUgYzAgICAgICAgICAgICAgCXRlc3QgICAlcmF4LCVyYXgKICAgIDMwNzk6 CTc0IDBhICAgICAgICAgICAgICAgIAlqZSAgICAgMzA4NSA8dnhsYW5fbmV3bGluaysweDFlNT4K ICAgIDMwN2I6CTgwIDc4IDA0IDAwICAgICAgICAgIAljbXBiICAgJDB4MCwweDQoJXJheCkKICAg IDMwN2Y6CTBmIDg1IGM3IDAwIDAwIDAwICAgIAlqbmUgICAgMzE0YyA8dnhsYW5fbmV3bGluaysw eDJhYz4KICAgIDMwODU6CTQ4IDhiIDgzIGE4IDAwIDAwIDAwIAltb3YgICAgMHhhOCglcmJ4KSwl cmF4CgkgICAgIW5sYV9nZXRfdTgoZGF0YVtJRkxBX1ZYTEFOX1VEUF9DU1VNXSkpCgkJY29uZi5m bGFncyB8PSBWWExBTl9GX1VEUF9aRVJPX0NTVU1fVFg7CgoJaWYgKGRhdGFbSUZMQV9WWExBTl9V RFBfWkVST19DU1VNNl9UWF0gJiYKICAgIDMwOGM6CTQ4IDg1IGMwICAgICAgICAgICAgIAl0ZXN0 ICAgJXJheCwlcmF4CiAgICAzMDhmOgk3NCAwYSAgICAgICAgICAgICAgICAJamUgICAgIDMwOWIg PHZ4bGFuX25ld2xpbmsrMHgxZmI+CiAgICAzMDkxOgk4MCA3OCAwNCAwMCAgICAgICAgICAJY21w YiAgICQweDAsMHg0KCVyYXgpCiAgICAzMDk1OgkwZiA4NSBhNCAwMCAwMCAwMCAgICAJam5lICAg IDMxM2YgPHZ4bGFuX25ld2xpbmsrMHgyOWY+CiAgICAzMDliOgk0OCA4YiA4MyBiMCAwMCAwMCAw MCAJbW92ICAgIDB4YjAoJXJieCksJXJheAoJICAgIG5sYV9nZXRfdTgoZGF0YVtJRkxBX1ZYTEFO X1VEUF9aRVJPX0NTVU02X1RYXSkpCgkJY29uZi5mbGFncyB8PSBWWExBTl9GX1VEUF9aRVJPX0NT VU02X1RYOwoKCWlmIChkYXRhW0lGTEFfVlhMQU5fVURQX1pFUk9fQ1NVTTZfUlhdICYmCiAgICAz MGEyOgk0OCA4NSBjMCAgICAgICAgICAgICAJdGVzdCAgICVyYXgsJXJheAogICAgMzBhNToJNzQg MGEgICAgICAgICAgICAgICAgCWplICAgICAzMGIxIDx2eGxhbl9uZXdsaW5rKzB4MjExPgogICAg MzBhNzoJODAgNzggMDQgMDAgICAgICAgICAgCWNtcGIgICAkMHgwLDB4NCglcmF4KQogICAgMzBh YjoJMGYgODUgODEgMDAgMDAgMDAgICAgCWpuZSAgICAzMTMyIDx2eGxhbl9uZXdsaW5rKzB4Mjky PgogICAgMzBiMToJNDggODMgYmIgYjggMDAgMDAgMDAgCWNtcHEgICAkMHgwLDB4YjgoJXJieCkK ICAgIDMwYjg6CTAwIAoJICAgIG5sYV9nZXRfdTgoZGF0YVtJRkxBX1ZYTEFOX1VEUF9aRVJPX0NT VU02X1JYXSkpCgkJY29uZi5mbGFncyB8PSBWWExBTl9GX1VEUF9aRVJPX0NTVU02X1JYOwoKCWlm IChkYXRhW0lGTEFfVlhMQU5fUkVNQ1NVTV9UWF0gJiYKICAgIDMwYjk6CTc0IDA4ICAgICAgICAg ICAgICAgIAlqZSAgICAgMzBjMyA8dnhsYW5fbmV3bGluaysweDIyMz4KICAgIDMwYmI6CTgxIDRj IDI0IDYwIDAwIDA4IDAwIAlvcmwgICAgJDB4ODAwLDB4NjAoJXJzcCkKICAgIDMwYzI6CTAwIAog ICAgMzBjMzoJNDggODMgYmIgZDggMDAgMDAgMDAgCWNtcHEgICAkMHgwLDB4ZDgoJXJieCkKICAg IDMwY2E6CTAwIAoJICAgIG5sYV9nZXRfdTgoZGF0YVtJRkxBX1ZYTEFOX1JFTUNTVU1fVFhdKSkK CQljb25mLmZsYWdzIHw9IFZYTEFOX0ZfUkVNQ1NVTV9UWDsKCglpZiAoZGF0YVtJRkxBX1ZYTEFO X1JFTUNTVU1fUlhdICYmCiAgICAzMGNiOgk3NCAwOCAgICAgICAgICAgICAgICAJamUgICAgIDMw ZDUgPHZ4bGFuX25ld2xpbmsrMHgyMzU+CiAgICAzMGNkOgk4MSA0YyAyNCA2MCAwMCA0MCAwMCAJ b3JsICAgICQweDQwMDAsMHg2MCglcnNwKQogICAgMzBkNDoJMDAgCiAgICAzMGQ1Ogk0OCA4MyBi YiBjMCAwMCAwMCAwMCAJY21wcSAgICQweDAsMHhjMCglcmJ4KQogICAgMzBkYzoJMDAgCiAgICAz MGRkOgk3NCAwOCAgICAgICAgICAgICAgICAJamUgICAgIDMwZTcgPHZ4bGFuX25ld2xpbmsrMHgy NDc+CiAgICAzMGRmOgk4MSA0YyAyNCA2MCAwMCAxMCAwMCAJb3JsICAgICQweDEwMDAsMHg2MCgl cnNwKQogICAgMzBlNjoJMDAgCgkgICAgbmxhX2dldF91OChkYXRhW0lGTEFfVlhMQU5fUkVNQ1NV TV9SWF0pKQoJCWNvbmYuZmxhZ3MgfD0gVlhMQU5fRl9SRU1DU1VNX1JYOwoKCWlmIChkYXRhW0lG TEFfVlhMQU5fR0JQXSkKICAgIDMwZTc6CTQ5IDhiIDQ3IDIwICAgICAgICAgIAltb3YgICAgMHgy MCglcjE1KSwlcmF4CgkJY29uZi5mbGFncyB8PSBWWExBTl9GX0dCUDsKICAgIDMwZWI6CTQ4IDg1 IGMwICAgICAgICAgICAgIAl0ZXN0ICAgJXJheCwlcmF4CiAgICAzMGVlOgk3NCAwNyAgICAgICAg ICAgICAgICAJamUgICAgIDMwZjcgPHZ4bGFuX25ld2xpbmsrMHgyNTc+CiAgICAzMGYwOgk4YiA0 MCAwNCAgICAgICAgICAgICAJbW92ICAgIDB4NCglcmF4KSwlZWF4CgoJaWYgKGRhdGFbSUZMQV9W WExBTl9HUEVdKQogICAgMzBmMzoJODkgNDQgMjQgNTAgICAgICAgICAgCW1vdiAgICAlZWF4LDB4 NTAoJXJzcCkKICAgIDMwZjc6CTRjIDg5IGUyICAgICAgICAgICAgIAltb3YgICAgJXIxMiwlcmR4 CiAgICAzMGZhOgk0YyA4OSBmNiAgICAgICAgICAgICAJbW92ICAgICVyMTQsJXJzaQoJCWNvbmYu ZmxhZ3MgfD0gVlhMQU5fRl9HUEU7CiAgICAzMGZkOgk0YyA4OSBlZiAgICAgICAgICAgICAJbW92 ICAgICVyMTMsJXJkaQogICAgMzEwMDoJZTggZmIgZjcgZmYgZmYgICAgICAgCWNhbGxxICAyOTAw IDx2eGxhbl9kZXZfY29uZmlndXJlPgoKCWlmIChkYXRhW0lGTEFfVlhMQU5fUkVNQ1NVTV9OT1BB UlRJQUxdKQogICAgMzEwNToJNDggOGIgNGMgMjQgNzggICAgICAgCW1vdiAgICAweDc4KCVyc3Ap LCVyY3gKICAgIDMxMGE6CTY1IDQ4IDMzIDBjIDI1IDI4IDAwIAl4b3IgICAgJWdzOjB4MjgsJXJj eAogICAgMzExMToJMDAgMDAgCgkJY29uZi5mbGFncyB8PSBWWExBTl9GX1JFTUNTVU1fTk9QQVJU SUFMOwogICAgMzExMzoJMGYgODUgMGEgMDEgMDAgMDAgICAgCWpuZSAgICAzMjIzIDx2eGxhbl9u ZXdsaW5rKzB4MzgzPgoKCWlmICh0YltJRkxBX01UVV0pCiAgICAzMTE5Ogk0OCA4ZCA2NSBkOCAg ICAgICAgICAJbGVhICAgIC0weDI4KCVyYnApLCVyc3AKICAgIDMxMWQ6CTViICAgICAgICAgICAg ICAgICAgIAlwb3AgICAgJXJieAogICAgMzExZToJNDEgNWMgICAgICAgICAgICAgICAgCXBvcCAg ICAlcjEyCgkJY29uZi5tdHUgPSBubGFfZ2V0X3UzMih0YltJRkxBX01UVV0pOwogICAgMzEyMDoJ NDEgNWQgICAgICAgICAgICAgICAgCXBvcCAgICAlcjEzCiAgICAzMTIyOgk0MSA1ZSAgICAgICAg ICAgICAgICAJcG9wICAgICVyMTQKICAgIDMxMjQ6CTQxIDVmICAgICAgICAgICAgICAgIAlwb3Ag ICAgJXIxNQogICAgMzEyNjoJNWQgICAgICAgICAgICAgICAgICAgCXBvcCAgICAlcmJwCgoJcmV0 dXJuIHZ4bGFuX2Rldl9jb25maWd1cmUoc3JjX25ldCwgZGV2LCAmY29uZik7CiAgICAzMTI3Oglj MyAgICAgICAgICAgICAgICAgICAJcmV0cSAgIAogICAgMzEyODoJODMgNGMgMjQgNjAgMDEgICAg ICAgCW9ybCAgICAkMHgxLDB4NjAoJXJzcCkKICAgIDMxMmQ6CWU5IDU5IGZlIGZmIGZmICAgICAg IAlqbXBxICAgMmY4YiA8dnhsYW5fbmV3bGluaysweGViPgogICAgMzEzMjoJODEgNGMgMjQgNjAg MDAgMDQgMDAgCW9ybCAgICAkMHg0MDAsMHg2MCglcnNwKQogICAgMzEzOToJMDAgCn0KICAgIDMx M2E6CWU5IDcyIGZmIGZmIGZmICAgICAgIAlqbXBxICAgMzBiMSA8dnhsYW5fbmV3bGluaysweDIx MT4KICAgIDMxM2Y6CTgxIDRjIDI0IDYwIDAwIDAyIDAwIAlvcmwgICAgJDB4MjAwLDB4NjAoJXJz cCkKICAgIDMxNDY6CTAwIAogICAgMzE0NzoJZTkgNGYgZmYgZmYgZmYgICAgICAgCWptcHEgICAz MDliIDx2eGxhbl9uZXdsaW5rKzB4MWZiPgogICAgMzE0YzoJODEgNGMgMjQgNjAgMDAgMDEgMDAg CW9ybCAgICAkMHgxMDAsMHg2MCglcnNwKQogICAgMzE1MzoJMDAgCiAgICAzMTU0OgllOSAyYyBm ZiBmZiBmZiAgICAgICAJam1wcSAgIDMwODUgPHZ4bGFuX25ld2xpbmsrMHgxZTU+CglpZiAoZGF0 YVtJRkxBX1ZYTEFOX0xBQkVMXSkKCQljb25mLmxhYmVsID0gbmxhX2dldF9iZTMyKGRhdGFbSUZM QV9WWExBTl9MQUJFTF0pICYKCQkJICAgICBJUFY2X0ZMT1dMQUJFTF9NQVNLOwoKCWlmICghZGF0 YVtJRkxBX1ZYTEFOX0xFQVJOSU5HXSB8fCBubGFfZ2V0X3U4KGRhdGFbSUZMQV9WWExBTl9MRUFS TklOR10pKQoJCWNvbmYuZmxhZ3MgfD0gVlhMQU5fRl9MRUFSTjsKICAgIDMxNTk6CTgxIDRjIDI0 IDYwIDgwIDAwIDAwIAlvcmwgICAgJDB4ODAsMHg2MCglcnNwKQogICAgMzE2MDoJMDAgCiAgICAz MTYxOgllOSAwOSBmZiBmZiBmZiAgICAgICAJam1wcSAgIDMwNmYgPHZ4bGFuX25ld2xpbmsrMHgx Y2Y+CgkgICAgbmxhX2dldF91OChkYXRhW0lGTEFfVlhMQU5fUkVNQ1NVTV9UWF0pKQoJCWNvbmYu ZmxhZ3MgfD0gVlhMQU5fRl9SRU1DU1VNX1RYOwoKCWlmIChkYXRhW0lGTEFfVlhMQU5fUkVNQ1NV TV9SWF0gJiYKCSAgICBubGFfZ2V0X3U4KGRhdGFbSUZMQV9WWExBTl9SRU1DU1VNX1JYXSkpCgkJ Y29uZi5mbGFncyB8PSBWWExBTl9GX1JFTUNTVU1fUlg7CiAgICAzMTY2Ogk4MyA0YyAyNCA2MCA0 MCAgICAgICAJb3JsICAgICQweDQwLDB4NjAoJXJzcCkKICAgIDMxNmI6CWU5IGU5IGZlIGZmIGZm ICAgICAgIAlqbXBxICAgMzA1OSA8dnhsYW5fbmV3bGluaysweDFiOT4KCSAgICBubGFfZ2V0X3U4 KGRhdGFbSUZMQV9WWExBTl9VRFBfWkVST19DU1VNNl9SWF0pKQoJCWNvbmYuZmxhZ3MgfD0gVlhM QU5fRl9VRFBfWkVST19DU1VNNl9SWDsKCglpZiAoZGF0YVtJRkxBX1ZYTEFOX1JFTUNTVU1fVFhd ICYmCgkgICAgbmxhX2dldF91OChkYXRhW0lGTEFfVlhMQU5fUkVNQ1NVTV9UWF0pKQoJCWNvbmYu ZmxhZ3MgfD0gVlhMQU5fRl9SRU1DU1VNX1RYOwogICAgMzE3MDoJODEgNGMgMjQgNjAgMDAgMjAg MDAgCW9ybCAgICAkMHgyMDAwLDB4NjAoJXJzcCkKICAgIDMxNzc6CTAwIAogICAgMzE3ODoJZTkg OTEgZmUgZmYgZmYgICAgICAgCWptcHEgICAzMDBlIDx2eGxhbl9uZXdsaW5rKzB4MTZlPgoJICAg IG5sYV9nZXRfdTgoZGF0YVtJRkxBX1ZYTEFOX1VEUF9aRVJPX0NTVU02X1RYXSkpCgkJY29uZi5m bGFncyB8PSBWWExBTl9GX1VEUF9aRVJPX0NTVU02X1RYOwoKCWlmIChkYXRhW0lGTEFfVlhMQU5f VURQX1pFUk9fQ1NVTTZfUlhdICYmCgkgICAgbmxhX2dldF91OChkYXRhW0lGTEFfVlhMQU5fVURQ X1pFUk9fQ1NVTTZfUlhdKSkKCQljb25mLmZsYWdzIHw9IFZYTEFOX0ZfVURQX1pFUk9fQ1NVTTZf Ulg7CiAgICAzMTdkOgk4MyA0YyAyNCA2MCAxMCAgICAgICAJb3JsICAgICQweDEwLDB4NjAoJXJz cCkKICAgIDMxODI6CWU5IDYxIGZlIGZmIGZmICAgICAgIAlqbXBxICAgMmZlOCA8dnhsYW5fbmV3 bGluaysweDE0OD4KICAgIDMxODc6CTgzIDRjIDI0IDYwIDA4ICAgICAgIAlvcmwgICAgJDB4OCww eDYwKCVyc3ApCgkgICAgIW5sYV9nZXRfdTgoZGF0YVtJRkxBX1ZYTEFOX1VEUF9DU1VNXSkpCgkJ Y29uZi5mbGFncyB8PSBWWExBTl9GX1VEUF9aRVJPX0NTVU1fVFg7CgoJaWYgKGRhdGFbSUZMQV9W WExBTl9VRFBfWkVST19DU1VNNl9UWF0gJiYKCSAgICBubGFfZ2V0X3U4KGRhdGFbSUZMQV9WWExB Tl9VRFBfWkVST19DU1VNNl9UWF0pKQoJCWNvbmYuZmxhZ3MgfD0gVlhMQU5fRl9VRFBfWkVST19D U1VNNl9UWDsKICAgIDMxOGM6CWU5IDQ0IGZlIGZmIGZmICAgICAgIAlqbXBxICAgMmZkNSA8dnhs YW5fbmV3bGluaysweDEzNT4KICAgIDMxOTE6CTgzIDRjIDI0IDYwIDA0ICAgICAgIAlvcmwgICAg JDB4NCwweDYwKCVyc3ApCglpZiAoZGF0YVtJRkxBX1ZYTEFOX1BPUlRdKQoJCWNvbmYuZHN0X3Bv cnQgPSBubGFfZ2V0X2JlMTYoZGF0YVtJRkxBX1ZYTEFOX1BPUlRdKTsKCglpZiAoZGF0YVtJRkxB X1ZYTEFOX1VEUF9DU1VNXSAmJgoJICAgICFubGFfZ2V0X3U4KGRhdGFbSUZMQV9WWExBTl9VRFBf Q1NVTV0pKQoJCWNvbmYuZmxhZ3MgfD0gVlhMQU5fRl9VRFBfWkVST19DU1VNX1RYOwogICAgMzE5 NjoJZTkgMjcgZmUgZmYgZmYgICAgICAgCWptcHEgICAyZmMyIDx2eGxhbl9uZXdsaW5rKzB4MTIy PgogICAgMzE5YjoJODMgNGMgMjQgNjAgMDIgICAgICAgCW9ybCAgICAkMHgyLDB4NjAoJXJzcCkK CWlmIChkYXRhW0lGTEFfVlhMQU5fTElNSVRdKQoJCWNvbmYuYWRkcm1heCA9IG5sYV9nZXRfdTMy KGRhdGFbSUZMQV9WWExBTl9MSU1JVF0pOwoKCWlmIChkYXRhW0lGTEFfVlhMQU5fQ09MTEVDVF9N RVRBREFUQV0gJiYKCSAgICBubGFfZ2V0X3U4KGRhdGFbSUZMQV9WWExBTl9DT0xMRUNUX01FVEFE QVRBXSkpCgkJY29uZi5mbGFncyB8PSBWWExBTl9GX0NPTExFQ1RfTUVUQURBVEE7CiAgICAzMWEw OgllOSAwYSBmZSBmZiBmZiAgICAgICAJam1wcSAgIDJmYWYgPHZ4bGFuX25ld2xpbmsrMHgxMGY+ CiAgICAzMWE1Ogk0OCA4YiBiMyA4OCAwMCAwMCAwMCAJbW92ICAgIDB4ODgoJXJieCksJXJzaQog ICAgMzFhYzoJNDggODUgZjYgICAgICAgICAgICAgCXRlc3QgICAlcnNpLCVyc2kKCglpZiAoZGF0 YVtJRkxBX1ZYTEFOX0wyTUlTU10gJiYgbmxhX2dldF91OChkYXRhW0lGTEFfVlhMQU5fTDJNSVNT XSkpCgkJY29uZi5mbGFncyB8PSBWWExBTl9GX0wyTUlTUzsKCglpZiAoZGF0YVtJRkxBX1ZYTEFO X0wzTUlTU10gJiYgbmxhX2dldF91OChkYXRhW0lGTEFfVlhMQU5fTDNNSVNTXSkpCgkJY29uZi5m bGFncyB8PSBWWExBTl9GX0wzTUlTUzsKICAgIDMxYWY6CTBmIDg0IDc1IGZkIGZmIGZmICAgIAlq ZSAgICAgMmYyYSA8dnhsYW5fbmV3bGluaysweDhhPgogICAgMzFiNToJYmEgMTAgMDAgMDAgMDAg ICAgICAgCW1vdiAgICAkMHgxMCwlZWR4CgoJaWYgKGRhdGFbSUZMQV9WWExBTl9SU0NdICYmIG5s YV9nZXRfdTgoZGF0YVtJRkxBX1ZYTEFOX1JTQ10pKQoJCWNvbmYuZmxhZ3MgfD0gVlhMQU5fRl9S U0M7CgoJaWYgKGRhdGFbSUZMQV9WWExBTl9MMk1JU1NdICYmIG5sYV9nZXRfdTgoZGF0YVtJRkxB X1ZYTEFOX0wyTUlTU10pKQoJCWNvbmYuZmxhZ3MgfD0gVlhMQU5fRl9MMk1JU1M7CiAgICAzMWJh Ogk0OCA4OSBlNyAgICAgICAgICAgICAJbW92ICAgICVyc3AsJXJkaQogICAgMzFiZDoJZTggMDAg MDAgMDAgMDAgICAgICAgCWNhbGxxICAzMWMyIDx2eGxhbl9uZXdsaW5rKzB4MzIyPgoKCWlmIChk YXRhW0lGTEFfVlhMQU5fUFJPWFldICYmIG5sYV9nZXRfdTgoZGF0YVtJRkxBX1ZYTEFOX1BST1hZ XSkpCgkJY29uZi5mbGFncyB8PSBWWExBTl9GX1BST1hZOwoKCWlmIChkYXRhW0lGTEFfVlhMQU5f UlNDXSAmJiBubGFfZ2V0X3U4KGRhdGFbSUZMQV9WWExBTl9SU0NdKSkKCQljb25mLmZsYWdzIHw9 IFZYTEFOX0ZfUlNDOwogICAgMzFjMjoJNDggOGIgMDQgMjQgICAgICAgICAgCW1vdiAgICAoJXJz cCksJXJheAogICAgMzFjNjoJNDggOGIgNTQgMjQgMDggICAgICAgCW1vdiAgICAweDgoJXJzcCks JXJkeAoKCWlmIChkYXRhW0lGTEFfVlhMQU5fQUdFSU5HXSkKCQljb25mLmFnZV9pbnRlcnZhbCA9 IG5sYV9nZXRfdTMyKGRhdGFbSUZMQV9WWExBTl9BR0VJTkddKTsKCglpZiAoZGF0YVtJRkxBX1ZY TEFOX1BST1hZXSAmJiBubGFfZ2V0X3U4KGRhdGFbSUZMQV9WWExBTl9QUk9YWV0pKQoJCWNvbmYu ZmxhZ3MgfD0gVlhMQU5fRl9QUk9YWTsKICAgIDMxY2I6CTQ4IDg5IDQ0IDI0IDM0ICAgICAgIAlt b3YgICAgJXJheCwweDM0KCVyc3ApCiAgICAzMWQwOgliOCAwYSAwMCAwMCAwMCAgICAgICAJbW92 ICAgICQweGEsJWVheAoJfQoKCWlmIChkYXRhW0lGTEFfVlhMQU5fTE9DQUxdKSB7CgkJY29uZi5z YWRkci5zaW4uc2luX2FkZHIuc19hZGRyID0gbmxhX2dldF9pbl9hZGRyKGRhdGFbSUZMQV9WWExB Tl9MT0NBTF0pOwoJCWNvbmYuc2FkZHIuc2Euc2FfZmFtaWx5ID0gQUZfSU5FVDsKCX0gZWxzZSBp ZiAoZGF0YVtJRkxBX1ZYTEFOX0xPQ0FMNl0pIHsKICAgIDMxZDU6CTQ4IDg5IDU0IDI0IDNjICAg ICAgIAltb3YgICAgJXJkeCwweDNjKCVyc3ApCiAgICAzMWRhOgk2NiA4OSA0NCAyNCAyYyAgICAg ICAJbW92ICAgICVheCwweDJjKCVyc3ApCiAgICAzMWRmOgllOSA0NiBmZCBmZiBmZiAgICAgICAJ am1wcSAgIDJmMmEgPHZ4bGFuX25ld2xpbmsrMHg4YT4KICAgIDMxZTQ6CTQ4IDhiIGIzIDgwIDAw IDAwIDAwIAltb3YgICAgMHg4MCglcmJ4KSwlcnNpCiAqLwpzdGF0aWMgaW5saW5lIHN0cnVjdCBp bjZfYWRkciBubGFfZ2V0X2luNl9hZGRyKGNvbnN0IHN0cnVjdCBubGF0dHIgKm5sYSkKewoJc3Ry dWN0IGluNl9hZGRyIHRtcDsKCglubGFfbWVtY3B5KCZ0bXAsIG5sYSwgc2l6ZW9mKHRtcCkpOwog ICAgMzFlYjoJNDggODUgZjYgICAgICAgICAgICAgCXRlc3QgICAlcnNpLCVyc2kKICAgIDMxZWU6 CTBmIDg0IDE4IGZkIGZmIGZmICAgIAlqZSAgICAgMmYwYyA8dnhsYW5fbmV3bGluaysweDZjPgoJ cmV0dXJuIHRtcDsKICAgIDMxZjQ6CWJhIDEwIDAwIDAwIDAwICAgICAgIAltb3YgICAgJDB4MTAs JWVkeAogICAgMzFmOToJNDggODkgZTcgICAgICAgICAgICAgCW1vdiAgICAlcnNwLCVyZGkKCQlp ZiAoIUlTX0VOQUJMRUQoQ09ORklHX0lQVjYpKQoJCQlyZXR1cm4gLUVQRk5PU1VQUE9SVDsKCgkJ LyogVE9ETzogcmVzcGVjdCBzY29wZSBpZCAqLwoJCWNvbmYuc2FkZHIuc2luNi5zaW42X2FkZHIg PSBubGFfZ2V0X2luNl9hZGRyKGRhdGFbSUZMQV9WWExBTl9MT0NBTDZdKTsKICAgIDMxZmM6CWU4 IDAwIDAwIDAwIDAwICAgICAgIAljYWxscSAgMzIwMSA8dnhsYW5fbmV3bGluaysweDM2MT4KCQlj b25mLnNhZGRyLnNhLnNhX2ZhbWlseSA9IEFGX0lORVQ2OwogICAgMzIwMToJNDggOGIgMDQgMjQg ICAgICAgICAgCW1vdiAgICAoJXJzcCksJXJheAoJfSBlbHNlIGlmIChkYXRhW0lGTEFfVlhMQU5f TE9DQUw2XSkgewoJCWlmICghSVNfRU5BQkxFRChDT05GSUdfSVBWNikpCgkJCXJldHVybiAtRVBG Tk9TVVBQT1JUOwoKCQkvKiBUT0RPOiByZXNwZWN0IHNjb3BlIGlkICovCgkJY29uZi5zYWRkci5z aW42LnNpbjZfYWRkciA9IG5sYV9nZXRfaW42X2FkZHIoZGF0YVtJRkxBX1ZYTEFOX0xPQ0FMNl0p OwogICAgMzIwNToJNDggOGIgNTQgMjQgMDggICAgICAgCW1vdiAgICAweDgoJXJzcCksJXJkeAoJ CWNvbmYuc2FkZHIuc2Euc2FfZmFtaWx5ID0gQUZfSU5FVDY7CiAgICAzMjBhOgliOSAwYSAwMCAw MCAwMCAgICAgICAJbW92ICAgICQweGEsJWVjeAogICAgMzIwZjoJNjYgODkgNGMgMjQgMTAgICAg ICAgCW1vdiAgICAlY3gsMHgxMCglcnNwKQoJaWYgKGRhdGFbSUZMQV9WWExBTl9JRF0pCgkJY29u Zi52bmkgPSBjcHVfdG9fYmUzMihubGFfZ2V0X3UzMihkYXRhW0lGTEFfVlhMQU5fSURdKSk7CgoJ aWYgKGRhdGFbSUZMQV9WWExBTl9HUk9VUF0pIHsKCQljb25mLnJlbW90ZV9pcC5zaW4uc2luX2Fk ZHIuc19hZGRyID0gbmxhX2dldF9pbl9hZGRyKGRhdGFbSUZMQV9WWExBTl9HUk9VUF0pOwoJfSBl bHNlIGlmIChkYXRhW0lGTEFfVlhMQU5fR1JPVVA2XSkgewogICAgMzIxNDoJNDggODkgNDQgMjQg MTggICAgICAgCW1vdiAgICAlcmF4LDB4MTgoJXJzcCkKICAgIDMyMTk6CTQ4IDg5IDU0IDI0IDIw ICAgICAgIAltb3YgICAgJXJkeCwweDIwKCVyc3ApCiAgICAzMjFlOgllOSBlOSBmYyBmZiBmZiAg ICAgICAJam1wcSAgIDJmMGMgPHZ4bGFuX25ld2xpbmsrMHg2Yz4KICAgIDMyMjM6CWU4IDAwIDAw IDAwIDAwICAgICAgIAljYWxscSAgMzIyOCA8dnhsYW5fbmV3bGluaysweDM4OD4KICovCnN0YXRp YyBpbmxpbmUgc3RydWN0IGluNl9hZGRyIG5sYV9nZXRfaW42X2FkZHIoY29uc3Qgc3RydWN0IG5s YXR0ciAqbmxhKQp7CglzdHJ1Y3QgaW42X2FkZHIgdG1wOwoKCW5sYV9tZW1jcHkoJnRtcCwgbmxh LCBzaXplb2YodG1wKSk7CiAgICAzMjI4OgkwZiAxZiA4NCAwMCAwMCAwMCAwMCAJbm9wbCAgIDB4 MCglcmF4LCVyYXgsMSkKICAgIDMyMmY6CTAwIAoKMDAwMDAwMDAwMDAwMzIzMCA8dnhsYW5fZGV2 X2NyZWF0ZT46CiAgICAzMjMwOgllOCAwMCAwMCAwMCAwMCAgICAgICAJY2FsbHEgIDMyMzUgPHZ4 bGFuX2Rldl9jcmVhdGUrMHg1PgoJcmV0dXJuIHRtcDsKICAgIDMyMzU6CTU1ICAgICAgICAgICAg ICAgICAgIAlwdXNoICAgJXJicAogICAgMzIzNjoJMGYgYjYgZDIgICAgICAgICAgICAgCW1vdnpi bCAlZGwsJWVkeAogICAgMzIzOToJNDggODkgZTUgICAgICAgICAgICAgCW1vdiAgICAlcnNwLCVy YnAKCQlpZiAoIUlTX0VOQUJMRUQoQ09ORklHX0lQVjYpKQoJCQlyZXR1cm4gLUVQRk5PU1VQUE9S VDsKCgkJY29uZi5yZW1vdGVfaXAuc2luNi5zaW42X2FkZHIgPSBubGFfZ2V0X2luNl9hZGRyKGRh dGFbSUZMQV9WWExBTl9HUk9VUDZdKTsKCQljb25mLnJlbW90ZV9pcC5zYS5zYV9mYW1pbHkgPSBB Rl9JTkVUNjsKICAgIDMyM2M6CTQxIDU1ICAgICAgICAgICAgICAgIAlwdXNoICAgJXIxMwogICAg MzIzZToJNDEgNTQgICAgICAgICAgICAgICAgCXB1c2ggICAlcjEyCiAgICAzMjQwOgk1MyAgICAg ICAgICAgICAgICAgICAJcHVzaCAgICVyYngKICAgIDMyNDE6CTRjIDhkIDg1IDgwIGZlIGZmIGZm IAlsZWEgICAgLTB4MTgwKCVyYnApLCVyOAoJCWNvbmYucmVtb3RlX2lwLnNpbi5zaW5fYWRkci5z X2FkZHIgPSBubGFfZ2V0X2luX2FkZHIoZGF0YVtJRkxBX1ZYTEFOX0dST1VQXSk7Cgl9IGVsc2Ug aWYgKGRhdGFbSUZMQV9WWExBTl9HUk9VUDZdKSB7CgkJaWYgKCFJU19FTkFCTEVEKENPTkZJR19J UFY2KSkKCQkJcmV0dXJuIC1FUEZOT1NVUFBPUlQ7CgoJCWNvbmYucmVtb3RlX2lwLnNpbjYuc2lu Nl9hZGRyID0gbmxhX2dldF9pbjZfYWRkcihkYXRhW0lGTEFfVlhMQU5fR1JPVVA2XSk7CiAgICAz MjQ4Ogk0OSA4OSBmZCAgICAgICAgICAgICAJbW92ICAgICVyZGksJXIxMwogICAgMzI0YjoJNDkg ODkgY2MgICAgICAgICAgICAgCW1vdiAgICAlcmN4LCVyMTIKICAgIDMyNGU6CWI5IDJjIDAwIDAw IDAwICAgICAgIAltb3YgICAgJDB4MmMsJWVjeAoKCWlmICh0YltJRkxBX01UVV0pCgkJY29uZi5t dHUgPSBubGFfZ2V0X3UzMih0YltJRkxBX01UVV0pOwoKCXJldHVybiB2eGxhbl9kZXZfY29uZmln dXJlKHNyY19uZXQsIGRldiwgJmNvbmYpOwp9CiAgICAzMjUzOgk0OCA4MSBlYyA4MCAwMSAwMCAw MCAJc3ViICAgICQweDE4MCwlcnNwCiAgICAzMjVhOgk0YyA4OSBjNyAgICAgICAgICAgICAJbW92 ICAgICVyOCwlcmRpCiAgICAzMjVkOgk2NSA0OCA4YiAwNCAyNSAyOCAwMCAJbW92ICAgICVnczow eDI4LCVyYXgKICAgIDMyNjQ6CTAwIDAwIAoJc3RydWN0IG5ldF9kZXZpY2UgKmRldjsKCWludCBl cnI7CgoJbWVtc2V0KCZ0YiwgMCwgc2l6ZW9mKHRiKSk7CgoJZGV2ID0gcnRubF9jcmVhdGVfbGlu ayhuZXQsIG5hbWUsIG5hbWVfYXNzaWduX3R5cGUsCiAgICAzMjY2Ogk0OCA4OSA0NSBlMCAgICAg ICAgICAJbW92ICAgICVyYXgsLTB4MjAoJXJicCkKfTsKCnN0cnVjdCBuZXRfZGV2aWNlICp2eGxh bl9kZXZfY3JlYXRlKHN0cnVjdCBuZXQgKm5ldCwgY29uc3QgY2hhciAqbmFtZSwKCQkJCSAgICB1 OCBuYW1lX2Fzc2lnbl90eXBlLAoJCQkJICAgIHN0cnVjdCB2eGxhbl9jb25maWcgKmNvbmYpCnsK ICAgIDMyNmE6CTMxIGMwICAgICAgICAgICAgICAgIAl4b3IgICAgJWVheCwlZWF4CiAgICAzMjZj OglmMyA0OCBhYiAgICAgICAgICAgICAJcmVwIHN0b3MgJXJheCwlZXM6KCVyZGkpCiAgICAzMjZm Ogk0OCBjNyBjMSAwMCAwMCAwMCAwMCAJbW92ICAgICQweDAsJXJjeAoJc3RydWN0IG5sYXR0ciAq dGJbSUZMQV9NQVggKyAxXTsKCXN0cnVjdCBuZXRfZGV2aWNlICpkZXY7CglpbnQgZXJyOwoKCW1l bXNldCgmdGIsIDAsIHNpemVvZih0YikpOwogICAgMzI3NjoJNGMgODkgZWYgICAgICAgICAgICAg CW1vdiAgICAlcjEzLCVyZGkKfTsKCnN0cnVjdCBuZXRfZGV2aWNlICp2eGxhbl9kZXZfY3JlYXRl KHN0cnVjdCBuZXQgKm5ldCwgY29uc3QgY2hhciAqbmFtZSwKCQkJCSAgICB1OCBuYW1lX2Fzc2ln bl90eXBlLAoJCQkJICAgIHN0cnVjdCB2eGxhbl9jb25maWcgKmNvbmYpCnsKICAgIDMyNzk6CWU4 IDAwIDAwIDAwIDAwICAgICAgIAljYWxscSAgMzI3ZSA8dnhsYW5fZGV2X2NyZWF0ZSsweDRlPgoJ c3RydWN0IG5sYXR0ciAqdGJbSUZMQV9NQVggKyAxXTsKCXN0cnVjdCBuZXRfZGV2aWNlICpkZXY7 CglpbnQgZXJyOwoKCW1lbXNldCgmdGIsIDAsIHNpemVvZih0YikpOwogICAgMzI3ZToJNDggM2Qg MDAgZjAgZmYgZmYgICAgCWNtcCAgICAkMHhmZmZmZmZmZmZmZmZmMDAwLCVyYXgKfTsKCnN0cnVj dCBuZXRfZGV2aWNlICp2eGxhbl9kZXZfY3JlYXRlKHN0cnVjdCBuZXQgKm5ldCwgY29uc3QgY2hh ciAqbmFtZSwKCQkJCSAgICB1OCBuYW1lX2Fzc2lnbl90eXBlLAoJCQkJICAgIHN0cnVjdCB2eGxh bl9jb25maWcgKmNvbmYpCnsKICAgIDMyODQ6CTQ4IDg5IGMzICAgICAgICAgICAgIAltb3YgICAg JXJheCwlcmJ4CiAgICAzMjg3OgkwZiA4NyA4ZSAwMCAwMCAwMCAgICAJamEgICAgIDMzMWIgPHZ4 bGFuX2Rldl9jcmVhdGUrMHhlYj4KICAgIDMyOGQ6CTRjIDg5IGUyICAgICAgICAgICAgIAltb3Yg ICAgJXIxMiwlcmR4CiAgICAzMjkwOgk0OCA4OSBjNiAgICAgICAgICAgICAJbW92ICAgICVyYXgs JXJzaQogICAgMzI5MzoJNGMgODkgZWYgICAgICAgICAgICAgCW1vdiAgICAlcjEzLCVyZGkKICAg IDMyOTY6CWU4IDY1IGY2IGZmIGZmICAgICAgIAljYWxscSAgMjkwMCA8dnhsYW5fZGV2X2NvbmZp Z3VyZT4KICAgIDMyOWI6CTg1IGMwICAgICAgICAgICAgICAgIAl0ZXN0ICAgJWVheCwlZWF4Cglz dHJ1Y3QgbmxhdHRyICp0YltJRkxBX01BWCArIDFdOwoJc3RydWN0IG5ldF9kZXZpY2UgKmRldjsK CWludCBlcnI7CgoJbWVtc2V0KCZ0YiwgMCwgc2l6ZW9mKHRiKSk7CiAgICAzMjlkOgk3OCAzMSAg ICAgICAgICAgICAgICAJanMgICAgIDMyZDAgPHZ4bGFuX2Rldl9jcmVhdGUrMHhhMD4KCglkZXYg PSBydG5sX2NyZWF0ZV9saW5rKG5ldCwgbmFtZSwgbmFtZV9hc3NpZ25fdHlwZSwKICAgIDMyOWY6 CTMxIGY2ICAgICAgICAgICAgICAgIAl4b3IgICAgJWVzaSwlZXNpCiAgICAzMmExOgk0OCA4OSBk ZiAgICAgICAgICAgICAJbW92ICAgICVyYngsJXJkaQogICAgMzJhNDoJZTggMDAgMDAgMDAgMDAg ICAgICAgCWNhbGxxICAzMmE5IDx2eGxhbl9kZXZfY3JlYXRlKzB4Nzk+CiAgICAzMmE5Ogk4NSBj MCAgICAgICAgICAgICAgICAJdGVzdCAgICVlYXgsJWVheAogICAgMzJhYjoJNDggODkgZGYgICAg ICAgICAgICAgCW1vdiAgICAlcmJ4LCVyZGkKCQkJICAgICAgICZ2eGxhbl9saW5rX29wcywgdGIp OwoJaWYgKElTX0VSUihkZXYpKQogICAgMzJhZToJNzggMzcgICAgICAgICAgICAgICAgCWpzICAg ICAzMmU3IDx2eGxhbl9kZXZfY3JlYXRlKzB4Yjc+CiAgICAzMmIwOgk0OCA4YiA0ZCBlMCAgICAg ICAgICAJbW92ICAgIC0weDIwKCVyYnApLCVyY3gKCXN0cnVjdCBuZXRfZGV2aWNlICpkZXY7Cglp bnQgZXJyOwoKCW1lbXNldCgmdGIsIDAsIHNpemVvZih0YikpOwoKCWRldiA9IHJ0bmxfY3JlYXRl X2xpbmsobmV0LCBuYW1lLCBuYW1lX2Fzc2lnbl90eXBlLAogICAgMzJiNDoJNjUgNDggMzMgMGMg MjUgMjggMDAgCXhvciAgICAlZ3M6MHgyOCwlcmN4CiAgICAzMmJiOgkwMCAwMCAKCQkJICAgICAg ICZ2eGxhbl9saW5rX29wcywgdGIpOwoJaWYgKElTX0VSUihkZXYpKQoJCXJldHVybiBkZXY7CgoJ ZXJyID0gdnhsYW5fZGV2X2NvbmZpZ3VyZShuZXQsIGRldiwgY29uZik7CiAgICAzMmJkOgk0OCA4 OSBmOCAgICAgICAgICAgICAJbW92ICAgICVyZGksJXJheAogICAgMzJjMDoJNzUgNWUgICAgICAg ICAgICAgICAgCWpuZSAgICAzMzIwIDx2eGxhbl9kZXZfY3JlYXRlKzB4ZjA+CiAgICAzMmMyOgk0 OCA4MSBjNCA4MCAwMSAwMCAwMCAJYWRkICAgICQweDE4MCwlcnNwCiAgICAzMmM5Ogk1YiAgICAg ICAgICAgICAgICAgICAJcG9wICAgICVyYngKICAgIDMyY2E6CTQxIDVjICAgICAgICAgICAgICAg IAlwb3AgICAgJXIxMgoJaWYgKGVyciA8IDApIHsKICAgIDMyY2M6CTQxIDVkICAgICAgICAgICAg ICAgIAlwb3AgICAgJXIxMwogICAgMzJjZToJNWQgICAgICAgICAgICAgICAgICAgCXBvcCAgICAl cmJwCgkJZnJlZV9uZXRkZXYoZGV2KTsKCQlyZXR1cm4gRVJSX1BUUihlcnIpOwoJfQoKCWVyciA9 IHJ0bmxfY29uZmlndXJlX2xpbmsoZGV2LCBOVUxMKTsKICAgIDMyY2Y6CWMzICAgICAgICAgICAg ICAgICAgIAlyZXRxICAgCiAgICAzMmQwOgk0OCA4OSBkZiAgICAgICAgICAgICAJbW92ICAgICVy YngsJXJkaQogICAgMzJkMzoJODkgODUgNmMgZmUgZmYgZmYgICAgCW1vdiAgICAlZWF4LC0weDE5 NCglcmJwKQoJaWYgKGVyciA8IDApIHsKICAgIDMyZDk6CWU4IDAwIDAwIDAwIDAwICAgICAgIAlj YWxscSAgMzJkZSA8dnhsYW5fZGV2X2NyZWF0ZSsweGFlPgogICAgMzJkZToJNDggNjMgYmQgNmMg ZmUgZmYgZmYgCW1vdnNscSAtMHgxOTQoJXJicCksJXJkaQoJCXVucmVnaXN0ZXJfbmV0ZGV2aWNl X21hbnkoJmxpc3Rfa2lsbCk7CgkJcmV0dXJuIEVSUl9QVFIoZXJyKTsKCX0KCglyZXR1cm4gZGV2 Owp9CiAgICAzMmU1OgllYiBjOSAgICAgICAgICAgICAgICAJam1wICAgIDMyYjAgPHZ4bGFuX2Rl dl9jcmVhdGUrMHg4MD4KICAgIDMyZTc6CTRjIDhkIGE1IDcwIGZlIGZmIGZmIAlsZWEgICAgLTB4 MTkwKCVyYnApLCVyMTIKICAgIDMyZWU6CTg5IDg1IDZjIGZlIGZmIGZmICAgIAltb3YgICAgJWVh eCwtMHgxOTQoJXJicCkKICAgIDMyZjQ6CTRjIDg5IGU2ICAgICAgICAgICAgIAltb3YgICAgJXIx MiwlcnNpCiAgICAzMmY3Ogk0YyA4OSBhNSA3MCBmZSBmZiBmZiAJbW92ICAgICVyMTIsLTB4MTkw KCVyYnApCiAgICAzMmZlOgk0YyA4OSBhNSA3OCBmZSBmZiBmZiAJbW92ICAgICVyMTIsLTB4MTg4 KCVyYnApCglpZiAoSVNfRVJSKGRldikpCgkJcmV0dXJuIGRldjsKCgllcnIgPSB2eGxhbl9kZXZf Y29uZmlndXJlKG5ldCwgZGV2LCBjb25mKTsKCWlmIChlcnIgPCAwKSB7CgkJZnJlZV9uZXRkZXYo ZGV2KTsKICAgIDMzMDU6CWU4IGY2IGQ1IGZmIGZmICAgICAgIAljYWxscSAgOTAwIDx2eGxhbl9k ZWxsaW5rPgogICAgMzMwYToJNGMgODkgZTcgICAgICAgICAgICAgCW1vdiAgICAlcjEyLCVyZGkK ICAgIDMzMGQ6CWU4IDAwIDAwIDAwIDAwICAgICAgIAljYWxscSAgMzMxMiA8dnhsYW5fZGV2X2Ny ZWF0ZSsweGUyPgogICAgMzMxMjoJNDggNjMgYmQgNmMgZmUgZmYgZmYgCW1vdnNscSAtMHgxOTQo JXJicCksJXJkaQoJCXJldHVybiBFUlJfUFRSKGVycik7Cgl9CgoJZXJyID0gcnRubF9jb25maWd1 cmVfbGluayhkZXYsIE5VTEwpOwoJaWYgKGVyciA8IDApIHsKCQlMSVNUX0hFQUQobGlzdF9raWxs KTsKICAgIDMzMTk6CWViIDk1ICAgICAgICAgICAgICAgIAlqbXAgICAgMzJiMCA8dnhsYW5fZGV2 X2NyZWF0ZSsweDgwPgogICAgMzMxYjoJNDggODkgYzcgICAgICAgICAgICAgCW1vdiAgICAlcmF4 LCVyZGkKICAgIDMzMWU6CWViIDkwICAgICAgICAgICAgICAgIAlqbXAgICAgMzJiMCA8dnhsYW5f ZGV2X2NyZWF0ZSsweDgwPgogICAgMzMyMDoJZTggMDAgMDAgMDAgMDAgICAgICAgCWNhbGxxICAz MzI1IDx2eGxhbl9kZXZfY3JlYXRlKzB4ZjU+CgoJCXZ4bGFuX2RlbGxpbmsoZGV2LCAmbGlzdF9r aWxsKTsKICAgIDMzMjU6CTkwICAgICAgICAgICAgICAgICAgIAlub3AKICAgIDMzMjY6CTY2IDJl IDBmIDFmIDg0IDAwIDAwIAlub3B3ICAgJWNzOjB4MCglcmF4LCVyYXgsMSkKICAgIDMzMmQ6CTAw IDAwIDAwIAoKMDAwMDAwMDAwMDAwMzMzMCA8dnhsYW5fc25vb3A+OgoJCXJldHVybiBFUlJfUFRS KGVycik7Cgl9CgoJZXJyID0gcnRubF9jb25maWd1cmVfbGluayhkZXYsIE5VTEwpOwoJaWYgKGVy ciA8IDApIHsKCQlMSVNUX0hFQUQobGlzdF9raWxsKTsKICAgIDMzMzA6CWU4IDAwIDAwIDAwIDAw ICAgICAgIAljYWxscSAgMzMzNSA8dnhsYW5fc25vb3ArMHg1PgoKCQl2eGxhbl9kZWxsaW5rKGRl diwgJmxpc3Rfa2lsbCk7CiAgICAzMzM1Ogk1NSAgICAgICAgICAgICAgICAgICAJcHVzaCAgICVy YnAKICAgIDMzMzY6CTQ4IDg5IGU1ICAgICAgICAgICAgIAltb3YgICAgJXJzcCwlcmJwCiAgICAz MzM5Ogk0MSA1NyAgICAgICAgICAgICAgICAJcHVzaCAgICVyMTUKCQl1bnJlZ2lzdGVyX25ldGRl dmljZV9tYW55KCZsaXN0X2tpbGwpOwogICAgMzMzYjoJNDEgNTYgICAgICAgICAgICAgICAgCXB1 c2ggICAlcjE0CiAgICAzMzNkOgk0YyA4ZCBiNyA0MCAwOCAwMCAwMCAJbGVhICAgIDB4ODQwKCVy ZGkpLCVyMTQKICAgIDMzNDQ6CTQxIDU1ICAgICAgICAgICAgICAgIAlwdXNoICAgJXIxMwogICAg MzM0NjoJNDEgNTQgICAgICAgICAgICAgICAgCXB1c2ggICAlcjEyCiAgICAzMzQ4Ogk1MyAgICAg ICAgICAgICAgICAgICAJcHVzaCAgICVyYngKICAgIDMzNDk6CTQ5IDg5IGZkICAgICAgICAgICAg IAltb3YgICAgJXJkaSwlcjEzCgltZW1zZXQoJnRiLCAwLCBzaXplb2YodGIpKTsKCglkZXYgPSBy dG5sX2NyZWF0ZV9saW5rKG5ldCwgbmFtZSwgbmFtZV9hc3NpZ25fdHlwZSwKCQkJICAgICAgICZ2 eGxhbl9saW5rX29wcywgdGIpOwoJaWYgKElTX0VSUihkZXYpKQoJCXJldHVybiBkZXY7CiAgICAz MzRjOgk0OSA4OSBmNCAgICAgICAgICAgICAJbW92ICAgICVyc2ksJXIxMgogICAgMzM0ZjoJNGMg ODkgZjcgICAgICAgICAgICAgCW1vdiAgICAlcjE0LCVyZGkKCQl1bnJlZ2lzdGVyX25ldGRldmlj ZV9tYW55KCZsaXN0X2tpbGwpOwoJCXJldHVybiBFUlJfUFRSKGVycik7Cgl9CgoJcmV0dXJuIGRl djsKfQogICAgMzM1MjoJNDggODkgZDYgICAgICAgICAgICAgCW1vdiAgICAlcmR4LCVyc2kKICAg IDMzNTU6CTQ5IDg5IGQ3ICAgICAgICAgICAgIAltb3YgICAgJXJkeCwlcjE1CiAgICAzMzU4Ogk0 OCA4MyBlYyAyOCAgICAgICAgICAJc3ViICAgICQweDI4LCVyc3AKICAgIDMzNWM6CWU4IDlmIGNj IGZmIGZmICAgICAgIAljYWxscSAgMCA8X192eGxhbl9maW5kX21hYz4KICogYW5kIFR1bm5lbCBl bmRwb2ludC4KICogUmV0dXJuIHRydWUgaWYgcGFja2V0IGlzIGJvZ3VzIGFuZCBzaG91bGQgYmUg ZHJvcHBlZC4KICovCnN0YXRpYyBib29sIHZ4bGFuX3Nub29wKHN0cnVjdCBuZXRfZGV2aWNlICpk ZXYsCgkJCXVuaW9uIHZ4bGFuX2FkZHIgKnNyY19pcCwgY29uc3QgdTggKnNyY19tYWMpCnsKICAg IDMzNjE6CTQ4IDg1IGMwICAgICAgICAgICAgIAl0ZXN0ICAgJXJheCwlcmF4CiAgICAzMzY0Ogk3 NCA3ZCAgICAgICAgICAgICAgICAJamUgICAgIDMzZTMgPHZ4bGFuX3Nub29wKzB4YjM+CiAgICAz MzY2Ogk0OCA4OSBjMyAgICAgICAgICAgICAJbW92ICAgICVyYXgsJXJieAogICAgMzM2OToJNDgg OGIgMDUgMDAgMDAgMDAgMDAgCW1vdiAgICAweDAoJXJpcCksJXJheCAgICAgICAgIyAzMzcwIDx2 eGxhbl9zbm9vcCsweDQwPgogICAgMzM3MDoJNGMgOGIgNGIgMzAgICAgICAgICAgCW1vdiAgICAw eDMwKCVyYngpLCVyOQogICAgMzM3NDoJNDggODkgNDMgMjggICAgICAgICAgCW1vdiAgICAlcmF4 LDB4MjgoJXJieCkKICAgIDMzNzg6CTQxIDBmIGI3IDQxIGQ4ICAgICAgIAltb3Z6d2wgLTB4Mjgo JXI5KSwlZWF4CiAgICAzMzdkOgk2NiA0MSAzYiAwNCAyNCAgICAgICAJY21wICAgICglcjEyKSwl YXgKc3RhdGljIHN0cnVjdCB2eGxhbl9mZGIgKnZ4bGFuX2ZpbmRfbWFjKHN0cnVjdCB2eGxhbl9k ZXYgKnZ4bGFuLAoJCQkJCWNvbnN0IHU4ICptYWMpCnsKCXN0cnVjdCB2eGxhbl9mZGIgKmY7CgoJ ZiA9IF9fdnhsYW5fZmluZF9tYWModnhsYW4sIG1hYyk7CiAgICAzMzgyOgk3NCAxZSAgICAgICAg ICAgICAgICAJamUgICAgIDMzYTIgPHZ4bGFuX3Nub29wKzB4NzI+CiAgICAzMzg0OglmNiA0MyA0 NiA0MCAgICAgICAgICAJdGVzdGIgICQweDQwLDB4NDYoJXJieCkKICogYW5kIFR1bm5lbCBlbmRw b2ludC4KICogUmV0dXJuIHRydWUgaWYgcGFja2V0IGlzIGJvZ3VzIGFuZCBzaG91bGQgYmUgZHJv cHBlZC4KICovCnN0YXRpYyBib29sIHZ4bGFuX3Nub29wKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYs CgkJCXVuaW9uIHZ4bGFuX2FkZHIgKnNyY19pcCwgY29uc3QgdTggKnNyY19tYWMpCnsKICAgIDMz ODg6CWI4IDAxIDAwIDAwIDAwICAgICAgIAltb3YgICAgJDB4MSwlZWF4CnN0YXRpYyBzdHJ1Y3Qg dnhsYW5fZmRiICp2eGxhbl9maW5kX21hYyhzdHJ1Y3QgdnhsYW5fZGV2ICp2eGxhbiwKCQkJCQlj b25zdCB1OCAqbWFjKQp7CglzdHJ1Y3QgdnhsYW5fZmRiICpmOwoKCWYgPSBfX3Z4bGFuX2ZpbmRf bWFjKHZ4bGFuLCBtYWMpOwogICAgMzM4ZDoJMGYgODQgODYgMDAgMDAgMDAgICAgCWplICAgICAz NDE5IDx2eGxhbl9zbm9vcCsweGU5PgoJaWYgKGYpCiAgICAzMzkzOgk0OCA4MyBjNCAyOCAgICAg ICAgICAJYWRkICAgICQweDI4LCVyc3AKICAgIDMzOTc6CTViICAgICAgICAgICAgICAgICAgIAlw b3AgICAgJXJieAogICAgMzM5ODoJNDEgNWMgICAgICAgICAgICAgICAgCXBvcCAgICAlcjEyCgkJ Zi0+dXNlZCA9IGppZmZpZXM7CiAgICAzMzlhOgk0MSA1ZCAgICAgICAgICAgICAgICAJcG9wICAg ICVyMTMKICAgIDMzOWM6CTQxIDVlICAgICAgICAgICAgICAgIAlwb3AgICAgJXIxNAogICAgMzM5 ZToJNDEgNWYgICAgICAgICAgICAgICAgCXBvcCAgICAlcjE1CiAgICAzM2EwOgk1ZCAgICAgICAg ICAgICAgICAgICAJcG9wICAgICVyYnAKICAgIDMzYTE6CWMzICAgICAgICAgICAgICAgICAgIAly ZXRxICAgCiAgICAzM2EyOgk2NiA4MyBmOCAwYSAgICAgICAgICAJY21wICAgICQweGEsJWF4CiAg ICAzM2E2Ogk3NCAyMSAgICAgICAgICAgICAgICAJamUgICAgIDMzYzkgPHZ4bGFuX3Nub29wKzB4 OTk+CgojaWYgSVNfRU5BQkxFRChDT05GSUdfSVBWNikKc3RhdGljIGlubGluZQpib29sIHZ4bGFu X2FkZHJfZXF1YWwoY29uc3QgdW5pb24gdnhsYW5fYWRkciAqYSwgY29uc3QgdW5pb24gdnhsYW5f YWRkciAqYikKewoJaWYgKGEtPnNhLnNhX2ZhbWlseSAhPSBiLT5zYS5zYV9mYW1pbHkpCiAgICAz M2E4Ogk0MSA4YiA0NCAyNCAwNCAgICAgICAJbW92ICAgIDB4NCglcjEyKSwlZWF4CiAgICAzM2Fk Ogk0MSAzOSA0MSBkYyAgICAgICAgICAJY21wICAgICVlYXgsLTB4MjQoJXI5KQogICAgMzNiMToJ MGYgOTQgYzAgICAgICAgICAgICAgCXNldGUgICAlYWwKCgkJaWYgKGxpa2VseSh2eGxhbl9hZGRy X2VxdWFsKCZyZHN0LT5yZW1vdGVfaXAsIHNyY19pcCkpKQoJCQlyZXR1cm4gZmFsc2U7CgoJCS8q IERvbid0IG1pZ3JhdGUgc3RhdGljIGVudHJpZXMsIGRyb3AgcGFja2V0cyAqLwoJCWlmIChmLT5z dGF0ZSAmIE5VRF9OT0FSUCkKICAgIDMzYjQ6CTg0IGMwICAgICAgICAgICAgICAgIAl0ZXN0ICAg JWFsLCVhbAogICAgMzNiNjoJNzQgY2MgICAgICAgICAgICAgICAgCWplICAgICAzMzg0IDx2eGxh bl9zbm9vcCsweDU0PgoJCQlyZXR1cm4gdHJ1ZTsKICAgIDMzYjg6CTQ4IDgzIGM0IDI4ICAgICAg ICAgIAlhZGQgICAgJDB4MjgsJXJzcAogICAgMzNiYzoJMzEgYzAgICAgICAgICAgICAgICAgCXhv ciAgICAlZWF4LCVlYXgKCgkJaWYgKGxpa2VseSh2eGxhbl9hZGRyX2VxdWFsKCZyZHN0LT5yZW1v dGVfaXAsIHNyY19pcCkpKQoJCQlyZXR1cm4gZmFsc2U7CgoJCS8qIERvbid0IG1pZ3JhdGUgc3Rh dGljIGVudHJpZXMsIGRyb3AgcGFja2V0cyAqLwoJCWlmIChmLT5zdGF0ZSAmIE5VRF9OT0FSUCkK ICAgIDMzYmU6CTViICAgICAgICAgICAgICAgICAgIAlwb3AgICAgJXJieAogICAgMzNiZjoJNDEg NWMgICAgICAgICAgICAgICAgCXBvcCAgICAlcjEyCiAgICAzM2MxOgk0MSA1ZCAgICAgICAgICAg ICAgICAJcG9wICAgICVyMTMKCQkJCQkgMCwgTlRGX1NFTEYpOwoJCXNwaW5fdW5sb2NrKCZ2eGxh bi0+aGFzaF9sb2NrKTsKCX0KCglyZXR1cm4gZmFsc2U7Cn0KICAgIDMzYzM6CTQxIDVlICAgICAg ICAgICAgICAgIAlwb3AgICAgJXIxNAogICAgMzNjNToJNDEgNWYgICAgICAgICAgICAgICAgCXBv cCAgICAlcjE1CiAgICAzM2M3Ogk1ZCAgICAgICAgICAgICAgICAgICAJcG9wICAgICVyYnAKICAg IDMzYzg6CWMzICAgICAgICAgICAgICAgICAgIAlyZXRxICAgCiAgICAzM2M5Ogk0OSA4YiA1MSBl MCAgICAgICAgICAJbW92ICAgIC0weDIwKCVyOSksJXJkeAogICAgMzNjZDoJNDkgOGIgNDEgZTgg ICAgICAgICAgCW1vdiAgICAtMHgxOCglcjkpLCVyYXgKICAgIDMzZDE6CTQ5IDMzIDU0IDI0IDA4 ICAgICAgIAl4b3IgICAgMHg4KCVyMTIpLCVyZHgKc3RhdGljIGlubGluZQpib29sIHZ4bGFuX2Fk ZHJfZXF1YWwoY29uc3QgdW5pb24gdnhsYW5fYWRkciAqYSwgY29uc3QgdW5pb24gdnhsYW5fYWRk ciAqYikKewoJaWYgKGEtPnNhLnNhX2ZhbWlseSAhPSBiLT5zYS5zYV9mYW1pbHkpCgkJcmV0dXJu IGZhbHNlOwoJaWYgKGEtPnNhLnNhX2ZhbWlseSA9PSBBRl9JTkVUNikKICAgIDMzZDY6CTQ5IDMz IDQ0IDI0IDEwICAgICAgIAl4b3IgICAgMHgxMCglcjEyKSwlcmF4CgkJcmV0dXJuIGlwdjZfYWRk cl9lcXVhbCgmYS0+c2luNi5zaW42X2FkZHIsICZiLT5zaW42LnNpbjZfYWRkcik7CgllbHNlCgkJ cmV0dXJuIGEtPnNpbi5zaW5fYWRkci5zX2FkZHIgPT0gYi0+c2luLnNpbl9hZGRyLnNfYWRkcjsK ICAgIDMzZGI6CTQ4IDA5IGMyICAgICAgICAgICAgIAlvciAgICAgJXJheCwlcmR4CiAgICAzM2Rl OgkwZiA5NCBjMCAgICAgICAgICAgICAJc2V0ZSAgICVhbAogICAgMzNlMToJZWIgZDEgICAgICAg ICAgICAgICAgCWptcCAgICAzM2I0IDx2eGxhbl9zbm9vcCsweDg0PgogICAgMzNlMzoJNDkgOGQg OWQgMjggMDkgMDAgMDAgCWxlYSAgICAweDkyOCglcjEzKSwlcmJ4CgkJCQkJIDAsIE5URl9TRUxG KTsKCQlzcGluX3VubG9jaygmdnhsYW4tPmhhc2hfbG9jayk7Cgl9CgoJcmV0dXJuIGZhbHNlOwp9 CiAgICAzM2VhOgk0OCA4OSBkZiAgICAgICAgICAgICAJbW92ICAgICVyYngsJXJkaQoJZiA9IHZ4 bGFuX2ZpbmRfbWFjKHZ4bGFuLCBzcmNfbWFjKTsKCWlmIChsaWtlbHkoZikpIHsKCQlzdHJ1Y3Qg dnhsYW5fcmRzdCAqcmRzdCA9IGZpcnN0X3JlbW90ZV9yY3UoZik7CgoJCWlmIChsaWtlbHkodnhs YW5fYWRkcl9lcXVhbCgmcmRzdC0+cmVtb3RlX2lwLCBzcmNfaXApKSkKCQkJcmV0dXJuIGZhbHNl OwogICAgMzNlZDoJZTggMDAgMDAgMDAgMDAgICAgICAgCWNhbGxxICAzM2YyIDx2eGxhbl9zbm9v cCsweGMyPgoJCQkJCSAwLCBOVEZfU0VMRik7CgkJc3Bpbl91bmxvY2soJnZ4bGFuLT5oYXNoX2xv Y2spOwoJfQoKCXJldHVybiBmYWxzZTsKfQogICAgMzNmMjoJNDkgOGIgNDUgNDggICAgICAgICAg CW1vdiAgICAweDQ4KCVyMTMpLCVyYXgKICAgIDMzZjY6CWE4IDAxICAgICAgICAgICAgICAgIAl0 ZXN0ICAgJDB4MSwlYWwKICAgIDMzZjg6CTBmIDg1IGEwIDAwIDAwIDAwICAgIAlqbmUgICAgMzQ5 ZSA8dnhsYW5fc25vb3ArMHgxNmU+CnsKI2lmIGRlZmluZWQoQ09ORklHX0hBVkVfRUZGSUNJRU5U X1VOQUxJR05FRF9BQ0NFU1MpICYmIEJJVFNfUEVSX0xPTkcgPT0gNjQKCWNvbnN0IHVuc2lnbmVk IGxvbmcgKnVsMSA9IChjb25zdCB1bnNpZ25lZCBsb25nICopYTE7Cgljb25zdCB1bnNpZ25lZCBs b25nICp1bDIgPSAoY29uc3QgdW5zaWduZWQgbG9uZyAqKWEyOwoKCXJldHVybiAoKHVsMVswXSBe IHVsMlswXSkgfCAodWwxWzFdIF4gdWwyWzFdKSkgPT0gMFVMOwogICAgMzNmZToJNDggODkgZGYg ICAgICAgICAgICAgCW1vdiAgICAlcmJ4LCVyZGkKICAgIDM0MDE6CWZmIDE0IDI1IDAwIDAwIDAw IDAwIAljYWxscSAgKjB4MAogICAgMzQwODoJNDggODMgYzQgMjggICAgICAgICAgCWFkZCAgICAk MHgyOCwlcnNwCiAgICAzNDBjOgkzMSBjMCAgICAgICAgICAgICAgICAJeG9yICAgICVlYXgsJWVh eAogICAgMzQwZToJNWIgICAgICAgICAgICAgICAgICAgCXBvcCAgICAlcmJ4CiAgICAzNDBmOgk0 MSA1YyAgICAgICAgICAgICAgICAJcG9wICAgICVyMTIKICAgIDM0MTE6CTQxIDVkICAgICAgICAg ICAgICAgIAlwb3AgICAgJXIxMwoJcmF3X3NwaW5fbG9ja19pbml0KCYoX2xvY2spLT5ybG9jayk7 CQlcCn0gd2hpbGUgKDApCgpzdGF0aWMgX19hbHdheXNfaW5saW5lIHZvaWQgc3Bpbl9sb2NrKHNw aW5sb2NrX3QgKmxvY2spCnsKCXJhd19zcGluX2xvY2soJmxvY2stPnJsb2NrKTsKICAgIDM0MTM6 CTQxIDVlICAgICAgICAgICAgICAgIAlwb3AgICAgJXIxNAogICAgMzQxNToJNDEgNWYgICAgICAg ICAgICAgICAgCXBvcCAgICAlcjE1CiAgICAzNDE3Ogk1ZCAgICAgICAgICAgICAgICAgICAJcG9w ICAgICVyYnAKICAgIDM0MTg6CWMzICAgICAgICAgICAgICAgICAgIAlyZXRxICAgCiAgICAzNDE5 Ogk0YyA4OSA0ZCBkMCAgICAgICAgICAJbW92ICAgICVyOSwtMHgzMCglcmJwKQogICAgMzQxZDoJ ZTggMDAgMDAgMDAgMDAgICAgICAgCWNhbGxxICAzNDIyIDx2eGxhbl9zbm9vcCsweGYyPgogICAg MzQyMjoJNGMgOGIgNGQgZDAgICAgICAgICAgCW1vdiAgICAtMHgzMCglcmJwKSwlcjkKCX0gZWxz ZSB7CgkJLyogbGVhcm5lZCBuZXcgZW50cnkgKi8KCQlzcGluX2xvY2soJnZ4bGFuLT5oYXNoX2xv Y2spOwoKCQkvKiBjbG9zZSBvZmYgcmFjZSBiZXR3ZWVuIHZ4bGFuX2ZsdXNoIGFuZCBpbmNvbWlu ZyBwYWNrZXRzICovCgkJaWYgKG5ldGlmX3J1bm5pbmcoZGV2KSkKICAgIDM0MjY6CTg1IGMwICAg ICAgICAgICAgICAgIAl0ZXN0ICAgJWVheCwlZWF4CiAgICAzNDI4Ogk0ZCA4ZCA1MSBkOCAgICAg ICAgICAJbGVhICAgIC0weDI4KCVyOSksJXIxMAogICAgMzQyYzoJNzQgMjggICAgICAgICAgICAg ICAgCWplICAgICAzNDU2IDx2eGxhbl9zbm9vcCsweDEyNj4KICAgIDM0MmU6CTRjIDg5IGQxICAg ICAgICAgICAgIAltb3YgICAgJXIxMCwlcmN4CiAgICAzNDMxOgk0ZCA4OSBlMCAgICAgICAgICAg ICAJbW92ICAgICVyMTIsJXI4CiAgICAzNDM0Ogk0YyA4OSBmYSAgICAgICAgICAgICAJbW92ICAg ICVyMTUsJXJkeAogICAgMzQzNzoJNDggYzcgYzYgMDAgMDAgMDAgMDAgCW1vdiAgICAkMHgwLCVy c2kKCQkJCQkgMCwgTlRGX1NFTEYpOwoJCXNwaW5fdW5sb2NrKCZ2eGxhbi0+aGFzaF9sb2NrKTsK CX0KCglyZXR1cm4gZmFsc2U7Cn0KICAgIDM0M2U6CTRjIDg5IGVmICAgICAgICAgICAgIAltb3Yg ICAgJXIxMywlcmRpCiAgICAzNDQxOgk0YyA4OSA0ZCBjOCAgICAgICAgICAJbW92ICAgICVyOSwt MHgzOCglcmJwKQogICAgMzQ0NToJNGMgODkgNTUgZDAgICAgICAgICAgCW1vdiAgICAlcjEwLC0w eDMwKCVyYnApCiAgICAzNDQ5OgllOCAwMCAwMCAwMCAwMCAgICAgICAJY2FsbHEgIDM0NGUgPHZ4 bGFuX3Nub29wKzB4MTFlPgoKCQkvKiBEb24ndCBtaWdyYXRlIHN0YXRpYyBlbnRyaWVzLCBkcm9w IHBhY2tldHMgKi8KCQlpZiAoZi0+c3RhdGUgJiBOVURfTk9BUlApCgkJCXJldHVybiB0cnVlOwoK CQlpZiAobmV0X3JhdGVsaW1pdCgpKQogICAgMzQ0ZToJNGMgOGIgNGQgYzggICAgICAgICAgCW1v diAgICAtMHgzOCglcmJwKSwlcjkKICAgIDM0NTI6CTRjIDhiIDU1IGQwICAgICAgICAgIAltb3Yg ICAgLTB4MzAoJXJicCksJXIxMAogICAgMzQ1NjoJNDkgOGIgMDQgMjQgICAgICAgICAgCW1vdiAg ICAoJXIxMiksJXJheAogICAgMzQ1YToJYjkgMWMgMDAgMDAgMDAgICAgICAgCW1vdiAgICAkMHgx YywlZWN4CgkJCW5ldGRldl9pbmZvKGRldiwKICAgIDM0NWY6CTRjIDg5IGQyICAgICAgICAgICAg IAltb3YgICAgJXIxMCwlcmR4CiAgICAzNDYyOgk0OCA4OSBkZSAgICAgICAgICAgICAJbW92ICAg ICVyYngsJXJzaQogICAgMzQ2NToJNGMgODkgZjcgICAgICAgICAgICAgCW1vdiAgICAlcjE0LCVy ZGkKICAgIDM0Njg6CTQ5IDg5IDQxIGQ4ICAgICAgICAgIAltb3YgICAgJXJheCwtMHgyOCglcjkp CiAgICAzNDZjOgk0OSA4YiA0NCAyNCAwOCAgICAgICAJbW92ICAgIDB4OCglcjEyKSwlcmF4CiAg ICAzNDcxOgk0OSA4OSA0MSBlMCAgICAgICAgICAJbW92ICAgICVyYXgsLTB4MjAoJXI5KQogICAg MzQ3NToJNDkgOGIgNDQgMjQgMTAgICAgICAgCW1vdiAgICAweDEwKCVyMTIpLCVyYXgKICAgIDM0 N2E6CTQ5IDg5IDQxIGU4ICAgICAgICAgIAltb3YgICAgJXJheCwtMHgxOCglcjkpCiAgICAzNDdl Ogk0MSA4YiA0NCAyNCAxOCAgICAgICAJbW92ICAgIDB4MTgoJXIxMiksJWVheAogICAgMzQ4MzoJ NDEgODkgNDEgZjAgICAgICAgICAgCW1vdiAgICAlZWF4LC0weDEwKCVyOSkKCQkJCSAgICAiJXBN IG1pZ3JhdGVkIGZyb20gJXBJUyB0byAlcElTXG4iLAoJCQkJICAgIHNyY19tYWMsICZyZHN0LT5y ZW1vdGVfaXAuc2EsICZzcmNfaXAtPnNhKTsKCgkJcmRzdC0+cmVtb3RlX2lwID0gKnNyY19pcDsK ICAgIDM0ODc6CTQ4IDhiIDA1IDAwIDAwIDAwIDAwIAltb3YgICAgMHgwKCVyaXApLCVyYXggICAg ICAgICMgMzQ4ZSA8dnhsYW5fc25vb3ArMHgxNWU+CgkJZi0+dXBkYXRlZCA9IGppZmZpZXM7CgkJ dnhsYW5fZmRiX25vdGlmeSh2eGxhbiwgZiwgcmRzdCwgUlRNX05FV05FSUdIKTsKICAgIDM0OGU6 CTQ4IDg5IDQzIDIwICAgICAgICAgIAltb3YgICAgJXJheCwweDIwKCVyYngpCiAgICAzNDkyOgll OCBhOSBlOCBmZiBmZiAgICAgICAJY2FsbHEgIDFkNDAgPHZ4bGFuX2ZkYl9ub3RpZnk+CiAgICAz NDk3OgkzMSBjMCAgICAgICAgICAgICAgICAJeG9yICAgICVlYXgsJWVheAoJCWlmIChuZXRfcmF0 ZWxpbWl0KCkpCgkJCW5ldGRldl9pbmZvKGRldiwKCQkJCSAgICAiJXBNIG1pZ3JhdGVkIGZyb20g JXBJUyB0byAlcElTXG4iLAoJCQkJICAgIHNyY19tYWMsICZyZHN0LT5yZW1vdGVfaXAuc2EsICZz cmNfaXAtPnNhKTsKCgkJcmRzdC0+cmVtb3RlX2lwID0gKnNyY19pcDsKICAgIDM0OTk6CWU5IGY1 IGZlIGZmIGZmICAgICAgIAlqbXBxICAgMzM5MyA8dnhsYW5fc25vb3ArMHg2Mz4KICAgIDM0OWU6 CTQ1IDBmIGI3IDhkIDdjIDA5IDAwIAltb3Z6d2wgMHg5N2MoJXIxMyksJXI5ZAogICAgMzRhNToJ MDAgCiAgICAzNGE2OgljNyA0NCAyNCAxMCAwMiAwMCAwMCAJbW92bCAgICQweDIsMHgxMCglcnNw KQogICAgMzRhZDoJMDAgCiAgICAzNGFlOgk0MSBiOCAwMCAwNiAwMCAwMCAgICAJbW92ICAgICQw eDYwMCwlcjhkCiAgICAzNGI0OgljNyA0NCAyNCAwOCAwMCAwMCAwMCAJbW92bCAgICQweDAsMHg4 KCVyc3ApCiAgICAzNGJiOgkwMCAKCQlmLT51cGRhdGVkID0gamlmZmllczsKICAgIDM0YmM6CTQx IDhiIDg1IGEwIDA4IDAwIDAwIAltb3YgICAgMHg4YTAoJXIxMyksJWVheAoJCXZ4bGFuX2ZkYl9u b3RpZnkodnhsYW4sIGYsIHJkc3QsIFJUTV9ORVdORUlHSCk7CiAgICAzNGMzOgliOSAwMiAwMCAw MCAwMCAgICAgICAJbW92ICAgICQweDIsJWVjeAoJCQkJCSB2eGxhbi0+ZGVmYXVsdF9kc3QucmVt b3RlX3ZuaSwKCQkJCQkgMCwgTlRGX1NFTEYpOwoJCXNwaW5fdW5sb2NrKCZ2eGxhbi0+aGFzaF9s b2NrKTsKCX0KCglyZXR1cm4gZmFsc2U7CiAgICAzNGM4Ogk0YyA4OSBlMiAgICAgICAgICAgICAJ bW92ICAgICVyMTIsJXJkeAogICAgMzRjYjoJNGMgODkgZmUgICAgICAgICAgICAgCW1vdiAgICAl cjE1LCVyc2kKCQkvKiBsZWFybmVkIG5ldyBlbnRyeSAqLwoJCXNwaW5fbG9jaygmdnhsYW4tPmhh c2hfbG9jayk7CgoJCS8qIGNsb3NlIG9mZiByYWNlIGJldHdlZW4gdnhsYW5fZmx1c2ggYW5kIGlu Y29taW5nIHBhY2tldHMgKi8KCQlpZiAobmV0aWZfcnVubmluZyhkZXYpKQoJCQl2eGxhbl9mZGJf Y3JlYXRlKHZ4bGFuLCBzcmNfbWFjLCBzcmNfaXAsCiAgICAzNGNlOgk0YyA4OSBmNyAgICAgICAg ICAgICAJbW92ICAgICVyMTQsJXJkaQogICAgMzRkMToJODkgMDQgMjQgICAgICAgICAgICAgCW1v diAgICAlZWF4LCglcnNwKQogICAgMzRkNDoJZTggYjcgZjAgZmYgZmYgICAgICAgCWNhbGxxICAy NTkwIDx2eGxhbl9mZGJfY3JlYXRlPgogICAgMzRkOToJZTkgMjAgZmYgZmYgZmYgICAgICAgCWpt cHEgICAzM2ZlIDx2eGxhbl9zbm9vcCsweGNlPgogICAgMzRkZToJNjYgOTAgICAgICAgICAgICAg ICAgCXhjaGcgICAlYXgsJWF4CgowMDAwMDAwMDAwMDAzNGUwIDx2eGxhbl9mZGJfYWRkPjoKICAg IDM0ZTA6CWU4IDAwIDAwIDAwIDAwICAgICAgIAljYWxscSAgMzRlNSA8dnhsYW5fZmRiX2FkZCsw eDU+CiAgICAzNGU1Ogk1NSAgICAgICAgICAgICAgICAgICAJcHVzaCAgICVyYnAKICAgIDM0ZTY6 CTQ4IDg5IGU1ICAgICAgICAgICAgIAltb3YgICAgJXJzcCwlcmJwCiAgICAzNGU5Ogk0MSA1NyAg ICAgICAgICAgICAgICAJcHVzaCAgICVyMTUKICAgIDM0ZWI6CTQxIDU2ICAgICAgICAgICAgICAg IAlwdXNoICAgJXIxNAogICAgMzRlZDoJNDEgNTUgICAgICAgICAgICAgICAgCXB1c2ggICAlcjEz CiAgICAzNGVmOgk0MSA1NCAgICAgICAgICAgICAgICAJcHVzaCAgICVyMTIKICAgIDM0ZjE6CTQ5 IDg5IGZmICAgICAgICAgICAgIAltb3YgICAgJXJkaSwlcjE1CiAgICAzNGY0Ogk1MyAgICAgICAg ICAgICAgICAgICAJcHVzaCAgICVyYngKICAgIDM0ZjU6CTQ4IDgzIGU0IGYwICAgICAgICAgIAlh bmQgICAgJDB4ZmZmZmZmZmZmZmZmZmZmMCwlcnNwCiAgICAzNGY5Ogk0OCA4MyBlYyA1OCAgICAg ICAgICAJc3ViICAgICQweDU4LCVyc3AKICAgIDM0ZmQ6CTY1IDQ4IDhiIDA0IDI1IDI4IDAwIAlt b3YgICAgJWdzOjB4MjgsJXJheAogICAgMzUwNDoJMDAgMDAgCiAgICAzNTA2Ogk0OCA4OSA0NCAy NCA1MCAgICAgICAJbW92ICAgICVyYXgsMHg1MCglcnNwKQogICAgMzUwYjoJMzEgYzAgICAgICAg ICAgICAgICAgCXhvciAgICAlZWF4LCVlYXgKICAgIDM1MGQ6CTBmIGI3IDQ3IDA4ICAgICAgICAg IAltb3Z6d2wgMHg4KCVyZGkpLCVlYXgKCi8qIEFkZCBzdGF0aWMgZW50cnkgKHZpYSBuZXRsaW5r KSAqLwpzdGF0aWMgaW50IHZ4bGFuX2ZkYl9hZGQoc3RydWN0IG5kbXNnICpuZG0sIHN0cnVjdCBu bGF0dHIgKnRiW10sCgkJCSBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LAoJCQkgY29uc3QgdW5zaWdu ZWQgY2hhciAqYWRkciwgdTE2IHZpZCwgdTE2IGZsYWdzKQp7CiAgICAzNTExOglhOCA4MiAgICAg ICAgICAgICAgICAJdGVzdCAgICQweDgyLCVhbAogICAgMzUxMzoJMGYgODQgY2IgMDAgMDAgMDAg ICAgCWplICAgICAzNWU0IDx2eGxhbl9mZGJfYWRkKzB4MTA0PgogICAgMzUxOToJNDggODMgN2Ug MDggMDAgICAgICAgCWNtcHEgICAkMHgwLDB4OCglcnNpKQogICAgMzUxZToJNDggODkgZjcgICAg ICAgICAgICAgCW1vdiAgICAlcnNpLCVyZGkKICAgIDM1MjE6CTBmIDg0IGI2IDAwIDAwIDAwICAg IAlqZSAgICAgMzVkZCA8dnhsYW5fZmRiX2FkZCsweGZkPgogICAgMzUyNzoJNGMgOGQgYTIgNDAg MDggMDAgMDAgCWxlYSAgICAweDg0MCglcmR4KSwlcjEyCiAgICAzNTJlOgk0OCA4OSBkMyAgICAg ICAgICAgICAJbW92ICAgICVyZHgsJXJieAogICAgMzUzMToJNDkgODkgY2QgICAgICAgICAgICAg CW1vdiAgICAlcmN4LCVyMTMKICAgIDM1MzQ6CTQ1IDg5IGNlICAgICAgICAgICAgIAltb3YgICAg JXI5ZCwlcjE0ZAogICAgMzUzNzoJNGMgOGQgNDQgMjQgMjAgICAgICAgCWxlYSAgICAweDIwKCVy c3ApLCVyOAogICAgMzUzYzoJNGMgOGQgNGMgMjQgMjQgICAgICAgCWxlYSAgICAweDI0KCVyc3Ap LCVyOQoJX19iZTE2IHBvcnQ7CglfX2JlMzIgdm5pOwoJdTMyIGlmaW5kZXg7CglpbnQgZXJyOwoK CWlmICghKG5kbS0+bmRtX3N0YXRlICYgKE5VRF9QRVJNQU5FTlR8TlVEX1JFQUNIQUJMRSkpKSB7 CiAgICAzNTQxOgk0OCA4ZCA0YyAyNCAxZSAgICAgICAJbGVhICAgIDB4MWUoJXJzcCksJXJjeAog ICAgMzU0NjoJNDggOGQgNTQgMjQgMjggICAgICAgCWxlYSAgICAweDI4KCVyc3ApLCVyZHgKCQlw cl9pbmZvKCJSVE1fTkVXTkVJR0ggd2l0aCBpbnZhbGlkIHN0YXRlICUjeFxuIiwKCQkJbmRtLT5u ZG1fc3RhdGUpOwoJCXJldHVybiAtRUlOVkFMOwoJfQoKCWlmICh0YltOREFfRFNUXSA9PSBOVUxM KQogICAgMzU0YjoJNGMgODkgZTYgICAgICAgICAgICAgCW1vdiAgICAlcjEyLCVyc2kKICAgIDM1 NGU6CWU4IGNkIGQwIGZmIGZmICAgICAgIAljYWxscSAgNjIwIDx2eGxhbl9mZGJfcGFyc2U+CiAg ICAzNTUzOgk4NSBjMCAgICAgICAgICAgICAgICAJdGVzdCAgICVlYXgsJWVheAogICAgMzU1NToJ NzUgNjcgICAgICAgICAgICAgICAgCWpuZSAgICAzNWJlIDx2eGxhbl9mZGJfYWRkKzB4ZGU+CiAg ICAzNTU3OgkwZiBiNyA3NCAyNCAyOCAgICAgICAJbW92endsIDB4MjgoJXJzcCksJWVzaQogICAg MzU1YzoJYjggOWYgZmYgZmYgZmYgICAgICAgCW1vdiAgICAkMHhmZmZmZmY5ZiwlZWF4CiAgICAz NTYxOgk2NiAzOSBiMyA4MCAwOCAwMCAwMCAJY21wICAgICVzaSwweDg4MCglcmJ4KQoJCXJldHVy biAtRUlOVkFMOwoKCWVyciA9IHZ4bGFuX2ZkYl9wYXJzZSh0YiwgdnhsYW4sICZpcCwgJnBvcnQs ICZ2bmksICZpZmluZGV4KTsKICAgIDM1Njg6CTc1IDU0ICAgICAgICAgICAgICAgIAlqbmUgICAg MzViZSA8dnhsYW5fZmRiX2FkZCsweGRlPgogICAgMzU2YToJNDggODEgYzMgMjggMDkgMDAgMDAg CWFkZCAgICAkMHg5MjgsJXJieAogICAgMzU3MToJNDggODkgZGYgICAgICAgICAgICAgCW1vdiAg ICAlcmJ4LCVyZGkKICAgIDM1NzQ6CWU4IDAwIDAwIDAwIDAwICAgICAgIAljYWxscSAgMzU3OSA8 dnhsYW5fZmRiX2FkZCsweDk5PgogICAgMzU3OToJNDEgMGYgYjYgNDcgMGEgICAgICAgCW1vdnpi bCAweGEoJXIxNSksJWVheAogICAgMzU3ZToJNDQgMGYgYjcgNGMgMjQgMWUgICAgCW1vdnp3bCAw eDFlKCVyc3ApLCVyOWQKCWlmIChlcnIpCiAgICAzNTg0Ogk0OCA4ZCA1NCAyNCAyOCAgICAgICAJ bGVhICAgIDB4MjgoJXJzcCksJXJkeAoJCXJldHVybiBlcnI7CgoJaWYgKHZ4bGFuLT5kZWZhdWx0 X2RzdC5yZW1vdGVfaXAuc2Euc2FfZmFtaWx5ICE9IGlwLnNhLnNhX2ZhbWlseSkKICAgIDM1ODk6 CTQxIDBmIGI3IDRmIDA4ICAgICAgIAltb3Z6d2wgMHg4KCVyMTUpLCVlY3gKCQlyZXR1cm4gLUVB Rk5PU1VQUE9SVDsKICAgIDM1OGU6CTRjIDg5IGU3ICAgICAgICAgICAgIAltb3YgICAgJXIxMiwl cmRpCgoJZXJyID0gdnhsYW5fZmRiX3BhcnNlKHRiLCB2eGxhbiwgJmlwLCAmcG9ydCwgJnZuaSwg JmlmaW5kZXgpOwoJaWYgKGVycikKCQlyZXR1cm4gZXJyOwoKCWlmICh2eGxhbi0+ZGVmYXVsdF9k c3QucmVtb3RlX2lwLnNhLnNhX2ZhbWlseSAhPSBpcC5zYS5zYV9mYW1pbHkpCiAgICAzNTkxOgk0 NSAwZiBiNyBjNiAgICAgICAgICAJbW92endsICVyMTR3LCVyOGQKICAgIDM1OTU6CTRjIDg5IGVl ICAgICAgICAgICAgIAltb3YgICAgJXIxMywlcnNpCiAgICAzNTk4Ogk4OSA0NCAyNCAxMCAgICAg ICAgICAJbW92ICAgICVlYXgsMHgxMCglcnNwKQp9CgpzdGF0aWMgX19hbHdheXNfaW5saW5lIHZv aWQgc3Bpbl9sb2NrX2JoKHNwaW5sb2NrX3QgKmxvY2spCnsKCXJhd19zcGluX2xvY2tfYmgoJmxv Y2stPnJsb2NrKTsKICAgIDM1OWM6CThiIDQ0IDI0IDI0ICAgICAgICAgIAltb3YgICAgMHgyNCgl cnNwKSwlZWF4CiAgICAzNWEwOgk4OSA0NCAyNCAwOCAgICAgICAgICAJbW92ICAgICVlYXgsMHg4 KCVyc3ApCiAgICAzNWE0Ogk4YiA0NCAyNCAyMCAgICAgICAgICAJbW92ICAgIDB4MjAoJXJzcCks JWVheAogICAgMzVhODoJODkgMDQgMjQgICAgICAgICAgICAgCW1vdiAgICAlZWF4LCglcnNwKQoJ CXJldHVybiAtRUFGTk9TVVBQT1JUOwoKCXNwaW5fbG9ja19iaCgmdnhsYW4tPmhhc2hfbG9jayk7 CgllcnIgPSB2eGxhbl9mZGJfY3JlYXRlKHZ4bGFuLCBhZGRyLCAmaXAsIG5kbS0+bmRtX3N0YXRl LCBmbGFncywKICAgIDM1YWI6CWU4IGUwIGVmIGZmIGZmICAgICAgIAljYWxscSAgMjU5MCA8dnhs YW5fZmRiX2NyZWF0ZT4KICAgIDM1YjA6CTQ4IDg5IGRmICAgICAgICAgICAgIAltb3YgICAgJXJi eCwlcmRpCiAgICAzNWIzOgk0MSA4OSBjNCAgICAgICAgICAgICAJbW92ICAgICVlYXgsJXIxMmQK ICAgIDM1YjY6CWU4IDAwIDAwIDAwIDAwICAgICAgIAljYWxscSAgMzViYiA8dnhsYW5fZmRiX2Fk ZCsweGRiPgogICAgMzViYjoJNDQgODkgZTAgICAgICAgICAgICAgCW1vdiAgICAlcjEyZCwlZWF4 CiAgICAzNWJlOgk0OCA4YiA3NCAyNCA1MCAgICAgICAJbW92ICAgIDB4NTAoJXJzcCksJXJzaQog ICAgMzVjMzoJNjUgNDggMzMgMzQgMjUgMjggMDAgCXhvciAgICAlZ3M6MHgyOCwlcnNpCiAgICAz NWNhOgkwMCAwMCAKICAgIDM1Y2M6CTc1IDJjICAgICAgICAgICAgICAgIAlqbmUgICAgMzVmYSA8 dnhsYW5fZmRiX2FkZCsweDExYT4KICAgIDM1Y2U6CTQ4IDhkIDY1IGQ4ICAgICAgICAgIAlsZWEg ICAgLTB4MjgoJXJicCksJXJzcAogICAgMzVkMjoJNWIgICAgICAgICAgICAgICAgICAgCXBvcCAg ICAlcmJ4CiAgICAzNWQzOgk0MSA1YyAgICAgICAgICAgICAgICAJcG9wICAgICVyMTIKICAgIDM1 ZDU6CTQxIDVkICAgICAgICAgICAgICAgIAlwb3AgICAgJXIxMwogICAgMzVkNzoJNDEgNWUgICAg ICAgICAgICAgICAgCXBvcCAgICAlcjE0CiAgICAzNWQ5Ogk0MSA1ZiAgICAgICAgICAgICAgICAJ cG9wICAgICVyMTUKICAgIDM1ZGI6CTVkICAgICAgICAgICAgICAgICAgIAlwb3AgICAgJXJicAog ICAgMzVkYzoJYzMgICAgICAgICAgICAgICAgICAgCXJldHEgICAKICAgIDM1ZGQ6CWI4IGVhIGZm IGZmIGZmICAgICAgIAltb3YgICAgJDB4ZmZmZmZmZWEsJWVheAoJcmF3X3NwaW5fdW5sb2NrKCZs b2NrLT5ybG9jayk7Cn0KCnN0YXRpYyBfX2Fsd2F5c19pbmxpbmUgdm9pZCBzcGluX3VubG9ja19i aChzcGlubG9ja190ICpsb2NrKQp7CglyYXdfc3Bpbl91bmxvY2tfYmgoJmxvY2stPnJsb2NrKTsK ICAgIDM1ZTI6CWViIGRhICAgICAgICAgICAgICAgIAlqbXAgICAgMzViZSA8dnhsYW5fZmRiX2Fk ZCsweGRlPgogICAgMzVlNDoJMGYgYjcgZjAgICAgICAgICAgICAgCW1vdnp3bCAlYXgsJWVzaQog ICAgMzVlNzoJNDggYzcgYzcgMDAgMDAgMDAgMDAgCW1vdiAgICAkMHgwLCVyZGkKCQkJICAgICAg IHBvcnQsIHZuaSwgaWZpbmRleCwgbmRtLT5uZG1fZmxhZ3MpOwoJc3Bpbl91bmxvY2tfYmgoJnZ4 bGFuLT5oYXNoX2xvY2spOwoKCXJldHVybiBlcnI7Cn0KICAgIDM1ZWU6CWU4IDAwIDAwIDAwIDAw ICAgICAgIAljYWxscSAgMzVmMyA8dnhsYW5fZmRiX2FkZCsweDExMz4KICAgIDM1ZjM6CWI4IGVh IGZmIGZmIGZmICAgICAgIAltb3YgICAgJDB4ZmZmZmZmZWEsJWVheAogICAgMzVmODoJZWIgYzQg ICAgICAgICAgICAgICAgCWptcCAgICAzNWJlIDx2eGxhbl9mZGJfYWRkKzB4ZGU+CiAgICAzNWZh OgllOCAwMCAwMCAwMCAwMCAgICAgICAJY2FsbHEgIDM1ZmYgPHZ4bGFuX2ZkYl9hZGQrMHgxMWY+ CiAgICAzNWZmOgk5MCAgICAgICAgICAgICAgICAgICAJbm9wCgowMDAwMDAwMDAwMDAzNjAwIDx2 eGxhbl9nZXRfcm91dGU+OgogICAgMzYwMDoJZTggMDAgMDAgMDAgMDAgICAgICAgCWNhbGxxICAz NjA1IDx2eGxhbl9nZXRfcm91dGUrMHg1PgogICAgMzYwNToJNTUgICAgICAgICAgICAgICAgICAg CXB1c2ggICAlcmJwCiAgICAzNjA2Ogk0OCA4OSBlNSAgICAgICAgICAgICAJbW92ICAgICVyc3As JXJicAogICAgMzYwOToJNDEgNTcgICAgICAgICAgICAgICAgCXB1c2ggICAlcjE1CiAgICAzNjBi Ogk0MSA1NiAgICAgICAgICAgICAgICAJcHVzaCAgICVyMTQKCQkJbmRtLT5uZG1fc3RhdGUpOwoJ CXJldHVybiAtRUlOVkFMOwoJfQoKCWlmICh0YltOREFfRFNUXSA9PSBOVUxMKQoJCXJldHVybiAt RUlOVkFMOwogICAgMzYwZDoJNDEgNTUgICAgICAgICAgICAgICAgCXB1c2ggICAlcjEzCiAgICAz NjBmOgk0MSA1NCAgICAgICAgICAgICAgICAJcHVzaCAgICVyMTIKICAgIDM2MTE6CTRkIDg5IGNj ICAgICAgICAgICAgIAltb3YgICAgJXI5LCVyMTIKCV9fYmUzMiB2bmk7Cgl1MzIgaWZpbmRleDsK CWludCBlcnI7CgoJaWYgKCEobmRtLT5uZG1fc3RhdGUgJiAoTlVEX1BFUk1BTkVOVHxOVURfUkVB Q0hBQkxFKSkpIHsKCQlwcl9pbmZvKCJSVE1fTkVXTkVJR0ggd2l0aCBpbnZhbGlkIHN0YXRlICUj eFxuIiwKICAgIDM2MTQ6CTUzICAgICAgICAgICAgICAgICAgIAlwdXNoICAgJXJieAogICAgMzYx NToJODkgY2IgICAgICAgICAgICAgICAgCW1vdiAgICAlZWN4LCVlYngKICAgIDM2MTc6CTQ5IDg5 IGZmICAgICAgICAgICAgIAltb3YgICAgJXJkaSwlcjE1CiAgICAzNjFhOgk0OCA4MyBlYyA0OCAg ICAgICAgICAJc3ViICAgICQweDQ4LCVyc3AKICAgIDM2MWU6CTQ0IDhiIDhlIGI0IDAwIDAwIDAw IAltb3YgICAgMHhiNCglcnNpKSwlcjlkCgkJCW5kbS0+bmRtX3N0YXRlKTsKCQlyZXR1cm4gLUVJ TlZBTDsKICAgIDM2MjU6CTRjIDhiIDZkIDEwICAgICAgICAgIAltb3YgICAgMHgxMCglcmJwKSwl cjEzCiAgICAzNjI5Ogk2NSA0OCA4YiAwYyAyNSAyOCAwMCAJbW92ICAgICVnczoweDI4LCVyY3gK ICAgIDM2MzA6CTAwIDAwIApzdGF0aWMgc3RydWN0IHJ0YWJsZSAqdnhsYW5fZ2V0X3JvdXRlKHN0 cnVjdCB2eGxhbl9kZXYgKnZ4bGFuLAoJCQkJICAgICAgc3RydWN0IHNrX2J1ZmYgKnNrYiwgaW50 IG9pZiwgdTggdG9zLAoJCQkJICAgICAgX19iZTMyIGRhZGRyLCBfX2JlMzIgKnNhZGRyLAoJCQkJ ICAgICAgc3RydWN0IGRzdF9jYWNoZSAqZHN0X2NhY2hlLAoJCQkJICAgICAgY29uc3Qgc3RydWN0 IGlwX3R1bm5lbF9pbmZvICppbmZvKQp7CiAgICAzNjMyOgk0OCA4OSA0ZCBkMCAgICAgICAgICAJ bW92ICAgICVyY3gsLTB4MzAoJXJicCkKICAgIDM2MzY6CTMxIGM5ICAgICAgICAgICAgICAgIAl4 b3IgICAgJWVjeCwlZWN4CiAgICAzNjM4Ogk0OCA4YiA0NSAxOCAgICAgICAgICAJbW92ICAgIDB4 MTgoJXJicCksJXJheAogICAgMzYzYzoJNDUgODUgYzkgICAgICAgICAgICAgCXRlc3QgICAlcjlk LCVyOWQKICAgIDM2M2Y6CTc1IDU2ICAgICAgICAgICAgICAgIAlqbmUgICAgMzY5NyA8dnhsYW5f Z2V0X3JvdXRlKzB4OTc+CiAgICAzNjQxOgk0OCA4NSBjMCAgICAgICAgICAgICAJdGVzdCAgICVy YXgsJXJheAogICAgMzY0NDoJNDkgODkgZjYgICAgICAgICAgICAgCW1vdiAgICAlcnNpLCVyMTQK ICAgIDM2NDc6CTc0IDRhICAgICAgICAgICAgICAgIAlqZSAgICAgMzY5MyA8dnhsYW5fZ2V0X3Jv dXRlKzB4OTM+CiAgICAzNjQ5OglmNiA0MCAyOCAyMCAgICAgICAgICAJdGVzdGIgICQweDIwLDB4 MjgoJXJheCkKICAgIDM2NGQ6CTc1IDQ4ICAgICAgICAgICAgICAgIAlqbmUgICAgMzY5NyA8dnhs YW5fZ2V0X3JvdXRlKzB4OTc+CiAgICAzNjRmOgk0YyA4OSBlNiAgICAgICAgICAgICAJbW92ICAg ICVyMTIsJXJzaQogICAgMzY1MjoJNGMgODkgZWYgICAgICAgICAgICAgCW1vdiAgICAlcjEzLCVy ZGkKICAgIDM2NTU6CTQ0IDg5IDQ1IDk0ICAgICAgICAgIAltb3YgICAgJXI4ZCwtMHg2YyglcmJw KQogICAgMzY1OToJODkgNTUgOTggICAgICAgICAgICAgCW1vdiAgICAlZWR4LC0weDY4KCVyYnAp CiAgICAzNjVjOgllOCAwMCAwMCAwMCAwMCAgICAgICAJY2FsbHEgIDM2NjEgPHZ4bGFuX2dldF9y b3V0ZSsweDYxPgogICAgMzY2MToJNDggODUgYzAgICAgICAgICAgICAgCXRlc3QgICAlcmF4LCVy YXgKICAgIDM2NjQ6CThiIDU1IDk4ICAgICAgICAgICAgIAltb3YgICAgLTB4NjgoJXJicCksJWVk eAogICAgMzY2NzoJNDQgOGIgNDUgOTQgICAgICAgICAgCW1vdiAgICAtMHg2YyglcmJwKSwlcjhk CiAgICAzNjZiOgkwZiA4NCA4ZCAwMCAwMCAwMCAgICAJamUgICAgIDM2ZmUgPHZ4bGFuX2dldF9y b3V0ZSsweGZlPgppcF90dW5uZWxfZHN0X2NhY2hlX3VzYWJsZShjb25zdCBzdHJ1Y3Qgc2tfYnVm ZiAqc2tiLAoJCQkgICBjb25zdCBzdHJ1Y3QgaXBfdHVubmVsX2luZm8gKmluZm8pCnsKCWlmIChz a2ItPm1hcmspCgkJcmV0dXJuIGZhbHNlOwoJaWYgKCFpbmZvKQogICAgMzY3MToJNDggOGIgNWQg ZDAgICAgICAgICAgCW1vdiAgICAtMHgzMCglcmJwKSwlcmJ4CiAgICAzNjc1Ogk2NSA0OCAzMyAx YyAyNSAyOCAwMCAJeG9yICAgICVnczoweDI4LCVyYngKICAgIDM2N2M6CTAwIDAwIAoJCXJldHVy biB0cnVlOwoJaWYgKGluZm8tPmtleS50dW5fZmxhZ3MgJiBUVU5ORUxfTk9DQUNIRSkKICAgIDM2 N2U6CTBmIDg1IDg5IDAwIDAwIDAwICAgIAlqbmUgICAgMzcwZCA8dnhsYW5fZ2V0X3JvdXRlKzB4 MTBkPgoJc3RydWN0IGZsb3dpNCBmbDQ7CgoJaWYgKHRvcyAmJiAhaW5mbykKCQl1c2VfY2FjaGUg PSBmYWxzZTsKCWlmICh1c2VfY2FjaGUpIHsKCQlydCA9IGRzdF9jYWNoZV9nZXRfaXA0KGRzdF9j YWNoZSwgc2FkZHIpOwogICAgMzY4NDoJNDggODMgYzQgNDggICAgICAgICAgCWFkZCAgICAkMHg0 OCwlcnNwCiAgICAzNjg4Ogk1YiAgICAgICAgICAgICAgICAgICAJcG9wICAgICVyYngKICAgIDM2 ODk6CTQxIDVjICAgICAgICAgICAgICAgIAlwb3AgICAgJXIxMgogICAgMzY4YjoJNDEgNWQgICAg ICAgICAgICAgICAgCXBvcCAgICAlcjEzCiAgICAzNjhkOgk0MSA1ZSAgICAgICAgICAgICAgICAJ cG9wICAgICVyMTQKICAgIDM2OGY6CTQxIDVmICAgICAgICAgICAgICAgIAlwb3AgICAgJXIxNQoJ CWlmIChydCkKICAgIDM2OTE6CTVkICAgICAgICAgICAgICAgICAgIAlwb3AgICAgJXJicAogICAg MzY5MjoJYzMgICAgICAgICAgICAgICAgICAgCXJldHEgICAKICAgIDM2OTM6CTg0IGRiICAgICAg ICAgICAgICAgIAl0ZXN0ICAgJWJsLCVibAogICAgMzY5NToJNzQgYjggICAgICAgICAgICAgICAg CWplICAgICAzNjRmIDx2eGxhbl9nZXRfcm91dGUrMHg0Zj4KICAgIDM2OTc6CTQ1IDMxIGY2ICAg ICAgICAgICAgIAl4b3IgICAgJXIxNGQsJXIxNGQKICAgIDM2OWE6CTQ4IDhkIDc1IGEwICAgICAg ICAgIAlsZWEgICAgLTB4NjAoJXJicCksJXJzaQogICAgMzY5ZToJMzEgYzAgICAgICAgICAgICAg ICAgCXhvciAgICAlZWF4LCVlYXgKICAgIDM2YTA6CWI5IDA2IDAwIDAwIDAwICAgICAgIAltb3Yg ICAgJDB4NiwlZWN4CgkJKnNhZGRyID0gZmw0LnNhZGRyOwoJCWlmICh1c2VfY2FjaGUpCgkJCWRz dF9jYWNoZV9zZXRfaXA0KGRzdF9jYWNoZSwgJnJ0LT5kc3QsIGZsNC5zYWRkcik7Cgl9CglyZXR1 cm4gcnQ7Cn0KICAgIDM2YTU6CTgzIGUzIDFlICAgICAgICAgICAgIAlhbmQgICAgJDB4MWUsJWVi eAogICAgMzZhODoJNDggODkgZjcgICAgICAgICAgICAgCW1vdiAgICAlcnNpLCVyZGkKICAgIDM2 YWI6CWYzIDQ4IGFiICAgICAgICAgICAgIAlyZXAgc3RvcyAlcmF4LCVlczooJXJkaSkKICAgIDM2 YWU6CTQxIDhiIDA0IDI0ICAgICAgICAgIAltb3YgICAgKCVyMTIpLCVlYXgKICAgIDM2YjI6CTQ5 IDhiIDdmIDM4ICAgICAgICAgIAltb3YgICAgMHgzOCglcjE1KSwlcmRpCiAgICAzNmI2Ogk4OSA1 NSBhMCAgICAgICAgICAgICAJbW92ICAgICVlZHgsLTB4NjAoJXJicCkKICAgIDM2Yjk6CTMxIGQy ICAgICAgICAgICAgICAgIAl4b3IgICAgJWVkeCwlZWR4CiAgICAzNmJiOgk4OCA1ZCBhYyAgICAg ICAgICAgICAJbW92ICAgICVibCwtMHg1NCglcmJwKQogICAgMzZiZToJNDQgODkgNGQgYTggICAg ICAgICAgCW1vdiAgICAlcjlkLC0weDU4KCVyYnApCiAgICAzNmMyOgljNiA0NSBhZSAxMSAgICAg ICAgICAJbW92YiAgICQweDExLC0weDUyKCVyYnApCnsKCWJvb2wgdXNlX2NhY2hlID0gaXBfdHVu bmVsX2RzdF9jYWNoZV91c2FibGUoc2tiLCBpbmZvKTsKCXN0cnVjdCBydGFibGUgKnJ0ID0gTlVM TDsKCXN0cnVjdCBmbG93aTQgZmw0OwoKCWlmICh0b3MgJiYgIWluZm8pCiAgICAzNmM2Ogk0NCA4 OSA0NSBjNCAgICAgICAgICAJbW92ICAgICVyOGQsLTB4M2MoJXJicCkKCQlydCA9IGRzdF9jYWNo ZV9nZXRfaXA0KGRzdF9jYWNoZSwgc2FkZHIpOwoJCWlmIChydCkKCQkJcmV0dXJuIHJ0OwoJfQoK CW1lbXNldCgmZmw0LCAwLCBzaXplb2YoZmw0KSk7CiAgICAzNmNhOgk4OSA0NSBjMCAgICAgICAg ICAgICAJbW92ICAgICVlYXgsLTB4NDAoJXJicCkKICAgIDM2Y2Q6CWU4IDAwIDAwIDAwIDAwICAg ICAgIAljYWxscSAgMzZkMiA8dnhsYW5fZ2V0X3JvdXRlKzB4ZDI+CiAgICAzNmQyOgk0OCAzZCAw MCBmMCBmZiBmZiAgICAJY21wICAgICQweGZmZmZmZmZmZmZmZmYwMDAsJXJheAogICAgMzZkODoJ NzcgOTcgICAgICAgICAgICAgICAgCWphICAgICAzNjcxIDx2eGxhbl9nZXRfcm91dGUrMHg3MT4K ICAgIDM2ZGE6CThiIDU1IGMwICAgICAgICAgICAgIAltb3YgICAgLTB4NDAoJXJicCksJWVkeAog ICAgMzZkZDoJNDUgODQgZjYgICAgICAgICAgICAgCXRlc3QgICAlcjE0YiwlcjE0YgoJZmw0LmZs b3dpNF9vaWYgPSBvaWY7CglmbDQuZmxvd2k0X3RvcyA9IFJUX1RPUyh0b3MpOwoJZmw0LmZsb3dp NF9tYXJrID0gc2tiLT5tYXJrOwoJZmw0LmZsb3dpNF9wcm90byA9IElQUFJPVE9fVURQOwoJZmw0 LmRhZGRyID0gZGFkZHI7CglmbDQuc2FkZHIgPSAqc2FkZHI7CiAgICAzNmUwOgk0MSA4OSAxNCAy NCAgICAgICAgICAJbW92ICAgICVlZHgsKCVyMTIpCnN0cnVjdCBkc3RfZW50cnkgKmlwdjRfYmxh Y2tob2xlX3JvdXRlKHN0cnVjdCBuZXQgKm5ldCwKCQkJCSAgICAgICBzdHJ1Y3QgZHN0X2VudHJ5 ICpkc3Rfb3JpZyk7CgpzdGF0aWMgaW5saW5lIHN0cnVjdCBydGFibGUgKmlwX3JvdXRlX291dHB1 dF9rZXkoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgZmxvd2k0ICpmbHApCnsKCXJldHVybiBpcF9y b3V0ZV9vdXRwdXRfZmxvdyhuZXQsIGZscCwgTlVMTCk7CiAgICAzNmU0Ogk3NCA4YiAgICAgICAg ICAgICAgICAJamUgICAgIDM2NzEgPHZ4bGFuX2dldF9yb3V0ZSsweDcxPgoJCWlmIChydCkKCQkJ cmV0dXJuIHJ0OwoJfQoKCW1lbXNldCgmZmw0LCAwLCBzaXplb2YoZmw0KSk7CglmbDQuZmxvd2k0 X29pZiA9IG9pZjsKICAgIDM2ZTY6CTQ4IDg5IGM2ICAgICAgICAgICAgIAltb3YgICAgJXJheCwl cnNpCiAgICAzNmU5Ogk0YyA4OSBlZiAgICAgICAgICAgICAJbW92ICAgICVyMTMsJXJkaQoJZmw0 LmZsb3dpNF90b3MgPSBSVF9UT1ModG9zKTsKICAgIDM2ZWM6CTQ4IDg5IDQ1IDk4ICAgICAgICAg IAltb3YgICAgJXJheCwtMHg2OCglcmJwKQoJZmw0LmZsb3dpNF9tYXJrID0gc2tiLT5tYXJrOwog ICAgMzZmMDoJZTggMDAgMDAgMDAgMDAgICAgICAgCWNhbGxxICAzNmY1IDx2eGxhbl9nZXRfcm91 dGUrMHhmNT4KCWZsNC5mbG93aTRfcHJvdG8gPSBJUFBST1RPX1VEUDsKICAgIDM2ZjU6CTQ4IDhi IDQ1IDk4ICAgICAgICAgIAltb3YgICAgLTB4NjgoJXJicCksJXJheAoJZmw0LmRhZGRyID0gZGFk ZHI7CiAgICAzNmY5OgllOSA3MyBmZiBmZiBmZiAgICAgICAJam1wcSAgIDM2NzEgPHZ4bGFuX2dl dF9yb3V0ZSsweDcxPgogICAgMzZmZToJNDUgOGIgOGUgYjQgMDAgMDAgMDAgCW1vdiAgICAweGI0 KCVyMTQpLCVyOWQKCWZsNC5zYWRkciA9ICpzYWRkcjsKCglydCA9IGlwX3JvdXRlX291dHB1dF9r ZXkodnhsYW4tPm5ldCwgJmZsNCk7CglpZiAoIUlTX0VSUihydCkpIHsKICAgIDM3MDU6CTQxIGJl IDAxIDAwIDAwIDAwICAgIAltb3YgICAgJDB4MSwlcjE0ZAoJCSpzYWRkciA9IGZsNC5zYWRkcjsK ICAgIDM3MGI6CWViIDhkICAgICAgICAgICAgICAgIAlqbXAgICAgMzY5YSA8dnhsYW5fZ2V0X3Jv dXRlKzB4OWE+CgkJaWYgKHVzZV9jYWNoZSkKICAgIDM3MGQ6CWU4IDAwIDAwIDAwIDAwICAgICAg IAljYWxscSAgMzcxMiA8dnhsYW5fZ2V0X3JvdXRlKzB4MTEyPgoJZmw0LmRhZGRyID0gZGFkZHI7 CglmbDQuc2FkZHIgPSAqc2FkZHI7CgoJcnQgPSBpcF9yb3V0ZV9vdXRwdXRfa2V5KHZ4bGFuLT5u ZXQsICZmbDQpOwoJaWYgKCFJU19FUlIocnQpKSB7CgkJKnNhZGRyID0gZmw0LnNhZGRyOwogICAg MzcxMjoJMGYgMWYgNDAgMDAgICAgICAgICAgCW5vcGwgICAweDAoJXJheCkKCQlpZiAodXNlX2Nh Y2hlKQoJCQlkc3RfY2FjaGVfc2V0X2lwNChkc3RfY2FjaGUsICZydC0+ZHN0LCBmbDQuc2FkZHIp OwogICAgMzcxNjoJNjYgMmUgMGYgMWYgODQgMDAgMDAgCW5vcHcgICAlY3M6MHgwKCVyYXgsJXJh eCwxKQogICAgMzcxZDoJMDAgMDAgMDAgCgowMDAwMDAwMDAwMDAzNzIwIDx2eGxhbl9zdG9wPjoK ICAgIDM3MjA6CWU4IDAwIDAwIDAwIDAwICAgICAgIAljYWxscSAgMzcyNSA8dnhsYW5fc3RvcCsw eDU+CiAgICAzNzI1Ogk1NSAgICAgICAgICAgICAgICAgICAJcHVzaCAgICVyYnAKICAgIDM3MjY6 CTQ4IDg5IGU1ICAgICAgICAgICAgIAltb3YgICAgJXJzcCwlcmJwCiAgICAzNzI5Ogk0MSA1NyAg ICAgICAgICAgICAgICAJcHVzaCAgICVyMTUKICAgIDM3MmI6CTQxIDU2ICAgICAgICAgICAgICAg IAlwdXNoICAgJXIxNAogICAgMzcyZDoJNDEgNTUgICAgICAgICAgICAgICAgCXB1c2ggICAlcjEz CiAgICAzNzJmOgk0MSA1NCAgICAgICAgICAgICAgICAJcHVzaCAgICVyMTIKICAgIDM3MzE6CTQ5 IDg5IGZlICAgICAgICAgICAgIAltb3YgICAgJXJkaSwlcjE0CiAgICAzNzM0Ogk1MyAgICAgICAg ICAgICAgICAgICAJcHVzaCAgICVyYngKCglpZiAodG9zICYmICFpbmZvKQoJCXVzZV9jYWNoZSA9 IGZhbHNlOwoJaWYgKHVzZV9jYWNoZSkgewoJCXJ0ID0gZHN0X2NhY2hlX2dldF9pcDQoZHN0X2Nh Y2hlLCBzYWRkcik7CgkJaWYgKHJ0KQogICAgMzczNToJNGMgOGQgYTcgNDAgMDggMDAgMDAgCWxl YSAgICAweDg0MCglcmRpKSwlcjEyCiAgICAzNzNjOgk0OCA4MyBlYyAyOCAgICAgICAgICAJc3Vi ICAgICQweDI4LCVyc3AKCQkqc2FkZHIgPSBmbDQuc2FkZHI7CgkJaWYgKHVzZV9jYWNoZSkKCQkJ ZHN0X2NhY2hlX3NldF9pcDQoZHN0X2NhY2hlLCAmcnQtPmRzdCwgZmw0LnNhZGRyKTsKCX0KCXJl dHVybiBydDsKfQogICAgMzc0MDoJMGYgYjcgYjcgODAgMDggMDAgMDAgCW1vdnp3bCAweDg4MCgl cmRpKSwlZXNpCiAgICAzNzQ3Ogk2NSA0OCA4YiAwNCAyNSAyOCAwMCAJbW92ICAgICVnczoweDI4 LCVyYXgKICAgIDM3NGU6CTAwIDAwIAoJc3Bpbl91bmxvY2tfYmgoJnZ4bGFuLT5oYXNoX2xvY2sp Owp9CgovKiBDbGVhbnVwIHRpbWVyIGFuZCBmb3J3YXJkaW5nIHRhYmxlIG9uIHNodXRkb3duICov CnN0YXRpYyBpbnQgdnhsYW5fc3RvcChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQp7CiAgICAzNzUw Ogk0OCA4OSA0NSBkMCAgICAgICAgICAJbW92ICAgICVyYXgsLTB4MzAoJXJicCkKICAgIDM3NTQ6 CTMxIGMwICAgICAgICAgICAgICAgIAl4b3IgICAgJWVheCwlZWF4CiAgICAzNzU2Ogk0OCA4YiA4 NyA3OCAwOCAwMCAwMCAJbW92ICAgIDB4ODc4KCVyZGkpLCVyYXgKICAgIDM3NWQ6CTQ4IDhiIDkw IDg4IDE0IDAwIDAwIAltb3YgICAgMHgxNDg4KCVyYXgpLCVyZHgKICAgIDM3NjQ6CThiIDA1IDAw IDAwIDAwIDAwICAgIAltb3YgICAgMHgwKCVyaXApLCVlYXggICAgICAgICMgMzc2YSA8dnhsYW5f c3RvcCsweDRhPgogICAgMzc2YToJODMgZTggMDEgICAgICAgICAgICAgCXN1YiAgICAkMHgxLCVl YXgKICAgIDM3NmQ6CTY2IDgzIGZlIDBhICAgICAgICAgIAljbXAgICAgJDB4YSwlc2kKCQlyZXR1 cm4gaXBhLT5zaW4uc2luX2FkZHIuc19hZGRyID09IGh0b25sKElOQUREUl9BTlkpOwp9CgpzdGF0 aWMgaW5saW5lIGJvb2wgdnhsYW5fYWRkcl9tdWx0aWNhc3QoY29uc3QgdW5pb24gdnhsYW5fYWRk ciAqaXBhKQp7CglpZiAoaXBhLT5zYS5zYV9mYW1pbHkgPT0gQUZfSU5FVDYpCiAgICAzNzcxOgk0 OCA5OCAgICAgICAgICAgICAgICAJY2x0cSAgIAogICAgMzc3MzoJNDggOGIgNGMgYzIgMTggICAg ICAgCW1vdiAgICAweDE4KCVyZHgsJXJheCw4KSwlcmN4CglzcGluX3VubG9ja19iaCgmdnhsYW4t Pmhhc2hfbG9jayk7Cn0KCi8qIENsZWFudXAgdGltZXIgYW5kIGZvcndhcmRpbmcgdGFibGUgb24g c2h1dGRvd24gKi8Kc3RhdGljIGludCB2eGxhbl9zdG9wKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYp CnsKICAgIDM3Nzg6CTBmIDg0IGM0IDAwIDAwIDAwICAgIAlqZSAgICAgMzg0MiA8dnhsYW5fc3Rv cCsweDEyMj4KICAgIDM3N2U6CThiIGJmIDg0IDA4IDAwIDAwICAgIAltb3YgICAgMHg4ODQoJXJk aSksJWVkaQogICAgMzc4NDoJYzcgNDUgYmMgMDAgMDAgMDAgMDAgCW1vdmwgICAkMHgwLC0weDQ0 KCVyYnApCglzdHJ1Y3QgdnhsYW5fZGV2ICp2eGxhbiA9IG5ldGRldl9wcml2KGRldik7CglzdHJ1 Y3QgdnhsYW5fbmV0ICp2biA9IG5ldF9nZW5lcmljKHZ4bGFuLT5uZXQsIHZ4bGFuX25ldF9pZCk7 CiAgICAzNzhiOgk4OSBmOCAgICAgICAgICAgICAgICAJbW92ICAgICVlZGksJWVheAogICAgMzc4 ZDoJMjUgZjAgMDAgMDAgMDAgICAgICAgCWFuZCAgICAkMHhmMCwlZWF4CiAgICAzNzkyOgkzZCBl MCAwMCAwMCAwMCAgICAgICAJY21wICAgICQweGUwLCVlYXgKICAgIDM3OTc6CTBmIDg0IGMzIDAw IDAwIDAwICAgIAlqZSAgICAgMzg2MCA8dnhsYW5fc3RvcCsweDE0MD4KCQlyZXR1cm4gaXBhLT5z aW4uc2luX2FkZHIuc19hZGRyID09IGh0b25sKElOQUREUl9BTlkpOwp9CgpzdGF0aWMgaW5saW5l IGJvb2wgdnhsYW5fYWRkcl9tdWx0aWNhc3QoY29uc3QgdW5pb24gdnhsYW5fYWRkciAqaXBhKQp7 CglpZiAoaXBhLT5zYS5zYV9mYW1pbHkgPT0gQUZfSU5FVDYpCiAgICAzNzlkOgk0OSA4ZCBiZSBl MCAwOCAwMCAwMCAJbGVhICAgIDB4OGUwKCVyMTQpLCVyZGkKICAgIDM3YTQ6CTQ5IDhkIDllIGEw IDA5IDAwIDAwIAlsZWEgICAgMHg5YTAoJXIxNCksJXJieAogICAgMzdhYjoJNGQgOGQgYWUgYTAg MTEgMDAgMDAgCWxlYSAgICAweDExYTAoJXIxNCksJXIxMwoJCXJldHVybiBpcHY2X2FkZHJfaXNf bXVsdGljYXN0KCZpcGEtPnNpbjYuc2luNl9hZGRyKTsKCWVsc2UKCQlyZXR1cm4gSU5fTVVMVElD QVNUKG50b2hsKGlwYS0+c2luLnNpbl9hZGRyLnNfYWRkcikpOwogICAgMzdiMjoJZTggMDAgMDAg MDAgMDAgICAgICAgCWNhbGxxICAzN2I3IDx2eGxhbl9zdG9wKzB4OTc+Ci8qIENsZWFudXAgdGlt ZXIgYW5kIGZvcndhcmRpbmcgdGFibGUgb24gc2h1dGRvd24gKi8Kc3RhdGljIGludCB2eGxhbl9z dG9wKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCnsKCXN0cnVjdCB2eGxhbl9kZXYgKnZ4bGFuID0g bmV0ZGV2X3ByaXYoZGV2KTsKCXN0cnVjdCB2eGxhbl9uZXQgKnZuID0gbmV0X2dlbmVyaWModnhs YW4tPm5ldCwgdnhsYW5fbmV0X2lkKTsKCWludCByZXQgPSAwOwogICAgMzdiNzoJNDkgOGQgODYg MjggMDkgMDAgMDAgCWxlYSAgICAweDkyOCglcjE0KSwlcmF4CgoJaWYgKHZ4bGFuX2FkZHJfbXVs dGljYXN0KCZ2eGxhbi0+ZGVmYXVsdF9kc3QucmVtb3RlX2lwKSAmJgogICAgMzdiZToJNDggODkg YzcgICAgICAgICAgICAgCW1vdiAgICAlcmF4LCVyZGkKICAgIDM3YzE6CTQ4IDg5IDQ1IGIwICAg ICAgICAgIAltb3YgICAgJXJheCwtMHg1MCglcmJwKQogICAgMzdjNToJZTggMDAgMDAgMDAgMDAg ICAgICAgCWNhbGxxICAzN2NhIDx2eGxhbl9zdG9wKzB4YWE+CiAgICAzN2NhOgk0OCA4YiAzMyAg ICAgICAgICAgICAJbW92ICAgICglcmJ4KSwlcnNpCgkgICAgIXZ4bGFuX2dyb3VwX3VzZWQodm4s IHZ4bGFuKSkKCQlyZXQgPSB2eGxhbl9pZ21wX2xlYXZlKHZ4bGFuKTsKCglkZWxfdGltZXJfc3lu YygmdnhsYW4tPmFnZV90aW1lcik7CiAgICAzN2NkOgk0OCA4NSBmNiAgICAgICAgICAgICAJdGVz dCAgICVyc2ksJXJzaQogICAgMzdkMDoJNzUgMGEgICAgICAgICAgICAgICAgCWpuZSAgICAzN2Rj IDx2eGxhbl9zdG9wKzB4YmM+CiAgICAzN2QyOgllYiAyNCAgICAgICAgICAgICAgICAJam1wICAg IDM3ZjggPHZ4bGFuX3N0b3ArMHhkOD4KICAgIDM3ZDQ6CTRkIDg1IGZmICAgICAgICAgICAgIAl0 ZXN0ICAgJXIxNSwlcjE1CiAgICAzN2Q3Ogk0YyA4OSBmZSAgICAgICAgICAgICAJbW92ICAgICVy MTUsJXJzaQogICAgMzdkYToJNzQgMWMgICAgICAgICAgICAgICAgCWplICAgICAzN2Y4IDx2eGxh bl9zdG9wKzB4ZDg+CiAgICAzN2RjOgkwZiBiNyA1NiA0NCAgICAgICAgICAJbW92endsIDB4NDQo JXJzaSksJWVkeAogICAgMzdlMDoJNGMgOGIgM2UgICAgICAgICAgICAgCW1vdiAgICAoJXJzaSks JXIxNQogICAgMzdlMzoJMGIgNTYgNDAgICAgICAgICAgICAgCW9yICAgICAweDQwKCVyc2kpLCVl ZHgKICAgIDM3ZTY6CTc0IGVjICAgICAgICAgICAgICAgIAlqZSAgICAgMzdkNCA8dnhsYW5fc3Rv cCsweGI0PgoJcmF3X3NwaW5fbG9jaygmbG9jay0+cmxvY2spOwp9CgpzdGF0aWMgX19hbHdheXNf aW5saW5lIHZvaWQgc3Bpbl9sb2NrX2JoKHNwaW5sb2NrX3QgKmxvY2spCnsKCXJhd19zcGluX2xv Y2tfYmgoJmxvY2stPnJsb2NrKTsKICAgIDM3ZTg6CTRjIDg5IGU3ICAgICAgICAgICAgIAltb3Yg ICAgJXIxMiwlcmRpCiAgICAzN2ViOgllOCA0MCBlNiBmZiBmZiAgICAgICAJY2FsbHEgIDFlMzAg PHZ4bGFuX2ZkYl9kZXN0cm95PgogICAgMzdmMDoJNGQgODUgZmYgICAgICAgICAgICAgCXRlc3Qg ICAlcjE1LCVyMTUKICAgIDM3ZjM6CTRjIDg5IGZlICAgICAgICAgICAgIAltb3YgICAgJXIxNSwl cnNpCiAgICAzN2Y2Ogk3NSBlNCAgICAgICAgICAgICAgICAJam5lICAgIDM3ZGMgPHZ4bGFuX3N0 b3ArMHhiYz4KICAgIDM3Zjg6CTQ4IDgzIGMzIDA4ICAgICAgICAgIAlhZGQgICAgJDB4OCwlcmJ4 Cgl1bnNpZ25lZCBpbnQgaDsKCglzcGluX2xvY2tfYmgoJnZ4bGFuLT5oYXNoX2xvY2spOwoJZm9y IChoID0gMDsgaCA8IEZEQl9IQVNIX1NJWkU7ICsraCkgewoJCXN0cnVjdCBobGlzdF9ub2RlICpw LCAqbjsKCQlobGlzdF9mb3JfZWFjaF9zYWZlKHAsIG4sICZ2eGxhbi0+ZmRiX2hlYWRbaF0pIHsK ICAgIDM3ZmM6CTRjIDM5IGViICAgICAgICAgICAgIAljbXAgICAgJXIxMywlcmJ4CiAgICAzN2Zm Ogk3NSBjOSAgICAgICAgICAgICAgICAJam5lICAgIDM3Y2EgPHZ4bGFuX3N0b3ArMHhhYT4KICAg IDM4MDE6CTQ4IDhiIDdkIGIwICAgICAgICAgIAltb3YgICAgLTB4NTAoJXJicCksJXJkaQogICAg MzgwNToJZTggMDAgMDAgMDAgMDAgICAgICAgCWNhbGxxICAzODBhIDx2eGxhbl9zdG9wKzB4ZWE+ CiAgICAzODBhOgk0OSA4ZCBiNiA2OCAwOCAwMCAwMCAJbGVhICAgIDB4ODY4KCVyMTQpLCVyc2kK ICAgIDM4MTE6CTQ5IDhkIGJlIDYwIDA4IDAwIDAwIAlsZWEgICAgMHg4NjAoJXIxNCksJXJkaQoJ CQlzdHJ1Y3QgdnhsYW5fZmRiICpmCgkJCQk9IGNvbnRhaW5lcl9vZihwLCBzdHJ1Y3QgdnhsYW5f ZmRiLCBobGlzdCk7CgkJCS8qIHRoZSBhbGxfemVyb3NfbWFjIGVudHJ5IGlzIGRlbGV0ZWQgYXQg dnhsYW5fdW5pbml0ICovCgkJCWlmICghaXNfemVyb19ldGhlcl9hZGRyKGYtPmV0aF9hZGRyKSkK CQkJCXZ4bGFuX2ZkYl9kZXN0cm95KHZ4bGFuLCBmKTsKICAgIDM4MTg6CWU4IDczIGQ0IGZmIGZm ICAgICAgIAljYWxscSAgYzkwIDx2eGxhbl9zb2NrX3JlbGVhc2UuaXNyYS40ND4KICAgIDM4MWQ6 CTQ4IDhiIDRkIGQwICAgICAgICAgIAltb3YgICAgLTB4MzAoJXJicCksJXJjeAoJdW5zaWduZWQg aW50IGg7CgoJc3Bpbl9sb2NrX2JoKCZ2eGxhbi0+aGFzaF9sb2NrKTsKCWZvciAoaCA9IDA7IGgg PCBGREJfSEFTSF9TSVpFOyArK2gpIHsKCQlzdHJ1Y3QgaGxpc3Rfbm9kZSAqcCwgKm47CgkJaGxp c3RfZm9yX2VhY2hfc2FmZShwLCBuLCAmdnhsYW4tPmZkYl9oZWFkW2hdKSB7CiAgICAzODIxOgk2 NSA0OCAzMyAwYyAyNSAyOCAwMCAJeG9yICAgICVnczoweDI4LCVyY3gKICAgIDM4Mjg6CTAwIDAw IAogICAgMzgyYToJOGIgNDUgYmMgICAgICAgICAgICAgCW1vdiAgICAtMHg0NCglcmJwKSwlZWF4 CnN0YXRpYyB2b2lkIHZ4bGFuX2ZsdXNoKHN0cnVjdCB2eGxhbl9kZXYgKnZ4bGFuKQp7Cgl1bnNp Z25lZCBpbnQgaDsKCglzcGluX2xvY2tfYmgoJnZ4bGFuLT5oYXNoX2xvY2spOwoJZm9yIChoID0g MDsgaCA8IEZEQl9IQVNIX1NJWkU7ICsraCkgewogICAgMzgyZDoJMGYgODUgZjAgMDEgMDAgMDAg ICAgCWpuZSAgICAzYTIzIDx2eGxhbl9zdG9wKzB4MzAzPgoJcmF3X3NwaW5fdW5sb2NrKCZsb2Nr LT5ybG9jayk7Cn0KCnN0YXRpYyBfX2Fsd2F5c19pbmxpbmUgdm9pZCBzcGluX3VubG9ja19iaChz cGlubG9ja190ICpsb2NrKQp7CglyYXdfc3Bpbl91bmxvY2tfYmgoJmxvY2stPnJsb2NrKTsKICAg IDM4MzM6CTQ4IDgzIGM0IDI4ICAgICAgICAgIAlhZGQgICAgJDB4MjgsJXJzcAogICAgMzgzNzoJ NWIgICAgICAgICAgICAgICAgICAgCXBvcCAgICAlcmJ4CiAgICAzODM4Ogk0MSA1YyAgICAgICAg ICAgICAgICAJcG9wICAgICVyMTIKICAgIDM4M2E6CTQxIDVkICAgICAgICAgICAgICAgIAlwb3Ag ICAgJXIxMwogICAgMzgzYzoJNDEgNWUgICAgICAgICAgICAgICAgCXBvcCAgICAlcjE0CiAgICAz ODNlOgk0MSA1ZiAgICAgICAgICAgICAgICAJcG9wICAgICVyMTUKICAgIDM4NDA6CTVkICAgICAg ICAgICAgICAgICAgIAlwb3AgICAgJXJicAogICAgMzg0MToJYzMgICAgICAgICAgICAgICAgICAg CXJldHEgICAKICAgIDM4NDI6CTBmIGI2IDg3IDg4IDA4IDAwIDAwIAltb3Z6YmwgMHg4ODgoJXJk aSksJWVheAoJCXJldCA9IHZ4bGFuX2lnbXBfbGVhdmUodnhsYW4pOwoKCWRlbF90aW1lcl9zeW5j KCZ2eGxhbi0+YWdlX3RpbWVyKTsKCgl2eGxhbl9mbHVzaCh2eGxhbik7Cgl2eGxhbl9zb2NrX3Jl bGVhc2UodnhsYW4pOwogICAgMzg0OToJM2QgZmYgMDAgMDAgMDAgICAgICAgCWNtcCAgICAkMHhm ZiwlZWF4CgoJcmV0dXJuIHJldDsKfQogICAgMzg0ZToJMGYgODQgOTIgMDEgMDAgMDAgICAgCWpl ICAgICAzOWU2IDx2eGxhbl9zdG9wKzB4MmM2PgogICAgMzg1NDoJYzcgNDUgYmMgMDAgMDAgMDAg MDAgCW1vdmwgICAkMHgwLC0weDQ0KCVyYnApCiAgICAzODViOgllOSAzZCBmZiBmZiBmZiAgICAg ICAJam1wcSAgIDM3OWQgPHZ4bGFuX3N0b3ArMHg3ZD4KICAgIDM4NjA6CTY2IDgzIGZlIDAyICAg ICAgICAgIAljbXAgICAgJDB4Miwlc2kKICAgIDM4NjQ6CTBmIDg0IDEyIDAxIDAwIDAwICAgIAlq ZSAgICAgMzk3YyA8dnhsYW5fc3RvcCsweDI1Yz4KICAgIDM4NmE6CTQ4IDhiIDExICAgICAgICAg ICAgIAltb3YgICAgKCVyY3gpLCVyZHgKICAgIDM4NmQ6CTQ4IDM5IGQxICAgICAgICAgICAgIAlj bXAgICAgJXJkeCwlcmN4CiAgICAzODcwOgk0OCA4ZCA0MiBmMCAgICAgICAgICAJbGVhICAgIC0w eDEwKCVyZHgpLCVyYXgKewoJc3RydWN0IHZ4bGFuX2RldiAqdnhsYW4gPSBuZXRkZXZfcHJpdihk ZXYpOwoJc3RydWN0IHZ4bGFuX25ldCAqdm4gPSBuZXRfZ2VuZXJpYyh2eGxhbi0+bmV0LCB2eGxh bl9uZXRfaWQpOwoJaW50IHJldCA9IDA7CgoJaWYgKHZ4bGFuX2FkZHJfbXVsdGljYXN0KCZ2eGxh bi0+ZGVmYXVsdF9kc3QucmVtb3RlX2lwKSAmJgogICAgMzg3NDoJMGYgODQgOTYgMDEgMDAgMDAg ICAgCWplICAgICAzYTEwIDx2eGxhbl9zdG9wKzB4MmYwPgogICAgMzg3YToJNDEgOGIgOWUgYTQg MDggMDAgMDAgCW1vdiAgICAweDhhNCglcjE0KSwlZWJ4CiAgICAzODgxOgllYiAyMSAgICAgICAg ICAgICAgICAJam1wICAgIDM4YTQgPHZ4bGFuX3N0b3ArMHgxODQ+CiAgICAzODgzOgk2NiA4MyBm ZSAwYSAgICAgICAgICAJY21wICAgICQweGEsJXNpCi8qIENsZWFudXAgdGltZXIgYW5kIGZvcndh cmRpbmcgdGFibGUgb24gc2h1dGRvd24gKi8Kc3RhdGljIGludCB2eGxhbl9zdG9wKHN0cnVjdCBu ZXRfZGV2aWNlICpkZXYpCnsKCXN0cnVjdCB2eGxhbl9kZXYgKnZ4bGFuID0gbmV0ZGV2X3ByaXYo ZGV2KTsKCXN0cnVjdCB2eGxhbl9uZXQgKnZuID0gbmV0X2dlbmVyaWModnhsYW4tPm5ldCwgdnhs YW5fbmV0X2lkKTsKCWludCByZXQgPSAwOwogICAgMzg4NzoJMGYgODQgOTIgMDAgMDAgMDAgICAg CWplICAgICAzOTFmIDx2eGxhbl9zdG9wKzB4MWZmPgogICAgMzg4ZDoJNjYgM2IgNzAgNDAgICAg ICAgICAgCWNtcCAgICAweDQwKCVyYXgpLCVzaQoJdW5zaWduZWQgc2hvcnQgZmFtaWx5ID0gZGV2 LT5kZWZhdWx0X2RzdC5yZW1vdGVfaXAuc2Euc2FfZmFtaWx5OwoKCS8qIFRoZSB2eGxhbl9zb2Nr IGlzIG9ubHkgdXNlZCBieSBkZXYsIGxlYXZpbmcgZ3JvdXAgaGFzCgkgKiBubyBlZmZlY3Qgb24g b3RoZXIgdnhsYW4gZGV2aWNlcy4KCSAqLwoJaWYgKGZhbWlseSA9PSBBRl9JTkVUICYmIGRldi0+ dm40X3NvY2sgJiYKICAgIDM4OTE6CTBmIDg0IGMyIDAwIDAwIDAwICAgIAlqZSAgICAgMzk1OSA8 dnhsYW5fc3RvcCsweDIzOT4KICAgIDM4OTc6CTQ4IDhiIDUwIDEwICAgICAgICAgIAltb3YgICAg MHgxMCglcmF4KSwlcmR4CglpZiAoZmFtaWx5ID09IEFGX0lORVQ2ICYmIGRldi0+dm42X3NvY2sg JiYKCSAgICBhdG9taWNfcmVhZCgmZGV2LT52bjZfc29jay0+cmVmY250KSA9PSAxKQoJCXJldHVy biBmYWxzZTsKI2VuZGlmCgoJbGlzdF9mb3JfZWFjaF9lbnRyeSh2eGxhbiwgJnZuLT52eGxhbl9s aXN0LCBuZXh0KSB7CiAgICAzODliOgk0OCAzOSBkMSAgICAgICAgICAgICAJY21wICAgICVyZHgs JXJjeAogICAgMzg5ZToJNDggOGQgNDIgZjAgICAgICAgICAgCWxlYSAgICAtMHgxMCglcmR4KSwl cmF4CiAgICAzOGEyOgk3NCAzMiAgICAgICAgICAgICAgICAJamUgICAgIDM4ZDYgPHZ4bGFuX3N0 b3ArMHgxYjY+CiAgICAzOGE0Ogk0OCA4YiA1MCAzMCAgICAgICAgICAJbW92ICAgIDB4MzAoJXJh eCksJXJkeAogICAgMzhhODoJNDggOGIgNTIgNDggICAgICAgICAgCW1vdiAgICAweDQ4KCVyZHgp LCVyZHgKICAgIDM4YWM6CTgzIGUyIDAxICAgICAgICAgICAgIAlhbmQgICAgJDB4MSwlZWR4CiAg ICAzOGFmOgk3NCBlNiAgICAgICAgICAgICAgICAJamUgICAgIDM4OTcgPHZ4bGFuX3N0b3ArMHgx Nzc+CiAgICAzOGIxOgk0OSAzOSBjNCAgICAgICAgICAgICAJY21wICAgICVyYXgsJXIxMgoJCQlj b250aW51ZTsKCgkJaWYgKGZhbWlseSA9PSBBRl9JTkVUICYmIHZ4bGFuLT52bjRfc29jayAhPSBk ZXYtPnZuNF9zb2NrKQoJCQljb250aW51ZTsKI2lmIElTX0VOQUJMRUQoQ09ORklHX0lQVjYpCgkJ aWYgKGZhbWlseSA9PSBBRl9JTkVUNiAmJiB2eGxhbi0+dm42X3NvY2sgIT0gZGV2LT52bjZfc29j aykKICAgIDM4YjQ6CTc0IGUxICAgICAgICAgICAgICAgIAlqZSAgICAgMzg5NyA8dnhsYW5fc3Rv cCsweDE3Nz4KICAgIDM4YjY6CTY2IDgzIGZlIDAyICAgICAgICAgIAljbXAgICAgJDB4Miwlc2kK ICAgIDM4YmE6CTc1IGM3ICAgICAgICAgICAgICAgIAlqbmUgICAgMzg4MyA8dnhsYW5fc3RvcCsw eDE2Mz4KICAgIDM4YmM6CTQ5IDhiIGJlIDYwIDA4IDAwIDAwIAltb3YgICAgMHg4NjAoJXIxNCks JXJkaQoKI2lmIElTX0VOQUJMRUQoQ09ORklHX0lQVjYpCnN0YXRpYyBpbmxpbmUKYm9vbCB2eGxh bl9hZGRyX2VxdWFsKGNvbnN0IHVuaW9uIHZ4bGFuX2FkZHIgKmEsIGNvbnN0IHVuaW9uIHZ4bGFu X2FkZHIgKmIpCnsKCWlmIChhLT5zYS5zYV9mYW1pbHkgIT0gYi0+c2Euc2FfZmFtaWx5KQogICAg MzhjMzoJNDggMzkgNzggMjAgICAgICAgICAgCWNtcCAgICAlcmRpLDB4MjAoJXJheCkKCWlmIChm YW1pbHkgPT0gQUZfSU5FVDYgJiYgZGV2LT52bjZfc29jayAmJgoJICAgIGF0b21pY19yZWFkKCZk ZXYtPnZuNl9zb2NrLT5yZWZjbnQpID09IDEpCgkJcmV0dXJuIGZhbHNlOwojZW5kaWYKCglsaXN0 X2Zvcl9lYWNoX2VudHJ5KHZ4bGFuLCAmdm4tPnZ4bGFuX2xpc3QsIG5leHQpIHsKICAgIDM4Yzc6 CTc0IGM0ICAgICAgICAgICAgICAgIAlqZSAgICAgMzg4ZCA8dnhsYW5fc3RvcCsweDE2ZD4KICAg IDM4Yzk6CTQ4IDhiIDUwIDEwICAgICAgICAgIAltb3YgICAgMHgxMCglcmF4KSwlcmR4CiAgICAz OGNkOgk0OCAzOSBkMSAgICAgICAgICAgICAJY21wICAgICVyZHgsJXJjeAogICAgMzhkMDoJNDgg OGQgNDIgZjAgICAgICAgICAgCWxlYSAgICAtMHgxMCglcmR4KSwlcmF4CgkJaWYgKCFuZXRpZl9y dW5uaW5nKHZ4bGFuLT5kZXYpIHx8IHZ4bGFuID09IGRldikKICAgIDM4ZDQ6CTc1IGNlICAgICAg ICAgICAgICAgIAlqbmUgICAgMzhhNCA8dnhsYW5fc3RvcCsweDE4ND4KICAgIDM4ZDY6CTY2IDgz IGZlIDAyICAgICAgICAgIAljbXAgICAgJDB4Miwlc2kKICAgIDM4ZGE6CTBmIDg0IDQ4IDAxIDAw IDAwICAgIAlqZSAgICAgM2EyOCA8dnhsYW5fc3RvcCsweDMwOD4KICAgIDM4ZTA6CTQ5IDhiIDg2 IDY4IDA4IDAwIDAwIAltb3YgICAgMHg4NjgoJXIxNCksJXJheAoJCQljb250aW51ZTsKCgkJaWYg KGZhbWlseSA9PSBBRl9JTkVUICYmIHZ4bGFuLT52bjRfc29jayAhPSBkZXYtPnZuNF9zb2NrKQog ICAgMzhlNzoJNDggOGIgNDAgMTAgICAgICAgICAgCW1vdiAgICAweDEwKCVyYXgpLCVyYXgKICAg IDM4ZWI6CTMxIGY2ICAgICAgICAgICAgICAgIAl4b3IgICAgJWVzaSwlZXNpCiAgICAzOGVkOgk0 YyA4YiA2OCAyMCAgICAgICAgICAJbW92ICAgIDB4MjAoJXJheCksJXIxMwogICAgMzhmMToJNGMg ODkgZWYgICAgICAgICAgICAgCW1vdiAgICAlcjEzLCVyZGkKICAgIDM4ZjQ6CWU4IDAwIDAwIDAw IDAwICAgICAgIAljYWxscSAgMzhmOSA8dnhsYW5fc3RvcCsweDFkOT4KCWlmIChmYW1pbHkgPT0g QUZfSU5FVDYgJiYgZGV2LT52bjZfc29jayAmJgoJICAgIGF0b21pY19yZWFkKCZkZXYtPnZuNl9z b2NrLT5yZWZjbnQpID09IDEpCgkJcmV0dXJuIGZhbHNlOwojZW5kaWYKCglsaXN0X2Zvcl9lYWNo X2VudHJ5KHZ4bGFuLCAmdm4tPnZ4bGFuX2xpc3QsIG5leHQpIHsKICAgIDM4Zjk6CTQ4IDhiIDA1 IDAwIDAwIDAwIDAwIAltb3YgICAgMHgwKCVyaXApLCVyYXggICAgICAgICMgMzkwMCA8dnhsYW5f c3RvcCsweDFlMD4KICAgIDM5MDA6CTRjIDg5IGVmICAgICAgICAgICAgIAltb3YgICAgJXIxMywl cmRpCiAgICAzOTAzOgk0OSA4ZCA5NiA4OCAwOCAwMCAwMCAJbGVhICAgIDB4ODg4KCVyMTQpLCVy ZHgKCXN0cnVjdCBzb2NrICpzazsKCXVuaW9uIHZ4bGFuX2FkZHIgKmlwID0gJnZ4bGFuLT5kZWZh dWx0X2RzdC5yZW1vdGVfaXA7CglpbnQgaWZpbmRleCA9IHZ4bGFuLT5kZWZhdWx0X2RzdC5yZW1v dGVfaWZpbmRleDsKCWludCByZXQgPSAtRUlOVkFMOwoKCWlmIChpcC0+c2Euc2FfZmFtaWx5ID09 IEFGX0lORVQpIHsKICAgIDM5MGE6CTg5IGRlICAgICAgICAgICAgICAgIAltb3YgICAgJWVieCwl ZXNpCiAgICAzOTBjOglmZiA1MCAwOCAgICAgICAgICAgICAJY2FsbHEgICoweDgoJXJheCkKICAg IDM5MGY6CTRjIDg5IGVmICAgICAgICAgICAgIAltb3YgICAgJXIxMywlcmRpCiAgICAzOTEyOgk4 OSA0NSBiYyAgICAgICAgICAgICAJbW92ICAgICVlYXgsLTB4NDQoJXJicCkKICAgIDM5MTU6CWU4 IDAwIDAwIDAwIDAwICAgICAgIAljYWxscSAgMzkxYSA8dnhsYW5fc3RvcCsweDFmYT4KCQlsb2Nr X3NvY2soc2spOwoJCXJldCA9IGlwX21jX2xlYXZlX2dyb3VwKHNrLCAmbXJlcSk7CgkJcmVsZWFz ZV9zb2NrKHNrKTsKI2lmIElTX0VOQUJMRUQoQ09ORklHX0lQVjYpCgl9IGVsc2UgewoJCXNrID0g dnhsYW4tPnZuNl9zb2NrLT5zb2NrLT5zazsKICAgIDM5MWE6CWU5IDdlIGZlIGZmIGZmICAgICAg IAlqbXBxICAgMzc5ZCA8dnhsYW5fc3RvcCsweDdkPgogICAgMzkxZjoJNDkgOGIgYmUgNjggMDgg MDAgMDAgCW1vdiAgICAweDg2OCglcjE0KSwlcmRpCiAgICAzOTI2Ogk0OCAzOSA3OCAyOCAgICAg ICAgICAJY21wICAgICVyZGksMHgyOCglcmF4KQoJCWxvY2tfc29jayhzayk7CgkJcmV0ID0gaXB2 Nl9zdHViLT5pcHY2X3NvY2tfbWNfZHJvcChzaywgaWZpbmRleCwKICAgIDM5MmE6CTBmIDg1IDY3 IGZmIGZmIGZmICAgIAlqbmUgICAgMzg5NyA8dnhsYW5fc3RvcCsweDE3Nz4KICAgIDM5MzA6CTY2 IDgzIDc4IDQwIDBhICAgICAgIAljbXB3ICAgJDB4YSwweDQwKCVyYXgpCgkJCQkJCSAgICZpcC0+ c2luNi5zaW42X2FkZHIpOwogICAgMzkzNToJMGYgODUgNWMgZmYgZmYgZmYgICAgCWpuZSAgICAz ODk3IDx2eGxhbl9zdG9wKzB4MTc3PgoJCXJlbGVhc2Vfc29jayhzayk7CiNpZiBJU19FTkFCTEVE KENPTkZJR19JUFY2KQoJfSBlbHNlIHsKCQlzayA9IHZ4bGFuLT52bjZfc29jay0+c29jay0+c2s7 CgkJbG9ja19zb2NrKHNrKTsKCQlyZXQgPSBpcHY2X3N0dWItPmlwdjZfc29ja19tY19kcm9wKHNr LCBpZmluZGV4LAogICAgMzkzYjoJNDggOGIgNzggNDggICAgICAgICAgCW1vdiAgICAweDQ4KCVy YXgpLCVyZGkKCQkJCQkJICAgJmlwLT5zaW42LnNpbjZfYWRkcik7CgkJcmVsZWFzZV9zb2NrKHNr KTsKICAgIDM5M2Y6CTQ4IDhiIDUwIDUwICAgICAgICAgIAltb3YgICAgMHg1MCglcmF4KSwlcmR4 CgkJcmVsZWFzZV9zb2NrKHNrKTsKI2lmIElTX0VOQUJMRUQoQ09ORklHX0lQVjYpCgl9IGVsc2Ug ewoJCXNrID0gdnhsYW4tPnZuNl9zb2NrLT5zb2NrLT5zazsKCQlsb2NrX3NvY2soc2spOwoJCXJl dCA9IGlwdjZfc3R1Yi0+aXB2Nl9zb2NrX21jX2Ryb3Aoc2ssIGlmaW5kZXgsCiAgICAzOTQzOgk0 OSAzMyBiZSA4OCAwOCAwMCAwMCAJeG9yICAgIDB4ODg4KCVyMTQpLCVyZGkKCQkJCQkJICAgJmlw LT5zaW42LnNpbjZfYWRkcik7CgkJcmVsZWFzZV9zb2NrKHNrKTsKICAgIDM5NGE6CTQ5IDMzIDk2 IDkwIDA4IDAwIDAwIAl4b3IgICAgMHg4OTAoJXIxNCksJXJkeAoJCQljb250aW51ZTsKCgkJaWYg KGZhbWlseSA9PSBBRl9JTkVUICYmIHZ4bGFuLT52bjRfc29jayAhPSBkZXYtPnZuNF9zb2NrKQoJ CQljb250aW51ZTsKI2lmIElTX0VOQUJMRUQoQ09ORklHX0lQVjYpCgkJaWYgKGZhbWlseSA9PSBB Rl9JTkVUNiAmJiB2eGxhbi0+dm42X3NvY2sgIT0gZGV2LT52bjZfc29jaykKICAgIDM5NTE6CTQ4 IDA5IGQ3ICAgICAgICAgICAgIAlvciAgICAgJXJkeCwlcmRpCiAgICAzOTU0OgkwZiA5NCBjMiAg ICAgICAgICAgICAJc2V0ZSAgICVkbAogICAgMzk1NzoJZWIgMGQgICAgICAgICAgICAgICAgCWpt cCAgICAzOTY2IDx2eGxhbl9zdG9wKzB4MjQ2PgogICAgMzk1OToJNDEgOGIgYmUgODQgMDggMDAg MDAgCW1vdiAgICAweDg4NCglcjE0KSwlZWRpCgojaWYgSVNfRU5BQkxFRChDT05GSUdfSVBWNikK c3RhdGljIGlubGluZQpib29sIHZ4bGFuX2FkZHJfZXF1YWwoY29uc3QgdW5pb24gdnhsYW5fYWRk ciAqYSwgY29uc3QgdW5pb24gdnhsYW5fYWRkciAqYikKewoJaWYgKGEtPnNhLnNhX2ZhbWlseSAh PSBiLT5zYS5zYV9mYW1pbHkpCiAgICAzOTYwOgkzOSA3OCA0NCAgICAgICAgICAgICAJY21wICAg ICVlZGksMHg0NCglcmF4KQogICAgMzk2MzoJMGYgOTQgYzIgICAgICAgICAgICAgCXNldGUgICAl ZGwKICAgIDM5NjY6CTg0IGQyICAgICAgICAgICAgICAgIAl0ZXN0ICAgJWRsLCVkbAogICAgMzk2 ODoJMGYgODQgMjkgZmYgZmYgZmYgICAgCWplICAgICAzODk3IDx2eGxhbl9zdG9wKzB4MTc3Pgog ICAgMzk2ZToJMzkgNTggNjQgICAgICAgICAgICAgCWNtcCAgICAlZWJ4LDB4NjQoJXJheCkKICAg IDM5NzE6CTBmIDg1IDIwIGZmIGZmIGZmICAgIAlqbmUgICAgMzg5NyA8dnhsYW5fc3RvcCsweDE3 Nz4KICAgIDM5Nzc6CWU5IGQ4IGZlIGZmIGZmICAgICAgIAlqbXBxICAgMzg1NCA8dnhsYW5fc3Rv cCsweDEzND4KICAgIDM5N2M6CTQ5IDhiIDk2IDYwIDA4IDAwIDAwIAltb3YgICAgMHg4NjAoJXIx NCksJXJkeAogICAgMzk4MzoJNDggODUgZDIgICAgICAgICAgICAgCXRlc3QgICAlcmR4LCVyZHgK ICAgIDM5ODY6CTc0IDBiICAgICAgICAgICAgICAgIAlqZSAgICAgMzk5MyA8dnhsYW5fc3RvcCsw eDI3Mz4KICAgIDM5ODg6CThiIDgyIDE4IDIwIDAwIDAwICAgIAltb3YgICAgMHgyMDE4KCVyZHgp LCVlYXgKCQlyZXR1cm4gZmFsc2U7CglpZiAoYS0+c2Euc2FfZmFtaWx5ID09IEFGX0lORVQ2KQoJ CXJldHVybiBpcHY2X2FkZHJfZXF1YWwoJmEtPnNpbjYuc2luNl9hZGRyLCAmYi0+c2luNi5zaW42 X2FkZHIpOwoJZWxzZQoJCXJldHVybiBhLT5zaW4uc2luX2FkZHIuc19hZGRyID09IGItPnNpbi5z aW5fYWRkci5zX2FkZHI7CiAgICAzOThlOgk4MyBmOCAwMSAgICAgICAgICAgICAJY21wICAgICQw eDEsJWVheAogICAgMzk5MToJNzQgMTAgICAgICAgICAgICAgICAgCWplICAgICAzOWEzIDx2eGxh bl9zdG9wKzB4MjgzPgogICAgMzk5MzoJNGMgOGIgMDEgICAgICAgICAgICAgCW1vdiAgICAoJXJj eCksJXI4CiNpZiBJU19FTkFCTEVEKENPTkZJR19JUFY2KQoJCWlmIChmYW1pbHkgPT0gQUZfSU5F VDYgJiYgdnhsYW4tPnZuNl9zb2NrICE9IGRldi0+dm42X3NvY2spCgkJCWNvbnRpbnVlOwojZW5k aWYKCgkJaWYgKCF2eGxhbl9hZGRyX2VxdWFsKCZ2eGxhbi0+ZGVmYXVsdF9kc3QucmVtb3RlX2lw LAogICAgMzk5NjoJNGMgMzkgYzEgICAgICAgICAgICAgCWNtcCAgICAlcjgsJXJjeAogICAgMzk5 OToJNDkgOGQgNDAgZjAgICAgICAgICAgCWxlYSAgICAtMHgxMCglcjgpLCVyYXgKICAgIDM5OWQ6 CTBmIDg1IGQ3IGZlIGZmIGZmICAgIAlqbmUgICAgMzg3YSA8dnhsYW5fc3RvcCsweDE1YT4KCQkJ CSAgICAgICZkZXYtPmRlZmF1bHRfZHN0LnJlbW90ZV9pcCkpCgkJCWNvbnRpbnVlOwoKCQlpZiAo dnhsYW4tPmRlZmF1bHRfZHN0LnJlbW90ZV9pZmluZGV4ICE9CiAgICAzOWEzOgk0MSA4YiA5ZSBh NCAwOCAwMCAwMCAJbW92ICAgIDB4OGE0KCVyMTQpLCVlYngKICAgIDM5YWE6CTQ4IDhiIDQyIDEw ICAgICAgICAgIAltb3YgICAgMHgxMCglcmR4KSwlcmF4Cgl1bnNpZ25lZCBzaG9ydCBmYW1pbHkg PSBkZXYtPmRlZmF1bHRfZHN0LnJlbW90ZV9pcC5zYS5zYV9mYW1pbHk7CgoJLyogVGhlIHZ4bGFu X3NvY2sgaXMgb25seSB1c2VkIGJ5IGRldiwgbGVhdmluZyBncm91cCBoYXMKCSAqIG5vIGVmZmVj dCBvbiBvdGhlciB2eGxhbiBkZXZpY2VzLgoJICovCglpZiAoZmFtaWx5ID09IEFGX0lORVQgJiYg ZGV2LT52bjRfc29jayAmJgogICAgMzlhZToJODkgNWQgY2MgICAgICAgICAgICAgCW1vdiAgICAl ZWJ4LC0weDM0KCVyYnApCiAgICAzOWIxOgkzMSBmNiAgICAgICAgICAgICAgICAJeG9yICAgICVl c2ksJWVzaQogICAgMzliMzoJNDggYzcgNDUgYzQgMDAgMDAgMDAgCW1vdnEgICAkMHgwLC0weDNj KCVyYnApCiAgICAzOWJhOgkwMCAKICAgIDM5YmI6CTg5IDdkIGM0ICAgICAgICAgICAgIAltb3Yg ICAgJWVkaSwtMHgzYyglcmJwKQogICAgMzliZToJNDggOGIgNTggMjAgICAgICAgICAgCW1vdiAg ICAweDIwKCVyYXgpLCVyYngKICAgIDM5YzI6CTQ4IDg5IGRmICAgICAgICAgICAgIAltb3YgICAg JXJieCwlcmRpCglpZiAoZmFtaWx5ID09IEFGX0lORVQ2ICYmIGRldi0+dm42X3NvY2sgJiYKCSAg ICBhdG9taWNfcmVhZCgmZGV2LT52bjZfc29jay0+cmVmY250KSA9PSAxKQoJCXJldHVybiBmYWxz ZTsKI2VuZGlmCgoJbGlzdF9mb3JfZWFjaF9lbnRyeSh2eGxhbiwgJnZuLT52eGxhbl9saXN0LCBu ZXh0KSB7CiAgICAzOWM1OgllOCAwMCAwMCAwMCAwMCAgICAgICAJY2FsbHEgIDM5Y2EgPHZ4bGFu X3N0b3ArMHgyYWE+CiAgICAzOWNhOgk0OCA4ZCA3NSBjNCAgICAgICAgICAJbGVhICAgIC0weDNj KCVyYnApLCVyc2kKICAgIDM5Y2U6CTQ4IDg5IGRmICAgICAgICAgICAgIAltb3YgICAgJXJieCwl cmRpCiAgICAzOWQxOgllOCAwMCAwMCAwMCAwMCAgICAgICAJY2FsbHEgIDM5ZDYgPHZ4bGFuX3N0 b3ArMHgyYjY+Ci8qIEludmVyc2Ugb2YgdnhsYW5faWdtcF9qb2luIHdoZW4gbGFzdCBWTkkgaXMg YnJvdWdodCBkb3duICovCnN0YXRpYyBpbnQgdnhsYW5faWdtcF9sZWF2ZShzdHJ1Y3QgdnhsYW5f ZGV2ICp2eGxhbikKewoJc3RydWN0IHNvY2sgKnNrOwoJdW5pb24gdnhsYW5fYWRkciAqaXAgPSAm dnhsYW4tPmRlZmF1bHRfZHN0LnJlbW90ZV9pcDsKCWludCBpZmluZGV4ID0gdnhsYW4tPmRlZmF1 bHRfZHN0LnJlbW90ZV9pZmluZGV4OwogICAgMzlkNjoJNDggODkgZGYgICAgICAgICAgICAgCW1v diAgICAlcmJ4LCVyZGkKICAgIDM5ZDk6CTg5IDQ1IGJjICAgICAgICAgICAgIAltb3YgICAgJWVh eCwtMHg0NCglcmJwKQoJCXN0cnVjdCBpcF9tcmVxbiBtcmVxID0gewoJCQkuaW1yX211bHRpYWRk ci5zX2FkZHIJPSBpcC0+c2luLnNpbl9hZGRyLnNfYWRkciwKCQkJLmltcl9pZmluZGV4CQk9IGlm aW5kZXgsCgkJfTsKCgkJc2sgPSB2eGxhbi0+dm40X3NvY2stPnNvY2stPnNrOwogICAgMzlkYzoJ ZTggMDAgMDAgMDAgMDAgICAgICAgCWNhbGxxICAzOWUxIDx2eGxhbl9zdG9wKzB4MmMxPgogICAg MzllMToJZTkgYjcgZmQgZmYgZmYgICAgICAgCWptcHEgICAzNzlkIDx2eGxhbl9zdG9wKzB4N2Q+ Cgl1bmlvbiB2eGxhbl9hZGRyICppcCA9ICZ2eGxhbi0+ZGVmYXVsdF9kc3QucmVtb3RlX2lwOwoJ aW50IGlmaW5kZXggPSB2eGxhbi0+ZGVmYXVsdF9kc3QucmVtb3RlX2lmaW5kZXg7CglpbnQgcmV0 ID0gLUVJTlZBTDsKCglpZiAoaXAtPnNhLnNhX2ZhbWlseSA9PSBBRl9JTkVUKSB7CgkJc3RydWN0 IGlwX21yZXFuIG1yZXEgPSB7CiAgICAzOWU2Ogk0OCA4YiA4NyA2OCAwOCAwMCAwMCAJbW92ICAg IDB4ODY4KCVyZGkpLCVyYXgKICAgIDM5ZWQ6CTQ4IDg1IGMwICAgICAgICAgICAgIAl0ZXN0ICAg JXJheCwlcmF4CgkJCS5pbXJfbXVsdGlhZGRyLnNfYWRkcgk9IGlwLT5zaW4uc2luX2FkZHIuc19h ZGRyLAoJCQkuaW1yX2lmaW5kZXgJCT0gaWZpbmRleCwKCQl9OwoKCQlzayA9IHZ4bGFuLT52bjRf c29jay0+c29jay0+c2s7CiAgICAzOWYwOgkwZiA4NCA3NCBmZSBmZiBmZiAgICAJamUgICAgIDM4 NmEgPHZ4bGFuX3N0b3ArMHgxNGE+CiAgICAzOWY2Ogk4YiA5MCAxOCAyMCAwMCAwMCAgICAJbW92 ICAgIDB4MjAxOCglcmF4KSwlZWR4CgkJbG9ja19zb2NrKHNrKTsKCQlyZXQgPSBpcF9tY19sZWF2 ZV9ncm91cChzaywgJm1yZXEpOwogICAgMzlmYzoJODMgZmEgMDEgICAgICAgICAgICAgCWNtcCAg ICAkMHgxLCVlZHgKICAgIDM5ZmY6CTBmIDg1IDY1IGZlIGZmIGZmICAgIAlqbmUgICAgMzg2YSA8 dnhsYW5fc3RvcCsweDE0YT4KICAgIDNhMDU6CThiIDlmIGE0IDA4IDAwIDAwICAgIAltb3YgICAg MHg4YTQoJXJkaSksJWVieAogICAgM2EwYjoJZTkgZDcgZmUgZmYgZmYgICAgICAgCWptcHEgICAz OGU3IDx2eGxhbl9zdG9wKzB4MWM3PgoJCXJlbGVhc2Vfc29jayhzayk7CiAgICAzYTEwOgk0MSA4 YiA5ZSBhNCAwOCAwMCAwMCAJbW92ICAgIDB4OGE0KCVyMTQpLCVlYngKCSAqLwoJaWYgKGZhbWls eSA9PSBBRl9JTkVUICYmIGRldi0+dm40X3NvY2sgJiYKCSAgICBhdG9taWNfcmVhZCgmZGV2LT52 bjRfc29jay0+cmVmY250KSA9PSAxKQoJCXJldHVybiBmYWxzZTsKI2lmIElTX0VOQUJMRUQoQ09O RklHX0lQVjYpCglpZiAoZmFtaWx5ID09IEFGX0lORVQ2ICYmIGRldi0+dm42X3NvY2sgJiYKICAg IDNhMTc6CTQ5IDhiIDg2IDY4IDA4IDAwIDAwIAltb3YgICAgMHg4NjgoJXIxNCksJXJheAogICAg M2ExZToJZTkgYzQgZmUgZmYgZmYgICAgICAgCWptcHEgICAzOGU3IDx2eGxhbl9zdG9wKzB4MWM3 PgogICAgM2EyMzoJZTggMDAgMDAgMDAgMDAgICAgICAgCWNhbGxxICAzYTI4IDx2eGxhbl9zdG9w KzB4MzA4PgogICAgM2EyODoJNDEgOGIgYmUgODQgMDggMDAgMDAgCW1vdiAgICAweDg4NCglcjE0 KSwlZWRpCiAgICAzYTJmOgk0OSA4YiA5NiA2MCAwOCAwMCAwMCAJbW92ICAgIDB4ODYwKCVyMTQp LCVyZHgKLyogSW52ZXJzZSBvZiB2eGxhbl9pZ21wX2pvaW4gd2hlbiBsYXN0IFZOSSBpcyBicm91 Z2h0IGRvd24gKi8Kc3RhdGljIGludCB2eGxhbl9pZ21wX2xlYXZlKHN0cnVjdCB2eGxhbl9kZXYg KnZ4bGFuKQp7CglzdHJ1Y3Qgc29jayAqc2s7Cgl1bmlvbiB2eGxhbl9hZGRyICppcCA9ICZ2eGxh bi0+ZGVmYXVsdF9kc3QucmVtb3RlX2lwOwoJaW50IGlmaW5kZXggPSB2eGxhbi0+ZGVmYXVsdF9k c3QucmVtb3RlX2lmaW5kZXg7CiAgICAzYTM2OgllOSA2ZiBmZiBmZiBmZiAgICAgICAJam1wcSAg IDM5YWEgPHZ4bGFuX3N0b3ArMHgyOGE+CiAgICAzYTNiOgkwZiAxZiA0NCAwMCAwMCAgICAgICAJ bm9wbCAgIDB4MCglcmF4LCVyYXgsMSkKCjAwMDAwMDAwMDAwMDNhNDAgPHZ4bGFuX2VuY2FwX2J5 cGFzcy5pc3JhLjQ3PjoKICAgIDNhNDA6CWU4IDAwIDAwIDAwIDAwICAgICAgIAljYWxscSAgM2E0 NSA8dnhsYW5fZW5jYXBfYnlwYXNzLmlzcmEuNDcrMHg1PgogICAgM2E0NToJNTUgICAgICAgICAg ICAgICAgICAgCXB1c2ggICAlcmJwCiAgICAzYTQ2Ogk0OSA4OSBkMCAgICAgICAgICAgICAJbW92 ICAgICVyZHgsJXI4CiAgICAzYTQ5Ogk0OCA4OSBlNSAgICAgICAgICAgICAJbW92ICAgICVyc3As JXJicAogICAgM2E0YzoJNDEgNTcgICAgICAgICAgICAgICAgCXB1c2ggICAlcjE1CiAgICAzYTRl Ogk0MSA1NiAgICAgICAgICAgICAgICAJcHVzaCAgICVyMTQKICAgIDNhNTA6CTQxIDU1ICAgICAg ICAgICAgICAgIAlwdXNoICAgJXIxMwogICAgM2E1MjoJNDEgNTQgICAgICAgICAgICAgICAgCXB1 c2ggICAlcjEyCgoJdnhsYW5fZmx1c2godnhsYW4pOwoJdnhsYW5fc29ja19yZWxlYXNlKHZ4bGFu KTsKCglyZXR1cm4gcmV0Owp9CiAgICAzYTU0Ogk1MyAgICAgICAgICAgICAgICAgICAJcHVzaCAg ICVyYngKICAgIDNhNTU6CTQ4IDgzIGU0IGYwICAgICAgICAgIAlhbmQgICAgJDB4ZmZmZmZmZmZm ZmZmZmZmMCwlcnNwCiAgICAzYTU5Ogk0OCA4MyBlYyAzMCAgICAgICAgICAJc3ViICAgICQweDMw LCVyc3AKICAgIDNhNWQ6CTQ4IDhiIDVmIDIwICAgICAgICAgIAltb3YgICAgMHgyMCglcmRpKSwl cmJ4CiAgICAzYTYxOgk0YyA2MyBiNyA4MCAwMCAwMCAwMCAJbW92c2xxIDB4ODAoJXJkaSksJXIx NAogICAgM2E2ODoJNjUgNDggOGIgMDQgMjUgMjggMDAgCW1vdiAgICAlZ3M6MHgyOCwlcmF4CiAg ICAzYTZmOgkwMCAwMCAKCXJldHVybiBuZHN0Owp9CiNlbmRpZgoKLyogQnlwYXNzIGVuY2Fwc3Vs YXRpb24gaWYgdGhlIGRlc3RpbmF0aW9uIGlzIGxvY2FsICovCnN0YXRpYyB2b2lkIHZ4bGFuX2Vu Y2FwX2J5cGFzcyhzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgdnhsYW5fZGV2ICpzcmNfdnhs YW4sCiAgICAzYTcxOgk0OCA4OSA0NCAyNCAyOCAgICAgICAJbW92ICAgICVyYXgsMHgyOCglcnNw KQogICAgM2E3NjoJMzEgYzAgICAgICAgICAgICAgICAgCXhvciAgICAlZWF4LCVlYXgKICAgIDNh Nzg6CTRjIDhiIGE2IDg4IDA0IDAwIDAwIAltb3YgICAgMHg0ODgoJXJzaSksJXIxMgogICAgM2E3 ZjoJNjUgNGMgMDMgMjUgMDAgMDAgMDAgCWFkZCAgICAlZ3M6MHgwKCVyaXApLCVyMTIgICAgICAg ICMgM2E4NyA8dnhsYW5fZW5jYXBfYnlwYXNzLmlzcmEuNDcrMHg0Nz4KICAgIDNhODY6CTAwIAog ICAgM2E4NzoJNDggOGIgNDIgMzAgICAgICAgICAgCW1vdiAgICAweDMwKCVyZHgpLCVyYXgKICAg IDNhOGI6CTRjIDhiIGE4IDg4IDA0IDAwIDAwIAltb3YgICAgMHg0ODgoJXJheCksJXIxMwp7Cglz dHJ1Y3QgcGNwdV9zd19uZXRzdGF0cyAqdHhfc3RhdHMsICpyeF9zdGF0czsKCXVuaW9uIHZ4bGFu X2FkZHIgbG9vcGJhY2s7Cgl1bmlvbiB2eGxhbl9hZGRyICpyZW1vdGVfaXAgPSAmZHN0X3Z4bGFu LT5kZWZhdWx0X2RzdC5yZW1vdGVfaXA7CglzdHJ1Y3QgbmV0X2RldmljZSAqZGV2ID0gc2tiLT5k ZXY7CglpbnQgbGVuID0gc2tiLT5sZW47CiAgICAzYTkyOgk2NSA0YyAwMyAyZCAwMCAwMCAwMCAJ YWRkICAgICVnczoweDAoJXJpcCksJXIxMyAgICAgICAgIyAzYTlhIDx2eGxhbl9lbmNhcF9ieXBh c3MuaXNyYS40NysweDVhPgogICAgM2E5OToJMDAgCglyZXR1cm4gbmRzdDsKfQojZW5kaWYKCi8q IEJ5cGFzcyBlbmNhcHN1bGF0aW9uIGlmIHRoZSBkZXN0aW5hdGlvbiBpcyBsb2NhbCAqLwpzdGF0 aWMgdm9pZCB2eGxhbl9lbmNhcF9ieXBhc3Moc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IHZ4 bGFuX2RldiAqc3JjX3Z4bGFuLAogICAgM2E5YToJMGYgYjcgODcgYzQgMDAgMDAgMDAgCW1vdnp3 bCAweGM0KCVyZGkpLCVlYXgKICAgIDNhYTE6CTQ4IDhiIGI3IGQwIDAwIDAwIDAwIAltb3YgICAg MHhkMCglcmRpKSwlcnNpCgl1bmlvbiB2eGxhbl9hZGRyIGxvb3BiYWNrOwoJdW5pb24gdnhsYW5f YWRkciAqcmVtb3RlX2lwID0gJmRzdF92eGxhbi0+ZGVmYXVsdF9kc3QucmVtb3RlX2lwOwoJc3Ry dWN0IG5ldF9kZXZpY2UgKmRldiA9IHNrYi0+ZGV2OwoJaW50IGxlbiA9IHNrYi0+bGVuOwoKCXR4 X3N0YXRzID0gdGhpc19jcHVfcHRyKHNyY192eGxhbi0+ZGV2LT50c3RhdHMpOwogICAgM2FhODoJ NGMgOGIgOGYgZDggMDAgMDAgMDAgCW1vdiAgICAweGQ4KCVyZGkpLCVyOQogICAgM2FhZjoJODAg YTcgOTAgMDAgMDAgMDAgZjggCWFuZGIgICAkMHhmOCwweDkwKCVyZGkpCiAgICAzYWI2Ogk4MCBh NyA5MiAwMCAwMCAwMCBmZCAJYW5kYiAgICQweGZkLDB4OTIoJXJkaSkKCXJ4X3N0YXRzID0gdGhp c19jcHVfcHRyKGRzdF92eGxhbi0+ZGV2LT50c3RhdHMpOwogICAgM2FiZDoJNDggOGIgNGEgMzAg ICAgICAgICAgCW1vdiAgICAweDMwKCVyZHgpLCVyY3gKICAgIDNhYzE6CTQ0IDg5IGYyICAgICAg ICAgICAgIAltb3YgICAgJXIxNGQsJWVkeAogICAgM2FjNDoJNDggMDEgZjAgICAgICAgICAgICAg CWFkZCAgICAlcnNpLCVyYXgKICAgIDNhYzc6CTRjIDI5IGM4ICAgICAgICAgICAgIAlzdWIgICAg JXI5LCVyYXgKCXJldHVybiBza2ItPmlubmVyX3RyYW5zcG9ydF9oZWFkZXIgLSBza2ItPmlubmVy X25ldHdvcmtfaGVhZGVyOwp9CgpzdGF0aWMgaW5saW5lIGludCBza2JfbmV0d29ya19vZmZzZXQo Y29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYikKewoJcmV0dXJuIHNrYl9uZXR3b3JrX2hlYWRlcihz a2IpIC0gc2tiLT5kYXRhOwogICAgM2FjYToJMjkgYzIgICAgICAgICAgICAgICAgCXN1YiAgICAl ZWF4LCVlZHgKICAgIDNhY2M6CTNiIDk3IDg0IDAwIDAwIDAwICAgIAljbXAgICAgMHg4NCglcmRp KSwlZWR4CiAgICAzYWQyOgk0OCA4OSA0ZiAyMCAgICAgICAgICAJbW92ICAgICVyY3gsMHgyMCgl cmRpKQogICAgM2FkNjoJODkgOTcgODAgMDAgMDAgMDAgICAgCW1vdiAgICAlZWR4LDB4ODAoJXJk aSkKICAgIDNhZGM6CTBmIDgyIGJlIDAwIDAwIDAwICAgIAlqYiAgICAgM2JhMCA8dnhsYW5fZW5j YXBfYnlwYXNzLmlzcmEuNDcrMHgxNjA+Cglza2ItPnBrdF90eXBlID0gUEFDS0VUX0hPU1Q7CiAg ICAzYWUyOgk4OSBjMCAgICAgICAgICAgICAgICAJbW92ICAgICVlYXgsJWVheAogICAgM2FlNDoJ NGMgMDEgYzggICAgICAgICAgICAgCWFkZCAgICAlcjksJXJheAoJc2tiLT5lbmNhcHN1bGF0aW9u ID0gMDsKICAgIDNhZTc6CTQ4IDg5IDg3IGQ4IDAwIDAwIDAwIAltb3YgICAgJXJheCwweGQ4KCVy ZGkpCglza2ItPmRldiA9IGRzdF92eGxhbi0+ZGV2OwogICAgM2FlZToJNjYgNDEgODMgNzggNDAg MDIgICAgCWNtcHcgICAkMHgyLDB4NDAoJXI4KQogICAgM2FmNDoJMGYgODQgOTAgMDAgMDAgMDAg ICAgCWplICAgICAzYjhhIDx2eGxhbl9lbmNhcF9ieXBhc3MuaXNyYS40NysweDE0YT4KfQoKdW5z aWduZWQgY2hhciAqc2tiX3B1bGwoc3RydWN0IHNrX2J1ZmYgKnNrYiwgdW5zaWduZWQgaW50IGxl bik7CnN0YXRpYyBpbmxpbmUgdW5zaWduZWQgY2hhciAqX19za2JfcHVsbChzdHJ1Y3Qgc2tfYnVm ZiAqc2tiLCB1bnNpZ25lZCBpbnQgbGVuKQp7Cglza2ItPmxlbiAtPSBsZW47CiAgICAzYWZhOgk0 OCA4YiAwNSAwMCAwMCAwMCAwMCAJbW92ICAgIDB4MCglcmlwKSwlcmF4ICAgICAgICAjIDNiMDEg PHZ4bGFuX2VuY2FwX2J5cGFzcy5pc3JhLjQ3KzB4YzE+CglCVUdfT04oc2tiLT5sZW4gPCBza2It PmRhdGFfbGVuKTsKICAgIDNiMDE6CTQ4IDhiIDE1IDAwIDAwIDAwIDAwIAltb3YgICAgMHgwKCVy aXApLCVyZHggICAgICAgICMgM2IwOCA8dnhsYW5fZW5jYXBfYnlwYXNzLmlzcmEuNDcrMHhjOD4K fQoKdW5zaWduZWQgY2hhciAqc2tiX3B1bGwoc3RydWN0IHNrX2J1ZmYgKnNrYiwgdW5zaWduZWQg aW50IGxlbik7CnN0YXRpYyBpbmxpbmUgdW5zaWduZWQgY2hhciAqX19za2JfcHVsbChzdHJ1Y3Qg c2tfYnVmZiAqc2tiLCB1bnNpZ25lZCBpbnQgbGVuKQp7Cglza2ItPmxlbiAtPSBsZW47CiAgICAz YjA4Ogk0OCA4OSA0NCAyNCAwOCAgICAgICAJbW92ICAgICVyYXgsMHg4KCVyc3ApCglCVUdfT04o c2tiLT5sZW4gPCBza2ItPmRhdGFfbGVuKTsKICAgIDNiMGQ6CWI4IDBhIDAwIDAwIDAwICAgICAg IAltb3YgICAgJDB4YSwlZWF4CglyZXR1cm4gc2tiLT5kYXRhICs9IGxlbjsKICAgIDNiMTI6CTQ4 IDg5IDU0IDI0IDEwICAgICAgIAltb3YgICAgJXJkeCwweDEwKCVyc3ApCiAgICAzYjE3Ogk2NiA4 OSAwNCAyNCAgICAgICAgICAJbW92ICAgICVheCwoJXJzcCkKICAgIDNiMWI6CTQxIGY2IDgwIDk4 IDAwIDAwIDAwIAl0ZXN0YiAgJDB4MSwweDk4KCVyOCkKICAgIDNiMjI6CTAxIAoJX19za2JfcHVs bChza2IsIHNrYl9uZXR3b3JrX29mZnNldChza2IpKTsKCglpZiAocmVtb3RlX2lwLT5zYS5zYV9m YW1pbHkgPT0gQUZfSU5FVCkgewogICAgM2IyMzoJNDkgODkgZmYgICAgICAgICAgICAgCW1vdiAg ICAlcmRpLCVyMTUKICAgIDNiMjY6CTc1IDQ5ICAgICAgICAgICAgICAgIAlqbmUgICAgM2I3MSA8 dnhsYW5fZW5jYXBfYnlwYXNzLmlzcmEuNDcrMHgxMzE+CiAgICAzYjI4Ogk0OSA4MyA0NCAyNCAx MCAwMSAgICAJYWRkcSAgICQweDEsMHgxMCglcjEyKQoJCWxvb3BiYWNrLnNpbi5zaW5fYWRkci5z X2FkZHIgPSBodG9ubChJTkFERFJfTE9PUEJBQ0spOwoJCWxvb3BiYWNrLnNhLnNhX2ZhbWlseSA9 ICBBRl9JTkVUOwojaWYgSVNfRU5BQkxFRChDT05GSUdfSVBWNikKCX0gZWxzZSB7CgkJbG9vcGJh Y2suc2luNi5zaW42X2FkZHIgPSBpbjZhZGRyX2xvb3BiYWNrOwogICAgM2IyZToJNGQgMDEgNzQg MjQgMTggICAgICAgCWFkZCAgICAlcjE0LDB4MTgoJXIxMikKICAgIDNiMzM6CTRjIDg5IGZmICAg ICAgICAgICAgIAltb3YgICAgJXIxNSwlcmRpCiAgICAzYjM2OgllOCAwMCAwMCAwMCAwMCAgICAg ICAJY2FsbHEgIDNiM2IgPHZ4bGFuX2VuY2FwX2J5cGFzcy5pc3JhLjQ3KzB4ZmI+CiAgICAzYjNi Ogk4NSBjMCAgICAgICAgICAgICAgICAJdGVzdCAgICVlYXgsJWVheAoJCWxvb3BiYWNrLnNhLnNh X2ZhbWlseSA9ICBBRl9JTkVUNjsKICAgIDNiM2Q6CTc0IDI3ICAgICAgICAgICAgICAgIAlqZSAg ICAgM2I2NiA8dnhsYW5fZW5jYXBfYnlwYXNzLmlzcmEuNDcrMHgxMjY+CiAgICAzYjNmOgk0OCA4 MyA4MyA2MCAwMSAwMCAwMCAJYWRkcSAgICQweDEsMHgxNjAoJXJieCkKICAgIDNiNDY6CTAxIAog ICAgM2I0NzoJNDggOGIgNDQgMjQgMjggICAgICAgCW1vdiAgICAweDI4KCVyc3ApLCVyYXgKI2Vu ZGlmCgl9CgoJaWYgKGRzdF92eGxhbi0+ZmxhZ3MgJiBWWExBTl9GX0xFQVJOKQogICAgM2I0YzoJ NjUgNDggMzMgMDQgMjUgMjggMDAgCXhvciAgICAlZ3M6MHgyOCwlcmF4CiAgICAzYjUzOgkwMCAw MCAKICAgIDNiNTU6CTc1IDRiICAgICAgICAgICAgICAgIAlqbmUgICAgM2JhMiA8dnhsYW5fZW5j YXBfYnlwYXNzLmlzcmEuNDcrMHgxNjI+CiAgICAzYjU3Ogk0OCA4ZCA2NSBkOCAgICAgICAgICAJ bGVhICAgIC0weDI4KCVyYnApLCVyc3AKCQl2eGxhbl9zbm9vcChza2ItPmRldiwgJmxvb3BiYWNr LCBldGhfaGRyKHNrYiktPmhfc291cmNlKTsKCgl1NjRfc3RhdHNfdXBkYXRlX2JlZ2luKCZ0eF9z dGF0cy0+c3luY3ApOwoJdHhfc3RhdHMtPnR4X3BhY2tldHMrKzsKICAgIDNiNWI6CTViICAgICAg ICAgICAgICAgICAgIAlwb3AgICAgJXJieAogICAgM2I1YzoJNDEgNWMgICAgICAgICAgICAgICAg CXBvcCAgICAlcjEyCgl0eF9zdGF0cy0+dHhfYnl0ZXMgKz0gbGVuOwogICAgM2I1ZToJNDEgNWQg ICAgICAgICAgICAgICAgCXBvcCAgICAlcjEzCiAgICAzYjYwOgk0MSA1ZSAgICAgICAgICAgICAg ICAJcG9wICAgICVyMTQKICAgIDNiNjI6CTQxIDVmICAgICAgICAgICAgICAgIAlwb3AgICAgJXIx NQoJdTY0X3N0YXRzX3VwZGF0ZV9lbmQoJnR4X3N0YXRzLT5zeW5jcCk7CgoJaWYgKG5ldGlmX3J4 KHNrYikgPT0gTkVUX1JYX1NVQ0NFU1MpIHsKICAgIDNiNjQ6CTVkICAgICAgICAgICAgICAgICAg IAlwb3AgICAgJXJicAogICAgM2I2NToJYzMgICAgICAgICAgICAgICAgICAgCXJldHEgICAKICAg IDNiNjY6CTQ5IDgzIDQ1IDAwIDAxICAgICAgIAlhZGRxICAgJDB4MSwweDAoJXIxMykKICAgIDNi NmI6CTRkIDAxIDc1IDA4ICAgICAgICAgIAlhZGQgICAgJXIxNCwweDgoJXIxMykKCQl1NjRfc3Rh dHNfdXBkYXRlX2JlZ2luKCZyeF9zdGF0cy0+c3luY3ApOwoJCXJ4X3N0YXRzLT5yeF9wYWNrZXRz Kys7CgkJcnhfc3RhdHMtPnJ4X2J5dGVzICs9IGxlbjsKCQl1NjRfc3RhdHNfdXBkYXRlX2VuZCgm cnhfc3RhdHMtPnN5bmNwKTsKCX0gZWxzZSB7CgkJZGV2LT5zdGF0cy5yeF9kcm9wcGVkKys7CiAg ICAzYjZmOgllYiBkNiAgICAgICAgICAgICAgICAJam1wICAgIDNiNDcgPHZ4bGFuX2VuY2FwX2J5 cGFzcy5pc3JhLjQ3KzB4MTA3PgogICAgM2I3MToJMGYgYjcgODcgYzYgMDAgMDAgMDAgCW1vdnp3 bCAweGM2KCVyZGkpLCVlYXgKCX0KfQogICAgM2I3ODoJNDggODkgY2YgICAgICAgICAgICAgCW1v diAgICAlcmN4LCVyZGkKICAgIDNiN2I6CTQ4IDhkIDU0IDA2IDA2ICAgICAgIAlsZWEgICAgMHg2 KCVyc2ksJXJheCwxKSwlcmR4CiAgICAzYjgwOgk0OCA4OSBlNiAgICAgICAgICAgICAJbW92ICAg ICVyc3AsJXJzaQogICAgM2I4MzoJZTggYTggZjcgZmYgZmYgICAgICAgCWNhbGxxICAzMzMwIDx2 eGxhbl9zbm9vcD4KICAgIDNiODg6CWViIDllICAgICAgICAgICAgICAgIAlqbXAgICAgM2IyOCA8 dnhsYW5fZW5jYXBfYnlwYXNzLmlzcmEuNDcrMHhlOD4KICAgIDNiOGE6CWJhIDAyIDAwIDAwIDAw ICAgICAgIAltb3YgICAgJDB4MiwlZWR4CiAgICAzYjhmOgljNyA0NCAyNCAwNCA3ZiAwMCAwMCAJ bW92bCAgICQweDEwMDAwN2YsMHg0KCVyc3ApCiAgICAzYjk2OgkwMSAKCXR4X3N0YXRzLT50eF9i eXRlcyArPSBsZW47Cgl1NjRfc3RhdHNfdXBkYXRlX2VuZCgmdHhfc3RhdHMtPnN5bmNwKTsKCglp ZiAobmV0aWZfcngoc2tiKSA9PSBORVRfUlhfU1VDQ0VTUykgewoJCXU2NF9zdGF0c191cGRhdGVf YmVnaW4oJnJ4X3N0YXRzLT5zeW5jcCk7CgkJcnhfc3RhdHMtPnJ4X3BhY2tldHMrKzsKICAgIDNi OTc6CTY2IDg5IDE0IDI0ICAgICAgICAgIAltb3YgICAgJWR4LCglcnNwKQoJCXJ4X3N0YXRzLT5y eF9ieXRlcyArPSBsZW47CiAgICAzYjliOgllOSA3YiBmZiBmZiBmZiAgICAgICAJam1wcSAgIDNi MWIgPHZ4bGFuX2VuY2FwX2J5cGFzcy5pc3JhLjQ3KzB4ZGI+CiAgICAzYmEwOgkwZiAwYiAgICAg ICAgICAgICAgICAJdWQyICAgIAoJCWxvb3BiYWNrLnNhLnNhX2ZhbWlseSA9ICBBRl9JTkVUNjsK I2VuZGlmCgl9CgoJaWYgKGRzdF92eGxhbi0+ZmxhZ3MgJiBWWExBTl9GX0xFQVJOKQoJCXZ4bGFu X3Nub29wKHNrYi0+ZGV2LCAmbG9vcGJhY2ssIGV0aF9oZHIoc2tiKS0+aF9zb3VyY2UpOwogICAg M2JhMjoJZTggMDAgMDAgMDAgMDAgICAgICAgCWNhbGxxICAzYmE3IDx2eGxhbl9lbmNhcF9ieXBh c3MuaXNyYS40NysweDE2Nz4KICAgIDNiYTc6CTY2IDBmIDFmIDg0IDAwIDAwIDAwIAlub3B3ICAg MHgwKCVyYXgsJXJheCwxKQogICAgM2JhZToJMDAgMDAgCgowMDAwMDAwMDAwMDAzYmIwIDx2eGxh bl9leGl0X25ldD46CiAgICAzYmIwOgllOCAwMCAwMCAwMCAwMCAgICAgICAJY2FsbHEgIDNiYjUg PHZ4bGFuX2V4aXRfbmV0KzB4NT4KICAgIDNiYjU6CTU1ICAgICAgICAgICAgICAgICAgIAlwdXNo ICAgJXJicAogICAgM2JiNjoJNDggODkgZTUgICAgICAgICAgICAgCW1vdiAgICAlcnNwLCVyYnAK ICAgIDNiYjk6CTQxIDU3ICAgICAgICAgICAgICAgIAlwdXNoICAgJXIxNQoJc2tiLT5kZXYgPSBk c3RfdnhsYW4tPmRldjsKCV9fc2tiX3B1bGwoc2tiLCBza2JfbmV0d29ya19vZmZzZXQoc2tiKSk7 CgoJaWYgKHJlbW90ZV9pcC0+c2Euc2FfZmFtaWx5ID09IEFGX0lORVQpIHsKCQlsb29wYmFjay5z aW4uc2luX2FkZHIuc19hZGRyID0gaHRvbmwoSU5BRERSX0xPT1BCQUNLKTsKCQlsb29wYmFjay5z YS5zYV9mYW1pbHkgPSAgQUZfSU5FVDsKICAgIDNiYmI6CTQxIDU2ICAgICAgICAgICAgICAgIAlw dXNoICAgJXIxNAogICAgM2JiZDoJNDEgNTUgICAgICAgICAgICAgICAgCXB1c2ggICAlcjEzCglz a2ItPmVuY2Fwc3VsYXRpb24gPSAwOwoJc2tiLT5kZXYgPSBkc3RfdnhsYW4tPmRldjsKCV9fc2ti X3B1bGwoc2tiLCBza2JfbmV0d29ya19vZmZzZXQoc2tiKSk7CgoJaWYgKHJlbW90ZV9pcC0+c2Eu c2FfZmFtaWx5ID09IEFGX0lORVQpIHsKCQlsb29wYmFjay5zaW4uc2luX2FkZHIuc19hZGRyID0g aHRvbmwoSU5BRERSX0xPT1BCQUNLKTsKICAgIDNiYmY6CTQxIDU0ICAgICAgICAgICAgICAgIAlw dXNoICAgJXIxMgogICAgM2JjMToJNDkgODkgZmUgICAgICAgICAgICAgCW1vdiAgICAlcmRpLCVy MTQKICAgIDNiYzQ6CTUzICAgICAgICAgICAgICAgICAgIAlwdXNoICAgJXJieAogICAgM2JjNToJ NGQgOGQgYTYgMTAgMDEgMDAgMDAgCWxlYSAgICAweDExMCglcjE0KSwlcjEyCgkJbG9vcGJhY2su c2Euc2FfZmFtaWx5ID0gIEFGX0lORVQ7CiAgICAzYmNjOgk0OCA4MyBlYyAyMCAgICAgICAgICAJ c3ViICAgICQweDIwLCVyc3AKCnVuc2lnbmVkIGNoYXIgKnNrYl9wdWxsKHN0cnVjdCBza19idWZm ICpza2IsIHVuc2lnbmVkIGludCBsZW4pOwpzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGNoYXIgKl9f c2tiX3B1bGwoc3RydWN0IHNrX2J1ZmYgKnNrYiwgdW5zaWduZWQgaW50IGxlbikKewoJc2tiLT5s ZW4gLT0gbGVuOwoJQlVHX09OKHNrYi0+bGVuIDwgc2tiLT5kYXRhX2xlbik7CiAgICAzYmQwOgk2 NSA0OCA4YiAwNCAyNSAyOCAwMCAJbW92ICAgICVnczoweDI4LCVyYXgKICAgIDNiZDc6CTAwIDAw IAoJCXJ4X3N0YXRzLT5yeF9ieXRlcyArPSBsZW47CgkJdTY0X3N0YXRzX3VwZGF0ZV9lbmQoJnJ4 X3N0YXRzLT5zeW5jcCk7Cgl9IGVsc2UgewoJCWRldi0+c3RhdHMucnhfZHJvcHBlZCsrOwoJfQp9 CiAgICAzYmQ5Ogk0OCA4OSA0NSBkMCAgICAgICAgICAJbW92ICAgICVyYXgsLTB4MzAoJXJicCkK ICAgIDNiZGQ6CTMxIGMwICAgICAgICAgICAgICAgIAl4b3IgICAgJWVheCwlZWF4CiAgICAzYmRm Ogk4YiAwNSAwMCAwMCAwMCAwMCAgICAJbW92ICAgIDB4MCglcmlwKSwlZWF4ICAgICAgICAjIDNi ZTUgPHZ4bGFuX2V4aXRfbmV0KzB4MzU+CgoJcmV0dXJuIDA7Cn0KCnN0YXRpYyB2b2lkIF9fbmV0 X2V4aXQgdnhsYW5fZXhpdF9uZXQoc3RydWN0IG5ldCAqbmV0KQp7CiAgICAzYmU1Ogk0OCA4YiA5 NyA4OCAxNCAwMCAwMCAJbW92ICAgIDB4MTQ4OCglcmRpKSwlcmR4CiAgICAzYmVjOgk4MyBlOCAw MSAgICAgICAgICAgICAJc3ViICAgICQweDEsJWVheAogICAgM2JlZjoJNDggOTggICAgICAgICAg ICAgICAgCWNsdHEgICAKICAgIDNiZjE6CTQ4IDhiIDQ0IGMyIDE4ICAgICAgIAltb3YgICAgMHgx OCglcmR4LCVyYXgsOCksJXJheAoJc3RydWN0IHZ4bGFuX2RldiAqdnhsYW4sICpuZXh0OwoJc3Ry dWN0IG5ldF9kZXZpY2UgKmRldiwgKmF1eDsKCUxJU1RfSEVBRChsaXN0KTsKCglydG5sX2xvY2so KTsKCWZvcl9lYWNoX25ldGRldl9zYWZlKG5ldCwgZGV2LCBhdXgpCiAgICAzYmY2Ogk0OCA4OSA0 NSBiOCAgICAgICAgICAJbW92ICAgICVyYXgsLTB4NDgoJXJicCkKICAgIDNiZmE6CTQ4IDhkIDQ1 IGMwICAgICAgICAgIAlsZWEgICAgLTB4NDAoJXJicCksJXJheAoKCXJldHVybiAwOwp9CgpzdGF0 aWMgdm9pZCBfX25ldF9leGl0IHZ4bGFuX2V4aXRfbmV0KHN0cnVjdCBuZXQgKm5ldCkKewogICAg M2JmZToJNDggODkgNDUgYzAgICAgICAgICAgCW1vdiAgICAlcmF4LC0weDQwKCVyYnApCiAgICAz YzAyOgk0OCA4OSA0NSBjOCAgICAgICAgICAJbW92ICAgICVyYXgsLTB4MzgoJXJicCkKICAgIDNj MDY6CWU4IDAwIDAwIDAwIDAwICAgICAgIAljYWxscSAgM2MwYiA8dnhsYW5fZXhpdF9uZXQrMHg1 Yj4KICAgIDNjMGI6CTQ5IDhiIDg2IDEwIDAxIDAwIDAwIAltb3YgICAgMHgxMTAoJXIxNCksJXJh eAogICAgM2MxMjoJNDggOGIgMzAgICAgICAgICAgICAgCW1vdiAgICAoJXJheCksJXJzaQogICAg M2MxNToJNDkgMzkgYzQgICAgICAgICAgICAgCWNtcCAgICAlcmF4LCVyMTIKICAgIDNjMTg6CTQ4 IDhkIDc4IGIwICAgICAgICAgIAlsZWEgICAgLTB4NTAoJXJheCksJXJkaQogICAgM2MxYzoJNDgg OGQgNWUgYjAgICAgICAgICAgCWxlYSAgICAtMHg1MCglcnNpKSwlcmJ4CiAgICAzYzIwOgk3NSAw NSAgICAgICAgICAgICAgICAJam5lICAgIDNjMjcgPHZ4bGFuX2V4aXRfbmV0KzB4Nzc+CiAgICAz YzIyOgllYiAyOCAgICAgICAgICAgICAgICAJam1wICAgIDNjNGMgPHZ4bGFuX2V4aXRfbmV0KzB4 OWM+CiAgICAzYzI0Ogk0OCA4OSBjMyAgICAgICAgICAgICAJbW92ICAgICVyYXgsJXJieAogICAg M2MyNzoJNDggODEgYmYgOTggMDcgMDAgMDAgCWNtcHEgICAkMHgwLDB4Nzk4KCVyZGkpCiAgICAz YzJlOgkwMCAwMCAwMCAwMCAKCXN0cnVjdCB2eGxhbl9uZXQgKnZuID0gbmV0X2dlbmVyaWMobmV0 LCB2eGxhbl9uZXRfaWQpOwoJc3RydWN0IHZ4bGFuX2RldiAqdnhsYW4sICpuZXh0OwoJc3RydWN0 IG5ldF9kZXZpY2UgKmRldiwgKmF1eDsKCUxJU1RfSEVBRChsaXN0KTsKICAgIDNjMzI6CTBmIDg0 IDNhIDAxIDAwIDAwICAgIAlqZSAgICAgM2Q3MiA8dnhsYW5fZXhpdF9uZXQrMHgxYzI+CgoJcnRu bF9sb2NrKCk7CiAgICAzYzM4Ogk0OCA4YiA0MyA1MCAgICAgICAgICAJbW92ICAgIDB4NTAoJXJi eCksJXJheAoJZm9yX2VhY2hfbmV0ZGV2X3NhZmUobmV0LCBkZXYsIGF1eCkKICAgIDNjM2M6CTQ4 IDhkIDUzIDUwICAgICAgICAgIAlsZWEgICAgMHg1MCglcmJ4KSwlcmR4CiAgICAzYzQwOgk0OCA4 OSBkZiAgICAgICAgICAgICAJbW92ICAgICVyYngsJXJkaQogICAgM2M0MzoJNDggODMgZTggNTAg ICAgICAgICAgCXN1YiAgICAkMHg1MCwlcmF4CiAgICAzYzQ3Ogk0OSAzOSBkNCAgICAgICAgICAg ICAJY21wICAgICVyZHgsJXIxMgogICAgM2M0YToJNzUgZDggICAgICAgICAgICAgICAgCWpuZSAg ICAzYzI0IDx2eGxhbl9leGl0X25ldCsweDc0PgogICAgM2M0YzoJNDggOGIgNzUgYjggICAgICAg ICAgCW1vdiAgICAtMHg0OCglcmJwKSwlcnNpCiAgICAzYzUwOgk0OCA4YiAwNiAgICAgICAgICAg ICAJbW92ICAgICglcnNpKSwlcmF4CiAgICAzYzUzOgk0OCA4YiAxOCAgICAgICAgICAgICAJbW92 ICAgICglcmF4KSwlcmJ4CiAgICAzYzU2Ogk0OCAzOSBjNiAgICAgICAgICAgICAJY21wICAgICVy YXgsJXJzaQoJCWlmIChkZXYtPnJ0bmxfbGlua19vcHMgPT0gJnZ4bGFuX2xpbmtfb3BzKQogICAg M2M1OToJNGMgOGQgNjAgZjAgICAgICAgICAgCWxlYSAgICAtMHgxMCglcmF4KSwlcjEyCiAgICAz YzVkOgk0YyA4ZCA2YiBmMCAgICAgICAgICAJbGVhICAgIC0weDEwKCVyYngpLCVyMTMKICAgIDNj NjE6CTBmIDg0IGRmIDAwIDAwIDAwICAgIAlqZSAgICAgM2Q0NiA8dnhsYW5fZXhpdF9uZXQrMHgx OTY+CiAgICAzYzY3Ogk0OSA4YiA3YyAyNCAzMCAgICAgICAJbW92ICAgIDB4MzAoJXIxMiksJXJk aQoJc3RydWN0IHZ4bGFuX2RldiAqdnhsYW4sICpuZXh0OwoJc3RydWN0IG5ldF9kZXZpY2UgKmRl diwgKmF1eDsKCUxJU1RfSEVBRChsaXN0KTsKCglydG5sX2xvY2soKTsKCWZvcl9lYWNoX25ldGRl dl9zYWZlKG5ldCwgZGV2LCBhdXgpCiAgICAzYzZjOgk0YyAzYiBiNyA4MCAwNCAwMCAwMCAJY21w ICAgIDB4NDgwKCVyZGkpLCVyMTQKICAgIDNjNzM6CTBmIDg0IGIwIDAwIDAwIDAwICAgIAlqZSAg ICAgM2QyOSA8dnhsYW5fZXhpdF9uZXQrMHgxNzk+CiAgICAzYzc5Ogk0OSA4MyBiYyAyNCBmMCAw MCAwMCAJY21wcSAgICQweDAsMHhmMCglcjEyKQogICAgM2M4MDoJMDAgMDAgCgkJaWYgKGRldi0+ cnRubF9saW5rX29wcyA9PSAmdnhsYW5fbGlua19vcHMpCgkJCXVucmVnaXN0ZXJfbmV0ZGV2aWNl X3F1ZXVlKGRldiwgJmxpc3QpOwoKCWxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZSh2eGxhbiwgbmV4 dCwgJnZuLT52eGxhbl9saXN0LCBuZXh0KSB7CiAgICAzYzgyOgliYiBmZiBmZiBmZiBmZiAgICAg ICAJbW92ICAgICQweGZmZmZmZmZmLCVlYngKICAgIDNjODc6CTBmIDg0IDkzIDAwIDAwIDAwICAg IAlqZSAgICAgM2QyMCA8dnhsYW5fZXhpdF9uZXQrMHgxNzA+CiAgICAzYzhkOgk4ZCA1MyAwMSAg ICAgICAgICAgICAJbGVhICAgIDB4MSglcmJ4KSwlZWR4CiAgICAzYzkwOgliZSAwMCAwMSAwMCAw MCAgICAgICAJbW92ICAgICQweDEwMCwlZXNpCiAgICAzYzk1Ogk0OCBjNyBjNyAwMCAwMCAwMCAw MCAJbW92ICAgICQweDAsJXJkaQoJCS8qIElmIHZ4bGFuLT5kZXYgaXMgaW4gdGhlIHNhbWUgbmV0 bnMsIGl0IGhhcyBhbHJlYWR5IGJlZW4gYWRkZWQKCQkgKiB0byB0aGUgbGlzdCBieSB0aGUgcHJl dmlvdXMgbG9vcC4KCQkgKi8KCQlpZiAoIW5ldF9lcShkZXZfbmV0KHZ4bGFuLT5kZXYpLCBuZXQp KSB7CiAgICAzYzljOgk0OCA2MyBkMiAgICAgICAgICAgICAJbW92c2xxICVlZHgsJXJkeAogICAg M2M5ZjoJZTggMDAgMDAgMDAgMDAgICAgICAgCWNhbGxxICAzY2E0IDx2eGxhbl9leGl0X25ldCsw eGY0PgogICAgM2NhNDoJM2IgMDUgMDAgMDAgMDAgMDAgICAgCWNtcCAgICAweDAoJXJpcCksJWVh eCAgICAgICAgIyAzY2FhIDx2eGxhbl9leGl0X25ldCsweGZhPgoKc3RhdGljIGlubGluZSB2b2lk IGdyb19jZWxsc19kZXN0cm95KHN0cnVjdCBncm9fY2VsbHMgKmdjZWxscykKewoJaW50IGk7CgoJ aWYgKCFnY2VsbHMtPmNlbGxzKQogICAgM2NhYToJODkgYzMgICAgICAgICAgICAgICAgCW1vdiAg ICAlZWF4LCVlYngKICAgIDNjYWM6CTdkIDU0ICAgICAgICAgICAgICAgIAlqZ2UgICAgM2QwMiA8 dnhsYW5fZXhpdF9uZXQrMHgxNTI+CiAgICAzY2FlOgk0OCA5OCAgICAgICAgICAgICAgICAJY2x0 cSAgIAogICAgM2NiMDoJNDkgOGIgOTQgMjQgZjAgMDAgMDAgCW1vdiAgICAweGYwKCVyMTIpLCVy ZHgKICAgIDNjYjc6CTAwIAogICAgM2NiODoJNDggMDMgMTQgYzUgMDAgMDAgMDAgCWFkZCAgICAw eDAoLCVyYXgsOCksJXJkeAogICAgM2NiZjoJMDAgCiAgICAzY2MwOgk0OCA4ZCA3YSAxOCAgICAg ICAgICAJbGVhICAgIDB4MTgoJXJkeCksJXJkaQogICAgM2NjNDoJNDkgODkgZDcgICAgICAgICAg ICAgCW1vdiAgICAlcmR4LCVyMTUKICAgIDNjYzc6CWU4IDAwIDAwIDAwIDAwICAgICAgIAljYWxs cSAgM2NjYyA8dnhsYW5fZXhpdF9uZXQrMHgxMWM+CiAgICAzY2NjOgk0OSA4YiAzZiAgICAgICAg ICAgICAJbW92ICAgICglcjE1KSwlcmRpCiAgICAzY2NmOgk0OSAzOSBmZiAgICAgICAgICAgICAJ Y21wICAgICVyZGksJXIxNQogICAgM2NkMjoJNzQgYjkgICAgICAgICAgICAgICAgCWplICAgICAz YzhkIDx2eGxhbl9leGl0X25ldCsweGRkPgoJCXJldHVybjsKCWZvcl9lYWNoX3Bvc3NpYmxlX2Nw dShpKSB7CiAgICAzY2Q0Ogk0OCA4NSBmZiAgICAgICAgICAgICAJdGVzdCAgICVyZGksJXJkaQog ICAgM2NkNzoJNzQgYjQgICAgICAgICAgICAgICAgCWplICAgICAzYzhkIDx2eGxhbl9leGl0X25l dCsweGRkPgogICAgM2NkOToJNDEgODMgNmYgMTAgMDEgICAgICAgCXN1YmwgICAkMHgxLDB4MTAo JXIxNSkKCQlzdHJ1Y3QgZ3JvX2NlbGwgKmNlbGwgPSBwZXJfY3B1X3B0cihnY2VsbHMtPmNlbGxz LCBpKTsKICAgIDNjZGU6CTQ4IDhiIDBmICAgICAgICAgICAgIAltb3YgICAgKCVyZGkpLCVyY3gK ICAgIDNjZTE6CTQ4IDhiIDU3IDA4ICAgICAgICAgIAltb3YgICAgMHg4KCVyZGkpLCVyZHgKICAg IDNjZTU6CTQ4IGM3IDA3IDAwIDAwIDAwIDAwIAltb3ZxICAgJDB4MCwoJXJkaSkKICAgIDNjZWM6 CTQ4IGM3IDQ3IDA4IDAwIDAwIDAwIAltb3ZxICAgJDB4MCwweDgoJXJkaSkKICAgIDNjZjM6CTAw IAogICAgM2NmNDoJNDggODkgNTEgMDggICAgICAgICAgCW1vdiAgICAlcmR4LDB4OCglcmN4KQoK CQluZXRpZl9uYXBpX2RlbCgmY2VsbC0+bmFwaSk7CiAgICAzY2Y4Ogk0OCA4OSAwYSAgICAgICAg ICAgICAJbW92ICAgICVyY3gsKCVyZHgpCiAgICAzY2ZiOgllOCAwMCAwMCAwMCAwMCAgICAgICAJ Y2FsbHEgIDNkMDAgPHZ4bGFuX2V4aXRfbmV0KzB4MTUwPgogKi8Kc3RhdGljIGlubGluZSBzdHJ1 Y3Qgc2tfYnVmZiAqc2tiX3BlZWsoY29uc3Qgc3RydWN0IHNrX2J1ZmZfaGVhZCAqbGlzdF8pCnsK CXN0cnVjdCBza19idWZmICpza2IgPSBsaXN0Xy0+bmV4dDsKCglpZiAoc2tiID09IChzdHJ1Y3Qg c2tfYnVmZiAqKWxpc3RfKQogICAgM2QwMDoJZWIgY2EgICAgICAgICAgICAgICAgCWptcCAgICAz Y2NjIDx2eGxhbl9leGl0X25ldCsweDExYz4KICAgIDNkMDI6CTQ5IDhiIGJjIDI0IGYwIDAwIDAw IAltb3YgICAgMHhmMCglcjEyKSwlcmRpCiAgICAzZDA5OgkwMCAKdm9pZCBza2JfdW5saW5rKHN0 cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBza19idWZmX2hlYWQgKmxpc3QpOwpzdGF0aWMgaW5s aW5lIHZvaWQgX19za2JfdW5saW5rKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBza19idWZm X2hlYWQgKmxpc3QpCnsKCXN0cnVjdCBza19idWZmICpuZXh0LCAqcHJldjsKCglsaXN0LT5xbGVu LS07CiAgICAzZDBhOgllOCAwMCAwMCAwMCAwMCAgICAgICAJY2FsbHEgIDNkMGYgPHZ4bGFuX2V4 aXRfbmV0KzB4MTVmPgoJbmV4dAkgICA9IHNrYi0+bmV4dDsKICAgIDNkMGY6CTQ5IDhiIDdjIDI0 IDMwICAgICAgIAltb3YgICAgMHgzMCglcjEyKSwlcmRpCglwcmV2CSAgID0gc2tiLT5wcmV2Owog ICAgM2QxNDoJNDkgYzcgODQgMjQgZjAgMDAgMDAgCW1vdnEgICAkMHgwLDB4ZjAoJXIxMikKICAg IDNkMWI6CTAwIDAwIDAwIDAwIDAwIAoJc2tiLT5uZXh0ICA9IHNrYi0+cHJldiA9IE5VTEw7CiAg ICAzZDIwOgk0OCA4ZCA3NSBjMCAgICAgICAgICAJbGVhICAgIC0weDQwKCVyYnApLCVyc2kKCW5l eHQtPnByZXYgPSBwcmV2OwogICAgM2QyNDoJZTggMDAgMDAgMDAgMDAgICAgICAgCWNhbGxxICAz ZDI5IDx2eGxhbl9leGl0X25ldCsweDE3OT4KCXByZXYtPm5leHQgPSBuZXh0OwogICAgM2QyOToJ NDkgOGIgNDUgMTAgICAgICAgICAgCW1vdiAgICAweDEwKCVyMTMpLCVyYXgKdm9pZCBza2JfcXVl dWVfcHVyZ2Uoc3RydWN0IHNrX2J1ZmZfaGVhZCAqbGlzdCk7CnN0YXRpYyBpbmxpbmUgdm9pZCBf X3NrYl9xdWV1ZV9wdXJnZShzdHJ1Y3Qgc2tfYnVmZl9oZWFkICpsaXN0KQp7CglzdHJ1Y3Qgc2tf YnVmZiAqc2tiOwoJd2hpbGUgKChza2IgPSBfX3NrYl9kZXF1ZXVlKGxpc3QpKSAhPSBOVUxMKQoJ CWtmcmVlX3NrYihza2IpOwogICAgM2QyZDoJNDkgOGQgNTUgMTAgICAgICAgICAgCWxlYSAgICAw eDEwKCVyMTMpLCVyZHgKICAgIDNkMzE6CTRkIDg5IGVjICAgICAgICAgICAgIAltb3YgICAgJXIx MywlcjEyCgkJX19za2JfcXVldWVfcHVyZ2UoJmNlbGwtPm5hcGlfc2ticyk7Cgl9CglmcmVlX3Bl cmNwdShnY2VsbHMtPmNlbGxzKTsKICAgIDNkMzQ6CTQ4IDgzIGU4IDEwICAgICAgICAgIAlzdWIg ICAgJDB4MTAsJXJheAogICAgM2QzODoJNDggMzkgNTUgYjggICAgICAgICAgCWNtcCAgICAlcmR4 LC0weDQ4KCVyYnApCiAgICAzZDNjOgk3NCAwOCAgICAgICAgICAgICAgICAJamUgICAgIDNkNDYg PHZ4bGFuX2V4aXRfbmV0KzB4MTk2PgogICAgM2QzZToJNDkgODkgYzUgICAgICAgICAgICAgCW1v diAgICAlcmF4LCVyMTMKICAgIDNkNDE6CWU5IDIxIGZmIGZmIGZmICAgICAgIAlqbXBxICAgM2M2 NyA8dnhsYW5fZXhpdF9uZXQrMHhiNz4KCWdjZWxscy0+Y2VsbHMgPSBOVUxMOwogICAgM2Q0NjoJ NDggOGQgN2QgYzAgICAgICAgICAgCWxlYSAgICAtMHg0MCglcmJwKSwlcmRpCiAgICAzZDRhOgll OCAwMCAwMCAwMCAwMCAgICAgICAJY2FsbHEgIDNkNGYgPHZ4bGFuX2V4aXRfbmV0KzB4MTlmPgog ICAgM2Q0ZjoJZTggMDAgMDAgMDAgMDAgICAgICAgCWNhbGxxICAzZDU0IDx2eGxhbl9leGl0X25l dCsweDFhND4KCQkJZ3JvX2NlbGxzX2Rlc3Ryb3koJnZ4bGFuLT5ncm9fY2VsbHMpOwoJCQl1bnJl Z2lzdGVyX25ldGRldmljZV9xdWV1ZSh2eGxhbi0+ZGV2LCAmbGlzdCk7CiAgICAzZDU0Ogk0OCA4 YiA0NSBkMCAgICAgICAgICAJbW92ICAgIC0weDMwKCVyYnApLCVyYXgKICAgIDNkNTg6CTY1IDQ4 IDMzIDA0IDI1IDI4IDAwIAl4b3IgICAgJWdzOjB4MjgsJXJheAogICAgM2Q1ZjoJMDAgMDAgCgly dG5sX2xvY2soKTsKCWZvcl9lYWNoX25ldGRldl9zYWZlKG5ldCwgZGV2LCBhdXgpCgkJaWYgKGRl di0+cnRubF9saW5rX29wcyA9PSAmdnhsYW5fbGlua19vcHMpCgkJCXVucmVnaXN0ZXJfbmV0ZGV2 aWNlX3F1ZXVlKGRldiwgJmxpc3QpOwoKCWxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZSh2eGxhbiwg bmV4dCwgJnZuLT52eGxhbl9saXN0LCBuZXh0KSB7CiAgICAzZDYxOgk3NSAxZCAgICAgICAgICAg ICAgICAJam5lICAgIDNkODAgPHZ4bGFuX2V4aXRfbmV0KzB4MWQwPgogICAgM2Q2MzoJNDggODMg YzQgMjAgICAgICAgICAgCWFkZCAgICAkMHgyMCwlcnNwCiAgICAzZDY3Ogk1YiAgICAgICAgICAg ICAgICAgICAJcG9wICAgICVyYngKICAgIDNkNjg6CTQxIDVjICAgICAgICAgICAgICAgIAlwb3Ag ICAgJXIxMgogICAgM2Q2YToJNDEgNWQgICAgICAgICAgICAgICAgCXBvcCAgICAlcjEzCiAgICAz ZDZjOgk0MSA1ZSAgICAgICAgICAgICAgICAJcG9wICAgICVyMTQKICAgIDNkNmU6CTQxIDVmICAg ICAgICAgICAgICAgIAlwb3AgICAgJXIxNQogICAgM2Q3MDoJNWQgICAgICAgICAgICAgICAgICAg CXBvcCAgICAlcmJwCiAgICAzZDcxOgljMyAgICAgICAgICAgICAgICAgICAJcmV0cSAgIAogICAg M2Q3MjoJNDggOGQgNzUgYzAgICAgICAgICAgCWxlYSAgICAtMHg0MCglcmJwKSwlcnNpCgkJCWdy b19jZWxsc19kZXN0cm95KCZ2eGxhbi0+Z3JvX2NlbGxzKTsKCQkJdW5yZWdpc3Rlcl9uZXRkZXZp Y2VfcXVldWUodnhsYW4tPmRldiwgJmxpc3QpOwoJCX0KCX0KCgl1bnJlZ2lzdGVyX25ldGRldmlj ZV9tYW55KCZsaXN0KTsKICAgIDNkNzY6CWU4IDAwIDAwIDAwIDAwICAgICAgIAljYWxscSAgM2Q3 YiA8dnhsYW5fZXhpdF9uZXQrMHgxY2I+CiAgICAzZDdiOgllOSBiOCBmZSBmZiBmZiAgICAgICAJ am1wcSAgIDNjMzggPHZ4bGFuX2V4aXRfbmV0KzB4ODg+CglydG5sX3VubG9jaygpOwogICAgM2Q4 MDoJZTggMDAgMDAgMDAgMDAgICAgICAgCWNhbGxxICAzZDg1IDx2eGxhbl9leGl0X25ldCsweDFk NT4KfQogICAgM2Q4NToJOTAgICAgICAgICAgICAgICAgICAgCW5vcAogICAgM2Q4NjoJNjYgMmUg MGYgMWYgODQgMDAgMDAgCW5vcHcgICAlY3M6MHgwKCVyYXgsJXJheCwxKQogICAgM2Q4ZDoJMDAg MDAgMDAgCgowMDAwMDAwMDAwMDAzZDkwIDx2eGxhbl9idWlsZF9za2I+OgogICAgM2Q5MDoJZTgg MDAgMDAgMDAgMDAgICAgICAgCWNhbGxxICAzZDk1IDx2eGxhbl9idWlsZF9za2IrMHg1PgogICAg M2Q5NToJNTUgICAgICAgICAgICAgICAgICAgCXB1c2ggICAlcmJwCiAgICAzZDk2Ogk0OCA4OSBl NSAgICAgICAgICAgICAJbW92ICAgICVyc3AsJXJicAogICAgM2Q5OToJNDEgNTcgICAgICAgICAg ICAgICAgCXB1c2ggICAlcjE1CiAgICAzZDliOgk0MSA1NiAgICAgICAgICAgICAgICAJcHVzaCAg ICVyMTQKICAgIDNkOWQ6CTQxIDU1ICAgICAgICAgICAgICAgIAlwdXNoICAgJXIxMwogICAgM2Q5 ZjoJNDEgNTQgICAgICAgICAgICAgICAgCXB1c2ggICAlcjEyCiAgICAzZGExOgk0NSA4OSBjZSAg ICAgICAgICAgICAJbW92ICAgICVyOWQsJXIxNGQKCUxJU1RfSEVBRChsaXN0KTsKCglydG5sX2xv Y2soKTsKCWZvcl9lYWNoX25ldGRldl9zYWZlKG5ldCwgZGV2LCBhdXgpCgkJaWYgKGRldi0+cnRu bF9saW5rX29wcyA9PSAmdnhsYW5fbGlua19vcHMpCgkJCXVucmVnaXN0ZXJfbmV0ZGV2aWNlX3F1 ZXVlKGRldiwgJmxpc3QpOwogICAgM2RhNDoJNTMgICAgICAgICAgICAgICAgICAgCXB1c2ggICAl cmJ4CiAgICAzZGE1Ogk0OCA4OSBmYiAgICAgICAgICAgICAJbW92ICAgICVyZGksJXJieAogICAg M2RhODoJNDEgODkgY2MgICAgICAgICAgICAgCW1vdiAgICAlZWN4LCVyMTJkCiAgICAzZGFiOgk0 OCA4MyBlYyAxOCAgICAgICAgICAJc3ViICAgICQweDE4LCVyc3AKICAgIDNkYWY6CTgwIDdkIDEw IDAxICAgICAgICAgIAljbXBiICAgJDB4MSwweDEwKCVyYnApCgkJfQoJfQoKCXVucmVnaXN0ZXJf bmV0ZGV2aWNlX21hbnkoJmxpc3QpOwoJcnRubF91bmxvY2soKTsKfQogICAgM2RiMzoJNGMgODkg NDUgZDAgICAgICAgICAgCW1vdiAgICAlcjgsLTB4MzAoJXJicCkKICAgIDNkYjc6CTQ1IDE5IGVk ICAgICAgICAgICAgIAlzYmIgICAgJXIxM2QsJXIxM2QKICAgIDNkYmE6CTQxIDgxIGU1IDAwIGY4 IGZmIGZmIAlhbmQgICAgJDB4ZmZmZmY4MDAsJXIxM2QKCnN0YXRpYyBpbnQgdnhsYW5fYnVpbGRf c2tiKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBkc3RfZW50cnkgKmRzdCwKCQkJICAgaW50 IGlwaGRyX2xlbiwgX19iZTMyIHZuaSwKCQkJICAgc3RydWN0IHZ4bGFuX21ldGFkYXRhICptZCwg dTMyIHZ4ZmxhZ3MsCgkJCSAgIGJvb2wgdWRwX3N1bSkKewogICAgM2RjMToJNDEgODEgYzUgMDAg MTAgMDAgMDAgCWFkZCAgICAkMHgxMDAwLCVyMTNkCiAgICAzZGM4Ogk0MSA4MSBlMSAwMCAwMiAw MCAwMCAJYW5kICAgICQweDIwMCwlcjlkCiAgICAzZGNmOgkwZiA4NSBkNiAwMCAwMCAwMCAgICAJ am5lICAgIDNlYWIgPHZ4bGFuX2J1aWxkX3NrYisweDExYj4KICAgIDNkZDU6CTQ4IDhiIDhmIGQw IDAwIDAwIDAwIAltb3YgICAgMHhkMCglcmRpKSwlcmN4CiAgICAzZGRjOgk0OCA4YiBiZiBkOCAw MCAwMCAwMCAJbW92ICAgIDB4ZDgoJXJkaSksJXJkaQogICAgM2RlMzoJNDEgODkgZjkgICAgICAg ICAgICAgCW1vdiAgICAlZWRpLCVyOWQKICAgIDNkZTY6CTQxIDI5IGM5ICAgICAgICAgICAgIAlz dWIgICAgJWVjeCwlcjlkCglzdHJ1Y3QgdnhsYW5oZHIgKnZ4aDsKCWludCBtaW5faGVhZHJvb207 CglpbnQgZXJyOwoJaW50IHR5cGUgPSB1ZHBfc3VtID8gU0tCX0dTT19VRFBfVFVOTkVMX0NTVU0g OiBTS0JfR1NPX1VEUF9UVU5ORUw7CiAgICAzZGU5Ogk0YyA4YiA1NiAxOCAgICAgICAgICAJbW92 ICAgIDB4MTgoJXJzaSksJXIxMAogICAgM2RlZDoJNDQgMGYgYjcgYmIgYWEgMDAgMDAgCW1vdnp3 bCAweGFhKCVyYngpLCVyMTVkCiAgICAzZGY0OgkwMCAKICAgIDNkZjU6CTBmIGI3IDc2IDY4ICAg ICAgICAgIAltb3Z6d2wgMHg2OCglcnNpKSwlZXNpCglfX2JlMTYgaW5uZXJfcHJvdG9jb2wgPSBo dG9ucyhFVEhfUF9URUIpOwoKCWlmICgodnhmbGFncyAmIFZYTEFOX0ZfUkVNQ1NVTV9UWCkgJiYK ICAgIDNkZjk6CTQ1IDBmIGI3IDlhIDRlIDAyIDAwIAltb3Z6d2wgMHgyNGUoJXIxMCksJXIxMWQK ICAgIDNlMDA6CTAwIAogICAgM2UwMToJNDEgMGYgYjcgODIgNTAgMDIgMDAgCW1vdnp3bCAweDI1 MCglcjEwKSwlZWF4CiAgICAzZTA4OgkwMCAKICAgIDNlMDk6CTQ1IDg5IGZhICAgICAgICAgICAg IAltb3YgICAgJXIxNWQsJXIxMGQKICAgIDNlMGM6CTY2IDQxIDgxIGUyIDAwIDEwICAgIAlhbmQg ICAgJDB4MTAwMCwlcjEwdwogICAgM2UxMjoJNDQgMDEgZDggICAgICAgICAgICAgCWFkZCAgICAl cjExZCwlZWF4CiAgICAzZTE1Ogk4MyBlMCBmMCAgICAgICAgICAgICAJYW5kICAgICQweGZmZmZm ZmYwLCVlYXgKICAgIDNlMTg6CTY2IDQxIDgzIGZhIDAxICAgICAgIAljbXAgICAgJDB4MSwlcjEw dwoJCQl0eXBlIHw9IFNLQl9HU09fVFVOTkVMX1JFTUNTVU07Cgl9CgoJbWluX2hlYWRyb29tID0g TExfUkVTRVJWRURfU1BBQ0UoZHN0LT5kZXYpICsgZHN0LT5oZWFkZXJfbGVuCgkJCSsgVlhMQU5f SExFTiArIGlwaGRyX2xlbgoJCQkrIChza2Jfdmxhbl90YWdfcHJlc2VudChza2IpID8gVkxBTl9I TEVOIDogMCk7CiAgICAzZTFkOgk4ZCA3NCAzMCAxMCAgICAgICAgICAJbGVhICAgIDB4MTAoJXJh eCwlcnNpLDEpLCVlc2kKICAgIDNlMjE6CTE5IGMwICAgICAgICAgICAgICAgIAlzYmIgICAgJWVh eCwlZWF4CiAgICAzZTIzOglmNyBkMCAgICAgICAgICAgICAgICAJbm90ICAgICVlYXgKCQkgICAg KHNrYi0+Y3N1bV9vZmZzZXQgPT0gb2Zmc2V0b2Yoc3RydWN0IHVkcGhkciwgY2hlY2spIHx8CgkJ ICAgICBza2ItPmNzdW1fb2Zmc2V0ID09IG9mZnNldG9mKHN0cnVjdCB0Y3BoZHIsIGNoZWNrKSkp CgkJCXR5cGUgfD0gU0tCX0dTT19UVU5ORUxfUkVNQ1NVTTsKCX0KCgltaW5faGVhZHJvb20gPSBM TF9SRVNFUlZFRF9TUEFDRShkc3QtPmRldikgKyBkc3QtPmhlYWRlcl9sZW4KICAgIDNlMjU6CThk IDU0IDE2IDEwICAgICAgICAgIAlsZWEgICAgMHgxMCglcnNpLCVyZHgsMSksJWVkeAogICAgM2Uy OToJODMgZTAgMDQgICAgICAgICAgICAgCWFuZCAgICAkMHg0LCVlYXgKICAgIDNlMmM6CTAxIGQw ICAgICAgICAgICAgICAgIAlhZGQgICAgJWVkeCwlZWF4CiAgICAzZTJlOglmNiA4MyA4ZSAwMCAw MCAwMCAwMSAJdGVzdGIgICQweDEsMHg4ZSglcmJ4KQogICAgM2UzNToJMGYgODQgM2UgMDIgMDAg MDAgICAgCWplICAgICA0MDc5IDx2eGxhbl9idWlsZF9za2IrMHgyZTk+CiAgICAzZTNiOgk4YiA5 MyBjYyAwMCAwMCAwMCAgICAJbW92ICAgIDB4Y2MoJXJieCksJWVkeAogICAgM2U0MToJNDggMDEg ZDEgICAgICAgICAgICAgCWFkZCAgICAlcmR4LCVyY3gKICAgIDNlNDQ6CThiIDUxIDIwICAgICAg ICAgICAgIAltb3YgICAgMHgyMCglcmN4KSwlZWR4CiAgICAzZTQ3OgkwZiBiNyBjYSAgICAgICAg ICAgICAJbW92endsICVkeCwlZWN4CiAgICAzZTRhOgljMSBmYSAxMCAgICAgICAgICAgICAJc2Fy ICAgICQweDEwLCVlZHgKICAgIDNlNGQ6CTI5IGQxICAgICAgICAgICAgICAgIAlzdWIgICAgJWVk eCwlZWN4CiAgICAzZTRmOgk4MyBmOSAwMSAgICAgICAgICAgICAJY21wICAgICQweDEsJWVjeAog ICAgM2U1MjoJMGYgOTUgYzIgICAgICAgICAgICAgCXNldG5lICAlZGwKICAgIDNlNTU6CTMxIGY2 ICAgICAgICAgICAgICAgIAl4b3IgICAgJWVzaSwlZXNpCiAgICAzZTU3Ogk0MSAzOSBjMSAgICAg ICAgICAgICAJY21wICAgICVlYXgsJXI5ZAogICAgM2U1YToJMGYgYjYgZDIgICAgICAgICAgICAg CW1vdnpibCAlZGwsJWVkeAogICAgM2U1ZDoJNzMgMDUgICAgICAgICAgICAgICAgCWphZSAgICAz ZTY0IDx2eGxhbl9idWlsZF9za2IrMHhkND4KICovCnN0YXRpYyBpbmxpbmUgaW50IHNrYl9oZWFk ZXJfY2xvbmVkKGNvbnN0IHN0cnVjdCBza19idWZmICpza2IpCnsKCWludCBkYXRhcmVmOwoKCWlm ICghc2tiLT5jbG9uZWQpCiAgICAzZTVmOgk0NCAyOSBjOCAgICAgICAgICAgICAJc3ViICAgICVy OWQsJWVheAogICAgM2U2MjoJODkgYzYgICAgICAgICAgICAgICAgCW1vdiAgICAlZWF4LCVlc2kK ICAgIDNlNjQ6CTA5IGYyICAgICAgICAgICAgICAgIAlvciAgICAgJWVzaSwlZWR4CiAgICAzZTY2 OgkwZiA4NSA3ZCAwMSAwMCAwMCAgICAJam5lICAgIDNmZTkgPHZ4bGFuX2J1aWxkX3NrYisweDI1 OT4KfTsKCiNpZmRlZiBORVRfU0tCVUZGX0RBVEFfVVNFU19PRkZTRVQKc3RhdGljIGlubGluZSB1 bnNpZ25lZCBjaGFyICpza2JfZW5kX3BvaW50ZXIoY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYikK ewoJcmV0dXJuIHNrYi0+aGVhZCArIHNrYi0+ZW5kOwogICAgM2U2YzoJNjYgNDUgODUgZDIgICAg ICAgICAgCXRlc3QgICAlcjEwdywlcjEwdwogICAgM2U3MDoJMGYgODUgYWUgMDEgMDAgMDAgICAg CWpuZSAgICA0MDI0IDx2eGxhbl9idWlsZF9za2IrMHgyOTQ+CiAgICAzZTc2Ogk0OCA4NSBkYiAg ICAgICAgICAgICAJdGVzdCAgICVyYngsJXJieAoJaWYgKCFza2ItPmNsb25lZCkKCQlyZXR1cm4g MDsKCglkYXRhcmVmID0gYXRvbWljX3JlYWQoJnNrYl9zaGluZm8oc2tiKS0+ZGF0YXJlZik7Cglk YXRhcmVmID0gKGRhdGFyZWYgJiBTS0JfREFUQVJFRl9NQVNLKSAtIChkYXRhcmVmID4+IFNLQl9E QVRBUkVGX1NISUZUKTsKCXJldHVybiBkYXRhcmVmICE9IDE7CiAgICAzZTc5OgkwZiA4NCA2OSAw MyAwMCAwMCAgICAJamUgICAgIDQxZTggPHZ4bGFuX2J1aWxkX3NrYisweDQ1OD4KICAgIDNlN2Y6 CTQ0IDg5IGVlICAgICAgICAgICAgIAltb3YgICAgJXIxM2QsJWVzaQogICAgM2U4MjoJNDggODkg ZGYgICAgICAgICAgICAgCW1vdiAgICAlcmJ4LCVyZGkKfQoKc3RhdGljIGlubGluZSBpbnQgX19z a2JfY293KHN0cnVjdCBza19idWZmICpza2IsIHVuc2lnbmVkIGludCBoZWFkcm9vbSwKCQkJICAg IGludCBjbG9uZWQpCnsKCWludCBkZWx0YSA9IDA7CiAgICAzZTg1OgllOCAwMCAwMCAwMCAwMCAg ICAgICAJY2FsbHEgIDNlOGEgPHZ4bGFuX2J1aWxkX3NrYisweGZhPgoJaWYgKCFza2ItPmNsb25l ZCkKCQlyZXR1cm4gMDsKCglkYXRhcmVmID0gYXRvbWljX3JlYWQoJnNrYl9zaGluZm8oc2tiKS0+ ZGF0YXJlZik7CglkYXRhcmVmID0gKGRhdGFyZWYgJiBTS0JfREFUQVJFRl9NQVNLKSAtIChkYXRh cmVmID4+IFNLQl9EQVRBUkVGX1NISUZUKTsKCXJldHVybiBkYXRhcmVmICE9IDE7CiAgICAzZThh Ogk4NSBjMCAgICAgICAgICAgICAgICAJdGVzdCAgICVlYXgsJWVheAogICAgM2U4YzoJNDEgODkg YzcgICAgICAgICAgICAgCW1vdiAgICAlZWF4LCVyMTVkCgkJCSAgICBpbnQgY2xvbmVkKQp7Cglp bnQgZGVsdGEgPSAwOwoKCWlmIChoZWFkcm9vbSA+IHNrYl9oZWFkcm9vbShza2IpKQoJCWRlbHRh ID0gaGVhZHJvb20gLSBza2JfaGVhZHJvb20oc2tiKTsKICAgIDNlOGY6CTc0IDQ1ICAgICAgICAg ICAgICAgIAlqZSAgICAgM2VkNiA8dnhsYW5fYnVpbGRfc2tiKzB4MTQ2PgogICAgM2U5MToJNDgg ODkgZGYgICAgICAgICAgICAgCW1vdiAgICAlcmJ4LCVyZGkKCglpZiAoZGVsdGEgfHwgY2xvbmVk KQogICAgM2U5NDoJZTggMDAgMDAgMDAgMDAgICAgICAgCWNhbGxxICAzZTk5IDx2eGxhbl9idWls ZF9za2IrMHgxMDk+CiAgICAzZTk5Ogk0OCA4MyBjNCAxOCAgICAgICAgICAJYWRkICAgICQweDE4 LCVyc3AKICogRm9sbG93aW5nIHRoZSBza2JfdW5zaGFyZSgpIGV4YW1wbGUsIGluIGNhc2Ugb2Yg ZXJyb3IsIHRoZSBjYWxsaW5nIGZ1bmN0aW9uCiAqIGRvZXNuJ3QgaGF2ZSB0byB3b3JyeSBhYm91 dCBmcmVlaW5nIHRoZSBvcmlnaW5hbCBza2IuCiAqLwpzdGF0aWMgaW5saW5lIHN0cnVjdCBza19i dWZmICp2bGFuX2h3YWNjZWxfcHVzaF9pbnNpZGUoc3RydWN0IHNrX2J1ZmYgKnNrYikKewoJaWYg KHNrYl92bGFuX3RhZ19wcmVzZW50KHNrYikpCiAgICAzZTlkOgk0NCA4OSBmOCAgICAgICAgICAg ICAJbW92ICAgICVyMTVkLCVlYXgKICAgIDNlYTA6CTViICAgICAgICAgICAgICAgICAgIAlwb3Ag ICAgJXJieAogICAgM2VhMToJNDEgNWMgICAgICAgICAgICAgICAgCXBvcCAgICAlcjEyCiAgICAz ZWEzOgk0MSA1ZCAgICAgICAgICAgICAgICAJcG9wICAgICVyMTMKICAgIDNlYTU6CTQxIDVlICAg ICAgICAgICAgICAgIAlwb3AgICAgJXIxNAoJZXJyID0gc2tiX2Nvd19oZWFkKHNrYiwgbWluX2hl YWRyb29tKTsKCWlmICh1bmxpa2VseShlcnIpKQoJCWdvdG8gb3V0X2ZyZWU7CgoJc2tiID0gdmxh bl9od2FjY2VsX3B1c2hfaW5zaWRlKHNrYik7CglpZiAoV0FSTl9PTighc2tiKSkKICAgIDNlYTc6 CTQxIDVmICAgICAgICAgICAgICAgIAlwb3AgICAgJXIxNQogICAgM2VhOToJNWQgICAgICAgICAg ICAgICAgICAgCXBvcCAgICAlcmJwCiAgICAzZWFhOgljMyAgICAgICAgICAgICAgICAgICAJcmV0 cSAgIAogICAgM2VhYjoJMGYgYjYgODcgOTEgMDAgMDAgMDAgCW1vdnpibCAweDkxKCVyZGkpLCVl YXgKCQlyZXR1cm4gLUVOT01FTTsKCgllcnIgPSBpcHR1bm5lbF9oYW5kbGVfb2ZmbG9hZHMoc2ti LCB0eXBlKTsKICAgIDNlYjI6CTQ4IDhiIDhmIGQwIDAwIDAwIDAwIAltb3YgICAgMHhkMCglcmRp KSwlcmN4CiAgICAzZWI5Ogk0OCA4YiBiZiBkOCAwMCAwMCAwMCAJbW92ICAgIDB4ZDgoJXJkaSks JXJkaQoJaWYgKGVycikKICAgIDNlYzA6CTgzIGUwIDA2ICAgICAgICAgICAgIAlhbmQgICAgJDB4 NiwlZWF4CgoJc2tiX3NldF9pbm5lcl9wcm90b2NvbChza2IsIGlubmVyX3Byb3RvY29sKTsKCXJl dHVybiAwOwoKb3V0X2ZyZWU6CglrZnJlZV9za2Ioc2tiKTsKICAgIDNlYzM6CTNjIDA2ICAgICAg ICAgICAgICAgIAljbXAgICAgJDB4NiwlYWwKICAgIDNlYzU6CTBmIDg0IDgzIDAyIDAwIDAwICAg IAlqZSAgICAgNDE0ZSA8dnhsYW5fYnVpbGRfc2tiKzB4M2JlPgoJcmV0dXJuIGVycjsKfQogICAg M2VjYjoJNDEgODkgZjkgICAgICAgICAgICAgCW1vdiAgICAlZWRpLCVyOWQKCXNrYl9zZXRfaW5u ZXJfcHJvdG9jb2woc2tiLCBpbm5lcl9wcm90b2NvbCk7CglyZXR1cm4gMDsKCm91dF9mcmVlOgoJ a2ZyZWVfc2tiKHNrYik7CglyZXR1cm4gZXJyOwogICAgM2VjZToJNDEgMjkgYzkgICAgICAgICAg ICAgCXN1YiAgICAlZWN4LCVyOWQKfQogICAgM2VkMToJZTkgMTMgZmYgZmYgZmYgICAgICAgCWpt cHEgICAzZGU5IDx2eGxhbl9idWlsZF9za2IrMHg1OT4KICAgIDNlZDY6CTQ4IDhiIDgzIGQ4IDAw IDAwIDAwIAltb3YgICAgMHhkOCglcmJ4KSwlcmF4CglpbnQgbWluX2hlYWRyb29tOwoJaW50IGVy cjsKCWludCB0eXBlID0gdWRwX3N1bSA/IFNLQl9HU09fVURQX1RVTk5FTF9DU1VNIDogU0tCX0dT T19VRFBfVFVOTkVMOwoJX19iZTE2IGlubmVyX3Byb3RvY29sID0gaHRvbnMoRVRIX1BfVEVCKTsK CglpZiAoKHZ4ZmxhZ3MgJiBWWExBTl9GX1JFTUNTVU1fVFgpICYmCiAgICAzZWRkOgk4MyA4MyA4 MCAwMCAwMCAwMCAwOCAJYWRkbCAgICQweDgsMHg4MCglcmJ4KQogICAgM2VlNDoJNDEgYzEgZWMg MDggICAgICAgICAgCXNociAgICAkMHg4LCVyMTJkCiAgICAzZWU4Ogk0MSA4MSBlNSAwMCA0MCAw MCAwMCAJYW5kICAgICQweDQwMDAsJXIxM2QKICoKICoJUmV0dXJuIHRoZSBudW1iZXIgb2YgYnl0 ZXMgb2YgZnJlZSBzcGFjZSBhdCB0aGUgaGVhZCBvZiBhbiAmc2tfYnVmZi4KICovCnN0YXRpYyBp bmxpbmUgdW5zaWduZWQgaW50IHNrYl9oZWFkcm9vbShjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqc2ti KQp7CglyZXR1cm4gc2tiLT5kYXRhIC0gc2tiLT5oZWFkOwogICAgM2VlZjoJNDggOGQgNTAgZjgg ICAgICAgICAgCWxlYSAgICAtMHg4KCVyYXgpLCVyZHgKICAgIDNlZjM6CTQ4IDg5IDkzIGQ4IDAw IDAwIDAwIAltb3YgICAgJXJkeCwweGQ4KCVyYngpCiAgICAzZWZhOgljNyA0MCBmOCAwOCAwMCAw MCAwMCAJbW92bCAgICQweDgsLTB4OCglcmF4KQogICAgM2YwMToJNDQgODkgNjAgZmMgICAgICAg ICAgCW1vdiAgICAlcjEyZCwtMHg0KCVyYXgpCiAgICAzZjA1Ogk3NCA1NyAgICAgICAgICAgICAg ICAJamUgICAgIDNmNWUgPHZ4bGFuX2J1aWxkX3NrYisweDFjZT4KfQoKdW5zaWduZWQgY2hhciAq c2tiX3B1c2goc3RydWN0IHNrX2J1ZmYgKnNrYiwgdW5zaWduZWQgaW50IGxlbik7CnN0YXRpYyBp bmxpbmUgdW5zaWduZWQgY2hhciAqX19za2JfcHVzaChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCB1bnNp Z25lZCBpbnQgbGVuKQp7Cglza2ItPmRhdGEgLT0gbGVuOwogICAgM2YwNzoJMGYgYjcgOGIgOTgg MDAgMDAgMDAgCW1vdnp3bCAweDk4KCVyYngpLCVlY3gKCXNrYi0+bGVuICArPSBsZW47CiAgICAz ZjBlOgk0OCA4YiA5MyBkOCAwMCAwMCAwMCAJbW92ICAgIDB4ZDgoJXJieCksJXJkeApzdGF0aWMg aW5saW5lIF9fYmUzMiB2eGxhbl92bmlfZmllbGQoX19iZTMyIHZuaSkKewojaWYgZGVmaW5lZChf X0JJR19FTkRJQU4pCglyZXR1cm4gKF9fZm9yY2UgX19iZTMyKSgoX19mb3JjZSB1MzIpdm5pIDw8 IDgpOwojZWxzZQoJcmV0dXJuIChfX2ZvcmNlIF9fYmUzMikoKF9fZm9yY2UgdTMyKXZuaSA+PiA4 KTsKICAgIDNmMTU6CTQ4IDJiIDkzIGQwIDAwIDAwIDAwIAlzdWIgICAgMHhkMCglcmJ4KSwlcmR4 CgoJdnhoID0gKHN0cnVjdCB2eGxhbmhkciAqKSBfX3NrYl9wdXNoKHNrYiwgc2l6ZW9mKCp2eGgp KTsKCXZ4aC0+dnhfZmxhZ3MgPSBWWExBTl9IRl9WTkk7Cgl2eGgtPnZ4X3ZuaSA9IHZ4bGFuX3Zu aV9maWVsZCh2bmkpOwoKCWlmICh0eXBlICYgU0tCX0dTT19UVU5ORUxfUkVNQ1NVTSkgewogICAg M2YxYzoJODMgZTkgMDggICAgICAgICAgICAgCXN1YiAgICAkMHg4LCVlY3gKfQoKdW5zaWduZWQg Y2hhciAqc2tiX3B1c2goc3RydWN0IHNrX2J1ZmYgKnNrYiwgdW5zaWduZWQgaW50IGxlbik7CnN0 YXRpYyBpbmxpbmUgdW5zaWduZWQgY2hhciAqX19za2JfcHVzaChzdHJ1Y3Qgc2tfYnVmZiAqc2ti LCB1bnNpZ25lZCBpbnQgbGVuKQp7Cglza2ItPmRhdGEgLT0gbGVuOwogICAgM2YxZjoJMjkgZDEg ICAgICAgICAgICAgICAgCXN1YiAgICAlZWR4LCVlY3gKICAgIDNmMjE6CWQxIGU5ICAgICAgICAg ICAgICAgIAlzaHIgICAgJWVjeAogICAgM2YyMzoJMGYgYzkgICAgICAgICAgICAgICAgCWJzd2Fw ICAlZWN4CiAgICAzZjI1Ogk4OSBjYSAgICAgICAgICAgICAgICAJbW92ICAgICVlY3gsJWVkeAog ICAgM2YyNzoJODEgYzkgMDAgMDAgMDAgODAgICAgCW9yICAgICAkMHg4MDAwMDAwMCwlZWN4Cgll cnIgPSBpcHR1bm5lbF9oYW5kbGVfb2ZmbG9hZHMoc2tiLCB0eXBlKTsKCWlmIChlcnIpCgkJZ290 byBvdXRfZnJlZTsKCgl2eGggPSAoc3RydWN0IHZ4bGFuaGRyICopIF9fc2tiX3B1c2goc2tiLCBz aXplb2YoKnZ4aCkpOwoJdnhoLT52eF9mbGFncyA9IFZYTEFOX0hGX1ZOSTsKICAgIDNmMmQ6CTY2 IDgzIGJiIDlhIDAwIDAwIDAwIAljbXB3ICAgJDB4NiwweDlhKCVyYngpCiAgICAzZjM0OgkwNiAK CXZ4aC0+dnhfdm5pID0gdnhsYW5fdm5pX2ZpZWxkKHZuaSk7CgoJaWYgKHR5cGUgJiBTS0JfR1NP X1RVTk5FTF9SRU1DU1VNKSB7CiAgICAzZjM1OgljNyA0MCBmOCAwOCAyMCAwMCAwMCAJbW92bCAg ICQweDIwMDgsLTB4OCglcmF4KQoJCW9mZnNldG9mKHN0cnVjdCB0Y3BoZHIsIGNoZWNrKTsKfQoK c3RhdGljIGlubGluZSBfX2JlMzIgdnhsYW5fY29tcHV0ZV9yY28odW5zaWduZWQgaW50IHN0YXJ0 LCB1bnNpZ25lZCBpbnQgb2Zmc2V0KQp7CglfX2JlMzIgdm5pX2ZpZWxkID0gY3B1X3RvX2JlMzIo c3RhcnQgPj4gVlhMQU5fUkNPX1NISUZUKTsKICAgIDNmM2M6CTBmIDQ0IGQxICAgICAgICAgICAg IAljbW92ZSAgJWVjeCwlZWR4CiAgICAzZjNmOgk0NCAwOSBlMiAgICAgICAgICAgICAJb3IgICAg ICVyMTJkLCVlZHgKICAgIDNmNDI6CTg5IDUwIGZjICAgICAgICAgICAgIAltb3YgICAgJWVkeCwt MHg0KCVyYXgpCiAgICAzZjQ1Ogk4YiA5MyBjYyAwMCAwMCAwMCAgICAJbW92ICAgIDB4Y2MoJXJi eCksJWVkeAogICAgM2Y0YjoJNDggOGIgOGIgZDAgMDAgMDAgMDAgCW1vdiAgICAweGQwKCVyYngp LCVyY3gKICAgIDNmNTI6CTY2IDgzIDdjIDExIDAyIDAwICAgIAljbXB3ICAgJDB4MCwweDIoJXJj eCwlcmR4LDEpCgoJaWYgKG9mZnNldCA9PSBvZmZzZXRvZihzdHJ1Y3QgdWRwaGRyLCBjaGVjaykp CgkJdm5pX2ZpZWxkIHw9IFZYTEFOX1JDT19VRFA7CiAgICAzZjU4OgkwZiA4NCAzOSAwMiAwMCAw MCAgICAJamUgICAgIDQxOTcgPHZ4bGFuX2J1aWxkX3NrYisweDQwNz4KICAgIDNmNWU6CTQxIGY3 IGM2IDAwIDA4IDAwIDAwIAl0ZXN0ICAgJDB4ODAwLCVyMTRkCgkJdW5zaWduZWQgaW50IHN0YXJ0 OwoKCQlzdGFydCA9IHNrYl9jaGVja3N1bV9zdGFydF9vZmZzZXQoc2tiKSAtIHNpemVvZihzdHJ1 Y3QgdnhsYW5oZHIpOwoJCXZ4aC0+dnhfdm5pIHw9IHZ4bGFuX2NvbXB1dGVfcmNvKHN0YXJ0LCBz a2ItPmNzdW1fb2Zmc2V0KTsKCQl2eGgtPnZ4X2ZsYWdzIHw9IFZYTEFOX0hGX1JDTzsKICAgIDNm NjU6CTc0IDNiICAgICAgICAgICAgICAgIAlqZSAgICAgM2ZhMiA8dnhsYW5fYnVpbGRfc2tiKzB4 MjEyPgogICAgM2Y2NzoJNDggOGIgN2QgZDAgICAgICAgICAgCW1vdiAgICAtMHgzMCglcmJwKSwl cmRpCiAgICAzZjZiOgk4YiAxNyAgICAgICAgICAgICAgICAJbW92ICAgICglcmRpKSwlZWR4CiAg ICAzZjZkOgk4NSBkMiAgICAgICAgICAgICAgICAJdGVzdCAgICVlZHgsJWVkeAoKCWlmICh0eXBl ICYgU0tCX0dTT19UVU5ORUxfUkVNQ1NVTSkgewoJCXVuc2lnbmVkIGludCBzdGFydDsKCgkJc3Rh cnQgPSBza2JfY2hlY2tzdW1fc3RhcnRfb2Zmc2V0KHNrYikgLSBzaXplb2Yoc3RydWN0IHZ4bGFu aGRyKTsKCQl2eGgtPnZ4X3ZuaSB8PSB2eGxhbl9jb21wdXRlX3JjbyhzdGFydCwgc2tiLT5jc3Vt X29mZnNldCk7CiAgICAzZjZmOgk3NCAzMSAgICAgICAgICAgICAgICAJamUgICAgIDNmYTIgPHZ4 bGFuX2J1aWxkX3NrYisweDIxMj4KICAgIDNmNzE6CTgxIDQ4IGY4IDgwIDAwIDAwIDAwIAlvcmwg ICAgJDB4ODAsLTB4OCglcmF4KQoJcmV0dXJuIGNzdW1fZm9sZChjc3VtX3BhcnRpYWwoY3N1bV9z dGFydCwgcGxlbiwgcGFydGlhbCkpOwp9CgpzdGF0aWMgaW5saW5lIGJvb2wgc2tiX2lzX2dzbyhj b25zdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQp7CglyZXR1cm4gc2tiX3NoaW5mbyhza2IpLT5nc29f c2l6ZTsKICAgIDNmNzg6CThiIDE3ICAgICAgICAgICAgICAgIAltb3YgICAgKCVyZGkpLCVlZHgK ICAgIDNmN2E6CWY3IGMyIDAwIDAwIDQwIDAwICAgIAl0ZXN0ICAgJDB4NDAwMDAwLCVlZHgKICAg IDNmODA6CTc0IDA2ICAgICAgICAgICAgICAgIAlqZSAgICAgM2Y4OCA8dnhsYW5fYnVpbGRfc2ti KzB4MWY4PgoJCXZ4aC0+dnhfZmxhZ3MgfD0gVlhMQU5fSEZfUkNPOwoKCQlpZiAoIXNrYl9pc19n c28oc2tiKSkgewogICAgM2Y4MjoJODAgNDggZjkgNDAgICAgICAgICAgCW9yYiAgICAkMHg0MCwt MHg3KCVyYXgpCiAgICAzZjg2Ogk4YiAxNyAgICAgICAgICAgICAgICAJbW92ICAgICglcmRpKSwl ZWR4CiAgICAzZjg4OglmNyBjMiAwMCAwMCAwOCAwMCAgICAJdGVzdCAgICQweDgwMDAwLCVlZHgK CQkJc2tiLT5pcF9zdW1tZWQgPSBDSEVDS1NVTV9OT05FOwoJCQlza2ItPmVuY2Fwc3VsYXRpb24g PSAwOwoJCX0KCX0KCglpZiAodnhmbGFncyAmIFZYTEFOX0ZfR0JQKQogICAgM2Y4ZToJNzQgMGEg ICAgICAgICAgICAgICAgCWplICAgICAzZjlhIDx2eGxhbl9idWlsZF9za2IrMHgyMGE+CiAgICAz ZjkwOgk0OCA4YiA3ZCBkMCAgICAgICAgICAJbW92ICAgIC0weDMwKCVyYnApLCVyZGkKICAgIDNm OTQ6CTgwIDQ4IGY5IDA4ICAgICAgICAgIAlvcmIgICAgJDB4OCwtMHg3KCVyYXgpCnN0YXRpYyB2 b2lkIHZ4bGFuX2J1aWxkX2dicF9oZHIoc3RydWN0IHZ4bGFuaGRyICp2eGgsIHUzMiB2eGZsYWdz LAoJCQkJc3RydWN0IHZ4bGFuX21ldGFkYXRhICptZCkKewoJc3RydWN0IHZ4bGFuaGRyX2dicCAq Z2JwOwoKCWlmICghbWQtPmdicCkKICAgIDNmOTg6CThiIDE3ICAgICAgICAgICAgICAgIAltb3Yg ICAgKCVyZGkpLCVlZHgKICAgIDNmOWE6CTY2IGMxIGMyIDA4ICAgICAgICAgIAlyb2wgICAgJDB4 OCwlZHgKICAgIDNmOWU6CTY2IDg5IDUwIGZhICAgICAgICAgIAltb3YgICAgJWR4LC0weDYoJXJh eCkKCQlyZXR1cm47CgoJZ2JwID0gKHN0cnVjdCB2eGxhbmhkcl9nYnAgKil2eGg7Cgl2eGgtPnZ4 X2ZsYWdzIHw9IFZYTEFOX0hGX0dCUDsKICAgIDNmYTI6CTQxIDgxIGU2IDAwIDQwIDAwIDAwIAlh bmQgICAgJDB4NDAwMCwlcjE0ZAoKCWlmIChtZC0+Z2JwICYgVlhMQU5fR0JQX0RPTlRfTEVBUk4p CiAgICAzZmE5OgkwZiA4NCAyNSAwMiAwMCAwMCAgICAJamUgICAgIDQxZDQgPHZ4bGFuX2J1aWxk X3NrYisweDQ0ND4KICAgIDNmYWY6CTBmIGI3IDkzIGMwIDAwIDAwIDAwIAltb3Z6d2wgMHhjMCgl cmJ4KSwlZWR4CgkJZ2JwLT5kb250X2xlYXJuID0gMTsKICAgIDNmYjY6CTgwIDQ4IGY4IDA0ICAg ICAgICAgIAlvcmIgICAgJDB4NCwtMHg4KCVyYXgpCgoJaWYgKG1kLT5nYnAgJiBWWExBTl9HQlBf UE9MSUNZX0FQUExJRUQpCiAgICAzZmJhOgk2NiA4MSBmYSA2NSA1OCAgICAgICAJY21wICAgICQw eDU4NjUsJWR4CiAgICAzZmJmOgkwZiA4NCBlNSAwMSAwMCAwMCAgICAJamUgICAgIDQxYWEgPHZ4 bGFuX2J1aWxkX3NrYisweDQxYT4KCQlnYnAtPnBvbGljeV9hcHBsaWVkID0gMTsKICAgIDNmYzU6 CTY2IDgxIGZhIDg2IGRkICAgICAgIAljbXAgICAgJDB4ZGQ4NiwlZHgKCglnYnAtPnBvbGljeV9p ZCA9IGh0b25zKG1kLT5nYnAgJiBWWExBTl9HQlBfSURfTUFTSyk7CiAgICAzZmNhOgkwZiA4NCAz ZCAwMiAwMCAwMCAgICAJamUgICAgIDQyMGQgPHZ4bGFuX2J1aWxkX3NrYisweDQ3ZD4KICAgIDNm ZDA6CTY2IDgzIGZhIDA4ICAgICAgICAgIAljbXAgICAgJDB4OCwlZHgKCQl9Cgl9CgoJaWYgKHZ4 ZmxhZ3MgJiBWWExBTl9GX0dCUCkKCQl2eGxhbl9idWlsZF9nYnBfaGRyKHZ4aCwgdnhmbGFncywg bWQpOwoJaWYgKHZ4ZmxhZ3MgJiBWWExBTl9GX0dQRSkgewogICAgM2ZkNDoJNDEgYmYgYTAgZmYg ZmYgZmYgICAgCW1vdiAgICAkMHhmZmZmZmZhMCwlcjE1ZAogICAgM2ZkYToJMGYgODUgYjEgZmUg ZmYgZmYgICAgCWpuZSAgICAzZTkxIDx2eGxhbl9idWlsZF9za2IrMHgxMDE+CgkJZXJyID0gdnhs YW5fYnVpbGRfZ3BlX2hkcih2eGgsIHZ4ZmxhZ3MsIHNrYi0+cHJvdG9jb2wpOwogICAgM2ZlMDoJ YzYgNDAgZmIgMDEgICAgICAgICAgCW1vdmIgICAkMHgxLC0weDUoJXJheCkKICAgIDNmZTQ6CWU5 IGM1IDAxIDAwIDAwICAgICAgIAlqbXBxICAgNDFhZSA8dnhsYW5fYnVpbGRfc2tiKzB4NDFlPgpz dGF0aWMgaW50IHZ4bGFuX2J1aWxkX2dwZV9oZHIoc3RydWN0IHZ4bGFuaGRyICp2eGgsIHUzMiB2 eGZsYWdzLAoJCQkgICAgICAgX19iZTE2IHByb3RvY29sKQp7CglzdHJ1Y3QgdnhsYW5oZHJfZ3Bl ICpncGUgPSAoc3RydWN0IHZ4bGFuaGRyX2dwZSAqKXZ4aDsKCglncGUtPm5wX2FwcGxpZWQgPSAx OwogICAgM2ZlOToJODMgYzYgM2YgICAgICAgICAgICAgCWFkZCAgICAkMHgzZiwlZXNpCgoJc3dp dGNoIChwcm90b2NvbCkgewogICAgM2ZlYzoJMzEgZDIgICAgICAgICAgICAgICAgCXhvciAgICAl ZWR4LCVlZHgKICAgIDNmZWU6CWI5IDIwIDAwIDA4IDAyICAgICAgIAltb3YgICAgJDB4MjA4MDAy MCwlZWN4CiAgICAzZmYzOgk4MyBlNiBjMCAgICAgICAgICAgICAJYW5kICAgICQweGZmZmZmZmMw LCVlc2kKICAgIDNmZjY6CTQ4IDg5IGRmICAgICAgICAgICAgIAltb3YgICAgJXJieCwlcmRpCiAg ICAzZmY5OgllOCAwMCAwMCAwMCAwMCAgICAgICAJY2FsbHEgIDNmZmUgPHZ4bGFuX2J1aWxkX3Nr YisweDI2ZT4KICAgIDNmZmU6CTg1IGMwICAgICAgICAgICAgICAgIAl0ZXN0ICAgJWVheCwlZWF4 CiAgICA0MDAwOgk0MSA4OSBjNyAgICAgICAgICAgICAJbW92ICAgICVlYXgsJXIxNWQKICAgIDQw MDM6CTBmIDg1IDg4IGZlIGZmIGZmICAgIAlqbmUgICAgM2U5MSA8dnhsYW5fYnVpbGRfc2tiKzB4 MTAxPgoJCXJldHVybiAwOwoJY2FzZSBodG9ucyhFVEhfUF9URUIpOgoJCWdwZS0+bmV4dF9wcm90 b2NvbCA9IFZYTEFOX0dQRV9OUF9FVEhFUk5FVDsKCQlyZXR1cm4gMDsKCX0KCXJldHVybiAtRVBG Tk9TVVBQT1JUOwogICAgNDAwOToJNDQgMGYgYjcgYmIgYWEgMDAgMDAgCW1vdnp3bCAweGFhKCVy YngpLCVyMTVkCiAgICA0MDEwOgkwMCAKCglncGUtPm5wX2FwcGxpZWQgPSAxOwoKCXN3aXRjaCAo cHJvdG9jb2wpIHsKCWNhc2UgaHRvbnMoRVRIX1BfSVApOgoJCWdwZS0+bmV4dF9wcm90b2NvbCA9 IFZYTEFOX0dQRV9OUF9JUFY0OwogICAgNDAxMToJNDUgODkgZmEgICAgICAgICAgICAgCW1vdiAg ICAlcjE1ZCwlcjEwZAogICAgNDAxNDoJNjYgNDEgODEgZTIgMDAgMTAgICAgCWFuZCAgICAkMHgx MDAwLCVyMTB3CgoJaWYgKGhlYWRyb29tID4gc2tiX2hlYWRyb29tKHNrYikpCgkJZGVsdGEgPSBo ZWFkcm9vbSAtIHNrYl9oZWFkcm9vbShza2IpOwoKCWlmIChkZWx0YSB8fCBjbG9uZWQpCgkJcmV0 dXJuIHBza2JfZXhwYW5kX2hlYWQoc2tiLCBBTElHTihkZWx0YSwgTkVUX1NLQl9QQUQpLCAwLAog ICAgNDAxYToJNjYgNDUgODUgZDIgICAgICAgICAgCXRlc3QgICAlcjEwdywlcjEwdwogICAgNDAx ZToJMGYgODQgNTIgZmUgZmYgZmYgICAgCWplICAgICAzZTc2IDx2eGxhbl9idWlsZF9za2IrMHhl Nj4KICAgIDQwMjQ6CTY2IDQxIDgxIGU3IGZmIGVmICAgIAlhbmQgICAgJDB4ZWZmZiwlcjE1dwog ICAgNDAyYToJZjYgODMgOGUgMDAgMDAgMDAgMDEgCXRlc3RiICAkMHgxLDB4OGUoJXJieCkKICAg IDQwMzE6CTQ0IDBmIGI3IDhiIGE4IDAwIDAwIAltb3Z6d2wgMHhhOCglcmJ4KSwlcjlkCiAgICA0 MDM4OgkwMCAKCQkJKyBWWExBTl9ITEVOICsgaXBoZHJfbGVuCgkJCSsgKHNrYl92bGFuX3RhZ19w cmVzZW50KHNrYikgPyBWTEFOX0hMRU4gOiAwKTsKCgkvKiBOZWVkIHNwYWNlIGZvciBuZXcgaGVh ZGVycyAoaW52YWxpZGF0ZXMgaXBoIHB0cikgKi8KCWVyciA9IHNrYl9jb3dfaGVhZChza2IsIG1p bl9oZWFkcm9vbSk7CglpZiAodW5saWtlbHkoZXJyKSkKICAgIDQwMzk6CTBmIDg0IGQ0IDAxIDAw IDAwICAgIAlqZSAgICAgNDIxMyA8dnhsYW5fYnVpbGRfc2tiKzB4NDgzPgogICAgNDAzZjoJOGIg ODMgY2MgMDAgMDAgMDAgICAgCW1vdiAgICAweGNjKCVyYngpLCVlYXgKICAgIDQwNDU6CTQ4IDhi IDhiIGQwIDAwIDAwIDAwIAltb3YgICAgMHhkMCglcmJ4KSwlcmN4CiAgICA0MDRjOgk0OCAwMSBj OCAgICAgICAgICAgICAJYWRkICAgICVyY3gsJXJheAogICAgNDA0ZjoJOGIgNDAgMjAgICAgICAg ICAgICAgCW1vdiAgICAweDIwKCVyYXgpLCVlYXgKICAgIDQwNTI6CTBmIGI3IGQwICAgICAgICAg ICAgIAltb3Z6d2wgJWF4LCVlZHgKICAgIDQwNTU6CWMxIGY4IDEwICAgICAgICAgICAgIAlzYXIg ICAgJDB4MTAsJWVheAogICAgNDA1ODoJMjkgYzIgICAgICAgICAgICAgICAgCXN1YiAgICAlZWF4 LCVlZHgKICovCnN0YXRpYyBpbmxpbmUgaW50IHNrYl9oZWFkZXJfY2xvbmVkKGNvbnN0IHN0cnVj dCBza19idWZmICpza2IpCnsKCWludCBkYXRhcmVmOwoKCWlmICghc2tiLT5jbG9uZWQpCiAgICA0 MDVhOgk4OSBkMCAgICAgICAgICAgICAgICAJbW92ICAgICVlZHgsJWVheAogICAgNDA1YzoJMzEg ZDIgICAgICAgICAgICAgICAgCXhvciAgICAlZWR4LCVlZHgKICAgIDQwNWU6CTgzIGY4IDAxICAg ICAgICAgICAgIAljbXAgICAgJDB4MSwlZWF4CiAqIEZvbGxvd2luZyB0aGUgc2tiX3Vuc2hhcmUo KSBleGFtcGxlLCBpbiBjYXNlIG9mIGVycm9yLCB0aGUgY2FsbGluZyBmdW5jdGlvbgogKiBkb2Vz bid0IGhhdmUgdG8gd29ycnkgYWJvdXQgZnJlZWluZyB0aGUgb3JpZ2luYWwgc2tiLgogKi8Kc3Rh dGljIGlubGluZSBzdHJ1Y3Qgc2tfYnVmZiAqX192bGFuX2h3YWNjZWxfcHVzaF9pbnNpZGUoc3Ry dWN0IHNrX2J1ZmYgKnNrYikKewoJc2tiID0gdmxhbl9pbnNlcnRfdGFnX3NldF9wcm90byhza2Is IHNrYi0+dmxhbl9wcm90bywKICAgIDQwNjE6CTQ4IDhiIDgzIGQ4IDAwIDAwIDAwIAltb3YgICAg MHhkOCglcmJ4KSwlcmF4CiAgICA0MDY4OgkwZiA5NSBjMiAgICAgICAgICAgICAJc2V0bmUgICVk bAogICAgNDA2YjoJMzEgZjYgICAgICAgICAgICAgICAgCXhvciAgICAlZXNpLCVlc2kKICAgIDQw NmQ6CTQ4IDI5IGM4ICAgICAgICAgICAgIAlzdWIgICAgJXJjeCwlcmF4Cn07CgojaWZkZWYgTkVU X1NLQlVGRl9EQVRBX1VTRVNfT0ZGU0VUCnN0YXRpYyBpbmxpbmUgdW5zaWduZWQgY2hhciAqc2ti X2VuZF9wb2ludGVyKGNvbnN0IHN0cnVjdCBza19idWZmICpza2IpCnsKCXJldHVybiBza2ItPmhl YWQgKyBza2ItPmVuZDsKICAgIDQwNzA6CTgzIGY4IDAzICAgICAgICAgICAgIAljbXAgICAgJDB4 MywlZWF4CiAgICA0MDczOgk4OSBjMSAgICAgICAgICAgICAgICAJbW92ICAgICVlYXgsJWVjeAog ICAgNDA3NToJNzcgM2EgICAgICAgICAgICAgICAgCWphICAgICA0MGIxIDx2eGxhbl9idWlsZF9z a2IrMHgzMjE+CiAgICA0MDc3OgllYiAzMSAgICAgICAgICAgICAgICAJam1wICAgIDQwYWEgPHZ4 bGFuX2J1aWxkX3NrYisweDMxYT4KICAgIDQwNzk6CTQxIDM5IGMxICAgICAgICAgICAgIAljbXAg ICAgJWVheCwlcjlkCiAgICA0MDdjOgkwZiA4MiBjMCAwMCAwMCAwMCAgICAJamIgICAgIDQxNDIg PHZ4bGFuX2J1aWxkX3NrYisweDNiMj4KCWlmICghc2tiLT5jbG9uZWQpCgkJcmV0dXJuIDA7CgoJ ZGF0YXJlZiA9IGF0b21pY19yZWFkKCZza2Jfc2hpbmZvKHNrYiktPmRhdGFyZWYpOwoJZGF0YXJl ZiA9IChkYXRhcmVmICYgU0tCX0RBVEFSRUZfTUFTSykgLSAoZGF0YXJlZiA+PiBTS0JfREFUQVJF Rl9TSElGVCk7CglyZXR1cm4gZGF0YXJlZiAhPSAxOwogICAgNDA4MjoJNjYgNDUgODUgZDIgICAg ICAgICAgCXRlc3QgICAlcjEwdywlcjEwdwogICAgNDA4NjoJMGYgODQgZWEgZmQgZmYgZmYgICAg CWplICAgICAzZTc2IDx2eGxhbl9idWlsZF9za2IrMHhlNj4KICAgIDQwOGM6CTQ0IDBmIGI3IDhi IGE4IDAwIDAwIAltb3Z6d2wgMHhhOCglcmJ4KSwlcjlkCiAgICA0MDkzOgkwMCAKICoKICoJUmV0 dXJuIHRoZSBudW1iZXIgb2YgYnl0ZXMgb2YgZnJlZSBzcGFjZSBhdCB0aGUgaGVhZCBvZiBhbiAm c2tfYnVmZi4KICovCnN0YXRpYyBpbmxpbmUgdW5zaWduZWQgaW50IHNrYl9oZWFkcm9vbShjb25z dCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQp7CglyZXR1cm4gc2tiLT5kYXRhIC0gc2tiLT5oZWFkOwog ICAgNDA5NDoJNjYgNDEgODEgZTcgZmYgZWYgICAgCWFuZCAgICAkMHhlZmZmLCVyMTV3CglpZiAo IXNrYi0+Y2xvbmVkKQoJCXJldHVybiAwOwoKCWRhdGFyZWYgPSBhdG9taWNfcmVhZCgmc2tiX3No aW5mbyhza2IpLT5kYXRhcmVmKTsKCWRhdGFyZWYgPSAoZGF0YXJlZiAmIFNLQl9EQVRBUkVGX01B U0spIC0gKGRhdGFyZWYgPj4gU0tCX0RBVEFSRUZfU0hJRlQpOwoJcmV0dXJuIGRhdGFyZWYgIT0g MTsKICAgIDQwOWE6CTQ4IDJiIGJiIGQwIDAwIDAwIDAwIAlzdWIgICAgMHhkMCglcmJ4KSwlcmRp CnN0YXRpYyBpbmxpbmUgaW50IF9fc2tiX2NvdyhzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCB1bnNpZ25l ZCBpbnQgaGVhZHJvb20sCgkJCSAgICBpbnQgY2xvbmVkKQp7CglpbnQgZGVsdGEgPSAwOwoKCWlm IChoZWFkcm9vbSA+IHNrYl9oZWFkcm9vbShza2IpKQogICAgNDBhMToJODMgZmYgMDMgICAgICAg ICAgICAgCWNtcCAgICAkMHgzLCVlZGkKICoKICoJUmV0dXJuIHRoZSBudW1iZXIgb2YgYnl0ZXMg b2YgZnJlZSBzcGFjZSBhdCB0aGUgaGVhZCBvZiBhbiAmc2tfYnVmZi4KICovCnN0YXRpYyBpbmxp bmUgdW5zaWduZWQgaW50IHNrYl9oZWFkcm9vbShjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQp7 CglyZXR1cm4gc2tiLT5kYXRhIC0gc2tiLT5oZWFkOwogICAgNDBhNDoJODkgZjkgICAgICAgICAg ICAgICAgCW1vdiAgICAlZWRpLCVlY3gKc3RhdGljIGlubGluZSBpbnQgX19za2JfY293KHN0cnVj dCBza19idWZmICpza2IsIHVuc2lnbmVkIGludCBoZWFkcm9vbSwKCQkJICAgIGludCBjbG9uZWQp CnsKCWludCBkZWx0YSA9IDA7CgoJaWYgKGhlYWRyb29tID4gc2tiX2hlYWRyb29tKHNrYikpCiAg ICA0MGE2Ogk3NyAzMiAgICAgICAgICAgICAgICAJamEgICAgIDQwZGEgPHZ4bGFuX2J1aWxkX3Nr YisweDM0YT4KICAgIDQwYTg6CTMxIGQyICAgICAgICAgICAgICAgIAl4b3IgICAgJWVkeCwlZWR4 CiAgICA0MGFhOgliZSAwNCAwMCAwMCAwMCAgICAgICAJbW92ICAgICQweDQsJWVzaQogICAgNDBh ZjoJMjkgY2UgICAgICAgICAgICAgICAgCXN1YiAgICAlZWN4LCVlc2kKICAgIDQwYjE6CTA5IGYy ICAgICAgICAgICAgICAgIAlvciAgICAgJWVzaSwlZWR4CiAqIEZvbGxvd2luZyB0aGUgc2tiX3Vu c2hhcmUoKSBleGFtcGxlLCBpbiBjYXNlIG9mIGVycm9yLCB0aGUgY2FsbGluZyBmdW5jdGlvbgog KiBkb2Vzbid0IGhhdmUgdG8gd29ycnkgYWJvdXQgZnJlZWluZyB0aGUgb3JpZ2luYWwgc2tiLgog Ki8Kc3RhdGljIGlubGluZSBzdHJ1Y3Qgc2tfYnVmZiAqdmxhbl9od2FjY2VsX3B1c2hfaW5zaWRl KHN0cnVjdCBza19idWZmICpza2IpCnsKCWlmIChza2Jfdmxhbl90YWdfcHJlc2VudChza2IpKQog ICAgNDBiMzoJNzQgMjUgICAgICAgICAgICAgICAgCWplICAgICA0MGRhIDx2eGxhbl9idWlsZF9z a2IrMHgzNGE+CiAgICA0MGI1Ogk4MyBjNiAzZiAgICAgICAgICAgICAJYWRkICAgICQweDNmLCVl c2kKICAgIDQwYjg6CTMxIGQyICAgICAgICAgICAgICAgIAl4b3IgICAgJWVkeCwlZWR4CiAgICA0 MGJhOgliOSAyMCAwMCAwOCAwMiAgICAgICAJbW92ICAgICQweDIwODAwMjAsJWVjeAogKiBGb2xs b3dpbmcgdGhlIHNrYl91bnNoYXJlKCkgZXhhbXBsZSwgaW4gY2FzZSBvZiBlcnJvciwgdGhlIGNh bGxpbmcgZnVuY3Rpb24KICogZG9lc24ndCBoYXZlIHRvIHdvcnJ5IGFib3V0IGZyZWVpbmcgdGhl IG9yaWdpbmFsIHNrYi4KICovCnN0YXRpYyBpbmxpbmUgc3RydWN0IHNrX2J1ZmYgKl9fdmxhbl9o d2FjY2VsX3B1c2hfaW5zaWRlKHN0cnVjdCBza19idWZmICpza2IpCnsKCXNrYiA9IHZsYW5faW5z ZXJ0X3RhZ19zZXRfcHJvdG8oc2tiLCBza2ItPnZsYW5fcHJvdG8sCiAgICA0MGJmOgk4MyBlNiBj MCAgICAgICAgICAgICAJYW5kICAgICQweGZmZmZmZmMwLCVlc2kKICAgIDQwYzI6CTQ4IDg5IGRm ICAgICAgICAgICAgIAltb3YgICAgJXJieCwlcmRpCiAgICA0MGM1Ogk0NCA4OSA0ZCBjOCAgICAg ICAgICAJbW92ICAgICVyOWQsLTB4MzgoJXJicCkKICAgIDQwYzk6CWU4IDAwIDAwIDAwIDAwICAg ICAgIAljYWxscSAgNDBjZSA8dnhsYW5fYnVpbGRfc2tiKzB4MzNlPgogKgogKglSZXR1cm4gdGhl IG51bWJlciBvZiBieXRlcyBvZiBmcmVlIHNwYWNlIGF0IHRoZSBoZWFkIG9mIGFuICZza19idWZm LgogKi8Kc3RhdGljIGlubGluZSB1bnNpZ25lZCBpbnQgc2tiX2hlYWRyb29tKGNvbnN0IHN0cnVj dCBza19idWZmICpza2IpCnsKCXJldHVybiBza2ItPmRhdGEgLSBza2ItPmhlYWQ7CiAgICA0MGNl Ogk4NSBjMCAgICAgICAgICAgICAgICAJdGVzdCAgICVlYXgsJWVheAogICAgNDBkMDoJNDQgOGIg NGQgYzggICAgICAgICAgCW1vdiAgICAtMHgzOCglcmJwKSwlcjlkCiAgICA0MGQ0OgkwZiA4OCAw MSAwMSAwMCAwMCAgICAJanMgICAgIDQxZGIgPHZ4bGFuX2J1aWxkX3NrYisweDQ0Yj4KCQkJICAg IGludCBjbG9uZWQpCnsKCWludCBkZWx0YSA9IDA7CgoJaWYgKGhlYWRyb29tID4gc2tiX2hlYWRy b29tKHNrYikpCgkJZGVsdGEgPSBoZWFkcm9vbSAtIHNrYl9oZWFkcm9vbShza2IpOwogICAgNDBk YToJYmUgMDQgMDAgMDAgMDAgICAgICAgCW1vdiAgICAkMHg0LCVlc2kKICAgIDQwZGY6CTQ4IDg5 IGRmICAgICAgICAgICAgIAltb3YgICAgJXJieCwlcmRpCgoJaWYgKGRlbHRhIHx8IGNsb25lZCkK ICAgIDQwZTI6CTQ0IDg5IDRkIGM0ICAgICAgICAgIAltb3YgICAgJXI5ZCwtMHgzYyglcmJwKQoJ CXJldHVybiBwc2tiX2V4cGFuZF9oZWFkKHNrYiwgQUxJR04oZGVsdGEsIE5FVF9TS0JfUEFEKSwg MCwKICAgIDQwZTY6CWU4IDAwIDAwIDAwIDAwICAgICAgIAljYWxscSAgNDBlYiA8dnhsYW5fYnVp bGRfc2tiKzB4MzViPgogICAgNDBlYjoJNDggOGIgYmIgZDggMDAgMDAgMDAgCW1vdiAgICAweGQ4 KCVyYngpLCVyZGkKICAgIDQwZjI6CWJhIDBjIDAwIDAwIDAwICAgICAgIAltb3YgICAgJDB4Yywl ZWR4CiAgICA0MGY3Ogk0OCA4OSA0NSBjOCAgICAgICAgICAJbW92ICAgICVyYXgsLTB4MzgoJXJi cCkKICAgIDQwZmI6CTY2IDQxIGMxIGM3IDA4ICAgICAgIAlyb2wgICAgJDB4OCwlcjE1dwpzdGF0 aWMgaW5saW5lIGludCBfX3ZsYW5faW5zZXJ0X3RhZyhzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAoJCQkJ ICAgIF9fYmUxNiB2bGFuX3Byb3RvLCB1MTYgdmxhbl90Y2kpCnsKCXN0cnVjdCB2bGFuX2V0aGhk ciAqdmV0aDsKCglpZiAoc2tiX2Nvd19oZWFkKHNrYiwgVkxBTl9ITEVOKSA8IDApCiAgICA0MTAw Ogk0OCA4ZCA3NyAwNCAgICAgICAgICAJbGVhICAgIDB4NCglcmRpKSwlcnNpCiAgICA0MTA0Ogll OCAwMCAwMCAwMCAwMCAgICAgICAJY2FsbHEgIDQxMDkgPHZ4bGFuX2J1aWxkX3NrYisweDM3OT4K ICAgIDQxMDk6CTQ4IDhiIDRkIGM4ICAgICAgICAgIAltb3YgICAgLTB4MzgoJXJicCksJXJjeAoJ CXJldHVybiAtRU5PTUVNOwoKCXZldGggPSAoc3RydWN0IHZsYW5fZXRoaGRyICopc2tiX3B1c2go c2tiLCBWTEFOX0hMRU4pOwogICAgNDEwZDoJNDQgOGIgNGQgYzQgICAgICAgICAgCW1vdiAgICAt MHgzYyglcmJwKSwlcjlkCiAgICA0MTExOgk2NiA4MyBhYiBjNiAwMCAwMCAwMCAJc3VidyAgICQw eDQsMHhjNiglcmJ4KQogICAgNDExODoJMDQgCiAgICA0MTE5Ogk0OCA4NSBkYiAgICAgICAgICAg ICAJdGVzdCAgICVyYngsJXJieAoKCS8qIE1vdmUgdGhlIG1hYyBhZGRyZXNzZXMgdG8gdGhlIGJl Z2lubmluZyBvZiB0aGUgbmV3IGhlYWRlci4gKi8KCW1lbW1vdmUoc2tiLT5kYXRhLCBza2ItPmRh dGEgKyBWTEFOX0hMRU4sIDIgKiBFVEhfQUxFTik7CiAgICA0MTFjOgk2NiA0NCA4OSA0OSAwYyAg ICAgICAJbW92ICAgICVyOXcsMHhjKCVyY3gpCiAgICA0MTIxOgk2NiA0NCA4OSA3OSAwZSAgICAg ICAJbW92ICAgICVyMTV3LDB4ZSglcmN4KQogICAgNDEyNjoJMGYgODQgYmMgMDAgMDAgMDAgICAg CWplICAgICA0MWU4IDx2eGxhbl9idWlsZF9za2IrMHg0NTg+CgoJLyogZmlyc3QsIHRoZSBldGhl cm5ldCB0eXBlICovCgl2ZXRoLT5oX3ZsYW5fcHJvdG8gPSB2bGFuX3Byb3RvOwoKCS8qIG5vdywg dGhlIFRDSSAqLwoJdmV0aC0+aF92bGFuX1RDSSA9IGh0b25zKHZsYW5fdGNpKTsKICAgIDQxMmM6 CTMxIGM5ICAgICAgICAgICAgICAgIAl4b3IgICAgJWVjeCwlZWN4CiAgICA0MTJlOgk2NiA0NCA4 OSA4YiBjMCAwMCAwMCAJbW92ICAgICVyOXcsMHhjMCglcmJ4KQogICAgNDEzNToJMDAgCgkJcmV0 dXJuIC1FTk9NRU07CgoJdmV0aCA9IChzdHJ1Y3Qgdmxhbl9ldGhoZHIgKilza2JfcHVzaChza2Is IFZMQU5fSExFTik7CgoJLyogTW92ZSB0aGUgbWFjIGFkZHJlc3NlcyB0byB0aGUgYmVnaW5uaW5n IG9mIHRoZSBuZXcgaGVhZGVyLiAqLwoJbWVtbW92ZShza2ItPmRhdGEsIHNrYi0+ZGF0YSArIFZM QU5fSExFTiwgMiAqIEVUSF9BTEVOKTsKICAgIDQxMzY6CTY2IDg5IDhiIGFhIDAwIDAwIDAwIAlt b3YgICAgJWN4LDB4YWEoJXJieCkKCXNrYi0+bWFjX2hlYWRlciAtPSBWTEFOX0hMRU47CgoJLyog Zmlyc3QsIHRoZSBldGhlcm5ldCB0eXBlICovCgl2ZXRoLT5oX3ZsYW5fcHJvdG8gPSB2bGFuX3By b3RvOwogICAgNDEzZDoJZTkgM2QgZmQgZmYgZmYgICAgICAgCWptcHEgICAzZTdmIDx2eGxhbl9i dWlsZF9za2IrMHhlZj4KCgl2ZXRoID0gKHN0cnVjdCB2bGFuX2V0aGhkciAqKXNrYl9wdXNoKHNr YiwgVkxBTl9ITEVOKTsKCgkvKiBNb3ZlIHRoZSBtYWMgYWRkcmVzc2VzIHRvIHRoZSBiZWdpbm5p bmcgb2YgdGhlIG5ldyBoZWFkZXIuICovCgltZW1tb3ZlKHNrYi0+ZGF0YSwgc2tiLT5kYXRhICsg VkxBTl9ITEVOLCAyICogRVRIX0FMRU4pOwoJc2tiLT5tYWNfaGVhZGVyIC09IFZMQU5fSExFTjsK ICAgIDQxNDI6CTQ0IDI5IGM4ICAgICAgICAgICAgIAlzdWIgICAgJXI5ZCwlZWF4CiAgICA0MTQ1 OgkzMSBkMiAgICAgICAgICAgICAgICAJeG9yICAgICVlZHgsJWVkeAogICAgNDE0NzoJODkgYzYg ICAgICAgICAgICAgICAgCW1vdiAgICAlZWF4LCVlc2kKc3RhdGljIGlubGluZSBzdHJ1Y3Qgc2tf YnVmZiAqdmxhbl9pbnNlcnRfdGFnX3NldF9wcm90byhzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAoJCQkJ CQkJX19iZTE2IHZsYW5fcHJvdG8sCgkJCQkJCQl1MTYgdmxhbl90Y2kpCnsKCXNrYiA9IHZsYW5f aW5zZXJ0X3RhZyhza2IsIHZsYW5fcHJvdG8sIHZsYW5fdGNpKTsKCWlmIChza2IpCiAgICA0MTQ5 OgllOSAxNiBmZCBmZiBmZiAgICAgICAJam1wcSAgIDNlNjQgPHZ4bGFuX2J1aWxkX3NrYisweGQ0 PgoJLyogTW92ZSB0aGUgbWFjIGFkZHJlc3NlcyB0byB0aGUgYmVnaW5uaW5nIG9mIHRoZSBuZXcg aGVhZGVyLiAqLwoJbWVtbW92ZShza2ItPmRhdGEsIHNrYi0+ZGF0YSArIFZMQU5fSExFTiwgMiAq IEVUSF9BTEVOKTsKCXNrYi0+bWFjX2hlYWRlciAtPSBWTEFOX0hMRU47CgoJLyogZmlyc3QsIHRo ZSBldGhlcm5ldCB0eXBlICovCgl2ZXRoLT5oX3ZsYW5fcHJvdG8gPSB2bGFuX3Byb3RvOwogICAg NDE0ZToJMGYgYjcgODMgOTggMDAgMDAgMDAgCW1vdnp3bCAweDk4KCVyYngpLCVlYXgKCgkvKiBu b3csIHRoZSBUQ0kgKi8KCXZldGgtPmhfdmxhbl9UQ0kgPSBodG9ucyh2bGFuX3RjaSk7CiAgICA0 MTU1Ogk0OSA4OSBmYSAgICAgICAgICAgICAJbW92ICAgICVyZGksJXIxMApzdGF0aWMgaW5saW5l IHN0cnVjdCBza19idWZmICp2bGFuX2luc2VydF90YWdfc2V0X3Byb3RvKHN0cnVjdCBza19idWZm ICpza2IsCgkJCQkJCQlfX2JlMTYgdmxhbl9wcm90bywKCQkJCQkJCXUxNiB2bGFuX3RjaSkKewoJ c2tiID0gdmxhbl9pbnNlcnRfdGFnKHNrYiwgdmxhbl9wcm90bywgdmxhbl90Y2kpOwoJaWYgKHNr YikKICAgIDQxNTg6CTQ5IDI5IGNhICAgICAgICAgICAgIAlzdWIgICAgJXJjeCwlcjEwCiAgICA0 MTViOgk0NSA4OSBkMSAgICAgICAgICAgICAJbW92ICAgICVyMTBkLCVyOWQKCQlza2ItPnByb3Rv Y29sID0gdmxhbl9wcm90bzsKICAgIDQxNWU6CTQ0IDI5IGQwICAgICAgICAgICAgIAlzdWIgICAg JXIxMGQsJWVheAogICAgNDE2MToJM2QgZmUgMDAgMDAgMDAgICAgICAgCWNtcCAgICAkMHhmZSwl ZWF4CnN0YXRpYyBpbmxpbmUgc3RydWN0IHNrX2J1ZmYgKl9fdmxhbl9od2FjY2VsX3B1c2hfaW5z aWRlKHN0cnVjdCBza19idWZmICpza2IpCnsKCXNrYiA9IHZsYW5faW5zZXJ0X3RhZ19zZXRfcHJv dG8oc2tiLCBza2ItPnZsYW5fcHJvdG8sCgkJCQkJc2tiX3ZsYW5fdGFnX2dldChza2IpKTsKCWlm IChsaWtlbHkoc2tiKSkKCQlza2ItPnZsYW5fdGNpID0gMDsKICAgIDQxNjY6CTBmIDhmIDdkIGZj IGZmIGZmICAgIAlqZyAgICAgM2RlOSA8dnhsYW5fYnVpbGRfc2tiKzB4NTk+CiAgICA0MTZjOglh OCAwMSAgICAgICAgICAgICAgICAJdGVzdCAgICQweDEsJWFsCiAgICA0MTZlOgkwZiA4NSA3NSBm YyBmZiBmZiAgICAJam5lICAgIDNkZTkgPHZ4bGFuX2J1aWxkX3NrYisweDU5PgoJCQkgICAgaW50 IGNsb25lZCkKewoJaW50IGRlbHRhID0gMDsKCglpZiAoaGVhZHJvb20gPiBza2JfaGVhZHJvb20o c2tiKSkKCQlkZWx0YSA9IGhlYWRyb29tIC0gc2tiX2hlYWRyb29tKHNrYik7CiAgICA0MTc0Ogkw ZiBiNyA4MyA5YSAwMCAwMCAwMCAJbW92endsIDB4OWEoJXJieCksJWVheAogICAgNDE3YjoJNjYg ODMgZjggMDYgICAgICAgICAgCWNtcCAgICAkMHg2LCVheAoJfQp9CgpzdGF0aWMgaW5saW5lIGlu dCBza2JfY2hlY2tzdW1fc3RhcnRfb2Zmc2V0KGNvbnN0IHN0cnVjdCBza19idWZmICpza2IpCnsK CXJldHVybiBza2ItPmNzdW1fc3RhcnQgLSBza2JfaGVhZHJvb20oc2tiKTsKICAgIDQxN2Y6CTc0 IDBhICAgICAgICAgICAgICAgIAlqZSAgICAgNDE4YiA8dnhsYW5fYnVpbGRfc2tiKzB4M2ZiPgog ICAgNDE4MToJNjYgODMgZjggMTAgICAgICAgICAgCWNtcCAgICAkMHgxMCwlYXgKICoKICoJUmV0 dXJuIHRoZSBudW1iZXIgb2YgYnl0ZXMgb2YgZnJlZSBzcGFjZSBhdCB0aGUgaGVhZCBvZiBhbiAm c2tfYnVmZi4KICovCnN0YXRpYyBpbmxpbmUgdW5zaWduZWQgaW50IHNrYl9oZWFkcm9vbShjb25z dCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQp7CglyZXR1cm4gc2tiLT5kYXRhIC0gc2tiLT5oZWFkOwog ICAgNDE4NToJMGYgODUgNWUgZmMgZmYgZmYgICAgCWpuZSAgICAzZGU5IDx2eGxhbl9idWlsZF9z a2IrMHg1OT4KICAgIDQxOGI6CTQxIDgxIGNkIDAwIDQwIDAwIDAwIAlvciAgICAgJDB4NDAwMCwl cjEzZAoKCWlmICgodnhmbGFncyAmIFZYTEFOX0ZfUkVNQ1NVTV9UWCkgJiYKCSAgICBza2ItPmlw X3N1bW1lZCA9PSBDSEVDS1NVTV9QQVJUSUFMKSB7CgkJaW50IGNzdW1fc3RhcnQgPSBza2JfY2hl Y2tzdW1fc3RhcnRfb2Zmc2V0KHNrYik7CgoJCWlmIChjc3VtX3N0YXJ0IDw9IFZYTEFOX01BWF9S RU1DU1VNX1NUQVJUICYmCiAgICA0MTkyOgllOSA1MiBmYyBmZiBmZiAgICAgICAJam1wcSAgIDNk ZTkgPHZ4bGFuX2J1aWxkX3NrYisweDU5PgogICAgNDE5NzoJODAgYTMgOTEgMDAgMDAgMDAgZjkg CWFuZGIgICAkMHhmOSwweDkxKCVyYngpCiAgICA0MTllOgk4MCBhMyA5MiAwMCAwMCAwMCBmZCAJ YW5kYiAgICQweGZkLDB4OTIoJXJieCkKCQkgICAgIShjc3VtX3N0YXJ0ICYgVlhMQU5fUkNPX1NI SUZUX01BU0spICYmCgkJICAgIChza2ItPmNzdW1fb2Zmc2V0ID09IG9mZnNldG9mKHN0cnVjdCB1 ZHBoZHIsIGNoZWNrKSB8fAogICAgNDFhNToJZTkgYjQgZmQgZmYgZmYgICAgICAgCWptcHEgICAz ZjVlIDx2eGxhbl9idWlsZF9za2IrMHgxY2U+CiAgICA0MWFhOgljNiA0MCBmYiAwMyAgICAgICAg ICAJbW92YiAgICQweDMsLTB4NSglcmF4KQoJaWYgKCh2eGZsYWdzICYgVlhMQU5fRl9SRU1DU1VN X1RYKSAmJgoJICAgIHNrYi0+aXBfc3VtbWVkID09IENIRUNLU1VNX1BBUlRJQUwpIHsKCQlpbnQg Y3N1bV9zdGFydCA9IHNrYl9jaGVja3N1bV9zdGFydF9vZmZzZXQoc2tiKTsKCgkJaWYgKGNzdW1f c3RhcnQgPD0gVlhMQU5fTUFYX1JFTUNTVU1fU1RBUlQgJiYKCQkgICAgIShjc3VtX3N0YXJ0ICYg VlhMQU5fUkNPX1NISUZUX01BU0spICYmCiAgICA0MWFlOgkwZiBiNyA4MyBjMCAwMCAwMCAwMCAJ bW92endsIDB4YzAoJXJieCksJWVheAogICAgNDFiNToJNjYgODkgODMgYjggMDAgMDAgMDAgCW1v diAgICAlYXgsMHhiOCglcmJ4KQoJCSAgICAoc2tiLT5jc3VtX29mZnNldCA9PSBvZmZzZXRvZihz dHJ1Y3QgdWRwaGRyLCBjaGVjaykgfHwKCQkgICAgIHNrYi0+Y3N1bV9vZmZzZXQgPT0gb2Zmc2V0 b2Yoc3RydWN0IHRjcGhkciwgY2hlY2spKSkKCQkJdHlwZSB8PSBTS0JfR1NPX1RVTk5FTF9SRU1D U1VNOwogICAgNDFiYzoJODAgYTMgOTMgMDAgMDAgMDAgZjcgCWFuZGIgICAkMHhmNywweDkzKCVy YngpCiAgICA0MWMzOgk0OCA4MyBjNCAxOCAgICAgICAgICAJYWRkICAgICQweDE4LCVyc3AKCQlz dGFydCA9IHNrYl9jaGVja3N1bV9zdGFydF9vZmZzZXQoc2tiKSAtIHNpemVvZihzdHJ1Y3Qgdnhs YW5oZHIpOwoJCXZ4aC0+dnhfdm5pIHw9IHZ4bGFuX2NvbXB1dGVfcmNvKHN0YXJ0LCBza2ItPmNz dW1fb2Zmc2V0KTsKCQl2eGgtPnZ4X2ZsYWdzIHw9IFZYTEFOX0hGX1JDTzsKCgkJaWYgKCFza2Jf aXNfZ3NvKHNrYikpIHsKCQkJc2tiLT5pcF9zdW1tZWQgPSBDSEVDS1NVTV9OT05FOwogICAgNDFj NzoJNWIgICAgICAgICAgICAgICAgICAgCXBvcCAgICAlcmJ4CiAgICA0MWM4OgkzMSBjMCAgICAg ICAgICAgICAgICAJeG9yICAgICVlYXgsJWVheAogICAgNDFjYToJNDEgNWMgICAgICAgICAgICAg ICAgCXBvcCAgICAlcjEyCiAgICA0MWNjOgk0MSA1ZCAgICAgICAgICAgICAgICAJcG9wICAgICVy MTMKCQkJc2tiLT5lbmNhcHN1bGF0aW9uID0gMDsKICAgIDQxY2U6CTQxIDVlICAgICAgICAgICAg ICAgIAlwb3AgICAgJXIxNAogICAgNDFkMDoJNDEgNWYgICAgICAgICAgICAgICAgCXBvcCAgICAl cjE1CiAgICA0MWQyOgk1ZCAgICAgICAgICAgICAgICAgICAJcG9wICAgICVyYnAKICAgIDQxZDM6 CWMzICAgICAgICAgICAgICAgICAgIAlyZXRxICAgCiAgICA0MWQ0OgliOCA2NSA1OCAwMCAwMCAg ICAgICAJbW92ICAgICQweDU4NjUsJWVheAogICAgNDFkOToJZWIgZGEgICAgICAgICAgICAgICAg CWptcCAgICA0MWI1IDx2eGxhbl9idWlsZF9za2IrMHg0MjU+CgkJcmV0dXJuIDA7CgljYXNlIGh0 b25zKEVUSF9QX0lQVjYpOgoJCWdwZS0+bmV4dF9wcm90b2NvbCA9IFZYTEFOX0dQRV9OUF9JUFY2 OwoJCXJldHVybiAwOwoJY2FzZSBodG9ucyhFVEhfUF9URUIpOgoJCWdwZS0+bmV4dF9wcm90b2Nv bCA9IFZYTEFOX0dQRV9OUF9FVEhFUk5FVDsKICAgIDQxZGI6CWJlIDAxIDAwIDAwIDAwICAgICAg IAltb3YgICAgJDB4MSwlZXNpCgkJdnhsYW5fYnVpbGRfZ2JwX2hkcih2eGgsIHZ4ZmxhZ3MsIG1k KTsKCWlmICh2eGZsYWdzICYgVlhMQU5fRl9HUEUpIHsKCQllcnIgPSB2eGxhbl9idWlsZF9ncGVf aGRyKHZ4aCwgdnhmbGFncywgc2tiLT5wcm90b2NvbCk7CgkJaWYgKGVyciA8IDApCgkJCWdvdG8g b3V0X2ZyZWU7CgkJaW5uZXJfcHJvdG9jb2wgPSBza2ItPnByb3RvY29sOwogICAgNDFlMDoJNDgg ODkgZGYgICAgICAgICAgICAgCW1vdiAgICAlcmJ4LCVyZGkKICAgIDQxZTM6CWU4IDAwIDAwIDAw IDAwICAgICAgIAljYWxscSAgNDFlOCA8dnhsYW5fYnVpbGRfc2tiKzB4NDU4PgojZGVmaW5lIEVO Q0FQX1RZUEVfSVBQUk9UTwkxCgpzdGF0aWMgaW5saW5lIHZvaWQgc2tiX3NldF9pbm5lcl9wcm90 b2NvbChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAoJCQkJCSAgX19iZTE2IHByb3RvY29sKQp7Cglza2It PmlubmVyX3Byb3RvY29sID0gcHJvdG9jb2w7CiAgICA0MWU4OgliZSBkNSAwNiAwMCAwMCAgICAg ICAJbW92ICAgICQweDZkNSwlZXNpCglza2ItPmlubmVyX3Byb3RvY29sX3R5cGUgPSBFTkNBUF9U WVBFX0VUSEVSOwogICAgNDFlZDoJNDggYzcgYzcgMDAgMDAgMDAgMDAgCW1vdiAgICAkMHgwLCVy ZGkKCXJldHVybiAwOwoKb3V0X2ZyZWU6CglrZnJlZV9za2Ioc2tiKTsKCXJldHVybiBlcnI7Cn0K ICAgIDQxZjQ6CWU4IDAwIDAwIDAwIDAwICAgICAgIAljYWxscSAgNDFmOSA8dnhsYW5fYnVpbGRf c2tiKzB4NDY5PgoJCQlnb3RvIG91dF9mcmVlOwoJCWlubmVyX3Byb3RvY29sID0gc2tiLT5wcm90 b2NvbDsKCX0KCglza2Jfc2V0X2lubmVyX3Byb3RvY29sKHNrYiwgaW5uZXJfcHJvdG9jb2wpOwoJ cmV0dXJuIDA7CiAgICA0MWY5Ogk0OCA4MyBjNCAxOCAgICAgICAgICAJYWRkICAgICQweDE4LCVy c3AKCm91dF9mcmVlOgoJa2ZyZWVfc2tiKHNrYik7CglyZXR1cm4gZXJyOwp9CiAgICA0MWZkOgli OCBmNCBmZiBmZiBmZiAgICAgICAJbW92ICAgICQweGZmZmZmZmY0LCVlYXgKICAgIDQyMDI6CTVi ICAgICAgICAgICAgICAgICAgIAlwb3AgICAgJXJieAogICAgNDIwMzoJNDEgNWMgICAgICAgICAg ICAgICAgCXBvcCAgICAlcjEyCnsKCXN0cnVjdCB2eGxhbmhkciAqdnhoOwoJaW50IG1pbl9oZWFk cm9vbTsKCWludCBlcnI7CglpbnQgdHlwZSA9IHVkcF9zdW0gPyBTS0JfR1NPX1VEUF9UVU5ORUxf Q1NVTSA6IFNLQl9HU09fVURQX1RVTk5FTDsKCV9fYmUxNiBpbm5lcl9wcm90b2NvbCA9IGh0b25z KEVUSF9QX1RFQik7CiAgICA0MjA1Ogk0MSA1ZCAgICAgICAgICAgICAgICAJcG9wICAgICVyMTMK ICAgIDQyMDc6CTQxIDVlICAgICAgICAgICAgICAgIAlwb3AgICAgJXIxNAogICAgNDIwOToJNDEg NWYgICAgICAgICAgICAgICAgCXBvcCAgICAlcjE1CglfX2Rldl9rZnJlZV9za2JfaXJxKHNrYiwg U0tCX1JFQVNPTl9DT05TVU1FRCk7Cn0KCnN0YXRpYyBpbmxpbmUgdm9pZCBkZXZfa2ZyZWVfc2ti X2FueShzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQp7CglfX2Rldl9rZnJlZV9za2JfYW55KHNrYiwgU0tC X1JFQVNPTl9EUk9QUEVEKTsKICAgIDQyMGI6CTVkICAgICAgICAgICAgICAgICAgIAlwb3AgICAg JXJicAogICAgNDIwYzoJYzMgICAgICAgICAgICAgICAgICAgCXJldHEgICAKICAgIDQyMGQ6CWM2 IDQwIGZiIDAyICAgICAgICAgIAltb3ZiICAgJDB4MiwtMHg1KCVyYXgpCiAgICA0MjExOgllYiA5 YiAgICAgICAgICAgICAgICAJam1wICAgIDQxYWUgPHZ4bGFuX2J1aWxkX3NrYisweDQxZT4KICAg IDQyMTM6CTQ4IDhiIGJiIGQ4IDAwIDAwIDAwIAltb3YgICAgMHhkOCglcmJ4KSwlcmRpCgllcnIg PSBza2JfY293X2hlYWQoc2tiLCBtaW5faGVhZHJvb20pOwoJaWYgKHVubGlrZWx5KGVycikpCgkJ Z290byBvdXRfZnJlZTsKCglza2IgPSB2bGFuX2h3YWNjZWxfcHVzaF9pbnNpZGUoc2tiKTsKCWlm IChXQVJOX09OKCFza2IpKQogICAgNDIxYToJZTkgN2IgZmUgZmYgZmYgICAgICAgCWptcHEgICA0 MDlhIDx2eGxhbl9idWlsZF9za2IrMHgzMGE+CiAgICA0MjFmOgk5MCAgICAgICAgICAgICAgICAg ICAJbm9wCgowMDAwMDAwMDAwMDA0MjIwIDx2eGxhbl94bWl0X29uZT46CiAgICA0MjIwOgllOCAw MCAwMCAwMCAwMCAgICAgICAJY2FsbHEgIDQyMjUgPHZ4bGFuX3htaXRfb25lKzB4NT4KICAgIDQy MjU6CTU1ICAgICAgICAgICAgICAgICAgIAlwdXNoICAgJXJicAogICAgNDIyNjoJNDkgODkgZDMg ICAgICAgICAgICAgCW1vdiAgICAlcmR4LCVyMTEKCXJldHVybiAwOwoKb3V0X2ZyZWU6CglrZnJl ZV9za2Ioc2tiKTsKCXJldHVybiBlcnI7Cn0KICAgIDQyMjk6CTRjIDhkIDk2IDQwIDA4IDAwIDAw IAlsZWEgICAgMHg4NDAoJXJzaSksJXIxMAoJaWYgKHVubGlrZWx5KGVycikpCgkJZ290byBvdXRf ZnJlZTsKCglza2IgPSB2bGFuX2h3YWNjZWxfcHVzaF9pbnNpZGUoc2tiKTsKCWlmIChXQVJOX09O KCFza2IpKQoJCXJldHVybiAtRU5PTUVNOwogICAgNDIzMDoJNDggODkgZTUgICAgICAgICAgICAg CW1vdiAgICAlcnNwLCVyYnAKCXJldHVybiAwOwoKb3V0X2ZyZWU6CglrZnJlZV9za2Ioc2tiKTsK CXJldHVybiBlcnI7Cn0KICAgIDQyMzM6CTQxIDU3ICAgICAgICAgICAgICAgIAlwdXNoICAgJXIx NQogICAgNDIzNToJNDEgNTYgICAgICAgICAgICAgICAgCXB1c2ggICAlcjE0CiAgICA0MjM3Ogk0 MSA1NSAgICAgICAgICAgICAgICAJcHVzaCAgICVyMTMKICAgIDQyMzk6CTQxIDU0ICAgICAgICAg ICAgICAgIAlwdXNoICAgJXIxMgogICAgNDIzYjoJNDkgODkgZmQgICAgICAgICAgICAgCW1vdiAg ICAlcmRpLCVyMTMKCXN3aXRjaCAocHJvdG9jb2wpIHsKCWNhc2UgaHRvbnMoRVRIX1BfSVApOgoJ CWdwZS0+bmV4dF9wcm90b2NvbCA9IFZYTEFOX0dQRV9OUF9JUFY0OwoJCXJldHVybiAwOwoJY2Fz ZSBodG9ucyhFVEhfUF9JUFY2KToKCQlncGUtPm5leHRfcHJvdG9jb2wgPSBWWExBTl9HUEVfTlBf SVBWNjsKICAgIDQyM2U6CTUzICAgICAgICAgICAgICAgICAgIAlwdXNoICAgJXJieAogICAgNDIz ZjoJNDggODkgZjMgICAgICAgICAgICAgCW1vdiAgICAlcnNpLCVyYngKICAgIDQyNDI6CTQ4IDgz IGU0IGYwICAgICAgICAgIAlhbmQgICAgJDB4ZmZmZmZmZmZmZmZmZmZmMCwlcnNwCiAgICA0MjQ2 Ogk0OCA4MSBlYyBmMCAwMCAwMCAwMCAJc3ViICAgICQweGYwLCVyc3AKICAgIDQyNGQ6CTRjIDhi IDY3IDU4ICAgICAgICAgIAltb3YgICAgMHg1OCglcmRpKSwlcjEyCgl9Cn0KCnN0YXRpYyB2b2lk IHZ4bGFuX3htaXRfb25lKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRfZGV2aWNlICpk ZXYsCgkJCSAgIHN0cnVjdCB2eGxhbl9yZHN0ICpyZHN0LCBib29sIGRpZF9yc2MpCnsKICAgIDQy NTE6CTY1IDQ4IDhiIDA0IDI1IDI4IDAwIAltb3YgICAgJWdzOjB4MjgsJXJheAogICAgNDI1ODoJ MDAgMDAgCiAqCiAqIEdldCBuZXR3b3JrIGRldmljZSBwcml2YXRlIGRhdGEKICovCnN0YXRpYyBp bmxpbmUgdm9pZCAqbmV0ZGV2X3ByaXYoY29uc3Qgc3RydWN0IG5ldF9kZXZpY2UgKmRldikKewoJ cmV0dXJuIChjaGFyICopZGV2ICsgQUxJR04oc2l6ZW9mKHN0cnVjdCBuZXRfZGV2aWNlKSwgTkVU REVWX0FMSUdOKTsKICAgIDQyNWE6CTQ4IDg5IDg0IDI0IGU4IDAwIDAwIAltb3YgICAgJXJheCww eGU4KCVyc3ApCiAgICA0MjYxOgkwMCAKICAgIDQyNjI6CTMxIGMwICAgICAgICAgICAgICAgIAl4 b3IgICAgJWVheCwlZWF4CiAgICA0MjY0Ogk4YiA4NiBkOCAwOCAwMCAwMCAgICAJbW92ICAgIDB4 OGQ4KCVyc2kpLCVlYXgKICAgIDQyNmE6CTQ5IDgzIGU0IGZlICAgICAgICAgIAlhbmQgICAgJDB4 ZmZmZmZmZmZmZmZmZmZmZSwlcjEyCiAgICA0MjZlOgk4OSA0NCAyNCA2NCAgICAgICAgICAJbW92 ICAgICVlYXgsMHg2NCglcnNwKQogICAgNDI3MjoJNDggOGIgODYgNzAgMDggMDAgMDAgCW1vdiAg ICAweDg3MCglcnNpKSwlcmF4CiAgICA0Mjc5Ogk0OCA4YiA4MCA4MCAwNCAwMCAwMCAJbW92ICAg IDB4NDgwKCVyYXgpLCVyYXgKCnN0YXRpYyBpbmxpbmUgc3RydWN0IG1ldGFkYXRhX2RzdCAqc2ti X21ldGFkYXRhX2RzdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQp7CglzdHJ1Y3QgbWV0YWRhdGFfZHN0 ICptZF9kc3QgPSAoc3RydWN0IG1ldGFkYXRhX2RzdCAqKSBza2JfZHN0KHNrYik7CgoJaWYgKG1k X2RzdCAmJiBtZF9kc3QtPmRzdC5mbGFncyAmIERTVF9NRVRBREFUQSkKICAgIDQyODA6CTQ4IDg5 IDQ0IDI0IDcwICAgICAgIAltb3YgICAgJXJheCwweDcwKCVyc3ApCiAgICA0Mjg1Ogk0OCA4YiA4 NiA3OCAwOCAwMCAwMCAJbW92ICAgIDB4ODc4KCVyc2kpLCVyYXgKICAgIDQyOGM6CTQ4IDg5IDQ0 IDI0IDc4ICAgICAgIAltb3YgICAgJXJheCwweDc4KCVyc3ApCiAgICA0MjkxOgkwZiA4NCA5OSAw OCAwMCAwMCAgICAJamUgICAgIDRiMzAgPHZ4bGFuX3htaXRfb25lKzB4OTEwPgoJX19iZTE2IHNy Y19wb3J0ID0gMCwgZHN0X3BvcnQ7CglfX2JlMzIgdm5pLCBsYWJlbDsKCV9fYmUxNiBkZiA9IDA7 CglfX3U4IHRvcywgdHRsOwoJaW50IGVycjsKCXUzMiBmbGFncyA9IHZ4bGFuLT5mbGFnczsKICAg IDQyOTc6CTQxIGY2IDQ0IDI0IDYxIDAyICAgIAl0ZXN0YiAgJDB4MiwweDYxKCVyMTIpCiAgICA0 MjlkOgkwZiA4NCA5YiAwMyAwMCAwMCAgICAJamUgICAgIDQ2M2UgPHZ4bGFuX3htaXRfb25lKzB4 NDFlPgogICAgNDJhMzoJNDkgODEgYzQgYTAgMDAgMDAgMDAgCWFkZCAgICAkMHhhMCwlcjEyCiAg ICA0MmFhOgk0ZCA4NSBkYiAgICAgICAgICAgICAJdGVzdCAgICVyMTEsJXIxMQogICAgNDJhZDoJ MGYgODQgYTkgMDMgMDAgMDAgICAgCWplICAgICA0NjVjIDx2eGxhbl94bWl0X29uZSsweDQzYz4K ICAgIDQyYjM6CTQxIDBmIGI3IDQzIDFjICAgICAgIAltb3Z6d2wgMHgxYyglcjExKSwlZWF4Cgli b29sIHVkcF9zdW0gPSBmYWxzZTsKCWJvb2wgeG5ldCA9ICFuZXRfZXEodnhsYW4tPm5ldCwgZGV2 X25ldCh2eGxhbi0+ZGV2KSk7CiAgICA0MmI4Ogk2NiA4NSBjMCAgICAgICAgICAgICAJdGVzdCAg ICVheCwlYXgKICAgIDQyYmI6CTY2IDg5IDg0IDI0IDg0IDAwIDAwIAltb3YgICAgJWF4LDB4ODQo JXJzcCkKICAgIDQyYzI6CTAwIAogICAgNDJjMzoJMGYgODQgNTEgMDMgMDAgMDAgICAgCWplICAg ICA0NjFhIDx2eGxhbl94bWl0X29uZSsweDNmYT4KICAgIDQyYzk6CTQxIDhiIDQzIDIwICAgICAg ICAgIAltb3YgICAgMHgyMCglcjExKSwlZWF4CiAgICA0MmNkOgk0ZCA4ZCA3MyA0OCAgICAgICAg ICAJbGVhICAgIDB4NDgoJXIxMSksJXIxNAogICAgNDJkMToJNGQgODkgZGYgICAgICAgICAgICAg CW1vdiAgICAlcjExLCVyMTUKewoJc3RydWN0IG1ldGFkYXRhX2RzdCAqbWRfZHN0ID0gc2tiX21l dGFkYXRhX2RzdChza2IpOwoJc3RydWN0IGRzdF9lbnRyeSAqZHN0OwoKCWlmIChtZF9kc3QpCgkJ cmV0dXJuICZtZF9kc3QtPnUudHVuX2luZm87CiAgICA0MmQ0Ogk4OSA0NCAyNCA1MCAgICAgICAg ICAJbW92ICAgICVlYXgsMHg1MCglcnNwKQogICAgNDJkODoJNDggOGQgODMgNTQgMDkgMDAgMDAg CWxlYSAgICAweDk1NCglcmJ4KSwlcmF4CgoJaW5mbyA9IHNrYl90dW5uZWxfaW5mbyhza2IpOwoK CWlmIChyZHN0KSB7CiAgICA0MmRmOgk0OCA4OSA0NCAyNCA2OCAgICAgICAJbW92ICAgICVyYXgs MHg2OCglcnNwKQoJCWRzdF9wb3J0ID0gcmRzdC0+cmVtb3RlX3BvcnQgPyByZHN0LT5yZW1vdGVf cG9ydCA6IHZ4bGFuLT5jZmcuZHN0X3BvcnQ7CiAgICA0MmU0Ogk0MSAwZiBiNyAwMyAgICAgICAg ICAJbW92endsICglcjExKSwlZWF4CiAgICA0MmU4Ogk2NiA4MyBmOCAwYSAgICAgICAgICAJY21w ICAgICQweGEsJWF4CiAgICA0MmVjOgkwZiA4NCAzYyAwMyAwMCAwMCAgICAJamUgICAgIDQ2MmUg PHZ4bGFuX3htaXRfb25lKzB4NDBlPgogICAgNDJmMjoJNDEgOGIgNzcgMDQgICAgICAgICAgCW1v diAgICAweDQoJXIxNSksJWVzaQogICAgNDJmNjoJODUgZjYgICAgICAgICAgICAgICAgCXRlc3Qg ICAlZXNpLCVlc2kKICAgIDQyZjg6CTBmIDk0IGMyICAgICAgICAgICAgIAlzZXRlICAgJWRsCgkJ dm5pID0gcmRzdC0+cmVtb3RlX3ZuaTsKICAgIDQyZmI6CTg0IGQyICAgICAgICAgICAgICAgIAl0 ZXN0ICAgJWRsLCVkbAoJCWRzdCA9ICZyZHN0LT5yZW1vdGVfaXA7CgkJc3JjID0gJnZ4bGFuLT5j Zmcuc2FkZHI7CgkJZHN0X2NhY2hlID0gJnJkc3QtPmRzdF9jYWNoZTsKICAgIDQyZmQ6CTc0IDNl ICAgICAgICAgICAgICAgIAlqZSAgICAgNDMzZCA8dnhsYW5feG1pdF9vbmUrMHgxMWQ+CiAgICA0 MmZmOgk4NCBjOSAgICAgICAgICAgICAgICAJdGVzdCAgICVjbCwlY2wKCWluZm8gPSBza2JfdHVu bmVsX2luZm8oc2tiKTsKCglpZiAocmRzdCkgewoJCWRzdF9wb3J0ID0gcmRzdC0+cmVtb3RlX3Bv cnQgPyByZHN0LT5yZW1vdGVfcG9ydCA6IHZ4bGFuLT5jZmcuZHN0X3BvcnQ7CgkJdm5pID0gcmRz dC0+cmVtb3RlX3ZuaTsKCQlkc3QgPSAmcmRzdC0+cmVtb3RlX2lwOwogICAgNDMwMToJMGYgODUg ZDEgMDQgMDAgMDAgICAgCWpuZSAgICA0N2Q4IDx2eGxhbl94bWl0X29uZSsweDViOD4KCglpbmZv ID0gc2tiX3R1bm5lbF9pbmZvKHNrYik7CgoJaWYgKHJkc3QpIHsKCQlkc3RfcG9ydCA9IHJkc3Qt PnJlbW90ZV9wb3J0ID8gcmRzdC0+cmVtb3RlX3BvcnQgOiB2eGxhbi0+Y2ZnLmRzdF9wb3J0OwoJ CXZuaSA9IHJkc3QtPnJlbW90ZV92bmk7CiAgICA0MzA3Ogk0OCA4MyA4MyA2OCAwMSAwMCAwMCAJ YWRkcSAgICQweDEsMHgxNjgoJXJieCkKICAgIDQzMGU6CTAxIAoJCWRzdCA9ICZyZHN0LT5yZW1v dGVfaXA7CgkJc3JjID0gJnZ4bGFuLT5jZmcuc2FkZHI7CiAgICA0MzBmOgk0YyA4OSBlZiAgICAg ICAgICAgICAJbW92ICAgICVyMTMsJXJkaQogICAgNDMxMjoJZTggMDAgMDAgMDAgMDAgICAgICAg CWNhbGxxICA0MzE3IDx2eGxhbl94bWl0X29uZSsweGY3PgogICAgNDMxNzoJNDggOGIgODQgMjQg ZTggMDAgMDAgCW1vdiAgICAweGU4KCVyc3ApLCVyYXgKICAgIDQzMWU6CTAwIAoJCXJldHVybiBh LT5zaW4uc2luX2FkZHIuc19hZGRyID09IGItPnNpbi5zaW5fYWRkci5zX2FkZHI7Cn0KCnN0YXRp YyBpbmxpbmUgYm9vbCB2eGxhbl9hZGRyX2FueShjb25zdCB1bmlvbiB2eGxhbl9hZGRyICppcGEp CnsKCWlmIChpcGEtPnNhLnNhX2ZhbWlseSA9PSBBRl9JTkVUNikKICAgIDQzMWY6CTY1IDQ4IDMz IDA0IDI1IDI4IDAwIAl4b3IgICAgJWdzOjB4MjgsJXJheAogICAgNDMyNjoJMDAgMDAgCgkJcmV0 dXJuIGlwdjZfYWRkcl9hbnkoJmlwYS0+c2luNi5zaW42X2FkZHIpOwoJZWxzZQoJCXJldHVybiBp cGEtPnNpbi5zaW5fYWRkci5zX2FkZHIgPT0gaHRvbmwoSU5BRERSX0FOWSk7CiAgICA0MzI4Ogkw ZiA4NSBkYSAwOSAwMCAwMCAgICAJam5lICAgIDRkMDggPHZ4bGFuX3htaXRfb25lKzB4YWU4PgoJ CWRzdCA9ICZyZW1vdGVfaXA7CgkJc3JjID0gJmxvY2FsX2lwOwoJCWRzdF9jYWNoZSA9ICZpbmZv LT5kc3RfY2FjaGU7Cgl9CgoJaWYgKHZ4bGFuX2FkZHJfYW55KGRzdCkpIHsKICAgIDQzMmU6CTQ4 IDhkIDY1IGQ4ICAgICAgICAgIAlsZWEgICAgLTB4MjgoJXJicCksJXJzcAoJCWlmIChkaWRfcnNj KSB7CiAgICA0MzMyOgk1YiAgICAgICAgICAgICAgICAgICAJcG9wICAgICVyYngKICAgIDQzMzM6 CTQxIDVjICAgICAgICAgICAgICAgIAlwb3AgICAgJXIxMgogICAgNDMzNToJNDEgNWQgICAgICAg ICAgICAgICAgCXBvcCAgICAlcjEzCgl9CgoJcmV0dXJuOwoKZHJvcDoKCWRldi0+c3RhdHMudHhf ZHJvcHBlZCsrOwogICAgNDMzNzoJNDEgNWUgICAgICAgICAgICAgICAgCXBvcCAgICAlcjE0CiAg ICA0MzM5Ogk0MSA1ZiAgICAgICAgICAgICAgICAJcG9wICAgICVyMTUKICAgIDQzM2I6CTVkICAg ICAgICAgICAgICAgICAgIAlwb3AgICAgJXJicAogICAgNDMzYzoJYzMgICAgICAgICAgICAgICAg ICAgCXJldHEgICAKICAgIDQzM2Q6CTBmIGI2IGJiIDgzIDA5IDAwIDAwIAltb3Z6YmwgMHg5ODMo JXJieCksJWVkaQpydF90eF9lcnJvcjoKCWlwX3J0X3B1dChydCk7CnR4X2Vycm9yOgoJZGV2LT5z dGF0cy50eF9lcnJvcnMrKzsKdHhfZnJlZToKCWRldl9rZnJlZV9za2Ioc2tiKTsKICAgIDQzNDQ6 CTQxIDBmIGI3IDk1IGM0IDAwIDAwIAltb3Z6d2wgMHhjNCglcjEzKSwlZWR4CiAgICA0MzRiOgkw MCAKfQogICAgNDM0YzoJNDkgMDMgOTUgZDAgMDAgMDAgMDAgCWFkZCAgICAweGQwKCVyMTMpLCVy ZHgKICAgIDQzNTM6CTQwIDg0IGZmICAgICAgICAgICAgIAl0ZXN0ICAgJWRpbCwlZGlsCiAgICA0 MzU2Ogk0MCA4OCBiYyAyNCA4NyAwMCAwMCAJbW92ICAgICVkaWwsMHg4NyglcnNwKQogICAgNDM1 ZDoJMDAgCiAgICA0MzVlOgk0OCA4OSA1NCAyNCAzOCAgICAgICAJbW92ICAgICVyZHgsMHgzOCgl cnNwKQogICAgNDM2MzoJNzUgMjIgICAgICAgICAgICAgICAgCWpuZSAgICA0Mzg3IDx2eGxhbl94 bWl0X29uZSsweDE2Nz4KICAgIDQzNjU6CTY2IDgzIGY4IDBhICAgICAgICAgIAljbXAgICAgJDB4 YSwlYXgKICAgIDQzNjk6CTBmIDg0IDcxIDAzIDAwIDAwICAgIAlqZSAgICAgNDZlMCA8dnhsYW5f eG1pdF9vbmUrMHg0YzA+CgkJZ290byBkcm9wOwoJfQoKCW9sZF9pcGggPSBpcF9oZHIoc2tiKTsK Cgl0dGwgPSB2eGxhbi0+Y2ZnLnR0bDsKICAgIDQzNmY6CTQxIDhiIDQ3IDA0ICAgICAgICAgIAlt b3YgICAgMHg0KCVyMTUpLCVlYXgKICAgIDQzNzM6CTI1IGYwIDAwIDAwIDAwICAgICAgIAlhbmQg ICAgJDB4ZjAsJWVheAoJc2tiLT50cmFuc3BvcnRfaGVhZGVyICs9IG9mZnNldDsKfQoKc3RhdGlj IGlubGluZSB1bnNpZ25lZCBjaGFyICpza2JfbmV0d29ya19oZWFkZXIoY29uc3Qgc3RydWN0IHNr X2J1ZmYgKnNrYikKewoJcmV0dXJuIHNrYi0+aGVhZCArIHNrYi0+bmV0d29ya19oZWFkZXI7CiAg ICA0Mzc4OgkzZCBlMCAwMCAwMCAwMCAgICAgICAJY21wICAgICQweGUwLCVlYXgKICAgIDQzN2Q6 CTBmIDk0IGMwICAgICAgICAgICAgIAlzZXRlICAgJWFsCiAgICA0MzgwOgk4OCA4NCAyNCA4NyAw MCAwMCAwMCAJbW92ICAgICVhbCwweDg3KCVyc3ApCiAgICA0Mzg3OgkwZiBiNiA4MyA4MiAwOSAw MCAwMCAJbW92emJsIDB4OTgyKCVyYngpLCVlYXgKICAgIDQzOGU6CTNjIDAxICAgICAgICAgICAg ICAgIAljbXAgICAgJDB4MSwlYWwKICAgIDQzOTA6CTg4IDg0IDI0IDg4IDAwIDAwIDAwIAltb3Yg ICAgJWFsLDB4ODgoJXJzcCkKCQlyZXR1cm4gaXBhLT5zaW4uc2luX2FkZHIuc19hZGRyID09IGh0 b25sKElOQUREUl9BTlkpOwp9CgpzdGF0aWMgaW5saW5lIGJvb2wgdnhsYW5fYWRkcl9tdWx0aWNh c3QoY29uc3QgdW5pb24gdnhsYW5fYWRkciAqaXBhKQp7CglpZiAoaXBhLT5zYS5zYV9mYW1pbHkg PT0gQUZfSU5FVDYpCiAgICA0Mzk3OgkwZiA4NCBhMSAwNCAwMCAwMCAgICAJamUgICAgIDQ4M2Ug PHZ4bGFuX3htaXRfb25lKzB4NjFlPgogICAgNDM5ZDoJOGIgODMgODQgMDkgMDAgMDAgICAgCW1v diAgICAweDk4NCglcmJ4KSwlZWF4CgkJcmV0dXJuIGlwdjZfYWRkcl9pc19tdWx0aWNhc3QoJmlw YS0+c2luNi5zaW42X2FkZHIpOwoJZWxzZQoJCXJldHVybiBJTl9NVUxUSUNBU1QobnRvaGwoaXBh LT5zaW4uc2luX2FkZHIuc19hZGRyKSk7CiAgICA0M2EzOgkwZiBiNyA5MyA4MCAwOSAwMCAwMCAJ bW92endsIDB4OTgwKCVyYngpLCVlZHgKICAgIDQzYWE6CTQ4IDhiIGJiIDgwIDA0IDAwIDAwIAlt b3YgICAgMHg0ODAoJXJieCksJXJkaQogICAgNDNiMToJODkgODQgMjQgODAgMDAgMDAgMDAgCW1v diAgICAlZWF4LDB4ODAoJXJzcCkKCgl0dGwgPSB2eGxhbi0+Y2ZnLnR0bDsKCWlmICghdHRsICYm IHZ4bGFuX2FkZHJfbXVsdGljYXN0KGRzdCkpCgkJdHRsID0gMTsKCgl0b3MgPSB2eGxhbi0+Y2Zn LnRvczsKICAgIDQzYjg6CTBmIGI3IDgzIDdlIDA5IDAwIDAwIAltb3Z6d2wgMHg5N2UoJXJieCks JWVheAoJaWYgKHRvcyA9PSAxKQogICAgNDNiZjoJODkgOTQgMjQgOWMgMDAgMDAgMDAgCW1vdiAg ICAlZWR4LDB4OWMoJXJzcCkKCgl0dGwgPSB2eGxhbi0+Y2ZnLnR0bDsKCWlmICghdHRsICYmIHZ4 bGFuX2FkZHJfbXVsdGljYXN0KGRzdCkpCgkJdHRsID0gMTsKCgl0b3MgPSB2eGxhbi0+Y2ZnLnRv czsKICAgIDQzYzY6CTM5IGMyICAgICAgICAgICAgICAgIAljbXAgICAgJWVheCwlZWR4CglpZiAo dG9zID09IDEpCiAgICA0M2M4Ogk4OSA4NCAyNCA5OCAwMCAwMCAwMCAJbW92ICAgICVlYXgsMHg5 OCglcnNwKQoJCXRvcyA9IGlwX3R1bm5lbF9nZXRfZHNmaWVsZChvbGRfaXBoLCBza2IpOwoKCWxh YmVsID0gdnhsYW4tPmNmZy5sYWJlbDsKICAgIDQzY2Y6CTBmIDhlIDNiIDA0IDAwIDAwICAgIAlq bGUgICAgNDgxMCA8dnhsYW5feG1pdF9vbmUrMHg1ZjA+CglzcmNfcG9ydCA9IHVkcF9mbG93X3Ny Y19wb3J0KGRldl9uZXQoZGV2KSwgc2tiLCB2eGxhbi0+Y2ZnLnBvcnRfbWluLAogICAgNDNkNToJ NDEgZjYgODUgOTEgMDAgMDAgMDAgCXRlc3RiICAkMHgzMCwweDkxKCVyMTMpCiAgICA0M2RjOgkz MCAKICAgIDQzZGQ6CTBmIDg0IDBjIDA0IDAwIDAwICAgIAlqZSAgICAgNDdlZiA8dnhsYW5feG1p dF9vbmUrMHg1Y2Y+CgoJdG9zID0gdnhsYW4tPmNmZy50b3M7CglpZiAodG9zID09IDEpCgkJdG9z ID0gaXBfdHVubmVsX2dldF9kc2ZpZWxkKG9sZF9pcGgsIHNrYik7CgoJbGFiZWwgPSB2eGxhbi0+ Y2ZnLmxhYmVsOwogICAgNDNlMzoJNDEgOGIgODUgYTQgMDAgMDAgMDAgCW1vdiAgICAweGE0KCVy MTMpLCVlYXgKCXNyY19wb3J0ID0gdWRwX2Zsb3dfc3JjX3BvcnQoZGV2X25ldChkZXYpLCBza2Is IHZ4bGFuLT5jZmcucG9ydF9taW4sCiAgICA0M2VhOgk4NSBjMCAgICAgICAgICAgICAgICAJdGVz dCAgICVlYXgsJWVheAogICAgNDNlYzoJMGYgODUgYzAgMDAgMDAgMDAgICAgCWpuZSAgICA0NGIy IDx2eGxhbl94bWl0X29uZSsweDI5Mj4KICAgIDQzZjI6CTQ5IDhiIGI1IGQ4IDAwIDAwIDAwIAlt b3YgICAgMHhkOCglcjEzKSwlcnNpCnN0YXRpYyBpbmxpbmUgX19iZTE2IHVkcF9mbG93X3NyY19w b3J0KHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IHNrX2J1ZmYgKnNrYiwKCQkJCSAgICAgICBpbnQg bWluLCBpbnQgbWF4LCBib29sIHVzZV9ldGgpCnsKCXUzMiBoYXNoOwoKCWlmIChtaW4gPj0gbWF4 KSB7CiAgICA0M2Y5Ogk0MSAwZiBiNyA4ZCBjMCAwMCAwMCAJbW92endsIDB4YzAoJXIxMyksJWVj eAogICAgNDQwMDoJMDAgCiAgICA0NDAxOgkwZiBiNiA1NiAwOCAgICAgICAgICAJbW92emJsIDB4 OCglcnNpKSwlZWR4CgkJCQkgIGRhdGEsIHByb3RvLCBuaG9mZiwgaGxlbiwgZmxhZ3MpOwp9Cgpz dGF0aWMgaW5saW5lIF9fdTMyIHNrYl9nZXRfaGFzaChzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQp7Cglp ZiAoIXNrYi0+bDRfaGFzaCAmJiAhc2tiLT5zd19oYXNoKQogICAgNDQwNToJMGYgYjYgNDYgMGIg ICAgICAgICAgCW1vdnpibCAweGIoJXJzaSksJWVheAogICAgNDQwOToJODEgZTkgMDUgNDEgNTIg MjEgICAgCXN1YiAgICAkMHgyMTUyNDEwNSwlZWN4CiAgICA0NDBmOgk0NCAwZiBiNiA0NiAwNCAg ICAgICAJbW92emJsIDB4NCglcnNpKSwlcjhkCgkJX19za2JfZ2V0X2hhc2goc2tiKTsKCglyZXR1 cm4gc2tiLT5oYXNoOwogICAgNDQxNDoJOGQgM2MgMGEgICAgICAgICAgICAgCWxlYSAgICAoJXJk eCwlcmN4LDEpLCVlZGkKICAgIDQ0MTc6CWMxIGUwIDE4ICAgICAgICAgICAgIAlzaGwgICAgJDB4 MTgsJWVheAoJCS8qIFVzZSBkZWZhdWx0IHJhbmdlICovCgkJaW5ldF9nZXRfbG9jYWxfcG9ydF9y YW5nZShuZXQsICZtaW4sICZtYXgpOwoJfQoKCWhhc2ggPSBza2JfZ2V0X2hhc2goc2tiKTsKCWlm ICh1bmxpa2VseSghaGFzaCkpIHsKICAgIDQ0MWE6CTQ1IDhkIDBjIDA4ICAgICAgICAgIAlsZWEg ICAgKCVyOCwlcmN4LDEpLCVyOWQKICAgIDQ0MWU6CThkIDE0IDM4ICAgICAgICAgICAgIAlsZWEg ICAgKCVyYXgsJXJkaSwxKSwlZWR4CiAgICA0NDIxOgkwZiBiNiA0NiAwYSAgICAgICAgICAJbW92 emJsIDB4YSglcnNpKSwlZWF4CgkJaWYgKHVzZV9ldGgpIHsKCQkJLyogQ2FuJ3QgZmluZCBhIG5v cm1hbCBoYXNoLCBjYWxsZXIgaGFzIGluZGljYXRlZCBhbgoJCQkgKiBFdGhlcm5ldCBwYWNrZXQg c28gdXNlIHRoYXQgdG8gY29tcHV0ZSBhIGhhc2guCgkJCSAqLwoJCQloYXNoID0gamhhc2goc2ti LT5kYXRhLCAyICogRVRIX0FMRU4sCiAgICA0NDI1OgkwZiBiNiA3ZSAwNyAgICAgICAgICAJbW92 emJsIDB4NyglcnNpKSwlZWRpCnsKCXUzMiBhLCBiLCBjOwoJY29uc3QgdTggKmsgPSBrZXk7CgoJ LyogU2V0IHVwIHRoZSBpbnRlcm5hbCBzdGF0ZSAqLwoJYSA9IGIgPSBjID0gSkhBU0hfSU5JVFZB TCArIGxlbmd0aCArIGluaXR2YWw7CiAgICA0NDI5OgljMSBlMCAxMCAgICAgICAgICAgICAJc2hs ICAgICQweDEwLCVlYXgKICAgIDQ0MmM6CWMxIGU3IDE4ICAgICAgICAgICAgIAlzaGwgICAgJDB4 MTgsJWVkaQogICAgNDQyZjoJMDEgZDAgICAgICAgICAgICAgICAgCWFkZCAgICAlZWR4LCVlYXgK ICAgIDQ0MzE6CTBmIGI2IDU2IDA2ICAgICAgICAgIAltb3Z6YmwgMHg2KCVyc2kpLCVlZHgKICAg IDQ0MzU6CTQ2IDhkIDA0IDBmICAgICAgICAgIAlsZWEgICAgKCVyZGksJXI5LDEpLCVyOGQKICAg IDQ0Mzk6CWMxIGUyIDEwICAgICAgICAgICAgIAlzaGwgICAgJDB4MTAsJWVkeAogICAgNDQzYzoJ NDEgOGQgM2MgMTAgICAgICAgICAgCWxlYSAgICAoJXI4LCVyZHgsMSksJWVkaQogICAgNDQ0MDoJ MGYgYjYgNTYgMDUgICAgICAgICAgCW1vdnpibCAweDUoJXJzaSksJWVkeAogICAgNDQ0NDoJNDQg MGYgYjYgMDYgICAgICAgICAgCW1vdnpibCAoJXJzaSksJXI4ZAogICAgNDQ0ODoJYzEgZTIgMDgg ICAgICAgICAgICAgCXNobCAgICAkMHg4LCVlZHgKICAgIDQ0NGI6CTQ0IDAxIGMxICAgICAgICAg ICAgIAlhZGQgICAgJXI4ZCwlZWN4CiAgICA0NDRlOgkwMSBmYSAgICAgICAgICAgICAgICAJYWRk ICAgICVlZGksJWVkeAogICAgNDQ1MDoJMGYgYjYgN2UgMDMgICAgICAgICAgCW1vdnpibCAweDMo JXJzaSksJWVkaQogICAgNDQ1NDoJYzEgZTcgMTggICAgICAgICAgICAgCXNobCAgICAkMHgxOCwl ZWRpCiAgICA0NDU3Ogk0NCA4ZCAwNCAzOSAgICAgICAgICAJbGVhICAgICglcmN4LCVyZGksMSks JXI4ZAogICAgNDQ1YjoJMGYgYjYgN2UgMDIgICAgICAgICAgCW1vdnpibCAweDIoJXJzaSksJWVk aQogICAgNDQ1ZjoJMGYgYjYgNGUgMDEgICAgICAgICAgCW1vdnpibCAweDEoJXJzaSksJWVjeAog ICAgNDQ2MzoJMGYgYjYgNzYgMDkgICAgICAgICAgCW1vdnpibCAweDkoJXJzaSksJWVzaQogICAg NDQ2NzoJYzEgZTcgMTAgICAgICAgICAgICAgCXNobCAgICAkMHgxMCwlZWRpCiAgICA0NDZhOglj MSBlMSAwOCAgICAgICAgICAgICAJc2hsICAgICQweDgsJWVjeAogICAgNDQ2ZDoJYzEgZTYgMDgg ICAgICAgICAgICAgCXNobCAgICAkMHg4LCVlc2kKCWNhc2UgMTA6IGMgKz0gKHUzMilrWzldPDw4 OwoJY2FzZSA5OiAgYyArPSBrWzhdOwoJY2FzZSA4OiAgYiArPSAodTMyKWtbN108PDI0OwoJY2Fz ZSA3OiAgYiArPSAodTMyKWtbNl08PDE2OwoJY2FzZSA2OiAgYiArPSAodTMyKWtbNV08PDg7Cglj YXNlIDU6ICBiICs9IGtbNF07CiAgICA0NDcwOgk0NCAwMSBjNyAgICAgICAgICAgICAJYWRkICAg ICVyOGQsJWVkaQogICAgNDQ3MzoJMDEgZjAgICAgICAgICAgICAgICAgCWFkZCAgICAlZXNpLCVl YXgKCWNhc2UgNDogIGEgKz0gKHUzMilrWzNdPDwyNDsKCWNhc2UgMzogIGEgKz0gKHUzMilrWzJd PDwxNjsKCWNhc2UgMjogIGEgKz0gKHUzMilrWzFdPDw4OwoJY2FzZSAxOiAgYSArPSBrWzBdOwog ICAgNDQ3NToJODkgZDYgICAgICAgICAgICAgICAgCW1vdiAgICAlZWR4LCVlc2kKICAgIDQ0Nzc6 CTAxIGY5ICAgICAgICAgICAgICAgIAlhZGQgICAgJWVkaSwlZWN4CgljYXNlIDEwOiBjICs9ICh1 MzIpa1s5XTw8ODsKCWNhc2UgOTogIGMgKz0ga1s4XTsKCWNhc2UgODogIGIgKz0gKHUzMilrWzdd PDwyNDsKCWNhc2UgNzogIGIgKz0gKHUzMilrWzZdPDwxNjsKCWNhc2UgNjogIGIgKz0gKHUzMilr WzVdPDw4OwoJY2FzZSA1OiAgYiArPSBrWzRdOwogICAgNDQ3OToJMzEgZDAgICAgICAgICAgICAg ICAgCXhvciAgICAlZWR4LCVlYXgKCWNhc2UgNDogIGEgKz0gKHUzMilrWzNdPDwyNDsKCWNhc2Ug MzogIGEgKz0gKHUzMilrWzJdPDwxNjsKCWNhc2UgMjogIGEgKz0gKHUzMilrWzFdPDw4OwoJY2Fz ZSAxOiAgYSArPSBrWzBdOwogICAgNDQ3YjoJYzEgYzYgMGUgICAgICAgICAgICAgCXJvbCAgICAk MHhlLCVlc2kKCWNhc2UgMTA6IGMgKz0gKHUzMilrWzldPDw4OwoJY2FzZSA5OiAgYyArPSBrWzhd OwoJY2FzZSA4OiAgYiArPSAodTMyKWtbN108PDI0OwoJY2FzZSA3OiAgYiArPSAodTMyKWtbNl08 PDE2OwoJY2FzZSA2OiAgYiArPSAodTMyKWtbNV08PDg7CgljYXNlIDU6ICBiICs9IGtbNF07CiAg ICA0NDdlOgkyOSBmMCAgICAgICAgICAgICAgICAJc3ViICAgICVlc2ksJWVheAoJY2FzZSA0OiAg YSArPSAodTMyKWtbM108PDI0OwoJY2FzZSAzOiAgYSArPSAodTMyKWtbMl08PDE2OwoJY2FzZSAy OiAgYSArPSAodTMyKWtbMV08PDg7CgljYXNlIDE6ICBhICs9IGtbMF07CiAgICA0NDgwOgk4OSBj NiAgICAgICAgICAgICAgICAJbW92ICAgICVlYXgsJWVzaQogICAgNDQ4MjoJMzEgYzEgICAgICAg ICAgICAgICAgCXhvciAgICAlZWF4LCVlY3gKICAgIDQ0ODQ6CWMxIGM2IDBiICAgICAgICAgICAg IAlyb2wgICAgJDB4YiwlZXNpCiAgICA0NDg3OgkyOSBmMSAgICAgICAgICAgICAgICAJc3ViICAg ICVlc2ksJWVjeAogICAgNDQ4OToJODkgY2UgICAgICAgICAgICAgICAgCW1vdiAgICAlZWN4LCVl c2kKICAgIDQ0OGI6CTMxIGNhICAgICAgICAgICAgICAgIAl4b3IgICAgJWVjeCwlZWR4CiAgICA0 NDhkOgljMSBjZSAwNyAgICAgICAgICAgICAJcm9yICAgICQweDcsJWVzaQogICAgNDQ5MDoJMjkg ZjIgICAgICAgICAgICAgICAgCXN1YiAgICAlZXNpLCVlZHgKICAgIDQ0OTI6CTg5IGQ2ICAgICAg ICAgICAgICAgIAltb3YgICAgJWVkeCwlZXNpCgkJIF9famhhc2hfZmluYWwoYSwgYiwgYyk7CiAg ICA0NDk0OgkzMSBkMCAgICAgICAgICAgICAgICAJeG9yICAgICVlZHgsJWVheAogICAgNDQ5NjoJ YzEgYzYgMTAgICAgICAgICAgICAgCXJvbCAgICAkMHgxMCwlZXNpCgljYXNlIDY6ICBiICs9ICh1 MzIpa1s1XTw8ODsKCWNhc2UgNTogIGIgKz0ga1s0XTsKCWNhc2UgNDogIGEgKz0gKHUzMilrWzNd PDwyNDsKCWNhc2UgMzogIGEgKz0gKHUzMilrWzJdPDwxNjsKCWNhc2UgMjogIGEgKz0gKHUzMilr WzFdPDw4OwoJY2FzZSAxOiAgYSArPSBrWzBdOwogICAgNDQ5OToJMjkgZjAgICAgICAgICAgICAg ICAgCXN1YiAgICAlZXNpLCVlYXgKICAgIDQ0OWI6CTg5IGM2ICAgICAgICAgICAgICAgIAltb3Yg ICAgJWVheCwlZXNpCgkJIF9famhhc2hfZmluYWwoYSwgYiwgYyk7CiAgICA0NDlkOgkzMSBjMSAg ICAgICAgICAgICAgICAJeG9yICAgICVlYXgsJWVjeAogICAgNDQ5ZjoJYzEgYzYgMDQgICAgICAg ICAgICAgCXJvbCAgICAkMHg0LCVlc2kKCWNhc2UgNjogIGIgKz0gKHUzMilrWzVdPDw4OwoJY2Fz ZSA1OiAgYiArPSBrWzRdOwoJY2FzZSA0OiAgYSArPSAodTMyKWtbM108PDI0OwoJY2FzZSAzOiAg YSArPSAodTMyKWtbMl08PDE2OwoJY2FzZSAyOiAgYSArPSAodTMyKWtbMV08PDg7CgljYXNlIDE6 ICBhICs9IGtbMF07CiAgICA0NGEyOgkyOSBmMSAgICAgICAgICAgICAgICAJc3ViICAgICVlc2ks JWVjeAoJCSBfX2poYXNoX2ZpbmFsKGEsIGIsIGMpOwogICAgNDRhNDoJMzEgY2EgICAgICAgICAg ICAgICAgCXhvciAgICAlZWN4LCVlZHgKICAgIDQ0YTY6CWMxIGMxIDBlICAgICAgICAgICAgIAly b2wgICAgJDB4ZSwlZWN4CiAgICA0NGE5OgkyOSBjYSAgICAgICAgICAgICAgICAJc3ViICAgICVl Y3gsJWVkeAogICAgNDRhYjoJMzEgZDAgICAgICAgICAgICAgICAgCXhvciAgICAlZWR4LCVlYXgK ICAgIDQ0YWQ6CWMxIGNhIDA4ICAgICAgICAgICAgIAlyb3IgICAgJDB4OCwlZWR4CiAgICA0NGIw OgkyOSBkMCAgICAgICAgICAgICAgICAJc3ViICAgICVlZHgsJWVheAogICAgNDRiMjoJOGIgYjQg MjQgOTggMDAgMDAgMDAgCW1vdiAgICAweDk4KCVyc3ApLCVlc2kKICAgIDQ0Yjk6CThiIDhjIDI0 IDljIDAwIDAwIDAwIAltb3YgICAgMHg5YyglcnNwKSwlZWN4CiAgICA0NGMwOgk4OSBjMiAgICAg ICAgICAgICAgICAJbW92ICAgICVlYXgsJWVkeAogICAgNDRjMjoJYzEgZTIgMTAgICAgICAgICAg ICAgCXNobCAgICAkMHgxMCwlZWR4CiAgICA0NGM1OgkzMSBkMCAgICAgICAgICAgICAgICAJeG9y ICAgICVlZHgsJWVheAogICAgNDRjNzoJMjkgZjEgICAgICAgICAgICAgICAgCXN1YiAgICAlZXNp LCVlY3gKICAgIDQ0Yzk6CTQ4IDYzIGM5ICAgICAgICAgICAgIAltb3ZzbHEgJWVjeCwlcmN4CiAg ICA0NGNjOgk0OCAwZiBhZiBjOCAgICAgICAgICAJaW11bCAgICVyYXgsJXJjeAogICAgNDRkMDoJ NDggYzEgZTkgMjAgICAgICAgICAgCXNociAgICAkMHgyMCwlcmN4CiAgICA0NGQ0OgkwMSBjZSAg ICAgICAgICAgICAgICAJYWRkICAgICVlY3gsJWVzaQogICAgNDRkNjoJNjYgYzEgYzYgMDggICAg ICAgICAgCXJvbCAgICAkMHg4LCVzaQogICAgNDRkYToJNGQgODUgZTQgICAgICAgICAgICAgCXRl c3QgICAlcjEyLCVyMTIKICAgIDQ0ZGQ6CTY2IDg5IDc0IDI0IDYyICAgICAgIAltb3YgICAgJXNp LDB4NjIoJXJzcCkKCSAqIGF0dGFja2VyIGlzIGxlYWtlZC4gT25seSB1cHBlciAxNiBiaXRzIGFy ZSByZWxldmFudCBpbiB0aGUKCSAqIGNvbXB1dGF0aW9uIGZvciAxNiBiaXQgcG9ydCB2YWx1ZS4K CSAqLwoJaGFzaCBePSBoYXNoIDw8IDE2OwoKCXJldHVybiBodG9ucygoKCh1NjQpIGhhc2ggKiAo bWF4IC0gbWluKSkgPj4gMzIpICsgbWluKTsKICAgIDQ0ZTI6CTBmIDg0IDdhIDA1IDAwIDAwICAg IAlqZSAgICAgNGE2MiA8dnhsYW5feG1pdF9vbmUrMHg4NDI+CiAgICA0NGU4Ogk0MSAwZiBiNiA0 NCAyNCAyYiAgICAJbW92emJsIDB4MmIoJXIxMiksJWVheAogICAgNDRlZToJNDggOGQgOTQgMjQg OTQgMDAgMDAgCWxlYSAgICAweDk0KCVyc3ApLCVyZHgKICAgIDQ0ZjU6CTAwIAogICAgNDRmNjoJ ODggODQgMjQgODcgMDAgMDAgMDAgCW1vdiAgICAlYWwsMHg4NyglcnNwKQogICAgNDRmZDoJNDEg MGYgYjYgNDQgMjQgMmEgICAgCW1vdnpibCAweDJhKCVyMTIpLCVlYXgKICAgIDQ1MDM6CTg4IDg0 IDI0IDg4IDAwIDAwIDAwIAltb3YgICAgJWFsLDB4ODgoJXJzcCkKCQkJCSAgICAgdnhsYW4tPmNm Zy5wb3J0X21heCwgdHJ1ZSk7CgoJaWYgKGluZm8pIHsKICAgIDQ1MGE6CTQxIDhiIDQ0IDI0IDJj ICAgICAgIAltb3YgICAgMHgyYyglcjEyKSwlZWF4CiAgICA0NTBmOgk4OSA4NCAyNCA4MCAwMCAw MCAwMCAJbW92ICAgICVlYXgsMHg4MCglcnNwKQogICAgNDUxNjoJNDEgMGYgYjYgNDQgMjQgMjkg ICAgCW1vdnpibCAweDI5KCVyMTIpLCVlYXgKCQl0dGwgPSBpbmZvLT5rZXkudHRsOwogICAgNDUx YzoJODMgZTAgMDEgICAgICAgICAgICAgCWFuZCAgICAkMHgxLCVlYXgKCX0KfQoKc3RhdGljIGlu bGluZSB2b2lkICppcF90dW5uZWxfaW5mb19vcHRzKHN0cnVjdCBpcF90dW5uZWxfaW5mbyAqaW5m bykKewoJcmV0dXJuIGluZm8gKyAxOwogICAgNDUxZjoJNDEgODAgN2MgMjQgNDggMDAgICAgCWNt cGIgICAkMHgwLDB4NDgoJXIxMikKICAgIDQ1MjU6CTg4IDQ0IDI0IDQ4ICAgICAgICAgIAltb3Yg ICAgJWFsLDB4NDgoJXJzcCkKICAgIDQ1Mjk6CTQ5IDhkIDQ0IDI0IDUwICAgICAgIAlsZWEgICAg MHg1MCglcjEyKSwlcmF4CgkJdG9zID0gaW5mby0+a2V5LnRvczsKICAgIDQ1MmU6CTQ4IDBmIDQ0 IGMyICAgICAgICAgIAljbW92ZSAgJXJkeCwlcmF4CiAgICA0NTMyOgk0OCA4OSA0NCAyNCA0MCAg ICAgICAJbW92ICAgICVyYXgsMHg0MCglcnNwKQogICAgNDUzNzoJNDggOGIgN2MgMjQgNzAgICAg ICAgCW1vdiAgICAweDcwKCVyc3ApLCVyZGkKCQlsYWJlbCA9IGluZm8tPmtleS5sYWJlbDsKICAg IDQ1M2M6CTQ4IDM5IDdjIDI0IDc4ICAgICAgIAljbXAgICAgJXJkaSwweDc4KCVyc3ApCiAgICA0 NTQxOgkwZiA5NSA0NCAyNCA3MCAgICAgICAJc2V0bmUgIDB4NzAoJXJzcCkKCQl1ZHBfc3VtID0g ISEoaW5mby0+a2V5LnR1bl9mbGFncyAmIFRVTk5FTF9DU1VNKTsKICAgIDQ1NDY6CTY2IDQxIDgz IDNmIDAyICAgICAgIAljbXB3ICAgJDB4MiwoJXIxNSkKICAgIDQ1NGI6CTBmIDg0IDJlIDAzIDAw IDAwICAgIAlqZSAgICAgNDg3ZiA8dnhsYW5feG1pdF9vbmUrMHg2NWY+CiAgICA0NTUxOgk0OCA4 YiA4MyA2OCAwOCAwMCAwMCAJbW92ICAgIDB4ODY4KCVyYngpLCVyYXgKICAgIDQ1NTg6CTQ4IDg1 IGMwICAgICAgICAgICAgIAl0ZXN0ICAgJXJheCwlcmF4CiAgICA0NTViOgkwZiA4NCBhNiBmZCBm ZiBmZiAgICAJamUgICAgIDQzMDcgPHZ4bGFuX3htaXRfb25lKzB4ZTc+CiAgICA0NTYxOgk0OCA4 YiA0MCAxMCAgICAgICAgICAJbW92ICAgIDB4MTAoJXJheCksJXJheAogICAgNDU2NToJMGYgYjYg OGMgMjQgODggMDAgMDAgCW1vdnpibCAweDg4KCVyc3ApLCVlY3gKICAgIDQ1NmM6CTAwIAoJX19i ZTE2IGRmID0gMDsKCV9fdTggdG9zLCB0dGw7CglpbnQgZXJyOwoJdTMyIGZsYWdzID0gdnhsYW4t PmZsYWdzOwoJYm9vbCB1ZHBfc3VtID0gZmFsc2U7Cglib29sIHhuZXQgPSAhbmV0X2VxKHZ4bGFu LT5uZXQsIGRldl9uZXQodnhsYW4tPmRldikpOwogICAgNDU2ZDoJNDggOGIgNDAgMjAgICAgICAg ICAgCW1vdiAgICAweDIwKCVyYXgpLCVyYXgKICAgIDQ1NzE6CTQ4IDg5IDQ0IDI0IDMwICAgICAg IAltb3YgICAgJXJheCwweDMwKCVyc3ApCgkJCW1kID0gaXBfdHVubmVsX2luZm9fb3B0cyhpbmZv KTsKCX0gZWxzZSB7CgkJbWQtPmdicCA9IHNrYi0+bWFyazsKCX0KCglpZiAoZHN0LT5zYS5zYV9m YW1pbHkgPT0gQUZfSU5FVCkgewogICAgNDU3NjoJNDggOGIgNDQgMjQgNjggICAgICAgCW1vdiAg ICAweDY4KCVyc3ApLCVyYXgKICAgIDQ1N2I6CTQ4IDgzIGMwIDA4ICAgICAgICAgIAlhZGQgICAg JDB4OCwlcmF4CiAgICA0NTdmOgk0ZCA4NSBkYiAgICAgICAgICAgICAJdGVzdCAgICVyMTEsJXIx MQojaWYgSVNfRU5BQkxFRChDT05GSUdfSVBWNikKCX0gZWxzZSB7CgkJc3RydWN0IGRzdF9lbnRy eSAqbmRzdDsKCQl1MzIgcnQ2aV9mbGFnczsKCgkJaWYgKCF2eGxhbi0+dm42X3NvY2spCiAgICA0 NTgyOgk0OCA4OSA0NCAyNCA3OCAgICAgICAJbW92ICAgICVyYXgsMHg3OCglcnNwKQogICAgNDU4 NzoJNDkgOGQgNDcgMDggICAgICAgICAgCWxlYSAgICAweDgoJXIxNSksJXJheAogICAgNDU4YjoJ NDggODkgNDQgMjQgNjggICAgICAgCW1vdiAgICAlcmF4LDB4NjgoJXJzcCkKICAgIDQ1OTA6CTBm IDg0IDkzIDA1IDAwIDAwICAgIAlqZSAgICAgNGIyOSA8dnhsYW5feG1pdF9vbmUrMHg5MDk+CgkJ CWdvdG8gZHJvcDsKCQlzayA9IHZ4bGFuLT52bjZfc29jay0+c29jay0+c2s7CgoJCW5kc3QgPSB2 eGxhbjZfZ2V0X3JvdXRlKHZ4bGFuLCBza2IsCiAgICA0NTk2Ogk0MSA4YiA1MyAyNCAgICAgICAg ICAJbW92ICAgIDB4MjQoJXIxMSksJWVkeAogICAgNDU5YToJNDggOGIgNDQgMjQgNzggICAgICAg CW1vdiAgICAweDc4KCVyc3ApLCVyYXgKCQlzdHJ1Y3QgZHN0X2VudHJ5ICpuZHN0OwoJCXUzMiBy dDZpX2ZsYWdzOwoKCQlpZiAoIXZ4bGFuLT52bjZfc29jaykKCQkJZ290byBkcm9wOwoJCXNrID0g dnhsYW4tPnZuNl9zb2NrLT5zb2NrLT5zazsKICAgIDQ1OWY6CTQ0IDhiIDg0IDI0IDgwIDAwIDAw IAltb3YgICAgMHg4MCglcnNwKSwlcjhkCiAgICA0NWE2OgkwMCAKCgkJbmRzdCA9IHZ4bGFuNl9n ZXRfcm91dGUodnhsYW4sIHNrYiwKICAgIDQ1YTc6CTRkIDhkIDRmIDA4ICAgICAgICAgIAlsZWEg ICAgMHg4KCVyMTUpLCVyOQogICAgNDVhYjoJNGMgODkgNzQgMjQgMDggICAgICAgCW1vdiAgICAl cjE0LDB4OCglcnNwKQogICAgNDViMDoJNGMgODkgNjQgMjQgMTAgICAgICAgCW1vdiAgICAlcjEy LDB4MTAoJXJzcCkKICAgIDQ1YjU6CTRjIDg5IGVlICAgICAgICAgICAgIAltb3YgICAgJXIxMywl cnNpCgkJCQkJcmRzdCA/IHJkc3QtPnJlbW90ZV9pZmluZGV4IDogMCwgdG9zLAoJCQkJCWxhYmVs LCAmZHN0LT5zaW42LnNpbjZfYWRkciwKICAgIDQ1Yjg6CTRjIDg5IGQ3ICAgICAgICAgICAgIAlt b3YgICAgJXIxMCwlcmRpCiAgICA0NWJiOgk0OCA4OSAwNCAyNCAgICAgICAgICAJbW92ICAgICVy YXgsKCVyc3ApCiAgICA0NWJmOgllOCBhYyBjNCBmZiBmZiAgICAgICAJY2FsbHEgIGE3MCA8dnhs YW42X2dldF9yb3V0ZT4KCgkJaWYgKCF2eGxhbi0+dm42X3NvY2spCgkJCWdvdG8gZHJvcDsKCQlz ayA9IHZ4bGFuLT52bjZfc29jay0+c29jay0+c2s7CgoJCW5kc3QgPSB2eGxhbjZfZ2V0X3JvdXRl KHZ4bGFuLCBza2IsCiAgICA0NWM0Ogk0OCAzZCAwMCBmMCBmZiBmZiAgICAJY21wICAgICQweGZm ZmZmZmZmZmZmZmYwMDAsJXJheAogICAgNDVjYToJNDkgODkgYzYgICAgICAgICAgICAgCW1vdiAg ICAlcmF4LCVyMTQKICAgIDQ1Y2Q6CTBmIDg3IDJjIDA2IDAwIDAwICAgIAlqYSAgICAgNGJmZiA8 dnhsYW5feG1pdF9vbmUrMHg5ZGY+CiAgICA0NWQzOgk0OCAzYiA1OCAxOCAgICAgICAgICAJY21w ICAgIDB4MTgoJXJheCksJXJieAogICAgNDVkNzoJMGYgODQgOTAgMDUgMDAgMDAgICAgCWplICAg ICA0YjZkIDx2eGxhbl94bWl0X29uZSsweDk0ZD4KICAgIDQ1ZGQ6CTRkIDg1IGU0ICAgICAgICAg ICAgIAl0ZXN0ICAgJXIxMiwlcjEyCiAgICA0NWUwOgk4YiA4MCAxNCAwMSAwMCAwMCAgICAJbW92 ICAgIDB4MTE0KCVyYXgpLCVlYXgKICAgIDQ1ZTY6CTBmIDg1IDA2IDAxIDAwIDAwICAgIAlqbmUg ICAgNDZmMiA8dnhsYW5feG1pdF9vbmUrMHg0ZDI+CiAgICA0NWVjOgk4OSBjMiAgICAgICAgICAg ICAgICAJbW92ICAgICVlYXgsJWVkeAogICAgNDVlZToJYzEgZWEgMWYgICAgICAgICAgICAgCXNo ciAgICAkMHgxZiwlZWR4CiAgICA0NWYxOgk4NCBkMiAgICAgICAgICAgICAgICAJdGVzdCAgICVk bCwlZGwKICAgIDQ1ZjM6CTBmIDg0IGY5IDAwIDAwIDAwICAgIAlqZSAgICAgNDZmMiA8dnhsYW5f eG1pdF9vbmUrMHg0ZDI+CgkJCQkJcmRzdCA/IHJkc3QtPnJlbW90ZV9pZmluZGV4IDogMCwgdG9z LAoJCQkJCWxhYmVsLCAmZHN0LT5zaW42LnNpbjZfYWRkciwKCQkJCQkmc3JjLT5zaW42LnNpbjZf YWRkciwKCQkJCQlkc3RfY2FjaGUsIGluZm8pOwoJCWlmIChJU19FUlIobmRzdCkpIHsKICAgIDQ1 Zjk6CWE5IDAwIDAwIDAwIDMwICAgICAgIAl0ZXN0ICAgJDB4MzAwMDAwMDAsJWVheAogICAgNDVm ZToJMGYgODQgYjAgMDUgMDAgMDAgICAgCWplICAgICA0YmI0IDx2eGxhbl94bWl0X29uZSsweDk5 ND4KCQkJCSAgICZkc3QtPnNpbjYuc2luNl9hZGRyKTsKCQkJZGV2LT5zdGF0cy50eF9jYXJyaWVy X2Vycm9ycysrOwoJCQlnb3RvIHR4X2Vycm9yOwoJCX0KCgkJaWYgKG5kc3QtPmRldiA9PSBkZXYp IHsKICAgIDQ2MDQ6CThiIDQ0IDI0IDY0ICAgICAgICAgIAltb3YgICAgMHg2NCglcnNwKSwlZWF4 CiAgICA0NjA4OgljMSBlOCAwNyAgICAgICAgICAgICAJc2hyICAgICQweDcsJWVheAogICAgNDYw YjoJODMgZjAgMDEgICAgICAgICAgICAgCXhvciAgICAkMHgxLCVlYXgKCQkJZ290byB0eF9lcnJv cjsKCQl9CgoJCS8qIEJ5cGFzcyBlbmNhcHN1bGF0aW9uIGlmIHRoZSBkZXN0aW5hdGlvbiBpcyBs b2NhbCAqLwoJCXJ0NmlfZmxhZ3MgPSAoKHN0cnVjdCBydDZfaW5mbyAqKW5kc3QpLT5ydDZpX2Zs YWdzOwoJCWlmICghaW5mbyAmJiBydDZpX2ZsYWdzICYgUlRGX0xPQ0FMICYmCiAgICA0NjBlOgk4 MyBlMCAwMSAgICAgICAgICAgICAJYW5kICAgICQweDEsJWVheAoJCQlkZXYtPnN0YXRzLmNvbGxp c2lvbnMrKzsKCQkJZ290byB0eF9lcnJvcjsKCQl9CgoJCS8qIEJ5cGFzcyBlbmNhcHN1bGF0aW9u IGlmIHRoZSBkZXN0aW5hdGlvbiBpcyBsb2NhbCAqLwoJCXJ0NmlfZmxhZ3MgPSAoKHN0cnVjdCBy dDZfaW5mbyAqKW5kc3QpLT5ydDZpX2ZsYWdzOwogICAgNDYxMToJODggNDQgMjQgNDggICAgICAg ICAgCW1vdiAgICAlYWwsMHg0OCglcnNwKQogICAgNDYxNToJZTkgZTEgMDAgMDAgMDAgICAgICAg CWptcHEgICA0NmZiIDx2eGxhbl94bWl0X29uZSsweDRkYj4KCQlpZiAoIWluZm8gJiYgcnQ2aV9m bGFncyAmIFJURl9MT0NBTCAmJgogICAgNDYxYToJMGYgYjcgODMgN2MgMDkgMDAgMDAgCW1vdnp3 bCAweDk3YyglcmJ4KSwlZWF4CiAgICA0NjIxOgk2NiA4OSA4NCAyNCA4NCAwMCAwMCAJbW92ICAg ICVheCwweDg0KCVyc3ApCiAgICA0NjI4OgkwMCAKICAgIDQ2Mjk6CWU5IDliIGZjIGZmIGZmICAg ICAgIAlqbXBxICAgNDJjOSA8dnhsYW5feG1pdF9vbmUrMHhhOT4KICAgIDQ2MmU6CTQ5IDhiIDU3 IDA4ICAgICAgICAgIAltb3YgICAgMHg4KCVyMTUpLCVyZHgKICAgIDQ2MzI6CTQ5IDBiIDU3IDEw ICAgICAgICAgIAlvciAgICAgMHgxMCglcjE1KSwlcmR4CgkJCXZ4bGFuX2VuY2FwX2J5cGFzcyhz a2IsIHZ4bGFuLCBkc3RfdnhsYW4pOwoJCQlyZXR1cm47CgkJfQoKCQlpZiAoIWluZm8pCgkJCXVk cF9zdW0gPSAhKGZsYWdzICYgVlhMQU5fRl9VRFBfWkVST19DU1VNNl9UWCk7CiAgICA0NjM2Ogkw ZiA5NCBjMiAgICAgICAgICAgICAJc2V0ZSAgICVkbAogICAgNDYzOToJZTkgYmQgZmMgZmYgZmYg ICAgICAgCWptcHEgICA0MmZiIDx2eGxhbl94bWl0X29uZSsweGRiPgogICAgNDYzZToJNGQgOGIg YTQgMjQgOTAgMDAgMDAgCW1vdiAgICAweDkwKCVyMTIpLCVyMTIKICAgIDQ2NDU6CTAwIAogICAg NDY0NjoJNGQgODUgZTQgICAgICAgICAgICAgCXRlc3QgICAlcjEyLCVyMTIKICAgIDQ2NDk6CTBm IDg0IGUxIDA0IDAwIDAwICAgIAlqZSAgICAgNGIzMCA8dnhsYW5feG1pdF9vbmUrMHg5MTA+Cgli b29sIHhuZXQgPSAhbmV0X2VxKHZ4bGFuLT5uZXQsIGRldl9uZXQodnhsYW4tPmRldikpOwoKCWlu Zm8gPSBza2JfdHVubmVsX2luZm8oc2tiKTsKCglpZiAocmRzdCkgewoJCWRzdF9wb3J0ID0gcmRz dC0+cmVtb3RlX3BvcnQgPyByZHN0LT5yZW1vdGVfcG9ydCA6IHZ4bGFuLT5jZmcuZHN0X3BvcnQ7 CiAgICA0NjRmOgk0OSA4MyBjNCAxYyAgICAgICAgICAJYWRkICAgICQweDFjLCVyMTIKICAgIDQ2 NTM6CTRkIDg1IGRiICAgICAgICAgICAgIAl0ZXN0ICAgJXIxMSwlcjExCiAgICA0NjU2OgkwZiA4 NSA1NyBmYyBmZiBmZiAgICAJam5lICAgIDQyYjMgPHZ4bGFuX3htaXRfb25lKzB4OTM+CiAgICA0 NjVjOgk0MSAwZiBiNyA0NCAyNCAzMiAgICAJbW92endsIDB4MzIoJXIxMiksJWVheApzdGF0aWMg aW5saW5lIGJvb2wgaXB2Nl9hZGRyX2FueShjb25zdCBzdHJ1Y3QgaW42X2FkZHIgKmEpCnsKI2lm IGRlZmluZWQoQ09ORklHX0hBVkVfRUZGSUNJRU5UX1VOQUxJR05FRF9BQ0NFU1MpICYmIEJJVFNf UEVSX0xPTkcgPT0gNjQKCWNvbnN0IHVuc2lnbmVkIGxvbmcgKnVsID0gKGNvbnN0IHVuc2lnbmVk IGxvbmcgKilhOwoKCXJldHVybiAodWxbMF0gfCB1bFsxXSkgPT0gMFVMOwogICAgNDY2MjoJNjYg ODUgYzAgICAgICAgICAgICAgCXRlc3QgICAlYXgsJWF4CiAgICA0NjY1Ogk2NiA4OSA4NCAyNCA4 NCAwMCAwMCAJbW92ICAgICVheCwweDg0KCVyc3ApCiAgICA0NjZjOgkwMCAKICAgIDQ2NmQ6CTc1 IDBmICAgICAgICAgICAgICAgIAlqbmUgICAgNDY3ZSA8dnhsYW5feG1pdF9vbmUrMHg0NWU+CgoJ ZHN0ID0gc2tiX2RzdChza2IpOwoJaWYgKGRzdCAmJiBkc3QtPmx3dHN0YXRlKQogICAgNDY2ZjoJ MGYgYjcgODMgN2MgMDkgMDAgMDAgCW1vdnp3bCAweDk3YyglcmJ4KSwlZWF4CiAgICA0Njc2Ogk2 NiA4OSA4NCAyNCA4NCAwMCAwMCAJbW92ICAgICVheCwweDg0KCVyc3ApCiAgICA0NjdkOgkwMCAK ICAgIDQ2N2U6CTQ5IDhiIDA0IDI0ICAgICAgICAgIAltb3YgICAgKCVyMTIpLCVyYXgKCWluZm8t Pm9wdGlvbnNfbGVuID0gbGVuOwp9CgpzdGF0aWMgaW5saW5lIHN0cnVjdCBpcF90dW5uZWxfaW5m byAqbHd0X3R1bl9pbmZvKHN0cnVjdCBsd3R1bm5lbF9zdGF0ZSAqbHd0c3RhdGUpCnsKCXJldHVy biAoc3RydWN0IGlwX3R1bm5lbF9pbmZvICopbHd0c3RhdGUtPmRhdGE7CiAgICA0NjgyOgk0OCBj MSBlOCAyMCAgICAgICAgICAJc2hyICAgICQweDIwLCVyYXgKCWJvb2wgdWRwX3N1bSA9IGZhbHNl OwoJYm9vbCB4bmV0ID0gIW5ldF9lcSh2eGxhbi0+bmV0LCBkZXZfbmV0KHZ4bGFuLT5kZXYpKTsK CglpbmZvID0gc2tiX3R1bm5lbF9pbmZvKHNrYik7CgoJaWYgKHJkc3QpIHsKICAgIDQ2ODY6CTQx IGY2IDQ0IDI0IDQ5IDAyICAgIAl0ZXN0YiAgJDB4MiwweDQ5KCVyMTIpCgkJaWYgKCFpbmZvKSB7 CgkJCVdBUk5fT05DRSgxLCAiJXM6IE1pc3NpbmcgZW5jYXBzdWxhdGlvbiBpbnN0cnVjdGlvbnNc biIsCgkJCQkgIGRldi0+bmFtZSk7CgkJCWdvdG8gZHJvcDsKCQl9CgkJZHN0X3BvcnQgPSBpbmZv LT5rZXkudHBfZHN0ID8gOiB2eGxhbi0+Y2ZnLmRzdF9wb3J0OwogICAgNDY4YzoJNDggODkgNDQg MjQgNTAgICAgICAgCW1vdiAgICAlcmF4LDB4NTAoJXJzcCkKICAgIDQ2OTE6CTBmIDg1IDgwIDAz IDAwIDAwICAgIAlqbmUgICAgNGExNyA8dnhsYW5feG1pdF9vbmUrMHg3Zjc+CiAgICA0Njk3Ogk0 MSA4YiA0NCAyNCAwYyAgICAgICAJbW92ICAgIDB4YyglcjEyKSwlZWF4CiAgICA0NjljOgliYSAw MiAwMCAwMCAwMCAgICAgICAJbW92ICAgICQweDIsJWVkeAogICAgNDZhMToJNjYgODkgOTQgMjQg YTAgMDAgMDAgCW1vdiAgICAlZHgsMHhhMCglcnNwKQogICAgNDZhODoJMDAgCiAgICA0NmE5Ogk4 OSA4NCAyNCBhNCAwMCAwMCAwMCAJbW92ICAgICVlYXgsMHhhNCglcnNwKQpzdGF0aWMgaW5saW5l IF9fYmUzMiB2eGxhbl90dW5faWRfdG9fdm5pKF9fYmU2NCB0dW5faWQpCnsKI2lmIGRlZmluZWQo X19CSUdfRU5ESUFOKQoJcmV0dXJuIChfX2ZvcmNlIF9fYmUzMil0dW5faWQ7CiNlbHNlCglyZXR1 cm4gKF9fZm9yY2UgX19iZTMyKSgoX19mb3JjZSB1NjQpdHVuX2lkID4+IDMyKTsKICAgIDQ2YjA6 CTQxIDhiIDQ0IDI0IDA4ICAgICAgIAltb3YgICAgMHg4KCVyMTIpLCVlYXgKICAgIDQ2YjU6CTg5 IDg0IDI0IGM0IDAwIDAwIDAwIAltb3YgICAgJWVheCwweGM0KCVyc3ApCiAgICA0NmJjOgliOCAw MiAwMCAwMCAwMCAgICAgICAJbW92ICAgICQweDIsJWVheAp9CgpzdGF0aWMgaW5saW5lIHVuc2ln bmVkIHNob3J0IGlwX3R1bm5lbF9pbmZvX2FmKGNvbnN0IHN0cnVjdCBpcF90dW5uZWxfaW5mbwoJ CQkJCSAgICAgICAqdHVuX2luZm8pCnsKCXJldHVybiB0dW5faW5mby0+bW9kZSAmIElQX1RVTk5F TF9JTkZPX0lQVjYgPyBBRl9JTkVUNiA6IEFGX0lORVQ7CiAgICA0NmMxOgk0OCA4ZCBiYyAyNCBj MCAwMCAwMCAJbGVhICAgIDB4YzAoJXJzcCksJXJkaQogICAgNDZjODoJMDAgCgkJdm5pID0gdnhs YW5fdHVuX2lkX3RvX3ZuaShpbmZvLT5rZXkudHVuX2lkKTsKCQlyZW1vdGVfaXAuc2Euc2FfZmFt aWx5ID0gaXBfdHVubmVsX2luZm9fYWYoaW5mbyk7CgkJaWYgKHJlbW90ZV9pcC5zYS5zYV9mYW1p bHkgPT0gQUZfSU5FVCkgewoJCQlyZW1vdGVfaXAuc2luLnNpbl9hZGRyLnNfYWRkciA9IGluZm8t PmtleS51LmlwdjQuZHN0OwogICAgNDZjOToJNGQgOGQgNzQgMjQgMzggICAgICAgCWxlYSAgICAw eDM4KCVyMTIpLCVyMTQKCQkJCSAgZGV2LT5uYW1lKTsKCQkJZ290byBkcm9wOwoJCX0KCQlkc3Rf cG9ydCA9IGluZm8tPmtleS50cF9kc3QgPyA6IHZ4bGFuLT5jZmcuZHN0X3BvcnQ7CgkJdm5pID0g dnhsYW5fdHVuX2lkX3RvX3ZuaShpbmZvLT5rZXkudHVuX2lkKTsKCQlyZW1vdGVfaXAuc2Euc2Ff ZmFtaWx5ID0gaXBfdHVubmVsX2luZm9fYWYoaW5mbyk7CiAgICA0NmNlOgk0YyA4ZCBiYyAyNCBh MCAwMCAwMCAJbGVhICAgIDB4YTAoJXJzcCksJXIxNQogICAgNDZkNToJMDAgCiAgICA0NmQ2Ogk0 OCA4OSA3YyAyNCA2OCAgICAgICAJbW92ICAgICVyZGksMHg2OCglcnNwKQoJCWlmIChyZW1vdGVf aXAuc2Euc2FfZmFtaWx5ID09IEFGX0lORVQpIHsKCQkJcmVtb3RlX2lwLnNpbi5zaW5fYWRkci5z X2FkZHIgPSBpbmZvLT5rZXkudS5pcHY0LmRzdDsKICAgIDQ2ZGI6CWU5IDA4IGZjIGZmIGZmICAg ICAgIAlqbXBxICAgNDJlOCA8dnhsYW5feG1pdF9vbmUrMHhjOD4KCQkJbG9jYWxfaXAuc2luLnNp bl9hZGRyLnNfYWRkciA9IGluZm8tPmtleS51LmlwdjQuc3JjOwogICAgNDZlMDoJNDEgMGYgYjYg NDcgMDggICAgICAgCW1vdnpibCAweDgoJXIxNSksJWVheAogICAgNDZlNToJM2QgZmYgMDAgMDAg MDAgICAgICAgCWNtcCAgICAkMHhmZiwlZWF4CiAgICA0NmVhOgkwZiA5NCBjMCAgICAgICAgICAg ICAJc2V0ZSAgICVhbAogICAgNDZlZDoJZTkgOGUgZmMgZmYgZmYgICAgICAgCWptcHEgICA0Mzgw IDx2eGxhbl94bWl0X29uZSsweDE2MD4KCQl9IGVsc2UgewoJCQlyZW1vdGVfaXAuc2luNi5zaW42 X2FkZHIgPSBpbmZvLT5rZXkudS5pcHY2LmRzdDsKCQkJbG9jYWxfaXAuc2luNi5zaW42X2FkZHIg PSBpbmZvLT5rZXkudS5pcHY2LnNyYzsKCQl9CgkJZHN0ID0gJnJlbW90ZV9pcDsKCQlzcmMgPSAm bG9jYWxfaXA7CiAgICA0NmYyOgk0ZCA4NSBlNCAgICAgICAgICAgICAJdGVzdCAgICVyMTIsJXIx MgogICAgNDZmNToJMGYgODQgMDkgZmYgZmYgZmYgICAgCWplICAgICA0NjA0IDx2eGxhbl94bWl0 X29uZSsweDNlND4KCQlkc3RfY2FjaGUgPSAmaW5mby0+ZHN0X2NhY2hlOwogICAgNDZmYjoJNDEg MGYgYjcgODUgYzAgMDAgMDAgCW1vdnp3bCAweGMwKCVyMTMpLCVlYXgKICAgIDQ3MDI6CTAwIAoJ CQlsb2NhbF9pcC5zaW4uc2luX2FkZHIuc19hZGRyID0gaW5mby0+a2V5LnUuaXB2NC5zcmM7CgkJ fSBlbHNlIHsKCQkJcmVtb3RlX2lwLnNpbjYuc2luNl9hZGRyID0gaW5mby0+a2V5LnUuaXB2Ni5k c3Q7CgkJCWxvY2FsX2lwLnNpbjYuc2luNl9hZGRyID0gaW5mby0+a2V5LnUuaXB2Ni5zcmM7CgkJ fQoJCWRzdCA9ICZyZW1vdGVfaXA7CiAgICA0NzAzOgk2NiA4MyBmOCAwOCAgICAgICAgICAJY21w ICAgICQweDgsJWF4CgkJc3JjID0gJmxvY2FsX2lwOwogICAgNDcwNzoJMGYgODQgOGUgMDMgMDAg MDAgICAgCWplICAgICA0YTliIDx2eGxhbl94bWl0X29uZSsweDg3Yj4KICAgIDQ3MGQ6CTQ0IDBm IGI2IGJjIDI0IDg4IDAwIAltb3Z6YmwgMHg4OCglcnNwKSwlcjE1ZAogICAgNDcxNDoJMDAgMDAg CglyZXR1cm4gKGEtPnM2X2FkZHIzMlswXSAmIGh0b25sKDB4ZmZmZmZmZjApKSA9PSBodG9ubCgw eDIwMDEwMDEwKTsKfQoKc3RhdGljIGlubGluZSBib29sIGlwdjZfYWRkcl9pc19tdWx0aWNhc3Qo Y29uc3Qgc3RydWN0IGluNl9hZGRyICphZGRyKQp7CglyZXR1cm4gKGFkZHItPnM2X2FkZHIzMlsw XSAmIGh0b25sKDB4RkYwMDAwMDApKSA9PSBodG9ubCgweEZGMDAwMDAwKTsKICAgIDQ3MTY6CTQ1 IDMxIGU0ICAgICAgICAgICAgIAl4b3IgICAgJXIxMmQsJXIxMmQKICAgIDQ3MTk6CTQxIDgzIGU3 IGZjICAgICAgICAgIAlhbmQgICAgJDB4ZmZmZmZmZmMsJXIxNWQKICAgIDQ3MWQ6CTY2IDNkIDg2 IGRkICAgICAgICAgIAljbXAgICAgJDB4ZGQ4NiwlYXgKICAgIDQ3MjE6CTBmIDg0IDYwIDA0IDAw IDAwICAgIAlqZSAgICAgNGI4NyA8dnhsYW5feG1pdF9vbmUrMHg5Njc+CgkJCQlnb3RvIHR4X2Vy cm9yOwoJCQl2eGxhbl9lbmNhcF9ieXBhc3Moc2tiLCB2eGxhbiwgZHN0X3Z4bGFuKTsKCQkJcmV0 dXJuOwoJCX0KCgkJaWYgKCFpbmZvKQogICAgNDcyNzoJODAgYmMgMjQgODcgMDAgMDAgMDAgCWNt cGIgICAkMHgwLDB4ODcoJXJzcCkKICAgIDQ3MmU6CTAwIAogICAgNDcyZjoJMGYgODQgNTIgMDMg MDAgMDAgICAgCWplICAgICA0YTg3IDx2eGxhbl94bWl0X29uZSsweDg2Nz4KCi8qIEV4dHJhY3Qg ZHNmaWVsZCBmcm9tIGlubmVyIHByb3RvY29sICovCnN0YXRpYyBpbmxpbmUgdTggaXBfdHVubmVs X2dldF9kc2ZpZWxkKGNvbnN0IHN0cnVjdCBpcGhkciAqaXBoLAoJCQkJICAgICAgIGNvbnN0IHN0 cnVjdCBza19idWZmICpza2IpCnsKCWlmIChza2ItPnByb3RvY29sID09IGh0b25zKEVUSF9QX0lQ KSkKICAgIDQ3MzU6CTBmIGI2IDc0IDI0IDcwICAgICAgIAltb3Z6YmwgMHg3MCglcnNwKSwlZXNp CiAgICA0NzNhOgk0YyA4OSBlZiAgICAgICAgICAgICAJbW92ICAgICVyMTMsJXJkaQogKiAgRUNO IGNvZGVwb2ludCBvZiB0aGUgb3V0c2lkZSBoZWFkZXIgdG8gRUNUKDApIGlmIHRoZSBFQ04gY29k ZXBvaW50IG9mCiAqICB0aGUgaW5zaWRlIGhlYWRlciBpcyBDRS4KICovCnN0YXRpYyBpbmxpbmUg X191OCBJTkVUX0VDTl9lbmNhcHN1bGF0ZShfX3U4IG91dGVyLCBfX3U4IGlubmVyKQp7CglvdXRl ciAmPSB+SU5FVF9FQ05fTUFTSzsKICAgIDQ3M2Q6CWU4IDAwIDAwIDAwIDAwICAgICAgIAljYWxs cSAgNDc0MiA8dnhsYW5feG1pdF9vbmUrMHg1MjI+CiAgICA0NzQyOgkwZiBiNiA0NCAyNCA0OCAg ICAgICAJbW92emJsIDB4NDgoJXJzcCksJWVheAogICAgNDc0NzoJNDQgOGIgNGMgMjQgNjQgICAg ICAgCW1vdiAgICAweDY0KCVyc3ApLCVyOWQKICAgIDQ3NGM6CWJhIDI4IDAwIDAwIDAwICAgICAg IAltb3YgICAgJDB4MjgsJWVkeAoJCXJldHVybiBpcGgtPnRvczsKCWVsc2UgaWYgKHNrYi0+cHJv dG9jb2wgPT0gaHRvbnMoRVRIX1BfSVBWNikpCiAgICA0NzUxOgk0YyA4YiA0NCAyNCA0MCAgICAg ICAJbW92ICAgIDB4NDAoJXJzcCksJXI4CiAgICA0NzU2Ogk4YiA0YyAyNCA1MCAgICAgICAgICAJ bW92ICAgIDB4NTAoJXJzcCksJWVjeAoJCQl1ZHBfc3VtID0gIShmbGFncyAmIFZYTEFOX0ZfVURQ X1pFUk9fQ1NVTTZfVFgpOwoKCQl0b3MgPSBpcF90dW5uZWxfZWNuX2VuY2FwKHRvcywgb2xkX2lw aCwgc2tiKTsKCQl0dGwgPSB0dGwgPyA6IGlwNl9kc3RfaG9wbGltaXQobmRzdCk7CiAgICA0NzVh Ogk0YyA4OSBmNiAgICAgICAgICAgICAJbW92ICAgICVyMTQsJXJzaQogICAgNDc1ZDoJNGMgODkg ZWYgICAgICAgICAgICAgCW1vdiAgICAlcjEzLCVyZGkKICAgIDQ3NjA6CTg5IDA0IDI0ICAgICAg ICAgICAgIAltb3YgICAgJWVheCwoJXJzcCkKICAgIDQ3NjM6CWU4IDI4IGY2IGZmIGZmICAgICAg IAljYWxscSAgM2Q5MCA8dnhsYW5fYnVpbGRfc2tiPgoJCXNrYl9zY3J1Yl9wYWNrZXQoc2tiLCB4 bmV0KTsKICAgIDQ3Njg6CTg1IGMwICAgICAgICAgICAgICAgIAl0ZXN0ICAgJWVheCwlZWF4CiAg ICA0NzZhOgkwZiA4OCA1OCAwMyAwMCAwMCAgICAJanMgICAgIDRhYzggPHZ4bGFuX3htaXRfb25l KzB4OGE4PgogICAgNDc3MDoJMGYgYjYgNDQgMjQgNDggICAgICAgCW1vdnpibCAweDQ4KCVyc3Ap LCVlYXgKCQllcnIgPSB2eGxhbl9idWlsZF9za2Ioc2tiLCBuZHN0LCBzaXplb2Yoc3RydWN0IGlw djZoZHIpLAogICAgNDc3NToJMGYgYjcgNzQgMjQgNjIgICAgICAgCW1vdnp3bCAweDYyKCVyc3Ap LCVlc2kKICAgIDQ3N2E6CTQ1IDA5IGZjICAgICAgICAgICAgIAlvciAgICAgJXIxNWQsJXIxMmQK ICAgIDQ3N2Q6CTBmIGI3IDhjIDI0IDg0IDAwIDAwIAltb3Z6d2wgMHg4NCglcnNwKSwlZWN4CiAg ICA0Nzg0OgkwMCAKICAgIDQ3ODU6CTRjIDhiIDRjIDI0IDY4ICAgICAgIAltb3YgICAgMHg2OCgl cnNwKSwlcjkKICAgIDQ3OGE6CTQ1IDBmIGI2IGU0ICAgICAgICAgIAltb3Z6YmwgJXIxMmIsJXIx MmQKICAgIDQ3OGU6CTRjIDhiIDQ0IDI0IDc4ICAgICAgIAltb3YgICAgMHg3OCglcnNwKSwlcjgK ICAgIDQ3OTM6CTQ0IDg5IDI0IDI0ICAgICAgICAgIAltb3YgICAgJXIxMmQsKCVyc3ApCiAgICA0 Nzk3Ogk0YyA4OSBlYSAgICAgICAgICAgICAJbW92ICAgICVyMTMsJXJkeAoJCQkJICAgICAgdm5p LCBtZCwgZmxhZ3MsIHVkcF9zdW0pOwoJCWlmIChlcnIgPCAwKSB7CiAgICA0NzlhOgk0YyA4OSBm NyAgICAgICAgICAgICAJbW92ICAgICVyMTQsJXJkaQogICAgNDc5ZDoJODMgZjAgMDEgICAgICAg ICAgICAgCXhvciAgICAkMHgxLCVlYXgKCQkJZHN0X3JlbGVhc2UobmRzdCk7CgkJCXJldHVybjsK CQl9CgkJdWRwX3R1bm5lbDZfeG1pdF9za2IobmRzdCwgc2ssIHNrYiwgZGV2LAogICAgNDdhMDoJ ODkgNzQgMjQgMTggICAgICAgICAgCW1vdiAgICAlZXNpLDB4MTgoJXJzcCkKICAgIDQ3YTQ6CTQ4 IDhiIDc0IDI0IDMwICAgICAgIAltb3YgICAgMHgzMCglcnNwKSwlcnNpCiAgICA0N2E5OgkwZiBi NiBjMCAgICAgICAgICAgICAJbW92emJsICVhbCwlZWF4CiAgICA0N2FjOgk4OSA0YyAyNCAyMCAg ICAgICAgICAJbW92ICAgICVlY3gsMHgyMCglcnNwKQogICAgNDdiMDoJNDggODkgZDkgICAgICAg ICAgICAgCW1vdiAgICAlcmJ4LCVyY3gKICAgIDQ3YjM6CTg5IDQ0IDI0IDI4ICAgICAgICAgIAlt b3YgICAgJWVheCwweDI4KCVyc3ApCiAgICA0N2I3Ogk4YiA4NCAyNCA4MCAwMCAwMCAwMCAJbW92 ICAgIDB4ODAoJXJzcCksJWVheAogICAgNDdiZToJODkgNDQgMjQgMTAgICAgICAgICAgCW1vdiAg ICAlZWF4LDB4MTAoJXJzcCkKICAgIDQ3YzI6CTBmIGI2IDg0IDI0IDg3IDAwIDAwIAltb3Z6Ymwg MHg4NyglcnNwKSwlZWF4CiAgICA0N2M5OgkwMCAKICAgIDQ3Y2E6CTg5IDQ0IDI0IDA4ICAgICAg ICAgIAltb3YgICAgJWVheCwweDgoJXJzcCkKICAgIDQ3Y2U6CWU4IDAwIDAwIDAwIDAwICAgICAg IAljYWxscSAgNDdkMyA8dnhsYW5feG1pdF9vbmUrMHg1YjM+CiAgICA0N2QzOgllOSAzZiBmYiBm ZiBmZiAgICAgICAJam1wcSAgIDQzMTcgPHZ4bGFuX3htaXRfb25lKzB4Zjc+CiAgICA0N2Q4Ogk0 OCA4YiBiMyA3MCAwOCAwMCAwMCAJbW92ICAgIDB4ODcwKCVyYngpLCVyc2kKICAgIDQ3ZGY6CTRj IDg5IGQyICAgICAgICAgICAgIAltb3YgICAgJXIxMCwlcmR4CiAgICA0N2UyOgk0YyA4OSBlZiAg ICAgICAgICAgICAJbW92ICAgICVyMTMsJXJkaQogICAgNDdlNToJZTggNTYgZjIgZmYgZmYgICAg ICAgCWNhbGxxICAzYTQwIDx2eGxhbl9lbmNhcF9ieXBhc3MuaXNyYS40Nz4KICAgIDQ3ZWE6CWU5 IDI4IGZiIGZmIGZmICAgICAgIAlqbXBxICAgNDMxNyA8dnhsYW5feG1pdF9vbmUrMHhmNz4KICAg IDQ3ZWY6CTRjIDg5IGVmICAgICAgICAgICAgIAltb3YgICAgJXIxMywlcmRpCiAgICA0N2YyOgk0 YyA4OSA1YyAyNCA0MCAgICAgICAJbW92ICAgICVyMTEsMHg0MCglcnNwKQogICAgNDdmNzoJNGMg ODkgNTQgMjQgNDggICAgICAgCW1vdiAgICAlcjEwLDB4NDgoJXJzcCkKICAgIDQ3ZmM6CWU4IDAw IDAwIDAwIDAwICAgICAgIAljYWxscSAgNDgwMSA8dnhsYW5feG1pdF9vbmUrMHg1ZTE+CiAgICA0 ODAxOgk0YyA4YiA1YyAyNCA0MCAgICAgICAJbW92ICAgIDB4NDAoJXJzcCksJXIxMQogICAgNDgw NjoJNGMgOGIgNTQgMjQgNDggICAgICAgCW1vdiAgICAweDQ4KCVyc3ApLCVyMTAKCX0KCglpZiAo dnhsYW5fYWRkcl9hbnkoZHN0KSkgewoJCWlmIChkaWRfcnNjKSB7CgkJCS8qIHNob3J0LWNpcmN1 aXRlZCBiYWNrIHRvIGxvY2FsIGJyaWRnZSAqLwoJCQl2eGxhbl9lbmNhcF9ieXBhc3Moc2tiLCB2 eGxhbiwgdnhsYW4pOwogICAgNDgwYjoJZTkgZDMgZmIgZmYgZmYgICAgICAgCWptcHEgICA0M2Uz IDx2eGxhbl94bWl0X29uZSsweDFjMz4KICAgIDQ4MTA6CTQ4IDhkIDk0IDI0IDljIDAwIDAwIAls ZWEgICAgMHg5YyglcnNwKSwlcmR4CiAgICA0ODE3OgkwMCAKICAgIDQ4MTg6CTQ4IDhkIGI0IDI0 IDk4IDAwIDAwIAlsZWEgICAgMHg5OCglcnNwKSwlcnNpCiAgICA0ODFmOgkwMCAKfQoKc3RhdGlj IGlubGluZSBfX3UzMiBza2JfZ2V0X2hhc2goc3RydWN0IHNrX2J1ZmYgKnNrYikKewoJaWYgKCFz a2ItPmw0X2hhc2ggJiYgIXNrYi0+c3dfaGFzaCkKCQlfX3NrYl9nZXRfaGFzaChza2IpOwogICAg NDgyMDoJNGMgODkgNWMgMjQgNDAgICAgICAgCW1vdiAgICAlcjExLDB4NDAoJXJzcCkKICAgIDQ4 MjU6CTRjIDg5IDU0IDI0IDQ4ICAgICAgIAltb3YgICAgJXIxMCwweDQ4KCVyc3ApCiAgICA0ODJh OgllOCAwMCAwMCAwMCAwMCAgICAgICAJY2FsbHEgIDQ4MmYgPHZ4bGFuX3htaXRfb25lKzB4NjBm PgogICAgNDgyZjoJNGMgOGIgNWMgMjQgNDAgICAgICAgCW1vdiAgICAweDQwKCVyc3ApLCVyMTEK ICAgIDQ4MzQ6CTRjIDhiIDU0IDI0IDQ4ICAgICAgIAltb3YgICAgMHg0OCglcnNwKSwlcjEwCiAg ICA0ODM5OgllOSA5NyBmYiBmZiBmZiAgICAgICAJam1wcSAgIDQzZDUgPHZ4bGFuX3htaXRfb25l KzB4MWI1PgogICAgNDgzZToJNDEgMGYgYjcgODUgYzAgMDAgMDAgCW1vdnp3bCAweGMwKCVyMTMp LCVlYXgKICAgIDQ4NDU6CTAwIAp7Cgl1MzIgaGFzaDsKCglpZiAobWluID49IG1heCkgewoJCS8q IFVzZSBkZWZhdWx0IHJhbmdlICovCgkJaW5ldF9nZXRfbG9jYWxfcG9ydF9yYW5nZShuZXQsICZt aW4sICZtYXgpOwogICAgNDg0NjoJNjYgODMgZjggMDggICAgICAgICAgCWNtcCAgICAkMHg4LCVh eAogICAgNDg0YToJMGYgODQgNGYgMDMgMDAgMDAgICAgCWplICAgICA0YjlmIDx2eGxhbl94bWl0 X29uZSsweDk3Zj4KICAgIDQ4NTA6CTY2IDNkIDg2IGRkICAgICAgICAgIAljbXAgICAgJDB4ZGQ4 NiwlYXgKICAgIDQ4NTQ6CWM2IDg0IDI0IDg4IDAwIDAwIDAwIAltb3ZiICAgJDB4MCwweDg4KCVy c3ApCiAgICA0ODViOgkwMCAKICAgIDQ4NWM6CTBmIDg1IDNiIGZiIGZmIGZmICAgIAlqbmUgICAg NDM5ZCA8dnhsYW5feG1pdF9vbmUrMHgxN2Q+CiAgICA0ODYyOgk0OCA4YiA0NCAyNCAzOCAgICAg ICAJbW92ICAgIDB4MzgoJXJzcCksJXJheAogICAgNDg2NzoJMGYgYjcgMDAgICAgICAgICAgICAg CW1vdnp3bCAoJXJheCksJWVheAogICAgNDg2YToJNjYgYzEgYzAgMDggICAgICAgICAgCXJvbCAg ICAkMHg4LCVheAogICAgNDg2ZToJNjYgYzEgZTggMDQgICAgICAgICAgCXNociAgICAkMHg0LCVh eAogICAgNDg3MjoJNjYgODkgODQgMjQgODggMDAgMDAgCW1vdiAgICAlYXgsMHg4OCglcnNwKQog ICAgNDg3OToJMDAgCgovKiBFeHRyYWN0IGRzZmllbGQgZnJvbSBpbm5lciBwcm90b2NvbCAqLwpz dGF0aWMgaW5saW5lIHU4IGlwX3R1bm5lbF9nZXRfZHNmaWVsZChjb25zdCBzdHJ1Y3QgaXBoZHIg KmlwaCwKCQkJCSAgICAgICBjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQp7CglpZiAoc2tiLT5w cm90b2NvbCA9PSBodG9ucyhFVEhfUF9JUCkpCiAgICA0ODdhOgllOSAxZSBmYiBmZiBmZiAgICAg ICAJam1wcSAgIDQzOWQgPHZ4bGFuX3htaXRfb25lKzB4MTdkPgogICAgNDg3ZjoJNDggOGIgODMg NjAgMDggMDAgMDAgCW1vdiAgICAweDg2MCglcmJ4KSwlcmF4CgkJcmV0dXJuIGlwaC0+dG9zOwoJ ZWxzZSBpZiAoc2tiLT5wcm90b2NvbCA9PSBodG9ucyhFVEhfUF9JUFY2KSkKCQlyZXR1cm4gaXB2 Nl9nZXRfZHNmaWVsZCgoY29uc3Qgc3RydWN0IGlwdjZoZHIgKilpcGgpOwoJZWxzZQoJCXJldHVy biAwOwogICAgNDg4NjoJNDggODUgYzAgICAgICAgICAgICAgCXRlc3QgICAlcmF4LCVyYXgKICAg IDQ4ODk6CTBmIDg0IDc4IGZhIGZmIGZmICAgIAlqZSAgICAgNDMwNyA8dnhsYW5feG1pdF9vbmUr MHhlNz4Kc3RhdGljIGlubGluZSB1OCBpcF90dW5uZWxfZ2V0X2RzZmllbGQoY29uc3Qgc3RydWN0 IGlwaGRyICppcGgsCgkJCQkgICAgICAgY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYikKewoJaWYg KHNrYi0+cHJvdG9jb2wgPT0gaHRvbnMoRVRIX1BfSVApKQoJCXJldHVybiBpcGgtPnRvczsKCWVs c2UgaWYgKHNrYi0+cHJvdG9jb2wgPT0gaHRvbnMoRVRIX1BfSVBWNikpCiAgICA0ODhmOgk0OCA4 YiA0MCAxMCAgICAgICAgICAJbW92ICAgIDB4MTAoJXJheCksJXJheAp9CgoKc3RhdGljIGlubGlu ZSBfX3U4IGlwdjZfZ2V0X2RzZmllbGQoY29uc3Qgc3RydWN0IGlwdjZoZHIgKmlwdjZoKQp7Cgly ZXR1cm4gbnRvaHMoKihjb25zdCBfX2JlMTYgKilpcHY2aCkgPj4gNDsKICAgIDQ4OTM6CTRkIDg1 IGRiICAgICAgICAgICAgIAl0ZXN0ICAgJXIxMSwlcjExCiAgICA0ODk2Ogk0NSA4YiA0NyAwNCAg ICAgICAgICAJbW92ICAgIDB4NCglcjE1KSwlcjhkCiAgICA0ODlhOgkwZiBiNiA4YyAyNCA4OCAw MCAwMCAJbW92emJsIDB4ODgoJXJzcCksJWVjeAogICAgNDhhMToJMDAgCiAgICA0OGEyOgk0OCA4 YiA0MCAyMCAgICAgICAgICAJbW92ICAgIDB4MjAoJXJheCksJXJheAogICAgNDhhNjoJNDggODkg NDQgMjQgNzggICAgICAgCW1vdiAgICAlcmF4LDB4NzgoJXJzcCkKICAgIDQ4YWI6CTQ4IDhiIDQ0 IDI0IDY4ICAgICAgIAltb3YgICAgMHg2OCglcnNwKSwlcmF4Cgl9IGVsc2UgewoJCW1kLT5nYnAg PSBza2ItPm1hcms7Cgl9CgoJaWYgKGRzdC0+c2Euc2FfZmFtaWx5ID09IEFGX0lORVQpIHsKCQlp ZiAoIXZ4bGFuLT52bjRfc29jaykKICAgIDQ4YjA6CTRjIDhkIDQ4IDA0ICAgICAgICAgIAlsZWEg ICAgMHg0KCVyYXgpLCVyOQogICAgNDhiNDoJMGYgODQgYWIgMDMgMDAgMDAgICAgCWplICAgICA0 YzY1IDx2eGxhbl94bWl0X29uZSsweGE0NT4KICAgIDQ4YmE6CTQxIDhiIDUzIDI0ICAgICAgICAg IAltb3YgICAgMHgyNCglcjExKSwlZWR4CiAgICA0OGJlOgk0YyA4OSBkNyAgICAgICAgICAgICAJ bW92ICAgICVyMTAsJXJkaQoJCQlnb3RvIGRyb3A7CgkJc2sgPSB2eGxhbi0+dm40X3NvY2stPnNv Y2stPnNrOwogICAgNDhjMToJNGMgODkgNjQgMjQgMDggICAgICAgCW1vdiAgICAlcjEyLDB4OCgl cnNwKQoKCQlydCA9IHZ4bGFuX2dldF9yb3V0ZSh2eGxhbiwgc2tiLAogICAgNDhjNjoJNGMgODkg MzQgMjQgICAgICAgICAgCW1vdiAgICAlcjE0LCglcnNwKQogICAgNDhjYToJNGMgODkgZWUgICAg ICAgICAgICAgCW1vdiAgICAlcjEzLCVyc2kKICAgIDQ4Y2Q6CWU4IDJlIGVkIGZmIGZmICAgICAg IAljYWxscSAgMzYwMCA8dnhsYW5fZ2V0X3JvdXRlPgoJfQoKCWlmIChkc3QtPnNhLnNhX2ZhbWls eSA9PSBBRl9JTkVUKSB7CgkJaWYgKCF2eGxhbi0+dm40X3NvY2spCgkJCWdvdG8gZHJvcDsKCQlz ayA9IHZ4bGFuLT52bjRfc29jay0+c29jay0+c2s7CiAgICA0OGQyOgk0OCAzZCAwMCBmMCBmZiBm ZiAgICAJY21wICAgICQweGZmZmZmZmZmZmZmZmYwMDAsJXJheAogICAgNDhkODoJNDkgODkgYzIg ICAgICAgICAgICAgCW1vdiAgICAlcmF4LCVyMTAKCgkJcnQgPSB2eGxhbl9nZXRfcm91dGUodnhs YW4sIHNrYiwKICAgIDQ4ZGI6CTBmIDg3IGMwIDAzIDAwIDAwICAgIAlqYSAgICAgNGNhMSA8dnhs YW5feG1pdF9vbmUrMHhhODE+CiAgICA0OGUxOgk0OCA4YiA1MCAxOCAgICAgICAgICAJbW92ICAg IDB4MTgoJXJheCksJXJkeAogICAgNDhlNToJNDggMzkgZDMgICAgICAgICAgICAgCWNtcCAgICAl cmR4LCVyYngKICAgIDQ4ZTg6CTBmIDg0IDdlIDAzIDAwIDAwICAgIAlqZSAgICAgNGM2YyA8dnhs YW5feG1pdF9vbmUrMHhhNGM+CiAgICA0OGVlOgk0ZCA4NSBlNCAgICAgICAgICAgICAJdGVzdCAg ICVyMTIsJXIxMgogICAgNDhmMToJMGYgODQgODcgMDMgMDAgMDAgICAgCWplICAgICA0YzdlIDx2 eGxhbl94bWl0X29uZSsweGE1ZT4KICAgIDQ4Zjc6CTQ1IDBmIGI3IDc0IDI0IDI4ICAgIAltb3Z6 d2wgMHgyOCglcjEyKSwlcjE0ZAogICAgNDhmZDoJNDEgODMgZTYgMDEgICAgICAgICAgCWFuZCAg ICAkMHgxLCVyMTRkCiAgICA0OTAxOgk0MSBmNyBkZSAgICAgICAgICAgICAJbmVnICAgICVyMTRk CgkJCQkgICAgIHJkc3QgPyByZHN0LT5yZW1vdGVfaWZpbmRleCA6IDAsIHRvcywKCQkJCSAgICAg ZHN0LT5zaW4uc2luX2FkZHIuc19hZGRyLAoJCQkJICAgICAmc3JjLT5zaW4uc2luX2FkZHIuc19h ZGRyLAoJCQkJICAgICBkc3RfY2FjaGUsIGluZm8pOwoJCWlmIChJU19FUlIocnQpKSB7CiAgICA0 OTA0Ogk0MSA4MyBlNiA0MCAgICAgICAgICAJYW5kICAgICQweDQwLCVyMTRkCglpZiAoZHN0LT5z YS5zYV9mYW1pbHkgPT0gQUZfSU5FVCkgewoJCWlmICghdnhsYW4tPnZuNF9zb2NrKQoJCQlnb3Rv IGRyb3A7CgkJc2sgPSB2eGxhbi0+dm40X3NvY2stPnNvY2stPnNrOwoKCQlydCA9IHZ4bGFuX2dl dF9yb3V0ZSh2eGxhbiwgc2tiLAogICAgNDkwODoJNDEgMGYgYjcgODUgYzAgMDAgMDAgCW1vdnp3 bCAweGMwKCVyMTMpLCVlYXgKICAgIDQ5MGY6CTAwIAoJCQkJICAgICByZHN0ID8gcmRzdC0+cmVt b3RlX2lmaW5kZXggOiAwLCB0b3MsCgkJCQkgICAgIGRzdC0+c2luLnNpbl9hZGRyLnNfYWRkciwK CQkJCSAgICAgJnNyYy0+c2luLnNpbl9hZGRyLnNfYWRkciwKCQkJCSAgICAgZHN0X2NhY2hlLCBp bmZvKTsKCQlpZiAoSVNfRVJSKHJ0KSkgewogICAgNDkxMDoJNjYgODMgZjggMDggICAgICAgICAg CWNtcCAgICAkMHg4LCVheAoJCQkJICAgJmRzdC0+c2luLnNpbl9hZGRyLnNfYWRkcik7CgkJCWRl di0+c3RhdHMudHhfY2Fycmllcl9lcnJvcnMrKzsKCQkJZ290byB0eF9lcnJvcjsKCQl9CgoJCWlm IChydC0+ZHN0LmRldiA9PSBkZXYpIHsKICAgIDQ5MTQ6CTBmIDg0IDE0IDAzIDAwIDAwICAgIAlq ZSAgICAgNGMyZSA8dnhsYW5feG1pdF9vbmUrMHhhMGU+CiAgICA0OTFhOgkwZiBiNiBiYyAyNCA4 OCAwMCAwMCAJbW92emJsIDB4ODgoJXJzcCksJWVkaQogICAgNDkyMToJMDAgCgkJCWRldi0+c3Rh dHMuY29sbGlzaW9ucysrOwoJCQlnb3RvIHJ0X3R4X2Vycm9yOwoJCX0KCgkJLyogQnlwYXNzIGVu Y2Fwc3VsYXRpb24gaWYgdGhlIGRlc3RpbmF0aW9uIGlzIGxvY2FsICovCgkJaWYgKCFpbmZvICYm IHJ0LT5ydF9mbGFncyAmIFJUQ0ZfTE9DQUwgJiYKICAgIDQ5MjI6CTQ1IDMxIGU0ICAgICAgICAg ICAgIAl4b3IgICAgJXIxMmQsJXIxMmQKICAgIDQ5MjU6CTgzIGU3IGZjICAgICAgICAgICAgIAlh bmQgICAgJDB4ZmZmZmZmZmMsJWVkaQoJCQlyZXR1cm47CgkJfQoKCQlpZiAoIWluZm8pCgkJCXVk cF9zdW0gPSAhKGZsYWdzICYgVlhMQU5fRl9VRFBfWkVST19DU1VNX1RYKTsKCQllbHNlIGlmIChp bmZvLT5rZXkudHVuX2ZsYWdzICYgVFVOTkVMX0RPTlRfRlJBR01FTlQpCiAgICA0OTI4Ogk2NiAz ZCA4NiBkZCAgICAgICAgICAJY21wICAgICQweGRkODYsJWF4CiAgICA0OTJjOgk0MCA4OCBiYyAy NCA4MCAwMCAwMCAJbW92ICAgICVkaWwsMHg4MCglcnNwKQogICAgNDkzMzoJMDAgCgl1bmlvbiB2 eGxhbl9hZGRyICpzcmM7CglzdHJ1Y3QgdnhsYW5fbWV0YWRhdGEgX21kOwoJc3RydWN0IHZ4bGFu X21ldGFkYXRhICptZCA9ICZfbWQ7CglfX2JlMTYgc3JjX3BvcnQgPSAwLCBkc3RfcG9ydDsKCV9f YmUzMiB2bmksIGxhYmVsOwoJX19iZTE2IGRmID0gMDsKICAgIDQ5MzQ6CTBmIDg0IGIzIDAxIDAw IDAwICAgIAlqZSAgICAgNGFlZCA8dnhsYW5feG1pdF9vbmUrMHg4Y2Q+CiAgICA0OTNhOgk4MCBi YyAyNCA4NyAwMCAwMCAwMCAJY21wYiAgICQweDAsMHg4NyglcnNwKQogICAgNDk0MToJMDAgCgov KiBFeHRyYWN0IGRzZmllbGQgZnJvbSBpbm5lciBwcm90b2NvbCAqLwpzdGF0aWMgaW5saW5lIHU4 IGlwX3R1bm5lbF9nZXRfZHNmaWVsZChjb25zdCBzdHJ1Y3QgaXBoZHIgKmlwaCwKCQkJCSAgICAg ICBjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQp7CglpZiAoc2tiLT5wcm90b2NvbCA9PSBodG9u cyhFVEhfUF9JUCkpCiAgICA0OTQyOgk3NSAyMyAgICAgICAgICAgICAgICAJam5lICAgIDQ5Njcg PHZ4bGFuX3htaXRfb25lKzB4NzQ3PgogICAgNDk0NDoJNDkgOGIgNDIgMjggICAgICAgICAgCW1v diAgICAweDI4KCVyMTApLCVyYXgKICAgIDQ5NDg6CTQ4IDgzIGUwIGZjICAgICAgICAgIAlhbmQg ICAgJDB4ZmZmZmZmZmZmZmZmZmZmYywlcmF4CiAgICA0OTRjOgk4YiA0MCAyNCAgICAgICAgICAg ICAJbW92ICAgIDB4MjQoJXJheCksJWVheAogICAgNDk0ZjoJODUgYzAgICAgICAgICAgICAgICAg CXRlc3QgICAlZWF4LCVlYXgKICAgIDQ5NTE6CTc1IDBkICAgICAgICAgICAgICAgIAlqbmUgICAg NDk2MCA8dnhsYW5feG1pdF9vbmUrMHg3NDA+CiAgICA0OTUzOgk0OCA4YiA4MiA4MCAwNCAwMCAw MCAJbW92ICAgIDB4NDgwKCVyZHgpLCVyYXgKCQlyZXR1cm4gaXBoLT50b3M7CgllbHNlIGlmIChz a2ItPnByb3RvY29sID09IGh0b25zKEVUSF9QX0lQVjYpKQogICAgNDk1YToJOGIgODAgYTQgMDMg MDAgMDAgICAgCW1vdiAgICAweDNhNCglcmF4KSwlZWF4CiAgICA0OTYwOgk4OCA4NCAyNCA4NyAw MCAwMCAwMCAJbW92ICAgICVhbCwweDg3KCVyc3ApCiAgICA0OTY3OgkwZiBiNiA0NCAyNCA0OCAg ICAgICAJbW92emJsIDB4NDgoJXJzcCksJWVheAoJCQl1ZHBfc3VtID0gIShmbGFncyAmIFZYTEFO X0ZfVURQX1pFUk9fQ1NVTV9UWCk7CgkJZWxzZSBpZiAoaW5mby0+a2V5LnR1bl9mbGFncyAmIFRV Tk5FTF9ET05UX0ZSQUdNRU5UKQoJCQlkZiA9IGh0b25zKElQX0RGKTsKCgkJdG9zID0gaXBfdHVu bmVsX2Vjbl9lbmNhcCh0b3MsIG9sZF9pcGgsIHNrYik7CgkJdHRsID0gdHRsID8gOiBpcDRfZHN0 X2hvcGxpbWl0KCZydC0+ZHN0KTsKICAgIDQ5NmM6CTQ0IDhiIDRjIDI0IDY0ICAgICAgIAltb3Yg ICAgMHg2NCglcnNwKSwlcjlkCiAgICA0OTcxOgk0YyA4OSBkNiAgICAgICAgICAgICAJbW92ICAg ICVyMTAsJXJzaQpzdGF0aWMgaW5saW5lIHUzMgpkc3RfbWV0cmljX3Jhdyhjb25zdCBzdHJ1Y3Qg ZHN0X2VudHJ5ICpkc3QsIGNvbnN0IGludCBtZXRyaWMpCnsKCXUzMiAqcCA9IERTVF9NRVRSSUNT X1BUUihkc3QpOwoKCXJldHVybiBwW21ldHJpYy0xXTsKICAgIDQ5NzQ6CTRjIDhiIDQ0IDI0IDQw ICAgICAgIAltb3YgICAgMHg0MCglcnNwKSwlcjgKICAgIDQ5Nzk6CThiIDRjIDI0IDUwICAgICAg ICAgIAltb3YgICAgMHg1MCglcnNwKSwlZWN4CglyZXR1cm4gc2tiLT5za2JfaWlmOwp9CgpzdGF0 aWMgaW5saW5lIGludCBpcDRfZHN0X2hvcGxpbWl0KGNvbnN0IHN0cnVjdCBkc3RfZW50cnkgKmRz dCkKewoJaW50IGhvcGxpbWl0ID0gZHN0X21ldHJpY19yYXcoZHN0LCBSVEFYX0hPUExJTUlUKTsK ICAgIDQ5N2Q6CWJhIDE0IDAwIDAwIDAwICAgICAgIAltb3YgICAgJDB4MTQsJWVkeAoJc3RydWN0 IG5ldCAqbmV0ID0gZGV2X25ldChkc3QtPmRldik7CgoJaWYgKGhvcGxpbWl0ID09IDApCiAgICA0 OTgyOgk0YyA4OSBlZiAgICAgICAgICAgICAJbW92ICAgICVyMTMsJXJkaQoJCWhvcGxpbWl0ID0g bmV0LT5pcHY0LnN5c2N0bF9pcF9kZWZhdWx0X3R0bDsKICAgIDQ5ODU6CTRjIDg5IDk0IDI0IDg4 IDAwIDAwIAltb3YgICAgJXIxMCwweDg4KCVyc3ApCiAgICA0OThjOgkwMCAKICAgIDQ5OGQ6CTg5 IDA0IDI0ICAgICAgICAgICAgIAltb3YgICAgJWVheCwoJXJzcCkKICAgIDQ5OTA6CWU4IGZiIGYz IGZmIGZmICAgICAgIAljYWxscSAgM2Q5MCA8dnhsYW5fYnVpbGRfc2tiPgogICAgNDk5NToJODUg YzAgICAgICAgICAgICAgICAgCXRlc3QgICAlZWF4LCVlYXgKCQllcnIgPSB2eGxhbl9idWlsZF9z a2Ioc2tiLCAmcnQtPmRzdCwgc2l6ZW9mKHN0cnVjdCBpcGhkciksCiAgICA0OTk3Ogk0YyA4YiA5 NCAyNCA4OCAwMCAwMCAJbW92ICAgIDB4ODgoJXJzcCksJXIxMAogICAgNDk5ZToJMDAgCiAgICA0 OTlmOgkwZiA4OCAzMCAwMSAwMCAwMCAgICAJanMgICAgIDRhZDUgPHZ4bGFuX3htaXRfb25lKzB4 OGI1PgogICAgNDlhNToJMGYgYjYgNDQgMjQgNDggICAgICAgCW1vdnpibCAweDQ4KCVyc3ApLCVl YXgKICAgIDQ5YWE6CTQ4IDhiIDVjIDI0IDY4ICAgICAgIAltb3YgICAgMHg2OCglcnNwKSwlcmJ4 CiAgICA0OWFmOgk0NSAwZiBiNyBmNiAgICAgICAgICAJbW92endsICVyMTR3LCVyMTRkCiAgICA0 OWIzOgkwZiBiNiA3NCAyNCA3MCAgICAgICAJbW92emJsIDB4NzAoJXJzcCksJWVzaQogICAgNDli ODoJNDUgOGIgNDcgMDQgICAgICAgICAgCW1vdiAgICAweDQoJXIxNSksJXI4ZAogICAgNDliYzoJ NGMgODkgZWEgICAgICAgICAgICAgCW1vdiAgICAlcjEzLCVyZHgKICAgIDQ5YmY6CTQ0IDBmIGI2 IDhjIDI0IDgwIDAwIAltb3Z6YmwgMHg4MCglcnNwKSwlcjlkCiAgICA0OWM2OgkwMCAwMCAKCQkJ CSAgICAgIHZuaSwgbWQsIGZsYWdzLCB1ZHBfc3VtKTsKCQlpZiAoZXJyIDwgMCkKICAgIDQ5Yzg6 CTRjIDg5IGQ3ICAgICAgICAgICAgIAltb3YgICAgJXIxMCwlcmRpCiAgICA0OWNiOgk4YiA0YiAw NCAgICAgICAgICAgICAJbW92ICAgIDB4NCglcmJ4KSwlZWN4CiAgICA0OWNlOgk0NCA4OSA3NCAy NCAwOCAgICAgICAJbW92ICAgICVyMTRkLDB4OCglcnNwKQogICAgNDlkMzoJODMgZjAgMDEgICAg ICAgICAgICAgCXhvciAgICAkMHgxLCVlYXgKCQkJZ290byB4bWl0X3R4X2Vycm9yOwoKCQl1ZHBf dHVubmVsX3htaXRfc2tiKHJ0LCBzaywgc2tiLCBzcmMtPnNpbi5zaW5fYWRkci5zX2FkZHIsCiAg ICA0OWQ2OgkwZiBiNiBjMCAgICAgICAgICAgICAJbW92emJsICVhbCwlZWF4CiAgICA0OWQ5Ogk4 OSA3NCAyNCAyMCAgICAgICAgICAJbW92ICAgICVlc2ksMHgyMCglcnNwKQogICAgNDlkZDoJMGYg YjcgNzQgMjQgNjIgICAgICAgCW1vdnp3bCAweDYyKCVyc3ApLCVlc2kKICAgIDQ5ZTI6CTg5IDQ0 IDI0IDI4ICAgICAgICAgIAltb3YgICAgJWVheCwweDI4KCVyc3ApCiAgICA0OWU2OgkwZiBiNyA4 NCAyNCA4NCAwMCAwMCAJbW92endsIDB4ODQoJXJzcCksJWVheAogICAgNDllZDoJMDAgCiAgICA0 OWVlOgk0NSAwOSBlMSAgICAgICAgICAgICAJb3IgICAgICVyMTJkLCVyOWQKICAgIDQ5ZjE6CTQ1 IDBmIGI2IGM5ICAgICAgICAgIAltb3Z6YmwgJXI5YiwlcjlkCiAgICA0OWY1Ogk4OSA3NCAyNCAx MCAgICAgICAgICAJbW92ICAgICVlc2ksMHgxMCglcnNwKQogICAgNDlmOToJNDggOGIgNzQgMjQg NzggICAgICAgCW1vdiAgICAweDc4KCVyc3ApLCVyc2kKICAgIDQ5ZmU6CTg5IDQ0IDI0IDE4ICAg ICAgICAgIAltb3YgICAgJWVheCwweDE4KCVyc3ApCiAgICA0YTAyOgkwZiBiNiA4NCAyNCA4NyAw MCAwMCAJbW92emJsIDB4ODcoJXJzcCksJWVheAogICAgNGEwOToJMDAgCiAgICA0YTBhOgk4OSAw NCAyNCAgICAgICAgICAgICAJbW92ICAgICVlYXgsKCVyc3ApCiAgICA0YTBkOgllOCAwMCAwMCAw MCAwMCAgICAgICAJY2FsbHEgIDRhMTIgPHZ4bGFuX3htaXRfb25lKzB4N2YyPgogICAgNGExMjoJ ZTkgMDAgZjkgZmYgZmYgICAgICAgCWptcHEgICA0MzE3IDx2eGxhbl94bWl0X29uZSsweGY3Pgog ICAgNGExNzoJYjggMGEgMDAgMDAgMDAgICAgICAgCW1vdiAgICAkMHhhLCVlYXgKICAgIDRhMWM6 CTQ5IDhiIDU0IDI0IDIwICAgICAgIAltb3YgICAgMHgyMCglcjEyKSwlcmR4CiAgICA0YTIxOgk2 NiA4OSA4NCAyNCBhMCAwMCAwMCAJbW92ICAgICVheCwweGEwKCVyc3ApCiAgICA0YTI4OgkwMCAK ICAgIDRhMjk6CTQ5IDhiIDQ0IDI0IDE4ICAgICAgIAltb3YgICAgMHgxOCglcjEyKSwlcmF4CiAg ICA0YTJlOgk0OCA4OSA5NCAyNCBiMCAwMCAwMCAJbW92ICAgICVyZHgsMHhiMCglcnNwKQogICAg NGEzNToJMDAgCiAgICA0YTM2Ogk0OCA4OSA4NCAyNCBhOCAwMCAwMCAJbW92ICAgICVyYXgsMHhh OCglcnNwKQogICAgNGEzZDoJMDAgCiAgICA0YTNlOgk0OSA4YiA0NCAyNCAwOCAgICAgICAJbW92 ICAgIDB4OCglcjEyKSwlcmF4CiAgICA0YTQzOgk0OSA4YiA1NCAyNCAxMCAgICAgICAJbW92ICAg IDB4MTAoJXIxMiksJXJkeAoJCQkJICBkZXYtPm5hbWUpOwoJCQlnb3RvIGRyb3A7CgkJfQoJCWRz dF9wb3J0ID0gaW5mby0+a2V5LnRwX2RzdCA/IDogdnhsYW4tPmNmZy5kc3RfcG9ydDsKCQl2bmkg PSB2eGxhbl90dW5faWRfdG9fdm5pKGluZm8tPmtleS50dW5faWQpOwoJCXJlbW90ZV9pcC5zYS5z YV9mYW1pbHkgPSBpcF90dW5uZWxfaW5mb19hZihpbmZvKTsKICAgIDRhNDg6CTQ4IDg5IDg0IDI0 IGM4IDAwIDAwIAltb3YgICAgJXJheCwweGM4KCVyc3ApCiAgICA0YTRmOgkwMCAKCQlpZiAocmVt b3RlX2lwLnNhLnNhX2ZhbWlseSA9PSBBRl9JTkVUKSB7CgkJCXJlbW90ZV9pcC5zaW4uc2luX2Fk ZHIuc19hZGRyID0gaW5mby0+a2V5LnUuaXB2NC5kc3Q7CgkJCWxvY2FsX2lwLnNpbi5zaW5fYWRk ci5zX2FkZHIgPSBpbmZvLT5rZXkudS5pcHY0LnNyYzsKCQl9IGVsc2UgewoJCQlyZW1vdGVfaXAu c2luNi5zaW42X2FkZHIgPSBpbmZvLT5rZXkudS5pcHY2LmRzdDsKICAgIDRhNTA6CWI4IDBhIDAw IDAwIDAwICAgICAgIAltb3YgICAgJDB4YSwlZWF4CgkJCQkgIGRldi0+bmFtZSk7CgkJCWdvdG8g ZHJvcDsKCQl9CgkJZHN0X3BvcnQgPSBpbmZvLT5rZXkudHBfZHN0ID8gOiB2eGxhbi0+Y2ZnLmRz dF9wb3J0OwoJCXZuaSA9IHZ4bGFuX3R1bl9pZF90b192bmkoaW5mby0+a2V5LnR1bl9pZCk7CgkJ cmVtb3RlX2lwLnNhLnNhX2ZhbWlseSA9IGlwX3R1bm5lbF9pbmZvX2FmKGluZm8pOwogICAgNGE1 NToJNDggODkgOTQgMjQgZDAgMDAgMDAgCW1vdiAgICAlcmR4LDB4ZDAoJXJzcCkKICAgIDRhNWM6 CTAwIAoJCWlmIChyZW1vdGVfaXAuc2Euc2FfZmFtaWx5ID09IEFGX0lORVQpIHsKCQkJcmVtb3Rl X2lwLnNpbi5zaW5fYWRkci5zX2FkZHIgPSBpbmZvLT5rZXkudS5pcHY0LmRzdDsKCQkJbG9jYWxf aXAuc2luLnNpbl9hZGRyLnNfYWRkciA9IGluZm8tPmtleS51LmlwdjQuc3JjOwoJCX0gZWxzZSB7 CgkJCXJlbW90ZV9pcC5zaW42LnNpbjZfYWRkciA9IGluZm8tPmtleS51LmlwdjYuZHN0OwogICAg NGE1ZDoJZTkgNWYgZmMgZmYgZmYgICAgICAgCWptcHEgICA0NmMxIDx2eGxhbl94bWl0X29uZSsw eDRhMT4KICAgIDRhNjI6CTQxIDhiIDg1IGI0IDAwIDAwIDAwIAltb3YgICAgMHhiNCglcjEzKSwl ZWF4CiAgICA0YTY5OgljNiA0NCAyNCA0OCAwMCAgICAgICAJbW92YiAgICQweDAsMHg0OCglcnNw KQoJCQlsb2NhbF9pcC5zaW42LnNpbjZfYWRkciA9IGluZm8tPmtleS51LmlwdjYuc3JjOwogICAg NGE2ZToJODkgODQgMjQgOTQgMDAgMDAgMDAgCW1vdiAgICAlZWF4LDB4OTQoJXJzcCkKICAgIDRh NzU6CTQ4IDhkIDg0IDI0IDk0IDAwIDAwIAlsZWEgICAgMHg5NCglcnNwKSwlcmF4CiAgICA0YTdj OgkwMCAKICAgIDRhN2Q6CTQ4IDg5IDQ0IDI0IDQwICAgICAgIAltb3YgICAgJXJheCwweDQwKCVy c3ApCiAgICA0YTgyOgllOSBiMCBmYSBmZiBmZiAgICAgICAJam1wcSAgIDQ1MzcgPHZ4bGFuX3ht aXRfb25lKzB4MzE3PgogICAgNGE4NzoJNGMgODkgZjcgICAgICAgICAgICAgCW1vdiAgICAlcjE0 LCVyZGkKICAgIDRhOGE6CWU4IDAwIDAwIDAwIDAwICAgICAgIAljYWxscSAgNGE4ZiA8dnhsYW5f eG1pdF9vbmUrMHg4NmY+CiAgICA0YThmOgk4OCA4NCAyNCA4NyAwMCAwMCAwMCAJbW92ICAgICVh bCwweDg3KCVyc3ApCgkJdWRwX3N1bSA9ICEhKGluZm8tPmtleS50dW5fZmxhZ3MgJiBUVU5ORUxf Q1NVTSk7CgoJCWlmIChpbmZvLT5vcHRpb25zX2xlbikKCQkJbWQgPSBpcF90dW5uZWxfaW5mb19v cHRzKGluZm8pOwoJfSBlbHNlIHsKCQltZC0+Z2JwID0gc2tiLT5tYXJrOwogICAgNGE5NjoJZTkg OWEgZmMgZmYgZmYgICAgICAgCWptcHEgICA0NzM1IDx2eGxhbl94bWl0X29uZSsweDUxNT4KCV9f YmUzMiB2bmksIGxhYmVsOwoJX19iZTE2IGRmID0gMDsKCV9fdTggdG9zLCB0dGw7CglpbnQgZXJy OwoJdTMyIGZsYWdzID0gdnhsYW4tPmZsYWdzOwoJYm9vbCB1ZHBfc3VtID0gZmFsc2U7CiAgICA0 YTliOgk0OCA4YiA0NCAyNCAzOCAgICAgICAJbW92ICAgIDB4MzgoJXJzcCksJXJheAoJCXVkcF9z dW0gPSAhIShpbmZvLT5rZXkudHVuX2ZsYWdzICYgVFVOTkVMX0NTVU0pOwoKCQlpZiAoaW5mby0+ b3B0aW9uc19sZW4pCgkJCW1kID0gaXBfdHVubmVsX2luZm9fb3B0cyhpbmZvKTsKCX0gZWxzZSB7 CgkJbWQtPmdicCA9IHNrYi0+bWFyazsKICAgIDRhYTA6CTQ0IDBmIGI2IDYwIDAxICAgICAgIAlt b3Z6YmwgMHgxKCVyYXgpLCVyMTJkCgljb25zdCBzdHJ1Y3QgaXBoZHIgKm9sZF9pcGg7Cgl1bmlv biB2eGxhbl9hZGRyICpkc3Q7Cgl1bmlvbiB2eGxhbl9hZGRyIHJlbW90ZV9pcCwgbG9jYWxfaXA7 Cgl1bmlvbiB2eGxhbl9hZGRyICpzcmM7CglzdHJ1Y3QgdnhsYW5fbWV0YWRhdGEgX21kOwoJc3Ry dWN0IHZ4bGFuX21ldGFkYXRhICptZCA9ICZfbWQ7CiAgICA0YWE1Ogk0NCAwZiBiNiBiYyAyNCA4 OCAwMCAJbW92emJsIDB4ODgoJXJzcCksJXIxNWQKICAgIDRhYWM6CTAwIDAwIAogICAgNGFhZToJ NDEgODMgZTQgMDMgICAgICAgICAgCWFuZCAgICAkMHgzLCVyMTJkCiAgICA0YWIyOgliOCAwMiAw MCAwMCAwMCAgICAgICAJbW92ICAgICQweDIsJWVheAoKCQlpZiAoIWluZm8pCgkJCXVkcF9zdW0g PSAhKGZsYWdzICYgVlhMQU5fRl9VRFBfWkVST19DU1VNNl9UWCk7CgoJCXRvcyA9IGlwX3R1bm5l bF9lY25fZW5jYXAodG9zLCBvbGRfaXBoLCBza2IpOwoJCXR0bCA9IHR0bCA/IDogaXA2X2RzdF9o b3BsaW1pdChuZHN0KTsKICAgIDRhYjc6CTQxIDgzIGU3IGZjICAgICAgICAgIAlhbmQgICAgJDB4 ZmZmZmZmZmMsJXIxNWQKICAgIDRhYmI6CTQxIDgwIGZjIDAzICAgICAgICAgIAljbXAgICAgJDB4 MywlcjEyYgogICAgNGFiZjoJNDQgMGYgNDQgZTAgICAgICAgICAgCWNtb3ZlICAlZWF4LCVyMTJk CiAgICA0YWMzOgllOSA1ZiBmYyBmZiBmZiAgICAgICAJam1wcSAgIDQ3MjcgPHZ4bGFuX3htaXRf b25lKzB4NTA3PgogICAgNGFjODoJNGMgODkgZjcgICAgICAgICAgICAgCW1vdiAgICAlcjE0LCVy ZGkKLyogRXh0cmFjdCBkc2ZpZWxkIGZyb20gaW5uZXIgcHJvdG9jb2wgKi8Kc3RhdGljIGlubGlu ZSB1OCBpcF90dW5uZWxfZ2V0X2RzZmllbGQoY29uc3Qgc3RydWN0IGlwaGRyICppcGgsCgkJCQkg ICAgICAgY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYikKewoJaWYgKHNrYi0+cHJvdG9jb2wgPT0g aHRvbnMoRVRIX1BfSVApKQoJCXJldHVybiBpcGgtPnRvczsKICAgIDRhY2I6CWU4IDAwIDAwIDAw IDAwICAgICAgIAljYWxscSAgNGFkMCA8dnhsYW5feG1pdF9vbmUrMHg4YjA+CiAgICA0YWQwOgll OSA0MiBmOCBmZiBmZiAgICAgICAJam1wcSAgIDQzMTcgPHZ4bGFuX3htaXRfb25lKzB4Zjc+CiAg ICA0YWQ1Ogk0NSAzMSBlZCAgICAgICAgICAgICAJeG9yICAgICVyMTNkLCVyMTNkCiAgICA0YWQ4 Ogk0YyA4OSBkNyAgICAgICAgICAgICAJbW92ICAgICVyMTAsJXJkaQogICAgNGFkYjoJZTggMDAg MDAgMDAgMDAgICAgICAgCWNhbGxxICA0YWUwIDx2eGxhbl94bWl0X29uZSsweDhjMD4KICAgIDRh ZTA6CTQ4IDgzIDgzIDU4IDAxIDAwIDAwIAlhZGRxICAgJDB4MSwweDE1OCglcmJ4KQogICAgNGFl NzoJMDEgCiAgICA0YWU4OgllOSAyMiBmOCBmZiBmZiAgICAgICAJam1wcSAgIDQzMGYgPHZ4bGFu X3htaXRfb25lKzB4ZWY+CiAgICA0YWVkOgk0OCA4YiA0NCAyNCAzOCAgICAgICAJbW92ICAgIDB4 MzgoJXJzcCksJXJheAogICAgNGFmMjoJNDQgMGYgYjcgMjAgICAgICAgICAgCW1vdnp3bCAoJXJh eCksJXIxMmQKICAgIDRhZjY6CTY2IDQxIGMxIGM0IDA4ICAgICAgIAlyb2wgICAgJDB4OCwlcjEy dwoJCXNrYl9zY3J1Yl9wYWNrZXQoc2tiLCB4bmV0KTsKCQllcnIgPSB2eGxhbl9idWlsZF9za2Io c2tiLCBuZHN0LCBzaXplb2Yoc3RydWN0IGlwdjZoZHIpLAoJCQkJICAgICAgdm5pLCBtZCwgZmxh Z3MsIHVkcF9zdW0pOwoJCWlmIChlcnIgPCAwKSB7CgkJCWRzdF9yZWxlYXNlKG5kc3QpOwogICAg NGFmYjoJNjYgNDEgYzEgZWMgMDQgICAgICAgCXNociAgICAkMHg0LCVyMTJ3CgkJCXJldHVybjsK ICAgIDRiMDA6CTBmIGI2IDg0IDI0IDg4IDAwIDAwIAltb3Z6YmwgMHg4OCglcnNwKSwlZWF4CiAg ICA0YjA3OgkwMCAKewoJLyogZHN0X3JlbGVhc2UoKSBhY2NlcHRzIGEgTlVMTCBwYXJhbWV0ZXIu CgkgKiBXZSByZWx5IG9uIGRzdCBiZWluZyBmaXJzdCBzdHJ1Y3R1cmUgaW4gc3RydWN0IHJ0YWJs ZQoJICovCglCVUlMRF9CVUdfT04ob2Zmc2V0b2Yoc3RydWN0IHJ0YWJsZSwgZHN0KSAhPSAwKTsK CWRzdF9yZWxlYXNlKCZydC0+ZHN0KTsKICAgIDRiMDg6CTQxIDgzIGU0IDAzICAgICAgICAgIAlh bmQgICAgJDB4MywlcjEyZAogICAgNGIwYzoJNDEgYjkgMDIgMDAgMDAgMDAgICAgCW1vdiAgICAk MHgyLCVyOWQKCS8qIHNrYiBpcyBhbHJlYWR5IGZyZWVkLiAqLwoJc2tiID0gTlVMTDsKcnRfdHhf ZXJyb3I6CglpcF9ydF9wdXQocnQpOwp0eF9lcnJvcjoKCWRldi0+c3RhdHMudHhfZXJyb3JzKys7 CiAgICA0YjEyOgk4MyBlMCBmYyAgICAgICAgICAgICAJYW5kICAgICQweGZmZmZmZmZjLCVlYXgK ICAgIDRiMTU6CTQxIDgwIGZjIDAzICAgICAgICAgIAljbXAgICAgJDB4MywlcjEyYgogICAgNGIx OToJODggODQgMjQgODAgMDAgMDAgMDAgCW1vdiAgICAlYWwsMHg4MCglcnNwKQogICAgNGIyMDoJ NDUgMGYgNDQgZTEgICAgICAgICAgCWNtb3ZlICAlcjlkLCVyMTJkCiAgICA0YjI0OgllOSAxMSBm ZSBmZiBmZiAgICAgICAJam1wcSAgIDQ5M2EgPHZ4bGFuX3htaXRfb25lKzB4NzFhPgogICAgNGIy OToJMzEgZDIgICAgICAgICAgICAgICAgCXhvciAgICAlZWR4LCVlZHgKICAgIDRiMmI6CWU5IDZh IGZhIGZmIGZmICAgICAgIAlqbXBxICAgNDU5YSA8dnhsYW5feG1pdF9vbmUrMHgzN2E+CiAgICA0 YjMwOgk0ZCA4NSBkYiAgICAgICAgICAgICAJdGVzdCAgICVyMTEsJXIxMQogICAgNGIzMzoJMGYg ODUgMjQgMDEgMDAgMDAgICAgCWpuZSAgICA0YzVkIDx2eGxhbl94bWl0X29uZSsweGEzZD4KICAg IDRiMzk6CTgwIDNkIDAwIDAwIDAwIDAwIDAwIAljbXBiICAgJDB4MCwweDAoJXJpcCkgICAgICAg ICMgNGI0MCA8dnhsYW5feG1pdF9vbmUrMHg5MjA+CiAgICA0YjQwOgkwZiA4NSBjMSBmNyBmZiBm ZiAgICAJam5lICAgIDQzMDcgPHZ4bGFuX3htaXRfb25lKzB4ZTc+CiAgICA0YjQ2Ogk0OCA4OSBk OSAgICAgICAgICAgICAJbW92ICAgICVyYngsJXJjeAogICAgNGI0OToJNDggYzcgYzIgMDAgMDAg MDAgMDAgCW1vdiAgICAkMHgwLCVyZHgKICAgIDRiNTA6CWJlIDliIDA3IDAwIDAwICAgICAgIAlt b3YgICAgJDB4NzliLCVlc2kKICAgIDRiNTU6CTQ4IGM3IGM3IDAwIDAwIDAwIDAwIAltb3YgICAg JDB4MCwlcmRpCgoJCWlmICghdnhsYW4tPnZuNl9zb2NrKQoJCQlnb3RvIGRyb3A7CgkJc2sgPSB2 eGxhbi0+dm42X3NvY2stPnNvY2stPnNrOwoKCQluZHN0ID0gdnhsYW42X2dldF9yb3V0ZSh2eGxh biwgc2tiLAogICAgNGI1YzoJYzYgMDUgMDAgMDAgMDAgMDAgMDEgCW1vdmIgICAkMHgxLDB4MCgl cmlwKSAgICAgICAgIyA0YjYzIDx2eGxhbl94bWl0X29uZSsweDk0Mz4KCWJvb2wgdWRwX3N1bSA9 IGZhbHNlOwoJYm9vbCB4bmV0ID0gIW5ldF9lcSh2eGxhbi0+bmV0LCBkZXZfbmV0KHZ4bGFuLT5k ZXYpKTsKCglpbmZvID0gc2tiX3R1bm5lbF9pbmZvKHNrYik7CgoJaWYgKHJkc3QpIHsKICAgIDRi NjM6CWU4IDAwIDAwIDAwIDAwICAgICAgIAljYWxscSAgNGI2OCA8dnhsYW5feG1pdF9vbmUrMHg5 NDg+CiAgICA0YjY4OgllOSA5YSBmNyBmZiBmZiAgICAgICAJam1wcSAgIDQzMDcgPHZ4bGFuX3ht aXRfb25lKzB4ZTc+CgkJZHN0ID0gJnJkc3QtPnJlbW90ZV9pcDsKCQlzcmMgPSAmdnhsYW4tPmNm Zy5zYWRkcjsKCQlkc3RfY2FjaGUgPSAmcmRzdC0+ZHN0X2NhY2hlOwoJfSBlbHNlIHsKCQlpZiAo IWluZm8pIHsKCQkJV0FSTl9PTkNFKDEsICIlczogTWlzc2luZyBlbmNhcHN1bGF0aW9uIGluc3Ry dWN0aW9uc1xuIiwKICAgIDRiNmQ6CTBmIDFmIDQ0IDAwIDAwICAgICAgIAlub3BsICAgMHgwKCVy YXgsJXJheCwxKQogICAgNGI3MjoJNGMgODkgZjcgICAgICAgICAgICAgCW1vdiAgICAlcjE0LCVy ZGkKICAgIDRiNzU6CWU4IDAwIDAwIDAwIDAwICAgICAgIAljYWxscSAgNGI3YSA8dnhsYW5feG1p dF9vbmUrMHg5NWE+CiAgICA0YjdhOgk0OCA4MyA4MyA3OCAwMSAwMCAwMCAJYWRkcSAgICQweDEs MHgxNzgoJXJieCkKICAgIDRiODE6CTAxIAogICAgNGI4MjoJZTkgNTkgZmYgZmYgZmYgICAgICAg CWptcHEgICA0YWUwIDx2eGxhbl94bWl0X29uZSsweDhjMD4KICAgIDRiODc6CTQ4IDhiIDQ0IDI0 IDM4ICAgICAgIAltb3YgICAgMHgzOCglcnNwKSwlcmF4CiAgICA0YjhjOgk0NCAwZiBiNyAyMCAg ICAgICAgICAJbW92endsICglcmF4KSwlcjEyZAogICAgNGI5MDoJNjYgNDEgYzEgYzQgMDggICAg ICAgCXJvbCAgICAkMHg4LCVyMTJ3CiAgICA0Yjk1Ogk2NiA0MSBjMSBlYyAwNCAgICAgICAJc2hy ICAgICQweDQsJXIxMncKICAgIDRiOWE6CWU5IDA2IGZmIGZmIGZmICAgICAgIAlqbXBxICAgNGFh NSA8dnhsYW5feG1pdF9vbmUrMHg4ODU+CiAgICA0YjlmOgk0OCA4YiA0NCAyNCAzOCAgICAgICAJ bW92ICAgIDB4MzgoJXJzcCksJXJheAoJCX0KCgkJaWYgKG5kc3QtPmRldiA9PSBkZXYpIHsKCQkJ bmV0ZGV2X2RiZyhkZXYsICJjaXJjdWxhciByb3V0ZSB0byAlcEk2XG4iLAoJCQkJICAgJmRzdC0+ c2luNi5zaW42X2FkZHIpOwoJCQlkc3RfcmVsZWFzZShuZHN0KTsKICAgIDRiYTQ6CTBmIGI2IDQw IDAxICAgICAgICAgIAltb3Z6YmwgMHgxKCVyYXgpLCVlYXgKICAgIDRiYTg6CTg4IDg0IDI0IDg4 IDAwIDAwIDAwIAltb3YgICAgJWFsLDB4ODgoJXJzcCkKCQkJZGV2LT5zdGF0cy5jb2xsaXNpb25z Kys7CiAgICA0YmFmOgllOSBlOSBmNyBmZiBmZiAgICAgICAJam1wcSAgIDQzOWQgPHZ4bGFuX3ht aXRfb25lKzB4MTdkPgoJCQlnb3RvIHR4X2Vycm9yOwogICAgNGJiNDoJNGMgODkgZjcgICAgICAg ICAgICAgCW1vdiAgICAlcjE0LCVyZGkKICAgIDRiYjc6CWU4IDAwIDAwIDAwIDAwICAgICAgIAlj YWxscSAgNGJiYyA8dnhsYW5feG1pdF9vbmUrMHg5OWM+CiAgICA0YmJjOgkwZiBiNyA4YyAyNCA4 NCAwMCAwMCAJbW92endsIDB4ODQoJXJzcCksJWVjeAogICAgNGJjMzoJMDAgCiAgICA0YmM0Ogk0 MSAwZiBiNyAxNyAgICAgICAgICAJbW92endsICglcjE1KSwlZWR4CiAgICA0YmM4Ogk0OCA4YiBi YiA3OCAwOCAwMCAwMCAJbW92ICAgIDB4ODc4KCVyYngpLCVyZGkKICAgIDRiY2Y6CTQ0IDhiIDgz IGQ4IDA4IDAwIDAwIAltb3YgICAgMHg4ZDgoJXJieCksJXI4ZAogICAgNGJkNjoJOGIgNzQgMjQg NTAgICAgICAgICAgCW1vdiAgICAweDUwKCVyc3ApLCVlc2kKICAgIDRiZGE6CWU4IDkxIGI1IGZm IGZmICAgICAgIAljYWxscSAgMTcwIDx2eGxhbl9maW5kX3ZuaT4KICAgIDRiZGY6CTQ4IDg1IGMw ICAgICAgICAgICAgIAl0ZXN0ICAgJXJheCwlcmF4CiAgICA0YmUyOgkwZiA4NCBmOCBmZSBmZiBm ZiAgICAJamUgICAgIDRhZTAgPHZ4bGFuX3htaXRfb25lKzB4OGMwPgoJCXJ0NmlfZmxhZ3MgPSAo KHN0cnVjdCBydDZfaW5mbyAqKW5kc3QpLT5ydDZpX2ZsYWdzOwoJCWlmICghaW5mbyAmJiBydDZp X2ZsYWdzICYgUlRGX0xPQ0FMICYmCgkJICAgICEocnQ2aV9mbGFncyAmIChSVENGX0JST0FEQ0FT VCB8IFJUQ0ZfTVVMVElDQVNUKSkpIHsKCQkJc3RydWN0IHZ4bGFuX2RldiAqZHN0X3Z4bGFuOwoK CQkJZHN0X3JlbGVhc2UobmRzdCk7CiAgICA0YmU4Ogk0OCA4YiBiMyA3MCAwOCAwMCAwMCAJbW92 ICAgIDB4ODcwKCVyYngpLCVyc2kKCQkJZHN0X3Z4bGFuID0gdnhsYW5fZmluZF92bmkodnhsYW4t Pm5ldCwgdm5pLAogICAgNGJlZjoJNDggODkgYzIgICAgICAgICAgICAgCW1vdiAgICAlcmF4LCVy ZHgKICAgIDRiZjI6CTRjIDg5IGVmICAgICAgICAgICAgIAltb3YgICAgJXIxMywlcmRpCiAgICA0 YmY1OgllOCA0NiBlZSBmZiBmZiAgICAgICAJY2FsbHEgIDNhNDAgPHZ4bGFuX2VuY2FwX2J5cGFz cy5pc3JhLjQ3PgogICAgNGJmYToJZTkgMTggZjcgZmYgZmYgICAgICAgCWptcHEgICA0MzE3IDx2 eGxhbl94bWl0X29uZSsweGY3PgogICAgNGJmZjoJMGYgMWYgNDQgMDAgMDAgICAgICAgCW5vcGwg ICAweDAoJXJheCwlcmF4LDEpCiAgICA0YzA0Ogk0OCA4MyA4MyBiOCAwMSAwMCAwMCAJYWRkcSAg ICQweDEsMHgxYjgoJXJieCkKICAgIDRjMGI6CTAxIAogICAgNGMwYzoJZTkgY2YgZmUgZmYgZmYg ICAgICAgCWptcHEgICA0YWUwIDx2eGxhbl94bWl0X29uZSsweDhjMD4KCQkJCQkJICAgZHN0LT5z YS5zYV9mYW1pbHksIGRzdF9wb3J0LAoJCQkJCQkgICB2eGxhbi0+ZmxhZ3MpOwoJCQlpZiAoIWRz dF92eGxhbikKICAgIDRjMTE6CTQ4IDhiIDRjIDI0IDY4ICAgICAgIAltb3YgICAgMHg2OCglcnNw KSwlcmN4CiAgICA0YzE2Ogk0OCBjNyBjMiAwMCAwMCAwMCAwMCAJbW92ICAgICQweDAsJXJkeAoJ CQkJZ290byB0eF9lcnJvcjsKCQkJdnhsYW5fZW5jYXBfYnlwYXNzKHNrYiwgdnhsYW4sIGRzdF92 eGxhbik7CiAgICA0YzFkOgk0OCA4OSBkZSAgICAgICAgICAgICAJbW92ICAgICVyYngsJXJzaQog ICAgNGMyMDoJNDggYzcgYzcgMDAgMDAgMDAgMDAgCW1vdiAgICAkMHgwLCVyZGkKICAgIDRjMjc6 CWU4IDAwIDAwIDAwIDAwICAgICAgIAljYWxscSAgNGMyYyA8dnhsYW5feG1pdF9vbmUrMHhhMGM+ CgkJCXJldHVybjsKICAgIDRjMmM6CWViIGQ2ICAgICAgICAgICAgICAgIAlqbXAgICAgNGMwNCA8 dnhsYW5feG1pdF9vbmUrMHg5ZTQ+CiAgICA0YzJlOgk0OCA4YiA0NCAyNCAzOCAgICAgICAJbW92 ICAgIDB4MzgoJXJzcCksJXJheAogICAgNGMzMzoJNDQgMGYgYjYgNjAgMDEgICAgICAgCW1vdnpi bCAweDEoJXJheCksJXIxMmQKCQkJCQkmc3JjLT5zaW42LnNpbjZfYWRkciwKCQkJCQlkc3RfY2Fj aGUsIGluZm8pOwoJCWlmIChJU19FUlIobmRzdCkpIHsKCQkJbmV0ZGV2X2RiZyhkZXYsICJubyBy b3V0ZSB0byAlcEk2XG4iLAoJCQkJICAgJmRzdC0+c2luNi5zaW42X2FkZHIpOwoJCQlkZXYtPnN0 YXRzLnR4X2NhcnJpZXJfZXJyb3JzKys7CiAgICA0YzM4OgllOSBjMyBmZSBmZiBmZiAgICAgICAJ am1wcSAgIDRiMDAgPHZ4bGFuX3htaXRfb25lKzB4OGUwPgoJCQlnb3RvIHR4X2Vycm9yOwogICAg NGMzZDoJNDggOGIgNGMgMjQgNjggICAgICAgCW1vdiAgICAweDY4KCVyc3ApLCVyY3gKCQkJCQly ZHN0ID8gcmRzdC0+cmVtb3RlX2lmaW5kZXggOiAwLCB0b3MsCgkJCQkJbGFiZWwsICZkc3QtPnNp bjYuc2luNl9hZGRyLAoJCQkJCSZzcmMtPnNpbjYuc2luNl9hZGRyLAoJCQkJCWRzdF9jYWNoZSwg aW5mbyk7CgkJaWYgKElTX0VSUihuZHN0KSkgewoJCQluZXRkZXZfZGJnKGRldiwgIm5vIHJvdXRl IHRvICVwSTZcbiIsCiAgICA0YzQyOgk0OCBjNyBjMiAwMCAwMCAwMCAwMCAJbW92ICAgICQweDAs JXJkeAogICAgNGM0OToJNDggODkgZGUgICAgICAgICAgICAgCW1vdiAgICAlcmJ4LCVyc2kKICAg IDRjNGM6CTQ4IGM3IGM3IDAwIDAwIDAwIDAwIAltb3YgICAgJDB4MCwlcmRpCiAgICA0YzUzOgll OCAwMCAwMCAwMCAwMCAgICAgICAJY2FsbHEgIDRjNTggPHZ4bGFuX3htaXRfb25lKzB4YTM4Pgog ICAgNGM1ODoJZTkgMTUgZmYgZmYgZmYgICAgICAgCWptcHEgICA0YjcyIDx2eGxhbl94bWl0X29u ZSsweDk1Mj4KICAgIDRjNWQ6CTQ1IDMxIGU0ICAgICAgICAgICAgIAl4b3IgICAgJXIxMmQsJXIx MmQKICAgIDRjNjA6CWU5IDRlIGY2IGZmIGZmICAgICAgIAlqbXBxICAgNDJiMyA8dnhsYW5feG1p dF9vbmUrMHg5Mz4KICAgIDRjNjU6CTMxIGQyICAgICAgICAgICAgICAgIAl4b3IgICAgJWVkeCwl ZWR4CiAgICA0YzY3OgllOSA1MiBmYyBmZiBmZiAgICAgICAJam1wcSAgIDQ4YmUgPHZ4bGFuX3ht aXRfb25lKzB4NjllPgogICAgNGM2YzoJMGYgMWYgNDQgMDAgMDAgICAgICAgCW5vcGwgICAweDAo JXJheCwlcmF4LDEpCgkJCWRldi0+c3RhdHMudHhfY2Fycmllcl9lcnJvcnMrKzsKCQkJZ290byB0 eF9lcnJvcjsKCQl9CgoJCWlmIChuZHN0LT5kZXYgPT0gZGV2KSB7CgkJCW5ldGRldl9kYmcoZGV2 LCAiY2lyY3VsYXIgcm91dGUgdG8gJXBJNlxuIiwKICAgIDRjNzE6CTQ4IDgzIDgzIDc4IDAxIDAw IDAwIAlhZGRxICAgJDB4MSwweDE3OCglcmJ4KQogICAgNGM3ODoJMDEgCiAgICA0Yzc5OgllOSA1 YSBmZSBmZiBmZiAgICAgICAJam1wcSAgIDRhZDggPHZ4bGFuX3htaXRfb25lKzB4OGI4PgogICAg NGM3ZToJOGIgODAgYTQgMDAgMDAgMDAgICAgCW1vdiAgICAweGE0KCVyYXgpLCVlYXgKICAgIDRj ODQ6CTg1IGMwICAgICAgICAgICAgICAgIAl0ZXN0ICAgJWVheCwlZWF4CiAgICA0Yzg2Ogk3OCA3 MSAgICAgICAgICAgICAgICAJanMgICAgIDRjZjkgPHZ4bGFuX3htaXRfb25lKzB4YWQ5PgogICAg NGM4ODoJOGIgNDQgMjQgNjQgICAgICAgICAgCW1vdiAgICAweDY0KCVyc3ApLCVlYXgKICAgIDRj OGM6CTQ1IDMxIGY2ICAgICAgICAgICAgIAl4b3IgICAgJXIxNGQsJXIxNGQKCWJvb2wgdWRwX3N1 bSA9IGZhbHNlOwoJYm9vbCB4bmV0ID0gIW5ldF9lcSh2eGxhbi0+bmV0LCBkZXZfbmV0KHZ4bGFu LT5kZXYpKTsKCglpbmZvID0gc2tiX3R1bm5lbF9pbmZvKHNrYik7CgoJaWYgKHJkc3QpIHsKICAg IDRjOGY6CWMxIGU4IDA2ICAgICAgICAgICAgIAlzaHIgICAgJDB4NiwlZWF4CiAgICA0YzkyOgk4 MyBmMCAwMSAgICAgICAgICAgICAJeG9yICAgICQweDEsJWVheAoJaWYgKGRzdC0+c2Euc2FfZmFt aWx5ID09IEFGX0lORVQpIHsKCQlpZiAoIXZ4bGFuLT52bjRfc29jaykKCQkJZ290byBkcm9wOwoJ CXNrID0gdnhsYW4tPnZuNF9zb2NrLT5zb2NrLT5zazsKCgkJcnQgPSB2eGxhbl9nZXRfcm91dGUo dnhsYW4sIHNrYiwKICAgIDRjOTU6CTgzIGUwIDAxICAgICAgICAgICAgIAlhbmQgICAgJDB4MSwl ZWF4CiAgICA0Yzk4Ogk4OCA0NCAyNCA0OCAgICAgICAgICAJbW92ICAgICVhbCwweDQ4KCVyc3Ap CiAgICA0YzljOgllOSA2NyBmYyBmZiBmZiAgICAgICAJam1wcSAgIDQ5MDggPHZ4bGFuX3htaXRf b25lKzB4NmU4PgoJCX0KCgkJaWYgKHJ0LT5kc3QuZGV2ID09IGRldikgewoJCQluZXRkZXZfZGJn KGRldiwgImNpcmN1bGFyIHJvdXRlIHRvICVwSTRcbiIsCgkJCQkgICAmZHN0LT5zaW4uc2luX2Fk ZHIuc19hZGRyKTsKCQkJZGV2LT5zdGF0cy5jb2xsaXNpb25zKys7CiAgICA0Y2ExOgkwZiAxZiA0 NCAwMCAwMCAgICAgICAJbm9wbCAgIDB4MCglcmF4LCVyYXgsMSkKICAgIDRjYTY6CWU5IDU5IGZm IGZmIGZmICAgICAgIAlqbXBxICAgNGMwNCA8dnhsYW5feG1pdF9vbmUrMHg5ZTQ+CgkJCWdvdG8g cnRfdHhfZXJyb3I7CiAgICA0Y2FiOgk0OSA4ZCA0ZiAwNCAgICAgICAgICAJbGVhICAgIDB4NCgl cjE1KSwlcmN4CgkJfQoKCQkvKiBCeXBhc3MgZW5jYXBzdWxhdGlvbiBpZiB0aGUgZGVzdGluYXRp b24gaXMgbG9jYWwgKi8KCQlpZiAoIWluZm8gJiYgcnQtPnJ0X2ZsYWdzICYgUlRDRl9MT0NBTCAm JgogICAgNGNhZjoJNDggYzcgYzIgMDAgMDAgMDAgMDAgCW1vdiAgICAkMHgwLCVyZHgKICAgIDRj YjY6CTQ4IDg5IGRlICAgICAgICAgICAgIAltb3YgICAgJXJieCwlcnNpCgkJCXZ4bGFuX2VuY2Fw X2J5cGFzcyhza2IsIHZ4bGFuLCBkc3RfdnhsYW4pOwoJCQlyZXR1cm47CgkJfQoKCQlpZiAoIWlu Zm8pCgkJCXVkcF9zdW0gPSAhKGZsYWdzICYgVlhMQU5fRl9VRFBfWkVST19DU1VNX1RYKTsKICAg IDRjYjk6CTQ4IGM3IGM3IDAwIDAwIDAwIDAwIAltb3YgICAgJDB4MCwlcmRpCiAgICA0Y2MwOgll OCAwMCAwMCAwMCAwMCAgICAgICAJY2FsbHEgIDRjYzUgPHZ4bGFuX3htaXRfb25lKzB4YWE1Pgog ICAgNGNjNToJZTkgM2EgZmYgZmYgZmYgICAgICAgCWptcHEgICA0YzA0IDx2eGxhbl94bWl0X29u ZSsweDllND4KICAgIDRjY2E6CTQ5IDhkIDRmIDA0ICAgICAgICAgIAlsZWEgICAgMHg0KCVyMTUp LCVyY3gKICAgIDRjY2U6CTQ4IGM3IGMyIDAwIDAwIDAwIDAwIAltb3YgICAgJDB4MCwlcmR4CiAg ICA0Y2Q1Ogk0OCA4OSBkZSAgICAgICAgICAgICAJbW92ICAgICVyYngsJXJzaQogICAgNGNkODoJ NDggYzcgYzcgMDAgMDAgMDAgMDAgCW1vdiAgICAkMHgwLCVyZGkKCQkJCSAgICAgcmRzdCA/IHJk c3QtPnJlbW90ZV9pZmluZGV4IDogMCwgdG9zLAoJCQkJICAgICBkc3QtPnNpbi5zaW5fYWRkci5z X2FkZHIsCgkJCQkgICAgICZzcmMtPnNpbi5zaW5fYWRkci5zX2FkZHIsCgkJCQkgICAgIGRzdF9j YWNoZSwgaW5mbyk7CgkJaWYgKElTX0VSUihydCkpIHsKCQkJbmV0ZGV2X2RiZyhkZXYsICJubyBy b3V0ZSB0byAlcEk0XG4iLAogICAgNGNkZjoJNDggODkgODQgMjQgODggMDAgMDAgCW1vdiAgICAl cmF4LDB4ODgoJXJzcCkKICAgIDRjZTY6CTAwIAogICAgNGNlNzoJZTggMDAgMDAgMDAgMDAgICAg ICAgCWNhbGxxICA0Y2VjIDx2eGxhbl94bWl0X29uZSsweGFjYz4KICAgIDRjZWM6CTRjIDhiIDk0 IDI0IDg4IDAwIDAwIAltb3YgICAgMHg4OCglcnNwKSwlcjEwCiAgICA0Y2YzOgkwMCAKICAgIDRj ZjQ6CWU5IDc4IGZmIGZmIGZmICAgICAgIAlqbXBxICAgNGM3MSA8dnhsYW5feG1pdF9vbmUrMHhh NTE+CiAgICA0Y2Y5OglhOSAwMCAwMCAwMCAzMCAgICAgICAJdGVzdCAgICQweDMwMDAwMDAwLCVl YXgKCQkJZGV2LT5zdGF0cy50eF9jYXJyaWVyX2Vycm9ycysrOwoJCQlnb3RvIHR4X2Vycm9yOwoJ CX0KCgkJaWYgKHJ0LT5kc3QuZGV2ID09IGRldikgewoJCQluZXRkZXZfZGJnKGRldiwgImNpcmN1 bGFyIHJvdXRlIHRvICVwSTRcbiIsCiAgICA0Y2ZlOgk0YyA4OSBkNyAgICAgICAgICAgICAJbW92 ICAgICVyMTAsJXJkaQogICAgNGQwMToJNzUgODUgICAgICAgICAgICAgICAgCWpuZSAgICA0Yzg4 IDx2eGxhbl94bWl0X29uZSsweGE2OD4KICAgIDRkMDM6CWU5IGFmIGZlIGZmIGZmICAgICAgIAlq bXBxICAgNGJiNyA8dnhsYW5feG1pdF9vbmUrMHg5OTc+CiAgICA0ZDA4OgllOCAwMCAwMCAwMCAw MCAgICAgICAJY2FsbHEgIDRkMGQgPHZ4bGFuX3htaXRfb25lKzB4YWVkPgogICAgNGQwZDoJMGYg MWYgMDAgICAgICAgICAgICAgCW5vcGwgICAoJXJheCkKCjAwMDAwMDAwMDAwMDRkMTAgPHZ4bGFu X2ZpbGxfbWV0YWRhdGFfZHN0PjoKICAgIDRkMTA6CWU4IDAwIDAwIDAwIDAwICAgICAgIAljYWxs cSAgNGQxNSA8dnhsYW5fZmlsbF9tZXRhZGF0YV9kc3QrMHg1PgogICAgNGQxNToJNTUgICAgICAg ICAgICAgICAgICAgCXB1c2ggICAlcmJwCiAgICA0ZDE2Ogk0OCA4OSBmOSAgICAgICAgICAgICAJ bW92ICAgICVyZGksJXJjeAogICAgNGQxOToJNDggODkgZTUgICAgICAgICAgICAgCW1vdiAgICAl cnNwLCVyYnAKICAgIDRkMWM6CTQxIDU3ICAgICAgICAgICAgICAgIAlwdXNoICAgJXIxNQogICAg NGQxZToJNDEgNTYgICAgICAgICAgICAgICAgCXB1c2ggICAlcjE0CiAgICA0ZDIwOgk0MSA1NSAg ICAgICAgICAgICAgICAJcHVzaCAgICVyMTMKICAgIDRkMjI6CTQxIDU0ICAgICAgICAgICAgICAg IAlwdXNoICAgJXIxMgogICAgNGQyNDoJNDkgODkgZjQgICAgICAgICAgICAgCW1vdiAgICAlcnNp LCVyMTIKICAgIDRkMjc6CTUzICAgICAgICAgICAgICAgICAgIAlwdXNoICAgJXJieAogICAgNGQy ODoJNGMgOGQgYWYgNDAgMDggMDAgMDAgCWxlYSAgICAweDg0MCglcmRpKSwlcjEzCiAgICA0ZDJm Ogk0OCA4MyBlYyAzMCAgICAgICAgICAJc3ViICAgICQweDMwLCVyc3AKCQkJZGV2LT5zdGF0cy5j b2xsaXNpb25zKys7CgkJCWdvdG8gcnRfdHhfZXJyb3I7CgkJfQoKCQkvKiBCeXBhc3MgZW5jYXBz dWxhdGlvbiBpZiB0aGUgZGVzdGluYXRpb24gaXMgbG9jYWwgKi8KCQlpZiAoIWluZm8gJiYgcnQt PnJ0X2ZsYWdzICYgUlRDRl9MT0NBTCAmJgogICAgNGQzMzoJNjUgNDggOGIgMDQgMjUgMjggMDAg CW1vdiAgICAlZ3M6MHgyOCwlcmF4CiAgICA0ZDNhOgkwMCAwMCAKCWlwX3J0X3B1dChydCk7CnR4 X2Vycm9yOgoJZGV2LT5zdGF0cy50eF9lcnJvcnMrKzsKdHhfZnJlZToKCWRldl9rZnJlZV9za2Io c2tiKTsKfQogICAgNGQzYzoJNDggODkgNDUgZDAgICAgICAgICAgCW1vdiAgICAlcmF4LC0weDMw KCVyYnApCgkJCQkJCQkgZHN0LT5yZW1vdGVfaWZpbmRleCk7CglyZXR1cm4gX192eGxhbl9jaGFu Z2VfbXR1KGRldiwgbG93ZXJkZXYsIGRzdCwgbmV3X210dSwgdHJ1ZSk7Cn0KCnN0YXRpYyBpbnQg dnhsYW5fZmlsbF9tZXRhZGF0YV9kc3Qoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgc3RydWN0IHNr X2J1ZmYgKnNrYikKewogICAgNGQ0MDoJMzEgYzAgICAgICAgICAgICAgICAgCXhvciAgICAlZWF4 LCVlYXgKICAgIDRkNDI6CTQ4IDhiIDQ2IDU4ICAgICAgICAgIAltb3YgICAgMHg1OCglcnNpKSwl cmF4CiAgICA0ZDQ2Ogk0OCA4MyBlMCBmZSAgICAgICAgICAJYW5kICAgICQweGZmZmZmZmZmZmZm ZmZmZmUsJXJheAogICAgNGQ0YToJMGYgODQgNmMgMDIgMDAgMDAgICAgCWplICAgICA0ZmJjIDx2 eGxhbl9maWxsX21ldGFkYXRhX2RzdCsweDJhYz4KICAgIDRkNTA6CWY2IDQwIDYxIDAyICAgICAg ICAgIAl0ZXN0YiAgJDB4MiwweDYxKCVyYXgpCiAgICA0ZDU0Ogk0OCA4ZCA5OCBhMCAwMCAwMCAw MCAJbGVhICAgIDB4YTAoJXJheCksJXJieAogICAgNGQ1YjoJMGYgODQgM2YgMDIgMDAgMDAgICAg CWplICAgICA0ZmEwIDx2eGxhbl9maWxsX21ldGFkYXRhX2RzdCsweDI5MD4KICAgIDRkNjE6CTBm IGI3IDkxIDgwIDA5IDAwIDAwIAltb3Z6d2wgMHg5ODAoJXJjeCksJWVkeAogICAgNGQ2ODoJMGYg YjcgODEgN2UgMDkgMDAgMDAgCW1vdnp3bCAweDk3ZSglcmN4KSwlZWF4CiAgICA0ZDZmOgk0OCA4 YiBiOSA4MCAwNCAwMCAwMCAJbW92ICAgIDB4NDgwKCVyY3gpLCVyZGkKCnN0YXRpYyBpbmxpbmUg c3RydWN0IG1ldGFkYXRhX2RzdCAqc2tiX21ldGFkYXRhX2RzdChzdHJ1Y3Qgc2tfYnVmZiAqc2ti KQp7CglzdHJ1Y3QgbWV0YWRhdGFfZHN0ICptZF9kc3QgPSAoc3RydWN0IG1ldGFkYXRhX2RzdCAq KSBza2JfZHN0KHNrYik7CgoJaWYgKG1kX2RzdCAmJiBtZF9kc3QtPmRzdC5mbGFncyAmIERTVF9N RVRBREFUQSkKICAgIDRkNzY6CTM5IGMyICAgICAgICAgICAgICAgIAljbXAgICAgJWVheCwlZWR4 CiAgICA0ZDc4Ogk4OSA0NSBjOCAgICAgICAgICAgICAJbW92ICAgICVlYXgsLTB4MzgoJXJicCkK ICAgIDRkN2I6CTg5IDU1IGNjICAgICAgICAgICAgIAltb3YgICAgJWVkeCwtMHgzNCglcmJwKQog ICAgNGQ3ZToJMGYgOGUgZTMgMDEgMDAgMDAgICAgCWpsZSAgICA0ZjY3IDx2eGxhbl9maWxsX21l dGFkYXRhX2RzdCsweDI1Nz4KewoJc3RydWN0IG1ldGFkYXRhX2RzdCAqbWRfZHN0ID0gc2tiX21l dGFkYXRhX2RzdChza2IpOwoJc3RydWN0IGRzdF9lbnRyeSAqZHN0OwoKCWlmIChtZF9kc3QpCgkJ cmV0dXJuICZtZF9kc3QtPnUudHVuX2luZm87CiAgICA0ZDg0Ogk0MSBmNiA4NCAyNCA5MSAwMCAw MCAJdGVzdGIgICQweDMwLDB4OTEoJXIxMikKICAgIDRkOGI6CTAwIDMwIAoKc3RhdGljIGlubGlu ZSBzdHJ1Y3QgbWV0YWRhdGFfZHN0ICpza2JfbWV0YWRhdGFfZHN0KHN0cnVjdCBza19idWZmICpz a2IpCnsKCXN0cnVjdCBtZXRhZGF0YV9kc3QgKm1kX2RzdCA9IChzdHJ1Y3QgbWV0YWRhdGFfZHN0 ICopIHNrYl9kc3Qoc2tiKTsKCglpZiAobWRfZHN0ICYmIG1kX2RzdC0+ZHN0LmZsYWdzICYgRFNU X01FVEFEQVRBKQogICAgNGQ4ZDoJMGYgODQgZjggMDEgMDAgMDAgICAgCWplICAgICA0ZjhiIDx2 eGxhbl9maWxsX21ldGFkYXRhX2RzdCsweDI3Yj4KCXN0cnVjdCB2eGxhbl9kZXYgKnZ4bGFuID0g bmV0ZGV2X3ByaXYoZGV2KTsKCXN0cnVjdCBpcF90dW5uZWxfaW5mbyAqaW5mbyA9IHNrYl90dW5u ZWxfaW5mbyhza2IpOwoJX19iZTE2IHNwb3J0LCBkcG9ydDsKCglzcG9ydCA9IHVkcF9mbG93X3Ny Y19wb3J0KGRldl9uZXQoZGV2KSwgc2tiLCB2eGxhbi0+Y2ZnLnBvcnRfbWluLAogICAgNGQ5MzoJ NDEgOGIgODQgMjQgYTQgMDAgMDAgCW1vdiAgICAweGE0KCVyMTIpLCVlYXgKICAgIDRkOWE6CTAw IAogICAgNGQ5YjoJODUgYzAgICAgICAgICAgICAgICAgCXRlc3QgICAlZWF4LCVlYXgKICAgIDRk OWQ6CTBmIDg1IGQxIDAwIDAwIDAwICAgIAlqbmUgICAgNGU3NCA8dnhsYW5fZmlsbF9tZXRhZGF0 YV9kc3QrMHgxNjQ+CiAgICA0ZGEzOgk0ZCA4YiA4NCAyNCBkOCAwMCAwMCAJbW92ICAgIDB4ZDgo JXIxMiksJXI4CiAgICA0ZGFhOgkwMCAKc3RhdGljIGlubGluZSBfX2JlMTYgdWRwX2Zsb3dfc3Jj X3BvcnQoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAoJCQkJICAgICAgIGlu dCBtaW4sIGludCBtYXgsIGJvb2wgdXNlX2V0aCkKewoJdTMyIGhhc2g7CgoJaWYgKG1pbiA+PSBt YXgpIHsKICAgIDRkYWI6CTQ1IDBmIGI3IDhjIDI0IGMwIDAwIAltb3Z6d2wgMHhjMCglcjEyKSwl cjlkCiAgICA0ZGIyOgkwMCAwMCAKCQkJCSAgZGF0YSwgcHJvdG8sIG5ob2ZmLCBobGVuLCBmbGFn cyk7Cn0KCnN0YXRpYyBpbmxpbmUgX191MzIgc2tiX2dldF9oYXNoKHN0cnVjdCBza19idWZmICpz a2IpCnsKCWlmICghc2tiLT5sNF9oYXNoICYmICFza2ItPnN3X2hhc2gpCiAgICA0ZGI0Ogk0MSAw ZiBiNiA1MCAwYiAgICAgICAJbW92emJsIDB4YiglcjgpLCVlZHgKICAgIDRkYjk6CTQxIDBmIGI2 IDc4IDA4ICAgICAgIAltb3Z6YmwgMHg4KCVyOCksJWVkaQogICAgNGRiZToJNDEgMGYgYjYgNDAg MGEgICAgICAgCW1vdnpibCAweGEoJXI4KSwlZWF4CgkJX19za2JfZ2V0X2hhc2goc2tiKTsKCgly ZXR1cm4gc2tiLT5oYXNoOwogICAgNGRjMzoJNDEgODEgZTkgMDUgNDEgNTIgMjEgCXN1YiAgICAk MHgyMTUyNDEwNSwlcjlkCiAgICA0ZGNhOgk0NCAwMSBjZiAgICAgICAgICAgICAJYWRkICAgICVy OWQsJWVkaQoJCS8qIFVzZSBkZWZhdWx0IHJhbmdlICovCgkJaW5ldF9nZXRfbG9jYWxfcG9ydF9y YW5nZShuZXQsICZtaW4sICZtYXgpOwoJfQoKCWhhc2ggPSBza2JfZ2V0X2hhc2goc2tiKTsKCWlm ICh1bmxpa2VseSghaGFzaCkpIHsKICAgIDRkY2Q6CWMxIGUyIDE4ICAgICAgICAgICAgIAlzaGwg ICAgJDB4MTgsJWVkeAogICAgNGRkMDoJOGQgMzQgM2EgICAgICAgICAgICAgCWxlYSAgICAoJXJk eCwlcmRpLDEpLCVlc2kKCQlpZiAodXNlX2V0aCkgewoJCQkvKiBDYW4ndCBmaW5kIGEgbm9ybWFs IGhhc2gsIGNhbGxlciBoYXMgaW5kaWNhdGVkIGFuCgkJCSAqIEV0aGVybmV0IHBhY2tldCBzbyB1 c2UgdGhhdCB0byBjb21wdXRlIGEgaGFzaC4KCQkJICovCgkJCWhhc2ggPSBqaGFzaChza2ItPmRh dGEsIDIgKiBFVEhfQUxFTiwKICAgIDRkZDM6CWMxIGUwIDEwICAgICAgICAgICAgIAlzaGwgICAg JDB4MTAsJWVheAogICAgNGRkNjoJNDEgMGYgYjYgNzggMDYgICAgICAgCW1vdnpibCAweDYoJXI4 KSwlZWRpCnsKCXUzMiBhLCBiLCBjOwoJY29uc3QgdTggKmsgPSBrZXk7CgoJLyogU2V0IHVwIHRo ZSBpbnRlcm5hbCBzdGF0ZSAqLwoJYSA9IGIgPSBjID0gSkhBU0hfSU5JVFZBTCArIGxlbmd0aCAr IGluaXR2YWw7CiAgICA0ZGRiOgk4ZCAxNCAwNiAgICAgICAgICAgICAJbGVhICAgICglcnNpLCVy YXgsMSksJWVkeAogICAgNGRkZToJNDEgMGYgYjYgNDAgMDcgICAgICAgCW1vdnpibCAweDcoJXI4 KSwlZWF4CiAgICA0ZGUzOgk0MSAwZiBiNiA3MCAwNCAgICAgICAJbW92emJsIDB4NCglcjgpLCVl c2kKICAgIDRkZTg6CWMxIGU3IDEwICAgICAgICAgICAgIAlzaGwgICAgJDB4MTAsJWVkaQogICAg NGRlYjoJNDQgMDEgY2UgICAgICAgICAgICAgCWFkZCAgICAlcjlkLCVlc2kKICAgIDRkZWU6CWMx IGUwIDE4ICAgICAgICAgICAgIAlzaGwgICAgJDB4MTgsJWVheAogICAgNGRmMToJMDEgZjAgICAg ICAgICAgICAgICAgCWFkZCAgICAlZXNpLCVlYXgKICAgIDRkZjM6CTQxIDBmIGI2IDMwICAgICAg ICAgIAltb3Z6YmwgKCVyOCksJWVzaQogICAgNGRmNzoJMDEgZjggICAgICAgICAgICAgICAgCWFk ZCAgICAlZWRpLCVlYXgKICAgIDRkZjk6CTQxIDBmIGI2IDc4IDA1ICAgICAgIAltb3Z6YmwgMHg1 KCVyOCksJWVkaQogICAgNGRmZToJNDQgMDEgY2UgICAgICAgICAgICAgCWFkZCAgICAlcjlkLCVl c2kKICAgIDRlMDE6CTQ1IDBmIGI2IDQ4IDAzICAgICAgIAltb3Z6YmwgMHgzKCVyOCksJXI5ZAog ICAgNGUwNjoJYzEgZTcgMDggICAgICAgICAgICAgCXNobCAgICAkMHg4LCVlZGkKICAgIDRlMDk6 CTAxIGM3ICAgICAgICAgICAgICAgIAlhZGQgICAgJWVheCwlZWRpCiAgICA0ZTBiOgk0NCA4OSBj OCAgICAgICAgICAgICAJbW92ICAgICVyOWQsJWVheAogICAgNGUwZToJYzEgZTAgMTggICAgICAg ICAgICAgCXNobCAgICAkMHgxOCwlZWF4CiAgICA0ZTExOgk0NCA4ZCAwYyAwNiAgICAgICAgICAJ bGVhICAgICglcnNpLCVyYXgsMSksJXI5ZAogICAgNGUxNToJNDEgMGYgYjYgNzAgMDIgICAgICAg CW1vdnpibCAweDIoJXI4KSwlZXNpCiAgICA0ZTFhOgk0MSAwZiBiNiA0MCAwOSAgICAgICAJbW92 emJsIDB4OSglcjgpLCVlYXgKICAgIDRlMWY6CWMxIGU2IDEwICAgICAgICAgICAgIAlzaGwgICAg JDB4MTAsJWVzaQogICAgNGUyMjoJYzEgZTAgMDggICAgICAgICAgICAgCXNobCAgICAkMHg4LCVl YXgKCWNhc2UgNjogIGIgKz0gKHUzMilrWzVdPDw4OwoJY2FzZSA1OiAgYiArPSBrWzRdOwoJY2Fz ZSA0OiAgYSArPSAodTMyKWtbM108PDI0OwoJY2FzZSAzOiAgYSArPSAodTMyKWtbMl08PDE2OwoJ Y2FzZSAyOiAgYSArPSAodTMyKWtbMV08PDg7CgljYXNlIDE6ICBhICs9IGtbMF07CiAgICA0ZTI1 Ogk0MSAwMSBmMSAgICAgICAgICAgICAJYWRkICAgICVlc2ksJXI5ZAogICAgNGUyODoJNDEgMGYg YjYgNzAgMDEgICAgICAgCW1vdnpibCAweDEoJXI4KSwlZXNpCgljYXNlIDEwOiBjICs9ICh1MzIp a1s5XTw8ODsKCWNhc2UgOTogIGMgKz0ga1s4XTsKCWNhc2UgODogIGIgKz0gKHUzMilrWzddPDwy NDsKCWNhc2UgNzogIGIgKz0gKHUzMilrWzZdPDwxNjsKCWNhc2UgNjogIGIgKz0gKHUzMilrWzVd PDw4OwoJY2FzZSA1OiAgYiArPSBrWzRdOwogICAgNGUyZDoJMDEgZDAgICAgICAgICAgICAgICAg CWFkZCAgICAlZWR4LCVlYXgKCWNhc2UgNDogIGEgKz0gKHUzMilrWzNdPDwyNDsKCWNhc2UgMzog IGEgKz0gKHUzMilrWzJdPDwxNjsKCWNhc2UgMjogIGEgKz0gKHUzMilrWzFdPDw4OwoJY2FzZSAx OiAgYSArPSBrWzBdOwogICAgNGUyZjoJODkgZmEgICAgICAgICAgICAgICAgCW1vdiAgICAlZWRp LCVlZHgKICAgIDRlMzE6CTMxIGY4ICAgICAgICAgICAgICAgIAl4b3IgICAgJWVkaSwlZWF4CiAg ICA0ZTMzOgljMSBjMiAwZSAgICAgICAgICAgICAJcm9sICAgICQweGUsJWVkeAoJY2FzZSAxMDog YyArPSAodTMyKWtbOV08PDg7CgljYXNlIDk6ICBjICs9IGtbOF07CgljYXNlIDg6ICBiICs9ICh1 MzIpa1s3XTw8MjQ7CgljYXNlIDc6ICBiICs9ICh1MzIpa1s2XTw8MTY7CgljYXNlIDY6ICBiICs9 ICh1MzIpa1s1XTw8ODsKCWNhc2UgNTogIGIgKz0ga1s0XTsKICAgIDRlMzY6CTI5IGQwICAgICAg ICAgICAgICAgIAlzdWIgICAgJWVkeCwlZWF4CiAgICA0ZTM4OgljMSBlNiAwOCAgICAgICAgICAg ICAJc2hsICAgICQweDgsJWVzaQoJY2FzZSA0OiAgYSArPSAodTMyKWtbM108PDI0OwoJY2FzZSAz OiAgYSArPSAodTMyKWtbMl08PDE2OwoJY2FzZSAyOiAgYSArPSAodTMyKWtbMV08PDg7CgljYXNl IDE6ICBhICs9IGtbMF07CiAgICA0ZTNiOgk0NCAwMSBjZSAgICAgICAgICAgICAJYWRkICAgICVy OWQsJWVzaQogICAgNGUzZToJODkgZjIgICAgICAgICAgICAgICAgCW1vdiAgICAlZXNpLCVlZHgK ICAgIDRlNDA6CTg5IGM2ICAgICAgICAgICAgICAgIAltb3YgICAgJWVheCwlZXNpCiAgICA0ZTQy OgkzMSBjMiAgICAgICAgICAgICAgICAJeG9yICAgICVlYXgsJWVkeAogICAgNGU0NDoJYzEgYzYg MGIgICAgICAgICAgICAgCXJvbCAgICAkMHhiLCVlc2kKICAgIDRlNDc6CTI5IGYyICAgICAgICAg ICAgICAgIAlzdWIgICAgJWVzaSwlZWR4CiAgICA0ZTQ5OgkzMSBkNyAgICAgICAgICAgICAgICAJ eG9yICAgICVlZHgsJWVkaQoJCSBfX2poYXNoX2ZpbmFsKGEsIGIsIGMpOwogICAgNGU0YjoJODkg ZmUgICAgICAgICAgICAgICAgCW1vdiAgICAlZWRpLCVlc2kKICAgIDRlNGQ6CTg5IGQ3ICAgICAg ICAgICAgICAgIAltb3YgICAgJWVkeCwlZWRpCgljYXNlIDY6ICBiICs9ICh1MzIpa1s1XTw8ODsK CWNhc2UgNTogIGIgKz0ga1s0XTsKCWNhc2UgNDogIGEgKz0gKHUzMilrWzNdPDwyNDsKCWNhc2Ug MzogIGEgKz0gKHUzMilrWzJdPDwxNjsKCWNhc2UgMjogIGEgKz0gKHUzMilrWzFdPDw4OwoJY2Fz ZSAxOiAgYSArPSBrWzBdOwogICAgNGU0ZjoJYzEgY2YgMDcgICAgICAgICAgICAgCXJvciAgICAk MHg3LCVlZGkKCQkgX19qaGFzaF9maW5hbChhLCBiLCBjKTsKICAgIDRlNTI6CTI5IGZlICAgICAg ICAgICAgICAgIAlzdWIgICAgJWVkaSwlZXNpCiAgICA0ZTU0Ogk4OSBmNyAgICAgICAgICAgICAg ICAJbW92ICAgICVlc2ksJWVkaQoJY2FzZSA2OiAgYiArPSAodTMyKWtbNV08PDg7CgljYXNlIDU6 ICBiICs9IGtbNF07CgljYXNlIDQ6ICBhICs9ICh1MzIpa1szXTw8MjQ7CgljYXNlIDM6ICBhICs9 ICh1MzIpa1syXTw8MTY7CgljYXNlIDI6ICBhICs9ICh1MzIpa1sxXTw8ODsKCWNhc2UgMTogIGEg Kz0ga1swXTsKICAgIDRlNTY6CTMxIGYwICAgICAgICAgICAgICAgIAl4b3IgICAgJWVzaSwlZWF4 CiAgICA0ZTU4OgljMSBjNyAxMCAgICAgICAgICAgICAJcm9sICAgICQweDEwLCVlZGkKICAgIDRl NWI6CTI5IGY4ICAgICAgICAgICAgICAgIAlzdWIgICAgJWVkaSwlZWF4CgkJIF9famhhc2hfZmlu YWwoYSwgYiwgYyk7CiAgICA0ZTVkOgk4OSBjNyAgICAgICAgICAgICAgICAJbW92ICAgICVlYXgs JWVkaQogICAgNGU1ZjoJMzEgYzIgICAgICAgICAgICAgICAgCXhvciAgICAlZWF4LCVlZHgKICAg IDRlNjE6CWMxIGM3IDA0ICAgICAgICAgICAgIAlyb2wgICAgJDB4NCwlZWRpCiAgICA0ZTY0Ogky OSBmYSAgICAgICAgICAgICAgICAJc3ViICAgICVlZGksJWVkeAogICAgNGU2NjoJMzEgZDYgICAg ICAgICAgICAgICAgCXhvciAgICAlZWR4LCVlc2kKCWNhc2UgNjogIGIgKz0gKHUzMilrWzVdPDw4 OwoJY2FzZSA1OiAgYiArPSBrWzRdOwoJY2FzZSA0OiAgYSArPSAodTMyKWtbM108PDI0OwoJY2Fz ZSAzOiAgYSArPSAodTMyKWtbMl08PDE2OwoJY2FzZSAyOiAgYSArPSAodTMyKWtbMV08PDg7Cglj YXNlIDE6ICBhICs9IGtbMF07CiAgICA0ZTY4OgljMSBjMiAwZSAgICAgICAgICAgICAJcm9sICAg ICQweGUsJWVkeAogICAgNGU2YjoJMjkgZDYgICAgICAgICAgICAgICAgCXN1YiAgICAlZWR4LCVl c2kKICAgIDRlNmQ6CTMxIGYwICAgICAgICAgICAgICAgIAl4b3IgICAgJWVzaSwlZWF4CgkJIF9f amhhc2hfZmluYWwoYSwgYiwgYyk7CiAgICA0ZTZmOgljMSBjZSAwOCAgICAgICAgICAgICAJcm9y ICAgICQweDgsJWVzaQogICAgNGU3MjoJMjkgZjAgICAgICAgICAgICAgICAgCXN1YiAgICAlZXNp LCVlYXgKICAgIDRlNzQ6CThiIDc1IGM4ICAgICAgICAgICAgIAltb3YgICAgLTB4MzgoJXJicCks JWVzaQogICAgNGU3NzoJNDQgOGIgNzUgY2MgICAgICAgICAgCW1vdiAgICAtMHgzNCglcmJwKSwl cjE0ZAogICAgNGU3YjoJODkgYzIgICAgICAgICAgICAgICAgCW1vdiAgICAlZWF4LCVlZHgKICAg IDRlN2Q6CWMxIGUyIDEwICAgICAgICAgICAgIAlzaGwgICAgJDB4MTAsJWVkeAogICAgNGU4MDoJ NDQgMGYgYjcgN2IgMzIgICAgICAgCW1vdnp3bCAweDMyKCVyYngpLCVyMTVkCiAgICA0ZTg1Ogkz MSBkMCAgICAgICAgICAgICAgICAJeG9yICAgICVlZHgsJWVheAogICAgNGU4NzoJNDEgMjkgZjYg ICAgICAgICAgICAgCXN1YiAgICAlZXNpLCVyMTRkCiAgICA0ZThhOgk0ZCA2MyBmNiAgICAgICAg ICAgICAJbW92c2xxICVyMTRkLCVyMTQKICAgIDRlOGQ6CTQ5IDBmIGFmIGM2ICAgICAgICAgIAlp bXVsICAgJXIxNCwlcmF4CiAgICA0ZTkxOgk0OCBjMSBlOCAyMCAgICAgICAgICAJc2hyICAgICQw eDIwLCVyYXgKICAgIDRlOTU6CTQ0IDhkIDM0IDMwICAgICAgICAgIAlsZWEgICAgKCVyYXgsJXJz aSwxKSwlcjE0ZAogICAgNGU5OToJNjYgNDEgYzEgYzYgMDggICAgICAgCXJvbCAgICAkMHg4LCVy MTR3CiAgICA0ZTllOgk2NiA0NSA4NSBmZiAgICAgICAgICAJdGVzdCAgICVyMTV3LCVyMTV3CiAg ICA0ZWEyOgk3NSAwOCAgICAgICAgICAgICAgICAJam5lICAgIDRlYWMgPHZ4bGFuX2ZpbGxfbWV0 YWRhdGFfZHN0KzB4MTljPgoJICogYXR0YWNrZXIgaXMgbGVha2VkLiBPbmx5IHVwcGVyIDE2IGJp dHMgYXJlIHJlbGV2YW50IGluIHRoZQoJICogY29tcHV0YXRpb24gZm9yIDE2IGJpdCBwb3J0IHZh bHVlLgoJICovCgloYXNoIF49IGhhc2ggPDwgMTY7CgoJcmV0dXJuIGh0b25zKCgoKHU2NCkgaGFz aCAqIChtYXggLSBtaW4pKSA+PiAzMikgKyBtaW4pOwogICAgNGVhNDoJNDQgMGYgYjcgYjkgN2Mg MDkgMDAgCW1vdnp3bCAweDk3YyglcmN4KSwlcjE1ZAogICAgNGVhYjoJMDAgCgkvKiBTaW5jZSB0 aGlzIGlzIGJlaW5nIHNlbnQgb24gdGhlIHdpcmUgb2JmdXNjYXRlIGhhc2ggYSBiaXQKCSAqIHRv IG1pbmltaXplIHBvc3NiaWxpdHkgdGhhdCBhbnkgdXNlZnVsIGluZm9ybWF0aW9uIHRvIGFuCgkg KiBhdHRhY2tlciBpcyBsZWFrZWQuIE9ubHkgdXBwZXIgMTYgYml0cyBhcmUgcmVsZXZhbnQgaW4g dGhlCgkgKiBjb21wdXRhdGlvbiBmb3IgMTYgYml0IHBvcnQgdmFsdWUuCgkgKi8KCWhhc2ggXj0g aGFzaCA8PCAxNjsKICAgIDRlYWM6CWY2IDQzIDQ5IDAyICAgICAgICAgIAl0ZXN0YiAgJDB4Miww eDQ5KCVyYngpCgkJCQkgIHZ4bGFuLT5jZmcucG9ydF9tYXgsIHRydWUpOwoJZHBvcnQgPSBpbmZv LT5rZXkudHBfZHN0ID8gOiB2eGxhbi0+Y2ZnLmRzdF9wb3J0OwogICAgNGViMDoJNzUgM2UgICAg ICAgICAgICAgICAgCWpuZSAgICA0ZWYwIDx2eGxhbl9maWxsX21ldGFkYXRhX2RzdCsweDFlMD4K ICAgIDRlYjI6CTQ4IDgzIGI5IDYwIDA4IDAwIDAwIAljbXBxICAgJDB4MCwweDg2MCglcmN4KQog ICAgNGViOToJMDAgCgoJcmV0dXJuIGh0b25zKCgoKHU2NCkgaGFzaCAqIChtYXggLSBtaW4pKSA+ PiAzMikgKyBtaW4pOwogICAgNGViYToJMGYgODQgMDMgMDEgMDAgMDAgICAgCWplICAgICA0ZmMz IDx2eGxhbl9maWxsX21ldGFkYXRhX2RzdCsweDJiMz4KICAgIDRlYzA6CTBmIGI2IDRiIDJhICAg ICAgICAgIAltb3Z6YmwgMHgyYSglcmJ4KSwlZWN4CiAgICA0ZWM0Ogk0NCA4YiA0MyAwYyAgICAg ICAgICAJbW92ICAgIDB4YyglcmJ4KSwlcjhkCiAgICA0ZWM4Ogk0YyA4ZCA0YiAwOCAgICAgICAg ICAJbGVhICAgIDB4OCglcmJ4KSwlcjkKICAgIDRlY2M6CTMxIGQyICAgICAgICAgICAgICAgIAl4 b3IgICAgJWVkeCwlZWR4CiAgICA0ZWNlOgk0OCA4OSA1YyAyNCAwOCAgICAgICAJbW92ICAgICVy YngsMHg4KCVyc3ApCiAgICA0ZWQzOgk0OCBjNyAwNCAyNCAwMCAwMCAwMCAJbW92cSAgICQweDAs KCVyc3ApCiAgICA0ZWRhOgkwMCAKICAgIDRlZGI6CTRjIDg5IGU2ICAgICAgICAgICAgIAltb3Yg ICAgJXIxMiwlcnNpCn0KCnN0YXRpYyBpbmxpbmUgdW5zaWduZWQgc2hvcnQgaXBfdHVubmVsX2lu Zm9fYWYoY29uc3Qgc3RydWN0IGlwX3R1bm5lbF9pbmZvCgkJCQkJICAgICAgICp0dW5faW5mbykK ewoJcmV0dXJuIHR1bl9pbmZvLT5tb2RlICYgSVBfVFVOTkVMX0lORk9fSVBWNiA/IEFGX0lORVQ2 IDogQUZfSU5FVDsKICAgIDRlZGU6CTRjIDg5IGVmICAgICAgICAgICAgIAltb3YgICAgJXIxMywl cmRpCiAgICA0ZWUxOgllOCAxYSBlNyBmZiBmZiAgICAgICAJY2FsbHEgIDM2MDAgPHZ4bGFuX2dl dF9yb3V0ZT4KCglpZiAoaXBfdHVubmVsX2luZm9fYWYoaW5mbykgPT0gQUZfSU5FVCkgewoJCXN0 cnVjdCBydGFibGUgKnJ0OwoKCQlpZiAoIXZ4bGFuLT52bjRfc29jaykKICAgIDRlZTY6CTQ4IDNk IDAwIGYwIGZmIGZmICAgIAljbXAgICAgJDB4ZmZmZmZmZmZmZmZmZjAwMCwlcmF4CiAgICA0ZWVj Ogk3NiA0NyAgICAgICAgICAgICAgICAJamJlICAgIDRmMzUgPHZ4bGFuX2ZpbGxfbWV0YWRhdGFf ZHN0KzB4MjI1PgogICAgNGVlZToJZWIgNTkgICAgICAgICAgICAgICAgCWptcCAgICA0ZjQ5IDx2 eGxhbl9maWxsX21ldGFkYXRhX2RzdCsweDIzOT4KCQkJcmV0dXJuIC1FSU5WQUw7CgkJcnQgPSB2 eGxhbl9nZXRfcm91dGUodnhsYW4sIHNrYiwgMCwgaW5mby0+a2V5LnRvcywKICAgIDRlZjA6CTQ4 IDgzIGI5IDY4IDA4IDAwIDAwIAljbXBxICAgJDB4MCwweDg2OCglcmN4KQogICAgNGVmNzoJMDAg CiAgICA0ZWY4OgkwZiA4NCBjNSAwMCAwMCAwMCAgICAJamUgICAgIDRmYzMgPHZ4bGFuX2ZpbGxf bWV0YWRhdGFfZHN0KzB4MmIzPgogICAgNGVmZToJMGYgYjYgNGIgMmEgICAgICAgICAgCW1vdnpi bCAweDJhKCVyYngpLCVlY3gKICAgIDRmMDI6CTQ0IDhiIDQzIDJjICAgICAgICAgIAltb3YgICAg MHgyYyglcmJ4KSwlcjhkCiAgICA0ZjA2Ogk0OCA4ZCA0MyAwOCAgICAgICAgICAJbGVhICAgIDB4 OCglcmJ4KSwlcmF4CiAgICA0ZjBhOgk0YyA4ZCA0YiAxOCAgICAgICAgICAJbGVhICAgIDB4MTgo JXJieCksJXI5CiAgICA0ZjBlOgkzMSBkMiAgICAgICAgICAgICAgICAJeG9yICAgICVlZHgsJWVk eAogICAgNGYxMDoJNDggODkgNWMgMjQgMTAgICAgICAgCW1vdiAgICAlcmJ4LDB4MTAoJXJzcCkK ICAgIDRmMTU6CTQ4IGM3IDQ0IDI0IDA4IDAwIDAwIAltb3ZxICAgJDB4MCwweDgoJXJzcCkKICAg IDRmMWM6CTAwIDAwIAoJCQkJICAgICBpbmZvLT5rZXkudS5pcHY0LmRzdCwKCQkJCSAgICAgJmlu Zm8tPmtleS51LmlwdjQuc3JjLCBOVUxMLCBpbmZvKTsKCQlpZiAoSVNfRVJSKHJ0KSkKICAgIDRm MWU6CTQ4IDg5IDA0IDI0ICAgICAgICAgIAltb3YgICAgJXJheCwoJXJzcCkKCQlpcF9ydF9wdXQo cnQpOwoJfSBlbHNlIHsKI2lmIElTX0VOQUJMRUQoQ09ORklHX0lQVjYpCgkJc3RydWN0IGRzdF9l bnRyeSAqbmRzdDsKCgkJaWYgKCF2eGxhbi0+dm42X3NvY2spCiAgICA0ZjIyOgk0YyA4OSBlNiAg ICAgICAgICAgICAJbW92ICAgICVyMTIsJXJzaQogICAgNGYyNToJNGMgODkgZWYgICAgICAgICAg ICAgCW1vdiAgICAlcjEzLCVyZGkKICAgIDRmMjg6CWU4IDQzIGJiIGZmIGZmICAgICAgIAljYWxs cSAgYTcwIDx2eGxhbjZfZ2V0X3JvdXRlPgogICAgNGYyZDoJNDggM2QgMDAgZjAgZmYgZmYgICAg CWNtcCAgICAkMHhmZmZmZmZmZmZmZmZmMDAwLCVyYXgKCQkJcmV0dXJuIC1FSU5WQUw7CgkJbmRz dCA9IHZ4bGFuNl9nZXRfcm91dGUodnhsYW4sIHNrYiwgMCwgaW5mby0+a2V5LnRvcywKICAgIDRm MzM6CTc3IDE0ICAgICAgICAgICAgICAgIAlqYSAgICAgNGY0OSA8dnhsYW5fZmlsbF9tZXRhZGF0 YV9kc3QrMHgyMzk+CiAgICA0ZjM1Ogk0OCA4OSBjNyAgICAgICAgICAgICAJbW92ICAgICVyYXgs JXJkaQogICAgNGYzODoJZTggMDAgMDAgMDAgMDAgICAgICAgCWNhbGxxICA0ZjNkIDx2eGxhbl9m aWxsX21ldGFkYXRhX2RzdCsweDIyZD4KICAgIDRmM2Q6CTY2IDQ0IDg5IDczIDMwICAgICAgIAlt b3YgICAgJXIxNHcsMHgzMCglcmJ4KQogICAgNGY0MjoJNjYgNDQgODkgN2IgMzIgICAgICAgCW1v diAgICAlcjE1dywweDMyKCVyYngpCiAgICA0ZjQ3OgkzMSBjMCAgICAgICAgICAgICAgICAJeG9y ICAgICVlYXgsJWVheAogICAgNGY0OToJNDggOGIgNWQgZDAgICAgICAgICAgCW1vdiAgICAtMHgz MCglcmJwKSwlcmJ4CiAgICA0ZjRkOgk2NSA0OCAzMyAxYyAyNSAyOCAwMCAJeG9yICAgICVnczow eDI4LCVyYngKICAgIDRmNTQ6CTAwIDAwIAogICAgNGY1NjoJNzUgNzUgICAgICAgICAgICAgICAg CWpuZSAgICA0ZmNkIDx2eGxhbl9maWxsX21ldGFkYXRhX2RzdCsweDJiZD4KICAgIDRmNTg6CTQ4 IDgzIGM0IDMwICAgICAgICAgIAlhZGQgICAgJDB4MzAsJXJzcAogICAgNGY1YzoJNWIgICAgICAg ICAgICAgICAgICAgCXBvcCAgICAlcmJ4CgkJCQkJaW5mby0+a2V5LmxhYmVsLCAmaW5mby0+a2V5 LnUuaXB2Ni5kc3QsCgkJCQkJJmluZm8tPmtleS51LmlwdjYuc3JjLCBOVUxMLCBpbmZvKTsKCQlp ZiAoSVNfRVJSKG5kc3QpKQogICAgNGY1ZDoJNDEgNWMgICAgICAgICAgICAgICAgCXBvcCAgICAl cjEyCiAgICA0ZjVmOgk0MSA1ZCAgICAgICAgICAgICAgICAJcG9wICAgICVyMTMKICAgIDRmNjE6 CTQxIDVlICAgICAgICAgICAgICAgIAlwb3AgICAgJXIxNAogICAgNGY2MzoJNDEgNWYgICAgICAg ICAgICAgICAgCXBvcCAgICAlcjE1CgkJCXJldHVybiBQVFJfRVJSKG5kc3QpOwoJCWRzdF9yZWxl YXNlKG5kc3QpOwogICAgNGY2NToJNWQgICAgICAgICAgICAgICAgICAgCXBvcCAgICAlcmJwCiAg ICA0ZjY2OgljMyAgICAgICAgICAgICAgICAgICAJcmV0cSAgIAogICAgNGY2NzoJNDggOGQgNTUg Y2MgICAgICAgICAgCWxlYSAgICAtMHgzNCglcmJwKSwlcmR4CiAgICA0ZjZiOgk0OCA4ZCA3NSBj OCAgICAgICAgICAJbGVhICAgIC0weDM4KCVyYnApLCVyc2kKI2Vsc2UgLyogIUNPTkZJR19JUFY2 ICovCgkJcmV0dXJuIC1FUEZOT1NVUFBPUlQ7CiNlbmRpZgoJfQoJaW5mby0+a2V5LnRwX3NyYyA9 IHNwb3J0OwogICAgNGY2ZjoJNDggODkgNGQgYzAgICAgICAgICAgCW1vdiAgICAlcmN4LC0weDQw KCVyYnApCglpbmZvLT5rZXkudHBfZHN0ID0gZHBvcnQ7CiAgICA0ZjczOgllOCAwMCAwMCAwMCAw MCAgICAgICAJY2FsbHEgIDRmNzggPHZ4bGFuX2ZpbGxfbWV0YWRhdGFfZHN0KzB4MjY4PgoJcmV0 dXJuIDA7CiAgICA0Zjc4Ogk0MSBmNiA4NCAyNCA5MSAwMCAwMCAJdGVzdGIgICQweDMwLDB4OTEo JXIxMikKICAgIDRmN2Y6CTAwIDMwIAp9CiAgICA0ZjgxOgk0OCA4YiA0ZCBjMCAgICAgICAgICAJ bW92ICAgIC0weDQwKCVyYnApLCVyY3gKICAgIDRmODU6CTBmIDg1IDA4IGZlIGZmIGZmICAgIAlq bmUgICAgNGQ5MyA8dnhsYW5fZmlsbF9tZXRhZGF0YV9kc3QrMHg4Mz4KICAgIDRmOGI6CTRjIDg5 IGU3ICAgICAgICAgICAgIAltb3YgICAgJXIxMiwlcmRpCiAgICA0ZjhlOgk0OCA4OSA0ZCBjMCAg ICAgICAgICAJbW92ICAgICVyY3gsLTB4NDAoJXJicCkKICAgIDRmOTI6CWU4IDAwIDAwIDAwIDAw ICAgICAgIAljYWxscSAgNGY5NyA8dnhsYW5fZmlsbF9tZXRhZGF0YV9kc3QrMHgyODc+CnsKCXUz MiBoYXNoOwoKCWlmIChtaW4gPj0gbWF4KSB7CgkJLyogVXNlIGRlZmF1bHQgcmFuZ2UgKi8KCQlp bmV0X2dldF9sb2NhbF9wb3J0X3JhbmdlKG5ldCwgJm1pbiwgJm1heCk7CiAgICA0Zjk3Ogk0OCA4 YiA0ZCBjMCAgICAgICAgICAJbW92ICAgIC0weDQwKCVyYnApLCVyY3gKICAgIDRmOWI6CWU5IGYz IGZkIGZmIGZmICAgICAgIAlqbXBxICAgNGQ5MyA8dnhsYW5fZmlsbF9tZXRhZGF0YV9kc3QrMHg4 Mz4KICAgIDRmYTA6CTQ4IDhiIDgwIDkwIDAwIDAwIDAwIAltb3YgICAgMHg5MCglcmF4KSwlcmF4 CiAgICA0ZmE3Ogk0OCA4ZCA1OCAxYyAgICAgICAgICAJbGVhICAgIDB4MWMoJXJheCksJXJieAoJ CQkJICBkYXRhLCBwcm90bywgbmhvZmYsIGhsZW4sIGZsYWdzKTsKfQoKc3RhdGljIGlubGluZSBf X3UzMiBza2JfZ2V0X2hhc2goc3RydWN0IHNrX2J1ZmYgKnNrYikKewoJaWYgKCFza2ItPmw0X2hh c2ggJiYgIXNrYi0+c3dfaGFzaCkKICAgIDRmYWI6CTQ4IDg1IGMwICAgICAgICAgICAgIAl0ZXN0 ICAgJXJheCwlcmF4CiAgICA0ZmFlOgliOCAwMCAwMCAwMCAwMCAgICAgICAJbW92ICAgICQweDAs JWVheAogICAgNGZiMzoJNDggMGYgNDQgZDggICAgICAgICAgCWNtb3ZlICAlcmF4LCVyYngKICAg IDRmYjc6CWU5IGE1IGZkIGZmIGZmICAgICAgIAlqbXBxICAgNGQ2MSA8dnhsYW5fZmlsbF9tZXRh ZGF0YV9kc3QrMHg1MT4KCQlfX3NrYl9nZXRfaGFzaChza2IpOwogICAgNGZiYzoJMzEgZGIgICAg ICAgICAgICAgICAgCXhvciAgICAlZWJ4LCVlYngKICAgIDRmYmU6CWU5IDllIGZkIGZmIGZmICAg ICAgIAlqbXBxICAgNGQ2MSA8dnhsYW5fZmlsbF9tZXRhZGF0YV9kc3QrMHg1MT4KICAgIDRmYzM6 CWI4IGVhIGZmIGZmIGZmICAgICAgIAltb3YgICAgJDB4ZmZmZmZmZWEsJWVheAogICAgNGZjODoJ ZTkgN2MgZmYgZmYgZmYgICAgICAgCWptcHEgICA0ZjQ5IDx2eGxhbl9maWxsX21ldGFkYXRhX2Rz dCsweDIzOT4KICAgIDRmY2Q6CWU4IDAwIDAwIDAwIDAwICAgICAgIAljYWxscSAgNGZkMiA8dnhs YW5fZmlsbF9tZXRhZGF0YV9kc3QrMHgyYzI+CgoJaWYgKG1kX2RzdCkKCQlyZXR1cm4gJm1kX2Rz dC0+dS50dW5faW5mbzsKCglkc3QgPSBza2JfZHN0KHNrYik7CglpZiAoZHN0ICYmIGRzdC0+bHd0 c3RhdGUpCiAgICA0ZmQyOgkwZiAxZiA0MCAwMCAgICAgICAgICAJbm9wbCAgIDB4MCglcmF4KQog ICAgNGZkNjoJNjYgMmUgMGYgMWYgODQgMDAgMDAgCW5vcHcgICAlY3M6MHgwKCVyYXgsJXJheCwx KQogICAgNGZkZDoJMDAgMDAgMDAgCgowMDAwMDAwMDAwMDA0ZmUwIDx2eGxhbl9ncm9fcmVjZWl2 ZT46CglpbmZvLT5vcHRpb25zX2xlbiA9IGxlbjsKfQoKc3RhdGljIGlubGluZSBzdHJ1Y3QgaXBf dHVubmVsX2luZm8gKmx3dF90dW5faW5mbyhzdHJ1Y3QgbHd0dW5uZWxfc3RhdGUgKmx3dHN0YXRl KQp7CglyZXR1cm4gKHN0cnVjdCBpcF90dW5uZWxfaW5mbyAqKWx3dHN0YXRlLT5kYXRhOwogICAg NGZlMDoJZTggMDAgMDAgMDAgMDAgICAgICAgCWNhbGxxICA0ZmU1IDx2eGxhbl9ncm9fcmVjZWl2 ZSsweDU+CiAgICA0ZmU1Ogk1NSAgICAgICAgICAgICAgICAgICAJcHVzaCAgICVyYnAKICAgIDRm ZTY6CTQ5IDg5IGYwICAgICAgICAgICAgIAltb3YgICAgJXJzaSwlcjgKICAgIDRmZTk6CTQ4IDg5 IGU1ICAgICAgICAgICAgIAltb3YgICAgJXJzcCwlcmJwCgkJcmV0dXJuIGx3dF90dW5faW5mbyhk c3QtPmx3dHN0YXRlKTsKCglyZXR1cm4gTlVMTDsKICAgIDRmZWM6CTQxIDU3ICAgICAgICAgICAg ICAgIAlwdXNoICAgJXIxNQogICAgNGZlZToJNDEgNTYgICAgICAgICAgICAgICAgCXB1c2ggICAl cjE0CiAgICA0ZmYwOgk0MSA1NSAgICAgICAgICAgICAgICAJcHVzaCAgICVyMTMKICAgIDRmZjI6 CTQxIDU0ICAgICAgICAgICAgICAgIAlwdXNoICAgJXIxMgoKCWlmIChpcF90dW5uZWxfaW5mb19h ZihpbmZvKSA9PSBBRl9JTkVUKSB7CgkJc3RydWN0IHJ0YWJsZSAqcnQ7CgoJCWlmICghdnhsYW4t PnZuNF9zb2NrKQoJCQlyZXR1cm4gLUVJTlZBTDsKICAgIDRmZjQ6CTUzICAgICAgICAgICAgICAg ICAgIAlwdXNoICAgJXJieAogICAgNGZmNToJNDggODkgZDMgICAgICAgICAgICAgCW1vdiAgICAl cmR4LCVyYngKICAgIDRmZjg6CTQ4IDgzIGVjIDIwICAgICAgICAgIAlzdWIgICAgJDB4MjAsJXJz cAogICAgNGZmYzoJOGIgNGEgMzQgICAgICAgICAgICAgCW1vdiAgICAweDM0KCVyZHgpLCVlY3gK I2VuZGlmCgl9CglpbmZvLT5rZXkudHBfc3JjID0gc3BvcnQ7CglpbmZvLT5rZXkudHBfZHN0ID0g ZHBvcnQ7CglyZXR1cm4gMDsKfQogICAgNGZmZjoJNGMgOGIgYjcgNDggMDIgMDAgMDAgCW1vdiAg ICAweDI0OCglcmRpKSwlcjE0CiAgICA1MDA2Ogk0NCA4ZCA2MSAwOCAgICAgICAgICAJbGVhICAg IDB4OCglcmN4KSwlcjEyZAogICAgNTAwYToJNDQgMzkgNjIgMzAgICAgICAgICAgCWNtcCAgICAl cjEyZCwweDMwKCVyZHgpCiAgICA1MDBlOgk0OSA4OSBjZCAgICAgICAgICAgICAJbW92ICAgICVy Y3gsJXIxMwp9CgpzdGF0aWMgc3RydWN0IHNrX2J1ZmYgKip2eGxhbl9ncm9fcmVjZWl2ZShzdHJ1 Y3Qgc29jayAqc2ssCgkJCQkJICBzdHJ1Y3Qgc2tfYnVmZiAqKmhlYWQsCgkJCQkJICBzdHJ1Y3Qg c2tfYnVmZiAqc2tiKQp7CiAgICA1MDExOgk3MyA1MCAgICAgICAgICAgICAgICAJamFlICAgIDUw NjMgPHZ4bGFuX2dyb19yZWNlaXZlKzB4ODM+CiAgICA1MDEzOgk4YiA5MiA4MCAwMCAwMCAwMCAg ICAJbW92ICAgIDB4ODAoJXJkeCksJWVkeAogICAgNTAxOToJODkgZDAgICAgICAgICAgICAgICAg CW1vdiAgICAlZWR4LCVlYXgKICAgIDUwMWI6CTJiIDgzIDg0IDAwIDAwIDAwICAgIAlzdWIgICAg MHg4NCglcmJ4KSwlZWF4CiAgICA1MDIxOgk0MSAzOSBjNCAgICAgICAgICAgICAJY21wICAgICVl YXgsJXIxMmQKICAgIDUwMjQ6CTBmIDg3IGFiIDAyIDAwIDAwICAgIAlqYSAgICAgNTJkNSA8dnhs YW5fZ3JvX3JlY2VpdmUrMHgyZjU+CiAgICA1MDJhOgk0OSA4OSBjZiAgICAgICAgICAgICAJbW92 ICAgICVyY3gsJXIxNQppbnQgZGV2X3Jlc3RhcnQoc3RydWN0IG5ldF9kZXZpY2UgKmRldik7Cmlu dCBza2JfZ3JvX3JlY2VpdmUoc3RydWN0IHNrX2J1ZmYgKipoZWFkLCBzdHJ1Y3Qgc2tfYnVmZiAq c2tiKTsKCnN0YXRpYyBpbmxpbmUgdW5zaWduZWQgaW50IHNrYl9ncm9fb2Zmc2V0KGNvbnN0IHN0 cnVjdCBza19idWZmICpza2IpCnsKCXJldHVybiBOQVBJX0dST19DQihza2IpLT5kYXRhX29mZnNl dDsKICAgIDUwMmQ6CTRjIDAzIGJiIGQ4IDAwIDAwIDAwIAlhZGQgICAgMHhkOCglcmJ4KSwlcjE1 CiAgICA1MDM0Ogk0OCBjNyA0MyAyOCAwMCAwMCAwMCAJbW92cSAgICQweDAsMHgyOCglcmJ4KQog ICAgNTAzYjoJMDAgCglza2JfZ3JvX3JlbWNzdW1faW5pdCgmZ3JjKTsKCglvZmZfdnggPSBza2Jf Z3JvX29mZnNldChza2IpOwoJaGxlbiA9IG9mZl92eCArIHNpemVvZigqdmgpOwoJdmggICA9IHNr Yl9ncm9faGVhZGVyX2Zhc3Qoc2tiLCBvZmZfdngpOwoJaWYgKHNrYl9ncm9faGVhZGVyX2hhcmQo c2tiLCBobGVuKSkgewogICAgNTAzYzoJYzcgNDMgMzAgMDAgMDAgMDAgMDAgCW1vdmwgICAkMHgw LDB4MzAoJXJieCkKICAgIDUwNDM6CTc1IDI1ICAgICAgICAgICAgICAgIAlqbmUgICAgNTA2YSA8 dnhsYW5fZ3JvX3JlY2VpdmUrMHg4YT4KICAgIDUwNDU6CWJhIDAxIDAwIDAwIDAwICAgICAgIAlt b3YgICAgJDB4MSwlZWR4CglyZXR1cm4gc2tiLT5kYXRhX2xlbjsKfQoKc3RhdGljIGlubGluZSB1 bnNpZ25lZCBpbnQgc2tiX2hlYWRsZW4oY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYikKewoJcmV0 dXJuIHNrYi0+bGVuIC0gc2tiLT5kYXRhX2xlbjsKICAgIDUwNGE6CTQ1IDMxIGZmICAgICAgICAg ICAgIAl4b3IgICAgJXIxNWQsJXIxNWQKICAgIDUwNGQ6CTY2IDA5IDUzIDM4ICAgICAgICAgIAlv ciAgICAgJWR4LDB4MzgoJXJieCkKCXJldHVybiB1bmxpa2VseShsZW4gPiBza2ItPmxlbikgPyBO VUxMIDogX19wc2tiX3B1bGwoc2tiLCBsZW4pOwp9CgpzdGF0aWMgaW5saW5lIGludCBwc2tiX21h eV9wdWxsKHN0cnVjdCBza19idWZmICpza2IsIHVuc2lnbmVkIGludCBsZW4pCnsKCWlmIChsaWtl bHkobGVuIDw9IHNrYl9oZWFkbGVuKHNrYikpKQogICAgNTA1MToJNDggODMgYzQgMjAgICAgICAg ICAgCWFkZCAgICAkMHgyMCwlcnNwCiAgICA1MDU1Ogk0YyA4OSBmOCAgICAgICAgICAgICAJbW92 ICAgICVyMTUsJXJheAogICAgNTA1ODoJNWIgICAgICAgICAgICAgICAgICAgCXBvcCAgICAlcmJ4 CiAgICA1MDU5Ogk0MSA1YyAgICAgICAgICAgICAgICAJcG9wICAgICVyMTIKCQl2aCA9IHNrYl9n cm9faGVhZGVyX3Nsb3coc2tiLCBobGVuLCBvZmZfdngpOwoJCWlmICh1bmxpa2VseSghdmgpKQog ICAgNTA1YjoJNDEgNWQgICAgICAgICAgICAgICAgCXBvcCAgICAlcjEzCiAgICA1MDVkOgk0MSA1 ZSAgICAgICAgICAgICAgICAJcG9wICAgICVyMTQKICAgIDUwNWY6CTQxIDVmICAgICAgICAgICAg ICAgIAlwb3AgICAgJXIxNQogICAgNTA2MToJNWQgICAgICAgICAgICAgICAgICAgCXBvcCAgICAl cmJwCiAgICA1MDYyOgljMyAgICAgICAgICAgICAgICAgICAJcmV0cSAgIAogICAgNTA2MzoJNDkg ODkgY2YgICAgICAgICAgICAgCW1vdiAgICAlcmN4LCVyMTUKCQkJCQl1bnNpZ25lZCBpbnQgb2Zm c2V0KQp7CglpZiAoIXBza2JfbWF5X3B1bGwoc2tiLCBobGVuKSkKCQlyZXR1cm4gTlVMTDsKCglO QVBJX0dST19DQihza2IpLT5mcmFnMCA9IE5VTEw7CiAgICA1MDY2Ogk0YyAwMyA3YSAyOCAgICAg ICAgICAJYWRkICAgIDB4MjgoJXJkeCksJXIxNQogICAgNTA2YToJZjYgNDMgNGEgMDQgICAgICAg ICAgCXRlc3RiICAkMHg0LDB4NGEoJXJieCkKCU5BUElfR1JPX0NCKHNrYiktPmZyYWcwX2xlbiA9 IDA7CiAgICA1MDZlOgk3NCAyYyAgICAgICAgICAgICAgICAJamUgICAgIDUwOWMgPHZ4bGFuX2dy b19yZWNlaXZlKzB4YmM+CiAgICA1MDcwOgkzMSBkMiAgICAgICAgICAgICAgICAJeG9yICAgICVl ZHgsJWVkeAogICAgNTA3MjoJYmUgMDggMDAgMDAgMDAgICAgICAgCW1vdiAgICAkMHg4LCVlc2kK CnN0YXRpYyBzdHJ1Y3Qgc2tfYnVmZiAqKnZ4bGFuX2dyb19yZWNlaXZlKHN0cnVjdCBzb2NrICpz aywKCQkJCQkgIHN0cnVjdCBza19idWZmICoqaGVhZCwKCQkJCQkgIHN0cnVjdCBza19idWZmICpz a2IpCnsKCXN0cnVjdCBza19idWZmICpwLCAqKnBwID0gTlVMTDsKICAgIDUwNzc6CTRjIDg5IGZm ICAgICAgICAgICAgIAltb3YgICAgJXIxNSwlcmRpCiAgICA1MDdhOgk0YyA4OSA0NSBjOCAgICAg ICAgICAJbW92ICAgICVyOCwtMHgzOCglcmJwKQoJcHAgPSBldGhfZ3JvX3JlY2VpdmUoaGVhZCwg c2tiKTsKCWZsdXNoID0gMDsKCm91dDoKCXNrYl9ncm9fcmVtY3N1bV9jbGVhbnVwKHNrYiwgJmdy Yyk7CglOQVBJX0dST19DQihza2IpLT5mbHVzaCB8PSBmbHVzaDsKICAgIDUwN2U6CTQ4IDg5IDRk IGQwICAgICAgICAgIAltb3YgICAgJXJjeCwtMHgzMCglcmJwKQoKCXJldHVybiBwcDsKfQogICAg NTA4MjoJZTggMDAgMDAgMDAgMDAgICAgICAgCWNhbGxxICA1MDg3IDx2eGxhbl9ncm9fcmVjZWl2 ZSsweGE3PgogICAgNTA4NzoJNGMgOGIgNDUgYzggICAgICAgICAgCW1vdiAgICAtMHgzOCglcmJw KSwlcjgKICAgIDUwOGI6CTQ4IDhiIDRkIGQwICAgICAgICAgIAltb3YgICAgLTB4MzAoJXJicCks JXJjeAogICAgNTA4ZjoJZjcgZDAgICAgICAgICAgICAgICAgCW5vdCAgICAlZWF4CiAgICA1MDkx Ogk4YiA1MyA0YyAgICAgICAgICAgICAJbW92ICAgIDB4NGMoJXJieCksJWVkeAp9CgpzdGF0aWMg aW5saW5lIHZvaWQgKnNrYl9ncm9faGVhZGVyX2Zhc3Qoc3RydWN0IHNrX2J1ZmYgKnNrYiwKCQkJ CQl1bnNpZ25lZCBpbnQgb2Zmc2V0KQp7CglyZXR1cm4gTkFQSV9HUk9fQ0Ioc2tiKS0+ZnJhZzAg KyBvZmZzZXQ7CiAgICA1MDk0OgkwMSBjMiAgICAgICAgICAgICAgICAJYWRkICAgICVlYXgsJWVk eAogICAgNTA5NjoJODMgZDIgMDAgICAgICAgICAgICAgCWFkYyAgICAkMHgwLCVlZHgKICAgIDUw OTk6CTg5IDUzIDRjICAgICAgICAgICAgIAltb3YgICAgJWVkeCwweDRjKCVyYngpCn0KCnN0YXRp YyBpbmxpbmUgdm9pZCBza2JfZ3JvX3Bvc3RwdWxsX3Jjc3VtKHN0cnVjdCBza19idWZmICpza2Is CgkJCQkJY29uc3Qgdm9pZCAqc3RhcnQsIHVuc2lnbmVkIGludCBsZW4pCnsKCWlmIChOQVBJX0dS T19DQihza2IpLT5jc3VtX3ZhbGlkKQogICAgNTA5YzoJNDEgZjcgMDcgMDAgMjAgMDAgMDAgCXRl c3RsICAkMHgyMDAwLCglcjE1KQoJCU5BUElfR1JPX0NCKHNrYiktPmNzdW0gPSBjc3VtX3N1YihO QVBJX0dST19DQihza2IpLT5jc3VtLAogICAgNTBhMzoJMGYgODUgYTUgMDAgMDAgMDAgICAgCWpu ZSAgICA1MTRlIDx2eGxhbl9ncm9fcmVjZWl2ZSsweDE2ZT4KICAgIDUwYTk6CTQxIGJkIDAyIDAw IDAwIDAwICAgIAltb3YgICAgJDB4MiwlcjEzZAogICAgNTBhZjoJNDUgMzEgZjYgICAgICAgICAg ICAgCXhvciAgICAlcjE0ZCwlcjE0ZAogICAgNTBiMjoJNDUgMzEgZTQgICAgICAgICAgICAgCXhv ciAgICAlcjEyZCwlcjEyZAogICAgNTBiNToJODMgNDMgMzQgMDggICAgICAgICAgCWFkZGwgICAk MHg4LDB4MzQoJXJieCkKICAgIDUwYjk6CTQ5IDhiIDAwICAgICAgICAgICAgIAltb3YgICAgKCVy OCksJXJheAogICAgNTBiYzoJNDggODUgYzAgICAgICAgICAgICAgCXRlc3QgICAlcmF4LCVyYXgK Y3N1bV9pcHY2X21hZ2ljKGNvbnN0IHN0cnVjdCBpbjZfYWRkciAqc2FkZHIsIGNvbnN0IHN0cnVj dCBpbjZfYWRkciAqZGFkZHIsCgkJX191MzIgbGVuLCBfX3U4IHByb3RvLCBfX3dzdW0gc3VtKTsK CnN0YXRpYyBpbmxpbmUgdW5zaWduZWQgYWRkMzJfd2l0aF9jYXJyeSh1bnNpZ25lZCBhLCB1bnNp Z25lZCBiKQp7Cglhc20oImFkZGwgJTIsJTBcblx0IgogICAgNTBiZjoJNzUgMGUgICAgICAgICAg ICAgICAgCWpuZSAgICA1MGNmIDx2eGxhbl9ncm9fcmVjZWl2ZSsweGVmPgogICAgNTBjMToJZWIg MzQgICAgICAgICAgICAgICAgCWptcCAgICA1MGY3IDx2eGxhbl9ncm9fcmVjZWl2ZSsweDExNz4K ICAgIDUwYzM6CTgwIDYwIDRhIGZlICAgICAgICAgIAlhbmRiICAgJDB4ZmUsMHg0YSglcmF4KQog ICAgNTBjNzoJNDggOGIgMDAgICAgICAgICAgICAgCW1vdiAgICAoJXJheCksJXJheAogICAgNTBj YToJNDggODUgYzAgICAgICAgICAgICAgCXRlc3QgICAlcmF4LCVyYXgKCglza2JfZ3JvX3Bvc3Rw dWxsX3Jjc3VtKHNrYiwgdmgsIHNpemVvZihzdHJ1Y3QgdnhsYW5oZHIpKTsKCglmbGFncyA9IHZo LT52eF9mbGFnczsKCglpZiAoKGZsYWdzICYgVlhMQU5fSEZfUkNPKSAmJiAodnMtPmZsYWdzICYg VlhMQU5fRl9SRU1DU1VNX1JYKSkgewogICAgNTBjZDoJNzQgMjggICAgICAgICAgICAgICAgCWpl ICAgICA1MGY3IDx2eGxhbl9ncm9fcmVjZWl2ZSsweDExNz4KICAgIDUwY2Y6CWY2IDQwIDRhIDAx ICAgICAgICAgIAl0ZXN0YiAgJDB4MSwweDRhKCVyYXgpCiAgICA1MGQzOgk3NCBmMiAgICAgICAg ICAgICAgICAJamUgICAgIDUwYzcgPHZ4bGFuX2dyb19yZWNlaXZlKzB4ZTc+CiAgICA1MGQ1Ogk0 OCA4OSBjYSAgICAgICAgICAgICAJbW92ICAgICVyY3gsJXJkeAogICAgNTBkODoJNDggMDMgOTAg ZDggMDAgMDAgMDAgCWFkZCAgICAweGQ4KCVyYXgpLCVyZHgKfTsKCnN0YXRpYyBpbmxpbmUgdm9p ZCBza2JfZ3JvX3JlbWNzdW1faW5pdChzdHJ1Y3QgZ3JvX3JlbWNzdW0gKmdyYykKewoJZ3JjLT5v ZmZzZXQgPSAwOwoJZ3JjLT5kZWx0YSA9IDA7CiAgICA1MGRmOgk4YiAzYSAgICAgICAgICAgICAg ICAJbW92ICAgICglcmR4KSwlZWRpCiAgICA1MGUxOgk0MSAzOSAzZiAgICAgICAgICAgICAJY21w ICAgICVlZGksKCVyMTUpCglfX3dzdW0gZGVsdGE7Cn07CgpzdGF0aWMgaW5saW5lIHZvaWQgc2ti X2dyb19yZW1jc3VtX2luaXQoc3RydWN0IGdyb19yZW1jc3VtICpncmMpCnsKCWdyYy0+b2Zmc2V0 ID0gMDsKICAgIDUwZTQ6CTc1IGRkICAgICAgICAgICAgICAgIAlqbmUgICAgNTBjMyA8dnhsYW5f Z3JvX3JlY2VpdmUrMHhlMz4KCXJldHVybiBza2ItPmxlbiAtIE5BUElfR1JPX0NCKHNrYiktPmRh dGFfb2Zmc2V0Owp9CgpzdGF0aWMgaW5saW5lIHZvaWQgc2tiX2dyb19wdWxsKHN0cnVjdCBza19i dWZmICpza2IsIHVuc2lnbmVkIGludCBsZW4pCnsKCU5BUElfR1JPX0NCKHNrYiktPmRhdGFfb2Zm c2V0ICs9IGxlbjsKICAgIDUwZTY6CThiIDcyIDA0ICAgICAgICAgICAgIAltb3YgICAgMHg0KCVy ZHgpLCVlc2kKCQkJZ290byBvdXQ7Cgl9CgoJc2tiX2dyb19wdWxsKHNrYiwgc2l6ZW9mKHN0cnVj dCB2eGxhbmhkcikpOyAvKiBwdWxsIHZ4bGFuIGhlYWRlciAqLwoKCWZvciAocCA9ICpoZWFkOyBw OyBwID0gcC0+bmV4dCkgewogICAgNTBlOToJNDEgMzkgNzcgMDQgICAgICAgICAgCWNtcCAgICAl ZXNpLDB4NCglcjE1KQogICAgNTBlZDoJNzUgZDQgICAgICAgICAgICAgICAgCWpuZSAgICA1MGMz IDx2eGxhbl9ncm9fcmVjZWl2ZSsweGUzPgogICAgNTBlZjoJNDggOGIgMDAgICAgICAgICAgICAg CW1vdiAgICAoJXJheCksJXJheAogICAgNTBmMjoJNDggODUgYzAgICAgICAgICAgICAgCXRlc3Qg ICAlcmF4LCVyYXgKCQkJY29udGludWU7CgoJCXZoMiA9IChzdHJ1Y3QgdnhsYW5oZHIgKikocC0+ ZGF0YSArIG9mZl92eCk7CgkJaWYgKHZoLT52eF9mbGFncyAhPSB2aDItPnZ4X2ZsYWdzIHx8CgkJ ICAgIHZoLT52eF92bmkgIT0gdmgyLT52eF92bmkpIHsKCQkJTkFQSV9HUk9fQ0IocCktPnNhbWVf ZmxvdyA9IDA7CiAgICA1MGY1Ogk3NSBkOCAgICAgICAgICAgICAgICAJam5lICAgIDUwY2YgPHZ4 bGFuX2dyb19yZWNlaXZlKzB4ZWY+CgkJCWdvdG8gb3V0OwoJfQoKCXNrYl9ncm9fcHVsbChza2Is IHNpemVvZihzdHJ1Y3QgdnhsYW5oZHIpKTsgLyogcHVsbCB2eGxhbiBoZWFkZXIgKi8KCglmb3Ig KHAgPSAqaGVhZDsgcDsgcCA9IHAtPm5leHQpIHsKICAgIDUwZjc6CTQ4IDg5IGRlICAgICAgICAg ICAgIAltb3YgICAgJXJieCwlcnNpCiAgICA1MGZhOgk0YyA4OSBjNyAgICAgICAgICAgICAJbW92 ICAgICVyOCwlcmRpCiAgICA1MGZkOgllOCAwMCAwMCAwMCAwMCAgICAgICAJY2FsbHEgIDUxMDIg PHZ4bGFuX2dyb19yZWNlaXZlKzB4MTIyPgoJCWlmICghTkFQSV9HUk9fQ0IocCktPnNhbWVfZmxv dykKICAgIDUxMDI6CTMxIGQyICAgICAgICAgICAgICAgIAl4b3IgICAgJWVkeCwlZWR4CiAgICA1 MTA0Ogk0OSA4OSBjNyAgICAgICAgICAgICAJbW92ICAgICVyYXgsJXIxNQoJCQljb250aW51ZTsK CgkJdmgyID0gKHN0cnVjdCB2eGxhbmhkciAqKShwLT5kYXRhICsgb2ZmX3Z4KTsKICAgIDUxMDc6 CTQ1IDg1IGY2ICAgICAgICAgICAgIAl0ZXN0ICAgJXIxNGQsJXIxNGQKICAgIDUxMGE6CTBmIDg0 IDNkIGZmIGZmIGZmICAgIAlqZSAgICAgNTA0ZCA8dnhsYW5fZ3JvX3JlY2VpdmUrMHg2ZD4KCQlp ZiAodmgtPnZ4X2ZsYWdzICE9IHZoMi0+dnhfZmxhZ3MgfHwKICAgIDUxMTA6CTQ0IDg5IGUxICAg ICAgICAgICAgIAltb3YgICAgJXIxMmQsJWVjeAogICAgNTExMzoJNDEgODMgYzQgMDIgICAgICAg ICAgCWFkZCAgICAkMHgyLCVyMTJkCiAgICA1MTE3Ogk0NCAzYiA2MyAzMCAgICAgICAgICAJY21w ICAgIDB4MzAoJXJieCksJXIxMmQKICAgIDUxMWI6CTBmIDg3IDdjIDAxIDAwIDAwICAgIAlqYSAg ICAgNTI5ZCA8dnhsYW5fZ3JvX3JlY2VpdmUrMHgyYmQ+CgkJCWdvdG8gb3V0OwoJfQoKCXNrYl9n cm9fcHVsbChza2IsIHNpemVvZihzdHJ1Y3QgdnhsYW5oZHIpKTsgLyogcHVsbCB2eGxhbiBoZWFk ZXIgKi8KCglmb3IgKHAgPSAqaGVhZDsgcDsgcCA9IHAtPm5leHQpIHsKICAgIDUxMjE6CTQ4IDAz IDRiIDI4ICAgICAgICAgIAlhZGQgICAgMHgyOCglcmJ4KSwlcmN4CiAgICA1MTI1OgkwZiBiNyAz MSAgICAgICAgICAgICAJbW92endsICglcmN4KSwlZXNpCgkJCU5BUElfR1JPX0NCKHApLT5zYW1l X2Zsb3cgPSAwOwoJCQljb250aW51ZTsKCQl9Cgl9CgoJcHAgPSBldGhfZ3JvX3JlY2VpdmUoaGVh ZCwgc2tiKTsKICAgIDUxMjg6CTQ0IDg5IGYwICAgICAgICAgICAgIAltb3YgICAgJXIxNGQsJWVh eAogICAgNTEyYjoJZjcgZDYgICAgICAgICAgICAgICAgCW5vdCAgICAlZXNpCiAgICA1MTJkOgkw MSBmMCAgICAgICAgICAgICAgICAJYWRkICAgICVlc2ksJWVheAogICAgNTEyZjoJODMgZDAgMDAg ICAgICAgICAgICAgCWFkYyAgICAkMHgwLCVlYXgKICAgIDUxMzI6CTg5IGM2ICAgICAgICAgICAg ICAgIAltb3YgICAgJWVheCwlZXNpCiAgICA1MTM0Ogk2NiAzMSBjMCAgICAgICAgICAgICAJeG9y ICAgICVheCwlYXgKCQkJCQkgICBzdHJ1Y3QgZ3JvX3JlbWNzdW0gKmdyYykKewoJdm9pZCAqcHRy OwoJc2l6ZV90IHBsZW4gPSBncmMtPm9mZnNldCArIHNpemVvZih1MTYpOwoKCWlmICghZ3JjLT5k ZWx0YSkKICAgIDUxMzc6CWMxIGU2IDEwICAgICAgICAgICAgIAlzaGwgICAgJDB4MTAsJWVzaQog ICAgNTEzYToJMDEgZjAgICAgICAgICAgICAgICAgCWFkZCAgICAlZXNpLCVlYXgKICAgIDUxM2M6 CTE1IGZmIGZmIDAwIDAwICAgICAgIAlhZGMgICAgJDB4ZmZmZiwlZWF4Cn0KCnN0YXRpYyBpbmxp bmUgdm9pZCAqc2tiX2dyb19oZWFkZXJfZmFzdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAoJCQkJCXVu c2lnbmVkIGludCBvZmZzZXQpCnsKCXJldHVybiBOQVBJX0dST19DQihza2IpLT5mcmFnMCArIG9m ZnNldDsKICAgIDUxNDE6CWY3IGQwICAgICAgICAgICAgICAgIAlub3QgICAgJWVheAoKCWlmICgh Z3JjLT5kZWx0YSkKCQlyZXR1cm47CgoJcHRyID0gc2tiX2dyb19oZWFkZXJfZmFzdChza2IsIGdy Yy0+b2Zmc2V0KTsKCWlmIChza2JfZ3JvX2hlYWRlcl9oYXJkKHNrYiwgZ3JjLT5vZmZzZXQgKyBz aXplb2YodTE2KSkpIHsKICAgIDUxNDM6CWMxIGU4IDEwICAgICAgICAgICAgIAlzaHIgICAgJDB4 MTAsJWVheAogICAgNTE0NjoJNjYgODkgMDEgICAgICAgICAgICAgCW1vdiAgICAlYXgsKCVyY3gp CiAgICA1MTQ5OgllOSBmZiBmZSBmZiBmZiAgICAgICAJam1wcSAgIDUwNGQgPHZ4bGFuX2dyb19y ZWNlaXZlKzB4NmQ+CiAgICA1MTRlOgk0MSA4YiA4NiAxYyAyMCAwMCAwMCAJbW92ICAgIDB4MjAx YyglcjE0KSwlZWF4CiAgICA1MTU1OglmNiBjNCAwNCAgICAgICAgICAgICAJdGVzdCAgICQweDQs JWFoCiAgICA1MTU4OgkwZiA4NCA0YiBmZiBmZiBmZiAgICAJamUgICAgIDUwYTkgPHZ4bGFuX2dy b19yZWNlaXZlKzB4Yzk+CiAgICA1MTVlOgkwZiBiNiBiMyA5MyAwMCAwMCAwMCAJbW92emJsIDB4 OTMoJXJieCksJWVzaQogKiB0aGUgbGFzdCBzdGVwIGJlZm9yZSBwdXR0aW5nIGEgY2hlY2tzdW0g aW50byBhIHBhY2tldC4KICogTWFrZSBzdXJlIG5vdCB0byBtaXggd2l0aCA2NGJpdCBjaGVja3N1 bXMuCiAqLwpzdGF0aWMgaW5saW5lIF9fc3VtMTYgY3N1bV9mb2xkKF9fd3N1bSBzdW0pCnsKCWFz bSgiICBhZGRsICUxLCUwXG4iCiAgICA1MTY1Ogk0MCBmNiBjNiAxMCAgICAgICAgICAJdGVzdCAg ICQweDEwLCVzaWwKICAgIDUxNjk6CTBmIDg1IDlhIDAxIDAwIDAwICAgIAlqbmUgICAgNTMwOSA8 dnhsYW5fZ3JvX3JlY2VpdmUrMHgzMjk+CiAgICA1MTZmOglmNiA0MyA0YSAwNCAgICAgICAgICAJ dGVzdGIgICQweDQsMHg0YSglcmJ4KQoJcmV0dXJuIGRlbHRhOwp9CgpzdGF0aWMgaW5saW5lIHZv aWQgcmVtY3N1bV91bmFkanVzdChfX3N1bTE2ICpwc3VtLCBfX3dzdW0gZGVsdGEpCnsKCSpwc3Vt ID0gY3N1bV9mb2xkKGNzdW1fc3ViKGRlbHRhLCAqcHN1bSkpOwogICAgNTE3MzoJMGYgODQgY2Mg ZmUgZmYgZmYgICAgCWplICAgICA1MDQ1IDx2eGxhbl9ncm9fcmVjZWl2ZSsweDY1PgogICAgNTE3 OToJNDkgNjMgNTcgMDQgICAgICAgICAgCW1vdnNscSAweDQoJXIxNSksJXJkeAogICAgNTE3ZDoJ NDEgODkgZDYgICAgICAgICAgICAgCW1vdiAgICAlZWR4LCVyMTRkCgoJc2tiX2dyb19wb3N0cHVs bF9yY3N1bShza2IsIHZoLCBzaXplb2Yoc3RydWN0IHZ4bGFuaGRyKSk7CgoJZmxhZ3MgPSB2aC0+ dnhfZmxhZ3M7CgoJaWYgKChmbGFncyAmIFZYTEFOX0hGX1JDTykgJiYgKHZzLT5mbGFncyAmIFZY TEFOX0ZfUkVNQ1NVTV9SWCkpIHsKICAgIDUxODA6CTQ4IGMxIGZhIDNmICAgICAgICAgIAlzYXIg ICAgJDB4M2YsJXJkeAogICAgNTE4NDoJNDEgODEgZTYgMDAgMDAgMDAgN2YgCWFuZCAgICAkMHg3 ZjAwMDAwMCwlcjE0ZAogICAgNTE4YjoJNDggODMgZTIgZjYgICAgICAgICAgCWFuZCAgICAkMHhm ZmZmZmZmZmZmZmZmZmY2LCVyZHgKCQkJCQkgIHN0cnVjdCBncm9fcmVtY3N1bSAqZ3JjLAoJCQkJ CSAgYm9vbCBub3BhcnRpYWwpCnsKCXNpemVfdCBzdGFydCwgb2Zmc2V0OwoKCWlmIChza2ItPnJl bWNzdW1fb2ZmbG9hZCkKICAgIDUxOGY6CTQxIDBmIGNlICAgICAgICAgICAgIAlic3dhcCAgJXIx NGQKICAgIDUxOTI6CTQ4IDgzIGMyIDEwICAgICAgICAgIAlhZGQgICAgJDB4MTAsJXJkeAogICAg NTE5NjoJNDUgMDEgZjYgICAgICAgICAgICAgCWFkZCAgICAlcjE0ZCwlcjE0ZAogICAgNTE5OToJ ZjYgYzQgMTAgICAgICAgICAgICAgCXRlc3QgICAkMHgxMCwlYWgKICAgIDUxOWM6CTBmIDg0IDc1 IDAxIDAwIDAwICAgIAlqZSAgICAgNTMxNyA8dnhsYW5fZ3JvX3JlY2VpdmUrMHgzMzc+CgkJcmV0 dXJuIHZoOwoKCWlmICghTkFQSV9HUk9fQ0Ioc2tiKS0+Y3N1bV92YWxpZCkKICAgIDUxYTI6CTQ1 IDg5IGYxICAgICAgICAgICAgIAltb3YgICAgJXIxNGQsJXI5ZAogICAgNTFhNToJNDkgMDEgZDEg ICAgICAgICAgICAgCWFkZCAgICAlcmR4LCVyOQogICAgNTFhODoJNDkgNjMgZDYgICAgICAgICAg ICAgCW1vdnNscSAlcjE0ZCwlcmR4Cglza2JfZ3JvX3Bvc3RwdWxsX3Jjc3VtKHNrYiwgdmgsIHNp emVvZihzdHJ1Y3QgdnhsYW5oZHIpKTsKCglmbGFncyA9IHZoLT52eF9mbGFnczsKCglpZiAoKGZs YWdzICYgVlhMQU5fSEZfUkNPKSAmJiAodnMtPmZsYWdzICYgVlhMQU5fRl9SRU1DU1VNX1JYKSkg ewoJCXZoID0gdnhsYW5fZ3JvX3JlbWNzdW0oc2tiLCBvZmZfdngsIHZoLCBzaXplb2Yoc3RydWN0 IHZ4bGFuaGRyKSwKICAgIDUxYWI6CTRkIDYzIGQxICAgICAgICAgICAgIAltb3ZzbHEgJXI5ZCwl cjEwCiNlbmRpZgp9CgpzdGF0aWMgaW5saW5lIHNpemVfdCB2eGxhbl9yY29fc3RhcnQoX19iZTMy IHZuaV9maWVsZCkKewoJcmV0dXJuIGJlMzJfdG9fY3B1KHZuaV9maWVsZCAmIFZYTEFOX1JDT19N QVNLKSA8PCBWWExBTl9SQ09fU0hJRlQ7CiAgICA1MWFlOgk0OSA4ZCA0MiAwMiAgICAgICAgICAJ bGVhICAgIDB4MiglcjEwKSwlcmF4Cn0KCnN0YXRpYyBpbmxpbmUgc2l6ZV90IHZ4bGFuX3Jjb19v ZmZzZXQoX19iZTMyIHZuaV9maWVsZCkKewoJcmV0dXJuICh2bmlfZmllbGQgJiBWWExBTl9SQ09f VURQKSA/CgkJb2Zmc2V0b2Yoc3RydWN0IHVkcGhkciwgY2hlY2spIDoKICAgIDUxYjI6CTQ4IDM5 IGQwICAgICAgICAgICAgIAljbXAgICAgJXJkeCwlcmF4CiNlbmRpZgp9CgpzdGF0aWMgaW5saW5l IHNpemVfdCB2eGxhbl9yY29fc3RhcnQoX19iZTMyIHZuaV9maWVsZCkKewoJcmV0dXJuIGJlMzJf dG9fY3B1KHZuaV9maWVsZCAmIFZYTEFOX1JDT19NQVNLKSA8PCBWWExBTl9SQ09fU0hJRlQ7CiAg ICA1MWI1Ogk0OCAwZiA0MiBjMiAgICAgICAgICAJY21vdmIgICVyZHgsJXJheAogICAgNTFiOToJ NDEgOGQgNDQgMDUgMDggICAgICAgCWxlYSAgICAweDgoJXIxMywlcmF4LDEpLCVlYXgKfQoKc3Rh dGljIGlubGluZSBzaXplX3QgdnhsYW5fcmNvX29mZnNldChfX2JlMzIgdm5pX2ZpZWxkKQp7Cgly ZXR1cm4gKHZuaV9maWVsZCAmIFZYTEFOX1JDT19VRFApID8KCQlvZmZzZXRvZihzdHJ1Y3QgdWRw aGRyLCBjaGVjaykgOgogICAgNTFiZToJM2IgNDMgMzAgICAgICAgICAgICAgCWNtcCAgICAweDMw KCVyYngpLCVlYXgKI2VuZGlmCn0KCnN0YXRpYyBpbmxpbmUgc2l6ZV90IHZ4bGFuX3Jjb19zdGFy dChfX2JlMzIgdm5pX2ZpZWxkKQp7CglyZXR1cm4gYmUzMl90b19jcHUodm5pX2ZpZWxkICYgVlhM QU5fUkNPX01BU0spIDw8IFZYTEFOX1JDT19TSElGVDsKICAgIDUxYzE6CTBmIDg2IDcyIDAxIDAw IDAwICAgIAlqYmUgICAgNTMzOSA8dnhsYW5fZ3JvX3JlY2VpdmUrMHgzNTk+CiAgICA1MWM3Ogk4 YiBiMyA4MCAwMCAwMCAwMCAgICAJbW92ICAgIDB4ODAoJXJieCksJWVzaQoJX193c3VtIGRlbHRh OwoJc2l6ZV90IHBsZW4gPSBoZHJsZW4gKyBtYXhfdChzaXplX3QsIG9mZnNldCArIHNpemVvZih1 MTYpLCBzdGFydCk7CgoJQlVHX09OKCFOQVBJX0dST19DQihza2IpLT5jc3VtX3ZhbGlkKTsKCglp ZiAoIW5vcGFydGlhbCkgewogICAgNTFjZDoJODkgZjIgICAgICAgICAgICAgICAgCW1vdiAgICAl ZXNpLCVlZHgKICAgIDUxY2Y6CTJiIDkzIDg0IDAwIDAwIDAwICAgIAlzdWIgICAgMHg4NCglcmJ4 KSwlZWR4CgoJaWYgKCFOQVBJX0dST19DQihza2IpLT5jc3VtX3ZhbGlkKQoJCXJldHVybiBOVUxM OwoKCXN0YXJ0ID0gdnhsYW5fcmNvX3N0YXJ0KHZuaV9maWVsZCk7CglvZmZzZXQgPSBzdGFydCAr IHZ4bGFuX3Jjb19vZmZzZXQodm5pX2ZpZWxkKTsKICAgIDUxZDU6CTM5IGQwICAgICAgICAgICAg ICAgIAljbXAgICAgJWVkeCwlZWF4CiAgICA1MWQ3OgkwZiA4NyA5YSAwMSAwMCAwMCAgICAJamEg ICAgIDUzNzcgPHZ4bGFuX2dyb19yZWNlaXZlKzB4Mzk3PgoJCQkJCSAgICBpbnQgc3RhcnQsIGlu dCBvZmZzZXQsCgkJCQkJICAgIHN0cnVjdCBncm9fcmVtY3N1bSAqZ3JjLAoJCQkJCSAgICBib29s IG5vcGFydGlhbCkKewoJX193c3VtIGRlbHRhOwoJc2l6ZV90IHBsZW4gPSBoZHJsZW4gKyBtYXhf dChzaXplX3QsIG9mZnNldCArIHNpemVvZih1MTYpLCBzdGFydCk7CiAgICA1MWRkOgk0OSA4OSBj ZiAgICAgICAgICAgICAJbW92ICAgICVyY3gsJXIxNQoJCU5BUElfR1JPX0NCKHNrYiktPmdyb19y ZW1jc3VtX3N0YXJ0ID0gb2ZmICsgaGRybGVuICsgc3RhcnQ7CgkJcmV0dXJuIHB0cjsKCX0KCglw dHIgPSBza2JfZ3JvX2hlYWRlcl9mYXN0KHNrYiwgb2ZmKTsKCWlmIChza2JfZ3JvX2hlYWRlcl9o YXJkKHNrYiwgb2ZmICsgcGxlbikpIHsKICAgIDUxZTA6CTRjIDAzIGJiIGQ4IDAwIDAwIDAwIAlh ZGQgICAgMHhkOCglcmJ4KSwlcjE1CiAgICA1MWU3Ogk0OCBjNyA0MyAyOCAwMCAwMCAwMCAJbW92 cSAgICQweDAsMHgyOCglcmJ4KQogICAgNTFlZToJMDAgCiAgICA1MWVmOgljNyA0MyAzMCAwMCAw MCAwMCAwMCAJbW92bCAgICQweDAsMHgzMCglcmJ4KQogICAgNTFmNjoJMGYgODQgYjQgMDEgMDAg MDAgICAgCWplICAgICA1M2IwIDx2eGxhbl9ncm9fcmVjZWl2ZSsweDNkMD4KICAgIDUxZmM6CTQ5 IDhkIDdmIDA4ICAgICAgICAgIAlsZWEgICAgMHg4KCVyMTUpLCVyZGkKCXJldHVybiBza2ItPmRh dGFfbGVuOwp9CgpzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGludCBza2JfaGVhZGxlbihjb25zdCBz dHJ1Y3Qgc2tfYnVmZiAqc2tiKQp7CglyZXR1cm4gc2tiLT5sZW4gLSBza2ItPmRhdGFfbGVuOwog ICAgNTIwMDoJMzEgZDIgICAgICAgICAgICAgICAgCXhvciAgICAlZWR4LCVlZHgKICAgIDUyMDI6 CTQ0IDg5IGY2ICAgICAgICAgICAgIAltb3YgICAgJXIxNGQsJWVzaQoJcmV0dXJuIHVubGlrZWx5 KGxlbiA+IHNrYi0+bGVuKSA/IE5VTEwgOiBfX3Bza2JfcHVsbChza2IsIGxlbik7Cn0KCnN0YXRp YyBpbmxpbmUgaW50IHBza2JfbWF5X3B1bGwoc3RydWN0IHNrX2J1ZmYgKnNrYiwgdW5zaWduZWQg aW50IGxlbikKewoJaWYgKGxpa2VseShsZW4gPD0gc2tiX2hlYWRsZW4oc2tiKSkpCiAgICA1MjA1 Ogk0YyA4OSA0NSBiOCAgICAgICAgICAJbW92ICAgICVyOCwtMHg0OCglcmJwKQogICAgNTIwOToJ NGMgODkgNGQgYzAgICAgICAgICAgCW1vdiAgICAlcjksLTB4NDAoJXJicCkKCQlwdHIgPSBza2Jf Z3JvX2hlYWRlcl9zbG93KHNrYiwgb2ZmICsgcGxlbiwgb2ZmKTsKCQlpZiAoIXB0cikKICAgIDUy MGQ6CTQ5IDAxIGZhICAgICAgICAgICAgIAlhZGQgICAgJXJkaSwlcjEwCiAgICA1MjEwOgk0OCA4 OSA0ZCBjOCAgICAgICAgICAJbW92ICAgICVyY3gsLTB4MzgoJXJicCkKICAgIDUyMTQ6CTQ0IDhi IDZiIDRjICAgICAgICAgIAltb3YgICAgMHg0YyglcmJ4KSwlcjEzZAoJCQkJCXVuc2lnbmVkIGlu dCBvZmZzZXQpCnsKCWlmICghcHNrYl9tYXlfcHVsbChza2IsIGhsZW4pKQoJCXJldHVybiBOVUxM OwoKCU5BUElfR1JPX0NCKHNrYiktPmZyYWcwID0gTlVMTDsKICAgIDUyMTg6CTRjIDg5IDU1IGQw ICAgICAgICAgIAltb3YgICAgJXIxMCwtMHgzMCglcmJwKQogICAgNTIxYzoJZTggMDAgMDAgMDAg MDAgICAgICAgCWNhbGxxICA1MjIxIDx2eGxhbl9ncm9fcmVjZWl2ZSsweDI0MT4KCU5BUElfR1JP X0NCKHNrYiktPmZyYWcwX2xlbiA9IDA7CiAgICA1MjIxOgk0YyA4YiA1NSBkMCAgICAgICAgICAJ bW92ICAgIC0weDMwKCVyYnApLCVyMTAKICAgIDUyMjU6CTRjIDhiIDRkIGMwICAgICAgICAgIAlt b3YgICAgLTB4NDAoJXJicCksJXI5Cgl9CgoJcHRyID0gc2tiX2dyb19oZWFkZXJfZmFzdChza2Is IG9mZik7CglpZiAoc2tiX2dyb19oZWFkZXJfaGFyZChza2IsIG9mZiArIHBsZW4pKSB7CgkJcHRy ID0gc2tiX2dyb19oZWFkZXJfc2xvdyhza2IsIG9mZiArIHBsZW4sIG9mZik7CgkJaWYgKCFwdHIp CiAgICA1MjI5OglmNyBkMCAgICAgICAgICAgICAgICAJbm90ICAgICVlYXgKICAgIDUyMmI6CTQx IDAxIGM1ICAgICAgICAgICAgIAlhZGQgICAgJWVheCwlcjEzZAoJCQlyZXR1cm4gTlVMTDsKCX0K CglkZWx0YSA9IHJlbWNzdW1fYWRqdXN0KHB0ciArIGhkcmxlbiwgTkFQSV9HUk9fQ0Ioc2tiKS0+ Y3N1bSwKICAgIDUyMmU6CTQxIDgzIGQ1IDAwICAgICAgICAgIAlhZGMgICAgJDB4MCwlcjEzZAp7 CglfX3N1bTE2ICpwc3VtID0gKF9fc3VtMTYgKikocHRyICsgb2Zmc2V0KTsKCV9fd3N1bSBkZWx0 YTsKCgkvKiBTdWJ0cmFjdCBvdXQgY2hlY2tzdW0gdXAgdG8gc3RhcnQgKi8KCWNzdW0gPSBjc3Vt X3N1Yihjc3VtLCBjc3VtX3BhcnRpYWwocHRyLCBzdGFydCwgMCkpOwogICAgNTIzMjoJNDQgODkg ZTggICAgICAgICAgICAgCW1vdiAgICAlcjEzZCwlZWF4CiAgICA1MjM1Ogk2NiA0NSAzMSBlZCAg ICAgICAgICAJeG9yICAgICVyMTN3LCVyMTN3CiAgICA1MjM5Ogk0OCA4YiA0ZCBjOCAgICAgICAg ICAJbW92ICAgIC0weDM4KCVyYnApLCVyY3gKfQoKc3RhdGljIGlubGluZSBfX3dzdW0gcmVtY3N1 bV9hZGp1c3Qodm9pZCAqcHRyLCBfX3dzdW0gY3N1bSwKCQkJCSAgICBpbnQgc3RhcnQsIGludCBv ZmZzZXQpCnsKCV9fc3VtMTYgKnBzdW0gPSAoX19zdW0xNiAqKShwdHIgKyBvZmZzZXQpOwogICAg NTIzZDoJNDEgMGYgYjcgMTIgICAgICAgICAgCW1vdnp3bCAoJXIxMCksJWVkeAogICAgNTI0MToJ YzEgZTAgMTAgICAgICAgICAgICAgCXNobCAgICAkMHgxMCwlZWF4CiAgICA1MjQ0Ogk0NSAwMSBj YyAgICAgICAgICAgICAJYWRkICAgICVyOWQsJXIxMmQKICAgIDUyNDc6CTQxIDAxIGM1ICAgICAg ICAgICAgIAlhZGQgICAgJWVheCwlcjEzZAogICAgNTI0YToJNDEgODEgZDUgZmYgZmYgMDAgMDAg CWFkYyAgICAkMHhmZmZmLCVyMTNkCmNzdW1faXB2Nl9tYWdpYyhjb25zdCBzdHJ1Y3QgaW42X2Fk ZHIgKnNhZGRyLCBjb25zdCBzdHJ1Y3QgaW42X2FkZHIgKmRhZGRyLAoJCV9fdTMyIGxlbiwgX191 OCBwcm90bywgX193c3VtIHN1bSk7CgpzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGFkZDMyX3dpdGhf Y2FycnkodW5zaWduZWQgYSwgdW5zaWduZWQgYikKewoJYXNtKCJhZGRsICUyLCUwXG5cdCIKICAg IDUyNTE6CTQxIGY3IGQ1ICAgICAgICAgICAgIAlub3QgICAgJXIxM2QKICAgIDUyNTQ6CTRjIDhi IDQ1IGI4ICAgICAgICAgIAltb3YgICAgLTB4NDgoJXJicCksJXI4CgkJCSAgICAgICBzdGFydCwg b2Zmc2V0KTsKCgkvKiBBZGp1c3Qgc2tiLT5jc3VtIHNpbmNlIHdlIGNoYW5nZWQgdGhlIHBhY2tl dCAqLwoJTkFQSV9HUk9fQ0Ioc2tiKS0+Y3N1bSA9IGNzdW1fYWRkKE5BUElfR1JPX0NCKHNrYikt PmNzdW0sIGRlbHRhKTsKCglncmMtPm9mZnNldCA9IG9mZiArIGhkcmxlbiArIG9mZnNldDsKICAg IDUyNTg6CTQxIGMxIGVkIDEwICAgICAgICAgIAlzaHIgICAgJDB4MTAsJXIxM2QKICAgIDUyNWM6 CTY2IDQ1IDg5IDJhICAgICAgICAgIAltb3YgICAgJXIxM3csKCVyMTApCiAgICA1MjYwOgk0NCA4 OSBlOCAgICAgICAgICAgICAJbW92ICAgICVyMTNkLCVlYXgKc3RhdGljIGlubGluZSBfX3N1bTE2 IGNzdW1fZm9sZChfX3dzdW0gc3VtKQp7Cglhc20oIiAgYWRkbCAlMSwlMFxuIgoJICAgICIgIGFk Y2wgJDB4ZmZmZiwlMCIKCSAgICA6ICI9ciIgKHN1bSkKCSAgICA6ICJyIiAoKF9fZm9yY2UgdTMy KXN1bSA8PCAxNiksCiAgICA1MjYzOgk0ZCA2MyBlYyAgICAgICAgICAgICAJbW92c2xxICVyMTJk LCVyMTMKCSAgICAgICIwIiAoKF9fZm9yY2UgdTMyKXN1bSAmIDB4ZmZmZjAwMDApKTsKICAgIDUy NjY6CWY3IGQyICAgICAgICAgICAgICAgIAlub3QgICAgJWVkeAogICAgNTI2ODoJNDkgODMgYzUg MDIgICAgICAgICAgCWFkZCAgICAkMHgyLCVyMTMKCQl2aCA9IHZ4bGFuX2dyb19yZW1jc3VtKHNr Yiwgb2ZmX3Z4LCB2aCwgc2l6ZW9mKHN0cnVjdCB2eGxhbmhkciksCgkJCQkgICAgICAgdmgtPnZ4 X3ZuaSwgJmdyYywKCQkJCSAgICAgICAhISh2cy0+ZmxhZ3MgJgoJCQkJCSAgVlhMQU5fRl9SRU1D U1VNX05PUEFSVElBTCkpOwoKCQlpZiAoIXZoKQogICAgNTI2YzoJODAgOGIgOTMgMDAgMDAgMDAg MTAgCW9yYiAgICAkMHgxMCwweDkzKCVyYngpCnN0YXRpYyBpbmxpbmUgX19zdW0xNiBjc3VtX2Zv bGQoX193c3VtIHN1bSkKewoJYXNtKCIgIGFkZGwgJTEsJTBcbiIKCSAgICAiICBhZGNsICQweGZm ZmYsJTAiCgkgICAgOiAiPXIiIChzdW0pCgkgICAgOiAiciIgKChfX2ZvcmNlIHUzMilzdW0gPDwg MTYpLAogICAgNTI3MzoJMDEgZDAgICAgICAgICAgICAgICAgCWFkZCAgICAlZWR4LCVlYXgKICAg IDUyNzU6CTgzIGQwIDAwICAgICAgICAgICAgIAlhZGMgICAgJDB4MCwlZWF4CiAqIHRoZSBsYXN0 IHN0ZXAgYmVmb3JlIHB1dHRpbmcgYSBjaGVja3N1bSBpbnRvIGEgcGFja2V0LgogKiBNYWtlIHN1 cmUgbm90IHRvIG1peCB3aXRoIDY0Yml0IGNoZWNrc3Vtcy4KICovCnN0YXRpYyBpbmxpbmUgX19z dW0xNiBjc3VtX2ZvbGQoX193c3VtIHN1bSkKewoJYXNtKCIgIGFkZGwgJTEsJTBcbiIKICAgIDUy Nzg6CTQxIDg5IGM2ICAgICAgICAgICAgIAltb3YgICAgJWVheCwlcjE0ZAogICAgNTI3YjoJOGIg NDMgNGMgICAgICAgICAgICAgCW1vdiAgICAweDRjKCVyYngpLCVlYXgKICAgIDUyN2U6CTQ0IDAx IGYwICAgICAgICAgICAgIAlhZGQgICAgJXIxNGQsJWVheApjc3VtX2lwdjZfbWFnaWMoY29uc3Qg c3RydWN0IGluNl9hZGRyICpzYWRkciwgY29uc3Qgc3RydWN0IGluNl9hZGRyICpkYWRkciwKCQlf X3UzMiBsZW4sIF9fdTggcHJvdG8sIF9fd3N1bSBzdW0pOwoKc3RhdGljIGlubGluZSB1bnNpZ25l ZCBhZGQzMl93aXRoX2NhcnJ5KHVuc2lnbmVkIGEsIHVuc2lnbmVkIGIpCnsKCWFzbSgiYWRkbCAl MiwlMFxuXHQiCiAgICA1MjgxOgk4MyBkMCAwMCAgICAgICAgICAgICAJYWRjICAgICQweDAsJWVh eAogICAgNTI4NDoJNGQgODUgZmYgICAgICAgICAgICAgCXRlc3QgICAlcjE1LCVyMTUKICAgIDUy ODc6CTg5IDQzIDRjICAgICAgICAgICAgIAltb3YgICAgJWVheCwweDRjKCVyYngpCiAgICA1Mjhh OgkwZiA4NSAyNSBmZSBmZiBmZiAgICAJam5lICAgIDUwYjUgPHZ4bGFuX2dyb19yZWNlaXZlKzB4 ZDU+CiAgICA1MjkwOgliYSAwMSAwMCAwMCAwMCAgICAgICAJbW92ICAgICQweDEsJWVkeAogICAg NTI5NToJNDUgMzEgZmYgICAgICAgICAgICAgCXhvciAgICAlcjE1ZCwlcjE1ZAogICAgNTI5ODoJ ZTkgNmEgZmUgZmYgZmYgICAgICAgCWptcHEgICA1MTA3IDx2eGxhbl9ncm9fcmVjZWl2ZSsweDEy Nz4KCW9mZnNldCA9IHN0YXJ0ICsgdnhsYW5fcmNvX29mZnNldCh2bmlfZmllbGQpOwoKCXZoID0g c2tiX2dyb19yZW1jc3VtX3Byb2Nlc3Moc2tiLCAodm9pZCAqKXZoLCBvZmYsIGhkcmxlbiwKCQkJ CSAgICAgc3RhcnQsIG9mZnNldCwgZ3JjLCBub3BhcnRpYWwpOwoKCXNrYi0+cmVtY3N1bV9vZmZs b2FkID0gMTsKICAgIDUyOWQ6CThiIGIzIDgwIDAwIDAwIDAwICAgIAltb3YgICAgMHg4MCglcmJ4 KSwlZXNpCiAgICA1MmEzOgk4OSBmMCAgICAgICAgICAgICAgICAJbW92ICAgICVlc2ksJWVheAog ICAgNTJhNToJMmIgODMgODQgMDAgMDAgMDAgICAgCXN1YiAgICAweDg0KCVyYngpLCVlYXgKICAg IDUyYWI6CTQxIDM5IGM1ICAgICAgICAgICAgIAljbXAgICAgJWVheCwlcjEzZAogICAgNTJhZToJ MGYgODcgOTEgMDAgMDAgMDAgICAgCWphICAgICA1MzQ1IDx2eGxhbl9ncm9fcmVjZWl2ZSsweDM2 NT4KCQl2aCA9IHZ4bGFuX2dyb19yZW1jc3VtKHNrYiwgb2ZmX3Z4LCB2aCwgc2l6ZW9mKHN0cnVj dCB2eGxhbmhkciksCgkJCQkgICAgICAgdmgtPnZ4X3ZuaSwgJmdyYywKCQkJCSAgICAgICAhISh2 cy0+ZmxhZ3MgJgoJCQkJCSAgVlhMQU5fRl9SRU1DU1VNX05PUEFSVElBTCkpOwoKCQlpZiAoIXZo KQogICAgNTJiNDoJNDggMDMgOGIgZDggMDAgMDAgMDAgCWFkZCAgICAweGQ4KCVyYngpLCVyY3gK ICAgIDUyYmI6CTQ4IGM3IDQzIDI4IDAwIDAwIDAwIAltb3ZxICAgJDB4MCwweDI4KCVyYngpCiAg ICA1MmMyOgkwMCAKICAgIDUyYzM6CWM3IDQzIDMwIDAwIDAwIDAwIDAwIAltb3ZsICAgJDB4MCww eDMwKCVyYngpCgpzdGF0aWMgc3RydWN0IHNrX2J1ZmYgKip2eGxhbl9ncm9fcmVjZWl2ZShzdHJ1 Y3Qgc29jayAqc2ssCgkJCQkJICBzdHJ1Y3Qgc2tfYnVmZiAqKmhlYWQsCgkJCQkJICBzdHJ1Y3Qg c2tfYnVmZiAqc2tiKQp7CglzdHJ1Y3Qgc2tfYnVmZiAqcCwgKipwcCA9IE5VTEw7CiAgICA1MmNh OgkwZiA4NSA1NSBmZSBmZiBmZiAgICAJam5lICAgIDUxMjUgPHZ4bGFuX2dyb19yZWNlaXZlKzB4 MTQ1PgogICAgNTJkMDoJZTkgNzggZmQgZmYgZmYgICAgICAgCWptcHEgICA1MDRkIDx2eGxhbl9n cm9fcmVjZWl2ZSsweDZkPgoJcmV0dXJuIHNrYi0+ZGF0YV9sZW47Cn0KCnN0YXRpYyBpbmxpbmUg dW5zaWduZWQgaW50IHNrYl9oZWFkbGVuKGNvbnN0IHN0cnVjdCBza19idWZmICpza2IpCnsKCXJl dHVybiBza2ItPmxlbiAtIHNrYi0+ZGF0YV9sZW47CiAgICA1MmQ1Ogk0MSAzOSBkNCAgICAgICAg ICAgICAJY21wICAgICVlZHgsJXIxMmQKICAgIDUyZDg6CTQ4IDg5IDc1IGM4ICAgICAgICAgIAlt b3YgICAgJXJzaSwtMHgzOCglcmJwKQoJcmV0dXJuIHVubGlrZWx5KGxlbiA+IHNrYi0+bGVuKSA/ IE5VTEwgOiBfX3Bza2JfcHVsbChza2IsIGxlbik7Cn0KCnN0YXRpYyBpbmxpbmUgaW50IHBza2Jf bWF5X3B1bGwoc3RydWN0IHNrX2J1ZmYgKnNrYiwgdW5zaWduZWQgaW50IGxlbikKewoJaWYgKGxp a2VseShsZW4gPD0gc2tiX2hlYWRsZW4oc2tiKSkpCiAgICA1MmRjOgk0OCA4OSA0ZCBkMCAgICAg ICAgICAJbW92ICAgICVyY3gsLTB4MzAoJXJicCkKICAgIDUyZTA6CTBmIDg3IDVmIGZkIGZmIGZm ICAgIAlqYSAgICAgNTA0NSA8dnhsYW5fZ3JvX3JlY2VpdmUrMHg2NT4KCQlyZXR1cm47CgoJcHRy ID0gc2tiX2dyb19oZWFkZXJfZmFzdChza2IsIGdyYy0+b2Zmc2V0KTsKCWlmIChza2JfZ3JvX2hl YWRlcl9oYXJkKHNrYiwgZ3JjLT5vZmZzZXQgKyBzaXplb2YodTE2KSkpIHsKCQlwdHIgPSBza2Jf Z3JvX2hlYWRlcl9zbG93KHNrYiwgcGxlbiwgZ3JjLT5vZmZzZXQpOwoJCWlmICghcHRyKQogICAg NTJlNjoJNDQgODkgZTYgICAgICAgICAgICAgCW1vdiAgICAlcjEyZCwlZXNpCiAgICA1MmU5Ogk0 OCA4OSBkZiAgICAgICAgICAgICAJbW92ICAgICVyYngsJXJkaQoJCQkJCXVuc2lnbmVkIGludCBv ZmZzZXQpCnsKCWlmICghcHNrYl9tYXlfcHVsbChza2IsIGhsZW4pKQoJCXJldHVybiBOVUxMOwoK CU5BUElfR1JPX0NCKHNrYiktPmZyYWcwID0gTlVMTDsKICAgIDUyZWM6CTI5IGM2ICAgICAgICAg ICAgICAgIAlzdWIgICAgJWVheCwlZXNpCiAgICA1MmVlOgllOCAwMCAwMCAwMCAwMCAgICAgICAJ Y2FsbHEgIDUyZjMgPHZ4bGFuX2dyb19yZWNlaXZlKzB4MzEzPgoJTkFQSV9HUk9fQ0Ioc2tiKS0+ ZnJhZzBfbGVuID0gMDsKICAgIDUyZjM6CTQ4IDg1IGMwICAgICAgICAgICAgIAl0ZXN0ICAgJXJh eCwlcmF4CiAgICA1MmY2Ogk0OCA4YiA0ZCBkMCAgICAgICAgICAJbW92ICAgIC0weDMwKCVyYnAp LCVyY3gKCQlyZXR1cm47CgoJcHRyID0gc2tiX2dyb19oZWFkZXJfZmFzdChza2IsIGdyYy0+b2Zm c2V0KTsKCWlmIChza2JfZ3JvX2hlYWRlcl9oYXJkKHNrYiwgZ3JjLT5vZmZzZXQgKyBzaXplb2Yo dTE2KSkpIHsKCQlwdHIgPSBza2JfZ3JvX2hlYWRlcl9zbG93KHNrYiwgcGxlbiwgZ3JjLT5vZmZz ZXQpOwoJCWlmICghcHRyKQogICAgNTJmYToJNGMgOGIgNDUgYzggICAgICAgICAgCW1vdiAgICAt MHgzOCglcmJwKSwlcjgKICAgIDUyZmU6CTBmIDg0IDQxIGZkIGZmIGZmICAgIAlqZSAgICAgNTA0 NSA8dnhsYW5fZ3JvX3JlY2VpdmUrMHg2NT4KICAgIDUzMDQ6CWU5IDIxIGZkIGZmIGZmICAgICAg IAlqbXBxICAgNTAyYSA8dnhsYW5fZ3JvX3JlY2VpdmUrMHg0YT4KCQlyZXR1cm4gMTsKCWlmICh1 bmxpa2VseShsZW4gPiBza2ItPmxlbikpCiAgICA1MzA5Ogk0ZCA4NSBmZiAgICAgICAgICAgICAJ dGVzdCAgICVyMTUsJXIxNQogICAgNTMwYzoJMGYgODUgOTcgZmQgZmYgZmYgICAgCWpuZSAgICA1 MGE5IDx2eGxhbl9ncm9fcmVjZWl2ZSsweGM5PgogICAgNTMxMjoJZTkgMmUgZmQgZmYgZmYgICAg ICAgCWptcHEgICA1MDQ1IDx2eGxhbl9ncm9fcmVjZWl2ZSsweDY1PgoJCXJldHVybiAwOwoJcmV0 dXJuIF9fcHNrYl9wdWxsX3RhaWwoc2tiLCBsZW4gLSBza2JfaGVhZGxlbihza2IpKSAhPSBOVUxM OwogICAgNTMxNzoJNDcgOGQgNmMgMzUgMDggICAgICAgCWxlYSAgICAweDgoJXIxMywlcjE0LDEp LCVyMTNkCiAgICA1MzFjOgk4MyBjZSAxMCAgICAgICAgICAgICAJb3IgICAgICQweDEwLCVlc2kK ICAgIDUzMWY6CTRkIDg1IGZmICAgICAgICAgICAgIAl0ZXN0ICAgJXIxNSwlcjE1CiAgICA1MzIy Ogk0MCA4OCBiMyA5MyAwMCAwMCAwMCAJbW92ICAgICVzaWwsMHg5MyglcmJ4KQp9CgpzdGF0aWMg aW5saW5lIHZvaWQgKnNrYl9ncm9faGVhZGVyX3Nsb3coc3RydWN0IHNrX2J1ZmYgKnNrYiwgdW5z aWduZWQgaW50IGhsZW4sCgkJCQkJdW5zaWduZWQgaW50IG9mZnNldCkKewoJaWYgKCFwc2tiX21h eV9wdWxsKHNrYiwgaGxlbikpCiAgICA1MzI5Ogk2NiA0NCA4OSA2YiAzZSAgICAgICAJbW92ICAg ICVyMTN3LDB4M2UoJXJieCkKICAgIDUzMmU6CTBmIDg1IDc1IGZkIGZmIGZmICAgIAlqbmUgICAg NTBhOSA8dnhsYW5fZ3JvX3JlY2VpdmUrMHhjOT4KICAgIDUzMzQ6CWU5IDBjIGZkIGZmIGZmICAg ICAgIAlqbXBxICAgNTA0NSA8dnhsYW5fZ3JvX3JlY2VpdmUrMHg2NT4KCQl2aCA9IHZ4bGFuX2dy b19yZW1jc3VtKHNrYiwgb2ZmX3Z4LCB2aCwgc2l6ZW9mKHN0cnVjdCB2eGxhbmhkciksCgkJCQkg ICAgICAgdmgtPnZ4X3ZuaSwgJmdyYywKCQkJCSAgICAgICAhISh2cy0+ZmxhZ3MgJgoJCQkJCSAg VlhMQU5fRl9SRU1DU1VNX05PUEFSVElBTCkpOwoKCQlpZiAoIXZoKQogICAgNTMzOToJNDkgODkg Y2YgICAgICAgICAgICAgCW1vdiAgICAlcmN4LCVyMTUKICAgIDUzM2M6CTRjIDAzIDdiIDI4ICAg ICAgICAgIAlhZGQgICAgMHgyOCglcmJ4KSwlcjE1CiAgICA1MzQwOgllOSBiNyBmZSBmZiBmZiAg ICAgICAJam1wcSAgIDUxZmMgPHZ4bGFuX2dyb19yZWNlaXZlKzB4MjFjPgogICAgNTM0NToJNDQg MzkgZWUgICAgICAgICAgICAgCWNtcCAgICAlcjEzZCwlZXNpCglzaXplX3QgcGxlbiA9IGhkcmxl biArIG1heF90KHNpemVfdCwgb2Zmc2V0ICsgc2l6ZW9mKHUxNiksIHN0YXJ0KTsKCglCVUdfT04o IU5BUElfR1JPX0NCKHNrYiktPmNzdW1fdmFsaWQpOwoKCWlmICghbm9wYXJ0aWFsKSB7CgkJTkFQ SV9HUk9fQ0Ioc2tiKS0+Z3JvX3JlbWNzdW1fc3RhcnQgPSBvZmYgKyBoZHJsZW4gKyBzdGFydDsK ICAgIDUzNDg6CTQ4IDg5IDRkIGM4ICAgICAgICAgIAltb3YgICAgJXJjeCwtMHgzOCglcmJwKQoJ b2Zmc2V0ID0gc3RhcnQgKyB2eGxhbl9yY29fb2Zmc2V0KHZuaV9maWVsZCk7CgoJdmggPSBza2Jf Z3JvX3JlbWNzdW1fcHJvY2Vzcyhza2IsICh2b2lkICopdmgsIG9mZiwgaGRybGVuLAoJCQkJICAg ICBzdGFydCwgb2Zmc2V0LCBncmMsIG5vcGFydGlhbCk7CgoJc2tiLT5yZW1jc3VtX29mZmxvYWQg PSAxOwogICAgNTM0YzoJMGYgODIgZmIgZmMgZmYgZmYgICAgCWpiICAgICA1MDRkIDx2eGxhbl9n cm9fcmVjZWl2ZSsweDZkPgogICAgNTM1MjoJNDQgODkgZWUgICAgICAgICAgICAgCW1vdiAgICAl cjEzZCwlZXNpCiAgICA1MzU1Ogk0OCA4OSBkZiAgICAgICAgICAgICAJbW92ICAgICVyYngsJXJk aQogICAgNTM1ODoJODkgNTUgZDAgICAgICAgICAgICAgCW1vdiAgICAlZWR4LC0weDMwKCVyYnAp CiAgICA1MzViOgkyOSBjNiAgICAgICAgICAgICAgICAJc3ViICAgICVlYXgsJWVzaQogICAgNTM1 ZDoJZTggMDAgMDAgMDAgMDAgICAgICAgCWNhbGxxICA1MzYyIDx2eGxhbl9ncm9fcmVjZWl2ZSsw eDM4Mj4KCQl2aCA9IHZ4bGFuX2dyb19yZW1jc3VtKHNrYiwgb2ZmX3Z4LCB2aCwgc2l6ZW9mKHN0 cnVjdCB2eGxhbmhkciksCgkJCQkgICAgICAgdmgtPnZ4X3ZuaSwgJmdyYywKCQkJCSAgICAgICAh ISh2cy0+ZmxhZ3MgJgoJCQkJCSAgVlhMQU5fRl9SRU1DU1VNX05PUEFSVElBTCkpOwoKCQlpZiAo IXZoKQogICAgNTM2MjoJNDggODUgYzAgICAgICAgICAgICAgCXRlc3QgICAlcmF4LCVyYXgKICAg IDUzNjU6CThiIDU1IGQwICAgICAgICAgICAgIAltb3YgICAgLTB4MzAoJXJicCksJWVkeAogICAg NTM2ODoJNDggOGIgNGQgYzggICAgICAgICAgCW1vdiAgICAtMHgzOCglcmJwKSwlcmN4Cn0KCnN0 YXRpYyBpbmxpbmUgdm9pZCAqc2tiX2dyb19oZWFkZXJfZmFzdChzdHJ1Y3Qgc2tfYnVmZiAqc2ti LAoJCQkJCXVuc2lnbmVkIGludCBvZmZzZXQpCnsKCXJldHVybiBOQVBJX0dST19DQihza2IpLT5m cmFnMCArIG9mZnNldDsKICAgIDUzNmM6CTBmIDg0IGRiIGZjIGZmIGZmICAgIAlqZSAgICAgNTA0 ZCA8dnhsYW5fZ3JvX3JlY2VpdmUrMHg2ZD4KICAgIDUzNzI6CWU5IDNkIGZmIGZmIGZmICAgICAg IAlqbXBxICAgNTJiNCA8dnhsYW5fZ3JvX3JlY2VpdmUrMHgyZDQ+CgpzdGF0aWMgaW5saW5lIGlu dCBwc2tiX21heV9wdWxsKHN0cnVjdCBza19idWZmICpza2IsIHVuc2lnbmVkIGludCBsZW4pCnsK CWlmIChsaWtlbHkobGVuIDw9IHNrYl9oZWFkbGVuKHNrYikpKQoJCXJldHVybiAxOwoJaWYgKHVu bGlrZWx5KGxlbiA+IHNrYi0+bGVuKSkKICAgIDUzNzc6CTM5IGYwICAgICAgICAgICAgICAgIAlj bXAgICAgJWVzaSwlZWF4CiAgICA1Mzc5Ogk3NyAzNSAgICAgICAgICAgICAgICAJamEgICAgIDUz YjAgPHZ4bGFuX2dyb19yZWNlaXZlKzB4M2QwPgogICAgNTM3YjoJMjkgZDAgICAgICAgICAgICAg ICAgCXN1YiAgICAlZWR4LCVlYXgKICAgIDUzN2Q6CTQ4IDg5IGRmICAgICAgICAgICAgIAltb3Yg ICAgJXJieCwlcmRpCiAgICA1MzgwOgk0YyA4OSA0NSBiOCAgICAgICAgICAJbW92ICAgICVyOCwt MHg0OCglcmJwKQoJCXJldHVybiAwOwoJcmV0dXJuIF9fcHNrYl9wdWxsX3RhaWwoc2tiLCBsZW4g LSBza2JfaGVhZGxlbihza2IpKSAhPSBOVUxMOwogICAgNTM4NDoJODkgYzYgICAgICAgICAgICAg ICAgCW1vdiAgICAlZWF4LCVlc2kKICAgIDUzODY6CTRjIDg5IDU1IGMwICAgICAgICAgIAltb3Yg ICAgJXIxMCwtMHg0MCglcmJwKQogICAgNTM4YToJNGMgODkgNGQgYzggICAgICAgICAgCW1vdiAg ICAlcjksLTB4MzgoJXJicCkKICAgIDUzOGU6CTQ4IDg5IDRkIGQwICAgICAgICAgIAltb3YgICAg JXJjeCwtMHgzMCglcmJwKQp9CgpzdGF0aWMgaW5saW5lIHZvaWQgKnNrYl9ncm9faGVhZGVyX3Ns b3coc3RydWN0IHNrX2J1ZmYgKnNrYiwgdW5zaWduZWQgaW50IGhsZW4sCgkJCQkJdW5zaWduZWQg aW50IG9mZnNldCkKewoJaWYgKCFwc2tiX21heV9wdWxsKHNrYiwgaGxlbikpCiAgICA1MzkyOgll OCAwMCAwMCAwMCAwMCAgICAgICAJY2FsbHEgIDUzOTcgPHZ4bGFuX2dyb19yZWNlaXZlKzB4M2I3 PgogICAgNTM5NzoJNDggODUgYzAgICAgICAgICAgICAgCXRlc3QgICAlcmF4LCVyYXgKICAgIDUz OWE6CTQ4IDhiIDRkIGQwICAgICAgICAgIAltb3YgICAgLTB4MzAoJXJicCksJXJjeAogICAgNTM5 ZToJNGMgOGIgNGQgYzggICAgICAgICAgCW1vdiAgICAtMHgzOCglcmJwKSwlcjkKICAgIDUzYTI6 CTRjIDhiIDU1IGMwICAgICAgICAgIAltb3YgICAgLTB4NDAoJXJicCksJXIxMAogICAgNTNhNjoJ NGMgOGIgNDUgYjggICAgICAgICAgCW1vdiAgICAtMHg0OCglcmJwKSwlcjgKCnN0YXRpYyBpbmxp bmUgaW50IHBza2JfbWF5X3B1bGwoc3RydWN0IHNrX2J1ZmYgKnNrYiwgdW5zaWduZWQgaW50IGxl bikKewoJaWYgKGxpa2VseShsZW4gPD0gc2tiX2hlYWRsZW4oc2tiKSkpCgkJcmV0dXJuIDE7Cglp ZiAodW5saWtlbHkobGVuID4gc2tiLT5sZW4pKQogICAgNTNhYToJMGYgODUgMmQgZmUgZmYgZmYg ICAgCWpuZSAgICA1MWRkIDx2eGxhbl9ncm9fcmVjZWl2ZSsweDFmZD4KCQlyZXR1cm4gMDsKCXJl dHVybiBfX3Bza2JfcHVsbF90YWlsKHNrYiwgbGVuIC0gc2tiX2hlYWRsZW4oc2tiKSkgIT0gTlVM TDsKICAgIDUzYjA6CTgwIDhiIDkzIDAwIDAwIDAwIDEwIAlvcmIgICAgJDB4MTAsMHg5MyglcmJ4 KQogICAgNTNiNzoJYmEgMDEgMDAgMDAgMDAgICAgICAgCW1vdiAgICAkMHgxLCVlZHgKICAgIDUz YmM6CTQ1IDMxIGZmICAgICAgICAgICAgIAl4b3IgICAgJXIxNWQsJXIxNWQKICAgIDUzYmY6CWU5 IDg5IGZjIGZmIGZmICAgICAgIAlqbXBxICAgNTA0ZCA8dnhsYW5fZ3JvX3JlY2VpdmUrMHg2ZD4K ICAgIDUzYzQ6CTY2IDkwICAgICAgICAgICAgICAgIAl4Y2hnICAgJWF4LCVheAogICAgNTNjNjoJ NjYgMmUgMGYgMWYgODQgMDAgMDAgCW5vcHcgICAlY3M6MHgwKCVyYXgsJXJheCwxKQogICAgNTNj ZDoJMDAgMDAgMDAgCgowMDAwMDAwMDAwMDA1M2QwIDx2eGxhbl9yY3Y+OgogICAgNTNkMDoJZTgg MDAgMDAgMDAgMDAgICAgICAgCWNhbGxxICA1M2Q1IDx2eGxhbl9yY3YrMHg1PgogICAgNTNkNToJ NTUgICAgICAgICAgICAgICAgICAgCXB1c2ggICAlcmJwCiAgICA1M2Q2Ogk0OCA4OSBlNSAgICAg ICAgICAgICAJbW92ICAgICVyc3AsJXJicAogICAgNTNkOToJNDEgNTcgICAgICAgICAgICAgICAg CXB1c2ggICAlcjE1CiAgICA1M2RiOgk0MSA1NiAgICAgICAgICAgICAgICAJcHVzaCAgICVyMTQK ICAgIDUzZGQ6CTQxIDU1ICAgICAgICAgICAgICAgIAlwdXNoICAgJXIxMwogICAgNTNkZjoJNDEg NTQgICAgICAgICAgICAgICAgCXB1c2ggICAlcjEyCglvZmZzZXQgPSBzdGFydCArIHZ4bGFuX3Jj b19vZmZzZXQodm5pX2ZpZWxkKTsKCgl2aCA9IHNrYl9ncm9fcmVtY3N1bV9wcm9jZXNzKHNrYiwg KHZvaWQgKil2aCwgb2ZmLCBoZHJsZW4sCgkJCQkgICAgIHN0YXJ0LCBvZmZzZXQsIGdyYywgbm9w YXJ0aWFsKTsKCglza2ItPnJlbWNzdW1fb2ZmbG9hZCA9IDE7CiAgICA1M2UxOgk0OSA4OSBmNCAg ICAgICAgICAgICAJbW92ICAgICVyc2ksJXIxMgogICAgNTNlNDoJNTMgICAgICAgICAgICAgICAg ICAgCXB1c2ggICAlcmJ4CiAgICA1M2U1Ogk0OCA4OSBmYiAgICAgICAgICAgICAJbW92ICAgICVy ZGksJXJieAogICAgNTNlODoJNDggODMgZTQgZjAgICAgICAgICAgCWFuZCAgICAkMHhmZmZmZmZm ZmZmZmZmZmYwLCVyc3AKCnN0YXRpYyBzdHJ1Y3Qgc2tfYnVmZiAqKnZ4bGFuX2dyb19yZWNlaXZl KHN0cnVjdCBzb2NrICpzaywKCQkJCQkgIHN0cnVjdCBza19idWZmICoqaGVhZCwKCQkJCQkgIHN0 cnVjdCBza19idWZmICpza2IpCnsKCXN0cnVjdCBza19idWZmICpwLCAqKnBwID0gTlVMTDsKICAg IDUzZWM6CTQ4IDgzIGVjIDYwICAgICAgICAgIAlzdWIgICAgJDB4NjAsJXJzcAogICAgNTNmMDoJ NjUgNDggOGIgMDQgMjUgMjggMDAgCW1vdiAgICAlZ3M6MHgyOCwlcmF4CiAgICA1M2Y3OgkwMCAw MCAKICAgIDUzZjk6CTQ4IDg5IDQ0IDI0IDU4ICAgICAgIAltb3YgICAgJXJheCwweDU4KCVyc3Ap CiAgICA1M2ZlOgkzMSBjMCAgICAgICAgICAgICAgICAJeG9yICAgICVlYXgsJWVheAoJcmV0dXJu IGVyciA8PSAxOwp9CgovKiBDYWxsYmFjayBmcm9tIG5ldC9pcHY0L3VkcC5jIHRvIHJlY2VpdmUg cGFja2V0cyAqLwpzdGF0aWMgaW50IHZ4bGFuX3JjdihzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBz a19idWZmICpza2IpCnsKICAgIDU0MDA6CThiIDg2IDgwIDAwIDAwIDAwICAgIAltb3YgICAgMHg4 MCglcnNpKSwlZWF4CiAgICA1NDA2Ogk4OSBjMiAgICAgICAgICAgICAgICAJbW92ICAgICVlYXgs JWVkeAogICAgNTQwODoJMmIgOTYgODQgMDAgMDAgMDAgICAgCXN1YiAgICAweDg0KCVyc2kpLCVl ZHgKICAgIDU0MGU6CTgzIGZhIDBmICAgICAgICAgICAgIAljbXAgICAgJDB4ZiwlZWR4CiAgICA1 NDExOgkwZiA4NiBiOSAwMiAwMCAwMCAgICAJamJlICAgIDU2ZDAgPHZ4bGFuX3JjdisweDMwMD4K ICAgIDU0MTc6CTQxIDBmIGI3IDg0IDI0IGMyIDAwIAltb3Z6d2wgMHhjMiglcjEyKSwlZWF4CiAg ICA1NDFlOgkwMCAwMCAKICAgIDU0MjA6CTQ5IDAzIDg0IDI0IGQwIDAwIDAwIAlhZGQgICAgMHhk MCglcjEyKSwlcmF4CiAgICA1NDI3OgkwMCAKICAgIDU0Mjg6CTRjIDhiIDY4IDA4ICAgICAgICAg IAltb3YgICAgMHg4KCVyYXgpLCVyMTMKICAgIDU0MmM6CTQ0IDhiIDcwIDBjICAgICAgICAgIAlt b3YgICAgMHhjKCVyYXgpLCVyMTRkCiAgICA1NDMwOgk0MSBmNiBjNSAwOCAgICAgICAgICAJdGVz dCAgICQweDgsJXIxM2IKICAgIDU0MzQ6CTQ0IDg5IGU5ICAgICAgICAgICAgIAltb3YgICAgJXIx M2QsJWVjeAoJcmV0dXJuIHNrYi0+ZGF0YV9sZW47Cn0KCnN0YXRpYyBpbmxpbmUgdW5zaWduZWQg aW50IHNrYl9oZWFkbGVuKGNvbnN0IHN0cnVjdCBza19idWZmICpza2IpCnsKCXJldHVybiBza2It PmxlbiAtIHNrYi0+ZGF0YV9sZW47CiAgICA1NDM3OgkwZiA4NCA4MCAwMCAwMCAwMCAgICAJamUg ICAgIDU0YmQgPHZ4bGFuX3JjdisweGVkPgogICAgNTQzZDoJNGMgOGIgYmIgNDggMDIgMDAgMDAg CW1vdiAgICAweDI0OCglcmJ4KSwlcjE1CglyZXR1cm4gdW5saWtlbHkobGVuID4gc2tiLT5sZW4p ID8gTlVMTCA6IF9fcHNrYl9wdWxsKHNrYiwgbGVuKTsKfQoKc3RhdGljIGlubGluZSBpbnQgcHNr Yl9tYXlfcHVsbChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCB1bnNpZ25lZCBpbnQgbGVuKQp7CglpZiAo bGlrZWx5KGxlbiA8PSBza2JfaGVhZGxlbihza2IpKSkKICAgIDU0NDQ6CTRjIDg5IGVlICAgICAg ICAgICAgIAltb3YgICAgJXIxMywlcnNpCglyZXR1cm4gc2tiLT50cmFuc3BvcnRfaGVhZGVyICE9 ICh0eXBlb2Yoc2tiLT50cmFuc3BvcnRfaGVhZGVyKSl+MFU7Cn0KCnN0YXRpYyBpbmxpbmUgdW5z aWduZWQgY2hhciAqc2tiX3RyYW5zcG9ydF9oZWFkZXIoY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNr YikKewoJcmV0dXJuIHNrYi0+aGVhZCArIHNrYi0+dHJhbnNwb3J0X2hlYWRlcjsKICAgIDU0NDc6 CTQ4IDgzIGU2IGY3ICAgICAgICAgIAlhbmQgICAgJDB4ZmZmZmZmZmZmZmZmZmZmNywlcnNpCiAg ICA1NDRiOgk0OSA4OSBmNSAgICAgICAgICAgICAJbW92ICAgICVyc2ksJXIxMwogICAgNTQ0ZToJ NGQgODUgZmYgICAgICAgICAgICAgCXRlc3QgICAlcjE1LCVyMTUKICAgIDU0NTE6CTc0IDNkICAg ICAgICAgICAgICAgIAlqZSAgICAgNTQ5MCA8dnhsYW5fcmN2KzB4YzA+CiAgICA1NDUzOgk0MSA4 YiBiZiAxYyAyMCAwMCAwMCAJbW92ICAgIDB4MjAxYyglcjE1KSwlZWRpCgoJLyogTmVlZCBVRFAg YW5kIFZYTEFOIGhlYWRlciB0byBiZSBwcmVzZW50ICovCglpZiAoIXBza2JfbWF5X3B1bGwoc2ti LCBWWExBTl9ITEVOKSkKCQlnb3RvIGRyb3A7CgoJdW5wYXJzZWQgPSAqdnhsYW5faGRyKHNrYik7 CiAgICA1NDVhOglmNyBjNyAwMCAyMCAwMCAwMCAgICAJdGVzdCAgICQweDIwMDAsJWVkaQoJLyog Vk5JIGZsYWcgYWx3YXlzIHJlcXVpcmVkIHRvIGJlIHNldCAqLwoJaWYgKCEodW5wYXJzZWQudnhf ZmxhZ3MgJiBWWExBTl9IRl9WTkkpKSB7CiAgICA1NDYwOgkwZiA4NSA4MyAwMCAwMCAwMCAgICAJ am5lICAgIDU0ZTkgPHZ4bGFuX3JjdisweDExOT4KICAgIDU0NjY6CTQ0IDg5IGYwICAgICAgICAg ICAgIAltb3YgICAgJXIxNGQsJWVheAogICAgNTQ2OToJYzEgZTAgMDggICAgICAgICAgICAgCXNo bCAgICAkMHg4LCVlYXgKICAgIDU0NmM6CTY5IGQwIDQ3IDg2IGM4IDYxICAgIAlpbXVsICAgJDB4 NjFjODg2NDcsJWVheCwlZWR4CiAgICA1NDcyOgljMSBlYSAxNiAgICAgICAgICAgICAJc2hyICAg ICQweDE2LCVlZHgKCQkJICAgbnRvaGwodnhsYW5faGRyKHNrYiktPnZ4X2ZsYWdzKSwKCQkJICAg bnRvaGwodnhsYW5faGRyKHNrYiktPnZ4X3ZuaSkpOwoJCS8qIFJldHVybiBub24gdnhsYW4gcGt0 ICovCgkJZ290byBkcm9wOwoJfQoJdW5wYXJzZWQudnhfZmxhZ3MgJj0gflZYTEFOX0hGX1ZOSTsK ICAgIDU0NzU6CTQ5IDhkIDU0IGQ3IDEwICAgICAgIAlsZWEgICAgMHgxMCglcjE1LCVyZHgsOCks JXJkeAogICAgNTQ3YToJNDggOGIgNWEgMDggICAgICAgICAgCW1vdiAgICAweDgoJXJkeCksJXJi eAoJdW5wYXJzZWQudnhfdm5pICY9IH5WWExBTl9WTklfTUFTSzsKCgl2cyA9IHJjdV9kZXJlZmVy ZW5jZV9za191c2VyX2RhdGEoc2spOwoJaWYgKCF2cykKICAgIDU0N2U6CTQ4IDg1IGRiICAgICAg ICAgICAgIAl0ZXN0ICAgJXJieCwlcmJ4CiAgICA1NDgxOgk3NCAwZCAgICAgICAgICAgICAgICAJ amUgICAgIDU0OTAgPHZ4bGFuX3JjdisweGMwPgpzdGF0aWMgc3RydWN0IHZ4bGFuX2RldiAqdnhs YW5fdnNfZmluZF92bmkoc3RydWN0IHZ4bGFuX3NvY2sgKnZzLCBfX2JlMzIgdm5pKQp7CglzdHJ1 Y3QgdnhsYW5fZGV2ICp2eGxhbjsKCgkvKiBGb3IgZmxvdyBiYXNlZCBkZXZpY2VzLCBtYXAgYWxs IHBhY2tldHMgdG8gVk5JIDAgKi8KCWlmICh2cy0+ZmxhZ3MgJiBWWExBTl9GX0NPTExFQ1RfTUVU QURBVEEpCiAgICA1NDgzOgkzYiA0MyA2MCAgICAgICAgICAgICAJY21wICAgIDB4NjAoJXJieCks JWVheAogICAgNTQ4NjoJNzQgNjcgICAgICAgICAgICAgICAgCWplICAgICA1NGVmIDx2eGxhbl9y Y3YrMHgxMWY+CiAgICA1NDg4Ogk0OCA4YiAxYiAgICAgICAgICAgICAJbW92ICAgICglcmJ4KSwl cmJ4CiAgICA1NDhiOgk0OCA4NSBkYiAgICAgICAgICAgICAJdGVzdCAgICVyYngsJXJieAogICAg NTQ4ZToJNzUgZjMgICAgICAgICAgICAgICAgCWpuZSAgICA1NDgzIDx2eGxhbl9yY3YrMHhiMz4K ICAgIDU0OTA6CTRjIDg5IGU3ICAgICAgICAgICAgIAltb3YgICAgJXIxMiwlcmRpCiAgICA1NDkz OgllOCAwMCAwMCAwMCAwMCAgICAgICAJY2FsbHEgIDU0OTggPHZ4bGFuX3JjdisweGM4PgpzdGF0 aWMgaW5saW5lIF9fYmUzMiB2eGxhbl92bmkoX19iZTMyIHZuaV9maWVsZCkKewojaWYgZGVmaW5l ZChfX0JJR19FTkRJQU4pCglyZXR1cm4gKF9fZm9yY2UgX19iZTMyKSgoX19mb3JjZSB1MzIpdm5p X2ZpZWxkID4+IDgpOwojZWxzZQoJcmV0dXJuIChfX2ZvcmNlIF9fYmUzMikoKF9fZm9yY2UgdTMy KSh2bmlfZmllbGQgJiBWWExBTl9WTklfTUFTSykgPDwgOCk7CiAgICA1NDk4OgkzMSBjMCAgICAg ICAgICAgICAgICAJeG9yICAgICVlYXgsJWVheAogICAgNTQ5YToJNDggOGIgNGMgMjQgNTggICAg ICAgCW1vdiAgICAweDU4KCVyc3ApLCVyY3gKICAgIDU0OWY6CTY1IDQ4IDMzIDBjIDI1IDI4IDAw IAl4b3IgICAgJWdzOjB4MjgsJXJjeAogICAgNTRhNjoJMDAgMDAgCgkJdm5pID0gMDsKCglobGlz dF9mb3JfZWFjaF9lbnRyeV9yY3UodnhsYW4sIHZuaV9oZWFkKHZzLCB2bmkpLCBobGlzdCkgewog ICAgNTRhODoJMGYgODUgZTcgMDggMDAgMDAgICAgCWpuZSAgICA1ZDk1IDx2eGxhbl9yY3YrMHg5 YzU+CiAgICA1NGFlOgk0OCA4ZCA2NSBkOCAgICAgICAgICAJbGVhICAgIC0weDI4KCVyYnApLCVy c3AKICAgIDU0YjI6CTViICAgICAgICAgICAgICAgICAgIAlwb3AgICAgJXJieAoJCWlmICh2eGxh bi0+ZGVmYXVsdF9kc3QucmVtb3RlX3ZuaSA9PSB2bmkpCiAgICA1NGIzOgk0MSA1YyAgICAgICAg ICAgICAgICAJcG9wICAgICVyMTIKICAgIDU0YjU6CTQxIDVkICAgICAgICAgICAgICAgIAlwb3Ag ICAgJXIxMwogICAgNTRiNzoJNDEgNWUgICAgICAgICAgICAgICAgCXBvcCAgICAlcjE0CiAgICA1 NGI5Ogk0MSA1ZiAgICAgICAgICAgICAgICAJcG9wICAgICVyMTUKCgkvKiBGb3IgZmxvdyBiYXNl ZCBkZXZpY2VzLCBtYXAgYWxsIHBhY2tldHMgdG8gVk5JIDAgKi8KCWlmICh2cy0+ZmxhZ3MgJiBW WExBTl9GX0NPTExFQ1RfTUVUQURBVEEpCgkJdm5pID0gMDsKCglobGlzdF9mb3JfZWFjaF9lbnRy eV9yY3UodnhsYW4sIHZuaV9oZWFkKHZzLCB2bmkpLCBobGlzdCkgewogICAgNTRiYjoJNWQgICAg ICAgICAgICAgICAgICAgCXBvcCAgICAlcmJwCiAgICA1NGJjOgljMyAgICAgICAgICAgICAgICAg ICAJcmV0cSAgIAogICAgNTRiZDoJMGYgMWYgNDQgMDAgMDAgICAgICAgCW5vcGwgICAweDAoJXJh eCwlcmF4LDEpCglncm9fY2VsbHNfcmVjZWl2ZSgmdnhsYW4tPmdyb19jZWxscywgc2tiKTsKCXJl dHVybiAwOwoKZHJvcDoKCS8qIENvbnN1bWUgYmFkIHBhY2tldCAqLwoJa2ZyZWVfc2tiKHNrYik7 CiAgICA1NGMyOgllYiBjYyAgICAgICAgICAgICAgICAJam1wICAgIDU0OTAgPHZ4bGFuX3Jjdisw eGMwPgogICAgNTRjNDoJOGIgNDggMDggICAgICAgICAgICAgCW1vdiAgICAweDgoJXJheCksJWVj eAogICAgNTRjNzoJNDkgOGIgNzQgMjQgMjAgICAgICAgCW1vdiAgICAweDIwKCVyMTIpLCVyc2kK CXJldHVybiAwOwp9CiAgICA1NGNjOgk0NSA4OSBmMCAgICAgICAgICAgICAJbW92ICAgICVyMTRk LCVyOGQKICAgIDU0Y2Y6CTQxIDBmIGM4ICAgICAgICAgICAgIAlic3dhcCAgJXI4ZAogICAgNTRk MjoJNDggYzcgYzIgMDAgMDAgMDAgMDAgCW1vdiAgICAkMHgwLCVyZHgKICAgIDU0ZDk6CTQ4IGM3 IGM3IDAwIDAwIDAwIDAwIAltb3YgICAgJDB4MCwlcmRpCiAgICA1NGUwOgkwZiBjOSAgICAgICAg ICAgICAgICAJYnN3YXAgICVlY3gKICAgIDU0ZTI6CWU4IDAwIDAwIDAwIDAwICAgICAgIAljYWxs cSAgNTRlNyA8dnhsYW5fcmN2KzB4MTE3PgogICAgNTRlNzoJZWIgYTcgICAgICAgICAgICAgICAg CWptcCAgICA1NDkwIDx2eGxhbl9yY3YrMHhjMD4KICAgIDU0ZTk6CTMxIGQyICAgICAgICAgICAg ICAgIAl4b3IgICAgJWVkeCwlZWR4CiAgICA1NGViOgkzMSBjMCAgICAgICAgICAgICAgICAJeG9y ICAgICVlYXgsJWVheAogICAgNTRlZDoJZWIgODYgICAgICAgICAgICAgICAgCWptcCAgICA1NDc1 IDx2eGxhbl9yY3YrMHhhNT4KICAgIDU0ZWY6CTgxIGU3IDAwIDQwIDAwIDAwICAgIAlhbmQgICAg JDB4NDAwMCwlZWRpCgkJZ290byBkcm9wOwoKCXVucGFyc2VkID0gKnZ4bGFuX2hkcihza2IpOwoJ LyogVk5JIGZsYWcgYWx3YXlzIHJlcXVpcmVkIHRvIGJlIHNldCAqLwoJaWYgKCEodW5wYXJzZWQu dnhfZmxhZ3MgJiBWWExBTl9IRl9WTkkpKSB7CgkJbmV0ZGV2X2RiZyhza2ItPmRldiwgImludmFs aWQgdnhsYW4gZmxhZ3M9JSN4IHZuaT0lI3hcbiIsCiAgICA1NGY1OgkwZiA4NSA3NCAwMSAwMCAw MCAgICAJam5lICAgIDU2NmYgPHZ4bGFuX3JjdisweDI5Zj4KICAgIDU0ZmI6CWJhIDY1IDU4IDAw IDAwICAgICAgIAltb3YgICAgJDB4NTg2NSwlZWR4CiAgICA1NTAwOgkzMSBjOSAgICAgICAgICAg ICAgICAJeG9yICAgICVlY3gsJWVjeAogICAgNTUwMjoJYzYgNDQgMjQgMjcgMDAgICAgICAgCW1v dmIgICAkMHgwLDB4MjcoJXJzcCkKICAgIDU1MDc6CTQ4IDhiIDQzIDMwICAgICAgICAgIAltb3Yg ICAgMHgzMCglcmJ4KSwlcmF4CiAgICA1NTBiOgk0OCA4YiA3YiAzOCAgICAgICAgICAJbW92ICAg IDB4MzgoJXJieCksJXJkaQogICAgNTUwZjoJNDUgMzEgYzAgICAgICAgICAgICAgCXhvciAgICAl cjhkLCVyOGQKICAgIDU1MTI6CWJlIDEwIDAwIDAwIDAwICAgICAgIAltb3YgICAgJDB4MTAsJWVz aQogICAgNTUxNzoJNDggMzkgYjggODAgMDQgMDAgMDAgCWNtcCAgICAlcmRpLDB4NDgwKCVyYXgp CnsKCXN0cnVjdCB2eGxhbl9kZXYgKnZ4bGFuOwoKCS8qIEZvciBmbG93IGJhc2VkIGRldmljZXMs IG1hcCBhbGwgcGFja2V0cyB0byBWTkkgMCAqLwoJaWYgKHZzLT5mbGFncyAmIFZYTEFOX0ZfQ09M TEVDVF9NRVRBREFUQSkKCQl2bmkgPSAwOwogICAgNTUxZToJNGMgODkgZTcgICAgICAgICAgICAg CW1vdiAgICAlcjEyLCVyZGkKCQlnb3RvIGRyb3A7CgoJLyogRm9yIGJhY2t3YXJkcyBjb21wYXRp YmlsaXR5LCBvbmx5IGFsbG93IHJlc2VydmVkIGZpZWxkcyB0byBiZQoJICogdXNlZCBieSBWWExB TiBleHRlbnNpb25zIGlmIGV4cGxpY2l0bHkgcmVxdWVzdGVkLgoJICovCglpZiAodnMtPmZsYWdz ICYgVlhMQU5fRl9HUEUpIHsKICAgIDU1MjE6CTQxIDBmIDk1IGMwICAgICAgICAgIAlzZXRuZSAg JXI4YgogICAgNTUyNToJZTggMDAgMDAgMDAgMDAgICAgICAgCWNhbGxxICA1NTJhIDx2eGxhbl9y Y3YrMHgxNWE+CiAgICA1NTJhOgk4NSBjMCAgICAgICAgICAgICAgICAJdGVzdCAgICVlYXgsJWVh eAogICAgNTUyYzoJMGYgODUgNWUgZmYgZmYgZmYgICAgCWpuZSAgICA1NDkwIDx2eGxhbl9yY3Yr MHhjMD4KCXN0cnVjdCB2eGxhbl9zb2NrICp2czsKCXN0cnVjdCB2eGxhbmhkciB1bnBhcnNlZDsK CXN0cnVjdCB2eGxhbl9tZXRhZGF0YSBfbWQ7CglzdHJ1Y3QgdnhsYW5fbWV0YWRhdGEgKm1kID0g Jl9tZDsKCV9fYmUxNiBwcm90b2NvbCA9IGh0b25zKEVUSF9QX1RFQik7Cglib29sIHJhd19wcm90 byA9IGZhbHNlOwogICAgNTUzMjoJNDEgOGIgOTcgMWMgMjAgMDAgMDAgCW1vdiAgICAweDIwMWMo JXIxNSksJWVkeAogICAgNTUzOToJZjYgYzYgMjAgICAgICAgICAgICAgCXRlc3QgICAkMHgyMCwl ZGgKCQlpZiAoIXZ4bGFuX3BhcnNlX2dwZV9oZHIoJnVucGFyc2VkLCAmcHJvdG9jb2wsIHNrYiwg dnMtPmZsYWdzKSkKCQkJZ290byBkcm9wOwoJCXJhd19wcm90byA9IHRydWU7Cgl9CgoJaWYgKF9f aXB0dW5uZWxfcHVsbF9oZWFkZXIoc2tiLCBWWExBTl9ITEVOLCBwcm90b2NvbCwgcmF3X3Byb3Rv LAogICAgNTUzYzoJMGYgODUgYjQgMDEgMDAgMDAgICAgCWpuZSAgICA1NmY2IDx2eGxhbl9yY3Yr MHgzMjY+CiAgICA1NTQyOgkwZiAxZiA0NCAwMCAwMCAgICAgICAJbm9wbCAgIDB4MCglcmF4LCVy YXgsMSkKICAgIDU1NDc6CTRjIDhkIDQ0IDI0IDJjICAgICAgIAlsZWEgICAgMHgyYyglcnNwKSwl cjgKICAgIDU1NGM6CWM3IDQ0IDI0IDJjIDAwIDAwIDAwIAltb3ZsICAgJDB4MCwweDJjKCVyc3Ap CiAgICA1NTUzOgkwMCAKICAgIDU1NTQ6CTQ0IDg5IGYwICAgICAgICAgICAgIAltb3YgICAgJXIx NGQsJWVheAogICAgNTU1NzoJNDQgODkgZTkgICAgICAgICAgICAgCW1vdiAgICAlcjEzZCwlZWN4 CiAgICA1NTVhOgkyNSAwMCAwMCAwMCBmZiAgICAgICAJYW5kICAgICQweGZmMDAwMDAwLCVlYXgK ICAgIDU1NWY6CWY2IGM2IDA0ICAgICAgICAgICAgIAl0ZXN0ICAgJDB4NCwlZGgKICAgIDU1NjI6 CTg5IGM3ICAgICAgICAgICAgICAgIAltb3YgICAgJWVheCwlZWRpCiAgICA1NTY0OgkwZiA4NSBl OCAwMSAwMCAwMCAgICAJam5lICAgIDU3NTIgPHZ4bGFuX3JjdisweDM4Mj4KLyogc2FsdCBmb3Ig aGFzaCB0YWJsZSAqLwpzdGF0aWMgdTMyIHZ4bGFuX3NhbHQgX19yZWFkX21vc3RseTsKCnN0YXRp YyBpbmxpbmUgYm9vbCB2eGxhbl9jb2xsZWN0X21ldGFkYXRhKHN0cnVjdCB2eGxhbl9zb2NrICp2 cykKewoJcmV0dXJuIHZzLT5mbGFncyAmIFZYTEFOX0ZfQ09MTEVDVF9NRVRBREFUQSB8fAogICAg NTU2YToJZjYgYzYgMDggICAgICAgICAgICAgCXRlc3QgICAkMHg4LCVkaAogICAgNTU2ZDoJMGYg ODUgMjUgMDMgMDAgMDAgICAgCWpuZSAgICA1ODk4IDx2eGxhbl9yY3YrMHg0Yzg+CiAgICA1NTcz Ogk4NSBjOSAgICAgICAgICAgICAgICAJdGVzdCAgICVlY3gsJWVjeAogICAgNTU3NToJMGYgODUg MTUgZmYgZmYgZmYgICAgCWpuZSAgICA1NDkwIDx2eGxhbl9yY3YrMHhjMD4KCXN0cnVjdCBwY3B1 X3N3X25ldHN0YXRzICpzdGF0czsKCXN0cnVjdCB2eGxhbl9kZXYgKnZ4bGFuOwoJc3RydWN0IHZ4 bGFuX3NvY2sgKnZzOwoJc3RydWN0IHZ4bGFuaGRyIHVucGFyc2VkOwoJc3RydWN0IHZ4bGFuX21l dGFkYXRhIF9tZDsKCXN0cnVjdCB2eGxhbl9tZXRhZGF0YSAqbWQgPSAmX21kOwogICAgNTU3YjoJ ODUgZmYgICAgICAgICAgICAgICAgCXRlc3QgICAlZWRpLCVlZGkKCgkJbWQgPSBpcF90dW5uZWxf aW5mb19vcHRzKCZ0dW5fZHN0LT51LnR1bl9pbmZvKTsKCgkJc2tiX2RzdF9zZXQoc2tiLCAoc3Ry dWN0IGRzdF9lbnRyeSAqKXR1bl9kc3QpOwoJfSBlbHNlIHsKCQltZW1zZXQobWQsIDAsIHNpemVv ZigqbWQpKTsKICAgIDU1N2Q6CTBmIDg1IDBkIGZmIGZmIGZmICAgIAlqbmUgICAgNTQ5MCA8dnhs YW5fcmN2KzB4YzA+CiAgICA1NTgzOgk4MCA3YyAyNCAyNyAwMCAgICAgICAJY21wYiAgICQweDAs MHgyNyglcnNwKQoJCQkgICBudG9obCh2eGxhbl9oZHIoc2tiKS0+dnhfdm5pKSk7CgkJLyogUmV0 dXJuIG5vbiB2eGxhbiBwa3QgKi8KCQlnb3RvIGRyb3A7Cgl9Cgl1bnBhcnNlZC52eF9mbGFncyAm PSB+VlhMQU5fSEZfVk5JOwoJdW5wYXJzZWQudnhfdm5pICY9IH5WWExBTl9WTklfTUFTSzsKICAg IDU1ODg6CTBmIDg0IDg1IDAzIDAwIDAwICAgIAlqZSAgICAgNTkxMyA8dnhsYW5fcmN2KzB4NTQz PgogICAgNTU4ZToJNDkgOGIgOGMgMjQgZDAgMDAgMDAgCW1vdiAgICAweGQwKCVyMTIpLCVyY3gK ICAgIDU1OTU6CTAwIAoJCXNrYl9kc3Rfc2V0KHNrYiwgKHN0cnVjdCBkc3RfZW50cnkgKil0dW5f ZHN0KTsKCX0gZWxzZSB7CgkJbWVtc2V0KG1kLCAwLCBzaXplb2YoKm1kKSk7Cgl9CgoJaWYgKHZz LT5mbGFncyAmIFZYTEFOX0ZfUkVNQ1NVTV9SWCkKICAgIDU1OTY6CTQ5IDhiIDg0IDI0IGQ4IDAw IDAwIAltb3YgICAgMHhkOCglcjEyKSwlcmF4CiAgICA1NTlkOgkwMCAKCQlpZiAoIXZ4bGFuX3Jl bWNzdW0oJnVucGFyc2VkLCBza2IsIHZzLT5mbGFncykpCgkJCWdvdG8gZHJvcDsKCWlmICh2cy0+ ZmxhZ3MgJiBWWExBTl9GX0dCUCkKICAgIDU1OWU6CTQ1IDBmIGI3IGFjIDI0IGM0IDAwIAltb3Z6 d2wgMHhjNCglcjEyKSwlcjEzZAogICAgNTVhNToJMDAgMDAgCgkJdnhsYW5fcGFyc2VfZ2JwX2hk cigmdW5wYXJzZWQsIHNrYiwgdnMtPmZsYWdzLCBtZCk7CgkvKiBOb3RlIHRoYXQgR0JQIGFuZCBH UEUgY2FuIG5ldmVyIGJlIGFjdGl2ZSB0b2dldGhlci4gVGhpcyBpcwoJICogZW5zdXJlZCBpbiB2 eGxhbl9kZXZfY29uZmlndXJlLgoJICovCgoJaWYgKHVucGFyc2VkLnZ4X2ZsYWdzIHx8IHVucGFy c2VkLnZ4X3ZuaSkgewogICAgNTVhNzoJNDggMjkgYzggICAgICAgICAgICAgCXN1YiAgICAlcmN4 LCVyYXgKICAgIDU1YWE6CTY2IDQxIDg5IDg0IDI0IGM2IDAwIAltb3YgICAgJWF4LDB4YzYoJXIx MikKICAgIDU1YjE6CTAwIDAwIAoJCSAqIGFkZGluZyBleHRlbnNpb25zIHRvIFZYTEFOLgoJCSAq LwoJCWdvdG8gZHJvcDsKCX0KCglpZiAoIXJhd19wcm90bykgewogICAgNTViMzoJNDggOGIgNzMg MzAgICAgICAgICAgCW1vdiAgICAweDMwKCVyYngpLCVyc2kKICAgIDU1Yjc6CTg5IGMyICAgICAg ICAgICAgICAgIAltb3YgICAgJWVheCwlZWR4CiAgICA1NWI5Ogk0MSA4MCBhNCAyNCA5MCAwMCAw MCAJYW5kYiAgICQweGY4LDB4OTAoJXIxMikKICAgIDU1YzA6CTAwIGY4IAoJcmV0dXJuIHNrYi0+ bWFjX2hlYWRlciAhPSAodHlwZW9mKHNrYi0+bWFjX2hlYWRlcikpfjBVOwp9CgpzdGF0aWMgaW5s aW5lIHZvaWQgc2tiX3Jlc2V0X21hY19oZWFkZXIoc3RydWN0IHNrX2J1ZmYgKnNrYikKewoJc2ti LT5tYWNfaGVhZGVyID0gc2tiLT5kYXRhIC0gc2tiLT5oZWFkOwogICAgNTVjMjoJNDkgODkgNzQg MjQgMjAgICAgICAgCW1vdiAgICAlcnNpLDB4MjAoJXIxMikKICAgIDU1Yzc6CTY2IDQxIDg5IDk0 IDI0IGM0IDAwIAltb3YgICAgJWR4LDB4YzQoJXIxMikKICAgIDU1Y2U6CTAwIDAwIAogICAgNTVk MDoJNDkgMDEgY2QgICAgICAgICAgICAgCWFkZCAgICAlcmN4LCVyMTMKICAgIDU1ZDM6CTQ5IDhi IDU3IDEwICAgICAgICAgIAltb3YgICAgMHgxMCglcjE1KSwlcmR4CiAgICA1NWQ3Ogk0OCA4YiA1 MiAyMCAgICAgICAgICAJbW92ICAgIDB4MjAoJXJkeCksJXJkeAogICAgNTVkYjoJMGYgYjcgNzIg MTAgICAgICAgICAgCW1vdnp3bCAweDEwKCVyZHgpLCVlc2kKICAgIDU1ZGY6CTY2IDgzIGZlIDAy ICAgICAgICAgIAljbXAgICAgJDB4Miwlc2kKCQlpZiAoIXZ4bGFuX3NldF9tYWModnhsYW4sIHZz LCBza2IpKQoJCQlnb3RvIGRyb3A7Cgl9IGVsc2UgewoJCXNrYl9yZXNldF9tYWNfaGVhZGVyKHNr Yik7CgkJc2tiLT5kZXYgPSB2eGxhbi0+ZGV2OwogICAgNTVlMzoJMGYgODQgMGIgMDQgMDAgMDAg ICAgCWplICAgICA1OWY0IDx2eGxhbl9yY3YrMHg2MjQ+CgkJc2tiLT5wa3RfdHlwZSA9IFBBQ0tF VF9IT1NUOwogICAgNTVlOToJNDEgMGYgYjcgYmMgMjQgYzAgMDAgCW1vdnp3bCAweGMwKCVyMTIp LCVlZGkKICAgIDU1ZjA6CTAwIDAwIAoJaWYgKCFyYXdfcHJvdG8pIHsKCQlpZiAoIXZ4bGFuX3Nl dF9tYWModnhsYW4sIHZzLCBza2IpKQoJCQlnb3RvIGRyb3A7Cgl9IGVsc2UgewoJCXNrYl9yZXNl dF9tYWNfaGVhZGVyKHNrYik7CgkJc2tiLT5kZXYgPSB2eGxhbi0+ZGV2OwogICAgNTVmMjoJNjYg ODMgZmYgMDggICAgICAgICAgCWNtcCAgICAkMHg4LCVkaQogICAgNTVmNjoJMGYgODQgODQgMDUg MDAgMDAgICAgCWplICAgICA1YjgwIDx2eGxhbl9yY3YrMHg3YjA+CglyZXR1cm4gc2tiLT5oZWFk ICsgc2tiLT5uZXR3b3JrX2hlYWRlcjsKfQoKc3RhdGljIGlubGluZSB2b2lkIHNrYl9yZXNldF9u ZXR3b3JrX2hlYWRlcihzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQp7Cglza2ItPm5ldHdvcmtfaGVhZGVy ID0gc2tiLT5kYXRhIC0gc2tiLT5oZWFkOwogICAgNTVmYzoJNjYgODEgZmYgODYgZGQgICAgICAg CWNtcCAgICAkMHhkZDg2LCVkaQoJc2tiLT50cmFuc3BvcnRfaGVhZGVyICs9IG9mZnNldDsKfQoK c3RhdGljIGlubGluZSB1bnNpZ25lZCBjaGFyICpza2JfbmV0d29ya19oZWFkZXIoY29uc3Qgc3Ry dWN0IHNrX2J1ZmYgKnNrYikKewoJcmV0dXJuIHNrYi0+aGVhZCArIHNrYi0+bmV0d29ya19oZWFk ZXI7CiAgICA1NjAxOgkwZiA4NCA3OCAwNCAwMCAwMCAgICAJamUgICAgIDVhN2YgPHZ4bGFuX3Jj disweDZhZj4KCXJldHVybiB2bmlfZmllbGQ7Cn0KCnN0YXRpYyBpbmxpbmUgdW5zaWduZWQgc2hv cnQgdnhsYW5fZ2V0X3NrX2ZhbWlseShzdHJ1Y3QgdnhsYW5fc29jayAqdnMpCnsKCXJldHVybiB2 cy0+c29jay0+c2stPnNrX2ZhbWlseTsKICAgIDU2MDc6CTQ4IDhiIDQzIDMwICAgICAgICAgIAlt b3YgICAgMHgzMCglcmJ4KSwlcmF4CiAgICA1NjBiOgk0OCA4YiA4MCA4OCAwNCAwMCAwMCAJbW92 ICAgIDB4NDg4KCVyYXgpLCVyYXgKc3RhdGljIGJvb2wgdnhsYW5fZWNuX2RlY2Fwc3VsYXRlKHN0 cnVjdCB2eGxhbl9zb2NrICp2cywgdm9pZCAqb2lwaCwKCQkJCSAgc3RydWN0IHNrX2J1ZmYgKnNr YikKewoJaW50IGVyciA9IDA7CgoJaWYgKHZ4bGFuX2dldF9za19mYW1pbHkodnMpID09IEFGX0lO RVQpCiAgICA1NjEyOgk2NSA0OCAwMyAwNSAwMCAwMCAwMCAJYWRkICAgICVnczoweDAoJXJpcCks JXJheCAgICAgICAgIyA1NjFhIDx2eGxhbl9yY3YrMHgyNGE+CiAgICA1NjE5OgkwMCAKc3RhdGlj IGlubGluZSBpbnQgSVA2X0VDTl9kZWNhcHN1bGF0ZShjb25zdCBzdHJ1Y3QgaXB2NmhkciAqb2lw djZoLAoJCQkJICAgICAgc3RydWN0IHNrX2J1ZmYgKnNrYikKewoJX191OCBpbm5lcjsKCglpZiAo c2tiLT5wcm90b2NvbCA9PSBodG9ucyhFVEhfUF9JUCkpCiAgICA1NjFhOgk0OCA4MyAwMCAwMSAg ICAgICAgICAJYWRkcSAgICQweDEsKCVyYXgpCiAgICA1NjFlOgk0MSA4YiA5NCAyNCA4MCAwMCAw MCAJbW92ICAgIDB4ODAoJXIxMiksJWVkeAogICAgNTYyNToJMDAgCiAgICA1NjI2Ogk0OCAwMSA1 MCAwOCAgICAgICAgICAJYWRkICAgICVyZHgsMHg4KCVyYXgpCiAgICA1NjJhOgk0OCA4YiA4MyBm MCAwMCAwMCAwMCAJbW92ICAgIDB4ZjAoJXJieCksJXJheAoJCWlubmVyID0gaXBfaGRyKHNrYikt PnRvczsKCWVsc2UgaWYgKHNrYi0+cHJvdG9jb2wgPT0gaHRvbnMoRVRIX1BfSVBWNikpCiAgICA1 NjMxOgk0OCA4NSBjMCAgICAgICAgICAgICAJdGVzdCAgICVyYXgsJXJheAogICAgNTYzNDoJNzQg MmMgICAgICAgICAgICAgICAgCWplICAgICA1NjYyIDx2eGxhbl9yY3YrMHgyOTI+CiAgICA1NjM2 Ogk0MSBmNiA4NCAyNCA4ZSAwMCAwMCAJdGVzdGIgICQweDEsMHg4ZSglcjEyKQogICAgNTYzZDoJ MDAgMDEgCgkJKyt2eGxhbi0+ZGV2LT5zdGF0cy5yeF9mcmFtZV9lcnJvcnM7CgkJKyt2eGxhbi0+ ZGV2LT5zdGF0cy5yeF9lcnJvcnM7CgkJZ290byBkcm9wOwoJfQoKCXN0YXRzID0gdGhpc19jcHVf cHRyKHZ4bGFuLT5kZXYtPnRzdGF0cyk7CiAgICA1NjNmOgkwZiA4NCA3MiAwNSAwMCAwMCAgICAJ amUgICAgIDViYjcgPHZ4bGFuX3JjdisweDdlNz4KICAgIDU2NDU6CTQxIDhiIDk0IDI0IGNjIDAw IDAwIAltb3YgICAgMHhjYyglcjEyKSwlZWR4CiAgICA1NjRjOgkwMCAKCXU2NF9zdGF0c191cGRh dGVfYmVnaW4oJnN0YXRzLT5zeW5jcCk7CglzdGF0cy0+cnhfcGFja2V0cysrOwogICAgNTY0ZDoJ NDkgMDMgOTQgMjQgZDAgMDAgMDAgCWFkZCAgICAweGQwKCVyMTIpLCVyZHgKICAgIDU2NTQ6CTAw IAoJc3RhdHMtPnJ4X2J5dGVzICs9IHNrYi0+bGVuOwogICAgNTY1NToJOGIgNTIgMjAgICAgICAg ICAgICAgCW1vdiAgICAweDIwKCVyZHgpLCVlZHgKICAgIDU2NTg6CTY2IDgzIGZhIDAxICAgICAg ICAgIAljbXAgICAgJDB4MSwlZHgKc3RhdGljIGlubGluZSBpbnQgZ3JvX2NlbGxzX3JlY2VpdmUo c3RydWN0IGdyb19jZWxscyAqZ2NlbGxzLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQp7CglzdHJ1Y3Qg Z3JvX2NlbGwgKmNlbGw7CglzdHJ1Y3QgbmV0X2RldmljZSAqZGV2ID0gc2tiLT5kZXY7CgoJaWYg KCFnY2VsbHMtPmNlbGxzIHx8IHNrYl9jbG9uZWQoc2tiKSB8fCAhKGRldi0+ZmVhdHVyZXMgJiBO RVRJRl9GX0dSTykpCiAgICA1NjVjOgkwZiA4NCA1NSAwNSAwMCAwMCAgICAJamUgICAgIDViYjcg PHZ4bGFuX3JjdisweDdlNz4KICAgIDU2NjI6CTRjIDg5IGU3ICAgICAgICAgICAgIAltb3YgICAg JXIxMiwlcmRpCiAgICA1NjY1OgllOCAwMCAwMCAwMCAwMCAgICAgICAJY2FsbHEgIDU2NmEgPHZ4 bGFuX3JjdisweDI5YT4KICoJb25lIG9mIG11bHRpcGxlIHNoYXJlZCBjb3BpZXMgb2YgdGhlIGJ1 ZmZlci4gQ2xvbmVkIGJ1ZmZlcnMgYXJlCiAqCXNoYXJlZCBkYXRhIHNvIG11c3Qgbm90IGJlIHdy aXR0ZW4gdG8gdW5kZXIgbm9ybWFsIGNpcmN1bXN0YW5jZXMuCiAqLwpzdGF0aWMgaW5saW5lIGlu dCBza2JfY2xvbmVkKGNvbnN0IHN0cnVjdCBza19idWZmICpza2IpCnsKCXJldHVybiBza2ItPmNs b25lZCAmJgogICAgNTY2YToJZTkgMjkgZmUgZmYgZmYgICAgICAgCWptcHEgICA1NDk4IDx2eGxh bl9yY3YrMHhjOD4KICAgIDU2NmY6CTQwIGY2IGM2IDA0ICAgICAgICAgIAl0ZXN0ICAgJDB4NCwl c2lsCiAgICA1NjczOgkwZiA4NCAxNyBmZSBmZiBmZiAgICAJamUgICAgIDU0OTAgPHZ4bGFuX3Jj disweGMwPgp9OwoKI2lmZGVmIE5FVF9TS0JVRkZfREFUQV9VU0VTX09GRlNFVApzdGF0aWMgaW5s aW5lIHVuc2lnbmVkIGNoYXIgKnNrYl9lbmRfcG9pbnRlcihjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAq c2tiKQp7CglyZXR1cm4gc2tiLT5oZWFkICsgc2tiLT5lbmQ7CiAgICA1Njc5Ogk0MCBmNiBjNiAz MSAgICAgICAgICAJdGVzdCAgICQweDMxLCVzaWwKICAgIDU2N2Q6CTBmIDg1IDBkIGZlIGZmIGZm ICAgIAlqbmUgICAgNTQ5MCA8dnhsYW5fcmN2KzB4YzA+CiAgICA1NjgzOgk0OCA4OSBmMCAgICAg ICAgICAgICAJbW92ICAgICVyc2ksJXJheAogICAgNTY4NjoJNDggYzEgZTggMTggICAgICAgICAg CXNociAgICAkMHgxOCwlcmF4CiAqCW9uZSBvZiBtdWx0aXBsZSBzaGFyZWQgY29waWVzIG9mIHRo ZSBidWZmZXIuIENsb25lZCBidWZmZXJzIGFyZQogKglzaGFyZWQgZGF0YSBzbyBtdXN0IG5vdCBi ZSB3cml0dGVuIHRvIHVuZGVyIG5vcm1hbCBjaXJjdW1zdGFuY2VzLgogKi8Kc3RhdGljIGlubGlu ZSBpbnQgc2tiX2Nsb25lZChjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQp7CglyZXR1cm4gc2ti LT5jbG9uZWQgJiYKICAgIDU2OGE6CTNjIDAyICAgICAgICAgICAgICAgIAljbXAgICAgJDB4Miwl YWwKICAgIDU2OGM6CTBmIDg0IDc3IDAyIDAwIDAwICAgIAlqZSAgICAgNTkwOSA8dnhsYW5fcmN2 KzB4NTM5PgoJCXJldHVybiBuZXRpZl9yeChza2IpOwogICAgNTY5MjoJM2MgMDMgICAgICAgICAg ICAgICAgCWNtcCAgICAkMHgzLCVhbAogICAgNTY5NDoJMGYgODQgNjUgMDIgMDAgMDAgICAgCWpl ICAgICA1OGZmIDx2eGxhbl9yY3YrMHg1MmY+CiAgICA1NjlhOgkzYyAwMSAgICAgICAgICAgICAg ICAJY21wICAgICQweDEsJWFsCiAgICA1NjljOgliYSAwOCAwMCAwMCAwMCAgICAgICAJbW92ICAg ICQweDgsJWVkeAoJCQkJc3RydWN0IHNrX2J1ZmYgKnNrYiwgdTMyIHZ4ZmxhZ3MpCnsKCXN0cnVj dCB2eGxhbmhkcl9ncGUgKmdwZSA9IChzdHJ1Y3QgdnhsYW5oZHJfZ3BlICopdW5wYXJzZWQ7CgoJ LyogTmVlZCB0byBoYXZlIE5leHQgUHJvdG9jb2wgc2V0IGZvciBpbnRlcmZhY2VzIGluIEdQRSBt b2RlLiAqLwoJaWYgKCFncGUtPm5wX2FwcGxpZWQpCiAgICA1NmExOgkwZiA4NSBlOSBmZCBmZiBm ZiAgICAJam5lICAgIDU0OTAgPHZ4bGFuX3JjdisweGMwPgogICAgNTZhNzoJNDEgODkgY2QgICAg ICAgICAgICAgCW1vdiAgICAlZWN4LCVyMTNkCgkJcmV0dXJuIGZhbHNlOwoJLyogIldoZW4gdGhl IE8gYml0IGlzIHNldCB0byAxLCB0aGUgcGFja2V0IGlzIGFuIE9BTSBwYWNrZXQgYW5kIE9BTQoJ ICogcHJvY2Vzc2luZyBNVVNUIG9jY3VyLiIgSG93ZXZlciwgd2UgZG9uJ3QgaW1wbGVtZW50IE9B TQoJICogcHJvY2Vzc2luZywgdGh1cyBkcm9wIHRoZSBwYWNrZXQuCgkgKi8KCWlmIChncGUtPm9h bV9mbGFnKQogICAgNTZhYToJNDggYjggMDAgMDAgMDAgMDAgZmYgCW1vdmFicyAkMHhmZmZmZmZm ZjAwMDAwMDAwLCVyYXgKICAgIDU2YjE6CWZmIGZmIGZmIAoJCXJldHVybiBmYWxzZTsKCglzd2l0 Y2ggKGdwZS0+bmV4dF9wcm90b2NvbCkgewogICAgNTZiNDoJYjkgMDEgMDAgMDAgMDAgICAgICAg CW1vdiAgICAkMHgxLCVlY3gKICAgIDU2Yjk6CTQxIDgxIGU1IGMyIGZmIGZmIDAwIAlhbmQgICAg JDB4ZmZmZmMyLCVyMTNkCiAgICA1NmMwOgk0OCAyMSBjNiAgICAgICAgICAgICAJYW5kICAgICVy YXgsJXJzaQogICAgNTZjMzoJYzYgNDQgMjQgMjcgMDEgICAgICAgCW1vdmIgICAkMHgxLDB4Mjco JXJzcCkKICAgIDU2Yzg6CTQ5IDA5IGY1ICAgICAgICAgICAgIAlvciAgICAgJXJzaSwlcjEzCiAg ICA1NmNiOgllOSAzNyBmZSBmZiBmZiAgICAgICAJam1wcSAgIDU1MDcgPHZ4bGFuX3JjdisweDEz Nz4KICAgIDU2ZDA6CTgzIGY4IDBmICAgICAgICAgICAgIAljbXAgICAgJDB4ZiwlZWF4CiAgICA1 NmQzOgkwZiA4NiBiNyBmZCBmZiBmZiAgICAJamJlICAgIDU0OTAgPHZ4bGFuX3JjdisweGMwPgoJ CWJyZWFrOwoJZGVmYXVsdDoKCQlyZXR1cm4gZmFsc2U7Cgl9CgoJdW5wYXJzZWQtPnZ4X2ZsYWdz ICY9IH5WWExBTl9HUEVfVVNFRF9CSVRTOwogICAgNTZkOToJYmUgMTAgMDAgMDAgMDAgICAgICAg CW1vdiAgICAkMHgxMCwlZXNpCiAgICA1NmRlOgk0YyA4OSBlNyAgICAgICAgICAgICAJbW92ICAg ICVyMTIsJXJkaQogICAgNTZlMToJMjkgZDYgICAgICAgICAgICAgICAgCXN1YiAgICAlZWR4LCVl c2kKICAgIDU2ZTM6CWU4IDAwIDAwIDAwIDAwICAgICAgIAljYWxscSAgNTZlOCA8dnhsYW5fcmN2 KzB4MzE4PgogICAgNTZlODoJNDggODUgYzAgICAgICAgICAgICAgCXRlc3QgICAlcmF4LCVyYXgK ICAgIDU2ZWI6CTBmIDg0IDlmIGZkIGZmIGZmICAgIAlqZSAgICAgNTQ5MCA8dnhsYW5fcmN2KzB4 YzA+CiAgICA1NmYxOgllOSAyMSBmZCBmZiBmZiAgICAgICAJam1wcSAgIDU0MTcgPHZ4bGFuX3Jj disweDQ3PgoJICogdXNlZCBieSBWWExBTiBleHRlbnNpb25zIGlmIGV4cGxpY2l0bHkgcmVxdWVz dGVkLgoJICovCglpZiAodnMtPmZsYWdzICYgVlhMQU5fRl9HUEUpIHsKCQlpZiAoIXZ4bGFuX3Bh cnNlX2dwZV9oZHIoJnVucGFyc2VkLCAmcHJvdG9jb2wsIHNrYiwgdnMtPmZsYWdzKSkKCQkJZ290 byBkcm9wOwoJCXJhd19wcm90byA9IHRydWU7CiAgICA1NmY2Ogk0MSAwZiBiNyA4NCAyNCBjMiAw MCAJbW92endsIDB4YzIoJXIxMiksJWVheAogICAgNTZmZDoJMDAgMDAgCgkJYnJlYWs7CglkZWZh dWx0OgoJCXJldHVybiBmYWxzZTsKCX0KCgl1bnBhcnNlZC0+dnhfZmxhZ3MgJj0gflZYTEFOX0dQ RV9VU0VEX0JJVFM7CiAgICA1NmZmOgk0OSA4YiA5NCAyNCBkMCAwMCAwMCAJbW92ICAgIDB4ZDAo JXIxMiksJXJkeAogICAgNTcwNjoJMDAgCgpzdGF0aWMgaW5saW5lIGludCBwc2tiX21heV9wdWxs KHN0cnVjdCBza19idWZmICpza2IsIHVuc2lnbmVkIGludCBsZW4pCnsKCWlmIChsaWtlbHkobGVu IDw9IHNrYl9oZWFkbGVuKHNrYikpKQoJCXJldHVybiAxOwoJaWYgKHVubGlrZWx5KGxlbiA+IHNr Yi0+bGVuKSkKICAgIDU3MDc6CTQxIGI4IDA0IDAwIDAwIDAwICAgIAltb3YgICAgJDB4NCwlcjhk CgkJcmV0dXJuIDA7CglyZXR1cm4gX19wc2tiX3B1bGxfdGFpbChza2IsIGxlbiAtIHNrYl9oZWFk bGVuKHNrYikpICE9IE5VTEw7CiAgICA1NzBkOgk0YyA4OSBlNyAgICAgICAgICAgICAJbW92ICAg ICVyMTIsJXJkaQogICAgNTcxMDoJOGIgNGMgMDIgMGMgICAgICAgICAgCW1vdiAgICAweGMoJXJk eCwlcmF4LDEpLCVlY3gKICAgIDU3MTQ6CTQ5IDhiIDQ3IDEwICAgICAgICAgIAltb3YgICAgMHgx MCglcjE1KSwlcmF4CglfX2JlMTYgcHJvdG9jb2wgPSBodG9ucyhFVEhfUF9URUIpOwoJYm9vbCBy YXdfcHJvdG8gPSBmYWxzZTsKCXZvaWQgKm9pcGg7CgoJLyogTmVlZCBVRFAgYW5kIFZYTEFOIGhl YWRlciB0byBiZSBwcmVzZW50ICovCglpZiAoIXBza2JfbWF5X3B1bGwoc2tiLCBWWExBTl9ITEVO KSkKICAgIDU3MTg6CWJhIDAwIDA0IDAwIDAwICAgICAgIAltb3YgICAgJDB4NDAwLCVlZHgKICAg IDU3MWQ6CTQ4IDhiIDQwIDIwICAgICAgICAgIAltb3YgICAgMHgyMCglcmF4KSwlcmF4CiAgICA1 NzIxOgljMSBlMSAwOCAgICAgICAgICAgICAJc2hsICAgICQweDgsJWVjeAogICAgNTcyNDoJNDgg YzEgZTEgMjAgICAgICAgICAgCXNobCAgICAkMHgyMCwlcmN4CglpZiAoX19pcHR1bm5lbF9wdWxs X2hlYWRlcihza2IsIFZYTEFOX0hMRU4sIHByb3RvY29sLCByYXdfcHJvdG8sCgkJCQkgICAhbmV0 X2VxKHZ4bGFuLT5uZXQsIGRldl9uZXQodnhsYW4tPmRldikpKSkKCQkJZ290byBkcm9wOwoKCWlm ICh2eGxhbl9jb2xsZWN0X21ldGFkYXRhKHZzKSkgewoJCV9fYmUzMiB2bmkgPSB2eGxhbl92bmko dnhsYW5faGRyKHNrYiktPnZ4X3ZuaSk7CiAgICA1NzI4OgkwZiBiNyA3MCAxMCAgICAgICAgICAJ bW92endsIDB4MTAoJXJheCksJWVzaQogICAgNTcyYzoJZTggMDAgMDAgMDAgMDAgICAgICAgCWNh bGxxICA1NzMxIDx2eGxhbl9yY3YrMHgzNjE+CiAgICA1NzMxOgk0OCA4NSBjMCAgICAgICAgICAg ICAJdGVzdCAgICVyYXgsJXJheAogICAgNTczNDoJMGYgODQgNTYgZmQgZmYgZmYgICAgCWplICAg ICA1NDkwIDx2eGxhbl9yY3YrMHhjMD4KCQlzdHJ1Y3QgbWV0YWRhdGFfZHN0ICp0dW5fZHN0OwoK CQl0dW5fZHN0ID0gdWRwX3R1bl9yeF9kc3Qoc2tiLCB2eGxhbl9nZXRfc2tfZmFtaWx5KHZzKSwg VFVOTkVMX0tFWSwKICAgIDU3M2E6CTQ5IDg5IDQ0IDI0IDU4ICAgICAgIAltb3YgICAgJXJheCww eDU4KCVyMTIpCiAgICA1NzNmOgk0YyA4ZCA4MCBmMCAwMCAwMCAwMCAJbGVhICAgIDB4ZjAoJXJh eCksJXI4CiAgICA1NzQ2Ogk0MSA4YiA5NyAxYyAyMCAwMCAwMCAJbW92ICAgIDB4MjAxYyglcjE1 KSwlZWR4CiAgICA1NzRkOgllOSAwMiBmZSBmZiBmZiAgICAgICAJam1wcSAgIDU1NTQgPHZ4bGFu X3JjdisweDE4ND4KICAgIDU3NTI6CTQxIGY3IGM1IDAwIDIwIDAwIDAwIAl0ZXN0ICAgJDB4MjAw MCwlcjEzZAogICAgNTc1OToJNDUgODkgZTkgICAgICAgICAgICAgCW1vdiAgICAlcjEzZCwlcjlk CiAgICA1NzVjOgkwZiA4NCAxNyAwMSAwMCAwMCAgICAJamUgICAgIDU4NzkgPHZ4bGFuX3Jjdisw eDRhOT4KCQkJCQkgdnhsYW5fdm5pX3RvX3R1bl9pZCh2bmkpLCBzaXplb2YoKm1kKSk7CgoJCWlm ICghdHVuX2RzdCkKICAgIDU3NjI6CTQxIGY2IDg0IDI0IDkzIDAwIDAwIAl0ZXN0YiAgJDB4MTAs MHg5MyglcjEyKQogICAgNTc2OToJMDAgMTAgCiAqIFNldHMgc2tiIGRzdCwgYXNzdW1pbmcgYSBy ZWZlcmVuY2Ugd2FzIHRha2VuIG9uIGRzdCBhbmQgc2hvdWxkCiAqIGJlIHJlbGVhc2VkIGJ5IHNr Yl9kc3RfZHJvcCgpCiAqLwpzdGF0aWMgaW5saW5lIHZvaWQgc2tiX2RzdF9zZXQoc3RydWN0IHNr X2J1ZmYgKnNrYiwgc3RydWN0IGRzdF9lbnRyeSAqZHN0KQp7Cglza2ItPl9za2JfcmVmZHN0ID0g KHVuc2lnbmVkIGxvbmcpZHN0OwogICAgNTc2YjoJMGYgODUgMDggMDEgMDAgMDAgICAgCWpuZSAg ICA1ODc5IDx2eGxhbl9yY3YrMHg0YTk+Cgl9Cn0KCnN0YXRpYyBpbmxpbmUgdm9pZCAqaXBfdHVu bmVsX2luZm9fb3B0cyhzdHJ1Y3QgaXBfdHVubmVsX2luZm8gKmluZm8pCnsKCXJldHVybiBpbmZv ICsgMTsKICAgIDU3NzE6CTQxIDgxIGU2IDAwIDAwIDAwIDdmIAlhbmQgICAgJDB4N2YwMDAwMDAs JXIxNGQKICAgIDU3Nzg6CTQ4IDk4ICAgICAgICAgICAgICAgIAljbHRxICAgCiAgICA1NzdhOgk0 MSA4YiBiYyAyNCA4MCAwMCAwMCAJbW92ICAgIDB4ODAoJXIxMiksJWVkaQogICAgNTc4MToJMDAg CnN0YXRpYyBib29sIHZ4bGFuX3JlbWNzdW0oc3RydWN0IHZ4bGFuaGRyICp1bnBhcnNlZCwKCQkJ ICBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCB1MzIgdnhmbGFncykKewoJc2l6ZV90IHN0YXJ0LCBvZmZz ZXQ7CgoJaWYgKCEodW5wYXJzZWQtPnZ4X2ZsYWdzICYgVlhMQU5fSEZfUkNPKSB8fCBza2ItPnJl bWNzdW1fb2ZmbG9hZCkKICAgIDU3ODI6CTQxIDBmIGNlICAgICAgICAgICAgIAlic3dhcCAgJXIx NGQKICAgIDU3ODU6CTQ4IGMxIGY4IDNmICAgICAgICAgIAlzYXIgICAgJDB4M2YsJXJheAogICAg NTc4OToJNDMgOGQgMzQgMzYgICAgICAgICAgCWxlYSAgICAoJXIxNCwlcjE0LDEpLCVlc2kKICAg IDU3OGQ6CTQ4IDgzIGUwIGY2ICAgICAgICAgIAlhbmQgICAgJDB4ZmZmZmZmZmZmZmZmZmZmNiwl cmF4CiAgICA1NzkxOgk0OCA4ZCA0NCAwNiAxMCAgICAgICAJbGVhICAgIDB4MTAoJXJzaSwlcmF4 LDEpLCVyYXgKICAgIDU3OTY6CTQ5IDg5IGY2ICAgICAgICAgICAgIAltb3YgICAgJXJzaSwlcjE0 CiAgICA1Nzk5Ogk4OSBmZSAgICAgICAgICAgICAgICAJbW92ICAgICVlZGksJWVzaQogICAgNTc5 YjoJNDEgMmIgYjQgMjQgODQgMDAgMDAgCXN1YiAgICAweDg0KCVyMTIpLCVlc2kKICAgIDU3YTI6 CTAwIAojZW5kaWYKfQoKc3RhdGljIGlubGluZSBzaXplX3QgdnhsYW5fcmNvX3N0YXJ0KF9fYmUz MiB2bmlfZmllbGQpCnsKCXJldHVybiBiZTMyX3RvX2NwdSh2bmlfZmllbGQgJiBWWExBTl9SQ09f TUFTSykgPDwgVlhMQU5fUkNPX1NISUZUOwogICAgNTdhMzoJNDggODkgNDQgMjQgMTggICAgICAg CW1vdiAgICAlcmF4LDB4MTgoJXJzcCkKfQoKc3RhdGljIGlubGluZSBzaXplX3QgdnhsYW5fcmNv X29mZnNldChfX2JlMzIgdm5pX2ZpZWxkKQp7CglyZXR1cm4gKHZuaV9maWVsZCAmIFZYTEFOX1JD T19VRFApID8KCQlvZmZzZXRvZihzdHJ1Y3QgdWRwaGRyLCBjaGVjaykgOgogICAgNTdhODoJODMg YzAgMDIgICAgICAgICAgICAgCWFkZCAgICAkMHgyLCVlYXgKICAgIDU3YWI6CTM5IGYwICAgICAg ICAgICAgICAgIAljbXAgICAgJWVzaSwlZWF4CiAgICA1N2FkOgkwZiA4NyA2NSAwNSAwMCAwMCAg ICAJamEgICAgIDVkMTggPHZ4bGFuX3JjdisweDk0OD4KI2VuZGlmCn0KCnN0YXRpYyBpbmxpbmUg c2l6ZV90IHZ4bGFuX3Jjb19zdGFydChfX2JlMzIgdm5pX2ZpZWxkKQp7CglyZXR1cm4gYmUzMl90 b19jcHUodm5pX2ZpZWxkICYgVlhMQU5fUkNPX01BU0spIDw8IFZYTEFOX1JDT19TSElGVDsKICAg IDU3YjM6CTQxIDBmIGI3IDg0IDI0IGMyIDAwIAltb3Z6d2wgMHhjMiglcjEyKSwlZWF4CiAgICA1 N2JhOgkwMCAwMCAKICAgIDU3YmM6CTQ5IDhiIGI0IDI0IGQwIDAwIDAwIAltb3YgICAgMHhkMCgl cjEyKSwlcnNpCiAgICA1N2MzOgkwMCAKCQlnb3RvIG91dDsKCglzdGFydCA9IHZ4bGFuX3Jjb19z dGFydCh1bnBhcnNlZC0+dnhfdm5pKTsKCW9mZnNldCA9IHN0YXJ0ICsgdnhsYW5fcmNvX29mZnNl dCh1bnBhcnNlZC0+dnhfdm5pKTsKICAgIDU3YzQ6CTgwIGU2IDEwICAgICAgICAgICAgIAlhbmQg ICAgJDB4MTAsJWRoCiAgICA1N2M3Ogk0YyA4ZCA1NCAwNiAxMCAgICAgICAJbGVhICAgIDB4MTAo JXJzaSwlcmF4LDEpLCVyMTAKCXJldHVybiBza2ItPmRhdGFfbGVuOwp9CgpzdGF0aWMgaW5saW5l IHVuc2lnbmVkIGludCBza2JfaGVhZGxlbihjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQp7Cgly ZXR1cm4gc2tiLT5sZW4gLSBza2ItPmRhdGFfbGVuOwogICAgNTdjYzoJMGYgODQgMDkgMDUgMDAg MDAgICAgCWplICAgICA1Y2RiIDx2eGxhbl9yY3YrMHg5MGI+CiAgICA1N2QyOgk0MSAwZiBiNiA4 NCAyNCA5MSAwMCAJbW92emJsIDB4OTEoJXIxMiksJWVheAogICAgNTdkOToJMDAgMDAgCglyZXR1 cm4gdW5saWtlbHkobGVuID4gc2tiLT5sZW4pID8gTlVMTCA6IF9fcHNrYl9wdWxsKHNrYiwgbGVu KTsKfQoKc3RhdGljIGlubGluZSBpbnQgcHNrYl9tYXlfcHVsbChzdHJ1Y3Qgc2tfYnVmZiAqc2ti LCB1bnNpZ25lZCBpbnQgbGVuKQp7CglpZiAobGlrZWx5KGxlbiA8PSBza2JfaGVhZGxlbihza2Ip KSkKICAgIDU3ZGI6CTgzIGUwIDA2ICAgICAgICAgICAgIAlhbmQgICAgJDB4NiwlZWF4CiAgICA1 N2RlOgkzYyAwNCAgICAgICAgICAgICAgICAJY21wICAgICQweDQsJWFsCiAgICA1N2UwOgkwZiA4 NSA1OCAwNiAwMCAwMCAgICAJam5lICAgIDVlM2UgPHZ4bGFuX3JjdisweGE2ZT4KCglpZiAoIXBz a2JfbWF5X3B1bGwoc2tiLCBvZmZzZXQgKyBzaXplb2YodTE2KSkpCgkJcmV0dXJuIGZhbHNlOwoK CXNrYl9yZW1jc3VtX3Byb2Nlc3Moc2tiLCAodm9pZCAqKSh2eGxhbl9oZHIoc2tiKSArIDEpLCBz dGFydCwgb2Zmc2V0LAogICAgNTdlNjoJNDUgOGIgOWMgMjQgOTggMDAgMDAgCW1vdiAgICAweDk4 KCVyMTIpLCVyMTFkCiAgICA1N2VkOgkwMCAKICAgIDU3ZWU6CTQ4IDYzIDQ0IDI0IDE4ICAgICAg IAltb3ZzbHEgMHgxOCglcnNwKSwlcmF4CiAgICA1N2YzOgkzMSBkMiAgICAgICAgICAgICAgICAJ eG9yICAgICVlZHgsJWVkeApzdGF0aWMgaW5saW5lIHZvaWQgc2tiX3JlbWNzdW1fcHJvY2Vzcyhz dHJ1Y3Qgc2tfYnVmZiAqc2tiLCB2b2lkICpwdHIsCgkJCQkgICAgICAgaW50IHN0YXJ0LCBpbnQg b2Zmc2V0LCBib29sIG5vcGFydGlhbCkKewoJX193c3VtIGRlbHRhOwoKCWlmICghbm9wYXJ0aWFs KSB7CiAgICA1N2Y1Ogk0NCA4OSBmNiAgICAgICAgICAgICAJbW92ICAgICVyMTRkLCVlc2kKICAg IDU3Zjg6CTRjIDg5IGQ3ICAgICAgICAgICAgIAltb3YgICAgJXIxMCwlcmRpCiAgICA1N2ZiOgk0 NCA4OSA1YyAyNCAwOCAgICAgICAJbW92ICAgICVyMTFkLDB4OCglcnNwKQogICAgNTgwMDoJNDQg ODkgNGMgMjQgMjAgICAgICAgCW1vdiAgICAlcjlkLDB4MjAoJXJzcCkKCQlza2JfcmVtY3N1bV9h ZGp1c3RfcGFydGlhbChza2IsIHB0ciwgc3RhcnQsIG9mZnNldCk7CgkJcmV0dXJuOwoJfQoKCSBp ZiAodW5saWtlbHkoc2tiLT5pcF9zdW1tZWQgIT0gQ0hFQ0tTVU1fQ09NUExFVEUpKSB7CiAgICA1 ODA1Ogk0YyA4OSA0NCAyNCAxMCAgICAgICAJbW92ICAgICVyOCwweDEwKCVyc3ApCiAgICA1ODBh Ogk0OSA4ZCAwYyAwMiAgICAgICAgICAJbGVhICAgICglcjEwLCVyYXgsMSksJXJjeAogICAgNTgw ZToJNDggODkgNGMgMjQgMTggICAgICAgCW1vdiAgICAlcmN4LDB4MTgoJXJzcCkKICAgIDU4MTM6 CWU4IDAwIDAwIDAwIDAwICAgICAgIAljYWxscSAgNTgxOCA8dnhsYW5fcmN2KzB4NDQ4PgogICAg NTgxODoJNDggOGIgNGMgMjQgMTggICAgICAgCW1vdiAgICAweDE4KCVyc3ApLCVyY3gKICAgIDU4 MWQ6CWY3IGQwICAgICAgICAgICAgICAgIAlub3QgICAgJWVheAogICAgNTgxZjoJNDQgOGIgNWMg MjQgMDggICAgICAgCW1vdiAgICAweDgoJXJzcCksJXIxMWQKCV9fd3N1bSBkZWx0YTsKCgkvKiBT dWJ0cmFjdCBvdXQgY2hlY2tzdW0gdXAgdG8gc3RhcnQgKi8KCWNzdW0gPSBjc3VtX3N1Yihjc3Vt LCBjc3VtX3BhcnRpYWwocHRyLCBzdGFydCwgMCkpOwogICAgNTgyNDoJNDEgMDEgYzMgICAgICAg ICAgICAgCWFkZCAgICAlZWF4LCVyMTFkCiAgICA1ODI3Ogk0MSA4MyBkMyAwMCAgICAgICAgICAJ YWRjICAgICQweDAsJXIxMWQKICAgIDU4MmI6CTQ0IDg5IGRhICAgICAgICAgICAgIAltb3YgICAg JXIxMWQsJWVkeAogICAgNTgyZToJNjYgNDUgMzEgZGIgICAgICAgICAgCXhvciAgICAlcjExdywl cjExdwogICAgNTgzMjoJNDQgOGIgNGMgMjQgMjAgICAgICAgCW1vdiAgICAweDIwKCVyc3ApLCVy OWQKICAgIDU4Mzc6CTBmIGI3IDMxICAgICAgICAgICAgIAltb3Z6d2wgKCVyY3gpLCVlc2kKfQoK c3RhdGljIGlubGluZSBfX3dzdW0gcmVtY3N1bV9hZGp1c3Qodm9pZCAqcHRyLCBfX3dzdW0gY3N1 bSwKCQkJCSAgICBpbnQgc3RhcnQsIGludCBvZmZzZXQpCnsKCV9fc3VtMTYgKnBzdW0gPSAoX19z dW0xNiAqKShwdHIgKyBvZmZzZXQpOwogICAgNTgzYToJYzEgZTIgMTAgICAgICAgICAgICAgCXNo bCAgICAkMHgxMCwlZWR4CiAgICA1ODNkOgk0NCA4OSBkOCAgICAgICAgICAgICAJbW92ICAgICVy MTFkLCVlYXgKICAgIDU4NDA6CTAxIGQwICAgICAgICAgICAgICAgIAlhZGQgICAgJWVkeCwlZWF4 CiAgICA1ODQyOgkxNSBmZiBmZiAwMCAwMCAgICAgICAJYWRjICAgICQweGZmZmYsJWVheAoJX193 c3VtIGRlbHRhOwoKCS8qIFN1YnRyYWN0IG91dCBjaGVja3N1bSB1cCB0byBzdGFydCAqLwoJY3N1 bSA9IGNzdW1fc3ViKGNzdW0sIGNzdW1fcGFydGlhbChwdHIsIHN0YXJ0LCAwKSk7CiAgICA1ODQ3 OglmNyBkMCAgICAgICAgICAgICAgICAJbm90ICAgICVlYXgKICAgIDU4NDk6CTRjIDhiIDQ0IDI0 IDEwICAgICAgIAltb3YgICAgMHgxMCglcnNwKSwlcjgKICAgIDU4NGU6CWMxIGU4IDEwICAgICAg ICAgICAgIAlzaHIgICAgJDB4MTAsJWVheAogICAgNTg1MToJNjYgODkgMDEgICAgICAgICAgICAg CW1vdiAgICAlYXgsKCVyY3gpCiAgICA1ODU0Ogk4OSBjMiAgICAgICAgICAgICAgICAJbW92ICAg ICVlYXgsJWVkeAogICAgNTg1NjoJZjcgZDYgICAgICAgICAgICAgICAgCW5vdCAgICAlZXNpCiAg ICA1ODU4Ogk0MSA4YiA4NCAyNCA5OCAwMCAwMCAJbW92ICAgIDB4OTgoJXIxMiksJWVheAogICAg NTg1ZjoJMDAgCnsKCWFzbSgiICBhZGRsICUxLCUwXG4iCgkgICAgIiAgYWRjbCAkMHhmZmZmLCUw IgoJICAgIDogIj1yIiAoc3VtKQoJICAgIDogInIiICgoX19mb3JjZSB1MzIpc3VtIDw8IDE2KSwK CSAgICAgICIwIiAoKF9fZm9yY2UgdTMyKXN1bSAmIDB4ZmZmZjAwMDApKTsKICAgIDU4NjA6CTAx IGYyICAgICAgICAgICAgICAgIAlhZGQgICAgJWVzaSwlZWR4CiAgICA1ODYyOgk4MyBkMiAwMCAg ICAgICAgICAgICAJYWRjICAgICQweDAsJWVkeAogICAgNTg2NToJMDEgZDAgICAgICAgICAgICAg ICAgCWFkZCAgICAlZWR4LCVlYXgKY3N1bV9pcHY2X21hZ2ljKGNvbnN0IHN0cnVjdCBpbjZfYWRk ciAqc2FkZHIsIGNvbnN0IHN0cnVjdCBpbjZfYWRkciAqZGFkZHIsCgkJX191MzIgbGVuLCBfX3U4 IHByb3RvLCBfX3dzdW0gc3VtKTsKCnN0YXRpYyBpbmxpbmUgdW5zaWduZWQgYWRkMzJfd2l0aF9j YXJyeSh1bnNpZ25lZCBhLCB1bnNpZ25lZCBiKQp7Cglhc20oImFkZGwgJTIsJTBcblx0IgogICAg NTg2NzoJODMgZDAgMDAgICAgICAgICAgICAgCWFkYyAgICAkMHgwLCVlYXgKc3RhdGljIGlubGlu ZSBfX3N1bTE2IGNzdW1fZm9sZChfX3dzdW0gc3VtKQp7Cglhc20oIiAgYWRkbCAlMSwlMFxuIgoJ ICAgICIgIGFkY2wgJDB4ZmZmZiwlMCIKCSAgICA6ICI9ciIgKHN1bSkKCSAgICA6ICJyIiAoKF9f Zm9yY2UgdTMyKXN1bSA8PCAxNiksCiAgICA1ODZhOgk0MSA4OSA4NCAyNCA5OCAwMCAwMCAJbW92 ICAgICVlYXgsMHg5OCglcjEyKQogICAgNTg3MToJMDAgCiAqIHRoZSBsYXN0IHN0ZXAgYmVmb3Jl IHB1dHRpbmcgYSBjaGVja3N1bSBpbnRvIGEgcGFja2V0LgogKiBNYWtlIHN1cmUgbm90IHRvIG1p eCB3aXRoIDY0Yml0IGNoZWNrc3Vtcy4KICovCnN0YXRpYyBpbmxpbmUgX19zdW0xNiBjc3VtX2Zv bGQoX193c3VtIHN1bSkKewoJYXNtKCIgIGFkZGwgJTEsJTBcbiIKICAgIDU4NzI6CTQxIDhiIDk3 IDFjIDIwIDAwIDAwIAltb3YgICAgMHgyMDFjKCVyMTUpLCVlZHgKY3N1bV9pcHY2X21hZ2ljKGNv bnN0IHN0cnVjdCBpbjZfYWRkciAqc2FkZHIsIGNvbnN0IHN0cnVjdCBpbjZfYWRkciAqZGFkZHIs CgkJX191MzIgbGVuLCBfX3U4IHByb3RvLCBfX3dzdW0gc3VtKTsKCnN0YXRpYyBpbmxpbmUgdW5z aWduZWQgYWRkMzJfd2l0aF9jYXJyeSh1bnNpZ25lZCBhLCB1bnNpZ25lZCBiKQp7Cglhc20oImFk ZGwgJTIsJTBcblx0IgogICAgNTg3OToJNDQgODkgYzkgICAgICAgICAgICAgCW1vdiAgICAlcjlk LCVlY3gKICAgIDU4N2M6CTQ4IGI4IDAwIDAwIDAwIDAwIGZmIAltb3ZhYnMgJDB4ZmZmZmZmZmYw MDAwMDAwMCwlcmF4CiAgICA1ODgzOglmZiBmZiBmZiAKICAgIDU4ODY6CTMxIGZmICAgICAgICAg ICAgICAgIAl4b3IgICAgJWVkaSwlZWRpCiAgICA1ODg4Ogk4MCBlNSBkZiAgICAgICAgICAgICAJ YW5kICAgICQweGRmLCVjaAogICAgNTg4YjoJNDkgMjEgYzUgICAgICAgICAgICAgCWFuZCAgICAl cmF4LCVyMTMKICAgIDU4OGU6CTg5IGNlICAgICAgICAgICAgICAgIAltb3YgICAgJWVjeCwlZXNp CiAgICA1ODkwOgk0OSAwOSBmNSAgICAgICAgICAgICAJb3IgICAgICVyc2ksJXIxMwogICAgNTg5 MzoJZTkgZDIgZmMgZmYgZmYgICAgICAgCWptcHEgICA1NTZhIDx2eGxhbl9yY3YrMHgxOWE+CiAg ICA1ODk4OglmNiBjMSA4MCAgICAgICAgICAgICAJdGVzdCAgICQweDgwLCVjbAoJfQoKCWRlbHRh ID0gcmVtY3N1bV9hZGp1c3QocHRyLCBza2ItPmNzdW0sIHN0YXJ0LCBvZmZzZXQpOwoKCS8qIEFk anVzdCBza2ItPmNzdW0gc2luY2Ugd2UgY2hhbmdlZCB0aGUgcGFja2V0ICovCglza2ItPmNzdW0g PSBjc3VtX2FkZChza2ItPmNzdW0sIGRlbHRhKTsKICAgIDU4OWI6CTc0IDVhICAgICAgICAgICAg ICAgIAlqZSAgICAgNThmNyA8dnhsYW5fcmN2KzB4NTI3PgogICAgNTg5ZDoJNGMgODkgZWUgICAg ICAgICAgICAgCW1vdiAgICAlcjEzLCVyc2kKICAgIDU4YTA6CTQ4IGMxIGVlIDEwICAgICAgICAg IAlzaHIgICAgJDB4MTAsJXJzaQogICAgNThhNDoJNjYgYzEgYzYgMDggICAgICAgICAgCXJvbCAg ICAkMHg4LCVzaQogICAgNThhODoJMGYgYjcgZjYgICAgICAgICAgICAgCW1vdnp3bCAlc2ksJWVz aQoJCQkgICAgISEodnhmbGFncyAmIFZYTEFOX0ZfUkVNQ1NVTV9OT1BBUlRJQUwpKTsKb3V0OgoJ dW5wYXJzZWQtPnZ4X2ZsYWdzICY9IH5WWExBTl9IRl9SQ087CiAgICA1OGFiOgk0MSA4OSAzMCAg ICAgICAgICAgICAJbW92ICAgICVlc2ksKCVyOCkKICAgIDU4YWU6CTQ5IDhiIDc0IDI0IDU4ICAg ICAgIAltb3YgICAgMHg1OCglcjEyKSwlcnNpCiAgICA1OGIzOgk0OCA4MyBlNiBmZSAgICAgICAg ICAJYW5kICAgICQweGZmZmZmZmZmZmZmZmZmZmUsJXJzaQoJdW5wYXJzZWQtPnZ4X3ZuaSAmPSBW WExBTl9WTklfTUFTSzsKICAgIDU4Yjc6CTc0IDBmICAgICAgICAgICAgICAgIAlqZSAgICAgNThj OCA8dnhsYW5fcmN2KzB4NGY4PgoJCXJldHVybiBmYWxzZTsKCglza2JfcmVtY3N1bV9wcm9jZXNz KHNrYiwgKHZvaWQgKikodnhsYW5faGRyKHNrYikgKyAxKSwgc3RhcnQsIG9mZnNldCwKCQkJICAg ICEhKHZ4ZmxhZ3MgJiBWWExBTl9GX1JFTUNTVU1fTk9QQVJUSUFMKSk7Cm91dDoKCXVucGFyc2Vk LT52eF9mbGFncyAmPSB+VlhMQU5fSEZfUkNPOwogICAgNThiOToJNjYgODMgOGUgYzggMDAgMDAg MDAgCW9ydyAgICAkMHgxMCwweGM4KCVyc2kpCiAgICA1OGMwOgkxMCAKICAgIDU4YzE6CWM2IDg2 IGU4IDAwIDAwIDAwIDA0IAltb3ZiICAgJDB4NCwweGU4KCVyc2kpCgkJCQlzdHJ1Y3QgdnhsYW5f bWV0YWRhdGEgKm1kKQp7CglzdHJ1Y3QgdnhsYW5oZHJfZ2JwICpnYnAgPSAoc3RydWN0IHZ4bGFu aGRyX2dicCAqKXVucGFyc2VkOwoJc3RydWN0IG1ldGFkYXRhX2RzdCAqdHVuX2RzdDsKCglpZiAo ISh1bnBhcnNlZC0+dnhfZmxhZ3MgJiBWWExBTl9IRl9HQlApKQogICAgNThjODoJNDQgODkgZTgg ICAgICAgICAgICAgCW1vdiAgICAlcjEzZCwlZWF4CiAgICA1OGNiOgkwZiBiNiBmNCAgICAgICAg ICAgICAJbW92emJsICVhaCwlZXNpCgkJZ290byBvdXQ7CgoJbWQtPmdicCA9IG50b2hzKGdicC0+ cG9saWN5X2lkKTsKICAgIDU4Y2U6CTQwIGY2IGM2IDQwICAgICAgICAgIAl0ZXN0ICAgJDB4NDAs JXNpbAogICAgNThkMjoJNzQgMDcgICAgICAgICAgICAgICAgCWplICAgICA1OGRiIDx2eGxhbl9y Y3YrMHg1MGI+CiAgICA1OGQ0Ogk0MSA4MSAwOCAwMCAwMCA0MCAwMCAJb3JsICAgICQweDQwMDAw MCwoJXI4KQogICAgNThkYjoJODMgZTYgMDggICAgICAgICAgICAgCWFuZCAgICAkMHg4LCVlc2kK Cgl0dW5fZHN0ID0gKHN0cnVjdCBtZXRhZGF0YV9kc3QgKilza2JfZHN0KHNrYik7CglpZiAodHVu X2RzdCkgewogICAgNThkZToJNzQgMDcgICAgICAgICAgICAgICAgCWplICAgICA1OGU3IDx2eGxh bl9yY3YrMHg1MTc+CiAgICA1OGUwOgk0MSA4MSAwOCAwMCAwMCAwOCAwMCAJb3JsICAgICQweDgw MDAwLCglcjgpCiAgICA1OGU3Ogk4MCBlNiAyMCAgICAgICAgICAgICAJYW5kICAgICQweDIwLCVk aAoJCXR1bl9kc3QtPnUudHVuX2luZm8ua2V5LnR1bl9mbGFncyB8PSBUVU5ORUxfVlhMQU5fT1BU OwogICAgNThlYToJNzUgMGIgICAgICAgICAgICAgICAgCWpuZSAgICA1OGY3IDx2eGxhbl9yY3Yr MHg1Mjc+CiAgICA1OGVjOgk0MSA4YiAxMCAgICAgICAgICAgICAJbW92ICAgICglcjgpLCVlZHgK ICAgIDU4ZWY6CTQxIDg5IDk0IDI0IGI0IDAwIDAwIAltb3YgICAgJWVkeCwweGI0KCVyMTIpCiAg ICA1OGY2OgkwMCAKCQl0dW5fZHN0LT51LnR1bl9pbmZvLm9wdGlvbnNfbGVuID0gc2l6ZW9mKCpt ZCk7CiAgICA1OGY3Ogk4MyBlMSA3ZiAgICAgICAgICAgICAJYW5kICAgICQweDdmLCVlY3gKCX0K CWlmIChnYnAtPmRvbnRfbGVhcm4pCiAgICA1OGZhOgllOSA3NCBmYyBmZiBmZiAgICAgICAJam1w cSAgIDU1NzMgPHZ4bGFuX3JjdisweDFhMz4KICAgIDU4ZmY6CWJhIDY1IDU4IDAwIDAwICAgICAg IAltb3YgICAgJDB4NTg2NSwlZWR4CgkJbWQtPmdicCB8PSBWWExBTl9HQlBfRE9OVF9MRUFSTjsK ICAgIDU5MDQ6CWU5IDllIGZkIGZmIGZmICAgICAgIAlqbXBxICAgNTZhNyA8dnhsYW5fcmN2KzB4 MmQ3PgogICAgNTkwOToJYmEgODYgZGQgMDAgMDAgICAgICAgCW1vdiAgICAkMHhkZDg2LCVlZHgK CglpZiAoZ2JwLT5wb2xpY3lfYXBwbGllZCkKICAgIDU5MGU6CWU5IDk0IGZkIGZmIGZmICAgICAg IAlqbXBxICAgNTZhNyA8dnhsYW5fcmN2KzB4MmQ3PgoJCW1kLT5nYnAgfD0gVlhMQU5fR0JQX1BP TElDWV9BUFBMSUVEOwogICAgNTkxMzoJNDkgOGIgODQgMjQgZDggMDAgMDAgCW1vdiAgICAweGQ4 KCVyMTIpLCVyYXgKICAgIDU5MWE6CTAwIAoKCS8qIEluIGZsb3ctYmFzZWQgbW9kZSwgR0JQIGlz IGNhcnJpZWQgaW4gZHN0X21ldGFkYXRhICovCglpZiAoISh2eGZsYWdzICYgVlhMQU5fRl9DT0xM RUNUX01FVEFEQVRBKSkKICAgIDU5MWI6CTQ5IDJiIDg0IDI0IGQwIDAwIDAwIAlzdWIgICAgMHhk MCglcjEyKSwlcmF4CiAgICA1OTIyOgkwMCAKCQlza2ItPm1hcmsgPSBtZC0+Z2JwOwogICAgNTky MzoJNGMgODkgZTcgICAgICAgICAgICAgCW1vdiAgICAlcjEyLCVyZGkKICAgIDU5MjY6CTY2IDQx IDg5IDg0IDI0IGM2IDAwIAltb3YgICAgJWF4LDB4YzYoJXIxMikKICAgIDU5MmQ6CTAwIDAwIApv dXQ6Cgl1bnBhcnNlZC0+dnhfZmxhZ3MgJj0gflZYTEFOX0dCUF9VU0VEX0JJVFM7CiAgICA1OTJm Ogk0OCA4YiA3MyAzMCAgICAgICAgICAJbW92ICAgIDB4MzAoJXJieCksJXJzaQogICAgNTkzMzoJ ZTggMDAgMDAgMDAgMDAgICAgICAgCWNhbGxxICA1OTM4IDx2eGxhbl9yY3YrMHg1Njg+CiAgICA1 OTM4Ogk2NiA0MSA4OSA4NCAyNCBjMCAwMCAJbW92ICAgICVheCwweGMwKCVyMTIpCiAgICA1OTNm OgkwMCAwMCAKCSAqIHByb2Nlc3NpbmcsIHRodXMgZHJvcCB0aGUgcGFja2V0LgoJICovCglpZiAo Z3BlLT5vYW1fZmxhZykKCQlyZXR1cm4gZmFsc2U7CgoJc3dpdGNoIChncGUtPm5leHRfcHJvdG9j b2wpIHsKICAgIDU5NDE6CTQxIDBmIGI2IDg0IDI0IDkxIDAwIAltb3Z6YmwgMHg5MSglcjEyKSwl ZWF4CiAgICA1OTQ4OgkwMCAwMCAKCXJldHVybiBza2ItPm1hY19oZWFkZXIgIT0gKHR5cGVvZihz a2ItPm1hY19oZWFkZXIpKX4wVTsKfQoKc3RhdGljIGlubGluZSB2b2lkIHNrYl9yZXNldF9tYWNf aGVhZGVyKHN0cnVjdCBza19idWZmICpza2IpCnsKCXNrYi0+bWFjX2hlYWRlciA9IHNrYi0+ZGF0 YSAtIHNrYi0+aGVhZDsKICAgIDU5NGE6CTQxIDBmIGI3IGI0IDI0IGM2IDAwIAltb3Z6d2wgMHhj NiglcjEyKSwlZXNpCiAgICA1OTUxOgkwMCAwMCAKCQkJICBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQp7 Cgl1bmlvbiB2eGxhbl9hZGRyIHNhZGRyOwoKCXNrYl9yZXNldF9tYWNfaGVhZGVyKHNrYik7Cglz a2ItPnByb3RvY29sID0gZXRoX3R5cGVfdHJhbnMoc2tiLCB2eGxhbi0+ZGV2KTsKICAgIDU5NTM6 CTQ5IDhiIDhjIDI0IGQwIDAwIDAwIAltb3YgICAgMHhkMCglcjEyKSwlcmN4CiAgICA1OTVhOgkw MCAKICAgIDU5NWI6CTg5IGMyICAgICAgICAgICAgICAgIAltb3YgICAgJWVheCwlZWR4CiAgICA1 OTVkOgk4MyBlMiAwNiAgICAgICAgICAgICAJYW5kICAgICQweDYsJWVkeAogICAgNTk2MDoJNDgg OGQgM2MgMzEgICAgICAgICAgCWxlYSAgICAoJXJjeCwlcnNpLDEpLCVyZGkKICAgIDU5NjQ6CTgw IGZhIDA0ICAgICAgICAgICAgIAljbXAgICAgJDB4NCwlZGwKICAgIDU5Njc6CTBmIDg0IGU5IDAz IDAwIDAwICAgIAlqZSAgICAgNWQ1NiA8dnhsYW5fcmN2KzB4OTg2PgogICAgNTk2ZDoJODAgZmEg MDYgICAgICAgICAgICAgCWNtcCAgICAkMHg2LCVkbAogICAgNTk3MDoJMGYgODQgMTggMDIgMDAg MDAgICAgCWplICAgICA1YjhlIDx2eGxhbl9yY3YrMHg3YmU+CgpzdGF0aWMgX19hbHdheXNfaW5s aW5lIHZvaWQKX19za2JfcG9zdHB1bGxfcmNzdW0oc3RydWN0IHNrX2J1ZmYgKnNrYiwgY29uc3Qg dm9pZCAqc3RhcnQsIHVuc2lnbmVkIGludCBsZW4sCgkJICAgICB1bnNpZ25lZCBpbnQgb2ZmKQp7 CglpZiAoc2tiLT5pcF9zdW1tZWQgPT0gQ0hFQ0tTVU1fQ09NUExFVEUpCiAgICA1OTc2Ogk0OCA4 YiA0MyAzMCAgICAgICAgICAJbW92ICAgIDB4MzAoJXJieCksJXJheAoJc2tiLT5uZXR3b3JrX2hl YWRlciArPSBvZmZzZXQ7Cn0KCnN0YXRpYyBpbmxpbmUgdW5zaWduZWQgY2hhciAqc2tiX21hY19o ZWFkZXIoY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYikKewoJcmV0dXJuIHNrYi0+aGVhZCArIHNr Yi0+bWFjX2hlYWRlcjsKICAgIDU5N2E6CThiIDU3IDA2ICAgICAgICAgICAgIAltb3YgICAgMHg2 KCVyZGkpLCVlZHgKICAgIDU5N2Q6CTRjIDhiIDgwIDM4IDAzIDAwIDAwIAltb3YgICAgMHgzMzgo JXJheCksJXI4CiAgICA1OTg0OgkwZiBiNyA0NyAwYSAgICAgICAgICAJbW92endsIDB4YSglcmRp KSwlZWF4CiAgICA1OTg4Ogk2NiA0MSAzMyA0MCAwNCAgICAgICAJeG9yICAgIDB4NCglcjgpLCVh eAoKc3RhdGljIF9fYWx3YXlzX2lubGluZSB2b2lkCl9fc2tiX3Bvc3RwdWxsX3Jjc3VtKHN0cnVj dCBza19idWZmICpza2IsIGNvbnN0IHZvaWQgKnN0YXJ0LCB1bnNpZ25lZCBpbnQgbGVuLAoJCSAg ICAgdW5zaWduZWQgaW50IG9mZikKewoJaWYgKHNrYi0+aXBfc3VtbWVkID09IENIRUNLU1VNX0NP TVBMRVRFKQogICAgNTk4ZDoJNDEgMzMgMTAgICAgICAgICAgICAgCXhvciAgICAoJXI4KSwlZWR4 Cglza2ItPm5ldHdvcmtfaGVhZGVyICs9IG9mZnNldDsKfQoKc3RhdGljIGlubGluZSB1bnNpZ25l ZCBjaGFyICpza2JfbWFjX2hlYWRlcihjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQp7CglyZXR1 cm4gc2tiLT5oZWFkICsgc2tiLT5tYWNfaGVhZGVyOwogICAgNTk5MDoJMGYgYjcgYzAgICAgICAg ICAgICAgCW1vdnp3bCAlYXgsJWVheAogICAgNTk5MzoJMDkgYzIgICAgICAgICAgICAgICAgCW9y ICAgICAlZWF4LCVlZHgKCnN0YXRpYyBfX2Fsd2F5c19pbmxpbmUgdm9pZApfX3NrYl9wb3N0cHVs bF9yY3N1bShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBjb25zdCB2b2lkICpzdGFydCwgdW5zaWduZWQg aW50IGxlbiwKCQkgICAgIHVuc2lnbmVkIGludCBvZmYpCnsKCWlmIChza2ItPmlwX3N1bW1lZCA9 PSBDSEVDS1NVTV9DT01QTEVURSkKICAgIDU5OTU6CTBmIDg0IGY1IGZhIGZmIGZmICAgIAlqZSAg ICAgNTQ5MCA8dnhsYW5fcmN2KzB4YzA+CiAgICA1OTliOgk0OSA4YiA0NyAxMCAgICAgICAgICAJ bW92ICAgIDB4MTAoJXIxNSksJXJheAoJCXNrYi0+Y3N1bSA9IGNzdW1fYmxvY2tfc3ViKHNrYi0+ Y3N1bSwKCQkJCQkgICBjc3VtX3BhcnRpYWwoc3RhcnQsIGxlbiwgMCksIG9mZik7CgllbHNlIGlm IChza2ItPmlwX3N1bW1lZCA9PSBDSEVDS1NVTV9QQVJUSUFMICYmCiAgICA1OTlmOgk0NSAwZiBi NyBhYyAyNCBjNCAwMCAJbW92endsIDB4YzQoJXIxMiksJXIxM2QKICAgIDU5YTY6CTAwIDAwIAoJ c2tiX3Bvc3RwdWxsX3Jjc3VtKHNrYiwgZXRoX2hkcihza2IpLCBFVEhfSExFTik7CgoJLyogSWdu b3JlIHBhY2tldCBsb29wcyAoYW5kIG11bHRpY2FzdCBlY2hvKSAqLwoJaWYgKGV0aGVyX2FkZHJf ZXF1YWwoZXRoX2hkcihza2IpLT5oX3NvdXJjZSwgdnhsYW4tPmRldi0+ZGV2X2FkZHIpKQogICAg NTlhODoJNDggOGIgNDAgMjAgICAgICAgICAgCW1vdiAgICAweDIwKCVyYXgpLCVyYXgKICAgIDU5 YWM6CTY2IDgzIDc4IDEwIDAyICAgICAgIAljbXB3ICAgJDB4MiwweDEwKCVyYXgpCiAgICA1OWIx OgkwZiA4NCBmZiAwMiAwMCAwMCAgICAJamUgICAgIDVjYjYgPHZ4bGFuX3JjdisweDhlNj4KICAg IDU5Yjc6CTRhIDhiIDQ0IDI5IDA4ICAgICAgIAltb3YgICAgMHg4KCVyY3gsJXIxMywxKSwlcmF4 CiAgICA1OWJjOgk0YSA4YiA1NCAyOSAxMCAgICAgICAJbW92ICAgIDB4MTAoJXJjeCwlcjEzLDEp LCVyZHgKICAgIDU5YzE6CTQ4IDg5IDQ0IDI0IDM4ICAgICAgIAltb3YgICAgJXJheCwweDM4KCVy c3ApCiAgICA1OWM2OgliOCAwYSAwMCAwMCAwMCAgICAgICAJbW92ICAgICQweGEsJWVheAoJcmV0 dXJuIHZuaV9maWVsZDsKfQoKc3RhdGljIGlubGluZSB1bnNpZ25lZCBzaG9ydCB2eGxhbl9nZXRf c2tfZmFtaWx5KHN0cnVjdCB2eGxhbl9zb2NrICp2cykKewoJcmV0dXJuIHZzLT5zb2NrLT5zay0+ c2tfZmFtaWx5OwogICAgNTljYjoJNDggODkgNTQgMjQgNDAgICAgICAgCW1vdiAgICAlcmR4LDB4 NDAoJXJzcCkKCQlyZXR1cm4gZmFsc2U7CgoJLyogR2V0IGFkZHJlc3MgZnJvbSB0aGUgb3V0ZXIg SVAgaGVhZGVyICovCglpZiAodnhsYW5fZ2V0X3NrX2ZhbWlseSh2cykgPT0gQUZfSU5FVCkgewoJ CXNhZGRyLnNpbi5zaW5fYWRkci5zX2FkZHIgPSBpcF9oZHIoc2tiKS0+c2FkZHI7CiAgICA1OWQw Ogk2NiA4OSA0NCAyNCAzMCAgICAgICAJbW92ICAgICVheCwweDMwKCVyc3ApCiAgICA1OWQ1Oglm NiA4MyA5OCAwMCAwMCAwMCAwMSAJdGVzdGIgICQweDEsMHg5OCglcmJ4KQoJLyogSWdub3JlIHBh Y2tldCBsb29wcyAoYW5kIG11bHRpY2FzdCBlY2hvKSAqLwoJaWYgKGV0aGVyX2FkZHJfZXF1YWwo ZXRoX2hkcihza2IpLT5oX3NvdXJjZSwgdnhsYW4tPmRldi0+ZGV2X2FkZHIpKQoJCXJldHVybiBm YWxzZTsKCgkvKiBHZXQgYWRkcmVzcyBmcm9tIHRoZSBvdXRlciBJUCBoZWFkZXIgKi8KCWlmICh2 eGxhbl9nZXRfc2tfZmFtaWx5KHZzKSA9PSBBRl9JTkVUKSB7CiAgICA1OWRjOgkwZiA4NSBhMiAw MiAwMCAwMCAgICAJam5lICAgIDVjODQgPHZ4bGFuX3JjdisweDhiND4KICAgIDU5ZTI6CTQ5IDhi IDg0IDI0IGQ4IDAwIDAwIAltb3YgICAgMHhkOCglcjEyKSwlcmF4CiAgICA1OWU5OgkwMCAKCQlz YWRkci5zaW4uc2luX2FkZHIuc19hZGRyID0gaXBfaGRyKHNrYiktPnNhZGRyOwoJCXNhZGRyLnNh LnNhX2ZhbWlseSA9IEFGX0lORVQ7CiNpZiBJU19FTkFCTEVEKENPTkZJR19JUFY2KQoJfSBlbHNl IHsKCQlzYWRkci5zaW42LnNpbjZfYWRkciA9IGlwdjZfaGRyKHNrYiktPnNhZGRyOwogICAgNTll YToJNDggMjkgYzggICAgICAgICAgICAgCXN1YiAgICAlcmN4LCVyYXgKICAgIDU5ZWQ6CTg5IGMy ICAgICAgICAgICAgICAgIAltb3YgICAgJWVheCwlZWR4CiAgICA1OWVmOgllOSBkMyBmYiBmZiBm ZiAgICAgICAJam1wcSAgIDU1YzcgPHZ4bGFuX3JjdisweDFmNz4KICAgIDU5ZjQ6CTQ1IDBmIGI3 IDg0IDI0IGMwIDAwIAltb3Z6d2wgMHhjMCglcjEyKSwlcjhkCiAgICA1OWZiOgkwMCAwMCAKICAg IDU5ZmQ6CTY2IDQxIDgzIGY4IDA4ICAgICAgIAljbXAgICAgJDB4OCwlcjh3CgkJc2FkZHIuc2Eu c2FfZmFtaWx5ID0gQUZfSU5FVDY7CiAgICA1YTAyOgkwZiA4NCBjNiAwMiAwMCAwMCAgICAJamUg ICAgIDVjY2UgPHZ4bGFuX3JjdisweDhmZT4KI2VuZGlmCgl9CgoJaWYgKCh2eGxhbi0+ZmxhZ3Mg JiBWWExBTl9GX0xFQVJOKSAmJgogICAgNWEwODoJNjYgNDEgODEgZjggODYgZGQgICAgCWNtcCAg ICAkMHhkZDg2LCVyOHcKICAgIDVhMGU6CTBmIDg1IGYzIGZiIGZmIGZmICAgIAlqbmUgICAgNTYw NyA8dnhsYW5fcmN2KzB4MjM3PgogICAgNWExNDoJMGYgYjcgYzAgICAgICAgICAgICAgCW1vdnp3 bCAlYXgsJWVheAogICAgNWExNzoJMGYgYjcgM2MgMDEgICAgICAgICAgCW1vdnp3bCAoJXJjeCwl cmF4LDEpLCVlZGkKICAgIDVhMWI6CTY2IGMxIGM3IDA4ICAgICAgICAgIAlyb2wgICAgJDB4OCwl ZGkKICAgIDVhMWY6CTY2IGMxIGVmIDA0ICAgICAgICAgIAlzaHIgICAgJDB4NCwlZGkKICAgIDVh MjM6CTgzIGU3IDAzICAgICAgICAgICAgIAlhbmQgICAgJDB4MywlZWRpCnN0YXRpYyBpbmxpbmUg aW50IElQX0VDTl9kZWNhcHN1bGF0ZShjb25zdCBzdHJ1Y3QgaXBoZHIgKm9pcGgsCgkJCQkgICAg IHN0cnVjdCBza19idWZmICpza2IpCnsKCV9fdTggaW5uZXI7CgoJaWYgKHNrYi0+cHJvdG9jb2wg PT0gaHRvbnMoRVRIX1BfSVApKQogICAgNWEyNjoJNDEgMGYgYjYgNTUgMDEgICAgICAgCW1vdnpi bCAweDEoJXIxMyksJWVkeAogICAgNWEyYjoJMGYgODUgMmIgMDIgMDAgMDAgICAgCWpuZSAgICA1 YzVjIDx2eGxhbl9yY3YrMHg4OGM+CiAgICA1YTMxOgk4MyBlMiAwMyAgICAgICAgICAgICAJYW5k ICAgICQweDMsJWVkeAogICAgNWEzNDoJMGYgODQgY2QgZmIgZmYgZmYgICAgCWplICAgICA1NjA3 IDx2eGxhbl9yY3YrMHgyMzc+CgkJaW5uZXIgPSBpcF9oZHIoc2tiKS0+dG9zOwoJZWxzZSBpZiAo c2tiLT5wcm90b2NvbCA9PSBodG9ucyhFVEhfUF9JUFY2KSkKICAgIDVhM2E6CTgwIGZhIDAyICAg ICAgICAgICAgIAljbXAgICAgJDB4MiwlZGwKICAgIDVhM2Q6CTBmIDg2IGVhIDAxIDAwIDAwICAg IAlqYmUgICAgNWMyZCA8dnhsYW5fcmN2KzB4ODVkPgogICAgNWE0MzoJODAgZmEgMDMgICAgICAg ICAgICAgCWNtcCAgICAkMHgzLCVkbAogICAgNWE0NjoJMGYgODUgYmIgZmIgZmYgZmYgICAgCWpu ZSAgICA1NjA3IDx2eGxhbl9yY3YrMHgyMzc+CiAgICA1YTRjOgk4MCAzZCAwMCAwMCAwMCAwMCAw MCAJY21wYiAgICQweDAsMHgwKCVyaXApICAgICAgICAjIDVhNTMgPHZ4bGFuX3JjdisweDY4Mz4K ICogICAgICAgICAgMiBpZiBwYWNrZXQgc2hvdWxkIGJlIGRyb3BwZWQKICovCnN0YXRpYyBpbmxp bmUgaW50IElORVRfRUNOX2RlY2Fwc3VsYXRlKHN0cnVjdCBza19idWZmICpza2IsCgkJCQkgICAg ICAgX191OCBvdXRlciwgX191OCBpbm5lcikKewoJaWYgKElORVRfRUNOX2lzX25vdF9lY3QoaW5u ZXIpKSB7CiAgICA1YTUzOgk3NCAwZCAgICAgICAgICAgICAgICAJamUgICAgIDVhNjIgPHZ4bGFu X3JjdisweDY5Mj4KICAgIDVhNTU6CWU4IDAwIDAwIDAwIDAwICAgICAgIAljYWxscSAgNWE1YSA8 dnhsYW5fcmN2KzB4NjhhPgoJZWxzZSBpZiAoc2tiLT5wcm90b2NvbCA9PSBodG9ucyhFVEhfUF9J UFY2KSkKCQlpbm5lciA9IGlwdjZfZ2V0X2RzZmllbGQoaXB2Nl9oZHIoc2tiKSk7CgllbHNlCgkJ cmV0dXJuIDA7CgoJcmV0dXJuIElORVRfRUNOX2RlY2Fwc3VsYXRlKHNrYiwgb2lwaC0+dG9zLCBp bm5lcik7CiAgICA1YTVhOgk4NSBjMCAgICAgICAgICAgICAgICAJdGVzdCAgICVlYXgsJWVheAog KiAgICAgICAgICAyIGlmIHBhY2tldCBzaG91bGQgYmUgZHJvcHBlZAogKi8Kc3RhdGljIGlubGlu ZSBpbnQgSU5FVF9FQ05fZGVjYXBzdWxhdGUoc3RydWN0IHNrX2J1ZmYgKnNrYiwKCQkJCSAgICAg ICBfX3U4IG91dGVyLCBfX3U4IGlubmVyKQp7CglpZiAoSU5FVF9FQ05faXNfbm90X2VjdChpbm5l cikpIHsKICAgIDVhNWM6CTBmIDg1IDU1IDA0IDAwIDAwICAgIAlqbmUgICAgNWViNyA8dnhsYW5f cmN2KzB4YWU3PgoJCXN3aXRjaCAob3V0ZXIgJiBJTkVUX0VDTl9NQVNLKSB7CiAgICA1YTYyOgk0 OCA4YiA0MyAzMCAgICAgICAgICAJbW92ICAgIDB4MzAoJXJieCksJXJheAogICAgNWE2NjoJNDgg ODMgODAgOTggMDEgMDAgMDAgCWFkZHEgICAkMHgxLDB4MTk4KCVyYXgpCiAgICA1YTZkOgkwMSAK ICAgIDVhNmU6CTQ4IDhiIDQzIDMwICAgICAgICAgIAltb3YgICAgMHgzMCglcmJ4KSwlcmF4CiAg ICA1YTcyOgk0OCA4MyA4MCA1MCAwMSAwMCAwMCAJYWRkcSAgICQweDEsMHgxNTAoJXJheCkKICAg IDVhNzk6CTAxIAogICAgNWE3YToJZTkgMTEgZmEgZmYgZmYgICAgICAgCWptcHEgICA1NDkwIDx2 eGxhbl9yY3YrMHhjMD4KI2lmIElTX0VOQUJMRUQoQ09ORklHX0lQVjYpCgllbHNlCgkJZXJyID0g SVA2X0VDTl9kZWNhcHN1bGF0ZShvaXBoLCBza2IpOwojZW5kaWYKCglpZiAodW5saWtlbHkoZXJy KSAmJiBsb2dfZWNuX2Vycm9yKSB7CiAgICA1YTdmOgkwZiBiNyBjMCAgICAgICAgICAgICAJbW92 endsICVheCwlZWF4CiAgICA1YTgyOgk0NCAwZiBiNyAwNCAwMSAgICAgICAJbW92endsICglcmN4 LCVyYXgsMSksJXI4ZAoJCWlmICh2eGxhbl9nZXRfc2tfZmFtaWx5KHZzKSA9PSBBRl9JTkVUKQoJ CQluZXRfaW5mb19yYXRlbGltaXRlZCgibm9uLUVDVCBmcm9tICVwSTQgd2l0aCBUT1M9JSN4XG4i LAogICAgNWE4NzoJNjYgNDEgYzEgYzAgMDggICAgICAgCXJvbCAgICAkMHg4LCVyOHcKICAgIDVh OGM6CTY2IDQxIGMxIGU4IDA0ICAgICAgIAlzaHIgICAgJDB4NCwlcjh3CiAgICA1YTkxOgk0MSAw ZiBiNyA1NSAwMCAgICAgICAJbW92endsIDB4MCglcjEzKSwlZWR4CgoJb2lwaCA9IHNrYl9uZXR3 b3JrX2hlYWRlcihza2IpOwoJc2tiX3Jlc2V0X25ldHdvcmtfaGVhZGVyKHNrYik7CgoJaWYgKCF2 eGxhbl9lY25fZGVjYXBzdWxhdGUodnMsIG9pcGgsIHNrYikpIHsKCQkrK3Z4bGFuLT5kZXYtPnN0 YXRzLnJ4X2ZyYW1lX2Vycm9yczsKICAgIDVhOTY6CTY2IGMxIGMyIDA4ICAgICAgICAgIAlyb2wg ICAgJDB4OCwlZHgKICAgIDVhOWE6CTY2IGMxIGVhIDA0ICAgICAgICAgIAlzaHIgICAgJDB4NCwl ZHgKCQkrK3Z4bGFuLT5kZXYtPnN0YXRzLnJ4X2Vycm9yczsKICAgIDVhOWU6CTQxIDgzIGUwIDAz ICAgICAgICAgIAlhbmQgICAgJDB4MywlcjhkCiAgICA1YWEyOgk3NSA1MiAgICAgICAgICAgICAg ICAJam5lICAgIDVhZjYgPHZ4bGFuX3JjdisweDcyNj4KICAgIDVhYTQ6CTgzIGUyIDAzICAgICAg ICAgICAgIAlhbmQgICAgJDB4MywlZWR4CiAgICA1YWE3OgkwZiA4NCA1YSBmYiBmZiBmZiAgICAJ amUgICAgIDU2MDcgPHZ4bGFuX3JjdisweDIzNz4KCQlnb3RvIGRyb3A7CiAgICA1YWFkOgk4MCBm YSAwMiAgICAgICAgICAgICAJY21wICAgICQweDIsJWRsCiAgICA1YWIwOgkwZiA4NiA3NyAwMSAw MCAwMCAgICAJamJlICAgIDVjMmQgPHZ4bGFuX3JjdisweDg1ZD4KICAgIDVhYjY6CTgwIGZhIDAz ICAgICAgICAgICAgIAljbXAgICAgJDB4MywlZGwKICAgIDVhYjk6CTBmIDg1IDQ4IGZiIGZmIGZm ICAgIAlqbmUgICAgNTYwNyA8dnhsYW5fcmN2KzB4MjM3PgogICAgNWFiZjoJODAgM2QgMDAgMDAg MDAgMDAgMDAgCWNtcGIgICAkMHgwLDB4MCglcmlwKSAgICAgICAgIyA1YWM2IDx2eGxhbl9yY3Yr MHg2ZjY+CiAgICA1YWM2Ogk3NCA5YSAgICAgICAgICAgICAgICAJamUgICAgIDVhNjIgPHZ4bGFu X3JjdisweDY5Mj4KICAgIDVhYzg6CWU4IDAwIDAwIDAwIDAwICAgICAgIAljYWxscSAgNWFjZCA8 dnhsYW5fcmN2KzB4NmZkPgogICAgNWFjZDoJODUgYzAgICAgICAgICAgICAgICAgCXRlc3QgICAl ZWF4LCVlYXgKICogICAgICAgICAgMiBpZiBwYWNrZXQgc2hvdWxkIGJlIGRyb3BwZWQKICovCnN0 YXRpYyBpbmxpbmUgaW50IElORVRfRUNOX2RlY2Fwc3VsYXRlKHN0cnVjdCBza19idWZmICpza2Is CgkJCQkgICAgICAgX191OCBvdXRlciwgX191OCBpbm5lcikKewoJaWYgKElORVRfRUNOX2lzX25v dF9lY3QoaW5uZXIpKSB7CiAgICA1YWNmOgk3NCA5MSAgICAgICAgICAgICAgICAJamUgICAgIDVh NjIgPHZ4bGFuX3JjdisweDY5Mj4KICAgIDVhZDE6CTQxIGJlIDAyIDAwIDAwIDAwICAgIAltb3Yg ICAgJDB4MiwlcjE0ZAoJCXN3aXRjaCAob3V0ZXIgJiBJTkVUX0VDTl9NQVNLKSB7CiAgICA1YWQ3 Ogk0OSA4ZCA3NSAwOCAgICAgICAgICAJbGVhICAgIDB4OCglcjEzKSwlcnNpCiAgICA1YWRiOgk0 OCBjNyBjNyAwMCAwMCAwMCAwMCAJbW92ICAgICQweDAsJXJkaQogICAgNWFlMjoJZTggMDAgMDAg MDAgMDAgICAgICAgCWNhbGxxICA1YWU3IDx2eGxhbl9yY3YrMHg3MTc+CiAgICA1YWU3Ogk0MSA4 MyBmZSAwMiAgICAgICAgICAJY21wICAgICQweDIsJXIxNGQKICAgIDVhZWI6CTBmIDg0IDcxIGZm IGZmIGZmICAgIAlqZSAgICAgNWE2MiA8dnhsYW5fcmN2KzB4NjkyPgojaWYgSVNfRU5BQkxFRChD T05GSUdfSVBWNikKCWVsc2UKCQllcnIgPSBJUDZfRUNOX2RlY2Fwc3VsYXRlKG9pcGgsIHNrYik7 CiNlbmRpZgoKCWlmICh1bmxpa2VseShlcnIpICYmIGxvZ19lY25fZXJyb3IpIHsKICAgIDVhZjE6 CWU5IDExIGZiIGZmIGZmICAgICAgIAlqbXBxICAgNTYwNyA8dnhsYW5fcmN2KzB4MjM3PgogICAg NWFmNjoJODMgZTIgMDMgICAgICAgICAgICAgCWFuZCAgICAkMHgzLCVlZHgKCQlpZiAodnhsYW5f Z2V0X3NrX2ZhbWlseSh2cykgPT0gQUZfSU5FVCkKCQkJbmV0X2luZm9fcmF0ZWxpbWl0ZWQoIm5v bi1FQ1QgZnJvbSAlcEk0IHdpdGggVE9TPSUjeFxuIiwKCQkJCQkgICAgICYoKHN0cnVjdCBpcGhk ciAqKW9pcGgpLT5zYWRkciwKCQkJCQkgICAgICgoc3RydWN0IGlwaGRyICopb2lwaCktPnRvcyk7 CgkJZWxzZQoJCQluZXRfaW5mb19yYXRlbGltaXRlZCgibm9uLUVDVCBmcm9tICVwSTZcbiIsCiAg ICA1YWY5Ogk4MCBmYSAwMyAgICAgICAgICAgICAJY21wICAgICQweDMsJWRsCiAgICA1YWZjOgkw ZiA4NSAwNSBmYiBmZiBmZiAgICAJam5lICAgIDU2MDcgPHZ4bGFuX3JjdisweDIzNz4KCQkJcmV0 dXJuIDA7CgkJY2FzZSBJTkVUX0VDTl9FQ1RfMDoKCQljYXNlIElORVRfRUNOX0VDVF8xOgoJCQly ZXR1cm4gMTsKCQljYXNlIElORVRfRUNOX0NFOgoJCQlyZXR1cm4gMjsKICAgIDViMDI6CTY2IDgz IGZmIDA4ICAgICAgICAgIAljbXAgICAgJDB4OCwlZGkKICAgIDViMDY6CTBmIDg0IDhlIDAyIDAw IDAwICAgIAlqZSAgICAgNWQ5YSA8dnhsYW5fcmN2KzB4OWNhPgogICAgNWIwYzoJNjYgODEgZmYg ODYgZGQgICAgICAgCWNtcCAgICAkMHhkZDg2LCVkaQogICAgNWIxMToJMGYgODUgZjAgZmEgZmYg ZmYgICAgCWpuZSAgICA1NjA3IDx2eGxhbl9yY3YrMHgyMzc+Cgl9CgoJb2lwaCA9IHNrYl9uZXR3 b3JrX2hlYWRlcihza2IpOwoJc2tiX3Jlc2V0X25ldHdvcmtfaGVhZGVyKHNrYik7CgoJaWYgKCF2 eGxhbl9lY25fZGVjYXBzdWxhdGUodnMsIG9pcGgsIHNrYikpIHsKICAgIDViMTc6CTQxIDhiIDk0 IDI0IGM4IDAwIDAwIAltb3YgICAgMHhjOCglcjEyKSwlZWR4CiAgICA1YjFlOgkwMCAKICAgIDVi MWY6CTQ4IDAxIGM4ICAgICAgICAgICAgIAlhZGQgICAgJXJjeCwlcmF4CiAgICA1YjIyOgk0OCA4 ZCA3MCAyOCAgICAgICAgICAJbGVhICAgIDB4MjgoJXJheCksJXJzaQoJCX0KCX0KCglpZiAoSU5F VF9FQ05faXNfY2Uob3V0ZXIpKQogICAgNWIyNjoJNDggMDEgZDEgICAgICAgICAgICAgCWFkZCAg ICAlcmR4LCVyY3gKICAgIDViMjk6CTQ4IDM5IGNlICAgICAgICAgICAgIAljbXAgICAgJXJjeCwl cnNpCiAgICA1YjJjOgkwZiA4NyBkNSBmYSBmZiBmZiAgICAJamEgICAgIDU2MDcgPHZ4bGFuX3Jj disweDIzNz4KCWlwdjZfY2hhbmdlX2RzZmllbGQoaW5uZXIsIElORVRfRUNOX01BU0ssIGRzY3Ap Owp9CgpzdGF0aWMgaW5saW5lIGludCBJTkVUX0VDTl9zZXRfY2Uoc3RydWN0IHNrX2J1ZmYgKnNr YikKewoJc3dpdGNoIChza2ItPnByb3RvY29sKSB7CiAgICA1YjMyOgkwZiBiNyAxMCAgICAgICAg ICAgICAJbW92endsICglcmF4KSwlZWR4CiAgICA1YjM1Ogk2NiBjMSBjMiAwOCAgICAgICAgICAJ cm9sICAgICQweDgsJWR4CiAgICA1YjM5Ogk4MCBlMiAzMCAgICAgICAgICAgICAJYW5kICAgICQw eDMwLCVkbAogICAgNWIzYzoJMGYgODQgYzUgZmEgZmYgZmYgICAgCWplICAgICA1NjA3IDx2eGxh bl9yY3YrMHgyMzc+CiAgICA1YjQyOgk4YiAxMCAgICAgICAgICAgICAgICAJbW92ICAgICglcmF4 KSwlZWR4CiAgICA1YjQ0Ogk4OSBkMSAgICAgICAgICAgICAgICAJbW92ICAgICVlZHgsJWVjeAog ICAgNWI0NjoJODAgY2QgMzAgICAgICAgICAgICAgCW9yICAgICAkMHgzMCwlY2gKCQkgICAgc2ti X3RhaWxfcG9pbnRlcihza2IpKQoJCQlyZXR1cm4gSVBfRUNOX3NldF9jZShpcF9oZHIoc2tiKSk7 CgkJYnJlYWs7CgoJY2FzZSBjcHVfdG9fYmUxNihFVEhfUF9JUFY2KToKCQlpZiAoc2tiX25ldHdv cmtfaGVhZGVyKHNrYikgKyBzaXplb2Yoc3RydWN0IGlwdjZoZHIpIDw9CiAgICA1YjQ5Ogk4OSAw OCAgICAgICAgICAgICAgICAJbW92ICAgICVlY3gsKCVyYXgpCiAgICA1YjRiOgk0MSAwZiBiNiA4 NCAyNCA5MSAwMCAJbW92emJsIDB4OTEoJXIxMiksJWVheAogICAgNWI1MjoJMDAgMDAgCiAgICA1 YjU0Ogk4MyBlMCAwNiAgICAgICAgICAgICAJYW5kICAgICQweDYsJWVheAogICAgNWI1NzoJM2Mg MDQgICAgICAgICAgICAgICAgCWNtcCAgICAkMHg0LCVhbAogICAgNWI1OToJMGYgODUgYTggZmEg ZmYgZmYgICAgCWpuZSAgICA1NjA3IDx2eGxhbl9yY3YrMHgyMzc+CiAgICA1YjVmOgk0MSA4YiA4 NCAyNCA5OCAwMCAwMCAJbW92ICAgIDB4OTgoJXIxMiksJWVheAogICAgNWI2NjoJMDAgCiAgICA1 YjY3OglmNyBkMiAgICAgICAgICAgICAgICAJbm90ICAgICVlZHgKICovCnN0YXRpYyBpbmxpbmUg aW50IElQNl9FQ05fc2V0X2NlKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBpcHY2aGRyICpp cGgpCnsKCV9fYmUzMiBmcm9tLCB0bzsKCglpZiAoSU5FVF9FQ05faXNfbm90X2VjdChpcHY2X2dl dF9kc2ZpZWxkKGlwaCkpKQogICAgNWI2OToJMDEgZDAgICAgICAgICAgICAgICAgCWFkZCAgICAl ZWR4LCVlYXgKICAgIDViNmI6CTgzIGQwIDAwICAgICAgICAgICAgIAlhZGMgICAgJDB4MCwlZWF4 CiAgICA1YjZlOgkwMSBjOCAgICAgICAgICAgICAgICAJYWRkICAgICVlY3gsJWVheAogICAgNWI3 MDoJODMgZDAgMDAgICAgICAgICAgICAgCWFkYyAgICAkMHgwLCVlYXgKCQlyZXR1cm4gMDsKCglm cm9tID0gKihfX2JlMzIgKilpcGg7CiAgICA1YjczOgk0MSA4OSA4NCAyNCA5OCAwMCAwMCAJbW92 ICAgICVlYXgsMHg5OCglcjEyKQogICAgNWI3YToJMDAgCgl0byA9IGZyb20gfCBodG9ubChJTkVU X0VDTl9DRSA8PCAyMCk7CgkqKF9fYmUzMiAqKWlwaCA9IHRvOwoJaWYgKHNrYi0+aXBfc3VtbWVk ID09IENIRUNLU1VNX0NPTVBMRVRFKQogICAgNWI3YjoJZTkgODcgZmEgZmYgZmYgICAgICAgCWpt cHEgICA1NjA3IDx2eGxhbl9yY3YrMHgyMzc+CiAgICA1YjgwOgkwZiBiNyBjMCAgICAgICAgICAg ICAJbW92endsICVheCwlZWF4CiAgICA1YjgzOgk0NCAwZiBiNiA0NCAwMSAwMSAgICAJbW92emJs IDB4MSglcmN4LCVyYXgsMSksJXI4ZAogICAgNWI4OToJZTkgMDMgZmYgZmYgZmYgICAgICAgCWpt cHEgICA1YTkxIDx2eGxhbl9yY3YrMHg2YzE+CiAgICA1YjhlOgk0MSAwZiBiNyA5NCAyNCA5OCAw MCAJbW92endsIDB4OTgoJXIxMiksJWVkeAogICAgNWI5NToJMDAgMDAgCiAgICA1Yjk3Ogk0MSAy YiA5NCAyNCBkOCAwMCAwMCAJc3ViICAgIDB4ZDgoJXIxMiksJWVkeAogICAgNWI5ZToJMDAgCiAg ICA1YjlmOgkwMSBjYSAgICAgICAgICAgICAgICAJYWRkICAgICVlY3gsJWVkeAogICAgNWJhMToJ MGYgODkgY2YgZmQgZmYgZmYgICAgCWpucyAgICA1OTc2IDx2eGxhbl9yY3YrMHg1YTY+CgkJc2ti LT5jc3VtID0gY3N1bV9hZGQoY3N1bV9zdWIoc2tiLT5jc3VtLCAoX19mb3JjZSBfX3dzdW0pZnJv bSksCiAgICA1YmE3Ogk4MyBlMCBmOSAgICAgICAgICAgICAJYW5kICAgICQweGZmZmZmZmY5LCVl YXgKICAgIDViYWE6CTQxIDg4IDg0IDI0IDkxIDAwIDAwIAltb3YgICAgJWFsLDB4OTEoJXIxMikK ICAgIDViYjE6CTAwIAoJCQkJICAgICAgc3RydWN0IHNrX2J1ZmYgKnNrYikKewoJX191OCBpbm5l cjsKCglpZiAoc2tiLT5wcm90b2NvbCA9PSBodG9ucyhFVEhfUF9JUCkpCgkJaW5uZXIgPSBpcF9o ZHIoc2tiKS0+dG9zOwogICAgNWJiMjoJZTkgYmYgZmQgZmYgZmYgICAgICAgCWptcHEgICA1OTc2 IDx2eGxhbl9yY3YrMHg1YTY+CiAgICA1YmI3Ogk0OSA4YiA1NCAyNCAyMCAgICAgICAJbW92ICAg IDB4MjAoJXIxMiksJXJkeAogICAgNWJiYzoJZjYgODIgZjEgMDAgMDAgMDAgNDAgCXRlc3RiICAk MHg0MCwweGYxKCVyZHgpCiAgICA1YmMzOgkwZiA4NCA5OSBmYSBmZiBmZiAgICAJamUgICAgIDU2 NjIgPHZ4bGFuX3JjdisweDI5Mj4KICAgIDViYzk6CTY1IDQ4IDAzIDA1IDAwIDAwIDAwIAlhZGQg ICAgJWdzOjB4MCglcmlwKSwlcmF4ICAgICAgICAjIDViZDEgPHZ4bGFuX3JjdisweDgwMT4KICAg IDViZDA6CTAwIAogICAgNWJkMToJOGIgM2QgMDAgMDAgMDAgMDAgICAgCW1vdiAgICAweDAoJXJp cCksJWVkaSAgICAgICAgIyA1YmQ3IDx2eGxhbl9yY3YrMHg4MDc+CgkJIHNrYl9jaGVja3N1bV9z dGFydF9vZmZzZXQoc2tiKSA8IDApCgkJc2tiLT5pcF9zdW1tZWQgPSBDSEVDS1NVTV9OT05FOwog ICAgNWJkNzoJMzkgNzggMTAgICAgICAgICAgICAgCWNtcCAgICAlZWRpLDB4MTAoJXJheCkKICAg IDViZGE6CTBmIDg3IDQ5IDAyIDAwIDAwICAgIAlqYSAgICAgNWUyOSA8dnhsYW5fcmN2KzB4YTU5 PgogICAgNWJlMDoJNDggOGIgNTAgMDggICAgICAgICAgCW1vdiAgICAweDgoJXJheCksJXJkeAog ICAgNWJlNDoJNDkgODkgMDQgMjQgICAgICAgICAgCW1vdiAgICAlcmF4LCglcjEyKQp9OwoKc3Rh dGljIGlubGluZSBpbnQgZ3JvX2NlbGxzX3JlY2VpdmUoc3RydWN0IGdyb19jZWxscyAqZ2NlbGxz LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQp7CglzdHJ1Y3QgZ3JvX2NlbGwgKmNlbGw7CglzdHJ1Y3Qg bmV0X2RldmljZSAqZGV2ID0gc2tiLT5kZXY7CiAgICA1YmU4Ogk0OSA4OSA1NCAyNCAwOCAgICAg ICAJbW92ICAgICVyZHgsMHg4KCVyMTIpCgoJaWYgKCFnY2VsbHMtPmNlbGxzIHx8IHNrYl9jbG9u ZWQoc2tiKSB8fCAhKGRldi0+ZmVhdHVyZXMgJiBORVRJRl9GX0dSTykpCiAgICA1YmVkOgk0YyA4 OSAyMiAgICAgICAgICAgICAJbW92ICAgICVyMTIsKCVyZHgpCiAgICA1YmYwOgk4YiA3OCAxMCAg ICAgICAgICAgICAJbW92ICAgIDB4MTAoJXJheCksJWVkaQogICAgNWJmMzoJNGMgODkgNjAgMDgg ICAgICAgICAgCW1vdiAgICAlcjEyLDB4OCglcmF4KQogICAgNWJmNzoJOGQgNTcgMDEgICAgICAg ICAgICAgCWxlYSAgICAweDEoJXJkaSksJWVkeAoJCXJldHVybiBuZXRpZl9yeChza2IpOwoKCWNl bGwgPSB0aGlzX2NwdV9wdHIoZ2NlbGxzLT5jZWxscyk7CiAgICA1YmZhOgk4MyBmYSAwMSAgICAg ICAgICAgICAJY21wICAgICQweDEsJWVkeAogICAgNWJmZDoJODkgNTAgMTAgICAgICAgICAgICAg CW1vdiAgICAlZWR4LDB4MTAoJXJheCkKICAgIDVjMDA6CTBmIDg1IDkyIGY4IGZmIGZmICAgIAlq bmUgICAgNTQ5OCA8dnhsYW5fcmN2KzB4Yzg+CgoJaWYgKHNrYl9xdWV1ZV9sZW4oJmNlbGwtPm5h cGlfc2ticykgPiBuZXRkZXZfbWF4X2JhY2tsb2cpIHsKICAgIDVjMDY6CTQ4IDhiIDUwIDI4ICAg ICAgICAgIAltb3YgICAgMHgyOCglcmF4KSwlcmR4CiAgICA1YzBhOgk0OCA4ZCA3OCAxOCAgICAg ICAgICAJbGVhICAgIDB4MTgoJXJheCksJXJkaQogICAgNWMwZToJODAgZTIgMDIgICAgICAgICAg ICAgCWFuZCAgICAkMHgyLCVkbAoKc3RhdGljIGlubGluZSB2b2lkIF9fc2tiX3F1ZXVlX2JlZm9y ZShzdHJ1Y3Qgc2tfYnVmZl9oZWFkICpsaXN0LAoJCQkJICAgICAgc3RydWN0IHNrX2J1ZmYgKm5l eHQsCgkJCQkgICAgICBzdHJ1Y3Qgc2tfYnVmZiAqbmV3c2spCnsKCV9fc2tiX2luc2VydChuZXdz aywgbmV4dC0+cHJldiwgbmV4dCwgbGlzdCk7CiAgICA1YzExOgkwZiA4NSA4MSBmOCBmZiBmZiAg ICAJam5lICAgIDU0OTggPHZ4bGFuX3JjdisweGM4PgoJCXN0cnVjdCBza19idWZmX2hlYWQgKmxp c3QpOwpzdGF0aWMgaW5saW5lIHZvaWQgX19za2JfaW5zZXJ0KHN0cnVjdCBza19idWZmICpuZXdz aywKCQkJCXN0cnVjdCBza19idWZmICpwcmV2LCBzdHJ1Y3Qgc2tfYnVmZiAqbmV4dCwKCQkJCXN0 cnVjdCBza19idWZmX2hlYWQgKmxpc3QpCnsKCW5ld3NrLT5uZXh0ID0gbmV4dDsKICAgIDVjMTc6 CWYwIDBmIGJhIDY4IDI4IDAwICAgIAlsb2NrIGJ0c2wgJDB4MCwweDI4KCVyYXgpCgluZXdzay0+ cHJldiA9IHByZXY7CgluZXh0LT5wcmV2ICA9IHByZXYtPm5leHQgPSBuZXdzazsKICAgIDVjMWQ6 CTBmIDgyIDc1IGY4IGZmIGZmICAgIAlqYiAgICAgNTQ5OCA8dnhsYW5fcmN2KzB4Yzg+CiAgICA1 YzIzOgllOCAwMCAwMCAwMCAwMCAgICAgICAJY2FsbHEgIDVjMjggPHZ4bGFuX3JjdisweDg1OD4K CWxpc3QtPnFsZW4rKzsKICAgIDVjMjg6CWU5IDZiIGY4IGZmIGZmICAgICAgIAlqbXBxICAgNTQ5 OCA8dnhsYW5fcmN2KzB4Yzg+CiAgICA1YzJkOgk4MCAzZCAwMCAwMCAwMCAwMCAwMCAJY21wYiAg ICQweDAsMHgwKCVyaXApICAgICAgICAjIDVjMzQgPHZ4bGFuX3JjdisweDg2ND4KCQlrZnJlZV9z a2Ioc2tiKTsKCQlyZXR1cm4gTkVUX1JYX0RST1A7Cgl9CgoJX19za2JfcXVldWVfdGFpbCgmY2Vs bC0+bmFwaV9za2JzLCBza2IpOwoJaWYgKHNrYl9xdWV1ZV9sZW4oJmNlbGwtPm5hcGlfc2ticykg PT0gMSkKICAgIDVjMzQ6CTBmIDg0IGNkIGY5IGZmIGZmICAgIAlqZSAgICAgNTYwNyA8dnhsYW5f cmN2KzB4MjM3PgoJCW5hcGlfc2NoZWR1bGUoJmNlbGwtPm5hcGkpOwogICAgNWMzYToJNjYgODMg ZmUgMDIgICAgICAgICAgCWNtcCAgICAkMHgyLCVzaQogKiBpbnN1cmUgb25seSBvbmUgTkFQSSBw b2xsIGluc3RhbmNlIHJ1bnMuICBXZSBhbHNvIG1ha2UKICogc3VyZSB0aGVyZSBpcyBubyBwZW5k aW5nIE5BUEkgZGlzYWJsZS4KICovCnN0YXRpYyBpbmxpbmUgYm9vbCBuYXBpX3NjaGVkdWxlX3By ZXAoc3RydWN0IG5hcGlfc3RydWN0ICpuKQp7CglyZXR1cm4gIW5hcGlfZGlzYWJsZV9wZW5kaW5n KG4pICYmCiAgICA1YzNlOgkwZiA4NCBiOCAwMSAwMCAwMCAgICAJamUgICAgIDVkZmMgPHZ4bGFu X3JjdisweGEyYz4KICAgIDVjNDQ6CWU4IDAwIDAwIDAwIDAwICAgICAgIAljYWxscSAgNWM0OSA8 dnhsYW5fcmN2KzB4ODc5PgogKiBUaGlzIG9wZXJhdGlvbiBpcyBhdG9taWMgYW5kIGNhbm5vdCBi ZSByZW9yZGVyZWQuCiAqIEl0IGFsc28gaW1wbGllcyBhIG1lbW9yeSBiYXJyaWVyLgogKi8Kc3Rh dGljIF9fYWx3YXlzX2lubGluZSBib29sIHRlc3RfYW5kX3NldF9iaXQobG9uZyBuciwgdm9sYXRp bGUgdW5zaWduZWQgbG9uZyAqYWRkcikKewoJR0VOX0JJTkFSWV9STVdjYyhMT0NLX1BSRUZJWCAi YnRzIiwgKmFkZHIsICJJciIsIG5yLCAiJTAiLCBjKTsKICAgIDVjNDk6CTg1IGMwICAgICAgICAg ICAgICAgIAl0ZXN0ICAgJWVheCwlZWF4CiAgICA1YzRiOgkwZiA4NCBiNiBmOSBmZiBmZiAgICAJ amUgICAgIDU2MDcgPHZ4bGFuX3JjdisweDIzNz4KICAgIDVjNTE6CTQxIGJlIDAxIDAwIDAwIDAw ICAgIAltb3YgICAgJDB4MSwlcjE0ZAogKiBydW5uaW5nLgogKi8Kc3RhdGljIGlubGluZSB2b2lk IG5hcGlfc2NoZWR1bGUoc3RydWN0IG5hcGlfc3RydWN0ICpuKQp7CglpZiAobmFwaV9zY2hlZHVs ZV9wcmVwKG4pKQoJCV9fbmFwaV9zY2hlZHVsZShuKTsKICAgIDVjNTc6CWU5IDdiIGZlIGZmIGZm ICAgICAgIAlqbXBxICAgNWFkNyA8dnhsYW5fcmN2KzB4NzA3PgogICAgNWM1YzoJODMgZTIgMDMg ICAgICAgICAgICAgCWFuZCAgICAkMHgzLCVlZHgKI2lmIElTX0VOQUJMRUQoQ09ORklHX0lQVjYp CgllbHNlCgkJZXJyID0gSVA2X0VDTl9kZWNhcHN1bGF0ZShvaXBoLCBza2IpOwojZW5kaWYKCglp ZiAodW5saWtlbHkoZXJyKSAmJiBsb2dfZWNuX2Vycm9yKSB7CiAgICA1YzVmOgk4MCBmYSAwMyAg ICAgICAgICAgICAJY21wICAgICQweDMsJWRsCiAgICA1YzYyOgkwZiA4NSA5ZiBmOSBmZiBmZiAg ICAJam5lICAgIDU2MDcgPHZ4bGFuX3JjdisweDIzNz4KICAgIDVjNjg6CTY2IDQxIDgzIGY4IDA4 ICAgICAgIAljbXAgICAgJDB4OCwlcjh3CgkJaWYgKHZ4bGFuX2dldF9za19mYW1pbHkodnMpID09 IEFGX0lORVQpCiAgICA1YzZkOgkwZiA4NCAyNyAwMSAwMCAwMCAgICAJamUgICAgIDVkOWEgPHZ4 bGFuX3JjdisweDljYT4KICAgIDVjNzM6CTY2IDQxIDgxIGY4IDg2IGRkICAgIAljbXAgICAgJDB4 ZGQ4Niwlcjh3CgkJCW5ldF9pbmZvX3JhdGVsaW1pdGVkKCJub24tRUNUIGZyb20gJXBJNCB3aXRo IFRPUz0lI3hcbiIsCgkJCQkJICAgICAmKChzdHJ1Y3QgaXBoZHIgKilvaXBoKS0+c2FkZHIsCgkJ CQkJICAgICAoKHN0cnVjdCBpcGhkciAqKW9pcGgpLT50b3MpOwoJCWVsc2UKCQkJbmV0X2luZm9f cmF0ZWxpbWl0ZWQoIm5vbi1FQ1QgZnJvbSAlcEk2XG4iLAogICAgNWM3OToJMGYgODQgOTggZmUg ZmYgZmYgICAgCWplICAgICA1YjE3IDx2eGxhbl9yY3YrMHg3NDc+CiAgICA1YzdmOgllOSA4MyBm OSBmZiBmZiAgICAgICAJam1wcSAgIDU2MDcgPHZ4bGFuX3JjdisweDIzNz4KICAgIDVjODQ6CTQ5 IDhiIDdjIDI0IDIwICAgICAgIAltb3YgICAgMHgyMCglcjEyKSwlcmRpCiAgICA1Yzg5Ogk0OCA4 ZCA1NCAzMSAwNiAgICAgICAJbGVhICAgIDB4NiglcmN4LCVyc2ksMSksJXJkeAoJCWNhc2UgSU5F VF9FQ05fQ0U6CgkJCXJldHVybiAyOwoJCX0KCX0KCglpZiAoSU5FVF9FQ05faXNfY2Uob3V0ZXIp KQogICAgNWM4ZToJNDggOGQgNzQgMjQgMzAgICAgICAgCWxlYSAgICAweDMwKCVyc3ApLCVyc2kK ICAgIDVjOTM6CWU4IDk4IGQ2IGZmIGZmICAgICAgIAljYWxscSAgMzMzMCA8dnhsYW5fc25vb3A+ CglpcHY2X2NoYW5nZV9kc2ZpZWxkKGlubmVyLCBJTkVUX0VDTl9NQVNLLCBkc2NwKTsKfQoKc3Rh dGljIGlubGluZSBpbnQgSU5FVF9FQ05fc2V0X2NlKHN0cnVjdCBza19idWZmICpza2IpCnsKCXN3 aXRjaCAoc2tiLT5wcm90b2NvbCkgewogICAgNWM5ODoJODQgYzAgICAgICAgICAgICAgICAgCXRl c3QgICAlYWwsJWFsCiAgICA1YzlhOgkwZiA4NSBmMCBmNyBmZiBmZiAgICAJam5lICAgIDU0OTAg PHZ4bGFuX3JjdisweGMwPgogICAgNWNhMDoJNDkgOGIgOGMgMjQgZDAgMDAgMDAgCW1vdiAgICAw eGQwKCVyMTIpLCVyY3gKICAgIDVjYTc6CTAwIAogICAgNWNhODoJNDUgMGYgYjcgYWMgMjQgYzQg MDAgCW1vdnp3bCAweGM0KCVyMTIpLCVyMTNkCiAgICA1Y2FmOgkwMCAwMCAKICAgIDVjYjE6CWU5 IDJjIGZkIGZmIGZmICAgICAgIAlqbXBxICAgNTllMiA8dnhsYW5fcmN2KzB4NjEyPgoJCXNhZGRy LnNhLnNhX2ZhbWlseSA9IEFGX0lORVQ2OwojZW5kaWYKCX0KCglpZiAoKHZ4bGFuLT5mbGFncyAm IFZYTEFOX0ZfTEVBUk4pICYmCgkgICAgdnhsYW5fc25vb3Aoc2tiLT5kZXYsICZzYWRkciwgZXRo X2hkcihza2IpLT5oX3NvdXJjZSkpCiAgICA1Y2I2Ogk0MiA4YiA0NCAyOSAwYyAgICAgICAJbW92 ICAgIDB4YyglcmN4LCVyMTMsMSksJWVheAogICAgNWNiYjoJYmEgMDIgMDAgMDAgMDAgICAgICAg CW1vdiAgICAkMHgyLCVlZHgKICAgIDVjYzA6CTY2IDg5IDU0IDI0IDMwICAgICAgIAltb3YgICAg JWR4LDB4MzAoJXJzcCkKICAgIDVjYzU6CTg5IDQ0IDI0IDM0ICAgICAgICAgIAltb3YgICAgJWVh eCwweDM0KCVyc3ApCgkJc2FkZHIuc2luNi5zaW42X2FkZHIgPSBpcHY2X2hkcihza2IpLT5zYWRk cjsKCQlzYWRkci5zYS5zYV9mYW1pbHkgPSBBRl9JTkVUNjsKI2VuZGlmCgl9CgoJaWYgKCh2eGxh bi0+ZmxhZ3MgJiBWWExBTl9GX0xFQVJOKSAmJgogICAgNWNjOToJZTkgMDcgZmQgZmYgZmYgICAg ICAgCWptcHEgICA1OWQ1IDx2eGxhbl9yY3YrMHg2MDU+CiAgICA1Y2NlOgkwZiBiNyBjMCAgICAg ICAgICAgICAJbW92endsICVheCwlZWF4CiAgICA1Y2QxOgkwZiBiNiA3YyAwMSAwMSAgICAgICAJ bW92emJsIDB4MSglcmN4LCVyYXgsMSksJWVkaQogICAgNWNkNjoJZTkgNDggZmQgZmYgZmYgICAg ICAgCWptcHEgICA1YTIzIDx2eGxhbl9yY3YrMHg2NTM+CiAgICA1Y2RiOgk0NCA4OSBmMCAgICAg ICAgICAgICAJbW92ICAgICVyMTRkLCVlYXgKICAgIDVjZGU6CTQxIDgwIDhjIDI0IDkxIDAwIDAw IAlvcmIgICAgJDB4NiwweDkxKCVyMTIpCiAgICA1Y2U1OgkwMCAwNiAKCWlmIChldGhlcl9hZGRy X2VxdWFsKGV0aF9oZHIoc2tiKS0+aF9zb3VyY2UsIHZ4bGFuLT5kZXYtPmRldl9hZGRyKSkKCQly ZXR1cm4gZmFsc2U7CgoJLyogR2V0IGFkZHJlc3MgZnJvbSB0aGUgb3V0ZXIgSVAgaGVhZGVyICov CglpZiAodnhsYW5fZ2V0X3NrX2ZhbWlseSh2cykgPT0gQUZfSU5FVCkgewoJCXNhZGRyLnNpbi5z aW5fYWRkci5zX2FkZHIgPSBpcF9oZHIoc2tiKS0+c2FkZHI7CiAgICA1Y2U3OgkyNSBmZSBmZiAw MCAwMCAgICAgICAJYW5kICAgICQweGZmZmUsJWVheAoJCXNhZGRyLnNhLnNhX2ZhbWlseSA9IEFG X0lORVQ7CiAgICA1Y2VjOgk0YyAwMSBkMCAgICAgICAgICAgICAJYWRkICAgICVyMTAsJXJheAog ICAgNWNlZjoJNDggMjkgZjAgICAgICAgICAgICAgCXN1YiAgICAlcnNpLCVyYXgKICAgIDVjZjI6 CTY2IDQxIDg5IDg0IDI0IDk4IDAwIAltb3YgICAgJWF4LDB4OTgoJXIxMikKICAgIDVjZjk6CTAw IDAwIAoJaWYgKGV0aGVyX2FkZHJfZXF1YWwoZXRoX2hkcihza2IpLT5oX3NvdXJjZSwgdnhsYW4t PmRldi0+ZGV2X2FkZHIpKQoJCXJldHVybiBmYWxzZTsKCgkvKiBHZXQgYWRkcmVzcyBmcm9tIHRo ZSBvdXRlciBJUCBoZWFkZXIgKi8KCWlmICh2eGxhbl9nZXRfc2tfZmFtaWx5KHZzKSA9PSBBRl9J TkVUKSB7CgkJc2FkZHIuc2luLnNpbl9hZGRyLnNfYWRkciA9IGlwX2hkcihza2IpLT5zYWRkcjsK ICAgIDVjZmI6CTBmIGI3IDQ0IDI0IDE4ICAgICAgIAltb3Z6d2wgMHgxOCglcnNwKSwlZWF4CgkJ CQkgICAgIHN0cnVjdCBza19idWZmICpza2IpCnsKCV9fdTggaW5uZXI7CgoJaWYgKHNrYi0+cHJv dG9jb2wgPT0gaHRvbnMoRVRIX1BfSVApKQoJCWlubmVyID0gaXBfaGRyKHNrYiktPnRvczsKICAg IDVkMDA6CTQ0IDI5IGYwICAgICAgICAgICAgIAlzdWIgICAgJXIxNGQsJWVheAogICAgNWQwMzoJ NjYgNDEgODkgODQgMjQgOWEgMDAgCW1vdiAgICAlYXgsMHg5YSglcjEyKQogICAgNWQwYToJMDAg MDAgCgpzdGF0aWMgaW5saW5lIHZvaWQgc2tiX3JlbWNzdW1fYWRqdXN0X3BhcnRpYWwoc3RydWN0 IHNrX2J1ZmYgKnNrYiwgdm9pZCAqcHRyLAoJCQkJCSAgICAgIHUxNiBzdGFydCwgdTE2IG9mZnNl dCkKewoJc2tiLT5pcF9zdW1tZWQgPSBDSEVDS1NVTV9QQVJUSUFMOwoJc2tiLT5jc3VtX3N0YXJ0 ID0gKCh1bnNpZ25lZCBjaGFyICopcHRyICsgc3RhcnQpIC0gc2tiLT5oZWFkOwogICAgNWQwYzoJ NDEgOGIgOTcgMWMgMjAgMDAgMDAgCW1vdiAgICAweDIwMWMoJXIxNSksJWVkeAp9IHdoaWxlICgw KQoKc3RhdGljIGlubGluZSB2b2lkIHNrYl9yZW1jc3VtX2FkanVzdF9wYXJ0aWFsKHN0cnVjdCBz a19idWZmICpza2IsIHZvaWQgKnB0ciwKCQkJCQkgICAgICB1MTYgc3RhcnQsIHUxNiBvZmZzZXQp CnsKCXNrYi0+aXBfc3VtbWVkID0gQ0hFQ0tTVU1fUEFSVElBTDsKICAgIDVkMTM6CWU5IDYxIGZi IGZmIGZmICAgICAgIAlqbXBxICAgNTg3OSA8dnhsYW5fcmN2KzB4NGE5PgoJc2tiLT5jc3VtX3N0 YXJ0ID0gKCh1bnNpZ25lZCBjaGFyICopcHRyICsgc3RhcnQpIC0gc2tiLT5oZWFkOwogICAgNWQx ODoJMzkgYzcgICAgICAgICAgICAgICAgCWNtcCAgICAlZWF4LCVlZGkKICAgIDVkMWE6CTg5IDU0 IDI0IDA4ICAgICAgICAgIAltb3YgICAgJWVkeCwweDgoJXJzcCkKICAgIDVkMWU6CTQ0IDg5IDZj IDI0IDIwICAgICAgIAltb3YgICAgJXIxM2QsMHgyMCglcnNwKQogICAgNWQyMzoJNGMgODkgNDQg MjQgMTAgICAgICAgCW1vdiAgICAlcjgsMHgxMCglcnNwKQogICAgNWQyODoJMGYgODIgNjIgZjcg ZmYgZmYgICAgCWpiICAgICA1NDkwIDx2eGxhbl9yY3YrMHhjMD4KCXNrYi0+Y3N1bV9vZmZzZXQg PSBvZmZzZXQgLSBzdGFydDsKICAgIDVkMmU6CTI5IGYwICAgICAgICAgICAgICAgIAlzdWIgICAg JWVzaSwlZWF4CiAgICA1ZDMwOgk0YyA4OSBlNyAgICAgICAgICAgICAJbW92ICAgICVyMTIsJXJk aQogICAgNWQzMzoJODkgYzYgICAgICAgICAgICAgICAgCW1vdiAgICAlZWF4LCVlc2kKICAgIDVk MzU6CWU4IDAwIDAwIDAwIDAwICAgICAgIAljYWxscSAgNWQzYSA8dnhsYW5fcmN2KzB4OTZhPgog ICAgNWQzYToJNDggODUgYzAgICAgICAgICAgICAgCXRlc3QgICAlcmF4LCVyYXgKICAgIDVkM2Q6 CTRjIDhiIDQ0IDI0IDEwICAgICAgIAltb3YgICAgMHgxMCglcnNwKSwlcjgKICAgIDVkNDI6CTQ0 IDhiIDRjIDI0IDIwICAgICAgIAltb3YgICAgMHgyMCglcnNwKSwlcjlkCiAgICA1ZDQ3Ogk4YiA1 NCAyNCAwOCAgICAgICAgICAJbW92ICAgIDB4OCglcnNwKSwlZWR4CgpzdGF0aWMgaW5saW5lIGlu dCBwc2tiX21heV9wdWxsKHN0cnVjdCBza19idWZmICpza2IsIHVuc2lnbmVkIGludCBsZW4pCnsK CWlmIChsaWtlbHkobGVuIDw9IHNrYl9oZWFkbGVuKHNrYikpKQoJCXJldHVybiAxOwoJaWYgKHVu bGlrZWx5KGxlbiA+IHNrYi0+bGVuKSkKICAgIDVkNGI6CTBmIDg0IDNmIGY3IGZmIGZmICAgIAlq ZSAgICAgNTQ5MCA8dnhsYW5fcmN2KzB4YzA+CiAgICA1ZDUxOgllOSA1ZCBmYSBmZiBmZiAgICAg ICAJam1wcSAgIDU3YjMgPHZ4bGFuX3JjdisweDNlMz4KICAgIDVkNTY6CTMxIGQyICAgICAgICAg ICAgICAgIAl4b3IgICAgJWVkeCwlZWR4CiAgICA1ZDU4OgliZSAwZSAwMCAwMCAwMCAgICAgICAJ bW92ICAgICQweGUsJWVzaQogICAgNWQ1ZDoJZTggMDAgMDAgMDAgMDAgICAgICAgCWNhbGxxICA1 ZDYyIDx2eGxhbl9yY3YrMHg5OTI+CgkJcmV0dXJuIDA7CglyZXR1cm4gX19wc2tiX3B1bGxfdGFp bChza2IsIGxlbiAtIHNrYl9oZWFkbGVuKHNrYikpICE9IE5VTEw7CiAgICA1ZDYyOgk0MSAwZiBi NyBiNCAyNCBjNiAwMCAJbW92endsIDB4YzYoJXIxMiksJWVzaQogICAgNWQ2OToJMDAgMDAgCgkJ Z290byBvdXQ7CgoJc3RhcnQgPSB2eGxhbl9yY29fc3RhcnQodW5wYXJzZWQtPnZ4X3ZuaSk7Cglv ZmZzZXQgPSBzdGFydCArIHZ4bGFuX3Jjb19vZmZzZXQodW5wYXJzZWQtPnZ4X3ZuaSk7CgoJaWYg KCFwc2tiX21heV9wdWxsKHNrYiwgb2Zmc2V0ICsgc2l6ZW9mKHUxNikpKQogICAgNWQ2YjoJNDkg OGIgOGMgMjQgZDAgMDAgMDAgCW1vdiAgICAweGQwKCVyMTIpLCVyY3gKICAgIDVkNzI6CTAwIAog ICAgNWQ3MzoJZjcgZDAgICAgICAgICAgICAgICAgCW5vdCAgICAlZWF4CiAgICA1ZDc1Ogk4OSBj MiAgICAgICAgICAgICAgICAJbW92ICAgICVlYXgsJWVkeAogICAgNWQ3NzoJNDEgOGIgODQgMjQg OTggMDAgMDAgCW1vdiAgICAweDk4KCVyMTIpLCVlYXgKICAgIDVkN2U6CTAwIAogICAgNWQ3ZjoJ MDEgZDAgICAgICAgICAgICAgICAgCWFkZCAgICAlZWR4LCVlYXgKICAgIDVkODE6CTgzIGQwIDAw ICAgICAgICAgICAgIAlhZGMgICAgJDB4MCwlZWF4CiAgICA1ZDg0Ogk0MSA4OSA4NCAyNCA5OCAw MCAwMCAJbW92ICAgICVlYXgsMHg5OCglcjEyKQogICAgNWQ4YjoJMDAgCnN0YXRpYyBfX2Fsd2F5 c19pbmxpbmUgdm9pZApfX3NrYl9wb3N0cHVsbF9yY3N1bShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBj b25zdCB2b2lkICpzdGFydCwgdW5zaWduZWQgaW50IGxlbiwKCQkgICAgIHVuc2lnbmVkIGludCBv ZmYpCnsKCWlmIChza2ItPmlwX3N1bW1lZCA9PSBDSEVDS1NVTV9DT01QTEVURSkKCQlza2ItPmNz dW0gPSBjc3VtX2Jsb2NrX3N1Yihza2ItPmNzdW0sCiAgICA1ZDhjOgk0OCA4ZCAzYyAzMSAgICAg ICAgICAJbGVhICAgICglcmN4LCVyc2ksMSksJXJkaQogICAgNWQ5MDoJZTkgZTEgZmIgZmYgZmYg ICAgICAgCWptcHEgICA1OTc2IDx2eGxhbl9yY3YrMHg1YTY+CiAgICA1ZDk1OgllOCAwMCAwMCAw MCAwMCAgICAgICAJY2FsbHEgIDVkOWEgPHZ4bGFuX3JjdisweDljYT4KICAgIDVkOWE6CTQxIDhi IDk0IDI0IGM4IDAwIDAwIAltb3YgICAgMHhjOCglcjEyKSwlZWR4CiAgICA1ZGExOgkwMCAKICAg IDVkYTI6CTQ4IDAxIGM4ICAgICAgICAgICAgIAlhZGQgICAgJXJjeCwlcmF4CiAgICA1ZGE1Ogk0 OCA4ZCA3MCAxNCAgICAgICAgICAJbGVhICAgIDB4MTQoJXJheCksJXJzaQogICAgNWRhOToJNDgg MDEgZDEgICAgICAgICAgICAgCWFkZCAgICAlcmR4LCVyY3gKICAgIDVkYWM6CTQ4IDM5IGNlICAg ICAgICAgICAgIAljbXAgICAgJXJjeCwlcnNpCiAgICA1ZGFmOgkwZiA4NyA1MiBmOCBmZiBmZiAg ICAJamEgICAgIDU2MDcgPHZ4bGFuX3JjdisweDIzNz4KICAgIDVkYjU6CTBmIGI2IDcwIDAxICAg ICAgICAgIAltb3Z6YmwgMHgxKCVyYXgpLCVlc2kKICAgIDVkYjk6CTBmIGI3IDc4IDBhICAgICAg ICAgIAltb3Z6d2wgMHhhKCVyYXgpLCVlZGkKICAgIDVkYmQ6CTg5IGYxICAgICAgICAgICAgICAg IAltb3YgICAgJWVzaSwlZWN4CiAgICA1ZGJmOgk4MyBjNiAwMSAgICAgICAgICAgICAJYWRkICAg ICQweDEsJWVzaQogICAgNWRjMjoJODkgZjIgICAgICAgICAgICAgICAgCW1vdiAgICAlZXNpLCVl ZHgKICAgIDVkYzQ6CTgzIGUyIDAzICAgICAgICAgICAgIAlhbmQgICAgJDB4MywlZWR4Cgpkcm9w OgoJLyogQ29uc3VtZSBiYWQgcGFja2V0ICovCglrZnJlZV9za2Ioc2tiKTsKCXJldHVybiAwOwp9 CiAgICA1ZGM3Ogk0MCA4MCBlNiAwMiAgICAgICAgICAJYW5kICAgICQweDIsJXNpbAoKc3RhdGlj IGlubGluZSBpbnQgSU5FVF9FQ05fc2V0X2NlKHN0cnVjdCBza19idWZmICpza2IpCnsKCXN3aXRj aCAoc2tiLT5wcm90b2NvbCkgewoJY2FzZSBjcHVfdG9fYmUxNihFVEhfUF9JUCk6CgkJaWYgKHNr Yl9uZXR3b3JrX2hlYWRlcihza2IpICsgc2l6ZW9mKHN0cnVjdCBpcGhkcikgPD0KICAgIDVkY2I6 CTBmIDg0IDM2IGY4IGZmIGZmICAgIAlqZSAgICAgNTYwNyA8dnhsYW5fcmN2KzB4MjM3PgogICAg NWRkMToJNjYgYzEgYzIgMDggICAgICAgICAgCXJvbCAgICAkMHg4LCVkeAogICAgNWRkNToJMzEg ZjYgICAgICAgICAgICAgICAgCXhvciAgICAlZXNpLCVlc2kKICAgIDVkZDc6CTBmIGI3IGQyICAg ICAgICAgICAgIAltb3Z6d2wgJWR4LCVlZHgKICAgIDVkZGE6CThkIDk0IDE3IGZmIGZiIDAwIDAw IAlsZWEgICAgMHhmYmZmKCVyZGksJXJkeCwxKSwlZWR4CiAgICA1ZGUxOgk4MSBmYSBmZSBmZiAw MCAwMCAgICAJY21wICAgICQweGZmZmUsJWVkeAogICAgfSB3aGlsZSAoMCkKCnN0YXRpYyBpbmxp bmUgaW50IElQX0VDTl9zZXRfY2Uoc3RydWN0IGlwaGRyICppcGgpCnsKCXUzMiBjaGVjayA9IChf X2ZvcmNlIHUzMilpcGgtPmNoZWNrOwoJdTMyIGVjbiA9IChpcGgtPnRvcyArIDEpICYgSU5FVF9F Q05fTUFTSzsKICAgIDVkZTc6CTQwIDBmIDk3IGM2ICAgICAgICAgIAlzZXRhICAgJXNpbAoJCShs YWJlbCkgfD0gaHRvbmwoSU5FVF9FQ05fRUNUXzAgPDwgMjApOwkJCVwKICAgIH0gd2hpbGUgKDAp CgpzdGF0aWMgaW5saW5lIGludCBJUF9FQ05fc2V0X2NlKHN0cnVjdCBpcGhkciAqaXBoKQp7Cgl1 MzIgY2hlY2sgPSAoX19mb3JjZSB1MzIpaXBoLT5jaGVjazsKICAgIDVkZWI6CTgzIGM5IDAzICAg ICAgICAgICAgIAlvciAgICAgJDB4MywlZWN4Cgl1MzIgZWNuID0gKGlwaC0+dG9zICsgMSkgJiBJ TkVUX0VDTl9NQVNLOwogICAgNWRlZToJMDEgZjIgICAgICAgICAgICAgICAgCWFkZCAgICAlZXNp LCVlZHgKICAgIDVkZjA6CTg4IDQ4IDAxICAgICAgICAgICAgIAltb3YgICAgJWNsLDB4MSglcmF4 KQogICAgNWRmMzoJNjYgODkgNTAgMGEgICAgICAgICAgCW1vdiAgICAlZHgsMHhhKCVyYXgpCgkg KiBJTkVUX0VDTl9OT1RfRUNUID0+IDAxCgkgKiBJTkVUX0VDTl9FQ1RfMSAgID0+IDEwCgkgKiBJ TkVUX0VDTl9FQ1RfMCAgID0+IDExCgkgKiBJTkVUX0VDTl9DRSAgICAgID0+IDAwCgkgKi8KCWlm ICghKGVjbiAmIDIpKQogICAgNWRmNzoJZTkgMGIgZjggZmYgZmYgICAgICAgCWptcHEgICA1NjA3 IDx2eGxhbl9yY3YrMHgyMzc+CiAgICA1ZGZjOgllOCAwMCAwMCAwMCAwMCAgICAgICAJY2FsbHEg IDVlMDEgPHZ4bGFuX3JjdisweGEzMT4KCS8qCgkgKiBUaGUgZm9sbG93aW5nIGdpdmVzIHVzOgoJ ICogSU5FVF9FQ05fRUNUXzEgPT4gY2hlY2sgKz0gaHRvbnMoMHhGRkZEKQoJICogSU5FVF9FQ05f RUNUXzAgPT4gY2hlY2sgKz0gaHRvbnMoMHhGRkZFKQoJICovCgljaGVjayArPSAoX19mb3JjZSB1 MTYpaHRvbnMoMHhGRkZCKSArIChfX2ZvcmNlIHUxNilodG9ucyhlY24pOwogICAgNWUwMToJODUg YzAgICAgICAgICAgICAgICAgCXRlc3QgICAlZWF4LCVlYXgKICAgIDVlMDM6CTBmIDg0IGZlIGY3 IGZmIGZmICAgIAlqZSAgICAgNTYwNyA8dnhsYW5fcmN2KzB4MjM3PgogICAgNWUwOToJNDEgYmUg MDEgMDAgMDAgMDAgICAgCW1vdiAgICAkMHgxLCVyMTRkCiAgICA1ZTBmOgk0MSAwZiBiNiA1NSAw MSAgICAgICAJbW92emJsIDB4MSglcjEzKSwlZWR4CgoJaXBoLT5jaGVjayA9IChfX2ZvcmNlIF9f c3VtMTYpKGNoZWNrICsgKGNoZWNrPj0weEZGRkYpKTsKICAgIDVlMTQ6CTQ5IDhkIDc1IDBjICAg ICAgICAgIAlsZWEgICAgMHhjKCVyMTMpLCVyc2kKICAgIDVlMTg6CTQ4IGM3IGM3IDAwIDAwIDAw IDAwIAltb3YgICAgJDB4MCwlcmRpCiAgICA1ZTFmOgllOCAwMCAwMCAwMCAwMCAgICAgICAJY2Fs bHEgIDVlMjQgPHZ4bGFuX3JjdisweGE1ND4KICAgIDVlMjQ6CWU5IGJlIGZjIGZmIGZmICAgICAg IAlqbXBxICAgNWFlNyA8dnhsYW5fcmN2KzB4NzE3PgogICAgNWUyOToJZjAgNDggZmYgODIgZTgg MDEgMDAgCWxvY2sgaW5jcSAweDFlOCglcmR4KQogICAgNWUzMDoJMDAgCgkJZXJyID0gSVA2X0VD Tl9kZWNhcHN1bGF0ZShvaXBoLCBza2IpOwojZW5kaWYKCglpZiAodW5saWtlbHkoZXJyKSAmJiBs b2dfZWNuX2Vycm9yKSB7CgkJaWYgKHZ4bGFuX2dldF9za19mYW1pbHkodnMpID09IEFGX0lORVQp CgkJCW5ldF9pbmZvX3JhdGVsaW1pdGVkKCJub24tRUNUIGZyb20gJXBJNCB3aXRoIFRPUz0lI3hc biIsCiAgICA1ZTMxOgk0YyA4OSBlNyAgICAgICAgICAgICAJbW92ICAgICVyMTIsJXJkaQogICAg NWUzNDoJZTggMDAgMDAgMDAgMDAgICAgICAgCWNhbGxxICA1ZTM5IDx2eGxhbl9yY3YrMHhhNjk+ CiAgICA1ZTM5OgllOSA1YSBmNiBmZiBmZiAgICAgICAJam1wcSAgIDU0OTggPHZ4bGFuX3Jjdisw eGM4PgogICAgNWUzZToJNGMgODkgZTcgICAgICAgICAgICAgCW1vdiAgICAlcjEyLCVyZGkKICAg IDVlNDE6CTRjIDg5IDU0IDI0IDA4ICAgICAgIAltb3YgICAgJXIxMCwweDgoJXJzcCkKICAgIDVl NDY6CTQ0IDg5IDRjIDI0IDIwICAgICAgIAltb3YgICAgJXI5ZCwweDIwKCVyc3ApCiAgICA1ZTRi Ogk0YyA4OSA0NCAyNCAxMCAgICAgICAJbW92ICAgICVyOCwweDEwKCVyc3ApCiAgICA1ZTUwOgll OCAwMCAwMCAwMCAwMCAgICAgICAJY2FsbHEgIDVlNTUgPHZ4bGFuX3JjdisweGE4NT4KICAgIDVl NTU6CTQxIDBmIGI2IDg0IDI0IDkxIDAwIAltb3Z6YmwgMHg5MSglcjEyKSwlZWF4CiAgICA1ZTVj OgkwMCAwMCAKICoKICogQXRvbWljYWxseSBpbmNyZW1lbnRzIEB2IGJ5IDEuCiAqLwpzdGF0aWMg X19hbHdheXNfaW5saW5lIHZvaWQgYXRvbWljNjRfaW5jKGF0b21pYzY0X3QgKnYpCnsKCWFzbSB2 b2xhdGlsZShMT0NLX1BSRUZJWCAiaW5jcSAlMCIKICAgIDVlNWU6CTRjIDhiIDU0IDI0IDA4ICAg ICAgIAltb3YgICAgMHg4KCVyc3ApLCVyMTAKCgljZWxsID0gdGhpc19jcHVfcHRyKGdjZWxscy0+ Y2VsbHMpOwoKCWlmIChza2JfcXVldWVfbGVuKCZjZWxsLT5uYXBpX3NrYnMpID4gbmV0ZGV2X21h eF9iYWNrbG9nKSB7CgkJYXRvbWljX2xvbmdfaW5jKCZkZXYtPnJ4X2Ryb3BwZWQpOwoJCWtmcmVl X3NrYihza2IpOwogICAgNWU2MzoJNDkgOGIgYmMgMjQgZDggMDAgMDAgCW1vdiAgICAweGQ4KCVy MTIpLCVyZGkKICAgIDVlNmE6CTAwIAogICAgNWU2YjoJNGMgOGIgNDQgMjQgMTAgICAgICAgCW1v diAgICAweDEwKCVyc3ApLCVyOAoJCXNrYl9yZW1jc3VtX2FkanVzdF9wYXJ0aWFsKHNrYiwgcHRy LCBzdGFydCwgb2Zmc2V0KTsKCQlyZXR1cm47Cgl9CgoJIGlmICh1bmxpa2VseShza2ItPmlwX3N1 bW1lZCAhPSBDSEVDS1NVTV9DT01QTEVURSkpIHsKCQlfX3NrYl9jaGVja3N1bV9jb21wbGV0ZShz a2IpOwogICAgNWU3MDoJNDQgOGIgNGMgMjQgMjAgICAgICAgCW1vdiAgICAweDIwKCVyc3ApLCVy OWQKICAgIDVlNzU6CTRjIDg5IGQ2ICAgICAgICAgICAgIAltb3YgICAgJXIxMCwlcnNpCiAgICA1 ZTc4Ogk4OSBjMiAgICAgICAgICAgICAgICAJbW92ICAgICVlYXgsJWVkeAogICAgNWU3YToJNDgg MjkgZmUgICAgICAgICAgICAgCXN1YiAgICAlcmRpLCVyc2kKICAgIDVlN2Q6CTgzIGUyIDA2ICAg ICAgICAgICAgIAlhbmQgICAgJDB4NiwlZWR4CiAgICA1ZTgwOgk4MCBmYSAwNCAgICAgICAgICAg ICAJY21wICAgICQweDQsJWRsCiAgICA1ZTgzOgk3NCAzZCAgICAgICAgICAgICAgICAJamUgICAg IDVlYzIgPHZ4bGFuX3JjdisweGFmMj4KCnN0YXRpYyBfX2Fsd2F5c19pbmxpbmUgdm9pZApfX3Nr Yl9wb3N0cHVsbF9yY3N1bShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBjb25zdCB2b2lkICpzdGFydCwg dW5zaWduZWQgaW50IGxlbiwKCQkgICAgIHVuc2lnbmVkIGludCBvZmYpCnsKCWlmIChza2ItPmlw X3N1bW1lZCA9PSBDSEVDS1NVTV9DT01QTEVURSkKICAgIDVlODU6CTgwIGZhIDA2ICAgICAgICAg ICAgIAljbXAgICAgJDB4NiwlZGwKICAgIDVlODg6CTBmIDg1IDU4IGY5IGZmIGZmICAgIAlqbmUg ICAgNTdlNiA8dnhsYW5fcmN2KzB4NDE2PgoJCXJldHVybjsKCX0KCgkgaWYgKHVubGlrZWx5KHNr Yi0+aXBfc3VtbWVkICE9IENIRUNLU1VNX0NPTVBMRVRFKSkgewoJCV9fc2tiX2NoZWNrc3VtX2Nv bXBsZXRlKHNrYik7CgkJc2tiX3Bvc3RwdWxsX3Jjc3VtKHNrYiwgc2tiLT5kYXRhLCBwdHIgLSAo dm9pZCAqKXNrYi0+ZGF0YSk7CiAgICA1ZThlOgk0MSAwZiBiNyA5NCAyNCA5OCAwMCAJbW92ends IDB4OTgoJXIxMiksJWVkeAogICAgNWU5NToJMDAgMDAgCiAgICA1ZTk3Ogk0OSAyYiBiYyAyNCBk MCAwMCAwMCAJc3ViICAgIDB4ZDAoJXIxMiksJXJkaQogICAgNWU5ZToJMDAgCgpzdGF0aWMgX19h bHdheXNfaW5saW5lIHZvaWQKX19za2JfcG9zdHB1bGxfcmNzdW0oc3RydWN0IHNrX2J1ZmYgKnNr YiwgY29uc3Qgdm9pZCAqc3RhcnQsIHVuc2lnbmVkIGludCBsZW4sCgkJICAgICB1bnNpZ25lZCBp bnQgb2ZmKQp7CglpZiAoc2tiLT5pcF9zdW1tZWQgPT0gQ0hFQ0tTVU1fQ09NUExFVEUpCiAgICA1 ZTlmOgkzOSBmYSAgICAgICAgICAgICAgICAJY21wICAgICVlZGksJWVkeAogICAgNWVhMToJMGYg ODkgM2YgZjkgZmYgZmYgICAgCWpucyAgICA1N2U2IDx2eGxhbl9yY3YrMHg0MTY+CgkJcmV0dXJu OwoJfQoKCSBpZiAodW5saWtlbHkoc2tiLT5pcF9zdW1tZWQgIT0gQ0hFQ0tTVU1fQ09NUExFVEUp KSB7CgkJX19za2JfY2hlY2tzdW1fY29tcGxldGUoc2tiKTsKCQlza2JfcG9zdHB1bGxfcmNzdW0o c2tiLCBza2ItPmRhdGEsIHB0ciAtICh2b2lkICopc2tiLT5kYXRhKTsKICAgIDVlYTc6CTgzIGUw IGY5ICAgICAgICAgICAgIAlhbmQgICAgJDB4ZmZmZmZmZjksJWVheAogICAgNWVhYToJNDEgODgg ODQgMjQgOTEgMDAgMDAgCW1vdiAgICAlYWwsMHg5MSglcjEyKQogICAgNWViMToJMDAgCgpzdGF0 aWMgX19hbHdheXNfaW5saW5lIHZvaWQKX19za2JfcG9zdHB1bGxfcmNzdW0oc3RydWN0IHNrX2J1 ZmYgKnNrYiwgY29uc3Qgdm9pZCAqc3RhcnQsIHVuc2lnbmVkIGludCBsZW4sCgkJICAgICB1bnNp Z25lZCBpbnQgb2ZmKQp7CglpZiAoc2tiLT5pcF9zdW1tZWQgPT0gQ0hFQ0tTVU1fQ09NUExFVEUp CiAgICA1ZWIyOgllOSAyZiBmOSBmZiBmZiAgICAgICAJam1wcSAgIDU3ZTYgPHZ4bGFuX3Jjdisw eDQxNj4KCQlza2ItPmNzdW0gPSBjc3VtX2Jsb2NrX3N1Yihza2ItPmNzdW0sCgkJCQkJICAgY3N1 bV9wYXJ0aWFsKHN0YXJ0LCBsZW4sIDApLCBvZmYpOwoJZWxzZSBpZiAoc2tiLT5pcF9zdW1tZWQg PT0gQ0hFQ0tTVU1fUEFSVElBTCAmJgogICAgNWViNzoJNDEgYmUgMDIgMDAgMDAgMDAgICAgCW1v diAgICAkMHgyLCVyMTRkCiAgICA1ZWJkOgllOSA0ZCBmZiBmZiBmZiAgICAgICAJam1wcSAgIDVl MGYgPHZ4bGFuX3JjdisweGEzZj4KICAgIDVlYzI6CTMxIGQyICAgICAgICAgICAgICAgIAl4b3Ig ICAgJWVkeCwlZWR4CiAgICA1ZWM0OgllOCAwMCAwMCAwMCAwMCAgICAgICAJY2FsbHEgIDVlYzkg PHZ4bGFuX3JjdisweGFmOT4KICAgIDVlYzk6CTQ1IDhiIDljIDI0IDk4IDAwIDAwIAltb3YgICAg MHg5OCglcjEyKSwlcjExZAogICAgNWVkMDoJMDAgCiAgICA1ZWQxOglmNyBkMCAgICAgICAgICAg ICAgICAJbm90ICAgICVlYXgKICAgIDVlZDM6CTRjIDhiIDQ0IDI0IDEwICAgICAgIAltb3YgICAg MHgxMCglcnNwKSwlcjgKCQkgc2tiX2NoZWNrc3VtX3N0YXJ0X29mZnNldChza2IpIDwgMCkKCQlz a2ItPmlwX3N1bW1lZCA9IENIRUNLU1VNX05PTkU7CiAgICA1ZWQ4Ogk0MSAwMSBjMyAgICAgICAg ICAgICAJYWRkICAgICVlYXgsJXIxMWQKICAgIDVlZGI6CTQxIDgzIGQzIDAwICAgICAgICAgIAlh ZGMgICAgJDB4MCwlcjExZAogICAgNWVkZjoJNDQgOGIgNGMgMjQgMjAgICAgICAgCW1vdiAgICAw eDIwKCVyc3ApLCVyOWQKICAgIDVlZTQ6CTQ1IDg5IDljIDI0IDk4IDAwIDAwIAltb3YgICAgJXIx MWQsMHg5OCglcjEyKQogICAgNWVlYjoJMDAgCgkJCXJldHVybiAwOwoJCWNhc2UgSU5FVF9FQ05f RUNUXzA6CgkJY2FzZSBJTkVUX0VDTl9FQ1RfMToKCQkJcmV0dXJuIDE7CgkJY2FzZSBJTkVUX0VD Tl9DRToKCQkJcmV0dXJuIDI7CiAgICA1ZWVjOgk0YyA4YiA1NCAyNCAwOCAgICAgICAJbW92ICAg IDB4OCglcnNwKSwlcjEwCiAgICA1ZWYxOgllOSBmOCBmOCBmZiBmZiAgICAgICAJam1wcSAgIDU3 ZWUgPHZ4bGFuX3JjdisweDQxZT4Kc3RhdGljIF9fYWx3YXlzX2lubGluZSB2b2lkCl9fc2tiX3Bv c3RwdWxsX3Jjc3VtKHN0cnVjdCBza19idWZmICpza2IsIGNvbnN0IHZvaWQgKnN0YXJ0LCB1bnNp Z25lZCBpbnQgbGVuLAoJCSAgICAgdW5zaWduZWQgaW50IG9mZikKewoJaWYgKHNrYi0+aXBfc3Vt bWVkID09IENIRUNLU1VNX0NPTVBMRVRFKQoJCXNrYi0+Y3N1bSA9IGNzdW1fYmxvY2tfc3ViKHNr Yi0+Y3N1bSwKICAgIDVlZjY6CTY2IDJlIDBmIDFmIDg0IDAwIDAwIAlub3B3ICAgJWNzOjB4MCgl cmF4LCVyYXgsMSkKICAgIDVlZmQ6CTAwIDAwIDAwIAoKMDAwMDAwMDAwMDAwNWYwMCA8dnhsYW5f eG1pdD46CiAgICA1ZjAwOgllOCAwMCAwMCAwMCAwMCAgICAgICAJY2FsbHEgIDVmMDUgPHZ4bGFu X3htaXQrMHg1PgogICAgNWYwNToJNTUgICAgICAgICAgICAgICAgICAgCXB1c2ggICAlcmJwCiAg ICA1ZjA2Ogk0OCA4OSBlNSAgICAgICAgICAgICAJbW92ICAgICVyc3AsJXJicAogICAgNWYwOToJ NDEgNTcgICAgICAgICAgICAgICAgCXB1c2ggICAlcjE1CiAgICA1ZjBiOgk0MSA1NiAgICAgICAg ICAgICAgICAJcHVzaCAgICVyMTQKICAgIDVmMGQ6CTQxIDU1ICAgICAgICAgICAgICAgIAlwdXNo ICAgJXIxMwogICAgNWYwZjoJNDEgNTQgICAgICAgICAgICAgICAgCXB1c2ggICAlcjEyCiAgICA1 ZjExOgk0OSA4OSBmNiAgICAgICAgICAgICAJbW92ICAgICVyc2ksJXIxNAogICAgNWYxNDoJNTMg ICAgICAgICAgICAgICAgICAgCXB1c2ggICAlcmJ4CiAgICA1ZjE1Ogk0OCA4OSBmYiAgICAgICAg ICAgICAJbW92ICAgICVyZGksJXJieAogICAgNWYxODoJNDggODMgZTQgZjAgICAgICAgICAgCWFu ZCAgICAkMHhmZmZmZmZmZmZmZmZmZmYwLCVyc3AKICAgIDVmMWM6CTQ4IDgzIGVjIDYwICAgICAg ICAgIAlzdWIgICAgJDB4NjAsJXJzcAogICAgNWYyMDoJNjUgNDggOGIgMDQgMjUgMjggMDAgCW1v diAgICAlZ3M6MHgyOCwlcmF4CiAgICA1ZjI3OgkwMCAwMCAKICAgIDVmMjk6CTQ4IDg5IDQ0IDI0 IDU4ICAgICAgIAltb3YgICAgJXJheCwweDU4KCVyc3ApCiAgICA1ZjJlOgkzMSBjMCAgICAgICAg ICAgICAgICAJeG9yICAgICVlYXgsJWVheAogKiBPdXRlciBJUCBoZWFkZXIgaW5oZXJpdHMgRUNO IGFuZCBERiBmcm9tIGlubmVyIGhlYWRlci4KICogT3V0ZXIgVURQIGRlc3RpbmF0aW9uIGlzIHRo ZSBWWExBTiBhc3NpZ25lZCBwb3J0LgogKiAgICAgICAgICAgc291cmNlIHBvcnQgaXMgYmFzZWQg b24gaGFzaCBvZiBmbG93CiAqLwpzdGF0aWMgbmV0ZGV2X3R4X3QgdnhsYW5feG1pdChzdHJ1Y3Qg c2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQp7CiAgICA1ZjMwOgk0OCA4YiA0 NyA1OCAgICAgICAgICAJbW92ICAgIDB4NTgoJXJkaSksJXJheAogICAgNWYzNDoJNDggODMgZTAg ZmUgICAgICAgICAgCWFuZCAgICAkMHhmZmZmZmZmZmZmZmZmZmZlLCVyYXgKICAgIDVmMzg6CTBm IDg0IGZjIDA0IDAwIDAwICAgIAlqZSAgICAgNjQzYSA8dnhsYW5feG1pdCsweDUzYT4KICAgIDVm M2U6CWY2IDQwIDYxIDAyICAgICAgICAgIAl0ZXN0YiAgJDB4MiwweDYxKCVyYXgpCiAgICA1ZjQy OgkwZiA4NCA1MiAwMSAwMCAwMCAgICAJamUgICAgIDYwOWEgPHZ4bGFuX3htaXQrMHgxOWE+CiAg ICA1ZjQ4Ogk0OCAwNSBhMCAwMCAwMCAwMCAgICAJYWRkICAgICQweGEwLCVyYXgKICAgIDVmNGU6 CTQ4IDhiIDhiIGQwIDAwIDAwIDAwIAltb3YgICAgMHhkMCglcmJ4KSwlcmN4CiAgICA1ZjU1Ogk0 OCA4YiA5MyBkOCAwMCAwMCAwMCAJbW92ICAgIDB4ZDgoJXJieCksJXJkeAogICAgNWY1YzoJNDgg MjkgY2EgICAgICAgICAgICAgCXN1YiAgICAlcmN4LCVyZHgKICAgIDVmNWY6CTY2IDg5IDkzIGM2 IDAwIDAwIDAwIAltb3YgICAgJWR4LDB4YzYoJXJieCkKCnN0YXRpYyBpbmxpbmUgc3RydWN0IG1l dGFkYXRhX2RzdCAqc2tiX21ldGFkYXRhX2RzdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQp7CglzdHJ1 Y3QgbWV0YWRhdGFfZHN0ICptZF9kc3QgPSAoc3RydWN0IG1ldGFkYXRhX2RzdCAqKSBza2JfZHN0 KHNrYik7CgoJaWYgKG1kX2RzdCAmJiBtZF9kc3QtPmRzdC5mbGFncyAmIERTVF9NRVRBREFUQSkK ICAgIDVmNjY6CTQxIDhiIGI2IGQ4IDA4IDAwIDAwIAltb3YgICAgMHg4ZDgoJXIxNCksJWVzaQog ICAgNWY2ZDoJZjcgYzYgMDAgMjAgMDAgMDAgICAgCXRlc3QgICAkMHgyMDAwLCVlc2kKICAgIDVm NzM6CTBmIDg1IGU2IDAwIDAwIDAwICAgIAlqbmUgICAgNjA1ZiA8dnhsYW5feG1pdCsweDE1Zj4K ewoJc3RydWN0IG1ldGFkYXRhX2RzdCAqbWRfZHN0ID0gc2tiX21ldGFkYXRhX2RzdChza2IpOwoJ c3RydWN0IGRzdF9lbnRyeSAqZHN0OwoKCWlmIChtZF9kc3QpCgkJcmV0dXJuICZtZF9kc3QtPnUu dHVuX2luZm87CiAgICA1Zjc5Ogk4MyBlNiAwMiAgICAgICAgICAgICAJYW5kICAgICQweDIsJWVz aQogICAgNWY3YzoJNGQgOGQgYWUgNDAgMDggMDAgMDAgCWxlYSAgICAweDg0MCglcjE0KSwlcjEz CglyZXR1cm4gc2tiLT5tYWNfaGVhZGVyICE9ICh0eXBlb2Yoc2tiLT5tYWNfaGVhZGVyKSl+MFU7 Cn0KCnN0YXRpYyBpbmxpbmUgdm9pZCBza2JfcmVzZXRfbWFjX2hlYWRlcihzdHJ1Y3Qgc2tfYnVm ZiAqc2tiKQp7Cglza2ItPm1hY19oZWFkZXIgPSBza2ItPmRhdGEgLSBza2ItPmhlYWQ7CiAgICA1 ZjgzOgk3NCAyMCAgICAgICAgICAgICAgICAJamUgICAgIDVmYTUgPHZ4bGFuX3htaXQrMHhhNT4K ICAgIDVmODU6CTBmIGI3IGQyICAgICAgICAgICAgIAltb3Z6d2wgJWR4LCVlZHgKICAgIDVmODg6 CTBmIGI3IDQ0IDExIDBjICAgICAgIAltb3Z6d2wgMHhjKCVyY3gsJXJkeCwxKSwlZWF4CiAgICA1 ZjhkOgk2NiBjMSBjMCAwOCAgICAgICAgICAJcm9sICAgICQweDgsJWF4CiAgICA1ZjkxOgk2NiAz ZCAwNiAwOCAgICAgICAgICAJY21wICAgICQweDgwNiwlYXgKICAgIDVmOTU6CTBmIDg0IGNmIDA0 IDAwIDAwICAgIAlqZSAgICAgNjQ2YSA8dnhsYW5feG1pdCsweDU2YT4KCglpbmZvID0gc2tiX3R1 bm5lbF9pbmZvKHNrYik7CgoJc2tiX3Jlc2V0X21hY19oZWFkZXIoc2tiKTsKCglpZiAodnhsYW4t PmZsYWdzICYgVlhMQU5fRl9DT0xMRUNUX01FVEFEQVRBKSB7CiAgICA1ZjliOgk2NiAzZCBkZCA4 NiAgICAgICAgICAJY21wICAgICQweDg2ZGQsJWF4CiAgICA1ZjlmOgkwZiA4NCA3NyAwMiAwMCAw MCAgICAJamUgICAgIDYyMWMgPHZ4bGFuX3htaXQrMHgzMWM+CiAgICA1ZmE1Ogk0NCAwZiBiNyBi YiBjNiAwMCAwMCAJbW92endsIDB4YzYoJXJieCksJXIxNWQKICAgIDVmYWM6CTAwIAogKgogKiBH ZXQgbmV0d29yayBkZXZpY2UgcHJpdmF0ZSBkYXRhCiAqLwpzdGF0aWMgaW5saW5lIHZvaWQgKm5l dGRldl9wcml2KGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCnsKCXJldHVybiAoY2hhciAq KWRldiArIEFMSUdOKHNpemVvZihzdHJ1Y3QgbmV0X2RldmljZSksIE5FVERFVl9BTElHTik7CiAg ICA1ZmFkOgk0YyA4OSBlZiAgICAgICAgICAgICAJbW92ICAgICVyMTMsJXJkaQogICAgNWZiMDoJ NDkgMDEgY2YgICAgICAgICAgICAgCWFkZCAgICAlcmN4LCVyMTUKCQllbHNlCgkJCWtmcmVlX3Nr Yihza2IpOwoJCXJldHVybiBORVRERVZfVFhfT0s7Cgl9CgoJaWYgKHZ4bGFuLT5mbGFncyAmIFZY TEFOX0ZfUFJPWFkpIHsKICAgIDVmYjM6CTRjIDg5IGZlICAgICAgICAgICAgIAltb3YgICAgJXIx NSwlcnNpCgkJZXRoID0gZXRoX2hkcihza2IpOwoJCWlmIChudG9ocyhldGgtPmhfcHJvdG8pID09 IEVUSF9QX0FSUCkKICAgIDVmYjY6CWU4IDQ1IGEwIGZmIGZmICAgICAgIAljYWxscSAgMCA8X192 eGxhbl9maW5kX21hYz4KICAgIDVmYmI6CTQ4IDg1IGMwICAgICAgICAgICAgIAl0ZXN0ICAgJXJh eCwlcmF4CiAgICA1ZmJlOgk0OSA4OSBjNCAgICAgICAgICAgICAJbW92ICAgICVyYXgsJXIxMgog ICAgNWZjMToJMGYgODQgMjQgMDIgMDAgMDAgICAgCWplICAgICA2MWViIDx2eGxhbl94bWl0KzB4 MmViPgogICAgNWZjNzoJNDEgODAgN2MgMjQgNDggMDAgICAgCWNtcGIgICAkMHgwLDB4NDgoJXIx MikKCQkJcmV0dXJuIGFycF9yZWR1Y2UoZGV2LCBza2IpOwojaWYgSVNfRU5BQkxFRChDT05GSUdf SVBWNikKCQllbHNlIGlmIChudG9ocyhldGgtPmhfcHJvdG8pID09IEVUSF9QX0lQVjYgJiYKICAg IDVmY2Q6CTQ4IDhiIDA1IDAwIDAwIDAwIDAwIAltb3YgICAgMHgwKCVyaXApLCVyYXggICAgICAg ICMgNWZkNCA8dnhsYW5feG1pdCsweGQ0PgogICAgNWZkNDoJYzYgNDQgMjQgMTggMDAgICAgICAg CW1vdmIgICAkMHgwLDB4MTgoJXJzcCkKCXNrYi0+bmV0d29ya19oZWFkZXIgKz0gb2Zmc2V0Owp9 CgpzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGNoYXIgKnNrYl9tYWNfaGVhZGVyKGNvbnN0IHN0cnVj dCBza19idWZmICpza2IpCnsKCXJldHVybiBza2ItPmhlYWQgKyBza2ItPm1hY19oZWFkZXI7CiAg ICA1ZmQ5Ogk0OSA4OSA0NCAyNCAyOCAgICAgICAJbW92ICAgICVyYXgsMHgyOCglcjEyKQpzdGF0 aWMgc3RydWN0IHZ4bGFuX2ZkYiAqdnhsYW5fZmluZF9tYWMoc3RydWN0IHZ4bGFuX2RldiAqdnhs YW4sCgkJCQkJY29uc3QgdTggKm1hYykKewoJc3RydWN0IHZ4bGFuX2ZkYiAqZjsKCglmID0gX192 eGxhbl9maW5kX21hYyh2eGxhbiwgbWFjKTsKICAgIDVmZGU6CTBmIDg4IGUwIDAwIDAwIDAwICAg IAlqcyAgICAgNjBjNCA8dnhsYW5feG1pdCsweDFjND4KICAgIDVmZTQ6CTQ5IDhiIDQ0IDI0IDMw ICAgICAgIAltb3YgICAgMHgzMCglcjEyKSwlcmF4CiAgICA1ZmU5Ogk0OSA4MyBjNCAzMCAgICAg ICAgICAJYWRkICAgICQweDMwLCVyMTIKCWlmIChmKQogICAgNWZlZDoJNDkgMzkgYzQgICAgICAg ICAgICAgCWNtcCAgICAlcmF4LCVyMTIKc3RhdGljIHN0cnVjdCB2eGxhbl9mZGIgKnZ4bGFuX2Zp bmRfbWFjKHN0cnVjdCB2eGxhbl9kZXYgKnZ4bGFuLAoJCQkJCWNvbnN0IHU4ICptYWMpCnsKCXN0 cnVjdCB2eGxhbl9mZGIgKmY7CgoJZiA9IF9fdnhsYW5fZmluZF9tYWModnhsYW4sIG1hYyk7CiAg ICA1ZmYwOgk0YyA4ZCA3OCBkOCAgICAgICAgICAJbGVhICAgIC0weDI4KCVyYXgpLCVyMTUKCWlm IChmKQogICAgNWZmNDoJNzQgNmYgICAgICAgICAgICAgICAgCWplICAgICA2MDY1IDx2eGxhbl94 bWl0KzB4MTY1PgogICAgNWZmNjoJMGYgYjYgNDQgMjQgMTggICAgICAgCW1vdnpibCAweDE4KCVy c3ApLCVlYXgKCglldGggPSBldGhfaGRyKHNrYik7CglmID0gdnhsYW5fZmluZF9tYWModnhsYW4s IGV0aC0+aF9kZXN0KTsKCWRpZF9yc2MgPSBmYWxzZTsKCglpZiAoZiAmJiAoZi0+ZmxhZ3MgJiBO VEZfUk9VVEVSKSAmJiAodnhsYW4tPmZsYWdzICYgVlhMQU5fRl9SU0MpICYmCiAgICA1ZmZiOgk0 ZCA4OSBmZCAgICAgICAgICAgICAJbW92ICAgICVyMTUsJXIxMwp7CglzdHJ1Y3QgdnhsYW5fZmRi ICpmOwoKCWYgPSBfX3Z4bGFuX2ZpbmRfbWFjKHZ4bGFuLCBtYWMpOwoJaWYgKGYpCgkJZi0+dXNl ZCA9IGppZmZpZXM7CiAgICA1ZmZlOgk4OSA0NCAyNCAyMCAgICAgICAgICAJbW92ICAgICVlYXgs MHgyMCglcnNwKQogICAgNjAwMjoJNDkgOGIgNDcgMjggICAgICAgICAgCW1vdiAgICAweDI4KCVy MTUpLCVyYXgKI2VuZGlmCgl9CgoJZXRoID0gZXRoX2hkcihza2IpOwoJZiA9IHZ4bGFuX2ZpbmRf bWFjKHZ4bGFuLCBldGgtPmhfZGVzdCk7CglkaWRfcnNjID0gZmFsc2U7CiAgICA2MDA2Ogk0OSAz OSBjNCAgICAgICAgICAgICAJY21wICAgICVyYXgsJXIxMgp7CglzdHJ1Y3QgdnhsYW5fZmRiICpm OwoKCWYgPSBfX3Z4bGFuX2ZpbmRfbWFjKHZ4bGFuLCBtYWMpOwoJaWYgKGYpCgkJZi0+dXNlZCA9 IGppZmZpZXM7CiAgICA2MDA5Ogk0YyA4ZCA3OCBkOCAgICAgICAgICAJbGVhICAgIC0weDI4KCVy YXgpLCVyMTUKICAgIDYwMGQ6CTc0IDM2ICAgICAgICAgICAgICAgIAlqZSAgICAgNjA0NSA8dnhs YW5feG1pdCsweDE0NT4KCglldGggPSBldGhfaGRyKHNrYik7CglmID0gdnhsYW5fZmluZF9tYWMo dnhsYW4sIGV0aC0+aF9kZXN0KTsKCWRpZF9yc2MgPSBmYWxzZTsKCglpZiAoZiAmJiAoZi0+Zmxh Z3MgJiBOVEZfUk9VVEVSKSAmJiAodnhsYW4tPmZsYWdzICYgVlhMQU5fRl9SU0MpICYmCiAgICA2 MDBmOgk0ZCA4NSBlZCAgICAgICAgICAgICAJdGVzdCAgICVyMTMsJXIxMwogICAgNjAxMjoJNzQg N2UgICAgICAgICAgICAgICAgCWplICAgICA2MDkyIDx2eGxhbl94bWl0KzB4MTkyPgogICAgNjAx NDoJYmUgMjAgMDAgMDggMDIgICAgICAgCW1vdiAgICAkMHgyMDgwMDIwLCVlc2kKCQkJa2ZyZWVf c2tiKHNrYik7CgkJCXJldHVybiBORVRERVZfVFhfT0s7CgkJfQoJfQoKCWxpc3RfZm9yX2VhY2hf ZW50cnlfcmN1KHJkc3QsICZmLT5yZW1vdGVzLCBsaXN0KSB7CiAgICA2MDE5Ogk0OCA4OSBkZiAg ICAgICAgICAgICAJbW92ICAgICVyYngsJXJkaQogICAgNjAxYzoJZTggMDAgMDAgMDAgMDAgICAg ICAgCWNhbGxxICA2MDIxIDx2eGxhbl94bWl0KzB4MTIxPgogICAgNjAyMToJNDggODUgYzAgICAg ICAgICAgICAgCXRlc3QgICAlcmF4LCVyYXgKICAgIDYwMjQ6CTc0IGRjICAgICAgICAgICAgICAg IAlqZSAgICAgNjAwMiA8dnhsYW5feG1pdCsweDEwMj4KCQkJZmRzdCA9IHJkc3Q7CgkJCWNvbnRp bnVlOwoJCX0KCQlza2IxID0gc2tiX2Nsb25lKHNrYiwgR0ZQX0FUT01JQyk7CgkJaWYgKHNrYjEp CgkJCXZ4bGFuX3htaXRfb25lKHNrYjEsIGRldiwgcmRzdCwgZGlkX3JzYyk7CiAgICA2MDI2Ogk4 YiA0YyAyNCAyMCAgICAgICAgICAJbW92ICAgIDB4MjAoJXJzcCksJWVjeAogICAgNjAyYToJNGMg ODkgZmEgICAgICAgICAgICAgCW1vdiAgICAlcjE1LCVyZHgKCQkJa2ZyZWVfc2tiKHNrYik7CgkJ CXJldHVybiBORVRERVZfVFhfT0s7CgkJfQoJfQoKCWxpc3RfZm9yX2VhY2hfZW50cnlfcmN1KHJk c3QsICZmLT5yZW1vdGVzLCBsaXN0KSB7CiAgICA2MDJkOgk0OCA4OSBjNyAgICAgICAgICAgICAJ bW92ICAgICVyYXgsJXJkaQoJCQlmZHN0ID0gcmRzdDsKCQkJY29udGludWU7CgkJfQoJCXNrYjEg PSBza2JfY2xvbmUoc2tiLCBHRlBfQVRPTUlDKTsKCQlpZiAoc2tiMSkKCQkJdnhsYW5feG1pdF9v bmUoc2tiMSwgZGV2LCByZHN0LCBkaWRfcnNjKTsKICAgIDYwMzA6CTRjIDg5IGY2ICAgICAgICAg ICAgIAltb3YgICAgJXIxNCwlcnNpCiAgICA2MDMzOgllOCBlOCBlMSBmZiBmZiAgICAgICAJY2Fs bHEgIDQyMjAgPHZ4bGFuX3htaXRfb25lPgoJCQlrZnJlZV9za2Ioc2tiKTsKCQkJcmV0dXJuIE5F VERFVl9UWF9PSzsKCQl9Cgl9CgoJbGlzdF9mb3JfZWFjaF9lbnRyeV9yY3UocmRzdCwgJmYtPnJl bW90ZXMsIGxpc3QpIHsKICAgIDYwMzg6CTQ5IDhiIDQ3IDI4ICAgICAgICAgIAltb3YgICAgMHgy OCglcjE1KSwlcmF4CiAgICA2MDNjOgk0OSAzOSBjNCAgICAgICAgICAgICAJY21wICAgICVyYXgs JXIxMgoJCXN0cnVjdCBza19idWZmICpza2IxOwoKCQlpZiAoIWZkc3QpIHsKICAgIDYwM2Y6CTRj IDhkIDc4IGQ4ICAgICAgICAgIAlsZWEgICAgLTB4MjgoJXJheCksJXIxNQogICAgNjA0MzoJNzUg Y2EgICAgICAgICAgICAgICAgCWpuZSAgICA2MDBmIDx2eGxhbl94bWl0KzB4MTBmPgoJCQlmZHN0 ID0gcmRzdDsKCQkJY29udGludWU7CgkJfQoJCXNrYjEgPSBza2JfY2xvbmUoc2tiLCBHRlBfQVRP TUlDKTsKICAgIDYwNDU6CTRkIDg1IGVkICAgICAgICAgICAgIAl0ZXN0ICAgJXIxMywlcjEzCiAg ICA2MDQ4Ogk3NCAxYiAgICAgICAgICAgICAgICAJamUgICAgIDYwNjUgPHZ4bGFuX3htaXQrMHgx NjU+CiAgICA2MDRhOgkwZiBiNiA0YyAyNCAxOCAgICAgICAJbW92emJsIDB4MTgoJXJzcCksJWVj eAogICAgNjA0ZjoJNGMgODkgZWEgICAgICAgICAgICAgCW1vdiAgICAlcjEzLCVyZHgKCQlpZiAo c2tiMSkKICAgIDYwNTI6CTRjIDg5IGY2ICAgICAgICAgICAgIAltb3YgICAgJXIxNCwlcnNpCiAg ICA2MDU1Ogk0OCA4OSBkZiAgICAgICAgICAgICAJbW92ICAgICVyYngsJXJkaQoJCQl2eGxhbl94 bWl0X29uZShza2IxLCBkZXYsIHJkc3QsIGRpZF9yc2MpOwogICAgNjA1ODoJZTggYzMgZTEgZmYg ZmYgICAgICAgCWNhbGxxICA0MjIwIDx2eGxhbl94bWl0X29uZT4KICAgIDYwNWQ6CWViIDBlICAg ICAgICAgICAgICAgIAlqbXAgICAgNjA2ZCA8dnhsYW5feG1pdCsweDE2ZD4KICAgIDYwNWY6CWY2 IDQwIDQ5IDAxICAgICAgICAgIAl0ZXN0YiAgJDB4MSwweDQ5KCVyYXgpCiAgICA2MDYzOgk3NSA0 ZSAgICAgICAgICAgICAgICAJam5lICAgIDYwYjMgPHZ4bGFuX3htaXQrMHgxYjM+CiAgICA2MDY1 Ogk0OCA4OSBkZiAgICAgICAgICAgICAJbW92ICAgICVyYngsJXJkaQogICAgNjA2ODoJZTggMDAg MDAgMDAgMDAgICAgICAgCWNhbGxxICA2MDZkIDx2eGxhbl94bWl0KzB4MTZkPgoJCQlrZnJlZV9z a2Ioc2tiKTsKCQkJcmV0dXJuIE5FVERFVl9UWF9PSzsKCQl9Cgl9CgoJbGlzdF9mb3JfZWFjaF9l bnRyeV9yY3UocmRzdCwgJmYtPnJlbW90ZXMsIGxpc3QpIHsKICAgIDYwNmQ6CTMxIGMwICAgICAg ICAgICAgICAgIAl4b3IgICAgJWVheCwlZWF4CiAgICA2MDZmOgk0OCA4YiA0YyAyNCA1OCAgICAg ICAJbW92ICAgIDB4NTgoJXJzcCksJXJjeAogICAgNjA3NDoJNjUgNDggMzMgMGMgMjUgMjggMDAg CXhvciAgICAlZ3M6MHgyOCwlcmN4CiAgICA2MDdiOgkwMCAwMCAKCQlpZiAoc2tiMSkKCQkJdnhs YW5feG1pdF9vbmUoc2tiMSwgZGV2LCByZHN0LCBkaWRfcnNjKTsKCX0KCglpZiAoZmRzdCkKCQl2 eGxhbl94bWl0X29uZShza2IsIGRldiwgZmRzdCwgZGlkX3JzYyk7CiAgICA2MDdkOgkwZiA4NSA1 MiAwOCAwMCAwMCAgICAJam5lICAgIDY4ZDUgPHZ4bGFuX3htaXQrMHg5ZDU+CiAgICA2MDgzOgk0 OCA4ZCA2NSBkOCAgICAgICAgICAJbGVhICAgIC0weDI4KCVyYnApLCVyc3AKICAgIDYwODc6CTVi ICAgICAgICAgICAgICAgICAgIAlwb3AgICAgJXJieAogICAgNjA4ODoJNDEgNWMgICAgICAgICAg ICAgICAgCXBvcCAgICAlcjEyCiAgICA2MDhhOgk0MSA1ZCAgICAgICAgICAgICAgICAJcG9wICAg ICVyMTMKICAgIDYwOGM6CTQxIDVlICAgICAgICAgICAgICAgIAlwb3AgICAgJXIxNAogICAgNjA4 ZToJNDEgNWYgICAgICAgICAgICAgICAgCXBvcCAgICAlcjE1CglpbmZvID0gc2tiX3R1bm5lbF9p bmZvKHNrYik7CgoJc2tiX3Jlc2V0X21hY19oZWFkZXIoc2tiKTsKCglpZiAodnhsYW4tPmZsYWdz ICYgVlhMQU5fRl9DT0xMRUNUX01FVEFEQVRBKSB7CgkJaWYgKGluZm8gJiYgaW5mby0+bW9kZSAm IElQX1RVTk5FTF9JTkZPX1RYKQogICAgNjA5MDoJNWQgICAgICAgICAgICAgICAgICAgCXBvcCAg ICAlcmJwCiAgICA2MDkxOgljMyAgICAgICAgICAgICAgICAgICAJcmV0cSAgIAogICAgNjA5MjoJ NGQgODkgZmQgICAgICAgICAgICAgCW1vdiAgICAlcjE1LCVyMTMKCQkJaWYgKCh2eGxhbi0+Zmxh Z3MgJiBWWExBTl9GX0wyTUlTUykgJiYKCQkJICAgICFpc19tdWx0aWNhc3RfZXRoZXJfYWRkcihl dGgtPmhfZGVzdCkpCgkJCQl2eGxhbl9mZGJfbWlzcyh2eGxhbiwgZXRoLT5oX2Rlc3QpOwoKCQkJ ZGV2LT5zdGF0cy50eF9kcm9wcGVkKys7CgkJCWtmcmVlX3NrYihza2IpOwogICAgNjA5NToJZTkg NjggZmYgZmYgZmYgICAgICAgCWptcHEgICA2MDAyIDx2eGxhbl94bWl0KzB4MTAyPgogICAgNjA5 YToJNDggOGIgODAgOTAgMDAgMDAgMDAgCW1vdiAgICAweDkwKCVyYXgpLCVyYXgKCWlmIChmZHN0 KQoJCXZ4bGFuX3htaXRfb25lKHNrYiwgZGV2LCBmZHN0LCBkaWRfcnNjKTsKCWVsc2UKCQlrZnJl ZV9za2Ioc2tiKTsKCXJldHVybiBORVRERVZfVFhfT0s7Cn0KICAgIDYwYTE6CTQ4IDg1IGMwICAg ICAgICAgICAgIAl0ZXN0ICAgJXJheCwlcmF4CiAgICA2MGE0OgkwZiA4NCA5MCAwMyAwMCAwMCAg ICAJamUgICAgIDY0M2EgPHZ4bGFuX3htaXQrMHg1M2E+CiAgICA2MGFhOgk0OCA4MyBjMCAxYyAg ICAgICAgICAJYWRkICAgICQweDFjLCVyYXgKICAgIDYwYWU6CWU5IDliIGZlIGZmIGZmICAgICAg IAlqbXBxICAgNWY0ZSA8dnhsYW5feG1pdCsweDRlPgogICAgNjBiMzoJMzEgYzkgICAgICAgICAg ICAgICAgCXhvciAgICAlZWN4LCVlY3gKICAgIDYwYjU6CTMxIGQyICAgICAgICAgICAgICAgIAl4 b3IgICAgJWVkeCwlZWR4CiAgICA2MGI3Ogk0YyA4OSBmNiAgICAgICAgICAgICAJbW92ICAgICVy MTQsJXJzaQogICAgNjBiYToJNDggODkgZGYgICAgICAgICAgICAgCW1vdiAgICAlcmJ4LCVyZGkK ICAgIDYwYmQ6CWU4IDVlIGUxIGZmIGZmICAgICAgIAljYWxscSAgNDIyMCA8dnhsYW5feG1pdF9v bmU+CgkJCWtmcmVlX3NrYihza2IpOwoJCQlyZXR1cm4gTkVUREVWX1RYX09LOwoJCX0KCX0KCgls aXN0X2Zvcl9lYWNoX2VudHJ5X3JjdShyZHN0LCAmZi0+cmVtb3RlcywgbGlzdCkgewogICAgNjBj MjoJZWIgYTkgICAgICAgICAgICAgICAgCWptcCAgICA2MDZkIDx2eGxhbl94bWl0KzB4MTZkPgog ICAgNjBjNDoJNDEgZjYgODYgZDggMDggMDAgMDAgCXRlc3RiICAkMHg0LDB4OGQ4KCVyMTQpCiAg ICA2MGNiOgkwNCAKCglkc3QgPSBza2JfZHN0KHNrYik7CglpZiAoZHN0ICYmIGRzdC0+bHd0c3Rh dGUpCiAgICA2MGNjOgkwZiA4NCAxMiBmZiBmZiBmZiAgICAJamUgICAgIDVmZTQgPHZ4bGFuX3ht aXQrMHhlND4KICAgIDYwZDI6CTQxIDBmIGI3IDQ3IDBjICAgICAgIAltb3Z6d2wgMHhjKCVyMTUp LCVlYXgKICAgIDYwZDc6CTY2IGMxIGMwIDA4ICAgICAgICAgIAlyb2wgICAgJDB4OCwlYXgKCWlu Zm8tPm9wdGlvbnNfbGVuID0gbGVuOwp9CgpzdGF0aWMgaW5saW5lIHN0cnVjdCBpcF90dW5uZWxf aW5mbyAqbHd0X3R1bl9pbmZvKHN0cnVjdCBsd3R1bm5lbF9zdGF0ZSAqbHd0c3RhdGUpCnsKCXJl dHVybiAoc3RydWN0IGlwX3R1bm5lbF9pbmZvICopbHd0c3RhdGUtPmRhdGE7CiAgICA2MGRiOgk2 NiAzZCAwMCAwOCAgICAgICAgICAJY21wICAgICQweDgwMCwlYXgKICAgIDYwZGY6CTc0IDBhICAg ICAgICAgICAgICAgIAlqZSAgICAgNjBlYiA8dnhsYW5feG1pdCsweDFlYj4KICAgIDYwZTE6CTY2 IDNkIGRkIDg2ICAgICAgICAgIAljbXAgICAgJDB4ODZkZCwlYXgKCglza2JfcmVzZXRfbWFjX2hl YWRlcihza2IpOwoKCWlmICh2eGxhbi0+ZmxhZ3MgJiBWWExBTl9GX0NPTExFQ1RfTUVUQURBVEEp IHsKCQlpZiAoaW5mbyAmJiBpbmZvLT5tb2RlICYgSVBfVFVOTkVMX0lORk9fVFgpCgkJCXZ4bGFu X3htaXRfb25lKHNrYiwgZGV2LCBOVUxMLCBmYWxzZSk7CiAgICA2MGU1OgkwZiA4NSBmOSBmZSBm ZiBmZiAgICAJam5lICAgIDVmZTQgPHZ4bGFuX3htaXQrMHhlND4KICAgIDYwZWI6CTBmIGI3IDgz IGM2IDAwIDAwIDAwIAltb3Z6d2wgMHhjNiglcmJ4KSwlZWF4CiAgICA2MGYyOgk0OCA4YiA5MyBk MCAwMCAwMCAwMCAJbW92ICAgIDB4ZDAoJXJieCksJXJkeAoKCWV0aCA9IGV0aF9oZHIoc2tiKTsK CWYgPSB2eGxhbl9maW5kX21hYyh2eGxhbiwgZXRoLT5oX2Rlc3QpOwoJZGlkX3JzYyA9IGZhbHNl OwoKCWlmIChmICYmIChmLT5mbGFncyAmIE5URl9ST1VURVIpICYmICh2eGxhbi0+ZmxhZ3MgJiBW WExBTl9GX1JTQykgJiYKICAgIDYwZjk6CTQ4IDAxIGQwICAgICAgICAgICAgIAlhZGQgICAgJXJk eCwlcmF4CiAgICA2MGZjOglmNiAwMCAwMSAgICAgICAgICAgICAJdGVzdGIgICQweDEsKCVyYXgp CiAgICA2MGZmOgkwZiA4NSBmMiAwNSAwMCAwMCAgICAJam5lICAgIDY2ZjcgPHZ4bGFuX3htaXQr MHg3Zjc+CgkgICAgKG50b2hzKGV0aC0+aF9wcm90bykgPT0gRVRIX1BfSVAgfHwKICAgIDYxMDU6 CTBmIGI3IDQwIDBjICAgICAgICAgIAltb3Z6d2wgMHhjKCVyYXgpLCVlYXgKICAgIDYxMDk6CTY2 IGMxIGMwIDA4ICAgICAgICAgIAlyb2wgICAgJDB4OCwlYXgKCglldGggPSBldGhfaGRyKHNrYik7 CglmID0gdnhsYW5fZmluZF9tYWModnhsYW4sIGV0aC0+aF9kZXN0KTsKCWRpZF9yc2MgPSBmYWxz ZTsKCglpZiAoZiAmJiAoZi0+ZmxhZ3MgJiBOVEZfUk9VVEVSKSAmJiAodnhsYW4tPmZsYWdzICYg VlhMQU5fRl9SU0MpICYmCiAgICA2MTBkOgk2NiAzZCAwMCAwOCAgICAgICAgICAJY21wICAgICQw eDgwMCwlYXgKICAgIDYxMTE6CTBmIDg0IDY2IDA1IDAwIDAwICAgIAlqZSAgICAgNjY3ZCA8dnhs YW5feG1pdCsweDc3ZD4KICAgIDYxMTc6CTY2IDNkIGRkIDg2ICAgICAgICAgIAljbXAgICAgJDB4 ODZkZCwlYXgKICAgIDYxMWI6CTBmIDg1IGQ2IDA1IDAwIDAwICAgIAlqbmUgICAgNjZmNyA8dnhs YW5feG1pdCsweDdmNz4KICAgIDYxMjE6CThiIDhiIDgwIDAwIDAwIDAwICAgIAltb3YgICAgMHg4 MCglcmJ4KSwlZWN4CiAgICA2MTI3Ogk4OSBjOCAgICAgICAgICAgICAgICAJbW92ICAgICVlY3gs JWVheAogICAgNjEyOToJMmIgODMgODQgMDAgMDAgMDAgICAgCXN1YiAgICAweDg0KCVyYngpLCVl YXgKc3RhdGljIGJvb2wgcm91dGVfc2hvcnRjaXJjdWl0KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYs IHN0cnVjdCBza19idWZmICpza2IpCnsKCXN0cnVjdCB2eGxhbl9kZXYgKnZ4bGFuID0gbmV0ZGV2 X3ByaXYoZGV2KTsKCXN0cnVjdCBuZWlnaGJvdXIgKm47CgoJaWYgKGlzX211bHRpY2FzdF9ldGhl cl9hZGRyKGV0aF9oZHIoc2tiKS0+aF9kZXN0KSkKICAgIDYxMmY6CTgzIGY4IDI3ICAgICAgICAg ICAgIAljbXAgICAgJDB4MjcsJWVheAogICAgNjEzMjoJMGYgODYgMzkgMDcgMDAgMDAgICAgCWpi ZSAgICA2ODcxIDx2eGxhbl94bWl0KzB4OTcxPgoJCXJldHVybiBmYWxzZTsKCgluID0gTlVMTDsK CXN3aXRjaCAobnRvaHMoZXRoX2hkcihza2IpLT5oX3Byb3RvKSkgewogICAgNjEzODoJNDQgMGYg YjcgODMgYzQgMDAgMDAgCW1vdnp3bCAweGM0KCVyYngpLCVyOGQKICAgIDYxM2Y6CTAwIAogICAg NjE0MDoJNDggOGIgMDUgMDAgMDAgMDAgMDAgCW1vdiAgICAweDAoJXJpcCksJXJheCAgICAgICAg IyA2MTQ3IDx2eGxhbl94bWl0KzB4MjQ3PgogICAgNjE0NzoJNDggOGIgNzggMjggICAgICAgICAg CW1vdiAgICAweDI4KCVyYXgpLCVyZGkKICAgIDYxNGI6CTQ5IDAxIGQwICAgICAgICAgICAgIAlh ZGQgICAgJXJkeCwlcjgKICAgIDYxNGU6CTRjIDg5IGYyICAgICAgICAgICAgIAltb3YgICAgJXIx NCwlcmR4CiAgICA2MTUxOgk0OSA4ZCA3MCAxOCAgICAgICAgICAJbGVhICAgIDB4MTgoJXI4KSwl cnNpCiAgICA2MTU1Ogk0YyA4OSA0NCAyNCAyMCAgICAgICAJbW92ICAgICVyOCwweDIwKCVyc3Ap CglyZXR1cm4gc2tiLT5kYXRhX2xlbjsKfQoKc3RhdGljIGlubGluZSB1bnNpZ25lZCBpbnQgc2ti X2hlYWRsZW4oY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYikKewoJcmV0dXJuIHNrYi0+bGVuIC0g c2tiLT5kYXRhX2xlbjsKICAgIDYxNWE6CWU4IDAwIDAwIDAwIDAwICAgICAgIAljYWxscSAgNjE1 ZiA8dnhsYW5feG1pdCsweDI1Zj4KCXJldHVybiB1bmxpa2VseShsZW4gPiBza2ItPmxlbikgPyBO VUxMIDogX19wc2tiX3B1bGwoc2tiLCBsZW4pOwp9CgpzdGF0aWMgaW5saW5lIGludCBwc2tiX21h eV9wdWxsKHN0cnVjdCBza19idWZmICpza2IsIHVuc2lnbmVkIGludCBsZW4pCnsKCWlmIChsaWtl bHkobGVuIDw9IHNrYl9oZWFkbGVuKHNrYikpKQogICAgNjE1ZjoJNDggODUgYzAgICAgICAgICAg ICAgCXRlc3QgICAlcmF4LCVyYXgKICAgIDYxNjI6CTRjIDhiIDQ0IDI0IDIwICAgICAgIAltb3Yg ICAgMHgyMCglcnNwKSwlcjgKICAgIDYxNjc6CTBmIDg0IDhhIDBhIDAwIDAwICAgIAlqZSAgICAg NmJmNyA8dnhsYW5feG1pdCsweGNmNz4KCXNrYi0+dHJhbnNwb3J0X2hlYWRlciArPSBvZmZzZXQ7 Cn0KCnN0YXRpYyBpbmxpbmUgdW5zaWduZWQgY2hhciAqc2tiX25ldHdvcmtfaGVhZGVyKGNvbnN0 IHN0cnVjdCBza19idWZmICpza2IpCnsKCXJldHVybiBza2ItPmhlYWQgKyBza2ItPm5ldHdvcmtf aGVhZGVyOwogICAgNjE2ZDoJMGYgYjcgYmIgYzYgMDAgMDAgMDAgCW1vdnp3bCAweGM2KCVyYngp LCVlZGkKCQlzdHJ1Y3QgaXB2NmhkciAqcGlwNjsKCgkJaWYgKCFwc2tiX21heV9wdWxsKHNrYiwg c2l6ZW9mKHN0cnVjdCBpcHY2aGRyKSkpCgkJCXJldHVybiBmYWxzZTsKCQlwaXA2ID0gaXB2Nl9o ZHIoc2tiKTsKCQluID0gbmVpZ2hfbG9va3VwKGlwdjZfc3R1Yi0+bmRfdGJsLCAmcGlwNi0+ZGFk ZHIsIGRldik7CiAgICA2MTc0Ogk0OCA4YiA4YiBkMCAwMCAwMCAwMCAJbW92ICAgIDB4ZDAoJXJi eCksJXJjeAogICAgNjE3YjoJNDQgOGIgODAgYjggMDAgMDAgMDAgCW1vdiAgICAweGI4KCVyYXgp LCVyOGQKICAgIDYxODI6CTQ4IDhkIDM0IDM5ICAgICAgICAgIAlsZWEgICAgKCVyY3gsJXJkaSwx KSwlcnNpCiAgICA2MTg2OgkwZiBiNyA1NiAwNCAgICAgICAgICAJbW92endsIDB4NCglcnNpKSwl ZWR4CiAgICA2MThhOgk0NCA4YiAwZSAgICAgICAgICAgICAJbW92ICAgICglcnNpKSwlcjlkCiAg ICA2MThkOgk2NiAzMyA5MCBiYyAwMCAwMCAwMCAJeG9yICAgIDB4YmMoJXJheCksJWR4CgkJaWYg KCFuICYmICh2eGxhbi0+ZmxhZ3MgJiBWWExBTl9GX0wzTUlTUykpIHsKICAgIDYxOTQ6CTQ1IDMx IGM4ICAgICAgICAgICAgIAl4b3IgICAgJXI5ZCwlcjhkCiAgICA2MTk3OgkwZiBiNyBkMiAgICAg ICAgICAgICAJbW92endsICVkeCwlZWR4CiAgICA2MTlhOgk0MSAwOSBkMCAgICAgICAgICAgICAJ b3IgICAgICVlZHgsJXI4ZAoJc2tiLT5uZXR3b3JrX2hlYWRlciArPSBvZmZzZXQ7Cn0KCnN0YXRp YyBpbmxpbmUgdW5zaWduZWQgY2hhciAqc2tiX21hY19oZWFkZXIoY29uc3Qgc3RydWN0IHNrX2J1 ZmYgKnNrYikKewoJcmV0dXJuIHNrYi0+aGVhZCArIHNrYi0+bWFjX2hlYWRlcjsKICAgIDYxOWQ6 CTQ0IDg5IDQ0IDI0IDIwICAgICAgIAltb3YgICAgJXI4ZCwweDIwKCVyc3ApCiAgICA2MWEyOgkw ZiA4NSBlMSAwNSAwMCAwMCAgICAJam5lICAgIDY3ODkgPHZ4bGFuX3htaXQrMHg4ODk+CiAgICA2 MWE4OglmMCBmZiA0OCAzMCAgICAgICAgICAJbG9jayBkZWNsIDB4MzAoJXJheCkKICogUGxlYXNl IG5vdGU6IGFkZHIxICYgYWRkcjIgbXVzdCBib3RoIGJlIGFsaWduZWQgdG8gdTE2LgogKi8Kc3Rh dGljIGlubGluZSBib29sIGV0aGVyX2FkZHJfZXF1YWwoY29uc3QgdTggKmFkZHIxLCBjb25zdCB1 OCAqYWRkcjIpCnsKI2lmIGRlZmluZWQoQ09ORklHX0hBVkVfRUZGSUNJRU5UX1VOQUxJR05FRF9B Q0NFU1MpCgl1MzIgZm9sZCA9ICgoKihjb25zdCB1MzIgKilhZGRyMSkgXiAoKihjb25zdCB1MzIg KilhZGRyMikpIHwKICAgIDYxYWM6CTBmIDg0IGNhIDA1IDAwIDAwICAgIAlqZSAgICAgNjc3YyA8 dnhsYW5feG1pdCsweDg3Yz4KICAgIDYxYjI6CThiIDQ0IDI0IDIwICAgICAgICAgIAltb3YgICAg MHgyMCglcnNwKSwlZWF4CiAgICA2MWI2Ogk4NSBjMCAgICAgICAgICAgICAgICAJdGVzdCAgICVl YXgsJWVheAogICAgNjFiODoJMGYgODQgMzkgMDUgMDAgMDAgICAgCWplICAgICA2NmY3IDx2eGxh bl94bWl0KzB4N2Y3PgogICAgNjFiZToJNGMgODkgZmUgICAgICAgICAgICAgCW1vdiAgICAlcjE1 LCVyc2kKICAgIDYxYzE6CTRjIDg5IGVmICAgICAgICAgICAgIAltb3YgICAgJXIxMywlcmRpCiAg ICA2MWM0OgllOCAzNyA5ZSBmZiBmZiAgICAgICAJY2FsbHEgIDAgPF9fdnhsYW5fZmluZF9tYWM+ CiAgICA2MWM5Ogk0OCA4NSBjMCAgICAgICAgICAgICAJdGVzdCAgICVyYXgsJXJheAoKCWlmIChu KSB7CgkJYm9vbCBkaWZmOwoKCQlkaWZmID0gIWV0aGVyX2FkZHJfZXF1YWwoZXRoX2hkcihza2Ip LT5oX2Rlc3QsIG4tPmhhKTsKCQlpZiAoZGlmZikgewogICAgNjFjYzoJNDkgODkgYzQgICAgICAg ICAgICAgCW1vdiAgICAlcmF4LCVyMTIKICAgIDYxY2Y6CTBmIDg0IGY2IDA2IDAwIDAwICAgIAlq ZSAgICAgNjhjYiA8dnhsYW5feG1pdCsweDljYj4KICAgIDYxZDU6CTQ4IDhiIDA1IDAwIDAwIDAw IDAwIAltb3YgICAgMHgwKCVyaXApLCVyYXggICAgICAgICMgNjFkYyA8dnhsYW5feG1pdCsweDJk Yz4KICogcmV0dXJucyB0cnVlIGlmIHRoZSByZXN1bHQgaXMgMCwgb3IgZmFsc2UgZm9yIGFsbCBv dGhlcgogKiBjYXNlcy4KICovCnN0YXRpYyBfX2Fsd2F5c19pbmxpbmUgYm9vbCBhdG9taWNfZGVj X2FuZF90ZXN0KGF0b21pY190ICp2KQp7CglHRU5fVU5BUllfUk1XY2MoTE9DS19QUkVGSVggImRl Y2wiLCB2LT5jb3VudGVyLCAiJTAiLCBlKTsKICAgIDYxZGM6CWM2IDQ0IDI0IDE4IDAxICAgICAg IAltb3ZiICAgJDB4MSwweDE4KCVyc3ApCiAgICA2MWUxOgk0OSA4OSA0NCAyNCAyOCAgICAgICAJ bW92ICAgICVyYXgsMHgyOCglcjEyKQoKCWlmIChmICYmIChmLT5mbGFncyAmIE5URl9ST1VURVIp ICYmICh2eGxhbi0+ZmxhZ3MgJiBWWExBTl9GX1JTQykgJiYKCSAgICAobnRvaHMoZXRoLT5oX3By b3RvKSA9PSBFVEhfUF9JUCB8fAoJICAgICBudG9ocyhldGgtPmhfcHJvdG8pID09IEVUSF9QX0lQ VjYpKSB7CgkJZGlkX3JzYyA9IHJvdXRlX3Nob3J0Y2lyY3VpdChkZXYsIHNrYik7CgkJaWYgKGRp ZF9yc2MpCiAgICA2MWU2OgllOSBmOSBmZCBmZiBmZiAgICAgICAJam1wcSAgIDVmZTQgPHZ4bGFu X3htaXQrMHhlND4KICAgIDYxZWI6CWM2IDQ0IDI0IDE4IDAwICAgICAgIAltb3ZiICAgJDB4MCww eDE4KCVyc3ApCnN0YXRpYyBzdHJ1Y3QgdnhsYW5fZmRiICp2eGxhbl9maW5kX21hYyhzdHJ1Y3Qg dnhsYW5fZGV2ICp2eGxhbiwKCQkJCQljb25zdCB1OCAqbWFjKQp7CglzdHJ1Y3QgdnhsYW5fZmRi ICpmOwoKCWYgPSBfX3Z4bGFuX2ZpbmRfbWFjKHZ4bGFuLCBtYWMpOwogICAgNjFmMDoJNDggYzcg YzYgMDAgMDAgMDAgMDAgCW1vdiAgICAkMHgwLCVyc2kKICAgIDYxZjc6CTRjIDg5IGVmICAgICAg ICAgICAgIAltb3YgICAgJXIxMywlcmRpCglpZiAoZikKICAgIDYxZmE6CWU4IDAxIDllIGZmIGZm ICAgICAgIAljYWxscSAgMCA8X192eGxhbl9maW5kX21hYz4KICAgIDYxZmY6CTQ4IDg1IGMwICAg ICAgICAgICAgIAl0ZXN0ICAgJXJheCwlcmF4CiAgICA2MjAyOgk0OSA4OSBjNCAgICAgICAgICAg ICAJbW92ICAgICVyYXgsJXIxMgoJCWYtPnVzZWQgPSBqaWZmaWVzOwogICAgNjIwNToJMGYgODQg ZjYgMDQgMDAgMDAgICAgCWplICAgICA2NzAxIDx2eGxhbl94bWl0KzB4ODAxPgogICAgNjIwYjoJ NDggOGIgMDUgMDAgMDAgMDAgMDAgCW1vdiAgICAweDAoJXJpcCksJXJheCAgICAgICAgIyA2MjEy IDx2eGxhbl94bWl0KzB4MzEyPgogICAgNjIxMjoJNDkgODkgNDQgMjQgMjggICAgICAgCW1vdiAg ICAlcmF4LDB4MjgoJXIxMikKICAgIDYyMTc6CWU5IGM4IGZkIGZmIGZmICAgICAgIAlqbXBxICAg NWZlNCA8dnhsYW5feG1pdCsweGU0PgojZW5kaWYKCX0KCglldGggPSBldGhfaGRyKHNrYik7Cglm ID0gdnhsYW5fZmluZF9tYWModnhsYW4sIGV0aC0+aF9kZXN0KTsKCWRpZF9yc2MgPSBmYWxzZTsK ICAgIDYyMWM6CThiIDkzIDgwIDAwIDAwIDAwICAgIAltb3YgICAgMHg4MCglcmJ4KSwlZWR4CnN0 YXRpYyBzdHJ1Y3QgdnhsYW5fZmRiICp2eGxhbl9maW5kX21hYyhzdHJ1Y3QgdnhsYW5fZGV2ICp2 eGxhbiwKCQkJCQljb25zdCB1OCAqbWFjKQp7CglzdHJ1Y3QgdnhsYW5fZmRiICpmOwoKCWYgPSBf X3Z4bGFuX2ZpbmRfbWFjKHZ4bGFuLCBtYWMpOwogICAgNjIyMjoJODkgZDAgICAgICAgICAgICAg ICAgCW1vdiAgICAlZWR4LCVlYXgKICAgIDYyMjQ6CTJiIDgzIDg0IDAwIDAwIDAwICAgIAlzdWIg ICAgMHg4NCglcmJ4KSwlZWF4CiAgICA2MjJhOgk4MyBmOCAzZiAgICAgICAgICAgICAJY21wICAg ICQweDNmLCVlYXgKICAgIDYyMmQ6CTBmIDg2IGY2IDA0IDAwIDAwICAgIAlqYmUgICAgNjcyOSA8 dnhsYW5feG1pdCsweDgyOT4KICAgIDYyMzM6CTBmIGI3IDgzIGM0IDAwIDAwIDAwIAltb3Z6d2wg MHhjNCglcmJ4KSwlZWF4CglpZiAoZikKICAgIDYyM2E6CTQ4IDAxIGM4ICAgICAgICAgICAgIAlh ZGQgICAgJXJjeCwlcmF4CgkJZi0+dXNlZCA9IGppZmZpZXM7CiAgICA2MjNkOgk4MCA3OCAwNiAz YSAgICAgICAgICAJY21wYiAgICQweDNhLDB4NiglcmF4KQogICAgNjI0MToJMGYgODUgNWUgZmQg ZmYgZmYgICAgCWpuZSAgICA1ZmE1IDx2eGxhbl94bWl0KzB4YTU+CiAgICA2MjQ3Ogk0NCAwZiBi NyBhMyBjMiAwMCAwMCAJbW92endsIDB4YzIoJXJieCksJXIxMmQKICAgIDYyNGU6CTAwIAogICAg NjI0ZjoJNDkgMDEgY2MgICAgICAgICAgICAgCWFkZCAgICAlcmN4LCVyMTIKCXJldHVybiBza2It PmRhdGFfbGVuOwp9CgpzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGludCBza2JfaGVhZGxlbihjb25z dCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQp7CglyZXR1cm4gc2tiLT5sZW4gLSBza2ItPmRhdGFfbGVu OwogICAgNjI1MjoJNjYgNDEgODEgM2MgMjQgODcgMDAgCWNtcHcgICAkMHg4NywoJXIxMikKICAg IDYyNTk6CTBmIDg1IDQ2IGZkIGZmIGZmICAgIAlqbmUgICAgNWZhNSA8dnhsYW5feG1pdCsweGE1 PgoJcmV0dXJuIHVubGlrZWx5KGxlbiA+IHNrYi0+bGVuKSA/IE5VTEwgOiBfX3Bza2JfcHVsbChz a2IsIGxlbik7Cn0KCnN0YXRpYyBpbmxpbmUgaW50IHBza2JfbWF5X3B1bGwoc3RydWN0IHNrX2J1 ZmYgKnNrYiwgdW5zaWduZWQgaW50IGxlbikKewoJaWYgKGxpa2VseShsZW4gPD0gc2tiX2hlYWRs ZW4oc2tiKSkpCiAgICA2MjVmOgk0OSA4YiA5NiAwOCAwMyAwMCAwMCAJbW92ICAgIDB4MzA4KCVy MTQpLCVyZHgKCXNrYi0+dHJhbnNwb3J0X2hlYWRlciArPSBvZmZzZXQ7Cn0KCnN0YXRpYyBpbmxp bmUgdW5zaWduZWQgY2hhciAqc2tiX25ldHdvcmtfaGVhZGVyKGNvbnN0IHN0cnVjdCBza19idWZm ICpza2IpCnsKCXJldHVybiBza2ItPmhlYWQgKyBza2ItPm5ldHdvcmtfaGVhZGVyOwogICAgNjI2 NjoJNDggODUgZDIgICAgICAgICAgICAgCXRlc3QgICAlcmR4LCVyZHgKICAgIDYyNjk6CTBmIDg0 IGY4IDAzIDAwIDAwICAgIAlqZSAgICAgNjY2NyA8dnhsYW5feG1pdCsweDc2Nz4KCQlpZiAobnRv aHMoZXRoLT5oX3Byb3RvKSA9PSBFVEhfUF9BUlApCgkJCXJldHVybiBhcnBfcmVkdWNlKGRldiwg c2tiKTsKI2lmIElTX0VOQUJMRUQoQ09ORklHX0lQVjYpCgkJZWxzZSBpZiAobnRvaHMoZXRoLT5o X3Byb3RvKSA9PSBFVEhfUF9JUFY2ICYmCgkJCSBwc2tiX21heV9wdWxsKHNrYiwgc2l6ZW9mKHN0 cnVjdCBpcHY2aGRyKQoJCQkJICAgICAgICsgc2l6ZW9mKHN0cnVjdCBuZF9tc2cpKSAmJgogICAg NjI2ZjoJNDggYmEgMDAgMDAgMDAgMDAgMDAgCW1vdmFicyAkMHgxMDAwMDAwMDAwMDAwMDAsJXJk eAogICAgNjI3NjoJMDAgMDAgMDEgCglyZXR1cm4gc2tiLT50cmFuc3BvcnRfaGVhZGVyICE9ICh0 eXBlb2Yoc2tiLT50cmFuc3BvcnRfaGVhZGVyKSl+MFU7Cn0KCnN0YXRpYyBpbmxpbmUgdW5zaWdu ZWQgY2hhciAqc2tiX3RyYW5zcG9ydF9oZWFkZXIoY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYikK ewoJcmV0dXJuIHNrYi0+aGVhZCArIHNrYi0+dHJhbnNwb3J0X2hlYWRlcjsKICAgIDYyNzk6CTQ4 IDMzIDUwIDIwICAgICAgICAgIAl4b3IgICAgMHgyMCglcmF4KSwlcmR4CiAgICA2MjdkOgk0OCAw YiA1MCAxOCAgICAgICAgICAJb3IgICAgIDB4MTgoJXJheCksJXJkeAogICAgNjI4MToJMGYgODQg ZTAgMDMgMDAgMDAgICAgCWplICAgICA2NjY3IDx2eGxhbl94bWl0KzB4NzY3PgoJCQkgaXB2Nl9o ZHIoc2tiKS0+bmV4dGhkciA9PSBJUFBST1RPX0lDTVBWNikgewoJCQkJc3RydWN0IG5kX21zZyAq bXNnOwoKCQkJCW1zZyA9IChzdHJ1Y3QgbmRfbXNnICopc2tiX3RyYW5zcG9ydF9oZWFkZXIoc2ti KTsKCQkJCWlmIChtc2ctPmljbXBoLmljbXA2X2NvZGUgPT0gMCAmJgogICAgNjI4NzoJNDEgMGYg YjYgNDQgMjQgMDggICAgCW1vdnpibCAweDgoJXIxMiksJWVheAogICAgNjI4ZDoJM2QgZmYgMDAg MDAgMDAgICAgICAgCWNtcCAgICAkMHhmZiwlZWF4CiAgICA2MjkyOgkwZiA4NCBjZiAwMyAwMCAw MCAgICAJamUgICAgIDY2NjcgPHZ4bGFuX3htaXQrMHg3Njc+Cgljb25zdCBzdHJ1Y3QgaW42X2Fk ZHIgKnNhZGRyLCAqZGFkZHI7CglzdHJ1Y3QgbmVpZ2hib3VyICpuOwoJc3RydWN0IGluZXQ2X2Rl diAqaW42X2RldjsKCglpbjZfZGV2ID0gX19pbjZfZGV2X2dldChkZXYpOwoJaWYgKCFpbjZfZGV2 KQogICAgNjI5ODoJNDggOGIgMDUgMDAgMDAgMDAgMDAgCW1vdiAgICAweDAoJXJpcCksJXJheCAg ICAgICAgIyA2MjlmIDx2eGxhbl94bWl0KzB4MzlmPgoJbXNnID0gKHN0cnVjdCBuZF9tc2cgKilz a2JfdHJhbnNwb3J0X2hlYWRlcihza2IpOwoJaWYgKG1zZy0+aWNtcGguaWNtcDZfY29kZSAhPSAw IHx8CgkgICAgbXNnLT5pY21waC5pY21wNl90eXBlICE9IE5ESVNDX05FSUdIQk9VUl9TT0xJQ0lU QVRJT04pCgkJZ290byBvdXQ7CgoJaWYgKGlwdjZfYWRkcl9sb29wYmFjayhkYWRkcikgfHwKICAg IDYyOWY6CTQ5IDhkIDc0IDI0IDA4ICAgICAgIAlsZWEgICAgMHg4KCVyMTIpLCVyc2kKICAgIDYy YTQ6CTRjIDg5IGYyICAgICAgICAgICAgIAltb3YgICAgJXIxNCwlcmR4CiAgICA2MmE3Ogk0OCA4 YiA3OCAyOCAgICAgICAgICAJbW92ICAgIDB4MjgoJXJheCksJXJkaQogICAgNjJhYjoJZTggMDAg MDAgMDAgMDAgICAgICAgCWNhbGxxICA2MmIwIDx2eGxhbl94bWl0KzB4M2IwPgogICAgNjJiMDoJ NDggODUgYzAgICAgICAgICAgICAgCXRlc3QgICAlcmF4LCVyYXgKICAgIDYyYjM6CTQ5IDg5IGM3 ICAgICAgICAgICAgIAltb3YgICAgJXJheCwlcjE1CiAgICA2MmI2OgkwZiA4NCAzYiAwNiAwMCAw MCAgICAJamUgICAgIDY4ZjcgPHZ4bGFuX3htaXQrMHg5Zjc+CiAgICA2MmJjOglmNiA4MCBhZCAw MCAwMCAwMCBjMiAJdGVzdGIgICQweGMyLDB4YWQoJXJheCkKICAgIDYyYzM6CTBmIDg0IDIxIDA2 IDAwIDAwICAgIAlqZSAgICAgNjhlYSA8dnhsYW5feG1pdCsweDllYT4KCSAgICBpcHY2X2FkZHJf aXNfbXVsdGljYXN0KCZtc2ctPnRhcmdldCkpCgkJZ290byBvdXQ7CgoJbiA9IG5laWdoX2xvb2t1 cChpcHY2X3N0dWItPm5kX3RibCwgJm1zZy0+dGFyZ2V0LCBkZXYpOwogICAgNjJjOToJNDggOGQg YjAgYjggMDAgMDAgMDAgCWxlYSAgICAweGI4KCVyYXgpLCVyc2kKICAgIDYyZDA6CTRjIDg5IGVm ICAgICAgICAgICAgIAltb3YgICAgJXIxMywlcmRpCiAgICA2MmQzOgllOCAyOCA5ZCBmZiBmZiAg ICAgICAJY2FsbHEgIDAgPF9fdnhsYW5fZmluZF9tYWM+CiAgICA2MmQ4Ogk0OCA4NSBjMCAgICAg ICAgICAgICAJdGVzdCAgICVyYXgsJXJheAogICAgNjJkYjoJMGYgODQgZTcgMDggMDAgMDAgICAg CWplICAgICA2YmM4IDx2eGxhbl94bWl0KzB4Y2M4PgoKCWlmIChuKSB7CiAgICA2MmUxOgk0OCA4 YiAxNSAwMCAwMCAwMCAwMCAJbW92ICAgIDB4MCglcmlwKSwlcmR4ICAgICAgICAjIDYyZTggPHZ4 bGFuX3htaXQrMHgzZTg+CiAgICA2MmU4Ogk0OCA4OSA1MCAyOCAgICAgICAgICAJbW92ICAgICVy ZHgsMHgyOCglcmF4KQoJCXN0cnVjdCB2eGxhbl9mZGIgKmY7CgkJc3RydWN0IHNrX2J1ZmYgKnJl cGx5OwoKCQlpZiAoIShuLT5udWRfc3RhdGUgJiBOVURfQ09OTkVDVEVEKSkgewogICAgNjJlYzoJ NDggOGIgNTAgMzAgICAgICAgICAgCW1vdiAgICAweDMwKCVyYXgpLCVyZHgKICAgIDYyZjA6CTY2 IDgzIDdhIGQ4IDBhICAgICAgIAljbXB3ICAgJDB4YSwtMHgyOCglcmR4KQogICAgNjJmNToJMGYg ODQgYmQgMDggMDAgMDAgICAgCWplICAgICA2YmI4IDx2eGxhbl94bWl0KzB4Y2I4PgoJCQluZWln aF9yZWxlYXNlKG4pOwoJCQlnb3RvIG91dDsKCQl9CgoJCWYgPSB2eGxhbl9maW5kX21hYyh2eGxh biwgbi0+aGEpOwogICAgNjJmYjoJODMgN2EgZGMgMDAgICAgICAgICAgCWNtcGwgICAkMHgwLC0w eDI0KCVyZHgpCiAgICA2MmZmOgkwZiA5NCBjMiAgICAgICAgICAgICAJc2V0ZSAgICVkbApzdGF0 aWMgc3RydWN0IHZ4bGFuX2ZkYiAqdnhsYW5fZmluZF9tYWMoc3RydWN0IHZ4bGFuX2RldiAqdnhs YW4sCgkJCQkJY29uc3QgdTggKm1hYykKewoJc3RydWN0IHZ4bGFuX2ZkYiAqZjsKCglmID0gX192 eGxhbl9maW5kX21hYyh2eGxhbiwgbWFjKTsKICAgIDYzMDI6CTg0IGQyICAgICAgICAgICAgICAg IAl0ZXN0ICAgJWRsLCVkbAogICAgNjMwNDoJMGYgODUgZTAgMDUgMDAgMDAgICAgCWpuZSAgICA2 OGVhIDx2eGxhbl94bWl0KzB4OWVhPgoJaWYgKGYpCiAgICA2MzBhOgkwZiBiZSA0MCA0OCAgICAg ICAgICAJbW92c2JsIDB4NDgoJXJheCksJWVheAogICAgNjMwZToJYzEgZTggMWYgICAgICAgICAg ICAgCXNociAgICAkMHgxZiwlZWF4CgkJZi0+dXNlZCA9IGppZmZpZXM7CiAgICA2MzExOgk0YyA4 YiA2YiAyMCAgICAgICAgICAJbW92ICAgIDB4MjAoJXJieCksJXIxMwogICAgNjMxNToJODMgZTAg MDEgICAgICAgICAgICAgCWFuZCAgICAkMHgxLCVlYXgKICAgIDYzMTg6CTg4IDQ0IDI0IDIwICAg ICAgICAgIAltb3YgICAgJWFsLDB4MjAoJXJzcCkKICAgIDYzMWM6CTRkIDg1IGVkICAgICAgICAg ICAgIAl0ZXN0ICAgJXIxMywlcjEzCiAgICA2MzFmOgkwZiA4NCBjNSAwNSAwMCAwMCAgICAJamUg ICAgIDY4ZWEgPHZ4bGFuX3htaXQrMHg5ZWE+CgkJcmV0dXJuIGEtPnNpbi5zaW5fYWRkci5zX2Fk ZHIgPT0gYi0+c2luLnNpbl9hZGRyLnNfYWRkcjsKfQoKc3RhdGljIGlubGluZSBib29sIHZ4bGFu X2FkZHJfYW55KGNvbnN0IHVuaW9uIHZ4bGFuX2FkZHIgKmlwYSkKewoJaWYgKGlwYS0+c2Euc2Ff ZmFtaWx5ID09IEFGX0lORVQ2KQogICAgNjMyNToJNDEgMGYgYjcgOTUgNGUgMDIgMDAgCW1vdnp3 bCAweDI0ZSglcjEzKSwlZWR4CiAgICA2MzJjOgkwMCAKCQlyZXR1cm4gaXB2Nl9hZGRyX2FueSgm aXBhLT5zaW42LnNpbjZfYWRkcik7CgllbHNlCgkJcmV0dXJuIGlwYS0+c2luLnNpbl9hZGRyLnNf YWRkciA9PSBodG9ubChJTkFERFJfQU5ZKTsKICAgIDYzMmQ6CTQxIDBmIGI3IDg1IDUwIDAyIDAw IAltb3Z6d2wgMHgyNTAoJXIxMyksJWVheAogICAgNjMzNDoJMDAgCgkJCW5laWdoX3JlbGVhc2Uo bik7CgkJCWdvdG8gb3V0OwoJCX0KCgkJZiA9IHZ4bGFuX2ZpbmRfbWFjKHZ4bGFuLCBuLT5oYSk7 CgkJaWYgKGYgJiYgdnhsYW5fYWRkcl9hbnkoJihmaXJzdF9yZW1vdGVfcmN1KGYpLT5yZW1vdGVf aXApKSkgewogICAgNjMzNToJODMgYzkgZmYgICAgICAgICAgICAgCW9yICAgICAkMHhmZmZmZmZm ZiwlZWN4CiAgICA2MzM4OgliZSAyMCAwMCAwOCAwMiAgICAgICAJbW92ICAgICQweDIwODAwMjAs JWVzaQoJCQluZWlnaF9yZWxlYXNlKG4pOwoJCQlnb3RvIG91dDsKCQl9CgoJCXJlcGx5ID0gdnhs YW5fbmFfY3JlYXRlKHNrYiwgbiwKCQkJCQkhIShmID8gZi0+ZmxhZ3MgJiBOVEZfUk9VVEVSIDog MCkpOwogICAgNjMzZDoJMDEgZDAgICAgICAgICAgICAgICAgCWFkZCAgICAlZWR4LCVlYXgKICAg IDYzM2Y6CTQxIDBmIGI3IDk1IDUyIDAyIDAwIAltb3Z6d2wgMHgyNTIoJXIxMyksJWVkeAogICAg NjM0NjoJMDAgCgojaWYgSVNfRU5BQkxFRChDT05GSUdfSVBWNikKc3RhdGljIHN0cnVjdCBza19i dWZmICp2eGxhbl9uYV9jcmVhdGUoc3RydWN0IHNrX2J1ZmYgKnJlcXVlc3QsCglzdHJ1Y3QgbmVp Z2hib3VyICpuLCBib29sIGlzcm91dGVyKQp7CglzdHJ1Y3QgbmV0X2RldmljZSAqZGV2ID0gcmVx dWVzdC0+ZGV2OwogICAgNjM0NzoJODMgZTAgZjAgICAgICAgICAgICAgCWFuZCAgICAkMHhmZmZm ZmZmMCwlZWF4CiAgICA2MzRhOgk4ZCA3YyAxMCA1OCAgICAgICAgICAJbGVhICAgIDB4NTgoJXJh eCwlcmR4LDEpLCVlZGkKCXU4ICpkYWRkcjsKCWludCBuYV9vbGVuID0gODsgLyogb3B0IGhkciAr IEVUSF9BTEVOIGZvciB0YXJnZXQgKi8KCWludCBuc19vbGVuOwoJaW50IGksIGxlbjsKCglpZiAo ZGV2ID09IE5VTEwpCiAgICA2MzRlOgkzMSBkMiAgICAgICAgICAgICAgICAJeG9yICAgICVlZHgs JWVkeAogICAgNjM1MDoJZTggMDAgMDAgMDAgMDAgICAgICAgCWNhbGxxICA2MzU1IDx2eGxhbl94 bWl0KzB4NDU1PgpzdHJ1Y3Qgc2tfYnVmZiAqX19idWlsZF9za2Iodm9pZCAqZGF0YSwgdW5zaWdu ZWQgaW50IGZyYWdfc2l6ZSk7CnN0cnVjdCBza19idWZmICpidWlsZF9za2Iodm9pZCAqZGF0YSwg dW5zaWduZWQgaW50IGZyYWdfc2l6ZSk7CnN0YXRpYyBpbmxpbmUgc3RydWN0IHNrX2J1ZmYgKmFs bG9jX3NrYih1bnNpZ25lZCBpbnQgc2l6ZSwKCQkJCQlnZnBfdCBwcmlvcml0eSkKewoJcmV0dXJu IF9fYWxsb2Nfc2tiKHNpemUsIHByaW9yaXR5LCAwLCBOVU1BX05PX05PREUpOwogICAgNjM1NToJ NDggODUgYzAgICAgICAgICAgICAgCXRlc3QgICAlcmF4LCVyYXgKICAgIDYzNTg6CTQ5IDg5IGM0 ICAgICAgICAgICAgIAltb3YgICAgJXJheCwlcjEyCiAgICA2MzViOgkwZiA4NCA4OSAwNSAwMCAw MCAgICAJamUgICAgIDY4ZWEgPHZ4bGFuX3htaXQrMHg5ZWE+CiAgICA2MzYxOgk2NiBjNyA4MCBj MCAwMCAwMCAwMCAJbW92dyAgICQweGRkODYsMHhjMCglcmF4KQogICAgNjM2ODoJODYgZGQgCiAg ICA2MzZhOgk0YyA4OSA2OCAyMCAgICAgICAgICAJbW92ICAgICVyMTMsMHgyMCglcmF4KQogICAg NjM2ZToJYmUgMGUgMDAgMDAgMDAgICAgICAgCW1vdiAgICAkMHhlLCVlc2kKICAgIDYzNzM6CTQ4 IDhiIDUzIDIwICAgICAgICAgIAltb3YgICAgMHgyMCglcmJ4KSwlcmR4CiAgICA2Mzc3Ogk0YyA4 OSBlNyAgICAgICAgICAgICAJbW92ICAgICVyMTIsJXJkaQogICAgNjM3YToJMGYgYjcgOGEgNGUg MDIgMDAgMDAgCW1vdnp3bCAweDI0ZSglcmR4KSwlZWN4CiAgICA2MzgxOgkwZiBiNyA4MiA1MCAw MiAwMCAwMCAJbW92endsIDB4MjUwKCVyZHgpLCVlYXgKICAgIDYzODg6CTAxIGM4ICAgICAgICAg ICAgICAgIAlhZGQgICAgJWVjeCwlZWF4CiAgICA2MzhhOgk4MyBlMCBmMCAgICAgICAgICAgICAJ YW5kICAgICQweGZmZmZmZmYwLCVlYXgKCQlyZXR1cm4gTlVMTDsKCglsZW4gPSBMTF9SRVNFUlZF RF9TUEFDRShkZXYpICsgc2l6ZW9mKHN0cnVjdCBpcHY2aGRyKSArCgkJc2l6ZW9mKCpuYSkgKyBu YV9vbGVuICsgZGV2LT5uZWVkZWRfdGFpbHJvb207CglyZXBseSA9IGFsbG9jX3NrYihsZW4sIEdG UF9BVE9NSUMpOwoJaWYgKHJlcGx5ID09IE5VTEwpCiAgICA2MzhkOgk4MyBjMCAxMCAgICAgICAg ICAgICAJYWRkICAgICQweDEwLCVlYXgKICAgIDYzOTA6CTQxIDAxIDg0IDI0IGM4IDAwIDAwIAlh ZGQgICAgJWVheCwweGM4KCVyMTIpCiAgICA2Mzk3OgkwMCAKCQlyZXR1cm4gTlVMTDsKCglyZXBs eS0+cHJvdG9jb2wgPSBodG9ucyhFVEhfUF9JUFY2KTsKICAgIDYzOTg6CTQ4IDYzIGQwICAgICAg ICAgICAgIAltb3ZzbHEgJWVheCwlcmR4CglyZXBseS0+ZGV2ID0gZGV2OwogICAgNjM5YjoJNDkg MDEgOTQgMjQgZDggMDAgMDAgCWFkZCAgICAlcmR4LDB4ZDgoJXIxMikKICAgIDYzYTI6CTAwIAoJ c2tiX3Jlc2VydmUocmVwbHksIExMX1JFU0VSVkVEX1NQQUNFKHJlcXVlc3QtPmRldikpOwogICAg NjNhMzoJZTggMDAgMDAgMDAgMDAgICAgICAgCWNhbGxxICA2M2E4IDx2eGxhbl94bWl0KzB4NGE4 PgoJc2tiX3B1c2gocmVwbHksIHNpemVvZihzdHJ1Y3QgZXRoaGRyKSk7CiAgICA2M2E4Ogk0OSA4 YiA4NCAyNCBkMCAwMCAwMCAJbW92ICAgIDB4ZDAoJXIxMiksJXJheAogICAgNjNhZjoJMDAgCglp ZiAocmVwbHkgPT0gTlVMTCkKCQlyZXR1cm4gTlVMTDsKCglyZXBseS0+cHJvdG9jb2wgPSBodG9u cyhFVEhfUF9JUFY2KTsKCXJlcGx5LT5kZXYgPSBkZXY7Cglza2JfcmVzZXJ2ZShyZXBseSwgTExf UkVTRVJWRURfU1BBQ0UocmVxdWVzdC0+ZGV2KSk7CiAgICA2M2IwOgk0OSA4YiA4YyAyNCBkOCAw MCAwMCAJbW92ICAgIDB4ZDgoJXIxMiksJXJjeAogICAgNjNiNzoJMDAgCiAgICA2M2I4Ogk0OCAy OSBjMSAgICAgICAgICAgICAJc3ViICAgICVyYXgsJXJjeAogICAgNjNiYjoJNjYgNDEgODkgOGMg MjQgYzYgMDAgCW1vdiAgICAlY3gsMHhjNiglcjEyKQogICAgNjNjMjoJMDAgMDAgCiAqCXJvb20u IFRoaXMgaXMgb25seSBhbGxvd2VkIGZvciBhbiBlbXB0eSBidWZmZXIuCiAqLwpzdGF0aWMgaW5s aW5lIHZvaWQgc2tiX3Jlc2VydmUoc3RydWN0IHNrX2J1ZmYgKnNrYiwgaW50IGxlbikKewoJc2ti LT5kYXRhICs9IGxlbjsKCXNrYi0+dGFpbCArPSBsZW47CiAgICA2M2M0OgkwZiBiNyA5MyBjMiAw MCAwMCAwMCAJbW92endsIDB4YzIoJXJieCksJWVkeAogKglJbmNyZWFzZSB0aGUgaGVhZHJvb20g b2YgYW4gZW1wdHkgJnNrX2J1ZmYgYnkgcmVkdWNpbmcgdGhlIHRhaWwKICoJcm9vbS4gVGhpcyBp cyBvbmx5IGFsbG93ZWQgZm9yIGFuIGVtcHR5IGJ1ZmZlci4KICovCnN0YXRpYyBpbmxpbmUgdm9p ZCBza2JfcmVzZXJ2ZShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBpbnQgbGVuKQp7Cglza2ItPmRhdGEg Kz0gbGVuOwogICAgNjNjYjoJNDggOGIgYjMgZDAgMDAgMDAgMDAgCW1vdiAgICAweGQwKCVyYngp LCVyc2kKICAgIDYzZDI6CTBmIGI3IGJiIGM2IDAwIDAwIDAwIAltb3Z6d2wgMHhjNiglcmJ4KSwl ZWRpCglyZXR1cm4gc2tiLT5tYWNfaGVhZGVyICE9ICh0eXBlb2Yoc2tiLT5tYWNfaGVhZGVyKSl+ MFU7Cn0KCnN0YXRpYyBpbmxpbmUgdm9pZCBza2JfcmVzZXRfbWFjX2hlYWRlcihzdHJ1Y3Qgc2tf YnVmZiAqc2tiKQp7Cglza2ItPm1hY19oZWFkZXIgPSBza2ItPmRhdGEgLSBza2ItPmhlYWQ7CiAg ICA2M2Q5Ogk0NCA4YiA5YiA4MCAwMCAwMCAwMCAJbW92ICAgIDB4ODAoJXJieCksJXIxMWQKICAg IDYzZTA6CTQ4IDAxIGYyICAgICAgICAgICAgIAlhZGQgICAgJXJzaSwlcmR4CiAgICA2M2UzOgk0 OCA4ZCA3YyAzZSAwNiAgICAgICAJbGVhICAgIDB4NiglcnNpLCVyZGksMSksJXJkaQogICAgNjNl ODoJNDggODkgZDYgICAgICAgICAgICAgCW1vdiAgICAlcmR4LCVyc2kKICAgIDYzZWI6CTQ4IDJi IGIzIGQ4IDAwIDAwIDAwIAlzdWIgICAgMHhkOCglcmJ4KSwlcnNpCiAgICA2M2YyOgk0MSAyOSBm MyAgICAgICAgICAgICAJc3ViICAgICVlc2ksJXIxMWQKCXJldHVybiBza2ItPnRyYW5zcG9ydF9o ZWFkZXIgIT0gKHR5cGVvZihza2ItPnRyYW5zcG9ydF9oZWFkZXIpKX4wVTsKfQoKc3RhdGljIGlu bGluZSB1bnNpZ25lZCBjaGFyICpza2JfdHJhbnNwb3J0X2hlYWRlcihjb25zdCBzdHJ1Y3Qgc2tf YnVmZiAqc2tiKQp7CglyZXR1cm4gc2tiLT5oZWFkICsgc2tiLT50cmFuc3BvcnRfaGVhZGVyOwog ICAgNjNmNToJNDUgOGQgNTMgZTcgICAgICAgICAgCWxlYSAgICAtMHgxOSglcjExKSwlcjEwZAog ICAgNjNmOToJNDUgODUgZDIgICAgICAgICAgICAgCXRlc3QgICAlcjEwZCwlcjEwZAogICAgNjNm YzoJMGYgOGUgNDYgMDUgMDAgMDAgICAgCWpsZSAgICA2OTQ4IDx2eGxhbl94bWl0KzB4YTQ4PgoJ c2tiX3B1c2gocmVwbHksIHNpemVvZihzdHJ1Y3QgZXRoaGRyKSk7Cglza2JfcmVzZXRfbWFjX2hl YWRlcihyZXBseSk7CgoJbnMgPSAoc3RydWN0IG5kX21zZyAqKXNrYl90cmFuc3BvcnRfaGVhZGVy KHJlcXVlc3QpOwoKCWRhZGRyID0gZXRoX2hkcihyZXF1ZXN0KS0+aF9zb3VyY2U7CiAgICA2NDAy Ogk4MCA3YSAxOCAwMSAgICAgICAgICAJY21wYiAgICQweDEsMHgxOCglcmR4KQogICAgNjQwNjoJ MGYgODQgMzQgMDUgMDAgMDAgICAgCWplICAgICA2OTQwIDx2eGxhbl94bWl0KzB4YTQwPgoJbnNf b2xlbiA9IHJlcXVlc3QtPmxlbiAtIHNrYl90cmFuc3BvcnRfb2Zmc2V0KHJlcXVlc3QpIC0gc2l6 ZW9mKCpucyk7Cglmb3IgKGkgPSAwOyBpIDwgbnNfb2xlbi0xOyBpICs9IChucy0+b3B0W2krMV08 PDMpKSB7CiAgICA2NDBjOgkzMSBmNiAgICAgICAgICAgICAgICAJeG9yICAgICVlc2ksJWVzaQog ICAgNjQwZToJZWIgMGYgICAgICAgICAgICAgICAgCWptcCAgICA2NDFmIDx2eGxhbl94bWl0KzB4 NTFmPgogICAgNjQxMDoJNGMgNjMgYzYgICAgICAgICAgICAgCW1vdnNscSAlZXNpLCVyOAoJc2ti X3B1c2gocmVwbHksIHNpemVvZihzdHJ1Y3QgZXRoaGRyKSk7Cglza2JfcmVzZXRfbWFjX2hlYWRl cihyZXBseSk7CgoJbnMgPSAoc3RydWN0IG5kX21zZyAqKXNrYl90cmFuc3BvcnRfaGVhZGVyKHJl cXVlc3QpOwoKCWRhZGRyID0gZXRoX2hkcihyZXF1ZXN0KS0+aF9zb3VyY2U7CiAgICA2NDEzOgk0 MiA4MCA3YyAwMiAxOCAwMSAgICAJY21wYiAgICQweDEsMHgxOCglcmR4LCVyOCwxKQoJbnNfb2xl biA9IHJlcXVlc3QtPmxlbiAtIHNrYl90cmFuc3BvcnRfb2Zmc2V0KHJlcXVlc3QpIC0gc2l6ZW9m KCpucyk7Cglmb3IgKGkgPSAwOyBpIDwgbnNfb2xlbi0xOyBpICs9IChucy0+b3B0W2krMV08PDMp KSB7CiAgICA2NDE5OgkwZiA4NCAyNCAwNSAwMCAwMCAgICAJamUgICAgIDY5NDMgPHZ4bGFuX3ht aXQrMHhhNDM+CiAgICA2NDFmOgk0NCA4ZCA0NiAwMSAgICAgICAgICAJbGVhICAgIDB4MSglcnNp KSwlcjhkCiAgICA2NDIzOgk0ZCA2MyBjMCAgICAgICAgICAgICAJbW92c2xxICVyOGQsJXI4CiAg ICA2NDI2Ogk0NiAwZiBiNiA0NCAwMiAxOCAgICAJbW92emJsIDB4MTgoJXJkeCwlcjgsMSksJXI4 ZAogICAgNjQyYzoJNDIgOGQgMzQgYzYgICAgICAgICAgCWxlYSAgICAoJXJzaSwlcjgsOCksJWVz aQogICAgNjQzMDoJNDQgMzkgZDYgICAgICAgICAgICAgCWNtcCAgICAlcjEwZCwlZXNpCgkJaWYg KG5zLT5vcHRbaV0gPT0gTkRfT1BUX1NPVVJDRV9MTF9BRERSKSB7CiAgICA2NDMzOgk3YyBkYiAg ICAgICAgICAgICAgICAJamwgICAgIDY0MTAgPHZ4bGFuX3htaXQrMHg1MTA+CiAgICA2NDM1Ogll OSAwZSAwNSAwMCAwMCAgICAgICAJam1wcSAgIDY5NDggPHZ4bGFuX3htaXQrMHhhNDg+CiAgICA2 NDNhOgk0OCA4YiA4YiBkMCAwMCAwMCAwMCAJbW92ICAgIDB4ZDAoJXJieCksJXJjeAogICAgNjQ0 MToJNDggOGIgOTMgZDggMDAgMDAgMDAgCW1vdiAgICAweGQ4KCVyYngpLCVyZHgKICAgIDY0NDg6 CTQ4IDI5IGNhICAgICAgICAgICAgIAlzdWIgICAgJXJjeCwlcmR4CiAgICA2NDRiOgk2NiA4OSA5 MyBjNiAwMCAwMCAwMCAJbW92ICAgICVkeCwweGM2KCVyYngpCgoJbnMgPSAoc3RydWN0IG5kX21z ZyAqKXNrYl90cmFuc3BvcnRfaGVhZGVyKHJlcXVlc3QpOwoKCWRhZGRyID0gZXRoX2hkcihyZXF1 ZXN0KS0+aF9zb3VyY2U7Cgluc19vbGVuID0gcmVxdWVzdC0+bGVuIC0gc2tiX3RyYW5zcG9ydF9v ZmZzZXQocmVxdWVzdCkgLSBzaXplb2YoKm5zKTsKCWZvciAoaSA9IDA7IGkgPCBuc19vbGVuLTE7 IGkgKz0gKG5zLT5vcHRbaSsxXTw8MykpIHsKICAgIDY0NTI6CTQxIDhiIGI2IGQ4IDA4IDAwIDAw IAltb3YgICAgMHg4ZDgoJXIxNCksJWVzaQogICAgNjQ1OToJZjcgYzYgMDAgMjAgMDAgMDAgICAg CXRlc3QgICAkMHgyMDAwLCVlc2kKICAgIDY0NWY6CTBmIDg1IDAwIGZjIGZmIGZmICAgIAlqbmUg ICAgNjA2NSA8dnhsYW5feG1pdCsweDE2NT4KICAgIDY0NjU6CWU5IDBmIGZiIGZmIGZmICAgICAg IAlqbXBxICAgNWY3OSA8dnhsYW5feG1pdCsweDc5PgoJcmV0dXJuIHNrYi0+bWFjX2hlYWRlciAh PSAodHlwZW9mKHNrYi0+bWFjX2hlYWRlcikpfjBVOwp9CgpzdGF0aWMgaW5saW5lIHZvaWQgc2ti X3Jlc2V0X21hY19oZWFkZXIoc3RydWN0IHNrX2J1ZmYgKnNrYikKewoJc2tiLT5tYWNfaGVhZGVy ID0gc2tiLT5kYXRhIC0gc2tiLT5oZWFkOwogICAgNjQ2YToJNDEgZjYgODYgMzggMDIgMDAgMDAg CXRlc3RiICAkMHg4MCwweDIzOCglcjE0KQogICAgNjQ3MToJODAgCiAgICA2NDcyOgkwZiA4NSBl ZiAwMSAwMCAwMCAgICAJam5lICAgIDY2NjcgPHZ4bGFuX3htaXQrMHg3Njc+CiAgICA2NDc4Ogk2 NiA0MSA4MyBiZSA0YyAwMiAwMCAJY21wdyAgICQweDE4LDB4MjRjKCVyMTQpCiAgICA2NDdmOgkw MCAxOCAKICAgIDY0ODE6CTQxIDBmIGI2IDg2IDc1IDAyIDAwIAltb3Z6YmwgMHgyNzUoJXIxNCks JWVheAogICAgNjQ4ODoJMDAgCgoJaW5mbyA9IHNrYl90dW5uZWxfaW5mbyhza2IpOwoKCXNrYl9y ZXNldF9tYWNfaGVhZGVyKHNrYik7CgoJaWYgKHZ4bGFuLT5mbGFncyAmIFZYTEFOX0ZfQ09MTEVD VF9NRVRBREFUQSkgewogICAgNjQ4OToJMGYgODUgZTUgMDEgMDAgMDAgICAgCWpuZSAgICA2Njc0 IDx2eGxhbl94bWl0KzB4Nzc0PgogICAgNjQ4ZjoJODMgYzAgMTAgICAgICAgICAgICAgCWFkZCAg ICAkMHgxMCwlZWF4CiAgICA2NDkyOgk4YiBiMyA4MCAwMCAwMCAwMCAgICAJbW92ICAgIDB4ODAo JXJieCksJWVzaQogICAgNjQ5ODoJODkgZjIgICAgICAgICAgICAgICAgCW1vdiAgICAlZXNpLCVl ZHgKCXN0cnVjdCBhcnBoZHIgKnBhcnA7Cgl1OCAqYXJwcHRyLCAqc2hhOwoJX19iZTMyIHNpcCwg dGlwOwoJc3RydWN0IG5laWdoYm91ciAqbjsKCglpZiAoZGV2LT5mbGFncyAmIElGRl9OT0FSUCkK ICAgIDY0OWE6CTJiIDkzIDg0IDAwIDAwIDAwICAgIAlzdWIgICAgMHg4NCglcmJ4KSwlZWR4CiAg ICA2NGEwOgkzOSBkMCAgICAgICAgICAgICAgICAJY21wICAgICVlZHgsJWVheAogICAgNjRhMjoJ MGYgODcgYWUgMDIgMDAgMDAgICAgCWphICAgICA2NzU2IDx2eGxhbl94bWl0KzB4ODU2PgoJcmV0 dXJuIChzdHJ1Y3QgYXJwaGRyICopc2tiX25ldHdvcmtfaGVhZGVyKHNrYik7Cn0KCnN0YXRpYyBp bmxpbmUgaW50IGFycF9oZHJfbGVuKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCnsKCXN3aXRjaCAo ZGV2LT50eXBlKSB7CiAgICA2NGE4OgkwZiBiNyA4MyBjNCAwMCAwMCAwMCAJbW92endsIDB4YzQo JXJieCksJWVheAogICAgNjRhZjoJNDggMDEgYzEgICAgICAgICAgICAgCWFkZCAgICAlcmF4LCVy Y3gKICAgIDY0YjI6CTBmIGI3IDAxICAgICAgICAgICAgIAltb3Z6d2wgKCVyY3gpLCVlYXgKICAg IDY0YjU6CTY2IDNkIDAwIDAxICAgICAgICAgIAljbXAgICAgJDB4MTAwLCVheAogICAgNjRiOToJ NzQgMGEgICAgICAgICAgICAgICAgCWplICAgICA2NGM1IDx2eGxhbl94bWl0KzB4NWM1PgogICAg NjRiYjoJNjYgM2QgMDAgMDYgICAgICAgICAgCWNtcCAgICAkMHg2MDAsJWF4CiNpZiBJU19FTkFC TEVEKENPTkZJR19GSVJFV0lSRV9ORVQpCgljYXNlIEFSUEhSRF9JRUVFMTM5NDoKCQkvKiBBUlAg aGVhZGVyLCBkZXZpY2UgYWRkcmVzcyBhbmQgMiBJUCBhZGRyZXNzZXMgKi8KCQlyZXR1cm4gc2l6 ZW9mKHN0cnVjdCBhcnBoZHIpICsgZGV2LT5hZGRyX2xlbiArIHNpemVvZih1MzIpICogMjsKICAg IDY0YmY6CTBmIDg1IGEyIDAxIDAwIDAwICAgIAlqbmUgICAgNjY2NyA8dnhsYW5feG1pdCsweDc2 Nz4KICAgIDY0YzU6CTY2IDgzIDc5IDAyIDA4ICAgICAgIAljbXB3ICAgJDB4OCwweDIoJXJjeCkK CXJldHVybiBza2ItPmRhdGFfbGVuOwp9CgpzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGludCBza2Jf aGVhZGxlbihjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQp7CglyZXR1cm4gc2tiLT5sZW4gLSBz a2ItPmRhdGFfbGVuOwogICAgNjRjYToJMGYgODUgOTcgMDEgMDAgMDAgICAgCWpuZSAgICA2NjY3 IDx2eGxhbl94bWl0KzB4NzY3PgoJcmV0dXJuIHVubGlrZWx5KGxlbiA+IHNrYi0+bGVuKSA/IE5V TEwgOiBfX3Bza2JfcHVsbChza2IsIGxlbik7Cn0KCnN0YXRpYyBpbmxpbmUgaW50IHBza2JfbWF5 X3B1bGwoc3RydWN0IHNrX2J1ZmYgKnNrYiwgdW5zaWduZWQgaW50IGxlbikKewoJaWYgKGxpa2Vs eShsZW4gPD0gc2tiX2hlYWRsZW4oc2tiKSkpCiAgICA2NGQwOgk2NiA4MSA3OSAwNiAwMCAwMSAg ICAJY21wdyAgICQweDEwMCwweDYoJXJjeCkKICAgIDY0ZDY6CTBmIDg1IDhiIDAxIDAwIDAwICAg IAlqbmUgICAgNjY2NyA8dnhsYW5feG1pdCsweDc2Nz4KCXNrYi0+dHJhbnNwb3J0X2hlYWRlciAr PSBvZmZzZXQ7Cn0KCnN0YXRpYyBpbmxpbmUgdW5zaWduZWQgY2hhciAqc2tiX25ldHdvcmtfaGVh ZGVyKGNvbnN0IHN0cnVjdCBza19idWZmICpza2IpCnsKCXJldHVybiBza2ItPmhlYWQgKyBza2It Pm5ldHdvcmtfaGVhZGVyOwogICAgNjRkYzoJMGYgYjYgNDEgMDQgICAgICAgICAgCW1vdnpibCAw eDQoJXJjeCksJWVheAogICAgNjRlMDoJNDEgM2EgODYgNzUgMDIgMDAgMDAgCWNtcCAgICAweDI3 NSglcjE0KSwlYWwKCQlkZXYtPnN0YXRzLnR4X2Ryb3BwZWQrKzsKCQlnb3RvIG91dDsKCX0KCXBh cnAgPSBhcnBfaGRyKHNrYik7CgoJaWYgKChwYXJwLT5hcl9ocmQgIT0gaHRvbnMoQVJQSFJEX0VU SEVSKSAmJgogICAgNjRlNzoJMGYgODUgN2EgMDEgMDAgMDAgICAgCWpuZSAgICA2NjY3IDx2eGxh bl94bWl0KzB4NzY3PgogICAgNjRlZDoJODAgNzkgMDUgMDQgICAgICAgICAgCWNtcGIgICAkMHg0 LDB4NSglcmN4KQogICAgNjRmMToJMGYgODUgNzAgMDEgMDAgMDAgICAgCWpuZSAgICA2NjY3IDx2 eGxhbl94bWl0KzB4NzY3PgoJICAgICBwYXJwLT5hcl9ocmQgIT0gaHRvbnMoQVJQSFJEX0lFRUU4 MDIpKSB8fAogICAgNjRmNzoJNGMgOGQgNjEgMDggICAgICAgICAgCWxlYSAgICAweDgoJXJjeCks JXIxMgogICAgNjRmYjoJNDkgOGQgMTQgMDQgICAgICAgICAgCWxlYSAgICAoJXIxMiwlcmF4LDEp LCVyZHgKICAgIDY0ZmY6CThiIDQ0IDAyIDA0ICAgICAgICAgIAltb3YgICAgMHg0KCVyZHgsJXJh eCwxKSwlZWF4CgkgICAgcGFycC0+YXJfcHJvICE9IGh0b25zKEVUSF9QX0lQKSB8fAogICAgNjUw MzoJOGIgMGEgICAgICAgICAgICAgICAgCW1vdiAgICAoJXJkeCksJWVjeAogICAgNjUwNToJM2Mg N2YgICAgICAgICAgICAgICAgCWNtcCAgICAkMHg3ZiwlYWwKICAgIDY1MDc6CTg5IDRjIDI0IDIw ICAgICAgICAgIAltb3YgICAgJWVjeCwweDIwKCVyc3ApCiAgICA2NTBiOgk4OSA0NCAyNCAyYyAg ICAgICAgICAJbW92ICAgICVlYXgsMHgyYyglcnNwKQoJICAgIHBhcnAtPmFyX29wICE9IGh0b25z KEFSUE9QX1JFUVVFU1QpIHx8CgkgICAgcGFycC0+YXJfaGxuICE9IGRldi0+YWRkcl9sZW4gfHwK ICAgIDY1MGY6CTBmIDg0IDUyIDAxIDAwIDAwICAgIAlqZSAgICAgNjY2NyA8dnhsYW5feG1pdCsw eDc2Nz4KCXBhcnAgPSBhcnBfaGRyKHNrYik7CgoJaWYgKChwYXJwLT5hcl9ocmQgIT0gaHRvbnMo QVJQSFJEX0VUSEVSKSAmJgoJICAgICBwYXJwLT5hcl9ocmQgIT0gaHRvbnMoQVJQSFJEX0lFRUU4 MDIpKSB8fAoJICAgIHBhcnAtPmFyX3BybyAhPSBodG9ucyhFVEhfUF9JUCkgfHwKCSAgICBwYXJw LT5hcl9vcCAhPSBodG9ucyhBUlBPUF9SRVFVRVNUKSB8fAogICAgNjUxNToJMjUgZjAgMDAgMDAg MDAgICAgICAgCWFuZCAgICAkMHhmMCwlZWF4CiAgICA2NTFhOgkzZCBlMCAwMCAwMCAwMCAgICAg ICAJY21wICAgICQweGUwLCVlYXgKCSAgICBwYXJwLT5hcl9obG4gIT0gZGV2LT5hZGRyX2xlbiB8 fAogICAgNjUxZjoJMGYgODQgNDIgMDEgMDAgMDAgICAgCWplICAgICA2NjY3IDx2eGxhbl94bWl0 KzB4NzY3PgogICAgNjUyNToJNDggOGQgNzQgMjQgMmMgICAgICAgCWxlYSAgICAweDJjKCVyc3Ap LCVyc2kKCSAgICBwYXJwLT5hcl9wbG4gIT0gNCkKCQlnb3RvIG91dDsKCWFycHB0ciA9ICh1OCAq KXBhcnAgKyBzaXplb2Yoc3RydWN0IGFycGhkcik7CiAgICA2NTJhOgk0YyA4OSBmMiAgICAgICAg ICAgICAJbW92ICAgICVyMTQsJXJkeAoJc2hhID0gYXJwcHRyOwoJYXJwcHRyICs9IGRldi0+YWRk cl9sZW47CS8qIHNoYSAqLwogICAgNjUyZDoJNDggYzcgYzcgMDAgMDAgMDAgMDAgCW1vdiAgICAk MHgwLCVyZGkKCW1lbWNweSgmc2lwLCBhcnBwdHIsIHNpemVvZihzaXApKTsKICAgIDY1MzQ6CWU4 IDAwIDAwIDAwIDAwICAgICAgIAljYWxscSAgNjUzOSA8dnhsYW5feG1pdCsweDYzOT4KICAgIDY1 Mzk6CTQ4IDg1IGMwICAgICAgICAgICAgIAl0ZXN0ICAgJXJheCwlcmF4CglhcnBwdHIgKz0gc2l6 ZW9mKHNpcCk7CglhcnBwdHIgKz0gZGV2LT5hZGRyX2xlbjsJLyogdGhhICovCgltZW1jcHkoJnRp cCwgYXJwcHRyLCBzaXplb2YodGlwKSk7CiAgICA2NTNjOgk0OSA4OSBjNyAgICAgICAgICAgICAJ bW92ICAgICVyYXgsJXIxNQoKCWlmIChpcHY0X2lzX2xvb3BiYWNrKHRpcCkgfHwKICAgIDY1M2Y6 CTBmIDg0IGY3IDA2IDAwIDAwICAgIAlqZSAgICAgNmMzYyA8dnhsYW5feG1pdCsweGQzYz4KICAg IDY1NDU6CWY2IDgwIGFkIDAwIDAwIDAwIGMyIAl0ZXN0YiAgJDB4YzIsMHhhZCglcmF4KQogICAg NjU0YzoJMGYgODQgOTggMDMgMDAgMDAgICAgCWplICAgICA2OGVhIDx2eGxhbl94bWl0KzB4OWVh PgogICAgNjU1MjoJNDggOGQgOTAgYjggMDAgMDAgMDAgCWxlYSAgICAweGI4KCVyYXgpLCVyZHgK CSAgICBpcHY0X2lzX211bHRpY2FzdCh0aXApKQoJCWdvdG8gb3V0OwoKCW4gPSBuZWlnaF9sb29r dXAoJmFycF90YmwsICZ0aXAsIGRldik7CiAgICA2NTU5Ogk0YyA4OSBlZiAgICAgICAgICAgICAJ bW92ICAgICVyMTMsJXJkaQogICAgNjU1YzoJNDggODkgZDYgICAgICAgICAgICAgCW1vdiAgICAl cmR4LCVyc2kKICAgIDY1NWY6CTQ4IDg5IDU0IDI0IDE4ICAgICAgIAltb3YgICAgJXJkeCwweDE4 KCVyc3ApCiAgICA2NTY0OgllOCA5NyA5YSBmZiBmZiAgICAgICAJY2FsbHEgIDAgPF9fdnhsYW5f ZmluZF9tYWM+CgoJaWYgKG4pIHsKICAgIDY1Njk6CTQ4IDg1IGMwICAgICAgICAgICAgIAl0ZXN0 ICAgJXJheCwlcmF4CgoJaWYgKGlwdjRfaXNfbG9vcGJhY2sodGlwKSB8fAoJICAgIGlwdjRfaXNf bXVsdGljYXN0KHRpcCkpCgkJZ290byBvdXQ7CgoJbiA9IG5laWdoX2xvb2t1cCgmYXJwX3RibCwg JnRpcCwgZGV2KTsKICAgIDY1NmM6CTQ4IDhiIDU0IDI0IDE4ICAgICAgIAltb3YgICAgMHgxOCgl cnNwKSwlcmR4CgoJaWYgKG4pIHsKICAgIDY1NzE6CTc0IDI5ICAgICAgICAgICAgICAgIAlqZSAg ICAgNjU5YyA8dnhsYW5feG1pdCsweDY5Yz4KICAgIDY1NzM6CTQ4IDhiIDBkIDAwIDAwIDAwIDAw IAltb3YgICAgMHgwKCVyaXApLCVyY3ggICAgICAgICMgNjU3YSA8dnhsYW5feG1pdCsweDY3YT4K CQlzdHJ1Y3QgdnhsYW5fZmRiICpmOwoJCXN0cnVjdCBza19idWZmCSpyZXBseTsKCgkJaWYgKCEo bi0+bnVkX3N0YXRlICYgTlVEX0NPTk5FQ1RFRCkpIHsKICAgIDY1N2E6CTQ4IDg5IDQ4IDI4ICAg ICAgICAgIAltb3YgICAgJXJjeCwweDI4KCVyYXgpCiAgICA2NTdlOgk0OCA4YiA0MCAzMCAgICAg ICAgICAJbW92ICAgIDB4MzAoJXJheCksJXJheAoJCQluZWlnaF9yZWxlYXNlKG4pOwoJCQlnb3Rv IG91dDsKCQl9CgoJCWYgPSB2eGxhbl9maW5kX21hYyh2eGxhbiwgbi0+aGEpOwogICAgNjU4MjoJ NjYgODMgNzggZDggMGEgICAgICAgCWNtcHcgICAkMHhhLC0weDI4KCVyYXgpCiAgICA2NTg3Ogkw ZiA4NCA0ZCAwMyAwMCAwMCAgICAJamUgICAgIDY4ZGEgPHZ4bGFuX3htaXQrMHg5ZGE+CnN0YXRp YyBzdHJ1Y3QgdnhsYW5fZmRiICp2eGxhbl9maW5kX21hYyhzdHJ1Y3QgdnhsYW5fZGV2ICp2eGxh biwKCQkJCQljb25zdCB1OCAqbWFjKQp7CglzdHJ1Y3QgdnhsYW5fZmRiICpmOwoKCWYgPSBfX3Z4 bGFuX2ZpbmRfbWFjKHZ4bGFuLCBtYWMpOwogICAgNjU4ZDoJODMgNzggZGMgMDAgICAgICAgICAg CWNtcGwgICAkMHgwLC0weDI0KCVyYXgpCiAgICA2NTkxOgkwZiA5NCBjMCAgICAgICAgICAgICAJ c2V0ZSAgICVhbAogICAgNjU5NDoJODQgYzAgICAgICAgICAgICAgICAgCXRlc3QgICAlYWwsJWFs CiAgICA2NTk2OgkwZiA4NSA0ZSAwMyAwMCAwMCAgICAJam5lICAgIDY4ZWEgPHZ4bGFuX3htaXQr MHg5ZWE+CglpZiAoZikKICAgIDY1OWM6CTQ4IDg5IDE0IDI0ICAgICAgICAgIAltb3YgICAgJXJk eCwoJXJzcCkKICAgIDY1YTA6CTQ0IDhiIDQ0IDI0IDJjICAgICAgIAltb3YgICAgMHgyYyglcnNw KSwlcjhkCgkJZi0+dXNlZCA9IGppZmZpZXM7CiAgICA2NWE1Ogk0ZCA4OSBlMSAgICAgICAgICAg ICAJbW92ICAgICVyMTIsJXI5CiAgICA2NWE4Ogk4YiA1NCAyNCAyMCAgICAgICAgICAJbW92ICAg IDB4MjAoJXJzcCksJWVkeAogICAgNjVhYzoJNGMgODkgNjQgMjQgMDggICAgICAgCW1vdiAgICAl cjEyLDB4OCglcnNwKQogICAgNjViMToJNGMgODkgZjEgICAgICAgICAgICAgCW1vdiAgICAlcjE0 LCVyY3gKCQlyZXR1cm4gYS0+c2luLnNpbl9hZGRyLnNfYWRkciA9PSBiLT5zaW4uc2luX2FkZHIu c19hZGRyOwp9CgpzdGF0aWMgaW5saW5lIGJvb2wgdnhsYW5fYWRkcl9hbnkoY29uc3QgdW5pb24g dnhsYW5fYWRkciAqaXBhKQp7CglpZiAoaXBhLT5zYS5zYV9mYW1pbHkgPT0gQUZfSU5FVDYpCiAg ICA2NWI0OgliZSAwNiAwOCAwMCAwMCAgICAgICAJbW92ICAgICQweDgwNiwlZXNpCiAgICA2NWI5 OgliZiAwMiAwMCAwMCAwMCAgICAgICAJbW92ICAgICQweDIsJWVkaQoJCXJldHVybiBpcHY2X2Fk ZHJfYW55KCZpcGEtPnNpbjYuc2luNl9hZGRyKTsKCWVsc2UKCQlyZXR1cm4gaXBhLT5zaW4uc2lu X2FkZHIuc19hZGRyID09IGh0b25sKElOQUREUl9BTlkpOwogICAgNjViZToJZTggMDAgMDAgMDAg MDAgICAgICAgCWNhbGxxICA2NWMzIDx2eGxhbl94bWl0KzB4NmMzPgogICAgNjVjMzoJNGMgODkg ZmYgICAgICAgICAgICAgCW1vdiAgICAlcjE1LCVyZGkKCQkJbmVpZ2hfcmVsZWFzZShuKTsKCQkJ Z290byBvdXQ7CgkJfQoKCQlmID0gdnhsYW5fZmluZF9tYWModnhsYW4sIG4tPmhhKTsKCQlpZiAo ZiAmJiB2eGxhbl9hZGRyX2FueSgmKGZpcnN0X3JlbW90ZV9yY3UoZiktPnJlbW90ZV9pcCkpKSB7 CiAgICA2NWM2Ogk0OSA4OSBjNCAgICAgICAgICAgICAJbW92ICAgICVyYXgsJXIxMgogICAgNjVj OToJZTggNzIgYTIgZmYgZmYgICAgICAgCWNhbGxxICA4NDAgPG5laWdoX3JlbGVhc2U+CgkJCS8q IGJyaWRnZS1sb2NhbCBuZWlnaGJvciAqLwoJCQluZWlnaF9yZWxlYXNlKG4pOwoJCQlnb3RvIG91 dDsKCQl9CgoJCXJlcGx5ID0gYXJwX2NyZWF0ZShBUlBPUF9SRVBMWSwgRVRIX1BfQVJQLCBzaXAs IGRldiwgdGlwLCBzaGEsCiAgICA2NWNlOgk0ZCA4NSBlNCAgICAgICAgICAgICAJdGVzdCAgICVy MTIsJXIxMgogICAgNjVkMToJMGYgODQgOTAgMDAgMDAgMDAgICAgCWplICAgICA2NjY3IDx2eGxh bl94bWl0KzB4NzY3PgogICAgNjVkNzoJNDkgOGIgOGMgMjQgZDggMDAgMDAgCW1vdiAgICAweGQ4 KCVyMTIpLCVyY3gKICAgIDY1ZGU6CTAwIAogICAgNjVkZjoJNDkgOGIgODQgMjQgZDAgMDAgMDAg CW1vdiAgICAweGQwKCVyMTIpLCVyYXgKICAgIDY1ZTY6CTAwIAogICAgNjVlNzoJNDggODkgY2Eg ICAgICAgICAgICAgCW1vdiAgICAlcmN4LCVyZHgKICAgIDY1ZWE6CTQ4IDI5IGMyICAgICAgICAg ICAgIAlzdWIgICAgJXJheCwlcmR4CiAgICA2NWVkOgk2NiA0MSA4OSA5NCAyNCBjNiAwMCAJbW92 ICAgICVkeCwweGM2KCVyMTIpCiAgICA2NWY0OgkwMCAwMCAKICAgIDY1ZjY6CTQxIDBmIGI3IDk0 IDI0IGM0IDAwIAltb3Z6d2wgMHhjNCglcjEyKSwlZWR4CiAgICA2NWZkOgkwMCAwMCAKCQkJCW4t PmhhLCBzaGEpOwoKCQluZWlnaF9yZWxlYXNlKG4pOwoKCQlpZiAocmVwbHkgPT0gTlVMTCkKICAg IDY1ZmY6CTQ4IDAxIGQwICAgICAgICAgICAgIAlhZGQgICAgJXJkeCwlcmF4CiAgICA2NjAyOgk0 MSA4YiA5NCAyNCA4MCAwMCAwMCAJbW92ICAgIDB4ODAoJXIxMiksJWVkeAogICAgNjYwOToJMDAg CglyZXR1cm4gc2tiLT5tYWNfaGVhZGVyICE9ICh0eXBlb2Yoc2tiLT5tYWNfaGVhZGVyKSl+MFU7 Cn0KCnN0YXRpYyBpbmxpbmUgdm9pZCBza2JfcmVzZXRfbWFjX2hlYWRlcihzdHJ1Y3Qgc2tfYnVm ZiAqc2tiKQp7Cglza2ItPm1hY19oZWFkZXIgPSBza2ItPmRhdGEgLSBza2ItPmhlYWQ7CiAgICA2 NjBhOgk0OCAyOSBjOCAgICAgICAgICAgICAJc3ViICAgICVyY3gsJXJheAogICAgNjYwZDoJMjkg YzIgICAgICAgICAgICAgICAgCXN1YiAgICAlZWF4LCVlZHgKICAgIDY2MGY6CTQxIDNiIDk0IDI0 IDg0IDAwIDAwIAljbXAgICAgMHg4NCglcjEyKSwlZWR4CiAgICA2NjE2OgkwMCAKICAgIDY2MTc6 CTQxIDg5IDk0IDI0IDgwIDAwIDAwIAltb3YgICAgJWVkeCwweDgwKCVyMTIpCiAgICA2NjFlOgkw MCAKICAgIDY2MWY6CTBmIDgyIDU0IDA1IDAwIDAwICAgIAlqYiAgICAgNmI3OSA8dnhsYW5feG1p dCsweGM3OT4KICAgIDY2MjU6CTg5IGMwICAgICAgICAgICAgICAgIAltb3YgICAgJWVheCwlZWF4 CglyZXR1cm4gc2tiLT5pbm5lcl90cmFuc3BvcnRfaGVhZGVyIC0gc2tiLT5pbm5lcl9uZXR3b3Jr X2hlYWRlcjsKfQoKc3RhdGljIGlubGluZSBpbnQgc2tiX25ldHdvcmtfb2Zmc2V0KGNvbnN0IHN0 cnVjdCBza19idWZmICpza2IpCnsKCXJldHVybiBza2JfbmV0d29ya19oZWFkZXIoc2tiKSAtIHNr Yi0+ZGF0YTsKICAgIDY2Mjc6CTQxIDgwIGE0IDI0IDkwIDAwIDAwIAlhbmRiICAgJDB4ZjgsMHg5 MCglcjEyKQogICAgNjYyZToJMDAgZjggCiAgICA2NjMwOgk0YyA4OSBlNyAgICAgICAgICAgICAJ bW92ICAgICVyMTIsJXJkaQp9Cgp1bnNpZ25lZCBjaGFyICpza2JfcHVsbChzdHJ1Y3Qgc2tfYnVm ZiAqc2tiLCB1bnNpZ25lZCBpbnQgbGVuKTsKc3RhdGljIGlubGluZSB1bnNpZ25lZCBjaGFyICpf X3NrYl9wdWxsKHN0cnVjdCBza19idWZmICpza2IsIHVuc2lnbmVkIGludCBsZW4pCnsKCXNrYi0+ bGVuIC09IGxlbjsKICAgIDY2MzM6CTQ4IDAxIGM4ICAgICAgICAgICAgIAlhZGQgICAgJXJjeCwl cmF4CiAgICA2NjM2Ogk0OSA4OSA4NCAyNCBkOCAwMCAwMCAJbW92ICAgICVyYXgsMHhkOCglcjEy KQogICAgNjYzZDoJMDAgCiAgICA2NjNlOgk0MSAwZiBiNiA4NCAyNCA5MSAwMCAJbW92emJsIDB4 OTEoJXIxMiksJWVheAogICAgNjY0NToJMDAgMDAgCiAgICA2NjQ3Ogk4MyBlMCBmOSAgICAgICAg ICAgICAJYW5kICAgICQweGZmZmZmZmY5LCVlYXgKICAgIDY2NGE6CTgzIGM4IDAyICAgICAgICAg ICAgIAlvciAgICAgJDB4MiwlZWF4CiAgICA2NjRkOgk0MSA4OCA4NCAyNCA5MSAwMCAwMCAJbW92 ICAgICVhbCwweDkxKCVyMTIpCiAgICA2NjU0OgkwMCAKCUJVR19PTihza2ItPmxlbiA8IHNrYi0+ ZGF0YV9sZW4pOwoJcmV0dXJuIHNrYi0+ZGF0YSArPSBsZW47CiAgICA2NjU1OgllOCAwMCAwMCAw MCAwMCAgICAgICAJY2FsbHEgIDY2NWEgPHZ4bGFuX3htaXQrMHg3NWE+CgkJCWdvdG8gb3V0OwoK CQlza2JfcmVzZXRfbWFjX2hlYWRlcihyZXBseSk7CgkJX19za2JfcHVsbChyZXBseSwgc2tiX25l dHdvcmtfb2Zmc2V0KHJlcGx5KSk7CgkJcmVwbHktPmlwX3N1bW1lZCA9IENIRUNLU1VNX1VOTkVD RVNTQVJZOwoJCXJlcGx5LT5wa3RfdHlwZSA9IFBBQ0tFVF9IT1NUOwogICAgNjY1YToJODMgZTgg MDEgICAgICAgICAgICAgCXN1YiAgICAkMHgxLCVlYXgKICAgIDY2NWQ6CTc1IDA4ICAgICAgICAg ICAgICAgIAlqbmUgICAgNjY2NyA8dnhsYW5feG1pdCsweDc2Nz4KICAgIDY2NWY6CTQ5IDgzIDg2 IDYwIDAxIDAwIDAwIAlhZGRxICAgJDB4MSwweDE2MCglcjE0KQogICAgNjY2NjoJMDEgCiAgICA2 NjY3Ogk0OCA4OSBkZiAgICAgICAgICAgICAJbW92ICAgICVyYngsJXJkaQogICAgNjY2YToJZTgg MDAgMDAgMDAgMDAgICAgICAgCWNhbGxxICA2NjZmIDx2eGxhbl94bWl0KzB4NzZmPgoJCWlmIChy ZXBseSA9PSBOVUxMKQoJCQlnb3RvIG91dDsKCgkJc2tiX3Jlc2V0X21hY19oZWFkZXIocmVwbHkp OwoJCV9fc2tiX3B1bGwocmVwbHksIHNrYl9uZXR3b3JrX29mZnNldChyZXBseSkpOwoJCXJlcGx5 LT5pcF9zdW1tZWQgPSBDSEVDS1NVTV9VTk5FQ0VTU0FSWTsKICAgIDY2NmY6CWU5IGY5IGY5IGZm IGZmICAgICAgIAlqbXBxICAgNjA2ZCA8dnhsYW5feG1pdCsweDE2ZD4KICAgIDY2NzQ6CThkIDQ0 IDAwIDEwICAgICAgICAgIAlsZWEgICAgMHgxMCglcmF4LCVyYXgsMSksJWVheAogICAgNjY3ODoJ ZTkgMTUgZmUgZmYgZmYgICAgICAgCWptcHEgICA2NDkyIDx2eGxhbl94bWl0KzB4NTkyPgogICAg NjY3ZDoJOGIgOGIgODAgMDAgMDAgMDAgICAgCW1vdiAgICAweDgwKCVyYngpLCVlY3gKICAgIDY2 ODM6CTg5IGM4ICAgICAgICAgICAgICAgIAltb3YgICAgJWVjeCwlZWF4CgkJcmVwbHktPnBrdF90 eXBlID0gUEFDS0VUX0hPU1Q7CgoJCWlmIChuZXRpZl9yeF9uaShyZXBseSkgPT0gTkVUX1JYX0RS T1ApCiAgICA2Njg1OgkyYiA4MyA4NCAwMCAwMCAwMCAgICAJc3ViICAgIDB4ODQoJXJieCksJWVh eAogICAgNjY4YjoJODMgZjggMTMgICAgICAgICAgICAgCWNtcCAgICAkMHgxMywlZWF4CiAgICA2 NjhlOgkwZiA4NiAwYSAwMiAwMCAwMCAgICAJamJlICAgIDY4OWUgPHZ4bGFuX3htaXQrMHg5OWU+ CgoJCWlmIChyZXBseSA9PSBOVUxMKQoJCQlnb3RvIG91dDsKCgkJaWYgKG5ldGlmX3J4X25pKHJl cGx5KSA9PSBORVRfUlhfRFJPUCkKCQkJZGV2LT5zdGF0cy5yeF9kcm9wcGVkKys7CiAgICA2Njk0 Ogk0NCAwZiBiNyA4MyBjNCAwMCAwMCAJbW92endsIDB4YzQoJXJieCksJXI4ZAogICAgNjY5YjoJ MDAgCgoJCXZ4bGFuX2lwX21pc3MoZGV2LCAmaXBhKTsKCX0KCm91dDoKCWNvbnN1bWVfc2tiKHNr Yik7CiAgICA2NjljOgk0OCBjNyBjNyAwMCAwMCAwMCAwMCAJbW92ICAgICQweDAsJXJkaQoJCQkJ c3RydWN0IG5kX21zZyAqbXNnOwoKCQkJCW1zZyA9IChzdHJ1Y3QgbmRfbXNnICopc2tiX3RyYW5z cG9ydF9oZWFkZXIoc2tiKTsKCQkJCWlmIChtc2ctPmljbXBoLmljbXA2X2NvZGUgPT0gMCAmJgoJ CQkJICAgIG1zZy0+aWNtcGguaWNtcDZfdHlwZSA9PSBORElTQ19ORUlHSEJPVVJfU09MSUNJVEFU SU9OKQoJCQkJCXJldHVybiBuZWlnaF9yZWR1Y2UoZGV2LCBza2IpOwogICAgNjZhMzoJNDkgMDEg ZDAgICAgICAgICAgICAgCWFkZCAgICAlcmR4LCVyOAojZW5kaWYKCWRlZmF1bHQ6CgkJLyogQVJQ IGhlYWRlciwgcGx1cyAyIGRldmljZSBhZGRyZXNzZXMsIHBsdXMgMiBJUCBhZGRyZXNzZXMuICov CgkJcmV0dXJuIHNpemVvZihzdHJ1Y3QgYXJwaGRyKSArIChkZXYtPmFkZHJfbGVuICsgc2l6ZW9m KHUzMikpICogMjsKICAgIDY2YTY6CTRjIDg5IGYyICAgICAgICAgICAgIAltb3YgICAgJXIxNCwl cmR4CiAgICA2NmE5Ogk0OSA4ZCA3MCAxMCAgICAgICAgICAJbGVhICAgIDB4MTAoJXI4KSwlcnNp CiAgICA2NmFkOgk0YyA4OSA0NCAyNCAyMCAgICAgICAJbW92ICAgICVyOCwweDIwKCVyc3ApCiAg ICA2NmIyOgllOCAwMCAwMCAwMCAwMCAgICAgICAJY2FsbHEgIDY2YjcgPHZ4bGFuX3htaXQrMHg3 Yjc+CglyZXR1cm4gc2tiLT5kYXRhX2xlbjsKfQoKc3RhdGljIGlubGluZSB1bnNpZ25lZCBpbnQg c2tiX2hlYWRsZW4oY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYikKewoJcmV0dXJuIHNrYi0+bGVu IC0gc2tiLT5kYXRhX2xlbjsKICAgIDY2Yjc6CTQ4IDg1IGMwICAgICAgICAgICAgIAl0ZXN0ICAg JXJheCwlcmF4CiAgICA2NmJhOgk0YyA4YiA0NCAyNCAyMCAgICAgICAJbW92ICAgIDB4MjAoJXJz cCksJXI4CglyZXR1cm4gdW5saWtlbHkobGVuID4gc2tiLT5sZW4pID8gTlVMTCA6IF9fcHNrYl9w dWxsKHNrYiwgbGVuKTsKfQoKc3RhdGljIGlubGluZSBpbnQgcHNrYl9tYXlfcHVsbChzdHJ1Y3Qg c2tfYnVmZiAqc2tiLCB1bnNpZ25lZCBpbnQgbGVuKQp7CglpZiAobGlrZWx5KGxlbiA8PSBza2Jf aGVhZGxlbihza2IpKSkKICAgIDY2YmY6CTBmIDg1IGE4IGZhIGZmIGZmICAgIAlqbmUgICAgNjE2 ZCA8dnhsYW5feG1pdCsweDI2ZD4KCXNrYi0+dHJhbnNwb3J0X2hlYWRlciArPSBvZmZzZXQ7Cn0K CnN0YXRpYyBpbmxpbmUgdW5zaWduZWQgY2hhciAqc2tiX25ldHdvcmtfaGVhZGVyKGNvbnN0IHN0 cnVjdCBza19idWZmICpza2IpCnsKCXJldHVybiBza2ItPmhlYWQgKyBza2ItPm5ldHdvcmtfaGVh ZGVyOwogICAgNjZjNToJNDEgZjYgODYgZDggMDggMDAgMDAgCXRlc3RiICAkMHgxMCwweDhkOCgl cjE0KQogICAgNjZjYzoJMTAgCgkJc3RydWN0IGlwaGRyICpwaXA7CgoJCWlmICghcHNrYl9tYXlf cHVsbChza2IsIHNpemVvZihzdHJ1Y3QgaXBoZHIpKSkKCQkJcmV0dXJuIGZhbHNlOwoJCXBpcCA9 IGlwX2hkcihza2IpOwoJCW4gPSBuZWlnaF9sb29rdXAoJmFycF90YmwsICZwaXAtPmRhZGRyLCBk ZXYpOwogICAgNjZjZDoJNzQgMjggICAgICAgICAgICAgICAgCWplICAgICA2NmY3IDx2eGxhbl94 bWl0KzB4N2Y3PgogICAgNjZjZjoJNDggOGQgN2MgMjQgMzAgICAgICAgCWxlYSAgICAweDMwKCVy c3ApLCVyZGkKICAgIDY2ZDQ6CWI5IDA3IDAwIDAwIDAwICAgICAgIAltb3YgICAgJDB4NywlZWN4 CiAgICA2NmQ5Ogk0OCA4ZCA3NCAyNCAzMCAgICAgICAJbGVhICAgIDB4MzAoJXJzcCksJXJzaQog ICAgNjZkZToJZjMgYWIgICAgICAgICAgICAgICAgCXJlcCBzdG9zICVlYXgsJWVzOiglcmRpKQog ICAgNjZlMDoJNjYgYzcgNDQgMjQgMzAgMDIgMDAgCW1vdncgICAkMHgyLDB4MzAoJXJzcCkKCQlp ZiAoIW4gJiYgKHZ4bGFuLT5mbGFncyAmIFZYTEFOX0ZfTDNNSVNTKSkgewogICAgNjZlNzoJNGMg ODkgZjcgICAgICAgICAgICAgCW1vdiAgICAlcjE0LCVyZGkKICAgIDY2ZWE6CTQxIDhiIDQwIDEw ICAgICAgICAgIAltb3YgICAgMHgxMCglcjgpLCVlYXgKICAgIDY2ZWU6CTg5IDQ0IDI0IDM0ICAg ICAgICAgIAltb3YgICAgJWVheCwweDM0KCVyc3ApCiAgICA2NmYyOgllOCA1OSBiOSBmZiBmZiAg ICAgICAJY2FsbHEgIDIwNTAgPHZ4bGFuX2lwX21pc3M+CiAgICA2NmY3OgljNiA0NCAyNCAxOCAw MCAgICAgICAJbW92YiAgICQweDAsMHgxOCglcnNwKQogICAgNjZmYzoJZTkgZTMgZjggZmYgZmYg ICAgICAgCWptcHEgICA1ZmU0IDx2eGxhbl94bWl0KzB4ZTQ+CgkJCXVuaW9uIHZ4bGFuX2FkZHIg aXBhID0gewogICAgNjcwMToJNDEgZjYgODYgZDggMDggMDAgMDAgCXRlc3RiICAkMHg4LDB4OGQ4 KCVyMTQpCiAgICA2NzA4OgkwOCAKCQkJCS5zaW4uc2luX2FkZHIuc19hZGRyID0gcGlwLT5kYWRk ciwKCQkJCS5zaW4uc2luX2ZhbWlseSA9IEFGX0lORVQsCgkJCX07CgoJCQl2eGxhbl9pcF9taXNz KGRldiwgJmlwYSk7CiAgICA2NzA5Ogk3NCAxMSAgICAgICAgICAgICAgICAJamUgICAgIDY3MWMg PHZ4bGFuX3htaXQrMHg4MWM+CiAgICA2NzBiOgk0MSBmNiAwNyAwMSAgICAgICAgICAJdGVzdGIg ICQweDEsKCVyMTUpCgkJaWYgKCFwc2tiX21heV9wdWxsKHNrYiwgc2l6ZW9mKHN0cnVjdCBpcGhk cikpKQoJCQlyZXR1cm4gZmFsc2U7CgkJcGlwID0gaXBfaGRyKHNrYik7CgkJbiA9IG5laWdoX2xv b2t1cCgmYXJwX3RibCwgJnBpcC0+ZGFkZHIsIGRldik7CgkJaWYgKCFuICYmICh2eGxhbi0+Zmxh Z3MgJiBWWExBTl9GX0wzTUlTUykpIHsKCQkJdW5pb24gdnhsYW5fYWRkciBpcGEgPSB7CiAgICA2 NzBmOgk3NSAwYiAgICAgICAgICAgICAgICAJam5lICAgIDY3MWMgPHZ4bGFuX3htaXQrMHg4MWM+ CiAgICA2NzExOgk0YyA4OSBmZSAgICAgICAgICAgICAJbW92ICAgICVyMTUsJXJzaQogICAgNjcx NDoJNGMgODkgZWYgICAgICAgICAgICAgCW1vdiAgICAlcjEzLCVyZGkKCQkJCS5zaW4uc2luX2Fk ZHIuc19hZGRyID0gcGlwLT5kYWRkciwKCQkJCS5zaW4uc2luX2ZhbWlseSA9IEFGX0lORVQsCgkJ CX07CgoJCQl2eGxhbl9pcF9taXNzKGRldiwgJmlwYSk7CiAgICA2NzE3OgllOCBlNCBiOSBmZiBm ZiAgICAgICAJY2FsbHEgIDIxMDAgPHZ4bGFuX2ZkYl9taXNzPgoJCWlmICghcHNrYl9tYXlfcHVs bChza2IsIHNpemVvZihzdHJ1Y3QgaXBoZHIpKSkKCQkJcmV0dXJuIGZhbHNlOwoJCXBpcCA9IGlw X2hkcihza2IpOwoJCW4gPSBuZWlnaF9sb29rdXAoJmFycF90YmwsICZwaXAtPmRhZGRyLCBkZXYp OwoJCWlmICghbiAmJiAodnhsYW4tPmZsYWdzICYgVlhMQU5fRl9MM01JU1MpKSB7CgkJCXVuaW9u IHZ4bGFuX2FkZHIgaXBhID0gewogICAgNjcxYzoJNDkgODMgODYgNjggMDEgMDAgMDAgCWFkZHEg ICAkMHgxLDB4MTY4KCVyMTQpCiAgICA2NzIzOgkwMSAKCQkJCS5zaW4uc2luX2FkZHIuc19hZGRy ID0gcGlwLT5kYWRkciwKCQkJCS5zaW4uc2luX2ZhbWlseSA9IEFGX0lORVQsCgkJCX07CgoJCQl2 eGxhbl9pcF9taXNzKGRldiwgJmlwYSk7CiAgICA2NzI0OgllOSAzYyBmOSBmZiBmZiAgICAgICAJ am1wcSAgIDYwNjUgPHZ4bGFuX3htaXQrMHgxNjU+CiAgICA2NzI5Ogk4MyBmYSAzZiAgICAgICAg ICAgICAJY21wICAgICQweDNmLCVlZHgKICAgIDY3MmM6CTBmIDg2IDczIGY4IGZmIGZmICAgIAlq YmUgICAgNWZhNSA8dnhsYW5feG1pdCsweGE1PgoJfQoKCWlmIChmID09IE5VTEwpIHsKCQlmID0g dnhsYW5fZmluZF9tYWModnhsYW4sIGFsbF96ZXJvc19tYWMpOwoJCWlmIChmID09IE5VTEwpIHsK CQkJaWYgKCh2eGxhbi0+ZmxhZ3MgJiBWWExBTl9GX0wyTUlTUykgJiYKICAgIDY3MzI6CWJlIDQw IDAwIDAwIDAwICAgICAgIAltb3YgICAgJDB4NDAsJWVzaQogICAgNjczNzoJNDggODkgZGYgICAg ICAgICAgICAgCW1vdiAgICAlcmJ4LCVyZGkKICAgIDY3M2E6CTI5IGM2ICAgICAgICAgICAgICAg IAlzdWIgICAgJWVheCwlZXNpCiAgICA2NzNjOgllOCAwMCAwMCAwMCAwMCAgICAgICAJY2FsbHEg IDY3NDEgPHZ4bGFuX3htaXQrMHg4NDE+CgkJCSAgICAhaXNfbXVsdGljYXN0X2V0aGVyX2FkZHIo ZXRoLT5oX2Rlc3QpKQoJCQkJdnhsYW5fZmRiX21pc3ModnhsYW4sIGV0aC0+aF9kZXN0KTsKICAg IDY3NDE6CTQ4IDg1IGMwICAgICAgICAgICAgIAl0ZXN0ICAgJXJheCwlcmF4CiAgICA2NzQ0Ogk0 OCA4YiA4YiBkMCAwMCAwMCAwMCAJbW92ICAgIDB4ZDAoJXJieCksJXJjeAogICAgNjc0YjoJMGYg ODQgNTQgZjggZmYgZmYgICAgCWplICAgICA1ZmE1IDx2eGxhbl94bWl0KzB4YTU+CgoJCQlkZXYt PnN0YXRzLnR4X2Ryb3BwZWQrKzsKICAgIDY3NTE6CWU5IGRkIGZhIGZmIGZmICAgICAgIAlqbXBx ICAgNjIzMyA8dnhsYW5feG1pdCsweDMzMz4KICAgIDY3NTY6CTM5IGM2ICAgICAgICAgICAgICAg IAljbXAgICAgJWVheCwlZXNpCiAgICA2NzU4Ogk3MiAxNSAgICAgICAgICAgICAgICAJamIgICAg IDY3NmYgPHZ4bGFuX3htaXQrMHg4NmY+CgpzdGF0aWMgaW5saW5lIGludCBwc2tiX21heV9wdWxs KHN0cnVjdCBza19idWZmICpza2IsIHVuc2lnbmVkIGludCBsZW4pCnsKCWlmIChsaWtlbHkobGVu IDw9IHNrYl9oZWFkbGVuKHNrYikpKQoJCXJldHVybiAxOwoJaWYgKHVubGlrZWx5KGxlbiA+IHNr Yi0+bGVuKSkKICAgIDY3NWE6CTI5IGQwICAgICAgICAgICAgICAgIAlzdWIgICAgJWVkeCwlZWF4 CiAgICA2NzVjOgk0OCA4OSBkZiAgICAgICAgICAgICAJbW92ICAgICVyYngsJXJkaQogICAgNjc1 ZjoJODkgYzYgICAgICAgICAgICAgICAgCW1vdiAgICAlZWF4LCVlc2kKICAgIDY3NjE6CWU4IDAw IDAwIDAwIDAwICAgICAgIAljYWxscSAgNjc2NiA8dnhsYW5feG1pdCsweDg2Nj4KCQlyZXR1cm4g MDsKCXJldHVybiBfX3Bza2JfcHVsbF90YWlsKHNrYiwgbGVuIC0gc2tiX2hlYWRsZW4oc2tiKSkg IT0gTlVMTDsKICAgIDY3NjY6CTQ4IDg1IGMwICAgICAgICAgICAgIAl0ZXN0ICAgJXJheCwlcmF4 CiAgICA2NzY5OgkwZiA4NSAwYSAwNSAwMCAwMCAgICAJam5lICAgIDZjNzkgPHZ4bGFuX3htaXQr MHhkNzk+CiAgICA2NzZmOgk0OSA4MyA4NiA2OCAwMSAwMCAwMCAJYWRkcSAgICQweDEsMHgxNjgo JXIxNCkKICAgIDY3NzY6CTAxIAoJaWYgKHZ4bGFuLT5mbGFncyAmIFZYTEFOX0ZfUFJPWFkpIHsK CQlldGggPSBldGhfaGRyKHNrYik7CgkJaWYgKG50b2hzKGV0aC0+aF9wcm90bykgPT0gRVRIX1Bf QVJQKQoJCQlyZXR1cm4gYXJwX3JlZHVjZShkZXYsIHNrYik7CiNpZiBJU19FTkFCTEVEKENPTkZJ R19JUFY2KQoJCWVsc2UgaWYgKG50b2hzKGV0aC0+aF9wcm90bykgPT0gRVRIX1BfSVBWNiAmJgog ICAgNjc3NzoJZTkgZWIgZmUgZmYgZmYgICAgICAgCWptcHEgICA2NjY3IDx2eGxhbl94bWl0KzB4 NzY3PgogICAgNjc3YzoJNDggODkgYzcgICAgICAgICAgICAgCW1vdiAgICAlcmF4LCVyZGkKICAg IDY3N2Y6CWU4IDAwIDAwIDAwIDAwICAgICAgIAljYWxscSAgNjc4NCA8dnhsYW5feG1pdCsweDg4 ND4KICAgIDY3ODQ6CWU5IDI5IGZhIGZmIGZmICAgICAgIAlqbXBxICAgNjFiMiA8dnhsYW5feG1p dCsweDJiMj4KCnN0YXRpYyBpbmxpbmUgaW50IHBza2JfbWF5X3B1bGwoc3RydWN0IHNrX2J1ZmYg KnNrYiwgdW5zaWduZWQgaW50IGxlbikKewoJaWYgKGxpa2VseShsZW4gPD0gc2tiX2hlYWRsZW4o c2tiKSkpCgkJcmV0dXJuIDE7CglpZiAodW5saWtlbHkobGVuID4gc2tiLT5sZW4pKQogICAgNjc4 OToJNDEgMGYgYjYgOTYgNzUgMDIgMDAgCW1vdnpibCAweDI3NSglcjE0KSwlZWR4CiAgICA2Nzkw OgkwMCAKCQlyZXR1cm4gMDsKCXJldHVybiBfX3Bza2JfcHVsbF90YWlsKHNrYiwgbGVuIC0gc2ti X2hlYWRsZW4oc2tiKSkgIT0gTlVMTDsKICAgIDY3OTE6CTRjIDhkIDQ2IDA2ICAgICAgICAgIAls ZWEgICAgMHg2KCVyc2kpLCVyOAogICAgNjc5NToJODMgZmEgMDggICAgICAgICAgICAgCWNtcCAg ICAkMHg4LCVlZHgKCXN0cnVjdCBuZWlnaGJvdXIgKm47CgoJaWYgKGRldi0+ZmxhZ3MgJiBJRkZf Tk9BUlApCgkJZ290byBvdXQ7CgoJaWYgKCFwc2tiX21heV9wdWxsKHNrYiwgYXJwX2hkcl9sZW4o ZGV2KSkpIHsKICAgIDY3OTg6CTBmIDgzIGEzIDAwIDAwIDAwICAgIAlqYWUgICAgNjg0MSA8dnhs YW5feG1pdCsweDk0MT4KICAgIDY3OWU6CWY2IGMyIDA0ICAgICAgICAgICAgIAl0ZXN0ICAgJDB4 NCwlZGwKCQlkZXYtPnN0YXRzLnR4X2Ryb3BwZWQrKzsKICAgIDY3YTE6CTBmIDg1IGQ0IDAzIDAw IDAwICAgIAlqbmUgICAgNmI3YiA8dnhsYW5feG1pdCsweGM3Yj4KICAgIDY3YTc6CTg1IGQyICAg ICAgICAgICAgICAgIAl0ZXN0ICAgJWVkeCwlZWR4CiAgICA2N2E5Ogk3NCAyNSAgICAgICAgICAg ICAgICAJamUgICAgIDY3ZDAgPHZ4bGFuX3htaXQrMHg4ZDA+CiAgICA2N2FiOgkwZiBiNiAwZSAg ICAgICAgICAgICAJbW92emJsICglcnNpKSwlZWN4CiAqLwoKc3RhdGljIGlubGluZSB2b2lkIG5l aWdoX3JlbGVhc2Uoc3RydWN0IG5laWdoYm91ciAqbmVpZ2gpCnsKCWlmIChhdG9taWNfZGVjX2Fu ZF90ZXN0KCZuZWlnaC0+cmVmY250KSkKCQluZWlnaF9kZXN0cm95KG5laWdoKTsKICAgIDY3YWU6 CWY2IGMyIDAyICAgICAgICAgICAgIAl0ZXN0ICAgJDB4MiwlZGwKICAgIDY3YjE6CTg4IDRlIDA2 ICAgICAgICAgICAgIAltb3YgICAgJWNsLDB4NiglcnNpKQogICAgNjdiNDoJMGYgODUgMTUgMDQg MDAgMDAgICAgCWpuZSAgICA2YmNmIDx2eGxhbl94bWl0KzB4Y2NmPgoJaWYgKG4pIHsKCQlib29s IGRpZmY7CgoJCWRpZmYgPSAhZXRoZXJfYWRkcl9lcXVhbChldGhfaGRyKHNrYiktPmhfZGVzdCwg bi0+aGEpOwoJCWlmIChkaWZmKSB7CgkJCW1lbWNweShldGhfaGRyKHNrYiktPmhfc291cmNlLCBl dGhfaGRyKHNrYiktPmhfZGVzdCwKICAgIDY3YmE6CTBmIGI3IGJiIGM2IDAwIDAwIDAwIAltb3Z6 d2wgMHhjNiglcmJ4KSwlZWRpCiAgICA2N2MxOgk0MSAwZiBiNiA5NiA3NSAwMiAwMCAJbW92emJs IDB4Mjc1KCVyMTQpLCVlZHgKICAgIDY3Yzg6CTAwIAogICAgNjdjOToJNDggOGIgOGIgZDAgMDAg MDAgMDAgCW1vdiAgICAweGQwKCVyYngpLCVyY3gKICAgIDY3ZDA6CTQ4IDAxIGY5ICAgICAgICAg ICAgIAlhZGQgICAgJXJkaSwlcmN4CiAgICA2N2QzOgk4MyBmYSAwOCAgICAgICAgICAgICAJY21w ICAgICQweDgsJWVkeAogICAgNjdkNjoJNDggOGQgYjAgYjggMDAgMDAgMDAgCWxlYSAgICAweGI4 KCVyYXgpLCVyc2kKICAgIDY3ZGQ6CTczIDMxICAgICAgICAgICAgICAgIAlqYWUgICAgNjgxMCA8 dnhsYW5feG1pdCsweDkxMD4KICAgIDY3ZGY6CWY2IGMyIDA0ICAgICAgICAgICAgIAl0ZXN0ICAg JDB4NCwlZGwKICAgIDY3ZTI6CTBmIDg1IGJkIDAzIDAwIDAwICAgIAlqbmUgICAgNmJhNSA8dnhs YW5feG1pdCsweGNhNT4KICAgIDY3ZTg6CTg1IGQyICAgICAgICAgICAgICAgIAl0ZXN0ICAgJWVk eCwlZWR4CiAgICA2N2VhOgkwZiA4NCBiOCBmOSBmZiBmZiAgICAJamUgICAgIDYxYTggPHZ4bGFu X3htaXQrMHgyYTg+CiAgICA2N2YwOgkwZiBiNiAzZSAgICAgICAgICAgICAJbW92emJsICglcnNp KSwlZWRpCiAgICA2N2YzOglmNiBjMiAwMiAgICAgICAgICAgICAJdGVzdCAgICQweDIsJWRsCiAg ICA2N2Y2Ogk0MCA4OCAzOSAgICAgICAgICAgICAJbW92ICAgICVkaWwsKCVyY3gpCiAgICA2N2Y5 OgkwZiA4NCBhOSBmOSBmZiBmZiAgICAJamUgICAgIDYxYTggPHZ4bGFuX3htaXQrMHgyYTg+CiAg ICA2N2ZmOgk4OSBkMiAgICAgICAgICAgICAgICAJbW92ICAgICVlZHgsJWVkeAoJCQkJZGV2LT5h ZGRyX2xlbik7CgkJCW1lbWNweShldGhfaGRyKHNrYiktPmhfZGVzdCwgbi0+aGEsIGRldi0+YWRk cl9sZW4pOwogICAgNjgwMToJMGYgYjcgNzQgMTYgZmUgICAgICAgCW1vdnp3bCAtMHgyKCVyc2ks JXJkeCwxKSwlZXNpCiAgICA2ODA2Ogk2NiA4OSA3NCAxMSBmZSAgICAgICAJbW92ICAgICVzaSwt MHgyKCVyY3gsJXJkeCwxKQogICAgNjgwYjoJZTkgOTggZjkgZmYgZmYgICAgICAgCWptcHEgICA2 MWE4IDx2eGxhbl94bWl0KzB4MmE4PgogICAgNjgxMDoJNDggOGIgYjggYjggMDAgMDAgMDAgCW1v diAgICAweGI4KCVyYXgpLCVyZGkKICAgIDY4MTc6CTQ4IDg5IDM5ICAgICAgICAgICAgIAltb3Yg ICAgJXJkaSwoJXJjeCkKICAgIDY4MWE6CTg5IGQ3ICAgICAgICAgICAgICAgIAltb3YgICAgJWVk eCwlZWRpCiAgICA2ODFjOgk0YyA4YiA0NCAzZSBmOCAgICAgICAJbW92ICAgIC0weDgoJXJzaSwl cmRpLDEpLCVyOAogICAgNjgyMToJNGMgODkgNDQgMzkgZjggICAgICAgCW1vdiAgICAlcjgsLTB4 OCglcmN4LCVyZGksMSkKICAgIDY4MjY6CTQ4IDhkIDc5IDA4ICAgICAgICAgIAlsZWEgICAgMHg4 KCVyY3gpLCVyZGkKICAgIDY4MmE6CTQ4IDgzIGU3IGY4ICAgICAgICAgIAlhbmQgICAgJDB4ZmZm ZmZmZmZmZmZmZmZmOCwlcmRpCiAgICA2ODJlOgk0OCAyOSBmOSAgICAgICAgICAgICAJc3ViICAg ICVyZGksJXJjeAogICAgNjgzMToJNDggMjkgY2UgICAgICAgICAgICAgCXN1YiAgICAlcmN4LCVy c2kKICAgIDY4MzQ6CTAxIGQxICAgICAgICAgICAgICAgIAlhZGQgICAgJWVkeCwlZWN4CiAgICA2 ODM2OgljMSBlOSAwMyAgICAgICAgICAgICAJc2hyICAgICQweDMsJWVjeAogICAgNjgzOToJZjMg NDggYTUgICAgICAgICAgICAgCXJlcCBtb3ZzcSAlZHM6KCVyc2kpLCVlczooJXJkaSkKICAgIDY4 M2M6CWU5IDY3IGY5IGZmIGZmICAgICAgIAlqbXBxICAgNjFhOCA8dnhsYW5feG1pdCsweDJhOD4K ICAgIDY4NDE6CTQ4IDhiIDBlICAgICAgICAgICAgIAltb3YgICAgKCVyc2kpLCVyY3gKICAgIDY4 NDQ6CTQ4IDg5IDRlIDA2ICAgICAgICAgIAltb3YgICAgJXJjeCwweDYoJXJzaSkKICAgIDY4NDg6 CTg5IGQxICAgICAgICAgICAgICAgIAltb3YgICAgJWVkeCwlZWN4CiAgICA2ODRhOgk0OCA4YiA3 YyAwZSBmOCAgICAgICAJbW92ICAgIC0weDgoJXJzaSwlcmN4LDEpLCVyZGkKICAgIDY4NGY6CTQ5 IDg5IDdjIDA4IGY4ICAgICAgIAltb3YgICAgJXJkaSwtMHg4KCVyOCwlcmN4LDEpCiAgICA2ODU0 Ogk0OCA4ZCA3ZSAwZSAgICAgICAgICAJbGVhICAgIDB4ZSglcnNpKSwlcmRpCiAgICA2ODU4Ogk0 OCA4MyBlNyBmOCAgICAgICAgICAJYW5kICAgICQweGZmZmZmZmZmZmZmZmZmZjgsJXJkaQogICAg Njg1YzoJNDkgMjkgZjggICAgICAgICAgICAgCXN1YiAgICAlcmRpLCVyOAogICAgNjg1ZjoJNDIg OGQgMGMgMDIgICAgICAgICAgCWxlYSAgICAoJXJkeCwlcjgsMSksJWVjeAogICAgNjg2MzoJNGMg MjkgYzYgICAgICAgICAgICAgCXN1YiAgICAlcjgsJXJzaQogICAgNjg2NjoJYzEgZTkgMDMgICAg ICAgICAgICAgCXNociAgICAkMHgzLCVlY3gKICAgIDY4Njk6CWYzIDQ4IGE1ICAgICAgICAgICAg IAlyZXAgbW92c3EgJWRzOiglcnNpKSwlZXM6KCVyZGkpCiAgICA2ODZjOgllOSA0OSBmZiBmZiBm ZiAgICAgICAJam1wcSAgIDY3YmEgPHZ4bGFuX3htaXQrMHg4YmE+CglpZiAobikgewoJCWJvb2wg ZGlmZjsKCgkJZGlmZiA9ICFldGhlcl9hZGRyX2VxdWFsKGV0aF9oZHIoc2tiKS0+aF9kZXN0LCBu LT5oYSk7CgkJaWYgKGRpZmYpIHsKCQkJbWVtY3B5KGV0aF9oZHIoc2tiKS0+aF9zb3VyY2UsIGV0 aF9oZHIoc2tiKS0+aF9kZXN0LAogICAgNjg3MToJODMgZjkgMjcgICAgICAgICAgICAgCWNtcCAg ICAkMHgyNywlZWN4CiAgICA2ODc0OgkwZiA4NiA3ZCBmZSBmZiBmZiAgICAJamJlICAgIDY2Zjcg PHZ4bGFuX3htaXQrMHg3Zjc+CiAgICA2ODdhOgliZSAyOCAwMCAwMCAwMCAgICAgICAJbW92ICAg ICQweDI4LCVlc2kKICAgIDY4N2Y6CTQ4IDg5IGRmICAgICAgICAgICAgIAltb3YgICAgJXJieCwl cmRpCiAgICA2ODgyOgkyOSBjNiAgICAgICAgICAgICAgICAJc3ViICAgICVlYXgsJWVzaQogICAg Njg4NDoJZTggMDAgMDAgMDAgMDAgICAgICAgCWNhbGxxICA2ODg5IDx2eGxhbl94bWl0KzB4OTg5 PgogICAgNjg4OToJNDggODUgYzAgICAgICAgICAgICAgCXRlc3QgICAlcmF4LCVyYXgKICAgIDY4 OGM6CTBmIDg0IDY1IGZlIGZmIGZmICAgIAlqZSAgICAgNjZmNyA8dnhsYW5feG1pdCsweDdmNz4K ICAgIDY4OTI6CTQ4IDhiIDkzIGQwIDAwIDAwIDAwIAltb3YgICAgMHhkMCglcmJ4KSwlcmR4CiAg ICA2ODk5OgllOSA5YSBmOCBmZiBmZiAgICAgICAJam1wcSAgIDYxMzggPHZ4bGFuX3htaXQrMHgy Mzg+CiAgICA2ODllOgk4MyBmOSAxMyAgICAgICAgICAgICAJY21wICAgICQweDEzLCVlY3gKCnN0 YXRpYyBpbmxpbmUgaW50IHBza2JfbWF5X3B1bGwoc3RydWN0IHNrX2J1ZmYgKnNrYiwgdW5zaWdu ZWQgaW50IGxlbikKewoJaWYgKGxpa2VseShsZW4gPD0gc2tiX2hlYWRsZW4oc2tiKSkpCgkJcmV0 dXJuIDE7CglpZiAodW5saWtlbHkobGVuID4gc2tiLT5sZW4pKQogICAgNjhhMToJMGYgODYgNTAg ZmUgZmYgZmYgICAgCWpiZSAgICA2NmY3IDx2eGxhbl94bWl0KzB4N2Y3PgogICAgNjhhNzoJYmUg MTQgMDAgMDAgMDAgICAgICAgCW1vdiAgICAkMHgxNCwlZXNpCgkJcmV0dXJuIDA7CglyZXR1cm4g X19wc2tiX3B1bGxfdGFpbChza2IsIGxlbiAtIHNrYl9oZWFkbGVuKHNrYikpICE9IE5VTEw7CiAg ICA2OGFjOgk0OCA4OSBkZiAgICAgICAgICAgICAJbW92ICAgICVyYngsJXJkaQogICAgNjhhZjoJ MjkgYzYgICAgICAgICAgICAgICAgCXN1YiAgICAlZWF4LCVlc2kKICAgIDY4YjE6CWU4IDAwIDAw IDAwIDAwICAgICAgIAljYWxscSAgNjhiNiA8dnhsYW5feG1pdCsweDliNj4KICAgIDY4YjY6CTQ4 IDg1IGMwICAgICAgICAgICAgIAl0ZXN0ICAgJXJheCwlcmF4CiNpZiBJU19FTkFCTEVEKENPTkZJ R19JUFY2KQoJY2FzZSBFVEhfUF9JUFY2OgoJewoJCXN0cnVjdCBpcHY2aGRyICpwaXA2OwoKCQlp ZiAoIXBza2JfbWF5X3B1bGwoc2tiLCBzaXplb2Yoc3RydWN0IGlwdjZoZHIpKSkKICAgIDY4Yjk6 CTBmIDg0IDM4IGZlIGZmIGZmICAgIAlqZSAgICAgNjZmNyA8dnhsYW5feG1pdCsweDdmNz4KICAg IDY4YmY6CTQ4IDhiIDkzIGQwIDAwIDAwIDAwIAltb3YgICAgMHhkMCglcmJ4KSwlcmR4CiAgICA2 OGM2OgllOSBjOSBmZCBmZiBmZiAgICAgICAJam1wcSAgIDY2OTQgPHZ4bGFuX3htaXQrMHg3OTQ+ CiAgICA2OGNiOgljNiA0NCAyNCAxOCAwMSAgICAgICAJbW92YiAgICQweDEsMHgxOCglcnNwKQoK c3RhdGljIGlubGluZSBpbnQgcHNrYl9tYXlfcHVsbChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCB1bnNp Z25lZCBpbnQgbGVuKQp7CglpZiAobGlrZWx5KGxlbiA8PSBza2JfaGVhZGxlbihza2IpKSkKCQly ZXR1cm4gMTsKCWlmICh1bmxpa2VseShsZW4gPiBza2ItPmxlbikpCiAgICA2OGQwOgllOSAxYiBm OSBmZiBmZiAgICAgICAJam1wcSAgIDYxZjAgPHZ4bGFuX3htaXQrMHgyZjA+CiAgICA2OGQ1Ogll OCAwMCAwMCAwMCAwMCAgICAgICAJY2FsbHEgIDY4ZGEgPHZ4bGFuX3htaXQrMHg5ZGE+CgkJcmV0 dXJuIDA7CglyZXR1cm4gX19wc2tiX3B1bGxfdGFpbChza2IsIGxlbiAtIHNrYl9oZWFkbGVuKHNr YikpICE9IE5VTEw7CiAgICA2OGRhOgk0OCA4YiA0OCBlMCAgICAgICAgICAJbW92ICAgIC0weDIw KCVyYXgpLCVyY3gKICAgIDY4ZGU6CTQ4IDBiIDQ4IGU4ICAgICAgICAgIAlvciAgICAgLTB4MTgo JXJheCksJXJjeAogICAgNjhlMjoJMGYgOTQgYzAgICAgICAgICAgICAgCXNldGUgICAlYWwKICAg IDY4ZTU6CWU5IGFhIGZjIGZmIGZmICAgICAgIAlqbXBxICAgNjU5NCA8dnhsYW5feG1pdCsweDY5 ND4KCXN3aXRjaCAobnRvaHMoZXRoX2hkcihza2IpLT5oX3Byb3RvKSkgewoJY2FzZSBFVEhfUF9J UDoKCXsKCQlzdHJ1Y3QgaXBoZHIgKnBpcDsKCgkJaWYgKCFwc2tiX21heV9wdWxsKHNrYiwgc2l6 ZW9mKHN0cnVjdCBpcGhkcikpKQogICAgNjhlYToJNGMgODkgZmYgICAgICAgICAgICAgCW1vdiAg ICAlcjE1LCVyZGkKICAgIDY4ZWQ6CWU4IDRlIDlmIGZmIGZmICAgICAgIAljYWxscSAgODQwIDxu ZWlnaF9yZWxlYXNlPgogICAgNjhmMjoJZTkgNzAgZmQgZmYgZmYgICAgICAgCWptcHEgICA2NjY3 IDx2eGxhbl94bWl0KzB4NzY3PgogICAgNjhmNzoJNDEgZjYgODYgZDggMDggMDAgMDAgCXRlc3Ri ICAkMHgxMCwweDhkOCglcjE0KQogICAgNjhmZToJMTAgCgkJCQkJY29uc3QgdTggKm1hYykKewoJ c3RydWN0IHZ4bGFuX2ZkYiAqZjsKCglmID0gX192eGxhbl9maW5kX21hYyh2eGxhbiwgbWFjKTsK CWlmIChmKQogICAgNjhmZjoJMGYgODQgNjIgZmQgZmYgZmYgICAgCWplICAgICA2NjY3IDx2eGxh bl94bWl0KzB4NzY3PgoJaWYgKGZkc3QpCgkJdnhsYW5feG1pdF9vbmUoc2tiLCBkZXYsIGZkc3Qs IGRpZF9yc2MpOwoJZWxzZQoJCWtmcmVlX3NrYihza2IpOwoJcmV0dXJuIE5FVERFVl9UWF9PSzsK fQogICAgNjkwNToJNDggOGQgN2MgMjQgMzAgICAgICAgCWxlYSAgICAweDMwKCVyc3ApLCVyZGkK c3RhdGljIGlubGluZSBib29sIGlwdjZfYWRkcl9hbnkoY29uc3Qgc3RydWN0IGluNl9hZGRyICph KQp7CiNpZiBkZWZpbmVkKENPTkZJR19IQVZFX0VGRklDSUVOVF9VTkFMSUdORURfQUNDRVNTKSAm JiBCSVRTX1BFUl9MT05HID09IDY0Cgljb25zdCB1bnNpZ25lZCBsb25nICp1bCA9IChjb25zdCB1 bnNpZ25lZCBsb25nICopYTsKCglyZXR1cm4gKHVsWzBdIHwgdWxbMV0pID09IDBVTDsKICAgIDY5 MGE6CTMxIGMwICAgICAgICAgICAgICAgIAl4b3IgICAgJWVheCwlZWF4CiAgICA2OTBjOgliOSAw NyAwMCAwMCAwMCAgICAgICAJbW92ICAgICQweDcsJWVjeAogICAgNjkxMToJNDggOGQgNzQgMjQg MzAgICAgICAgCWxlYSAgICAweDMwKCVyc3ApLCVyc2kKICAgIDY5MTY6CWYzIGFiICAgICAgICAg ICAgICAgIAlyZXAgc3RvcyAlZWF4LCVlczooJXJkaSkKICAgIDY5MTg6CTY2IGM3IDQ0IDI0IDMw IDBhIDAwIAltb3Z3ICAgJDB4YSwweDMwKCVyc3ApCgkJfQoKCQlyZXBseSA9IHZ4bGFuX25hX2Ny ZWF0ZShza2IsIG4sCgkJCQkJISEoZiA/IGYtPmZsYWdzICYgTlRGX1JPVVRFUiA6IDApKTsKCgkJ bmVpZ2hfcmVsZWFzZShuKTsKICAgIDY5MWY6CTRjIDg5IGY3ICAgICAgICAgICAgIAltb3YgICAg JXIxNCwlcmRpCiAgICA2OTIyOgk0OSA4YiA0NCAyNCAwOCAgICAgICAJbW92ICAgIDB4OCglcjEy KSwlcmF4CgkJCWdvdG8gb3V0OwoKCQlpZiAobmV0aWZfcnhfbmkocmVwbHkpID09IE5FVF9SWF9E Uk9QKQoJCQlkZXYtPnN0YXRzLnJ4X2Ryb3BwZWQrKzsKCgl9IGVsc2UgaWYgKHZ4bGFuLT5mbGFn cyAmIFZYTEFOX0ZfTDNNSVNTKSB7CiAgICA2OTI3Ogk0OSA4YiA1NCAyNCAxMCAgICAgICAJbW92 ICAgIDB4MTAoJXIxMiksJXJkeAogICAgNjkyYzoJNDggODkgNDQgMjQgMzggICAgICAgCW1vdiAg ICAlcmF4LDB4MzgoJXJzcCkKICAgIDY5MzE6CTQ4IDg5IDU0IDI0IDQwICAgICAgIAltb3YgICAg JXJkeCwweDQwKCVyc3ApCgkJdW5pb24gdnhsYW5fYWRkciBpcGEgPSB7CiAgICA2OTM2OgllOCAx NSBiNyBmZiBmZiAgICAgICAJY2FsbHEgIDIwNTAgPHZ4bGFuX2lwX21pc3M+CiAgICA2OTNiOgll OSAyNyBmZCBmZiBmZiAgICAgICAJam1wcSAgIDY2NjcgPHZ4bGFuX3htaXQrMHg3Njc+CiAgICA2 OTQwOgk0NSAzMSBjMCAgICAgICAgICAgICAJeG9yICAgICVyOGQsJXI4ZAoJCQkuc2luNi5zaW42 X2FkZHIgPSBtc2ctPnRhcmdldCwKCQkJLnNpbjYuc2luNl9mYW1pbHkgPSBBRl9JTkVUNiwKCQl9 OwoKCQl2eGxhbl9pcF9taXNzKGRldiwgJmlwYSk7CiAgICA2OTQzOgk0YSA4ZCA3YyAwMiAxYSAg ICAgICAJbGVhICAgIDB4MWEoJXJkeCwlcjgsMSksJXJkaQoKCQlpZiAobmV0aWZfcnhfbmkocmVw bHkpID09IE5FVF9SWF9EUk9QKQoJCQlkZXYtPnN0YXRzLnJ4X2Ryb3BwZWQrKzsKCgl9IGVsc2Ug aWYgKHZ4bGFuLT5mbGFncyAmIFZYTEFOX0ZfTDNNSVNTKSB7CgkJdW5pb24gdnhsYW5fYWRkciBp cGEgPSB7CiAgICA2OTQ4OgkwZiBiNyBjOSAgICAgICAgICAgICAJbW92endsICVjeCwlZWN4CiAg ICA2OTRiOgliZSAwZSAwMCAwMCAwMCAgICAgICAJbW92ICAgICQweGUsJWVzaQoJCQkuc2luNi5z aW42X2FkZHIgPSBtc2ctPnRhcmdldCwKCQkJLnNpbjYuc2luNl9mYW1pbHkgPSBBRl9JTkVUNiwK CQl9OwoKCQl2eGxhbl9pcF9taXNzKGRldiwgJmlwYSk7CiAgICA2OTUwOgk0OCA4OSA1NCAyNCAx MCAgICAgICAJbW92ICAgICVyZHgsMHgxMCglcnNwKQoKCQlpZiAobmV0aWZfcnhfbmkocmVwbHkp ID09IE5FVF9SWF9EUk9QKQoJCQlkZXYtPnN0YXRzLnJ4X2Ryb3BwZWQrKzsKCgl9IGVsc2UgaWYg KHZ4bGFuLT5mbGFncyAmIFZYTEFOX0ZfTDNNSVNTKSB7CgkJdW5pb24gdnhsYW5fYWRkciBpcGEg PSB7CiAgICA2OTU1Ogk0OCAwMSBjOCAgICAgICAgICAgICAJYWRkICAgICVyY3gsJXJheAogICAg Njk1ODoJOGIgMGYgICAgICAgICAgICAgICAgCW1vdiAgICAoJXJkaSksJWVjeAogICAgNjk1YToJ ODkgMDggICAgICAgICAgICAgICAgCW1vdiAgICAlZWN4LCglcmF4KQogICAgNjk1YzoJMGYgYjcg NGYgMDQgICAgICAgICAgCW1vdnp3bCAweDQoJXJkaSksJWVjeAogICAgNjk2MDoJNGMgODkgZTcg ICAgICAgICAgICAgCW1vdiAgICAlcjEyLCVyZGkKICAgIDY5NjM6CTY2IDg5IDQ4IDA0ICAgICAg ICAgIAltb3YgICAgJWN4LDB4NCglcmF4KQoJCQkuc2luNi5zaW42X2FkZHIgPSBtc2ctPnRhcmdl dCwKCQkJLnNpbjYuc2luNl9mYW1pbHkgPSBBRl9JTkVUNiwKCQl9OwoKCQl2eGxhbl9pcF9taXNz KGRldiwgJmlwYSk7CiAgICA2OTY3Ogk0MSAwZiBiNyA4NCAyNCBjNiAwMCAJbW92endsIDB4YzYo JXIxMiksJWVheAogICAgNjk2ZToJMDAgMDAgCiAgICA2OTcwOgk0OSAwMyA4NCAyNCBkMCAwMCAw MCAJYWRkICAgIDB4ZDAoJXIxMiksJXJheAogICAgNjk3NzoJMDAgCglza2ItPm5ldHdvcmtfaGVh ZGVyICs9IG9mZnNldDsKfQoKc3RhdGljIGlubGluZSB1bnNpZ25lZCBjaGFyICpza2JfbWFjX2hl YWRlcihjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQp7CglyZXR1cm4gc2tiLT5oZWFkICsgc2ti LT5tYWNfaGVhZGVyOwogICAgNjk3ODoJNDEgOGIgOGYgYjggMDAgMDAgMDAgCW1vdiAgICAweGI4 KCVyMTUpLCVlY3gKCWV0aGVyX2FkZHJfY29weShldGhfaGRyKHJlcGx5KS0+aF9kZXN0LCBkYWRk cik7CglldGhlcl9hZGRyX2NvcHkoZXRoX2hkcihyZXBseSktPmhfc291cmNlLCBuLT5oYSk7Cgll dGhfaGRyKHJlcGx5KS0+aF9wcm90byA9IGh0b25zKEVUSF9QX0lQVjYpOwoJcmVwbHktPnByb3Rv Y29sID0gaHRvbnMoRVRIX1BfSVBWNik7CgoJc2tiX3B1bGwocmVwbHksIHNpemVvZihzdHJ1Y3Qg ZXRoaGRyKSk7CiAgICA2OTdmOgk4OSA0OCAwNiAgICAgICAgICAgICAJbW92ICAgICVlY3gsMHg2 KCVyYXgpCiAgICA2OTgyOgk0MSAwZiBiNyA4ZiBiYyAwMCAwMCAJbW92endsIDB4YmMoJXIxNSks JWVjeAogICAgNjk4OToJMDAgCiAqIFBsZWFzZSBub3RlOiBkc3QgJiBzcmMgbXVzdCBib3RoIGJl IGFsaWduZWQgdG8gdTE2LgogKi8Kc3RhdGljIGlubGluZSB2b2lkIGV0aGVyX2FkZHJfY29weSh1 OCAqZHN0LCBjb25zdCB1OCAqc3JjKQp7CiNpZiBkZWZpbmVkKENPTkZJR19IQVZFX0VGRklDSUVO VF9VTkFMSUdORURfQUNDRVNTKQoJKih1MzIgKilkc3QgPSAqKGNvbnN0IHUzMiAqKXNyYzsKICAg IDY5OGE6CTY2IDg5IDQ4IDBhICAgICAgICAgIAltb3YgICAgJWN4LDB4YSglcmF4KQoJKih1MTYg KikoZHN0ICsgNCkgPSAqKGNvbnN0IHUxNiAqKShzcmMgKyA0KTsKICAgIDY5OGU6CTQxIDBmIGI3 IDg0IDI0IGM2IDAwIAltb3Z6d2wgMHhjNiglcjEyKSwlZWF4CiAgICA2OTk1OgkwMCAwMCAKICAg IDY5OTc6CTQ5IDhiIDhjIDI0IGQwIDAwIDAwIAltb3YgICAgMHhkMCglcjEyKSwlcmN4CiAgICA2 OTllOgkwMCAKICAgIDY5OWY6CTY2IGM3IDQ0IDAxIDBjIDg2IGRkIAltb3Z3ICAgJDB4ZGQ4Niww eGMoJXJjeCwlcmF4LDEpCiAgICA2OWE2Ogk2NiA0MSBjNyA4NCAyNCBjMCAwMCAJbW92dyAgICQw eGRkODYsMHhjMCglcjEyKQogICAgNjlhZDoJMDAgMDAgODYgZGQgCiAqIFBsZWFzZSBub3RlOiBk c3QgJiBzcmMgbXVzdCBib3RoIGJlIGFsaWduZWQgdG8gdTE2LgogKi8Kc3RhdGljIGlubGluZSB2 b2lkIGV0aGVyX2FkZHJfY29weSh1OCAqZHN0LCBjb25zdCB1OCAqc3JjKQp7CiNpZiBkZWZpbmVk KENPTkZJR19IQVZFX0VGRklDSUVOVF9VTkFMSUdORURfQUNDRVNTKQoJKih1MzIgKilkc3QgPSAq KGNvbnN0IHUzMiAqKXNyYzsKICAgIDY5YjE6CWU4IDAwIDAwIDAwIDAwICAgICAgIAljYWxscSAg NjliNiA8dnhsYW5feG1pdCsweGFiNj4KCSoodTE2ICopKGRzdCArIDQpID0gKihjb25zdCB1MTYg Kikoc3JjICsgNCk7CiAgICA2OWI2Ogk0OSA4YiA4NCAyNCBkOCAwMCAwMCAJbW92ICAgIDB4ZDgo JXIxMiksJXJheAogICAgNjliZDoJMDAgCgl9CgoJLyogRXRoZXJuZXQgaGVhZGVyICovCglldGhl cl9hZGRyX2NvcHkoZXRoX2hkcihyZXBseSktPmhfZGVzdCwgZGFkZHIpOwoJZXRoZXJfYWRkcl9j b3B5KGV0aF9oZHIocmVwbHkpLT5oX3NvdXJjZSwgbi0+aGEpOwoJZXRoX2hkcihyZXBseSktPmhf cHJvdG8gPSBodG9ucyhFVEhfUF9JUFY2KTsKICAgIDY5YmU6CTQ5IDJiIDg0IDI0IGQwIDAwIDAw IAlzdWIgICAgMHhkMCglcjEyKSwlcmF4CiAgICA2OWM1OgkwMCAKICAgIDY5YzY6CWJlIDI4IDAw IDAwIDAwICAgICAgIAltb3YgICAgJDB4MjgsJWVzaQogICAgNjljYjoJNGMgODkgZTcgICAgICAg ICAgICAgCW1vdiAgICAlcjEyLCVyZGkKICAgIDY5Y2U6CTY2IDQxIDg5IDg0IDI0IGM0IDAwIAlt b3YgICAgJWF4LDB4YzQoJXIxMikKICAgIDY5ZDU6CTAwIDAwIAoJcmVwbHktPnByb3RvY29sID0g aHRvbnMoRVRIX1BfSVBWNik7CiAgICA2OWQ3OgllOCAwMCAwMCAwMCAwMCAgICAgICAJY2FsbHEg IDY5ZGMgPHZ4bGFuX3htaXQrMHhhZGM+CiAgICA2OWRjOgk0NSAwZiBiNyBhYyAyNCBjNCAwMCAJ bW92endsIDB4YzQoJXIxMiksJXIxM2QKICAgIDY5ZTM6CTAwIDAwIAoKCXNrYl9wdWxsKHJlcGx5 LCBzaXplb2Yoc3RydWN0IGV0aGhkcikpOwogICAgNjllNToJNDUgMzEgYzAgICAgICAgICAgICAg CXhvciAgICAlcjhkLCVyOGQKCXJldHVybiBza2ItPmhlYWQgKyBza2ItPm5ldHdvcmtfaGVhZGVy Owp9CgpzdGF0aWMgaW5saW5lIHZvaWQgc2tiX3Jlc2V0X25ldHdvcmtfaGVhZGVyKHN0cnVjdCBz a19idWZmICpza2IpCnsKCXNrYi0+bmV0d29ya19oZWFkZXIgPSBza2ItPmRhdGEgLSBza2ItPmhl YWQ7CiAgICA2OWU4OgliOSAwYSAwMCAwMCAwMCAgICAgICAJbW92ICAgICQweGEsJWVjeAogICAg NjllZDoJNGQgMDMgYWMgMjQgZDAgMDAgMDAgCWFkZCAgICAweGQwKCVyMTIpLCVyMTMKICAgIDY5 ZjQ6CTAwIAogICAgNjlmNToJNDQgODkgYzAgICAgICAgICAgICAgCW1vdiAgICAlcjhkLCVlYXgK CXNrYl9yZXNldF9uZXR3b3JrX2hlYWRlcihyZXBseSk7Cglza2JfcHV0KHJlcGx5LCBzaXplb2Yo c3RydWN0IGlwdjZoZHIpKTsKICAgIDY5Zjg6CTQ0IDg5IDQ0IDI0IDE4ICAgICAgIAltb3YgICAg JXI4ZCwweDE4KCVyc3ApCiAgICA2OWZkOgk0YyA4OSBlZiAgICAgICAgICAgICAJbW92ICAgICVy MTMsJXJkaQogICAgNmEwMDoJZjMgYWIgICAgICAgICAgICAgICAgCXJlcCBzdG9zICVlYXgsJWVz OiglcmRpKQogICAgNmEwMjoJYjkgNjAgMDAgMDAgMDAgICAgICAgCW1vdiAgICAkMHg2MCwlZWN4 CiAgICA2YTA3Ogk0MSA4OCA0ZCAwMCAgICAgICAgICAJbW92ICAgICVjbCwweDAoJXIxMykKICAg IDZhMGI6CTBmIGI3IDgzIGM0IDAwIDAwIDAwIAltb3Z6d2wgMHhjNCglcmJ4KSwlZWF4Cglza2It PnRyYW5zcG9ydF9oZWFkZXIgKz0gb2Zmc2V0Owp9CgpzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGNo YXIgKnNrYl9uZXR3b3JrX2hlYWRlcihjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQp7CglyZXR1 cm4gc2tiLT5oZWFkICsgc2tiLT5uZXR3b3JrX2hlYWRlcjsKICAgIDZhMTI6CTQ4IDhiIGIzIGQw IDAwIDAwIDAwIAltb3YgICAgMHhkMCglcmJ4KSwlcnNpCgoJLyogSVB2NiBoZWFkZXIgKi8KCglw aXA2ID0gaXB2Nl9oZHIocmVwbHkpOwoJbWVtc2V0KHBpcDYsIDAsIHNpemVvZihzdHJ1Y3QgaXB2 NmhkcikpOwogICAgNmExOToJMGYgYjYgMDQgMDYgICAgICAgICAgCW1vdnpibCAoJXJzaSwlcmF4 LDEpLCVlYXgKICAgIDZhMWQ6CTQxIGM2IDQ1IDA2IDNhICAgICAgIAltb3ZiICAgJDB4M2EsMHg2 KCVyMTMpCiAgICA2YTIyOgk0MSBjNiA0NSAwNyBmZiAgICAgICAJbW92YiAgICQweGZmLDB4Nygl cjEzKQogICAgNmEyNzoJODMgZTAgMGYgICAgICAgICAgICAgCWFuZCAgICAkMHhmLCVlYXgKICAg IDZhMmE6CTA5IGM4ICAgICAgICAgICAgICAgIAlvciAgICAgJWVjeCwlZWF4CiAgICA2YTJjOgk0 MSA4OCA0NSAwMCAgICAgICAgICAJbW92ICAgICVhbCwweDAoJXIxMykKICAgIDZhMzA6CTBmIGI3 IDgzIGM0IDAwIDAwIDAwIAltb3Z6d2wgMHhjNCglcmJ4KSwlZWF4CglwaXA2LT52ZXJzaW9uID0g NjsKICAgIDZhMzc6CTQ4IDhiIDhiIGQwIDAwIDAwIDAwIAltb3YgICAgMHhkMCglcmJ4KSwlcmN4 CglwaXA2LT5wcmlvcml0eSA9IGlwdjZfaGRyKHJlcXVlc3QpLT5wcmlvcml0eTsKICAgIDZhM2U6 CTQ4IDhiIDc0IDAxIDA4ICAgICAgIAltb3YgICAgMHg4KCVyY3gsJXJheCwxKSwlcnNpCiAgICA2 YTQzOgk0OCA4YiA3YyAwMSAxMCAgICAgICAJbW92ICAgIDB4MTAoJXJjeCwlcmF4LDEpLCVyZGkK ICAgIDZhNDg6CTQ5IDg5IDc1IDE4ICAgICAgICAgIAltb3YgICAgJXJzaSwweDE4KCVyMTMpCiAg ICA2YTRjOgk0OSA4OSA3ZCAyMCAgICAgICAgICAJbW92ICAgICVyZGksMHgyMCglcjEzKQoJcGlw Ni0+bmV4dGhkciA9IElQUFJPVE9fSUNNUFY2OwogICAgNmE1MDoJNDkgOGIgYjcgOTAgMDEgMDAg MDAgCW1vdiAgICAweDE5MCglcjE1KSwlcnNpCgkvKiBJUHY2IGhlYWRlciAqLwoKCXBpcDYgPSBp cHY2X2hkcihyZXBseSk7CgltZW1zZXQocGlwNiwgMCwgc2l6ZW9mKHN0cnVjdCBpcHY2aGRyKSk7 CglwaXA2LT52ZXJzaW9uID0gNjsKCXBpcDYtPnByaW9yaXR5ID0gaXB2Nl9oZHIocmVxdWVzdCkt PnByaW9yaXR5OwogICAgNmE1NzoJNDkgOGIgYmYgOTggMDEgMDAgMDAgCW1vdiAgICAweDE5OCgl cjE1KSwlcmRpCiAgICA2YTVlOgk0OSA4OSA3NSAwOCAgICAgICAgICAJbW92ICAgICVyc2ksMHg4 KCVyMTMpCglwaXA2LT5uZXh0aGRyID0gSVBQUk9UT19JQ01QVjY7CglwaXA2LT5ob3BfbGltaXQg PSAyNTU7CglwaXA2LT5kYWRkciA9IGlwdjZfaGRyKHJlcXVlc3QpLT5zYWRkcjsKICAgIDZhNjI6 CTQ5IDg5IDdkIDEwICAgICAgICAgIAltb3YgICAgJXJkaSwweDEwKCVyMTMpCiAgICA2YTY2Ogli ZSAyOCAwMCAwMCAwMCAgICAgICAJbW92ICAgICQweDI4LCVlc2kKICAgIDZhNmI6CTRjIDg5IGU3 ICAgICAgICAgICAgIAltb3YgICAgJXIxMiwlcmRpCiAgICA2YTZlOgllOCAwMCAwMCAwMCAwMCAg ICAgICAJY2FsbHEgIDZhNzMgPHZ4bGFuX3htaXQrMHhiNzM+CiAgICA2YTczOgk0OSA4YiA4NCAy NCBkOCAwMCAwMCAJbW92ICAgIDB4ZDgoJXIxMiksJXJheAogICAgNmE3YToJMDAgCiAgICA2YTdi Ogk0OSAyYiA4NCAyNCBkMCAwMCAwMCAJc3ViICAgIDB4ZDAoJXIxMiksJXJheAogICAgNmE4MjoJ MDAgCglwaXA2LT5zYWRkciA9ICooc3RydWN0IGluNl9hZGRyICopbi0+cHJpbWFyeV9rZXk7CiAg ICA2YTgzOgliZSAyMCAwMCAwMCAwMCAgICAgICAJbW92ICAgICQweDIwLCVlc2kKICAgIDZhODg6 CTRjIDg5IGU3ICAgICAgICAgICAgIAltb3YgICAgJXIxMiwlcmRpCiAgICA2YThiOgk2NiA0MSA4 OSA4NCAyNCBjMiAwMCAJbW92ICAgICVheCwweGMyKCVyMTIpCiAgICA2YTkyOgkwMCAwMCAKICAg IDZhOTQ6CWU4IDAwIDAwIDAwIDAwICAgICAgIAljYWxscSAgNmE5OSA8dnhsYW5feG1pdCsweGI5 OT4KCglza2JfcHVsbChyZXBseSwgc2l6ZW9mKHN0cnVjdCBpcHY2aGRyKSk7CiAgICA2YTk5Ogk0 NCA4YiA0NCAyNCAxOCAgICAgICAJbW92ICAgIDB4MTgoJXJzcCksJXI4ZAogICAgNmE5ZToJNDkg ODkgYzIgICAgICAgICAgICAgCW1vdiAgICAlcmF4LCVyMTAKICAgIDZhYTE6CTQ4IDg5IGM3ICAg ICAgICAgICAgIAltb3YgICAgJXJheCwlcmRpCglyZXR1cm4gc2tiLT5oZWFkICsgc2tiLT50cmFu c3BvcnRfaGVhZGVyOwp9CgpzdGF0aWMgaW5saW5lIHZvaWQgc2tiX3Jlc2V0X3RyYW5zcG9ydF9o ZWFkZXIoc3RydWN0IHNrX2J1ZmYgKnNrYikKewoJc2tiLT50cmFuc3BvcnRfaGVhZGVyID0gc2ti LT5kYXRhIC0gc2tiLT5oZWFkOwogICAgNmFhNDoJYjkgMDggMDAgMDAgMDAgICAgICAgCW1vdiAg ICAkMHg4LCVlY3gKICAgIDZhYTk6CTQ4IDhiIDU0IDI0IDEwICAgICAgIAltb3YgICAgMHgxMCgl cnNwKSwlcmR4CiAgICA2YWFlOgliZSAyMCAwMCAwMCAwMCAgICAgICAJbW92ICAgICQweDIwLCVl c2kKCXNrYl9yZXNldF90cmFuc3BvcnRfaGVhZGVyKHJlcGx5KTsKCgluYSA9IChzdHJ1Y3QgbmRf bXNnICopc2tiX3B1dChyZXBseSwgc2l6ZW9mKCpuYSkgKyBuYV9vbGVuKTsKICAgIDZhYjM6CTQ0 IDg5IGMwICAgICAgICAgICAgIAltb3YgICAgJXI4ZCwlZWF4CiAgICA2YWI2OglmMyBhYiAgICAg ICAgICAgICAgICAJcmVwIHN0b3MgJWVheCwlZXM6KCVyZGkpCiAgICA2YWI4OgkwZiBiNiA0NCAy NCAyMCAgICAgICAJbW92emJsIDB4MjAoJXJzcCksJWVheAogICAgNmFiZDoJNDEgYzYgMDIgODgg ICAgICAgICAgCW1vdmIgICAkMHg4OCwoJXIxMCkKICAgIDZhYzE6CTRjIDg5IGQ3ICAgICAgICAg ICAgIAltb3YgICAgJXIxMCwlcmRpCiAgICA2YWM0Ogk0YyA4OSA1NCAyNCAyMCAgICAgICAJbW92 ICAgICVyMTAsMHgyMCglcnNwKQoKCS8qIE5laWdoYm9yIEFkdmVydGlzZW1lbnQgKi8KCW1lbXNl dChuYSwgMCwgc2l6ZW9mKCpuYSkrbmFfb2xlbik7CiAgICA2YWM5OgljMSBlMCAwNyAgICAgICAg ICAgICAJc2hsICAgICQweDcsJWVheAogICAgNmFjYzoJODMgYzggNjAgICAgICAgICAgICAgCW9y ICAgICAkMHg2MCwlZWF4CglwaXA2LT5zYWRkciA9ICooc3RydWN0IGluNl9hZGRyICopbi0+cHJp bWFyeV9rZXk7CgoJc2tiX3B1bGwocmVwbHksIHNpemVvZihzdHJ1Y3QgaXB2NmhkcikpOwoJc2ti X3Jlc2V0X3RyYW5zcG9ydF9oZWFkZXIocmVwbHkpOwoKCW5hID0gKHN0cnVjdCBuZF9tc2cgKilz a2JfcHV0KHJlcGx5LCBzaXplb2YoKm5hKSArIG5hX29sZW4pOwogICAgNmFjZjoJNDEgODggNDIg MDQgICAgICAgICAgCW1vdiAgICAlYWwsMHg0KCVyMTApCgoJLyogTmVpZ2hib3IgQWR2ZXJ0aXNl bWVudCAqLwoJbWVtc2V0KG5hLCAwLCBzaXplb2YoKm5hKStuYV9vbGVuKTsKICAgIDZhZDM6CTQ4 IDhiIDQyIDA4ICAgICAgICAgIAltb3YgICAgMHg4KCVyZHgpLCVyYXgKICAgIDZhZDc6CTQ4IDhi IDUyIDEwICAgICAgICAgIAltb3YgICAgMHgxMCglcmR4KSwlcmR4CgluYS0+aWNtcGguaWNtcDZf dHlwZSA9IE5ESVNDX05FSUdIQk9VUl9BRFZFUlRJU0VNRU5UOwoJbmEtPmljbXBoLmljbXA2X3Jv dXRlciA9IGlzcm91dGVyOwoJbmEtPmljbXBoLmljbXA2X292ZXJyaWRlID0gMTsKCW5hLT5pY21w aC5pY21wNl9zb2xpY2l0ZWQgPSAxOwoJbmEtPnRhcmdldCA9IG5zLT50YXJnZXQ7CiAgICA2YWRi Ogk0OSA4OSA0MiAwOCAgICAgICAgICAJbW92ICAgICVyYXgsMHg4KCVyMTApCglldGhlcl9hZGRy X2NvcHkoJm5hLT5vcHRbMl0sIG4tPmhhKTsKCW5hLT5vcHRbMF0gPSBORF9PUFRfVEFSR0VUX0xM X0FERFI7CgluYS0+b3B0WzFdID0gbmFfb2xlbiA+PiAzOwoKCW5hLT5pY21waC5pY21wNl9ja3N1 bSA9IGNzdW1faXB2Nl9tYWdpYygmcGlwNi0+c2FkZHIsCiAgICA2YWRmOgk0OSA4OSA1MiAxMCAg ICAgICAgICAJbW92ICAgICVyZHgsMHgxMCglcjEwKQoJc2tiX3Jlc2V0X3RyYW5zcG9ydF9oZWFk ZXIocmVwbHkpOwoKCW5hID0gKHN0cnVjdCBuZF9tc2cgKilza2JfcHV0KHJlcGx5LCBzaXplb2Yo Km5hKSArIG5hX29sZW4pOwoKCS8qIE5laWdoYm9yIEFkdmVydGlzZW1lbnQgKi8KCW1lbXNldChu YSwgMCwgc2l6ZW9mKCpuYSkrbmFfb2xlbik7CiAgICA2YWUzOgk0MSA4YiA4NyBiOCAwMCAwMCAw MCAJbW92ICAgIDB4YjgoJXIxNSksJWVheAoJbmEtPmljbXBoLmljbXA2X3R5cGUgPSBORElTQ19O RUlHSEJPVVJfQURWRVJUSVNFTUVOVDsKCW5hLT5pY21waC5pY21wNl9yb3V0ZXIgPSBpc3JvdXRl cjsKICAgIDZhZWE6CTMxIGQyICAgICAgICAgICAgICAgIAl4b3IgICAgJWVkeCwlZWR4CiAgICA2 YWVjOgk0MSA4OSA0MiAxYSAgICAgICAgICAJbW92ICAgICVlYXgsMHgxYSglcjEwKQoKCW5hID0g KHN0cnVjdCBuZF9tc2cgKilza2JfcHV0KHJlcGx5LCBzaXplb2YoKm5hKSArIG5hX29sZW4pOwoK CS8qIE5laWdoYm9yIEFkdmVydGlzZW1lbnQgKi8KCW1lbXNldChuYSwgMCwgc2l6ZW9mKCpuYSkr bmFfb2xlbik7CgluYS0+aWNtcGguaWNtcDZfdHlwZSA9IE5ESVNDX05FSUdIQk9VUl9BRFZFUlRJ U0VNRU5UOwogICAgNmFmMDoJNDEgMGYgYjcgODcgYmMgMDAgMDAgCW1vdnp3bCAweGJjKCVyMTUp LCVlYXgKICAgIDZhZjc6CTAwIAoJbmEtPnRhcmdldCA9IG5zLT50YXJnZXQ7CglldGhlcl9hZGRy X2NvcHkoJm5hLT5vcHRbMl0sIG4tPmhhKTsKCW5hLT5vcHRbMF0gPSBORF9PUFRfVEFSR0VUX0xM X0FERFI7CgluYS0+b3B0WzFdID0gbmFfb2xlbiA+PiAzOwoKCW5hLT5pY21waC5pY21wNl9ja3N1 bSA9IGNzdW1faXB2Nl9tYWdpYygmcGlwNi0+c2FkZHIsCiAgICA2YWY4Ogk0MSBjNiA0MiAxOCAw MiAgICAgICAJbW92YiAgICQweDIsMHgxOCglcjEwKQoJLyogTmVpZ2hib3IgQWR2ZXJ0aXNlbWVu dCAqLwoJbWVtc2V0KG5hLCAwLCBzaXplb2YoKm5hKStuYV9vbGVuKTsKCW5hLT5pY21waC5pY21w Nl90eXBlID0gTkRJU0NfTkVJR0hCT1VSX0FEVkVSVElTRU1FTlQ7CgluYS0+aWNtcGguaWNtcDZf cm91dGVyID0gaXNyb3V0ZXI7CgluYS0+aWNtcGguaWNtcDZfb3ZlcnJpZGUgPSAxOwoJbmEtPmlj bXBoLmljbXA2X3NvbGljaXRlZCA9IDE7CiAgICA2YWZkOgk0MSBjNiA0MiAxOSAwMSAgICAgICAJ bW92YiAgICQweDEsMHgxOSglcjEwKQogICAgNmIwMjoJNjYgNDEgODkgNDIgMWUgICAgICAgCW1v diAgICAlYXgsMHgxZSglcjEwKQoJbmEtPnRhcmdldCA9IG5zLT50YXJnZXQ7CiAgICA2YjA3Ogll OCAwMCAwMCAwMCAwMCAgICAgICAJY2FsbHEgIDZiMGMgPHZ4bGFuX3htaXQrMHhjMGM+CiAgICA2 YjBjOgk0OSA4ZCA3NSAxOCAgICAgICAgICAJbGVhICAgIDB4MTgoJXIxMyksJXJzaQogICAgNmIx MDoJNDkgOGQgN2QgMDggICAgICAgICAgCWxlYSAgICAweDgoJXIxMyksJXJkaQogKiBQbGVhc2Ug bm90ZTogZHN0ICYgc3JjIG11c3QgYm90aCBiZSBhbGlnbmVkIHRvIHUxNi4KICovCnN0YXRpYyBp bmxpbmUgdm9pZCBldGhlcl9hZGRyX2NvcHkodTggKmRzdCwgY29uc3QgdTggKnNyYykKewojaWYg ZGVmaW5lZChDT05GSUdfSEFWRV9FRkZJQ0lFTlRfVU5BTElHTkVEX0FDQ0VTUykKCSoodTMyICop ZHN0ID0gKihjb25zdCB1MzIgKilzcmM7CiAgICA2YjE0Ogk0MSA4OSBjMCAgICAgICAgICAgICAJ bW92ICAgICVlYXgsJXI4ZAogICAgNmIxNzoJYjkgM2EgMDAgMDAgMDAgICAgICAgCW1vdiAgICAk MHgzYSwlZWN4CiAgICA2YjFjOgliYSAyMCAwMCAwMCAwMCAgICAgICAJbW92ICAgICQweDIwLCVl ZHgKCSoodTE2ICopKGRzdCArIDQpID0gKihjb25zdCB1MTYgKikoc3JjICsgNCk7CiAgICA2YjIx OgllOCAwMCAwMCAwMCAwMCAgICAgICAJY2FsbHEgIDZiMjYgPHZ4bGFuX3htaXQrMHhjMjY+CiAg ICA2YjI2Ogk0YyA4YiA1NCAyNCAyMCAgICAgICAJbW92ICAgIDB4MjAoJXJzcCksJXIxMAoJZXRo ZXJfYWRkcl9jb3B5KCZuYS0+b3B0WzJdLCBuLT5oYSk7CgluYS0+b3B0WzBdID0gTkRfT1BUX1RB UkdFVF9MTF9BRERSOwogICAgNmIyYjoJYmUgMjggMDAgMDAgMDAgICAgICAgCW1vdiAgICAkMHgy OCwlZXNpCgluYS0+b3B0WzFdID0gbmFfb2xlbiA+PiAzOwogICAgNmIzMDoJNGMgODkgZTcgICAg ICAgICAgICAgCW1vdiAgICAlcjEyLCVyZGkKICAgIDZiMzM6CTY2IDQxIDg5IDQyIDAyICAgICAg IAltb3YgICAgJWF4LDB4MiglcjEwKQoKCW5hLT5pY21waC5pY21wNl9ja3N1bSA9IGNzdW1faXB2 Nl9tYWdpYygmcGlwNi0+c2FkZHIsCiAgICA2YjM4Ogk2NiA0MSBjNyA0NSAwNCAwMCAyMCAJbW92 dyAgICQweDIwMDAsMHg0KCVyMTMpCgkJJnBpcDYtPmRhZGRyLCBzaXplb2YoKm5hKStuYV9vbGVu LCBJUFBST1RPX0lDTVBWNiwKICAgIDZiM2Y6CWU4IDAwIDAwIDAwIDAwICAgICAgIAljYWxscSAg NmI0NCA8dnhsYW5feG1pdCsweGM0ND4KCW5hLT50YXJnZXQgPSBucy0+dGFyZ2V0OwoJZXRoZXJf YWRkcl9jb3B5KCZuYS0+b3B0WzJdLCBuLT5oYSk7CgluYS0+b3B0WzBdID0gTkRfT1BUX1RBUkdF VF9MTF9BRERSOwoJbmEtPm9wdFsxXSA9IG5hX29sZW4gPj4gMzsKCgluYS0+aWNtcGguaWNtcDZf Y2tzdW0gPSBjc3VtX2lwdjZfbWFnaWMoJnBpcDYtPnNhZGRyLAogICAgNmI0NDoJNDEgMGYgYjYg ODQgMjQgOTEgMDAgCW1vdnpibCAweDkxKCVyMTIpLCVlYXgKICAgIDZiNGI6CTAwIDAwIAogICAg NmI0ZDoJNGMgODkgZmYgICAgICAgICAgICAgCW1vdiAgICAlcjE1LCVyZGkKICAgIDZiNTA6CTgz IGUwIGY5ICAgICAgICAgICAgIAlhbmQgICAgJDB4ZmZmZmZmZjksJWVheAogICAgNmI1MzoJODMg YzggMDIgICAgICAgICAgICAgCW9yICAgICAkMHgyLCVlYXgKICAgIDZiNTY6CTQxIDg4IDg0IDI0 IDkxIDAwIDAwIAltb3YgICAgJWFsLDB4OTEoJXIxMikKICAgIDZiNWQ6CTAwIAoJCSZwaXA2LT5k YWRkciwgc2l6ZW9mKCpuYSkrbmFfb2xlbiwgSVBQUk9UT19JQ01QVjYsCgkJY3N1bV9wYXJ0aWFs KG5hLCBzaXplb2YoKm5hKStuYV9vbGVuLCAwKSk7CgoJcGlwNi0+cGF5bG9hZF9sZW4gPSBodG9u cyhzaXplb2YoKm5hKStuYV9vbGVuKTsKCglza2JfcHVzaChyZXBseSwgc2l6ZW9mKHN0cnVjdCBp cHY2aGRyKSk7CiAgICA2YjVlOgllOCBkZCA5YyBmZiBmZiAgICAgICAJY2FsbHEgIDg0MCA8bmVp Z2hfcmVsZWFzZT4KCW5hLT50YXJnZXQgPSBucy0+dGFyZ2V0OwoJZXRoZXJfYWRkcl9jb3B5KCZu YS0+b3B0WzJdLCBuLT5oYSk7CgluYS0+b3B0WzBdID0gTkRfT1BUX1RBUkdFVF9MTF9BRERSOwoJ bmEtPm9wdFsxXSA9IG5hX29sZW4gPj4gMzsKCgluYS0+aWNtcGguaWNtcDZfY2tzdW0gPSBjc3Vt X2lwdjZfbWFnaWMoJnBpcDYtPnNhZGRyLAogICAgNmI2MzoJNGMgODkgZTcgICAgICAgICAgICAg CW1vdiAgICAlcjEyLCVyZGkKICAgIDZiNjY6CWU4IDAwIDAwIDAwIDAwICAgICAgIAljYWxscSAg NmI2YiA8dnhsYW5feG1pdCsweGM2Yj4KCQkmcGlwNi0+ZGFkZHIsIHNpemVvZigqbmEpK25hX29s ZW4sIElQUFJPVE9fSUNNUFY2LAoJCWNzdW1fcGFydGlhbChuYSwgc2l6ZW9mKCpuYSkrbmFfb2xl biwgMCkpOwoKCXBpcDYtPnBheWxvYWRfbGVuID0gaHRvbnMoc2l6ZW9mKCpuYSkrbmFfb2xlbik7 CiAgICA2YjZiOgk4MyBlOCAwMSAgICAgICAgICAgICAJc3ViICAgICQweDEsJWVheAogICAgNmI2 ZToJMGYgODUgZjMgZmEgZmYgZmYgICAgCWpuZSAgICA2NjY3IDx2eGxhbl94bWl0KzB4NzY3PgoK CXNrYl9wdXNoKHJlcGx5LCBzaXplb2Yoc3RydWN0IGlwdjZoZHIpKTsKCglyZXBseS0+aXBfc3Vt bWVkID0gQ0hFQ0tTVU1fVU5ORUNFU1NBUlk7CiAgICA2Yjc0OgllOSBlNiBmYSBmZiBmZiAgICAg ICAJam1wcSAgIDY2NWYgPHZ4bGFuX3htaXQrMHg3NWY+CiAgICA2Yjc5OgkwZiAwYiAgICAgICAg ICAgICAgICAJdWQyICAgIAogICAgNmI3YjoJODkgZDIgICAgICAgICAgICAgICAgCW1vdiAgICAl ZWR4LCVlZHgKCQl9CgoJCXJlcGx5ID0gdnhsYW5fbmFfY3JlYXRlKHNrYiwgbiwKCQkJCQkhIShm ID8gZi0+ZmxhZ3MgJiBOVEZfUk9VVEVSIDogMCkpOwoKCQluZWlnaF9yZWxlYXNlKG4pOwogICAg NmI3ZDoJNDQgODkgNGUgMDYgICAgICAgICAgCW1vdiAgICAlcjlkLDB4NiglcnNpKQoKCXBpcDYt PnBheWxvYWRfbGVuID0gaHRvbnMoc2l6ZW9mKCpuYSkrbmFfb2xlbik7CgoJc2tiX3B1c2gocmVw bHksIHNpemVvZihzdHJ1Y3QgaXB2NmhkcikpOwoKCXJlcGx5LT5pcF9zdW1tZWQgPSBDSEVDS1NV TV9VTk5FQ0VTU0FSWTsKICAgIDZiODE6CThiIDRjIDE2IGZjICAgICAgICAgIAltb3YgICAgLTB4 NCglcnNpLCVyZHgsMSksJWVjeAogICAgNmI4NToJNDEgODkgNGMgMTAgZmMgICAgICAgCW1vdiAg ICAlZWN4LC0weDQoJXI4LCVyZHgsMSkKICAgIDZiOGE6CTQ4IDhiIDhiIGQwIDAwIDAwIDAwIAlt b3YgICAgMHhkMCglcmJ4KSwlcmN4CgkJfQoKCQlyZXBseSA9IHZ4bGFuX25hX2NyZWF0ZShza2Is IG4sCgkJCQkJISEoZiA/IGYtPmZsYWdzICYgTlRGX1JPVVRFUiA6IDApKTsKCgkJbmVpZ2hfcmVs ZWFzZShuKTsKICAgIDZiOTE6CTBmIGI3IGJiIGM2IDAwIDAwIDAwIAltb3Z6d2wgMHhjNiglcmJ4 KSwlZWRpCgoJCWlmIChyZXBseSA9PSBOVUxMKQoJCQlnb3RvIG91dDsKCgkJaWYgKG5ldGlmX3J4 X25pKHJlcGx5KSA9PSBORVRfUlhfRFJPUCkKICAgIDZiOTg6CTQxIDBmIGI2IDk2IDc1IDAyIDAw IAltb3Z6YmwgMHgyNzUoJXIxNCksJWVkeAogICAgNmI5ZjoJMDAgCiAgICA2YmEwOgllOSAyYiBm YyBmZiBmZiAgICAgICAJam1wcSAgIDY3ZDAgPHZ4bGFuX3htaXQrMHg4ZDA+CiAgICA2YmE1Ogk4 YiAzZSAgICAgICAgICAgICAgICAJbW92ICAgICglcnNpKSwlZWRpCiAgICA2YmE3Ogk4OSBkMiAg ICAgICAgICAgICAgICAJbW92ICAgICVlZHgsJWVkeAoKdW5zaWduZWQgY2hhciAqc2tiX3B1bGwo c3RydWN0IHNrX2J1ZmYgKnNrYiwgdW5zaWduZWQgaW50IGxlbik7CnN0YXRpYyBpbmxpbmUgdW5z aWduZWQgY2hhciAqX19za2JfcHVsbChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCB1bnNpZ25lZCBpbnQg bGVuKQp7Cglza2ItPmxlbiAtPSBsZW47CglCVUdfT04oc2tiLT5sZW4gPCBza2ItPmRhdGFfbGVu KTsKICAgIDZiYTk6CTg5IDM5ICAgICAgICAgICAgICAgIAltb3YgICAgJWVkaSwoJXJjeCkKCWlm IChuKSB7CgkJYm9vbCBkaWZmOwoKCQlkaWZmID0gIWV0aGVyX2FkZHJfZXF1YWwoZXRoX2hkcihz a2IpLT5oX2Rlc3QsIG4tPmhhKTsKCQlpZiAoZGlmZikgewoJCQltZW1jcHkoZXRoX2hkcihza2Ip LT5oX3NvdXJjZSwgZXRoX2hkcihza2IpLT5oX2Rlc3QsCiAgICA2YmFiOgk4YiA3NCAxNiBmYyAg ICAgICAgICAJbW92ICAgIC0weDQoJXJzaSwlcmR4LDEpLCVlc2kKICAgIDZiYWY6CTg5IDc0IDEx IGZjICAgICAgICAgIAltb3YgICAgJWVzaSwtMHg0KCVyY3gsJXJkeCwxKQogICAgNmJiMzoJZTkg ZjAgZjUgZmYgZmYgICAgICAgCWptcHEgICA2MWE4IDx2eGxhbl94bWl0KzB4MmE4PgogICAgNmJi ODoJNDggOGIgNGEgZTAgICAgICAgICAgCW1vdiAgICAtMHgyMCglcmR4KSwlcmN4CiAgICA2YmJj Ogk0OCAwYiA0YSBlOCAgICAgICAgICAJb3IgICAgIC0weDE4KCVyZHgpLCVyY3gKICAgIDZiYzA6 CTBmIDk0IGMyICAgICAgICAgICAgIAlzZXRlICAgJWRsCiAgICA2YmMzOgllOSAzYSBmNyBmZiBm ZiAgICAgICAJam1wcSAgIDYzMDIgPHZ4bGFuX3htaXQrMHg0MDI+CiAgICA2YmM4OgkzMSBjMCAg ICAgICAgICAgICAgICAJeG9yICAgICVlYXgsJWVheAogICAgNmJjYToJZTkgNDIgZjcgZmYgZmYg ICAgICAgCWptcHEgICA2MzExIDx2eGxhbl94bWl0KzB4NDExPgogICAgNmJjZjoJODkgZDIgICAg ICAgICAgICAgICAgCW1vdiAgICAlZWR4LCVlZHgKICAgIDZiZDE6CTBmIGI3IDRjIDE2IGZlICAg ICAgIAltb3Z6d2wgLTB4MiglcnNpLCVyZHgsMSksJWVjeAoJCQkJZGV2LT5hZGRyX2xlbik7CgkJ CW1lbWNweShldGhfaGRyKHNrYiktPmhfZGVzdCwgbi0+aGEsIGRldi0+YWRkcl9sZW4pOwogICAg NmJkNjoJNjYgNDEgODkgNGMgMTAgZmUgICAgCW1vdiAgICAlY3gsLTB4MiglcjgsJXJkeCwxKQog ICAgNmJkYzoJNDggOGIgOGIgZDAgMDAgMDAgMDAgCW1vdiAgICAweGQwKCVyYngpLCVyY3gKICAg IDZiZTM6CTBmIGI3IGJiIGM2IDAwIDAwIDAwIAltb3Z6d2wgMHhjNiglcmJ4KSwlZWRpCiAgICA2 YmVhOgk0MSAwZiBiNiA5NiA3NSAwMiAwMCAJbW92emJsIDB4Mjc1KCVyMTQpLCVlZHgKICAgIDZi ZjE6CTAwIAogICAgNmJmMjoJZTkgZDkgZmIgZmYgZmYgICAgICAgCWptcHEgICA2N2QwIDx2eGxh bl94bWl0KzB4OGQwPgogICAgNmJmNzoJNDEgZjYgODYgZDggMDggMDAgMDAgCXRlc3RiICAkMHgx MCwweDhkOCglcjE0KQogICAgNmJmZToJMTAgCglpZiAobikgewoJCWJvb2wgZGlmZjsKCgkJZGlm ZiA9ICFldGhlcl9hZGRyX2VxdWFsKGV0aF9oZHIoc2tiKS0+aF9kZXN0LCBuLT5oYSk7CgkJaWYg KGRpZmYpIHsKCQkJbWVtY3B5KGV0aF9oZHIoc2tiKS0+aF9zb3VyY2UsIGV0aF9oZHIoc2tiKS0+ aF9kZXN0LAogICAgNmJmZjoJMGYgODQgZjIgZmEgZmYgZmYgICAgCWplICAgICA2NmY3IDx2eGxh bl94bWl0KzB4N2Y3PgogICAgNmMwNToJNDggOGQgN2MgMjQgMzAgICAgICAgCWxlYSAgICAweDMw KCVyc3ApLCVyZGkKICAgIDZjMGE6CWI5IDA3IDAwIDAwIDAwICAgICAgIAltb3YgICAgJDB4Nywl ZWN4CiAgICA2YzBmOgk0OCA4ZCA3NCAyNCAzMCAgICAgICAJbGVhICAgIDB4MzAoJXJzcCksJXJz aQogICAgNmMxNDoJZjMgYWIgICAgICAgICAgICAgICAgCXJlcCBzdG9zICVlYXgsJWVzOiglcmRp KQogICAgNmMxNjoJNjYgYzcgNDQgMjQgMzAgMGEgMDAgCW1vdncgICAkMHhhLDB4MzAoJXJzcCkK ICAgIDZjMWQ6CTRjIDg5IGY3ICAgICAgICAgICAgIAltb3YgICAgJXIxNCwlcmRpCiAgICA2YzIw Ogk0OSA4YiA0MCAxOCAgICAgICAgICAJbW92ICAgIDB4MTgoJXI4KSwlcmF4CiAgICA2YzI0Ogk0 OSA4YiA1MCAyMCAgICAgICAgICAJbW92ICAgIDB4MjAoJXI4KSwlcmR4CgoJCWlmICghcHNrYl9t YXlfcHVsbChza2IsIHNpemVvZihzdHJ1Y3QgaXB2NmhkcikpKQoJCQlyZXR1cm4gZmFsc2U7CgkJ cGlwNiA9IGlwdjZfaGRyKHNrYik7CgkJbiA9IG5laWdoX2xvb2t1cChpcHY2X3N0dWItPm5kX3Ri bCwgJnBpcDYtPmRhZGRyLCBkZXYpOwoJCWlmICghbiAmJiAodnhsYW4tPmZsYWdzICYgVlhMQU5f Rl9MM01JU1MpKSB7CiAgICA2YzI4Ogk0OCA4OSA0NCAyNCAzOCAgICAgICAJbW92ICAgICVyYXgs MHgzOCglcnNwKQogICAgNmMyZDoJNDggODkgNTQgMjQgNDAgICAgICAgCW1vdiAgICAlcmR4LDB4 NDAoJXJzcCkKICAgIDZjMzI6CWU4IDE5IGI0IGZmIGZmICAgICAgIAljYWxscSAgMjA1MCA8dnhs YW5faXBfbWlzcz4KCQkJdW5pb24gdnhsYW5fYWRkciBpcGEgPSB7CiAgICA2YzM3OgllOSBiYiBm YSBmZiBmZiAgICAgICAJam1wcSAgIDY2ZjcgPHZ4bGFuX3htaXQrMHg3Zjc+CiAgICA2YzNjOgk0 MSBmNiA4NiBkOCAwOCAwMCAwMCAJdGVzdGIgICQweDEwLDB4OGQ4KCVyMTQpCiAgICA2YzQzOgkx MCAKICAgIDZjNDQ6CTBmIDg0IDFkIGZhIGZmIGZmICAgIAlqZSAgICAgNjY2NyA8dnhsYW5feG1p dCsweDc2Nz4KICAgIDZjNGE6CTQ4IDhkIDdjIDI0IDMwICAgICAgIAlsZWEgICAgMHgzMCglcnNw KSwlcmRpCgkJCQkuc2luNi5zaW42X2FkZHIgPSBwaXA2LT5kYWRkciwKCQkJCS5zaW42LnNpbjZf ZmFtaWx5ID0gQUZfSU5FVDYsCgkJCX07CgoJCQl2eGxhbl9pcF9taXNzKGRldiwgJmlwYSk7CiAg ICA2YzRmOgkzMSBjMCAgICAgICAgICAgICAgICAJeG9yICAgICVlYXgsJWVheAoJCWlmICghcHNr Yl9tYXlfcHVsbChza2IsIHNpemVvZihzdHJ1Y3QgaXB2NmhkcikpKQoJCQlyZXR1cm4gZmFsc2U7 CgkJcGlwNiA9IGlwdjZfaGRyKHNrYik7CgkJbiA9IG5laWdoX2xvb2t1cChpcHY2X3N0dWItPm5k X3RibCwgJnBpcDYtPmRhZGRyLCBkZXYpOwoJCWlmICghbiAmJiAodnhsYW4tPmZsYWdzICYgVlhM QU5fRl9MM01JU1MpKSB7CgkJCXVuaW9uIHZ4bGFuX2FkZHIgaXBhID0gewogICAgNmM1MToJYjkg MDcgMDAgMDAgMDAgICAgICAgCW1vdiAgICAkMHg3LCVlY3gKICAgIDZjNTY6CTQ4IDhkIDc0IDI0 IDMwICAgICAgIAlsZWEgICAgMHgzMCglcnNwKSwlcnNpCiAgICA2YzViOglmMyBhYiAgICAgICAg ICAgICAgICAJcmVwIHN0b3MgJWVheCwlZXM6KCVyZGkpCiAgICA2YzVkOgk4YiA0NCAyNCAyYyAg ICAgICAgICAJbW92ICAgIDB4MmMoJXJzcCksJWVheAogICAgNmM2MToJNGMgODkgZjcgICAgICAg ICAgICAgCW1vdiAgICAlcjE0LCVyZGkKCQkJCS5zaW42LnNpbjZfYWRkciA9IHBpcDYtPmRhZGRy LAoJCQkJLnNpbjYuc2luNl9mYW1pbHkgPSBBRl9JTkVUNiwKCQkJfTsKCgkJCXZ4bGFuX2lwX21p c3MoZGV2LCAmaXBhKTsKICAgIDZjNjQ6CTY2IGM3IDQ0IDI0IDMwIDAyIDAwIAltb3Z3ICAgJDB4 MiwweDMwKCVyc3ApCiAgICA2YzZiOgk4OSA0NCAyNCAzNCAgICAgICAgICAJbW92ICAgICVlYXgs MHgzNCglcnNwKQoJCXJlcGx5LT5pcF9zdW1tZWQgPSBDSEVDS1NVTV9VTk5FQ0VTU0FSWTsKCQly ZXBseS0+cGt0X3R5cGUgPSBQQUNLRVRfSE9TVDsKCgkJaWYgKG5ldGlmX3J4X25pKHJlcGx5KSA9 PSBORVRfUlhfRFJPUCkKCQkJZGV2LT5zdGF0cy5yeF9kcm9wcGVkKys7Cgl9IGVsc2UgaWYgKHZ4 bGFuLT5mbGFncyAmIFZYTEFOX0ZfTDNNSVNTKSB7CiAgICA2YzZmOgllOCBkYyBiMyBmZiBmZiAg ICAgICAJY2FsbHEgIDIwNTAgPHZ4bGFuX2lwX21pc3M+CiAgICA2Yzc0OgllOSBlZSBmOSBmZiBm ZiAgICAgICAJam1wcSAgIDY2NjcgPHZ4bGFuX3htaXQrMHg3Njc+CiAgICA2Yzc5Ogk0OCA4YiA4 YiBkMCAwMCAwMCAwMCAJbW92ICAgIDB4ZDAoJXJieCksJXJjeAoJCXVuaW9uIHZ4bGFuX2FkZHIg aXBhID0gewogICAgNmM4MDoJZTkgMjMgZjggZmYgZmYgICAgICAgCWptcHEgICA2NGE4IDx2eGxh bl94bWl0KzB4NWE4PgoKRGlzYXNzZW1ibHkgb2Ygc2VjdGlvbiAuaW5pdC50ZXh0OgoKMDAwMDAw MDAwMDAwMDAwMCA8aW5pdF9tb2R1bGU+OgogICAwOgk1NSAgICAgICAgICAgICAgICAgICAJcHVz aCAgICVyYnAKICAgMToJYmUgMDQgMDAgMDAgMDAgICAgICAgCW1vdiAgICAkMHg0LCVlc2kKICAg NjoJNDggYzcgYzcgMDAgMDAgMDAgMDAgCW1vdiAgICAkMHgwLCVyZGkKICAgZDoJNDggODkgZTUg ICAgICAgICAgICAgCW1vdiAgICAlcnNwLCVyYnAKICAxMDoJNDEgNTQgICAgICAgICAgICAgICAg CXB1c2ggICAlcjEyCiAgMTI6CTUzICAgICAgICAgICAgICAgICAgIAlwdXNoICAgJXJieAogIDEz OgllOCAwMCAwMCAwMCAwMCAgICAgICAJY2FsbHEgIDE4IDxpbml0X21vZHVsZSsweDE4PgogIDE4 Ogk0OCBjNyBjNyAwMCAwMCAwMCAwMCAJbW92ICAgICQweDAsJXJkaQogIDFmOgllOCAwMCAwMCAw MCAwMCAgICAgICAJY2FsbHEgIDI0IDxpbml0X21vZHVsZSsweDI0PgogIDI0Ogk4NSBjMCAgICAg ICAgICAgICAgICAJdGVzdCAgICVlYXgsJWVheAogIDI2Ogk0MSA4OSBjNCAgICAgICAgICAgICAJ bW92ICAgICVlYXgsJXIxMmQKICAyOToJNzUgNDEgICAgICAgICAgICAgICAgCWpuZSAgICA2YyA8 aW5pdF9tb2R1bGUrMHg2Yz4KICAyYjoJNDggYzcgYzcgMDAgMDAgMDAgMDAgCW1vdiAgICAkMHgw LCVyZGkKfQoKLyogTG9vayB1cCBFdGhlcm5ldCBhZGRyZXNzIGluIGZvcndhcmRpbmcgdGFibGUg Ki8Kc3RhdGljIHN0cnVjdCB2eGxhbl9mZGIgKl9fdnhsYW5fZmluZF9tYWMoc3RydWN0IHZ4bGFu X2RldiAqdnhsYW4sCgkJCQkJY29uc3QgdTggKm1hYykKewogIDMyOgllOCAwMCAwMCAwMCAwMCAg ICAgICAJY2FsbHEgIDM3IDxpbml0X21vZHVsZSsweDM3PgoJc3RydWN0IGhsaXN0X2hlYWQgKmhl YWQgPSB2eGxhbl9mZGJfaGVhZCh2eGxhbiwgbWFjKTsKCXN0cnVjdCB2eGxhbl9mZGIgKmY7CgoJ aGxpc3RfZm9yX2VhY2hfZW50cnlfcmN1KGYsIGhlYWQsIGhsaXN0KSB7CiAgMzc6CTg1IGMwICAg ICAgICAgICAgICAgIAl0ZXN0ICAgJWVheCwlZWF4CiAgMzk6CTg5IGMzICAgICAgICAgICAgICAg IAltb3YgICAgJWVheCwlZWJ4CiAgM2I6CTc1IDIxICAgICAgICAgICAgICAgIAlqbmUgICAgNWUg PGluaXRfbW9kdWxlKzB4NWU+CiAgM2Q6CTQ4IGM3IGM3IDAwIDAwIDAwIDAwIAltb3YgICAgJDB4 MCwlcmRpCn0KCi8qIExvb2sgdXAgRXRoZXJuZXQgYWRkcmVzcyBpbiBmb3J3YXJkaW5nIHRhYmxl ICovCnN0YXRpYyBzdHJ1Y3QgdnhsYW5fZmRiICpfX3Z4bGFuX2ZpbmRfbWFjKHN0cnVjdCB2eGxh bl9kZXYgKnZ4bGFuLAoJCQkJCWNvbnN0IHU4ICptYWMpCnsKICA0NDoJZTggMDAgMDAgMDAgMDAg ICAgICAgCWNhbGxxICA0OSA8aW5pdF9tb2R1bGUrMHg0OT4KCXN0cnVjdCBobGlzdF9oZWFkICpo ZWFkID0gdnhsYW5fZmRiX2hlYWQodnhsYW4sIG1hYyk7CglzdHJ1Y3QgdnhsYW5fZmRiICpmOwoK CWhsaXN0X2Zvcl9lYWNoX2VudHJ5X3JjdShmLCBoZWFkLCBobGlzdCkgewogIDQ5Ogk4OSBjMyAg ICAgICAgICAgICAgICAJbW92ICAgICVlYXgsJWVieAogIDRiOgk0NCA4OSBlMCAgICAgICAgICAg ICAJbW92ICAgICVyMTJkLCVlYXgKICA0ZToJODUgZGIgICAgICAgICAgICAgICAgCXRlc3QgICAl ZWJ4LCVlYngKICA1MDoJNzQgMWEgICAgICAgICAgICAgICAgCWplICAgICA2YyA8aW5pdF9tb2R1 bGUrMHg2Yz4KICA1MjoJNDggYzcgYzcgMDAgMDAgMDAgMDAgCW1vdiAgICAkMHgwLCVyZGkKICA1 OToJZTggMDAgMDAgMDAgMDAgICAgICAgCWNhbGxxICA1ZSA8aW5pdF9tb2R1bGUrMHg1ZT4KICA1 ZToJNDggYzcgYzcgMDAgMDAgMDAgMDAgCW1vdiAgICAkMHgwLCVyZGkKICA2NToJZTggMDAgMDAg MDAgMDAgICAgICAgCWNhbGxxICA2YSA8aW5pdF9tb2R1bGUrMHg2YT4KCQlpZiAoZXRoZXJfYWRk cl9lcXVhbChtYWMsIGYtPmV0aF9hZGRyKSkKICA2YToJODkgZDggICAgICAgICAgICAgICAgCW1v diAgICAlZWJ4LCVlYXgKICA2YzoJNWIgICAgICAgICAgICAgICAgICAgCXBvcCAgICAlcmJ4CiAg NmQ6CTQxIDVjICAgICAgICAgICAgICAgIAlwb3AgICAgJXIxMgogIDZmOgk1ZCAgICAgICAgICAg ICAgICAgICAJcG9wICAgICVyYnAKICA3MDoJYzMgICAgICAgICAgICAgICAgICAgCXJldHEgICAK CkRpc2Fzc2VtYmx5IG9mIHNlY3Rpb24gLmV4aXQudGV4dDoKCjAwMDAwMDAwMDAwMDAwMDAgPGNs ZWFudXBfbW9kdWxlPjoKICAgMDoJNTUgICAgICAgICAgICAgICAgICAgCXB1c2ggICAlcmJwCiAg IDE6CTQ4IGM3IGM3IDAwIDAwIDAwIDAwIAltb3YgICAgJDB4MCwlcmRpCiAgIDg6CTQ4IDg5IGU1 ICAgICAgICAgICAgIAltb3YgICAgJXJzcCwlcmJwCiAgIGI6CWU4IDAwIDAwIDAwIDAwICAgICAg IAljYWxscSAgMTAgPGNsZWFudXBfbW9kdWxlKzB4MTA+CiAgMTA6CTQ4IGM3IGM3IDAwIDAwIDAw IDAwIAltb3YgICAgJDB4MCwlcmRpCiAgMTc6CWU4IDAwIDAwIDAwIDAwICAgICAgIAljYWxscSAg MWMgPGNsZWFudXBfbW9kdWxlKzB4MWM+CiAgMWM6CTQ4IGM3IGM3IDAwIDAwIDAwIDAwIAltb3Yg ICAgJDB4MCwlcmRpCiAgMjM6CWU4IDAwIDAwIDAwIDAwICAgICAgIAljYWxscSAgMjggPGNsZWFu dXBfbW9kdWxlKzB4Mjg+CiAgMjg6CTVkICAgICAgICAgICAgICAgICAgIAlwb3AgICAgJXJicAog IDI5OgljMyAgICAgICAgICAgICAgICAgICAJcmV0cSAgIAo= --001a114e63c20871e1053eb86123--