From mboxrd@z Thu Jan 1 00:00:00 1970 From: Paulo Zanoni Subject: [PATCH i-g-t] tests: add pc8 Date: Mon, 29 Jul 2013 17:53:27 -0300 Message-ID: <1375131207-4162-1-git-send-email-przanoni@gmail.com> References: <1375130907-4054-1-git-send-email-przanoni@gmail.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Received: from mail-ve0-f181.google.com (mail-ve0-f181.google.com [209.85.128.181]) by gabe.freedesktop.org (Postfix) with ESMTP id EBDD8E6A46 for ; Mon, 29 Jul 2013 13:54:12 -0700 (PDT) Received: by mail-ve0-f181.google.com with SMTP id jz10so3299573veb.26 for ; Mon, 29 Jul 2013 13:54:11 -0700 (PDT) In-Reply-To: <1375130907-4054-1-git-send-email-przanoni@gmail.com> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Sender: intel-gfx-bounces+gcfxdi-intel-gfx=m.gmane.org@lists.freedesktop.org Errors-To: intel-gfx-bounces+gcfxdi-intel-gfx=m.gmane.org@lists.freedesktop.org To: intel-gfx@lists.freedesktop.org Cc: Paulo Zanoni List-Id: intel-gfx@lists.freedesktop.org RnJvbTogUGF1bG8gWmFub25pIDxwYXVsby5yLnphbm9uaUBpbnRlbC5jb20+CgpUaGlzIHRlc3Qg Y2hla2NzIG91ciBjb2RlIHRoYXQgZW5hYmxlcyBQYWNrYWdlIEM4Ky4gVGhlIGVudmlyb25tZW50 CnJlcXVpcmVtZW50cyBmb3IgdGhpcyB0ZXN0IGFyZSBxdWl0ZSBjb21wbGljYXRlZDoKICAtIFRo ZSBtYWNoaW5lIG5lZWRzIHRvIGJlIHByb3Blcmx5IGNvbmZpZ3VyZWQgdG8gcmVhY2ggUEM4KyB3 aGVuCiAgICBwb3NzaWJsZSwgd2hpY2ggbWVhbnMgYWxsIHRoZSBwb3dlciBtYW5hZ2VtZW50IHBv bGljaWVzIGFuZCBkZXZpY2UKICAgIGRyaXZlcnMgbXVzdCBiZSBwcm9wZXJseSBjb25maWd1cmVk LgogIC0gQmVmb3JlIHJ1bm5pbmcgdGhlIHRlc3QsIHRoZSBtYWNoaW5lIG5lZWRzIHRvIGhhdmUg MCBQQzgrCiAgICByZXNpZGVuY3kuIElmIHlvdSBydW4gdGhlIHRlc3QgYWZ0ZXIgdGhlIG1hY2hp bmUgYWxyZWFkeSBoYXMgUEM4KwogICAgcmVzaWRlbmN5LCBpdCBtZWFucyB5b3UnbGwgYmUgY29t cGFyaW5nIHBvc3QtUEM4KyB3aXRoIHBvc3QtUEM4KywKICAgIHNvIHlvdSB3b24ndCBiZSBhYmxl IHRvIGdldCB0aGluZ3MgbG9zdCBhZnRlciB0aGUgZmlyc3QgdGltZSB3ZQogICAgZW50ZXIgUEM4 Ky4KICAgICAgLSBUaGlzIG1lYW5zIHRoYXQgYWZ0ZXIgeW91IHJ1biB0aGUgdGVzdCBvbmNlLCB5 b3UgaGF2ZSB0bwoJcmVib290LCB1bmxlc3MgeW91IHVzZSB0aGUgIi0tc2tpcC16ZXJvLXBjOC1j aGVjayIgb3B0aW9uLCBidXQKCXlvdSByZWFsbHkgbmVlZCB0byBrbm93IHdoYXQgeW91J3JlIGRv aW5nLgogIC0gWW91IG5lZWQgYXQgbGVhc3Qgb25lIG91dHB1dCBjb25uZWN0ZWQuCgpTaWduZWQt b2ZmLWJ5OiBQYXVsbyBaYW5vbmkgPHBhdWxvLnIuemFub25pQGludGVsLmNvbT4KLS0tCiB0ZXN0 cy8uZ2l0aWdub3JlICB8ICAgMSArCiB0ZXN0cy9NYWtlZmlsZS5hbSB8ICAgMSArCiB0ZXN0cy9w YzguYyAgICAgICB8IDU1NSArKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysr KysrKysrKysrKysrKysKIDMgZmlsZXMgY2hhbmdlZCwgNTU3IGluc2VydGlvbnMoKykKIGNyZWF0 ZSBtb2RlIDEwMDY0NCB0ZXN0cy9wYzguYwoKZGlmZiAtLWdpdCBhL3Rlc3RzLy5naXRpZ25vcmUg Yi90ZXN0cy8uZ2l0aWdub3JlCmluZGV4IDQ1MWFiMmQuLmM3MGZkYjcgMTAwNjQ0Ci0tLSBhL3Rl c3RzLy5naXRpZ25vcmUKKysrIGIvdGVzdHMvLmdpdGlnbm9yZQpAQCAtOTAsNiArOTAsNyBAQCBn ZXRzdGF0cwogZ2V0dmVyc2lvbgoga21zX2ZsaXAKIGttc19yZW5kZXIKK3BjOAogcHJpbWVfbnZf YXBpCiBwcmltZV9udl9wY29weQogcHJpbWVfbnZfdGVzdApkaWZmIC0tZ2l0IGEvdGVzdHMvTWFr ZWZpbGUuYW0gYi90ZXN0cy9NYWtlZmlsZS5hbQppbmRleCBhNTljMjVmLi4zNTA3NzE2IDEwMDY0 NAotLS0gYS90ZXN0cy9NYWtlZmlsZS5hbQorKysgYi90ZXN0cy9NYWtlZmlsZS5hbQpAQCAtMiw2 ICsyLDcgQEAgaWYgQlVJTERfVEVTVFMKIG5vaW5zdF9QUk9HUkFNUyA9IFwKIAlnZW1fc3RyZXNz IFwKIAlkZGlfY29tcHV0ZV93cnBsbCBcCisJcGM4IFwKIAkkKFRFU1RTX3Byb2dzKSBcCiAJJChU RVNUU19wcm9nc19NKSBcCiAJJChIQU5HKSBcCmRpZmYgLS1naXQgYS90ZXN0cy9wYzguYyBiL3Rl c3RzL3BjOC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjdmZGZlYjUKLS0t IC9kZXYvbnVsbAorKysgYi90ZXN0cy9wYzguYwpAQCAtMCwwICsxLDU1NSBAQAorLyoKKyAqIENv cHlyaWdodCDCqSAyMDEzIEludGVsIENvcnBvcmF0aW9uCisgKgorICogUGVybWlzc2lvbiBpcyBo ZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEK KyAqIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZp bGVzICh0aGUgIlNvZnR3YXJlIiksCisgKiB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0 IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uCisgKiB0aGUgcmlnaHRz IHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwgc3VibGlj ZW5zZSwKKyAqIGFuZC9vciBzZWxsIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJt aXQgcGVyc29ucyB0byB3aG9tIHRoZQorICogU29mdHdhcmUgaXMgZnVybmlzaGVkIHRvIGRvIHNv LCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczoKKyAqCisgKiBUaGUgYWJvdmUg Y29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSAoaW5jbHVkaW5nIHRo ZSBuZXh0CisgKiBwYXJhZ3JhcGgpIHNoYWxsIGJlIGluY2x1ZGVkIGluIGFsbCBjb3BpZXMgb3Ig c3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlCisgKiBTb2Z0d2FyZS4KKyAqCisgKiBUSEUgU09G VFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwg RVhQUkVTUyBPUgorICogSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUg V0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFksCisgKiBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM QVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiAgSU4gTk8gRVZFTlQgU0hBTEwKKyAqIFRI RSBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBE QU1BR0VTIE9SIE9USEVSCisgKiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENP TlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORworICogRlJPTSwgT1VUIE9GIE9SIElO IENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5H UworICogSU4gVEhFIFNPRlRXQVJFLgorICoKKyAqIEF1dGhvcnM6CisgKiAgICBQYXVsbyBaYW5v bmkgPHBhdWxvLnIuemFub25pQGludGVsLmNvbT4KKyAqCisgKi8KKworI2luY2x1ZGUgPHN0ZGlv Lmg+CisjaW5jbHVkZSA8YXNzZXJ0Lmg+CisjaW5jbHVkZSA8c3RkaW50Lmg+CisjaW5jbHVkZSA8 c3RkYm9vbC5oPgorI2luY2x1ZGUgPHN0cmluZy5oPgorCisjaW5jbHVkZSA8dW5pc3RkLmg+Cisj aW5jbHVkZSA8c3lzL3R5cGVzLmg+CisjaW5jbHVkZSA8c3lzL3N0YXQuaD4KKyNpbmNsdWRlIDxm Y250bC5oPgorCisjaW5jbHVkZSAiZHJtLmgiCisjaW5jbHVkZSAiZHJtdGVzdC5oIgorI2luY2x1 ZGUgImludGVsX2JhdGNoYnVmZmVyLmgiCisjaW5jbHVkZSAiaW50ZWxfZ3B1X3Rvb2xzLmgiCisK KyNkZWZpbmUgTVNSX1BDOF9SRVMJMHg2MzAKKyNkZWZpbmUgTVNSX1BDOV9SRVMJMHg2MzEKKyNk ZWZpbmUgTVNSX1BDMTBfUkVTCTB4NjMyCisKKyNkZWZpbmUgTUFYX0NPTk5FQ1RPUlMJMzIKKyNk ZWZpbmUgTUFYX0VOQ09ERVJTCTMyCisjZGVmaW5lIE1BWF9DUlRDUwkxNgorCitpbnQgZHJtX2Zk OworCisvKiBTdHVmZiB1c2VkIHdoZW4gY3JlYXRpbmcgRkJzIGFuZCBtb2RlIHNldHRpbmcuICov CitzdHJ1Y3QgbW9kZV9zZXRfZGF0YSB7CisJZHJtTW9kZVJlc1B0ciByZXM7CisJZHJtTW9kZUNv bm5lY3RvclB0ciBjb25uZWN0b3JzW01BWF9DT05ORUNUT1JTXTsKKworCWRybV9pbnRlbF9idWZt Z3IgKmJ1Zm1ncjsKKwl1aW50MzJfdCBkZXZpZDsKK307CisKK2VudW0gY29tcGFyZV9zdGVwIHsK KwlTVEVQX1JFU0VULAorCVNURVBfUkVTVE9SRUQsCit9OworCisvKiBTdHVmZiB3ZSBxdWVyeSBh dCBkaWZmZXJlbnQgdGltZXMgc28gd2UgY2FuIGNvbXBhcmUuICovCitzdHJ1Y3QgY29tcGFyZV9k YXRhIHsKKwlkcm1Nb2RlUmVzUHRyIHJlczsKKwlkcm1Nb2RlRW5jb2RlclB0ciBlbmNvZGVyc1tN QVhfRU5DT0RFUlNdOworCWRybU1vZGVDb25uZWN0b3JQdHIgY29ubmVjdG9yc1tNQVhfQ09OTkVD VE9SU107CisJZHJtTW9kZUNydGNQdHIgY3J0Y3NbTUFYX0NSVENTXTsKKwlkcm1Nb2RlUHJvcGVy dHlCbG9iUHRyIGVkaWRzW01BWF9DT05ORUNUT1JTXTsKKworCXN0cnVjdCB7CisJCS8qIFdlIGtu b3cgdGhlc2UgYXJlIGxvc3QgKi8KKwkJdWludDMyX3QgYXJiX21vZGU7CisJCXVpbnQzMl90IHRp bGVjdGw7CisKKwkJLyogU3R1ZmYgdG91Y2hlZCBhdCBpbml0X2Nsb2NrX2dhdGluZywgc28gd2Ug Y2FuIG1ha2Ugc3VyZSB3ZQorCQkgKiBkb24ndCBuZWVkIHRvIGNhbGwgaXQgd2hlbiByZWluaXRp bmcuICovCisJCXVpbnQzMl90IGdlbjZfdWNnY3RsMjsKKwkJdWludDMyX3QgZ2VuN19sM2NudGxy ZWcxOworCQl1aW50MzJfdCB0cmFuc2FfY2hpY2tlbjE7CisKKwkJdWludDMyX3QgZGVpZXI7CisJ CXVpbnQzMl90IGd0aWVyOworCisJCXVpbnQzMl90IGRkaV9idWZfdHJhbnNfYV8xOworCQl1aW50 MzJfdCBkZGlfYnVmX3RyYW5zX2JfNTsKKwkJdWludDMyX3QgZGRpX2J1Zl90cmFuc19jXzEwOwor CQl1aW50MzJfdCBkZGlfYnVmX3RyYW5zX2RfMTU7CisJCXVpbnQzMl90IGRkaV9idWZfdHJhbnNf ZV8yMDsKKwl9IHJlZ3M7Cit9OworCitzdGF0aWMgdWludDY0X3QgZ2V0X3Jlc2lkZW5jeShpbnQg ZmQsIHVpbnQzMl90IHR5cGUpCit7CisJaW50IHJjOworCXVpbnQ2NF90IHJldDsKKworCXJjID0g cHJlYWQoZmQsICZyZXQsIHNpemVvZih1aW50NjRfdCksIHR5cGUpOworCWFzc2VydChyYyA9PSBz aXplb2YodWludDY0X3QpKTsKKworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBib29sIHBjOF9w bHVzX3Jlc2lkZW5jeV9pc196ZXJvKGludCBmZCkKK3sKKwl1aW50NjRfdCByZXNfcGM4LCByZXNf cGM5LCByZXNfcGMxMDsKKworCXJlc19wYzggPSBnZXRfcmVzaWRlbmN5KGZkLCBNU1JfUEM4X1JF Uyk7CisJcmVzX3BjOSA9IGdldF9yZXNpZGVuY3koZmQsIE1TUl9QQzlfUkVTKTsKKwlyZXNfcGMx MCA9IGdldF9yZXNpZGVuY3koZmQsIE1TUl9QQzEwX1JFUyk7CisKKwlpZiAocmVzX3BjOCAhPSAw IHx8IHJlc19wYzkgIT0gMCB8fCByZXNfcGMxMCAhPSAwKQorCQlyZXR1cm4gZmFsc2U7CisKKwly ZXR1cm4gdHJ1ZTsKK30KKworc3RhdGljIGJvb2wgcGM4X3BsdXNfcmVzaWRlbmN5X2NoYW5nZWQo aW50IGZkLCB1bnNpZ25lZCBpbnQgdGltZW91dF9zZWMpCit7CisJdW5zaWduZWQgaW50IGk7CisJ dWludDY0X3QgcmVzX3BjOCwgcmVzX3BjOSwgcmVzX3BjMTA7CisJaW50IHRvX3NsZWVwID0gMTAw ICogMTAwMDsKKworCXJlc19wYzggPSBnZXRfcmVzaWRlbmN5KGZkLCBNU1JfUEM4X1JFUyk7CisJ cmVzX3BjOSA9IGdldF9yZXNpZGVuY3koZmQsIE1TUl9QQzlfUkVTKTsKKwlyZXNfcGMxMCA9IGdl dF9yZXNpZGVuY3koZmQsIE1TUl9QQzEwX1JFUyk7CisKKwlmb3IgKGkgPSAwOyBpIDwgdGltZW91 dF9zZWMgKiAxMDAwICogMTAwMDsgaSArPSB0b19zbGVlcCkgeworCQlpZiAocmVzX3BjOCAhPSBn ZXRfcmVzaWRlbmN5KGZkLCBNU1JfUEM4X1JFUykgfHwKKwkJICAgIHJlc19wYzkgIT0gZ2V0X3Jl c2lkZW5jeShmZCwgTVNSX1BDOV9SRVMpIHx8CisJCSAgICByZXNfcGMxMCAhPSBnZXRfcmVzaWRl bmN5KGZkLCBNU1JfUEMxMF9SRVMpKSB7CisJCQlyZXR1cm4gdHJ1ZTsKKwkJfQorCQl1c2xlZXAo dG9fc2xlZXApOworCX0KKworCXJldHVybiBmYWxzZTsKK30KKworc3RhdGljIHZvaWQgZGlzYWJs ZV9hbGxfc2NyZWVucyhzdHJ1Y3QgbW9kZV9zZXRfZGF0YSAqZGF0YSkKK3sKKwlpbnQgaSwgcmM7 CisKKwlmb3IgKGkgPSAwOyBpIDwgZGF0YS0+cmVzLT5jb3VudF9jcnRjczsgaSsrKSB7CisJCXJj ID0gZHJtTW9kZVNldENydGMoZHJtX2ZkLCBkYXRhLT5yZXMtPmNydGNzW2ldLCAtMSwgMCwgMCwK KwkJCQkgICAgTlVMTCwgMCwgTlVMTCk7CisJCWFzc2VydChyYyA9PSAwKTsKKwl9Cit9CisKK3N0 YXRpYyB1aW50MzJfdCBjcmVhdGVfZmIoc3RydWN0IG1vZGVfc2V0X2RhdGEgKmRhdGEsIGludCB3 aWR0aCwgaW50IGhlaWdodCkKK3sKKwlzdHJ1Y3Qga21zdGVzdF9mYiBmYjsKKwljYWlyb190ICpj cjsKKwl1aW50MzJfdCBidWZmZXJfaWQ7CisKKwlidWZmZXJfaWQgPSBrbXN0ZXN0X2NyZWF0ZV9m Yihkcm1fZmQsIHdpZHRoLCBoZWlnaHQsIDMyLCAyNCwgZmFsc2UsCisJCQkJICAgICAgJmZiKTsK KwljciA9IGttc3Rlc3RfZ2V0X2NhaXJvX2N0eChkcm1fZmQsICZmYik7CisJa21zdGVzdF9wYWlu dF90ZXN0X3BhdHRlcm4oY3IsIHdpZHRoLCBoZWlnaHQpOworCXJldHVybiBidWZmZXJfaWQ7Cit9 CisKK3N0YXRpYyB2b2lkIGVuYWJsZV9vbmVfc2NyZWVuKHN0cnVjdCBtb2RlX3NldF9kYXRhICpk YXRhKQoreworCXVpbnQzMl90IGNydGNfaWQgPSAwLCBidWZmZXJfaWQgPSAwLCBjb25uZWN0b3Jf aWQgPSAwOworCWRybU1vZGVNb2RlSW5mb1B0ciBtb2RlID0gTlVMTDsKKwlpbnQgaSwgcmM7CisK Kwlmb3IgKGkgPSAwOyBpIDwgZGF0YS0+cmVzLT5jb3VudF9jb25uZWN0b3JzOyBpKyspIHsKKwkJ ZHJtTW9kZUNvbm5lY3RvclB0ciBjID0gZGF0YS0+Y29ubmVjdG9yc1tpXTsKKworCQlpZiAoYy0+ Y29ubmVjdGlvbiA9PSBEUk1fTU9ERV9DT05ORUNURUQgJiYgYy0+Y291bnRfbW9kZXMpIHsKKwkJ CWNvbm5lY3Rvcl9pZCA9IGMtPmNvbm5lY3Rvcl9pZDsKKwkJCW1vZGUgPSAmYy0+bW9kZXNbMF07 CisJCQlicmVhazsKKwkJfQorCX0KKworCWNydGNfaWQgPSBkYXRhLT5yZXMtPmNydGNzWzBdOwor CWJ1ZmZlcl9pZCA9IGNyZWF0ZV9mYihkYXRhLCBtb2RlLT5oZGlzcGxheSwgbW9kZS0+dmRpc3Bs YXkpOworCisJYXNzZXJ0KGNydGNfaWQpOworCWFzc2VydChidWZmZXJfaWQpOworCWFzc2VydChj b25uZWN0b3JfaWQpOworCWFzc2VydChtb2RlKTsKKworCXJjID0gZHJtTW9kZVNldENydGMoZHJt X2ZkLCBjcnRjX2lkLCBidWZmZXJfaWQsIDAsIDAsICZjb25uZWN0b3JfaWQsCisJCQkgICAgMSwg bW9kZSk7CisJYXNzZXJ0KHJjID09IDApOworfQorCitzdGF0aWMgdm9pZCBnZXRfY29ubmVjdG9y X2VkaWQoc3RydWN0IGNvbXBhcmVfZGF0YSAqZGF0YSwgaW50IGluZGV4KQoreworCXVuc2lnbmVk IGludCBpOworCWRybU1vZGVDb25uZWN0b3JQdHIgY29ubmVjdG9yID0gZGF0YS0+Y29ubmVjdG9y c1tpbmRleF07CisJZHJtTW9kZU9iamVjdFByb3BlcnRpZXNQdHIgcHJvcHM7CisKKwlwcm9wcyA9 IGRybU1vZGVPYmplY3RHZXRQcm9wZXJ0aWVzKGRybV9mZCwgY29ubmVjdG9yLT5jb25uZWN0b3Jf aWQsCisJCQkJCSAgIERSTV9NT0RFX09CSkVDVF9DT05ORUNUT1IpOworCisJZm9yIChpID0gMDsg aSA8IHByb3BzLT5jb3VudF9wcm9wczsgaSsrKSB7CisJCWRybU1vZGVQcm9wZXJ0eVB0ciBwcm9w ID0gZHJtTW9kZUdldFByb3BlcnR5KGRybV9mZCwKKwkJCQkJCQkgICAgIHByb3BzLT5wcm9wc1tp XSk7CisKKwkJaWYgKHN0cmNtcChwcm9wLT5uYW1lLCAiRURJRCIpID09IDApIHsKKwkJCWFzc2Vy dChwcm9wLT5mbGFncyAmIERSTV9NT0RFX1BST1BfQkxPQik7CisJCQlhc3NlcnQocHJvcC0+Y291 bnRfYmxvYnMgPT0gMCk7CisJCQlkYXRhLT5lZGlkc1tpbmRleF0gPSBkcm1Nb2RlR2V0UHJvcGVy dHlCbG9iKGRybV9mZCwKKwkJCQkJCQlwcm9wcy0+cHJvcF92YWx1ZXNbaV0pOworCQl9CisKKwkJ ZHJtTW9kZUZyZWVQcm9wZXJ0eShwcm9wKTsKKwl9CisKKwlkcm1Nb2RlRnJlZU9iamVjdFByb3Bl cnRpZXMocHJvcHMpOworfQorCitzdGF0aWMgdm9pZCBpbml0X21vZGVfc2V0X2RhdGEoc3RydWN0 IG1vZGVfc2V0X2RhdGEgKmRhdGEpCit7CisJaW50IGk7CisKKwlkYXRhLT5yZXMgPSBkcm1Nb2Rl R2V0UmVzb3VyY2VzKGRybV9mZCk7CisJYXNzZXJ0KGRhdGEtPnJlcyk7CisJYXNzZXJ0KGRhdGEt PnJlcy0+Y291bnRfY29ubmVjdG9ycyA8PSBNQVhfQ09OTkVDVE9SUyk7CisKKwlmb3IgKGkgPSAw OyBpIDwgZGF0YS0+cmVzLT5jb3VudF9jb25uZWN0b3JzOyBpKyspCisJCWRhdGEtPmNvbm5lY3Rv cnNbaV0gPSBkcm1Nb2RlR2V0Q29ubmVjdG9yKGRybV9mZCwKKwkJCQkJCWRhdGEtPnJlcy0+Y29u bmVjdG9yc1tpXSk7CisKKwlkYXRhLT5idWZtZ3IgPSBkcm1faW50ZWxfYnVmbWdyX2dlbV9pbml0 KGRybV9mZCwgNDA5Nik7CisJZGF0YS0+ZGV2aWQgPSBpbnRlbF9nZXRfZHJtX2RldmlkKGRybV9m ZCk7CisKKwlkb19vcl9kaWUoZHJtdGVzdF9zZXRfdnRfZ3JhcGhpY3NfbW9kZSgpKTsKKwlkcm1f aW50ZWxfYnVmbWdyX2dlbV9lbmFibGVfcmV1c2UoZGF0YS0+YnVmbWdyKTsKK30KKworc3RhdGlj IHZvaWQgZmluaV9tb2RlX3NldF9kYXRhKHN0cnVjdCBtb2RlX3NldF9kYXRhICpkYXRhKQorewor CWludCBpOworCisJZHJtX2ludGVsX2J1Zm1ncl9kZXN0cm95KGRhdGEtPmJ1Zm1ncik7CisKKwlm b3IgKGkgPSAwOyBpIDwgZGF0YS0+cmVzLT5jb3VudF9jb25uZWN0b3JzOyBpKyspCisJCWRybU1v ZGVGcmVlQ29ubmVjdG9yKGRhdGEtPmNvbm5lY3RvcnNbaV0pOworCWRybU1vZGVGcmVlUmVzb3Vy Y2VzKGRhdGEtPnJlcyk7Cit9CisKK3N0YXRpYyB2b2lkIGdldF9kcm1faW5mbyhzdHJ1Y3QgY29t cGFyZV9kYXRhICpkYXRhKQoreworCWludCBpOworCisJZGF0YS0+cmVzID0gZHJtTW9kZUdldFJl c291cmNlcyhkcm1fZmQpOworCWFzc2VydChkYXRhLT5yZXMpOworCisJYXNzZXJ0KGRhdGEtPnJl cy0+Y291bnRfY29ubmVjdG9ycyA8PSBNQVhfQ09OTkVDVE9SUyk7CisJYXNzZXJ0KGRhdGEtPnJl cy0+Y291bnRfZW5jb2RlcnMgPD0gTUFYX0VOQ09ERVJTKTsKKwlhc3NlcnQoZGF0YS0+cmVzLT5j b3VudF9jcnRjcyA8PSBNQVhfQ1JUQ1MpOworCisJZm9yIChpID0gMDsgaSA8IGRhdGEtPnJlcy0+ Y291bnRfY29ubmVjdG9yczsgaSsrKSB7CisJCWRhdGEtPmNvbm5lY3RvcnNbaV0gPSBkcm1Nb2Rl R2V0Q29ubmVjdG9yKGRybV9mZCwKKwkJCQkJCWRhdGEtPnJlcy0+Y29ubmVjdG9yc1tpXSk7CisJ CWdldF9jb25uZWN0b3JfZWRpZChkYXRhLCBpKTsKKwl9CisJZm9yIChpID0gMDsgaSA8IGRhdGEt PnJlcy0+Y291bnRfZW5jb2RlcnM7IGkrKykKKwkJZGF0YS0+ZW5jb2RlcnNbaV0gPSBkcm1Nb2Rl R2V0RW5jb2Rlcihkcm1fZmQsCisJCQkJCQlkYXRhLT5yZXMtPmVuY29kZXJzW2ldKTsKKwlmb3Ig KGkgPSAwOyBpIDwgZGF0YS0+cmVzLT5jb3VudF9jcnRjczsgaSsrKQorCQlkYXRhLT5jcnRjc1tp XSA9IGRybU1vZGVHZXRDcnRjKGRybV9mZCwgZGF0YS0+cmVzLT5jcnRjc1tpXSk7CisKKwlpbnRl bF9yZWdpc3Rlcl9hY2Nlc3NfaW5pdChpbnRlbF9nZXRfcGNpX2RldmljZSgpLCAwKTsKKwlkYXRh LT5yZWdzLmFyYl9tb2RlID0gSU5SRUcoMHg0MDMwKTsKKwlkYXRhLT5yZWdzLnRpbGVjdGwgPSBJ TlJFRygweDEwMTAwMCk7CisJZGF0YS0+cmVncy5nZW42X3VjZ2N0bDIgPSBJTlJFRygweDk0MDQp OworCWRhdGEtPnJlZ3MuZ2VuN19sM2NudGxyZWcxID0gSU5SRUcoMHhCMEMxKTsKKwlkYXRhLT5y ZWdzLnRyYW5zYV9jaGlja2VuMSA9IElOUkVHKDB4RjAwNjApOworCWRhdGEtPnJlZ3MuZGVpZXIg PSBJTlJFRygweDQ0MDBDKTsKKwlkYXRhLT5yZWdzLmd0aWVyID0gSU5SRUcoMHg0NDAxQyk7CisJ ZGF0YS0+cmVncy5kZGlfYnVmX3RyYW5zX2FfMSA9IElOUkVHKDB4NjRFMDApOworCWRhdGEtPnJl Z3MuZGRpX2J1Zl90cmFuc19iXzUgPSBJTlJFRygweDY0RTcwKTsKKwlkYXRhLT5yZWdzLmRkaV9i dWZfdHJhbnNfY18xMCA9IElOUkVHKDB4NjRFRTApOworCWRhdGEtPnJlZ3MuZGRpX2J1Zl90cmFu c19kXzE1ID0gSU5SRUcoMHg2NEY1OCk7CisJZGF0YS0+cmVncy5kZGlfYnVmX3RyYW5zX2VfMjAg PSBJTlJFRygweDY0RkNDKTsKKwlpbnRlbF9yZWdpc3Rlcl9hY2Nlc3NfZmluaSgpOworfQorCitz dGF0aWMgdm9pZCBmcmVlX2RybV9pbmZvKHN0cnVjdCBjb21wYXJlX2RhdGEgKmRhdGEpCit7CisJ aW50IGk7CisKKwlmb3IgKGkgPSAwOyBpIDwgZGF0YS0+cmVzLT5jb3VudF9jb25uZWN0b3JzOyBp KyspIHsKKwkJZHJtTW9kZUZyZWVDb25uZWN0b3IoZGF0YS0+Y29ubmVjdG9yc1tpXSk7CisJCWRy bU1vZGVGcmVlUHJvcGVydHlCbG9iKGRhdGEtPmVkaWRzW2ldKTsKKwl9CisJZm9yIChpID0gMDsg aSA8IGRhdGEtPnJlcy0+Y291bnRfZW5jb2RlcnM7IGkrKykKKwkJZHJtTW9kZUZyZWVFbmNvZGVy KGRhdGEtPmVuY29kZXJzW2ldKTsKKwlmb3IgKGkgPSAwOyBpIDwgZGF0YS0+cmVzLT5jb3VudF9j cnRjczsgaSsrKQorCQlkcm1Nb2RlRnJlZUNydGMoZGF0YS0+Y3J0Y3NbaV0pOworCisJZHJtTW9k ZUZyZWVSZXNvdXJjZXMoZGF0YS0+cmVzKTsKK30KKworI2RlZmluZSBDT01QQVJFKGQxLCBkMiwg ZGF0YSkgYXNzZXJ0KGQxLT5kYXRhID09IGQyLT5kYXRhKQorI2RlZmluZSBDT01QQVJFX0FSUkFZ KGQxLCBkMiwgc2l6ZSwgZGF0YSkgZG8geyBcCisJZm9yIChpID0gMDsgaSA8IHNpemU7IGkrKykg XAorCQlhc3NlcnQoZDEtPmRhdGFbaV0gPT0gZDItPmRhdGFbaV0pOyBcCit9IHdoaWxlICgwKQor CitzdGF0aWMgdm9pZCBhc3NlcnRfZHJtX3Jlc291cmNlc19lcXVhbChzdHJ1Y3QgY29tcGFyZV9k YXRhICpkMSwKKwkJCQkgICAgICAgc3RydWN0IGNvbXBhcmVfZGF0YSAqZDIpCit7CisJQ09NUEFS RShkMSwgZDIsIHJlcy0+Y291bnRfY29ubmVjdG9ycyk7CisJQ09NUEFSRShkMSwgZDIsIHJlcy0+ Y291bnRfZW5jb2RlcnMpOworCUNPTVBBUkUoZDEsIGQyLCByZXMtPmNvdW50X2NydGNzKTsKKwlD T01QQVJFKGQxLCBkMiwgcmVzLT5taW5fd2lkdGgpOworCUNPTVBBUkUoZDEsIGQyLCByZXMtPm1h eF93aWR0aCk7CisJQ09NUEFSRShkMSwgZDIsIHJlcy0+bWluX2hlaWdodCk7CisJQ09NUEFSRShk MSwgZDIsIHJlcy0+bWF4X2hlaWdodCk7Cit9CisKK3N0YXRpYyB2b2lkIGFzc2VydF9tb2Rlc19l cXVhbChkcm1Nb2RlTW9kZUluZm9QdHIgbTEsIGRybU1vZGVNb2RlSW5mb1B0ciBtMikKK3sKKwlD T01QQVJFKG0xLCBtMiwgY2xvY2spOworCUNPTVBBUkUobTEsIG0yLCBoZGlzcGxheSk7CisJQ09N UEFSRShtMSwgbTIsIGhzeW5jX3N0YXJ0KTsKKwlDT01QQVJFKG0xLCBtMiwgaHN5bmNfZW5kKTsK KwlDT01QQVJFKG0xLCBtMiwgaHRvdGFsKTsKKwlDT01QQVJFKG0xLCBtMiwgaHNrZXcpOworCUNP TVBBUkUobTEsIG0yLCB2ZGlzcGxheSk7CisJQ09NUEFSRShtMSwgbTIsIHZzeW5jX3N0YXJ0KTsK KwlDT01QQVJFKG0xLCBtMiwgdnN5bmNfZW5kKTsKKwlDT01QQVJFKG0xLCBtMiwgdnRvdGFsKTsK KwlDT01QQVJFKG0xLCBtMiwgdnNjYW4pOworCUNPTVBBUkUobTEsIG0yLCB2cmVmcmVzaCk7CisJ Q09NUEFSRShtMSwgbTIsIGZsYWdzKTsKKwlDT01QQVJFKG0xLCBtMiwgdHlwZSk7CisJYXNzZXJ0 KHN0cmNtcChtMS0+bmFtZSwgbTItPm5hbWUpID09IDApOworfQorCitzdGF0aWMgdm9pZCBhc3Nl cnRfZHJtX2Nvbm5lY3RvcnNfZXF1YWwoZHJtTW9kZUNvbm5lY3RvclB0ciBjMSwKKwkJCQkJZHJt TW9kZUNvbm5lY3RvclB0ciBjMikKK3sKKwlpbnQgaTsKKworCUNPTVBBUkUoYzEsIGMyLCBjb25u ZWN0b3JfaWQpOworCUNPTVBBUkUoYzEsIGMyLCBjb25uZWN0b3JfdHlwZSk7CisJQ09NUEFSRShj MSwgYzIsIGNvbm5lY3Rvcl90eXBlX2lkKTsKKwlDT01QQVJFKGMxLCBjMiwgbW1XaWR0aCk7CisJ Q09NUEFSRShjMSwgYzIsIG1tSGVpZ2h0KTsKKwlDT01QQVJFKGMxLCBjMiwgY291bnRfbW9kZXMp OworCUNPTVBBUkUoYzEsIGMyLCBjb3VudF9wcm9wcyk7CisJQ09NUEFSRShjMSwgYzIsIGNvdW50 X2VuY29kZXJzKTsKKwlDT01QQVJFX0FSUkFZKGMxLCBjMiwgYzEtPmNvdW50X3Byb3BzLCBwcm9w cyk7CisJQ09NUEFSRV9BUlJBWShjMSwgYzIsIGMxLT5jb3VudF9lbmNvZGVycywgZW5jb2RlcnMp OworCisJZm9yIChpID0gMDsgaSA8IGMxLT5jb3VudF9tb2RlczsgaSsrKQorCQlhc3NlcnRfbW9k ZXNfZXF1YWwoJmMxLT5tb2Rlc1swXSwgJmMyLT5tb2Rlc1swXSk7Cit9CisKK3N0YXRpYyB2b2lk IGFzc2VydF9kcm1fZW5jb2RlcnNfZXF1YWwoZHJtTW9kZUVuY29kZXJQdHIgZTEsCisJCQkJICAg ICAgZHJtTW9kZUVuY29kZXJQdHIgZTIpCit7CisJQ09NUEFSRShlMSwgZTIsIGVuY29kZXJfaWQp OworCUNPTVBBUkUoZTEsIGUyLCBlbmNvZGVyX3R5cGUpOworCUNPTVBBUkUoZTEsIGUyLCBwb3Nz aWJsZV9jcnRjcyk7CisJQ09NUEFSRShlMSwgZTIsIHBvc3NpYmxlX2Nsb25lcyk7Cit9CisKK3N0 YXRpYyB2b2lkIGFzc2VydF9kcm1fY3J0Y3NfZXF1YWwoZHJtTW9kZUNydGNQdHIgYzEsIGRybU1v ZGVDcnRjUHRyIGMyKQoreworCUNPTVBBUkUoYzEsIGMyLCBjcnRjX2lkKTsKK30KKworc3RhdGlj IHZvaWQgYXNzZXJ0X2RybV9lZGlkc19lcXVhbChkcm1Nb2RlUHJvcGVydHlCbG9iUHRyIGUxLAor CQkJCSAgIGRybU1vZGVQcm9wZXJ0eUJsb2JQdHIgZTIpCit7CisJaWYgKCFlMSAmJiAhZTIpCisJ CXJldHVybjsKKwlhc3NlcnQoZTEgJiYgZTIpOworCisJQ09NUEFSRShlMSwgZTIsIGlkKTsKKwlD T01QQVJFKGUxLCBlMiwgbGVuZ3RoKTsKKworCWFzc2VydChtZW1jbXAoZTEtPmRhdGEsIGUyLT5k YXRhLCBlMS0+bGVuZ3RoKSA9PSAwKTsKK30KKworc3RhdGljIHZvaWQgY29tcGFyZV9yZWdpc3Rl cnMoc3RydWN0IGNvbXBhcmVfZGF0YSAqZDEsIHN0cnVjdCBjb21wYXJlX2RhdGEgKmQyLAorCQkJ ICAgICAgZW51bSBjb21wYXJlX3N0ZXAgc3RlcCkKK3sKKwkvKiBUaGluZ3MgdGhhdCBzaG91bGRu J3QgY2hhbmdlIGF0IGFsbC4gKi8KKwlDT01QQVJFKGQxLCBkMiwgcmVncy5nZW42X3VjZ2N0bDIp OworCUNPTVBBUkUoZDEsIGQyLCByZWdzLmdlbjdfbDNjbnRscmVnMSk7CisJQ09NUEFSRShkMSwg ZDIsIHJlZ3MudHJhbnNhX2NoaWNrZW4xKTsKKwlDT01QQVJFKGQxLCBkMiwgcmVncy5hcmJfbW9k ZSk7CisJQ09NUEFSRShkMSwgZDIsIHJlZ3MudGlsZWN0bCk7CisJYXNzZXJ0KGQxLT5yZWdzLmRl aWVyICYgKDEgPDwgMzEpKTsKKwlhc3NlcnQoZDItPnJlZ3MuZGVpZXIgJiAoMSA8PCAzMSkpOwor CisJc3dpdGNoIChzdGVwKSB7CisJY2FzZSBTVEVQX1JFU0VUOgorCQlhc3NlcnQoZDItPnJlZ3Mu Z3RpZXIgPT0gMCk7CisJCWFzc2VydChkMi0+cmVncy5kZGlfYnVmX3RyYW5zX2FfMSA9PSAwKTsK KwkJYXNzZXJ0KGQyLT5yZWdzLmRkaV9idWZfdHJhbnNfYl81ID09IDApOworCQlhc3NlcnQoZDIt PnJlZ3MuZGRpX2J1Zl90cmFuc19jXzEwID09IDApOworCQlhc3NlcnQoZDItPnJlZ3MuZGRpX2J1 Zl90cmFuc19kXzE1ID09IDApOworCQlhc3NlcnQoZDItPnJlZ3MuZGRpX2J1Zl90cmFuc19lXzIw ID09IDApOworCQlicmVhazsKKwljYXNlIFNURVBfUkVTVE9SRUQ6CisJCUNPTVBBUkUoZDEsIGQy LCByZWdzLmFyYl9tb2RlKTsKKwkJQ09NUEFSRShkMSwgZDIsIHJlZ3MudGlsZWN0bCk7CisJCUNP TVBBUkUoZDEsIGQyLCByZWdzLmd0aWVyKTsKKwkJQ09NUEFSRShkMSwgZDIsIHJlZ3MuZGRpX2J1 Zl90cmFuc19hXzEpOworCQlDT01QQVJFKGQxLCBkMiwgcmVncy5kZGlfYnVmX3RyYW5zX2JfNSk7 CisJCUNPTVBBUkUoZDEsIGQyLCByZWdzLmRkaV9idWZfdHJhbnNfY18xMCk7CisJCUNPTVBBUkUo ZDEsIGQyLCByZWdzLmRkaV9idWZfdHJhbnNfZF8xNSk7CisJCUNPTVBBUkUoZDEsIGQyLCByZWdz LmRkaV9idWZfdHJhbnNfZV8yMCk7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCWFzc2VydCgwKTsK Kwl9Cit9CisKK3N0YXRpYyB2b2lkIGFzc2VydF9kcm1faW5mb3NfZXF1YWwoc3RydWN0IGNvbXBh cmVfZGF0YSAqZDEsCisJCQkJICAgc3RydWN0IGNvbXBhcmVfZGF0YSAqZDIsCisJCQkJICAgZW51 bSBjb21wYXJlX3N0ZXAgc3RlcCkKK3sKKwlpbnQgaTsKKworCWFzc2VydF9kcm1fcmVzb3VyY2Vz X2VxdWFsKGQxLCBkMik7CisKKwlmb3IgKGkgPSAwOyBpIDwgZDEtPnJlcy0+Y291bnRfY29ubmVj dG9yczsgaSsrKSB7CisJCWFzc2VydF9kcm1fY29ubmVjdG9yc19lcXVhbChkMS0+Y29ubmVjdG9y c1tpXSwKKwkJCQkJICAgIGQyLT5jb25uZWN0b3JzW2ldKTsKKwkJYXNzZXJ0X2RybV9lZGlkc19l cXVhbChkMS0+ZWRpZHNbaV0sIGQyLT5lZGlkc1tpXSk7CisJfQorCisJZm9yIChpID0gMDsgaSA8 IGQxLT5yZXMtPmNvdW50X2VuY29kZXJzOyBpKyspCisJCWFzc2VydF9kcm1fZW5jb2RlcnNfZXF1 YWwoZDEtPmVuY29kZXJzW2ldLCBkMi0+ZW5jb2RlcnNbaV0pOworCisJZm9yIChpID0gMDsgaSA8 IGQxLT5yZXMtPmNvdW50X2NydGNzOyBpKyspCisJCWFzc2VydF9kcm1fY3J0Y3NfZXF1YWwoZDEt PmNydGNzW2ldLCBkMi0+Y3J0Y3NbaV0pOworCisJY29tcGFyZV9yZWdpc3RlcnMoZDEsIGQyLCBz dGVwKTsKK30KKworI2RlZmluZSBCVUZfU0laRQkoOCA8PCAyMCkKKworLyogdG8gYXZvaWQgc3R1 cGlkIGRlcGVuY2llcyBvbiBsaWJkcm0sIGNvcHkmcGFzdGUgKi8KK3N0cnVjdCBsb2NhbF9kcm1f aTkxNV9nZW1fd2FpdCB7CisJLyoqIEhhbmRsZSBvZiBCTyB3ZSBzaGFsbCB3YWl0IG9uICovCisJ X191MzIgYm9faGFuZGxlOworCV9fdTMyIGZsYWdzOworCS8qKiBOdW1iZXIgb2YgbmFub3NlY29u ZHMgdG8gd2FpdCwgUmV0dXJucyB0aW1lIHJlbWFpbmluZy4gKi8KKwlfX3U2NCB0aW1lb3V0X25z OworfTsKKyNkZWZpbmUgV0FJVF9JT0NUTCBEUk1fSU9XUihEUk1fQ09NTUFORF9CQVNFICsgMHgy Yywgc3RydWN0IGxvY2FsX2RybV9pOTE1X2dlbV93YWl0KQorCitzdGF0aWMgaW50IGdlbV9ib193 YWl0X3RpbWVvdXQoaW50IGZkLCB1aW50MzJfdCBoYW5kbGUsIHVpbnQ2NF90ICp0aW1lb3V0X25z KQoreworCXN0cnVjdCBsb2NhbF9kcm1faTkxNV9nZW1fd2FpdCB3YWl0OworCWludCByZXQ7CisK Kwlhc3NlcnQodGltZW91dF9ucyk7CisKKwl3YWl0LmJvX2hhbmRsZSA9IGhhbmRsZTsKKwl3YWl0 LnRpbWVvdXRfbnMgPSAqdGltZW91dF9uczsKKwl3YWl0LmZsYWdzID0gMDsKKwlyZXQgPSBkcm1J b2N0bChmZCwgV0FJVF9JT0NUTCwgJndhaXQpOworCSp0aW1lb3V0X25zID0gd2FpdC50aW1lb3V0 X25zOworCisJcmV0dXJuIHJldCA/IC1lcnJubyA6IDA7Cit9CisKK3N0YXRpYyB2b2lkIHRlc3Rf YmF0Y2goc3RydWN0IG1vZGVfc2V0X2RhdGEgKmRhdGEpCit7CisJdWludDY0X3QgdGltZW91dCA9 IDEwMDAgKiAxMDAwICogMTAwMCAqIDI7CisJZHJtX2ludGVsX2JvICpkc3Q7CisKKwlkc3QgPSBk cm1faW50ZWxfYm9fYWxsb2MoZGF0YS0+YnVmbWdyLCAiZHN0IiwgQlVGX1NJWkUsIDQwOTYpOwor CWlmIChnZW1fYm9fd2FpdF90aW1lb3V0KGRybV9mZCwgZHN0LT5oYW5kbGUsICZ0aW1lb3V0KSA9 PSAtRUlOVkFMKQorCQlwcmludGYoIktlcm5lbCBkb2Vzbid0IHN1cHBvcnQgd2FpdF90aW1lb3V0 XG4iKTsKK30KKworaW50IG1haW4oaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSkKK3sKKwlzdHJ1Y3Qg bW9kZV9zZXRfZGF0YSBtc19kYXRhOworCXN0cnVjdCBjb21wYXJlX2RhdGEgcHJlX3BjOCwgZHVy aW5nX3BjOCwgcG9zdF9wYzg7CisJaW50IG1zcl9mZDsKKwlib29sIHNraXBfemVyb19wYzhfY2hl Y2sgPSBmYWxzZTsKKworCWlmIChhcmdjID4gMSkgeworCQkvKiBXaXRoIHRoaXMgb3B0aW9uIHdl IGNhbiB0ZXN0L2RlYnVnL2RldmVsb3AgdGhlIHRvb2wgd2l0aG91dAorCQkgKiBuZWVkaW5nIHRv IHJlYm9vdCBldmVyeSB0aW1lLiAqLworCQlpZiAoc3RyY21wKGFyZ3ZbMV0sICItLXNraXAtemVy by1wYzgtY2hlY2siKSA9PSAwKQorCQkJc2tpcF96ZXJvX3BjOF9jaGVjayA9IHRydWU7CisJfQor CisJZHJtX2ZkID0gZHJtX29wZW5fYW55KCk7CisJYXNzZXJ0KGRybV9mZCA+IDApOworCisJaW5p dF9tb2RlX3NldF9kYXRhKCZtc19kYXRhKTsKKworCWlmICghSVNfSEFTV0VMTChtc19kYXRhLmRl dmlkKSkgeworCQlwcmludGYoIlBDOCsgZmVhdHVyZSBvbmx5IHN1cHBvcnRlZCBvbiBIYXN3ZWxs LlxuIik7CisJCXJldHVybiA3NzsKKwl9CisKKwltc3JfZmQgPSBvcGVuKCIvZGV2L2NwdS8wL21z ciIsIE9fUkRPTkxZKTsKKwlhc3NlcnQobXNyX2ZkICE9IC0xKTsKKworCS8qIE1ha2Ugc3VyZSB0 aGUgbWFjaGluZSBzdGlsbCBkaWRuJ3QgZW50ZXIgUEM4Kywgb3RoZXJ3aXNlIHdlIHdvbid0IGJl CisJICogYWJsZSB0byByZWFsbHkgY29tcGFyZSBwcmUtUEM4KyB3aXRoIHBvc3QtUEM4Ky4gKi8K KwlwcmludGYoIlByZS1QQzgrXG4iKTsKKwlhc3NlcnQoc2tpcF96ZXJvX3BjOF9jaGVjayB8fCBw YzhfcGx1c19yZXNpZGVuY3lfaXNfemVybyhtc3JfZmQpKTsKKwlnZXRfZHJtX2luZm8oJnByZV9w YzgpOworCXRlc3RfYmF0Y2goJm1zX2RhdGEpOworCWFzc2VydChza2lwX3plcm9fcGM4X2NoZWNr IHx8IHBjOF9wbHVzX3Jlc2lkZW5jeV9pc196ZXJvKG1zcl9mZCkpOworCisJcHJpbnRmKCJQQzgr XG4iKTsKKwlkaXNhYmxlX2FsbF9zY3JlZW5zKCZtc19kYXRhKTsKKwlzbGVlcCgxKTsKKworCWFz c2VydChwYzhfcGx1c19yZXNpZGVuY3lfY2hhbmdlZChtc3JfZmQsIDEwKSk7CisJZ2V0X2RybV9p bmZvKCZkdXJpbmdfcGM4KTsKKwl0ZXN0X2JhdGNoKCZtc19kYXRhKTsKKwlhc3NlcnQocGM4X3Bs dXNfcmVzaWRlbmN5X2NoYW5nZWQobXNyX2ZkLCAxMCkpOworCisJYXNzZXJ0X2RybV9pbmZvc19l cXVhbCgmcHJlX3BjOCwgJmR1cmluZ19wYzgsIFNURVBfUkVTRVQpOworCisJcHJpbnRmKCJQb3N0 LVBDOCtcbiIpOworCWVuYWJsZV9vbmVfc2NyZWVuKCZtc19kYXRhKTsKKwlzbGVlcCgxKTsKKwor CWFzc2VydCghcGM4X3BsdXNfcmVzaWRlbmN5X2NoYW5nZWQobXNyX2ZkLCA1KSk7CisJZ2V0X2Ry bV9pbmZvKCZwb3N0X3BjOCk7CisJdGVzdF9iYXRjaCgmbXNfZGF0YSk7CisJYXNzZXJ0KCFwYzhf cGx1c19yZXNpZGVuY3lfY2hhbmdlZChtc3JfZmQsIDUpKTsKKworCWFzc2VydF9kcm1faW5mb3Nf ZXF1YWwoJnByZV9wYzgsICZwb3N0X3BjOCwgU1RFUF9SRVNUT1JFRCk7CisKKwlmcmVlX2RybV9p bmZvKCZwcmVfcGM4KTsKKwlmcmVlX2RybV9pbmZvKCZkdXJpbmdfcGM4KTsKKwlmcmVlX2RybV9p bmZvKCZwb3N0X3BjOCk7CisJZmluaV9tb2RlX3NldF9kYXRhKCZtc19kYXRhKTsKKwljbG9zZSht c3JfZmQpOworCWRybUNsb3NlKGRybV9mZCk7CisKKwlwcmludGYoIkRvbmUhXG4iKTsKKwlyZXR1 cm4gMDsKK30KLS0gCjEuOC4xLjIKCl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fCkludGVsLWdmeCBtYWlsaW5nIGxpc3QKSW50ZWwtZ2Z4QGxpc3RzLmZyZWVk ZXNrdG9wLm9yZwpodHRwOi8vbGlzdHMuZnJlZWRlc2t0b3Aub3JnL21haWxtYW4vbGlzdGluZm8v aW50ZWwtZ2Z4Cg==