Received: by 2002:a05:6358:d09b:b0:dc:cd0c:909e with SMTP id jc27csp6170388rwb; Mon, 5 Dec 2022 08:49:43 -0800 (PST) X-Google-Smtp-Source: AA0mqf4eiuXDNfmoS5KYBnfU/eQIJbqxgdnJDxD8qmdUBHdacjtZdQt+yK4+9H2cs75ZCpsacqOB X-Received: by 2002:a17:906:b14b:b0:78d:cede:91f4 with SMTP id bt11-20020a170906b14b00b0078dcede91f4mr69842056ejb.764.1670258983255; Mon, 05 Dec 2022 08:49:43 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1670258983; cv=none; d=google.com; s=arc-20160816; b=yBImqZOBmq1PU3lHjIYrw0seSO6bSkYbq7LK38ENZB8pVrKGp/Ga1XSBxtLd4ofurp jt0L6qi99yGoMzzFs5x5k1SxxZWIHDR7CsTWUBZJNtIBRZtmwr1ACVQaCLMRP4JS3l3c XhvCjNRkAnuIGBx79kuN/XUmjKdz723BF1DGPqVJaxcR5EQr1vGOXMUVAIJbasHl6vXx BY1uqYsZZOzYlxeXJhzY0x/QQvuAkCFrIfuBBXEocL9MUgY2hXmEEll4SFyrHHmnuiw5 E9MmymeNhtU34ff50vEiPvezBkeCyyJEZuTyTNaxzH+c9QW8NfUoqJVGwc0D0QmA6ZbT 9awA== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:mime-version:user-agent :content-transfer-encoding:references:in-reply-to:date:cc:to:from :subject:message-id:dkim-signature; bh=1oYt4Oz7HKA2eNOZ+EjSseoEZ6RDlVC/9hOYD/E8fhA=; b=ErRzOeABOhtQx19sJV4wJQ2CcSNvYtb702ctvKzZU+xPDHKzzCbig1sKA4uzxTulz/ 64FXWHTvyQraQ7Grt+N6qWb9rO/b+xB+bA1Gl1JrRhLRYnoM21uKk7FBheP2mpazpx5c mv4pE3sIBW9ef1ruPI9cV/7vBr2Bj2tCN8YFSEM8nkvjX1EZVvu3mjS0NdtqnG2zDu7W lK8dR1di1T6i4Yr2VrNkKCLmMvMzWE90yGO0vMGEnCfNnBni9GnHuMQAXuwayNG7UEyt 4BuryW/SndO0bJlzmJDn1wxk+H/5KBTLwTWekmOO61sStVNXxtLlCOsI2bumoAJaVlcr xk4g== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@intel.com header.s=Intel header.b=UcONeAgf; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=intel.com Return-Path: Received: from out1.vger.email (out1.vger.email. [2620:137:e000::1:20]) by mx.google.com with ESMTP id wy1-20020a170906fe0100b007ba713e241dsi11130803ejb.894.2022.12.05.08.49.22; Mon, 05 Dec 2022 08:49:43 -0800 (PST) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) client-ip=2620:137:e000::1:20; Authentication-Results: mx.google.com; dkim=pass header.i=@intel.com header.s=Intel header.b=UcONeAgf; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=intel.com Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S232878AbiLEQe2 (ORCPT + 81 others); Mon, 5 Dec 2022 11:34:28 -0500 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:56920 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S232128AbiLEQdn (ORCPT ); Mon, 5 Dec 2022 11:33:43 -0500 Received: from mga17.intel.com (mga17.intel.com [192.55.52.151]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id AFB2D1DA50; Mon, 5 Dec 2022 08:33:27 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=intel.com; i=@intel.com; q=dns/txt; s=Intel; t=1670258007; x=1701794007; h=message-id:subject:from:to:cc:date:in-reply-to: references:content-transfer-encoding:mime-version; bh=1oYt4Oz7HKA2eNOZ+EjSseoEZ6RDlVC/9hOYD/E8fhA=; b=UcONeAgfwYpTrqicrJmk0FT73bnmsQ7vmg1Uo83jEvOxNXx2Hpv52cAr Zl87OAKHGkRZqRtM+2SfSHKHwHjs8dwoOdoprCY85WFgrBrlkSvPglgcD oAUrjAbtjkxfjoSzYodzSWgqbpj5Yppsp149FMK3+z01u0N7wcuRqJmGG PQr9bvD0OkESH4EkRlMV9NCE8S3paTqm7o3Pkd+zB3wsFHhd1Id1C5XfE LFtvlweWtCDQ50dcYAHGkZaOp4XPZTKM9mo+/3excq53fr0JbTEIWfqYm QkEBUT+RMsOjJ5i0Bcwc/T3QA9ZooA6BQtxYAO2ks8K8/XUKd6D8KJu/V g==; X-IronPort-AV: E=McAfee;i="6500,9779,10552"; a="296753203" X-IronPort-AV: E=Sophos;i="5.96,219,1665471600"; d="scan'208";a="296753203" Received: from orsmga006.jf.intel.com ([10.7.209.51]) by fmsmga107.fm.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 05 Dec 2022 08:33:09 -0800 X-IronPort-AV: E=McAfee;i="6500,9779,10552"; a="623563378" X-IronPort-AV: E=Sophos;i="5.96,219,1665471600"; d="scan'208";a="623563378" Received: from almamunm-mobl.amr.corp.intel.com (HELO [10.209.53.139]) ([10.209.53.139]) by orsmga006-auth.jf.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 05 Dec 2022 08:33:07 -0800 Message-ID: <931e48dc399eddf8ad9f9dec8783f57df776daa9.camel@linux.intel.com> Subject: Re: [PATCH v2 07/18] x86/sgx: Use a list to track to-be-reclaimed pages during reclaim From: Kristen Carlson Accardi To: Dave Hansen , jarkko@kernel.org, dave.hansen@linux.intel.com, tj@kernel.org, linux-kernel@vger.kernel.org, linux-sgx@vger.kernel.org, cgroups@vger.kernel.org, Thomas Gleixner , Ingo Molnar , Borislav Petkov , x86@kernel.org, "H. Peter Anvin" Cc: zhiquan1.li@intel.com, Sean Christopherson Date: Mon, 05 Dec 2022 08:33:06 -0800 In-Reply-To: <0646275c-0ab9-2fad-8db1-7098656d6e1d@intel.com> References: <20221202183655.3767674-1-kristen@linux.intel.com> <20221202183655.3767674-8-kristen@linux.intel.com> <0646275c-0ab9-2fad-8db1-7098656d6e1d@intel.com> Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: base64 User-Agent: Evolution 3.44.4 (3.44.4-2.fc36) MIME-Version: 1.0 X-Spam-Status: No, score=-4.3 required=5.0 tests=BAYES_00,DKIMWL_WL_HIGH, DKIM_SIGNED,DKIM_VALID,DKIM_VALID_EF,RCVD_IN_DNSWL_MED,SPF_HELO_NONE, SPF_NONE autolearn=ham autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on lindbergh.monkeyblade.net Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org T24gRnJpLCAyMDIyLTEyLTAyIGF0IDE0OjMzIC0wODAwLCBEYXZlIEhhbnNlbiB3cm90ZToKPiBP biAxMi8yLzIyIDEwOjM2LCBLcmlzdGVuIENhcmxzb24gQWNjYXJkaSB3cm90ZToKPiA+IEZyb206 IFNlYW4gQ2hyaXN0b3BoZXJzb24gPHNlYW4uai5jaHJpc3RvcGhlcnNvbkBpbnRlbC5jb20+Cj4g PiAKPiA+IENoYW5nZSBzZ3hfcmVjbGFpbV9wYWdlcygpIHRvIHVzZSBhIGxpc3QgcmF0aGVyIHRo YW4gYW4gYXJyYXkgZm9yCj4gPiBzdG9yaW5nIHRoZSBlcGNfcGFnZXMgd2hpY2ggd2lsbCBiZSBy ZWNsYWltZWQuIFRoaXMgY2hhbmdlIGlzCj4gPiBuZWVkZWQKPiA+IHRvIHRyYW5zaXRpb24gdG8g dGhlIExSVSBpbXBsZW1lbnRhdGlvbiBmb3IgRVBDIGNncm91cCBzdXBwb3J0Lgo+ID4gCj4gPiBU aGlzIGNoYW5nZSByZXF1aXJlcyBrZWVwaW5nIHRyYWNrIG9mIHdoZXRoZXIgbmV3bHkgcmVjb3Jk ZWQKPiA+IEVQQyBwYWdlcyBhcmUgcGFnZXMgZm9yIFZBIEFycmF5cywgb3IgZm9yIEVuY2xhdmUg ZGF0YS4gSW4KPiA+IGFkZGl0aW9uLAo+ID4gaGVscGVyIGZ1bmN0aW9ucyBhcmUgYWRkZWQgdG8g bW92ZSBwYWdlcyBmcm9tIG9uZSBsaXN0IHRvIGFub3RoZXIKPiA+IGFuZAo+ID4gZW5mb3JjZSBh IGNvbnNpc3RlbnQgcXVldWUgbGlrZSBiZWhhdmlvciBmb3IgdGhlIExSVSBsaXN0cy4KPiAKPiBN b3JlIGNoYW5nZWxvZyBuaXQ6IFBsZWFzZSB1c2UgaW1wZXJhdGl2ZSB2b2ljZSwgbm90IHBhc3Np dmUgdm9pY2UuCj4gTW92ZSBmcm9tOgo+IAo+IMKgwqDCoMKgwqDCoMKgwqBJbiBhZGRpdGlvbiwg aGVscGVyIGZ1bmN0aW9ucyBhcmUgYWRkZWQKPiAKPiB0bzoKPiAKPiDCoMKgwqDCoMKgwqDCoMKg SW4gYWRkaXRpb24sIGFkZCBoZWxwZXIgZnVuY3Rpb25zCj4gCj4gPiBkaWZmIC0tZ2l0IGEvYXJj aC94ODYva2VybmVsL2NwdS9zZ3gvZW5jbC5jCj4gPiBiL2FyY2gveDg2L2tlcm5lbC9jcHUvc2d4 L2VuY2wuYwo+ID4gaW5kZXggNDY4M2RhOWVmNGYxLi45ZWUzMDZhYzJhOGUgMTAwNjQ0Cj4gPiAt LS0gYS9hcmNoL3g4Ni9rZXJuZWwvY3B1L3NneC9lbmNsLmMKPiA+ICsrKyBiL2FyY2gveDg2L2tl cm5lbC9jcHUvc2d4L2VuY2wuYwo+ID4gQEAgLTI1Miw3ICsyNTIsNyBAQCBzdGF0aWMgc3RydWN0 IHNneF9lbmNsX3BhZ2UKPiA+ICpfX3NneF9lbmNsX2xvYWRfcGFnZShzdHJ1Y3Qgc2d4X2VuY2wg KmVuY2wsCj4gPiDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoGVwY19wYWdlID0gc2d4 X2VuY2xfZWxkdSgmZW5jbC0+c2VjcywgTlVMTCk7Cj4gPiDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoGlmIChJU19FUlIoZXBjX3BhZ2UpKQo+ID4gwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgcmV0dXJuIEVSUl9DQVNUKGVwY19wYWdlKTsKPiA+ IC3CoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBzZ3hfcmVjb3JkX2VwY19wYWdlKGVwY19w YWdlLCAwKTsKPiA+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBzZ3hfcmVjb3JkX2Vw Y19wYWdlKGVwY19wYWdlLAo+ID4gU0dYX0VQQ19QQUdFX0VOQ0xBVkUpOwo+ID4gwqDCoMKgwqDC oMKgwqDCoH0KPiAKPiBUaGlzIGlzIG9uZSBvZiB0aG9zZSBwYXRjaGVzIHdoZXJlIHRoZSBmaXJz dCBodW5rIHNlZW1zIGxpa2UgaXQgaXMKPiBlbnRpcmVseSBkaXNjb25uZWN0ZWQgZnJvbSB3aGF0 IHRoZSBjaGFuZ2Vsb2cgbWFkZSBtZSBleHBlY3QgSSB3b3VsZAo+IHNlZS4KPiAKPiBJIGRvbid0 IHNlZSBzZ3hfcmVjbGFpbV9wYWdlcygpLCBvciBsaXN0cyBvciBhcnJheXMuCj4gCj4gSWYgeW91 IG5lZWQgdG8gcGFzcyBhZGRpdGlvbmFsIGRhdGEgZG93biBpbnRvIGEgZnVuY3Rpb24sIHRoZW4g ZG8KPiAqdGhhdCoKPiBpbiBhIHNlcGFyYXRlIHBhdGNoLgo+IAo+IEknbSBnbGFkIGl0IGV2ZW50 dWFsbHkgZ290IGZpeGVkIHVwLCBidXQgSSBkb24ndCByZWFsbHkgZXZlciBsaWtlIHRvCj4gc2Vl Cj4gYmFyZSBpbnRlZ2VycyB0aGF0IGRvbid0IGhhdmUgb2J2aW91cyBtZWFuaW5nOgo+IAo+IMKg wqDCoMKgwqDCoMKgwqBzZ3hfcmVjb3JkX2VwY19wYWdlKGVwY19wYWdlLCAwKTsKPiAKPiBFdmVu IGlmIHlvdSBoYWQ6Cj4gCj4gI2RlZmluZSBTR1hfRVBDX1BBR0VfUkVDTEFJTUVSX1VOVFJBQ0tF RCAwCj4gCj4gwqDCoMKgwqDCoMKgwqDCoHNneF9yZWNvcmRfZXBjX3BhZ2UoZXBjX3BhZ2UsCj4g U0dYX0VQQ19QQUdFX1JFQ0xBSU1FUl9VTlRSQUNLRUQpOwo+IAo+IG1ha2VzIGEgKkxPVCogb2Yg c2Vuc2UgY29tcGFyZWQgdG8gb3RoZXIgY2FsbGVycyB0aGF0IGRvCj4gCj4gwqDCoMKgwqDCoMKg wqDCoHNneF9yZWNvcmRfZXBjX3BhZ2UoZXBjX3BhZ2UsCj4gU0dYX0VQQ19QQUdFX1JFQ0xBSU1F Ul9UUkFDS0VEKTsKPiAKPiA+IMKgwqDCoMKgwqDCoMKgwqBlcGNfcGFnZSA9IHNneF9lbmNsX2Vs ZHUoZW50cnksIGVuY2wtPnNlY3MuZXBjX3BhZ2UpOwo+ID4gQEAgLTI2MCw3ICsyNjAsOCBAQCBz dGF0aWMgc3RydWN0IHNneF9lbmNsX3BhZ2UKPiA+ICpfX3NneF9lbmNsX2xvYWRfcGFnZShzdHJ1 Y3Qgc2d4X2VuY2wgKmVuY2wsCj4gPiDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoHJl dHVybiBFUlJfQ0FTVChlcGNfcGFnZSk7Cj4gPiDCoAo+ID4gwqDCoMKgwqDCoMKgwqDCoGVuY2wt PnNlY3NfY2hpbGRfY250Kys7Cj4gPiAtwqDCoMKgwqDCoMKgwqBzZ3hfcmVjb3JkX2VwY19wYWdl KGVudHJ5LT5lcGNfcGFnZSwKPiA+IFNHWF9FUENfUEFHRV9SRUNMQUlNRVJfVFJBQ0tFRCk7Cj4g PiArwqDCoMKgwqDCoMKgwqBzZ3hfcmVjb3JkX2VwY19wYWdlKGVudHJ5LT5lcGNfcGFnZSwKPiA+ ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIChT R1hfRVBDX1BBR0VfRU5DTEFWRSB8Cj4gPiBTR1hfRVBDX1BBR0VfUkVDTEFJTUVSX1RSQUNLRUQp KTsKPiA+IMKgCj4gPiDCoMKgwqDCoMKgwqDCoMKgcmV0dXJuIGVudHJ5Owo+ID4gwqB9Cj4gPiBA QCAtMTIyMSw3ICsxMjIyLDcgQEAgc3RydWN0IHNneF9lcGNfcGFnZSAqc2d4X2FsbG9jX3ZhX3Bh Z2Uoc3RydWN0Cj4gPiBzZ3hfZW5jbCAqZW5jbCwgYm9vbCByZWNsYWltKQo+ID4gwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBzZ3hfZW5jbF9mcmVlX2VwY19wYWdlKGVwY19wYWdlKTsK PiA+IMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgcmV0dXJuIEVSUl9QVFIoLUVGQVVM VCk7Cj4gPiDCoMKgwqDCoMKgwqDCoMKgfQo+ID4gLcKgwqDCoMKgwqDCoMKgc2d4X3JlY29yZF9l cGNfcGFnZShlcGNfcGFnZSwgMCk7Cj4gPiArwqDCoMKgwqDCoMKgwqBzZ3hfcmVjb3JkX2VwY19w YWdlKGVwY19wYWdlLCBTR1hfRVBDX1BBR0VfVkVSU0lPTl9BUlJBWSk7Cj4gPiDCoAo+ID4gwqDC oMKgwqDCoMKgwqDCoHJldHVybiBlcGNfcGFnZTsKPiA+IMKgfQo+ID4gZGlmZiAtLWdpdCBhL2Fy Y2gveDg2L2tlcm5lbC9jcHUvc2d4L2lvY3RsLmMKPiA+IGIvYXJjaC94ODYva2VybmVsL2NwdS9z Z3gvaW9jdGwuYwo+ID4gaW5kZXggYWNhODBhM2YzOGExLi5jM2E5YmZmYmMzN2UgMTAwNjQ0Cj4g PiAtLS0gYS9hcmNoL3g4Ni9rZXJuZWwvY3B1L3NneC9pb2N0bC5jCj4gPiArKysgYi9hcmNoL3g4 Ni9rZXJuZWwvY3B1L3NneC9pb2N0bC5jCj4gPiBAQCAtMTE0LDcgKzExNCw3IEBAIHN0YXRpYyBp bnQgc2d4X2VuY2xfY3JlYXRlKHN0cnVjdCBzZ3hfZW5jbAo+ID4gKmVuY2wsIHN0cnVjdCBzZ3hf c2VjcyAqc2VjcykKPiA+IMKgwqDCoMKgwqDCoMKgwqBlbmNsLT5hdHRyaWJ1dGVzID0gc2Vjcy0+ YXR0cmlidXRlczsKPiA+IMKgwqDCoMKgwqDCoMKgwqBlbmNsLT5hdHRyaWJ1dGVzX21hc2sgPSBT R1hfQVRUUl9ERUJVRyB8IFNHWF9BVFRSX01PREU2NEJJVAo+ID4gfCBTR1hfQVRUUl9LU1M7Cj4g PiDCoAo+ID4gLcKgwqDCoMKgwqDCoMKgc2d4X3JlY29yZF9lcGNfcGFnZShlbmNsLT5zZWNzLmVw Y19wYWdlLCAwKTsKPiA+ICvCoMKgwqDCoMKgwqDCoHNneF9yZWNvcmRfZXBjX3BhZ2UoZW5jbC0+ c2Vjcy5lcGNfcGFnZSwKPiA+IFNHWF9FUENfUEFHRV9FTkNMQVZFKTsKPiA+IMKgCj4gPiDCoMKg wqDCoMKgwqDCoMKgLyogU2V0IG9ubHkgYWZ0ZXIgY29tcGxldGlvbiwgYXMgZW5jbC0+bG9jayBo YXMgbm90IGJlZW4KPiA+IHRha2VuLiAqLwo+ID4gwqDCoMKgwqDCoMKgwqDCoHNldF9iaXQoU0dY X0VOQ0xfQ1JFQVRFRCwgJmVuY2wtPmZsYWdzKTsKPiA+IEBAIC0zMjUsNyArMzI1LDggQEAgc3Rh dGljIGludCBzZ3hfZW5jbF9hZGRfcGFnZShzdHJ1Y3Qgc2d4X2VuY2wKPiA+ICplbmNsLCB1bnNp Z25lZCBsb25nIHNyYywKPiA+IMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoGdvdG8gZXJyX291dDsKPiA+IMKgwqDCoMKgwqDCoMKgwqB9Cj4gPiDCoAo+ID4g LcKgwqDCoMKgwqDCoMKgc2d4X3JlY29yZF9lcGNfcGFnZShlbmNsX3BhZ2UtPmVwY19wYWdlLAo+ ID4gU0dYX0VQQ19QQUdFX1JFQ0xBSU1FUl9UUkFDS0VEKTsKPiA+ICvCoMKgwqDCoMKgwqDCoHNn eF9yZWNvcmRfZXBjX3BhZ2UoZW5jbF9wYWdlLT5lcGNfcGFnZSwKPiA+ICvCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIChTR1hfRVBDX1BBR0VfRU5D TEFWRSB8Cj4gPiBTR1hfRVBDX1BBR0VfUkVDTEFJTUVSX1RSQUNLRUQpKTsKPiA+IMKgwqDCoMKg wqDCoMKgwqBtdXRleF91bmxvY2soJmVuY2wtPmxvY2spOwo+ID4gwqDCoMKgwqDCoMKgwqDCoG1t YXBfcmVhZF91bmxvY2soY3VycmVudC0+bW0pOwo+ID4gwqDCoMKgwqDCoMKgwqDCoHJldHVybiBy ZXQ7Cj4gPiBkaWZmIC0tZ2l0IGEvYXJjaC94ODYva2VybmVsL2NwdS9zZ3gvbWFpbi5jCj4gPiBi L2FyY2gveDg2L2tlcm5lbC9jcHUvc2d4L21haW4uYwo+ID4gaW5kZXggYmFkNzI0OThiMGE3Li44 M2FhZjVjZWE3YjkgMTAwNjQ0Cj4gPiAtLS0gYS9hcmNoL3g4Ni9rZXJuZWwvY3B1L3NneC9tYWlu LmMKPiA+ICsrKyBiL2FyY2gveDg2L2tlcm5lbC9jcHUvc2d4L21haW4uYwo+ID4gQEAgLTI4OCwz NyArMjg4LDQzIEBAIHN0YXRpYyB2b2lkIHNneF9yZWNsYWltZXJfd3JpdGUoc3RydWN0Cj4gPiBz Z3hfZXBjX3BhZ2UgKmVwY19wYWdlLAo+ID4gwqAgKi8KPiA+IMKgc3RhdGljIHZvaWQgX19zZ3hf cmVjbGFpbV9wYWdlcyh2b2lkKQo+ID4gwqB7Cj4gPiAtwqDCoMKgwqDCoMKgwqBzdHJ1Y3Qgc2d4 X2VwY19wYWdlICpjaHVua1tTR1hfTlJfVE9fU0NBTl07Cj4gPiDCoMKgwqDCoMKgwqDCoMKgc3Ry dWN0IHNneF9iYWNraW5nIGJhY2tpbmdbU0dYX05SX1RPX1NDQU5dOwo+ID4gK8KgwqDCoMKgwqDC oMKgc3RydWN0IHNneF9lcGNfcGFnZSAqZXBjX3BhZ2UsICp0bXA7Cj4gPiDCoMKgwqDCoMKgwqDC oMKgc3RydWN0IHNneF9lbmNsX3BhZ2UgKmVuY2xfcGFnZTsKPiA+IC3CoMKgwqDCoMKgwqDCoHN0 cnVjdCBzZ3hfZXBjX3BhZ2UgKmVwY19wYWdlOwo+ID4gwqDCoMKgwqDCoMKgwqDCoHBnb2ZmX3Qg cGFnZV9pbmRleDsKPiA+IC3CoMKgwqDCoMKgwqDCoGludCBjbnQgPSAwOwo+ID4gK8KgwqDCoMKg wqDCoMKgTElTVF9IRUFEKGlzbyk7Cj4gPiDCoMKgwqDCoMKgwqDCoMKgaW50IHJldDsKPiA+IMKg wqDCoMKgwqDCoMKgwqBpbnQgaTsKPiA+IMKgCj4gPiDCoMKgwqDCoMKgwqDCoMKgc3Bpbl9sb2Nr KCZzZ3hfZ2xvYmFsX2xydS5sb2NrKTsKPiA+IMKgwqDCoMKgwqDCoMKgwqBmb3IgKGkgPSAwOyBp IDwgU0dYX05SX1RPX1NDQU47IGkrKykgewo+ID4gLcKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoGVwY19wYWdlID0KPiA+IHNneF9lcGNfcG9wX3JlY2xhaW1hYmxlKCZzZ3hfZ2xvYmFsX2xy dSk7Cj4gPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgZXBjX3BhZ2UgPQo+ID4gc2d4 X2VwY19wZWVrX3JlY2xhaW1hYmxlKCZzZ3hfZ2xvYmFsX2xydSk7Cj4gPiDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoGlmICghZXBjX3BhZ2UpCj4gPiDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBicmVhazsKPiA+IMKgCj4gPiDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoGVuY2xfcGFnZSA9IGVwY19wYWdlLT5lbmNsX293bmVyOwo+ ID4gwqAKPiA+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBpZiAoV0FSTl9PTl9PTkNF KCEoZXBjX3BhZ2UtPmZsYWdzICYKPiA+IFNHWF9FUENfUEFHRV9FTkNMQVZFKSkpCj4gPiArwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoGNvbnRpbnVlOwo+ID4g Kwo+ID4gwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBpZiAoa3JlZl9nZXRfdW5sZXNz X3plcm8oJmVuY2xfcGFnZS0+ZW5jbC0KPiA+ID5yZWZjb3VudCkgIT0gMCkgewo+ID4gwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgZXBjX3BhZ2UtPmZsYWdz IHw9Cj4gPiBTR1hfRVBDX1BBR0VfUkVDTEFJTV9JTl9QUk9HUkVTUzsKPiA+IC3CoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgY2h1bmtbY250KytdID0gZXBjX3Bh Z2U7Cj4gPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoGxp c3RfbW92ZV90YWlsKCZlcGNfcGFnZS0+bGlzdCwgJmlzbyk7Cj4gPiDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoH0gZWxzZSB7Cj4gPiAtwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoC8qIFRoZSBvd25lciBpcyBmcmVlaW5nIHRoZSBwYWdlLiBObyBu ZWVkCj4gPiB0byBhZGQgdGhlCj4gPiAtwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoCAqIHBhZ2UgYmFjayB0byB0aGUgbGlzdCBvZiByZWNsYWltYWJsZQo+ID4g cGFnZXMuCj4gPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oC8qIFRoZSBvd25lciBpcyBmcmVlaW5nIHRoZSBwYWdlLCByZW1vdmUgaXQKPiA+IGZyb20gdGhl Cj4gPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCAqIExS VSBsaXN0Cj4gPiDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqAgKi8KPiA+IMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oGVwY19wYWdlLT5mbGFncyAmPQo+ID4gflNHWF9FUENfUEFHRV9SRUNMQUlNRVJfVFJBQ0tFRDsK PiA+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgbGlzdF9k ZWxfaW5pdCgmZXBjX3BhZ2UtPmxpc3QpOwo+ID4gwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqB9Cj4gPiDCoMKgwqDCoMKgwqDCoMKgfQo+ID4gwqDCoMKgwqDCoMKgwqDCoHNwaW5fdW5s b2NrKCZzZ3hfZ2xvYmFsX2xydS5sb2NrKTsKPiA+IMKgCj4gPiAtwqDCoMKgwqDCoMKgwqBmb3Ig KGkgPSAwOyBpIDwgY250OyBpKyspIHsKPiA+IC3CoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqBlcGNfcGFnZSA9IGNodW5rW2ldOwo+ID4gK8KgwqDCoMKgwqDCoMKgaWYgKGxpc3RfZW1wdHko JmlzbykpCj4gPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgcmV0dXJuOwo+ID4gKwo+ ID4gK8KgwqDCoMKgwqDCoMKgaSA9IDA7Cj4gPiArwqDCoMKgwqDCoMKgwqBsaXN0X2Zvcl9lYWNo X2VudHJ5X3NhZmUoZXBjX3BhZ2UsIHRtcCwgJmlzbywgbGlzdCkgewo+ID4gwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqBlbmNsX3BhZ2UgPSBlcGNfcGFnZS0+ZW5jbF9vd25lcjsKPiA+ IMKgCj4gPiDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoGlmICghc2d4X3JlY2xhaW1l cl9hZ2UoZXBjX3BhZ2UpKQo+ID4gQEAgLTMzMyw2ICszMzksNyBAQCBzdGF0aWMgdm9pZCBfX3Nn eF9yZWNsYWltX3BhZ2VzKHZvaWQpCj4gPiDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqBnb3RvIHNraXA7Cj4gPiDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoH0KPiA+IMKgCj4gPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgaSsrOwo+ ID4gwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBlbmNsX3BhZ2UtPmRlc2MgfD0gU0dY X0VOQ0xfUEFHRV9CRUlOR19SRUNMQUlNRUQ7Cj4gPiDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoG11dGV4X3VubG9jaygmZW5jbF9wYWdlLT5lbmNsLT5sb2NrKTsKPiA+IMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgY29udGludWU7Cj4gPiBAQCAtMzQwLDMxICszNDcsMjUg QEAgc3RhdGljIHZvaWQgX19zZ3hfcmVjbGFpbV9wYWdlcyh2b2lkKQo+ID4gwqBza2lwOgo+ID4g wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBzcGluX2xvY2soJnNneF9nbG9iYWxfbHJ1 LmxvY2spOwo+ID4gwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBlcGNfcGFnZS0+Zmxh Z3MgJj0KPiA+IH5TR1hfRVBDX1BBR0VfUkVDTEFJTV9JTl9QUk9HUkVTUzsKPiA+IC3CoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBzZ3hfZXBjX3B1c2hfcmVjbGFpbWFibGUoJnNneF9nbG9i YWxfbHJ1LAo+ID4gZXBjX3BhZ2UpOwo+ID4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oHNneF9lcGNfbW92ZV9yZWNsYWltYWJsZSgmc2d4X2dsb2JhbF9scnUsCj4gPiBlcGNfcGFnZSk7 Cj4gPiDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoHNwaW5fdW5sb2NrKCZzZ3hfZ2xv YmFsX2xydS5sb2NrKTsKPiA+IMKgCj4gPiDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oGtyZWZfcHV0KCZlbmNsX3BhZ2UtPmVuY2wtPnJlZmNvdW50LAo+ID4gc2d4X2VuY2xfcmVsZWFz ZSk7Cj4gPiAtCj4gPiAtwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgY2h1bmtbaV0gPSBO VUxMOwo+ID4gwqDCoMKgwqDCoMKgwqDCoH0KPiA+IMKgCj4gPiAtwqDCoMKgwqDCoMKgwqBmb3Ig KGkgPSAwOyBpIDwgY250OyBpKyspIHsKPiA+IC3CoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqBlcGNfcGFnZSA9IGNodW5rW2ldOwo+ID4gLcKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oGlmIChlcGNfcGFnZSkKPiA+IC3CoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgc2d4X3JlY2xhaW1lcl9ibG9jayhlcGNfcGFnZSk7Cj4gPiAtwqDCoMKgwqDCoMKg wqB9Cj4gPiAtCj4gPiAtwqDCoMKgwqDCoMKgwqBmb3IgKGkgPSAwOyBpIDwgY250OyBpKyspIHsK PiA+IC3CoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBlcGNfcGFnZSA9IGNodW5rW2ldOwo+ ID4gLcKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoGlmICghZXBjX3BhZ2UpCj4gPiAtwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoGNvbnRpbnVlOwo+ID4g LQo+ID4gK8KgwqDCoMKgwqDCoMKgbGlzdF9mb3JfZWFjaF9lbnRyeShlcGNfcGFnZSwgJmlzbywg bGlzdCkKPiA+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBzZ3hfcmVjbGFpbWVyX2Js b2NrKGVwY19wYWdlKTsKPiA+ICsgCj4gPiArwqDCoMKgwqDCoMKgwqBpID0gMDsKPiA+ICvCoMKg wqDCoMKgwqDCoGxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShlcGNfcGFnZSwgdG1wLCAmaXNvLCBs aXN0KSB7Cj4gPiDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoGVuY2xfcGFnZSA9IGVw Y19wYWdlLT5lbmNsX293bmVyOwo+ID4gLcKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoHNn eF9yZWNsYWltZXJfd3JpdGUoZXBjX3BhZ2UsICZiYWNraW5nW2ldKTsKPiA+ICvCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqBzZ3hfcmVjbGFpbWVyX3dyaXRlKGVwY19wYWdlLCAmYmFja2lu Z1tpKytdKTsKPiA+IMKgCj4gPiDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoGtyZWZf cHV0KCZlbmNsX3BhZ2UtPmVuY2wtPnJlZmNvdW50LAo+ID4gc2d4X2VuY2xfcmVsZWFzZSk7Cj4g PiDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoGVwY19wYWdlLT5mbGFncyAmPSB+KFNH WF9FUENfUEFHRV9SRUNMQUlNRVJfVFJBQ0tFRAo+ID4gfAo+ID4gLcKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAKPiA+ IFNHWF9FUENfUEFHRV9SRUNMQUlNX0lOX1BST0dSRVNTKTsKPiA+ICvCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgCj4g PiBTR1hfRVBDX1BBR0VfUkVDTEFJTV9JTl9QUk9HUkVTUyB8Cj4gPiArwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBT R1hfRVBDX1BBR0VfRU5DTEFWRSB8Cj4gPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBTR1hfRVBDX1BBR0VfVkVS U0lPTl9BUlJBWSk7Cj4gPiDCoAo+ID4gwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBz Z3hfZnJlZV9lcGNfcGFnZShlcGNfcGFnZSk7Cj4gPiDCoMKgwqDCoMKgwqDCoMKgfQo+ID4gQEAg LTUwNSw2ICs1MDYsNyBAQCBzdHJ1Y3Qgc2d4X2VwY19wYWdlICpfX3NneF9hbGxvY19lcGNfcGFn ZSh2b2lkKQo+ID4gwqAvKioKPiA+IMKgICogc2d4X3JlY29yZF9lcGNfcGFnZSgpIC0gQWRkIGEg cGFnZSB0byB0aGUgTFJVIHRyYWNraW5nCj4gPiDCoCAqIEBwYWdlOsKgwqDCoMKgwqDCoEVQQyBw YWdlCj4gPiArICogQGZsYWdzOsKgwqDCoMKgwqBSZWNsYWltIGZsYWdzIGZvciB0aGUgcGFnZS4K PiA+IMKgICoKPiA+IMKgICogTWFyayBhIHBhZ2Ugd2l0aCB0aGUgc3BlY2lmaWVkIGZsYWdzIGFu ZCBhZGQgaXQgdG8gdGhlCj4gPiBhcHByb3ByaWF0ZQo+ID4gwqAgKiAodW4pcmVjbGFpbWFibGUg bGlzdC4KPiA+IEBAIC01MzUsMTggKzUzNywxOSBAQCB2b2lkIHNneF9yZWNvcmRfZXBjX3BhZ2Uo c3RydWN0IHNneF9lcGNfcGFnZQo+ID4gKnBhZ2UsIHVuc2lnbmVkIGxvbmcgZmxhZ3MpCj4gPiDC oGludCBzZ3hfZHJvcF9lcGNfcGFnZShzdHJ1Y3Qgc2d4X2VwY19wYWdlICpwYWdlKQo+ID4gwqB7 Cj4gPiDCoMKgwqDCoMKgwqDCoMKgc3Bpbl9sb2NrKCZzZ3hfZ2xvYmFsX2xydS5sb2NrKTsKPiA+ IC3CoMKgwqDCoMKgwqDCoGlmIChwYWdlLT5mbGFncyAmIFNHWF9FUENfUEFHRV9SRUNMQUlNRVJf VFJBQ0tFRCkgewo+ID4gLcKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoC8qIFRoZSBwYWdl IGlzIGJlaW5nIHJlY2xhaW1lZC4gKi8KPiA+IC3CoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqBpZiAocGFnZS0+ZmxhZ3MgJiBTR1hfRVBDX1BBR0VfUkVDTEFJTV9JTl9QUk9HUkVTUykKPiA+ IHsKPiA+IC3CoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgc3Bp bl91bmxvY2soJnNneF9nbG9iYWxfbHJ1LmxvY2spOwo+ID4gLcKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqByZXR1cm4gLUVCVVNZOwo+ID4gLcKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoH0KPiA+IC0KPiA+IC3CoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqBwYWdlLT5mbGFncyAmPSB+U0dYX0VQQ19QQUdFX1JFQ0xBSU1FUl9UUkFDS0VEOwo+ID4g K8KgwqDCoMKgwqDCoMKgaWYgKChwYWdlLT5mbGFncyAmIFNHWF9FUENfUEFHRV9SRUNMQUlNRVJf VFJBQ0tFRCkgJiYKPiA+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoCAocGFnZS0+ZmxhZ3MgJiBTR1hf RVBDX1BBR0VfUkVDTEFJTV9JTl9QUk9HUkVTUykpIHsKPiA+ICvCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqBzcGluX3VubG9jaygmc2d4X2dsb2JhbF9scnUubG9jayk7Cj4gPiArwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgcmV0dXJuIC1FQlVTWTsKPiA+IMKgwqDCoMKgwqDCoMKg wqB9Cj4gPiDCoMKgwqDCoMKgwqDCoMKgbGlzdF9kZWwoJnBhZ2UtPmxpc3QpOwo+ID4gwqDCoMKg wqDCoMKgwqDCoHNwaW5fdW5sb2NrKCZzZ3hfZ2xvYmFsX2xydS5sb2NrKTsKPiA+IMKgCj4gPiAr wqDCoMKgwqDCoMKgwqBwYWdlLT5mbGFncyAmPSB+KFNHWF9FUENfUEFHRV9SRUNMQUlNRVJfVFJB Q0tFRCB8Cj4gPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oCBTR1hfRVBDX1BBR0VfUkVDTEFJTV9JTl9QUk9HUkVTUyB8Cj4gPiArwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBTR1hfRVBDX1BBR0VfRU5DTEFWRSB8Cj4g PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBTR1hfRVBD X1BBR0VfVkVSU0lPTl9BUlJBWSk7Cj4gPiArCj4gPiDCoMKgwqDCoMKgwqDCoMKgcmV0dXJuIDA7 Cj4gPiDCoH0KPiA+IMKgCj4gPiBkaWZmIC0tZ2l0IGEvYXJjaC94ODYva2VybmVsL2NwdS9zZ3gv c2d4LmgKPiA+IGIvYXJjaC94ODYva2VybmVsL2NwdS9zZ3gvc2d4LmgKPiA+IGluZGV4IDM3ZDY2 YmM2Y2EyNy4uZWM4ZDU2N2NkOTc1IDEwMDY0NAo+ID4gLS0tIGEvYXJjaC94ODYva2VybmVsL2Nw dS9zZ3gvc2d4LmgKPiA+ICsrKyBiL2FyY2gveDg2L2tlcm5lbC9jcHUvc2d4L3NneC5oCj4gPiBA QCAtMzIsNiArMzIsOCBAQAo+ID4gwqAjZGVmaW5lIFNHWF9FUENfUEFHRV9LVk1fR1VFU1TCoMKg wqDCoMKgwqDCoMKgwqBCSVQoMikKPiA+IMKgLyogcGFnZSBmbGFnIHRvIGluZGljYXRlIHJlY2xh aW0gaXMgaW4gcHJvZ3Jlc3MgKi8KPiA+IMKgI2RlZmluZSBTR1hfRVBDX1BBR0VfUkVDTEFJTV9J Tl9QUk9HUkVTUyBCSVQoMykKPiA+ICsjZGVmaW5lIFNHWF9FUENfUEFHRV9FTkNMQVZFwqDCoMKg wqDCoMKgwqDCoMKgwqDCoEJJVCg0KQo+ID4gKyNkZWZpbmUgU0dYX0VQQ19QQUdFX1ZFUlNJT05f QVJSQVnCoMKgwqDCoMKgQklUKDUpCj4gCj4gQ291bGQgeW91IHBsZWFzZSBzcGVuZCBzb21lIHRp bWUgdG8gY2xlYXJseSBkb2N1bWVudCB3aGF0IGVhY2ggYml0Cj4gbWVhbnM/Cj4gCj4gPiArc3Rh dGljIGlubGluZSB2b2lkIF9fc2d4X2VwY19wYWdlX2xpc3RfbW92ZShzdHJ1Y3QgbGlzdF9oZWFk Cj4gPiAqbGlzdCwgc3RydWN0IHNneF9lcGNfcGFnZSAqcGFnZSkKPiA+ICt7Cj4gPiArwqDCoMKg wqDCoMKgwqBsaXN0X21vdmVfdGFpbCgmcGFnZS0+bGlzdCwgbGlzdCk7Cj4gPiArfQo+IAo+IEkn bSBub3Qgc3VyZSBJIGdldCB0aGUgcG9pbnQgb2YgYSBoZWxwZXIgbGlrZSB0aGlzLsKgIFdoeSBu b3QganVzdAo+IGhhdmUKPiB0aGUgY2FsbGVyIGNhbGwgbGlzdF9tb3ZlKCkgZGlyZWN0bHk/Cj4g Cj4gPiDCoC8qCj4gPiDCoCAqIE11c3QgYmUgY2FsbGVkIHdpdGggcXVldWUgbG9jayBhY3F1aXJl ZAo+ID4gwqAgKi8KPiA+IEBAIC0xNTcsNiArMTY3LDM4IEBAIHN0YXRpYyBpbmxpbmUgdm9pZAo+ ID4gc2d4X2VwY19wdXNoX3VucmVjbGFpbWFibGUoc3RydWN0IHNneF9lcGNfbHJ1X2xpc3RzICps cnVzLAo+ID4gwqDCoMKgwqDCoMKgwqDCoF9fc2d4X2VwY19wYWdlX2xpc3RfcHVzaCgmKGxydXMp LT51bnJlY2xhaW1hYmxlLCBwYWdlKTsKPiA+IMKgfQo+ID4gwqAKPiA+ICsvKgo+ID4gKyAqIE11 c3QgYmUgY2FsbGVkIHdpdGggcXVldWUgbG9jayBhY3F1aXJlZAo+ID4gKyAqLwo+ID4gK3N0YXRp YyBpbmxpbmUgc3RydWN0IHNneF9lcGNfcGFnZSAqCj4gPiBfX3NneF9lcGNfcGFnZV9saXN0X3Bl ZWsoc3RydWN0IGxpc3RfaGVhZCAqbGlzdCkKPiA+ICt7Cj4gPiArwqDCoMKgwqDCoMKgwqBzdHJ1 Y3Qgc2d4X2VwY19wYWdlICplcGNfcGFnZTsKPiA+ICsKPiA+ICvCoMKgwqDCoMKgwqDCoGlmIChs aXN0X2VtcHR5KGxpc3QpKQo+ID4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoHJldHVy biBOVUxMOwo+ID4gKwo+ID4gK8KgwqDCoMKgwqDCoMKgZXBjX3BhZ2UgPSBsaXN0X2ZpcnN0X2Vu dHJ5KGxpc3QsIHN0cnVjdCBzZ3hfZXBjX3BhZ2UsCj4gPiBsaXN0KTsKPiA+ICvCoMKgwqDCoMKg wqDCoHJldHVybiBlcGNfcGFnZTsKPiA+ICt9Cj4gCj4gbGlzdF9maXJzdF9lbnRyeV9vcl9udWxs KCkgcGVyaGFwcz8KPiAKPiA+ICtzdGF0aWMgaW5saW5lIHN0cnVjdCBzZ3hfZXBjX3BhZ2UgKgo+ ID4gK3NneF9lcGNfcGVla19yZWNsYWltYWJsZShzdHJ1Y3Qgc2d4X2VwY19scnVfbGlzdHMgKmxy dXMpCj4gPiArewo+ID4gK8KgwqDCoMKgwqDCoMKgcmV0dXJuIF9fc2d4X2VwY19wYWdlX2xpc3Rf cGVlaygmKGxydXMpLT5yZWNsYWltYWJsZSk7Cj4gPiArfQo+ID4gKwo+ID4gK3N0YXRpYyBpbmxp bmUgdm9pZCBzZ3hfZXBjX21vdmVfcmVjbGFpbWFibGUoc3RydWN0Cj4gPiBzZ3hfZXBjX2xydV9s aXN0cyAqbHJ1LAo+ID4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBzdHJ1Y3Qgc2d4X2Vw Y19wYWdlCj4gPiAqcGFnZSkKPiA+ICt7Cj4gPiArwqDCoMKgwqDCoMKgwqBfX3NneF9lcGNfcGFn ZV9saXN0X21vdmUoJihscnUpLT5yZWNsYWltYWJsZSwgcGFnZSk7Cj4gPiArfQo+ID4gKwo+ID4g K3N0YXRpYyBpbmxpbmUgc3RydWN0IHNneF9lcGNfcGFnZSAqCj4gPiArc2d4X2VwY19wZWVrX3Vu cmVjbGFpbWFibGUoc3RydWN0IHNneF9lcGNfbHJ1X2xpc3RzICpscnVzKQo+ID4gK3sKPiA+ICvC oMKgwqDCoMKgwqDCoHJldHVybiBfX3NneF9lcGNfcGFnZV9saXN0X3BlZWsoJihscnVzKS0+dW5y ZWNsYWltYWJsZSk7Cj4gPiArfQo+IAo+IEluIGdlbmVyYWwsIEknbSBub3QgYmVjb21pbmcgbW9y ZSBmb25kIG9mIHRoZXNlIGhlbHBlcnMgYXMgdGhlIHNlcmllcwo+IGdvZXMgYWxvbmcuwqAgTXkg d29ycnkgaXMgdGhhdCB0aGV5J3JlIGFuIGFic3RyYWN0aW9uIHdoZXJlIHdlIGRvbid0Cj4gKnJl YWxseSogbmVlZCBvbmUuwqAgSSBkb24ndCBzZWVtIHRoZW0gZ3Jvd2luZyBtdWNoIGZ1bmN0aW9u YWxpdHkgYXMKPiB0aGUKPiBzZXJpZXMgZ29lcyBhbG9uZy4KPiAKPiBJJ2xsIHJlc2VydmUganVk Z2VtZW50IHVudGlsIHRoZSBlbmQgdGhvdWdoLgo+IAoKClRoZSBoZWxwZXJzIHdlcmUgYWRkZWQg YmVjYXVzZSBKYXJya28gcmVxdWVzdGVkIGEgcXVldWUgYWJzdHJhY3Rpb24gZm9yCnRoZSBzZ3hf ZXBjX2xydV9saXN0cyBkYXRhIHN0cnVjdHVyZSBpbiB0aGUgZmlyc3Qgcm91bmQgb2YgcmV2aWV3 cy4gdGhlCnNpbXBsZSBvbmUgbGluZSBpbmxpbmVzIGFyZSBlZmZlY3RpdmVseSBqdXN0IHJlbmFt aW5nIHRvIG1ha2UgdGhlIHF1ZXVlCmFic3RyYWN0aW9uIG1vcmUgb2J2aW91cyB0byB0aGUgcmVh ZGVyLgoK