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 bombadil.infradead.org (bombadil.infradead.org [198.137.202.133]) (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 8D7CDCA1016 for ; Mon, 8 Sep 2025 23:54:19 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=lists.infradead.org; s=bombadil.20210309; h=Sender: Content-Transfer-Encoding:Content-Type:List-Subscribe:List-Help:List-Post: List-Archive:List-Unsubscribe:List-Id:MIME-Version:References:In-Reply-To: Message-ID:Date:Subject:Cc:To:From:Reply-To:Content-ID:Content-Description: Resent-Date:Resent-From:Resent-Sender:Resent-To:Resent-Cc:Resent-Message-ID: List-Owner; bh=yilD0Z7nPKdX3nZR5njx0ExNQgOGpNacJfZ8r6nemUc=; b=sPnpSIH16YSDm7 GxxBqQd9o87adjOPHerBhAwzbk/nL/pY6Q11SL7SP8cUlBvaqpW81VRqMKTyEntl2tBc57lCdj32f ifgb1XdUxI5hRyiKmcKfCL3ZuCsqkv18CI5cYRE7h/Q8mOS+DwBxRrmZBwye7uL7U1LEqhdSxlO7K 5QMer7H/JlQh+3hywamApHIPp10spdZxk/DQ9RdQpXeACtUfWToz2e8MxBRGvE+GVyWewYMXVes67 8T38cnStkd4Mjvz1TI/1c1grz9LSForeg9a12QwYdMQNSjY8AvYBEXUPUYyfGSZRYOQ0e3/v6VonL 8GhRFgoDN7q8b4QB/7qA==; Received: from localhost ([::1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.98.2 #2 (Red Hat Linux)) id 1uvlgW-000000035oR-0gUI; Mon, 08 Sep 2025 23:54:08 +0000 Received: from mail-pl1-x632.google.com ([2607:f8b0:4864:20::632]) by bombadil.infradead.org with esmtps (Exim 4.98.2 #2 (Red Hat Linux)) id 1uvgSw-00000001UQz-0r5l for linux-riscv@lists.infradead.org; Mon, 08 Sep 2025 18:19:48 +0000 Received: by mail-pl1-x632.google.com with SMTP id d9443c01a7336-244582738b5so39319235ad.3 for ; Mon, 08 Sep 2025 11:19:46 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=rivosinc.com; s=google; t=1757355585; x=1757960385; darn=lists.infradead.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=U6V/dwP2/cPc37KZ6fRfJbHeVitho/24+GF4+3qcxjQ=; b=D47sj8MRxOixxaMCE11vbPsFShzVo8qAGXH9p5/9R1LXtD8XtZzwamqmSyytyq07Nc E0oAHpI+3/5LKyxE6LtZa4/Gluu7nx2Q2qpA6PyDaNQxOAy+No5FocKDZQXGhdnwR1ZK 6mpcpmCH5BptrfcKQsIYIFjbfkjG76yt0TEn8x/gpO6QZkUmS1UsFEwWO7g28TncKD0v vTJ6hNTr8ZFw781uR71PCGVxnGcAfbLRKriOJFoANHcYM97GF7hL9tQBQ42awDbd/TSG 9+yhQ6l7zBBLcJiJSC79e74M6zqDiuo+Qw8rzm94Mm84vXjV0jbQpdh0bXnp1IeGwmj0 z9ew== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1757355585; x=1757960385; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=U6V/dwP2/cPc37KZ6fRfJbHeVitho/24+GF4+3qcxjQ=; b=M37Wi7uBsxuPOTytimEgmapukgG3mjz9/SKfoo9bL07x5BX8HMW/kS1uP7n4Cqn649 1fZPV2PrjbfDV/TouTvP3Y/7MrWHLuzrtV9WaET/rnNEkic1ft8hwjWTd3/+FxP7ZI6b EzixjtKahsUGloDrfcfCxNFhvqUBPTQPBy1yeTAD7C0bDHMnPsU/4L4Qk3m6kD6ehOmL Irb5TaYWf9bPJQCWND/osWmlINUJeQFNxZ8mQv+nnabUcZV92/kgmRW1fSAlZYNTIYzm 38jWBStDa1b5T0zTC1p35imhKpQg8OhRgL6YCV/L8j2YysOu8p5tE6tUEykAIVcwZldx yhIQ== X-Forwarded-Encrypted: i=1; AJvYcCX5hmZuWbmUgv9VomvG/hdqfxe5kYqDKfJLNh8WBPavp1ISItNezyUOdEZuxrXwJ3A9wrdIAloRq0ceQw==@lists.infradead.org X-Gm-Message-State: AOJu0YysyS6NmwIPTsKJmoUip4mceBEKkAFV6gNA+hBSQ4Eco+j3vy1x qIH25I6OGbCGd/o5/5ZKuC5QKukWeEaCFUvdT7Y/R0tgq35GRyYf3RgPekH/wXSgHvo= X-Gm-Gg: ASbGncss4oUgV9frxxIc8Lb8ZejNAKdtgqaG1GewpffcZvt8UhZ2Pkd7Pc+ACZDXjUI OtbuQEuPqIVNgYdkiPybtAGHoqFQ48aaIqVx+fEE16ioKPs61Pa3qcyOHR2mS+fu60itWxMuI/n dzY7NFhCJDglJJ4uiS8q4RWImw/cOA8pYgkvniHtXWJYW7gPJtcU1zd+8G+VkAcHPIYExom3ri6 gZcTDGqcsDt/BGDTxNjyQkBnHoB65NgP+CZwIlR2IWo1xfvVVkBZ5LSv299BacjbCyXu4aGAj7L 02+yWDPln4lVllNnu4vb6V2VdWsWNBZAilPR9+IaGDPvH+/cSjXhieZs+iXCywEZCbJAgHxh5zI K2KY= X-Google-Smtp-Source: AGHT+IHm6bZzRXmeABRwy/G5p7vy/KaN9wuIGKtA/dz7LR+i0K/fWZnNXX5BokaCfbMv/B97mbG9kA== X-Received: by 2002:a17:903:19c6:b0:24c:ed95:2725 with SMTP id d9443c01a7336-2516e97ecbfmr104227365ad.4.1757355585343; Mon, 08 Sep 2025 11:19:45 -0700 (PDT) Received: from cleger.eu.int ([2001:41d0:420:f300::]) by smtp.gmail.com with ESMTPSA id d9443c01a7336-24ccd763948sm117012755ad.118.2025.09.08.11.19.37 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 08 Sep 2025 11:19:44 -0700 (PDT) From: =?UTF-8?q?Cl=C3=A9ment=20L=C3=A9ger?= To: Paul Walmsley , Palmer Dabbelt , linux-riscv@lists.infradead.org, linux-kernel@vger.kernel.org, linux-arm-kernel@lists.infradead.org Cc: =?UTF-8?q?Cl=C3=A9ment=20L=C3=A9ger?= , Himanshu Chauhan , Anup Patel , Xu Lu , Atish Patra , =?UTF-8?q?Bj=C3=B6rn=20T=C3=B6pel?= , Yunhui Cui Subject: [PATCH v7 5/5] selftests/riscv: add SSE test module Date: Mon, 8 Sep 2025 18:17:07 +0000 Message-ID: <20250908181717.1997461-6-cleger@rivosinc.com> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20250908181717.1997461-1-cleger@rivosinc.com> References: <20250908181717.1997461-1-cleger@rivosinc.com> MIME-Version: 1.0 X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20250908_111946_286892_EEE781B2 X-CRM114-Status: GOOD ( 24.54 ) X-BeenThere: linux-riscv@lists.infradead.org X-Mailman-Version: 2.1.34 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Sender: "linux-riscv" Errors-To: linux-riscv-bounces+linux-riscv=archiver.kernel.org@lists.infradead.org VGhpcyBtb2R1bGUsIG9uY2UgbG9hZGVkLCB3aWxsIGV4ZWN1dGUgYSBzZXJpZXMgb2YgdGVzdHMg dXNpbmcgdGhlIFNTRQpmcmFtZXdvcmsuIFRoZSBwcm92aWRlZCBzY3JpcHQgd2lsbCBjaGVjayBm b3IgYW55IGVycm9yIHJlcG9ydGVkIGJ5IHRoZQp0ZXN0IG1vZHVsZS4KClNpZ25lZC1vZmYtYnk6 IENsw6ltZW50IEzDqWdlciA8Y2xlZ2VyQHJpdm9zaW5jLmNvbT4KLS0tCiB0b29scy90ZXN0aW5n L3NlbGZ0ZXN0cy9yaXNjdi9NYWtlZmlsZSAgICAgICAgfCAgIDIgKy0KIHRvb2xzL3Rlc3Rpbmcv c2VsZnRlc3RzL3Jpc2N2L3NzZS9NYWtlZmlsZSAgICB8ICAgNSArCiAuLi4vc2VsZnRlc3RzL3Jp c2N2L3NzZS9tb2R1bGUvTWFrZWZpbGUgICAgICAgfCAgMTYgKwogLi4uL3Jpc2N2L3NzZS9tb2R1 bGUvcmlzY3Zfc3NlX3Rlc3QuYyAgICAgICAgIHwgNTEzICsrKysrKysrKysrKysrKysrKwogLi4u L3NlbGZ0ZXN0cy9yaXNjdi9zc2UvcnVuX3NzZV90ZXN0LnNoICAgICAgIHwgIDQ0ICsrCiA1IGZp bGVzIGNoYW5nZWQsIDU3OSBpbnNlcnRpb25zKCspLCAxIGRlbGV0aW9uKC0pCiBjcmVhdGUgbW9k ZSAxMDA2NDQgdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvcmlzY3Yvc3NlL01ha2VmaWxlCiBjcmVh dGUgbW9kZSAxMDA2NDQgdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvcmlzY3Yvc3NlL21vZHVsZS9N YWtlZmlsZQogY3JlYXRlIG1vZGUgMTAwNjQ0IHRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3Jpc2N2 L3NzZS9tb2R1bGUvcmlzY3Zfc3NlX3Rlc3QuYwogY3JlYXRlIG1vZGUgMTAwNjQ0IHRvb2xzL3Rl c3Rpbmcvc2VsZnRlc3RzL3Jpc2N2L3NzZS9ydW5fc3NlX3Rlc3Quc2gKCmRpZmYgLS1naXQgYS90 b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9yaXNjdi9NYWtlZmlsZSBiL3Rvb2xzL3Rlc3Rpbmcvc2Vs ZnRlc3RzL3Jpc2N2L01ha2VmaWxlCmluZGV4IDA5OWI4YzFmNDZmOC4uYzYyZjU4NDE0YjI5IDEw MDY0NAotLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9yaXNjdi9NYWtlZmlsZQorKysgYi90 b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9yaXNjdi9NYWtlZmlsZQpAQCAtNSw3ICs1LDcgQEAKIEFS Q0ggPz0gJChzaGVsbCB1bmFtZSAtbSAyPi9kZXYvbnVsbCB8fCBlY2hvIG5vdCkKIAogaWZuZXEg KCwkKGZpbHRlciAkKEFSQ0gpLHJpc2N2KSkKLVJJU0NWX1NVQlRBUkdFVFMgPz0gYWJpIGh3cHJv YmUgbW0gc2lncmV0dXJuIHZlY3RvcgorUklTQ1ZfU1VCVEFSR0VUUyA/PSBhYmkgaHdwcm9iZSBt bSBzaWdyZXR1cm4gdmVjdG9yIHNzZQogZWxzZQogUklTQ1ZfU1VCVEFSR0VUUyA6PQogZW5kaWYK ZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3Jpc2N2L3NzZS9NYWtlZmlsZSBi L3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3Jpc2N2L3NzZS9NYWtlZmlsZQpuZXcgZmlsZSBtb2Rl IDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAuLjY3ZWFlZTA2ZjIxMwotLS0gL2Rldi9udWxsCisr KyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3Jpc2N2L3NzZS9NYWtlZmlsZQpAQCAtMCwwICsx LDUgQEAKK1RFU1RfR0VOX01PRFNfRElSIDo9IG1vZHVsZQorCitURVNUX0ZJTEVTIDo9IHJ1bl9z c2VfdGVzdC5zaAorCitpbmNsdWRlIC4uLy4uL2xpYi5tawpkaWZmIC0tZ2l0IGEvdG9vbHMvdGVz dGluZy9zZWxmdGVzdHMvcmlzY3Yvc3NlL21vZHVsZS9NYWtlZmlsZSBiL3Rvb2xzL3Rlc3Rpbmcv c2VsZnRlc3RzL3Jpc2N2L3NzZS9tb2R1bGUvTWFrZWZpbGUKbmV3IGZpbGUgbW9kZSAxMDA2NDQK aW5kZXggMDAwMDAwMDAwMDAwLi4wMjAxOGYwODM0NTYKLS0tIC9kZXYvbnVsbAorKysgYi90b29s cy90ZXN0aW5nL3NlbGZ0ZXN0cy9yaXNjdi9zc2UvbW9kdWxlL01ha2VmaWxlCkBAIC0wLDAgKzEs MTYgQEAKK1RFU1RNT0RTX0RJUiA6PSAkKHJlYWxwYXRoICQoZGlyICQoYWJzcGF0aCAkKGxhc3R3 b3JkICQoTUFLRUZJTEVfTElTVCkpKSkpCitLRElSID89IC9saWIvbW9kdWxlcy8kKHNoZWxsIHVu YW1lIC1yKS9idWlsZAorCitvYmotbSArPSByaXNjdl9zc2VfdGVzdC5vCisKKyMgRW5zdXJlIHRo YXQgS0RJUiBleGlzdHMsIG90aGVyd2lzZSBza2lwIHRoZSBjb21waWxhdGlvbgorbW9kdWxlczoK K2lmbmVxICgiJCh3aWxkY2FyZCAkKEtESVIpKSIsICIiKQorCSQoUSkkKE1BS0UpIC1DICQoS0RJ UikgbW9kdWxlcyBLQlVJTERfRVhUTU9EPSQoVEVTVE1PRFNfRElSKQorZW5kaWYKKworIyBFbnN1 cmUgdGhhdCBLRElSIGV4aXN0cywgb3RoZXJ3aXNlIHNraXAgdGhlIGNsZWFuIHRhcmdldAorY2xl YW46CitpZm5lcSAoIiQod2lsZGNhcmQgJChLRElSKSkiLCAiIikKKwkkKFEpJChNQUtFKSAtQyAk KEtESVIpIGNsZWFuIEtCVUlMRF9FWFRNT0Q9JChURVNUTU9EU19ESVIpCitlbmRpZgpkaWZmIC0t Z2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvcmlzY3Yvc3NlL21vZHVsZS9yaXNjdl9zc2Vf dGVzdC5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvcmlzY3Yvc3NlL21vZHVsZS9yaXNjdl9z c2VfdGVzdC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMC4uZTQ5YTJm MTE3OWY2Ci0tLSAvZGV2L251bGwKKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvcmlzY3Yv c3NlL21vZHVsZS9yaXNjdl9zc2VfdGVzdC5jCkBAIC0wLDAgKzEsNTEzIEBACisvLyBTUERYLUxp Y2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5CisvKgorICogQ29weXJpZ2h0IChDKSAyMDI0 IFJpdm9zIEluYy4KKyAqLworCisjZGVmaW5lIHByX2ZtdChmbXQpICJyaXNjdl9zc2VfdGVzdDog IiBmbXQKKworI2luY2x1ZGUgPGxpbnV4L2FycmF5X3NpemUuaD4KKyNpbmNsdWRlIDxsaW51eC9j b21wbGV0aW9uLmg+CisjaW5jbHVkZSA8bGludXgvZXJyLmg+CisjaW5jbHVkZSA8bGludXgvaW8u aD4KKyNpbmNsdWRlIDxsaW51eC9qaWZmaWVzLmg+CisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+ CisjaW5jbHVkZSA8bGludXgvcmlzY3Zfc2JpX3NzZS5oPgorI2luY2x1ZGUgPGxpbnV4L3NsYWIu aD4KKyNpbmNsdWRlIDxsaW51eC9zbXAuaD4KKworI2luY2x1ZGUgPGFzbS9zYmkuaD4KKyNpbmNs dWRlIDxhc20vc3NlLmg+CisKKyNkZWZpbmUgUlVOX0xPT1BfQ09VTlQJCTEwMDAKKyNkZWZpbmUg U1NFX0ZBSUxFRF9QUkVGSVgJIkZBSUxFRDogIgorI2RlZmluZSBzc2VfZXJyKC4uLikJCXByX2Vy cihTU0VfRkFJTEVEX1BSRUZJWCBfX1ZBX0FSR1NfXykKKworc3RydWN0IHNzZV9ldmVudF9kZXNj IHsKKwl1MzIgZXZ0X2lkOworCWNvbnN0IGNoYXIgKm5hbWU7CisJYm9vbCBjYW5faW5qZWN0Owor fTsKKworc3RhdGljIHN0cnVjdCBzc2VfZXZlbnRfZGVzYyBzc2VfZXZlbnRfZGVzY3NbXSA9IHsK Kwl7CisJCS5ldnRfaWQgPSBTQklfU1NFX0VWRU5UX0xPQ0FMX0hJR0hfUFJJT19SQVMsCisJCS5u YW1lID0gImxvY2FsX2hpZ2hfcHJpb19yYXMiLAorCX0sCisJeworCQkuZXZ0X2lkID0gU0JJX1NT RV9FVkVOVF9MT0NBTF9ET1VCTEVfVFJBUCwKKwkJLm5hbWUgPSAibG9jYWxfZG91YmxlX3RyYXAi LAorCX0sCisJeworCQkuZXZ0X2lkID0gU0JJX1NTRV9FVkVOVF9HTE9CQUxfSElHSF9QUklPX1JB UywKKwkJLm5hbWUgPSAiZ2xvYmFsX2hpZ2hfcHJpb19yYXMiLAorCX0sCisJeworCQkuZXZ0X2lk ID0gU0JJX1NTRV9FVkVOVF9MT0NBTF9QTVVfT1ZFUkZMT1csCisJCS5uYW1lID0gImxvY2FsX3Bt dV9vdmVyZmxvdyIsCisJfSwKKwl7CisJCS5ldnRfaWQgPSBTQklfU1NFX0VWRU5UX0xPQ0FMX0xP V19QUklPX1JBUywKKwkJLm5hbWUgPSAibG9jYWxfbG93X3ByaW9fcmFzIiwKKwl9LAorCXsKKwkJ LmV2dF9pZCA9IFNCSV9TU0VfRVZFTlRfR0xPQkFMX0xPV19QUklPX1JBUywKKwkJLm5hbWUgPSAi Z2xvYmFsX2xvd19wcmlvX3JhcyIsCisJfSwKKwl7CisJCS5ldnRfaWQgPSBTQklfU1NFX0VWRU5U X0xPQ0FMX1NPRlRXQVJFX0lOSkVDVEVELAorCQkubmFtZSA9ICJsb2NhbF9zb2Z0d2FyZV9pbmpl Y3RlZCIsCisJfSwKKwl7CisJCS5ldnRfaWQgPSBTQklfU1NFX0VWRU5UX0dMT0JBTF9TT0ZUV0FS RV9JTkpFQ1RFRCwKKwkJLm5hbWUgPSAiZ2xvYmFsX3NvZnR3YXJlX2luamVjdGVkIiwKKwl9Cit9 OworCitzdGF0aWMgc3RydWN0IHNzZV9ldmVudF9kZXNjICpzc2VfZ2V0X2V2dF9kZXNjKHUzMiBl dnQpCit7CisJaW50IGk7CisKKwlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShzc2VfZXZlbnRf ZGVzY3MpOyBpKyspIHsKKwkJaWYgKHNzZV9ldmVudF9kZXNjc1tpXS5ldnRfaWQgPT0gZXZ0KQor CQkJcmV0dXJuICZzc2VfZXZlbnRfZGVzY3NbaV07CisJfQorCisJcmV0dXJuIE5VTEw7Cit9CisK K3N0YXRpYyBjb25zdCBjaGFyICpzc2VfZXZ0X25hbWUodTMyIGV2dCkKK3sKKwlzdHJ1Y3Qgc3Nl X2V2ZW50X2Rlc2MgKmRlc2MgPSBzc2VfZ2V0X2V2dF9kZXNjKGV2dCk7CisKKwlyZXR1cm4gZGVz YyAhPSBOVUxMID8gZGVzYy0+bmFtZSA6IE5VTEw7Cit9CisKK3N0YXRpYyBib29sIHNzZV90ZXN0 X2Nhbl9pbmplY3RfZXZlbnQodTMyIGV2dCkKK3sKKwlzdHJ1Y3Qgc3NlX2V2ZW50X2Rlc2MgKmRl c2MgPSBzc2VfZ2V0X2V2dF9kZXNjKGV2dCk7CisKKwlyZXR1cm4gZGVzYyAhPSBOVUxMID8gZGVz Yy0+Y2FuX2luamVjdCA6IGZhbHNlOworfQorCitzdGF0aWMgc3RydWN0IHNiaXJldCBzYmlfc3Nl X2VjYWxsKGludCBmaWQsIHVuc2lnbmVkIGxvbmcgYXJnMCwgdW5zaWduZWQgbG9uZyBhcmcxKQor eworCXJldHVybiBzYmlfZWNhbGwoU0JJX0VYVF9TU0UsIGZpZCwgYXJnMCwgYXJnMSwgMCwgMCwg MCwgMCk7Cit9CisKK3N0YXRpYyBpbnQgc3NlX2V2ZW50X2F0dHJfZ2V0KHUzMiBldnQsIHVuc2ln bmVkIGxvbmcgYXR0cl9pZCwKKwkJCSAgICAgIHVuc2lnbmVkIGxvbmcgKnZhbCkKK3sKKwlzdHJ1 Y3Qgc2JpcmV0IHNyZXQ7CisJdW5zaWduZWQgbG9uZyAqYXR0cl9idWYsIHBoeXM7CisKKwlhdHRy X2J1ZiA9IGttYWxsb2Moc2l6ZW9mKHVuc2lnbmVkIGxvbmcpLCBHRlBfS0VSTkVMKTsKKwlpZiAo IWF0dHJfYnVmKQorCQlyZXR1cm4gLUVOT01FTTsKKworCXBoeXMgPSB2aXJ0X3RvX3BoeXMoYXR0 cl9idWYpOworCisJc3JldCA9IHNiaV9lY2FsbChTQklfRVhUX1NTRSwgU0JJX1NTRV9FVkVOVF9B VFRSX1JFQUQsIGV2dCwgYXR0cl9pZCwgMSwKKwkJCSBwaHlzLCAwLCAwKTsKKwlpZiAoc3JldC5l cnJvcikKKwkJcmV0dXJuIHNiaV9lcnJfbWFwX2xpbnV4X2Vycm5vKHNyZXQuZXJyb3IpOworCisJ KnZhbCA9ICphdHRyX2J1ZjsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHNzZV90ZXN0 X3NpZ25hbCh1MzIgZXZ0LCB1bnNpZ25lZCBpbnQgY3B1KQoreworCXVuc2lnbmVkIGludCBoYXJ0 X2lkID0gY3B1aWRfdG9faGFydGlkX21hcChjcHUpOworCXN0cnVjdCBzYmlyZXQgcmV0OworCisJ cmV0ID0gc2JpX3NzZV9lY2FsbChTQklfU1NFX0VWRU5UX0lOSkVDVCwgZXZ0LCBoYXJ0X2lkKTsK KwlpZiAocmV0LmVycm9yKSB7CisJCXNzZV9lcnIoIkZhaWxlZCB0byBzaWduYWwgZXZlbnQgJXgs IGVycm9yICVsZFxuIiwgZXZ0LCByZXQuZXJyb3IpOworCQlyZXR1cm4gc2JpX2Vycl9tYXBfbGlu dXhfZXJybm8ocmV0LmVycm9yKTsKKwl9CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBz c2VfdGVzdF9pbmplY3RfZXZlbnQoc3RydWN0IHNzZV9ldmVudCAqZXZlbnQsIHUzMiBldnQsIHVu c2lnbmVkIGludCBjcHUpCit7CisJaW50IHJlczsKKwl1bnNpZ25lZCBsb25nIHN0YXR1czsKKwor CWlmIChzc2VfZXZlbnRfaXNfZ2xvYmFsKGV2dCkpIHsKKwkJLyoKKwkJICogRHVlIHRvIHRoZSBm YWN0IHRoZSBjb21wbGV0aW9uIG1pZ2h0IGhhcHBlbiBmYXN0ZXIgdGhhbgorCQkgKiB0aGUgY2Fs bCB0byBTQklfU1NFX0NPTVBMRVRFIGluIHRoZSBoYW5kbGVyLCBpZiB0aGUgZXZlbnQgd2FzCisJ CSAqIHJ1bm5pbmcgb24gYW5vdGhlciBDUFUsIHdlIG5lZWQgdG8gd2FpdCBmb3IgdGhlIGV2ZW50 IHN0YXR1cworCQkgKiB0byBiZSAhUlVOTklORy4KKwkJICovCisJCWRvIHsKKwkJCXJlcyA9IHNz ZV9ldmVudF9hdHRyX2dldChldnQsIFNCSV9TU0VfQVRUUl9TVEFUVVMsICZzdGF0dXMpOworCQkJ aWYgKHJlcykgeworCQkJCXNzZV9lcnIoIkZhaWxlZCB0byBnZXQgc3RhdHVzIGZvciBldnQgJXgs IGVycm9yICVkXG4iLCBldnQsIHJlcyk7CisJCQkJcmV0dXJuIHJlczsKKwkJCX0KKwkJCXN0YXR1 cyA9IHN0YXR1cyAmIFNCSV9TU0VfQVRUUl9TVEFUVVNfU1RBVEVfTUFTSzsKKwkJfSB3aGlsZSAo c3RhdHVzID09IFNCSV9TU0VfU1RBVEVfUlVOTklORyk7CisKKwkJcmVzID0gc3NlX2V2ZW50X3Nl dF90YXJnZXRfY3B1KGV2ZW50LCBjcHUpOworCQlpZiAocmVzKSB7CisJCQlzc2VfZXJyKCJGYWls ZWQgdG8gc2V0IGNwdSBmb3IgZXZ0ICV4LCBlcnJvciAlZFxuIiwgZXZ0LCByZXMpOworCQkJcmV0 dXJuIHJlczsKKwkJfQorCX0KKworCXJldHVybiBzc2VfdGVzdF9zaWduYWwoZXZ0LCBjcHUpOwor fQorCitzdHJ1Y3QgZmFzdF90ZXN0X2FyZyB7CisJdTMyIGV2dDsKKwlpbnQgY3B1OworCWJvb2wg Y29tcGxldGlvbjsKK307CisKK3N0YXRpYyBpbnQgc3NlX3Rlc3RfaGFuZGxlcih1MzIgZXZ0LCB2 b2lkICphcmcsIHN0cnVjdCBwdF9yZWdzICpyZWdzKQoreworCWludCByZXQgPSAwOworCXN0cnVj dCBmYXN0X3Rlc3RfYXJnICp0YXJnID0gYXJnOworCXUzMiB0ZXN0X2V2dCA9IFJFQURfT05DRSh0 YXJnLT5ldnQpOworCWludCBjcHUgPSBSRUFEX09OQ0UodGFyZy0+Y3B1KTsKKworCWlmIChldnQg IT0gdGVzdF9ldnQpIHsKKwkJc3NlX2VycigiUmVjZWl2ZWQgU1NFIGV2ZW50IGlkICV4IGluc3Rl YWQgb2YgJXhcbiIsIHRlc3RfZXZ0LCBldnQpOworCQlyZXQgPSAtRUlOVkFMOworCX0KKworCWlm IChjcHUgIT0gc21wX3Byb2Nlc3Nvcl9pZCgpKSB7CisJCXNzZV9lcnIoIlJlY2VpdmVkIFNTRSBl dmVudCAlZCBvbiBDUFUgJWQgaW5zdGVhZCBvZiAlZFxuIiwgZXZ0LCBzbXBfcHJvY2Vzc29yX2lk KCksCisJCQljcHUpOworCQlyZXQgPSAtRUlOVkFMOworCX0KKworCVdSSVRFX09OQ0UodGFyZy0+ Y29tcGxldGlvbiwgdHJ1ZSk7CisKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgdm9pZCBzc2Vf cnVuX2Zhc3RfdGVzdChzdHJ1Y3QgZmFzdF90ZXN0X2FyZyAqdGVzdF9hcmcsIHN0cnVjdCBzc2Vf ZXZlbnQgKmV2ZW50LCB1MzIgZXZ0KQoreworCXVuc2lnbmVkIGxvbmcgdGltZW91dDsKKwlpbnQg cmV0LCBjcHU7CisKKwlmb3JfZWFjaF9vbmxpbmVfY3B1KGNwdSkgeworCQlXUklURV9PTkNFKHRl c3RfYXJnLT5jb21wbGV0aW9uLCBmYWxzZSk7CisJCVdSSVRFX09OQ0UodGVzdF9hcmctPmNwdSwg Y3B1KTsKKwkJLyogVGVzdCBhcmcgaXMgdXNlZCBvbiBhbm90aGVyIENQVSAqLworCQlzbXBfd21i KCk7CisKKwkJcmV0ID0gc3NlX3Rlc3RfaW5qZWN0X2V2ZW50KGV2ZW50LCBldnQsIGNwdSk7CisJ CWlmIChyZXQpIHsKKwkJCXNzZV9lcnIoImV2ZW50ICVzIGluamVjdGlvbiBmYWlsZWQsIGVyciAl ZFxuIiwgc3NlX2V2dF9uYW1lKGV2dCksIHJldCk7CisJCQlyZXR1cm47CisJCX0KKworCQl0aW1l b3V0ID0gamlmZmllcyArIEhaIC8gMTAwOworCQkvKiBXZSBjYW4gbm90IHVzZSA8bGludXgvY29t cGxldGlvbi5oPiBzaW5jZSB0aGV5IGFyZSBub3QgTk1JIHNhZmUgKi8KKwkJd2hpbGUgKCFSRUFE X09OQ0UodGVzdF9hcmctPmNvbXBsZXRpb24pICYmCisJCQl0aW1lX2JlZm9yZShqaWZmaWVzLCB0 aW1lb3V0KSkgeworCQkJY3B1X3JlbGF4KCk7CisJCX0KKwkJaWYgKCF0aW1lX2JlZm9yZShqaWZm aWVzLCB0aW1lb3V0KSkgeworCQkJc3NlX2VycigiRmFpbGVkIHRvIHdhaXQgZm9yIGV2ZW50ICVz IGNvbXBsZXRpb24gb24gQ1BVICVkXG4iLAorCQkJCXNzZV9ldnRfbmFtZShldnQpLCBjcHUpOwor CQkJcmV0dXJuOworCQl9CisJfQorfQorCitzdGF0aWMgdm9pZCBzc2VfdGVzdF9pbmplY3Rpb25f ZmFzdCh2b2lkKQoreworCWludCBpLCByZXQgPSAwLCBqOworCXUzMiBldnQ7CisJc3RydWN0IGZh c3RfdGVzdF9hcmcgdGVzdF9hcmc7CisJc3RydWN0IHNzZV9ldmVudCAqZXZlbnQ7CisKKwlwcl9p bmZvKCJTdGFydGluZyBTU0UgdGVzdCAoZmFzdClcbiIpOworCisJZm9yIChpID0gMDsgaSA8IEFS UkFZX1NJWkUoc3NlX2V2ZW50X2Rlc2NzKTsgaSsrKSB7CisJCWV2dCA9IHNzZV9ldmVudF9kZXNj c1tpXS5ldnRfaWQ7CisJCVdSSVRFX09OQ0UodGVzdF9hcmcuZXZ0LCBldnQpOworCisJCWlmICgh c3NlX2V2ZW50X2Rlc2NzW2ldLmNhbl9pbmplY3QpCisJCQljb250aW51ZTsKKworCQlldmVudCA9 IHNzZV9ldmVudF9yZWdpc3RlcihldnQsIDAsIHNzZV90ZXN0X2hhbmRsZXIsCisJCQkJCSAgICh2 b2lkICopJnRlc3RfYXJnKTsKKwkJaWYgKElTX0VSUihldmVudCkpIHsKKwkJCXNzZV9lcnIoIkZh aWxlZCB0byByZWdpc3RlciBldmVudCAlcywgZXJyICVsZFxuIiwgc3NlX2V2dF9uYW1lKGV2dCks CisJCQkJUFRSX0VSUihldmVudCkpOworCQkJZ290byBvdXQ7CisJCX0KKworCQlyZXQgPSBzc2Vf ZXZlbnRfZW5hYmxlKGV2ZW50KTsKKwkJaWYgKHJldCkgeworCQkJc3NlX2VycigiRmFpbGVkIHRv IGVuYWJsZSBldmVudCAlcywgZXJyICVkXG4iLCBzc2VfZXZ0X25hbWUoZXZ0KSwgcmV0KTsKKwkJ CWdvdG8gZXJyX3VucmVnaXN0ZXI7CisJCX0KKworCQlwcl9pbmZvKCJTdGFydGluZyB0ZXN0aW5n IGV2ZW50ICVzXG4iLCBzc2VfZXZ0X25hbWUoZXZ0KSk7CisKKwkJZm9yIChqID0gMDsgaiA8IFJV Tl9MT09QX0NPVU5UOyBqKyspCisJCQlzc2VfcnVuX2Zhc3RfdGVzdCgmdGVzdF9hcmcsIGV2ZW50 LCBldnQpOworCisJCXByX2luZm8oIkZpbmlzaGVkIHRlc3RpbmcgZXZlbnQgJXNcbiIsIHNzZV9l dnRfbmFtZShldnQpKTsKKworCQlzc2VfZXZlbnRfZGlzYWJsZShldmVudCk7CitlcnJfdW5yZWdp c3RlcjoKKwkJc3NlX2V2ZW50X3VucmVnaXN0ZXIoZXZlbnQpOworCX0KK291dDoKKwlwcl9pbmZv KCJGaW5pc2hlZCBTU0UgdGVzdCAoZmFzdClcbiIpOworfQorCitzdHJ1Y3QgcHJpb3JpdHlfdGVz dF9hcmcgeworCXVuc2lnbmVkIGxvbmcgZXZ0OworCXN0cnVjdCBzc2VfZXZlbnQgKmV2ZW50Owor CWJvb2wgY2FsbGVkOworCXUzMiBwcmlvOworCXN0cnVjdCBwcmlvcml0eV90ZXN0X2FyZyAqbmV4 dF9ldnRfYXJnOworCXZvaWQgKCpjaGVja19mdW5jKShzdHJ1Y3QgcHJpb3JpdHlfdGVzdF9hcmcg KmFyZyk7Cit9OworCitzdGF0aWMgaW50IHNzZV9oaV9wcmlvcml0eV90ZXN0X2hhbmRsZXIodTMy IGV2dCwgdm9pZCAqYXJnLAorCQkJCQlzdHJ1Y3QgcHRfcmVncyAqcmVncykKK3sKKwlzdHJ1Y3Qg cHJpb3JpdHlfdGVzdF9hcmcgKnRhcmcgPSBhcmc7CisJc3RydWN0IHByaW9yaXR5X3Rlc3RfYXJn ICpuZXh0ID0gUkVBRF9PTkNFKHRhcmctPm5leHRfZXZ0X2FyZyk7CisKKwlXUklURV9PTkNFKHRh cmctPmNhbGxlZCwgMSk7CisKKwlpZiAobmV4dCkgeworCQlzc2VfdGVzdF9zaWduYWwobmV4dC0+ ZXZ0LCBzbXBfcHJvY2Vzc29yX2lkKCkpOworCQlpZiAoIVJFQURfT05DRShuZXh0LT5jYWxsZWQp KSB7CisJCQlzc2VfZXJyKCJIaWdoZXIgcHJpb3JpdHkgZXZlbnQgJXMgd2FzIG5vdCBoYW5kbGVk ICVzXG4iLAorCQkJICAgICAgc3NlX2V2dF9uYW1lKG5leHQtPmV2dCksIHNzZV9ldnRfbmFtZShl dnQpKTsKKwkJfQorCX0KKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHNzZV9sb3dfcHJp b3JpdHlfdGVzdF9oYW5kbGVyKHUzMiBldnQsIHZvaWQgKmFyZywgc3RydWN0IHB0X3JlZ3MgKnJl Z3MpCit7CisJc3RydWN0IHByaW9yaXR5X3Rlc3RfYXJnICp0YXJnID0gYXJnOworCXN0cnVjdCBw cmlvcml0eV90ZXN0X2FyZyAqbmV4dCA9IFJFQURfT05DRSh0YXJnLT5uZXh0X2V2dF9hcmcpOwor CisJV1JJVEVfT05DRSh0YXJnLT5jYWxsZWQsIDEpOworCisJaWYgKG5leHQpIHsKKwkJc3NlX3Rl c3Rfc2lnbmFsKG5leHQtPmV2dCwgc21wX3Byb2Nlc3Nvcl9pZCgpKTsKKwkJaWYgKFJFQURfT05D RShuZXh0LT5jYWxsZWQpKSB7CisJCQlzc2VfZXJyKCJMb3dlciBwcmlvcml0eSBldmVudCAlcyB3 YXMgaGFuZGxlIGJlZm9yZSAlc1xuIiwKKwkJCQlzc2VfZXZ0X25hbWUobmV4dC0+ZXZ0KSwgc3Nl X2V2dF9uYW1lKGV2dCkpOworCQl9CisJfQorCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lk IHNzZV90ZXN0X2luamVjdGlvbl9wcmlvcml0eV9hcmcoc3RydWN0IHByaW9yaXR5X3Rlc3RfYXJn ICphcmdzLCB1bnNpZ25lZCBpbnQgYXJnc19zaXplLAorCQkJCQkgICAgc3NlX2V2ZW50X2hhbmRs ZXJfZm4gaGFuZGxlciwgY29uc3QgY2hhciAqdGVzdF9uYW1lKQoreworCXVuc2lnbmVkIGludCBp OworCWludCByZXQ7CisJc3RydWN0IHNzZV9ldmVudCAqZXZlbnQ7CisJc3RydWN0IHByaW9yaXR5 X3Rlc3RfYXJnICphcmcsICpmaXJzdF9hcmcgPSBOVUxMLCAqcHJldl9hcmcgPSBOVUxMOworCisJ cHJfaW5mbygiU3RhcnRpbmcgU1NFIHByaW9yaXR5IHRlc3QgKCVzKVxuIiwgdGVzdF9uYW1lKTsK Kwlmb3IgKGkgPSAwOyBpIDwgYXJnc19zaXplOyBpKyspIHsKKwkJYXJnID0gJmFyZ3NbaV07CisK KwkJaWYgKCFzc2VfdGVzdF9jYW5faW5qZWN0X2V2ZW50KGFyZy0+ZXZ0KSkKKwkJCWNvbnRpbnVl OworCisJCVdSSVRFX09OQ0UoYXJnLT5jYWxsZWQsIGZhbHNlKTsKKwkJV1JJVEVfT05DRShhcmct Pm5leHRfZXZ0X2FyZywgTlVMTCk7CisJCWlmIChwcmV2X2FyZykKKwkJCVdSSVRFX09OQ0UocHJl dl9hcmctPm5leHRfZXZ0X2FyZywgYXJnKTsKKworCQlwcmV2X2FyZyA9IGFyZzsKKworCQlpZiAo IWZpcnN0X2FyZykKKwkJCWZpcnN0X2FyZyA9IGFyZzsKKworCQlldmVudCA9IHNzZV9ldmVudF9y ZWdpc3RlcihhcmctPmV2dCwgYXJnLT5wcmlvLCBoYW5kbGVyLCAodm9pZCAqKWFyZyk7CisJCWlm IChJU19FUlIoZXZlbnQpKSB7CisJCQlzc2VfZXJyKCJGYWlsZWQgdG8gcmVnaXN0ZXIgZXZlbnQg JXMsIGVyciAlbGRcbiIsIHNzZV9ldnRfbmFtZShhcmctPmV2dCksCisJCQkJUFRSX0VSUihldmVu dCkpOworCQkJZ290byByZWxlYXNlX2V2ZW50czsKKwkJfQorCQlhcmctPmV2ZW50ID0gZXZlbnQ7 CisKKwkJaWYgKHNzZV9ldmVudF9pc19nbG9iYWwoYXJnLT5ldnQpKSB7CisJCQkvKiBUYXJnZXQg ZXZlbnQgYXQgY3VycmVudCBDUFUgKi8KKwkJCXJldCA9IHNzZV9ldmVudF9zZXRfdGFyZ2V0X2Nw dShldmVudCwgc21wX3Byb2Nlc3Nvcl9pZCgpKTsKKwkJCWlmIChyZXQpIHsKKwkJCQlzc2VfZXJy KCJGYWlsZWQgdG8gc2V0IGV2ZW50ICVzIHRhcmdldCBDUFUsIGVyciAlZFxuIiwKKwkJCQkJc3Nl X2V2dF9uYW1lKGFyZy0+ZXZ0KSwgcmV0KTsKKwkJCQlnb3RvIHJlbGVhc2VfZXZlbnRzOworCQkJ fQorCQl9CisKKwkJcmV0ID0gc3NlX2V2ZW50X2VuYWJsZShldmVudCk7CisJCWlmIChyZXQpIHsK KwkJCXNzZV9lcnIoIkZhaWxlZCB0byBlbmFibGUgZXZlbnQgJXMsIGVyciAlZFxuIiwgc3NlX2V2 dF9uYW1lKGFyZy0+ZXZ0KSwgcmV0KTsKKwkJCWdvdG8gcmVsZWFzZV9ldmVudHM7CisJCX0KKwl9 CisKKwlpZiAoIWZpcnN0X2FyZykgeworCQlzc2VfZXJyKCJObyBpbmplY3RhYmxlIGV2ZW50IGF2 YWlsYWJsZVxuIik7CisJCXJldHVybjsKKwl9CisKKwkvKiBJbmplY3QgZmlyc3QgZXZlbnQsIGhh bmRsZXIgc2hvdWxkIHRyaWdnZXIgdGhlIG90aGVycyBpbiBjaGFpbi4gKi8KKwlyZXQgPSBzc2Vf dGVzdF9pbmplY3RfZXZlbnQoZmlyc3RfYXJnLT5ldmVudCwgZmlyc3RfYXJnLT5ldnQsIHNtcF9w cm9jZXNzb3JfaWQoKSk7CisJaWYgKHJldCkgeworCQlzc2VfZXJyKCJTU0UgZXZlbnQgJXMgaW5q ZWN0aW9uIGZhaWxlZFxuIiwgc3NlX2V2dF9uYW1lKGZpcnN0X2FyZy0+ZXZ0KSk7CisJCWdvdG8g cmVsZWFzZV9ldmVudHM7CisJfQorCisJLyoKKwkgKiBFdmVudCBhcmUgaW5qZWN0ZWQgZGlyZWN0 bHkgb24gdGhlIGN1cnJlbnQgQ1BVIGFmdGVyIGNhbGxpbmcgc3NlX3Rlc3RfaW5qZWN0X2V2ZW50 KCkKKwkgKiBzbyB0aGF0IGV4ZWN1dGlvbiBpcyBwcmVtbXB0ZWQgcmlnaHQgYXdheSwgbm8gbmVl ZCB0byB3YWl0IGZvciB0aW1lb3V0LgorCSAqLworCWFyZyA9IGZpcnN0X2FyZzsKKwl3aGlsZSAo YXJnKSB7CisJCWlmICghUkVBRF9PTkNFKGFyZy0+Y2FsbGVkKSkgeworCQkJc3NlX2VycigiRXZl bnQgJXMgaGFuZGxlciB3YXMgbm90IGNhbGxlZFxuIiwKKwkJCSAgICAgIHNzZV9ldnRfbmFtZShh cmctPmV2dCkpOworCQkJcmV0ID0gLUVJTlZBTDsKKwkJfQorCisKKwkJZXZlbnQgPSBhcmctPmV2 ZW50OworCQlhcmcgPSBSRUFEX09OQ0UoYXJnLT5uZXh0X2V2dF9hcmcpOworCX0KKworcmVsZWFz ZV9ldmVudHM6CisKKwlhcmcgPSBmaXJzdF9hcmc7CisJd2hpbGUgKGFyZykgeworCQlldmVudCA9 IGFyZy0+ZXZlbnQ7CisJCWlmICghZXZlbnQpCisJCQlicmVhazsKKworCQlzc2VfZXZlbnRfZGlz YWJsZShldmVudCk7CisJCXNzZV9ldmVudF91bnJlZ2lzdGVyKGV2ZW50KTsKKwkJYXJnID0gUkVB RF9PTkNFKGFyZy0+bmV4dF9ldnRfYXJnKTsKKwl9CisKKwlwcl9pbmZvKCJGaW5pc2hlZCBTU0Ug cHJpb3JpdHkgdGVzdCAoJXMpXG4iLCB0ZXN0X25hbWUpOworfQorCitzdGF0aWMgdm9pZCBzc2Vf dGVzdF9pbmplY3Rpb25fcHJpb3JpdHkodm9pZCkKK3sKKwlzdHJ1Y3QgcHJpb3JpdHlfdGVzdF9h cmcgZGVmYXVsdF9oaV9wcmlvX2FyZ3NbXSA9IHsKKwkJeyAuZXZ0ID0gU0JJX1NTRV9FVkVOVF9H TE9CQUxfU09GVFdBUkVfSU5KRUNURUQgfSwKKwkJeyAuZXZ0ID0gU0JJX1NTRV9FVkVOVF9MT0NB TF9TT0ZUV0FSRV9JTkpFQ1RFRCB9LAorCQl7IC5ldnQgPSBTQklfU1NFX0VWRU5UX0dMT0JBTF9M T1dfUFJJT19SQVMgfSwKKwkJeyAuZXZ0ID0gU0JJX1NTRV9FVkVOVF9MT0NBTF9MT1dfUFJJT19S QVMgfSwKKwkJeyAuZXZ0ID0gU0JJX1NTRV9FVkVOVF9MT0NBTF9QTVVfT1ZFUkZMT1cgfSwKKwkJ eyAuZXZ0ID0gU0JJX1NTRV9FVkVOVF9HTE9CQUxfSElHSF9QUklPX1JBUyB9LAorCQl7IC5ldnQg PSBTQklfU1NFX0VWRU5UX0xPQ0FMX0RPVUJMRV9UUkFQIH0sCisJCXsgLmV2dCA9IFNCSV9TU0Vf RVZFTlRfTE9DQUxfSElHSF9QUklPX1JBUyB9LAorCX07CisKKwlzdHJ1Y3QgcHJpb3JpdHlfdGVz dF9hcmcgZGVmYXVsdF9sb3dfcHJpb19hcmdzW10gPSB7CisJCXsgLmV2dCA9IFNCSV9TU0VfRVZF TlRfTE9DQUxfSElHSF9QUklPX1JBUyB9LAorCQl7IC5ldnQgPSBTQklfU1NFX0VWRU5UX0xPQ0FM X0RPVUJMRV9UUkFQIH0sCisJCXsgLmV2dCA9IFNCSV9TU0VfRVZFTlRfR0xPQkFMX0hJR0hfUFJJ T19SQVMgfSwKKwkJeyAuZXZ0ID0gU0JJX1NTRV9FVkVOVF9MT0NBTF9QTVVfT1ZFUkZMT1cgfSwK KwkJeyAuZXZ0ID0gU0JJX1NTRV9FVkVOVF9MT0NBTF9MT1dfUFJJT19SQVMgfSwKKwkJeyAuZXZ0 ID0gU0JJX1NTRV9FVkVOVF9HTE9CQUxfTE9XX1BSSU9fUkFTIH0sCisJCXsgLmV2dCA9IFNCSV9T U0VfRVZFTlRfTE9DQUxfU09GVFdBUkVfSU5KRUNURUQgfSwKKwkJeyAuZXZ0ID0gU0JJX1NTRV9F VkVOVF9HTE9CQUxfU09GVFdBUkVfSU5KRUNURUQgfSwKKworCX07CisJc3RydWN0IHByaW9yaXR5 X3Rlc3RfYXJnIHNldF9wcmlvX2FyZ3NbXSA9IHsKKwkJeyAuZXZ0ID0gU0JJX1NTRV9FVkVOVF9H TE9CQUxfU09GVFdBUkVfSU5KRUNURUQsIC5wcmlvID0gNSB9LAorCQl7IC5ldnQgPSBTQklfU1NF X0VWRU5UX0xPQ0FMX1NPRlRXQVJFX0lOSkVDVEVELCAucHJpbyA9IDEwIH0sCisJCXsgLmV2dCA9 IFNCSV9TU0VfRVZFTlRfR0xPQkFMX0xPV19QUklPX1JBUywgLnByaW8gPSAxNSB9LAorCQl7IC5l dnQgPSBTQklfU1NFX0VWRU5UX0xPQ0FMX0xPV19QUklPX1JBUywgLnByaW8gPSAyMCB9LAorCQl7 IC5ldnQgPSBTQklfU1NFX0VWRU5UX0xPQ0FMX1BNVV9PVkVSRkxPVywgLnByaW8gPSAyNSB9LAor CQl7IC5ldnQgPSBTQklfU1NFX0VWRU5UX0dMT0JBTF9ISUdIX1BSSU9fUkFTLCAucHJpbyA9IDMw IH0sCisJCXsgLmV2dCA9IFNCSV9TU0VfRVZFTlRfTE9DQUxfRE9VQkxFX1RSQVAsIC5wcmlvID0g MzUgfSwKKwkJeyAuZXZ0ID0gU0JJX1NTRV9FVkVOVF9MT0NBTF9ISUdIX1BSSU9fUkFTLCAucHJp byA9IDQwIH0sCisJfTsKKworCXN0cnVjdCBwcmlvcml0eV90ZXN0X2FyZyBzYW1lX3ByaW9fYXJn c1tdID0geworCQl7IC5ldnQgPSBTQklfU1NFX0VWRU5UX0xPQ0FMX1BNVV9PVkVSRkxPVywgLnBy aW8gPSAwIH0sCisJCXsgLmV2dCA9IFNCSV9TU0VfRVZFTlRfTE9DQUxfSElHSF9QUklPX1JBUywg LnByaW8gPSAxMCB9LAorCQl7IC5ldnQgPSBTQklfU1NFX0VWRU5UX0xPQ0FMX1NPRlRXQVJFX0lO SkVDVEVELCAucHJpbyA9IDEwIH0sCisJCXsgLmV2dCA9IFNCSV9TU0VfRVZFTlRfR0xPQkFMX1NP RlRXQVJFX0lOSkVDVEVELCAucHJpbyA9IDEwIH0sCisJCXsgLmV2dCA9IFNCSV9TU0VfRVZFTlRf R0xPQkFMX0hJR0hfUFJJT19SQVMsIC5wcmlvID0gMjAgfSwKKwl9OworCisJc3NlX3Rlc3RfaW5q ZWN0aW9uX3ByaW9yaXR5X2FyZyhkZWZhdWx0X2hpX3ByaW9fYXJncywgQVJSQVlfU0laRShkZWZh dWx0X2hpX3ByaW9fYXJncyksCisJCQkJCXNzZV9oaV9wcmlvcml0eV90ZXN0X2hhbmRsZXIsICJo aWdoIik7CisKKwlzc2VfdGVzdF9pbmplY3Rpb25fcHJpb3JpdHlfYXJnKGRlZmF1bHRfbG93X3By aW9fYXJncywgQVJSQVlfU0laRShkZWZhdWx0X2xvd19wcmlvX2FyZ3MpLAorCQkJCQlzc2VfbG93 X3ByaW9yaXR5X3Rlc3RfaGFuZGxlciwgImxvdyIpOworCisJc3NlX3Rlc3RfaW5qZWN0aW9uX3By aW9yaXR5X2FyZyhzZXRfcHJpb19hcmdzLCBBUlJBWV9TSVpFKHNldF9wcmlvX2FyZ3MpLAorCQkJ CQlzc2VfbG93X3ByaW9yaXR5X3Rlc3RfaGFuZGxlciwgInNldCIpOworCisJc3NlX3Rlc3RfaW5q ZWN0aW9uX3ByaW9yaXR5X2FyZyhzYW1lX3ByaW9fYXJncywgQVJSQVlfU0laRShzYW1lX3ByaW9f YXJncyksCisJCQkJCXNzZV9sb3dfcHJpb3JpdHlfdGVzdF9oYW5kbGVyLCAic2FtZV9wcmlvX2Fy Z3MiKTsKK30KKworCitzdGF0aWMgYm9vbCBzc2VfZ2V0X2luamVjdF9zdGF0dXModTMyIGV2dCkK K3sKKwlpbnQgcmV0OworCXVuc2lnbmVkIGxvbmcgdmFsOworCisJLyogQ2hlY2sgaWYgaW5qZWN0 aW9uIGlzIHN1cHBvcnRlZCAqLworCXJldCA9IHNzZV9ldmVudF9hdHRyX2dldChldnQsIFNCSV9T U0VfQVRUUl9TVEFUVVMsICZ2YWwpOworCWlmIChyZXQpCisJCXJldHVybiBmYWxzZTsKKworCXJl dHVybiAhISh2YWwgJiBCSVQoU0JJX1NTRV9BVFRSX1NUQVRVU19JTkpFQ1RfT0ZGU0VUKSk7Cit9 CisKK3N0YXRpYyB2b2lkIHNzZV9pbml0X2V2ZW50cyh2b2lkKQoreworCWludCBpOworCisJZm9y IChpID0gMDsgaSA8IEFSUkFZX1NJWkUoc3NlX2V2ZW50X2Rlc2NzKTsgaSsrKSB7CisJCXN0cnVj dCBzc2VfZXZlbnRfZGVzYyAqZGVzYyA9ICZzc2VfZXZlbnRfZGVzY3NbaV07CisKKwkJZGVzYy0+ Y2FuX2luamVjdCA9IHNzZV9nZXRfaW5qZWN0X3N0YXR1cyhkZXNjLT5ldnRfaWQpOworCQlpZiAo IWRlc2MtPmNhbl9pbmplY3QpCisJCQlwcl9pbmZvKCJDYW4gbm90IGluamVjdCBldmVudCAlcywg dGVzdHMgdXNpbmcgdGhpcyBldmVudCB3aWxsIGJlIHNraXBwZWRcbiIsCisJCQkJZGVzYy0+bmFt ZSk7CisJfQorfQorCitzdGF0aWMgaW50IF9faW5pdCBzc2VfdGVzdF9pbml0KHZvaWQpCit7CisJ c3NlX2luaXRfZXZlbnRzKCk7CisKKwlzc2VfdGVzdF9pbmplY3Rpb25fZmFzdCgpOworCXNzZV90 ZXN0X2luamVjdGlvbl9wcmlvcml0eSgpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lk IF9fZXhpdCBzc2VfdGVzdF9leGl0KHZvaWQpCit7Cit9CisKK21vZHVsZV9pbml0KHNzZV90ZXN0 X2luaXQpOworbW9kdWxlX2V4aXQoc3NlX3Rlc3RfZXhpdCk7CisKK01PRFVMRV9MSUNFTlNFKCJH UEwiKTsKK01PRFVMRV9BVVRIT1IoIkNsw6ltZW50IEzDqWdlciA8Y2xlZ2VyQHJpdm9zaW5jLmNv bT4iKTsKK01PRFVMRV9ERVNDUklQVElPTigiVGVzdCBtb2R1bGUgZm9yIFNTRSIpOwpkaWZmIC0t Z2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvcmlzY3Yvc3NlL3J1bl9zc2VfdGVzdC5zaCBi L3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3Jpc2N2L3NzZS9ydW5fc3NlX3Rlc3Quc2gKbmV3IGZp bGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwLi44ODhiYzRhOTljYjMKLS0tIC9kZXYv bnVsbAorKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9yaXNjdi9zc2UvcnVuX3NzZV90ZXN0 LnNoCkBAIC0wLDAgKzEsNDQgQEAKKyMhL2Jpbi9iYXNoCisjIFNQRFgtTGljZW5zZS1JZGVudGlm aWVyOiBHUEwtMi4wCisjCisjIENvcHlyaWdodCAoQykgMjAyNSBSaXZvcyBJbmMuCisKK01PRFVM RV9OQU1FPXJpc2N2X3NzZV90ZXN0CitEUklWRVI9Ii4vbW9kdWxlLyR7TU9EVUxFX05BTUV9Lmtv IgorCitjaGVja190ZXN0X2ZhaWxlZF9wcmVmaXgoKSB7CisJaWYgZG1lc2cgfCBncmVwIC1xICIk e01PRFVMRV9OQU1FfTogRkFJTEVEOiI7dGhlbgorCQllY2hvICIke01PRFVMRV9OQU1FfSBmYWls ZWQsIHBsZWFzZSBjaGVjayBkbWVzZyIKKwkJZXhpdCAxCisJZmkKK30KKworIyBLc2VsZnRlc3Qg ZnJhbWV3b3JrIHJlcXVpcmVtZW50IC0gU0tJUCBjb2RlIGlzIDQuCitrc2Z0X3NraXA9NAorCitj aGVja190ZXN0X3JlcXVpcmVtZW50cygpCit7CisJdWlkPSQoaWQgLXUpCisJaWYgWyAkdWlkIC1u ZSAwIF07IHRoZW4KKwkJZWNobyAiJDA6IE11c3QgYmUgcnVuIGFzIHJvb3QiCisJCWV4aXQgJGtz ZnRfc2tpcAorCWZpCisKKwlpZiAhIHdoaWNoIGluc21vZCA+IC9kZXYvbnVsbCAyPiYxOyB0aGVu CisJCWVjaG8gIiQwOiBZb3UgbmVlZCBpbnNtb2QgaW5zdGFsbGVkIgorCQlleGl0ICRrc2Z0X3Nr aXAKKwlmaQorCisJaWYgWyAhIC1mICREUklWRVIgXTsgdGhlbgorCQllY2hvICIkMDogWW91IG5l ZWQgdG8gY29tcGlsZSAke01PRFVMRV9OQU1FfSBtb2R1bGUiCisJCWV4aXQgJGtzZnRfc2tpcAor CWZpCit9CisKK2NoZWNrX3Rlc3RfcmVxdWlyZW1lbnRzCisKK2luc21vZCAkRFJJVkVSID4gL2Rl di9udWxsIDI+JjEKK3JtbW9kICRNT0RVTEVfTkFNRQorY2hlY2tfdGVzdF9mYWlsZWRfcHJlZml4 CisKK2V4aXQgMAotLSAKMi40My4wCgoKX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX18KbGludXgtcmlzY3YgbWFpbGluZyBsaXN0CmxpbnV4LXJpc2N2QGxpc3Rz LmluZnJhZGVhZC5vcmcKaHR0cDovL2xpc3RzLmluZnJhZGVhZC5vcmcvbWFpbG1hbi9saXN0aW5m by9saW51eC1yaXNjdgo=