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 lists.gnu.org (lists.gnu.org [209.51.188.17]) (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 AEF1DC6FA8F for ; Wed, 30 Aug 2023 16:18:07 +0000 (UTC) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1qbNsr-0005Ov-2w; Wed, 30 Aug 2023 12:17:33 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1qbNqe-0003H1-PU; Wed, 30 Aug 2023 12:15:18 -0400 Received: from smtp-fw-52005.amazon.com ([52.119.213.156]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1qbNqb-0003sA-75; Wed, 30 Aug 2023 12:15:16 -0400 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=amazon.com; i=@amazon.com; q=dns/txt; s=amazon201209; t=1693412113; x=1724948113; h=from:to:cc:subject:date:message-id:in-reply-to: references:mime-version:content-transfer-encoding; bh=3e1K/TjjV3tcSIlIyQdU0K6xREaE5PTfl9+CbjDOZ9A=; b=k1lSh4l4PFfoCj9lEa8RZWrsjzOdHapVhJFNLwtTXLLvNVL9JI6ul2xF ADofy6YMgHg8VR7LuELyn0lurNc+e/PeG/YJmWu6Lt2uj/90SHlOzjhzc VUCy+9bygsHYKei8G4DFQ34q79vIr4HwSh13HWr1KoPGZiDoSP5eB4Bon 0=; X-IronPort-AV: E=Sophos;i="6.02,214,1688428800"; d="scan'208";a="601819211" Received: from iad12-co-svc-p1-lb1-vlan3.amazon.com (HELO email-inbound-relay-iad-1e-m6i4x-7dc0ecf1.us-east-1.amazon.com) ([10.43.8.6]) by smtp-border-fw-52005.iad7.amazon.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 30 Aug 2023 16:15:11 +0000 Received: from EX19MTAUWC001.ant.amazon.com (iad12-ws-svc-p26-lb9-vlan2.iad.amazon.com [10.40.163.34]) by email-inbound-relay-iad-1e-m6i4x-7dc0ecf1.us-east-1.amazon.com (Postfix) with ESMTPS id 22750808EF; Wed, 30 Aug 2023 16:15:07 +0000 (UTC) Received: from EX19D020UWC004.ant.amazon.com (10.13.138.149) by EX19MTAUWC001.ant.amazon.com (10.250.64.174) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.2.1118.37; Wed, 30 Aug 2023 16:15:00 +0000 Received: from dev-dsk-graf-1a-5ce218e4.eu-west-1.amazon.com (10.253.83.51) by EX19D020UWC004.ant.amazon.com (10.13.138.149) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.2.1118.37; Wed, 30 Aug 2023 16:14:57 +0000 From: Alexander Graf To: CC: , , Cameron Esfahani , Stefan Hajnoczi , "Michael S . Tsirkin" , Kevin Wolf , Hanna Reitz , Marcel Apfelbaum , "Paolo Bonzini" , Peter Maydell , =?UTF-8?q?Philippe=20Mathieu-Daud=C3=A9?= , Mads Ynddal , =?UTF-8?q?Daniel=20P=20=2E=20Berrang=C3=A9?= , Bernhard Beschow , Gerd Hoffmann Subject: [PATCH v2 10/12] hw/vmapple/apple-gfx: Introduce ParavirtualizedGraphics.Framework support Date: Wed, 30 Aug 2023 16:14:23 +0000 Message-ID: <20230830161425.91946-11-graf@amazon.com> X-Mailer: git-send-email 2.40.1 In-Reply-To: <20230830161425.91946-1-graf@amazon.com> References: <20230830161425.91946-1-graf@amazon.com> MIME-Version: 1.0 X-Originating-IP: [10.253.83.51] X-ClientProxiedBy: EX19D040UWA002.ant.amazon.com (10.13.139.113) To EX19D020UWC004.ant.amazon.com (10.13.138.149) Precedence: Bulk Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Received-SPF: pass client-ip=52.119.213.156; envelope-from=prvs=599fd62c5=graf@amazon.de; helo=smtp-fw-52005.amazon.com X-Spam_score_int: -39 X-Spam_score: -4.0 X-Spam_bar: ---- X-Spam_report: (-4.0 / 5.0 requ) BAYES_00=-1.9, DKIMWL_WL_HIGH=-0.001, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, HEADER_FROM_DIFFERENT_DOMAINS=0.249, RCVD_IN_DNSWL_MED=-2.3, RCVD_IN_MSPIKE_H5=0.001, RCVD_IN_MSPIKE_WL=0.001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=ham autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.29 List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+qemu-devel=archiver.kernel.org@nongnu.org Sender: qemu-devel-bounces+qemu-devel=archiver.kernel.org@nongnu.org TWFjT1MgcHJvdmlkZXMgYSBmcmFtZXdvcmsgKGxpYnJhcnkpIHRoYXQgYWxsb3dzIGFueSB2bW0g dG8gaW1wbGVtZW50IGEKcGFyYXZpcnR1YWxpemVkIDNkIGdyYXBoaWNzIHBhc3N0aHJvdWdoIHRv IHRoZSBob3N0IG1ldGFsIHN0YWNrIGNhbGxlZApQYXJhdmlydHVhbGl6ZWRHcmFwaGljcy5GcmFt ZXdvcmsgKFBWRykuIFRoZSBsaWJyYXJ5IGFic3RyYWN0cyBhd2F5CmFsbW9zdCBldmVyeSBhc3Bl Y3Qgb2YgdGhlIHBhcmF2aXJ0dWFsaXplZCBkZXZpY2UgbW9kZWwgYW5kIG9ubHkgcHJvdmlkZXMK YW5kIHJlY2VpdmVzIGNhbGxiYWNrcyBvbiBNTUlPIGFjY2VzcyBhcyB3ZWxsIGFzIHRvIHNoYXJl IG1lbW9yeSBhZGRyZXNzCnNwYWNlIGJldHdlZW4gdGhlIFZNIGFuZCBQVkcuCgpUaGlzIHBhdGNo IGltcGxlbWVudHMgYSBRRU1VIGRldmljZSB0aGF0IGRyaXZlcyBQVkcgZm9yIHRoZSBWTUFwcGxl CnZhcmlhbnQgb2YgaXQuCgpTaWduZWQtb2ZmLWJ5OiBBbGV4YW5kZXIgR3JhZiA8Z3JhZkBhbWF6 b24uY29tPgoKLS0tCgp2MSAtPiB2MjoKCiAgLSBBZGFwdCB0byBzeXN0ZW1fc3MgbWVzb24uYnVp bGQgdGFyZ2V0Ci0tLQogbWVzb24uYnVpbGQgICAgICAgICAgICAgfCAgIDQgKwogaHcvdm1hcHBs ZS9LY29uZmlnICAgICAgfCAgIDMgKwogaHcvdm1hcHBsZS9hcHBsZS1nZngubSAgfCA1NzggKysr KysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKwogaHcvdm1hcHBsZS9tZXNvbi5i dWlsZCAgfCAgIDEgKwogaHcvdm1hcHBsZS90cmFjZS1ldmVudHMgfCAgMjIgKysKIDUgZmlsZXMg Y2hhbmdlZCwgNjA4IGluc2VydGlvbnMoKykKIGNyZWF0ZSBtb2RlIDEwMDY0NCBody92bWFwcGxl L2FwcGxlLWdmeC5tCgpkaWZmIC0tZ2l0IGEvbWVzb24uYnVpbGQgYi9tZXNvbi5idWlsZAppbmRl eCBkYzUyNDJhNWY0Li5kMzQzMTBiNWViIDEwMDY0NAotLS0gYS9tZXNvbi5idWlsZAorKysgYi9t ZXNvbi5idWlsZApAQCAtNjA3LDYgKzYwNyw4IEBAIHNvY2tldCA9IFtdCiB2ZXJzaW9uX3JlcyA9 IFtdCiBjb3JlZiA9IFtdCiBpb2tpdCA9IFtdCitwdmcgPSBbXQorbWV0YWwgPSBbXQogZW11bGF0 b3JfbGlua19hcmdzID0gW10KIG52bW0gPW5vdF9mb3VuZAogaHZmID0gbm90X2ZvdW5kCkBAIC02 MzAsNiArNjMyLDggQEAgZWxpZiB0YXJnZXRvcyA9PSAnZGFyd2luJwogICBjb3JlZiA9IGRlcGVu ZGVuY3koJ2FwcGxlZnJhbWV3b3JrcycsIG1vZHVsZXM6ICdDb3JlRm91bmRhdGlvbicpCiAgIGlv a2l0ID0gZGVwZW5kZW5jeSgnYXBwbGVmcmFtZXdvcmtzJywgbW9kdWxlczogJ0lPS2l0JywgcmVx dWlyZWQ6IGZhbHNlKQogICBob3N0X2Rzb3N1ZiA9ICcuZHlsaWInCisgIHB2ZyA9IGRlcGVuZGVu Y3koJ2FwcGxlZnJhbWV3b3JrcycsIG1vZHVsZXM6ICdQYXJhdmlydHVhbGl6ZWRHcmFwaGljcycp CisgIG1ldGFsID0gZGVwZW5kZW5jeSgnYXBwbGVmcmFtZXdvcmtzJywgbW9kdWxlczogJ01ldGFs JykKIGVsaWYgdGFyZ2V0b3MgPT0gJ3N1bm9zJwogICBzb2NrZXQgPSBbY2MuZmluZF9saWJyYXJ5 KCdzb2NrZXQnKSwKICAgICAgICAgICAgIGNjLmZpbmRfbGlicmFyeSgnbnNsJyksCmRpZmYgLS1n aXQgYS9ody92bWFwcGxlL0tjb25maWcgYi9ody92bWFwcGxlL0tjb25maWcKaW5kZXggNTQyNDI2 YTc0MC4uYmEzN2ZjNWI4MSAxMDA2NDQKLS0tIGEvaHcvdm1hcHBsZS9LY29uZmlnCisrKyBiL2h3 L3ZtYXBwbGUvS2NvbmZpZwpAQCAtNiwzICs2LDYgQEAgY29uZmlnIFZNQVBQTEVfQkRJRgogCiBj b25maWcgVk1BUFBMRV9DRkcKICAgICBib29sCisKK2NvbmZpZyBWTUFQUExFX1BWRworICAgIGJv b2wKZGlmZiAtLWdpdCBhL2h3L3ZtYXBwbGUvYXBwbGUtZ2Z4Lm0gYi9ody92bWFwcGxlL2FwcGxl LWdmeC5tCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAuLjk3ZGQyY2Q5YWUK LS0tIC9kZXYvbnVsbAorKysgYi9ody92bWFwcGxlL2FwcGxlLWdmeC5tCkBAIC0wLDAgKzEsNTc4 IEBACisvKgorICogUUVNVSBBcHBsZSBQYXJhdmlydHVhbGl6ZWRHcmFwaGljcy5mcmFtZXdvcmsg ZGV2aWNlCisgKgorICogQ29weXJpZ2h0IMKpIDIwMjMgQW1hem9uLmNvbSwgSW5jLiBvciBpdHMg YWZmaWxpYXRlcy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKyAqCisgKiBUaGlzIHdvcmsgaXMgbGlj ZW5zZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR1BMLCB2ZXJzaW9uIDIgb3IgbGF0ZXIu CisgKiBTZWUgdGhlIENPUFlJTkcgZmlsZSBpbiB0aGUgdG9wLWxldmVsIGRpcmVjdG9yeS4KKyAq CisgKiBQYXJhdmlydHVhbGl6ZWRHcmFwaGljcy5mcmFtZXdvcmsgaXMgYSBzZXQgb2YgbGlicmFy aWVzIHRoYXQgbWFjT1MgcHJvdmlkZXMKKyAqIHdoaWNoIGltcGxlbWVudHMgM2QgZ3JhcGhpY3Mg cGFzc3Rocm91Z2ggdG8gdGhlIGhvc3QgYXMgd2VsbCBhcyBhCisgKiBwcm9wcmlldGFyeSBndWVz dCBjb21tdW5pY2F0aW9uIGNoYW5uZWwgdG8gZHJpdmUgaXQuIFRoaXMgZGV2aWNlIG1vZGVsCisg KiBpbXBsZW1lbnRzIHN1cHBvcnQgdG8gZHJpdmUgdGhhdCBsaWJyYXJ5IGZyb20gd2l0aGluIFFF TVUuCisgKi8KKworI2luY2x1ZGUgInFlbXUvb3NkZXAuaCIKKyNpbmNsdWRlICJody9pcnEuaCIK KyNpbmNsdWRlICJtaWdyYXRpb24vdm1zdGF0ZS5oIgorI2luY2x1ZGUgInFlbXUvbG9nLmgiCisj aW5jbHVkZSAicWVtdS9tb2R1bGUuaCIKKyNpbmNsdWRlICJ0cmFjZS5oIgorI2luY2x1ZGUgImh3 L3N5c2J1cy5oIgorI2luY2x1ZGUgImh3L3BjaS9tc2kuaCIKKyNpbmNsdWRlICJjcnlwdG8vaGFz aC5oIgorI2luY2x1ZGUgInN5c2VtdS9jcHVzLmgiCisjaW5jbHVkZSAidWkvY29uc29sZS5oIgor I2luY2x1ZGUgIm1vbml0b3IvbW9uaXRvci5oIgorI2ltcG9ydCA8UGFyYXZpcnR1YWxpemVkR3Jh cGhpY3MvUGFyYXZpcnR1YWxpemVkR3JhcGhpY3MuaD4KKworI2RlZmluZSBUWVBFX0FQUExFX0dG WCAgICAgICAgICAiYXBwbGUtZ2Z4IgorCisjZGVmaW5lIE1BWF9NUlMgNTEyCisKK3N0YXRpYyBj b25zdCBQR0Rpc3BsYXlDb29yZF90IGFwcGxlX2dmeF9tb2Rlc1tdID0geworICAgIHsgLnggPSAx NDQwLCAueSA9IDEwODAgfSwKKyAgICB7IC54ID0gMTI4MCwgLnkgPSAxMDI0IH0sCit9OworCisv KgorICogV2UgaGF2ZSB0byBtYXAgUFZHIG1lbW9yeSBpbnRvIG91ciBhZGRyZXNzIHNwYWNlLiBV c2UgdGhlIG9uZSBiZWxvdworICogYXMgYmFzZSBzdGFydCBhZGRyZXNzLiBJbiBub3JtYWwgbGlu a2VyIHNldHVwcyBpdCBwb2ludHMgdG8gYSBmcmVlCisgKiBtZW1vcnkgcmFuZ2UuCisgKi8KKyNk ZWZpbmUgQVBQTEVfR0ZYX0JBU0VfVkEgKCh2b2lkICopKHVpbnRwdHJfdCkweDUwMDAwMDAwMDAw MFVMKQorCisvKgorICogUGFyYXZpcnR1YWxpemVkR3JhcGhpY3MuRnJhbWV3b3JrIG9ubHkgc2hp cHMgaGVhZGVyIGZpbGVzIGZvciB0aGUgeDg2CisgKiB2YXJpYW50IHdoaWNoIGRvZXMgbm90IGlu Y2x1ZGUgSU9TRkMgZGVzY3JpcHRvcnMgYW5kIGhvc3QgZGV2aWNlcy4gV2UgYWRkCisgKiB0aGVp ciBkZWZpbml0aW9ucyBoZXJlIHNvIHRoYXQgd2UgY2FuIGFsc28gd29yayB3aXRoIHRoZSBBUk0g dmVyc2lvbi4KKyAqLwordHlwZWRlZiBib29sKF5JT1NGQ1JhaXNlSW50ZXJydXB0KSh1aW50MzJf dCB2ZWN0b3IpOwordHlwZWRlZiBib29sKF5JT1NGQ1VubWFwTWVtb3J5KSh2b2lkICphLCB2b2lk ICpiLCB2b2lkICpjLCB2b2lkICpkLCB2b2lkICplLCB2b2lkICpmKTsKK3R5cGVkZWYgYm9vbChe SU9TRkNNYXBNZW1vcnkpKHVpbnQ2NF90IHBoeXMsIHVpbnQ2NF90IGxlbiwgYm9vbCBybywgdm9p ZCAqKnZhLCB2b2lkICplLCB2b2lkICpmKTsKKworQGludGVyZmFjZSBQR0RldmljZURlc2NyaXB0 b3JFeHQgOiBQR0RldmljZURlc2NyaXB0b3IKK0Bwcm9wZXJ0eSAocmVhZHdyaXRlLCBub25hdG9t aWMpIGJvb2wgdXNpbmdJT1N1cmZhY2VNYXBwZXI7CitAZW5kCisKK0BpbnRlcmZhY2UgUEdJT1N1 cmZhY2VIb3N0RGV2aWNlRGVzY3JpcHRvciA6IE5TT2JqZWN0CistKFBHSU9TdXJmYWNlSG9zdERl dmljZURlc2NyaXB0b3IgKilpbml0OworQHByb3BlcnR5IChyZWFkd3JpdGUsIG5vbmF0b21pYywg Y29weSwgbnVsbGFibGUpIElPU0ZDTWFwTWVtb3J5IG1hcE1lbW9yeTsKK0Bwcm9wZXJ0eSAocmVh ZHdyaXRlLCBub25hdG9taWMsIGNvcHksIG51bGxhYmxlKSBJT1NGQ1VubWFwTWVtb3J5IHVubWFw TWVtb3J5OworQHByb3BlcnR5IChyZWFkd3JpdGUsIG5vbmF0b21pYywgY29weSwgbnVsbGFibGUp IElPU0ZDUmFpc2VJbnRlcnJ1cHQgcmFpc2VJbnRlcnJ1cHQ7CitAZW5kCisKK0BpbnRlcmZhY2Ug UEdJT1N1cmZhY2VIb3N0RGV2aWNlIDogTlNPYmplY3QKKy0odm9pZClpbml0V2l0aERlc2NyaXB0 b3I6KFBHSU9TdXJmYWNlSG9zdERldmljZURlc2NyaXB0b3IgKikgZGVzYzsKKy0odWludDMyX3Qp bW1pb1JlYWRBdE9mZnNldDooc2l6ZV90KSBvZmZzZXQ7CistKHZvaWQpbW1pb1dyaXRlQXRPZmZz ZXQ6KHNpemVfdCkgb2Zmc2V0IHZhbHVlOih1aW50MzJfdCl2YWx1ZTsKK0BlbmQKKwordHlwZWRl ZiBzdHJ1Y3QgQXBwbGVHRlhNUiB7CisgICAgUVRBSUxRX0VOVFJZKEFwcGxlR0ZYTVIpIG5vZGU7 CisgICAgaHdhZGRyIHBhOworICAgIHZvaWQgKnZhOworICAgIHVpbnQ2NF90IGxlbjsKK30gQXBw bGVHRlhNUjsKKwordHlwZWRlZiBRVEFJTFFfSEVBRCgsIEFwcGxlR0ZYTVIpIEFwcGxlR0ZYTVJM aXN0OworCit0eXBlZGVmIHN0cnVjdCBBcHBsZUdGWFRhc2sgeworICAgIFFUQUlMUV9FTlRSWShB cHBsZUdGWFRhc2spIG5vZGU7CisgICAgdm9pZCAqbWVtOworICAgIHVpbnQ2NF90IGxlbjsKK30g QXBwbGVHRlhUYXNrOworCit0eXBlZGVmIFFUQUlMUV9IRUFEKCwgQXBwbGVHRlhUYXNrKSBBcHBs ZUdGWFRhc2tMaXN0OworCit0eXBlZGVmIHN0cnVjdCBBcHBsZUdGWFN0YXRlIHsKKyAgICAvKiBQ cml2YXRlICovCisgICAgU3lzQnVzRGV2aWNlIHBhcmVudF9vYmo7CisKKyAgICAvKiBQdWJsaWMg Ki8KKyAgICBxZW11X2lycSBpcnFfZ2Z4OworICAgIHFlbXVfaXJxIGlycV9pb3NmYzsKKyAgICBN ZW1vcnlSZWdpb24gaW9tZW1fZ2Z4OworICAgIE1lbW9yeVJlZ2lvbiBpb21lbV9pb3NmYzsKKyAg ICBpZDxQR0RldmljZT4gcGdkZXY7CisgICAgaWQ8UEdEaXNwbGF5PiBwZ2Rpc3A7CisgICAgUEdJ T1N1cmZhY2VIb3N0RGV2aWNlICpwZ2lvc2ZjOworICAgIEFwcGxlR0ZYTVJMaXN0IG1yczsKKyAg ICBBcHBsZUdGWFRhc2tMaXN0IHRhc2tzOworICAgIFFlbXVDb25zb2xlICpjb247CisgICAgdm9p ZCAqdnJhbTsKKyAgICBpZDxNVExEZXZpY2U+IG10bDsKKyAgICBpZDxNVExUZXh0dXJlPiB0ZXh0 dXJlOworICAgIGJvb2wgaGFuZGxlc19mcmFtZXM7CisgICAgYm9vbCBuZXdfZnJhbWU7CisgICAg Ym9vbCBjdXJzb3Jfc2hvdzsKKyAgICBEaXNwbGF5U3VyZmFjZSAqc3VyZmFjZTsKKyAgICBRRU1V Q3Vyc29yICpjdXJzb3I7Cit9IEFwcGxlR0ZYU3RhdGU7CisKKworT0JKRUNUX0RFQ0xBUkVfU0lN UExFX1RZUEUoQXBwbGVHRlhTdGF0ZSwgQVBQTEVfR0ZYKQorCitzdGF0aWMgQXBwbGVHRlhUYXNr ICphcHBsZV9nZnhfbmV3X3Rhc2soQXBwbGVHRlhTdGF0ZSAqcywgdWludDY0X3QgbGVuKQorewor ICAgIHZvaWQgKmJhc2UgPSBBUFBMRV9HRlhfQkFTRV9WQTsKKyAgICBBcHBsZUdGWFRhc2sgKnRh c2s7CisKKyAgICBRVEFJTFFfRk9SRUFDSCh0YXNrLCAmcy0+dGFza3MsIG5vZGUpIHsKKyAgICAg ICAgaWYgKCh0YXNrLT5tZW0gKyB0YXNrLT5sZW4pID4gYmFzZSkgeworICAgICAgICAgICAgYmFz ZSA9IHRhc2stPm1lbSArIHRhc2stPmxlbjsKKyAgICAgICAgfQorICAgIH0KKworICAgIHRhc2sg PSBnX25ldzAoQXBwbGVHRlhUYXNrLCAxKTsKKworICAgIHRhc2stPmxlbiA9IGxlbjsKKyAgICB0 YXNrLT5tZW0gPSBiYXNlOworICAgIFFUQUlMUV9JTlNFUlRfVEFJTCgmcy0+dGFza3MsIHRhc2ss IG5vZGUpOworCisgICAgcmV0dXJuIHRhc2s7Cit9CisKK3N0YXRpYyBBcHBsZUdGWE1SICphcHBs ZV9nZnhfbWFwTWVtb3J5KEFwcGxlR0ZYU3RhdGUgKnMsIEFwcGxlR0ZYVGFzayAqdGFzaywKKyAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQ2NF90IHZvZmYsIHVpbnQ2 NF90IHBoeXMsIHVpbnQ2NF90IGxlbikKK3sKKyAgICBBcHBsZUdGWE1SICptciA9IGdfbmV3MChB cHBsZUdGWE1SLCAxKTsKKworICAgIG1yLT5wYSA9IHBoeXM7CisgICAgbXItPmxlbiA9IGxlbjsK KyAgICBtci0+dmEgPSB0YXNrLT5tZW0gKyB2b2ZmOworICAgIFFUQUlMUV9JTlNFUlRfVEFJTCgm cy0+bXJzLCBtciwgbm9kZSk7CisKKyAgICByZXR1cm4gbXI7Cit9CisKK3N0YXRpYyB1aW50NjRf dCBhcHBsZV9nZnhfcmVhZCh2b2lkICpvcGFxdWUsIGh3YWRkciBvZmZzZXQsIHVuc2lnbmVkIHNp emUpCit7CisgICAgQXBwbGVHRlhTdGF0ZSAqcyA9IG9wYXF1ZTsKKyAgICB1aW50NjRfdCByZXMg PSAwOworCisgICAgc3dpdGNoIChvZmZzZXQpIHsKKyAgICBkZWZhdWx0OgorICAgICAgICByZXMg PSBbcy0+cGdkZXYgbW1pb1JlYWRBdE9mZnNldDpvZmZzZXRdOworICAgICAgICBicmVhazsKKyAg ICB9CisKKyAgICB0cmFjZV9hcHBsZV9nZnhfcmVhZChvZmZzZXQsIHJlcyk7CisKKyAgICByZXR1 cm4gcmVzOworfQorCitzdGF0aWMgdm9pZCBhcHBsZV9nZnhfd3JpdGUodm9pZCAqb3BhcXVlLCBo d2FkZHIgb2Zmc2V0LCB1aW50NjRfdCB2YWwsIHVuc2lnbmVkIHNpemUpCit7CisgICAgQXBwbGVH RlhTdGF0ZSAqcyA9IG9wYXF1ZTsKKworICAgIHRyYWNlX2FwcGxlX2dmeF93cml0ZShvZmZzZXQs IHZhbCk7CisKKyAgICBxZW11X211dGV4X3VubG9ja19pb3RocmVhZCgpOworICAgIFtzLT5wZ2Rl diBtbWlvV3JpdGVBdE9mZnNldDpvZmZzZXQgdmFsdWU6dmFsXTsKKyAgICBxZW11X211dGV4X2xv Y2tfaW90aHJlYWQoKTsKK30KKworc3RhdGljIGNvbnN0IE1lbW9yeVJlZ2lvbk9wcyBhcHBsZV9n Znhfb3BzID0geworICAgIC5yZWFkID0gYXBwbGVfZ2Z4X3JlYWQsCisgICAgLndyaXRlID0gYXBw bGVfZ2Z4X3dyaXRlLAorICAgIC5lbmRpYW5uZXNzID0gREVWSUNFX05BVElWRV9FTkRJQU4sCisg ICAgLnZhbGlkID0geworICAgICAgICAubWluX2FjY2Vzc19zaXplID0gNCwKKyAgICAgICAgLm1h eF9hY2Nlc3Nfc2l6ZSA9IDgsCisgICAgfSwKKyAgICAuaW1wbCA9IHsKKyAgICAgICAgLm1pbl9h Y2Nlc3Nfc2l6ZSA9IDQsCisgICAgICAgIC5tYXhfYWNjZXNzX3NpemUgPSA0LAorICAgIH0sCit9 OworCitzdGF0aWMgdWludDY0X3QgYXBwbGVfaW9zZmNfcmVhZCh2b2lkICpvcGFxdWUsIGh3YWRk ciBvZmZzZXQsIHVuc2lnbmVkIHNpemUpCit7CisgICAgQXBwbGVHRlhTdGF0ZSAqcyA9IG9wYXF1 ZTsKKyAgICB1aW50NjRfdCByZXMgPSAwOworCisgICAgcWVtdV9tdXRleF91bmxvY2tfaW90aHJl YWQoKTsKKyAgICByZXMgPSBbcy0+cGdpb3NmYyBtbWlvUmVhZEF0T2Zmc2V0Om9mZnNldF07Cisg ICAgcWVtdV9tdXRleF9sb2NrX2lvdGhyZWFkKCk7CisKKyAgICB0cmFjZV9hcHBsZV9pb3NmY19y ZWFkKG9mZnNldCwgcmVzKTsKKworICAgIHJldHVybiByZXM7Cit9CisKK3N0YXRpYyB2b2lkIGFw cGxlX2lvc2ZjX3dyaXRlKHZvaWQgKm9wYXF1ZSwgaHdhZGRyIG9mZnNldCwgdWludDY0X3QgdmFs LCB1bnNpZ25lZCBzaXplKQoreworICAgIEFwcGxlR0ZYU3RhdGUgKnMgPSBvcGFxdWU7CisKKyAg ICB0cmFjZV9hcHBsZV9pb3NmY193cml0ZShvZmZzZXQsIHZhbCk7CisKKyAgICBbcy0+cGdpb3Nm YyBtbWlvV3JpdGVBdE9mZnNldDpvZmZzZXQgdmFsdWU6dmFsXTsKK30KKworc3RhdGljIGNvbnN0 IE1lbW9yeVJlZ2lvbk9wcyBhcHBsZV9pb3NmY19vcHMgPSB7CisgICAgLnJlYWQgPSBhcHBsZV9p b3NmY19yZWFkLAorICAgIC53cml0ZSA9IGFwcGxlX2lvc2ZjX3dyaXRlLAorICAgIC5lbmRpYW5u ZXNzID0gREVWSUNFX05BVElWRV9FTkRJQU4sCisgICAgLnZhbGlkID0geworICAgICAgICAubWlu X2FjY2Vzc19zaXplID0gNCwKKyAgICAgICAgLm1heF9hY2Nlc3Nfc2l6ZSA9IDgsCisgICAgfSwK KyAgICAuaW1wbCA9IHsKKyAgICAgICAgLm1pbl9hY2Nlc3Nfc2l6ZSA9IDQsCisgICAgICAgIC5t YXhfYWNjZXNzX3NpemUgPSA4LAorICAgIH0sCit9OworCitzdGF0aWMgdm9pZCBhcHBsZV9nZnhf ZmJfdXBkYXRlX2Rpc3BsYXkodm9pZCAqb3BhcXVlKQoreworICAgIEFwcGxlR0ZYU3RhdGUgKnMg PSBvcGFxdWU7CisKKyAgICBpZiAoIXMtPm5ld19mcmFtZSB8fCAhcy0+aGFuZGxlc19mcmFtZXMp IHsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIHMtPm5ld19mcmFtZSA9IGZhbHNlOwor CisgICAgQk9PTCByOworICAgIHVpbnQzMl90IHdpZHRoID0gc3VyZmFjZV93aWR0aChzLT5zdXJm YWNlKTsKKyAgICB1aW50MzJfdCBoZWlnaHQgPSBzdXJmYWNlX2hlaWdodChzLT5zdXJmYWNlKTsK KyAgICBNVExSZWdpb24gcmVnaW9uID0gTVRMUmVnaW9uTWFrZTJEKDAsIDAsIHdpZHRoLCBoZWln aHQpOworICAgIGlkPE1UTENvbW1hbmRRdWV1ZT4gY29tbWFuZFF1ZXVlID0gW3MtPm10bCBuZXdD b21tYW5kUXVldWVdOworICAgIGlkPE1UTENvbW1hbmRCdWZmZXI+IG1pcG1hcENvbW1hbmRCdWZm ZXIgPSBbY29tbWFuZFF1ZXVlIGNvbW1hbmRCdWZmZXJdOworCisgICAgciA9IFtzLT5wZ2Rpc3Ag ZW5jb2RlQ3VycmVudEZyYW1lVG9Db21tYW5kQnVmZmVyOm1pcG1hcENvbW1hbmRCdWZmZXIKKyAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRleHR1cmU6cy0+dGV4 dHVyZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlZ2lv bjpyZWdpb25dOworCisgICAgaWYgKHIgIT0gWUVTKSB7CisgICAgICAgIHJldHVybjsKKyAgICB9 CisKKyAgICBpZDxNVExCbGl0Q29tbWFuZEVuY29kZXI+IGJsaXRDb21tYW5kRW5jb2RlciA9IFtt aXBtYXBDb21tYW5kQnVmZmVyIGJsaXRDb21tYW5kRW5jb2Rlcl07CisgICAgW2JsaXRDb21tYW5k RW5jb2RlciBnZW5lcmF0ZU1pcG1hcHNGb3JUZXh0dXJlOnMtPnRleHR1cmVdOworICAgIFtibGl0 Q29tbWFuZEVuY29kZXIgZW5kRW5jb2RpbmddOworICAgIFttaXBtYXBDb21tYW5kQnVmZmVyIGNv bW1pdF07CisgICAgW21pcG1hcENvbW1hbmRCdWZmZXIgd2FpdFVudGlsQ29tcGxldGVkXTsKKyAg ICBbcy0+dGV4dHVyZSBnZXRCeXRlczpzLT52cmFtIGJ5dGVzUGVyUm93Oih3aWR0aCAqIDQpCisg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBieXRlc1BlckltYWdlOiAod2lkdGggKiBo ZWlnaHQgKiA0KQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZnJvbVJlZ2lvbjog cmVnaW9uCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtaXBtYXBMZXZlbDogMAor ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2xpY2U6IDBdOworCisgICAgLyogTmVl ZCB0byByZW5kZXIgY3Vyc29yIG1hbnVhbGx5IGlmIG5vdCBzdXBwb3J0ZWQgYnkgYmFja2VuZCAq LworICAgIGlmICghZHB5X2N1cnNvcl9kZWZpbmVfc3VwcG9ydGVkKHMtPmNvbikgJiYgcy0+Y3Vy c29yICYmIHMtPmN1cnNvcl9zaG93KSB7CisgICAgICAgIHBpeG1hbl9pbWFnZV90ICppbWFnZSA9 CisgICAgICAgICAgICBwaXhtYW5faW1hZ2VfY3JlYXRlX2JpdHMoUElYTUFOX2E4cjhnOGI4LAor ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHMtPmN1cnNvci0+d2lkdGgsCisg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcy0+Y3Vyc29yLT5oZWlnaHQsCisg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHVpbnQzMl90ICopcy0+Y3Vyc29y LT5kYXRhLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHMtPmN1cnNvci0+ d2lkdGggKiA0KTsKKworICAgICAgICBwaXhtYW5faW1hZ2VfY29tcG9zaXRlKFBJWE1BTl9PUF9P VkVSLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGltYWdlLCBOVUxMLCBzLT5zdXJm YWNlLT5pbWFnZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwLCAwLCAwLCAwLCBz LT5wZ2Rpc3AuY3Vyc29yUG9zaXRpb24ueCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBzLT5wZ2Rpc3AuY3Vyc29yUG9zaXRpb24ueSwgcy0+Y3Vyc29yLT53aWR0aCwKKyAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBzLT5jdXJzb3ItPmhlaWdodCk7CisKKyAgICAgICAgcGl4 bWFuX2ltYWdlX3VucmVmKGltYWdlKTsKKyAgICB9CisKKyAgICBkcHlfZ2Z4X3VwZGF0ZV9mdWxs KHMtPmNvbik7CisKKyAgICBbY29tbWFuZFF1ZXVlIHJlbGVhc2VdOworfQorCitzdGF0aWMgY29u c3QgR3JhcGhpY0h3T3BzIGFwcGxlX2dmeF9mYl9vcHMgPSB7CisgICAgLmdmeF91cGRhdGUgPSBh cHBsZV9nZnhfZmJfdXBkYXRlX2Rpc3BsYXksCit9OworCitzdGF0aWMgdm9pZCB1cGRhdGVfY3Vy c29yKEFwcGxlR0ZYU3RhdGUgKnMpCit7CisgICAgZHB5X21vdXNlX3NldChzLT5jb24sIHMtPnBn ZGlzcC5jdXJzb3JQb3NpdGlvbi54LCBzLT5wZ2Rpc3AuY3Vyc29yUG9zaXRpb24ueSwgcy0+Y3Vy c29yX3Nob3cpOworCisgICAgLyogTmVlZCB0byByZW5kZXIgbWFudWFsbHkgaWYgY3Vyc29yIGlz IG5vdCBuYXRpdmVseSBzdXBwb3J0ZWQgKi8KKyAgICBpZiAoIWRweV9jdXJzb3JfZGVmaW5lX3N1 cHBvcnRlZChzLT5jb24pKSB7CisgICAgICAgIHMtPm5ld19mcmFtZSA9IHRydWU7CisgICAgfQor fQorCitzdGF0aWMgdm9pZCBzZXRfbW9kZShBcHBsZUdGWFN0YXRlICpzLCB1aW50MzJfdCB3aWR0 aCwgdWludDMyX3QgaGVpZ2h0KQoreworICAgIHZvaWQgKnZyYW0gPSBnX21hbGxvYzAod2lkdGgg KiBoZWlnaHQgKiA0KTsKKyAgICB2b2lkICpvbGRfdnJhbSA9IHMtPnZyYW07CisgICAgRGlzcGxh eVN1cmZhY2UgKnN1cmZhY2U7CisgICAgTVRMVGV4dHVyZURlc2NyaXB0b3IgKnRleHR1cmVEZXNj cmlwdG9yOworICAgIGlkPE1UTFRleHR1cmU+IG9sZF90ZXh0dXJlID0gcy0+dGV4dHVyZTsKKwor ICAgIGlmIChzLT5zdXJmYWNlICYmCisgICAgICAgIHdpZHRoID09IHN1cmZhY2Vfd2lkdGgocy0+ c3VyZmFjZSkgJiYKKyAgICAgICAgaGVpZ2h0ID09IHN1cmZhY2VfaGVpZ2h0KHMtPnN1cmZhY2Up KSB7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgc3VyZmFjZSA9IHFlbXVfY3JlYXRlX2Rp c3BsYXlzdXJmYWNlX2Zyb20od2lkdGgsIGhlaWdodCwgUElYTUFOX0xFX2E4cjhnOGI4LAorICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdpZHRoICogNCwgdnJh bSk7CisgICAgcy0+c3VyZmFjZSA9IHN1cmZhY2U7CisgICAgZHB5X2dmeF9yZXBsYWNlX3N1cmZh Y2Uocy0+Y29uLCBzdXJmYWNlKTsKKyAgICBzLT52cmFtID0gdnJhbTsKKyAgICBnX2ZyZWUob2xk X3ZyYW0pOworCisgICAgdGV4dHVyZURlc2NyaXB0b3IgPSBbTVRMVGV4dHVyZURlc2NyaXB0b3Ig dGV4dHVyZTJERGVzY3JpcHRvcldpdGhQaXhlbEZvcm1hdDpNVExQaXhlbEZvcm1hdEJHUkE4VW5v cm0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aWR0aDp3 aWR0aAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhlaWdo dDpoZWlnaHQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBt aXBtYXBwZWQ6Tk9dOworICAgIHRleHR1cmVEZXNjcmlwdG9yLnVzYWdlID0gcy0+cGdkaXNwLm1p bmltdW1UZXh0dXJlVXNhZ2U7CisgICAgcy0+dGV4dHVyZSA9IFtzLT5tdGwgbmV3VGV4dHVyZVdp dGhEZXNjcmlwdG9yOnRleHR1cmVEZXNjcmlwdG9yXTsKKworICAgIGlmIChvbGRfdGV4dHVyZSkg eworICAgICAgICBbb2xkX3RleHR1cmUgcmVsZWFzZV07CisgICAgfQorfQorCitzdGF0aWMgdm9p ZCBjcmVhdGVfZmIoQXBwbGVHRlhTdGF0ZSAqcykKK3sKKworICAgIHMtPmNvbiA9IGdyYXBoaWNf Y29uc29sZV9pbml0KE5VTEwsIDAsICZhcHBsZV9nZnhfZmJfb3BzLCBzKTsKKyAgICBzZXRfbW9k ZShzLCAxNDQwLCAxMDgwKTsKKworICAgIHMtPmN1cnNvcl9zaG93ID0gdHJ1ZTsKK30KKworc3Rh dGljIHZvaWQgYXBwbGVfZ2Z4X3Jlc2V0KERldmljZVN0YXRlICpkKQoreworfQorCitzdGF0aWMg dm9pZCBhcHBsZV9nZnhfaW5pdChPYmplY3QgKm9iaikKK3sKKyAgICBBcHBsZUdGWFN0YXRlICpz ID0gQVBQTEVfR0ZYKG9iaik7CisKKyAgICBtZW1vcnlfcmVnaW9uX2luaXRfaW8oJnMtPmlvbWVt X2dmeCwgb2JqLCAmYXBwbGVfZ2Z4X29wcywgcywgVFlQRV9BUFBMRV9HRlgsIDB4NDAwMCk7Cisg ICAgbWVtb3J5X3JlZ2lvbl9pbml0X2lvKCZzLT5pb21lbV9pb3NmYywgb2JqLCAmYXBwbGVfaW9z ZmNfb3BzLCBzLCBUWVBFX0FQUExFX0dGWCwgMHgxMDAwMCk7CisgICAgc3lzYnVzX2luaXRfbW1p byhTWVNfQlVTX0RFVklDRShzKSwgJnMtPmlvbWVtX2dmeCk7CisgICAgc3lzYnVzX2luaXRfbW1p byhTWVNfQlVTX0RFVklDRShzKSwgJnMtPmlvbWVtX2lvc2ZjKTsKKyAgICBzeXNidXNfaW5pdF9p cnEoU1lTX0JVU19ERVZJQ0UocyksICZzLT5pcnFfZ2Z4KTsKKyAgICBzeXNidXNfaW5pdF9pcnEo U1lTX0JVU19ERVZJQ0UocyksICZzLT5pcnFfaW9zZmMpOworfQorCitzdGF0aWMgdm9pZCBhcHBs ZV9nZnhfcmVhbGl6ZShEZXZpY2VTdGF0ZSAqZGV2LCBFcnJvciAqKmVycnApCit7CisgICAgQXBw bGVHRlhTdGF0ZSAqcyA9IEFQUExFX0dGWChkZXYpOworICAgIFBHRGV2aWNlRGVzY3JpcHRvciAq ZGVzYyA9IFtQR0RldmljZURlc2NyaXB0b3IgbmV3XTsKKyAgICBQR0Rpc3BsYXlEZXNjcmlwdG9y ICpkaXNwX2Rlc2MgPSBbUEdEaXNwbGF5RGVzY3JpcHRvciBuZXddOworICAgIFBHSU9TdXJmYWNl SG9zdERldmljZURlc2NyaXB0b3IgKmlvc2ZjX2Rlc2MgPSBbUEdJT1N1cmZhY2VIb3N0RGV2aWNl RGVzY3JpcHRvciBuZXddOworICAgIFBHRGV2aWNlRGVzY3JpcHRvckV4dCAqZGVzY19leHQgPSAo UEdEZXZpY2VEZXNjcmlwdG9yRXh0ICopZGVzYzsKKyAgICBQR0Rpc3BsYXlNb2RlICptb2Rlc1tB UlJBWV9TSVpFKGFwcGxlX2dmeF9tb2RlcyldOworICAgIGludCBpOworCisgICAgZm9yIChpID0g MDsgaSA8IEFSUkFZX1NJWkUoYXBwbGVfZ2Z4X21vZGVzKTsgaSsrKSB7CisgICAgICAgIG1vZGVz W2ldID0gW1BHRGlzcGxheU1vZGUgbmV3XTsKKyAgICAgICAgW21vZGVzW2ldIGluaXRXaXRoU2l6 ZUluUGl4ZWxzOmFwcGxlX2dmeF9tb2Rlc1tpXSByZWZyZXNoUmF0ZUluSHo6NjAuXTsKKyAgICB9 CisKKyAgICBzLT5tdGwgPSBNVExDcmVhdGVTeXN0ZW1EZWZhdWx0RGV2aWNlKCk7CisKKyAgICBk ZXNjLmRldmljZSA9IHMtPm10bDsKKyAgICBkZXNjX2V4dC51c2luZ0lPU3VyZmFjZU1hcHBlciA9 IHRydWU7CisKKyAgICBkZXNjLmNyZWF0ZVRhc2sgPSBeKHVpbnQ2NF90IHZtU2l6ZSwgdm9pZCAq IF9OdWxsYWJsZSAqIF9Ob25udWxsIGJhc2VBZGRyZXNzKSB7CisgICAgICAgIEFwcGxlR0ZYVGFz ayAqdGFzayA9IGFwcGxlX2dmeF9uZXdfdGFzayhzLCB2bVNpemUpOworICAgICAgICAqYmFzZUFk ZHJlc3MgPSB0YXNrLT5tZW07CisgICAgICAgIHRyYWNlX2FwcGxlX2dmeF9jcmVhdGVfdGFzayh2 bVNpemUsICpiYXNlQWRkcmVzcyk7CisgICAgICAgIHJldHVybiAoUEdUYXNrX3QgKil0YXNrOwor ICAgIH07CisKKyAgICBkZXNjLmRlc3Ryb3lUYXNrID0gXihQR1Rhc2tfdCAqIF9Ob25udWxsIF90 YXNrKSB7CisgICAgICAgIEFwcGxlR0ZYVGFzayAqdGFzayA9IChBcHBsZUdGWFRhc2sgKilfdGFz azsKKyAgICAgICAgdHJhY2VfYXBwbGVfZ2Z4X2Rlc3Ryb3lfdGFzayh0YXNrKTsKKyAgICAgICAg UVRBSUxRX1JFTU9WRSgmcy0+dGFza3MsIHRhc2ssIG5vZGUpOworICAgICAgICBnX2ZyZWUodGFz ayk7CisgICAgfTsKKworICAgIGRlc2MubWFwTWVtb3J5ID0gXihQR1Rhc2tfdCAqIF9Ob25udWxs IF90YXNrLCB1aW50MzJfdCByYW5nZUNvdW50LCB1aW50NjRfdCB2aXJ0dWFsT2Zmc2V0LCBib29s IHJlYWRPbmx5LCBQR1BoeXNpY2FsTWVtb3J5UmFuZ2VfdCAqIF9Ob25udWxsIHJhbmdlcykgewor ICAgICAgICBBcHBsZUdGWFRhc2sgKnRhc2sgPSAoQXBwbGVHRlhUYXNrKilfdGFzazsKKwltYWNo X3BvcnRfdCBtdGFzayA9IG1hY2hfdGFza19zZWxmKCk7CisgICAgICAgIHRyYWNlX2FwcGxlX2dm eF9tYXBfbWVtb3J5KHRhc2ssIHJhbmdlQ291bnQsIHZpcnR1YWxPZmZzZXQsIHJlYWRPbmx5KTsK KyAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCByYW5nZUNvdW50OyBpKyspIHsKKyAgICAgICAg ICAgIFBHUGh5c2ljYWxNZW1vcnlSYW5nZV90ICpyYW5nZSA9ICZyYW5nZXNbaV07CisgICAgICAg ICAgICBNZW1vcnlSZWdpb24gKnRtcF9tcjsKKyAgICAgICAgICAgIC8qIFRPRE86IEJvdW5kcyBj aGVja3M/IHIvbz8gKi8KKyAgICAgICAgICAgIHFlbXVfbXV0ZXhfbG9ja19pb3RocmVhZCgpOwor ICAgICAgICAgICAgQXBwbGVHRlhNUiAqbXIgPSBhcHBsZV9nZnhfbWFwTWVtb3J5KHMsIHRhc2ss IHZpcnR1YWxPZmZzZXQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgcmFuZ2UtPnBoeXNpY2FsQWRkcmVzcywKKyAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICByYW5nZS0+cGh5c2ljYWxMZW5ndGgpOworCisgICAg ICAgICAgICB0cmFjZV9hcHBsZV9nZnhfbWFwX21lbW9yeV9yYW5nZShpLCByYW5nZS0+cGh5c2lj YWxBZGRyZXNzLCByYW5nZS0+cGh5c2ljYWxMZW5ndGgsIG1yLT52YSk7CisKKyAgICAgICAgICAg IHZtX2FkZHJlc3NfdCB0YXJnZXQgPSAodm1fYWRkcmVzc190KW1yLT52YTsKKyAgICAgICAgICAg IHVpbnQ2NF90IG1hc2sgPSAwOworICAgICAgICAgICAgYm9vbCBhbnl3aGVyZSA9IGZhbHNlOwor ICAgICAgICAgICAgdm1fYWRkcmVzc190IHNvdXJjZSA9ICh2bV9hZGRyZXNzX3QpZ3BhMmh2YSgm dG1wX21yLCBtci0+cGEsIG1yLT5sZW4sIE5VTEwpOworICAgICAgICAgICAgdm1fcHJvdF90IGN1 cl9wcm90ZWN0aW9uID0gMDsKKyAgICAgICAgICAgIHZtX3Byb3RfdCBtYXhfcHJvdGVjdGlvbiA9 IDA7CisgICAgICAgICAgICBrZXJuX3JldHVybl90IHJldHZhbCA9IHZtX3JlbWFwKG10YXNrLCAm dGFyZ2V0LCBtci0+bGVuLCBtYXNrLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBhbnl3aGVyZSwgbXRhc2ssIHNvdXJjZSwgZmFsc2UsCisgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZjdXJfcHJvdGVjdGlvbiwgJm1heF9wcm90 ZWN0aW9uLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBWTV9J TkhFUklUX0RFRkFVTFQpOworICAgICAgICAgICAgdHJhY2VfYXBwbGVfZ2Z4X3JlbWFwKHJldHZh bCwgc291cmNlLCB0YXJnZXQpOworICAgICAgICAgICAgZ19hc3NlcnQocmV0dmFsID09IEtFUk5f U1VDQ0VTUyk7CisKKyAgICAgICAgICAgIHFlbXVfbXV0ZXhfdW5sb2NrX2lvdGhyZWFkKCk7CisK KyAgICAgICAgICAgIHZpcnR1YWxPZmZzZXQgKz0gbXItPmxlbjsKKyAgICAgICAgfQorICAgICAg ICByZXR1cm4gKGJvb2wpdHJ1ZTsKKyAgICB9OworCisgICAgZGVzYy51bm1hcE1lbW9yeSA9IF4o UEdUYXNrX3QgKiBfTm9ubnVsbCBfdGFzaywgdWludDY0X3QgdmlydHVhbE9mZnNldCwgdWludDY0 X3QgbGVuZ3RoKSB7CisgICAgICAgIEFwcGxlR0ZYVGFzayAqdGFzayA9IChBcHBsZUdGWFRhc2sg KilfdGFzazsKKyAgICAgICAgQXBwbGVHRlhNUiAqbXIsICpuZXh0OworCisgICAgICAgIHRyYWNl X2FwcGxlX2dmeF91bm1hcF9tZW1vcnkodGFzaywgdmlydHVhbE9mZnNldCwgbGVuZ3RoKTsKKyAg ICAgICAgcWVtdV9tdXRleF9sb2NrX2lvdGhyZWFkKCk7CisgICAgICAgIFFUQUlMUV9GT1JFQUNI X1NBRkUobXIsICZzLT5tcnMsIG5vZGUsIG5leHQpIHsKKyAgICAgICAgICAgIGlmIChtci0+dmEg Pj0gKHRhc2stPm1lbSArIHZpcnR1YWxPZmZzZXQpICYmCisgICAgICAgICAgICAgICAgKG1yLT52 YSArIG1yLT5sZW4pIDw9ICh0YXNrLT5tZW0gKyB2aXJ0dWFsT2Zmc2V0ICsgbGVuZ3RoKSkgewor ICAgICAgICAgICAgICAgIHZtX2FkZHJlc3NfdCBhZGRyID0gKHZtX2FkZHJlc3NfdCltci0+dmE7 CisgICAgICAgICAgICAgICAgdm1fZGVhbGxvY2F0ZShtYWNoX3Rhc2tfc2VsZigpLCBhZGRyLCBt ci0+bGVuKTsKKyAgICAgICAgICAgICAgICBRVEFJTFFfUkVNT1ZFKCZzLT5tcnMsIG1yLCBub2Rl KTsKKyAgICAgICAgICAgICAgICBnX2ZyZWUobXIpOworICAgICAgICAgICAgfQorICAgICAgICB9 CisgICAgICAgIHFlbXVfbXV0ZXhfdW5sb2NrX2lvdGhyZWFkKCk7CisgICAgICAgIHJldHVybiAo Ym9vbCl0cnVlOworICAgIH07CisKKyAgICBkZXNjLnJlYWRNZW1vcnkgPSBeKHVpbnQ2NF90IHBo eXNpY2FsQWRkcmVzcywgdWludDY0X3QgbGVuZ3RoLCB2b2lkICogX05vbm51bGwgZHN0KSB7Cisg ICAgICAgIHRyYWNlX2FwcGxlX2dmeF9yZWFkX21lbW9yeShwaHlzaWNhbEFkZHJlc3MsIGxlbmd0 aCwgZHN0KTsKKyAgICAgICAgY3B1X3BoeXNpY2FsX21lbW9yeV9yZWFkKHBoeXNpY2FsQWRkcmVz cywgZHN0LCBsZW5ndGgpOworICAgICAgICByZXR1cm4gKGJvb2wpdHJ1ZTsKKyAgICB9OworCisg ICAgZGVzYy5yYWlzZUludGVycnVwdCA9IF4odWludDMyX3QgdmVjdG9yKSB7CisgICAgICAgIGJv b2wgbG9ja2VkOworCisgICAgICAgIHRyYWNlX2FwcGxlX2dmeF9yYWlzZV9pcnEodmVjdG9yKTsK KyAgICAgICAgbG9ja2VkID0gcWVtdV9tdXRleF9pb3RocmVhZF9sb2NrZWQoKTsKKyAgICAgICAg aWYgKCFsb2NrZWQpIHsKKyAgICAgICAgICAgIHFlbXVfbXV0ZXhfbG9ja19pb3RocmVhZCgpOwor ICAgICAgICB9CisgICAgICAgIHFlbXVfaXJxX3B1bHNlKHMtPmlycV9nZngpOworICAgICAgICBp ZiAoIWxvY2tlZCkgeworICAgICAgICAgICAgcWVtdV9tdXRleF91bmxvY2tfaW90aHJlYWQoKTsK KyAgICAgICAgfQorICAgIH07CisKKyAgICBkZXNjLmFkZFRyYWNlUmFuZ2UgPSBeKFBHUGh5c2lj YWxNZW1vcnlSYW5nZV90ICogX05vbm51bGwgcmFuZ2UsIFBHVHJhY2VSYW5nZUhhbmRsZXIgX05v bm51bGwgaGFuZGxlcikgeworICAgICAgICAvKiBOZXZlciBzYXcgdGhpcyBjYWxsZWQuIFJldHVy biBhIGJvZ3VzIHBvaW50ZXIgc28gd2UgY2F0Y2ggYWNjZXNzLiAqLworICAgICAgICByZXR1cm4g KFBHVHJhY2VSYW5nZV90ICopKHZvaWQgKikodWludHB0cl90KTB4NDI0MjsKKyAgICB9OworCisg ICAgZGVzYy5yZW1vdmVUcmFjZVJhbmdlID0gXihQR1RyYWNlUmFuZ2VfdCAqIF9Ob25udWxsIHJh bmdlKSB7CisgICAgICAgIC8qIE5ldmVyIHNhdyB0aGlzIGNhbGxlZC4gTm90aGluZyB0byBkby4g Ki8KKyAgICB9OworICAgIHMtPnBnZGV2ID0gUEdOZXdEZXZpY2VXaXRoRGVzY3JpcHRvcihkZXNj KTsKKworICAgIFtkaXNwX2Rlc2MgaW5pdF07CisgICAgZGlzcF9kZXNjLm5hbWUgPSBAIlFFTVUg ZGlzcGxheSI7CisgICAgZGlzcF9kZXNjLnNpemVJbk1pbGxpbWV0ZXJzID0gTlNNYWtlU2l6ZSg0 MDAuLCAzMDAuKTsgLyogQSAyMCIgZGlzcGxheSAqLworICAgIGRpc3BfZGVzYy5xdWV1ZSA9IGRp c3BhdGNoX2dldF9tYWluX3F1ZXVlKCk7CisgICAgZGlzcF9kZXNjLm5ld0ZyYW1lRXZlbnRIYW5k bGVyID0gXih2b2lkKSB7CisgICAgICAgIHRyYWNlX2FwcGxlX2dmeF9uZXdfZnJhbWUoKTsKKwor ICAgICAgICAvKiBUZWxsIFFFTVUgZ2Z4IHN0YWNrIHRoYXQgYSBuZXcgZnJhbWUgYXJyaXZlZCAq LworICAgICAgICBzLT5oYW5kbGVzX2ZyYW1lcyA9IHRydWU7CisgICAgICAgIHMtPm5ld19mcmFt ZSA9IHRydWU7CisgICAgfTsKKyAgICBkaXNwX2Rlc2MubW9kZUNoYW5nZUhhbmRsZXIgPSBeKFBH RGlzcGxheUNvb3JkX3Qgc2l6ZUluUGl4ZWxzLCBPU1R5cGUgcGl4ZWxGb3JtYXQpIHsKKyAgICAg ICAgdHJhY2VfYXBwbGVfZ2Z4X21vZGVfY2hhbmdlKHNpemVJblBpeGVscy54LCBzaXplSW5QaXhl bHMueSk7CisgICAgICAgIHNldF9tb2RlKHMsIHNpemVJblBpeGVscy54LCBzaXplSW5QaXhlbHMu eSk7CisgICAgfTsKKyAgICBkaXNwX2Rlc2MuY3Vyc29yR2x5cGhIYW5kbGVyID0gXihOU0JpdG1h cEltYWdlUmVwICpnbHlwaCwgUEdEaXNwbGF5Q29vcmRfdCBob3RTcG90KSB7CisgICAgICAgIHVp bnQzMl90IGJwcCA9IGdseXBoLmJpdHNQZXJQaXhlbDsKKyAgICAgICAgdWludDY0X3Qgd2lkdGgg PSBnbHlwaC5waXhlbHNXaWRlOworICAgICAgICB1aW50NjRfdCBoZWlnaHQgPSBnbHlwaC5waXhl bHNIaWdoOworCisgICAgICAgIHRyYWNlX2FwcGxlX2dmeF9jdXJzb3Jfc2V0KGJwcCwgd2lkdGgs IGhlaWdodCk7CisKKyAgICAgICAgaWYgKHMtPmN1cnNvcikgeworICAgICAgICAgICAgY3Vyc29y X3VucmVmKHMtPmN1cnNvcik7CisgICAgICAgIH0KKyAgICAgICAgcy0+Y3Vyc29yID0gY3Vyc29y X2FsbG9jKHdpZHRoLCBoZWlnaHQpOworCisgICAgICAgIC8qIFRPRE8gaGFuZGxlIGRpZmZlcmVu dCBicHAgKi8KKyAgICAgICAgaWYgKGJwcCA9PSAzMikgeworICAgICAgICAgICAgbWVtY3B5KHMt PmN1cnNvci0+ZGF0YSwgZ2x5cGguYml0bWFwRGF0YSwgZ2x5cGguYnl0ZXNQZXJQbGFuZSk7Cisg ICAgICAgICAgICBkcHlfY3Vyc29yX2RlZmluZShzLT5jb24sIHMtPmN1cnNvcik7CisgICAgICAg ICAgICB1cGRhdGVfY3Vyc29yKHMpOworICAgICAgICB9CisgICAgfTsKKyAgICBkaXNwX2Rlc2Mu Y3Vyc29yU2hvd0hhbmRsZXIgPSBeKEJPT0wgc2hvdykgeworICAgICAgICB0cmFjZV9hcHBsZV9n ZnhfY3Vyc29yX3Nob3coc2hvdyk7CisgICAgICAgIHMtPmN1cnNvcl9zaG93ID0gc2hvdzsKKyAg ICAgICAgdXBkYXRlX2N1cnNvcihzKTsKKyAgICB9OworICAgIGRpc3BfZGVzYy5jdXJzb3JNb3Zl SGFuZGxlciA9IF4odm9pZCkgeworICAgICAgICB0cmFjZV9hcHBsZV9nZnhfY3Vyc29yX21vdmUo KTsKKyAgICAgICAgdXBkYXRlX2N1cnNvcihzKTsKKyAgICB9OworCisgICAgcy0+cGdkaXNwID0g W3MtPnBnZGV2IG5ld0Rpc3BsYXlXaXRoRGVzY3JpcHRvcjpkaXNwX2Rlc2MgcG9ydDowIHNlcmlh bE51bToxMjM0XTsKKyAgICBzLT5wZ2Rpc3AubW9kZUxpc3QgPSBbTlNBcnJheSBhcnJheVdpdGhP YmplY3RzOm1vZGVzIGNvdW50OkFSUkFZX1NJWkUoYXBwbGVfZ2Z4X21vZGVzKV07CisKKyAgICBb aW9zZmNfZGVzYyBpbml0XTsKKyAgICBpb3NmY19kZXNjLm1hcE1lbW9yeSA9IF4odWludDY0X3Qg cGh5cywgdWludDY0X3QgbGVuLCBib29sIHJvLCB2b2lkICoqdmEsIHZvaWQgKmUsIHZvaWQgKmYp IHsKKyAgICAgICAgdHJhY2VfYXBwbGVfaW9zZmNfbWFwX21lbW9yeShwaHlzLCBsZW4sIHJvLCB2 YSwgZSwgZik7CisgICAgICAgIE1lbW9yeVJlZ2lvbiAqdG1wX21yOworICAgICAgICAqdmEgPSBn cGEyaHZhKCZ0bXBfbXIsIHBoeXMsIGxlbiwgTlVMTCk7CisgICAgICAgIHJldHVybiAoYm9vbCl0 cnVlOworICAgIH07CisKKyAgICBpb3NmY19kZXNjLnVubWFwTWVtb3J5ID0gXih2b2lkICphLCB2 b2lkICpiLCB2b2lkICpjLCB2b2lkICpkLCB2b2lkICplLCB2b2lkICpmKSB7CisgICAgICAgIHRy YWNlX2FwcGxlX2lvc2ZjX3VubWFwX21lbW9yeShhLCBiLCBjLCBkLCBlLCBmKTsKKyAgICAgICAg cmV0dXJuIChib29sKXRydWU7CisgICAgfTsKKworICAgIGlvc2ZjX2Rlc2MucmFpc2VJbnRlcnJ1 cHQgPSBeKHVpbnQzMl90IHZlY3RvcikgeworICAgICAgICB0cmFjZV9hcHBsZV9pb3NmY19yYWlz ZV9pcnEodmVjdG9yKTsKKyAgICAgICAgYm9vbCBsb2NrZWQgPSBxZW11X211dGV4X2lvdGhyZWFk X2xvY2tlZCgpOworICAgICAgICBpZiAoIWxvY2tlZCkgeworICAgICAgICAgICAgcWVtdV9tdXRl eF9sb2NrX2lvdGhyZWFkKCk7CisgICAgICAgIH0KKyAgICAgICAgcWVtdV9pcnFfcHVsc2Uocy0+ aXJxX2lvc2ZjKTsKKyAgICAgICAgaWYgKCFsb2NrZWQpIHsKKyAgICAgICAgICAgIHFlbXVfbXV0 ZXhfdW5sb2NrX2lvdGhyZWFkKCk7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIChib29sKXRy dWU7CisgICAgfTsKKworICAgIHMtPnBnaW9zZmMgPSBbUEdJT1N1cmZhY2VIb3N0RGV2aWNlIG5l d107CisgICAgW3MtPnBnaW9zZmMgaW5pdFdpdGhEZXNjcmlwdG9yOmlvc2ZjX2Rlc2NdOworCisg ICAgUVRBSUxRX0lOSVQoJnMtPm1ycyk7CisgICAgUVRBSUxRX0lOSVQoJnMtPnRhc2tzKTsKKwor ICAgIGNyZWF0ZV9mYihzKTsKK30KKworc3RhdGljIHZvaWQgYXBwbGVfZ2Z4X2NsYXNzX2luaXQo T2JqZWN0Q2xhc3MgKmtsYXNzLCB2b2lkICpkYXRhKQoreworICAgIERldmljZUNsYXNzICpkYyA9 IERFVklDRV9DTEFTUyhrbGFzcyk7CisKKyAgICBkYy0+cmVzZXQgPSBhcHBsZV9nZnhfcmVzZXQ7 CisgICAgZGMtPnJlYWxpemUgPSBhcHBsZV9nZnhfcmVhbGl6ZTsKK30KKworc3RhdGljIFR5cGVJ bmZvIGFwcGxlX2dmeF9pbmZvID0geworICAgIC5uYW1lICAgICAgICAgID0gVFlQRV9BUFBMRV9H RlgsCisgICAgLnBhcmVudCAgICAgICAgPSBUWVBFX1NZU19CVVNfREVWSUNFLAorICAgIC5pbnN0 YW5jZV9zaXplID0gc2l6ZW9mKEFwcGxlR0ZYU3RhdGUpLAorICAgIC5jbGFzc19pbml0ICAgID0g YXBwbGVfZ2Z4X2NsYXNzX2luaXQsCisgICAgLmluc3RhbmNlX2luaXQgPSBhcHBsZV9nZnhfaW5p dCwKK307CisKK3N0YXRpYyB2b2lkIGFwcGxlX2dmeF9yZWdpc3Rlcl90eXBlcyh2b2lkKQorewor ICAgIHR5cGVfcmVnaXN0ZXJfc3RhdGljKCZhcHBsZV9nZnhfaW5mbyk7Cit9CisKK3R5cGVfaW5p dChhcHBsZV9nZnhfcmVnaXN0ZXJfdHlwZXMpCmRpZmYgLS1naXQgYS9ody92bWFwcGxlL21lc29u LmJ1aWxkIGIvaHcvdm1hcHBsZS9tZXNvbi5idWlsZAppbmRleCA2NGI3ODY5M2EzLi43NGEwZDdh NWYxIDEwMDY0NAotLS0gYS9ody92bWFwcGxlL21lc29uLmJ1aWxkCisrKyBiL2h3L3ZtYXBwbGUv bWVzb24uYnVpbGQKQEAgLTEsMyArMSw0IEBACiBzeXN0ZW1fc3MuYWRkKHdoZW46ICdDT05GSUdf Vk1BUFBMRV9BRVMnLCAgaWZfdHJ1ZTogZmlsZXMoJ2Flcy5jJykpCiBzeXN0ZW1fc3MuYWRkKHdo ZW46ICdDT05GSUdfVk1BUFBMRV9CRElGJywgaWZfdHJ1ZTogZmlsZXMoJ2JkaWYuYycpKQogc3lz dGVtX3NzLmFkZCh3aGVuOiAnQ09ORklHX1ZNQVBQTEVfQ0ZHJywgIGlmX3RydWU6IGZpbGVzKCdj ZmcuYycpKQorc3lzdGVtX3NzLmFkZCh3aGVuOiAnQ09ORklHX1ZNQVBQTEVfUFZHJywgIGlmX3Ry dWU6IFtmaWxlcygnYXBwbGUtZ2Z4Lm0nKSwgcHZnLCBtZXRhbF0pCmRpZmYgLS1naXQgYS9ody92 bWFwcGxlL3RyYWNlLWV2ZW50cyBiL2h3L3ZtYXBwbGUvdHJhY2UtZXZlbnRzCmluZGV4IDQ1YzY5 ZGUyZTAuLjA3OGU2Nzk1NjAgMTAwNjQ0Ci0tLSBhL2h3L3ZtYXBwbGUvdHJhY2UtZXZlbnRzCisr KyBiL2h3L3ZtYXBwbGUvdHJhY2UtZXZlbnRzCkBAIC0yMywzICsyMywyNSBAQCBhZXNfZHVtcF9k YXRhKGNvbnN0IGNoYXIgKmRlc2MsIGNvbnN0IGNoYXIgKmhleCkgIiVzJXMiCiBiZGlmX3JlYWQo dWludDY0X3Qgb2Zmc2V0LCB1aW50MzJfdCBzaXplLCB1aW50NjRfdCB2YWx1ZSkgIm9mZnNldD0w eCUiUFJJeDY0IiBzaXplPTB4JXggdmFsdWU9MHglIlBSSXg2NAogYmRpZl93cml0ZSh1aW50NjRf dCBvZmZzZXQsIHVpbnQzMl90IHNpemUsIHVpbnQ2NF90IHZhbHVlKSAib2Zmc2V0PTB4JSJQUkl4 NjQiIHNpemU9MHgleCB2YWx1ZT0weCUiUFJJeDY0CiBiZGlmX3ZibGtfcmVhZChjb25zdCBjaGFy ICpkZXYsIHVpbnQ2NF90IGFkZHIsIHVpbnQ2NF90IG9mZnNldCwgdWludDMyX3QgbGVuLCBpbnQg cikgImRldj0lcyBhZGRyPTB4JSJQUkl4NjQiIG9mZj0weCUiUFJJeDY0IiBzaXplPTB4JXggcj0l ZCIKKworIyBhcHBsZS1nZngubQorYXBwbGVfZ2Z4X3JlYWQodWludDY0X3Qgb2Zmc2V0LCB1aW50 NjRfdCByZXMpICJvZmZzZXQ9MHglIlBSSXg2NCIgcmVzPTB4JSJQUkl4NjQKK2FwcGxlX2dmeF93 cml0ZSh1aW50NjRfdCBvZmZzZXQsIHVpbnQ2NF90IHZhbCkgIm9mZnNldD0weCUiUFJJeDY0IiB2 YWw9MHglIlBSSXg2NAorYXBwbGVfZ2Z4X2NyZWF0ZV90YXNrKHVpbnQzMl90IHZtX3NpemUsIHZv aWQgKnZhKSAidm1fc2l6ZT0weCV4IGJhc2VfYWRkcj0lcCIKK2FwcGxlX2dmeF9kZXN0cm95X3Rh c2sodm9pZCAqdGFzaykgInRhc2s9JXAiCithcHBsZV9nZnhfbWFwX21lbW9yeSh2b2lkICp0YXNr LCB1aW50MzJfdCByYW5nZV9jb3VudCwgdWludDY0X3QgdmlydHVhbF9vZmZzZXQsIHVpbnQzMl90 IHJlYWRfb25seSkgInRhc2s9JXAgcmFuZ2VfY291bnQ9MHgleCB2aXJ0dWFsX29mZnNldD0weCUi UFJJeDY0IiByZWFkX29ubHk9JWQiCithcHBsZV9nZnhfbWFwX21lbW9yeV9yYW5nZSh1aW50MzJf dCBpLCB1aW50NjRfdCBwaHlzX2FkZHIsIHVpbnQ2NF90IHBoeXNfbGVuLCB2b2lkICp2YSkgIlsl ZF0gcGh5c19hZGRyPTB4JSJQUkl4NjQiIHBoeXNfbGVuPTB4JSJQUkl4NjQiIHZhPSVwIgorYXBw bGVfZ2Z4X3JlbWFwKHVpbnQ2NF90IHJldHZhbCwgdWludDY0X3Qgc291cmNlLCB1aW50NjRfdCB0 YXJnZXQpICJyZXR2YWw9JSJQUklkNjQiIHNvdXJjZT0weCUiUFJJeDY0IiB0YXJnZXQ9MHglIlBS SXg2NAorYXBwbGVfZ2Z4X3VubWFwX21lbW9yeSh2b2lkICp0YXNrLCB1aW50NjRfdCB2aXJ0dWFs X29mZnNldCwgdWludDY0X3QgbGVuZ3RoKSAidGFzaz0lcCB2aXJ0dWFsX29mZnNldD0weCUiUFJJ eDY0IiBsZW5ndGg9MHglIlBSSXg2NAorYXBwbGVfZ2Z4X3JlYWRfbWVtb3J5KHVpbnQ2NF90IHBo eXNfYWRkcmVzcywgdWludDY0X3QgbGVuZ3RoLCB2b2lkICpkc3QpICJwaHlzX2FkZHI9MHglIlBS SXg2NCIgbGVuZ3RoPTB4JSJQUkl4NjQiIGRlc3Q9JXAiCithcHBsZV9nZnhfcmFpc2VfaXJxKHVp bnQzMl90IHZlY3RvcikgInZlY3Rvcj0weCV4IgorYXBwbGVfZ2Z4X25ld19mcmFtZSh2b2lkKSAi IgorYXBwbGVfZ2Z4X21vZGVfY2hhbmdlKHVpbnQ2NF90IHgsIHVpbnQ2NF90IHkpICJ4PSUiUFJJ ZDY0IiB5PSUiUFJJZDY0CithcHBsZV9nZnhfY3Vyc29yX3NldCh1aW50MzJfdCBicHAsIHVpbnQ2 NF90IHdpZHRoLCB1aW50NjRfdCBoZWlnaHQpICJicHA9JWQgd2lkdGg9JSJQUklkNjQiIGhlaWdo dD0weCUiUFJJZDY0CithcHBsZV9nZnhfY3Vyc29yX3Nob3codWludDMyX3Qgc2hvdykgInNob3c9 JWQiCithcHBsZV9nZnhfY3Vyc29yX21vdmUodm9pZCkgIiIKK2FwcGxlX2lvc2ZjX3JlYWQodWlu dDY0X3Qgb2Zmc2V0LCB1aW50NjRfdCByZXMpICJvZmZzZXQ9MHglIlBSSXg2NCIgcmVzPTB4JSJQ Ukl4NjQKK2FwcGxlX2lvc2ZjX3dyaXRlKHVpbnQ2NF90IG9mZnNldCwgdWludDY0X3QgdmFsKSAi b2Zmc2V0PTB4JSJQUkl4NjQiIHZhbD0weCUiUFJJeDY0CithcHBsZV9pb3NmY19tYXBfbWVtb3J5 KHVpbnQ2NF90IHBoeXMsIHVpbnQ2NF90IGxlbiwgdWludDMyX3Qgcm8sIHZvaWQgKnZhLCB2b2lk ICplLCB2b2lkICpmKSAicGh5cz0weCUiUFJJeDY0IiBsZW49MHglIlBSSXg2NCIgcm89JWQgdmE9 JXAgZT0lcCBmPSVwIgorYXBwbGVfaW9zZmNfdW5tYXBfbWVtb3J5KHZvaWQgKmEsIHZvaWQgKmIs IHZvaWQgKmMsIHZvaWQgKmQsIHZvaWQgKmUsIHZvaWQgKmYpICJhPSVwIGI9JXAgYz0lcCBkPSVw IGU9JXAgZj0lcCIKK2FwcGxlX2lvc2ZjX3JhaXNlX2lycSh1aW50MzJfdCB2ZWN0b3IpICJ2ZWN0 b3I9MHgleCIKLS0gCjIuMzkuMiAoQXBwbGUgR2l0LTE0MykKCgoKCkFtYXpvbiBEZXZlbG9wbWVu dCBDZW50ZXIgR2VybWFueSBHbWJICktyYXVzZW5zdHIuIDM4CjEwMTE3IEJlcmxpbgpHZXNjaGFl ZnRzZnVlaHJ1bmc6IENocmlzdGlhbiBTY2hsYWVnZXIsIEpvbmF0aGFuIFdlaXNzCkVpbmdldHJh Z2VuIGFtIEFtdHNnZXJpY2h0IENoYXJsb3R0ZW5idXJnIHVudGVyIEhSQiAxNDkxNzMgQgpTaXR6 OiBCZXJsaW4KVXN0LUlEOiBERSAyODkgMjM3IDg3OQoKCg==