From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-15.8 required=3.0 tests=BAYES_00, HEADER_FROM_DIFFERENT_DOMAINS,HK_RANDOM_FROM,INCLUDES_CR_TRAILER, INCLUDES_PATCH,MAILING_LIST_MULTI,SPF_HELO_NONE,SPF_PASS,URIBL_BLOCKED, USER_AGENT_GIT autolearn=ham autolearn_force=no version=3.4.0 Received: from mail.kernel.org (mail.kernel.org [198.145.29.99]) by smtp.lore.kernel.org (Postfix) with ESMTP id 74EEBC433E0 for ; Fri, 22 Jan 2021 13:12:25 +0000 (UTC) Received: from gabe.freedesktop.org (gabe.freedesktop.org [131.252.210.177]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mail.kernel.org (Postfix) with ESMTPS id 2E019223C8 for ; Fri, 22 Jan 2021 13:12:25 +0000 (UTC) DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org 2E019223C8 Authentication-Results: mail.kernel.org; dmarc=fail (p=none dis=none) header.from=linux.intel.com Authentication-Results: mail.kernel.org; spf=none smtp.mailfrom=intel-gfx-bounces@lists.freedesktop.org Received: from gabe.freedesktop.org (localhost [127.0.0.1]) by gabe.freedesktop.org (Postfix) with ESMTP id 9A0ED6E87B; Fri, 22 Jan 2021 13:12:24 +0000 (UTC) Received: from mga18.intel.com (mga18.intel.com [134.134.136.126]) by gabe.freedesktop.org (Postfix) with ESMTPS id 898B76E47E; Fri, 22 Jan 2021 13:12:23 +0000 (UTC) IronPort-SDR: wPwTOk3vbcORcezoACs2H3N7M2SV5dNRQcYcVxl/tQiuvbZws0eBSjiRW+w2wX0YkfE+7iSFie XlutAEVieoVQ== X-IronPort-AV: E=McAfee;i="6000,8403,9871"; a="167125440" X-IronPort-AV: E=Sophos;i="5.79,366,1602572400"; d="scan'208";a="167125440" Received: from orsmga008.jf.intel.com ([10.7.209.65]) by orsmga106.jf.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 22 Jan 2021 05:12:22 -0800 IronPort-SDR: ynu3ZqbvL9tI7ETfHM/foFkG5kUAKNeZyvn63m8C1SFY5+Xd6LBempZpmGH3M63N/z2/eISDRk yrMQPxENLOBA== X-IronPort-AV: E=Sophos;i="5.79,366,1602572400"; d="scan'208";a="385751794" Received: from gtidhar-mobl.ger.corp.intel.com (HELO localhost.localdomain) ([10.214.206.196]) by orsmga008-auth.jf.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 22 Jan 2021 05:12:20 -0800 From: Tvrtko Ursulin To: igt-dev@lists.freedesktop.org Date: Fri, 22 Jan 2021 13:12:10 +0000 Message-Id: <20210122131210.768918-1-tvrtko.ursulin@linux.intel.com> X-Mailer: git-send-email 2.27.0 In-Reply-To: <20210121181005.762333-1-tvrtko.ursulin@linux.intel.com> References: <20210121181005.762333-1-tvrtko.ursulin@linux.intel.com> MIME-Version: 1.0 Subject: [Intel-gfx] [PATCH i-g-t v7] intel-gpu-top: Support for client stats X-BeenThere: intel-gfx@lists.freedesktop.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: Intel graphics driver community testing & development List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: Intel-gfx@lists.freedesktop.org, Chris Wilson Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Errors-To: intel-gfx-bounces@lists.freedesktop.org Sender: "Intel-gfx" RnJvbTogVHZydGtvIFVyc3VsaW4gPHR2cnRrby51cnN1bGluQGludGVsLmNvbT4KCkFkZHMgc3Vw cG9ydCBmb3IgcGVyLWNsaWVudCBlbmdpbmUgYnVzeW5lc3Mgc3RhdHMgaTkxNSBleHBvcnRzIGlu IHN5c2ZzCmFuZCBwcm9kdWNlcyBvdXRwdXQgbGlrZSB0aGUgYmVsb3c6Cgo9PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09CmludGVsLWdwdS10b3A6IEludGVsIFNreWxha2UgKEdlbjkpIEAgL2Rldi9kcmkv Y2FyZDAgLSAgOTUxLyA5NTAgTUh6OwogICAgMCUgUkM2OyAxNC42MC8yMy42MiBXOyAgICAgMTQ4 MiBpcnFzL3MKCiAgICAgIElNQyByZWFkczogICAgIDEyODcgTWlCL3MKICAgICBJTUMgd3JpdGVz OiAgICAgIDExNSBNaUIvcwoKICAgICAgICAgRU5HSU5FUyAgICAgQlVTWSAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIE1JX1NFTUEgTUlfV0FJVAogICAgICAgUmVuZGVyLzNE ICAgOTUuNDglIHzilojilojilojilojilojilojilojilojilojilojilojilojilojilojiloji lojilojilojilojilojilojilojilojilojilojilojilojilojilojilojilojilojiloggIHwg ICAgICA1JSAgICAgIDAlCiAgICAgICAgIEJsaXR0ZXIgICAxNS45OCUgfOKWiOKWiOKWiOKWiOKW iCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgIDEwJSAgICAgIDAlCiAgICAgICAg ICAgVmlkZW8gICAzNS40MCUgfOKWiOKWiOKWiOKWiOKWiOKWiOKWiOKWiOKWiOKWiOKWiOKWiCAg ICAgICAgICAgICAgICAgICAgICAgfCAgICAgMjYlICAgICAgMCUKICAgIFZpZGVvRW5oYW5jZSAg ICAwLjAwJSB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgMCUgICAg ICAwJQoKICAgUElEICAgICAgICAgICAgICBOQU1FICAgUmVuZGVyLzNEICAgICBCbGl0dGVyICAg ICAgIFZpZGVvICAgIFZpZGVvRW5oYW5jZQogIDEwNTMgICAgICAgICAgZ2VtX3dzaW0gfOKWiOKW iOKWiCAgICAgICAgfHwgICAgICAgICAgIHx84paI4paI4paIICAgICAgICB8fCAgICAgICAgICAg fAogIDEwNTQgICAgICAgICAgZ2VtX3dzaW0gfOKWiOKWiOKWiOKWiOKWiOKWiOKWiCAgICB8fOKW iCAgICAgICAgICB8fCAgICAgICAgICAgfHwgICAgICAgICAgIHwKPT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PQoKQXBhcnQgZnJvbSB0aGUgZXhpc3RpbmcgcGh5c2ljYWwgZW5naW5lIHV0aWxpemF0aW9u IGl0IG5vdyBhbHNvIHNob3dzCnV0aWxpemF0aW9uIHBlciBjbGllbnQgYW5kIHBlciBlbmdpbmUg Y2xhc3MuCgp2MjoKICogVmVyc2lvbiB0byBtYXRjaCByZW1vdmFsIG9mIGdsb2JhbCBlbmFibGVf c3RhdHMgdG9nZ2xlLgogKiBQbHVzIHZhcmlvdXMgZml4ZXMuCgp2MzoKICogU3VwcG9ydCBicmll ZiBiYWNrd2FyZCBqdW1wcyBpbiBjbGllbnQgc3RhdHMuCgp2NDoKICogU3VwcG9ydCBkZXZpY2Ug c2VsZWN0aW9uLgoKdjU6CiAqIFJlYmFzZSBmb3IgY2xhc3MgYWdncmVnYXRpb24uCiAqIE9wdGlt aXNlIHN5c2ZzIHJlYWRzIGEgdGlueSBiaXQgYnkgb3BlbmF0KDIpIGFuZCBjYWNoaW5nIGNsaWVu dCByb290LgoKdjY6CiAqIFNob3cgY2xpZW50cyBhcyBzb29uIGFzIGRldGVjdGVkLCBqdXN0IGRl bGF5IGJ1c3luZXNzIGRhdGEgb25lIHBlcmlvZC4KICogQWRkIG9wdGlvbiB0byBzaG93IG51bWVy aWMgYnVzeW5lc3MgKCduJykuCiAqIEZ1cnRoZXIgb3B0aW1pemUgc3lzZnMgcmVhZHMuCiAqIFRy aW0gb3Zlcmdyb3duIGFycmF5LiAoQ2hyaXMpCiAqIFNpbXBsaWZ5IGNsaWVudCBzb3J0IGNhbGxi YWNrIGFuZCBmaW5kIGNsaWVudCBsb29wLiAoQ2hyaXMpCiAqIFphcCBub24tcHJpbnRhYmxlIGNo YXJzIHdoZW4gZGlzcGxheWluZyBjbGllbnQgbmFtZXMuIChDaHJpcykKCnY3OgogKiBGaXggdGVy bWluYWwgaGVpZ2h0IHZzIGxpbmVzIHByaW50ZWQgaGFuZGxpbmcuCiAqIE9wdGltaXNlIGNsaWVu dCBzZWFyY2hlcyBieSByZWx5aW5nIG9uIHNvcnRpbmcuCiAqIEFkZGVkIHNvbWUgc29ydGluZyBt b2RlcyBjeWNsYWJsZSB2aWEgJ3MnLgogKiBTdHJheSBzZW1pLWNvbG9uIGFuZCBmdXJodGVyIHNv cnQgY2xlYW51cC4gKENocmlzKQoKU2lnbmVkLW9mZi1ieTogVHZydGtvIFVyc3VsaW4gPHR2cnRr by51cnN1bGluQGludGVsLmNvbT4KUmV2aWV3ZWQtYnk6IENocmlzIFdpbHNvbiA8Y2hyaXNAY2hy aXMtd2lsc29uLmNvLnVrPiAjIHY2Ci0tLQogdG9vbHMvaW50ZWxfZ3B1X3RvcC5jIHwgNzA4ICsr KysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrLQogMSBmaWxlIGNoYW5nZWQs IDY5MyBpbnNlcnRpb25zKCspLCAxNSBkZWxldGlvbnMoLSkKCmRpZmYgLS1naXQgYS90b29scy9p bnRlbF9ncHVfdG9wLmMgYi90b29scy9pbnRlbF9ncHVfdG9wLmMKaW5kZXggNzJhZDdjYmU5YThj Li43YThjMmI1MDJhNzMgMTAwNjQ0Ci0tLSBhL3Rvb2xzL2ludGVsX2dwdV90b3AuYworKysgYi90 b29scy9pbnRlbF9ncHVfdG9wLmMKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IMKp IDIwMDctMjAxOSBJbnRlbCBDb3Jwb3JhdGlvbgorICogQ29weXJpZ2h0IMKpIDIwMDctMjAyMSBJ bnRlbCBDb3Jwb3JhdGlvbgogICoKICAqIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZy ZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhCiAgKiBjb3B5IG9mIHRoaXMg c29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICJTb2Z0d2Fy ZSIpLApAQCAtNDYsNiArNDYsOCBAQAogCiAjaW5jbHVkZSAiaWd0X3BlcmYuaCIKIAorI2RlZmlu ZSBBUlJBWV9TSVpFKGFycikgKHNpemVvZihhcnIpL3NpemVvZihhcnJbMF0pKQorCiBzdHJ1Y3Qg cG11X3BhaXIgewogCXVpbnQ2NF90IGN1cjsKIAl1aW50NjRfdCBwcmV2OwpAQCAtNjI1LDI1ICs2 MjcsNDgyIEBAIHN0YXRpYyB2b2lkIHBtdV9zYW1wbGUoc3RydWN0IGVuZ2luZXMgKmVuZ2luZXMp CiAJfQogfQogCitlbnVtIGNsaWVudF9zdGF0dXMgeworCUZSRUUgPSAwLCAvKiBtYnogKi8KKwlB TElWRSwKKwlQUk9CRQorfTsKKworc3RydWN0IGNsaWVudHM7CisKK3N0cnVjdCBjbGllbnQgewor CXN0cnVjdCBjbGllbnRzICpjbGllbnRzOworCisJZW51bSBjbGllbnRfc3RhdHVzIHN0YXR1czsK KwlpbnQgc3lzZnNfcm9vdDsKKwlpbnQgYnVzeV9yb290OworCXVuc2lnbmVkIGludCBpZDsKKwl1 bnNpZ25lZCBpbnQgcGlkOworCWNoYXIgbmFtZVsyNF07CisJY2hhciBwcmludF9uYW1lWzI0XTsK Kwl1bnNpZ25lZCBpbnQgc2FtcGxlczsKKwl1bnNpZ25lZCBsb25nIHRvdGFsX3J1bnRpbWU7CisJ dW5zaWduZWQgbG9uZyBsYXN0X3J1bnRpbWU7CisJc3RydWN0IGVuZ2luZXMgKmVuZ2luZXM7CisJ dW5zaWduZWQgbG9uZyAqdmFsOworCXVpbnQ2NF90ICpsYXN0OworfTsKKworc3RydWN0IGNsaWVu dHMgeworCXVuc2lnbmVkIGludCBudW1fY2xpZW50czsKKwl1bnNpZ25lZCBpbnQgYWN0aXZlX2Ns aWVudHM7CisKKwl1bnNpZ25lZCBpbnQgbnVtX2NsYXNzZXM7CisJc3RydWN0IGVuZ2luZV9jbGFz cyAqY2xhc3M7CisKKwljaGFyIHN5c2ZzX3Jvb3RbMTI4XTsKKworCXN0cnVjdCBjbGllbnQgKmNs aWVudDsKK307CisKKyNkZWZpbmUgZm9yX2VhY2hfY2xpZW50KGNsaWVudHMsIGMsIHRtcCkgXAor CWZvciAoKHRtcCkgPSAoY2xpZW50cyktPm51bV9jbGllbnRzLCBjID0gKGNsaWVudHMpLT5jbGll bnQ7IFwKKwkgICAgICh0bXAgPiAwKTsgKHRtcCktLSwgKGMpKyspCisKK3N0YXRpYyBzdHJ1Y3Qg Y2xpZW50cyAqaW5pdF9jbGllbnRzKGNvbnN0IGNoYXIgKmRybV9jYXJkKQoreworCXN0cnVjdCBj bGllbnRzICpjbGllbnRzID0gbWFsbG9jKHNpemVvZigqY2xpZW50cykpOworCWNvbnN0IGNoYXIg KnNsYXNoOworCXNzaXplX3QgcmV0OworCisJbWVtc2V0KGNsaWVudHMsIDAsIHNpemVvZigqY2xp ZW50cykpOworCisJaWYgKGRybV9jYXJkKSB7CisJCXNsYXNoID0gcmluZGV4KGRybV9jYXJkLCAn LycpOworCQlhc3NlcnQoc2xhc2gpOworCX0gZWxzZSB7CisJCXNsYXNoID0gImNhcmQwIjsKKwl9 CisKKwlyZXQgPSBzbnByaW50ZihjbGllbnRzLT5zeXNmc19yb290LCBzaXplb2YoY2xpZW50cy0+ c3lzZnNfcm9vdCksCisJCSAgICAgICAiL3N5cy9jbGFzcy9kcm0vJXMvY2xpZW50cy8iLCBzbGFz aCk7CisJYXNzZXJ0KHJldCA+IDAgJiYgcmV0IDwgc2l6ZW9mKGNsaWVudHMtPnN5c2ZzX3Jvb3Qp KTsKKworCXJldHVybiBjbGllbnRzOworfQorCitzdGF0aWMgaW50IF9fcmVhZF90b19idWYoaW50 IGZkLCBjaGFyICpidWYsIHVuc2lnbmVkIGludCBidWZzaXplKQoreworCXNzaXplX3QgcmV0Owor CWludCBlcnI7CisKKwlyZXQgPSByZWFkKGZkLCBidWYsIGJ1ZnNpemUgLSAxKTsKKwllcnIgPSBl cnJubzsKKwlpZiAocmV0IDwgMSkgeworCQllcnJubyA9IHJldCA8IDAgPyBlcnIgOiBFTk9NU0c7 CisKKwkJcmV0dXJuIC0xOworCX0KKworCWlmIChyZXQgPiAxICYmIGJ1ZltyZXQgLSAxXSA9PSAn XG4nKQorCQlidWZbcmV0IC0gMV0gPSAnXDAnOworCWVsc2UKKwkJYnVmW3JldF0gPSAnXDAnOwor CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQKK19fcmVhZF9jbGllbnRfZmllbGQoaW50IHJv b3QsIGNvbnN0IGNoYXIgKmZpZWxkLCBjaGFyICpidWYsIHVuc2lnbmVkIGludCBidWZzaXplKQor eworCWludCBmZCwgcmV0OworCisJZmQgPSBvcGVuYXQocm9vdCwgZmllbGQsIE9fUkRPTkxZKTsK KwlpZiAoZmQgPCAwKQorCQlyZXR1cm4gLTE7CisKKwlyZXQgPSBfX3JlYWRfdG9fYnVmKGZkLCBi dWYsIGJ1ZnNpemUpOworCisJY2xvc2UoZmQpOworCisJcmV0dXJuIHJldDsKK30KKworc3RhdGlj IHVpbnQ2NF90CityZWFkX2NsaWVudF9idXN5KHN0cnVjdCBjbGllbnQgKmNsaWVudCwgdW5zaWdu ZWQgaW50IGNsYXNzKQoreworCWNvbnN0IGNoYXIgKmNsYXNzX3N0cltdID0geyAiMCIsICIxIiwg IjIiLCAiMyIsICI0IiwgIjUiLCAiNiIsICI3IiB9OworCWNoYXIgYnVmWzI1Nl0sICpiOworCWlu dCByZXQ7CisKKwlhc3NlcnQoY2xhc3MgPCBBUlJBWV9TSVpFKGNsYXNzX3N0cikpOworCWlmIChj bGFzcyA+PSBBUlJBWV9TSVpFKGNsYXNzX3N0cikpCisJCXJldHVybiAwOworCisJYXNzZXJ0KGNs aWVudC0+c3lzZnNfcm9vdCA+PSAwKTsKKwlpZiAoY2xpZW50LT5zeXNmc19yb290IDwgMCkKKwkJ cmV0dXJuIDA7CisKKwlpZiAoY2xpZW50LT5idXN5X3Jvb3QgPCAwKQorCQljbGllbnQtPmJ1c3lf cm9vdCA9IG9wZW5hdChjbGllbnQtPnN5c2ZzX3Jvb3QsICJidXN5IiwKKwkJCQkJICAgT19SRE9O TFkgfCBPX0RJUkVDVE9SWSk7CisKKwlhc3NlcnQoY2xpZW50LT5idXN5X3Jvb3QpOworCWlmIChj bGllbnQtPmJ1c3lfcm9vdCA8IDApCisJCXJldHVybiAwOworCisJcmV0ID0gX19yZWFkX2NsaWVu dF9maWVsZChjbGllbnQtPmJ1c3lfcm9vdCwgY2xhc3Nfc3RyW2NsYXNzXSwgYnVmLAorCQkJCSAg c2l6ZW9mKGJ1ZikpOworCWFzc2VydChyZXQgPT0gMCk7CisJaWYgKHJldCkKKwkJcmV0dXJuIDA7 CisKKwkvKgorCSAqIEhhbmRsZSBib3RoIHNpbmdsZSBpbnRlZ2VyIGFuZCBrZXk9dmFsdWUgZm9y bWF0cyBieSBza2lwcGluZworCSAqIGxlYWRpbmcgbm9uLWRpZ2l0cy4KKwkgKi8KKwliID0gYnVm OworCXdoaWxlICgqYiAmJiAhaXNkaWdpdCgqYikpCisJCWIrKzsKKworCXJldHVybiBzdHJ0b3Vs bChiLCBOVUxMLCAxMCk7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgY2xpZW50ICoKK2ZpbmRfY2xpZW50 KHN0cnVjdCBjbGllbnRzICpjbGllbnRzLCBlbnVtIGNsaWVudF9zdGF0dXMgc3RhdHVzLCB1bnNp Z25lZCBpbnQgaWQpCit7CisJdW5zaWduZWQgaW50IHN0YXJ0LCBudW07CisJc3RydWN0IGNsaWVu dCAqYzsKKworCXN0YXJ0ID0gc3RhdHVzID09IEZSRUUgPyBjbGllbnRzLT5hY3RpdmVfY2xpZW50 cyA6IDA7IC8qIEZyZWUgYmxvY2sgYXQgdGhlIGVuZC4gKi8KKwludW0gPSBjbGllbnRzLT5udW1f Y2xpZW50cyAtIHN0YXJ0OworCisJZm9yIChjID0gJmNsaWVudHMtPmNsaWVudFtzdGFydF07IG51 bTsgYysrLCBudW0tLSkgeworCQlpZiAoc3RhdHVzICE9IGMtPnN0YXR1cykKKwkJCWNvbnRpbnVl OworCisJCWlmIChzdGF0dXMgPT0gRlJFRSB8fCBjLT5pZCA9PSBpZCkKKwkJCXJldHVybiBjOwor CX0KKworCXJldHVybiBOVUxMOworfQorCitzdGF0aWMgdm9pZCB1cGRhdGVfY2xpZW50KHN0cnVj dCBjbGllbnQgKmMsIHVuc2lnbmVkIGludCBwaWQsIGNoYXIgKm5hbWUpCit7CisJdWludDY0X3Qg dmFsW2MtPmNsaWVudHMtPm51bV9jbGFzc2VzXTsKKwl1bnNpZ25lZCBpbnQgaTsKKworCWlmIChj LT5waWQgIT0gcGlkKQorCQljLT5waWQgPSBwaWQ7CisKKwlpZiAoc3RyY21wKGMtPm5hbWUsIG5h bWUpKSB7CisJCWNoYXIgKnA7CisKKwkJc3RybmNweShjLT5uYW1lLCBuYW1lLCBzaXplb2YoYy0+ bmFtZSkgLSAxKTsKKwkJc3RybmNweShjLT5wcmludF9uYW1lLCBuYW1lLCBzaXplb2YoYy0+cHJp bnRfbmFtZSkgLSAxKTsKKworCQlwID0gYy0+cHJpbnRfbmFtZTsKKwkJd2hpbGUgKCpwKSB7CisJ CQlpZiAoIWlzcHJpbnQoKnApKQorCQkJCSpwID0gJyonOworCQkJcCsrOworCQl9CisJfQorCisJ Zm9yIChpID0gMDsgaSA8IGMtPmNsaWVudHMtPm51bV9jbGFzc2VzOyBpKyspCisJCXZhbFtpXSA9 IHJlYWRfY2xpZW50X2J1c3koYywgYy0+Y2xpZW50cy0+Y2xhc3NbaV0uY2xhc3MpOworCisJYy0+ bGFzdF9ydW50aW1lID0gMDsKKwljLT50b3RhbF9ydW50aW1lID0gMDsKKworCWZvciAoaSA9IDA7 IGkgPCBjLT5jbGllbnRzLT5udW1fY2xhc3NlczsgaSsrKSB7CisJCWlmICh2YWxbaV0gPCBjLT5s YXN0W2ldKQorCQkJY29udGludWU7IC8qIEl0IHdpbGwgY2F0Y2ggdXAgc29vbi4gKi8KKworCQlj LT50b3RhbF9ydW50aW1lICs9IHZhbFtpXTsKKwkJYy0+dmFsW2ldID0gdmFsW2ldIC0gYy0+bGFz dFtpXTsKKwkJYy0+bGFzdF9ydW50aW1lICs9IGMtPnZhbFtpXTsKKwkJYy0+bGFzdFtpXSA9IHZh bFtpXTsKKwl9CisKKwljLT5zYW1wbGVzKys7CisJYy0+c3RhdHVzID0gQUxJVkU7Cit9CisKK3N0 YXRpYyB2b2lkCithZGRfY2xpZW50KHN0cnVjdCBjbGllbnRzICpjbGllbnRzLCB1bnNpZ25lZCBp bnQgaWQsIHVuc2lnbmVkIGludCBwaWQsCisJICAgY2hhciAqbmFtZSwgaW50IHN5c2ZzX3Jvb3Qp Cit7CisJc3RydWN0IGNsaWVudCAqYzsKKworCWFzc2VydCghZmluZF9jbGllbnQoY2xpZW50cywg QUxJVkUsIGlkKSk7CisKKwljID0gZmluZF9jbGllbnQoY2xpZW50cywgRlJFRSwgMCk7CisJaWYg KCFjKSB7CisJCXVuc2lnbmVkIGludCBpZHggPSBjbGllbnRzLT5udW1fY2xpZW50czsKKworCQlj bGllbnRzLT5udW1fY2xpZW50cyArPSAoY2xpZW50cy0+bnVtX2NsaWVudHMgKyAyKSAvIDI7CisJ CWNsaWVudHMtPmNsaWVudCA9IHJlYWxsb2MoY2xpZW50cy0+Y2xpZW50LAorCQkJCQkgIGNsaWVu dHMtPm51bV9jbGllbnRzICogc2l6ZW9mKCpjKSk7CisJCWFzc2VydChjbGllbnRzLT5jbGllbnQp OworCisJCWMgPSAmY2xpZW50cy0+Y2xpZW50W2lkeF07CisJCW1lbXNldChjLCAwLCAoY2xpZW50 cy0+bnVtX2NsaWVudHMgLSBpZHgpICogc2l6ZW9mKCpjKSk7CisJfQorCisJYy0+c3lzZnNfcm9v dCA9IHN5c2ZzX3Jvb3Q7CisJYy0+YnVzeV9yb290ID0gLTE7CisJYy0+aWQgPSBpZDsKKwljLT5j bGllbnRzID0gY2xpZW50czsKKwljLT52YWwgPSBjYWxsb2MoY2xpZW50cy0+bnVtX2NsYXNzZXMs IHNpemVvZihjLT52YWwpKTsKKwljLT5sYXN0ID0gY2FsbG9jKGNsaWVudHMtPm51bV9jbGFzc2Vz LCBzaXplb2YoYy0+bGFzdCkpOworCWFzc2VydChjLT52YWwgJiYgYy0+bGFzdCk7CisKKwl1cGRh dGVfY2xpZW50KGMsIHBpZCwgbmFtZSk7Cit9CisKK3N0YXRpYyB2b2lkIGZyZWVfY2xpZW50KHN0 cnVjdCBjbGllbnQgKmMpCit7CisJaWYgKGMtPnN5c2ZzX3Jvb3QgPj0gMCkKKwkJY2xvc2UoYy0+ c3lzZnNfcm9vdCk7CisJaWYgKGMtPmJ1c3lfcm9vdCA+PSAwKQorCQljbG9zZShjLT5idXN5X3Jv b3QpOworCWZyZWUoYy0+dmFsKTsKKwlmcmVlKGMtPmxhc3QpOworCW1lbXNldChjLCAwLCBzaXpl b2YoKmMpKTsKK30KKworc3RhdGljIGludAorcmVhZF9jbGllbnRfc3lzZnMoY2hhciAqYnVmLCBp bnQgYnVmc2l6ZSwgY29uc3QgY2hhciAqc3lzZnNfcm9vdCwKKwkJICB1bnNpZ25lZCBpbnQgaWQs IGNvbnN0IGNoYXIgKmZpZWxkLCBpbnQgKmNsaWVudF9yb290KQoreworCXNzaXplX3QgcmV0Owor CisJaWYgKCpjbGllbnRfcm9vdCA8IDApIHsKKwkJY2hhciBuYW1lYnVmWzI1Nl07CisKKwkJcmV0 ID0gc25wcmludGYobmFtZWJ1Ziwgc2l6ZW9mKG5hbWVidWYpLCAiJXMvJXUiLAorCQkJICAgICAg IHN5c2ZzX3Jvb3QsIGlkKTsKKwkJYXNzZXJ0KHJldCA+IDAgJiYgcmV0IDwgc2l6ZW9mKG5hbWVi dWYpKTsKKwkJaWYgKHJldCA8PSAwIHx8IHJldCA9PSBzaXplb2YobmFtZWJ1ZikpCisJCQlyZXR1 cm4gLTE7CisKKwkJKmNsaWVudF9yb290ID0gb3BlbihuYW1lYnVmLCBPX1JET05MWSB8IE9fRElS RUNUT1JZKTsKKwl9CisKKwlpZiAoKmNsaWVudF9yb290IDwgMCkKKwkJcmV0dXJuIC0xOworCisJ cmV0dXJuIF9fcmVhZF9jbGllbnRfZmllbGQoKmNsaWVudF9yb290LCBmaWVsZCwgYnVmLCBidWZz aXplKTsKK30KKworc3RhdGljIHZvaWQgc2Nhbl9jbGllbnRzKHN0cnVjdCBjbGllbnRzICpjbGll bnRzKQoreworCXN0cnVjdCBkaXJlbnQgKmRlbnQ7CisJc3RydWN0IGNsaWVudCAqYzsKKwl1bnNp Z25lZCBpbnQgaWQ7CisJaW50IHRtcDsKKwlESVIgKmQ7CisKKwlpZiAoIWNsaWVudHMpCisJCXJl dHVybjsKKworCWZvcl9lYWNoX2NsaWVudChjbGllbnRzLCBjLCB0bXApIHsKKwkJYXNzZXJ0KGMt PnN0YXR1cyAhPSBQUk9CRSk7CisJCWlmIChjLT5zdGF0dXMgPT0gQUxJVkUpCisJCQljLT5zdGF0 dXMgPSBQUk9CRTsKKwkJZWxzZQorCQkJYnJlYWs7IC8qIEZyZWUgYmxvY2sgYXQgdGhlIGVuZCBv ZiBhcnJheS4gKi8KKwl9CisKKwlkID0gb3BlbmRpcihjbGllbnRzLT5zeXNmc19yb290KTsKKwlp ZiAoIWQpCisJCXJldHVybjsKKworCXdoaWxlICgoZGVudCA9IHJlYWRkaXIoZCkpICE9IE5VTEwp IHsKKwkJY2hhciBuYW1lWzI0XSwgcGlkWzI0XTsKKwkJaW50IHJldCwgcm9vdCA9IC0xLCAqcHI7 CisKKwkJaWYgKGRlbnQtPmRfdHlwZSAhPSBEVF9ESVIpCisJCQljb250aW51ZTsKKwkJaWYgKCFp c2RpZ2l0KGRlbnQtPmRfbmFtZVswXSkpCisJCQljb250aW51ZTsKKworCQlpZCA9IGF0b2koZGVu dC0+ZF9uYW1lKTsKKworCQljID0gZmluZF9jbGllbnQoY2xpZW50cywgUFJPQkUsIGlkKTsKKwor CQlpZiAoYykKKwkJCXByID0gJmMtPnN5c2ZzX3Jvb3Q7CisJCWVsc2UKKwkJCXByID0gJnJvb3Q7 CisKKwkJcmV0ID0gcmVhZF9jbGllbnRfc3lzZnMobmFtZSwgc2l6ZW9mKG5hbWUpLCBjbGllbnRz LT5zeXNmc19yb290LAorCQkJCQlpZCwgIm5hbWUiLCBwcik7CisJCXJldCB8PSByZWFkX2NsaWVu dF9zeXNmcyhwaWQsIHNpemVvZihwaWQpLCBjbGllbnRzLT5zeXNmc19yb290LAorCQkJCQlpZCwg InBpZCIsIHByKTsKKwkJaWYgKCFyZXQpIHsKKwkJCWlmICghYykKKwkJCQlhZGRfY2xpZW50KGNs aWVudHMsIGlkLCBhdG9pKHBpZCksIG5hbWUsIHJvb3QpOworCQkJZWxzZQorCQkJCXVwZGF0ZV9j bGllbnQoYywgYXRvaShwaWQpLCBuYW1lKTsKKwkJfSBlbHNlIGlmIChjKSB7CisJCQljLT5zdGF0 dXMgPSBQUk9CRTsgLyogV2lsbCBiZSBkZWxldGVkIGJlbG93LiAqLworCQl9CisJfQorCisJY2xv c2VkaXIoZCk7CisKKwlmb3JfZWFjaF9jbGllbnQoY2xpZW50cywgYywgdG1wKSB7CisJCWlmIChj LT5zdGF0dXMgPT0gUFJPQkUpCisJCQlmcmVlX2NsaWVudChjKTsKKwkJZWxzZSBpZiAoYy0+c3Rh dHVzID09IEZSRUUpCisJCQlicmVhazsKKwl9Cit9CisKK3N0YXRpYyBpbnQgY2xpZW50X2xhc3Rf Y21wKGNvbnN0IHZvaWQgKl9hLCBjb25zdCB2b2lkICpfYikKK3sKKwljb25zdCBzdHJ1Y3QgY2xp ZW50ICphID0gX2E7CisJY29uc3Qgc3RydWN0IGNsaWVudCAqYiA9IF9iOworCWxvbmcgdG90X2Es IHRvdF9iOworCisJLyoKKwkgKiBTb3J0IGNsaWVudHMgaW4gZGVzY2VuZGluZyBvcmRlciBvZiBy dW50aW1lIGluIHRoZSBwcmV2aW91cyBzYW1wbGluZworCSAqIHBlcmlvZCBmb3IgYWN0aXZlIG9u ZXMsIGZvbGxvd2VkIGJ5IGluYWN0aXZlLiBUaWUtYnJlYWtlciBpcyBjbGllbnQKKwkgKiBpZC4K KwkgKi8KKworCXRvdF9hID0gYS0+c3RhdHVzID09IEFMSVZFID8gYS0+bGFzdF9ydW50aW1lIDog LTE7CisJdG90X2IgPSBiLT5zdGF0dXMgPT0gQUxJVkUgPyBiLT5sYXN0X3J1bnRpbWUgOiAtMTsK KworCXRvdF9iIC09IHRvdF9hOworCWlmICh0b3RfYiA+IDApCisJCXJldHVybiAxOworCWlmICh0 b3RfYiA8IDApCisJCXJldHVybiAtMTsKKworCXJldHVybiAoaW50KWItPmlkIC0gYS0+aWQ7Cit9 CisKK3N0YXRpYyBpbnQgY2xpZW50X3RvdGFsX2NtcChjb25zdCB2b2lkICpfYSwgY29uc3Qgdm9p ZCAqX2IpCit7CisJY29uc3Qgc3RydWN0IGNsaWVudCAqYSA9IF9hOworCWNvbnN0IHN0cnVjdCBj bGllbnQgKmIgPSBfYjsKKwlsb25nIHRvdF9hLCB0b3RfYjsKKworCXRvdF9hID0gYS0+c3RhdHVz ID09IEFMSVZFID8gYS0+dG90YWxfcnVudGltZSA6IC0xOworCXRvdF9iID0gYi0+c3RhdHVzID09 IEFMSVZFID8gYi0+dG90YWxfcnVudGltZSA6IC0xOworCisJdG90X2IgLT0gdG90X2E7CisJaWYg KHRvdF9iID4gMCkKKwkJcmV0dXJuIDE7CisJaWYgKHRvdF9iIDwgMCkKKwkJcmV0dXJuIC0xOwor CisJcmV0dXJuIChpbnQpYi0+aWQgLSBhLT5pZDsKK30KKworc3RhdGljIGludCBjbGllbnRfaWRf Y21wKGNvbnN0IHZvaWQgKl9hLCBjb25zdCB2b2lkICpfYikKK3sKKwljb25zdCBzdHJ1Y3QgY2xp ZW50ICphID0gX2E7CisJY29uc3Qgc3RydWN0IGNsaWVudCAqYiA9IF9iOworCWludCBpZF9hLCBp ZF9iOworCisJaWRfYSA9IGEtPnN0YXR1cyA9PSBBTElWRSA/IGEtPmlkIDogLTE7CisJaWRfYiA9 IGItPnN0YXR1cyA9PSBBTElWRSA/IGItPmlkIDogLTE7CisKKwlpZF9iIC09IGlkX2E7CisJaWYg KGlkX2IgPiAwKQorCQlyZXR1cm4gMTsKKwlpZiAoaWRfYiA8IDApCisJCXJldHVybiAtMTsKKwor CXJldHVybiAoaW50KWItPmlkIC0gYS0+aWQ7Cit9CisKK3N0YXRpYyBpbnQgKCpjbGllbnRfY21w KShjb25zdCB2b2lkICosIGNvbnN0IHZvaWQgKikgPSBjbGllbnRfbGFzdF9jbXA7CisKK3N0YXRp YyB2b2lkIHNvcnRfY2xpZW50cyhzdHJ1Y3QgY2xpZW50cyAqY2xpZW50cykKK3sKKwl1bnNpZ25l ZCBpbnQgYWN0aXZlLCBmcmVlOworCXN0cnVjdCBjbGllbnQgKmM7CisJaW50IHRtcDsKKworCWlm ICghY2xpZW50cykKKwkJcmV0dXJuOworCisJcXNvcnQoY2xpZW50cy0+Y2xpZW50LCBjbGllbnRz LT5udW1fY2xpZW50cywgc2l6ZW9mKCpjbGllbnRzLT5jbGllbnQpLAorCSAgICAgIGNsaWVudF9j bXApOworCisJLyogVHJpbSBleGNlc3NpdmUgYXJyYXkgc3BhY2UuICovCisJYWN0aXZlID0gMDsK Kwlmb3JfZWFjaF9jbGllbnQoY2xpZW50cywgYywgdG1wKSB7CisJCWlmIChjLT5zdGF0dXMgIT0g QUxJVkUpCisJCQlicmVhazsgLyogQWN0aXZlIGNsaWVudHMgYXJlIGZpcnN0IGluIHRoZSBhcnJh eS4gKi8KKwkJYWN0aXZlKys7CisJfQorCisJY2xpZW50cy0+YWN0aXZlX2NsaWVudHMgPSBhY3Rp dmU7CisKKwlmcmVlID0gY2xpZW50cy0+bnVtX2NsaWVudHMgLSBhY3RpdmU7CisJaWYgKGZyZWUg PiBjbGllbnRzLT5udW1fY2xpZW50cyAvIDIpIHsKKwkJYWN0aXZlID0gY2xpZW50cy0+bnVtX2Ns aWVudHMgLSBmcmVlIC8gMjsKKwkJaWYgKGFjdGl2ZSAhPSBjbGllbnRzLT5udW1fY2xpZW50cykg eworCQkJY2xpZW50cy0+bnVtX2NsaWVudHMgPSBhY3RpdmU7CisJCQljbGllbnRzLT5jbGllbnQg PSByZWFsbG9jKGNsaWVudHMtPmNsaWVudCwKKwkJCQkJCSAgY2xpZW50cy0+bnVtX2NsaWVudHMg KgorCQkJCQkJICBzaXplb2YoKmMpKTsKKwkJfQorCX0KK30KKworCiBzdGF0aWMgY29uc3QgY2hh ciAqYmFyc1tdID0geyAiICIsICLilo8iLCAi4paOIiwgIuKWjSIsICLilowiLCAi4paLIiwgIuKW iiIsICLilokiLCAi4paIIiB9OwogCitzdGF0aWMgdm9pZCBuX3NwYWNlcyhjb25zdCB1bnNpZ25l ZCBpbnQgbikKK3sKKwl1bnNpZ25lZCBpbnQgaTsKKworCWZvciAoaSA9IDA7IGkgPCBuOyBpKysp CisJCXB1dGNoYXIoJyAnKTsKK30KKwogc3RhdGljIHZvaWQKLXByaW50X3BlcmNlbnRhZ2VfYmFy KGRvdWJsZSBwZXJjZW50LCBpbnQgbWF4X2xlbikKK3ByaW50X3BlcmNlbnRhZ2VfYmFyKGRvdWJs ZSBwZXJjZW50LCBpbnQgbWF4X2xlbiwgYm9vbCBudW1lcmljKQogewotCWludCBiYXJfbGVuID0g cGVyY2VudCAqICg4ICogKG1heF9sZW4gLSAyKSkgLyAxMDAuMDsKLQlpbnQgaTsKKwlpbnQgYmFy X2xlbiwgaSwgbGVuID0gbWF4X2xlbiAtIDI7CisJY29uc3QgaW50IHcgPSA4OworCisJYXNzZXJ0 KG1heF9sZW4gPiAwKTsKKworCWJhcl9sZW4gPSBwZXJjZW50ICogbGVuIC8gMTAwLjA7CisJaWYg KGJhcl9sZW4gPiBsZW4pCisJCWJhcl9sZW4gPSBsZW47CisJYmFyX2xlbiAqPSB3OwogCiAJcHV0 Y2hhcignfCcpOwogCi0JZm9yIChpID0gYmFyX2xlbjsgaSA+PSA4OyBpIC09IDgpCi0JCXByaW50 ZigiJXMiLCBiYXJzWzhdKTsKKwlmb3IgKGkgPSBiYXJfbGVuOyBpID49IHc7IGkgLT0gdykKKwkJ cHJpbnRmKCIlcyIsIGJhcnNbd10pOwogCWlmIChpKQogCQlwcmludGYoIiVzIiwgYmFyc1tpXSk7 CiAKLQlmb3IgKGkgPSAwOyBpIDwgKG1heF9sZW4gLSAyIC0gKGJhcl9sZW4gKyA3KSAvIDgpOyBp KyspCi0JCXB1dGNoYXIoJyAnKTsKKwlsZW4gLT0gKGJhcl9sZW4gKyAodyAtIDEpKSAvIHc7CisJ bl9zcGFjZXMobGVuKTsKIAogCXB1dGNoYXIoJ3wnKTsKKworCWlmIChudW1lcmljKSB7CisJCS8q CisJCSAqIFRPRE86IEZpbmVyIGdyYWluZWQgcmV2ZXJzZSBjb250cm9sIHRvIGJldHRlciBwcmVz ZXJ2ZQorCQkgKiBiYXIgdW5kZXIgbnVtZXJpY2FsIHBlcmNlbnRhZ2UuCisJCSAqLworCQlwcmlu dGYoIlwwMzNbJXVEXDAzM1s3bSIsIG1heF9sZW4gLSAxKTsKKwkJaSA9IHByaW50ZigiJTMuZiUl IiwgcGVyY2VudCk7CisJCXByaW50ZigiXDAzM1sldUNcMDMzWzBtIiwgbWF4X2xlbiAtIGkgLSAx KTsKKwl9CiB9CiAKICNkZWZpbmUgREVGQVVMVF9QRVJJT0RfTVMgKDEwMDApCkBAIC03MDUsOCAr MTE2NCw2IEBAIHN0YXRpYyBjb25zdCBjaGFyICpqc29uX2luZGVudFtdID0gewogCSJcdFx0XHRc dFx0IiwKIH07CiAKLSNkZWZpbmUgQVJSQVlfU0laRShhcnIpIChzaXplb2YoYXJyKS9zaXplb2Yo YXJyWzBdKSkKLQogc3RhdGljIHVuc2lnbmVkIGludCBqc29uX3ByZXZfc3RydWN0X21lbWJlcnM7 CiBzdGF0aWMgdW5zaWduZWQgaW50IGpzb25fc3RydWN0X21lbWJlcnM7CiAKQEAgLTc0NCw2ICsx MjAxLDE4IEBAIGpzb25fY2xvc2Vfc3RydWN0KHZvaWQpCiAJCWZmbHVzaChzdGRvdXQpOwogfQog CitzdGF0aWMgdm9pZAorX19qc29uX2FkZF9tZW1iZXIoY29uc3QgY2hhciAqa2V5LCBjb25zdCBj aGFyICp2YWwpCit7CisJYXNzZXJ0KGpzb25faW5kZW50X2xldmVsIDwgQVJSQVlfU0laRShqc29u X2luZGVudCkpOworCisJZnByaW50ZihvdXQsICIlcyVzXCIlc1wiOiBcIiVzXCIiLAorCQlqc29u X3N0cnVjdF9tZW1iZXJzID8gIixcbiIgOiAiIiwKKwkJanNvbl9pbmRlbnRbanNvbl9pbmRlbnRf bGV2ZWxdLCBrZXksIHZhbCk7CisKKwlqc29uX3N0cnVjdF9tZW1iZXJzKys7Cit9CisKIHN0YXRp YyB1bnNpZ25lZCBpbnQKIGpzb25fYWRkX21lbWJlcihjb25zdCBzdHJ1Y3QgY250X2dyb3VwICpw YXJlbnQsIHN0cnVjdCBjbnRfaXRlbSAqaXRlbSwKIAkJdW5zaWduZWQgaW50IGhlYWRlcnMpCkBA IC0xMDQ2LDggKzE1MTUsNiBAQCBwcmludF9oZWFkZXIoY29uc3Qgc3RydWN0IGlndF9kZXZpY2Vf Y2FyZCAqY2FyZCwKIAkJbWVtbW92ZSgmZ3JvdXBzWzBdLCAmZ3JvdXBzWzFdLAogCQkJc2l6ZW9m KGdyb3VwcykgLSBzaXplb2YoZ3JvdXBzWzBdKSk7CiAKLQlwb3BzLT5vcGVuX3N0cnVjdChOVUxM KTsKLQogCSpjb25zdW1lZCA9IHByaW50X2dyb3Vwcyhncm91cHMpOwogCiAJaWYgKG91dHB1dF9t b2RlID09IElOVEVSQUNUSVZFKSB7CkBAIC0xMjA0LDcgKzE2NzEsNyBAQCBwcmludF9lbmdpbmUo c3RydWN0IGVuZ2luZXMgKmVuZ2luZXMsIHVuc2lnbmVkIGludCBpLCBkb3VibGUgdCwKIAkJCSAg ICAgIGVuZ2luZS0+ZGlzcGxheV9uYW1lLCBlbmdpbmVfaXRlbXNbMF0uYnVmKTsKIAogCQl2YWwg PSBwbXVfY2FsYygmZW5naW5lLT5idXN5LnZhbCwgMWU5LCB0LCAxMDApOwotCQlwcmludF9wZXJj ZW50YWdlX2Jhcih2YWwsIG1heF93IC0gbGVuKTsKKwkJcHJpbnRfcGVyY2VudGFnZV9iYXIodmFs LCBtYXhfdyA+IGxlbiA/IG1heF93IC0gbGVuIDogMCwgZmFsc2UpOwogCiAJCXByaW50ZigiJXNc biIsIGJ1Zik7CiAKQEAgLTEyMTksNyArMTY4Niw2IEBAIHByaW50X2VuZ2luZXNfZm9vdGVyKHN0 cnVjdCBlbmdpbmVzICplbmdpbmVzLCBkb3VibGUgdCwKIAkJICAgICBpbnQgbGluZXMsIGludCBj b25fdywgaW50IGNvbl9oKQogewogCXBvcHMtPmNsb3NlX3N0cnVjdCgpOwotCXBvcHMtPmNsb3Nl X3N0cnVjdCgpOwogCiAJaWYgKG91dHB1dF9tb2RlID09IElOVEVSQUNUSVZFKSB7CiAJCWlmIChs aW5lcysrIDwgY29uX2gpCkBAIC0xMjQzLDYgKzE3MDksOSBAQCBzdGF0aWMgdm9pZCBpbml0X2Vu Z2luZV9jbGFzc2VzKHN0cnVjdCBlbmdpbmVzICplbmdpbmVzKQogCXVuc2lnbmVkIGludCBpLCBu dW07CiAJaW50IG1heCA9IC0xOwogCisJaWYgKGVuZ2luZXMtPm51bV9jbGFzc2VzKQorCQlyZXR1 cm47CisKIAlmb3IgKGkgPSAwOyBpIDwgZW5naW5lcy0+bnVtX2VuZ2luZXM7IGkrKykgewogCQlz dHJ1Y3QgZW5naW5lICplbmdpbmUgPSBlbmdpbmVfcHRyKGVuZ2luZXMsIGkpOwogCkBAIC0xNDA0 LDYgKzE4NzMsMTUzIEBAIHByaW50X2VuZ2luZXMoc3RydWN0IGVuZ2luZXMgKmVuZ2luZXMsIGRv dWJsZSB0LCBpbnQgbGluZXMsIGludCB3LCBpbnQgaCkKIAlyZXR1cm4gbGluZXM7CiB9CiAKK3N0 YXRpYyBpbnQKK3ByaW50X2NsaWVudHNfaGVhZGVyKHN0cnVjdCBjbGllbnRzICpjbGllbnRzLCBp bnQgbGluZXMsCisJCSAgICAgaW50IGNvbl93LCBpbnQgY29uX2gsIGludCAqY2xhc3NfdykKK3sK KwlpZiAob3V0cHV0X21vZGUgPT0gSU5URVJBQ1RJVkUpIHsKKwkJY29uc3QgY2hhciAqcGlkbmFt ZSA9ICIgICBQSUQgICAgICAgICAgICAgIE5BTUUgIjsKKwkJdW5zaWduZWQgaW50IG51bV9hY3Rp dmUgPSAwOworCQlpbnQgbGVuID0gc3RybGVuKHBpZG5hbWUpOworCisJCWlmIChsaW5lcysrID49 IGNvbl9oKQorCQkJcmV0dXJuIGxpbmVzOworCisJCXByaW50ZigiXDAzM1s3bSIpOworCQlwcmlu dGYoIiVzIiwgcGlkbmFtZSk7CisKKwkJaWYgKGxpbmVzKysgPj0gY29uX2ggfHwgbGVuID49IGNv bl93KQorCQkJcmV0dXJuIGxpbmVzOworCisJCWlmIChjbGllbnRzLT5udW1fY2xhc3Nlcykgewor CQkJdW5zaWduZWQgaW50IGk7CisJCQlpbnQgd2lkdGg7CisKKwkJCWZvciAoaSA9IDA7IGkgPCBj bGllbnRzLT5udW1fY2xhc3NlczsgaSsrKSB7CisJCQkJaWYgKGNsaWVudHMtPmNsYXNzW2ldLm51 bV9lbmdpbmVzKQorCQkJCQludW1fYWN0aXZlKys7CisJCQl9CisKKwkJCSpjbGFzc193ID0gd2lk dGggPSAoY29uX3cgLSBsZW4pIC8gbnVtX2FjdGl2ZTsKKworCQkJZm9yIChpID0gMDsgaSA8IGNs aWVudHMtPm51bV9jbGFzc2VzOyBpKyspIHsKKwkJCQljb25zdCBjaGFyICpuYW1lID0gY2xpZW50 cy0+Y2xhc3NbaV0ubmFtZTsKKwkJCQlpbnQgbmFtZV9sZW4gPSBzdHJsZW4obmFtZSk7CisJCQkJ aW50IHBhZCA9ICh3aWR0aCAtIG5hbWVfbGVuKSAvIDI7CisJCQkJaW50IHNwYWNlcyA9IHdpZHRo IC0gcGFkIC0gbmFtZV9sZW47CisKKwkJCQlpZiAoIWNsaWVudHMtPmNsYXNzW2ldLm51bV9lbmdp bmVzKQorCQkJCQljb250aW51ZTsgLyogQXNzZXJ0IGluIHRoZSBpZGVhbCB3b3JsZC4gKi8KKwor CQkJCWlmIChwYWQgPCAwIHx8IHNwYWNlcyA8IDApCisJCQkJCWNvbnRpbnVlOworCisJCQkJbl9z cGFjZXMocGFkKTsKKwkJCQlwcmludGYoIiVzIiwgbmFtZSk7CisJCQkJbl9zcGFjZXMoc3BhY2Vz KTsKKwkJCQlsZW4gKz0gcGFkICsgbmFtZV9sZW4gKyBzcGFjZXM7CisJCQl9CisJCX0KKworCQlu X3NwYWNlcyhjb25fdyAtIGxlbik7CisJCXByaW50ZigiXDAzM1swbVxuIik7CisJfSBlbHNlIHsK KwkJaWYgKGNsaWVudHMtPm51bV9jbGFzc2VzKQorCQkJcG9wcy0+b3Blbl9zdHJ1Y3QoImNsaWVu dHMiKTsKKwl9CisKKwlyZXR1cm4gbGluZXM7Cit9CisKK3N0YXRpYyBib29sIG51bWVyaWNfY2xp ZW50czsKKworc3RhdGljIGludAorcHJpbnRfY2xpZW50KHN0cnVjdCBjbGllbnQgKmMsIHN0cnVj dCBlbmdpbmVzICplbmdpbmVzLCBkb3VibGUgdCwgaW50IGxpbmVzLAorCSAgICAgaW50IGNvbl93 LCBpbnQgY29uX2gsIHVuc2lnbmVkIGludCBwZXJpb2RfdXMsIGludCAqY2xhc3NfdykKK3sKKwlz dHJ1Y3QgY2xpZW50cyAqY2xpZW50cyA9IGMtPmNsaWVudHM7CisJdW5zaWduZWQgaW50IGk7CisK KwlpZiAob3V0cHV0X21vZGUgPT0gSU5URVJBQ1RJVkUpIHsKKwkJbGluZXMrKzsKKworCQlwcmlu dGYoIiU2dSAlMTdzICIsIGMtPnBpZCwgYy0+cHJpbnRfbmFtZSk7CisKKwkJZm9yIChpID0gMDsg Yy0+c2FtcGxlcyA+IDEgJiYgaSA8IGNsaWVudHMtPm51bV9jbGFzc2VzOyBpKyspIHsKKwkJCWRv dWJsZSBwY3Q7CisKKwkJCWlmICghY2xpZW50cy0+Y2xhc3NbaV0ubnVtX2VuZ2luZXMpCisJCQkJ Y29udGludWU7IC8qIEFzc2VydCBpbiB0aGUgaWRlYWwgd29ybGQuICovCisKKwkJCXBjdCA9IChk b3VibGUpYy0+dmFsW2ldIC8gcGVyaW9kX3VzIC8gMWUzICogMTAwIC8KKwkJCSAgICAgIGNsaWVu dHMtPmNsYXNzW2ldLm51bV9lbmdpbmVzOworCisJCQkvKgorCQkJICogR3VhcmQgYWdhaW5zdCBw b3NzaWJsZSB0aW1lLWRyaWZ0IGJldHdlZW4gc2FtcGxpbmcKKwkJCSAqIGNsaWVudCBkYXRhIGFu ZCB0aW1lIHdlIG9idGFpbmVkIG91ciB0aW1lLWRlbHRhIGZyb20KKwkJCSAqIFBNVS4KKwkJCSAq LworCQkJaWYgKHBjdCA+IDEwMC4wKQorCQkJCXBjdCA9IDEwMC4wOworCisJCQlwcmludF9wZXJj ZW50YWdlX2JhcihwY3QsICpjbGFzc193LCBudW1lcmljX2NsaWVudHMpOworCQl9CisKKwkJcHV0 Y2hhcignXG4nKTsKKwl9IGVsc2UgaWYgKG91dHB1dF9tb2RlID09IEpTT04pIHsKKwkJY2hhciBi dWZbNjRdOworCisJCXNucHJpbnRmKGJ1Ziwgc2l6ZW9mKGJ1ZiksICIldSIsIGMtPmlkKTsKKwkJ cG9wcy0+b3Blbl9zdHJ1Y3QoYnVmKTsKKworCQlfX2pzb25fYWRkX21lbWJlcigibmFtZSIsIGMt PnByaW50X25hbWUpOworCisJCXNucHJpbnRmKGJ1Ziwgc2l6ZW9mKGJ1ZiksICIldSIsIGMtPnBp ZCk7CisJCV9fanNvbl9hZGRfbWVtYmVyKCJwaWQiLCBidWYpOworCisJCWlmIChjLT5zYW1wbGVz ID4gMSkgeworCQkJcG9wcy0+b3Blbl9zdHJ1Y3QoImVuZ2luZS1jbGFzc2VzIik7CisKKwkJCWZv ciAoaSA9IDA7IGkgPCBjbGllbnRzLT5udW1fY2xhc3NlczsgaSsrKSB7CisJCQkJZG91YmxlIHBj dDsKKworCQkJCXNucHJpbnRmKGJ1Ziwgc2l6ZW9mKGJ1ZiksICIlcyIsCisJCQkJCWNsaWVudHMt PmNsYXNzW2ldLm5hbWUpOworCQkJCXBvcHMtPm9wZW5fc3RydWN0KGJ1Zik7CisKKwkJCQlwY3Qg PSAoZG91YmxlKWMtPnZhbFtpXSAvIHBlcmlvZF91cyAvIDFlMyAqIDEwMDsKKwkJCQlzbnByaW50 ZihidWYsIHNpemVvZihidWYpLCAiJWYiLCBwY3QpOworCQkJCV9fanNvbl9hZGRfbWVtYmVyKCJi dXN5IiwgYnVmKTsKKworCQkJCV9fanNvbl9hZGRfbWVtYmVyKCJ1bml0IiwgIiUiKTsKKworCQkJ CXBvcHMtPmNsb3NlX3N0cnVjdCgpOworCQkJfQorCisJCQlwb3BzLT5jbG9zZV9zdHJ1Y3QoKTsK KwkJfQorCisJCXBvcHMtPmNsb3NlX3N0cnVjdCgpOworCX0KKworCXJldHVybiBsaW5lczsKK30K Kworc3RhdGljIGludAorcHJpbnRfY2xpZW50c19mb290ZXIoc3RydWN0IGNsaWVudHMgKmNsaWVu dHMsIGRvdWJsZSB0LAorCQkgICAgIGludCBsaW5lcywgaW50IGNvbl93LCBpbnQgY29uX2gpCit7 CisJaWYgKG91dHB1dF9tb2RlID09IElOVEVSQUNUSVZFKSB7CisJCWlmIChsaW5lcysrIDwgY29u X2gpCisJCQlwcmludGYoIlxuIik7CisJfSBlbHNlIHsKKwkJaWYgKGNsaWVudHMtPm51bV9jbGFz c2VzKQorCQkJcG9wcy0+Y2xvc2Vfc3RydWN0KCk7CisJfQorCisJcmV0dXJuIGxpbmVzOworfQor CiBzdGF0aWMgYm9vbCBzdG9wX3RvcDsKIAogc3RhdGljIHZvaWQgc2lnaW50X2hhbmRsZXIoaW50 ICBzaWcpCkBAIC0xNDU5LDYgKzIwNzUsMjIgQEAgc3RhdGljIHZvaWQgaW50ZXJhY3RpdmVfc3Rk aW4odm9pZCkKIAlhc3NlcnQocmV0ID09IDApOwogfQogCitzdGF0aWMgdm9pZCBzZWxlY3RfY2xp ZW50X3NvcnQodm9pZCkKK3sKKwlzdGF0aWMgdW5zaWduZWQgaW50IGNsaWVudF9zb3J0OworCisJ c3dpdGNoICgrK2NsaWVudF9zb3J0ICUgMykgeworCWNhc2UgMDoKKwkJY2xpZW50X2NtcCA9IGNs aWVudF9sYXN0X2NtcDsKKwkJYnJlYWs7CisJY2FzZSAxOgorCQljbGllbnRfY21wID0gY2xpZW50 X3RvdGFsX2NtcDsKKwkJYnJlYWs7CisJY2FzZSAyOgorCQljbGllbnRfY21wID0gY2xpZW50X2lk X2NtcDsKKwl9Cit9CisKIHN0YXRpYyB2b2lkIHByb2Nlc3Nfc3RkaW4odW5zaWduZWQgaW50IHRp bWVvdXRfdXMpCiB7CiAJc3RydWN0IHBvbGxmZCBwID0geyAuZmQgPSAwLCAuZXZlbnRzID0gUE9M TElOIH07CkBAIC0xNDg1LDYgKzIxMTcsMTIgQEAgc3RhdGljIHZvaWQgcHJvY2Vzc19zdGRpbih1 bnNpZ25lZCBpbnQgdGltZW91dF91cykKIAkJY2FzZSAnMSc6CiAJCQljbGFzc192aWV3IF49IHRy dWU7CiAJCQlicmVhazsKKwkJY2FzZSAnbic6CisJCQludW1lcmljX2NsaWVudHMgXj0gdHJ1ZTsK KwkJCWJyZWFrOworCQljYXNlICdzJzoKKwkJCXNlbGVjdF9jbGllbnRfc29ydCgpOworCQkJYnJl YWs7CiAJCX07CiAJfQogfQpAQCAtMTQ5Miw2ICsyMTMwLDcgQEAgc3RhdGljIHZvaWQgcHJvY2Vz c19zdGRpbih1bnNpZ25lZCBpbnQgdGltZW91dF91cykKIGludCBtYWluKGludCBhcmdjLCBjaGFy ICoqYXJndikKIHsKIAl1bnNpZ25lZCBpbnQgcGVyaW9kX3VzID0gREVGQVVMVF9QRVJJT0RfTVMg KiAxMDAwOworCXN0cnVjdCBjbGllbnRzICpjbGllbnRzID0gTlVMTDsKIAlpbnQgY29uX3cgPSAt MSwgY29uX2ggPSAtMTsKIAljaGFyICpvdXRwdXRfcGF0aCA9IE5VTEw7CiAJc3RydWN0IGVuZ2lu ZXMgKmVuZ2luZXM7CkBAIC0xNjI1LDEzICsyMjY0LDIwIEBAIGludCBtYWluKGludCBhcmdjLCBj aGFyICoqYXJndikKIAogCXJldCA9IEVYSVRfU1VDQ0VTUzsKIAorCWNsaWVudHMgPSBpbml0X2Ns aWVudHMoY2FyZC5wY2lfc2xvdF9uYW1lWzBdID8gY2FyZC5jYXJkIDogTlVMTCk7CisJaW5pdF9l bmdpbmVfY2xhc3NlcyhlbmdpbmVzKTsKKwljbGllbnRzLT5udW1fY2xhc3NlcyA9IGVuZ2luZXMt Pm51bV9jbGFzc2VzOworCWNsaWVudHMtPmNsYXNzID0gZW5naW5lcy0+Y2xhc3M7CisKIAlwbXVf c2FtcGxlKGVuZ2luZXMpOworCXNjYW5fY2xpZW50cyhjbGllbnRzKTsKIAljb2RlbmFtZSA9IGln dF9kZXZpY2VfZ2V0X3ByZXR0eV9uYW1lKCZjYXJkLCBmYWxzZSk7CiAKIAl3aGlsZSAoIXN0b3Bf dG9wKSB7CiAJCWJvb2wgY29uc3VtZWQgPSBmYWxzZTsKLQkJaW50IGxpbmVzID0gMDsKKwkJaW50 IGosIGxpbmVzID0gMDsKIAkJc3RydWN0IHdpbnNpemUgd3M7CisJCXN0cnVjdCBjbGllbnQgKmM7 CiAJCWRvdWJsZSB0OwogCiAJCS8qIFVwZGF0ZSB0ZXJtaW5hbCBzaXplLiAqLwpAQCAtMTY1MCwx MCArMjI5NiwxNSBAQCBpbnQgbWFpbihpbnQgYXJnYywgY2hhciAqKmFyZ3YpCiAJCXBtdV9zYW1w bGUoZW5naW5lcyk7CiAJCXQgPSAoZG91YmxlKShlbmdpbmVzLT50cy5jdXIgLSBlbmdpbmVzLT50 cy5wcmV2KSAvIDFlOTsKIAorCQlzY2FuX2NsaWVudHMoY2xpZW50cyk7CisJCXNvcnRfY2xpZW50 cyhjbGllbnRzKTsKKwogCQlpZiAoc3RvcF90b3ApCiAJCQlicmVhazsKIAogCQl3aGlsZSAoIWNv bnN1bWVkKSB7CisJCQlwb3BzLT5vcGVuX3N0cnVjdChOVUxMKTsKKwogCQkJbGluZXMgPSBwcmlu dF9oZWFkZXIoJmNhcmQsIGNvZGVuYW1lLCBlbmdpbmVzLAogCQkJCQkgICAgIHQsIGxpbmVzLCBj b25fdywgY29uX2gsCiAJCQkJCSAgICAgJmNvbnN1bWVkKTsKQEAgLTE2NjEsNiArMjMxMiwzMyBA QCBpbnQgbWFpbihpbnQgYXJnYywgY2hhciAqKmFyZ3YpCiAJCQlsaW5lcyA9IHByaW50X2ltYyhl bmdpbmVzLCB0LCBsaW5lcywgY29uX3csIGNvbl9oKTsKIAogCQkJbGluZXMgPSBwcmludF9lbmdp bmVzKGVuZ2luZXMsIHQsIGxpbmVzLCBjb25fdywgY29uX2gpOworCisJCQlpZiAoY2xpZW50cykg eworCQkJCWludCBjbGFzc193OworCisJCQkJbGluZXMgPSBwcmludF9jbGllbnRzX2hlYWRlcihj bGllbnRzLCBsaW5lcywKKwkJCQkJCQkgICAgIGNvbl93LCBjb25faCwKKwkJCQkJCQkgICAgICZj bGFzc193KTsKKworCQkJCWZvcl9lYWNoX2NsaWVudChjbGllbnRzLCBjLCBqKSB7CisJCQkJCWFz c2VydChjLT5zdGF0dXMgIT0gUFJPQkUpOworCQkJCQlpZiAoYy0+c3RhdHVzICE9IEFMSVZFKQor CQkJCQkJYnJlYWs7IC8qIEFjdGl2ZSBjbGllbnRzIGFyZSBmaXJzdCBpbiB0aGUgYXJyYXkuICov CisKKwkJCQkJaWYgKGxpbmVzID4gY29uX2gpCisJCQkJCQlicmVhazsKKworCQkJCQlsaW5lcyA9 IHByaW50X2NsaWVudChjLCBlbmdpbmVzLCB0LAorCQkJCQkJCSAgICAgbGluZXMsIGNvbl93LAor CQkJCQkJCSAgICAgY29uX2gsIHBlcmlvZF91cywKKwkJCQkJCQkgICAgICZjbGFzc193KTsKKwkJ CQl9CisKKwkJCQlsaW5lcyA9IHByaW50X2NsaWVudHNfZm9vdGVyKGNsaWVudHMsIHQsIGxpbmVz LAorCQkJCQkJCSAgICAgY29uX3csIGNvbl9oKTsKKwkJCX0KKworCQkJcG9wcy0+Y2xvc2Vfc3Ry dWN0KCk7CiAJCX0KIAogCQlpZiAoc3RvcF90b3ApCi0tIAoyLjI3LjAKCl9fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCkludGVsLWdmeCBtYWlsaW5nIGxpc3QK SW50ZWwtZ2Z4QGxpc3RzLmZyZWVkZXNrdG9wLm9yZwpodHRwczovL2xpc3RzLmZyZWVkZXNrdG9w Lm9yZy9tYWlsbWFuL2xpc3RpbmZvL2ludGVsLWdmeAo= From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: From: Tvrtko Ursulin Date: Fri, 22 Jan 2021 13:12:10 +0000 Message-Id: <20210122131210.768918-1-tvrtko.ursulin@linux.intel.com> In-Reply-To: <20210121181005.762333-1-tvrtko.ursulin@linux.intel.com> References: <20210121181005.762333-1-tvrtko.ursulin@linux.intel.com> MIME-Version: 1.0 Subject: [igt-dev] [PATCH i-g-t v7] intel-gpu-top: Support for client stats List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Errors-To: igt-dev-bounces@lists.freedesktop.org Sender: "igt-dev" To: igt-dev@lists.freedesktop.org Cc: Intel-gfx@lists.freedesktop.org, Chris Wilson , Tvrtko Ursulin List-ID: RnJvbTogVHZydGtvIFVyc3VsaW4gPHR2cnRrby51cnN1bGluQGludGVsLmNvbT4KCkFkZHMgc3Vw cG9ydCBmb3IgcGVyLWNsaWVudCBlbmdpbmUgYnVzeW5lc3Mgc3RhdHMgaTkxNSBleHBvcnRzIGlu IHN5c2ZzCmFuZCBwcm9kdWNlcyBvdXRwdXQgbGlrZSB0aGUgYmVsb3c6Cgo9PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09CmludGVsLWdwdS10b3A6IEludGVsIFNreWxha2UgKEdlbjkpIEAgL2Rldi9kcmkv Y2FyZDAgLSAgOTUxLyA5NTAgTUh6OwogICAgMCUgUkM2OyAxNC42MC8yMy42MiBXOyAgICAgMTQ4 MiBpcnFzL3MKCiAgICAgIElNQyByZWFkczogICAgIDEyODcgTWlCL3MKICAgICBJTUMgd3JpdGVz OiAgICAgIDExNSBNaUIvcwoKICAgICAgICAgRU5HSU5FUyAgICAgQlVTWSAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIE1JX1NFTUEgTUlfV0FJVAogICAgICAgUmVuZGVyLzNE ICAgOTUuNDglIHzilojilojilojilojilojilojilojilojilojilojilojilojilojilojiloji lojilojilojilojilojilojilojilojilojilojilojilojilojilojilojilojilojiloggIHwg ICAgICA1JSAgICAgIDAlCiAgICAgICAgIEJsaXR0ZXIgICAxNS45OCUgfOKWiOKWiOKWiOKWiOKW iCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgIDEwJSAgICAgIDAlCiAgICAgICAg ICAgVmlkZW8gICAzNS40MCUgfOKWiOKWiOKWiOKWiOKWiOKWiOKWiOKWiOKWiOKWiOKWiOKWiCAg ICAgICAgICAgICAgICAgICAgICAgfCAgICAgMjYlICAgICAgMCUKICAgIFZpZGVvRW5oYW5jZSAg ICAwLjAwJSB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgMCUgICAg ICAwJQoKICAgUElEICAgICAgICAgICAgICBOQU1FICAgUmVuZGVyLzNEICAgICBCbGl0dGVyICAg ICAgIFZpZGVvICAgIFZpZGVvRW5oYW5jZQogIDEwNTMgICAgICAgICAgZ2VtX3dzaW0gfOKWiOKW iOKWiCAgICAgICAgfHwgICAgICAgICAgIHx84paI4paI4paIICAgICAgICB8fCAgICAgICAgICAg fAogIDEwNTQgICAgICAgICAgZ2VtX3dzaW0gfOKWiOKWiOKWiOKWiOKWiOKWiOKWiCAgICB8fOKW iCAgICAgICAgICB8fCAgICAgICAgICAgfHwgICAgICAgICAgIHwKPT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PQoKQXBhcnQgZnJvbSB0aGUgZXhpc3RpbmcgcGh5c2ljYWwgZW5naW5lIHV0aWxpemF0aW9u IGl0IG5vdyBhbHNvIHNob3dzCnV0aWxpemF0aW9uIHBlciBjbGllbnQgYW5kIHBlciBlbmdpbmUg Y2xhc3MuCgp2MjoKICogVmVyc2lvbiB0byBtYXRjaCByZW1vdmFsIG9mIGdsb2JhbCBlbmFibGVf c3RhdHMgdG9nZ2xlLgogKiBQbHVzIHZhcmlvdXMgZml4ZXMuCgp2MzoKICogU3VwcG9ydCBicmll ZiBiYWNrd2FyZCBqdW1wcyBpbiBjbGllbnQgc3RhdHMuCgp2NDoKICogU3VwcG9ydCBkZXZpY2Ug c2VsZWN0aW9uLgoKdjU6CiAqIFJlYmFzZSBmb3IgY2xhc3MgYWdncmVnYXRpb24uCiAqIE9wdGlt aXNlIHN5c2ZzIHJlYWRzIGEgdGlueSBiaXQgYnkgb3BlbmF0KDIpIGFuZCBjYWNoaW5nIGNsaWVu dCByb290LgoKdjY6CiAqIFNob3cgY2xpZW50cyBhcyBzb29uIGFzIGRldGVjdGVkLCBqdXN0IGRl bGF5IGJ1c3luZXNzIGRhdGEgb25lIHBlcmlvZC4KICogQWRkIG9wdGlvbiB0byBzaG93IG51bWVy aWMgYnVzeW5lc3MgKCduJykuCiAqIEZ1cnRoZXIgb3B0aW1pemUgc3lzZnMgcmVhZHMuCiAqIFRy aW0gb3Zlcmdyb3duIGFycmF5LiAoQ2hyaXMpCiAqIFNpbXBsaWZ5IGNsaWVudCBzb3J0IGNhbGxi YWNrIGFuZCBmaW5kIGNsaWVudCBsb29wLiAoQ2hyaXMpCiAqIFphcCBub24tcHJpbnRhYmxlIGNo YXJzIHdoZW4gZGlzcGxheWluZyBjbGllbnQgbmFtZXMuIChDaHJpcykKCnY3OgogKiBGaXggdGVy bWluYWwgaGVpZ2h0IHZzIGxpbmVzIHByaW50ZWQgaGFuZGxpbmcuCiAqIE9wdGltaXNlIGNsaWVu dCBzZWFyY2hlcyBieSByZWx5aW5nIG9uIHNvcnRpbmcuCiAqIEFkZGVkIHNvbWUgc29ydGluZyBt b2RlcyBjeWNsYWJsZSB2aWEgJ3MnLgogKiBTdHJheSBzZW1pLWNvbG9uIGFuZCBmdXJodGVyIHNv cnQgY2xlYW51cC4gKENocmlzKQoKU2lnbmVkLW9mZi1ieTogVHZydGtvIFVyc3VsaW4gPHR2cnRr by51cnN1bGluQGludGVsLmNvbT4KUmV2aWV3ZWQtYnk6IENocmlzIFdpbHNvbiA8Y2hyaXNAY2hy aXMtd2lsc29uLmNvLnVrPiAjIHY2Ci0tLQogdG9vbHMvaW50ZWxfZ3B1X3RvcC5jIHwgNzA4ICsr KysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrLQogMSBmaWxlIGNoYW5nZWQs IDY5MyBpbnNlcnRpb25zKCspLCAxNSBkZWxldGlvbnMoLSkKCmRpZmYgLS1naXQgYS90b29scy9p bnRlbF9ncHVfdG9wLmMgYi90b29scy9pbnRlbF9ncHVfdG9wLmMKaW5kZXggNzJhZDdjYmU5YThj Li43YThjMmI1MDJhNzMgMTAwNjQ0Ci0tLSBhL3Rvb2xzL2ludGVsX2dwdV90b3AuYworKysgYi90 b29scy9pbnRlbF9ncHVfdG9wLmMKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IMKp IDIwMDctMjAxOSBJbnRlbCBDb3Jwb3JhdGlvbgorICogQ29weXJpZ2h0IMKpIDIwMDctMjAyMSBJ bnRlbCBDb3Jwb3JhdGlvbgogICoKICAqIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZy ZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhCiAgKiBjb3B5IG9mIHRoaXMg c29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICJTb2Z0d2Fy ZSIpLApAQCAtNDYsNiArNDYsOCBAQAogCiAjaW5jbHVkZSAiaWd0X3BlcmYuaCIKIAorI2RlZmlu ZSBBUlJBWV9TSVpFKGFycikgKHNpemVvZihhcnIpL3NpemVvZihhcnJbMF0pKQorCiBzdHJ1Y3Qg cG11X3BhaXIgewogCXVpbnQ2NF90IGN1cjsKIAl1aW50NjRfdCBwcmV2OwpAQCAtNjI1LDI1ICs2 MjcsNDgyIEBAIHN0YXRpYyB2b2lkIHBtdV9zYW1wbGUoc3RydWN0IGVuZ2luZXMgKmVuZ2luZXMp CiAJfQogfQogCitlbnVtIGNsaWVudF9zdGF0dXMgeworCUZSRUUgPSAwLCAvKiBtYnogKi8KKwlB TElWRSwKKwlQUk9CRQorfTsKKworc3RydWN0IGNsaWVudHM7CisKK3N0cnVjdCBjbGllbnQgewor CXN0cnVjdCBjbGllbnRzICpjbGllbnRzOworCisJZW51bSBjbGllbnRfc3RhdHVzIHN0YXR1czsK KwlpbnQgc3lzZnNfcm9vdDsKKwlpbnQgYnVzeV9yb290OworCXVuc2lnbmVkIGludCBpZDsKKwl1 bnNpZ25lZCBpbnQgcGlkOworCWNoYXIgbmFtZVsyNF07CisJY2hhciBwcmludF9uYW1lWzI0XTsK Kwl1bnNpZ25lZCBpbnQgc2FtcGxlczsKKwl1bnNpZ25lZCBsb25nIHRvdGFsX3J1bnRpbWU7CisJ dW5zaWduZWQgbG9uZyBsYXN0X3J1bnRpbWU7CisJc3RydWN0IGVuZ2luZXMgKmVuZ2luZXM7CisJ dW5zaWduZWQgbG9uZyAqdmFsOworCXVpbnQ2NF90ICpsYXN0OworfTsKKworc3RydWN0IGNsaWVu dHMgeworCXVuc2lnbmVkIGludCBudW1fY2xpZW50czsKKwl1bnNpZ25lZCBpbnQgYWN0aXZlX2Ns aWVudHM7CisKKwl1bnNpZ25lZCBpbnQgbnVtX2NsYXNzZXM7CisJc3RydWN0IGVuZ2luZV9jbGFz cyAqY2xhc3M7CisKKwljaGFyIHN5c2ZzX3Jvb3RbMTI4XTsKKworCXN0cnVjdCBjbGllbnQgKmNs aWVudDsKK307CisKKyNkZWZpbmUgZm9yX2VhY2hfY2xpZW50KGNsaWVudHMsIGMsIHRtcCkgXAor CWZvciAoKHRtcCkgPSAoY2xpZW50cyktPm51bV9jbGllbnRzLCBjID0gKGNsaWVudHMpLT5jbGll bnQ7IFwKKwkgICAgICh0bXAgPiAwKTsgKHRtcCktLSwgKGMpKyspCisKK3N0YXRpYyBzdHJ1Y3Qg Y2xpZW50cyAqaW5pdF9jbGllbnRzKGNvbnN0IGNoYXIgKmRybV9jYXJkKQoreworCXN0cnVjdCBj bGllbnRzICpjbGllbnRzID0gbWFsbG9jKHNpemVvZigqY2xpZW50cykpOworCWNvbnN0IGNoYXIg KnNsYXNoOworCXNzaXplX3QgcmV0OworCisJbWVtc2V0KGNsaWVudHMsIDAsIHNpemVvZigqY2xp ZW50cykpOworCisJaWYgKGRybV9jYXJkKSB7CisJCXNsYXNoID0gcmluZGV4KGRybV9jYXJkLCAn LycpOworCQlhc3NlcnQoc2xhc2gpOworCX0gZWxzZSB7CisJCXNsYXNoID0gImNhcmQwIjsKKwl9 CisKKwlyZXQgPSBzbnByaW50ZihjbGllbnRzLT5zeXNmc19yb290LCBzaXplb2YoY2xpZW50cy0+ c3lzZnNfcm9vdCksCisJCSAgICAgICAiL3N5cy9jbGFzcy9kcm0vJXMvY2xpZW50cy8iLCBzbGFz aCk7CisJYXNzZXJ0KHJldCA+IDAgJiYgcmV0IDwgc2l6ZW9mKGNsaWVudHMtPnN5c2ZzX3Jvb3Qp KTsKKworCXJldHVybiBjbGllbnRzOworfQorCitzdGF0aWMgaW50IF9fcmVhZF90b19idWYoaW50 IGZkLCBjaGFyICpidWYsIHVuc2lnbmVkIGludCBidWZzaXplKQoreworCXNzaXplX3QgcmV0Owor CWludCBlcnI7CisKKwlyZXQgPSByZWFkKGZkLCBidWYsIGJ1ZnNpemUgLSAxKTsKKwllcnIgPSBl cnJubzsKKwlpZiAocmV0IDwgMSkgeworCQllcnJubyA9IHJldCA8IDAgPyBlcnIgOiBFTk9NU0c7 CisKKwkJcmV0dXJuIC0xOworCX0KKworCWlmIChyZXQgPiAxICYmIGJ1ZltyZXQgLSAxXSA9PSAn XG4nKQorCQlidWZbcmV0IC0gMV0gPSAnXDAnOworCWVsc2UKKwkJYnVmW3JldF0gPSAnXDAnOwor CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQKK19fcmVhZF9jbGllbnRfZmllbGQoaW50IHJv b3QsIGNvbnN0IGNoYXIgKmZpZWxkLCBjaGFyICpidWYsIHVuc2lnbmVkIGludCBidWZzaXplKQor eworCWludCBmZCwgcmV0OworCisJZmQgPSBvcGVuYXQocm9vdCwgZmllbGQsIE9fUkRPTkxZKTsK KwlpZiAoZmQgPCAwKQorCQlyZXR1cm4gLTE7CisKKwlyZXQgPSBfX3JlYWRfdG9fYnVmKGZkLCBi dWYsIGJ1ZnNpemUpOworCisJY2xvc2UoZmQpOworCisJcmV0dXJuIHJldDsKK30KKworc3RhdGlj IHVpbnQ2NF90CityZWFkX2NsaWVudF9idXN5KHN0cnVjdCBjbGllbnQgKmNsaWVudCwgdW5zaWdu ZWQgaW50IGNsYXNzKQoreworCWNvbnN0IGNoYXIgKmNsYXNzX3N0cltdID0geyAiMCIsICIxIiwg IjIiLCAiMyIsICI0IiwgIjUiLCAiNiIsICI3IiB9OworCWNoYXIgYnVmWzI1Nl0sICpiOworCWlu dCByZXQ7CisKKwlhc3NlcnQoY2xhc3MgPCBBUlJBWV9TSVpFKGNsYXNzX3N0cikpOworCWlmIChj bGFzcyA+PSBBUlJBWV9TSVpFKGNsYXNzX3N0cikpCisJCXJldHVybiAwOworCisJYXNzZXJ0KGNs aWVudC0+c3lzZnNfcm9vdCA+PSAwKTsKKwlpZiAoY2xpZW50LT5zeXNmc19yb290IDwgMCkKKwkJ cmV0dXJuIDA7CisKKwlpZiAoY2xpZW50LT5idXN5X3Jvb3QgPCAwKQorCQljbGllbnQtPmJ1c3lf cm9vdCA9IG9wZW5hdChjbGllbnQtPnN5c2ZzX3Jvb3QsICJidXN5IiwKKwkJCQkJICAgT19SRE9O TFkgfCBPX0RJUkVDVE9SWSk7CisKKwlhc3NlcnQoY2xpZW50LT5idXN5X3Jvb3QpOworCWlmIChj bGllbnQtPmJ1c3lfcm9vdCA8IDApCisJCXJldHVybiAwOworCisJcmV0ID0gX19yZWFkX2NsaWVu dF9maWVsZChjbGllbnQtPmJ1c3lfcm9vdCwgY2xhc3Nfc3RyW2NsYXNzXSwgYnVmLAorCQkJCSAg c2l6ZW9mKGJ1ZikpOworCWFzc2VydChyZXQgPT0gMCk7CisJaWYgKHJldCkKKwkJcmV0dXJuIDA7 CisKKwkvKgorCSAqIEhhbmRsZSBib3RoIHNpbmdsZSBpbnRlZ2VyIGFuZCBrZXk9dmFsdWUgZm9y bWF0cyBieSBza2lwcGluZworCSAqIGxlYWRpbmcgbm9uLWRpZ2l0cy4KKwkgKi8KKwliID0gYnVm OworCXdoaWxlICgqYiAmJiAhaXNkaWdpdCgqYikpCisJCWIrKzsKKworCXJldHVybiBzdHJ0b3Vs bChiLCBOVUxMLCAxMCk7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgY2xpZW50ICoKK2ZpbmRfY2xpZW50 KHN0cnVjdCBjbGllbnRzICpjbGllbnRzLCBlbnVtIGNsaWVudF9zdGF0dXMgc3RhdHVzLCB1bnNp Z25lZCBpbnQgaWQpCit7CisJdW5zaWduZWQgaW50IHN0YXJ0LCBudW07CisJc3RydWN0IGNsaWVu dCAqYzsKKworCXN0YXJ0ID0gc3RhdHVzID09IEZSRUUgPyBjbGllbnRzLT5hY3RpdmVfY2xpZW50 cyA6IDA7IC8qIEZyZWUgYmxvY2sgYXQgdGhlIGVuZC4gKi8KKwludW0gPSBjbGllbnRzLT5udW1f Y2xpZW50cyAtIHN0YXJ0OworCisJZm9yIChjID0gJmNsaWVudHMtPmNsaWVudFtzdGFydF07IG51 bTsgYysrLCBudW0tLSkgeworCQlpZiAoc3RhdHVzICE9IGMtPnN0YXR1cykKKwkJCWNvbnRpbnVl OworCisJCWlmIChzdGF0dXMgPT0gRlJFRSB8fCBjLT5pZCA9PSBpZCkKKwkJCXJldHVybiBjOwor CX0KKworCXJldHVybiBOVUxMOworfQorCitzdGF0aWMgdm9pZCB1cGRhdGVfY2xpZW50KHN0cnVj dCBjbGllbnQgKmMsIHVuc2lnbmVkIGludCBwaWQsIGNoYXIgKm5hbWUpCit7CisJdWludDY0X3Qg dmFsW2MtPmNsaWVudHMtPm51bV9jbGFzc2VzXTsKKwl1bnNpZ25lZCBpbnQgaTsKKworCWlmIChj LT5waWQgIT0gcGlkKQorCQljLT5waWQgPSBwaWQ7CisKKwlpZiAoc3RyY21wKGMtPm5hbWUsIG5h bWUpKSB7CisJCWNoYXIgKnA7CisKKwkJc3RybmNweShjLT5uYW1lLCBuYW1lLCBzaXplb2YoYy0+ bmFtZSkgLSAxKTsKKwkJc3RybmNweShjLT5wcmludF9uYW1lLCBuYW1lLCBzaXplb2YoYy0+cHJp bnRfbmFtZSkgLSAxKTsKKworCQlwID0gYy0+cHJpbnRfbmFtZTsKKwkJd2hpbGUgKCpwKSB7CisJ CQlpZiAoIWlzcHJpbnQoKnApKQorCQkJCSpwID0gJyonOworCQkJcCsrOworCQl9CisJfQorCisJ Zm9yIChpID0gMDsgaSA8IGMtPmNsaWVudHMtPm51bV9jbGFzc2VzOyBpKyspCisJCXZhbFtpXSA9 IHJlYWRfY2xpZW50X2J1c3koYywgYy0+Y2xpZW50cy0+Y2xhc3NbaV0uY2xhc3MpOworCisJYy0+ bGFzdF9ydW50aW1lID0gMDsKKwljLT50b3RhbF9ydW50aW1lID0gMDsKKworCWZvciAoaSA9IDA7 IGkgPCBjLT5jbGllbnRzLT5udW1fY2xhc3NlczsgaSsrKSB7CisJCWlmICh2YWxbaV0gPCBjLT5s YXN0W2ldKQorCQkJY29udGludWU7IC8qIEl0IHdpbGwgY2F0Y2ggdXAgc29vbi4gKi8KKworCQlj LT50b3RhbF9ydW50aW1lICs9IHZhbFtpXTsKKwkJYy0+dmFsW2ldID0gdmFsW2ldIC0gYy0+bGFz dFtpXTsKKwkJYy0+bGFzdF9ydW50aW1lICs9IGMtPnZhbFtpXTsKKwkJYy0+bGFzdFtpXSA9IHZh bFtpXTsKKwl9CisKKwljLT5zYW1wbGVzKys7CisJYy0+c3RhdHVzID0gQUxJVkU7Cit9CisKK3N0 YXRpYyB2b2lkCithZGRfY2xpZW50KHN0cnVjdCBjbGllbnRzICpjbGllbnRzLCB1bnNpZ25lZCBp bnQgaWQsIHVuc2lnbmVkIGludCBwaWQsCisJICAgY2hhciAqbmFtZSwgaW50IHN5c2ZzX3Jvb3Qp Cit7CisJc3RydWN0IGNsaWVudCAqYzsKKworCWFzc2VydCghZmluZF9jbGllbnQoY2xpZW50cywg QUxJVkUsIGlkKSk7CisKKwljID0gZmluZF9jbGllbnQoY2xpZW50cywgRlJFRSwgMCk7CisJaWYg KCFjKSB7CisJCXVuc2lnbmVkIGludCBpZHggPSBjbGllbnRzLT5udW1fY2xpZW50czsKKworCQlj bGllbnRzLT5udW1fY2xpZW50cyArPSAoY2xpZW50cy0+bnVtX2NsaWVudHMgKyAyKSAvIDI7CisJ CWNsaWVudHMtPmNsaWVudCA9IHJlYWxsb2MoY2xpZW50cy0+Y2xpZW50LAorCQkJCQkgIGNsaWVu dHMtPm51bV9jbGllbnRzICogc2l6ZW9mKCpjKSk7CisJCWFzc2VydChjbGllbnRzLT5jbGllbnQp OworCisJCWMgPSAmY2xpZW50cy0+Y2xpZW50W2lkeF07CisJCW1lbXNldChjLCAwLCAoY2xpZW50 cy0+bnVtX2NsaWVudHMgLSBpZHgpICogc2l6ZW9mKCpjKSk7CisJfQorCisJYy0+c3lzZnNfcm9v dCA9IHN5c2ZzX3Jvb3Q7CisJYy0+YnVzeV9yb290ID0gLTE7CisJYy0+aWQgPSBpZDsKKwljLT5j bGllbnRzID0gY2xpZW50czsKKwljLT52YWwgPSBjYWxsb2MoY2xpZW50cy0+bnVtX2NsYXNzZXMs IHNpemVvZihjLT52YWwpKTsKKwljLT5sYXN0ID0gY2FsbG9jKGNsaWVudHMtPm51bV9jbGFzc2Vz LCBzaXplb2YoYy0+bGFzdCkpOworCWFzc2VydChjLT52YWwgJiYgYy0+bGFzdCk7CisKKwl1cGRh dGVfY2xpZW50KGMsIHBpZCwgbmFtZSk7Cit9CisKK3N0YXRpYyB2b2lkIGZyZWVfY2xpZW50KHN0 cnVjdCBjbGllbnQgKmMpCit7CisJaWYgKGMtPnN5c2ZzX3Jvb3QgPj0gMCkKKwkJY2xvc2UoYy0+ c3lzZnNfcm9vdCk7CisJaWYgKGMtPmJ1c3lfcm9vdCA+PSAwKQorCQljbG9zZShjLT5idXN5X3Jv b3QpOworCWZyZWUoYy0+dmFsKTsKKwlmcmVlKGMtPmxhc3QpOworCW1lbXNldChjLCAwLCBzaXpl b2YoKmMpKTsKK30KKworc3RhdGljIGludAorcmVhZF9jbGllbnRfc3lzZnMoY2hhciAqYnVmLCBp bnQgYnVmc2l6ZSwgY29uc3QgY2hhciAqc3lzZnNfcm9vdCwKKwkJICB1bnNpZ25lZCBpbnQgaWQs IGNvbnN0IGNoYXIgKmZpZWxkLCBpbnQgKmNsaWVudF9yb290KQoreworCXNzaXplX3QgcmV0Owor CisJaWYgKCpjbGllbnRfcm9vdCA8IDApIHsKKwkJY2hhciBuYW1lYnVmWzI1Nl07CisKKwkJcmV0 ID0gc25wcmludGYobmFtZWJ1Ziwgc2l6ZW9mKG5hbWVidWYpLCAiJXMvJXUiLAorCQkJICAgICAg IHN5c2ZzX3Jvb3QsIGlkKTsKKwkJYXNzZXJ0KHJldCA+IDAgJiYgcmV0IDwgc2l6ZW9mKG5hbWVi dWYpKTsKKwkJaWYgKHJldCA8PSAwIHx8IHJldCA9PSBzaXplb2YobmFtZWJ1ZikpCisJCQlyZXR1 cm4gLTE7CisKKwkJKmNsaWVudF9yb290ID0gb3BlbihuYW1lYnVmLCBPX1JET05MWSB8IE9fRElS RUNUT1JZKTsKKwl9CisKKwlpZiAoKmNsaWVudF9yb290IDwgMCkKKwkJcmV0dXJuIC0xOworCisJ cmV0dXJuIF9fcmVhZF9jbGllbnRfZmllbGQoKmNsaWVudF9yb290LCBmaWVsZCwgYnVmLCBidWZz aXplKTsKK30KKworc3RhdGljIHZvaWQgc2Nhbl9jbGllbnRzKHN0cnVjdCBjbGllbnRzICpjbGll bnRzKQoreworCXN0cnVjdCBkaXJlbnQgKmRlbnQ7CisJc3RydWN0IGNsaWVudCAqYzsKKwl1bnNp Z25lZCBpbnQgaWQ7CisJaW50IHRtcDsKKwlESVIgKmQ7CisKKwlpZiAoIWNsaWVudHMpCisJCXJl dHVybjsKKworCWZvcl9lYWNoX2NsaWVudChjbGllbnRzLCBjLCB0bXApIHsKKwkJYXNzZXJ0KGMt PnN0YXR1cyAhPSBQUk9CRSk7CisJCWlmIChjLT5zdGF0dXMgPT0gQUxJVkUpCisJCQljLT5zdGF0 dXMgPSBQUk9CRTsKKwkJZWxzZQorCQkJYnJlYWs7IC8qIEZyZWUgYmxvY2sgYXQgdGhlIGVuZCBv ZiBhcnJheS4gKi8KKwl9CisKKwlkID0gb3BlbmRpcihjbGllbnRzLT5zeXNmc19yb290KTsKKwlp ZiAoIWQpCisJCXJldHVybjsKKworCXdoaWxlICgoZGVudCA9IHJlYWRkaXIoZCkpICE9IE5VTEwp IHsKKwkJY2hhciBuYW1lWzI0XSwgcGlkWzI0XTsKKwkJaW50IHJldCwgcm9vdCA9IC0xLCAqcHI7 CisKKwkJaWYgKGRlbnQtPmRfdHlwZSAhPSBEVF9ESVIpCisJCQljb250aW51ZTsKKwkJaWYgKCFp c2RpZ2l0KGRlbnQtPmRfbmFtZVswXSkpCisJCQljb250aW51ZTsKKworCQlpZCA9IGF0b2koZGVu dC0+ZF9uYW1lKTsKKworCQljID0gZmluZF9jbGllbnQoY2xpZW50cywgUFJPQkUsIGlkKTsKKwor CQlpZiAoYykKKwkJCXByID0gJmMtPnN5c2ZzX3Jvb3Q7CisJCWVsc2UKKwkJCXByID0gJnJvb3Q7 CisKKwkJcmV0ID0gcmVhZF9jbGllbnRfc3lzZnMobmFtZSwgc2l6ZW9mKG5hbWUpLCBjbGllbnRz LT5zeXNmc19yb290LAorCQkJCQlpZCwgIm5hbWUiLCBwcik7CisJCXJldCB8PSByZWFkX2NsaWVu dF9zeXNmcyhwaWQsIHNpemVvZihwaWQpLCBjbGllbnRzLT5zeXNmc19yb290LAorCQkJCQlpZCwg InBpZCIsIHByKTsKKwkJaWYgKCFyZXQpIHsKKwkJCWlmICghYykKKwkJCQlhZGRfY2xpZW50KGNs aWVudHMsIGlkLCBhdG9pKHBpZCksIG5hbWUsIHJvb3QpOworCQkJZWxzZQorCQkJCXVwZGF0ZV9j bGllbnQoYywgYXRvaShwaWQpLCBuYW1lKTsKKwkJfSBlbHNlIGlmIChjKSB7CisJCQljLT5zdGF0 dXMgPSBQUk9CRTsgLyogV2lsbCBiZSBkZWxldGVkIGJlbG93LiAqLworCQl9CisJfQorCisJY2xv c2VkaXIoZCk7CisKKwlmb3JfZWFjaF9jbGllbnQoY2xpZW50cywgYywgdG1wKSB7CisJCWlmIChj LT5zdGF0dXMgPT0gUFJPQkUpCisJCQlmcmVlX2NsaWVudChjKTsKKwkJZWxzZSBpZiAoYy0+c3Rh dHVzID09IEZSRUUpCisJCQlicmVhazsKKwl9Cit9CisKK3N0YXRpYyBpbnQgY2xpZW50X2xhc3Rf Y21wKGNvbnN0IHZvaWQgKl9hLCBjb25zdCB2b2lkICpfYikKK3sKKwljb25zdCBzdHJ1Y3QgY2xp ZW50ICphID0gX2E7CisJY29uc3Qgc3RydWN0IGNsaWVudCAqYiA9IF9iOworCWxvbmcgdG90X2Es IHRvdF9iOworCisJLyoKKwkgKiBTb3J0IGNsaWVudHMgaW4gZGVzY2VuZGluZyBvcmRlciBvZiBy dW50aW1lIGluIHRoZSBwcmV2aW91cyBzYW1wbGluZworCSAqIHBlcmlvZCBmb3IgYWN0aXZlIG9u ZXMsIGZvbGxvd2VkIGJ5IGluYWN0aXZlLiBUaWUtYnJlYWtlciBpcyBjbGllbnQKKwkgKiBpZC4K KwkgKi8KKworCXRvdF9hID0gYS0+c3RhdHVzID09IEFMSVZFID8gYS0+bGFzdF9ydW50aW1lIDog LTE7CisJdG90X2IgPSBiLT5zdGF0dXMgPT0gQUxJVkUgPyBiLT5sYXN0X3J1bnRpbWUgOiAtMTsK KworCXRvdF9iIC09IHRvdF9hOworCWlmICh0b3RfYiA+IDApCisJCXJldHVybiAxOworCWlmICh0 b3RfYiA8IDApCisJCXJldHVybiAtMTsKKworCXJldHVybiAoaW50KWItPmlkIC0gYS0+aWQ7Cit9 CisKK3N0YXRpYyBpbnQgY2xpZW50X3RvdGFsX2NtcChjb25zdCB2b2lkICpfYSwgY29uc3Qgdm9p ZCAqX2IpCit7CisJY29uc3Qgc3RydWN0IGNsaWVudCAqYSA9IF9hOworCWNvbnN0IHN0cnVjdCBj bGllbnQgKmIgPSBfYjsKKwlsb25nIHRvdF9hLCB0b3RfYjsKKworCXRvdF9hID0gYS0+c3RhdHVz ID09IEFMSVZFID8gYS0+dG90YWxfcnVudGltZSA6IC0xOworCXRvdF9iID0gYi0+c3RhdHVzID09 IEFMSVZFID8gYi0+dG90YWxfcnVudGltZSA6IC0xOworCisJdG90X2IgLT0gdG90X2E7CisJaWYg KHRvdF9iID4gMCkKKwkJcmV0dXJuIDE7CisJaWYgKHRvdF9iIDwgMCkKKwkJcmV0dXJuIC0xOwor CisJcmV0dXJuIChpbnQpYi0+aWQgLSBhLT5pZDsKK30KKworc3RhdGljIGludCBjbGllbnRfaWRf Y21wKGNvbnN0IHZvaWQgKl9hLCBjb25zdCB2b2lkICpfYikKK3sKKwljb25zdCBzdHJ1Y3QgY2xp ZW50ICphID0gX2E7CisJY29uc3Qgc3RydWN0IGNsaWVudCAqYiA9IF9iOworCWludCBpZF9hLCBp ZF9iOworCisJaWRfYSA9IGEtPnN0YXR1cyA9PSBBTElWRSA/IGEtPmlkIDogLTE7CisJaWRfYiA9 IGItPnN0YXR1cyA9PSBBTElWRSA/IGItPmlkIDogLTE7CisKKwlpZF9iIC09IGlkX2E7CisJaWYg KGlkX2IgPiAwKQorCQlyZXR1cm4gMTsKKwlpZiAoaWRfYiA8IDApCisJCXJldHVybiAtMTsKKwor CXJldHVybiAoaW50KWItPmlkIC0gYS0+aWQ7Cit9CisKK3N0YXRpYyBpbnQgKCpjbGllbnRfY21w KShjb25zdCB2b2lkICosIGNvbnN0IHZvaWQgKikgPSBjbGllbnRfbGFzdF9jbXA7CisKK3N0YXRp YyB2b2lkIHNvcnRfY2xpZW50cyhzdHJ1Y3QgY2xpZW50cyAqY2xpZW50cykKK3sKKwl1bnNpZ25l ZCBpbnQgYWN0aXZlLCBmcmVlOworCXN0cnVjdCBjbGllbnQgKmM7CisJaW50IHRtcDsKKworCWlm ICghY2xpZW50cykKKwkJcmV0dXJuOworCisJcXNvcnQoY2xpZW50cy0+Y2xpZW50LCBjbGllbnRz LT5udW1fY2xpZW50cywgc2l6ZW9mKCpjbGllbnRzLT5jbGllbnQpLAorCSAgICAgIGNsaWVudF9j bXApOworCisJLyogVHJpbSBleGNlc3NpdmUgYXJyYXkgc3BhY2UuICovCisJYWN0aXZlID0gMDsK Kwlmb3JfZWFjaF9jbGllbnQoY2xpZW50cywgYywgdG1wKSB7CisJCWlmIChjLT5zdGF0dXMgIT0g QUxJVkUpCisJCQlicmVhazsgLyogQWN0aXZlIGNsaWVudHMgYXJlIGZpcnN0IGluIHRoZSBhcnJh eS4gKi8KKwkJYWN0aXZlKys7CisJfQorCisJY2xpZW50cy0+YWN0aXZlX2NsaWVudHMgPSBhY3Rp dmU7CisKKwlmcmVlID0gY2xpZW50cy0+bnVtX2NsaWVudHMgLSBhY3RpdmU7CisJaWYgKGZyZWUg PiBjbGllbnRzLT5udW1fY2xpZW50cyAvIDIpIHsKKwkJYWN0aXZlID0gY2xpZW50cy0+bnVtX2Ns aWVudHMgLSBmcmVlIC8gMjsKKwkJaWYgKGFjdGl2ZSAhPSBjbGllbnRzLT5udW1fY2xpZW50cykg eworCQkJY2xpZW50cy0+bnVtX2NsaWVudHMgPSBhY3RpdmU7CisJCQljbGllbnRzLT5jbGllbnQg PSByZWFsbG9jKGNsaWVudHMtPmNsaWVudCwKKwkJCQkJCSAgY2xpZW50cy0+bnVtX2NsaWVudHMg KgorCQkJCQkJICBzaXplb2YoKmMpKTsKKwkJfQorCX0KK30KKworCiBzdGF0aWMgY29uc3QgY2hh ciAqYmFyc1tdID0geyAiICIsICLilo8iLCAi4paOIiwgIuKWjSIsICLilowiLCAi4paLIiwgIuKW iiIsICLilokiLCAi4paIIiB9OwogCitzdGF0aWMgdm9pZCBuX3NwYWNlcyhjb25zdCB1bnNpZ25l ZCBpbnQgbikKK3sKKwl1bnNpZ25lZCBpbnQgaTsKKworCWZvciAoaSA9IDA7IGkgPCBuOyBpKysp CisJCXB1dGNoYXIoJyAnKTsKK30KKwogc3RhdGljIHZvaWQKLXByaW50X3BlcmNlbnRhZ2VfYmFy KGRvdWJsZSBwZXJjZW50LCBpbnQgbWF4X2xlbikKK3ByaW50X3BlcmNlbnRhZ2VfYmFyKGRvdWJs ZSBwZXJjZW50LCBpbnQgbWF4X2xlbiwgYm9vbCBudW1lcmljKQogewotCWludCBiYXJfbGVuID0g cGVyY2VudCAqICg4ICogKG1heF9sZW4gLSAyKSkgLyAxMDAuMDsKLQlpbnQgaTsKKwlpbnQgYmFy X2xlbiwgaSwgbGVuID0gbWF4X2xlbiAtIDI7CisJY29uc3QgaW50IHcgPSA4OworCisJYXNzZXJ0 KG1heF9sZW4gPiAwKTsKKworCWJhcl9sZW4gPSBwZXJjZW50ICogbGVuIC8gMTAwLjA7CisJaWYg KGJhcl9sZW4gPiBsZW4pCisJCWJhcl9sZW4gPSBsZW47CisJYmFyX2xlbiAqPSB3OwogCiAJcHV0 Y2hhcignfCcpOwogCi0JZm9yIChpID0gYmFyX2xlbjsgaSA+PSA4OyBpIC09IDgpCi0JCXByaW50 ZigiJXMiLCBiYXJzWzhdKTsKKwlmb3IgKGkgPSBiYXJfbGVuOyBpID49IHc7IGkgLT0gdykKKwkJ cHJpbnRmKCIlcyIsIGJhcnNbd10pOwogCWlmIChpKQogCQlwcmludGYoIiVzIiwgYmFyc1tpXSk7 CiAKLQlmb3IgKGkgPSAwOyBpIDwgKG1heF9sZW4gLSAyIC0gKGJhcl9sZW4gKyA3KSAvIDgpOyBp KyspCi0JCXB1dGNoYXIoJyAnKTsKKwlsZW4gLT0gKGJhcl9sZW4gKyAodyAtIDEpKSAvIHc7CisJ bl9zcGFjZXMobGVuKTsKIAogCXB1dGNoYXIoJ3wnKTsKKworCWlmIChudW1lcmljKSB7CisJCS8q CisJCSAqIFRPRE86IEZpbmVyIGdyYWluZWQgcmV2ZXJzZSBjb250cm9sIHRvIGJldHRlciBwcmVz ZXJ2ZQorCQkgKiBiYXIgdW5kZXIgbnVtZXJpY2FsIHBlcmNlbnRhZ2UuCisJCSAqLworCQlwcmlu dGYoIlwwMzNbJXVEXDAzM1s3bSIsIG1heF9sZW4gLSAxKTsKKwkJaSA9IHByaW50ZigiJTMuZiUl IiwgcGVyY2VudCk7CisJCXByaW50ZigiXDAzM1sldUNcMDMzWzBtIiwgbWF4X2xlbiAtIGkgLSAx KTsKKwl9CiB9CiAKICNkZWZpbmUgREVGQVVMVF9QRVJJT0RfTVMgKDEwMDApCkBAIC03MDUsOCAr MTE2NCw2IEBAIHN0YXRpYyBjb25zdCBjaGFyICpqc29uX2luZGVudFtdID0gewogCSJcdFx0XHRc dFx0IiwKIH07CiAKLSNkZWZpbmUgQVJSQVlfU0laRShhcnIpIChzaXplb2YoYXJyKS9zaXplb2Yo YXJyWzBdKSkKLQogc3RhdGljIHVuc2lnbmVkIGludCBqc29uX3ByZXZfc3RydWN0X21lbWJlcnM7 CiBzdGF0aWMgdW5zaWduZWQgaW50IGpzb25fc3RydWN0X21lbWJlcnM7CiAKQEAgLTc0NCw2ICsx MjAxLDE4IEBAIGpzb25fY2xvc2Vfc3RydWN0KHZvaWQpCiAJCWZmbHVzaChzdGRvdXQpOwogfQog CitzdGF0aWMgdm9pZAorX19qc29uX2FkZF9tZW1iZXIoY29uc3QgY2hhciAqa2V5LCBjb25zdCBj aGFyICp2YWwpCit7CisJYXNzZXJ0KGpzb25faW5kZW50X2xldmVsIDwgQVJSQVlfU0laRShqc29u X2luZGVudCkpOworCisJZnByaW50ZihvdXQsICIlcyVzXCIlc1wiOiBcIiVzXCIiLAorCQlqc29u X3N0cnVjdF9tZW1iZXJzID8gIixcbiIgOiAiIiwKKwkJanNvbl9pbmRlbnRbanNvbl9pbmRlbnRf bGV2ZWxdLCBrZXksIHZhbCk7CisKKwlqc29uX3N0cnVjdF9tZW1iZXJzKys7Cit9CisKIHN0YXRp YyB1bnNpZ25lZCBpbnQKIGpzb25fYWRkX21lbWJlcihjb25zdCBzdHJ1Y3QgY250X2dyb3VwICpw YXJlbnQsIHN0cnVjdCBjbnRfaXRlbSAqaXRlbSwKIAkJdW5zaWduZWQgaW50IGhlYWRlcnMpCkBA IC0xMDQ2LDggKzE1MTUsNiBAQCBwcmludF9oZWFkZXIoY29uc3Qgc3RydWN0IGlndF9kZXZpY2Vf Y2FyZCAqY2FyZCwKIAkJbWVtbW92ZSgmZ3JvdXBzWzBdLCAmZ3JvdXBzWzFdLAogCQkJc2l6ZW9m KGdyb3VwcykgLSBzaXplb2YoZ3JvdXBzWzBdKSk7CiAKLQlwb3BzLT5vcGVuX3N0cnVjdChOVUxM KTsKLQogCSpjb25zdW1lZCA9IHByaW50X2dyb3Vwcyhncm91cHMpOwogCiAJaWYgKG91dHB1dF9t b2RlID09IElOVEVSQUNUSVZFKSB7CkBAIC0xMjA0LDcgKzE2NzEsNyBAQCBwcmludF9lbmdpbmUo c3RydWN0IGVuZ2luZXMgKmVuZ2luZXMsIHVuc2lnbmVkIGludCBpLCBkb3VibGUgdCwKIAkJCSAg ICAgIGVuZ2luZS0+ZGlzcGxheV9uYW1lLCBlbmdpbmVfaXRlbXNbMF0uYnVmKTsKIAogCQl2YWwg PSBwbXVfY2FsYygmZW5naW5lLT5idXN5LnZhbCwgMWU5LCB0LCAxMDApOwotCQlwcmludF9wZXJj ZW50YWdlX2Jhcih2YWwsIG1heF93IC0gbGVuKTsKKwkJcHJpbnRfcGVyY2VudGFnZV9iYXIodmFs LCBtYXhfdyA+IGxlbiA/IG1heF93IC0gbGVuIDogMCwgZmFsc2UpOwogCiAJCXByaW50ZigiJXNc biIsIGJ1Zik7CiAKQEAgLTEyMTksNyArMTY4Niw2IEBAIHByaW50X2VuZ2luZXNfZm9vdGVyKHN0 cnVjdCBlbmdpbmVzICplbmdpbmVzLCBkb3VibGUgdCwKIAkJICAgICBpbnQgbGluZXMsIGludCBj b25fdywgaW50IGNvbl9oKQogewogCXBvcHMtPmNsb3NlX3N0cnVjdCgpOwotCXBvcHMtPmNsb3Nl X3N0cnVjdCgpOwogCiAJaWYgKG91dHB1dF9tb2RlID09IElOVEVSQUNUSVZFKSB7CiAJCWlmIChs aW5lcysrIDwgY29uX2gpCkBAIC0xMjQzLDYgKzE3MDksOSBAQCBzdGF0aWMgdm9pZCBpbml0X2Vu Z2luZV9jbGFzc2VzKHN0cnVjdCBlbmdpbmVzICplbmdpbmVzKQogCXVuc2lnbmVkIGludCBpLCBu dW07CiAJaW50IG1heCA9IC0xOwogCisJaWYgKGVuZ2luZXMtPm51bV9jbGFzc2VzKQorCQlyZXR1 cm47CisKIAlmb3IgKGkgPSAwOyBpIDwgZW5naW5lcy0+bnVtX2VuZ2luZXM7IGkrKykgewogCQlz dHJ1Y3QgZW5naW5lICplbmdpbmUgPSBlbmdpbmVfcHRyKGVuZ2luZXMsIGkpOwogCkBAIC0xNDA0 LDYgKzE4NzMsMTUzIEBAIHByaW50X2VuZ2luZXMoc3RydWN0IGVuZ2luZXMgKmVuZ2luZXMsIGRv dWJsZSB0LCBpbnQgbGluZXMsIGludCB3LCBpbnQgaCkKIAlyZXR1cm4gbGluZXM7CiB9CiAKK3N0 YXRpYyBpbnQKK3ByaW50X2NsaWVudHNfaGVhZGVyKHN0cnVjdCBjbGllbnRzICpjbGllbnRzLCBp bnQgbGluZXMsCisJCSAgICAgaW50IGNvbl93LCBpbnQgY29uX2gsIGludCAqY2xhc3NfdykKK3sK KwlpZiAob3V0cHV0X21vZGUgPT0gSU5URVJBQ1RJVkUpIHsKKwkJY29uc3QgY2hhciAqcGlkbmFt ZSA9ICIgICBQSUQgICAgICAgICAgICAgIE5BTUUgIjsKKwkJdW5zaWduZWQgaW50IG51bV9hY3Rp dmUgPSAwOworCQlpbnQgbGVuID0gc3RybGVuKHBpZG5hbWUpOworCisJCWlmIChsaW5lcysrID49 IGNvbl9oKQorCQkJcmV0dXJuIGxpbmVzOworCisJCXByaW50ZigiXDAzM1s3bSIpOworCQlwcmlu dGYoIiVzIiwgcGlkbmFtZSk7CisKKwkJaWYgKGxpbmVzKysgPj0gY29uX2ggfHwgbGVuID49IGNv bl93KQorCQkJcmV0dXJuIGxpbmVzOworCisJCWlmIChjbGllbnRzLT5udW1fY2xhc3Nlcykgewor CQkJdW5zaWduZWQgaW50IGk7CisJCQlpbnQgd2lkdGg7CisKKwkJCWZvciAoaSA9IDA7IGkgPCBj bGllbnRzLT5udW1fY2xhc3NlczsgaSsrKSB7CisJCQkJaWYgKGNsaWVudHMtPmNsYXNzW2ldLm51 bV9lbmdpbmVzKQorCQkJCQludW1fYWN0aXZlKys7CisJCQl9CisKKwkJCSpjbGFzc193ID0gd2lk dGggPSAoY29uX3cgLSBsZW4pIC8gbnVtX2FjdGl2ZTsKKworCQkJZm9yIChpID0gMDsgaSA8IGNs aWVudHMtPm51bV9jbGFzc2VzOyBpKyspIHsKKwkJCQljb25zdCBjaGFyICpuYW1lID0gY2xpZW50 cy0+Y2xhc3NbaV0ubmFtZTsKKwkJCQlpbnQgbmFtZV9sZW4gPSBzdHJsZW4obmFtZSk7CisJCQkJ aW50IHBhZCA9ICh3aWR0aCAtIG5hbWVfbGVuKSAvIDI7CisJCQkJaW50IHNwYWNlcyA9IHdpZHRo IC0gcGFkIC0gbmFtZV9sZW47CisKKwkJCQlpZiAoIWNsaWVudHMtPmNsYXNzW2ldLm51bV9lbmdp bmVzKQorCQkJCQljb250aW51ZTsgLyogQXNzZXJ0IGluIHRoZSBpZGVhbCB3b3JsZC4gKi8KKwor CQkJCWlmIChwYWQgPCAwIHx8IHNwYWNlcyA8IDApCisJCQkJCWNvbnRpbnVlOworCisJCQkJbl9z cGFjZXMocGFkKTsKKwkJCQlwcmludGYoIiVzIiwgbmFtZSk7CisJCQkJbl9zcGFjZXMoc3BhY2Vz KTsKKwkJCQlsZW4gKz0gcGFkICsgbmFtZV9sZW4gKyBzcGFjZXM7CisJCQl9CisJCX0KKworCQlu X3NwYWNlcyhjb25fdyAtIGxlbik7CisJCXByaW50ZigiXDAzM1swbVxuIik7CisJfSBlbHNlIHsK KwkJaWYgKGNsaWVudHMtPm51bV9jbGFzc2VzKQorCQkJcG9wcy0+b3Blbl9zdHJ1Y3QoImNsaWVu dHMiKTsKKwl9CisKKwlyZXR1cm4gbGluZXM7Cit9CisKK3N0YXRpYyBib29sIG51bWVyaWNfY2xp ZW50czsKKworc3RhdGljIGludAorcHJpbnRfY2xpZW50KHN0cnVjdCBjbGllbnQgKmMsIHN0cnVj dCBlbmdpbmVzICplbmdpbmVzLCBkb3VibGUgdCwgaW50IGxpbmVzLAorCSAgICAgaW50IGNvbl93 LCBpbnQgY29uX2gsIHVuc2lnbmVkIGludCBwZXJpb2RfdXMsIGludCAqY2xhc3NfdykKK3sKKwlz dHJ1Y3QgY2xpZW50cyAqY2xpZW50cyA9IGMtPmNsaWVudHM7CisJdW5zaWduZWQgaW50IGk7CisK KwlpZiAob3V0cHV0X21vZGUgPT0gSU5URVJBQ1RJVkUpIHsKKwkJbGluZXMrKzsKKworCQlwcmlu dGYoIiU2dSAlMTdzICIsIGMtPnBpZCwgYy0+cHJpbnRfbmFtZSk7CisKKwkJZm9yIChpID0gMDsg Yy0+c2FtcGxlcyA+IDEgJiYgaSA8IGNsaWVudHMtPm51bV9jbGFzc2VzOyBpKyspIHsKKwkJCWRv dWJsZSBwY3Q7CisKKwkJCWlmICghY2xpZW50cy0+Y2xhc3NbaV0ubnVtX2VuZ2luZXMpCisJCQkJ Y29udGludWU7IC8qIEFzc2VydCBpbiB0aGUgaWRlYWwgd29ybGQuICovCisKKwkJCXBjdCA9IChk b3VibGUpYy0+dmFsW2ldIC8gcGVyaW9kX3VzIC8gMWUzICogMTAwIC8KKwkJCSAgICAgIGNsaWVu dHMtPmNsYXNzW2ldLm51bV9lbmdpbmVzOworCisJCQkvKgorCQkJICogR3VhcmQgYWdhaW5zdCBw b3NzaWJsZSB0aW1lLWRyaWZ0IGJldHdlZW4gc2FtcGxpbmcKKwkJCSAqIGNsaWVudCBkYXRhIGFu ZCB0aW1lIHdlIG9idGFpbmVkIG91ciB0aW1lLWRlbHRhIGZyb20KKwkJCSAqIFBNVS4KKwkJCSAq LworCQkJaWYgKHBjdCA+IDEwMC4wKQorCQkJCXBjdCA9IDEwMC4wOworCisJCQlwcmludF9wZXJj ZW50YWdlX2JhcihwY3QsICpjbGFzc193LCBudW1lcmljX2NsaWVudHMpOworCQl9CisKKwkJcHV0 Y2hhcignXG4nKTsKKwl9IGVsc2UgaWYgKG91dHB1dF9tb2RlID09IEpTT04pIHsKKwkJY2hhciBi dWZbNjRdOworCisJCXNucHJpbnRmKGJ1Ziwgc2l6ZW9mKGJ1ZiksICIldSIsIGMtPmlkKTsKKwkJ cG9wcy0+b3Blbl9zdHJ1Y3QoYnVmKTsKKworCQlfX2pzb25fYWRkX21lbWJlcigibmFtZSIsIGMt PnByaW50X25hbWUpOworCisJCXNucHJpbnRmKGJ1Ziwgc2l6ZW9mKGJ1ZiksICIldSIsIGMtPnBp ZCk7CisJCV9fanNvbl9hZGRfbWVtYmVyKCJwaWQiLCBidWYpOworCisJCWlmIChjLT5zYW1wbGVz ID4gMSkgeworCQkJcG9wcy0+b3Blbl9zdHJ1Y3QoImVuZ2luZS1jbGFzc2VzIik7CisKKwkJCWZv ciAoaSA9IDA7IGkgPCBjbGllbnRzLT5udW1fY2xhc3NlczsgaSsrKSB7CisJCQkJZG91YmxlIHBj dDsKKworCQkJCXNucHJpbnRmKGJ1Ziwgc2l6ZW9mKGJ1ZiksICIlcyIsCisJCQkJCWNsaWVudHMt PmNsYXNzW2ldLm5hbWUpOworCQkJCXBvcHMtPm9wZW5fc3RydWN0KGJ1Zik7CisKKwkJCQlwY3Qg PSAoZG91YmxlKWMtPnZhbFtpXSAvIHBlcmlvZF91cyAvIDFlMyAqIDEwMDsKKwkJCQlzbnByaW50 ZihidWYsIHNpemVvZihidWYpLCAiJWYiLCBwY3QpOworCQkJCV9fanNvbl9hZGRfbWVtYmVyKCJi dXN5IiwgYnVmKTsKKworCQkJCV9fanNvbl9hZGRfbWVtYmVyKCJ1bml0IiwgIiUiKTsKKworCQkJ CXBvcHMtPmNsb3NlX3N0cnVjdCgpOworCQkJfQorCisJCQlwb3BzLT5jbG9zZV9zdHJ1Y3QoKTsK KwkJfQorCisJCXBvcHMtPmNsb3NlX3N0cnVjdCgpOworCX0KKworCXJldHVybiBsaW5lczsKK30K Kworc3RhdGljIGludAorcHJpbnRfY2xpZW50c19mb290ZXIoc3RydWN0IGNsaWVudHMgKmNsaWVu dHMsIGRvdWJsZSB0LAorCQkgICAgIGludCBsaW5lcywgaW50IGNvbl93LCBpbnQgY29uX2gpCit7 CisJaWYgKG91dHB1dF9tb2RlID09IElOVEVSQUNUSVZFKSB7CisJCWlmIChsaW5lcysrIDwgY29u X2gpCisJCQlwcmludGYoIlxuIik7CisJfSBlbHNlIHsKKwkJaWYgKGNsaWVudHMtPm51bV9jbGFz c2VzKQorCQkJcG9wcy0+Y2xvc2Vfc3RydWN0KCk7CisJfQorCisJcmV0dXJuIGxpbmVzOworfQor CiBzdGF0aWMgYm9vbCBzdG9wX3RvcDsKIAogc3RhdGljIHZvaWQgc2lnaW50X2hhbmRsZXIoaW50 ICBzaWcpCkBAIC0xNDU5LDYgKzIwNzUsMjIgQEAgc3RhdGljIHZvaWQgaW50ZXJhY3RpdmVfc3Rk aW4odm9pZCkKIAlhc3NlcnQocmV0ID09IDApOwogfQogCitzdGF0aWMgdm9pZCBzZWxlY3RfY2xp ZW50X3NvcnQodm9pZCkKK3sKKwlzdGF0aWMgdW5zaWduZWQgaW50IGNsaWVudF9zb3J0OworCisJ c3dpdGNoICgrK2NsaWVudF9zb3J0ICUgMykgeworCWNhc2UgMDoKKwkJY2xpZW50X2NtcCA9IGNs aWVudF9sYXN0X2NtcDsKKwkJYnJlYWs7CisJY2FzZSAxOgorCQljbGllbnRfY21wID0gY2xpZW50 X3RvdGFsX2NtcDsKKwkJYnJlYWs7CisJY2FzZSAyOgorCQljbGllbnRfY21wID0gY2xpZW50X2lk X2NtcDsKKwl9Cit9CisKIHN0YXRpYyB2b2lkIHByb2Nlc3Nfc3RkaW4odW5zaWduZWQgaW50IHRp bWVvdXRfdXMpCiB7CiAJc3RydWN0IHBvbGxmZCBwID0geyAuZmQgPSAwLCAuZXZlbnRzID0gUE9M TElOIH07CkBAIC0xNDg1LDYgKzIxMTcsMTIgQEAgc3RhdGljIHZvaWQgcHJvY2Vzc19zdGRpbih1 bnNpZ25lZCBpbnQgdGltZW91dF91cykKIAkJY2FzZSAnMSc6CiAJCQljbGFzc192aWV3IF49IHRy dWU7CiAJCQlicmVhazsKKwkJY2FzZSAnbic6CisJCQludW1lcmljX2NsaWVudHMgXj0gdHJ1ZTsK KwkJCWJyZWFrOworCQljYXNlICdzJzoKKwkJCXNlbGVjdF9jbGllbnRfc29ydCgpOworCQkJYnJl YWs7CiAJCX07CiAJfQogfQpAQCAtMTQ5Miw2ICsyMTMwLDcgQEAgc3RhdGljIHZvaWQgcHJvY2Vz c19zdGRpbih1bnNpZ25lZCBpbnQgdGltZW91dF91cykKIGludCBtYWluKGludCBhcmdjLCBjaGFy ICoqYXJndikKIHsKIAl1bnNpZ25lZCBpbnQgcGVyaW9kX3VzID0gREVGQVVMVF9QRVJJT0RfTVMg KiAxMDAwOworCXN0cnVjdCBjbGllbnRzICpjbGllbnRzID0gTlVMTDsKIAlpbnQgY29uX3cgPSAt MSwgY29uX2ggPSAtMTsKIAljaGFyICpvdXRwdXRfcGF0aCA9IE5VTEw7CiAJc3RydWN0IGVuZ2lu ZXMgKmVuZ2luZXM7CkBAIC0xNjI1LDEzICsyMjY0LDIwIEBAIGludCBtYWluKGludCBhcmdjLCBj aGFyICoqYXJndikKIAogCXJldCA9IEVYSVRfU1VDQ0VTUzsKIAorCWNsaWVudHMgPSBpbml0X2Ns aWVudHMoY2FyZC5wY2lfc2xvdF9uYW1lWzBdID8gY2FyZC5jYXJkIDogTlVMTCk7CisJaW5pdF9l bmdpbmVfY2xhc3NlcyhlbmdpbmVzKTsKKwljbGllbnRzLT5udW1fY2xhc3NlcyA9IGVuZ2luZXMt Pm51bV9jbGFzc2VzOworCWNsaWVudHMtPmNsYXNzID0gZW5naW5lcy0+Y2xhc3M7CisKIAlwbXVf c2FtcGxlKGVuZ2luZXMpOworCXNjYW5fY2xpZW50cyhjbGllbnRzKTsKIAljb2RlbmFtZSA9IGln dF9kZXZpY2VfZ2V0X3ByZXR0eV9uYW1lKCZjYXJkLCBmYWxzZSk7CiAKIAl3aGlsZSAoIXN0b3Bf dG9wKSB7CiAJCWJvb2wgY29uc3VtZWQgPSBmYWxzZTsKLQkJaW50IGxpbmVzID0gMDsKKwkJaW50 IGosIGxpbmVzID0gMDsKIAkJc3RydWN0IHdpbnNpemUgd3M7CisJCXN0cnVjdCBjbGllbnQgKmM7 CiAJCWRvdWJsZSB0OwogCiAJCS8qIFVwZGF0ZSB0ZXJtaW5hbCBzaXplLiAqLwpAQCAtMTY1MCwx MCArMjI5NiwxNSBAQCBpbnQgbWFpbihpbnQgYXJnYywgY2hhciAqKmFyZ3YpCiAJCXBtdV9zYW1w bGUoZW5naW5lcyk7CiAJCXQgPSAoZG91YmxlKShlbmdpbmVzLT50cy5jdXIgLSBlbmdpbmVzLT50 cy5wcmV2KSAvIDFlOTsKIAorCQlzY2FuX2NsaWVudHMoY2xpZW50cyk7CisJCXNvcnRfY2xpZW50 cyhjbGllbnRzKTsKKwogCQlpZiAoc3RvcF90b3ApCiAJCQlicmVhazsKIAogCQl3aGlsZSAoIWNv bnN1bWVkKSB7CisJCQlwb3BzLT5vcGVuX3N0cnVjdChOVUxMKTsKKwogCQkJbGluZXMgPSBwcmlu dF9oZWFkZXIoJmNhcmQsIGNvZGVuYW1lLCBlbmdpbmVzLAogCQkJCQkgICAgIHQsIGxpbmVzLCBj b25fdywgY29uX2gsCiAJCQkJCSAgICAgJmNvbnN1bWVkKTsKQEAgLTE2NjEsNiArMjMxMiwzMyBA QCBpbnQgbWFpbihpbnQgYXJnYywgY2hhciAqKmFyZ3YpCiAJCQlsaW5lcyA9IHByaW50X2ltYyhl bmdpbmVzLCB0LCBsaW5lcywgY29uX3csIGNvbl9oKTsKIAogCQkJbGluZXMgPSBwcmludF9lbmdp bmVzKGVuZ2luZXMsIHQsIGxpbmVzLCBjb25fdywgY29uX2gpOworCisJCQlpZiAoY2xpZW50cykg eworCQkJCWludCBjbGFzc193OworCisJCQkJbGluZXMgPSBwcmludF9jbGllbnRzX2hlYWRlcihj bGllbnRzLCBsaW5lcywKKwkJCQkJCQkgICAgIGNvbl93LCBjb25faCwKKwkJCQkJCQkgICAgICZj bGFzc193KTsKKworCQkJCWZvcl9lYWNoX2NsaWVudChjbGllbnRzLCBjLCBqKSB7CisJCQkJCWFz c2VydChjLT5zdGF0dXMgIT0gUFJPQkUpOworCQkJCQlpZiAoYy0+c3RhdHVzICE9IEFMSVZFKQor CQkJCQkJYnJlYWs7IC8qIEFjdGl2ZSBjbGllbnRzIGFyZSBmaXJzdCBpbiB0aGUgYXJyYXkuICov CisKKwkJCQkJaWYgKGxpbmVzID4gY29uX2gpCisJCQkJCQlicmVhazsKKworCQkJCQlsaW5lcyA9 IHByaW50X2NsaWVudChjLCBlbmdpbmVzLCB0LAorCQkJCQkJCSAgICAgbGluZXMsIGNvbl93LAor CQkJCQkJCSAgICAgY29uX2gsIHBlcmlvZF91cywKKwkJCQkJCQkgICAgICZjbGFzc193KTsKKwkJ CQl9CisKKwkJCQlsaW5lcyA9IHByaW50X2NsaWVudHNfZm9vdGVyKGNsaWVudHMsIHQsIGxpbmVz LAorCQkJCQkJCSAgICAgY29uX3csIGNvbl9oKTsKKwkJCX0KKworCQkJcG9wcy0+Y2xvc2Vfc3Ry dWN0KCk7CiAJCX0KIAogCQlpZiAoc3RvcF90b3ApCi0tIAoyLjI3LjAKCl9fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCmlndC1kZXYgbWFpbGluZyBsaXN0Cmln dC1kZXZAbGlzdHMuZnJlZWRlc2t0b3Aub3JnCmh0dHBzOi8vbGlzdHMuZnJlZWRlc2t0b3Aub3Jn L21haWxtYW4vbGlzdGluZm8vaWd0LWRldgo=