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 Received: from bombadil.infradead.org (bombadil.infradead.org [198.137.202.133]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.lore.kernel.org (Postfix) with ESMTPS id 145A5C7EE25 for ; Wed, 7 Jun 2023 15:56:13 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=lists.infradead.org; s=bombadil.20210309; h=Sender:Content-Type: Content-Transfer-Encoding:List-Subscribe:List-Help:List-Post:List-Archive: List-Unsubscribe:List-Id:In-Reply-To:From:References:CC:To:Subject: MIME-Version:Date:Message-ID:Reply-To:Content-ID:Content-Description: Resent-Date:Resent-From:Resent-Sender:Resent-To:Resent-Cc:Resent-Message-ID: List-Owner; bh=wydv/q6M+jw3zkDdyqJAIlF+/4Ge1HoUeWhBPlPMC+U=; b=vNYRoQDEJ8yNdg R1pjVMQmlbaQX19RWVkwSJMLobx9N9qCLlpeFv0iQYbanpXuh9RXqqiwtb/Ly7SyTnIW4ohfNWR6L Gv3tkxpR8W9FTgTYRU29YH9G9VyZRD3Jv3WL+iC7gcuBX66H9K3TS07aM+yCnPAdLQNyYhvC1LQLU 8SOxsGZLh1M+hAYnL1B6pBdtRw0DWTGTE74EFR5NSyJBMXkaJPY7EfLakXJsRBPhTGpVR192/7IYI lsODl97mg6ZLEfe9WJWH74k8BjN+K5qt+uRq3H8+aXhS1VGAS4VhddGYVWo0IAcuwho2YOwB3KcMD GaW4nwjQqocxiDyU7Cvg==; Received: from localhost ([::1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.96 #2 (Red Hat Linux)) id 1q6vVj-006UBk-1t; Wed, 07 Jun 2023 15:55:47 +0000 Received: from mx0a-0031df01.pphosted.com ([205.220.168.131]) by bombadil.infradead.org with esmtps (Exim 4.96 #2 (Red Hat Linux)) id 1q6vVg-006UAH-20 for linux-arm-kernel@lists.infradead.org; Wed, 07 Jun 2023 15:55:46 +0000 Received: from pps.filterd (m0279865.ppops.net [127.0.0.1]) by mx0a-0031df01.pphosted.com (8.17.1.19/8.17.1.19) with ESMTP id 357EqLQn015967; Wed, 7 Jun 2023 15:55:31 GMT DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=quicinc.com; h=message-id : date : mime-version : subject : to : cc : references : from : in-reply-to : content-type : content-transfer-encoding; s=qcppdkim1; bh=a88kNr/48AubDrzv+pOPSNaCMMgxGL0xvHKW5olM93k=; b=A3XZX0z+XGrQJDNXnSIxjK/rbIBwgPWx4m2pxHrlBJbhTzw7JxjCQV3KUbjpMKaQegKP IfqPyWVIpjPwgrJ45z5/tC5cXDs6SM6Mj3yQmhrYic5y0FXbfbbFCa0QfZp5GrqRzpLM rxL481v8lagTD69xdwuZzVHV0HCFyfozetgXNcmt2Sc3qA6RMOawTM3j0pAZi58BobgO aVycxFZEdTzZegWcvWcK7Ot1F1tbtKbOn+ktAW3An3LCoB0vFpArn08WRWCr6wS6fRC1 7rrn4gJc1y+0CRswp6CArFCJ871+28VBFqeSJwQwaB5p8iRMoeMZukhCbS3ZFfT8JuZs aQ== Received: from nasanppmta01.qualcomm.com (i-global254.qualcomm.com [199.106.103.254]) by mx0a-0031df01.pphosted.com (PPS) with ESMTPS id 3r2a6yta51-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=NOT); Wed, 07 Jun 2023 15:55:31 +0000 Received: from nasanex01b.na.qualcomm.com (nasanex01b.na.qualcomm.com [10.46.141.250]) by NASANPPMTA01.qualcomm.com (8.17.1.5/8.17.1.5) with ESMTPS id 357FtTGE021924 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=NOT); Wed, 7 Jun 2023 15:55:29 GMT Received: from [10.134.65.165] (10.80.80.8) by nasanex01b.na.qualcomm.com (10.46.141.250) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.2.986.42; Wed, 7 Jun 2023 08:55:28 -0700 Message-ID: Date: Wed, 7 Jun 2023 08:55:29 -0700 MIME-Version: 1.0 User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:102.0) Gecko/20100101 Thunderbird/102.6.1 Subject: Re: [PATCH v13 14/24] virt: gunyah: Add Qualcomm Gunyah platform ops Content-Language: en-US To: Alex Elder , Srinivas Kandagatla , Prakruthi Deepak Heragu CC: Murali Nalajala , Trilok Soni , Srivatsa Vaddagiri , Carl van Schaik , Dmitry Baryshkov , Bjorn Andersson , "Konrad Dybcio" , Arnd Bergmann , "Greg Kroah-Hartman" , Rob Herring , Krzysztof Kozlowski , Jonathan Corbet , Bagas Sanjaya , Will Deacon , Andy Gross , Catalin Marinas , Jassi Brar , , , , , References: <20230509204801.2824351-1-quic_eberman@quicinc.com> <20230509204801.2824351-15-quic_eberman@quicinc.com> <026fb04d-6d58-8d9c-8208-4f34a287a78f@linaro.org> From: Elliot Berman In-Reply-To: <026fb04d-6d58-8d9c-8208-4f34a287a78f@linaro.org> X-Originating-IP: [10.80.80.8] X-ClientProxiedBy: nasanex01a.na.qualcomm.com (10.52.223.231) To nasanex01b.na.qualcomm.com (10.46.141.250) X-QCInternal: smtphost X-Proofpoint-Virus-Version: vendor=nai engine=6200 definitions=5800 signatures=585085 X-Proofpoint-ORIG-GUID: 4u9CLNjh0_UJFaodqtfYHNvJcg4YSj8D X-Proofpoint-GUID: 4u9CLNjh0_UJFaodqtfYHNvJcg4YSj8D X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.254,Aquarius:18.0.957,Hydra:6.0.573,FMLib:17.11.176.26 definitions=2023-06-07_07,2023-06-07_01,2023-05-22_02 X-Proofpoint-Spam-Details: rule=outbound_notspam policy=outbound score=0 impostorscore=0 clxscore=1015 bulkscore=0 priorityscore=1501 mlxlogscore=999 adultscore=0 suspectscore=0 phishscore=0 lowpriorityscore=0 mlxscore=0 spamscore=0 malwarescore=0 classifier=spam adjust=0 reason=mlx scancount=1 engine=8.12.0-2305260000 definitions=main-2306070136 X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20230607_085544_666414_4BCCFDAB X-CRM114-Status: GOOD ( 38.40 ) X-BeenThere: linux-arm-kernel@lists.infradead.org X-Mailman-Version: 2.1.34 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Content-Transfer-Encoding: base64 Content-Type: text/plain; charset="utf-8"; Format="flowed" Sender: "linux-arm-kernel" Errors-To: linux-arm-kernel-bounces+linux-arm-kernel=archiver.kernel.org@lists.infradead.org CgpPbiA2LzUvMjAyMyAxMjo0OCBQTSwgQWxleCBFbGRlciB3cm90ZToKPiBPbiA1LzkvMjMgMzo0 NyBQTSwgRWxsaW90IEJlcm1hbiB3cm90ZToKPj4gUXVhbGNvbW0gcGxhdGZvcm1zIGhhdmUgYSBm aXJtd2FyZSBlbnRpdHkgd2hpY2ggcGVyZm9ybXMgYWNjZXNzIGNvbnRyb2wKPj4gdG8gcGh5c2lj YWwgcGFnZXMuIER5bmFtaWNhbGx5IHN0YXJ0ZWQgR3VueWFoIHZpcnR1YWwgbWFjaGluZXMgdXNl IHRoZQo+PiBRQ09NX1NDTV9STV9NQU5BR0VEX1ZNSUQgZm9yIGFjY2Vzcy4gTGludXggdGh1cyBu ZWVkcyB0byBhc3NpZ24gYWNjZXNzCj4+IHRvIHRoZSBtZW1vcnkgdXNlZCBieSBndWVzdCBWTXMu IEd1bnlhaCBkb2Vzbid0IGRvIHRoaXMgb3BlcmF0aW9uIGZvciB1cwo+PiBzaW5jZSBpdCBpcyB0 aGUgY3VycmVudCBWTSAodHlwaWNhbGx5IFZNSURfSExPUykgZGVsZWdhdGluZyB0aGUgYWNjZXNz Cj4+IGFuZCBub3QgR3VueWFoIGl0c2VsZi4gVXNlIHRoZSBHdW55YWggcGxhdGZvcm0gb3BzIHRv IGFjaGlldmUgdGhpcyBzbwo+PiB0aGF0IG9ubHkgUXVhbGNvbW0gcGxhdGZvcm1zIGF0dGVtcHQg dG8gbWFrZSB0aGUgbmVlZGVkIFNDTSBjYWxscy4KPj4KPj4gQ28tZGV2ZWxvcGVkLWJ5OiBQcmFr cnV0aGkgRGVlcGFrIEhlcmFndSA8cXVpY19waGVyYWd1QHF1aWNpbmMuY29tPgo+PiBTaWduZWQt b2ZmLWJ5OiBQcmFrcnV0aGkgRGVlcGFrIEhlcmFndSA8cXVpY19waGVyYWd1QHF1aWNpbmMuY29t Pgo+PiBTaWduZWQtb2ZmLWJ5OiBFbGxpb3QgQmVybWFuIDxxdWljX2ViZXJtYW5AcXVpY2luYy5j b20+Cj4gCj4gTWlub3Igc3VnZ2VzdGlvbnMgYmVsb3cuwqAgUGxlYXNlIGNvbnNpZGVyIHRoZW0s IGJ1dCBlaXRoZXIgd2F5Ogo+IAo+IFJldmlld2VkLWJ5OiBBbGV4IEVsZGVyIDxlbGRlckBsaW5h cm8ub3JnPgo+IAo+PiAtLS0KPj4gwqAgZHJpdmVycy92aXJ0L2d1bnlhaC9LY29uZmlnwqDCoMKg wqDCoMKgIHzCoCAxMyArKysKPj4gwqAgZHJpdmVycy92aXJ0L2d1bnlhaC9NYWtlZmlsZcKgwqDC oMKgwqAgfMKgwqAgMSArCj4+IMKgIGRyaXZlcnMvdmlydC9ndW55YWgvZ3VueWFoX3Fjb20uYyB8 IDE0NyArKysrKysrKysrKysrKysrKysrKysrKysrKysrKysKPj4gwqAgMyBmaWxlcyBjaGFuZ2Vk LCAxNjEgaW5zZXJ0aW9ucygrKQo+PiDCoCBjcmVhdGUgbW9kZSAxMDA2NDQgZHJpdmVycy92aXJ0 L2d1bnlhaC9ndW55YWhfcWNvbS5jCj4+Cj4+IGRpZmYgLS1naXQgYS9kcml2ZXJzL3ZpcnQvZ3Vu eWFoL0tjb25maWcgYi9kcml2ZXJzL3ZpcnQvZ3VueWFoL0tjb25maWcKPj4gaW5kZXggZGU4MTUx ODlkYWI2Li4wNDIxYjc1MWFhZDQgMTAwNjQ0Cj4+IC0tLSBhL2RyaXZlcnMvdmlydC9ndW55YWgv S2NvbmZpZwo+PiArKysgYi9kcml2ZXJzL3ZpcnQvZ3VueWFoL0tjb25maWcKPj4gQEAgLTUsNiAr NSw3IEBAIGNvbmZpZyBHVU5ZQUgKPj4gwqDCoMKgwqDCoCBkZXBlbmRzIG9uIEFSTTY0Cj4+IMKg wqDCoMKgwqAgZGVwZW5kcyBvbiBNQUlMQk9YCj4+IMKgwqDCoMKgwqAgc2VsZWN0IEdVTllBSF9Q TEFURk9STV9IT09LUwo+PiArwqDCoMKgIGltcGx5IEdVTllBSF9RQ09NX1BMQVRGT1JNIGlmIEFS Q0hfUUNPTQo+PiDCoMKgwqDCoMKgIGhlbHAKPj4gwqDCoMKgwqDCoMKgwqAgVGhlIEd1bnlhaCBk cml2ZXJzIGFyZSB0aGUgaGVscGVyIGludGVyZmFjZXMgdGhhdCBydW4gaW4gYSAKPj4gZ3Vlc3Qg Vk0KPj4gwqDCoMKgwqDCoMKgwqAgc3VjaCBhcyBiYXNpYyBpbnRlci1WTSBJUEMgYW5kIHNpZ25h bGluZyBtZWNoYW5pc21zLCBhbmQgCj4+IGhpZ2hlciBsZXZlbAo+PiBAQCAtMTUsMyArMTYsMTUg QEAgY29uZmlnIEdVTllBSAo+PiDCoCBjb25maWcgR1VOWUFIX1BMQVRGT1JNX0hPT0tTCj4+IMKg wqDCoMKgwqAgdHJpc3RhdGUKPj4gKwo+PiArY29uZmlnIEdVTllBSF9RQ09NX1BMQVRGT1JNCj4+ ICvCoMKgwqAgdHJpc3RhdGUgIlN1cHBvcnQgZm9yIEd1bnlhaCBvbiBRdWFsY29tbSBwbGF0Zm9y bXMiCj4+ICvCoMKgwqAgZGVwZW5kcyBvbiBHVU5ZQUgKPj4gK8KgwqDCoCBzZWxlY3QgR1VOWUFI X1BMQVRGT1JNX0hPT0tTCj4+ICvCoMKgwqAgc2VsZWN0IFFDT01fU0NNCj4+ICvCoMKgwqAgaGVs cAo+PiArwqDCoMKgwqDCoCBFbmFibGUgc3VwcG9ydCBmb3IgaW50ZXJhY3Rpbmcgd2l0aCBHdW55 YWggb24gUXVhbGNvbW0KPj4gK8KgwqDCoMKgwqAgcGxhdGZvcm1zLiBJbnRlcmFjdGlvbiB3aXRo IFF1YWxjb21tIGZpcm13YXJlIHJlcXVpcmVzCj4+ICvCoMKgwqDCoMKgIGV4dHJhIHBsYXRmb3Jt LXNwZWNpZmljIHN1cHBvcnQuCj4+ICsKPj4gK8KgwqDCoMKgwqAgU2F5IFkvTSBoZXJlIHRvIHVz ZSBHdW55YWggb24gUXVhbGNvbW0gcGxhdGZvcm1zLgo+PiBkaWZmIC0tZ2l0IGEvZHJpdmVycy92 aXJ0L2d1bnlhaC9NYWtlZmlsZSBiL2RyaXZlcnMvdmlydC9ndW55YWgvTWFrZWZpbGUKPj4gaW5k ZXggNGZiZWVlNTIxZDYwLi4yYWE5ZmYwMzhlZDAgMTAwNjQ0Cj4+IC0tLSBhL2RyaXZlcnMvdmly dC9ndW55YWgvTWFrZWZpbGUKPj4gKysrIGIvZHJpdmVycy92aXJ0L2d1bnlhaC9NYWtlZmlsZQo+ PiBAQCAtMSw2ICsxLDcgQEAKPj4gwqAgIyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIu MAo+PiDCoCBvYmotJChDT05GSUdfR1VOWUFIX1BMQVRGT1JNX0hPT0tTKSArPSBndW55YWhfcGxh dGZvcm1faG9va3Mubwo+PiArb2JqLSQoQ09ORklHX0dVTllBSF9RQ09NX1BMQVRGT1JNKSArPSBn dW55YWhfcWNvbS5vCj4+IMKgIGd1bnlhaC15ICs9IHJzY19tZ3IubyByc2NfbWdyX3JwYy5vIHZt X21nci5vIHZtX21ncl9tbS5vCj4+IMKgIG9iai0kKENPTkZJR19HVU5ZQUgpICs9IGd1bnlhaC5v Cj4+IGRpZmYgLS1naXQgYS9kcml2ZXJzL3ZpcnQvZ3VueWFoL2d1bnlhaF9xY29tLmMgCj4+IGIv ZHJpdmVycy92aXJ0L2d1bnlhaC9ndW55YWhfcWNvbS5jCj4+IG5ldyBmaWxlIG1vZGUgMTAwNjQ0 Cj4+IGluZGV4IDAwMDAwMDAwMDAwMC4uMThhY2JkYThmY2JkCj4+IC0tLSAvZGV2L251bGwKPj4g KysrIGIvZHJpdmVycy92aXJ0L2d1bnlhaC9ndW55YWhfcWNvbS5jCj4+IEBAIC0wLDAgKzEsMTQ3 IEBACj4+ICsvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5Cj4+ICsvKgo+ PiArICogQ29weXJpZ2h0IChjKSAyMDIzIFF1YWxjb21tIElubm92YXRpb24gQ2VudGVyLCBJbmMu IEFsbCByaWdodHMgCj4+IHJlc2VydmVkLgo+PiArICovCj4+ICsKPj4gKyNpbmNsdWRlIDxsaW51 eC9hcm0tc21jY2MuaD4KPj4gKyNpbmNsdWRlIDxsaW51eC9ndW55YWhfcnNjX21nci5oPgo+PiAr I2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgo+PiArI2luY2x1ZGUgPGxpbnV4L2Zpcm13YXJlL3Fj b20vcWNvbV9zY20uaD4KPj4gKyNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgo+PiArI2luY2x1ZGUg PGxpbnV4L3V1aWQuaD4KPj4gKwo+PiArI2RlZmluZSBRQ09NX1NDTV9STV9NQU5BR0VEX1ZNSUTC oMKgwqAgMHgzQQo+PiArI2RlZmluZSBRQ09NX1NDTV9NQVhfTUFOQUdFRF9WTUlEwqDCoMKgIDB4 M0YKPiAKPiBJcyB0aGlzIGxpbWl0ZWQgdG8gNjMgYmVjYXVzZSB0aGVyZSBhcmUgYXQgbW9zdCA2 NCBWTUlEcwo+IHRoYXQgY2FuIGJlIHJlcHJlc2VudGVkIGluIGEgNjQtYml0IHVuc2lnbmVkPwo+ IAoKSXQncyBhIGxpbWl0YXRpb24gaW1wb3NlZCBieSBRQyBmaXJtd2FyZSwgYnV0IEkgc3BlY3Vs YXRlIHRoYXQncyB3aHkgNjMgCmlzIHNlbGVjdGVkLgoKPj4gKwo+PiArc3RhdGljIGludCBxY29t X3NjbV9naF9ybV9wcmVfbWVtX3NoYXJlKHN0cnVjdCBnaF9ybSAqcm0sIHN0cnVjdCAKPj4gZ2hf cm1fbWVtX3BhcmNlbCAqbWVtX3BhcmNlbCkKPj4gK3sKPj4gK8KgwqDCoCBzdHJ1Y3QgcWNvbV9z Y21fdm1wZXJtICpuZXdfcGVybXM7Cj4+ICvCoMKgwqAgdTY0IHNyYywgc3JjX2NweTsKPj4gK8Kg wqDCoCBpbnQgcmV0ID0gMCwgaSwgbjsKPj4gK8KgwqDCoCB1MTYgdm1pZDsKPj4gKwo+PiArwqDC oMKgIG5ld19wZXJtcyA9IGtjYWxsb2MobWVtX3BhcmNlbC0+bl9hY2xfZW50cmllcywgCj4+IHNp emVvZigqbmV3X3Blcm1zKSwgR0ZQX0tFUk5FTCk7Cj4+ICvCoMKgwqAgaWYgKCFuZXdfcGVybXMp Cj4+ICvCoMKgwqDCoMKgwqDCoCByZXR1cm4gLUVOT01FTTsKPj4gKwo+PiArwqDCoMKgIGZvciAo biA9IDA7IG4gPCBtZW1fcGFyY2VsLT5uX2FjbF9lbnRyaWVzOyBuKyspIHsKPj4gK8KgwqDCoMKg wqDCoMKgIHZtaWQgPSBsZTE2X3RvX2NwdShtZW1fcGFyY2VsLT5hY2xfZW50cmllc1tuXS52bWlk KTsKPj4gK8KgwqDCoMKgwqDCoMKgIGlmICh2bWlkIDw9IFFDT01fU0NNX01BWF9NQU5BR0VEX1ZN SUQpCj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIG5ld19wZXJtc1tuXS52bWlkID0gdm1pZDsK Pj4gK8KgwqDCoMKgwqDCoMKgIGVsc2UKPj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqAgbmV3X3Bl cm1zW25dLnZtaWQgPSBRQ09NX1NDTV9STV9NQU5BR0VEX1ZNSUQ7Cj4gCj4gU28gYW55IG91dC1v Zi1yYW5nZSBWTSBJRCB3aWxsIGNhdXNlIHRoZSBodW5rIG9mIG1lbW9yeSB0bwo+IGJlIGFzc2ln bmVkIHRvIHRoZSByZXNvdXJjZSBtYW5hZ2VyLsKgIElzIGl0IGV4cGVjdGVkIHRoYXQKPiB0aGlz IGNhbiBvY2N1ciAoYW5kIG5vdCBiZSBhbiBlcnJvcik/Cj4gCgpZZXMsIHRoYXQncyB0aGUgZXhw ZWN0YXRpb24gZm9yIHRoZXNlIHZpcnR1YWwgbWFjaGluZXMuIFRoaXMgaXMgZm9yIHRoZSAKYWNj ZXNzIGNvbnRyb2wgaW1wbGVtZW50ZWQgaW4gUUMgZmlybXdhcmUsIHNvIGl0J3Mgbm90IHRoYXQg d2UncmUgCmFzc2lnbmluZyBtZW1vcnkgdG8gcmVzb3VyY2UgbWFuYWdlciwgYnV0IHJhdGhlciBh c3NpZ25pbmcgbWVtb3J5IHRvIGEgCnJlc291cmNlIG1hbmFnZXItbWFuYWdlZCBWTS4gVGhpcyBp cyBkb25lIHRvIGRlLWVzY2FsYXRlIHRoZSBhY2Nlc3MgCmxldmVsIG9mIGd1ZXN0IFZNcy4KCj4+ ICvCoMKgwqDCoMKgwqDCoCBpZiAobWVtX3BhcmNlbC0+YWNsX2VudHJpZXNbbl0ucGVybXMgJiBH SF9STV9BQ0xfWCkKPj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqAgbmV3X3Blcm1zW25dLnBlcm0g fD0gUUNPTV9TQ01fUEVSTV9FWEVDOwo+PiArwqDCoMKgwqDCoMKgwqAgaWYgKG1lbV9wYXJjZWwt PmFjbF9lbnRyaWVzW25dLnBlcm1zICYgR0hfUk1fQUNMX1cpCj4+ICvCoMKgwqDCoMKgwqDCoMKg wqDCoMKgIG5ld19wZXJtc1tuXS5wZXJtIHw9IFFDT01fU0NNX1BFUk1fV1JJVEU7Cj4+ICvCoMKg wqDCoMKgwqDCoCBpZiAobWVtX3BhcmNlbC0+YWNsX2VudHJpZXNbbl0ucGVybXMgJiBHSF9STV9B Q0xfUikKPj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqAgbmV3X3Blcm1zW25dLnBlcm0gfD0gUUNP TV9TQ01fUEVSTV9SRUFEOwo+PiArwqDCoMKgIH0KPj4gKwo+PiArwqDCoMKgIHNyYyA9ICgxdWxs IDw8IFFDT01fU0NNX1ZNSURfSExPUyk7Cj4gCj4gIMKgwqDCoMKgc3JjID0gQklUX1VMTChRQ09N X1NDTV9WTUlEX0hMT1MpOwo+IAo+PiArCj4+ICvCoMKgwqAgZm9yIChpID0gMDsgaSA8IG1lbV9w YXJjZWwtPm5fbWVtX2VudHJpZXM7IGkrKykgewo+PiArwqDCoMKgwqDCoMKgwqAgc3JjX2NweSA9 IHNyYzsKPj4gK8KgwqDCoMKgwqDCoMKgIHJldCA9IAo+PiBxY29tX3NjbV9hc3NpZ25fbWVtKGxl NjRfdG9fY3B1KG1lbV9wYXJjZWwtPm1lbV9lbnRyaWVzW2ldLnBoeXNfYWRkciksCj4+ICvCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIGxlNjRfdG9fY3B1KG1l bV9wYXJjZWwtPm1lbV9lbnRyaWVzW2ldLnNpemUpLAo+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCAmc3JjX2NweSwgbmV3X3Blcm1zLCBtZW1fcGFyY2Vs LT5uX2FjbF9lbnRyaWVzKTsKPiAKPiBMb29wcyBsaWtlIHRoaXMgY2FuIGxvb2sgc2ltcGxlciBp ZiB5b3UganVtcCB0byBlcnJvciBoYW5kbGluZwo+IGF0IHRoZSBlbmQgdGhhdCBkb2VzIHRoaXMg dW53aW5kIGFjdGl2aXR5LCByYXRoZXIgdGhhbiBpbmNvcnBvcmF0aW5nCj4gaXQgaW5zaWRlIHRo ZSBsb29wIGl0c2VsZi7CoCBPciBldmVuIGp1c3QgYnJlYWtpbmcgaWYgcmV0ICE9IDAsIGUuZy46 Cj4gCj4gIMKgwqDCoMKgwqDCoMKgIGlmIChyZXQpCj4gIMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAg YnJlYWs7Cj4gIMKgwqDCoMKgfQo+IAo+ICDCoMKgwqDCoGlmICghcmV0KQo+ICDCoMKgwqDCoMKg wqDCoCByZXR1cm4gMDsKPiAKPiAgwqDCoMKgwqAvKiBBbmQgZG8gdGhlIGZvbGxvd2luZyBibG9j ayBoZXJlLCAib3V0ZGVudGVkIiB0d2ljZSAqLwo+IAo+PiArwqDCoMKgwqDCoMKgwqAgaWYgKHJl dCkgewo+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBzcmMgPSAwOwo+PiArwqDCoMKgwqDCoMKg wqDCoMKgwqDCoCBmb3IgKG4gPSAwOyBuIDwgbWVtX3BhcmNlbC0+bl9hY2xfZW50cmllczsgbisr KSB7Cj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgdm1pZCA9IGxlMTZfdG9fY3B1 KG1lbV9wYXJjZWwtPmFjbF9lbnRyaWVzW25dLnZtaWQpOwo+PiArwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgIGlmICh2bWlkIDw9IFFDT01fU0NNX01BWF9NQU5BR0VEX1ZNSUQpCj4+ICvC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBzcmMgfD0gKDF1bGwgPDwgdm1p ZCk7Cj4gCj4gIMKgwqDCoMKgc3JjIHw9IEJJVF9VTEwodm1pZCk7Cj4gCj4+ICvCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqAgZWxzZQo+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqAgc3JjIHw9ICgxdWxsIDw8IFFDT01fU0NNX1JNX01BTkFHRURfVk1JRCk7Cj4g Cj4gIMKgwqDCoMKgc3JjIHw9IEJJVF9VTEwoUUNPTV9TQ01fUk1fTUFOQUdFRF9WTUlEKTsKPiAK Pj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqAgfQo+PiArCj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDC oMKgIG5ld19wZXJtc1swXS52bWlkID0gUUNPTV9TQ01fVk1JRF9ITE9TOwo+PiArCj4+ICvCoMKg wqDCoMKgwqDCoMKgwqDCoMKgIGZvciAoaS0tOyBpID49IDA7IGktLSkgewo+PiArwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgIHNyY19jcHkgPSBzcmM7Cj4+ICvCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqAgV0FSTl9PTl9PTkNFKHFjb21fc2NtX2Fzc2lnbl9tZW0oCj4+ICsgICAg ICAgICAgICAgICAgICAgICAgICAKPj4gbGU2NF90b19jcHUobWVtX3BhcmNlbC0+bWVtX2VudHJp ZXNbaV0ucGh5c19hZGRyKSwKPj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqAgbGU2NF90b19jcHUobWVtX3BhcmNlbC0+bWVtX2VudHJpZXNbaV0uc2l6ZSks Cj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgICZzcmNf Y3B5LCBuZXdfcGVybXMsIDEpKTsKPj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqAgfQo+PiArwqDC oMKgwqDCoMKgwqDCoMKgwqDCoCBicmVhazsKPj4gK8KgwqDCoMKgwqDCoMKgIH0KPj4gK8KgwqDC oCB9Cj4+ICsKPj4gK8KgwqDCoCBrZnJlZShuZXdfcGVybXMpOwo+PiArwqDCoMKgIHJldHVybiBy ZXQ7Cj4+ICt9Cj4+ICsKPj4gK3N0YXRpYyBpbnQgcWNvbV9zY21fZ2hfcm1fcG9zdF9tZW1fcmVj bGFpbShzdHJ1Y3QgZ2hfcm0gKnJtLCBzdHJ1Y3QgCj4+IGdoX3JtX21lbV9wYXJjZWwgKm1lbV9w YXJjZWwpCj4+ICt7Cj4+ICvCoMKgwqAgc3RydWN0IHFjb21fc2NtX3ZtcGVybSBuZXdfcGVybXM7 Cj4+ICvCoMKgwqAgdTY0IHNyYyA9IDAsIHNyY19jcHk7Cj4+ICvCoMKgwqAgaW50IHJldCA9IDAs IGksIG47Cj4+ICvCoMKgwqAgdTE2IHZtaWQ7Cj4+ICsKPj4gK8KgwqDCoCBuZXdfcGVybXMudm1p ZCA9IFFDT01fU0NNX1ZNSURfSExPUzsKPj4gK8KgwqDCoCBuZXdfcGVybXMucGVybSA9IFFDT01f U0NNX1BFUk1fRVhFQyB8IFFDT01fU0NNX1BFUk1fV1JJVEUgfCAKPj4gUUNPTV9TQ01fUEVSTV9S RUFEOwo+PiArCj4+ICvCoMKgwqAgZm9yIChuID0gMDsgbiA8IG1lbV9wYXJjZWwtPm5fYWNsX2Vu dHJpZXM7IG4rKykgewo+PiArwqDCoMKgwqDCoMKgwqAgdm1pZCA9IGxlMTZfdG9fY3B1KG1lbV9w YXJjZWwtPmFjbF9lbnRyaWVzW25dLnZtaWQpOwo+PiArwqDCoMKgwqDCoMKgwqAgaWYgKHZtaWQg PD0gUUNPTV9TQ01fTUFYX01BTkFHRURfVk1JRCkKPj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqAg c3JjIHw9ICgxdWxsIDw8IHZtaWQpOwo+PiArwqDCoMKgwqDCoMKgwqAgZWxzZQo+PiArwqDCoMKg wqDCoMKgwqDCoMKgwqDCoCBzcmMgfD0gKDF1bGwgPDwgUUNPTV9TQ01fUk1fTUFOQUdFRF9WTUlE KTsKPj4gK8KgwqDCoCB9Cj4+ICsKPj4gK8KgwqDCoCBmb3IgKGkgPSAwOyBpIDwgbWVtX3BhcmNl bC0+bl9tZW1fZW50cmllczsgaSsrKSB7Cj4+ICvCoMKgwqDCoMKgwqDCoCBzcmNfY3B5ID0gc3Jj Owo+PiArwqDCoMKgwqDCoMKgwqAgcmV0ID0gCj4+IHFjb21fc2NtX2Fzc2lnbl9tZW0obGU2NF90 b19jcHUobWVtX3BhcmNlbC0+bWVtX2VudHJpZXNbaV0ucGh5c19hZGRyKSwKPj4gK8KgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgbGU2NF90b19jcHUobWVtX3Bh cmNlbC0+bWVtX2VudHJpZXNbaV0uc2l6ZSksCj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgICZzcmNfY3B5LCAmbmV3X3Blcm1zLCAxKTsKPj4gK8KgwqDC oMKgwqDCoMKgIFdBUk5fT05fT05DRShyZXQpOwo+PiArwqDCoMKgIH0KPj4gKwo+PiArwqDCoMKg IHJldHVybiByZXQ7Cj4+ICt9Cj4+ICsKPj4gK3N0YXRpYyBzdHJ1Y3QgZ2hfcm1fcGxhdGZvcm1f b3BzIHFjb21fc2NtX2doX3JtX3BsYXRmb3JtX29wcyA9IHsKPj4gK8KgwqDCoCAucHJlX21lbV9z aGFyZSA9IHFjb21fc2NtX2doX3JtX3ByZV9tZW1fc2hhcmUsCj4+ICvCoMKgwqAgLnBvc3RfbWVt X3JlY2xhaW0gPSBxY29tX3NjbV9naF9ybV9wb3N0X21lbV9yZWNsYWltLAo+PiArfTsKPj4gKwo+ PiArLyogezE5YmQ1NGJkLTBiMzctNTcxYi05NDZmLTYwOWI1NDUzOWRlNn0gKi8KPj4gK3N0YXRp YyBjb25zdCB1dWlkX3QgUUNPTV9FWFRfVVVJRCA9Cj4+ICvCoMKgwqAgVVVJRF9JTklUKDB4MTli ZDU0YmQsIDB4MGIzNywgMHg1NzFiLCAweDk0LCAweDZmLCAweDYwLCAweDliLCAKPj4gMHg1NCwg MHg1MywgMHg5ZCwgMHhlNik7Cj4+ICsKPj4gKyNkZWZpbmUgR0hfUUNPTV9FWFRfQ0FMTF9VVUlE X0lEICAgIAo+PiBBUk1fU01DQ0NfQ0FMTF9WQUwoQVJNX1NNQ0NDX0ZBU1RfQ0FMTCwgQVJNX1NN Q0NDX1NNQ18zMiwgXAo+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgIEFSTV9TTUNDQ19PV05FUl9WRU5ET1JfSFlQLCAweDNmMDEp Cj4+ICsKPj4gK3N0YXRpYyBib29sIGdoX2hhc19xY29tX2V4dGVuc2lvbnModm9pZCkKPj4gK3sK Pj4gK8KgwqDCoCBzdHJ1Y3QgYXJtX3NtY2NjX3JlcyByZXM7Cj4+ICvCoMKgwqAgdXVpZF90IHV1 aWQ7Cj4+ICsKPj4gK8KgwqDCoCBhcm1fc21jY2NfMV8xX3NtYyhHSF9RQ09NX0VYVF9DQUxMX1VV SURfSUQsICZyZXMpOwo+PiArCj4+ICvCoMKgwqAgKCh1MzIgKikmdXVpZC5iWzBdKVswXSA9IGxv d2VyXzMyX2JpdHMocmVzLmEwKTsKPj4gK8KgwqDCoCAoKHUzMiAqKSZ1dWlkLmJbMF0pWzFdID0g bG93ZXJfMzJfYml0cyhyZXMuYTEpOwo+PiArwqDCoMKgICgodTMyICopJnV1aWQuYlswXSlbMl0g PSBsb3dlcl8zMl9iaXRzKHJlcy5hMik7Cj4+ICvCoMKgwqAgKCh1MzIgKikmdXVpZC5iWzBdKVsz XSA9IGxvd2VyXzMyX2JpdHMocmVzLmEzKTsKPiAKPiBJIHNhaWQgdGhpcyBlbHNld2hlcmUuwqAg SSdkIHJhdGhlciBzZWU6Cj4gCj4gIMKgwqDCoMKgdTMyICp1ID0gKHUzMiAqKSZ1dWlkO8KgwqDC oMKgwqDCoMKgIC8qIE9yICZ1dWlkLmI/ICovCj4gCj4gIMKgwqDCoMKgKnUrKyA9IGxvd2VyXzMy X2JpdHMocmVzLmEwKTsKPiAgwqDCoMKgwqDCoMKgwqAgLiAuIC4KPiAKPj4gKwo+PiArwqDCoMKg IHJldHVybiB1dWlkX2VxdWFsKCZ1dWlkLCAmUUNPTV9FWFRfVVVJRCk7Cj4+ICt9Cj4+ICsKPj4g K3N0YXRpYyBpbnQgX19pbml0IHFjb21fZ2hfcGxhdGZvcm1faG9va3NfcmVnaXN0ZXIodm9pZCkK Pj4gK3sKPj4gK8KgwqDCoCBpZiAoIWdoX2hhc19xY29tX2V4dGVuc2lvbnMoKSkKPj4gK8KgwqDC oMKgwqDCoMKgIHJldHVybiAtRU5PREVWOwo+PiArCj4+ICvCoMKgwqAgcmV0dXJuIGdoX3JtX3Jl Z2lzdGVyX3BsYXRmb3JtX29wcygmcWNvbV9zY21fZ2hfcm1fcGxhdGZvcm1fb3BzKTsKPj4gK30K Pj4gKwo+PiArc3RhdGljIHZvaWQgX19leGl0IHFjb21fZ2hfcGxhdGZvcm1faG9va3NfdW5yZWdp c3Rlcih2b2lkKQo+PiArewo+PiArwqDCoMKgIGdoX3JtX3VucmVnaXN0ZXJfcGxhdGZvcm1fb3Bz KCZxY29tX3NjbV9naF9ybV9wbGF0Zm9ybV9vcHMpOwo+PiArfQo+PiArCj4+ICttb2R1bGVfaW5p dChxY29tX2doX3BsYXRmb3JtX2hvb2tzX3JlZ2lzdGVyKTsKPj4gK21vZHVsZV9leGl0KHFjb21f Z2hfcGxhdGZvcm1faG9va3NfdW5yZWdpc3Rlcik7Cj4+ICtNT0RVTEVfREVTQ1JJUFRJT04oIlF1 YWxjb21tIFRlY2hub2xvZ2llcywgSW5jLiBQbGF0Zm9ybSBIb29rcyBmb3IgCj4+IEd1bnlhaCIp Owo+PiArTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOwo+IAoKX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX18KbGludXgtYXJtLWtlcm5lbCBtYWlsaW5nIGxpc3QKbGlu dXgtYXJtLWtlcm5lbEBsaXN0cy5pbmZyYWRlYWQub3JnCmh0dHA6Ly9saXN0cy5pbmZyYWRlYWQu b3JnL21haWxtYW4vbGlzdGluZm8vbGludXgtYXJtLWtlcm5lbAo=