Received: by 2002:a25:f815:0:0:0:0:0 with SMTP id u21csp2830330ybd; Mon, 24 Jun 2019 13:32:01 -0700 (PDT) X-Google-Smtp-Source: APXvYqwi8+OCN5U1OOll02KRiuIRQIewIwnmCqHm1/by3ya95HgpW7OMeNtc93xdppdOc0YZsAjT X-Received: by 2002:a17:90a:f488:: with SMTP id bx8mr26694744pjb.91.1561408321237; Mon, 24 Jun 2019 13:32:01 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1561408321; cv=none; d=google.com; s=arc-20160816; b=D8ylYikGORUow4N282KVUqonczzC1RoeTL0Bd2hQqLnF6Sl2ej/wOSqJ8PImJza3Rj xqMMKeIgBNDjpUNOyMpZwUNhEovTT/ZOG/orkGHhh00btrZfbeJzDXhb7WE4whNhHjQ2 7+eTnQ9xORXQH2Uzn3YCcYbMwB6net9c4C2RYA5f+1ZmRzPsTbnPw8tdg9IbZnqUWFyV hI2MdleTJHURWaoGi6NR4TSkeulTkrHixxQcN2oPILkn5PDdkXd5/3OcGd5wcbzFw+YO zNS+Ly+18uipBtkp1ohDhfc6gBJ3gDljel8w6xsNxhSap973fD9j3DWKlDrHYXyNffVP hRDA== 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 :content-id:content-language:accept-language:in-reply-to:references :message-id:date:thread-index:thread-topic:subject:cc:to:from; bh=ZrHf8X63Bzr+5sPYeDpN5YU5Oo6DkJ7u41/7gQHz/Zo=; b=et328KUM2L4LIjI2yD6QetcdrncKtV7szUiYVwC8tf8+nO5HyKV4DjYZybbURZLmkw DhuG6ESiuZuAEFr+KIXdj9B5H9evnYnPYpnbL1TuO/+Nt34fUCfOLu8ynzYA9EORnGRe Thxde8gHIwuMHBLcaLRUJCl3HtEq5eh2Fa7nc/tvFet5fWx1asd0cyBtDwvGpujEEmvT N+X7oIxapEaHn6kyAL5Qg6L6QSiqYrIvz7N6SRgKPI2zQy73zE3jJHkhieVYLViqLCSd fV1/zHrbGFy5vt6ofYjZ8imTm/NZiRnn4Sk/XP9HrQS2uWVz9YIlRwte7IRFdmNo1t4O Hg6Q== ARC-Authentication-Results: i=1; mx.google.com; spf=pass (google.com: best guess record for domain of linux-bluetooth-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-bluetooth-owner@vger.kernel.org; dmarc=fail (p=NONE sp=NONE dis=NONE) header.from=intel.com Return-Path: Received: from vger.kernel.org (vger.kernel.org. [209.132.180.67]) by mx.google.com with ESMTP id 4si11675375pgo.198.2019.06.24.13.31.31; Mon, 24 Jun 2019 13:32:01 -0700 (PDT) Received-SPF: pass (google.com: best guess record for domain of linux-bluetooth-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) client-ip=209.132.180.67; Authentication-Results: mx.google.com; spf=pass (google.com: best guess record for domain of linux-bluetooth-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-bluetooth-owner@vger.kernel.org; dmarc=fail (p=NONE sp=NONE dis=NONE) header.from=intel.com Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1728428AbfFXQrj (ORCPT + 99 others); Mon, 24 Jun 2019 12:47:39 -0400 Received: from mga05.intel.com ([192.55.52.43]:26055 "EHLO mga05.intel.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1728420AbfFXQrj (ORCPT ); Mon, 24 Jun 2019 12:47:39 -0400 X-Amp-Result: SKIPPED(no attachment in message) X-Amp-File-Uploaded: False Received: from fmsmga007.fm.intel.com ([10.253.24.52]) by fmsmga105.fm.intel.com with ESMTP/TLS/DHE-RSA-AES256-GCM-SHA384; 24 Jun 2019 09:47:38 -0700 X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="5.63,412,1557212400"; d="scan'208";a="163370549" Received: from orsmsx101.amr.corp.intel.com ([10.22.225.128]) by fmsmga007.fm.intel.com with ESMTP; 24 Jun 2019 09:47:37 -0700 Received: from orsmsx154.amr.corp.intel.com (10.22.226.12) by ORSMSX101.amr.corp.intel.com (10.22.225.128) with Microsoft SMTP Server (TLS) id 14.3.439.0; Mon, 24 Jun 2019 09:47:38 -0700 Received: from orsmsx103.amr.corp.intel.com ([169.254.5.135]) by ORSMSX154.amr.corp.intel.com ([169.254.11.187]) with mapi id 14.03.0439.000; Mon, 24 Jun 2019 09:47:38 -0700 From: "Gix, Brian" To: "michal.lowas-rzechonek@silvair.com" , "linux-bluetooth@vger.kernel.org" CC: "Stotland, Inga" Subject: Re: [PATCH BlueZ v3 1/2] mesh: Move HCI handling to mesh-io-generic Thread-Topic: [PATCH BlueZ v3 1/2] mesh: Move HCI handling to mesh-io-generic Thread-Index: AQHVKl8M/CxDZyvtbUafT818g06+7KareamA Date: Mon, 24 Jun 2019 16:47:37 +0000 Message-ID: References: <20190624073229.8652-1-michal.lowas-rzechonek@silvair.com> <20190624073229.8652-2-michal.lowas-rzechonek@silvair.com> In-Reply-To: <20190624073229.8652-2-michal.lowas-rzechonek@silvair.com> Accept-Language: en-US Content-Language: en-US X-MS-Has-Attach: X-MS-TNEF-Correlator: x-originating-ip: [10.254.85.199] Content-Type: text/plain; charset="utf-8" Content-ID: <1B3F1B7A8C5DC04EA7BEEAB068237BE7@intel.com> Content-Transfer-Encoding: base64 MIME-Version: 1.0 Sender: linux-bluetooth-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-bluetooth@vger.kernel.org QXBwbGllZCwgVGhhbmtzLg0KDQpPbiBNb24sIDIwMTktMDYtMjQgYXQgMDk6MzIgKzAyMDAsIE1p Y2hhxYIgTG93YXMtUnplY2hvbmVrIHdyb3RlOg0KPiBUaGlzIHBhdGNoIHNlcGFyYXRlcyAnbWVz aCcgbW9kdWxlIGZyb20gJ21lc2hfaW8nLCBwYXJ0aWN1bGFybHkNCj4gcmVnYXJkaW5nIGNvbmZp Z3VyYXRpb24gYW5kIGluaXRpYWxpemF0aW9uLg0KPiANCj4gTWFpbiBjb2RlIGlzIG5vIGxvbmdl ciBhd2FyZSBvZiBNR01UIGFuZCBIQ0kgdXNhZ2UgLSBxdWVyeWluZw0KPiBhdmFpbGFibGUNCj4g SENJIGludGVyZmFjZXMgbm93IGhhcHBlbnMgaW4gbWVzaC1pby1nZW5lcmljLg0KPiANCj4gTUdN VCBjb2RlIGlzIG5vdyBleHRyYWN0ZWQgaW50byBtZXNoLW1nbXQgbW9kdWxlLCB3aGljaCBtZXNo LWlvLQ0KPiBnZW5lcmljDQo+IHVzZXMgdG8gcXVlcnkgaW50ZXJmYWNlcy4NCj4gLS0tDQo+ICBN YWtlZmlsZS5tZXNoICAgICAgICAgIHwgICAxICsNCj4gIG1lc2gvbWFpbi5jICAgICAgICAgICAg fCAgIDQgKy0NCj4gIG1lc2gvbWVzaC1pby1hcGkuaCAgICAgfCAgIDMgKy0NCj4gIG1lc2gvbWVz aC1pby1nZW5lcmljLmMgfCAgNjMgKysrKysrKystLS0tLQ0KPiAgbWVzaC9tZXNoLWlvLmMgICAg ICAgICB8ICAxNSArKy0NCj4gIG1lc2gvbWVzaC1pby5oICAgICAgICAgfCAgIDIgKy0NCj4gIG1l c2gvbWVzaC1tZ210LmMgICAgICAgfCAyMDQNCj4gKysrKysrKysrKysrKysrKysrKysrKysrKysr KysrKysrKysrKysrKysNCj4gIG1lc2gvbWVzaC1tZ210LmggICAgICAgfCAgMjMgKysrKysNCj4g IG1lc2gvbWVzaC5jICAgICAgICAgICAgfCAxODkgKysrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0NCj4gIG1lc2gvbWVzaC5oICAgICAgICAgICAgfCAgIDQgKy0NCj4gIDEwIGZp bGVzIGNoYW5nZWQsIDI5NCBpbnNlcnRpb25zKCspLCAyMTQgZGVsZXRpb25zKC0pDQo+ICBjcmVh dGUgbW9kZSAxMDA2NDQgbWVzaC9tZXNoLW1nbXQuYw0KPiAgY3JlYXRlIG1vZGUgMTAwNjQ0IG1l c2gvbWVzaC1tZ210LmgNCj4gDQo+IGRpZmYgLS1naXQgYS9NYWtlZmlsZS5tZXNoIGIvTWFrZWZp bGUubWVzaA0KPiBpbmRleCBiMWYxNGU0NzcuLjFhY2U1MDdhZiAxMDA2NDQNCj4gLS0tIGEvTWFr ZWZpbGUubWVzaA0KPiArKysgYi9NYWtlZmlsZS5tZXNoDQo+IEBAIC0xMiw2ICsxMiw3IEBAIGVu ZGlmDQo+ICBtZXNoX3NvdXJjZXMgPSBtZXNoL21lc2guaCBtZXNoL21lc2guYyBcDQo+ICAJCQkJ bWVzaC9uZXQta2V5cy5oIG1lc2gvbmV0LWtleXMuYyBcDQo+ICAJCQkJbWVzaC9tZXNoLWlvLmgg bWVzaC9tZXNoLWlvLmMgXA0KPiArCQkJCW1lc2gvbWVzaC1tZ210LmMgbWVzaC9tZXNoLW1nbXQu aCBcDQo+ICAJCQkJbWVzaC9lcnJvci5oIG1lc2gvbWVzaC1pby1hcGkuaCBcDQo+ICAJCQkJbWVz aC9tZXNoLWlvLWdlbmVyaWMuaCBcDQo+ICAJCQkJbWVzaC9tZXNoLWlvLWdlbmVyaWMuYyBcDQo+ IGRpZmYgLS1naXQgYS9tZXNoL21haW4uYyBiL21lc2gvbWFpbi5jDQo+IGluZGV4IDNjZWNkOGZi Zi4uMjYyZTNkYTQ4IDEwMDY0NA0KPiAtLS0gYS9tZXNoL21haW4uYw0KPiArKysgYi9tZXNoL21h aW4uYw0KPiBAQCAtMzUsNiArMzUsNyBAQA0KPiAgDQo+ICAjaW5jbHVkZSAibWVzaC9tZXNoLmgi DQo+ICAjaW5jbHVkZSAibWVzaC9kYnVzLmgiDQo+ICsjaW5jbHVkZSAibWVzaC9tZXNoLWlvLmgi DQo+ICANCj4gIHN0YXRpYyBjb25zdCBzdHJ1Y3Qgb3B0aW9uIG1haW5fb3B0aW9uc1tdID0gew0K PiAgCXsgImluZGV4IiwJcmVxdWlyZWRfYXJndW1lbnQsCU5VTEwsICdpJyB9LA0KPiBAQCAtMTY2 LDcgKzE2Nyw4IEBAIGludCBtYWluKGludCBhcmdjLCBjaGFyICphcmd2W10pDQo+ICAJCX0NCj4g IAl9DQo+ICANCj4gLQlpZiAoIW1lc2hfaW5pdChpbmRleCwgY29uZmlnX2RpcikpIHsNCj4gKw0K PiArCWlmICghbWVzaF9pbml0KGNvbmZpZ19kaXIsIE1FU0hfSU9fVFlQRV9HRU5FUklDLCAmaW5k ZXgpKSB7DQo+ICAJCWxfZXJyb3IoIkZhaWxlZCB0byBpbml0aWFsaXplIG1lc2giKTsNCj4gIAkJ c3RhdHVzID0gRVhJVF9GQUlMVVJFOw0KPiAgCQlnb3RvIGRvbmU7DQo+IGRpZmYgLS1naXQgYS9t ZXNoL21lc2gtaW8tYXBpLmggYi9tZXNoL21lc2gtaW8tYXBpLmgNCj4gaW5kZXggYWNmMTI0NDVk Li40Y2RmMWY4MGEgMTAwNjQ0DQo+IC0tLSBhL21lc2gvbWVzaC1pby1hcGkuaA0KPiArKysgYi9t ZXNoL21lc2gtaW8tYXBpLmgNCj4gQEAgLTE5LDcgKzE5LDcgQEANCj4gIA0KPiAgc3RydWN0IG1l c2hfaW9fcHJpdmF0ZTsNCj4gIA0KPiAtdHlwZWRlZiBib29sICgqbWVzaF9pb19pbml0X3QpKHVp bnQxNl90IGluZGV4LCBzdHJ1Y3QgbWVzaF9pbyAqaW8pOw0KPiArdHlwZWRlZiBib29sICgqbWVz aF9pb19pbml0X3QpKHN0cnVjdCBtZXNoX2lvICppbywgdm9pZCAqb3B0cyk7DQo+ICB0eXBlZGVm IGJvb2wgKCptZXNoX2lvX2Rlc3Ryb3lfdCkoc3RydWN0IG1lc2hfaW8gKmlvKTsNCj4gIHR5cGVk ZWYgYm9vbCAoKm1lc2hfaW9fY2Fwc190KShzdHJ1Y3QgbWVzaF9pbyAqaW8sIHN0cnVjdA0KPiBt ZXNoX2lvX2NhcHMgKmNhcHMpOw0KPiAgdHlwZWRlZiBib29sICgqbWVzaF9pb19zZW5kX3QpKHN0 cnVjdCBtZXNoX2lvICppbywNCj4gQEAgLTQ3LDcgKzQ3LDYgQEAgc3RydWN0IG1lc2hfaW9fYXBp IHsNCj4gIA0KPiAgc3RydWN0IG1lc2hfaW8gew0KPiAgCWVudW0gbWVzaF9pb190eXBlCQl0eXBl Ow0KPiAtCXVpbnQxNl90CQkJaW5kZXg7DQo+ICAJY29uc3Qgc3RydWN0IG1lc2hfaW9fYXBpCSph cGk7DQo+ICAJc3RydWN0IG1lc2hfaW9fcHJpdmF0ZQkJKnB2dDsNCj4gIH07DQo+IGRpZmYgLS1n aXQgYS9tZXNoL21lc2gtaW8tZ2VuZXJpYy5jIGIvbWVzaC9tZXNoLWlvLWdlbmVyaWMuYw0KPiBp bmRleCA3NTZkY2VhYmMuLjQyYWFhMDk0NyAxMDA2NDQNCj4gLS0tIGEvbWVzaC9tZXNoLWlvLWdl bmVyaWMuYw0KPiArKysgYi9tZXNoL21lc2gtaW8tZ2VuZXJpYy5jDQo+IEBAIC0yNiw3ICsyNiwx MCBAQA0KPiAgDQo+ICAjaW5jbHVkZSAibW9uaXRvci9idC5oIg0KPiAgI2luY2x1ZGUgInNyYy9z aGFyZWQvaGNpLmgiDQo+ICsjaW5jbHVkZSAibGliL2JsdWV0b290aC5oIg0KPiArI2luY2x1ZGUg ImxpYi9tZ210LmgiDQo+ICANCj4gKyNpbmNsdWRlICJtZXNoL21lc2gtbWdtdC5oIg0KPiAgI2lu Y2x1ZGUgIm1lc2gvbWVzaC1pby5oIg0KPiAgI2luY2x1ZGUgIm1lc2gvbWVzaC1pby1hcGkuaCIN Cj4gICNpbmNsdWRlICJtZXNoL21lc2gtaW8tZ2VuZXJpYy5oIg0KPiBAQCAtMjc4LDQwICsyODEs NTIgQEAgc3RhdGljIHZvaWQgY29uZmlndXJlX2hjaShzdHJ1Y3QNCj4gbWVzaF9pb19wcml2YXRl ICppbykNCj4gIAkJCQlzaXplb2YoY21kKSwgaGNpX2dlbmVyaWNfY2FsbGJhY2ssDQo+IE5VTEws IE5VTEwpOw0KPiAgfQ0KPiAgDQo+IC1zdGF0aWMgYm9vbCBkZXZfaW5pdCh1aW50MTZfdCBpbmRl eCwgc3RydWN0IG1lc2hfaW8gKmlvKQ0KPiArc3RhdGljIGJvb2wgaGNpX2luaXQoc3RydWN0IG1l c2hfaW8gKmlvKQ0KPiAgew0KPiAtCXN0cnVjdCBtZXNoX2lvX3ByaXZhdGUgKnRtcDsNCj4gLQ0K PiAtCWlmICghaW8gfHwgaW8tPnB2dCkNCj4gKwlpby0+cHZ0LT5oY2kgPSBidF9oY2lfbmV3X3Vz ZXJfY2hhbm5lbChpby0+cHZ0LT5pbmRleCk7DQo+ICsJaWYgKCFpby0+cHZ0LT5oY2kpIHsNCj4g KwkJbF9lcnJvcigiRmFpbGVkIHRvIHN0YXJ0IG1lc2ggaW8gKGhjaSAldSkiLCBpby0+cHZ0LQ0K PiA+aW5kZXgpOw0KPiAgCQlyZXR1cm4gZmFsc2U7DQo+ICsJfQ0KPiAgDQo+IC0JdG1wID0gbF9u ZXcoc3RydWN0IG1lc2hfaW9fcHJpdmF0ZSwgMSk7DQo+ICsJY29uZmlndXJlX2hjaShpby0+cHZ0 KTsNCj4gIA0KPiAtCWlmICh0bXAgPT0gTlVMTCkNCj4gLQkJcmV0dXJuIGZhbHNlOw0KPiArCWJ0 X2hjaV9yZWdpc3Rlcihpby0+cHZ0LT5oY2ksIEJUX0hDSV9FVlRfTEVfTUVUQV9FVkVOVCwNCj4g KwkJCQkJCWV2ZW50X2NhbGxiYWNrLCBpbywNCj4gTlVMTCk7DQo+ICsNCj4gKwlsX2RlYnVnKCJT dGFydGVkIG1lc2ggb24gaGNpICV1IiwgaW8tPnB2dC0+aW5kZXgpOw0KPiArCXJldHVybiB0cnVl Ow0KPiArfQ0KPiArDQo+ICtzdGF0aWMgdm9pZCByZWFkX2luZm8oaW50IGluZGV4LCB2b2lkICp1 c2VyX2RhdGEpDQo+ICt7DQo+ICsJc3RydWN0IG1lc2hfaW8gKmlvID0gdXNlcl9kYXRhOw0KPiAg DQo+IC0JdG1wLT5yeF9yZWdzID0gbF9xdWV1ZV9uZXcoKTsNCj4gLQl0bXAtPnR4X3BrdHMgPSBs X3F1ZXVlX25ldygpOw0KPiAtCWlmICghdG1wLT5yeF9yZWdzIHx8ICF0bXAtPnR4X3BrdHMpDQo+ IC0JCWdvdG8gZmFpbDsNCj4gKwlpZiAoaW8tPnB2dC0+aW5kZXggIT0gTUdNVF9JTkRFWF9OT05F ICYmDQo+ICsJCQkJCWluZGV4ICE9IGlvLT5wdnQtPmluZGV4KSB7DQo+ICsJCWxfZGVidWcoIkln bm9yZSBpbmRleCAlZCIsIGluZGV4KTsNCj4gKwkJcmV0dXJuOw0KPiArCX0NCj4gIA0KPiAtCXRt cC0+aGNpID0gYnRfaGNpX25ld191c2VyX2NoYW5uZWwoaW5kZXgpOw0KPiAtCWlmICghdG1wLT5o Y2kpDQo+IC0JCWdvdG8gZmFpbDsNCj4gKwlpby0+cHZ0LT5pbmRleCA9IGluZGV4Ow0KPiArCWhj aV9pbml0KGlvKTsNCj4gK30NCj4gIA0KPiAtCWNvbmZpZ3VyZV9oY2kodG1wKTsNCj4gK3N0YXRp YyBib29sIGRldl9pbml0KHN0cnVjdCBtZXNoX2lvICppbywgdm9pZCAqb3B0cykNCj4gK3sNCj4g KwlpZiAoIWlvIHx8IGlvLT5wdnQpDQo+ICsJCXJldHVybiBmYWxzZTsNCj4gIA0KPiAtCWJ0X2hj aV9yZWdpc3Rlcih0bXAtPmhjaSwgQlRfSENJX0VWVF9MRV9NRVRBX0VWRU5ULA0KPiAtCQkJCQkJ ZXZlbnRfY2FsbGJhY2ssIGlvLA0KPiBOVUxMKTsNCj4gKwlpby0+cHZ0ID0gbF9uZXcoc3RydWN0 IG1lc2hfaW9fcHJpdmF0ZSwgMSk7DQo+ICsJaW8tPnB2dC0+aW5kZXggPSAqKGludCAqKW9wdHM7 DQo+ICANCj4gLQlpby0+cHZ0ID0gdG1wOw0KPiAtCXJldHVybiB0cnVlOw0KPiArCWlvLT5wdnQt PnJ4X3JlZ3MgPSBsX3F1ZXVlX25ldygpOw0KPiArCWlvLT5wdnQtPnR4X3BrdHMgPSBsX3F1ZXVl X25ldygpOw0KPiAgDQo+IC1mYWlsOg0KPiAtCWxfcXVldWVfZGVzdHJveSh0bXAtPnJ4X3JlZ3Ms IGxfZnJlZSk7DQo+IC0JbF9xdWV1ZV9kZXN0cm95KHRtcC0+dHhfcGt0cywgbF9mcmVlKTsNCj4g LQlsX2ZyZWUodG1wKTsNCj4gLQlyZXR1cm4gZmFsc2U7DQo+ICsJaWYgKGlvLT5wdnQtPmluZGV4 ID09IE1HTVRfSU5ERVhfTk9ORSkNCj4gKwkJcmV0dXJuIG1lc2hfbWdtdF9saXN0KHJlYWRfaW5m bywgaW8pOw0KPiArCWVsc2UNCj4gKwkJcmV0dXJuIGhjaV9pbml0KGlvKTsNCj4gIH0NCj4gIA0K PiAgc3RhdGljIGJvb2wgZGV2X2Rlc3Ryb3koc3RydWN0IG1lc2hfaW8gKmlvKQ0KPiBkaWZmIC0t Z2l0IGEvbWVzaC9tZXNoLWlvLmMgYi9tZXNoL21lc2gtaW8uYw0KPiBpbmRleCAzNzE1M2VhOWQu LjYyYThjMGUyYyAxMDA2NDQNCj4gLS0tIGEvbWVzaC9tZXNoLWlvLmMNCj4gKysrIGIvbWVzaC9t ZXNoLWlvLmMNCj4gQEAgLTQ0LDIxICs0NCwyMCBAQCBzdGF0aWMgYm9vbCBtYXRjaF9ieV9pbyhj b25zdCB2b2lkICphLCBjb25zdCB2b2lkDQo+ICpiKQ0KPiAgCXJldHVybiBhID09IGI7DQo+ICB9 DQo+ICANCj4gLXN0YXRpYyBib29sIG1hdGNoX2J5X2luZGV4KGNvbnN0IHZvaWQgKmEsIGNvbnN0 IHZvaWQgKmIpDQo+ICtzdGF0aWMgYm9vbCBtYXRjaF9ieV90eXBlKGNvbnN0IHZvaWQgKmEsIGNv bnN0IHZvaWQgKmIpDQo+ICB7DQo+ICAJY29uc3Qgc3RydWN0IG1lc2hfaW8gKmlvID0gYTsNCj4g Kwljb25zdCBlbnVtIG1lc2hfaW9fdHlwZSB0eXBlID0gTF9QVFJfVE9fVUlOVChiKTsNCj4gIA0K PiAtCXJldHVybiBpby0+aW5kZXggPT0gTF9QVFJfVE9fVUlOVChiKTsNCj4gKwlyZXR1cm4gaW8t PnR5cGUgPT0gdHlwZTsNCj4gIH0NCj4gIA0KPiAtc3RydWN0IG1lc2hfaW8gKm1lc2hfaW9fbmV3 KHVpbnQxNl90IGluZGV4LCBlbnVtIG1lc2hfaW9fdHlwZSB0eXBlKQ0KPiArc3RydWN0IG1lc2hf aW8gKm1lc2hfaW9fbmV3KGVudW0gbWVzaF9pb190eXBlIHR5cGUsIHZvaWQgKm9wdHMpDQo+ICB7 DQo+ICAJY29uc3Qgc3RydWN0IG1lc2hfaW9fYXBpICphcGkgPSBOVUxMOw0KPiAgCXN0cnVjdCBt ZXNoX2lvICppbzsNCj4gIAl1aW50MTZfdCBpOw0KPiAgDQo+IC0JbF9pbmZvKCIlcyAlZFxuIiwg X19mdW5jX18sIHR5cGUpOw0KPiAtDQo+ICAJZm9yIChpID0gMDsgaSA8IExfQVJSQVlfU0laRSh0 YWJsZSk7IGkrKykgew0KPiAgCQlpZiAodGFibGVbaV0udHlwZSA9PSB0eXBlKSB7DQo+ICAJCQlh cGkgPSB0YWJsZVtpXS5hcGk7DQo+IEBAIC02Niw3ICs2NSw3IEBAIHN0cnVjdCBtZXNoX2lvICpt ZXNoX2lvX25ldyh1aW50MTZfdCBpbmRleCwgZW51bQ0KPiBtZXNoX2lvX3R5cGUgdHlwZSkNCj4g IAkJfQ0KPiAgCX0NCj4gIA0KPiAtCWlvID0gbF9xdWV1ZV9maW5kKGlvX2xpc3QsIG1hdGNoX2J5 X2luZGV4LA0KPiBMX1VJTlRfVE9fUFRSKGluZGV4KSk7DQo+ICsJaW8gPSBsX3F1ZXVlX2ZpbmQo aW9fbGlzdCwgbWF0Y2hfYnlfdHlwZSwgTF9VSU5UX1RPX1BUUih0eXBlKSk7DQo+ICANCj4gIAlp ZiAoIWFwaSB8fCAhYXBpLT5pbml0IHx8IGlvKQ0KPiAgCQlyZXR1cm4gTlVMTDsNCj4gQEAgLTc3 LDkgKzc2LDkgQEAgc3RydWN0IG1lc2hfaW8gKm1lc2hfaW9fbmV3KHVpbnQxNl90IGluZGV4LCBl bnVtDQo+IG1lc2hfaW9fdHlwZSB0eXBlKQ0KPiAgCQlyZXR1cm4gTlVMTDsNCj4gIA0KPiAgCWlv LT50eXBlID0gdHlwZTsNCj4gLQlpby0+aW5kZXggPSBpbmRleDsNCj4gKw0KPiAgCWlvLT5hcGkg PSBhcGk7DQo+IC0JaWYgKCFhcGktPmluaXQoaW5kZXgsIGlvKSkNCj4gKwlpZiAoIWFwaS0+aW5p dChpbywgb3B0cykpDQo+ICAJCWdvdG8gZmFpbDsNCj4gIA0KPiAgCWlmICghaW9fbGlzdCkNCj4g ZGlmZiAtLWdpdCBhL21lc2gvbWVzaC1pby5oIGIvbWVzaC9tZXNoLWlvLmgNCj4gaW5kZXggNzFk M2NiOTgwLi42NTg1MjA1YzcgMTAwNjQ0DQo+IC0tLSBhL21lc2gvbWVzaC1pby5oDQo+ICsrKyBi L21lc2gvbWVzaC1pby5oDQo+IEBAIC04MCw3ICs4MCw3IEBAIHR5cGVkZWYgdm9pZCAoKm1lc2hf aW9fcmVjdl9mdW5jX3QpKHZvaWQNCj4gKnVzZXJfZGF0YSwNCj4gIHR5cGVkZWYgdm9pZCAoKm1l c2hfaW9fc3RhdHVzX2Z1bmNfdCkodm9pZCAqdXNlcl9kYXRhLCBpbnQgc3RhdHVzLA0KPiAgCQkJ CQkJCXVpbnQ4X3QNCj4gZmlsdGVyX2lkKTsNCj4gIA0KPiAtc3RydWN0IG1lc2hfaW8gKm1lc2hf aW9fbmV3KHVpbnQxNl90IGluZGV4LCBlbnVtIG1lc2hfaW9fdHlwZSB0eXBlKTsNCj4gK3N0cnVj dCBtZXNoX2lvICptZXNoX2lvX25ldyhlbnVtIG1lc2hfaW9fdHlwZSB0eXBlLCB2b2lkICpvcHRz KTsNCj4gIHZvaWQgbWVzaF9pb19kZXN0cm95KHN0cnVjdCBtZXNoX2lvICppbyk7DQo+ICANCj4g IGJvb2wgbWVzaF9pb19nZXRfY2FwcyhzdHJ1Y3QgbWVzaF9pbyAqaW8sIHN0cnVjdCBtZXNoX2lv X2NhcHMNCj4gKmNhcHMpOw0KPiBkaWZmIC0tZ2l0IGEvbWVzaC9tZXNoLW1nbXQuYyBiL21lc2gv bWVzaC1tZ210LmMNCj4gbmV3IGZpbGUgbW9kZSAxMDA2NDQNCj4gaW5kZXggMDAwMDAwMDAwLi4y NzI3MmQ0ZDINCj4gLS0tIC9kZXYvbnVsbA0KPiArKysgYi9tZXNoL21lc2gtbWdtdC5jDQo+IEBA IC0wLDAgKzEsMjA0IEBADQo+ICsvKg0KPiArICoNCj4gKyAqICBCbHVlWiAtIEJsdWV0b290aCBw cm90b2NvbCBzdGFjayBmb3IgTGludXgNCj4gKyAqDQo+ICsgKiAgQ29weXJpZ2h0IChDKSAyMDE5 ICBTSUxWQUlSIHNwLiB6IG8uby4gQWxsIHJpZ2h0cyByZXNlcnZlZC4NCj4gKyAqDQo+ICsgKg0K PiArICogIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0 ZSBpdCBhbmQvb3INCj4gKyAqICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUg TGVzc2VyIEdlbmVyYWwgUHVibGljDQo+ICsgKiAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhl IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyDQo+ICsgKiAgdmVyc2lvbiAyLjEgb2Yg dGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyDQo+IHZlcnNpb24uDQo+ ICsgKg0KPiArICogIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0 IGl0IHdpbGwgYmUgdXNlZnVsLA0KPiArICogIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0 aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mDQo+ICsgKiAgTUVSQ0hBTlRBQklMSVRZ IG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQ0KPiBHTlUNCj4g KyAqICBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLg0KPiAr ICoNCj4gKyAqLw0KPiArDQo+ICsjaWZkZWYgSEFWRV9DT05GSUdfSA0KPiArI2luY2x1ZGUgPGNv bmZpZy5oPg0KPiArI2VuZGlmDQo+ICsNCj4gKyNpbmNsdWRlICJsaWIvYmx1ZXRvb3RoLmgiDQo+ ICsjaW5jbHVkZSAibGliL21nbXQuaCINCj4gKyNpbmNsdWRlICJzcmMvc2hhcmVkL21nbXQuaCIN Cj4gKw0KPiArI2luY2x1ZGUgImVsbC9xdWV1ZS5oIg0KPiArI2luY2x1ZGUgImVsbC9sb2cuaCIN Cj4gKyNpbmNsdWRlICJlbGwvdXRpbC5oIg0KPiArDQo+ICsjaW5jbHVkZSAibWVzaC9tZXNoLW1n bXQuaCINCj4gKw0KPiArc3RydWN0IHJlYWRfaW5mb19yZWcgew0KPiArCW1lc2hfbWdtdF9yZWFk X2luZm9fZnVuY190IGNiOw0KPiArCXZvaWQgKnVzZXJfZGF0YTsNCj4gK307DQo+ICsNCj4gK3N0 cnVjdCByZWFkX2luZm9fcmVxIHsNCj4gKwlpbnQgaW5kZXg7DQo+ICsJc3RydWN0IG1lc2hfaW8g KmlvOw0KPiArfTsNCj4gKw0KPiArc3RhdGljIHN0cnVjdCBtZ210ICptZ210X21lc2g7DQo+ICtz dGF0aWMgc3RydWN0IGxfcXVldWUgKmNvbnRyb2xsZXJzOw0KPiArc3RhdGljIHN0cnVjdCBsX3F1 ZXVlICpyZWFkX2luZm9fcmVnczsNCj4gKw0KPiArc3RhdGljIGJvb2wgc2ltcGxlX21hdGNoKGNv bnN0IHZvaWQgKmEsIGNvbnN0IHZvaWQgKmIpDQo+ICt7DQo+ICsJcmV0dXJuIGEgPT0gYjsNCj4g K30NCj4gKw0KPiArc3RhdGljIHZvaWQgcHJvY2Vzc19yZWFkX2luZm9fcmVxKHZvaWQgKmRhdGEs IHZvaWQgKnVzZXJfZGF0YSkNCj4gK3sNCj4gKwlzdHJ1Y3QgcmVhZF9pbmZvX3JlZyAqcmVnID0g ZGF0YTsNCj4gKwlpbnQgaW5kZXggPSBMX1BUUl9UT19VSU5UKHVzZXJfZGF0YSk7DQo+ICsNCj4g KwlyZWctPmNiKGluZGV4LCByZWctPnVzZXJfZGF0YSk7DQo+ICt9DQo+ICsNCj4gK3N0YXRpYyB2 b2lkIHJlYWRfaW5mb19jYih1aW50OF90IHN0YXR1cywgdWludDE2X3QgbGVuZ3RoLA0KPiArCQkJ CQljb25zdCB2b2lkICpwYXJhbSwgdm9pZA0KPiAqdXNlcl9kYXRhKQ0KPiArew0KPiArCWludCBp bmRleCA9IExfUFRSX1RPX1VJTlQodXNlcl9kYXRhKTsNCj4gKwljb25zdCBzdHJ1Y3QgbWdtdF9y cF9yZWFkX2luZm8gKnJwID0gcGFyYW07DQo+ICsJdWludDMyX3QgY3VycmVudF9zZXR0aW5ncywg c3VwcG9ydGVkX3NldHRpbmdzOw0KPiArDQo+ICsJbF9kZWJ1ZygiaGNpICV1IHN0YXR1cyAweCUw MngiLCBpbmRleCwgc3RhdHVzKTsNCj4gKw0KPiArCWlmIChzdGF0dXMgIT0gTUdNVF9TVEFUVVNf U1VDQ0VTUykgew0KPiArCQlsX2Vycm9yKCJGYWlsZWQgdG8gcmVhZCBpbmZvIGZvciBoY2kgaW5k ZXggJXU6ICVzDQo+ICgweCUwMngpIiwNCj4gKwkJCQlpbmRleCwgbWdtdF9lcnJzdHIoc3RhdHVz KSwgc3RhdHVzKTsNCj4gKwkJcmV0dXJuOw0KPiArCX0NCj4gKw0KPiArCWlmIChsZW5ndGggPCBz aXplb2YoKnJwKSkgew0KPiArCQlsX2Vycm9yKCJSZWFkIGluZm8gcmVzcG9uc2UgdG9vIHNob3J0 Iik7DQo+ICsJCXJldHVybjsNCj4gKwl9DQo+ICsNCj4gKwljdXJyZW50X3NldHRpbmdzID0gYnRv aGwocnAtPmN1cnJlbnRfc2V0dGluZ3MpOw0KPiArCXN1cHBvcnRlZF9zZXR0aW5ncyA9IGJ0b2hs KHJwLT5zdXBwb3J0ZWRfc2V0dGluZ3MpOw0KPiArDQo+ICsJbF9kZWJ1Zygic2V0dGluZ3M6IHN1 cHAgJTguOHggY3VyciAlOC44eCIsDQo+ICsJCQkJCXN1cHBvcnRlZF9zZXR0aW5ncywNCj4gY3Vy cmVudF9zZXR0aW5ncyk7DQo+ICsNCj4gKwlpZiAoY3VycmVudF9zZXR0aW5ncyAmIE1HTVRfU0VU VElOR19QT1dFUkVEKSB7DQo+ICsJCWxfaW5mbygiQ29udHJvbGxlciBoY2kgJXUgaXMgaW4gdXNl IiwgaW5kZXgpOw0KPiArCQlyZXR1cm47DQo+ICsJfQ0KPiArDQo+ICsJaWYgKCEoc3VwcG9ydGVk X3NldHRpbmdzICYgTUdNVF9TRVRUSU5HX0xFKSkgew0KPiArCQlsX2luZm8oIkNvbnRyb2xsZXIg aGNpICV1IGRvZXMgbm90IHN1cHBvcnQgTEUiLCBpbmRleCk7DQo+ICsJCXJldHVybjsNCj4gKwl9 DQo+ICsNCj4gKwlsX3F1ZXVlX2ZvcmVhY2gocmVhZF9pbmZvX3JlZ3MsIHByb2Nlc3NfcmVhZF9p bmZvX3JlcSwNCj4gKwkJCQkJCQlMX1VJTlRfVE9fUFRSKGkNCj4gbmRleCkpOw0KPiArfQ0KPiAr DQo+ICtzdGF0aWMgdm9pZCBpbmRleF9hZGRlZCh1aW50MTZfdCBpbmRleCwgdWludDE2X3QgbGVu Z3RoLCBjb25zdCB2b2lkDQo+ICpwYXJhbSwNCj4gKwkJCQkJCQl2b2lkDQo+ICp1c2VyX2RhdGEp DQo+ICt7DQo+ICsJaWYgKGxfcXVldWVfZmluZChjb250cm9sbGVycywgc2ltcGxlX21hdGNoLA0K PiBMX1VJTlRfVE9fUFRSKGluZGV4KSkpDQo+ICsJCXJldHVybjsNCj4gKw0KPiArCWxfcXVldWVf cHVzaF90YWlsKGNvbnRyb2xsZXJzLCBMX1VJTlRfVE9fUFRSKGluZGV4KSk7DQo+ICsNCj4gKwlp ZiAobWdtdF9zZW5kKG1nbXRfbWVzaCwgTUdNVF9PUF9SRUFEX0lORk8sIGluZGV4LCAwLCBOVUxM LA0KPiArCQkJcmVhZF9pbmZvX2NiLCBMX1VJTlRfVE9fUFRSKGluZGV4KSwgTlVMTCkgIT0gMCkN Cj4gKwkJcmV0dXJuOw0KPiArDQo+ICsJbF9xdWV1ZV9yZW1vdmUoY29udHJvbGxlcnMsIExfVUlO VF9UT19QVFIoaW5kZXgpKTsNCj4gK30NCj4gKw0KPiArc3RhdGljIHZvaWQgaW5kZXhfcmVtb3Zl ZCh1aW50MTZfdCBpbmRleCwgdWludDE2X3QgbGVuZ3RoLCBjb25zdA0KPiB2b2lkICpwYXJhbSwN Cj4gKwkJCQkJCQl2b2lkDQo+ICp1c2VyX2RhdGEpDQo+ICt7DQo+ICsJbF93YXJuKCJIY2kgZGV2 ICU0LjR4IHJlbW92ZWQiLCBpbmRleCk7DQo+ICsJbF9xdWV1ZV9yZW1vdmUoY29udHJvbGxlcnMs IExfVUlOVF9UT19QVFIoaW5kZXgpKTsNCj4gK30NCj4gKw0KPiArc3RhdGljIHZvaWQgcmVhZF9p bmRleF9saXN0X2NiKHVpbnQ4X3Qgc3RhdHVzLCB1aW50MTZfdCBsZW5ndGgsDQo+ICsJCQkJCWNv bnN0IHZvaWQgKnBhcmFtLCB2b2lkDQo+ICp1c2VyX2RhdGEpDQo+ICt7DQo+ICsJY29uc3Qgc3Ry dWN0IG1nbXRfcnBfcmVhZF9pbmRleF9saXN0ICpycCA9IHBhcmFtOw0KPiArCXVpbnQxNl90IG51 bTsNCj4gKwlpbnQgaTsNCj4gKw0KPiArCWlmIChzdGF0dXMgIT0gTUdNVF9TVEFUVVNfU1VDQ0VT Uykgew0KPiArCQlsX2Vycm9yKCJGYWlsZWQgdG8gcmVhZCBpbmRleCBsaXN0OiAlcyAoMHglMDJ4 KSIsDQo+ICsJCQkJCQltZ210X2VycnN0cihzdGF0dXMpLA0KPiBzdGF0dXMpOw0KPiArCQlyZXR1 cm47DQo+ICsJfQ0KPiArDQo+ICsJaWYgKGxlbmd0aCA8IHNpemVvZigqcnApKSB7DQo+ICsJCWxf ZXJyb3IoIlJlYWQgaW5kZXggbGlzdCByZXNwb25zZSBzaXhlIHRvbyBzaG9ydCIpOw0KPiArCQly ZXR1cm47DQo+ICsJfQ0KPiArDQo+ICsJbnVtID0gYnRvaHMocnAtPm51bV9jb250cm9sbGVycyk7 DQo+ICsNCj4gKwlsX2RlYnVnKCJOdW1iZXIgb2YgY29udHJvbGxlcnM6ICV1IiwgbnVtKTsNCj4g Kw0KPiArCWlmIChudW0gKiBzaXplb2YodWludDE2X3QpICsgc2l6ZW9mKCpycCkgIT0gbGVuZ3Ro KSB7DQo+ICsJCWxfZXJyb3IoIkluY29ycmVjdCBwYWNrZXQgc2l6ZSBmb3IgaW5kZXggbGlzdA0K PiByZXNwb25zZSIpOw0KPiArCQlyZXR1cm47DQo+ICsJfQ0KPiArDQo+ICsJZm9yIChpID0gMDsg aSA8IG51bTsgaSsrKSB7DQo+ICsJCXVpbnQxNl90IGluZGV4Ow0KPiArDQo+ICsJCWluZGV4ID0g YnRvaHMocnAtPmluZGV4W2ldKTsNCj4gKwkJaW5kZXhfYWRkZWQoaW5kZXgsIDAsIE5VTEwsIHVz ZXJfZGF0YSk7DQo+ICsJfQ0KPiArfQ0KPiArDQo+ICtzdGF0aWMgYm9vbCBtZXNoX21nbXRfaW5p dCh2b2lkKQ0KPiArew0KPiArCWlmICghY29udHJvbGxlcnMpDQo+ICsJCWNvbnRyb2xsZXJzID0g bF9xdWV1ZV9uZXcoKTsNCj4gKw0KPiArCWlmICghcmVhZF9pbmZvX3JlZ3MpDQo+ICsJCXJlYWRf aW5mb19yZWdzID0gbF9xdWV1ZV9uZXcoKTsNCj4gKw0KPiArCWlmICghbWdtdF9tZXNoKSB7DQo+ ICsJCW1nbXRfbWVzaCA9IG1nbXRfbmV3X2RlZmF1bHQoKTsNCj4gKw0KPiArCQlpZiAoIW1nbXRf bWVzaCkgew0KPiArCQkJbF9lcnJvcigiRmFpbGVkIHRvIGluaXRpYWxpemUgbWVzaA0KPiBtYW5h Z2VtZW50Iik7DQo+ICsJCQlyZXR1cm4gZmFsc2U7DQo+ICsJCX0NCj4gKw0KPiArCQltZ210X3Jl Z2lzdGVyKG1nbXRfbWVzaCwgTUdNVF9FVl9JTkRFWF9BRERFRCwNCj4gKwkJCQlNR01UX0lOREVY X05PTkUsIGluZGV4X2FkZGVkLCBOVUxMLA0KPiBOVUxMKTsNCj4gKwkJbWdtdF9yZWdpc3Rlciht Z210X21lc2gsIE1HTVRfRVZfSU5ERVhfUkVNT1ZFRCwNCj4gKwkJCQlNR01UX0lOREVYX05PTkUs IGluZGV4X3JlbW92ZWQsIE5VTEwsDQo+IE5VTEwpOw0KPiArCX0NCj4gKw0KPiArCXJldHVybiB0 cnVlOw0KPiArfQ0KPiArDQo+ICtib29sIG1lc2hfbWdtdF9saXN0KG1lc2hfbWdtdF9yZWFkX2lu Zm9fZnVuY190IGNiLCB2b2lkICp1c2VyX2RhdGEpDQo+ICt7DQo+ICsJc3RydWN0IHJlYWRfaW5m b19yZWcgKnJlZzsNCj4gKw0KPiArCWlmICghbWVzaF9tZ210X2luaXQoKSkNCj4gKwkJcmV0dXJu IGZhbHNlOw0KPiArDQo+ICsJcmVnID0gbF9uZXcoc3RydWN0IHJlYWRfaW5mb19yZWcsIDEpOw0K PiArCXJlZy0+Y2IgPSBjYjsNCj4gKwlyZWctPnVzZXJfZGF0YSA9IHVzZXJfZGF0YTsNCj4gKw0K PiArCWxfcXVldWVfcHVzaF90YWlsKHJlYWRfaW5mb19yZWdzLCByZWcpOw0KPiArDQo+ICsJLyog VXNlIE1HTVQgdG8gZmluZCBhIGNhbmRpZGF0ZSBjb250cm9sbGVyICovDQo+ICsJbF9kZWJ1Zygi c2VuZCByZWFkIGluZGV4X2xpc3QiKTsNCj4gKwlpZiAobWdtdF9zZW5kKG1nbXRfbWVzaCwgTUdN VF9PUF9SRUFEX0lOREVYX0xJU1QsDQo+ICsJCQkJCU1HTVRfSU5ERVhfTk9ORSwgMCwgTlVMTCwN Cj4gKwkJCQkJcmVhZF9pbmRleF9saXN0X2NiLCBOVUxMLCBOVUxMKQ0KPiA8PSAwKQ0KPiArCQly ZXR1cm4gZmFsc2U7DQo+ICsNCj4gKwlyZXR1cm4gdHJ1ZTsNCj4gK30NCj4gZGlmZiAtLWdpdCBh L21lc2gvbWVzaC1tZ210LmggYi9tZXNoL21lc2gtbWdtdC5oDQo+IG5ldyBmaWxlIG1vZGUgMTAw NjQ0DQo+IGluZGV4IDAwMDAwMDAwMC4uOTNhZDc5OTVlDQo+IC0tLSAvZGV2L251bGwNCj4gKysr IGIvbWVzaC9tZXNoLW1nbXQuaA0KPiBAQCAtMCwwICsxLDIzIEBADQo+ICsvKg0KPiArICoNCj4g KyAqICBCbHVlWiAtIEJsdWV0b290aCBwcm90b2NvbCBzdGFjayBmb3IgTGludXgNCj4gKyAqDQo+ ICsgKiAgQ29weXJpZ2h0IChDKSAyMDE5ICBTSUxWQUlSIHNwLiB6IG8uby4gQWxsIHJpZ2h0cyBy ZXNlcnZlZC4NCj4gKyAqDQo+ICsgKg0KPiArICogIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3 YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3INCj4gKyAqICBtb2RpZnkgaXQgdW5k ZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljDQo+ICsgKiAgTGlj ZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVy DQo+ICsgKiAgdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikg YW55IGxhdGVyDQo+IHZlcnNpb24uDQo+ICsgKg0KPiArICogIFRoaXMgbGlicmFyeSBpcyBkaXN0 cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLA0KPiArICogIGJ1dCBX SVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9m DQo+ICsgKiAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQ T1NFLiAgU2VlIHRoZQ0KPiBHTlUNCj4gKyAqICBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5z ZSBmb3IgbW9yZSBkZXRhaWxzLg0KPiArICoNCj4gKyAqLw0KPiArI2luY2x1ZGUgPHN0ZGJvb2wu aD4NCj4gKw0KPiArdHlwZWRlZiB2b2lkICgqbWVzaF9tZ210X3JlYWRfaW5mb19mdW5jX3QpKGlu dCBpbmRleCwgdm9pZA0KPiAqdXNlcl9kYXRhKTsNCj4gKw0KPiArYm9vbCBtZXNoX21nbXRfbGlz dChtZXNoX21nbXRfcmVhZF9pbmZvX2Z1bmNfdCBjYiwgdm9pZCAqdXNlcl9kYXRhKTsNCj4gZGlm ZiAtLWdpdCBhL21lc2gvbWVzaC5jIGIvbWVzaC9tZXNoLmMNCj4gaW5kZXggMjMxYTZiY2E0Li4y NmFjZmQ0ZGMgMTAwNjQ0DQo+IC0tLSBhL21lc2gvbWVzaC5jDQo+ICsrKyBiL21lc2gvbWVzaC5j DQo+IEBAIC0yNCwxMSArMjQsNiBAQA0KPiAgI2RlZmluZSBfR05VX1NPVVJDRQ0KPiAgI2luY2x1 ZGUgPGVsbC9lbGwuaD4NCj4gIA0KPiAtI2luY2x1ZGUgImxpYi9ibHVldG9vdGguaCINCj4gLSNp bmNsdWRlICJsaWIvbWdtdC5oIg0KPiAtDQo+IC0jaW5jbHVkZSAic3JjL3NoYXJlZC9tZ210Lmgi DQo+IC0NCj4gICNpbmNsdWRlICJtZXNoL21lc2gtaW8uaCINCj4gICNpbmNsdWRlICJtZXNoL25v ZGUuaCINCj4gICNpbmNsdWRlICJtZXNoL25ldC5oIg0KPiBAQCAtNzYsOSArNzEsNiBAQCBzdHJ1 Y3Qgam9pbl9kYXRhew0KPiAgfTsNCj4gIA0KPiAgc3RhdGljIHN0cnVjdCBidF9tZXNoIG1lc2g7 DQo+IC1zdGF0aWMgc3RydWN0IGxfcXVldWUgKmNvbnRyb2xsZXJzOw0KPiAtc3RhdGljIHN0cnVj dCBtZ210ICptZ210X21lc2g7DQo+IC1zdGF0aWMgYm9vbCBpbml0aWFsaXplZDsNCj4gIA0KPiAg LyogV2UgYWxsb3cgb25seSBvbmUgb3V0c3RhbmRpbmcgSm9pbiByZXF1ZXN0ICovDQo+ICBzdGF0 aWMgc3RydWN0IGpvaW5fZGF0YSAqam9pbl9wZW5kaW5nOw0KPiBAQCAtOTEsMjkgKzgzLDYgQEAg c3RhdGljIGJvb2wgc2ltcGxlX21hdGNoKGNvbnN0IHZvaWQgKmEsIGNvbnN0IHZvaWQNCj4gKmIp DQo+ICAJcmV0dXJuIGEgPT0gYjsNCj4gIH0NCj4gIA0KPiAtc3RhdGljIHZvaWQgc3RhcnRfaW8o dWludDE2X3QgaW5kZXgpDQo+IC17DQo+IC0Jc3RydWN0IG1lc2hfaW8gKmlvOw0KPiAtCXN0cnVj dCBtZXNoX2lvX2NhcHMgY2FwczsNCj4gLQ0KPiAtCWxfZGVidWcoIlN0YXJ0aW5nIG1lc2ggb24g aGNpICV1IiwgaW5kZXgpOw0KPiAtDQo+IC0JaW8gPSBtZXNoX2lvX25ldyhpbmRleCwgTUVTSF9J T19UWVBFX0dFTkVSSUMpOw0KPiAtCWlmICghaW8pIHsNCj4gLQkJbF9lcnJvcigiRmFpbGVkIHRv IHN0YXJ0IG1lc2ggaW8gKGhjaSAldSkiLCBpbmRleCk7DQo+IC0JCXJldHVybjsNCj4gLQl9DQo+ IC0NCj4gLQltZXNoX2lvX2dldF9jYXBzKGlvLCAmY2Fwcyk7DQo+IC0JbWVzaC5tYXhfZmlsdGVy cyA9IGNhcHMubWF4X251bV9maWx0ZXJzOw0KPiAtDQo+IC0JbWVzaC5pbyA9IGlvOw0KPiAtDQo+ IC0JbF9kZWJ1ZygiU3RhcnRlZCBtZXNoIChpbyAlcCkgb24gaGNpICV1IiwgbWVzaC5pbywgaW5k ZXgpOw0KPiAtDQo+IC0Jbm9kZV9hdHRhY2hfaW9fYWxsKGlvKTsNCj4gLX0NCj4gLQ0KPiAgLyog VXNlZCBmb3IgYW55IG91dGJvdW5kIHRyYWZmaWMgdGhhdCBkb2Vzbid0IGhhdmUgRnJpZW5kc2hp cA0KPiBDb25zdHJhaW50cyAqLw0KPiAgLyogVGhpcyBpbmNsdWRlcyBCZWFjb25zLCBQcm92aXNp b25pbmcgYW5kIHVucmVzdHJpY3RlZCBOZXR3b3JrDQo+IFRyYWZmaWMgKi8NCj4gIGJvb2wgbWVz aF9zZW5kX3BrdCh1aW50OF90IGNvdW50LCB1aW50MTZfdCBpbnRlcnZhbCwNCj4gQEAgLTE2Nywx NDMgKzEzNiwxMyBAQCB2b2lkIG1lc2hfdW5yZWdfcHJvdl9yeChwcm92X3J4X2NiX3QgY2IpDQo+ ICAJbWVzaF9pb19kZXJlZ2lzdGVyX3JlY3ZfY2IobWVzaC5pbywgTUVTSF9JT19GSUxURVJfUFJP Vik7DQo+ICB9DQo+ICANCj4gLXN0YXRpYyB2b2lkIHJlYWRfaW5mb19jYih1aW50OF90IHN0YXR1 cywgdWludDE2X3QgbGVuZ3RoLA0KPiAtCQkJCQljb25zdCB2b2lkICpwYXJhbSwgdm9pZA0KPiAq dXNlcl9kYXRhKQ0KPiArYm9vbCBtZXNoX2luaXQoY29uc3QgY2hhciAqY29uZmlnX2RpciwgZW51 bSBtZXNoX2lvX3R5cGUgdHlwZSwgdm9pZA0KPiAqb3B0cykNCj4gIHsNCj4gLQl1aW50MTZfdCBp bmRleCA9IExfUFRSX1RPX1VJTlQodXNlcl9kYXRhKTsNCj4gLQljb25zdCBzdHJ1Y3QgbWdtdF9y cF9yZWFkX2luZm8gKnJwID0gcGFyYW07DQo+IC0JdWludDMyX3QgY3VycmVudF9zZXR0aW5ncywg c3VwcG9ydGVkX3NldHRpbmdzOw0KPiArCXN0cnVjdCBtZXNoX2lvX2NhcHMgY2FwczsNCj4gIA0K PiAgCWlmIChtZXNoLmlvKQ0KPiAtCQkvKiBBbHJlYWR5IGluaXRpYWxpemVkICovDQo+IC0JCXJl dHVybjsNCj4gLQ0KPiAtCWxfZGVidWcoImhjaSAldSBzdGF0dXMgMHglMDJ4IiwgaW5kZXgsIHN0 YXR1cyk7DQo+IC0NCj4gLQlpZiAoc3RhdHVzICE9IE1HTVRfU1RBVFVTX1NVQ0NFU1MpIHsNCj4g LQkJbF9lcnJvcigiRmFpbGVkIHRvIHJlYWQgaW5mbyBmb3IgaGNpIGluZGV4ICV1OiAlcw0KPiAo MHglMDJ4KSIsDQo+IC0JCQkJCWluZGV4LCBtZ210X2VycnN0cihzdGF0dXMpLA0KPiBzdGF0dXMp Ow0KPiAtCQlyZXR1cm47DQo+IC0JfQ0KPiAtDQo+IC0JaWYgKGxlbmd0aCA8IHNpemVvZigqcnAp KSB7DQo+IC0JCWxfZXJyb3IoIlJlYWQgaW5mbyByZXNwb25zZSB0b28gc2hvcnQiKTsNCj4gLQkJ cmV0dXJuOw0KPiAtCX0NCj4gLQ0KPiAtCWN1cnJlbnRfc2V0dGluZ3MgPSBidG9obChycC0+Y3Vy cmVudF9zZXR0aW5ncyk7DQo+IC0Jc3VwcG9ydGVkX3NldHRpbmdzID0gYnRvaGwocnAtPnN1cHBv cnRlZF9zZXR0aW5ncyk7DQo+IC0NCj4gLQlsX2RlYnVnKCJzZXR0aW5nczogc3VwcCAlOC44eCBj dXJyICU4Ljh4IiwNCj4gLQkJCQkJc3VwcG9ydGVkX3NldHRpbmdzLA0KPiBjdXJyZW50X3NldHRp bmdzKTsNCj4gLQ0KPiAtCWlmIChjdXJyZW50X3NldHRpbmdzICYgTUdNVF9TRVRUSU5HX1BPV0VS RUQpIHsNCj4gLQkJbF9pbmZvKCJDb250cm9sbGVyIGhjaSAldSBpcyBpbiB1c2UiLCBpbmRleCk7 DQo+IC0JCXJldHVybjsNCj4gLQl9DQo+IC0NCj4gLQlpZiAoIShzdXBwb3J0ZWRfc2V0dGluZ3Mg JiBNR01UX1NFVFRJTkdfTEUpKSB7DQo+IC0JCWxfaW5mbygiQ29udHJvbGxlciBoY2kgJXUgZG9l cyBub3Qgc3VwcG9ydCBMRSIsIGluZGV4KTsNCj4gLQkJcmV0dXJuOw0KPiAtCX0NCj4gLQ0KPiAt CXN0YXJ0X2lvKGluZGV4KTsNCj4gLX0NCj4gLQ0KPiAtc3RhdGljIHZvaWQgaW5kZXhfYWRkZWQo dWludDE2X3QgaW5kZXgsIHVpbnQxNl90IGxlbmd0aCwgY29uc3Qgdm9pZA0KPiAqcGFyYW0sDQo+ IC0JCQkJCQkJdm9pZA0KPiAqdXNlcl9kYXRhKQ0KPiAtew0KPiAtCWxfZGVidWcoImhjaSBkZXZp Y2UgJXUiLCBpbmRleCk7DQo+IC0NCj4gLQlpZiAobWVzaC5yZXFfaW5kZXggIT0gTUdNVF9JTkRF WF9OT05FICYmDQo+IC0JCQkJCWluZGV4ICE9IG1lc2gucmVxX2luZGV4KSB7DQo+IC0JCWxfZGVi dWcoIklnbm9yZSBpbmRleCAlZCIsIGluZGV4KTsNCj4gLQkJcmV0dXJuOw0KPiAtCX0NCj4gLQ0K PiAtCWlmIChsX3F1ZXVlX2ZpbmQoY29udHJvbGxlcnMsIHNpbXBsZV9tYXRjaCwNCj4gTF9VSU5U X1RPX1BUUihpbmRleCkpKQ0KPiAtCQlyZXR1cm47DQo+IC0NCj4gLQlsX3F1ZXVlX3B1c2hfdGFp bChjb250cm9sbGVycywgTF9VSU5UX1RPX1BUUihpbmRleCkpOw0KPiAtDQo+IC0JaWYgKG1nbXRf c2VuZChtZ210X21lc2gsIE1HTVRfT1BfUkVBRF9JTkZPLCBpbmRleCwgMCwgTlVMTCwNCj4gLQkJ CXJlYWRfaW5mb19jYiwgTF9VSU5UX1RPX1BUUihpbmRleCksIE5VTEwpID4gMCkNCj4gLQkJcmV0 dXJuOw0KPiAtDQo+IC0JbF9xdWV1ZV9yZW1vdmUoY29udHJvbGxlcnMsIExfVUlOVF9UT19QVFIo aW5kZXgpKTsNCj4gLX0NCj4gLQ0KPiAtc3RhdGljIHZvaWQgaW5kZXhfcmVtb3ZlZCh1aW50MTZf dCBpbmRleCwgdWludDE2X3QgbGVuZ3RoLCBjb25zdA0KPiB2b2lkICpwYXJhbSwNCj4gLQkJCQkJ CQl2b2lkDQo+ICp1c2VyX2RhdGEpDQo+IC17DQo+IC0JbF93YXJuKCJIY2kgZGV2ICU0LjR4IHJl bW92ZWQiLCBpbmRleCk7DQo+IC0JbF9xdWV1ZV9yZW1vdmUoY29udHJvbGxlcnMsIExfVUlOVF9U T19QVFIoaW5kZXgpKTsNCj4gLX0NCj4gLQ0KPiAtc3RhdGljIHZvaWQgcmVhZF9pbmRleF9saXN0 X2NiKHVpbnQ4X3Qgc3RhdHVzLCB1aW50MTZfdCBsZW5ndGgsDQo+IC0JCQkJCWNvbnN0IHZvaWQg KnBhcmFtLCB2b2lkDQo+ICp1c2VyX2RhdGEpDQo+IC17DQo+IC0JY29uc3Qgc3RydWN0IG1nbXRf cnBfcmVhZF9pbmRleF9saXN0ICpycCA9IHBhcmFtOw0KPiAtCXVpbnQxNl90IG51bTsNCj4gLQlp bnQgaTsNCj4gLQ0KPiAtCWlmIChzdGF0dXMgIT0gTUdNVF9TVEFUVVNfU1VDQ0VTUykgew0KPiAt CQlsX2Vycm9yKCJGYWlsZWQgdG8gcmVhZCBpbmRleCBsaXN0OiAlcyAoMHglMDJ4KSIsDQo+IC0J CQkJCQltZ210X2VycnN0cihzdGF0dXMpLA0KPiBzdGF0dXMpOw0KPiAtCQlyZXR1cm47DQo+IC0J fQ0KPiAtDQo+IC0JaWYgKGxlbmd0aCA8IHNpemVvZigqcnApKSB7DQo+IC0JCWxfZXJyb3IoIlJl YWQgaW5kZXggbGlzdCByZXNwb25zZSBzaXhlIHRvbyBzaG9ydCIpOw0KPiAtCQlyZXR1cm47DQo+ IC0JfQ0KPiAtDQo+IC0JbnVtID0gYnRvaHMocnAtPm51bV9jb250cm9sbGVycyk7DQo+IC0NCj4g LQlsX2RlYnVnKCJOdW1iZXIgb2YgY29udHJvbGxlcnM6ICV1IiwgbnVtKTsNCj4gLQ0KPiAtCWlm IChudW0gKiBzaXplb2YodWludDE2X3QpICsgc2l6ZW9mKCpycCkgIT0gbGVuZ3RoKSB7DQo+IC0J CWxfZXJyb3IoIkluY29ycmVjdCBwYWNrZXQgc2l6ZSBmb3IgaW5kZXggbGlzdA0KPiByZXNwb25z ZSIpOw0KPiAtCQlyZXR1cm47DQo+IC0JfQ0KPiAtDQo+IC0JZm9yIChpID0gMDsgaSA8IG51bTsg aSsrKSB7DQo+IC0JCXVpbnQxNl90IGluZGV4Ow0KPiAtDQo+IC0JCWluZGV4ID0gYnRvaHMocnAt PmluZGV4W2ldKTsNCj4gLQkJaW5kZXhfYWRkZWQoaW5kZXgsIDAsIE5VTEwsIHVzZXJfZGF0YSk7 DQo+IC0JfQ0KPiAtfQ0KPiAtDQo+IC1zdGF0aWMgYm9vbCBpbml0X21nbXQodm9pZCkNCj4gLXsN Cj4gLQltZ210X21lc2ggPSBtZ210X25ld19kZWZhdWx0KCk7DQo+IC0JaWYgKCFtZ210X21lc2gp DQo+IC0JCXJldHVybiBmYWxzZTsNCj4gLQ0KPiAtCWNvbnRyb2xsZXJzID0gbF9xdWV1ZV9uZXco KTsNCj4gLQlpZiAoIWNvbnRyb2xsZXJzKQ0KPiAtCQlyZXR1cm4gZmFsc2U7DQo+IC0NCj4gLQlt Z210X3JlZ2lzdGVyKG1nbXRfbWVzaCwgTUdNVF9FVl9JTkRFWF9BRERFRCwgTUdNVF9JTkRFWF9O T05FLA0KPiAtCQkJCQkJaW5kZXhfYWRkZWQsIE5VTEwsDQo+IE5VTEwpOw0KPiAtCW1nbXRfcmVn aXN0ZXIobWdtdF9tZXNoLCBNR01UX0VWX0lOREVYX1JFTU9WRUQsDQo+IE1HTVRfSU5ERVhfTk9O RSwNCj4gLQkJCQkJCWluZGV4X3JlbW92ZWQsIE5VTEwsDQo+IE5VTEwpOw0KPiAtCXJldHVybiB0 cnVlOw0KPiAtfQ0KPiAtDQo+IC1ib29sIG1lc2hfaW5pdCh1aW50MTZfdCBpbmRleCwgY29uc3Qg Y2hhciAqY29uZmlnX2RpcikNCj4gLXsNCj4gLQlpZiAoaW5pdGlhbGl6ZWQpDQo+ICAJCXJldHVy biB0cnVlOw0KPiAgDQo+IC0JaWYgKGluZGV4ID09IE1HTVRfSU5ERVhfTk9ORSAmJiAhaW5pdF9t Z210KCkpIHsNCj4gLQkJbF9lcnJvcigiRmFpbGVkIHRvIGluaXRpYWxpemUgbWVzaCBtYW5hZ2Vt ZW50Iik7DQo+IC0JCXJldHVybiBmYWxzZTsNCj4gLQl9DQo+IC0NCj4gLQltZXNoLnJlcV9pbmRl eCA9IGluZGV4Ow0KPiAtDQo+ICAJbWVzaF9tb2RlbF9pbml0KCk7DQo+ICAJbWVzaF9hZ2VudF9p bml0KCk7DQo+ICANCj4gQEAgLTMxOSwxOCArMTU4LDE2IEBAIGJvb2wgbWVzaF9pbml0KHVpbnQx Nl90IGluZGV4LCBjb25zdCBjaGFyDQo+ICpjb25maWdfZGlyKQ0KPiAgCWlmICghc3RvcmFnZV9s b2FkX25vZGVzKGNvbmZpZ19kaXIpKQ0KPiAgCQlyZXR1cm4gZmFsc2U7DQo+ICANCj4gLQlpZiAo aW5kZXggPT0gTUdNVF9JTkRFWF9OT05FKSB7DQo+IC0JCS8qIFVzZSBNR01UIHRvIGZpbmQgYSBj YW5kaWRhdGUgY29udHJvbGxlciAqLw0KPiAtCQlsX2RlYnVnKCJzZW5kIHJlYWQgaW5kZXhfbGlz dCIpOw0KPiAtCQlpZiAobWdtdF9zZW5kKG1nbXRfbWVzaCwgTUdNVF9PUF9SRUFEX0lOREVYX0xJ U1QsDQo+IC0JCQkJCU1HTVRfSU5ERVhfTk9ORSwgMCwgTlVMTCwNCj4gLQkJCQkJcmVhZF9pbmRl eF9saXN0X2NiLCBOVUxMLCBOVUxMKQ0KPiA8PSAwKQ0KPiAtCQkJcmV0dXJuIGZhbHNlOw0KPiAt CX0gZWxzZSB7DQo+IC0JCS8qIE9wZW4gc3BlY2lmaWVkIGNvbnRyb2xsZXIgd2l0aG91dCBzZWFy Y2hpbmcgKi8NCj4gLQkJc3RhcnRfaW8obWVzaC5yZXFfaW5kZXgpOw0KPiAtCQlyZXR1cm4gbWVz aC5pbyAhPSBOVUxMOw0KPiAtCX0NCj4gKwltZXNoLmlvID0gbWVzaF9pb19uZXcodHlwZSwgb3B0 cyk7DQo+ICsJaWYgKCFtZXNoLmlvKQ0KPiArCQlyZXR1cm4gZmFsc2U7DQo+ICsNCj4gKwlsX2Rl YnVnKCJpbyAlcCIsIG1lc2guaW8pOw0KPiArCW1lc2hfaW9fZ2V0X2NhcHMobWVzaC5pbywgJmNh cHMpOw0KPiArCW1lc2gubWF4X2ZpbHRlcnMgPSBjYXBzLm1heF9udW1fZmlsdGVyczsNCj4gKw0K PiArCW5vZGVfYXR0YWNoX2lvX2FsbChtZXNoLmlvKTsNCj4gKw0KPiAgCXJldHVybiB0cnVlOw0K PiAgfQ0KPiAgDQo+IEBAIC0zNjYsNyArMjAzLDYgQEAgdm9pZCBtZXNoX2NsZWFudXAodm9pZCkN Cj4gIAlzdHJ1Y3QgbF9kYnVzX21lc3NhZ2UgKnJlcGx5Ow0KPiAgDQo+ICAJbWVzaF9pb19kZXN0 cm95KG1lc2guaW8pOw0KPiAtCW1nbXRfdW5yZWYobWdtdF9tZXNoKTsNCj4gIA0KPiAgCWlmIChq b2luX3BlbmRpbmcpIHsNCj4gIA0KPiBAQCAtMzg0LDcgKzIyMCw2IEBAIHZvaWQgbWVzaF9jbGVh bnVwKHZvaWQpDQo+ICAJbm9kZV9jbGVhbnVwX2FsbCgpOw0KPiAgCW1lc2hfbW9kZWxfY2xlYW51 cCgpOw0KPiAgDQo+IC0JbF9xdWV1ZV9kZXN0cm95KGNvbnRyb2xsZXJzLCBOVUxMKTsNCj4gIAls X2RidXNfb2JqZWN0X3JlbW92ZV9pbnRlcmZhY2UoZGJ1c19nZXRfYnVzKCksIEJMVUVaX01FU0hf UEFUSCwNCj4gIAkJCQkJCQlNRVNIX05FVFdPUktfSU4NCj4gVEVSRkFDRSk7DQo+ICAJbF9kYnVz X3VucmVnaXN0ZXJfaW50ZXJmYWNlKGRidXNfZ2V0X2J1cygpLA0KPiBNRVNIX05FVFdPUktfSU5U RVJGQUNFKTsNCj4gZGlmZiAtLWdpdCBhL21lc2gvbWVzaC5oIGIvbWVzaC9tZXNoLmgNCj4gaW5k ZXggMzIwYTEwOGVkLi4xNGIxZmI1MTcgMTAwNjQ0DQo+IC0tLSBhL21lc2gvbWVzaC5oDQo+ICsr KyBiL21lc2gvbWVzaC5oDQo+IEBAIC0yOCw5ICsyOCwxMSBAQA0KPiAgI2RlZmluZSBNRVNIX1BS T1ZJU0lPTkVSX0lOVEVSRkFDRSAib3JnLmJsdWV6Lm1lc2guUHJvdmlzaW9uZXIxIg0KPiAgI2Rl ZmluZSBFUlJPUl9JTlRFUkZBQ0UgIm9yZy5ibHVlei5tZXNoLkVycm9yIg0KPiAgDQo+ICtlbnVt IG1lc2hfaW9fdHlwZTsNCj4gKw0KPiAgdHlwZWRlZiB2b2lkICgqcHJvdl9yeF9jYl90KSh2b2lk ICp1c2VyX2RhdGEsIGNvbnN0IHVpbnQ4X3QgKmRhdGEsDQo+ICAJCQkJCQkJCXVpbnQxNl8NCj4g dCBsZW4pOw0KPiAtYm9vbCBtZXNoX2luaXQodWludDE2X3QgaW5kZXgsIGNvbnN0IGNoYXIgKmlu X2NvbmZpZ19uYW1lKTsNCj4gK2Jvb2wgbWVzaF9pbml0KGNvbnN0IGNoYXIgKmluX2NvbmZpZ19u YW1lLCBlbnVtIG1lc2hfaW9fdHlwZSB0eXBlLA0KPiB2b2lkICpvcHRzKTsNCj4gIHZvaWQgbWVz aF9jbGVhbnVwKHZvaWQpOw0KPiAgYm9vbCBtZXNoX2RidXNfaW5pdChzdHJ1Y3QgbF9kYnVzICpk YnVzKTsNCj4gIA0K