From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Date: Wed, 04 Jul 2001 19:20:07 -0500 From: Steven Lembark Message-ID: <9880000.994292407@dizzy> MIME-Version: 1.0 Content-Type: multipart/mixed; boundary="==========1814179384==========" Subject: [linux-lvm] Unable to compile 2.4.6 Sender: linux-lvm-admin@sistina.com Errors-To: linux-lvm-admin@sistina.com Reply-To: linux-lvm@sistina.com List-Help: List-Post: List-Subscribe: , List-Unsubscribe: , List-Archive: List-Id: To: linux-lvm@sistina.com --==========1814179384========== Content-Type: text/plain; charset=us-ascii Content-Transfer-Encoding: 7bit Content-Disposition: inline Run configure, apply patch. 2.4.6 links before patch, doesn't link after applying patch. --==========1814179384========== Content-Type: application/octet-stream; name=errmsg Content-Transfer-Encoding: base64 Content-Disposition: attachment; filename=errmsg; size=127039 bWFrZSAtdyBiekltYWdlOwoKbWFrZVsxXTogTGVhdmluZyBkaXJlY3RvcnkgYC91c3Ivc3JjL2xp bnV4L2FyY2gvaTM4Ni9saWInCmxkIC1tIGVsZl9pMzg2IC1UIC91c3Ivc3JjL2xpbnV4L2FyY2gv aTM4Ni92bWxpbnV4LmxkcyAtZSBzdGV4dCBhcmNoL2kzODYva2VybmVsL2hlYWQubyBhcmNoL2kz ODYva2VybmVsL2luaXRfdGFzay5vIGluaXQvbWFpbi5vIGluaXQvdmVyc2lvbi5vIFwKLS1zdGFy dC1ncm91cCBcCmFyY2gvaTM4Ni9rZXJuZWwva2VybmVsLm8gYXJjaC9pMzg2L21tL21tLm8ga2Vy bmVsL2tlcm5lbC5vIG1tL21tLm8gZnMvZnMubyBpcGMvaXBjLm8gXApkcml2ZXJzL3BhcnBvcnQv ZHJpdmVyLm8gZHJpdmVycy9jaGFyL2NoYXIubyBkcml2ZXJzL2Jsb2NrL2Jsb2NrLm8gZHJpdmVy cy9taXNjL21pc2MubyBkcml2ZXJzL25ldC9uZXQubyBkcml2ZXJzL21lZGlhL21lZGlhLm8gZHJp dmVycy9jaGFyL2FncC9hZ3AubyBkcml2ZXJzL2NoYXIvZHJtL2RybS5vIGRyaXZlcnMvc2NzaS9z Y3NpZHJ2Lm8gZHJpdmVycy9jZHJvbS9kcml2ZXIubyBkcml2ZXJzL3BjaS9kcml2ZXIubyBkcml2 ZXJzL3ZpZGVvL3ZpZGVvLm8gZHJpdmVycy9tZC9tZGRldi5vIFwKbmV0L25ldHdvcmsubyBcCi91 c3Ivc3JjL2xpbnV4L2FyY2gvaTM4Ni9saWIvbGliLmEgL3Vzci9zcmMvbGludXgvbGliL2xpYi5h IC91c3Ivc3JjL2xpbnV4L2FyY2gvaTM4Ni9saWIvbGliLmEgXAotLWVuZC1ncm91cCBcCi1vIHZt bGludXgKZHJpdmVycy9tZC9tZGRldi5vOiBJbiBmdW5jdGlvbiBgX191cGRhdGVfaGFyZGJsb2Nr c2l6ZSc6CmRyaXZlcnMvbWQvbWRkZXYubygudGV4dCsweDI0MTEpOiB1bmRlZmluZWQgcmVmZXJl bmNlIHRvIGBnZXRfaGFyZGJsb2Nrc2l6ZScKZHJpdmVycy9tZC9tZGRldi5vKC50ZXh0KzB4MjQ0 ZCk6IHVuZGVmaW5lZCByZWZlcmVuY2UgdG8gYGdldF9oYXJkYmxvY2tzaXplJwptYWtlOiAqKiog W3ZtbGludXhdIEVycm9yIDEKCmx2bS0wLjkuMV9iZXRhNy0yLjQuNi5wYXRjaAoKLS0tIGxpbnV4 L2luY2x1ZGUvbGludXgvbHZtLmgub3JpZwlXZWQgSnVsICA0IDEzOjU2OjUyIDIwMDEKKysrIGxp bnV4L2luY2x1ZGUvbGludXgvbHZtLmgJU3VuIE1heSAgNiAyMDowNDo0MCAyMDAxCkBAIC0zLDI4 ICszLDI4IEBACiAgKiBrZXJuZWwvbHZtLmgKICAqIHRvb2xzL2xpYi9sdm0uaAogICoKLSAqIENv cHlyaWdodCAoQykgMTk5NyAtIDIwMDAgIEhlaW56IE1hdWVsc2hhZ2VuLCBTaXN0aW5hIFNvZnR3 YXJlCisgKiBDb3B5cmlnaHQgKEMpIDE5OTcgLSAyMDAxICBIZWlueiBNYXVlbHNoYWdlbiwgU2lz dGluYSBTb2Z0d2FyZQogICoKICAqIEZlYnJ1YXJ5LU5vdmVtYmVyIDE5OTcKICAqIE1heS1KdWx5 IDE5OTgKICAqIEphbnVhcnktTWFyY2gsSnVseSxTZXB0ZW1iZXIsT2N0b2JlcixEZXplbWJlciAx OTk5CiAgKiBKYW51YXJ5LEZlYnJ1YXJ5LEp1bHksTm92ZW1iZXIgMjAwMAotICogSmFudWFyeSAy MDAxCisgKiBKYW51YXJ5LU1hcmNoIDIwMDEKICAqCiAgKiBsdm0gaXMgZnJlZSBzb2Z0d2FyZTsg eW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQogICogaXQgdW5kZXIgdGhlIHRl cm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKICAq IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIsIG9yIChhdCB5 b3VyIG9wdGlvbikKICAqIGFueSBsYXRlciB2ZXJzaW9uLgotICogCisgKgogICogbHZtIGlzIGRp c3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCiAgKiBidXQgV0lU SE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgog ICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAg U2VlIHRoZQogICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4K LSAqIAorICoKICAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBH ZW5lcmFsIFB1YmxpYyBMaWNlbnNlCiAgKiBhbG9uZyB3aXRoIEdOVSBDQzsgc2VlIHRoZSBmaWxl IENPUFlJTkcuICBJZiBub3QsIHdyaXRlIHRvCiAgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0 aW9uLCA1OSBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsCi0gKiBCb3N0b24sIE1BIDAyMTExLTEz MDcsIFVTQS4gCisgKiBCb3N0b24sIE1BIDAyMTExLTEzMDcsIFVTQS4KICAqCiAgKi8KIApAQCAt NTIsNyArNTIsNyBAQAogICogICAgMDgvMTIvMTk5OSAtIGNoYW5nZWQgTFZNX0xWX1NJWkVfTUFY IG1hY3JvIHRvIHJlZmxlY3QgY3VycmVudCAxVEIgbGltaXQKICAqICAgIDAxLzAxLzIwMDAgLSBl eHRlbmRlZCBsdl92MiBjb3JlIHN0cnVjdHVyZSBieSB3YWl0X3F1ZXVlIG1lbWJlcgogICogICAg MTIvMDIvMjAwMCAtIGludGVncmF0ZWQgQW5kcmVhIEFyY2FnbmVsbGkncyBzbmFwc2hvdCB3b3Jr Ci0gKiAgICAxOC8wMi8yMDAwIC0gc2VwZXJhdGVkIHVzZXIgYW5kIGtlcm5lbCBzcGFjZSBwYXJ0 cyBieSAKKyAqICAgIDE4LzAyLzIwMDAgLSBzZXBlcmF0ZWQgdXNlciBhbmQga2VybmVsIHNwYWNl IHBhcnRzIGJ5CiAgKiAgICAgICAgICAgICAgICAgI2lmZGVmIHRoZW0gd2l0aCBfX0tFUk5FTF9f CiAgKiAgICAwOC8wMy8yMDAwIC0gaW1wbGVtZW50ZWQgY2x1c3Rlci9zaGFyZWQgYml0cyBmb3Ig dmdfYWNjZXNzCiAgKiAgICAyNi8wNi8yMDAwIC0gaW1wbGVtZW50ZWQgc25hcHNob3QgcGVyc2lz dGVuY3kgYW5kIHJlc2l6aW5nIHN1cHBvcnQKQEAgLTYwLDYgKzYwLDE0IEBACiAgKiAgICAxMi8x MS8yMDAwIC0gcmVtb3ZlZCB1bm5lZWRlZCB0aW1lc3RhbXAgZGVmaW5pdGlvbnMKICAqICAgIDI0 LzEyLzIwMDAgLSByZW1vdmVkIExWTV9UT197Q09SRSxESVNLfSosIHVzZSBjcHVfe2Zyb20sIHRv fV9sZSoKICAqICAgICAgICAgICAgICAgICBpbnN0ZWFkIC0gQ2hyaXN0b3BoIEhlbGx3aWcKKyAq ICAgIDIyLzAxLzIwMDEgLSBDaGFuZ2UgdWxvbmcgdG8gdWludDMyX3QKKyAqICAgIDE0LzAyLzIw MDEgLSBjaGFuZ2VkIExWTV9TTkFQU0hPVF9NSU5fQ0hVTksgdG8gMSBwYWdlCisgKiAgICAyMC8w Mi8yMDAxIC0gaW5jcmVtZW50ZWQgSU9QIHZlcnNpb24gdG8gMTEgYmVjYXVzZSBvZiBpbmNvbXBh dGlibGUKKyAqICAgICAgICAgICAgICAgICBjaGFuZ2UgaW4gVkcgYWN0aXZhdGlvbiAoaW4gb3Jk ZXIgdG8gc3VwcG9ydCBkZXZmcyBiZXR0ZXIpCisgKiAgICAwMS8wMy8yMDAxIC0gUmV2ZXJ0IHRv IElPUDEwIGFuZCBhZGQgVkdfQ1JFQVRFX09MRCBjYWxsIGZvciBjb21wYXRpYmlsaXR5CisgKiAg ICAwOC8wMy8yMDAxIC0gbmV3IGx2X3QgKGluIGNvcmUpIHZlcnNpb24gbnVtYmVyIDU6IGNoYW5n ZWQgcGFnZSBtZW1iZXIKKyAqICAgICAgICAgICAgICAgICB0byAoc3RydWN0IGtpb2J1ZiAqKSB0 byB1c2UgZm9yIENPVyBleGNlcHRpb24gdGFibGUgaW8KKyAqICAgIDI2LzAzLzIwMDEgLSBjaGFu Z2VkIGx2X3Y0IHRvIGx2X3Y1IGluIHN0cnVjdHVyZSBkZWZpbml0aW9uIChITSkKICAqCiAgKi8K IApAQCAtNjcsOSArNzUsMTEgQEAKICNpZm5kZWYgX0xWTV9IX0lOQ0xVREUKICNkZWZpbmUgX0xW TV9IX0lOQ0xVREUKIAotI2RlZmluZQlfTFZNX0tFUk5FTF9IX1ZFUlNJT04JIkxWTSAwLjkuMV9i ZXRhMiAoMTgvMDEvMjAwMSkiCisjZGVmaW5lIExWTV9SRUxFQVNFX05BTUUgIjAuOS4xX2JldGE3 IgorI2RlZmluZSBMVk1fUkVMRUFTRV9EQVRFICIxMC8wNC8yMDAxIgorCisjZGVmaW5lCV9MVk1f S0VSTkVMX0hfVkVSU0lPTgkiTFZNICJMVk1fUkVMRUFTRV9OQU1FIiAoIkxWTV9SRUxFQVNFX0RB VEUiKSIKIAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGxpbnV4L3ZlcnNp b24uaD4KIAogLyoKQEAgLTkwLDEzICsxMDAsMjAgQEAKICAgICNkZWZpbmUgREVCVUdfUkVBRAog ICAgI2RlZmluZSBERUJVR19HRU5ESVNLCiAgICAjZGVmaW5lIERFQlVHX1ZHX0NSRUFURQotICAg I2RlZmluZSBERUJVR19MVk1fQkxLX09QRU4KKyAgICNkZWZpbmUgREVCVUdfREVWSUNFCiAgICAj ZGVmaW5lIERFQlVHX0tGUkVFCiAgKi8KICNlbmRpZgkJCQkvKiAjaWZkZWYgX19LRVJORUxfXyAq LwogCisjaWZuZGVmIF9fS0VSTkVMX18KKyNkZWZpbmUgX19LRVJORUxfXworI2luY2x1ZGUgPGxp bnV4L2tkZXZfdC5oPgorI2luY2x1ZGUgPGxpbnV4L2xpc3QuaD4KKyN1bmRlZiBfX0tFUk5FTF9f CisjZWxzZQogI2luY2x1ZGUgPGxpbnV4L2tkZXZfdC5oPgogI2luY2x1ZGUgPGxpbnV4L2xpc3Qu aD4KKyNlbmRpZgkJCQkvKiAjaWZuZGVmIF9fS0VSTkVMX18gKi8KIAogI2luY2x1ZGUgPGFzbS90 eXBlcy5oPgogI2luY2x1ZGUgPGxpbnV4L21ham9yLmg+CkBAIC0xMTcsMTAgKzEzNCwxMCBAQAog I3VuZGVmCUJMT0NLX1NJWkUKICNlbmRpZgogCi0jaWZkZWYgQ09ORklHX0FSQ0hfUzM5MCAKKyNp ZmRlZiBDT05GSUdfQVJDSF9TMzkwCiAjZGVmaW5lIEJMT0NLX1NJWkUJNDA5NgogI2Vsc2UKLSNk ZWZpbmUgQkxPQ0tfU0laRQkxMDI0CisjZGVmaW5lIEJMT0NLX1NJWkUJNTEyCiAjZW5kaWYKIAog I2lmbmRlZglTRUNUT1JfU0laRQpAQCAtMTQxLDcgKzE1OCw3IEBACiAvKiBzZXQgdGhlIGRlZmF1 bHQgc3RydWN0dXJlIHZlcnNpb24gKi8KICNpZiAoIExWTV9TVFJVQ1RfVkVSU0lPTiA9PSAxKQog I2RlZmluZSBwdl90IHB2X3YyX3QKLSNkZWZpbmUgbHZfdCBsdl92NF90CisjZGVmaW5lIGx2X3Qg bHZfdjVfdAogI2RlZmluZSB2Z190IHZnX3YzX3QKICNkZWZpbmUgcHZfZGlza190IHB2X2Rpc2tf djJfdAogI2RlZmluZSBsdl9kaXNrX3QgbHZfZGlza192M190CkBAIC0yOTksNyArMzE2LDcgQEAK IAogI2RlZmluZQlMVk1fU05BUFNIT1RfTUFYX0NIVU5LCTEwMjQJLyogMTAyNCBLQiAqLwogI2Rl ZmluZQlMVk1fU05BUFNIT1RfREVGX0NIVU5LCTY0CS8qIDY0ICBLQiAqLwotI2RlZmluZQlMVk1f U05BUFNIT1RfTUlOX0NIVU5LCTEJLyogMSAgIEtCICovCisjZGVmaW5lCUxWTV9TTkFQU0hPVF9N SU5fQ0hVTksJKFBBR0VfU0laRS8xMDI0KQkvKiA0IG9yIDggS0IgKi8KIAogI2RlZmluZQlVTkRF RgktMQogI2RlZmluZSBGQUxTRQkwCkBAIC0zMjMsNyArMzQwLDcgQEAKICAqIGlvY3RscwogICov CiAvKiB2b2x1bWUgZ3JvdXAgKi8KLSNkZWZpbmUJVkdfQ1JFQVRFICAgICAgICAgICAgICAgX0lP VyAoIDB4ZmUsIDB4MDAsIDEpCisjZGVmaW5lCVZHX0NSRUFURV9PTEQgICAgICAgICAgIF9JT1cg KCAweGZlLCAweDAwLCAxKQogI2RlZmluZQlWR19SRU1PVkUgICAgICAgICAgICAgICBfSU9XICgg MHhmZSwgMHgwMSwgMSkKIAogI2RlZmluZQlWR19FWFRFTkQgICAgICAgICAgICAgICBfSU9XICgg MHhmZSwgMHgwMywgMSkKQEAgLTMzNiw2ICszNTMsOCBAQAogI2RlZmluZQlWR19TRVRfRVhURU5E QUJMRSAgICAgICBfSU9XICggMHhmZSwgMHgwOCwgMSkKICNkZWZpbmUJVkdfUkVOQU1FCQlfSU9X ICggMHhmZSwgMHgwOSwgMSkKIAorLyogU2luY2UgMC45YmV0YTYgKi8KKyNkZWZpbmUJVkdfQ1JF QVRFICAgICAgICAgICAgICAgX0lPVyAoIDB4ZmUsIDB4MGEsIDEpCiAKIC8qIGxvZ2ljYWwgdm9s dW1lICovCiAjZGVmaW5lCUxWX0NSRUFURSAgICAgICAgICAgICAgIF9JT1cgKCAweGZlLCAweDIw LCAxKQpAQCAtNDE4LDYgKzQzNyw5IEBACiAjZGVmaW5lCVBWX0FMTE9DQVRBQkxFICAgICAgIDB4 MDIJLyogcHZfYWxsb2NhdGFibGUgKi8KIAogCisvKiBtaXNjICovCisjZGVmaW5lIExWTV9TTkFQ U0hPVF9EUk9QUEVEX1NFQ1RPUiAxCisKIC8qCiAgKiBTdHJ1Y3R1cmUgZGVmaW5pdGlvbnMgY29y ZS9kaXNrIGZvbGxvdwogICoKQEAgLTQ0MCwxMCArNDYyLDEwIEBACiAvKiByZW1hcCBwaHlzaWNh bCBzZWN0b3IvcmRldiBwYWlycyBpbmNsdWRpbmcgaGFzaCAqLwogdHlwZWRlZiBzdHJ1Y3Qgewog CXN0cnVjdCBsaXN0X2hlYWQgaGFzaDsKLQl1bG9uZyByc2VjdG9yX29yZzsKLQlrZGV2X3QgcmRl dl9vcmc7Ci0JdWxvbmcgcnNlY3Rvcl9uZXc7Ci0Ja2Rldl90IHJkZXZfbmV3OworCXVpbnQzMl90 IHJzZWN0b3Jfb3JnOworCWtkZXZfdCAgIHJkZXZfb3JnOworCXVpbnQzMl90IHJzZWN0b3JfbmV3 OworCWtkZXZfdCAgIHJkZXZfbmV3OwogfSBsdl9ibG9ja19leGNlcHRpb25fdjFfdDsKIAogLyog ZGlzayBzdG9yZWQgcGUgaW5mb3JtYXRpb24gKi8KQEAgLTU3MSwyMSArNTkzLDIxIEBACiAvKiBj b3JlIFBFIGluZm9ybWF0aW9uICovCiB0eXBlZGVmIHN0cnVjdCB7CiAJa2Rldl90IGRldjsKLQl1 bG9uZyBwZTsJCS8qIHRvIGJlIGNoYW5nZWQgaWYgPiAyVEIgKi8KLQl1bG9uZyByZWFkczsKLQl1 bG9uZyB3cml0ZXM7CisJdWludDMyX3QgcGU7CQkvKiB0byBiZSBjaGFuZ2VkIGlmID4gMlRCICov CisJdWludDMyX3QgcmVhZHM7CisJdWludDMyX3Qgd3JpdGVzOwogfSBwZV90OwogCiB0eXBlZGVm IHN0cnVjdCB7CiAJY2hhciBsdl9uYW1lW05BTUVfTEVOXTsKIAlrZGV2X3Qgb2xkX2RldjsKIAlr ZGV2X3QgbmV3X2RldjsKLQl1bG9uZyBvbGRfcGU7Ci0JdWxvbmcgbmV3X3BlOworCXVpbnQzMl90 IG9sZF9wZTsKKwl1aW50MzJfdCBuZXdfcGU7CiB9IGxlX3JlbWFwX3JlcV90OwogCiB0eXBlZGVm IHN0cnVjdCBsdl9ibWFwIHsKLQl1bG9uZyBsdl9ibG9jazsKKwl1aW50MzJfdCBsdl9ibG9jazsK IAlkZXZfdCBsdl9kZXY7CiB9IGx2X2JtYXBfdDsKIApAQCAtNTk0LDcgKzYxNiw3IEBACiAgKi8K IAogLyogY29yZSAqLwotdHlwZWRlZiBzdHJ1Y3QgbHZfdjQgewordHlwZWRlZiBzdHJ1Y3QgbHZf djUgewogCWNoYXIgbHZfbmFtZVtOQU1FX0xFTl07CiAJY2hhciB2Z19uYW1lW05BTUVfTEVOXTsK IAl1aW50IGx2X2FjY2VzczsKQEAgLTYxNyw5ICs2MzksOSBAQAogCXVpbnQgbHZfcmVhZF9haGVh ZDsKIAogCS8qIGRlbHRhIHRvIHZlcnNpb24gMSBzdGFydHMgaGVyZSAqLwotCXN0cnVjdCBsdl92 NCAqbHZfc25hcHNob3Rfb3JnOwotCXN0cnVjdCBsdl92NCAqbHZfc25hcHNob3RfcHJldjsKLQlz dHJ1Y3QgbHZfdjQgKmx2X3NuYXBzaG90X25leHQ7CisJc3RydWN0IGx2X3Y1ICpsdl9zbmFwc2hv dF9vcmc7CisJc3RydWN0IGx2X3Y1ICpsdl9zbmFwc2hvdF9wcmV2OworCXN0cnVjdCBsdl92NSAq bHZfc25hcHNob3RfbmV4dDsKIAlsdl9ibG9ja19leGNlcHRpb25fdCAqbHZfYmxvY2tfZXhjZXB0 aW9uOwogCXVpbnQgbHZfcmVtYXBfcHRyOwogCXVpbnQgbHZfcmVtYXBfZW5kOwpAQCAtNjI3LDEx ICs2NDksMTEgQEAKIAl1aW50IGx2X3NuYXBzaG90X21pbm9yOwogI2lmZGVmIF9fS0VSTkVMX18K IAlzdHJ1Y3Qga2lvYnVmICpsdl9pb2J1ZjsKKwlzdHJ1Y3Qga2lvYnVmICpsdl9DT1dfdGFibGVf aW9idWY7CiAJc3RydWN0IHNlbWFwaG9yZSBsdl9zbmFwc2hvdF9zZW07CiAJc3RydWN0IGxpc3Rf aGVhZCAqbHZfc25hcHNob3RfaGFzaF90YWJsZTsKLQl1bG9uZyBsdl9zbmFwc2hvdF9oYXNoX3Rh YmxlX3NpemU7Ci0JdWxvbmcgbHZfc25hcHNob3RfaGFzaF9tYXNrOwotCXN0cnVjdCBwYWdlICps dl9DT1dfdGFibGVfcGFnZTsKKwl1aW50MzJfdCBsdl9zbmFwc2hvdF9oYXNoX3RhYmxlX3NpemU7 CisJdWludDMyX3QgbHZfc25hcHNob3RfaGFzaF9tYXNrOwogCXdhaXRfcXVldWVfaGVhZF90IGx2 X3NuYXBzaG90X3dhaXQ7CiAJaW50CWx2X3NuYXBzaG90X3VzZV9yYXRlOwogCXZvaWQJKnZnOwpA QCAtNjQwLDcgKzY2Miw3IEBACiAjZWxzZQogCWNoYXIgZHVtbXlbMjAwXTsKICNlbmRpZgotfSBs dl92NF90OworfSBsdl92NV90OwogCiAvKiBkaXNrICovCiB0eXBlZGVmIHN0cnVjdCB7CkBAIC03 OTEsNyArODEzLDcgQEAKIAlzdHJ1Y3QgewogCQlrZGV2X3QgbHZfZGV2OwogCQlrZGV2X3QgcHZf ZGV2OwotCQl1bG9uZyBwdl9vZmZzZXQ7CisJCXVpbnQzMl90IHB2X29mZnNldDsKIAl9IGRhdGE7 CiB9IHBlX2xvY2tfcmVxX3Q7CiAKQEAgLTgwNCw3ICs4MjYsNyBAQAogCiAvKiBSZXF1ZXN0IHN0 cnVjdHVyZSBMVl9TVEFUVVNfQllJTkRFWCAqLwogdHlwZWRlZiBzdHJ1Y3QgewotCXVsb25nIGx2 X2luZGV4OworCXVpbnQzMl90IGx2X2luZGV4OwogCWx2X3QgKmx2OwogCS8qIFRyYW5zZmVyIHNp emUgYmVjYXVzZSB1c2VyIHNwYWNlIGFuZCBrZXJuZWwgc3BhY2UgZGlmZmVyICovCiAJdXNob3J0 IHNpemU7CkBAIC04MTMsNyArODM1LDcgQEAKIC8qIFJlcXVlc3Qgc3RydWN0dXJlIExWX1NUQVRV U19CWURFVi4uLiAqLwogdHlwZWRlZiBzdHJ1Y3QgewogCWRldl90IGRldjsKLQlwdl90ICpsdjsK Kwlsdl90ICpsdjsKIH0gbHZfc3RhdHVzX2J5ZGV2X3JlcV90OwogCiAKLS0tIGxpbnV4L2RyaXZl cnMvbWQvbHZtLmMub3JpZwlXZWQgSnVsICA0IDEzOjQ4OjA0IDIwMDEKKysrIGxpbnV4L2RyaXZl cnMvbWQvbHZtLmMJU3VuIE1heSAgNiAyMDowNDo0MCAyMDAxCkBAIC0xLDEzICsxLDEzIEBACiAv KgogICoga2VybmVsL2x2bS5jCiAgKgotICogQ29weXJpZ2h0IChDKSAxOTk3IC0gMjAwMCAgSGVp bnogTWF1ZWxzaGFnZW4sIFNpc3RpbmEgU29mdHdhcmUKKyAqIENvcHlyaWdodCAoQykgMTk5NyAt IDIwMDEgIEhlaW56IE1hdWVsc2hhZ2VuLCBTaXN0aW5hIFNvZnR3YXJlCiAgKgogICogRmVicnVh cnktTm92ZW1iZXIgMTk5NwogICogQXByaWwtTWF5LEp1bHktQXVndXN0LE5vdmVtYmVyIDE5OTgK ICAqIEphbnVhcnktTWFyY2gsTWF5LEp1bHksU2VwdGVtYmVyLE9jdG9iZXIgMTk5OQogICogSmFu dWFyeSxGZWJydWFyeSxKdWx5LFNlcHRlbWJlci1Ob3ZlbWJlciAyMDAwCi0gKiBKYW51YXJ5IDIw MDEKKyAqIEphbnVhcnksRmVicnVhcnksTWFyY2ggMjAwMQogICoKICAqCiAgKiBMVk0gZHJpdmVy IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkK QEAgLTQzLDcgKzQzLDggQEAKICAqICAgICAgICAgICAgICAgICBzdXBwb3J0IGZvciBmcmVlIChl Zy4gbG9uZ2VyKSBsb2dpY2FsIHZvbHVtZSBuYW1lcwogICogICAgMTIvMDUvMTk5OCAtIGFkZGVk IHNwaW5fbG9ja3MgKHRoYW5rcyB0byBQYXNjYWwgdmFuIERhbQogICogICAgICAgICAgICAgICAg IDxwYXNjYWxAcmFtb3RoLnhzNGFsbC5ubD4pCi0gKiAgICAyNS8wNS8xOTk4IC0gZml4ZWQgaGFu ZGxpbmcgb2YgbG9ja2VkIFBFcyBpbiBsdm1fbWFwKCkgYW5kIGx2bV9jaHJfaW9jdGwoKQorICog ICAgMjUvMDUvMTk5OCAtIGZpeGVkIGhhbmRsaW5nIG9mIGxvY2tlZCBQRXMgaW4gbHZtX21hcCgp IGFuZAorICogICAgICAgICAgICAgICAgIGx2bV9jaHJfaW9jdGwoKQogICogICAgMjYvMDUvMTk5 OCAtIHJlYWN0aXZhdGVkIHZlcmlmeV9hcmVhIGJ5IGFjY2Vzc19vawogICogICAgMDcvMDYvMTk5 OCAtIHVzZWQgdm1hbGxvYy92ZnJlZSBpbnN0ZWFkIG9mIGttYWxsb2Mva2ZyZWUgdG8gZ28KICAq ICAgICAgICAgICAgICAgICBiZXlvbmQgMTI4LzI1NiBLQiBtYXggYWxsb2NhdGlvbiBsaW1pdCBw ZXIgY2FsbApAQCAtNzIsNyArNzMsNyBAQAogICogICAgICAgICAgICAgICAgIG9ubHkgb3RoZXIg dXBkYXRlIGlvY3RscyBhcmUgYmxvY2tlZCBub3cKICAqICAgICAgICAgICAgICAgLSBmaXhlZCBw di0+cGUgdG8gTlVMTCBmb3IgcHZfc3RhdHVzCiAgKiAgICAgICAgICAgICAgIC0gdXNpbmcgbHZf cmVxIHN0cnVjdHVyZSBpbiBsdm1fY2hyX2lvY3RsKCkgbm93Ci0gKiAgICAgICAgICAgICAgIC0g Zml4ZWQgTlVMTCBwdHIgcmVmZXJlbmNlIGJ1ZyBpbiBsdm1fZG9fbHZfZXh0ZW5kX3JlZHVjZSgp CisgKiAgICAgICAgICAgICAgIC0gZml4ZWQgTlVMTCBwdHIgcmVmZXJlbmNlIGJ1ZyBpbiBsdm1f ZG9fbHZfZXh0ZW5kcmVkdWNlKCkKICAqICAgICAgICAgICAgICAgICBjYXVzZWQgYnkgdW5jb250 aWd1b3VzIFBWIGFycmF5IGluIGx2bV9jaHJfaW9jdGwoVkdfUkVEVUNFKQogICogICAgMDkvMDIv MTk5OSAtIGNoYW5nZWQgQkxLUkFTRVQgYW5kIEJMS1JBR0VUIGluIGx2bV9jaHJfaW9jdGwoKSB0 bwogICogICAgICAgICAgICAgICAgIGhhbmRsZSBsZ29pY2FsIHZvbHVtZSBwcml2YXRlIHJlYWQg YWhlYWQgc2VjdG9yCkBAIC0xMjUsNyArMTI2LDggQEAKICAqICAgIDE0LzAyLzIwMDAgLSBzdXBw b3J0IGZvciAyLjMuNDMKICAqICAgICAgICAgICAgICAgLSBpbnRlZ3JhdGVkIEFuZHJlYSBBcmNh Z25lbGkncyBzbmFwc2hvdCBjb2RlCiAgKiAgICAyNS8wNi8yMDAwIC0gamFtZXMgKGNoaXApICwg SUtLSEFZRCEgcm9mZmwKLSAqICAgIDI2LzA2LzIwMDAgLSBlbmhhbmNlZCBsdl9leHRlbmRfcmVk dWNlIGZvciBzbmFwc2hvdCBsb2dpY2FsIHZvbHVtZSBzdXBwb3J0CisgKiAgICAyNi8wNi8yMDAw IC0gZW5oYW5jZWQgbHZfZXh0ZW5kX3JlZHVjZSBmb3Igc25hcHNob3QgbG9naWNhbCB2b2x1bWUK KyAqICAgICAgICAgICAgICAgICBzdXBwb3J0CiAgKiAgICAwNi8wOS8yMDAwIC0gYWRkZWQgZGV2 ZnMgc3VwcG9ydAogICogICAgMDcvMDkvMjAwMCAtIGNoYW5nZWQgSU9QIHZlcnNpb24gdG8gOQog ICogICAgICAgICAgICAgICAtIHN0YXJ0ZWQgdG8gYWRkIG5ldyBjaGFyIGlvY3RsIExWX1NUQVRV U19CWURFVl9UIHRvIHN1cHBvcnQKQEAgLTE0OCwyOCArMTUwLDcwIEBACiAgKiAgICAgICAgICAg ICAgICAgcHJvY2ZzIGlzIGFsd2F5cyBzdXBwb3J0ZWQgbm93LiAoSlQpCiAgKiAgICAxMi8wMS8y MDAxIC0gYXZvaWRlZCBmbHVzaGluZyBsb2dpY2FsIHZvbHVtZSBpbiBjYXNlIG9mIHNocmlua2lu ZwogICogICAgICAgICAgICAgICAgIGJlY2F1c2Ugb2YgdW5lY2Vzc2FyeSBvdmVyaGVhZCBpbiBj YXNlIG9mIGhlYXZ5IHVwZGF0ZXMKLSAqICAgIDA1LzA0LzIwMDEgLSBsdm1fbWFwIGJ1Z3M6IGRv bid0IHVzZSBiX2Jsb2NrbnIvYl9kZXYgaW4gbHZtX21hcCwgaXQKLSAqCQkgICBkZXN0cm95cyBz dGFja2luZyBkZXZpY2VzLiBjYWxsIGJfZW5kX2lvIG9uIGZhaWxlZCBtYXBzLgotICoJCSAgIChK ZW5zIEF4Ym9lKQorICogICAgMjUvMDEvMjAwMSAtIEFsbG93IFJPIG9wZW4gb2YgYW4gaW5hY3Rp dmUgTFYgc28gaXQgY2FuIGJlIHJlYWN0aXZhdGVkLgorICogICAgMzEvMDEvMjAwMSAtIHJlbW92 ZWQgYmxrX2luaXRfcXVldWUvYmxrX2NsZWFudXBfcXVldWUgcXVldWVpbmcgd2lsbCBiZQorICog ICAgICAgICAgICAgICAgIGhhbmRsZWQgYnkgdGhlIHByb3BlciBkZXZpY2VzLgorICogICAgICAg ICAgICAgICAtIElmIHlvdSB0cnkgYW5kIEJNQVAgYSBzbmFwc2hvdCB5b3Ugbm93IGdldCBhbiAt RVBFUk0KKyAqICAgIDAxLzAxLzIwMDEgLSBsdm1fbWFwKCkgbm93IGNhbGxzIGJ1ZmZlcl9JT19l cnJvciBvbiBlcnJvciBmb3IgMi40CisgKiAgICAgICAgICAgICAgIC0gZmFjdG9yZWQgX19yZW1h cF9zbmFwc2hvdCBvdXQgb2YgbHZtX21hcAorICogICAgMTIvMDIvMjAwMSAtIG1vdmUgZGV2ZnMg Y29kZSB0byBjcmVhdGUgVkcgYmVmb3JlIExWcworICogICAgMTMvMDIvMjAwMSAtIGFsbG93IFZH X0NSRUFURSBvbiAvZGV2L2x2bQorICogICAgMTQvMDIvMjAwMSAtIHJlbW92ZWQgbW9kdmVyc2lv bnMuaAorICogICAgICAgICAgICAgICAtIHRpZGllZCBkZXZpY2UgZGVmaW5lcyBmb3IgYmxrLmgK KyAqICAgICAgICAgICAgICAgLSB0aWRpZWQgZGVidWcgc3RhdGVtZW50cworICogICAgICAgICAg ICAgICAtIGJ1ZzogdmdbXSBtZW1iZXIgbm90IHNldCBiYWNrIHRvIE5VTEwgaWYgYWN0aXZhdGlv biBmYWlscworICogICAgICAgICAgICAgICAtIG1vcmUgbHZtX21hcCB0aWR5aW5nCisgKiAgICAx NS8wMi8yMDAxIC0gcmVnaXN0ZXIgL2Rldi9sdm0gd2l0aCBkZXZmcyBjb3JyZWN0bHkgKG1ham9y L21pbm9yCisgKiAgICAgICAgICAgICAgICAgd2VyZSBzd2FwcGVkKQorICogICAgMTkvMDIvMjAw MSAtIHByZWFsbG9jYXRlZCBidWZmZXJfaGVhZHMgZm9yIHJhd2lvIHdoZW4gdXNpbmcKKyAqICAg ICAgICAgICAgICAgICBzbmFwc2hvdHMgW0pUXQorICogICAgMjgvMDIvMjAwMSAtIGludHJvZHVj ZWQgdGhlIFBfREVWIG1hY3JvIGFuZCBjaGFuZ2VkIHNvbWUgaW50ZXJuZWwKKyAqICAgICAgICAg ICAgICAgICBmdW5jdGlvbnMgdG8gYmUgc3RhdGljIFtBRF0KKyAqICAgIDI4LzAyLzIwMDEgLSBm YWN0b3JlZCBsdm1fZ2V0X3NuYXBzaG90X3VzZV9yYXRlIG91dCBvZiBibGtfaW9jdGwgW0FEXQor ICogICAgICAgICAgICAgICAtIGZpeGVkIHVzZXIgYWRkcmVzcyBhY2Nlc3NpbmcgYnVnIGluIGx2 bV9kb19sdl9jcmVhdGUoKQorICogICAgICAgICAgICAgICAgIHdoZXJlIHRoZSBjaGVjayBmb3Ig YW4gZXhpc3RpbmcgTFYgdGFrZXMgcGxhY2UgcmlnaHQgYXQKKyAqICAgICAgICAgICAgICAgICB0 aGUgYmVnaW5uaW5nCisgKiAgICAwMS8wMy8yMDAxIC0gQWRkIFZHX0NSRUFURV9PTEQgZm9yIElP UCAxMCBjb21wYXRpYmlsaXR5CisgKiAgICAwMi8wMy8yMDAxIC0gRG9uJ3QgZGVzdHJveSB1c2Vy bW9kZSBwb2ludGVycyBpbiBsdl90IHN0cnVjdHVyZXMgZHVpbmcKKyAqICAgICAgICAgICAgICAg ICBMVl9TVEFUVVNfQll4eHgKKyAqICAgICAgICAgICAgICAgICBhbmQgcmVtb3ZlIHJlZHVuZGFu dCBsdl90IHZhcmlhYmxlcyBmcm9tIHNhbWUuCisgKiAgICAgICAgICAgICAgIC0gYXZvaWQgY29t cGlsYXRpb24gb2YgbHZtX2R1bW15X2RldmljZV9yZXF1ZXN0IGluIGNhc2Ugb2YKKyAqICAgICAg ICAgICAgICAgICBMaW51eCA+PSAyLjMuMCB0byBhdm9pZCBhIHdhcm5pbmcKKyAqICAgICAgICAg ICAgICAgLSBhZGRlZCBsdm1fbmFtZSBhcmd1bWVudCB0byBwcmludGsgaW4gYnVmZmVyIGFsbG9j YXRpb24KKyAqICAgICAgICAgICAgICAgICBpbiBvcmRlciB0byBhdm9pZCBhIHdhcm5pbmcKKyAq ICAgIDA0LzAzLzIwMDEgLSBtb3ZlZCBsaW51eC92ZXJzaW9uLmggYWJvdmUgZmlyc3QgdXNlIG9m IEtFUk5FTF9WRVJTSU9OCisgKiAgICAgICAgICAgICAgICAgbWFjcm9zCisgKiAgICAwNS8wMy8y MDAxIC0gcmVzdG9yZSBjb3B5aW5nIHBlX3QgYXJyYXkgaW4gbHZtX2RvX2x2X3N0YXR1c19ieW5h bWUuIEZvcgorICogICAgICAgICAgICAgICAgIGx2ZGlzcGxheSAtdiAoUEMpCisgKiAgICAgICAg ICAgICAgIC0gcmVzdG9yZSBjb3B5aW5nIHBlX3QgYXJyYXkgaW4gbHZtX2RvX2x2X3N0YXR1c19i eWluZGV4IChITSkKKyAqICAgICAgICAgICAgICAgLSBhZGRlZCBjb3B5aW5nIHBlX3QgYXJyYXkg aW4gbHZtX2RvX2x2X3N0YXR1c19ieWRldiAoSE0pCisgKiAgICAgICAgICAgICAgIC0gZW5oYW5j ZWQgbHZtX2RvX2x2X3N0YXR1c19ieXtuYW1lLGluZGV4LGRldn0gdG8gYmUgY2FwYWJsZQorICog ICAgICAgICAgICAgICAgIHRvIGNvcHkgdGhlIGx2X2Jsb2NrX2V4Y2VwdGlvbl90IGFycmF5IHRv IHVzZXJzcGFjZSAoSE0pCisgKiAgICAwOC8wMy8yMDAxIC0gaW5pdGlhbGl6ZSBuZXcgbHZfcHRy LT5sdl9DT1dfdGFibGVfaW9idWYgZm9yIHNuYXBzaG90czsKKyAqICAgICAgICAgICAgICAgICBy ZW1vdmVkIG9ic29sZXRlIGx2X3B0ci0+bHZfQ09XX3RhYmxlX3BhZ2UgaW5pdGlhbGl6YXRpb24K KyAqICAgICAgICAgICAgICAgLSBmYWN0b3JlZCBsdm1fZG9fcHZfZmx1c2ggb3V0IG9mIGx2bV9j aHJfaW9jdGwgKEhNKQorICogICAgMDkvMDMvMjAwMSAtIEFkZGVkIF9sb2NrX29wZW5fY291bnQg dG8gZW5zdXJlIHdlIG9ubHkgZHJvcCB0aGUgbG9jaworICogICAgICAgICAgICAgICAgIHdoZW4g dGhlIGxvY2tpbmcgcHJvY2VzcyBjbG9zZXMuCisgKiAgICAwNS8wNC8yMDAxIC0gRGVmZXIgd3Jp dGVzIHRvIGFuIGV4dGVudCB0aGF0IGlzIGJlaW5nIG1vdmVkIFtKVF0KKyAqICAgIDA1LzA0LzIw MDEgLSB1c2UgYl9yZGV2IGFuZCBiX3JzZWN0b3IgcmF0aGVyIHRoYW4gYl9kZXYgYW5kIGJfYmxv Y2tuciBpbgorICogICAgICAgICAgICAgICAgIGx2bV9tYXAoKSBpbiBvcmRlciB0byBtYWtlIHN0 YWNraW5nIGRldmljZXMgbW9yZSBoYXBweSAoSE0pCiAgKgogICovCiAKKyNpbmNsdWRlIDxsaW51 eC92ZXJzaW9uLmg+CiAKLXN0YXRpYyBjaGFyICpsdm1fdmVyc2lvbiA9ICJMVk0gdmVyc2lvbiAw LjkuMV9iZXRhMiAgYnkgSGVpbnogTWF1ZWxzaGFnZW4gICgxOC8wMS8yMDAxKVxuIjsKLXN0YXRp YyBjaGFyICpsdm1fc2hvcnRfdmVyc2lvbiA9ICJ2ZXJzaW9uIDAuOS4xX2JldGEyICgxOC8wMS8y MDAxKSI7Ci0KLSNkZWZpbmUgTUFKT1JfTlIJTFZNX0JMS19NQUpPUgotI2RlZmluZQlERVZJQ0Vf T0ZGKGRldmljZSkKKyNkZWZpbmUgTUFKT1JfTlIgTFZNX0JMS19NQUpPUgorI2RlZmluZSBERVZJ Q0VfT0ZGKGRldmljZSkKKyNkZWZpbmUgTE9DQUxfRU5EX1JFUVVFU1QKIAogLyogbHZtX2RvX2x2 X2NyZWF0ZSBjYWxscyBmc3luY19kZXZfbG9ja2ZzKCkvdW5sb2NrZnMoKSAqLwogLyogI2RlZmlu ZQlMVk1fVkZTX0VOSEFOQ0VNRU5UICovCiAKICNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KLSNp bmNsdWRlIDxsaW51eC92ZXJzaW9uLmg+CiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+Ci0KICNp bmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KICNpbmNsdWRlIDxsaW51eC92bWFsbG9jLmg+CisKICNp bmNsdWRlIDxsaW51eC9zbGFiLmg+CiAjaW5jbHVkZSA8bGludXgvaW5pdC5oPgogCkBAIC0xODAs NiArMjI0LDggQEAKICNpbmNsdWRlIDxsaW51eC9ibGtkZXYuaD4KICNpbmNsdWRlIDxsaW51eC9n ZW5oZC5oPgogI2luY2x1ZGUgPGxpbnV4L2xvY2tzLmg+CisKKwogI2luY2x1ZGUgPGxpbnV4L3Nt cF9sb2NrLmg+CiAjaW5jbHVkZSA8YXNtL2lvY3RsLmg+CiAjaW5jbHVkZSA8YXNtL3NlZ21lbnQu aD4KQEAgLTE5NSw3ICsyNDEsNyBAQAogI2luY2x1ZGUgPGxpbnV4L2Vycm5vLmg+CiAjaW5jbHVk ZSA8bGludXgvbHZtLmg+CiAKLSNpbmNsdWRlICJsdm0tc25hcC5oIgorI2luY2x1ZGUgImx2bS1p bnRlcm5hbC5oIgogCiAjZGVmaW5lCUxWTV9DT1JSRUNUX1JFQURfQUhFQUQoIGEpIFwKICAgIGlm ICAgICAgKCBhIDwgTFZNX01JTl9SRUFEX0FIRUFEIHx8IFwKQEAgLTIwNSwyNCArMjUxLDYgQEAK ICMgIGRlZmluZSBXUklURUEgV1JJVEUKICNlbmRpZgogCi0vKiBkZWJ1ZyBtYWNyb3MgKi8KLSNp ZmRlZiBERUJVR19JT0NUTAotI2RlZmluZSBQX0lPQ1RMKGZtdCwgYXJncy4uLikgcHJpbnRrKEtF Uk5fREVCVUcgImx2bSBpb2N0bDogIiBmbXQsICMjIGFyZ3MpCi0jZWxzZQotI2RlZmluZSBQX0lP Q1RMKGZtdCwgYXJncy4uLikKLSNlbmRpZgotCi0jaWZkZWYgREVCVUdfTUFQCi0jZGVmaW5lIFBf TUFQKGZtdCwgYXJncy4uLikgcHJpbnRrKEtFUk5fREVCVUcgImx2bSBtYXA6ICIgZm10LCAjIyBh cmdzKQotI2Vsc2UKLSNkZWZpbmUgUF9NQVAoZm10LCBhcmdzLi4uKQotI2VuZGlmCi0KLSNpZmRl ZiBERUJVR19LRlJFRQotI2RlZmluZSBQX0tGUkVFKGZtdCwgYXJncy4uLikgcHJpbnRrKEtFUk5f REVCVUcgImx2bSBrZnJlZTogIiBmbXQsICMjIGFyZ3MpCi0jZWxzZQotI2RlZmluZSBQX0tGUkVF KGZtdCwgYXJncy4uLikKLSNlbmRpZgogCiAvKgogICogRXh0ZXJuYWwgZnVuY3Rpb24gcHJvdG90 eXBlcwpAQCAtMjMyLDI3ICsyNjAsMTQgQEAKIHN0YXRpYyBpbnQgbHZtX2Jsa19pb2N0bChzdHJ1 Y3QgaW5vZGUgKiwgc3RydWN0IGZpbGUgKiwgdWludCwgdWxvbmcpOwogc3RhdGljIGludCBsdm1f YmxrX29wZW4oc3RydWN0IGlub2RlICosIHN0cnVjdCBmaWxlICopOwogCi1zdGF0aWMgaW50IGx2 bV9jaHJfb3BlbihzdHJ1Y3QgaW5vZGUgKiwgc3RydWN0IGZpbGUgKik7Ci0KLXN0YXRpYyBpbnQg bHZtX2Nocl9jbG9zZShzdHJ1Y3QgaW5vZGUgKiwgc3RydWN0IGZpbGUgKik7CiBzdGF0aWMgaW50 IGx2bV9ibGtfY2xvc2Uoc3RydWN0IGlub2RlICosIHN0cnVjdCBmaWxlICopOworc3RhdGljIGlu dCBsdm1fZ2V0X3NuYXBzaG90X3VzZV9yYXRlKGx2X3QgKmx2X3B0ciwgdm9pZCAqYXJnKTsKIHN0 YXRpYyBpbnQgbHZtX3VzZXJfYm1hcChzdHJ1Y3QgaW5vZGUgKiwgc3RydWN0IGx2X2JtYXAgKik7 CiAKK3N0YXRpYyBpbnQgbHZtX2Nocl9vcGVuKHN0cnVjdCBpbm9kZSAqLCBzdHJ1Y3QgZmlsZSAq KTsKK3N0YXRpYyBpbnQgbHZtX2Nocl9jbG9zZShzdHJ1Y3QgaW5vZGUgKiwgc3RydWN0IGZpbGUg Kik7CiBzdGF0aWMgaW50IGx2bV9jaHJfaW9jdGwoc3RydWN0IGlub2RlICosIHN0cnVjdCBmaWxl ICosIHVpbnQsIHVsb25nKTsKIAotaW50IGx2bV9wcm9jX3JlYWRfdmdfaW5mbyhjaGFyICosIGNo YXIgKiosIG9mZl90LCBpbnQsIGludCAqLCB2b2lkICopOwotaW50IGx2bV9wcm9jX3JlYWRfbHZf aW5mbyhjaGFyICosIGNoYXIgKiosIG9mZl90LCBpbnQsIGludCAqLCB2b2lkICopOwotaW50IGx2 bV9wcm9jX3JlYWRfcHZfaW5mbyhjaGFyICosIGNoYXIgKiosIG9mZl90LCBpbnQsIGludCAqLCB2 b2lkICopOwotc3RhdGljIGludCBsdm1fcHJvY19nZXRfZ2xvYmFsX2luZm8oY2hhciAqLCBjaGFy ICoqLCBvZmZfdCwgaW50LCBpbnQgKiwgdm9pZCAqKTsKLQotdm9pZCBsdm1fZG9fY3JlYXRlX2Rl dmZzX2VudHJ5X29mX3ZnICggdmdfdCAqKTsKLQotdm9pZCBsdm1fZG9fY3JlYXRlX3Byb2NfZW50 cnlfb2ZfdmcgKCB2Z190ICopOwotdm9pZCBsdm1fZG9fcmVtb3ZlX3Byb2NfZW50cnlfb2Zfdmcg KCB2Z190ICopOwotdm9pZCBsdm1fZG9fY3JlYXRlX3Byb2NfZW50cnlfb2ZfbHYgKCB2Z190ICos IGx2X3QgKik7Ci12b2lkIGx2bV9kb19yZW1vdmVfcHJvY19lbnRyeV9vZl9sdiAoIHZnX3QgKiwg bHZfdCAqKTsKLXZvaWQgbHZtX2RvX2NyZWF0ZV9wcm9jX2VudHJ5X29mX3B2ICggdmdfdCAqLCBw dl90ICopOwotdm9pZCBsdm1fZG9fcmVtb3ZlX3Byb2NfZW50cnlfb2ZfcHYgKCB2Z190ICosIHB2 X3QgKik7CiAKIC8qIEVuZCBleHRlcm5hbCBmdW5jdGlvbiBwcm90b3R5cGVzICovCiAKQEAgLTI4 NCwzMyArMjk5LDM4IEBACiAKIHN0YXRpYyBpbnQgbHZtX2RvX3B2X2NoYW5nZSh2Z190Kiwgdm9p ZCopOwogc3RhdGljIGludCBsdm1fZG9fcHZfc3RhdHVzKHZnX3QgKiwgdm9pZCAqKTsKK3N0YXRp YyBpbnQgbHZtX2RvX3B2X2ZsdXNoKHZvaWQgKik7CiAKLXN0YXRpYyBpbnQgbHZtX2RvX3ZnX2Ny ZWF0ZShpbnQsIHZvaWQgKik7CitzdGF0aWMgaW50IGx2bV9kb192Z19jcmVhdGUodm9pZCAqLCBp bnQgbWlub3IpOwogc3RhdGljIGludCBsdm1fZG9fdmdfZXh0ZW5kKHZnX3QgKiwgdm9pZCAqKTsK IHN0YXRpYyBpbnQgbHZtX2RvX3ZnX3JlZHVjZSh2Z190ICosIHZvaWQgKik7CiBzdGF0aWMgaW50 IGx2bV9kb192Z19yZW5hbWUodmdfdCAqLCB2b2lkICopOwogc3RhdGljIGludCBsdm1fZG9fdmdf cmVtb3ZlKGludCk7CiBzdGF0aWMgdm9pZCBsdm1fZ2VuaW5pdChzdHJ1Y3QgZ2VuZGlzayAqKTsK LXN0YXRpYyBjaGFyICpsdm1fc2hvd191dWlkICggY2hhciAqKTsKK3N0YXRpYyB2b2lkIF9fdXBk YXRlX2hhcmRibG9ja3NpemUobHZfdCAqbHYpOworCisKICNpZmRlZiBMVk1fSERfTkFNRQogdm9p ZCBsdm1faGRfbmFtZShjaGFyICosIGludCk7CiAjZW5kaWYKIC8qIEVORCBJbnRlcm5hbCBmdW5j dGlvbiBwcm90b3R5cGVzICovCiAKIAotLyogdm9sdW1lIGdyb3VwIGRlc2NyaXB0b3IgYXJlYSBw b2ludGVycyAqLwotc3RhdGljIHZnX3QgKnZnW0FCU19NQVhfVkddOworLyogdmFyaWFibGVzICov CitjaGFyICpsdm1fdmVyc2lvbiA9ICJMVk0gdmVyc2lvbiAiTFZNX1JFTEVBU0VfTkFNRSIgIGJ5 IEhlaW56IE1hdWVsc2hhZ2VuICAiCisgICAgICAgICAgICAgICAgICAgICIoIkxWTV9SRUxFQVNF X0RBVEUiKVxuIjsKK2NoYXIgKmx2bV9zaG9ydF92ZXJzaW9uID0gInZlcnNpb24gIkxWTV9SRUxF QVNFX05BTUUiICgiTFZNX1JFTEVBU0VfREFURSIpIjsKK3VzaG9ydCBsdm1faW9wX3ZlcnNpb24g PSBMVk1fRFJJVkVSX0lPUF9WRVJTSU9OOworaW50IGxvYWR0aW1lID0gMDsKK2NvbnN0IGNoYXIg KmNvbnN0IGx2bV9uYW1lID0gTFZNX05BTUU7CiAKLXN0YXRpYyBkZXZmc19oYW5kbGVfdCBsdm1f ZGV2ZnNfaGFuZGxlOwotc3RhdGljIGRldmZzX2hhbmRsZV90IHZnX2RldmZzX2hhbmRsZVtNQVhf VkddOwotc3RhdGljIGRldmZzX2hhbmRsZV90IGNoX2RldmZzX2hhbmRsZVtNQVhfVkddOwotc3Rh dGljIGRldmZzX2hhbmRsZV90IGx2X2RldmZzX2hhbmRsZVtNQVhfTFZdOworCisvKiB2b2x1bWUg Z3JvdXAgZGVzY3JpcHRvciBhcmVhIHBvaW50ZXJzICovCit2Z190ICp2Z1tBQlNfTUFYX1ZHXTsK IAogc3RhdGljIHB2X3QgKnB2cCA9IE5VTEw7CiBzdGF0aWMgbHZfdCAqbHZwID0gTlVMTDsKIHN0 YXRpYyBwZV90ICpwZXAgPSBOVUxMOwotc3RhdGljIHBlX3QgKnBlcDEgPSBOVUxMOwotc3RhdGlj IGNoYXIgKmJhc2VuYW1lID0gTlVMTDsKIAogCiAvKiBtYXAgZnJvbSBibG9jayBtaW5vciBudW1i ZXIgdG8gVkcgYW5kIExWIG51bWJlcnMgKi8KQEAgLTMyMyw3ICszNDMsNiBAQAogCiAvKiBSZXF1 ZXN0IHN0cnVjdHVyZXMgKGx2bV9jaHJfaW9jdGwoKSkgKi8KIHN0YXRpYyBwdl9jaGFuZ2VfcmVx X3QgcHZfY2hhbmdlX3JlcTsKLXN0YXRpYyBwdl9mbHVzaF9yZXFfdCBwdl9mbHVzaF9yZXE7CiBz dGF0aWMgcHZfc3RhdHVzX3JlcV90IHB2X3N0YXR1c19yZXE7CiBzdGF0aWMgcGVfbG9ja19yZXFf dCBwZV9sb2NrX3JlcTsKIHN0YXRpYyBsZV9yZW1hcF9yZXFfdCBsZV9yZW1hcF9yZXE7CkBAIC0z MzUsMzIgKzM1NCwyNyBAQAogCiBzdGF0aWMgY2hhciBwdl9uYW1lW05BTUVfTEVOXTsKIC8qIHN0 YXRpYyBjaGFyIHJvb3R2Z1tOQU1FX0xFTl0gPSB7IDAsIH07ICovCi1jb25zdCBjaGFyICpjb25z dCBsdm1fbmFtZSA9IExWTV9OQU1FOwogc3RhdGljIGludCBsb2NrID0gMDsKLXN0YXRpYyBpbnQg bG9hZHRpbWUgPSAwOworc3RhdGljIGludCBfbG9ja19vcGVuX2NvdW50ID0gMDsKIHN0YXRpYyB1 aW50IHZnX2NvdW50ID0gMDsKIHN0YXRpYyBsb25nIGx2bV9jaHJfb3Blbl9jb3VudCA9IDA7Ci1z dGF0aWMgdXNob3J0IGx2bV9pb3BfdmVyc2lvbiA9IExWTV9EUklWRVJfSU9QX1ZFUlNJT047CiBz dGF0aWMgREVDTEFSRV9XQUlUX1FVRVVFX0hFQUQobHZtX3dhaXQpOwotc3RhdGljIERFQ0xBUkVf V0FJVF9RVUVVRV9IRUFEKGx2bV9tYXBfd2FpdCk7CiAKIHN0YXRpYyBzcGlubG9ja190IGx2bV9s b2NrID0gU1BJTl9MT0NLX1VOTE9DS0VEOwogc3RhdGljIHNwaW5sb2NrX3QgbHZtX3NuYXBzaG90 X2xvY2sgPSBTUElOX0xPQ0tfVU5MT0NLRUQ7CiAKLXN0YXRpYyBzdHJ1Y3QgcHJvY19kaXJfZW50 cnkgKmx2bV9wcm9jX2RpciA9IE5VTEw7Ci1zdGF0aWMgc3RydWN0IHByb2NfZGlyX2VudHJ5ICps dm1fcHJvY192Z19zdWJkaXIgPSBOVUxMOwotc3RydWN0IHByb2NfZGlyX2VudHJ5ICpwZGUgPSBO VUxMOworc3RhdGljIHN0cnVjdCBidWZmZXJfaGVhZCAqX3BlX3JlcXVlc3RzOworc3RhdGljIHN0 cnVjdCBzZW1hcGhvcmUgX3BlX2xvY2s7CiAKLXN0YXRpYyBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25z IGx2bV9jaHJfZm9wcyA9Ci17CisKK3N0cnVjdCBmaWxlX29wZXJhdGlvbnMgbHZtX2Nocl9mb3Bz ID0gewogCW9wZW46CQlsdm1fY2hyX29wZW4sCiAJcmVsZWFzZToJbHZtX2Nocl9jbG9zZSwKIAlp b2N0bDoJCWx2bV9jaHJfaW9jdGwsCiB9OwogCi0KIC8qIGJsb2NrIGRldmljZSBvcGVyYXRpb25z IHN0cnVjdHVyZSBuZWVkZWQgZm9yIDIuMy4zOD8gYW5kIGFib3ZlICovCi1zdGF0aWMgc3RydWN0 IGJsb2NrX2RldmljZV9vcGVyYXRpb25zIGx2bV9ibGtfZG9wcyA9CitzdHJ1Y3QgYmxvY2tfZGV2 aWNlX29wZXJhdGlvbnMgbHZtX2Jsa19kb3BzID0KIHsKIAlvcGVuOiAJCWx2bV9ibGtfb3BlbiwK IAlyZWxlYXNlOglsdm1fYmxrX2Nsb3NlLApAQCAtMzcwLDEwICszODQsMTAgQEAKIAogLyogZ2Vu ZGlzayBzdHJ1Y3R1cmVzICovCiBzdGF0aWMgc3RydWN0IGhkX3N0cnVjdCBsdm1faGRfc3RydWN0 W01BWF9MVl07Ci1zdGF0aWMgaW50IGx2bV9ibG9ja3NpemVzW01BWF9MVl0gPQotezAsfTsKLXN0 YXRpYyBpbnQgbHZtX3NpemVbTUFYX0xWXSA9Ci17MCx9Oworc3RhdGljIGludCBsdm1fYmxvY2tz aXplc1tNQVhfTFZdOworc3RhdGljIGludCBsdm1faGFyZHNlY3RzaXplc1tNQVhfTFZdOworc3Rh dGljIGludCBsdm1fc2l6ZVtNQVhfTFZdOworCiBzdGF0aWMgc3RydWN0IGdlbmRpc2sgbHZtX2dl bmRpc2sgPQogewogCU1BSk9SX05SLAkJLyogbWFqb3IgIyAqLwpAQCAtNDA4LDE4ICs0MjIsNyBA QAogCQlyZXR1cm4gLUVJTzsKIAl9CiAKLQlsdm1fZGV2ZnNfaGFuZGxlID0gZGV2ZnNfcmVnaXN0 ZXIoCi0JCTAgLCAibHZtIiwgMCwgMCwgTFZNX0NIQVJfTUFKT1IsCi0JCVNfSUZDSFIgfCBTX0lS VVNSIHwgU19JV1VTUiB8IFNfSVJHUlAsCi0JCSZsdm1fY2hyX2ZvcHMsIE5VTEwpOwotCi0JbHZt X3Byb2NfZGlyID0gY3JlYXRlX3Byb2NfZW50cnkgKExWTV9ESVIsIFNfSUZESVIsICZwcm9jX3Jv b3QpOwotCWlmIChsdm1fcHJvY19kaXIgIT0gTlVMTCkgewotCQlsdm1fcHJvY192Z19zdWJkaXIg PSBjcmVhdGVfcHJvY19lbnRyeSAoTFZNX1ZHX1NVQkRJUiwgU19JRkRJUiwgbHZtX3Byb2NfZGly KTsKLQkJcGRlID0gY3JlYXRlX3Byb2NfZW50cnkoTFZNX0dMT0JBTCwgU19JRlJFRywgbHZtX3By b2NfZGlyKTsKLQkJaWYgKCBwZGUgIT0gTlVMTCkgcGRlLT5yZWFkX3Byb2MgPSAmbHZtX3Byb2Nf Z2V0X2dsb2JhbF9pbmZvOwotCX0KLQorCWx2bV9pbml0X2ZzKCk7CiAJbHZtX2luaXRfdmFycygp OwogCWx2bV9nZW5pbml0KCZsdm1fZ2VuZGlzayk7CiAKQEAgLTQ0NSw2ICs0NDgsMTAgQEAKIAli bGtfcXVldWVfbWFrZV9yZXF1ZXN0KEJMS19ERUZBVUxUX1FVRVVFKE1BSk9SX05SKSwgbHZtX21h a2VfcmVxdWVzdF9mbik7CiAKIAorCS8qIGluaXRpYWxpc2UgdGhlIHBlIGxvY2sgKi8KKwlwZV9s b2NrX3JlcS5sb2NrID0gVU5MT0NLX1BFOworCWluaXRfTVVURVgoJl9wZV9sb2NrKTsKKwogCS8q IG9wdGlvbmFsIHJlYWQgcm9vdCBWR0RBICovCiAvKgogICAgaWYgKCAqcm9vdHZnICE9IDApIHZn X3JlYWRfd2l0aF9wdl9hbmRfbHYgKCByb290dmcsICZ2Zyk7CkBAIC00NjMsMTYgKzQ3MCwxNCBA QAogCXJldHVybiAwOwogfSAvKiBsdm1faW5pdCgpICovCiAKLQogLyoKICAqIGNsZWFudXAuLi4K ICAqLworCiBzdGF0aWMgdm9pZCBsdm1fY2xlYW51cCh2b2lkKQogewogCXN0cnVjdCBnZW5kaXNr ICpnZW5kaXNrX3B0ciA9IE5VTEwsICpnZW5kaXNrX3B0cl9wcmV2ID0gTlVMTDsKIAotCWRldmZz X3VucmVnaXN0ZXIgKGx2bV9kZXZmc19oYW5kbGUpOwotCiAJaWYgKHVucmVnaXN0ZXJfY2hyZGV2 KExWTV9DSEFSX01BSk9SLCBsdm1fbmFtZSkgPCAwKSB7CiAJCXByaW50ayhLRVJOX0VSUiAiJXMg LS0gdW5yZWdpc3Rlcl9jaHJkZXYgZmFpbGVkXG4iLCBsdm1fbmFtZSk7CiAJfQpAQCAtNDgxLDYg KzQ4Niw3IEBACiAJfQogCiAKKwogCWdlbmRpc2tfcHRyID0gZ2VuZGlza19wdHJfcHJldiA9IGdl bmRpc2tfaGVhZDsKIAl3aGlsZSAoZ2VuZGlza19wdHIgIT0gTlVMTCkgewogCQlpZiAoZ2VuZGlz a19wdHIgPT0gJmx2bV9nZW5kaXNrKQpAQCAtNDk2LDI1ICs1MDIsMjMgQEAKIAlibGtzaXplX3Np emVbTUFKT1JfTlJdID0gTlVMTDsKIAloYXJkc2VjdF9zaXplW01BSk9SX05SXSA9IE5VTEw7CiAK LQlyZW1vdmVfcHJvY19lbnRyeShMVk1fR0xPQkFMLCBsdm1fcHJvY19kaXIpOwotCXJlbW92ZV9w cm9jX2VudHJ5KExWTV9WR19TVUJESVIsIGx2bV9wcm9jX2Rpcik7Ci0JcmVtb3ZlX3Byb2NfZW50 cnkoTFZNX0RJUiwgJnByb2Nfcm9vdCk7Ci0KICNpZmRlZiBMVk1fSERfTkFNRQogCS8qIHJlZmVy ZW5jZSBmcm9tIGxpbnV4L2RyaXZlcnMvYmxvY2svZ2VuaGQuYyAqLwogCWx2bV9oZF9uYW1lX3B0 ciA9IE5VTEw7CiAjZW5kaWYKIAorCS8qIHVucmVnaXN0ZXIgd2l0aCBwcm9jZnMgYW5kIGRldmZz ICovCisJbHZtX2Zpbl9mcygpOworCiAJcHJpbnRrKEtFUk5fSU5GTyAiJXMgLS0gTW9kdWxlIHN1 Y2Nlc3NmdWxseSBkZWFjdGl2YXRlZFxuIiwgbHZtX25hbWUpOwogCiAJcmV0dXJuOwogfQkvKiBs dm1fY2xlYW51cCgpICovCiAKLQogLyoKICAqIHN1cHBvcnQgZnVuY3Rpb24gdG8gaW5pdGlhbGl6 ZSBsdm0gdmFyaWFibGVzCiAgKi8KLXZvaWQgX19pbml0IGx2bV9pbml0X3ZhcnModm9pZCkKK3N0 YXRpYyB2b2lkIF9faW5pdCBsdm1faW5pdF92YXJzKHZvaWQpCiB7CiAJaW50IHY7CiAKQEAgLTU1 MCwxNiArNTU0LDEyIEBACiAvKgogICogY2hhcmFjdGVyIGRldmljZSBvcGVuIHJvdXRpbmUKICAq Lwotc3RhdGljIGludCBsdm1fY2hyX29wZW4oc3RydWN0IGlub2RlICppbm9kZSwKLQkJCXN0cnVj dCBmaWxlICpmaWxlKQorc3RhdGljIGludCBsdm1fY2hyX29wZW4oc3RydWN0IGlub2RlICppbm9k ZSwgc3RydWN0IGZpbGUgKmZpbGUpCiB7CiAJaW50IG1pbm9yID0gTUlOT1IoaW5vZGUtPmlfcmRl dik7CiAKLSNpZmRlZiBERUJVRwotCXByaW50ayhLRVJOX0RFQlVHCi0JICIlcyAtLSBsdm1fY2hy X29wZW4gTUlOT1I6ICVkICBWRyM6ICVkICBtb2RlOiAweCVYICBsb2NrOiAlZFxuIiwKLQkgICAg ICAgbHZtX25hbWUsIG1pbm9yLCBWR19DSFIobWlub3IpLCBmaWxlLT5mX21vZGUsIGxvY2spOwot I2VuZGlmCisJUF9ERVYoIiVzIC0tIGx2bV9jaHJfb3BlbiBNSU5PUjogJWQgIFZHIzogJWQgIG1v ZGU6IDB4JVggIGxvY2s6ICVkXG4iLAorCSAgICAgIGx2bV9uYW1lLCBtaW5vciwgVkdfQ0hSKG1p bm9yKSwgZmlsZS0+Zl9tb2RlLCBsb2NrKTsKIAogCS8qIHN1cGVyIHVzZXIgdmFsaWRhdGlvbiAq LwogCWlmICghY2FwYWJsZShDQVBfU1lTX0FETUlOKSkgcmV0dXJuIC1FQUNDRVM7CkBAIC01Njcs NiArNTY3LDExIEBACiAJLyogR3JvdXAgc3BlY2lhbCBmaWxlIG9wZW4gKi8KIAlpZiAoVkdfQ0hS KG1pbm9yKSA+IE1BWF9WRykgcmV0dXJuIC1FTlhJTzsKIAorCXNwaW5fbG9jaygmbHZtX2xvY2sp OworCWlmKGxvY2sgPT0gY3VycmVudC0+cGlkKQorCQlfbG9ja19vcGVuX2NvdW50Kys7CisJc3Bp bl91bmxvY2soJmx2bV9sb2NrKTsKKwogCWx2bV9jaHJfb3Blbl9jb3VudCsrOwogCiAJTU9EX0lO Q19VU0VfQ09VTlQ7CkBAIC01ODMsNyArNTg4LDcgQEAKICAqCiAgKi8KIHN0YXRpYyBpbnQgbHZt X2Nocl9pb2N0bChzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSwKLQkJCSB1 aW50IGNvbW1hbmQsIHVsb25nIGEpCisJCSAgdWludCBjb21tYW5kLCB1bG9uZyBhKQogewogCWlu dCBtaW5vciA9IE1JTk9SKGlub2RlLT5pX3JkZXYpOwogCXVpbnQgZXh0ZW5kYWJsZSwgbCwgdjsK QEAgLTY0NCw5ICs2NDksMTMgQEAKIAkJICAgcGh5c2ljYWwgdm9sdW1lIChtb3ZlJ3MgZG9uZSBp biB1c2VyIHNwYWNlJ3MgcHZtb3ZlKSAqLwogCQlyZXR1cm4gbHZtX2RvX3BlX2xvY2tfdW5sb2Nr KHZnX3B0cixhcmcpOwogCi0JY2FzZSBWR19DUkVBVEU6CisJY2FzZSBWR19DUkVBVEVfT0xEOgog CQkvKiBjcmVhdGUgYSBWR0RBICovCi0JCXJldHVybiBsdm1fZG9fdmdfY3JlYXRlKG1pbm9yLCBh cmcpOworCQlyZXR1cm4gbHZtX2RvX3ZnX2NyZWF0ZShhcmcsIG1pbm9yKTsKKworCWNhc2UgVkdf Q1JFQVRFOgorCSAgICAgICAgLyogY3JlYXRlIGEgVkdEQSwgYXNzdW1lIFZHIG51bWJlciBpcyBm aWxsZWQgaW4gKi8KKwkJcmV0dXJuIGx2bV9kb192Z19jcmVhdGUoYXJnLCAtMSk7CiAKIAljYXNl IFZHX0VYVEVORDoKIAkJLyogZXh0ZW5kIGEgdm9sdW1lIGdyb3VwICovCkBAIC02OTcsNyArNzA2 LDcgQEAKIAogCiAJY2FzZSBWR19TVEFUVVNfR0VUX05BTUVMSVNUOgotCQkvKiBnZXQgdm9sdW1l IGdyb3VwIGNvdW50ICovCisJCS8qIGdldCB2b2x1bWUgZ3JvdXAgbmFtZXMgKi8KIAkJZm9yIChs ID0gdiA9IDA7IHYgPCBBQlNfTUFYX1ZHOyB2KyspIHsKIAkJCWlmICh2Z1t2XSAhPSBOVUxMKSB7 CiAJCQkJaWYgKGNvcHlfdG9fdXNlcihhcmcgKyBsICogTkFNRV9MRU4sCkBAIC03NTIsNiArNzYx LDcgQEAKIAogCiAJY2FzZSBMVl9TVEFUVVNfQllERVY6CisJCS8qIGdldCBzdGF0dXMgb2YgYSBs b2dpY2FsIHZvbHVtZSBieSBkZXZpY2UgKi8KIAkJcmV0dXJuIGx2bV9kb19sdl9zdGF0dXNfYnlk ZXYodmdfcHRyLCBhcmcpOwogCiAKQEAgLTc2NywxOCArNzc3LDEyIEBACiAKIAljYXNlIFBWX0ZM VVNIOgogCQkvKiBwaHlzaWNhbCB2b2x1bWUgYnVmZmVyIGZsdXNoL2ludmFsaWRhdGUgKi8KLQkJ aWYgKGNvcHlfZnJvbV91c2VyKCZwdl9mbHVzaF9yZXEsIGFyZywKLQkJCQkgICBzaXplb2YocHZf Zmx1c2hfcmVxKSkgIT0gMCkKLQkJCXJldHVybiAtRUZBVUxUOwotCi0JCWZzeW5jX2Rldihwdl9m bHVzaF9yZXEucHZfZGV2KTsKLQkJaW52YWxpZGF0ZV9idWZmZXJzKHB2X2ZsdXNoX3JlcS5wdl9k ZXYpOwotCQlyZXR1cm4gMDsKKwkJcmV0dXJuIGx2bV9kb19wdl9mbHVzaChhcmcpOwogCiAKIAlk ZWZhdWx0OgogCQlwcmludGsoS0VSTl9XQVJOSU5HCi0JCSAgICAgICAiJXMgLS0gbHZtX2Nocl9p b2N0bDogdW5rbm93biBjb21tYW5kICV4XG4iLAorCQkgICAgICAgIiVzIC0tIGx2bV9jaHJfaW9j dGw6IHVua25vd24gY29tbWFuZCAweCV4XG4iLAogCQkgICAgICAgbHZtX25hbWUsIGNvbW1hbmQp OwogCQlyZXR1cm4gLUVJTlZBTDsKIAl9CkBAIC03OTAsNyArNzk0LDcgQEAKIC8qCiAgKiBjaGFy YWN0ZXIgZGV2aWNlIGNsb3NlIHJvdXRpbmUKICAqLwotc3RhdGljIGludCBsdm1fY2hyX2Nsb3Nl KHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxlKQoraW50IGx2bV9jaHJfY2xv c2Uoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbGUpCiB7CiAjaWZkZWYgREVC VUcKIAlpbnQgbWlub3IgPSBNSU5PUihpbm9kZS0+aV9yZGV2KTsKQEAgLTgwNiwxMCArODEwLDE2 IEBACiAjZW5kaWYKIAogCWlmIChsdm1fY2hyX29wZW5fY291bnQgPiAwKSBsdm1fY2hyX29wZW5f Y291bnQtLTsKLQlpZiAobG9jayA9PSBjdXJyZW50LT5waWQpIHsKLQkJbG9jayA9IDA7CS8qIHJl bGVhc2UgbG9jayAqLwotCQl3YWtlX3VwX2ludGVycnVwdGlibGUoJmx2bV93YWl0KTsKKworCXNw aW5fbG9jaygmbHZtX2xvY2spOworCWlmKGxvY2sgPT0gY3VycmVudC0+cGlkKSB7CisJCWlmKCFf bG9ja19vcGVuX2NvdW50KSB7CisJCQlsb2NrID0gMDsKKwkJCXdha2VfdXBfaW50ZXJydXB0aWJs ZSgmbHZtX3dhaXQpOworCQl9IGVsc2UKKwkJCV9sb2NrX29wZW5fY291bnQtLTsKIAl9CisJc3Bp bl91bmxvY2soJmx2bV9sb2NrKTsKIAogCU1PRF9ERUNfVVNFX0NPVU5UOwogCkBAIC04MzMsMTEg Kzg0Myw4IEBACiAJbHZfdCAqbHZfcHRyOwogCXZnX3QgKnZnX3B0ciA9IHZnW1ZHX0JMSyhtaW5v cildOwogCi0jaWZkZWYgREVCVUdfTFZNX0JMS19PUEVOCi0JcHJpbnRrKEtFUk5fREVCVUcKLQkg ICIlcyAtLSBsdm1fYmxrX29wZW4gTUlOT1I6ICVkICBWRyM6ICVkICBMViM6ICVkICBtb2RlOiAw eCVYXG4iLAotCSAgICBsdm1fbmFtZSwgbWlub3IsIFZHX0JMSyhtaW5vciksIExWX0JMSyhtaW5v ciksIGZpbGUtPmZfbW9kZSk7Ci0jZW5kaWYKKwlQX0RFVigiJXMgLS0gbHZtX2Jsa19vcGVuIE1J Tk9SOiAlZCAgVkcjOiAlZCAgTFYjOiAlZCAgbW9kZTogMHglWFxuIiwKKwkgICAgICBsdm1fbmFt ZSwgbWlub3IsIFZHX0JMSyhtaW5vciksIExWX0JMSyhtaW5vciksIGZpbGUtPmZfbW9kZSk7CiAK ICNpZmRlZiBMVk1fVE9UQUxfUkVTRVQKIAlpZiAobHZtX3Jlc2V0X3NwaW5kb3duID4gMCkKQEAg LTg1MCwxMiArODU3LDE2IEBACiAJICAgIExWX0JMSyhtaW5vcikgPj0gMCAmJgogCSAgICBMVl9C TEsobWlub3IpIDwgdmdfcHRyLT5sdl9tYXgpIHsKIAotCQkvKiBDaGVjayBwYXJhbGxlbCBMViBz cGluZG93biAoTFYgcmVtb3ZlKSAqLworCSAgICAgICAgLyogQ2hlY2sgcGFyYWxsZWwgTFYgc3Bp bmRvd24gKExWIHJlbW92ZSkgKi8KIAkJaWYgKGx2X3B0ci0+bHZfc3RhdHVzICYgTFZfU1BJTkRP V04pIHJldHVybiAtRVBFUk07CiAKIAkJLyogQ2hlY2sgaW5hY3RpdmUgTFYgYW5kIG9wZW4gZm9y IHJlYWQvd3JpdGUgKi8KLQkJaWYgKCEobHZfcHRyLT5sdl9zdGF0dXMgJiBMVl9BQ1RJVkUpKQot CQkJcmV0dXJuIC1FUEVSTTsKKwkJLyogV2UgbmVlZCB0byBiZSBhYmxlIHRvICJyZWFkIiBhbiBp bmFjdGl2ZSBMVgorCQkgICB0byByZS1hY3RpdmF0ZSBpdCBhZ2FpbiAqLworCQlpZiAoKGZpbGUt PmZfbW9kZSAmIEZNT0RFX1dSSVRFKSAmJgorCQkgICAgKCEobHZfcHRyLT5sdl9zdGF0dXMgJiBM Vl9BQ1RJVkUpKSkKKwkJICAgIHJldHVybiAtRVBFUk07CisKIAkJaWYgKCEobHZfcHRyLT5sdl9h Y2Nlc3MgJiBMVl9XUklURSkgJiYKIAkJICAgIChmaWxlLT5mX21vZGUgJiBGTU9ERV9XUklURSkp CiAJCQlyZXR1cm4gLUVBQ0NFUzsKQEAgLTg2NywxMiArODc4LDcgQEAKIAogCQlNT0RfSU5DX1VT RV9DT1VOVDsKIAotI2lmZGVmIERFQlVHX0xWTV9CTEtfT1BFTgotCQlwcmludGsoS0VSTl9ERUJV RwotCQkgICAgICAgIiVzIC0tIGx2bV9ibGtfb3BlbiBNSU5PUjogJWQgIFZHIzogJWQgIExWIzog JWQgIHNpemU6ICVkXG4iLAotCQkgICAgICAgbHZtX25hbWUsIG1pbm9yLCBWR19CTEsobWlub3Ip LCBMVl9CTEsobWlub3IpLAotCQkgICAgICAgbHZfcHRyLT5sdl9zaXplKTsKLSNlbmRpZgorCQlQ X0RFVigiJXMgLS0gT1BFTiBPSywgTFYgc2l6ZSAlZFxuIiwgbHZtX25hbWUsIGx2X3B0ci0+bHZf c2l6ZSk7CiAKIAkJcmV0dXJuIDA7CiAJfQpAQCAtODkyLDcgKzg5OCw3IEBACiAJdm9pZCAqYXJn ID0gKHZvaWQgKikgYTsKIAlzdHJ1Y3QgaGRfZ2VvbWV0cnkgKmhkID0gKHN0cnVjdCBoZF9nZW9t ZXRyeSAqKSBhOwogCi0JUF9JT0NUTCgiJXMgLS0gbHZtX2Jsa19pb2N0bCBNSU5PUjogJWQgIGNv bW1hbmQ6IDB4JVggIGFyZzogJVggICIKKwlQX0lPQ1RMKCIlcyAtLSBsdm1fYmxrX2lvY3RsIE1J Tk9SOiAlZCAgY29tbWFuZDogMHglWCAgYXJnOiAlbFggICIKIAkJIlZHIzogJWRsICBMViM6ICVk XG4iLAogCQlsdm1fbmFtZSwgbWlub3IsIGNvbW1hbmQsICh1bG9uZykgYXJnLAogCQlWR19CTEso bWlub3IpLCBMVl9CTEsobWlub3IpKTsKQEAgLTkyMiw4ICs5MjgsOCBAQAogCQkvKiBzZXQgcmVh ZCBhaGVhZCBmb3IgYmxvY2sgZGV2aWNlICovCiAJCWlmICghY2FwYWJsZShDQVBfU1lTX0FETUlO KSkgcmV0dXJuIC1FQUNDRVM7CiAKLQkJUF9JT0NUTCgiJXMgLS0gbHZtX2Jsa19pb2N0bCAtLSBC TEtSQVNFVDogJWQgc2VjdG9ycyBmb3IgJTAyWDolMDJYXG4iLAotCQkJbHZtX25hbWUsIChsb25n KSBhcmcsIE1BSk9SKGlub2RlLT5pX3JkZXYpLCBtaW5vcik7CisJCVBfSU9DVEwoIiVzIC0tIGx2 bV9ibGtfaW9jdGwgLS0gQkxLUkFTRVQ6ICVsZCBzZWN0b3JzIGZvciAlc1xuIiwKKwkJCWx2bV9u YW1lLCAobG9uZykgYXJnLCBrZGV2bmFtZShpbm9kZS0+aV9yZGV2KSk7CiAKIAkJaWYgKChsb25n KSBhcmcgPCBMVk1fTUlOX1JFQURfQUhFQUQgfHwKIAkJICAgIChsb25nKSBhcmcgPiBMVk1fTUFY X1JFQURfQUhFQUQpCkBAIC05NjAsMTAgKzk2NiwxMCBAQAogCQkJICAgIGNvcHlfdG9fdXNlcigo bG9uZyAqKSAmaGQtPnN0YXJ0LCAmc3RhcnQsCiAJCQkJCSBzaXplb2Yoc3RhcnQpKSAhPSAwKQog CQkJCXJldHVybiAtRUZBVUxUOwotCQl9CiAKLQkJUF9JT0NUTCgiJXMgLS0gbHZtX2Jsa19pb2N0 bCAtLSBjeWxpbmRlcnM6ICVkXG4iLAotCQkJbHZtX25hbWUsIGx2X3B0ci0+bHZfc2l6ZSAvIGhl YWRzIC8gc2VjdG9ycyk7CisJCQlQX0lPQ1RMKCIlcyAtLSBsdm1fYmxrX2lvY3RsIC0tIGN5bGlu ZGVyczogJWRcbiIsCisJCQkJbHZtX25hbWUsIGN5bGluZGVycyk7CisJCX0KIAkJYnJlYWs7CiAK IApAQCAtOTg3LDYgKzk5MywxMSBAQAogCQlicmVhazsKIAogCWNhc2UgTFZfQk1BUDoKKyAgICAg ICAgICAgICAgICAvKiB0dXJuIGxvZ2ljYWwgYmxvY2sgaW50byAoZGV2X3QsIGJsb2NrKS4gIG5v biBwcml2aWxlZ2VkLiAqLworICAgICAgICAgICAgICAgIC8qIGRvbid0IGJtYXAgYSBzbmFwc2hv dCwgc2luY2UgdGhlIG1hcHBpbmcgY2FuIGNoYW5nZSAqLworCQlpZihsdl9wdHItPmx2X2FjY2Vz cyAmIExWX1NOQVBTSE9UKQorCQkJcmV0dXJuIC1FUEVSTTsKKwogCQkvKiB0dXJuIGxvZ2ljYWwg YmxvY2sgaW50byAoZGV2X3QsIGJsb2NrKS4gbm9uIHByaXZpbGVnZWQuICovCiAJCXJldHVybiBs dm1fdXNlcl9ibWFwKGlub2RlLCAoc3RydWN0IGx2X2JtYXAgKikgYXJnKTsKIAkJYnJlYWs7CkBA IC05OTgsNDAgKzEwMDksMTEgQEAKIAkJYnJlYWs7CiAKIAljYXNlIExWX1NOQVBTSE9UX1VTRV9S QVRFOgotCQlpZiAoIShsdl9wdHItPmx2X2FjY2VzcyAmIExWX1NOQVBTSE9UKSkgcmV0dXJuIC1F UEVSTTsKLQkJewotCQkJbHZfc25hcHNob3RfdXNlX3JhdGVfcmVxX3QJbHZfc25hcHNob3RfdXNl X3JhdGVfcmVxOwotCi0JCQlpZiAoY29weV9mcm9tX3VzZXIoJmx2X3NuYXBzaG90X3VzZV9yYXRl X3JlcSwgYXJnLAotCQkJCQkgICBzaXplb2YobHZfc25hcHNob3RfdXNlX3JhdGVfcmVxX3QpKSkK LQkJCQlyZXR1cm4gLUVGQVVMVDsKLQkJCWlmIChsdl9zbmFwc2hvdF91c2VfcmF0ZV9yZXEucmF0 ZSA8IDAgfHwKLQkJCSAgICBsdl9zbmFwc2hvdF91c2VfcmF0ZV9yZXEucmF0ZSAgPiAxMDApIHJl dHVybiAtRUZBVUxUOwotCi0JCQlzd2l0Y2ggKGx2X3NuYXBzaG90X3VzZV9yYXRlX3JlcS5ibG9j aykKLQkJCXsKLQkJCWNhc2UgMDoKLQkJCQlsdl9wdHItPmx2X3NuYXBzaG90X3VzZV9yYXRlID0g bHZfc25hcHNob3RfdXNlX3JhdGVfcmVxLnJhdGU7Ci0JCQkJaWYgKGx2X3B0ci0+bHZfcmVtYXBf cHRyICogMTAwIC8gbHZfcHRyLT5sdl9yZW1hcF9lbmQgPCBsdl9wdHItPmx2X3NuYXBzaG90X3Vz ZV9yYXRlKQotCQkJCQlpbnRlcnJ1cHRpYmxlX3NsZWVwX29uICgmbHZfcHRyLT5sdl9zbmFwc2hv dF93YWl0KTsKLQkJCQlicmVhazsKLQotCQkJY2FzZSBPX05PTkJMT0NLOgotCQkJCWJyZWFrOwot Ci0JCQlkZWZhdWx0OgotCQkJCXJldHVybiAtRUZBVUxUOwotCQkJfQotCQkJbHZfc25hcHNob3Rf dXNlX3JhdGVfcmVxLnJhdGUgPSBsdl9wdHItPmx2X3JlbWFwX3B0ciAqIDEwMCAvIGx2X3B0ci0+ bHZfcmVtYXBfZW5kOwotCQkJaWYgKGNvcHlfdG9fdXNlcihhcmcsICZsdl9zbmFwc2hvdF91c2Vf cmF0ZV9yZXEsCi0JCQkJCSBzaXplb2YobHZfc25hcHNob3RfdXNlX3JhdGVfcmVxX3QpKSkKLQkJ CQlyZXR1cm4gLUVGQVVMVDsKLQkJfQotCQlicmVhazsKKwkJcmV0dXJuIGx2bV9nZXRfc25hcHNo b3RfdXNlX3JhdGUobHZfcHRyLCBhcmcpOwogCiAJZGVmYXVsdDoKIAkJcHJpbnRrKEtFUk5fV0FS TklORwotCQkgICAgICAgIiVzIC0tIGx2bV9ibGtfaW9jdGw6IHVua25vd24gY29tbWFuZCAlZFxu IiwKKwkJICAgICAgICIlcyAtLSBsdm1fYmxrX2lvY3RsOiB1bmtub3duIGNvbW1hbmQgMHgleFxu IiwKIAkJICAgICAgIGx2bV9uYW1lLCBjb21tYW5kKTsKIAkJcmV0dXJuIC1FSU5WQUw7CiAJfQpA QCAtMTA2NCw2ICsxMDQ2LDM4IEBACiAJcmV0dXJuIDA7CiB9IC8qIGx2bV9ibGtfY2xvc2UoKSAq LwogCitzdGF0aWMgaW50IGx2bV9nZXRfc25hcHNob3RfdXNlX3JhdGUobHZfdCAqbHYsIHZvaWQg KmFyZykKK3sKKwlsdl9zbmFwc2hvdF91c2VfcmF0ZV9yZXFfdCBsdl9yYXRlX3JlcTsKKworCWlm ICghKGx2LT5sdl9hY2Nlc3MgJiBMVl9TTkFQU0hPVCkpCisJCXJldHVybiAtRVBFUk07CisKKwlp ZiAoY29weV9mcm9tX3VzZXIoJmx2X3JhdGVfcmVxLCBhcmcsIHNpemVvZihsdl9yYXRlX3JlcSkp KQorCQlyZXR1cm4gLUVGQVVMVDsKKworCWlmIChsdl9yYXRlX3JlcS5yYXRlIDwgMCB8fCBsdl9y YXRlX3JlcS5yYXRlID4gMTAwKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCXN3aXRjaCAobHZfcmF0 ZV9yZXEuYmxvY2spIHsKKwljYXNlIDA6CisJCWx2LT5sdl9zbmFwc2hvdF91c2VfcmF0ZSA9IGx2 X3JhdGVfcmVxLnJhdGU7CisJCWlmIChsdi0+bHZfcmVtYXBfcHRyICogMTAwIC8gbHYtPmx2X3Jl bWFwX2VuZCA8CisJCSAgICBsdi0+bHZfc25hcHNob3RfdXNlX3JhdGUpCisJCQlpbnRlcnJ1cHRp YmxlX3NsZWVwX29uKCZsdi0+bHZfc25hcHNob3Rfd2FpdCk7CisJCWJyZWFrOworCisJY2FzZSBP X05PTkJMT0NLOgorCQlicmVhazsKKworCWRlZmF1bHQ6CisJCXJldHVybiAtRUlOVkFMOworCX0K Kwlsdl9yYXRlX3JlcS5yYXRlID0gbHYtPmx2X3JlbWFwX3B0ciAqIDEwMCAvIGx2LT5sdl9yZW1h cF9lbmQ7CisKKwlyZXR1cm4gY29weV90b191c2VyKGFyZywgJmx2X3JhdGVfcmVxLAorCQkJICAg IHNpemVvZihsdl9yYXRlX3JlcSkpID8gLUVGQVVMVCA6IDA7Cit9CiAKIHN0YXRpYyBpbnQgbHZt X3VzZXJfYm1hcChzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgbHZfYm1hcCAqdXNlcl9yZXN1 bHQpCiB7CkBAIC0xMDc1LDM5OCArMTA4OSwxNiBAQAogCQlyZXR1cm4gLUVGQVVMVDsKIAogCW1l bXNldCgmYmgsMCxzaXplb2YgYmgpOwotCWJoLmJfcnNlY3RvciA9IGJsb2NrOwotCWJoLmJfZGV2 ID0gYmguYl9yZGV2ID0gaW5vZGUtPmlfZGV2OworCWJoLmJfYmxvY2tuciA9IGJsb2NrOworCWJo LmJfZGV2ID0gYmguYl9yZGV2ID0gaW5vZGUtPmlfcmRldjsKIAliaC5iX3NpemUgPSBsdm1fZ2V0 X2Jsa3NpemUoYmguYl9kZXYpOwogCWlmICgoZXJyPWx2bV9tYXAoJmJoLCBSRUFEKSkgPCAwKSAg ewogCQlwcmludGsoImx2bSBtYXAgZmFpbGVkOiAlZFxuIiwgZXJyKTsKIAkJcmV0dXJuIC1FSU5W QUw7CiAJfQogCi0JcmV0dXJuIHB1dF91c2VyKGtkZXZfdF90b19ucihiaC5iX3JkZXYpLCAmdXNl cl9yZXN1bHQtPmx2X2RldikgfHwKLQlwdXRfdXNlcihiaC5iX3JzZWN0b3IsICZ1c2VyX3Jlc3Vs dC0+bHZfYmxvY2spID8gLUVGQVVMVCA6IDA7Ci19Ci0KLQotLyoKLSAqIHByb3ZpZGUgVkcgaW5m byBmb3IgcHJvYyBmaWxlc3lzdGVtIHVzZSAoZ2xvYmFsKQotICovCi1pbnQgbHZtX3ZnX2luZm8o dmdfdCAqdmdfcHRyLCBjaGFyICpidWYpIHsKLQlpbnQgc3ogPSAwOwotCWNoYXIgaW5hY3RpdmVf ZmxhZyA9ICcgJzsKLQotCWlmICghKHZnX3B0ci0+dmdfc3RhdHVzICYgVkdfQUNUSVZFKSkgaW5h Y3RpdmVfZmxhZyA9ICdJJzsKLQlzeiA9IHNwcmludGYoYnVmLAotCQkgICAgICJcblZHOiAlYyVz ICBbJWQgUFYsICVkIExWLyVkIG9wZW5dICIKLQkJICAgICAiIFBFIFNpemU6ICVkIEtCXG4iCi0J CSAgICAgIiAgVXNhZ2UgW0tCL1BFXTogJWQgLyVkIHRvdGFsICAiCi0JCSAgICAgIiVkIC8lZCB1 c2VkICAlZCAvJWQgZnJlZSIsCi0JCSAgICAgaW5hY3RpdmVfZmxhZywKLQkJICAgICB2Z19wdHIt PnZnX25hbWUsCi0JCSAgICAgdmdfcHRyLT5wdl9jdXIsCi0JCSAgICAgdmdfcHRyLT5sdl9jdXIs Ci0JCSAgICAgdmdfcHRyLT5sdl9vcGVuLAotCSAgICAgCSAgICAgdmdfcHRyLT5wZV9zaXplID4+ IDEsCi0JCSAgICAgdmdfcHRyLT5wZV9zaXplICogdmdfcHRyLT5wZV90b3RhbCA+PiAxLAotCQkg ICAgIHZnX3B0ci0+cGVfdG90YWwsCi0JCSAgICAgdmdfcHRyLT5wZV9hbGxvY2F0ZWQgKiB2Z19w dHItPnBlX3NpemUgPj4gMSwKLQkgICAgIAkgICAgIHZnX3B0ci0+cGVfYWxsb2NhdGVkLAotCQkg ICAgICh2Z19wdHItPnBlX3RvdGFsIC0gdmdfcHRyLT5wZV9hbGxvY2F0ZWQpICoKLQkgICAgIAkg ICAgIHZnX3B0ci0+cGVfc2l6ZSA+PiAxLAotCQkgICAgIHZnX3B0ci0+cGVfdG90YWwgLSB2Z19w dHItPnBlX2FsbG9jYXRlZCk7Ci0JcmV0dXJuIHN6OwotfQotCi0KLS8qCi0gKiBwcm92aWRlIExW IGluZm8gZm9yIHByb2MgZmlsZXN5c3RlbSB1c2UgKGdsb2JhbCkKLSAqLwotaW50IGx2bV9sdl9p bmZvKHZnX3QgKnZnX3B0ciwgbHZfdCAqbHZfcHRyLCBjaGFyICpidWYpIHsKLQlpbnQgc3ogPSAw OwotCWNoYXIgaW5hY3RpdmVfZmxhZyA9ICdBJywgYWxsb2NhdGlvbl9mbGFnID0gJyAnLAotCSAg ICAgc3RyaXBlc19mbGFnID0gJyAnLCByd19mbGFnID0gJyAnOwotCi0JaWYgKCEobHZfcHRyLT5s dl9zdGF0dXMgJiBMVl9BQ1RJVkUpKQotCQlpbmFjdGl2ZV9mbGFnID0gJ0knOwotCXJ3X2ZsYWcg PSAnUic7Ci0JaWYgKGx2X3B0ci0+bHZfYWNjZXNzICYgTFZfV1JJVEUpCi0JCXJ3X2ZsYWcgPSAn Vyc7Ci0JYWxsb2NhdGlvbl9mbGFnID0gJ0QnOwotCWlmIChsdl9wdHItPmx2X2FsbG9jYXRpb24g JiBMVl9DT05USUdVT1VTKQotCQlhbGxvY2F0aW9uX2ZsYWcgPSAnQyc7Ci0Jc3RyaXBlc19mbGFn ID0gJ0wnOwotCWlmIChsdl9wdHItPmx2X3N0cmlwZXMgPiAxKQotCQlzdHJpcGVzX2ZsYWcgPSAn Uyc7Ci0Jc3ogKz0gc3ByaW50ZihidWYrc3osCi0JCSAgICAgICJbJWMlYyVjJWMiLAotCQkgICAg ICBpbmFjdGl2ZV9mbGFnLAotCSByd19mbGFnLAotCQkgICAgICBhbGxvY2F0aW9uX2ZsYWcsCi0J CSAgICAgIHN0cmlwZXNfZmxhZyk7Ci0JaWYgKGx2X3B0ci0+bHZfc3RyaXBlcyA+IDEpCi0JCXN6 ICs9IHNwcmludGYoYnVmK3N6LCAiJS0yZCIsCi0JCQkgICAgICBsdl9wdHItPmx2X3N0cmlwZXMp OwotCWVsc2UKLQkJc3ogKz0gc3ByaW50ZihidWYrc3osICIgICIpOwotCWJhc2VuYW1lID0gc3Ry cmNocihsdl9wdHItPmx2X25hbWUsICcvJyk7Ci0JaWYgKCBiYXNlbmFtZSA9PSAwKSBiYXNlbmFt ZSA9IGx2X3B0ci0+bHZfbmFtZTsKLQllbHNlICAgICAgICAgICAgICAgIGJhc2VuYW1lKys7Ci0J c3ogKz0gc3ByaW50ZihidWYrc3osICJdICUtMjVzIiwgYmFzZW5hbWUpOwotCWlmIChzdHJsZW4o YmFzZW5hbWUpID4gMjUpCi0JCXN6ICs9IHNwcmludGYoYnVmK3N6LAotCQkJICAgICAgIlxuICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIik7Ci0Jc3ogKz0gc3ByaW50ZihidWYrc3osICIl OWQgLyUtNmQgICAiLAotCQkgICAgICBsdl9wdHItPmx2X3NpemUgPj4gMSwKLQkJICAgICAgbHZf cHRyLT5sdl9zaXplIC8gdmdfcHRyLT5wZV9zaXplKTsKLQotCWlmIChsdl9wdHItPmx2X29wZW4g PT0gMCkKLQkJc3ogKz0gc3ByaW50ZihidWYrc3osICJjbG9zZSIpOwotCWVsc2UKLQkJc3ogKz0g c3ByaW50ZihidWYrc3osICIlZHggb3BlbiIsCi0JCQkgICAgICBsdl9wdHItPmx2X29wZW4pOwot Ci0JcmV0dXJuIHN6OwotfQotCi0KLS8qCi0gKiBwcm92aWRlIFBWIGluZm8gZm9yIHByb2MgZmls ZXN5c3RlbSB1c2UgKGdsb2JhbCkKLSAqLwotaW50IGx2bV9wdl9pbmZvKHB2X3QgKnB2X3B0ciwg Y2hhciAqYnVmKSB7Ci0JaW50IHN6ID0gMDsKLQljaGFyIGluYWN0aXZlX2ZsYWcgPSAnQScsIGFs bG9jYXRpb25fZmxhZyA9ICcgJzsKLQljaGFyICpwdl9uYW1lID0gTlVMTDsKLQotCWlmICghKHB2 X3B0ci0+cHZfc3RhdHVzICYgUFZfQUNUSVZFKSkKLQkJaW5hY3RpdmVfZmxhZyA9ICdJJzsKLQlh bGxvY2F0aW9uX2ZsYWcgPSAnQSc7Ci0JaWYgKCEocHZfcHRyLT5wdl9hbGxvY2F0YWJsZSAmIFBW X0FMTE9DQVRBQkxFKSkKLQkJYWxsb2NhdGlvbl9mbGFnID0gJ04nOwotCXB2X25hbWUgPSBzdHJy Y2hyKHB2X3B0ci0+cHZfbmFtZSsxLCcvJyk7Ci0JaWYgKCBwdl9uYW1lID09IDApIHB2X25hbWUg PSBwdl9wdHItPnB2X25hbWU7Ci0JZWxzZSAgICAgICAgICAgICAgIHB2X25hbWUrKzsKLQlzeiA9 IHNwcmludGYoYnVmLAotCQkgICAgICJbJWMlY10gJS0yMXMgJThkIC8lLTZkICAiCi0JCSAgICAg IiU4ZCAvJS02ZCAgJThkIC8lLTZkIiwKLQkJICAgICBpbmFjdGl2ZV9mbGFnLAotCQkgICAgIGFs bG9jYXRpb25fZmxhZywKLQkJICAgICBwdl9uYW1lLAotCQkgICAgIHB2X3B0ci0+cGVfdG90YWwg KgotCQkgICAgIHB2X3B0ci0+cGVfc2l6ZSA+PiAxLAotCQkgICAgIHB2X3B0ci0+cGVfdG90YWws Ci0JCSAgICAgcHZfcHRyLT5wZV9hbGxvY2F0ZWQgKgotCQkgICAgIHB2X3B0ci0+cGVfc2l6ZSA+ PiAxLAotCQkgICAgIHB2X3B0ci0+cGVfYWxsb2NhdGVkLAotCQkgICAgIChwdl9wdHItPnBlX3Rv dGFsIC0KLQkJICAgICAgcHZfcHRyLT5wZV9hbGxvY2F0ZWQpICoKLQkJICAgICBwdl9wdHItPnBl X3NpemUgPj4gMSwKLQkJICAgICBwdl9wdHItPnBlX3RvdGFsIC0KLQkJICAgICBwdl9wdHItPnBl X2FsbG9jYXRlZCk7Ci0JcmV0dXJuIHN6OwotfQotCi0KLS8qCi0gKiBTdXBwb3J0IGZ1bmN0aW9u cyAvcHJvYy1GaWxlc3lzdGVtCi0gKi8KLQotI2RlZmluZSAgTFZNX1BST0NfQlVGICAgKCBpID09 IDAgPyBkdW1teV9idWYgOiAmYnVmW3N6XSkKLQotLyoKLSAqIHByb3ZpZGUgZ2xvYmFsIExWTSBp bmZvcm1hdGlvbgotICovCi1zdGF0aWMgaW50IGx2bV9wcm9jX2dldF9nbG9iYWxfaW5mbyhjaGFy ICpwYWdlLCBjaGFyICoqc3RhcnQsIG9mZl90IHBvcywgaW50IGNvdW50LCBpbnQgKmVvZiwgdm9p ZCAqZGF0YSkKLXsKLQlpbnQgYywgaSwgbCwgcCwgdiwgdmdfY291bnRlciwgcHZfY291bnRlciwg bHZfY291bnRlciwgbHZfb3Blbl9jb3VudGVyLAotCSBsdl9vcGVuX3RvdGFsLCBwZV90X2J5dGVz LCBoYXNoX3RhYmxlX2J5dGVzLCBsdl9ibG9ja19leGNlcHRpb25fdF9ieXRlcywgc2Vjb25kczsK LQlzdGF0aWMgb2ZmX3Qgc3o7Ci0Jb2ZmX3Qgc3pfbGFzdDsKLQlzdGF0aWMgY2hhciAqYnVmID0g TlVMTDsKLQlzdGF0aWMgY2hhciBkdW1teV9idWZbMTYwXTsJLyogc2l6ZWQgZm9yIDIgbGluZXMg Ki8KLQl2Z190ICp2Z19wdHI7Ci0JbHZfdCAqbHZfcHRyOwotCXB2X3QgKnB2X3B0cjsKLQotCi0j aWZkZWYgREVCVUdfTFZNX1BST0NfR0VUX0lORk8KLQlwcmludGsoS0VSTl9ERUJVRwotCSAgICAg ICAiJXMgLSBsdm1fcHJvY19nZXRfZ2xvYmFsX2luZm8gQ0FMTEVEICBwb3M6ICVsdSAgY291bnQ6 ICVkICB3aGVuY2U6ICVkXG4iLAotCSAgICAgICBsdm1fbmFtZSwgcG9zLCBjb3VudCwgd2hlbmNl KTsKLSNlbmRpZgotCi0JTU9EX0lOQ19VU0VfQ09VTlQ7Ci0KLQlpZiAocG9zID09IDAgfHwgYnVm ID09IE5VTEwpIHsKLQkJc3pfbGFzdCA9IHZnX2NvdW50ZXIgPSBwdl9jb3VudGVyID0gbHZfY291 bnRlciA9IGx2X29wZW5fY291bnRlciA9IFwKLQkJbHZfb3Blbl90b3RhbCA9IHBlX3RfYnl0ZXMg PSBoYXNoX3RhYmxlX2J5dGVzID0gXAotCQlsdl9ibG9ja19leGNlcHRpb25fdF9ieXRlcyA9IDA7 Ci0KLQkJLyogc2VhcmNoIGZvciBhY3Rpdml0eSAqLwotCQlmb3IgKHYgPSAwOyB2IDwgQUJTX01B WF9WRzsgdisrKSB7Ci0JCQlpZiAoKHZnX3B0ciA9IHZnW3ZdKSAhPSBOVUxMKSB7Ci0JCQkJdmdf Y291bnRlcisrOwotCQkJCXB2X2NvdW50ZXIgKz0gdmdfcHRyLT5wdl9jdXI7Ci0JCQkJbHZfY291 bnRlciArPSB2Z19wdHItPmx2X2N1cjsKLQkJCQlpZiAodmdfcHRyLT5sdl9jdXIgPiAwKSB7Ci0J CQkJCWZvciAobCA9IDA7IGwgPCB2Z1t2XS0+bHZfbWF4OyBsKyspIHsKLQkJCQkJCWlmICgobHZf cHRyID0gdmdfcHRyLT5sdltsXSkgIT0gTlVMTCkgewotCQkJCQkJCXBlX3RfYnl0ZXMgKz0gbHZf cHRyLT5sdl9hbGxvY2F0ZWRfbGU7Ci0JCQkJCQkJaGFzaF90YWJsZV9ieXRlcyArPSBsdl9wdHIt Pmx2X3NuYXBzaG90X2hhc2hfdGFibGVfc2l6ZTsKLQkJCQkJCQlpZiAobHZfcHRyLT5sdl9ibG9j a19leGNlcHRpb24gIT0gTlVMTCkKLQkJCQkJCQkJbHZfYmxvY2tfZXhjZXB0aW9uX3RfYnl0ZXMg Kz0gbHZfcHRyLT5sdl9yZW1hcF9lbmQ7Ci0JCQkJCQkJaWYgKGx2X3B0ci0+bHZfb3BlbiA+IDAp IHsKLQkJCQkJCQkJbHZfb3Blbl9jb3VudGVyKys7Ci0JCQkJCQkJCWx2X29wZW5fdG90YWwgKz0g bHZfcHRyLT5sdl9vcGVuOwotCQkJCQkJCX0KLQkJCQkJCX0KLQkJCQkJfQotCQkJCX0KLQkJCX0K LQkJfQotCQlwZV90X2J5dGVzICo9IHNpemVvZihwZV90KTsKLQkJbHZfYmxvY2tfZXhjZXB0aW9u X3RfYnl0ZXMgKj0gc2l6ZW9mKGx2X2Jsb2NrX2V4Y2VwdGlvbl90KTsKLQotCQlpZiAoYnVmICE9 IE5VTEwpIHsKLQkJCVBfS0ZSRUUoIiVzIC0tIHZmcmVlICVkXG4iLCBsdm1fbmFtZSwgX19MSU5F X18pOwotCQkJbG9ja19rZXJuZWwoKTsKLQkJCXZmcmVlKGJ1Zik7Ci0JCQl1bmxvY2tfa2VybmVs KCk7Ci0JCQlidWYgPSBOVUxMOwotCQl9Ci0JCS8qIDIgdGltZXM6IGZpcnN0IHRvIGdldCBzaXpl IHRvIGFsbG9jYXRlIGJ1ZmZlciwKLQkJICAgMm5kIHRvIGZpbGwgdGhlIG1hbGxvY2VkIGJ1ZmZl ciAqLwotCQlmb3IgKGkgPSAwOyBpIDwgMjsgaSsrKSB7Ci0JCQlzeiA9IDA7Ci0JCQlzeiArPSBz cHJpbnRmKExWTV9QUk9DX0JVRiwKLQkJCQkgICAgICAiTFZNICIKLSNpZmRlZiBNT0RVTEUKLQkJ CQkgICAgICAibW9kdWxlIgotI2Vsc2UKLQkJCQkgICAgICAiZHJpdmVyIgotI2VuZGlmCi0JCQkJ ICAgICAgIiAlc1xuXG4iCi0JCQkJICAgICJUb3RhbDogICVkIFZHJXMgICVkIFBWJXMgICVkIExW JXMgIiwKLQkJCQkgICAgICBsdm1fc2hvcnRfdmVyc2lvbiwKLQkJCQkgIHZnX2NvdW50ZXIsIHZn X2NvdW50ZXIgPT0gMSA/ICIiIDogInMiLAotCQkJCSAgcHZfY291bnRlciwgcHZfY291bnRlciA9 PSAxID8gIiIgOiAicyIsCi0JCQkJIGx2X2NvdW50ZXIsIGx2X2NvdW50ZXIgPT0gMSA/ICIiIDog InMiKTsKLQkJCXN6ICs9IHNwcmludGYoTFZNX1BST0NfQlVGLAotCQkJCSAgICAgICIoJWQgTFYl cyBvcGVuIiwKLQkJCQkgICAgICBsdl9vcGVuX2NvdW50ZXIsCi0JCQkJICAgICAgbHZfb3Blbl9j b3VudGVyID09IDEgPyAiIiA6ICJzIik7Ci0JCQlpZiAobHZfb3Blbl90b3RhbCA+IDApCi0JCQkJ c3ogKz0gc3ByaW50ZihMVk1fUFJPQ19CVUYsCi0JCQkJCSAgICAgICIgJWQgdGltZXMpXG4iLAot CQkJCQkgICAgICBsdl9vcGVuX3RvdGFsKTsKLQkJCWVsc2UKLQkJCQlzeiArPSBzcHJpbnRmKExW TV9QUk9DX0JVRiwgIikiKTsKLQkJCXN6ICs9IHNwcmludGYoTFZNX1BST0NfQlVGLAotCQkJCSAg ICAgICJcbkdsb2JhbDogJWx1IGJ5dGVzIG1hbGxvY2VkICAgSU9QIHZlcnNpb246ICVkICAgIiwK LQkJCQkgICAgICB2Z19jb3VudGVyICogc2l6ZW9mKHZnX3QpICsKLQkJCQkgICAgICBwdl9jb3Vu dGVyICogc2l6ZW9mKHB2X3QpICsKLQkJCQkgICAgICBsdl9jb3VudGVyICogc2l6ZW9mKGx2X3Qp ICsKLQkJCQkgICAgICBwZV90X2J5dGVzICsgaGFzaF90YWJsZV9ieXRlcyArIGx2X2Jsb2NrX2V4 Y2VwdGlvbl90X2J5dGVzICsgc3pfbGFzdCwKLQkJCQkgICAgICBsdm1faW9wX3ZlcnNpb24pOwot Ci0JCQlzZWNvbmRzID0gQ1VSUkVOVF9USU1FIC0gbG9hZHRpbWU7Ci0JCQlpZiAoc2Vjb25kcyA8 IDApCi0JCQkJbG9hZHRpbWUgPSBDVVJSRU5UX1RJTUUgKyBzZWNvbmRzOwotCQkJaWYgKHNlY29u ZHMgLyA4NjQwMCA+IDApIHsKLQkJCQlzeiArPSBzcHJpbnRmKExWTV9QUk9DX0JVRiwgIiVkIGRh eSVzICIsCi0JCQkJCSAgICAgIHNlY29uZHMgLyA4NjQwMCwKLQkJCQkJICAgICAgc2Vjb25kcyAv IDg2NDAwID09IDAgfHwKLQkJCQkJIHNlY29uZHMgLyA4NjQwMCA+IDEgPyAicyIgOiAiIik7Ci0J CQl9Ci0JCQlzeiArPSBzcHJpbnRmKExWTV9QUk9DX0JVRiwgIiVkOiUwMmQ6JTAyZCBhY3RpdmVc biIsCi0JCQkJICAgICAgKHNlY29uZHMgJSA4NjQwMCkgLyAzNjAwLAotCQkJCSAgICAgIChzZWNv bmRzICUgMzYwMCkgLyA2MCwKLQkJCQkgICAgICBzZWNvbmRzICUgNjApOwotCi0JCQlpZiAodmdf Y291bnRlciA+IDApIHsKLQkJCQlmb3IgKHYgPSAwOyB2IDwgQUJTX01BWF9WRzsgdisrKSB7Ci0J CQkJCS8qIHZvbHVtZSBncm91cCAqLwotCQkJCQlpZiAoKHZnX3B0ciA9IHZnW3ZdKSAhPSBOVUxM KSB7Ci0JCQkJCQlzeiArPSBsdm1fdmdfaW5mbyh2Z19wdHIsIExWTV9QUk9DX0JVRik7Ci0KLQkJ CQkJCS8qIHBoeXNpY2FsIHZvbHVtZXMgKi8KLQkJCQkJCXN6ICs9IHNwcmludGYoTFZNX1BST0Nf QlVGLAotCQkJCQkJCSAgICAgICJcbiAgUFYlcyAiLAotCQkJCQkJCSAgICAgIHZnX3B0ci0+cHZf Y3VyID09IDEgPyAiOiAiIDogInM6Iik7Ci0JCQkJCQljID0gMDsKLQkJCQkJCWZvciAocCA9IDA7 IHAgPCB2Z19wdHItPnB2X21heDsgcCsrKSB7Ci0JCQkJCQkJaWYgKChwdl9wdHIgPSB2Z19wdHIt PnB2W3BdKSAhPSBOVUxMKSB7Ci0JCQkJCQkJCXN6ICs9IGx2bV9wdl9pbmZvKHB2X3B0ciwgTFZN X1BST0NfQlVGKTsKLQotCQkJCQkJCQljKys7Ci0JCQkJCQkJCWlmIChjIDwgdmdfcHRyLT5wdl9j dXIpCi0JCQkJCQkJCQlzeiArPSBzcHJpbnRmKExWTV9QUk9DX0JVRiwKLQkJCQkJCQkJCQkgICAg ICAiXG4gICAgICAgIik7Ci0JCQkJCQkJfQotCQkJCQkJfQotCi0JCQkJCQkvKiBsb2dpY2FsIHZv bHVtZXMgKi8KLQkJCQkJCXN6ICs9IHNwcmludGYoTFZNX1BST0NfQlVGLAotCQkJCQkJCSAgICJc biAgICBMViVzICIsCi0JCQkJCQkJICAgICAgdmdfcHRyLT5sdl9jdXIgPT0gMSA/ICI6ICIgOiAi czoiKTsKLQkJCQkJCWMgPSAwOwotCQkJCQkJZm9yIChsID0gMDsgbCA8IHZnX3B0ci0+bHZfbWF4 OyBsKyspIHsKLQkJCQkJCQlpZiAoKGx2X3B0ciA9IHZnX3B0ci0+bHZbbF0pICE9IE5VTEwpIHsK LQkJCQkJCQkJc3ogKz0gbHZtX2x2X2luZm8odmdfcHRyLCBsdl9wdHIsIExWTV9QUk9DX0JVRik7 Ci0JCQkJCQkJCWMrKzsKLQkJCQkJCQkJaWYgKGMgPCB2Z19wdHItPmx2X2N1cikKLQkJCQkJCQkJ CXN6ICs9IHNwcmludGYoTFZNX1BST0NfQlVGLAotCQkJCQkJCQkJCSAgICAgICJcbiAgICAgICAg ICIpOwotCQkJCQkJCX0KLQkJCQkJCX0KLQkJCQkJCWlmICh2Z19wdHItPmx2X2N1ciA9PSAwKSBz eiArPSBzcHJpbnRmKExWTV9QUk9DX0JVRiwgIm5vbmUiKTsKLQkJCQkJCXN6ICs9IHNwcmludGYo TFZNX1BST0NfQlVGLCAiXG4iKTsKLQkJCQkJfQotCQkJCX0KLQkJCX0KLQkJCWlmIChidWYgPT0g TlVMTCkgewotCQkJCWxvY2tfa2VybmVsKCk7Ci0JCQkJYnVmID0gdm1hbGxvYyhzeik7Ci0JCQkJ dW5sb2NrX2tlcm5lbCgpOwotCQkJCWlmIChidWYgPT0gTlVMTCkgewotCQkJCQlzeiA9IDA7Ci0J CQkJCU1PRF9ERUNfVVNFX0NPVU5UOwotCQkJCQlyZXR1cm4gc3ByaW50ZihwYWdlLCAiJXMgLSB2 bWFsbG9jIGVycm9yIGF0IGxpbmUgJWRcbiIsCi0JCQkJCQkgICAgIGx2bV9uYW1lLCBfX0xJTkVf Xyk7Ci0JCQkJfQotCQkJfQotCQkJc3pfbGFzdCA9IHN6OwotCQl9Ci0JfQotCU1PRF9ERUNfVVNF X0NPVU5UOwotCWlmIChwb3MgPiBzeiAtIDEpIHsKLQkJbG9ja19rZXJuZWwoKTsKLQkJdmZyZWUo YnVmKTsKLQkJdW5sb2NrX2tlcm5lbCgpOwotCQlidWYgPSBOVUxMOwotCQlyZXR1cm4gMDsKLQl9 Ci0JKnN0YXJ0ID0gJmJ1Zltwb3NdOwotCWlmIChzeiAtIHBvcyA8IGNvdW50KQotCQlyZXR1cm4g c3ogLSBwb3M7Ci0JZWxzZQotCQlyZXR1cm4gY291bnQ7Ci19IC8qIGx2bV9wcm9jX2dldF9nbG9i YWxfaW5mbygpICovCi0KLQotLyoKLSAqIHByb3ZpZGUgVkcgaW5mb3JtYXRpb24KLSAqLwotaW50 IGx2bV9wcm9jX3JlYWRfdmdfaW5mbyhjaGFyICpwYWdlLCBjaGFyICoqc3RhcnQsIG9mZl90IG9m ZiwKLQkJCSAgaW50IGNvdW50LCBpbnQgKmVvZiwgdm9pZCAqZGF0YSkgewotCWludCBzeiA9IDA7 Ci0JdmdfdCAqdmcgPSBkYXRhOwotCi0Jc3ogKz0gc3ByaW50ZiAoIHBhZ2Urc3osICJuYW1lOiAg ICAgICAgICVzXG4iLCB2Zy0+dmdfbmFtZSk7Ci0Jc3ogKz0gc3ByaW50ZiAoIHBhZ2Urc3osICJz aXplOiAgICAgICAgICV1XG4iLAotCQkgICAgICAgIHZnLT5wZV90b3RhbCAqIHZnLT5wZV9zaXpl IC8gMik7Ci0Jc3ogKz0gc3ByaW50ZiAoIHBhZ2Urc3osICJhY2Nlc3M6ICAgICAgICV1XG4iLCB2 Zy0+dmdfYWNjZXNzKTsKLQlzeiArPSBzcHJpbnRmICggcGFnZStzeiwgInN0YXR1czogICAgICAg JXVcbiIsIHZnLT52Z19zdGF0dXMpOwotCXN6ICs9IHNwcmludGYgKCBwYWdlK3N6LCAibnVtYmVy OiAgICAgICAldVxuIiwgdmctPnZnX251bWJlcik7Ci0Jc3ogKz0gc3ByaW50ZiAoIHBhZ2Urc3os ICJMViBtYXg6ICAgICAgICV1XG4iLCB2Zy0+bHZfbWF4KTsKLQlzeiArPSBzcHJpbnRmICggcGFn ZStzeiwgIkxWIGN1cnJlbnQ6ICAgJXVcbiIsIHZnLT5sdl9jdXIpOwotCXN6ICs9IHNwcmludGYg KCBwYWdlK3N6LCAiTFYgb3BlbjogICAgICAldVxuIiwgdmctPmx2X29wZW4pOwotCXN6ICs9IHNw cmludGYgKCBwYWdlK3N6LCAiUFYgbWF4OiAgICAgICAldVxuIiwgdmctPnB2X21heCk7Ci0Jc3og Kz0gc3ByaW50ZiAoIHBhZ2Urc3osICJQViBjdXJyZW50OiAgICV1XG4iLCB2Zy0+cHZfY3VyKTsK LQlzeiArPSBzcHJpbnRmICggcGFnZStzeiwgIlBWIGFjdGl2ZTogICAgJXVcbiIsIHZnLT5wdl9h Y3QpOwotCXN6ICs9IHNwcmludGYgKCBwYWdlK3N6LCAiUEUgc2l6ZTogICAgICAldVxuIiwgdmct PnBlX3NpemUgLyAyKTsKLQlzeiArPSBzcHJpbnRmICggcGFnZStzeiwgIlBFIHRvdGFsOiAgICAg JXVcbiIsIHZnLT5wZV90b3RhbCk7Ci0Jc3ogKz0gc3ByaW50ZiAoIHBhZ2Urc3osICJQRSBhbGxv Y2F0ZWQ6ICV1XG4iLCB2Zy0+cGVfYWxsb2NhdGVkKTsKLQlzeiArPSBzcHJpbnRmICggcGFnZStz eiwgInV1aWQ6ICAgICAgICAgJXNcbiIsIGx2bV9zaG93X3V1aWQodmctPnZnX3V1aWQpKTsKLQot CXJldHVybiBzejsKLX0KLQotCi0vKgotICogcHJvdmlkZSBMViBpbmZvcm1hdGlvbgotICovCi1p bnQgbHZtX3Byb2NfcmVhZF9sdl9pbmZvKGNoYXIgKnBhZ2UsIGNoYXIgKipzdGFydCwgb2ZmX3Qg b2ZmLAotCQkJICBpbnQgY291bnQsIGludCAqZW9mLCB2b2lkICpkYXRhKSB7Ci0JaW50IHN6ID0g MDsKLQlsdl90ICpsdiA9IGRhdGE7Ci0KLQlzeiArPSBzcHJpbnRmICggcGFnZStzeiwgIm5hbWU6 ICAgICAgICAgJXNcbiIsIGx2LT5sdl9uYW1lKTsKLQlzeiArPSBzcHJpbnRmICggcGFnZStzeiwg InNpemU6ICAgICAgICAgJXVcbiIsIGx2LT5sdl9zaXplKTsKLQlzeiArPSBzcHJpbnRmICggcGFn ZStzeiwgImFjY2VzczogICAgICAgJXVcbiIsIGx2LT5sdl9hY2Nlc3MpOwotCXN6ICs9IHNwcmlu dGYgKCBwYWdlK3N6LCAic3RhdHVzOiAgICAgICAldVxuIiwgbHYtPmx2X3N0YXR1cyk7Ci0Jc3og Kz0gc3ByaW50ZiAoIHBhZ2Urc3osICJudW1iZXI6ICAgICAgICV1XG4iLCBsdi0+bHZfbnVtYmVy KTsKLQlzeiArPSBzcHJpbnRmICggcGFnZStzeiwgIm9wZW46ICAgICAgICAgJXVcbiIsIGx2LT5s dl9vcGVuKTsKLQlzeiArPSBzcHJpbnRmICggcGFnZStzeiwgImFsbG9jYXRpb246ICAgJXVcbiIs IGx2LT5sdl9hbGxvY2F0aW9uKTsKLQlzeiArPSBzcHJpbnRmICggcGFnZStzeiwgImRldmljZTog ICAgICAgJTAydTolMDJ1XG4iLAotICAgICAgICAgICAgICAgICAgICAgICAgTUFKT1IobHYtPmx2 X2RldiksIE1JTk9SKGx2LT5sdl9kZXYpKTsKLQotCXJldHVybiBzejsKLX0KLQotCi0vKgotICog cHJvdmlkZSBQViBpbmZvcm1hdGlvbgotICovCi1pbnQgbHZtX3Byb2NfcmVhZF9wdl9pbmZvKGNo YXIgKnBhZ2UsIGNoYXIgKipzdGFydCwgb2ZmX3Qgb2ZmLAotCQkJICBpbnQgY291bnQsIGludCAq ZW9mLCB2b2lkICpkYXRhKSB7Ci0JaW50IHN6ID0gMDsKLQlwdl90ICpwdiA9IGRhdGE7Ci0KLQlz eiArPSBzcHJpbnRmICggcGFnZStzeiwgIm5hbWU6ICAgICAgICAgJXNcbiIsIHB2LT5wdl9uYW1l KTsKLQlzeiArPSBzcHJpbnRmICggcGFnZStzeiwgInNpemU6ICAgICAgICAgJXVcbiIsIHB2LT5w dl9zaXplKTsKLQlzeiArPSBzcHJpbnRmICggcGFnZStzeiwgInN0YXR1czogICAgICAgJXVcbiIs IHB2LT5wdl9zdGF0dXMpOwotCXN6ICs9IHNwcmludGYgKCBwYWdlK3N6LCAibnVtYmVyOiAgICAg ICAldVxuIiwgcHYtPnB2X251bWJlcik7Ci0Jc3ogKz0gc3ByaW50ZiAoIHBhZ2Urc3osICJhbGxv Y2F0YWJsZTogICV1XG4iLCBwdi0+cHZfYWxsb2NhdGFibGUpOwotCXN6ICs9IHNwcmludGYgKCBw YWdlK3N6LCAiTFYgY3VycmVudDogICAldVxuIiwgcHYtPmx2X2N1cik7Ci0Jc3ogKz0gc3ByaW50 ZiAoIHBhZ2Urc3osICJQRSBzaXplOiAgICAgICV1XG4iLCBwdi0+cGVfc2l6ZSAvIDIpOwotCXN6 ICs9IHNwcmludGYgKCBwYWdlK3N6LCAiUEUgdG90YWw6ICAgICAldVxuIiwgcHYtPnBlX3RvdGFs KTsKLQlzeiArPSBzcHJpbnRmICggcGFnZStzeiwgIlBFIGFsbG9jYXRlZDogJXVcbiIsIHB2LT5w ZV9hbGxvY2F0ZWQpOwotCXN6ICs9IHNwcmludGYgKCBwYWdlK3N6LCAiZGV2aWNlOiAgICAgICAl MDJ1OiUwMnVcbiIsCi0gICAgICAgICAgICAgICAgICAgICAgICBNQUpPUihwdi0+cHZfZGV2KSwg TUlOT1IocHYtPnB2X2RldikpOwotCXN6ICs9IHNwcmludGYgKCBwYWdlK3N6LCAidXVpZDogICAg ICAgICAlc1xuIiwgbHZtX3Nob3dfdXVpZChwdi0+cHZfdXVpZCkpOwotCi0KLQlyZXR1cm4gc3o7 CisJcmV0dXJuIChwdXRfdXNlcihrZGV2X3RfdG9fbnIoYmguYl9yZGV2KSwgJnVzZXJfcmVzdWx0 LT5sdl9kZXYpIHx8CisJCXB1dF91c2VyKGJoLmJfcnNlY3Rvci8oYmguYl9zaXplPj45KSwgJnVz ZXJfcmVzdWx0LT5sdl9ibG9jaykpOwogfQogCiAKQEAgLTE0NzQsMTcyICsxMTA2LDE2NCBAQAog ICogYmxvY2sgZGV2aWNlIHN1cHBvcnQgZnVuY3Rpb24gZm9yIC91c3Ivc3JjL2xpbnV4L2RyaXZl cnMvYmxvY2svbGxfcndfYmxrLmMKICAqIChzZWUgaW5pdF9tb2R1bGUvbHZtX2luaXQpCiAgKi8K K3N0YXRpYyBpbmxpbmUgdm9pZCBfX3JlbWFwX3NuYXBzaG90KGtkZXZfdCByZGV2LCB1bG9uZyBy c2VjdG9yLAorCQkJCSAgICB1bG9uZyBwZV9zdGFydCwgbHZfdCAqbHYsIHZnX3QgKnZnKSB7CisJ aWYgKCFsdm1fc25hcHNob3RfcmVtYXBfYmxvY2soJnJkZXYsICZyc2VjdG9yLCBwZV9zdGFydCwg bHYpICYmCisJICAgICFsdm1fc25hcHNob3RfQ09XKHJkZXYsIHJzZWN0b3IsIHBlX3N0YXJ0LCBy c2VjdG9yLCB2ZywgbHYpKQorCQlsdm1fd3JpdGVfQ09XX3RhYmxlX2Jsb2NrKHZnLCBsdik7Cit9 CisKIHN0YXRpYyBpbnQgbHZtX21hcChzdHJ1Y3QgYnVmZmVyX2hlYWQgKmJoLCBpbnQgcncpCiB7 CiAJaW50IG1pbm9yID0gTUlOT1IoYmgtPmJfcmRldik7Ci0JaW50IHJldCA9IDA7CiAJdWxvbmcg aW5kZXg7CiAJdWxvbmcgcGVfc3RhcnQ7CiAJdWxvbmcgc2l6ZSA9IGJoLT5iX3NpemUgPj4gOTsK LQl1bG9uZyByc2VjdG9yX3RtcCA9IGJoLT5iX3JzZWN0b3I7Ci0JdWxvbmcgcnNlY3Rvcl9zYXY7 Ci0Ja2Rldl90IHJkZXZfdG1wID0gYmgtPmJfcmRldjsKLQlrZGV2X3QgcmRldl9zYXY7CisJdWxv bmcgcnNlY3Rvcl9vcmcgPSBiaC0+Yl9yc2VjdG9yOworCXVsb25nIHJzZWN0b3JfbWFwOworCWtk ZXZfdCByZGV2X21hcDsKIAl2Z190ICp2Z190aGlzID0gdmdbVkdfQkxLKG1pbm9yKV07CiAJbHZf dCAqbHYgPSB2Z190aGlzLT5sdltMVl9CTEsobWlub3IpXTsKIAogCisJZG93bigmbHYtPmx2X3Nu YXBzaG90X3NlbSk7CiAJaWYgKCEobHYtPmx2X3N0YXR1cyAmIExWX0FDVElWRSkpIHsKIAkJcHJp bnRrKEtFUk5fQUxFUlQKIAkJICAgICAgICIlcyAtIGx2bV9tYXA6IGxsX3J3X2JsayBmb3IgaW5h Y3RpdmUgTFYgJXNcbiIsCiAJCSAgICAgICBsdm1fbmFtZSwgbHYtPmx2X25hbWUpOwotCQlyZXR1 cm4gLTE7CisJCWdvdG8gYmFkOwogCX0KIAogCWlmICgocncgPT0gV1JJVEUgfHwgcncgPT0gV1JJ VEVBKSAmJgogCSAgICAhKGx2LT5sdl9hY2Nlc3MgJiBMVl9XUklURSkpIHsKIAkJcHJpbnRrKEtF Uk5fQ1JJVAotCQkgICAgIiVzIC0gbHZtX21hcDogbGxfcndfYmxrIHdyaXRlIGZvciByZWFkb25s eSBMViAlc1xuIiwKKwkJICAgICAgICIlcyAtIGx2bV9tYXA6IGxsX3J3X2JsayB3cml0ZSBmb3Ig cmVhZG9ubHkgTFYgJXNcbiIsCiAJCSAgICAgICBsdm1fbmFtZSwgbHYtPmx2X25hbWUpOwotCQly ZXR1cm4gLTE7CisJCWdvdG8gYmFkOwogCX0KIAotCVBfTUFQKCIlcyAtIGx2bV9tYXAgbWlub3I6 JWQgICpyZGV2OiAlMDJkOiUwMmQgICpyc2VjdG9yOiAlbHUgICIKLQkgICAgICAic2l6ZTolbHVc biIsCisJUF9NQVAoIiVzIC0gbHZtX21hcCBtaW5vcjogJWQgICpyZGV2OiAlcyAgKnJzZWN0b3I6 ICVsdSAgc2l6ZTolbHVcbiIsCiAJICAgICAgbHZtX25hbWUsIG1pbm9yLAotCSAgICAgIE1BSk9S KHJkZXZfdG1wKSwKLQkgICAgICBNSU5PUihyZGV2X3RtcCksCi0JICAgICAgcnNlY3Rvcl90bXAs IHNpemUpOworCSAgICAgIGtkZXZuYW1lKGJoLT5iX2RldiksCisJICAgICAgcnNlY3Rvcl9vcmcs IHNpemUpOwogCi0JaWYgKHJzZWN0b3JfdG1wICsgc2l6ZSA+IGx2LT5sdl9zaXplKSB7CisJaWYg KHJzZWN0b3Jfb3JnICsgc2l6ZSA+IGx2LT5sdl9zaXplKSB7CiAJCXByaW50ayhLRVJOX0FMRVJU CiAJCSAgICAgICAiJXMgLSBsdm1fbWFwIGFjY2VzcyBiZXlvbmQgZW5kIG9mIGRldmljZTsgKnJz ZWN0b3I6ICIKICAgICAgICAgICAgICAgICAgICAgICAgIiVsdSBvciBzaXplOiAlbHUgd3Jvbmcg Zm9yIG1pbm9yOiAlMmRcbiIsCi0gICAgICAgICAgICAgICAgICAgICAgIGx2bV9uYW1lLCByc2Vj dG9yX3RtcCwgc2l6ZSwgbWlub3IpOwotCQlyZXR1cm4gLTE7CisgICAgICAgICAgICAgICAgICAg ICAgIGx2bV9uYW1lLCByc2VjdG9yX29yZywgc2l6ZSwgbWlub3IpOworCQlnb3RvIGJhZDsKIAl9 Ci0JcnNlY3Rvcl9zYXYgPSByc2VjdG9yX3RtcDsKLQlyZGV2X3NhdiA9IHJkZXZfdG1wOwogCi1s dm1fc2Vjb25kX3JlbWFwOgotCS8qIGxpbmVhciBtYXBwaW5nICovCi0JaWYgKGx2LT5sdl9zdHJp cGVzIDwgMikgeworCisJaWYgKGx2LT5sdl9zdHJpcGVzIDwgMikgeyAvKiBsaW5lYXIgbWFwcGlu ZyAqLwogCQkvKiBnZXQgdGhlIGluZGV4ICovCi0JCWluZGV4ID0gcnNlY3Rvcl90bXAgLyB2Z190 aGlzLT5wZV9zaXplOworCQlpbmRleCA9IHJzZWN0b3Jfb3JnIC8gdmdfdGhpcy0+cGVfc2l6ZTsK IAkJcGVfc3RhcnQgPSBsdi0+bHZfY3VycmVudF9wZVtpbmRleF0ucGU7Ci0JCXJzZWN0b3JfdG1w ID0gbHYtPmx2X2N1cnJlbnRfcGVbaW5kZXhdLnBlICsKLQkJICAgIChyc2VjdG9yX3RtcCAlIHZn X3RoaXMtPnBlX3NpemUpOwotCQlyZGV2X3RtcCA9IGx2LT5sdl9jdXJyZW50X3BlW2luZGV4XS5k ZXY7Ci0KLQkJUF9NQVAoImx2X2N1cnJlbnRfcGVbJWxkXS5wZTogJWxkICByZGV2OiAlMDJkOiUw MmQgICIKLQkJICAgICAgInJzZWN0b3I6JWxkXG4iLAotCQkgICAgICAgaW5kZXgsCi0JCSAgICAg ICBsdi0+bHZfY3VycmVudF9wZVtpbmRleF0ucGUsCi0JCSAgICAgICBNQUpPUihyZGV2X3RtcCks Ci0JCSAgICAgICBNSU5PUihyZGV2X3RtcCksCi0JCSAgICAgICByc2VjdG9yX3RtcCk7CisJCXJz ZWN0b3JfbWFwID0gbHYtPmx2X2N1cnJlbnRfcGVbaW5kZXhdLnBlICsKKwkJCShyc2VjdG9yX29y ZyAlIHZnX3RoaXMtPnBlX3NpemUpOworCQlyZGV2X21hcCA9IGx2LT5sdl9jdXJyZW50X3BlW2lu ZGV4XS5kZXY7CisKKwkJUF9NQVAoImx2X2N1cnJlbnRfcGVbJWxkXS5wZTogJWQgIHJkZXY6ICVz ICByc2VjdG9yOiVsZFxuIiwKKwkJICAgICAgaW5kZXgsIGx2LT5sdl9jdXJyZW50X3BlW2luZGV4 XS5wZSwKKwkJICAgICAga2Rldm5hbWUocmRldl9tYXApLCByc2VjdG9yX21hcCk7CiAKLQkJLyog c3RyaXBlZCBtYXBwaW5nICovCi0JfSBlbHNlIHsKKwl9IGVsc2UgewkJLyogc3RyaXBlZCBtYXBw aW5nICovCiAJCXVsb25nIHN0cmlwZV9pbmRleDsKIAkJdWxvbmcgc3RyaXBlX2xlbmd0aDsKIAog CQlzdHJpcGVfbGVuZ3RoID0gdmdfdGhpcy0+cGVfc2l6ZSAqIGx2LT5sdl9zdHJpcGVzOwotCQlz dHJpcGVfaW5kZXggPSAocnNlY3Rvcl90bXAgJSBzdHJpcGVfbGVuZ3RoKSAvIGx2LT5sdl9zdHJp cGVzaXplOwotCQlpbmRleCA9IHJzZWN0b3JfdG1wIC8gc3RyaXBlX2xlbmd0aCArCi0JCSAgICAo c3RyaXBlX2luZGV4ICUgbHYtPmx2X3N0cmlwZXMpICoKLQkJICAgIChsdi0+bHZfYWxsb2NhdGVk X2xlIC8gbHYtPmx2X3N0cmlwZXMpOworCQlzdHJpcGVfaW5kZXggPSAocnNlY3Rvcl9vcmcgJSBz dHJpcGVfbGVuZ3RoKSAvCisJCQlsdi0+bHZfc3RyaXBlc2l6ZTsKKwkJaW5kZXggPSByc2VjdG9y X29yZyAvIHN0cmlwZV9sZW5ndGggKworCQkJKHN0cmlwZV9pbmRleCAlIGx2LT5sdl9zdHJpcGVz KSAqCisJCQkobHYtPmx2X2FsbG9jYXRlZF9sZSAvIGx2LT5sdl9zdHJpcGVzKTsKIAkJcGVfc3Rh cnQgPSBsdi0+bHZfY3VycmVudF9wZVtpbmRleF0ucGU7Ci0JCXJzZWN0b3JfdG1wID0gbHYtPmx2 X2N1cnJlbnRfcGVbaW5kZXhdLnBlICsKLQkJICAgIChyc2VjdG9yX3RtcCAlIHN0cmlwZV9sZW5n dGgpIC0KLQkJICAgIChzdHJpcGVfaW5kZXggJSBsdi0+bHZfc3RyaXBlcykgKiBsdi0+bHZfc3Ry aXBlc2l6ZSAtCi0JCSAgICBzdHJpcGVfaW5kZXggLyBsdi0+bHZfc3RyaXBlcyAqCi0JCSAgICAo bHYtPmx2X3N0cmlwZXMgLSAxKSAqIGx2LT5sdl9zdHJpcGVzaXplOwotCQlyZGV2X3RtcCA9IGx2 LT5sdl9jdXJyZW50X3BlW2luZGV4XS5kZXY7Ci0JfQotCi0JUF9NQVAoImx2X2N1cnJlbnRfcGVb JWxkXS5wZTogJWxkICByZGV2OiAlMDJkOiUwMmQgIHJzZWN0b3I6JWxkXG4iCi0JICAgICAgICJz dHJpcGVfbGVuZ3RoOiAlbGQgIHN0cmlwZV9pbmRleDogJWxkXG4iLAotCSAgICAgICBpbmRleCwK LQkgICAgICAgbHYtPmx2X2N1cnJlbnRfcGVbaW5kZXhdLnBlLAotCSAgICAgICBNQUpPUihyZGV2 X3RtcCksCi0JICAgICAgIE1JTk9SKHJkZXZfdG1wKSwKLQkgICAgICAgcnNlY3Rvcl90bXAsCi0J ICAgICAgIHN0cmlwZV9sZW5ndGgsCi0JICAgICAgIHN0cmlwZV9pbmRleCk7CisJCXJzZWN0b3Jf bWFwID0gbHYtPmx2X2N1cnJlbnRfcGVbaW5kZXhdLnBlICsKKwkJCShyc2VjdG9yX29yZyAlIHN0 cmlwZV9sZW5ndGgpIC0KKwkJCShzdHJpcGVfaW5kZXggJSBsdi0+bHZfc3RyaXBlcykgKiBsdi0+ bHZfc3RyaXBlc2l6ZSAtCisJCQlzdHJpcGVfaW5kZXggLyBsdi0+bHZfc3RyaXBlcyAqCisJCQko bHYtPmx2X3N0cmlwZXMgLSAxKSAqIGx2LT5sdl9zdHJpcGVzaXplOworCQlyZGV2X21hcCA9IGx2 LT5sdl9jdXJyZW50X3BlW2luZGV4XS5kZXY7CisKKwkJUF9NQVAoImx2X2N1cnJlbnRfcGVbJWxk XS5wZTogJWQgIHJkZXY6ICVzICByc2VjdG9yOiVsZFxuIgorCQkgICAgICAic3RyaXBlX2xlbmd0 aDogJWxkICBzdHJpcGVfaW5kZXg6ICVsZFxuIiwKKwkJICAgICAgaW5kZXgsIGx2LT5sdl9jdXJy ZW50X3BlW2luZGV4XS5wZSwga2Rldm5hbWUocmRldl9tYXApLAorCQkgICAgICByc2VjdG9yX21h cCwgc3RyaXBlX2xlbmd0aCwgc3RyaXBlX2luZGV4KTsKKwl9CiAKIAkvKiBoYW5kbGUgcGh5c2lj YWwgZXh0ZW50cyBvbiB0aGUgbW92ZSAqLwotCWlmIChwZV9sb2NrX3JlcS5sb2NrID09IExPQ0tf UEUpIHsKLQkJaWYgKHJkZXZfdG1wID09IHBlX2xvY2tfcmVxLmRhdGEucHZfZGV2ICYmCi0JCSAg ICByc2VjdG9yX3RtcCA+PSBwZV9sb2NrX3JlcS5kYXRhLnB2X29mZnNldCAmJgotCQkgICAgcnNl Y3Rvcl90bXAgPCAocGVfbG9ja19yZXEuZGF0YS5wdl9vZmZzZXQgKwotCQkJCSAgIHZnX3RoaXMt PnBlX3NpemUpKSB7Ci0JCQlzbGVlcF9vbigmbHZtX21hcF93YWl0KTsKLQkJCXJzZWN0b3JfdG1w ID0gcnNlY3Rvcl9zYXY7Ci0JCQlyZGV2X3RtcCA9IHJkZXZfc2F2OwotCQkJZ290byBsdm1fc2Vj b25kX3JlbWFwOwotCQl9CisJZG93bigmX3BlX2xvY2spOworCWlmKChwZV9sb2NrX3JlcS5sb2Nr ID09IExPQ0tfUEUpICYmCisJICAgKHJkZXZfbWFwID09IHBlX2xvY2tfcmVxLmRhdGEucHZfZGV2 KSAmJgorCSAgIChyc2VjdG9yX21hcCA+PSBwZV9sb2NrX3JlcS5kYXRhLnB2X29mZnNldCkgJiYK KwkgICAocnNlY3Rvcl9tYXAgPCAocGVfbG9ja19yZXEuZGF0YS5wdl9vZmZzZXQgKyB2Z190aGlz LT5wZV9zaXplKSkgJiYKKwkgICAoKHJ3ID09IFdSSVRFKSB8fCAocncgPT0gV1JJVEVBKSkpIHsK KwkJLyogZGVmZXIgdGhpcyBiaCB1bnRpbCB0aGUgUEUgaGFzIG1vdmVkICovCisJCWlmKCgoaW50 KSBiaCkgJiAweDMpIHsKKwkJCXByaW50ayhLRVJOX0VSUiAKKwkJCSAgICAgICAiJXMgLS0gYmgg dXNlcyBsb3cgMiBiaXRzIG9mIHBvaW50ZXJcbiIsCisJCQkgICAgICAgbHZtX25hbWUpOworCQkJ dXAoJl9wZV9sb2NrKTsKKwkJCWdvdG8gYmFkOworCQl9CisKKwkJYmgtPmJfcmVxbmV4dCA9IF9w ZV9yZXF1ZXN0czsKKwkJX3BlX3JlcXVlc3RzID0gKHN0cnVjdCBidWZmZXJfaGVhZCAqKSAoKGlu dCkgYmggfCBydyk7CisJCXVwKCZfcGVfbG9jayk7CisJCXVwKCZsdi0+bHZfc25hcHNob3Rfc2Vt KTsKKwkJcmV0dXJuIDA7CiAJfQorCXVwKCZfcGVfbG9jayk7CisKIAkvKiBzdGF0aXN0aWMgKi8K IAlpZiAocncgPT0gV1JJVEUgfHwgcncgPT0gV1JJVEVBKQogCQlsdi0+bHZfY3VycmVudF9wZVtp bmRleF0ud3JpdGVzKys7CiAJZWxzZQogCQlsdi0+bHZfY3VycmVudF9wZVtpbmRleF0ucmVhZHMr KzsKIAotCS8qIHNuYXBzaG90IHZvbHVtZSBleGNlcHRpb24gaGFuZGxpbmcgb24gcGh5c2ljYWwg ZGV2aWNlIGFkZHJlc3MgYmFzZSAqLwotCWlmIChsdi0+bHZfYWNjZXNzICYgKExWX1NOQVBTSE9U fExWX1NOQVBTSE9UX09SRykpIHsKLQkJLyogb3JpZ2luYWwgbG9naWNhbCB2b2x1bWUgKi8KLQkJ aWYgKGx2LT5sdl9hY2Nlc3MgJiBMVl9TTkFQU0hPVF9PUkcpIHsKLQkJCS8qIFNlcmlhbGl6ZXMg dGhlIGFjY2VzcyB0byB0aGUgbHZfc25hcHNob3RfbmV4dCBsaXN0ICovCi0JCQlkb3duKCZsdi0+ bHZfc25hcHNob3Rfc2VtKTsKLQkJCWlmIChydyA9PSBXUklURSB8fCBydyA9PSBXUklURUEpCi0J CQl7Ci0JCQkJbHZfdCAqbHZfcHRyOwotCi0JCQkJLyogc3RhcnQgd2l0aCBmaXJzdCBzbmFwc2hv dCBhbmQgbG9vcCB0aHJ1Z2ggYWxsIG9mIHRoZW0gKi8KLQkJCQlmb3IgKGx2X3B0ciA9IGx2LT5s dl9zbmFwc2hvdF9uZXh0OwotCQkJCSAgICAgbHZfcHRyICE9IE5VTEw7Ci0JCQkJICAgICBsdl9w dHIgPSBsdl9wdHItPmx2X3NuYXBzaG90X25leHQpIHsKLQkJCQkJLyogQ2hlY2sgZm9yIGluYWN0 aXZlIHNuYXBzaG90ICovCi0JCQkJCWlmICghKGx2X3B0ci0+bHZfc3RhdHVzICYgTFZfQUNUSVZF KSkgY29udGludWU7Ci0JCQkJCS8qIFNlcmlhbGl6ZXMgdGhlIENPVyB3aXRoIHRoZSBhY2Nlc3Nl cyB0byB0aGUgc25hcHNob3QgZGV2aWNlICovCi0JCQkJCWRvd24oJmx2X3B0ci0+bHZfc25hcHNo b3Rfc2VtKTsKLQkJCQkJLyogZG8gd2Ugc3RpbGwgaGF2ZSBleGNlcHRpb24gc3RvcmFnZSBmb3Ig dGhpcyBzbmFwc2hvdCBmcmVlPyAqLwotCQkJCQlpZiAobHZfcHRyLT5sdl9ibG9ja19leGNlcHRp b24gIT0gTlVMTCkgewotCQkJCQkJcmRldl9zYXYgPSByZGV2X3RtcDsKLQkJCQkJCXJzZWN0b3Jf c2F2ID0gcnNlY3Rvcl90bXA7Ci0JCQkJCQlpZiAoIWx2bV9zbmFwc2hvdF9yZW1hcF9ibG9jaygm cmRldl90bXAsCi0JCQkJCQkJCQkgICAgICAmcnNlY3Rvcl90bXAsCi0JCQkJCQkJCQkgICAgICBw ZV9zdGFydCwKLQkJCQkJCQkJCSAgICAgIGx2X3B0cikpIHsKLQkJCQkJCQkvKiBjcmVhdGUgYSBu ZXcgbWFwcGluZyAqLwotCQkJCQkJCWlmICghKHJldCA9IGx2bV9zbmFwc2hvdF9DT1cocmRldl90 bXAsCi0JCQkJCQkJCQkgICAgICAgCSAgICAgcnNlY3Rvcl90bXAsCi0JCQkJCQkJCQkgICAgICAg ICAgICAgcGVfc3RhcnQsCi0JCQkJCQkJCQkgICAgICAgICAgICAgcnNlY3Rvcl9zYXYsCi0JCQkJ CQkJCQkgICAgICAgICAgICAgbHZfcHRyKSkpCi0JCQkJCQkJCXJldCA9IGx2bV93cml0ZV9DT1df dGFibGVfYmxvY2sodmdfdGhpcywKLQkJCQkJCQkJCQkJCWx2X3B0cik7Ci0JCQkJCQl9Ci0JCQkJ CQlyZGV2X3RtcCA9IHJkZXZfc2F2OwotCQkJCQkJcnNlY3Rvcl90bXAgPSByc2VjdG9yX3NhdjsK LQkJCQkJfQotCQkJCQl1cCgmbHZfcHRyLT5sdl9zbmFwc2hvdF9zZW0pOwotCQkJCX0KLQkJCX0K LQkJCXVwKCZsdi0+bHZfc25hcHNob3Rfc2VtKTsKLQkJfSBlbHNlIHsKLQkJCS8qIHJlbWFwIHNu YXBzaG90IGxvZ2ljYWwgdm9sdW1lICovCi0JCQlkb3duKCZsdi0+bHZfc25hcHNob3Rfc2VtKTsK LQkJCWlmIChsdi0+bHZfYmxvY2tfZXhjZXB0aW9uICE9IE5VTEwpCi0JCQkJbHZtX3NuYXBzaG90 X3JlbWFwX2Jsb2NrKCZyZGV2X3RtcCwgJnJzZWN0b3JfdG1wLCBwZV9zdGFydCwgbHYpOwotCQkJ dXAoJmx2LT5sdl9zbmFwc2hvdF9zZW0pOworCS8qIHNuYXBzaG90IHZvbHVtZSBleGNlcHRpb24g aGFuZGxpbmcgb24gcGh5c2ljYWwgZGV2aWNlCisgICAgICAgICAgIGFkZHJlc3MgYmFzZSAqLwor CWlmICghKGx2LT5sdl9hY2Nlc3MgJiAoTFZfU05BUFNIT1R8TFZfU05BUFNIT1RfT1JHKSkpCisJ CWdvdG8gb3V0OworCisJaWYgKGx2LT5sdl9hY2Nlc3MgJiBMVl9TTkFQU0hPVCkgeyAvKiByZW1h cCBzbmFwc2hvdCAqLworCQlpZiAobHYtPmx2X2Jsb2NrX2V4Y2VwdGlvbikKKwkJCWx2bV9zbmFw c2hvdF9yZW1hcF9ibG9jaygmcmRldl9tYXAsICZyc2VjdG9yX21hcCwKKwkJCQkJCSBwZV9zdGFy dCwgbHYpOworCQllbHNlCisJCQlnb3RvIGJhZDsKKworCX0gZWxzZSBpZihydyA9PSBXUklURSB8 fCBydyA9PSBXUklURUEpIHsgLyogc25hcHNob3Qgb3JpZ2luICovCisJCWx2X3QgKnNuYXA7CisK KwkJLyogc3RhcnQgd2l0aCBmaXJzdCBzbmFwc2hvdCBhbmQgbG9vcCB0aHJvdWdoIGFsbCBvZgor CQkgICB0aGVtICovCisJCWZvciAoc25hcCA9IGx2LT5sdl9zbmFwc2hvdF9uZXh0OyBzbmFwOwor CQkgICAgIHNuYXAgPSBzbmFwLT5sdl9zbmFwc2hvdF9uZXh0KSB7CisJCQkvKiBDaGVjayBmb3Ig aW5hY3RpdmUgc25hcHNob3QgKi8KKwkJCWlmICghKHNuYXAtPmx2X3N0YXR1cyAmIExWX0FDVElW RSkpCisJCQkJY29udGludWU7CisKKwkJCS8qIFNlcmlhbGl6ZXMgdGhlIENPVyB3aXRoIHRoZSBh Y2Nlc3NlcyB0byB0aGUKKwkJCSAgIHNuYXBzaG90IGRldmljZSAqLworCQkJZG93bigmc25hcC0+ bHZfc25hcHNob3Rfc2VtKTsKKwkJCV9fcmVtYXBfc25hcHNob3QocmRldl9tYXAsIHJzZWN0b3Jf bWFwLAorCQkJCQkgcGVfc3RhcnQsIHNuYXAsIHZnX3RoaXMpOworCQkJdXAoJnNuYXAtPmx2X3Nu YXBzaG90X3NlbSk7CiAJCX0KIAl9Ci0JYmgtPmJfcmRldiA9IHJkZXZfdG1wOwotCWJoLT5iX3Jz ZWN0b3IgPSByc2VjdG9yX3RtcDsKIAotCXJldHVybiByZXQ7Cisgb3V0OgorCWJoLT5iX3JkZXYg PSByZGV2X21hcDsKKwliaC0+Yl9yc2VjdG9yID0gcnNlY3Rvcl9tYXA7CisJdXAoJmx2LT5sdl9z bmFwc2hvdF9zZW0pOworCXJldHVybiAxOworCisgYmFkOgorCWJ1ZmZlcl9JT19lcnJvcihiaCk7 CisJdXAoJmx2LT5sdl9zbmFwc2hvdF9zZW0pOworCXJldHVybiAtMTsKIH0gLyogbHZtX21hcCgp ICovCiAKIApAQCAtMTY2NywxOCArMTI5MSwxNSBAQAogI2VuZGlmCiAKIAorCisKIC8qCiAgKiBt YWtlIHJlcXVlc3QgZnVuY3Rpb24KICAqLwogc3RhdGljIGludCBsdm1fbWFrZV9yZXF1ZXN0X2Zu KHJlcXVlc3RfcXVldWVfdCAqcSwKIAkJCSAgICAgICBpbnQgcncsCi0JCQkgICAgICAgc3RydWN0 IGJ1ZmZlcl9oZWFkICpiaCkKLXsKLQlpZiAobHZtX21hcChiaCwgcncpID49IDApCi0JCXJldHVy biAxOwotCi0JYnVmZmVyX0lPX2Vycm9yKGJoKTsKLQlyZXR1cm4gMDsKKwkJCSAgICAgICBzdHJ1 Y3QgYnVmZmVyX2hlYWQgKmJoKSB7CisJcmV0dXJuIChsdm1fbWFwKGJoLCBydykgPD0gMCkgPyAw IDogMTsKIH0KIAogCkBAIC0xNzE4LDMzICsxMzM5LDYwIEBACiAgKi8KIHN0YXRpYyBpbnQgbHZt X2RvX3BlX2xvY2tfdW5sb2NrKHZnX3QgKnZnX3B0ciwgdm9pZCAqYXJnKQogeworCXBlX2xvY2tf cmVxX3QgbmV3X2xvY2s7CisJdWludCBxOwogCXVpbnQgcDsKIAogCWlmICh2Z19wdHIgPT0gTlVM TCkgcmV0dXJuIC1FTlhJTzsKLQlpZiAoY29weV9mcm9tX3VzZXIoJnBlX2xvY2tfcmVxLCBhcmcs Ci0JCQkgICBzaXplb2YocGVfbG9ja19yZXFfdCkpICE9IDApIHJldHVybiAtRUZBVUxUOworCWlm IChjb3B5X2Zyb21fdXNlcigmbmV3X2xvY2ssIGFyZywgc2l6ZW9mKG5ld19sb2NrKSkgIT0gMCkg CisJCXJldHVybiAtRUZBVUxUOwogCi0Jc3dpdGNoIChwZV9sb2NrX3JlcS5sb2NrKSB7CisJc3dp dGNoIChuZXdfbG9jay5sb2NrKSB7CiAJY2FzZSBMT0NLX1BFOgorCQlpZihwZV9sb2NrX3JlcS5s b2NrID09IExPQ0tfUEUpCisJCQlyZXR1cm4gLUVCVVNZOworCiAJCWZvciAocCA9IDA7IHAgPCB2 Z19wdHItPnB2X21heDsgcCsrKSB7CiAJCQlpZiAodmdfcHRyLT5wdltwXSAhPSBOVUxMICYmCi0J CQkgICAgcGVfbG9ja19yZXEuZGF0YS5wdl9kZXYgPT0KLQkJCSAgICB2Z19wdHItPnB2W3BdLT5w dl9kZXYpCisJCQkgICAgbmV3X2xvY2suZGF0YS5wdl9kZXYgPT0gdmdfcHRyLT5wdltwXS0+cHZf ZGV2KQogCQkJCWJyZWFrOwogCQl9CiAJCWlmIChwID09IHZnX3B0ci0+cHZfbWF4KSByZXR1cm4g LUVOWElPOwogCisJCXBlX2xvY2tfcmVxID0gbmV3X2xvY2s7CisKKwkJZG93bigmX3BlX2xvY2sp OwogCQlwZV9sb2NrX3JlcS5sb2NrID0gVU5MT0NLX1BFOworCQl1cCgmX3BlX2xvY2spOworCiAJ CWZzeW5jX2RldihwZV9sb2NrX3JlcS5kYXRhLmx2X2Rldik7CisKKwkJZG93bigmX3BlX2xvY2sp OwogCQlwZV9sb2NrX3JlcS5sb2NrID0gTE9DS19QRTsKKwkJdXAoJl9wZV9sb2NrKTsKIAkJYnJl YWs7CiAKIAljYXNlIFVOTE9DS19QRToKKwkJZG93bigmX3BlX2xvY2spOwogCQlwZV9sb2NrX3Jl cS5sb2NrID0gVU5MT0NLX1BFOwogCQlwZV9sb2NrX3JlcS5kYXRhLmx2X2RldiA9IFwKIAkJcGVf bG9ja19yZXEuZGF0YS5wdl9kZXYgPSBcCiAJCXBlX2xvY2tfcmVxLmRhdGEucHZfb2Zmc2V0ID0g MDsKLQkJd2FrZV91cCgmbHZtX21hcF93YWl0KTsKKwkJcSA9ICh1aW50KSBfcGVfcmVxdWVzdHM7 CisJCV9wZV9yZXF1ZXN0cyA9IDA7CisJCXVwKCZfcGVfbG9jayk7CisKKwkJLyogaGFuZGxlIGFs bCBkZWZlcnJlZCBpbyBmb3IgdGhpcyBQRSAqLworCQl3aGlsZShxKSB7CisJCQlzdHJ1Y3QgYnVm ZmVyX2hlYWQgKmRfYmggPSAKKwkJCQkoc3RydWN0IGJ1ZmZlcl9oZWFkICopIChxICYgfjB4Myk7 CisJCQlpbnQgcncgPSBxICYgMHgzOworCQkJcSA9ICh1aW50KSBkX2JoLT5iX3JlcW5leHQ7CisK KwkJCS8qIHJlc3VibWl0IHRoaXMgYnVmZmVyIGhlYWQgKi8KKwkJCWRfYmgtPmJfcmVxbmV4dCA9 IDA7CisJCQlnZW5lcmljX21ha2VfcmVxdWVzdChydywgZF9iaCk7CisJCX0KIAkJYnJlYWs7CiAK IAlkZWZhdWx0OgpAQCAtMTc4MSw2ICsxNDI5LDggQEAKIAkJCQkJICAgIGxlX3JlbWFwX3JlcS5u ZXdfZGV2OwogCQkJCQlsdl9wdHItPmx2X2N1cnJlbnRfcGVbbGVdLnBlID0KIAkJCQkJICAgIGxl X3JlbWFwX3JlcS5uZXdfcGU7CisKKwkJCQkJX191cGRhdGVfaGFyZGJsb2Nrc2l6ZShsdl9wdHIp OwogCQkJCQlyZXR1cm4gMDsKIAkJCQl9CiAJCQl9CkBAIC0xNzk0LDcgKzE0NDQsNyBAQAogLyoK ICAqIGNoYXJhY3RlciBkZXZpY2Ugc3VwcG9ydCBmdW5jdGlvbiBWR0RBIGNyZWF0ZQogICovCi1p bnQgbHZtX2RvX3ZnX2NyZWF0ZShpbnQgbWlub3IsIHZvaWQgKmFyZykKK3N0YXRpYyBpbnQgbHZt X2RvX3ZnX2NyZWF0ZSh2b2lkICphcmcsIGludCBtaW5vcikKIHsKIAlpbnQgcmV0ID0gMDsKIAl1 bG9uZyBsLCBscyA9IDAsIHAsIHNpemU7CkBAIC0xODAyLDggKzE0NTIsNiBAQAogCXZnX3QgKnZn X3B0cjsKIAlsdl90ICoqc25hcF9sdl9wdHI7CiAKLQlpZiAodmdbVkdfQ0hSKG1pbm9yKV0gIT0g TlVMTCkgcmV0dXJuIC1FUEVSTTsKLQogCWlmICgodmdfcHRyID0ga21hbGxvYyhzaXplb2Yodmdf dCksR0ZQX0tFUk5FTCkpID09IE5VTEwpIHsKIAkJcHJpbnRrKEtFUk5fQ1JJVAogCQkgICAgICAg IiVzIC0tIFZHX0NSRUFURToga21hbGxvYyBlcnJvciBWRyBhdCBsaW5lICVkXG4iLApAQCAtMTgx NiwyOCArMTQ2NCw0MCBAQAogCQlyZXR1cm4gLUVGQVVMVDsKIAl9CiAKKwkvKiBWR19DUkVBVEUg bm93IHVzZXMgbWlub3IgbnVtYmVyIGluIFZHIHN0cnVjdHVyZSAqLworCWlmIChtaW5vciA9PSAt MSkgbWlub3IgPSB2Z19wdHItPnZnX251bWJlcjsKKworCS8qIFZhbGlkYXRlIGl0ICovCisJaWYg KHZnW1ZHX0NIUihtaW5vcildICE9IE5VTEwpIHsKKwkgICAga2ZyZWUodmdfcHRyKTsKKwkgICAg cmV0dXJuIC1FUEVSTTsKKwl9CisKIAkvKiB3ZSBhcmUgbm90IHRoYXQgYWN0aXZlIHNvIGZhci4u LiAqLwogCXZnX3B0ci0+dmdfc3RhdHVzICY9IH5WR19BQ1RJVkU7Ci0JdmdbVkdfQ0hSKG1pbm9y KV0gPSB2Z19wdHI7Ci0JdmdbVkdfQ0hSKG1pbm9yKV0tPnBlX2FsbG9jYXRlZCA9IDA7CisJdmdf cHRyLT5wZV9hbGxvY2F0ZWQgPSAwOwogCiAJaWYgKHZnX3B0ci0+cHZfbWF4ID4gQUJTX01BWF9Q VikgewogCQlwcmludGsoS0VSTl9XQVJOSU5HCiAJCSAgICAgICAiJXMgLS0gQ2FuJ3QgYWN0aXZh dGUgVkc6IEFCU19NQVhfUFYgdG9vIHNtYWxsXG4iLAogCQkgICAgICAgbHZtX25hbWUpOwogCQlr ZnJlZSh2Z19wdHIpOwotCQl2Z1tWR19DSFIobWlub3IpXSA9IE5VTEw7CiAJCXJldHVybiAtRVBF Uk07CiAJfQorCiAJaWYgKHZnX3B0ci0+bHZfbWF4ID4gQUJTX01BWF9MVikgewogCQlwcmludGso S0VSTl9XQVJOSU5HCiAJCSIlcyAtLSBDYW4ndCBhY3RpdmF0ZSBWRzogQUJTX01BWF9MViB0b28g c21hbGwgZm9yICV1XG4iLAogCQkgICAgICAgbHZtX25hbWUsIHZnX3B0ci0+bHZfbWF4KTsKIAkJ a2ZyZWUodmdfcHRyKTsKLQkJdmdfcHRyID0gTlVMTDsKIAkJcmV0dXJuIC1FUEVSTTsKIAl9CiAK KwkvKiBjcmVhdGUgZGV2ZnMgYW5kIHByb2NmcyBlbnRyaWVzICovCisJbHZtX2ZzX2NyZWF0ZV92 Zyh2Z19wdHIpOworCisJdmdbVkdfQ0hSKG1pbm9yKV0gPSB2Z19wdHI7CisKIAkvKiBnZXQgdGhl IHBoeXNpY2FsIHZvbHVtZSBzdHJ1Y3R1cmVzICovCiAJdmdfcHRyLT5wdl9hY3QgPSB2Z19wdHIt PnB2X2N1ciA9IDA7CiAJZm9yIChwID0gMDsgcCA8IHZnX3B0ci0+cHZfbWF4OyBwKyspIHsKQEAg LTE4ODUsOCArMTU0NSw2IEBACiAJCX0KIAl9CiAKLQlsdm1fZG9fY3JlYXRlX2RldmZzX2VudHJ5 X29mX3ZnICggdmdfcHRyKTsKLQogCS8qIFNlY29uZCBwYXRoIHRvIGNvcnJlY3Qgc25hcHNob3Qg bG9naWNhbCB2b2x1bWVzIHdoaWNoIGFyZSBub3QKIAkgICBpbiBwbGFjZSBkdXJpbmcgZmlyc3Qg cGF0aCBhYm92ZSAqLwogCWZvciAobCA9IDA7IGwgPCBsczsgbCsrKSB7CkBAIC0xOTAxLDggKzE1 NTksNiBAQAogCQl9CiAJfQogCi0JbHZtX2RvX2NyZWF0ZV9wcm9jX2VudHJ5X29mX3ZnICggdmdf cHRyKTsKLQogCXZmcmVlKHNuYXBfbHZfcHRyKTsKIAogCXZnX2NvdW50Kys7CkBAIC0xOTM0LDcg KzE1OTAsNiBAQAogCQkJCWlmICggcmV0ICE9IDApIHJldHVybiByZXQ7CiAJCQkJcHZfcHRyID0g dmdfcHRyLT5wdltwXTsKIAkJCQl2Z19wdHItPnBlX3RvdGFsICs9IHB2X3B0ci0+cGVfdG90YWw7 Ci0JCQkJbHZtX2RvX2NyZWF0ZV9wcm9jX2VudHJ5X29mX3B2KHZnX3B0ciwgcHZfcHRyKTsKIAkJ CQlyZXR1cm4gMDsKIAkJCX0KIAkJfQpAQCAtMTk4NCwxMCArMTYzOSwxMyBAQAogCWx2X3QgKmx2 X3B0ciA9IE5VTEw7CiAJcHZfdCAqcHZfcHRyID0gTlVMTDsKIAorCS8qIElmIHRoZSBWRyBkb2Vz bid0IGV4aXN0IGluIHRoZSBrZXJuZWwgdGhlbiBqdXN0IGV4aXQgKi8KKwlpZiAoIXZnX3B0cikg cmV0dXJuIDA7CisKIAlpZiAoY29weV9mcm9tX3VzZXIodmdfbmFtZSwgYXJnLCBzaXplb2Yodmdf bmFtZSkpICE9IDApCiAJCXJldHVybiAtRUZBVUxUOwogCi0JbHZtX2RvX3JlbW92ZV9wcm9jX2Vu dHJ5X29mX3ZnICggdmdfcHRyKTsKKwlsdm1fZnNfcmVtb3ZlX3ZnKHZnX3B0cik7CiAKIAlzdHJu Y3B5ICggdmdfcHRyLT52Z19uYW1lLCB2Z19uYW1lLCBzaXplb2YgKCB2Z19uYW1lKS0xKTsKIAlm b3IgKCBsID0gMDsgbCA8IHZnX3B0ci0+bHZfbWF4OyBsKyspCkBAIC0yMDA5LDcgKzE2NjcsNyBA QAogCQlzdHJuY3B5KHB2X3B0ci0+dmdfbmFtZSwgdmdfbmFtZSwgTkFNRV9MRU4pOwogCX0KIAot CWx2bV9kb19jcmVhdGVfcHJvY19lbnRyeV9vZl92ZyAoIHZnX3B0cik7CisJbHZtX2ZzX2NyZWF0 ZV92Zyh2Z19wdHIpOwogCiAJcmV0dXJuIDA7CiB9IC8qIGx2bV9kb192Z19yZW5hbWUgKi8KQEAg LTIwMzYsNiArMTY5NCw5IEBACiAJLyogbGV0J3MgZ28gaW5hY3RpdmUgKi8KIAl2Z19wdHItPnZn X3N0YXR1cyAmPSB+VkdfQUNUSVZFOwogCisJLyogcmVtb3ZlIGZyb20gcHJvY2ZzIGFuZCBkZXZm cyAqLworCWx2bV9mc19yZW1vdmVfdmcodmdfcHRyKTsKKwogCS8qIGZyZWUgTFZzICovCiAJLyog Zmlyc3QgZnJlZSBzbmFwc2hvdCBsb2dpY2FsIHZvbHVtZXMgKi8KIAlmb3IgKGkgPSAwOyBpIDwg dmdfcHRyLT5sdl9tYXg7IGkrKykgewpAQCAtMjA2MywxMSArMTcyNCw2IEBACiAJCX0KIAl9CiAK LQlkZXZmc191bnJlZ2lzdGVyIChjaF9kZXZmc19oYW5kbGVbdmdfcHRyLT52Z19udW1iZXJdKTsK LQlkZXZmc191bnJlZ2lzdGVyICh2Z19kZXZmc19oYW5kbGVbdmdfcHRyLT52Z19udW1iZXJdKTsK LQotCWx2bV9kb19yZW1vdmVfcHJvY19lbnRyeV9vZl92ZyAoIHZnX3B0cik7Ci0KIAlQX0tGUkVF KCIlcyAtLSBrZnJlZSAlZFxuIiwgbHZtX25hbWUsIF9fTElORV9fKTsKIAlrZnJlZSh2Z19wdHIp OwogCXZnW1ZHX0NIUihtaW5vcildID0gTlVMTDsKQEAgLTIwODksNyArMTc0NSw3IEBACiAJcHZf cHRyID0gdmdfcHRyLT5wdltwXSA9IGttYWxsb2Moc2l6ZW9mKHB2X3QpLEdGUF9LRVJORUwpOwog CWlmIChwdl9wdHIgPT0gTlVMTCkgewogCQlwcmludGsoS0VSTl9DUklUCi0JCSAgICAgICAiJXMg LS0gVkdfQ1JFQVRFOiBrbWFsbG9jIGVycm9yIFBWIGF0IGxpbmUgJWRcbiIsCisJCSAgICAgICAi JXMgLS0gUFZfQ1JFQVRFOiBrbWFsbG9jIGVycm9yIFBWIGF0IGxpbmUgJWRcbiIsCiAJCSAgICAg ICBsdm1fbmFtZSwgX19MSU5FX18pOwogCQlyZXR1cm4gLUVOT01FTTsKIAl9CkBAIC0yMTAzLDE4 ICsxNzU5LDIwIEBACiAJcHZfcHRyLT5wdl9zdGF0dXMgPSBQVl9BQ1RJVkU7CiAJdmdfcHRyLT5w dl9hY3QrKzsKIAl2Z19wdHItPnB2X2N1cisrOworCWx2bV9mc19jcmVhdGVfcHYodmdfcHRyLCBw dl9wdHIpOwogCiAJcmV0dXJuIDA7CiB9IC8qIGx2bV9kb19wdl9jcmVhdGUoKSAqLwogCiAKIC8q Ci0gKiBjaGFyYWN0ZXIgZGV2aWNlIHN1cHBvcnQgZnVuY3Rpb24gcGh5c2ljYWwgdm9sdW1lIGNy ZWF0ZQorICogY2hhcmFjdGVyIGRldmljZSBzdXBwb3J0IGZ1bmN0aW9uIHBoeXNpY2FsIHZvbHVt ZSByZW1vdmUKICAqLwogc3RhdGljIGludCBsdm1fZG9fcHZfcmVtb3ZlKHZnX3QgKnZnX3B0ciwg dWxvbmcgcCkgewogCXB2X3QgKnB2X3B0ciA9IHZnX3B0ci0+cHZbcF07CiAKLQlsdm1fZG9fcmVt b3ZlX3Byb2NfZW50cnlfb2ZfcHYgKCB2Z19wdHIsIHB2X3B0cik7CisJbHZtX2ZzX3JlbW92ZV9w dih2Z19wdHIsIHB2X3B0cik7CisKIAl2Z19wdHItPnBlX3RvdGFsIC09IHB2X3B0ci0+cGVfdG90 YWw7CiAJdmdfcHRyLT5wdl9jdXItLTsKIAl2Z19wdHItPnB2X2FjdC0tOwpAQCAtMjEyOCwxMiAr MTc4NiwzOSBAQAogfQogCiAKK3N0YXRpYyB2b2lkIF9fdXBkYXRlX2hhcmRibG9ja3NpemUobHZf dCAqbHYpIHsKKwlpbnQgbGUsIGU7CisJaW50IG1heF9oYXJkYmxvY2tzaXplID0gMCwgaGFyZGJs b2Nrc2l6ZTsKKworCWZvciAobGUgPSAwOyBsZSA8IGx2LT5sdl9hbGxvY2F0ZWRfbGU7IGxlKysp IHsKKwkJaGFyZGJsb2Nrc2l6ZSA9IGdldF9oYXJkYmxvY2tzaXplKGx2LT5sdl9jdXJyZW50X3Bl W2xlXS5kZXYpOworCQlpZiAoaGFyZGJsb2Nrc2l6ZSA9PSAwKQorCQkJaGFyZGJsb2Nrc2l6ZSA9 IDUxMjsKKwkJaWYgKGhhcmRibG9ja3NpemUgPiBtYXhfaGFyZGJsb2Nrc2l6ZSkKKwkJCW1heF9o YXJkYmxvY2tzaXplID0gaGFyZGJsb2Nrc2l6ZTsKKwl9CisKKwlpZiAobHYtPmx2X2FjY2VzcyAm IExWX1NOQVBTSE9UKSB7CisJCWZvciAoZSA9IDA7IGUgPCBsdi0+bHZfcmVtYXBfZW5kOyBlKysp IHsKKwkJCWhhcmRibG9ja3NpemUgPQorCQkJCWdldF9oYXJkYmxvY2tzaXplKAorCQkJCQlsdi0+ bHZfYmxvY2tfZXhjZXB0aW9uW2VdLnJkZXZfbmV3KTsKKwkJCWlmIChoYXJkYmxvY2tzaXplID09 IDApCisJCQkJaGFyZGJsb2Nrc2l6ZSA9IDUxMjsKKwkJCWlmIChoYXJkYmxvY2tzaXplID4gbWF4 X2hhcmRibG9ja3NpemUpCisJCQkJbWF4X2hhcmRibG9ja3NpemUgPSBoYXJkYmxvY2tzaXplOwor CQl9CisJfQorCisJbHZtX2hhcmRzZWN0c2l6ZXNbTUlOT1IobHYtPmx2X2RldildID0gbWF4X2hh cmRibG9ja3NpemU7Cit9CisKIC8qCiAgKiBjaGFyYWN0ZXIgZGV2aWNlIHN1cHBvcnQgZnVuY3Rp b24gbG9naWNhbCB2b2x1bWUgY3JlYXRlCiAgKi8KIHN0YXRpYyBpbnQgbHZtX2RvX2x2X2NyZWF0 ZShpbnQgbWlub3IsIGNoYXIgKmx2X25hbWUsIGx2X3QgKmx2KQogewotCWludCBlLCByZXQsIGws IGxlLCBsX25ldywgcCwgc2l6ZTsKKwlpbnQgZSwgcmV0LCBsLCBsZSwgbF9uZXcsIHAsIHNpemUs IGFjdGl2YXRlID0gMTsKIAl1bG9uZyBsdl9zdGF0dXNfc2F2ZTsKIAlsdl9ibG9ja19leGNlcHRp b25fdCAqbHZiZSA9IGx2LT5sdl9ibG9ja19leGNlcHRpb247CiAJdmdfdCAqdmdfcHRyID0gdmdb VkdfQ0hSKG1pbm9yKV07CkBAIC0yMTQzLDcgKzE4MjgsNyBAQAogCWlmIChsdi0+bHZfY2h1bmtf c2l6ZSA+IExWTV9TTkFQU0hPVF9NQVhfQ0hVTkspCiAJCXJldHVybiAtRUlOVkFMOwogCi0JZm9y IChsID0gMDsgbCA8IHZnX3B0ci0+bHZfbWF4OyBsKyspIHsKKwlmb3IgKGwgPSAwOyBsIDwgdmdf cHRyLT5sdl9jdXI7IGwrKykgewogCQlpZiAodmdfcHRyLT5sdltsXSAhPSBOVUxMICYmCiAJCSAg ICBzdHJjbXAodmdfcHRyLT5sdltsXS0+bHZfbmFtZSwgbHZfbmFtZSkgPT0gMCkKIAkJCXJldHVy biAtRUVYSVNUOwpAQCAtMjE3NywxNiArMTg2MiwxNyBAQAogCWx2X3B0ci0+bHZfc25hcHNob3Rf bmV4dCA9IE5VTEw7CiAJbHZfcHRyLT5sdl9ibG9ja19leGNlcHRpb24gPSBOVUxMOwogCWx2X3B0 ci0+bHZfaW9idWYgPSBOVUxMOworCWx2X3B0ci0+bHZfQ09XX3RhYmxlX2lvYnVmID0gTlVMTDsK IAlsdl9wdHItPmx2X3NuYXBzaG90X2hhc2hfdGFibGUgPSBOVUxMOwogCWx2X3B0ci0+bHZfc25h cHNob3RfaGFzaF90YWJsZV9zaXplID0gMDsKIAlsdl9wdHItPmx2X3NuYXBzaG90X2hhc2hfbWFz ayA9IDA7Ci0JbHZfcHRyLT5sdl9DT1dfdGFibGVfcGFnZSA9IE5VTEw7CiAJaW5pdF9NVVRFWCgm bHZfcHRyLT5sdl9zbmFwc2hvdF9zZW0pOwogCWx2X3B0ci0+bHZfc25hcHNob3RfdXNlX3JhdGUg PSAwOworCiAJdmdfcHRyLT5sdltsXSA9IGx2X3B0cjsKIAogCS8qIGdldCB0aGUgUEUgc3RydWN0 dXJlcyBmcm9tIHVzZXIgc3BhY2UgaWYgdGhpcwotCSAgIGlzIG5vIHNuYXBzaG90IGxvZ2ljYWwg dm9sdW1lICovCisJICAgaXMgbm90IGEgc25hcHNob3QgbG9naWNhbCB2b2x1bWUgKi8KIAlpZiAo IShsdl9wdHItPmx2X2FjY2VzcyAmIExWX1NOQVBTSE9UKSkgewogCQlzaXplID0gbHZfcHRyLT5s dl9hbGxvY2F0ZWRfbGUgKiBzaXplb2YocGVfdCk7CiAJCWlmICgobHZfcHRyLT5sdl9jdXJyZW50 X3BlID0gdm1hbGxvYyhzaXplKSkgPT0gTlVMTCkgewpAQCAtMjIzOCw2ICsxOTI0LDE2IEBACiAJ CQkJCXZnX3B0ci0+bHZbbF0gPSBOVUxMOwogCQkJCQlyZXR1cm4gLUVGQVVMVDsKIAkJCQl9CisK KwkJCQlpZihsdl9wdHItPmx2X2Jsb2NrX2V4Y2VwdGlvblswXS5yc2VjdG9yX29yZyA9PQorCQkJ CSAgIExWTV9TTkFQU0hPVF9EUk9QUEVEX1NFQ1RPUikKKwkJCQl7CisJCQkJCXByaW50ayhLRVJO X1dBUk5JTkcKKyAgICIlcyAtLSBsdm1fZG9fbHZfY3JlYXRlOiBzbmFwc2hvdCBoYXMgYmVlbiBk cm9wcGVkIGFuZCB3aWxsIG5vdCBiZSBhY3RpdmF0ZWRcbiIsCisJCQkJCSAgICAgICBsdm1fbmFt ZSk7CisJCQkJCWFjdGl2YXRlID0gMDsKKwkJCQl9CisKIAkJCQkvKiBwb2ludCB0byB0aGUgb3Jp Z2luYWwgbG9naWNhbCB2b2x1bWUgKi8KIAkJCQlsdl9wdHIgPSBsdl9wdHItPmx2X3NuYXBzaG90 X29yZzsKIApAQCAtMjI3MSwxMCArMTk2NywxMyBAQAogCQkJCQkJICAgICAgIGx2X3B0ci0+bHZf YmxvY2tfZXhjZXB0aW9uW2VdLnJzZWN0b3Jfb3JnLCBsdl9wdHIpOwogCQkJCS8qIG5lZWQgdG8g ZmlsbCB0aGUgQ09XIGV4Y2VwdGlvbiB0YWJsZSBkYXRhCiAJCQkJICAgaW50byB0aGUgcGFnZSBm b3IgZGlzayBpL28gKi8KLQkJCQlsdm1fc25hcHNob3RfZmlsbF9DT1dfcGFnZSh2Z19wdHIsIGx2 X3B0cik7CisJCQkJaWYobHZtX3NuYXBzaG90X2ZpbGxfQ09XX3BhZ2UodmdfcHRyLCBsdl9wdHIp KSB7CisJCQkJCWtmcmVlKGx2X3B0cik7CisJCQkJCXZnX3B0ci0+bHZbbF0gPSBOVUxMOworCQkJ CQlyZXR1cm4gLUVJTlZBTDsKKwkJCQl9CiAJCQkJaW5pdF93YWl0cXVldWVfaGVhZCgmbHZfcHRy LT5sdl9zbmFwc2hvdF93YWl0KTsKIAkJCX0gZWxzZSB7Ci0JCQkJdmZyZWUobHZfcHRyLT5sdl9i bG9ja19leGNlcHRpb24pOwogCQkJCWtmcmVlKGx2X3B0cik7CiAJCQkJdmdfcHRyLT5sdltsXSA9 IE5VTEw7CiAJCQkJcmV0dXJuIC1FRkFVTFQ7CkBAIC0yMjk2LDIxICsxOTk1LDcgQEAKIAl2Z19w dHItPmx2X2N1cisrOwogCWx2X3B0ci0+bHZfc3RhdHVzID0gbHZfc3RhdHVzX3NhdmU7CiAKLQl7 Ci0JY2hhciAqbHZfdG1wLCAqbHZfYnVmID0gbHYtPmx2X25hbWU7Ci0KLQlzdHJ0b2sobHYtPmx2 X25hbWUsICIvIik7ICAgICAgIC8qIC9kZXYgKi8KLQl3aGlsZSgobHZfdG1wID0gc3RydG9rKE5V TEwsICIvIikpICE9IE5VTEwpCi0JCWx2X2J1ZiA9IGx2X3RtcDsKLQotCWx2X2RldmZzX2hhbmRs ZVtsdi0+bHZfbnVtYmVyXSA9IGRldmZzX3JlZ2lzdGVyKAotCQl2Z19kZXZmc19oYW5kbGVbdmdf cHRyLT52Z19udW1iZXJdLCBsdl9idWYsCi0JCURFVkZTX0ZMX0RFRkFVTFQsIExWTV9CTEtfTUFK T1IsIGx2LT5sdl9udW1iZXIsCi0JCVNfSUZCTEsgfCBTX0lSVVNSIHwgU19JV1VTUiB8IFNfSVJH UlAsCi0JCSZsdm1fYmxrX2RvcHMsIE5VTEwpOwotCX0KLQotCWx2bV9kb19jcmVhdGVfcHJvY19l bnRyeV9vZl9sdiAoIHZnX3B0ciwgbHZfcHRyKTsKKwlfX3VwZGF0ZV9oYXJkYmxvY2tzaXplKGx2 X3B0cik7CiAKIAkvKiBvcHRpb25hbGx5IGFkZCBvdXIgbmV3IHNuYXBzaG90IExWICovCiAJaWYg KGx2X3B0ci0+bHZfYWNjZXNzICYgTFZfU05BUFNIT1QpIHsKQEAgLTIzMjcsNiArMjAxMiw3IEBA CiAJCW9yZy0+bHZfYWNjZXNzIHw9IExWX1NOQVBTSE9UX09SRzsKIAkJbHZfcHRyLT5sdl9hY2Nl c3MgJj0gfkxWX1NOQVBTSE9UX09SRzsgLyogdGhpcyBjYW4gb25seSBoaWRlIGFuIHVzZXJzcGFj ZSBidWcgKi8KIAorCiAJCS8qIExpbmsgaW4gdGhlIGxpc3Qgb2Ygc25hcHNob3Qgdm9sdW1lcyAq LwogCQlmb3IgKGxhc3QgPSBvcmc7IGxhc3QtPmx2X3NuYXBzaG90X25leHQ7IGxhc3QgPSBsYXN0 LT5sdl9zbmFwc2hvdF9uZXh0KTsKIAkJbHZfcHRyLT5sdl9zbmFwc2hvdF9wcmV2ID0gbGFzdDsK QEAgLTIzMzUsNyArMjAyMSwxMSBAQAogCX0KIAogCS8qIGFjdGl2YXRlIHRoZSBsb2dpY2FsIHZv bHVtZSAqLwotCWx2X3B0ci0+bHZfc3RhdHVzIHw9IExWX0FDVElWRTsKKwlpZihhY3RpdmF0ZSkK KwkJbHZfcHRyLT5sdl9zdGF0dXMgfD0gTFZfQUNUSVZFOworCWVsc2UKKwkJbHZfcHRyLT5sdl9z dGF0dXMgJj0gfkxWX0FDVElWRTsKKwogCWlmICggbHZfcHRyLT5sdl9hY2Nlc3MgJiBMVl9XUklU RSkKIAkJc2V0X2RldmljZV9ybyhsdl9wdHItPmx2X2RldiwgMCk7CiAJZWxzZQpAQCAtMjM1MCw2 ICsyMDQwLDcgQEAKIAogCWx2X3B0ci0+dmcgPSB2Z19wdHI7CiAKKwlsdm1fZnNfY3JlYXRlX2x2 KHZnX3B0ciwgbHZfcHRyKTsKIAlyZXR1cm4gMDsKIH0gLyogbHZtX2RvX2x2X2NyZWF0ZSgpICov CiAKQEAgLTIzODcsNiArMjA3OCw4IEBACiAJICAgIGx2X3B0ci0+bHZfc25hcHNob3RfbmV4dCAh PSBOVUxMKQogCQlyZXR1cm4gLUVQRVJNOwogCisJbHZtX2ZzX3JlbW92ZV9sdih2Z19wdHIsIGx2 X3B0cik7CisKIAlpZiAobHZfcHRyLT5sdl9hY2Nlc3MgJiBMVl9TTkFQU0hPVCkgewogCQkvKgog CQkgKiBBdG9taWNhbGx5IG1ha2UgdGhlIHRoZSBzbmFwc2hvdCBpbnZpc2libGUKQEAgLTI0MDEs MTEgKzIwOTQsMTMgQEAKIAkJCWx2X3B0ci0+bHZfc25hcHNob3RfbmV4dC0+bHZfc25hcHNob3Rf cHJldiA9CiAJCQkgICAgbHZfcHRyLT5sdl9zbmFwc2hvdF9wcmV2OwogCQl9Ci0JCXVwKCZvcmct Pmx2X3NuYXBzaG90X3NlbSk7CiAKIAkJLyogbm8gbW9yZSBzbmFwc2hvdHM/ICovCi0JCWlmICgh b3JnLT5sdl9zbmFwc2hvdF9uZXh0KQorCQlpZiAoIW9yZy0+bHZfc25hcHNob3RfbmV4dCkgewog CQkJb3JnLT5sdl9hY2Nlc3MgJj0gfkxWX1NOQVBTSE9UX09SRzsKKwkJfQorCQl1cCgmb3JnLT5s dl9zbmFwc2hvdF9zZW0pOworCiAJCWx2bV9zbmFwc2hvdF9yZWxlYXNlKGx2X3B0cik7CiAKIAkJ LyogVXBkYXRlIHRoZSBWRyBQRShzKSB1c2VkIGJ5IHNuYXBzaG90IHJlc2VydmUgc3BhY2UuICov CkBAIC0yNDQ4LDEwICsyMTQzLDYgQEAKIAkJdmZyZWUobHZfcHRyLT5sdl9jdXJyZW50X3BlKTsK IAl9CiAKLQlkZXZmc191bnJlZ2lzdGVyKGx2X2RldmZzX2hhbmRsZVtsdl9wdHItPmx2X251bWJl cl0pOwotCi0JbHZtX2RvX3JlbW92ZV9wcm9jX2VudHJ5X29mX2x2ICggdmdfcHRyLCBsdl9wdHIp OwotCiAJUF9LRlJFRSgiJXMgLS0ga2ZyZWUgJWRcbiIsIGx2bV9uYW1lLCBfX0xJTkVfXyk7CiAJ a2ZyZWUobHZfcHRyKTsKIAl2Z19wdHItPmx2W2xdID0gTlVMTDsKQEAgLTI0NjEsMjA0ICsyMTUy LDIxMiBAQAogCiAKIC8qCi0gKiBjaGFyYWN0ZXIgZGV2aWNlIHN1cHBvcnQgZnVuY3Rpb24gbG9n aWNhbCB2b2x1bWUgZXh0ZW5kIC8gcmVkdWNlCisgKiBsb2dpY2FsIHZvbHVtZSBleHRlbmQgLyBy ZWR1Y2UKICAqLwotc3RhdGljIGludCBsdm1fZG9fbHZfZXh0ZW5kX3JlZHVjZShpbnQgbWlub3Is IGNoYXIgKmx2X25hbWUsIGx2X3QgKmx2KQotewotCXVsb25nIGVuZCwgbCwgbGUsIHAsIHNpemUs IG9sZF9hbGxvY2F0ZWRfbGU7Ci0JdmdfdCAqdmdfcHRyID0gdmdbVkdfQ0hSKG1pbm9yKV07Ci0J bHZfdCAqbHZfcHRyOwotCXBlX3QgKnBlOworc3RhdGljIGludCBfX2V4dGVuZF9yZWR1Y2Vfc25h cHNob3QodmdfdCAqdmdfcHRyLCBsdl90ICpvbGRfbHYsIGx2X3QgKm5ld19sdikgeworCXVsb25n IHNpemU7CisJbHZfYmxvY2tfZXhjZXB0aW9uX3QgKmx2YmU7CiAKLQlpZiAoKHBlcCA9IGx2LT5s dl9jdXJyZW50X3BlKSA9PSBOVUxMKSByZXR1cm4gLUVJTlZBTDsKKwlpZiAoIW5ld19sdi0+bHZf YmxvY2tfZXhjZXB0aW9uKQorCQlyZXR1cm4gLUVOWElPOwogCi0JZm9yIChsID0gMDsgbCA8IHZn X3B0ci0+bHZfbWF4OyBsKyspIHsKLQkJaWYgKHZnX3B0ci0+bHZbbF0gIT0gTlVMTCAmJgotCQkg ICAgc3RyY21wKHZnX3B0ci0+bHZbbF0tPmx2X25hbWUsIGx2X25hbWUpID09IDApCi0JCQlicmVh azsKKwlzaXplID0gbmV3X2x2LT5sdl9yZW1hcF9lbmQgKiBzaXplb2YobHZfYmxvY2tfZXhjZXB0 aW9uX3QpOworCWlmICgobHZiZSA9IHZtYWxsb2Moc2l6ZSkpID09IE5VTEwpIHsKKwkJcHJpbnRr KEtFUk5fQ1JJVAorCQkgICAgICAgIiVzIC0tIGx2bV9kb19sdl9leHRlbmRfcmVkdWNlOiB2bWFs bG9jICIKKwkJICAgICAgICJlcnJvciBMVl9CTE9DS19FWENFUFRJT04gb2YgJWx1IEJ5dGUgYXQg bGluZSAlZFxuIiwKKwkJICAgICAgIGx2bV9uYW1lLCBzaXplLCBfX0xJTkVfXyk7CisJCXJldHVy biAtRU5PTUVNOwogCX0KLQlpZiAobCA9PSB2Z19wdHItPmx2X21heCkgcmV0dXJuIC1FTlhJTzsK LQlsdl9wdHIgPSB2Z19wdHItPmx2W2xdOwogCi0JLyogY2hlY2sgZm9yIGFjdGl2ZSBzbmFwc2hv dCAqLwotCWlmIChsdi0+bHZfYWNjZXNzICYgTFZfU05BUFNIT1QpCi0JewotCQl1bG9uZyBlOwot CQlsdl9ibG9ja19leGNlcHRpb25fdCAqbHZiZSwgKmx2YmVfb2xkOwotCQlzdHJ1Y3QgbGlzdF9o ZWFkICogbHZzX2hhc2hfdGFibGVfb2xkOwotCi0JCWlmIChsdi0+bHZfYmxvY2tfZXhjZXB0aW9u ID09IE5VTEwpIHJldHVybiAtRU5YSU87Ci0JCXNpemUgPSBsdi0+bHZfcmVtYXBfZW5kICogc2l6 ZW9mICggbHZfYmxvY2tfZXhjZXB0aW9uX3QpOwotCQlpZiAoKGx2YmUgPSB2bWFsbG9jKHNpemUp KSA9PSBOVUxMKQotCQl7Ci0JCQlwcmludGsoS0VSTl9DUklUCi0JCQkiJXMgLS0gbHZtX2RvX2x2 X2V4dGVuZF9yZWR1Y2U6IHZtYWxsb2MgZXJyb3IgTFZfQkxPQ0tfRVhDRVBUSU9OICIKLQkJCSAg ICAgICAib2YgJWx1IEJ5dGUgYXQgbGluZSAlZFxuIiwKLQkJCSAgICAgICBsdm1fbmFtZSwgc2l6 ZSwgX19MSU5FX18pOwotCQkJcmV0dXJuIC1FTk9NRU07Ci0JCX0KLQkJaWYgKGx2LT5sdl9yZW1h cF9lbmQgPiBsdl9wdHItPmx2X3JlbWFwX2VuZCkKLQkJewotCQkJaWYgKGNvcHlfZnJvbV91c2Vy KGx2YmUsIGx2LT5sdl9ibG9ja19leGNlcHRpb24sIHNpemUpKQotCQkJewotCQkJCXZmcmVlKGx2 YmUpOwotCQkJCXJldHVybiAtRUZBVUxUOwotCQkJfQotCQl9Ci0KLQkJbHZiZV9vbGQgPSBsdl9w dHItPmx2X2Jsb2NrX2V4Y2VwdGlvbjsKLQkJbHZzX2hhc2hfdGFibGVfb2xkID0gbHZfcHRyLT5s dl9zbmFwc2hvdF9oYXNoX3RhYmxlOwotCi0JCS8qIHdlIG5lZWQgdG8gcGxheSBvbiB0aGUgc2Fm ZSBzaWRlIGhlcmUuLi4gKi8KLQkJZG93bigmbHZfcHRyLT5sdl9zbmFwc2hvdF9vcmctPmx2X3Nu YXBzaG90X3NlbSk7Ci0JCWlmIChsdl9wdHItPmx2X2Jsb2NrX2V4Y2VwdGlvbiA9PSBOVUxMIHx8 Ci0JCSAgICBsdl9wdHItPmx2X3JlbWFwX3B0ciA+IGx2X3B0ci0+bHZfcmVtYXBfZW5kKQotCQl7 Ci0JCQl1cCgmbHZfcHRyLT5sdl9zbmFwc2hvdF9vcmctPmx2X3NuYXBzaG90X3NlbSk7Ci0JCQl2 ZnJlZShsdmJlKTsKLQkJCXJldHVybiAtRVBFUk07Ci0JCX0KLQkJbWVtY3B5KGx2YmUsCi0JCSAg ICAgICBsdl9wdHItPmx2X2Jsb2NrX2V4Y2VwdGlvbiwKLQkJICAgICAgIChsdi0+bHZfcmVtYXBf ZW5kID4gbHZfcHRyLT5sdl9yZW1hcF9lbmQgPwotCQkJbHZfcHRyLT5sdl9yZW1hcF9wdHIgOiBs di0+bHZfcmVtYXBfZW5kKSAqIHNpemVvZihsdl9ibG9ja19leGNlcHRpb25fdCkpOwotCi0JCWx2 X3B0ci0+bHZfYmxvY2tfZXhjZXB0aW9uID0gbHZiZTsKLQkJbHZfcHRyLT5sdl9yZW1hcF9lbmQg PSBsdi0+bHZfcmVtYXBfZW5kOwotCQlpZiAobHZtX3NuYXBzaG90X2FsbG9jX2hhc2hfdGFibGUo bHZfcHRyKSAhPSAwKQotCQl7Ci0JCQlsdm1fZHJvcF9zbmFwc2hvdChsdl9wdHIsICJubyBtZW1v cnkgZm9yIGhhc2ggdGFibGUiKTsKLQkJCXVwKCZsdl9wdHItPmx2X3NuYXBzaG90X29yZy0+bHZf c25hcHNob3Rfc2VtKTsKLQkJCXZmcmVlKGx2YmVfb2xkKTsKLQkJCXZmcmVlKGx2c19oYXNoX3Rh YmxlX29sZCk7Ci0JCQlyZXR1cm4gLUVOT01FTTsKLQkJfQotCi0JCWZvciAoZSA9IDA7IGUgPCBs dl9wdHItPmx2X3JlbWFwX3B0cjsgZSsrKQotCQkJbHZtX2hhc2hfbGluayAobHZfcHRyLT5sdl9i bG9ja19leGNlcHRpb24gKyBlLAotCQkJCSAgICAgICBsdl9wdHItPmx2X2Jsb2NrX2V4Y2VwdGlv bltlXS5yZGV2X29yZywKLQkJCQkgICAgICAgbHZfcHRyLT5sdl9ibG9ja19leGNlcHRpb25bZV0u cnNlY3Rvcl9vcmcsIGx2X3B0cik7Ci0KLQkJdXAoJmx2X3B0ci0+bHZfc25hcHNob3Rfb3JnLT5s dl9zbmFwc2hvdF9zZW0pOwotCi0JCXZmcmVlKGx2YmVfb2xkKTsKLQkJdmZyZWUobHZzX2hhc2hf dGFibGVfb2xkKTsKKwlpZiAoKG5ld19sdi0+bHZfcmVtYXBfZW5kID4gb2xkX2x2LT5sdl9yZW1h cF9lbmQpICYmCisJICAgIChjb3B5X2Zyb21fdXNlcihsdmJlLCBuZXdfbHYtPmx2X2Jsb2NrX2V4 Y2VwdGlvbiwgc2l6ZSkpKSB7CisJCXZmcmVlKGx2YmUpOworCQlyZXR1cm4gLUVGQVVMVDsKKwl9 CisJbmV3X2x2LT5sdl9ibG9ja19leGNlcHRpb24gPSBsdmJlOwogCi0JCXJldHVybiAwOworCWlm IChsdm1fc25hcHNob3RfYWxsb2NfaGFzaF90YWJsZShuZXdfbHYpKSB7CisJCXZmcmVlKG5ld19s di0+bHZfYmxvY2tfZXhjZXB0aW9uKTsKKwkJcmV0dXJuIC1FTk9NRU07CiAJfQogCisJcmV0dXJu IDA7Cit9CisKK3N0YXRpYyBpbnQgX19leHRlbmRfcmVkdWNlKHZnX3QgKnZnX3B0ciwgbHZfdCAq b2xkX2x2LCBsdl90ICpuZXdfbHYpIHsKKwl1bG9uZyBzaXplLCBsLCBwLCBlbmQ7CisJcGVfdCAq cGU7CiAKLQkvKiB3ZSBkcm9wIGluIGhlcmUgaW4gY2FzZSBpdCBpcyBhbiBvcmlnaW5hbCBsb2dp Y2FsIHZvbHVtZSAqLwotCWlmICgocGUgPSB2bWFsbG9jKHNpemUgPSBsdi0+bHZfY3VycmVudF9s ZSAqIHNpemVvZihwZV90KSkpID09IE5VTEwpIHsKKwkvKiBhbGxvY2F0ZSBzcGFjZSBmb3IgbmV3 IHBlIHN0cnVjdHVyZXMgKi8KKwlzaXplID0gbmV3X2x2LT5sdl9jdXJyZW50X2xlICogc2l6ZW9m KHBlX3QpOworCWlmICgocGUgPSB2bWFsbG9jKHNpemUpKSA9PSBOVUxMKSB7CiAJCXByaW50ayhL RVJOX0NSSVQKLQkJIiVzIC0tIGx2bV9kb19sdl9leHRlbmRfcmVkdWNlOiB2bWFsbG9jIGVycm9y IExWX0NVUlJFTlRfUEUgIgotCQkgICAgICAgIm9mICVsdSBCeXRlIGF0IGxpbmUgJWRcbiIsCisJ CSAgICAgICAiJXMgLS0gbHZtX2RvX2x2X2V4dGVuZF9yZWR1Y2U6ICIKKwkJICAgICAgICJ2bWFs bG9jIGVycm9yIExWX0NVUlJFTlRfUEUgb2YgJWx1IEJ5dGUgYXQgbGluZSAlZFxuIiwKIAkJICAg ICAgIGx2bV9uYW1lLCBzaXplLCBfX0xJTkVfXyk7CiAJCXJldHVybiAtRU5PTUVNOwogCX0KKwog CS8qIGdldCB0aGUgUEUgc3RydWN0dXJlcyBmcm9tIHVzZXIgc3BhY2UgKi8KLQlpZiAoY29weV9m cm9tX3VzZXIocGUsIHBlcCwgc2l6ZSkpIHsKKwlpZiAoY29weV9mcm9tX3VzZXIocGUsIG5ld19s di0+bHZfY3VycmVudF9wZSwgc2l6ZSkpIHsKKwkJaWYob2xkX2x2LT5sdl9hY2Nlc3MgJiBMVl9T TkFQU0hPVCkKKwkJCXZmcmVlKG5ld19sdi0+bHZfc25hcHNob3RfaGFzaF90YWJsZSk7CiAJCXZm cmVlKHBlKTsKIAkJcmV0dXJuIC1FRkFVTFQ7CiAJfQogCisJbmV3X2x2LT5sdl9jdXJyZW50X3Bl ID0gcGU7CisKIAkvKiByZWR1Y2UgYWxsb2NhdGlvbiBjb3VudGVycyBvbiBQVihzKSAqLwotCWZv ciAobGUgPSAwOyBsZSA8IGx2X3B0ci0+bHZfYWxsb2NhdGVkX2xlOyBsZSsrKSB7CisJZm9yIChs ID0gMDsgbCA8IG9sZF9sdi0+bHZfYWxsb2NhdGVkX2xlOyBsKyspIHsKIAkJdmdfcHRyLT5wZV9h bGxvY2F0ZWQtLTsKIAkJZm9yIChwID0gMDsgcCA8IHZnX3B0ci0+cHZfY3VyOyBwKyspIHsKIAkJ CWlmICh2Z19wdHItPnB2W3BdLT5wdl9kZXYgPT0KLQkJCWx2X3B0ci0+bHZfY3VycmVudF9wZVts ZV0uZGV2KSB7CisJCQkgICAgb2xkX2x2LT5sdl9jdXJyZW50X3BlW2xdLmRldikgewogCQkJCXZn X3B0ci0+cHZbcF0tPnBlX2FsbG9jYXRlZC0tOwogCQkJCWJyZWFrOwogCQkJfQogCQl9CiAJfQog Ci0KLQkvKiBzYXZlIHBvaW50ZXIgdG8gIm9sZCIgbHYvcGUgcG9pbnRlciBhcnJheSAqLwotCXBl cDEgPSBsdl9wdHItPmx2X2N1cnJlbnRfcGU7Ci0JZW5kID0gbHZfcHRyLT5sdl9jdXJyZW50X2xl OwotCi0JLyogc2F2ZSBvcGVuIGNvdW50ZXIuLi4gKi8KLQlsdi0+bHZfb3BlbiA9IGx2X3B0ci0+ bHZfb3BlbjsKLQlsdi0+bHZfc25hcHNob3RfcHJldiA9IGx2X3B0ci0+bHZfc25hcHNob3RfcHJl djsKLQlsdi0+bHZfc25hcHNob3RfbmV4dCA9IGx2X3B0ci0+bHZfc25hcHNob3RfbmV4dDsKLQls di0+bHZfc25hcHNob3Rfb3JnICA9IGx2X3B0ci0+bHZfc25hcHNob3Rfb3JnOwotCi0JbHYtPmx2 X2N1cnJlbnRfcGUgPSBwZTsKLQotCS8qIHNhdmUgIyBvZiBvbGQgYWxsb2NhdGVkIGxvZ2ljYWwg ZXh0ZW50cyAqLwotCW9sZF9hbGxvY2F0ZWRfbGUgPSBsdl9wdHItPmx2X2FsbG9jYXRlZF9sZTsK LQotCS8qIGNvcHkgcHJlbG9hZGVkIExWICovCi0JbWVtY3B5KChjaGFyICopIGx2X3B0ciwgKGNo YXIgKikgbHYsIHNpemVvZihsdl90KSk7Ci0KLQlsdm1fZ2VuZGlzay5wYXJ0W01JTk9SKGx2X3B0 ci0+bHZfZGV2KV0uc3RhcnRfc2VjdCA9IDA7Ci0JbHZtX2dlbmRpc2sucGFydFtNSU5PUihsdl9w dHItPmx2X2RldildLm5yX3NlY3RzID0gbHZfcHRyLT5sdl9zaXplOwotCWx2bV9zaXplW01JTk9S KGx2X3B0ci0+bHZfZGV2KV0gPSBsdl9wdHItPmx2X3NpemUgPj4gMTsKLQkvKiB2Z19sdl9tYXAg YXJyYXkgZG9lc24ndCBoYXZlIHRvIGJlIGNoYW5nZWQgaGVyZSAqLwotCi0JTFZNX0NPUlJFQ1Rf UkVBRF9BSEVBRChsdl9wdHItPmx2X3JlYWRfYWhlYWQpOworCS8qIGV4dGVuZCB0aGUgUEUgY291 bnQgaW4gUFZzICovCisJZm9yIChsID0gMDsgbCA8IG5ld19sdi0+bHZfYWxsb2NhdGVkX2xlOyBs KyspIHsKKwkJdmdfcHRyLT5wZV9hbGxvY2F0ZWQrKzsKKwkJZm9yIChwID0gMDsgcCA8IHZnX3B0 ci0+cHZfY3VyOyBwKyspIHsKKwkJCWlmICh2Z19wdHItPnB2W3BdLT5wdl9kZXYgPT0KKyAgICAg ICAgICAgICAgICAgICAgICAgICAgICBuZXdfbHYtPmx2X2N1cnJlbnRfcGVbbF0uZGV2KSB7CisJ CQkJdmdfcHRyLT5wdltwXS0+cGVfYWxsb2NhdGVkKys7CisJCQkJYnJlYWs7CisJCQl9CisJCX0K Kwl9CiAKIAkvKiBzYXZlIGF2YWlsaWFibGUgaS9vIHN0YXRpc3RpYyBkYXRhICovCi0JLyogbGlu ZWFyIGxvZ2ljYWwgdm9sdW1lICovCi0JaWYgKGx2X3B0ci0+bHZfc3RyaXBlcyA8IDIpIHsKLQkJ LyogQ2hlY2sgd2hhdCBsYXN0IExFIHNoYWxsIGJlIHVzZWQgKi8KLQkJaWYgKGVuZCA+IGx2X3B0 ci0+bHZfY3VycmVudF9sZSkgZW5kID0gbHZfcHRyLT5sdl9jdXJyZW50X2xlOwotCQlmb3IgKGxl ID0gMDsgbGUgPCBlbmQ7IGxlKyspIHsKLQkJCWx2X3B0ci0+bHZfY3VycmVudF9wZVtsZV0ucmVh ZHMgICs9IHBlcDFbbGVdLnJlYWRzOwotCQkJbHZfcHRyLT5sdl9jdXJyZW50X3BlW2xlXS53cml0 ZXMgKz0gcGVwMVtsZV0ud3JpdGVzOworCWlmIChvbGRfbHYtPmx2X3N0cmlwZXMgPCAyKSB7CS8q IGxpbmVhciBsb2dpY2FsIHZvbHVtZSAqLworCQllbmQgPSBtaW4ob2xkX2x2LT5sdl9jdXJyZW50 X2xlLCBuZXdfbHYtPmx2X2N1cnJlbnRfbGUpOworCQlmb3IgKGwgPSAwOyBsIDwgZW5kOyBsKysp IHsKKwkJCW5ld19sdi0+bHZfY3VycmVudF9wZVtsXS5yZWFkcyArPQorCQkJCW9sZF9sdi0+bHZf Y3VycmVudF9wZVtsXS5yZWFkczsKKworCQkJbmV3X2x2LT5sdl9jdXJyZW50X3BlW2xdLndyaXRl cyArPQorCQkJCW9sZF9sdi0+bHZfY3VycmVudF9wZVtsXS53cml0ZXM7CiAJCX0KLQkJLyogc3Ry aXBlZCBsb2dpY2FsIHZvbHVtZSAqLwotCX0gZWxzZSB7CisKKwl9IGVsc2UgewkJLyogc3RyaXBl ZCBsb2dpY2FsIHZvbHVtZSAqLwogCQl1aW50IGksIGosIHNvdXJjZSwgZGVzdCwgZW5kLCBvbGRf c3RyaXBlX3NpemUsIG5ld19zdHJpcGVfc2l6ZTsKIAotCQlvbGRfc3RyaXBlX3NpemUgPSBvbGRf YWxsb2NhdGVkX2xlIC8gbHZfcHRyLT5sdl9zdHJpcGVzOwotCQluZXdfc3RyaXBlX3NpemUgPSBs dl9wdHItPmx2X2FsbG9jYXRlZF9sZSAvIGx2X3B0ci0+bHZfc3RyaXBlczsKLQkJZW5kID0gb2xk X3N0cmlwZV9zaXplOwotCQlpZiAoZW5kID4gbmV3X3N0cmlwZV9zaXplKSBlbmQgPSBuZXdfc3Ry aXBlX3NpemU7CisJCW9sZF9zdHJpcGVfc2l6ZSA9IG9sZF9sdi0+bHZfYWxsb2NhdGVkX2xlIC8g b2xkX2x2LT5sdl9zdHJpcGVzOworCQluZXdfc3RyaXBlX3NpemUgPSBuZXdfbHYtPmx2X2FsbG9j YXRlZF9sZSAvIG5ld19sdi0+bHZfc3RyaXBlczsKKwkJZW5kID0gbWluKG9sZF9zdHJpcGVfc2l6 ZSwgbmV3X3N0cmlwZV9zaXplKTsKKwogCQlmb3IgKGkgPSBzb3VyY2UgPSBkZXN0ID0gMDsKLQkJ ICAgICBpIDwgbHZfcHRyLT5sdl9zdHJpcGVzOyBpKyspIHsKKwkJICAgICBpIDwgbmV3X2x2LT5s dl9zdHJpcGVzOyBpKyspIHsKIAkJCWZvciAoaiA9IDA7IGogPCBlbmQ7IGorKykgewotCQkJCWx2 X3B0ci0+bHZfY3VycmVudF9wZVtkZXN0ICsgal0ucmVhZHMgKz0KLQkJCQkgICAgcGVwMVtzb3Vy Y2UgKyBqXS5yZWFkczsKLQkJCQlsdl9wdHItPmx2X2N1cnJlbnRfcGVbZGVzdCArIGpdLndyaXRl cyArPQotCQkJCSAgICBwZXAxW3NvdXJjZSArIGpdLndyaXRlczsKKwkJCQluZXdfbHYtPmx2X2N1 cnJlbnRfcGVbZGVzdCArIGpdLnJlYWRzICs9CisJCQkJICAgIG9sZF9sdi0+bHZfY3VycmVudF9w ZVtzb3VyY2UgKyBqXS5yZWFkczsKKwkJCQluZXdfbHYtPmx2X2N1cnJlbnRfcGVbZGVzdCArIGpd LndyaXRlcyArPQorCQkJCSAgICBvbGRfbHYtPmx2X2N1cnJlbnRfcGVbc291cmNlICsgal0ud3Jp dGVzOwogCQkJfQogCQkJc291cmNlICs9IG9sZF9zdHJpcGVfc2l6ZTsKIAkJCWRlc3QgKz0gbmV3 X3N0cmlwZV9zaXplOwogCQl9CiAJfQogCi0JLyogZXh0ZW5kIHRoZSBQRSBjb3VudCBpbiBQVnMg Ki8KLQlmb3IgKGxlID0gMDsgbGUgPCBsdl9wdHItPmx2X2FsbG9jYXRlZF9sZTsgbGUrKykgewot CQl2Z19wdHItPnBlX2FsbG9jYXRlZCsrOwotCQlmb3IgKHAgPSAwOyBwIDwgdmdfcHRyLT5wdl9j dXI7IHArKykgewotCQkJaWYgKHZnX3B0ci0+cHZbcF0tPnB2X2RldiA9PQotICAgICAgICAgICAg ICAgICAgICAgICAgICAgIGx2X3B0ci0+bHZfY3VycmVudF9wZVtsZV0uZGV2KSB7Ci0JCQkJdmdf cHRyLT5wdltwXS0+cGVfYWxsb2NhdGVkKys7Ci0JCQkJYnJlYWs7Ci0JCQl9Ci0JCX0KLQl9CisJ cmV0dXJuIDA7Cit9CiAKLQl2ZnJlZSAoIHBlcDEpOwotCXBlcDEgPSBOVUxMOworc3RhdGljIGlu dCBsdm1fZG9fbHZfZXh0ZW5kX3JlZHVjZShpbnQgbWlub3IsIGNoYXIgKmx2X25hbWUsIGx2X3Qg Km5ld19sdikKK3sKKwlpbnQgcjsKKwl1bG9uZyBsLCBlLCBzaXplOworCXZnX3QgKnZnX3B0ciA9 IHZnW1ZHX0NIUihtaW5vcildOworCWx2X3QgKm9sZF9sdjsKKwlwZV90ICpwZTsKIAotCWlmIChs di0+bHZfYWNjZXNzICYgTFZfU05BUFNIT1RfT1JHKQotCXsKLQkJLyogQ29ycmVjdCB0aGUgc25h cHNob3Qgc2l6ZSBpbmZvcm1hdGlvbiAqLwotCQl3aGlsZSAoKGx2X3B0ciA9IGx2X3B0ci0+bHZf c25hcHNob3RfbmV4dCkgIT0gTlVMTCkKLQkJewotCQkJbHZfcHRyLT5sdl9jdXJyZW50X3BlID0g bHZfcHRyLT5sdl9zbmFwc2hvdF9vcmctPmx2X2N1cnJlbnRfcGU7Ci0JCQlsdl9wdHItPmx2X2Fs bG9jYXRlZF9sZSA9IGx2X3B0ci0+bHZfc25hcHNob3Rfb3JnLT5sdl9hbGxvY2F0ZWRfbGU7Ci0J CQlsdl9wdHItPmx2X2N1cnJlbnRfbGUgPSBsdl9wdHItPmx2X3NuYXBzaG90X29yZy0+bHZfY3Vy cmVudF9sZTsKLQkJCWx2X3B0ci0+bHZfc2l6ZSA9IGx2X3B0ci0+bHZfc25hcHNob3Rfb3JnLT5s dl9zaXplOwotCQkJbHZtX2dlbmRpc2sucGFydFtNSU5PUihsdl9wdHItPmx2X2RldildLm5yX3Nl Y3RzID0gbHZfcHRyLT5sdl9zaXplOwotCQkJbHZtX3NpemVbTUlOT1IobHZfcHRyLT5sdl9kZXYp XSA9IGx2X3B0ci0+bHZfc2l6ZSA+PiAxOworCWlmICgocGUgPSBuZXdfbHYtPmx2X2N1cnJlbnRf cGUpID09IE5VTEwpCisJCXJldHVybiAtRUlOVkFMOworCisJZm9yIChsID0gMDsgbCA8IHZnX3B0 ci0+bHZfbWF4OyBsKyspCisJCWlmICh2Z19wdHItPmx2W2xdICYmICFzdHJjbXAodmdfcHRyLT5s dltsXS0+bHZfbmFtZSwgbHZfbmFtZSkpCisJCQlicmVhazsKKworCWlmIChsID09IHZnX3B0ci0+ bHZfbWF4KQorCQlyZXR1cm4gLUVOWElPOworCisJb2xkX2x2ID0gdmdfcHRyLT5sdltsXTsKKwor CWlmIChvbGRfbHYtPmx2X2FjY2VzcyAmIExWX1NOQVBTSE9UKQorCQlyID0gX19leHRlbmRfcmVk dWNlX3NuYXBzaG90KHZnX3B0ciwgb2xkX2x2LCBuZXdfbHYpOworCWVsc2UKKwkJciA9IF9fZXh0 ZW5kX3JlZHVjZSh2Z19wdHIsIG9sZF9sdiwgbmV3X2x2KTsKKworCWlmKHIpCisJCXJldHVybiBy OworCisJLyogY29weSByZWxldmVudCBmaWVsZHMgKi8KKwlkb3duKCZvbGRfbHYtPmx2X3NuYXBz aG90X3NlbSk7CisKKwlpZihuZXdfbHYtPmx2X2FjY2VzcyAmIExWX1NOQVBTSE9UKSB7CisKKwkJ c2l6ZSA9IChuZXdfbHYtPmx2X3JlbWFwX2VuZCA+IG9sZF9sdi0+bHZfcmVtYXBfZW5kKSA/CisJ CQlvbGRfbHYtPmx2X3JlbWFwX3B0ciA6IG5ld19sdi0+bHZfcmVtYXBfZW5kOworCQlzaXplICo9 IHNpemVvZihsdl9ibG9ja19leGNlcHRpb25fdCk7CisJCW1lbWNweShuZXdfbHYtPmx2X2Jsb2Nr X2V4Y2VwdGlvbiwKKwkJICAgICAgIG9sZF9sdi0+bHZfYmxvY2tfZXhjZXB0aW9uLCBzaXplKTsK KworCQlvbGRfbHYtPmx2X3JlbWFwX2VuZCA9IG5ld19sdi0+bHZfcmVtYXBfZW5kOworCQlvbGRf bHYtPmx2X2Jsb2NrX2V4Y2VwdGlvbiA9IG5ld19sdi0+bHZfYmxvY2tfZXhjZXB0aW9uOworCQlv bGRfbHYtPmx2X3NuYXBzaG90X2hhc2hfdGFibGUgPQorCQkJbmV3X2x2LT5sdl9zbmFwc2hvdF9o YXNoX3RhYmxlOworCQlvbGRfbHYtPmx2X3NuYXBzaG90X2hhc2hfdGFibGVfc2l6ZSA9CisJCQlu ZXdfbHYtPmx2X3NuYXBzaG90X2hhc2hfdGFibGVfc2l6ZTsKKwkJb2xkX2x2LT5sdl9zbmFwc2hv dF9oYXNoX21hc2sgPQorCQkJbmV3X2x2LT5sdl9zbmFwc2hvdF9oYXNoX21hc2s7CisKKwkJZm9y IChlID0gMDsgZSA8IG5ld19sdi0+bHZfcmVtYXBfcHRyOyBlKyspCisJCQlsdm1faGFzaF9saW5r KG5ld19sdi0+bHZfYmxvY2tfZXhjZXB0aW9uICsgZSwKKwkJCQkgICAgICBuZXdfbHYtPmx2X2Js b2NrX2V4Y2VwdGlvbltlXS5yZGV2X29yZywKKwkJCQkgICAgbmV3X2x2LT5sdl9ibG9ja19leGNl cHRpb25bZV0ucnNlY3Rvcl9vcmcsCisJCQkJICAgICAgbmV3X2x2KTsKKworCX0gZWxzZSB7CisK KwkJdmZyZWUob2xkX2x2LT5sdl9jdXJyZW50X3BlKTsKKwkJdmZyZWUob2xkX2x2LT5sdl9zbmFw c2hvdF9oYXNoX3RhYmxlKTsKKworCQlvbGRfbHYtPmx2X3NpemUgPSBuZXdfbHYtPmx2X3NpemU7 CisJCW9sZF9sdi0+bHZfYWxsb2NhdGVkX2xlID0gbmV3X2x2LT5sdl9hbGxvY2F0ZWRfbGU7CisJ CW9sZF9sdi0+bHZfY3VycmVudF9sZSA9IG5ld19sdi0+bHZfY3VycmVudF9sZTsKKwkJb2xkX2x2 LT5sdl9jdXJyZW50X3BlID0gbmV3X2x2LT5sdl9jdXJyZW50X3BlOworCQlsdm1fZ2VuZGlzay5w YXJ0W01JTk9SKG9sZF9sdi0+bHZfZGV2KV0ubnJfc2VjdHMgPQorCQkJb2xkX2x2LT5sdl9zaXpl OworCQlsdm1fc2l6ZVtNSU5PUihvbGRfbHYtPmx2X2RldildID0gb2xkX2x2LT5sdl9zaXplID4+ IDE7CisKKwkJaWYgKG9sZF9sdi0+bHZfYWNjZXNzICYgTFZfU05BUFNIT1RfT1JHKSB7CisJCQls dl90ICpzbmFwOworCQkJZm9yKHNuYXAgPSBvbGRfbHYtPmx2X3NuYXBzaG90X25leHQ7IHNuYXA7 CisJCQkgICAgc25hcCA9IHNuYXAtPmx2X3NuYXBzaG90X25leHQpIHsKKwkJCQlkb3duKCZzbmFw LT5sdl9zbmFwc2hvdF9zZW0pOworCQkJCXNuYXAtPmx2X2N1cnJlbnRfcGUgPSBvbGRfbHYtPmx2 X2N1cnJlbnRfcGU7CisJCQkJc25hcC0+bHZfYWxsb2NhdGVkX2xlID0KKwkJCQkJb2xkX2x2LT5s dl9hbGxvY2F0ZWRfbGU7CisJCQkJc25hcC0+bHZfY3VycmVudF9sZSA9IG9sZF9sdi0+bHZfY3Vy cmVudF9sZTsKKwkJCQlzbmFwLT5sdl9zaXplID0gb2xkX2x2LT5sdl9zaXplOworCisJCQkJbHZt X2dlbmRpc2sucGFydFtNSU5PUihzbmFwLT5sdl9kZXYpXS5ucl9zZWN0cworCQkJCQk9IG9sZF9s di0+bHZfc2l6ZTsKKwkJCQlsdm1fc2l6ZVtNSU5PUihzbmFwLT5sdl9kZXYpXSA9CisJCQkJCW9s ZF9sdi0+bHZfc2l6ZSA+PiAxOworCQkJCV9fdXBkYXRlX2hhcmRibG9ja3NpemUoc25hcCk7CisJ CQkJdXAoJnNuYXAtPmx2X3NuYXBzaG90X3NlbSk7CisJCQl9CiAJCX0KIAl9CiAKKwlfX3VwZGF0 ZV9oYXJkYmxvY2tzaXplKG9sZF9sdik7CisJdXAoJm9sZF9sdi0+bHZfc25hcHNob3Rfc2VtKTsK KwogCXJldHVybiAwOwogfSAvKiBsdm1fZG9fbHZfZXh0ZW5kX3JlZHVjZSgpICovCiAKQEAgLTI2 NjksMTAgKzIzNjgsMTAgQEAKIHN0YXRpYyBpbnQgbHZtX2RvX2x2X3N0YXR1c19ieW5hbWUodmdf dCAqdmdfcHRyLCB2b2lkICphcmcpCiB7CiAJdWludCBsOwotCXVsb25nIHNpemU7Ci0JbHZfdCBs djsKLQlsdl90ICpsdl9wdHI7CiAJbHZfc3RhdHVzX2J5bmFtZV9yZXFfdCBsdl9zdGF0dXNfYnlu YW1lX3JlcTsKKwl2b2lkICpzYXZlZF9wdHIxOworCXZvaWQgKnNhdmVkX3B0cjI7CisJbHZfdCAq bHZfcHRyOwogCiAJaWYgKHZnX3B0ciA9PSBOVUxMKSByZXR1cm4gLUVOWElPOwogCWlmIChjb3B5 X2Zyb21fdXNlcigmbHZfc3RhdHVzX2J5bmFtZV9yZXEsIGFyZywKQEAgLTI2ODAsMjggKzIzNzks MjcgQEAKIAkJcmV0dXJuIC1FRkFVTFQ7CiAKIAlpZiAobHZfc3RhdHVzX2J5bmFtZV9yZXEubHYg PT0gTlVMTCkgcmV0dXJuIC1FSU5WQUw7Ci0JaWYgKGNvcHlfZnJvbV91c2VyKCZsdiwgbHZfc3Rh dHVzX2J5bmFtZV9yZXEubHYsCi0JCQkgICBzaXplb2YobHZfdCkpICE9IDApCi0JCXJldHVybiAt RUZBVUxUOwogCiAJZm9yIChsID0gMDsgbCA8IHZnX3B0ci0+bHZfbWF4OyBsKyspIHsKLQkJbHZf cHRyID0gdmdfcHRyLT5sdltsXTsKLQkJaWYgKGx2X3B0ciAhPSBOVUxMICYmCisJCWlmICgobHZf cHRyID0gdmdfcHRyLT5sdltsXSkgIT0gTlVMTCAmJgogCQkgICAgc3RyY21wKGx2X3B0ci0+bHZf bmFtZSwKLQkJCSAgICBsdl9zdGF0dXNfYnluYW1lX3JlcS5sdl9uYW1lKSA9PSAwKSB7Ci0JCQlp ZiAoY29weV90b191c2VyKGx2X3N0YXR1c19ieW5hbWVfcmVxLmx2LAorCQkJICAgbHZfc3RhdHVz X2J5bmFtZV9yZXEubHZfbmFtZSkgPT0gMCkgeworCQkgICAgICAgIC8qIFNhdmUgdXNlcm1vZGUg cG9pbnRlcnMgKi8KKwkJICAgICAgICBzYXZlZF9wdHIxID0gbHZfc3RhdHVzX2J5bmFtZV9yZXEu bHYtPmx2X2N1cnJlbnRfcGU7CisJCQlzYXZlZF9wdHIyID0gbHZfc3RhdHVzX2J5bmFtZV9yZXEu bHYtPmx2X2Jsb2NrX2V4Y2VwdGlvbjsKKwkJICAgICAgICBpZiAoY29weV90b191c2VyKGx2X3N0 YXR1c19ieW5hbWVfcmVxLmx2LAogCQkJCQkgbHZfcHRyLAogCQkJCQkgc2l6ZW9mKGx2X3QpKSAh PSAwKQogCQkJCXJldHVybiAtRUZBVUxUOwotCi0JCQlpZiAobHYubHZfY3VycmVudF9wZSAhPSBO VUxMKSB7Ci0JCQkJc2l6ZSA9IGx2X3B0ci0+bHZfYWxsb2NhdGVkX2xlICoKLQkJCQkgICAgICAg c2l6ZW9mKHBlX3QpOwotCQkJCWlmIChjb3B5X3RvX3VzZXIobHYubHZfY3VycmVudF9wZSwKKwkJ CWlmIChzYXZlZF9wdHIxICE9IE5VTEwpIHsKKwkJCQlpZiAoY29weV90b191c2VyKHNhdmVkX3B0 cjEsCiAJCQkJCQkgbHZfcHRyLT5sdl9jdXJyZW50X3BlLAotCQkJCQkJIHNpemUpICE9IDApCisJ CQkJCQkgbHZfcHRyLT5sdl9hbGxvY2F0ZWRfbGUgKgorCQkJCSAgICAgICAJCSBzaXplb2YocGVf dCkpICE9IDApCiAJCQkJCXJldHVybiAtRUZBVUxUOwogCQkJfQorCQkJLyogUmVzdG9yZSB1c2Vy bW9kZSBwb2ludGVycyAqLworCQkJbHZfc3RhdHVzX2J5bmFtZV9yZXEubHYtPmx2X2N1cnJlbnRf cGUgPSBzYXZlZF9wdHIxOwogCQkJcmV0dXJuIDA7CiAJCX0KIAl9CkBAIC0yNzE0LDM0ICsyNDEy LDM3IEBACiAgKi8KIHN0YXRpYyBpbnQgbHZtX2RvX2x2X3N0YXR1c19ieWluZGV4KHZnX3QgKnZn X3B0cix2b2lkICphcmcpCiB7Ci0JdWxvbmcgc2l6ZTsKLQlsdl90IGx2OwotCWx2X3QgKmx2X3B0 cjsKIAlsdl9zdGF0dXNfYnlpbmRleF9yZXFfdCBsdl9zdGF0dXNfYnlpbmRleF9yZXE7CisJdm9p ZCAqc2F2ZWRfcHRyMTsKKwl2b2lkICpzYXZlZF9wdHIyOworCWx2X3QgKmx2X3B0cjsKIAogCWlm ICh2Z19wdHIgPT0gTlVMTCkgcmV0dXJuIC1FTlhJTzsKIAlpZiAoY29weV9mcm9tX3VzZXIoJmx2 X3N0YXR1c19ieWluZGV4X3JlcSwgYXJnLAogCQkJICAgc2l6ZW9mKGx2X3N0YXR1c19ieWluZGV4 X3JlcSkpICE9IDApCiAJCXJldHVybiAtRUZBVUxUOwogCi0JaWYgKChsdnAgPSBsdl9zdGF0dXNf YnlpbmRleF9yZXEubHYpID09IE5VTEwpCisJaWYgKGx2X3N0YXR1c19ieWluZGV4X3JlcS5sdiA9 PSBOVUxMKQogCQlyZXR1cm4gLUVJTlZBTDsKIAlpZiAoICggbHZfcHRyID0gdmdfcHRyLT5sdlts dl9zdGF0dXNfYnlpbmRleF9yZXEubHZfaW5kZXhdKSA9PSBOVUxMKQogCQlyZXR1cm4gLUVOWElP OwogCi0JaWYgKGNvcHlfZnJvbV91c2VyKCZsdiwgbHZwLCBzaXplb2YobHZfdCkpICE9IDApCisJ LyogU2F2ZSB1c2VybW9kZSBwb2ludGVycyAqLworCXNhdmVkX3B0cjEgPSBsdl9zdGF0dXNfYnlp bmRleF9yZXEubHYtPmx2X2N1cnJlbnRfcGU7CisJc2F2ZWRfcHRyMiA9IGx2X3N0YXR1c19ieWlu ZGV4X3JlcS5sdi0+bHZfYmxvY2tfZXhjZXB0aW9uOworCWlmIChjb3B5X3RvX3VzZXIobHZfc3Rh dHVzX2J5aW5kZXhfcmVxLmx2LCBsdl9wdHIsIHNpemVvZihsdl90KSkgIT0gMCkKIAkJcmV0dXJu IC1FRkFVTFQ7Ci0KLQlpZiAoY29weV90b191c2VyKGx2cCwgbHZfcHRyLCBzaXplb2YobHZfdCkp ICE9IDApCi0JCXJldHVybiAtRUZBVUxUOwotCi0JaWYgKGx2Lmx2X2N1cnJlbnRfcGUgIT0gTlVM TCkgewotCQlzaXplID0gbHZfcHRyLT5sdl9hbGxvY2F0ZWRfbGUgKiBzaXplb2YocGVfdCk7Ci0J CWlmIChjb3B5X3RvX3VzZXIobHYubHZfY3VycmVudF9wZSwKLQkJCSAJIGx2X3B0ci0+bHZfY3Vy cmVudF9wZSwKLQkJCQkgc2l6ZSkgIT0gMCkKKwlpZiAoc2F2ZWRfcHRyMSAhPSBOVUxMKSB7CisJ CWlmIChjb3B5X3RvX3VzZXIoc2F2ZWRfcHRyMSwKKwkJCQkgbHZfcHRyLT5sdl9jdXJyZW50X3Bl LAorCQkJCSBsdl9wdHItPmx2X2FsbG9jYXRlZF9sZSAqCisJCSAgICAgICAJCSBzaXplb2YocGVf dCkpICE9IDApCiAJCQlyZXR1cm4gLUVGQVVMVDsKIAl9CisKKwkvKiBSZXN0b3JlIHVzZXJtb2Rl IHBvaW50ZXJzICovCisJbHZfc3RhdHVzX2J5aW5kZXhfcmVxLmx2LT5sdl9jdXJyZW50X3BlID0g c2F2ZWRfcHRyMTsKKwogCXJldHVybiAwOwogfSAvKiBsdm1fZG9fbHZfc3RhdHVzX2J5aW5kZXgo KSAqLwogCkBAIC0yNzUyLDYgKzI0NTMsOSBAQAogc3RhdGljIGludCBsdm1fZG9fbHZfc3RhdHVz X2J5ZGV2KHZnX3QgKiB2Z19wdHIsIHZvaWQgKiBhcmcpIHsKIAlpbnQgbDsKIAlsdl9zdGF0dXNf YnlkZXZfcmVxX3QgbHZfc3RhdHVzX2J5ZGV2X3JlcTsKKwl2b2lkICpzYXZlZF9wdHIxOworCXZv aWQgKnNhdmVkX3B0cjI7CisJbHZfdCAqbHZfcHRyOwogCiAJaWYgKHZnX3B0ciA9PSBOVUxMKSBy ZXR1cm4gLUVOWElPOwogCWlmIChjb3B5X2Zyb21fdXNlcigmbHZfc3RhdHVzX2J5ZGV2X3JlcSwg YXJnLApAQCAtMjc2NCwxMCArMjQ2OCwyMyBAQAogCX0KIAogCWlmICggbCA9PSB2Z19wdHItPmx2 X21heCkgcmV0dXJuIC1FTlhJTzsKKwlsdl9wdHIgPSB2Z19wdHItPmx2W2xdOworCisJLyogU2F2 ZSB1c2VybW9kZSBwb2ludGVycyAqLworCXNhdmVkX3B0cjEgPSBsdl9zdGF0dXNfYnlkZXZfcmVx Lmx2LT5sdl9jdXJyZW50X3BlOworCXNhdmVkX3B0cjIgPSBsdl9zdGF0dXNfYnlkZXZfcmVxLmx2 LT5sdl9ibG9ja19leGNlcHRpb247CiAKLQlpZiAoY29weV90b191c2VyKGx2X3N0YXR1c19ieWRl dl9yZXEubHYsCi0JCQkgdmdfcHRyLT5sdltsXSwgc2l6ZW9mKGx2X3QpKSAhPSAwKQorCWlmIChj b3B5X3RvX3VzZXIobHZfc3RhdHVzX2J5ZGV2X3JlcS5sdiwgbHZfcHRyLCBzaXplb2YobHZfdCkp ICE9IDApCiAJCXJldHVybiAtRUZBVUxUOworCWlmIChzYXZlZF9wdHIxICE9IE5VTEwpIHsKKwkJ aWYgKGNvcHlfdG9fdXNlcihzYXZlZF9wdHIxLAorCQkJCSBsdl9wdHItPmx2X2N1cnJlbnRfcGUs CisJCQkJIGx2X3B0ci0+bHZfYWxsb2NhdGVkX2xlICoKKwkJICAgICAgIAkJIHNpemVvZihwZV90 KSkgIT0gMCkKKwkJCXJldHVybiAtRUZBVUxUOworCX0KKwkvKiBSZXN0b3JlIHVzZXJtb2RlIHBv aW50ZXJzICovCisJbHZfc3RhdHVzX2J5ZGV2X3JlcS5sdi0+bHZfY3VycmVudF9wZSA9IHNhdmVk X3B0cjE7CiAKIAlyZXR1cm4gMDsKIH0gLyogbHZtX2RvX2x2X3N0YXR1c19ieWRldigpICovCkBA IC0yNzg3LDExICsyNTA0LDExIEBACiAJCWlmICggKGx2X3B0ciA9IHZnX3B0ci0+bHZbbF0pID09 IE5VTEwpIGNvbnRpbnVlOwogCQlpZiAobHZfcHRyLT5sdl9kZXYgPT0gbHYtPmx2X2RldikKIAkJ ewotCQkJbHZtX2RvX3JlbW92ZV9wcm9jX2VudHJ5X29mX2x2ICggdmdfcHRyLCBsdl9wdHIpOwor CQkJbHZtX2ZzX3JlbW92ZV9sdih2Z19wdHIsIGx2X3B0cik7CiAJCQlzdHJuY3B5KGx2X3B0ci0+ bHZfbmFtZSwKIAkJCQlsdl9yZXEtPmx2X25hbWUsCiAJCQkJTkFNRV9MRU4pOwotCQkJbHZtX2Rv X2NyZWF0ZV9wcm9jX2VudHJ5X29mX2x2ICggdmdfcHRyLCBsdl9wdHIpOworCQkJbHZtX2ZzX2Ny ZWF0ZV9sdih2Z19wdHIsIGx2X3B0cik7CiAJCQlicmVhazsKIAkJfQogCX0KQEAgLTI4NzEsMTYw ICsyNTg4LDI4IEBACiB9IC8qIGx2bV9kb19wdl9zdGF0dXMoKSAqLwogCiAKLQotLyoKLSAqIGNy ZWF0ZSBhIGRldmZzIGVudHJ5IGZvciBhIHZvbHVtZSBncm91cAotICovCi12b2lkIGx2bV9kb19j cmVhdGVfZGV2ZnNfZW50cnlfb2ZfdmcgKCB2Z190ICp2Z19wdHIpIHsKLQl2Z19kZXZmc19oYW5k bGVbdmdfcHRyLT52Z19udW1iZXJdID0gZGV2ZnNfbWtfZGlyKDAsIHZnX3B0ci0+dmdfbmFtZSwg TlVMTCk7Ci0JY2hfZGV2ZnNfaGFuZGxlW3ZnX3B0ci0+dmdfbnVtYmVyXSA9IGRldmZzX3JlZ2lz dGVyKAotCQl2Z19kZXZmc19oYW5kbGVbdmdfcHRyLT52Z19udW1iZXJdICwgImdyb3VwIiwKLQkJ REVWRlNfRkxfREVGQVVMVCwgTFZNX0NIQVJfTUFKT1IsIHZnX3B0ci0+dmdfbnVtYmVyLAotCQlT X0lGQ0hSIHwgU19JUlVTUiB8IFNfSVdVU1IgfCBTX0lSR1JQLAotCQkmbHZtX2Nocl9mb3BzLCBO VUxMKTsKLX0KLQotCi0vKgotICogY3JlYXRlIGEgL3Byb2MgZW50cnkgZm9yIGEgbG9naWNhbCB2 b2x1bWUKLSAqLwotdm9pZCBsdm1fZG9fY3JlYXRlX3Byb2NfZW50cnlfb2ZfbHYgKCB2Z190ICp2 Z19wdHIsIGx2X3QgKmx2X3B0cikgewotCWNoYXIgKmJhc2VuYW1lOwotCi0JaWYgKCB2Z19wdHIt Pmx2X3N1YmRpcl9wZGUgIT0gTlVMTCkgewotCQliYXNlbmFtZSA9IHN0cnJjaHIobHZfcHRyLT5s dl9uYW1lLCAnLycpOwotCQlpZiAoYmFzZW5hbWUgPT0gTlVMTCkgYmFzZW5hbWUgPSBsdl9wdHIt Pmx2X25hbWU7Ci0JCWVsc2UJCSAgICAgIGJhc2VuYW1lKys7Ci0JCXBkZSA9IGNyZWF0ZV9wcm9j X2VudHJ5KGJhc2VuYW1lLCBTX0lGUkVHLAotCQkJCQl2Z19wdHItPmx2X3N1YmRpcl9wZGUpOwot CQlpZiAoIHBkZSAhPSBOVUxMKSB7Ci0JCQlwZGUtPnJlYWRfcHJvYyA9IGx2bV9wcm9jX3JlYWRf bHZfaW5mbzsKLQkJCXBkZS0+ZGF0YSA9IGx2X3B0cjsKLQkJfQotCX0KLX0KLQotCi0vKgotICog cmVtb3ZlIGEgL3Byb2MgZW50cnkgZm9yIGEgbG9naWNhbCB2b2x1bWUKLSAqLwotdm9pZCBsdm1f ZG9fcmVtb3ZlX3Byb2NfZW50cnlfb2ZfbHYgKCB2Z190ICp2Z19wdHIsIGx2X3QgKmx2X3B0cikg ewotCWNoYXIgKmJhc2VuYW1lOwotCi0JaWYgKCB2Z19wdHItPmx2X3N1YmRpcl9wZGUgIT0gTlVM TCkgewotCQliYXNlbmFtZSA9IHN0cnJjaHIobHZfcHRyLT5sdl9uYW1lLCAnLycpOwotCQlpZiAo YmFzZW5hbWUgPT0gTlVMTCkgYmFzZW5hbWUgPSBsdl9wdHItPmx2X25hbWU7Ci0JCWVsc2UJCSAg ICAgIGJhc2VuYW1lKys7Ci0JCXJlbW92ZV9wcm9jX2VudHJ5KGJhc2VuYW1lLCB2Z19wdHItPmx2 X3N1YmRpcl9wZGUpOwotCX0KLX0KLQotCi0vKgotICogY3JlYXRlIGEgL3Byb2MgZW50cnkgZm9y IGEgcGh5c2ljYWwgdm9sdW1lCi0gKi8KLXZvaWQgbHZtX2RvX2NyZWF0ZV9wcm9jX2VudHJ5X29m X3B2ICggdmdfdCAqdmdfcHRyLCBwdl90ICpwdl9wdHIpIHsKLQlpbnQgb2Zmc2V0ID0gMDsKLQlj aGFyICpiYXNlbmFtZTsKLQljaGFyIGJ1ZmZlcltOQU1FX0xFTl07Ci0KLQliYXNlbmFtZSA9IHB2 X3B0ci0+cHZfbmFtZTsKLQlpZiAoc3RybmNtcChiYXNlbmFtZSwgIi9kZXYvIiwgNSkgPT0gMCkg b2Zmc2V0ID0gNTsKLQlzdHJuY3B5KGJ1ZmZlciwgYmFzZW5hbWUgKyBvZmZzZXQsIHNpemVvZihi dWZmZXIpKTsKLQliYXNlbmFtZSA9IGJ1ZmZlcjsKLQl3aGlsZSAoICggYmFzZW5hbWUgPSBzdHJj aHIgKCBiYXNlbmFtZSwgJy8nKSkgIT0gTlVMTCkgKmJhc2VuYW1lID0gJ18nOwotCXBkZSA9IGNy ZWF0ZV9wcm9jX2VudHJ5KGJ1ZmZlciwgU19JRlJFRywgdmdfcHRyLT5wdl9zdWJkaXJfcGRlKTsK LQlpZiAoIHBkZSAhPSBOVUxMKSB7Ci0JCXBkZS0+cmVhZF9wcm9jID0gbHZtX3Byb2NfcmVhZF9w dl9pbmZvOwotCQlwZGUtPmRhdGEgPSBwdl9wdHI7Ci0JfQotfQotCi0KIC8qCi0gKiByZW1vdmUg YSAvcHJvYyBlbnRyeSBmb3IgYSBwaHlzaWNhbCB2b2x1bWUKKyAqIGNoYXJhY3RlciBkZXZpY2Ug c3VwcG9ydCBmdW5jdGlvbiBmbHVzaCBhbmQgaW52YWxpZGF0ZSBhbGwgYnVmZmVycyBvZiBhIFBW CiAgKi8KLXZvaWQgbHZtX2RvX3JlbW92ZV9wcm9jX2VudHJ5X29mX3B2ICggdmdfdCAqdmdfcHRy LCBwdl90ICpwdl9wdHIpIHsKLQljaGFyICpiYXNlbmFtZTsKLQotCWJhc2VuYW1lID0gc3RycmNo cihwdl9wdHItPnB2X25hbWUsICcvJyk7Ci0JaWYgKCB2Z19wdHItPnB2X3N1YmRpcl9wZGUgIT0g TlVMTCkgewotCQliYXNlbmFtZSA9IHN0cnJjaHIocHZfcHRyLT5wdl9uYW1lLCAnLycpOwotCQlp ZiAoYmFzZW5hbWUgPT0gTlVMTCkgYmFzZW5hbWUgPSBwdl9wdHItPnB2X25hbWU7Ci0JCWVsc2UJ CSAgICAgIGJhc2VuYW1lKys7Ci0JCXJlbW92ZV9wcm9jX2VudHJ5KGJhc2VuYW1lLCB2Z19wdHIt PnB2X3N1YmRpcl9wZGUpOwotCX0KLX0KLQotCi0vKgotICogY3JlYXRlIGEgL3Byb2MgZW50cnkg Zm9yIGEgdm9sdW1lIGdyb3VwCi0gKi8KLXZvaWQgbHZtX2RvX2NyZWF0ZV9wcm9jX2VudHJ5X29m X3ZnICggdmdfdCAqdmdfcHRyKSB7Ci0JaW50IGwsIHA7Ci0JcHZfdCAqcHZfcHRyOwotCWx2X3Qg Kmx2X3B0cjsKK3N0YXRpYyBpbnQgbHZtX2RvX3B2X2ZsdXNoKHZvaWQgKmFyZykKK3sKKwlwdl9m bHVzaF9yZXFfdCBwdl9mbHVzaF9yZXE7CiAKLQlwZGUgPSBjcmVhdGVfcHJvY19lbnRyeSh2Z19w dHItPnZnX25hbWUsIFNfSUZESVIsCi0JCQkJbHZtX3Byb2Nfdmdfc3ViZGlyKTsKLQlpZiAoIHBk ZSAhPSBOVUxMKSB7Ci0JCXZnX3B0ci0+dmdfZGlyX3BkZSA9IHBkZTsKLQkJcGRlID0gY3JlYXRl X3Byb2NfZW50cnkoImdyb3VwIiwgU19JRlJFRywKLQkJCQkJdmdfcHRyLT52Z19kaXJfcGRlKTsK LQkJaWYgKCBwZGUgIT0gTlVMTCkgewotCQkJcGRlLT5yZWFkX3Byb2MgPSBsdm1fcHJvY19yZWFk X3ZnX2luZm87Ci0JCQlwZGUtPmRhdGEgPSB2Z19wdHI7Ci0JCX0KLSAgICAgICAgICAgICAgICBw ZGUgPSBjcmVhdGVfcHJvY19lbnRyeShMVk1fTFZfU1VCRElSLCBTX0lGRElSLAotICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZnX3B0ci0+dmdfZGlyX3BkZSk7Ci0gICAg ICAgICAgICAgICAgaWYgKCBwZGUgIT0gTlVMTCkgewotICAgICAgICAgICAgICAgICAgICAgICAg dmdfcHRyLT5sdl9zdWJkaXJfcGRlID0gcGRlOwotICAgICAgICAgICAgICAgICAgICAgICAgZm9y ICggbCA9IDA7IGwgPCB2Z19wdHItPmx2X21heDsgbCsrKSB7Ci0JCQkJaWYgKCAoIGx2X3B0ciA9 IHZnX3B0ci0+bHZbbF0pID09IE5VTEwpIGNvbnRpbnVlOwotCQkJCWx2bV9kb19jcmVhdGVfcHJv Y19lbnRyeV9vZl9sdiAoIHZnX3B0ciwgbHZfcHRyKTsKLSAgICAgICAgICAgICAgICAgICAgICAg IH0KLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgcGRlID0gY3JlYXRlX3Byb2Nf ZW50cnkoTFZNX1BWX1NVQkRJUiwgU19JRkRJUiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICB2Z19wdHItPnZnX2Rpcl9wZGUpOwotICAgICAgICAgICAgICAgIGlmICgg cGRlICE9IE5VTEwpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIHZnX3B0ci0+cHZfc3ViZGly X3BkZSA9IHBkZTsKLQkJCWZvciAoIHAgPSAwOyBwIDwgdmdfcHRyLT5wdl9tYXg7IHArKykgewot CQkJCWlmICggKCBwdl9wdHIgPSB2Z19wdHItPnB2W3BdKSA9PSBOVUxMKSBjb250aW51ZTsKLQkJ CQlsdm1fZG9fY3JlYXRlX3Byb2NfZW50cnlfb2ZfcHYgKCB2Z19wdHIsIHB2X3B0cik7Ci0gICAg ICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICB9Ci19CisJ aWYgKGNvcHlfZnJvbV91c2VyKCZwdl9mbHVzaF9yZXEsIGFyZywKKwkJCSAgIHNpemVvZihwdl9m bHVzaF9yZXEpKSAhPSAwKQorCQlyZXR1cm4gLUVGQVVMVDsKIAotLyoKLSAqIHJlbW92ZSBhIC9w cm9jIGVudHJ5IGZvciBhIHZvbHVtZSBncm91cAotICovCi12b2lkIGx2bV9kb19yZW1vdmVfcHJv Y19lbnRyeV9vZl92ZyAoIHZnX3QgKnZnX3B0cikgewotCWludCBsLCBwOwotCWx2X3QgKmx2X3B0 cjsKLQlwdl90ICpwdl9wdHI7CisJZnN5bmNfZGV2KHB2X2ZsdXNoX3JlcS5wdl9kZXYpOworCWlu dmFsaWRhdGVfYnVmZmVycyhwdl9mbHVzaF9yZXEucHZfZGV2KTsKIAotCWZvciAoIGwgPSAwOyBs IDwgdmdfcHRyLT5sdl9tYXg7IGwrKykgewotCQlpZiAoICggbHZfcHRyID0gdmdfcHRyLT5sdlts XSkgPT0gTlVMTCkgY29udGludWU7Ci0JCWx2bV9kb19yZW1vdmVfcHJvY19lbnRyeV9vZl9sdiAo IHZnX3B0ciwgdmdfcHRyLT5sdltsXSk7Ci0JfQotCWZvciAoIHAgPSAwOyBwIDwgdmdfcHRyLT5w dl9tYXg7IHArKykgewotCQlpZiAoICggcHZfcHRyID0gdmdfcHRyLT5wdltwXSkgPT0gTlVMTCkg Y29udGludWU7Ci0JCWx2bV9kb19yZW1vdmVfcHJvY19lbnRyeV9vZl9wdiAoIHZnX3B0ciwgdmdf cHRyLT5wdltwXSk7Ci0JfQotCWlmICggdmdfcHRyLT52Z19kaXJfcGRlICE9IE5VTEwpIHsKLQkJ cmVtb3ZlX3Byb2NfZW50cnkoTFZNX0xWX1NVQkRJUiwgdmdfcHRyLT52Z19kaXJfcGRlKTsKLQkJ cmVtb3ZlX3Byb2NfZW50cnkoTFZNX1BWX1NVQkRJUiwgdmdfcHRyLT52Z19kaXJfcGRlKTsKLQkJ cmVtb3ZlX3Byb2NfZW50cnkoImdyb3VwIiwgdmdfcHRyLT52Z19kaXJfcGRlKTsKLQkJcmVtb3Zl X3Byb2NfZW50cnkodmdfcHRyLT52Z19uYW1lLCBsdm1fcHJvY192Z19zdWJkaXIpOwotCX0KKwly ZXR1cm4gMDsKIH0KIAogCiAvKgogICogc3VwcG9ydCBmdW5jdGlvbiBpbml0aWFsaXplIGdlbmRp c2sgdmFyaWFibGVzCiAgKi8KLXZvaWQgX19pbml0IGx2bV9nZW5pbml0KHN0cnVjdCBnZW5kaXNr ICpsdm1fZ2Rpc2spCitzdGF0aWMgdm9pZCBfX2luaXQgbHZtX2dlbmluaXQoc3RydWN0IGdlbmRp c2sgKmx2bV9nZGlzaykKIHsKIAlpbnQgaSA9IDA7CiAKQEAgLTMwNDAsMzYgKzI2MjUsMTEgQEAK IAogCWJsa19zaXplW01BSk9SX05SXSA9IGx2bV9zaXplOwogCWJsa3NpemVfc2l6ZVtNQUpPUl9O Ul0gPSBsdm1fYmxvY2tzaXplczsKLQloYXJkc2VjdF9zaXplW01BSk9SX05SXSA9IGx2bV9ibG9j a3NpemVzOworCWhhcmRzZWN0X3NpemVbTUFKT1JfTlJdID0gbHZtX2hhcmRzZWN0c2l6ZXM7CiAK IAlyZXR1cm47CiB9IC8qIGx2bV9nZW5faW5pdCgpICovCiAKLQotLyoKLSAqIHJldHVybiBhIHBv aW50ZXIgdG8gYSAnLScgcGFkZGVkIHV1aWQKLSAqLwotc3RhdGljIGNoYXIgKmx2bV9zaG93X3V1 aWQgKCBjaGFyICp1dWlkc3RyKSB7Ci0JaW50IGksIGo7Ci0Jc3RhdGljIGNoYXIgdXVpZFtOQU1F X0xFTl0gPSB7IDAsIH07Ci0KLQltZW1zZXQgKCB1dWlkLCAwLCBOQU1FX0xFTik7Ci0KLQlpID0g NjsKLQltZW1jcHkgKCB1dWlkLCB1dWlkc3RyLCBpKTsKLQl1dWlkc3RyICs9IGk7Ci0KLQlmb3Ig KCBqID0gMDsgaiA8IDY7IGorKykgewotCQl1dWlkW2krK10gPSAnLSc7Ci0JCW1lbWNweSAoICZ1 dWlkW2ldLCB1dWlkc3RyLCA0KTsKLQkJdXVpZHN0ciArPSA0OwotCQlpICs9IDQ7Ci0JfQotCi0J bWVtY3B5ICggJnV1aWRbaV0sIHV1aWRzdHIsIDIgKTsKLQotCXJldHVybiB1dWlkOwotfQogCiBt b2R1bGVfaW5pdChsdm1faW5pdCk7CiBtb2R1bGVfZXhpdChsdm1fY2xlYW51cCk7Ci0tLSBsaW51 eC9kcml2ZXJzL21kL2x2bS1pbnRlcm5hbC5oLm9yaWcgTW9uIE1heSAgNyAwMTowNDo0MCAyMDAx CisrKyBsaW51eC9kcml2ZXJzL21kL2x2bS1pbnRlcm5hbC5oIE1vbiBNYXkgIDcgMDE6MDQ6NDAg MjAwMQpAQCAtMCwwICsxLDEwNCBAQAorLyoKKyAqIGtlcm5lbC9sdm1faW50ZXJuYWwuaAorICoK KyAqIENvcHlyaWdodCAoQykgMjAwMSBTaXN0aW5hIFNvZnR3YXJlCisgKgorICoKKyAqIExWTSBk cml2ZXIgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1v ZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGlj ZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVp dGhlciB2ZXJzaW9uIDIsIG9yIChhdCB5b3VyIG9wdGlvbikKKyAqIGFueSBsYXRlciB2ZXJzaW9u LgorICoKKyAqIExWTSBkcml2ZXIgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3 aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVu IHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBG T1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMg TGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZl ZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRo IEdOVSBDQzsgc2VlIHRoZSBmaWxlIENPUFlJTkcuICBJZiBub3QsIHdyaXRlIHRvCisgKiB0aGUg RnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCA1OSBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsCisg KiBCb3N0b24sIE1BIDAyMTExLTEzMDcsIFVTQS4KKyAqCisgKi8KKworLyoKKyAqIENoYW5nZWxv ZworICoKKyAqICAgIDA1LzAxLzIwMDEgLSBGYWN0b3JlZCB0aGlzIGZpbGUgb3V0IG9mIGx2bS5j IChKb2UgVGhvcm5iZXIpCisgKiAgICAxMS8wMS8yMDAxIC0gUmVuYW1lZCBsdm1faW50ZXJuYWwg YW5kIGFkZGVkIGRlY2xhcmF0aW9ucworICogICAgICAgICAgICAgICAgIGZvciBsdm1fZnMuYyBz dHVmZgorICoKKyAqLworCisjaWZuZGVmIExWTV9JTlRFUk5BTF9ICisjZGVmaW5lIExWTV9JTlRF Uk5BTF9ICisKKyNpbmNsdWRlIDxsaW51eC9sdm0uaD4KKworI2RlZmluZQlfTFZNX0lOVEVSTkFM X0hfVkVSU0lPTgkiTFZNICJMVk1fUkVMRUFTRV9OQU1FIiAoIkxWTV9SRUxFQVNFX0RBVEUiKSIK KworLyogZ2xvYmFsIHZhcmlhYmxlcywgZGVmaW5lZCBpbiBsdm0uYyAqLworZXh0ZXJuIGNoYXIg Kmx2bV92ZXJzaW9uOworZXh0ZXJuIGNoYXIgKmx2bV9zaG9ydF92ZXJzaW9uOworZXh0ZXJuIHVz aG9ydCBsdm1faW9wX3ZlcnNpb247CitleHRlcm4gaW50IGxvYWR0aW1lOworZXh0ZXJuIGNvbnN0 IGNoYXIgKmNvbnN0IGx2bV9uYW1lOworCisKK2V4dGVybiB2Z190ICp2Z1tdOworZXh0ZXJuIHN0 cnVjdCBmaWxlX29wZXJhdGlvbnMgbHZtX2Nocl9mb3BzOworCitleHRlcm4gc3RydWN0IGJsb2Nr X2RldmljZV9vcGVyYXRpb25zIGx2bV9ibGtfZG9wczsKKworCisvKiBkZWJ1ZyBtYWNyb3MgKi8K KyNpZmRlZiBERUJVR19JT0NUTAorI2RlZmluZSBQX0lPQ1RMKGZtdCwgYXJncy4uLikgcHJpbnRr KEtFUk5fREVCVUcgImx2bSBpb2N0bDogIiBmbXQsICMjIGFyZ3MpCisjZWxzZQorI2RlZmluZSBQ X0lPQ1RMKGZtdCwgYXJncy4uLikKKyNlbmRpZgorCisjaWZkZWYgREVCVUdfTUFQCisjZGVmaW5l IFBfTUFQKGZtdCwgYXJncy4uLikgcHJpbnRrKEtFUk5fREVCVUcgImx2bSBtYXA6ICIgZm10LCAj IyBhcmdzKQorI2Vsc2UKKyNkZWZpbmUgUF9NQVAoZm10LCBhcmdzLi4uKQorI2VuZGlmCisKKyNp ZmRlZiBERUJVR19LRlJFRQorI2RlZmluZSBQX0tGUkVFKGZtdCwgYXJncy4uLikgcHJpbnRrKEtF Uk5fREVCVUcgImx2bSBrZnJlZTogIiBmbXQsICMjIGFyZ3MpCisjZWxzZQorI2RlZmluZSBQX0tG UkVFKGZtdCwgYXJncy4uLikKKyNlbmRpZgorCisjaWZkZWYgREVCVUdfREVWSUNFCisjZGVmaW5l IFBfREVWKGZtdCwgYXJncy4uLikgcHJpbnRrKEtFUk5fREVCVUcgImx2bSBkZXZpY2U6ICIgZm10 LCAjIyBhcmdzKQorI2Vsc2UKKyNkZWZpbmUgUF9ERVYoZm10LCBhcmdzLi4uKQorI2VuZGlmCisK KworLyogbHZtLXNuYXAuYyAqLworaW50IGx2bV9nZXRfYmxrc2l6ZShrZGV2X3QpOworaW50IGx2 bV9zbmFwc2hvdF9hbGxvYyhsdl90ICopOworaW50IGx2bV9zbmFwc2hvdF9maWxsX0NPV19wYWdl KHZnX3QgKiwgbHZfdCAqKTsKK2ludCBsdm1fc25hcHNob3RfQ09XKGtkZXZfdCwgdWxvbmcsIHVs b25nLCB1bG9uZywgdmdfdCAqdmcsIGx2X3QgKik7CitpbnQgbHZtX3NuYXBzaG90X3JlbWFwX2Js b2NrKGtkZXZfdCAqLCB1bG9uZyAqLCB1bG9uZywgbHZfdCAqKTsKK3ZvaWQgbHZtX3NuYXBzaG90 X3JlbGVhc2UobHZfdCAqKTsKK2ludCBsdm1fd3JpdGVfQ09XX3RhYmxlX2Jsb2NrKHZnX3QgKiwg bHZfdCAqKTsKK3ZvaWQgbHZtX2hhc2hfbGluayhsdl9ibG9ja19leGNlcHRpb25fdCAqLCBrZGV2 X3QsIHVsb25nLCBsdl90ICopOworaW50IGx2bV9zbmFwc2hvdF9hbGxvY19oYXNoX3RhYmxlKGx2 X3QgKik7Cit2b2lkIGx2bV9kcm9wX3NuYXBzaG90KHZnX3QgKnZnLCBsdl90ICosIGNvbnN0IGNo YXIgKik7CisKKworLyogbHZtX2ZzLmMgKi8KK3ZvaWQgbHZtX2luaXRfZnModm9pZCk7Cit2b2lk IGx2bV9maW5fZnModm9pZCk7CisKK3ZvaWQgbHZtX2ZzX2NyZWF0ZV92Zyh2Z190ICp2Z19wdHIp Owordm9pZCBsdm1fZnNfcmVtb3ZlX3ZnKHZnX3QgKnZnX3B0cik7Cit2b2lkIGx2bV9mc19jcmVh dGVfbHYodmdfdCAqdmdfcHRyLCBsdl90ICpsdik7Cit2b2lkIGx2bV9mc19yZW1vdmVfbHYodmdf dCAqdmdfcHRyLCBsdl90ICpsdik7Cit2b2lkIGx2bV9mc19jcmVhdGVfcHYodmdfdCAqdmdfcHRy LCBwdl90ICpwdik7Cit2b2lkIGx2bV9mc19yZW1vdmVfcHYodmdfdCAqdmdfcHRyLCBwdl90ICpw dik7CisKKyNlbmRpZgotLS0gbGludXgvZHJpdmVycy9tZC9sdm0tc25hcC5jLm9yaWcJV2VkIEp1 bCAgNCAxMzo0ODowNCAyMDAxCisrKyBsaW51eC9kcml2ZXJzL21kL2x2bS1zbmFwLmMJU3VuIE1h eSAgNiAyMDowNDo0MCAyMDAxCkBAIC0yLDIyICsyLDIyIEBACiAgKiBrZXJuZWwvbHZtLXNuYXAu YwogICoKICAqIENvcHlyaWdodCAoQykgMjAwMCBBbmRyZWEgQXJjYW5nZWxpIDxhbmRyZWFAc3Vz ZS5kZT4gU3VTRQotICogICAgICAgICAgICAgICAgICAgIEhlaW56IE1hdWVsc2hhZ2VuLCBTaXN0 aW5hIFNvZnR3YXJlIChwZXJzaXN0ZW50IHNuYXBzaG90cykKKyAqICAgICAgICAgICAgICAgMjAw MCAtIDIwMDEgSGVpbnogTWF1ZWxzaGFnZW4sIFNpc3RpbmEgU29mdHdhcmUKICAqCiAgKiBMVk0g c25hcHNob3QgZHJpdmVyIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0 IGFuZC9vciBtb2RpZnkKICAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwg UHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CiAgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3Vu ZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLCBvciAoYXQgeW91ciBvcHRpb24pCiAgKiBhbnkgbGF0 ZXIgdmVyc2lvbi4KLSAqIAorICoKICAqIExWTSBzbmFwc2hvdCBkcml2ZXIgaXMgZGlzdHJpYnV0 ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKICAqIGJ1dCBXSVRIT1VUIEFO WSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCiAgKiBNRVJD SEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhl CiAgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICogCisg KgogICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwg UHVibGljIExpY2Vuc2UKICAqIGFsb25nIHdpdGggR05VIENDOyBzZWUgdGhlIGZpbGUgQ09QWUlO Ry4gIElmIG5vdCwgd3JpdGUgdG8KICAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIDU5 IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwKLSAqIEJvc3RvbiwgTUEgMDIxMTEtMTMwNywgVVNB LiAKKyAqIEJvc3RvbiwgTUEgMDIxMTEtMTMwNywgVVNBLgogICoKICAqLwogCkBAIC0yNiw2ICsy NiwxOSBAQAogICoKICAqICAgIDA1LzA3LzIwMDAgLSBpbXBsZW1lbnRlZCBwZXJzaXN0ZW50IHNu YXBzaG90IHN1cHBvcnQKICAqICAgIDIzLzExLzIwMDAgLSB1c2VkIGNwdV90b19sZTY0IHJhdGhl ciB0aGFuIG15IG93biBtYWNybworICogICAgMjUvMDEvMjAwMSAtIFB1dCBMb2NrUGFnZSBiYWNr IGluCisgKiAgICAwMS8wMi8yMDAxIC0gQSBkcm9wcGVkIHNuYXBzaG90IGlzIG5vdyBzZXQgYXMg aW5hY3RpdmUKKyAqICAgIDE0LzAyLzIwMDEgLSB0aWRpZWQgZGVidWcgc3RhdGVtZW50cworICog ICAgMTkvMDIvMjAwMSAtIGNoYW5nZWQgcmF3aW8gY2FsbHMgdG8gcGFzcyBpbiBwcmVhbGxvY2F0 ZWQgYnVmZmVyX2hlYWRzCisgKiAgICAyNi8wMi8yMDAxIC0gaW50cm9kdWNlZCBfX2Jyd19raW92 ZWMgdG8gcmVtb3ZlIGEgbG90IG9mIGNvbmRpdGlvbmFsCisgKiAgICAgICAgICAgICAgICAgY29t cGlsZXMuCisgKiAgICAwNy8wMy8yMDAxIC0gZml4ZWQgQ09XIGV4Y2VwdGlvbiB0YWJsZSBub3Qg cGVyc2lzdGVudCBvbiAyLjIgKEhNKQorICogICAgMTIvMDMvMjAwMSAtIGx2bV9wdl9nZXRfbnVt YmVyIGNoYW5nZXM6CisgKiAgICAgICAgICAgICAgICAgbyBtYWRlIGl0IHN0YXRpYworICogICAg ICAgICAgICAgICAgIG8gcmVuYW1lZCBpdCB0byBfcHZfZ2V0X251bWJlcgorICogICAgICAgICAg ICAgICAgIG8gcHYgbnVtYmVyIGlzIHJldHVybmVkIGluIG5ldyB1aW50ICogYXJnCisgKiAgICAg ICAgICAgICAgICAgbyAtMSByZXR1cm5lZCBvbiBlcnJvcgorICogICAgICAgICAgICAgICAgIGx2 bV9zbmFwc2hvdF9maWxsX0NPV190YWJsZSBoYXMgYSByZXR1cm4gdmFsdWUgdG9vLgogICoKICAq LwogCkBAIC0zOCwyNiArNTEsNDggQEAKICNpbmNsdWRlIDxsaW51eC9sdm0uaD4KIAogCi0jaW5j bHVkZSAibHZtLXNuYXAuaCIKKyNpbmNsdWRlICJsdm0taW50ZXJuYWwuaCIKKworc3RhdGljIGNo YXIgKmx2bV9zbmFwX3ZlcnNpb24gX19hdHRyaWJ1dGVfXyAoKHVudXNlZCkpID0gIkxWTSAiTFZN X1JFTEVBU0VfTkFNRSIgc25hcHNob3QgY29kZSAoIkxWTV9SRUxFQVNFX0RBVEUiKVxuIjsKIAot c3RhdGljIGNoYXIgKmx2bV9zbmFwX3ZlcnNpb24gX19hdHRyaWJ1dGVfXyAoKHVudXNlZCkpID0g IkxWTSAwLjkuMV9iZXRhMiBzbmFwc2hvdCBjb2RlICgxOC8wMS8yMDAxKVxuIjsKIAogZXh0ZXJu IGNvbnN0IGNoYXIgKmNvbnN0IGx2bV9uYW1lOwogZXh0ZXJuIGludCBsdm1fYmxvY2tzaXplc1td OwogCiB2b2lkIGx2bV9zbmFwc2hvdF9yZWxlYXNlKGx2X3QgKik7CiAKLXVpbnQgbHZtX3B2X2dl dF9udW1iZXIodmdfdCAqIHZnLCBrZGV2X3QgcmRldikKLXsKK3N0YXRpYyBpbnQgX3dyaXRlX0NP V190YWJsZV9ibG9jayh2Z190ICp2ZywgbHZfdCAqbHYsIGludCBpZHgsCisJCQkJICBjb25zdCBj aGFyICoqcmVhc29uKTsKK3N0YXRpYyB2b2lkIF9kaXNhYmxlX3NuYXBzaG90KHZnX3QgKnZnLCBs dl90ICpsdik7CisKKworc3RhdGljIGlubGluZSBpbnQgX19icndfa2lvdmVjKGludCBydywgaW50 IG5yLCBzdHJ1Y3Qga2lvYnVmICppb3ZlY1tdLAorCQkJICAgICAgIGtkZXZfdCBkZXYsIHVuc2ln bmVkIGxvbmcgYltdLCBpbnQgc2l6ZSwKKwkJCSAgICAgICBsdl90ICpsdikgeworCXJldHVybiBi cndfa2lvdmVjKHJ3LCBuciwgaW92ZWMsIGRldiwgYiwgc2l6ZSk7Cit9CisKKworc3RhdGljIGlu dCBfcHZfZ2V0X251bWJlcih2Z190ICogdmcsIGtkZXZfdCByZGV2LCB1aW50ICpwdm4pIHsKIAl1 aW50IHA7CisJZm9yKHAgPSAwOyBwIDwgdmctPnB2X21heDsgcCsrKSB7CisJCWlmKHZnLT5wdltw XSA9PSBOVUxMKQorCQkJY29udGludWU7CiAKLQlmb3IgKCBwID0gMDsgcCA8IHZnLT5wdl9tYXg7 IHArKykKLQl7Ci0JCWlmICggdmctPnB2W3BdID09IE5VTEwpIGNvbnRpbnVlOwotCQlpZiAoIHZn LT5wdltwXS0+cHZfZGV2ID09IHJkZXYpIGJyZWFrOworCQlpZih2Zy0+cHZbcF0tPnB2X2RldiA9 PSByZGV2KQorCQkJYnJlYWs7CisJfQorCisJaWYocCA+PSB2Zy0+cHZfbWF4KSB7CisJCS8qIGJh ZCBuZXdzLCB0aGUgc25hcHNob3QgQ09XIHRhYmxlIGlzIHByb2JhYmx5IGNvcnJ1cHQgKi8KKwkJ cHJpbnRrKEtFUk5fRVJSCisJCSAgICAgICAiJXMgLS0gX3B2X2dldF9udW1iZXIgZmFpbGVkIGZv ciByZGV2ID0gJXVcbiIsCisJCSAgICAgIGx2bV9uYW1lLCByZGV2KTsKKwkJcmV0dXJuIC0xOwog CX0KIAotCXJldHVybiB2Zy0+cHZbcF0tPnB2X251bWJlcjsKKwkqcHZuID0gdmctPnB2W3BdLT5w dl9udW1iZXI7CisJcmV0dXJuIDA7CiB9CiAKIApAQCAtMTMzLDcgKzE2OCw3IEBACiAJcmV0dXJu IHJldDsKIH0KIAotdm9pZCBsdm1fZHJvcF9zbmFwc2hvdChsdl90ICogbHZfc25hcCwgY29uc3Qg Y2hhciAqIHJlYXNvbikKK3ZvaWQgbHZtX2Ryb3Bfc25hcHNob3QodmdfdCAqdmcsIGx2X3QgKmx2 X3NuYXAsIGNvbnN0IGNoYXIgKnJlYXNvbikKIHsKIAlrZGV2X3QgbGFzdF9kZXY7CiAJaW50IGk7 CkBAIC0xNDIsNiArMTc3LDkgQEAKIAkgICBvciBlcnJvciBvbiB0aGlzIHNuYXBzaG90IC0tPiBy ZWxlYXNlIGl0ICovCiAJaW52YWxpZGF0ZV9idWZmZXJzKGx2X3NuYXAtPmx2X2Rldik7CiAKKwkv KiB3aXBlIHRoZSBzbmFwc2hvdCBzaW5jZSBpdCdzIGluY29uc2lzdGVudCBub3cgKi8KKwlfZGlz YWJsZV9zbmFwc2hvdCh2ZywgbHZfc25hcCk7CisKIAlmb3IgKGkgPSBsYXN0X2RldiA9IDA7IGkg PCBsdl9zbmFwLT5sdl9yZW1hcF9wdHI7IGkrKykgewogCQlpZiAoIGx2X3NuYXAtPmx2X2Jsb2Nr X2V4Y2VwdGlvbltpXS5yZGV2X25ldyAhPSBsYXN0X2RldikgewogCQkJbGFzdF9kZXYgPSBsdl9z bmFwLT5sdl9ibG9ja19leGNlcHRpb25baV0ucmRldl9uZXc7CkBAIC0xNTAsOSArMTg4LDEwIEBA CiAJfQogCiAJbHZtX3NuYXBzaG90X3JlbGVhc2UobHZfc25hcCk7CisJbHZfc25hcC0+bHZfc3Rh dHVzICY9IH5MVl9BQ1RJVkU7CiAKIAlwcmludGsoS0VSTl9JTkZPCi0JICAgICAgICIlcyAtLSBn aXZpbmcgdXAgdG8gc25hcHNob3QgJXMgb24gJXMgZHVlICVzXG4iLAorCSAgICAgICAiJXMgLS0g Z2l2aW5nIHVwIHRvIHNuYXBzaG90ICVzIG9uICVzOiAlc1xuIiwKIAkgICAgICAgbHZtX25hbWUs IGx2X3NuYXAtPmx2X3NuYXBzaG90X29yZy0+bHZfbmFtZSwgbHZfc25hcC0+bHZfbmFtZSwKIAkg ICAgICAgcmVhc29uKTsKIH0KQEAgLTIwOSwxMjggKzI0OCw1OCBAQAogI2VuZGlmCiAKIAotdm9p ZCBsdm1fc25hcHNob3RfZmlsbF9DT1dfcGFnZSh2Z190ICogdmcsIGx2X3QgKiBsdl9zbmFwKQor aW50IGx2bV9zbmFwc2hvdF9maWxsX0NPV19wYWdlKHZnX3QgKiB2ZywgbHZfdCAqIGx2X3NuYXAp CiB7Ci0JaW50IAlpZCA9IDAsIGlzID0gbHZfc25hcC0+bHZfcmVtYXBfcHRyOwotCXVsb25nCWJs a3NpemVfc25hcDsKLQlsdl9DT1dfdGFibGVfZGlza190ICogbHZfQ09XX3RhYmxlID0KLQkgICAo IGx2X0NPV190YWJsZV9kaXNrX3QgKikgcGFnZV9hZGRyZXNzKGx2X3NuYXAtPmx2X0NPV190YWJs ZV9wYWdlKTsKKwl1aW50IHB2bjsKKwlpbnQgaWQgPSAwLCBpcyA9IGx2X3NuYXAtPmx2X3JlbWFw X3B0cjsKKwl1bG9uZyBibGtzaXplX3NuYXA7CisJbHZfQ09XX3RhYmxlX2Rpc2tfdCAqIGx2X0NP V190YWJsZSA9IChsdl9DT1dfdGFibGVfZGlza190ICopCisJCXBhZ2VfYWRkcmVzcyhsdl9zbmFw LT5sdl9DT1dfdGFibGVfaW9idWYtPm1hcGxpc3RbMF0pOworCisJaWYgKGlzID09IDApCisJCXJl dHVybiAwOwogCi0JaWYgKGlzID09IDApIHJldHVybjsKIAlpcy0tOwotICAgICAgICBibGtzaXpl X3NuYXAgPSBsdm1fZ2V0X2Jsa3NpemUobHZfc25hcC0+bHZfYmxvY2tfZXhjZXB0aW9uW2lzXS5y ZGV2X25ldyk7CisgICAgICAgIGJsa3NpemVfc25hcCA9CisJCWx2bV9nZXRfYmxrc2l6ZShsdl9z bmFwLT5sdl9ibG9ja19leGNlcHRpb25baXNdLnJkZXZfbmV3KTsKICAgICAgICAgaXMgLT0gaXMg JSAoYmxrc2l6ZV9zbmFwIC8gc2l6ZW9mKGx2X0NPV190YWJsZV9kaXNrX3QpKTsKIAogCW1lbXNl dChsdl9DT1dfdGFibGUsIDAsIGJsa3NpemVfc25hcCk7CiAJZm9yICggOyBpcyA8IGx2X3NuYXAt Pmx2X3JlbWFwX3B0cjsgaXMrKywgaWQrKykgewogCQkvKiBzdG9yZSBuZXcgQ09XX3RhYmxlIGVu dHJ5ICovCi0JCWx2X0NPV190YWJsZVtpZF0ucHZfb3JnX251bWJlciA9IGNwdV90b19sZTY0KGx2 bV9wdl9nZXRfbnVtYmVyKHZnLCBsdl9zbmFwLT5sdl9ibG9ja19leGNlcHRpb25baXNdLnJkZXZf b3JnKSk7Ci0JCWx2X0NPV190YWJsZVtpZF0ucHZfb3JnX3JzZWN0b3IgPSBjcHVfdG9fbGU2NChs dl9zbmFwLT5sdl9ibG9ja19leGNlcHRpb25baXNdLnJzZWN0b3Jfb3JnKTsKLQkJbHZfQ09XX3Rh YmxlW2lkXS5wdl9zbmFwX251bWJlciA9IGNwdV90b19sZTY0KGx2bV9wdl9nZXRfbnVtYmVyKHZn LCBsdl9zbmFwLT5sdl9ibG9ja19leGNlcHRpb25baXNdLnJkZXZfbmV3KSk7Ci0JCWx2X0NPV190 YWJsZVtpZF0ucHZfc25hcF9yc2VjdG9yID0gY3B1X3RvX2xlNjQobHZfc25hcC0+bHZfYmxvY2tf ZXhjZXB0aW9uW2lzXS5yc2VjdG9yX25ldyk7CisJCWx2X2Jsb2NrX2V4Y2VwdGlvbl90ICpiZSA9 IGx2X3NuYXAtPmx2X2Jsb2NrX2V4Y2VwdGlvbiArIGlzOworCQlpZihfcHZfZ2V0X251bWJlcih2 ZywgYmUtPnJkZXZfb3JnLCAmcHZuKSkKKwkJCWdvdG8gYmFkOworCisJCWx2X0NPV190YWJsZVtp ZF0ucHZfb3JnX251bWJlciA9IGNwdV90b19sZTY0KHB2bik7CisJCWx2X0NPV190YWJsZVtpZF0u cHZfb3JnX3JzZWN0b3IgPSBjcHVfdG9fbGU2NChiZS0+cnNlY3Rvcl9vcmcpOworCQlpZihfcHZf Z2V0X251bWJlcih2ZywgYmUtPnJkZXZfbmV3LCAmcHZuKSkKKwkJCWdvdG8gYmFkOworCisJCWx2 X0NPV190YWJsZVtpZF0ucHZfc25hcF9udW1iZXIgPSBjcHVfdG9fbGU2NChwdm4pOworCQlsdl9D T1dfdGFibGVbaWRdLnB2X3NuYXBfcnNlY3RvciA9CisJCQljcHVfdG9fbGU2NChiZS0+cnNlY3Rv cl9uZXcpOwogCX0KKworCXJldHVybiAwOworCisgYmFkOgorCXByaW50ayhLRVJOX0VSUiAiJXMg LS0gbHZtX3NuYXBzaG90X2ZpbGxfQ09XX3BhZ2UgZmFpbGVkIiwgbHZtX25hbWUpOworCXJldHVy biAtMTsKIH0KIAogCiAvKgogICogd3JpdGVzIGEgQ09XIGV4Y2VwdGlvbiB0YWJsZSBzZWN0b3Ig dG8gZGlzayAoSE0pCi0gKgogICovCi0KLWludCBsdm1fd3JpdGVfQ09XX3RhYmxlX2Jsb2NrKHZn X3QgKiB2ZywgbHZfdCAqIGx2X3NuYXApCitpbnQgbHZtX3dyaXRlX0NPV190YWJsZV9ibG9jayh2 Z190ICogdmcsIGx2X3QgKmx2X3NuYXApCiB7Ci0JaW50IGJsa3NpemVfc25hcDsKLQlpbnQgZW5k X29mX3RhYmxlOwotCWludCBpZHggPSBsdl9zbmFwLT5sdl9yZW1hcF9wdHIsIGlkeF9DT1dfdGFi bGU7Ci0JaW50IG5yX3BhZ2VzX3RtcDsKLQlpbnQgbGVuZ3RoX3RtcDsKLQl1bG9uZyBzbmFwX3Bl X3N0YXJ0LCBDT1dfdGFibGVfc2VjdG9yX29mZnNldCwKLQkgICAgICBDT1dfZW50cmllc19wZXJf cGUsIENPV19jaHVua3NfcGVyX3BlLCBDT1dfZW50cmllc19wZXJfYmxvY2s7Ci0JY29uc3QgY2hh ciAqIHJlYXNvbjsKLQlrZGV2X3Qgc25hcF9waHlzX2RldjsKLQlzdHJ1Y3Qga2lvYnVmICogaW9i dWYgPSBsdl9zbmFwLT5sdl9pb2J1ZjsKLQlzdHJ1Y3QgcGFnZSAqIHBhZ2VfdG1wOwotCWx2X0NP V190YWJsZV9kaXNrX3QgKiBsdl9DT1dfdGFibGUgPQotCSAgICggbHZfQ09XX3RhYmxlX2Rpc2tf dCAqKSBwYWdlX2FkZHJlc3MobHZfc25hcC0+bHZfQ09XX3RhYmxlX3BhZ2UpOwotCi0JaWR4LS07 Ci0KLQlDT1dfY2h1bmtzX3Blcl9wZSA9IExWTV9HRVRfQ09XX1RBQkxFX0NIVU5LU19QRVJfUEUo dmcsIGx2X3NuYXApOwotCUNPV19lbnRyaWVzX3Blcl9wZSA9IExWTV9HRVRfQ09XX1RBQkxFX0VO VFJJRVNfUEVSX1BFKHZnLCBsdl9zbmFwKTsKLQotCS8qIGdldCBwaHlzaWNhbCBhZGRyZXNzZSBv ZiBkZXN0aW5hdGlvbiBjaHVuayAqLwotCXNuYXBfcGh5c19kZXYgPSBsdl9zbmFwLT5sdl9ibG9j a19leGNlcHRpb25baWR4XS5yZGV2X25ldzsKLQlzbmFwX3BlX3N0YXJ0ID0gbHZfc25hcC0+bHZf YmxvY2tfZXhjZXB0aW9uW2lkeCAtIChpZHggJSBDT1dfZW50cmllc19wZXJfcGUpXS5yc2VjdG9y X25ldyAtIGx2X3NuYXAtPmx2X2NodW5rX3NpemU7Ci0KLQlibGtzaXplX3NuYXAgPSBsdm1fZ2V0 X2Jsa3NpemUoc25hcF9waHlzX2Rldik7Ci0KLSAgICAgICAgQ09XX2VudHJpZXNfcGVyX2Jsb2Nr ID0gYmxrc2l6ZV9zbmFwIC8gc2l6ZW9mKGx2X0NPV190YWJsZV9kaXNrX3QpOwotICAgICAgICBp ZHhfQ09XX3RhYmxlID0gaWR4ICUgQ09XX2VudHJpZXNfcGVyX3BlICUgQ09XX2VudHJpZXNfcGVy X2Jsb2NrOwotCi0JaWYgKCBpZHhfQ09XX3RhYmxlID09IDApIG1lbXNldChsdl9DT1dfdGFibGUs IDAsIGJsa3NpemVfc25hcCk7Ci0KLQkvKiBzZWN0b3Igb2Zmc2V0IGludG8gdGhlIG9uIGRpc2sg Q09XIHRhYmxlICovCi0JQ09XX3RhYmxlX3NlY3Rvcl9vZmZzZXQgPSAoaWR4ICUgQ09XX2VudHJp ZXNfcGVyX3BlKSAvIChTRUNUT1JfU0laRSAvIHNpemVvZihsdl9DT1dfdGFibGVfZGlza190KSk7 Ci0KLSAgICAgICAgLyogQ09XIHRhYmxlIGJsb2NrIHRvIHdyaXRlIG5leHQgKi8KLQlpb2J1Zi0+ YmxvY2tzWzBdID0gKHNuYXBfcGVfc3RhcnQgKyBDT1dfdGFibGVfc2VjdG9yX29mZnNldCkgPj4g KGJsa3NpemVfc25hcCA+PiAxMCk7Ci0KLQkvKiBzdG9yZSBuZXcgQ09XX3RhYmxlIGVudHJ5ICov Ci0JbHZfQ09XX3RhYmxlW2lkeF9DT1dfdGFibGVdLnB2X29yZ19udW1iZXIgPSBjcHVfdG9fbGU2 NChsdm1fcHZfZ2V0X251bWJlcih2ZywgbHZfc25hcC0+bHZfYmxvY2tfZXhjZXB0aW9uW2lkeF0u cmRldl9vcmcpKTsKLQlsdl9DT1dfdGFibGVbaWR4X0NPV190YWJsZV0ucHZfb3JnX3JzZWN0b3Ig PSBjcHVfdG9fbGU2NChsdl9zbmFwLT5sdl9ibG9ja19leGNlcHRpb25baWR4XS5yc2VjdG9yX29y Zyk7Ci0JbHZfQ09XX3RhYmxlW2lkeF9DT1dfdGFibGVdLnB2X3NuYXBfbnVtYmVyID0gY3B1X3Rv X2xlNjQobHZtX3B2X2dldF9udW1iZXIodmcsIHNuYXBfcGh5c19kZXYpKTsKLQlsdl9DT1dfdGFi bGVbaWR4X0NPV190YWJsZV0ucHZfc25hcF9yc2VjdG9yID0gY3B1X3RvX2xlNjQobHZfc25hcC0+ bHZfYmxvY2tfZXhjZXB0aW9uW2lkeF0ucnNlY3Rvcl9uZXcpOwotCi0JbGVuZ3RoX3RtcCA9IGlv YnVmLT5sZW5ndGg7Ci0JaW9idWYtPmxlbmd0aCA9IGJsa3NpemVfc25hcDsKLQlwYWdlX3RtcCA9 IGlvYnVmLT5tYXBsaXN0WzBdOwotICAgICAgICBpb2J1Zi0+bWFwbGlzdFswXSA9IGx2X3NuYXAt Pmx2X0NPV190YWJsZV9wYWdlOwotCW5yX3BhZ2VzX3RtcCA9IGlvYnVmLT5ucl9wYWdlczsKLQlp b2J1Zi0+bnJfcGFnZXMgPSAxOwotCi0JaWYgKGJyd19raW92ZWMoV1JJVEUsIDEsICZpb2J1Ziwg c25hcF9waHlzX2RldiwKLQkJICAgICAgIGlvYnVmLT5ibG9ja3MsIGJsa3NpemVfc25hcCkgIT0g Ymxrc2l6ZV9zbmFwKQotCQlnb3RvIGZhaWxfcmF3X3dyaXRlOwotCi0KLQkvKiBpbml0aWFsaXph dGlvbiBvZiBuZXh0IENPVyBleGNlcHRpb24gdGFibGUgYmxvY2sgd2l0aCB6ZXJvZXMgKi8KLQll bmRfb2ZfdGFibGUgPSBpZHggJSBDT1dfZW50cmllc19wZXJfcGUgPT0gQ09XX2VudHJpZXNfcGVy X3BlIC0gMTsKLQlpZiAoaWR4X0NPV190YWJsZSAlIENPV19lbnRyaWVzX3Blcl9ibG9jayA9PSBD T1dfZW50cmllc19wZXJfYmxvY2sgLSAxIHx8IGVuZF9vZl90YWJsZSkKLQl7Ci0JCS8qIGRvbid0 IGdvIGJleW9uZCB0aGUgZW5kICovCi0JCWlmIChpZHggKyAxID49IGx2X3NuYXAtPmx2X3JlbWFw X2VuZCkgZ290byBnb29kX291dDsKLQotCQltZW1zZXQobHZfQ09XX3RhYmxlLCAwLCBibGtzaXpl X3NuYXApOwotCi0JCWlmIChlbmRfb2ZfdGFibGUpCi0JCXsKLQkJCWlkeCsrOwotCQkJc25hcF9w aHlzX2RldiA9IGx2X3NuYXAtPmx2X2Jsb2NrX2V4Y2VwdGlvbltpZHhdLnJkZXZfbmV3OwotCQkJ c25hcF9wZV9zdGFydCA9IGx2X3NuYXAtPmx2X2Jsb2NrX2V4Y2VwdGlvbltpZHggLSAoaWR4ICUg Q09XX2VudHJpZXNfcGVyX3BlKV0ucnNlY3Rvcl9uZXcgLSBsdl9zbmFwLT5sdl9jaHVua19zaXpl OwotCQkJYmxrc2l6ZV9zbmFwID0gbHZtX2dldF9ibGtzaXplKHNuYXBfcGh5c19kZXYpOwotCQkJ aW9idWYtPmJsb2Nrc1swXSA9IHNuYXBfcGVfc3RhcnQgPj4gKGJsa3NpemVfc25hcCA+PiAxMCk7 Ci0JCX0gZWxzZSBpb2J1Zi0+YmxvY2tzWzBdKys7Ci0KLQkJaWYgKGJyd19raW92ZWMoV1JJVEUs IDEsICZpb2J1Ziwgc25hcF9waHlzX2RldiwKLQkJCSAgICAgICBpb2J1Zi0+YmxvY2tzLCBibGtz aXplX3NuYXApICE9IGJsa3NpemVfc25hcCkKLQkJCWdvdG8gZmFpbF9yYXdfd3JpdGU7Ci0JfQot Ci0KLSBnb29kX291dDoKLQlpb2J1Zi0+bGVuZ3RoID0gbGVuZ3RoX3RtcDsKLSAgICAgICAgaW9i dWYtPm1hcGxpc3RbMF0gPSBwYWdlX3RtcDsKLQlpb2J1Zi0+bnJfcGFnZXMgPSBucl9wYWdlc190 bXA7Ci0JcmV0dXJuIDA7Ci0KLQkvKiBzbG93IHBhdGggKi8KLSBvdXQ6Ci0JbHZtX2Ryb3Bfc25h cHNob3QobHZfc25hcCwgcmVhc29uKTsKLQlyZXR1cm4gMTsKLQotIGZhaWxfcmF3X3dyaXRlOgot CXJlYXNvbiA9ICJ3cml0ZSBlcnJvciI7Ci0JZ290byBvdXQ7CisJaW50IHI7CisJY29uc3QgY2hh ciAqZXJyOworCWlmKChyID0gX3dyaXRlX0NPV190YWJsZV9ibG9jayh2ZywgbHZfc25hcCwKKwkJ CQkgICAgICAgbHZfc25hcC0+bHZfcmVtYXBfcHRyIC0gMSwgJmVycikpKQorCQlsdm1fZHJvcF9z bmFwc2hvdCh2ZywgbHZfc25hcCwgZXJyKTsKKwlyZXR1cm4gcjsKIH0KIAogLyoKQEAgLTM0NSwx MiArMzE0LDEzIEBACiAJCSAgICAgdW5zaWduZWQgbG9uZyBvcmdfcGh5c19zZWN0b3IsCiAJCSAg ICAgdW5zaWduZWQgbG9uZyBvcmdfcGVfc3RhcnQsCiAJCSAgICAgdW5zaWduZWQgbG9uZyBvcmdf dmlydF9zZWN0b3IsCi0JCSAgICAgbHZfdCAqIGx2X3NuYXApCisJCSAgICAgdmdfdCAqdmcsIGx2 X3QqIGx2X3NuYXApCiB7CiAJY29uc3QgY2hhciAqIHJlYXNvbjsKIAl1bnNpZ25lZCBsb25nIG9y Z19zdGFydCwgc25hcF9zdGFydCwgc25hcF9waHlzX2RldiwgdmlydF9zdGFydCwgcGVfb2ZmOwog CWludCBpZHggPSBsdl9zbmFwLT5sdl9yZW1hcF9wdHIsIGNodW5rX3NpemUgPSBsdl9zbmFwLT5s dl9jaHVua19zaXplOwogCXN0cnVjdCBraW9idWYgKiBpb2J1ZjsKKwl1bnNpZ25lZCBsb25nIGJs b2Nrc1tLSU9fTUFYX1NFQ1RPUlNdOwogCWludCBibGtzaXplX3NuYXAsIGJsa3NpemVfb3JnLCBt aW5fYmxrc2l6ZSwgbWF4X2Jsa3NpemU7CiAJaW50IG1heF9zZWN0b3JzLCBucl9zZWN0b3JzOwog CkBAIC0zNzAsMTMgKzM0MCwxMSBAQAogI2lmZGVmIERFQlVHX1NOQVBTSE9UCiAJcHJpbnRrKEtF Uk5fSU5GTwogCSAgICAgICAiJXMgLS0gQ09XOiAiCi0JICAgICAgICJvcmcgJTAyZDolMDJkIGZh dWx0aW5nICVsdSBzdGFydCAlbHUsICIKLQkgICAgICAgInNuYXAgJTAyZDolMDJkIHN0YXJ0ICVs dSwgIgorCSAgICAgICAib3JnICVzIGZhdWx0aW5nICVsdSBzdGFydCAlbHUsIHNuYXAgJXMgc3Rh cnQgJWx1LCAiCiAJICAgICAgICJzaXplICVkLCBwZV9zdGFydCAlbHUgcGVfb2ZmICVsdSwgdmly dF9zZWMgJWx1XG4iLAogCSAgICAgICBsdm1fbmFtZSwKLQkgICAgICAgTUFKT1Iob3JnX3BoeXNf ZGV2KSwgTUlOT1Iob3JnX3BoeXNfZGV2KSwgb3JnX3BoeXNfc2VjdG9yLAotCSAgICAgICBvcmdf c3RhcnQsCi0JICAgICAgIE1BSk9SKHNuYXBfcGh5c19kZXYpLCBNSU5PUihzbmFwX3BoeXNfZGV2 KSwgc25hcF9zdGFydCwKKwkgICAgICAga2Rldm5hbWUob3JnX3BoeXNfZGV2KSwgb3JnX3BoeXNf c2VjdG9yLCBvcmdfc3RhcnQsCisJICAgICAgIGtkZXZuYW1lKHNuYXBfcGh5c19kZXYpLCBzbmFw X3N0YXJ0LAogCSAgICAgICBjaHVua19zaXplLAogCSAgICAgICBvcmdfcGVfc3RhcnQsIHBlX29m ZiwKIAkgICAgICAgb3JnX3ZpcnRfc2VjdG9yKTsKQEAgLTQwMCwxNiArMzY4LDE2IEBACiAKIAkJ aW9idWYtPmxlbmd0aCA9IG5yX3NlY3RvcnMgPDwgOTsKIAotCQlsdm1fc25hcHNob3RfcHJlcGFy ZV9ibG9ja3MoaW9idWYtPmJsb2Nrcywgb3JnX3N0YXJ0LAorCQlsdm1fc25hcHNob3RfcHJlcGFy ZV9ibG9ja3MoYmxvY2tzLCBvcmdfc3RhcnQsCiAJCQkJCSAgICBucl9zZWN0b3JzLCBibGtzaXpl X29yZyk7Ci0JCWlmIChicndfa2lvdmVjKFJFQUQsIDEsICZpb2J1Ziwgb3JnX3BoeXNfZGV2LAot CQkJICAgICAgIGlvYnVmLT5ibG9ja3MsIGJsa3NpemVfb3JnKSAhPSAobnJfc2VjdG9yczw8OSkp CisJCWlmIChfX2Jyd19raW92ZWMoUkVBRCwgMSwgJmlvYnVmLCBvcmdfcGh5c19kZXYsIGJsb2Nr cywKKwkJCQkgYmxrc2l6ZV9vcmcsIGx2X3NuYXApICE9IChucl9zZWN0b3JzPDw5KSkKIAkJCWdv dG8gZmFpbF9yYXdfcmVhZDsKIAotCQlsdm1fc25hcHNob3RfcHJlcGFyZV9ibG9ja3MoaW9idWYt PmJsb2Nrcywgc25hcF9zdGFydCwKKwkJbHZtX3NuYXBzaG90X3ByZXBhcmVfYmxvY2tzKGJsb2Nr cywgc25hcF9zdGFydCwKIAkJCQkJICAgIG5yX3NlY3RvcnMsIGJsa3NpemVfc25hcCk7Ci0JCWlm IChicndfa2lvdmVjKFdSSVRFLCAxLCAmaW9idWYsIHNuYXBfcGh5c19kZXYsCi0JCQkgICAgICAg aW9idWYtPmJsb2NrcywgYmxrc2l6ZV9zbmFwKSAhPSAobnJfc2VjdG9yczw8OSkpCisJCWlmIChf X2Jyd19raW92ZWMoV1JJVEUsIDEsICZpb2J1Ziwgc25hcF9waHlzX2RldiwgYmxvY2tzLAorCQkJ CSBibGtzaXplX3NuYXAsIGx2X3NuYXApICE9IChucl9zZWN0b3JzPDw5KSkKIAkJCWdvdG8gZmFp bF9yYXdfd3JpdGU7CiAJfQogCkBAIC00MzQsMjAgKzQwMiwyMCBAQAogCXJldHVybiAwOwogCiAJ Lyogc2xvdyBwYXRoICovCi0gb3V0OgotCWx2bV9kcm9wX3NuYXBzaG90KGx2X3NuYXAsIHJlYXNv bik7CitvdXQ6CisJbHZtX2Ryb3Bfc25hcHNob3QodmcsIGx2X3NuYXAsIHJlYXNvbik7CiAJcmV0 dXJuIDE7CiAKLSBmYWlsX291dF9vZl9zcGFjZToKK2ZhaWxfb3V0X29mX3NwYWNlOgogCXJlYXNv biA9ICJvdXQgb2Ygc3BhY2UiOwogCWdvdG8gb3V0OwotIGZhaWxfcmF3X3JlYWQ6CitmYWlsX3Jh d19yZWFkOgogCXJlYXNvbiA9ICJyZWFkIGVycm9yIjsKIAlnb3RvIG91dDsKLSBmYWlsX3Jhd193 cml0ZToKK2ZhaWxfcmF3X3dyaXRlOgogCXJlYXNvbiA9ICJ3cml0ZSBlcnJvciI7CiAJZ290byBv dXQ7Ci0gZmFpbF9ibGtzaXplOgorZmFpbF9ibGtzaXplOgogCXJlYXNvbiA9ICJibG9ja3NpemUg ZXJyb3IiOwogCWdvdG8gb3V0OwogfQpAQCAtNDU2LDMwICs0MjQsMzAgQEAKIHsKIAlpbnQgYnl0 ZXMsIG5yX3BhZ2VzLCBlcnIsIGk7CiAKLQlieXRlcyA9IHNlY3RvcnMgPDwgOTsKKwlieXRlcyA9 IHNlY3RvcnMgKiBTRUNUT1JfU0laRTsKIAlucl9wYWdlcyA9IChieXRlcyArIH5QQUdFX01BU0sp ID4+IFBBR0VfU0hJRlQ7CiAJZXJyID0gZXhwYW5kX2tpb2J1Zihpb2J1ZiwgbnJfcGFnZXMpOwot CWlmIChlcnIpCi0JCWdvdG8gb3V0OworCWlmIChlcnIpIGdvdG8gb3V0OwogCiAJZXJyID0gLUVO T01FTTsKLQlpb2J1Zi0+bG9ja2VkID0gMDsKKwlpb2J1Zi0+bG9ja2VkID0gMTsKIAlpb2J1Zi0+ bnJfcGFnZXMgPSAwOwogCWZvciAoaSA9IDA7IGkgPCBucl9wYWdlczsgaSsrKQogCXsKIAkJc3Ry dWN0IHBhZ2UgKiBwYWdlOwogCiAJCXBhZ2UgPSBhbGxvY19wYWdlKEdGUF9LRVJORUwpOwotCQlp ZiAoIXBhZ2UpCi0JCQlnb3RvIG91dDsKKwkJaWYgKCFwYWdlKSBnb3RvIG91dDsKIAogCQlpb2J1 Zi0+bWFwbGlzdFtpXSA9IHBhZ2U7CisJCUxvY2tQYWdlKHBhZ2UpOwogCQlpb2J1Zi0+bnJfcGFn ZXMrKzsKIAl9CiAJaW9idWYtPm9mZnNldCA9IDA7CiAKIAllcnIgPSAwOwotIG91dDoKKworb3V0 OgogCXJldHVybiBlcnI7CiB9CiAKQEAgLTUyMSw0MSArNDg5LDQ5IEBACiAJd2hpbGUgKGJ1Y2tl dHMtLSkKIAkJSU5JVF9MSVNUX0hFQUQoaGFzaCtidWNrZXRzKTsKIAllcnIgPSAwOwotIG91dDoK K291dDoKIAlyZXR1cm4gZXJyOwogfQogCiBpbnQgbHZtX3NuYXBzaG90X2FsbG9jKGx2X3QgKiBs dl9zbmFwKQogewotCWludCBlcnIsIGJsb2Nrc2l6ZSwgbWF4X3NlY3RvcnM7CisJaW50IHJldCwg bWF4X3NlY3RvcnM7CiAKLQllcnIgPSBhbGxvY19raW92ZWMoMSwgJmx2X3NuYXAtPmx2X2lvYnVm KTsKLQlpZiAoZXJyKQotCQlnb3RvIG91dDsKKwkvKiBhbGxvY2F0ZSBraW92ZWMgdG8gZG8gY2h1 bmsgaW8gKi8KKwlyZXQgPSBhbGxvY19raW92ZWMoMSwgJmx2X3NuYXAtPmx2X2lvYnVmKTsKKwlp ZiAocmV0KSBnb3RvIG91dDsKIAotCWJsb2Nrc2l6ZSA9IGx2bV9ibG9ja3NpemVzW01JTk9SKGx2 X3NuYXAtPmx2X2RldildOwogCW1heF9zZWN0b3JzID0gS0lPX01BWF9TRUNUT1JTIDw8IChQQUdF X1NISUZULTkpOwogCi0JZXJyID0gbHZtX3NuYXBzaG90X2FsbG9jX2lvYnVmX3BhZ2VzKGx2X3Nu YXAtPmx2X2lvYnVmLCBtYXhfc2VjdG9ycyk7Ci0JaWYgKGVycikKLQkJZ290byBvdXRfZnJlZV9r aW92ZWM7CisJcmV0ID0gbHZtX3NuYXBzaG90X2FsbG9jX2lvYnVmX3BhZ2VzKGx2X3NuYXAtPmx2 X2lvYnVmLCBtYXhfc2VjdG9ycyk7CisJaWYgKHJldCkgZ290byBvdXRfZnJlZV9raW92ZWM7CiAK LQllcnIgPSBsdm1fc25hcHNob3RfYWxsb2NfaGFzaF90YWJsZShsdl9zbmFwKTsKLQlpZiAoZXJy KQotCQlnb3RvIG91dF9mcmVlX2tpb3ZlYzsKKwkvKiBhbGxvY2F0ZSBraW92ZWMgdG8gZG8gZXhj ZXB0aW9uIHRhYmxlIGlvICovCisJcmV0ID0gYWxsb2Nfa2lvdmVjKDEsICZsdl9zbmFwLT5sdl9D T1dfdGFibGVfaW9idWYpOworCWlmIChyZXQpIGdvdG8gb3V0X2ZyZWVfa2lvdmVjOwogCisJcmV0 ID0gbHZtX3NuYXBzaG90X2FsbG9jX2lvYnVmX3BhZ2VzKGx2X3NuYXAtPmx2X0NPV190YWJsZV9p b2J1ZiwKKwkJCQkJICAgICBQQUdFX1NJWkUvU0VDVE9SX1NJWkUpOworCWlmIChyZXQpIGdvdG8g b3V0X2ZyZWVfYm90aF9raW92ZWNzOwogCi0JCWx2X3NuYXAtPmx2X0NPV190YWJsZV9wYWdlID0g YWxsb2NfcGFnZShHRlBfS0VSTkVMKTsKLQkJaWYgKCFsdl9zbmFwLT5sdl9DT1dfdGFibGVfcGFn ZSkKLQkJCWdvdG8gb3V0X2ZyZWVfa2lvdmVjOworCXJldCA9IGx2bV9zbmFwc2hvdF9hbGxvY19o YXNoX3RhYmxlKGx2X3NuYXApOworCWlmIChyZXQpIGdvdG8gb3V0X2ZyZWVfYm90aF9raW92ZWNz OwogCi0gb3V0OgotCXJldHVybiBlcnI7CiAKLSBvdXRfZnJlZV9raW92ZWM6CitvdXQ6CisJcmV0 dXJuIHJldDsKKworb3V0X2ZyZWVfYm90aF9raW92ZWNzOgorCXVubWFwX2tpb2J1Zihsdl9zbmFw LT5sdl9DT1dfdGFibGVfaW9idWYpOworCWZyZWVfa2lvdmVjKDEsICZsdl9zbmFwLT5sdl9DT1df dGFibGVfaW9idWYpOworCWx2X3NuYXAtPmx2X0NPV190YWJsZV9pb2J1ZiA9IE5VTEw7CisKK291 dF9mcmVlX2tpb3ZlYzoKIAl1bm1hcF9raW9idWYobHZfc25hcC0+bHZfaW9idWYpOwogCWZyZWVf a2lvdmVjKDEsICZsdl9zbmFwLT5sdl9pb2J1Zik7Ci0JdmZyZWUobHZfc25hcC0+bHZfc25hcHNo b3RfaGFzaF90YWJsZSk7CisJbHZfc25hcC0+bHZfaW9idWYgPSBOVUxMOworCWlmIChsdl9zbmFw LT5sdl9zbmFwc2hvdF9oYXNoX3RhYmxlICE9IE5VTEwpCisJCXZmcmVlKGx2X3NuYXAtPmx2X3Nu YXBzaG90X2hhc2hfdGFibGUpOwogCWx2X3NuYXAtPmx2X3NuYXBzaG90X2hhc2hfdGFibGUgPSBO VUxMOwogCWdvdG8gb3V0OwogfQpAQCAtNTgwLDkgKzU1NiwxMjUgQEAKIAkJZnJlZV9raW92ZWMo MSwgJmx2LT5sdl9pb2J1Zik7CiAJCWx2LT5sdl9pb2J1ZiA9IE5VTEw7CiAJfQotCWlmIChsdi0+ bHZfQ09XX3RhYmxlX3BhZ2UpCisJaWYgKGx2LT5sdl9DT1dfdGFibGVfaW9idWYpCiAJewotCQlm cmVlX3BhZ2UoKHVsb25nKWx2LT5sdl9DT1dfdGFibGVfcGFnZSk7Ci0JCWx2LT5sdl9DT1dfdGFi bGVfcGFnZSA9IE5VTEw7CisJICAgICAgICBraW9idWZfd2FpdF9mb3JfaW8obHYtPmx2X0NPV190 YWJsZV9pb2J1Zik7CisJCXVubWFwX2tpb2J1Zihsdi0+bHZfQ09XX3RhYmxlX2lvYnVmKTsKKwkJ ZnJlZV9raW92ZWMoMSwgJmx2LT5sdl9DT1dfdGFibGVfaW9idWYpOworCQlsdi0+bHZfQ09XX3Rh YmxlX2lvYnVmID0gTlVMTDsKKwl9Cit9CisKKworc3RhdGljIGludCBfd3JpdGVfQ09XX3RhYmxl X2Jsb2NrKHZnX3QgKnZnLCBsdl90ICpsdl9zbmFwLAorCQkJCSAgaW50IGlkeCwgY29uc3QgY2hh ciAqKnJlYXNvbikgeworCWludCBibGtzaXplX3NuYXA7CisJaW50IGVuZF9vZl90YWJsZTsKKwlp bnQgaWR4X0NPV190YWJsZTsKKwl1aW50IHB2bjsKKwl1bG9uZyBzbmFwX3BlX3N0YXJ0LCBDT1df dGFibGVfc2VjdG9yX29mZnNldCwKKwkgICAgICBDT1dfZW50cmllc19wZXJfcGUsIENPV19jaHVu a3NfcGVyX3BlLCBDT1dfZW50cmllc19wZXJfYmxvY2s7CisJdWxvbmcgYmxvY2tzWzFdOworCWtk ZXZfdCBzbmFwX3BoeXNfZGV2OworCWx2X2Jsb2NrX2V4Y2VwdGlvbl90ICpiZTsKKwlzdHJ1Y3Qg a2lvYnVmICpDT1dfdGFibGVfaW9idWYgPSBsdl9zbmFwLT5sdl9DT1dfdGFibGVfaW9idWY7CisJ bHZfQ09XX3RhYmxlX2Rpc2tfdCAqIGx2X0NPV190YWJsZSA9CisJICAgKCBsdl9DT1dfdGFibGVf ZGlza190ICopIHBhZ2VfYWRkcmVzcyhsdl9zbmFwLT5sdl9DT1dfdGFibGVfaW9idWYtPm1hcGxp c3RbMF0pOworCisJQ09XX2NodW5rc19wZXJfcGUgPSBMVk1fR0VUX0NPV19UQUJMRV9DSFVOS1Nf UEVSX1BFKHZnLCBsdl9zbmFwKTsKKwlDT1dfZW50cmllc19wZXJfcGUgPSBMVk1fR0VUX0NPV19U QUJMRV9FTlRSSUVTX1BFUl9QRSh2ZywgbHZfc25hcCk7CisKKwkvKiBnZXQgcGh5c2ljYWwgYWRk cmVzc2Ugb2YgZGVzdGluYXRpb24gY2h1bmsgKi8KKwlzbmFwX3BoeXNfZGV2ID0gbHZfc25hcC0+ bHZfYmxvY2tfZXhjZXB0aW9uW2lkeF0ucmRldl9uZXc7CisJc25hcF9wZV9zdGFydCA9IGx2X3Nu YXAtPmx2X2Jsb2NrX2V4Y2VwdGlvbltpZHggLSAoaWR4ICUgQ09XX2VudHJpZXNfcGVyX3BlKV0u cnNlY3Rvcl9uZXcgLSBsdl9zbmFwLT5sdl9jaHVua19zaXplOworCisJYmxrc2l6ZV9zbmFwID0g bHZtX2dldF9ibGtzaXplKHNuYXBfcGh5c19kZXYpOworCisgICAgICAgIENPV19lbnRyaWVzX3Bl cl9ibG9jayA9IGJsa3NpemVfc25hcCAvIHNpemVvZihsdl9DT1dfdGFibGVfZGlza190KTsKKyAg ICAgICAgaWR4X0NPV190YWJsZSA9IGlkeCAlIENPV19lbnRyaWVzX3Blcl9wZSAlIENPV19lbnRy aWVzX3Blcl9ibG9jazsKKworCWlmICggaWR4X0NPV190YWJsZSA9PSAwKSBtZW1zZXQobHZfQ09X X3RhYmxlLCAwLCBibGtzaXplX3NuYXApOworCisJLyogc2VjdG9yIG9mZnNldCBpbnRvIHRoZSBv biBkaXNrIENPVyB0YWJsZSAqLworCUNPV190YWJsZV9zZWN0b3Jfb2Zmc2V0ID0gKGlkeCAlIENP V19lbnRyaWVzX3Blcl9wZSkgLyAoU0VDVE9SX1NJWkUgLyBzaXplb2YobHZfQ09XX3RhYmxlX2Rp c2tfdCkpOworCisgICAgICAgIC8qIENPVyB0YWJsZSBibG9jayB0byB3cml0ZSBuZXh0ICovCisJ YmxvY2tzWzBdID0gKHNuYXBfcGVfc3RhcnQgKyBDT1dfdGFibGVfc2VjdG9yX29mZnNldCkgPj4g KGJsa3NpemVfc25hcCA+PiAxMCk7CisKKwkvKiBzdG9yZSBuZXcgQ09XX3RhYmxlIGVudHJ5ICov CisJYmUgPSBsdl9zbmFwLT5sdl9ibG9ja19leGNlcHRpb24gKyBpZHg7CisJaWYoX3B2X2dldF9u dW1iZXIodmcsIGJlLT5yZGV2X29yZywgJnB2bikpCisJCWdvdG8gZmFpbF9wdl9nZXRfbnVtYmVy OworCisJbHZfQ09XX3RhYmxlW2lkeF9DT1dfdGFibGVdLnB2X29yZ19udW1iZXIgPSBjcHVfdG9f bGU2NChwdm4pOworCWx2X0NPV190YWJsZVtpZHhfQ09XX3RhYmxlXS5wdl9vcmdfcnNlY3RvciA9 CisJCWNwdV90b19sZTY0KGJlLT5yc2VjdG9yX29yZyk7CisJaWYoX3B2X2dldF9udW1iZXIodmcs IHNuYXBfcGh5c19kZXYsICZwdm4pKQorCQlnb3RvIGZhaWxfcHZfZ2V0X251bWJlcjsKKworCWx2 X0NPV190YWJsZVtpZHhfQ09XX3RhYmxlXS5wdl9zbmFwX251bWJlciA9IGNwdV90b19sZTY0KHB2 bik7CisJbHZfQ09XX3RhYmxlW2lkeF9DT1dfdGFibGVdLnB2X3NuYXBfcnNlY3RvciA9CisJCWNw dV90b19sZTY0KGJlLT5yc2VjdG9yX25ldyk7CisKKwlDT1dfdGFibGVfaW9idWYtPmxlbmd0aCA9 IGJsa3NpemVfc25hcDsKKwkvKiBDT1dfdGFibGVfaW9idWYtPm5yX3BhZ2VzID0gMTsgKi8KKwor CWlmIChfX2Jyd19raW92ZWMoV1JJVEUsIDEsICZDT1dfdGFibGVfaW9idWYsIHNuYXBfcGh5c19k ZXYsCisJCQkgYmxvY2tzLCBibGtzaXplX3NuYXAsIGx2X3NuYXApICE9IGJsa3NpemVfc25hcCkK KwkJZ290byBmYWlsX3Jhd193cml0ZTsKKworCS8qIGluaXRpYWxpemF0aW9uIG9mIG5leHQgQ09X IGV4Y2VwdGlvbiB0YWJsZSBibG9jayB3aXRoIHplcm9lcyAqLworCWVuZF9vZl90YWJsZSA9IGlk eCAlIENPV19lbnRyaWVzX3Blcl9wZSA9PSBDT1dfZW50cmllc19wZXJfcGUgLSAxOworCWlmIChp ZHhfQ09XX3RhYmxlICUgQ09XX2VudHJpZXNfcGVyX2Jsb2NrID09IENPV19lbnRyaWVzX3Blcl9i bG9jayAtIDEgfHwgZW5kX29mX3RhYmxlKQorCXsKKwkJLyogZG9uJ3QgZ28gYmV5b25kIHRoZSBl bmQgKi8KKwkJaWYgKGlkeCArIDEgPj0gbHZfc25hcC0+bHZfcmVtYXBfZW5kKSBnb3RvIG91dDsK KworCQltZW1zZXQobHZfQ09XX3RhYmxlLCAwLCBibGtzaXplX3NuYXApOworCisJCWlmIChlbmRf b2ZfdGFibGUpCisJCXsKKwkJCWlkeCsrOworCQkJc25hcF9waHlzX2RldiA9IGx2X3NuYXAtPmx2 X2Jsb2NrX2V4Y2VwdGlvbltpZHhdLnJkZXZfbmV3OworCQkJc25hcF9wZV9zdGFydCA9IGx2X3Nu YXAtPmx2X2Jsb2NrX2V4Y2VwdGlvbltpZHggLSAoaWR4ICUgQ09XX2VudHJpZXNfcGVyX3BlKV0u cnNlY3Rvcl9uZXcgLSBsdl9zbmFwLT5sdl9jaHVua19zaXplOworCQkJYmxrc2l6ZV9zbmFwID0g bHZtX2dldF9ibGtzaXplKHNuYXBfcGh5c19kZXYpOworCQkJYmxvY2tzWzBdID0gc25hcF9wZV9z dGFydCA+PiAoYmxrc2l6ZV9zbmFwID4+IDEwKTsKKwkJfSBlbHNlIGJsb2Nrc1swXSsrOworCisJ CWlmIChfX2Jyd19raW92ZWMoV1JJVEUsIDEsICZDT1dfdGFibGVfaW9idWYsIHNuYXBfcGh5c19k ZXYsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBibG9ja3MsIGJsa3NpemVfc25h cCwgbHZfc25hcCkgIT0KKyAgICAgICAgICAgICAgICAgICAgYmxrc2l6ZV9zbmFwKQorCQkJZ290 byBmYWlsX3Jhd193cml0ZTsKKwl9CisKK291dDoKKwlyZXR1cm4gMDsKKworZmFpbF9yYXdfd3Jp dGU6CisJKnJlYXNvbiA9ICJ3cml0ZSBlcnJvciI7CisJcmV0dXJuIDE7CisKK2ZhaWxfcHZfZ2V0 X251bWJlcjoKKwkqcmVhc29uID0gIl9wdl9nZXRfbnVtYmVyIGZhaWxlZCI7CisJcmV0dXJuIDE7 Cit9CisKKy8qCisgKiBGSVhNRV8xLjIKKyAqIFRoaXMgZnVuY3Rpb24gaXMgYSBiaXQgb2YgYSBo YWNrOyB3ZSBuZWVkIHRvIGVuc3VyZSB0aGF0IHRoZQorICogc25hcHNob3QgaXMgbmV2ZXIgbWFk ZSBhY3RpdmUgYWdhaW4sIGJlY2F1c2UgaXQgd2lsbCBzdXJlbHkgYmUKKyAqIGNvcnJ1cHQuICBB dCB0aGUgbW9tZW50IHdlIGRvIG5vdCBoYXZlIGFjY2VzcyB0byB0aGUgTFZNIG1ldGFkYXRhCisg KiBmcm9tIHdpdGhpbiB0aGUga2VybmVsLiAgU28gd2Ugc2V0IHRoZSBmaXJzdCBleGNlcHRpb24g dG8gcG9pbnQgdG8KKyAqIHNlY3RvciAxICh3aGljaCB3aWxsIGFsd2F5cyBiZSB3aXRoaW4gdGhl IG1ldGFkYXRhLCBhbmQgYXMgc3VjaAorICogaW52YWxpZCkuICBVc2VyIGxhbmQgdG9vbHMgd2ls bCBjaGVjayBmb3IgdGhpcyB3aGVuIHRoZXkgYXJlIGFza2VkCisgKiB0byBhY3RpdmF0ZSB0aGUg c25hcHNob3QgYW5kIHByZXZlbnQgdGhpcyBmcm9tIGhhcHBlbmluZy4KKyAqLworCitzdGF0aWMg dm9pZCBfZGlzYWJsZV9zbmFwc2hvdCh2Z190ICp2ZywgbHZfdCAqbHYpIHsKKwljb25zdCBjaGFy ICplcnI7CisJbHYtPmx2X2Jsb2NrX2V4Y2VwdGlvblswXS5yc2VjdG9yX29yZyA9IExWTV9TTkFQ U0hPVF9EUk9QUEVEX1NFQ1RPUjsKKwlpZihfd3JpdGVfQ09XX3RhYmxlX2Jsb2NrKHZnLCBsdiwg MCwgJmVycikgPCAwKSB7CisJCXByaW50ayhLRVJOX0VSUiAiJXMgLS0gY291bGRuJ3QgZGlzYWJs ZSBzbmFwc2hvdDogJXNcbiIsCisJCSAgICAgICBsdm1fbmFtZSwgZXJyKTsKIAl9CiB9Ci0tLSBs aW51eC9kcml2ZXJzL21kL2x2bS1mcy5jLm9yaWcgTW9uIE1heSAgNyAwMTowNDo0MCAyMDAxCisr KyBsaW51eC9kcml2ZXJzL21kL2x2bS1mcy5jIE1vbiBNYXkgIDcgMDE6MDQ6NDAgMjAwMQpAQCAt MCwwICsxLDYwNCBAQAorLyoKKyAqIGtlcm5lbC9sdm0tZnMuYworICoKKyAqIENvcHlyaWdodCAo QykgMjAwMSBTaXN0aW5hIFNvZnR3YXJlCisgKgorICogSmFudWFyeS1NYXJjaCAyMDAxCisgKgor ICogTFZNIGRyaXZlciBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBh bmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1 YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRh dGlvbjsgZWl0aGVyIHZlcnNpb24gMiwgb3IgKGF0IHlvdXIgb3B0aW9uKQorICogYW55IGxhdGVy IHZlcnNpb24uCisgKgorICogTFZNIGRyaXZlciBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0 aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRo b3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBG SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFs IFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZl IHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFs b25nIHdpdGggR05VIENDOyBzZWUgdGhlIGZpbGUgQ09QWUlORy4gIElmIG5vdCwgd3JpdGUgdG8K KyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIDU5IFRlbXBsZSBQbGFjZSAtIFN1aXRl IDMzMCwKKyAqIEJvc3RvbiwgTUEgMDIxMTEtMTMwNywgVVNBLgorICoKKyAqLworCisvKgorICog Q2hhbmdlbG9nCisgKgorICogICAgMTEvMDEvMjAwMSAtIEZpcnN0IHZlcnNpb24gKEpvZSBUaG9y bmJlcikKKyAqICAgIDIxLzAzLzIwMDEgLSBhZGRlZCBkaXNwbGF5IG9mIHN0cmlwZXMgYW5kIHN0 cmlwZSBzaXplIChITSkKKyAqICAgIDA0LzEwLzIwMDEgLSBjb3JyZWN0ZWQgZGV2ZnNfcmVnaXN0 ZXIoKSBjYWxsIGluIGx2bV9pbml0X2ZzKCkKKyAqCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L2Nv bmZpZy5oPgorI2luY2x1ZGUgPGxpbnV4L3ZlcnNpb24uaD4KKworI2luY2x1ZGUgPGxpbnV4L2tl cm5lbC5oPgorI2luY2x1ZGUgPGxpbnV4L3ZtYWxsb2MuaD4KKyNpbmNsdWRlIDxsaW51eC9zbXBf bG9jay5oPgorCisjaW5jbHVkZSA8bGludXgvZGV2ZnNfZnNfa2VybmVsLmg+CisjaW5jbHVkZSA8 bGludXgvcHJvY19mcy5oPgorI2luY2x1ZGUgPGxpbnV4L2x2bS5oPgorCisjaW5jbHVkZSAibHZt LWludGVybmFsLmgiCisKKworc3RhdGljIGludCBfcHJvY19yZWFkX3ZnKGNoYXIgKnBhZ2UsIGNo YXIgKipzdGFydCwgb2ZmX3Qgb2ZmLAorCQkJIGludCBjb3VudCwgaW50ICplb2YsIHZvaWQgKmRh dGEpOworc3RhdGljIGludCBfcHJvY19yZWFkX2x2KGNoYXIgKnBhZ2UsIGNoYXIgKipzdGFydCwg b2ZmX3Qgb2ZmLAorCQkJIGludCBjb3VudCwgaW50ICplb2YsIHZvaWQgKmRhdGEpOworc3RhdGlj IGludCBfcHJvY19yZWFkX3B2KGNoYXIgKnBhZ2UsIGNoYXIgKipzdGFydCwgb2ZmX3Qgb2ZmLAor CQkJIGludCBjb3VudCwgaW50ICplb2YsIHZvaWQgKmRhdGEpOworc3RhdGljIGludCBfcHJvY19y ZWFkX2dsb2JhbChjaGFyICpwYWdlLCBjaGFyICoqc3RhcnQsIG9mZl90IG9mZiwKKwkJCSAgICAg aW50IGNvdW50LCBpbnQgKmVvZiwgdm9pZCAqZGF0YSk7CisKK3N0YXRpYyBpbnQgX3ZnX2luZm8o dmdfdCAqdmdfcHRyLCBjaGFyICpidWYpOworc3RhdGljIGludCBfbHZfaW5mbyh2Z190ICp2Z19w dHIsIGx2X3QgKmx2X3B0ciwgY2hhciAqYnVmKTsKK3N0YXRpYyBpbnQgX3B2X2luZm8ocHZfdCAq cHZfcHRyLCBjaGFyICpidWYpOworCitzdGF0aWMgdm9pZCBfc2hvd191dWlkKGNvbnN0IGNoYXIg KnNyYywgY2hhciAqYiwgY2hhciAqZSk7CisKK3N0YXRpYyBkZXZmc19oYW5kbGVfdCBsdm1fZGV2 ZnNfaGFuZGxlOworc3RhdGljIGRldmZzX2hhbmRsZV90IHZnX2RldmZzX2hhbmRsZVtNQVhfVkdd Oworc3RhdGljIGRldmZzX2hhbmRsZV90IGNoX2RldmZzX2hhbmRsZVtNQVhfVkddOworc3RhdGlj IGRldmZzX2hhbmRsZV90IGx2X2RldmZzX2hhbmRsZVtNQVhfTFZdOworCitzdGF0aWMgc3RydWN0 IHByb2NfZGlyX2VudHJ5ICpsdm1fcHJvY19kaXIgPSBOVUxMOworc3RhdGljIHN0cnVjdCBwcm9j X2Rpcl9lbnRyeSAqbHZtX3Byb2Nfdmdfc3ViZGlyID0gTlVMTDsKKworLyogaW5saW5lIGZ1bmN0 aW9ucyAqLworCisvKiBwdWJsaWMgaW50ZXJmYWNlICovCit2b2lkIGx2bV9pbml0X2ZzKCkgewor CXN0cnVjdCBwcm9jX2Rpcl9lbnRyeSAqcGRlOworCisJbHZtX2RldmZzX2hhbmRsZSA9IGRldmZz X3JlZ2lzdGVyKAorCQkwICwgImx2bSIsIDAsIExWTV9DSEFSX01BSk9SLCAwLAorCQlTX0lGQ0hS IHwgU19JUlVTUiB8IFNfSVdVU1IgfCBTX0lSR1JQLAorCQkmbHZtX2Nocl9mb3BzLCBOVUxMKTsK KworCWx2bV9wcm9jX2RpciA9IGNyZWF0ZV9wcm9jX2VudHJ5KExWTV9ESVIsIFNfSUZESVIsICZw cm9jX3Jvb3QpOworCWlmIChsdm1fcHJvY19kaXIpIHsKKwkJbHZtX3Byb2Nfdmdfc3ViZGlyID0g Y3JlYXRlX3Byb2NfZW50cnkoTFZNX1ZHX1NVQkRJUiwgU19JRkRJUiwKKwkJCQkJCSAgICAgICBs dm1fcHJvY19kaXIpOworCQlwZGUgPSBjcmVhdGVfcHJvY19lbnRyeShMVk1fR0xPQkFMLCBTX0lG UkVHLCBsdm1fcHJvY19kaXIpOworCQlpZiAoIHBkZSAhPSBOVUxMKSBwZGUtPnJlYWRfcHJvYyA9 IF9wcm9jX3JlYWRfZ2xvYmFsOworCX0KK30KKwordm9pZCBsdm1fZmluX2ZzKCkgeworCWRldmZz X3VucmVnaXN0ZXIgKGx2bV9kZXZmc19oYW5kbGUpOworCisJcmVtb3ZlX3Byb2NfZW50cnkoTFZN X0dMT0JBTCwgbHZtX3Byb2NfZGlyKTsKKwlyZW1vdmVfcHJvY19lbnRyeShMVk1fVkdfU1VCRElS LCBsdm1fcHJvY19kaXIpOworCXJlbW92ZV9wcm9jX2VudHJ5KExWTV9ESVIsICZwcm9jX3Jvb3Qp OworfQorCit2b2lkIGx2bV9mc19jcmVhdGVfdmcodmdfdCAqdmdfcHRyKSB7CisJc3RydWN0IHBy b2NfZGlyX2VudHJ5ICpwZGU7CisKKwl2Z19kZXZmc19oYW5kbGVbdmdfcHRyLT52Z19udW1iZXJd ID0KKwkJZGV2ZnNfbWtfZGlyKDAsIHZnX3B0ci0+dmdfbmFtZSwgTlVMTCk7CisKKwljaF9kZXZm c19oYW5kbGVbdmdfcHRyLT52Z19udW1iZXJdID0gZGV2ZnNfcmVnaXN0ZXIoCisJCXZnX2RldmZz X2hhbmRsZVt2Z19wdHItPnZnX251bWJlcl0gLCAiZ3JvdXAiLAorCQlERVZGU19GTF9ERUZBVUxU LCBMVk1fQ0hBUl9NQUpPUiwgdmdfcHRyLT52Z19udW1iZXIsCisJCVNfSUZDSFIgfCBTX0lSVVNS IHwgU19JV1VTUiB8IFNfSVJHUlAsCisJCSZsdm1fY2hyX2ZvcHMsIE5VTEwpOworCisJdmdfcHRy LT52Z19kaXJfcGRlID0gY3JlYXRlX3Byb2NfZW50cnkodmdfcHRyLT52Z19uYW1lLCBTX0lGRElS LAorCQkJCQkgICAgICAgbHZtX3Byb2Nfdmdfc3ViZGlyKTsKKworCWlmKChwZGUgPSBjcmVhdGVf cHJvY19lbnRyeSgiZ3JvdXAiLCBTX0lGUkVHLCB2Z19wdHItPnZnX2Rpcl9wZGUpKSkgeworCQlw ZGUtPnJlYWRfcHJvYyA9IF9wcm9jX3JlYWRfdmc7CisJCXBkZS0+ZGF0YSA9IHZnX3B0cjsKKwl9 CisKKwl2Z19wdHItPmx2X3N1YmRpcl9wZGUgPQorCQljcmVhdGVfcHJvY19lbnRyeShMVk1fTFZf U1VCRElSLCBTX0lGRElSLCB2Z19wdHItPnZnX2Rpcl9wZGUpOworCisJdmdfcHRyLT5wdl9zdWJk aXJfcGRlID0KKwkJY3JlYXRlX3Byb2NfZW50cnkoTFZNX1BWX1NVQkRJUiwgU19JRkRJUiwgdmdf cHRyLT52Z19kaXJfcGRlKTsKK30KKwordm9pZCBsdm1fZnNfcmVtb3ZlX3ZnKHZnX3QgKnZnX3B0 cikgeworCWludCBpOworCisJZGV2ZnNfdW5yZWdpc3RlcihjaF9kZXZmc19oYW5kbGVbdmdfcHRy LT52Z19udW1iZXJdKTsKKwlkZXZmc191bnJlZ2lzdGVyKHZnX2RldmZzX2hhbmRsZVt2Z19wdHIt PnZnX251bWJlcl0pOworCisJLyogcmVtb3ZlIGx2J3MgKi8KKwlmb3IoaSA9IDA7IGkgPCB2Z19w dHItPmx2X21heDsgaSsrKQorCQlpZih2Z19wdHItPmx2W2ldKSBsdm1fZnNfcmVtb3ZlX2x2KHZn X3B0ciwgdmdfcHRyLT5sdltpXSk7CisKKwkvKiByZW1vdmUgcHYncyAqLworCWZvcihpID0gMDsg aSA8IHZnX3B0ci0+cHZfbWF4OyBpKyspCisJCWlmKHZnX3B0ci0+cHZbaV0pIGx2bV9mc19yZW1v dmVfcHYodmdfcHRyLCB2Z19wdHItPnB2W2ldKTsKKworCWlmKHZnX3B0ci0+dmdfZGlyX3BkZSkg eworCQlyZW1vdmVfcHJvY19lbnRyeShMVk1fTFZfU1VCRElSLCB2Z19wdHItPnZnX2Rpcl9wZGUp OworCQlyZW1vdmVfcHJvY19lbnRyeShMVk1fUFZfU1VCRElSLCB2Z19wdHItPnZnX2Rpcl9wZGUp OworCQlyZW1vdmVfcHJvY19lbnRyeSgiZ3JvdXAiLCB2Z19wdHItPnZnX2Rpcl9wZGUpOworCQly ZW1vdmVfcHJvY19lbnRyeSh2Z19wdHItPnZnX25hbWUsIGx2bV9wcm9jX3ZnX3N1YmRpcik7CisJ fQorfQorCisKK3N0YXRpYyBpbmxpbmUgY29uc3QgY2hhciAqX2Jhc2VuYW1lKGNvbnN0IGNoYXIg KnN0cikgeworCWNvbnN0IGNoYXIgKm5hbWUgPSBzdHJyY2hyKHN0ciwgJy8nKTsKKwluYW1lID0g bmFtZSA/IG5hbWUgKyAxIDogc3RyOworCXJldHVybiBuYW1lOworfQorCit2b2lkIGx2bV9mc19j cmVhdGVfbHYodmdfdCAqdmdfcHRyLCBsdl90ICpsdikgeworCXN0cnVjdCBwcm9jX2Rpcl9lbnRy eSAqcGRlOworCWNvbnN0IGNoYXIgKm5hbWUgPSBfYmFzZW5hbWUobHYtPmx2X25hbWUpOworCisJ bHZfZGV2ZnNfaGFuZGxlW01JTk9SKGx2LT5sdl9kZXYpXSA9IGRldmZzX3JlZ2lzdGVyKAorCQl2 Z19kZXZmc19oYW5kbGVbdmdfcHRyLT52Z19udW1iZXJdLCBuYW1lLAorCQlERVZGU19GTF9ERUZB VUxULCBMVk1fQkxLX01BSk9SLCBNSU5PUihsdi0+bHZfZGV2KSwKKwkJU19JRkJMSyB8IFNfSVJV U1IgfCBTX0lXVVNSIHwgU19JUkdSUCwKKwkJJmx2bV9ibGtfZG9wcywgTlVMTCk7CisKKwlpZih2 Z19wdHItPmx2X3N1YmRpcl9wZGUgJiYKKwkgICAocGRlID0gY3JlYXRlX3Byb2NfZW50cnkobmFt ZSwgU19JRlJFRywgdmdfcHRyLT5sdl9zdWJkaXJfcGRlKSkpIHsKKwkJcGRlLT5yZWFkX3Byb2Mg PSBfcHJvY19yZWFkX2x2OworCQlwZGUtPmRhdGEgPSBsdjsKKwl9Cit9CisKK3ZvaWQgbHZtX2Zz X3JlbW92ZV9sdih2Z190ICp2Z19wdHIsIGx2X3QgKmx2KSB7CisJZGV2ZnNfdW5yZWdpc3Rlcihs dl9kZXZmc19oYW5kbGVbTUlOT1IobHYtPmx2X2RldildKTsKKworCWlmKHZnX3B0ci0+bHZfc3Vi ZGlyX3BkZSkgeworCQljb25zdCBjaGFyICpuYW1lID0gX2Jhc2VuYW1lKGx2LT5sdl9uYW1lKTsK KwkJcmVtb3ZlX3Byb2NfZW50cnkobmFtZSwgdmdfcHRyLT5sdl9zdWJkaXJfcGRlKTsKKwl9Cit9 CisKKworc3RhdGljIGlubGluZSB2b2lkIF9tYWtlX3B2X25hbWUoY29uc3QgY2hhciAqc3JjLCBj aGFyICpiLCBjaGFyICplKSB7CisJaW50IG9mZnNldCA9IHN0cmxlbihMVk1fRElSX1BSRUZJWCk7 CisJaWYoc3RybmNtcChzcmMsIExWTV9ESVJfUFJFRklYLCBvZmZzZXQpKQorCQlvZmZzZXQgPSAw OworCisJZS0tOworCXNyYyArPSBvZmZzZXQ7CisJd2hpbGUoKnNyYyAmJiAoYiAhPSBlKSkgewor CQkqYisrID0gKCpzcmMgPT0gJy8nKSA/ICdfJyA6ICpzcmM7CisJCXNyYysrOworCX0KKwkqYiA9 ICdcMCc7Cit9CisKK3ZvaWQgbHZtX2ZzX2NyZWF0ZV9wdih2Z190ICp2Z19wdHIsIHB2X3QgKnB2 KSB7CisJc3RydWN0IHByb2NfZGlyX2VudHJ5ICpwZGU7CisJY2hhciBuYW1lW05BTUVfTEVOXTsK KworCWlmKCF2Z19wdHItPnB2X3N1YmRpcl9wZGUpCisJCXJldHVybjsKKworCV9tYWtlX3B2X25h bWUocHYtPnB2X25hbWUsIG5hbWUsIG5hbWUgKyBzaXplb2YobmFtZSkpOworCWlmKChwZGUgPSBj cmVhdGVfcHJvY19lbnRyeShuYW1lLCBTX0lGUkVHLCB2Z19wdHItPnB2X3N1YmRpcl9wZGUpKSkg eworCQlwZGUtPnJlYWRfcHJvYyA9IF9wcm9jX3JlYWRfcHY7CisJCXBkZS0+ZGF0YSA9IHB2Owor CX0KK30KKwordm9pZCBsdm1fZnNfcmVtb3ZlX3B2KHZnX3QgKnZnX3B0ciwgcHZfdCAqcHYpIHsK KwljaGFyIG5hbWVbTkFNRV9MRU5dOworCisJaWYoIXZnX3B0ci0+cHZfc3ViZGlyX3BkZSkKKwkJ cmV0dXJuOworCisJX21ha2VfcHZfbmFtZShwdi0+cHZfbmFtZSwgbmFtZSwgbmFtZSArIHNpemVv ZihuYW1lKSk7CisJcmVtb3ZlX3Byb2NfZW50cnkobmFtZSwgdmdfcHRyLT5wdl9zdWJkaXJfcGRl KTsKK30KKworCitzdGF0aWMgaW50IF9wcm9jX3JlYWRfdmcoY2hhciAqcGFnZSwgY2hhciAqKnN0 YXJ0LCBvZmZfdCBvZmYsCisJCQkgIGludCBjb3VudCwgaW50ICplb2YsIHZvaWQgKmRhdGEpIHsK KwlpbnQgc3ogPSAwOworCXZnX3QgKnZnX3B0ciA9IGRhdGE7CisJY2hhciB1dWlkW05BTUVfTEVO XTsKKworCXN6ICs9IHNwcmludGYocGFnZSArIHN6LCAibmFtZTogICAgICAgICAlc1xuIiwgdmdf cHRyLT52Z19uYW1lKTsKKwlzeiArPSBzcHJpbnRmKHBhZ2UgKyBzeiwgInNpemU6ICAgICAgICAg JXVcbiIsCisJCSAgICAgIHZnX3B0ci0+cGVfdG90YWwgKiB2Z19wdHItPnBlX3NpemUgLyAyKTsK KwlzeiArPSBzcHJpbnRmKHBhZ2UgKyBzeiwgImFjY2VzczogICAgICAgJXVcbiIsIHZnX3B0ci0+ dmdfYWNjZXNzKTsKKwlzeiArPSBzcHJpbnRmKHBhZ2UgKyBzeiwgInN0YXR1czogICAgICAgJXVc biIsIHZnX3B0ci0+dmdfc3RhdHVzKTsKKwlzeiArPSBzcHJpbnRmKHBhZ2UgKyBzeiwgIm51bWJl cjogICAgICAgJXVcbiIsIHZnX3B0ci0+dmdfbnVtYmVyKTsKKwlzeiArPSBzcHJpbnRmKHBhZ2Ug KyBzeiwgIkxWIG1heDogICAgICAgJXVcbiIsIHZnX3B0ci0+bHZfbWF4KTsKKwlzeiArPSBzcHJp bnRmKHBhZ2UgKyBzeiwgIkxWIGN1cnJlbnQ6ICAgJXVcbiIsIHZnX3B0ci0+bHZfY3VyKTsKKwlz eiArPSBzcHJpbnRmKHBhZ2UgKyBzeiwgIkxWIG9wZW46ICAgICAgJXVcbiIsIHZnX3B0ci0+bHZf b3Blbik7CisJc3ogKz0gc3ByaW50ZihwYWdlICsgc3osICJQViBtYXg6ICAgICAgICV1XG4iLCB2 Z19wdHItPnB2X21heCk7CisJc3ogKz0gc3ByaW50ZihwYWdlICsgc3osICJQViBjdXJyZW50OiAg ICV1XG4iLCB2Z19wdHItPnB2X2N1cik7CisJc3ogKz0gc3ByaW50ZihwYWdlICsgc3osICJQViBh Y3RpdmU6ICAgICV1XG4iLCB2Z19wdHItPnB2X2FjdCk7CisJc3ogKz0gc3ByaW50ZihwYWdlICsg c3osICJQRSBzaXplOiAgICAgICV1XG4iLCB2Z19wdHItPnBlX3NpemUgLyAyKTsKKwlzeiArPSBz cHJpbnRmKHBhZ2UgKyBzeiwgIlBFIHRvdGFsOiAgICAgJXVcbiIsIHZnX3B0ci0+cGVfdG90YWwp OworCXN6ICs9IHNwcmludGYocGFnZSArIHN6LCAiUEUgYWxsb2NhdGVkOiAldVxuIiwgdmdfcHRy LT5wZV9hbGxvY2F0ZWQpOworCisJX3Nob3dfdXVpZCh2Z19wdHItPnZnX3V1aWQsIHV1aWQsIHV1 aWQgKyBzaXplb2YodXVpZCkpOworCXN6ICs9IHNwcmludGYocGFnZSArIHN6LCAidXVpZDogICAg ICAgICAlc1xuIiwgdXVpZCk7CisKKwlyZXR1cm4gc3o7Cit9CisKK3N0YXRpYyBpbnQgX3Byb2Nf cmVhZF9sdihjaGFyICpwYWdlLCBjaGFyICoqc3RhcnQsIG9mZl90IG9mZiwKKwkJCSAgaW50IGNv dW50LCBpbnQgKmVvZiwgdm9pZCAqZGF0YSkgeworCWludCBzeiA9IDA7CisJbHZfdCAqbHYgPSBk YXRhOworCisJc3ogKz0gc3ByaW50ZihwYWdlICsgc3osICJuYW1lOiAgICAgICAgICVzXG4iLCBs di0+bHZfbmFtZSk7CisJc3ogKz0gc3ByaW50ZihwYWdlICsgc3osICJzaXplOiAgICAgICAgICV1 XG4iLCBsdi0+bHZfc2l6ZSk7CisJc3ogKz0gc3ByaW50ZihwYWdlICsgc3osICJhY2Nlc3M6ICAg ICAgICV1XG4iLCBsdi0+bHZfYWNjZXNzKTsKKwlzeiArPSBzcHJpbnRmKHBhZ2UgKyBzeiwgInN0 YXR1czogICAgICAgJXVcbiIsIGx2LT5sdl9zdGF0dXMpOworCXN6ICs9IHNwcmludGYocGFnZSAr IHN6LCAibnVtYmVyOiAgICAgICAldVxuIiwgbHYtPmx2X251bWJlcik7CisJc3ogKz0gc3ByaW50 ZihwYWdlICsgc3osICJvcGVuOiAgICAgICAgICV1XG4iLCBsdi0+bHZfb3Blbik7CisJc3ogKz0g c3ByaW50ZihwYWdlICsgc3osICJhbGxvY2F0aW9uOiAgICV1XG4iLCBsdi0+bHZfYWxsb2NhdGlv bik7CisJaWYobHYtPmx2X3N0cmlwZXMgPiAxKSB7CisJCXN6ICs9IHNwcmludGYocGFnZSArIHN6 LCAic3RyaXBlczogICAgICAldVxuIiwKKwkJCSAgICAgIGx2LT5sdl9zdHJpcGVzKTsKKwkJc3og Kz0gc3ByaW50ZihwYWdlICsgc3osICJzdHJpcGVzaXplOiAgICV1XG4iLAorCQkJICAgICAgbHYt Pmx2X3N0cmlwZXNpemUpOworCX0KKwlzeiArPSBzcHJpbnRmKHBhZ2UgKyBzeiwgImRldmljZTog ICAgICAgJTAydTolMDJ1XG4iLAorCQkgICAgICBNQUpPUihsdi0+bHZfZGV2KSwgTUlOT1IobHYt Pmx2X2RldikpOworCisJcmV0dXJuIHN6OworfQorCitzdGF0aWMgaW50IF9wcm9jX3JlYWRfcHYo Y2hhciAqcGFnZSwgY2hhciAqKnN0YXJ0LCBvZmZfdCBvZmYsCisJCQkgaW50IGNvdW50LCBpbnQg KmVvZiwgdm9pZCAqZGF0YSkgeworCWludCBzeiA9IDA7CisJcHZfdCAqcHYgPSBkYXRhOworCWNo YXIgdXVpZFtOQU1FX0xFTl07CisKKwlzeiArPSBzcHJpbnRmKHBhZ2UgKyBzeiwgIm5hbWU6ICAg ICAgICAgJXNcbiIsIHB2LT5wdl9uYW1lKTsKKwlzeiArPSBzcHJpbnRmKHBhZ2UgKyBzeiwgInNp emU6ICAgICAgICAgJXVcbiIsIHB2LT5wdl9zaXplKTsKKwlzeiArPSBzcHJpbnRmKHBhZ2UgKyBz eiwgInN0YXR1czogICAgICAgJXVcbiIsIHB2LT5wdl9zdGF0dXMpOworCXN6ICs9IHNwcmludGYo cGFnZSArIHN6LCAibnVtYmVyOiAgICAgICAldVxuIiwgcHYtPnB2X251bWJlcik7CisJc3ogKz0g c3ByaW50ZihwYWdlICsgc3osICJhbGxvY2F0YWJsZTogICV1XG4iLCBwdi0+cHZfYWxsb2NhdGFi bGUpOworCXN6ICs9IHNwcmludGYocGFnZSArIHN6LCAiTFYgY3VycmVudDogICAldVxuIiwgcHYt Pmx2X2N1cik7CisJc3ogKz0gc3ByaW50ZihwYWdlICsgc3osICJQRSBzaXplOiAgICAgICV1XG4i LCBwdi0+cGVfc2l6ZSAvIDIpOworCXN6ICs9IHNwcmludGYocGFnZSArIHN6LCAiUEUgdG90YWw6 ICAgICAldVxuIiwgcHYtPnBlX3RvdGFsKTsKKwlzeiArPSBzcHJpbnRmKHBhZ2UgKyBzeiwgIlBF IGFsbG9jYXRlZDogJXVcbiIsIHB2LT5wZV9hbGxvY2F0ZWQpOworCXN6ICs9IHNwcmludGYocGFn ZSArIHN6LCAiZGV2aWNlOiAgICAgICAlMDJ1OiUwMnVcbiIsCisgICAgICAgICAgICAgICAgICAg ICAgTUFKT1IocHYtPnB2X2RldiksIE1JTk9SKHB2LT5wdl9kZXYpKTsKKworCV9zaG93X3V1aWQo cHYtPnB2X3V1aWQsIHV1aWQsIHV1aWQgKyBzaXplb2YodXVpZCkpOworCXN6ICs9IHNwcmludGYo cGFnZSArIHN6LCAidXVpZDogICAgICAgICAlc1xuIiwgdXVpZCk7CisKKwlyZXR1cm4gc3o7Cit9 CisKK3N0YXRpYyBpbnQgX3Byb2NfcmVhZF9nbG9iYWwoY2hhciAqcGFnZSwgY2hhciAqKnN0YXJ0 LCBvZmZfdCBwb3MsIGludCBjb3VudCwKKwkJCSAgICAgaW50ICplb2YsIHZvaWQgKmRhdGEpIHsK KworI2RlZmluZSAgTFZNX1BST0NfQlVGICAgKCBpID09IDAgPyBkdW1teV9idWYgOiAmYnVmW3N6 XSkKKworCWludCBjLCBpLCBsLCBwLCB2LCB2Z19jb3VudGVyLCBwdl9jb3VudGVyLCBsdl9jb3Vu dGVyLCBsdl9vcGVuX2NvdW50ZXIsCisJCWx2X29wZW5fdG90YWwsIHBlX3RfYnl0ZXMsIGhhc2hf dGFibGVfYnl0ZXMsIGx2X2Jsb2NrX2V4Y2VwdGlvbl90X2J5dGVzLCBzZWNvbmRzOworCXN0YXRp YyBvZmZfdCBzejsKKwlvZmZfdCBzel9sYXN0OworCXN0YXRpYyBjaGFyICpidWYgPSBOVUxMOwor CXN0YXRpYyBjaGFyIGR1bW15X2J1ZlsxNjBdOwkvKiBzaXplZCBmb3IgMiBsaW5lcyAqLworCXZn X3QgKnZnX3B0cjsKKwlsdl90ICpsdl9wdHI7CisJcHZfdCAqcHZfcHRyOworCisKKyNpZmRlZiBE RUJVR19MVk1fUFJPQ19HRVRfSU5GTworCXByaW50ayhLRVJOX0RFQlVHCisJICAgICAgICIlcyAt IGx2bV9wcm9jX2dldF9nbG9iYWxfaW5mbyBDQUxMRUQgIHBvczogJWx1ICBjb3VudDogJWQgIHdo ZW5jZTogJWRcbiIsCisJICAgICAgIGx2bV9uYW1lLCBwb3MsIGNvdW50LCB3aGVuY2UpOworI2Vu ZGlmCisKKwlpZihwb3MgIT0gMCAmJiBidWYgIT0gTlVMTCkKKwkJZ290byBvdXQ7CisKKwlzel9s YXN0ID0gdmdfY291bnRlciA9IHB2X2NvdW50ZXIgPSBsdl9jb3VudGVyID0gbHZfb3Blbl9jb3Vu dGVyID0gXAorCQlsdl9vcGVuX3RvdGFsID0gcGVfdF9ieXRlcyA9IGhhc2hfdGFibGVfYnl0ZXMg PSBcCisJCWx2X2Jsb2NrX2V4Y2VwdGlvbl90X2J5dGVzID0gMDsKKworCS8qIGdldCBzb21lIHN0 YXRpc3RpY3MgKi8KKwlmb3IgKHYgPSAwOyB2IDwgQUJTX01BWF9WRzsgdisrKSB7CisJCWlmICgo dmdfcHRyID0gdmdbdl0pICE9IE5VTEwpIHsKKwkJCXZnX2NvdW50ZXIrKzsKKwkJCXB2X2NvdW50 ZXIgKz0gdmdfcHRyLT5wdl9jdXI7CisJCQlsdl9jb3VudGVyICs9IHZnX3B0ci0+bHZfY3VyOwor CQkJaWYgKHZnX3B0ci0+bHZfY3VyID4gMCkgeworCQkJCWZvciAobCA9IDA7IGwgPCB2Z1t2XS0+ bHZfbWF4OyBsKyspIHsKKwkJCQkJaWYgKChsdl9wdHIgPSB2Z19wdHItPmx2W2xdKSAhPSBOVUxM KSB7CisJCQkJCQlwZV90X2J5dGVzICs9IGx2X3B0ci0+bHZfYWxsb2NhdGVkX2xlOworCQkJCQkJ aGFzaF90YWJsZV9ieXRlcyArPSBsdl9wdHItPmx2X3NuYXBzaG90X2hhc2hfdGFibGVfc2l6ZTsK KwkJCQkJCWlmIChsdl9wdHItPmx2X2Jsb2NrX2V4Y2VwdGlvbiAhPSBOVUxMKQorCQkJCQkJCWx2 X2Jsb2NrX2V4Y2VwdGlvbl90X2J5dGVzICs9IGx2X3B0ci0+bHZfcmVtYXBfZW5kOworCQkJCQkJ aWYgKGx2X3B0ci0+bHZfb3BlbiA+IDApIHsKKwkJCQkJCQlsdl9vcGVuX2NvdW50ZXIrKzsKKwkJ CQkJCQlsdl9vcGVuX3RvdGFsICs9IGx2X3B0ci0+bHZfb3BlbjsKKwkJCQkJCX0KKwkJCQkJfQor CQkJCX0KKwkJCX0KKwkJfQorCX0KKworCXBlX3RfYnl0ZXMgKj0gc2l6ZW9mKHBlX3QpOworCWx2 X2Jsb2NrX2V4Y2VwdGlvbl90X2J5dGVzICo9IHNpemVvZihsdl9ibG9ja19leGNlcHRpb25fdCk7 CisKKwlpZiAoYnVmICE9IE5VTEwpIHsKKwkJUF9LRlJFRSgiJXMgLS0gdmZyZWUgJWRcbiIsIGx2 bV9uYW1lLCBfX0xJTkVfXyk7CisJCWxvY2tfa2VybmVsKCk7CisJCXZmcmVlKGJ1Zik7CisJCXVu bG9ja19rZXJuZWwoKTsKKwkJYnVmID0gTlVMTDsKKwl9CisJLyogMiB0aW1lczogZmlyc3QgdG8g Z2V0IHNpemUgdG8gYWxsb2NhdGUgYnVmZmVyLAorCSAgIDJuZCB0byBmaWxsIHRoZSBtYWxsb2Nl ZCBidWZmZXIgKi8KKwlmb3IgKGkgPSAwOyBpIDwgMjsgaSsrKSB7CisJCXN6ID0gMDsKKwkJc3og Kz0gc3ByaW50ZihMVk1fUFJPQ19CVUYsCisJCQkgICAgICAiTFZNICIKKyNpZmRlZiBNT0RVTEUK KwkJCSAgICAgICJtb2R1bGUiCisjZWxzZQorCQkJICAgICAgImRyaXZlciIKKyNlbmRpZgorCQkJ ICAgICAgIiAlc1xuXG4iCisJCQkgICAgICAiVG90YWw6ICAlZCBWRyVzICAlZCBQViVzICAlZCBM ViVzICIsCisJCQkgICAgICBsdm1fc2hvcnRfdmVyc2lvbiwKKwkJCSAgICAgIHZnX2NvdW50ZXIs IHZnX2NvdW50ZXIgPT0gMSA/ICIiIDogInMiLAorCQkJICAgICAgcHZfY291bnRlciwgcHZfY291 bnRlciA9PSAxID8gIiIgOiAicyIsCisJCQkgICAgICBsdl9jb3VudGVyLCBsdl9jb3VudGVyID09 IDEgPyAiIiA6ICJzIik7CisJCXN6ICs9IHNwcmludGYoTFZNX1BST0NfQlVGLAorCQkJICAgICAg IiglZCBMViVzIG9wZW4iLAorCQkJICAgICAgbHZfb3Blbl9jb3VudGVyLAorCQkJICAgICAgbHZf b3Blbl9jb3VudGVyID09IDEgPyAiIiA6ICJzIik7CisJCWlmIChsdl9vcGVuX3RvdGFsID4gMCkK KwkJCXN6ICs9IHNwcmludGYoTFZNX1BST0NfQlVGLAorCQkJCSAgICAgICIgJWQgdGltZXMpXG4i LAorCQkJCSAgICAgIGx2X29wZW5fdG90YWwpOworCQllbHNlCisJCQlzeiArPSBzcHJpbnRmKExW TV9QUk9DX0JVRiwgIikiKTsKKwkJc3ogKz0gc3ByaW50ZihMVk1fUFJPQ19CVUYsCisJCQkgICAg ICAiXG5HbG9iYWw6ICVsdSBieXRlcyBtYWxsb2NlZCAgIElPUCB2ZXJzaW9uOiAlZCAgICIsCisJ CQkgICAgICB2Z19jb3VudGVyICogc2l6ZW9mKHZnX3QpICsKKwkJCSAgICAgIHB2X2NvdW50ZXIg KiBzaXplb2YocHZfdCkgKworCQkJICAgICAgbHZfY291bnRlciAqIHNpemVvZihsdl90KSArCisJ CQkgICAgICBwZV90X2J5dGVzICsgaGFzaF90YWJsZV9ieXRlcyArIGx2X2Jsb2NrX2V4Y2VwdGlv bl90X2J5dGVzICsgc3pfbGFzdCwKKwkJCSAgICAgIGx2bV9pb3BfdmVyc2lvbik7CisKKwkJc2Vj b25kcyA9IENVUlJFTlRfVElNRSAtIGxvYWR0aW1lOworCQlpZiAoc2Vjb25kcyA8IDApCisJCQls b2FkdGltZSA9IENVUlJFTlRfVElNRSArIHNlY29uZHM7CisJCWlmIChzZWNvbmRzIC8gODY0MDAg PiAwKSB7CisJCQlzeiArPSBzcHJpbnRmKExWTV9QUk9DX0JVRiwgIiVkIGRheSVzICIsCisJCQkJ ICAgICAgc2Vjb25kcyAvIDg2NDAwLAorCQkJCSAgICAgIHNlY29uZHMgLyA4NjQwMCA9PSAwIHx8 CisJCQkJICAgICAgc2Vjb25kcyAvIDg2NDAwID4gMSA/ICJzIiA6ICIiKTsKKwkJfQorCQlzeiAr PSBzcHJpbnRmKExWTV9QUk9DX0JVRiwgIiVkOiUwMmQ6JTAyZCBhY3RpdmVcbiIsCisJCQkgICAg ICAoc2Vjb25kcyAlIDg2NDAwKSAvIDM2MDAsCisJCQkgICAgICAoc2Vjb25kcyAlIDM2MDApIC8g NjAsCisJCQkgICAgICBzZWNvbmRzICUgNjApOworCisJCWlmICh2Z19jb3VudGVyID4gMCkgewor CQkJZm9yICh2ID0gMDsgdiA8IEFCU19NQVhfVkc7IHYrKykgeworCQkJCS8qIHZvbHVtZSBncm91 cCAqLworCQkJCWlmICgodmdfcHRyID0gdmdbdl0pICE9IE5VTEwpIHsKKwkJCQkJc3ogKz0gX3Zn X2luZm8odmdfcHRyLCBMVk1fUFJPQ19CVUYpOworCisJCQkJCS8qIHBoeXNpY2FsIHZvbHVtZXMg Ki8KKwkJCQkJc3ogKz0gc3ByaW50ZihMVk1fUFJPQ19CVUYsCisJCQkJCQkgICAgICAiXG4gIFBW JXMgIiwKKwkJCQkJCSAgICAgIHZnX3B0ci0+cHZfY3VyID09IDEgPyAiOiAiIDogInM6Iik7CisJ CQkJCWMgPSAwOworCQkJCQlmb3IgKHAgPSAwOyBwIDwgdmdfcHRyLT5wdl9tYXg7IHArKykgewor CQkJCQkJaWYgKChwdl9wdHIgPSB2Z19wdHItPnB2W3BdKSAhPSBOVUxMKSB7CisJCQkJCQkJc3og Kz0gX3B2X2luZm8ocHZfcHRyLCBMVk1fUFJPQ19CVUYpOworCisJCQkJCQkJYysrOworCQkJCQkJ CWlmIChjIDwgdmdfcHRyLT5wdl9jdXIpCisJCQkJCQkJCXN6ICs9IHNwcmludGYoTFZNX1BST0Nf QlVGLAorCQkJCQkJCQkJICAgICAgIlxuICAgICAgICIpOworCQkJCQkJfQorCQkJCQl9CisKKwkJ CQkJLyogbG9naWNhbCB2b2x1bWVzICovCisJCQkJCXN6ICs9IHNwcmludGYoTFZNX1BST0NfQlVG LAorCQkJCQkJICAgICAgIlxuICAgIExWJXMgIiwKKwkJCQkJCSAgICAgIHZnX3B0ci0+bHZfY3Vy ID09IDEgPyAiOiAiIDogInM6Iik7CisJCQkJCWMgPSAwOworCQkJCQlmb3IgKGwgPSAwOyBsIDwg dmdfcHRyLT5sdl9tYXg7IGwrKykgeworCQkJCQkJaWYgKChsdl9wdHIgPSB2Z19wdHItPmx2W2xd KSAhPSBOVUxMKSB7CisJCQkJCQkJc3ogKz0gX2x2X2luZm8odmdfcHRyLCBsdl9wdHIsIExWTV9Q Uk9DX0JVRik7CisJCQkJCQkJYysrOworCQkJCQkJCWlmIChjIDwgdmdfcHRyLT5sdl9jdXIpCisJ CQkJCQkJCXN6ICs9IHNwcmludGYoTFZNX1BST0NfQlVGLAorCQkJCQkJCQkJICAgICAgIlxuICAg ICAgICAgIik7CisJCQkJCQl9CisJCQkJCX0KKwkJCQkJaWYgKHZnX3B0ci0+bHZfY3VyID09IDAp IHN6ICs9IHNwcmludGYoTFZNX1BST0NfQlVGLCAibm9uZSIpOworCQkJCQlzeiArPSBzcHJpbnRm KExWTV9QUk9DX0JVRiwgIlxuIik7CisJCQkJfQorCQkJfQorCQl9CisJCWlmIChidWYgPT0gTlVM TCkgeworCQkJbG9ja19rZXJuZWwoKTsKKwkJCWJ1ZiA9IHZtYWxsb2Moc3opOworCQkJdW5sb2Nr X2tlcm5lbCgpOworCQkJaWYgKGJ1ZiA9PSBOVUxMKSB7CisJCQkJc3ogPSAwOworCQkJCXJldHVy biBzcHJpbnRmKHBhZ2UsICIlcyAtIHZtYWxsb2MgZXJyb3IgYXQgbGluZSAlZFxuIiwKKwkJCQkJ ICAgICAgIGx2bV9uYW1lLCBfX0xJTkVfXyk7CisJCQl9CisJCX0KKwkJc3pfbGFzdCA9IHN6Owor CX0KKworIG91dDoKKwlpZiAocG9zID4gc3ogLSAxKSB7CisJCWxvY2tfa2VybmVsKCk7CisJCXZm cmVlKGJ1Zik7CisJCXVubG9ja19rZXJuZWwoKTsKKwkJYnVmID0gTlVMTDsKKwkJcmV0dXJuIDA7 CisJfQorCSpzdGFydCA9ICZidWZbcG9zXTsKKwlpZiAoc3ogLSBwb3MgPCBjb3VudCkKKwkJcmV0 dXJuIHN6IC0gcG9zOworCWVsc2UKKwkJcmV0dXJuIGNvdW50OworCisjdW5kZWYgTFZNX1BST0Nf QlVGCit9CisKKy8qCisgKiBwcm92aWRlIFZHIGluZm8gZm9yIHByb2MgZmlsZXN5c3RlbSB1c2Ug KGdsb2JhbCkKKyAqLworc3RhdGljIGludCBfdmdfaW5mbyh2Z190ICp2Z19wdHIsIGNoYXIgKmJ1 ZikgeworCWludCBzeiA9IDA7CisJY2hhciBpbmFjdGl2ZV9mbGFnID0gJyAnOworCisJaWYgKCEo dmdfcHRyLT52Z19zdGF0dXMgJiBWR19BQ1RJVkUpKSBpbmFjdGl2ZV9mbGFnID0gJ0knOworCXN6 ID0gc3ByaW50ZihidWYsCisJCSAgICAgIlxuVkc6ICVjJXMgIFslZCBQViwgJWQgTFYvJWQgb3Bl bl0gIgorCQkgICAgICIgUEUgU2l6ZTogJWQgS0JcbiIKKwkJICAgICAiICBVc2FnZSBbS0IvUEVd OiAlZCAvJWQgdG90YWwgICIKKwkJICAgICAiJWQgLyVkIHVzZWQgICVkIC8lZCBmcmVlIiwKKwkJ ICAgICBpbmFjdGl2ZV9mbGFnLAorCQkgICAgIHZnX3B0ci0+dmdfbmFtZSwKKwkJICAgICB2Z19w dHItPnB2X2N1ciwKKwkJICAgICB2Z19wdHItPmx2X2N1ciwKKwkJICAgICB2Z19wdHItPmx2X29w ZW4sCisJICAgICAJICAgICB2Z19wdHItPnBlX3NpemUgPj4gMSwKKwkJICAgICB2Z19wdHItPnBl X3NpemUgKiB2Z19wdHItPnBlX3RvdGFsID4+IDEsCisJCSAgICAgdmdfcHRyLT5wZV90b3RhbCwK KwkJICAgICB2Z19wdHItPnBlX2FsbG9jYXRlZCAqIHZnX3B0ci0+cGVfc2l6ZSA+PiAxLAorCSAg ICAgCSAgICAgdmdfcHRyLT5wZV9hbGxvY2F0ZWQsCisJCSAgICAgKHZnX3B0ci0+cGVfdG90YWwg LSB2Z19wdHItPnBlX2FsbG9jYXRlZCkgKgorCSAgICAgCSAgICAgdmdfcHRyLT5wZV9zaXplID4+ IDEsCisJCSAgICAgdmdfcHRyLT5wZV90b3RhbCAtIHZnX3B0ci0+cGVfYWxsb2NhdGVkKTsKKwly ZXR1cm4gc3o7Cit9CisKKworLyoKKyAqIHByb3ZpZGUgTFYgaW5mbyBmb3IgcHJvYyBmaWxlc3lz dGVtIHVzZSAoZ2xvYmFsKQorICovCitzdGF0aWMgaW50IF9sdl9pbmZvKHZnX3QgKnZnX3B0ciwg bHZfdCAqbHZfcHRyLCBjaGFyICpidWYpIHsKKwlpbnQgc3ogPSAwOworCWNoYXIgaW5hY3RpdmVf ZmxhZyA9ICdBJywgYWxsb2NhdGlvbl9mbGFnID0gJyAnLAorCQlzdHJpcGVzX2ZsYWcgPSAnICcs IHJ3X2ZsYWcgPSAnICcsICpiYXNlbmFtZTsKKworCWlmICghKGx2X3B0ci0+bHZfc3RhdHVzICYg TFZfQUNUSVZFKSkKKwkJaW5hY3RpdmVfZmxhZyA9ICdJJzsKKwlyd19mbGFnID0gJ1InOworCWlm IChsdl9wdHItPmx2X2FjY2VzcyAmIExWX1dSSVRFKQorCQlyd19mbGFnID0gJ1cnOworCWFsbG9j YXRpb25fZmxhZyA9ICdEJzsKKwlpZiAobHZfcHRyLT5sdl9hbGxvY2F0aW9uICYgTFZfQ09OVElH VU9VUykKKwkJYWxsb2NhdGlvbl9mbGFnID0gJ0MnOworCXN0cmlwZXNfZmxhZyA9ICdMJzsKKwlp ZiAobHZfcHRyLT5sdl9zdHJpcGVzID4gMSkKKwkJc3RyaXBlc19mbGFnID0gJ1MnOworCXN6ICs9 IHNwcmludGYoYnVmK3N6LAorCQkgICAgICAiWyVjJWMlYyVjIiwKKwkJICAgICAgaW5hY3RpdmVf ZmxhZywKKwkgcndfZmxhZywKKwkJICAgICAgYWxsb2NhdGlvbl9mbGFnLAorCQkgICAgICBzdHJp cGVzX2ZsYWcpOworCWlmIChsdl9wdHItPmx2X3N0cmlwZXMgPiAxKQorCQlzeiArPSBzcHJpbnRm KGJ1ZitzeiwgIiUtMmQiLAorCQkJICAgICAgbHZfcHRyLT5sdl9zdHJpcGVzKTsKKwllbHNlCisJ CXN6ICs9IHNwcmludGYoYnVmK3N6LCAiICAiKTsKKworCS8qIEZJWE1FOiB1c2UgX2Jhc2VuYW1l ICovCisJYmFzZW5hbWUgPSBzdHJyY2hyKGx2X3B0ci0+bHZfbmFtZSwgJy8nKTsKKwlpZiAoIGJh c2VuYW1lID09IDApIGJhc2VuYW1lID0gbHZfcHRyLT5sdl9uYW1lOworCWVsc2UgICAgICAgICAg ICAgICAgYmFzZW5hbWUrKzsKKwlzeiArPSBzcHJpbnRmKGJ1ZitzeiwgIl0gJS0yNXMiLCBiYXNl bmFtZSk7CisJaWYgKHN0cmxlbihiYXNlbmFtZSkgPiAyNSkKKwkJc3ogKz0gc3ByaW50ZihidWYr c3osCisJCQkgICAgICAiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiKTsKKwlzeiAr PSBzcHJpbnRmKGJ1ZitzeiwgIiU5ZCAvJS02ZCAgICIsCisJCSAgICAgIGx2X3B0ci0+bHZfc2l6 ZSA+PiAxLAorCQkgICAgICBsdl9wdHItPmx2X3NpemUgLyB2Z19wdHItPnBlX3NpemUpOworCisJ aWYgKGx2X3B0ci0+bHZfb3BlbiA9PSAwKQorCQlzeiArPSBzcHJpbnRmKGJ1ZitzeiwgImNsb3Nl Iik7CisJZWxzZQorCQlzeiArPSBzcHJpbnRmKGJ1ZitzeiwgIiVkeCBvcGVuIiwKKwkJCSAgICAg IGx2X3B0ci0+bHZfb3Blbik7CisKKwlyZXR1cm4gc3o7Cit9CisKKworLyoKKyAqIHByb3ZpZGUg UFYgaW5mbyBmb3IgcHJvYyBmaWxlc3lzdGVtIHVzZSAoZ2xvYmFsKQorICovCitzdGF0aWMgaW50 IF9wdl9pbmZvKHB2X3QgKnB2LCBjaGFyICpidWYpIHsKKwlpbnQgc3ogPSAwOworCWNoYXIgaW5h Y3RpdmVfZmxhZyA9ICdBJywgYWxsb2NhdGlvbl9mbGFnID0gJyAnOworCWNoYXIgKnB2X25hbWUg PSBOVUxMOworCisJaWYgKCEocHYtPnB2X3N0YXR1cyAmIFBWX0FDVElWRSkpCisJCWluYWN0aXZl X2ZsYWcgPSAnSSc7CisJYWxsb2NhdGlvbl9mbGFnID0gJ0EnOworCWlmICghKHB2LT5wdl9hbGxv Y2F0YWJsZSAmIFBWX0FMTE9DQVRBQkxFKSkKKwkJYWxsb2NhdGlvbl9mbGFnID0gJ04nOworCXB2 X25hbWUgPSBzdHJyY2hyKHB2LT5wdl9uYW1lKzEsJy8nKTsKKwlpZiAoIHB2X25hbWUgPT0gMCkg cHZfbmFtZSA9IHB2LT5wdl9uYW1lOworCWVsc2UgICAgICAgICAgICAgICBwdl9uYW1lKys7CisJ c3ogPSBzcHJpbnRmKGJ1ZiwKKwkJICAgICAiWyVjJWNdICUtMjFzICU4ZCAvJS02ZCAgIgorCQkg ICAgICIlOGQgLyUtNmQgICU4ZCAvJS02ZCIsCisJCSAgICAgaW5hY3RpdmVfZmxhZywKKwkJICAg ICBhbGxvY2F0aW9uX2ZsYWcsCisJCSAgICAgcHZfbmFtZSwKKwkJICAgICBwdi0+cGVfdG90YWwg KiBwdi0+cGVfc2l6ZSA+PiAxLAorCQkgICAgIHB2LT5wZV90b3RhbCwKKwkJICAgICBwdi0+cGVf YWxsb2NhdGVkICogcHYtPnBlX3NpemUgPj4gMSwKKwkJICAgICBwdi0+cGVfYWxsb2NhdGVkLAor CQkgICAgIChwdi0+cGVfdG90YWwgLSBwdi0+cGVfYWxsb2NhdGVkKSAqCisJCSAgICAgcHYtPnBl X3NpemUgPj4gMSwKKwkJICAgICBwdi0+cGVfdG90YWwgLSBwdi0+cGVfYWxsb2NhdGVkKTsKKwly ZXR1cm4gc3o7Cit9CisKK3N0YXRpYyB2b2lkIF9zaG93X3V1aWQoY29uc3QgY2hhciAqc3JjLCBj aGFyICpiLCBjaGFyICplKSB7CisJaW50IGk7CisKKwllLS07CisJZm9yKGkgPSAwOyAqc3JjICYm IChiICE9IGUpOyBpKyspIHsKKwkJaWYoaSAmJiAhKGkgJiAweDMpKQorCQkJKmIrKyA9ICctJzsK KwkJKmIrKyA9ICpzcmMrKzsKKwl9CisJKmIgPSAnXDAnOworfQotLS0gbGludXgvZHJpdmVycy9t ZC9NYWtlZmlsZS5vcmlnCUZyaSBGZWIgMTYgMTM6NTY6MjggMjAwMQorKysgbGludXgvZHJpdmVy cy9tZC9NYWtlZmlsZQlGcmkgRmViIDE2IDEzOjU2OjM5IDIwMDEKQEAgLTYsNyArNiw3IEBACiAK IGV4cG9ydC1vYmpzCTo9IG1kLm8geG9yLm8KIGxpc3QtbXVsdGkJOj0gbHZtLW1vZC5vCi1sdm0t bW9kLW9ianMJOj0gbHZtLm8gbHZtLXNuYXAubworbHZtLW1vZC1vYmpzCTo9IGx2bS5vIGx2bS1z bmFwLm8gbHZtLWZzLm8KIAogIyBOb3RlOiBsaW5rIG9yZGVyIGlzIGltcG9ydGFudC4gIEFsbCBy YWlkIHBlcnNvbmFsaXRpZXMKICMgYW5kIHhvci5vIG11c3QgY29tZSBiZWZvcmUgbWQubywgYXMg dGhleSBlYWNoIGluaXRpYWxpc2UgCmRpZmYgLXJ1TiAtWCAvaG9tZS9qb2UvcGFja2FnZXMvZG9u dGRpZmYgbGludXhfMi40LjEvZHJpdmVycy9tZC9sdm0tc25hcC5oIGxpbnV4L2RyaXZlcnMvbWQv bHZtLXNuYXAuaAotLS0gbGludXhfMi40LjEvZHJpdmVycy9tZC9sdm0tc25hcC5oCUZyaSBGZWIg MTYgMTQ6NTE6MjYgMjAwMQorKysgbGludXgvZHJpdmVycy9tZC9sdm0tc25hcC5oCVRodSBKYW4g IDEgMDE6MDA6MDAgMTk3MApAQCAtMSw0NyArMCwwIEBACi0vKgotICoga2VybmVsL2x2bS1zbmFw LmgKLSAqCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDEgU2lzdGluYSBTb2Z0d2FyZQotICoKLSAqCi0g KiBMVk0gZHJpdmVyIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFu ZC9vciBtb2RpZnkKLSAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVi bGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5Ci0gKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0 aW9uOyBlaXRoZXIgdmVyc2lvbiAyLCBvciAoYXQgeW91ciBvcHRpb24pCi0gKiBhbnkgbGF0ZXIg dmVyc2lvbi4KLSAqCi0gKiBMVk0gZHJpdmVyIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRo YXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhv dXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJ VE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQotICogR05VIEdlbmVyYWwg UHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUg cmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICogYWxv bmcgd2l0aCBHTlUgQ0M7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLiAgSWYgbm90LCB3cml0ZSB0bwot ICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUg MzMwLAotICogQm9zdG9uLCBNQSAwMjExMS0xMzA3LCBVU0EuCi0gKgotICovCi0KLS8qCi0gKiBD aGFuZ2Vsb2cKLSAqCi0gKiAgICAwNS8wMS8yMDAxOkpvZSBUaG9ybmJlciAtIEZhY3RvcmVkIHRo aXMgZmlsZSBvdXQgb2YgbHZtLmMKLSAqCi0gKi8KLQotI2lmbmRlZiBMVk1fU05BUF9ICi0jZGVm aW5lIExWTV9TTkFQX0gKLQotLyogZXh0ZXJuYWwgc25hcHNob3QgY2FsbHMgKi8KLWV4dGVybiBp bmxpbmUgaW50IGx2bV9nZXRfYmxrc2l6ZShrZGV2X3QpOwotZXh0ZXJuIGludCBsdm1fc25hcHNo b3RfYWxsb2MobHZfdCAqKTsKLWV4dGVybiB2b2lkIGx2bV9zbmFwc2hvdF9maWxsX0NPV19wYWdl KHZnX3QgKiwgbHZfdCAqKTsKLWV4dGVybiBpbnQgbHZtX3NuYXBzaG90X0NPVyhrZGV2X3QsIHVs b25nLCB1bG9uZywgdWxvbmcsIGx2X3QgKik7Ci1leHRlcm4gaW50IGx2bV9zbmFwc2hvdF9yZW1h cF9ibG9jayhrZGV2X3QgKiwgdWxvbmcgKiwgdWxvbmcsIGx2X3QgKik7Ci1leHRlcm4gdm9pZCBs dm1fc25hcHNob3RfcmVsZWFzZShsdl90ICopOyAKLWV4dGVybiBpbnQgbHZtX3dyaXRlX0NPV190 YWJsZV9ibG9jayh2Z190ICosIGx2X3QgKik7Ci1leHRlcm4gaW5saW5lIHZvaWQgbHZtX2hhc2hf bGluayhsdl9ibG9ja19leGNlcHRpb25fdCAqLCAKLQkJCQkga2Rldl90LCB1bG9uZywgbHZfdCAq KTsKLWV4dGVybiBpbnQgbHZtX3NuYXBzaG90X2FsbG9jX2hhc2hfdGFibGUobHZfdCAqKTsKLWV4 dGVybiB2b2lkIGx2bV9kcm9wX3NuYXBzaG90KGx2X3QgKiwgY29uc3QgY2hhciAqKTsKLQotI2Vu ZGlmCi0tLSBsaW51eC9Eb2N1bWVudGF0aW9uL2lvY3RsLW51bWJlci50eHQub3JpZwlNb24gTWFy IDEyIDEwOjE2OjUxIDIwMDEKKysrIGxpbnV4L0RvY3VtZW50YXRpb24vaW9jdGwtbnVtYmVyLnR4 dAlNb24gTWFyIDEyIDEwOjE3OjM2IDIwMDEKQEAgLTE4NiwzICsxODYsNiBAQAogMHhCMQkwMC0x RglQUFBvWAkJCTxtYWlsdG86bW9zdHJvd3NAc3R5eC51d2F0ZXJsb28uY2E+CiAweENCCTAwLTFG CUNCTSBzZXJpYWwgSUVDIGJ1cwlpbiBkZXZlbG9wbWVudDoKIAkJCQkJPG1haWx0bzptaWNoYWVs LmtsZWluQHB1ZmZpbi5sYi5zaHV0dGxlLmRlPgorCisweEZFCTAwLTlGCUxvZ2ljYWwgVm9sdW1l IE1hbmFnZXIgIDxtYWlsdG86bGludXgtbHZtQHNpc3RpbmEuY29tPgorCg== --==========1814179384==========--