From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mails.dpdk.org (mails.dpdk.org [217.70.189.124]) by inbox.dpdk.org (Postfix) with ESMTP id 09271A054A; Tue, 25 Oct 2022 11:16:02 +0200 (CEST) Received: from [217.70.189.124] (localhost [127.0.0.1]) by mails.dpdk.org (Postfix) with ESMTP id E18A642BB8; Tue, 25 Oct 2022 11:16:01 +0200 (CEST) Received: from mga12.intel.com (mga12.intel.com [192.55.52.136]) by mails.dpdk.org (Postfix) with ESMTP id E42BB41143 for ; Tue, 25 Oct 2022 11:15:58 +0200 (CEST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=intel.com; i=@intel.com; q=dns/txt; s=Intel; t=1666689359; x=1698225359; h=from:to:cc:subject:date:message-id:references: in-reply-to:content-transfer-encoding:mime-version; bh=C6nLlBDj8G3uLv40UqeCgyZT3Xe7LfXUiVz5JKNBngA=; b=AEPzesDnPPMbiUoYwGCYFC4RyabDxkGwXSngeULpOPXUNGCqZSFzwjXJ 0msVS5Rv3eImOm77y0InptZ2jm62+f/qGqX61KzsxNrtd9pqMT4dvvGxB t2mYIdrv4r3uYKc09ypAxnqWAsunMu4KGyTP9oD0jgbfGhYqsK6pAJiTt 8ZgRq51aNtkZA1AkY3zc9kR0lHZtdG9kk2x7tasZfnBP3dgwbu4giyGqm 1URkuf6D2HANZS246cjTexyMCP7+5n+l+fxJeSd7BZdgSUeV/g35q0riO Xpyc7rPQLv2XDvWVrQYoZHzmTLujjfwQCe4kHDpMviGGLnIrELEv3xxme Q==; X-IronPort-AV: E=McAfee;i="6500,9779,10510"; a="287348858" X-IronPort-AV: E=Sophos;i="5.95,211,1661842800"; d="scan'208";a="287348858" Received: from orsmga004.jf.intel.com ([10.7.209.38]) by fmsmga106.fm.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 25 Oct 2022 02:15:57 -0700 X-ExtLoop1: 1 X-IronPort-AV: E=McAfee;i="6500,9779,10510"; a="756866725" X-IronPort-AV: E=Sophos;i="5.95,211,1661842800"; d="scan'208";a="756866725" Received: from orsmsx602.amr.corp.intel.com ([10.22.229.15]) by orsmga004.jf.intel.com with ESMTP; 25 Oct 2022 02:15:57 -0700 Received: from orsmsx610.amr.corp.intel.com (10.22.229.23) by ORSMSX602.amr.corp.intel.com (10.22.229.15) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.2375.31; Tue, 25 Oct 2022 02:15:57 -0700 Received: from orsmsx610.amr.corp.intel.com (10.22.229.23) by ORSMSX610.amr.corp.intel.com (10.22.229.23) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.2375.31; Tue, 25 Oct 2022 02:15:56 -0700 Received: from orsedg603.ED.cps.intel.com (10.7.248.4) by orsmsx610.amr.corp.intel.com (10.22.229.23) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.2375.31 via Frontend Transport; Tue, 25 Oct 2022 02:15:56 -0700 Received: from NAM11-CO1-obe.outbound.protection.outlook.com (104.47.56.169) by edgegateway.intel.com (134.134.137.100) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.1.2375.31; Tue, 25 Oct 2022 02:15:53 -0700 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=VRWOlMWWbEJrY1baZIxI4mHLlPBorPsT7QOldYJKvVD8k/PceCxkl5tHo9q6tjglFXo/DKuKwiJUrrmaanEeNuD+eppRCrk+11YMaiJzCpQXT3tSUfbiU3WIi9avzoOUNmTJNVsDCAKaZibYnLbOAU6IApn16Q0FSJUdVSTAC9M7eHN6kDyy4qK0unnWwqlIZAQyMrUmjiKtxn2IhZNBsyTwLfeTY08GtEX0CI3LspuIVi8a2kcpp/Py9+6r1lar/S6KFj+L+VYEYiVrY20wHRhjOxyQgvAHuI6H/xhdvJEuyAKEroB/l3ebV0IzKROWuyVAqWfTfPNYL7+TwwAsgw== 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-AntiSpam-MessageData-ChunkCount:X-MS-Exchange-AntiSpam-MessageData-0:X-MS-Exchange-AntiSpam-MessageData-1; bh=C6nLlBDj8G3uLv40UqeCgyZT3Xe7LfXUiVz5JKNBngA=; b=lTU0leiKj3VBhR5Wt70rJ8qKtyl8LCtVPDJOQCOGvLATsc+/kEC5eDvxH89nMve1IeRulwtSktH/habDa/GEjVGOk4xlN57YlSM4AJgduMZ0932gI9ns5BVcMbiMNwzIAs+xLQ4b7KMHQsUWMTa4DeULOCmF8LOSYoP9GfCYGKhCT9Gb2/mOe4lez65XHzsjFLC03FRxVnrxzMT/zWY5OeOglKfisNx4rpaGTr4gTzl2jrXQnXj4W0GQewjH3DAwINtWB8Hj6xgKHYgAmXX9W0y/qADpvjfWUYwlg24BNW5jLm0nJt6kgxSZgT4KwnG02f5lEwY4lKhOt6SYMJbMTw== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=intel.com; dmarc=pass action=none header.from=intel.com; dkim=pass header.d=intel.com; arc=none Received: from CY5PR11MB6487.namprd11.prod.outlook.com (2603:10b6:930:31::17) by BN9PR11MB5308.namprd11.prod.outlook.com (2603:10b6:408:119::13) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.5746.23; Tue, 25 Oct 2022 09:15:51 +0000 Received: from CY5PR11MB6487.namprd11.prod.outlook.com ([fe80::d550:5776:e363:748d]) by CY5PR11MB6487.namprd11.prod.outlook.com ([fe80::d550:5776:e363:748d%5]) with mapi id 15.20.5746.021; Tue, 25 Oct 2022 09:15:51 +0000 From: "Hu, Jiayu" To: Maxime Coquelin , "Wang, YuanX" , "Xia, Chenbo" CC: "dev@dpdk.org" , "Jiang, Cheng1" , "Ma, WenwuX" , "He, Xingguang" , Thomas Monjalon , "Richardson, Bruce" , Ilya Maximets , "David Marchand" Subject: RE: [PATCH v5] net/vhost: support asynchronous data path Thread-Topic: [PATCH v5] net/vhost: support asynchronous data path Thread-Index: AQHY53p0yvmzJTACnUKSC8wIvxSP264dQUUAgAEYdLCAAGSlAIAAAXLg Date: Tue, 25 Oct 2022 09:15:51 +0000 Message-ID: References: <20220814150636.2260317-1-jiayu.hu@intel.com> <20221024151434.1051251-1-yuanx.wang@intel.com> <9336e30f-7daf-3113-cc1d-d9be4269ec3d@redhat.com> In-Reply-To: Accept-Language: en-US Content-Language: en-US X-MS-Has-Attach: X-MS-TNEF-Correlator: dlp-reaction: no-action dlp-version: 11.6.500.17 dlp-product: dlpe-windows authentication-results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=intel.com; x-ms-publictraffictype: Email x-ms-traffictypediagnostic: CY5PR11MB6487:EE_|BN9PR11MB5308:EE_ x-ms-office365-filtering-correlation-id: f617687a-abd8-431f-f5af-08dab6698303 x-ms-exchange-senderadcheck: 1 x-ms-exchange-antispam-relay: 0 x-microsoft-antispam: BCL:0; x-microsoft-antispam-message-info: PzbQWMFPxwMA86bekYFcpqacLAP2Om96agna/4hOLul1Z9aFf9JeqUKVy8OsLfB4Fd/iGOfxN3XPVT3YNwdQl9SDHJvTEayEhDtLjSpimyZvgtUo9pDm/9vfW+DXMeoVXxWOk7++vYA/r2R7vlWOfC4pkhOvIzGzecnJzH2HB0I6/Tpr+7S99SMH/7WZbrv6EQnJCC2m9heZzZAfvhQfL7AIFI0+qrsjctJFZAMHnPhVZmQ+X85VW9FzKaXKhUVCpDUyGFmQ8kMN6G9XlrgmiE74NurIFCiK51biXG2Dx5ADY2WANaJf5nPIlTFyX8GA3jNnb8oiWPdZO50K7j83qfSG9aX7VHu+BD3OwDgH1iVHs//YDin1A081gQDbeqR1+Xy3h9tSzLK6LpgJo0QXo/rC8ojKsdncEp/NZV8OZV+j72Wc5TPa277qlevxiv9K+pzDeAjb3/Cr1WrqVE7JxLVExCENQLVVcgqgwBn/g8bETn+6fEJkFe41WZm4uNlEpLX+DHrk9w7GTHPm4eCrCyXUDZpAiE7l3vhDGzoTBgjDqIhleQLZX4NRayVmuPdWKhyx97/F9fiV67AqjNjHeGDxAKBMvJLa7djS+J/O4Sl7GzjVF5SSDodOHucBclPA88D+eAqzq+DO3RqqrolNDrdVQEixSspgi9z8LnnjHTPW4Il7ZlwihRo7F+cXG3hAX1Hp8G/I+sHRKLXzujdmkNDYtPofDae5ihaoFrcQBafkNfe5vI+3Lmfy0PpoFSItYgXyZJNNJwxjibGYTKRJMQ== x-forefront-antispam-report: CIP:255.255.255.255; CTRY:; LANG:en; SCL:1; SRV:; IPV:NLI; SFV:NSPM; H:CY5PR11MB6487.namprd11.prod.outlook.com; PTR:; CAT:NONE; SFS:(13230022)(136003)(366004)(396003)(346002)(39860400002)(376002)(451199015)(6636002)(33656002)(8676002)(122000001)(38100700002)(86362001)(2906002)(82960400001)(186003)(5660300002)(83380400001)(38070700005)(76116006)(53546011)(6506007)(26005)(71200400001)(9686003)(64756008)(54906003)(66556008)(7696005)(4326008)(66476007)(316002)(110136005)(66446008)(66946007)(55016003)(52536014)(8936002)(30864003)(41300700001)(478600001)(559001)(579004); DIR:OUT; SFP:1102; x-ms-exchange-antispam-messagedata-chunkcount: 1 x-ms-exchange-antispam-messagedata-0: =?utf-8?B?Z294eGErMGU2S0dBRmhXRzJYNklNVXFyV3E4Q1RRaGdhMlZHVnZiaWVrZDNW?= =?utf-8?B?NWUxcjlGeEhJN3FKQjYyYWhtUnF5RExkbHhVSTdPUzk5VFMvOFFHemp4Rk1u?= =?utf-8?B?bERJR2RmbThwRmtSM0NsMU5KZDFkNUtNeEtPOW5HOHFIdXY1ZjJoSDJLM2VE?= =?utf-8?B?YjU1OEpIU0JraWlZQllNdVp2SG56ZGxpckFkeThXTXVNMk42dVQ2U3grbWhj?= =?utf-8?B?cTZoclVNbWVSZnVrZ0FiS0tBVWkyUkd2ZWQ2VHJMYUtNWGRtWDFRK1JqVkxa?= =?utf-8?B?bDZnU3RQUk5uMUh0SVhEV24yVzArbWJRWE9JTHJ6ZUR0VlFFa0paSmxhNXFB?= =?utf-8?B?RlZTYjZ5U3RaOWlZNC9mS2FsdUM2Z2hWMWtjNml2RXA0YkdBMTloQWJVaytB?= =?utf-8?B?VUEycUF5alhDOFBadTh2VHUxZWFKaUhKM1Z1SE5wMW94bUw2V0VhcFhUL0sx?= =?utf-8?B?WVBFVVdvbk5sUllsdHVWcDdFVW1ya2k1TDZCOW83ZlRGa2Z5aDFzWi9HM1ZR?= =?utf-8?B?TzJpUVl3NnBRajMyOStBRHZxL0JGL2NYT3kyV3QwaEp4V2JOR0ovVlhCRVp1?= =?utf-8?B?VE1vUm51K1RhWGhzRXYvRFdsK0ZhQUExUnZDUEdmbDN2bkhJQ3dyeG5oOUdY?= =?utf-8?B?azk1Tk9nbkhaRGhDMXVZYkkvMGNFTUVCRENxRENFS3BiWUJGV3FZelNYMW52?= =?utf-8?B?akZvUURtdXhYaW5OUE5lTTM2cTJCcURlUTJYeHNXaEhXeEdTNUV0dWJlVGFH?= =?utf-8?B?cHp5bXk0QUlPdkwveHVoMzZWVTl1N0ZibDFWZjJ3UGRrQnl0ZXROK3dmUnZX?= =?utf-8?B?Q051Sy9mUkE3OEVNNW5RZEdNUlpHOXVBWDNWNlhCdDNhSHR3ZnUxT0FVMkpl?= =?utf-8?B?MVlZUHFIOVFTdjBOakZRZmhGcjNod2pjdGVtanlISzRFTUxuVTR4VWV6bk9P?= =?utf-8?B?ZFZzT2NON3FqdlYydjlkMk5EbHU5b1htbVlKS3Nna2g1TFY4eFlxMUJvSjc5?= =?utf-8?B?UFo2L0t3ZzVqaGJiaTNUQk5VaGlWQ2VRRWkzaXFPc1YySzNudSs1WkJ4cXpY?= =?utf-8?B?c1REM2pXTi9jNml4emphb040QjNjcHBRZGJ1UVF4Nm12RWtBMnE1OEVuUlF3?= =?utf-8?B?YWRZaDBZNm9RckV2VWRENWtvMWdaZEtxdWl0TUFVQ3daSGg0K3JmYXV2Rzcr?= =?utf-8?B?QlY5TWphQ3E4bmJ5cW01NUJXc2tvSnE2RVFZcXlBOUh2NXg0RmdtdmpENHZD?= =?utf-8?B?OFV6b0dDaVBxL050a2ZveTJVazd1SWRod3hzcUNaYnFrcU1ZZlVzMGZCOHpL?= =?utf-8?B?eFZWZDVaMDMxSlhIVWJSS1R4U2VXanlyRWJ1Wkd3TXlTQ2NLbE5zUjBHT3FY?= =?utf-8?B?NG1NU0Zuc3BiZnJjcTBuUW9hUWROMk5yNXUxZGt5UUx1QWloVGJabzkwTUhx?= =?utf-8?B?ZXRPbTBESXcwQlJwYzZiKzFSUFQzV1FONmxwMlp2NHFXOWZjOW9qbUpyTkZu?= =?utf-8?B?YlJtcXRNYmJkcjVDL0hVcWoyQW11VzBha3FIWkdsbWs5S3BFSG5XT3FxNmRY?= =?utf-8?B?eWRVaXFPTGgwUGNON28yemNoSkk4S0tHU2c1TWFBdklvaUE2ck54Tm4wY0hW?= =?utf-8?B?dGhCa3M3ZEN4emVuK0VPWm9QY2c0TGpzU05IVENrWHFGSlBHQkFHME14SmtG?= =?utf-8?B?NkV3T1c5eWcrMC8xaFlOeDBZK3U1cHQrQXhqOUl3a3JOQTNLVk5hWFN6KzFR?= =?utf-8?B?Q0tiWXczellLL0hsOGJhNW5BNUJhL1NRMmNmOHZyK05QSHNBTm1FZGJUQTRX?= =?utf-8?B?TjhjOU9wYmFUMWprVDZRN3A5VklkTDVzWk8xQ25UTHZNQ1ZhV2dHUnltb3d1?= =?utf-8?B?UEZhVXRrQmNOeDFKajN3ZHN6Y1pOZGJlcnpMdjBTS3pjQ203RjMrdHJZdnR1?= =?utf-8?B?b3BpSU13MS9rRkkrUy9PeTJYR2VaOWFuRVFHZHQ3K2RNclhkRHRFalRhQjA1?= =?utf-8?B?ejl2Z1liWC9jaE5TOVpsT2hZaERuek1LQ2xRei9rQitqdysrZSs0cHgvbUN2?= =?utf-8?B?b1VCNmtGRmVFejduWG5KTGVicUpFNEsyWXpZd3NhREZXZTJ0YjloR0UxQUoy?= =?utf-8?Q?Do8X6ZItpjdwcLWsLHq3vZUk2?= Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 MIME-Version: 1.0 X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-AuthSource: CY5PR11MB6487.namprd11.prod.outlook.com X-MS-Exchange-CrossTenant-Network-Message-Id: f617687a-abd8-431f-f5af-08dab6698303 X-MS-Exchange-CrossTenant-originalarrivaltime: 25 Oct 2022 09:15:51.1930 (UTC) X-MS-Exchange-CrossTenant-fromentityheader: Hosted X-MS-Exchange-CrossTenant-id: 46c98d88-e344-4ed4-8496-4ed7712e255d X-MS-Exchange-CrossTenant-mailboxtype: HOSTED X-MS-Exchange-CrossTenant-userprincipalname: pIqt3pYArhjozeJ1lmwtk9uoPvQW5g32wyZibB/SvyZSL5n7e5ByAjVVMUGnk3cKPkSunOo51Qu+ogf77W6m8A== X-MS-Exchange-Transport-CrossTenantHeadersStamped: BN9PR11MB5308 X-OriginatorOrg: intel.com X-BeenThere: dev@dpdk.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: DPDK patches and discussions List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dev-bounces@dpdk.org SGkgTWF4aW1lLA0KDQo+IC0tLS0tT3JpZ2luYWwgTWVzc2FnZS0tLS0tDQo+IEZyb206IE1heGlt ZSBDb3F1ZWxpbiA8bWF4aW1lLmNvcXVlbGluQHJlZGhhdC5jb20+DQo+IFNlbnQ6IFR1ZXNkYXks IE9jdG9iZXIgMjUsIDIwMjIgMzo1MiBQTQ0KPiBUbzogSHUsIEppYXl1IDxqaWF5dS5odUBpbnRl bC5jb20+OyBXYW5nLCBZdWFuWCA8eXVhbngud2FuZ0BpbnRlbC5jb20+Ow0KPiBYaWEsIENoZW5i byA8Y2hlbmJvLnhpYUBpbnRlbC5jb20+DQo+IENjOiBkZXZAZHBkay5vcmc7IEppYW5nLCBDaGVu ZzEgPGNoZW5nMS5qaWFuZ0BpbnRlbC5jb20+OyBNYSwgV2Vud3VYDQo+IDx3ZW53dXgubWFAaW50 ZWwuY29tPjsgSGUsIFhpbmdndWFuZyA8eGluZ2d1YW5nLmhlQGludGVsLmNvbT47DQo+IFRob21h cyBNb25qYWxvbiA8dGhvbWFzQG1vbmphbG9uLm5ldD47IFJpY2hhcmRzb24sIEJydWNlDQo+IDxi cnVjZS5yaWNoYXJkc29uQGludGVsLmNvbT47IElseWEgTWF4aW1ldHMgPGltYXhpbWV0QHJlZGhh dC5jb20+Ow0KPiBEYXZpZCBNYXJjaGFuZCA8ZGF2aWQubWFyY2hhbmRAcmVkaGF0LmNvbT4NCj4g U3ViamVjdDogUmU6IFtQQVRDSCB2NV0gbmV0L3Zob3N0OiBzdXBwb3J0IGFzeW5jaHJvbm91cyBk YXRhIHBhdGgNCj4gDQo+IEhpIEppYXl1LA0KPiANCj4gT24gMTAvMjUvMjIgMDQ6MTQsIEh1LCBK aWF5dSB3cm90ZToNCj4gPiBIaSBNYXhpbWUsDQo+ID4NCj4gPiBUaGFua3MgZm9yIHlvdXIgY29t bWVudHMuIFBsZWFzZSBzZWUgcmVwbGllcyBpbmxpbmUuDQo+ID4NCj4gPj4gLS0tLS1PcmlnaW5h bCBNZXNzYWdlLS0tLS0NCj4gPj4gRnJvbTogTWF4aW1lIENvcXVlbGluIDxtYXhpbWUuY29xdWVs aW5AcmVkaGF0LmNvbT4NCj4gPj4gU2VudDogTW9uZGF5LCBPY3RvYmVyIDI0LCAyMDIyIDU6MDgg UE0NCj4gPj4gVG86IFdhbmcsIFl1YW5YIDx5dWFueC53YW5nQGludGVsLmNvbT47IFhpYSwgQ2hl bmJvDQo+ID4+IDxjaGVuYm8ueGlhQGludGVsLmNvbT4NCj4gPj4gQ2M6IGRldkBkcGRrLm9yZzsg SHUsIEppYXl1IDxqaWF5dS5odUBpbnRlbC5jb20+OyBKaWFuZywgQ2hlbmcxDQo+ID4+IDxjaGVu ZzEuamlhbmdAaW50ZWwuY29tPjsgTWEsIFdlbnd1WCA8d2Vud3V4Lm1hQGludGVsLmNvbT47IEhl LA0KPiA+PiBYaW5nZ3VhbmcgPHhpbmdndWFuZy5oZUBpbnRlbC5jb20+DQo+ID4+IFN1YmplY3Q6 IFJlOiBbUEFUQ0ggdjVdIG5ldC92aG9zdDogc3VwcG9ydCBhc3luY2hyb25vdXMgZGF0YSBwYXRo DQo+ID4+DQo+ID4+IEhpIFl1YW4sDQo+ID4+DQo+ID4+IFBsZWFzZSBmaXggeW91ciBzeXN0ZW0g Zm9yIHRoZSBuZXh0IHRpbWVzLCB5b3VyIHBhdGNoIGlzIGRhdGVkDQo+ID4+IHNldmVyYWwgaG91 cnMgaW4gdGhlIGZ1dHVyZS4NCj4gPj4NCj4gPj4gT24gMTAvMjQvMjIgMTc6MTQsIFl1YW4gV2Fu ZyB3cm90ZToNCj4gPj4+IFZob3N0IGFzeW5jaHJvbm91cyBkYXRhLXBhdGggb2ZmbG9hZHMgcGFj a2V0IGNvcHkgZnJvbSB0aGUgQ1BVIHRvDQo+ID4+PiB0aGUgRE1BIGVuZ2luZS4gQXMgYSByZXN1 bHQsIGxhcmdlIHBhY2tldCBjb3B5IGNhbiBiZSBhY2NlbGVyYXRlZCBieQ0KPiA+Pj4gdGhlIERN QSBlbmdpbmUsIGFuZCB2aG9zdCBjYW4gZnJlZSBDUFUgY3ljbGVzIGZvciBoaWdoZXIgbGV2ZWwN Cj4gPj4NCj4gPj4gVmhvc3QNCj4gPj4NCj4gPj4+IGZ1bmN0aW9ucy4NCj4gPj4+DQo+ID4+PiBJ biB0aGlzIHBhdGNoLCB3ZSBlbmFibGUgYXN5bmNocm9ub3VzIGRhdGEtcGF0aCBmb3Igdmhvc3Rw bWQuDQo+ID4+PiBBc3luY2hyb25vdXMgZGF0YSBwYXRoIGlzIGVuYWJsZWQgcGVyIHR4L3J4IHF1 ZXVlLCBhbmQgdXNlcnMgbmVlZCB0bw0KPiA+Pj4gc3BlY2lmeSB0aGUgRE1BIGRldmljZSB1c2Vk IGJ5IHRoZSB0eC9yeCBxdWV1ZS4gRWFjaCB0eC9yeCBxdWV1ZQ0KPiA+Pj4gb25seSBzdXBwb3J0 cyB0byB1c2Ugb25lIERNQSBkZXZpY2UsIGJ1dCBvbmUgRE1BIGRldmljZSBjYW4gYmUNCj4gPj4+ IHNoYXJlZA0KPiA+PiBhbW9uZw0KPiA+Pj4gbXVsdGlwbGUgdHgvcnggcXVldWVzIG9mIGRpZmZl cmVudCB2aG9zdCBQTUQgcG9ydHMuDQo+ID4+Pg0KPiA+Pj4gVHdvIFBNRCBwYXJhbWV0ZXJzIGFy ZSBhZGRlZDoNCj4gPj4+IC0gZG1hczoJc3BlY2lmeSB0aGUgdXNlZCBETUEgZGV2aWNlIGZvciBh IHR4L3J4IHF1ZXVlLg0KPiA+Pj4gCShEZWZhdWx0OiBubyBxdWV1ZXMgZW5hYmxlIGFzeW5jaHJv bm91cyBkYXRhIHBhdGgpDQo+ID4+PiAtIGRtYS1yaW5nLXNpemU6IERNQSByaW5nIHNpemUuDQo+ ID4+PiAJKERlZmF1bHQ6IDQwOTYpLg0KPiA+Pj4NCj4gPj4+IEhlcmUgaXMgYW4gZXhhbXBsZToN Cj4gPj4+IC0tdmRldg0KPiA+Pg0KPiAnZXRoX3Zob3N0MCxpZmFjZT0uL3MwLGRtYXM9W3R4cTBA MDAwMDowMC4wMS4wO3J4cTBAMDAwMDowMC4wMS4xXSxkbWENCj4gPj4gLQ0KPiA+PiByaW5nLXNp emU9NDA5NicNCj4gPj4+DQo+ID4+PiBTaWduZWQtb2ZmLWJ5OiBKaWF5dSBIdSA8amlheXUuaHVA aW50ZWwuY29tPg0KPiA+Pj4gU2lnbmVkLW9mZi1ieTogWXVhbiBXYW5nIDx5dWFueC53YW5nQGlu dGVsLmNvbT4NCj4gPj4+IFNpZ25lZC1vZmYtYnk6IFdlbnd1IE1hIDx3ZW53dXgubWFAaW50ZWwu Y29tPg0KPiA+Pj4NCj4gPj4+IC0tLQ0KPiA+Pj4gdjU6DQo+ID4+PiAtIGFkZCBlcnJvciBsb2cg b2YgdGVzdHBtZCBjbWQNCj4gPj4+DQo+ID4+PiB2NDoNCj4gPj4+IC0gYWRkIHR4cSBhbGxvd19x dWV1aW5nIGNoZWNrIG9uIHBvbGwgY29tcGxldGVkDQo+ID4+PiAtIHVucmVnaXN0ZXIgZG1hIGNo YW5uZWwgaW4gZGVzdHJveV9kZXZpY2UNCj4gPj4+IC0gYWRkIGRtYSByaW5nIHNpemUgbWluaW11 bSBsaW1pdA0KPiA+Pj4gLSBmaXggc2VydmVyYWwgY29kZSBzdHlsZSBhbmQgbG9nZ2luZyBpc3N1 ZXMNCj4gPj4+DQo+ID4+PiB2MzoNCj4gPj4+IC0gYWRkIHRoZSBBUEkgdG8gdmVyc2lvbi5tYXAN Cj4gPj4+DQo+ID4+PiB2MjoNCj4gPj4+IC0gYWRkIG1pc3NpbmcgZmlsZQ0KPiA+Pj4gLSBoaWRl IGFzeW5jX3R4X3BvbGxfY29tcGxldGVkDQo+ID4+PiAtIGNoYW5nZSBkZWZhdWx0IERNQSByaW5n IHNpemUgdG8gNDA5Ng0KPiA+Pj4NCj4gPj4+IC0tLQ0KPiA+Pj4gICAgZHJpdmVycy9uZXQvdmhv c3QvbWVzb24uYnVpbGQgICAgIHwgICAxICsNCj4gPj4+ICAgIGRyaXZlcnMvbmV0L3Zob3N0L3J0 ZV9ldGhfdmhvc3QuYyB8IDUxMg0KPiA+PiArKysrKysrKysrKysrKysrKysrKysrKysrKysrLS0N Cj4gPj4+ICAgIGRyaXZlcnMvbmV0L3Zob3N0L3J0ZV9ldGhfdmhvc3QuaCB8ICAxNSArDQo+ID4+ PiAgICBkcml2ZXJzL25ldC92aG9zdC92ZXJzaW9uLm1hcCAgICAgfCAgIDcgKw0KPiA+Pj4gICAg ZHJpdmVycy9uZXQvdmhvc3Qvdmhvc3RfdGVzdHBtZC5jIHwgIDY3ICsrKysNCj4gPj4+ICAgIDUg ZmlsZXMgY2hhbmdlZCwgNTY5IGluc2VydGlvbnMoKyksIDMzIGRlbGV0aW9ucygtKQ0KPiA+Pj4g ICAgY3JlYXRlIG1vZGUgMTAwNjQ0IGRyaXZlcnMvbmV0L3Zob3N0L3Zob3N0X3Rlc3RwbWQuYw0K PiA+Pj4NCj4gPj4+IGRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC92aG9zdC9tZXNvbi5idWlsZA0K PiA+Pj4gYi9kcml2ZXJzL25ldC92aG9zdC9tZXNvbi5idWlsZCBpbmRleCBmNDgxYTNhNGI4Li4y MmEwYWIzYTU4IDEwMDY0NA0KPiA+Pj4gLS0tIGEvZHJpdmVycy9uZXQvdmhvc3QvbWVzb24uYnVp bGQNCj4gPj4+ICsrKyBiL2RyaXZlcnMvbmV0L3Zob3N0L21lc29uLmJ1aWxkDQo+ID4+PiBAQCAt OSw0ICs5LDUgQEAgZW5kaWYNCj4gPj4+DQo+ID4+PiAgICBkZXBzICs9ICd2aG9zdCcNCj4gPj4+ ICAgIHNvdXJjZXMgPSBmaWxlcygncnRlX2V0aF92aG9zdC5jJykNCj4gPj4+ICt0ZXN0cG1kX3Nv dXJjZXMgPSBmaWxlcygndmhvc3RfdGVzdHBtZC5jJykNCj4gPj4+ICAgIGhlYWRlcnMgPSBmaWxl cygncnRlX2V0aF92aG9zdC5oJykgZGlmZiAtLWdpdA0KPiA+Pj4gYS9kcml2ZXJzL25ldC92aG9z dC9ydGVfZXRoX3Zob3N0LmMNCj4gPj4+IGIvZHJpdmVycy9uZXQvdmhvc3QvcnRlX2V0aF92aG9z dC5jDQo+ID4+PiBpbmRleCBiMTUyMjc5ZmFjLi44MGNkOWM4ZDkyIDEwMDY0NA0KPiA+Pj4gLS0t IGEvZHJpdmVycy9uZXQvdmhvc3QvcnRlX2V0aF92aG9zdC5jDQo+ID4+PiArKysgYi9kcml2ZXJz L25ldC92aG9zdC9ydGVfZXRoX3Zob3N0LmMNCj4gPj4+IEBAIC03LDYgKzcsNyBAQA0KPiA+Pj4g ICAgI2luY2x1ZGUgPHB0aHJlYWQuaD4NCj4gPj4+ICAgICNpbmNsdWRlIDxzdGRib29sLmg+DQo+ ID4+PiAgICAjaW5jbHVkZSA8c3lzL2Vwb2xsLmg+DQo+ID4+PiArI2luY2x1ZGUgPGN0eXBlLmg+ DQo+ID4+Pg0KPiA+Pj4gICAgI2luY2x1ZGUgPHJ0ZV9tYnVmLmg+DQo+ID4+PiAgICAjaW5jbHVk ZSA8ZXRoZGV2X2RyaXZlci5oPg0KPiA+Pj4gQEAgLTE4LDYgKzE5LDggQEANCj4gPj4+ICAgICNp bmNsdWRlIDxydGVfa3ZhcmdzLmg+DQo+ID4+PiAgICAjaW5jbHVkZSA8cnRlX3Zob3N0Lmg+DQo+ ID4+PiAgICAjaW5jbHVkZSA8cnRlX3NwaW5sb2NrLmg+DQo+ID4+PiArI2luY2x1ZGUgPHJ0ZV92 aG9zdF9hc3luYy5oPg0KPiA+Pj4gKyNpbmNsdWRlIDxydGVfZG1hZGV2Lmg+DQo+ID4+Pg0KPiA+ Pj4gICAgI2luY2x1ZGUgInJ0ZV9ldGhfdmhvc3QuaCINCj4gPj4+DQo+ID4+PiBAQCAtMzcsOCAr NDAsMTUgQEAgZW51bSB7VklSVElPX1JYUSwgVklSVElPX1RYUSwgVklSVElPX1FOVU19Ow0KPiA+ Pj4gICAgI2RlZmluZSBFVEhfVkhPU1RfTElORUFSX0JVRgkJImxpbmVhci1idWZmZXIiDQo+ID4+ PiAgICAjZGVmaW5lIEVUSF9WSE9TVF9FWFRfQlVGCQkiZXh0LWJ1ZmZlciINCj4gPj4+ICAgICNk ZWZpbmUgRVRIX1ZIT1NUX0xFR0FDWV9PTF9GTEFHUwkibGVnYWN5LW9sLWZsYWdzIg0KPiA+Pj4g KyNkZWZpbmUgRVRIX1ZIT1NUX0RNQV9BUkcJCSJkbWFzIg0KPiA+Pj4gKyNkZWZpbmUgRVRIX1ZI T1NUX0RNQV9SSU5HX1NJWkUJCSJkbWEtcmluZy1zaXplIg0KPiA+Pj4gICAgI2RlZmluZSBWSE9T VF9NQVhfUEtUX0JVUlNUIDMyDQo+ID4+Pg0KPiA+Pj4gKyNkZWZpbmUgSU5WQUxJRF9ETUFfSUQJ CS0xDQo+ID4+PiArI2RlZmluZSBERUZBVUxUX0RNQV9SSU5HX1NJWkUJNDA5Ng0KPiA+Pj4gKy8q IE1pbmltdW0gcGFja2FnZSBzaXplIGlzIDY0LCBkbWEgcmluZyBzaXplIHNob3VsZCBiZSBncmVh dGVyIHRoYW4gMzINCj4gKi8NCj4gPj4+ICsjZGVmaW5lIE1JTklNVU1fRE1BX1JJTkdfU0laRQk2 NA0KPiA+Pg0KPiA+PiBXaHk/IElzIHRoYXQgcmVsYXRlZCB0byBJbnRlbCBIVz8NCj4gPg0KPiA+ IE5vLCBpdCBpcyBmb3IgVENQL1VEUCB0ZXN0cy4gVGhlIG1heCBUQ1AvVURQIGxlbmd0aCBpcyA2 NEtCLCBzbyBvbmUNCj4gPiBwYWNrZXQgbmVlZHMgMzIgcGt0bWJ1ZnMuIElmIHdlIHNldCBETUEg cmluZyBzaXplIHRvIDMyLCBpdCdzIHBvc3NpYmxlDQo+ID4gdGhhdCB2aG9zdCBjYW5ub3QgZW5x dWV1ZS9kZXF1ZXVlIG9uZSBwYWNrZXQsIGFzIHRoZXJlIG1heSBiZSBzb21lDQo+ID4gY29udHJv bCBwYWNrZXRzIG1peGVkIGFuZCBETUEgcmluZyBmdWxsIHdpbGwgY2F1c2UgZW5xdWV1ZS9kZXF1 ZXVlIHRoZQ0KPiA+IHBhY2tldCBmYWlsZWQuIFNvIHRoZSByZWNvbW1lbmQgbWluaW1hbCBETUEg cmluZyBzaXplIGlzID4gMzIuDQo+IA0KPiBJIGd1ZXNzIGl0IGRlcGVuZHMgb24gdGhlIG1idWYg c2l6ZSwgZG9lc24ndCBpdD8NCj4gSSdtIG5vdCBhZ2FpbnN0IGhhdmluZyBhIGRlZmF1bHQgdmFs dWUsIGJ1dCB3ZSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlDQo+IHJhdGlvbmFsZSBieSBqdXN0IHJl YWRpbmcgdGhlIGNvZGUgYW5kIG5vdCBoYXZpbmcgdG8gYXNrIHRoZSBhdXRob3IuDQoNClN1cmUs IHdlIHdpbGwgcmVtb3ZlIHRoZSBNSU5JTVVNX0RNQV9SSU5HX1NJWkUgIG1hY3JvIGFuZCBnaXZl IG1vcmUNCmV4cGxhbmF0aW9uIGZvciBERUZBVUxUX0RNQV9SSU5HX1NJWkUuDQoNCj4gDQo+ID4N Cj4gPiBXZSBjYW4gcmVtb3ZlIHRoZSBtYWNybywgYnV0IGFkZCBvbmUgY29tbWVudCB0byBzdWdn ZXN0IHRoZSBETUEgcmluZw0KPiA+IHNpemUuDQo+ID4+DQo+ID4+PiArDQo+ID4+PiAgICBzdGF0 aWMgY29uc3QgY2hhciAqdmFsaWRfYXJndW1lbnRzW10gPSB7DQo+ID4+PiAgICAJRVRIX1ZIT1NU X0lGQUNFX0FSRywNCj4gPj4+ICAgIAlFVEhfVkhPU1RfUVVFVUVTX0FSRywNCj4gPj4+IEBAIC00 OSw2ICs1OSw4IEBAIHN0YXRpYyBjb25zdCBjaGFyICp2YWxpZF9hcmd1bWVudHNbXSA9IHsNCj4g Pj4+ICAgIAlFVEhfVkhPU1RfTElORUFSX0JVRiwNCj4gPj4+ICAgIAlFVEhfVkhPU1RfRVhUX0JV RiwNCj4gPj4+ICAgIAlFVEhfVkhPU1RfTEVHQUNZX09MX0ZMQUdTLA0KPiA+Pj4gKwlFVEhfVkhP U1RfRE1BX0FSRywNCj4gPj4+ICsJRVRIX1ZIT1NUX0RNQV9SSU5HX1NJWkUsDQo+ID4+PiAgICAJ TlVMTA0KPiA+Pj4gICAgfTsNCj4gPj4+DQo+ID4+PiBAQCAtODAsOCArOTIsMzkgQEAgc3RydWN0 IHZob3N0X3F1ZXVlIHsNCj4gPj4+ICAgIAlzdHJ1Y3Qgdmhvc3Rfc3RhdHMgc3RhdHM7DQo+ID4+ PiAgICAJaW50IGludHJfZW5hYmxlOw0KPiA+Pj4gICAgCXJ0ZV9zcGlubG9ja190IGludHJfbG9j azsNCj4gPj4+ICsNCj4gPj4+ICsJLyogRmxhZyBvZiBlbmFibGluZyBhc3luYyBkYXRhIHBhdGgg Ki8NCj4gPj4+ICsJYm9vbCBhc3luY19yZWdpc3RlcjsNCj4gPj4+ICsJLyogRE1BIGRldmljZSBJ RCAqLw0KPiA+Pj4gKwlpbnQxNl90IGRtYV9pZDsNCj4gPj4+ICsJLyoqDQo+ID4+PiArCSAqIEZv ciBhIFJ4IHF1ZXVlLCAidHhxIiBwb2ludHMgdG8gaXRzIHBlZXIgVHggcXVldWUuDQo+ID4+PiAr CSAqIEZvciBhIFR4IHF1ZXVlLCAidHhxIiBpcyBuZXZlciB1c2VkLg0KPiA+Pj4gKwkgKi8NCj4g Pj4+ICsJc3RydWN0IHZob3N0X3F1ZXVlICp0eHE7DQo+ID4+PiArCS8qIEFycmF5IHRvIGtlZXAg RE1BIGNvbXBsZXRlZCBwYWNrZXRzICovDQo+ID4+PiArCXN0cnVjdCBydGVfbWJ1ZiAqY21wbF9w a3RzW1ZIT1NUX01BWF9QS1RfQlVSU1RdOw0KPiA+Pj4gICAgfTsNCj4gPj4+DQo+ID4+PiArc3Ry dWN0IGRtYV9pbnB1dF9pbmZvIHsNCj4gPj4+ICsJaW50MTZfdCBkbWFzW1JURV9NQVhfUVVFVUVT X1BFUl9QT1JUICogMl07DQo+ID4+PiArCXVpbnQxNl90IGRtYV9yaW5nX3NpemU7DQo+ID4+PiAr fTsNCj4gPj4+ICsNCj4gPj4+ICtzdGF0aWMgaW50MTZfdCBjb25maWd1cmVkX2RtYXNbUlRFX0RN QURFVl9ERUZBVUxUX01BWF07DQo+ID4+PiArc3RhdGljIGludCBkbWFfY291bnQ7DQo+ID4+PiAr DQo+ID4+PiArLyoqDQo+ID4+PiArICogQnkgZGVmYXVsdCwgaXRzIFJ4IHBhdGggdG8gY2FsbA0K PiA+Pj4gK3J0ZV92aG9zdF9wb2xsX2VucXVldWVfY29tcGxldGVkKCkgZm9yDQo+ID4+IGVucXVl dWUgb3BlcmF0aW9ucy4NCj4gPj4+ICsgKiBIb3dldmVyLCBSeCBmdW5jdGlvbiBpcyBuZXZlciBi ZWVuIGNhbGxlZCBpbiB0ZXN0cG1kICJ0eG9ubHkiDQo+ID4+PiArbW9kZSwgdGh1cyBjYXVzaW5n IHZpcnRpbw0KPiA+Pj4gKyAqIGNhbm5vdCByZWNlaXZlIERNQSBjb21wbGV0ZWQgcGFja2V0cy4g VG8gbWFrZSB0eG9ubHkgbW9kZSB3b3JrDQo+ID4+PiArY29ycmVjdGx5LCB3ZSBwcm92aWRlIGEN Cj4gPj4+ICsgKiBjb21tYW5kIGluIHRlc3RwbWQgdG8gY2FsbCBydGVfdmhvc3RfcG9sbF9lbnF1 ZXVlX2NvbXBsZXRlZCgpIGluDQo+ID4+PiArVHgNCj4gPj4gcGF0aC4NCj4gPj4+ICsgKg0KPiA+ Pj4gKyAqIFdoZW4gc2V0IGFzeW5jX3R4X3BvbGxfY29tcGxldGVkIHRvIHRydWUsIFR4IHBhdGgg Y2FsbHMNCj4gPj4+ICtydGVfdmhvc3RfcG9sbF9lbnF1ZXVlX2NvbXBsZXRlZCgpOw0KPiA+Pj4g KyAqIG90aGVyd2lzZSwgUnggcGF0aCBjYWxscyBpdC4NCj4gPj4+ICsgKi8NCj4gPj4+ICtib29s IGFzeW5jX3R4X3BvbGxfY29tcGxldGVkOw0KPiA+Pj4gKw0KPiA+Pj4gICAgc3RydWN0IHBtZF9p bnRlcm5hbCB7DQo+ID4+PiAgICAJcnRlX2F0b21pYzMyX3QgZGV2X2F0dGFjaGVkOw0KPiA+Pj4g ICAgCWNoYXIgKmlmYWNlX25hbWU7DQo+ID4+PiBAQCAtOTQsNiArMTM3LDEwIEBAIHN0cnVjdCBw bWRfaW50ZXJuYWwgew0KPiA+Pj4gICAgCWJvb2wgdmxhbl9zdHJpcDsNCj4gPj4+ICAgIAlib29s IHJ4X3N3X2NzdW07DQo+ID4+PiAgICAJYm9vbCB0eF9zd19jc3VtOw0KPiA+Pj4gKwlzdHJ1Y3Qg ew0KPiA+Pj4gKwkJaW50MTZfdCBkbWFfaWQ7DQo+ID4+PiArCQlib29sIGFzeW5jX3JlZ2lzdGVy Ow0KPiA+Pj4gKwl9IHF1ZXVlX2RtYXNbUlRFX01BWF9RVUVVRVNfUEVSX1BPUlQgKiAyXTsNCj4g Pj4+ICAgIH07DQo+ID4+Pg0KPiA+Pj4gICAgc3RydWN0IGludGVybmFsX2xpc3Qgew0KPiA+Pj4g QEAgLTEyNCw2ICsxNzEsMTcgQEAgc3RydWN0IHJ0ZV92aG9zdF92cmluZ19zdGF0ZSB7DQo+ID4+ Pg0KPiA+Pj4gICAgc3RhdGljIHN0cnVjdCBydGVfdmhvc3RfdnJpbmdfc3RhdGUNCj4gPj4+ICp2 cmluZ19zdGF0ZXNbUlRFX01BWF9FVEhQT1JUU107DQo+ID4+Pg0KPiA+Pj4gK3N0YXRpYyBib29s DQo+ID4+PiArZG1hX2lzX2NvbmZpZ3VyZWQoaW50MTZfdCBkbWFfaWQpDQo+ID4+PiArew0KPiA+ Pj4gKwlpbnQgaTsNCj4gPj4+ICsNCj4gPj4+ICsJZm9yIChpID0gMDsgaSA8IGRtYV9jb3VudDsg aSsrKQ0KPiA+Pj4gKwkJaWYgKGNvbmZpZ3VyZWRfZG1hc1tpXSA9PSBkbWFfaWQpDQo+ID4+PiAr CQkJcmV0dXJuIHRydWU7DQo+ID4+PiArCXJldHVybiBmYWxzZTsNCj4gPj4+ICt9DQo+ID4+PiAr DQo+ID4+PiAgICBzdGF0aWMgaW50DQo+ID4+PiAgICB2aG9zdF9kZXZfeHN0YXRzX3Jlc2V0KHN0 cnVjdCBydGVfZXRoX2RldiAqZGV2KQ0KPiA+Pj4gICAgew0KPiA+Pj4gQEAgLTM5NiwxNSArNDU0 LDI3IEBAIHZob3N0X2Rldl9yeF9zd19jc3VtKHN0cnVjdCBydGVfbWJ1Zg0KPiAqbWJ1ZikNCj4g Pj4+ICAgIAltYnVmLT5vbF9mbGFncyB8PSBSVEVfTUJVRl9GX1JYX0w0X0NLU1VNX0dPT0Q7DQo+ ID4+PiAgICB9DQo+ID4+Pg0KPiA+Pj4gK3N0YXRpYyBpbmxpbmUgdm9pZA0KPiA+Pj4gK3Zob3N0 X3R4X2ZyZWVfY29tcGxldGVkKGludCB2aWQsIHVpbnQxNl90IHZpcnRxdWV1ZV9pZCwgaW50MTZf dCBkbWFfaWQsDQo+ID4+PiArCQlzdHJ1Y3QgcnRlX21idWYgKipwa3RzLCB1aW50MTZfdCBjb3Vu dCkgew0KPiA+Pj4gKwl1aW50MTZfdCBpLCByZXQ7DQo+ID4+PiArDQo+ID4+PiArCXJldCA9IHJ0 ZV92aG9zdF9wb2xsX2VucXVldWVfY29tcGxldGVkKHZpZCwgdmlydHF1ZXVlX2lkLCBwa3RzLA0K PiA+PiBjb3VudCwgZG1hX2lkLCAwKTsNCj4gPj4+ICsJZm9yIChpID0gMDsgbGlrZWx5KGkgPCBy ZXQpOyBpKyspDQo+ID4+PiArCQlydGVfcGt0bWJ1Zl9mcmVlKHBrdHNbaV0pOw0KPiA+Pj4gK30N Cj4gPj4+ICsNCj4gPj4+ICAgIHN0YXRpYyB1aW50MTZfdA0KPiA+Pj4gICAgZXRoX3Zob3N0X3J4 KHZvaWQgKnEsIHN0cnVjdCBydGVfbWJ1ZiAqKmJ1ZnMsIHVpbnQxNl90IG5iX2J1ZnMpDQo+ID4+ PiAgICB7DQo+ID4+PiAgICAJc3RydWN0IHZob3N0X3F1ZXVlICpyID0gcTsNCj4gPj4+ICAgIAl1 aW50MTZfdCBpLCBuYl9yeCA9IDA7DQo+ID4+PiAgICAJdWludDE2X3QgbmJfcmVjZWl2ZSA9IG5i X2J1ZnM7DQo+ID4+PiArCXVpbnQxNl90IG5iX3BrdHMsIG51bTsNCj4gPj4+DQo+ID4+PiAgICAJ aWYgKHVubGlrZWx5KHJ0ZV9hdG9taWMzMl9yZWFkKCZyLT5hbGxvd19xdWV1aW5nKSA9PSAwKSkN Cj4gPj4+IC0JCXJldHVybiAwOw0KPiA+Pj4gKwkJZ290byB0eF9wb2xsOw0KPiA+Pj4NCj4gPj4+ ICAgIAlydGVfYXRvbWljMzJfc2V0KCZyLT53aGlsZV9xdWV1aW5nLCAxKTsNCj4gPj4+DQo+ID4+ PiBAQCAtNDEyLDE5ICs0ODIsMzIgQEAgZXRoX3Zob3N0X3J4KHZvaWQgKnEsIHN0cnVjdCBydGVf bWJ1ZiAqKmJ1ZnMsDQo+ID4+IHVpbnQxNl90IG5iX2J1ZnMpDQo+ID4+PiAgICAJCWdvdG8gb3V0 Ow0KPiA+Pj4NCj4gPj4+ICAgIAkvKiBEZXF1ZXVlIHBhY2tldHMgZnJvbSBndWVzdCBUWCBxdWV1 ZSAqLw0KPiA+Pj4gLQl3aGlsZSAobmJfcmVjZWl2ZSkgew0KPiA+Pj4gLQkJdWludDE2X3QgbmJf cGt0czsNCj4gPj4+IC0JCXVpbnQxNl90IG51bSA9ICh1aW50MTZfdClSVEVfTUlOKG5iX3JlY2Vp dmUsDQo+ID4+PiAtCQkJCQkJIFZIT1NUX01BWF9QS1RfQlVSU1QpOw0KPiA+Pj4gLQ0KPiA+Pj4g LQkJbmJfcGt0cyA9IHJ0ZV92aG9zdF9kZXF1ZXVlX2J1cnN0KHItPnZpZCwgci0+dmlydHF1ZXVl X2lkLA0KPiA+Pj4gLQkJCQkJCSAgci0+bWJfcG9vbCwgJmJ1ZnNbbmJfcnhdLA0KPiA+Pj4gLQkJ CQkJCSAgbnVtKTsNCj4gPj4+IC0NCj4gPj4+IC0JCW5iX3J4ICs9IG5iX3BrdHM7DQo+ID4+PiAt CQluYl9yZWNlaXZlIC09IG5iX3BrdHM7DQo+ID4+PiAtCQlpZiAobmJfcGt0cyA8IG51bSkNCj4g Pj4+IC0JCQlicmVhazsNCj4gPj4+ICsJaWYgKCFyLT5hc3luY19yZWdpc3Rlcikgew0KPiA+Pj4g KwkJd2hpbGUgKG5iX3JlY2VpdmUpIHsNCj4gPj4+ICsJCQludW0gPSAodWludDE2X3QpUlRFX01J TihuYl9yZWNlaXZlLA0KPiA+PiBWSE9TVF9NQVhfUEtUX0JVUlNUKTsNCj4gPj4+ICsJCQluYl9w a3RzID0gcnRlX3Zob3N0X2RlcXVldWVfYnVyc3Qoci0+dmlkLCByLQ0KPiA+Pj4gdmlydHF1ZXVl X2lkLA0KPiA+Pj4gKwkJCQkJCXItPm1iX3Bvb2wsICZidWZzW25iX3J4XSwNCj4gPj4+ICsJCQkJ CQludW0pOw0KPiA+Pj4gKw0KPiA+Pj4gKwkJCW5iX3J4ICs9IG5iX3BrdHM7DQo+ID4+PiArCQkJ bmJfcmVjZWl2ZSAtPSBuYl9wa3RzOw0KPiA+Pj4gKwkJCWlmIChuYl9wa3RzIDwgbnVtKQ0KPiA+ Pj4gKwkJCQlicmVhazsNCj4gPj4+ICsJCX0NCj4gPj4+ICsJfSBlbHNlIHsNCj4gPj4+ICsJCWlu dCBucl9pbmZsaWdodDsNCj4gPj4+ICsNCj4gPj4+ICsJCXdoaWxlIChuYl9yZWNlaXZlKSB7DQo+ ID4+PiArCQkJbnVtID0gKHVpbnQxNl90KVJURV9NSU4obmJfcmVjZWl2ZSwNCj4gPj4gVkhPU1Rf TUFYX1BLVF9CVVJTVCk7DQo+ID4+PiArCQkJbmJfcGt0cyA9IHJ0ZV92aG9zdF9hc3luY190cnlf ZGVxdWV1ZV9idXJzdChyLQ0KPiA+Pj4gdmlkLCByLT52aXJ0cXVldWVfaWQsDQo+ID4+PiArCQkJ CQkJci0+bWJfcG9vbCwgJmJ1ZnNbbmJfcnhdLA0KPiA+PiBudW0sICZucl9pbmZsaWdodCwNCj4g Pj4+ICsJCQkJCQlyLT5kbWFfaWQsIDApOw0KPiA+Pj4gKw0KPiA+Pj4gKwkJCW5iX3J4ICs9IG5i X3BrdHM7DQo+ID4+PiArCQkJbmJfcmVjZWl2ZSAtPSBuYl9wa3RzOw0KPiA+Pj4gKwkJCWlmIChu Yl9wa3RzIDwgbnVtKQ0KPiA+Pj4gKwkJCQlicmVhazsNCj4gPj4+ICsJCX0NCj4gPj4+ICAgIAl9 DQo+ID4+Pg0KPiA+Pj4gICAgCXItPnN0YXRzLnBrdHMgKz0gbmJfcng7DQo+ID4+PiBAQCAtNDQ1 LDYgKzUyOCwxNyBAQCBldGhfdmhvc3Rfcngodm9pZCAqcSwgc3RydWN0IHJ0ZV9tYnVmICoqYnVm cywNCj4gPj4gdWludDE2X3QgbmJfYnVmcykNCj4gPj4+ICAgIG91dDoNCj4gPj4+ICAgIAlydGVf YXRvbWljMzJfc2V0KCZyLT53aGlsZV9xdWV1aW5nLCAwKTsNCj4gPj4+DQo+ID4+PiArdHhfcG9s bDoNCj4gPj4+ICsJLyoqDQo+ID4+PiArCSAqIFBvbGwgYW5kIGZyZWUgY29tcGxldGVkIHBhY2tl dHMgZm9yIHRoZSB2aXJ0cXVldWUgb2YgVHggcXVldWUuDQo+ID4+PiArCSAqIE5vdGUgdGhhdCB3 ZSBhY2Nlc3MgVHggcXVldWUncyB2aXJ0cXVldWUsIHdoaWNoIGlzIHByb3RlY3RlZA0KPiA+Pj4g KwkgKiBieSB2cmluZyBsb2NrLg0KPiA+Pj4gKwkgKi8NCj4gPj4+ICsJaWYgKHItPnR4cS0+YXN5 bmNfcmVnaXN0ZXIgJiYgIWFzeW5jX3R4X3BvbGxfY29tcGxldGVkICYmDQo+ID4+PiArCQkJcnRl X2F0b21pYzMyX3JlYWQoJnItPnR4cS0+YWxsb3dfcXVldWluZykgPT0gMSkNCj4gPj4+ICsJCXZo b3N0X3R4X2ZyZWVfY29tcGxldGVkKHItPnZpZCwgci0+dHhxLT52aXJ0cXVldWVfaWQsIHItDQo+ ID4+PiB0eHEtPmRtYV9pZCwNCj4gPj4+ICsJCQkJci0+Y21wbF9wa3RzLCBWSE9TVF9NQVhfUEtU X0JVUlNUKTsNCj4gPj4+ICsNCj4gPj4+ICAgIAlyZXR1cm4gbmJfcng7DQo+ID4+PiAgICB9DQo+ ID4+Pg0KPiA+Pj4gQEAgLTQ1Niw2ICs1NTAsNyBAQCBldGhfdmhvc3RfdHgodm9pZCAqcSwgc3Ry dWN0IHJ0ZV9tYnVmICoqYnVmcywNCj4gPj4gdWludDE2X3QgbmJfYnVmcykNCj4gPj4+ICAgIAl1 aW50MTZfdCBuYl9zZW5kID0gMDsNCj4gPj4+ICAgIAl1aW50NjRfdCBuYl9ieXRlcyA9IDA7DQo+ ID4+PiAgICAJdWludDY0X3QgbmJfbWlzc2VkID0gMDsNCj4gPj4+ICsJdWludDE2X3QgbmJfcGt0 cywgbnVtOw0KPiA+Pj4NCj4gPj4+ICAgIAlpZiAodW5saWtlbHkocnRlX2F0b21pYzMyX3JlYWQo JnItPmFsbG93X3F1ZXVpbmcpID09IDApKQ0KPiA+Pj4gICAgCQlyZXR1cm4gMDsNCj4gPj4+IEBA IC00ODYsMzEgKzU4MSw0OSBAQCBldGhfdmhvc3RfdHgodm9pZCAqcSwgc3RydWN0IHJ0ZV9tYnVm ICoqYnVmcywNCj4gPj4gdWludDE2X3QgbmJfYnVmcykNCj4gPj4+ICAgIAl9DQo+ID4+Pg0KPiA+ Pj4gICAgCS8qIEVucXVldWUgcGFja2V0cyB0byBndWVzdCBSWCBxdWV1ZSAqLw0KPiA+Pj4gLQl3 aGlsZSAobmJfc2VuZCkgew0KPiA+Pj4gLQkJdWludDE2X3QgbmJfcGt0czsNCj4gPj4+IC0JCXVp bnQxNl90IG51bSA9ICh1aW50MTZfdClSVEVfTUlOKG5iX3NlbmQsDQo+ID4+PiAtCQkJCQkJIFZI T1NUX01BWF9QS1RfQlVSU1QpOw0KPiA+Pj4gKwlpZiAoIXItPmFzeW5jX3JlZ2lzdGVyKSB7DQo+ ID4+PiArCQl3aGlsZSAobmJfc2VuZCkgew0KPiA+Pj4gKwkJCW51bSA9ICh1aW50MTZfdClSVEVf TUlOKG5iX3NlbmQsDQo+ID4+IFZIT1NUX01BWF9QS1RfQlVSU1QpOw0KPiA+Pj4gKwkJCW5iX3Br dHMgPSBydGVfdmhvc3RfZW5xdWV1ZV9idXJzdChyLT52aWQsIHItDQo+ID4+PiB2aXJ0cXVldWVf aWQsDQo+ID4+PiArCQkJCQkJJmJ1ZnNbbmJfdHhdLCBudW0pOw0KPiA+Pj4gKw0KPiA+Pj4gKwkJ CW5iX3R4ICs9IG5iX3BrdHM7DQo+ID4+PiArCQkJbmJfc2VuZCAtPSBuYl9wa3RzOw0KPiA+Pj4g KwkJCWlmIChuYl9wa3RzIDwgbnVtKQ0KPiA+Pj4gKwkJCQlicmVhazsNCj4gPj4+ICsJCX0NCj4g Pj4+DQo+ID4+PiAtCQluYl9wa3RzID0gcnRlX3Zob3N0X2VucXVldWVfYnVyc3Qoci0+dmlkLCBy LT52aXJ0cXVldWVfaWQsDQo+ID4+PiAtCQkJCQkJICAmYnVmc1tuYl90eF0sIG51bSk7DQo+ID4+ PiArCQlmb3IgKGkgPSAwOyBsaWtlbHkoaSA8IG5iX3R4KTsgaSsrKSB7DQo+ID4+PiArCQkJbmJf Ynl0ZXMgKz0gYnVmc1tpXS0+cGt0X2xlbjsNCj4gPj4+ICsJCQlydGVfcGt0bWJ1Zl9mcmVlKGJ1 ZnNbaV0pOw0KPiA+Pj4gKwkJfQ0KPiA+Pj4NCj4gPj4+IC0JCW5iX3R4ICs9IG5iX3BrdHM7DQo+ ID4+PiAtCQluYl9zZW5kIC09IG5iX3BrdHM7DQo+ID4+PiAtCQlpZiAobmJfcGt0cyA8IG51bSkN Cj4gPj4+IC0JCQlicmVhazsNCj4gPj4+IC0JfQ0KPiA+Pj4gKwl9IGVsc2Ugew0KPiA+Pj4gKwkJ d2hpbGUgKG5iX3NlbmQpIHsNCj4gPj4+ICsJCQludW0gPSAodWludDE2X3QpUlRFX01JTihuYl9z ZW5kLA0KPiA+PiBWSE9TVF9NQVhfUEtUX0JVUlNUKTsNCj4gPj4+ICsJCQluYl9wa3RzID0gcnRl X3Zob3N0X3N1Ym1pdF9lbnF1ZXVlX2J1cnN0KHItPnZpZCwNCj4gPj4gci0+dmlydHF1ZXVlX2lk LA0KPiA+Pj4gKwkJCQkJCQkmYnVmc1tuYl90eF0sIG51bSwgci0NCj4gPj4+IGRtYV9pZCwgMCk7 DQo+ID4+PiArDQo+ID4+PiArCQkJbmJfdHggKz0gbmJfcGt0czsNCj4gPj4+ICsJCQluYl9zZW5k IC09IG5iX3BrdHM7DQo+ID4+PiArCQkJaWYgKG5iX3BrdHMgPCBudW0pDQo+ID4+PiArCQkJCWJy ZWFrOw0KPiA+Pj4gKwkJfQ0KPiA+Pj4NCj4gPj4+IC0JZm9yIChpID0gMDsgbGlrZWx5KGkgPCBu Yl90eCk7IGkrKykNCj4gPj4+IC0JCW5iX2J5dGVzICs9IGJ1ZnNbaV0tPnBrdF9sZW47DQo+ID4+ PiArCQlmb3IgKGkgPSAwOyBsaWtlbHkoaSA8IG5iX3R4KTsgaSsrKQ0KPiA+Pj4gKwkJCW5iX2J5 dGVzICs9IGJ1ZnNbaV0tPnBrdF9sZW47DQo+ID4+Pg0KPiA+Pj4gLQluYl9taXNzZWQgPSBuYl9i dWZzIC0gbmJfdHg7DQo+ID4+PiArCQlpZiAodW5saWtlbHkoYXN5bmNfdHhfcG9sbF9jb21wbGV0 ZWQpKSB7DQo+ID4+PiArCQkJdmhvc3RfdHhfZnJlZV9jb21wbGV0ZWQoci0+dmlkLCByLT52aXJ0 cXVldWVfaWQsIHItDQo+ID4+PiBkbWFfaWQsIHItPmNtcGxfcGt0cywNCj4gPj4+ICsJCQkJCVZI T1NUX01BWF9QS1RfQlVSU1QpOw0KPiA+Pj4gKwkJfQ0KPiA+Pj4gKwl9DQo+ID4+Pg0KPiA+Pj4g KwluYl9taXNzZWQgPSBuYl9idWZzIC0gbmJfdHg7DQo+ID4+PiAgICAJci0+c3RhdHMucGt0cyAr PSBuYl90eDsNCj4gPj4+ICAgIAlyLT5zdGF0cy5ieXRlcyArPSBuYl9ieXRlczsNCj4gPj4+ICAg IAlyLT5zdGF0cy5taXNzZWRfcGt0cyArPSBuYl9taXNzZWQ7DQo+ID4+Pg0KPiA+Pj4gLQlmb3Ig KGkgPSAwOyBsaWtlbHkoaSA8IG5iX3R4KTsgaSsrKQ0KPiA+Pj4gLQkJcnRlX3BrdG1idWZfZnJl ZShidWZzW2ldKTsNCj4gPj4+ICAgIG91dDoNCj4gPj4+ICAgIAlydGVfYXRvbWljMzJfc2V0KCZy LT53aGlsZV9xdWV1aW5nLCAwKTsNCj4gPj4+DQo+ID4+PiBAQCAtNzk4LDYgKzkxMSw4IEBAIHF1 ZXVlX3NldHVwKHN0cnVjdCBydGVfZXRoX2RldiAqZXRoX2Rldiwgc3RydWN0DQo+ID4+IHBtZF9p bnRlcm5hbCAqaW50ZXJuYWwpDQo+ID4+PiAgICAJCXZxLT52aWQgPSBpbnRlcm5hbC0+dmlkOw0K PiA+Pj4gICAgCQl2cS0+aW50ZXJuYWwgPSBpbnRlcm5hbDsNCj4gPj4+ICAgIAkJdnEtPnBvcnQg PSBldGhfZGV2LT5kYXRhLT5wb3J0X2lkOw0KPiA+Pj4gKwkJaWYgKGkgPCBldGhfZGV2LT5kYXRh LT5uYl90eF9xdWV1ZXMpDQo+ID4+PiArCQkJdnEtPnR4cSA9IGV0aF9kZXYtPmRhdGEtPnR4X3F1 ZXVlc1tpXTsNCj4gPj4+ICAgIAl9DQo+ID4+PiAgICAJZm9yIChpID0gMDsgaSA8IGV0aF9kZXYt PmRhdGEtPm5iX3R4X3F1ZXVlczsgaSsrKSB7DQo+ID4+PiAgICAJCXZxID0gZXRoX2Rldi0+ZGF0 YS0+dHhfcXVldWVzW2ldOyBAQCAtODc4LDYgKzk5MywzMCBAQA0KPiA+Pj4gbmV3X2RldmljZShp bnQgdmlkKQ0KPiA+Pj4gICAgCXJldHVybiAwOw0KPiA+Pj4gICAgfQ0KPiA+Pj4NCj4gPj4+ICtz dGF0aWMgaW5saW5lIHZvaWQNCj4gPj4+ICthc3luY19jbGVhcl92aXJ0cXVldWUoaW50IHZpZCwg dWludDE2X3QgdmlydHF1ZXVlX2lkLCBpbnQxNl90DQo+ID4+PiArZG1hX2lkKSB7DQo+ID4+PiAr CXN0cnVjdCBydGVfbWJ1ZiAqcGt0c1tWSE9TVF9NQVhfUEtUX0JVUlNUXTsNCj4gPj4+ICsJdWlu dDE2X3QgaSwgcmV0LCBucl9kb25lID0gMDsNCj4gPj4+ICsNCj4gPj4+ICsJaWYgKHZpZCA9PSAt MSkNCj4gPj4+ICsJCXJldHVybjsNCj4gPj4+ICsNCj4gPj4+ICsJd2hpbGUgKHJ0ZV92aG9zdF9h c3luY19nZXRfaW5mbGlnaHQodmlkLCB2aXJ0cXVldWVfaWQpID4gMCkgew0KPiA+Pj4gKwkJcmV0 ID0gcnRlX3Zob3N0X2NsZWFyX3F1ZXVlKHZpZCwgdmlydHF1ZXVlX2lkLCBwa3RzLA0KPiA+PiBW SE9TVF9NQVhfUEtUX0JVUlNULCBkbWFfaWQsDQo+ID4+PiArCQkJCTApOw0KPiA+Pj4gKwkJZm9y IChpID0gMDsgaSA8IHJldCA7IGkrKykNCj4gPj4+ICsJCQlydGVfcGt0bWJ1Zl9mcmVlKHBrdHNb aV0pOw0KPiA+Pj4gKw0KPiA+Pj4gKwkJbnJfZG9uZSArPSByZXQ7DQo+ID4+PiArCX0NCj4gPj4+ ICsJVkhPU1RfTE9HKElORk8sICJDb21wbGV0ZWQgJXUgcGt0cyBmb3IgdmlkLSV1IHZyaW5nLSV1 XG4iLA0KPiA+PiBucl9kb25lLA0KPiA+Pj4gK3ZpZCwgdmlydHF1ZXVlX2lkKTsNCj4gPj4+ICsN Cj4gPj4+ICsJaWYgKHJ0ZV92aG9zdF9hc3luY19jaGFubmVsX3VucmVnaXN0ZXIodmlkLCB2aXJ0 cXVldWVfaWQpKQ0KPiA+Pj4gKwkJVkhPU1RfTE9HKEVSUiwgIkZhaWxlZCB0byB1bnJlZ2lzdGVy IGFzeW5jIGZvciB2aWQtJXUNCj4gPj4gdnJpbmctJXVcbiIsIHZpZCwNCj4gPj4+ICsJCQkJdmly dHF1ZXVlX2lkKTsNCj4gPj4+ICt9DQo+ID4+PiArDQo+ID4+PiAgICBzdGF0aWMgdm9pZA0KPiA+ Pj4gICAgZGVzdHJveV9kZXZpY2UoaW50IHZpZCkNCj4gPj4+ICAgIHsNCj4gPj4+IEBAIC05MDgs MTMgKzEwNDcsMjcgQEAgZGVzdHJveV9kZXZpY2UoaW50IHZpZCkNCj4gPj4+ICAgIAkJCXZxID0g ZXRoX2Rldi0+ZGF0YS0+cnhfcXVldWVzW2ldOw0KPiA+Pj4gICAgCQkJaWYgKCF2cSkNCj4gPj4+ ICAgIAkJCQljb250aW51ZTsNCj4gPj4+ICsJCQlpZiAodnEtPmFzeW5jX3JlZ2lzdGVyKSB7DQo+ ID4+PiArCQkJCWFzeW5jX2NsZWFyX3ZpcnRxdWV1ZSh2cS0+dmlkLCB2cS0NCj4gPj4+IHZpcnRx dWV1ZV9pZCwNCj4gPj4+ICsJCQkJCQkJdnEtPmRtYV9pZCk7DQo+ID4+PiArCQkJCXZxLT5hc3lu Y19yZWdpc3RlciA9IGZhbHNlOw0KPiA+Pj4gKwkJCQlpbnRlcm5hbC0+cXVldWVfZG1hc1t2cS0N Cj4gPj4+IHZpcnRxdWV1ZV9pZF0uYXN5bmNfcmVnaXN0ZXIgPSBmYWxzZTsNCj4gPj4+ICsJCQl9 DQo+ID4+PiAgICAJCQl2cS0+dmlkID0gLTE7DQo+ID4+PiArDQo+ID4+PiAgICAJCX0NCj4gPj4+ ICAgIAkJZm9yIChpID0gMDsgaSA8IGV0aF9kZXYtPmRhdGEtPm5iX3R4X3F1ZXVlczsgaSsrKSB7 DQo+ID4+PiAgICAJCQl2cSA9IGV0aF9kZXYtPmRhdGEtPnR4X3F1ZXVlc1tpXTsNCj4gPj4+ICAg IAkJCWlmICghdnEpDQo+ID4+PiAgICAJCQkJY29udGludWU7DQo+ID4+PiArCQkJaWYgKHZxLT5h c3luY19yZWdpc3Rlcikgew0KPiA+Pj4gKwkJCQlhc3luY19jbGVhcl92aXJ0cXVldWUodnEtPnZp ZCwgdnEtDQo+ID4+PiB2aXJ0cXVldWVfaWQsDQo+ID4+PiArCQkJCQkJCXZxLT5kbWFfaWQpOw0K PiA+Pj4gKwkJCQl2cS0+YXN5bmNfcmVnaXN0ZXIgPSBmYWxzZTsNCj4gPj4+ICsJCQkJaW50ZXJu YWwtPnF1ZXVlX2RtYXNbdnEtDQo+ID4+PiB2aXJ0cXVldWVfaWRdLmFzeW5jX3JlZ2lzdGVyID0g ZmFsc2U7DQo+ID4+PiArCQkJfQ0KPiA+Pj4gICAgCQkJdnEtPnZpZCA9IC0xOw0KPiA+Pj4gKw0K PiA+Pj4gICAgCQl9DQo+ID4+PiAgICAJfQ0KPiA+Pj4NCj4gPj4+IEBAIC05ODMsNiArMTEzNiw5 IEBAIHZyaW5nX3N0YXRlX2NoYW5nZWQoaW50IHZpZCwgdWludDE2X3QgdnJpbmcsDQo+ID4+PiBp bnQNCj4gPj4gZW5hYmxlKQ0KPiA+Pj4gICAgCXN0cnVjdCBydGVfdmhvc3RfdnJpbmdfc3RhdGUg KnN0YXRlOw0KPiA+Pj4gICAgCXN0cnVjdCBydGVfZXRoX2RldiAqZXRoX2RldjsNCj4gPj4+ICAg IAlzdHJ1Y3QgaW50ZXJuYWxfbGlzdCAqbGlzdDsNCj4gPj4+ICsJc3RydWN0IHZob3N0X3F1ZXVl ICpxdWV1ZTsNCj4gPj4+ICsJc3RydWN0IHBtZF9pbnRlcm5hbCAqaW50ZXJuYWw7DQo+ID4+PiAr CWludCBxaWQ7DQo+ID4+PiAgICAJY2hhciBpZm5hbWVbUEFUSF9NQVhdOw0KPiA+Pj4NCj4gPj4+ ICAgIAlydGVfdmhvc3RfZ2V0X2lmbmFtZSh2aWQsIGlmbmFtZSwgc2l6ZW9mKGlmbmFtZSkpOyBA QCAtMTAxMSw2DQo+ID4+PiArMTE2Nyw2NSBAQCB2cmluZ19zdGF0ZV9jaGFuZ2VkKGludCB2aWQs IHVpbnQxNl90IHZyaW5nLCBpbnQgZW5hYmxlKQ0KPiA+Pj4NCj4gPj4+ICAgIAl1cGRhdGVfcXVl dWluZ19zdGF0dXMoZXRoX2RldiwgZmFsc2UpOw0KPiA+Pj4NCj4gPj4+ICsJcWlkID0gdnJpbmcg LyBWSVJUSU9fUU5VTTsNCj4gPj4+ICsJaWYgKHZyaW5nICUgVklSVElPX1FOVU0gPT0gVklSVElP X1JYUSkNCj4gPj4+ICsJCXF1ZXVlID0gZXRoX2Rldi0+ZGF0YS0+dHhfcXVldWVzW3FpZF07DQo+ ID4+PiArCWVsc2UNCj4gPj4+ICsJCXF1ZXVlID0gZXRoX2Rldi0+ZGF0YS0+cnhfcXVldWVzW3Fp ZF07DQo+ID4+PiArDQo+ID4+PiArCWlmICghcXVldWUpDQo+ID4+PiArCQlnb3RvIHNraXA7DQo+ ID4+PiArDQo+ID4+PiArCWludGVybmFsID0gZXRoX2Rldi0+ZGF0YS0+ZGV2X3ByaXZhdGU7DQo+ ID4+PiArDQo+ID4+PiArCS8qIFJlZ2lzdGVyIGFzeW5jIGRhdGEgcGF0aCBmb3IgdGhlIHF1ZXVl IGFzc2lnbmVkIHZhbGlkIERNQQ0KPiA+Pj4gK2RldmljZQ0KPiA+PiAqLw0KPiA+Pj4gKwlpZiAo aW50ZXJuYWwtPnF1ZXVlX2RtYXNbcXVldWUtPnZpcnRxdWV1ZV9pZF0uZG1hX2lkID09DQo+ID4+ IElOVkFMSURfRE1BX0lEKQ0KPiA+Pj4gKwkJZ290byBza2lwOw0KPiA+Pj4gKw0KPiA+Pj4gKwlp ZiAoZW5hYmxlICYmICFxdWV1ZS0+YXN5bmNfcmVnaXN0ZXIpIHsNCj4gPj4+ICsJCWlmIChydGVf dmhvc3RfYXN5bmNfY2hhbm5lbF9yZWdpc3Rlcl90aHJlYWRfdW5zYWZlKHZpZCwNCj4gPj4gdnJp bmcpKSB7DQo+ID4+PiArCQkJVkhPU1RfTE9HKEVSUiwgIkZhaWxlZCB0byByZWdpc3RlciBhc3lu YyBmb3IgdmlkLSV1DQo+ID4+IHZyaW5nLSV1IVxuIiwgdmlkLA0KPiA+Pj4gKwkJCQkJdnJpbmcp Ow0KPiA+Pj4gKwkJCXJldHVybiAtMTsNCj4gPj4+ICsJCX0NCj4gPj4+ICsNCj4gPj4+ICsJCXF1 ZXVlLT5hc3luY19yZWdpc3RlciA9IHRydWU7DQo+ID4+PiArCQlpbnRlcm5hbC0+cXVldWVfZG1h c1t2cmluZ10uYXN5bmNfcmVnaXN0ZXIgPSB0cnVlOw0KPiA+Pj4gKw0KPiA+Pj4gKwkJVkhPU1Rf TE9HKElORk8sICJTdWNjZWVkIHRvIHJlZ2lzdGVyIGFzeW5jIGZvciB2aWQtJXUNCj4gPj4gdnJp bmctJXVcbiIsIHZpZCwgdnJpbmcpOw0KPiA+Pj4gKwl9DQo+ID4+PiArDQo+ID4+PiArCWlmICgh ZW5hYmxlICYmIHF1ZXVlLT5hc3luY19yZWdpc3Rlcikgew0KPiA+Pj4gKwkJc3RydWN0IHJ0ZV9t YnVmICpwa3RzW1ZIT1NUX01BWF9QS1RfQlVSU1RdOw0KPiA+Pj4gKwkJdWludDE2X3QgcmV0LCBp LCBucl9kb25lID0gMDsNCj4gPj4+ICsJCXVpbnQxNl90IGRtYV9pZCA9IHF1ZXVlLT5kbWFfaWQ7 DQo+ID4+PiArDQo+ID4+PiArCQl3aGlsZSAocnRlX3Zob3N0X2FzeW5jX2dldF9pbmZsaWdodF90 aHJlYWRfdW5zYWZlKHZpZCwNCj4gPj4gdnJpbmcpID4gMCkgew0KPiA+Pj4gKwkJCXJldCA9IHJ0 ZV92aG9zdF9jbGVhcl9xdWV1ZV90aHJlYWRfdW5zYWZlKHZpZCwNCj4gPj4gdnJpbmcsIHBrdHMs DQo+ID4+PiArCQkJCQlWSE9TVF9NQVhfUEtUX0JVUlNULCBkbWFfaWQsIDApOw0KPiA+Pj4gKw0K PiA+Pj4gKwkJCWZvciAoaSA9IDA7IGkgPCByZXQgOyBpKyspDQo+ID4+PiArCQkJCXJ0ZV9wa3Rt YnVmX2ZyZWUocGt0c1tpXSk7DQo+ID4+PiArDQo+ID4+PiArCQkJbnJfZG9uZSArPSByZXQ7DQo+ ID4+PiArCQl9DQo+ID4+PiArDQo+ID4+PiArCQlWSE9TVF9MT0coSU5GTywgIkNvbXBsZXRlZCAl dSBpbi1mbGlnaHQgcGt0cyBmb3IgdmlkLSV1DQo+ID4+IHZyaW5nLSV1XG4iLCBucl9kb25lLCB2 aWQsDQo+ID4+PiArCQkJCXZyaW5nKTsNCj4gPj4+ICsNCj4gPj4+ICsJCWlmIChydGVfdmhvc3Rf YXN5bmNfY2hhbm5lbF91bnJlZ2lzdGVyX3RocmVhZF91bnNhZmUodmlkLA0KPiA+PiB2cmluZykp IHsNCj4gPj4+ICsJCQlWSE9TVF9MT0coRVJSLCAiRmFpbGVkIHRvIHVucmVnaXN0ZXIgYXN5bmMg Zm9yIHZpZC0NCj4gPj4gJXUgdnJpbmctJXVcbiIsIHZpZCwNCj4gPj4+ICsJCQkJCXZyaW5nKTsN Cj4gPj4+ICsJCQlyZXR1cm4gLTE7DQo+ID4+PiArCQl9DQo+ID4+PiArDQo+ID4+PiArCQlxdWV1 ZS0+YXN5bmNfcmVnaXN0ZXIgPSBmYWxzZTsNCj4gPj4+ICsJCWludGVybmFsLT5xdWV1ZV9kbWFz W3ZyaW5nXS5hc3luY19yZWdpc3RlciA9IGZhbHNlOw0KPiA+Pj4gKw0KPiA+Pj4gKwkJVkhPU1Rf TE9HKElORk8sICJTdWNjZWVkIHRvIHVucmVnaXN0ZXIgYXN5bmMgZm9yIHZpZC0ldQ0KPiA+PiB2 cmluZy0ldVxuIiwgdmlkLCB2cmluZyk7DQo+ID4+PiArCX0NCj4gPj4+ICsNCj4gPj4+ICtza2lw Og0KPiA+Pj4gICAgCVZIT1NUX0xPRyhJTkZPLCAidnJpbmcldSBpcyAlc1xuIiwNCj4gPj4+ICAg IAkJCXZyaW5nLCBlbmFibGUgPyAiZW5hYmxlZCIgOiAiZGlzYWJsZWQiKTsNCj4gPj4+DQo+ID4+ PiBAQCAtMTE1OSw2ICsxMzc0LDEyIEBADQo+IHJ0ZV9ldGhfdmhvc3RfZ2V0X3ZpZF9mcm9tX3Bv cnRfaWQodWludDE2X3QNCj4gPj4gcG9ydF9pZCkNCj4gPj4+ICAgIAlyZXR1cm4gdmlkOw0KPiA+ Pj4gICAgfQ0KPiA+Pj4NCj4gPj4+ICt2b2lkDQo+ID4+PiArcnRlX2V0aF92aG9zdF9hc3luY190 eF9wb2xsX2NvbXBsZXRlZChib29sIGVuYWJsZSkgew0KPiA+Pj4gKwlhc3luY190eF9wb2xsX2Nv bXBsZXRlZCA9IGVuYWJsZTsNCj4gPj4+ICt9DQo+ID4+PiArDQo+ID4+PiAgICBzdGF0aWMgaW50 DQo+ID4+PiAgICBldGhfZGV2X2NvbmZpZ3VyZShzdHJ1Y3QgcnRlX2V0aF9kZXYgKmRldikNCj4g Pj4+ICAgIHsNCj4gPj4+IEBAIC0xMjIwLDYgKzE0NDEsNyBAQCBldGhfZGV2X2Nsb3NlKHN0cnVj dCBydGVfZXRoX2RldiAqZGV2KQ0KPiA+Pj4gICAgew0KPiA+Pj4gICAgCXN0cnVjdCBwbWRfaW50 ZXJuYWwgKmludGVybmFsOw0KPiA+Pj4gICAgCXN0cnVjdCBpbnRlcm5hbF9saXN0ICpsaXN0Ow0K PiA+Pj4gKwlzdHJ1Y3Qgdmhvc3RfcXVldWUgKnF1ZXVlOw0KPiA+Pj4gICAgCXVuc2lnbmVkIGlu dCBpLCByZXQ7DQo+ID4+Pg0KPiA+Pj4gICAgCWlmIChydGVfZWFsX3Byb2Nlc3NfdHlwZSgpICE9 IFJURV9QUk9DX1BSSU1BUlkpIEBAIC0xMjMzLDYNCj4gPj4gKzE0NTUsMjUNCj4gPj4+IEBAIGV0 aF9kZXZfY2xvc2Uoc3RydWN0IHJ0ZV9ldGhfZGV2ICpkZXYpDQo+ID4+Pg0KPiA+Pj4gICAgCWxp c3QgPSBmaW5kX2ludGVybmFsX3Jlc291cmNlKGludGVybmFsLT5pZmFjZV9uYW1lKTsNCj4gPj4+ ICAgIAlpZiAobGlzdCkgew0KPiA+Pj4gKwkJLyogTWFrZSBzdXJlIGFsbCBpbi1mbGlnaHQgcGFj a2V0cyBhcmUgY29tcGxldGVkIGJlZm9yZQ0KPiA+PiBkZXN0cm95IHZob3N0ICovDQo+ID4+PiAr CQlpZiAoZGV2LT5kYXRhLT5yeF9xdWV1ZXMpIHsNCj4gPj4+ICsJCQlmb3IgKGkgPSAwOyBpIDwg ZGV2LT5kYXRhLT5uYl9yeF9xdWV1ZXM7IGkrKykgew0KPiA+Pj4gKwkJCQlxdWV1ZSA9IGRldi0+ ZGF0YS0+cnhfcXVldWVzW2ldOw0KPiA+Pj4gKwkJCQlpZiAocXVldWUtPmFzeW5jX3JlZ2lzdGVy KQ0KPiA+Pj4gKwkJCQkJYXN5bmNfY2xlYXJfdmlydHF1ZXVlKHF1ZXVlLT52aWQsDQo+ID4+IHF1 ZXVlLT52aXJ0cXVldWVfaWQsDQo+ID4+PiArCQkJCQkJCXF1ZXVlLT5kbWFfaWQpOw0KPiA+Pj4g KwkJCX0NCj4gPj4+ICsJCX0NCj4gPj4+ICsNCj4gPj4+ICsJCWlmIChkZXYtPmRhdGEtPnR4X3F1 ZXVlcykgew0KPiA+Pj4gKwkJCWZvciAoaSA9IDA7IGkgPCBkZXYtPmRhdGEtPm5iX3R4X3F1ZXVl czsgaSsrKSB7DQo+ID4+PiArCQkJCXF1ZXVlID0gZGV2LT5kYXRhLT50eF9xdWV1ZXNbaV07DQo+ ID4+PiArCQkJCWlmIChxdWV1ZS0+YXN5bmNfcmVnaXN0ZXIpDQo+ID4+PiArCQkJCQlhc3luY19j bGVhcl92aXJ0cXVldWUocXVldWUtPnZpZCwNCj4gPj4gcXVldWUtPnZpcnRxdWV1ZV9pZCwNCj4g Pj4+ICsJCQkJCQkJcXVldWUtPmRtYV9pZCk7DQo+ID4+PiArCQkJfQ0KPiA+Pj4gKwkJfQ0KPiA+ Pj4gKw0KPiA+Pj4gICAgCQlydGVfdmhvc3RfZHJpdmVyX3VucmVnaXN0ZXIoaW50ZXJuYWwtPmlm YWNlX25hbWUpOw0KPiA+Pj4gICAgCQlwdGhyZWFkX211dGV4X2xvY2soJmludGVybmFsX2xpc3Rf bG9jayk7DQo+ID4+PiAgICAJCVRBSUxRX1JFTU9WRSgmaW50ZXJuYWxfbGlzdCwgbGlzdCwgbmV4 dCk7IEBAIC0xMjY3LDYNCj4gPj4gKzE1MDgsNyBAQA0KPiA+Pj4gZXRoX3J4X3F1ZXVlX3NldHVw KHN0cnVjdCBydGVfZXRoX2RldiAqZGV2LCB1aW50MTZfdCByeF9xdWV1ZV9pZCwNCj4gPj4+ICAg IAkJICAgc3RydWN0IHJ0ZV9tZW1wb29sICptYl9wb29sKQ0KPiA+Pj4gICAgew0KPiA+Pj4gICAg CXN0cnVjdCB2aG9zdF9xdWV1ZSAqdnE7DQo+ID4+PiArCXN0cnVjdCBwbWRfaW50ZXJuYWwgKmlu dGVybmFsID0gZGV2LT5kYXRhLT5kZXZfcHJpdmF0ZTsNCj4gPj4+DQo+ID4+PiAgICAJdnEgPSBy dGVfem1hbGxvY19zb2NrZXQoTlVMTCwgc2l6ZW9mKHN0cnVjdCB2aG9zdF9xdWV1ZSksDQo+ID4+ PiAgICAJCQlSVEVfQ0FDSEVfTElORV9TSVpFLCBzb2NrZXRfaWQpOyBAQCAtMTI3Nyw2DQo+ICsx NTE5LDggQEANCj4gPj4+IGV0aF9yeF9xdWV1ZV9zZXR1cChzdHJ1Y3QgcnRlX2V0aF9kZXYgKmRl diwgdWludDE2X3QgcnhfcXVldWVfaWQsDQo+ID4+Pg0KPiA+Pj4gICAgCXZxLT5tYl9wb29sID0g bWJfcG9vbDsNCj4gPj4+ICAgIAl2cS0+dmlydHF1ZXVlX2lkID0gcnhfcXVldWVfaWQgKiBWSVJU SU9fUU5VTSArIFZJUlRJT19UWFE7DQo+ID4+PiArCXZxLT5hc3luY19yZWdpc3RlciA9IGludGVy bmFsLT5xdWV1ZV9kbWFzW3ZxLQ0KPiA+Pj4gdmlydHF1ZXVlX2lkXS5hc3luY19yZWdpc3RlcjsN Cj4gPj4+ICsJdnEtPmRtYV9pZCA9IGludGVybmFsLT5xdWV1ZV9kbWFzW3ZxLT52aXJ0cXVldWVf aWRdLmRtYV9pZDsNCj4gPj4+ICAgIAlydGVfc3BpbmxvY2tfaW5pdCgmdnEtPmludHJfbG9jayk7 DQo+ID4+PiAgICAJZGV2LT5kYXRhLT5yeF9xdWV1ZXNbcnhfcXVldWVfaWRdID0gdnE7DQo+ID4+ Pg0KPiA+Pj4gQEAgLTEyOTAsNiArMTUzNCw3IEBAIGV0aF90eF9xdWV1ZV9zZXR1cChzdHJ1Y3Qg cnRlX2V0aF9kZXYgKmRldiwNCj4gPj4gdWludDE2X3QgdHhfcXVldWVfaWQsDQo+ID4+PiAgICAJ CSAgIGNvbnN0IHN0cnVjdCBydGVfZXRoX3R4Y29uZiAqdHhfY29uZiBfX3J0ZV91bnVzZWQpDQo+ ID4+PiAgICB7DQo+ID4+PiAgICAJc3RydWN0IHZob3N0X3F1ZXVlICp2cTsNCj4gPj4+ICsJc3Ry dWN0IHBtZF9pbnRlcm5hbCAqaW50ZXJuYWwgPSBkZXYtPmRhdGEtPmRldl9wcml2YXRlOw0KPiA+ Pj4NCj4gPj4+ICAgIAl2cSA9IHJ0ZV96bWFsbG9jX3NvY2tldChOVUxMLCBzaXplb2Yoc3RydWN0 IHZob3N0X3F1ZXVlKSwNCj4gPj4+ICAgIAkJCVJURV9DQUNIRV9MSU5FX1NJWkUsIHNvY2tldF9p ZCk7IEBAIC0xMjk5LDYNCj4gKzE1NDQsOCBAQA0KPiA+Pj4gZXRoX3R4X3F1ZXVlX3NldHVwKHN0 cnVjdCBydGVfZXRoX2RldiAqZGV2LA0KPiA+PiB1aW50MTZfdCB0eF9xdWV1ZV9pZCwNCj4gPj4+ ICAgIAl9DQo+ID4+Pg0KPiA+Pj4gICAgCXZxLT52aXJ0cXVldWVfaWQgPSB0eF9xdWV1ZV9pZCAq IFZJUlRJT19RTlVNICsgVklSVElPX1JYUTsNCj4gPj4+ICsJdnEtPmFzeW5jX3JlZ2lzdGVyID0g aW50ZXJuYWwtPnF1ZXVlX2RtYXNbdnEtDQo+ID4+PiB2aXJ0cXVldWVfaWRdLmFzeW5jX3JlZ2lz dGVyOw0KPiA+Pj4gKwl2cS0+ZG1hX2lkID0gaW50ZXJuYWwtPnF1ZXVlX2RtYXNbdnEtPnZpcnRx dWV1ZV9pZF0uZG1hX2lkOw0KPiA+Pj4gICAgCXJ0ZV9zcGlubG9ja19pbml0KCZ2cS0+aW50cl9s b2NrKTsNCj4gPj4+ICAgIAlkZXYtPmRhdGEtPnR4X3F1ZXVlc1t0eF9xdWV1ZV9pZF0gPSB2cTsN Cj4gPj4+DQo+ID4+PiBAQCAtMTUwOSwxMyArMTc1NiwxNCBAQCBzdGF0aWMgY29uc3Qgc3RydWN0 IGV0aF9kZXZfb3BzIG9wcyA9IHsNCj4gPj4+ICAgIHN0YXRpYyBpbnQNCj4gPj4+ICAgIGV0aF9k ZXZfdmhvc3RfY3JlYXRlKHN0cnVjdCBydGVfdmRldl9kZXZpY2UgKmRldiwgY2hhciAqaWZhY2Vf bmFtZSwNCj4gPj4+ICAgIAlpbnQxNl90IHF1ZXVlcywgY29uc3QgdW5zaWduZWQgaW50IG51bWFf bm9kZSwgdWludDY0X3QgZmxhZ3MsDQo+ID4+PiAtCXVpbnQ2NF90IGRpc2FibGVfZmxhZ3MpDQo+ ID4+PiArCXVpbnQ2NF90IGRpc2FibGVfZmxhZ3MsIHN0cnVjdCBkbWFfaW5wdXRfaW5mbyAqZG1h X2lucHV0KQ0KPiA+Pj4gICAgew0KPiA+Pj4gICAgCWNvbnN0IGNoYXIgKm5hbWUgPSBydGVfdmRl dl9kZXZpY2VfbmFtZShkZXYpOw0KPiA+Pj4gICAgCXN0cnVjdCBydGVfZXRoX2Rldl9kYXRhICpk YXRhOw0KPiA+Pj4gICAgCXN0cnVjdCBwbWRfaW50ZXJuYWwgKmludGVybmFsID0gTlVMTDsNCj4g Pj4+ICAgIAlzdHJ1Y3QgcnRlX2V0aF9kZXYgKmV0aF9kZXYgPSBOVUxMOw0KPiA+Pj4gICAgCXN0 cnVjdCBydGVfZXRoZXJfYWRkciAqZXRoX2FkZHIgPSBOVUxMOw0KPiA+Pj4gKwlpbnQgaTsNCj4g Pj4+DQo+ID4+PiAgICAJVkhPU1RfTE9HKElORk8sICJDcmVhdGluZyBWSE9TVC1VU0VSIGJhY2tl bmQgb24gbnVtYQ0KPiA+PiBzb2NrZXQgJXVcbiIsDQo+ID4+PiAgICAJCW51bWFfbm9kZSk7DQo+ ID4+PiBAQCAtMTU2NCw2ICsxODEyLDEyIEBAIGV0aF9kZXZfdmhvc3RfY3JlYXRlKHN0cnVjdCBy dGVfdmRldl9kZXZpY2UNCj4gPj4gKmRldiwgY2hhciAqaWZhY2VfbmFtZSwNCj4gPj4+ICAgIAll dGhfZGV2LT5yeF9wa3RfYnVyc3QgPSBldGhfdmhvc3Rfcng7DQo+ID4+PiAgICAJZXRoX2Rldi0+ dHhfcGt0X2J1cnN0ID0gZXRoX3Zob3N0X3R4Ow0KPiA+Pj4NCj4gPj4+ICsJZm9yIChpID0gMDsg aSA8IFJURV9NQVhfUVVFVUVTX1BFUl9QT1JUICogMjsgaSsrKSB7DQo+ID4+PiArCQkvKiBJbnZh bGlkIERNQSBJRCBpbmRpY2F0ZXMgdGhlIHF1ZXVlIGRvZXMgbm90IHdhbnQgdG8NCj4gPj4gZW5h YmxlIGFzeW5jIGRhdGEgcGF0aCAqLw0KPiA+Pj4gKwkJaW50ZXJuYWwtPnF1ZXVlX2RtYXNbaV0u ZG1hX2lkID0gZG1hX2lucHV0LT5kbWFzW2ldOw0KPiA+Pj4gKwkJaW50ZXJuYWwtPnF1ZXVlX2Rt YXNbaV0uYXN5bmNfcmVnaXN0ZXIgPSBmYWxzZTsNCj4gPj4+ICsJfQ0KPiA+Pj4gKw0KPiA+Pj4g ICAgCXJ0ZV9ldGhfZGV2X3Byb2JpbmdfZmluaXNoKGV0aF9kZXYpOw0KPiA+Pj4gICAgCXJldHVy biAwOw0KPiA+Pj4NCj4gPj4+IEBAIC0xNjAzLDYgKzE4NTcsMTU1IEBAIG9wZW5faW50KGNvbnN0 IGNoYXIgKmtleSBfX3J0ZV91bnVzZWQsDQo+IGNvbnN0DQo+ID4+IGNoYXIgKnZhbHVlLCB2b2lk ICpleHRyYV9hcmdzKQ0KPiA+Pj4gICAgCXJldHVybiAwOw0KPiA+Pj4gICAgfQ0KPiA+Pj4NCj4g Pj4+ICtzdGF0aWMgaW50DQo+ID4+PiAraW5pdF9kbWEoaW50MTZfdCBkbWFfaWQsIHVpbnQxNl90 IHJpbmdfc2l6ZSkgew0KPiA+Pj4gKwlzdHJ1Y3QgcnRlX2RtYV9pbmZvIGluZm87DQo+ID4+PiAr CXN0cnVjdCBydGVfZG1hX2NvbmYgZGV2X2NvbmZpZyA9IHsgLm5iX3ZjaGFucyA9IDEgfTsNCj4g Pj4+ICsJc3RydWN0IHJ0ZV9kbWFfdmNoYW5fY29uZiBxY29uZiA9IHsNCj4gPj4+ICsJCS5kaXJl Y3Rpb24gPSBSVEVfRE1BX0RJUl9NRU1fVE9fTUVNLA0KPiA+Pj4gKwl9Ow0KPiA+Pj4gKwlpbnQg cmV0ID0gMDsNCj4gPj4+ICsNCj4gPj4+ICsJaWYgKGRtYV9pc19jb25maWd1cmVkKGRtYV9pZCkp DQo+ID4+PiArCQlnb3RvIG91dDsNCj4gPj4+ICsNCj4gPj4+ICsJaWYgKHJ0ZV9kbWFfaW5mb19n ZXQoZG1hX2lkLCAmaW5mbykgIT0gMCkgew0KPiA+Pj4gKwkJVkhPU1RfTE9HKEVSUiwgImRtYSAl dSBnZXQgaW5mbyBmYWlsZWRcbiIsIGRtYV9pZCk7DQo+ID4+PiArCQlyZXQgPSAtMTsNCj4gPj4+ ICsJCWdvdG8gb3V0Ow0KPiA+Pj4gKwl9DQo+ID4+PiArDQo+ID4+PiArCWlmIChpbmZvLm1heF92 Y2hhbnMgPCAxKSB7DQo+ID4+PiArCQlWSE9TVF9MT0coRVJSLCAiTm8gY2hhbm5lbHMgYXZhaWxh YmxlIG9uIGRtYSAlZFxuIiwNCj4gPj4gZG1hX2lkKTsNCj4gPj4+ICsJCXJldCA9IC0xOw0KPiA+ Pj4gKwkJZ290byBvdXQ7DQo+ID4+PiArCX0NCj4gPj4+ICsNCj4gPj4+ICsJaWYgKHJ0ZV9kbWFf Y29uZmlndXJlKGRtYV9pZCwgJmRldl9jb25maWcpICE9IDApIHsNCj4gPj4+ICsJCVZIT1NUX0xP RyhFUlIsICJkbWEgJXUgY29uZmlndXJlIGZhaWxlZFxuIiwgZG1hX2lkKTsNCj4gPj4+ICsJCXJl dCA9IC0xOw0KPiA+Pj4gKwkJZ290byBvdXQ7DQo+ID4+PiArCX0NCj4gPj4+ICsNCj4gPj4+ICsJ cnRlX2RtYV9pbmZvX2dldChkbWFfaWQsICZpbmZvKTsNCj4gPj4+ICsJaWYgKGluZm8ubmJfdmNo YW5zICE9IDEpIHsNCj4gPj4+ICsJCVZIT1NUX0xPRyhFUlIsICJkbWEgJXUgaGFzIG5vIHF1ZXVl c1xuIiwgZG1hX2lkKTsNCj4gPj4+ICsJCXJldCA9IC0xOw0KPiA+Pj4gKwkJZ290byBvdXQ7DQo+ ID4+PiArCX0NCj4gPj4+ICsNCj4gPj4+ICsJcmluZ19zaXplID0gUlRFX01BWChyaW5nX3NpemUs IE1JTklNVU1fRE1BX1JJTkdfU0laRSk7DQo+ID4+PiArCXJpbmdfc2l6ZSA9IFJURV9NQVgocmlu Z19zaXplLCBpbmZvLm1pbl9kZXNjKTsNCj4gPj4+ICsJcWNvbmYubmJfZGVzYyA9IFJURV9NSU4o cmluZ19zaXplLCBpbmZvLm1heF9kZXNjKTsNCj4gPj4+ICsJaWYgKHJ0ZV9kbWFfdmNoYW5fc2V0 dXAoZG1hX2lkLCAwLCAmcWNvbmYpICE9IDApIHsNCj4gPj4+ICsJCVZIT1NUX0xPRyhFUlIsICJk bWEgJXUgcXVldWUgc2V0dXAgZmFpbGVkXG4iLCBkbWFfaWQpOw0KPiA+Pj4gKwkJcmV0ID0gLTE7 DQo+ID4+PiArCQlnb3RvIG91dDsNCj4gPj4+ICsJfQ0KPiA+Pj4gKw0KPiA+Pj4gKwlpZiAocnRl X2RtYV9zdGFydChkbWFfaWQpICE9IDApIHsNCj4gPj4+ICsJCVZIT1NUX0xPRyhFUlIsICJkbWEg JXUgc3RhcnQgZmFpbGVkXG4iLCBkbWFfaWQpOw0KPiA+Pj4gKwkJcmV0ID0gLTE7DQo+ID4+PiAr CQlnb3RvIG91dDsNCj4gPj4+ICsJfQ0KPiA+Pj4gKw0KPiA+Pj4gKwljb25maWd1cmVkX2RtYXNb ZG1hX2NvdW50KytdID0gZG1hX2lkOw0KPiA+Pj4gKw0KPiA+Pj4gK291dDoNCj4gPj4+ICsJcmV0 dXJuIHJldDsNCj4gPj4+ICt9DQo+ID4+PiArDQo+ID4+PiArc3RhdGljIGludA0KPiA+Pj4gK29w ZW5fZG1hKGNvbnN0IGNoYXIgKmtleSBfX3J0ZV91bnVzZWQsIGNvbnN0IGNoYXIgKnZhbHVlLCB2 b2lkDQo+ID4+PiArKmV4dHJhX2FyZ3MpIHsNCj4gPj4+ICsJc3RydWN0IGRtYV9pbnB1dF9pbmZv ICpkbWFfaW5wdXQgPSBleHRyYV9hcmdzOw0KPiA+Pj4gKwljaGFyICppbnB1dCA9IHN0cm5kdXAo dmFsdWUsIHN0cmxlbih2YWx1ZSkgKyAxKTsNCj4gPj4+ICsJY2hhciAqYWRkcnMgPSBpbnB1dDsN Cj4gPj4+ICsJY2hhciAqcHRyc1syXTsNCj4gPj4+ICsJY2hhciAqc3RhcnQsICplbmQsICpzdWJz dHI7DQo+ID4+PiArCXVpbnQxNl90IHFpZCwgdmlydHF1ZXVlX2lkOw0KPiA+Pj4gKwlpbnQxNl90 IGRtYV9pZDsNCj4gPj4+ICsJaW50IGksIHJldCA9IDA7DQo+ID4+PiArDQo+ID4+PiArCXdoaWxl IChpc2JsYW5rKCphZGRycykpDQo+ID4+PiArCQlhZGRycysrOw0KPiA+Pj4gKwlpZiAoKmFkZHJz ID09ICdcMCcpIHsNCj4gPj4+ICsJCVZIT1NUX0xPRyhFUlIsICJObyBpbnB1dCBETUEgYWRkcmVz c2VzXG4iKTsNCj4gPj4+ICsJCXJldCA9IC0xOw0KPiA+Pj4gKwkJZ290byBvdXQ7DQo+ID4+PiAr CX0NCj4gPj4+ICsNCj4gPj4+ICsJLyogcHJvY2VzcyBETUEgZGV2aWNlcyB3aXRoaW4gYnJhY2tl dC4gKi8NCj4gPj4+ICsJYWRkcnMrKzsNCj4gPj4+ICsJc3Vic3RyID0gc3RydG9rKGFkZHJzLCAi O10iKTsNCj4gPj4+ICsJaWYgKCFzdWJzdHIpIHsNCj4gPj4+ICsJCVZIT1NUX0xPRyhFUlIsICJO byBpbnB1dCBETUEgYWRkcmVzc2VcbiIpOw0KPiA+Pj4gKwkJcmV0ID0gLTE7DQo+ID4+PiArCQln b3RvIG91dDsNCj4gPj4+ICsJfQ0KPiA+Pj4gKw0KPiA+Pj4gKwlkbyB7DQo+ID4+PiArCQlydGVf c3Ryc3BsaXQoc3Vic3RyLCBzdHJsZW4oc3Vic3RyKSwgcHRycywgMiwgJ0AnKTsNCj4gPj4+ICsN Cj4gPj4+ICsJCWNoYXIgKnR4cSwgKnJ4cTsNCj4gPj4+ICsJCWJvb2wgaXNfdHhxOw0KPiA+Pj4g Kw0KPiA+Pj4gKwkJdHhxID0gc3Ryc3RyKHB0cnNbMF0sICJ0eHEiKTsNCj4gPj4+ICsJCXJ4cSA9 IHN0cnN0cihwdHJzWzBdLCAicnhxIik7DQo+ID4+PiArCQlpZiAodHhxID09IE5VTEwgJiYgcnhx ID09IE5VTEwpIHsNCj4gPj4+ICsJCQlWSE9TVF9MT0coRVJSLCAiSWxsZWdhbCBxdWV1ZVxuIik7 DQo+ID4+PiArCQkJcmV0ID0gLTE7DQo+ID4+PiArCQkJZ290byBvdXQ7DQo+ID4+PiArCQl9IGVs c2UgaWYgKHR4cSkgew0KPiA+Pj4gKwkJCWlzX3R4cSA9IHRydWU7DQo+ID4+PiArCQkJc3RhcnQg PSB0eHE7DQo+ID4+PiArCQl9IGVsc2Ugew0KPiA+Pj4gKwkJCWlzX3R4cSA9IGZhbHNlOw0KPiA+ Pj4gKwkJCXN0YXJ0ID0gcnhxOw0KPiA+Pj4gKwkJfQ0KPiA+Pj4gKw0KPiA+Pj4gKwkJc3RhcnQg Kz0gMzsNCj4gPj4+ICsJCXFpZCA9IHN0cnRvbChzdGFydCwgJmVuZCwgMCk7DQo+ID4+PiArCQlp ZiAoZW5kID09IHN0YXJ0KSB7DQo+ID4+PiArCQkJVkhPU1RfTE9HKEVSUiwgIk5vIGlucHV0IHF1 ZXVlIElEXG4iKTsNCj4gPj4+ICsJCQlyZXQgPSAtMTsNCj4gPj4+ICsJCQlnb3RvIG91dDsNCj4g Pj4+ICsJCX0NCj4gPj4+ICsNCj4gPj4+ICsJCXZpcnRxdWV1ZV9pZCA9IGlzX3R4cSA/IHFpZCAq IDIgKyBWSVJUSU9fUlhRIDogcWlkICogMiArDQo+ID4+PiArVklSVElPX1RYUTsNCj4gPj4+ICsN Cj4gPj4+ICsJCWRtYV9pZCA9IHJ0ZV9kbWFfZ2V0X2Rldl9pZF9ieV9uYW1lKHB0cnNbMV0pOw0K PiA+Pj4gKwkJaWYgKGRtYV9pZCA8IDApIHsNCj4gPj4+ICsJCQlWSE9TVF9MT0coRVJSLCAiRmFp bCB0byBmaW5kIERNQSBkZXZpY2UgJXMuXG4iLA0KPiA+PiBwdHJzWzFdKTsNCj4gPj4+ICsJCQly ZXQgPSAtMTsNCj4gPj4+ICsJCQlnb3RvIG91dDsNCj4gPj4+ICsJCX0NCj4gPj4+ICsNCj4gPj4+ ICsJCXJldCA9IGluaXRfZG1hKGRtYV9pZCwgZG1hX2lucHV0LT5kbWFfcmluZ19zaXplKTsNCj4g Pj4+ICsJCWlmIChyZXQgIT0gMCkgew0KPiA+Pj4gKwkJCVZIT1NUX0xPRyhFUlIsICJGYWlsIHRv IGluaXRpYWxpemUgRE1BICV1XG4iLA0KPiA+PiBkbWFfaWQpOw0KPiA+Pj4gKwkJCXJldCA9IC0x Ow0KPiA+Pj4gKwkJCWJyZWFrOw0KPiA+Pj4gKwkJfQ0KPiA+Pj4gKw0KPiA+Pj4gKwkJZG1hX2lu cHV0LT5kbWFzW3ZpcnRxdWV1ZV9pZF0gPSBkbWFfaWQ7DQo+ID4+PiArDQo+ID4+PiArCQlzdWJz dHIgPSBzdHJ0b2soTlVMTCwgIjtdIik7DQo+ID4+PiArCX0gd2hpbGUgKHN1YnN0cik7DQo+ID4+ PiArDQo+ID4+PiArCWZvciAoaSA9IDA7IGkgPCBkbWFfY291bnQ7IGkrKykgew0KPiA+Pj4gKwkJ aWYgKHJ0ZV92aG9zdF9hc3luY19kbWFfY29uZmlndXJlKGNvbmZpZ3VyZWRfZG1hc1tpXSwgMCkg PA0KPiA+PiAwKSB7DQo+ID4+PiArCQkJVkhPU1RfTE9HKEVSUiwgIkZhaWwgdG8gY29uZmlndXJl IERNQSAldSB0bw0KPiA+PiB2aG9zdFxuIiwgY29uZmlndXJlZF9kbWFzW2ldKTsNCj4gPj4+ICsJ CQlyZXQgPSAtMTsNCj4gPj4+ICsJCX0NCj4gPj4+ICsJfQ0KPiA+Pj4gKw0KPiA+Pj4gK291dDoN Cj4gPj4+ICsJZnJlZShpbnB1dCk7DQo+ID4+PiArCXJldHVybiByZXQ7DQo+ID4+PiArfQ0KPiA+ Pj4gKw0KPiA+Pj4gICAgc3RhdGljIGludA0KPiA+Pj4gICAgcnRlX3BtZF92aG9zdF9wcm9iZShz dHJ1Y3QgcnRlX3ZkZXZfZGV2aWNlICpkZXYpDQo+ID4+PiAgICB7DQo+ID4+PiBAQCAtMTYyMSw2 ICsyMDI0LDEwIEBAIHJ0ZV9wbWRfdmhvc3RfcHJvYmUoc3RydWN0DQo+IHJ0ZV92ZGV2X2Rldmlj ZQ0KPiA+PiAqZGV2KQ0KPiA+Pj4gICAgCWludCBsZWdhY3lfb2xfZmxhZ3MgPSAwOw0KPiA+Pj4g ICAgCXN0cnVjdCBydGVfZXRoX2RldiAqZXRoX2RldjsNCj4gPj4+ICAgIAljb25zdCBjaGFyICpu YW1lID0gcnRlX3ZkZXZfZGV2aWNlX25hbWUoZGV2KTsNCj4gPj4+ICsJc3RydWN0IGRtYV9pbnB1 dF9pbmZvIGRtYV9pbnB1dDsNCj4gPj4+ICsNCj4gPj4+ICsJbWVtc2V0KGRtYV9pbnB1dC5kbWFz LCBJTlZBTElEX0RNQV9JRCwNCj4gPj4gc2l6ZW9mKGRtYV9pbnB1dC5kbWFzKSk7DQo+ID4+PiAr CWRtYV9pbnB1dC5kbWFfcmluZ19zaXplID0gREVGQVVMVF9ETUFfUklOR19TSVpFOw0KPiA+Pj4N Cj4gPj4+ICAgIAlWSE9TVF9MT0coSU5GTywgIkluaXRpYWxpemluZyBwbWRfdmhvc3QgZm9yICVz XG4iLCBuYW1lKTsNCj4gPj4+DQo+ID4+PiBAQCAtMTczNiw2ICsyMTQzLDQzIEBAIHJ0ZV9wbWRf dmhvc3RfcHJvYmUoc3RydWN0DQo+IHJ0ZV92ZGV2X2RldmljZQ0KPiA+PiAqZGV2KQ0KPiA+Pj4g ICAgCQkJZ290byBvdXRfZnJlZTsNCj4gPj4+ICAgIAl9DQo+ID4+Pg0KPiA+Pj4gKwlpZiAocnRl X2t2YXJnc19jb3VudChrdmxpc3QsIEVUSF9WSE9TVF9ETUFfUklOR19TSVpFKSA9PSAxKSB7DQo+ ID4+PiArCQlpZiAocnRlX2t2YXJnc19jb3VudChrdmxpc3QsIEVUSF9WSE9TVF9ETUFfQVJHKSA9 PSAxKSB7DQo+ID4+PiArCQkJcmV0ID0gcnRlX2t2YXJnc19wcm9jZXNzKGt2bGlzdCwNCj4gPj4g RVRIX1ZIT1NUX0RNQV9SSU5HX1NJWkUsDQo+ID4+PiArCQkJCQkmb3Blbl9pbnQsDQo+ID4+ICZk bWFfaW5wdXQuZG1hX3Jpbmdfc2l6ZSk7DQo+ID4+PiArCQkJaWYgKHJldCA8IDApDQo+ID4+PiAr CQkJCWdvdG8gb3V0X2ZyZWU7DQo+ID4+PiArDQo+ID4+PiArCQkJaWYgKCFydGVfaXNfcG93ZXJf b2ZfMihkbWFfaW5wdXQuZG1hX3Jpbmdfc2l6ZSkpIHsNCj4gPj4+ICsJCQkJZG1hX2lucHV0LmRt YV9yaW5nX3NpemUgPQ0KPiA+PiBydGVfYWxpZ24zMnBvdzIoZG1hX2lucHV0LmRtYV9yaW5nX3Np emUpOw0KPiA+Pj4gKwkJCQlWSE9TVF9MT0coSU5GTywgIkNvbnZlcnQgZG1hX3Jpbmdfc2l6ZSB0 bw0KPiA+PiB0aGUgcG93ZXIgb2YgdHdvICV1XG4iLA0KPiA+Pj4gKwkJCQkJCWRtYV9pbnB1dC5k bWFfcmluZ19zaXplKTsNCj4gPj4+ICsJCQl9DQo+ID4+PiArCQl9IGVsc2Ugew0KPiA+Pj4gKwkJ CVZIT1NUX0xPRyhXQVJOSU5HLCAiJXMgaXMgbm90IHNwZWNpZmllZCwgc2tpcCB0bw0KPiA+PiBw YXJzZSAlc1xuIiwNCj4gPj4+ICsJCQkJCUVUSF9WSE9TVF9ETUFfQVJHLA0KPiA+PiBFVEhfVkhP U1RfRE1BX1JJTkdfU0laRSk7DQo+ID4+PiArCQl9DQo+ID4+PiArCX0NCj4gPj4+ICsNCj4gPj4+ ICsJaWYgKHJ0ZV9rdmFyZ3NfY291bnQoa3ZsaXN0LCBFVEhfVkhPU1RfRE1BX0FSRykgPT0gMSkg ew0KPiA+Pj4gKwkJaWYgKHJ0ZV9rdmFyZ3NfY291bnQoa3ZsaXN0LCBFVEhfVkhPU1RfRE1BX1JJ TkdfU0laRSkgPT0NCj4gPj4gMCkNCj4gPj4+ICsJCQlWSE9TVF9MT0coSU5GTywgIlVzZSBkZWZh dWx0IGRtYSByaW5nIHNpemUgJWRcbiIsDQo+ID4+PiArREVGQVVMVF9ETUFfUklOR19TSVpFKTsN Cj4gPj4+ICsNCj4gPj4+ICsJCXJldCA9IHJ0ZV9rdmFyZ3NfcHJvY2Vzcyhrdmxpc3QsIEVUSF9W SE9TVF9ETUFfQVJHLA0KPiA+Pj4gKwkJCQkJICZvcGVuX2RtYSwgJmRtYV9pbnB1dCk7DQo+ID4+ PiArCQlpZiAocmV0IDwgMCkgew0KPiA+Pj4gKwkJCVZIT1NUX0xPRyhFUlIsICJGYWlsZWQgdG8g cGFyc2UgJXNcbiIsDQo+ID4+IEVUSF9WSE9TVF9ETUFfQVJHKTsNCj4gPj4+ICsJCQlnb3RvIG91 dF9mcmVlOw0KPiA+Pj4gKwkJfQ0KPiA+Pj4gKw0KPiA+Pj4gKwkJZmxhZ3MgfD0gUlRFX1ZIT1NU X1VTRVJfQVNZTkNfQ09QWTsNCj4gPj4+ICsJCS8qKg0KPiA+Pj4gKwkJICogRG9uJ3Qgc3VwcG9y dCBsaXZlIG1pZ3JhdGlvbiB3aGVuIGVuYWJsZQ0KPiA+Pj4gKwkJICogRE1BIGFjY2VsZXJhdGlv bi4NCj4gPj4+ICsJCSAqLw0KPiA+Pj4gKwkJZGlzYWJsZV9mbGFncyB8PSAoMVVMTCA8PCBWSE9T VF9GX0xPR19BTEwpOw0KPiA+Pj4gKwl9DQo+ID4+PiArDQo+ID4+PiAgICAJaWYgKGxlZ2FjeV9v bF9mbGFncyA9PSAwKQ0KPiA+Pj4gICAgCQlmbGFncyB8PSBSVEVfVkhPU1RfVVNFUl9ORVRfQ09N UExJQU5UX09MX0ZMQUdTOw0KPiA+Pj4NCj4gPj4+IEBAIC0xNzQzLDcgKzIxODcsNyBAQCBydGVf cG1kX3Zob3N0X3Byb2JlKHN0cnVjdCBydGVfdmRldl9kZXZpY2UNCj4gPj4gKmRldikNCj4gPj4+ ICAgIAkJZGV2LT5kZXZpY2UubnVtYV9ub2RlID0gcnRlX3NvY2tldF9pZCgpOw0KPiA+Pj4NCj4g Pj4+ICAgIAlyZXQgPSBldGhfZGV2X3Zob3N0X2NyZWF0ZShkZXYsIGlmYWNlX25hbWUsIHF1ZXVl cywNCj4gPj4+IC0JCQkJICAgZGV2LT5kZXZpY2UubnVtYV9ub2RlLCBmbGFncywNCj4gPj4gZGlz YWJsZV9mbGFncyk7DQo+ID4+PiArCQkJZGV2LT5kZXZpY2UubnVtYV9ub2RlLCBmbGFncywgZGlz YWJsZV9mbGFncywNCj4gPj4gJmRtYV9pbnB1dCk7DQo+ID4+PiAgICAJaWYgKHJldCA9PSAtMSkN Cj4gPj4+ICAgIAkJVkhPU1RfTE9HKEVSUiwgIkZhaWxlZCB0byBjcmVhdGUgJXNcbiIsIG5hbWUp Ow0KPiA+Pj4NCj4gPj4+IEBAIC0xNzg3LDQgKzIyMzEsNiBAQA0KPiBSVEVfUE1EX1JFR0lTVEVS X1BBUkFNX1NUUklORyhuZXRfdmhvc3QsDQo+ID4+PiAgICAJInBvc3Rjb3B5LXN1cHBvcnQ9PDB8 MT4gIg0KPiA+Pj4gICAgCSJ0c289PDB8MT4gIg0KPiA+Pj4gICAgCSJsaW5lYXItYnVmZmVyPTww fDE+ICINCj4gPj4+IC0JImV4dC1idWZmZXI9PDB8MT4iKTsNCj4gPj4+ICsJImV4dC1idWZmZXI9 PDB8MT4gIg0KPiA+Pj4gKwkiZG1hLXJpbmctc2l6ZT08aW50PiAiDQo+ID4+PiArCSJkbWFzPVt0 eHEwQGRtYV9hZGRyO3J4cTBAZG1hX2FkZHJdIik7DQo+ID4+PiBkaWZmIC0tZ2l0IGEvZHJpdmVy cy9uZXQvdmhvc3QvcnRlX2V0aF92aG9zdC5oDQo+ID4+PiBiL2RyaXZlcnMvbmV0L3Zob3N0L3J0 ZV9ldGhfdmhvc3QuaA0KPiA+Pj4gaW5kZXggMGU2OGI5ZjY2OC4uMTQ2Yzk4ODAzZCAxMDA2NDQN Cj4gPj4+IC0tLSBhL2RyaXZlcnMvbmV0L3Zob3N0L3J0ZV9ldGhfdmhvc3QuaA0KPiA+Pj4gKysr IGIvZHJpdmVycy9uZXQvdmhvc3QvcnRlX2V0aF92aG9zdC5oDQo+ID4+PiBAQCAtNTIsNiArNTIs MjEgQEAgaW50IHJ0ZV9ldGhfdmhvc3RfZ2V0X3F1ZXVlX2V2ZW50KHVpbnQxNl90DQo+IHBvcnRf aWQsDQo+ID4+PiAgICAgKi8NCj4gPj4+ICAgIGludCBydGVfZXRoX3Zob3N0X2dldF92aWRfZnJv bV9wb3J0X2lkKHVpbnQxNl90IHBvcnRfaWQpOw0KPiA+Pj4NCj4gPj4+ICsvKioNCj4gPj4+ICsg KiBAd2FybmluZw0KPiA+Pj4gKyAqIEBiIEVYUEVSSU1FTlRBTDogdGhpcyBBUEkgbWF5IGNoYW5n ZSwgb3IgYmUgcmVtb3ZlZCwgd2l0aG91dA0KPiA+Pj4gK3ByaW9yIG5vdGljZQ0KPiA+Pj4gKyAq DQo+ID4+PiArICogQnkgZGVmYXVsdCwgcnRlX3Zob3N0X3BvbGxfZW5xdWV1ZV9jb21wbGV0ZWQo KSBpcyBjYWxsZWQgaW4gUnggcGF0aC4NCj4gPj4+ICsgKiBUaGlzIGZ1bmN0aW9uIGVuYWJsZXMg VHggcGF0aCwgcmF0aGVyIHRoYW4gUnggcGF0aCwgdG8gcG9sbA0KPiA+Pj4gK2NvbXBsZXRlZA0K PiA+Pj4gKyAqIHBhY2tldHMgZm9yIHZob3N0IGFzeW5jIGVucXVldWUgb3BlcmF0aW9ucy4gTm90 ZSB0aGF0IHZpcnRpbyBtYXkNCj4gPj4+ICtuZXZlcg0KPiA+Pj4gKyAqIHJlY2VpdmUgRE1BIGNv bXBsZXRlZCBwYWNrZXRzIGlmIHRoZXJlIGFyZSBubyBtb3JlIFR4IG9wZXJhdGlvbnMuDQo+ID4+ PiArICoNCj4gPj4+ICsgKiBAcGFyYW0gZW5hYmxlDQo+ID4+PiArICogIFRydWUgaW5kaWNhdGVz IFR4IHBhdGggdG8gY2FsbCBydGVfdmhvc3RfcG9sbF9lbnF1ZXVlX2NvbXBsZXRlZCgpLg0KPiA+ Pj4gKyAqLw0KPiA+Pj4gK19fcnRlX2V4cGVyaW1lbnRhbA0KPiA+Pj4gK3ZvaWQgcnRlX2V0aF92 aG9zdF9hc3luY190eF9wb2xsX2NvbXBsZXRlZChib29sIGVuYWJsZSk7DQo+ID4+PiArDQo+ID4+ PiAgICAjaWZkZWYgX19jcGx1c3BsdXMNCj4gPj4+ICAgIH0NCj4gPj4+ICAgICNlbmRpZg0KPiA+ Pj4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3Zob3N0L3ZlcnNpb24ubWFwDQo+ID4+PiBiL2Ry aXZlcnMvbmV0L3Zob3N0L3ZlcnNpb24ubWFwIGluZGV4IGU0MmM4OWYxZWIuLjBhNDA0NDEyMjcg MTAwNjQ0DQo+ID4+PiAtLS0gYS9kcml2ZXJzL25ldC92aG9zdC92ZXJzaW9uLm1hcA0KPiA+Pj4g KysrIGIvZHJpdmVycy9uZXQvdmhvc3QvdmVyc2lvbi5tYXANCj4gPj4+IEBAIC02LDMgKzYsMTAg QEAgRFBES18yMyB7DQo+ID4+Pg0KPiA+Pj4gICAgCWxvY2FsOiAqOw0KPiA+Pj4gICAgfTsNCj4g Pj4+ICsNCj4gPj4+ICtFWFBFUklNRU5UQUwgew0KPiA+Pj4gKwlnbG9iYWw6DQo+ID4+PiArDQo+ ID4+PiArCSMgYWRkZWQgaW4gMjIuMTENCj4gPj4+ICsJcnRlX2V0aF92aG9zdF9hc3luY190eF9w b2xsX2NvbXBsZXRlZDsNCj4gPj4NCj4gPj4gSSdtIG5vdCBpbiBmYXZvciBvZiBhZGRpbmcgZHJp dmVyLXNwZWNpZmljIEFQSS4NCj4gPj4gSU1ITywgeW91IHNob3VsZCBqdXN0IGRlY2lkZSB3aGV0 aGVyIGRvaW5nIGNvbXBsZXRpb24gb24gVHggb3IgUngNCj4gPj4gcGF0aCBhbmQgc3RpY2sgd2l0 aCBpdC4NCj4gPj4NCj4gPj4gRG9pbmcgY29tcGxldGlvbiBvbiB0aGUgVHggcGF0aCBub3QgYmVp bmcgcmVsaWFibGUgKGkuZS4gaWYgbm90IG90aGVyDQo+ID4+IHBhY2tldHMgYXJlIHNlbnQsIGxh c3QgZW5xdWV1ZWQgcGFja2V0cyBhcmUgbm90IGNvbXBsZXRlZCksIEkgZ3Vlc3MNCj4gPj4gb25s eSBkb2luZyBjb21wbGV0aW9uIGluIFJ4IHBhdGggaXMgdGhlIHJpZ2h0IHRoaW5nIHRvIGRvLg0K PiA+DQo+ID4gSXQncyBnb29kIHRvIGtub3cgeW91ciB0aG91Z2h0cy4gQnV0IGlmIHdlIHJlbW92 ZSB0aGUgZHJpdmVyLXNwZWNpZmljDQo+ID4gQVBJIGFuZCBwdXQgcG9sbF9lbnF1ZXVlX2NvbXBs ZXRlZCBpbiBSeCBwYXRoLCBUZXN0cG1kIHR4b25seSBtb2RlDQo+ID4gY2Fubm90IHdvcmsgd2l0 aCBETUEgYWNjZWxlcmF0ZWQgZW5xdWV1ZSwgYXMgbm8gb25lIHdpbGwgY2FsbA0KPiBwb2xsX2Vu cXVldWVfY29tcGxldGVkLg0KPiA+IEFueSB0aG91Z2h0cz8NCj4gDQo+IEkgdGhpbmsgaXQgcHJv dmVzIHRoZSBhc3luYyBmZWF0dXJlIGlzIG5vdCB1c2FibGUgYXMgaXQgaXMgaW1wbGVtZW50ZWQg dG9kYXkuDQo+IA0KPiBFeHBlY3RpbmcgdGhlIHVzZXIgdG8ga25vdyBoZSBoYXMgdG8gc2VsZWN0 IG9yIGNoYW5nZSBhdCBydW50aW1lIHRoZSB0eA0KPiBjb21wbGV0aW9uIG1vZGUgZm9yIHRoZSBm ZWF0dXJlIHRvIGp1c3Qgd29yayAobm90IG9ubHkgYSBwZXJmb3JtYW5jZQ0KPiB0dW5pbmcpIGlz IG5vdCBhY2NlcHRhYmxlIElNSE8uDQo+IA0KPiBUbyBzdW1tYXJpemU6DQo+ICAgLSBCeSBkZWZh dWx0LCBUeCBjb21wbGV0aW9uIGFyZSBkb25lIGJ5IHRoZSBSeCBwYXRoIHNvIHR4b25seSBtb2Rl IGlzIG5vdA0KPiB3b3JraW5nIChhbmQgbm90aGluZyB3aWxsIG5vdGlmeSB0aGUgdXNlcikuDQo+ ICAgLSBJZiB1c2VyIHN3aXRjaCB0byBUeCBjb21wbGV0aW9uIGFyZSBkb25lIGJ5IHRoZSBUeCBw YXRoLCBsYXN0IHBhY2tldCB3aWxsDQo+IG5ldmVyIGJlIGNvbXBsZXRlZC4NCg0KQW5vdGhlciB3 YXkgaXMgdG8gY2FsbCBydGVfdmhvc3RfcG9sbF9lbnF1ZXVlX2NvbXBsZXRlZCBpbiBib3RoIFJ4 IGFuZCBUeA0KcGF0aC4gSW4gdGhpcyB3YXksIHdlIHdpbGwgbm90IGhhdmUgdGhlIGlzc3VlcyBh Ym92ZSwgYW5kIHRoZSBwZXJmb3JtYW5jZSBkcm9wDQppcyBub3QgdG9vIG11Y2ggKGl0IGlzIH4x MCUsIGNvbXBhcmVkIHdpdGggY2FsbGluZyBpbiBUeCBwYXRoKS4NCg0KRG9lcyBpdCBtYWtlIHNl bnNlPw0KDQo+IA0KPiBJdCBtYXkgd29yayBmb3IgYmVuY2htYXJrLCBidXQgaXQgaXMgbm90IHVz YWJsZSBpbiByZWFsLWxpZmUuDQoNCklNSE8sIFZob3N0IFBNRCBpcyBmb3IgYmVuY2htYXJrIHB1 cnBvc2UuIE5vIHJlYWwgYXBwbGljYXRpb25zIHVzZQ0KVmhvc3QgUE1ELiBUaGUgbW90aXZhdGlv biBvZiBlbmFibGluZyBhc3luY2hyb25vdXMgZGF0YSBwYXRoIGluIFZob3N0DQpQTUQgaXMgdG8g ZGVtb25zdHJhdGUgdGhlIHBlcmZvcm1hbmNlIG9mIERNQSBhY2NlbGVyYXRlZCBkYXRhIHBhdGgN CnRvby4NCg0KPiBJIHRoaW5rIHRoYXQgZm9yIFZob3N0IFBNRCwgdGhlIFZpcnRpbyBjb21wbGV0 aW9ucyBzaG91bGQgZWl0aGVyIGJlDQo+IHBlcmZvcm1lZCBieSBETUEgZW5naW5lIG9yIGJ5IGEg ZGVkaWNhdGVkIHRocmVhZC4NCg0KV2UgY2Fubm90IGRlcGVuZCBvbiBETUEgZW5naW5lIHRvIGRv IGNvbXBsZXRpb24sIGFzIHRoZXJlIGlzIG5vDQpvcmRlcmluZyBndWFyYW50ZWUgb24gdGhlIEhX LiBGb3IgZXhhbXBsZSwgZ2l2ZW4gdGhlIERNQSBlbmdpbmUNCmlzc3VlcyB0d28gdXBkYXRlcyBv biB0aGUgdXNlZCByaW5nJ3MgaW5kZXgsIGl0IGlzIHBvc3NpYmxlIHRoYXQgdGhlIHNlY29uZA0K d3JpdGUgY29tcGxldGVzIGJlZm9yZSB0aGUgZmlyc3Qgb25lLg0KDQpGb3IgYSBkZWRpY2F0ZWQg dGhyZWFkLCB0aGUgc2NhbGFiaWxpdHkgbWF5IGJlY29tZSB0aGUgaXNzdWUuIFBlcmZvcm1hbmNl DQpjb3VsZCBkcm9wIGR1ZSB0byBtdWx0aXBsZSBjb3JlcyByZWFkL3dyaXRlIHNoYXJlZCBkYXRh Lg0KDQpGb3IgcmVhbCB3b3JrbG9hZCBpbnRlZ3JhdGlvbiwgSSBiZWxpZXZlIHRoZXJlIGFyZSBh bHJlYWR5IGxvdHMgb2YgZGlzY3Vzc2lvbnMNCm9uIE9WUy4gQnV0IGZvciB0aGlzIHBhdGNoLCBp dCBpcyBtb3JlIGFzIGEgYmVuY2htYXJrIHRvIGRlbW9uc3RyYXRlIHRoZQ0KYmVuZWZpdHMgZnJv bSBETUEgYWNjZWxlcmF0aW9uLCBJTUhPLg0KDQpUaGFua3MsDQpKaWF5dQ0KPiANCj4gUmVnYXJk cywNCj4gTWF4aW1lDQo+IA0KPiA+DQo+ID4gVGhhbmtzLA0KPiA+IEppYXl1DQoNCg==