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.5 required=3.0 tests=DKIM_INVALID,DKIM_SIGNED, 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 DC085C4360C for ; Wed, 25 Sep 2019 18:11:26 +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 9665121D7F for ; Wed, 25 Sep 2019 18:11:26 +0000 (UTC) Authentication-Results: mail.kernel.org; dkim=fail reason="signature verification failed" (1024-bit key) header.d=citrix.com header.i=@citrix.com header.b="hzCPzEoB" DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org 9665121D7F Authentication-Results: mail.kernel.org; dmarc=none (p=none dis=none) header.from=citrix.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 1iDBkq-0001VV-HV; Wed, 25 Sep 2019 18:11:08 +0000 Received: from us1-rack-iad1.inumbo.com ([172.99.69.81]) by lists.xenproject.org with esmtp (Exim 4.89) (envelope-from ) id 1iDBkp-0001VP-MJ for xen-devel@lists.xenproject.org; Wed, 25 Sep 2019 18:11:07 +0000 X-Inumbo-ID: d6fbb6e6-dfbf-11e9-97fb-bc764e2007e4 Received: from esa3.hc3370-68.iphmx.com (unknown [216.71.145.155]) by localhost (Halon) with ESMTPS id d6fbb6e6-dfbf-11e9-97fb-bc764e2007e4; Wed, 25 Sep 2019 18:11:05 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=simple/simple; d=citrix.com; s=securemail; t=1569435065; h=from:to:cc:subject:date:message-id:in-reply-to: references:mime-version:content-transfer-encoding; bh=JIdAPQxinV4g6MqRn7/6P+175Wqm+Bu6KjGOgt/QOCo=; b=hzCPzEoB0e1S13gXqmnqTg4QssToNoOXbRDRI9STYtCO16m61HT2uwAp CwXF9U5I+GiMJitsD333kxnyv/rh/2gLtM0v1/KVacypB1mVk0KGf+30f S3MhNO5TN8p2HBTYZNN6e92jWKZzl+H957e4atnDR8BQYfBcaQBj2uog/ 8=; Authentication-Results: esa3.hc3370-68.iphmx.com; dkim=none (message not signed) header.i=none; spf=None smtp.pra=andrew.cooper3@citrix.com; spf=Pass smtp.mailfrom=Andrew.Cooper3@citrix.com; spf=None smtp.helo=postmaster@mail.citrix.com Received-SPF: None (esa3.hc3370-68.iphmx.com: no sender authenticity information available from domain of andrew.cooper3@citrix.com) identity=pra; client-ip=162.221.158.21; receiver=esa3.hc3370-68.iphmx.com; envelope-from="Andrew.Cooper3@citrix.com"; x-sender="andrew.cooper3@citrix.com"; x-conformance=sidf_compatible Received-SPF: Pass (esa3.hc3370-68.iphmx.com: domain of Andrew.Cooper3@citrix.com designates 162.221.158.21 as permitted sender) identity=mailfrom; client-ip=162.221.158.21; receiver=esa3.hc3370-68.iphmx.com; envelope-from="Andrew.Cooper3@citrix.com"; x-sender="Andrew.Cooper3@citrix.com"; x-conformance=sidf_compatible; x-record-type="v=spf1"; x-record-text="v=spf1 ip4:209.167.231.154 ip4:178.63.86.133 ip4:195.66.111.40/30 ip4:85.115.9.32/28 ip4:199.102.83.4 ip4:192.28.146.160 ip4:192.28.146.107 ip4:216.52.6.88 ip4:216.52.6.188 ip4:162.221.158.21 ip4:162.221.156.83 ~all" Received-SPF: None (esa3.hc3370-68.iphmx.com: no sender authenticity information available from domain of postmaster@mail.citrix.com) identity=helo; client-ip=162.221.158.21; receiver=esa3.hc3370-68.iphmx.com; envelope-from="Andrew.Cooper3@citrix.com"; x-sender="postmaster@mail.citrix.com"; x-conformance=sidf_compatible IronPort-SDR: 4MsnnZwf07hXv+TRpWIoYXk2npwC1U5+Egn4WrMiHacEFjfIfMz2sP6Av1zFgW4DMhc+J12/+g t9cRp+6r59UJLvVNnr83ncNV2PSzbDW/HSdD1mi6UVVJt/2zsgATG4SiXcTE1kcGALgv9PHI5R SVa2LlE6XxSmPB1m6crulB5paRwXJisBtaDrV8O16s9cexHg6mwKoVrgqMWMVO1KiJdZFK/va7 4bhVqrrJlCB49+ZZoqL8HIHuNp7d0UilPqpMk0blTHvIm29Vfv26vul5KtFXwhbO8rmFJpb82Y Bek= X-SBRS: 2.7 X-MesageID: 6070613 X-Ironport-Server: esa3.hc3370-68.iphmx.com X-Remote-IP: 162.221.158.21 X-Policy: $RELAYED X-IronPort-AV: E=Sophos;i="5.64,548,1559534400"; d="scan'208";a="6070613" From: Andrew Cooper To: Xen-devel Date: Wed, 25 Sep 2019 19:11:00 +0100 Message-ID: <20190925181100.26580-1-andrew.cooper3@citrix.com> X-Mailer: git-send-email 2.11.0 In-Reply-To: <20190913192759.10795-9-andrew.cooper3@citrix.com> References: <20190913192759.10795-9-andrew.cooper3@citrix.com> MIME-Version: 1.0 Subject: [Xen-devel] [PATCH v3 08/10] tools/libxc: Rework xc_cpuid_apply_policy() to use {get, set}_cpu_policy() 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: Andrew Cooper , Ian Jackson , Wei Liu , Jan Beulich , =?UTF-8?q?Roger=20Pau=20Monn=C3=A9?= Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Errors-To: xen-devel-bounces@lists.xenproject.org Sender: "Xen-devel" VGhlIHB1cnBvc2Ugb2YgdGhpcyBjaGFuZ2UgaXMgdG8gc3RvcCB1c2luZyB4Y19jcHVpZF9kb19k b21jdGwoKSwgYW5kIHRvIHN0b3AKYmFzaW5nIGRlY2lzaW9ucyBvbiBhIGxvY2FsIENQVUlEIGlu c3RydWN0aW9uLiAgVGhpcyBpcyBub3QgYSBjb3JyZWN0IG9yCmFwcHJvcHJpYXRlIHdheSB0byBj b25zdHJ1Y3QgcG9saWN5IGluZm9ybWF0aW9uIGZvciBvdGhlciBkb21haW5zLgoKVGhlIG92ZXJ3 aGVsbWluZyBtYWpvcml0eSBvZiB0aGlzIGxvZ2ljIGlzIHJlZHVuZGFudCB3aXRoIHRoZSBwb2xp Y3kgbG9naWMgaW4KWGVuLCBidXQgaGFzIGEgaGFiaXQgb2YgYmVjb21pbmcgc3RhbGUgKGUuZy4g Yy9zIDk3ZTRlYmRjZDc2IHJlc3VsdGluZyBpbiB0aGUKQ1BVSUQuN1sxXS5lYXggbm90IGJlaW5n IG9mZmVyZWQgdG8gZ3Vlc3RzIGV2ZW4gd2hlbiBYZW4gaXMgaGFwcHkgd2l0aCB0aGUKY29udGVu dCkuCgpUaGVyZSBhcmUgYSBmZXcgc3VidGxlIHNpZGUgZWZmZWN0cyB3aGljaCBuZWVkIHRvIHJl bWFpbiBpbiBwbGFjZS4gIEEKc3VjY2Vzc2Z1bCBjYWxsIHRvIHhjX2NwdWlkX2FwcGx5X3BvbGlj eSgpIG11c3QgcmVzdWx0IGluIGEgY2FsbCB0bwp4Y19zZXRfZG9tYWluX2NwdV9wb2xpY3koKSBi ZWNhdXNlIHRoYXQgaXMgY3VycmVudGx5IHRoZSBvbmx5IHdheSB0aGUKSVRTQy9WTVgvU1ZNIGJp dHMgYmVjb21lIHJlZmxlY3RlZCBpbiB0aGUgZ3Vlc3RzIENQVUlEIHZpZXcuICBGdXR1cmUgY2xl YW51cAp3aWxsIHJlbW92ZSB0aGlzIHNpZGUgZWZmZWN0LgoKVGhlIHRvcG9sb2d5IHR3ZWFrcyBh cmUgbG9jYWwgdG8gbGlieGMuICBFeHRlbmQgc3RydWN0IGNwdWlkX3BvbGljeSB3aXRoCmVub3Vn aCBuYW1lZCBmaWVsZHMgdG8gZXhwcmVzcyB0aGUgbG9naWMsIGJ1dCBrZWVwIGl0IGlkZW50aWNh bCB0byBiZWZvcmUuCkZpeGluZyB0b3BvbG9neSByZXByZXNlbnRhdGlvbiBpcyBhbm90aGVyIGZ1 dHVyZSBhcmVhIG9mIHdvcmsuCgpObyAoZXhwZWN0ZWQpIGNoYW5nZSBpbiBiZWhhdmlvdXIuCgpT aWduZWQtb2ZmLWJ5OiBBbmRyZXcgQ29vcGVyIDxhbmRyZXcuY29vcGVyM0BjaXRyaXguY29tPgpS ZXZpZXdlZC1ieTogSmFuIEJldWxpY2ggPGpiZXVsaWNoQHN1c2UuY29tPgpBY2tlZC1ieTogV2Vp IExpdSA8d2xAeGVuLm9yZz4KLS0tCkNDOiBKYW4gQmV1bGljaCA8SkJldWxpY2hAc3VzZS5jb20+ CkNDOiBXZWkgTGl1IDx3bEB4ZW4ub3JnPgpDQzogUm9nZXIgUGF1IE1vbm7DqSA8cm9nZXIucGF1 QGNpdHJpeC5jb20+CkNDOiBJYW4gSmFja3NvbiA8SWFuLkphY2tzb25AY2l0cml4LmNvbT4KClRo ZSByZXBvc2l0aW9uaW5nIG9mIHhjX2NwdWlkX2FwcGx5X3BvbGljeSgpIHJlbGF0aXZlIHRvIHhj X2NwdWlkX3NldCgpIGlzCnNpbXBseSB0byBtYWtlIHRoZSBkaWZmIHJlYWRhYmxlLiAgSXQgaXMg Y29tcGxldGVseSBpbGxlZ2libGUgb3RoZXJ3aXNlLgoKdjI6CiAqIFJld29yZCB0aGUgY29tbWl0 IG1lc3NhZ2UgdG8gZHJvcCBBVlg1MTJfQkYxNgogKiBJbml0aWFsaXNlIGhvc3RfZmVhdHVyZXNl dFtdIGp1c3QgaW4gY2FzZS4KdjM6CiAqIFVzZSBkb21haW4gZGVmYXVsdCBwb2xpY3kgdG8gcmVz dG9yZSB0aGUgcHJldmlvdXMgYmVoYXZpb3VyLgogKiBSZWJhc2Ugb3ZlciBBTUQgUm9tZSBDUFVJ RCBjaGFuZ2VzLgotLS0KIHRvb2xzL2xpYnhjL3hjX2NwdWlkX3g4Ni5jICAgICAgfCA4MzMgKysr KysrKysrKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogeGVuL2luY2x1ZGUveGVuL2xp Yi94ODYvY3B1aWQuaCB8ICAxMSArLQogMiBmaWxlcyBjaGFuZ2VkLCAyMTkgaW5zZXJ0aW9ucygr KSwgNjI1IGRlbGV0aW9ucygtKQoKZGlmZiAtLWdpdCBhL3Rvb2xzL2xpYnhjL3hjX2NwdWlkX3g4 Ni5jIGIvdG9vbHMvbGlieGMveGNfY3B1aWRfeDg2LmMKaW5kZXggNDNiZGExMGQ5Ni4uNGFlNGU2 ODk5YyAxMDA2NDQKLS0tIGEvdG9vbHMvbGlieGMveGNfY3B1aWRfeDg2LmMKKysrIGIvdG9vbHMv bGlieGMveGNfY3B1aWRfeDg2LmMKQEAgLTM0LDE4ICszNCwxMyBAQCBlbnVtIHsKIAogI2luY2x1 ZGUgPHhlbi9hc20veDg2LXZlbmRvcnMuaD4KIAotI2luY2x1ZGUgPHhlbi9saWIveDg2L2NwdWlk Lmg+Ci0jaW5jbHVkZSA8eGVuL2xpYi94ODYvbXNyLmg+CisjaW5jbHVkZSA8eGVuL2xpYi94ODYv Y3B1LXBvbGljeS5oPgogCiAjZGVmaW5lIGJpdG1hc2tvZihpZHgpICAgICAgKDF1IDw8ICgoaWR4 KSAmIDMxKSkKICNkZWZpbmUgZmVhdHVyZXdvcmRfb2YoaWR4KSAoKGlkeCkgPj4gNSkKICNkZWZp bmUgY2xlYXJfZmVhdHVyZShpZHgsIGRzdCkgKChkc3QpICY9IH5iaXRtYXNrb2YoaWR4KSkKICNk ZWZpbmUgc2V0X2ZlYXR1cmUoaWR4LCBkc3QpICAgKChkc3QpIHw9ICBiaXRtYXNrb2YoaWR4KSkK IAotI2RlZmluZSBERUZfTUFYX0JBU0UgMHgwMDAwMDAwZHUKLSNkZWZpbmUgREVGX01BWF9JTlRF TEVYVCAgMHg4MDAwMDAwOHUKLSNkZWZpbmUgREVGX01BWF9BTURFWFQgICAgMHg4MDAwMDAxY3UK LQogaW50IHhjX2dldF9jcHVfbGV2ZWxsaW5nX2NhcHMoeGNfaW50ZXJmYWNlICp4Y2gsIHVpbnQz Ml90ICpjYXBzKQogewogICAgIERFQ0xBUkVfU1lTQ1RMOwpAQCAtMjgyLDYyMiArMjc3LDYgQEAg aW50IHhjX3NldF9kb21haW5fY3B1X3BvbGljeSh4Y19pbnRlcmZhY2UgKnhjaCwgdWludDMyX3Qg ZG9taWQsCiAgICAgcmV0dXJuIHJldDsKIH0KIAotc3RydWN0IGNwdWlkX2RvbWFpbl9pbmZvCi17 Ci0gICAgdW5zaWduZWQgaW50IHZlbmRvcjsgLyogWDg2X1ZFTkRPUl8qICovCi0KLSAgICBib29s IGh2bTsKLSAgICB1aW50NjRfdCB4ZmVhdHVyZV9tYXNrOwotCi0gICAgLyoKLSAgICAgKiBDYXJl ZnVsIHdpdGggZmVhdHVyZXNldCBsZW5ndGhzLgotICAgICAqCi0gICAgICogQ29kZSBpbiB0aGlz IGZpbGUgcmVxdWlyZXMgZmVhdHVyZXNldCB0byBoYXZlIGF0IGxlYXN0Ci0gICAgICogeGNfZ2V0 X2NwdV9mZWF0dXJlc2V0X3NpemUoKSBlbnRyaWVzLiAgVGhpcyBpcyBhIGxpYnhjIGNvbXBpbGV0 aW1lCi0gICAgICogY29uc3RhbnQuCi0gICAgICoKLSAgICAgKiBUaGUgZmVhdHVyZXNldCBsZW5n dGggdXNlZCBieSB0aGUgaHlwZXJ2aXNvciBtYXkgYmUgZGlmZmVyZW50LiAgSWYgdGhlCi0gICAg ICogaHlwZXJ2aXNvciB2ZXJzaW9uIGlzIGxvbmdlciwgWEVOX1NZU0NUTF9nZXRfY3B1X2ZlYXR1 cmVzZXQgd2lsbCBmYWlsCi0gICAgICogd2l0aCAtRU5PQlVGUywgYW5kIGxpYnhjIHJlYWxseSBk b2VzIG5lZWQgcmVidWlsZGluZy4gIElmIHRoZQotICAgICAqIGh5cGVydmlzb3IgdmVyc2lvbiBp cyBzaG9ydGVyLCBpdCBpcyBzYWZlIHRvIHplcm8tZXh0ZW5kLgotICAgICAqLwotICAgIHVpbnQz Ml90ICpmZWF0dXJlc2V0OwotICAgIHVuc2lnbmVkIGludCBucl9mZWF0dXJlczsKLQotICAgIC8q IFBWLW9ubHkgaW5mb3JtYXRpb24uICovCi0gICAgYm9vbCBwdjY0OwotCi0gICAgLyogSFZNLW9u bHkgaW5mb3JtYXRpb24uICovCi0gICAgYm9vbCBwYWU7Ci0gICAgYm9vbCBuZXN0ZWRodm07Ci19 OwotCi1zdGF0aWMgdm9pZCBjcHVpZChjb25zdCB1bnNpZ25lZCBpbnQgKmlucHV0LCB1bnNpZ25l ZCBpbnQgKnJlZ3MpCi17Ci0gICAgdW5zaWduZWQgaW50IGNvdW50ID0gKGlucHV0WzFdID09IFhF Tl9DUFVJRF9JTlBVVF9VTlVTRUQpID8gMCA6IGlucHV0WzFdOwotI2lmZGVmIF9faTM4Nl9fCi0g ICAgLyogVXNlIHRoZSBzdGFjayB0byBhdm9pZCByZWcgY29uc3RyYWludCBmYWlsdXJlcyB3aXRo IHNvbWUgZ2NjIGZsYWdzICovCi0gICAgYXNtICgKLSAgICAgICAgInB1c2ggJSVlYng7IHB1c2gg JSVlZHhcblx0IgotICAgICAgICAiY3B1aWRcblx0IgotICAgICAgICAibW92ICUlZWJ4LDQoJTQp XG5cdCIKLSAgICAgICAgIm1vdiAlJWVkeCwxMiglNClcblx0IgotICAgICAgICAicG9wICUlZWR4 OyBwb3AgJSVlYnhcblx0IgotICAgICAgICA6ICI9YSIgKHJlZ3NbMF0pLCAiPWMiIChyZWdzWzJd KQotICAgICAgICA6ICIwIiAoaW5wdXRbMF0pLCAiMSIgKGNvdW50KSwgIlMiIChyZWdzKQotICAg ICAgICA6ICJtZW1vcnkiICk7Ci0jZWxzZQotICAgIGFzbSAoCi0gICAgICAgICJjcHVpZCIKLSAg ICAgICAgOiAiPWEiIChyZWdzWzBdKSwgIj1iIiAocmVnc1sxXSksICI9YyIgKHJlZ3NbMl0pLCAi PWQiIChyZWdzWzNdKQotICAgICAgICA6ICIwIiAoaW5wdXRbMF0pLCAiMiIgKGNvdW50KSApOwot I2VuZGlmCi19Ci0KLXN0YXRpYyBpbnQgZ2V0X2NwdWlkX2RvbWFpbl9pbmZvKHhjX2ludGVyZmFj ZSAqeGNoLCB1aW50MzJfdCBkb21pZCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IHN0cnVjdCBjcHVpZF9kb21haW5faW5mbyAqaW5mbywKLSAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIGNvbnN0IHVpbnQzMl90ICpmZWF0dXJlc2V0LAotICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgdW5zaWduZWQgaW50IG5yX2ZlYXR1cmVzKQotewotICAgIHN0cnVjdCB4 ZW5fZG9tY3RsIGRvbWN0bCA9IHt9OwotICAgIHhjX2RvbWluZm9fdCBkaTsKLSAgICB1bnNpZ25l ZCBpbnQgaW5bMl0gPSB7IDAsIH4wVSB9LCByZWdzWzRdOwotICAgIHVuc2lnbmVkIGludCBpLCBo b3N0X25yX2ZlYXR1cmVzID0geGNfZ2V0X2NwdV9mZWF0dXJlc2V0X3NpemUoKTsKLSAgICBpbnQg cmM7Ci0KLSAgICBjcHVpZChpbiwgcmVncyk7Ci0gICAgaW5mby0+dmVuZG9yID0geDg2X2NwdWlk X2xvb2t1cF92ZW5kb3IocmVnc1sxXSwgcmVnc1syXSwgcmVnc1szXSk7Ci0KLSAgICBpZiAoIHhj X2RvbWFpbl9nZXRpbmZvKHhjaCwgZG9taWQsIDEsICZkaSkgIT0gMSB8fAotICAgICAgICAgZGku ZG9taWQgIT0gZG9taWQgKQotICAgICAgICByZXR1cm4gLUVTUkNIOwotCi0gICAgaW5mby0+aHZt ID0gZGkuaHZtOwotCi0gICAgaW5mby0+ZmVhdHVyZXNldCA9IGNhbGxvYyhob3N0X25yX2ZlYXR1 cmVzLCBzaXplb2YoKmluZm8tPmZlYXR1cmVzZXQpKTsKLSAgICBpZiAoICFpbmZvLT5mZWF0dXJl c2V0ICkKLSAgICAgICAgcmV0dXJuIC1FTk9NRU07Ci0KLSAgICBpbmZvLT5ucl9mZWF0dXJlcyA9 IGhvc3RfbnJfZmVhdHVyZXM7Ci0KLSAgICBpZiAoIGZlYXR1cmVzZXQgKQotICAgIHsKLSAgICAg ICAgLyoKLSAgICAgICAgICogVGhlIHVzZXIgc3VwcGxpZWQgZmVhdHVyZXNldCBtYXkgYmUgc2hv cnRlciBvciBsb25nZXIgdGhhbgotICAgICAgICAgKiBob3N0X25yX2ZlYXR1cmVzLiAgU2hvcnRl ciBpcyBmaW5lLCBhbmQgd2Ugd2lsbCB6ZXJvLWV4dGVuZC4KLSAgICAgICAgICogTG9uZ2VyIGlz IGZpbmUsIHNvIGxvbmcgYXMgaXQgb25seSBwYWRkZWQgd2l0aCB6ZXJvcy4KLSAgICAgICAgICov Ci0gICAgICAgIHVuc2lnbmVkIGludCBmc2xlbiA9IG1pbihob3N0X25yX2ZlYXR1cmVzLCBucl9m ZWF0dXJlcyk7Ci0KLSAgICAgICAgbWVtY3B5KGluZm8tPmZlYXR1cmVzZXQsIGZlYXR1cmVzZXQs Ci0gICAgICAgICAgICAgICBmc2xlbiAqIHNpemVvZigqaW5mby0+ZmVhdHVyZXNldCkpOwotCi0g ICAgICAgIC8qIENoZWNrIGZvciB0cnVuY2F0ZWQgc2V0IGJpdHMuICovCi0gICAgICAgIGZvciAo IGkgPSBmc2xlbjsgaSA8IG5yX2ZlYXR1cmVzOyArK2kgKQotICAgICAgICAgICAgaWYgKCBmZWF0 dXJlc2V0W2ldICE9IDAgKQotICAgICAgICAgICAgICAgIHJldHVybiAtRU9QTk9UU1VQUDsKLSAg ICB9Ci0gICAgZWxzZQotICAgIHsKLSAgICAgICAgcmMgPSB4Y19nZXRfY3B1X2ZlYXR1cmVzZXQo eGNoLCAoaW5mby0+aHZtCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ID8gWEVOX1NZU0NUTF9jcHVfZmVhdHVyZXNldF9odm0KLSAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgOiBYRU5fU1lTQ1RMX2NwdV9mZWF0dXJlc2V0X3B2KSwKLSAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJmhvc3RfbnJfZmVhdHVyZXMsIGluZm8tPmZl YXR1cmVzZXQpOwotICAgICAgICBpZiAoIHJjICkKLSAgICAgICAgICAgIHJldHVybiAtZXJybm87 Ci0gICAgfQotCi0gICAgLyogR2V0IHhzdGF0ZSBpbmZvcm1hdGlvbi4gKi8KLSAgICBkb21jdGwu Y21kID0gWEVOX0RPTUNUTF9nZXR2Y3B1ZXh0c3RhdGU7Ci0gICAgZG9tY3RsLmRvbWFpbiA9IGRv bWlkOwotICAgIHJjID0gZG9fZG9tY3RsKHhjaCwgJmRvbWN0bCk7Ci0gICAgaWYgKCByYyApCi0g ICAgICAgIHJldHVybiAtZXJybm87Ci0KLSAgICBpbmZvLT54ZmVhdHVyZV9tYXNrID0gZG9tY3Rs LnUudmNwdWV4dHN0YXRlLnhmZWF0dXJlX21hc2s7Ci0KLSAgICBpZiAoIGRpLmh2bSApCi0gICAg ewotICAgICAgICB1aW50NjRfdCB2YWw7Ci0KLSAgICAgICAgcmMgPSB4Y19odm1fcGFyYW1fZ2V0 KHhjaCwgZG9taWQsIEhWTV9QQVJBTV9QQUVfRU5BQkxFRCwgJnZhbCk7Ci0gICAgICAgIGlmICgg cmMgKQotICAgICAgICAgICAgcmV0dXJuIC1lcnJubzsKLQotICAgICAgICBpbmZvLT5wYWUgPSAh IXZhbDsKLQotICAgICAgICByYyA9IHhjX2h2bV9wYXJhbV9nZXQoeGNoLCBkb21pZCwgSFZNX1BB UkFNX05FU1RFREhWTSwgJnZhbCk7Ci0gICAgICAgIGlmICggcmMgKQotICAgICAgICAgICAgcmV0 dXJuIC1lcnJubzsKLQotICAgICAgICBpbmZvLT5uZXN0ZWRodm0gPSAhIXZhbDsKLSAgICB9Ci0g ICAgZWxzZQotICAgIHsKLSAgICAgICAgdW5zaWduZWQgaW50IHdpZHRoOwotCi0gICAgICAgIHJj ID0geGNfZG9tYWluX2dldF9ndWVzdF93aWR0aCh4Y2gsIGRvbWlkLCAmd2lkdGgpOwotICAgICAg ICBpZiAoIHJjICkKLSAgICAgICAgICAgIHJldHVybiAtZXJybm87Ci0KLSAgICAgICAgaW5mby0+ cHY2NCA9ICh3aWR0aCA9PSA4KTsKLSAgICB9Ci0KLSAgICByZXR1cm4gMDsKLX0KLQotc3RhdGlj IHZvaWQgZnJlZV9jcHVpZF9kb21haW5faW5mbyhzdHJ1Y3QgY3B1aWRfZG9tYWluX2luZm8gKmlu Zm8pCi17Ci0gICAgZnJlZShpbmZvLT5mZWF0dXJlc2V0KTsKLX0KLQotc3RhdGljIHZvaWQgYW1k X3hjX2NwdWlkX3BvbGljeShjb25zdCBzdHJ1Y3QgY3B1aWRfZG9tYWluX2luZm8gKmluZm8sCi0g ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVuc2lnbmVkIGludCAqaW5wdXQs IHVuc2lnbmVkIGludCAqcmVncykKLXsKLSAgICBzd2l0Y2ggKCBpbnB1dFswXSApCi0gICAgewot ICAgIGNhc2UgMHgwMDAwMDAwMjoKLSAgICBjYXNlIDB4MDAwMDAwMDQ6Ci0gICAgICAgIHJlZ3Nb MF0gPSByZWdzWzFdID0gcmVnc1syXSA9IHJlZ3NbM10gPSAwOwotICAgICAgICBicmVhazsKLQot ICAgIGNhc2UgMHg4MDAwMDAwMDoKLSAgICAgICAgaWYgKCByZWdzWzBdID4gREVGX01BWF9BTURF WFQgKQotICAgICAgICAgICAgcmVnc1swXSA9IERFRl9NQVhfQU1ERVhUOwotICAgICAgICBicmVh azsKLQotICAgIGNhc2UgMHg4MDAwMDAwODoKLSAgICAgICAgLyoKLSAgICAgICAgICogRUNYWzE1 OjEyXSBpcyBBcGljSWRDb3JlU2l6ZS4KLSAgICAgICAgICogRUNYWzc6MF0gaXMgTnVtYmVyT2ZD b3JlcyAobWludXMgb25lKS4KLSAgICAgICAgICogVXBkYXRlIHRvIHJlZmxlY3QgdkxBUElDX0lE ID0gdkNQVV9JRCAqIDIuICBCdXQgbWFrZSBzdXJlIHRvIGF2b2lkCi0gICAgICAgICAqIC0gb3Zl cmZsb3csCi0gICAgICAgICAqIC0gZ29pbmcgb3V0IG9mIHN5bmMgd2l0aCBsZWFmIDEgRUJYWzIz OjE2XSwKLSAgICAgICAgICogLSBpbmNyZW1lbnRpbmcgQXBpY0lkQ29yZVNpemUgd2hlbiBpdCdz IHplcm8gKHdoaWNoIGNoYW5nZXMgdGhlCi0gICAgICAgICAqICAgbWVhbmluZyBvZiBiaXRzIDc6 MCkuCi0gICAgICAgICAqLwotICAgICAgICBpZiAoIChyZWdzWzJdICYgMHhmZnUpIDwgMHg3ZnUg KQotICAgICAgICB7Ci0gICAgICAgICAgICBpZiAoIChyZWdzWzJdICYgMHhmMDAwdSkgJiYgKHJl Z3NbMl0gJiAweGYwMDB1KSAhPSAweGYwMDB1ICkKLSAgICAgICAgICAgICAgICByZWdzWzJdID0g KChyZWdzWzJdICsgMHgxMDAwdSkgJiAweGYwMDB1KSB8IChyZWdzWzJdICYgMHhmZnUpOwotICAg ICAgICAgICAgcmVnc1syXSA9IChyZWdzWzJdICYgMHhmMDAwdSkgfCAoKHJlZ3NbMl0gJiAweDdm dSkgPDwgMSkgfCAxdTsKLSAgICAgICAgfQotICAgICAgICBicmVhazsKLQotICAgIGNhc2UgMHg4 MDAwMDAwYTogewotICAgICAgICBpZiAoICFpbmZvLT5uZXN0ZWRodm0gKQotICAgICAgICB7Ci0g ICAgICAgICAgICByZWdzWzBdID0gcmVnc1sxXSA9IHJlZ3NbMl0gPSByZWdzWzNdID0gMDsKLSAg ICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0KLSNkZWZpbmUgU1ZNX0ZFQVRVUkVfTlBUICAg ICAgICAgICAgMHgwMDAwMDAwMSAvKiBOZXN0ZWQgcGFnZSB0YWJsZSBzdXBwb3J0ICovCi0jZGVm aW5lIFNWTV9GRUFUVVJFX0xCUlYgICAgICAgICAgIDB4MDAwMDAwMDIgLyogTEJSIHZpcnR1YWxp emF0aW9uIHN1cHBvcnQgKi8KLSNkZWZpbmUgU1ZNX0ZFQVRVUkVfU1ZNTCAgICAgICAgICAgMHgw MDAwMDAwNCAvKiBTVk0gbG9ja2luZyBNU1Igc3VwcG9ydCAqLwotI2RlZmluZSBTVk1fRkVBVFVS RV9OUklQUyAgICAgICAgICAweDAwMDAwMDA4IC8qIE5leHQgUklQIHNhdmUgb24gVk1FWElUICov Ci0jZGVmaW5lIFNWTV9GRUFUVVJFX1RTQ1JBVEVNU1IgICAgIDB4MDAwMDAwMTAgLyogVFNDIHJh dGlvIE1TUiBzdXBwb3J0ICovCi0jZGVmaW5lIFNWTV9GRUFUVVJFX1ZNQ0JDTEVBTiAgICAgIDB4 MDAwMDAwMjAgLyogVk1DQiBjbGVhbiBiaXRzIHN1cHBvcnQgKi8KLSNkZWZpbmUgU1ZNX0ZFQVRV UkVfRkxVU0hCWUFTSUQgICAgMHgwMDAwMDA0MCAvKiBUTEIgZmx1c2ggYnkgQVNJRCBzdXBwb3J0 ICovCi0jZGVmaW5lIFNWTV9GRUFUVVJFX0RFQ09ERUFTU0lTVFMgIDB4MDAwMDAwODAgLyogRGVj b2RlIGFzc2lzdHMgc3VwcG9ydCAqLwotI2RlZmluZSBTVk1fRkVBVFVSRV9QQVVTRUZJTFRFUiAg ICAweDAwMDAwNDAwIC8qIFBhdXNlIGludGVyY2VwdCBmaWx0ZXIgKi8KLQotICAgICAgICAvKiBQ YXNzIDE6IE9ubHkgcGFzc3Rocm91Z2ggU1ZNIGZlYXR1cmVzIHdoaWNoIGFyZQotICAgICAgICAg KiBhdmFpbGFibGUgaW4gaHcgYW5kIHdoaWNoIGFyZSBpbXBsZW1lbnRlZAotICAgICAgICAgKi8K LSAgICAgICAgcmVnc1szXSAmPSAoU1ZNX0ZFQVRVUkVfTlBUIHwgU1ZNX0ZFQVRVUkVfTEJSViB8 IFwKLSAgICAgICAgICAgIFNWTV9GRUFUVVJFX05SSVBTIHwgU1ZNX0ZFQVRVUkVfUEFVU0VGSUxU RVIgfCBcCi0gICAgICAgICAgICBTVk1fRkVBVFVSRV9ERUNPREVBU1NJU1RTKTsKLQotICAgICAg ICAvKiBQYXNzIDI6IEFsd2F5cyBlbmFibGUgU1ZNIGZlYXR1cmVzIHdoaWNoIGFyZSBlbXVsYXRl ZCAqLwotICAgICAgICByZWdzWzNdIHw9IFNWTV9GRUFUVVJFX1ZNQ0JDTEVBTiB8IFNWTV9GRUFU VVJFX1RTQ1JBVEVNU1I7Ci0gICAgICAgIGJyZWFrOwotICAgIH0KLQotICAgIH0KLX0KLQotc3Rh dGljIHZvaWQgaW50ZWxfeGNfY3B1aWRfcG9saWN5KGNvbnN0IHN0cnVjdCBjcHVpZF9kb21haW5f aW5mbyAqaW5mbywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1bnNp Z25lZCBpbnQgKmlucHV0LCB1bnNpZ25lZCBpbnQgKnJlZ3MpCi17Ci0gICAgc3dpdGNoICggaW5w dXRbMF0gKQotICAgIHsKLSAgICBjYXNlIDB4MDAwMDAwMDQ6Ci0gICAgICAgIC8qCi0gICAgICAg ICAqIEVBWFszMToyNl0gaXMgTWF4aW11bSBDb3JlcyBQZXIgUGFja2FnZSAobWludXMgb25lKS4K LSAgICAgICAgICogVXBkYXRlIHRvIHJlZmxlY3QgdkxBUElDX0lEID0gdkNQVV9JRCAqIDIuCi0g ICAgICAgICAqLwotICAgICAgICByZWdzWzBdID0gKCgocmVnc1swXSAmIDB4N2MwMDAwMDB1KSA8 PCAxKSB8IDB4MDQwMDAwMDB1IHwKLSAgICAgICAgICAgICAgICAgICAocmVnc1swXSAmIDB4M2Zm dSkpOwotICAgICAgICByZWdzWzNdICY9IDB4M2ZmdTsKLSAgICAgICAgYnJlYWs7Ci0KLSAgICBj YXNlIDB4ODAwMDAwMDA6Ci0gICAgICAgIGlmICggcmVnc1swXSA+IERFRl9NQVhfSU5URUxFWFQg KQotICAgICAgICAgICAgcmVnc1swXSA9IERFRl9NQVhfSU5URUxFWFQ7Ci0gICAgICAgIGJyZWFr OwotCi0gICAgY2FzZSAweDgwMDAwMDA1OgotICAgICAgICByZWdzWzBdID0gcmVnc1sxXSA9IHJl Z3NbMl0gPSAwOwotICAgICAgICBicmVhazsKLQotICAgIGNhc2UgMHg4MDAwMDAwODoKLSAgICAg ICAgLyogTWFzayBBTUQgTnVtYmVyIG9mIENvcmVzIGluZm9ybWF0aW9uLiAqLwotICAgICAgICBy ZWdzWzJdID0gMDsKLSAgICAgICAgYnJlYWs7Ci0gICAgfQotfQotCi1zdGF0aWMgdm9pZCB4Y19j cHVpZF9odm1fcG9saWN5KGNvbnN0IHN0cnVjdCBjcHVpZF9kb21haW5faW5mbyAqaW5mbywKLSAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdW5zaWduZWQgaW50ICppbnB1dCwg dW5zaWduZWQgaW50ICpyZWdzKQotewotICAgIHN3aXRjaCAoIGlucHV0WzBdICkKLSAgICB7Ci0g ICAgY2FzZSAweDAwMDAwMDAwOgotICAgICAgICBpZiAoIHJlZ3NbMF0gPiBERUZfTUFYX0JBU0Ug KQotICAgICAgICAgICAgcmVnc1swXSA9IERFRl9NQVhfQkFTRTsKLSAgICAgICAgYnJlYWs7Ci0K LSAgICBjYXNlIDB4MDAwMDAwMDE6Ci0gICAgICAgIC8qCi0gICAgICAgICAqIEVCWFsyMzoxNl0g aXMgTWF4aW11bSBMb2dpY2FsIFByb2Nlc3NvcnMgUGVyIFBhY2thZ2UuCi0gICAgICAgICAqIFVw ZGF0ZSB0byByZWZsZWN0IHZMQVBJQ19JRCA9IHZDUFVfSUQgKiAyLCBidXQgbWFrZSBzdXJlIHRv IGF2b2lkCi0gICAgICAgICAqIG92ZXJmbG93LgotICAgICAgICAgKi8KLSAgICAgICAgaWYgKCAh KHJlZ3NbMV0gJiAweDAwODAwMDAwdSkgKQotICAgICAgICAgICAgcmVnc1sxXSA9IChyZWdzWzFd ICYgMHgwMDAwZmZmZnUpIHwgKChyZWdzWzFdICYgMHgwMDdmMDAwMHUpIDw8IDEpOwotICAgICAg ICBlbHNlCi0gICAgICAgICAgICByZWdzWzFdICY9IDB4MDBmZmZmZmZ1OwotCi0gICAgICAgIHJl Z3NbMl0gPSBpbmZvLT5mZWF0dXJlc2V0W2ZlYXR1cmV3b3JkX29mKFg4Nl9GRUFUVVJFX1NTRTMp XTsKLSAgICAgICAgcmVnc1szXSA9IChpbmZvLT5mZWF0dXJlc2V0W2ZlYXR1cmV3b3JkX29mKFg4 Nl9GRUFUVVJFX0ZQVSldIHwKLSAgICAgICAgICAgICAgICAgICBiaXRtYXNrb2YoWDg2X0ZFQVRV UkVfSFRUKSk7Ci0gICAgICAgIGJyZWFrOwotCi0gICAgY2FzZSAweDAwMDAwMDA3OiAvKiBJbnRl bC1kZWZpbmVkIENQVSBmZWF0dXJlcyAqLwotICAgICAgICBpZiAoIGlucHV0WzFdID09IDAgKQot ICAgICAgICB7Ci0gICAgICAgICAgICByZWdzWzFdID0gaW5mby0+ZmVhdHVyZXNldFtmZWF0dXJl d29yZF9vZihYODZfRkVBVFVSRV9GU0dTQkFTRSldOwotICAgICAgICAgICAgcmVnc1syXSA9IGlu Zm8tPmZlYXR1cmVzZXRbZmVhdHVyZXdvcmRfb2YoWDg2X0ZFQVRVUkVfUFJFRkVUQ0hXVDEpXTsK LSAgICAgICAgICAgIHJlZ3NbM10gPSBpbmZvLT5mZWF0dXJlc2V0W2ZlYXR1cmV3b3JkX29mKFg4 Nl9GRUFUVVJFX0FWWDUxMl80Vk5OSVcpXTsKLSAgICAgICAgfQotICAgICAgICBlbHNlCi0gICAg ICAgIHsKLSAgICAgICAgICAgIHJlZ3NbMV0gPSAwOwotICAgICAgICAgICAgcmVnc1syXSA9IDA7 Ci0gICAgICAgICAgICByZWdzWzNdID0gMDsKLSAgICAgICAgfQotICAgICAgICByZWdzWzBdID0g MDsKLSAgICAgICAgYnJlYWs7Ci0KLSAgICBjYXNlIDB4MDAwMDAwMGQ6IC8qIFhlbiBhdXRvbWF0 aWNhbGx5IGNhbGN1bGF0ZXMgYWxtb3N0IGV2ZXJ5dGhpbmcuICovCi0gICAgICAgIGlmICggaW5w dXRbMV0gPT0gMSApCi0gICAgICAgICAgICByZWdzWzBdID0gaW5mby0+ZmVhdHVyZXNldFtmZWF0 dXJld29yZF9vZihYODZfRkVBVFVSRV9YU0FWRU9QVCldOwotICAgICAgICBlbHNlCi0gICAgICAg ICAgICByZWdzWzBdID0gMDsKLSAgICAgICAgcmVnc1sxXSA9IHJlZ3NbMl0gPSByZWdzWzNdID0g MDsKLSAgICAgICAgYnJlYWs7Ci0KLSAgICBjYXNlIDB4ODAwMDAwMDA6Ci0gICAgICAgIC8qIFBh c3N0aHJvdWdoIHRvIGNwdSB2ZW5kb3Igc3BlY2lmaWMgZnVuY3Rpb25zICovCi0gICAgICAgIGJy ZWFrOwotCi0gICAgY2FzZSAweDgwMDAwMDAxOgotICAgICAgICByZWdzWzJdID0gKGluZm8tPmZl YXR1cmVzZXRbZmVhdHVyZXdvcmRfb2YoWDg2X0ZFQVRVUkVfTEFIRl9MTSldICYKLSAgICAgICAg ICAgICAgICAgICB+Yml0bWFza29mKFg4Nl9GRUFUVVJFX0NNUF9MRUdBQ1kpKTsKLSAgICAgICAg cmVnc1szXSA9IGluZm8tPmZlYXR1cmVzZXRbZmVhdHVyZXdvcmRfb2YoWDg2X0ZFQVRVUkVfU1lT Q0FMTCldOwotICAgICAgICBicmVhazsKLQotICAgIGNhc2UgMHg4MDAwMDAwNzoKLSAgICAgICAg LyoKLSAgICAgICAgICogS2VlcCBvbmx5IFRTQ0ludmFyaWFudC4gVGhpcyBtYXkgYmUgY2xlYXJl ZCBieSB0aGUgaHlwZXJ2aXNvcgotICAgICAgICAgKiBkZXBlbmRpbmcgb24gZ3Vlc3QgVFNDIGFu ZCBtaWdyYXRpb24gc2V0dGluZ3MuCi0gICAgICAgICAqLwotICAgICAgICByZWdzWzBdID0gcmVn c1sxXSA9IHJlZ3NbMl0gPSAwOwotICAgICAgICByZWdzWzNdICY9IDF1PDw4OwotICAgICAgICBi cmVhazsKLQotICAgIGNhc2UgMHg4MDAwMDAwODoKLSAgICAgICAgcmVnc1swXSAmPSAweDAwMDBm ZmZmdTsKLSAgICAgICAgcmVnc1sxXSA9IGluZm8tPmZlYXR1cmVzZXRbZmVhdHVyZXdvcmRfb2Yo WDg2X0ZFQVRVUkVfQ0xaRVJPKV07Ci0gICAgICAgIC8qIHJlZ3NbMl0gaGFuZGxlZCBpbiB0aGUg cGVyLXZlbmRvciBsb2dpYy4gKi8KLSAgICAgICAgcmVnc1szXSA9IDA7Ci0gICAgICAgIGJyZWFr OwotCi0gICAgY2FzZSAweDAwMDAwMDAyOiAvKiBJbnRlbCBjYWNoZSBpbmZvIChkdW1wZWQgYnkg QU1EIHBvbGljeSkgKi8KLSAgICBjYXNlIDB4MDAwMDAwMDQ6IC8qIEludGVsIGNhY2hlIGluZm8g KGR1bXBlZCBieSBBTUQgcG9saWN5KSAqLwotICAgIGNhc2UgMHgwMDAwMDAwYTogLyogQXJjaGl0 ZWN0dXJhbCBQZXJmb3JtYW5jZSBNb25pdG9yIEZlYXR1cmVzICovCi0gICAgY2FzZSAweDgwMDAw MDAyOiAvKiBQcm9jZXNzb3IgbmFtZSBzdHJpbmcgKi8KLSAgICBjYXNlIDB4ODAwMDAwMDM6IC8q IC4uLiBjb250aW51ZWQgICAgICAgICAqLwotICAgIGNhc2UgMHg4MDAwMDAwNDogLyogLi4uIGNv bnRpbnVlZCAgICAgICAgICovCi0gICAgY2FzZSAweDgwMDAwMDA1OiAvKiBBTUQgTDEgY2FjaGUv VExCIGluZm8gKGR1bXBlZCBieSBJbnRlbCBwb2xpY3kpICovCi0gICAgY2FzZSAweDgwMDAwMDA2 OiAvKiBBTUQgTDIvMyBjYWNoZS9UTEIgaW5mbyA7IEludGVsIEwyIGNhY2hlIGZlYXR1cmVzICov Ci0gICAgY2FzZSAweDgwMDAwMDBhOiAvKiBBTUQgU1ZNIGZlYXR1cmUgYml0cyAqLwotICAgIGNh c2UgMHg4MDAwMDAxOTogLyogQU1EIDFHIFRMQiAqLwotICAgIGNhc2UgMHg4MDAwMDAxYTogLyog QU1EIHBlcmYgaGludHMgKi8KLSAgICBjYXNlIDB4ODAwMDAwMWM6IC8qIEFNRCBsaWdodHdlaWdo dCBwcm9maWxpbmcgKi8KLSAgICAgICAgYnJlYWs7Ci0KLSAgICBkZWZhdWx0OgotICAgICAgICBy ZWdzWzBdID0gcmVnc1sxXSA9IHJlZ3NbMl0gPSByZWdzWzNdID0gMDsKLSAgICAgICAgYnJlYWs7 Ci0gICAgfQotCi0gICAgaWYgKCBpbmZvLT52ZW5kb3IgJiAoWDg2X1ZFTkRPUl9BTUQgfCBYODZf VkVORE9SX0hZR09OKSApCi0gICAgICAgIGFtZF94Y19jcHVpZF9wb2xpY3koaW5mbywgaW5wdXQs IHJlZ3MpOwotICAgIGVsc2UKLSAgICAgICAgaW50ZWxfeGNfY3B1aWRfcG9saWN5KGluZm8sIGlu cHV0LCByZWdzKTsKLX0KLQotc3RhdGljIHZvaWQgeGNfY3B1aWRfcHZfcG9saWN5KGNvbnN0IHN0 cnVjdCBjcHVpZF9kb21haW5faW5mbyAqaW5mbywKLSAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBjb25zdCB1bnNpZ25lZCBpbnQgKmlucHV0LCB1bnNpZ25lZCBpbnQgKnJlZ3MpCi17Ci0g ICAgc3dpdGNoICggaW5wdXRbMF0gKQotICAgIHsKLSAgICBjYXNlIDB4MDAwMDAwMDA6Ci0gICAg ICAgIGlmICggcmVnc1swXSA+IERFRl9NQVhfQkFTRSApCi0gICAgICAgICAgICByZWdzWzBdID0g REVGX01BWF9CQVNFOwotICAgICAgICBicmVhazsKLQotICAgIGNhc2UgMHgwMDAwMDAwMToKLSAg ICB7Ci0gICAgICAgIC8qIEhvc3QgdG9wb2xvZ3kgZXhwb3NlZCB0byBQViBndWVzdC4gIFByb3Zp ZGUgaG9zdCB2YWx1ZS4gKi8KLSAgICAgICAgYm9vbCBob3N0X2h0dCA9IHJlZ3NbM10gJiBiaXRt YXNrb2YoWDg2X0ZFQVRVUkVfSFRUKTsKLQotICAgICAgICAvKgotICAgICAgICAgKiBEb24ndCBw aWNrIGhvc3QncyBJbml0aWFsIEFQSUMgSUQgd2hpY2ggY2FuIGNoYW5nZSBmcm9tIHJ1bgotICAg ICAgICAgKiB0byBydW4uCi0gICAgICAgICAqLwotICAgICAgICByZWdzWzFdICY9IDB4MDBmZmZm ZmZ1OwotCi0gICAgICAgIHJlZ3NbMl0gPSBpbmZvLT5mZWF0dXJlc2V0W2ZlYXR1cmV3b3JkX29m KFg4Nl9GRUFUVVJFX1NTRTMpXTsKLSAgICAgICAgcmVnc1szXSA9IChpbmZvLT5mZWF0dXJlc2V0 W2ZlYXR1cmV3b3JkX29mKFg4Nl9GRUFUVVJFX0ZQVSldICYKLSAgICAgICAgICAgICAgICAgICB+ Yml0bWFza29mKFg4Nl9GRUFUVVJFX0hUVCkpOwotCi0gICAgICAgIGlmICggaG9zdF9odHQgKQot ICAgICAgICAgICAgcmVnc1szXSB8PSBiaXRtYXNrb2YoWDg2X0ZFQVRVUkVfSFRUKTsKLSAgICAg ICAgYnJlYWs7Ci0gICAgfQotCi0gICAgY2FzZSAweDAwMDAwMDA3OgotICAgICAgICBpZiAoIGlu cHV0WzFdID09IDAgKQotICAgICAgICB7Ci0gICAgICAgICAgICByZWdzWzFdID0gaW5mby0+ZmVh dHVyZXNldFtmZWF0dXJld29yZF9vZihYODZfRkVBVFVSRV9GU0dTQkFTRSldOwotICAgICAgICAg ICAgcmVnc1syXSA9IGluZm8tPmZlYXR1cmVzZXRbZmVhdHVyZXdvcmRfb2YoWDg2X0ZFQVRVUkVf UFJFRkVUQ0hXVDEpXTsKLSAgICAgICAgICAgIHJlZ3NbM10gPSBpbmZvLT5mZWF0dXJlc2V0W2Zl YXR1cmV3b3JkX29mKFg4Nl9GRUFUVVJFX0FWWDUxMl80Vk5OSVcpXTsKLSAgICAgICAgfQotICAg ICAgICBlbHNlCi0gICAgICAgIHsKLSAgICAgICAgICAgIHJlZ3NbMV0gPSAwOwotICAgICAgICAg ICAgcmVnc1syXSA9IDA7Ci0gICAgICAgICAgICByZWdzWzNdID0gMDsKLSAgICAgICAgfQotICAg ICAgICByZWdzWzBdID0gMDsKLSAgICAgICAgYnJlYWs7Ci0KLSAgICBjYXNlIDB4MDAwMDAwMGQ6 IC8qIFhlbiBhdXRvbWF0aWNhbGx5IGNhbGN1bGF0ZXMgYWxtb3N0IGV2ZXJ5dGhpbmcuICovCi0g ICAgICAgIGlmICggaW5wdXRbMV0gPT0gMSApCi0gICAgICAgICAgICByZWdzWzBdID0gaW5mby0+ ZmVhdHVyZXNldFtmZWF0dXJld29yZF9vZihYODZfRkVBVFVSRV9YU0FWRU9QVCldOwotICAgICAg ICBlbHNlCi0gICAgICAgICAgICByZWdzWzBdID0gMDsKLSAgICAgICAgcmVnc1sxXSA9IHJlZ3Nb Ml0gPSByZWdzWzNdID0gMDsKLSAgICAgICAgYnJlYWs7Ci0KLSAgICBjYXNlIDB4ODAwMDAwMDA6 Ci0gICAgewotICAgICAgICB1bnNpZ25lZCBpbnQgbWF4ID0gKGluZm8tPnZlbmRvciAmIChYODZf VkVORE9SX0FNRCB8IFg4Nl9WRU5ET1JfSFlHT04pKQotICAgICAgICAgICAgPyBERUZfTUFYX0FN REVYVCA6IERFRl9NQVhfSU5URUxFWFQ7Ci0KLSAgICAgICAgaWYgKCByZWdzWzBdID4gbWF4ICkK LSAgICAgICAgICAgIHJlZ3NbMF0gPSBtYXg7Ci0gICAgICAgIGJyZWFrOwotICAgIH0KLQotICAg IGNhc2UgMHg4MDAwMDAwMToKLSAgICB7Ci0gICAgICAgIC8qIEhvc3QgdG9wb2xvZ3kgZXhwb3Nl ZCB0byBQViBndWVzdC4gIFByb3ZpZGUgaG9zdCBDTVBfTEVHQUNZIHZhbHVlLiAqLwotICAgICAg ICBib29sIGhvc3RfY21wX2xlZ2FjeSA9IHJlZ3NbMl0gJiBiaXRtYXNrb2YoWDg2X0ZFQVRVUkVf Q01QX0xFR0FDWSk7Ci0KLSAgICAgICAgcmVnc1syXSA9IChpbmZvLT5mZWF0dXJlc2V0W2ZlYXR1 cmV3b3JkX29mKFg4Nl9GRUFUVVJFX0xBSEZfTE0pXSAmCi0gICAgICAgICAgICAgICAgICAgfmJp dG1hc2tvZihYODZfRkVBVFVSRV9DTVBfTEVHQUNZKSk7Ci0gICAgICAgIHJlZ3NbM10gPSBpbmZv LT5mZWF0dXJlc2V0W2ZlYXR1cmV3b3JkX29mKFg4Nl9GRUFUVVJFX1NZU0NBTEwpXTsKLQotICAg ICAgICBpZiAoIGhvc3RfY21wX2xlZ2FjeSApCi0gICAgICAgICAgICByZWdzWzJdIHw9IGJpdG1h c2tvZihYODZfRkVBVFVSRV9DTVBfTEVHQUNZKTsKLQotICAgICAgICBicmVhazsKLSAgICB9Ci0K LSAgICBjYXNlIDB4ODAwMDAwMDg6Ci0gICAgICAgIHJlZ3NbMF0gJj0gMHgwMDAwZmZmZnU7Ci0g ICAgICAgIHJlZ3NbMV0gPSBpbmZvLT5mZWF0dXJlc2V0W2ZlYXR1cmV3b3JkX29mKFg4Nl9GRUFU VVJFX0NMWkVSTyldOwotICAgICAgICByZWdzWzJdID0gcmVnc1szXSA9IDA7Ci0gICAgICAgIGJy ZWFrOwotCi0gICAgY2FzZSAweDAwMDAwMDA1OiAvKiBNT05JVE9SL01XQUlUICovCi0gICAgY2Fz ZSAweDAwMDAwMDBiOiAvKiBFeHRlbmRlZCBUb3BvbG9neSBFbnVtZXJhdGlvbiAqLwotICAgIGNh c2UgMHg4MDAwMDAwYTogLyogU1ZNIHJldmlzaW9uIGFuZCBmZWF0dXJlcyAqLwotICAgIGNhc2Ug MHg4MDAwMDAxYjogLyogSW5zdHJ1Y3Rpb24gQmFzZWQgU2FtcGxpbmcgKi8KLSAgICBjYXNlIDB4 ODAwMDAwMWM6IC8qIExpZ2h0IFdlaWdodCBQcm9maWxpbmcgKi8KLSAgICBjYXNlIDB4ODAwMDAw MWU6IC8qIEV4dGVuZGVkIHRvcG9sb2d5IHJlcG9ydGluZyAqLwotICAgICAgICByZWdzWzBdID0g cmVnc1sxXSA9IHJlZ3NbMl0gPSByZWdzWzNdID0gMDsKLSAgICAgICAgYnJlYWs7Ci0gICAgfQot fQotCi1zdGF0aWMgdm9pZCB4Y19jcHVpZF9wb2xpY3koY29uc3Qgc3RydWN0IGNwdWlkX2RvbWFp bl9pbmZvICppbmZvLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVuc2lnbmVk IGludCAqaW5wdXQsIHVuc2lnbmVkIGludCAqcmVncykKLXsKLSAgICAvKgotICAgICAqIEZvciBo eXBlcnZpc29yIGxlYXZlcyAoMHg0MDAwWFhYWCkgb25seSAweDQwMDB4eDAwLkVBWFs3OjBdIGJp dHMgKG1heAotICAgICAqIG51bWJlciBvZiBsZWF2ZXMpIGNhbiBiZSBzZXQgYnkgdXNlci4gSHlw ZXJ2aXNvciB3aWxsIGVuZm9yY2UgdGhpcyBzbwotICAgICAqIGFsbCBvdGhlciBiaXRzIGFyZSBk b24ndC1jYXJlIGFuZCB3ZSBjYW4gc2V0IHRoZW0gdG8gemVyby4KLSAgICAgKi8KLSAgICBpZiAo IChpbnB1dFswXSAmIDB4ZmZmZjAwMDApID09IDB4NDAwMDAwMDAgKQotICAgIHsKLSAgICAgICAg cmVnc1swXSA9IHJlZ3NbMV0gPSByZWdzWzJdID0gcmVnc1szXSA9IDA7Ci0gICAgICAgIHJldHVy bjsKLSAgICB9Ci0KLSAgICBpZiAoIGluZm8tPmh2bSApCi0gICAgICAgIHhjX2NwdWlkX2h2bV9w b2xpY3koaW5mbywgaW5wdXQsIHJlZ3MpOwotICAgIGVsc2UKLSAgICAgICAgeGNfY3B1aWRfcHZf cG9saWN5KGluZm8sIGlucHV0LCByZWdzKTsKLX0KLQotc3RhdGljIGludCB4Y19jcHVpZF9kb19k b21jdGwoCi0gICAgeGNfaW50ZXJmYWNlICp4Y2gsIHVpbnQzMl90IGRvbWlkLAotICAgIGNvbnN0 IHVuc2lnbmVkIGludCAqaW5wdXQsIGNvbnN0IHVuc2lnbmVkIGludCAqcmVncykKLXsKLSAgICBE RUNMQVJFX0RPTUNUTDsKLQotICAgIG1lbXNldCgmZG9tY3RsLCAwLCBzaXplb2YgKGRvbWN0bCkp OwotICAgIGRvbWN0bC5kb21haW4gPSBkb21pZDsKLSAgICBkb21jdGwuY21kID0gWEVOX0RPTUNU TF9zZXRfY3B1aWQ7Ci0gICAgZG9tY3RsLnUuY3B1aWQuaW5wdXRbMF0gPSBpbnB1dFswXTsKLSAg ICBkb21jdGwudS5jcHVpZC5pbnB1dFsxXSA9IGlucHV0WzFdOwotICAgIGRvbWN0bC51LmNwdWlk LmVheCA9IHJlZ3NbMF07Ci0gICAgZG9tY3RsLnUuY3B1aWQuZWJ4ID0gcmVnc1sxXTsKLSAgICBk b21jdGwudS5jcHVpZC5lY3ggPSByZWdzWzJdOwotICAgIGRvbWN0bC51LmNwdWlkLmVkeCA9IHJl Z3NbM107Ci0KLSAgICByZXR1cm4gZG9fZG9tY3RsKHhjaCwgJmRvbWN0bCk7Ci19Ci0KLXN0YXRp YyB2b2lkIHNhbml0aXNlX2ZlYXR1cmVzZXQoc3RydWN0IGNwdWlkX2RvbWFpbl9pbmZvICppbmZv KQotewotICAgIGNvbnN0IHVpbnQzMl90IGZzX3NpemUgPSB4Y19nZXRfY3B1X2ZlYXR1cmVzZXRf c2l6ZSgpOwotICAgIHVpbnQzMl90IGRpc2FibGVkX2ZlYXR1cmVzW2ZzX3NpemVdOwotICAgIHN0 YXRpYyBjb25zdCB1aW50MzJfdCBkZWVwX2ZlYXR1cmVzW10gPSBJTklUX0RFRVBfRkVBVFVSRVM7 Ci0gICAgdW5zaWduZWQgaW50IGksIGI7Ci0KLSAgICBpZiAoIGluZm8tPmh2bSApCi0gICAgewot ICAgICAgICAvKiBIVk0gb3IgUFZIIEd1ZXN0ICovCi0KLSAgICAgICAgaWYgKCAhaW5mby0+cGFl ICkKLSAgICAgICAgICAgIGNsZWFyX2JpdChYODZfRkVBVFVSRV9QQUUsIGluZm8tPmZlYXR1cmVz ZXQpOwotCi0gICAgICAgIGlmICggIWluZm8tPm5lc3RlZGh2bSApCi0gICAgICAgIHsKLSAgICAg ICAgICAgIGNsZWFyX2JpdChYODZfRkVBVFVSRV9TVk0sIGluZm8tPmZlYXR1cmVzZXQpOwotICAg ICAgICAgICAgY2xlYXJfYml0KFg4Nl9GRUFUVVJFX1ZNWCwgaW5mby0+ZmVhdHVyZXNldCk7Ci0g ICAgICAgIH0KLSAgICB9Ci0gICAgZWxzZQotICAgIHsKLSAgICAgICAgLyogUFYgR3Vlc3QgKi8K LQotICAgICAgICBpZiAoICFpbmZvLT5wdjY0ICkKLSAgICAgICAgewotICAgICAgICAgICAgY2xl YXJfYml0KFg4Nl9GRUFUVVJFX0xNLCBpbmZvLT5mZWF0dXJlc2V0KTsKLSAgICAgICAgICAgIGlm ICggIShpbmZvLT52ZW5kb3IgJiAoWDg2X1ZFTkRPUl9BTUQgfCBYODZfVkVORE9SX0hZR09OKSkg KQotICAgICAgICAgICAgICAgIGNsZWFyX2JpdChYODZfRkVBVFVSRV9TWVNDQUxMLCBpbmZvLT5m ZWF0dXJlc2V0KTsKLSAgICAgICAgfQotCi0gICAgICAgIGNsZWFyX2JpdChYODZfRkVBVFVSRV9Q U0UsIGluZm8tPmZlYXR1cmVzZXQpOwotICAgICAgICBjbGVhcl9iaXQoWDg2X0ZFQVRVUkVfUFNF MzYsIGluZm8tPmZlYXR1cmVzZXQpOwotICAgICAgICBjbGVhcl9iaXQoWDg2X0ZFQVRVUkVfUEdF LCBpbmZvLT5mZWF0dXJlc2V0KTsKLSAgICAgICAgY2xlYXJfYml0KFg4Nl9GRUFUVVJFX1BBR0Ux R0IsIGluZm8tPmZlYXR1cmVzZXQpOwotICAgIH0KLQotICAgIGlmICggaW5mby0+eGZlYXR1cmVf bWFzayA9PSAwICkKLSAgICAgICAgY2xlYXJfYml0KFg4Nl9GRUFUVVJFX1hTQVZFLCBpbmZvLT5m ZWF0dXJlc2V0KTsKLQotICAgIC8qIERpc2FibGUgZGVlcCBkZXBlbmRlbmNpZXMgb2YgZGlzYWJs ZWQgZmVhdHVyZXMuICovCi0gICAgZm9yICggaSA9IDA7IGkgPCBBUlJBWV9TSVpFKGRpc2FibGVk X2ZlYXR1cmVzKTsgKytpICkKLSAgICAgICAgZGlzYWJsZWRfZmVhdHVyZXNbaV0gPSB+aW5mby0+ ZmVhdHVyZXNldFtpXSAmIGRlZXBfZmVhdHVyZXNbaV07Ci0KLSAgICBmb3IgKCBiID0gMDsgYiA8 IHNpemVvZihkaXNhYmxlZF9mZWF0dXJlcykgKiBDSEFSX0JJVDsgKytiICkKLSAgICB7Ci0gICAg ICAgIGNvbnN0IHVpbnQzMl90ICpkZnM7Ci0KLSAgICAgICAgaWYgKCAhdGVzdF9iaXQoYiwgZGlz YWJsZWRfZmVhdHVyZXMpIHx8Ci0gICAgICAgICAgICAgIShkZnMgPSB4ODZfY3B1aWRfbG9va3Vw X2RlZXBfZGVwcyhiKSkgKQotICAgICAgICAgICAgIGNvbnRpbnVlOwotCi0gICAgICAgIGZvciAo IGkgPSAwOyBpIDwgQVJSQVlfU0laRShkaXNhYmxlZF9mZWF0dXJlcyk7ICsraSApCi0gICAgICAg IHsKLSAgICAgICAgICAgIGluZm8tPmZlYXR1cmVzZXRbaV0gJj0gfmRmc1tpXTsKLSAgICAgICAg ICAgIGRpc2FibGVkX2ZlYXR1cmVzW2ldICY9IH5kZnNbaV07Ci0gICAgICAgIH0KLSAgICB9Ci19 Ci0KLWludCB4Y19jcHVpZF9hcHBseV9wb2xpY3koeGNfaW50ZXJmYWNlICp4Y2gsIHVpbnQzMl90 IGRvbWlkLAotICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1aW50MzJfdCAqZmVhdHVy ZXNldCwgdW5zaWduZWQgaW50IG5yX2ZlYXR1cmVzKQotewotICAgIHN0cnVjdCBjcHVpZF9kb21h aW5faW5mbyBpbmZvID0ge307Ci0gICAgdW5zaWduZWQgaW50IGlucHV0WzJdID0geyAwLCAwIH0s IHJlZ3NbNF07Ci0gICAgdW5zaWduZWQgaW50IGJhc2VfbWF4LCBleHRfbWF4OwotICAgIGludCBy YzsKLQotICAgIHJjID0gZ2V0X2NwdWlkX2RvbWFpbl9pbmZvKHhjaCwgZG9taWQsICZpbmZvLCBm ZWF0dXJlc2V0LCBucl9mZWF0dXJlcyk7Ci0gICAgaWYgKCByYyApCi0gICAgICAgIGdvdG8gb3V0 OwotCi0gICAgY3B1aWQoaW5wdXQsIHJlZ3MpOwotICAgIGJhc2VfbWF4ID0gKHJlZ3NbMF0gPD0g REVGX01BWF9CQVNFKSA/IHJlZ3NbMF0gOiBERUZfTUFYX0JBU0U7Ci0gICAgaW5wdXRbMF0gPSAw eDgwMDAwMDAwOwotICAgIGNwdWlkKGlucHV0LCByZWdzKTsKLQotICAgIGlmICggaW5mby52ZW5k b3IgPT0gWDg2X1ZFTkRPUl9BTUQgfHwgaW5mby52ZW5kb3IgPT0gWDg2X1ZFTkRPUl9IWUdPTiAp Ci0gICAgICAgIGV4dF9tYXggPSAocmVnc1swXSA8PSBERUZfTUFYX0FNREVYVCkgPyByZWdzWzBd IDogREVGX01BWF9BTURFWFQ7Ci0gICAgZWxzZQotICAgICAgICBleHRfbWF4ID0gKHJlZ3NbMF0g PD0gREVGX01BWF9JTlRFTEVYVCkgPyByZWdzWzBdIDogREVGX01BWF9JTlRFTEVYVDsKLQotICAg IHNhbml0aXNlX2ZlYXR1cmVzZXQoJmluZm8pOwotCi0gICAgaW5wdXRbMF0gPSAwOwotICAgIGlu cHV0WzFdID0gWEVOX0NQVUlEX0lOUFVUX1VOVVNFRDsKLSAgICBmb3IgKCA7IDsgKQotICAgIHsK LSAgICAgICAgY3B1aWQoaW5wdXQsIHJlZ3MpOwotICAgICAgICB4Y19jcHVpZF9wb2xpY3koJmlu Zm8sIGlucHV0LCByZWdzKTsKLQotICAgICAgICBpZiAoIHJlZ3NbMF0gfHwgcmVnc1sxXSB8fCBy ZWdzWzJdIHx8IHJlZ3NbM10gKQotICAgICAgICB7Ci0gICAgICAgICAgICByYyA9IHhjX2NwdWlk X2RvX2RvbWN0bCh4Y2gsIGRvbWlkLCBpbnB1dCwgcmVncyk7Ci0gICAgICAgICAgICBpZiAoIHJj ICkKLSAgICAgICAgICAgICAgICBnb3RvIG91dDsKLSAgICAgICAgfQotCi0gICAgICAgIC8qIElu dGVsIGNhY2hlIGRlc2NyaXB0b3IgbGVhdmVzLiAqLwotICAgICAgICBpZiAoIGlucHV0WzBdID09 IDQgKQotICAgICAgICB7Ci0gICAgICAgICAgICBpbnB1dFsxXSsrOwotICAgICAgICAgICAgLyog TW9yZSB0byBkbz8gVGhlbiBsb29wIGtlZXBpbmcgJSVlYXg9PTB4MDAwMDAwMDQuICovCi0gICAg ICAgICAgICBpZiAoIChyZWdzWzBdICYgMHgxZikgIT0gMCApCi0gICAgICAgICAgICAgICAgY29u dGludWU7Ci0gICAgICAgIH0KLSAgICAgICAgLyogRXh0ZW5kZWQgVG9wb2xvZ3kgbGVhdmVzLiAq LwotICAgICAgICBlbHNlIGlmICggaW5wdXRbMF0gPT0gMHhiICkKLSAgICAgICAgewotICAgICAg ICAgICAgdWludDhfdCBsZXZlbF90eXBlID0gcmVnc1syXSA+PiA4OwotCi0gICAgICAgICAgICBp bnB1dFsxXSsrOwotICAgICAgICAgICAgaWYgKCBsZXZlbF90eXBlID49IDEgJiYgbGV2ZWxfdHlw ZSA8PSAyICkKLSAgICAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgfQotCi0gICAgICAg IGlucHV0WzBdKys7Ci0gICAgICAgIGlmICggIShpbnB1dFswXSAmIDB4ODAwMDAwMDB1KSAmJiAo aW5wdXRbMF0gPiBiYXNlX21heCApICkKLSAgICAgICAgICAgIGlucHV0WzBdID0gMHg4MDAwMDAw MHU7Ci0KLSAgICAgICAgaW5wdXRbMV0gPSBYRU5fQ1BVSURfSU5QVVRfVU5VU0VEOwotICAgICAg ICBpZiAoIChpbnB1dFswXSA9PSA0KSB8fCAoaW5wdXRbMF0gPT0gNykgfHwgKGlucHV0WzBdID09 IDB4YikgKQotICAgICAgICAgICAgaW5wdXRbMV0gPSAwOwotICAgICAgICBlbHNlIGlmICggaW5w dXRbMF0gPT0gMHhkICkKLSAgICAgICAgICAgIGlucHV0WzFdID0gMTsgLyogWGVuIGF1dG9tYXRp Y2FsbHkgY2FsY3VsYXRlcyBhbG1vc3QgZXZlcnl0aGluZy4gKi8KLQotICAgICAgICBpZiAoIChp bnB1dFswXSAmIDB4ODAwMDAwMDB1KSAmJiAoaW5wdXRbMF0gPiBleHRfbWF4KSApCi0gICAgICAg ICAgICBicmVhazsKLSAgICB9Ci0KLSBvdXQ6Ci0gICAgZnJlZV9jcHVpZF9kb21haW5faW5mbygm aW5mbyk7Ci0gICAgcmV0dXJuIHJjOwotfQotCiAvKgogICogQ29uZmlndXJlIGEgc2luZ2xlIGlu cHV0IHdpdGggdGhlIGluZm9ybWF0aW9tIGZyb20gY29uZmlnLgogICoKQEAgLTEwNzQsMyArNDUz LDIxMyBAQCBpbnQgeGNfY3B1aWRfc2V0KAogCiAgICAgcmV0dXJuIHJjOwogfQorCitpbnQgeGNf Y3B1aWRfYXBwbHlfcG9saWN5KHhjX2ludGVyZmFjZSAqeGNoLCB1aW50MzJfdCBkb21pZCwKKyAg ICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdWludDMyX3QgKmZlYXR1cmVzZXQsIHVuc2ln bmVkIGludCBucl9mZWF0dXJlcykKK3sKKyAgICBpbnQgcmM7CisgICAgeGNfZG9taW5mb190IGRp OworICAgIHVuc2lnbmVkIGludCBpLCBucl9sZWF2ZXMsIG5yX21zcnM7CisgICAgeGVuX2NwdWlk X2xlYWZfdCAqbGVhdmVzID0gTlVMTDsKKyAgICBzdHJ1Y3QgY3B1aWRfcG9saWN5ICpwID0gTlVM TDsKKyAgICB1aW50MzJfdCBlcnJfbGVhZiA9IC0xLCBlcnJfc3VibGVhZiA9IC0xLCBlcnJfbXNy ID0gLTE7CisKKyAgICBpZiAoIHhjX2RvbWFpbl9nZXRpbmZvKHhjaCwgZG9taWQsIDEsICZkaSkg IT0gMSB8fAorICAgICAgICAgZGkuZG9taWQgIT0gZG9taWQgKQorICAgIHsKKyAgICAgICAgRVJS T1IoIkZhaWxlZCB0byBvYnRhaW4gZCVkIGluZm8iLCBkb21pZCk7CisgICAgICAgIHJjID0gLUVT UkNIOworICAgICAgICBnb3RvIG91dDsKKyAgICB9CisKKyAgICByYyA9IHhjX2dldF9jcHVfcG9s aWN5X3NpemUoeGNoLCAmbnJfbGVhdmVzLCAmbnJfbXNycyk7CisgICAgaWYgKCByYyApCisgICAg eworICAgICAgICBQRVJST1IoIkZhaWxlZCB0byBvYnRhaW4gcG9saWN5IGluZm8gc2l6ZSIpOwor ICAgICAgICByYyA9IC1lcnJubzsKKyAgICAgICAgZ290byBvdXQ7CisgICAgfQorCisgICAgcmMg PSAtRU5PTUVNOworICAgIGlmICggKGxlYXZlcyA9IGNhbGxvYyhucl9sZWF2ZXMsIHNpemVvZigq bGVhdmVzKSkpID09IE5VTEwgfHwKKyAgICAgICAgIChwID0gY2FsbG9jKDEsIHNpemVvZigqcCkp KSA9PSBOVUxMICkKKyAgICAgICAgZ290byBvdXQ7CisKKyAgICAvKiBHZXQgdGhlIGRvbWFpbidz IGRlZmF1bHQgcG9saWN5LiAqLworICAgIG5yX21zcnMgPSAwOworICAgIHJjID0geGNfZ2V0X3N5 c3RlbV9jcHVfcG9saWN5KHhjaCwgZGkuaHZtID8gWEVOX1NZU0NUTF9jcHVfcG9saWN5X2h2bV9k ZWZhdWx0CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiBY RU5fU1lTQ1RMX2NwdV9wb2xpY3lfcHZfZGVmYXVsdCwKKyAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAmbnJfbGVhdmVzLCBsZWF2ZXMsICZucl9tc3JzLCBOVUxMKTsKKyAgICBpZiAo IHJjICkKKyAgICB7CisgICAgICAgIFBFUlJPUigiRmFpbGVkIHRvIG9idGFpbiAlcyBkZWZhdWx0 IHBvbGljeSIsIGRpLmh2bSA/ICJodm0iIDogInB2Iik7CisgICAgICAgIHJjID0gLWVycm5vOwor ICAgICAgICBnb3RvIG91dDsKKyAgICB9CisKKyAgICByYyA9IHg4Nl9jcHVpZF9jb3B5X2Zyb21f YnVmZmVyKHAsIGxlYXZlcywgbnJfbGVhdmVzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgJmVycl9sZWFmLCAmZXJyX3N1YmxlYWYpOworICAgIGlmICggcmMgKQorICAgIHsK KyAgICAgICAgRVJST1IoIkZhaWxlZCB0byBkZXNlcmlhbGlzZSBDUFVJRCAoZXJyIGxlYWYgJSN4 LCBzdWJsZWFmICUjeCkgKCVkID0gJXMpIiwKKyAgICAgICAgICAgICAgZXJyX2xlYWYsIGVycl9z dWJsZWFmLCAtcmMsIHN0cmVycm9yKC1yYykpOworICAgICAgICBnb3RvIG91dDsKKyAgICB9CisK KyAgICBpZiAoIGZlYXR1cmVzZXQgKQorICAgIHsKKyAgICAgICAgdWludDMyX3QgZGlzYWJsZWRf ZmVhdHVyZXNbRkVBVFVSRVNFVF9OUl9FTlRSSUVTXSwKKyAgICAgICAgICAgIGZlYXRbRkVBVFVS RVNFVF9OUl9FTlRSSUVTXSA9IHt9OworICAgICAgICBzdGF0aWMgY29uc3QgdWludDMyX3QgZGVl cF9mZWF0dXJlc1tdID0gSU5JVF9ERUVQX0ZFQVRVUkVTOworICAgICAgICB1bnNpZ25lZCBpbnQg aSwgYjsKKworICAgICAgICAvKgorICAgICAgICAgKiBUaGUgdXNlciBzdXBwbGllZCBmZWF0dXJl c2V0IG1heSBiZSBzaG9ydGVyIG9yIGxvbmdlciB0aGFuCisgICAgICAgICAqIEZFQVRVUkVTRVRf TlJfRU5UUklFUy4gIFNob3J0ZXIgaXMgZmluZSwgYW5kIHdlIHdpbGwgemVyby1leHRlbmQuCisg ICAgICAgICAqIExvbmdlciBpcyBmaW5lLCBzbyBsb25nIGFzIGl0IG9ubHkgcGFkZGVkIHdpdGgg emVyb3MuCisgICAgICAgICAqLworICAgICAgICB1bnNpZ25lZCBpbnQgdXNlcl9sZW4gPSBtaW4o RkVBVFVSRVNFVF9OUl9FTlRSSUVTICsgMHUsIG5yX2ZlYXR1cmVzKTsKKworICAgICAgICAvKiBD aGVjayBmb3IgdHJ1bmNhdGVkIHNldCBiaXRzLiAqLworICAgICAgICByYyA9IC1FT1BOT1RTVVBQ OworICAgICAgICBmb3IgKCBpID0gdXNlcl9sZW47IGkgPCBucl9mZWF0dXJlczsgKytpICkKKyAg ICAgICAgICAgIGlmICggZmVhdHVyZXNldFtpXSAhPSAwICkKKyAgICAgICAgICAgICAgICBnb3Rv IG91dDsKKworICAgICAgICBtZW1jcHkoZmVhdCwgZmVhdHVyZXNldCwgc2l6ZW9mKCpmZWF0dXJl c2V0KSAqIHVzZXJfbGVuKTsKKworICAgICAgICAvKiBEaXNhYmxlIGRlZXAgZGVwZW5kZW5jaWVz IG9mIGRpc2FibGVkIGZlYXR1cmVzLiAqLworICAgICAgICBmb3IgKCBpID0gMDsgaSA8IEFSUkFZ X1NJWkUoZGlzYWJsZWRfZmVhdHVyZXMpOyArK2kgKQorICAgICAgICAgICAgZGlzYWJsZWRfZmVh dHVyZXNbaV0gPSB+ZmVhdFtpXSAmIGRlZXBfZmVhdHVyZXNbaV07CisKKyAgICAgICAgZm9yICgg YiA9IDA7IGIgPCBzaXplb2YoZGlzYWJsZWRfZmVhdHVyZXMpICogQ0hBUl9CSVQ7ICsrYiApCisg ICAgICAgIHsKKyAgICAgICAgICAgIGNvbnN0IHVpbnQzMl90ICpkZnM7CisKKyAgICAgICAgICAg IGlmICggIXRlc3RfYml0KGIsIGRpc2FibGVkX2ZlYXR1cmVzKSB8fAorICAgICAgICAgICAgICAg ICAhKGRmcyA9IHg4Nl9jcHVpZF9sb29rdXBfZGVlcF9kZXBzKGIpKSApCisgICAgICAgICAgICAg ICAgY29udGludWU7CisKKyAgICAgICAgICAgIGZvciAoIGkgPSAwOyBpIDwgQVJSQVlfU0laRShk aXNhYmxlZF9mZWF0dXJlcyk7ICsraSApCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAg ZmVhdFtpXSAmPSB+ZGZzW2ldOworICAgICAgICAgICAgICAgIGRpc2FibGVkX2ZlYXR1cmVzW2ld ICY9IH5kZnNbaV07CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICBjcHVpZF9m ZWF0dXJlc2V0X3RvX3BvbGljeShmZWF0LCBwKTsKKyAgICB9CisKKyAgICBpZiAoICFkaS5odm0g KQorICAgIHsKKyAgICAgICAgdWludDMyX3QgaG9zdF9mZWF0dXJlc2V0W0ZFQVRVUkVTRVRfTlJf RU5UUklFU10gPSB7fTsKKyAgICAgICAgdWludDMyX3QgbGVuID0gQVJSQVlfU0laRShob3N0X2Zl YXR1cmVzZXQpOworCisgICAgICAgIHJjID0geGNfZ2V0X2NwdV9mZWF0dXJlc2V0KHhjaCwgWEVO X1NZU0NUTF9jcHVfZmVhdHVyZXNldF9ob3N0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAmbGVuLCBob3N0X2ZlYXR1cmVzZXQpOworICAgICAgICBpZiAoIHJjICkKKyAgICAg ICAgeworICAgICAgICAgICAgLyogVG9sZXJhdGUgImJ1ZmZlciB0b28gc21hbGwiLCBhcyB3ZSd2 ZSBnb3QgdGhlIGJpdHMgd2UgbmVlZC4gKi8KKyAgICAgICAgICAgIGlmICggZXJybm8gPT0gRU5P QlVGUyApCisgICAgICAgICAgICAgICAgcmMgPSAwOworICAgICAgICAgICAgZWxzZQorICAgICAg ICAgICAgeworICAgICAgICAgICAgICAgIFBFUlJPUigiRmFpbGVkIHRvIG9idGFpbiBob3N0IGZl YXR1cmVzZXQiKTsKKyAgICAgICAgICAgICAgICByYyA9IC1lcnJubzsKKyAgICAgICAgICAgICAg ICBnb3RvIG91dDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIC8qCisgICAg ICAgICAqIE9uIGhhcmR3YXJlIHdpdGhvdXQgQ1BVSUQgRmF1bHRpbmcsIFBWIGd1ZXN0cyBzZWUg cmVhbCB0b3BvbG9neS4KKyAgICAgICAgICogQXMgYSBjb25zZXF1ZW5jZSwgdGhleSBhbHNvIG5l ZWQgdG8gc2VlIHRoZSBob3N0IGh0dC9jbXAgZmllbGRzLgorICAgICAgICAgKi8KKyAgICAgICAg cC0+YmFzaWMuaHR0ICAgICAgID0gdGVzdF9iaXQoWDg2X0ZFQVRVUkVfSFRULCBob3N0X2ZlYXR1 cmVzZXQpOworICAgICAgICBwLT5leHRkLmNtcF9sZWdhY3kgPSB0ZXN0X2JpdChYODZfRkVBVFVS RV9DTVBfTEVHQUNZLCBob3N0X2ZlYXR1cmVzZXQpOworICAgIH0KKyAgICBlbHNlCisgICAgewor ICAgICAgICAvKgorICAgICAgICAgKiBUb3BvbG9neSBmb3IgSFZNIGd1ZXN0cyBpcyBlbnRpcmVs eSBjb250cm9sbGVkIGJ5IFhlbi4gIEZvciBub3csIHdlCisgICAgICAgICAqIGhhcmRjb2RlIEFQ SUNfSUQgPSB2Y3B1X2lkICogMiB0byBnaXZlIHRoZSBpbGx1c2lvbiBvZiBubyBTTVQuCisgICAg ICAgICAqLworICAgICAgICBwLT5iYXNpYy5odHQgPSB0cnVlOworICAgICAgICBwLT5leHRkLmNt cF9sZWdhY3kgPSBmYWxzZTsKKworICAgICAgICAvKgorICAgICAgICAgKiBFQlhbMjM6MTZdIGlz IE1heGltdW0gTG9naWNhbCBQcm9jZXNzb3JzIFBlciBQYWNrYWdlLgorICAgICAgICAgKiBVcGRh dGUgdG8gcmVmbGVjdCB2TEFQSUNfSUQgPSB2Q1BVX0lEICogMiwgYnV0IG1ha2Ugc3VyZSB0byBh dm9pZAorICAgICAgICAgKiBvdmVyZmxvdy4KKyAgICAgICAgICovCisgICAgICAgIGlmICggIShw LT5iYXNpYy5scHBwICYgMHg4MCkgKQorICAgICAgICAgICAgcC0+YmFzaWMubHBwcCAqPSAyOwor CisgICAgICAgIHN3aXRjaCAoIHAtPng4Nl92ZW5kb3IgKQorICAgICAgICB7CisgICAgICAgIGNh c2UgWDg2X1ZFTkRPUl9JTlRFTDoKKyAgICAgICAgICAgIGZvciAoIGkgPSAwOyAocC0+Y2FjaGUu c3VibGVhZltpXS50eXBlICYmCisgICAgICAgICAgICAgICAgICAgICAgICAgIGkgPCBBUlJBWV9T SVpFKHAtPmNhY2hlLnJhdykpOyArK2kgKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAg IHAtPmNhY2hlLnN1YmxlYWZbaV0uY29yZXNfcGVyX3BhY2thZ2UgPQorICAgICAgICAgICAgICAg ICAgICAocC0+Y2FjaGUuc3VibGVhZltpXS5jb3Jlc19wZXJfcGFja2FnZSA8PCAxKSB8IDE7Cisg ICAgICAgICAgICAgICAgcC0+Y2FjaGUuc3VibGVhZltpXS50aHJlYWRzX3Blcl9jYWNoZSA9IDA7 CisgICAgICAgICAgICB9CisgICAgICAgICAgICBicmVhazsKKworICAgICAgICBjYXNlIFg4Nl9W RU5ET1JfQU1EOgorICAgICAgICBjYXNlIFg4Nl9WRU5ET1JfSFlHT046CisgICAgICAgICAgICAv KgorICAgICAgICAgICAgICogRUNYWzE1OjEyXSBpcyBBcGljSWRDb3JlU2l6ZS4KKyAgICAgICAg ICAgICAqIEVDWFs3OjBdIGlzIE51bWJlck9mQ29yZXMgKG1pbnVzIG9uZSkuCisgICAgICAgICAg ICAgKiBVcGRhdGUgdG8gcmVmbGVjdCB2TEFQSUNfSUQgPSB2Q1BVX0lEICogMi4gIEJ1dCBhdm9p ZAorICAgICAgICAgICAgICogLSBvdmVyZmxvdywKKyAgICAgICAgICAgICAqIC0gZ29pbmcgb3V0 IG9mIHN5bmMgd2l0aCBsZWFmIDEgRUJYWzIzOjE2XSwKKyAgICAgICAgICAgICAqIC0gaW5jcmVt ZW50aW5nIEFwaWNJZENvcmVTaXplIHdoZW4gaXQncyB6ZXJvICh3aGljaCBjaGFuZ2VzIHRoZQor ICAgICAgICAgICAgICogICBtZWFuaW5nIG9mIGJpdHMgNzowKS4KKyAgICAgICAgICAgICAqLwor ICAgICAgICAgICAgaWYgKCAhKHAtPmV4dGQubmMgJiAweDgwKSApCisgICAgICAgICAgICB7Cisg ICAgICAgICAgICAgICAgaWYgKCBwLT5leHRkLmFwaWNfaWRfc2l6ZSAhPSAwICYmIHAtPmV4dGQu YXBpY19pZF9zaXplICE9IDB4ZiApCisgICAgICAgICAgICAgICAgICAgIHAtPmV4dGQuYXBpY19p ZF9zaXplKys7CisKKyAgICAgICAgICAgICAgICBwLT5leHRkLm5jID0gKHAtPmV4dGQubmMgPDwg MSkgfCAxOworICAgICAgICAgICAgfQorICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKwor ICAgICAgICAvKgorICAgICAgICAgKiBUaGVzZSBzZXR0aW5ncyBhcmUgbmVjZXNzYXJ5IHRvIGNh dXNlIGVhcmxpZXIgSFZNX1BBUkFNX05FU1RFREhWTSAvCisgICAgICAgICAqIFhFTl9ET01DVExf ZGlzYWJsZV9taWdyYXRlIHNldHRpbmdzIHRvIGJlIHJlZmxlY3RlZCBjb3JyZWN0bHkgaW4KKyAg ICAgICAgICogQ1BVSUQuICBYZW4gd2lsbCBkaXNjYXJkIHRoZXNlIGJpdHMgaWYgY29uZmlndXJh dGlvbiBoYXNuJ3QgYmVlbgorICAgICAgICAgKiBzZXQgZm9yIHRoZSBkb21haW4uCisgICAgICAg ICAqLworICAgICAgICBwLT5leHRkLml0c2MgPSB0cnVlOworICAgICAgICBwLT5iYXNpYy52bXgg PSB0cnVlOworICAgICAgICBwLT5leHRkLnN2bSA9IHRydWU7CisgICAgfQorCisgICAgcmMgPSB4 ODZfY3B1aWRfY29weV90b19idWZmZXIocCwgbGVhdmVzLCAmbnJfbGVhdmVzKTsKKyAgICBpZiAo IHJjICkKKyAgICB7CisgICAgICAgIEVSUk9SKCJGYWlsZWQgdG8gc2VyaWFsaXNlIENQVUlEICgl ZCA9ICVzKSIsIC1yYywgc3RyZXJyb3IoLXJjKSk7CisgICAgICAgIGdvdG8gb3V0OworICAgIH0K KworICAgIHJjID0geGNfc2V0X2RvbWFpbl9jcHVfcG9saWN5KHhjaCwgZG9taWQsIG5yX2xlYXZl cywgbGVhdmVzLCAwLCBOVUxMLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZl cnJfbGVhZiwgJmVycl9zdWJsZWFmLCAmZXJyX21zcik7CisgICAgaWYgKCByYyApCisgICAgewor ICAgICAgICBQRVJST1IoIkZhaWxlZCB0byBzZXQgZCVkJ3MgcG9saWN5IChlcnIgbGVhZiAlI3gs IHN1YmxlYWYgJSN4LCBtc3IgJSN4KSIsCisgICAgICAgICAgICAgICBkb21pZCwgZXJyX2xlYWYs IGVycl9zdWJsZWFmLCBlcnJfbXNyKTsKKyAgICAgICAgcmMgPSAtZXJybm87CisgICAgICAgIGdv dG8gb3V0OworICAgIH0KKworICAgIHJjID0gMDsKKworb3V0OgorICAgIGZyZWUocCk7CisgICAg ZnJlZShsZWF2ZXMpOworCisgICAgcmV0dXJuIHJjOworfQpkaWZmIC0tZ2l0IGEveGVuL2luY2x1 ZGUveGVuL2xpYi94ODYvY3B1aWQuaCBiL3hlbi9pbmNsdWRlL3hlbi9saWIveDg2L2NwdWlkLmgK aW5kZXggNzk4NDBmOTljZS4uMzMxZWY0ZjRmMCAxMDA2NDQKLS0tIGEveGVuL2luY2x1ZGUveGVu L2xpYi94ODYvY3B1aWQuaAorKysgYi94ZW4vaW5jbHVkZS94ZW4vbGliL3g4Ni9jcHVpZC5oCkBA IC0xNTQsOCArMTU0LDEyIEBAIHN0cnVjdCBjcHVpZF9wb2xpY3kKICAgICB1bmlvbiB7CiAgICAg ICAgIHN0cnVjdCBjcHVpZF9sZWFmIHJhd1tDUFVJRF9HVUVTVF9OUl9DQUNIRV07CiAgICAgICAg IHN0cnVjdCBjcHVpZF9jYWNoZV9sZWFmIHsKLSAgICAgICAgICAgIHVpbnQzMl90IHR5cGU6NSwK LSAgICAgICAgICAgICAgICA6MjcsIDozMiwgOjMyLCA6MzI7CisgICAgICAgICAgICB1aW50MzJf dCAvKiBhICovIHR5cGU6NSwgbGV2ZWw6MzsKKyAgICAgICAgICAgIGJvb2wgc2VsZl9pbml0OjEs IGZ1bGx5X2Fzc29jOjE7CisgICAgICAgICAgICB1aW50MzJfdCA6NCwgdGhyZWFkc19wZXJfY2Fj aGU6MTIsIGNvcmVzX3Blcl9wYWNrYWdlOjY7CisgICAgICAgICAgICB1aW50MzJfdCAvKiBiICov IGxpbmVfc2l6ZToxMiwgcGFydGl0aW9uczoxMCwgd2F5czoxMDsKKyAgICAgICAgICAgIHVpbnQz Ml90IC8qIGMgKi8gc2V0czsKKyAgICAgICAgICAgIGJvb2wgLyogZCAqLyB3YmludmQ6MSwgaW5j bHVzaXZlOjEsIGNvbXBsZXg6MTsKICAgICAgICAgfSBzdWJsZWFmW0NQVUlEX0dVRVNUX05SX0NB Q0hFXTsKICAgICB9IGNhY2hlOwogCkBAIC0yNTksNyArMjYzLDggQEAgc3RydWN0IGNwdWlkX3Bv bGljeQogICAgICAgICAgICAgICAgIHVpbnQzMl90IGU4YjsKICAgICAgICAgICAgICAgICBzdHJ1 Y3QgeyBERUNMX0JJVEZJRUxEKGU4Yik7IH07CiAgICAgICAgICAgICB9OwotICAgICAgICAgICAg dWludDMyX3QgLyogYyAqLzozMiwgLyogZCAqLzozMjsKKyAgICAgICAgICAgIHVpbnQzMl90IG5j OjgsIDo0LCBhcGljX2lkX3NpemU6NCwgOjE2OworICAgICAgICAgICAgdWludDMyX3QgLyogZCAq LzozMjsKICAgICAgICAgfTsKICAgICB9IGV4dGQ7CiAKLS0gCjIuMTEuMAoKCl9fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fClhlbi1kZXZlbCBtYWlsaW5nIGxp c3QKWGVuLWRldmVsQGxpc3RzLnhlbnByb2plY3Qub3JnCmh0dHBzOi8vbGlzdHMueGVucHJvamVj dC5vcmcvbWFpbG1hbi9saXN0aW5mby94ZW4tZGV2ZWw=