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=-9.7 required=3.0 tests=HEADER_FROM_DIFFERENT_DOMAINS, INCLUDES_PATCH,MAILING_LIST_MULTI,SIGNED_OFF_BY,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 513C2C2BA83 for ; Thu, 13 Feb 2020 12:55:21 +0000 (UTC) Received: from lists.xenproject.org (lists.xenproject.org [192.237.175.120]) (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 2ED052168B for ; Thu, 13 Feb 2020 12:55:21 +0000 (UTC) DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org 2ED052168B Authentication-Results: mail.kernel.org; dmarc=none (p=none dis=none) header.from=suse.com Authentication-Results: mail.kernel.org; spf=none smtp.mailfrom=xen-devel-bounces@lists.xenproject.org Received: from localhost ([127.0.0.1] helo=lists.xenproject.org) by lists.xenproject.org with esmtp (Exim 4.89) (envelope-from ) id 1j2E1O-00066J-W1; Thu, 13 Feb 2020 12:55:10 +0000 Received: from all-amaz-eas1.inumbo.com ([34.197.232.57] helo=us1-amaz-eas2.inumbo.com) by lists.xenproject.org with esmtp (Exim 4.89) (envelope-from ) id 1j2E1N-00065T-Hw for xen-devel@lists.xenproject.org; Thu, 13 Feb 2020 12:55:09 +0000 X-Inumbo-ID: 07188f03-4e60-11ea-b898-12813bfff9fa Received: from mx2.suse.de (unknown [195.135.220.15]) by us1-amaz-eas2.inumbo.com (Halon) with ESMTPS id 07188f03-4e60-11ea-b898-12813bfff9fa; Thu, 13 Feb 2020 12:54:54 +0000 (UTC) X-Virus-Scanned: by amavisd-new at test-mx.suse.de Received: from relay2.suse.de (unknown [195.135.220.254]) by mx2.suse.de (Postfix) with ESMTP id 3F9A4AC62; Thu, 13 Feb 2020 12:54:53 +0000 (UTC) From: Juergen Gross To: xen-devel@lists.xenproject.org Date: Thu, 13 Feb 2020 13:54:45 +0100 Message-Id: <20200213125449.14226-5-jgross@suse.com> X-Mailer: git-send-email 2.16.4 In-Reply-To: <20200213125449.14226-1-jgross@suse.com> References: <20200213125449.14226-1-jgross@suse.com> Subject: [Xen-devel] [PATCH 4/8] xen: add locks with timeouts for keyhandlers X-BeenThere: xen-devel@lists.xenproject.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: Xen developer discussion List-Unsubscribe: , List-Post: List-Help: List-Subscribe: , Cc: Juergen Gross , Stefano Stabellini , Julien Grall , Wei Liu , Konrad Rzeszutek Wilk , George Dunlap , Andrew Cooper , Ian Jackson , Jan Beulich , =?UTF-8?q?Roger=20Pau=20Monn=C3=A9?= MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Errors-To: xen-devel-bounces@lists.xenproject.org Sender: "Xen-devel" TW9zdCBrZXloYW5kbGVycyBhcmUgdXNlZCB0byBkdW1wIGh5cGVydmlzb3IgZGF0YSB0byB0aGUg Y29uc29sZSBhbmQKdGhleSBhcmUgdXNlZCBtb3N0bHkgZm9yIGRlYnVnZ2luZyBwdXJwb3Nlcy4g SW4gdGhvc2UgY2FzZXMgaXQgbWlnaHQKaGFwcGVuIHRoYXQgc29tZSBkYXRhIHN0cnVjdHVyZXMg YXJlIGxvY2tlZCBhbmQgdGh1cyBhcmUgYmxvY2tpbmcgdGhlCmhhbmRsZXIgdG8gYWNjZXNzIHRo ZSBkYXRhLgoKSW4gb3JkZXIgdG8gYmUgYWJsZSB0byBzdGlsbCBnZXQgc29tZSBpbmZvcm1hdGlv biBkb24ndCB1c2UgcGxhaW4KbG9ja2luZyBmdW5jdGlvbnMgaW4gdGhlIGtleWhhbmRsZXJzLCBi dXQgYSB2YXJpYW50IG9mIHRyeWxvY2tzIHdpdGgKYSB0aW1lb3V0IHZhbHVlLiBUaGlzIGFsbG93 cyB0byB3YWl0IGZvciBzb21lIHRpbWUgYW5kIHRvIGdpdmUgdXAgaW4KY2FzZSB0aGUgbG9jayB3 YXMgbm90IG9idGFpbmVkLgoKQWRkIHRoZSBtYWluIGluZnJhc3RydWN0dXJlIGZvciB0aGlzIGZl YXR1cmUgaW5jbHVkaW5nIGEgbmV3IHJ1bnRpbWUKcGFyYW1ldGVyIGFsbG93aW5nIHRvIHNwZWNp ZnkgdGhlIHRpbWVvdXQgdmFsdWUgaW4gbWlsbGlzZWNvbmRzLgoKVXNlIHRoZSBuZXcgbG9ja2lu ZyBzY2hlbWUgaW4gdGhlIGhhbmRsZXJzIGRlZmluZWQgaW4ga2V5aGFuZGxlci5jLgoKU2lnbmVk LW9mZi1ieTogSnVlcmdlbiBHcm9zcyA8amdyb3NzQHN1c2UuY29tPgotLS0KIGRvY3MvbWlzYy94 ZW4tY29tbWFuZC1saW5lLnBhbmRvYyB8ICA5ICsrKysrKysrKwogeGVuL2FyY2gveDg2L2RvbWFp bi5jICAgICAgICAgICAgIHwgIDkgKysrKysrKy0tCiB4ZW4vY29tbW9uL2tleWhhbmRsZXIuYyAg ICAgICAgICAgfCAyOSArKysrKysrKysrKysrKysrKysrKysrKysrKysrLQogeGVuL2NvbW1vbi9y YW5nZXNldC5jICAgICAgICAgICAgIHwgIDcgKysrKystLQogeGVuL2luY2x1ZGUveGVuL2tleWhh bmRsZXIuaCAgICAgIHwgMjYgKysrKysrKysrKysrKysrKysrKysrKysrKysKIDUgZmlsZXMgY2hh bmdlZCwgNzUgaW5zZXJ0aW9ucygrKSwgNSBkZWxldGlvbnMoLSkKCmRpZmYgLS1naXQgYS9kb2Nz L21pc2MveGVuLWNvbW1hbmQtbGluZS5wYW5kb2MgYi9kb2NzL21pc2MveGVuLWNvbW1hbmQtbGlu ZS5wYW5kb2MKaW5kZXggNTA1MTU4M2E1ZC4uZWUzZDAzMTc3MSAxMDA2NDQKLS0tIGEvZG9jcy9t aXNjL3hlbi1jb21tYW5kLWxpbmUucGFuZG9jCisrKyBiL2RvY3MvbWlzYy94ZW4tY29tbWFuZC1s aW5lLnBhbmRvYwpAQCAtMTM4NCw2ICsxMzg0LDE1IEBAIEZvcmNlIHRoZSB1c2Ugb2YgYFs8c2Vn PjpdPGJ1cz46PGRldmljZT4uPGZ1bmM+YCBhcyBkZXZpY2UgSUQgb2YgSU8tQVBJQwogYDxpb2Fw aWM+YCBpbnN0ZWFkIG9mIHRoZSBvbmUgc3BlY2lmaWVkIGJ5IHRoZSBJVkhEIHN1Yi10YWJsZXMg b2YgdGhlIElWUlMKIEFDUEkgdGFibGUuCiAKKyMjIyBrZXloYW5kbGVyLWxvY2stdGltZW91dAor PiBgPSA8aW50ZWdlcj5gCisKKz4gRGVmYXVsdDogYDFgCisKKz4gQ2FuIGJlIG1vZGlmaWVkIGF0 IHJ1bnRpbWUKKworU3BlY2lmeSB0aGUgbG9jayB0aW1lb3V0IG9mIGtleWhhbmRsZXJzIGluIG1p bGxpc2Vjb25kcy4KKwogIyMjIGxhcGljICh4ODYpCiA+IGA9IDxib29sZWFuPmAKIApkaWZmIC0t Z2l0IGEveGVuL2FyY2gveDg2L2RvbWFpbi5jIGIveGVuL2FyY2gveDg2L2RvbWFpbi5jCmluZGV4 IGY1M2FlNWZmODYuLjFkMDk5MTFkYzAgMTAwNjQ0Ci0tLSBhL3hlbi9hcmNoL3g4Ni9kb21haW4u YworKysgYi94ZW4vYXJjaC94ODYvZG9tYWluLmMKQEAgLTIyLDYgKzIyLDcgQEAKICNpbmNsdWRl IDx4ZW4vZ3JhbnRfdGFibGUuaD4KICNpbmNsdWRlIDx4ZW4vaW9jYXAuaD4KICNpbmNsdWRlIDx4 ZW4va2VybmVsLmg+CisjaW5jbHVkZSA8eGVuL2tleWhhbmRsZXIuaD4KICNpbmNsdWRlIDx4ZW4v aHlwZXJjYWxsLmg+CiAjaW5jbHVkZSA8eGVuL211bHRpY2FsbC5oPgogI2luY2x1ZGUgPHhlbi9p cnEuaD4KQEAgLTIyMiw3ICsyMjMsOCBAQCB2b2lkIGR1bXBfcGFnZWZyYW1lX2luZm8oc3RydWN0 IGRvbWFpbiAqZCkKICAgICB7CiAgICAgICAgIHByaW50aygiICAgIERvbVBhZ2UgbGlzdCB0b28g bG9uZyB0byBkaXNwbGF5XG4iKTsKICAgICB9Ci0gICAgZWxzZQorICAgIGVsc2UgaWYgKCBrZXlo YW5kbGVyX3NwaW5fbG9jaygmZC0+cGFnZV9hbGxvY19sb2NrLAorICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAiY291bGQgbm90IHJlYWQgcGFnZV9saXN0IikgKQogICAgIHsKICAg ICAgICAgdW5zaWduZWQgbG9uZyB0b3RhbFtNQVNLX0VYVFIoUEdUX3R5cGVfbWFzaywgUEdUX3R5 cGVfbWFzaykgKyAxXSA9IHt9OwogCkBAIC0yNTEsNyArMjUzLDEwIEBAIHZvaWQgZHVtcF9wYWdl ZnJhbWVfaW5mbyhzdHJ1Y3QgZG9tYWluICpkKQogICAgIGlmICggaXNfaHZtX2RvbWFpbihkKSAp CiAgICAgICAgIHAybV9wb2RfZHVtcF9kYXRhKGQpOwogCi0gICAgc3Bpbl9sb2NrKCZkLT5wYWdl X2FsbG9jX2xvY2spOworICAgIGlmICggIWtleWhhbmRsZXJfc3Bpbl9sb2NrKCZkLT5wYWdlX2Fs bG9jX2xvY2ssCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImNvdWxkIG5vdCByZWFk IHBhZ2VfbGlzdCIpICkKKyAgICAgICAgcmV0dXJuOworCiAgICAgcGFnZV9saXN0X2Zvcl9lYWNo ICggcGFnZSwgJmQtPnhlbnBhZ2VfbGlzdCApCiAgICAgewogICAgICAgICBwcmludGsoIiAgICBY ZW5QYWdlICVwOiBjYWY9JTA4bHgsIHRhZj0lIiBQUnR5cGVfaW5mbyAiXG4iLApkaWZmIC0tZ2l0 IGEveGVuL2NvbW1vbi9rZXloYW5kbGVyLmMgYi94ZW4vY29tbW9uL2tleWhhbmRsZXIuYwppbmRl eCBmNTA0OTBkMGYzLi5jMzkzZDgzYjcwIDEwMDY0NAotLS0gYS94ZW4vY29tbW9uL2tleWhhbmRs ZXIuYworKysgYi94ZW4vY29tbW9uL2tleWhhbmRsZXIuYwpAQCAtMTQsOCArMTQsMTAgQEAKICNp bmNsdWRlIDx4ZW4vcmFuZ2VzZXQuaD4KICNpbmNsdWRlIDx4ZW4vY29tcGF0Lmg+CiAjaW5jbHVk ZSA8eGVuL2N0eXBlLmg+CisjaW5jbHVkZSA8eGVuL3BhcmFtLmg+CiAjaW5jbHVkZSA8eGVuL3Bl cmZjLmg+CiAjaW5jbHVkZSA8eGVuL21tLmg+CisjaW5jbHVkZSA8eGVuL3RpbWUuaD4KICNpbmNs dWRlIDx4ZW4vd2F0Y2hkb2cuaD4KICNpbmNsdWRlIDx4ZW4vaW5pdC5oPgogI2luY2x1ZGUgPGFz bS9kZWJ1Z2dlci5oPgpAQCAtNzEsNiArNzMsMzAgQEAgc3RhdGljIHN0cnVjdCBrZXloYW5kbGVy IHsKICN1bmRlZiBLRVlIQU5ETEVSCiB9OwogCitzdGF0aWMgdW5zaWduZWQgaW50IGxvY2tfdGlt ZW91dCA9IDE7CitpbnRlZ2VyX3J1bnRpbWVfcGFyYW0oImtleWhhbmRsZXItbG9jay10aW1lb3V0 IiwgbG9ja190aW1lb3V0KTsKKworc190aW1lX3Qga2V5aGFuZGxlcl9sb2NrX3RpbWVvdXQodm9p ZCkKK3sKKyAgICByZXR1cm4gTk9XKCkgKyBNSUxMSVNFQ1MobG9ja190aW1lb3V0KTsKK30KKwor Ym9vbCBrZXloYW5kbGVyX3NwaW5fbG9jayhzcGlubG9ja190ICpsb2NrLCBjb25zdCBjaGFyICpt c2cpCit7CisgICAga2V5aGFuZGxlcl9sb2NrX2JvZHkoYm9vbCwgc3Bpbl90cnlsb2NrKGxvY2sp LCAiJXNcbiIsIG1zZyk7Cit9CisKK2Jvb2wga2V5aGFuZGxlcl9zcGluX2xvY2tfaXJxc2F2ZShz cGlubG9ja190ICpsb2NrLCB1bnNpZ25lZCBsb25nICpmbGFncywKKyAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICptc2cpCit7CisgICAga2V5aGFuZGxlcl9sb2Nr X2JvZHkoYm9vbCwgc3Bpbl90cnlsb2NrX2lycXNhdmUobG9jaywgKmZsYWdzKSwgIiVzXG4iLCBt c2cpOworfQorCitib29sIGtleWhhbmRsZXJfcmVhZF9sb2NrKHJ3bG9ja190ICpsb2NrLCBjb25z dCBjaGFyICptc2cpCit7CisgICAga2V5aGFuZGxlcl9sb2NrX2JvZHkoYm9vbCwgcmVhZF90cnls b2NrKGxvY2spLCAiJXNcbiIsIG1zZyk7Cit9CisKIHN0YXRpYyB2b2lkIGtleXByZXNzX2FjdGlv bih2b2lkICp1bnVzZWQpCiB7CiAgICAgaGFuZGxlX2tleXByZXNzKGtleXByZXNzX2tleSwgTlVM TCk7CkBAIC0zNzgsNyArNDA0LDggQEAgc3RhdGljIHZvaWQgcmVhZF9jbG9ja3ModW5zaWduZWQg Y2hhciBrZXkpCiAgICAgc3RhdGljIHUzMiBjb3VudCA9IDA7CiAgICAgc3RhdGljIERFRklORV9T UElOTE9DSyhsb2NrKTsKIAotICAgIHNwaW5fbG9jaygmbG9jayk7CisgICAgaWYgKCAha2V5aGFu ZGxlcl9zcGluX2xvY2soJmxvY2ssICJjb3VsZCBub3QgcmVhZCBjbG9jayBzdGF0cyIpICkKKyAg ICAgICAgcmV0dXJuOwogCiAgICAgc21wX2NhbGxfZnVuY3Rpb24ocmVhZF9jbG9ja3Nfc2xhdmUs IE5VTEwsIDApOwogCmRpZmYgLS1naXQgYS94ZW4vY29tbW9uL3Jhbmdlc2V0LmMgYi94ZW4vY29t bW9uL3Jhbmdlc2V0LmMKaW5kZXggNGViYmEzMGJhMy4uOTcxMDRhYmI0NSAxMDA2NDQKLS0tIGEv eGVuL2NvbW1vbi9yYW5nZXNldC5jCisrKyBiL3hlbi9jb21tb24vcmFuZ2VzZXQuYwpAQCAtOSw2 ICs5LDcgQEAKIAogI2luY2x1ZGUgPHhlbi9zY2hlZC5oPgogI2luY2x1ZGUgPHhlbi9lcnJuby5o PgorI2luY2x1ZGUgPHhlbi9rZXloYW5kbGVyLmg+CiAjaW5jbHVkZSA8eGVuL3Jhbmdlc2V0Lmg+ CiAjaW5jbHVkZSA8eHNtL3hzbS5oPgogCkBAIC01NDYsNyArNTQ3LDggQEAgc3RhdGljIHZvaWQg cmFuZ2VzZXRfcHJpbnRrKHN0cnVjdCByYW5nZXNldCAqcikKICAgICBpbnQgbnJfcHJpbnRlZCA9 IDA7CiAgICAgc3RydWN0IHJhbmdlICp4OwogCi0gICAgcmVhZF9sb2NrKCZyLT5sb2NrKTsKKyAg ICBpZiAoICFrZXloYW5kbGVyX3JlYWRfbG9jaygmci0+bG9jaywgImNvdWxkIG5vdCByZWFkIHJh bmdlc2V0IikgKQorICAgICAgICByZXR1cm47CiAKICAgICBwcmludGsoIiUtMTBzIHsiLCByLT5u YW1lKTsKIApAQCAtNTc1LDcgKzU3Nyw4IEBAIHZvaWQgcmFuZ2VzZXRfZG9tYWluX3ByaW50aygK IAogICAgIHByaW50aygiUmFuZ2VzZXRzIGJlbG9uZ2luZyB0byBkb21haW4gJXU6XG4iLCBkLT5k b21haW5faWQpOwogCi0gICAgc3Bpbl9sb2NrKCZkLT5yYW5nZXNldHNfbG9jayk7CisgICAgaWYg KCAha2V5aGFuZGxlcl9zcGluX2xvY2soJmQtPnJhbmdlc2V0c19sb2NrLCAiY291bGQgbm90IGdl dCByYW5nZXNldHMiKSApCisgICAgICAgIHJldHVybjsKIAogICAgIGlmICggbGlzdF9lbXB0eSgm ZC0+cmFuZ2VzZXRzKSApCiAgICAgICAgIHByaW50aygiICAgIE5vbmVcbiIpOwpkaWZmIC0tZ2l0 IGEveGVuL2luY2x1ZGUveGVuL2tleWhhbmRsZXIuaCBiL3hlbi9pbmNsdWRlL3hlbi9rZXloYW5k bGVyLmgKaW5kZXggNTEzMWU4NmNiYy4uY2M4ZTBiMThmNSAxMDA2NDQKLS0tIGEveGVuL2luY2x1 ZGUveGVuL2tleWhhbmRsZXIuaAorKysgYi94ZW4vaW5jbHVkZS94ZW4va2V5aGFuZGxlci5oCkBA IC0xMCw2ICsxMCw5IEBACiAjaWZuZGVmIF9fWEVOX0tFWUhBTkRMRVJfSF9fCiAjZGVmaW5lIF9f WEVOX0tFWUhBTkRMRVJfSF9fCiAKKyNpbmNsdWRlIDx4ZW4vcndsb2NrLmg+CisjaW5jbHVkZSA8 eGVuL3NwaW5sb2NrLmg+CisjaW5jbHVkZSA8eGVuL3RpbWUuaD4KICNpbmNsdWRlIDx4ZW4vdHlw ZXMuaD4KIAogLyoKQEAgLTQ4LDQgKzUxLDI3IEBAIHZvaWQgcmVnaXN0ZXJfaXJxX2tleWhhbmRs ZXIodW5zaWduZWQgY2hhciBrZXksCiAvKiBJbmplY3QgYSBrZXlwcmVzcyBpbnRvIHRoZSBrZXkt aGFuZGxpbmcgc3Vic3lzdGVtLiAqLwogZXh0ZXJuIHZvaWQgaGFuZGxlX2tleXByZXNzKHVuc2ln bmVkIGNoYXIga2V5LCBzdHJ1Y3QgY3B1X3VzZXJfcmVncyAqcmVncyk7CiAKKy8qIExvY2tpbmcg cHJpbWl0aXZlcyBmb3IgaW5zaWRlIGtleWhhbmRsZXJzIChsaWtlIHRyeWxvY2spLiAqLworYm9v bCBrZXloYW5kbGVyX3NwaW5fbG9jayhzcGlubG9ja190ICpsb2NrLCBjb25zdCBjaGFyICptc2cp OworYm9vbCBrZXloYW5kbGVyX3NwaW5fbG9ja19pcnFzYXZlKHNwaW5sb2NrX3QgKmxvY2ssIHVu c2lnbmVkIGxvbmcgKmZsYWdzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNv bnN0IGNoYXIgKm1zZyk7Citib29sIGtleWhhbmRsZXJfcmVhZF9sb2NrKHJ3bG9ja190ICpsb2Nr LCBjb25zdCBjaGFyICptc2cpOworCisvKiBQcmltaXRpdmVzIGZvciBjdXN0b20ga2V5aGFuZGxl ciBsb2NrIGZ1bmN0aW9ucy4gKi8KK3NfdGltZV90IGtleWhhbmRsZXJfbG9ja190aW1lb3V0KHZv aWQpOworI2RlZmluZSBrZXloYW5kbGVyX2xvY2tfYm9keSh0eXBlLCBsb2NrZnVuYywgYXJnLi4u KSBcCisgICAgc190aW1lX3QgZW5kID0ga2V5aGFuZGxlcl9sb2NrX3RpbWVvdXQoKTsgICAgICAg IFwKKyAgICB0eXBlIHJldDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg XAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBc CisgICAgZG8geyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwK KyAgICAgICAgcmV0ID0gbG9ja2Z1bmM7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAor ICAgICAgICBpZiAoIHJldCApICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisg ICAgICAgICAgICByZXR1cm4gcmV0OyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAg ICAgICAgY3B1X3JlbGF4KCk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAg IH0gd2hpbGUgKCBOT1coKSA8IGVuZCApOyAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBw cmludGsoIi0tPmxvY2sgY29uZmxpY3Q6ICIgYXJnKTsgICAgICAgICAgICAgICAgXAorICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgcmV0 dXJuIHJldAorCiAjZW5kaWYgLyogX19YRU5fS0VZSEFORExFUl9IX18gKi8KLS0gCjIuMTYuNAoK Cl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fClhlbi1kZXZl bCBtYWlsaW5nIGxpc3QKWGVuLWRldmVsQGxpc3RzLnhlbnByb2plY3Qub3JnCmh0dHBzOi8vbGlz dHMueGVucHJvamVjdC5vcmcvbWFpbG1hbi9saXN0aW5mby94ZW4tZGV2ZWw=