Received: by 10.223.176.5 with SMTP id f5csp1131433wra; Wed, 31 Jan 2018 01:39:12 -0800 (PST) X-Google-Smtp-Source: AH8x226JPSceiDoYV0YZl46Sj95sxWSQKlv6EmmOl5Fx3W+4pU4FHtbqwpvdm7BxbrGoKFphp3yA X-Received: by 2002:a17:902:1746:: with SMTP id i64-v6mr26864724pli.53.1517391552122; Wed, 31 Jan 2018 01:39:12 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1517391552; cv=none; d=google.com; s=arc-20160816; b=wRl6mMxGoyfOBibjLbdQdSWgt1BEpSriOW6GwUG2r4ezxIQdVaW51Bq7vo+7/G2KHF NVU7fhKPWfLSVcOODDFzMxEHXEdj1codv5U1ng1+huLN0p+e0G0ZKHmCkc9IJdp4tohq k8wlZCF60CXbfyiorl0HUyE4UqnK0DRv/nm0ZdzGsKaWB8JeAIZdYYixf2hnyyBUB+3Z 2G/1avJqvKl5vtjZp2Ke0z31RBztZ760TQweSQoJB1/o0kDl0SPCi05Epfp2ya+fP1Q2 8aIcKjbpXw4Mwqq8Z00mXh1geUA3YXuXro7/iL559C3nsYMW79Aj4ML4EJ6kdcESXheu EDJw== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:sender:mime-version:content-transfer-encoding :spamdiagnosticmetadata:spamdiagnosticoutput:content-language :accept-language:in-reply-to:references:message-id:date:thread-index :thread-topic:subject:cc:to:from:dkim-signature :arc-authentication-results; bh=HGQwJlGLKdvV4d2BHnpHdCAygvwd8b6YNT5WlF+MjPc=; b=NUWPOzeDld5/friA+eBkmpGbN3O9iSC76WJM/kFxc/0fHFz9MIg33h0qDuuafZejOT FhQ7Et32ktlStyMa5Hw/gwNwj39lNcYKmNMsqZ/P500C+PwwcF9KVVO9laJrd9iqBDQP VhZXO2XFMleHA4s+4KIBNBxWNOcceNjvVTYZvuvhzC2A0jLGid6FNHXyvQkV57QJSM4C wyZHlnkl2uA8ie685iUfPnk93GdHf7biLJpDhozjNrr3BzloPK4FuzB5Tx8bHQfxNchv S0G5htYi65JIDeWDhPXVZD1JFfjl42b4+nbzRr+xj5lyJSW5EL/9wZ5JZ2lHmiNEK15r I29g== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@cnexlabs.onmicrosoft.com header.s=selector1-cnexlabs-com header.b=KLRv9UKq; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Return-Path: Received: from vger.kernel.org (vger.kernel.org. [209.132.180.67]) by mx.google.com with ESMTP id g12si3910533pgp.327.2018.01.31.01.38.47; Wed, 31 Jan 2018 01:39:12 -0800 (PST) Received-SPF: pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) client-ip=209.132.180.67; Authentication-Results: mx.google.com; dkim=pass header.i=@cnexlabs.onmicrosoft.com header.s=selector1-cnexlabs-com header.b=KLRv9UKq; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1752426AbeAaJNs (ORCPT + 99 others); Wed, 31 Jan 2018 04:13:48 -0500 Received: from mail-cys01nam02on0086.outbound.protection.outlook.com ([104.47.37.86]:63616 "EHLO NAM02-CY1-obe.outbound.protection.outlook.com" rhost-flags-OK-OK-OK-FAIL) by vger.kernel.org with ESMTP id S1751320AbeAaJNm (ORCPT ); Wed, 31 Jan 2018 04:13:42 -0500 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=cnexlabs.onmicrosoft.com; s=selector1-cnexlabs-com; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version; bh=HGQwJlGLKdvV4d2BHnpHdCAygvwd8b6YNT5WlF+MjPc=; b=KLRv9UKqA2nfQ93cGBrY1OfTVi3YsmoC/HWo7lCQi/xHpwOTS6Wfo0L9PoePVtewY/u+LKLXf9AmL5HoLNjOhMbb40DuSGL1GarNDrqjzkheBjuOA1J3IWQ9tBI4u5bQLrwwf+6oUuu7PfsYmDXx7W24jODzEQxUQKWb2WG7in4= Received: from BN6PR06MB2626.namprd06.prod.outlook.com (10.173.145.22) by BN6PR06MB2628.namprd06.prod.outlook.com (10.173.145.136) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384_P256) id 15.20.444.14; Wed, 31 Jan 2018 09:13:40 +0000 Received: from BN6PR06MB2626.namprd06.prod.outlook.com ([10.173.145.22]) by BN6PR06MB2626.namprd06.prod.outlook.com ([10.173.145.22]) with mapi id 15.20.0444.016; Wed, 31 Jan 2018 09:13:40 +0000 From: Javier Gonzalez To: =?utf-8?B?TWF0aWFzIEJqw7hybGluZw==?= CC: =?utf-8?B?SmF2aWVyIEdvbnrDoWxleg==?= , "linux-block@vger.kernel.org" , "linux-kernel@vger.kernel.org" Subject: Re: [PATCH 5/5] lightnvm: pblk: refactor bad block identification Thread-Topic: [PATCH 5/5] lightnvm: pblk: refactor bad block identification Thread-Index: AQHTmjgzfFIfrni0bUC6szzPt5VlUKONrQcAgAAGGcM= Date: Wed, 31 Jan 2018 09:13:39 +0000 Message-ID: References: <1517364411-22386-1-git-send-email-javier@cnexlabs.com> <1517364411-22386-5-git-send-email-javier@cnexlabs.com>, In-Reply-To: Accept-Language: en-US Content-Language: en-US X-MS-Has-Attach: X-MS-TNEF-Correlator: authentication-results: spf=none (sender IP is ) smtp.mailfrom=javier@cnexlabs.com; x-originating-ip: [80.67.10.141] x-ms-publictraffictype: Email x-microsoft-exchange-diagnostics: 1;BN6PR06MB2628;7:kuBo0ouETlz+r/Nq8K0X+TUnqCas4g1Vmp23MilpP59ms1Qbg3GjWpfJO6boaeAcGDu5Obzhd/bURi7bNhg/5WU7dcdRvJ1DhQjQVnQ6ycwNRVClRRJmeVx60ZWIs/t9jv7z8dNPW7IWVL0ndlSJj74E0Oy8OI5rxDxLu1gZaEzjRokaPbZjJP7JhJYlzCm4eBPqHPaLY+xK+NgQpoor9RK+jJd9DBUJe5+aIrj1Qer4FA5YT3A6gesQRQrknd2H x-ms-exchange-antispam-srfa-diagnostics: SSOS; x-ms-office365-filtering-correlation-id: 739667bf-fe84-434d-92a5-08d5688aeb0c x-microsoft-antispam: UriScan:;BCL:0;PCL:0;RULEID:(7020095)(4652020)(4534165)(7168020)(4627221)(201703031133081)(201702281549075)(5600026)(4604075)(3008032)(2017052603307)(7153060)(7193020);SRVR:BN6PR06MB2628; x-ms-traffictypediagnostic: BN6PR06MB2628: x-microsoft-antispam-prvs: x-exchange-antispam-report-test: UriScan:; x-exchange-antispam-report-cfa-test: BCL:0;PCL:0;RULEID:(6040501)(2401047)(5005006)(8121501046)(93006095)(93001095)(3002001)(3231101)(2400082)(944501161)(10201501046)(6041288)(20161123560045)(201703131423095)(201702281528075)(20161123555045)(201703061421075)(201703061406153)(20161123564045)(20161123562045)(20161123558120)(6072148)(201708071742011);SRVR:BN6PR06MB2628;BCL:0;PCL:0;RULEID:;SRVR:BN6PR06MB2628; x-forefront-prvs: 056929CBB8 x-forefront-antispam-report: SFV:NSPM;SFS:(10009020)(39380400002)(376002)(366004)(396003)(39830400003)(346002)(189003)(199004)(8936002)(86362001)(102836004)(3280700002)(54906003)(6506007)(33656002)(106356001)(53546011)(55236004)(59450400001)(2950100002)(66066001)(97736004)(82746002)(6116002)(6486002)(5660300001)(6436002)(81156014)(3846002)(316002)(81166006)(8676002)(25786009)(105586002)(2906002)(6916009)(186003)(26005)(229853002)(6512007)(2900100001)(53936002)(575784001)(83716003)(6246003)(99286004)(68736007)(14454004)(77096007)(478600001)(7736002)(4326008)(36756003)(305945005)(3660700001)(76176011);DIR:OUT;SFP:1101;SCL:1;SRVR:BN6PR06MB2628;H:BN6PR06MB2626.namprd06.prod.outlook.com;FPR:;SPF:None;PTR:InfoNoRecords;MX:1;A:1;LANG:en; received-spf: None (protection.outlook.com: cnexlabs.com does not designate permitted sender hosts) x-microsoft-antispam-message-info: cW0LfmULxJd1aDyMBCGKpeXZK/kd+mEksYXjBehw+yEcA+pEMQkpO7USsVY+oOeDTJOhCgvK9/L9LJPhHZFuzA== spamdiagnosticoutput: 1:99 spamdiagnosticmetadata: NSPM Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 MIME-Version: 1.0 X-OriginatorOrg: cnexlabs.com X-MS-Exchange-CrossTenant-Network-Message-Id: 739667bf-fe84-434d-92a5-08d5688aeb0c X-MS-Exchange-CrossTenant-originalarrivaltime: 31 Jan 2018 09:13:39.9677 (UTC) X-MS-Exchange-CrossTenant-fromentityheader: Hosted X-MS-Exchange-CrossTenant-id: e40dfc2e-c6c1-463a-a598-38602b2c3cff X-MS-Exchange-Transport-CrossTenantHeadersStamped: BN6PR06MB2628 Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org DQoNCj4gT24gMzEgSmFuIDIwMTgsIGF0IDE2LjUxLCBNYXRpYXMgQmrDuHJsaW5nIDxtYkBsaWdo dG52bS5pbz4gd3JvdGU6DQo+IA0KPj4gT24gMDEvMzEvMjAxOCAwMzowNiBBTSwgSmF2aWVyIEdv bnrDoWxleiB3cm90ZToNCj4+IEluIHByZXBhcmF0aW9uIGZvciB0aGUgT0NTU0QgMi4wIHNwZWMu IGJhZCBibG9jayBpZGVudGlmaWNhdGlvbiwNCj4+IHJlZmFjdG9yIHRoZSBjdXJyZW50IGNvZGUg dG8gZ2VuZXJhbGl6ZSBiYWQgYmxvY2sgZ2V0L3NldCBmdW5jdGlvbnMgYW5kDQo+PiBzdHJ1Y3R1 cmVzLg0KPj4gU2lnbmVkLW9mZi1ieTogSmF2aWVyIEdvbnrDoWxleiA8amF2aWVyQGNuZXhsYWJz LmNvbT4NCj4+IC0tLQ0KPj4gIGRyaXZlcnMvbGlnaHRudm0vcGJsay1pbml0LmMgfCAyMTMgKysr KysrKysrKysrKysrKysrKysrKystLS0tLS0tLS0tLS0tLS0tLS0tLQ0KPj4gIGRyaXZlcnMvbGln aHRudm0vcGJsay5oICAgICAgfCAgIDYgLS0NCj4+ICAyIGZpbGVzIGNoYW5nZWQsIDExMiBpbnNl cnRpb25zKCspLCAxMDcgZGVsZXRpb25zKC0pDQo+PiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9saWdo dG52bS9wYmxrLWluaXQuYyBiL2RyaXZlcnMvbGlnaHRudm0vcGJsay1pbml0LmMNCj4+IGluZGV4 IGE1ZTM1MTBjMGYzOC4uODZhOTRhN2ZhYTk2IDEwMDY0NA0KPj4gLS0tIGEvZHJpdmVycy9saWdo dG52bS9wYmxrLWluaXQuYw0KPj4gKysrIGIvZHJpdmVycy9saWdodG52bS9wYmxrLWluaXQuYw0K Pj4gQEAgLTM2NSw3ICszNjUsMjUgQEAgc3RhdGljIHZvaWQgcGJsa19sdW5zX2ZyZWUoc3RydWN0 IHBibGsgKnBibGspDQo+PiAgICAgIGtmcmVlKHBibGstPmx1bnMpOw0KPj4gIH0NCj4+ICAtc3Rh dGljIHZvaWQgcGJsa19mcmVlX2xpbmVfYml0bWFwcyhzdHJ1Y3QgcGJsa19saW5lICpsaW5lKQ0K Pj4gK3N0YXRpYyB2b2lkIHBibGtfbGluZV9tZ19mcmVlKHN0cnVjdCBwYmxrICpwYmxrKQ0KPj4g K3sNCj4+ICsgICAgc3RydWN0IHBibGtfbGluZV9tZ210ICpsX21nID0gJnBibGstPmxfbWc7DQo+ PiArICAgIGludCBpOw0KPj4gKw0KPj4gKyAgICBrZnJlZShsX21nLT5iYl90ZW1wbGF0ZSk7DQo+ PiArICAgIGtmcmVlKGxfbWctPmJiX2F1eCk7DQo+PiArICAgIGtmcmVlKGxfbWctPnZzY19saXN0 KTsNCj4+ICsNCj4+ICsgICAgZm9yIChpID0gMDsgaSA8IFBCTEtfREFUQV9MSU5FUzsgaSsrKSB7 DQo+PiArICAgICAgICBrZnJlZShsX21nLT5zbGluZV9tZXRhW2ldKTsNCj4+ICsgICAgICAgIHBi bGtfbWZyZWUobF9tZy0+ZWxpbmVfbWV0YVtpXS0+YnVmLCBsX21nLT5lbWV0YV9hbGxvY190eXBl KTsNCj4+ICsgICAgICAgIGtmcmVlKGxfbWctPmVsaW5lX21ldGFbaV0pOw0KPj4gKyAgICB9DQo+ PiArDQo+PiArICAgIGtmcmVlKHBibGstPmxpbmVzKTsNCj4+ICt9DQo+PiArDQo+PiArc3RhdGlj IHZvaWQgcGJsa19saW5lX21ldGFfZnJlZShzdHJ1Y3QgcGJsa19saW5lICpsaW5lKQ0KPj4gIHsN Cj4+ICAgICAga2ZyZWUobGluZS0+YmxrX2JpdG1hcCk7DQo+PiAgICAgIGtmcmVlKGxpbmUtPmVy YXNlX2JpdG1hcCk7DQo+PiBAQCAtMzgyLDQwICs0MDAsMTYgQEAgc3RhdGljIHZvaWQgcGJsa19s aW5lc19mcmVlKHN0cnVjdCBwYmxrICpwYmxrKQ0KPj4gICAgICAgICAgbGluZSA9ICZwYmxrLT5s aW5lc1tpXTsNCj4+ICAgICAgICAgICAgcGJsa19saW5lX2ZyZWUocGJsaywgbGluZSk7DQo+PiAt ICAgICAgICBwYmxrX2ZyZWVfbGluZV9iaXRtYXBzKGxpbmUpOw0KPj4gKyAgICAgICAgcGJsa19s aW5lX21ldGFfZnJlZShsaW5lKTsNCj4+ICAgICAgfQ0KPj4gICAgICBzcGluX3VubG9jaygmbF9t Zy0+ZnJlZV9sb2NrKTsNCj4+ICB9DQo+PiAgLXN0YXRpYyB2b2lkIHBibGtfbGluZV9tZXRhX2Zy ZWUoc3RydWN0IHBibGsgKnBibGspDQo+PiArc3RhdGljIGludCBwYmxrX2JiX2dldF90Ymwoc3Ry dWN0IG52bV90Z3RfZGV2ICpkZXYsIHN0cnVjdCBwYmxrX2x1biAqcmx1biwNCj4+ICsgICAgICAg ICAgICAgICB1OCAqYmxrcywgaW50IG5yX2Jsa3MpDQo+PiAgew0KPj4gLSAgICBzdHJ1Y3QgcGJs a19saW5lX21nbXQgKmxfbWcgPSAmcGJsay0+bF9tZzsNCj4+IC0gICAgaW50IGk7DQo+PiAtDQo+ PiAtICAgIGtmcmVlKGxfbWctPmJiX3RlbXBsYXRlKTsNCj4+IC0gICAga2ZyZWUobF9tZy0+YmJf YXV4KTsNCj4+IC0gICAga2ZyZWUobF9tZy0+dnNjX2xpc3QpOw0KPj4gLQ0KPj4gLSAgICBmb3Ig KGkgPSAwOyBpIDwgUEJMS19EQVRBX0xJTkVTOyBpKyspIHsNCj4+IC0gICAgICAgIGtmcmVlKGxf bWctPnNsaW5lX21ldGFbaV0pOw0KPj4gLSAgICAgICAgcGJsa19tZnJlZShsX21nLT5lbGluZV9t ZXRhW2ldLT5idWYsIGxfbWctPmVtZXRhX2FsbG9jX3R5cGUpOw0KPj4gLSAgICAgICAga2ZyZWUo bF9tZy0+ZWxpbmVfbWV0YVtpXSk7DQo+PiAtICAgIH0NCj4+IC0NCj4+IC0gICAga2ZyZWUocGJs ay0+bGluZXMpOw0KPj4gLX0NCj4+IC0NCj4+IC1zdGF0aWMgaW50IHBibGtfYmJfZGlzY292ZXJ5 KHN0cnVjdCBudm1fdGd0X2RldiAqZGV2LCBzdHJ1Y3QgcGJsa19sdW4gKnJsdW4pDQo+PiAtew0K Pj4gLSAgICBzdHJ1Y3QgbnZtX2dlbyAqZ2VvID0gJmRldi0+Z2VvOw0KPj4gICAgICBzdHJ1Y3Qg cHBhX2FkZHIgcHBhOw0KPj4gLSAgICB1OCAqYmxrczsNCj4+IC0gICAgaW50IG5yX2Jsa3MsIHJl dDsNCj4+IC0NCj4+IC0gICAgbnJfYmxrcyA9IGdlby0+bnJfY2hrcyAqIGdlby0+cGxhbmVfbW9k ZTsNCj4+IC0gICAgYmxrcyA9IGttYWxsb2MobnJfYmxrcywgR0ZQX0tFUk5FTCk7DQo+PiAtICAg IGlmICghYmxrcykNCj4+IC0gICAgICAgIHJldHVybiAtRU5PTUVNOw0KPj4gKyAgICBpbnQgcmV0 Ow0KPj4gICAgICAgIHBwYS5wcGEgPSAwOw0KPj4gICAgICBwcGEuZy5jaCA9IHJsdW4tPmJwcGEu Zy5jaDsNCj4+IEBAIC00MjMsMzQgKzQxNyw1NiBAQCBzdGF0aWMgaW50IHBibGtfYmJfZGlzY292 ZXJ5KHN0cnVjdCBudm1fdGd0X2RldiAqZGV2LCBzdHJ1Y3QgcGJsa19sdW4gKnJsdW4pDQo+PiAg ICAgICAgcmV0ID0gbnZtX2dldF90Z3RfYmJfdGJsKGRldiwgcHBhLCBibGtzKTsNCj4+ICAgICAg aWYgKHJldCkNCj4+IC0gICAgICAgIGdvdG8gb3V0Ow0KPj4gKyAgICAgICAgcmV0dXJuIHJldDsN Cj4+ICAgICAgICBucl9ibGtzID0gbnZtX2JiX3RibF9mb2xkKGRldi0+cGFyZW50LCBibGtzLCBu cl9ibGtzKTsNCj4+IC0gICAgaWYgKG5yX2Jsa3MgPCAwKSB7DQo+PiAtICAgICAgICByZXQgPSBu cl9ibGtzOw0KPj4gLSAgICAgICAgZ290byBvdXQ7DQo+PiAtICAgIH0NCj4+IC0NCj4+IC0gICAg cmx1bi0+YmJfbGlzdCA9IGJsa3M7DQo+PiArICAgIGlmIChucl9ibGtzIDwgMCkNCj4+ICsgICAg ICAgIHJldHVybiAtRUlPOw0KPj4gICAgICAgIHJldHVybiAwOw0KPj4gLW91dDoNCj4+IC0gICAg a2ZyZWUoYmxrcyk7DQo+PiAtICAgIHJldHVybiByZXQ7DQo+PiArfQ0KPj4gKw0KPj4gK3N0YXRp YyB2b2lkICpwYmxrX2JiX2dldF9sb2coc3RydWN0IHBibGsgKnBibGspDQo+PiArew0KPj4gKyAg ICBzdHJ1Y3QgbnZtX3RndF9kZXYgKmRldiA9IHBibGstPmRldjsNCj4+ICsgICAgc3RydWN0IG52 bV9nZW8gKmdlbyA9ICZkZXYtPmdlbzsNCj4+ICsgICAgdTggKmxvZzsNCj4+ICsgICAgaW50IGks IG5yX2Jsa3MsIGJsa19wZXJfbHVuOw0KPj4gKyAgICBpbnQgcmV0Ow0KPj4gKw0KPj4gKyAgICBi bGtfcGVyX2x1biA9IGdlby0+bnJfY2hrcyAqIGdlby0+cGxhbmVfbW9kZTsNCj4+ICsgICAgbnJf YmxrcyA9IGJsa19wZXJfbHVuICogZ2VvLT5hbGxfbHVuczsNCj4+ICsNCj4+ICsgICAgbG9nID0g a21hbGxvYyhucl9ibGtzLCBHRlBfS0VSTkVMKTsNCj4+ICsgICAgaWYgKCFsb2cpDQo+PiArICAg ICAgICByZXR1cm4gRVJSX1BUUigtRU5PTUVNKTsNCj4+ICsNCj4+ICsgICAgZm9yIChpID0gMDsg aSA8IGdlby0+YWxsX2x1bnM7IGkrKykgew0KPj4gKyAgICAgICAgc3RydWN0IHBibGtfbHVuICpy bHVuID0gJnBibGstPmx1bnNbaV07DQo+PiArICAgICAgICB1OCAqbG9nX3BvcyA9IGxvZyArIGkg KiBibGtfcGVyX2x1bjsNCj4+ICsNCj4+ICsgICAgICAgIHJldCA9IHBibGtfYmJfZ2V0X3RibChk ZXYsIHJsdW4sIGxvZ19wb3MsIGJsa19wZXJfbHVuKTsNCj4+ICsgICAgICAgIGlmIChyZXQpIHsN Cj4+ICsgICAgICAgICAgICBrZnJlZShsb2cpOw0KPj4gKyAgICAgICAgICAgIHJldHVybiBFUlJf UFRSKC1FSU8pOw0KPj4gKyAgICAgICAgfQ0KPj4gKyAgICB9DQo+PiArDQo+PiArICAgIHJldHVy biBsb2c7DQo+PiAgfQ0KPj4gICAgc3RhdGljIGludCBwYmxrX2JiX2xpbmUoc3RydWN0IHBibGsg KnBibGssIHN0cnVjdCBwYmxrX2xpbmUgKmxpbmUsDQo+PiAtICAgICAgICAgICAgaW50IGJsa19w ZXJfbGluZSkNCj4+ICsgICAgICAgICAgICB1OCAqYmJfbG9nLCBpbnQgYmxrX3Blcl9saW5lKQ0K Pj4gIHsNCj4+ICAgICAgc3RydWN0IG52bV90Z3RfZGV2ICpkZXYgPSBwYmxrLT5kZXY7DQo+PiAg ICAgIHN0cnVjdCBudm1fZ2VvICpnZW8gPSAmZGV2LT5nZW87DQo+PiAtICAgIHN0cnVjdCBwYmxr X2x1biAqcmx1bjsNCj4+IC0gICAgaW50IGJiX2NudCA9IDA7DQo+PiAtICAgIGludCBpOw0KPj4g KyAgICBpbnQgaSwgYmJfY250ID0gMDsNCj4+ICAgICAgICBmb3IgKGkgPSAwOyBpIDwgYmxrX3Bl cl9saW5lOyBpKyspIHsNCj4+IC0gICAgICAgIHJsdW4gPSAmcGJsay0+bHVuc1tpXTsNCj4+IC0g ICAgICAgIGlmIChybHVuLT5iYl9saXN0W2xpbmUtPmlkXSA9PSBOVk1fQkxLX1RfRlJFRSkNCj4+ ICsgICAgICAgIHN0cnVjdCBwYmxrX2x1biAqcmx1biA9ICZwYmxrLT5sdW5zW2ldOw0KPj4gKyAg ICAgICAgdTggKmx1bl9iYl9sb2cgPSBiYl9sb2cgKyBpICogYmxrX3Blcl9saW5lOw0KPj4gKw0K Pj4gKyAgICAgICAgaWYgKGx1bl9iYl9sb2dbbGluZS0+aWRdID09IE5WTV9CTEtfVF9GUkVFKQ0K Pj4gICAgICAgICAgICAgIGNvbnRpbnVlOw0KPj4gICAgICAgICAgICBzZXRfYml0KHBibGtfcHBh X3RvX3BvcyhnZW8sIHJsdW4tPmJwcGEpLCBsaW5lLT5ibGtfYml0bWFwKTsNCj4+IEBAIC00NjAs MjkgKzQ3NiwxMiBAQCBzdGF0aWMgaW50IHBibGtfYmJfbGluZShzdHJ1Y3QgcGJsayAqcGJsaywg c3RydWN0IHBibGtfbGluZSAqbGluZSwNCj4+ICAgICAgcmV0dXJuIGJiX2NudDsNCj4+ICB9DQo+ PiAgLXN0YXRpYyBpbnQgcGJsa19hbGxvY19saW5lX2JpdG1hcHMoc3RydWN0IHBibGsgKnBibGss IHN0cnVjdCBwYmxrX2xpbmUgKmxpbmUpDQo+PiAtew0KPj4gLSAgICBzdHJ1Y3QgcGJsa19saW5l X21ldGEgKmxtID0gJnBibGstPmxtOw0KPj4gLQ0KPj4gLSAgICBsaW5lLT5ibGtfYml0bWFwID0g a3phbGxvYyhsbS0+YmxrX2JpdG1hcF9sZW4sIEdGUF9LRVJORUwpOw0KPj4gLSAgICBpZiAoIWxp bmUtPmJsa19iaXRtYXApDQo+PiAtICAgICAgICByZXR1cm4gLUVOT01FTTsNCj4+IC0NCj4+IC0g ICAgbGluZS0+ZXJhc2VfYml0bWFwID0ga3phbGxvYyhsbS0+YmxrX2JpdG1hcF9sZW4sIEdGUF9L RVJORUwpOw0KPj4gLSAgICBpZiAoIWxpbmUtPmVyYXNlX2JpdG1hcCkgew0KPj4gLSAgICAgICAg a2ZyZWUobGluZS0+YmxrX2JpdG1hcCk7DQo+PiAtICAgICAgICByZXR1cm4gLUVOT01FTTsNCj4+ IC0gICAgfQ0KPj4gLQ0KPj4gLSAgICByZXR1cm4gMDsNCj4+IC19DQo+PiAtDQo+PiAgc3RhdGlj IGludCBwYmxrX2x1bnNfaW5pdChzdHJ1Y3QgcGJsayAqcGJsaywgc3RydWN0IHBwYV9hZGRyICps dW5zKQ0KPj4gIHsNCj4+ICAgICAgc3RydWN0IG52bV90Z3RfZGV2ICpkZXYgPSBwYmxrLT5kZXY7 DQo+PiAgICAgIHN0cnVjdCBudm1fZ2VvICpnZW8gPSAmZGV2LT5nZW87DQo+PiAgICAgIHN0cnVj dCBwYmxrX2x1biAqcmx1bjsNCj4+IC0gICAgaW50IGksIHJldDsNCj4+ICsgICAgaW50IGk7DQo+ PiAgICAgICAgLyogVE9ETzogSW1wbGVtZW50IHVuYmFsYW5jZWQgTFVOIHN1cHBvcnQgKi8NCj4+ ICAgICAgaWYgKGdlby0+bnJfbHVucyA8IDApIHsNCj4+IEBAIC01MDUsMTMgKzUwNCw2IEBAIHN0 YXRpYyBpbnQgcGJsa19sdW5zX2luaXQoc3RydWN0IHBibGsgKnBibGssIHN0cnVjdCBwcGFfYWRk ciAqbHVucykNCj4+ICAgICAgICAgIHJsdW4tPmJwcGEgPSBsdW5zW2x1bmlkXTsNCj4+ICAgICAg ICAgICAgc2VtYV9pbml0KCZybHVuLT53cl9zZW0sIDEpOw0KPj4gLQ0KPj4gLSAgICAgICAgcmV0 ID0gcGJsa19iYl9kaXNjb3ZlcnkoZGV2LCBybHVuKTsNCj4+IC0gICAgICAgIGlmIChyZXQpIHsN Cj4+IC0gICAgICAgICAgICB3aGlsZSAoLS1pID49IDApDQo+PiAtICAgICAgICAgICAgICAgIGtm cmVlKHBibGstPmx1bnNbaV0uYmJfbGlzdCk7DQo+PiAtICAgICAgICAgICAgcmV0dXJuIHJldDsN Cj4+IC0gICAgICAgIH0NCj4+ICAgICAgfQ0KPj4gICAgICAgIHJldHVybiAwOw0KPj4gQEAgLTY4 OSw2ICs2ODEsMjYgQEAgc3RhdGljIGludCBwYmxrX2xpbmVzX2FsbG9jX21ldGFkYXRhKHN0cnVj dCBwYmxrICpwYmxrKQ0KPj4gICAgICByZXR1cm4gLUVOT01FTTsNCj4+ICB9DQo+PiAgK3N0YXRp YyBpbnQgcGJsa19zZXR1cF9saW5lX21ldGEoc3RydWN0IHBibGsgKnBibGssIHN0cnVjdCBwYmxr X2xpbmUgKmxpbmUsDQo+PiArICAgICAgICAgICAgICAgIHZvaWQgKmNodW5rX2xvZywgbG9uZyAq bnJfYmFkX2Jsa3MpDQo+PiArew0KPj4gKyAgICBzdHJ1Y3QgcGJsa19saW5lX21ldGEgKmxtID0g JnBibGstPmxtOw0KPj4gKw0KPj4gKyAgICBsaW5lLT5ibGtfYml0bWFwID0ga3phbGxvYyhsbS0+ YmxrX2JpdG1hcF9sZW4sIEdGUF9LRVJORUwpOw0KPj4gKyAgICBpZiAoIWxpbmUtPmJsa19iaXRt YXApDQo+PiArICAgICAgICByZXR1cm4gLUVOT01FTTsNCj4+ICsNCj4+ICsgICAgbGluZS0+ZXJh c2VfYml0bWFwID0ga3phbGxvYyhsbS0+YmxrX2JpdG1hcF9sZW4sIEdGUF9LRVJORUwpOw0KPj4g KyAgICBpZiAoIWxpbmUtPmVyYXNlX2JpdG1hcCkgew0KPj4gKyAgICAgICAga2ZyZWUobGluZS0+ YmxrX2JpdG1hcCk7DQo+PiArICAgICAgICByZXR1cm4gLUVOT01FTTsNCj4+ICsgICAgfQ0KPj4g Kw0KPj4gKyAgICAqbnJfYmFkX2Jsa3MgPSBwYmxrX2JiX2xpbmUocGJsaywgbGluZSwgY2h1bmtf bG9nLCBsbS0+YmxrX3Blcl9saW5lKTsNCj4+ICsNCj4+ICsgICAgcmV0dXJuIDA7DQo+PiArfQ0K Pj4gKw0KPj4gIHN0YXRpYyBpbnQgcGJsa19saW5lc19pbml0KHN0cnVjdCBwYmxrICpwYmxrKQ0K Pj4gIHsNCj4+ICAgICAgc3RydWN0IG52bV90Z3RfZGV2ICpkZXYgPSBwYmxrLT5kZXY7DQo+PiBA QCAtNjk2LDggKzcwOCw5IEBAIHN0YXRpYyBpbnQgcGJsa19saW5lc19pbml0KHN0cnVjdCBwYmxr ICpwYmxrKQ0KPj4gICAgICBzdHJ1Y3QgcGJsa19saW5lX21nbXQgKmxfbWcgPSAmcGJsay0+bF9t ZzsNCj4+ICAgICAgc3RydWN0IHBibGtfbGluZV9tZXRhICpsbSA9ICZwYmxrLT5sbTsNCj4+ICAg ICAgc3RydWN0IHBibGtfbGluZSAqbGluZTsNCj4+ICsgICAgdm9pZCAqY2h1bmtfbG9nOw0KPj4g ICAgICB1bnNpZ25lZCBpbnQgc21ldGFfbGVuLCBlbWV0YV9sZW47DQo+PiAtICAgIGxvbmcgbnJf YmFkX2Jsa3MsIG5yX2ZyZWVfYmxrczsNCj4+ICsgICAgbG9uZyBucl9iYWRfYmxrcyA9IDAsIG5y X2ZyZWVfYmxrcyA9IDA7DQo+PiAgICAgIGludCBiYl9kaXN0YW5jZSwgbWF4X3dyaXRlX3BwYXMs IG1vZDsNCj4+ICAgICAgaW50IGksIHJldDsNCj4+ICBAQCAtNzcxLDEzICs3ODQsMTIgQEAgc3Rh dGljIGludCBwYmxrX2xpbmVzX2luaXQoc3RydWN0IHBibGsgKnBibGspDQo+PiAgICAgIGlmIChs bS0+bWluX2Jsa19saW5lID4gbG0tPmJsa19wZXJfbGluZSkgew0KPj4gICAgICAgICAgcHJfZXJy KCJwYmxrOiBjb25maWcuIG5vdCBzdXBwb3J0ZWQuIE1pbi4gTFVOIGluIGxpbmU6JWRcbiIsDQo+ PiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxtLT5ibGtfcGVyX2xpbmUpOw0KPj4gLSAg ICAgICAgcmV0ID0gLUVJTlZBTDsNCj4+IC0gICAgICAgIGdvdG8gZmFpbDsNCj4+ICsgICAgICAg IHJldHVybiAtRUlOVkFMOw0KPj4gICAgICB9DQo+PiAgICAgICAgcmV0ID0gcGJsa19saW5lc19h bGxvY19tZXRhZGF0YShwYmxrKTsNCj4+ICAgICAgaWYgKHJldCkNCj4+IC0gICAgICAgIGdvdG8g ZmFpbDsNCj4+ICsgICAgICAgIHJldHVybiByZXQ7DQo+PiAgICAgICAgbF9tZy0+YmJfdGVtcGxh dGUgPSBremFsbG9jKGxtLT5zZWNfYml0bWFwX2xlbiwgR0ZQX0tFUk5FTCk7DQo+PiAgICAgIGlm ICghbF9tZy0+YmJfdGVtcGxhdGUpIHsNCj4+IEBAIC04MjEsOSArODMzLDE2IEBAIHN0YXRpYyBp bnQgcGJsa19saW5lc19pbml0KHN0cnVjdCBwYmxrICpwYmxrKQ0KPj4gICAgICAgICAgZ290byBm YWlsX2ZyZWVfYmJfYXV4Ow0KPj4gICAgICB9DQo+PiAgLSAgICBucl9mcmVlX2Jsa3MgPSAwOw0K Pj4gKyAgICBjaHVua19sb2cgPSBwYmxrX2JiX2dldF9sb2cocGJsayk7DQo+PiArICAgIGlmIChJ U19FUlIoY2h1bmtfbG9nKSkgew0KPj4gKyAgICAgICAgcHJfZXJyKCJwYmxrOiBjb3VsZCBub3Qg Z2V0IGJhZCBibG9jayBsb2cgKCVsdSlcbiIsDQo+PiArICAgICAgICAgICAgICAgICAgICAgICAg ICAgIFBUUl9FUlIoY2h1bmtfbG9nKSk7DQo+PiArICAgICAgICByZXQgPSBQVFJfRVJSKGNodW5r X2xvZyk7DQo+PiArICAgICAgICBnb3RvIGZhaWxfZnJlZV9saW5lczsNCj4+ICsgICAgfQ0KPj4g Kw0KPj4gICAgICBmb3IgKGkgPSAwOyBpIDwgbF9tZy0+bnJfbGluZXM7IGkrKykgew0KPj4gLSAg ICAgICAgaW50IGJsa19pbl9saW5lOw0KPj4gKyAgICAgICAgaW50IGNoa19pbl9saW5lOw0KPj4g ICAgICAgICAgICBsaW5lID0gJnBibGstPmxpbmVzW2ldOw0KPj4gIEBAIC04MzUsMjYgKzg1NCwy MCBAQCBzdGF0aWMgaW50IHBibGtfbGluZXNfaW5pdChzdHJ1Y3QgcGJsayAqcGJsaykNCj4+ICAg ICAgICAgIGxpbmUtPnZzYyA9ICZsX21nLT52c2NfbGlzdFtpXTsNCj4+ICAgICAgICAgIHNwaW5f bG9ja19pbml0KCZsaW5lLT5sb2NrKTsNCj4+ICAtICAgICAgICByZXQgPSBwYmxrX2FsbG9jX2xp bmVfYml0bWFwcyhwYmxrLCBsaW5lKTsNCj4+ICsgICAgICAgIHJldCA9IHBibGtfc2V0dXBfbGlu ZV9tZXRhKHBibGssIGxpbmUsIGNodW5rX2xvZywgJm5yX2JhZF9ibGtzKTsNCj4+ICAgICAgICAg IGlmIChyZXQpDQo+PiAtICAgICAgICAgICAgZ290byBmYWlsX2ZyZWVfbGluZXM7DQo+PiArICAg ICAgICAgICAgZ290byBmYWlsX2ZyZWVfY2h1bmtfbG9nOw0KPj4gIC0gICAgICAgIG5yX2JhZF9i bGtzID0gcGJsa19iYl9saW5lKHBibGssIGxpbmUsIGxtLT5ibGtfcGVyX2xpbmUpOw0KPj4gLSAg ICAgICAgaWYgKG5yX2JhZF9ibGtzIDwgMCB8fCBucl9iYWRfYmxrcyA+IGxtLT5ibGtfcGVyX2xp bmUpIHsNCj4+IC0gICAgICAgICAgICBwYmxrX2ZyZWVfbGluZV9iaXRtYXBzKGxpbmUpOw0KPj4g LSAgICAgICAgICAgIHJldCA9IC1FSU5WQUw7DQo+PiAtICAgICAgICAgICAgZ290byBmYWlsX2Zy ZWVfbGluZXM7DQo+PiAtICAgICAgICB9DQo+PiAtDQo+PiAtICAgICAgICBibGtfaW5fbGluZSA9 IGxtLT5ibGtfcGVyX2xpbmUgLSBucl9iYWRfYmxrczsNCj4+IC0gICAgICAgIGlmIChibGtfaW5f bGluZSA8IGxtLT5taW5fYmxrX2xpbmUpIHsNCj4+ICsgICAgICAgIGNoa19pbl9saW5lID0gbG0t PmJsa19wZXJfbGluZSAtIG5yX2JhZF9ibGtzOw0KPj4gKyAgICAgICAgaWYgKG5yX2JhZF9ibGtz IDwgMCB8fCBucl9iYWRfYmxrcyA+IGxtLT5ibGtfcGVyX2xpbmUgfHwNCj4+ICsgICAgICAgICAg ICAgICAgICAgIGNoa19pbl9saW5lIDwgbG0tPm1pbl9ibGtfbGluZSkgew0KPj4gICAgICAgICAg ICAgIGxpbmUtPnN0YXRlID0gUEJMS19MSU5FU1RBVEVfQkFEOw0KPj4gICAgICAgICAgICAgIGxp c3RfYWRkX3RhaWwoJmxpbmUtPmxpc3QsICZsX21nLT5iYWRfbGlzdCk7DQo+PiAgICAgICAgICAg ICAgY29udGludWU7DQo+PiAgICAgICAgICB9DQo+PiAgLSAgICAgICAgbnJfZnJlZV9ibGtzICs9 IGJsa19pbl9saW5lOw0KPj4gLSAgICAgICAgYXRvbWljX3NldCgmbGluZS0+YmxrX2luX2xpbmUs IGJsa19pbl9saW5lKTsNCj4+ICsgICAgICAgIG5yX2ZyZWVfYmxrcyArPSBjaGtfaW5fbGluZTsN Cj4+ICsgICAgICAgIGF0b21pY19zZXQoJmxpbmUtPmJsa19pbl9saW5lLCBjaGtfaW5fbGluZSk7 DQo+PiAgICAgICAgICAgIGxfbWctPm5yX2ZyZWVfbGluZXMrKzsNCj4+ICAgICAgICAgIGxpc3Rf YWRkX3RhaWwoJmxpbmUtPmxpc3QsICZsX21nLT5mcmVlX2xpc3QpOw0KPj4gQEAgLTg2MiwyMyAr ODc1LDIxIEBAIHN0YXRpYyBpbnQgcGJsa19saW5lc19pbml0KHN0cnVjdCBwYmxrICpwYmxrKQ0K Pj4gICAgICAgIHBibGtfc2V0X3Byb3Zpc2lvbihwYmxrLCBucl9mcmVlX2Jsa3MpOw0KPj4gIC0g ICAgLyogQ2xlYW51cCBwZXItTFVOIGJhZCBibG9jayBsaXN0cyAtIG1hbmFnZWQgd2l0aGluIGxp bmVzIG9uIHJ1bi10aW1lICovDQo+PiAtICAgIGZvciAoaSA9IDA7IGkgPCBnZW8tPmFsbF9sdW5z OyBpKyspDQo+PiAtICAgICAgICBrZnJlZShwYmxrLT5sdW5zW2ldLmJiX2xpc3QpOw0KPj4gLQ0K Pj4gKyAgICBrZnJlZShjaHVua19sb2cpOw0KPj4gICAgICByZXR1cm4gMDsNCj4+IC1mYWlsX2Zy ZWVfbGluZXM6DQo+PiArDQo+PiArZmFpbF9mcmVlX2NodW5rX2xvZzoNCj4+ICsgICAga2ZyZWUo Y2h1bmtfbG9nKTsNCj4+ICAgICAgd2hpbGUgKC0taSA+PSAwKQ0KPj4gLSAgICAgICAgcGJsa19m cmVlX2xpbmVfYml0bWFwcygmcGJsay0+bGluZXNbaV0pOw0KPj4gKyAgICAgICAgcGJsa19saW5l X21ldGFfZnJlZSgmcGJsay0+bGluZXNbaV0pOw0KPj4gK2ZhaWxfZnJlZV9saW5lczoNCj4+ICsg ICAga2ZyZWUocGJsay0+bGluZXMpOw0KPj4gIGZhaWxfZnJlZV9iYl9hdXg6DQo+PiAgICAgIGtm cmVlKGxfbWctPmJiX2F1eCk7DQo+PiAgZmFpbF9mcmVlX2JiX3RlbXBsYXRlOg0KPj4gICAgICBr ZnJlZShsX21nLT5iYl90ZW1wbGF0ZSk7DQo+PiAgZmFpbF9mcmVlX21ldGE6DQo+PiAtICAgIHBi bGtfbGluZV9tZXRhX2ZyZWUocGJsayk7DQo+PiAtZmFpbDoNCj4+IC0gICAgZm9yIChpID0gMDsg aSA8IGdlby0+YWxsX2x1bnM7IGkrKykNCj4+IC0gICAgICAgIGtmcmVlKHBibGstPmx1bnNbaV0u YmJfbGlzdCk7DQo+PiArICAgIHBibGtfbGluZV9tZ19mcmVlKHBibGspOw0KPj4gICAgICAgIHJl dHVybiByZXQ7DQo+PiAgfQ0KPj4gQEAgLTkyMiw3ICs5MzMsNyBAQCBzdGF0aWMgdm9pZCBwYmxr X2ZyZWUoc3RydWN0IHBibGsgKnBibGspDQo+PiAgICAgIHBibGtfbHVuc19mcmVlKHBibGspOw0K Pj4gICAgICBwYmxrX2xpbmVzX2ZyZWUocGJsayk7DQo+PiAgICAgIGtmcmVlKHBibGstPnBhZF9k aXN0KTsNCj4+IC0gICAgcGJsa19saW5lX21ldGFfZnJlZShwYmxrKTsNCj4+ICsgICAgcGJsa19s aW5lX21nX2ZyZWUocGJsayk7DQo+PiAgICAgIHBibGtfY29yZV9mcmVlKHBibGspOw0KPj4gICAg ICBwYmxrX2wycF9mcmVlKHBibGspOw0KPj4gIEBAIC0xMTEwLDcgKzExMjEsNyBAQCBzdGF0aWMg dm9pZCAqcGJsa19pbml0KHN0cnVjdCBudm1fdGd0X2RldiAqZGV2LCBzdHJ1Y3QgZ2VuZGlzayAq dGRpc2ssDQo+PiAgZmFpbF9mcmVlX3BhZF9kaXN0Og0KPj4gICAgICBrZnJlZShwYmxrLT5wYWRf ZGlzdCk7DQo+PiAgZmFpbF9mcmVlX2xpbmVfbWV0YToNCj4+IC0gICAgcGJsa19saW5lX21ldGFf ZnJlZShwYmxrKTsNCj4+ICsgICAgcGJsa19saW5lX21nX2ZyZWUocGJsayk7DQo+PiAgZmFpbF9m cmVlX2x1bnM6DQo+PiAgICAgIHBibGtfbHVuc19mcmVlKHBibGspOw0KPj4gIGZhaWw6DQo+PiBk aWZmIC0tZ2l0IGEvZHJpdmVycy9saWdodG52bS9wYmxrLmggYi9kcml2ZXJzL2xpZ2h0bnZtL3Bi bGsuaA0KPj4gaW5kZXggODg3MjBlMjQ0MWMwLi4yODJkZmM4NzgwZTggMTAwNjQ0DQo+PiAtLS0g YS9kcml2ZXJzL2xpZ2h0bnZtL3BibGsuaA0KPj4gKysrIGIvZHJpdmVycy9saWdodG52bS9wYmxr LmgNCj4+IEBAIC0yMDEsMTIgKzIwMSw2IEBAIHN0cnVjdCBwYmxrX3JiIHsNCj4+ICAgIHN0cnVj dCBwYmxrX2x1biB7DQo+PiAgICAgIHN0cnVjdCBwcGFfYWRkciBicHBhOw0KPj4gLQ0KPj4gLSAg ICB1OCAqYmJfbGlzdDsgICAgICAgICAgICAvKiBCYWQgYmxvY2sgbGlzdCBmb3IgTFVOLiBPbmx5 IHVzZWQgb24NCj4+IC0gICAgICAgICAgICAgICAgICAgICAqIGJyaW5nIHVwLiBCYWQgYmxvY2tz IGFyZSBtYW5hZ2VkDQo+PiAtICAgICAgICAgICAgICAgICAgICAgKiB3aXRoaW4gbGluZXMgb24g cnVuLXRpbWUuDQo+PiAtICAgICAgICAgICAgICAgICAgICAgKi8NCj4+IC0NCj4+ICAgICAgc3Ry dWN0IHNlbWFwaG9yZSB3cl9zZW07DQo+PiAgfTsNCj4+ICANCj4gDQo+IExvb2tzIGdvb2QgdG8g bWUuDQo+IA0KPiBXaXRoIHJlc3BlY3QgdG8gdGhlIDIuMCBpbXBsZW1lbnRhdGlvbi4gSSBhbSB0 aGlua2luZyB0aGF0IGdldF9iYiBhbmQgc2V0X2JiIHNob3VsZCBiZWhhdmUgaW4gdGhlIGZvbGxv d2luZyB3YXk6DQo+IA0KPiBGb3IgZ2V0X2JiIChpbiBudm1lL2hvc3QvbGlnaHRudm0uYykNCj4g MS4yOiBLZWVwIHRoZSBpbXBsZW1lbnRhdGlvbiBhcyBpcy4NCj4gMi4wOiBVc2UgdGhlIHJlcG9y dCBjaHVuayBjb21tYW5kLCBhbmQgcmVkbyB0aGUgZ2V0X2JiIGZvcm1hdC4NCj4gDQo+IEZvciBz ZXRfYmIgKGluIG52bWUvaG9zdC9saWdodG52bS5jKQ0KPiAxLjI6IEJ1c2luZXNzIGFzIHVzdWFs DQo+IDIuMDogUmVwb3J0IGVycm9yLg0KDQpJIGhhdmUgYSBwYXRjaGVzIGFic3RyYWN0aW5nIHRo aXMsIHdoaWNoIEkgdGhpbmsgaXQgbWFrZXMgaXQgY2xlYW5lci4gSSBjYW4gcHVzaCBpdCBuZXh0 IHdlZWsgZm9yIHJldmlldy4gSeKAmW0gdHJhdmVsaW5nIHRoaXMgd2Vlay4gKElmIHlvdSB3YW50 IHRvIGdldCBhIGdsaW1wc2UgSSBjYW4gcG9pbnQgeW91IHRvIHRoZSBjb2RlKS4gDQoNCj4gDQo+ IEZvciAyLjAsIHRoZXJlIHdpbGwgYmUgYWRkZWQgYSBmdW5jdGlvbiBwb2ludGVyIGZvciBnZXQg cmVwb3J0IGNodW5rIGltcGxlbWVudGF0aW9uLCB3aGVyZSB0aGUgY2xpZW50IGNhbiBhc2sgZm9y IGZ1bGwgY2h1bmsgaW5mb3JtYXRpb24uIFNpbWlsYXJseSBoZXJlLCBjbGllbnQgd2lsbCBmYWls IHRoZSBmdW5jdGlvbiBjYWxsIGlmIHRoZSBkcml2ZSBpcyAxLjIuDQo+IA0KPiBJIGhvcGUgdG8g cG9zdCB0aGUgc21hbGwgMi4wIGlkZW50aWZ5IGltcGxlbWVudGF0aW9uIFRvbW9ycm93IG9yIEZy aWRheSwgYW5kIHRoZW4geW91IGNhbiBwb3N0IHRoZSByZXBvcnQgY2h1bmsgaW1wbGVtZW50YXRp b24gdGhhdCB5b3UgaGF2ZSBkb25lIGlmIHlvdSBsaWtlDQoNClN1cmUuIEkgaGF2ZSBwYXRjaGVz IGltcGxlbWVudGluZyAyLjAgdG9vLCBidXQgeW91IGNhbiBwdXNoIHlvdXIgdmVyc2lvbi4gT25l IHRoaW5nIEnigJlkIGxpa2UgdG8gZ2V0IGluIGlzIGEgZ2VuZXJpYyBnZW9tZXRyeSBzdHJ1Y3R1 cmUgdGhhdCBzaW1wbGlmaWVzIHRoZSBpZGVudGlmeSBjb21tYW5kIGFuZCBwdXRzIHRoZSBsb2dp YyBpbiB0aGUgaWRlbnRpZnkgcGF0aC4gDQoNClRoaXMgbWFrZXMgdGhlIGJhc2UgZ3JvdXAgc3Ry dWN0dXJlIGZyb20gMS4yIGdvIGF3YXkgbWFrZXMgdGhlIDEuMiBhbmQgMi4wIHBhdGhzIGVhc2ll ciB0byBtYWludGFpbiBhdCB0aGUgdGFyZ2V0IGxldmVsLiANCg0KSSBjYW4gcG9pbnQgeW91IHRv IHRoZSBwYXRjaGVzIHRvbW9ycm93IGlmIHlvdSB3YW50IHRvIGFsaWduIHdpdGggaXQuIE90aGVy d2lzZSwgSSBjYW4ganVzdCByZWJhc2UgYW5kIHNlbmQgdGhlbSBuZXh0IHdlZWsuIEJ1dCBwbGVh c2UsIGNvbnNpZGVyIHRoaXMgYmVmb3JlIG1ha2luZyBhIG5ldyBhYnN0cmFjdGlvbiB0byBtYWtl IHRoZSAyIHNwZWNzIGNvZXhpc3QgLSBtb3N0IG9mIHRoZSB3b3JrIGlzIGRvbmUgYWxyZWFkeS4u Lg0KDQoNCj4gV2UgYWxzbyBuZWVkIHRvIHRha2UgYSBsb29rIGF0IHRoZSBuZXcgZXJyb3IgY29k ZXMsIHdoaWNoIGRvZXMgbm90IGFsaWduIHdpdGggdGhlIDEuMiBzcGVjaWZpY2F0aW9uIChub3cg dGhhdCB0aGV5IGFjdHVhbGx5IGZvbGxvdyB0aGUgbnZtZSBzcGVjaWZpY2F0aW9uIDspKQ0KDQpD b29sLiBMZXTigJlzIG1haW50YWluIHRoZSAxLjIgZXJyb3JzIGZvciBjb21wYXRpYmlsaXR5IGFu ZCBtYWtlIHRoZSAyLjAgcGF0aCBjbGVhbiAtIHRoYXQgaXMgbnZtZSBjb21wYXRpYmxlIDspDQoN Ckphdmllci4g