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 X-Spam-Level: X-Spam-Status: No, score=-6.6 required=3.0 tests=DKIM_INVALID,DKIM_SIGNED, HEADER_FROM_DIFFERENT_DOMAINS,INCLUDES_PATCH,MAILING_LIST_MULTI,SIGNED_OFF_BY, SPF_HELO_NONE,SPF_PASS autolearn=ham autolearn_force=no version=3.4.0 Received: from mail.kernel.org (mail.kernel.org [198.145.29.99]) by smtp.lore.kernel.org (Postfix) with ESMTP id 082A4C3A5A2 for ; Tue, 3 Sep 2019 08:34:39 +0000 (UTC) Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mail.kernel.org (Postfix) with ESMTPS id B1CA3217D7 for ; Tue, 3 Sep 2019 08:34:38 +0000 (UTC) Authentication-Results: mail.kernel.org; dkim=fail reason="signature verification failed" (1024-bit key) header.d=virtuozzo.com header.i=@virtuozzo.com header.b="QxVP2qag" DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org B1CA3217D7 Authentication-Results: mail.kernel.org; dmarc=fail (p=none dis=none) header.from=virtuozzo.com Authentication-Results: mail.kernel.org; spf=pass smtp.mailfrom=qemu-devel-bounces+qemu-devel=archiver.kernel.org@nongnu.org Received: from localhost ([::1]:42872 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1i54Gr-0003Oq-VN for qemu-devel@archiver.kernel.org; Tue, 03 Sep 2019 04:34:37 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:51425) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1i54FG-0002r6-P0 for qemu-devel@nongnu.org; Tue, 03 Sep 2019 04:33:01 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1i54FD-0007Aa-I0 for qemu-devel@nongnu.org; Tue, 03 Sep 2019 04:32:57 -0400 Received: from mail-eopbgr40122.outbound.protection.outlook.com ([40.107.4.122]:52118 helo=EUR03-DB5-obe.outbound.protection.outlook.com) by eggs.gnu.org with esmtps (TLS1.0:RSA_AES_256_CBC_SHA1:32) (Exim 4.71) (envelope-from ) id 1i54FC-00078w-Og; Tue, 03 Sep 2019 04:32:55 -0400 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=WM4ewJP6UzuQ0tpXuCUiuMF1WvdEAY/K5LVtw4TZuQXoPxCfTzbG8Mal5SXYfY4diazKz1FDTaz73AfrftLypUh+RtKUeb0nzbroA4wm3VcrBXLLhU3m48vy5EVtErPMj+ZCo49d8h/SnYoKEb8MFo33yNGiKB9zntMOijOEm7aEIgJNGkumaB4neTZ2Zk85A/Oqb42CHzald1dJdoT93UwAgYqBXuHhEkGLKwJTr1l8oqf8BWDyLGae7sLTLjhFdcQvRIN2cxHQWtA6mYEVRPh4DH7CMlh96uJby/Kvv0S1ZqYKuoUD+SfLwOp5rVH7L50Qe/+lmCjtpKPW9AdvSw== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector9901; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=4mfxKIsB5Zl96lmbYzgzdxSCuKv3zbzjjq7Sfq1tQkU=; b=lSety0lsPXs5Nl/+/IuOvnu05BN/jVvBTVWzDsUtCIOAXPMA0o38f8lzTlstJ/fRAn1JHQkcDzsORYXg1iH4uF/2nho/b8OFx0YvoyYNzcU20jcwKp0Kt7tsA0bnhlHkdv2d0vHc1p296tY9tsFiJWznxdF7bJDgVH66k6b8mzTEciepIwT8TQBk4a4GA0nyviVI65YPQFbmTJaml5xUL1KoBPAKR1OHfkzJ38qRh5oNa9RGyy6c7rXN54mzUwkrIbKtI3fHeJtE7Xykry7CdlGpUeSAlLrj2thTk4t0fGn6te7+P5ahfgD7tA42oMaNXy98yKyb+z9smtt/w7gMhQ== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=virtuozzo.com; dmarc=pass action=none header.from=virtuozzo.com; dkim=pass header.d=virtuozzo.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=virtuozzo.com; s=selector2; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=4mfxKIsB5Zl96lmbYzgzdxSCuKv3zbzjjq7Sfq1tQkU=; b=QxVP2qagRXvbb+Wt6tW+vxg0QspFbjWSMNGPsf8fDxqHFs+wRf0my7PPydviYXQj5y0hAbnMGCRdFyyqfZjhtw2HRj9EaqMMQmyHzOeXIH4Jp6IGDLlsiFm3ZBBtjU3VrPH5GFmZV8ss9rWIPqTiEfBFjD4Sb0qVZKd7ZyC1F6A= Received: from DB8PR08MB5498.eurprd08.prod.outlook.com (52.133.242.216) by DB8PR08MB4569.eurprd08.prod.outlook.com (20.179.12.150) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.2220.22; Tue, 3 Sep 2019 08:32:51 +0000 Received: from DB8PR08MB5498.eurprd08.prod.outlook.com ([fe80::b5c0:6b97:438d:77ed]) by DB8PR08MB5498.eurprd08.prod.outlook.com ([fe80::b5c0:6b97:438d:77ed%2]) with mapi id 15.20.2220.022; Tue, 3 Sep 2019 08:32:51 +0000 From: Vladimir Sementsov-Ogievskiy To: Max Reitz , "qemu-block@nongnu.org" Thread-Topic: [PATCH v6 25/42] mirror: Deal with filters Thread-Index: AQHVTs2fW9lDc3qUnk+iNbQLgM6ojqcVJ4OAgANyPoCAASz4AA== Date: Tue, 3 Sep 2019 08:32:50 +0000 Message-ID: References: <20190809161407.11920-1-mreitz@redhat.com> <20190809161407.11920-26-mreitz@redhat.com> In-Reply-To: Accept-Language: ru-RU, en-US Content-Language: en-US X-MS-Has-Attach: X-MS-TNEF-Correlator: x-clientproxiedby: HE1P18901CA0012.EURP189.PROD.OUTLOOK.COM (2603:10a6:3:8b::22) To DB8PR08MB5498.eurprd08.prod.outlook.com (2603:10a6:10:11c::24) authentication-results: spf=none (sender IP is ) smtp.mailfrom=vsementsov@virtuozzo.com; x-ms-exchange-messagesentrepresentingtype: 1 x-tagtoolbar-keys: D20190903113248807 x-originating-ip: [185.231.240.5] x-ms-publictraffictype: Email x-ms-office365-filtering-correlation-id: eaad7522-12a4-4ee0-b65e-08d730494eb7 x-microsoft-antispam: BCL:0; PCL:0; RULEID:(2390118)(7020095)(4652040)(8989299)(4534185)(4627221)(201703031133081)(201702281549075)(8990200)(5600166)(711020)(4605104)(1401327)(2017052603328)(7193020); SRVR:DB8PR08MB4569; x-ms-traffictypediagnostic: DB8PR08MB4569: x-microsoft-antispam-prvs: x-ms-oob-tlc-oobclassifiers: OLM:7691; x-forefront-prvs: 01494FA7F7 x-forefront-antispam-report: SFV:NSPM; SFS:(10019020)(346002)(376002)(396003)(39840400004)(136003)(366004)(199004)(189003)(6246003)(5660300002)(66446008)(64756008)(66556008)(30864003)(31686004)(53946003)(14454004)(6436002)(2906002)(52116002)(66476007)(53936002)(99286004)(14444005)(478600001)(256004)(53546011)(2501003)(6506007)(8936002)(386003)(66946007)(36756003)(8676002)(81166006)(81156014)(2616005)(476003)(486006)(446003)(11346002)(102836004)(66066001)(305945005)(7736002)(229853002)(6512007)(6116002)(3846002)(76176011)(316002)(31696002)(110136005)(71200400001)(4326008)(71190400001)(54906003)(86362001)(25786009)(6486002)(186003)(26005)(21314003)(579004)(309714004); DIR:OUT; SFP:1102; SCL:1; SRVR:DB8PR08MB4569; H:DB8PR08MB5498.eurprd08.prod.outlook.com; FPR:; SPF:None; LANG:en; PTR:InfoNoRecords; A:1; MX:1; received-spf: None (protection.outlook.com: virtuozzo.com does not designate permitted sender hosts) x-ms-exchange-senderadcheck: 1 x-microsoft-antispam-message-info: 6wskqFK4Fs1g5hjgVK1h09CQzkXq1LgY30FtqRmEkB5RF5p2+lCx8I9+1B8F5gy1KewR6HKyrcuMyWb3y/tPmGkk3AJWvS2tFYqiBgUpb7cp/uobwvUA3S6mf1WGiyWxwuclrGHhP8ROqFLrO9ZDR/+SABG79vyhJWFe40HgBuZujj+AgWTnAn4vpCqrQHFkKdTiMNwc5l2f4zdfiGg0k5pLGiiLEqDmuFH7CnnXtNMqlY9Xywpb4Kl51QUcDreQ4lSUmkVBPinhWYbcmW6TGdQrGyLnomxSm3qXaxlCIIoK4d3KCJEYQwdyAP2mBun88LbuPayoWzVjyHE36AEReKkwzV4I46OtTIcK1xgGkNfp+ODhfkT96S1PK5enF3cr8gVBLuAgo9Fs+rFKtPbkpHBmh5N3eFT0WFKN4JCtPcY= x-ms-exchange-transport-forked: True Content-Type: text/plain; charset="utf-8" Content-ID: <0583A977B4EDD24FABC10EC1561C9CD7@eurprd08.prod.outlook.com> Content-Transfer-Encoding: base64 MIME-Version: 1.0 X-OriginatorOrg: virtuozzo.com X-MS-Exchange-CrossTenant-Network-Message-Id: eaad7522-12a4-4ee0-b65e-08d730494eb7 X-MS-Exchange-CrossTenant-originalarrivaltime: 03 Sep 2019 08:32:51.0024 (UTC) X-MS-Exchange-CrossTenant-fromentityheader: Hosted X-MS-Exchange-CrossTenant-id: 0bc7f26d-0264-416e-a6fc-8352af79c58f X-MS-Exchange-CrossTenant-mailboxtype: HOSTED X-MS-Exchange-CrossTenant-userprincipalname: 3TRuqJh60FtjXoop+Ykp1We3nhPmqFUnrUn49HqIBH0uabYdeOdncer1HE1SrgtBVWsGWVgiYZveOAPK/0H5XkNoi8ZC9yAnY1plmTjj75U= X-MS-Exchange-Transport-CrossTenantHeadersStamped: DB8PR08MB4569 X-detected-operating-system: by eggs.gnu.org: Windows 7 or 8 [fuzzy] X-Received-From: 40.107.4.122 Subject: Re: [Qemu-devel] [PATCH v6 25/42] mirror: Deal with filters X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: Kevin Wolf , "qemu-devel@nongnu.org" Errors-To: qemu-devel-bounces+qemu-devel=archiver.kernel.org@nongnu.org Sender: "Qemu-devel" MDIuMDkuMjAxOSAxNzozNSwgTWF4IFJlaXR6IHdyb3RlOg0KPiBPbiAzMS4wOC4xOSAxMTo1Nywg VmxhZGltaXIgU2VtZW50c292LU9naWV2c2tpeSB3cm90ZToNCj4+IDA5LjA4LjIwMTkgMTk6MTMs IE1heCBSZWl0eiB3cm90ZToNCj4+PiBUaGlzIGluY2x1ZGVzIHNvbWUgcGVybWlzc2lvbiBsaW1p dGluZyAoZm9yIGV4YW1wbGUsIHdlIG9ubHkgbmVlZCB0bw0KPj4+IHRha2UgdGhlIFJFU0laRSBw ZXJtaXNzaW9uIGZvciBhY3RpdmUgY29tbWl0cyB3aGVyZSB0aGUgYmFzZSBpcyBzbWFsbGVyDQo+ Pj4gdGhhbiB0aGUgdG9wKS4NCj4+Pg0KPj4+IFNpZ25lZC1vZmYtYnk6IE1heCBSZWl0eiA8bXJl aXR6QHJlZGhhdC5jb20+DQo+Pj4gLS0tDQo+Pj4gICAgYmxvY2svbWlycm9yLmMgfCAxMTcgKysr KysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKystLS0tLS0tLS0tLQ0KPj4+ICAgIGJs b2NrZGV2LmMgICAgIHwgIDQ3ICsrKysrKysrKysrKysrKysrLS0tDQo+Pj4gICAgMiBmaWxlcyBj aGFuZ2VkLCAxMzEgaW5zZXJ0aW9ucygrKSwgMzMgZGVsZXRpb25zKC0pDQo+Pj4NCj4+PiBkaWZm IC0tZ2l0IGEvYmxvY2svbWlycm9yLmMgYi9ibG9jay9taXJyb3IuYw0KPj4+IGluZGV4IDU0YmFm ZGYxNzYuLjZkZGJmYjk3MDggMTAwNjQ0DQo+Pj4gLS0tIGEvYmxvY2svbWlycm9yLmMNCj4+PiAr KysgYi9ibG9jay9taXJyb3IuYw0KPj4+IEBAIC00Miw2ICs0Miw3IEBAIHR5cGVkZWYgc3RydWN0 IE1pcnJvckJsb2NrSm9iIHsNCj4+PiAgICAgICAgQmxvY2tCYWNrZW5kICp0YXJnZXQ7DQo+Pj4g ICAgICAgIEJsb2NrRHJpdmVyU3RhdGUgKm1pcnJvcl90b3BfYnM7DQo+Pj4gICAgICAgIEJsb2Nr RHJpdmVyU3RhdGUgKmJhc2U7DQo+Pj4gKyAgICBCbG9ja0RyaXZlclN0YXRlICpiYXNlX292ZXJs YXk7DQo+Pj4gICAgDQo+Pj4gICAgICAgIC8qIFRoZSBuYW1lIG9mIHRoZSBncmFwaCBub2RlIHRv IHJlcGxhY2UgKi8NCj4+PiAgICAgICAgY2hhciAqcmVwbGFjZXM7DQo+Pj4gQEAgLTY2NSw4ICs2 NjYsMTAgQEAgc3RhdGljIGludCBtaXJyb3JfZXhpdF9jb21tb24oSm9iICpqb2IpDQo+Pj4gICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmZXJyb3JfYWJvcnQpOw0KPj4+ICAgICAgICBp ZiAoIWFib3J0ICYmIHMtPmJhY2tpbmdfbW9kZSA9PSBNSVJST1JfU09VUkNFX0JBQ0tJTkdfQ0hB SU4pIHsNCj4+PiAgICAgICAgICAgIEJsb2NrRHJpdmVyU3RhdGUgKmJhY2tpbmcgPSBzLT5pc19u b25lX21vZGUgPyBzcmMgOiBzLT5iYXNlOw0KPj4+IC0gICAgICAgIGlmIChiYWNraW5nX2JzKHRh cmdldF9icykgIT0gYmFja2luZykgew0KPj4+IC0gICAgICAgICAgICBiZHJ2X3NldF9iYWNraW5n X2hkKHRhcmdldF9icywgYmFja2luZywgJmxvY2FsX2Vycik7DQo+Pj4gKyAgICAgICAgQmxvY2tE cml2ZXJTdGF0ZSAqdW5maWx0ZXJlZF90YXJnZXQgPSBiZHJ2X3NraXBfcndfZmlsdGVycyh0YXJn ZXRfYnMpOw0KPj4+ICsNCj4+PiArICAgICAgICBpZiAoYmRydl9maWx0ZXJlZF9jb3dfYnModW5m aWx0ZXJlZF90YXJnZXQpICE9IGJhY2tpbmcpIHsNCj4+PiArICAgICAgICAgICAgYmRydl9zZXRf YmFja2luZ19oZCh1bmZpbHRlcmVkX3RhcmdldCwgYmFja2luZywgJmxvY2FsX2Vycik7DQo+Pj4g ICAgICAgICAgICAgICAgaWYgKGxvY2FsX2Vycikgew0KPj4+ICAgICAgICAgICAgICAgICAgICBl cnJvcl9yZXBvcnRfZXJyKGxvY2FsX2Vycik7DQo+Pj4gICAgICAgICAgICAgICAgICAgIHJldCA9 IC1FUEVSTTsNCj4+PiBAQCAtNzE1LDcgKzcxOCw3IEBAIHN0YXRpYyBpbnQgbWlycm9yX2V4aXRf Y29tbW9uKEpvYiAqam9iKQ0KPj4+ICAgICAgICAgKiB2YWxpZC4NCj4+PiAgICAgICAgICovDQo+ Pj4gICAgICAgIGJsb2NrX2pvYl9yZW1vdmVfYWxsX2JkcnYoYmpvYik7DQo+Pj4gLSAgICBiZHJ2 X3JlcGxhY2Vfbm9kZShtaXJyb3JfdG9wX2JzLCBiYWNraW5nX2JzKG1pcnJvcl90b3BfYnMpLCAm ZXJyb3JfYWJvcnQpOw0KPj4+ICsgICAgYmRydl9yZXBsYWNlX25vZGUobWlycm9yX3RvcF9icywg bWlycm9yX3RvcF9icy0+YmFja2luZy0+YnMsICZlcnJvcl9hYm9ydCk7DQo+Pj4gICAgDQo+Pj4g ICAgICAgIC8qIFdlIGp1c3QgY2hhbmdlZCB0aGUgQkRTIHRoZSBqb2IgQkIgcmVmZXJzIHRvICh3 aXRoIGVpdGhlciBvciBib3RoIG9mIHRoZQ0KPj4+ICAgICAgICAgKiBiZHJ2X3JlcGxhY2Vfbm9k ZSgpIGNhbGxzKSwgc28gc3dpdGNoIHRoZSBCQiBiYWNrIHNvIHRoZSBjbGVhbnVwIGRvZXMNCj4+ PiBAQCAtODEyLDcgKzgxNSw4IEBAIHN0YXRpYyBpbnQgY29yb3V0aW5lX2ZuIG1pcnJvcl9kaXJ0 eV9pbml0KE1pcnJvckJsb2NrSm9iICpzKQ0KPj4+ICAgICAgICAgICAgICAgIHJldHVybiAwOw0K Pj4+ICAgICAgICAgICAgfQ0KPj4+ICAgIA0KPj4+IC0gICAgICAgIHJldCA9IGJkcnZfaXNfYWxs b2NhdGVkX2Fib3ZlKGJzLCBiYXNlLCBmYWxzZSwgb2Zmc2V0LCBieXRlcywgJmNvdW50KTsNCj4+ PiArICAgICAgICByZXQgPSBiZHJ2X2lzX2FsbG9jYXRlZF9hYm92ZShicywgcy0+YmFzZV9vdmVy bGF5LCB0cnVlLCBvZmZzZXQsIGJ5dGVzLA0KPj4+ICsgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICZjb3VudCk7DQo+Pj4gICAgICAgICAgICBpZiAocmV0IDwgMCkgew0KPj4+ ICAgICAgICAgICAgICAgIHJldHVybiByZXQ7DQo+Pj4gICAgICAgICAgICB9DQo+Pj4gQEAgLTkw OCw3ICs5MTIsNyBAQCBzdGF0aWMgaW50IGNvcm91dGluZV9mbiBtaXJyb3JfcnVuKEpvYiAqam9i LCBFcnJvciAqKmVycnApDQo+Pj4gICAgICAgIH0gZWxzZSB7DQo+Pj4gICAgICAgICAgICBzLT50 YXJnZXRfY2x1c3Rlcl9zaXplID0gQkRSVl9TRUNUT1JfU0laRTsNCj4+PiAgICAgICAgfQ0KPj4+ IC0gICAgaWYgKGJhY2tpbmdfZmlsZW5hbWVbMF0gJiYgIXRhcmdldF9icy0+YmFja2luZyAmJg0K Pj4+ICsgICAgaWYgKGJhY2tpbmdfZmlsZW5hbWVbMF0gJiYgIWJkcnZfYmFja2luZ19jaGFpbl9u ZXh0KHRhcmdldF9icykgJiYNCj4+PiAgICAgICAgICAgIHMtPmdyYW51bGFyaXR5IDwgcy0+dGFy Z2V0X2NsdXN0ZXJfc2l6ZSkgew0KPj4+ICAgICAgICAgICAgcy0+YnVmX3NpemUgPSBNQVgocy0+ YnVmX3NpemUsIHMtPnRhcmdldF9jbHVzdGVyX3NpemUpOw0KPj4+ICAgICAgICAgICAgcy0+Y293 X2JpdG1hcCA9IGJpdG1hcF9uZXcobGVuZ3RoKTsNCj4+PiBAQCAtMTA4OCw4ICsxMDkyLDkgQEAg c3RhdGljIHZvaWQgbWlycm9yX2NvbXBsZXRlKEpvYiAqam9iLCBFcnJvciAqKmVycnApDQo+Pj4g ICAgICAgIGlmIChzLT5iYWNraW5nX21vZGUgPT0gTUlSUk9SX09QRU5fQkFDS0lOR19DSEFJTikg ew0KPj4+ICAgICAgICAgICAgaW50IHJldDsNCj4+PiAgICANCj4+PiAtICAgICAgICBhc3NlcnQo IXRhcmdldC0+YmFja2luZyk7DQo+Pj4gLSAgICAgICAgcmV0ID0gYmRydl9vcGVuX2JhY2tpbmdf ZmlsZSh0YXJnZXQsIE5VTEwsICJiYWNraW5nIiwgZXJycCk7DQo+Pj4gKyAgICAgICAgYXNzZXJ0 KCFiZHJ2X2JhY2tpbmdfY2hhaW5fbmV4dCh0YXJnZXQpKTsNCj4+DQo+PiBQcmVleGlzdGluZywg YnV0IHNlZW1zIHdlIG1heSBjcmFzaCBoZXJlLCBJIGRvbid0IHNlZSB3aGVyZSBpdCBpcyBjaGVj a2VkIGJlZm9yZSwgdG8NCj4+IHJldHVybiBlcnJvciBpZiB0aGVyZSBpcyBzb21lIGJhY2tpbmcu IEFuZCBldmVuIGlmIHdlIGRvIHNvLCB3ZSBkb24ndCBwcmV2ZW50IGFwcGVhcmluZw0KPj4gb2Yg dGFyZ2V0IGJhY2tpbmcgZHVyaW5nIG1pcnJvciBvcGVyYXRpb24uDQo+IA0KPiBUaGUgaWRlYSBp cyB0aGF0IE1JUlJPUl9PUEVOX0JBQ0tJTkdfQ0hBSU4gaXMgc2V0IG9ubHkgd2hlbiB1c2luZw0K PiBkcml2ZS1taXJyb3Igd2l0aCBtb2RlPWV4aXN0aW5nLiAgSW4gdGhpcyBjYXNlLCB3ZSBhbHNv IHNldA0KPiBCRFJWX09fTk9fQkFDS0lORyBmb3IgdGhlIHRhcmdldC4NCj4gDQo+IFlvdeKAmXJl IHJpZ2h0IHRoYXQgYSB1c2VyIGNvdWxkIGFkZCBhIGJhY2tpbmcgY2hhaW4gdG8gdGhlIHRhcmdl dCBkdXJpbmcNCj4gdGhlIG9wZXJhdGlvbi4gIFRoZXkgcmVhbGx5IGhhdmUgdG8gbWFrZSBhbiBl ZmZvcnQgdG8gc2hvb3QgdGhlbXNlbHZlcw0KPiBpbiB0aGUgZm9vdCBmb3IgdGhpcyBiZWNhdXNl IHRoZSB0YXJnZXQgbXVzdCBoYXZlIGFuIGF1dG8tZ2VuZXJhdGVkIG5vZGUNCj4gbmFtZS4NCj4g DQo+IEkgc3VwcG9zZSB0aGUgYmVzdCB3b3VsZCBiZSBub3QgdG8gb3BlbiB0aGUgYmFja2luZyBj aGFpbiBpZiB0aGUgdGFyZ2V0DQo+IG5vZGUgYWxyZWFkeSBoYXMgYSBiYWNraW5nIGNoaWxkPw0K DQpIbW0sIGJ1dCB3ZSBzdGlsbCBzaG91bGQgZ2VuZXJhdGUgYW4gZXJyb3IsIGFzIHdlIGNhbid0 IGRvIHdoYXQgd2FzIHJlcXVlc3RlZC4NCg0KPiANCj4+PiArICAgICAgICByZXQgPSBiZHJ2X29w ZW5fYmFja2luZ19maWxlKGJkcnZfc2tpcF9yd19maWx0ZXJzKHRhcmdldCksIE5VTEwsDQo+Pj4g KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiYmFja2luZyIsIGVycnApOw0K Pj4+ICAgICAgICAgICAgaWYgKHJldCA8IDApIHsNCj4+PiAgICAgICAgICAgICAgICByZXR1cm47 DQo+Pj4gICAgICAgICAgICB9DQo+Pj4gQEAgLTE1MzEsOCArMTUzNiw4IEBAIHN0YXRpYyBCbG9j a0pvYiAqbWlycm9yX3N0YXJ0X2pvYigNCj4+PiAgICAgICAgTWlycm9yQmxvY2tKb2IgKnM7DQo+ Pj4gICAgICAgIE1pcnJvckJEU09wYXF1ZSAqYnNfb3BhcXVlOw0KPj4+ICAgICAgICBCbG9ja0Ry aXZlclN0YXRlICptaXJyb3JfdG9wX2JzOw0KPj4+IC0gICAgYm9vbCB0YXJnZXRfZ3JhcGhfbW9k Ow0KPj4+ICAgICAgICBib29sIHRhcmdldF9pc19iYWNraW5nOw0KPj4+ICsgICAgdWludDY0X3Qg dGFyZ2V0X3Blcm1zLCB0YXJnZXRfc2hhcmVkX3Blcm1zOw0KPj4+ICAgICAgICBFcnJvciAqbG9j YWxfZXJyID0gTlVMTDsNCj4+PiAgICAgICAgaW50IHJldDsNCj4+PiAgICANCj4+PiBAQCAtMTU1 MSw3ICsxNTU2LDcgQEAgc3RhdGljIEJsb2NrSm9iICptaXJyb3Jfc3RhcnRfam9iKA0KPj4+ICAg ICAgICAgICAgYnVmX3NpemUgPSBERUZBVUxUX01JUlJPUl9CVUZfU0laRTsNCj4+PiAgICAgICAg fQ0KPj4+ICAgIA0KPj4+IC0gICAgaWYgKGJzID09IHRhcmdldCkgew0KPj4+ICsgICAgaWYgKGJk cnZfc2tpcF9yd19maWx0ZXJzKGJzKSA9PSBiZHJ2X3NraXBfcndfZmlsdGVycyh0YXJnZXQpKSB7 DQo+Pj4gICAgICAgICAgICBlcnJvcl9zZXRnKGVycnAsICJDYW4ndCBtaXJyb3Igbm9kZSBpbnRv IGl0c2VsZiIpOw0KPj4+ICAgICAgICAgICAgcmV0dXJuIE5VTEw7DQo+Pj4gICAgICAgIH0NCj4+ PiBAQCAtMTYxNSwxNSArMTYyMCw1MCBAQCBzdGF0aWMgQmxvY2tKb2IgKm1pcnJvcl9zdGFydF9q b2IoDQo+Pj4gICAgICAgICAqIEluIHRoZSBjYXNlIG9mIGFjdGl2ZSBjb21taXQsIHRoaW5ncyBs b29rIGEgYml0IGRpZmZlcmVudCwgdGhvdWdoLA0KPj4+ICAgICAgICAgKiBiZWNhdXNlIHRoZSB0 YXJnZXQgaXMgYW4gYWxyZWFkeSBwb3B1bGF0ZWQgYmFja2luZyBmaWxlIGluIGFjdGl2ZSB1c2Uu DQo+Pj4gICAgICAgICAqIFdlIGNhbiBhbGxvdyBhbnl0aGluZyBleGNlcHQgcmVzaXplIHRoZXJl LiovDQo+Pj4gKw0KPj4+ICsgICAgdGFyZ2V0X3Blcm1zID0gQkxLX1BFUk1fV1JJVEU7DQo+Pj4g KyAgICB0YXJnZXRfc2hhcmVkX3Blcm1zID0gQkxLX1BFUk1fV1JJVEVfVU5DSEFOR0VEOw0KPj4+ ICsNCj4+PiAgICAgICAgdGFyZ2V0X2lzX2JhY2tpbmcgPSBiZHJ2X2NoYWluX2NvbnRhaW5zKGJz LCB0YXJnZXQpOw0KPj4+IC0gICAgdGFyZ2V0X2dyYXBoX21vZCA9IChiYWNraW5nX21vZGUgIT0g TUlSUk9SX0xFQVZFX0JBQ0tJTkdfQ0hBSU4pOw0KPj4+ICsgICAgaWYgKHRhcmdldF9pc19iYWNr aW5nKSB7DQo+Pj4gKyAgICAgICAgaW50NjRfdCBic19zaXplLCB0YXJnZXRfc2l6ZTsNCj4+DQo+ PiA8ZW1wdHkgYWZ0ZXIgZGVmaW5pdGlvbnM+DQo+IA0KPiBJcyB0aGF0IHBhcnQgb2YgYW55IG9m IG91ciBndWlkZWxpbmVzPyA6LSkNCj4gDQo+IFN1cmUsIHdpbGwgYWRkLg0KDQpOb3Qgc3VyZS4g U29tZW9uZSBhc2tlZCBtZSBhYm91dCBpdCBvbiBsaXN0IGluIHBhc3QgYW5kIEknbSB1c2VkIHRv Lg0KDQo+IA0KPj4+ICsgICAgICAgIGJzX3NpemUgPSBiZHJ2X2dldGxlbmd0aChicyk7DQo+Pj4g KyAgICAgICAgaWYgKGJzX3NpemUgPCAwKSB7DQo+Pj4gKyAgICAgICAgICAgIGVycm9yX3NldGdf ZXJybm8oZXJycCwgLWJzX3NpemUsDQo+Pj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IkNvdWxkIG5vdCBpbnF1aXJlIHRvcCBpbWFnZSBzaXplIik7DQo+Pj4gKyAgICAgICAgICAgIGdv dG8gZmFpbDsNCj4+PiArICAgICAgICB9DQo+Pj4gKw0KPj4+ICsgICAgICAgIHRhcmdldF9zaXpl ID0gYmRydl9nZXRsZW5ndGgodGFyZ2V0KTsNCj4+PiArICAgICAgICBpZiAodGFyZ2V0X3NpemUg PCAwKSB7DQo+Pj4gKyAgICAgICAgICAgIGVycm9yX3NldGdfZXJybm8oZXJycCwgLXRhcmdldF9z aXplLA0KPj4+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJDb3VsZCBub3QgaW5xdWly ZSBiYXNlIGltYWdlIHNpemUiKTsNCj4+PiArICAgICAgICAgICAgZ290byBmYWlsOw0KPj4+ICsg ICAgICAgIH0NCj4+PiArDQo+Pj4gKyAgICAgICAgaWYgKHRhcmdldF9zaXplIDwgYnNfc2l6ZSkg ew0KPj4+ICsgICAgICAgICAgICB0YXJnZXRfcGVybXMgfD0gQkxLX1BFUk1fUkVTSVpFOw0KPj4+ ICsgICAgICAgIH0NCj4+PiArDQo+Pj4gKyAgICAgICAgdGFyZ2V0X3NoYXJlZF9wZXJtcyB8PSBC TEtfUEVSTV9DT05TSVNURU5UX1JFQUQNCj4+PiArICAgICAgICAgICAgICAgICAgICAgICAgICAg IHwgIEJMS19QRVJNX1dSSVRFDQo+Pj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICBC TEtfUEVSTV9HUkFQSF9NT0Q7DQo+Pj4gKyAgICB9IGVsc2UgaWYgKGJkcnZfY2hhaW5fY29udGFp bnMoYnMsIGJkcnZfc2tpcF9yd19maWx0ZXJzKHRhcmdldCkpKSB7DQo+Pj4gKyAgICAgICAgLyoN Cj4+PiArICAgICAgICAgKiBXZSBtYXkgd2FudCB0byBhbGxvdyB0aGlzIGluIHRoZSBmdXR1cmUs IGJ1dCBpdCB3b3VsZA0KPj4+ICsgICAgICAgICAqIHJlcXVpcmUgdGFraW5nIHNvbWUgZXh0cmEg Y2FyZS4NCj4+PiArICAgICAgICAgKi8NCj4+PiArICAgICAgICBlcnJvcl9zZXRnKGVycnAsICJD YW5ub3QgbWlycm9yIHRvIGEgZmlsdGVyIG9uIHRvcCBvZiBhIG5vZGUgaW4gdGhlICINCj4+PiAr ICAgICAgICAgICAgICAgICAgICJzb3VyY2UncyBiYWNraW5nIGNoYWluIik7DQo+Pj4gKyAgICAg ICAgZ290byBmYWlsOw0KPj4+ICsgICAgfQ0KPj4+ICsNCj4+PiArICAgIGlmIChiYWNraW5nX21v ZGUgIT0gTUlSUk9SX0xFQVZFX0JBQ0tJTkdfQ0hBSU4pIHsNCj4+PiArICAgICAgICB0YXJnZXRf cGVybXMgfD0gQkxLX1BFUk1fR1JBUEhfTU9EOw0KPj4+ICsgICAgfQ0KPj4+ICsNCj4+PiAgICAg ICAgcy0+dGFyZ2V0ID0gYmxrX25ldyhzLT5jb21tb24uam9iLmFpb19jb250ZXh0LA0KPj4+IC0g ICAgICAgICAgICAgICAgICAgICAgICBCTEtfUEVSTV9XUklURSB8IEJMS19QRVJNX1JFU0laRSB8 DQo+Pj4gLSAgICAgICAgICAgICAgICAgICAgICAgICh0YXJnZXRfZ3JhcGhfbW9kID8gQkxLX1BF Uk1fR1JBUEhfTU9EIDogMCksDQo+Pj4gLSAgICAgICAgICAgICAgICAgICAgICAgIEJMS19QRVJN X1dSSVRFX1VOQ0hBTkdFRCB8DQo+Pj4gLSAgICAgICAgICAgICAgICAgICAgICAgICh0YXJnZXRf aXNfYmFja2luZyA/IEJMS19QRVJNX0NPTlNJU1RFTlRfUkVBRCB8DQo+Pj4gLSAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEJMS19QRVJNX1dSSVRFIHwNCj4+PiAt ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQkxLX1BFUk1fR1JB UEhfTU9EIDogMCkpOw0KPj4+ICsgICAgICAgICAgICAgICAgICAgICAgICB0YXJnZXRfcGVybXMs IHRhcmdldF9zaGFyZWRfcGVybXMpOw0KPj4+ICAgICAgICByZXQgPSBibGtfaW5zZXJ0X2JzKHMt PnRhcmdldCwgdGFyZ2V0LCBlcnJwKTsNCj4+PiAgICAgICAgaWYgKHJldCA8IDApIHsNCj4+PiAg ICAgICAgICAgIGdvdG8gZmFpbDsNCj4+PiBAQCAtMTY0Nyw2ICsxNjg3LDcgQEAgc3RhdGljIEJs b2NrSm9iICptaXJyb3Jfc3RhcnRfam9iKA0KPj4+ICAgICAgICBzLT5iYWNraW5nX21vZGUgPSBi YWNraW5nX21vZGU7DQo+Pj4gICAgICAgIHMtPmNvcHlfbW9kZSA9IGNvcHlfbW9kZTsNCj4+PiAg ICAgICAgcy0+YmFzZSA9IGJhc2U7DQo+Pj4gKyAgICBzLT5iYXNlX292ZXJsYXkgPSBiZHJ2X2Zp bmRfb3ZlcmxheShicywgYmFzZSk7DQo+Pj4gICAgICAgIHMtPmdyYW51bGFyaXR5ID0gZ3JhbnVs YXJpdHk7DQo+Pj4gICAgICAgIHMtPmJ1Zl9zaXplID0gUk9VTkRfVVAoYnVmX3NpemUsIGdyYW51 bGFyaXR5KTsNCj4+PiAgICAgICAgcy0+dW5tYXAgPSB1bm1hcDsNCj4+PiBAQCAtMTY5MywxNSAr MTczNCwzOSBAQCBzdGF0aWMgQmxvY2tKb2IgKm1pcnJvcl9zdGFydF9qb2IoDQo+Pj4gICAgICAg IC8qIEluIGNvbW1pdF9hY3RpdmVfc3RhcnQoKSBhbGwgaW50ZXJtZWRpYXRlIG5vZGVzIGRpc2Fw cGVhciwgc28NCj4+PiAgICAgICAgICogYW55IGpvYnMgaW4gdGhlbSBtdXN0IGJlIGJsb2NrZWQg Ki8NCj4+PiAgICAgICAgaWYgKHRhcmdldF9pc19iYWNraW5nKSB7DQo+Pj4gLSAgICAgICAgQmxv Y2tEcml2ZXJTdGF0ZSAqaXRlcjsNCj4+PiAtICAgICAgICBmb3IgKGl0ZXIgPSBiYWNraW5nX2Jz KGJzKTsgaXRlciAhPSB0YXJnZXQ7IGl0ZXIgPSBiYWNraW5nX2JzKGl0ZXIpKSB7DQo+Pj4gLSAg ICAgICAgICAgIC8qIFhYWCBCTEtfUEVSTV9XUklURSBuZWVkcyB0byBiZSBhbGxvd2VkIHNvIHdl IGRvbid0IGJsb2NrDQo+Pj4gLSAgICAgICAgICAgICAqIG91cnNlbHZlcyBhdCBzLT5iYXNlIChp ZiB3cml0ZXMgYXJlIGJsb2NrZWQgZm9yIGEgbm9kZSwgdGhleSBhcmUNCj4+PiAtICAgICAgICAg ICAgICogYWxzbyBibG9ja2VkIGZvciBpdHMgYmFja2luZyBmaWxlKS4gVGhlIG90aGVyIG9wdGlv bnMgd291bGQgYmUgYQ0KPj4+IC0gICAgICAgICAgICAgKiBzZWNvbmQgZmlsdGVyIGRyaXZlciBh Ym92ZSBzLT5iYXNlICg9PSB0YXJnZXQpLiAqLw0KPj4+ICsgICAgICAgIEJsb2NrRHJpdmVyU3Rh dGUgKml0ZXIsICpmaWx0ZXJlZF90YXJnZXQ7DQo+Pj4gKyAgICAgICAgdWludDY0X3QgaXRlcl9z aGFyZWRfcGVybXM7DQo+Pj4gKw0KPj4+ICsgICAgICAgIC8qDQo+Pj4gKyAgICAgICAgICogVGhl IHRvcG1vc3Qgbm9kZSB3aXRoDQo+Pj4gKyAgICAgICAgICogYmRydl9za2lwX3J3X2ZpbHRlcnMo ZmlsdGVyZWRfdGFyZ2V0KSA9PSBiZHJ2X3NraXBfcndfZmlsdGVycyh0YXJnZXQpDQo+Pj4gKyAg ICAgICAgICovDQo+Pj4gKyAgICAgICAgZmlsdGVyZWRfdGFyZ2V0ID0gYmRydl9maWx0ZXJlZF9j b3dfYnMoYmRydl9maW5kX292ZXJsYXkoYnMsIHRhcmdldCkpOw0KPj4+ICsNCj4+PiArICAgICAg ICBhc3NlcnQoYmRydl9za2lwX3J3X2ZpbHRlcnMoZmlsdGVyZWRfdGFyZ2V0KSA9PQ0KPj4+ICsg ICAgICAgICAgICAgICBiZHJ2X3NraXBfcndfZmlsdGVycyh0YXJnZXQpKTsNCj4+PiArDQo+Pj4g KyAgICAgICAgLyoNCj4+PiArICAgICAgICAgKiBYWFggQkxLX1BFUk1fV1JJVEUgbmVlZHMgdG8g YmUgYWxsb3dlZCBzbyB3ZSBkb24ndCBibG9jaw0KPj4+ICsgICAgICAgICAqIG91cnNlbHZlcyBh dCBzLT5iYXNlIChpZiB3cml0ZXMgYXJlIGJsb2NrZWQgZm9yIGEgbm9kZSwgdGhleSBhcmUNCj4+ PiArICAgICAgICAgKiBhbHNvIGJsb2NrZWQgZm9yIGl0cyBiYWNraW5nIGZpbGUpLiBUaGUgb3Ro ZXIgb3B0aW9ucyB3b3VsZCBiZSBhDQo+Pj4gKyAgICAgICAgICogc2Vjb25kIGZpbHRlciBkcml2 ZXIgYWJvdmUgcy0+YmFzZSAoPT0gdGFyZ2V0KS4NCj4+PiArICAgICAgICAgKi8NCj4+PiArICAg ICAgICBpdGVyX3NoYXJlZF9wZXJtcyA9IEJMS19QRVJNX1dSSVRFX1VOQ0hBTkdFRCB8IEJMS19Q RVJNX1dSSVRFOw0KPj4+ICsNCj4+PiArICAgICAgICBmb3IgKGl0ZXIgPSBiZHJ2X2ZpbHRlcmVk X2JzKGJzKTsgaXRlciAhPSB0YXJnZXQ7DQo+Pj4gKyAgICAgICAgICAgICBpdGVyID0gYmRydl9m aWx0ZXJlZF9icyhpdGVyKSkNCj4+PiArICAgICAgICB7DQo+Pj4gKyAgICAgICAgICAgIGlmIChp dGVyID09IGZpbHRlcmVkX3RhcmdldCkgew0KPj4+ICsgICAgICAgICAgICAgICAgLyoNCj4+PiAr ICAgICAgICAgICAgICAgICAqIEZyb20gaGVyZSBvbiwgYWxsIG5vZGVzIGFyZSBmaWx0ZXJzIG9u IHRoZSBiYXNlLg0KPj4+ICsgICAgICAgICAgICAgICAgICogVGhpcyBhbGxvd3MgdXMgdG8gc2hh cmUgQkxLX1BFUk1fQ09OU0lTVEVOVF9SRUFELg0KPj4NCj4+IEknZCBwcmVmZXJlIHRvIGFkZCBz b21ldGhpbmcgbGlrZTogImJlY2F1c2Ugd2Ugc2hhcmUgaXQgb24gdGFyZ2V0IChzZWUgdGFyZ2V0 IEJsb2NrQmFja2VuZCBjcmVhdGlvbg0KPj4gYW5kIGNvcnJlc3BvbmRpbmcgY29tbWVudCBhYm92 ZSkiLg0KPiANCj4gSeKAmWQgcmF0aGVyIG5vdCByZWZlciB0byBvdGhlciBjb21tZW50cyBpbiBj YXNlIHRoZXkgY2hhbmdl4oCmICBNYXliZSBqdXN0DQo+IOKAnFRoaXMgYWxsb3dzIHVzIHRvIHNo YXJlIEJMS19QRVJNX0NPTlNJU1RFTlRfUkVBRCwgYXMgd2UgZG8gb24gdGhlDQo+IHRhcmdldC7i gJ0/ICBJIHRoaW5rIGlmIHNvbWVvbmUgaXMgaW50ZXJlc3RlZCwgdGhleSB3aWxsIHNjYW4gdGhl IGZpbGUgZm9yDQo+IHdoYXQgcGVybWlzc2lvbnMgYXJlIHNoYXJlZCBvbiB0aGUgdGFyZ2V0IGFu eXdheS4NCg0KT0suIFllcyBJIGp1c3Qgd2FudGVkIHRvIHN0cmVzcyB0aGF0IHdlIGp1c3QgZHVw bGljYXRlIGJlaGF2aW9yIGFib3V0IHRhcmdldCwgYXMgaXQgaGVscGVkDQptZSB0byB1bmRlcnN0 YW5kLg0KDQo+IA0KPj4+ICsgICAgICAgICAgICAgICAgICovDQo+Pj4gKyAgICAgICAgICAgICAg ICBpdGVyX3NoYXJlZF9wZXJtcyB8PSBCTEtfUEVSTV9DT05TSVNURU5UX1JFQUQ7DQo+Pj4gKyAg ICAgICAgICAgIH0NCj4+PiArDQo+Pj4gICAgICAgICAgICAgICAgcmV0ID0gYmxvY2tfam9iX2Fk ZF9iZHJ2KCZzLT5jb21tb24sICJpbnRlcm1lZGlhdGUgbm9kZSIsIGl0ZXIsIDAsDQo+Pj4gLSAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBCTEtfUEVSTV9XUklURV9VTkNIQU5H RUQgfCBCTEtfUEVSTV9XUklURSwNCj4+PiAtICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIGVycnApOw0KPj4+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg aXRlcl9zaGFyZWRfcGVybXMsIGVycnApOw0KPj4+ICAgICAgICAgICAgICAgIGlmIChyZXQgPCAw KSB7DQo+Pj4gICAgICAgICAgICAgICAgICAgIGdvdG8gZmFpbDsNCj4+PiAgICAgICAgICAgICAg ICB9DQo+Pj4gQEAgLTE3MzcsNyArMTgwMiw3IEBAIGZhaWw6DQo+Pj4gICAgICAgIGJzX29wYXF1 ZS0+c3RvcCA9IHRydWU7DQo+Pj4gICAgICAgIGJkcnZfY2hpbGRfcmVmcmVzaF9wZXJtcyhtaXJy b3JfdG9wX2JzLCBtaXJyb3JfdG9wX2JzLT5iYWNraW5nLA0KPj4+ICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgJmVycm9yX2Fib3J0KTsNCj4+PiAtICAgIGJkcnZfcmVwbGFjZV9ub2Rl KG1pcnJvcl90b3BfYnMsIGJhY2tpbmdfYnMobWlycm9yX3RvcF9icyksICZlcnJvcl9hYm9ydCk7 DQo+Pj4gKyAgICBiZHJ2X3JlcGxhY2Vfbm9kZShtaXJyb3JfdG9wX2JzLCBtaXJyb3JfdG9wX2Jz LT5iYWNraW5nLT5icywgJmVycm9yX2Fib3J0KTsNCj4+PiAgICANCj4+PiAgICAgICAgYmRydl91 bnJlZihtaXJyb3JfdG9wX2JzKTsNCj4+PiAgICANCj4+PiBAQCAtMTc2NCw3ICsxODI5LDcgQEAg dm9pZCBtaXJyb3Jfc3RhcnQoY29uc3QgY2hhciAqam9iX2lkLCBCbG9ja0RyaXZlclN0YXRlICpi cywNCj4+PiAgICAgICAgICAgIHJldHVybjsNCj4+PiAgICAgICAgfQ0KPj4+ICAgICAgICBpc19u b25lX21vZGUgPSBtb2RlID09IE1JUlJPUl9TWU5DX01PREVfTk9ORTsNCj4+PiAtICAgIGJhc2Ug PSBtb2RlID09IE1JUlJPUl9TWU5DX01PREVfVE9QID8gYmFja2luZ19icyhicykgOiBOVUxMOw0K Pj4+ICsgICAgYmFzZSA9IG1vZGUgPT0gTUlSUk9SX1NZTkNfTU9ERV9UT1AgPyBiZHJ2X2JhY2tp bmdfY2hhaW5fbmV4dChicykgOiBOVUxMOw0KPj4+ICAgICAgICBtaXJyb3Jfc3RhcnRfam9iKGpv Yl9pZCwgYnMsIGNyZWF0aW9uX2ZsYWdzLCB0YXJnZXQsIHJlcGxhY2VzLA0KPj4+ICAgICAgICAg ICAgICAgICAgICAgICAgIHNwZWVkLCBncmFudWxhcml0eSwgYnVmX3NpemUsIGJhY2tpbmdfbW9k ZSwNCj4+PiAgICAgICAgICAgICAgICAgICAgICAgICBvbl9zb3VyY2VfZXJyb3IsIG9uX3Rhcmdl dF9lcnJvciwgdW5tYXAsIE5VTEwsIE5VTEwsDQo+Pj4gZGlmZiAtLWdpdCBhL2Jsb2NrZGV2LmMg Yi9ibG9ja2Rldi5jDQo+Pj4gaW5kZXggYzU0MDgwMjEyNy4uYzQ1MWY1NTNmNyAxMDA2NDQNCj4+ DQo+Pg0KPj4gYmxvY2svbWlycm9jLmMgaXMgT0sgZm9yIG1lLiBDb250aW51ZSB3aXRoIGJsb2Nr ZGV2LmMuLi4NCj4+DQo+Pj4gLS0tIGEvYmxvY2tkZXYuYw0KPj4+ICsrKyBiL2Jsb2NrZGV2LmMN Cj4+PiBAQCAtMzg1MSw3ICszODUxLDcgQEAgc3RhdGljIHZvaWQgYmxvY2tkZXZfbWlycm9yX2Nv bW1vbihjb25zdCBjaGFyICpqb2JfaWQsIEJsb2NrRHJpdmVyU3RhdGUgKmJzLA0KPj4+ICAgICAg ICAgICAgcmV0dXJuOw0KPj4+ICAgICAgICB9DQo+Pj4gICAgDQo+Pj4gLSAgICBpZiAoIWJzLT5i YWNraW5nICYmIHN5bmMgPT0gTUlSUk9SX1NZTkNfTU9ERV9UT1ApIHsNCj4+PiArICAgIGlmICgh YmRydl9iYWNraW5nX2NoYWluX25leHQoYnMpICYmIHN5bmMgPT0gTUlSUk9SX1NZTkNfTU9ERV9U T1ApIHsNCj4+PiAgICAgICAgICAgIHN5bmMgPSBNSVJST1JfU1lOQ19NT0RFX0ZVTEw7DQo+Pj4g ICAgICAgIH0NCj4+PiAgICANCj4+PiBAQCAtMzkwMCw3ICszOTAwLDcgQEAgc3RhdGljIHZvaWQg YmxvY2tkZXZfbWlycm9yX2NvbW1vbihjb25zdCBjaGFyICpqb2JfaWQsIEJsb2NrRHJpdmVyU3Rh dGUgKmJzLA0KPj4+ICAgIA0KPj4+ICAgIHZvaWQgcW1wX2RyaXZlX21pcnJvcihEcml2ZU1pcnJv ciAqYXJnLCBFcnJvciAqKmVycnApDQo+Pj4gICAgew0KPj4+IC0gICAgQmxvY2tEcml2ZXJTdGF0 ZSAqYnM7DQo+Pj4gKyAgICBCbG9ja0RyaXZlclN0YXRlICpicywgKnVuZmlsdGVyZWRfYnM7DQo+ Pj4gICAgICAgIEJsb2NrRHJpdmVyU3RhdGUgKnNvdXJjZSwgKnRhcmdldF9iczsNCj4+PiAgICAg ICAgQWlvQ29udGV4dCAqYWlvX2NvbnRleHQ7DQo+Pj4gICAgICAgIEJsb2NrTWlycm9yQmFja2lu Z01vZGUgYmFja2luZ19tb2RlOw0KPj4+IEBAIC0zOTA5LDYgKzM5MDksNyBAQCB2b2lkIHFtcF9k cml2ZV9taXJyb3IoRHJpdmVNaXJyb3IgKmFyZywgRXJyb3IgKiplcnJwKQ0KPj4+ICAgICAgICBp bnQgZmxhZ3M7DQo+Pj4gICAgICAgIGludDY0X3Qgc2l6ZTsNCj4+PiAgICAgICAgY29uc3QgY2hh ciAqZm9ybWF0ID0gYXJnLT5mb3JtYXQ7DQo+Pj4gKyAgICBjb25zdCBjaGFyICpyZXBsYWNlc19u b2RlX25hbWUgPSBOVUxMOw0KPj4+ICAgICAgICBpbnQgcmV0Ow0KPj4+ICAgIA0KPj4+ICAgICAg ICBicyA9IHFtcF9nZXRfcm9vdF9icyhhcmctPmRldmljZSwgZXJycCk7DQo+Pj4gQEAgLTM5MjEs NiArMzkyMiwxNiBAQCB2b2lkIHFtcF9kcml2ZV9taXJyb3IoRHJpdmVNaXJyb3IgKmFyZywgRXJy b3IgKiplcnJwKQ0KPj4+ICAgICAgICAgICAgcmV0dXJuOw0KPj4+ICAgICAgICB9DQo+Pj4gICAg DQo+Pj4gKyAgICAvKg0KPj4+ICsgICAgICogSWYgdGhlIHVzZXIgaGFzIG5vdCBpbnN0cnVjdGVk IHVzIG90aGVyd2lzZSwgd2Ugc2hvdWxkIGxldCB0aGUNCj4+PiArICAgICAqIGJsb2NrIGpvYiBy dW4gZnJvbSBAYnMgKHRodXMgdGFraW5nIGludG8gYWNjb3VudCBhbGwgZmlsdGVycyBvbg0KPj4+ ICsgICAgICogaXQpIGJ1dCByZXBsYWNlIEB1bmZpbHRlcmVkX2JzIHdoZW4gaXQgZmluaXNoZXMg KHRodXMgbm90DQo+Pj4gKyAgICAgKiByZW1vdmluZyB0aG9zZSBmaWx0ZXJzKS4NCj4+PiArICAg ICAqIChBbmQgaWYgdGhlcmUgYXJlIGFueSBleHBsaWNpdCBmaWx0ZXJzLCB3ZSBzaG91bGQgYXNz dW1lIHRoZQ0KPj4+ICsgICAgICogIHVzZXIga25vd3MgaG93IHRvIHVzZSB0aGUgQHJlcGxhY2Vz IG9wdGlvbi4pDQo+Pj4gKyAgICAgKi8NCj4+PiArICAgIHVuZmlsdGVyZWRfYnMgPSBiZHJ2X3Nr aXBfaW1wbGljaXRfZmlsdGVycyhicyk7DQo+Pj4gKw0KPj4+ICAgICAgICBhaW9fY29udGV4dCA9 IGJkcnZfZ2V0X2Fpb19jb250ZXh0KGJzKTsNCj4+PiAgICAgICAgYWlvX2NvbnRleHRfYWNxdWly ZShhaW9fY29udGV4dCk7DQo+Pj4gICAgDQo+Pj4gQEAgLTM5MzQsOCArMzk0NSwxNCBAQCB2b2lk IHFtcF9kcml2ZV9taXJyb3IoRHJpdmVNaXJyb3IgKmFyZywgRXJyb3IgKiplcnJwKQ0KPj4+ICAg ICAgICB9DQo+Pj4gICAgDQo+Pj4gICAgICAgIGZsYWdzID0gYnMtPm9wZW5fZmxhZ3MgfCBCRFJW X09fUkRXUjsNCj4+PiAtICAgIHNvdXJjZSA9IGJhY2tpbmdfYnMoYnMpOw0KPj4+ICsgICAgc291 cmNlID0gYmRydl9maWx0ZXJlZF9jb3dfYnModW5maWx0ZXJlZF9icyk7DQo+Pj4gICAgICAgIGlm ICghc291cmNlICYmIGFyZy0+c3luYyA9PSBNSVJST1JfU1lOQ19NT0RFX1RPUCkgew0KPj4NCj4+ DQo+PiBIbW0sIHlvdSBoYW5kbGUgdGhpcyBjYXNlIGEgYml0IGRpZmZlcmVudGx5IGhlcmUgYW5k IGluIGJsb2NrZGV2X21pcnJvcl9jb21tb24uLg0KPj4gQ2FuIHdlIGhhbmRsZSBpdCBvbmx5IGlu IGJsb2NrZGV2X21pcnJvcl9jb21tb24sIHRvIGJlIGNvbnNpc3RlbnQgd2l0aCBxbXBfYmxvY2tk ZXZfbWlycm9yPw0KPiANCj4gV2hhdCBleGFjdGx5IGRvIHlvdSBtZWFuPyAgVGhlIGRpZmZlcmVu Y2UgYmV0d2VlbiBza2lwcGluZyBhbGwgZmlsdGVycw0KPiBhbmQganVzdCBza2lwcGluZyBpbXBs aWNpdCBmaWx0ZXJzPyAgSG0uDQo+IA0KPiBGaXJzdCwgdGhlIGNoZWNrIGluIGJsb2NrZGV2X21p cnJvcl9jb21tb24oKSBzaG91bGQgYWN0dWFsbHkgYmUNCj4gdW5uZWNlc3NhcnkuICBJbiBxbXBf e2Jsb2NrZGV2LGRyaXZlfV9taXJyb3IoKSwgd2UgZG8gbmVhcmx5IHRoZSBzYW1lDQo+IGNoZWNr IGFueXdheSAoYW5kIHRoZW4gZm9yY2Ugc3luYz1mdWxsIGlmIHRoZXJlIGlzIG5vIGJhY2tpbmcg ZmlsZSkuDQoNCkhtbSwgSSBzZWUgaXQgb25seSBpbiBxbXBfZHJpdmVfbWlycm9yLCBub3QgaW4g X2Jsb2NrZGV2Xw0KDQo+ICBTbw0KPiBpZiBhbGwgdGhyZWUgZnVuY3Rpb25zIGRpZCB0aGUgc2Ft ZSBjaGVjaywgd2Ugd291bGRu4oCZdCBuZWVkIGl0IGluDQo+IGJsb2NrZGV2X21pcnJvcl9jb21t b24oKS4NCg0KQW5kIGlmIGl0IHdhcyBzbywgYmV0dGVyIGhhdmUgb25lIGNoZWNrIGluIF9jb21t b24gdGhhbiB0d28gZHVwbGljYXRlZC4NCg0KPiANCj4gU2Vjb25kLCBsZXTigJlzIGxvb2sgYXQg dGhlIGRpZmZlcmVuY2UgaW4gYW4gZXhhbXBsZTogT25lIHdoZXJlDQo+IGJsb2NrZGV2X21pcnJv cl9jb21tb24oKSB3b3VsZCBub3QgZGVjaWRlIHRvIGVuZm9yY2UgbW9kZT1mdWxsLCBidXQNCj4g cW1wX3tibG9ja2Rldixkcml2ZX1fbWlycm9yKCkgd291bGQuDQo+IFRoaXMgaGFwcGVucyB3aGVu IEBicyBpcyBhbiBleHBsaWNpdCBmaWx0ZXIgb3ZlciBzb21lIG92ZXJsYXkgd2l0aCBhDQo+IGJh Y2tpbmcgZmlsZSwgZS5nLjoNCj4gDQo+IHRocm90dGxlIC0tZmlsZS0tPiBxY293MiAtLWJhY2tp bmctLT4gcmF3DQo+IA0KPiBJdOKAmXMgY29ycmVjdCB0byBydW4gdGhlIG1pcnJvciBqb2IgZnJv bSB0aGUgdGhyb3R0bGUgbm9kZTsgYnV0IEBzb3VyY2UNCj4gc2hvdWxkIGJlIGJkcnZfYmFja2lu Z19jaGFpbl9uZXh0KCkgc28gaXQgd2lsbCBwb2ludCB0byB0aGUgcmF3IG5vZGUuDQo+IEN1cnJl bnRseSwgaXQgaXMgTlVMTCAoYmVjYXVzZSB0aGUgdGhyb3R0bGUgbm9kZSBkb2VzIG5vdCBoYXZl IGEgQ09XIGNoaWxkKS4NCj4gDQo+IEJ1dCB0aGVuIGFnYWluLCBJ4oCZdmUgbWFkZSBxbXBfe2Js b2NrZGV2LGRyaXZlfV9taXJyb3IoKSB0aHJvdyBhbiBlcnJvcg0KPiBpbiBzdWNoIGEgY2FzZToN Cj4gDQo+Pj4gKyAgICAgICAgaWYgKGJkcnZfZmlsdGVyZWRfYnModW5maWx0ZXJlZF9icykpIHsN Cj4+PiArICAgICAgICAgICAgLyogQHVuZmlsdGVyZWRfYnMgaXMgYW4gZXhwbGljaXQgZmlsdGVy ICovDQo+Pj4gKyAgICAgICAgICAgIGVycm9yX3NldGcoZXJycCwgIkNhbm5vdCBwZXJmb3JtIHN5 bmM9dG9wIG1pcnJvciB0aHJvdWdoIGFuICINCj4+PiArICAgICAgICAgICAgICAgICAgICAgICAi ZXhwbGljaXRseSBhZGRlZCBmaWx0ZXIgbm9kZSBvbiB0aGUgc291cmNlIik7DQo+Pj4gKyAgICAg ICAgICAgIGdvdG8gb3V0Ow0KPj4+ICsgICAgICAgIH0NCj4gDQo+IFNvIGl0IGlzbuKAmXQgcmVh bGx5IGEgcHJvYmxlbS4gIFN0aWxsLCBkb2VzIHRoZSBlcnJvciBtYWtlIHNlbnNlPyAgU2hvdWxk DQo+IHdlIGp1c3QgYWxsb3cgdGhhdCBjYXNlIGJ5IGxldHRpbmcgc291cmNlIGJlDQo+IGJkcnZf ZmlsdGVyZWRfY293X2JzKGJkcnZfc2tpcF9yd19maWx0ZXJzKGJzKSk/DQoNCkxvb2tzIGdvb2Qu IEFzIEkgdW5kZXJzdGFuZCwgeW91IGhhdmUgdGhlIHRlc3QgKDQwLzQyKSBmb3IgdGhpcyBjYXNl IGFuZCBpdA0Kd29ya3MgZm9yIF9ibG9ja2Rldl8gYW5kIGZvciBmb3IgX2RyaXZlXyB2ZXJzaW9u IG9mIGNvbW1hbmQuIE9mIGNvdXJzZSwgdGhleSdkDQpiZXR0ZXIgYmVoYXZlIGluIHNhbWUgbWFu bmVyLg0KDQo+IA0KPiAoQlRXLCBJIGp1c3Qgbm90aWNlZCB0aGF0IEBiYXNlIHNlZW1zIHRvIGJl IHByZXR0eSBtdWNoIHVudXNlZCBpbg0KPiBibG9jay9taXJyb3IuYy4gIEl0IG9ubHkgcmVhbGx5 IHVzZXMgQGJhc2Vfb3ZlcmxheSBub3cuICBTbyBJIHN1cHBvc2UgaXQNCj4gbWFrZXMgc2Vuc2Ug dG8gcmVtb3ZlIGl0IGluIHY3LikNCj4gDQo+Pj4gICAgICAgICAgICBhcmctPnN5bmMgPSBNSVJS T1JfU1lOQ19NT0RFX0ZVTEw7DQo+Pj4gICAgICAgIH0NCj4+PiAgICAgICAgaWYgKGFyZy0+c3lu YyA9PSBNSVJST1JfU1lOQ19NT0RFX05PTkUpIHsNCj4+PiBAQCAtMzk1NCw2ICszOTcxLDkgQEAg dm9pZCBxbXBfZHJpdmVfbWlycm9yKERyaXZlTWlycm9yICphcmcsIEVycm9yICoqZXJycCkNCj4+ PiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIgbmFtZWQgbm9kZSBvZiB0aGUgZ3Jh cGgiKTsNCj4+PiAgICAgICAgICAgICAgICBnb3RvIG91dDsNCj4+PiAgICAgICAgICAgIH0NCj4+ PiArICAgICAgICByZXBsYWNlc19ub2RlX25hbWUgPSBhcmctPnJlcGxhY2VzOw0KPj4+ICsgICAg fSBlbHNlIGlmICh1bmZpbHRlcmVkX2JzICE9IGJzKSB7DQo+Pj4gKyAgICAgICAgcmVwbGFjZXNf bm9kZV9uYW1lID0gdW5maWx0ZXJlZF9icy0+bm9kZV9uYW1lOw0KPj4+ICAgICAgICB9DQo+Pj4g ICAgDQo+Pj4gICAgICAgIGlmIChhcmctPm1vZGUgPT0gTkVXX0lNQUdFX01PREVfQUJTT0xVVEVf UEFUSFMpIHsNCj4+PiBAQCAtMzk3Myw2ICszOTkzLDkgQEAgdm9pZCBxbXBfZHJpdmVfbWlycm9y KERyaXZlTWlycm9yICphcmcsIEVycm9yICoqZXJycCkNCj4+PiAgICAgICAgICAgIGJkcnZfaW1n X2NyZWF0ZShhcmctPnRhcmdldCwgZm9ybWF0LA0KPj4+ICAgICAgICAgICAgICAgICAgICAgICAg ICAgIE5VTEwsIE5VTEwsIE5VTEwsIHNpemUsIGZsYWdzLCBmYWxzZSwgJmxvY2FsX2Vycik7DQo+ Pj4gICAgICAgIH0gZWxzZSB7DQo+Pj4gKyAgICAgICAgLyogSW1wbGljaXQgZmlsdGVycyBzaG91 bGQgbm90IGFwcGVhciBpbiB0aGUgZmlsZW5hbWUgKi8NCj4+PiArICAgICAgICBCbG9ja0RyaXZl clN0YXRlICpleHBsaWNpdF9iYWNraW5nID0gYmRydl9za2lwX2ltcGxpY2l0X2ZpbHRlcnMoc291 cmNlKTsNCj4+PiArDQo+Pj4gICAgICAgICAgICBzd2l0Y2ggKGFyZy0+bW9kZSkgew0KPj4+ICAg ICAgICAgICAgY2FzZSBORVdfSU1BR0VfTU9ERV9FWElTVElORzoNCj4+PiAgICAgICAgICAgICAg ICBicmVhazsNCj4+PiBAQCAtMzk4MCw4ICs0MDAzLDggQEAgdm9pZCBxbXBfZHJpdmVfbWlycm9y KERyaXZlTWlycm9yICphcmcsIEVycm9yICoqZXJycCkNCj4+PiAgICAgICAgICAgICAgICAvKiBj cmVhdGUgbmV3IGltYWdlIHdpdGggYmFja2luZyBmaWxlICovDQo+Pj4gICAgICAgICAgICAgICAg YmRydl9yZWZyZXNoX2ZpbGVuYW1lKHNvdXJjZSk7DQo+Pj4gICAgICAgICAgICAgICAgYmRydl9p bWdfY3JlYXRlKGFyZy0+dGFyZ2V0LCBmb3JtYXQsDQo+Pj4gLSAgICAgICAgICAgICAgICAgICAg ICAgICAgICBzb3VyY2UtPmZpbGVuYW1lLA0KPj4+IC0gICAgICAgICAgICAgICAgICAgICAgICAg ICAgc291cmNlLT5kcnYtPmZvcm1hdF9uYW1lLA0KPj4+ICsgICAgICAgICAgICAgICAgICAgICAg ICAgICAgZXhwbGljaXRfYmFja2luZy0+ZmlsZW5hbWUsDQo+Pj4gKyAgICAgICAgICAgICAgICAg ICAgICAgICAgICBleHBsaWNpdF9iYWNraW5nLT5kcnYtPmZvcm1hdF9uYW1lLA0KPj4+ICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBOVUxMLCBzaXplLCBmbGFncywgZmFsc2UsICZsb2Nh bF9lcnIpOw0KPj4+ICAgICAgICAgICAgICAgIGJyZWFrOw0KPj4+ICAgICAgICAgICAgZGVmYXVs dDoNCj4+PiBAQCAtNDAxNyw3ICs0MDQwLDcgQEAgdm9pZCBxbXBfZHJpdmVfbWlycm9yKERyaXZl TWlycm9yICphcmcsIEVycm9yICoqZXJycCkNCj4+PiAgICAgICAgfQ0KPj4+ICAgIA0KPj4+ICAg ICAgICBibG9ja2Rldl9taXJyb3JfY29tbW9uKGFyZy0+aGFzX2pvYl9pZCA/IGFyZy0+am9iX2lk IDogTlVMTCwgYnMsIHRhcmdldF9icywNCj4+PiAtICAgICAgICAgICAgICAgICAgICAgICAgICAg YXJnLT5oYXNfcmVwbGFjZXMsIGFyZy0+cmVwbGFjZXMsIGFyZy0+c3luYywNCj4+PiArICAgICAg ICAgICAgICAgICAgICAgICAgICAgISFyZXBsYWNlc19ub2RlX25hbWUsIHJlcGxhY2VzX25vZGVf bmFtZSwgYXJnLT5zeW5jLA0KPj4+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJhY2tp bmdfbW9kZSwgYXJnLT5oYXNfc3BlZWQsIGFyZy0+c3BlZWQsDQo+Pj4gICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgYXJnLT5oYXNfZ3JhbnVsYXJpdHksIGFyZy0+Z3JhbnVsYXJpdHksDQo+ Pj4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXJnLT5oYXNfYnVmX3NpemUsIGFyZy0+ YnVmX3NpemUsDQo+Pj4gQEAgLTQwNTMsNyArNDA3Niw3IEBAIHZvaWQgcW1wX2Jsb2NrZGV2X21p cnJvcihib29sIGhhc19qb2JfaWQsIGNvbnN0IGNoYXIgKmpvYl9pZCwNCj4+PiAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgYm9vbCBoYXNfYXV0b19kaXNtaXNzLCBib29sIGF1dG9fZGlzbWlz cywNCj4+PiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRXJyb3IgKiplcnJwKQ0KPj4+ICAg IHsNCj4+PiAtICAgIEJsb2NrRHJpdmVyU3RhdGUgKmJzOw0KPj4+ICsgICAgQmxvY2tEcml2ZXJT dGF0ZSAqYnMsICp1bmZpbHRlcmVkX2JzOw0KPj4+ICAgICAgICBCbG9ja0RyaXZlclN0YXRlICp0 YXJnZXRfYnM7DQo+Pj4gICAgICAgIEFpb0NvbnRleHQgKmFpb19jb250ZXh0Ow0KPj4+ICAgICAg ICBCbG9ja01pcnJvckJhY2tpbmdNb2RlIGJhY2tpbmdfbW9kZSA9IE1JUlJPUl9MRUFWRV9CQUNL SU5HX0NIQUlOOw0KPj4+IEBAIC00MDY1LDYgKzQwODgsMTYgQEAgdm9pZCBxbXBfYmxvY2tkZXZf bWlycm9yKGJvb2wgaGFzX2pvYl9pZCwgY29uc3QgY2hhciAqam9iX2lkLA0KPj4+ICAgICAgICAg ICAgcmV0dXJuOw0KPj4+ICAgICAgICB9DQo+Pj4gICAgDQo+Pj4gKyAgICAvKg0KPj4+ICsgICAg ICogU2FtZSBhcyBpbiBxbXBfZHJpdmVfbWlycm9yKCk6DQo+Pg0KPj4gVGhlbiwgbWF5IGJlIGJl dHRlciBkbyBpdCBpbiBibG9ja2Rldl9taXJyb3JfY29tbW9uID8NCj4gDQo+IEhtLCBtYXliZS4g IFNob3VsZCB3ZSBkZWNpZGUgdG8gbGV0IEBzb3VyY2UgYmUNCj4gYmRydl9maWx0ZXJlZF9jb3df YnMoYmRydl9za2lwX3J3X2ZpbHRlcnMoYnMpKSBpbiBxbXBfZHJpdmVfbWlycm9yKCksIEkNCj4g ZG9u4oCZdCB0aGluayB3ZSBuZWVkIEB1bmZpbHRlcmVkX2JzIHRoZXJlIHRvIGRldGVybWluZSBA c291cmNlLg0KPiANCj4gTWF4DQo+IA0KPj4+IFdlIHdhbnQgdG8gcnVuIHRoZSBqb2IgZnJvbSBA YnMsDQo+Pj4gKyAgICAgKiBidXQgd2Ugd2FudCB0byByZXBsYWNlIEB1bmZpbHRlcmVkX2JzIG9u IGNvbXBsZXRpb24uDQo+Pj4gKyAgICAgKi8NCj4+PiArICAgIHVuZmlsdGVyZWRfYnMgPSBiZHJ2 X3NraXBfaW1wbGljaXRfZmlsdGVycyhicyk7DQo+Pj4gKyAgICBpZiAoIWhhc19yZXBsYWNlcyAm JiB1bmZpbHRlcmVkX2JzICE9IGJzKSB7DQo+Pj4gKyAgICAgICAgcmVwbGFjZXMgPSB1bmZpbHRl cmVkX2JzLT5ub2RlX25hbWU7DQo+Pj4gKyAgICAgICAgaGFzX3JlcGxhY2VzID0gdHJ1ZTsNCj4+ PiArICAgIH0NCj4+PiArDQo+Pj4gICAgICAgIHRhcmdldF9icyA9IGJkcnZfbG9va3VwX2JzKHRh cmdldCwgdGFyZ2V0LCBlcnJwKTsNCj4+PiAgICAgICAgaWYgKCF0YXJnZXRfYnMpIHsNCj4+PiAg ICAgICAgICAgIHJldHVybjsNCj4+Pg0KPj4NCj4+DQo+IA0KPiANCg0KDQotLSANCkJlc3QgcmVn YXJkcywNClZsYWRpbWlyDQo=