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.6 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,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 6E09FC33C9E for ; Wed, 15 Jan 2020 02:40:59 +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 350C1222C3 for ; Wed, 15 Jan 2020 02:40:59 +0000 (UTC) Authentication-Results: mail.kernel.org; dkim=fail reason="signature verification failed" (2048-bit key) header.d=messagingengine.com header.i=@messagingengine.com header.b="sWGNCnnh" DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org 350C1222C3 Authentication-Results: mail.kernel.org; dmarc=none (p=none dis=none) header.from=invisiblethingslab.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 1irYbq-00052H-K4; Wed, 15 Jan 2020 02:40:42 +0000 Received: from us1-rack-iad1.inumbo.com ([172.99.69.81]) by lists.xenproject.org with esmtp (Exim 4.89) (envelope-from ) id 1irYbo-00050m-Ez for xen-devel@lists.xenproject.org; Wed, 15 Jan 2020 02:40:40 +0000 X-Inumbo-ID: 60fd6100-3740-11ea-b89f-bc764e2007e4 Received: from out2-smtp.messagingengine.com (unknown [66.111.4.26]) by us1-rack-iad1.inumbo.com (Halon) with ESMTPS id 60fd6100-3740-11ea-b89f-bc764e2007e4; Wed, 15 Jan 2020 02:40:23 +0000 (UTC) Received: from compute7.internal (compute7.nyi.internal [10.202.2.47]) by mailout.nyi.internal (Postfix) with ESMTP id 3D84321FE5; Tue, 14 Jan 2020 21:40:23 -0500 (EST) Received: from mailfrontend2 ([10.202.2.163]) by compute7.internal (MEProxy); Tue, 14 Jan 2020 21:40:23 -0500 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d= messagingengine.com; h=cc:content-transfer-encoding:content-type :date:from:in-reply-to:message-id:mime-version:references :subject:to:x-me-proxy:x-me-proxy:x-me-sender:x-me-sender :x-sasl-enc; s=fm1; bh=znpj4MOBHgOaDXOOEG4g7HWKKya24BWqqB4c3rFH2 OU=; b=sWGNCnnh0HQGic19JyfK8qPbn7LSqMCsRLipGr4Kv2vq8nstKWVDAxsNR iMTLFFRRExS69jiUVTznr9tHs9KAYJ77u51ueEJ6BVU9D/6V+G9U9nIwQwM5KtYc k3zdj3WiaevD04sjGHFywbxfcXwQom6Szspo2zUnVets0a9QiJ1x9yRXYukTCYdz pM8zsWH7AsH/nPIvGl57vIPcb+ybUzCc5iME68x5YRe7EGCld+9ui+0Ti85/1Bv3 ggIlLYskFiMKnAHDESM20TOSe39jVPYEIXcxs40uax1efRGs2AgUzSwZWrzzg9YL 1BS0hb7WXIGt8uFioJoHXdy3onqsw== X-ME-Sender: X-ME-Proxy-Cause: gggruggvucftvghtrhhoucdtuddrgedugedrtddvgdegkecutefuodetggdotefrodftvf curfhrohhfihhlvgemucfhrghsthforghilhdpqfgfvfdpuffrtefokffrpgfnqfghnecu uegrihhlohhuthemuceftddtnecusecvtfgvtghiphhivghnthhsucdlqddutddtmdenfg hrlhcuvffnffculddqiedmnecujfgurhephffvufffkffojghfgggtgfesthekredtredt jeenucfhrhhomhepofgrrhgvkhcuofgrrhgtiiihkhhofihskhhiqdfikphrvggtkhhiuc eomhgrrhhmrghrvghksehinhhvihhsihgslhgvthhhihhnghhslhgrsgdrtghomheqnecu ffhomhgrihhnpehgnhhurdhorhhgnecukfhppeeluddrieehrdefgedrfeefnecurfgrrh grmhepmhgrihhlfhhrohhmpehmrghrmhgrrhgvkhesihhnvhhishhisghlvghthhhinhhg shhlrggsrdgtohhmnecuvehluhhsthgvrhfuihiivgeptd X-ME-Proxy: Received: from localhost.localdomain (ip5b412221.dynamic.kabel-deutschland.de [91.65.34.33]) by mail.messagingengine.com (Postfix) with ESMTPA id A930830607CD; Tue, 14 Jan 2020 21:40:21 -0500 (EST) From: =?UTF-8?q?Marek=20Marczykowski-G=C3=B3recki?= To: xen-devel@lists.xenproject.org Date: Wed, 15 Jan 2020 03:39:50 +0100 Message-Id: X-Mailer: git-send-email 2.21.0 In-Reply-To: References: MIME-Version: 1.0 Subject: [Xen-devel] [PATCH v4 11/16] tools: add simple vchan-socket-proxy 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: Stefano Stabellini , Julien Grall , Wei Liu , Konrad Rzeszutek Wilk , George Dunlap , Andrew Cooper , Ian Jackson , =?UTF-8?q?Marek=20Marczykowski-G=C3=B3recki?= , Jan Beulich Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Errors-To: xen-devel-bounces@lists.xenproject.org Sender: "Xen-devel" QWRkIGEgc2ltcGxlIHByb3h5IGZvciB0dW5uZWxpbmcgc29ja2V0IGNvbm5lY3Rpb24gb3ZlciB2 Y2hhbi4gVGhpcyBpcwpiYXNlZCBvbiBleGlzdGluZyB2Y2hhbi1ub2RlKiBhcHBsaWNhdGlvbnMs IGJ1dCBleHRlbmRlZCB3aXRoIHNvY2tldApzdXBwb3J0LiB2Y2hhbi1zb2NrZXQtcHJveHkgc2Vy dmVzIGJvdGggYXMgYSBjbGllbnQgYW5kIGFzIGEgc2VydmVyLApkZXBlbmRpbmcgb24gcGFyYW1l dGVycy4gSXQgY2FuIGJlIHVzZWQgdG8gdHJhbnNwYXJlbnRseSBjb21tdW5pY2F0ZQp3aXRoIGFu IGFwcGxpY2F0aW9uIGluIGFub3RoZXIgZG9taWFuIHRoYXQgbm9ybWFsbHkgZXhwb3NlIFVOSVgg c29ja2V0CmludGVyZmFjZS4gU3BlY2lmaWNhbGx5LCBpdCdzIHdyaXR0ZW4gdG8gY29tbXVuaWNh dGUgd2l0aCBxZW11IHJ1bm5pbmcKd2l0aGluIHN0dWJkb20uCgpTZXJ2ZXIgbW9kZSBsaXN0ZW5z IGZvciB2Y2hhbiBjb25uZWN0aW9ucyBhbmQgd2hlbiBvbmUgaXMgb3BlbmVkLApjb25uZWN0cyB0 byBhIHBvaW50ZWQgVU5JWCBzb2NrZXQuICBDbGllbnQgbW9kZSBsaXN0ZW5zIG9uIFVOSVgKc29j a2V0IGFuZCB3aGVuIHNvbWVvbmUgY29ubmVjdHMsIG9wZW5zIGEgdmNoYW4gY29ubmVjdGlvbi4g IE9ubHkKYSBzaW5nbGUgY29ubmVjdGlvbiBhdCBhIHRpbWUgaXMgc3VwcG9ydGVkLgoKQWRkaXRp b25hbGx5LCBzb2NrZXQgY2FuIGJlIHByb3ZpZGVkIGFzIGEgbnVtYmVyIC0gaW4gd2hpY2ggY2Fz ZSBpdCdzCmludGVycHJldGVkIGFzIGFscmVhZHkgb3BlbiBGRCAoaW4gY2FzZSBvZiBVTklYIGxp c3RlbmluZyBzb2NrZXQgLQpsaXN0ZW4oKSBuZWVkcyB0byBiZSBhbHJlYWR5IGNhbGxlZCkuIE9y ICItIiBtZWFuaW5nIHN0ZGluL3N0ZG91dCAtIGluCndoaWNoIGNhc2UgaXQgaXMgcmVkdWNlZCB0 byB2Y2hhbi1ub2RlMiBmdW5jdGlvbmFsaXR5LgoKRXhhbXBsZSB1c2FnZToKCjEuIChpbiBkb20w KSB2Y2hhbi1zb2NrZXQtcHJveHkgLS1tb2RlPWNsaWVudCA8RE9NSUQ+CiAgICAvbG9jYWwvZG9t YWluLzxET01JRD4vZGF0YS92Y2hhbi8xMjM0IC9ydW4vcWVtdS4oRE9NSUQpCgoyLiAoaW4gRE9N SUQpIHZjaGFuLXNvY2tldC1wcm94eSAtLW1vZGU9c2VydmVyIDAKICAgL2xvY2FsL2RvbWFpbi88 RE9NSUQ+L2RhdGEvdmNoYW4vMTIzNCAvcnVuL3FlbXUuKERPTUlEKQoKVGhpcyB3aWxsIGxpc3Rl biBvbiAvcnVuL3FlbXUuKERPTUlEKSBpbiBkb20wIGFuZCB3aGVuZXZlciBjb25uZWN0aW9uIGlz Cm1hZGUsIGl0IHdpbGwgY29ubmVjdCB0byBET01JRCwgd2hlcmUgc2VydmVyIHByb2Nlc3Mgd2ls bCBjb25uZWN0IHRvCi9ydW4vcWVtdS4oRE9NSUQpIHRoZXJlLiBXaGVuIGNsaWVudCBkaXNjb25u ZWN0cywgdmNoYW4gY29ubmVjdGlvbiBpcwp0ZXJtaW5hdGVkIGFuZCBzZXJ2ZXIgdmNoYW4tc29j a2V0LXByb3h5IHByb2Nlc3MgYWxzbyBkaXNjb25uZWN0cyBmcm9tCnFlbXUuCgpTaWduZWQtb2Zm LWJ5OiBNYXJlayBNYXJjenlrb3dza2ktR8OzcmVja2kgPG1hcm1hcmVrQGludmlzaWJsZXRoaW5n c2xhYi5jb20+Ci0tLQogLmdpdGlnbm9yZSAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgIDEg Ky0KIHRvb2xzL2xpYnZjaGFuL01ha2VmaWxlICAgICAgICAgICAgIHwgICA3ICstCiB0b29scy9s aWJ2Y2hhbi9pbml0LmMucmVqICAgICAgICAgICB8ICA2MCArKysrLQogdG9vbHMvbGlidmNoYW4v dmNoYW4tc29ja2V0LXByb3h5LmMgfCA0NjkgKysrKysrKysrKysrKysrKysrKysrKysrKysrKyst CiA0IGZpbGVzIGNoYW5nZWQsIDUzNiBpbnNlcnRpb25zKCspLCAxIGRlbGV0aW9uKC0pCiBjcmVh dGUgbW9kZSAxMDA2NDQgdG9vbHMvbGlidmNoYW4vaW5pdC5jLnJlagogY3JlYXRlIG1vZGUgMTAw NjQ0IHRvb2xzL2xpYnZjaGFuL3ZjaGFuLXNvY2tldC1wcm94eS5jCgpkaWZmIC0tZ2l0IGEvLmdp dGlnbm9yZSBiLy5naXRpZ25vcmUKaW5kZXggMDE3ODU2Yy4uMWM5ZGQ5MyAxMDA2NDQKLS0tIGEv LmdpdGlnbm9yZQorKysgYi8uZ2l0aWdub3JlCkBAIC0zNzIsNiArMzcyLDcgQEAgdG9vbHMvbWlz Yy94ZW53YXRjaGRvZ2QKIHRvb2xzL21pc2MveGVuLWh2bWNyYXNoCiB0b29scy9taXNjL3hlbi1s b3dtZW1kCiB0b29scy9saWJ2Y2hhbi92Y2hhbi1ub2RlWzEyXQordG9vbHMvbGlidmNoYW4vdmNo YW4tc29ja2V0LXByb3h5CiB0b29scy9vY2FtbC8qLy5vY2FtbGRlcC5tYWtlCiB0b29scy9vY2Ft bC8qLyouY21baXhhb10KIHRvb2xzL29jYW1sLyovKi5jbXhhCmRpZmYgLS1naXQgYS90b29scy9s aWJ2Y2hhbi9NYWtlZmlsZSBiL3Rvb2xzL2xpYnZjaGFuL01ha2VmaWxlCmluZGV4IDc4OTI3NTAu LjFjODQ1Y2EgMTAwNjQ0Ci0tLSBhL3Rvb2xzL2xpYnZjaGFuL01ha2VmaWxlCisrKyBiL3Rvb2xz L2xpYnZjaGFuL01ha2VmaWxlCkBAIC0xMyw2ICsxMyw3IEBAIExJQlZDSEFOX1BJQ19PQkpTID0g JChwYXRzdWJzdCAlLm8sJS5vcGljLCQoTElCVkNIQU5fT0JKUykpCiBMSUJWQ0hBTl9MSUJTID0g JChMRExJQlNfbGlieGVuc3RvcmUpICQoTERMSUJTX2xpYnhlbmdudHRhYikgJChMRExJQlNfbGli eGVuZXZ0Y2huKQogJChMSUJWQ0hBTl9PQkpTKSAkKExJQlZDSEFOX1BJQ19PQkpTKTogQ0ZMQUdT ICs9ICQoQ0ZMQUdTX2xpYnhlbnN0b3JlKSAkKENGTEFHU19saWJ4ZW5nbnR0YWIpICQoQ0ZMQUdT X2xpYnhlbmV2dGNobikKICQoTk9ERV9PQkpTKSAkKE5PREUyX09CSlMpOiBDRkxBR1MgKz0gJChD RkxBR1NfbGlieGVuZ250dGFiKSAkKENGTEFHU19saWJ4ZW5ldnRjaG4pCit2Y2hhbi1zb2NrZXQt cHJveHkubzogQ0ZMQUdTICs9ICQoQ0ZMQUdTX2xpYnhlbnN0b3JlKSAkKENGTEFHU19saWJ4ZW5j dHJsKSAkKENGTEFHU19saWJ4ZW5nbnR0YWIpICQoQ0ZMQUdTX2xpYnhlbmV2dGNobikKIAogTUFK T1IgPSA0LjE0CiBNSU5PUiA9IDAKQEAgLTM5LDcgKzQwLDcgQEAgJChQS0dfQ09ORklHX0xPQ0FM KTogUEtHX0NPTkZJR19MSUJESVIgPSAkKENVUkRJUikKICQoUEtHX0NPTkZJR19MT0NBTCk6IFBL R19DT05GSUdfQ0ZMQUdTX0xPQ0FMID0gJChDRkxBR1NfeGVuaW5jbHVkZSkKIAogLlBIT05ZOiBh bGwKLWFsbDogbGlieGVudmNoYW4uc28gdmNoYW4tbm9kZTEgdmNoYW4tbm9kZTIgbGlieGVudmNo YW4uYSAkKFBLR19DT05GSUdfSU5TVCkgJChQS0dfQ09ORklHX0xPQ0FMKQorYWxsOiBsaWJ4ZW52 Y2hhbi5zbyB2Y2hhbi1ub2RlMSB2Y2hhbi1ub2RlMiB2Y2hhbi1zb2NrZXQtcHJveHkgbGlieGVu dmNoYW4uYSAkKFBLR19DT05GSUdfSU5TVCkgJChQS0dfQ09ORklHX0xPQ0FMKQogCiBsaWJ4ZW52 Y2hhbi5zbzogbGlieGVudmNoYW4uc28uJChNQUpPUikKIAlsbiAtc2YgJDwgJEAKQEAgLTU5LDYg KzYwLDkgQEAgdmNoYW4tbm9kZTE6ICQoTk9ERV9PQkpTKSBsaWJ4ZW52Y2hhbi5zbwogdmNoYW4t bm9kZTI6ICQoTk9ERTJfT0JKUykgbGlieGVudmNoYW4uc28KIAkkKENDKSAkKExERkxBR1MpIC1v ICRAICQoTk9ERTJfT0JKUykgJChMRExJQlNfbGlieGVudmNoYW4pICQoQVBQRU5EX0xERkxBR1Mp CiAKK3ZjaGFuLXNvY2tldC1wcm94eTogdmNoYW4tc29ja2V0LXByb3h5Lm8gbGlieGVudmNoYW4u c28KKwkkKENDKSAkKExERkxBR1MpIC1vICRAICQ8ICQoTERMSUJTX2xpYnhlbnZjaGFuKSAkKExE TElCU19saWJ4ZW5zdG9yZSkgJChMRExJQlNfbGlieGVuY3RybCkgJChBUFBFTkRfTERGTEFHUykK KwogLlBIT05ZOiBpbnN0YWxsCiBpbnN0YWxsOiBhbGwKIAkkKElOU1RBTExfRElSKSAkKERFU1RE SVIpJChsaWJkaXIpCkBAIC02Niw2ICs3MCw3IEBAIGluc3RhbGw6IGFsbAogCSQoSU5TVEFMTF9Q Uk9HKSBsaWJ4ZW52Y2hhbi5zby4kKE1BSk9SKS4kKE1JTk9SKSAkKERFU1RESVIpJChsaWJkaXIp CiAJbG4gLXNmIGxpYnhlbnZjaGFuLnNvLiQoTUFKT1IpLiQoTUlOT1IpICQoREVTVERJUikkKGxp YmRpcikvbGlieGVudmNoYW4uc28uJChNQUpPUikKIAlsbiAtc2YgbGlieGVudmNoYW4uc28uJChN QUpPUikgJChERVNURElSKSQobGliZGlyKS9saWJ4ZW52Y2hhbi5zbworCSQoSU5TVEFMTF9QUk9H KSB2Y2hhbi1zb2NrZXQtcHJveHkgJChERVNURElSKSQoYmluZGlyKQogCSQoSU5TVEFMTF9EQVRB KSBsaWJ4ZW52Y2hhbi5oICQoREVTVERJUikkKGluY2x1ZGVkaXIpCiAJJChJTlNUQUxMX0RBVEEp IGxpYnhlbnZjaGFuLmEgJChERVNURElSKSQobGliZGlyKQogCSQoSU5TVEFMTF9EQVRBKSB4ZW52 Y2hhbi5wYyAkKERFU1RESVIpJChQS0dfSU5TVEFMTERJUikKZGlmZiAtLWdpdCBhL3Rvb2xzL2xp YnZjaGFuL2luaXQuYy5yZWogYi90b29scy9saWJ2Y2hhbi9pbml0LmMucmVqCm5ldyBmaWxlIG1v ZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhiM2VkNzMKLS0tIC9kZXYvbnVsbAorKysgYi90b29s cy9saWJ2Y2hhbi9pbml0LmMucmVqCkBAIC0wLDAgKzEsNjAgQEAKKy0tLSB0b29scy9saWJ2Y2hh bi9pbml0LmMKKysrKyB0b29scy9saWJ2Y2hhbi9pbml0LmMKK0BAIC0yNjYsMzEgKzI2NiwzMyBA QCBzdGF0aWMgaW50IGluaXRfeHNfc3J2KHN0cnVjdCBsaWJ4ZW52Y2hhbiAqY3RybCwgaW50IGRv bWFpbiwgY29uc3QgY2hhciogeHNfYmFzZQorIAlwZXJtc1sxXS5pZCA9IGRvbWFpbjsKKyAJcGVy bXNbMV0ucGVybXMgPSBYU19QRVJNX1JFQUQ7CisgCistcmV0cnlfdHJhbnNhY3Rpb246CistCXhz X3RyYW5zID0geHNfdHJhbnNhY3Rpb25fc3RhcnQoeHMpOworLQlpZiAoIXhzX3RyYW5zKQorLQkJ Z290byBmYWlsOworLQorLQlzbnByaW50ZihyZWYsIHNpemVvZiByZWYsICIlZCIsIHJpbmdfcmVm KTsKKy0Jc25wcmludGYoYnVmLCBzaXplb2YgYnVmLCAiJXMvcmluZy1yZWYiLCB4c19iYXNlKTsK Ky0JaWYgKCF4c193cml0ZSh4cywgeHNfdHJhbnMsIGJ1ZiwgcmVmLCBzdHJsZW4ocmVmKSkpCist CQlnb3RvIGZhaWw7CistCWlmICgheHNfc2V0X3Blcm1pc3Npb25zKHhzLCB4c190cmFucywgYnVm LCBwZXJtcywgMikpCistCQlnb3RvIGZhaWw7CistCistCXNucHJpbnRmKHJlZiwgc2l6ZW9mIHJl ZiwgIiVkIiwgY3RybC0+ZXZlbnRfcG9ydCk7CistCXNucHJpbnRmKGJ1Ziwgc2l6ZW9mIGJ1Ziwg IiVzL2V2ZW50LWNoYW5uZWwiLCB4c19iYXNlKTsKKy0JaWYgKCF4c193cml0ZSh4cywgeHNfdHJh bnMsIGJ1ZiwgcmVmLCBzdHJsZW4ocmVmKSkpCistCQlnb3RvIGZhaWw7CistCWlmICgheHNfc2V0 X3Blcm1pc3Npb25zKHhzLCB4c190cmFucywgYnVmLCBwZXJtcywgMikpCistCQlnb3RvIGZhaWw7 CistCistCWlmICgheHNfdHJhbnNhY3Rpb25fZW5kKHhzLCB4c190cmFucywgMCkpIHsKKy0JCWlm IChlcnJubyA9PSBFQUdBSU4pCistCQkJZ290byByZXRyeV90cmFuc2FjdGlvbjsKKy0JfSBlbHNl IHsKKy0JCXJldCA9IDA7CisrCWZvciAoOzspIHsKKysJCXhzX3RyYW5zID0geHNfdHJhbnNhY3Rp b25fc3RhcnQoeHMpOworKwkJaWYgKCF4c190cmFucykKKysJCQlnb3RvIGZhaWw7CisrCisrCQlz bnByaW50ZihyZWYsIHNpemVvZiByZWYsICIlZCIsIHJpbmdfcmVmKTsKKysJCXNucHJpbnRmKGJ1 Ziwgc2l6ZW9mIGJ1ZiwgIiVzL3JpbmctcmVmIiwgeHNfYmFzZSk7CisrCQlpZiAoIXhzX3dyaXRl KHhzLCB4c190cmFucywgYnVmLCByZWYsIHN0cmxlbihyZWYpKSkKKysJCQlnb3RvIGZhaWw7Cisr CQlpZiAoIXhzX3NldF9wZXJtaXNzaW9ucyh4cywgeHNfdHJhbnMsIGJ1ZiwgcGVybXMsIDIpKQor KwkJCWdvdG8gZmFpbDsKKysKKysJCXNucHJpbnRmKHJlZiwgc2l6ZW9mIHJlZiwgIiVkIiwgY3Ry bC0+ZXZlbnRfcG9ydCk7CisrCQlzbnByaW50ZihidWYsIHNpemVvZiBidWYsICIlcy9ldmVudC1j aGFubmVsIiwgeHNfYmFzZSk7CisrCQlpZiAoIXhzX3dyaXRlKHhzLCB4c190cmFucywgYnVmLCBy ZWYsIHN0cmxlbihyZWYpKSkKKysJCQlnb3RvIGZhaWw7CisrCQlpZiAoIXhzX3NldF9wZXJtaXNz aW9ucyh4cywgeHNfdHJhbnMsIGJ1ZiwgcGVybXMsIDIpKQorKwkJCWdvdG8gZmFpbDsKKysKKysJ CWlmICh4c190cmFuc2FjdGlvbl9lbmQoeHMsIHhzX3RyYW5zLCAwKSkKKysJCQlicmVhazsKKysJ CWVsc2UgaWYgKGVycm5vICE9IEVBR0FJTikKKysJCQlnb3RvIGZhaWw7CisrCQkvKiBFQUdBSU4s IHJldHJ5ICovCisgCX0KKysJcmV0ID0gMDsKKysKKyAgZmFpbDoKKyAJZnJlZShkb21pZF9zdHIp OworIAl4c19jbG9zZSh4cyk7CmRpZmYgLS1naXQgYS90b29scy9saWJ2Y2hhbi92Y2hhbi1zb2Nr ZXQtcHJveHkuYyBiL3Rvb2xzL2xpYnZjaGFuL3ZjaGFuLXNvY2tldC1wcm94eS5jCm5ldyBmaWxl IG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjZiNGFlMDkKLS0tIC9kZXYvbnVsbAorKysgYi90 b29scy9saWJ2Y2hhbi92Y2hhbi1zb2NrZXQtcHJveHkuYwpAQCAtMCwwICsxLDQ2OSBAQAorLyoq CisgKiBAZmlsZQorICogQHNlY3Rpb24gQVVUSE9SUworICoKKyAqIENvcHlyaWdodCAoQykgMjAx MCAgUmFmYWwgV29qdGN6dWsgIDxyYWZhbEBpbnZpc2libGV0aGluZ3NsYWIuY29tPgorICoKKyAq ICBBdXRob3JzOgorICogICAgICAgUmFmYWwgV29qdGN6dWsgIDxyYWZhbEBpbnZpc2libGV0aGlu Z3NsYWIuY29tPgorICogICAgICAgRGFuaWVsIERlIEdyYWFmIDxkZ2RlZ3JhQHR5Y2hvLm5zYS5n b3Y+CisgKiAgICAgICBNYXJlayBNYXJjenlrb3dza2ktR8OzcmVja2kgIDxtYXJtYXJla0BpbnZp c2libGV0aGluZ3NsYWIuY29tPgorICoKKyAqIEBzZWN0aW9uIExJQ0VOU0UKKyAqCisgKiAgVGhp cyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9v cgorICogIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJh bCBQdWJsaWMKKyAqICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBG b3VuZGF0aW9uOyBlaXRoZXIKKyAqICB2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0 IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiAgVGhpcyBwcm9ncmFtIGlz IGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiAgYnV0 IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkg b2YKKyAqICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBP U0UuICBTZWUgdGhlIEdOVQorICogIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBt b3JlIGRldGFpbHMuCisgKgorICogIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2Yg dGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAqICBMaWNlbnNlIGFsb25nIHdpdGggdGhp cyBwcm9ncmFtOyBJZiBub3QsIHNlZSA8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uCisg KgorICogQHNlY3Rpb24gREVTQ1JJUFRJT04KKyAqCisgKiBUaGlzIGlzIGEgdmNoYW4gdG8gdW5p eCBzb2NrZXQgcHJveHkuIFZjaGFuIHNlcnZlciBpcyBzZXQsIGFuZCBvbiBjbGllbnQKKyAqIGNv bm5lY3Rpb24sIGxvY2FsIHNvY2tldCBjb25uZWN0aW9uIGlzIGVzdGFibGlzaGVkLiBDb21tdW5p Y2F0aW9uIGlzIGJpZGlyZWN0aW9uYWwuCisgKiBPbmUgY2xpZW50IGlzIHNlcnZlZCBhdCBhIHRp bWUsIGNsaWVudHMgbmVlZHMgdG8gY29vcmRpbmF0ZSB0aGlzIHRoZW1zZWx2ZXMuCisgKi8KKwor I2luY2x1ZGUgPHN0ZGxpYi5oPgorI2luY2x1ZGUgPHN0ZGlvLmg+CisjaW5jbHVkZSA8c3RyaW5n Lmg+CisjaW5jbHVkZSA8dW5pc3RkLmg+CisjaW5jbHVkZSA8ZmNudGwuaD4KKyNpbmNsdWRlIDxl cnJuby5oPgorI2luY2x1ZGUgPHN5cy9zb2NrZXQuaD4KKyNpbmNsdWRlIDxzeXMvdW4uaD4KKyNp bmNsdWRlIDxnZXRvcHQuaD4KKworI2luY2x1ZGUgPHhlbnN0b3JlLmg+CisjaW5jbHVkZSA8eGVu Y3RybC5oPgorI2luY2x1ZGUgPGxpYnhlbnZjaGFuLmg+CisKK3N0YXRpYyB2b2lkIHVzYWdlKGNo YXIqKiBhcmd2KQoreworICAgIGZwcmludGYoc3RkZXJyLCAidXNhZ2U6XG4iCisgICAgICAgICJc dCVzIFtvcHRpb25zXSBkb21haW5pZCBub2RlcGF0aCBbc29ja2V0LXBhdGh8ZmlsZS1ub3wtXVxu IgorICAgICAgICAiXG4iCisgICAgICAgICJvcHRpb25zOlxuIgorICAgICAgICAiXHQtbSwgLS1t b2RlPWNsaWVudHxzZXJ2ZXIgLSB2Y2hhbiBjb25uZWN0aW9uIG1vZGVcbiIKKyAgICAgICAgIlx0 LW0sIC0tc3RhdGUtcGF0aD1wYXRoIC0geGVuc3RvcmUgcGF0aCB3aGVyZSB3cml0ZSBcInJ1bm5p bmdcIiB0byBhdCBzdGFydHVwXG4iCisgICAgICAgICJcdC12LCAtLXZlcmJvc2UgLSB2ZXJib3Nl IGxvZ2dpbmdcbiIKKyAgICAgICAgIlxuIgorICAgICAgICAiY2xpZW50OiBjbGllbnQgb2YgYSB2 Y2hhbiBjb25uZWN0aW9uLCBmb3VydGggcGFyYW1ldGVyIGNhbiBiZTpcbiIKKyAgICAgICAgIlx0 c29ja2V0LXBhdGg6IGxpc3RlbiBvbiBhIFVOSVggc29ja2V0IGF0IHRoaXMgcGF0aCBhbmQgY29u bmVjdCB0byB2Y2hhblxuIgorICAgICAgICAiXHQgIHdoZW5ldmVyIG5ldyBjb25uZWN0aW9uIGlz IGFjY2VwdGVkO1xuIgorICAgICAgICAiXHQgIGhhbmRsZSBtdWx0aXBsZSBfc3Vic2VxdWVudF8g Y29ubmVjdGlvbnMsIHVudGlsIHRlcm1pbmF0ZWRcbiIKKyAgICAgICAgIlx0ZmlsZS1ubzogZXhj ZXB0IG9wZW4gRkQgb2YgYSBzb2NrZXQgaW4gbGlzdGVuIG1vZGU7IG90aGVyd2lzZSBzaW1pbGFy IHRvIHNvY2tldC1wYXRoXG4iCisgICAgICAgICJcdC06IG9wZW4gdmNoYW4gY29ubmVjdGlvbiBp bW1lZGlhdGVseSBhbmQgcGFzcyB0aGUgZGF0YSBmcm9tIHN0ZGluL3N0ZG91dDtcbiIKKyAgICAg ICAgIlx0ICB0ZXJtaW5hdGUgd2hlbiB2Y2hhbiBjb25uZWN0aW9uIGlzIGNsb3NlZFxuIgorICAg ICAgICAic2VydmVyOiBzZXJ2ZXIgb2YgYSB2Y2hhbiBjb25uZWN0aW9uLCBmb3VydGggcGFyYW1l dGVyIGNhbiBiZTpcbiIKKyAgICAgICAgIlx0c29ja2V0LXBhdGg6IGNvbm5lY3QgdG8gdGhpcyBV TklYIHNvY2tldCB3aGVuIG5ldyB2Y2hhbiBjb25uZWN0aW9uIGlzIGFjY2VwdGVkXG4iCisgICAg ICAgICJcdCAgaGFuZGxlIG11bHRpcGxlIF9zdWJzZXF1ZW50XyBjb25uZWN0aW9ucywgdW50aWwg dGVybWluYXRlZFxuIgorICAgICAgICAiXHRmaWxlLW5vOiBwYXNzIGRhdGEgdG8vZnJvbSB0aGlz IEZEOyB0ZXJtaW5hdGUgd2hlbiB2Y2hhbiBjb25uZWN0aW9uIGlzIGNsb3NlZFxuIgorICAgICAg ICAiXHQtOiBwYXNzIGRhdGEgdG8vZnJvbSBzdGRpbi9zdGRvdXQ7IHRlcm1pbmF0YXRlIHdoZW4g dmNoYW4gY29ubmVjdGlvbiBpcyBjbG9zZWRcbiIsCisgICAgICAgIGFyZ3ZbMF0pOworICAgIGV4 aXQoMSk7Cit9CisKKyNkZWZpbmUgQlVGU0laRSA4MTkyCitjaGFyIGluYnVmW0JVRlNJWkVdOwor Y2hhciBvdXRidWZbQlVGU0laRV07CitpbnQgaW5zaXogPSAwOworaW50IG91dHNpeiA9IDA7Citp bnQgdmVyYm9zZSA9IDA7CisKK3N0YXRpYyB2b2lkIHZjaGFuX3dyKHN0cnVjdCBsaWJ4ZW52Y2hh biAqY3RybCkgeworICAgIGludCByZXQ7CisKKyAgICBpZiAoIWluc2l6KQorICAgICAgICByZXR1 cm47CisgICAgcmV0ID0gbGlieGVudmNoYW5fd3JpdGUoY3RybCwgaW5idWYsIGluc2l6KTsKKyAg ICBpZiAocmV0IDwgMCkgeworICAgICAgICBmcHJpbnRmKHN0ZGVyciwgInZjaGFuIHdyaXRlIGZh aWxlZFxuIik7CisgICAgICAgIGV4aXQoMSk7CisgICAgfQorICAgIGlmICh2ZXJib3NlKQorICAg ICAgICBmcHJpbnRmKHN0ZGVyciwgIndyaXR0ZW4gJWQgYnl0ZXMgdG8gdmNoYW5cbiIsIHJldCk7 CisgICAgaWYgKHJldCA+IDApIHsKKyAgICAgICAgaW5zaXogLT0gcmV0OworICAgICAgICBtZW1t b3ZlKGluYnVmLCBpbmJ1ZiArIHJldCwgaW5zaXopOworICAgIH0KK30KKworc3RhdGljIHZvaWQg c29ja2V0X3dyKGludCBvdXRwdXRfZmQpIHsKKyAgICBpbnQgcmV0OworCisgICAgaWYgKCFvdXRz aXopCisgICAgICAgIHJldHVybjsKKyAgICByZXQgPSB3cml0ZShvdXRwdXRfZmQsIG91dGJ1Ziwg b3V0c2l6KTsKKyAgICBpZiAocmV0IDwgMCAmJiBlcnJubyAhPSBFQUdBSU4pCisgICAgICAgIGV4 aXQoMSk7CisgICAgaWYgKHJldCA+IDApIHsKKyAgICAgICAgb3V0c2l6IC09IHJldDsKKyAgICAg ICAgbWVtbW92ZShvdXRidWYsIG91dGJ1ZiArIHJldCwgb3V0c2l6KTsKKyAgICB9Cit9CisKK3N0 YXRpYyBpbnQgc2V0X25vbmJsb2NraW5nKGludCBmZCwgaW50IG5vbmJsb2NraW5nKSB7CisgICAg aW50IGZsYWdzID0gZmNudGwoZmQsIEZfR0VURkwpOworICAgIGlmIChmbGFncyA9PSAtMSkKKyAg ICAgICAgcmV0dXJuIC0xOworCisgICAgaWYgKG5vbmJsb2NraW5nKQorICAgICAgICBmbGFncyB8 PSBPX05PTkJMT0NLOworICAgIGVsc2UKKyAgICAgICAgZmxhZ3MgJj0gfk9fTk9OQkxPQ0s7CisK KyAgICBpZiAoZmNudGwoZmQsIEZfU0VURkwsIGZsYWdzKSA9PSAtMSkKKyAgICAgICAgcmV0dXJu IC0xOworCisgICAgcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgY29ubmVjdF9zb2NrZXQoY29u c3QgY2hhciAqcGF0aF9vcl9mZCkgeworICAgIGludCBmZDsKKyAgICBjaGFyICplbmRwdHI7Cisg ICAgc3RydWN0IHNvY2thZGRyX3VuIGFkZHI7CisKKyAgICBmZCA9IHN0cnRvbGwocGF0aF9vcl9m ZCwgJmVuZHB0ciwgMCk7CisgICAgaWYgKCplbmRwdHIgPT0gJ1wwJykgeworICAgICAgICBzZXRf bm9uYmxvY2tpbmcoZmQsIDEpOworICAgICAgICByZXR1cm4gZmQ7CisgICAgfQorCisgICAgZmQg PSBzb2NrZXQoQUZfVU5JWCwgU09DS19TVFJFQU0sIDApOworICAgIGlmIChmZCA9PSAtMSkKKyAg ICAgICAgcmV0dXJuIC0xOworCisgICAgYWRkci5zdW5fZmFtaWx5ID0gQUZfVU5JWDsKKyAgICBz dHJuY3B5KGFkZHIuc3VuX3BhdGgsIHBhdGhfb3JfZmQsIHNpemVvZihhZGRyLnN1bl9wYXRoKSk7 CisgICAgaWYgKGNvbm5lY3QoZmQsIChjb25zdCBzdHJ1Y3Qgc29ja2FkZHIgKikmYWRkciwgc2l6 ZW9mKGFkZHIpKSA9PSAtMSkgeworICAgICAgICBjbG9zZShmZCk7CisgICAgICAgIHJldHVybiAt MTsKKyAgICB9CisKKyAgICBzZXRfbm9uYmxvY2tpbmcoZmQsIDEpOworCisgICAgcmV0dXJuIGZk OworfQorCitzdGF0aWMgaW50IGxpc3Rlbl9zb2NrZXQoY29uc3QgY2hhciAqcGF0aF9vcl9mZCkg eworICAgIGludCBmZDsKKyAgICBjaGFyICplbmRwdHI7CisgICAgc3RydWN0IHNvY2thZGRyX3Vu IGFkZHI7CisKKyAgICBmZCA9IHN0cnRvbGwocGF0aF9vcl9mZCwgJmVuZHB0ciwgMCk7CisgICAg aWYgKCplbmRwdHIgPT0gJ1wwJykgeworICAgICAgICByZXR1cm4gZmQ7CisgICAgfQorCisgICAg LyogaWYgbm90IGEgbnVtYmVyLCBhc3N1bWUgYSBzb2NrZXQgcGF0aCAqLworICAgIGZkID0gc29j a2V0KEFGX1VOSVgsIFNPQ0tfU1RSRUFNLCAwKTsKKyAgICBpZiAoZmQgPT0gLTEpCisgICAgICAg IHJldHVybiAtMTsKKworICAgIGFkZHIuc3VuX2ZhbWlseSA9IEFGX1VOSVg7CisgICAgc3RybmNw eShhZGRyLnN1bl9wYXRoLCBwYXRoX29yX2ZkLCBzaXplb2YoYWRkci5zdW5fcGF0aCkpOworICAg IGlmIChiaW5kKGZkLCAoY29uc3Qgc3RydWN0IHNvY2thZGRyICopJmFkZHIsIHNpemVvZihhZGRy KSkgPT0gLTEpIHsKKyAgICAgICAgY2xvc2UoZmQpOworICAgICAgICByZXR1cm4gLTE7CisgICAg fQorICAgIGlmIChsaXN0ZW4oZmQsIDUpICE9IDApIHsKKyAgICAgICAgY2xvc2UoZmQpOworICAg ICAgICByZXR1cm4gLTE7CisgICAgfQorCisgICAgcmV0dXJuIGZkOworfQorCitzdGF0aWMgc3Ry dWN0IGxpYnhlbnZjaGFuICpjb25uZWN0X3ZjaGFuKGludCBkb21pZCwgY29uc3QgY2hhciAqcGF0 aCkgeworICAgIHN0cnVjdCBsaWJ4ZW52Y2hhbiAqY3RybCA9IE5VTEw7CisgICAgc3RydWN0IHhz X2hhbmRsZSAqeHMgPSBOVUxMOworICAgIHhjX2ludGVyZmFjZSAqeGMgPSBOVUxMOworICAgIHhj X2RvbWluZm9fdCBkb21pbmZvOworICAgIGNoYXIgKip3YXRjaF9yZXQ7CisgICAgdW5zaWduZWQg aW50IHdhdGNoX251bTsKKyAgICBpbnQgcmV0OworCisgICAgeHMgPSB4c19vcGVuKFhTX09QRU5f UkVBRE9OTFkpOworICAgIGlmICgheHMpIHsKKyAgICAgICAgcGVycm9yKCJ4c19vcGVuIik7Cisg ICAgICAgIGdvdG8gb3V0OworICAgIH0KKyAgICB4YyA9IHhjX2ludGVyZmFjZV9vcGVuKE5VTEws IE5VTEwsIFhDX09QRU5GTEFHX05PTl9SRUVOVFJBTlQpOworICAgIGlmICgheGMpIHsKKyAgICAg ICAgcGVycm9yKCJ4Y19pbnRlcmZhY2Vfb3BlbiIpOworICAgICAgICBnb3RvIG91dDsKKyAgICB9 CisgICAgLyogd2FpdCBmb3IgdmNoYW4gc2VydmVyIHRvIGNyZWF0ZSAqcGF0aCogKi8KKyAgICB4 c193YXRjaCh4cywgcGF0aCwgInBhdGgiKTsKKyAgICB4c193YXRjaCh4cywgIkByZWxlYXNlRG9t YWluIiwgInJlbGVhc2UiKTsKKyAgICB3aGlsZSAoKHdhdGNoX3JldCA9IHhzX3JlYWRfd2F0Y2go eHMsICZ3YXRjaF9udW0pKSkgeworICAgICAgICAvKiBkb24ndCBjYXJlIGFib3V0IGV4YWN0IHdo aWNoIGZpcmVkIHRoZSB3YXRjaCAqLworICAgICAgICBmcmVlKHdhdGNoX3JldCk7CisgICAgICAg IGN0cmwgPSBsaWJ4ZW52Y2hhbl9jbGllbnRfaW5pdChOVUxMLCBkb21pZCwgcGF0aCk7CisgICAg ICAgIGlmIChjdHJsKQorICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgcmV0ID0geGNfZG9t YWluX2dldGluZm8oeGMsIGRvbWlkLCAxLCAmZG9taW5mbyk7CisgICAgICAgIC8qIGJyZWFrIHRo ZSBsb29wIGlmIGRvbWFpbiBpcyBkZWZpbml0ZWx5IG5vdCB0aGVyZSBhbnltb3JlLCBidXQKKyAg ICAgICAgICogY29udGludWUgaWYgaXQgaXMgb3IgdGhlIGNhbGwgZmFpbGVkIChsaWtlIEVQRVJN KSAqLworICAgICAgICBpZiAocmV0ID09IC0xICYmIGVycm5vID09IEVTUkNIKQorICAgICAgICAg ICAgYnJlYWs7CisgICAgICAgIGlmIChyZXQgPT0gMSAmJiAoZG9taW5mby5kb21pZCAhPSAodWlu dDMyX3QpZG9taWQgfHwgZG9taW5mby5keWluZykpCisgICAgICAgICAgICBicmVhazsKKyAgICB9 CisKK291dDoKKyAgICBpZiAoeGMpCisgICAgICAgIHhjX2ludGVyZmFjZV9jbG9zZSh4Yyk7Cisg ICAgaWYgKHhzKQorICAgICAgICB4c19jbG9zZSh4cyk7CisgICAgcmV0dXJuIGN0cmw7Cit9CisK Kworc3RhdGljIHZvaWQgZGlzY2FyZF9idWZmZXJzKHN0cnVjdCBsaWJ4ZW52Y2hhbiAqY3RybCkg eworICAgIC8qIGRpc2NhcmQgbG9jYWwgYnVmZmVycyAqLworICAgIGluc2l6ID0gMDsKKyAgICBv dXRzaXogPSAwOworCisgICAgLyogZGlzY2FyZCByZW1haW5pbmcgaW5jb21pbmcgZGF0YSAqLwor ICAgIHdoaWxlIChsaWJ4ZW52Y2hhbl9kYXRhX3JlYWR5KGN0cmwpKSB7CisgICAgICAgIGlmIChs aWJ4ZW52Y2hhbl9yZWFkKGN0cmwsIGluYnVmLCBCVUZTSVpFKSA9PSAtMSkgeworICAgICAgICAg ICAgcGVycm9yKCJ2Y2hhbiByZWFkIik7CisgICAgICAgICAgICBleGl0KDEpOworICAgICAgICB9 CisgICAgfQorfQorCitpbnQgZGF0YV9sb29wKHN0cnVjdCBsaWJ4ZW52Y2hhbiAqY3RybCwgaW50 IGlucHV0X2ZkLCBpbnQgb3V0cHV0X2ZkKQoreworICAgIGludCByZXQ7CisgICAgaW50IGxpYnhl bnZjaGFuX2ZkOworICAgIGludCBtYXhfZmQ7CisKKyAgICBsaWJ4ZW52Y2hhbl9mZCA9IGxpYnhl bnZjaGFuX2ZkX2Zvcl9zZWxlY3QoY3RybCk7CisgICAgZm9yICg7OykgeworICAgICAgICBmZF9z ZXQgcmZkczsKKyAgICAgICAgZmRfc2V0IHdmZHM7CisgICAgICAgIEZEX1pFUk8oJnJmZHMpOwor ICAgICAgICBGRF9aRVJPKCZ3ZmRzKTsKKworICAgICAgICBtYXhfZmQgPSAtMTsKKyAgICAgICAg aWYgKGlucHV0X2ZkICE9IC0xICYmIGluc2l6ICE9IEJVRlNJWkUpIHsKKyAgICAgICAgICAgIEZE X1NFVChpbnB1dF9mZCwgJnJmZHMpOworICAgICAgICAgICAgaWYgKGlucHV0X2ZkID4gbWF4X2Zk KQorICAgICAgICAgICAgICAgIG1heF9mZCA9IGlucHV0X2ZkOworICAgICAgICB9CisgICAgICAg IGlmIChvdXRwdXRfZmQgIT0gLTEgJiYgb3V0c2l6KSB7CisgICAgICAgICAgICBGRF9TRVQob3V0 cHV0X2ZkLCAmd2Zkcyk7CisgICAgICAgICAgICBpZiAob3V0cHV0X2ZkID4gbWF4X2ZkKQorICAg ICAgICAgICAgICAgIG1heF9mZCA9IG91dHB1dF9mZDsKKyAgICAgICAgfQorICAgICAgICBGRF9T RVQobGlieGVudmNoYW5fZmQsICZyZmRzKTsKKyAgICAgICAgaWYgKGxpYnhlbnZjaGFuX2ZkID4g bWF4X2ZkKQorICAgICAgICAgICAgbWF4X2ZkID0gbGlieGVudmNoYW5fZmQ7CisgICAgICAgIHJl dCA9IHNlbGVjdChtYXhfZmQgKyAxLCAmcmZkcywgJndmZHMsIE5VTEwsIE5VTEwpOworICAgICAg ICBpZiAocmV0IDwgMCkgeworICAgICAgICAgICAgcGVycm9yKCJzZWxlY3QiKTsKKyAgICAgICAg ICAgIGV4aXQoMSk7CisgICAgICAgIH0KKyAgICAgICAgaWYgKEZEX0lTU0VUKGxpYnhlbnZjaGFu X2ZkLCAmcmZkcykpIHsKKyAgICAgICAgICAgIGxpYnhlbnZjaGFuX3dhaXQoY3RybCk7CisgICAg ICAgICAgICBpZiAoIWxpYnhlbnZjaGFuX2lzX29wZW4oY3RybCkpIHsKKyAgICAgICAgICAgICAg ICBpZiAodmVyYm9zZSkKKyAgICAgICAgICAgICAgICAgICAgZnByaW50ZihzdGRlcnIsICJ2Y2hh biBjbGllbnQgZGlzY29ubmVjdGVkXG4iKTsKKyAgICAgICAgICAgICAgICB3aGlsZSAob3V0c2l6 KQorICAgICAgICAgICAgICAgICAgICBzb2NrZXRfd3Iob3V0cHV0X2ZkKTsKKyAgICAgICAgICAg ICAgICBjbG9zZShvdXRwdXRfZmQpOworICAgICAgICAgICAgICAgIGNsb3NlKGlucHV0X2ZkKTsK KyAgICAgICAgICAgICAgICBkaXNjYXJkX2J1ZmZlcnMoY3RybCk7CisgICAgICAgICAgICAgICAg YnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAgICAgICB2Y2hhbl93cihjdHJsKTsKKyAgICAg ICAgfQorCisgICAgICAgIC8qIHNvY2tldF9mZCBndWFyYW50ZWVkIHRvIGJlICE9IC0xICovCisK KyAgICAgICAgaWYgKEZEX0lTU0VUKGlucHV0X2ZkLCAmcmZkcykpIHsKKyAgICAgICAgICAgIHJl dCA9IHJlYWQoaW5wdXRfZmQsIGluYnVmICsgaW5zaXosIEJVRlNJWkUgLSBpbnNpeik7CisgICAg ICAgICAgICBpZiAocmV0IDwgMCAmJiBlcnJubyAhPSBFQUdBSU4pCisgICAgICAgICAgICAgICAg ZXhpdCgxKTsKKyAgICAgICAgICAgIGlmICh2ZXJib3NlKQorICAgICAgICAgICAgICAgIGZwcmlu dGYoc3RkZXJyLCAiZnJvbS11bml4OiAlLipzXG4iLCByZXQsIGluYnVmICsgaW5zaXopOworICAg ICAgICAgICAgaWYgKHJldCA9PSAwKSB7CisgICAgICAgICAgICAgICAgLyogRU9GIG9uIHNvY2tl dCwgd3JpdGUgZXZlcnl0aGluZyBpbiB0aGUgYnVmZmVyIGFuZCBjbG9zZSB0aGUKKyAgICAgICAg ICAgICAgICAgKiBzb2NrZXQgKi8KKyAgICAgICAgICAgICAgICB3aGlsZSAoaW5zaXopIHsKKyAg ICAgICAgICAgICAgICAgICAgdmNoYW5fd3IoY3RybCk7CisgICAgICAgICAgICAgICAgICAgIGxp YnhlbnZjaGFuX3dhaXQoY3RybCk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAg IGNsb3NlKGlucHV0X2ZkKTsKKyAgICAgICAgICAgICAgICBpbnB1dF9mZCA9IC0xOworICAgICAg ICAgICAgICAgIC8qIFRPRE86IG1heWJlIHNpZ25hbCB0aGUgdmNoYW4gY2xpZW50IHNvbWVob3c/ ICovCisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBp ZiAocmV0KQorICAgICAgICAgICAgICAgIGluc2l6ICs9IHJldDsKKyAgICAgICAgICAgIHZjaGFu X3dyKGN0cmwpOworICAgICAgICB9CisgICAgICAgIGlmIChGRF9JU1NFVChvdXRwdXRfZmQsICZ3 ZmRzKSkKKyAgICAgICAgICAgIHNvY2tldF93cihvdXRwdXRfZmQpOworICAgICAgICB3aGlsZSAo bGlieGVudmNoYW5fZGF0YV9yZWFkeShjdHJsKSAmJiBvdXRzaXogPCBCVUZTSVpFKSB7CisgICAg ICAgICAgICByZXQgPSBsaWJ4ZW52Y2hhbl9yZWFkKGN0cmwsIG91dGJ1ZiArIG91dHNpeiwgQlVG U0laRSAtIG91dHNpeik7CisgICAgICAgICAgICBpZiAocmV0IDwgMCkKKyAgICAgICAgICAgICAg ICBleGl0KDEpOworICAgICAgICAgICAgaWYgKHZlcmJvc2UpCisgICAgICAgICAgICAgICAgZnBy aW50ZihzdGRlcnIsICJmcm9tLXZjaGFuOiAlLipzXG4iLCByZXQsIG91dGJ1ZiArIG91dHNpeik7 CisgICAgICAgICAgICBvdXRzaXogKz0gcmV0OworICAgICAgICAgICAgc29ja2V0X3dyKG91dHB1 dF9mZCk7CisgICAgICAgIH0KKyAgICB9CisgICAgcmV0dXJuIDA7Cit9CisKKy8qKgorICAgIFNp bXBsZSBsaWJ4ZW52Y2hhbiBhcHBsaWNhdGlvbiwgYm90aCBjbGllbnQgYW5kIHNlcnZlci4KKyAg ICBCb3RoIHNpZGVzIG1heSB3cml0ZSBhbmQgcmVhZCwgYm90aCBmcm9tIHRoZSBsaWJ4ZW52Y2hh biBhbmQgZnJvbQorICAgIHN0ZGluL3N0ZG91dCAoanVzdCBsaWtlIG5ldGNhdCkuCisqLworCitz dGF0aWMgc3RydWN0IG9wdGlvbiBvcHRpb25zW10gPSB7CisgICAgeyAibW9kZSIsICAgICAgIHJl cXVpcmVkX2FyZ3VtZW50LCBOVUxMLCAnbScgfSwKKyAgICB7ICJ2ZXJib3NlIiwgICAgICAgICAg bm9fYXJndW1lbnQsIE5VTEwsICd2JyB9LAorICAgIHsgInN0YXRlLXBhdGgiLCByZXF1aXJlZF9h cmd1bWVudCwgTlVMTCwgJ3MnIH0sCisgICAgeyB9Cit9OworCitpbnQgbWFpbihpbnQgYXJnYywg Y2hhciAqKmFyZ3YpCit7CisgICAgaW50IGlzX3NlcnZlciA9IDA7CisgICAgaW50IHNvY2tldF9m ZDsKKyAgICBpbnQgaW5wdXRfZmQsIG91dHB1dF9mZDsKKyAgICBzdHJ1Y3QgbGlieGVudmNoYW4g KmN0cmwgPSBOVUxMOworICAgIGNvbnN0IGNoYXIgKnNvY2tldF9wYXRoOworICAgIGludCBkb21p ZDsKKyAgICBjb25zdCBjaGFyICp2Y2hhbl9wYXRoOworICAgIGNvbnN0IGNoYXIgKnN0YXRlX3Bh dGggPSBOVUxMOworICAgIGludCBvcHQ7CisKKyAgICB3aGlsZSAoKG9wdCA9IGdldG9wdF9sb25n KGFyZ2MsIGFyZ3YsICJtOnZzOiIsIG9wdGlvbnMsIE5VTEwpKSAhPSAtMSkgeworICAgICAgICBz d2l0Y2ggKG9wdCkgeworICAgICAgICAgICAgY2FzZSAnbSc6CisgICAgICAgICAgICAgICAgaWYg KHN0cmNtcChvcHRhcmcsICJzZXJ2ZXIiKSA9PSAwKQorICAgICAgICAgICAgICAgICAgICBpc19z ZXJ2ZXIgPSAxOworICAgICAgICAgICAgICAgIGVsc2UgaWYgKHN0cmNtcChvcHRhcmcsICJjbGll bnQiKSA9PSAwKQorICAgICAgICAgICAgICAgICAgICBpc19zZXJ2ZXIgPSAwOworICAgICAgICAg ICAgICAgIGVsc2UgeworICAgICAgICAgICAgICAgICAgICBmcHJpbnRmKHN0ZGVyciwgImludmFs aWQgYXJndW1lbnQgZm9yIC0tbW9kZTogJXNcbiIsIG9wdGFyZyk7CisgICAgICAgICAgICAgICAg ICAgIHVzYWdlKGFyZ3YpOworICAgICAgICAgICAgICAgICAgICByZXR1cm4gMTsKKyAgICAgICAg ICAgICAgICB9CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBjYXNlICd2JzoK KyAgICAgICAgICAgICAgICB2ZXJib3NlID0gMTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAg ICAgICAgICAgIGNhc2UgJ3MnOgorICAgICAgICAgICAgICAgIHN0YXRlX3BhdGggPSBvcHRhcmc7 CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBjYXNlICc/JzoKKyAgICAgICAg ICAgICAgICB1c2FnZShhcmd2KTsKKyAgICAgICAgfQorICAgIH0KKworICAgIGlmIChhcmdjLW9w dGluZCAhPSAzKQorICAgICAgICB1c2FnZShhcmd2KTsKKworICAgIGRvbWlkID0gYXRvaShhcmd2 W29wdGluZF0pOworICAgIHZjaGFuX3BhdGggPSBhcmd2W29wdGluZCsxXTsKKyAgICBzb2NrZXRf cGF0aCA9IGFyZ3Zbb3B0aW5kKzJdOworCisgICAgaWYgKGlzX3NlcnZlcikgeworICAgICAgICBj dHJsID0gbGlieGVudmNoYW5fc2VydmVyX2luaXQoTlVMTCwgZG9taWQsIHZjaGFuX3BhdGgsIDAs IDApOworICAgICAgICBpZiAoIWN0cmwpIHsKKyAgICAgICAgICAgIHBlcnJvcigibGlieGVudmNo YW5fc2VydmVyX2luaXQiKTsKKyAgICAgICAgICAgIGV4aXQoMSk7CisgICAgICAgIH0KKyAgICB9 IGVsc2UgeworICAgICAgICBpZiAoc3RyY21wKHNvY2tldF9wYXRoLCAiLSIpID09IDApIHsKKyAg ICAgICAgICAgIGlucHV0X2ZkID0gMDsKKyAgICAgICAgICAgIG91dHB1dF9mZCA9IDE7CisgICAg ICAgIH0gZWxzZSB7CisgICAgICAgICAgICBzb2NrZXRfZmQgPSBsaXN0ZW5fc29ja2V0KHNvY2tl dF9wYXRoKTsKKyAgICAgICAgICAgIGlmIChzb2NrZXRfZmQgPT0gLTEpIHsKKyAgICAgICAgICAg ICAgICBwZXJyb3IoImxpc3RlbiBzb2NrZXQiKTsKKyAgICAgICAgICAgICAgICByZXR1cm4gMTsK KyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKworICAgIGlmIChzdGF0ZV9wYXRoKSB7 CisgICAgICAgIHN0cnVjdCB4c19oYW5kbGUgKnhzOworCisgICAgICAgIHhzID0geHNfb3Blbigw KTsKKyAgICAgICAgaWYgKCF4cykgeworICAgICAgICAgICAgcGVycm9yKCJ4c19vcGVuIik7Cisg ICAgICAgICAgICByZXR1cm4gMTsKKyAgICAgICAgfQorICAgICAgICBpZiAoIXhzX3dyaXRlKHhz LCBYQlRfTlVMTCwgc3RhdGVfcGF0aCwgInJ1bm5pbmciLCBzdHJsZW4oInJ1bm5pbmciKSkpIHsK KyAgICAgICAgICAgIHBlcnJvcigieHNfd3JpdGUiKTsKKyAgICAgICAgICAgIHJldHVybiAxOwor ICAgICAgICB9CisgICAgICAgIHhzX2Nsb3NlKHhzKTsKKyAgICB9CisKKyAgICBmb3IgKDs7KSB7 CisgICAgICAgIGlmIChpc19zZXJ2ZXIpIHsKKyAgICAgICAgICAgIC8qIHdhaXQgZm9yIHZjaGFu IGNvbm5lY3Rpb24gKi8KKyAgICAgICAgICAgIHdoaWxlIChsaWJ4ZW52Y2hhbl9pc19vcGVuKGN0 cmwpICE9IDEpCisgICAgICAgICAgICAgICAgbGlieGVudmNoYW5fd2FpdChjdHJsKTsKKyAgICAg ICAgICAgIC8qIHZjaGFuIGNsaWVudCBjb25uZWN0ZWQsIHNldHVwIGxvY2FsIEZEIGlmIG5lZWRl ZCAqLworICAgICAgICAgICAgaWYgKHN0cmNtcChzb2NrZXRfcGF0aCwgIi0iKSA9PSAwKSB7Cisg ICAgICAgICAgICAgICAgaW5wdXRfZmQgPSAwOworICAgICAgICAgICAgICAgIG91dHB1dF9mZCA9 IDE7CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIGlucHV0X2ZkID0gb3V0 cHV0X2ZkID0gY29ubmVjdF9zb2NrZXQoc29ja2V0X3BhdGgpOworICAgICAgICAgICAgfQorICAg ICAgICAgICAgaWYgKGlucHV0X2ZkID09IC0xKSB7CisgICAgICAgICAgICAgICAgcGVycm9yKCJj b25uZWN0IHNvY2tldCIpOworICAgICAgICAgICAgICAgIHJldHVybiAxOworICAgICAgICAgICAg fQorICAgICAgICAgICAgaWYgKGRhdGFfbG9vcChjdHJsLCBpbnB1dF9mZCwgb3V0cHV0X2ZkKSAh PSAwKQorICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgLyoga2VlcCBpdCBydW5u aW5nIG9ubHkgd2hlbiBnZXQgVU5JWCBzb2NrZXQgcGF0aCAqLworICAgICAgICAgICAgaWYgKHNv Y2tldF9wYXRoWzBdICE9ICcvJykKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfSBl bHNlIHsKKyAgICAgICAgICAgIC8qIHdhaXQgZm9yIGxvY2FsIHNvY2tldCBjb25uZWN0aW9uICov CisgICAgICAgICAgICBpZiAoc3RyY21wKHNvY2tldF9wYXRoLCAiLSIpICE9IDApCisgICAgICAg ICAgICAgICAgaW5wdXRfZmQgPSBvdXRwdXRfZmQgPSBhY2NlcHQoc29ja2V0X2ZkLCBOVUxMLCBO VUxMKTsKKyAgICAgICAgICAgIGlmIChpbnB1dF9mZCA9PSAtMSkgeworICAgICAgICAgICAgICAg IHBlcnJvcigiYWNjZXB0Iik7CisgICAgICAgICAgICAgICAgcmV0dXJuIDE7CisgICAgICAgICAg ICB9CisgICAgICAgICAgICBzZXRfbm9uYmxvY2tpbmcoaW5wdXRfZmQsIDEpOworICAgICAgICAg ICAgc2V0X25vbmJsb2NraW5nKG91dHB1dF9mZCwgMSk7CisgICAgICAgICAgICBjdHJsID0gY29u bmVjdF92Y2hhbihkb21pZCwgdmNoYW5fcGF0aCk7CisgICAgICAgICAgICBpZiAoIWN0cmwpIHsK KyAgICAgICAgICAgICAgICBwZXJyb3IoInZjaGFuIGNsaWVudCBpbml0Iik7CisgICAgICAgICAg ICAgICAgcmV0dXJuIDE7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAoZGF0YV9sb29w KGN0cmwsIGlucHV0X2ZkLCBvdXRwdXRfZmQpICE9IDApCisgICAgICAgICAgICAgICAgYnJlYWs7 CisgICAgICAgICAgICAvKiBkb24ndCByZWNvbm5lY3QgaWYgb3V0cHV0IHdhcyBzdGRvdXQgKi8K KyAgICAgICAgICAgIGlmIChzdHJjbXAoc29ja2V0X3BhdGgsICItIikgPT0gMCkKKyAgICAgICAg ICAgICAgICBicmVhazsKKworICAgICAgICAgICAgbGlieGVudmNoYW5fY2xvc2UoY3RybCk7Cisg ICAgICAgICAgICBjdHJsID0gTlVMTDsKKyAgICAgICAgfQorICAgIH0KKyAgICByZXR1cm4gMDsK K30KLS0gCmdpdC1zZXJpZXMgMC45LjEKCl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fClhlbi1kZXZlbCBtYWlsaW5nIGxpc3QKWGVuLWRldmVsQGxpc3RzLnhl bnByb2plY3Qub3JnCmh0dHBzOi8vbGlzdHMueGVucHJvamVjdC5vcmcvbWFpbG1hbi9saXN0aW5m by94ZW4tZGV2ZWw=