From mboxrd@z Thu Jan 1 00:00:00 1970 From: Tvrtko Ursulin Subject: [PATCH v2 i-g-t 5/5] tests/perf_pmu: Tests for i915 PMU API Date: Wed, 20 Sep 2017 17:12:48 +0100 Message-ID: <20170920161248.20629-1-tvrtko.ursulin@linux.intel.com> References: <20170918113840.2684-6-tvrtko.ursulin@linux.intel.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Received: from mail-wr0-x243.google.com (mail-wr0-x243.google.com [IPv6:2a00:1450:400c:c0c::243]) by gabe.freedesktop.org (Postfix) with ESMTPS id 2662C6E775 for ; Wed, 20 Sep 2017 16:12:58 +0000 (UTC) Received: by mail-wr0-x243.google.com with SMTP id g50so1767858wra.3 for ; Wed, 20 Sep 2017 09:12:57 -0700 (PDT) In-Reply-To: <20170918113840.2684-6-tvrtko.ursulin@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 RnJvbTogVHZydGtvIFVyc3VsaW4gPHR2cnRrby51cnN1bGluQGludGVsLmNvbT4KCkEgYnVuY2gg b2YgdGVzdHMgZm9yIHRoZSBuZXcgaTkxNSBQTVUgZmVhdHVyZS4KClBhcnRzIG9mIHRoZSBjb2Rl IHdlcmUgaW5pdGlhbHkgc2tldGNoZWQgYnkgRG1pdHJ5IFJvZ296aGtpbi4KCnYyOiAoTW9zdCBz dWdnZXN0aW9ucyBieSBDaHJpcyBXaWxzb24pCiAqIEFkZCBuZXcgY2xhc3MvaW5zdGFuY2UgYmFz ZWQgZW5naW5lIGxpc3QuCiAqIEFkZCBnZW1faGFzX2VuZ2luZS9nZW1fcmVxdWlyZV9lbmdpbmUg dG8gd29yayB3aXRoIGNsYXNzL2luc3RhbmNlLgogKiBVc2UgdGhlIGFib3ZlIHR3byB0aHJvdWdo b3V0IHRoZSB0ZXN0LgogKiBTaG9ydGVuIHRlc3RzIHRvIDEwMG1zIGJ1c3kgYmF0Y2hlcywgc2Vl bXMgZW5vdWdoLgogKiBBZGQgcXVldWVkIGNvdW50ZXIgc2FuaXR5IGNoZWNrcy4KICogVXNlIGln dF9uc2VjX2VsYXBzZWQuCiAqIFNraXAgb24gcGVyZiAtRU5PREVWIGluIHNvbWUgdGVzdHMgaW5z dGVhZCBvZiBlbWJlZGRpbmcga25vd2xlZGdlIGxvY2FsbHkuCiAqIEZpeCBtdWx0aSBvcmRlcmlu ZyBmb3IgYnVzeSBhY2NvdW50aW5nLgogKiBVc2UgbmV3IGd1cmFudGVlZF91c2xlZXAgd2hlbiBz bGVlcCB0aW1lIGlzIGFzc2VydGVkIG9uLgogKiBDaGVjayBmb3Igbm8gcXVldWVkIHdoZW4gaWRs ZS9idXN5LgogKiBBZGQgcXVldWVkIGNvdW50ZXIgaW5pdCB0ZXN0LgogKiBBZGQgcXVldWVkIHRl c3RzLgogKiBDb25zb2xpZGF0ZSBhbmQgaW5jcmVhc2UgbXVsdGlwbGUgYnVzeSBlbmdpbmVzIHRl c3RzIHRvIG1vc3QtYnVzeSBhbmQKICAgYWxsLWJ1c3kgdGVzdHMuCiAqIEd1YXJhbnR0ZSBpbnRl cnJ1cHRzIGJ5IHVzaW5nIGZlbmNlcy4KICogVGVzdCBSQzYgdmlhIGZvcmNld2FrZS4KClNpZ25l ZC1vZmYtYnk6IFR2cnRrbyBVcnN1bGluIDx0dnJ0a28udXJzdWxpbkBpbnRlbC5jb20+CkNjOiBD aHJpcyBXaWxzb24gPGNocmlzQGNocmlzLXdpbHNvbi5jby51az4KQ2M6IERtaXRyeSBSb2dvemhr aW4gPGRtaXRyeS52LnJvZ296aGtpbkBpbnRlbC5jb20+Ci0tLQogbGliL2lndF9ndC5jICAgICAg ICAgICB8ICA1MCArKysKIGxpYi9pZ3RfZ3QuaCAgICAgICAgICAgfCAgMzggKysrCiBsaWIvaWd0 X3BlcmYuaCAgICAgICAgIHwgICA5ICstCiB0ZXN0cy9NYWtlZmlsZS5zb3VyY2VzIHwgICAxICsK IHRlc3RzL3BlcmZfcG11LmMgICAgICAgfCA4NDAgKysrKysrKysrKysrKysrKysrKysrKysrKysr KysrKysrKysrKysrKysrKysrKysrKwogNSBmaWxlcyBjaGFuZ2VkLCA5MzAgaW5zZXJ0aW9ucygr KSwgOCBkZWxldGlvbnMoLSkKIGNyZWF0ZSBtb2RlIDEwMDY0NCB0ZXN0cy9wZXJmX3BtdS5jCgpk aWZmIC0tZ2l0IGEvbGliL2lndF9ndC5jIGIvbGliL2lndF9ndC5jCmluZGV4IGIzZjNiMzgwOWVl ZS4uNGM3NTgxMWZiMWIzIDEwMDY0NAotLS0gYS9saWIvaWd0X2d0LmMKKysrIGIvbGliL2lndF9n dC5jCkBAIC01NjgsMyArNTY4LDUzIEBAIGJvb2wgZ2VtX2Nhbl9zdG9yZV9kd29yZChpbnQgZmQs IHVuc2lnbmVkIGludCBlbmdpbmUpCiAKIAlyZXR1cm4gdHJ1ZTsKIH0KKworY29uc3Qgc3RydWN0 IGludGVsX2V4ZWN1dGlvbl9lbmdpbmUyIGludGVsX2V4ZWN1dGlvbl9lbmdpbmVzMltdID0gewor CXsgInJjczAiLCBJOTE1X0VOR0lORV9DTEFTU19SRU5ERVIsIDAgfSwKKwl7ICJiY3MwIiwgSTkx NV9FTkdJTkVfQ0xBU1NfQ09QWSwgMCB9LAorCXsgInZjczAiLCBJOTE1X0VOR0lORV9DTEFTU19W SURFTywgMCB9LAorCXsgInZjczEiLCBJOTE1X0VOR0lORV9DTEFTU19WSURFTywgMSB9LAorCXsg InZlY3MwIiwgSTkxNV9FTkdJTkVfQ0xBU1NfVklERU9fRU5IQU5DRSwgMCB9LAorfTsKKwordW5z aWduZWQgaW50CitnZW1fY2xhc3NfaW5zdGFuY2VfdG9fZWJfZmxhZ3MoaW50IGdlbV9mZCwKKwkJ CSAgICAgICBlbnVtIGRybV9pOTE1X2dlbV9lbmdpbmVfY2xhc3MgY2xhc3MsCisJCQkgICAgICAg dW5zaWduZWQgaW50IGluc3RhbmNlKQoreworCWlmIChjbGFzcyAhPSBJOTE1X0VOR0lORV9DTEFT U19WSURFTykKKwkJaWd0X2Fzc2VydChpbnN0YW5jZSA9PSAwKTsKKwllbHNlCisJCWlndF9hc3Nl cnQoaW5zdGFuY2UgPj0gMCAmJiBpbnN0YW5jZSA8PSAxKTsKKworCXN3aXRjaCAoY2xhc3MpIHsK KwljYXNlIEk5MTVfRU5HSU5FX0NMQVNTX1JFTkRFUjoKKwkJcmV0dXJuIEk5MTVfRVhFQ19SRU5E RVI7CisJY2FzZSBJOTE1X0VOR0lORV9DTEFTU19DT1BZOgorCQlyZXR1cm4gSTkxNV9FWEVDX0JM VDsKKwljYXNlIEk5MTVfRU5HSU5FX0NMQVNTX1ZJREVPOgorCQlpZiAoaW5zdGFuY2UgPT0gMCkg eworCQkJaWYgKGdlbV9oYXNfYnNkMihnZW1fZmQpKQorCQkJCXJldHVybiBJOTE1X0VYRUNfQlNE IHwgSTkxNV9FWEVDX0JTRF9SSU5HMTsKKwkJCWVsc2UKKwkJCQlyZXR1cm4gSTkxNV9FWEVDX0JT RDsKKworCQl9IGVsc2UgeworCQkJcmV0dXJuIEk5MTVfRVhFQ19CU0QgfCBJOTE1X0VYRUNfQlNE X1JJTkcyOworCQl9CisJY2FzZSBJOTE1X0VOR0lORV9DTEFTU19WSURFT19FTkhBTkNFOgorCQly ZXR1cm4gSTkxNV9FWEVDX1ZFQk9YOworCWNhc2UgSTkxNV9FTkdJTkVfQ0xBU1NfT1RIRVI6CisJ ZGVmYXVsdDoKKwkJaWd0X2Fzc2VydCgwKTsKKwl9OworfQorCitib29sIGdlbV9oYXNfZW5naW5l KGludCBnZW1fZmQsCisJCSAgICBlbnVtIGRybV9pOTE1X2dlbV9lbmdpbmVfY2xhc3MgY2xhc3Ms CisJCSAgICB1bnNpZ25lZCBpbnQgaW5zdGFuY2UpCit7CisJcmV0dXJuIGdlbV9oYXNfcmluZyhn ZW1fZmQsCisJCQkgICAgZ2VtX2NsYXNzX2luc3RhbmNlX3RvX2ViX2ZsYWdzKGdlbV9mZCwgY2xh c3MsCisJCQkJCQkJICAgaW5zdGFuY2UpKTsKK30KZGlmZiAtLWdpdCBhL2xpYi9pZ3RfZ3QuaCBi L2xpYi9pZ3RfZ3QuaAppbmRleCAyNTc5Y2JkMzdiZTcuLmZiNjdhZTFhN2QxZiAxMDA2NDQKLS0t IGEvbGliL2lndF9ndC5oCisrKyBiL2xpYi9pZ3RfZ3QuaApAQCAtMjUsNiArMjUsNyBAQAogI2Rl ZmluZSBJR1RfR1RfSAogCiAjaW5jbHVkZSAiaWd0X2RlYnVnZnMuaCIKKyNpbmNsdWRlICJpZ3Rf Y29yZS5oIgogCiB2b2lkIGlndF9yZXF1aXJlX2hhbmdfcmluZyhpbnQgZmQsIGludCByaW5nKTsK IApAQCAtODAsNCArODEsNDEgQEAgZXh0ZXJuIGNvbnN0IHN0cnVjdCBpbnRlbF9leGVjdXRpb25f ZW5naW5lIHsKIAogYm9vbCBnZW1fY2FuX3N0b3JlX2R3b3JkKGludCBmZCwgdW5zaWduZWQgaW50 IGVuZ2luZSk7CiAKK2V4dGVybiBjb25zdCBzdHJ1Y3QgaW50ZWxfZXhlY3V0aW9uX2VuZ2luZTIg eworCWNvbnN0IGNoYXIgKm5hbWU7CisJaW50IGNsYXNzOworCWludCBpbnN0YW5jZTsKK30gaW50 ZWxfZXhlY3V0aW9uX2VuZ2luZXMyW107CisKKyNkZWZpbmUgZm9yX2VhY2hfZW5naW5lX2NsYXNz X2luc3RhbmNlKGZkX18sIGVfXykgXAorCWZvciAoKGVfXykgPSBpbnRlbF9leGVjdXRpb25fZW5n aW5lczI7XAorCSAgICAgKGVfXyktPm5hbWU7IFwKKwkgICAgIChlX18pKyspCisKK2VudW0gZHJt X2k5MTVfZ2VtX2VuZ2luZV9jbGFzcyB7CisJSTkxNV9FTkdJTkVfQ0xBU1NfT1RIRVIgPSAwLAor CUk5MTVfRU5HSU5FX0NMQVNTX1JFTkRFUiA9IDEsCisJSTkxNV9FTkdJTkVfQ0xBU1NfQ09QWSA9 IDIsCisJSTkxNV9FTkdJTkVfQ0xBU1NfVklERU8gPSAzLAorCUk5MTVfRU5HSU5FX0NMQVNTX1ZJ REVPX0VOSEFOQ0UgPSA0LAorCUk5MTVfRU5HSU5FX0NMQVNTX01BWCAvKiBub24tQUJJICovCit9 OworCit1bnNpZ25lZCBpbnQKK2dlbV9jbGFzc19pbnN0YW5jZV90b19lYl9mbGFncyhpbnQgZ2Vt X2ZkLAorCQkJICAgICAgIGVudW0gZHJtX2k5MTVfZ2VtX2VuZ2luZV9jbGFzcyBjbGFzcywKKwkJ CSAgICAgICB1bnNpZ25lZCBpbnQgaW5zdGFuY2UpOworCitib29sIGdlbV9oYXNfZW5naW5lKGlu dCBnZW1fZmQsCisJCSAgICBlbnVtIGRybV9pOTE1X2dlbV9lbmdpbmVfY2xhc3MgY2xhc3MsCisJ CSAgICB1bnNpZ25lZCBpbnQgaW5zdGFuY2UpOworCitzdGF0aWMgaW5saW5lCit2b2lkIGdlbV9y ZXF1aXJlX2VuZ2luZShpbnQgZ2VtX2ZkLAorCQkJZW51bSBkcm1faTkxNV9nZW1fZW5naW5lX2Ns YXNzIGNsYXNzLAorCQkJdW5zaWduZWQgaW50IGluc3RhbmNlKQoreworCWlndF9yZXF1aXJlKGdl bV9oYXNfZW5naW5lKGdlbV9mZCwgY2xhc3MsIGluc3RhbmNlKSk7Cit9CisKICNlbmRpZiAvKiBJ R1RfR1RfSCAqLwpkaWZmIC0tZ2l0IGEvbGliL2lndF9wZXJmLmggYi9saWIvaWd0X3BlcmYuaApp bmRleCBlMjkyMTZmMDUwMGEuLmQ2NGUwYmQ3YTA2YSAxMDA2NDQKLS0tIGEvbGliL2lndF9wZXJm LmgKKysrIGIvbGliL2lndF9wZXJmLmgKQEAgLTI5LDE0ICsyOSw3IEBACiAKICNpbmNsdWRlIDxs aW51eC9wZXJmX2V2ZW50Lmg+CiAKLWVudW0gZHJtX2k5MTVfZ2VtX2VuZ2luZV9jbGFzcyB7Ci0J STkxNV9FTkdJTkVfQ0xBU1NfT1RIRVIgPSAwLAotCUk5MTVfRU5HSU5FX0NMQVNTX1JFTkRFUiA9 IDEsCi0JSTkxNV9FTkdJTkVfQ0xBU1NfQ09QWSA9IDIsCi0JSTkxNV9FTkdJTkVfQ0xBU1NfVklE RU8gPSAzLAotCUk5MTVfRU5HSU5FX0NMQVNTX1ZJREVPX0VOSEFOQ0UgPSA0LAotCUk5MTVfRU5H SU5FX0NMQVNTX01BWCAvKiBub24tQUJJICovCi19OworI2luY2x1ZGUgImlndF9ndC5oIgogCiBl bnVtIGRybV9pOTE1X3BtdV9lbmdpbmVfc2FtcGxlIHsKIAlJOTE1X1NBTVBMRV9RVUVVRUQgPSAw LApkaWZmIC0tZ2l0IGEvdGVzdHMvTWFrZWZpbGUuc291cmNlcyBiL3Rlc3RzL01ha2VmaWxlLnNv dXJjZXMKaW5kZXggY2Y1NDJkZjE4MWE4Li40YmFiNjI0NzE1MWMgMTAwNjQ0Ci0tLSBhL3Rlc3Rz L01ha2VmaWxlLnNvdXJjZXMKKysrIGIvdGVzdHMvTWFrZWZpbGUuc291cmNlcwpAQCAtMjE3LDYg KzIxNyw3IEBAIFRFU1RTX3Byb2dzID0gXAogCWttc192YmxhbmsgXAogCW1ldGFfdGVzdCBcCiAJ cGVyZiBcCisJcGVyZl9wbXUgXAogCXBtX2JhY2tsaWdodCBcCiAJcG1fbHBzcCBcCiAJcG1fcmM2 X3Jlc2lkZW5jeSBcCmRpZmYgLS1naXQgYS90ZXN0cy9wZXJmX3BtdS5jIGIvdGVzdHMvcGVyZl9w bXUuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAuLjQyZDkyYjM2YTM4 NAotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL3BlcmZfcG11LmMKQEAgLTAsMCArMSw4NDAgQEAK Ky8qCisgKiBDb3B5cmlnaHQgwqkgMjAxNyBJbnRlbCBDb3Jwb3JhdGlvbgorICoKKyAqIFBlcm1p c3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9i dGFpbmluZyBhCisgKiBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1l bnRhdGlvbiBmaWxlcyAodGhlICJTb2Z0d2FyZSIpLAorICogdG8gZGVhbCBpbiB0aGUgU29mdHdh cmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbgorICog dGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1 dGUsIHN1YmxpY2Vuc2UsCisgKiBhbmQvb3Igc2VsbCBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBh bmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUKKyAqIFNvZnR3YXJlIGlzIGZ1cm5pc2hl ZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6CisgKgorICog VGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2UgKGlu Y2x1ZGluZyB0aGUgbmV4dAorICogcGFyYWdyYXBoKSBzaGFsbCBiZSBpbmNsdWRlZCBpbiBhbGwg Y29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZQorICogU29mdHdhcmUuCisgKgor ICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0Yg QU5ZIEtJTkQsIEVYUFJFU1MgT1IKKyAqIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlU RUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLAorICogRklUTkVTUyBGT1Ig QSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gIElOIE5PIEVWRU5UIFNI QUxMCisgKiBUSEUgQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFO WSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUgorICogTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFD VElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcKKyAqIEZST00sIE9V VCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RI RVIgREVBTElOR1MKKyAqIElOIFRIRSBTT0ZUV0FSRS4KKyAqCisgKi8KKworI2luY2x1ZGUgPHN0 ZGxpYi5oPgorI2luY2x1ZGUgPHN0ZGlvLmg+CisjaW5jbHVkZSA8c3RyaW5nLmg+CisjaW5jbHVk ZSA8ZmNudGwuaD4KKyNpbmNsdWRlIDxpbnR0eXBlcy5oPgorI2luY2x1ZGUgPGVycm5vLmg+Cisj aW5jbHVkZSA8c3lzL3N0YXQuaD4KKyNpbmNsdWRlIDxzeXMvdGltZS5oPgorI2luY2x1ZGUgPHN5 cy90aW1lcy5oPgorI2luY2x1ZGUgPHN5cy90eXBlcy5oPgorI2luY2x1ZGUgPGRpcmVudC5oPgor I2luY2x1ZGUgPHRpbWUuaD4KKyNpbmNsdWRlIDxwb2xsLmg+CisKKyNpbmNsdWRlICJpZ3QuaCIK KyNpbmNsdWRlICJpZ3RfY29yZS5oIgorI2luY2x1ZGUgImlndF9wZXJmLmgiCisKK0lHVF9URVNU X0RFU0NSSVBUSU9OKCJUZXN0IHRoZSBpOTE1IHBtdSBwZXJmIGludGVyZmFjZSIpOworCitjb25z dCBkb3VibGUgdG9sZXJhbmNlID0gMC4wMmY7Citjb25zdCB1bnNpZ25lZCBsb25nIGJhdGNoX2R1 cmF0aW9uX25zID0gMTAwICogMTAwMCAqIDEwMDA7CisKK3N0YXRpYyBpbnQgb3Blbl9wbXUodWlu dDY0X3QgY29uZmlnKQoreworCWludCBmZDsKKworCWZkID0gcGVyZl9pOTE1X29wZW4oY29uZmln KTsKKwlpZ3RfcmVxdWlyZShmZCA+PSAwIHx8IChmZCA8IDAgJiYgZXJybm8gIT0gRU5PREVWKSk7 CisJaWd0X2Fzc2VydChmZCA+PSAwKTsKKworCXJldHVybiBmZDsKK30KKworc3RhdGljIGludCBv cGVuX2dyb3VwKHVpbnQ2NF90IGNvbmZpZywgaW50IGdyb3VwKQoreworCWludCBmZDsKKworCWZk ID0gcGVyZl9pOTE1X29wZW5fZ3JvdXAoY29uZmlnLCBncm91cCk7CisJaWd0X3JlcXVpcmUoZmQg Pj0gMCB8fCAoZmQgPCAwICYmIGVycm5vICE9IEVOT0RFVikpOworCWlndF9hc3NlcnQoZmQgPj0g MCk7CisKKwlyZXR1cm4gZmQ7Cit9CisKK3N0YXRpYyB2b2lkCitpbml0KGludCBnZW1fZmQsIGNv bnN0IHN0cnVjdCBpbnRlbF9leGVjdXRpb25fZW5naW5lMiAqZSwgdWludDhfdCBzYW1wbGUpCit7 CisJaW50IGZkOworCisJZmQgPSBvcGVuX3BtdShfX0k5MTVfUE1VX0VOR0lORShlLT5jbGFzcywg ZS0+aW5zdGFuY2UsIHNhbXBsZSkpOworCisJY2xvc2UoZmQpOworfQorCitzdGF0aWMgdWludDY0 X3QgcG11X3JlYWRfc2luZ2xlKGludCBmZCkKK3sKKwl1aW50NjRfdCBkYXRhWzJdOworCXNzaXpl X3QgbGVuOworCisJbGVuID0gcmVhZChmZCwgZGF0YSwgc2l6ZW9mKGRhdGEpKTsKKwlpZ3RfYXNz ZXJ0X2VxKGxlbiwgc2l6ZW9mKGRhdGEpKTsKKworCXJldHVybiBkYXRhWzBdOworfQorCitzdGF0 aWMgdm9pZCBwbXVfcmVhZF9tdWx0aShpbnQgZmQsIHVuc2lnbmVkIGludCBudW0sIHVpbnQ2NF90 ICp2YWwpCit7CisJdWludDY0X3QgYnVmWzIgKyBudW1dOworCXVuc2lnbmVkIGludCBpOworCXNz aXplX3QgbGVuOworCisJbGVuID0gcmVhZChmZCwgYnVmLCBzaXplb2YoYnVmKSk7CisJaWd0X2Fz c2VydF9lcShsZW4sIHNpemVvZihidWYpKTsKKwlmb3IgKGkgPSAwOyBpIDwgbnVtOyBpKyspCisJ CXZhbFtpXSA9IGJ1ZlsyICsgaV07Cit9CisKKyNkZWZpbmUgYXNzZXJ0X3dpdGhpbl9lcHNpbG9u KHgsIHJlZiwgdG9sZXJhbmNlKSBcCisJaWd0X2Fzc2VydF9mKChkb3VibGUpKHgpIDw9ICgxLjAg KyB0b2xlcmFuY2UpICogKGRvdWJsZSlyZWYgJiYgXAorCQkgICAgIChkb3VibGUpKHgpID49ICgx LjAgLSB0b2xlcmFuY2UpICogKGRvdWJsZSlyZWYsIFwKKwkJICAgICAiJyVzJyAhPSAnJXMnICgl ZiBub3Qgd2l0aGluICVmJSUgdG9sZXJhbmNlIG9mICVmKVxuIixcCisJCSAgICAgI3gsICNyZWYs IChkb3VibGUpeCwgdG9sZXJhbmNlICogMTAwLjAsIChkb3VibGUpcmVmKQorCitzdGF0aWMgdm9p ZCBndWFyYW50ZWVkX3VzbGVlcCh1bnNpZ25lZCBpbnQgdXNlYykKK3sKKwl1aW50NjRfdCBzbGVw dCA9IDAsIHRvX3NsZWVwID0gdXNlYzsKKworCXdoaWxlICh1c2VjID4gMCkgeworCQlzdHJ1Y3Qg dGltZXNwZWMgc3RhcnQgPSB7IH07CisJCXVpbnQ2NF90IHRoaXNfc2xlZXA7CisKKwkJaWd0X25z ZWNfZWxhcHNlZCgmc3RhcnQpOworCQl1c2xlZXAodXNlYyk7CisJCXRoaXNfc2xlZXAgPSBpZ3Rf bnNlY19lbGFwc2VkKCZzdGFydCkgLyAxMDAwOworCQlzbGVwdCArPSB0aGlzX3NsZWVwOworCQlp ZiAodGhpc19zbGVlcCA+IHVzZWMpCisJCQlicmVhazsKKwkJdXNlYyAtPSB0aGlzX3NsZWVwOwor CX0KKworCWFzc2VydF93aXRoaW5fZXBzaWxvbihzbGVwdCwgdG9fc2xlZXAsIHRvbGVyYW5jZSk7 Cit9CisKK3N0YXRpYyB1bnNpZ25lZCBpbnQgZTJyaW5nKGludCBnZW1fZmQsIGNvbnN0IHN0cnVj dCBpbnRlbF9leGVjdXRpb25fZW5naW5lMiAqZSkKK3sKKwlyZXR1cm4gZ2VtX2NsYXNzX2luc3Rh bmNlX3RvX2ViX2ZsYWdzKGdlbV9mZCwgZS0+Y2xhc3MsIGUtPmluc3RhbmNlKTsKK30KKworc3Rh dGljIHZvaWQKK3NpbmdsZShpbnQgZ2VtX2ZkLCBjb25zdCBzdHJ1Y3QgaW50ZWxfZXhlY3V0aW9u X2VuZ2luZTIgKmUsIHVpbnQ4X3Qgc2FtcGxlLAorICAgICAgIGJvb2wgYnVzeSkKK3sKKwlkb3Vi bGUgcmVmID0gYnVzeSAmJiBzYW1wbGUgPT0gSTkxNV9TQU1QTEVfQlVTWSA/CisJCSAgICAgYmF0 Y2hfZHVyYXRpb25fbnMgOiAwLjBmOworCWlndF9zcGluX3QgKnNwaW47CisJdWludDY0X3QgdmFs OworCWludCBmZDsKKworCWZkID0gb3Blbl9wbXUoX19JOTE1X1BNVV9FTkdJTkUoZS0+Y2xhc3Ms IGUtPmluc3RhbmNlLCBzYW1wbGUpKTsKKworCWlmIChidXN5KSB7CisJCXNwaW4gPSBpZ3Rfc3Bp bl9iYXRjaF9uZXcoZ2VtX2ZkLCAwLCBlMnJpbmcoZ2VtX2ZkLCBlKSwgMCk7CisJCWlndF9zcGlu X2JhdGNoX3NldF90aW1lb3V0KHNwaW4sIGJhdGNoX2R1cmF0aW9uX25zKTsKKwl9IGVsc2Ugewor CQlndWFyYW50ZWVkX3VzbGVlcChiYXRjaF9kdXJhdGlvbl9ucyAvIDEwMDApOworCX0KKworCWlm IChidXN5KQorCQlnZW1fc3luYyhnZW1fZmQsIHNwaW4tPmhhbmRsZSk7CisKKwl2YWwgPSBwbXVf cmVhZF9zaW5nbGUoZmQpOworCisJYXNzZXJ0X3dpdGhpbl9lcHNpbG9uKHZhbCwgcmVmLCB0b2xl cmFuY2UpOworCisJaWYgKGJ1c3kpCisJCWlndF9zcGluX2JhdGNoX2ZyZWUoZ2VtX2ZkLCBzcGlu KTsKKwljbG9zZShmZCk7Cit9CisKK3N0YXRpYyB2b2lkCitxdWV1ZWQoaW50IGdlbV9mZCwgY29u c3Qgc3RydWN0IGludGVsX2V4ZWN1dGlvbl9lbmdpbmUyICplKQoreworCWlndF9zcGluX3QgKnNw aW5bMl07CisJdWludDY0X3QgdmFsOworCWludCBmZDsKKworCWZkID0gb3Blbl9wbXUoSTkxNV9Q TVVfRU5HSU5FX1FVRVVFRChlLT5jbGFzcywgZS0+aW5zdGFuY2UpKTsKKworCXNwaW5bMF0gPSBp Z3Rfc3Bpbl9iYXRjaF9uZXcoZ2VtX2ZkLCAwLCBlMnJpbmcoZ2VtX2ZkLCBlKSwgMCk7CisJaWd0 X3NwaW5fYmF0Y2hfc2V0X3RpbWVvdXQoc3BpblswXSwgYmF0Y2hfZHVyYXRpb25fbnMpOworCisJ c3BpblsxXSA9IGlndF9zcGluX2JhdGNoX25ldyhnZW1fZmQsIDAsIGUycmluZyhnZW1fZmQsIGUp LCAwKTsKKwlpZ3Rfc3Bpbl9iYXRjaF9zZXRfdGltZW91dChzcGluWzFdLCBiYXRjaF9kdXJhdGlv bl9ucyk7CisKKwlnZW1fc3luYyhnZW1fZmQsIHNwaW5bMF0tPmhhbmRsZSk7CisKKwl2YWwgPSBw bXVfcmVhZF9zaW5nbGUoZmQpOworCWFzc2VydF93aXRoaW5fZXBzaWxvbih2YWwsIGJhdGNoX2R1 cmF0aW9uX25zLCB0b2xlcmFuY2UpOworCisJZ2VtX3N5bmMoZ2VtX2ZkLCBzcGluWzFdLT5oYW5k bGUpOworCisJaWd0X3NwaW5fYmF0Y2hfZnJlZShnZW1fZmQsIHNwaW5bMF0pOworCWlndF9zcGlu X2JhdGNoX2ZyZWUoZ2VtX2ZkLCBzcGluWzFdKTsKKwljbG9zZShmZCk7Cit9CisKK3N0YXRpYyB2 b2lkCitidXN5X2NoZWNrX2FsbChpbnQgZ2VtX2ZkLCBjb25zdCBzdHJ1Y3QgaW50ZWxfZXhlY3V0 aW9uX2VuZ2luZTIgKmUsCisJICAgICAgIGNvbnN0IHVuc2lnbmVkIGludCBudW1fZW5naW5lcykK K3sKKwljb25zdCBzdHJ1Y3QgaW50ZWxfZXhlY3V0aW9uX2VuZ2luZTIgKmVfOworCXVpbnQ2NF90 IHZhbFtudW1fZW5naW5lc107CisJaW50IGZkW251bV9lbmdpbmVzXTsKKwlpZ3Rfc3Bpbl90ICpz cGluOworCXVuc2lnbmVkIGludCBidXN5X2lkeCwgaTsKKworCWkgPSAwOworCWZkWzBdID0gLTE7 CisJZm9yX2VhY2hfZW5naW5lX2NsYXNzX2luc3RhbmNlKGZkLCBlXykgeworCQlpZiAoIWdlbV9o YXNfZW5naW5lKGdlbV9mZCwgZV8tPmNsYXNzLCBlXy0+aW5zdGFuY2UpKQorCQkJY29udGludWU7 CisJCWVsc2UgaWYgKGUgPT0gZV8pCisJCQlidXN5X2lkeCA9IGk7CisKKwkJZmRbaSsrXSA9IG9w ZW5fZ3JvdXAoSTkxNV9QTVVfRU5HSU5FX0JVU1koZV8tPmNsYXNzLAorCQkJCQkJCSAgZV8tPmlu c3RhbmNlKSwKKwkJCQkgICAgIGZkWzBdKTsKKwl9CisKKwlzcGluID0gaWd0X3NwaW5fYmF0Y2hf bmV3KGdlbV9mZCwgMCwgZTJyaW5nKGdlbV9mZCwgZSksIDApOworCWlndF9zcGluX2JhdGNoX3Nl dF90aW1lb3V0KHNwaW4sIGJhdGNoX2R1cmF0aW9uX25zKTsKKworCWdlbV9zeW5jKGdlbV9mZCwg c3Bpbi0+aGFuZGxlKTsKKworCXBtdV9yZWFkX211bHRpKGZkWzBdLCBudW1fZW5naW5lcywgdmFs KTsKKworCWFzc2VydF93aXRoaW5fZXBzaWxvbih2YWxbYnVzeV9pZHhdLCBiYXRjaF9kdXJhdGlv bl9ucywgdG9sZXJhbmNlKTsKKwlmb3IgKGkgPSAwOyBpIDwgbnVtX2VuZ2luZXM7IGkrKykgewor CQlpZiAoaSA9PSBidXN5X2lkeCkKKwkJCWNvbnRpbnVlOworCQlhc3NlcnRfd2l0aGluX2Vwc2ls b24odmFsW2ldLCAwLjBmLCB0b2xlcmFuY2UpOworCX0KKworCWlndF9zcGluX2JhdGNoX2ZyZWUo Z2VtX2ZkLCBzcGluKTsKKwljbG9zZShmZFswXSk7Cit9CisKK3N0YXRpYyB2b2lkCittb3N0X2J1 c3lfY2hlY2tfYWxsKGludCBnZW1fZmQsIGNvbnN0IHN0cnVjdCBpbnRlbF9leGVjdXRpb25fZW5n aW5lMiAqZSwKKwkJICAgIGNvbnN0IHVuc2lnbmVkIGludCBudW1fZW5naW5lcykKK3sKKwljb25z dCBzdHJ1Y3QgaW50ZWxfZXhlY3V0aW9uX2VuZ2luZTIgKmVfOworCXVpbnQ2NF90IHZhbFtudW1f ZW5naW5lc107CisJaW50IGZkW251bV9lbmdpbmVzXTsKKwlpZ3Rfc3Bpbl90ICpzcGluW251bV9l bmdpbmVzXTsKKwl1bnNpZ25lZCBpbnQgaWRsZV9pZHgsIGk7CisKKwlnZW1fcmVxdWlyZV9lbmdp bmUoZ2VtX2ZkLCBlLT5jbGFzcywgZS0+aW5zdGFuY2UpOworCisJaSA9IDA7CisJZmRbMF0gPSAt MTsKKwlmb3JfZWFjaF9lbmdpbmVfY2xhc3NfaW5zdGFuY2UoZmQsIGVfKSB7CisJCWlmICghZ2Vt X2hhc19lbmdpbmUoZ2VtX2ZkLCBlXy0+Y2xhc3MsIGVfLT5pbnN0YW5jZSkpCisJCQljb250aW51 ZTsKKworCQlmZFtpXSA9IG9wZW5fZ3JvdXAoSTkxNV9QTVVfRU5HSU5FX0JVU1koZV8tPmNsYXNz LAorCQkJCQkJCWVfLT5pbnN0YW5jZSksCisJCQkJICAgZmRbMF0pOworCisJCWlmIChlID09IGVf KSB7CisJCQlpZGxlX2lkeCA9IGk7CisJCX0gZWxzZSB7CisJCQlzcGluW2ldID0gaWd0X3NwaW5f YmF0Y2hfbmV3KGdlbV9mZCwgMCwKKwkJCQkJCSAgICAgZTJyaW5nKGdlbV9mZCwgZV8pLCAwKTsK KwkJCWlndF9zcGluX2JhdGNoX3NldF90aW1lb3V0KHNwaW5baV0sIGJhdGNoX2R1cmF0aW9uX25z KTsKKwkJfQorCisJCWkrKzsKKwl9CisKKwlmb3IgKGkgPSAwOyBpIDwgbnVtX2VuZ2luZXM7IGkr KykgeworCQlpZiAoaSAhPSBpZGxlX2lkeCkKKwkJCWdlbV9zeW5jKGdlbV9mZCwgc3BpbltpXS0+ aGFuZGxlKTsKKwl9CisKKwlwbXVfcmVhZF9tdWx0aShmZFswXSwgbnVtX2VuZ2luZXMsIHZhbCk7 CisKKwlmb3IgKGkgPSAwOyBpIDwgbnVtX2VuZ2luZXM7IGkrKykgeworCQlpZiAoaSA9PSBpZGxl X2lkeCkKKwkJCWFzc2VydF93aXRoaW5fZXBzaWxvbih2YWxbaV0sIDAuMGYsIHRvbGVyYW5jZSk7 CisJCWVsc2UKKwkJCWFzc2VydF93aXRoaW5fZXBzaWxvbih2YWxbaV0sIGJhdGNoX2R1cmF0aW9u X25zLAorCQkJCQkgICAgICB0b2xlcmFuY2UpOworCX0KKworCWZvciAoaSA9IDA7IGkgPCBudW1f ZW5naW5lczsgaSsrKSB7CisJCWlmIChpICE9IGlkbGVfaWR4KQorCQkJaWd0X3NwaW5fYmF0Y2hf ZnJlZShnZW1fZmQsIHNwaW5baV0pOworCX0KKwljbG9zZShmZFswXSk7Cit9CisKK3N0YXRpYyB2 b2lkCithbGxfYnVzeV9jaGVja19hbGwoaW50IGdlbV9mZCwgY29uc3QgdW5zaWduZWQgaW50IG51 bV9lbmdpbmVzKQoreworCWNvbnN0IHN0cnVjdCBpbnRlbF9leGVjdXRpb25fZW5naW5lMiAqZTsK Kwl1aW50NjRfdCB2YWxbbnVtX2VuZ2luZXNdOworCWludCBmZFtudW1fZW5naW5lc107CisJaWd0 X3NwaW5fdCAqc3BpbltudW1fZW5naW5lc107CisJdW5zaWduZWQgaW50IGk7CisKKwlpID0gMDsK KwlmZFswXSA9IC0xOworCWZvcl9lYWNoX2VuZ2luZV9jbGFzc19pbnN0YW5jZShmZCwgZSkgewor CQlpZiAoIWdlbV9oYXNfZW5naW5lKGdlbV9mZCwgZS0+Y2xhc3MsIGUtPmluc3RhbmNlKSkKKwkJ CWNvbnRpbnVlOworCisJCWZkW2ldID0gb3Blbl9ncm91cChJOTE1X1BNVV9FTkdJTkVfQlVTWShl LT5jbGFzcywgZS0+aW5zdGFuY2UpLAorCQkJCSAgIGZkWzBdKTsKKworCQlzcGluW2ldID0gaWd0 X3NwaW5fYmF0Y2hfbmV3KGdlbV9mZCwgMCwgZTJyaW5nKGdlbV9mZCwgZSksIDApOworCQlpZ3Rf c3Bpbl9iYXRjaF9zZXRfdGltZW91dChzcGluW2ldLCBiYXRjaF9kdXJhdGlvbl9ucyk7CisKKwkJ aSsrOworCX0KKworCWZvciAoaSA9IDA7IGkgPCBudW1fZW5naW5lczsgaSsrKQorCQlnZW1fc3lu YyhnZW1fZmQsIHNwaW5baV0tPmhhbmRsZSk7CisKKwlwbXVfcmVhZF9tdWx0aShmZFswXSwgbnVt X2VuZ2luZXMsIHZhbCk7CisKKwlmb3IgKGkgPSAwOyBpIDwgbnVtX2VuZ2luZXM7IGkrKykKKwkJ YXNzZXJ0X3dpdGhpbl9lcHNpbG9uKHZhbFtpXSwgYmF0Y2hfZHVyYXRpb25fbnMsIHRvbGVyYW5j ZSk7CisKKwlmb3IgKGkgPSAwOyBpIDwgbnVtX2VuZ2luZXM7IGkrKykKKwkJaWd0X3NwaW5fYmF0 Y2hfZnJlZShnZW1fZmQsIHNwaW5baV0pOworCWNsb3NlKGZkWzBdKTsKK30KKworc3RhdGljIHZv aWQKK25vX3NlbWEoaW50IGdlbV9mZCwgY29uc3Qgc3RydWN0IGludGVsX2V4ZWN1dGlvbl9lbmdp bmUyICplLCBib29sIGJ1c3kpCit7CisJaWd0X3NwaW5fdCAqc3BpbjsKKwl1aW50NjRfdCB2YWxb Ml07CisJaW50IGZkOworCisJZmQgPSBvcGVuX2dyb3VwKEk5MTVfUE1VX0VOR0lORV9TRU1BKGUt PmNsYXNzLCBlLT5pbnN0YW5jZSksIC0xKTsKKwlvcGVuX2dyb3VwKEk5MTVfUE1VX0VOR0lORV9X QUlUKGUtPmNsYXNzLCBlLT5pbnN0YW5jZSksIGZkKTsKKworCWlmIChidXN5KSB7CisJCXNwaW4g PSBpZ3Rfc3Bpbl9iYXRjaF9uZXcoZ2VtX2ZkLCAwLCBlMnJpbmcoZ2VtX2ZkLCBlKSwgMCk7CisJ CWlndF9zcGluX2JhdGNoX3NldF90aW1lb3V0KHNwaW4sIGJhdGNoX2R1cmF0aW9uX25zKTsKKwl9 IGVsc2UgeworCQl1c2xlZXAoYmF0Y2hfZHVyYXRpb25fbnMgLyAxMDAwKTsKKwl9CisKKwlwbXVf cmVhZF9tdWx0aShmZCwgMiwgdmFsKTsKKworCWFzc2VydF93aXRoaW5fZXBzaWxvbih2YWxbMF0s IDAuMGYsIHRvbGVyYW5jZSk7CisJYXNzZXJ0X3dpdGhpbl9lcHNpbG9uKHZhbFsxXSwgMC4wZiwg dG9sZXJhbmNlKTsKKworCWlmIChidXN5KQorCQlpZ3Rfc3Bpbl9iYXRjaF9mcmVlKGdlbV9mZCwg c3Bpbik7CisJY2xvc2UoZmQpOworfQorCitzdGF0aWMgdm9pZAorbXVsdGlfY2xpZW50KGludCBn ZW1fZmQsIGNvbnN0IHN0cnVjdCBpbnRlbF9leGVjdXRpb25fZW5naW5lMiAqZSkKK3sKKwl1aW50 NjRfdCBjb25maWcgPSBJOTE1X1BNVV9FTkdJTkVfQlVTWShlLT5jbGFzcywgZS0+aW5zdGFuY2Up OworCWlndF9zcGluX3QgKnNwaW47CisJdWludDY0X3QgdmFsWzJdOworCWludCBmZFsyXTsKKwor CWZkWzBdID0gb3Blbl9wbXUoY29uZmlnKTsKKworCXNwaW4gPSBpZ3Rfc3Bpbl9iYXRjaF9uZXco Z2VtX2ZkLCAwLCBlMnJpbmcoZ2VtX2ZkLCBlKSwgMCk7CisJaWd0X3NwaW5fYmF0Y2hfc2V0X3Rp bWVvdXQoc3BpbiwgYmF0Y2hfZHVyYXRpb25fbnMpOworCisJZ3VhcmFudGVlZF91c2xlZXAoYmF0 Y2hfZHVyYXRpb25fbnMgLyAyMDAwKTsKKworCWZkWzFdID0gcGVyZl9pOTE1X29wZW4oY29uZmln KTsKKwlpZ3RfYXNzZXJ0KGZkWzFdID49IDApOworCisJZ2VtX3N5bmMoZ2VtX2ZkLCBzcGluLT5o YW5kbGUpOworCisJdmFsWzBdID0gcG11X3JlYWRfc2luZ2xlKGZkWzBdKTsKKwl2YWxbMV0gPSBw bXVfcmVhZF9zaW5nbGUoZmRbMV0pOworCWNsb3NlKGZkWzFdKTsKKworCWFzc2VydF93aXRoaW5f ZXBzaWxvbih2YWxbMF0sIGJhdGNoX2R1cmF0aW9uX25zLCB0b2xlcmFuY2UpOworCWFzc2VydF93 aXRoaW5fZXBzaWxvbih2YWxbMV0sIGJhdGNoX2R1cmF0aW9uX25zIC8gMiwgdG9sZXJhbmNlKTsK KworCWlndF9zcGluX2JhdGNoX2ZyZWUoZ2VtX2ZkLCBzcGluKTsKKwljbG9zZShmZFswXSk7Cit9 CisKKy8qKgorICogVGVzdHMgdGhhdCBpOTE1IFBNVSBjb3JlY3RseSBlcnJvcnMgb3V0IGluIGlu dmFsaWQgaW5pdGlhbGl6YXRpb24uCisgKiBpOTE1IFBNVSBpcyB1bmNvcmUgUE1VLCB0aHVzOgor ICogIC0gc2FtcGxpbmcgcGVyaW9kIGlzIG5vdCBzdXBwb3J0ZWQKKyAqICAtIHBpZCA+IDAgaXMg bm90IHN1cHBvcnRlZCBzaW5jZSB3ZSBjYW4ndCBjb3VudCBwZXItcHJvY2VzcyAod2UgY291bnQK KyAqICAgIHBlciB3aG9sZSBzeXN0ZW0pCisgKiAgLSBjcHUgIT0gMCBpcyBub3Qgc3VwcG9ydGVk IHNpbmNlIGk5MTUgUE1VIGV4cG9zZXMgY3B1bWFzayBmb3IgQ1BVMAorICovCitzdGF0aWMgdm9p ZCBpbnZhbGlkX2luaXQodm9pZCkKK3sKKwlzdHJ1Y3QgcGVyZl9ldmVudF9hdHRyIGF0dHI7CisJ aW50IHBpZCwgY3B1OworCisjZGVmaW5lIEFUVFJfSU5JVCgpIFwKK2RvIHsgXAorCW1lbXNldCgm YXR0ciwgMCwgc2l6ZW9mIChhdHRyKSk7IFwKKwlhdHRyLmNvbmZpZyA9IEk5MTVfUE1VX0VOR0lO RV9CVVNZKEk5MTVfRU5HSU5FX0NMQVNTX1JFTkRFUiwgMCk7IFwKKwlhdHRyLnR5cGUgPSBpOTE1 X3R5cGVfaWQoKTsgXAorCWlndF9hc3NlcnQoYXR0ci50eXBlICE9IDApOyBcCit9IHdoaWxlKDAp CisKKwlBVFRSX0lOSVQoKTsKKwlhdHRyLnNhbXBsZV9wZXJpb2QgPSAxMDA7CisJcGlkID0gLTE7 CisJY3B1ID0gMDsKKwlpZ3RfYXNzZXJ0X2VxKHBlcmZfZXZlbnRfb3BlbigmYXR0ciwgcGlkLCBj cHUsIC0xLCAwKSwgLTEpOworCWlndF9hc3NlcnRfZXEoZXJybm8sIEVJTlZBTCk7CisKKwlBVFRS X0lOSVQoKTsKKwlwaWQgPSAwOworCWNwdSA9IDA7CisJaWd0X2Fzc2VydF9lcShwZXJmX2V2ZW50 X29wZW4oJmF0dHIsIHBpZCwgY3B1LCAtMSwgMCksIC0xKTsKKwlpZ3RfYXNzZXJ0X2VxKGVycm5v LCBFSU5WQUwpOworCisJQVRUUl9JTklUKCk7CisJcGlkID0gLTE7CisJY3B1ID0gMTsKKwlpZ3Rf YXNzZXJ0X2VxKHBlcmZfZXZlbnRfb3BlbigmYXR0ciwgcGlkLCBjcHUsIC0xLCAwKSwgLTEpOwor CWlndF9hc3NlcnRfZXEoZXJybm8sIEVOT0RFVik7Cit9CisKK3N0YXRpYyB2b2lkIGluaXRfb3Ro ZXIodW5zaWduZWQgaW50IGksIGJvb2wgdmFsaWQpCit7CisJaW50IGZkOworCisJZmQgPSBwZXJm X2k5MTVfb3BlbihfX0k5MTVfUE1VX09USEVSKGkpKTsKKwlpZ3RfcmVxdWlyZSghKGZkIDwgMCAm JiBlcnJubyA9PSBFTk9ERVYpKTsKKwlpZiAodmFsaWQpIHsKKwkJaWd0X2Fzc2VydChmZCA+PSAw KTsKKwl9IGVsc2UgeworCQlpZ3RfYXNzZXJ0KGZkIDwgMCk7CisJCXJldHVybjsKKwl9CisKKwlj bG9zZShmZCk7Cit9CisKK3N0YXRpYyB2b2lkIHJlYWRfb3RoZXIodW5zaWduZWQgaW50IGksIGJv b2wgdmFsaWQpCit7CisJaW50IGZkOworCisJZmQgPSBwZXJmX2k5MTVfb3BlbihfX0k5MTVfUE1V X09USEVSKGkpKTsKKwlpZ3RfcmVxdWlyZSghKGZkIDwgMCAmJiBlcnJubyA9PSBFTk9ERVYpKTsK KwlpZiAodmFsaWQpIHsKKwkJaWd0X2Fzc2VydChmZCA+PSAwKTsKKwl9IGVsc2UgeworCQlpZ3Rf YXNzZXJ0KGZkIDwgMCk7CisJCXJldHVybjsKKwl9CisKKwkodm9pZClwbXVfcmVhZF9zaW5nbGUo ZmQpOworCisJY2xvc2UoZmQpOworfQorCitzdGF0aWMgYm9vbCBjcHUwX2hvdHBsdWdfc3VwcG9y dCh2b2lkKQoreworCWludCBmZCA9IG9wZW4oIi9zeXMvZGV2aWNlcy9zeXN0ZW0vY3B1L2NwdTAv b25saW5lIiwgT19XUk9OTFkpOworCisJY2xvc2UoZmQpOworCisJcmV0dXJuIGZkID4gMDsKK30K Kworc3RhdGljIHZvaWQgY3B1X2hvdHBsdWcoaW50IGdlbV9mZCkKK3sKKwlzdHJ1Y3QgdGltZXNw ZWMgc3RhcnQgPSB7IH07CisJaWd0X3NwaW5fdCAqc3BpbjsKKwl1aW50NjRfdCB2YWwsIHJlZjsK KwlpbnQgZmQ7CisKKwlpZ3RfcmVxdWlyZShjcHUwX2hvdHBsdWdfc3VwcG9ydCgpKTsKKworCXNw aW4gPSBpZ3Rfc3Bpbl9iYXRjaF9uZXcoZ2VtX2ZkLCAwLCBJOTE1X0VYRUNfUkVOREVSLCAwKTsK KwlmZCA9IHBlcmZfaTkxNV9vcGVuKEk5MTVfUE1VX0VOR0lORV9CVVNZKEk5MTVfRU5HSU5FX0NM QVNTX1JFTkRFUiwgMCkpOworCWlndF9hc3NlcnQoZmQgPj0gMCk7CisKKwlpZ3RfbnNlY19lbGFw c2VkKCZzdGFydCk7CisKKwlpZ3RfZm9yayhjaGlsZCwgMSkgeworCQlpbnQgY3B1ID0gMDsKKwor CQlmb3IgKDs7KSB7CisJCQljaGFyIG5hbWVbMTI4XTsKKwkJCWludCBjcHVmZDsKKworCQkJc3By aW50ZihuYW1lLCAiL3N5cy9kZXZpY2VzL3N5c3RlbS9jcHUvY3B1JWQvb25saW5lIiwKKwkJCQlj cHUpOworCQkJY3B1ZmQgPSBvcGVuKG5hbWUsIE9fV1JPTkxZKTsKKwkJCWlmIChjcHVmZCA9PSAt MSkgeworCQkJCWlndF9hc3NlcnQoY3B1ID4gMCk7CisJCQkJYnJlYWs7CisJCQl9CisJCQlpZ3Rf YXNzZXJ0X2VxKHdyaXRlKGNwdWZkLCAiMCIsIDIpLCAyKTsKKworCQkJdXNsZWVwKDEwMDAgKiAx MDAwKTsKKworCQkJaWd0X2Fzc2VydF9lcSh3cml0ZShjcHVmZCwgIjEiLCAyKSwgMik7CisKKwkJ CWNsb3NlKGNwdWZkKTsKKwkJCWNwdSsrOworCQl9CisJfQorCisJaWd0X3dhaXRjaGlsZHJlbigp OworCisJaWd0X3NwaW5fYmF0Y2hfZW5kKHNwaW4pOworCWdlbV9zeW5jKGdlbV9mZCwgc3Bpbi0+ aGFuZGxlKTsKKworCXJlZiA9IGlndF9uc2VjX2VsYXBzZWQoJnN0YXJ0KTsKKwl2YWwgPSBwbXVf cmVhZF9zaW5nbGUoZmQpOworCisJYXNzZXJ0X3dpdGhpbl9lcHNpbG9uKHZhbCwgcmVmLCB0b2xl cmFuY2UpOworCisJaWd0X3NwaW5fYmF0Y2hfZnJlZShnZW1fZmQsIHNwaW4pOworCWNsb3NlKGZk KTsKK30KKworc3RhdGljIGludCBjaGFpbl9ub3AoaW50IGdlbV9mZCwgaW50IGluX2ZlbmNlLCBi b29sIHN5bmMpCit7CisJc3RydWN0IGRybV9pOTE1X2dlbV9leGVjX29iamVjdDIgb2JqID0ge307 CisJc3RydWN0IGRybV9pOTE1X2dlbV9leGVjYnVmZmVyMiBlYiA9CisJCXsgLmJ1ZmZlcl9jb3Vu dCA9IDEsIC5idWZmZXJzX3B0ciA9ICh1aW50cHRyX3QpJm9ian07CisJY29uc3QgdWludDMyX3Qg YmJlID0gMHhhIDw8IDIzOworCisJb2JqLmhhbmRsZSA9IGdlbV9jcmVhdGUoZ2VtX2ZkLCBzaXpl b2YoYmJlKSk7CisJZ2VtX3dyaXRlKGdlbV9mZCwgb2JqLmhhbmRsZSwgMCwgJmJiZSwgc2l6ZW9m KGJiZSkpOworCisJZWIuZmxhZ3MgPSBJOTE1X0VYRUNfUkVOREVSIHwgSTkxNV9FWEVDX0ZFTkNF X09VVDsKKworCWlmIChpbl9mZW5jZSA+PSAwKSB7CisJCWViLmZsYWdzIHw9IEk5MTVfRVhFQ19G RU5DRV9JTjsKKwkJZWIucnN2ZDIgPSBpbl9mZW5jZTsKKwl9CisKKwlnZW1fZXhlY2J1Zl93cihn ZW1fZmQsICZlYik7CisKKwlpZiAoc3luYykKKwkJZ2VtX3N5bmMoZ2VtX2ZkLCBvYmouaGFuZGxl KTsKKworCWdlbV9jbG9zZShnZW1fZmQsIG9iai5oYW5kbGUpOworCWlmIChpbl9mZW5jZSA+PSAw KQorCQljbG9zZShpbl9mZW5jZSk7CisKKwlyZXR1cm4gZWIucnN2ZDIgPj4gMzI7Cit9CisKK3N0 YXRpYyB2b2lkCit0ZXN0X2ludGVycnVwdHMoaW50IGdlbV9mZCkKK3sKKwl1aW50NjRfdCBpZGxl LCBidXN5LCBwcmV2OworCWludCBmZCwgZmVuY2UgPSAtMTsKKwljb25zdCB1bnNpZ25lZCBpbnQg Y291bnQgPSAxMDAwOworCXVuc2lnbmVkIGludCBpOworCisJZmQgPSBvcGVuX3BtdShJOTE1X1BN VV9JTlRFUlJVUFRTKTsKKworCWdlbV9xdWllc2NlbnRfZ3B1KGdlbV9mZCk7CisKKwkvKiBXYWl0 IGZvciBpZGxlIHN0YXRlLiAqLworCXByZXYgPSBwbXVfcmVhZF9zaW5nbGUoZmQpOworCWlkbGUg PSBwcmV2ICsgMTsKKwl3aGlsZSAoaWRsZSAhPSBwcmV2KSB7CisJCXVzbGVlcChiYXRjaF9kdXJh dGlvbl9ucyAvIDEwMDApOworCQlwcmV2ID0gaWRsZTsKKwkJaWRsZSA9IHBtdV9yZWFkX3Npbmds ZShmZCk7CisJfQorCisJaWd0X2Fzc2VydF9lcShpZGxlIC0gcHJldiwgMCk7CisKKwkvKiBTZW5k IHNvbWUgbm8tb3AgYmF0Y2hlcyB3aXRoIGNoYWluZWQgZmVuY2VzIHRvIGVuc3VyZSBpbnRlcnJ1 cHRzLiAqLworCWZvciAoaSA9IDE7IGkgPD0gY291bnQ7IGkrKykKKwkJZmVuY2UgPSBjaGFpbl9u b3AoZ2VtX2ZkLCBmZW5jZSwgaSA8IGNvdW50ID8gZmFsc2UgOiB0cnVlKTsKKwljbG9zZShmZW5j ZSk7CisKKwkvKiBDaGVjayBhdCBsZWFzdCBhcyBtYW55IGludGVycnVwdHMgaGFzIGJlZW4gZ2Vu ZXJhdGVkLiAqLworCWJ1c3kgPSBwbXVfcmVhZF9zaW5nbGUoZmQpOworCWlndF9hc3NlcnQoYnVz eSA+IGNvdW50IC0gMSk7CisKKwljbG9zZShmZCk7Cit9CisKK3N0YXRpYyB2b2lkCit0ZXN0X2Zy ZXF1ZW5jeShpbnQgZ2VtX2ZkKQoreworCWlndF9zcGluX3QgKnNwaW47CisJdWludDY0X3QgaWRs ZVsyXSwgYnVzeVsyXTsKKwlpbnQgZmQ7CisKKwlmZCA9IG9wZW5fZ3JvdXAoSTkxNV9QTVVfUkVR VUVTVEVEX0ZSRVFVRU5DWSwgLTEpOworCW9wZW5fZ3JvdXAoSTkxNV9QTVVfQUNUVUFMX0ZSRVFV RU5DWSwgZmQpOworCisJZ2VtX3F1aWVzY2VudF9ncHUoZ2VtX2ZkKTsKKwl1c2xlZXAoYmF0Y2hf ZHVyYXRpb25fbnMgLyAxMDAwKTsKKworCXBtdV9yZWFkX211bHRpKGZkLCAyLCBpZGxlKTsKKwor CXNwaW4gPSBpZ3Rfc3Bpbl9iYXRjaF9uZXcoZ2VtX2ZkLCAwLCBJOTE1X0VYRUNfUkVOREVSLCAw KTsKKwlpZ3Rfc3Bpbl9iYXRjaF9zZXRfdGltZW91dChzcGluLCBiYXRjaF9kdXJhdGlvbl9ucyk7 CisJZ2VtX3N5bmMoZ2VtX2ZkLCBzcGluLT5oYW5kbGUpOworCisJcG11X3JlYWRfbXVsdGkoZmQs IDIsIGJ1c3kpOworCisJaWd0X2Fzc2VydChidXN5WzBdID4gaWRsZVswXSk7CisJaWd0X2Fzc2Vy dChidXN5WzFdID4gaWRsZVsxXSk7CisKKwlpZ3Rfc3Bpbl9iYXRjaF9mcmVlKGdlbV9mZCwgc3Bp bik7CisJY2xvc2UoZmQpOworfQorCitzdGF0aWMgdm9pZAordGVzdF9yYzYoaW50IGdlbV9mZCkK K3sKKwlpbnQ2NF90IGR1cmF0aW9uX25zID0gMiAqIDEwMDAgKiAxMDAwICogMTAwMDsKKwl1aW50 NjRfdCBpZGxlLCBidXN5LCBwcmV2OworCWludCBmZCwgZnc7CisKKwlmZCA9IG9wZW5fcG11KEk5 MTVfUE1VX1JDNl9SRVNJREVOQ1kpOworCisJZ2VtX3F1aWVzY2VudF9ncHUoZ2VtX2ZkKTsKKwor CS8qIEdvIGlkbGUgYW5kIGNoZWNrIGZ1bGwgUkM2LiAqLworCXByZXYgPSBwbXVfcmVhZF9zaW5n bGUoZmQpOworCWd1YXJhbnRlZWRfdXNsZWVwKGR1cmF0aW9uX25zIC8gMTAwMCk7CisJaWRsZSA9 IHBtdV9yZWFkX3NpbmdsZShmZCk7CisKKwlhc3NlcnRfd2l0aGluX2Vwc2lsb24oaWRsZSAtIHBy ZXYsIGR1cmF0aW9uX25zLCB0b2xlcmFuY2UpOworCisJLyogV2FrZSB1cCBkZXZpY2UgYW5kIGNo ZWNrIG5vIFJDNi4gKi8KKwlmdyA9IGlndF9vcGVuX2ZvcmNld2FrZV9oYW5kbGUoZ2VtX2ZkKTsK KwlpZ3RfYXNzZXJ0KGZ3ID49IDApOworCisJcHJldiA9IHBtdV9yZWFkX3NpbmdsZShmZCk7CisJ Z3VhcmFudGVlZF91c2xlZXAoZHVyYXRpb25fbnMgLyAxMDAwKTsKKwlidXN5ID0gcG11X3JlYWRf c2luZ2xlKGZkKTsKKworCWFzc2VydF93aXRoaW5fZXBzaWxvbihidXN5IC0gcHJldiwgMC4wLCB0 b2xlcmFuY2UpOworCisJY2xvc2UoZncpOworCWNsb3NlKGZkKTsKK30KKworc3RhdGljIHZvaWQK K3Rlc3RfcmM2cChpbnQgZ2VtX2ZkKQoreworCWludDY0X3QgZHVyYXRpb25fbnMgPSAyICogMTAw MCAqIDEwMDAgKiAxMDAwOworCXVuc2lnbmVkIGludCBudW1fcG11ID0gMTsKKwl1aW50NjRfdCBp ZGxlWzNdLCBidXN5WzNdLCBwcmV2WzNdOworCXVuc2lnbmVkIGludCBpOworCWludCBmZCwgcmV0 LCBmdzsKKworCWZkID0gb3Blbl9ncm91cChJOTE1X1BNVV9SQzZfUkVTSURFTkNZLCAtMSk7CisJ cmV0ID0gcGVyZl9pOTE1X29wZW5fZ3JvdXAoSTkxNV9QTVVfUkM2cF9SRVNJREVOQ1ksIGZkKTsK KwlpZiAocmV0ID4gMCkgeworCQludW1fcG11Kys7CisJCXJldCA9IHBlcmZfaTkxNV9vcGVuX2dy b3VwKEk5MTVfUE1VX1JDNnBwX1JFU0lERU5DWSwgZmQpOworCQlpZiAocmV0ID4gMCkKKwkJCW51 bV9wbXUrKzsKKwl9CisKKwlpZ3RfcmVxdWlyZShudW1fcG11ID09IDMpOworCisJZ2VtX3F1aWVz Y2VudF9ncHUoZ2VtX2ZkKTsKKworCS8qIEdvIGlkbGUgYW5kIGNoZWNrIGZ1bGwgUkM2LiAqLwor CXBtdV9yZWFkX211bHRpKGZkLCBudW1fcG11LCBwcmV2KTsKKwlndWFyYW50ZWVkX3VzbGVlcChk dXJhdGlvbl9ucyAvIDEwMDApOworCXBtdV9yZWFkX211bHRpKGZkLCBudW1fcG11LCBpZGxlKTsK KworCWZvciAoaSA9IDA7IGkgPCBudW1fcG11OyBpKyspCisJCWFzc2VydF93aXRoaW5fZXBzaWxv bihpZGxlW2ldIC0gcHJldltpXSwgZHVyYXRpb25fbnMsCisJCQkJICAgICAgdG9sZXJhbmNlKTsK KworCS8qIFdha2UgdXAgZGV2aWNlIGFuZCBjaGVjayBubyBSQzYuICovCisJZncgPSBpZ3Rfb3Bl bl9mb3JjZXdha2VfaGFuZGxlKGdlbV9mZCk7CisJaWd0X2Fzc2VydChmdyA+PSAwKTsKKworCXBt dV9yZWFkX211bHRpKGZkLCBudW1fcG11LCBwcmV2KTsKKwlndWFyYW50ZWVkX3VzbGVlcChkdXJh dGlvbl9ucyAvIDEwMDApOworCXBtdV9yZWFkX211bHRpKGZkLCBudW1fcG11LCBidXN5KTsKKwor CWZvciAoaSA9IDA7IGkgPCBudW1fcG11OyBpKyspCisJCWFzc2VydF93aXRoaW5fZXBzaWxvbihi dXN5W2ldIC0gcHJldltpXSwgMC4wLCB0b2xlcmFuY2UpOworCisJY2xvc2UoZncpOworCWNsb3Nl KGZkKTsKK30KKworaWd0X21haW4KK3sKKwljb25zdCB1bnNpZ25lZCBpbnQgbnVtX290aGVyX21l dHJpY3MgPQorCQkJCUk5MTVfUE1VX0xBU1QgLSBfX0k5MTVfUE1VX09USEVSKDApICsgMTsKKwl1 bnNpZ25lZCBpbnQgbnVtX2VuZ2luZXMgPSAwOworCWludCBmZCA9IC0xOworCWNvbnN0IHN0cnVj dCBpbnRlbF9leGVjdXRpb25fZW5naW5lMiAqZTsKKwl1bnNpZ25lZCBpbnQgaTsKKworCWlndF9m aXh0dXJlIHsKKwkJZmQgPSBkcm1fb3Blbl9kcml2ZXJfbWFzdGVyKERSSVZFUl9JTlRFTCk7CisK KwkJaWd0X3JlcXVpcmVfZ2VtKGZkKTsKKwkJaWd0X3JlcXVpcmUoaTkxNV90eXBlX2lkKCkgPiAw KTsKKworCQlmb3JfZWFjaF9lbmdpbmVfY2xhc3NfaW5zdGFuY2UoZmQsIGUpIHsKKwkJCWlmIChn ZW1faGFzX2VuZ2luZShmZCwgZS0+Y2xhc3MsIGUtPmluc3RhbmNlKSkKKwkJCQludW1fZW5naW5l cysrOworCQl9CisJfQorCisJLyoqCisJICogVGVzdCBpbnZhbGlkIGFjY2VzcyB2aWEgcGVyZiBB UEkgaXMgcmVqZWN0ZWQuCisJICovCisJaWd0X3N1YnRlc3QoImludmFsaWQtaW5pdCIpCisJCWlu dmFsaWRfaW5pdCgpOworCisJZm9yX2VhY2hfZW5naW5lX2NsYXNzX2luc3RhbmNlKGZkLCBlKSB7 CisJCS8qKgorCQkgKiBUZXN0IHRoYXQgYSBzaW5nbGUgZW5naW5lIG1ldHJpYyBjYW4gYmUgaW5p dGlhbGl6ZWQuCisJCSAqLworCQlpZ3Rfc3VidGVzdF9mKCJpbml0LXF1ZXVlZC0lcyIsIGUtPm5h bWUpCisJCQlpbml0KGZkLCBlLCBJOTE1X1NBTVBMRV9RVUVVRUQpOworCisJCWlndF9zdWJ0ZXN0 X2YoImluaXQtYnVzeS0lcyIsIGUtPm5hbWUpCisJCQlpbml0KGZkLCBlLCBJOTE1X1NBTVBMRV9C VVNZKTsKKworCQlpZ3Rfc3VidGVzdF9mKCJpbml0LXdhaXQtJXMiLCBlLT5uYW1lKQorCQkJaW5p dChmZCwgZSwgSTkxNV9TQU1QTEVfV0FJVCk7CisKKwkJaWd0X3N1YnRlc3RfZigiaW5pdC1zZW1h LSVzIiwgZS0+bmFtZSkKKwkJCWluaXQoZmQsIGUsIEk5MTVfU0FNUExFX1NFTUEpOworCisJCS8q KgorCQkgKiBUZXN0IHRoYXQgcXVldWVkIG1ldHJpYyB3b3Jrcy4KKwkJICovCisJCWlndF9zdWJ0 ZXN0X2YoInF1ZXVlZC0lcyIsIGUtPm5hbWUpCisJCQlxdWV1ZWQoZmQsIGUpOworCisJCS8qKgor CQkgKiBUZXN0IHRoYXQgZW5naW5lcyBzaG93IG5vdGhpbmcgcXVldWVkIHdoZW4gaWRsZSBvciBi dXN5LgorCQkgKi8KKwkJaWd0X3N1YnRlc3RfZigiaWRsZS1uby1xdWV1ZWQtJXMiLCBlLT5uYW1l KQorCQkJc2luZ2xlKGZkLCBlLCBJOTE1X1NBTVBMRV9RVUVVRUQsIGZhbHNlKTsKKworCQlpZ3Rf c3VidGVzdF9mKCJidXN5LW5vLXF1ZXVlZC0lcyIsIGUtPm5hbWUpCisJCQlzaW5nbGUoZmQsIGUs IEk5MTVfU0FNUExFX1FVRVVFRCwgdHJ1ZSk7CisKKwkJLyoqCisJCSAqIFRlc3QgdGhhdCBlbmdp bmVzIHNob3cgbm8gbG9hZCB3aGVuIGlkbGUuCisJCSAqLworCQlpZ3Rfc3VidGVzdF9mKCJpZGxl LSVzIiwgZS0+bmFtZSkKKwkJCXNpbmdsZShmZCwgZSwgSTkxNV9TQU1QTEVfQlVTWSwgZmFsc2Up OworCisJCS8qKgorCQkgKiBUZXN0IHRoYXQgYSBzaW5nbGUgZW5naW5lIHJlcG9ydHMgbG9hZCBj b3JyZWN0bHkuCisJCSAqLworCQlpZ3Rfc3VidGVzdF9mKCJidXN5LSVzIiwgZS0+bmFtZSkKKwkJ CXNpbmdsZShmZCwgZSwgSTkxNV9TQU1QTEVfQlVTWSwgdHJ1ZSk7CisKKwkJLyoqCisJCSAqIFRl c3QgdGhhdCB3aGVuIG9uZSBlbmdpbmUgaXMgbG9hZGVkIG90aGVyIHJlcG9ydCBubyBsb2FkLgor CQkgKi8KKwkJaWd0X3N1YnRlc3RfZigiYnVzeS1jaGVjay1hbGwtJXMiLCBlLT5uYW1lKQorCQkJ YnVzeV9jaGVja19hbGwoZmQsIGUsIG51bV9lbmdpbmVzKTsKKworCQkvKioKKwkJICogVGVzdCB0 aGF0IHdoZW4gYWxsIGV4Y2VwdCBvbmUgZW5naW5lIGFyZSBsb2FkZWQgYWxsIGxvYWRzCisJCSAq IGFyZSBjb3JyZWN0bHkgcmVwb3J0ZWQuCisJCSAqLworCQlpZ3Rfc3VidGVzdF9mKCJtb3N0LWJ1 c3ktY2hlY2stYWxsLSVzIiwgZS0+bmFtZSkKKwkJCW1vc3RfYnVzeV9jaGVja19hbGwoZmQsIGUs IG51bV9lbmdpbmVzKTsKKworCQkvKioKKwkJICogVGVzdCB0aGF0IHNlbXBob3JlIGNvdW50ZXJz IHJlcG9ydCBubyBhY3Rpdml0eSBvbiBpZGxlCisJCSAqIG9yIGJ1c3kgZW5naW5lcy4KKwkJICov CisJCWlndF9zdWJ0ZXN0X2YoImlkbGUtbm8tc2VtYXBob3Jlcy0lcyIsIGUtPm5hbWUpCisJCQlu b19zZW1hKGZkLCBlLCBmYWxzZSk7CisKKwkJaWd0X3N1YnRlc3RfZigiYnVzeS1uby1zZW1hcGhv cmVzLSVzIiwgZS0+bmFtZSkKKwkJCW5vX3NlbWEoZmQsIGUsIHRydWUpOworCisJCS8qKgorCQkg KiBDaGVjayB0aGF0IHR3byBwZXJmIGNsaWVudHMgZG8gbm90IGluZmx1ZW5jZSBlYWNoIG90aGVy cworCQkgKiBvYnNlcnZhdGlvbnMuCisJCSAqLworCQlpZ3Rfc3VidGVzdF9mKCJtdWx0aS1jbGll bnQtJXMiLCBlLT5uYW1lKQorCQkJbXVsdGlfY2xpZW50KGZkLCBlKTsKKwl9CisKKwkvKioKKwkg KiBUZXN0IHRoYXQgd2hlbiBhbGwgZW5naW5lcyBhcmUgbG9hZGVkIGFsbCBsb2FkcyBhcmUKKwkg KiBjb3JyZWN0bHkgcmVwb3J0ZWQuCisJICovCisJaWd0X3N1YnRlc3QoImFsbC1idXN5LWNoZWNr LWFsbCIpCisJCWFsbF9idXN5X2NoZWNrX2FsbChmZCwgbnVtX2VuZ2luZXMpOworCisJLyoqCisJ ICogVGVzdCB0aGF0IG5vbi1lbmdpbmUgY291bnRlcnMgY2FuIGJlIGluaXRpYWxpemVkIGFuZCBy ZWFkLiBBcGFydAorCSAqIGZyb20gdGhlIGludmFsaWQgbWV0cmljIHdoaWNoIHNob3VsZCBmYWls LgorCSAqLworCWZvciAoaSA9IDA7IGkgPCBudW1fb3RoZXJfbWV0cmljcyArIDE7IGkrKykgewor CQlpZ3Rfc3VidGVzdF9mKCJvdGhlci1pbml0LSV1IiwgaSkKKwkJCWluaXRfb3RoZXIoaSwgaSA8 IG51bV9vdGhlcl9tZXRyaWNzKTsKKworCQlpZ3Rfc3VidGVzdF9mKCJvdGhlci1yZWFkLSV1Iiwg aSkKKwkJCXJlYWRfb3RoZXIoaSwgaSA8IG51bV9vdGhlcl9tZXRyaWNzKTsKKwl9CisKKwkvKioK KwkgKiBUZXN0IGNvdW50ZXJzIGFyZSBub3QgYWZmZWN0ZWQgYnkgQ1BVIG9mZmxpbmUvb25saW5l IGV2ZW50cy4KKwkgKi8KKwlpZ3Rfc3VidGVzdCgiY3B1LWhvdHBsdWciKQorCQljcHVfaG90cGx1 ZyhmZCk7CisKKwkvKioKKwkgKiBUZXN0IEdQVSBmcmVxdWVuY3kuCisJICovCisJaWd0X3N1YnRl c3QoImZyZXF1ZW5jeSIpCisJCXRlc3RfZnJlcXVlbmN5KGZkKTsKKworCS8qKgorCSAqIFRlc3Qg aW50ZXJydXB0IGNvdW50IHJlcG9ydGluZy4KKwkgKi8KKwlpZ3Rfc3VidGVzdCgiaW50ZXJydXB0 cyIpCisJCXRlc3RfaW50ZXJydXB0cyhmZCk7CisKKwkvKioKKwkgKiBUZXN0IFJDNiByZXNpZGVu Y3kgcmVwb3J0aW5nLgorCSAqLworCWlndF9zdWJ0ZXN0KCJyYzYiKQorCQl0ZXN0X3JjNihmZCk7 CisKKwkvKioKKwkgKiBUZXN0IFJDNnAgcmVzaWRlbmN5IHJlcG9ydGluZy4KKwkgKi8KKwlpZ3Rf c3VidGVzdCgicmM2cCIpCisJCXRlc3RfcmM2cChmZCk7Cit9Ci0tIAoyLjkuNQoKX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KSW50ZWwtZ2Z4IG1haWxpbmcg bGlzdApJbnRlbC1nZnhAbGlzdHMuZnJlZWRlc2t0b3Aub3JnCmh0dHBzOi8vbGlzdHMuZnJlZWRl c2t0b3Aub3JnL21haWxtYW4vbGlzdGluZm8vaW50ZWwtZ2Z4Cg==