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=-8.2 required=3.0 tests=HEADER_FROM_DIFFERENT_DOMAINS, INCLUDES_PATCH,MAILING_LIST_MULTI,SIGNED_OFF_BY,SPF_HELO_NONE,SPF_PASS, USER_AGENT_SANE_1 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 E0F64C33CA3 for ; Sat, 11 Jan 2020 07:33:27 +0000 (UTC) Received: from mm01.cs.columbia.edu (mm01.cs.columbia.edu [128.59.11.253]) by mail.kernel.org (Postfix) with ESMTP id 7493E20842 for ; Sat, 11 Jan 2020 07:33:27 +0000 (UTC) DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org 7493E20842 Authentication-Results: mail.kernel.org; dmarc=none (p=none dis=none) header.from=huawei.com Authentication-Results: mail.kernel.org; spf=pass smtp.mailfrom=kvmarm-bounces@lists.cs.columbia.edu Received: from localhost (localhost [127.0.0.1]) by mm01.cs.columbia.edu (Postfix) with ESMTP id EACF14B08D; Sat, 11 Jan 2020 02:33:26 -0500 (EST) X-Virus-Scanned: at lists.cs.columbia.edu Received: from mm01.cs.columbia.edu ([127.0.0.1]) by localhost (mm01.cs.columbia.edu [127.0.0.1]) (amavisd-new, port 10024) with ESMTP id 5B5kDjrRKqUe; Sat, 11 Jan 2020 02:33:25 -0500 (EST) Received: from mm01.cs.columbia.edu (localhost [127.0.0.1]) by mm01.cs.columbia.edu (Postfix) with ESMTP id 814D04B0B5; Sat, 11 Jan 2020 02:33:25 -0500 (EST) Received: from localhost (localhost [127.0.0.1]) by mm01.cs.columbia.edu (Postfix) with ESMTP id AA2AD4B08D for ; Sat, 11 Jan 2020 02:33:24 -0500 (EST) X-Virus-Scanned: at lists.cs.columbia.edu Received: from mm01.cs.columbia.edu ([127.0.0.1]) by localhost (mm01.cs.columbia.edu [127.0.0.1]) (amavisd-new, port 10024) with ESMTP id 0xE9DH1K3eUu for ; Sat, 11 Jan 2020 02:33:23 -0500 (EST) Received: from huawei.com (szxga01-in.huawei.com [45.249.212.187]) by mm01.cs.columbia.edu (Postfix) with ESMTPS id 0C3E34AFFB for ; Sat, 11 Jan 2020 02:33:23 -0500 (EST) Received: from DGGEMM401-HUB.china.huawei.com (unknown [172.30.72.56]) by Forcepoint Email with ESMTP id 85B55B68251585DA7E47; Sat, 11 Jan 2020 15:33:19 +0800 (CST) Received: from dggeme755-chm.china.huawei.com (10.3.19.101) by DGGEMM401-HUB.china.huawei.com (10.3.20.209) with Microsoft SMTP Server (TLS) id 14.3.439.0; Sat, 11 Jan 2020 15:33:19 +0800 Received: from [127.0.0.1] (10.173.221.248) by dggeme755-chm.china.huawei.com (10.3.19.101) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256_P256) id 15.1.1713.5; Sat, 11 Jan 2020 15:33:18 +0800 Subject: Re: [PATCH v2 6/6] KVM: arm64: Support the VCPU preemption check To: Steven Price , , , , , , References: <20191226135833.1052-1-yezengruan@huawei.com> <20191226135833.1052-7-yezengruan@huawei.com> <5a1f6745-2deb-253b-7022-f2725d8d40ba@arm.com> From: yezengruan Message-ID: Date: Sat, 11 Jan 2020 15:33:16 +0800 User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:68.0) Gecko/20100101 Thunderbird/68.3.0 MIME-Version: 1.0 In-Reply-To: <5a1f6745-2deb-253b-7022-f2725d8d40ba@arm.com> Content-Language: en-US X-Originating-IP: [10.173.221.248] X-ClientProxiedBy: dggeme701-chm.china.huawei.com (10.1.199.97) To dggeme755-chm.china.huawei.com (10.3.19.101) X-CFilter-Loop: Reflected Cc: catalin.marinas@arm.com, daniel.lezcano@linaro.org, linux@armlinux.org.uk, maz@kernel.org, will@kernel.org X-BeenThere: kvmarm@lists.cs.columbia.edu X-Mailman-Version: 2.1.14 Precedence: list List-Id: Where KVM/ARM decisions are made List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Errors-To: kvmarm-bounces@lists.cs.columbia.edu Sender: kvmarm-bounces@lists.cs.columbia.edu SGkgU3RldmUsCgpPbiAyMDIwLzEvOSAyMzowOSwgU3RldmVuIFByaWNlIHdyb3RlOgo+IE9uIDI2 LzEyLzIwMTkgMTM6NTgsIFplbmdydWFuIFllIHdyb3RlOgo+PiBTdXBwb3J0IHRoZSB2Y3B1X2lz X3ByZWVtcHRlZCgpIGZ1bmN0aW9uYWxpdHkgdW5kZXIgS1ZNL2FybTY0LiBUaGlzIHdpbGwKPj4g ZW5oYW5jZSBsb2NrIHBlcmZvcm1hbmNlIG9uIG92ZXJjb21taXR0ZWQgaG9zdHMgKG1vcmUgcnVu bmFibGUgVkNQVXMKPj4gdGhhbiBwaHlzaWNhbCBDUFVzIGluIHRoZSBzeXN0ZW0pIGFzIGRvaW5n IGJ1c3kgd2FpdHMgZm9yIHByZWVtcHRlZAo+PiBWQ1BVcyB3aWxsIGh1cnQgc3lzdGVtIHBlcmZv cm1hbmNlIGZhciB3b3JzZSB0aGFuIGVhcmx5IHlpZWxkaW5nLgo+Pgo+PiB1bml4IGJlbmNobWFy ayByZXN1bHQ6Cj4+IMKgwqAgaG9zdDrCoCBrZXJuZWwgNS41LjAtcmMxLCBIaVNpbGljb24gS3Vu cGVuZzkyMCwgOCBDUFVzCj4+IMKgwqAgZ3Vlc3Q6IGtlcm5lbCA1LjUuMC1yYzEsIDE2IFZDUFVz Cj4+Cj4+IMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCB0ZXN0LWNhc2XCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqAgfMKgwqDCoCBhZnRlci1wYXRjaMKgwqDCoCB8wqDCoCBiZWZv cmUtcGF0Y2gKPj4gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0t LS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLQo+PiDCoCBEaHJ5c3RvbmUgMiB1c2lu ZyByZWdpc3RlciB2YXJpYWJsZXPCoMKgIHwgMzM0NjAwNzUxLjAgbHBzwqDCoCB8IDMzNTMxOTAy OC4zIGxwcwo+PiDCoCBEb3VibGUtUHJlY2lzaW9uIFdoZXRzdG9uZcKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoCB8wqDCoMKgwqAgMzI4NTYuMSBNV0lQUyB8wqDCoMKgwqAgMzI4NDkuNiBNV0lQUwo+ PiDCoCBFeGVjbCBUaHJvdWdocHV0wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqAgfMKgwqDCoMKgwqAgMzY2Mi4xIGxwc8KgwqAgfMKgwqDCoMKgwqAgMjcxOC4wIGxw cwo+PiDCoCBGaWxlIENvcHkgMTAyNCBidWZzaXplIDIwMDAgbWF4YmxvY2tzwqAgfMKgwqDCoCA0 MzI5MDYuNCBLQnBzwqAgfMKgwqDCoCAxNTgwMTEuOCBLQnBzCj4+IMKgIEZpbGUgQ29weSAyNTYg YnVmc2l6ZSA1MDAgbWF4YmxvY2tzwqDCoMKgIHzCoMKgwqAgMTE2MDIzLjAgS0Jwc8KgIHzCoMKg wqDCoCAzNzY2NC4wIEtCcHMKPj4gwqAgRmlsZSBDb3B5IDQwOTYgYnVmc2l6ZSA4MDAwIG1heGJs b2Nrc8KgIHzCoMKgIDE0MzI3NjkuOCBLQnBzwqAgfMKgwqDCoCA0NDExMDguOCBLQnBzCj4+IMKg IFBpcGUgVGhyb3VnaHB1dMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqAgfMKgwqAgNjQwNTAyOS42IGxwc8KgwqAgfMKgwqAgNjAyMTQ1Ny42IGxwcwo+PiDCoCBQ aXBlLWJhc2VkIENvbnRleHQgU3dpdGNoaW5nwqDCoMKgwqDCoMKgwqDCoMKgwqAgfMKgwqDCoCAx ODU4NzIuNyBscHPCoMKgIHzCoMKgwqAgMTg0MjU1LjMgbHBzCj4+IMKgIFByb2Nlc3MgQ3JlYXRp b27CoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCB8wqDCoMKgwqDC oCA0MDI1LjcgbHBzwqDCoCB8wqDCoMKgwqDCoCAzNzA2LjYgbHBzCj4+IMKgIFNoZWxsIFNjcmlw dHMgKDEgY29uY3VycmVudCnCoMKgwqDCoMKgwqDCoMKgwqDCoCB8wqDCoMKgwqDCoCA2NzQ1LjYg bHBtwqDCoCB8wqDCoMKgwqDCoCA2NDM2LjEgbHBtCj4+IMKgIFNoZWxsIFNjcmlwdHMgKDggY29u Y3VycmVudCnCoMKgwqDCoMKgwqDCoMKgwqDCoCB8wqDCoMKgwqDCoMKgIDk5OC43IGxwbcKgwqAg fMKgwqDCoMKgwqDCoCA5MzEuMSBscG0KPj4gwqAgU3lzdGVtIENhbGwgT3ZlcmhlYWTCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgfMKgwqAgMzkxMzM2My4xIGxwc8KgwqAgfMKg wqAgMzg4MzI4Ny44IGxwcwo+PiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tCj4+IMKgIFN5c3RlbSBC ZW5jaG1hcmtzIEluZGV4IFNjb3JlwqDCoMKgwqDCoMKgwqDCoMKgIHzCoMKgwqDCoMKgIDE4MzUu McKgwqDCoMKgwqDCoCB8wqDCoMKgwqDCoCAxMzI3LjYKPj4KPj4gU2lnbmVkLW9mZi1ieTogWmVu Z3J1YW4gWWUgPHllemVuZ3J1YW5AaHVhd2VpLmNvbT4KPj4gLS0tCj4+IMKgIGFyY2gvYXJtNjQv aW5jbHVkZS9hc20vcGFyYXZpcnQuaCB8wqDCoCAzICsKPj4gwqAgYXJjaC9hcm02NC9rZXJuZWwv cGFyYXZpcnQuY8KgwqDCoMKgwqAgfCAxMTcgKysrKysrKysrKysrKysrKysrKysrKysrKysrKysr Cj4+IMKgIGFyY2gvYXJtNjQva2VybmVsL3NldHVwLmPCoMKgwqDCoMKgwqDCoMKgIHzCoMKgIDIg Kwo+PiDCoCBpbmNsdWRlL2xpbnV4L2NwdWhvdHBsdWcuaMKgwqDCoMKgwqDCoMKgIHzCoMKgIDEg Kwo+PiDCoCA0IGZpbGVzIGNoYW5nZWQsIDEyMyBpbnNlcnRpb25zKCspCj4+Cj4+IGRpZmYgLS1n aXQgYS9hcmNoL2FybTY0L2luY2x1ZGUvYXNtL3BhcmF2aXJ0LmggYi9hcmNoL2FybTY0L2luY2x1 ZGUvYXNtL3BhcmF2aXJ0LmgKPj4gaW5kZXggN2IxYzgxYjU0NGJiLi5jYTNhMmM3ODgxZjMgMTAw NjQ0Cj4+IC0tLSBhL2FyY2gvYXJtNjQvaW5jbHVkZS9hc20vcGFyYXZpcnQuaAo+PiArKysgYi9h cmNoL2FybTY0L2luY2x1ZGUvYXNtL3BhcmF2aXJ0LmgKPj4gQEAgLTI5LDYgKzI5LDggQEAgc3Rh dGljIGlubGluZSB1NjQgcGFyYXZpcnRfc3RlYWxfY2xvY2soaW50IGNwdSkKPj4gwqAgwqAgaW50 IF9faW5pdCBwdl90aW1lX2luaXQodm9pZCk7Cj4+IMKgICtpbnQgX19pbml0IHB2X2xvY2tfaW5p dCh2b2lkKTsKPj4gKwo+PiDCoCBfX3Zpc2libGUgYm9vbCBfX25hdGl2ZV92Y3B1X2lzX3ByZWVt cHRlZChpbnQgY3B1KTsKPj4gwqAgwqAgc3RhdGljIGlubGluZSBib29sIHB2X3ZjcHVfaXNfcHJl ZW1wdGVkKGludCBjcHUpCj4+IEBAIC0zOSw2ICs0MSw3IEBAIHN0YXRpYyBpbmxpbmUgYm9vbCBw dl92Y3B1X2lzX3ByZWVtcHRlZChpbnQgY3B1KQo+PiDCoCAjZWxzZQo+PiDCoCDCoCAjZGVmaW5l IHB2X3RpbWVfaW5pdCgpIGRvIHt9IHdoaWxlICgwKQo+PiArI2RlZmluZSBwdl9sb2NrX2luaXQo KSBkbyB7fSB3aGlsZSAoMCkKPj4gwqAgwqAgI2VuZGlmIC8vIENPTkZJR19QQVJBVklSVAo+PiDC oCBkaWZmIC0tZ2l0IGEvYXJjaC9hcm02NC9rZXJuZWwvcGFyYXZpcnQuYyBiL2FyY2gvYXJtNjQv a2VybmVsL3BhcmF2aXJ0LmMKPj4gaW5kZXggZDhmMWJhOGMyMmNlLi5iZDJhZDZhMTdhMjYgMTAw NjQ0Cj4+IC0tLSBhL2FyY2gvYXJtNjQva2VybmVsL3BhcmF2aXJ0LmMKPj4gKysrIGIvYXJjaC9h cm02NC9rZXJuZWwvcGFyYXZpcnQuYwo+PiBAQCAtMjIsNiArMjIsNyBAQAo+PiDCoCAjaW5jbHVk ZSA8YXNtL3BhcmF2aXJ0Lmg+Cj4+IMKgICNpbmNsdWRlIDxhc20vcHZjbG9jay1hYmkuaD4KPj4g wqAgI2luY2x1ZGUgPGFzbS9zbXBfcGxhdC5oPgo+PiArI2luY2x1ZGUgPGFzbS9wdmxvY2stYWJp Lmg+Cj4+IMKgIMKgIHN0cnVjdCBzdGF0aWNfa2V5IHBhcmF2aXJ0X3N0ZWFsX2VuYWJsZWQ7Cj4+ IMKgIHN0cnVjdCBzdGF0aWNfa2V5IHBhcmF2aXJ0X3N0ZWFsX3JxX2VuYWJsZWQ7Cj4+IEBAIC0z NSw2ICszNiwxMCBAQCBzdHJ1Y3QgcHZfdGltZV9zdG9sZW5fdGltZV9yZWdpb24gewo+PiDCoMKg wqDCoMKgIHN0cnVjdCBwdmNsb2NrX3ZjcHVfc3RvbGVuX3RpbWUgKmthZGRyOwo+PiDCoCB9Owo+ PiDCoCArc3RydWN0IHB2X2xvY2tfc3RhdGVfcmVnaW9uIHsKPj4gK8KgwqDCoCBzdHJ1Y3QgcHZs b2NrX3ZjcHVfc3RhdGUgKmthZGRyOwo+PiArfTsKPj4gKwo+PiDCoCBzdGF0aWMgREVGSU5FX1BF Ul9DUFUoc3RydWN0IHB2X3RpbWVfc3RvbGVuX3RpbWVfcmVnaW9uLCBzdG9sZW5fdGltZV9yZWdp b24pOwo+PiDCoCDCoCBzdGF0aWMgYm9vbCBzdGVhbF9hY2MgPSB0cnVlOwo+PiBAQCAtMTU4LDMg KzE2MywxMTUgQEAgaW50IF9faW5pdCBwdl90aW1lX2luaXQodm9pZCkKPj4gwqAgwqDCoMKgwqDC oCByZXR1cm4gMDsKPj4gwqAgfQo+PiArCj4+ICtzdGF0aWMgREVGSU5FX1BFUl9DUFUoc3RydWN0 IHB2X2xvY2tfc3RhdGVfcmVnaW9uLCBsb2NrX3N0YXRlX3JlZ2lvbik7Cj4+ICsKPj4gK3N0YXRp YyBib29sIGt2bV92Y3B1X2lzX3ByZWVtcHRlZChpbnQgY3B1KQo+PiArewo+PiArwqDCoMKgIHN0 cnVjdCBwdl9sb2NrX3N0YXRlX3JlZ2lvbiAqcmVnOwo+PiArwqDCoMKgIF9fbGU2NCBwcmVlbXB0 ZWRfbGU7Cj4+ICsKPj4gK8KgwqDCoCByZWcgPSBwZXJfY3B1X3B0cigmbG9ja19zdGF0ZV9yZWdp b24sIGNwdSk7Cj4+ICvCoMKgwqAgaWYgKCFyZWctPmthZGRyKSB7Cj4+ICvCoMKgwqDCoMKgwqDC oCBwcl93YXJuX29uY2UoIlBWIGxvY2sgZW5hYmxlZCBidXQgbm90IGNvbmZpZ3VyZWQgZm9yIGNw dSAlZFxuIiwKPj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIGNwdSk7Cj4+ICvC oMKgwqDCoMKgwqDCoCByZXR1cm4gZmFsc2U7Cj4+ICvCoMKgwqAgfQo+PiArCj4+ICvCoMKgwqAg cHJlZW1wdGVkX2xlID0gbGU2NF90b19jcHUoUkVBRF9PTkNFKHJlZy0+a2FkZHItPnByZWVtcHRl ZCkpOwo+PiArCj4+ICvCoMKgwqAgcmV0dXJuICEhKHByZWVtcHRlZF9sZSAmIDEpOwo+IAo+IEFj Y29yZGluZyB0byB0aGUgZG9jdW1lbnRhdGlvbiBwcmVlbXB0ZWQgIT0gMCBtZWFucyBwcmVlbXB0 ZWQsIGJ1dCBoZXJlIHlvdSBhcmUgY2hlY2tpbmcgdGhlIExTQi4gWW91IG5lZWQgdG8gYmUgY29u c2lzdGVudCBhYm91dCB0aGUgQUJJLgoKVGhhbmtzIGZvciBwb3N0aW5nIHRoaXMuIEknbGwgdXBk YXRlIHRoZSBjb2RlLgoKPiAKPj4gK30KPj4gKwo+PiArc3RhdGljIGludCBwdmxvY2tfdmNwdV9z dGF0ZV9keWluZ19jcHUodW5zaWduZWQgaW50IGNwdSkKPj4gK3sKPj4gK8KgwqDCoCBzdHJ1Y3Qg cHZfbG9ja19zdGF0ZV9yZWdpb24gKnJlZzsKPj4gKwo+PiArwqDCoMKgIHJlZyA9IHRoaXNfY3B1 X3B0cigmbG9ja19zdGF0ZV9yZWdpb24pOwo+PiArwqDCoMKgIGlmICghcmVnLT5rYWRkcikKPj4g K8KgwqDCoMKgwqDCoMKgIHJldHVybiAwOwo+PiArCj4+ICvCoMKgwqAgbWVtdW5tYXAocmVnLT5r YWRkcik7Cj4+ICvCoMKgwqAgbWVtc2V0KHJlZywgMCwgc2l6ZW9mKCpyZWcpKTsKPj4gKwo+PiAr wqDCoMKgIHJldHVybiAwOwo+PiArfQo+PiArCj4+ICtzdGF0aWMgaW50IGluaXRfcHZsb2NrX3Zj cHVfc3RhdGUodW5zaWduZWQgaW50IGNwdSkKPj4gK3sKPj4gK8KgwqDCoCBzdHJ1Y3QgcHZfbG9j a19zdGF0ZV9yZWdpb24gKnJlZzsKPj4gK8KgwqDCoCBzdHJ1Y3QgYXJtX3NtY2NjX3JlcyByZXM7 Cj4+ICsKPj4gK8KgwqDCoCByZWcgPSB0aGlzX2NwdV9wdHIoJmxvY2tfc3RhdGVfcmVnaW9uKTsK Pj4gKwo+PiArwqDCoMKgIGFybV9zbWNjY18xXzFfaW52b2tlKEFSTV9TTUNDQ19IVl9QVl9MT0NL X1BSRUVNUFRFRCwgJnJlcyk7Cj4+ICsKPj4gK8KgwqDCoCBpZiAocmVzLmEwID09IFNNQ0NDX1JF VF9OT1RfU1VQUE9SVEVEKSB7Cj4+ICvCoMKgwqDCoMKgwqDCoCBwcl93YXJuKCJGYWlsZWQgdG8g aW5pdCBQViBsb2NrIGRhdGEgc3RydWN0dXJlXG4iKTsKPj4gK8KgwqDCoMKgwqDCoMKgIHJldHVy biAtRUlOVkFMOwo+PiArwqDCoMKgIH0KPj4gKwo+PiArwqDCoMKgIHJlZy0+a2FkZHIgPSBtZW1y ZW1hcChyZXMuYTAsCj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIHNpemVv ZihzdHJ1Y3QgcHZsb2NrX3ZjcHVfc3RhdGUpLAo+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoCBNRU1SRU1BUF9XQik7Cj4+ICsKPj4gK8KgwqDCoCBpZiAoIXJlZy0+a2FkZHIp IHsKPj4gK8KgwqDCoMKgwqDCoMKgIHByX3dhcm4oIkZhaWxlZCB0byBtYXAgUFYgbG9jayBkYXRh IHN0cnVjdHVyZVxuIik7Cj4+ICvCoMKgwqDCoMKgwqDCoCByZXR1cm4gLUVOT01FTTsKPj4gK8Kg wqDCoCB9Cj4+ICsKPj4gK8KgwqDCoCByZXR1cm4gMDsKPj4gK30KPj4gKwo+PiArc3RhdGljIGlu dCBrdm1fYXJtX2luaXRfcHZsb2NrKHZvaWQpCj4+ICt7Cj4+ICvCoMKgwqAgaW50IHJldDsKPj4g Kwo+PiArwqDCoMKgIHJldCA9IGNwdWhwX3NldHVwX3N0YXRlKENQVUhQX0FQX0FSTV9LVk1fUFZM T0NLX1NUQVJUSU5HLAo+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgICJoeXBlcnZp c29yL2FybS9wdmxvY2s6c3RhcnRpbmciLAo+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgIGluaXRfcHZsb2NrX3ZjcHVfc3RhdGUsCj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqAgcHZsb2NrX3ZjcHVfc3RhdGVfZHlpbmdfY3B1KTsKPj4gK8KgwqDCoCBpZiAocmV0IDwg MCkgewo+PiArwqDCoMKgwqDCoMKgwqAgcHJfd2FybigiUFYtbG9jayBpbml0IGZhaWxlZFxuIik7 Cj4+ICvCoMKgwqDCoMKgwqDCoCByZXR1cm4gcmV0Owo+PiArwqDCoMKgIH0KPj4gKwo+PiArwqDC oMKgIHJldHVybiAwOwo+PiArfQo+PiArCj4+ICtzdGF0aWMgYm9vbCBoYXNfa3ZtX3B2bG9jayh2 b2lkKQo+PiArewo+PiArwqDCoMKgIHN0cnVjdCBhcm1fc21jY2NfcmVzIHJlczsKPj4gKwo+PiAr wqDCoMKgIC8qIFRvIGRldGVjdCB0aGUgcHJlc2VuY2Ugb2YgUFYgbG9jayBzdXBwb3J0IHdlIHJl cXVpcmUgU01DQ0MgMS4xKyAqLwo+PiArwqDCoMKgIGlmIChwc2NpX29wcy5zbWNjY192ZXJzaW9u IDwgU01DQ0NfVkVSU0lPTl8xXzEpCj4+ICvCoMKgwqDCoMKgwqDCoCByZXR1cm4gZmFsc2U7Cj4+ ICsKPj4gK8KgwqDCoCBhcm1fc21jY2NfMV8xX2ludm9rZShBUk1fU01DQ0NfQVJDSF9GRUFUVVJF U19GVU5DX0lELAo+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgQVJNX1NNQ0ND X0hWX1BWX0xPQ0tfRkVBVFVSRVMsICZyZXMpOwo+IAo+IEFzIG1lbnRpb25lZCBwcmV2aW91c2x5 IHdlIGNvdWxkIGRvIHdpdGggc29tZXRoaW5nIG1vcmUgcm9idXN0IHRvIGNoZWNrIHRoYXQgdGhl IGh5cGVydmlzb3IgaXMgYWN0dWFsbHkgS1ZNIGJlZm9yZSBhc3N1bWluZyB0aGF0IHZlbmRvciBz cGVjaWZpYyBJRHMgYXJlIHZhbGlkLgoKV2lsbCB1cGRhdGUgbmV4dCB2ZXJzaW9uLgoKPiAKPiBT dGV2ZQo+IAo+PiArCj4+ICvCoMKgwqAgaWYgKHJlcy5hMCAhPSBTTUNDQ19SRVRfU1VDQ0VTUykK Pj4gK8KgwqDCoMKgwqDCoMKgIHJldHVybiBmYWxzZTsKPj4gKwo+PiArwqDCoMKgIHJldHVybiB0 cnVlOwo+PiArfQo+PiArCj4+ICtpbnQgX19pbml0IHB2X2xvY2tfaW5pdCh2b2lkKQo+PiArewo+ PiArwqDCoMKgIGludCByZXQ7Cj4+ICsKPj4gK8KgwqDCoCBpZiAoaXNfaHlwX21vZGVfYXZhaWxh YmxlKCkpCj4+ICvCoMKgwqDCoMKgwqDCoCByZXR1cm4gMDsKPj4gKwo+PiArwqDCoMKgIGlmICgh aGFzX2t2bV9wdmxvY2soKSkKPj4gK8KgwqDCoMKgwqDCoMKgIHJldHVybiAwOwo+PiArCj4+ICvC oMKgwqAgcmV0ID0ga3ZtX2FybV9pbml0X3B2bG9jaygpOwo+PiArwqDCoMKgIGlmIChyZXQpCj4+ ICvCoMKgwqDCoMKgwqDCoCByZXR1cm4gcmV0Owo+PiArCj4+ICvCoMKgwqAgcHZfb3BzLmxvY2su dmNwdV9pc19wcmVlbXB0ZWQgPSBrdm1fdmNwdV9pc19wcmVlbXB0ZWQ7Cj4+ICvCoMKgwqAgcHJf aW5mbygidXNpbmcgUFYtbG9jayBwcmVlbXB0ZWRcbiIpOwo+PiArCj4+ICvCoMKgwqAgcmV0dXJu IDA7Cj4+ICt9Cj4+IGRpZmYgLS1naXQgYS9hcmNoL2FybTY0L2tlcm5lbC9zZXR1cC5jIGIvYXJj aC9hcm02NC9rZXJuZWwvc2V0dXAuYwo+PiBpbmRleCA1NmY2NjQ1NjE3NTQuLmFhM2E4YjllNzEw ZiAxMDA2NDQKPj4gLS0tIGEvYXJjaC9hcm02NC9rZXJuZWwvc2V0dXAuYwo+PiArKysgYi9hcmNo L2FybTY0L2tlcm5lbC9zZXR1cC5jCj4+IEBAIC0zNDEsNiArMzQxLDggQEAgdm9pZCBfX2luaXQg c2V0dXBfYXJjaChjaGFyICoqY21kbGluZV9wKQo+PiDCoMKgwqDCoMKgIHNtcF9pbml0X2NwdXMo KTsKPj4gwqDCoMKgwqDCoCBzbXBfYnVpbGRfbXBpZHJfaGFzaCgpOwo+PiDCoCArwqDCoMKgIHB2 X2xvY2tfaW5pdCgpOwo+PiArCj4+IMKgwqDCoMKgwqAgLyogSW5pdCBwZXJjcHUgc2VlZHMgZm9y IHJhbmRvbSB0YWdzIGFmdGVyIGNwdXMgYXJlIHNldCB1cC4gKi8KPj4gwqDCoMKgwqDCoCBrYXNh bl9pbml0X3RhZ3MoKTsKPj4gwqAgZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvY3B1aG90cGx1 Zy5oIGIvaW5jbHVkZS9saW51eC9jcHVob3RwbHVnLmgKPj4gaW5kZXggZTUxZWU3NzJiOWY1Li5m NzJmZjk1YWI2M2EgMTAwNjQ0Cj4+IC0tLSBhL2luY2x1ZGUvbGludXgvY3B1aG90cGx1Zy5oCj4+ ICsrKyBiL2luY2x1ZGUvbGludXgvY3B1aG90cGx1Zy5oCj4+IEBAIC0xMzgsNiArMTM4LDcgQEAg ZW51bSBjcHVocF9zdGF0ZSB7Cj4+IMKgwqDCoMKgwqAgQ1BVSFBfQVBfRFVNTVlfVElNRVJfU1RB UlRJTkcsCj4+IMKgwqDCoMKgwqAgQ1BVSFBfQVBfQVJNX1hFTl9TVEFSVElORywKPj4gwqDCoMKg wqDCoCBDUFVIUF9BUF9BUk1fS1ZNUFZfU1RBUlRJTkcsCj4+ICvCoMKgwqAgQ1BVSFBfQVBfQVJN X0tWTV9QVkxPQ0tfU1RBUlRJTkcsCj4+IMKgwqDCoMKgwqAgQ1BVSFBfQVBfQVJNX0NPUkVTSUdI VF9TVEFSVElORywKPj4gwqDCoMKgwqDCoCBDUFVIUF9BUF9BUk02NF9JU05ERVBfU1RBUlRJTkcs Cj4+IMKgwqDCoMKgwqAgQ1BVSFBfQVBfU01QQ0ZEX0RZSU5HLAo+Pgo+IAo+IAo+IC4KClRoYW5r cywKClplbmdydWFuCgpfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fXwprdm1hcm0gbWFpbGluZyBsaXN0Cmt2bWFybUBsaXN0cy5jcy5jb2x1bWJpYS5lZHUKaHR0 cHM6Ly9saXN0cy5jcy5jb2x1bWJpYS5lZHUvbWFpbG1hbi9saXN0aW5mby9rdm1hcm0K