From mboxrd@z Thu Jan 1 00:00:00 1970 From: David Weinehall Subject: [PATCH i-g-t 3/3 v3] Remove superfluous gem_concurrent_all.c Date: Fri, 30 Oct 2015 15:18:31 +0200 Message-ID: <1446211111-3940-4-git-send-email-david.weinehall@linux.intel.com> References: <1445600556-14884-1-git-send-email-david.weinehall@linux.intel.com> <1446211111-3940-1-git-send-email-david.weinehall@linux.intel.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Received: from mga01.intel.com (mga01.intel.com [192.55.52.88]) by gabe.freedesktop.org (Postfix) with ESMTP id 2EE436EC8D for ; Fri, 30 Oct 2015 06:19:47 -0700 (PDT) In-Reply-To: <1446211111-3940-1-git-send-email-david.weinehall@linux.intel.com> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: intel-gfx-bounces@lists.freedesktop.org Sender: "Intel-gfx" To: intel-gfx@lists.freedesktop.org List-Id: intel-gfx@lists.freedesktop.org V2hlbiBnZW1fY29uY3VycmVudF9ibGl0IHdhcyBjb252ZXJ0ZWQgdG8gdXNlIHRoZSBuZXcgY29t bW9uIGZyYW1ld29yawpmb3IgY2hvb3Npbmcgd2hldGhlciBvciBub3QgdG8gaW5jbHVkZSBzbG93 L2NvbWJpbmF0b3JpYWwgdGVzdHMsCmdlbV9jb25jdXJyZW50X2FsbCBiZWNhbWUgc3VwZXJmbHVv dXMuICBUaGlzIHBhdGNoIHJlbW92ZXMgaXQuCgpTaWduZWQtb2ZmLWJ5OiBEYXZpZCBXZWluZWhh bGwgPGRhdmlkLndlaW5laGFsbEBsaW51eC5pbnRlbC5jb20+Ci0tLQogdGVzdHMvLmdpdGlnbm9y ZSAgICAgICAgICAgfCAgICAxIC0KIHRlc3RzL01ha2VmaWxlLnNvdXJjZXMgICAgIHwgICAgMSAt CiB0ZXN0cy9nZW1fY29uY3VycmVudF9hbGwuYyB8IDExMDggLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIDMgZmlsZXMgY2hhbmdlZCwgMTExMCBkZWxldGlvbnMo LSkKIGRlbGV0ZSBtb2RlIDEwMDY0NCB0ZXN0cy9nZW1fY29uY3VycmVudF9hbGwuYwoKZGlmZiAt LWdpdCBhL3Rlc3RzLy5naXRpZ25vcmUgYi90ZXN0cy8uZ2l0aWdub3JlCmluZGV4IGJlZGE1MTE3 ZGE1Yy4uZGE0Zjk5NjFmYzYwIDEwMDY0NAotLS0gYS90ZXN0cy8uZ2l0aWdub3JlCisrKyBiL3Rl c3RzLy5naXRpZ25vcmUKQEAgLTIzLDcgKzIzLDYgQEAgZ2VtX2JhZF9yZWxvYwogZ2VtX2Jhc2lj CiBnZW1fY2FjaGluZwogZ2VtX2Nsb3NlX3JhY2UKLWdlbV9jb25jdXJyZW50X2FsbAogZ2VtX2Nv bmN1cnJlbnRfYmxpdAogZ2VtX2NwdV9yZWxvYwogZ2VtX2NzX3ByZWZldGNoCmRpZmYgLS1naXQg YS90ZXN0cy9NYWtlZmlsZS5zb3VyY2VzIGIvdGVzdHMvTWFrZWZpbGUuc291cmNlcwppbmRleCBh YzczMWY5MGRjYjIuLjMyMWM3ZjMzZTRkMyAxMDA2NDQKLS0tIGEvdGVzdHMvTWFrZWZpbGUuc291 cmNlcworKysgYi90ZXN0cy9NYWtlZmlsZS5zb3VyY2VzCkBAIC0xNCw3ICsxNCw2IEBAIFRFU1RT X3Byb2dzX00gPSBcCiAJZ2VtX2NhY2hpbmcgXAogCWdlbV9jbG9zZV9yYWNlIFwKIAlnZW1fY29u Y3VycmVudF9ibGl0IFwKLQlnZW1fY29uY3VycmVudF9hbGwgXAogCWdlbV9jc190bGIgXAogCWdl bV9jdHhfcGFyYW1fYmFzaWMgXAogCWdlbV9jdHhfYmFkX2V4ZWMgXApkaWZmIC0tZ2l0IGEvdGVz dHMvZ2VtX2NvbmN1cnJlbnRfYWxsLmMgYi90ZXN0cy9nZW1fY29uY3VycmVudF9hbGwuYwpkZWxl dGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMWQyZDc4NzIwMmRmLi4wMDAwMDAwMDAwMDAKLS0t IGEvdGVzdHMvZ2VtX2NvbmN1cnJlbnRfYWxsLmMKKysrIC9kZXYvbnVsbApAQCAtMSwxMTA4ICsw LDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgwqkgMjAwOSwyMDEyLDIwMTMgSW50ZWwgQ29ycG9yYXRp b24KLSAqCi0gKiBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwg dG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYQotICogY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBh c3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAiU29mdHdhcmUiKSwKLSAqIHRvIGRl YWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0 IGxpbWl0YXRpb24KLSAqIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBw dWJsaXNoLCBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLAotICogYW5kL29yIHNlbGwgY29waWVzIG9m IHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlCi0gKiBTb2Z0 d2FyZSBpcyBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25k aXRpb25zOgotICoKLSAqIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1p c3Npb24gbm90aWNlIChpbmNsdWRpbmcgdGhlIG5leHQKLSAqIHBhcmFncmFwaCkgc2hhbGwgYmUg aW5jbHVkZWQgaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUKLSAq IFNvZnR3YXJlLgotICoKLSAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRI T1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SCi0gKiBJTVBMSUVELCBJTkNMVURJ TkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSwK LSAqIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQu ICBJTiBOTyBFVkVOVCBTSEFMTAotICogVEhFIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMg QkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVIKLSAqIExJQUJJTElUWSwg V0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklT SU5HCi0gKiBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBP UiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTCi0gKiBJTiBUSEUgU09GVFdBUkUuCi0gKgotICog QXV0aG9yczoKLSAqICAgIEVyaWMgQW5ob2x0IDxlcmljQGFuaG9sdC5uZXQ+Ci0gKiAgICBDaHJp cyBXaWxzb24gPGNocmlzQGNocmlzLXdpbHNvbi5jby51az4KLSAqICAgIERhbmllbCBWZXR0ZXIg PGRhbmllbC52ZXR0ZXJAZmZ3bGwuY2g+Ci0gKgotICovCi0KLS8qKiBAZmlsZSBnZW1fY29uY3Vy cmVudC5jCi0gKgotICogVGhpcyBpcyBhIHRlc3Qgb2YgcHJlYWQvcHdyaXRlL21tYXAgYmVoYXZp b3Igd2hlbiB3cml0aW5nIHRvIGFjdGl2ZQotICogYnVmZmVycy4KLSAqCi0gKiBCYXNlZCBvbiBn ZW1fZ3R0X2NvbmN1cnJlbnRfYmx0LgotICovCi0KLSNpbmNsdWRlICJpZ3QuaCIKLSNpbmNsdWRl IDxzdGRsaWIuaD4KLSNpbmNsdWRlIDxzdGRpby5oPgotI2luY2x1ZGUgPHN0cmluZy5oPgotI2lu Y2x1ZGUgPGZjbnRsLmg+Ci0jaW5jbHVkZSA8aW50dHlwZXMuaD4KLSNpbmNsdWRlIDxlcnJuby5o PgotI2luY2x1ZGUgPHN5cy9zdGF0Lmg+Ci0jaW5jbHVkZSA8c3lzL3RpbWUuaD4KLSNpbmNsdWRl IDxzeXMvd2FpdC5oPgotCi0jaW5jbHVkZSA8ZHJtLmg+Ci0KLSNpbmNsdWRlICJpbnRlbF9idWZt Z3IuaCIKLQotSUdUX1RFU1RfREVTQ1JJUFRJT04oIlRlc3Qgb2YgcHJlYWQvcHdyaXRlL21tYXAg YmVoYXZpb3Igd2hlbiB3cml0aW5nIHRvIGFjdGl2ZSIKLQkJICAgICAiIGJ1ZmZlcnMuIik7Ci0K LWludCBmZCwgZGV2aWQsIGdlbjsKLXN0cnVjdCBpbnRlbF9iYXRjaGJ1ZmZlciAqYmF0Y2g7Ci1p bnQgYWxsOwotCi1zdGF0aWMgdm9pZAotbm9wX3JlbGVhc2VfYm8oZHJtX2ludGVsX2JvICpibykK LXsKLQlkcm1faW50ZWxfYm9fdW5yZWZlcmVuY2UoYm8pOwotfQotCi1zdGF0aWMgdm9pZAotcHJ3 X3NldF9ibyhkcm1faW50ZWxfYm8gKmJvLCB1aW50MzJfdCB2YWwsIGludCB3aWR0aCwgaW50IGhl aWdodCkKLXsKLQlpbnQgc2l6ZSA9IHdpZHRoICogaGVpZ2h0LCBpOwotCXVpbnQzMl90ICp0bXA7 Ci0KLQl0bXAgPSBtYWxsb2MoNCpzaXplKTsKLQlpZiAodG1wKSB7Ci0JCWZvciAoaSA9IDA7IGkg PCBzaXplOyBpKyspCi0JCQl0bXBbaV0gPSB2YWw7Ci0JCWRybV9pbnRlbF9ib19zdWJkYXRhKGJv LCAwLCA0KnNpemUsIHRtcCk7Ci0JCWZyZWUodG1wKTsKLQl9IGVsc2UgewotCQlmb3IgKGkgPSAw OyBpIDwgc2l6ZTsgaSsrKQotCQkJZHJtX2ludGVsX2JvX3N1YmRhdGEoYm8sIDQqaSwgNCwgJnZh bCk7Ci0JfQotfQotCi1zdGF0aWMgdm9pZAotcHJ3X2NtcF9ibyhkcm1faW50ZWxfYm8gKmJvLCB1 aW50MzJfdCB2YWwsIGludCB3aWR0aCwgaW50IGhlaWdodCwgZHJtX2ludGVsX2JvICp0bXApCi17 Ci0JaW50IHNpemUgPSB3aWR0aCAqIGhlaWdodCwgaTsKLQl1aW50MzJfdCAqdmFkZHI7Ci0KLQlk b19vcl9kaWUoZHJtX2ludGVsX2JvX21hcCh0bXAsIHRydWUpKTsKLQlkb19vcl9kaWUoZHJtX2lu dGVsX2JvX2dldF9zdWJkYXRhKGJvLCAwLCA0KnNpemUsIHRtcC0+dmlydHVhbCkpOwotCXZhZGRy ID0gdG1wLT52aXJ0dWFsOwotCWZvciAoaSA9IDA7IGkgPCBzaXplOyBpKyspCi0JCWlndF9hc3Nl cnRfZXFfdTMyKHZhZGRyW2ldLCB2YWwpOwotCWRybV9pbnRlbF9ib191bm1hcCh0bXApOwotfQot Ci1zdGF0aWMgZHJtX2ludGVsX2JvICoKLXVubWFwcGVkX2NyZWF0ZV9ibyhkcm1faW50ZWxfYnVm bWdyICpidWZtZ3IsIGludCB3aWR0aCwgaW50IGhlaWdodCkKLXsKLQlkcm1faW50ZWxfYm8gKmJv OwotCi0JYm8gPSBkcm1faW50ZWxfYm9fYWxsb2MoYnVmbWdyLCAiYm8iLCA0KndpZHRoKmhlaWdo dCwgMCk7Ci0JaWd0X2Fzc2VydChibyk7Ci0KLQlyZXR1cm4gYm87Ci19Ci0KLXN0YXRpYyBkcm1f aW50ZWxfYm8gKgotc25vb3BfY3JlYXRlX2JvKGRybV9pbnRlbF9idWZtZ3IgKmJ1Zm1nciwgaW50 IHdpZHRoLCBpbnQgaGVpZ2h0KQotewotCWRybV9pbnRlbF9ibyAqYm87Ci0KLQlpZ3Rfc2tpcF9v bihnZW1faGFzX2xsYyhmZCkpOwotCi0JYm8gPSB1bm1hcHBlZF9jcmVhdGVfYm8oYnVmbWdyLCB3 aWR0aCwgaGVpZ2h0KTsKLQlnZW1fc2V0X2NhY2hpbmcoZmQsIGJvLT5oYW5kbGUsIEk5MTVfQ0FD SElOR19DQUNIRUQpOwotCWRybV9pbnRlbF9ib19kaXNhYmxlX3JldXNlKGJvKTsKLQotCXJldHVy biBibzsKLX0KLQotc3RhdGljIHZvaWQKLWd0dF9zZXRfYm8oZHJtX2ludGVsX2JvICpibywgdWlu dDMyX3QgdmFsLCBpbnQgd2lkdGgsIGludCBoZWlnaHQpCi17Ci0JdWludDMyX3QgKnZhZGRyID0g Ym8tPnZpcnR1YWw7Ci0JaW50IHNpemUgPSB3aWR0aCAqIGhlaWdodDsKLQotCWRybV9pbnRlbF9n ZW1fYm9fc3RhcnRfZ3R0X2FjY2VzcyhibywgdHJ1ZSk7Ci0Jd2hpbGUgKHNpemUtLSkKLQkJKnZh ZGRyKysgPSB2YWw7Ci19Ci0KLXN0YXRpYyB2b2lkCi1ndHRfY21wX2JvKGRybV9pbnRlbF9ibyAq Ym8sIHVpbnQzMl90IHZhbCwgaW50IHdpZHRoLCBpbnQgaGVpZ2h0LCBkcm1faW50ZWxfYm8gKnRt cCkKLXsKLQl1aW50MzJfdCAqdmFkZHIgPSBiby0+dmlydHVhbDsKLQlpbnQgeTsKLQotCS8qIEdU VCBhY2Nlc3MgaXMgc2xvdy4gU28gd2UganVzdCBjb21wYXJlIGEgZmV3IHBvaW50cyAqLwotCWRy bV9pbnRlbF9nZW1fYm9fc3RhcnRfZ3R0X2FjY2VzcyhibywgZmFsc2UpOwotCWZvciAoeSA9IDA7 IHkgPCBoZWlnaHQ7IHkrKykKLQkJaWd0X2Fzc2VydF9lcV91MzIodmFkZHJbeSp3aWR0aCt5XSwg dmFsKTsKLX0KLQotc3RhdGljIGRybV9pbnRlbF9ibyAqCi1tYXBfYm8oZHJtX2ludGVsX2JvICpi bykKLXsKLQkvKiBndHQgbWFwIGRvZXNuJ3QgaGF2ZSBhIHdyaXRlIHBhcmFtZXRlciwgc28ganVz dCBrZWVwIHRoZSBtYXBwaW5nCi0JICogYXJvdW5kICh0byBhdm9pZCB0aGUgc2V0X2RvbWFpbiB3 aXRoIHRoZSBndHQgd3JpdGUgZG9tYWluIHNldCkgYW5kCi0JICogbWFudWFsbHkgdGVsbCB0aGUg a2VybmVsIHdoZW4gd2Ugc3RhcnQgYWNjZXNzIHRoZSBndHQuICovCi0JZG9fb3JfZGllKGRybV9p bnRlbF9nZW1fYm9fbWFwX2d0dChibykpOwotCi0JcmV0dXJuIGJvOwotfQotCi1zdGF0aWMgZHJt X2ludGVsX2JvICoKLXRpbGVfYm8oZHJtX2ludGVsX2JvICpibywgaW50IHdpZHRoKQotewotCXVp bnQzMl90IHRpbGluZyA9IEk5MTVfVElMSU5HX1g7Ci0JdWludDMyX3Qgc3RyaWRlID0gd2lkdGgg KiA0OwotCi0JZG9fb3JfZGllKGRybV9pbnRlbF9ib19zZXRfdGlsaW5nKGJvLCAmdGlsaW5nLCBz dHJpZGUpKTsKLQotCXJldHVybiBibzsKLX0KLQotc3RhdGljIGRybV9pbnRlbF9ibyAqCi1ndHRf Y3JlYXRlX2JvKGRybV9pbnRlbF9idWZtZ3IgKmJ1Zm1nciwgaW50IHdpZHRoLCBpbnQgaGVpZ2h0 KQotewotCXJldHVybiBtYXBfYm8odW5tYXBwZWRfY3JlYXRlX2JvKGJ1Zm1nciwgd2lkdGgsIGhl aWdodCkpOwotfQotCi1zdGF0aWMgZHJtX2ludGVsX2JvICoKLWd0dFhfY3JlYXRlX2JvKGRybV9p bnRlbF9idWZtZ3IgKmJ1Zm1nciwgaW50IHdpZHRoLCBpbnQgaGVpZ2h0KQotewotCXJldHVybiB0 aWxlX2JvKGd0dF9jcmVhdGVfYm8oYnVmbWdyLCB3aWR0aCwgaGVpZ2h0KSwgd2lkdGgpOwotfQot Ci1zdGF0aWMgZHJtX2ludGVsX2JvICoKLXdjX2NyZWF0ZV9ibyhkcm1faW50ZWxfYnVmbWdyICpi dWZtZ3IsIGludCB3aWR0aCwgaW50IGhlaWdodCkKLXsKLQlkcm1faW50ZWxfYm8gKmJvOwotCi0J Z2VtX3JlcXVpcmVfbW1hcF93YyhmZCk7Ci0KLQlibyA9IHVubWFwcGVkX2NyZWF0ZV9ibyhidWZt Z3IsIHdpZHRoLCBoZWlnaHQpOwotCWJvLT52aXJ0dWFsID0gX19nZW1fbW1hcF9fd2MoZmQsIGJv LT5oYW5kbGUsIDAsIGJvLT5zaXplLCBQUk9UX1JFQUQgfCBQUk9UX1dSSVRFKTsKLQlyZXR1cm4g Ym87Ci19Ci0KLXN0YXRpYyB2b2lkCi13Y19yZWxlYXNlX2JvKGRybV9pbnRlbF9ibyAqYm8pCi17 Ci0JbXVubWFwKGJvLT52aXJ0dWFsLCBiby0+c2l6ZSk7Ci0JYm8tPnZpcnR1YWwgPSBOVUxMOwot Ci0Jbm9wX3JlbGVhc2VfYm8oYm8pOwotfQotCi1zdGF0aWMgZHJtX2ludGVsX2JvICoKLWdwdV9j cmVhdGVfYm8oZHJtX2ludGVsX2J1Zm1nciAqYnVmbWdyLCBpbnQgd2lkdGgsIGludCBoZWlnaHQp Ci17Ci0JcmV0dXJuIHVubWFwcGVkX2NyZWF0ZV9ibyhidWZtZ3IsIHdpZHRoLCBoZWlnaHQpOwot fQotCi0KLXN0YXRpYyBkcm1faW50ZWxfYm8gKgotZ3B1WF9jcmVhdGVfYm8oZHJtX2ludGVsX2J1 Zm1nciAqYnVmbWdyLCBpbnQgd2lkdGgsIGludCBoZWlnaHQpCi17Ci0JcmV0dXJuIHRpbGVfYm8o Z3B1X2NyZWF0ZV9ibyhidWZtZ3IsIHdpZHRoLCBoZWlnaHQpLCB3aWR0aCk7Ci19Ci0KLXN0YXRp YyB2b2lkCi1jcHVfc2V0X2JvKGRybV9pbnRlbF9ibyAqYm8sIHVpbnQzMl90IHZhbCwgaW50IHdp ZHRoLCBpbnQgaGVpZ2h0KQotewotCWludCBzaXplID0gd2lkdGggKiBoZWlnaHQ7Ci0JdWludDMy X3QgKnZhZGRyOwotCi0JZG9fb3JfZGllKGRybV9pbnRlbF9ib19tYXAoYm8sIHRydWUpKTsKLQl2 YWRkciA9IGJvLT52aXJ0dWFsOwotCXdoaWxlIChzaXplLS0pCi0JCSp2YWRkcisrID0gdmFsOwot CWRybV9pbnRlbF9ib191bm1hcChibyk7Ci19Ci0KLXN0YXRpYyB2b2lkCi1jcHVfY21wX2JvKGRy bV9pbnRlbF9ibyAqYm8sIHVpbnQzMl90IHZhbCwgaW50IHdpZHRoLCBpbnQgaGVpZ2h0LCBkcm1f aW50ZWxfYm8gKnRtcCkKLXsKLQlpbnQgc2l6ZSA9IHdpZHRoICogaGVpZ2h0OwotCXVpbnQzMl90 ICp2YWRkcjsKLQotCWRvX29yX2RpZShkcm1faW50ZWxfYm9fbWFwKGJvLCBmYWxzZSkpOwotCXZh ZGRyID0gYm8tPnZpcnR1YWw7Ci0Jd2hpbGUgKHNpemUtLSkKLQkJaWd0X2Fzc2VydF9lcV91MzIo KnZhZGRyKyssIHZhbCk7Ci0JZHJtX2ludGVsX2JvX3VubWFwKGJvKTsKLX0KLQotc3RhdGljIHZv aWQKLWdwdV9zZXRfYm8oZHJtX2ludGVsX2JvICpibywgdWludDMyX3QgdmFsLCBpbnQgd2lkdGgs IGludCBoZWlnaHQpCi17Ci0Jc3RydWN0IGRybV9pOTE1X2dlbV9yZWxvY2F0aW9uX2VudHJ5IHJl bG9jWzFdOwotCXN0cnVjdCBkcm1faTkxNV9nZW1fZXhlY19vYmplY3QyIGdlbV9leGVjWzJdOwot CXN0cnVjdCBkcm1faTkxNV9nZW1fZXhlY2J1ZmZlcjIgZXhlY2J1ZjsKLQlzdHJ1Y3QgZHJtX2k5 MTVfZ2VtX3B3cml0ZSBnZW1fcHdyaXRlOwotCXN0cnVjdCBkcm1faTkxNV9nZW1fY3JlYXRlIGNy ZWF0ZTsKLQl1aW50MzJfdCBidWZbMTBdLCAqYjsKLQl1aW50MzJfdCB0aWxpbmcsIHN3aXp6bGU7 Ci0KLQlkcm1faW50ZWxfYm9fZ2V0X3RpbGluZyhibywgJnRpbGluZywgJnN3aXp6bGUpOwotCi0J bWVtc2V0KHJlbG9jLCAwLCBzaXplb2YocmVsb2MpKTsKLQltZW1zZXQoZ2VtX2V4ZWMsIDAsIHNp emVvZihnZW1fZXhlYykpOwotCW1lbXNldCgmZXhlY2J1ZiwgMCwgc2l6ZW9mKGV4ZWNidWYpKTsK LQotCWIgPSBidWY7Ci0JKmIrKyA9IFhZX0NPTE9SX0JMVF9DTURfTk9MRU4gfAotCQkoKGdlbiA+ PSA4KSA/IDUgOiA0KSB8Ci0JCUNPTE9SX0JMVF9XUklURV9BTFBIQSB8IFhZX0NPTE9SX0JMVF9X UklURV9SR0I7Ci0JaWYgKGdlbiA+PSA0ICYmIHRpbGluZykgewotCQliWy0xXSB8PSBYWV9DT0xP Ul9CTFRfVElMRUQ7Ci0JCSpiID0gd2lkdGg7Ci0JfSBlbHNlCi0JCSpiID0gd2lkdGggPDwgMjsK LQkqYisrIHw9IDB4ZjAgPDwgMTYgfCAxIDw8IDI1IHwgMSA8PCAyNDsKLQkqYisrID0gMDsKLQkq YisrID0gaGVpZ2h0IDw8IDE2IHwgd2lkdGg7Ci0JcmVsb2NbMF0ub2Zmc2V0ID0gKGIgLSBidWYp ICogc2l6ZW9mKHVpbnQzMl90KTsKLQlyZWxvY1swXS50YXJnZXRfaGFuZGxlID0gYm8tPmhhbmRs ZTsKLQlyZWxvY1swXS5yZWFkX2RvbWFpbnMgPSBJOTE1X0dFTV9ET01BSU5fUkVOREVSOwotCXJl bG9jWzBdLndyaXRlX2RvbWFpbiA9IEk5MTVfR0VNX0RPTUFJTl9SRU5ERVI7Ci0JKmIrKyA9IDA7 Ci0JaWYgKGdlbiA+PSA4KQotCQkqYisrID0gMDsKLQkqYisrID0gdmFsOwotCSpiKysgPSBNSV9C QVRDSF9CVUZGRVJfRU5EOwotCWlmICgoYiAtIGJ1ZikgJiAxKQotCQkqYisrID0gMDsKLQotCWdl bV9leGVjWzBdLmhhbmRsZSA9IGJvLT5oYW5kbGU7Ci0JZ2VtX2V4ZWNbMF0uZmxhZ3MgPSBFWEVD X09CSkVDVF9ORUVEU19GRU5DRTsKLQotCWNyZWF0ZS5oYW5kbGUgPSAwOwotCWNyZWF0ZS5zaXpl ID0gNDA5NjsKLQlkcm1Jb2N0bChmZCwgRFJNX0lPQ1RMX0k5MTVfR0VNX0NSRUFURSwgJmNyZWF0 ZSk7Ci0JZ2VtX2V4ZWNbMV0uaGFuZGxlID0gY3JlYXRlLmhhbmRsZTsKLQlnZW1fZXhlY1sxXS5y ZWxvY2F0aW9uX2NvdW50ID0gMTsKLQlnZW1fZXhlY1sxXS5yZWxvY3NfcHRyID0gKHVpbnRwdHJf dClyZWxvYzsKLQotCWV4ZWNidWYuYnVmZmVyc19wdHIgPSAodWludHB0cl90KWdlbV9leGVjOwot CWV4ZWNidWYuYnVmZmVyX2NvdW50ID0gMjsKLQlleGVjYnVmLmJhdGNoX2xlbiA9IChiIC0gYnVm KSAqIHNpemVvZihidWZbMF0pOwotCWlmIChnZW4gPj0gNikKLQkJZXhlY2J1Zi5mbGFncyA9IEk5 MTVfRVhFQ19CTFQ7Ci0KLQlnZW1fcHdyaXRlLmhhbmRsZSA9IGdlbV9leGVjWzFdLmhhbmRsZTsK LQlnZW1fcHdyaXRlLm9mZnNldCA9IDA7Ci0JZ2VtX3B3cml0ZS5zaXplID0gZXhlY2J1Zi5iYXRj aF9sZW47Ci0JZ2VtX3B3cml0ZS5kYXRhX3B0ciA9ICh1aW50cHRyX3QpYnVmOwotCWRvX29yX2Rp ZShkcm1Jb2N0bChmZCwgRFJNX0lPQ1RMX0k5MTVfR0VNX1BXUklURSwgJmdlbV9wd3JpdGUpKTsK LQlkb19vcl9kaWUoZHJtSW9jdGwoZmQsIERSTV9JT0NUTF9JOTE1X0dFTV9FWEVDQlVGRkVSMiwg JmV4ZWNidWYpKTsKLQotCWRybUlvY3RsKGZkLCBEUk1fSU9DVExfR0VNX0NMT1NFLCAmY3JlYXRl LmhhbmRsZSk7Ci19Ci0KLXN0YXRpYyB2b2lkCi1ncHVfY21wX2JvKGRybV9pbnRlbF9ibyAqYm8s IHVpbnQzMl90IHZhbCwgaW50IHdpZHRoLCBpbnQgaGVpZ2h0LCBkcm1faW50ZWxfYm8gKnRtcCkK LXsKLQlpbnRlbF9ibHRfY29weShiYXRjaCwKLQkJICAgICAgIGJvLCAwLCAwLCA0KndpZHRoLAot CQkgICAgICAgdG1wLCAwLCAwLCA0KndpZHRoLAotCQkgICAgICAgd2lkdGgsIGhlaWdodCwgMzIp OwotCWNwdV9jbXBfYm8odG1wLCB2YWwsIHdpZHRoLCBoZWlnaHQsIE5VTEwpOwotfQotCi1jb25z dCBzdHJ1Y3QgYWNjZXNzX21vZGUgewotCWNvbnN0IGNoYXIgKm5hbWU7Ci0Jdm9pZCAoKnNldF9i bykoZHJtX2ludGVsX2JvICpibywgdWludDMyX3QgdmFsLCBpbnQgdywgaW50IGgpOwotCXZvaWQg KCpjbXBfYm8pKGRybV9pbnRlbF9ibyAqYm8sIHVpbnQzMl90IHZhbCwgaW50IHcsIGludCBoLCBk cm1faW50ZWxfYm8gKnRtcCk7Ci0JZHJtX2ludGVsX2JvICooKmNyZWF0ZV9ibykoZHJtX2ludGVs X2J1Zm1nciAqYnVmbWdyLCBpbnQgd2lkdGgsIGludCBoZWlnaHQpOwotCXZvaWQgKCpyZWxlYXNl X2JvKShkcm1faW50ZWxfYm8gKmJvKTsKLX0gYWNjZXNzX21vZGVzW10gPSB7Ci0JewotCQkubmFt ZSA9ICJwcnciLAotCQkuc2V0X2JvID0gcHJ3X3NldF9ibywKLQkJLmNtcF9ibyA9IHByd19jbXBf Ym8sCi0JCS5jcmVhdGVfYm8gPSB1bm1hcHBlZF9jcmVhdGVfYm8sCi0JCS5yZWxlYXNlX2JvID0g bm9wX3JlbGVhc2VfYm8sCi0JfSwKLQl7Ci0JCS5uYW1lID0gImNwdSIsCi0JCS5zZXRfYm8gPSBj cHVfc2V0X2JvLAotCQkuY21wX2JvID0gY3B1X2NtcF9ibywKLQkJLmNyZWF0ZV9ibyA9IHVubWFw cGVkX2NyZWF0ZV9ibywKLQkJLnJlbGVhc2VfYm8gPSBub3BfcmVsZWFzZV9ibywKLQl9LAotCXsK LQkJLm5hbWUgPSAic25vb3AiLAotCQkuc2V0X2JvID0gY3B1X3NldF9ibywKLQkJLmNtcF9ibyA9 IGNwdV9jbXBfYm8sCi0JCS5jcmVhdGVfYm8gPSBzbm9vcF9jcmVhdGVfYm8sCi0JCS5yZWxlYXNl X2JvID0gbm9wX3JlbGVhc2VfYm8sCi0JfSwKLQl7Ci0JCS5uYW1lID0gImd0dCIsCi0JCS5zZXRf Ym8gPSBndHRfc2V0X2JvLAotCQkuY21wX2JvID0gZ3R0X2NtcF9ibywKLQkJLmNyZWF0ZV9ibyA9 IGd0dF9jcmVhdGVfYm8sCi0JCS5yZWxlYXNlX2JvID0gbm9wX3JlbGVhc2VfYm8sCi0JfSwKLQl7 Ci0JCS5uYW1lID0gImd0dFgiLAotCQkuc2V0X2JvID0gZ3R0X3NldF9ibywKLQkJLmNtcF9ibyA9 IGd0dF9jbXBfYm8sCi0JCS5jcmVhdGVfYm8gPSBndHRYX2NyZWF0ZV9ibywKLQkJLnJlbGVhc2Vf Ym8gPSBub3BfcmVsZWFzZV9ibywKLQl9LAotCXsKLQkJLm5hbWUgPSAid2MiLAotCQkuc2V0X2Jv ID0gZ3R0X3NldF9ibywKLQkJLmNtcF9ibyA9IGd0dF9jbXBfYm8sCi0JCS5jcmVhdGVfYm8gPSB3 Y19jcmVhdGVfYm8sCi0JCS5yZWxlYXNlX2JvID0gd2NfcmVsZWFzZV9ibywKLQl9LAotCXsKLQkJ Lm5hbWUgPSAiZ3B1IiwKLQkJLnNldF9ibyA9IGdwdV9zZXRfYm8sCi0JCS5jbXBfYm8gPSBncHVf Y21wX2JvLAotCQkuY3JlYXRlX2JvID0gZ3B1X2NyZWF0ZV9ibywKLQkJLnJlbGVhc2VfYm8gPSBu b3BfcmVsZWFzZV9ibywKLQl9LAotCXsKLQkJLm5hbWUgPSAiZ3B1WCIsCi0JCS5zZXRfYm8gPSBn cHVfc2V0X2JvLAotCQkuY21wX2JvID0gZ3B1X2NtcF9ibywKLQkJLmNyZWF0ZV9ibyA9IGdwdVhf Y3JlYXRlX2JvLAotCQkucmVsZWFzZV9ibyA9IG5vcF9yZWxlYXNlX2JvLAotCX0sCi19OwotCi0j ZGVmaW5lIE1BWF9OVU1fQlVGRkVSUyAxMDI0Ci1pbnQgbnVtX2J1ZmZlcnMgPSBNQVhfTlVNX0JV RkZFUlM7Ci1jb25zdCBpbnQgd2lkdGggPSA1MTIsIGhlaWdodCA9IDUxMjsKLWlndF9yZW5kZXJf Y29weWZ1bmNfdCByZW5kZXJjb3B5OwotCi1zdHJ1Y3QgYnVmZmVycyB7Ci0JY29uc3Qgc3RydWN0 IGFjY2Vzc19tb2RlICptb2RlOwotCWRybV9pbnRlbF9idWZtZ3IgKmJ1Zm1ncjsKLQlkcm1faW50 ZWxfYm8gKnNyY1tNQVhfTlVNX0JVRkZFUlNdLCAqZHN0W01BWF9OVU1fQlVGRkVSU107Ci0JZHJt X2ludGVsX2JvICpkdW1teSwgKnNwYXJlOwotCWludCBjb3VudDsKLX07Ci0KLXN0YXRpYyB2b2lk ICpidWZmZXJzX2luaXQoc3RydWN0IGJ1ZmZlcnMgKmRhdGEsCi0JCQkgIGNvbnN0IHN0cnVjdCBh Y2Nlc3NfbW9kZSAqbW9kZSwKLQkJCSAgaW50IF9mZCkKLXsKLQlkYXRhLT5tb2RlID0gbW9kZTsK LQlkYXRhLT5jb3VudCA9IDA7Ci0KLQlkYXRhLT5idWZtZ3IgPSBkcm1faW50ZWxfYnVmbWdyX2dl bV9pbml0KF9mZCwgNDA5Nik7Ci0JaWd0X2Fzc2VydChkYXRhLT5idWZtZ3IpOwotCi0JZHJtX2lu dGVsX2J1Zm1ncl9nZW1fZW5hYmxlX3JldXNlKGRhdGEtPmJ1Zm1ncik7Ci0JcmV0dXJuIGludGVs X2JhdGNoYnVmZmVyX2FsbG9jKGRhdGEtPmJ1Zm1nciwgZGV2aWQpOwotfQotCi1zdGF0aWMgdm9p ZCBidWZmZXJzX2Rlc3Ryb3koc3RydWN0IGJ1ZmZlcnMgKmRhdGEpCi17Ci0JaWYgKGRhdGEtPmNv dW50ID09IDApCi0JCXJldHVybjsKLQotCWZvciAoaW50IGkgPSAwOyBpIDwgZGF0YS0+Y291bnQ7 IGkrKykgewotCQlkYXRhLT5tb2RlLT5yZWxlYXNlX2JvKGRhdGEtPnNyY1tpXSk7Ci0JCWRhdGEt Pm1vZGUtPnJlbGVhc2VfYm8oZGF0YS0+ZHN0W2ldKTsKLQl9Ci0JZGF0YS0+bW9kZS0+cmVsZWFz ZV9ibyhkYXRhLT5kdW1teSk7Ci0JZGF0YS0+bW9kZS0+cmVsZWFzZV9ibyhkYXRhLT5zcGFyZSk7 Ci0JZGF0YS0+Y291bnQgPSAwOwotfQotCi1zdGF0aWMgdm9pZCBidWZmZXJzX2NyZWF0ZShzdHJ1 Y3QgYnVmZmVycyAqZGF0YSwKLQkJCSAgIGludCBjb3VudCkKLXsKLQlpZ3RfYXNzZXJ0KGRhdGEt PmJ1Zm1ncik7Ci0KLQlidWZmZXJzX2Rlc3Ryb3koZGF0YSk7Ci0KLQlmb3IgKGludCBpID0gMDsg aSA8IGNvdW50OyBpKyspIHsKLQkJZGF0YS0+c3JjW2ldID0KLQkJCWRhdGEtPm1vZGUtPmNyZWF0 ZV9ibyhkYXRhLT5idWZtZ3IsIHdpZHRoLCBoZWlnaHQpOwotCQlkYXRhLT5kc3RbaV0gPQotCQkJ ZGF0YS0+bW9kZS0+Y3JlYXRlX2JvKGRhdGEtPmJ1Zm1nciwgd2lkdGgsIGhlaWdodCk7Ci0JfQot CWRhdGEtPmR1bW15ID0gZGF0YS0+bW9kZS0+Y3JlYXRlX2JvKGRhdGEtPmJ1Zm1nciwgd2lkdGgs IGhlaWdodCk7Ci0JZGF0YS0+c3BhcmUgPSBkYXRhLT5tb2RlLT5jcmVhdGVfYm8oZGF0YS0+YnVm bWdyLCB3aWR0aCwgaGVpZ2h0KTsKLQlkYXRhLT5jb3VudCA9IGNvdW50OwotfQotCi1zdGF0aWMg dm9pZCBidWZmZXJzX2Zpbmkoc3RydWN0IGJ1ZmZlcnMgKmRhdGEpCi17Ci0JaWYgKGRhdGEtPmJ1 Zm1nciA9PSBOVUxMKQotCQlyZXR1cm47Ci0KLQlidWZmZXJzX2Rlc3Ryb3koZGF0YSk7Ci0KLQlp bnRlbF9iYXRjaGJ1ZmZlcl9mcmVlKGJhdGNoKTsKLQlkcm1faW50ZWxfYnVmbWdyX2Rlc3Ryb3ko ZGF0YS0+YnVmbWdyKTsKLQlkYXRhLT5idWZtZ3IgPSBOVUxMOwotfQotCi10eXBlZGVmIHZvaWQg KCpkb19jb3B5KShkcm1faW50ZWxfYm8gKmRzdCwgZHJtX2ludGVsX2JvICpzcmMpOwotdHlwZWRl ZiBzdHJ1Y3QgaWd0X2hhbmdfcmluZyAoKmRvX2hhbmcpKHZvaWQpOwotCi1zdGF0aWMgdm9pZCBy ZW5kZXJfY29weV9ibyhkcm1faW50ZWxfYm8gKmRzdCwgZHJtX2ludGVsX2JvICpzcmMpCi17Ci0J c3RydWN0IGlndF9idWYgZCA9IHsKLQkJLmJvID0gZHN0LAotCQkuc2l6ZSA9IHdpZHRoICogaGVp Z2h0ICogNCwKLQkJLm51bV90aWxlcyA9IHdpZHRoICogaGVpZ2h0ICogNCwKLQkJLnN0cmlkZSA9 IHdpZHRoICogNCwKLQl9LCBzID0gewotCQkuYm8gPSBzcmMsCi0JCS5zaXplID0gd2lkdGggKiBo ZWlnaHQgKiA0LAotCQkubnVtX3RpbGVzID0gd2lkdGggKiBoZWlnaHQgKiA0LAotCQkuc3RyaWRl ID0gd2lkdGggKiA0LAotCX07Ci0JdWludDMyX3Qgc3dpenpsZTsKLQotCWRybV9pbnRlbF9ib19n ZXRfdGlsaW5nKGRzdCwgJmQudGlsaW5nLCAmc3dpenpsZSk7Ci0JZHJtX2ludGVsX2JvX2dldF90 aWxpbmcoc3JjLCAmcy50aWxpbmcsICZzd2l6emxlKTsKLQotCXJlbmRlcmNvcHkoYmF0Y2gsIE5V TEwsCi0JCSAgICZzLCAwLCAwLAotCQkgICB3aWR0aCwgaGVpZ2h0LAotCQkgICAmZCwgMCwgMCk7 Ci19Ci0KLXN0YXRpYyB2b2lkIGJsdF9jb3B5X2JvKGRybV9pbnRlbF9ibyAqZHN0LCBkcm1faW50 ZWxfYm8gKnNyYykKLXsKLQlpbnRlbF9ibHRfY29weShiYXRjaCwKLQkJICAgICAgIHNyYywgMCwg MCwgNCp3aWR0aCwKLQkJICAgICAgIGRzdCwgMCwgMCwgNCp3aWR0aCwKLQkJICAgICAgIHdpZHRo LCBoZWlnaHQsIDMyKTsKLX0KLQotc3RhdGljIHZvaWQgY3B1X2NvcHlfYm8oZHJtX2ludGVsX2Jv ICpkc3QsIGRybV9pbnRlbF9ibyAqc3JjKQotewotCWNvbnN0IGludCBzaXplID0gd2lkdGggKiBo ZWlnaHQgKiBzaXplb2YodWludDMyX3QpOwotCXZvaWQgKmQsICpzOwotCi0JZ2VtX3NldF9kb21h aW4oZmQsIHNyYy0+aGFuZGxlLCBJOTE1X0dFTV9ET01BSU5fQ1BVLCAwKTsKLQlnZW1fc2V0X2Rv bWFpbihmZCwgZHN0LT5oYW5kbGUsIEk5MTVfR0VNX0RPTUFJTl9DUFUsIEk5MTVfR0VNX0RPTUFJ Tl9DUFUpOwotCXMgPSBnZW1fbW1hcF9fY3B1KGZkLCBzcmMtPmhhbmRsZSwgMCwgc2l6ZSwgUFJP VF9SRUFEKTsKLQlkID0gZ2VtX21tYXBfX2NwdShmZCwgZHN0LT5oYW5kbGUsIDAsIHNpemUsIFBS T1RfV1JJVEUpOwotCi0JbWVtY3B5KGQsIHMsIHNpemUpOwotCi0JbXVubWFwKGQsIHNpemUpOwot CW11bm1hcChzLCBzaXplKTsKLX0KLQotc3RhdGljIHZvaWQgZ3R0X2NvcHlfYm8oZHJtX2ludGVs X2JvICpkc3QsIGRybV9pbnRlbF9ibyAqc3JjKQotewotCWNvbnN0IGludCBzaXplID0gd2lkdGgg KiBoZWlnaHQgKiBzaXplb2YodWludDMyX3QpOwotCXZvaWQgKmQsICpzOwotCi0JZ2VtX3NldF9k b21haW4oZmQsIHNyYy0+aGFuZGxlLCBJOTE1X0dFTV9ET01BSU5fR1RULCAwKTsKLQlnZW1fc2V0 X2RvbWFpbihmZCwgZHN0LT5oYW5kbGUsIEk5MTVfR0VNX0RPTUFJTl9HVFQsIEk5MTVfR0VNX0RP TUFJTl9HVFQpOwotCi0JcyA9IGdlbV9tbWFwX19ndHQoZmQsIHNyYy0+aGFuZGxlLCBzaXplLCBQ Uk9UX1JFQUQpOwotCWQgPSBnZW1fbW1hcF9fZ3R0KGZkLCBkc3QtPmhhbmRsZSwgc2l6ZSwgUFJP VF9XUklURSk7Ci0KLQltZW1jcHkoZCwgcywgc2l6ZSk7Ci0KLQltdW5tYXAoZCwgc2l6ZSk7Ci0J bXVubWFwKHMsIHNpemUpOwotfQotCi1zdGF0aWMgdm9pZCB3Y19jb3B5X2JvKGRybV9pbnRlbF9i byAqZHN0LCBkcm1faW50ZWxfYm8gKnNyYykKLXsKLQljb25zdCBpbnQgc2l6ZSA9IHdpZHRoICog aGVpZ2h0ICogc2l6ZW9mKHVpbnQzMl90KTsKLQl2b2lkICpkLCAqczsKLQotCWdlbV9zZXRfZG9t YWluKGZkLCBzcmMtPmhhbmRsZSwgSTkxNV9HRU1fRE9NQUlOX0dUVCwgMCk7Ci0JZ2VtX3NldF9k b21haW4oZmQsIGRzdC0+aGFuZGxlLCBJOTE1X0dFTV9ET01BSU5fR1RULCBJOTE1X0dFTV9ET01B SU5fR1RUKTsKLQotCXMgPSBnZW1fbW1hcF9fd2MoZmQsIHNyYy0+aGFuZGxlLCAwLCBzaXplLCBQ Uk9UX1JFQUQpOwotCWQgPSBnZW1fbW1hcF9fd2MoZmQsIGRzdC0+aGFuZGxlLCAwLCBzaXplLCBQ Uk9UX1dSSVRFKTsKLQotCW1lbWNweShkLCBzLCBzaXplKTsKLQotCW11bm1hcChkLCBzaXplKTsK LQltdW5tYXAocywgc2l6ZSk7Ci19Ci0KLXN0YXRpYyBzdHJ1Y3QgaWd0X2hhbmdfcmluZyBub19o YW5nKHZvaWQpCi17Ci0JcmV0dXJuIChzdHJ1Y3QgaWd0X2hhbmdfcmluZyl7MCwgMH07Ci19Ci0K LXN0YXRpYyBzdHJ1Y3QgaWd0X2hhbmdfcmluZyBiY3NfaGFuZyh2b2lkKQotewotCXJldHVybiBp Z3RfaGFuZ19yaW5nKGZkLCBJOTE1X0VYRUNfQkxUKTsKLX0KLQotc3RhdGljIHN0cnVjdCBpZ3Rf aGFuZ19yaW5nIHJjc19oYW5nKHZvaWQpCi17Ci0JcmV0dXJuIGlndF9oYW5nX3JpbmcoZmQsIEk5 MTVfRVhFQ19SRU5ERVIpOwotfQotCi1zdGF0aWMgdm9pZCBoYW5nX3JlcXVpcmUodm9pZCkKLXsK LQlpZ3RfcmVxdWlyZV9oYW5nX3JpbmcoZmQsIC0xKTsKLX0KLQotc3RhdGljIHZvaWQgZG9fb3Zl cndyaXRlX3NvdXJjZShzdHJ1Y3QgYnVmZmVycyAqYnVmZmVycywKLQkJCQlkb19jb3B5IGRvX2Nv cHlfZnVuYywKLQkJCQlkb19oYW5nIGRvX2hhbmdfZnVuYykKLXsKLQlzdHJ1Y3QgaWd0X2hhbmdf cmluZyBoYW5nOwotCWludCBpOwotCi0JZ2VtX3F1aWVzY2VudF9ncHUoZmQpOwotCWZvciAoaSA9 IDA7IGkgPCBidWZmZXJzLT5jb3VudDsgaSsrKSB7Ci0JCWJ1ZmZlcnMtPm1vZGUtPnNldF9ibyhi dWZmZXJzLT5zcmNbaV0sIGksIHdpZHRoLCBoZWlnaHQpOwotCQlidWZmZXJzLT5tb2RlLT5zZXRf Ym8oYnVmZmVycy0+ZHN0W2ldLCB+aSwgd2lkdGgsIGhlaWdodCk7Ci0JfQotCWZvciAoaSA9IDA7 IGkgPCBidWZmZXJzLT5jb3VudDsgaSsrKQotCQlkb19jb3B5X2Z1bmMoYnVmZmVycy0+ZHN0W2ld LCBidWZmZXJzLT5zcmNbaV0pOwotCWhhbmcgPSBkb19oYW5nX2Z1bmMoKTsKLQlmb3IgKGkgPSBi dWZmZXJzLT5jb3VudDsgaS0tOyApCi0JCWJ1ZmZlcnMtPm1vZGUtPnNldF9ibyhidWZmZXJzLT5z cmNbaV0sIDB4ZGVhZGJlZWYsIHdpZHRoLCBoZWlnaHQpOwotCWZvciAoaSA9IDA7IGkgPCBidWZm ZXJzLT5jb3VudDsgaSsrKQotCQlidWZmZXJzLT5tb2RlLT5jbXBfYm8oYnVmZmVycy0+ZHN0W2ld LCBpLCB3aWR0aCwgaGVpZ2h0LCBidWZmZXJzLT5kdW1teSk7Ci0JaWd0X3Bvc3RfaGFuZ19yaW5n KGZkLCBoYW5nKTsKLX0KLQotc3RhdGljIHZvaWQgZG9fb3ZlcndyaXRlX3NvdXJjZV9yZWFkKHN0 cnVjdCBidWZmZXJzICpidWZmZXJzLAotCQkJCSAgICAgZG9fY29weSBkb19jb3B5X2Z1bmMsCi0J CQkJICAgICBkb19oYW5nIGRvX2hhbmdfZnVuYywKLQkJCQkgICAgIGludCBkb19yY3MpCi17Ci0J Y29uc3QgaW50IGhhbGYgPSBidWZmZXJzLT5jb3VudC8yOwotCXN0cnVjdCBpZ3RfaGFuZ19yaW5n IGhhbmc7Ci0JaW50IGk7Ci0KLQlnZW1fcXVpZXNjZW50X2dwdShmZCk7Ci0JZm9yIChpID0gMDsg aSA8IGhhbGY7IGkrKykgewotCQlidWZmZXJzLT5tb2RlLT5zZXRfYm8oYnVmZmVycy0+c3JjW2ld LCBpLCB3aWR0aCwgaGVpZ2h0KTsKLQkJYnVmZmVycy0+bW9kZS0+c2V0X2JvKGJ1ZmZlcnMtPmRz dFtpXSwgfmksIHdpZHRoLCBoZWlnaHQpOwotCQlidWZmZXJzLT5tb2RlLT5zZXRfYm8oYnVmZmVy cy0+ZHN0W2kraGFsZl0sIH5pLCB3aWR0aCwgaGVpZ2h0KTsKLQl9Ci0JZm9yIChpID0gMDsgaSA8 IGhhbGY7IGkrKykgewotCQlkb19jb3B5X2Z1bmMoYnVmZmVycy0+ZHN0W2ldLCBidWZmZXJzLT5z cmNbaV0pOwotCQlpZiAoZG9fcmNzKQotCQkJcmVuZGVyX2NvcHlfYm8oYnVmZmVycy0+ZHN0W2kr aGFsZl0sIGJ1ZmZlcnMtPnNyY1tpXSk7Ci0JCWVsc2UKLQkJCWJsdF9jb3B5X2JvKGJ1ZmZlcnMt PmRzdFtpK2hhbGZdLCBidWZmZXJzLT5zcmNbaV0pOwotCX0KLQloYW5nID0gZG9faGFuZ19mdW5j KCk7Ci0JZm9yIChpID0gaGFsZjsgaS0tOyApCi0JCWJ1ZmZlcnMtPm1vZGUtPnNldF9ibyhidWZm ZXJzLT5zcmNbaV0sIDB4ZGVhZGJlZWYsIHdpZHRoLCBoZWlnaHQpOwotCWZvciAoaSA9IDA7IGkg PCBoYWxmOyBpKyspIHsKLQkJYnVmZmVycy0+bW9kZS0+Y21wX2JvKGJ1ZmZlcnMtPmRzdFtpXSwg aSwgd2lkdGgsIGhlaWdodCwgYnVmZmVycy0+ZHVtbXkpOwotCQlidWZmZXJzLT5tb2RlLT5jbXBf Ym8oYnVmZmVycy0+ZHN0W2kraGFsZl0sIGksIHdpZHRoLCBoZWlnaHQsIGJ1ZmZlcnMtPmR1bW15 KTsKLQl9Ci0JaWd0X3Bvc3RfaGFuZ19yaW5nKGZkLCBoYW5nKTsKLX0KLQotc3RhdGljIHZvaWQg ZG9fb3ZlcndyaXRlX3NvdXJjZV9yZWFkX2JjcyhzdHJ1Y3QgYnVmZmVycyAqYnVmZmVycywKLQkJ CQkJIGRvX2NvcHkgZG9fY29weV9mdW5jLAotCQkJCQkgZG9faGFuZyBkb19oYW5nX2Z1bmMpCi17 Ci0JZG9fb3ZlcndyaXRlX3NvdXJjZV9yZWFkKGJ1ZmZlcnMsIGRvX2NvcHlfZnVuYywgZG9faGFu Z19mdW5jLCAwKTsKLX0KLQotc3RhdGljIHZvaWQgZG9fb3ZlcndyaXRlX3NvdXJjZV9yZWFkX3Jj cyhzdHJ1Y3QgYnVmZmVycyAqYnVmZmVycywKLQkJCQkJIGRvX2NvcHkgZG9fY29weV9mdW5jLAot CQkJCQkgZG9faGFuZyBkb19oYW5nX2Z1bmMpCi17Ci0JZG9fb3ZlcndyaXRlX3NvdXJjZV9yZWFk KGJ1ZmZlcnMsIGRvX2NvcHlfZnVuYywgZG9faGFuZ19mdW5jLCAxKTsKLX0KLQotc3RhdGljIHZv aWQgZG9fb3ZlcndyaXRlX3NvdXJjZV9fcmV2KHN0cnVjdCBidWZmZXJzICpidWZmZXJzLAotCQkJ CSAgICAgZG9fY29weSBkb19jb3B5X2Z1bmMsCi0JCQkJICAgICBkb19oYW5nIGRvX2hhbmdfZnVu YykKLXsKLQlzdHJ1Y3QgaWd0X2hhbmdfcmluZyBoYW5nOwotCWludCBpOwotCi0JZ2VtX3F1aWVz Y2VudF9ncHUoZmQpOwotCWZvciAoaSA9IDA7IGkgPCBidWZmZXJzLT5jb3VudDsgaSsrKSB7Ci0J CWJ1ZmZlcnMtPm1vZGUtPnNldF9ibyhidWZmZXJzLT5zcmNbaV0sIGksIHdpZHRoLCBoZWlnaHQp OwotCQlidWZmZXJzLT5tb2RlLT5zZXRfYm8oYnVmZmVycy0+ZHN0W2ldLCB+aSwgd2lkdGgsIGhl aWdodCk7Ci0JfQotCWZvciAoaSA9IDA7IGkgPCBidWZmZXJzLT5jb3VudDsgaSsrKQotCQlkb19j b3B5X2Z1bmMoYnVmZmVycy0+ZHN0W2ldLCBidWZmZXJzLT5zcmNbaV0pOwotCWhhbmcgPSBkb19o YW5nX2Z1bmMoKTsKLQlmb3IgKGkgPSAwOyBpIDwgYnVmZmVycy0+Y291bnQ7IGkrKykKLQkJYnVm ZmVycy0+bW9kZS0+c2V0X2JvKGJ1ZmZlcnMtPnNyY1tpXSwgMHhkZWFkYmVlZiwgd2lkdGgsIGhl aWdodCk7Ci0JZm9yIChpID0gYnVmZmVycy0+Y291bnQ7IGktLTsgKQotCQlidWZmZXJzLT5tb2Rl LT5jbXBfYm8oYnVmZmVycy0+ZHN0W2ldLCBpLCB3aWR0aCwgaGVpZ2h0LCBidWZmZXJzLT5kdW1t eSk7Ci0JaWd0X3Bvc3RfaGFuZ19yaW5nKGZkLCBoYW5nKTsKLX0KLQotc3RhdGljIHZvaWQgZG9f b3ZlcndyaXRlX3NvdXJjZV9fb25lKHN0cnVjdCBidWZmZXJzICpidWZmZXJzLAotCQkJCSAgICAg ZG9fY29weSBkb19jb3B5X2Z1bmMsCi0JCQkJICAgICBkb19oYW5nIGRvX2hhbmdfZnVuYykKLXsK LQlzdHJ1Y3QgaWd0X2hhbmdfcmluZyBoYW5nOwotCi0JZ2VtX3F1aWVzY2VudF9ncHUoZmQpOwot CWJ1ZmZlcnMtPm1vZGUtPnNldF9ibyhidWZmZXJzLT5zcmNbMF0sIDAsIHdpZHRoLCBoZWlnaHQp OwotCWJ1ZmZlcnMtPm1vZGUtPnNldF9ibyhidWZmZXJzLT5kc3RbMF0sIH4wLCB3aWR0aCwgaGVp Z2h0KTsKLQlkb19jb3B5X2Z1bmMoYnVmZmVycy0+ZHN0WzBdLCBidWZmZXJzLT5zcmNbMF0pOwot CWhhbmcgPSBkb19oYW5nX2Z1bmMoKTsKLQlidWZmZXJzLT5tb2RlLT5zZXRfYm8oYnVmZmVycy0+ c3JjWzBdLCAweGRlYWRiZWVmLCB3aWR0aCwgaGVpZ2h0KTsKLQlidWZmZXJzLT5tb2RlLT5jbXBf Ym8oYnVmZmVycy0+ZHN0WzBdLCAwLCB3aWR0aCwgaGVpZ2h0LCBidWZmZXJzLT5kdW1teSk7Ci0J aWd0X3Bvc3RfaGFuZ19yaW5nKGZkLCBoYW5nKTsKLX0KLQotc3RhdGljIHZvaWQgZG9faW50ZXJt aXgoc3RydWN0IGJ1ZmZlcnMgKmJ1ZmZlcnMsCi0JCQlkb19jb3B5IGRvX2NvcHlfZnVuYywKLQkJ CWRvX2hhbmcgZG9faGFuZ19mdW5jLAotCQkJaW50IGRvX3JjcykKLXsKLQljb25zdCBpbnQgaGFs ZiA9IGJ1ZmZlcnMtPmNvdW50LzI7Ci0Jc3RydWN0IGlndF9oYW5nX3JpbmcgaGFuZzsKLQlpbnQg aTsKLQotCWdlbV9xdWllc2NlbnRfZ3B1KGZkKTsKLQlmb3IgKGkgPSAwOyBpIDwgYnVmZmVycy0+ Y291bnQ7IGkrKykgewotCQlidWZmZXJzLT5tb2RlLT5zZXRfYm8oYnVmZmVycy0+c3JjW2ldLCAw eGRlYWRiZWVmXn5pLCB3aWR0aCwgaGVpZ2h0KTsKLQkJYnVmZmVycy0+bW9kZS0+c2V0X2JvKGJ1 ZmZlcnMtPmRzdFtpXSwgaSwgd2lkdGgsIGhlaWdodCk7Ci0JfQotCWZvciAoaSA9IDA7IGkgPCBo YWxmOyBpKyspIHsKLQkJaWYgKGRvX3JjcyA9PSAxIHx8IChkb19yY3MgPT0gLTEgJiYgaSAmIDEp KQotCQkJcmVuZGVyX2NvcHlfYm8oYnVmZmVycy0+ZHN0W2ldLCBidWZmZXJzLT5zcmNbaV0pOwot CQllbHNlCi0JCQlibHRfY29weV9ibyhidWZmZXJzLT5kc3RbaV0sIGJ1ZmZlcnMtPnNyY1tpXSk7 Ci0KLQkJZG9fY29weV9mdW5jKGJ1ZmZlcnMtPmRzdFtpK2hhbGZdLCBidWZmZXJzLT5zcmNbaV0p OwotCi0JCWlmIChkb19yY3MgPT0gMSB8fCAoZG9fcmNzID09IC0xICYmIChpICYgMSkgPT0gMCkp Ci0JCQlyZW5kZXJfY29weV9ibyhidWZmZXJzLT5kc3RbaV0sIGJ1ZmZlcnMtPmRzdFtpK2hhbGZd KTsKLQkJZWxzZQotCQkJYmx0X2NvcHlfYm8oYnVmZmVycy0+ZHN0W2ldLCBidWZmZXJzLT5kc3Rb aStoYWxmXSk7Ci0KLQkJZG9fY29weV9mdW5jKGJ1ZmZlcnMtPmRzdFtpK2hhbGZdLCBidWZmZXJz LT5zcmNbaStoYWxmXSk7Ci0JfQotCWhhbmcgPSBkb19oYW5nX2Z1bmMoKTsKLQlmb3IgKGkgPSAw OyBpIDwgMipoYWxmOyBpKyspCi0JCWJ1ZmZlcnMtPm1vZGUtPmNtcF9ibyhidWZmZXJzLT5kc3Rb aV0sIDB4ZGVhZGJlZWZefmksIHdpZHRoLCBoZWlnaHQsIGJ1ZmZlcnMtPmR1bW15KTsKLQlpZ3Rf cG9zdF9oYW5nX3JpbmcoZmQsIGhhbmcpOwotfQotCi1zdGF0aWMgdm9pZCBkb19pbnRlcm1peF9y Y3Moc3RydWN0IGJ1ZmZlcnMgKmJ1ZmZlcnMsCi0JCQkgICAgZG9fY29weSBkb19jb3B5X2Z1bmMs Ci0JCQkgICAgZG9faGFuZyBkb19oYW5nX2Z1bmMpCi17Ci0JZG9faW50ZXJtaXgoYnVmZmVycywg ZG9fY29weV9mdW5jLCBkb19oYW5nX2Z1bmMsIDEpOwotfQotCi1zdGF0aWMgdm9pZCBkb19pbnRl cm1peF9iY3Moc3RydWN0IGJ1ZmZlcnMgKmJ1ZmZlcnMsCi0JCQkgICAgZG9fY29weSBkb19jb3B5 X2Z1bmMsCi0JCQkgICAgZG9faGFuZyBkb19oYW5nX2Z1bmMpCi17Ci0JZG9faW50ZXJtaXgoYnVm ZmVycywgZG9fY29weV9mdW5jLCBkb19oYW5nX2Z1bmMsIDApOwotfQotCi1zdGF0aWMgdm9pZCBk b19pbnRlcm1peF9ib3RoKHN0cnVjdCBidWZmZXJzICpidWZmZXJzLAotCQkJICAgICBkb19jb3B5 IGRvX2NvcHlfZnVuYywKLQkJCSAgICAgZG9faGFuZyBkb19oYW5nX2Z1bmMpCi17Ci0JZG9faW50 ZXJtaXgoYnVmZmVycywgZG9fY29weV9mdW5jLCBkb19oYW5nX2Z1bmMsIC0xKTsKLX0KLQotc3Rh dGljIHZvaWQgZG9fZWFybHlfcmVhZChzdHJ1Y3QgYnVmZmVycyAqYnVmZmVycywKLQkJCSAgZG9f Y29weSBkb19jb3B5X2Z1bmMsCi0JCQkgIGRvX2hhbmcgZG9faGFuZ19mdW5jKQotewotCXN0cnVj dCBpZ3RfaGFuZ19yaW5nIGhhbmc7Ci0JaW50IGk7Ci0KLQlnZW1fcXVpZXNjZW50X2dwdShmZCk7 Ci0JZm9yIChpID0gYnVmZmVycy0+Y291bnQ7IGktLTsgKQotCQlidWZmZXJzLT5tb2RlLT5zZXRf Ym8oYnVmZmVycy0+c3JjW2ldLCAweGRlYWRiZWVmLCB3aWR0aCwgaGVpZ2h0KTsKLQlmb3IgKGkg PSAwOyBpIDwgYnVmZmVycy0+Y291bnQ7IGkrKykKLQkJZG9fY29weV9mdW5jKGJ1ZmZlcnMtPmRz dFtpXSwgYnVmZmVycy0+c3JjW2ldKTsKLQloYW5nID0gZG9faGFuZ19mdW5jKCk7Ci0JZm9yIChp ID0gYnVmZmVycy0+Y291bnQ7IGktLTsgKQotCQlidWZmZXJzLT5tb2RlLT5jbXBfYm8oYnVmZmVy cy0+ZHN0W2ldLCAweGRlYWRiZWVmLCB3aWR0aCwgaGVpZ2h0LCBidWZmZXJzLT5kdW1teSk7Ci0J aWd0X3Bvc3RfaGFuZ19yaW5nKGZkLCBoYW5nKTsKLX0KLQotc3RhdGljIHZvaWQgZG9fcmVhZF9y ZWFkX2JjcyhzdHJ1Y3QgYnVmZmVycyAqYnVmZmVycywKLQkJCSAgICAgZG9fY29weSBkb19jb3B5 X2Z1bmMsCi0JCQkgICAgIGRvX2hhbmcgZG9faGFuZ19mdW5jKQotewotCXN0cnVjdCBpZ3RfaGFu Z19yaW5nIGhhbmc7Ci0JaW50IGk7Ci0KLQlnZW1fcXVpZXNjZW50X2dwdShmZCk7Ci0JZm9yIChp ID0gYnVmZmVycy0+Y291bnQ7IGktLTsgKQotCQlidWZmZXJzLT5tb2RlLT5zZXRfYm8oYnVmZmVy cy0+c3JjW2ldLCAweGRlYWRiZWVmIF4gaSwgd2lkdGgsIGhlaWdodCk7Ci0JZm9yIChpID0gMDsg aSA8IGJ1ZmZlcnMtPmNvdW50OyBpKyspIHsKLQkJZG9fY29weV9mdW5jKGJ1ZmZlcnMtPmRzdFtp XSwgYnVmZmVycy0+c3JjW2ldKTsKLQkJYmx0X2NvcHlfYm8oYnVmZmVycy0+c3BhcmUsIGJ1ZmZl cnMtPnNyY1tpXSk7Ci0JfQotCWNwdV9jbXBfYm8oYnVmZmVycy0+c3BhcmUsIDB4ZGVhZGJlZWZe KGJ1ZmZlcnMtPmNvdW50LTEpLCB3aWR0aCwgaGVpZ2h0LCBOVUxMKTsKLQloYW5nID0gZG9faGFu Z19mdW5jKCk7Ci0JZm9yIChpID0gYnVmZmVycy0+Y291bnQ7IGktLTsgKQotCQlidWZmZXJzLT5t b2RlLT5jbXBfYm8oYnVmZmVycy0+ZHN0W2ldLCAweGRlYWRiZWVmIF4gaSwgd2lkdGgsIGhlaWdo dCwgYnVmZmVycy0+ZHVtbXkpOwotCWlndF9wb3N0X2hhbmdfcmluZyhmZCwgaGFuZyk7Ci19Ci0K LXN0YXRpYyB2b2lkIGRvX3JlYWRfcmVhZF9yY3Moc3RydWN0IGJ1ZmZlcnMgKmJ1ZmZlcnMsCi0J CQkgICAgIGRvX2NvcHkgZG9fY29weV9mdW5jLAotCQkJICAgICBkb19oYW5nIGRvX2hhbmdfZnVu YykKLXsKLQlzdHJ1Y3QgaWd0X2hhbmdfcmluZyBoYW5nOwotCWludCBpOwotCi0JZ2VtX3F1aWVz Y2VudF9ncHUoZmQpOwotCWZvciAoaSA9IGJ1ZmZlcnMtPmNvdW50OyBpLS07ICkKLQkJYnVmZmVy cy0+bW9kZS0+c2V0X2JvKGJ1ZmZlcnMtPnNyY1tpXSwgMHhkZWFkYmVlZiBeIGksIHdpZHRoLCBo ZWlnaHQpOwotCWZvciAoaSA9IDA7IGkgPCBidWZmZXJzLT5jb3VudDsgaSsrKSB7Ci0JCWRvX2Nv cHlfZnVuYyhidWZmZXJzLT5kc3RbaV0sIGJ1ZmZlcnMtPnNyY1tpXSk7Ci0JCXJlbmRlcl9jb3B5 X2JvKGJ1ZmZlcnMtPnNwYXJlLCBidWZmZXJzLT5zcmNbaV0pOwotCX0KLQljcHVfY21wX2JvKGJ1 ZmZlcnMtPnNwYXJlLCAweGRlYWRiZWVmXihidWZmZXJzLT5jb3VudC0xKSwgd2lkdGgsIGhlaWdo dCwgTlVMTCk7Ci0JaGFuZyA9IGRvX2hhbmdfZnVuYygpOwotCWZvciAoaSA9IGJ1ZmZlcnMtPmNv dW50OyBpLS07ICkKLQkJYnVmZmVycy0+bW9kZS0+Y21wX2JvKGJ1ZmZlcnMtPmRzdFtpXSwgMHhk ZWFkYmVlZiBeIGksIHdpZHRoLCBoZWlnaHQsIGJ1ZmZlcnMtPmR1bW15KTsKLQlpZ3RfcG9zdF9o YW5nX3JpbmcoZmQsIGhhbmcpOwotfQotCi1zdGF0aWMgdm9pZCBkb19ncHVfcmVhZF9hZnRlcl93 cml0ZShzdHJ1Y3QgYnVmZmVycyAqYnVmZmVycywKLQkJCQkgICAgZG9fY29weSBkb19jb3B5X2Z1 bmMsCi0JCQkJICAgIGRvX2hhbmcgZG9faGFuZ19mdW5jKQotewotCXN0cnVjdCBpZ3RfaGFuZ19y aW5nIGhhbmc7Ci0JaW50IGk7Ci0KLQlnZW1fcXVpZXNjZW50X2dwdShmZCk7Ci0JZm9yIChpID0g YnVmZmVycy0+Y291bnQ7IGktLTsgKQotCQlidWZmZXJzLT5tb2RlLT5zZXRfYm8oYnVmZmVycy0+ c3JjW2ldLCAweGFiY2RhYmNkLCB3aWR0aCwgaGVpZ2h0KTsKLQlmb3IgKGkgPSAwOyBpIDwgYnVm ZmVycy0+Y291bnQ7IGkrKykKLQkJZG9fY29weV9mdW5jKGJ1ZmZlcnMtPmRzdFtpXSwgYnVmZmVy cy0+c3JjW2ldKTsKLQlmb3IgKGkgPSBidWZmZXJzLT5jb3VudDsgaS0tOyApCi0JCWRvX2NvcHlf ZnVuYyhidWZmZXJzLT5kdW1teSwgYnVmZmVycy0+ZHN0W2ldKTsKLQloYW5nID0gZG9faGFuZ19m dW5jKCk7Ci0JZm9yIChpID0gYnVmZmVycy0+Y291bnQ7IGktLTsgKQotCQlidWZmZXJzLT5tb2Rl LT5jbXBfYm8oYnVmZmVycy0+ZHN0W2ldLCAweGFiY2RhYmNkLCB3aWR0aCwgaGVpZ2h0LCBidWZm ZXJzLT5kdW1teSk7Ci0JaWd0X3Bvc3RfaGFuZ19yaW5nKGZkLCBoYW5nKTsKLX0KLQotdHlwZWRl ZiB2b2lkICgqZG9fdGVzdCkoc3RydWN0IGJ1ZmZlcnMgKmJ1ZmZlcnMsCi0JCQlkb19jb3B5IGRv X2NvcHlfZnVuYywKLQkJCWRvX2hhbmcgZG9faGFuZ19mdW5jKTsKLQotdHlwZWRlZiB2b2lkICgq cnVuX3dyYXApKHN0cnVjdCBidWZmZXJzICpidWZmZXJzLAotCQkJIGRvX3Rlc3QgZG9fdGVzdF9m dW5jLAotCQkJIGRvX2NvcHkgZG9fY29weV9mdW5jLAotCQkJIGRvX2hhbmcgZG9faGFuZ19mdW5j KTsKLQotc3RhdGljIHZvaWQgcnVuX3NpbmdsZShzdHJ1Y3QgYnVmZmVycyAqYnVmZmVycywKLQkJ ICAgICAgIGRvX3Rlc3QgZG9fdGVzdF9mdW5jLAotCQkgICAgICAgZG9fY29weSBkb19jb3B5X2Z1 bmMsCi0JCSAgICAgICBkb19oYW5nIGRvX2hhbmdfZnVuYykKLXsKLQlkb190ZXN0X2Z1bmMoYnVm ZmVycywgZG9fY29weV9mdW5jLCBkb19oYW5nX2Z1bmMpOwotfQotCi1zdGF0aWMgdm9pZCBydW5f aW50ZXJydXB0aWJsZShzdHJ1Y3QgYnVmZmVycyAqYnVmZmVycywKLQkJCSAgICAgIGRvX3Rlc3Qg ZG9fdGVzdF9mdW5jLAotCQkJICAgICAgZG9fY29weSBkb19jb3B5X2Z1bmMsCi0JCQkgICAgICBk b19oYW5nIGRvX2hhbmdfZnVuYykKLXsKLQlpbnQgbG9vcDsKLQotCWZvciAobG9vcCA9IDA7IGxv b3AgPCAxMDsgbG9vcCsrKQotCQlkb190ZXN0X2Z1bmMoYnVmZmVycywgZG9fY29weV9mdW5jLCBk b19oYW5nX2Z1bmMpOwotfQotCi1zdGF0aWMgdm9pZCBydW5fZm9ya2VkKHN0cnVjdCBidWZmZXJz ICpidWZmZXJzLAotCQkgICAgICAgZG9fdGVzdCBkb190ZXN0X2Z1bmMsCi0JCSAgICAgICBkb19j b3B5IGRvX2NvcHlfZnVuYywKLQkJICAgICAgIGRvX2hhbmcgZG9faGFuZ19mdW5jKQotewotCWNv bnN0IGludCBvbGRfbnVtX2J1ZmZlcnMgPSBudW1fYnVmZmVyczsKLQotCW51bV9idWZmZXJzIC89 IDE2OwotCW51bV9idWZmZXJzICs9IDI7Ci0KLQlpZ3RfZm9yayhjaGlsZCwgMTYpIHsKLQkJLyog cmVjcmVhdGUgcHJvY2VzcyBsb2NhbCB2YXJpYWJsZXMgKi8KLQkJYnVmZmVycy0+Y291bnQgPSAw OwotCQlmZCA9IGRybV9vcGVuX2RyaXZlcihEUklWRVJfSU5URUwpOwotCi0JCWJhdGNoID0gYnVm ZmVyc19pbml0KGJ1ZmZlcnMsIGJ1ZmZlcnMtPm1vZGUsIGZkKTsKLQotCQlidWZmZXJzX2NyZWF0 ZShidWZmZXJzLCBudW1fYnVmZmVycyk7Ci0JCWZvciAoaW50IGxvb3AgPSAwOyBsb29wIDwgMTA7 IGxvb3ArKykKLQkJCWRvX3Rlc3RfZnVuYyhidWZmZXJzLCBkb19jb3B5X2Z1bmMsIGRvX2hhbmdf ZnVuYyk7Ci0KLQkJYnVmZmVyc19maW5pKGJ1ZmZlcnMpOwotCX0KLQotCWlndF93YWl0Y2hpbGRy ZW4oKTsKLQotCW51bV9idWZmZXJzID0gb2xkX251bV9idWZmZXJzOwotfQotCi1zdGF0aWMgdm9p ZCBiaXQxN19yZXF1aXJlKHZvaWQpCi17Ci0Jc3RydWN0IGRybV9pOTE1X2dlbV9nZXRfdGlsaW5n MiB7Ci0JCXVpbnQzMl90IGhhbmRsZTsKLQkJdWludDMyX3QgdGlsaW5nX21vZGU7Ci0JCXVpbnQz Ml90IHN3aXp6bGVfbW9kZTsKLQkJdWludDMyX3QgcGh5c19zd2l6emxlX21vZGU7Ci0JfSBhcmc7 Ci0jZGVmaW5lIERSTV9JT0NUTF9JOTE1X0dFTV9HRVRfVElMSU5HMglEUk1fSU9XUiAoRFJNX0NP TU1BTkRfQkFTRSArIERSTV9JOTE1X0dFTV9HRVRfVElMSU5HLCBzdHJ1Y3QgZHJtX2k5MTVfZ2Vt X2dldF90aWxpbmcyKQotCi0JbWVtc2V0KCZhcmcsIDAsIHNpemVvZihhcmcpKTsKLQlhcmcuaGFu ZGxlID0gZ2VtX2NyZWF0ZShmZCwgNDA5Nik7Ci0JZ2VtX3NldF90aWxpbmcoZmQsIGFyZy5oYW5k bGUsIEk5MTVfVElMSU5HX1gsIDUxMik7Ci0KLQlkb19vcl9kaWUoZHJtSW9jdGwoZmQsIERSTV9J T0NUTF9JOTE1X0dFTV9HRVRfVElMSU5HMiwgJmFyZykpOwotCWdlbV9jbG9zZShmZCwgYXJnLmhh bmRsZSk7Ci0JaWd0X3JlcXVpcmUoYXJnLnBoeXNfc3dpenpsZV9tb2RlID09IGFyZy5zd2l6emxl X21vZGUpOwotfQotCi1zdGF0aWMgdm9pZCBjcHVfcmVxdWlyZSh2b2lkKQotewotCWJpdDE3X3Jl cXVpcmUoKTsKLX0KLQotc3RhdGljIHZvaWQgZ3R0X3JlcXVpcmUodm9pZCkKLXsKLX0KLQotc3Rh dGljIHZvaWQgd2NfcmVxdWlyZSh2b2lkKQotewotCWJpdDE3X3JlcXVpcmUoKTsKLQlnZW1fcmVx dWlyZV9tbWFwX3djKGZkKTsKLX0KLQotc3RhdGljIHZvaWQgYmNzX3JlcXVpcmUodm9pZCkKLXsK LX0KLQotc3RhdGljIHZvaWQgcmNzX3JlcXVpcmUodm9pZCkKLXsKLQlpZ3RfcmVxdWlyZShyZW5k ZXJjb3B5KTsKLX0KLQotc3RhdGljIHZvaWQgbm9fcmVxdWlyZSh2b2lkKQotewotfQotCi1zdGF0 aWMgdm9pZAotcnVuX2Jhc2ljX21vZGVzKGNvbnN0IHN0cnVjdCBhY2Nlc3NfbW9kZSAqbW9kZSwK LQkJY29uc3QgY2hhciAqc3VmZml4LAotCQlydW5fd3JhcCBydW5fd3JhcF9mdW5jKQotewotCWNv bnN0IHN0cnVjdCB7Ci0JCWNvbnN0IGNoYXIgKnByZWZpeDsKLQkJZG9fY29weSBjb3B5OwotCQl2 b2lkICgqcmVxdWlyZSkodm9pZCk7Ci0JfSBwaXBlbGluZXNbXSA9IHsKLQkJeyAiY3B1IiwgY3B1 X2NvcHlfYm8sIGNwdV9yZXF1aXJlIH0sCi0JCXsgImd0dCIsIGd0dF9jb3B5X2JvLCBndHRfcmVx dWlyZSB9LAotCQl7ICJ3YyIsIHdjX2NvcHlfYm8sIHdjX3JlcXVpcmUgfSwKLQkJeyAiYmx0Iiwg Ymx0X2NvcHlfYm8sIGJjc19yZXF1aXJlIH0sCi0JCXsgInJlbmRlciIsIHJlbmRlcl9jb3B5X2Jv LCByY3NfcmVxdWlyZSB9LAotCQl7IE5VTEwsIE5VTEwgfQotCX0sICpwc2tpcCA9IHBpcGVsaW5l cyArIDMsICpwOwotCWNvbnN0IHN0cnVjdCB7Ci0JCWNvbnN0IGNoYXIgKnN1ZmZpeDsKLQkJZG9f aGFuZyBoYW5nOwotCQl2b2lkICgqcmVxdWlyZSkodm9pZCk7Ci0JfSBoYW5nc1tdID0gewotCQl7 ICIiLCBub19oYW5nLCBub19yZXF1aXJlIH0sCi0JCXsgIi1oYW5nLWJsdCIsIGJjc19oYW5nLCBo YW5nX3JlcXVpcmUgfSwKLQkJeyAiLWhhbmctcmVuZGVyIiwgcmNzX2hhbmcsIGhhbmdfcmVxdWly ZSB9LAotCQl7IE5VTEwsIE5VTEwgfSwKLQl9LCAqaDsKLQlzdHJ1Y3QgYnVmZmVycyBidWZmZXJz OwotCi0JZm9yIChoID0gaGFuZ3M7IGgtPnN1ZmZpeDsgaCsrKSB7Ci0JCWlmICghYWxsICYmICpo LT5zdWZmaXgpCi0JCQljb250aW51ZTsKLQotCQlmb3IgKHAgPSBhbGwgPyBwaXBlbGluZXMgOiBw c2tpcDsgcC0+cHJlZml4OyBwKyspIHsKLQkJCWlndF9maXh0dXJlIHsKLQkJCQliYXRjaCA9IGJ1 ZmZlcnNfaW5pdCgmYnVmZmVycywgbW9kZSwgZmQpOwotCQkJfQotCi0JCQkvKiB0cnkgdG8gb3Zl cndyaXRlIHRoZSBzb3VyY2UgdmFsdWVzICovCi0JCQlpZ3Rfc3VidGVzdF9mKCIlcy0lcy1vdmVy d3JpdGUtc291cmNlLW9uZSVzJXMiLCBtb2RlLT5uYW1lLCBwLT5wcmVmaXgsIHN1ZmZpeCwgaC0+ c3VmZml4KSB7Ci0JCQkJaC0+cmVxdWlyZSgpOwotCQkJCXAtPnJlcXVpcmUoKTsKLQkJCQlidWZm ZXJzX2NyZWF0ZSgmYnVmZmVycywgbnVtX2J1ZmZlcnMpOwotCQkJCXJ1bl93cmFwX2Z1bmMoJmJ1 ZmZlcnMsCi0JCQkJCSAgICAgIGRvX292ZXJ3cml0ZV9zb3VyY2VfX29uZSwKLQkJCQkJICAgICAg cC0+Y29weSwgaC0+aGFuZyk7Ci0JCQl9Ci0KLQkJCWlndF9zdWJ0ZXN0X2YoIiVzLSVzLW92ZXJ3 cml0ZS1zb3VyY2UlcyVzIiwgbW9kZS0+bmFtZSwgcC0+cHJlZml4LCBzdWZmaXgsIGgtPnN1ZmZp eCkgewotCQkJCWgtPnJlcXVpcmUoKTsKLQkJCQlwLT5yZXF1aXJlKCk7Ci0JCQkJYnVmZmVyc19j cmVhdGUoJmJ1ZmZlcnMsIG51bV9idWZmZXJzKTsKLQkJCQlydW5fd3JhcF9mdW5jKCZidWZmZXJz LAotCQkJCQkgICAgICBkb19vdmVyd3JpdGVfc291cmNlLAotCQkJCQkgICAgICBwLT5jb3B5LCBo LT5oYW5nKTsKLQkJCX0KLQotCQkJaWd0X3N1YnRlc3RfZigiJXMtJXMtb3ZlcndyaXRlLXNvdXJj ZS1yZWFkLWJjcyVzJXMiLCBtb2RlLT5uYW1lLCBwLT5wcmVmaXgsIHN1ZmZpeCwgaC0+c3VmZml4 KSB7Ci0JCQkJaC0+cmVxdWlyZSgpOwotCQkJCXAtPnJlcXVpcmUoKTsKLQkJCQlidWZmZXJzX2Ny ZWF0ZSgmYnVmZmVycywgbnVtX2J1ZmZlcnMpOwotCQkJCXJ1bl93cmFwX2Z1bmMoJmJ1ZmZlcnMs Ci0JCQkJCSAgICAgIGRvX292ZXJ3cml0ZV9zb3VyY2VfcmVhZF9iY3MsCi0JCQkJCSAgICAgIHAt PmNvcHksIGgtPmhhbmcpOwotCQkJfQotCi0JCQlpZ3Rfc3VidGVzdF9mKCIlcy0lcy1vdmVyd3Jp dGUtc291cmNlLXJlYWQtcmNzJXMlcyIsIG1vZGUtPm5hbWUsIHAtPnByZWZpeCwgc3VmZml4LCBo LT5zdWZmaXgpIHsKLQkJCQloLT5yZXF1aXJlKCk7Ci0JCQkJcC0+cmVxdWlyZSgpOwotCQkJCWln dF9yZXF1aXJlKHJlbmRlcmNvcHkpOwotCQkJCWJ1ZmZlcnNfY3JlYXRlKCZidWZmZXJzLCBudW1f YnVmZmVycyk7Ci0JCQkJcnVuX3dyYXBfZnVuYygmYnVmZmVycywKLQkJCQkJICAgICAgZG9fb3Zl cndyaXRlX3NvdXJjZV9yZWFkX3JjcywKLQkJCQkJICAgICAgcC0+Y29weSwgaC0+aGFuZyk7Ci0J CQl9Ci0KLQkJCWlndF9zdWJ0ZXN0X2YoIiVzLSVzLW92ZXJ3cml0ZS1zb3VyY2UtcmV2JXMlcyIs IG1vZGUtPm5hbWUsIHAtPnByZWZpeCwgc3VmZml4LCBoLT5zdWZmaXgpIHsKLQkJCQloLT5yZXF1 aXJlKCk7Ci0JCQkJcC0+cmVxdWlyZSgpOwotCQkJCWJ1ZmZlcnNfY3JlYXRlKCZidWZmZXJzLCBu dW1fYnVmZmVycyk7Ci0JCQkJcnVuX3dyYXBfZnVuYygmYnVmZmVycywKLQkJCQkJICAgICAgZG9f b3ZlcndyaXRlX3NvdXJjZV9fcmV2LAotCQkJCQkgICAgICBwLT5jb3B5LCBoLT5oYW5nKTsKLQkJ CX0KLQotCQkJLyogdHJ5IHRvIGludGVybWl4IGNvcGllcyB3aXRoIEdQVSBjb3BpZXMqLwotCQkJ aWd0X3N1YnRlc3RfZigiJXMtJXMtaW50ZXJtaXgtcmNzJXMlcyIsIG1vZGUtPm5hbWUsIHAtPnBy ZWZpeCwgc3VmZml4LCBoLT5zdWZmaXgpIHsKLQkJCQloLT5yZXF1aXJlKCk7Ci0JCQkJcC0+cmVx dWlyZSgpOwotCQkJCWlndF9yZXF1aXJlKHJlbmRlcmNvcHkpOwotCQkJCWJ1ZmZlcnNfY3JlYXRl KCZidWZmZXJzLCBudW1fYnVmZmVycyk7Ci0JCQkJcnVuX3dyYXBfZnVuYygmYnVmZmVycywKLQkJ CQkJICAgICAgZG9faW50ZXJtaXhfcmNzLAotCQkJCQkgICAgICBwLT5jb3B5LCBoLT5oYW5nKTsK LQkJCX0KLQkJCWlndF9zdWJ0ZXN0X2YoIiVzLSVzLWludGVybWl4LWJjcyVzJXMiLCBtb2RlLT5u YW1lLCBwLT5wcmVmaXgsIHN1ZmZpeCwgaC0+c3VmZml4KSB7Ci0JCQkJaC0+cmVxdWlyZSgpOwot CQkJCXAtPnJlcXVpcmUoKTsKLQkJCQlpZ3RfcmVxdWlyZShyZW5kZXJjb3B5KTsKLQkJCQlidWZm ZXJzX2NyZWF0ZSgmYnVmZmVycywgbnVtX2J1ZmZlcnMpOwotCQkJCXJ1bl93cmFwX2Z1bmMoJmJ1 ZmZlcnMsCi0JCQkJCSAgICAgIGRvX2ludGVybWl4X2JjcywKLQkJCQkJICAgICAgcC0+Y29weSwg aC0+aGFuZyk7Ci0JCQl9Ci0JCQlpZ3Rfc3VidGVzdF9mKCIlcy0lcy1pbnRlcm1peC1ib3RoJXMl cyIsIG1vZGUtPm5hbWUsIHAtPnByZWZpeCwgc3VmZml4LCBoLT5zdWZmaXgpIHsKLQkJCQloLT5y ZXF1aXJlKCk7Ci0JCQkJcC0+cmVxdWlyZSgpOwotCQkJCWlndF9yZXF1aXJlKHJlbmRlcmNvcHkp OwotCQkJCWJ1ZmZlcnNfY3JlYXRlKCZidWZmZXJzLCBudW1fYnVmZmVycyk7Ci0JCQkJcnVuX3dy YXBfZnVuYygmYnVmZmVycywKLQkJCQkJICAgICAgZG9faW50ZXJtaXhfYm90aCwKLQkJCQkJICAg ICAgcC0+Y29weSwgaC0+aGFuZyk7Ci0JCQl9Ci0KLQkJCS8qIHRyeSB0byByZWFkIHRoZSByZXN1 bHRzIGJlZm9yZSB0aGUgY29weSBjb21wbGV0ZXMgKi8KLQkJCWlndF9zdWJ0ZXN0X2YoIiVzLSVz LWVhcmx5LXJlYWQlcyVzIiwgbW9kZS0+bmFtZSwgcC0+cHJlZml4LCBzdWZmaXgsIGgtPnN1ZmZp eCkgewotCQkJCWgtPnJlcXVpcmUoKTsKLQkJCQlwLT5yZXF1aXJlKCk7Ci0JCQkJYnVmZmVyc19j cmVhdGUoJmJ1ZmZlcnMsIG51bV9idWZmZXJzKTsKLQkJCQlydW5fd3JhcF9mdW5jKCZidWZmZXJz LAotCQkJCQkgICAgICBkb19lYXJseV9yZWFkLAotCQkJCQkgICAgICBwLT5jb3B5LCBoLT5oYW5n KTsKLQkJCX0KLQotCQkJLyogY29uY3VycmVudCByZWFkcyAqLwotCQkJaWd0X3N1YnRlc3RfZigi JXMtJXMtcmVhZC1yZWFkLWJjcyVzJXMiLCBtb2RlLT5uYW1lLCBwLT5wcmVmaXgsIHN1ZmZpeCwg aC0+c3VmZml4KSB7Ci0JCQkJaC0+cmVxdWlyZSgpOwotCQkJCXAtPnJlcXVpcmUoKTsKLQkJCQli dWZmZXJzX2NyZWF0ZSgmYnVmZmVycywgbnVtX2J1ZmZlcnMpOwotCQkJCXJ1bl93cmFwX2Z1bmMo JmJ1ZmZlcnMsCi0JCQkJCSAgICAgIGRvX3JlYWRfcmVhZF9iY3MsCi0JCQkJCSAgICAgIHAtPmNv cHksIGgtPmhhbmcpOwotCQkJfQotCQkJaWd0X3N1YnRlc3RfZigiJXMtJXMtcmVhZC1yZWFkLXJj cyVzJXMiLCBtb2RlLT5uYW1lLCBwLT5wcmVmaXgsIHN1ZmZpeCwgaC0+c3VmZml4KSB7Ci0JCQkJ aC0+cmVxdWlyZSgpOwotCQkJCXAtPnJlcXVpcmUoKTsKLQkJCQlpZ3RfcmVxdWlyZShyZW5kZXJj b3B5KTsKLQkJCQlidWZmZXJzX2NyZWF0ZSgmYnVmZmVycywgbnVtX2J1ZmZlcnMpOwotCQkJCXJ1 bl93cmFwX2Z1bmMoJmJ1ZmZlcnMsCi0JCQkJCSAgICAgIGRvX3JlYWRfcmVhZF9yY3MsCi0JCQkJ CSAgICAgIHAtPmNvcHksIGgtPmhhbmcpOwotCQkJfQotCi0JCQkvKiBhbmQgZmluYWxseSB0cnkg dG8gdHJpY2sgdGhlIGtlcm5lbCBpbnRvIGxvb3NpbmcgdGhlIHBlbmRpbmcgd3JpdGUgKi8KLQkJ CWlndF9zdWJ0ZXN0X2YoIiVzLSVzLWdwdS1yZWFkLWFmdGVyLXdyaXRlJXMlcyIsIG1vZGUtPm5h bWUsIHAtPnByZWZpeCwgc3VmZml4LCBoLT5zdWZmaXgpIHsKLQkJCQloLT5yZXF1aXJlKCk7Ci0J CQkJcC0+cmVxdWlyZSgpOwotCQkJCWJ1ZmZlcnNfY3JlYXRlKCZidWZmZXJzLCBudW1fYnVmZmVy cyk7Ci0JCQkJcnVuX3dyYXBfZnVuYygmYnVmZmVycywKLQkJCQkJICAgICAgZG9fZ3B1X3JlYWRf YWZ0ZXJfd3JpdGUsCi0JCQkJCSAgICAgIHAtPmNvcHksIGgtPmhhbmcpOwotCQkJfQotCi0JCQlp Z3RfZml4dHVyZSB7Ci0JCQkJYnVmZmVyc19maW5pKCZidWZmZXJzKTsKLQkJCX0KLQkJfQotCX0K LX0KLQotc3RhdGljIHZvaWQKLXJ1bl9tb2Rlcyhjb25zdCBzdHJ1Y3QgYWNjZXNzX21vZGUgKm1v ZGUpCi17Ci0JaWYgKGFsbCkgewotCQlydW5fYmFzaWNfbW9kZXMobW9kZSwgIiIsIHJ1bl9zaW5n bGUpOwotCi0JCWlndF9mb3JrX3NpZ25hbF9oZWxwZXIoKTsKLQkJcnVuX2Jhc2ljX21vZGVzKG1v ZGUsICItaW50ZXJydXB0aWJsZSIsIHJ1bl9pbnRlcnJ1cHRpYmxlKTsKLQkJaWd0X3N0b3Bfc2ln bmFsX2hlbHBlcigpOwotCX0KLQotCWlndF9mb3JrX3NpZ25hbF9oZWxwZXIoKTsKLQlydW5fYmFz aWNfbW9kZXMobW9kZSwgIi1mb3JrZWQiLCBydW5fZm9ya2VkKTsKLQlpZ3Rfc3RvcF9zaWduYWxf aGVscGVyKCk7Ci19Ci0KLWlndF9tYWluCi17Ci0JaW50IG1heCwgaTsKLQotCWlndF9za2lwX29u X3NpbXVsYXRpb24oKTsKLQotCWlmIChzdHJzdHIoaWd0X3Rlc3RfbmFtZSgpLCAiYWxsIikpCi0J CWFsbCA9IHRydWU7Ci0KLQlpZ3RfZml4dHVyZSB7Ci0JCWZkID0gZHJtX29wZW5fZHJpdmVyKERS SVZFUl9JTlRFTCk7Ci0JCWRldmlkID0gaW50ZWxfZ2V0X2RybV9kZXZpZChmZCk7Ci0JCWdlbiA9 IGludGVsX2dlbihkZXZpZCk7Ci0JCXJlbmRlcmNvcHkgPSBpZ3RfZ2V0X3JlbmRlcl9jb3B5ZnVu YyhkZXZpZCk7Ci0KLQkJbWF4ID0gZ2VtX2FwZXJ0dXJlX3NpemUgKGZkKSAvICgxMDI0ICogMTAy NCkgLyAyOwotCQlpZiAobnVtX2J1ZmZlcnMgPiBtYXgpCi0JCQludW1fYnVmZmVycyA9IG1heDsK LQotCQltYXggPSBpbnRlbF9nZXRfdG90YWxfcmFtX21iKCkgKiAzIC8gNDsKLQkJaWYgKG51bV9i dWZmZXJzID4gbWF4KQotCQkJbnVtX2J1ZmZlcnMgPSBtYXg7Ci0JCW51bV9idWZmZXJzIC89IDI7 Ci0JCWlndF9pbmZvKCJ1c2luZyAyeCVkIGJ1ZmZlcnMsIGVhY2ggMU1pQlxuIiwgbnVtX2J1ZmZl cnMpOwotCX0KLQotCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKGFjY2Vzc19tb2Rlcyk7IGkr KykKLQkJcnVuX21vZGVzKCZhY2Nlc3NfbW9kZXNbaV0pOwotfQotLSAKMi42LjIKCl9fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCkludGVsLWdmeCBtYWlsaW5n IGxpc3QKSW50ZWwtZ2Z4QGxpc3RzLmZyZWVkZXNrdG9wLm9yZwpodHRwOi8vbGlzdHMuZnJlZWRl c2t0b3Aub3JnL21haWxtYW4vbGlzdGluZm8vaW50ZWwtZ2Z4Cg==