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 2E0ABC76188 for ; Mon, 3 Apr 2023 21:11:25 +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=E1l+hOH0uPRcBc9Uuu1QM3YQtxU1MkHtCCRT9qCzvUs=; b=xQ+HgI9ho/0kD9 iSv+LidO2G+fK/cBwuxQK/mPGFyCk4LnmqybUG/s29UJGCB8wAmLQai9eu2o17TwRgznkq7WrFTik HAWUd+Ph39JrKtfpywV688/ZuY6w9YJZrCpC/logs3CRNu4K/Fm7M6l1L8s26EArbpBJ2pGj9Ev5+ Q7JtywPgwDLbUET5/W4qOQC56nNYnLO/7uFw64yFhrptbo0JDhJBMyAD3p1N9yfjpj8TTKqCV6nAx 8lwLgzq512maIW4G9MH26o+BAwRs4uQ/DjHfWuy4o9RmCrHsZV1/ETir3RnMlJLEYkqXj+VARQ72c VmqIUoQzCKzFGMaTbfWA==; Received: from localhost ([::1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.96 #2 (Red Hat Linux)) id 1pjRRV-00GpHc-12; Mon, 03 Apr 2023 21:10:21 +0000 Received: from mx0b-0031df01.pphosted.com ([205.220.180.131]) by bombadil.infradead.org with esmtps (Exim 4.96 #2 (Red Hat Linux)) id 1pjRRQ-00GpGB-1v for linux-arm-kernel@lists.infradead.org; Mon, 03 Apr 2023 21:10:19 +0000 Received: from pps.filterd (m0279871.ppops.net [127.0.0.1]) by mx0a-0031df01.pphosted.com (8.17.1.19/8.17.1.19) with ESMTP id 3339l7lC010610; Mon, 3 Apr 2023 21:10:03 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=ehEyjXswBydN/s0s3YRYQqQXILWQyu/h5ZQHCJkbCDE=; b=Z38u89EF7tLlIuhCxmMnTxc2N1DeLkMYq3vCP7uh0MWZYfncea4TDFgo4wlJtPmp/t0G hD61kW7jZsZNPvCXt0zIojahqOxj3c574/plJvXRFt/pyUbbha31ItU+jTPkVxws7A5p U1cD9pB4SeqPbt/5u4nAxDLlN3lIDukt6BSuPFC39yajA/95kuSTJbda0dKvZl7nUwTQ ELUMTpuqPd77GbUyt79SWpsPbn/2pRkST5CtPuyQBO573jnpD5ei2/r5StdkLy+2qdK0 JsygFGKldR0mRJwKVjjuYGEQiCHWkrdLzH5H67o/1+WXHsMFucSMKsjP/pVqqZcAnAwN zw== Received: from nasanppmta01.qualcomm.com (i-global254.qualcomm.com [199.106.103.254]) by mx0a-0031df01.pphosted.com (PPS) with ESMTPS id 3pqtdn9vfm-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=NOT); Mon, 03 Apr 2023 21:10:03 +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 333LA2bw009184 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=NOT); Mon, 3 Apr 2023 21:10:02 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; Mon, 3 Apr 2023 14:09:59 -0700 Message-ID: Date: Mon, 3 Apr 2023 14:09:58 -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 v11 09/26] gunyah: rsc_mgr: Add VM lifecycle RPC 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: <20230304010632.2127470-1-quic_eberman@quicinc.com> <20230304010632.2127470-10-quic_eberman@quicinc.com> <558f3d62-ac07-49e7-d496-d14c5a90d3ff@linaro.org> From: Elliot Berman In-Reply-To: <558f3d62-ac07-49e7-d496-d14c5a90d3ff@linaro.org> X-Originating-IP: [10.80.80.8] X-ClientProxiedBy: nasanex01b.na.qualcomm.com (10.46.141.250) 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: LDp2dO9NNDaEA06CbUHLoSvv__LuvdXp X-Proofpoint-GUID: LDp2dO9NNDaEA06CbUHLoSvv__LuvdXp X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.254,Aquarius:18.0.942,Hydra:6.0.573,FMLib:17.11.170.22 definitions=2023-04-03_16,2023-04-03_03,2023-02-09_01 X-Proofpoint-Spam-Details: rule=outbound_notspam policy=outbound score=0 clxscore=1015 impostorscore=0 mlxscore=0 mlxlogscore=999 lowpriorityscore=0 spamscore=0 malwarescore=0 adultscore=0 bulkscore=0 phishscore=0 priorityscore=1501 suspectscore=0 classifier=spam adjust=0 reason=mlx scancount=1 engine=8.12.0-2303200000 definitions=main-2304030165 X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20230403_141016_788920_46D3BAF8 X-CRM114-Status: GOOD ( 46.60 ) 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 CgpPbiAzLzMxLzIwMjMgNzoyNSBBTSwgQWxleCBFbGRlciB3cm90ZToKPiBPbiAzLzMvMjMgNzow NiBQTSwgRWxsaW90IEJlcm1hbiB3cm90ZToKPj4gQWRkIEd1bnlhaCBSZXNvdXJjZSBNYW5hZ2Vy IFJQQyB0byBsYXVuY2ggYW4gdW5hdXRoZW50aWNhdGVkIFZNLgo+Pgo+PiBTaWduZWQtb2ZmLWJ5 OiBFbGxpb3QgQmVybWFuIDxxdWljX2ViZXJtYW5AcXVpY2luYy5jb20+Cj4gCj4gU2V2ZXJhbCBj b21tZW50cywgbm8gbWFqb3IgaXNzdWVzIGhlcmUuwqDCoMKgIC1BbGV4Cj4gCj4+IC0tLQo+PiDC oCBkcml2ZXJzL3ZpcnQvZ3VueWFoL01ha2VmaWxlwqDCoMKgwqDCoCB8wqDCoCAyICstCj4+IMKg IGRyaXZlcnMvdmlydC9ndW55YWgvcnNjX21ncl9ycGMuYyB8IDI2MCArKysrKysrKysrKysrKysr KysrKysrKysrKysrKysKPj4gwqAgaW5jbHVkZS9saW51eC9ndW55YWhfcnNjX21nci5owqDCoMKg IHzCoCA3MyArKysrKysrKysKPj4gwqAgMyBmaWxlcyBjaGFuZ2VkLCAzMzQgaW5zZXJ0aW9ucygr KSwgMSBkZWxldGlvbigtKQo+PiDCoCBjcmVhdGUgbW9kZSAxMDA2NDQgZHJpdmVycy92aXJ0L2d1 bnlhaC9yc2NfbWdyX3JwYy5jCj4+Cj4+IGRpZmYgLS1naXQgYS9kcml2ZXJzL3ZpcnQvZ3VueWFo L01ha2VmaWxlIGIvZHJpdmVycy92aXJ0L2d1bnlhaC9NYWtlZmlsZQo+PiBpbmRleCBjYzg2NGZm NWFiYmIuLmRlMjk3NjlmMmYzZiAxMDA2NDQKPj4gLS0tIGEvZHJpdmVycy92aXJ0L2d1bnlhaC9N YWtlZmlsZQo+PiArKysgYi9kcml2ZXJzL3ZpcnQvZ3VueWFoL01ha2VmaWxlCj4+IEBAIC0yLDUg KzIsNSBAQAo+PiDCoCBvYmotJChDT05GSUdfR1VOWUFIKSArPSBndW55YWgubwo+PiAtZ3VueWFo X3JzY19tZ3IteSArPSByc2NfbWdyLm8KPj4gK2d1bnlhaF9yc2NfbWdyLXkgKz0gcnNjX21nci5v IHJzY19tZ3JfcnBjLm8KPj4gwqAgb2JqLSQoQ09ORklHX0dVTllBSCkgKz0gZ3VueWFoX3JzY19t Z3Iubwo+PiBkaWZmIC0tZ2l0IGEvZHJpdmVycy92aXJ0L2d1bnlhaC9yc2NfbWdyX3JwYy5jIAo+ PiBiL2RyaXZlcnMvdmlydC9ndW55YWgvcnNjX21ncl9ycGMuYwo+PiBuZXcgZmlsZSBtb2RlIDEw MDY0NAo+PiBpbmRleCAwMDAwMDAwMDAwMDAuLmZmY2I4NjFhMzFiNQo+PiAtLS0gL2Rldi9udWxs Cj4+ICsrKyBiL2RyaXZlcnMvdmlydC9ndW55YWgvcnNjX21ncl9ycGMuYwo+PiBAQCAtMCwwICsx LDI2MCBAQAo+PiArLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seQo+PiAr LyoKPj4gKyAqIENvcHlyaWdodCAoYykgMjAyMi0yMDIzIFF1YWxjb21tIElubm92YXRpb24gQ2Vu dGVyLCBJbmMuIEFsbCAKPj4gcmlnaHRzIHJlc2VydmVkLgo+PiArICovCj4+ICsKPj4gKyNpbmNs dWRlIDxsaW51eC9ndW55YWhfcnNjX21nci5oPgo+PiArI2luY2x1ZGUgInJzY19tZ3IuaCIKPj4g Kwo+PiArLyogTWVzc2FnZSBJRHM6IFZNIE1hbmFnZW1lbnQgKi8KPj4gKyNkZWZpbmUgR0hfUk1f UlBDX1ZNX0FMTE9DX1ZNSUTCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIDB4NTYwMDAwMDEKPj4gKyNk ZWZpbmUgR0hfUk1fUlBDX1ZNX0RFQUxMT0NfVk1JRMKgwqDCoMKgwqDCoMKgIDB4NTYwMDAwMDIK Pj4gKyNkZWZpbmUgR0hfUk1fUlBDX1ZNX1NUQVJUwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCAweDU2 MDAwMDA0Cj4+ICsjZGVmaW5lIEdIX1JNX1JQQ19WTV9TVE9QwqDCoMKgwqDCoMKgwqDCoMKgwqDC oCAweDU2MDAwMDA1Cj4+ICsjZGVmaW5lIEdIX1JNX1JQQ19WTV9SRVNFVMKgwqDCoMKgwqDCoMKg wqDCoMKgwqAgMHg1NjAwMDAwNgo+PiArI2RlZmluZSBHSF9STV9SUENfVk1fQ09ORklHX0lNQUdF wqDCoMKgwqDCoMKgwqAgMHg1NjAwMDAwOQo+PiArI2RlZmluZSBHSF9STV9SUENfVk1fSU5JVMKg wqDCoMKgwqDCoMKgwqDCoMKgwqAgMHg1NjAwMDAwQgo+PiArI2RlZmluZSBHSF9STV9SUENfVk1f R0VUX0hZUF9SRVNPVVJDRVPCoMKgwqDCoMKgwqDCoCAweDU2MDAwMDIwCj4+ICsjZGVmaW5lIEdI X1JNX1JQQ19WTV9HRVRfVk1JRMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgMHg1NjAwMDAyNAo+PiAr Cj4+ICtzdHJ1Y3QgZ2hfcm1fdm1fY29tbW9uX3ZtaWRfcmVxIHsKPj4gK8KgwqDCoCBfX2xlMTYg dm1pZDsKPj4gK8KgwqDCoCBfX2xlMTYgX3BhZGRpbmc7Cj4+ICt9IF9fcGFja2VkOwo+PiArCj4+ ICsvKiBDYWxsOiBWTV9BTExPQyAqLwo+PiArc3RydWN0IGdoX3JtX3ZtX2FsbG9jX3ZtaWRfcmVz cCB7Cj4+ICvCoMKgwqAgX19sZTE2IHZtaWQ7Cj4+ICvCoMKgwqAgX19sZTE2IF9wYWRkaW5nOwo+ PiArfSBfX3BhY2tlZDsKPj4gKwo+PiArLyogQ2FsbDogVk1fU1RPUCAqLwo+PiArI2RlZmluZSBH SF9STV9WTV9TVE9QX0ZMQUdfRk9SQ0VfU1RPUMKgwqDCoCBCSVQoMCkKPj4gKwo+PiArI2RlZmlu ZSBHSF9STV9WTV9TVE9QX1JFQVNPTl9GT1JDRV9TVE9QwqDCoMKgwqDCoMKgwqAgMwo+PiArCj4+ ICtzdHJ1Y3QgZ2hfcm1fdm1fc3RvcF9yZXEgewo+PiArwqDCoMKgIF9fbGUxNiB2bWlkOwo+PiAr wqDCoMKgIHU4IGZsYWdzOwo+PiArwqDCoMKgIHU4IF9wYWRkaW5nOwo+PiArwqDCoMKgIF9fbGUz MiBzdG9wX3JlYXNvbjsKPj4gK30gX19wYWNrZWQ7Cj4+ICsKPj4gKy8qIENhbGw6IFZNX0NPTkZJ R19JTUFHRSAqLwo+PiArc3RydWN0IGdoX3JtX3ZtX2NvbmZpZ19pbWFnZV9yZXEgewo+PiArwqDC oMKgIF9fbGUxNiB2bWlkOwo+PiArwqDCoMKgIF9fbGUxNiBhdXRoX21lY2g7Cj4+ICvCoMKgwqAg X19sZTMyIG1lbV9oYW5kbGU7Cj4+ICvCoMKgwqAgX19sZTY0IGltYWdlX29mZnNldDsKPj4gK8Kg wqDCoCBfX2xlNjQgaW1hZ2Vfc2l6ZTsKPj4gK8KgwqDCoCBfX2xlNjQgZHRiX29mZnNldDsKPj4g K8KgwqDCoCBfX2xlNjQgZHRiX3NpemU7Cj4+ICt9IF9fcGFja2VkOwo+PiArCj4+ICsvKgo+PiAr ICogU2V2ZXJhbCBSTSBjYWxscyB0YWtlIG9ubHkgYSBWTUlEIGFzIGEgcGFyYW1ldGVyIGFuZCBn aXZlIG9ubHkgCj4+IHN0YW5kYXJkCj4+ICsgKiByZXNwb25zZSBiYWNrLiBEZWR1cGxpY2F0ZSBi b2lsZXJwbGF0ZSBjb2RlIGJ5IHVzaW5nIHRoaXMgY29tbW9uIAo+PiBjYWxsLgo+PiArICovCj4+ ICtzdGF0aWMgaW50IGdoX3JtX2NvbW1vbl92bWlkX2NhbGwoc3RydWN0IGdoX3JtICpybSwgdTMy IG1lc3NhZ2VfaWQsIAo+PiB1MTYgdm1pZCkKPj4gK3sKPj4gK8KgwqDCoCBzdHJ1Y3QgZ2hfcm1f dm1fY29tbW9uX3ZtaWRfcmVxIHJlcV9wYXlsb2FkID0gewo+PiArwqDCoMKgwqDCoMKgwqAgLnZt aWQgPSBjcHVfdG9fbGUxNih2bWlkKSwKPj4gK8KgwqDCoCB9Owo+PiArCj4+ICvCoMKgwqAgcmV0 dXJuIGdoX3JtX2NhbGwocm0sIG1lc3NhZ2VfaWQsICZyZXFfcGF5bG9hZCwgCj4+IHNpemVvZihy ZXFfcGF5bG9hZCksIE5VTEwsIE5VTEwpOwo+PiArfQo+PiArCj4+ICsvKioKPj4gKyAqIGdoX3Jt X2FsbG9jX3ZtaWQoKSAtIEFsbG9jYXRlIGEgbmV3IFZNIGluIEd1bnlhaC4gUmV0dXJucyB0aGUg Vk0gCj4+IGlkZW50aWZpZXIuCj4+ICsgKiBAcm06IEhhbmRsZSB0byBhIEd1bnlhaCByZXNvdXJj ZSBtYW5hZ2VyCj4+ICsgKiBAdm1pZDogVXNlIDAgdG8gZHluYW1pY2FsbHkgYWxsb2NhdGUgYSBW TS4gQSByZXNlcnZlZCBWTUlEIGNhbiBiZSAKPj4gc3VwcGxpZWQKPj4gKyAqwqDCoMKgwqDCoMKg wqAgdG8gcmVxdWVzdCBhbGxvY2F0aW9uIG9mIGEgcGxhdGZvcm0tZGVmaW5lZCBWTS4KPj4gKyAq Cj4+ICsgKiBSZXR1cm5zIC0gdGhlIGFsbG9jYXRlZCBWTUlEIG9yIG5lZ2F0aXZlIHZhbHVlIG9u IGVycm9yCj4+ICsgKi8KPj4gK2ludCBnaF9ybV9hbGxvY192bWlkKHN0cnVjdCBnaF9ybSAqcm0s IHUxNiB2bWlkKQo+PiArewo+PiArwqDCoMKgIHN0cnVjdCBnaF9ybV92bV9jb21tb25fdm1pZF9y ZXEgcmVxX3BheWxvYWQgPSB7Cj4+ICvCoMKgwqDCoMKgwqDCoCAudm1pZCA9IHZtaWQsCj4+ICvC oMKgwqAgfTsKPj4gK8KgwqDCoCBzdHJ1Y3QgZ2hfcm1fdm1fYWxsb2Nfdm1pZF9yZXNwICpyZXNw X3BheWxvYWQ7Cj4+ICvCoMKgwqAgc2l6ZV90IHJlc3Bfc2l6ZTsKPj4gK8KgwqDCoCB2b2lkICpy ZXNwOwo+PiArwqDCoMKgIGludCByZXQ7Cj4+ICsKPj4gK8KgwqDCoCByZXQgPSBnaF9ybV9jYWxs KHJtLCBHSF9STV9SUENfVk1fQUxMT0NfVk1JRCwgJnJlcV9wYXlsb2FkLCAKPj4gc2l6ZW9mKHJl cV9wYXlsb2FkKSwgJnJlc3AsCj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgICZyZXNwX3NpemUp Owo+PiArwqDCoMKgIGlmIChyZXQpCj4+ICvCoMKgwqDCoMKgwqDCoCByZXR1cm4gcmV0Owo+PiAr Cj4+ICvCoMKgwqAgaWYgKCF2bWlkKSB7Cj4+ICvCoMKgwqDCoMKgwqDCoCByZXNwX3BheWxvYWQg PSByZXNwOwo+PiArwqDCoMKgwqDCoMKgwqAgcmV0ID0gbGUxNl90b19jcHUocmVzcF9wYXlsb2Fk LT52bWlkKTsKPj4gK8KgwqDCoMKgwqDCoMKgIGtmcmVlKHJlc3ApOwo+PiArwqDCoMKgIH0KPj4g Kwo+PiArwqDCoMKgIHJldHVybiByZXQ7Cj4+ICt9Cj4+ICsKPj4gKy8qKgo+PiArICogZ2hfcm1f ZGVhbGxvY192bWlkKCkgLSBEaXNwb3NlIHRoZSBWTUlECj4gCj4gcy90aGUvb2YgYS8KPiAKPj4g KyAqIEBybTogSGFuZGxlIHRvIGEgR3VueWFoIHJlc291cmNlIG1hbmFnZXIKPj4gKyAqIEB2bWlk OiBWTSBpZGVudGlmaWVyIGFsbG9jYXRlZCB3aXRoIGdoX3JtX2FsbG9jX3ZtaWQKPj4gKyAqLwo+ PiAraW50IGdoX3JtX2RlYWxsb2Nfdm1pZChzdHJ1Y3QgZ2hfcm0gKnJtLCB1MTYgdm1pZCkKPj4g K3sKPj4gK8KgwqDCoCByZXR1cm4gZ2hfcm1fY29tbW9uX3ZtaWRfY2FsbChybSwgR0hfUk1fUlBD X1ZNX0RFQUxMT0NfVk1JRCwgdm1pZCk7Cj4+ICt9Cj4+ICsKPj4gKy8qKgo+PiArICogZ2hfcm1f dm1fcmVzZXQoKSAtIFJlc2V0IHRoZSBWTSdzIHJlc291cmNlcwo+PiArICogQHJtOiBIYW5kbGUg dG8gYSBHdW55YWggcmVzb3VyY2UgbWFuYWdlcgo+PiArICogQHZtaWQ6IFZNIGlkZW50aWZpZXIg YWxsb2NhdGVkIHdpdGggZ2hfcm1fYWxsb2Nfdm1pZAo+PiArICoKPj4gKyAqIFdoaWxlIHRlYXJp bmcgZG93biB0aGUgVk0sIHJlcXVlc3QgUk0gdG8gY2xlYW4gdXAgYWxsIHRoZSBWTSAKPj4gcmVz b3VyY2VzCj4gCj4gcy9XaGlsZS9BcyBwYXJ0IG9mLwo+IAo+PiArICogYXNzb2NpYXRlZCB3aXRo IHRoZSBWTS4gT25seSBhZnRlciB0aGlzLCBMaW51eCBjYW4gY2xlYW4gdXAgYWxsIHRoZQo+PiAr ICogcmVmZXJlbmNlcyBpdCBtYWludGFpbnMgdG8gcmVzb3VyY2VzLgo+PiArICovCj4+ICtpbnQg Z2hfcm1fdm1fcmVzZXQoc3RydWN0IGdoX3JtICpybSwgdTE2IHZtaWQpCj4+ICt7Cj4+ICvCoMKg wqAgcmV0dXJuIGdoX3JtX2NvbW1vbl92bWlkX2NhbGwocm0sIEdIX1JNX1JQQ19WTV9SRVNFVCwg dm1pZCk7Cj4+ICt9Cj4+ICsKPj4gKy8qKgo+PiArICogZ2hfcm1fdm1fc3RhcnQoKSAtIE1vdmUg dGhlIFZNIGludG8gInJlYWR5IHRvIHJ1biIgc3RhdGUKPj4gKyAqIEBybTogSGFuZGxlIHRvIGEg R3VueWFoIHJlc291cmNlIG1hbmFnZXIKPj4gKyAqIEB2bWlkOiBWTSBpZGVudGlmaWVyIGFsbG9j YXRlZCB3aXRoIGdoX3JtX2FsbG9jX3ZtaWQKPj4gKyAqCj4+ICsgKiBPbiBWTXMgd2hpY2ggdXNl IHByb3h5IHNjaGVkdWxpbmcsIHZjcHVfcnVuIGlzIG5lZWRlZCB0byBhY3R1YWxseSAKPj4gcnVu IHRoZSBWTS4KPj4gKyAqIE9uIFZNcyB3aGljaCB1c2UgR3VueWFoJ3Mgc2NoZWR1bGluZywgdGhl IHZDUFVzIHN0YXJ0IGV4ZWN1dGluZyBpbiAKPj4gYWNjb3JkYW5jZSB3aXRoIEd1bnlhaAo+PiAr ICogc2NoZWR1bGluZyBwb2xpY2llcy4KPj4gKyAqLwo+PiAraW50IGdoX3JtX3ZtX3N0YXJ0KHN0 cnVjdCBnaF9ybSAqcm0sIHUxNiB2bWlkKQo+PiArewo+PiArwqDCoMKgIHJldHVybiBnaF9ybV9j b21tb25fdm1pZF9jYWxsKHJtLCBHSF9STV9SUENfVk1fU1RBUlQsIHZtaWQpOwo+PiArfQo+PiAr Cj4+ICsvKioKPj4gKyAqIGdoX3JtX3ZtX3N0b3AoKSAtIFNlbmQgYSByZXF1ZXN0IHRvIFJlc291 cmNlIE1hbmFnZXIgVk0gdG8gCj4+IGZvcmNpYmx5IHN0b3AgYSBWTS4KPj4gKyAqIEBybTogSGFu ZGxlIHRvIGEgR3VueWFoIHJlc291cmNlIG1hbmFnZXIKPj4gKyAqIEB2bWlkOiBWTSBpZGVudGlm aWVyIGFsbG9jYXRlZCB3aXRoIGdoX3JtX2FsbG9jX3ZtaWQKPj4gKyAqLwo+PiAraW50IGdoX3Jt X3ZtX3N0b3Aoc3RydWN0IGdoX3JtICpybSwgdTE2IHZtaWQpCj4+ICt7Cj4+ICvCoMKgwqAgc3Ry dWN0IGdoX3JtX3ZtX3N0b3BfcmVxIHJlcV9wYXlsb2FkID0gewo+PiArwqDCoMKgwqDCoMKgwqAg LnZtaWQgPSBjcHVfdG9fbGUxNih2bWlkKSwKPj4gK8KgwqDCoMKgwqDCoMKgIC5mbGFncyA9IEdI X1JNX1ZNX1NUT1BfRkxBR19GT1JDRV9TVE9QLAo+PiArwqDCoMKgwqDCoMKgwqAgLnN0b3BfcmVh c29uID0gY3B1X3RvX2xlMzIoR0hfUk1fVk1fU1RPUF9SRUFTT05fRk9SQ0VfU1RPUCksCj4+ICvC oMKgwqAgfTsKPj4gKwo+PiArwqDCoMKgIHJldHVybiBnaF9ybV9jYWxsKHJtLCBHSF9STV9SUENf Vk1fU1RPUCwgJnJlcV9wYXlsb2FkLCAKPj4gc2l6ZW9mKHJlcV9wYXlsb2FkKSwgTlVMTCwgTlVM TCk7Cj4+ICt9Cj4+ICsKPj4gKy8qKgo+PiArICogZ2hfcm1fdm1fY29uZmlndXJlKCkgLSBQcmVw YXJlIGEgVk0gdG8gc3RhcnQgYW5kIHByb3ZpZGUgdGhlIGNvbW1vbgo+PiArICrCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoCBjb25maWd1cmF0aW9uIG5lZWRlZCBieSBSTSB0byBjb25maWd1cmUg YSBWTQo+PiArICogQHJtOiBIYW5kbGUgdG8gYSBHdW55YWggcmVzb3VyY2UgbWFuYWdlcgo+PiAr ICogQHZtaWQ6IFZNIGlkZW50aWZpZXIgYWxsb2NhdGVkIHdpdGggZ2hfcm1fYWxsb2Nfdm1pZAo+ PiArICogQGF1dGhfbWVjaGFuaXNtOiBBdXRoZW50aWNhdGlvbiBtZWNoYW5pc20gdXNlZCBieSBy ZXNvdXJjZSBtYW5hZ2VyIAo+PiB0byB2ZXJpZnkKPj4gKyAqwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoCB0aGUgdmlydHVhbCBtYWNoaW5lCj4+ICsgKiBAbWVtX2hhbmRsZTogSGFu ZGxlIHRvIGEgcHJldmlvdXNseSBzaGFyZWQgbWVtcGFyY2VsIHRoYXQgY29udGFpbnMgCj4+IGFs bCBwYXJ0cwo+PiArICrCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBvZiB0aGUgVk0gaW1hZ2Ug c3ViamVjdCB0byBhdXRoZW50aWNhdGlvbi4KPj4gKyAqIEBpbWFnZV9vZmZzZXQ6IFN0YXJ0IGFk ZHJlc3Mgb2YgVk0gaW1hZ2UsIHJlbGF0aXZlIHRvIHRoZSBzdGFydCBvZiAKPj4gbWVtcGFyY2Vs Cj4+ICsgKiBAaW1hZ2Vfc2l6ZTogU2l6ZSBvZiB0aGUgVk0gaW1hZ2UKPj4gKyAqIEBkdGJfb2Zm c2V0OiBTdGFydCBhZGRyZXNzIG9mIHRoZSBkZXZpY2V0cmVlIGJpbmFyeSB3aXRoIFZNIAo+PiBj b25maWd1cmF0aW9uLAo+PiArICrCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCByZWxhdGl2ZSB0 byBzdGFydCBvZiBtZW1wYXJjZWwuCj4+ICsgKiBAZHRiX3NpemU6IE1heGltdW0gc2l6ZSBvZiBk ZXZpY2V0cmVlIGJpbmFyeS4gUmVzb3VyY2UgbWFuYWdlciAKPj4gYXBwbGllcwo+PiArICrCoMKg wqDCoMKgwqDCoMKgwqDCoMKgIGFuIG92ZXJsYXkgdG8gdGhlIERUQiBhbmQgZHRiX3NpemUgc2hv dWxkIGluY2x1ZGUgcm9vbSBmb3IKPj4gKyAqwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCB0aGUgb3Zl cmxheS4KPiAKPiBUaGUgYWJvdmUgY29tbWVudCBhYm91dCBpbmNsdWRpbmcgZXh0cmEgcm9vbSBk b2Vzbid0IHNpdCB3ZWxsLgo+IEhvdyBtdWNoIGV4dHJhIHJvb20gaXMgcmVxdWlyZWQ/wqAgSXMg dGhlcmUgYW55IHdheSB5b3UgY2FuCj4gcHJvdmlkZSBhbiBlc3RpbWF0ZT/CoCBPciBiZXR0ZXIg eWV0LCBpcyBpdCBwb3NzaWJsZSB0byBoYXZlCj4gZ2hfcm1fY2FsbCgpIHNvbWVob3cgY2FsY3Vs YXRlIHRoYXQgZXh0cmEgYW1vdW50IGFuZCBhZGQgaXQgb24/Cj4gCgpUaGUgYW1vdW50IG9mIGV4 dHJhIHJvb20gdGhhdCdzIHJlcXVpcmVkIGlzIHBhcnRpYWxseSBkZXBlbmRlbnQgb24gdGhlIApu dW1iZXIgb2YgR3VueWFoIHJlc291cmNlcyB0aGUgVk0gY3JlYXRlcy4gSW4gcHJhY3RpY2UsIHVz dWFsbHkgdGhlIAptZW1vcnkgbWFwIHdpbGwgY2FydmUgb3V0IGxhcmdlIGFtb3VudCBvZiBtZW1v cnkgYW5kIERUIGlzIG11Y2ggc21hbGxlciAKdGhhbiB0aGF0LiBDcm9zdm0gY2FydmVzIG91dCAy TWlCOyBRdWFsY29tbSBkZXZpY2VzIChib290bG9hZGVyKSB1c3VhbGx5IApjYXJ2ZSBvdXQgMiBN aUIgYXMgd2VsbC4gV2hlbiB0ZWxsaW5nIFJNIGFib3V0IHRoZSBEVCwgeW91IHNob3VsZCB0ZWxs IApSTSBhYm91dCB0aGUgd2hvbGUgMk1pQiwgbm90IHNpemUgb2YgdGhlIGFjdHVhbCBkZXZpY2V0 cmVlIGJsb2IuCgpJIHJlYWxpemUgbm93IHRoaXMgZG9jdW1lbnRhdGlvbiBpcyBtb3JlIFVBUEkg ZmFjaW5nIHRoYW4gZm9yIGludGVybmFsIAprZXJuZWwgQVBJLiBJJ2xsIG1vdmUgdGhpcyBkb2N1 bWVudGF0aW9uIG92ZXIgdGhlcmUgYXMgd2VsbC4KCj4+ICsgKi8KPj4gK2ludCBnaF9ybV92bV9j b25maWd1cmUoc3RydWN0IGdoX3JtICpybSwgdTE2IHZtaWQsIGVudW0gCj4+IGdoX3JtX3ZtX2F1 dGhfbWVjaGFuaXNtIGF1dGhfbWVjaGFuaXNtLAo+PiArwqDCoMKgwqDCoMKgwqAgdTMyIG1lbV9o YW5kbGUsIHU2NCBpbWFnZV9vZmZzZXQsIHU2NCBpbWFnZV9zaXplLCB1NjQgCj4+IGR0Yl9vZmZz ZXQsIHU2NCBkdGJfc2l6ZSkKPiAKPiAgRnJvbSB3aGF0IEkgY2FuIHRlbGwsIHRoZSBhdXRoIGFy Z3VtZW50IChhbmQgZ2VuZXJhbGx5LCBnaHZtLT5hdXRoKQo+IGlzIG5ldmVyIHVzZWQuwqAgSWYg dGhhdCdzIHRoZSBjYXNlLCBpdCBtaWdodCBiZSBuaWNlciB0byBleHBsaWNpdGx5Cj4gbm90IGlu Y2x1ZGVkIGl0IGZvciBub3csIGFuZCBvbmx5IGFkZCBpdCB3aGVuIGl0J3MgZ29pbmcgdG8gYmUg dXNlZAo+IChhbmQgdGVzdGVkIHRvIHdvcmsgY29ycmVjdGx5KS4KPiAKPiBJIGRvbid0IGtub3cg aWYgdGhpcyBpcyBhIHJlYXNvbmFibGUgc3RyYXRlZ3ksIGJ1dCBJJ20gYWx3YXlzIGEKPiBsaXR0 bGUgc2tlcHRpY2FsIGFib3V0IHVudXNlZCBjb2RlIGxpa2UgdGhpcy4KPiAKCkkgZG9uJ3QgaGF2 ZSBhbnkgdGVjaG5pY2FsIHJlYXNvbnMgdG8ga2VlcCBpdCBhbmQgSSBjb3VsZCBtb3ZlIHRoZSAK aGFyZC1jb2RlZCBhdXRoIHR5cGUgaGVyZS4gSSB0aG91Z2h0IGl0IHdvdWxkIGJlc3QgdG8ga2Vl cCB0aGUgCmFzc3VtcHRpb24gaW4gVk0gbWFuYWdlciBhbmQgbm90IGluIHRoZSBSUEMuCgo+PiAr ewo+PiArwqDCoMKgIHN0cnVjdCBnaF9ybV92bV9jb25maWdfaW1hZ2VfcmVxIHJlcV9wYXlsb2Fk ID0gewo+PiArwqDCoMKgwqDCoMKgwqAgLnZtaWQgPSBjcHVfdG9fbGUxNih2bWlkKSwKPj4gK8Kg wqDCoMKgwqDCoMKgIC5hdXRoX21lY2ggPSBjcHVfdG9fbGUxNihhdXRoX21lY2hhbmlzbSksCj4+ ICvCoMKgwqDCoMKgwqDCoCAubWVtX2hhbmRsZSA9IGNwdV90b19sZTMyKG1lbV9oYW5kbGUpLAo+ PiArwqDCoMKgwqDCoMKgwqAgLmltYWdlX29mZnNldCA9IGNwdV90b19sZTY0KGltYWdlX29mZnNl dCksCj4+ICvCoMKgwqDCoMKgwqDCoCAuaW1hZ2Vfc2l6ZSA9IGNwdV90b19sZTY0KGltYWdlX3Np emUpLAo+PiArwqDCoMKgwqDCoMKgwqAgLmR0Yl9vZmZzZXQgPSBjcHVfdG9fbGU2NChkdGJfb2Zm c2V0KSwKPj4gK8KgwqDCoMKgwqDCoMKgIC5kdGJfc2l6ZSA9IGNwdV90b19sZTY0KGR0Yl9zaXpl KSwKPj4gK8KgwqDCoCB9Owo+PiArCj4gCj4gQXJlIHRoZXJlIGFueSBzYW5pdHkgY2hlY2tzIHRo YXQgY291bGQgYmUgcGVyZm9ybWVkIGJlZm9yZSB3ZQo+IGFjdHVhbGx5IG1ha2UgdGhlIGNhbGwg dG8gdGhlIHJlc291cmNlIG1hbmFnZXI/wqAgTGlrZSwgY2FuCj4geW91IGVuc3VyZSB0aGUgRFRC IG9mZnNldCBhbmQgc2l6ZSBhcmUgaW4gcmFuZ2U/Cj4gCgpUaGUgIlZNIE1hbmFnZXIiIHdpbGwg cGVyZm9ybSB0aG9zZSBjaGVja3MsIGFzIGRvZXMgUmVzb3VyY2UgTWFuYWdlci4gQXQgCnRoZSBS UEMgbGF5ZXIsIHdlIGRvbid0IGtub3cgdGhlIHNpemUgb2YgdGhlIG1lbW9yeSBwYXJjZWwgc28g d2UgZG9uJ3QgCmhhdmUgYSByYW5nZSB0byByZWZlcmVuY2UuCgo+PiArwqDCoMKgIHJldHVybiBn aF9ybV9jYWxsKHJtLCBHSF9STV9SUENfVk1fQ09ORklHX0lNQUdFLCAmcmVxX3BheWxvYWQsIAo+ PiBzaXplb2YocmVxX3BheWxvYWQpLAo+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgTlVM TCwgTlVMTCk7Cj4+ICt9Cj4+ICsKPj4gKy8qKgo+PiArICogZ2hfcm1fdm1faW5pdCgpIC0gTW92 ZSB0aGUgVk0gdG8gaW5pdGlhbGl6ZWQgc3RhdGUuCj4gCj4gcy90aGUvYS8KPiAKPj4gKyAqIEBy bTogSGFuZGxlIHRvIGEgR3VueWFoIHJlc291cmNlIG1hbmFnZXIKPj4gKyAqIEB2bWlkOiBWTSBp ZGVudGlmaWVyCj4+ICsgKgo+PiArICogUk0gd2lsbCBhbGxvY2F0ZSBuZWVkZWQgcmVzb3VyY2Vz IGZvciB0aGUgVk0uCj4+ICsgKi8KPj4gK2ludCBnaF9ybV92bV9pbml0KHN0cnVjdCBnaF9ybSAq cm0sIHUxNiB2bWlkKQo+PiArewo+PiArwqDCoMKgIHJldHVybiBnaF9ybV9jb21tb25fdm1pZF9j YWxsKHJtLCBHSF9STV9SUENfVk1fSU5JVCwgdm1pZCk7Cj4+ICt9Cj4+ICsKPj4gKy8qKgo+PiAr ICogZ2hfcm1fZ2V0X2h5cF9yZXNvdXJjZXMoKSAtIFJldHJpZXZlIGh5cGVydmlzb3IgcmVzb3Vy Y2VzIAo+PiAoY2FwYWJpbGl0aWVzKSBhc3NvY2lhdGVkIHdpdGggYSBWTQo+PiArICogQHJtOiBI YW5kbGUgdG8gYSBHdW55YWggcmVzb3VyY2UgbWFuYWdlcgo+PiArICogQHZtaWQ6IFZNSUQgb2Yg dGhlIG90aGVyIFZNIHRvIGdldCB0aGUgcmVzb3VyY2VzIG9mCj4+ICsgKiBAcmVzb3VyY2VzOiBT ZXQgYnkgZ2hfcm1fZ2V0X2h5cF9yZXNvdXJjZXMgYW5kIGNvbnRhaW5zIHRoZSAKPj4gcmV0dXJu ZWQgaHlwZXJ2aXNvciByZXNvdXJjZXMuCj4gCj4gQ2FsbGVyIG11c3QgZnJlZSB0aGUgcmVzb3Vy Y2VzIHBvaW50ZXIgcmV0dXJuZWQgaWYgc3VjY2Vzc2Z1bC4KPiAoUGxlYXNlIG1lbnRpb24gdGhp cy4pCj4gCj4+ICsgKi8KPj4gK2ludCBnaF9ybV9nZXRfaHlwX3Jlc291cmNlcyhzdHJ1Y3QgZ2hf cm0gKnJtLCB1MTYgdm1pZCwKPj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBzdHJ1 Y3QgZ2hfcm1faHlwX3Jlc291cmNlcyAqKnJlc291cmNlcykKPj4gK3sKPj4gK8KgwqDCoCBzdHJ1 Y3QgZ2hfcm1fdm1fY29tbW9uX3ZtaWRfcmVxIHJlcV9wYXlsb2FkID0gewo+PiArwqDCoMKgwqDC oMKgwqAgLnZtaWQgPSBjcHVfdG9fbGUxNih2bWlkKSwKPj4gK8KgwqDCoCB9Owo+PiArwqDCoMKg IHN0cnVjdCBnaF9ybV9oeXBfcmVzb3VyY2VzICpyZXNwOwo+PiArwqDCoMKgIHNpemVfdCByZXNw X3NpemU7Cj4+ICvCoMKgwqAgaW50IHJldDsKPj4gKwo+PiArwqDCoMKgIHJldCA9IGdoX3JtX2Nh bGwocm0sIEdIX1JNX1JQQ19WTV9HRVRfSFlQX1JFU09VUkNFUywKPj4gK8KgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoCAmcmVxX3BheWxvYWQsIHNpemVvZihyZXFfcGF5bG9hZCksCj4+ICvCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqAgKHZvaWQgKiopJnJlc3AsICZyZXNwX3NpemUpOwo+PiArwqDCoMKg IGlmIChyZXQpCj4+ICvCoMKgwqDCoMKgwqDCoCByZXR1cm4gcmV0Owo+PiArCj4+ICvCoMKgwqAg aWYgKCFyZXNwX3NpemUpCj4+ICvCoMKgwqDCoMKgwqDCoCByZXR1cm4gLUVCQURNU0c7Cj4+ICsK Pj4gK8KgwqDCoCBpZiAocmVzcF9zaXplIDwgc3RydWN0X3NpemUocmVzcCwgZW50cmllcywgMCkg fHwKPj4gK8KgwqDCoMKgwqDCoMKgIHJlc3Bfc2l6ZSAhPSBzdHJ1Y3Rfc2l6ZShyZXNwLCBlbnRy aWVzLCAKPj4gbGUzMl90b19jcHUocmVzcC0+bl9lbnRyaWVzKSkpIHsKPj4gK8KgwqDCoMKgwqDC oMKgIGtmcmVlKHJlc3ApOwo+PiArwqDCoMKgwqDCoMKgwqAgcmV0dXJuIC1FQkFETVNHOwo+PiAr wqDCoMKgIH0KPj4gKwo+PiArwqDCoMKgICpyZXNvdXJjZXMgPSByZXNwOwo+PiArwqDCoMKgIHJl dHVybiAwOwo+PiArfQo+PiArCj4+ICsvKioKPj4gKyAqIGdoX3JtX2dldF92bWlkKCkgLSBSZXRy aWV2ZSBWTUlEIG9mIHRoaXMgdmlydHVhbCBtYWNoaW5lCj4+ICsgKiBAcm06IEhhbmRsZSB0byBh IEd1bnlhaCByZXNvdXJjZSBtYW5hZ2VyCj4+ICsgKiBAdm1pZDogRmlsbGVkIHdpdGggdGhlIFZN SUQgb2YgdGhpcyBWTQo+PiArICovCj4+ICtpbnQgZ2hfcm1fZ2V0X3ZtaWQoc3RydWN0IGdoX3Jt ICpybSwgdTE2ICp2bWlkKQo+PiArewo+PiArwqDCoMKgIHN0YXRpYyB1MTYgY2FjaGVkX3ZtaWQg PSBHSF9WTUlEX0lOVkFMOwo+PiArwqDCoMKgIHNpemVfdCByZXNwX3NpemU7Cj4+ICvCoMKgwqAg X19sZTMyICpyZXNwOwo+PiArwqDCoMKgIGludCByZXQ7Cj4+ICsKPj4gK8KgwqDCoCBpZiAoY2Fj aGVkX3ZtaWQgIT0gR0hfVk1JRF9JTlZBTCkgewo+PiArwqDCoMKgwqDCoMKgwqAgKnZtaWQgPSBj YWNoZWRfdm1pZDsKPj4gK8KgwqDCoMKgwqDCoMKgIHJldHVybiAwOwo+PiArwqDCoMKgIH0KPj4g Kwo+PiArwqDCoMKgIHJldCA9IGdoX3JtX2NhbGwocm0sIEdIX1JNX1JQQ19WTV9HRVRfVk1JRCwg TlVMTCwgMCwgKHZvaWQgCj4+ICoqKSZyZXNwLCAmcmVzcF9zaXplKTsKPj4gK8KgwqDCoCBpZiAo cmV0KQo+PiArwqDCoMKgwqDCoMKgwqAgcmV0dXJuIHJldDsKPj4gKwo+PiArwqDCoMKgICp2bWlk ID0gY2FjaGVkX3ZtaWQgPSBsb3dlcl8xNl9iaXRzKGxlMzJfdG9fY3B1KCpyZXNwKSk7Cj4+ICvC oMKgwqAga2ZyZWUocmVzcCk7Cj4+ICsKPj4gK8KgwqDCoCByZXR1cm4gcmV0Owo+PiArfQo+PiAr RVhQT1JUX1NZTUJPTF9HUEwoZ2hfcm1fZ2V0X3ZtaWQpOwo+PiBkaWZmIC0tZ2l0IGEvaW5jbHVk ZS9saW51eC9ndW55YWhfcnNjX21nci5oIAo+PiBiL2luY2x1ZGUvbGludXgvZ3VueWFoX3JzY19t Z3IuaAo+PiBpbmRleCBkZWNhOWIzZGE1NDEuLjZhMmY0MzRlNjdmNyAxMDA2NDQKPj4gLS0tIGEv aW5jbHVkZS9saW51eC9ndW55YWhfcnNjX21nci5oCj4+ICsrKyBiL2luY2x1ZGUvbGludXgvZ3Vu eWFoX3JzY19tZ3IuaAo+PiBAQCAtMTgsNCArMTgsNzcgQEAgaW50IGdoX3JtX25vdGlmaWVyX3Vu cmVnaXN0ZXIoc3RydWN0IGdoX3JtICpybSwgCj4+IHN0cnVjdCBub3RpZmllcl9ibG9jayAqbmIp Owo+PiDCoCBzdHJ1Y3QgZGV2aWNlICpnaF9ybV9nZXQoc3RydWN0IGdoX3JtICpybSk7Cj4+IMKg IHZvaWQgZ2hfcm1fcHV0KHN0cnVjdCBnaF9ybSAqcm0pOwo+PiArc3RydWN0IGdoX3JtX3ZtX2V4 aXRlZF9wYXlsb2FkIHsKPj4gK8KgwqDCoCBfX2xlMTYgdm1pZDsKPj4gK8KgwqDCoCBfX2xlMTYg ZXhpdF90eXBlOwo+PiArwqDCoMKgIF9fbGUzMiBleGl0X3JlYXNvbl9zaXplOwo+PiArwqDCoMKg IHU4IGV4aXRfcmVhc29uW107Cj4+ICt9IF9fcGFja2VkOwo+PiArCj4+ICsjZGVmaW5lIEdIX1JN X05PVElGSUNBVElPTl9WTV9FWElURUTCoMKgwqDCoMKgwqDCoMKgIDB4NTYxMDAwMDEKPiAKPiBJ IHRoaW5rIGFsbCB0aGVzZSBub3RpZmljYXRpb24gcmVhc29ucyBzaG91bGQgYmUgZGVmaW5lZCBp bgo+IGFuIGVudW1lcmF0ZWQgdHlwZSwgdG8gZ3JvdXAgdGhlbSwgYW5kIG5hbWUgdGhlIGdyb3Vw Lgo+IAoKR3VueWFoIGRvZXNuJ3QgZW51bWVyYXRlIHRoZXNlIG1hY3Jvcy4gTGludXggY291bGQg Y3JlYXRlIGVudW0gZm9yIHRoZXNlIAptYWNyb3MsIGJ1dCBpdCdzIG5vdCByZWZlbGVjdGVkIGJ5 IHRoZSBoeXBlcnZpc29yLiBLZWVwaW5nIHRoZSBmdWxseSAKZXhwYW5kZWQgbWFjcm8gYWxzbyBt YWtlcyBpdCBlYXNpZXIgdG8gbWF0Y2ggdXAgaW4gdGhlIEd1bnlhaCBzb3VyY2UgY29kZS4KCj4+ ICsKPj4gK2VudW0gZ2hfcm1fdm1fc3RhdHVzIHsKPj4gK8KgwqDCoCBHSF9STV9WTV9TVEFUVVNf Tk9fU1RBVEXCoMKgwqAgPSAwLAo+PiArwqDCoMKgIEdIX1JNX1ZNX1NUQVRVU19JTklUwqDCoMKg wqDCoMKgwqAgPSAxLAo+PiArwqDCoMKgIEdIX1JNX1ZNX1NUQVRVU19SRUFEWcKgwqDCoMKgwqDC oMKgID0gMiwKPj4gK8KgwqDCoCBHSF9STV9WTV9TVEFUVVNfUlVOTklOR8KgwqDCoMKgwqDCoMKg ID0gMywKPj4gK8KgwqDCoCBHSF9STV9WTV9TVEFUVVNfUEFVU0VEwqDCoMKgwqDCoMKgwqAgPSA0 LAo+PiArwqDCoMKgIEdIX1JNX1ZNX1NUQVRVU19MT0FEwqDCoMKgwqDCoMKgwqAgPSA1LAo+PiAr wqDCoMKgIEdIX1JNX1ZNX1NUQVRVU19BVVRIwqDCoMKgwqDCoMKgwqAgPSA2LAo+PiArwqDCoMKg IEdIX1JNX1ZNX1NUQVRVU19JTklUX0ZBSUxFRMKgwqDCoCA9IDgsCj4+ICvCoMKgwqAgR0hfUk1f Vk1fU1RBVFVTX0VYSVRFRMKgwqDCoMKgwqDCoMKgID0gOSwKPj4gK8KgwqDCoCBHSF9STV9WTV9T VEFUVVNfUkVTRVRUSU5HwqDCoMKgID0gMTAsCj4+ICvCoMKgwqAgR0hfUk1fVk1fU1RBVFVTX1JF U0VUwqDCoMKgwqDCoMKgwqAgPSAxMSwKPj4gK307Cj4+ICsKPj4gK3N0cnVjdCBnaF9ybV92bV9z dGF0dXNfcGF5bG9hZCB7Cj4+ICvCoMKgwqAgX19sZTE2IHZtaWQ7Cj4+ICvCoMKgwqAgdTE2IHJl c2VydmVkOwo+PiArwqDCoMKgIHU4IHZtX3N0YXR1czsKPj4gK8KgwqDCoCB1OCBvc19zdGF0dXM7 Cj4+ICvCoMKgwqAgX19sZTE2IGFwcF9zdGF0dXM7Cj4+ICt9IF9fcGFja2VkOwo+PiArCj4+ICsj ZGVmaW5lIEdIX1JNX05PVElGSUNBVElPTl9WTV9TVEFUVVPCoMKgwqDCoMKgwqDCoMKgIDB4NTYx MDAwMDgKPj4gKwo+PiArLyogUlBDIENhbGxzICovCj4+ICtpbnQgZ2hfcm1fYWxsb2Nfdm1pZChz dHJ1Y3QgZ2hfcm0gKnJtLCB1MTYgdm1pZCk7Cj4+ICtpbnQgZ2hfcm1fZGVhbGxvY192bWlkKHN0 cnVjdCBnaF9ybSAqcm0sIHUxNiB2bWlkKTsKPj4gK2ludCBnaF9ybV92bV9yZXNldChzdHJ1Y3Qg Z2hfcm0gKnJtLCB1MTYgdm1pZCk7Cj4+ICtpbnQgZ2hfcm1fdm1fc3RhcnQoc3RydWN0IGdoX3Jt ICpybSwgdTE2IHZtaWQpOwo+PiAraW50IGdoX3JtX3ZtX3N0b3Aoc3RydWN0IGdoX3JtICpybSwg dTE2IHZtaWQpOwo+PiArCj4+ICtlbnVtIGdoX3JtX3ZtX2F1dGhfbWVjaGFuaXNtIHsKPj4gK8Kg wqDCoCBHSF9STV9WTV9BVVRIX05PTkXCoMKgwqDCoMKgwqDCoCA9IDAsCj4+ICvCoMKgwqAgR0hf Uk1fVk1fQVVUSF9RQ09NX1BJTF9FTEbCoMKgwqAgPSAxLAo+PiArwqDCoMKgIEdIX1JNX1ZNX0FV VEhfUUNPTV9BTkRST0lEX1BWTcKgwqDCoCA9IDIsCj4+ICt9Owo+PiArCj4+ICtpbnQgZ2hfcm1f dm1fY29uZmlndXJlKHN0cnVjdCBnaF9ybSAqcm0sIHUxNiB2bWlkLCBlbnVtIAo+PiBnaF9ybV92 bV9hdXRoX21lY2hhbmlzbSBhdXRoX21lY2hhbmlzbSwKPj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKg wqAgdTMyIG1lbV9oYW5kbGUsIHU2NCBpbWFnZV9vZmZzZXQsIHU2NCBpbWFnZV9zaXplLAo+PiAr wqDCoMKgwqDCoMKgwqDCoMKgwqDCoCB1NjQgZHRiX29mZnNldCwgdTY0IGR0Yl9zaXplKTsKPj4g K2ludCBnaF9ybV92bV9pbml0KHN0cnVjdCBnaF9ybSAqcm0sIHUxNiB2bWlkKTsKPj4gKwo+PiAr c3RydWN0IGdoX3JtX2h5cF9yZXNvdXJjZSB7Cj4+ICvCoMKgwqAgdTggdHlwZTsKPiAKPiBNYXli ZSBhZGQgYSBjb21tZW50IG9uIHRoZSBhYm92ZSBmaWVsZCwgYW5kIG90aGVycywgc3VjaCBhczoK PiAKPiAgwqDCoMKgwqB1OCB0eXBlO8KgwqDCoCAvKiBlbnVtIGdoX3Jlc291cmNlX3R5cGUgKi8K PiAKPj4gK8KgwqDCoCB1OCByZXNlcnZlZDsKPj4gK8KgwqDCoCBfX2xlMTYgcGFydG5lcl92bWlk Owo+PiArwqDCoMKgIF9fbGUzMiByZXNvdXJjZV9oYW5kbGU7Cj4+ICvCoMKgwqAgX19sZTMyIHJl c291cmNlX2xhYmVsOwo+PiArwqDCoMKgIF9fbGU2NCBjYXBfaWQ7Cj4+ICvCoMKgwqAgX19sZTMy IHZpcnFfaGFuZGxlOwo+PiArwqDCoMKgIF9fbGUzMiB2aXJxOwo+PiArwqDCoMKgIF9fbGU2NCBi YXNlOwo+PiArwqDCoMKgIF9fbGU2NCBzaXplOwo+PiArfSBfX3BhY2tlZDsKPj4gKwo+PiArc3Ry dWN0IGdoX3JtX2h5cF9yZXNvdXJjZXMgewo+PiArwqDCoMKgIF9fbGUzMiBuX2VudHJpZXM7Cj4+ ICvCoMKgwqAgc3RydWN0IGdoX3JtX2h5cF9yZXNvdXJjZSBlbnRyaWVzW107Cj4+ICt9IF9fcGFj a2VkOwo+PiArCj4+ICtpbnQgZ2hfcm1fZ2V0X2h5cF9yZXNvdXJjZXMoc3RydWN0IGdoX3JtICpy bSwgdTE2IHZtaWQsCj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgc3RydWN0IGdo X3JtX2h5cF9yZXNvdXJjZXMgKipyZXNvdXJjZXMpOwo+PiAraW50IGdoX3JtX2dldF92bWlkKHN0 cnVjdCBnaF9ybSAqcm0sIHUxNiAqdm1pZCk7Cj4+ICsKPj4gwqAgI2VuZGlmCj4gCgpfX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwpsaW51eC1hcm0ta2VybmVs IG1haWxpbmcgbGlzdApsaW51eC1hcm0ta2VybmVsQGxpc3RzLmluZnJhZGVhZC5vcmcKaHR0cDov L2xpc3RzLmluZnJhZGVhZC5vcmcvbWFpbG1hbi9saXN0aW5mby9saW51eC1hcm0ta2VybmVsCg==