Return-Path: MIME-Version: 1.0 In-Reply-To: References: Date: Wed, 20 Jan 2010 17:58:18 -0200 Message-ID: Subject: Re: [RFC] HFP support into oFono and BlueZ From: "Gustavo F. Padovan" To: linux-bluetooth , ofono@ofono.org, zhenhua.zhang@intel.com Content-Type: multipart/mixed; boundary=000e0cd61a52050a8b047d9e0284 Sender: linux-bluetooth-owner@vger.kernel.org List-ID: --000e0cd61a52050a8b047d9e0284 Content-Type: text/plain; charset=UTF-8 > New version of the patches. Known issues: > "'org.bluez.HandsfreeAgent.Release' part not implemented" and it's not > working with more than one bluetooth devices in some cases. Comments > are welcome. > Another new version of the patches. Now ofono query all bluetooth devices and searches for the ones with Gateway interface. Bluez has some fixes and now supports connection coming from the AG. The patches are using a per-device agent as described by the last version of Handsfree API. I did not implemented yet 'org.bluez.HandsfreeAgent.Release'. Comments are welcome. :) -- Gustavo F. Padovan ProFUSION embedded systems - http://profusion.mobi --000e0cd61a52050a8b047d9e0284 Content-Type: application/octet-stream; name="0001-clean-up-audio-gateway.c.patch" Content-Disposition: attachment; filename="0001-clean-up-audio-gateway.c.patch" Content-Transfer-Encoding: base64 X-Attachment-Id: f_g4oj6fc53 RnJvbSAxZGVlODY2NzMyNTc2MjU4MjMxMzc3MTdiMDZkMDc1N2Q1NzE1NzgxIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBHdXN0YXZvIEYuIFBhZG92YW4gPHBhZG92YW5AcHJvZnVzaW9u Lm1vYmk+CkRhdGU6IEZyaSwgNiBOb3YgMjAwOSAxODowODo1OCAtMDIwMApTdWJqZWN0OiBbUEFU Q0ggMS8yXSBjbGVhbiB1cCBhdWRpby9nYXRld2F5LmMKCnJlbW92ZSBhbGwgY29kZSByZWxhdGVk IHRvIHRoZSBBVCBlbmdpbmUKLS0tCiBhdWRpby9nYXRld2F5LmMgfCAgNzYwICstLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIDEgZmlsZXMgY2hh bmdlZCwgMSBpbnNlcnRpb25zKCspLCA3NTkgZGVsZXRpb25zKC0pCgpkaWZmIC0tZ2l0IGEvYXVk aW8vZ2F0ZXdheS5jIGIvYXVkaW8vZ2F0ZXdheS5jCmluZGV4IGExYzFlYTIuLjNkYzA5ZmYgMTAw NjQ0Ci0tLSBhL2F1ZGlvL2dhdGV3YXkuYworKysgYi9hdWRpby9nYXRld2F5LmMKQEAgLTUzLDUy ICs1Myw2IEBACiAjaW5jbHVkZSAiZGJ1cy1jb21tb24uaCIKIAogI2RlZmluZSBSRkNPTU1fQlVG X1NJWkUgMjU2Ci0vKiBub3QtbW9yZS10aGVuLTE2IGRlZmluZWQgYnkgR1NNICsgMSBmb3IgTlVM TCArIHBhZGRpbmcgKi8KLSNkZWZpbmUgQUdfSU5ESUNBVE9SX0RFU0NSX1NJWkUgMjAKLSNkZWZp bmUgQUdfQ0FMTEVSX05VTV9TSVpFIDY0CS8qIHNpemUgb2YgbnVtYmVyICsgdHlwZSAqLwotCi0v KiBjb21tYW5kcyAqLwotI2RlZmluZSBBR19GRUFUVVJFUyAiQVQrQlJTRj0yNlxyIiAgICAgLyog PSAweDdGID0gQWxsIGZlYXR1cmVzIHN1cHBvcnRlZCAqLwotI2RlZmluZSBBR19JTkRJQ0FUT1JT X1NVUFAgIkFUK0NJTkQ9P1xyIgotI2RlZmluZSBBR19JTkRJQ0FUT1JTX1ZBTCAiQVQrQ0lORD9c ciIKLSNkZWZpbmUgQUdfSU5ESUNBVE9SU19FTkFCTEUgIkFUK0NNRVI9MywwLDAsMVxyIgotI2Rl ZmluZSBBR19IT0xEX01QVFlfU1VQUCAiQVQrQ0hMRD0/XHIiCi0jZGVmaW5lIEFHX0NBTExFUl9J REVOVF9FTkFCTEUgIkFUK0NMSVA9MVxyIgotI2RlZmluZSBBR19DQVJSSUVSX0ZPUk1BVCAiQVQr Q09QUz0zLDBcciIKLSNkZWZpbmUgQUdfRVhURU5ERURfUkVTVUxUX0NPREUgIkFUK0NNRUU9MVxy IgotCi0jZGVmaW5lIEFHX0ZFQVRVUkVfM1dBWSAweDEKLSNkZWZpbmUgQUdfRkVBVFVSRV9FWFRF TkRFRF9SRVNfQ09ERSAweDEwMAotLyogSG9sZCBhbmQgbXVsdGlwYXJ5IEFHIGZlYXR1cmVzLgot ICogQ29tbWVudHMgYmVsb3cgYXJlIGNvcGllZCBmcm9tIGhhbmRzLWZyZWUgc3BlYyBmb3IgcmVm ZXJlbmNlICovCi0vKiBSZWxlYXNlcyBhbGwgaGVsZCBjYWxscyBvciBzZXRzIFVzZXIgRGV0ZXJt aW5lZCBVc2VyIEJ1c3kgKFVEVUIpCi0gKiBmb3IgYSB3YWl0aW5nIGNhbGwgKi8KLSNkZWZpbmUg QUdfQ0hMRF8wIDB4MDEKLS8qIFJlbGVhc2VzIGFsbCBhY3RpdmUgY2FsbHMgKGlmIGFueSBleGlz dCkgYW5kIGFjY2VwdHMgdGhlIG90aGVyCi0gKiAoaGVsZCBvciB3YWl0aW5nKSBjYWxsICovCi0j ZGVmaW5lIEFHX0NITERfMSAweDAyCi0vKiBSZWxlYXNlcyBzcGVjaWZpZWQgYWN0aXZlIGNhbGwg b25seSA8eD4gKi8KLSNkZWZpbmUgQUdfQ0hMRF8xeCAweDA0Ci0vKiBQbGFjZXMgYWxsIGFjdGl2 ZSBjYWxscyAoaWYgYW55IGV4aXN0KSBvbiBob2xkIGFuZCBhY2NlcHRzIHRoZSBvdGhlcgotICog KGhlbGQgb3Igd2FpdGluZykgY2FsbCAqLwotI2RlZmluZSBBR19DSExEXzIgMHgwOAotLyogUmVx dWVzdCBwcml2YXRlIGNvbnN1bHRhdGlvbiBtb2RlIHdpdGggc3BlY2lmaWVkIGNhbGwgPHg+IChQ bGFjZSBhbGwKLSAqIGNhbGxzIG9uIGhvbGQgRVhDRVBUIHRoZSBjYWxsIDx4PikgKi8KLSNkZWZp bmUgQUdfQ0hMRF8yeCAweDEwCi0vKiBBZGRzIGEgaGVsZCBjYWxsIHRvIHRoZSBjb252ZXJzYXRp b24gKi8KLSNkZWZpbmUgQUdfQ0hMRF8zIDB4MjAKLS8qIENvbm5lY3RzIHRoZSB0d28gY2FsbHMg YW5kIGRpc2Nvbm5lY3RzIHRoZSBzdWJzY3JpYmVyIGZyb20gYm90aCBjYWxscwotICogKEV4cGxp Y2l0IENhbGwgVHJhbnNmZXIpLiBTdXBwb3J0IGZvciB0aGlzIHZhbHVlIGFuZCBpdHMgYXNzb2Np YXRlZAotICogZnVuY3Rpb25hbGl0eSBpcyBvcHRpb25hbCBmb3IgdGhlIEhGLiAqLwotI2RlZmlu ZSBBR19DSExEXzQgMHg0MAotCi0jZGVmaW5lIE9LX1JFU1BPTlNFICJcclxuT0tcclxuIgotI2Rl ZmluZSBFUlJPUl9SRVNQT05TRSAiXHJcbkVSUk9SXHJcbiIKLQotc3RydWN0IGluZGljYXRvciB7 Ci0JZ2NoYXIgZGVzY3JbQUdfSU5ESUNBVE9SX0RFU0NSX1NJWkVdOwotCWdpbnQgdmFsdWU7Ci19 OwogCiBzdHJ1Y3QgZ2F0ZXdheSB7CiAJZ2F0ZXdheV9zdGF0ZV90IHN0YXRlOwpAQCAtMTA4LDM4 NyArNjIsMTAgQEAgc3RydWN0IGdhdGV3YXkgewogCWdhdGV3YXlfc3RyZWFtX2NiX3Qgc2NvX3N0 YXJ0X2NiOwogCXZvaWQgKnNjb19zdGFydF9jYl9kYXRhOwogCURCdXNNZXNzYWdlICpjb25uZWN0 X21lc3NhZ2U7Ci0JZ3VpbnQgYWdfZmVhdHVyZXM7Ci0JZ3VpbnQgaG9sZF9tdWx0aXBhcnR5X2Zl YXR1cmVzOwotCUdTTGlzdCAqaW5kaWVzOwotCWdib29sZWFuIGlzX2RpYWxpbmc7Ci0JZ2Jvb2xl YW4gY2FsbF9hY3RpdmU7Ci0KLQlpbnQgc3BfZ2FpbjsKLQlpbnQgbWljX2dhaW47CiB9OwogCi1z dGF0aWMgZ2Jvb2xlYW4gcmZjb21tX2FnX2RhdGFfY2IoR0lPQ2hhbm5lbCAqY2hhbiwgR0lPQ29u ZGl0aW9uIGNvbmQsCi0JCQkJCXN0cnVjdCBhdWRpb19kZXZpY2UgKmRldmljZSk7Ci0KIGludCBn YXRld2F5X2Nsb3NlKHN0cnVjdCBhdWRpb19kZXZpY2UgKmRldmljZSk7CiAKLXN0YXRpYyB2b2lk IHJmY29tbV9zdGFydF93YXRjaChzdHJ1Y3QgYXVkaW9fZGV2aWNlICpkZXYpCi17Ci0Jc3RydWN0 IGdhdGV3YXkgKmd3ID0gZGV2LT5nYXRld2F5OwotCi0JZ3ctPnJmY29tbV93YXRjaF9pZCA9IGdf aW9fYWRkX3dhdGNoKGd3LT5yZmNvbW0sCi0JCQlHX0lPX0lOIHwgR19JT19FUlIgfCBHX0lPX0hV UCB8IEdfSU9fTlZBTCwKLQkJCShHSU9GdW5jKSByZmNvbW1fYWdfZGF0YV9jYiwgZGV2KTsKLX0K LQotc3RhdGljIHZvaWQgcmZjb21tX3N0b3Bfd2F0Y2goc3RydWN0IGF1ZGlvX2RldmljZSAqZGV2 KQotewotCXN0cnVjdCBnYXRld2F5ICpndyA9IGRldi0+Z2F0ZXdheTsKLQotCWdfc291cmNlX3Jl bW92ZShndy0+cmZjb21tX3dhdGNoX2lkKTsKLX0KLQotc3RhdGljIGdib29sZWFuIGlvX2NoYW5u ZWxfd3JpdGVfYWxsKEdJT0NoYW5uZWwgKmlvLCBnY2hhciAqZGF0YSwKLQkJCQkJZ3NpemUgY291 bnQpCi17Ci0JZ3NpemUgd3JpdHRlbiA9IDA7Ci0JR0lPU3RhdHVzIHN0YXR1czsKLQotCXdoaWxl IChjb3VudCA+IDApIHsKLQkJc3RhdHVzID0gZ19pb19jaGFubmVsX3dyaXRlX2NoYXJzKGlvLCBk YXRhLCBjb3VudCwgJndyaXR0ZW4sCi0JCQkJCQlOVUxMKTsKLQkJaWYgKHN0YXR1cyAhPSBHX0lP X1NUQVRVU19OT1JNQUwpCi0JCQlyZXR1cm4gRkFMU0U7Ci0KLQkJZGF0YSArPSB3cml0dGVuOwot CQljb3VudCAtPSB3cml0dGVuOwotCX0KLQlyZXR1cm4gVFJVRTsKLX0KLQotLyogaXQncyB3b3J0 aCB0byBtZW50aW9uIHRoYXQgZGF0YSBhbmQgcmVzcG9uc2UgY291bGQgYmUgdGhlIHNhbWUgcG9p bnRlcnMgKi8KLXN0YXRpYyBnYm9vbGVhbiByZmNvbW1fc2VuZF9hbmRfcmVhZChzdHJ1Y3QgZ2F0 ZXdheSAqZ3csIGdjaGFyICpkYXRhLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgZ2NoYXIgKnJlc3BvbnNlLCBnc2l6ZSBjb3VudCkKLXsKLQlHSU9DaGFubmVsICpyZmNvbW0g PSBndy0+cmZjb21tOwotCWdzaXplIHJlYWQgPSAwOwotCWdib29sZWFuIGdvdF9vayA9IEZBTFNF OwotCWdib29sZWFuIGdvdF9lcnJvciA9IEZBTFNFOwotCWdjaGFyICpyZXNwX2J1ZiA9IHJlc3Bv bnNlOwotCWdzaXplIHRvcmVhZCA9IFJGQ09NTV9CVUZfU0laRSAtIDE7Ci0JR0lPU3RhdHVzIHN0 YXR1czsKLQotCWlmICghaW9fY2hhbm5lbF93cml0ZV9hbGwocmZjb21tLCBkYXRhLCBjb3VudCkp Ci0JCXJldHVybiBGQUxTRTsKLQotCXdoaWxlICghKGdvdF9vayB8fCBnb3RfZXJyb3IpKSB7Ci0J CXN0YXR1cyA9IGdfaW9fY2hhbm5lbF9yZWFkX2NoYXJzKHJmY29tbSwgcmVzcF9idWYsIHRvcmVh ZCwKLQkJCQkJCSZyZWFkLCBOVUxMKTsKLQkJaWYgKHN0YXR1cyA9PSBHX0lPX1NUQVRVU19OT1JN QUwpCi0JCQlyZXNwX2J1ZltyZWFkXSA9ICdcMCc7Ci0JCWVsc2UgewotCQkJZGVidWcoInJmY29t bV9zZW5kX2FuZF9yZWFkKCk6ICVtIik7Ci0JCQlyZXR1cm4gRkFMU0U7Ci0JCX0KLQkJZ290X29r ID0gTlVMTCAhPSBzdHJzdHIocmVzcF9idWYsIE9LX1JFU1BPTlNFKTsKLQkJZ290X2Vycm9yID0g TlVMTCAhPSBzdHJzdHIocmVzcF9idWYsIEVSUk9SX1JFU1BPTlNFKTsKLQkJcmVzcF9idWYgKz0g cmVhZDsKLQkJdG9yZWFkIC09IHJlYWQ7Ci0JfQotCXJldHVybiBUUlVFOwotfQotCi0vKiBnZXQg PGRlc2NyPiBmcm9tIHRoZSBuYW1lczogKDxkZXNjcj4sICg8dmFsdWVzPikpLCAoPGRlc2NyPiwg KDx2YWx1ZXM+KSkKLSAqIC4uLiAqLwotc3RhdGljIEdTTGlzdCAqcGFyc2VfaW5kaWNhdG9yX25h bWVzKGdjaGFyICpuYW1lcywgR1NMaXN0ICppbmRpZXMpCi17Ci0JZ2NoYXIgKmN1cnJlbnQgPSBu YW1lcyAtIDE7Ci0JR1NMaXN0ICpyZXN1bHQgPSBpbmRpZXM7Ci0JZ2NoYXIgKm5leHQ7Ci0Jc3Ry dWN0IGluZGljYXRvciAqaW5kOwotCi0Jd2hpbGUgKGN1cnJlbnQgIT0gTlVMTCkgewotCQljdXJy ZW50ICs9IDI7Ci0JCW5leHQgPSBzdHJzdHIoY3VycmVudCwgIiwoIik7Ci0JCWluZCA9IGdfc2xp Y2VfbmV3KHN0cnVjdCBpbmRpY2F0b3IpOwotCQlzdHJuY3B5KGluZC0+ZGVzY3IsIGN1cnJlbnQs IDIwKTsKLQkJaW5kLT5kZXNjclsoaW50cHRyX3QpIG5leHQgLSAoaW50cHRyX3QpIGN1cnJlbnRd ID0gJ1wwJzsKLQkJcmVzdWx0ID0gZ19zbGlzdF9hcHBlbmQocmVzdWx0LCAoZ3BvaW50ZXIpIGlu ZCk7Ci0JCWN1cnJlbnQgPSBzdHJzdHIobmV4dCArIDEsICIsKCIpOwotCX0KLQlyZXR1cm4gcmVz dWx0OwotfQotCi0vKiBnZXQgdmFsdWVzIGZyb20gPHZhbDA+LDx2YWwxPiwuLi4gKi8KLXN0YXRp YyBHU0xpc3QgKnBhcnNlX2luZGljYXRvcl92YWx1ZXMoZ2NoYXIgKnZhbHVlcywgR1NMaXN0ICpp bmRpZXMpCi17Ci0JZ2ludCB2YWw7Ci0JZ2NoYXIgKmN1cnJlbnQgPSB2YWx1ZXMgLSAxOwotCUdT TGlzdCAqcnVubmVyID0gaW5kaWVzOwotCXN0cnVjdCBpbmRpY2F0b3IgKmluZDsKLQotCXdoaWxl IChjdXJyZW50ICE9IE5VTEwpIHsKLQkJY3VycmVudCArPSAxOwotCQlzc2NhbmYoY3VycmVudCwg IiVkIiwgJnZhbCk7Ci0JCWN1cnJlbnQgPSBzdHJjaHIoY3VycmVudCwgJywnKTsKLQkJaW5kID0g Z19zbGlzdF9udGhfZGF0YShydW5uZXIsIDApOwotCQlpbmQtPnZhbHVlID0gdmFsOwotCQlydW5u ZXIgPSBnX3NsaXN0X25leHQocnVubmVyKTsKLQl9Ci0JcmV0dXJuIGluZGllczsKLX0KLQotLyog Z2V0IHZhbHVlcyBmcm9tIDx2YWwwPiw8dmFsMT4sLi4uICovCi1zdGF0aWMgZ3VpbnQgZ2V0X2hv bGRfbXB0eV9mZWF0dXJlcyhnY2hhciAqZmVhdHVyZXMpCi17Ci0JZ3VpbnQgcmVzdWx0ID0gMDsK LQotCWlmIChzdHJzdHIoZmVhdHVyZXMsICIwIikpCi0JCXJlc3VsdCB8PSBBR19DSExEXzA7Ci0K LQlpZiAoc3Ryc3RyKGZlYXR1cmVzLCAiMSIpKQotCQlyZXN1bHQgfD0gQUdfQ0hMRF8xOwotCi0J aWYgKHN0cnN0cihmZWF0dXJlcywgIjF4IikpCi0JCXJlc3VsdCB8PSBBR19DSExEXzF4OwotCi0J aWYgKHN0cnN0cihmZWF0dXJlcywgIjIiKSkKLQkJcmVzdWx0IHw9IEFHX0NITERfMjsKLQotCWlm IChzdHJzdHIoZmVhdHVyZXMsICIyeCIpKQotCQlyZXN1bHQgfD0gQUdfQ0hMRF8yeDsKLQotCWlm IChzdHJzdHIoZmVhdHVyZXMsICIzIikpCi0JCXJlc3VsdCB8PSBBR19DSExEXzM7Ci0KLQlpZiAo c3Ryc3RyKGZlYXR1cmVzLCAiNCIpKQotCQlyZXN1bHQgfD0gQUdfQ0hMRF80OwotCi0JcmV0dXJu IHJlc3VsdDsKLX0KLQotc3RhdGljIGdib29sZWFuIGVzdGFibGlzaF9zZXJ2aWNlX2xldmVsX2Nv bm4oc3RydWN0IGdhdGV3YXkgKmd3KQotewotCWdjaGFyIGJ1ZltSRkNPTU1fQlVGX1NJWkVdOwot CWdib29sZWFuIHJlczsKLQotCWRlYnVnKCJhdCB0aGUgYmVnaW4gb2YgZXN0YWJsaXNoX3NlcnZp Y2VfbGV2ZWxfY29ubigpIik7Ci0JcmVzID0gcmZjb21tX3NlbmRfYW5kX3JlYWQoZ3csIEFHX0ZF QVRVUkVTLCBidWYsCi0JCQkJc2l6ZW9mKEFHX0ZFQVRVUkVTKSAtIDEpOwotCWlmICghcmVzIHx8 IHNzY2FuZihidWYsICJcclxuK0JSU0Y6JWQiLCAmZ3ctPmFnX2ZlYXR1cmVzKSAhPSAxKQotCQly ZXR1cm4gRkFMU0U7Ci0KLQlkZWJ1ZygiZmVhdHVyZXMgYXJlIDB4JVgiLCBndy0+YWdfZmVhdHVy ZXMpOwotCXJlcyA9IHJmY29tbV9zZW5kX2FuZF9yZWFkKGd3LCBBR19JTkRJQ0FUT1JTX1NVUFAs IGJ1ZiwKLQkJCQlzaXplb2YoQUdfSU5ESUNBVE9SU19TVVBQKSAtIDEpOwotCWlmICghcmVzIHx8 ICFzdHJzdHIoYnVmLCAiK0NJTkQ6IikpCi0JCXJldHVybiBGQUxTRTsKLQotCWd3LT5pbmRpZXMg PSBwYXJzZV9pbmRpY2F0b3JfbmFtZXMoc3RyY2hyKGJ1ZiwgJygnKSwgTlVMTCk7Ci0KLQlyZXMg PSByZmNvbW1fc2VuZF9hbmRfcmVhZChndywgQUdfSU5ESUNBVE9SU19WQUwsIGJ1ZiwKLQkJc2l6 ZW9mKEFHX0lORElDQVRPUlNfVkFMKSAtIDEpOwotCWlmICghcmVzIHx8ICFzdHJzdHIoYnVmLCAi K0NJTkQ6IikpCi0JCXJldHVybiBGQUxTRTsKLQotCWd3LT5pbmRpZXMgPSBwYXJzZV9pbmRpY2F0 b3JfdmFsdWVzKHN0cmNocihidWYsICc6JykgKyAxLCBndy0+aW5kaWVzKTsKLQotCXJlcyA9IHJm Y29tbV9zZW5kX2FuZF9yZWFkKGd3LCBBR19JTkRJQ0FUT1JTX0VOQUJMRSwgYnVmLAotCQkJCXNp emVvZihBR19JTkRJQ0FUT1JTX0VOQUJMRSkgLSAxKTsKLQlpZiAoIXJlcyB8fCAhc3Ryc3RyKGJ1 ZiwgIk9LIikpCi0JCXJldHVybiBGQUxTRTsKLQotCWlmICgoZ3ctPmFnX2ZlYXR1cmVzICYgQUdf RkVBVFVSRV8zV0FZKSAhPSAwKSB7Ci0JCXJlcyA9IHJmY29tbV9zZW5kX2FuZF9yZWFkKGd3LCBB R19IT0xEX01QVFlfU1VQUCwgYnVmLAotCQkJCXNpemVvZihBR19IT0xEX01QVFlfU1VQUCkgLSAx KTsKLQkJaWYgKCFyZXMgfHwgIXN0cnN0cihidWYsICIrQ0hMRDoiKSkgewotCQkJZ19zbGljZV9m cmVlMShSRkNPTU1fQlVGX1NJWkUsIGJ1Zik7Ci0JCQlyZXR1cm4gRkFMU0U7Ci0JCX0KLQkJZ3ct PmhvbGRfbXVsdGlwYXJ0eV9mZWF0dXJlcyA9IGdldF9ob2xkX21wdHlfZmVhdHVyZXMoCi0JCQkJ CQkJc3RyY2hyKGJ1ZiwgJygnKSk7Ci0KLQl9IGVsc2UKLQkJZ3ctPmhvbGRfbXVsdGlwYXJ0eV9m ZWF0dXJlcyA9IDA7Ci0KLQlkZWJ1ZygiU2VydmljZSBsYXllciBjb25uZWN0aW9uIHN1Y2Nlc3Nm dWxseSBlc3RhYmxpc2hlZCEiKTsKLQlyZmNvbW1fc2VuZF9hbmRfcmVhZChndywgQUdfQ0FMTEVS X0lERU5UX0VOQUJMRSwgYnVmLAotCQkJc2l6ZW9mKEFHX0NBTExFUl9JREVOVF9FTkFCTEUpIC0g MSk7Ci0JcmZjb21tX3NlbmRfYW5kX3JlYWQoZ3csIEFHX0NBUlJJRVJfRk9STUFULCBidWYsCi0J CQlzaXplb2YoQUdfQ0FSUklFUl9GT1JNQVQpIC0gMSk7Ci0JaWYgKChndy0+YWdfZmVhdHVyZXMg JiBBR19GRUFUVVJFX0VYVEVOREVEX1JFU19DT0RFKSAhPSAwKQotCQlyZmNvbW1fc2VuZF9hbmRf cmVhZChndywgQUdfRVhURU5ERURfUkVTVUxUX0NPREUsIGJ1ZiwKLQkJCXNpemVvZihBR19FWFRF TkRFRF9SRVNVTFRfQ09ERSkgLSAxKTsKLQotCXJldHVybiBUUlVFOwotfQotCi1zdGF0aWMgdm9p ZCBwcm9jZXNzX2luZF9jaGFuZ2Uoc3RydWN0IGF1ZGlvX2RldmljZSAqZGV2LCBndWludCBpbmRl eCwKLQkJCQkJCQlnaW50IHZhbHVlKQotewotCXN0cnVjdCBnYXRld2F5ICpndyA9IGRldi0+Z2F0 ZXdheTsKLQlzdHJ1Y3QgaW5kaWNhdG9yICppbmQgPSBnX3NsaXN0X250aF9kYXRhKGd3LT5pbmRp ZXMsIGluZGV4IC0gMSk7Ci0JZ2NoYXIgKm5hbWUgPSBpbmQtPmRlc2NyOwotCi0JaW5kLT52YWx1 ZSA9IHZhbHVlOwotCi0JZGVidWcoImF0IHRoZSBiZWdpbiBvZiBwcm9jZXNzX2luZF9jaGFuZ2Us IG5hbWUgaXMgJXMiLCBuYW1lKTsKLQlpZiAoIXN0cmNtcChuYW1lLCAiXCJjYWxsXCIiKSkgewot CQlpZiAodmFsdWUgPiAwKSB7Ci0JCQlnX2RidXNfZW1pdF9zaWduYWwoZGV2LT5jb25uLCBkZXYt PnBhdGgsCi0JCQkJCUFVRElPX0dBVEVXQVlfSU5URVJGQUNFLAotCQkJCQkiQ2FsbFN0YXJ0ZWQi LCBEQlVTX1RZUEVfSU5WQUxJRCk7Ci0JCQlndy0+aXNfZGlhbGluZyA9IEZBTFNFOwotCQkJZ3ct PmNhbGxfYWN0aXZlID0gVFJVRTsKLQkJfSBlbHNlIHsKLQkJCWdfZGJ1c19lbWl0X3NpZ25hbChk ZXYtPmNvbm4sIGRldi0+cGF0aCwKLQkJCQkJQVVESU9fR0FURVdBWV9JTlRFUkZBQ0UsCi0JCQkJ CSJDYWxsRW5kZWQiLCBEQlVTX1RZUEVfSU5WQUxJRCk7Ci0JCQlndy0+Y2FsbF9hY3RpdmUgPSBG QUxTRTsKLQkJfQotCi0JfSBlbHNlIGlmICghc3RyY21wKG5hbWUsICJcImNhbGxzZXR1cFwiIikp IHsKLQkJaWYgKHZhbHVlID09IDAgJiYgZ3ctPmlzX2RpYWxpbmcpIHsKLQkJCWdfZGJ1c19lbWl0 X3NpZ25hbChkZXYtPmNvbm4sIGRldi0+cGF0aCwKLQkJCQkJQVVESU9fR0FURVdBWV9JTlRFUkZB Q0UsCi0JCQkJCSJDYWxsVGVybWluYXRlZCIsCi0JCQkJCURCVVNfVFlQRV9JTlZBTElEKTsKLQkJ CWd3LT5pc19kaWFsaW5nID0gRkFMU0U7Ci0JCX0gZWxzZSBpZiAoIWd3LT5pc19kaWFsaW5nICYm IHZhbHVlID4gMCkKLQkJCWd3LT5pc19kaWFsaW5nID0gVFJVRTsKLQotCX0gZWxzZSBpZiAoIXN0 cmNtcChuYW1lLCAiXCJjYWxsaGVsZFwiIikpIHsKLQkJLyogRklYTUU6IFRoZSBmb2xsb3dpbmcg Y29kZSBpcyBiYXNlZCBvbiBhc3N1bXB0aW9ucyBvbmx5LgotCQkgKiBIYXMgdG8gYmUgdGVzdGVk IGZvciBpbnRlcm9wZXJhYmlsaXR5Ci0JCSAqIEkgYXNzdW1lIHRoYXQgY2FsbGhlbGQ9MiB3b3Vs ZCBiZSBzZW50IHdoZW4gZGlhbCBmcm9tIEhGCi0JCSAqIGZhaWxlZCBpbiBjYXNlIG9mIDMtd2F5 IGNhbGwKLQkJICogVW5mb3J0dW5hdGVseSB0aGlzIHBhdGggaXMgbm90IGNvdmVyZWQgYnkgdGhl IEhGIHNwZWMgc28KLQkJICogdGhlIGNvZGUgaGFzIHRvIGJlIHRlc3RlZCBmb3IgaW50ZXJvcAot CQkqLwotCQkvKiAnMicgbWVhbnM6IGFsbCBjYWxscyBoZWxkLCBubyBhY3RpdmUgY2FsbHMgKi8K LQkJaWYgKHZhbHVlID09IDIpIHsKLQkJCWlmIChndy0+aXNfZGlhbGluZykgewotCQkJCWdfZGJ1 c19lbWl0X3NpZ25hbChkZXYtPmNvbm4sIGRldi0+cGF0aCwKLQkJCQkJQVVESU9fR0FURVdBWV9J TlRFUkZBQ0UsCi0JCQkJCSJDYWxsVGVybWluYXRlZCIsCi0JCQkJCURCVVNfVFlQRV9JTlZBTElE KTsKLQkJCQlndy0+aXNfZGlhbGluZyA9IEZBTFNFOwotCQkJfQotCQl9Ci0JfSBlbHNlIGlmICgh c3RyY21wKG5hbWUsICJcInNlcnZpY2VcIiIpKQotCQllbWl0X3Byb3BlcnR5X2NoYW5nZWQoZGV2 LT5jb25uLCBkZXYtPnBhdGgsCi0JCQkJQVVESU9fR0FURVdBWV9JTlRFUkZBQ0UsICJSZWdpc3Ry YXRpb25TdGF0dXMiLAotCQkJCURCVVNfVFlQRV9VSU5UMTYsICZ2YWx1ZSk7Ci0JZWxzZSBpZiAo IXN0cmNtcChuYW1lLCAiXCJzaWduYWxcIiIpKQotCQllbWl0X3Byb3BlcnR5X2NoYW5nZWQoZGV2 LT5jb25uLCBkZXYtPnBhdGgsCi0JCQkJQVVESU9fR0FURVdBWV9JTlRFUkZBQ0UsICJTaWduYWxT dHJlbmd0aCIsCi0JCQkJREJVU19UWVBFX1VJTlQxNiwgJnZhbHVlKTsKLQllbHNlIGlmICghc3Ry Y21wKG5hbWUsICJcInJvYW1cIiIpKQotCQllbWl0X3Byb3BlcnR5X2NoYW5nZWQoZGV2LT5jb25u LCBkZXYtPnBhdGgsCi0JCQkJQVVESU9fR0FURVdBWV9JTlRFUkZBQ0UsICJSb2FtaW5nU3RhdHVz IiwKLQkJCQlEQlVTX1RZUEVfVUlOVDE2LCAmdmFsdWUpOwotCWVsc2UgaWYgKCFzdHJjbXAobmFt ZSwgIlwiYmF0dGNoZ1wiIikpCi0JCWVtaXRfcHJvcGVydHlfY2hhbmdlZChkZXYtPmNvbm4sIGRl di0+cGF0aCwKLQkJCQlBVURJT19HQVRFV0FZX0lOVEVSRkFDRSwgIkJhdHRlcnlDaGFyZ2UiLAot CQkJCURCVVNfVFlQRV9VSU5UMTYsICZ2YWx1ZSk7Ci19Ci0KLXN0YXRpYyB2b2lkIHByb2Nlc3Nf cmluZyhzdHJ1Y3QgYXVkaW9fZGV2aWNlICpkZXZpY2UsIEdJT0NoYW5uZWwgKmNoYW4sCi0JCQln Y2hhciAqYnVmKQotewotCWdjaGFyIG51bWJlcltBR19DQUxMRVJfTlVNX1NJWkVdOwotCWdjaGFy ICpjbGk7Ci0JZ2NoYXIgKnNlcDsKLQlnc2l6ZSByZWFkOwotCUdJT1N0YXR1cyBzdGF0dXM7Ci0K LQlyZmNvbW1fc3RvcF93YXRjaChkZXZpY2UpOwotCXN0YXR1cyA9IGdfaW9fY2hhbm5lbF9yZWFk X2NoYXJzKGNoYW4sIGJ1ZiwgUkZDT01NX0JVRl9TSVpFIC0gMSwgJnJlYWQsIE5VTEwpOwotCWlm IChzdGF0dXMgIT0gR19JT19TVEFUVVNfTk9STUFMKQotCQlyZXR1cm47Ci0KLQlkZWJ1ZygiYXQg dGhlIGJlZ2luIG9mIHByb2Nlc3NfcmluZyIpOwotCWlmIChzdHJsZW4oYnVmKSA+IEFHX0NBTExF Ul9OVU1fU0laRSArIDEwKQotCQllcnJvcigicHJvY2Vzc19yaW5nKCk6IGJ1ZiBpcyB0b28gbG9u ZyAnJXMnIiwgYnVmKTsKLQllbHNlIGlmICgoY2xpID0gc3Ryc3RyKGJ1ZiwgIlxyXG4rQ0xJUCIp KSkgewotCQlpZiAoc3NjYW5mKGNsaSwgIlxyXG4rQ0xJUDogXCIlcyIsIG51bWJlcikgPT0gMSkg ewotCQkJc2VwID0gc3RyY2hyKG51bWJlciwgJyInKTsKLQkJCXNlcFswXSA9ICdcMCc7Ci0KLQkJ CS8qIEZJWE1FOnNpZ25hbCB3aWxsIGJlIGVtaXR0ZWQgb24gZWFjaCBSSU5HK0NMSVAuCi0JCQkg KiBUaGF0J3MgYmFkICovCi0JCQljbGkgPSBudW1iZXI7Ci0JCQlnX2RidXNfZW1pdF9zaWduYWwo ZGV2aWNlLT5jb25uLCBkZXZpY2UtPnBhdGgsCi0JCQkJCUFVRElPX0dBVEVXQVlfSU5URVJGQUNF LCAiUmluZyIsCi0JCQkJCURCVVNfVFlQRV9TVFJJTkcsICZjbGksCi0JCQkJCURCVVNfVFlQRV9J TlZBTElEKTsKLQkJCWRldmljZS0+Z2F0ZXdheS0+aXNfZGlhbGluZyA9IFRSVUU7Ci0JCX0gZWxz ZQotCQkJZXJyb3IoInByb2Nlc3NfcmluZygpOiAnJXMnIGluIHBsYWNlIG9mICtDTElQIGFmdGVy IFJJTkciLCBidWYpOwotCi0JfQotCi0JcmZjb21tX3N0YXJ0X3dhdGNoKGRldmljZSk7Ci19Ci0K LXN0YXRpYyBnYm9vbGVhbiByZmNvbW1fYWdfZGF0YV9jYihHSU9DaGFubmVsICpjaGFuLCBHSU9D b25kaXRpb24gY29uZCwKLQkJCQkJc3RydWN0IGF1ZGlvX2RldmljZSAqZGV2aWNlKQotewotCWdj aGFyIGJ1ZltSRkNPTU1fQlVGX1NJWkVdOwotCXN0cnVjdCBnYXRld2F5ICpndzsKLQlnc2l6ZSBy ZWFkOwotCS8qIHNvbWUgc3BhY2UgZm9yIHZhbHVlICovCi0JZ2NoYXIgaW5kaWNhdG9yW0FHX0lO RElDQVRPUl9ERVNDUl9TSVpFICsgNF07Ci0JZ2ludCB2YWx1ZTsKLQlndWludCBpbmRleDsKLQln Y2hhciAqc2VwOwotCi0JZGVidWcoImF0IHRoZSBiZWdpbiBvZiByZmNvbW1fYWdfZGF0YV9jYigp Iik7Ci0JaWYgKGNvbmQgJiBHX0lPX05WQUwpCi0JCXJldHVybiBGQUxTRTsKLQotCWd3ID0gZGV2 aWNlLT5nYXRld2F5OwotCi0JaWYgKGNvbmQgJiAoR19JT19FUlIgfCBHX0lPX0hVUCkpIHsKLQkJ ZGVidWcoImNvbm5lY3Rpb24gd2l0aCByZW1vdGUgQlQgaXMgY2xvc2VkIik7Ci0JCWdhdGV3YXlf Y2xvc2UoZGV2aWNlKTsKLQkJcmV0dXJuIEZBTFNFOwotCX0KLQotCWlmIChnX2lvX2NoYW5uZWxf cmVhZF9jaGFycyhjaGFuLCBidWYsIHNpemVvZihidWYpIC0gMSwgJnJlYWQsIE5VTEwpCi0JCQkh PSBHX0lPX1NUQVRVU19OT1JNQUwpCi0JCXJldHVybiBUUlVFOwotCWJ1ZltyZWFkXSA9ICdcMCc7 Ci0KLQlpZiAoc3RybGVuKGJ1ZikgPiBBR19JTkRJQ0FUT1JfREVTQ1JfU0laRSArIDE0KQotCQll cnJvcigicmZjb21tX2FnX2RhdGFfY2IoKTogYnVmIGlzIHRvbyBsb25nICclcyciLCBidWYpOwot CWVsc2UgaWYgKHNzY2FuZihidWYsICJcclxuK0NJRVY6JXNcclxuIiwgaW5kaWNhdG9yKSA9PSAx KSB7Ci0JCXNlcCA9IHN0cmNocihpbmRpY2F0b3IsICcsJyk7Ci0JCXNlcFswXSA9ICdcMCc7Ci0J CXNlcCArPSAxOwotCQlpbmRleCA9IGF0b2koaW5kaWNhdG9yKTsKLQkJdmFsdWUgPSBhdG9pKHNl cCk7Ci0JCXByb2Nlc3NfaW5kX2NoYW5nZShkZXZpY2UsIGluZGV4LCB2YWx1ZSk7Ci0JfSBlbHNl IGlmIChzdHJzdHIoYnVmLCAiUklORyIpKQotCQlwcm9jZXNzX3JpbmcoZGV2aWNlLCBjaGFuLCBi dWYpOwotCWVsc2UgaWYgKHNzY2FuZihidWYsICJcclxuK0JWUkE6JWRcclxuIiwgJnZhbHVlKSA9 PSAxKSB7Ci0JCWlmICh2YWx1ZSA9PSAwKQotCQkJZ19kYnVzX2VtaXRfc2lnbmFsKGRldmljZS0+ Y29ubiwgZGV2aWNlLT5wYXRoLAotCQkJCQlBVURJT19HQVRFV0FZX0lOVEVSRkFDRSwKLQkJCQkJ IlZvaWNlUmVjb2duaXRpb25BY3RpdmUiLAotCQkJCQlEQlVTX1RZUEVfSU5WQUxJRCk7Ci0JCWVs c2UKLQkJCWdfZGJ1c19lbWl0X3NpZ25hbChkZXZpY2UtPmNvbm4sIGRldmljZS0+cGF0aCwKLQkJ CQkJQVVESU9fR0FURVdBWV9JTlRFUkZBQ0UsCi0JCQkJCSJWb2ljZVJlY29nbml0aW9uSW5hY3Rp dmUiLAotCQkJCQlEQlVTX1RZUEVfSU5WQUxJRCk7Ci0JfSBlbHNlIGlmIChzc2NhbmYoYnVmLCAi XHJcbitWR1M6JWRcclxuIiwgJnZhbHVlKSA9PSAxKSB7Ci0JCWd3LT5zcF9nYWluID0gdmFsdWU7 Ci0JCWVtaXRfcHJvcGVydHlfY2hhbmdlZChkZXZpY2UtPmNvbm4sIGRldmljZS0+cGF0aCwKLQkJ CQlBVURJT19HQVRFV0FZX0lOVEVSRkFDRSwgIlNwZWFrZXJHYWluIiwKLQkJCQlEQlVTX1RZUEVf VUlOVDE2LCAmdmFsdWUpOwotCX0gZWxzZSBpZiAoc3NjYW5mKGJ1ZiwgIlxyXG4rVkdNOiVkXHJc biIsICZ2YWx1ZSkgPT0gMSkgewotCQlndy0+bWljX2dhaW4gPSB2YWx1ZTsKLQkJZW1pdF9wcm9w ZXJ0eV9jaGFuZ2VkKGRldmljZS0+Y29ubiwgZGV2aWNlLT5wYXRoLAotCQkJCUFVRElPX0dBVEVX QVlfSU5URVJGQUNFLCAiTWljcm9waG9uZUdhaW4iLAotCQkJCURCVVNfVFlQRV9VSU5UMTYsICZ2 YWx1ZSk7Ci0JfSBlbHNlCi0JCWVycm9yKCJyZmNvbW1fYWdfZGF0YV9jYigpOiByZWFkIHdyb25n IGRhdGEgJyVzJyIsIGJ1Zik7Ci0KLQlyZXR1cm4gVFJVRTsKLX0KLQogc3RhdGljIGdib29sZWFu IHNjb19pb19jYihHSU9DaGFubmVsICpjaGFuLCBHSU9Db25kaXRpb24gY29uZCwKIAkJCXN0cnVj dCBhdWRpb19kZXZpY2UgKmRldikKIHsKQEAgLTU0MSw3ICsxMTgsNiBAQCBzdGF0aWMgdm9pZCBy ZmNvbW1fY29ubmVjdF9jYihHSU9DaGFubmVsICpjaGFuLCBHRXJyb3IgKmVyciwKIHsKIAlzdHJ1 Y3QgYXVkaW9fZGV2aWNlICpkZXYgPSB1c2VyX2RhdGE7CiAJc3RydWN0IGdhdGV3YXkgKmd3ID0g ZGV2LT5nYXRld2F5OwotCURCdXNNZXNzYWdlICpjb25uX21lcyA9IGd3LT5jb25uZWN0X21lc3Nh Z2U7CiAJZ2NoYXIgZ3dfYWRkclsxOF07CiAJR0lPRmxhZ3MgZmxhZ3M7CiAKQEAgLTU2MywyOSAr MTM5LDYgQEAgc3RhdGljIHZvaWQgcmZjb21tX2Nvbm5lY3RfY2IoR0lPQ2hhbm5lbCAqY2hhbiwg R0Vycm9yICplcnIsCiAJaWYgKCFndy0+cmZjb21tKQogCQlndy0+cmZjb21tID0gZ19pb19jaGFu bmVsX3JlZihjaGFuKTsKIAotCWlmIChlc3RhYmxpc2hfc2VydmljZV9sZXZlbF9jb25uKGRldi0+ Z2F0ZXdheSkpIHsKLQkJZ2Jvb2xlYW4gdmFsdWUgPSBUUlVFOwotCi0JCWRlYnVnKCIlczogQ29u bmVjdGVkIHRvICVzIiwgZGV2LT5wYXRoLCBnd19hZGRyKTsKLQkJcmZjb21tX3N0YXJ0X3dhdGNo KGRldik7Ci0JCWlmIChjb25uX21lcykgewotCQkJREJ1c01lc3NhZ2UgKnJlcGx5ID0KLQkJCQlk YnVzX21lc3NhZ2VfbmV3X21ldGhvZF9yZXR1cm4oY29ubl9tZXMpOwotCQkJZGJ1c19jb25uZWN0 aW9uX3NlbmQoZGV2LT5jb25uLCByZXBseSwgTlVMTCk7Ci0JCQlkYnVzX21lc3NhZ2VfdW5yZWYo cmVwbHkpOwotCQkJZGJ1c19tZXNzYWdlX3VucmVmKGNvbm5fbWVzKTsKLQkJCWd3LT5jb25uZWN0 X21lc3NhZ2UgPSBOVUxMOwotCQl9Ci0KLQkJZ3ctPnN0YXRlID0gR0FURVdBWV9TVEFURV9DT05O RUNURUQ7Ci0JCWVtaXRfcHJvcGVydHlfY2hhbmdlZChkZXYtPmNvbm4sIGRldi0+cGF0aCwKLQkJ CQlBVURJT19HQVRFV0FZX0lOVEVSRkFDRSwKLQkJCQkiQ29ubmVjdGVkIiwgREJVU19UWVBFX0JP T0xFQU4sCSZ2YWx1ZSk7Ci0JCXJldHVybjsKLQl9IGVsc2UKLQkJZXJyb3IoIiVzOiBGYWlsZWQg dG8gZXN0YWJsaXNoIHNlcnZpY2UgbGF5ZXIgY29ubmVjdGlvbiB0byAlcyIsCi0JCQlkZXYtPnBh dGgsIGd3X2FkZHIpOwotCiAJaWYgKE5VTEwgIT0gZ3ctPnNjb19zdGFydF9jYikKIAkJZ3ctPnNj b19zdGFydF9jYihOVUxMLCBndy0+c2NvX3N0YXJ0X2NiX2RhdGEpOwogCkBAIC03MzIsMzIxICsy ODUsMjAgQEAgc3RhdGljIERCdXNNZXNzYWdlICphZ19kaXNjb25uZWN0KERCdXNDb25uZWN0aW9u ICpjb25uLCBEQnVzTWVzc2FnZSAqbXNnLAogCXJldHVybiByZXBseTsKIH0KIAotc3RhdGljIERC dXNNZXNzYWdlICpwcm9jZXNzX2FnX3JlcG9uc2UoREJ1c01lc3NhZ2UgKm1zZywgZ2NoYXIgKnJl c3BvbnNlKQotewotCURCdXNNZXNzYWdlICpyZXBseTsKLQotCi0JZGVidWcoImluIHByb2Nlc3Nf YWdfcmVwb25zZSwgcmVzcG9uc2UgaXMgJXMiLCByZXNwb25zZSk7Ci0JaWYgKHN0cnN0cihyZXNw b25zZSwgT0tfUkVTUE9OU0UpKQotCQlyZXBseSA9IGRidXNfbWVzc2FnZV9uZXdfbWV0aG9kX3Jl dHVybihtc2cpOwotCWVsc2UgewotCQkvKiBGSVhNRTogc29tZSBjb2RlIHNob3VsZCBiZSBoZXJl IHRvIHByb2Nlc3NlcyBlcnJvcnMKLQkJICogIGluIGJldHRlciBmYXNpb24gKi8KLQkJZGVidWco IkFHIHJlc3BvbmRlZCB3aXRoICclcycgdG8gJXMgbWV0aG9kIGNhbGwiLCByZXNwb25zZSwKLQkJ CQlkYnVzX21lc3NhZ2VfZ2V0X21lbWJlcihtc2cpKTsKLQkJcmVwbHkgPSBkYnVzX21lc3NhZ2Vf bmV3X2Vycm9yKG1zZywgRVJST1JfSU5URVJGQUNFCi0JCQkJCSIuT3BlcmF0aW9uRmFpbGVkIiwK LQkJCQkJIk9wZXJhdGlvbiBmYWlsZWQuU2VlIGxvZyBmb3IgZGV0YWlscyIpOwotCX0KLQlyZXR1 cm4gcmVwbHk7Ci19Ci0KLXN0YXRpYyBEQnVzTWVzc2FnZSAqcHJvY2Vzc19zaW1wbGUoREJ1c01l c3NhZ2UgKm1zZywgc3RydWN0IGF1ZGlvX2RldmljZSAqZGV2LAotCQkJCQlnY2hhciAqZGF0YSkK LXsKLQlzdHJ1Y3QgZ2F0ZXdheSAqZ3cgPSBkZXYtPmdhdGV3YXk7Ci0JZ2NoYXIgYnVmW1JGQ09N TV9CVUZfU0laRV07Ci0KLQlyZmNvbW1fc3RvcF93YXRjaChkZXYpOwotCXJmY29tbV9zZW5kX2Fu ZF9yZWFkKGd3LCBkYXRhLCBidWYsIHN0cmxlbihkYXRhKSk7Ci0JcmZjb21tX3N0YXJ0X3dhdGNo KGRldik7Ci0JcmV0dXJuIHByb2Nlc3NfYWdfcmVwb25zZShtc2csIGJ1Zik7Ci19Ci0KLSNkZWZp bmUgQUdfQU5TV0VSICJBVEFcciIKLQotc3RhdGljIERCdXNNZXNzYWdlICphZ19hbnN3ZXIoREJ1 c0Nvbm5lY3Rpb24gKmNvbm4sIERCdXNNZXNzYWdlICptc2csCi0JCQkJdm9pZCAqZGF0YSkKLXsK LQlzdHJ1Y3QgYXVkaW9fZGV2aWNlICpkZXYgPSBkYXRhOwotCXN0cnVjdCBnYXRld2F5ICpndyA9 IGRldi0+Z2F0ZXdheTsKLQotCWlmICghZ3ctPnJmY29tbSkKLQkJcmV0dXJuIGdfZGJ1c19jcmVh dGVfZXJyb3IobXNnLCBFUlJPUl9JTlRFUkZBQ0UKLQkJCQkJIi5Ob3RDb25uZWN0ZWQiLAotCQkJ CQkiTm90IENvbm5lY3RlZCIpOwotCi0JaWYgKGd3LT5jYWxsX2FjdGl2ZSkKLQkJcmV0dXJuIGdf ZGJ1c19jcmVhdGVfZXJyb3IobXNnLCBFUlJPUl9JTlRFUkZBQ0UKLQkJCQkJIi5DYWxsQWxyZWFk eUFuc3dlcmVkIiwKLQkJCQkJIkNhbGwgQWxyZWFkeUFuc3dlcmVkIik7Ci0KLQlyZXR1cm4gcHJv Y2Vzc19zaW1wbGUobXNnLCBkZXYsIEFHX0FOU1dFUik7Ci19Ci0KLSNkZWZpbmUgQUdfSEFOR1VQ ICJBVCtDSFVQXHIiCi0KLXN0YXRpYyBEQnVzTWVzc2FnZSAqYWdfdGVybWluYXRlX2NhbGwoREJ1 c0Nvbm5lY3Rpb24gKmNvbm4sIERCdXNNZXNzYWdlICptc2csCi0JCQkJdm9pZCAqZGF0YSkKLXsK LQlzdHJ1Y3QgYXVkaW9fZGV2aWNlICpkZXYgPSBkYXRhOwotCXN0cnVjdCBnYXRld2F5ICpndyA9 IGRldi0+Z2F0ZXdheTsKLQotCWlmICghZ3ctPnJmY29tbSkKLQkJcmV0dXJuIGdfZGJ1c19jcmVh dGVfZXJyb3IobXNnLCBFUlJPUl9JTlRFUkZBQ0UKLQkJCQkJIi5Ob3RDb25uZWN0ZWQiLAotCQkJ CQkiTm90IENvbm5lY3RlZCIpOwotCi0JcmV0dXJuIHByb2Nlc3Nfc2ltcGxlKG1zZywgZGV2LCBB R19IQU5HVVApOwotfQotCi0vKiBhY2NvcmRpbmcgdG8gR1NNIHNwZWMgKi8KLSNkZWZpbmUgQUxM T1dFRF9OVU1CRVJfU1lNQk9MUyAiMTIzNDU2Nzg5MCojQUJDRCIKLSNkZWZpbmUgQUdfUExBQ0Vf Q0FMTCAiQVREJXM7XHIiCi0vKiBkaWFsaW5nIGZyb20gbWVtb3J5IGlzIG5vdCBzdXBwb3J0ZWQg YXMgaGVhZHNldCBzcGVjIGRvZXNuJ3QgZGVmaW5lIGEgd2F5Ci0gKiB0byByZXRyZWl2ZSBwaG9u ZSBtZW1vcnkgZW50cmllcy4KLSAqLwotc3RhdGljIERCdXNNZXNzYWdlICphZ19jYWxsKERCdXND b25uZWN0aW9uICpjb25uLCBEQnVzTWVzc2FnZSAqbXNnLAotCQkJCXZvaWQgKmRhdGEpCi17Ci0J c3RydWN0IGF1ZGlvX2RldmljZSAqZGV2aWNlID0gZGF0YTsKLQlzdHJ1Y3QgZ2F0ZXdheSAqZ3cg PSBkZXZpY2UtPmdhdGV3YXk7Ci0JZ2NoYXIgYnVmW1JGQ09NTV9CVUZfU0laRV07Ci0JZ2NoYXIg Km51bWJlcjsKLQlnaW50IGF0ZF9sZW47Ci0JREJ1c01lc3NhZ2UgKnJlc3VsdDsKLQotCWRlYnVn KCJhdCB0aGUgYmVnaW4gb2YgYWdfY2FsbCgpIik7Ci0JaWYgKCFndy0+cmZjb21tKQotCQlyZXR1 cm4gZ19kYnVzX2NyZWF0ZV9lcnJvcihtc2csIEVSUk9SX0lOVEVSRkFDRQotCQkJCQkiLk5vdENv bm5lY3RlZCIsCi0JCQkJCSJOb3QgQ29ubmVjdGVkIik7Ci0KLQlkYnVzX21lc3NhZ2VfZ2V0X2Fy Z3MobXNnLCBOVUxMLCBEQlVTX1RZUEVfU1RSSU5HLCAmbnVtYmVyLAotCQkJCURCVVNfVFlQRV9J TlZBTElEKTsKLQlpZiAoc3RybGVuKG51bWJlcikgIT0gc3Ryc3BuKG51bWJlciwgQUxMT1dFRF9O VU1CRVJfU1lNQk9MUykpCi0JCXJldHVybiBkYnVzX21lc3NhZ2VfbmV3X2Vycm9yKG1zZywKLQkJ CUVSUk9SX0lOVEVSRkFDRSAiLkJhZE51bWJlciIsCi0JCQkiTnVtYmVyIGNvbnRhaW5zIGNoYXJh Y3RlcnMgd2hpY2ggYXJlIG5vdCBhbGxvd2VkIik7Ci0KLQlhdGRfbGVuID0gc3ByaW50ZihidWYs IEFHX1BMQUNFX0NBTEwsIG51bWJlcik7Ci0JcmZjb21tX3N0b3Bfd2F0Y2goZGV2aWNlKTsKLQly ZmNvbW1fc2VuZF9hbmRfcmVhZChndywgYnVmLCBidWYsIGF0ZF9sZW4pOwotCXJmY29tbV9zdGFy dF93YXRjaChkZXZpY2UpOwotCi0JcmVzdWx0ID0gcHJvY2Vzc19hZ19yZXBvbnNlKG1zZywgYnVm KTsKLQlyZXR1cm4gcmVzdWx0OwotfQotCi0jZGVmaW5lIEFHX0dFVF9DQVJSSUVSICJBVCtDT1BT P1xyIgotCi1zdGF0aWMgREJ1c01lc3NhZ2UgKmFnX2dldF9vcGVyYXRvcihEQnVzQ29ubmVjdGlv biAqY29ubiwgREJ1c01lc3NhZ2UgKm1zZywKLQkJCQkJdm9pZCAqZGF0YSkKLXsKLQlzdHJ1Y3Qg YXVkaW9fZGV2aWNlICpkZXYgPSAoc3RydWN0IGF1ZGlvX2RldmljZSAqKSBkYXRhOwotCXN0cnVj dCBnYXRld2F5ICpndyA9IGRldi0+Z2F0ZXdheTsKLQlnY2hhciBidWZbUkZDT01NX0JVRl9TSVpF XTsKLQlHSU9DaGFubmVsICpyZmNvbW0gPSBndy0+cmZjb21tOwotCWdzaXplIHJlYWQ7Ci0JZ2No YXIgKnJlc3VsdCwgKnNlcDsKLQlEQnVzTWVzc2FnZSAqcmVwbHk7Ci0JR0lPU3RhdHVzIHN0YXR1 czsKLQotCWlmICghZ3ctPnJmY29tbSkKLQkJcmV0dXJuIGdfZGJ1c19jcmVhdGVfZXJyb3IobXNn LCBFUlJPUl9JTlRFUkZBQ0UKLQkJCQkJIi5Ob3RDb25uZWN0ZWQiLAotCQkJCQkiTm90IENvbm5l Y3RlZCIpOwotCi0JcmZjb21tX3N0b3Bfd2F0Y2goZGV2KTsKLQlpb19jaGFubmVsX3dyaXRlX2Fs bChyZmNvbW0sIEFHX0dFVF9DQVJSSUVSLCBzdHJsZW4oQUdfR0VUX0NBUlJJRVIpKTsKLQotCXN0 YXR1cyA9IGdfaW9fY2hhbm5lbF9yZWFkX2NoYXJzKHJmY29tbSwgYnVmLCBSRkNPTU1fQlVGX1NJ WkUgLSAxLAotCQkJCQkJJnJlYWQsIE5VTEwpOwotCXJmY29tbV9zdGFydF93YXRjaChkZXYpOwot CWlmIChHX0lPX1NUQVRVU19OT1JNQUwgPT0gc3RhdHVzKSB7Ci0JCWJ1ZltyZWFkXSA9ICdcMCc7 Ci0JCWlmIChzdHJzdHIoYnVmLCAiK0NPUFMiKSkgewotCQkJaWYgKCFzdHJyY2hyKGJ1ZiwgJywn KSkKLQkJCQlyZXN1bHQgPSAiMCI7Ci0JCQllbHNlIHsKLQkJCQlyZXN1bHQgPSBzdHJjaHIoYnVm LCAnXCInKSArIDE7Ci0JCQkJc2VwID0gc3RyY2hyKHJlc3VsdCwgJ1wiJyk7Ci0JCQkJc2VwWzBd ID0gJ1wwJzsKLQkJCX0KLQotCQkJcmVwbHkgPSBkYnVzX21lc3NhZ2VfbmV3X21ldGhvZF9yZXR1 cm4obXNnKTsKLQkJCWRidXNfbWVzc2FnZV9hcHBlbmRfYXJncyhyZXBseSwgREJVU19UWVBFX1NU UklORywKLQkJCQkJCSZyZXN1bHQsIERCVVNfVFlQRV9JTlZBTElEKTsKLQkJfSBlbHNlIHsKLQkJ CWluZm8oImFnX2dldF9vcGVyYXRvcigpOiAnK0NPUFMnIGV4cGVjdGVkIGJ1dCIKLQkJCQkiICcl cycgcmVjZWl2ZWQiLCBidWYpOwotCQkJcmVwbHkgPSBkYnVzX21lc3NhZ2VfbmV3X2Vycm9yKG1z ZywgRVJST1JfSU5URVJGQUNFCi0JCQkJCQkiLkZhaWxlZCIsCi0JCQkJCQkiVW5leHBlY3RlZCBy ZXNwb25zZSBmcm9tIEFHIik7Ci0JCX0KLQl9IGVsc2UgewotCQllcnJvcigiYWdfZ2V0X29wZXJh dG9yKCk6ICVtIik7Ci0JCXJlcGx5ID0gZGJ1c19tZXNzYWdlX25ld19lcnJvcihtc2csIEVSUk9S X0lOVEVSRkFDRQotCQkJCQkiLkNvbm5lY3Rpb25GYWlsZWQiLAotCQkJCQkiRmFpbGVkIHRvIHJl Y2VpdmUgcmVzcG9uc2UgZnJvbSBBRyIpOwotCX0KLQotCXJldHVybiByZXBseTsKLX0KLQotI2Rl ZmluZSBBR19TRU5EX0RUTUYgIkFUK1ZUUz0lY1xyIgotc3RhdGljIERCdXNNZXNzYWdlICphZ19z ZW5kX2R0bWYoREJ1c0Nvbm5lY3Rpb24gKmNvbm4sIERCdXNNZXNzYWdlICptc2csCi0JCQkJdm9p ZCAqZGF0YSkKLXsKLQlzdHJ1Y3QgYXVkaW9fZGV2aWNlICpkZXZpY2UgPSBkYXRhOwotCXN0cnVj dCBnYXRld2F5ICpndyA9IGRldmljZS0+Z2F0ZXdheTsKLQlnY2hhciBidWZbUkZDT01NX0JVRl9T SVpFXTsKLQlnY2hhciAqbnVtYmVyOwotCWdpbnQgY29tX2xlbjsKLQlnYm9vbGVhbiBnb3Rfb2sg PSBUUlVFOwotCWdpbnQgbnVtX2xlbjsKLQlnaW50IGkgPSAwOwotCi0JaWYgKCFndy0+cmZjb21t KQotCQlyZXR1cm4gZ19kYnVzX2NyZWF0ZV9lcnJvcihtc2csIEVSUk9SX0lOVEVSRkFDRQotCQkJ CQkiLk5vdENvbm5lY3RlZCIsCi0JCQkJCSJOb3QgQ29ubmVjdGVkIik7Ci0KLQlkYnVzX21lc3Nh Z2VfZ2V0X2FyZ3MobXNnLCBOVUxMLCBEQlVTX1RZUEVfU1RSSU5HLCAmbnVtYmVyLAotCQkJCURC VVNfVFlQRV9JTlZBTElEKTsKLQlpZiAoc3RybGVuKG51bWJlcikgIT0gc3Ryc3BuKG51bWJlciwg QUxMT1dFRF9OVU1CRVJfU1lNQk9MUykpCi0JCXJldHVybiBkYnVzX21lc3NhZ2VfbmV3X2Vycm9y KG1zZywKLQkJCUVSUk9SX0lOVEVSRkFDRSAiLkJhZE51bWJlciIsCi0JCQkiTnVtYmVyIGNvbnRh aW5zIGNoYXJhY3RlcnMgd2hpY2ggYXJlIG5vdCBhbGxvd2VkIik7Ci0KLQludW1fbGVuID0gc3Ry bGVuKG51bWJlcik7Ci0JcmZjb21tX3N0b3Bfd2F0Y2goZGV2aWNlKTsKLQl3aGlsZSAoaSA8IG51 bV9sZW4gJiYgZ290X29rKSB7Ci0JCWNvbV9sZW4gPSBzcHJpbnRmKGJ1ZiwgQUdfU0VORF9EVE1G LCBudW1iZXJbaV0pOwotCQlyZmNvbW1fc2VuZF9hbmRfcmVhZChndywgYnVmLCBidWYsIGNvbV9s ZW4pOwotCQlnb3Rfb2sgPSBOVUxMICE9IHN0cnN0cihidWYsIE9LX1JFU1BPTlNFKTsKLQkJaSAr PSAxOwotCX0KLQlyZmNvbW1fc3RhcnRfd2F0Y2goZGV2aWNlKTsKLQlyZXR1cm4gcHJvY2Vzc19h Z19yZXBvbnNlKG1zZywgYnVmKTsKLX0KLQotI2RlZmluZSBBR19HRVRfU1VCU0NSSUJFUl9OVU1T ICJBVCtDTlVNXHIiCi0jZGVmaW5lIENOVU1fTEVOIDUgICAgICAgICAgICAgLyogbGVuZ3RoIG9m ICIrQ05VTSIgc3RyaW5nICovCi0jZGVmaW5lIE1BWF9OVU1CRVJfQ05UIDE2Ci1zdGF0aWMgREJ1 c01lc3NhZ2UgKmFnX2dldF9zdWJzY3JpYmVyX251bShEQnVzQ29ubmVjdGlvbiAqY29ubiwKLQkJ CQkJREJ1c01lc3NhZ2UgKm1zZywgdm9pZCAqZGF0YSkKLXsKLQlzdHJ1Y3QgYXVkaW9fZGV2aWNl ICpkZXZpY2UgPSBkYXRhOwotCXN0cnVjdCBnYXRld2F5ICpndyA9IGRldmljZS0+Z2F0ZXdheTsK LQlnY2hhciBidWZbUkZDT01NX0JVRl9TSVpFXTsKLQlnY2hhciAqbnVtYmVyLCAqZW5kOwotCURC dXNNZXNzYWdlICpyZXBseSA9IGRidXNfbWVzc2FnZV9uZXdfbWV0aG9kX3JldHVybihtc2cpOwot Ci0JaWYgKCFndy0+cmZjb21tKQotCQlyZXR1cm4gZ19kYnVzX2NyZWF0ZV9lcnJvcihtc2csIEVS Uk9SX0lOVEVSRkFDRQotCQkJCQkiLk5vdENvbm5lY3RlZCIsCi0JCQkJCSJOb3QgQ29ubmVjdGVk Iik7Ci0KLQlyZmNvbW1fc3RvcF93YXRjaChkZXZpY2UpOwotCXJmY29tbV9zZW5kX2FuZF9yZWFk KGd3LCBBR19HRVRfU1VCU0NSSUJFUl9OVU1TLCBidWYsCi0JCQlzdHJsZW4oQUdfR0VUX1NVQlND UklCRVJfTlVNUykpOwotCXJmY29tbV9zdGFydF93YXRjaChkZXZpY2UpOwotCi0JaWYgKHN0cmxl bihidWYpID4gQUdfQ0FMTEVSX05VTV9TSVpFICsgMjEpCi0JCWVycm9yKCJhZ19nZXRfc3Vic2Ny aWJlcl9udW0oKTogYnVmIGlzIHRvbyBsb25nICclcyciLCBidWYpOwotCWVsc2UgaWYgKHN0cnN0 cihidWYsICIrQ05VTSIpKSB7Ci0JCW51bWJlciA9IHN0cmNocihidWYsICcsJyk7Ci0JCW51bWJl cisrOwotCQllbmQgPSBzdHJjaHIobnVtYmVyLCAnLCcpOwotCQlpZiAoZW5kKSB7Ci0JCQkqZW5k ID0gJ1wwJzsKLQkJCWRidXNfbWVzc2FnZV9hcHBlbmRfYXJncyhyZXBseSwgREJVU19UWVBFX1NU UklORywKLQkJCQkJCSZudW1iZXIsIERCVVNfVFlQRV9JTlZBTElEKTsKLQkJfQotCX0gZWxzZQot CQllcnJvcigiYWdfZ2V0X3N1YnNjcmliZXJfbnVtKCk6IHJlYWQgd3JvbmcgZGF0YSAnJXMnIiwg YnVmKTsKLQotCXJldHVybiByZXBseTsKLX0KLQogc3RhdGljIERCdXNNZXNzYWdlICphZ19nZXRf cHJvcGVydGllcyhEQnVzQ29ubmVjdGlvbiAqY29ubiwgREJ1c01lc3NhZ2UgKm1zZywKIAkJCQkJ dm9pZCAqZGF0YSkKIHsKLQlzdHJ1Y3QgYXVkaW9fZGV2aWNlICpkZXZpY2UgPSBkYXRhOwotCXN0 cnVjdCBnYXRld2F5ICpndyA9IGRldmljZS0+Z2F0ZXdheTsKLQlEQnVzTWVzc2FnZSAqcmVwbHk7 Ci0JREJ1c01lc3NhZ2VJdGVyIGl0ZXI7Ci0JREJ1c01lc3NhZ2VJdGVyIGRpY3Q7Ci0JZ2Jvb2xl YW4gdmFsdWU7Ci0JZ3VpbnQgaW5kZXggPSAwOwotCXN0cnVjdCBpbmRpY2F0b3IgKmluZDsKLQot CXJlcGx5ID0gZGJ1c19tZXNzYWdlX25ld19tZXRob2RfcmV0dXJuKG1zZyk7Ci0JaWYgKCFyZXBs eSkKLQkJcmV0dXJuIE5VTEw7Ci0KLQlkYnVzX21lc3NhZ2VfaXRlcl9pbml0X2FwcGVuZChyZXBs eSwgJml0ZXIpOwotCi0JZGJ1c19tZXNzYWdlX2l0ZXJfb3Blbl9jb250YWluZXIoJml0ZXIsIERC VVNfVFlQRV9BUlJBWSwKLQkJCURCVVNfRElDVF9FTlRSWV9CRUdJTl9DSEFSX0FTX1NUUklORwot CQkJREJVU19UWVBFX1NUUklOR19BU19TVFJJTkcgREJVU19UWVBFX1ZBUklBTlRfQVNfU1RSSU5H Ci0JCQlEQlVTX0RJQ1RfRU5UUllfRU5EX0NIQVJfQVNfU1RSSU5HLCAmZGljdCk7Ci0KLQkvKiBD b25uZWN0ZWQgKi8KLQl2YWx1ZSA9IGdhdGV3YXlfaXNfY29ubmVjdGVkKGRldmljZSk7Ci0JZGlj dF9hcHBlbmRfZW50cnkoJmRpY3QsICJDb25uZWN0ZWQiLCBEQlVTX1RZUEVfQk9PTEVBTiwgJnZh bHVlKTsKLQotCWlmICghdmFsdWUpCi0JCWdvdG8gZG9uZTsKLQotCXdoaWxlICgoaW5kID0gZ19z bGlzdF9udGhfZGF0YShndy0+aW5kaWVzLCBpbmRleCkpKSB7Ci0JCWlmKCFzdHJjbXAoaW5kLT5k ZXNjciwgIlwic2VydmljZVwiIikpCi0JCQlkaWN0X2FwcGVuZF9lbnRyeSgmZGljdCwgIlJlZ2lz dHJhdGlvblN0YXR1cyIsCi0JCQkJCURCVVNfVFlQRV9VSU5UMTYsICZpbmQtPnZhbHVlKTsKLQkJ ZWxzZSBpZiAoIXN0cmNtcChpbmQtPmRlc2NyLCAiXCJzaWduYWxcIiIpKQotCQkJZGljdF9hcHBl bmRfZW50cnkoJmRpY3QsICJTaWduYWxTdHJlbmd0aCIsCi0JCQkJCURCVVNfVFlQRV9VSU5UMTYs ICZpbmQtPnZhbHVlKTsKLQkJZWxzZSBpZiAoIXN0cmNtcChpbmQtPmRlc2NyLCAiXCJyb2FtXCIi KSkKLQkJCWRpY3RfYXBwZW5kX2VudHJ5KCZkaWN0LCAiUm9hbWluZ1N0YXR1cyIsCi0JCQkJCURC VVNfVFlQRV9VSU5UMTYsICZpbmQtPnZhbHVlKTsKLQkJZWxzZSBpZiAoIXN0cmNtcChpbmQtPmRl c2NyLCAiXCJiYXR0Y2hnXCIiKSkKLQkJCWRpY3RfYXBwZW5kX2VudHJ5KCZkaWN0LCAiQmF0dGVy eUNoYXJnZSIsCi0JCQkJCURCVVNfVFlQRV9VSU5UMTYsICZpbmQtPnZhbHVlKTsKLQkJaW5kZXgr KzsKLQl9Ci0KLQkvKiBTcGVha2VyR2FpbiAqLwotCWRpY3RfYXBwZW5kX2VudHJ5KCZkaWN0LCAi U3BlYWtlckdhaW4iLCBEQlVTX1RZUEVfVUlOVDE2LAotCQkJCSZkZXZpY2UtPmdhdGV3YXktPnNw X2dhaW4pOwotCi0JLyogTWljcm9waG9uZUdhaW4gKi8KLQlkaWN0X2FwcGVuZF9lbnRyeSgmZGlj dCwgIk1pY3JvcGhvbmVHYWluIiwgREJVU19UWVBFX1VJTlQxNiwKLQkJCQkmZGV2aWNlLT5nYXRl d2F5LT5taWNfZ2Fpbik7Ci1kb25lOgotCWRidXNfbWVzc2FnZV9pdGVyX2Nsb3NlX2NvbnRhaW5l cigmaXRlciwgJmRpY3QpOwotCXJldHVybiByZXBseTsKKwlyZXR1cm4gTlVMTDsKIH0KIAogc3Rh dGljIEdEQnVzTWV0aG9kVGFibGUgZ2F0ZXdheV9tZXRob2RzW10gPSB7CiAJeyAiQ29ubmVjdCIs ICIiLCAiIiwgYWdfY29ubmVjdCwgR19EQlVTX01FVEhPRF9GTEFHX0FTWU5DIH0sCiAJeyAiRGlz Y29ubmVjdCIsICIiLCAiIiwgYWdfZGlzY29ubmVjdCB9LAotCXsgIkFuc3dlckNhbGwiLCAiIiwg IiIsIGFnX2Fuc3dlciB9LAotCXsgIlRlcm1pbmF0ZUNhbGwiLCAiIiwgIiIsIGFnX3Rlcm1pbmF0 ZV9jYWxsIH0sCi0JeyAiQ2FsbCIsICJzIiwgIiIsIGFnX2NhbGwgfSwKLQl7ICJHZXRPcGVyYXRv ck5hbWUiLCAiIiwgInMiLCBhZ19nZXRfb3BlcmF0b3IgfSwKLQl7ICJTZW5kRFRNRiIsICJzIiwg IiIsIGFnX3NlbmRfZHRtZiB9LAotCXsgIkdldFN1YnNjcmliZXJOdW1iZXIiLCAiIiwgInMiLCBh Z19nZXRfc3Vic2NyaWJlcl9udW0gfSwKIAl7ICJHZXRQcm9wZXJ0aWVzIiwgIiIsICJhe3N2fSIs IGFnX2dldF9wcm9wZXJ0aWVzIH0sCiAJeyBOVUxMLCBOVUxMLCBOVUxMLCBOVUxMIH0KIH07CiAK IHN0YXRpYyBHREJ1c1NpZ25hbFRhYmxlIGdhdGV3YXlfc2lnbmFsc1tdID0gewotCXsgIlJpbmci LCAicyIgfSwKLQl7ICJDYWxsVGVybWluYXRlZCIsICIiIH0sCi0JeyAiQ2FsbFN0YXJ0ZWQiLCAi IiB9LAotCXsgIkNhbGxFbmRlZCIsICIiIH0sCiAJeyAiUHJvcGVydHlDaGFuZ2VkIiwgInN2IiB9 LAogCXsgTlVMTCwgTlVMTCB9CiB9OwpAQCAtMTA2Myw5ICszMTUsNiBAQCBzdHJ1Y3QgZ2F0ZXdh eSAqZ2F0ZXdheV9pbml0KHN0cnVjdCBhdWRpb19kZXZpY2UgKmRldikKIAogCWRlYnVnKCJpbiBn YXRld2F5X2luaXQsIGRldiBpcyAlcCIsIGRldik7CiAJZ3cgPSBnX25ldzAoc3RydWN0IGdhdGV3 YXksIDEpOwotCWd3LT5pbmRpZXMgPSBOVUxMOwotCWd3LT5pc19kaWFsaW5nID0gRkFMU0U7Ci0J Z3ctPmNhbGxfYWN0aXZlID0gRkFMU0U7CiAJZ3ctPnN0YXRlID0gR0FURVdBWV9TVEFURV9ESVND T05ORUNURUQ7CiAJcmV0dXJuIGd3OwogCkBAIC0xMTA3LDExICszNTYsNiBAQCB2b2lkIGdhdGV3 YXlfc3RhcnRfc2VydmljZShzdHJ1Y3QgYXVkaW9fZGV2aWNlICpkZXZpY2UpCiAJcmZjb21tX2Nv bm5lY3RfY2IoZGV2aWNlLT5nYXRld2F5LT5yZmNvbW0sIE5VTEwsIGRldmljZSk7CiB9CiAKLXN0 YXRpYyB2b2lkIGluZGljYXRvcl9zbGljZV9mcmVlKGdwb2ludGVyIG1lbSkKLXsKLQlnX3NsaWNl X2ZyZWUoc3RydWN0IGluZGljYXRvciwgbWVtKTsKLX0KLQogaW50IGdhdGV3YXlfY2xvc2Uoc3Ry dWN0IGF1ZGlvX2RldmljZSAqZGV2aWNlKQogewogCXN0cnVjdCBnYXRld2F5ICpndyA9IGRldmlj ZS0+Z2F0ZXdheTsKQEAgLTExMTksOCArMzYzLDYgQEAgaW50IGdhdGV3YXlfY2xvc2Uoc3RydWN0 IGF1ZGlvX2RldmljZSAqZGV2aWNlKQogCUdJT0NoYW5uZWwgKnNjbyA9IGd3LT5zY287CiAJZ2Jv b2xlYW4gdmFsdWUgPSBGQUxTRTsKIAotCWdfc2xpc3RfZm9yZWFjaChndy0+aW5kaWVzLCAoR0Z1 bmMpIGluZGljYXRvcl9zbGljZV9mcmVlLCBOVUxMKTsKLQlnX3NsaXN0X2ZyZWUoZ3ctPmluZGll cyk7CiAJaWYgKHJmY29tbSkgewogCQlnX2lvX2NoYW5uZWxfc2h1dGRvd24ocmZjb21tLCBUUlVF LCBOVUxMKTsKIAkJZ19pb19jaGFubmVsX3VucmVmKHJmY29tbSk7Ci0tIAoxLjYuNC40Cgo= --000e0cd61a52050a8b047d9e0284 Content-Type: application/octet-stream; name="0002-Implement-HandsfreeGateway-Interface.patch" Content-Disposition: attachment; filename="0002-Implement-HandsfreeGateway-Interface.patch" Content-Transfer-Encoding: base64 X-Attachment-Id: f_g4oj6h4v4 RnJvbSAwNzU1YmNlMGU3MzJhNzNhN2QxZDY4NzcyYWEyMDkwNjAzMDAzNzg0IE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBHdXN0YXZvIEYuIFBhZG92YW4gPHBhZG92YW5AcHJvZnVzaW9u Lm1vYmk+CkRhdGU6IEZyaSwgOCBKYW4gMjAxMCAxNzozODoyMSAtMDIwMApTdWJqZWN0OiBbUEFU Q0ggMi8yXSBJbXBsZW1lbnQgSGFuZHNmcmVlR2F0ZXdheSBJbnRlcmZhY2UKCkNyZWF0ZSBhIGlu dGVyZmFjZSB3aGVyZSBhIEhhbmRzZnJlZSBhZ2VudCBjYW4gcmVnaXN0ZXIgYW5kIHVzZSBCbHVl WiB0bwpoYW5kbGUgdGhlIHJmY29tbSBhbmQgc2NvIGxpbmtzLgoKTWFueSB0aGFua3MgdG8gWmhl bmh1YSBaaGFuZyA8emhlbmh1YS56aGFuZ0BpbnRlbC5jb20+IGZvciBoaXMKcHJvdG90eXBlIG9u IHRoaXMgY29kZS4KLS0tCiBhdWRpby9nYXRld2F5LmMgfCAgNDQyICsrKysrKysrKysrKysrKysr KysrKysrKysrKysrKysrKysrKysrKysrKystLS0tLS0tLS0tLS0KIGF1ZGlvL2dhdGV3YXkuaCB8 ICAgMTIgKy0KIGF1ZGlvL21hbmFnZXIuYyB8ICAgMjAgKy0tCiBhdWRpby91bml4LmMgICAgfCAg ICA4ICsKIGRvYy9oZnAtYXBpLnR4dCB8ICAgODEgKysrKysrKysrKwogNSBmaWxlcyBjaGFuZ2Vk LCA0NTMgaW5zZXJ0aW9ucygrKSwgMTEwIGRlbGV0aW9ucygtKQogY3JlYXRlIG1vZGUgMTAwNjQ0 IGRvYy9oZnAtYXBpLnR4dAoKZGlmZiAtLWdpdCBhL2F1ZGlvL2dhdGV3YXkuYyBiL2F1ZGlvL2dh dGV3YXkuYwppbmRleCAzZGMwOWZmLi5kOTI3YTZjIDEwMDY0NAotLS0gYS9hdWRpby9nYXRld2F5 LmMKKysrIGIvYXVkaW8vZ2F0ZXdheS5jCkBAIC01LDYgKzUsOCBAQAogICogIENvcHlyaWdodCAo QykgMjAwNi0yMDEwICBOb2tpYSBDb3Jwb3JhdGlvbgogICogIENvcHlyaWdodCAoQykgMjAwNC0y MDEwICBNYXJjZWwgSG9sdG1hbm4gPG1hcmNlbEBob2x0bWFubi5vcmc+CiAgKiAgQ29weXJpZ2h0 IChDKSAyMDA4LTIwMDkgIExlb25pZCBNb3ZzaG92aWNoIDxldmVudC5yaWdhQGdtYWlsLm9yZz4K KyAqICBDb3B5cmlnaHQgKEMpIDIwMDktMjAwOSAgWmhlbmh1YSBaaGFuZyA8emhlbmh1YS56aGFu Z0BpbnRlbC5jb20+CisgKiAgQ29weXJpZ2h0IChDKSAyMDEwICBHdXN0YXZvIEYuIFBhZG92YW4g PHBhZG92YW5AcHJvZnVzaW9uLm1vYmk+CiAgKgogICoKICAqICBUaGlzIHByb2dyYW0gaXMgZnJl ZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQpAQCAtMzIs MTIgKzM0LDE1IEBACiAjaW5jbHVkZSA8c3RyaW5nLmg+CiAjaW5jbHVkZSA8ZmNudGwuaD4KICNp bmNsdWRlIDxlcnJuby5oPgorI2luY2x1ZGUgPHN5cy9pb2N0bC5oPgorI2luY2x1ZGUgPHVuaXN0 ZC5oPgogCiAjaW5jbHVkZSA8Z2xpYi5oPgogI2luY2x1ZGUgPGRidXMvZGJ1cy5oPgogI2luY2x1 ZGUgPGdkYnVzLmg+CiAKICNpbmNsdWRlIDxibHVldG9vdGgvYmx1ZXRvb3RoLmg+CisjaW5jbHVk ZSA8Ymx1ZXRvb3RoL3JmY29tbS5oPgogI2luY2x1ZGUgPGJsdWV0b290aC9oY2kuaD4KICNpbmNs dWRlIDxibHVldG9vdGgvaGNpX2xpYi5oPgogI2luY2x1ZGUgPGJsdWV0b290aC9zY28uaD4KQEAg LTUyLDE5ICs1NywxMDAgQEAKICNpbmNsdWRlICJidGlvLmgiCiAjaW5jbHVkZSAiZGJ1cy1jb21t b24uaCIKIAotI2RlZmluZSBSRkNPTU1fQlVGX1NJWkUgMjU2CisjZGVmaW5lIE1BWF9PUEVOX1RS SUVTIDUKKyNkZWZpbmUgT1BFTl9XQUlUIDMwMAorCitzdHJ1Y3QgYWdlbnQgeworCWNoYXIgKm5h bWU7CS8qIEJ1cyBpZCAqLworCWNoYXIgKnBhdGg7CS8qIEQtQnVzIHBhdGggKi8KKwlndWludCB3 YXRjaDsJLyogRGlzY29ubmVjdCB3YXRjaCAqLworfTsKIAogc3RydWN0IGdhdGV3YXkgewogCWdh dGV3YXlfc3RhdGVfdCBzdGF0ZTsKLQlHSU9DaGFubmVsICpyZmNvbW07Ci0JZ3VpbnQgcmZjb21t X3dhdGNoX2lkOworCWludCBjaGFubmVsOworCUdJT0NoYW5uZWwgKnJmY29tbTsJLyogcmVtb3Rl IEFHIHJlcXVlc3RlZCByZmNvbW0gY29ubmVjdGlvbiAqLwogCUdJT0NoYW5uZWwgKnNjbzsKIAln YXRld2F5X3N0cmVhbV9jYl90IHNjb19zdGFydF9jYjsKIAl2b2lkICpzY29fc3RhcnRfY2JfZGF0 YTsKLQlEQnVzTWVzc2FnZSAqY29ubmVjdF9tZXNzYWdlOworCXN0cnVjdCBhZ2VudCAqYWdlbnQ7 CisJREJ1c01lc3NhZ2UgKm1zZzsKIH07CiAKLWludCBnYXRld2F5X2Nsb3NlKHN0cnVjdCBhdWRp b19kZXZpY2UgKmRldmljZSk7CitpbnQgZ2F0ZXdheV9jbG9zZShncG9pbnRlciBkYXRhKTsKKwor c3RhdGljIGNvbnN0IGNoYXIgKmNvbm5lY3RlZDJzdHIoaW50IGkpCit7CisJc3dpdGNoIChpKSB7 CisJCWNhc2UgR0FURVdBWV9TVEFURV9ESVNDT05ORUNURUQ6CisJCQlyZXR1cm4gImRpc2Nvbm5l Y3RlZCI7CisJCWNhc2UgR0FURVdBWV9TVEFURV9DT05ORUNUSU5HOgorCQkJcmV0dXJuICJjb25u ZWN0aW5nIjsKKwkJY2FzZSBHQVRFV0FZX1NUQVRFX0NPTk5FQ1RFRDoKKwkJCXJldHVybiAiY29u bmVjdGVkIjsKKwkJY2FzZSBHQVRFV0FZX1NUQVRFX1BMQVlJTkc6CisJCQlyZXR1cm4gInBsYXlp bmciOworCQlkZWZhdWx0OgorCQkJcmV0dXJuICIiOworCX0KK30KKworc3RhdGljIHZvaWQgYWdl bnRfZnJlZShzdHJ1Y3QgYWdlbnQgKmFnZW50KQoreworCWlmICghYWdlbnQpCisJCXJldHVybjsK KworCWdfZnJlZShhZ2VudC0+bmFtZSk7CisJZ19mcmVlKGFnZW50LT5wYXRoKTsKKwlnX2ZyZWUo YWdlbnQpOworfQorCitzdGF0aWMgdm9pZCBjaGFuZ2Vfc3RhdGUoc3RydWN0IGF1ZGlvX2Rldmlj ZSAqZGV2LCBpbnQgbmV3X3N0YXRlKQoreworCXN0cnVjdCBnYXRld2F5ICpndyA9IGRldi0+Z2F0 ZXdheTsKKwljb25zdCBjaGFyICp2YWwgPSBjb25uZWN0ZWQyc3RyKG5ld19zdGF0ZSk7CisKKwln dy0+c3RhdGUgPSBuZXdfc3RhdGU7CisKKwllbWl0X3Byb3BlcnR5X2NoYW5nZWQoZGV2LT5jb25u LCBkZXYtPnBhdGgsCisJCQlBVURJT19HQVRFV0FZX0lOVEVSRkFDRSwgIlN0YXRlIiwKKwkJCURC VVNfVFlQRV9TVFJJTkcsICZ2YWwpOworfQorCitzdGF0aWMgdm9pZCBhZ2VudF9kaXNjb25uZWN0 KHN0cnVjdCBhdWRpb19kZXZpY2UgKmRldiwgc3RydWN0IGFnZW50ICphZ2VudCkKK3sKKwlEQnVz TWVzc2FnZSAqbXNnOworCisJbXNnID0gZGJ1c19tZXNzYWdlX25ld19tZXRob2RfY2FsbChhZ2Vu dC0+bmFtZSwgYWdlbnQtPnBhdGgsCisJCQkib3JnLmJsdWV6LkhhbmRzZnJlZUFnZW50IiwgIlJl bGVhc2UiKTsKKworCWRidXNfbWVzc2FnZV9zZXRfbm9fcmVwbHkobXNnLCBUUlVFKTsKKwlnX2Ri dXNfc2VuZF9tZXNzYWdlKGRldi0+Y29ubiwgbXNnKTsKKworCWdfZGJ1c19yZW1vdmVfd2F0Y2go ZGV2LT5jb25uLCBhZ2VudC0+d2F0Y2gpOworfQorCitzdGF0aWMgZ2Jvb2xlYW4gYWdlbnRfc2Vu ZGZkKHN0cnVjdCBhZ2VudCAqYWdlbnQsIGludCBmZCwKKwkJREJ1c1BlbmRpbmdDYWxsTm90aWZ5 RnVuY3Rpb24gbm90aWZ5LCB2b2lkICpkYXRhKQoreworCXN0cnVjdCBhdWRpb19kZXZpY2UgKmRl diA9IGRhdGE7CisJREJ1c01lc3NhZ2UgKm1zZzsKKwlEQnVzUGVuZGluZ0NhbGwgKmNhbGw7CisK Kwltc2cgPSBkYnVzX21lc3NhZ2VfbmV3X21ldGhvZF9jYWxsKGFnZW50LT5uYW1lLCBhZ2VudC0+ cGF0aCwKKwkJCSJvcmcuYmx1ZXouSGFuZHNmcmVlQWdlbnQiLCAiTmV3Q29ubmVjdGlvbiIpOwor CisJZGJ1c19tZXNzYWdlX2FwcGVuZF9hcmdzKG1zZywgREJVU19UWVBFX1VOSVhfRkQsICZmZCwK KwkJCQkJREJVU19UWVBFX0lOVkFMSUQpOworCisJaWYgKGRidXNfY29ubmVjdGlvbl9zZW5kX3dp dGhfcmVwbHkoZGV2LT5jb25uLCBtc2csICZjYWxsLCAtMSkgPT0gRkFMU0UpCisJCXJldHVybiBG QUxTRTsKKworCWRidXNfcGVuZGluZ19jYWxsX3NldF9ub3RpZnkoY2FsbCwgbm90aWZ5LCBkZXYt PmdhdGV3YXksIE5VTEwpOworCWRidXNfcGVuZGluZ19jYWxsX3VucmVmKGNhbGwpOworCisJcmV0 dXJuIFRSVUU7Cit9CiAKIHN0YXRpYyBnYm9vbGVhbiBzY29faW9fY2IoR0lPQ2hhbm5lbCAqY2hh biwgR0lPQ29uZGl0aW9uIGNvbmQsCiAJCQlzdHJ1Y3QgYXVkaW9fZGV2aWNlICpkZXYpCkBAIC03 OSw2ICsxNjUsNyBAQCBzdGF0aWMgZ2Jvb2xlYW4gc2NvX2lvX2NiKEdJT0NoYW5uZWwgKmNoYW4s IEdJT0NvbmRpdGlvbiBjb25kLAogCQlnX2lvX2NoYW5uZWxfc2h1dGRvd24oZ3ctPnNjbywgVFJV RSwgTlVMTCk7CiAJCWdfaW9fY2hhbm5lbF91bnJlZihndy0+c2NvKTsKIAkJZ3ctPnNjbyA9IE5V TEw7CisJCWNoYW5nZV9zdGF0ZShkZXYsIEdBVEVXQVlfU1RBVEVfQ09OTkVDVEVEKTsKIAkJcmV0 dXJuIEZBTFNFOwogCX0KIApAQCAtOTIsNjMgKzE3OSwxMDUgQEAgc3RhdGljIHZvaWQgc2NvX2Nv bm5lY3RfY2IoR0lPQ2hhbm5lbCAqY2hhbiwgR0Vycm9yICplcnIsIGdwb2ludGVyIHVzZXJfZGF0 YSkKIAogCWRlYnVnKCJhdCB0aGUgYmVnaW4gb2Ygc2NvX2Nvbm5lY3RfY2IoKSBpbiBnYXRld2F5 LmMiKTsKIAorCWd3LT5zY28gPSBjaGFuOworCWdfaW9fY2hhbm5lbF9yZWYoY2hhbik7CisKIAlp ZiAoZXJyKSB7CiAJCWVycm9yKCJzY29fY29ubmVjdF9jYigpOiAlcyIsIGVyci0+bWVzc2FnZSk7 Ci0JCS8qIG5vdCBzdXJlLCBidXQgZnJvbSBvdGhlciBwb2ludCBvZiB2aWV3LAotCQkgKiB3aGF0 IGlzIHRoZSByZWFzb24gdG8gaGF2ZSBoZWFkc2V0IHdoaWNoCi0JCSAqIGNhbm5vdCBwbGF5IGF1 ZGlvPyAqLwotCQlpZiAoZ3ctPnNjb19zdGFydF9jYikKLQkJCWd3LT5zY29fc3RhcnRfY2IoTlVM TCwgZ3ctPnNjb19zdGFydF9jYl9kYXRhKTsKIAkJZ2F0ZXdheV9jbG9zZShkZXYpOwogCQlyZXR1 cm47CiAJfQogCi0JZ3ctPnNjbyA9IGdfaW9fY2hhbm5lbF9yZWYoY2hhbik7CiAJaWYgKGd3LT5z Y29fc3RhcnRfY2IpCiAJCWd3LT5zY29fc3RhcnRfY2IoZGV2LCBndy0+c2NvX3N0YXJ0X2NiX2Rh dGEpOwogCi0JLyogd2h5IGlzIHRoaXMgaGVyZT8gKi8KIAlmY250bChnX2lvX2NoYW5uZWxfdW5p eF9nZXRfZmQoY2hhbiksIEZfU0VURkwsIDApOwogCWdfaW9fYWRkX3dhdGNoKGd3LT5zY28sIEdf SU9fRVJSIHwgR19JT19IVVAgfCBHX0lPX05WQUwsCiAJCQkJKEdJT0Z1bmMpIHNjb19pb19jYiwg ZGV2KTsKIH0KIAorc3RhdGljIHZvaWQgbmV3Y29ubmVjdGlvbl9yZXBseShEQnVzUGVuZGluZ0Nh bGwgKmNhbGwsIHZvaWQgKmRhdGEpCit7CisJc3RydWN0IGdhdGV3YXkgKmd3ID0gZGF0YTsKKwlE QnVzTWVzc2FnZSAqcmVwbHkgPSBkYnVzX3BlbmRpbmdfY2FsbF9zdGVhbF9yZXBseShjYWxsKTsK KwlEQnVzRXJyb3IgZGVycjsKKworCWlmICghZ3ctPnJmY29tbSkgeworCQlkZWJ1ZygiUkZDT01N IGRpc2Nvbm5lY3RlZCBmcm9tIHNlcnZlciBiZWZvcmUgYWdlbnQgcmVwbHkiKTsKKwkJcmV0dXJu OworCX0KKworCWRidXNfZXJyb3JfaW5pdCgmZGVycik7CisJaWYgKCFkYnVzX3NldF9lcnJvcl9m cm9tX21lc3NhZ2UoJmRlcnIsIHJlcGx5KSkgeworCQlpbmZvKCJBZ2VudCByZXBseTogZmlsZSBk ZXNjcmlwdG9yIHBhc3NlZCBzdWNjZXNzZnVseSIpOworCQlyZXR1cm47CisJfQorCisJZGVidWco IkFnZW50IHJlcGx5OiAlcyIsIGRlcnIubWVzc2FnZSk7CisKKwlkYnVzX2Vycm9yX2ZyZWUoJmRl cnIpOworCWdfaWRsZV9hZGQoZ2F0ZXdheV9jbG9zZSwgZ3cpOworfQorCiBzdGF0aWMgdm9pZCBy ZmNvbW1fY29ubmVjdF9jYihHSU9DaGFubmVsICpjaGFuLCBHRXJyb3IgKmVyciwKIAkJCQlncG9p bnRlciB1c2VyX2RhdGEpCiB7CiAJc3RydWN0IGF1ZGlvX2RldmljZSAqZGV2ID0gdXNlcl9kYXRh OwogCXN0cnVjdCBnYXRld2F5ICpndyA9IGRldi0+Z2F0ZXdheTsKLQlnY2hhciBnd19hZGRyWzE4 XTsKLQlHSU9GbGFncyBmbGFnczsKKwlzdHJ1Y3QgcmZjb21tX2Rldl9yZXEgcmVxOworCURCdXNN ZXNzYWdlICpyZXBseTsKKwlpbnQgc2s7CisJY2hhciBzcmNbMThdLCBkc3RbMThdOwogCiAJaWYg KGVycikgewogCQllcnJvcigiY29ubmVjdCgpOiAlcyIsIGVyci0+bWVzc2FnZSk7CiAJCWlmIChn dy0+c2NvX3N0YXJ0X2NiKQogCQkJZ3ctPnNjb19zdGFydF9jYihOVUxMLCBndy0+c2NvX3N0YXJ0 X2NiX2RhdGEpOwotCQlyZXR1cm47CisJCWdvdG8gZmFpbDsKIAl9CiAKLQliYTJzdHIoJmRldi0+ ZHN0LCBnd19hZGRyKTsKLQkvKiBCbG9ja2luZyBtb2RlIHNob3VsZCBiZSBkZWZhdWx0LCBidXQg anVzdCBpbiBjYXNlOiAqLwotCWZsYWdzID0gZ19pb19jaGFubmVsX2dldF9mbGFncyhjaGFuKTsK LQlmbGFncyAmPSB+R19JT19GTEFHX05PTkJMT0NLOwotCWZsYWdzICY9IEdfSU9fRkxBR19NQVNL OwotCWdfaW9fY2hhbm5lbF9zZXRfZmxhZ3MoY2hhbiwgZmxhZ3MsIE5VTEwpOwotCWdfaW9fY2hh bm5lbF9zZXRfZW5jb2RpbmcoY2hhbiwgTlVMTCwgTlVMTCk7Ci0JZ19pb19jaGFubmVsX3NldF9i dWZmZXJlZChjaGFuLCBGQUxTRSk7Ci0JaWYgKCFndy0+cmZjb21tKQotCQlndy0+cmZjb21tID0g Z19pb19jaGFubmVsX3JlZihjaGFuKTsKKwlpZiAoIWd3LT5hZ2VudCkKKwkJZXJyb3IoIkhhbmRm cmVlIEFnZW50IG5vdCByZWdpc3RlcmVkIik7CiAKLQlpZiAoTlVMTCAhPSBndy0+c2NvX3N0YXJ0 X2NiKQotCQlndy0+c2NvX3N0YXJ0X2NiKE5VTEwsIGd3LT5zY29fc3RhcnRfY2JfZGF0YSk7CisJ YmEyc3RyKCZkZXYtPnNyYywgc3JjKTsKKwliYTJzdHIoJmRldi0+ZHN0LCBkc3QpOwogCi0JZ2F0 ZXdheV9jbG9zZShkZXYpOworCS8qIG1ha2UgL2Rldi9yZmNvbW0gc2VyaWFsIHBvcnQgZnJvbSBj aGFuICovCisJbWVtc2V0KCZyZXEsIDAsIHNpemVvZihyZXEpKTsKKwlyZXEuZGV2X2lkID0gLTE7 CisJcmVxLmZsYWdzID0gKDEgPDwgUkZDT01NX1JFVVNFX0RMQyk7CisJYmFjcHkoJnJlcS5zcmMs ICZkZXYtPnNyYyk7CisJYmFjcHkoJnJlcS5kc3QsICZkZXYtPmRzdCk7CisJcmVxLmNoYW5uZWwg PSBndy0+Y2hhbm5lbDsKKworCXNrID0gZ19pb19jaGFubmVsX3VuaXhfZ2V0X2ZkKGNoYW4pOwor CisJZ3ctPnJmY29tbSA9IGNoYW47CisJZ19pb19jaGFubmVsX3JlZihjaGFuKTsKKworCWNoYW5n ZV9zdGF0ZShkZXYsIEdBVEVXQVlfU1RBVEVfQ09OTkVDVEVEKTsKKworCWlmICghYWdlbnRfc2Vu ZGZkKGd3LT5hZ2VudCwgc2ssIG5ld2Nvbm5lY3Rpb25fcmVwbHksIGRldikpIHsKKwkJcmVwbHkg PSBnX2RidXNfY3JlYXRlX2Vycm9yKGd3LT5tc2csIEVSUk9SX0lOVEVSRkFDRSAiLkZhaWxlZCIs CisJCQkJIkNhbiBub3QgcGFzcyBmaWxlIGRlc2NyaXB0b3IiKTsKKwl9IGVsc2UKKwkJcmVwbHkg PSBkYnVzX21lc3NhZ2VfbmV3X21ldGhvZF9yZXR1cm4oZ3ctPm1zZyk7CisKKwlyZXR1cm47CisK K2ZhaWw6CisJaWYgKGd3LT5tc2cpIHsKKwkJZXJyb3JfY29tbW9uX3JlcGx5KGRldi0+Y29ubiwg Z3ctPm1zZywgRVJST1JfSU5URVJGQUNFCisJCQkJIi5GYWlsZWQiLCAiLkNvbm5lY3Rpb24gYXR0 ZW1wdCBmYWlsZWQiKTsKKwl9CisJY2hhbmdlX3N0YXRlKGRldiwgR0FURVdBWV9TVEFURV9ESVND T05ORUNURUQpOworCXJldHVybjsKIH0KIAogc3RhdGljIHZvaWQgZ2V0X3JlY29yZF9jYihzZHBf bGlzdF90ICpyZWNzLCBpbnQgcGVyciwgZ3BvaW50ZXIgdXNlcl9kYXRhKQogewogCXN0cnVjdCBh dWRpb19kZXZpY2UgKmRldiA9IHVzZXJfZGF0YTsKLQlEQnVzTWVzc2FnZSAqbXNnID0gZGV2LT5n YXRld2F5LT5jb25uZWN0X21lc3NhZ2U7CisJc3RydWN0IGdhdGV3YXkgKmd3ID0gZGV2LT5nYXRl d2F5OwogCWludCBjaCA9IC0xOwogCXNkcF9saXN0X3QgKnByb3RvcywgKmNsYXNzZXM7CiAJdXVp ZF90IHV1aWQ7CkBAIC0xODIsOCArMzExLDYgQEAgc3RhdGljIHZvaWQgZ2V0X3JlY29yZF9jYihz ZHBfbGlzdF90ICpyZWNzLCBpbnQgcGVyciwgZ3BvaW50ZXIgdXNlcl9kYXRhKQogCiAJaWYgKCFz ZHBfdXVpZDEyOF90b191dWlkKCZ1dWlkKSB8fCB1dWlkLnR5cGUgIT0gU0RQX1VVSUQxNiB8fAog CQkJdXVpZC52YWx1ZS51dWlkMTYgIT0gSEFORFNGUkVFX0FHV19TVkNMQVNTX0lEKSB7Ci0JCXNk cF9saXN0X2ZvcmVhY2gocHJvdG9zLCAoc2RwX2xpc3RfZnVuY190KSBzZHBfbGlzdF9mcmVlLAot CQkJCQkJCQkJTlVMTCk7CiAJCXNkcF9saXN0X2ZyZWUocHJvdG9zLCBOVUxMKTsKIAkJZXJyb3Io IkludmFsaWQgc2VydmljZSByZWNvcmQgb3Igbm90IEhGUCIpOwogCQlnb3RvIGZhaWw7CkBAIC0x OTcsNiArMzI0LDggQEAgc3RhdGljIHZvaWQgZ2V0X3JlY29yZF9jYihzZHBfbGlzdF90ICpyZWNz LCBpbnQgcGVyciwgZ3BvaW50ZXIgdXNlcl9kYXRhKQogCQlnb3RvIGZhaWw7CiAJfQogCisJZ3ct PmNoYW5uZWwgPSBjaDsKKwogCWlvID0gYnRfaW9fY29ubmVjdChCVF9JT19SRkNPTU0sIHJmY29t bV9jb25uZWN0X2NiLCBkZXYsIE5VTEwsICZlcnIsCiAJCQkJQlRfSU9fT1BUX1NPVVJDRV9CREFE RFIsICZkZXYtPnNyYywKIAkJCQlCVF9JT19PUFRfREVTVF9CREFERFIsICZkZXYtPmRzdCwKQEAg LTIwNCwyNSArMzMzLDI0IEBAIHN0YXRpYyB2b2lkIGdldF9yZWNvcmRfY2Ioc2RwX2xpc3RfdCAq cmVjcywgaW50IHBlcnIsIGdwb2ludGVyIHVzZXJfZGF0YSkKIAkJCQlCVF9JT19PUFRfSU5WQUxJ RCk7CiAJaWYgKCFpbykgewogCQllcnJvcigiVW5hYmxlIHRvIGNvbm5lY3Q6ICVzIiwgZXJyLT5t ZXNzYWdlKTsKLQkJaWYgKG1zZykgewotCQkJZXJyb3JfY29tbW9uX3JlcGx5KGRldi0+Y29ubiwg bXNnLCBFUlJPUl9JTlRFUkZBQ0UKLQkJCQkJCSIuQ29ubmVjdGlvbkF0dGVtcHRGYWlsZWQiLAot CQkJCQkJZXJyLT5tZXNzYWdlKTsKLQkJCW1zZyA9IE5VTEw7Ci0JCX0KLQkJZ19lcnJvcl9mcmVl KGVycik7CisJCWlmIChlcnIpCisJCQlnX2Vycm9yX2ZyZWUoZXJyKTsKIAkJZ2F0ZXdheV9jbG9z ZShkZXYpOworCQlnb3RvIGZhaWw7CiAJfQogCiAJZ19pb19jaGFubmVsX3VucmVmKGlvKTsKKwor CWNoYW5nZV9zdGF0ZShkZXYsIEdBVEVXQVlfU1RBVEVfQ09OTkVDVElORyk7CiAJcmV0dXJuOwog CiBmYWlsOgotCWlmIChtc2cpCi0JCWVycm9yX2NvbW1vbl9yZXBseShkZXYtPmNvbm4sIG1zZywg RVJST1JfSU5URVJGQUNFCi0JCQkJCSIuTm90U3VwcG9ydGVkIiwgIk5vdCBzdXBwb3J0ZWQiKTsK KwlpZiAoZ3ctPm1zZykgeworCQllcnJvcl9jb21tb25fcmVwbHkoZGV2LT5jb25uLCBndy0+bXNn LCBFUlJPUl9JTlRFUkZBQ0UKKwkJCQkiLk5vdFN1cHBvcnRlZCIsICJOb3Qgc3VwcG9ydGVkIik7 CisJfQogCi0JZGV2LT5nYXRld2F5LT5jb25uZWN0X21lc3NhZ2UgPSBOVUxMOworCWNoYW5nZV9z dGF0ZShkZXYsIEdBVEVXQVlfU1RBVEVfRElTQ09OTkVDVEVEKTsKIAogCXNjb19jYiA9IGRldi0+ Z2F0ZXdheS0+c2NvX3N0YXJ0X2NiOwogCWlmIChzY29fY2IpCkBAIC0yNDMsMjIgKzM3MSw1NiBA QCBzdGF0aWMgREJ1c01lc3NhZ2UgKmFnX2Nvbm5lY3QoREJ1c0Nvbm5lY3Rpb24gKmNvbm4sIERC dXNNZXNzYWdlICptc2csCiB7CiAJc3RydWN0IGF1ZGlvX2RldmljZSAqYXVfZGV2ID0gKHN0cnVj dCBhdWRpb19kZXZpY2UgKikgZGF0YTsKIAlzdHJ1Y3QgZ2F0ZXdheSAqZ3cgPSBhdV9kZXYtPmdh dGV3YXk7CisJREJ1c01lc3NhZ2UgKnJlcGx5OwogCiAJZGVidWcoImF0IHRoZSBiZWdpbiBvZiBh Z19jb25uZWN0KCkiKTsKLQlpZiAoZ3ctPnJmY29tbSkKKworCWlmICghZ3ctPmFnZW50KQogCQly ZXR1cm4gZ19kYnVzX2NyZWF0ZV9lcnJvcihtc2csIEVSUk9SX0lOVEVSRkFDRQotCQkJCQkiLkFs cmVhZHlDb25uZWN0ZWQiLAotCQkJCQkiQWxyZWFkeSBDb25uZWN0ZWQiKTsKKwkJCQkiLkZhaWxl ZCIsICJBZ2VudCBub3QgYXNzaW5lZCIpOwogCi0JZ3ctPmNvbm5lY3RfbWVzc2FnZSA9IGRidXNf bWVzc2FnZV9yZWYobXNnKTsKIAlpZiAoZ2V0X3JlY29yZHMoYXVfZGV2KSA8IDApIHsKLQkJZGJ1 c19tZXNzYWdlX3VucmVmKGd3LT5jb25uZWN0X21lc3NhZ2UpOwogCQlyZXR1cm4gZ19kYnVzX2Ny ZWF0ZV9lcnJvcihtc2csIEVSUk9SX0lOVEVSRkFDRQogCQkJCQkiLkNvbm5lY3RBdHRlbXB0RmFp bGVkIiwKIAkJCQkJIkNvbm5lY3QgQXR0ZW1wdCBGYWlsZWQiKTsKIAl9CisKKwlyZXBseSA9IGRi dXNfbWVzc2FnZV9uZXdfbWV0aG9kX3JldHVybihtc2cpOworCWlmICghcmVwbHkpCisJCXJldHVy biBOVUxMOworCiAJZGVidWcoImF0IHRoZSBlbmQgb2YgYWdfY29ubmVjdCgpIik7Ci0JcmV0dXJu IE5VTEw7CisKKwlyZXR1cm4gcmVwbHk7Cit9CisKK2ludCBnYXRld2F5X2Nsb3NlKGdwb2ludGVy IGRhdGEpCit7CisJc3RydWN0IGF1ZGlvX2RldmljZSAqZGV2aWNlID0gZGF0YTsKKwlzdHJ1Y3Qg Z2F0ZXdheSAqZ3cgPSBkZXZpY2UtPmdhdGV3YXk7CisJZ2Jvb2xlYW4gdmFsdWUgPSBGQUxTRTsK KworCWlmIChndy0+cmZjb21tKSB7CisJCWdfaW9fY2hhbm5lbF9zaHV0ZG93bihndy0+cmZjb21t LCBUUlVFLCBOVUxMKTsKKwkJZ19pb19jaGFubmVsX3VucmVmKGd3LT5yZmNvbW0pOworCQlndy0+ cmZjb21tID0gTlVMTDsKKwl9CisKKwlpZiAoZ3ctPnNjbykgeworCQlnX2lvX2NoYW5uZWxfc2h1 dGRvd24oZ3ctPnNjbywgVFJVRSwgTlVMTCk7CisJCWdfaW9fY2hhbm5lbF91bnJlZihndy0+c2Nv KTsKKwkJZ3ctPnNjbyA9IE5VTEw7CisJCWd3LT5zY29fc3RhcnRfY2IgPSBOVUxMOworCQlndy0+ c2NvX3N0YXJ0X2NiX2RhdGEgPSBOVUxMOworCX0KKworCWd3LT5zdGF0ZSA9IEdBVEVXQVlfU1RB VEVfRElTQ09OTkVDVEVEOworCisJZW1pdF9wcm9wZXJ0eV9jaGFuZ2VkKGRldmljZS0+Y29ubiwg ZGV2aWNlLT5wYXRoLAorCQkJCUFVRElPX0dBVEVXQVlfSU5URVJGQUNFLAorCQkJCSJDb25uZWN0 ZWQiLCBEQlVTX1RZUEVfQk9PTEVBTiwgJnZhbHVlKTsKKworCXJldHVybiAwOwogfQogCiBzdGF0 aWMgREJ1c01lc3NhZ2UgKmFnX2Rpc2Nvbm5lY3QoREJ1c0Nvbm5lY3Rpb24gKmNvbm4sIERCdXNN ZXNzYWdlICptc2csCkBAIC0yNjksNiArNDMxLDkgQEAgc3RhdGljIERCdXNNZXNzYWdlICphZ19k aXNjb25uZWN0KERCdXNDb25uZWN0aW9uICpjb25uLCBEQnVzTWVzc2FnZSAqbXNnLAogCURCdXNN ZXNzYWdlICpyZXBseSA9IE5VTEw7CiAJY2hhciBnd19hZGRyWzE4XTsKIAorCWlmICghZGV2aWNl LT5jb25uKQorCQlyZXR1cm4gTlVMTDsKKwogCXJlcGx5ID0gZGJ1c19tZXNzYWdlX25ld19tZXRo b2RfcmV0dXJuKG1zZyk7CiAJaWYgKCFyZXBseSkKIAkJcmV0dXJuIE5VTEw7CkBAIC0yNzksMjIg KzQ0NCwxMjggQEAgc3RhdGljIERCdXNNZXNzYWdlICphZ19kaXNjb25uZWN0KERCdXNDb25uZWN0 aW9uICpjb25uLCBEQnVzTWVzc2FnZSAqbXNnLAogCQkJCQkJIkRldmljZSBub3QgQ29ubmVjdGVk Iik7CiAKIAlnYXRld2F5X2Nsb3NlKGRldmljZSk7CisKIAliYTJzdHIoJmRldmljZS0+ZHN0LCBn d19hZGRyKTsKIAlkZWJ1ZygiRGlzY29ubmVjdGVkIGZyb20gJXMsICVzIiwgZ3dfYWRkciwgZGV2 aWNlLT5wYXRoKTsKIAogCXJldHVybiByZXBseTsKIH0KIAorc3RhdGljIHZvaWQgYWdlbnRfZXhp dGVkKERCdXNDb25uZWN0aW9uICpjb25uLCB2b2lkICpkYXRhKQoreworCXN0cnVjdCBnYXRld2F5 ICpnYXRld2F5ID0gZGF0YTsKKwlzdHJ1Y3QgYWdlbnQgKmFnZW50ID0gZ2F0ZXdheS0+YWdlbnQ7 CisKKwlkZWJ1ZygiQWdlbnQgJXMgZXhpdGVkIiwgYWdlbnQtPm5hbWUpOworCisJYWdlbnRfZnJl ZShhZ2VudCk7CisJZ2F0ZXdheS0+YWdlbnQgPSBOVUxMOworfQorCiBzdGF0aWMgREJ1c01lc3Nh Z2UgKmFnX2dldF9wcm9wZXJ0aWVzKERCdXNDb25uZWN0aW9uICpjb25uLCBEQnVzTWVzc2FnZSAq bXNnLAogCQkJCQl2b2lkICpkYXRhKQogewotCXJldHVybiBOVUxMOworCXN0cnVjdCBhdWRpb19k ZXZpY2UgKmRldmljZSA9IGRhdGE7CisJc3RydWN0IGdhdGV3YXkgKmd3ID0gZGV2aWNlLT5nYXRl d2F5OworCURCdXNNZXNzYWdlICpyZXBseTsKKwlEQnVzTWVzc2FnZUl0ZXIgaXRlcjsKKwlEQnVz TWVzc2FnZUl0ZXIgZGljdDsKKwljb25zdCBjaGFyICp2YWx1ZTsKKworCisJcmVwbHkgPSBkYnVz X21lc3NhZ2VfbmV3X21ldGhvZF9yZXR1cm4obXNnKTsKKwlpZiAoIXJlcGx5KQorCQlyZXR1cm4g TlVMTDsKKworCWRidXNfbWVzc2FnZV9pdGVyX2luaXRfYXBwZW5kKHJlcGx5LCAmaXRlcik7CisK KwlkYnVzX21lc3NhZ2VfaXRlcl9vcGVuX2NvbnRhaW5lcigmaXRlciwgREJVU19UWVBFX0FSUkFZ LAorCQkJREJVU19ESUNUX0VOVFJZX0JFR0lOX0NIQVJfQVNfU1RSSU5HCisJCQlEQlVTX1RZUEVf U1RSSU5HX0FTX1NUUklORyBEQlVTX1RZUEVfVkFSSUFOVF9BU19TVFJJTkcKKwkJCURCVVNfRElD VF9FTlRSWV9FTkRfQ0hBUl9BU19TVFJJTkcsICZkaWN0KTsKKworCXZhbHVlID0gY29ubmVjdGVk MnN0cihndy0+c3RhdGUpOworCWRpY3RfYXBwZW5kX2VudHJ5KCZkaWN0LCAiQ29ubmVjdGVkIiwK KwkJCURCVVNfVFlQRV9TVFJJTkcsICZ2YWx1ZSk7CisKKwlkYnVzX21lc3NhZ2VfaXRlcl9jbG9z ZV9jb250YWluZXIoJml0ZXIsICZkaWN0KTsKKworCXJldHVybiByZXBseTsKK30KKworc3RhdGlj IERCdXNNZXNzYWdlICpyZWdpc3Rlcl9hZ2VudChEQnVzQ29ubmVjdGlvbiAqY29ubiwKKwkJCQkJ REJ1c01lc3NhZ2UgKm1zZywgdm9pZCAqZGF0YSkKK3sKKwlzdHJ1Y3QgYXVkaW9fZGV2aWNlICpk ZXZpY2UgPSBkYXRhOworCXN0cnVjdCBnYXRld2F5ICpndyA9IGRldmljZS0+Z2F0ZXdheTsKKwlz dHJ1Y3QgYWdlbnQgKmFnZW50OworCWNvbnN0IGNoYXIgKnBhdGgsICpuYW1lOworCisKKwlpZiAo Z3ctPmFnZW50KQorCQlyZXR1cm4gZ19kYnVzX2NyZWF0ZV9lcnJvcihtc2csCisJCQkJRVJST1Jf SU5URVJGQUNFICIuQWxyZWFkeUV4aXN0cyIsCisJCQkJIkFnZW50IGFscmVhZHkgZXhpc3RzIik7 CisKKwlpZiAoIWRidXNfbWVzc2FnZV9nZXRfYXJncyhtc2csIE5VTEwsIERCVVNfVFlQRV9PQkpF Q1RfUEFUSCwgJnBhdGgsCisJCQlEQlVTX1RZUEVfSU5WQUxJRCkpCisJCXJldHVybiBnX2RidXNf Y3JlYXRlX2Vycm9yKG1zZywgRVJST1JfSU5URVJGQUNFCisJCQkJIi5JbnZhbGlkQXJndW1lbnRz IiwgIkludmFsaWQgYXJndW1lbnQiKTsKKworCW5hbWUgPSBkYnVzX21lc3NhZ2VfZ2V0X3NlbmRl cihtc2cpOworCWFnZW50ID0gZ19uZXcwKHN0cnVjdCBhZ2VudCwgMSk7CisJaWYgKCFhZ2VudCkK KwkJcmV0dXJuIGdfZGJ1c19jcmVhdGVfZXJyb3IobXNnLAorCQkJCUVSUk9SX0lOVEVSRkFDRSAi LkZhaWxlZCIsCisJCQkJIkZhaWxlZCB0byBjcmVhdGUgYSBuZXcgYWdlbnQiKTsKKworCWFnZW50 LT5uYW1lID0gc3RyZHVwKG5hbWUpOworCWFnZW50LT5wYXRoID0gc3RyZHVwKHBhdGgpOworCisJ YWdlbnQtPndhdGNoID0gZ19kYnVzX2FkZF9kaXNjb25uZWN0X3dhdGNoKGNvbm4sIG5hbWUsCisJ CQlhZ2VudF9leGl0ZWQsIGd3LCBOVUxMKTsKKworCWd3LT5hZ2VudCA9IGFnZW50OworCisJZ3ct Pm1zZyA9IGRidXNfbWVzc2FnZV9yZWYobXNnKTsKKworCXJldHVybiBkYnVzX21lc3NhZ2VfbmV3 X21ldGhvZF9yZXR1cm4obXNnKTsKK30KKworc3RhdGljIERCdXNNZXNzYWdlICp1bnJlZ2lzdGVy X2FnZW50KERCdXNDb25uZWN0aW9uICpjb25uLAorCQkJCURCdXNNZXNzYWdlICptc2csIHZvaWQg KmRhdGEpCit7CisJc3RydWN0IGF1ZGlvX2RldmljZSAqZGV2aWNlID0gZGF0YTsKKwlzdHJ1Y3Qg Z2F0ZXdheSAqZ3cgPSBkZXZpY2UtPmdhdGV3YXk7CisJc3RydWN0IGFnZW50ICphZ2VudDsKKwor CWlmICghZ3ctPmFnZW50KQorCQlnb3RvIGRvbmU7CisKKwlhZ2VudCA9IGd3LT5hZ2VudDsKKwlp ZiAoc3RyY21wKGFnZW50LT5uYW1lLCBkYnVzX21lc3NhZ2VfZ2V0X3NlbmRlcihtc2cpKSAhPSAw KQorCQlyZXR1cm4gZ19kYnVzX2NyZWF0ZV9lcnJvcihtc2csCisJCQkJRVJST1JfSU5URVJGQUNF ICIuRmFpbGVkIiwgIlBlcm1pc3Npb24gZGVuaWVkIik7CisKKwlhZ2VudF9kaXNjb25uZWN0KGRl dmljZSwgZ3ctPmFnZW50KTsKKworCWdfZGJ1c19yZW1vdmVfd2F0Y2goY29ubiwgYWdlbnQtPndh dGNoKTsKKworCWRidXNfbWVzc2FnZV91bnJlZihndy0+bXNnKTsKKworCWFnZW50X2ZyZWUoYWdl bnQpOworCWd3LT5hZ2VudCA9IE5VTEw7CisKK2RvbmU6CisJcmV0dXJuIGRidXNfbWVzc2FnZV9u ZXdfbWV0aG9kX3JldHVybihtc2cpOwogfQogCiBzdGF0aWMgR0RCdXNNZXRob2RUYWJsZSBnYXRl d2F5X21ldGhvZHNbXSA9IHsKIAl7ICJDb25uZWN0IiwgIiIsICIiLCBhZ19jb25uZWN0LCBHX0RC VVNfTUVUSE9EX0ZMQUdfQVNZTkMgfSwKLQl7ICJEaXNjb25uZWN0IiwgIiIsICIiLCBhZ19kaXNj b25uZWN0IH0sCisJeyAiRGlzY29ubmVjdCIsICIiLCAiIiwgYWdfZGlzY29ubmVjdCwgR19EQlVT X01FVEhPRF9GTEFHX0FTWU5DIH0sCiAJeyAiR2V0UHJvcGVydGllcyIsICIiLCAiYXtzdn0iLCBh Z19nZXRfcHJvcGVydGllcyB9LAorCXsgIlJlZ2lzdGVyQWdlbnQiLCAibyIsICIiLCByZWdpc3Rl cl9hZ2VudCB9LAorCXsgIlVucmVnaXN0ZXJBZ2VudCIsICJvIiwgIiIsIHVucmVnaXN0ZXJfYWdl bnQgfSwKIAl7IE5VTEwsIE5VTEwsIE5VTEwsIE5VTEwgfQogfTsKIApAQCAtMzA3LDE3ICs1Nzgs MTUgQEAgc3RydWN0IGdhdGV3YXkgKmdhdGV3YXlfaW5pdChzdHJ1Y3QgYXVkaW9fZGV2aWNlICpk ZXYpCiB7CiAJc3RydWN0IGdhdGV3YXkgKmd3OwogCisJZ3cgPSBnX25ldzAoc3RydWN0IGdhdGV3 YXksIDEpOworCiAJaWYgKCFnX2RidXNfcmVnaXN0ZXJfaW50ZXJmYWNlKGRldi0+Y29ubiwgZGV2 LT5wYXRoLAogCQkJCQlBVURJT19HQVRFV0FZX0lOVEVSRkFDRSwKIAkJCQkJZ2F0ZXdheV9tZXRo b2RzLCBnYXRld2F5X3NpZ25hbHMsCiAJCQkJCU5VTEwsIGRldiwgTlVMTCkpCiAJCXJldHVybiBO VUxMOwogCi0JZGVidWcoImluIGdhdGV3YXlfaW5pdCwgZGV2IGlzICVwIiwgZGV2KTsKLQlndyA9 IGdfbmV3MChzdHJ1Y3QgZ2F0ZXdheSwgMSk7Ci0JZ3ctPnN0YXRlID0gR0FURVdBWV9TVEFURV9E SVNDT05ORUNURUQ7CiAJcmV0dXJuIGd3OwotCiB9CiAKIGdib29sZWFuIGdhdGV3YXlfaXNfY29u bmVjdGVkKHN0cnVjdCBhdWRpb19kZXZpY2UgKmRldikKQEAgLTMyNiwxNyArNTk1LDYgQEAgZ2Jv b2xlYW4gZ2F0ZXdheV9pc19jb25uZWN0ZWQoc3RydWN0IGF1ZGlvX2RldmljZSAqZGV2KQogCQkJ ZGV2LT5nYXRld2F5LT5zdGF0ZSA9PSBHQVRFV0FZX1NUQVRFX0NPTk5FQ1RFRCk7CiB9CiAKLWlu dCBnYXRld2F5X2Nvbm5lY3RfcmZjb21tKHN0cnVjdCBhdWRpb19kZXZpY2UgKmRldiwgR0lPQ2hh bm5lbCAqaW8pCi17Ci0JaWYgKCFpbykKLQkJcmV0dXJuIC1FSU5WQUw7Ci0KLQlnX2lvX2NoYW5u ZWxfcmVmKGlvKTsKLQlkZXYtPmdhdGV3YXktPnJmY29tbSA9IGlvOwotCi0JcmV0dXJuIDA7Ci19 Ci0KIGludCBnYXRld2F5X2Nvbm5lY3Rfc2NvKHN0cnVjdCBhdWRpb19kZXZpY2UgKmRldiwgR0lP Q2hhbm5lbCAqaW8pCiB7CiAJc3RydWN0IGdhdGV3YXkgKmd3ID0gZGV2LT5nYXRld2F5OwpAQCAt MzQ3LDQyICs2MDUsMzkgQEAgaW50IGdhdGV3YXlfY29ubmVjdF9zY28oc3RydWN0IGF1ZGlvX2Rl dmljZSAqZGV2LCBHSU9DaGFubmVsICppbykKIAlndy0+c2NvID0gZ19pb19jaGFubmVsX3JlZihp byk7CiAKIAlnX2lvX2FkZF93YXRjaChndy0+c2NvLCBHX0lPX0VSUiB8IEdfSU9fSFVQIHwgR19J T19OVkFMLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoR0lPRnVuYykgc2NvX2lv X2NiLCBkZXYpOworCQkJCSAoR0lPRnVuYykgc2NvX2lvX2NiLCBkZXYpOworCisJY2hhbmdlX3N0 YXRlKGRldiwgR0FURVdBWV9TVEFURV9QTEFZSU5HKTsKKwogCXJldHVybiAwOwogfQogCi12b2lk IGdhdGV3YXlfc3RhcnRfc2VydmljZShzdHJ1Y3QgYXVkaW9fZGV2aWNlICpkZXZpY2UpCitpbnQg Z2F0ZXdheV9jb25uZWN0X3JmY29tbShzdHJ1Y3QgYXVkaW9fZGV2aWNlICpkZXYsCisJCUdJT0No YW5uZWwgKmNoYW4sIGludCBjaCkKIHsKLQlyZmNvbW1fY29ubmVjdF9jYihkZXZpY2UtPmdhdGV3 YXktPnJmY29tbSwgTlVMTCwgZGV2aWNlKTsKKwlpZiAoIWNoYW4pCisJCXJldHVybiAtRUlOVkFM OworCisJZ19pb19jaGFubmVsX3JlZihjaGFuKTsKKwlkZXYtPmdhdGV3YXktPnJmY29tbSA9IGNo YW47CisJZGV2LT5nYXRld2F5LT5jaGFubmVsID0gY2g7CisKKwlyZXR1cm4gMDsKIH0KIAotaW50 IGdhdGV3YXlfY2xvc2Uoc3RydWN0IGF1ZGlvX2RldmljZSAqZGV2aWNlKQordm9pZCBnYXRld2F5 X3N0YXJ0X3NlcnZpY2Uoc3RydWN0IGF1ZGlvX2RldmljZSAqZGV2KQogewotCXN0cnVjdCBnYXRl d2F5ICpndyA9IGRldmljZS0+Z2F0ZXdheTsKLQlHSU9DaGFubmVsICpyZmNvbW0gPSBndy0+cmZj b21tOwotCUdJT0NoYW5uZWwgKnNjbyA9IGd3LT5zY287Ci0JZ2Jvb2xlYW4gdmFsdWUgPSBGQUxT RTsKKwlzdHJ1Y3QgZ2F0ZXdheSAqZ3cgPSBkZXYtPmdhdGV3YXk7CisJR0Vycm9yICplcnIgPSBO VUxMOwogCi0JaWYgKHJmY29tbSkgewotCQlnX2lvX2NoYW5uZWxfc2h1dGRvd24ocmZjb21tLCBU UlVFLCBOVUxMKTsKLQkJZ19pb19jaGFubmVsX3VucmVmKHJmY29tbSk7Ci0JCWd3LT5yZmNvbW0g PSBOVUxMOwotCX0KKwlpZiAoZ3ctPnJmY29tbSA9PSBOVUxMKQorCQlyZXR1cm47CiAKLQlpZiAo c2NvKSB7Ci0JCWdfaW9fY2hhbm5lbF9zaHV0ZG93bihzY28sIFRSVUUsIE5VTEwpOwotCQlnX2lv X2NoYW5uZWxfdW5yZWYoc2NvKTsKLQkJZ3ctPnNjbyA9IE5VTEw7Ci0JCWd3LT5zY29fc3RhcnRf Y2IgPSBOVUxMOwotCQlndy0+c2NvX3N0YXJ0X2NiX2RhdGEgPSBOVUxMOworCWlmICghYnRfaW9f YWNjZXB0KGd3LT5yZmNvbW0sIHJmY29tbV9jb25uZWN0X2NiLCBkZXYsIE5VTEwsCisJCQkJCQkJ JmVycikpIHsKKwkJZXJyb3IoImJ0X2lvX2FjY2VwdDogJXMiLCBlcnItPm1lc3NhZ2UpOworCQln X2Vycm9yX2ZyZWUoZXJyKTsKIAl9Ci0KLQlndy0+c3RhdGUgPSBHQVRFV0FZX1NUQVRFX0RJU0NP Tk5FQ1RFRDsKLQotCWVtaXRfcHJvcGVydHlfY2hhbmdlZChkZXZpY2UtPmNvbm4sIGRldmljZS0+ cGF0aCwKLQkJCQlBVURJT19HQVRFV0FZX0lOVEVSRkFDRSwKLQkJCQkiQ29ubmVjdGVkIiwgREJV U19UWVBFX0JPT0xFQU4sICZ2YWx1ZSk7Ci0JcmV0dXJuIDA7CiB9CiAKIC8qIFRoZXNlIGFyZSBm dW5jdGlvbnMgdG8gYmUgY2FsbGVkIGZyb20gdW5peC5jIGZvciBhdWRpbyBzeXN0ZW0KQEAgLTM5 OSw4ICs2NTQsMTIgQEAgZ2Jvb2xlYW4gZ2F0ZXdheV9yZXF1ZXN0X3N0cmVhbShzdHJ1Y3QgYXVk aW9fZGV2aWNlICpkZXYsCiAJCWd3LT5zY29fc3RhcnRfY2JfZGF0YSA9IHVzZXJfZGF0YTsKIAkJ Z2V0X3JlY29yZHMoZGV2KTsKIAl9IGVsc2UgaWYgKCFndy0+c2NvKSB7CisJCWNoYXIgc291cmNl WzEyOF0sIGRlc3RpbmF0aW9uWzEyOF07CisKIAkJZ3ctPnNjb19zdGFydF9jYiA9IGNiOwogCQln dy0+c2NvX3N0YXJ0X2NiX2RhdGEgPSB1c2VyX2RhdGE7CisJCWJhMnN0cigmZGV2LT5zcmMsIHNv dXJjZSk7CisJCWJhMnN0cigmZGV2LT5kc3QsIGRlc3RpbmF0aW9uKTsKIAkJaW8gPSBidF9pb19j b25uZWN0KEJUX0lPX1NDTywgc2NvX2Nvbm5lY3RfY2IsIGRldiwgTlVMTCwgJmVyciwKIAkJCQlC VF9JT19PUFRfU09VUkNFX0JEQUREUiwgJmRldi0+c3JjLAogCQkJCUJUX0lPX09QVF9ERVNUX0JE QUREUiwgJmRldi0+ZHN0LApAQCAtNDY0LDQgKzcyMywzIEBAIHZvaWQgZ2F0ZXdheV9zdXNwZW5k X3N0cmVhbShzdHJ1Y3QgYXVkaW9fZGV2aWNlICpkZXYpCiAJZ3ctPnNjb19zdGFydF9jYiA9IE5V TEw7CiAJZ3ctPnNjb19zdGFydF9jYl9kYXRhID0gTlVMTDsKIH0KLQpkaWZmIC0tZ2l0IGEvYXVk aW8vZ2F0ZXdheS5oIGIvYXVkaW8vZ2F0ZXdheS5oCmluZGV4IDNiMDQ1N2YuLmVhZjY4MDEgMTAw NjQ0Ci0tLSBhL2F1ZGlvL2dhdGV3YXkuaAorKysgYi9hdWRpby9nYXRld2F5LmgKQEAgLTQsNiAr NCw3IEBACiAgKgogICogIENvcHlyaWdodCAoQykgMjAwNi0yMDEwICBOb2tpYSBDb3Jwb3JhdGlv bgogICogIENvcHlyaWdodCAoQykgMjAwNC0yMDEwICBNYXJjZWwgSG9sdG1hbm4gPG1hcmNlbEBo b2x0bWFubi5vcmc+CisgKiAgQ29weXJpZ2h0IChDKSAyMDA5LTIwMDkgIFpoZW5odWEgWmhhbmcg PHpoZW5odWEuemhhbmdAaW50ZWwuY29tPgogICoKICAqCiAgKiAgVGhpcyBwcm9ncmFtIGlzIGZy ZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKQEAgLTIy LDIwICsyMywyNSBAQAogICoKICAqLwogCi0jZGVmaW5lIEFVRElPX0dBVEVXQVlfSU5URVJGQUNF ICJvcmcuYmx1ZXouSGVhZHNldEdhdGV3YXkiCisjZGVmaW5lIEFVRElPX0dBVEVXQVlfSU5URVJG QUNFICJvcmcuYmx1ZXouSGFuZHNmcmVlR2F0ZXdheSIKIAogI2RlZmluZSBERUZBVUxUX0hTUF9I U19DSEFOTkVMIDYKICNkZWZpbmUgREVGQVVMVF9IRlBfSFNfQ0hBTk5FTCA3CiAKIHR5cGVkZWYg ZW51bSB7CiAJR0FURVdBWV9TVEFURV9ESVNDT05ORUNURUQsCi0JR0FURVdBWV9TVEFURV9DT05O RUNURUQKKwlHQVRFV0FZX1NUQVRFX0NPTk5FQ1RFRCwKKwlHQVRFV0FZX1NUQVRFX0NPTk5FQ1RJ TkcsCisJR0FURVdBWV9TVEFURV9QTEFZSU5HLAogfSBnYXRld2F5X3N0YXRlX3Q7CiAKIHR5cGVk ZWYgdm9pZCAoKmdhdGV3YXlfc3RyZWFtX2NiX3QpIChzdHJ1Y3QgYXVkaW9fZGV2aWNlICpkZXYs IHZvaWQgKnVzZXJfZGF0YSk7CisKIHN0cnVjdCBnYXRld2F5ICpnYXRld2F5X2luaXQoc3RydWN0 IGF1ZGlvX2RldmljZSAqZGV2aWNlKTsKK3ZvaWQgZ2F0ZXdheV9leGl0KCk7CiBnYm9vbGVhbiBn YXRld2F5X2lzX2Nvbm5lY3RlZChzdHJ1Y3QgYXVkaW9fZGV2aWNlICpkZXYpOwotaW50IGdhdGV3 YXlfY29ubmVjdF9yZmNvbW0oc3RydWN0IGF1ZGlvX2RldmljZSAqZGV2LCBHSU9DaGFubmVsICpj aGFuKTsKK2ludCBnYXRld2F5X2Nvbm5lY3RfcmZjb21tKHN0cnVjdCBhdWRpb19kZXZpY2UgKmRl diwKKwkJCUdJT0NoYW5uZWwgKmNoYW4sIGludCBjaCk7CiBpbnQgZ2F0ZXdheV9jb25uZWN0X3Nj byhzdHJ1Y3QgYXVkaW9fZGV2aWNlICpkZXYsIEdJT0NoYW5uZWwgKmNoYW4pOwogdm9pZCBnYXRl d2F5X3N0YXJ0X3NlcnZpY2Uoc3RydWN0IGF1ZGlvX2RldmljZSAqZGV2aWNlKTsKIGdib29sZWFu IGdhdGV3YXlfcmVxdWVzdF9zdHJlYW0oc3RydWN0IGF1ZGlvX2RldmljZSAqZGV2LApkaWZmIC0t Z2l0IGEvYXVkaW8vbWFuYWdlci5jIGIvYXVkaW8vbWFuYWdlci5jCmluZGV4IDQxM2MxZjMuLjNh YzFhNjAgMTAwNjQ0Ci0tLSBhL2F1ZGlvL21hbmFnZXIuYworKysgYi9hdWRpby9tYW5hZ2VyLmMK QEAgLTE5OCw3ICsxOTgsNyBAQCBzdGF0aWMgdm9pZCBoYW5kbGVfdXVpZChjb25zdCBjaGFyICp1 dWlkc3RyLCBzdHJ1Y3QgYXVkaW9fZGV2aWNlICpkZXZpY2UpCiAJCWJyZWFrOwogCWNhc2UgSEFO RFNGUkVFX0FHV19TVkNMQVNTX0lEOgogCQlkZWJ1ZygiRm91bmQgSGFuZHNmcmVlIEFHIHJlY29y ZCIpOwotCQlpZiAoZGV2aWNlLT5nYXRld2F5ID09IE5VTEwpCisJCWlmIChlbmFibGVkLmdhdGV3 YXkgJiYgKGRldmljZS0+Z2F0ZXdheSA9PSBOVUxMKSkKIAkJCWRldmljZS0+Z2F0ZXdheSA9IGdh dGV3YXlfaW5pdChkZXZpY2UpOwogCQlicmVhazsKIAljYXNlIEFVRElPX1NJTktfU1ZDTEFTU19J RDoKQEAgLTU2Nyw4ICs1NjcsOCBAQCBzdGF0aWMgdm9pZCBoZl9pb19jYihHSU9DaGFubmVsICpj aGFuLCBncG9pbnRlciBkYXRhKQogCQlyZXR1cm47CiAJfQogCi0Jc2VydmVyX3V1aWQgPSBIRlBf SFNfVVVJRDsKLQlyZW1vdGVfdXVpZCA9IEhGUF9BR19VVUlEOworCXNlcnZlcl91dWlkID0gSEZQ X0FHX1VVSUQ7CisJcmVtb3RlX3V1aWQgPSBIRlBfSFNfVVVJRDsKIAlzdmNsYXNzID0gSEFORFNG UkVFX0FHV19TVkNMQVNTX0lEOwogCiAJZGV2aWNlID0gbWFuYWdlcl9nZXRfZGV2aWNlKCZzcmMs ICZkc3QsIFRSVUUpOwpAQCAtNTg2LDcgKzU4Niw3IEBAIHN0YXRpYyB2b2lkIGhmX2lvX2NiKEdJ T0NoYW5uZWwgKmNoYW4sIGdwb2ludGVyIGRhdGEpCiAJCWdvdG8gZHJvcDsKIAl9CiAKLQlpZiAo Z2F0ZXdheV9jb25uZWN0X3JmY29tbShkZXZpY2UsIGNoYW4pIDwgMCkgeworCWlmIChnYXRld2F5 X2Nvbm5lY3RfcmZjb21tKGRldmljZSwgY2hhbiwgY2gpIDwgMCkgewogCQllcnJvcigiQWxsb2Nh dGluZyBuZXcgR0lPQ2hhbm5lbCBmYWlsZWQhIik7CiAJCWdvdG8gZHJvcDsKIAl9CkBAIC05MDUs MjIgKzkwNSwxMiBAQCBzdGF0aWMgdm9pZCBoZWFkc2V0X3NlcnZlcl9yZW1vdmUoc3RydWN0IGJ0 ZF9hZGFwdGVyICphZGFwdGVyKQogc3RhdGljIGludCBnYXRld2F5X3NlcnZlcl9wcm9iZShzdHJ1 Y3QgYnRkX2FkYXB0ZXIgKmFkYXB0ZXIpCiB7CiAJc3RydWN0IGF1ZGlvX2FkYXB0ZXIgKmFkcDsK LQljb25zdCBnY2hhciAqcGF0aCA9IGFkYXB0ZXJfZ2V0X3BhdGgoYWRhcHRlcik7Ci0JaW50IHJl dDsKLQotCURCRygicGF0aCAlcyIsIHBhdGgpOwogCiAJYWRwID0gYXVkaW9fYWRhcHRlcl9nZXQo YWRhcHRlcik7CiAJaWYgKCFhZHApCiAJCXJldHVybiAtRUlOVkFMOwogCi0JcmV0ID0gZ2F0ZXdh eV9zZXJ2ZXJfaW5pdChhZHApOwotCWlmIChyZXQgPCAwKSB7Ci0JCWF1ZGlvX2FkYXB0ZXJfcmVm KGFkcCk7Ci0JCXJldHVybiByZXQ7Ci0JfQotCi0JcmV0dXJuIDA7CisJcmV0dXJuIGdhdGV3YXlf c2VydmVyX2luaXQoYWRwKTsKIH0KIAogc3RhdGljIHZvaWQgZ2F0ZXdheV9zZXJ2ZXJfcmVtb3Zl KHN0cnVjdCBidGRfYWRhcHRlciAqYWRhcHRlcikKZGlmZiAtLWdpdCBhL2F1ZGlvL3VuaXguYyBi L2F1ZGlvL3VuaXguYwppbmRleCA1Y2Y0Zjk0Li5iZDFhNDE1IDEwMDY0NAotLS0gYS9hdWRpby91 bml4LmMKKysrIGIvYXVkaW8vdW5peC5jCkBAIC0zOTUsNiArMzk1LDkgQEAgc3RhdGljIHZvaWQg Z2F0ZXdheV9yZXN1bWVfY29tcGxldGUoc3RydWN0IGF1ZGlvX2RldmljZSAqZGV2LCB2b2lkICp1 c2VyX2RhdGEpCiAJc3RydWN0IGJ0X3N0YXJ0X3N0cmVhbV9yc3AgKnJzcCA9ICh2b2lkICopIGJ1 ZjsKIAlzdHJ1Y3QgYnRfbmV3X3N0cmVhbV9pbmQgKmluZCA9ICh2b2lkICopIGJ1ZjsKIAorCWlm ICghZGV2KQorCQlnb3RvIGZhaWxlZDsKKwogCW1lbXNldChidWYsIDAsIHNpemVvZihidWYpKTsK IAlyc3AtPmgudHlwZSA9IEJUX1JFU1BPTlNFOwogCXJzcC0+aC5uYW1lID0gQlRfU1RBUlRfU1RS RUFNOwpAQCAtNDE2LDYgKzQxOSwxMSBAQCBzdGF0aWMgdm9pZCBnYXRld2F5X3Jlc3VtZV9jb21w bGV0ZShzdHJ1Y3QgYXVkaW9fZGV2aWNlICpkZXYsIHZvaWQgKnVzZXJfZGF0YSkKIAl9CiAKIAlj bGllbnQtPnJlcV9pZCA9IDA7CisJcmV0dXJuOworCitmYWlsZWQ6CisJZXJyb3IoImdhdGV3YXlf cmVzdW1lX2NvbXBsZXRlOiByZXN1bWUgZmFpbGVkIik7CisJdW5peF9pcGNfZXJyb3IoY2xpZW50 LCBCVF9TVEFSVF9TVFJFQU0sIEVJTyk7CiB9CiAKIHN0YXRpYyB2b2lkIGhlYWRzZXRfc3VzcGVu ZF9jb21wbGV0ZShzdHJ1Y3QgYXVkaW9fZGV2aWNlICpkZXYsIHZvaWQgKnVzZXJfZGF0YSkKZGlm ZiAtLWdpdCBhL2RvYy9oZnAtYXBpLnR4dCBiL2RvYy9oZnAtYXBpLnR4dApuZXcgZmlsZSBtb2Rl IDEwMDY0NAppbmRleCAwMDAwMDAwLi5lZDUyYmUxCi0tLSAvZGV2L251bGwKKysrIGIvZG9jL2hm cC1hcGkudHh0CkBAIC0wLDAgKzEsODEgQEAKK0dhdGV3YXkgaGllcmFyY2h5Cis9PT09PT09PT09 PT09PT09PT09PT09PT0KKworU2VydmljZQkJb3JnLmJsdWV6CitJbnRlcmZhY2UJb3JnLmJsdWV6 LkhhbmRzZnJlZUdhdGV3YXkKK09iamVjdCBwYXRoCVt2YXJpYWJsZSBwcmVmaXhdL3toY2kwLGhj aTEsLi4ufS9kZXZfWFhfWFhfWFhfWFhfWFhfWFgKKworVGhpcyBpbnRlcmZhY2UgaXMgYXZhaWxh YmxlIGZvciByZW1vdGUgZGV2aWNlcyB3aGljaCBjYW4gZnVuY3Rpb24gaW4gdGhlIEF1ZGlvCitH YXRld2F5IHJvbGUgb2YgdGhlIEhGUCBwcm9maWxlcy4gIEl0IGlzIGludGVuZGVkIHRvIGJlIHVz ZWQgd2l0aCBleHRlcm5hbAordGVsZXBob255IHN0YWNrcyAvIGhhbmRsZXJzIG9mIHRoZSBIRlAg cHJvdG9jb2wuCisKK01ldGhvZHMJCXZvaWQgQ29ubmVjdCgpCisKKwkJCUNvbm5lY3QgdG8gdGhl IEFHIHNlcnZpY2Ugb24gdGhlIHJlbW90ZSBkZXZpY2UuCisKKwkJdm9pZCBEaXNjb25uZWN0KCkK KworCQkJRGlzY29ubmVjdCBmcm9tIHRoZSBBRyBzZXJ2aWNlIG9uIHRoZSByZW1vdGUgZGV2aWNl CisKKwkJZGljdCBHZXRQcm9wZXJ0aWVzKCkKKworCQkJUmV0dXJucyBhbGwgcHJvcGVydGllcyBm b3IgdGhlIGludGVyZmFjZS4gU2VlIHRoZQorCQkJcHJvcGVydGllcyBzZWN0aW9uIGZvciBhdmFp bGFibGUgcHJvcGVydGllcy4KKworCQl2b2lkIFJlZ2lzdGVyQWdlbnQob2JqZWN0IHBhdGgpCisK KwkJCVRoZSBvYmplY3QgcGF0aCBkZWZpbmVzIHRoZSBwYXRoIHRoZSBvZiB0aGUgYWdlbnQKKwkJ CXRoYXQgd2lsbCBiZSBjYWxsZWQgd2hlbiBhIG5ldyBIYW5kc2ZyZWUgY29ubmVjdGlvbgorCQkJ aXMgZXN0YWJsaXNoZWQuCisJCQkKKwkJCUlmIGFuIGFwcGxpY2F0aW9uIGRpc2Nvbm5lY3RzIGZy b20gdGhlIGJ1cyBhbGwgb2YgaXRzCisJCQlyZWdpc3RlcmVkIGFnZW50cyB3aWxsIGJlIHJlbW92 ZWQuCisKKwkJdm9pZCBVbnJlZ2lzdGVyQWdlbnQob2JqZWN0IHBhdGgpCisKKwkJCVRoaXMgdW5y ZWdpc3RlcnMgdGhlIGFnZW50IHRoYXQgaGFzIGJlZW4gcHJldmlvdXNseQorCQkJcmVnaXN0ZXJl ZC4gVGhlIG9iamVjdCBwYXRoIHBhcmFtZXRlciBtdXN0IG1hdGNoIHRoZQorCQkJc2FtZSB2YWx1 ZSB0aGF0IGhhcyBiZWVuIHVzZWQgb24gcmVnaXN0cmF0aW9uLgorCitTaWduYWxzCQlQcm9wZXJ0 eUNoYW5nZWQoc3RyaW5nIG5hbWUsIHZhcmlhbnQgdmFsdWUpCisKKwkJCVRoaXMgc2lnbmFsIGlu ZGljYXRlcyBhIGNoYW5nZWQgdmFsdWUgb2YgdGhlIGdpdmVuCisJCQlwcm9wZXJ0eS4KKworUHJv cGVydGllcwlzdHJpbmcgU3RhdGUgW3JlYWRvbmx5XQorCisJCQlJbmRpY2F0ZXMgdGhlIHN0YXRl IG9mIHRoZSBjb25uZWN0aW9uLiAgUG9zc2libGUKKwkJCXZhbHVlcyBhcmU6CisJCQkJImRpc2Nv bm5lY3RlZCIKKwkJCQkiY29ubmVjdGluZyIKKwkJCQkiY29ubmVjdGVkIgorCQkJCSJwbGF5aW5n IgorCitIYW5kc2ZyZWVBZ2VudCBoaWVyYXJjaHkKKz09PT09PT09PT09PT09PQorCitTZXJ2aWNl ICAgICAgICAgdW5pcXVlIG5hbWUKK0ludGVyZmFjZSAgICAgICBvcmcuYmx1ZXouSGFuZHNmcmVl QWdlbnQKK09iamVjdCBwYXRoICAgICBmcmVlbHkgZGVmaW5hYmxlCisKK01ldGhvZHMJCXZvaWQg TmV3Q29ubmVjdGlvbihmaWxlZGVzY3JpcHRvciBmZCkKKworCQkJVGhpcyBtZXRob2QgZ2V0cyBj YWxsZWQgd2hlbmV2ZXIgYSBuZXcgaGFuZHNmcmVlCisJCQljb25uZWN0aW9uIGhhcyBiZWVuIGVz dGFibGlzaGVkLiAgVGhlIG9iamVjdHBhdGgKKwkJCWNvbnRhaW5zIHRoZSBvYmplY3QgcGF0aCBv ZiB0aGUgcmVtb3RlIGRldmljZS4gIFRoaXMKKwkJCW1ldGhvZCBhc3N1bWVzIHRoYXQgREJ1cyBk YWVtb24gd2l0aCBmaWxlIGRlc2NyaXB0b3IKKwkJCXBhc3NpbmcgY2FwYWJpbGl0eSBpcyBiZWlu ZyB1c2VkLgorCisJCQlUaGUgYWdlbnQgc2hvdWxkIG9ubHkgcmV0dXJuIHN1Y2Nlc3NmdWxseSBv bmNlIHRoZQorCQkJZXN0YWJsaXNobWVudCBvZiB0aGUgc2VydmljZSBsZXZlbCBjb25uZWN0aW9u IChTTEMpCisJCQloYXMgYmVlbiBjb21wbGV0ZWQuICBJbiB0aGUgY2FzZSBvZiBIYW5kc2ZyZWUg dGhpcworCQkJbWVhbnMgdGhhdCBCUlNGIGV4Y2hhbmdlIGhhcyBiZWVuIHBlcmZvcm1lZCBhbmQK KwkJCW5lY2Vzc2FyeSBpbml0aWFsaXphdGlvbiBoYXMgYmVlbiBkb25lLgorCisJCQlQb3NzaWJs ZSBFcnJvcnM6IG9yZy5ibHVlei5FcnJvci5JbnZhbGlkQXJndW1lbnRzCisJCQkJCSBvcmcuYmx1 ZXouRXJyb3IuRmFpbGVkCisKKwkJdm9pZCBSZWxlYXNlKCkKKworCQkJVGhpcyBtZXRob2QgZ2V0 cyBjYWxsZWQgd2hlbmV2ZXIgdGhlIHNlcnZpY2UgZGFlbW9uCisJCQl1bnJlZ2lzdGVycyB0aGUg YWdlbnQuCi0tIAoxLjYuNC40Cgo= --000e0cd61a52050a8b047d9e0284 Content-Type: application/octet-stream; name="0001-Add-HFP-support-through-BlueZ.patch" Content-Disposition: attachment; filename="0001-Add-HFP-support-through-BlueZ.patch" Content-Transfer-Encoding: base64 X-Attachment-Id: f_g4oj6ih75 RnJvbSA2MWY0ZDVkZjFkNTRlMzE4ZWViMDM5YmMwNDhjMjI3NjNjYTNlMjBiIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBHdXN0YXZvIEYuIFBhZG92YW4gPHBhZG92YW5AcHJvZnVzaW9u Lm1vYmk+CkRhdGU6IEZyaSwgOCBKYW4gMjAxMCAxNzoyNTo0MyAtMDIwMApTdWJqZWN0OiBbUEFU Q0hdIEFkZCBIRlAgc3VwcG9ydCB0aHJvdWdoIEJsdWVaCgpJdCB1c2VzIEJsdWVaIHRocm91Z2gg dG8gZ2V0IEhGUCB3b3JraW5nIGZvbGxvd2luZyB0aGUKb3JnLmJsdWV6LkhhbmRzZnJlZUdhdGV3 YXkgYW5kIG9yZy5ibHVlei5IYW5kc2ZyZWVBZ2VudCBmcm9tIHRoZSBCbHVlWgpELUJ1cyBBUEku CgpZb3UgbmVlZCB0aGUgSEZQIHBhdGNoIGludG8gQmx1ZVogYW5kIGRidXMgMS4zLgoKTWFueSB0 aGFua3MgdG8gWmhlbmh1YSBaaGFuZyA8emhlbmh1YS56aGFuZ0BpbnRlbC5jb20+IGZvciBpdHMg cHJvdG90eXBlCm9uIHRoaXMgY29kZS4KLS0tCiBkcml2ZXJzL2hmcG1vZGVtL2hmcG1vZGVtLmgg fCAgICAyICsKIHBsdWdpbnMvaGZwLmMgICAgICAgICAgICAgICB8ICA0MTkgKysrKysrKysrKysr KysrKysrKysrKysrKysrKysrKysrKysrKysrKystLQogcGx1Z2lucy9tb2RlbWNvbmYuYyAgICAg ICAgIHwgICAgMSAtCiAzIGZpbGVzIGNoYW5nZWQsIDQwNyBpbnNlcnRpb25zKCspLCAxNSBkZWxl dGlvbnMoLSkKCmRpZmYgLS1naXQgYS9kcml2ZXJzL2hmcG1vZGVtL2hmcG1vZGVtLmggYi9kcml2 ZXJzL2hmcG1vZGVtL2hmcG1vZGVtLmgKaW5kZXggNTA5ODQ2Yi4uNWZlZTY4ZiAxMDA2NDQKLS0t IGEvZHJpdmVycy9oZnBtb2RlbS9oZnBtb2RlbS5oCisrKyBiL2RyaXZlcnMvaGZwbW9kZW0vaGZw bW9kZW0uaApAQCAtNjMsMTEgKzYzLDEzIEBAIGVudW0gaGZwX2luZGljYXRvciB7CiAKIHN0cnVj dCBoZnBfZGF0YSB7CiAJR0F0Q2hhdCAqY2hhdDsKKwljaGFyICpoYW5kc2ZyZWVfcGF0aDsKIAl1 bnNpZ25lZCBpbnQgYWdfZmVhdHVyZXM7CiAJdW5zaWduZWQgaW50IGFnX21wdHlfZmVhdHVyZXM7 CiAJdW5zaWduZWQgaW50IGhmX2ZlYXR1cmVzOwogCXVuc2lnbmVkIGNoYXIgY2luZF9wb3NbSEZQ X0lORElDQVRPUl9MQVNUXTsKIAl1bnNpZ25lZCBpbnQgY2luZF92YWxbSEZQX0lORElDQVRPUl9M QVNUXTsKKwl1bnNpZ25lZCBpbnQgYXRfdGltZW91dDsKIH07CiAKIGV4dGVybiB2b2lkIGhmcF9u ZXRyZWdfaW5pdCgpOwpkaWZmIC0tZ2l0IGEvcGx1Z2lucy9oZnAuYyBiL3BsdWdpbnMvaGZwLmMK aW5kZXggM2JiZDkyMi4uNDIyNjlmMiAxMDA2NDQKLS0tIGEvcGx1Z2lucy9oZnAuYworKysgYi9w bHVnaW5zL2hmcC5jCkBAIC0zMCw2ICszMCw4IEBACiAjaW5jbHVkZSA8Z2xpYi5oPgogI2luY2x1 ZGUgPGdhdGNoYXQuaD4KICNpbmNsdWRlIDxnYXR0dHkuaD4KKyNpbmNsdWRlIDxnZGJ1cy5oPgor I2luY2x1ZGUgPG9mb25vLmg+CiAKICNkZWZpbmUgT0ZPTk9fQVBJX1NVQkpFQ1RfVE9fQ0hBTkdF CiAjaW5jbHVkZSA8b2Zvbm8vcGx1Z2luLmg+CkBAIC01MiwxMSArNTQsMjYgQEAKIAogI2luY2x1 ZGUgPGRyaXZlcnMvaGZwbW9kZW0vaGZwbW9kZW0uaD4KIAorI2luY2x1ZGUgPG9mb25vL2RidXMu aD4KKworI2RlZmluZSBCTFVFWl9TRVJWSUNFICJvcmcuYmx1ZXoiCisjZGVmaW5lIEJMVUVaX1BB VEggIi8iCisjZGVmaW5lIEJMVUVaX01BTkFHRVJfSU5URVJGQUNFICJvcmcuYmx1ZXouTWFuYWdl ciIKKyNkZWZpbmUgQkxVRVpfQURBUFRFUl9JTlRFUkZBQ0UgIm9yZy5ibHVlei5BZGFwdGVyIgor I2RlZmluZSBCTFVFWl9ERVZJQ0VfSU5URVJGQUNFICJvcmcuYmx1ZXouRGV2aWNlIgorI2RlZmlu ZSBCTFVFWl9HQVRFV0FZX0lOVEVSRkFDRSAib3JnLmJsdWV6LkhhbmRzZnJlZUdhdGV3YXkiCisK KyNkZWZpbmUgSEZQX0FHRU5UX0lOVEVSRkFDRSAib3JnLmJsdWV6LkhhbmRzZnJlZUFnZW50Igor CisjZGVmaW5lIEhGUF9BR19VVUlECSIwMDAwMTExRi0wMDAwLTEwMDAtODAwMC0wMDgwNUY5QjM0 RkIiCisKIHN0YXRpYyBjb25zdCBjaGFyICpicnNmX3ByZWZpeFtdID0geyAiK0JSU0Y6IiwgTlVM TCB9Owogc3RhdGljIGNvbnN0IGNoYXIgKmNpbmRfcHJlZml4W10gPSB7ICIrQ0lORDoiLCBOVUxM IH07CiBzdGF0aWMgY29uc3QgY2hhciAqY21lcl9wcmVmaXhbXSA9IHsgIitDTUVSOiIsIE5VTEwg fTsKIHN0YXRpYyBjb25zdCBjaGFyICpjaGxkX3ByZWZpeFtdID0geyAiK0NITEQ6IiwgTlVMTCB9 OwogCitzdGF0aWMgREJ1c0Nvbm5lY3Rpb24gKmNvbm5lY3Rpb247CisKIHN0YXRpYyBpbnQgaGZw X2Rpc2FibGUoc3RydWN0IG9mb25vX21vZGVtICptb2RlbSk7CiAKIHN0YXRpYyB2b2lkIGhmcF9k ZWJ1Zyhjb25zdCBjaGFyICpzdHIsIHZvaWQgKnVzZXJfZGF0YSkKQEAgLTEzNSw2ICsxNTIsNjAg QEAgc3RhdGljIHZvaWQgY21lcl9jYihnYm9vbGVhbiBvaywgR0F0UmVzdWx0ICpyZXN1bHQsIGdw b2ludGVyIHVzZXJfZGF0YSkKIAkJc2V2aWNlX2xldmVsX2Nvbm5fZXN0YWJsaXNoZWQobW9kZW0p OwogfQogCitzdGF0aWMgaW50IHNlbmRfbWV0aG9kX2NhbGwoY29uc3QgY2hhciAqZGVzdCwgY29u c3QgY2hhciAqcGF0aCwKKwkJCQljb25zdCBjaGFyICppbnRlcmZhY2UsIGNvbnN0IGNoYXIgKm1l dGhvZCwKKwkJCQlEQnVzUGVuZGluZ0NhbGxOb3RpZnlGdW5jdGlvbiBjYiwKKwkJCQl2b2lkICp1 c2VyX2RhdGEsIGludCB0eXBlLCAuLi4pCit7CisJREJ1c01lc3NhZ2UgKm1zZzsKKwlEQnVzUGVu ZGluZ0NhbGwgKmNhbGw7CisJdmFfbGlzdCBhcmdzOworCisJbXNnID0gZGJ1c19tZXNzYWdlX25l d19tZXRob2RfY2FsbChkZXN0LCBwYXRoLCBpbnRlcmZhY2UsIG1ldGhvZCk7CisJaWYgKCFtc2cp IHsKKwkJb2Zvbm9fZXJyb3IoIlVuYWJsZSB0byBhbGxvY2F0ZSBuZXcgRC1CdXMgJXMgbWVzc2Fn ZSIsIG1ldGhvZCk7CisJCXJldHVybiAtRU5PTUVNOworCX0KKworCXZhX3N0YXJ0KGFyZ3MsIHR5 cGUpOworCisJaWYgKCFkYnVzX21lc3NhZ2VfYXBwZW5kX2FyZ3NfdmFsaXN0KG1zZywgdHlwZSwg YXJncykpIHsKKwkJZGJ1c19tZXNzYWdlX3VucmVmKG1zZyk7CisJCXZhX2VuZChhcmdzKTsKKwkJ cmV0dXJuIC1FSU87CisJfQorCisJdmFfZW5kKGFyZ3MpOworCisJaWYgKCFjYikgeworCQlnX2Ri dXNfc2VuZF9tZXNzYWdlKGNvbm5lY3Rpb24sIG1zZyk7CisJCXJldHVybiAwOworCX0KKworCWlm ICghZGJ1c19jb25uZWN0aW9uX3NlbmRfd2l0aF9yZXBseShjb25uZWN0aW9uLCBtc2csICZjYWxs LCAtMSkpIHsKKwkJb2Zvbm9fZXJyb3IoIlNlbmRpbmcgJXMgZmFpbGVkIiwgbWV0aG9kKTsKKwkJ ZGJ1c19tZXNzYWdlX3VucmVmKG1zZyk7CisJCXJldHVybiAtRUlPOworCX0KKworCWRidXNfcGVu ZGluZ19jYWxsX3NldF9ub3RpZnkoY2FsbCwgY2IsIHVzZXJfZGF0YSwgTlVMTCk7CisJZGJ1c19w ZW5kaW5nX2NhbGxfdW5yZWYoY2FsbCk7CisJZGJ1c19tZXNzYWdlX3VucmVmKG1zZyk7CisKKwly ZXR1cm4gMDsKK30KKworc3RhdGljIGdib29sZWFuIGhmcF9lbmFibGVfdGltZW91dChncG9pbnRl ciB1c2VyKQoreworCXN0cnVjdCBvZm9ub19tb2RlbSAqbW9kZW0gPSB1c2VyOworCisJaWYgKG9m b25vX21vZGVtX2dldF9wb3dlcmVkKG1vZGVtKSkKKwkJcmV0dXJuIEZBTFNFOworCisJaGZwX2Rp c2FibGUobW9kZW0pOworCXJldHVybiBGQUxTRTsKK30KKwogc3RhdGljIHZvaWQgY2luZF9zdGF0 dXNfY2IoZ2Jvb2xlYW4gb2ssIEdBdFJlc3VsdCAqcmVzdWx0LAogCQkJCWdwb2ludGVyIHVzZXJf ZGF0YSkKIHsKQEAgLTI2MCw4ICszMzEsNyBAQCBlcnJvcjoKIH0KIAogLyogZWl0aGVyIG9Gb25v IG9yIFBob25lIGNvdWxkIHJlcXVlc3QgU0xDIGNvbm5lY3Rpb24gKi8KLXN0YXRpYyBpbnQgc2Vy dmljZV9sZXZlbF9jb25uZWN0aW9uKHN0cnVjdCBvZm9ub19tb2RlbSAqbW9kZW0sCi0JCQkJY29u c3QgY2hhciAqdHR5KQorc3RhdGljIGludCBzZXJ2aWNlX2xldmVsX2Nvbm5lY3Rpb24oc3RydWN0 IG9mb25vX21vZGVtICptb2RlbSwgaW50IGZkKQogewogCXN0cnVjdCBoZnBfZGF0YSAqZGF0YSA9 IG9mb25vX21vZGVtX2dldF9kYXRhKG1vZGVtKTsKIAlHSU9DaGFubmVsICppbzsKQEAgLTI2OSw3 ICszMzksNyBAQCBzdGF0aWMgaW50IHNlcnZpY2VfbGV2ZWxfY29ubmVjdGlvbihzdHJ1Y3Qgb2Zv bm9fbW9kZW0gKm1vZGVtLAogCUdBdENoYXQgKmNoYXQ7CiAJY2hhciBidWZbNjRdOwogCi0JaW8g PSBnX2F0X3R0eV9vcGVuKHR0eSwgTlVMTCk7CisJaW8gPSBnX2lvX2NoYW5uZWxfdW5peF9uZXco ZmQpOwogCWlmICghaW8pIHsKIAkJb2Zvbm9fZXJyb3IoIlNlcnZpY2UgbGV2ZWwgY29ubmVjdGlv biBmYWlsZWQ6ICVzICglZCkiLAogCQkJc3RyZXJyb3IoZXJybm8pLCBlcnJubyk7CkBAIC0yODgs NyArMzU4LDYgQEAgc3RhdGljIGludCBzZXJ2aWNlX2xldmVsX2Nvbm5lY3Rpb24oc3RydWN0IG9m b25vX21vZGVtICptb2RlbSwKIAkJZ19hdF9jaGF0X3NldF9kZWJ1ZyhjaGF0LCBoZnBfZGVidWcs IE5VTEwpOwogCiAJc3ByaW50ZihidWYsICJBVCtCUlNGPSVkIiwgZGF0YS0+aGZfZmVhdHVyZXMp OwotCiAJZ19hdF9jaGF0X3NlbmQoY2hhdCwgYnVmLCBicnNmX3ByZWZpeCwKIAkJCQlicnNmX2Ni LCBtb2RlbSwgTlVMTCk7CiAJZGF0YS0+Y2hhdCA9IGNoYXQ7CkBAIC0yOTYsMTAgKzM2NSw0NiBA QCBzdGF0aWMgaW50IHNlcnZpY2VfbGV2ZWxfY29ubmVjdGlvbihzdHJ1Y3Qgb2Zvbm9fbW9kZW0g Km1vZGVtLAogCXJldHVybiAtRUlOUFJPR1JFU1M7CiB9CiAKLXN0YXRpYyBpbnQgaGZwX3Byb2Jl KHN0cnVjdCBvZm9ub19tb2RlbSAqbW9kZW0pCitzdGF0aWMgREJ1c01lc3NhZ2UgKmhmcF9hZ2Vu dF9uZXdfY29ubmVjdGlvbihEQnVzQ29ubmVjdGlvbiAqY29ubiwgREJ1c01lc3NhZ2UgKm1zZywg dm9pZCAqZGF0YSkKIHsKKwlpbnQgZmQ7CisJc3RydWN0IG9mb25vX21vZGVtICptb2RlbSA9IGRh dGE7CisKKwlpZiAoIWRidXNfbWVzc2FnZV9nZXRfYXJncyhtc2csIE5VTEwsIERCVVNfVFlQRV9V TklYX0ZELCAmZmQsCisJCQkJREJVU19UWVBFX0lOVkFMSUQpKQorCQlyZXR1cm4gX19vZm9ub19l cnJvcl9pbnZhbGlkX2FyZ3MobXNnKTsKKworCXNlcnZpY2VfbGV2ZWxfY29ubmVjdGlvbihtb2Rl bSwgZmQpOworCisJcmV0dXJuIGRidXNfbWVzc2FnZV9uZXdfbWV0aG9kX3JldHVybihtc2cpOwor fQorCitzdGF0aWMgREJ1c01lc3NhZ2UgKmhmcF9hZ2VudF9yZWxlYXNlKERCdXNDb25uZWN0aW9u ICpjb25uLCBEQnVzTWVzc2FnZSAqbXNnLCB2b2lkICpkYXRhKQoreworCXN0cnVjdCBvZm9ub19t b2RlbSAqbW9kZW0gPSBkYXRhOworCXN0cnVjdCBoZnBfZGF0YSAqaGZwX2RhdGEgPSBvZm9ub19t b2RlbV9nZXRfZGF0YShtb2RlbSk7CisKKwlnX2F0X2NoYXRfc2h1dGRvd24oaGZwX2RhdGEtPmNo YXQpOworCisJcmV0dXJuIE5VTEw7Cit9CisKK3N0YXRpYyBHREJ1c01ldGhvZFRhYmxlIGFnZW50 X21ldGhvZHNbXSA9IHsKKyAgICAgICAgeyAiTmV3Q29ubmVjdGlvbiIsICJoIiwgIiIsIGhmcF9h Z2VudF9uZXdfY29ubmVjdGlvbiwKKwkJR19EQlVTX01FVEhPRF9GTEFHX0FTWU5DIH0sCisJeyAi UmVsZWFzZSIsICIiLCAiIiwgaGZwX2FnZW50X3JlbGVhc2UgfSwKKwl7TlVMTCwgTlVMTCwgTlVM TCwgTlVMTH0KK307CisKK3N0YXRpYyBpbnQgaGZwX2NyZWF0ZV9tb2RlbShjb25zdCBjaGFyICpk ZXZpY2UpCit7CisJc3RydWN0IG9mb25vX21vZGVtICptb2RlbTsKIAlzdHJ1Y3QgaGZwX2RhdGEg KmRhdGE7CiAKKwlvZm9ub19pbmZvKCJVc2luZyBkZXZpY2U6ICVzIiwgZGV2aWNlKTsKKworCW1v ZGVtID0gb2Zvbm9fbW9kZW1fY3JlYXRlKE5VTEwsICJoZnAiKTsKKwogCWRhdGEgPSBnX3RyeV9u ZXcwKHN0cnVjdCBoZnBfZGF0YSwgMSk7CiAJaWYgKCFkYXRhKQogCQlyZXR1cm4gLUVOT01FTTsK QEAgLTMxMCwzNiArNDE1LDMxNSBAQCBzdGF0aWMgaW50IGhmcF9wcm9iZShzdHJ1Y3Qgb2Zvbm9f bW9kZW0gKm1vZGVtKQogCWRhdGEtPmhmX2ZlYXR1cmVzIHw9IEhGX0ZFQVRVUkVfRU5IQU5DRURf Q0FMTF9TVEFUVVM7CiAJZGF0YS0+aGZfZmVhdHVyZXMgfD0gSEZfRkVBVFVSRV9FTkhBTkNFRF9D QUxMX0NPTlRST0w7CiAKKwlkYXRhLT5oYW5kc2ZyZWVfcGF0aCA9IGdfc3RyZHVwKGRldmljZSk7 CisKIAlvZm9ub19tb2RlbV9zZXRfZGF0YShtb2RlbSwgZGF0YSk7CiAKKwlvZm9ub19tb2RlbV9y ZWdpc3Rlcihtb2RlbSk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQgcGFyc2VfdXVp ZHMoREJ1c01lc3NhZ2VJdGVyICppLCBjb25zdCBjaGFyICpkZXZpY2UpCit7CisJREJ1c01lc3Nh Z2VJdGVyIHZhcmlhbnQsIGFpOworCWNvbnN0IGNoYXIgKnZhbHVlOworCisJZGJ1c19tZXNzYWdl X2l0ZXJfcmVjdXJzZShpLCAmdmFyaWFudCk7CisJZGJ1c19tZXNzYWdlX2l0ZXJfcmVjdXJzZSgm dmFyaWFudCwgJmFpKTsKKworCXdoaWxlIChkYnVzX21lc3NhZ2VfaXRlcl9nZXRfYXJnX3R5cGUo JmFpKSAhPSBEQlVTX1RZUEVfSU5WQUxJRCkgeworCQlkYnVzX21lc3NhZ2VfaXRlcl9nZXRfYmFz aWMoJmFpLCAmdmFsdWUpOworCQlpZiAoIXN0cmNhc2VjbXAodmFsdWUsIEhGUF9BR19VVUlEKSkK KwkJCWhmcF9jcmVhdGVfbW9kZW0oZGV2aWNlKTsKKworCQlpZiAoIWRidXNfbWVzc2FnZV9pdGVy X25leHQoJmFpKSkKKwkJCXJldHVybjsKKwl9Cit9CisKK3N0YXRpYyB2b2lkIHBhcnNlX2dldF9w cm9wZXJ0aWVzKERCdXNNZXNzYWdlICpyZXBseSwgY29uc3QgY2hhciAqZGV2aWNlKQoreworCURC dXNNZXNzYWdlSXRlciBhcmcsIGVsZW1lbnQsIHZhcmlhbnQ7CisJY29uc3QgY2hhciAqa2V5Owor CisJaWYgKCFkYnVzX21lc3NhZ2VfaXRlcl9pbml0KHJlcGx5LCAmYXJnKSkgeworCQlvZm9ub19k ZWJ1ZygiR2V0UHJvcGVydGllcyByZXBseSBoYXMgbm8gYXJndW1lbnRzLiIpOworCQlyZXR1cm47 CisJfQorCisJaWYgKGRidXNfbWVzc2FnZV9pdGVyX2dldF9hcmdfdHlwZSgmYXJnKSAhPSBEQlVT X1RZUEVfQVJSQVkpIHsKKwkJb2Zvbm9fZGVidWcoIkdldFByb3BlcnRpZXMgYXJndW1lbnQgaXMg bm90IGFuIGFycmF5LiIpOworCQlyZXR1cm47CisJfQorCisJZGJ1c19tZXNzYWdlX2l0ZXJfcmVj dXJzZSgmYXJnLCAmZWxlbWVudCk7CisJd2hpbGUgKGRidXNfbWVzc2FnZV9pdGVyX2dldF9hcmdf dHlwZSgmZWxlbWVudCkgIT0gREJVU19UWVBFX0lOVkFMSUQpIHsKKwkJaWYgKGRidXNfbWVzc2Fn ZV9pdGVyX2dldF9hcmdfdHlwZSgmZWxlbWVudCkgPT0KKwkJCQlEQlVTX1RZUEVfRElDVF9FTlRS WSkgeworCQkJREJ1c01lc3NhZ2VJdGVyIGRpY3Q7CisKKwkJCWRidXNfbWVzc2FnZV9pdGVyX3Jl Y3Vyc2UoJmVsZW1lbnQsICZkaWN0KTsKKworCQkJaWYgKGRidXNfbWVzc2FnZV9pdGVyX2dldF9h cmdfdHlwZSgmZGljdCkgIT0KKwkJCQkJREJVU19UWVBFX1NUUklORykgeworCQkJCW9mb25vX2Rl YnVnKCJQcm9wZXJ0eSBuYW1lIG5vdCBhIHN0cmluZy4iKTsKKwkJCQlyZXR1cm47CisJCQl9CisK KwkJCWRidXNfbWVzc2FnZV9pdGVyX2dldF9iYXNpYygmZGljdCwgJmtleSk7CisKKwkJCWlmICgh ZGJ1c19tZXNzYWdlX2l0ZXJfbmV4dCgmZGljdCkpICB7CisJCQkJb2Zvbm9fZGVidWcoIlByb3Bl cnR5IHZhbHVlIG1pc3NpbmciKTsKKwkJCQlyZXR1cm47CisJCQl9CisKKwkJCWlmIChkYnVzX21l c3NhZ2VfaXRlcl9nZXRfYXJnX3R5cGUoJmRpY3QpICE9CisJCQkJCURCVVNfVFlQRV9WQVJJQU5U KSB7CisJCQkJb2Zvbm9fZGVidWcoIlByb3BlcnR5IHZhbHVlIG5vdCBhIHZhcmlhbnQuIik7CisJ CQkJcmV0dXJuOworCQkJfQorCisJCQlpZiAoIXN0cmNtcChrZXksICJVVUlEcyIpKQorCQkJCXBh cnNlX3V1aWRzKCZkaWN0LCBkZXZpY2UpOworCisJCQlkYnVzX21lc3NhZ2VfaXRlcl9yZWN1cnNl KCZkaWN0LCAmdmFyaWFudCk7CisJCX0KKworCQlpZiAoIWRidXNfbWVzc2FnZV9pdGVyX25leHQo JmVsZW1lbnQpKQorCQkJcmV0dXJuOworCX0KK30KKworc3RhdGljIHZvaWQgZ2V0X3Byb3BlcnRp ZXNfY2IoREJ1c1BlbmRpbmdDYWxsICpjYWxsLCBncG9pbnRlciB1c2VyX2RhdGEpCit7CisJREJ1 c0Vycm9yIGVycjsKKwlEQnVzTWVzc2FnZSAqcmVwbHk7CisJY29uc3QgY2hhciAqZGV2aWNlID0g dXNlcl9kYXRhOworCisJcmVwbHkgPSBkYnVzX3BlbmRpbmdfY2FsbF9zdGVhbF9yZXBseShjYWxs KTsKKworCWlmIChkYnVzX21lc3NhZ2VfaXNfZXJyb3IocmVwbHksIERCVVNfRVJST1JfU0VSVklD RV9VTktOT1dOKSkgeworCQlvZm9ub19kZWJ1ZygiQmx1ZXRvb3RoIGRhZW1vbiBpcyBhcHBhcmVu dGx5IG5vdCBhdmFpbGFibGUuIik7CisJCWdvdG8gZG9uZTsKKwl9CisKKwlpZiAoZGJ1c19tZXNz YWdlX2dldF90eXBlKHJlcGx5KSA9PSBEQlVTX01FU1NBR0VfVFlQRV9FUlJPUikgeworCQlpZiAo IWRidXNfbWVzc2FnZV9pc19lcnJvcihyZXBseSwgREJVU19FUlJPUl9VTktOT1dOX01FVEhPRCkp CisJCQlvZm9ub19pbmZvKCJFcnJvciBmcm9tIEdldFByb3BlcnRpZXMgcmVwbHk6ICVzIiwKKwkJ CQkJZGJ1c19tZXNzYWdlX2dldF9lcnJvcl9uYW1lKHJlcGx5KSk7CisKKwkJZ290byBkb25lOwor CX0KKworCXBhcnNlX2dldF9wcm9wZXJ0aWVzKHJlcGx5LCBkZXZpY2UpOworCitkb25lOgorCWRi dXNfbWVzc2FnZV91bnJlZihyZXBseSk7Cit9CisKK3N0YXRpYyB2b2lkIGxpc3RfZGV2aWNlc19j YihEQnVzUGVuZGluZ0NhbGwgKmNhbGwsIGdwb2ludGVyIHVzZXJfZGF0YSkKK3sKKwlEQnVzRXJy b3IgZXJyOworCURCdXNNZXNzYWdlICpyZXBseTsKKwlzdHJ1Y3Qgb2Zvbm9fbW9kZW0gKm1vZGVt ID0gdXNlcl9kYXRhOworCWNvbnN0IGNoYXIgKipkZXZpY2UgPSBOVUxMOworCWludCBudW0sIHJl dCwgaTsKKworCXJlcGx5ID0gZGJ1c19wZW5kaW5nX2NhbGxfc3RlYWxfcmVwbHkoY2FsbCk7CisK KwlpZiAoZGJ1c19tZXNzYWdlX2lzX2Vycm9yKHJlcGx5LCBEQlVTX0VSUk9SX1NFUlZJQ0VfVU5L Tk9XTikpIHsKKwkJb2Zvbm9fZGVidWcoIkJsdWV0b290aCBkYWVtb24gaXMgYXBwYXJlbnRseSBu b3QgYXZhaWxhYmxlLiIpOworCQlnb3RvIGRvbmU7CisJfQorCisJZGJ1c19lcnJvcl9pbml0KCZl cnIpOworCWlmIChkYnVzX21lc3NhZ2VfZ2V0X2FyZ3MocmVwbHksICZlcnIsIERCVVNfVFlQRV9B UlJBWSwKKwkJCQlEQlVTX1RZUEVfT0JKRUNUX1BBVEgsICZkZXZpY2UsCisJCQkJJm51bSwgREJV U19UWVBFX0lOVkFMSUQpID09IEZBTFNFKSB7CisJCWlmIChkZXZpY2UgPT0gTlVMTCkgeworCQkJ ZGJ1c19lcnJvcl9mcmVlKCZlcnIpOworCQkJZ290byBkb25lOworCQl9CisKKwkJaWYgKGRidXNf ZXJyb3JfaXNfc2V0KCZlcnIpID09IFRSVUUpIHsKKwkJCW9mb25vX2Vycm9yKCIlcyIsIGVyci5t ZXNzYWdlKTsKKwkJCWRidXNfZXJyb3JfZnJlZSgmZXJyKTsKKwkJfQorCQlnb3RvIGRvbmU7CisJ fQorCisJZm9yIChpID0gMCA7IGkgPCBudW0gOyBpKyspIHsKKwkJcmV0ID0gc2VuZF9tZXRob2Rf Y2FsbChCTFVFWl9TRVJWSUNFLCBkZXZpY2VbaV0sCisJCQkJQkxVRVpfREVWSUNFX0lOVEVSRkFD RSwgIkdldFByb3BlcnRpZXMiLAorCQkJCWdldF9wcm9wZXJ0aWVzX2NiLCAodm9pZCAqKWRldmlj ZVtpXSwKKwkJCQlEQlVTX1RZUEVfSU5WQUxJRCk7CisJCWlmIChyZXQgPCAwKQorCQkJb2Zvbm9f ZXJyb3IoIkdldFByb3BlcnRpZXMgZmFpbGVkKCVkKSIsIHJldCk7CisJfQorCitkb25lOgorCWRi dXNfbWVzc2FnZV91bnJlZihyZXBseSk7Cit9CisKK3N0YXRpYyB2b2lkIGxpc3RfYWRhcHRlcnNf Y2IoREJ1c1BlbmRpbmdDYWxsICpjYWxsLCBncG9pbnRlciB1c2VyX2RhdGEpCit7CisJREJ1c0Vy cm9yIGVycjsKKwlEQnVzTWVzc2FnZSAqcmVwbHk7CisJY29uc3QgY2hhciAqKmFkYXB0ZXIgPSBO VUxMOworCWludCBudW0sIHJldCwgaTsKKworCXJlcGx5ID0gZGJ1c19wZW5kaW5nX2NhbGxfc3Rl YWxfcmVwbHkoY2FsbCk7CisKKwlpZiAoZGJ1c19tZXNzYWdlX2lzX2Vycm9yKHJlcGx5LCBEQlVT X0VSUk9SX1NFUlZJQ0VfVU5LTk9XTikpIHsKKwkJb2Zvbm9fZGVidWcoIkJsdWV0b290aCBkYWVt b24gaXMgYXBwYXJlbnRseSBub3QgYXZhaWxhYmxlLiIpOworCQlnb3RvIGRvbmU7CisJfQorCisJ ZGJ1c19lcnJvcl9pbml0KCZlcnIpOworCWlmIChkYnVzX21lc3NhZ2VfZ2V0X2FyZ3MocmVwbHks ICZlcnIsIERCVVNfVFlQRV9BUlJBWSwKKwkJCQlEQlVTX1RZUEVfT0JKRUNUX1BBVEgsICZhZGFw dGVyLAorCQkJCSZudW0sIERCVVNfVFlQRV9JTlZBTElEKSA9PSBGQUxTRSkgeworCQlpZiAoYWRh cHRlciA9PSBOVUxMKSB7CisJCQlkYnVzX2Vycm9yX2ZyZWUoJmVycik7CisJCQlnb3RvIGRvbmU7 CisJCX0KKworCQlpZiAoZGJ1c19lcnJvcl9pc19zZXQoJmVycikgPT0gVFJVRSkgeworCQkJb2Zv bm9fZXJyb3IoIiVzIiwgZXJyLm1lc3NhZ2UpOworCQkJZGJ1c19lcnJvcl9mcmVlKCZlcnIpOwor CQl9CisJCWdvdG8gZG9uZTsKKwl9CisKKwlmb3IgKGkgPSAwIDsgaSA8IG51bSA7IGkrKykgewor CQlyZXQgPSBzZW5kX21ldGhvZF9jYWxsKEJMVUVaX1NFUlZJQ0UsIGFkYXB0ZXJbaV0sCisJCQkJ QkxVRVpfQURBUFRFUl9JTlRFUkZBQ0UsICJMaXN0RGV2aWNlcyIsCisJCQkJbGlzdF9kZXZpY2Vz X2NiLCBOVUxMLAorCQkJCURCVVNfVFlQRV9JTlZBTElEKTsKKworCQlpZiAocmV0IDwgMCkKKwkJ CW9mb25vX2Vycm9yKCJMaXN0RGV2aWNlcyBmYWlsZWQoJWQpIiwgcmV0KTsKKwl9CisKK2RvbmU6 CisJZGJ1c19tZXNzYWdlX3VucmVmKHJlcGx5KTsKKworfQorCitzdGF0aWMgaW50IGhmcF9sb2Fk X21vZGVtcygpCit7CisJcmV0dXJuIHNlbmRfbWV0aG9kX2NhbGwoQkxVRVpfU0VSVklDRSwgQkxV RVpfUEFUSCwKKwkJCQlCTFVFWl9NQU5BR0VSX0lOVEVSRkFDRSwgIkxpc3RBZGFwdGVycyIsCisJ CQkJbGlzdF9hZGFwdGVyc19jYiwgTlVMTCwKKwkJCQlEQlVTX1RZUEVfSU5WQUxJRCk7Cit9CisK K3N0YXRpYyBpbnQgaGZwX3JlZ2lzdGVyX29mb25vX2hhbmRzZnJlZShzdHJ1Y3Qgb2Zvbm9fbW9k ZW0gKm1vZGVtKQoreworCWNvbnN0IGNoYXIgKm9ial9wYXRoID0gb2Zvbm9fbW9kZW1fZ2V0X3Bh dGgobW9kZW0pOworCXN0cnVjdCBoZnBfZGF0YSAqZGF0YSA9IG9mb25vX21vZGVtX2dldF9kYXRh KG1vZGVtKTsKKworCW9mb25vX2RlYnVnKCJSZWdpc3RlcmluZyBvRm9ubyBBZ2VudCB0byBibHVl dG9vdGggZGFlbW9uIik7CisKKwlpZiAoIWRhdGEtPmhhbmRzZnJlZV9wYXRoKQorCQlyZXR1cm4g LUVJTlZBTDsKKworCXJldHVybiBzZW5kX21ldGhvZF9jYWxsKEJMVUVaX1NFUlZJQ0UsIGRhdGEt PmhhbmRzZnJlZV9wYXRoLAorCQkJCUJMVUVaX0dBVEVXQVlfSU5URVJGQUNFLCAiUmVnaXN0ZXJB Z2VudCIsCisJCQkJTlVMTCwgTlVMTCwgREJVU19UWVBFX09CSkVDVF9QQVRILAorCQkJCSZvYmpf cGF0aCwgREJVU19UWVBFX0lOVkFMSUQpOworfQorCitzdGF0aWMgaW50IGhmcF91bnJlZ2lzdGVy X29mb25vX2hhbmRzZnJlZShzdHJ1Y3Qgb2Zvbm9fbW9kZW0gKm1vZGVtKQoreworCWNvbnN0IGNo YXIgKm9ial9wYXRoID0gb2Zvbm9fbW9kZW1fZ2V0X3BhdGgobW9kZW0pOworCXN0cnVjdCBoZnBf ZGF0YSAqZGF0YSA9IG9mb25vX21vZGVtX2dldF9kYXRhKG1vZGVtKTsKKworCW9mb25vX2RlYnVn KCJVbnJlZ2lzdGVyaW5nIG9Gb25vIEFnZW50IGZyb20gYmx1ZXRvb3RoIGRhZW1vbiIpOworCisJ aWYgKCFkYXRhLT5oYW5kc2ZyZWVfcGF0aCkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlyZXR1cm4g c2VuZF9tZXRob2RfY2FsbChCTFVFWl9TRVJWSUNFLCBkYXRhLT5oYW5kc2ZyZWVfcGF0aCwKKwkJ CQlCTFVFWl9HQVRFV0FZX0lOVEVSRkFDRSwgIlVucmVnaXN0ZXJBZ2VudCIsCisJCQkJTlVMTCwg TlVMTCwgREJVU19UWVBFX09CSkVDVF9QQVRILAorCQkJCSZvYmpfcGF0aCwgREJVU19UWVBFX0lO VkFMSUQpOworfQorCitzdGF0aWMgaW50IGhmcF9wcm9iZShzdHJ1Y3Qgb2Zvbm9fbW9kZW0gKm1v ZGVtKQoreworCXN0cnVjdCBoZnBfZGF0YSAqZGF0YTsKKwljb25zdCBjaGFyICpvYmpfcGF0aDsK KworCW9ial9wYXRoID0gb2Zvbm9fbW9kZW1fZ2V0X3BhdGgobW9kZW0pOworCisJZ19kYnVzX3Jl Z2lzdGVyX2ludGVyZmFjZShjb25uZWN0aW9uLCBvYmpfcGF0aCwgSEZQX0FHRU5UX0lOVEVSRkFD RSwKKwkJCWFnZW50X21ldGhvZHMsIE5VTEwsIE5VTEwsIG1vZGVtLCBOVUxMKTsKKworCWlmICho ZnBfcmVnaXN0ZXJfb2Zvbm9faGFuZHNmcmVlKG1vZGVtKSAhPSAwKQorCQlyZXR1cm4gLUVJTlZB TDsKKwogCXJldHVybiAwOwogfQogCiBzdGF0aWMgdm9pZCBoZnBfcmVtb3ZlKHN0cnVjdCBvZm9u b19tb2RlbSAqbW9kZW0pCiB7Ci0JZ3BvaW50ZXIgZGF0YSA9IG9mb25vX21vZGVtX2dldF9kYXRh KG1vZGVtKTsKKwlzdHJ1Y3QgaGZwX2RhdGEgKmRhdGEgPSBvZm9ub19tb2RlbV9nZXRfZGF0YSht b2RlbSk7CisKKwloZnBfdW5yZWdpc3Rlcl9vZm9ub19oYW5kc2ZyZWUobW9kZW0pOworCisJaWYg KGRhdGEtPmhhbmRzZnJlZV9wYXRoKQorCQlnX2ZyZWUoZGF0YS0+aGFuZHNmcmVlX3BhdGgpOwog CiAJaWYgKGRhdGEpCiAJCWdfZnJlZShkYXRhKTsKIAorCWRidXNfY29ubmVjdGlvbl91bnJlZihj b25uZWN0aW9uKTsKKwogCW9mb25vX21vZGVtX3NldF9kYXRhKG1vZGVtLCBOVUxMKTsKIH0KIAor c3RhdGljIGludCBoZnBfY29ubmVjdF9vZm9ub19oYW5kc2ZyZWUoc3RydWN0IG9mb25vX21vZGVt ICptb2RlbSkKK3sKKwlzdHJ1Y3QgaGZwX2RhdGEgKmRhdGEgPSBvZm9ub19tb2RlbV9nZXRfZGF0 YShtb2RlbSk7CisKKwlvZm9ub19kZWJ1ZygiQ29ubmVjdCB0byBibHVldG9vdGggZGFlbW9uIik7 CisKKwlpZiAoIWRhdGEtPmhhbmRzZnJlZV9wYXRoIHx8ICFjb25uZWN0aW9uKQorCQlyZXR1cm4g LUVJTlZBTDsKKworCXJldHVybiBzZW5kX21ldGhvZF9jYWxsKEJMVUVaX1NFUlZJQ0UsIGRhdGEt PmhhbmRzZnJlZV9wYXRoLAorCQkJCUJMVUVaX0dBVEVXQVlfSU5URVJGQUNFLCAiQ29ubmVjdCIs CisJCQkJTlVMTCwgTlVMTCwgREJVU19UWVBFX0lOVkFMSUQpOworfQorCiAvKiBwb3dlciB1cCBo YXJkd2FyZSAqLwogc3RhdGljIGludCBoZnBfZW5hYmxlKHN0cnVjdCBvZm9ub19tb2RlbSAqbW9k ZW0pCiB7Ci0JY29uc3QgY2hhciAqdHR5OwotCWludCByZXQ7CisJc3RydWN0IGhmcF9kYXRhICpk YXRhID0gb2Zvbm9fbW9kZW1fZ2V0X2RhdGEobW9kZW0pOwogCiAJREJHKCIlcCIsIG1vZGVtKTsK IAotCXR0eSA9IG9mb25vX21vZGVtX2dldF9zdHJpbmcobW9kZW0sICJEZXZpY2UiKTsKLQlpZiAo dHR5ID09IE5VTEwpCisJZGF0YS0+YXRfdGltZW91dCA9CisJCWdfdGltZW91dF9hZGRfc2Vjb25k cygxMCwgaGZwX2VuYWJsZV90aW1lb3V0LCBtb2RlbSk7CisKKwlpZiAoaGZwX2Nvbm5lY3Rfb2Zv bm9faGFuZHNmcmVlKG1vZGVtKSA8IDApCiAJCXJldHVybiAtRUlOVkFMOwogCi0JcmV0ID0gc2Vy dmljZV9sZXZlbF9jb25uZWN0aW9uKG1vZGVtLCB0dHkpOworCXJldHVybiAtRUlOUFJPR1JFU1M7 Cit9CisKK3N0YXRpYyBpbnQgaGZwX2Rpc2Nvbm5lY3Rfb2Zvbm9faGFuZHNmcmVlKHN0cnVjdCBv Zm9ub19tb2RlbSAqbW9kZW0pCit7CisJc3RydWN0IGhmcF9kYXRhICpkYXRhID0gb2Zvbm9fbW9k ZW1fZ2V0X2RhdGEobW9kZW0pOworCisJaWYgKCFkYXRhLT5oYW5kc2ZyZWVfcGF0aCB8fCAhY29u bmVjdGlvbikKKwkJcmV0dXJuIC1FSU5WQUw7CiAKLQlyZXR1cm4gcmV0OworCXJldHVybiBzZW5k X21ldGhvZF9jYWxsKEJMVUVaX1NFUlZJQ0UsIGRhdGEtPmhhbmRzZnJlZV9wYXRoLAorCQkJCUJM VUVaX0dBVEVXQVlfSU5URVJGQUNFLCAiRGlzY29ubmVjdCIsCisJCQkJTlVMTCwgTlVMTCwgREJV U19UWVBFX0lOVkFMSUQpOwogfQogCiBzdGF0aWMgaW50IGhmcF9kaXNhYmxlKHN0cnVjdCBvZm9u b19tb2RlbSAqbW9kZW0pCkBAIC0zNTksNiArNzQzLDcgQEAgc3RhdGljIGludCBoZnBfZGlzYWJs ZShzdHJ1Y3Qgb2Zvbm9fbW9kZW0gKm1vZGVtKQogCiAJb2Zvbm9fbW9kZW1fc2V0X3Bvd2VyZWQo bW9kZW0sIEZBTFNFKTsKIAorCWhmcF9kaXNjb25uZWN0X29mb25vX2hhbmRzZnJlZShtb2RlbSk7 CiAJcmV0dXJuIDA7CiB9CiAKQEAgLTM5MCw4ICs3NzUsMTQgQEAgc3RhdGljIHN0cnVjdCBvZm9u b19tb2RlbV9kcml2ZXIgaGZwX2RyaXZlciA9IHsKIAogc3RhdGljIGludCBoZnBfaW5pdCh2b2lk KQogewotCURCRygiIik7Ci0JcmV0dXJuIG9mb25vX21vZGVtX2RyaXZlcl9yZWdpc3RlcigmaGZw X2RyaXZlcik7CisJREJ1c0Nvbm5lY3Rpb24gKmNvbm4gPSBvZm9ub19kYnVzX2dldF9jb25uZWN0 aW9uKCk7CisKKwlvZm9ub19tb2RlbV9kcml2ZXJfcmVnaXN0ZXIoJmhmcF9kcml2ZXIpOworCisJ Y29ubmVjdGlvbiA9IGRidXNfY29ubmVjdGlvbl9yZWYoY29ubik7CisJaGZwX2xvYWRfbW9kZW1z KCk7CisKKwlyZXR1cm4gMDsKIH0KIAogc3RhdGljIHZvaWQgaGZwX2V4aXQodm9pZCkKZGlmZiAt LWdpdCBhL3BsdWdpbnMvbW9kZW1jb25mLmMgYi9wbHVnaW5zL21vZGVtY29uZi5jCmluZGV4IGM4 YzI2MWYuLjkzMmQ2MTAgMTAwNjQ0Ci0tLSBhL3BsdWdpbnMvbW9kZW1jb25mLmMKKysrIGIvcGx1 Z2lucy9tb2RlbWNvbmYuYwpAQCAtMTI5LDcgKzEyOSw2IEBAIHN0YXRpYyBzdHJ1Y3Qgb2Zvbm9f bW9kZW0gKmNyZWF0ZV9tb2RlbShHS2V5RmlsZSAqa2V5ZmlsZSwgY29uc3QgY2hhciAqZ3JvdXAp CiAKIAlpZiAoIWdfc3RyY21wMChkcml2ZXIsICJhdGdlbiIpIHx8ICFnX3N0cmNtcDAoZHJpdmVy LCAiZzEiKSB8fAogCQkJCQkJIWdfc3RyY21wMChkcml2ZXIsICJjYWx5cHNvIikgfHwKLQkJCQkJ CSFnX3N0cmNtcDAoZHJpdmVyLCAiaGZwIikgfHwKIAkJCQkJCSFnX3N0cmNtcDAoZHJpdmVyLCAi cGFsbXByZSIpKQogCQlzZXRfZGV2aWNlKG1vZGVtLCBrZXlmaWxlLCBncm91cCk7CiAKLS0gCjEu Ni40LjQKCg== --000e0cd61a52050a8b047d9e0284--