From mboxrd@z Thu Jan 1 00:00:00 1970 From: Tvrtko Ursulin Subject: [PATCH i-g-t v13 2/2] tests/gem_ctx_sseu: Dynamic (sub)slice programming tests Date: Fri, 14 Sep 2018 17:04:38 +0100 Message-ID: <20180914160438.16197-1-tvrtko.ursulin@linux.intel.com> References: <20180911144210.16613-1-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-wr1-x441.google.com (mail-wr1-x441.google.com [IPv6:2a00:1450:4864:20::441]) by gabe.freedesktop.org (Postfix) with ESMTPS id D44056E931 for ; Fri, 14 Sep 2018 16:04:45 +0000 (UTC) Received: by mail-wr1-x441.google.com with SMTP id v16-v6so11143846wro.11 for ; Fri, 14 Sep 2018 09:04:45 -0700 (PDT) In-Reply-To: <20180911144210.16613-1-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: igt-dev@lists.freedesktop.org Cc: Intel-gfx@lists.freedesktop.org List-Id: intel-gfx@lists.freedesktop.org RnJvbTogTGlvbmVsIExhbmR3ZXJsaW4gPGxpb25lbC5nLmxhbmR3ZXJsaW5AaW50ZWwuY29tPgoK VmVyaWZ5IHRoYXQgdGhlIHBlci1jb250ZXh0IGR5bmFtaWMgU1NFVSB1QVBJIHdvcmtzIGFzIGV4 cGVjdGVkLgoKVG8gYWNoaWV2ZSB0aGF0LCBpbiB0aGUgYWJzZW5jZSBvZiBhIGJldHRlciBtZWNo YW1pc20sIHdlIHJlYWQgdGhlIHZhbHVlCm9mIFBXUl9DTEtfU1RBVEUgcmVnaXN0ZXIsIG9yIHVz ZSBNSV9TRVRfUFJFRElDQVRFIG9uIHBsYXRmb3JtcyBiZWZvcmUKQ2Fubm9ubGFrZS4KClRoaXMg cmVnaXN0ZXIgaXMgd3JpdHRlbiB0byBieSB0aGUgR1BVIG9uIGNvbnRleHQgcmVzdG9yZSBzbyB0 aGlzIHdheQp3ZSB2ZXJpZnkgaTkxNSBpcyBjb3JyZWN0bHkgdXBkYXRpbmcgdGhlIGNvbnRleHQg aW1hZ2UgaW4gYWxsCmNpcmN1bXN0YW5jZXMuCgp2MjogQWRkIHN1YnNsaWNlIHRlc3RzIChMaW9u ZWwpCiAgICBVc2UgTUlfU0VUX1BSRURJQ0FURSBmb3IgZnVydGhlciB2ZXJpZmljYXRpb24gd2hl biBhdmFpbGFibGUgKExpb25lbCkKCnYzOiBSZW5hbWUgdG8gZ2VtX2N0eF9ycGNzIChMaW9uZWwp Cgp2NDogVXBkYXRlIGtlcm5lbCBBUEkgKExpb25lbCkKICAgIEFkZCAwIHZhbHVlIHRlc3QgKExp b25lbCkKICAgIEV4ZXJjaXNlIGludmFsaWQgdmFsdWVzIChMaW9uZWwpCgp2NTogQWRkIHBlcmYg dGVzdHMgKExpb25lbCkKCnY2OiBBZGQgbmV3IHN5c2ZzIGVudHJ5IHRlc3RzIChMaW9uZWwpCgp2 NzogVGVzdCByc3ZkIGZpZWxkcwogICAgVXBkYXRlIGZvciBrZXJuZWwgc2VyaWVzIGNoYW5nZXMK CnY4OiBEcm9wIHRlc3Rfbm9fc3NldV9zdXBwb3J0KCkgdGVzdCAoS2VsdmluKQogICAgRHJvcCBk cm1faW50ZWxfKigpIGFwaXMgKENocmlzKQoKdjk6IGJ5IENocmlzOgogICAgRHJvcCBhbGwgZG9f aW9jdGwvZG9faW9jdGxfZXJyKCkKICAgIFVzZSBnZW1fY29udGV4dF9bZ3NdZXRfcGFyYW0oKQog ICAgVXNlIGdlbV9yZWFkKCkgaW5zdGVhZCBvZiBtYXBwaW5nIG1lbW9yeQogICAgYnkgTGlvbmVs OgogICAgVGVzdCBkeW5hbWljIHNzZXUgb24vb2ZmIG1vcmUKClR2cnRrbyBVcnN1bGluOgoKdjEw OgogKiBWYXJpb3VzIHN0eWxlIHR3ZWFrcyBhbmQgcmVmYWN0b3JpbmdzLgogKiBOZXcgdGVzdCBj b3ZlcmFnZS4KCnYxMToKICogQ2hhbmdlIHBsYXRmb3JtIHN1cHBvcnQgdG8ganVzdCBHZW4xMS4K ICogU2ltcGxpZnkgYXZhaWxhYmlsaXR5IHRlc3QuIChDaHJpcyBXaWxzb24pCiAqIE1vcmUgaW52 YWxpZCBwb2ludGVyIHRlc3RzLiAoQ2hyaXMgV2lsc29uKQoKdjEyOgogKiBGaXggTUFQX0ZJWEVE IHVzZSAoZG9oISkuCiAqIEZpeCBnZXQvc2V0IGNvcHkmcGFzdGUgZXJyb3JzLgogKiBEcm9wIHN1 cHBvcnRlZCBwbGF0Zm9ybSB0ZXN0LiAoQ2hyaXMgV2lsc29uKQogKiBBZGQgbW1hcF9fZ3R0IHRl c3QuIChDaHJpcyBXaWxzb24pCgp2MTM6CiAqIENvbW1pdCBtZXNzYWdlIHR3ZWFrcy4KICogQWRk ZWQgcmVzZXQvaGFuZy9zdXNwZW5kIHRlc3RzLiAoQ2hyaXMgV2lsc29uKQogKiBBc3NlcnQgc3Bp bm5lciBpcyBidXN5LiAoQ2hyaXMgV2lsc29uKQogKiBSZW1vdmUgc29tZSBtb3JlIEFCSSBhc3N1 bXB0aW9ucy4gKENocmlzIFdpbHNvbikKClNpZ25lZC1vZmYtYnk6IExpb25lbCBMYW5kd2VybGlu IDxsaW9uZWwuZy5sYW5kd2VybGluQGludGVsLmNvbT4KU2lnbmVkLW9mZi1ieTogVHZydGtvIFVy c3VsaW4gPHR2cnRrby51cnN1bGluQGludGVsLmNvbT4KLS0tCiB0ZXN0cy9NYWtlZmlsZS5hbSAg ICAgIHwgICAgMSArCiB0ZXN0cy9NYWtlZmlsZS5zb3VyY2VzIHwgICAgMSArCiB0ZXN0cy9nZW1f Y3R4X3BhcmFtLmMgIHwgICAgNCArLQogdGVzdHMvZ2VtX2N0eF9zc2V1LmMgICB8IDExMjggKysr KysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKwogdGVzdHMvbWVzb24uYnVpbGQg ICAgICB8ICAgIDcgKwogNSBmaWxlcyBjaGFuZ2VkLCAxMTQwIGluc2VydGlvbnMoKyksIDEgZGVs ZXRpb24oLSkKIGNyZWF0ZSBtb2RlIDEwMDY0NCB0ZXN0cy9nZW1fY3R4X3NzZXUuYwoKZGlmZiAt LWdpdCBhL3Rlc3RzL01ha2VmaWxlLmFtIGIvdGVzdHMvTWFrZWZpbGUuYW0KaW5kZXggZWU1YTdj NWU4M2I4Li42YjY3YmQyY2MxN2EgMTAwNjQ0Ci0tLSBhL3Rlc3RzL01ha2VmaWxlLmFtCisrKyBi L3Rlc3RzL01ha2VmaWxlLmFtCkBAIC0xMDcsNiArMTA3LDcgQEAgZ2VtX2Nsb3NlX3JhY2VfQ0ZM QUdTID0gJChBTV9DRkxBR1MpICQoVEhSRUFEX0NGTEFHUykKIGdlbV9jbG9zZV9yYWNlX0xEQURE ID0gJChMREFERCkgLWxwdGhyZWFkCiBnZW1fY3R4X3RocmFzaF9DRkxBR1MgPSAkKEFNX0NGTEFH UykgJChUSFJFQURfQ0ZMQUdTKQogZ2VtX2N0eF90aHJhc2hfTERBREQgPSAkKExEQUREKSAtbHB0 aHJlYWQKK2dlbV9jdHhfc3NldV9MREFERCA9ICQoTERBREQpICQodG9wX2J1aWxkZGlyKS9saWIv bGliaWd0X3BlcmYubGEKIGdlbV9leGVjX3BhcmFsbGVsX0NGTEFHUyA9ICQoQU1fQ0ZMQUdTKSAk KFRIUkVBRF9DRkxBR1MpCiBnZW1fZXhlY19wYXJhbGxlbF9MREFERCA9ICQoTERBREQpIC1scHRo cmVhZAogZ2VtX2ZlbmNlX3RocmFzaF9DRkxBR1MgPSAkKEFNX0NGTEFHUykgJChUSFJFQURfQ0ZM QUdTKQpkaWZmIC0tZ2l0IGEvdGVzdHMvTWFrZWZpbGUuc291cmNlcyBiL3Rlc3RzL01ha2VmaWxl LnNvdXJjZXMKaW5kZXggYzg0OTMzZjFkOTcxLi5mOGYyYzhkNjdkNzIgMTAwNjQ0Ci0tLSBhL3Rl c3RzL01ha2VmaWxlLnNvdXJjZXMKKysrIGIvdGVzdHMvTWFrZWZpbGUuc291cmNlcwpAQCAtNTYs NiArNTYsNyBAQCBURVNUU19wcm9ncyA9IFwKIAlnZW1fY3R4X2V4ZWMgXAogCWdlbV9jdHhfaXNv bGF0aW9uIFwKIAlnZW1fY3R4X3BhcmFtIFwKKwlnZW1fY3R4X3NzZXUgXAogCWdlbV9jdHhfc3dp dGNoIFwKIAlnZW1fY3R4X3RocmFzaCBcCiAJZ2VtX2RvdWJsZV9pcnFfbG9vcCBcCmRpZmYgLS1n aXQgYS90ZXN0cy9nZW1fY3R4X3BhcmFtLmMgYi90ZXN0cy9nZW1fY3R4X3BhcmFtLmMKaW5kZXgg YzQ2ZmQ3MDliMGQ3Li5hZjFhZmVhYTJmMmYgMTAwNjQ0Ci0tLSBhL3Rlc3RzL2dlbV9jdHhfcGFy YW0uYworKysgYi90ZXN0cy9nZW1fY3R4X3BhcmFtLmMKQEAgLTI5NCwxMSArMjk0LDEzIEBAIGln dF9tYWluCiAJCQlzZXRfcHJpb3JpdHkoZmQpOwogCX0KIAorCS8qIEk5MTVfQ09OVEVYVF9QQVJB TV9TU0VVIHRlc3RzIGFyZSBsb2NhdGVkIGluIGdlbV9jdHhfc3NldS5jICovCisKIAkvKiBOT1RF OiBUaGlzIHRlc3RjYXNlIGludGVudGlvbmFsbHkgdGVzdHMgZm9yIHRoZSBuZXh0IGZyZWUgcGFy YW1ldGVyCiAJICogdG8gY2F0Y2ggQUJJIGV4dGVuc2lvbnMuIERvbid0ICJmaXgiIHRoaXMgdGVz dGNhc2Ugd2l0aG91dCBhZGRpbmcgYWxsCiAJICogdGhlIHRlc3RzIGZvciB0aGUgbmV3IHBhcmFt IGZpcnN0LgogCSAqLwotCWFyZy5wYXJhbSA9IEk5MTVfQ09OVEVYVF9QQVJBTV9QUklPUklUWSAr IDE7CisJYXJnLnBhcmFtID0gSTkxNV9DT05URVhUX1BBUkFNX1NTRVUgKyAxOwogCiAJaWd0X3N1 YnRlc3QoImludmFsaWQtcGFyYW0tZ2V0IikgewogCQlhcmcuY3R4X2lkID0gY3R4OwpkaWZmIC0t Z2l0IGEvdGVzdHMvZ2VtX2N0eF9zc2V1LmMgYi90ZXN0cy9nZW1fY3R4X3NzZXUuYwpuZXcgZmls ZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAuLjQ2NjljNDBmMzRmYgotLS0gL2Rldi9u dWxsCisrKyBiL3Rlc3RzL2dlbV9jdHhfc3NldS5jCkBAIC0wLDAgKzEsMTEyOCBAQAorLyoKKyAq IENvcHlyaWdodCDCqSAyMDE3LTIwMTggSW50ZWwgQ29ycG9yYXRpb24KKyAqCisgKiBQZXJtaXNz aW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRh aW5pbmcgYQorICogY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50 YXRpb24gZmlsZXMgKHRoZSAiU29mdHdhcmUiKSwKKyAqIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJl IHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24KKyAqIHRo ZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRl LCBzdWJsaWNlbnNlLAorICogYW5kL29yIHNlbGwgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5k IHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlCisgKiBTb2Z0d2FyZSBpcyBmdXJuaXNoZWQg dG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOgorICoKKyAqIFRo ZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIChpbmNs dWRpbmcgdGhlIG5leHQKKyAqIHBhcmFncmFwaCkgc2hhbGwgYmUgaW5jbHVkZWQgaW4gYWxsIGNv cGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUKKyAqIFNvZnR3YXJlLgorICoKKyAq IFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFO WSBLSU5ELCBFWFBSRVNTIE9SCisgKiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVE IFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSwKKyAqIEZJVE5FU1MgRk9SIEEg UEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuICBJTiBOTyBFVkVOVCBTSEFM TAorICogVEhFIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkg Q0xBSU0sIERBTUFHRVMgT1IgT1RIRVIKKyAqIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJ T04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HCisgKiBGUk9NLCBPVVQg T0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVS IERFQUxJTkdTCisgKiBJTiBUSEUgU09GVFdBUkUuCisgKgorICogQXV0aG9yczoKKyAqICAgIExp b25lbCBMYW5kd2VybGluIDxsaW9uZWwuZy5sYW5kd2VybGluQGludGVsLmNvbT4KKyAqCisgKi8K KworI2luY2x1ZGUgImlndC5oIgorI2luY2x1ZGUgPHN0ZGlvLmg+CisjaW5jbHVkZSA8c3RkbGli Lmg+CisjaW5jbHVkZSA8c3RyaW5nLmg+CisjaW5jbHVkZSA8dW5pc3RkLmg+CisjaW5jbHVkZSA8 ZmNudGwuaD4KKyNpbmNsdWRlIDxzaWduYWwuaD4KKyNpbmNsdWRlIDxlcnJuby5oPgorI2luY2x1 ZGUgPHRpbWUuaD4KKyNpbmNsdWRlIDxzeXMvbW1hbi5oPgorI2luY2x1ZGUgPHN5cy93YWl0Lmg+ CisKKyNpbmNsdWRlICJpZ3RfZHVtbXlsb2FkLmgiCisjaW5jbHVkZSAiaWd0X3BlcmYuaCIKKyNp bmNsdWRlICJpZ3Rfc3lzZnMuaCIKKyNpbmNsdWRlICJpb2N0bF93cmFwcGVycy5oIgorCitJR1Rf VEVTVF9ERVNDUklQVElPTigiVGVzdCBjb250ZXh0IHJlbmRlciBwb3dlcmdhdGluZyBwcm9ncmFt bWluZy4iKTsKKworI2RlZmluZSBNSV9TVE9SRV9SRUdJU1RFUl9NRU0gKDB4MjQgPDwgMjMpCisK KyNkZWZpbmUgTUlfU0VUX1BSRURJQ0FURSAgICAgICgweDEgPDwgMjMpCisjZGVmaW5lICBNSV9T RVRfUFJFRElDQVRFX05PT1BfTkVWRVIgICAgICAgICAoMCkKKyNkZWZpbmUgIE1JX1NFVF9QUkVE SUNBVEVfTk9PUF9SRVNVTFQyX0NMRUFSICgxKQorI2RlZmluZSAgTUlfU0VUX1BSRURJQ0FURV9O T09QX1JFU1VMVDJfU0VUICAgKDIpCisjZGVmaW5lICBNSV9TRVRfUFJFRElDQVRFX05PT1BfUkVT VUxUX0NMRUFSICAoMykKKyNkZWZpbmUgIE1JX1NFVF9QUkVESUNBVEVfTk9PUF9SRVNVTFRfU0VU ICAgICg0KQorI2RlZmluZSAgTUlfU0VUX1BSRURJQ0FURV8xX1NMSUNFUyAgICAgICAgICAgKDUp CisjZGVmaW5lICBNSV9TRVRfUFJFRElDQVRFXzJfU0xJQ0VTICAgICAgICAgICAoNikKKyNkZWZp bmUgIE1JX1NFVF9QUkVESUNBVEVfM19TTElDRVMgICAgICAgICAgICg3KQorCisjZGVmaW5lIEdF TjhfUl9QV1JfQ0xLX1NUQVRFCQkweDIwQzgKKyNkZWZpbmUgICBHRU44X1JQQ1NfRU5BQkxFCQko MSA8PCAzMSkKKyNkZWZpbmUgICBHRU44X1JQQ1NfU19DTlRfRU5BQkxFCSgxIDw8IDE4KQorI2Rl ZmluZSAgIEdFTjhfUlBDU19TX0NOVF9TSElGVAkJMTUKKyNkZWZpbmUgICBHRU44X1JQQ1NfU19D TlRfTUFTSwkJKDB4NyA8PCBHRU44X1JQQ1NfU19DTlRfU0hJRlQpCisjZGVmaW5lICAgR0VOMTFf UlBDU19TX0NOVF9TSElGVAkxMgorI2RlZmluZSAgIEdFTjExX1JQQ1NfU19DTlRfTUFTSwkJKDB4 M2YgPDwgR0VOMTFfUlBDU19TX0NOVF9TSElGVCkKKyNkZWZpbmUgICBHRU44X1JQQ1NfU1NfQ05U X0VOQUJMRQkoMSA8PCAxMSkKKyNkZWZpbmUgICBHRU44X1JQQ1NfU1NfQ05UX1NISUZUCTgKKyNk ZWZpbmUgICBHRU44X1JQQ1NfU1NfQ05UX01BU0sJCSgweDcgPDwgR0VOOF9SUENTX1NTX0NOVF9T SElGVCkKKyNkZWZpbmUgICBHRU44X1JQQ1NfRVVfTUFYX1NISUZUCTQKKyNkZWZpbmUgICBHRU44 X1JQQ1NfRVVfTUFYX01BU0sJCSgweGYgPDwgR0VOOF9SUENTX0VVX01BWF9TSElGVCkKKyNkZWZp bmUgICBHRU44X1JQQ1NfRVVfTUlOX1NISUZUCTAKKyNkZWZpbmUgICBHRU44X1JQQ1NfRVVfTUlO X01BU0sJCSgweGYgPDwgR0VOOF9SUENTX0VVX01JTl9TSElGVCkKKworI2RlZmluZSBSQ1NfVElN RVNUQU1QICgweDIwMDAgKyAweDM1OCkKKworc3RhdGljIHVuc2lnbmVkIGludCBfX2ludGVsX2dl bl9fLCBfX2ludGVsX2RldmlkX187CitzdGF0aWMgdWludDY0X3QgX19zbGljZV9tYXNrX18sIF9f c3Vic2xpY2VfbWFza19fOworc3RhdGljIHVuc2lnbmVkIGludCBfX3NsaWNlX2NvdW50X18sIF9f c3Vic2xpY2VfY291bnRfXzsKKworc3RhdGljIHVpbnQ2NF90IG1hc2tfbWludXNfb25lKHVpbnQ2 NF90IG1hc2spCit7CisJdW5zaWduZWQgaW50IGk7CisKKwlmb3IgKGkgPSAwOyBpIDwgKHNpemVv ZihtYXNrKSAqIDggLSAxKTsgaSsrKSB7CisJCWlmICgoMVVMTCA8PCBpKSAmIG1hc2spCisJCQly ZXR1cm4gbWFzayAmIH4oMVVMTCA8PCBpKTsKKwl9CisKKwlpZ3RfYXNzZXJ0KDApOworCXJldHVy biAwOworfQorCitzdGF0aWMgdWludDY0X3QgbWFza19wbHVzX29uZSh1aW50NjRfdCBtYXNrKQor eworCXVuc2lnbmVkIGludCBpOworCisJZm9yIChpID0gMDsgaSA8IChzaXplb2YobWFzaykgKiA4 IC0gMSk7IGkrKykgeworCQlpZiAoKCgxVUxMIDw8IGkpICYgbWFzaykgPT0gMCkKKwkJCXJldHVy biBtYXNrIHwgKDFVTEwgPDwgaSk7CisJfQorCisJaWd0X2Fzc2VydCgwKTsKKwlyZXR1cm4gMDsK K30KKworc3RhdGljIHVpbnQ2NF90IG1hc2tfbWludXModWludDY0X3QgbWFzaywgaW50IG4pCit7 CisJdW5zaWduZWQgaW50IGk7CisKKwlmb3IgKGkgPSAwOyBpIDwgbjsgaSsrKQorCQltYXNrID0g bWFza19taW51c19vbmUobWFzayk7CisKKwlyZXR1cm4gbWFzazsKK30KKworc3RhdGljIHVpbnQ2 NF90IG1hc2tfcGx1cyh1aW50NjRfdCBtYXNrLCBpbnQgbikKK3sKKwl1bnNpZ25lZCBpbnQgaTsK KworCWZvciAoaSA9IDA7IGkgPCBuOyBpKyspCisJCW1hc2sgPSBtYXNrX3BsdXNfb25lKG1hc2sp OworCisJcmV0dXJuIG1hc2s7Cit9CisKK3N0YXRpYyB1aW50MzJfdCAqCitmaWxsX3JlbG9jYXRp b24odWludDMyX3QgKmJhdGNoLAorCQlzdHJ1Y3QgZHJtX2k5MTVfZ2VtX3JlbG9jYXRpb25fZW50 cnkgKnJlbG9jLAorCQl1aW50MzJfdCBnZW1faGFuZGxlLCB1aW50MzJfdCBkZWx0YSwgLyogaW4g Ynl0ZXMgKi8KKwkJdWludDMyX3Qgb2Zmc2V0LCAvKiBpbiBkd29yZHMgKi8KKwkJdWludDMyX3Qg cmVhZF9kb21haW5zLCB1aW50MzJfdCB3cml0ZV9kb21haW5zKQoreworCXJlbG9jLT50YXJnZXRf aGFuZGxlID0gZ2VtX2hhbmRsZTsKKwlyZWxvYy0+ZGVsdGEgPSBkZWx0YTsKKwlyZWxvYy0+b2Zm c2V0ID0gb2Zmc2V0ICogc2l6ZW9mKHVpbnQzMl90KTsKKwlyZWxvYy0+cHJlc3VtZWRfb2Zmc2V0 ID0gMDsKKwlyZWxvYy0+cmVhZF9kb21haW5zID0gcmVhZF9kb21haW5zOworCXJlbG9jLT53cml0 ZV9kb21haW4gPSB3cml0ZV9kb21haW5zOworCisJKmJhdGNoKysgPSBkZWx0YTsKKwkqYmF0Y2gr KyA9IDA7CisKKwlyZXR1cm4gYmF0Y2g7Cit9CisKKworc3RhdGljIHVpbnQzMl90CityZWFkX3Jw Y3NfcmVnKGludCBmZCwgdWludDMyX3QgY3R4LCB1aW50MzJfdCBleHBlY3RlZF9zbGljZXMsIGln dF9zcGluX3QgKnNwaW4pCit7CisJc3RydWN0IGRybV9pOTE1X2dlbV9leGVjYnVmZmVyMiBleGVj YnVmID0geyB9OworCXN0cnVjdCBkcm1faTkxNV9nZW1fcmVsb2NhdGlvbl9lbnRyeSByZWxvY3Nb Ml07CisJc3RydWN0IGRybV9pOTE1X2dlbV9leGVjX29iamVjdDIgb2JqWzJdOworCXVpbnQzMl90 ICpiYXRjaCwgKmIsIGRhdGFbMl07CisJdW5zaWduZWQgaW50IG5fcmVsb2NzID0gMDsKKwl1aW50 MzJfdCBycGNzOworCisJbWVtc2V0KG9iaiwgMCwgc2l6ZW9mKG9iaikpOworCW9ialswXS5oYW5k bGUgPSBnZW1fY3JlYXRlKGZkLCA0MDk2KTsKKwlvYmpbMV0uaGFuZGxlID0gZ2VtX2NyZWF0ZShm ZCwgNDA5Nik7CisKKwliYXRjaCA9IGIgPQorCSAgICAgIGdlbV9tbWFwX19jcHUoZmQsIG9ialsx XS5oYW5kbGUsIDAsIDQwOTYsIFBST1RfUkVBRCB8IFBST1RfV1JJVEUpOworCisJaWYgKGV4cGVj dGVkX3NsaWNlcyAhPSAwICYmIF9faW50ZWxfZ2VuX18gPCAxMCkKKwkJKmIrKyA9IE1JX1NFVF9Q UkVESUNBVEUgfCAoMSAtIDEpIHwKKwkJICAgICAgIChNSV9TRVRfUFJFRElDQVRFXzFfU0xJQ0VT ICsgZXhwZWN0ZWRfc2xpY2VzIC0gMSk7CisKKwkqYisrID0gTUlfU1RPUkVfUkVHSVNURVJfTUVN IHwgKDQgLSAyKTsKKwkqYisrID0gUkNTX1RJTUVTVEFNUDsKKwliID0gZmlsbF9yZWxvY2F0aW9u KGIsICZyZWxvY3Nbbl9yZWxvY3MrK10sIG9ialswXS5oYW5kbGUsCisJCQkgICAgMCwgYiAtIGJh dGNoLAorCQkJICAgIEk5MTVfR0VNX0RPTUFJTl9SRU5ERVIsIEk5MTVfR0VNX0RPTUFJTl9SRU5E RVIpOworCisJKmIrKyA9IE1JX1NUT1JFX1JFR0lTVEVSX01FTSB8ICg0IC0gMik7CisJKmIrKyA9 IEdFTjhfUl9QV1JfQ0xLX1NUQVRFOworCWIgPSBmaWxsX3JlbG9jYXRpb24oYiwgJnJlbG9jc1tu X3JlbG9jcysrXSwgb2JqWzBdLmhhbmRsZSwKKwkJCSAgICA0LCBiIC0gYmF0Y2gsCisJCQkgICAg STkxNV9HRU1fRE9NQUlOX1JFTkRFUiwgSTkxNV9HRU1fRE9NQUlOX1JFTkRFUik7CisKKwlpZiAo ZXhwZWN0ZWRfc2xpY2VzICE9IDAgJiYgX19pbnRlbF9nZW5fXyA8IDEwKQorCQkqYisrID0gTUlf U0VUX1BSRURJQ0FURSB8ICgxIC0gMSkgfCBNSV9TRVRfUFJFRElDQVRFX05PT1BfTkVWRVI7CisK KwkqYisrID0gTUlfQkFUQ0hfQlVGRkVSX0VORDsKKworCWdlbV9tdW5tYXAoYmF0Y2gsIDQwOTYp OworCisJb2JqWzFdLnJlbG9jYXRpb25fY291bnQgPSBuX3JlbG9jczsKKwlvYmpbMV0ucmVsb2Nz X3B0ciA9IHRvX3VzZXJfcG9pbnRlcihyZWxvY3MpOworCisJZXhlY2J1Zi5idWZmZXJzX3B0ciA9 IHRvX3VzZXJfcG9pbnRlcihvYmopOworCWV4ZWNidWYuYnVmZmVyX2NvdW50ID0gQVJSQVlfU0la RShvYmopOworCWk5MTVfZXhlY2J1ZmZlcjJfc2V0X2NvbnRleHRfaWQoZXhlY2J1ZiwgY3R4KTsK KworCWdlbV9leGVjYnVmKGZkLCAmZXhlY2J1Zik7CisKKwlpZiAoc3BpbikgeworCQlpZ3RfYXNz ZXJ0KGdlbV9ib19idXN5KGZkLCBzcGluLT5oYW5kbGUpKTsKKwkJaWd0X3NwaW5fYmF0Y2hfZW5k KHNwaW4pOworCX0KKworCWdlbV9yZWFkKGZkLCBvYmpbMF0uaGFuZGxlLCAwLCBkYXRhLCBzaXpl b2YoZGF0YSkpOworCisJcnBjcyA9IGRhdGFbMV07CisKKwlpZ3RfZGVidWcoInJjc190aW1lc3Rh bXA9MHgleCBycGNzPTB4JXhcbiIsIGRhdGFbMF0sIGRhdGFbMV0pOworCisJZ2VtX2Nsb3NlKGZk LCBvYmpbMF0uaGFuZGxlKTsKKwlnZW1fY2xvc2UoZmQsIG9ialsxXS5oYW5kbGUpOworCisJcmV0 dXJuIHJwY3M7Cit9CisKK3R5cGVkZWYgdWludDMyX3QgKCpyZWFkX3NsaWNlX2NvdW50X2YpKGlu dCBmZCwgdWludDMyX3QgY3R4LCB1aW50MzJfdCBleHBlY3RlZCwKKwkJCQkgICAgICAgaWd0X3Nw aW5fdCAqc3Bpbik7CisKK3N0YXRpYyByZWFkX3NsaWNlX2NvdW50X2YgX19yZWFkX3NsaWNlX2Nv dW50OworCitzdGF0aWMgdWludDMyX3QKK3JlYWRfc2xpY2VfY291bnQoaW50IGZkLCB1aW50MzJf dCBjdHgsIHVpbnQzMl90IGV4cGVjdGVkX3NsaWNlX2NvdW50KQoreworCXJldHVybiBfX3JlYWRf c2xpY2VfY291bnQoZmQsIGN0eCwgZXhwZWN0ZWRfc2xpY2VfY291bnQsIE5VTEwpOworfQorCitz dGF0aWMgdWludDMyX3QKK2dlbjhfcmVhZF9zbGljZV9jb3VudChpbnQgZmQsIHVpbnQzMl90IGN0 eCwgdWludDMyX3QgZXhwZWN0ZWRfc2xpY2VfY291bnQsCisJCSAgICAgIGlndF9zcGluX3QgKnNw aW4pCit7CisJcmV0dXJuIChyZWFkX3JwY3NfcmVnKGZkLCBjdHgsIGV4cGVjdGVkX3NsaWNlX2Nv dW50LCBzcGluKSAmCisJCUdFTjhfUlBDU19TX0NOVF9NQVNLKSA+PiBHRU44X1JQQ1NfU19DTlRf U0hJRlQ7Cit9CisKK3N0YXRpYyB1aW50MzJfdAorZ2VuMTFfcmVhZF9zbGljZV9jb3VudChpbnQg ZmQsIHVpbnQzMl90IGN0eCwgdWludDMyX3QgZXhwZWN0ZWRfc2xpY2VfY291bnQsCisJCSAgICAg ICBpZ3Rfc3Bpbl90ICpzcGluKQoreworCXJldHVybiAocmVhZF9ycGNzX3JlZyhmZCwgY3R4LCBl eHBlY3RlZF9zbGljZV9jb3VudCwgc3BpbikgJgorCQlHRU4xMV9SUENTX1NfQ05UX01BU0spID4+ IEdFTjExX1JQQ1NfU19DTlRfU0hJRlQ7Cit9CisKK3N0YXRpYyB1aW50MzJfdAorcmVhZF9zdWJz bGljZV9jb3VudChpbnQgZmQsIHVpbnQzMl90IGN0eCkKK3sKKwlyZXR1cm4gKHJlYWRfcnBjc19y ZWcoZmQsIGN0eCwgMCwgTlVMTCkgJiBHRU44X1JQQ1NfU1NfQ05UX01BU0spID4+CisJICAgICAg IEdFTjhfUlBDU19TU19DTlRfU0hJRlQ7Cit9CisKK3N0YXRpYyBib29sCitrZXJuZWxfaGFzX3Bl cl9jb250ZXh0X3NzZXVfc3VwcG9ydChpbnQgZmQpCit7CisJc3RydWN0IGRybV9pOTE1X2dlbV9j b250ZXh0X3BhcmFtX3NzZXUgc3NldSA9IHsgfTsKKwlzdHJ1Y3QgZHJtX2k5MTVfZ2VtX2NvbnRl eHRfcGFyYW0gYXJnID0KKwkJeworCQkgIC5wYXJhbSA9IEk5MTVfQ09OVEVYVF9QQVJBTV9TU0VV LAorCQkgIC5zaXplID0gc2l6ZW9mKHNzZXUpLAorCQkgIC52YWx1ZSA9IHRvX3VzZXJfcG9pbnRl cigmc3NldSksCisJCX07CisJaW50IHJldDsKKworCWlmIChfX2dlbV9jb250ZXh0X2dldF9wYXJh bShmZCwgJmFyZykpCisJCXJldHVybiBmYWxzZTsKKworCWFyZy52YWx1ZSA9IHRvX3VzZXJfcG9p bnRlcigmc3NldSk7CisKKwlyZXQgPSBfX2dlbV9jb250ZXh0X3NldF9wYXJhbShmZCwgJmFyZyk7 CisKKwlpZ3RfYXNzZXJ0KHJldCA9PSAwIHx8IHJldCA9PSAtRU5PREVWIHx8IHJldCA9PSAtRUlO VkFMKTsKKworCXJldHVybiByZXQgPT0gMDsKK30KKworc3RhdGljIHZvaWQKK2NvbnRleHRfZ2V0 X3NzZXVfbWFza3MoaW50IGZkLCB1aW50MzJfdCBjdHgsCisJCSAgICAgICB1aW50NjRfdCAqc2xp Y2VfbWFzaywKKwkJICAgICAgIHVpbnQ2NF90ICpzdWJzbGljZV9tYXNrKQoreworCXN0cnVjdCBk cm1faTkxNV9nZW1fY29udGV4dF9wYXJhbV9zc2V1IHNzZXUgPSB7IH07CisJc3RydWN0IGRybV9p OTE1X2dlbV9jb250ZXh0X3BhcmFtIGFyZyA9CisJCXsgLnBhcmFtID0gSTkxNV9DT05URVhUX1BB UkFNX1NTRVUsCisJCSAgLmN0eF9pZCA9IGN0eCwKKwkJICAuc2l6ZSA9IHNpemVvZihzc2V1KSwK KwkJICAudmFsdWUgPSB0b191c2VyX3BvaW50ZXIoJnNzZXUpIH07CisKKwlnZW1fY29udGV4dF9n ZXRfcGFyYW0oZmQsICZhcmcpOworCisJaWYgKHNsaWNlX21hc2spCisJCSpzbGljZV9tYXNrID0g c3NldS5zbGljZV9tYXNrOworCisJaWYgKHN1YnNsaWNlX21hc2spCisJCSpzdWJzbGljZV9tYXNr ID0gc3NldS5zdWJzbGljZV9tYXNrOworfQorCitzdGF0aWMgdm9pZAorY29udGV4dF9zZXRfc2xp Y2VfbWFzayhpbnQgZmQsIHVpbnQzMl90IGN0eCwgdWludDY0X3Qgc2xpY2VfbWFzaykKK3sKKwlz dHJ1Y3QgZHJtX2k5MTVfZ2VtX2NvbnRleHRfcGFyYW1fc3NldSBzc2V1ID0geyB9OworCXN0cnVj dCBkcm1faTkxNV9nZW1fY29udGV4dF9wYXJhbSBhcmcgPQorCQl7IC5wYXJhbSA9IEk5MTVfQ09O VEVYVF9QQVJBTV9TU0VVLAorCQkgIC5jdHhfaWQgPSBjdHgsCisJCSAgLnNpemUgPSBzaXplb2Yo c3NldSksCisJCSAgLnZhbHVlID0gdG9fdXNlcl9wb2ludGVyKCZzc2V1KSB9OworCisJZ2VtX2Nv bnRleHRfZ2V0X3BhcmFtKGZkLCAmYXJnKTsKKwlzc2V1LnNsaWNlX21hc2sgPSBzbGljZV9tYXNr OworCWdlbV9jb250ZXh0X3NldF9wYXJhbShmZCwgJmFyZyk7Cit9CisKK3N0YXRpYyB2b2lkCitj b250ZXh0X3NldF9zdWJzbGljZV9tYXNrKGludCBmZCwgdWludDMyX3QgY3R4LCB1aW50NjRfdCBz dWJzbGljZV9tYXNrKQoreworCXN0cnVjdCBkcm1faTkxNV9nZW1fY29udGV4dF9wYXJhbV9zc2V1 IHNzZXUgPSB7IH07CisJc3RydWN0IGRybV9pOTE1X2dlbV9jb250ZXh0X3BhcmFtIGFyZyA9CisJ CXsgLnBhcmFtID0gSTkxNV9DT05URVhUX1BBUkFNX1NTRVUsCisJCSAgLmN0eF9pZCA9IGN0eCwK KwkJICAuc2l6ZSA9IHNpemVvZihzc2V1KSwKKwkJICAudmFsdWUgPSB0b191c2VyX3BvaW50ZXIo JnNzZXUpIH07CisKKwlnZW1fY29udGV4dF9nZXRfcGFyYW0oZmQsICZhcmcpOworCXNzZXUuc3Vi c2xpY2VfbWFzayA9IHN1YnNsaWNlX21hc2s7CisJZ2VtX2NvbnRleHRfc2V0X3BhcmFtKGZkLCAm YXJnKTsKK30KKworLyoKKyAqIFZlcmlmeSB0aGF0IHdlIGNhbiBwcm9ncmFtIHRoZSBzbGljZSBj b3VudC4KKyAqLworc3RhdGljIHZvaWQKK3Rlc3Rfc2xpY2VfcGcoaW50IGZkLCB1aW50MzJfdCBw Z19zbGljZV9jb3VudCkKK3sKKwl1aW50NjRfdCBwZ19zbGljZV9tYXNrID0gbWFza19taW51cyhf X3NsaWNlX21hc2tfXywgcGdfc2xpY2VfY291bnQpOworCXVuc2lnbmVkIGludCBzbGljZV9jb3Vu dCA9IF9fc2xpY2VfY291bnRfXyAtIHBnX3NsaWNlX2NvdW50OworCXVpbnQ2NF90IHNsaWNlX21h c2s7CisJdWludDMyX3QgY3R4OworCisJaWd0X2Fzc2VydF9lcShzbGljZV9jb3VudCwgX19idWls dGluX3BvcGNvdW50KHBnX3NsaWNlX21hc2spKTsKKworCWN0eCA9IGdlbV9jb250ZXh0X2NyZWF0 ZShmZCk7CisJY29udGV4dF9zZXRfc2xpY2VfbWFzayhmZCwgY3R4LCBwZ19zbGljZV9tYXNrKTsK Kwljb250ZXh0X2dldF9zc2V1X21hc2tzKGZkLCBjdHgsICZzbGljZV9tYXNrLCBOVUxMKTsKKwlp Z3RfYXNzZXJ0X2VxKHBnX3NsaWNlX21hc2ssIHNsaWNlX21hc2spOworCisJLyoKKwkgKiBUZXN0 IGZhbHNlIHBvc2l0aXZlcyB3aXRoIHByZWRpY2F0ZXMgKG9ubHkgYXZhaWxhYmxlIG9uCisJICog YmVmb3JlIEdlbjEwKS4KKwkgKi8KKwlpZiAoX19pbnRlbF9nZW5fXyA8IDEwKQorCQlpZ3RfYXNz ZXJ0X2VxKHJlYWRfc2xpY2VfY291bnQoZmQsIGN0eCwgX19zbGljZV9jb3VudF9fKSwgMCk7CisK KwlpZ3RfYXNzZXJ0X2VxKHJlYWRfc2xpY2VfY291bnQoZmQsIGN0eCwgMCksIHNsaWNlX2NvdW50 KTsKKworCWdlbV9jb250ZXh0X2Rlc3Ryb3koZmQsIGN0eCk7Cit9CisKKy8qCisgKiBWZXJpZnkg dGhhdCB3ZSBjYW4gcHJvZ3JhbSB0aGUgc3Vic2xpY2UgY291bnQuCisgKi8KK3N0YXRpYyB2b2lk Cit0ZXN0X3N1YnNsaWNlX3BnKGludCBmZCwgaW50IHBnX3N1YnNsaWNlX2NvdW50KQoreworCXVp bnQ2NF90IHBnX3N1YnNsaWNlX21hc2sgPQorCQltYXNrX21pbnVzKF9fc3Vic2xpY2VfbWFza19f LCBwZ19zdWJzbGljZV9jb3VudCk7CisJdW5zaWduZWQgaW50IHN1YnNsaWNlX2NvdW50ID0gX19z dWJzbGljZV9jb3VudF9fIC0gcGdfc3Vic2xpY2VfY291bnQ7CisJdWludDY0X3Qgc3Vic2xpY2Vf bWFzazsKKwl1aW50MzJfdCBjdHg7CisKKwlpZ3RfYXNzZXJ0X2VxKHN1YnNsaWNlX2NvdW50LCBf X2J1aWx0aW5fcG9wY291bnQocGdfc3Vic2xpY2VfbWFzaykpOworCisJY3R4ID0gZ2VtX2NvbnRl eHRfY3JlYXRlKGZkKTsKKwljb250ZXh0X3NldF9zdWJzbGljZV9tYXNrKGZkLCBjdHgsIHBnX3N1 YnNsaWNlX21hc2spOworCWNvbnRleHRfZ2V0X3NzZXVfbWFza3MoZmQsIGN0eCwgTlVMTCwgJnN1 YnNsaWNlX21hc2spOworCWlndF9hc3NlcnRfZXEocGdfc3Vic2xpY2VfbWFzaywgc3Vic2xpY2Vf bWFzayk7CisKKwlpZ3RfYXNzZXJ0X2VxKHJlYWRfc3Vic2xpY2VfY291bnQoZmQsIGN0eCksIHN1 YnNsaWNlX2NvdW50KTsKKworCWdlbV9jb250ZXh0X2Rlc3Ryb3koZmQsIGN0eCk7Cit9CisKK3N0 YXRpYyBib29sIGhhc19lbmdpbmUoaW50IGZkLCB1bnNpZ25lZCBpbnQgY2xhc3MsIHVuc2lnbmVk IGludCBpbnN0YW5jZSkKK3sKKwlpbnQgcG11ID0gcGVyZl9pOTE1X29wZW4oSTkxNV9QTVVfRU5H SU5FX0JVU1koY2xhc3MsIGluc3RhbmNlKSk7CisKKwlpZiAocG11ID49IDApCisJCWNsb3NlKHBt dSk7CisKKwlyZXR1cm4gcG11ID49IDA7Cit9CisKKy8qCisgKiBWZXJpZnkgdGhhdCBpbnZhbGlk IGVuZ2luZXMgYXJlIHJlamVjdGVkIGFuZCB2YWxpZCBvbmVzIGFyZSBhY2NlcHRlZC4KKyAqLwor c3RhdGljIHZvaWQgdGVzdF9lbmdpbmVzKGludCBmZCkKK3sKKwlzdHJ1Y3QgZHJtX2k5MTVfZ2Vt X2NvbnRleHRfcGFyYW1fc3NldSBzc2V1ID0geyB9OworCXN0cnVjdCBkcm1faTkxNV9nZW1fY29u dGV4dF9wYXJhbSBhcmcgPQorCQl7IC5wYXJhbSA9IEk5MTVfQ09OVEVYVF9QQVJBTV9TU0VVLAor CQkgIC5jdHhfaWQgPSBnZW1fY29udGV4dF9jcmVhdGUoZmQpLAorCQkgIC5zaXplID0gc2l6ZW9m KHNzZXUpLAorCQkgIC52YWx1ZSA9IHRvX3VzZXJfcG9pbnRlcigmc3NldSkgfTsKKwl1bnNpZ25l ZCBpbnQgY2xhc3MsIGluc3RhbmNlOworCWludCBsYXN0X3dpdGhfZW5naW5lczsKKworCS8qIGdl dF9wYXJhbSAqLworCisJc3NldS5pbnN0YW5jZSA9IC0xOyAvKiBBc3N1bWVkIGludmFsaWQuICov CisJaWd0X2Fzc2VydF9lcShfX2dlbV9jb250ZXh0X2dldF9wYXJhbShmZCwgJmFyZyksIC1FSU5W QUwpOworCisJc3NldS5jbGFzcyA9IEk5MTVfRU5HSU5FX0NMQVNTX0lOVkFMSUQ7IC8qIEJvdGgg aW52YWxpZC4gKi8KKwlpZ3RfYXNzZXJ0X2VxKF9fZ2VtX2NvbnRleHRfZ2V0X3BhcmFtKGZkLCAm YXJnKSwgLUVJTlZBTCk7CisKKwlzc2V1Lmluc3RhbmNlID0gMDsgLyogQ2xhc3MgaW52YWxpZC4g Ki8KKwlpZ3RfYXNzZXJ0X2VxKF9fZ2VtX2NvbnRleHRfZ2V0X3BhcmFtKGZkLCAmYXJnKSwgLUVJ TlZBTCk7CisJc3NldS5jbGFzcyA9IEk5MTVfRU5HSU5FX0NMQVNTX1JFTkRFUjsKKworCWxhc3Rf d2l0aF9lbmdpbmVzID0gLTE7CisJZm9yIChjbGFzcyA9IDA7IGNsYXNzIDwgfjA7IGNsYXNzKysp IHsKKwkJZm9yIChpbnN0YW5jZSA9IDA7IGluc3RhbmNlIDwgfjA7IGluc3RhbmNlKyspIHsKKwkJ CWludCByZXQ7CisKKwkJCXNzZXUuY2xhc3MgPSBjbGFzczsKKwkJCXNzZXUuaW5zdGFuY2UgPSBp bnN0YW5jZTsKKworCQkJcmV0ID0gX19nZW1fY29udGV4dF9nZXRfcGFyYW0oZmQsICZhcmcpOwor CisJCQlpZiAoaGFzX2VuZ2luZShmZCwgY2xhc3MsIGluc3RhbmNlKSkgeworCQkJCWlndF9hc3Nl cnRfZXEocmV0LCAwKTsKKwkJCQlsYXN0X3dpdGhfZW5naW5lcyA9IGNsYXNzOworCQkJfSBlbHNl IHsKKwkJCQlpZ3RfYXNzZXJ0X2VxKHJldCwgLUVJTlZBTCk7CisJCQkJaWYgKGluc3RhbmNlID4g OCkgLyogU2tpcCBvdmVyIHNvbWUgaW5zdGFuY2UgaG9sZXMuICovCisJCQkJCWJyZWFrOworCQkJ fQorCQl9CisKKwkJaWYgKGNsYXNzIC0gbGFzdF93aXRoX2VuZ2luZXMgPiA4KSAvKiBTa2lwIG92 ZXIgc29tZSBjbGFzcyBob2xlcy4gKi8KKwkJCWJyZWFrOworCX0KKworCS8qCisJICogR2V0IHNv bWUgcHJvcGVyIHZhbHVlcyBiZWZvcmUgdHJ5aW5nIHRvIHJlcHJvZ3JhbSB0aGVtIG9udG8KKwkg KiBhbiBpbnZhbGlkIGVuZ2luZS4KKwkgKi8KKwlzc2V1LmNsYXNzID0gMDsKKwlzc2V1Lmluc3Rh bmNlID0gMDsKKwlnZW1fY29udGV4dF9nZXRfcGFyYW0oZmQsICZhcmcpOworCisJLyogc2V0X3Bh cmFtICovCisKKwlzc2V1Lmluc3RhbmNlID0gLTE7IC8qIEFzc3VtZWQgaW52YWxpZC4gKi8KKwlp Z3RfYXNzZXJ0X2VxKF9fZ2VtX2NvbnRleHRfc2V0X3BhcmFtKGZkLCAmYXJnKSwgLUVJTlZBTCk7 CisKKwlzc2V1LmNsYXNzID0gSTkxNV9FTkdJTkVfQ0xBU1NfSU5WQUxJRDsgLyogQm90aCBpbnZh bGlkLiAqLworCWlndF9hc3NlcnRfZXEoX19nZW1fY29udGV4dF9zZXRfcGFyYW0oZmQsICZhcmcp LCAtRUlOVkFMKTsKKworCXNzZXUuaW5zdGFuY2UgPSAwOyAvKiBDbGFzcyBpbnZhbGlkLiAqLwor CWlndF9hc3NlcnRfZXEoX19nZW1fY29udGV4dF9zZXRfcGFyYW0oZmQsICZhcmcpLCAtRUlOVkFM KTsKKworCWxhc3Rfd2l0aF9lbmdpbmVzID0gLTE7CisJZm9yIChjbGFzcyA9IDA7IGNsYXNzIDwg fjA7IGNsYXNzKyspIHsKKwkJZm9yIChpbnN0YW5jZSA9IDA7IGluc3RhbmNlIDwgfjA7IGluc3Rh bmNlKyspIHsKKwkJCWludCByZXQ7CisKKwkJCXNzZXUuY2xhc3MgPSBjbGFzczsKKwkJCXNzZXUu aW5zdGFuY2UgPSBpbnN0YW5jZTsKKworCQkJcmV0ID0gX19nZW1fY29udGV4dF9zZXRfcGFyYW0o ZmQsICZhcmcpOworCisJCQlpZiAoaGFzX2VuZ2luZShmZCwgY2xhc3MsIGluc3RhbmNlKSkgewor CQkJCWlndF9hc3NlcnQocmV0ID09IDAgfHwgcmV0ID09IC1FTk9ERVYpOworCQkJCWxhc3Rfd2l0 aF9lbmdpbmVzID0gY2xhc3M7CisJCQl9IGVsc2UgeworCQkJCWlndF9hc3NlcnRfZXEocmV0LCAt RUlOVkFMKTsKKwkJCQlpZiAoaW5zdGFuY2UgPiA4KSAvKiBTa2lwIG92ZXIgc29tZSBpbnN0YW5j ZSBob2xlcy4gKi8KKwkJCQkJYnJlYWs7CisJCQl9CisJCX0KKworCQlpZiAoY2xhc3MgLSBsYXN0 X3dpdGhfZW5naW5lcyA+IDgpIC8qIFNraXAgb3ZlciBzb21lIGNsYXNzIGhvbGVzLiAqLworCQkJ YnJlYWs7CisJfQorCisJZ2VtX2NvbnRleHRfZGVzdHJveShmZCwgYXJnLmN0eF9pZCk7Cit9CisK Ky8qCisgKiBWZXJpZnkgdGhhdCBpbnZhbGlkIGFyZ3VtZW50cyBhcmUgcmVqZWN0ZWQuCisgKi8K K3N0YXRpYyB2b2lkCit0ZXN0X2ludmFsaWRfYXJncyhpbnQgZmQpCit7CisJc3RydWN0IGRybV9p OTE1X2dlbV9jb250ZXh0X3BhcmFtIGFyZyA9CisJCXsgLnBhcmFtID0gSTkxNV9DT05URVhUX1BB UkFNX1NTRVUsCisJCSAgLmN0eF9pZCA9IGdlbV9jb250ZXh0X2NyZWF0ZShmZCksCisJCX07CisJ c3RydWN0IGRybV9pOTE1X2dlbV9jb250ZXh0X3BhcmFtX3NzZXUgc3NldSA9IHsgfTsKKwl1bnNp Z25lZCBjaGFyICpwYWdlWzJdOworCXVuc2lnbmVkIGNoYXIgKmFkZHI7CisJdW5zaWduZWQgaW50 IHN6OworCisJLyogZ2V0IHBhcmFtICovCisKKwkvKiBJbnZhbGlkIHNpemUuICovCisJYXJnLnNp emUgPSAxOworCWlndF9hc3NlcnRfZXEoX19nZW1fY29udGV4dF9nZXRfcGFyYW0oZmQsICZhcmcp LCAtRUlOVkFMKTsKKworCS8qIFF1ZXJ5IHNpemUuICovCisJYXJnLnNpemUgPSAwOworCWlndF9h c3NlcnRfZXEoX19nZW1fY29udGV4dF9nZXRfcGFyYW0oZmQsICZhcmcpLCAwKTsKKwlzeiA9IGFy Zy5zaXplOworCisJLyogQmFkIHBvaW50ZXJzLiAqLworCWlndF9hc3NlcnRfZXEoX19nZW1fY29u dGV4dF9nZXRfcGFyYW0oZmQsICZhcmcpLCAtRUZBVUxUKTsKKwlhcmcudmFsdWUgPSAtMTsKKwlp Z3RfYXNzZXJ0X2VxKF9fZ2VtX2NvbnRleHRfZ2V0X3BhcmFtKGZkLCAmYXJnKSwgLUVGQVVMVCk7 CisJYXJnLnZhbHVlID0gMTsKKwlpZ3RfYXNzZXJ0X2VxKF9fZ2VtX2NvbnRleHRfZ2V0X3BhcmFt KGZkLCAmYXJnKSwgLUVGQVVMVCk7CisKKwkvKiBVbm1hcHBlZC4gKi8KKwlwYWdlWzBdID0gbW1h cCgwLCA0MDk2LCBQUk9UX1dSSVRFLCBNQVBfUFJJVkFURSB8IE1BUF9BTk9OLCAtMSwgMCk7CisJ aWd0X2Fzc2VydChwYWdlWzBdICE9IE1BUF9GQUlMRUQpOworCW1lbXNldChwYWdlWzBdLCAwLCBz aXplb2Yoc3NldSkpOworCW11bm1hcChwYWdlWzBdLCA0MDk2KTsKKwlhcmcudmFsdWUgPSB0b191 c2VyX3BvaW50ZXIocGFnZVswXSk7CisJaWd0X2Fzc2VydF9lcShfX2dlbV9jb250ZXh0X2dldF9w YXJhbShmZCwgJmFyZyksIC1FRkFVTFQpOworCisJLyogU3RyYWRkbGUgaW50byB1bm1hcHBlZCBh cmVhLiAqLworCXBhZ2VbMF0gPSBtbWFwKDAsIDgxOTIsIFBST1RfV1JJVEUsIE1BUF9QUklWQVRF IHwgTUFQX0FOT04sIC0xLCAwKTsKKwlpZ3RfYXNzZXJ0KHBhZ2VbMF0gIT0gTUFQX0ZBSUxFRCk7 CisJbXVubWFwKHBhZ2VbMF0sIDgxOTIpOworCXBhZ2VbMF0gPSBtbWFwKHBhZ2VbMF0sIDQwOTYs CisJCSAgICAgICBQUk9UX1dSSVRFLCBNQVBfUFJJVkFURSB8IE1BUF9BTk9OIHwgTUFQX0ZJWEVE LCAtMSwgMCk7CisJaWd0X2Fzc2VydChwYWdlWzBdICE9IE1BUF9GQUlMRUQpOworCW1lbXNldChw YWdlWzBdLCAwLCBzaXplb2Yoc3NldSkpOworCXBhZ2VbMV0gPSBtbWFwKCh2b2lkICopKCh1bnNp Z25lZCBsb25nKXBhZ2VbMF0gKyA0MDk2KSwgNDA5NiwKKwkJICAgICAgIFBST1RfV1JJVEUsIE1B UF9QUklWQVRFIHwgTUFQX0FOT04gfCBNQVBfRklYRUQsIC0xLCAwKTsKKwlpZ3RfYXNzZXJ0KHBh Z2VbMV0gIT0gTUFQX0ZBSUxFRCk7CisJbWVtc2V0KHBhZ2VbMV0sIDAsIHNpemVvZihzc2V1KSk7 CisJbXVubWFwKHBhZ2VbMV0sIDQwOTYpOworCWFyZy52YWx1ZSA9IHRvX3VzZXJfcG9pbnRlcihw YWdlWzFdKSAtCisJCSAgICBzaXplb2Yoc3RydWN0IGRybV9pOTE1X2dlbV9jb250ZXh0X3BhcmFt X3NzZXUpICsgNDsKKwlpZ3RfYXNzZXJ0X2VxKF9fZ2VtX2NvbnRleHRfZ2V0X3BhcmFtKGZkLCAm YXJnKSwgLUVGQVVMVCk7CisJbXVubWFwKHBhZ2VbMF0sIDQwOTYpOworCisJLyogU3RyYWRkbGUg aW50byByZWFkLW9ubHkgYXJlYS4gKi8KKwlwYWdlWzBdID0gbW1hcCgwLCA4MTkyLCBQUk9UX1dS SVRFLCBNQVBfUFJJVkFURSB8IE1BUF9BTk9OLCAtMSwgMCk7CisJaWd0X2Fzc2VydChwYWdlWzBd ICE9IE1BUF9GQUlMRUQpOworCW11bm1hcChwYWdlWzBdLCA4MTkyKTsKKwlwYWdlWzBdID0gbW1h cChwYWdlWzBdLCA0MDk2LAorCQkgICAgICAgUFJPVF9XUklURSwgTUFQX1BSSVZBVEUgfCBNQVBf QU5PTiB8IE1BUF9GSVhFRCwgLTEsIDApOworCWlndF9hc3NlcnQocGFnZVswXSAhPSBNQVBfRkFJ TEVEKTsKKwltZW1zZXQocGFnZVswXSwgMCwgc2l6ZW9mKHNzZXUpKTsKKwlwYWdlWzFdID0gbW1h cCgodm9pZCAqKSgodW5zaWduZWQgbG9uZylwYWdlWzBdICsgNDA5NiksIDQwOTYsCisJCSAgICAg ICBQUk9UX1dSSVRFLCBNQVBfUFJJVkFURSB8IE1BUF9BTk9OIHwgTUFQX0ZJWEVELCAtMSwgMCk7 CisJaWd0X2Fzc2VydChwYWdlWzFdICE9IE1BUF9GQUlMRUQpOworCW1lbXNldChwYWdlWzFdLCAw LCBzaXplb2Yoc3NldSkpOworCWlndF9hc3NlcnQobXByb3RlY3QocGFnZVsxXSwgNDA5NiwgUFJP VF9SRUFEKSA9PSAwKTsKKwlhcmcudmFsdWUgPSB0b191c2VyX3BvaW50ZXIocGFnZVsxXSAtIHNp emVvZihzc2V1KSArIDQpOworCWlndF9hc3NlcnRfZXEoX19nZW1fY29udGV4dF9nZXRfcGFyYW0o ZmQsICZhcmcpLCAtRUZBVUxUKTsKKwltdW5tYXAocGFnZVswXSwgNDA5Nik7CisJbXVubWFwKHBh Z2VbMV0sIDQwOTYpOworCisJLyogc2V0IHBhcmFtICovCisKKwkvKiBJbnZhbGlkIHNpemVzLiAq LworCWFyZy5zaXplID0gMTsKKwlpZ3RfYXNzZXJ0X2VxKF9fZ2VtX2NvbnRleHRfc2V0X3BhcmFt KGZkLCAmYXJnKSwgLUVJTlZBTCk7CisKKwlhcmcuc2l6ZSA9IDA7CisJaWd0X2Fzc2VydF9lcShf X2dlbV9jb250ZXh0X3NldF9wYXJhbShmZCwgJmFyZyksIC1FSU5WQUwpOworCWFyZy5zaXplID0g c3o7CisKKwkvKiBCYWQgcG9pbnRlcnMuICovCisJYXJnLnZhbHVlID0gMDsKKwlpZ3RfYXNzZXJ0 X2VxKF9fZ2VtX2NvbnRleHRfc2V0X3BhcmFtKGZkLCAmYXJnKSwgLUVGQVVMVCk7CisJYXJnLnZh bHVlID0gLTE7CisJaWd0X2Fzc2VydF9lcShfX2dlbV9jb250ZXh0X3NldF9wYXJhbShmZCwgJmFy ZyksIC1FRkFVTFQpOworCWFyZy52YWx1ZSA9IDE7CisJaWd0X2Fzc2VydF9lcShfX2dlbV9jb250 ZXh0X3NldF9wYXJhbShmZCwgJmFyZyksIC1FRkFVTFQpOworCisJLyogR2V0IHZhbGlkIFNTRVUu ICovCisJYXJnLnZhbHVlID0gdG9fdXNlcl9wb2ludGVyKCZzc2V1KTsKKwlpZ3RfYXNzZXJ0X2Vx KF9fZ2VtX2NvbnRleHRfZ2V0X3BhcmFtKGZkLCAmYXJnKSwgMCk7CisKKwkvKiBVbm1hcHBlZC4g Ki8KKwlwYWdlWzBdID0gbW1hcCgwLCA0MDk2LCBQUk9UX1dSSVRFLCBNQVBfUFJJVkFURSB8IE1B UF9BTk9OLCAtMSwgMCk7CisJaWd0X2Fzc2VydChwYWdlWzBdICE9IE1BUF9GQUlMRUQpOworCW1l bWNweShwYWdlWzBdLCAmc3NldSwgc2l6ZW9mKHNzZXUpKTsKKwltdW5tYXAocGFnZVswXSwgNDA5 Nik7CisJYXJnLnZhbHVlID0gdG9fdXNlcl9wb2ludGVyKHBhZ2VbMF0pOworCWlndF9hc3NlcnRf ZXEoX19nZW1fY29udGV4dF9zZXRfcGFyYW0oZmQsICZhcmcpLCAtRUZBVUxUKTsKKworCS8qIFN0 cmFkZGxlIGludG8gdW5tYXBwZWQgYXJlYS4gKi8KKwlwYWdlWzBdID0gbW1hcCgwLCA4MTkyLCBQ Uk9UX1dSSVRFLCBNQVBfUFJJVkFURSB8IE1BUF9BTk9OLCAtMSwgMCk7CisJaWd0X2Fzc2VydChw YWdlWzBdICE9IE1BUF9GQUlMRUQpOworCW11bm1hcChwYWdlWzBdLCA4MTkyKTsKKwlwYWdlWzBd ID0gbW1hcChwYWdlWzBdLCA0MDk2LAorCQkgICAgICAgUFJPVF9XUklURSwgTUFQX1BSSVZBVEUg fCBNQVBfQU5PTiB8IE1BUF9GSVhFRCwgLTEsIDApOworCWlndF9hc3NlcnQocGFnZVswXSAhPSBN QVBfRkFJTEVEKTsKKwlwYWdlWzFdID0gbW1hcCgodm9pZCAqKSgodW5zaWduZWQgbG9uZylwYWdl WzBdICsgNDA5NiksIDQwOTYsCisJCSAgICAgICBQUk9UX1dSSVRFLCBNQVBfUFJJVkFURSB8IE1B UF9BTk9OIHwgTUFQX0ZJWEVELCAtMSwgMCk7CisJaWd0X2Fzc2VydChwYWdlWzFdICE9IE1BUF9G QUlMRUQpOworCWFkZHIgPSBwYWdlWzFdIC0gc2l6ZW9mKHNzZXUpICsgNDsKKwltZW1jcHkoYWRk ciwgJnNzZXUsIHNpemVvZihzc2V1KSk7CisJbXVubWFwKHBhZ2VbMV0sIDQwOTYpOworCWFyZy52 YWx1ZSA9IHRvX3VzZXJfcG9pbnRlcihhZGRyKTsKKwlpZ3RfYXNzZXJ0X2VxKF9fZ2VtX2NvbnRl eHRfc2V0X3BhcmFtKGZkLCAmYXJnKSwgLUVGQVVMVCk7CisJbXVubWFwKHBhZ2VbMF0sIDQwOTYp OworCisJZ2VtX2NvbnRleHRfZGVzdHJveShmZCwgYXJnLmN0eF9pZCk7Cit9CisKKy8qCisgKiBW ZXJpZnkgdGhhdCBnZ3R0IG1hcHBlZCBhcmVhIGNhbiBiZSB1c2VkIGFzIHRoZSBzc2V1IHBvaW50 ZXIuCisgKi8KK3N0YXRpYyB2b2lkCit0ZXN0X2dndHRfYXJncyhpbnQgZmQpCit7CisJc3RydWN0 IGRybV9pOTE1X2dlbV9jb250ZXh0X3BhcmFtX3NzZXUgKnNzZXU7CisJc3RydWN0IGRybV9pOTE1 X2dlbV9jb250ZXh0X3BhcmFtIGFyZyA9CisJCXsgLnBhcmFtID0gSTkxNV9DT05URVhUX1BBUkFN X1NTRVUsCisJCSAgLmN0eF9pZCA9IGdlbV9jb250ZXh0X2NyZWF0ZShmZCksCisJCSAgLnNpemUg PSBzaXplb2YoKnNzZXUpLAorCQl9OworCXVpbnQzMl90IGJvOworCisJYm8gPSBnZW1fY3JlYXRl KGZkLCA0MDk2KTsKKwlhcmcudmFsdWUgPSB0b191c2VyX3BvaW50ZXIoZ2VtX21tYXBfX2d0dChm ZCwgYm8sIDQwOTYsCisJCQkJCQkgIFBST1RfUkVBRCB8IFBST1RfV1JJVEUpKTsKKworCWlndF9h c3NlcnRfZXEoX19nZW1fY29udGV4dF9nZXRfcGFyYW0oZmQsICZhcmcpLCAwKTsKKwlpZ3RfYXNz ZXJ0X2VxKF9fZ2VtX2NvbnRleHRfc2V0X3BhcmFtKGZkLCAmYXJnKSwgMCk7CisKKwltdW5tYXAo KHZvaWQgKilhcmcudmFsdWUsIDQwOTYpOworCWdlbV9jbG9zZShmZCwgYm8pOworCWdlbV9jb250 ZXh0X2Rlc3Ryb3koZmQsIGFyZy5jdHhfaWQpOworfQorCisvKgorICogVmVyaWZ5IHRoYXQgaW52 YWxpZCBTU0VVIHZhbHVlcyBhcmUgcmVqZWN0ZWQuCisgKi8KK3N0YXRpYyB2b2lkCit0ZXN0X2lu dmFsaWRfc3NldShpbnQgZmQpCit7CisJc3RydWN0IGRybV9pOTE1X2dlbV9jb250ZXh0X3BhcmFt X3NzZXUgZGVmYXVsdF9zc2V1ID0geyB9OworCXN0cnVjdCBkcm1faTkxNV9nZW1fY29udGV4dF9w YXJhbV9zc2V1IHNzZXUgPSB7IH07CisJc3RydWN0IGRybV9pOTE1X2dlbV9jb250ZXh0X3BhcmFt IGFyZyA9CisJCXsgLnBhcmFtID0gSTkxNV9DT05URVhUX1BBUkFNX1NTRVUsCisJCSAgLmN0eF9p ZCA9IGdlbV9jb250ZXh0X2NyZWF0ZShmZCksCisJCSAgLnNpemUgPSBzaXplb2Yoc3NldSksCisJ CX07CisJdW5zaWduZWQgaW50IGk7CisKKwkvKiBGZXRjaCB0aGUgZGV2aWNlIGRlZmF1bHRzLiAq LworCWFyZy52YWx1ZSA9IHRvX3VzZXJfcG9pbnRlcigmZGVmYXVsdF9zc2V1KTsKKwlnZW1fY29u dGV4dF9nZXRfcGFyYW0oZmQsICZhcmcpOworCisJYXJnLnZhbHVlID0gdG9fdXNlcl9wb2ludGVy KCZzc2V1KTsKKworCS8qIFRyeSBhbGwgc2xpY2UgbWFza3Mga25vd24gdG8gYmUgaW52YWxpZC4g Ki8KKwlzc2V1ID0gZGVmYXVsdF9zc2V1OworCWZvciAoaSA9IDE7IGkgPD0gKDggLSBfX3NsaWNl X2NvdW50X18pOyBpKyspIHsKKwkJc3NldS5zbGljZV9tYXNrID0gbWFza19wbHVzKF9fc2xpY2Vf bWFza19fLCBpKTsKKwkJaWd0X2Fzc2VydF9lcShfX2dlbV9jb250ZXh0X3NldF9wYXJhbShmZCwg JmFyZyksIC1FSU5WQUwpOworCX0KKworCS8qIDAgc2xpY2VzLiAqLworCXNzZXUuc2xpY2VfbWFz ayA9IDA7CisJaWd0X2Fzc2VydF9lcSgtRUlOVkFMLCBfX2dlbV9jb250ZXh0X3NldF9wYXJhbShm ZCwgJmFyZykpOworCisJLyogVHJ5IGFsbCBzdWJzbGljZSBtYXNrcyBrbm93biB0byBiZSBpbnZh bGlkLiAqLworCXNzZXUgPSBkZWZhdWx0X3NzZXU7CisJZm9yIChpID0gMTsgaSA8PSAoOCAtIF9f c3Vic2xpY2VfY291bnRfXyk7IGkrKykgeworCQlzc2V1LnN1YnNsaWNlX21hc2sgPSBtYXNrX3Bs dXMoX19zdWJzbGljZV9tYXNrX18sIGkpOworCQlpZ3RfYXNzZXJ0X2VxKF9fZ2VtX2NvbnRleHRf c2V0X3BhcmFtKGZkLCAmYXJnKSwgLUVJTlZBTCk7CisJfQorCisJLyogMCBzdWJzbGljZXMuICov CisJc3NldS5zdWJzbGljZV9tYXNrID0gMDsKKwlpZ3RfYXNzZXJ0X2VxKF9fZ2VtX2NvbnRleHRf c2V0X3BhcmFtKGZkLCAmYXJnKSwgLUVJTlZBTCk7CisKKwkvKiBUcnkgbnVtYmVyIG9mIEVVcyBz dXBlcmlvciB0byB0aGUgbWF4IGF2YWlsYWJsZS4gKi8KKwlzc2V1ID0gZGVmYXVsdF9zc2V1Owor CXNzZXUubWluX2V1c19wZXJfc3Vic2xpY2UgPSBkZWZhdWx0X3NzZXUubWF4X2V1c19wZXJfc3Vi c2xpY2UgKyAxOworCWlndF9hc3NlcnRfZXEoX19nZW1fY29udGV4dF9zZXRfcGFyYW0oZmQsICZh cmcpLCAtRUlOVkFMKTsKKworCXNzZXUgPSBkZWZhdWx0X3NzZXU7CisJc3NldS5tYXhfZXVzX3Bl cl9zdWJzbGljZSA9IGRlZmF1bHRfc3NldS5tYXhfZXVzX3Blcl9zdWJzbGljZSArIDE7CisJaWd0 X2Fzc2VydF9lcShfX2dlbV9jb250ZXh0X3NldF9wYXJhbShmZCwgJmFyZyksIC1FSU5WQUwpOwor CisJLyogVHJ5IHRvIHByb2dyYW0gMCBtYXggRVVzLiAqLworCXNzZXUgPSBkZWZhdWx0X3NzZXU7 CisJc3NldS5tYXhfZXVzX3Blcl9zdWJzbGljZSA9IDA7CisJaWd0X2Fzc2VydF9lcShfX2dlbV9j b250ZXh0X3NldF9wYXJhbShmZCwgJmFyZyksIC1FSU5WQUwpOworCisJLyogTWluID4gbWF4ICov CisJc3NldSA9IGRlZmF1bHRfc3NldTsKKwlzc2V1Lm1pbl9ldXNfcGVyX3N1YnNsaWNlID0gc3Nl dS5tYXhfZXVzX3Blcl9zdWJzbGljZTsKKwlzc2V1Lm1heF9ldXNfcGVyX3N1YnNsaWNlID0gMTsK KwlpZ3RfYXNzZXJ0X2VxKF9fZ2VtX2NvbnRleHRfc2V0X3BhcmFtKGZkLCAmYXJnKSwgLUVJTlZB TCk7CisKKwlpZiAoX19pbnRlbF9nZW5fXyAhPSAxMSkKKwkJZ290byBvdXQ7CisKKwkvKiBTdWJz ZXQgb2Ygc3Vic2xpY2VzIGJ1dCBzbGljZSBtYXNrIGdyZWF0ZXIgdGhhbiBvbmUuICovCisJaWYg KF9fc2xpY2VfY291bnRfXyA+IDEpIHsKKwkJc3NldSA9IGRlZmF1bHRfc3NldTsKKwkJc3NldS5z dWJzbGljZV9tYXNrID0gbWFza19taW51c19vbmUoc3NldS5zdWJzbGljZV9tYXNrKTsKKwkJaWd0 X2Fzc2VydF9lcShfX2dlbV9jb250ZXh0X3NldF9wYXJhbShmZCwgJmFyZyksIC1FSU5WQUwpOwor CX0KKworCS8qIE9kZCBzdWJzbGljZXMgYWJvdmUgZm91ci4gKi8KKwlzc2V1ID0gZGVmYXVsdF9z c2V1OworCXNzZXUuc2xpY2VfbWFzayA9IDB4MTsKKwlzc2V1LnN1YnNsaWNlX21hc2sgPSBtYXNr X21pbnVzX29uZShzc2V1LnN1YnNsaWNlX21hc2spOworCWlndF9hc3NlcnRfZXEoX19nZW1fY29u dGV4dF9zZXRfcGFyYW0oZmQsICZhcmcpLCAtRUlOVkFMKTsKKworCS8qIE1vcmUgdGhhbiBoYWxm IHN1YnNsaWNlcyB3aXRoIG9uZSBzbGljZS4gKi8KKwlzc2V1ID0gZGVmYXVsdF9zc2V1OworCXNz ZXUuc2xpY2VfbWFzayA9IDB4MTsKKwlzc2V1LnN1YnNsaWNlX21hc2sgPSBtYXNrX21pbnVzKHNz ZXUuc3Vic2xpY2VfbWFzaywKKwkJCQkJX19zdWJzbGljZV9jb3VudF9fIC8gMiAtIDEpOworCWln dF9hc3NlcnRfZXEoX19nZW1fY29udGV4dF9zZXRfcGFyYW0oZmQsICZhcmcpLCAtRUlOVkFMKTsK Kworb3V0OgorCWdlbV9jb250ZXh0X2Rlc3Ryb3koZmQsIGFyZy5jdHhfaWQpOworfQorCisvKiBW ZXJpZnkgdGhhdCB0aGUga2VybmVsIHJldHVybnMgYSBjb3JyZWN0IGVycm9yIHZhbHVlIG9uIEdl biA8IDguICovCitzdGF0aWMgdm9pZAoraW5pdF9jb250ZXh0cyhpbnQgZmQsIHVpbnQzMl90ICpj dHgsIHVuc2lnbmVkIGludCBudW0sCisJICAgICAgdWludDY0X3QgbWFzazAsIHVpbnQ2NF90IG1h c2sxKQoreworCXVuc2lnbmVkIGludCBpOworCisJaWd0X2Fzc2VydF9lcShudW0sIDIpOworCisJ Zm9yIChpID0gMDsgaSA8IG51bTsgaSsrKQorCQljdHhbaV0gPSBnZW1fY29udGV4dF9jcmVhdGUo ZmQpOworCisJY29udGV4dF9zZXRfc2xpY2VfbWFzayhmZCwgY3R4WzBdLCBtYXNrMCk7CisJY29u dGV4dF9zZXRfc2xpY2VfbWFzayhmZCwgY3R4WzFdLCBtYXNrMSk7Cit9CisKKy8qCisgKiBWZXJp ZnkgdGhhdCBwb3dlcmdhdGluZyBzZXR0aW5ncyBhcmUgcHV0IG9uIGhvbGQgd2hpbGUgaTkxNS9w ZXJmIGlzCisgKiBhY3RpdmUuCisgKi8KK3N0YXRpYyB2b2lkCit0ZXN0X3BlcmZfb2EoaW50IGZk KQoreworCXVpbnQ2NF90IHByb3BlcnRpZXNbXSA9IHsKKwkJLyogSW5jbHVkZSBPQSByZXBvcnRz IGluIHNhbXBsZXMgKi8KKwkJRFJNX0k5MTVfUEVSRl9QUk9QX1NBTVBMRV9PQSwgdHJ1ZSwKKwor CQkvKiBPQSB1bml0IGNvbmZpZ3VyYXRpb24gKi8KKwkJRFJNX0k5MTVfUEVSRl9QUk9QX09BX01F VFJJQ1NfU0VULCAxLCAvKiB0ZXN0IG1ldHJpYyAqLworCQlEUk1fSTkxNV9QRVJGX1BST1BfT0Ff Rk9STUFULCBJOTE1X09BX0ZPUk1BVF9BMzJ1NDBfQTR1MzJfQjhfQzgsCisJCURSTV9JOTE1X1BF UkZfUFJPUF9PQV9FWFBPTkVOVCwgMjAsCisJfTsKKwlzdHJ1Y3QgZHJtX2k5MTVfcGVyZl9vcGVu X3BhcmFtIHBhcmFtID0geworCQkuZmxhZ3MgPSBJOTE1X1BFUkZfRkxBR19GRF9DTE9FWEVDIHwK KwkJSTkxNV9QRVJGX0ZMQUdfRkRfTk9OQkxPQ0ssCisJCS5udW1fcHJvcGVydGllcyA9IEFSUkFZ X1NJWkUocHJvcGVydGllcykgLyAyLAorCQkucHJvcGVydGllc19wdHIgPSB0b191c2VyX3BvaW50 ZXIocHJvcGVydGllcyksCisJfTsKKwl1aW50NjRfdCBwZ19zbGljZV9tYXNrID0gbWFza19taW51 c19vbmUoX19zbGljZV9tYXNrX18pOworCXVuc2lnbmVkIGludCBzbGljZV9jb3VudCA9IF9fc2xp Y2VfY291bnRfXyAtIDE7CisJdWludDMyX3QgY3R4WzJdOworCXVuc2lnbmVkIGludCBpOworCWlu dCBwZXJmX2ZkOworCisJaW5pdF9jb250ZXh0cyhmZCwgY3R4LCBBUlJBWV9TSVpFKGN0eCksIF9f c2xpY2VfbWFza19fLCBwZ19zbGljZV9tYXNrKTsKKworCS8qCisJICogVGVzdCBmYWxzZSBwb3Np dGl2ZXMgd2l0aCBwcmVkaWNhdGVzIChvbmx5IGF2YWlsYWJsZSBvbgorCSAqIGJlZm9yZSBHZW4x MCkuCisJICovCisJaWYgKF9faW50ZWxfZ2VuX18gPCAxMCkKKwkJaWd0X2Fzc2VydF9lcShyZWFk X3NsaWNlX2NvdW50KGZkLCBjdHhbMV0sIF9fc2xpY2VfY291bnRfXyksCisJCQkgICAgICAwKTsK KworCWlndF9hc3NlcnRfZXEocmVhZF9zbGljZV9jb3VudChmZCwgY3R4WzBdLCAwKSwgX19zbGlj ZV9jb3VudF9fKTsKKwlpZ3RfYXNzZXJ0X2VxKHJlYWRfc2xpY2VfY291bnQoZmQsIGN0eFsxXSwg MCksIHNsaWNlX2NvdW50KTsKKworCS8qCisJICogTm93IG9wZW4gaTkxNS9wZXJmIGFuZCB2ZXJp ZnkgdGhhdCBhbGwgY29udGV4dHMgaGF2ZSBiZWVuCisJICogcmVjb25maWd1cmVkIHRvIHRoZSBk ZXZpY2UncyBkZWZhdWx0LgorCSAqLworCXBlcmZfZmQgPSBpZ3RfaW9jdGwoZmQsIERSTV9JT0NU TF9JOTE1X1BFUkZfT1BFTiwgJnBhcmFtKTsKKwlpZ3RfYXNzZXJ0X2ZkKHBlcmZfZmQpOworCisJ aWYgKF9faW50ZWxfZ2VuX18gIT0gMTEpIHsKKwkJaWYgKF9faW50ZWxfZ2VuX18gPCAxMCkKKwkJ CWlndF9hc3NlcnRfZXEocmVhZF9zbGljZV9jb3VudChmZCwgY3R4WzFdLCBzbGljZV9jb3VudCks CisJCQkJICAgICAgMCk7CisKKwkJaWd0X2Fzc2VydF9lcShyZWFkX3NsaWNlX2NvdW50KGZkLCBj dHhbMF0sIDApLCBfX3NsaWNlX2NvdW50X18pOworCQlpZ3RfYXNzZXJ0X2VxKHJlYWRfc2xpY2Vf Y291bnQoZmQsIGN0eFsxXSwgMCksIF9fc2xpY2VfY291bnRfXyk7CisJfSBlbHNlIHsKKwkJaWd0 X2Fzc2VydF9lcShyZWFkX3NsaWNlX2NvdW50KGZkLCBjdHhbMF0sIDApLCAxKTsKKwkJaWd0X2Fz c2VydF9lcShyZWFkX3NsaWNlX2NvdW50KGZkLCBjdHhbMV0sIDApLCAxKTsKKwkJaWd0X2Fzc2Vy dF9lcShyZWFkX3N1YnNsaWNlX2NvdW50KGZkLCBjdHhbMF0pLAorCQkJICAgICAgX19zdWJzbGlj ZV9jb3VudF9fIC8gMik7CisJCWlndF9hc3NlcnRfZXEocmVhZF9zdWJzbGljZV9jb3VudChmZCwg Y3R4WzFdKSwKKwkJCSAgICAgIF9fc3Vic2xpY2VfY291bnRfXyAvIDIpOworCX0KKworCWNsb3Nl KHBlcmZfZmQpOworCisJLyoKKwkgKiBBZnRlciBjbG9zaW5nIHRoZSBwZXJmIHN0cmVhbSwgY29u ZmlndXJhdGlvbnMgc2hvdWxkIGJlCisJICogYmFjayB0byB0aGUgcHJvZ3JhbW1lZCB2YWx1ZXMu CisJICovCisJaWYgKF9faW50ZWxfZ2VuX18gPCAxMCkKKwkJaWd0X2Fzc2VydF9lcShyZWFkX3Ns aWNlX2NvdW50KGZkLCBjdHhbMV0sIF9fc2xpY2VfY291bnRfXyksIDApOworCWlndF9hc3NlcnRf ZXEocmVhZF9zbGljZV9jb3VudChmZCwgY3R4WzBdLCAwKSwgX19zbGljZV9jb3VudF9fKTsKKwlp Z3RfYXNzZXJ0X2VxKHJlYWRfc2xpY2VfY291bnQoZmQsIGN0eFsxXSwgMCksIHNsaWNlX2NvdW50 KTsKKworCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKGN0eCk7IGkrKykKKwkJZ2VtX2NvbnRl eHRfZGVzdHJveShmZCwgY3R4W2ldKTsKKworCS8qCisJICogT3BlbiBpOTE1L3BlcmYgZmlyc3Qg YW5kIHZlcmlmeSB0aGF0IGFsbCBjb250ZXh0cyBjcmVhdGVkCisJICogYWZ0ZXJ3YXJkIGFyZSBj b25maWd1cmVkIHRvIHRoZSBkZXZpY2UncyBkZWZhdWx0LgorCSAqLworCXBlcmZfZmQgPSBpZ3Rf aW9jdGwoZmQsIERSTV9JT0NUTF9JOTE1X1BFUkZfT1BFTiwgJnBhcmFtKTsKKwlpZ3RfYXNzZXJ0 X2ZkKHBlcmZfZmQpOworCisJaW5pdF9jb250ZXh0cyhmZCwgY3R4LCBBUlJBWV9TSVpFKGN0eCks IF9fc2xpY2VfbWFza19fLCBwZ19zbGljZV9tYXNrKTsKKworCS8qCisJICogQ2hlY2sgdGhlIGRl dmljZSdzIGRlZmF1bHQgdmFsdWVzLCBkZXNwaXRlIHNldHRpbmcKKwkgKiBvdGhlcndpc2UuCisJ ICovCisJaWYgKF9faW50ZWxfZ2VuX18gIT0gMTEpIHsKKwkJaWYgKF9faW50ZWxfZ2VuX18gPCAx MCkKKwkJCWlndF9hc3NlcnRfZXEocmVhZF9zbGljZV9jb3VudChmZCwgY3R4WzFdLAorCQkJCQkJ ICAgICAgIHNsaWNlX2NvdW50KSwgMCk7CisKKwkJaWd0X2Fzc2VydF9lcShyZWFkX3NsaWNlX2Nv dW50KGZkLCBjdHhbMF0sIDApLCBfX3NsaWNlX2NvdW50X18pOworCQlpZ3RfYXNzZXJ0X2VxKHJl YWRfc2xpY2VfY291bnQoZmQsIGN0eFsxXSwgMCksIF9fc2xpY2VfY291bnRfXyk7CisJfSBlbHNl IHsKKwkJaWd0X2Fzc2VydF9lcShyZWFkX3NsaWNlX2NvdW50KGZkLCBjdHhbMF0sIDApLCAxKTsK KwkJaWd0X2Fzc2VydF9lcShyZWFkX3NsaWNlX2NvdW50KGZkLCBjdHhbMV0sIDApLCAxKTsKKwkJ aWd0X2Fzc2VydF9lcShyZWFkX3N1YnNsaWNlX2NvdW50KGZkLCBjdHhbMF0pLAorCQkJICAgICAg X19zdWJzbGljZV9jb3VudF9fIC8gMik7CisJCWlndF9hc3NlcnRfZXEocmVhZF9zdWJzbGljZV9j b3VudChmZCwgY3R4WzFdKSwKKwkJCSAgICAgIF9fc3Vic2xpY2VfY291bnRfXyAvIDIpOworCX0K KworCWNsb3NlKHBlcmZfZmQpOworCisJLyoKKwkgKiBBZnRlciBjbG9zaW5nIHRoZSBwZXJmIHN0 cmVhbSwgY29uZmlndXJhdGlvbnMgc2hvdWxkIGJlCisJICogYmFjayB0byB0aGUgcHJvZ3JhbW1l ZCB2YWx1ZXMuCisJICovCisJaWYgKF9faW50ZWxfZ2VuX18gPCAxMCkKKwkJaWd0X2Fzc2VydF9l cShyZWFkX3NsaWNlX2NvdW50KGZkLCBjdHhbMV0sIF9fc2xpY2VfY291bnRfXyksCisJCQkgICAg ICAwKTsKKworCWlndF9hc3NlcnRfZXEocmVhZF9zbGljZV9jb3VudChmZCwgY3R4WzBdLCAwKSwg X19zbGljZV9jb3VudF9fKTsKKwlpZ3RfYXNzZXJ0X2VxKHJlYWRfc2xpY2VfY291bnQoZmQsIGN0 eFsxXSwgMCksIHNsaWNlX2NvdW50KTsKKworCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKGN0 eCk7IGkrKykKKwkJZ2VtX2NvbnRleHRfZGVzdHJveShmZCwgY3R4W2ldKTsKK30KKworc3RhdGlj IGlndF9zcGluX3QgKiBfX3NwaW5fcG9sbChpbnQgZmQsIHVpbnQzMl90IGN0eCwgdW5zaWduZWQg bG9uZyBmbGFncykKK3sKKwlzdHJ1Y3QgaWd0X3NwaW5fZmFjdG9yeSBvcHRzID0geworCQkuY3R4 ID0gY3R4LAorCQkuZW5naW5lID0gZmxhZ3MsCisJfTsKKworCWlmIChnZW1fY2FuX3N0b3JlX2R3 b3JkKGZkLCBmbGFncykpCisJCW9wdHMuZmxhZ3MgfD0gSUdUX1NQSU5fUE9MTF9SVU47CisKKwly ZXR1cm4gX19pZ3Rfc3Bpbl9iYXRjaF9mYWN0b3J5KGZkLCAmb3B0cyk7Cit9CisKK3N0YXRpYyB1 bnNpZ25lZCBsb25nIF9fc3Bpbl93YWl0KGludCBmZCwgaWd0X3NwaW5fdCAqc3BpbikKK3sKKwlz dHJ1Y3QgdGltZXNwZWMgc3RhcnQgPSB7IH07CisKKwlpZ3RfbnNlY19lbGFwc2VkKCZzdGFydCk7 CisKKwlpZiAoc3Bpbi0+cnVubmluZykgeworCQl1bnNpZ25lZCBsb25nIHRpbWVvdXQgPSAwOwor CisJCXdoaWxlICghUkVBRF9PTkNFKCpzcGluLT5ydW5uaW5nKSkgeworCQkJdW5zaWduZWQgbG9u ZyB0ID0gaWd0X25zZWNfZWxhcHNlZCgmc3RhcnQpOworCisJCQlpZiAoKHQgLSB0aW1lb3V0KSA+ IDI1MGU2KSB7CisJCQkJdGltZW91dCA9IHQ7CisJCQkJaWd0X3dhcm4oIlNwaW5uZXIgbm90IHJ1 bm5pbmcgYWZ0ZXIgJS4yZm1zXG4iLAorCQkJCQkgKGRvdWJsZSl0IC8gMWU2KTsKKwkJCX0KKwkJ fQorCX0gZWxzZSB7CisJCWlndF9kZWJ1ZygiX19zcGluX3dhaXQgLSB1c2xlZXAgbW9kZVxuIik7 CisJCXVzbGVlcCg1MDBlMyk7IC8qIEJldHRlciB0aGFuIG5vdGhpbmchICovCisJfQorCisJcmV0 dXJuIGlndF9uc2VjX2VsYXBzZWQoJnN0YXJ0KTsKK30KKworc3RhdGljIGlndF9zcGluX3QgKiBf X3NwaW5fc3luYyhpbnQgZmQsIHVpbnQzMl90IGN0eCwgdW5zaWduZWQgbG9uZyBmbGFncykKK3sK KwlpZ3Rfc3Bpbl90ICpzcGluID0gX19zcGluX3BvbGwoZmQsIGN0eCwgZmxhZ3MpOworCisJX19z cGluX3dhaXQoZmQsIHNwaW4pOworCisJcmV0dXJuIHNwaW47Cit9CisKK3N0YXRpYyB1aW50MzJf dAorcmVhZF9zbGljZV9jb3VudF9idXN5KGludCBmZCwgdWludDMyX3QgY29udGV4dCwgdWludDMy X3QgZXhwZWN0ZWQsCisJCSAgICAgIGlndF9zcGluX3QgKnNwaW4pCit7CisJcmV0dXJuIF9fcmVh ZF9zbGljZV9jb3VudChmZCwgY29udGV4dCwgZXhwZWN0ZWQsIHNwaW4pOworfQorCisjZGVmaW5l IFRFU1RfSURMRQkoMSkKKyNkZWZpbmUgVEVTVF9CVVNZCSgyKQorI2RlZmluZSBURVNUX1JFU0VU CSg0KQorI2RlZmluZSBURVNUX0hBTkcJKDgpCisjZGVmaW5lIFRFU1RfU1VTUEVORAkoMTYpCisK K3N0YXRpYyBpZ3Rfc3Bpbl90ICoKK19fcHJlX3NldChpbnQgZmQsIHVuc2lnbmVkIGZsYWdzLCB1 aW50MzJfdCBjdHgpCit7CisJaWYgKGZsYWdzICYgVEVTVF9CVVNZKQorCQlyZXR1cm4gX19zcGlu X3N5bmMoZmQsIGN0eCwgSTkxNV9FWEVDX1JFTkRFUik7CisKKwlyZXR1cm4gTlVMTDsKK30KKwor c3RhdGljIGlndF9zcGluX3QgKgorX19wb3N0X3NldChpbnQgZmQsIHVuc2lnbmVkIGludCBmbGFn cywgdWludDMyX3QgY3R4LCBpZ3Rfc3Bpbl90ICpzcGluLAorCSAgIHVuc2lnbmVkIGludCBleHBl Y3RlZCkKK3sKKwlib29sIGJ1c3lfcmVzZXQgPSAoZmxhZ3MgJiBURVNUX0JVU1kpICYmCisJCQkg IChmbGFncyAmIChURVNUX1JFU0VUIHwgVEVTVF9IQU5HKSk7CisKKwlpZiAoZmxhZ3MgJiBURVNU X1JFU0VUKQorCQlpZ3RfZm9yY2VfZ3B1X3Jlc2V0KGZkKTsKKwllbHNlIGlmIChmbGFncyAmIFRF U1RfSEFORykKKwkJZ2VtX3N5bmMoZmQsIHNwaW4tPmhhbmRsZSk7CisKKwlpZiAoc3BpbiAmJiAh YnVzeV9yZXNldCkgeworCQlpZ3RfYXNzZXJ0X2VxKHJlYWRfc2xpY2VfY291bnRfYnVzeShmZCwg Y3R4LCAwLCBzcGluKSwKKwkJCSAgICAgIGV4cGVjdGVkKTsKKwl9IGVsc2UgeworCQlpZ3RfYXNz ZXJ0X2VxKHJlYWRfc2xpY2VfY291bnQoZmQsIGN0eCwgMCksIGV4cGVjdGVkKTsKKwl9CisKKwlp Z3RfYXNzZXJ0X2VxKHJlYWRfc2xpY2VfY291bnQoZmQsIDAsIDApLCBfX3NsaWNlX2NvdW50X18p OworCisJaWYgKHNwaW4pCisJCWlndF9zcGluX2JhdGNoX2ZyZWUoZmQsIHNwaW4pOworCisJaWYg KGZsYWdzICYgVEVTVF9JRExFKQorCQlpZ3RfZHJvcF9jYWNoZXNfc2V0KGZkLCBEUk9QX1JFVElS RSB8IERST1BfSURMRSB8IERST1BfQUNUSVZFKTsKKworCWlmIChmbGFncyAmIFRFU1RfU1VTUEVO RCkgeworCQlpZ3Rfc2V0X2F1dG9yZXN1bWVfZGVsYXkoNSk7CisJCWlndF9zeXN0ZW1fc3VzcGVu ZF9hdXRvcmVzdW1lKFNVU1BFTkRfU1RBVEVfTUVNLAorCQkJCQkgICAgICBTVVNQRU5EX1RFU1Rf Tk9ORSk7CisJfQorCisJaWd0X2Fzc2VydF9lcShyZWFkX3NsaWNlX2NvdW50KGZkLCBjdHgsIDAp LCBleHBlY3RlZCk7CisJaWd0X2Fzc2VydF9lcShyZWFkX3NsaWNlX2NvdW50KGZkLCAwLCAwKSwg X19zbGljZV9jb3VudF9fKTsKKworCXJldHVybiBOVUxMOworfQorCisvKgorICogVGVzdCBjb250 ZXh0IHJlLWNvbmZpZ3VyYXRpb24gd2l0aCBlaXRoZXIgaWRsZSBvciBidXN5IGNvbnRleHRzLgor ICovCitzdGF0aWMgdm9pZAordGVzdF9keW5hbWljKGludCBmZCwgdW5zaWduZWQgaW50IGZsYWdz KQoreworCXVpbnQ2NF90IHBnX3NsaWNlX21hc2sgPSBtYXNrX21pbnVzX29uZShfX3NsaWNlX21h c2tfXyk7CisJdW5zaWduZWQgaW50IHBnX3NsaWNlX2NvdW50ID0gX19zbGljZV9jb3VudF9fIC0g MTsKKwlzdHJ1Y3QgZHJtX2k5MTVfZ2VtX2NvbnRleHRfcGFyYW1fc3NldSBzc2V1ID0geyB9Owor CXN0cnVjdCBkcm1faTkxNV9nZW1fY29udGV4dF9wYXJhbSBhcmcgPQorCQl7IC5wYXJhbSA9IEk5 MTVfQ09OVEVYVF9QQVJBTV9TU0VVLAorCQkgIC5jdHhfaWQgPSBnZW1fY29udGV4dF9jcmVhdGUo ZmQpLAorCQkgIC5zaXplID0gc2l6ZW9mKHNzZXUpLAorCQkgIC52YWx1ZSA9IHRvX3VzZXJfcG9p bnRlcigmc3NldSkgfTsKKwlpZ3Rfc3Bpbl90ICpzcGluID0gTlVMTDsKKworCWlndF9yZXF1aXJl KF9fc2xpY2VfY291bnRfXyA+IDEpOworCisJZ2VtX2NvbnRleHRfZ2V0X3BhcmFtKGZkLCAmYXJn KTsKKworCS8qIEZpcnN0IHNldCB0aGUgZGVmYXVsdCBtYXNrICovCisJc3BpbiA9IF9fcHJlX3Nl dChmZCwgZmxhZ3MsIGFyZy5jdHhfaWQpOworCXNzZXUuc2xpY2VfbWFzayA9IF9fc2xpY2VfbWFz a19fOworCWdlbV9jb250ZXh0X3NldF9wYXJhbShmZCwgJmFyZyk7CisJc3BpbiA9IF9fcG9zdF9z ZXQoZmQsIGZsYWdzLCBhcmcuY3R4X2lkLCBzcGluLCBfX3NsaWNlX2NvdW50X18pOworCisJLyog VGhlbiBzZXQgYSBwb3dlcmdhdGVkIGNvbmZpZ3VyYXRpb24gKi8KKwlzcGluID0gX19wcmVfc2V0 KGZkLCBmbGFncywgYXJnLmN0eF9pZCk7CisJc3NldS5zbGljZV9tYXNrID0gcGdfc2xpY2VfbWFz azsKKwlnZW1fY29udGV4dF9zZXRfcGFyYW0oZmQsICZhcmcpOworCXNwaW4gPSBfX3Bvc3Rfc2V0 KGZkLCBmbGFncywgYXJnLmN0eF9pZCwgc3BpbiwgcGdfc2xpY2VfY291bnQpOworCisJLyogUHV0 IHRoZSBkZXZpY2UncyBkZWZhdWx0IGJhY2sgYWdhaW4gKi8KKwlzcGluID0gX19wcmVfc2V0KGZk LCBmbGFncywgYXJnLmN0eF9pZCk7CisJc3NldS5zbGljZV9tYXNrID0gX19zbGljZV9tYXNrX187 CisJZ2VtX2NvbnRleHRfc2V0X3BhcmFtKGZkLCAmYXJnKTsKKwlzcGluID0gX19wb3N0X3NldChm ZCwgZmxhZ3MsIGFyZy5jdHhfaWQsIHNwaW4sIF9fc2xpY2VfY291bnRfXyk7CisKKwkvKiBPbmUg bGFzdCBwb3dlcmdhdGVkIGNvbmZpZyBmb3IgdGhlIHJvYWQuLi4gKi8KKwlzcGluID0gX19wcmVf c2V0KGZkLCBmbGFncywgYXJnLmN0eF9pZCk7CisJc3NldS5zbGljZV9tYXNrID0gcGdfc2xpY2Vf bWFzazsKKwlnZW1fY29udGV4dF9zZXRfcGFyYW0oZmQsICZhcmcpOworCXNwaW4gPSBfX3Bvc3Rf c2V0KGZkLCBmbGFncywgYXJnLmN0eF9pZCwgc3BpbiwgcGdfc2xpY2VfY291bnQpOworCisJZ2Vt X2NvbnRleHRfZGVzdHJveShmZCwgYXJnLmN0eF9pZCk7Cit9CisKK2lndF9tYWluCit7CisJdW5z aWduZWQgaW50IG1heF9zbGljZXMgPSAzLCBtYXhfc3Vic2xpY2VzID0gMzsKKwl1bnNpZ25lZCBp bnQgaTsKKwlpbnQgZmQ7CisKKwlpZ3RfZml4dHVyZSB7CisJCWZkID0gZHJtX29wZW5fZHJpdmVy KERSSVZFUl9JTlRFTCk7CisJCWlndF9yZXF1aXJlX2dlbShmZCk7CisKKwkJX19pbnRlbF9kZXZp ZF9fID0gaW50ZWxfZ2V0X2RybV9kZXZpZChmZCk7CisJCV9faW50ZWxfZ2VuX18gPSBpbnRlbF9n ZW4oX19pbnRlbF9kZXZpZF9fKTsKKworCQlpZ3RfcmVxdWlyZShrZXJuZWxfaGFzX3Blcl9jb250 ZXh0X3NzZXVfc3VwcG9ydChmZCkpOworCisJCWlmIChfX2ludGVsX2dlbl9fID49IDExKQorCQkJ X19yZWFkX3NsaWNlX2NvdW50ID0gZ2VuMTFfcmVhZF9zbGljZV9jb3VudDsKKwkJZWxzZQorCQkJ X19yZWFkX3NsaWNlX2NvdW50ID0gZ2VuOF9yZWFkX3NsaWNlX2NvdW50OworCX0KKworCWlndF9z dWJ0ZXN0X2dyb3VwIHsKKwkJaWd0X2ZpeHR1cmUgeworCQkJZHJtX2k5MTVfZ2V0cGFyYW1fdCBn cDsKKworCQkJZ3AucGFyYW0gPSBJOTE1X1BBUkFNX1NMSUNFX01BU0s7CisJCQlncC52YWx1ZSA9 IChpbnQgKikgJl9fc2xpY2VfbWFza19fOworCQkJZG9faW9jdGwoZmQsIERSTV9JT0NUTF9JOTE1 X0dFVFBBUkFNLCAmZ3ApOworCQkJX19zbGljZV9jb3VudF9fID0gX19idWlsdGluX3BvcGNvdW50 KF9fc2xpY2VfbWFza19fKTsKKworCQkJZ3AucGFyYW0gPSBJOTE1X1BBUkFNX1NVQlNMSUNFX01B U0s7CisJCQlncC52YWx1ZSA9IChpbnQgKikgJl9fc3Vic2xpY2VfbWFza19fOworCQkJZG9faW9j dGwoZmQsIERSTV9JT0NUTF9JOTE1X0dFVFBBUkFNLCAmZ3ApOworCQkJX19zdWJzbGljZV9jb3Vu dF9fID0KKwkJCQlfX2J1aWx0aW5fcG9wY291bnQoX19zdWJzbGljZV9tYXNrX18pOworCQl9CisK KwkJaWd0X3N1YnRlc3QoImludmFsaWQtYXJncyIpCisJCQl0ZXN0X2ludmFsaWRfYXJncyhmZCk7 CisKKwkJaWd0X3N1YnRlc3QoImludmFsaWQtc3NldSIpCisJCQl0ZXN0X2ludmFsaWRfc3NldShm ZCk7CisKKwkJaWd0X3N1YnRlc3QoImdndHQtYXJncyIpCisJCQl0ZXN0X2dndHRfYXJncyhmZCk7 CisKKwkJaWd0X3N1YnRlc3QoImVuZ2luZXMiKQorCQkJdGVzdF9lbmdpbmVzKGZkKTsKKworCQlm b3IgKGkgPSAxOyBpIDwgbWF4X3NsaWNlczsgaSsrKSB7CisJCQlpZ3Rfc3VidGVzdF9mKCJzbGlj ZS1wZy0laSIsIGkpIHsKKwkJCQlpZ3RfcmVxdWlyZShfX3NsaWNlX2NvdW50X18gPiBpKTsKKwor CQkJCXRlc3Rfc2xpY2VfcGcoZmQsIGkpOworCQkJfQorCQl9CisKKwkJZm9yIChpID0gMTsgaSA8 IG1heF9zdWJzbGljZXM7IGkrKykgeworCQkJaWd0X3N1YnRlc3RfZigic3Vic2xpY2UtcGctJWki LCBpKSB7CisJCQkJaWd0X3JlcXVpcmUoX19zdWJzbGljZV9jb3VudF9fID49IDIpOworCisJCQkJ LyoKKwkJCQkgKiBPbmx5IGF2YWlsYWJsZSBvbiBzb21lIEF0b20gcGxhdGZvcm1zIGFuZAorCQkJ CSAqIEdlbjEwKy4KKwkJCQkgKi8KKwkJCQlpZ3RfcmVxdWlyZShJU19CUk9YVE9OKF9faW50ZWxf ZGV2aWRfXykgfHwKKwkJCQkJICAgIElTX0dFTUlOSUxBS0UoX19pbnRlbF9kZXZpZF9fKSB8fAor CQkJCQkgICAgX19pbnRlbF9nZW5fXyA+PSAxMCk7CisKKwkJCQl0ZXN0X3N1YnNsaWNlX3BnKGZk LCBpKTsKKwkJCX0KKwkJfQorCisJCWlndF9zdWJ0ZXN0KCJwZXJmLW9hIikgeworCQkJaWd0X3Jl cXVpcmUoX19zbGljZV9jb3VudF9fID4gMSk7CisKKwkJCXRlc3RfcGVyZl9vYShmZCk7CisJCX0K KworCQlpZ3Rfc3VidGVzdCgiZHluYW1pYyIpCisJCQl0ZXN0X2R5bmFtaWMoZmQsIDApOworCisJ CWlndF9zdWJ0ZXN0KCJkeW5hbWljLWJ1c3kiKQorCQkJdGVzdF9keW5hbWljKGZkLCBURVNUX0JV U1kpOworCisJCWlndF9zdWJ0ZXN0KCJkeW5hbWljLXJlc2V0IikKKwkJCXRlc3RfZHluYW1pYyhm ZCwgVEVTVF9SRVNFVCk7CisKKwkJaWd0X3N1YnRlc3QoImR5bmFtaWMtYnVzeS1yZXNldCIpCisJ CQl0ZXN0X2R5bmFtaWMoZmQsIFRFU1RfQlVTWSB8IFRFU1RfUkVTRVQpOworCisJCWlndF9zdWJ0 ZXN0KCJkeW5hbWljLWJ1c3ktaGFuZyIpCisJCQl0ZXN0X2R5bmFtaWMoZmQsIFRFU1RfQlVTWSB8 IFRFU1RfSEFORyk7CisKKwkJaWd0X3N1YnRlc3QoImR5bmFtaWMtaWRsZSIpCisJCQl0ZXN0X2R5 bmFtaWMoZmQsIFRFU1RfSURMRSk7CisKKwkJaWd0X3N1YnRlc3QoImR5bmFtaWMtc3VzcGVuZCIp CisJCQl0ZXN0X2R5bmFtaWMoZmQsIFRFU1RfU1VTUEVORCk7CisKKwkJaWd0X3N1YnRlc3QoImR5 bmFtaWMtaWRsZS1zdXNwZW5kIikKKwkJCXRlc3RfZHluYW1pYyhmZCwgVEVTVF9JRExFIHwgVEVT VF9TVVNQRU5EKTsKKwl9CisKKwlpZ3RfZml4dHVyZSB7CisJCWNsb3NlKGZkKTsKKwl9Cit9CmRp ZmYgLS1naXQgYS90ZXN0cy9tZXNvbi5idWlsZCBiL3Rlc3RzL21lc29uLmJ1aWxkCmluZGV4IDE3 ZGViOTQ1ZWM5NS4uOTMxOWZhNGUxOWI0IDEwMDY0NAotLS0gYS90ZXN0cy9tZXNvbi5idWlsZAor KysgYi90ZXN0cy9tZXNvbi5idWlsZApAQCAtMjQ5LDYgKzI0OSwxMyBAQCBmb3JlYWNoIHByb2cg OiB0ZXN0X3Byb2dzCiAJCSAgIGluc3RhbGwgOiB0cnVlKQogZW5kZm9yZWFjaAogCit0ZXN0X2V4 ZWN1dGFibGVzICs9IGV4ZWN1dGFibGUoJ2dlbV9jdHhfc3NldScsICdnZW1fY3R4X3NzZXUuYycs CisJICAgZGVwZW5kZW5jaWVzIDogdGVzdF9kZXBzICsgWyBsaWJfaWd0X3BlcmYgXSwKKwkgICBp bnN0YWxsX2RpciA6IGxpYmV4ZWNkaXIsCisJICAgaW5zdGFsbF9ycGF0aCA6IGxpYmV4ZWNkaXJf cnBhdGhkaXIsCisJICAgaW5zdGFsbCA6IHRydWUpCit0ZXN0X3Byb2dzICs9ICdnZW1fY3R4X3Nz ZXUnCisKIHRlc3RfZXhlY3V0YWJsZXMgKz0gZXhlY3V0YWJsZSgnZ2VtX2VpbycsICdnZW1fZWlv LmMnLAogCSAgIGRlcGVuZGVuY2llcyA6IHRlc3RfZGVwcyArIFsgcmVhbHRpbWUgXSwKIAkgICBp bnN0YWxsX2RpciA6IGxpYmV4ZWNkaXIsCi0tIAoyLjE3LjEKCl9fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fCkludGVsLWdmeCBtYWlsaW5nIGxpc3QKSW50ZWwt Z2Z4QGxpc3RzLmZyZWVkZXNrdG9wLm9yZwpodHRwczovL2xpc3RzLmZyZWVkZXNrdG9wLm9yZy9t YWlsbWFuL2xpc3RpbmZvL2ludGVsLWdmeAo=