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 2B653C4345F for ; Fri, 19 Apr 2024 21:25:22 +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:In-Reply-To:MIME-Version:References: Message-ID:Subject:Cc:To:From:Date:Reply-To:Content-ID:Content-Description: Resent-Date:Resent-From:Resent-Sender:Resent-To:Resent-Cc:Resent-Message-ID: List-Owner; bh=h3x8sZJHWpMBjwJm7U/isfe0xCJSTvcsRWkP75SkSB0=; b=lsHrTONzfL2IQe J3V+KPDumMffymMpkyclxDSmCExXXgg8hIiYvIQIL5eW/zv7vZ/nCSpOIw/UapsY6kPACOZrKVlxA 6LetCapPvdtjwWFcaZhGe5px/Kvy2wICXlhiJChVlcVKFpeBMs7h4OV4k+Tgt2bCHV70a6JHmIWsH WeP9eryX1aGuq8LnaE8HLN9sNlLACqE8pzMcJh37zJ0UV56LDpx4BqeJ0dYWco1R2dFzzjVHLqx/L Y7uw15252896SuTvqWMFPWGDYaPV9fL2XJUmBDT1svD6umGrf0mdrf5NKwx4pWoD4QOtMpxDDHAX6 YZpds8RTjeNRaeb0AahQ==; Received: from localhost ([::1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.97.1 #2 (Red Hat Linux)) id 1rxvjE-000000071ay-2U2v; Fri, 19 Apr 2024 21:25:04 +0000 Received: from mail-wm1-x336.google.com ([2a00:1450:4864:20::336]) by bombadil.infradead.org with esmtps (Exim 4.97.1 #2 (Red Hat Linux)) id 1rxvj9-000000071a5-36fj for linux-arm-kernel@lists.infradead.org; Fri, 19 Apr 2024 21:25:02 +0000 Received: by mail-wm1-x336.google.com with SMTP id 5b1f17b1804b1-418dc2724bbso6465e9.1 for ; Fri, 19 Apr 2024 14:24:58 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20230601; t=1713561897; x=1714166697; darn=lists.infradead.org; h=in-reply-to:content-transfer-encoding:content-disposition :mime-version:references:message-id:subject:cc:to:from:date:from:to :cc:subject:date:message-id:reply-to; bh=kD9QVKEHKnLLqhMtbvxHnwDGMrrKVKP9o/5ogUb3vjw=; b=0ZVzaznekCCzc4TzmKurHd9pVgr8nzkpf549uORaV2GaQqiUwocWopCIQ0qJPeQeKB 7ukQS7aQWdF4+JcGsNapmSCU3+UfyCuUptzRsiqG9mPhmOibKuSp9COQSXnZwoedsnnw FGAXDzO6tKValY9DE6VzVNdP3NcPCePZcbb968CM3BYF+yAMynNzw8jlxwBXITBQBNnh YyQonA1PwuiK4jTpZKORMU5SWdpl+Z4plFYKN9ovNapyBtSPaCGEgqQfT2p3GAhilhiu 72b3qD7R/hckoeqNF+0jZsH4j68/Jpch9Ygn6+Hn2hVH5N6FAbLJyUc+0uxd2h9iEK/P CvmA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1713561897; x=1714166697; h=in-reply-to:content-transfer-encoding:content-disposition :mime-version:references:message-id:subject:cc:to:from:date :x-gm-message-state:from:to:cc:subject:date:message-id:reply-to; bh=kD9QVKEHKnLLqhMtbvxHnwDGMrrKVKP9o/5ogUb3vjw=; b=njDCrPC6ofIf9Pb4+YbgM7Bhcj5+W+0NLCrHN4nLSPIPQJtKiP3Qgk1ECvzYsjK3tG cjOlKMXrQuHm68Zs/ndnWQWB+mZ3RqOZN3vKuG4/xkazCVTb3uYEIfwgIJgw/uXlmZG7 pTXRwPUqON5DRIJsneDeGGEFuZegdXeijb9GyGv7KyFk9NPYATNUsYE5gruRr5FQrsqm TfasFiZ60xfcfHvxcgyiHBPrW8yYUXBtnpfsqZF2r9Mnkee1wsukpkZ6mZ5GtBAb1Lvv ZyiJ3zG23BOZ4IcHoLxT7EhncnJaHt7847VWjTJISKII129bf3TEyWjkXEA4RpFDOTsO Ho3A== X-Forwarded-Encrypted: i=1; AJvYcCX9/NE5vGfM7UeLOU8h1R861oE3+FQM2CUpGtJjhF/aWE1qzxJ+JcCe0kLme047HLCqJS03cq9QRUEw3AfGnbg8pcJ0kYNx3JtOVlUGScfIxES05Bc= X-Gm-Message-State: AOJu0YwXRqQXBdgoQtMPUe/LGvvhqR3HHluFHKQDFqoh4+DN26yKM3sQ u8uoRHFsHY4JrTy4SaoAb2CbhaW1HReD/GvZtiqJsQstI8vSsbQvYLP9kVF8Mg== X-Google-Smtp-Source: AGHT+IE/5kQ6TKtHDfSEvB+/QOnnvKJZiM6Cecb/gMSAqDGL3mW6t6GaY2jHKW+LGT52AD+0+q2Vrw== X-Received: by 2002:a05:600c:3d0d:b0:419:c4f:cfc0 with SMTP id bh13-20020a05600c3d0d00b004190c4fcfc0mr49974wmb.6.1713561896666; Fri, 19 Apr 2024 14:24:56 -0700 (PDT) Received: from google.com (180.232.140.34.bc.googleusercontent.com. [34.140.232.180]) by smtp.gmail.com with ESMTPSA id p17-20020a5d4591000000b0034658db39d7sm5345040wrq.8.2024.04.19.14.24.56 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 19 Apr 2024 14:24:56 -0700 (PDT) Date: Fri, 19 Apr 2024 21:24:52 +0000 From: Mostafa Saleh To: Jason Gunthorpe Cc: iommu@lists.linux.dev, Joerg Roedel , linux-arm-kernel@lists.infradead.org, Robin Murphy , Will Deacon , Eric Auger , Moritz Fischer , Moritz Fischer , Michael Shavit , Nicolin Chen , patches@lists.linux.dev, Shameerali Kolothum Thodi Subject: Re: [PATCH v7 9/9] iommu/arm-smmu-v3: Add unit tests for arm_smmu_write_entry Message-ID: References: <0-v7-cb149db3a320+3b5-smmuv3_newapi_p2_jgg@nvidia.com> <9-v7-cb149db3a320+3b5-smmuv3_newapi_p2_jgg@nvidia.com> MIME-Version: 1.0 Content-Disposition: inline In-Reply-To: <9-v7-cb149db3a320+3b5-smmuv3_newapi_p2_jgg@nvidia.com> X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20240419_142459_859527_4EA526BF X-CRM114-Status: GOOD ( 38.90 ) X-BeenThere: linux-arm-kernel@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-arm-kernel" Errors-To: linux-arm-kernel-bounces+linux-arm-kernel=archiver.kernel.org@lists.infradead.org SGkgSmFzb24sCgpJIGFtIHN0aWxsIHJldmlld2luZyB0aGUgcGF0Y2gsIGhvd2V2ZXIgMiBxdWlj ayBub3Rlcy4KCk9uIFR1ZSwgQXByIDE2LCAyMDI0IGF0IDA0OjI4OjIwUE0gLTAzMDAsIEphc29u IEd1bnRob3JwZSB3cm90ZToKPiBBZGQgdGVzdHMgZm9yIHNvbWUgb2YgdGhlIG1vcmUgY29tbW9u IFNURSB1cGRhdGUgb3BlcmF0aW9ucyB0aGF0IHdlIGV4cGVjdAo+IHRvIHNlZSwgYXMgd2VsbCBh cyBzb21lIGFydGlmaWNpYWwgU1RFIHVwZGF0ZXMgdG8gdGVzdCB0aGUgZWRnZXMgb2YKPiBhcm1f c21tdV93cml0ZV9lbnRyeS4gVGhlc2UgYWxzbyBzZXJ2ZSBhcyBhIHJlY29yZCBvZiB3aGljaCBj b21tb24KPiBvcGVyYXRpb24gaXMgZXhwZWN0ZWQgdG8gYmUgaGl0bGVzcywgYW5kIGhvdyBtYW55 IHN5bmNzIHRoZXkgcmVxdWlyZS4KPiAKPiBhcm1fc21tdV93cml0ZV9lbnRyeSBpbXBsZW1lbnRz IGEgZ2VuZXJpYyBhbGdvcml0aG0gdGhhdCB1cGRhdGVzIGFuIFNURS9DRAo+IHRvIGFueSBvdGhl ciBhYnJpdHJhcnkgU1RFL0NEIGNvbmZpZ3VyYXRpb24uIFRoZSB1cGRhdGUgcmVxdWlyZXMgYQo+ IHNlcXVlbmNlIG9mIHdyaXRlK3N5bmMgb3BlcmF0aW9ucyB3aXRoIHNvbWUgaW52YXJpYW50cyB0 aGF0IG11c3QgYmUgaGVsZAo+IHRydWUgYWZ0ZXIgZWFjaCBzeW5jLiBhcm1fc21tdV93cml0ZV9l bnRyeSBsZW5kcyBpdHNlbGYgd2VsbCB0bwo+IHVuaXQtdGVzdGluZyBzaW5jZSB0aGUgZnVuY3Rp b24ncyBpbnRlcmFjdGlvbiB3aXRoIHRoZSBTVEUvQ0QgaXMgYWxyZWFkeQo+IGFic3RyYWN0ZWQg YnkgaW5wdXQgY2FsbGJhY2tzIHRoYXQgd2UgY2FuIGhvb2sgdG8gaW50cm9zcGVjdCBpbnRvIHRo ZQo+IHNlcXVlbmNlIG9mIG9wZXJhdGlvbnMuIFdlIGNhbiB1c2UgdGhlc2UgaG9va3MgdG8gZ3Vh cmFudGVlIHRoYXQKPiBpbnZhcmlhbnRzIGFyZSBoZWxkIHRocm91Z2hvdXQgdGhlIGVudGlyZSB1 cGRhdGUgb3BlcmF0aW9uLgo+IAo+IExpbms6IGh0dHBzOi8vbG9yZS5rZXJuZWwub3JnL3IvMjAy NDAxMDYwODM2MTcuMTE3Mzg3MS0zLW1zaGF2aXRAZ29vZ2xlLmNvbQo+IFNpZ25lZC1vZmYtYnk6 IE1pY2hhZWwgU2hhdml0IDxtc2hhdml0QGdvb2dsZS5jb20+Cj4gU2lnbmVkLW9mZi1ieTogSmFz b24gR3VudGhvcnBlIDxqZ2dAbnZpZGlhLmNvbT4KPiAtLS0KPiAgZHJpdmVycy9pb21tdS9LY29u ZmlnICAgICAgICAgICAgICAgICAgICAgICAgIHwgIDEyICstCj4gIGRyaXZlcnMvaW9tbXUvYXJt L2FybS1zbW11LXYzL01ha2VmaWxlICAgICAgICB8ICAgMiArCj4gIC4uLi9pb21tdS9hcm0vYXJt LXNtbXUtdjMvYXJtLXNtbXUtdjMtc3ZhLmMgICB8ICAgNiArLQo+ICAuLi4vaW9tbXUvYXJtL2Fy bS1zbW11LXYzL2FybS1zbW11LXYzLXRlc3QuYyAgfCA0NjcgKysrKysrKysrKysrKysrKysrCj4g IGRyaXZlcnMvaW9tbXUvYXJtL2FybS1zbW11LXYzL2FybS1zbW11LXYzLmMgICB8ICAzNiArLQo+ ICBkcml2ZXJzL2lvbW11L2FybS9hcm0tc21tdS12My9hcm0tc21tdS12My5oICAgfCAgMzAgKysK PiAgNiBmaWxlcyBjaGFuZ2VkLCA1MjUgaW5zZXJ0aW9ucygrKSwgMjggZGVsZXRpb25zKC0pCj4g IGNyZWF0ZSBtb2RlIDEwMDY0NCBkcml2ZXJzL2lvbW11L2FybS9hcm0tc21tdS12My9hcm0tc21t dS12My10ZXN0LmMKPiAKPiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9pb21tdS9LY29uZmlnIGIvZHJp dmVycy9pb21tdS9LY29uZmlnCj4gaW5kZXggMGFmMzliYmJlM2EzMGUuLjJlNTk3MTAyYmFmNmU1 IDEwMDY0NAo+IC0tLSBhL2RyaXZlcnMvaW9tbXUvS2NvbmZpZwo+ICsrKyBiL2RyaXZlcnMvaW9t bXUvS2NvbmZpZwo+IEBAIC0zOTcsOSArMzk3LDkgQEAgY29uZmlnIEFSTV9TTU1VX1YzCj4gIAkg IFNheSBZIGhlcmUgaWYgeW91ciBzeXN0ZW0gaW5jbHVkZXMgYW4gSU9NTVUgZGV2aWNlIGltcGxl bWVudGluZwo+ICAJICB0aGUgQVJNIFNNTVV2MyBhcmNoaXRlY3R1cmUuCj4gIAo+ICtpZiBBUk1f U01NVV9WMwo+ICBjb25maWcgQVJNX1NNTVVfVjNfU1ZBCj4gIAlib29sICJTaGFyZWQgVmlydHVh bCBBZGRyZXNzaW5nIHN1cHBvcnQgZm9yIHRoZSBBUk0gU01NVXYzIgo+IC0JZGVwZW5kcyBvbiBB Uk1fU01NVV9WMwo+ICAJc2VsZWN0IElPTU1VX1NWQQo+ICAJc2VsZWN0IElPTU1VX0lPUEYKPiAg CXNlbGVjdCBNTVVfTk9USUZJRVIKPiBAQCAtNDEwLDYgKzQxMCwxNiBAQCBjb25maWcgQVJNX1NN TVVfVjNfU1ZBCj4gIAkgIFNheSBZIGhlcmUgaWYgeW91ciBzeXN0ZW0gc3VwcG9ydHMgU1ZBIGV4 dGVuc2lvbnMgc3VjaCBhcyBQQ0llIFBBU0lECj4gIAkgIGFuZCBQUkkuCj4gIAo+ICtjb25maWcg QVJNX1NNTVVfVjNfS1VOSVRfVEVTVAo+ICsJdHJpc3RhdGUgIktVbml0IHRlc3RzIGZvciBhcm0t c21tdS12MyBkcml2ZXIiICBpZiAhS1VOSVRfQUxMX1RFU1RTCj4gKwlkZXBlbmRzIG9uIEtVTklU Cj4gKwlkZWZhdWx0IEtVTklUX0FMTF9URVNUUwo+ICsJaGVscAo+ICsJICBFbmFibGUgdGhpcyBv cHRpb24gdG8gdW5pdC10ZXN0IGFybS1zbW11LXYzIGRyaXZlciBmdW5jdGlvbnMuCj4gKwo+ICsJ ICBJZiB1bnN1cmUsIHNheSBOLgo+ICtlbmRpZgo+ICsKPiAgY29uZmlnIFMzOTBfSU9NTVUKPiAg CWRlZl9ib29sIHkgaWYgUzM5MCAmJiBQQ0kKPiAgCWRlcGVuZHMgb24gUzM5MCAmJiBQQ0kKPiBk aWZmIC0tZ2l0IGEvZHJpdmVycy9pb21tdS9hcm0vYXJtLXNtbXUtdjMvTWFrZWZpbGUgYi9kcml2 ZXJzL2lvbW11L2FybS9hcm0tc21tdS12My9NYWtlZmlsZQo+IGluZGV4IDU0ZmViMWVjY2NhZDg5 Li4wMTRhOTk3NzUzYThhMiAxMDA2NDQKPiAtLS0gYS9kcml2ZXJzL2lvbW11L2FybS9hcm0tc21t dS12My9NYWtlZmlsZQo+ICsrKyBiL2RyaXZlcnMvaW9tbXUvYXJtL2FybS1zbW11LXYzL01ha2Vm aWxlCj4gQEAgLTMsMyArMyw1IEBAIG9iai0kKENPTkZJR19BUk1fU01NVV9WMykgKz0gYXJtX3Nt bXVfdjMubwo+ICBhcm1fc21tdV92My1vYmpzLXkgKz0gYXJtLXNtbXUtdjMubwo+ICBhcm1fc21t dV92My1vYmpzLSQoQ09ORklHX0FSTV9TTU1VX1YzX1NWQSkgKz0gYXJtLXNtbXUtdjMtc3ZhLm8K PiAgYXJtX3NtbXVfdjMtb2JqcyA6PSAkKGFybV9zbW11X3YzLW9ianMteSkKPiArCj4gK29iai0k KENPTkZJR19BUk1fU01NVV9WM19LVU5JVF9URVNUKSArPSBhcm0tc21tdS12My10ZXN0Lm8KPiBk aWZmIC0tZ2l0IGEvZHJpdmVycy9pb21tdS9hcm0vYXJtLXNtbXUtdjMvYXJtLXNtbXUtdjMtc3Zh LmMgYi9kcml2ZXJzL2lvbW11L2FybS9hcm0tc21tdS12My9hcm0tc21tdS12My1zdmEuYwo+IGlu ZGV4IDgwYTdkNTU5ZWYyZDNmLi5mNTZhMmQzODAxMmI1YyAxMDA2NDQKPiAtLS0gYS9kcml2ZXJz L2lvbW11L2FybS9hcm0tc21tdS12My9hcm0tc21tdS12My1zdmEuYwo+ICsrKyBiL2RyaXZlcnMv aW9tbXUvYXJtL2FybS1zbW11LXYzL2FybS1zbW11LXYzLXN2YS5jCj4gQEAgLTEyMCw5ICsxMjAs OSBAQCBzdGF0aWMgdTY0IHBhZ2Vfc2l6ZV90b19jZCh2b2lkKQo+ICAJcmV0dXJuIEFSTV9MUEFF X1RDUl9URzBfNEs7Cj4gIH0KPiAgCj4gLXN0YXRpYyB2b2lkIGFybV9zbW11X21ha2Vfc3ZhX2Nk KHN0cnVjdCBhcm1fc21tdV9jZCAqdGFyZ2V0LAo+IC0JCQkJIHN0cnVjdCBhcm1fc21tdV9tYXN0 ZXIgKm1hc3RlciwKPiAtCQkJCSBzdHJ1Y3QgbW1fc3RydWN0ICptbSwgdTE2IGFzaWQpCj4gK3Zv aWQgYXJtX3NtbXVfbWFrZV9zdmFfY2Qoc3RydWN0IGFybV9zbW11X2NkICp0YXJnZXQsCj4gKwkJ CSAgc3RydWN0IGFybV9zbW11X21hc3RlciAqbWFzdGVyLCBzdHJ1Y3QgbW1fc3RydWN0ICptbSwK PiArCQkJICB1MTYgYXNpZCkKPiAgewo+ICAJdTY0IHBhcjsKPiAgCj4gZGlmZiAtLWdpdCBhL2Ry aXZlcnMvaW9tbXUvYXJtL2FybS1zbW11LXYzL2FybS1zbW11LXYzLXRlc3QuYyBiL2RyaXZlcnMv aW9tbXUvYXJtL2FybS1zbW11LXYzL2FybS1zbW11LXYzLXRlc3QuYwo+IG5ldyBmaWxlIG1vZGUg MTAwNjQ0Cj4gaW5kZXggMDAwMDAwMDAwMDAwMDAuLjE0YzhlNDA3MTJhNzBlCj4gLS0tIC9kZXYv bnVsbAo+ICsrKyBiL2RyaXZlcnMvaW9tbXUvYXJtL2FybS1zbW11LXYzL2FybS1zbW11LXYzLXRl c3QuYwo+IEBAIC0wLDAgKzEsNDY3IEBACj4gKy8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBH UEwtMi4wCj4gKy8qCj4gKyAqIENvcHlyaWdodCAyMDI0IEdvb2dsZSBMTEMuCj4gKyAqLwo+ICsj aW5jbHVkZSA8a3VuaXQvdGVzdC5oPgo+ICsjaW5jbHVkZSA8bGludXgvaW8tcGd0YWJsZS5oPgo+ ICsKPiArI2luY2x1ZGUgImFybS1zbW11LXYzLmgiCj4gKwo+ICtzdHJ1Y3QgYXJtX3NtbXVfdGVz dF93cml0ZXIgewo+ICsJc3RydWN0IGFybV9zbW11X2VudHJ5X3dyaXRlciB3cml0ZXI7Cj4gKwlz dHJ1Y3Qga3VuaXQgKnRlc3Q7Cj4gKwljb25zdCBfX2xlNjQgKmluaXRfZW50cnk7Cj4gKwljb25z dCBfX2xlNjQgKnRhcmdldF9lbnRyeTsKPiArCV9fbGU2NCAqZW50cnk7Cj4gKwo+ICsJYm9vbCBp bnZhbGlkX2VudHJ5X3dyaXR0ZW47Cj4gKwl1bnNpZ25lZCBpbnQgbnVtX3N5bmNzOwo+ICt9Owo+ ICsKPiArI2RlZmluZSBOVU1fRU5UUllfUVdPUkRTIDgKPiArI2RlZmluZSBOVU1fRVhQRUNURURf U1lOQ1MoeCkgeAo+ICsKPiArc3RhdGljIHN0cnVjdCBhcm1fc21tdV9zdGUgYnlwYXNzX3N0ZTsK PiArc3RhdGljIHN0cnVjdCBhcm1fc21tdV9zdGUgYWJvcnRfc3RlOwo+ICtzdGF0aWMgc3RydWN0 IGFybV9zbW11X2RldmljZSBzbW11ID0gewo+ICsJLmZlYXR1cmVzID0gQVJNX1NNTVVfRkVBVF9T VEFMTFMgfCBBUk1fU01NVV9GRUFUX0FUVFJfVFlQRVNfT1ZSCj4gK307Cj4gKwo+ICtzdGF0aWMg Ym9vbCBhcm1fc21tdV9lbnRyeV9kaWZmZXJzX2luX3VzZWRfYml0cyhjb25zdCBfX2xlNjQgKmVu dHJ5LAo+ICsJCQkJCQljb25zdCBfX2xlNjQgKnVzZWRfYml0cywKPiArCQkJCQkJY29uc3QgX19s ZTY0ICp0YXJnZXQsCj4gKwkJCQkJCXVuc2lnbmVkIGludCBsZW5ndGgpCj4gK3sKPiArCWJvb2wg ZGlmZmVycyA9IGZhbHNlOwo+ICsJdW5zaWduZWQgaW50IGk7Cj4gKwo+ICsJZm9yIChpID0gMDsg aSA8IGxlbmd0aDsgaSsrKSB7Cj4gKwkJaWYgKChlbnRyeVtpXSAmIHVzZWRfYml0c1tpXSkgIT0g dGFyZ2V0W2ldKQo+ICsJCQlkaWZmZXJzID0gdHJ1ZTsKPiArCX0KPiArCXJldHVybiBkaWZmZXJz Owo+ICt9Cj4gKwo+ICtzdGF0aWMgdm9pZAo+ICthcm1fc21tdV90ZXN0X3dyaXRlcl9yZWNvcmRf c3luY3Moc3RydWN0IGFybV9zbW11X2VudHJ5X3dyaXRlciAqd3JpdGVyKQo+ICt7Cj4gKwlzdHJ1 Y3QgYXJtX3NtbXVfdGVzdF93cml0ZXIgKnRlc3Rfd3JpdGVyID0KPiArCQljb250YWluZXJfb2Yo d3JpdGVyLCBzdHJ1Y3QgYXJtX3NtbXVfdGVzdF93cml0ZXIsIHdyaXRlcik7Cj4gKwlfX2xlNjQg KmVudHJ5X3VzZWRfYml0czsKPiArCj4gKwllbnRyeV91c2VkX2JpdHMgPSBrdW5pdF9remFsbG9j KAo+ICsJCXRlc3Rfd3JpdGVyLT50ZXN0LCBzaXplb2YoKmVudHJ5X3VzZWRfYml0cykgKiBOVU1f RU5UUllfUVdPUkRTLAo+ICsJCUdGUF9LRVJORUwpOwo+ICsJS1VOSVRfQVNTRVJUX05PVF9OVUxM KHRlc3Rfd3JpdGVyLT50ZXN0LCBlbnRyeV91c2VkX2JpdHMpOwo+ICsKPiArCXByX2RlYnVnKCJT VEUgdmFsdWUgaXMgbm93IHNldCB0bzogIik7Cj4gKwlwcmludF9oZXhfZHVtcF9kZWJ1ZygiICAg ICIsIERVTVBfUFJFRklYX05PTkUsIDE2LCA4LAo+ICsJCQkgICAgIHRlc3Rfd3JpdGVyLT5lbnRy eSwKPiArCQkJICAgICBOVU1fRU5UUllfUVdPUkRTICogc2l6ZW9mKCp0ZXN0X3dyaXRlci0+ZW50 cnkpLAo+ICsJCQkgICAgIGZhbHNlKTsKPiArCj4gKwl0ZXN0X3dyaXRlci0+bnVtX3N5bmNzICs9 IDE7Cj4gKwlpZiAoISh0ZXN0X3dyaXRlci0+ZW50cnlbMF0gJiB3cml0ZXItPm9wcy0+dl9iaXQp KSB7Cj4gKwkJdGVzdF93cml0ZXItPmludmFsaWRfZW50cnlfd3JpdHRlbiA9IHRydWU7Cj4gKwl9 IGVsc2Ugewo+ICsJCS8qCj4gKwkJICogQXQgYW55IHN0YWdlIGluIGEgaGl0bGVzcyB0cmFuc2l0 aW9uLCB0aGUgZW50cnkgbXVzdCBiZQo+ICsJCSAqIGVxdWl2YWxlbnQgdG8gZWl0aGVyIHRoZSBp bml0aWFsIGVudHJ5IG9yIHRoZSB0YXJnZXQgZW50cnkKPiArCQkgKiB3aGVuIG9ubHkgY29uc2lk ZXJpbmcgdGhlIGJpdHMgdXNlZCBieSB0aGUgY3VycmVudAo+ICsJCSAqIGNvbmZpZ3VyYXRpb24u Cj4gKwkJICovCj4gKwkJd3JpdGVyLT5vcHMtPmdldF91c2VkKHRlc3Rfd3JpdGVyLT5lbnRyeSwg ZW50cnlfdXNlZF9iaXRzKTsKPiArCQlLVU5JVF9FWFBFQ1RfRkFMU0UoCj4gKwkJCXRlc3Rfd3Jp dGVyLT50ZXN0LAo+ICsJCQlhcm1fc21tdV9lbnRyeV9kaWZmZXJzX2luX3VzZWRfYml0cygKPiAr CQkJCXRlc3Rfd3JpdGVyLT5lbnRyeSwgZW50cnlfdXNlZF9iaXRzLAo+ICsJCQkJdGVzdF93cml0 ZXItPmluaXRfZW50cnksIE5VTV9FTlRSWV9RV09SRFMpICYmCj4gKwkJCQlhcm1fc21tdV9lbnRy eV9kaWZmZXJzX2luX3VzZWRfYml0cygKPiArCQkJCQl0ZXN0X3dyaXRlci0+ZW50cnksIGVudHJ5 X3VzZWRfYml0cywKPiArCQkJCQl0ZXN0X3dyaXRlci0+dGFyZ2V0X2VudHJ5LAo+ICsJCQkJCU5V TV9FTlRSWV9RV09SRFMpKTsKPiArCX0KPiArfQo+ICsKPiArc3RhdGljIHZvaWQKPiArYXJtX3Nt bXVfdjNfdGVzdF9kZWJ1Z19wcmludF91c2VkX2JpdHMoc3RydWN0IGFybV9zbW11X2VudHJ5X3dy aXRlciAqd3JpdGVyLAo+ICsJCQkJICAgICAgIGNvbnN0IF9fbGU2NCAqc3RlKQo+ICt7Cj4gKwlf X2xlNjQgdXNlZF9iaXRzW05VTV9FTlRSWV9RV09SRFNdID0ge307Cj4gKwo+ICsJYXJtX3NtbXVf Z2V0X3N0ZV91c2VkKHN0ZSwgdXNlZF9iaXRzKTsKPiArCXByX2RlYnVnKCJTVEUgdXNlZCBiaXRz OiAiKTsKPiArCXByaW50X2hleF9kdW1wX2RlYnVnKCIgICAgIiwgRFVNUF9QUkVGSVhfTk9ORSwg MTYsIDgsIHVzZWRfYml0cywKPiArCQkJICAgICBzaXplb2YodXNlZF9iaXRzKSwgZmFsc2UpOwo+ ICt9Cj4gKwo+ICtzdGF0aWMgY29uc3Qgc3RydWN0IGFybV9zbW11X2VudHJ5X3dyaXRlcl9vcHMg dGVzdF9zdGVfb3BzID0gewo+ICsJLnZfYml0ID0gY3B1X3RvX2xlNjQoU1RSVEFCX1NURV8wX1Yp LAo+ICsJLnN5bmMgPSBhcm1fc21tdV90ZXN0X3dyaXRlcl9yZWNvcmRfc3luY3MsCj4gKwkuZ2V0 X3VzZWQgPSBhcm1fc21tdV9nZXRfc3RlX3VzZWQsCj4gK307Cj4gKwo+ICtzdGF0aWMgY29uc3Qg c3RydWN0IGFybV9zbW11X2VudHJ5X3dyaXRlcl9vcHMgdGVzdF9jZF9vcHMgPSB7Cj4gKwkudl9i aXQgPSBjcHVfdG9fbGU2NChDVFhERVNDX0NEXzBfViksCj4gKwkuc3luYyA9IGFybV9zbW11X3Rl c3Rfd3JpdGVyX3JlY29yZF9zeW5jcywKPiArCS5nZXRfdXNlZCA9IGFybV9zbW11X2dldF9jZF91 c2VkLAo+ICt9Owo+ICsKPiArc3RhdGljIHZvaWQgYXJtX3NtbXVfdjNfdGVzdF9zdGVfZXhwZWN0 X3RyYW5zaXRpb24oCj4gKwlzdHJ1Y3Qga3VuaXQgKnRlc3QsIGNvbnN0IHN0cnVjdCBhcm1fc21t dV9zdGUgKmN1ciwKPiArCWNvbnN0IHN0cnVjdCBhcm1fc21tdV9zdGUgKnRhcmdldCwgdW5zaWdu ZWQgaW50IG51bV9zeW5jc19leHBlY3RlZCwKPiArCWJvb2wgaGl0bGVzcykKPiArewo+ICsJc3Ry dWN0IGFybV9zbW11X3N0ZSBjdXJfY29weSA9ICpjdXI7Cj4gKwlzdHJ1Y3QgYXJtX3NtbXVfdGVz dF93cml0ZXIgdGVzdF93cml0ZXIgPSB7Cj4gKwkJLndyaXRlciA9IHsKPiArCQkJLm9wcyA9ICZ0 ZXN0X3N0ZV9vcHMsCj4gKwkJfSwKPiArCQkudGVzdCA9IHRlc3QsCj4gKwkJLmluaXRfZW50cnkg PSBjdXItPmRhdGEsCj4gKwkJLnRhcmdldF9lbnRyeSA9IHRhcmdldC0+ZGF0YSwKPiArCQkuZW50 cnkgPSBjdXJfY29weS5kYXRhLAo+ICsJCS5udW1fc3luY3MgPSAwLAo+ICsJCS5pbnZhbGlkX2Vu dHJ5X3dyaXR0ZW4gPSBmYWxzZSwKPiArCj4gKwl9Owo+ICsKPiArCXByX2RlYnVnKCJTVEUgaW5p dGlhbCB2YWx1ZTogIik7Cj4gKwlwcmludF9oZXhfZHVtcF9kZWJ1ZygiICAgICIsIERVTVBfUFJF RklYX05PTkUsIDE2LCA4LCBjdXJfY29weS5kYXRhLAo+ICsJCQkgICAgIHNpemVvZihjdXJfY29w eSksIGZhbHNlKTsKPiArCWFybV9zbW11X3YzX3Rlc3RfZGVidWdfcHJpbnRfdXNlZF9iaXRzKCZ0 ZXN0X3dyaXRlci53cml0ZXIsIGN1ci0+ZGF0YSk7Cj4gKwlwcl9kZWJ1ZygiU1RFIHRhcmdldCB2 YWx1ZTogIik7Cj4gKwlwcmludF9oZXhfZHVtcF9kZWJ1ZygiICAgICIsIERVTVBfUFJFRklYX05P TkUsIDE2LCA4LCB0YXJnZXQtPmRhdGEsCj4gKwkJCSAgICAgc2l6ZW9mKGN1cl9jb3B5KSwgZmFs c2UpOwo+ICsJYXJtX3NtbXVfdjNfdGVzdF9kZWJ1Z19wcmludF91c2VkX2JpdHMoJnRlc3Rfd3Jp dGVyLndyaXRlciwKPiArCQkJCQkgICAgICAgdGFyZ2V0LT5kYXRhKTsKPiArCj4gKwlhcm1fc21t dV93cml0ZV9lbnRyeSgmdGVzdF93cml0ZXIud3JpdGVyLCBjdXJfY29weS5kYXRhLCB0YXJnZXQt PmRhdGEpOwo+ICsKPiArCUtVTklUX0VYUEVDVF9FUSh0ZXN0LCB0ZXN0X3dyaXRlci5pbnZhbGlk X2VudHJ5X3dyaXR0ZW4sICFoaXRsZXNzKTsKPiArCUtVTklUX0VYUEVDVF9FUSh0ZXN0LCB0ZXN0 X3dyaXRlci5udW1fc3luY3MsIG51bV9zeW5jc19leHBlY3RlZCk7Cj4gKwlLVU5JVF9FWFBFQ1Rf TUVNRVEodGVzdCwgdGFyZ2V0LT5kYXRhLCBjdXJfY29weS5kYXRhLCBzaXplb2YoY3VyX2NvcHkp KTsKPiArfQo+ICsKPiArc3RhdGljIHZvaWQgYXJtX3NtbXVfdjNfdGVzdF9zdGVfZXhwZWN0X2hp dGxlc3NfdHJhbnNpdGlvbigKPiArCXN0cnVjdCBrdW5pdCAqdGVzdCwgY29uc3Qgc3RydWN0IGFy bV9zbW11X3N0ZSAqY3VyLAo+ICsJY29uc3Qgc3RydWN0IGFybV9zbW11X3N0ZSAqdGFyZ2V0LCB1 bnNpZ25lZCBpbnQgbnVtX3N5bmNzX2V4cGVjdGVkKQo+ICt7Cj4gKwlhcm1fc21tdV92M190ZXN0 X3N0ZV9leHBlY3RfdHJhbnNpdGlvbih0ZXN0LCBjdXIsIHRhcmdldCwKPiArCQkJCQkgICAgICAg bnVtX3N5bmNzX2V4cGVjdGVkLCB0cnVlKTsKPiArfQo+ICsKPiArc3RhdGljIGNvbnN0IGRtYV9h ZGRyX3QgZmFrZV9jZHRhYl9kbWFfYWRkciA9IDB4RjBGMEYwRjBGMEYwOwo+ICsKPiArc3RhdGlj IHZvaWQgYXJtX3NtbXVfdGVzdF9tYWtlX2NkdGFibGVfc3RlKHN0cnVjdCBhcm1fc21tdV9zdGUg KnN0ZSwKPiArCQkJCQkgICBjb25zdCBkbWFfYWRkcl90IGRtYV9hZGRyKQo+ICt7Cj4gKwlzdHJ1 Y3QgYXJtX3NtbXVfbWFzdGVyIG1hc3RlciA9IHsKPiArCQkuY2RfdGFibGUuY2R0YWJfZG1hID0g ZG1hX2FkZHIsCj4gKwkJLmNkX3RhYmxlLnMxY2RtYXggPSAweEZGLAo+ICsJCS5jZF90YWJsZS5z MWZtdCA9IFNUUlRBQl9TVEVfMF9TMUZNVF82NEtfTDIsCj4gKwkJLnNtbXUgPSAmc21tdSwKPiAr CX07Cj4gKwo+ICsJYXJtX3NtbXVfbWFrZV9jZHRhYmxlX3N0ZShzdGUsICZtYXN0ZXIpOwo+ICt9 Cj4gKwo+ICtzdGF0aWMgdm9pZCBhcm1fc21tdV92M193cml0ZV9zdGVfdGVzdF9ieXBhc3NfdG9f YWJvcnQoc3RydWN0IGt1bml0ICp0ZXN0KQo+ICt7Cj4gKwkvKgo+ICsJICogQnlwYXNzIFNURXMg aGFzIHVzZWQgYml0cyBpbiB0aGUgZmlyc3QgdHdvIFF3b3Jkcywgd2hpbGUgYWJvcnQgU1RFcwo+ ICsJICogb25seSBoYXZlIHVzZWQgYml0cyBpbiB0aGUgZmlyc3QgUVdvcmQuIFRyYW5zaXRpb25p bmcgZnJvbSBieXBhc3MgdG8KPiArCSAqIGFib3J0IHJlcXVpcmVzIHR3byBzeW5jczogdGhlIGZp cnN0IHRvIHNldCB0aGUgZmlyc3QgcXdvcmQgYW5kIG1ha2UKPiArCSAqIHRoZSBTVEUgaW50byBh biBhYm9ydCwgdGhlIHNlY29uZCB0byBjbGVhbiB1cCB0aGUgc2Vjb25kIHF3b3JkLgo+ICsJICov Cj4gKwlhcm1fc21tdV92M190ZXN0X3N0ZV9leHBlY3RfaGl0bGVzc190cmFuc2l0aW9uKAo+ICsJ CXRlc3QsICZieXBhc3Nfc3RlLCAmYWJvcnRfc3RlLCBOVU1fRVhQRUNURURfU1lOQ1MoMikpOwo+ ICt9Cj4gKwo+ICtzdGF0aWMgdm9pZCBhcm1fc21tdV92M193cml0ZV9zdGVfdGVzdF9hYm9ydF90 b19ieXBhc3Moc3RydWN0IGt1bml0ICp0ZXN0KQo+ICt7Cj4gKwkvKgo+ICsJICogVHJhbnNpdGlv bmluZyBmcm9tIGFib3J0IHRvIGJ5cGFzcyBhbHNvIHJlcXVpcmVzIHR3byBzeW5jczogdGhlIGZp cnN0Cj4gKwkgKiB0byBzZXQgdGhlIHNlY29uZCBxd29yZCBkYXRhIHJlcXVpcmVkIGJ5IHRoZSBi eXBhc3MgU1RFLCBhbmQgdGhlCj4gKwkgKiBzZWNvbmQgdG8gc2V0IHRoZSBmaXJzdCBxd29yZCBh bmQgc3dpdGNoIHRvIGJ5cGFzcy4KPiArCSAqLwo+ICsJYXJtX3NtbXVfdjNfdGVzdF9zdGVfZXhw ZWN0X2hpdGxlc3NfdHJhbnNpdGlvbigKPiArCQl0ZXN0LCAmYWJvcnRfc3RlLCAmYnlwYXNzX3N0 ZSwgTlVNX0VYUEVDVEVEX1NZTkNTKDIpKTsKPiArfQo+ICsKPiArc3RhdGljIHZvaWQgYXJtX3Nt bXVfdjNfd3JpdGVfc3RlX3Rlc3RfY2R0YWJsZV90b19hYm9ydChzdHJ1Y3Qga3VuaXQgKnRlc3Qp Cj4gK3sKPiArCXN0cnVjdCBhcm1fc21tdV9zdGUgc3RlOwo+ICsKPiArCWFybV9zbW11X3Rlc3Rf bWFrZV9jZHRhYmxlX3N0ZSgmc3RlLCBmYWtlX2NkdGFiX2RtYV9hZGRyKTsKPiArCWFybV9zbW11 X3YzX3Rlc3Rfc3RlX2V4cGVjdF9oaXRsZXNzX3RyYW5zaXRpb24odGVzdCwgJnN0ZSwgJmFib3J0 X3N0ZSwKPiArCQkJCQkJICAgICAgIE5VTV9FWFBFQ1RFRF9TWU5DUygyKSk7Cj4gK30KPiArCj4g K3N0YXRpYyB2b2lkIGFybV9zbW11X3YzX3dyaXRlX3N0ZV90ZXN0X2Fib3J0X3RvX2NkdGFibGUo c3RydWN0IGt1bml0ICp0ZXN0KQo+ICt7Cj4gKwlzdHJ1Y3QgYXJtX3NtbXVfc3RlIHN0ZTsKPiAr Cj4gKwlhcm1fc21tdV90ZXN0X21ha2VfY2R0YWJsZV9zdGUoJnN0ZSwgZmFrZV9jZHRhYl9kbWFf YWRkcik7Cj4gKwlhcm1fc21tdV92M190ZXN0X3N0ZV9leHBlY3RfaGl0bGVzc190cmFuc2l0aW9u KHRlc3QsICZhYm9ydF9zdGUsICZzdGUsCj4gKwkJCQkJCSAgICAgICBOVU1fRVhQRUNURURfU1lO Q1MoMikpOwo+ICt9Cj4gKwo+ICtzdGF0aWMgdm9pZCBhcm1fc21tdV92M193cml0ZV9zdGVfdGVz dF9jZHRhYmxlX3RvX2J5cGFzcyhzdHJ1Y3Qga3VuaXQgKnRlc3QpCj4gK3sKPiArCXN0cnVjdCBh cm1fc21tdV9zdGUgc3RlOwo+ICsKPiArCWFybV9zbW11X3Rlc3RfbWFrZV9jZHRhYmxlX3N0ZSgm c3RlLCBmYWtlX2NkdGFiX2RtYV9hZGRyKTsKPiArCWFybV9zbW11X3YzX3Rlc3Rfc3RlX2V4cGVj dF9oaXRsZXNzX3RyYW5zaXRpb24odGVzdCwgJnN0ZSwgJmJ5cGFzc19zdGUsCj4gKwkJCQkJCSAg ICAgICBOVU1fRVhQRUNURURfU1lOQ1MoMykpOwo+ICt9Cj4gKwo+ICtzdGF0aWMgdm9pZCBhcm1f c21tdV92M193cml0ZV9zdGVfdGVzdF9ieXBhc3NfdG9fY2R0YWJsZShzdHJ1Y3Qga3VuaXQgKnRl c3QpCj4gK3sKPiArCXN0cnVjdCBhcm1fc21tdV9zdGUgc3RlOwo+ICsKPiArCWFybV9zbW11X3Rl c3RfbWFrZV9jZHRhYmxlX3N0ZSgmc3RlLCBmYWtlX2NkdGFiX2RtYV9hZGRyKTsKPiArCWFybV9z bW11X3YzX3Rlc3Rfc3RlX2V4cGVjdF9oaXRsZXNzX3RyYW5zaXRpb24odGVzdCwgJmJ5cGFzc19z dGUsICZzdGUsCj4gKwkJCQkJCSAgICAgICBOVU1fRVhQRUNURURfU1lOQ1MoMykpOwo+ICt9Cj4g Kwo+ICtzdGF0aWMgdm9pZCBhcm1fc21tdV90ZXN0X21ha2VfczJfc3RlKHN0cnVjdCBhcm1fc21t dV9zdGUgKnN0ZSwKPiArCQkJCSAgICAgIGJvb2wgYXRzX2VuYWJsZWQpCj4gK3sKPiArCXN0cnVj dCBhcm1fc21tdV9tYXN0ZXIgbWFzdGVyID0gewo+ICsJCS5zbW11ID0gJnNtbXUsCj4gKwkJLmF0 c19lbmFibGVkID0gYXRzX2VuYWJsZWQsCj4gKwl9Owo+ICsJc3RydWN0IGlvX3BndGFibGUgaW9f cGd0YWJsZSA9IHt9Owo+ICsJc3RydWN0IGFybV9zbW11X2RvbWFpbiBzbW11X2RvbWFpbiA9IHsK PiArCQkucGd0Ymxfb3BzID0gJmlvX3BndGFibGUub3BzLAo+ICsJfTsKPiArCj4gKwlpb19wZ3Rh YmxlLmNmZy5hcm1fbHBhZV9zMl9jZmcudnR0YnIgPSAweGRhZWRiZWVmZGVhZGJlZWZVTEw7Cj4g Kwlpb19wZ3RhYmxlLmNmZy5hcm1fbHBhZV9zMl9jZmcudnRjci5wcyA9IDE7Cj4gKwlpb19wZ3Rh YmxlLmNmZy5hcm1fbHBhZV9zMl9jZmcudnRjci50ZyA9IDI7Cj4gKwlpb19wZ3RhYmxlLmNmZy5h cm1fbHBhZV9zMl9jZmcudnRjci5zaCA9IDM7Cj4gKwlpb19wZ3RhYmxlLmNmZy5hcm1fbHBhZV9z Ml9jZmcudnRjci5vcmduID0gMTsKPiArCWlvX3BndGFibGUuY2ZnLmFybV9scGFlX3MyX2NmZy52 dGNyLmlyZ24gPSAyOwo+ICsJaW9fcGd0YWJsZS5jZmcuYXJtX2xwYWVfczJfY2ZnLnZ0Y3Iuc2wg PSAzOwo+ICsJaW9fcGd0YWJsZS5jZmcuYXJtX2xwYWVfczJfY2ZnLnZ0Y3IudHN6ID0gNDsKPiAr Cj4gKwlhcm1fc21tdV9tYWtlX3MyX2RvbWFpbl9zdGUoc3RlLCAmbWFzdGVyLCAmc21tdV9kb21h aW4pOwo+ICt9Cj4gKwo+ICtzdGF0aWMgdm9pZCBhcm1fc21tdV92M193cml0ZV9zdGVfdGVzdF9z Ml90b19hYm9ydChzdHJ1Y3Qga3VuaXQgKnRlc3QpCj4gK3sKPiArCXN0cnVjdCBhcm1fc21tdV9z dGUgc3RlOwo+ICsKPiArCWFybV9zbW11X3Rlc3RfbWFrZV9zMl9zdGUoJnN0ZSwgdHJ1ZSk7Cj4g Kwlhcm1fc21tdV92M190ZXN0X3N0ZV9leHBlY3RfaGl0bGVzc190cmFuc2l0aW9uKHRlc3QsICZz dGUsICZhYm9ydF9zdGUsCj4gKwkJCQkJCSAgICAgICBOVU1fRVhQRUNURURfU1lOQ1MoMikpOwo+ ICt9Cj4gKwo+ICtzdGF0aWMgdm9pZCBhcm1fc21tdV92M193cml0ZV9zdGVfdGVzdF9hYm9ydF90 b19zMihzdHJ1Y3Qga3VuaXQgKnRlc3QpCj4gK3sKPiArCXN0cnVjdCBhcm1fc21tdV9zdGUgc3Rl Owo+ICsKPiArCWFybV9zbW11X3Rlc3RfbWFrZV9zMl9zdGUoJnN0ZSwgdHJ1ZSk7Cj4gKwlhcm1f c21tdV92M190ZXN0X3N0ZV9leHBlY3RfaGl0bGVzc190cmFuc2l0aW9uKHRlc3QsICZhYm9ydF9z dGUsICZzdGUsCj4gKwkJCQkJCSAgICAgICBOVU1fRVhQRUNURURfU1lOQ1MoMikpOwo+ICt9Cj4g Kwo+ICtzdGF0aWMgdm9pZCBhcm1fc21tdV92M193cml0ZV9zdGVfdGVzdF9zMl90b19ieXBhc3Mo c3RydWN0IGt1bml0ICp0ZXN0KQo+ICt7Cj4gKwlzdHJ1Y3QgYXJtX3NtbXVfc3RlIHN0ZTsKPiAr Cj4gKwlhcm1fc21tdV90ZXN0X21ha2VfczJfc3RlKCZzdGUsIHRydWUpOwo+ICsJYXJtX3NtbXVf djNfdGVzdF9zdGVfZXhwZWN0X2hpdGxlc3NfdHJhbnNpdGlvbih0ZXN0LCAmc3RlLCAmYnlwYXNz X3N0ZSwKPiArCQkJCQkJICAgICAgIE5VTV9FWFBFQ1RFRF9TWU5DUygyKSk7Cj4gK30KPiArCj4g K3N0YXRpYyB2b2lkIGFybV9zbW11X3YzX3dyaXRlX3N0ZV90ZXN0X2J5cGFzc190b19zMihzdHJ1 Y3Qga3VuaXQgKnRlc3QpCj4gK3sKPiArCXN0cnVjdCBhcm1fc21tdV9zdGUgc3RlOwo+ICsKPiAr CWFybV9zbW11X3Rlc3RfbWFrZV9zMl9zdGUoJnN0ZSwgdHJ1ZSk7Cj4gKwlhcm1fc21tdV92M190 ZXN0X3N0ZV9leHBlY3RfaGl0bGVzc190cmFuc2l0aW9uKHRlc3QsICZieXBhc3Nfc3RlLCAmc3Rl LAo+ICsJCQkJCQkgICAgICAgTlVNX0VYUEVDVEVEX1NZTkNTKDIpKTsKPiArfQo+ICsKPiArc3Rh dGljIHZvaWQgYXJtX3NtbXVfdjNfdGVzdF9jZF9leHBlY3RfdHJhbnNpdGlvbigKPiArCXN0cnVj dCBrdW5pdCAqdGVzdCwgY29uc3Qgc3RydWN0IGFybV9zbW11X2NkICpjdXIsCj4gKwljb25zdCBz dHJ1Y3QgYXJtX3NtbXVfY2QgKnRhcmdldCwgdW5zaWduZWQgaW50IG51bV9zeW5jc19leHBlY3Rl ZCwKPiArCWJvb2wgaGl0bGVzcykKPiArewo+ICsJc3RydWN0IGFybV9zbW11X2NkIGN1cl9jb3B5 ID0gKmN1cjsKPiArCXN0cnVjdCBhcm1fc21tdV90ZXN0X3dyaXRlciB0ZXN0X3dyaXRlciA9IHsK PiArCQkud3JpdGVyID0gewo+ICsJCQkub3BzID0gJnRlc3RfY2Rfb3BzLAo+ICsJCX0sCj4gKwkJ LnRlc3QgPSB0ZXN0LAo+ICsJCS5pbml0X2VudHJ5ID0gY3VyLT5kYXRhLAo+ICsJCS50YXJnZXRf ZW50cnkgPSB0YXJnZXQtPmRhdGEsCj4gKwkJLmVudHJ5ID0gY3VyX2NvcHkuZGF0YSwKPiArCQku bnVtX3N5bmNzID0gMCwKPiArCQkuaW52YWxpZF9lbnRyeV93cml0dGVuID0gZmFsc2UsCj4gKwo+ ICsJfTsKPiArCj4gKwlwcl9kZWJ1ZygiQ0QgaW5pdGlhbCB2YWx1ZTogIik7Cj4gKwlwcmludF9o ZXhfZHVtcF9kZWJ1ZygiICAgICIsIERVTVBfUFJFRklYX05PTkUsIDE2LCA4LCBjdXJfY29weS5k YXRhLAo+ICsJCQkgICAgIHNpemVvZihjdXJfY29weSksIGZhbHNlKTsKPiArCWFybV9zbW11X3Yz X3Rlc3RfZGVidWdfcHJpbnRfdXNlZF9iaXRzKCZ0ZXN0X3dyaXRlci53cml0ZXIsIGN1ci0+ZGF0 YSk7Cj4gKwlwcl9kZWJ1ZygiQ0QgdGFyZ2V0IHZhbHVlOiAiKTsKPiArCXByaW50X2hleF9kdW1w X2RlYnVnKCIgICAgIiwgRFVNUF9QUkVGSVhfTk9ORSwgMTYsIDgsIHRhcmdldC0+ZGF0YSwKPiAr CQkJICAgICBzaXplb2YoY3VyX2NvcHkpLCBmYWxzZSk7Cj4gKwlhcm1fc21tdV92M190ZXN0X2Rl YnVnX3ByaW50X3VzZWRfYml0cygmdGVzdF93cml0ZXIud3JpdGVyLAo+ICsJCQkJCSAgICAgICB0 YXJnZXQtPmRhdGEpOwo+ICsKPiArCWFybV9zbW11X3dyaXRlX2VudHJ5KCZ0ZXN0X3dyaXRlci53 cml0ZXIsIGN1cl9jb3B5LmRhdGEsIHRhcmdldC0+ZGF0YSk7Cj4gKwo+ICsJS1VOSVRfRVhQRUNU X0VRKHRlc3QsIHRlc3Rfd3JpdGVyLmludmFsaWRfZW50cnlfd3JpdHRlbiwgIWhpdGxlc3MpOwo+ ICsJS1VOSVRfRVhQRUNUX0VRKHRlc3QsIHRlc3Rfd3JpdGVyLm51bV9zeW5jcywgbnVtX3N5bmNz X2V4cGVjdGVkKTsKPiArCUtVTklUX0VYUEVDVF9NRU1FUSh0ZXN0LCB0YXJnZXQtPmRhdGEsIGN1 cl9jb3B5LmRhdGEsIHNpemVvZihjdXJfY29weSkpOwo+ICt9Cj4gKwo+ICtzdGF0aWMgdm9pZCBh cm1fc21tdV92M190ZXN0X2NkX2V4cGVjdF9ub25faGl0bGVzc190cmFuc2l0aW9uKAo+ICsJc3Ry dWN0IGt1bml0ICp0ZXN0LCBjb25zdCBzdHJ1Y3QgYXJtX3NtbXVfY2QgKmN1ciwKPiArCWNvbnN0 IHN0cnVjdCBhcm1fc21tdV9jZCAqdGFyZ2V0LCB1bnNpZ25lZCBpbnQgbnVtX3N5bmNzX2V4cGVj dGVkKQo+ICt7Cj4gKwlhcm1fc21tdV92M190ZXN0X2NkX2V4cGVjdF90cmFuc2l0aW9uKHRlc3Qs IGN1ciwgdGFyZ2V0LAo+ICsJCQkJCSAgICAgIG51bV9zeW5jc19leHBlY3RlZCwgZmFsc2UpOwo+ ICt9Cj4gKwo+ICtzdGF0aWMgdm9pZCBhcm1fc21tdV92M190ZXN0X2NkX2V4cGVjdF9oaXRsZXNz X3RyYW5zaXRpb24oCj4gKwlzdHJ1Y3Qga3VuaXQgKnRlc3QsIGNvbnN0IHN0cnVjdCBhcm1fc21t dV9jZCAqY3VyLAo+ICsJY29uc3Qgc3RydWN0IGFybV9zbW11X2NkICp0YXJnZXQsIHVuc2lnbmVk IGludCBudW1fc3luY3NfZXhwZWN0ZWQpCj4gK3sKPiArCWFybV9zbW11X3YzX3Rlc3RfY2RfZXhw ZWN0X3RyYW5zaXRpb24odGVzdCwgY3VyLCB0YXJnZXQsCj4gKwkJCQkJICAgICAgbnVtX3N5bmNz X2V4cGVjdGVkLCB0cnVlKTsKPiArfQo+ICsKPiArc3RhdGljIHZvaWQgYXJtX3NtbXVfdGVzdF9t YWtlX3MxX2NkKHN0cnVjdCBhcm1fc21tdV9jZCAqY2QsIHVuc2lnbmVkIGludCBhc2lkKQo+ICt7 Cj4gKwlzdHJ1Y3QgYXJtX3NtbXVfbWFzdGVyIG1hc3RlciA9IHsKPiArCQkuc21tdSA9ICZzbW11 LAo+ICsJfTsKPiArCXN0cnVjdCBpb19wZ3RhYmxlIGlvX3BndGFibGUgPSB7fTsKPiArCXN0cnVj dCBhcm1fc21tdV9kb21haW4gc21tdV9kb21haW4gPSB7Cj4gKwkJLnBndGJsX29wcyA9ICZpb19w Z3RhYmxlLm9wcywKPiArCQkuY2QgPSB7Cj4gKwkJCS5hc2lkID0gYXNpZCwKPiArCQl9LAo+ICsJ fTsKPiArCj4gKwlpb19wZ3RhYmxlLmNmZy5hcm1fbHBhZV9zMV9jZmcudHRiciA9IDB4ZGFlZGJl ZWZkZWFkYmVlZlVMTDsKPiArCWlvX3BndGFibGUuY2ZnLmFybV9scGFlX3MxX2NmZy50Y3IuaXBz ID0gMTsKPiArCWlvX3BndGFibGUuY2ZnLmFybV9scGFlX3MxX2NmZy50Y3IudGcgPSAyOwo+ICsJ aW9fcGd0YWJsZS5jZmcuYXJtX2xwYWVfczFfY2ZnLnRjci5zaCA9IDM7Cj4gKwlpb19wZ3RhYmxl LmNmZy5hcm1fbHBhZV9zMV9jZmcudGNyLm9yZ24gPSAxOwo+ICsJaW9fcGd0YWJsZS5jZmcuYXJt X2xwYWVfczFfY2ZnLnRjci5pcmduID0gMjsKPiArCWlvX3BndGFibGUuY2ZnLmFybV9scGFlX3Mx X2NmZy50Y3IudHN6ID0gNDsKPiArCWlvX3BndGFibGUuY2ZnLmFybV9scGFlX3MxX2NmZy5tYWly ID0gMHhhYmNkZWYwMTIzNDU2NzhVTEw7Cj4gKwo+ICsJYXJtX3NtbXVfbWFrZV9zMV9jZChjZCwg Jm1hc3RlciwgJnNtbXVfZG9tYWluKTsKPiArfQo+ICsKPiArc3RhdGljIHZvaWQgYXJtX3NtbXVf djNfd3JpdGVfY2RfdGVzdF9zMV9jbGVhcihzdHJ1Y3Qga3VuaXQgKnRlc3QpCj4gK3sKPiArCXN0 cnVjdCBhcm1fc21tdV9jZCBjZCA9IHt9Owo+ICsJc3RydWN0IGFybV9zbW11X2NkIGNkXzI7Cj4g Kwo+ICsJYXJtX3NtbXVfdGVzdF9tYWtlX3MxX2NkKCZjZF8yLCAxOTk3KTsKPiArCWFybV9zbW11 X3YzX3Rlc3RfY2RfZXhwZWN0X25vbl9oaXRsZXNzX3RyYW5zaXRpb24oCj4gKwkJdGVzdCwgJmNk LCAmY2RfMiwgTlVNX0VYUEVDVEVEX1NZTkNTKDIpKTsKPiArCWFybV9zbW11X3YzX3Rlc3RfY2Rf ZXhwZWN0X25vbl9oaXRsZXNzX3RyYW5zaXRpb24oCj4gKwkJdGVzdCwgJmNkXzIsICZjZCwgTlVN X0VYUEVDVEVEX1NZTkNTKDIpKTsKPiArfQo+ICsKPiArc3RhdGljIHZvaWQgYXJtX3NtbXVfdjNf d3JpdGVfY2RfdGVzdF9zMV9jaGFuZ2VfYXNpZChzdHJ1Y3Qga3VuaXQgKnRlc3QpCj4gK3sKPiAr CXN0cnVjdCBhcm1fc21tdV9jZCBjZCA9IHt9Owo+ICsJc3RydWN0IGFybV9zbW11X2NkIGNkXzI7 Cj4gKwo+ICsJYXJtX3NtbXVfdGVzdF9tYWtlX3MxX2NkKCZjZCwgNzc4KTsKPiArCWFybV9zbW11 X3Rlc3RfbWFrZV9zMV9jZCgmY2RfMiwgMTk5Nyk7Cj4gKwlhcm1fc21tdV92M190ZXN0X2NkX2V4 cGVjdF9oaXRsZXNzX3RyYW5zaXRpb24odGVzdCwgJmNkLCAmY2RfMiwKPiArCQkJCQkJICAgICAg TlVNX0VYUEVDVEVEX1NZTkNTKDEpKTsKPiArCWFybV9zbW11X3YzX3Rlc3RfY2RfZXhwZWN0X2hp dGxlc3NfdHJhbnNpdGlvbih0ZXN0LCAmY2RfMiwgJmNkLAo+ICsJCQkJCQkgICAgICBOVU1fRVhQ RUNURURfU1lOQ1MoMSkpOwo+ICt9Cj4gKwo+ICtzdGF0aWMgdm9pZCBhcm1fc21tdV90ZXN0X21h a2Vfc3ZhX2NkKHN0cnVjdCBhcm1fc21tdV9jZCAqY2QsIHVuc2lnbmVkIGludCBhc2lkKQo+ICt7 Cj4gKwlzdHJ1Y3QgYXJtX3NtbXVfbWFzdGVyIG1hc3RlciA9IHsKPiArCQkuc21tdSA9ICZzbW11 LAo+ICsJfTsKPiArCXN0cnVjdCBtbV9zdHJ1Y3QgbW0gPSB7Cj4gKwkJLnBnZCA9ICh2b2lkICop MHhkYWVkYmVlZmRlYWRiZWVmVUxMLAo+ICsJfTsKPiArCj4gKwlhcm1fc21tdV9tYWtlX3N2YV9j ZChjZCwgJm1hc3RlciwgJm1tLCBhc2lkKTsKPiArfQo+ICsKPiArc3RhdGljIHZvaWQgYXJtX3Nt bXVfdGVzdF9tYWtlX3N2YV9yZWxlYXNlX2NkKHN0cnVjdCBhcm1fc21tdV9jZCAqY2QsCj4gKwkJ CQkJICAgICAgdW5zaWduZWQgaW50IGFzaWQpCj4gK3sKPiArCXN0cnVjdCBhcm1fc21tdV9tYXN0 ZXIgbWFzdGVyID0gewo+ICsJCS5zbW11ID0gJnNtbXUsCj4gKwl9Owo+ICsKPiArCWFybV9zbW11 X21ha2Vfc3ZhX2NkKGNkLCAmbWFzdGVyLCBOVUxMLCBhc2lkKTsKPiArfQo+ICsKClRoZSB0ZXN0 IGRvZXNu4oCZdCBidWlsZCB3aXRoIFNWQSBkaXNhYmxlZCwgaXQgZmFpbHMgd2l0aDoKYWFyY2g2 NC1saW51eC1nbnUtbGQ6IFVuZXhwZWN0ZWQgR09UL1BMVCBlbnRyaWVzIGRldGVjdGVkIQphYXJj aDY0LWxpbnV4LWdudS1sZDogVW5leHBlY3RlZCBydW4tdGltZSBwcm9jZWR1cmUgbGlua2FnZXMg ZGV0ZWN0ZWQhCmFhcmNoNjQtbGludXgtZ251LWxkOiBkcml2ZXJzL2lvbW11L2FybS9hcm0tc21t dS12My9hcm0tc21tdS12My10ZXN0Lm86IGluIGZ1bmN0aW9uIGBhcm1fc21tdV90ZXN0X21ha2Vf c3ZhX3JlbGVhc2VfY2QnOgouLi4vbGludXgvZHJpdmVycy9pb21tdS9hcm0vYXJtLXNtbXUtdjMv YXJtLXNtbXUtdjMtdGVzdC5jOjQwOTooLnRleHQrMHgxN2MpOiB1bmRlZmluZWQgcmVmZXJlbmNl IHRvIGBhcm1fc21tdV9tYWtlX3N2YV9jZCcKYWFyY2g2NC1saW51eC1nbnUtbGQ6IGRyaXZlcnMv aW9tbXUvYXJtL2FybS1zbW11LXYzL2FybS1zbW11LXYzLXRlc3QubzogaW4gZnVuY3Rpb24gYGFy bV9zbW11X3Rlc3RfbWFrZV9zdmFfY2QnOgouLi4vbGludXgvZHJpdmVycy9pb21tdS9hcm0vYXJt LXNtbXUtdjMvYXJtLXNtbXUtdjMtdGVzdC5jOjM5OTooLnRleHQrMHgyMzApOiB1bmRlZmluZWQg cmVmZXJlbmNlIHRvIGBhcm1fc21tdV9tYWtlX3N2YV9jZCcKCkkgYmVsaXZlIHRoaXMgY2hlY2sg c2hvdWxkIGJlIGd1YXJkZWQgdW5kZXIgU1ZBLgoKPiArc3RhdGljIHZvaWQgYXJtX3NtbXVfdjNf d3JpdGVfY2RfdGVzdF9zdmFfY2xlYXIoc3RydWN0IGt1bml0ICp0ZXN0KQo+ICt7Cj4gKwlzdHJ1 Y3QgYXJtX3NtbXVfY2QgY2QgPSB7fTsKPiArCXN0cnVjdCBhcm1fc21tdV9jZCBjZF8yOwo+ICsK PiArCWFybV9zbW11X3Rlc3RfbWFrZV9zdmFfY2QoJmNkXzIsIDE5OTcpOwo+ICsJYXJtX3NtbXVf djNfdGVzdF9jZF9leHBlY3Rfbm9uX2hpdGxlc3NfdHJhbnNpdGlvbigKPiArCQl0ZXN0LCAmY2Qs ICZjZF8yLCBOVU1fRVhQRUNURURfU1lOQ1MoMikpOwo+ICsJYXJtX3NtbXVfdjNfdGVzdF9jZF9l eHBlY3Rfbm9uX2hpdGxlc3NfdHJhbnNpdGlvbigKPiArCQl0ZXN0LCAmY2RfMiwgJmNkLCBOVU1f RVhQRUNURURfU1lOQ1MoMikpOwo+ICt9Cj4gKwo+ICtzdGF0aWMgdm9pZCBhcm1fc21tdV92M193 cml0ZV9jZF90ZXN0X3N2YV9yZWxlYXNlKHN0cnVjdCBrdW5pdCAqdGVzdCkKPiArewo+ICsJc3Ry dWN0IGFybV9zbW11X2NkIGNkOwo+ICsJc3RydWN0IGFybV9zbW11X2NkIGNkXzI7Cj4gKwo+ICsJ YXJtX3NtbXVfdGVzdF9tYWtlX3N2YV9jZCgmY2QsIDE5OTcpOwo+ICsJYXJtX3NtbXVfdGVzdF9t YWtlX3N2YV9yZWxlYXNlX2NkKCZjZF8yLCAxOTk3KTsKPiArCWFybV9zbW11X3YzX3Rlc3RfY2Rf ZXhwZWN0X2hpdGxlc3NfdHJhbnNpdGlvbih0ZXN0LCAmY2QsICZjZF8yLAo+ICsJCQkJCQkgICAg ICBOVU1fRVhQRUNURURfU1lOQ1MoMikpOwo+ICsJYXJtX3NtbXVfdjNfdGVzdF9jZF9leHBlY3Rf aGl0bGVzc190cmFuc2l0aW9uKHRlc3QsICZjZF8yLCAmY2QsCj4gKwkJCQkJCSAgICAgIE5VTV9F WFBFQ1RFRF9TWU5DUygyKSk7Cj4gK30KPiArCj4gK3N0YXRpYyBzdHJ1Y3Qga3VuaXRfY2FzZSBh cm1fc21tdV92M190ZXN0X2Nhc2VzW10gPSB7Cj4gKwlLVU5JVF9DQVNFKGFybV9zbW11X3YzX3dy aXRlX3N0ZV90ZXN0X2J5cGFzc190b19hYm9ydCksCj4gKwlLVU5JVF9DQVNFKGFybV9zbW11X3Yz X3dyaXRlX3N0ZV90ZXN0X2Fib3J0X3RvX2J5cGFzcyksCj4gKwlLVU5JVF9DQVNFKGFybV9zbW11 X3YzX3dyaXRlX3N0ZV90ZXN0X2NkdGFibGVfdG9fYWJvcnQpLAo+ICsJS1VOSVRfQ0FTRShhcm1f c21tdV92M193cml0ZV9zdGVfdGVzdF9hYm9ydF90b19jZHRhYmxlKSwKPiArCUtVTklUX0NBU0Uo YXJtX3NtbXVfdjNfd3JpdGVfc3RlX3Rlc3RfY2R0YWJsZV90b19ieXBhc3MpLAo+ICsJS1VOSVRf Q0FTRShhcm1fc21tdV92M193cml0ZV9zdGVfdGVzdF9ieXBhc3NfdG9fY2R0YWJsZSksCj4gKwlL VU5JVF9DQVNFKGFybV9zbW11X3YzX3dyaXRlX3N0ZV90ZXN0X3MyX3RvX2Fib3J0KSwKPiArCUtV TklUX0NBU0UoYXJtX3NtbXVfdjNfd3JpdGVfc3RlX3Rlc3RfYWJvcnRfdG9fczIpLAo+ICsJS1VO SVRfQ0FTRShhcm1fc21tdV92M193cml0ZV9zdGVfdGVzdF9zMl90b19ieXBhc3MpLAo+ICsJS1VO SVRfQ0FTRShhcm1fc21tdV92M193cml0ZV9zdGVfdGVzdF9ieXBhc3NfdG9fczIpLAo+ICsJS1VO SVRfQ0FTRShhcm1fc21tdV92M193cml0ZV9jZF90ZXN0X3MxX2NsZWFyKSwKPiArCUtVTklUX0NB U0UoYXJtX3NtbXVfdjNfd3JpdGVfY2RfdGVzdF9zMV9jaGFuZ2VfYXNpZCksCj4gKwlLVU5JVF9D QVNFKGFybV9zbW11X3YzX3dyaXRlX2NkX3Rlc3Rfc3ZhX2NsZWFyKSwKPiArCUtVTklUX0NBU0Uo YXJtX3NtbXVfdjNfd3JpdGVfY2RfdGVzdF9zdmFfcmVsZWFzZSksCj4gKwl7fSwKPiArfTsKPiAr Cj4gK3N0YXRpYyBpbnQgYXJtX3NtbXVfdjNfdGVzdF9zdWl0ZV9pbml0KHN0cnVjdCBrdW5pdF9z dWl0ZSAqdGVzdCkKPiArewo+ICsJYXJtX3NtbXVfbWFrZV9ieXBhc3Nfc3RlKCZzbW11LCAmYnlw YXNzX3N0ZSk7Cj4gKwlhcm1fc21tdV9tYWtlX2Fib3J0X3N0ZSgmYWJvcnRfc3RlKTsKPiArCXJl dHVybiAwOwo+ICt9Cj4gKwo+ICtzdGF0aWMgc3RydWN0IGt1bml0X3N1aXRlIGFybV9zbW11X3Yz X3Rlc3RfbW9kdWxlID0gewo+ICsJLm5hbWUgPSAiYXJtLXNtbXUtdjMta3VuaXQtdGVzdCIsCj4g Kwkuc3VpdGVfaW5pdCA9IGFybV9zbW11X3YzX3Rlc3Rfc3VpdGVfaW5pdCwKPiArCS50ZXN0X2Nh c2VzID0gYXJtX3NtbXVfdjNfdGVzdF9jYXNlcywKPiArfTsKPiAra3VuaXRfdGVzdF9zdWl0ZXMo JmFybV9zbW11X3YzX3Rlc3RfbW9kdWxlKTsKPiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9pb21tdS9h cm0vYXJtLXNtbXUtdjMvYXJtLXNtbXUtdjMuYyBiL2RyaXZlcnMvaW9tbXUvYXJtL2FybS1zbW11 LXYzL2FybS1zbW11LXYzLmMKPiBpbmRleCA3MjQwMmY2YTdlZDRlMC4uM2ZmYWEzYjM0YjQ0YmYg MTAwNjQ0Cj4gLS0tIGEvZHJpdmVycy9pb21tdS9hcm0vYXJtLXNtbXUtdjMvYXJtLXNtbXUtdjMu Ywo+ICsrKyBiL2RyaXZlcnMvaW9tbXUvYXJtL2FybS1zbW11LXYzL2FybS1zbW11LXYzLmMKPiBA QCAtNDIsMTggKzQyLDYgQEAgZW51bSBhcm1fc21tdV9tc2lfaW5kZXggewo+ICAJQVJNX1NNTVVf TUFYX01TSVMsCj4gIH07Cj4gIAo+IC1zdHJ1Y3QgYXJtX3NtbXVfZW50cnlfd3JpdGVyX29wczsK PiAtc3RydWN0IGFybV9zbW11X2VudHJ5X3dyaXRlciB7Cj4gLQljb25zdCBzdHJ1Y3QgYXJtX3Nt bXVfZW50cnlfd3JpdGVyX29wcyAqb3BzOwo+IC0Jc3RydWN0IGFybV9zbW11X21hc3RlciAqbWFz dGVyOwo+IC19Owo+IC0KPiAtc3RydWN0IGFybV9zbW11X2VudHJ5X3dyaXRlcl9vcHMgewo+IC0J X19sZTY0IHZfYml0Owo+IC0Jdm9pZCAoKmdldF91c2VkKShjb25zdCBfX2xlNjQgKmVudHJ5LCBf X2xlNjQgKnVzZWQpOwo+IC0Jdm9pZCAoKnN5bmMpKHN0cnVjdCBhcm1fc21tdV9lbnRyeV93cml0 ZXIgKndyaXRlcik7Cj4gLX07Cj4gLQo+ICAjZGVmaW5lIE5VTV9FTlRSWV9RV09SRFMgOAo+ICBz dGF0aWNfYXNzZXJ0KHNpemVvZihzdHJ1Y3QgYXJtX3NtbXVfc3RlKSA9PSBOVU1fRU5UUllfUVdP UkRTICogc2l6ZW9mKHU2NCkpOwo+ICBzdGF0aWNfYXNzZXJ0KHNpemVvZihzdHJ1Y3QgYXJtX3Nt bXVfY2QpID09IE5VTV9FTlRSWV9RV09SRFMgKiBzaXplb2YodTY0KSk7Cj4gQEAgLTk4MCw3ICs5 NjgsNyBAQCB2b2lkIGFybV9zbW11X3RsYl9pbnZfYXNpZChzdHJ1Y3QgYXJtX3NtbXVfZGV2aWNl ICpzbW11LCB1MTYgYXNpZCkKPiAgICogd291bGQgYmUgbmljZSBpZiB0aGlzIHdhcyBjb21wbGV0 ZSBhY2NvcmRpbmcgdG8gdGhlIHNwZWMsIGJ1dCBtaW5pbWFsbHkgaXQKPiAgICogaGFzIHRvIGNh cHR1cmUgdGhlIGJpdHMgdGhpcyBkcml2ZXIgdXNlcy4KPiAgICovCj4gLXN0YXRpYyB2b2lkIGFy bV9zbW11X2dldF9zdGVfdXNlZChjb25zdCBfX2xlNjQgKmVudCwgX19sZTY0ICp1c2VkX2JpdHMp Cj4gK3ZvaWQgYXJtX3NtbXVfZ2V0X3N0ZV91c2VkKGNvbnN0IF9fbGU2NCAqZW50LCBfX2xlNjQg KnVzZWRfYml0cykKCklNTyB3ZSBzaG91bGQgbm90IGV4cG9ydCBhbGwgdGhlc2UgbG93IGxldmVs IGZ1bmN0aW9ucyB1bmNvbmRpdGlvbmFsbHkuCktVTklUIGFscmVhZHkgZGVmaW5lcyDigJxWSVNJ QkxFX0lGX0tVTklU4oCdIHdoaWNoIHNldHMgc3ltYm9scyB0byBiZSBzdGF0aWMKaWYgQ09ORklH X0tVTklUIGlzIG5vdCBlbmFibGVkLiBPciBtYXliZSBldmVuIGd1YXJkIGl0IGZvciB0aGlzIHRl c3QKbGlrZSB3aGF0IGJ0cmZzIGRvZXMgd2l0aCDigJxFWFBPUlRfRk9SX1RFU1RT4oCdCgpUaGFu a3MsCk1vc3RhZmEKCj4gIHsKPiAgCXVuc2lnbmVkIGludCBjZmcgPSBGSUVMRF9HRVQoU1RSVEFC X1NURV8wX0NGRywgbGU2NF90b19jcHUoZW50WzBdKSk7Cj4gIAo+IEBAIC0xMTAyLDggKzEwOTAs OCBAQCBzdGF0aWMgYm9vbCBlbnRyeV9zZXQoc3RydWN0IGFybV9zbW11X2VudHJ5X3dyaXRlciAq d3JpdGVyLCBfX2xlNjQgKmVudHJ5LAo+ICAgKiBWPTAgcHJvY2Vzcy4gVGhpcyByZWxpZXMgb24g dGhlIElHTk9SRUQgYmVoYXZpb3IgZGVzY3JpYmVkIGluIHRoZQo+ICAgKiBzcGVjaWZpY2F0aW9u Lgo+ICAgKi8KPiAtc3RhdGljIHZvaWQgYXJtX3NtbXVfd3JpdGVfZW50cnkoc3RydWN0IGFybV9z bW11X2VudHJ5X3dyaXRlciAqd3JpdGVyLAo+IC0JCQkJIF9fbGU2NCAqZW50cnksIGNvbnN0IF9f bGU2NCAqdGFyZ2V0KQo+ICt2b2lkIGFybV9zbW11X3dyaXRlX2VudHJ5KHN0cnVjdCBhcm1fc21t dV9lbnRyeV93cml0ZXIgKndyaXRlciwgX19sZTY0ICplbnRyeSwKPiArCQkJICBjb25zdCBfX2xl NjQgKnRhcmdldCkKPiAgewo+ICAJX19sZTY0IHVudXNlZF91cGRhdGVbTlVNX0VOVFJZX1FXT1JE U107Cj4gIAl1OCB1c2VkX3F3b3JkX2RpZmY7Cj4gQEAgLTEyNTcsNyArMTI0NSw3IEBAIHN0cnVj dCBhcm1fc21tdV9jZF93cml0ZXIgewo+ICAJdW5zaWduZWQgaW50IHNzaWQ7Cj4gIH07Cj4gIAo+ IC1zdGF0aWMgdm9pZCBhcm1fc21tdV9nZXRfY2RfdXNlZChjb25zdCBfX2xlNjQgKmVudCwgX19s ZTY0ICp1c2VkX2JpdHMpCj4gK3ZvaWQgYXJtX3NtbXVfZ2V0X2NkX3VzZWQoY29uc3QgX19sZTY0 ICplbnQsIF9fbGU2NCAqdXNlZF9iaXRzKQo+ICB7Cj4gIAl1c2VkX2JpdHNbMF0gPSBjcHVfdG9f bGU2NChDVFhERVNDX0NEXzBfVik7Cj4gIAlpZiAoIShlbnRbMF0gJiBjcHVfdG9fbGU2NChDVFhE RVNDX0NEXzBfVikpKQo+IEBAIC0xNTE0LDcgKzE1MDIsNyBAQCBzdGF0aWMgdm9pZCBhcm1fc21t dV93cml0ZV9zdGUoc3RydWN0IGFybV9zbW11X21hc3RlciAqbWFzdGVyLCB1MzIgc2lkLAo+ICAJ fQo+ICB9Cj4gIAo+IC1zdGF0aWMgdm9pZCBhcm1fc21tdV9tYWtlX2Fib3J0X3N0ZShzdHJ1Y3Qg YXJtX3NtbXVfc3RlICp0YXJnZXQpCj4gK3ZvaWQgYXJtX3NtbXVfbWFrZV9hYm9ydF9zdGUoc3Ry dWN0IGFybV9zbW11X3N0ZSAqdGFyZ2V0KQo+ICB7Cj4gIAltZW1zZXQodGFyZ2V0LCAwLCBzaXpl b2YoKnRhcmdldCkpOwo+ICAJdGFyZ2V0LT5kYXRhWzBdID0gY3B1X3RvX2xlNjQoCj4gQEAgLTE1 MjIsOCArMTUxMCw4IEBAIHN0YXRpYyB2b2lkIGFybV9zbW11X21ha2VfYWJvcnRfc3RlKHN0cnVj dCBhcm1fc21tdV9zdGUgKnRhcmdldCkKPiAgCQlGSUVMRF9QUkVQKFNUUlRBQl9TVEVfMF9DRkcs IFNUUlRBQl9TVEVfMF9DRkdfQUJPUlQpKTsKPiAgfQo+ICAKPiAtc3RhdGljIHZvaWQgYXJtX3Nt bXVfbWFrZV9ieXBhc3Nfc3RlKHN0cnVjdCBhcm1fc21tdV9kZXZpY2UgKnNtbXUsCj4gLQkJCQkg ICAgIHN0cnVjdCBhcm1fc21tdV9zdGUgKnRhcmdldCkKPiArdm9pZCBhcm1fc21tdV9tYWtlX2J5 cGFzc19zdGUoc3RydWN0IGFybV9zbW11X2RldmljZSAqc21tdSwKPiArCQkJICAgICAgc3RydWN0 IGFybV9zbW11X3N0ZSAqdGFyZ2V0KQo+ICB7Cj4gIAltZW1zZXQodGFyZ2V0LCAwLCBzaXplb2Yo KnRhcmdldCkpOwo+ICAJdGFyZ2V0LT5kYXRhWzBdID0gY3B1X3RvX2xlNjQoCj4gQEAgLTE1MzUs OCArMTUyMyw4IEBAIHN0YXRpYyB2b2lkIGFybV9zbW11X21ha2VfYnlwYXNzX3N0ZShzdHJ1Y3Qg YXJtX3NtbXVfZGV2aWNlICpzbW11LAo+ICAJCQkJCQkJIFNUUlRBQl9TVEVfMV9TSENGR19JTkNP TUlORykpOwo+ICB9Cj4gIAo+IC1zdGF0aWMgdm9pZCBhcm1fc21tdV9tYWtlX2NkdGFibGVfc3Rl KHN0cnVjdCBhcm1fc21tdV9zdGUgKnRhcmdldCwKPiAtCQkJCSAgICAgIHN0cnVjdCBhcm1fc21t dV9tYXN0ZXIgKm1hc3RlcikKPiArdm9pZCBhcm1fc21tdV9tYWtlX2NkdGFibGVfc3RlKHN0cnVj dCBhcm1fc21tdV9zdGUgKnRhcmdldCwKPiArCQkJICAgICAgIHN0cnVjdCBhcm1fc21tdV9tYXN0 ZXIgKm1hc3RlcikKPiAgewo+ICAJc3RydWN0IGFybV9zbW11X2N0eF9kZXNjX2NmZyAqY2RfdGFi bGUgPSAmbWFzdGVyLT5jZF90YWJsZTsKPiAgCXN0cnVjdCBhcm1fc21tdV9kZXZpY2UgKnNtbXUg PSBtYXN0ZXItPnNtbXU7Cj4gQEAgLTE1ODUsOSArMTU3Myw5IEBAIHN0YXRpYyB2b2lkIGFybV9z bW11X21ha2VfY2R0YWJsZV9zdGUoc3RydWN0IGFybV9zbW11X3N0ZSAqdGFyZ2V0LAo+ICAJfQo+ ICB9Cj4gIAo+IC1zdGF0aWMgdm9pZCBhcm1fc21tdV9tYWtlX3MyX2RvbWFpbl9zdGUoc3RydWN0 IGFybV9zbW11X3N0ZSAqdGFyZ2V0LAo+IC0JCQkJCXN0cnVjdCBhcm1fc21tdV9tYXN0ZXIgKm1h c3RlciwKPiAtCQkJCQlzdHJ1Y3QgYXJtX3NtbXVfZG9tYWluICpzbW11X2RvbWFpbikKPiArdm9p ZCBhcm1fc21tdV9tYWtlX3MyX2RvbWFpbl9zdGUoc3RydWN0IGFybV9zbW11X3N0ZSAqdGFyZ2V0 LAo+ICsJCQkJIHN0cnVjdCBhcm1fc21tdV9tYXN0ZXIgKm1hc3RlciwKPiArCQkJCSBzdHJ1Y3Qg YXJtX3NtbXVfZG9tYWluICpzbW11X2RvbWFpbikKPiAgewo+ICAJc3RydWN0IGFybV9zbW11X3My X2NmZyAqczJfY2ZnID0gJnNtbXVfZG9tYWluLT5zMl9jZmc7Cj4gIAljb25zdCBzdHJ1Y3QgaW9f cGd0YWJsZV9jZmcgKnBndGJsX2NmZyA9Cj4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvaW9tbXUvYXJt L2FybS1zbW11LXYzL2FybS1zbW11LXYzLmggYi9kcml2ZXJzL2lvbW11L2FybS9hcm0tc21tdS12 My9hcm0tc21tdS12My5oCj4gaW5kZXggOGY3OTFmNjdmOWY3ZjQuLjA0NTU0OThkMjRjNzMwIDEw MDY0NAo+IC0tLSBhL2RyaXZlcnMvaW9tbXUvYXJtL2FybS1zbW11LXYzL2FybS1zbW11LXYzLmgK PiArKysgYi9kcml2ZXJzL2lvbW11L2FybS9hcm0tc21tdS12My9hcm0tc21tdS12My5oCj4gQEAg LTczNyw2ICs3MzcsMzYgQEAgc3RydWN0IGFybV9zbW11X2RvbWFpbiB7Cj4gIAlzdHJ1Y3QgbGlz dF9oZWFkCQltbXVfbm90aWZpZXJzOwo+ICB9Owo+ICAKPiArLyogVGhlIGZvbGxvd2luZyBhcmUg ZXhwb3NlZCBmb3IgdGVzdGluZyBwdXJwb3Nlcy4gKi8KPiArc3RydWN0IGFybV9zbW11X2VudHJ5 X3dyaXRlcl9vcHM7Cj4gK3N0cnVjdCBhcm1fc21tdV9lbnRyeV93cml0ZXIgewo+ICsJY29uc3Qg c3RydWN0IGFybV9zbW11X2VudHJ5X3dyaXRlcl9vcHMgKm9wczsKPiArCXN0cnVjdCBhcm1fc21t dV9tYXN0ZXIgKm1hc3RlcjsKPiArfTsKPiArCj4gK3N0cnVjdCBhcm1fc21tdV9lbnRyeV93cml0 ZXJfb3BzIHsKPiArCV9fbGU2NCB2X2JpdDsKPiArCXZvaWQgKCpnZXRfdXNlZCkoY29uc3QgX19s ZTY0ICplbnRyeSwgX19sZTY0ICp1c2VkKTsKPiArCXZvaWQgKCpzeW5jKShzdHJ1Y3QgYXJtX3Nt bXVfZW50cnlfd3JpdGVyICp3cml0ZXIpOwo+ICt9Owo+ICsKPiArdm9pZCBhcm1fc21tdV9nZXRf c3RlX3VzZWQoY29uc3QgX19sZTY0ICplbnQsIF9fbGU2NCAqdXNlZF9iaXRzKTsKPiArdm9pZCBh cm1fc21tdV9nZXRfY2RfdXNlZChjb25zdCBfX2xlNjQgKmVudCwgX19sZTY0ICp1c2VkX2JpdHMp Owo+ICt2b2lkIGFybV9zbW11X3dyaXRlX2VudHJ5KHN0cnVjdCBhcm1fc21tdV9lbnRyeV93cml0 ZXIgKndyaXRlciwgX19sZTY0ICpjdXIsCj4gKwkJCSAgY29uc3QgX19sZTY0ICp0YXJnZXQpOwo+ ICsKPiArdm9pZCBhcm1fc21tdV9tYWtlX2Fib3J0X3N0ZShzdHJ1Y3QgYXJtX3NtbXVfc3RlICp0 YXJnZXQpOwo+ICt2b2lkIGFybV9zbW11X21ha2VfYnlwYXNzX3N0ZShzdHJ1Y3QgYXJtX3NtbXVf ZGV2aWNlICpzbW11LAo+ICsJCQkgICAgICBzdHJ1Y3QgYXJtX3NtbXVfc3RlICp0YXJnZXQpOwo+ ICt2b2lkIGFybV9zbW11X21ha2VfY2R0YWJsZV9zdGUoc3RydWN0IGFybV9zbW11X3N0ZSAqdGFy Z2V0LAo+ICsJCQkgICAgICAgc3RydWN0IGFybV9zbW11X21hc3RlciAqbWFzdGVyKTsKPiArdm9p ZCBhcm1fc21tdV9tYWtlX3MyX2RvbWFpbl9zdGUoc3RydWN0IGFybV9zbW11X3N0ZSAqdGFyZ2V0 LAo+ICsJCQkJIHN0cnVjdCBhcm1fc21tdV9tYXN0ZXIgKm1hc3RlciwKPiArCQkJCSBzdHJ1Y3Qg YXJtX3NtbXVfZG9tYWluICpzbW11X2RvbWFpbik7Cj4gK3ZvaWQgYXJtX3NtbXVfbWFrZV9zdmFf Y2Qoc3RydWN0IGFybV9zbW11X2NkICp0YXJnZXQsCj4gKwkJCSAgc3RydWN0IGFybV9zbW11X21h c3RlciAqbWFzdGVyLCBzdHJ1Y3QgbW1fc3RydWN0ICptbSwKPiArCQkJICB1MTYgYXNpZCk7Cj4g Kwo+ICBzdGF0aWMgaW5saW5lIHN0cnVjdCBhcm1fc21tdV9kb21haW4gKnRvX3NtbXVfZG9tYWlu KHN0cnVjdCBpb21tdV9kb21haW4gKmRvbSkKPiAgewo+ICAJcmV0dXJuIGNvbnRhaW5lcl9vZihk b20sIHN0cnVjdCBhcm1fc21tdV9kb21haW4sIGRvbWFpbik7Cj4gLS0gCj4gMi40My4yCj4gCgpf X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwpsaW51eC1hcm0t a2VybmVsIG1haWxpbmcgbGlzdApsaW51eC1hcm0ta2VybmVsQGxpc3RzLmluZnJhZGVhZC5vcmcK aHR0cDovL2xpc3RzLmluZnJhZGVhZC5vcmcvbWFpbG1hbi9saXN0aW5mby9saW51eC1hcm0ta2Vy bmVsCg==