From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from mga07.intel.com (mga07.intel.com [134.134.136.100]) by mx.groups.io with SMTP id smtpd.web08.18679.1642992270451113528 for ; Sun, 23 Jan 2022 18:44:30 -0800 Authentication-Results: mx.groups.io; dkim=fail reason="unable to parse pub key" header.i=@intel.com header.s=intel header.b=YxXFvzWq; spf=pass (domain: intel.com, ip: 134.134.136.100, mailfrom: w.sheng@intel.com) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=intel.com; i=@intel.com; q=dns/txt; s=Intel; t=1642992270; x=1674528270; h=from:to:cc:subject:date:message-id:references: in-reply-to:content-transfer-encoding:mime-version; bh=ZGmbp6tzABieDlpry4eNVqhlxIV35yXb81aUGk3wFMA=; b=YxXFvzWqVadMfO8Nirhj3ndwB+k4t1lVyUK/4f7sRS+gCt+hCf7BhDxt altHOGT5HHBdIJPaCGxtZuyNR31LPuSt8eiDaYrTln103DsPvZAijM+xB xSDymcvgSzcR6z2NEm5SHGXmRPUCItxJaOS/06bsaeN8iqtqkvDFH5G6x V/iRxbAb7yO9zgvc6Deh19FuxQTOXhYtyFVw2ry/9/R8mKUgktBjZkpJS Y0TUEQp1RsmyBJpjjYKKBZFM4z2lIlEe/igbc/MgiZzvc/Dcczb8WvuUf AiScXSR/9l6yfqsT8AM3Q2t2qtGZ0lOMQY+x1682L3aEsR3lySLz46QwH w==; X-IronPort-AV: E=McAfee;i="6200,9189,10236"; a="309270434" X-IronPort-AV: E=Sophos;i="5.88,311,1635231600"; d="scan'208";a="309270434" Received: from fmsmga007.fm.intel.com ([10.253.24.52]) by orsmga105.jf.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 23 Jan 2022 18:44:29 -0800 X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="5.88,311,1635231600"; d="scan'208";a="531940048" Received: from orsmsx603.amr.corp.intel.com ([10.22.229.16]) by fmsmga007.fm.intel.com with ESMTP; 23 Jan 2022 18:44:28 -0800 Received: from orsmsx612.amr.corp.intel.com (10.22.229.25) by ORSMSX603.amr.corp.intel.com (10.22.229.16) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.2308.20; Sun, 23 Jan 2022 18:44:28 -0800 Received: from ORSEDG601.ED.cps.intel.com (10.7.248.6) by orsmsx612.amr.corp.intel.com (10.22.229.25) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.2308.20 via Frontend Transport; Sun, 23 Jan 2022 18:44:28 -0800 Received: from NAM10-BN7-obe.outbound.protection.outlook.com (104.47.70.103) by edgegateway.intel.com (134.134.137.102) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.1.2308.20; Sun, 23 Jan 2022 18:44:27 -0800 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=Z1UZDZDj3qMF1qrW1guFREkIZ4kdKC+fPrcNqWpOAERkR54TRQC84mzDKJYQnuM/hHIYycak9Lu+zj0LZAx1r0LPhY8xGtoygZySlmmPSzdGa4JB7oAiXi9OMKXBg8T4TFmoPVf9PNAaN9+awgQviQMRnLY7QNJqzkZf+F+m2pUWP9QgNVnH426Jnn5Able+bF95yJEWMc5isKDELyw6O/gtHreMeudv4I2lYF9tNPdghYmrSS9pr7AKhHS64WnVOXCvXFe0M4KtKSC0C/JCc+PHNOPiz7qqo3VVoC4KQfgUjmlioSNE6h+nxXAFqHF8NrY0miAdvyUYLlAeDRjCgA== 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=ZGmbp6tzABieDlpry4eNVqhlxIV35yXb81aUGk3wFMA=; b=P38CRSYiRiOrEmUGizuXbDi4g/rYbvXoy0MIz+FGioU9hXQ8+dF8RRfmHKURbUShpeKrwKjcAs6XXLxIAZm3Tzb7HbVWv/AQUIo9Ub7bl99l1w5BzANpdeMPrmFnfjokF6qbZHBH8gNyJnLGNGpgdXj//jHgMOwl1PkNB4/j0K3UWYk6bDb8FW5vLdaqQpENA8LjZkbFaYPa2T9KBNd6yhFN7xMq8WzCvK4Xi/qKaPzcgOvssfM2cGd1nJzYaYzHBjww9e0aTzZbMVGyjLM1Scu6jSW3I7Phtyzxust0V67KjgdeOuf3rF4muqyu8BEjQtGb8kYbbke/c7q8WiB/pA== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=none; dmarc=none; dkim=none; arc=none Received: from PH0PR11MB4870.namprd11.prod.outlook.com (2603:10b6:510:34::16) by BL0PR11MB3060.namprd11.prod.outlook.com (2603:10b6:208:72::24) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.4909.10; Mon, 24 Jan 2022 02:44:23 +0000 Received: from PH0PR11MB4870.namprd11.prod.outlook.com ([fe80::887a:852f:715f:70b9]) by PH0PR11MB4870.namprd11.prod.outlook.com ([fe80::887a:852f:715f:70b9%7]) with mapi id 15.20.4909.017; Mon, 24 Jan 2022 02:44:23 +0000 From: "Sheng Wei" To: "Ni, Ray" , "Huang, Jenny" , "devel@edk2.groups.io" CC: "Chaganty, Rangasai V" , "Kowalewski, Robert" Subject: Re: [PATCH v5 4/4] IntelSiliconPkg/VTd: Only generate PEI DMA buffer once. Thread-Topic: [PATCH v5 4/4] IntelSiliconPkg/VTd: Only generate PEI DMA buffer once. Thread-Index: AQHYDEN/Wil9ASnJwUKO2Np2mej+SqxtKw4QgARR4VA= Date: Mon, 24 Jan 2022 02:44:22 +0000 Message-ID: References: <20220118081433.15620-1-w.sheng@intel.com> <20220118081433.15620-5-w.sheng@intel.com> In-Reply-To: Accept-Language: en-US X-Mentions: ray.ni@intel.com X-MS-Has-Attach: X-MS-TNEF-Correlator: dlp-product: dlpe-windows dlp-reaction: no-action dlp-version: 11.6.200.16 authentication-results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=intel.com; x-ms-publictraffictype: Email x-ms-office365-filtering-correlation-id: d6691e0f-fd18-40c9-2260-08d9dee36dd3 x-ms-traffictypediagnostic: BL0PR11MB3060:EE_ x-microsoft-antispam-prvs: x-ms-oob-tlc-oobclassifiers: OLM:4941; x-ms-exchange-senderadcheck: 1 x-ms-exchange-antispam-relay: 0 x-microsoft-antispam: BCL:0; x-microsoft-antispam-message-info: sFvFG0oQvQWJa/Zfu2jSkM4vS5mF4EReqBO+A7556Tju4X59l3C15EQnJRxES3exinxAogUysRlY+cDbt0c8evH2md9fcmnTYz51mW9Wpl5lFve1VaPlL4BZJTmaW41qc2V3ADKCY943WYvIOsdDaut6FHP2bChgHm98Hwo0B3gUINmWyU8vaUa5S1Z3mljW1u2hE+Q3UwjdVX3sKbyhPDlgbT8bkeKcmaobmKylghn+rznBL74pYKdlVUhgkTmuyLPRQChiVB6Jdvr4WoSveRL4UiO6TSIG6N9WYghoF8aV8VwiA68zU0uvI03OCU7dSkfSPpwUoClowH7BoZlF/KM3dZv3KA+5OKM4RMh6wQb16jdW3tQUDkGBn66w/+2mXIrKEFYV0I6zjL5O02DPNStiG2qgkgip1TkHVy01CXg0cAG2Ae32aEZxLf1VbKCHkci6ofZmufOzDR5uvbhcNqHeEk+YOkXKp1B1C4mkgh1LiqOYcy3sxbpGNd1beBi+sGHutHVPOgPeF8Hd16dt1Glef50DN/DLWhdsEpqtyZCRjwNJqxE1couMQvU66gKe94ntJbJayAGaptHIL7b76OLwauo6AFnb97p6ZC0x9NuylJzzaKmSXkkCAax5blV0z/uWkqGfelNlaNGEbaRpVR3yxu+XqNqhqEMey0tCTxW1v3odr7rUt+mUgAYdAJb44Kuu5kUo0sCURhRBkOOIDeHw638R8+hvY2NlcSkVWRwqo27Huaq/BZS1xHeRIIdcsd65Qy7FB7pFzNk1AUFfsfs4pE97fFIZ1XTDRNZ9ZaWtTlNqdjbr9OSWPKg0z6DM x-forefront-antispam-report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:PH0PR11MB4870.namprd11.prod.outlook.com;PTR:;CAT:NONE;SFS:(366004)(76116006)(4326008)(66556008)(66446008)(52536014)(30864003)(86362001)(38070700005)(5660300002)(83380400001)(54906003)(66946007)(2906002)(66476007)(107886003)(316002)(110136005)(33656002)(9686003)(966005)(55016003)(64756008)(26005)(71200400001)(8676002)(6506007)(8936002)(82960400001)(122000001)(53546011)(508600001)(19627235002)(7696005)(38100700002)(186003)(579004)(559001)(44824005);DIR:OUT;SFP:1102; x-ms-exchange-antispam-messagedata-chunkcount: 1 x-ms-exchange-antispam-messagedata-0: =?gb2312?B?TjhYTVdWTk5jMHdSY3MxZDVoQU8yQlJmR2Z3OEZ0NjJoNUpON2VXZzlFZEM0?= =?gb2312?B?TjlZSjR6cHlYb2pZcmt2SDBBMTZJQUFhdWZmTWJtc09mZ0lBbkRzU1htcVpQ?= =?gb2312?B?V0VrNE0rVVNHZEsrL0hMZFJDWjliWGt0MU5aVUpjZzJQbWJWaEZsMnk1OVRn?= =?gb2312?B?QVE2aW51MmNFSCttZEsrQzNPOEs2dUQ4eStJOVlSTDVBa01TWnJCdys5ZGlF?= =?gb2312?B?TFR1YjV1RU9oZlZKNmJqc1FYbzVCVERwcmd1R0dGY2MrNDBGTWNrMUNQaVVh?= =?gb2312?B?ZngyOU5VZGs3L2ZwK2pyQ1VwaXo1SktOUTV3REVCRmhuYWpmVzFXVUszSEo5?= =?gb2312?B?S1pBRTBiZldXVG9kcms3UG9UVVg3TnVoWURrR0d3WGdKKzR6YU1Ga1pYUGph?= =?gb2312?B?Z2lBVmp3V045SjZxNEgvTEwvNGFibGFxaDV4SzlwdU0zeXJXYy9nVUpjd3NI?= =?gb2312?B?aDdkaWU4aXU2K1IxV2NzdVhwM0d4RVRBWnk1bC9CakRaT09maWh3bDJDQzBm?= =?gb2312?B?R3lQdHpYT0dtMmxkcnlSL3lMSFdEU0JuL1hHL3BQdTNKTTZxaGJXRjhiRDVO?= =?gb2312?B?MFptbG9GY3Yvb1dqRG1YL1Z4K0FhbEk5WUdxb0VxSTAxUFpuNE1MRWc1c0Fq?= =?gb2312?B?ajJYUTZWYjlpYTgwd1pKbzVUUFFkRXBWK0M0RWlIR3p5TEVnckdoWlFDSXl0?= =?gb2312?B?VFd5RHpuWERmazdERU1VK3lNNXN6UVROZ1dUeVpQZXBHdzRpL2FlcVVkbW1w?= =?gb2312?B?OGorK1JYZDUzU1Y3SmlHTjJ3ZDZPbVFuM3ArMUhGWDVwWVlVbUJRUEQxTVlq?= =?gb2312?B?NVhUYThmUmlDWHdJUmo3SEQvYWd3bW1kWmpVNHd0UWt4Tjh4NS9RL1E1WGhp?= =?gb2312?B?RXFUWklPZHJTa1B0TWwweW1QekNvYnVTcUhBblZIWXRkT2NGWHh5WWJyYXp6?= =?gb2312?B?Njg5NE0xTUJDNzVscHNreHpndzgwVFJyNU1DRG1lK2R5UUFmSGxKVHBhTVlO?= =?gb2312?B?ZU5RWUtnYVhDYzI2emJPVlFwcUt2SkE3L2tSM3ArWFlKU3F3enJWelZJTWlH?= =?gb2312?B?VVZqK2t6QTVkYVZoZXRYYUZwbDBoakhxNGQ3U0dxNXg1YVdteFR0RkFUNXJW?= =?gb2312?B?SkN4b29IQVN4MldxWHQ4dFdnbEZiNmI5RUNDbXQxZkRsdXVxYzlLRitmUXhl?= =?gb2312?B?ZisyaWVQdlVRajY3cnhiYmFQbzFwazU5VHEwN2kxNFE3R2dnbDVuT2hyeHh2?= =?gb2312?B?VmREczlGeElvRFJUOUdkTW9zUU1vakw5SzM5T0VmajB6WVRpUVEyTFAvMXBX?= =?gb2312?B?aWhEQm52c2RDN1VjV04zQmx6UU96dEZFWjVBMllOTmFyZzhyS1NrMkJQRW1h?= =?gb2312?B?S3MvRDdSRXU4QVdiclRheEI1d2hLczNlMlJTalZIczZhQ1JhU2pua0RtUitY?= =?gb2312?B?Z1NsNW51MGYyRUJmZzlMcDljeHRMODRlZ2ZDbE00U3dnenh1eVIyTkVPYkxw?= =?gb2312?B?NHd5V2pIc1FGNVNsMi9oQVBzbGo4RnJSMzNBVlhuUmQrN0JLRW9lZXhGTWc4?= =?gb2312?B?TlZOQmk2Uk5zUkhsNFhXVlZYSHc4VGdpdlovSWc1YXl5M3JBSGZtZ1RVYklM?= =?gb2312?B?QmxJdWJJL1RRY2Q3ejFtRFJPYkdDZDZqVTRyOFZOd21rSm1TTUJyT3c2a0hZ?= =?gb2312?B?SkFtTEVkWVlpZXVtcmp6QWxPcWlwUHdnVTZKZlFwbUJmTFAwUjRHNkdhZXBk?= =?gb2312?B?RDV3VXU3SHBvaEk2dHFUV251MHViOGZiZlRTTFR5TFFsQk5ENjVQR1paS1pT?= =?gb2312?B?KzJnWjdUMlQ4QjZvcXNQdHdVR3piMGY1bzVZSEhaTXRIQ3JwVjFvcXlrR3lt?= =?gb2312?B?Y3JZNlM0RXBHTzIzUnB1OXB3RlVTZHJ4MVdEV3hJY29DbjZ2QnZpYTF0TE5Z?= =?gb2312?B?RGJXb3d0Y0JZRG9ieFR2YzdvblJtT0VOZ0Zlb0hXNS9JeW1TUCtDSnM0MmhI?= =?gb2312?B?STVLWGMzenIrYTRxL3NjVEFKVXVaRlVCa0VDYVVvQ2h0OWl1NkdCNjBFbnhC?= =?gb2312?B?TEVFdGJjTHU3bHAvcVhuUEhsNEpyRVdkM0EzeGMwVGx6MnEyOGwvNVlRaEpW?= =?gb2312?B?eFFMR09jdjJFRWJiaUU0emRmV1RUU1VCYnZWck1SeWg0ZDJZL2hvRjhXTXYr?= =?gb2312?Q?X4O2vqcGrSJj6qHb3C5LW+4=3D?= MIME-Version: 1.0 X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-AuthSource: PH0PR11MB4870.namprd11.prod.outlook.com X-MS-Exchange-CrossTenant-Network-Message-Id: d6691e0f-fd18-40c9-2260-08d9dee36dd3 X-MS-Exchange-CrossTenant-originalarrivaltime: 24 Jan 2022 02:44:22.9570 (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: 62U+k/G4ZpQ6CUTBnqBA5e9DYwDDTe7CDWYDiH3kG+D1cP4nr+Bht9KhEhMgcyL7sHSFWcRpOHoZ0KmZXxUDcA== X-MS-Exchange-Transport-CrossTenantHeadersStamped: BL0PR11MB3060 Return-Path: w.sheng@intel.com X-OriginatorOrg: intel.com Content-Language: en-US Content-Type: text/plain; charset="gb2312" Content-Transfer-Encoding: base64 QXMgdGhlIHJldmlldyBjb21tZW50IGZvcm0gUmF5LCBJIHdpbGwgdXNlIGEgZml4ZWQgTUFYIFZU ZFVuaXQgbnVtYmVyIGluIGZ1bmN0aW9uIFZUZEluZm9Ob3RpZnkoKS4NCkFmdGVyIHRoYXQsIGl0 IHdpbGwgbm8gbmVlZCB0byBhbGxvY2F0ZSBtZW1vcnkgYXQgZXZlcnkgZnVuY3Rpb24gY2FsbCBv ZiBWVGRJbmZvTm90aWZ5KCkuDQpJIHNldCB0aGUgTUFYIFZUZCB1bml0IG51bWJlciB0byA0Mi4g VGhlIHRvdGFsIG1lbW9yeSB1c2FnZSB3aWxsIGp1c3Qgc21hbGxlciB0aGFuIDRrICgxIHBhZ2Up LiBBbmQgdGhpcyBudW1iZXIgaXMgZW5vdWdoIGZvciBjbGllbnQgYW5kIHNlcnZlciBwcm9qZWN0 cy4NCkkgdXBkYXRlIHRvIHBhdGNoIFY2DQpATmksIFJheSBDb3VsZCB5b3UgaGVscCByZXZpZXcg YW5kIG1lcmdlIHRoZSBwYXRjaCA/DQpUaGFuayB5b3UNCkJSDQpTaGVuZyBXZWkNCg0KDQo+IC0t LS0tT3JpZ2luYWwgTWVzc2FnZS0tLS0tDQo+IEZyb206IEh1YW5nLCBKZW5ueSA8amVubnkuaHVh bmdAaW50ZWwuY29tPg0KPiBTZW50OiAyMDIyxOox1MIyMcjVIDE2OjM2DQo+IFRvOiBTaGVuZywg VyA8dy5zaGVuZ0BpbnRlbC5jb20+OyBkZXZlbEBlZGsyLmdyb3Vwcy5pbw0KPiBDYzogTmksIFJh eSA8cmF5Lm5pQGludGVsLmNvbT47IENoYWdhbnR5LCBSYW5nYXNhaSBWDQo+IDxyYW5nYXNhaS52 LmNoYWdhbnR5QGludGVsLmNvbT47IEtvd2FsZXdza2ksIFJvYmVydA0KPiA8cm9iZXJ0Lmtvd2Fs ZXdza2lAaW50ZWwuY29tPg0KPiBTdWJqZWN0OiBSRTogW1BBVENIIHY1IDQvNF0gSW50ZWxTaWxp Y29uUGtnL1ZUZDogT25seSBnZW5lcmF0ZSBQRUkgRE1BDQo+IGJ1ZmZlciBvbmNlLg0KPiANCj4g UmV2aWV3ZWQtYnk6IEplbm55IEh1YW5nIDxqZW5ueS5odWFuZ0BpbnRlbC5jb20+DQo+IA0KPiAt LS0tLU9yaWdpbmFsIE1lc3NhZ2UtLS0tLQ0KPiBGcm9tOiBTaGVuZywgVyA8dy5zaGVuZ0BpbnRl bC5jb20+DQo+IFNlbnQ6IFR1ZXNkYXksIEphbnVhcnkgMTgsIDIwMjIgNDoxNSBQTQ0KPiBUbzog ZGV2ZWxAZWRrMi5ncm91cHMuaW8NCj4gQ2M6IE5pLCBSYXkgPHJheS5uaUBpbnRlbC5jb20+OyBD aGFnYW50eSwgUmFuZ2FzYWkgVg0KPiA8cmFuZ2FzYWkudi5jaGFnYW50eUBpbnRlbC5jb20+OyBI dWFuZywgSmVubnkgPGplbm55Lmh1YW5nQGludGVsLmNvbT47DQo+IEtvd2FsZXdza2ksIFJvYmVy dCA8cm9iZXJ0Lmtvd2FsZXdza2lAaW50ZWwuY29tPg0KPiBTdWJqZWN0OiBbUEFUQ0ggdjUgNC80 XSBJbnRlbFNpbGljb25Qa2cvVlRkOiBPbmx5IGdlbmVyYXRlIFBFSSBETUEgYnVmZmVyDQo+IG9u Y2UuDQo+IA0KPiBWVGRJbmZvTm90aWZ5IG1heSBiZSBjYWxsZWQgbWFuYXkgdGltZXMsIFBFSSBE TUEgYnVmZmVyIHNob3VsZCBiZQ0KPiAgZ2VuZXJhdGVkIG9ubHkgb25jZS4NCj4gDQo+IFJFRjog aHR0cHM6Ly9idWd6aWxsYS50aWFub2NvcmUub3JnL3Nob3dfYnVnLmNnaT9pZD0zNjY3DQo+IA0K PiBDYzogUmF5IE5pIDxyYXkubmlAaW50ZWwuY29tPg0KPiBDYzogUmFuZ2FzYWkgViBDaGFnYW50 eSA8cmFuZ2FzYWkudi5jaGFnYW50eUBpbnRlbC5jb20+DQo+IENjOiBKZW5ueSBIdWFuZyA8amVu bnkuaHVhbmdAaW50ZWwuY29tPg0KPiBDYzogUm9iZXJ0IEtvd2FsZXdza2kgPHJvYmVydC5rb3dh bGV3c2tpQGludGVsLmNvbT4NCj4gUmV2aWV3ZWQtYnk6IEplbm55IEh1YW5nIDxqZW5ueS5odWFu Z0BpbnRlbC5jb20+DQo+IFNpZ25lZC1vZmYtYnk6IFNoZW5nIFdlaSA8dy5zaGVuZ0BpbnRlbC5j b20+DQo+IC0tLQ0KPiAgLi4uL0ZlYXR1cmUvVlRkL0ludGVsVlRkRG1hclBlaS9EbWFyVGFibGUu YyAgICAgICAgfCA1NDUgKy0tLS0tLS0tLS0tLS0tLS0tLS0tDQo+ICAuLi4vRmVhdHVyZS9WVGQv SW50ZWxWVGREbWFyUGVpL0ludGVsVlRkRG1hci5jICAgICB8IDQzMyArKysrKysrLS0tLS0tLS0t DQo+ICAuLi4vRmVhdHVyZS9WVGQvSW50ZWxWVGREbWFyUGVpL0ludGVsVlRkRG1hclBlaS5jICB8 IDQ3NCArKysrKysrKysrLS0tLQ0KPiAtLS0tDQo+ICAuLi4vRmVhdHVyZS9WVGQvSW50ZWxWVGRE bWFyUGVpL0ludGVsVlRkRG1hclBlaS5oICB8IDExOSArKy0tLQ0KPiAgLi4uL0ZlYXR1cmUvVlRk L0ludGVsVlRkRG1hclBlaS9UcmFuc2xhdGlvblRhYmxlLmMgfCAxOTYgKystLS0tLS0NCj4gIDUg ZmlsZXMgY2hhbmdlZCwgNTMzIGluc2VydGlvbnMoKyksIDEyMzQgZGVsZXRpb25zKC0pDQo+IA0K PiBkaWZmIC0tZ2l0DQo+IGEvU2lsaWNvbi9JbnRlbC9JbnRlbFNpbGljb25Qa2cvRmVhdHVyZS9W VGQvSW50ZWxWVGREbWFyUGVpL0RtYXJUYWJsZS5jDQo+IGIvU2lsaWNvbi9JbnRlbC9JbnRlbFNp bGljb25Qa2cvRmVhdHVyZS9WVGQvSW50ZWxWVGREbWFyUGVpL0RtYXJUYWJsZS5jDQo+IGluZGV4 IGU5Yzk5ZDBhLi5hY2ZiYzRhOCAxMDA2NDQNCj4gLS0tDQo+IGEvU2lsaWNvbi9JbnRlbC9JbnRl bFNpbGljb25Qa2cvRmVhdHVyZS9WVGQvSW50ZWxWVGREbWFyUGVpL0RtYXJUYWJsZS5jDQo+ICsr Kw0KPiBiL1NpbGljb24vSW50ZWwvSW50ZWxTaWxpY29uUGtnL0ZlYXR1cmUvVlRkL0ludGVsVlRk RG1hclBlaS9EbWFyVGFibGUuYw0KPiBAQCAtMSw2ICsxLDcgQEANCj4gIC8qKiBAZmlsZQ0KPiAN Cj4gLSAgQ29weXJpZ2h0IChjKSAyMDIwLCBJbnRlbCBDb3Jwb3JhdGlvbi4gQWxsIHJpZ2h0cyBy ZXNlcnZlZC48QlI+DQo+ICsgIENvcHlyaWdodCAoYykgMjAyMCAtIDIwMjEsIEludGVsIENvcnBv cmF0aW9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLjxCUj4NCj4gKw0KPiAgICBTUERYLUxpY2Vuc2Ut SWRlbnRpZmllcjogQlNELTItQ2xhdXNlLVBhdGVudA0KPiANCj4gICoqLw0KPiBAQCAtMTA0LDc0 ICsxMDUsNiBAQCBEdW1wRG1hckRldmljZVNjb3BlRW50cnkgKA0KPiAgICByZXR1cm47DQo+ICB9 DQo+IA0KPiAtLyoqDQo+IC0gIER1bXAgRE1BUiBSTVJSIHRhYmxlLg0KPiAtDQo+IC0gIEBwYXJh bVtpbl0gIFJtcnIgICAgICAgICAgICAgIERNQVIgUk1SUiB0YWJsZQ0KPiAtKiovDQo+IC1WT0lE DQo+IC1EdW1wRG1hclJtcnIgKA0KPiAtICBJTiBFRklfQUNQSV9ETUFSX1JNUlJfSEVBREVSICAq Um1ycg0KPiAtICApDQo+IC17DQo+IC0gIEVGSV9BQ1BJX0RNQVJfREVWSUNFX1NDT1BFX1NUUlVD VFVSRV9IRUFERVINCj4gKkRtYXJEZXZpY2VTY29wZUVudHJ5Ow0KPiAtICBJTlROICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBSbXJyTGVuOw0KPiAtDQo+IC0gIGlm IChSbXJyID09IE5VTEwpIHsNCj4gLSAgICByZXR1cm47DQo+IC0gIH0NCj4gLQ0KPiAtICBERUJV RyAoKERFQlVHX0lORk8sDQo+IC0gICAgIg0KPiAqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQo+ICoqKioqKioqKioqKioqKioqXG4iDQo+ IC0gICAgKSk7DQo+IC0gIERFQlVHICgoREVCVUdfSU5GTywNCj4gLSAgICAiICAqICAgICAgIFJl c2VydmVkIE1lbW9yeSBSZWdpb24gUmVwb3J0aW5nIFN0cnVjdHVyZSAgICAgICAgICAgICAgICAg ICAgICAgICpcbiINCj4gLSAgICApKTsNCj4gLSAgREVCVUcgKChERUJVR19JTkZPLA0KPiAtICAg ICINCj4gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKg0KPiAqKioqKioqKioqKioqKioqKlxuIg0KPiAtICAgICkpOw0KPiAtICBERUJVRyAo KERFQlVHX0lORk8sDQo+IC0gICAgKHNpemVvZiAoVUlOVE4pID09IHNpemVvZiAoVUlOVDY0KSkg Pw0KPiAtICAgICIgIFJNUlIgYWRkcmVzcyAuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4u Li4uLi4uLi4uLi4uIDB4JTAxNmx4XG4iIDoNCj4gLSAgICAiICBSTVJSIGFkZHJlc3MgLi4uLi4u Li4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLiAweCUwOHhcbiIsDQo+IC0gICAg Um1ycg0KPiAtICAgICkpOw0KPiAtICBERUJVRyAoKERFQlVHX0lORk8sDQo+IC0gICAgIiAgICBU eXBlIC4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4gMHgl MDR4XG4iLA0KPiAtICAgIFJtcnItPkhlYWRlci5UeXBlDQo+IC0gICAgKSk7DQo+IC0gIERFQlVH ICgoREVCVUdfSU5GTywNCj4gLSAgICAiICAgIExlbmd0aCAuLi4uLi4uLi4uLi4uLi4uLi4uLi4u Li4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLiAweCUwNHhcbiIsDQo+IC0gICAgUm1yci0+SGVhZGVy Lkxlbmd0aA0KPiAtICAgICkpOw0KPiAtICBERUJVRyAoKERFQlVHX0lORk8sDQo+IC0gICAgIiAg ICBTZWdtZW50IE51bWJlciAuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4g MHglMDR4XG4iLA0KPiAtICAgIFJtcnItPlNlZ21lbnROdW1iZXINCj4gLSAgICApKTsNCj4gLSAg REVCVUcgKChERUJVR19JTkZPLA0KPiAtICAgICIgICAgUmVzZXJ2ZWQgTWVtb3J5IFJlZ2lvbiBC YXNlIEFkZHJlc3MgLi4uLi4uLi4uLi4uLi4uLi4uIDB4JTAxNmx4XG4iLA0KPiAtICAgIFJtcnIt PlJlc2VydmVkTWVtb3J5UmVnaW9uQmFzZUFkZHJlc3MNCj4gLSAgICApKTsNCj4gLSAgREVCVUcg KChERUJVR19JTkZPLA0KPiAtICAgICIgICAgUmVzZXJ2ZWQgTWVtb3J5IFJlZ2lvbiBMaW1pdCBB ZGRyZXNzIC4uLi4uLi4uLi4uLi4uLi4uIDB4JTAxNmx4XG4iLA0KPiAtICAgIFJtcnItPlJlc2Vy dmVkTWVtb3J5UmVnaW9uTGltaXRBZGRyZXNzDQo+IC0gICAgKSk7DQo+IC0NCj4gLSAgUm1yckxl biAgPSBSbXJyLT5IZWFkZXIuTGVuZ3RoIC0NCj4gc2l6ZW9mKEVGSV9BQ1BJX0RNQVJfUk1SUl9I RUFERVIpOw0KPiAtICBEbWFyRGV2aWNlU2NvcGVFbnRyeSA9DQo+IChFRklfQUNQSV9ETUFSX0RF VklDRV9TQ09QRV9TVFJVQ1RVUkVfSEVBREVSICopIChSbXJyICsgMSk7DQo+IC0gIHdoaWxlIChS bXJyTGVuID4gMCkgew0KPiAtICAgIER1bXBEbWFyRGV2aWNlU2NvcGVFbnRyeSAoRG1hckRldmlj ZVNjb3BlRW50cnkpOw0KPiAtICAgIFJtcnJMZW4gLT0gRG1hckRldmljZVNjb3BlRW50cnktPkxl bmd0aDsNCj4gLSAgICBEbWFyRGV2aWNlU2NvcGVFbnRyeSA9DQo+IChFRklfQUNQSV9ETUFSX0RF VklDRV9TQ09QRV9TVFJVQ1RVUkVfSEVBREVSICopICgoVUlOVE4pDQo+IERtYXJEZXZpY2VTY29w ZUVudHJ5ICsgRG1hckRldmljZVNjb3BlRW50cnktPkxlbmd0aCk7DQo+IC0gIH0NCj4gLQ0KPiAt ICBERUJVRyAoKERFQlVHX0lORk8sDQo+IC0gICAgIg0KPiAqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQo+ICoqKioqKioqKioqKioqKioq XG5cbiINCj4gLSAgICApKTsNCj4gLQ0KPiAtICByZXR1cm47DQo+IC19DQo+IC0NCj4gIC8qKg0K PiAgICBEdW1wIERNQVIgRFJIRCB0YWJsZS4NCj4gDQo+IEBAIC0zMTIsOSArMjQ1LDYgQEAgRHVt cEFjcGlETUFSICgNCj4gICAgICBjYXNlIEVGSV9BQ1BJX0RNQVJfVFlQRV9EUkhEOg0KPiAgICAg ICAgRHVtcERtYXJEcmhkICgoRUZJX0FDUElfRE1BUl9EUkhEX0hFQURFUiAqKSBEbWFySGVhZGVy KTsNCj4gICAgICAgIGJyZWFrOw0KPiAtICAgIGNhc2UgRUZJX0FDUElfRE1BUl9UWVBFX1JNUlI6 DQo+IC0gICAgICBEdW1wRG1hclJtcnIgKChFRklfQUNQSV9ETUFSX1JNUlJfSEVBREVSICopIERt YXJIZWFkZXIpOw0KPiAtICAgICAgYnJlYWs7DQo+ICAgICAgZGVmYXVsdDoNCj4gICAgICAgIGJy ZWFrOw0KPiAgICAgIH0NCj4gQEAgLTMyOSw0OTIgKzI1OSw0MyBAQCBEdW1wQWNwaURNQVIgKA0K PiAgICByZXR1cm47DQo+ICB9DQo+IA0KPiAtLyoqDQo+IC0gIEdldCBWVGQgZW5naW5lIG51bWJl ci4NCj4gLQ0KPiAtICBAcGFyYW1baW5dICBBY3BpRG1hclRhYmxlICAgICBETUFSIEFDUEkgdGFi bGUNCj4gLQ0KPiAtICBAcmV0dXJuIHRoZSBWVGQgZW5naW5lIG51bWJlci4NCj4gLSoqLw0KPiAt VUlOVE4NCj4gLUdldFZ0ZEVuZ2luZU51bWJlciAoDQo+IC0gIElOIEVGSV9BQ1BJX0RNQVJfSEVB REVSICAgICAgICpBY3BpRG1hclRhYmxlDQo+IC0gICkNCj4gLXsNCj4gLSAgRUZJX0FDUElfRE1B Ul9TVFJVQ1RVUkVfSEVBREVSICAgICAgICAqRG1hckhlYWRlcjsNCj4gLSAgVUlOVE4gICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBWdGRJbmRleDsNCj4gLQ0KPiAtICBWdGRJbmRleCA9 IDA7DQo+IC0gIERtYXJIZWFkZXIgPSAoRUZJX0FDUElfRE1BUl9TVFJVQ1RVUkVfSEVBREVSICop ICgoVUlOVE4pDQo+IChBY3BpRG1hclRhYmxlICsgMSkpOw0KPiAtICB3aGlsZSAoKFVJTlROKSBE bWFySGVhZGVyIDwgKFVJTlROKSBBY3BpRG1hclRhYmxlICsgQWNwaURtYXJUYWJsZS0NCj4gPkhl YWRlci5MZW5ndGgpIHsNCj4gLSAgICBzd2l0Y2ggKERtYXJIZWFkZXItPlR5cGUpIHsNCj4gLSAg ICBjYXNlIEVGSV9BQ1BJX0RNQVJfVFlQRV9EUkhEOg0KPiAtICAgICAgVnRkSW5kZXgrKzsNCj4g LSAgICAgIGJyZWFrOw0KPiAtICAgIGRlZmF1bHQ6DQo+IC0gICAgICBicmVhazsNCj4gLSAgICB9 DQo+IC0gICAgRG1hckhlYWRlciA9IChFRklfQUNQSV9ETUFSX1NUUlVDVFVSRV9IRUFERVIgKikg KChVSU5UTikNCj4gRG1hckhlYWRlciArIERtYXJIZWFkZXItPkxlbmd0aCk7DQo+IC0gIH0NCj4g LSAgcmV0dXJuIFZ0ZEluZGV4IDsNCj4gLX0NCj4gLQ0KPiAtLyoqDQo+IC0gIEdldCBQQ0kgZGV2 aWNlIGluZm9ybWF0aW9uIGZyb20gRE1BUiBEZXZTY29wZUVudHJ5Lg0KPiAtDQo+IC0gIEBwYXJh bVtpbl0gIFNlZ21lbnQgICAgICAgICAgIFRoZSBzZWdtZW50IG51bWJlci4NCj4gLSAgQHBhcmFt W2luXSAgRG1hckRldlNjb3BlRW50cnkgRE1BUiBEZXZTY29wZUVudHJ5DQo+IC0gIEBwYXJhbVtv dXRdIEJ1cyAgICAgICAgICAgICAgIFRoZSBidXMgbnVtYmVyLg0KPiAtICBAcGFyYW1bb3V0XSBE ZXZpY2UgICAgICAgICAgICBUaGUgZGV2aWNlIG51bWJlci4NCj4gLSAgQHBhcmFtW291dF0gRnVu Y3Rpb24gICAgICAgICAgVGhlIGZ1bmN0aW9uIG51bWJlci4NCj4gLQ0KPiAtICBAcmV0dmFsIEVG SV9TVUNDRVNTICBUaGUgUENJIGRldmljZSBpbmZvcm1hdGlvbiBpcyByZXR1cm5lZC4NCj4gLSoq Lw0KPiAtRUZJX1NUQVRVUw0KPiAtR2V0UGNpQnVzRGV2aWNlRnVuY3Rpb24gKA0KPiAtICBJTiAg VUlOVDE2ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTZWdtZW50LA0KPiAt ICBJTiAgRUZJX0FDUElfRE1BUl9ERVZJQ0VfU0NPUEVfU1RSVUNUVVJFX0hFQURFUg0KPiAqRG1h ckRldlNjb3BlRW50cnksDQo+IC0gIE9VVCBVSU5UOCAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICpCdXMsDQo+IC0gIE9VVCBVSU5UOCAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICpEZXZpY2UsDQo+IC0gIE9VVCBVSU5UOCAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICpGdW5jdGlvbg0KPiAtICApDQo+IC17DQo+IC0gIEVGSV9B Q1BJX0RNQVJfUENJX1BBVEggICAgICAgICAgICAgICAgICAgICAgICAgICpEbWFyUGNpUGF0aDsN Cj4gLSAgVUlOVDggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTXlC dXM7DQo+IC0gIFVJTlQ4ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IE15RGV2aWNlOw0KPiAtICBVSU5UOCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBNeUZ1bmN0aW9uOw0KPiAtDQo+IC0gIERtYXJQY2lQYXRoID0gKEVGSV9BQ1BJX0RN QVJfUENJX1BBVEggKikgKChVSU5UTikNCj4gKERtYXJEZXZTY29wZUVudHJ5ICsgMSkpOw0KPiAt ICBNeUJ1cyA9IERtYXJEZXZTY29wZUVudHJ5LT5TdGFydEJ1c051bWJlcjsNCj4gLSAgTXlEZXZp Y2UgPSBEbWFyUGNpUGF0aC0+RGV2aWNlOw0KPiAtICBNeUZ1bmN0aW9uID0gRG1hclBjaVBhdGgt PkZ1bmN0aW9uOw0KPiAtDQo+IC0gIHN3aXRjaCAoRG1hckRldlNjb3BlRW50cnktPlR5cGUpIHsN Cj4gLSAgY2FzZSBFRklfQUNQSV9ERVZJQ0VfU0NPUEVfRU5UUllfVFlQRV9QQ0lfRU5EUE9JTlQ6 DQo+IC0gIGNhc2UgRUZJX0FDUElfREVWSUNFX1NDT1BFX0VOVFJZX1RZUEVfUENJX0JSSURHRToN Cj4gLSAgICB3aGlsZSAoKFVJTlROKSBEbWFyUGNpUGF0aCArIHNpemVvZiAoRUZJX0FDUElfRE1B Ul9QQ0lfUEFUSCkgPA0KPiAoVUlOVE4pIERtYXJEZXZTY29wZUVudHJ5ICsgRG1hckRldlNjb3Bl RW50cnktPkxlbmd0aCkgew0KPiAtICAgICAgTXlCdXMgPSBQY2lTZWdtZW50UmVhZDggKFBDSV9T RUdNRU5UX0xJQl9BRERSRVNTIChTZWdtZW50LA0KPiBNeUJ1cywgTXlEZXZpY2UsIE15RnVuY3Rp b24sDQo+IFBDSV9CUklER0VfU0VDT05EQVJZX0JVU19SRUdJU1RFUl9PRkZTRVQpKTsNCj4gLSAg ICAgIERtYXJQY2lQYXRoICsrOw0KPiAtICAgICAgTXlEZXZpY2UgPSBEbWFyUGNpUGF0aC0+RGV2 aWNlOw0KPiAtICAgICAgTXlGdW5jdGlvbiA9IERtYXJQY2lQYXRoLT5GdW5jdGlvbjsNCj4gLSAg ICB9DQo+IC0gICAgYnJlYWs7DQo+IC0gIGNhc2UgRUZJX0FDUElfREVWSUNFX1NDT1BFX0VOVFJZ X1RZUEVfSU9BUElDOg0KPiAtICBjYXNlIEVGSV9BQ1BJX0RFVklDRV9TQ09QRV9FTlRSWV9UWVBF X01TSV9DQVBBQkxFX0hQRVQ6DQo+IC0gIGNhc2UgRUZJX0FDUElfREVWSUNFX1NDT1BFX0VOVFJZ X1RZUEVfQUNQSV9OQU1FU1BBQ0VfREVWSUNFOg0KPiAtICAgIGJyZWFrOw0KPiAtICB9DQo+IC0N Cj4gLSAgKkJ1cyA9IE15QnVzOw0KPiAtICAqRGV2aWNlID0gTXlEZXZpY2U7DQo+IC0gICpGdW5j dGlvbiA9IE15RnVuY3Rpb247DQo+IC0NCj4gLSAgcmV0dXJuIEVGSV9TVUNDRVNTOw0KPiAtfQ0K PiAtDQo+IC0vKioNCj4gLSAgUmV0dXJuIHRoZSBpbmRleCBvZiBQQ0kgZGF0YS4NCj4gLQ0KPiAt ICBAcGFyYW1baW5dICBWVGRVbml0SW5mbyAgICAgICBUaGUgVlRkIGVuZ2luZSB1bml0IGluZm9y bWF0aW9uLg0KPiAtICBAcGFyYW1baW5dICBTZWdtZW50ICAgICAgICAgICBUaGUgU2VnbWVudCB1 c2VkIHRvIGlkZW50aWZ5IGEgVlRkIGVuZ2luZS4NCj4gLSAgQHBhcmFtW2luXSAgU291cmNlSWQg ICAgICAgICAgVGhlIFNvdXJjZUlkIHVzZWQgdG8gaWRlbnRpZnkgYSBWVGQgZW5naW5lIGFuZA0K PiB0YWJsZSBlbnRyeS4NCj4gLQ0KPiAtICBAcmV0dXJuIFRoZSBpbmRleCBvZiB0aGUgUENJIGRh dGEuDQo+IC0gIEByZXR2YWwgKFVJTlROKS0xICBUaGUgUENJIGRhdGEgaXMgbm90IGZvdW5kLg0K PiAtKiovDQo+IC1VSU5UTg0KPiAtR2V0UGNpRGF0YUluZGV4ICgNCj4gLSAgSU4gVlREX1VOSVRf SU5GTyAgICAgICAgICAgICAgKlZUZFVuaXRJbmZvLA0KPiAtICBJTiBVSU5UMTYgICAgICAgICAg ICAgICAgICAgICBTZWdtZW50LA0KPiAtICBJTiBWVERfU09VUkNFX0lEICAgICAgICAgICAgICBT b3VyY2VJZA0KPiAtICApDQo+IC17DQo+IC0gIFVJTlROICAgICAgICAgICAgICAgICAgICAgICAg IEluZGV4Ow0KPiAtICBWVERfU09VUkNFX0lEICAgICAgICAgICAgICAgICAqUGNpU291cmNlSWQ7 DQo+IC0gIFBFSV9QQ0lfREVWSUNFX0RBVEEgICAgICAgICAgICpQY2lEZXZpY2VEYXRhQmFzZTsN Cj4gLQ0KPiAtICBpZiAoU2VnbWVudCAhPSBWVGRVbml0SW5mby0+U2VnbWVudCkgew0KPiAtICAg IHJldHVybiAoVUlOVE4pLTE7DQo+IC0gIH0NCj4gLQ0KPiAtICBmb3IgKEluZGV4ID0gMDsgSW5k ZXggPCBWVGRVbml0SW5mby0+UGNpRGV2aWNlSW5mby5QY2lEZXZpY2VEYXRhTnVtYmVyOw0KPiBJ bmRleCsrKSB7DQo+IC0gICAgUGNpRGV2aWNlRGF0YUJhc2UgPSAoUEVJX1BDSV9ERVZJQ0VfREFU QSopIChVSU5UTikgVlRkVW5pdEluZm8tDQo+ID5QY2lEZXZpY2VJbmZvLlBjaURldmljZURhdGE7 DQo+IC0gICAgUGNpU291cmNlSWQgPSAmUGNpRGV2aWNlRGF0YUJhc2VbSW5kZXhdLlBjaVNvdXJj ZUlkOw0KPiAtICAgIGlmICgoUGNpU291cmNlSWQtPkJpdHMuQnVzID09IFNvdXJjZUlkLkJpdHMu QnVzKSAmJg0KPiAtICAgICAgICAoUGNpU291cmNlSWQtPkJpdHMuRGV2aWNlID09IFNvdXJjZUlk LkJpdHMuRGV2aWNlKSAmJg0KPiAtICAgICAgICAoUGNpU291cmNlSWQtPkJpdHMuRnVuY3Rpb24g PT0gU291cmNlSWQuQml0cy5GdW5jdGlvbikgKSB7DQo+IC0gICAgICByZXR1cm4gSW5kZXg7DQo+ IC0gICAgfQ0KPiAtICB9DQo+IC0NCj4gLSAgcmV0dXJuIChVSU5UTiktMTsNCj4gLX0NCj4gLQ0K PiAtDQo+IC0vKioNCj4gLSAgUmVnaXN0ZXIgUENJIGRldmljZSB0byBWVGQgZW5naW5lLg0KPiAt DQo+IC0gIEBwYXJhbVtpbl0gIFZUZFVuaXRJbmZvICAgICAgIFRoZSBWVGQgZW5naW5lIHVuaXQg aW5mb3JtYXRpb24uDQo+IC0gIEBwYXJhbVtpbl0gIFNlZ21lbnQgICAgICAgICAgIFRoZSBzZWdt ZW50IG9mIHRoZSBzb3VyY2UuDQo+IC0gIEBwYXJhbVtpbl0gIFNvdXJjZUlkICAgICAgICAgIFRo ZSBTb3VyY2VJZCBvZiB0aGUgc291cmNlLg0KPiAtICBAcGFyYW1baW5dICBEZXZpY2VUeXBlICAg ICAgICBUaGUgRE1BUiBkZXZpY2Ugc2NvcGUgdHlwZS4NCj4gLSAgQHBhcmFtW2luXSAgQ2hlY2tF eGlzdCAgICAgICAgVFJVRTogRVJST1Igd2lsbCBiZSByZXR1cm5lZCBpZiB0aGUgUENJIGRldmlj ZQ0KPiBpcyBhbHJlYWR5IHJlZ2lzdGVyZWQuDQo+IC0gICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIEZBTFNFOiBTVUNDRVNTIHdpbGwgYmUgcmV0dXJuZWQgaWYgdGhlIFBDSSBkZXZpY2Ug aXMNCj4gcmVnaXN0ZXJlZC4NCj4gLQ0KPiAtICBAcmV0dmFsIEVGSV9TVUNDRVNTICAgICAgICAg ICBUaGUgUENJIGRldmljZSBpcyByZWdpc3RlcmVkLg0KPiAtICBAcmV0dmFsIEVGSV9PVVRfT0Zf UkVTT1VSQ0VTICBObyBlbm91Z2ggcmVzb3VyY2UgdG8gcmVnaXN0ZXIgYSBuZXcNCj4gUENJIGRl dmljZS4NCj4gLSAgQHJldHZhbCBFRklfQUxSRUFEWV9TVEFSVEVEICAgVGhlIGRldmljZSBpcyBh bHJlYWR5IHJlZ2lzdGVyZWQuDQo+IC0NCj4gLSoqLw0KPiAtRUZJX1NUQVRVUw0KPiAtUmVnaXN0 ZXJQY2lEZXZpY2UgKA0KPiAtICBJTiBWVERfVU5JVF9JTkZPICAgICAgICAgICAgICAqVlRkVW5p dEluZm8sDQo+IC0gIElOIFVJTlQxNiAgICAgICAgICAgICAgICAgICAgIFNlZ21lbnQsDQo+IC0g IElOIFZURF9TT1VSQ0VfSUQgICAgICAgICAgICAgIFNvdXJjZUlkLA0KPiAtICBJTiBVSU5UOCAg ICAgICAgICAgICAgICAgICAgICBEZXZpY2VUeXBlLA0KPiAtICBJTiBCT09MRUFOICAgICAgICAg ICAgICAgICAgICBDaGVja0V4aXN0DQo+IC0gICkNCj4gLXsNCj4gLSAgUEVJX1BDSV9ERVZJQ0Vf SU5GT1JNQVRJT04gICAgKlBjaURldmljZUluZm87DQo+IC0gIFZURF9TT1VSQ0VfSUQgICAgICAg ICAgICAgICAgICpQY2lTb3VyY2VJZDsNCj4gLSAgVUlOVE4gICAgICAgICAgICAgICAgICAgICAg ICAgUGNpRGF0YUluZGV4Ow0KPiAtICBVSU5UTiAgICAgICAgICAgICAgICAgICAgICAgICBQY2lE ZXZpY2VEYXRhU2l6ZTsNCj4gLSAgUEVJX1BDSV9ERVZJQ0VfREFUQSAgICAgICAgICAgKk5ld1Bj aURldmljZURhdGE7DQo+IC0gIFBFSV9QQ0lfREVWSUNFX0RBVEEgICAgICAgICAgICpQY2lEZXZp Y2VEYXRhQmFzZTsNCj4gLQ0KPiAtICBQY2lEZXZpY2VJbmZvID0gJlZUZFVuaXRJbmZvLT5QY2lE ZXZpY2VJbmZvOw0KPiAtDQo+IC0gIFBjaURhdGFJbmRleCA9IEdldFBjaURhdGFJbmRleCAoVlRk VW5pdEluZm8sIFNlZ21lbnQsIFNvdXJjZUlkKTsNCj4gLSAgaWYgKFBjaURhdGFJbmRleCA9PSAo VUlOVE4pLTEpIHsNCj4gLSAgICAvLw0KPiAtICAgIC8vIFJlZ2lzdGVyIG5ldw0KPiAtICAgIC8v DQo+IC0NCj4gLSAgICBpZiAoUGNpRGV2aWNlSW5mby0+UGNpRGV2aWNlRGF0YU51bWJlciA+PSBQ Y2lEZXZpY2VJbmZvLQ0KPiA+UGNpRGV2aWNlRGF0YU1heE51bWJlcikgew0KPiAtICAgICAgLy8N Cj4gLSAgICAgIC8vIFJlYWxsb2NhdGUNCj4gLSAgICAgIC8vDQo+IC0gICAgICBQY2lEZXZpY2VE YXRhU2l6ZSA9IHNpemVvZigqTmV3UGNpRGV2aWNlRGF0YSkgKiAoUGNpRGV2aWNlSW5mby0NCj4g PlBjaURldmljZURhdGFNYXhOdW1iZXIgKyBNQVhfVlREX1BDSV9EQVRBX05VTUJFUik7DQo+IC0g ICAgICBERUJVRyAoKERFQlVHX0lORk8sICJOZXcgUGNpRGV2aWNlRGF0YVNpemU6JWQgUGFnZTol ZFxuIiwNCj4gUGNpRGV2aWNlRGF0YVNpemUsIEVGSV9TSVpFX1RPX1BBR0VTIChQY2lEZXZpY2VE YXRhU2l6ZSkpKTsNCj4gLSAgICAgIE5ld1BjaURldmljZURhdGEgPSBBbGxvY2F0ZVplcm9QYWdl cw0KPiAoRUZJX1NJWkVfVE9fUEFHRVMoUGNpRGV2aWNlRGF0YVNpemUpKTsNCj4gLSAgICAgIGlm IChOZXdQY2lEZXZpY2VEYXRhID09IE5VTEwpIHsNCj4gLSAgICAgICAgcmV0dXJuIEVGSV9PVVRf T0ZfUkVTT1VSQ0VTOw0KPiAtICAgICAgfQ0KPiAtICAgICAgUGNpRGV2aWNlSW5mby0+UGNpRGV2 aWNlRGF0YU1heE51bWJlciArPQ0KPiBNQVhfVlREX1BDSV9EQVRBX05VTUJFUjsNCj4gLSAgICAg IGlmIChQY2lEZXZpY2VJbmZvLT5QY2lEZXZpY2VEYXRhICE9IDApIHsNCj4gLSAgICAgICAgQ29w eU1lbSAoTmV3UGNpRGV2aWNlRGF0YSwgKFZPSUQgKikgKFVJTlROKSBQY2lEZXZpY2VJbmZvLQ0K PiA+UGNpRGV2aWNlRGF0YSwgc2l6ZW9mICgqTmV3UGNpRGV2aWNlRGF0YSkgKiBQY2lEZXZpY2VJ bmZvLQ0KPiA+UGNpRGV2aWNlRGF0YU51bWJlcik7DQo+IC0gICAgICAgIEZyZWVQYWdlcygoVk9J RCAqKSAoVUlOVE4pIFBjaURldmljZUluZm8tPlBjaURldmljZURhdGEsDQo+IFBjaURldmljZUlu Zm8tPlBjaURldmljZURhdGFQYWdlU2l6ZSk7DQo+IC0gICAgICB9DQo+IC0gICAgICBQY2lEZXZp Y2VJbmZvLT5QY2lEZXZpY2VEYXRhID0gKFVJTlQzMikgKFVJTlROKSBOZXdQY2lEZXZpY2VEYXRh Ow0KPiAtICAgICAgUGNpRGV2aWNlSW5mby0+UGNpRGV2aWNlRGF0YVBhZ2VTaXplID0gKFVJTlQz MikgRUZJX1NJWkVfVE9fUEFHRVMNCj4gKFBjaURldmljZURhdGFTaXplKTsNCj4gLSAgICB9DQo+ IC0NCj4gLSAgICBBU1NFUlQgKFBjaURldmljZUluZm8tPlBjaURldmljZURhdGFOdW1iZXIgPCBQ Y2lEZXZpY2VJbmZvLQ0KPiA+UGNpRGV2aWNlRGF0YU1heE51bWJlcik7DQo+IC0NCj4gLSAgICBQ Y2lEZXZpY2VEYXRhQmFzZSA9IChQRUlfUENJX0RFVklDRV9EQVRBICopIChVSU5UTikgUGNpRGV2 aWNlSW5mby0NCj4gPlBjaURldmljZURhdGE7DQo+IC0gICAgUGNpU291cmNlSWQgPSAmUGNpRGV2 aWNlRGF0YUJhc2VbUGNpRGV2aWNlSW5mby0NCj4gPlBjaURldmljZURhdGFOdW1iZXJdLlBjaVNv dXJjZUlkOw0KPiAtICAgIFBjaVNvdXJjZUlkLT5CaXRzLkJ1cyA9IFNvdXJjZUlkLkJpdHMuQnVz Ow0KPiAtICAgIFBjaVNvdXJjZUlkLT5CaXRzLkRldmljZSA9IFNvdXJjZUlkLkJpdHMuRGV2aWNl Ow0KPiAtICAgIFBjaVNvdXJjZUlkLT5CaXRzLkZ1bmN0aW9uID0gU291cmNlSWQuQml0cy5GdW5j dGlvbjsNCj4gLQ0KPiAtICAgIERFQlVHICgoREVCVUdfSU5GTywgIiAgUmVnaXN0ZXJQY2lEZXZp Y2U6IFBDSSBTJTA0eCBCJTAyeCBEJTAyeA0KPiBGJTAyeCIsIFNlZ21lbnQsIFNvdXJjZUlkLkJp dHMuQnVzLCBTb3VyY2VJZC5CaXRzLkRldmljZSwNCj4gU291cmNlSWQuQml0cy5GdW5jdGlvbikp Ow0KPiAtDQo+IC0gICAgUGNpRGV2aWNlRGF0YUJhc2VbUGNpRGV2aWNlSW5mby0+UGNpRGV2aWNl RGF0YU51bWJlcl0uRGV2aWNlVHlwZSA9DQo+IERldmljZVR5cGU7DQo+IC0NCj4gLSAgICBpZiAo KERldmljZVR5cGUgIT0gRUZJX0FDUElfREVWSUNFX1NDT1BFX0VOVFJZX1RZUEVfUENJX0VORFBP SU5UKQ0KPiAmJg0KPiAtICAgICAgICAoRGV2aWNlVHlwZSAhPSBFRklfQUNQSV9ERVZJQ0VfU0NP UEVfRU5UUllfVFlQRV9QQ0lfQlJJREdFKSkgew0KPiAtICAgICAgREVCVUcgKChERUJVR19JTkZP LCAiICgqKSIpKTsNCj4gLSAgICB9DQo+IC0gICAgREVCVUcgKChERUJVR19JTkZPLCAiXG4iKSk7 DQo+IC0NCj4gLSAgICBQY2lEZXZpY2VJbmZvLT5QY2lEZXZpY2VEYXRhTnVtYmVyKys7DQo+IC0g IH0gZWxzZSB7DQo+IC0gICAgaWYgKENoZWNrRXhpc3QpIHsNCj4gLSAgICAgIERFQlVHICgoREVC VUdfSU5GTywgIiAgUmVnaXN0ZXJQY2lEZXZpY2U6IFBDSSBTJTA0eCBCJTAyeCBEJTAyeA0KPiBG JTAyeCBhbHJlYWR5IHJlZ2lzdGVyZWRcbiIsIFNlZ21lbnQsIFNvdXJjZUlkLkJpdHMuQnVzLA0K PiBTb3VyY2VJZC5CaXRzLkRldmljZSwgU291cmNlSWQuQml0cy5GdW5jdGlvbikpOw0KPiAtICAg ICAgcmV0dXJuIEVGSV9BTFJFQURZX1NUQVJURUQ7DQo+IC0gICAgfQ0KPiAtICB9DQo+IC0NCj4g LSAgcmV0dXJuIEVGSV9TVUNDRVNTOw0KPiAtfQ0KPiAtDQo+IC0vKioNCj4gLSAgUHJvY2VzcyBE TUFSIERSSEQgdGFibGUuDQo+IC0NCj4gLSAgQHBhcmFtW2luXSAgVlRkVW5pdEluZm8gICAgICAg VGhlIFZUZCBlbmdpbmUgdW5pdCBpbmZvcm1hdGlvbi4NCj4gLSAgQHBhcmFtW2luXSAgRG1hckRy aGQgICAgICAgICAgVGhlIERSSEQgdGFibGUuDQo+IC0NCj4gLSoqLw0KPiAtVk9JRA0KPiAtUHJv Y2Vzc0RyaGQgKA0KPiAtICBJTiBWVERfVU5JVF9JTkZPICAgICAgICAgICAgICAqVlRkVW5pdElu Zm8sDQo+IC0gIElOIEVGSV9BQ1BJX0RNQVJfRFJIRF9IRUFERVIgICpEbWFyRHJoZA0KPiAtICAp DQo+IC17DQo+IC0gIEVGSV9BQ1BJX0RNQVJfREVWSUNFX1NDT1BFX1NUUlVDVFVSRV9IRUFERVIN Cj4gKkRtYXJEZXZTY29wZUVudHJ5Ow0KPiAtICBVSU5UOCAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBCdXM7DQo+IC0gIFVJTlQ4ICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIERldmljZTsNCj4gLSAgVUlOVDggICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgRnVuY3Rpb247DQo+IC0gIEVGSV9TVEFUVVMgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFN0YXR1czsNCj4gLSAgVlREX1NPVVJD RV9JRCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU291cmNlSWQ7DQo+IC0NCj4g LSAgREVCVUcgKChERUJVR19JTkZPLCIgIFZURCBCYXNlQWRkcmVzcyAtICAweCUwMTZseFxuIiwg RG1hckRyaGQtDQo+ID5SZWdpc3RlckJhc2VBZGRyZXNzKSk7DQo+IC0gIFZUZFVuaXRJbmZvLT5W dGRVbml0QmFzZUFkZHJlc3MgPSAoVUlOVDMyKSBEbWFyRHJoZC0NCj4gPlJlZ2lzdGVyQmFzZUFk ZHJlc3M7DQo+IC0NCj4gLSAgVlRkVW5pdEluZm8tPkVuYWJsZVF1ZXVlZEludmFsaWRhdGlvbiA9 IDA7DQo+IC0NCj4gLSAgREVCVUcgKChERUJVR19JTkZPLCIgIFZURCBTZWdtZW50IC0gJWRcbiIs IERtYXJEcmhkLQ0KPiA+U2VnbWVudE51bWJlcikpOw0KPiAtICBWVGRVbml0SW5mby0+U2VnbWVu dCA9IERtYXJEcmhkLT5TZWdtZW50TnVtYmVyOw0KPiAtDQo+IC0gIFZUZFVuaXRJbmZvLT5GaXhl ZFNlY29uZExldmVsUGFnaW5nRW50cnkgPSAwOw0KPiAtICBWVGRVbml0SW5mby0+Um1yclNlY29u ZExldmVsUGFnaW5nRW50cnkgPSAwOw0KPiAtICBWVGRVbml0SW5mby0+Um9vdEVudHJ5VGFibGUg PSAwOw0KPiAtICBWVGRVbml0SW5mby0+RXh0Um9vdEVudHJ5VGFibGUgPSAwOw0KPiAtICBWVGRV bml0SW5mby0+Um9vdEVudHJ5VGFibGVQYWdlU2l6ZSA9IDA7DQo+IC0gIFZUZFVuaXRJbmZvLT5F eHRSb290RW50cnlUYWJsZVBhZ2VTaXplID0gMDsNCj4gLQ0KPiAtICBWVGRVbml0SW5mby0+UGNp RGV2aWNlSW5mby5JbmNsdWRlQWxsRmxhZyA9IDA7DQo+IC0gIFZUZFVuaXRJbmZvLT5QY2lEZXZp Y2VJbmZvLlBjaURldmljZURhdGFNYXhOdW1iZXIgPSAwOw0KPiAtICBWVGRVbml0SW5mby0+UGNp RGV2aWNlSW5mby5QY2lEZXZpY2VEYXRhTnVtYmVyID0gMDsNCj4gLSAgVlRkVW5pdEluZm8tPlBj aURldmljZUluZm8uUGNpRGV2aWNlRGF0YVBhZ2VTaXplID0gMDsNCj4gLSAgVlRkVW5pdEluZm8t PlBjaURldmljZUluZm8uUGNpRGV2aWNlRGF0YSA9IDA7DQo+IC0NCj4gLSAgaWYgKChEbWFyRHJo ZC0+RmxhZ3MgJg0KPiBFRklfQUNQSV9ETUFSX0RSSERfRkxBR1NfSU5DTFVERV9QQ0lfQUxMKSAh PSAwKSB7DQo+IC0gICAgVlRkVW5pdEluZm8tPlBjaURldmljZUluZm8uSW5jbHVkZUFsbEZsYWcg PSBUUlVFOw0KPiAtICAgIERFQlVHICgoREVCVUdfSU5GTywiICBQcm9jZXNzRHJoZDogd2l0aCBJ TkNMVURFIEFMTFxuIikpOw0KPiAtICB9IGVsc2Ugew0KPiAtICAgIFZUZFVuaXRJbmZvLT5QY2lE ZXZpY2VJbmZvLkluY2x1ZGVBbGxGbGFnID0gRkFMU0U7DQo+IC0gICAgREVCVUcgKChERUJVR19J TkZPLCIgIFByb2Nlc3NEcmhkOiB3aXRob3V0IElOQ0xVREUgQUxMXG4iKSk7DQo+IC0gIH0NCj4g LQ0KPiAtICBWVGRVbml0SW5mby0+UGNpRGV2aWNlSW5mby5QY2lEZXZpY2VEYXRhTnVtYmVyID0g MDsNCj4gLSAgVlRkVW5pdEluZm8tPlBjaURldmljZUluZm8uUGNpRGV2aWNlRGF0YU1heE51bWJl ciA9IDA7DQo+IC0gIFZUZFVuaXRJbmZvLT5QY2lEZXZpY2VJbmZvLlBjaURldmljZURhdGFQYWdl U2l6ZSA9IDA7DQo+IC0gIFZUZFVuaXRJbmZvLT5QY2lEZXZpY2VJbmZvLlBjaURldmljZURhdGEg PSAwOw0KPiAtDQo+IC0gIERtYXJEZXZTY29wZUVudHJ5ID0NCj4gKEVGSV9BQ1BJX0RNQVJfREVW SUNFX1NDT1BFX1NUUlVDVFVSRV9IRUFERVIgKikgKChVSU5UTikNCj4gKERtYXJEcmhkICsgMSkp Ow0KPiAtICB3aGlsZSAoKFVJTlROKURtYXJEZXZTY29wZUVudHJ5IDwgKFVJTlROKSBEbWFyRHJo ZCArIERtYXJEcmhkLQ0KPiA+SGVhZGVyLkxlbmd0aCkgew0KPiAtDQo+IC0gICAgU3RhdHVzID0g R2V0UGNpQnVzRGV2aWNlRnVuY3Rpb24gKERtYXJEcmhkLT5TZWdtZW50TnVtYmVyLA0KPiBEbWFy RGV2U2NvcGVFbnRyeSwgJkJ1cywgJkRldmljZSwgJkZ1bmN0aW9uKTsNCj4gLSAgICBpZiAoRUZJ X0VSUk9SIChTdGF0dXMpKSB7DQo+IC0gICAgICByZXR1cm47DQo+IC0gICAgfQ0KPiAtDQo+IC0g ICAgREVCVUcgKChERUJVR19JTkZPLCIgIFByb2Nlc3NEcmhkOiAiKSk7DQo+IC0gICAgc3dpdGNo IChEbWFyRGV2U2NvcGVFbnRyeS0+VHlwZSkgew0KPiAtICAgICAgY2FzZSBFRklfQUNQSV9ERVZJ Q0VfU0NPUEVfRU5UUllfVFlQRV9QQ0lfRU5EUE9JTlQ6DQo+IC0gICAgICBERUJVRyAoKERFQlVH X0lORk8sIlBDSSBFbmRwb2ludCIpKTsNCj4gLSAgICAgIGJyZWFrOw0KPiAtICAgIGNhc2UgRUZJ X0FDUElfREVWSUNFX1NDT1BFX0VOVFJZX1RZUEVfUENJX0JSSURHRToNCj4gLSAgICAgIERFQlVH ICgoREVCVUdfSU5GTywiUENJLVBDSSBicmlkZ2UiKSk7DQo+IC0gICAgICBicmVhazsNCj4gLSAg ICBjYXNlIEVGSV9BQ1BJX0RFVklDRV9TQ09QRV9FTlRSWV9UWVBFX0lPQVBJQzoNCj4gLSAgICAg IERFQlVHICgoREVCVUdfSU5GTywiSU9BUElDIikpOw0KPiAtICAgICAgYnJlYWs7DQo+IC0gICAg Y2FzZSBFRklfQUNQSV9ERVZJQ0VfU0NPUEVfRU5UUllfVFlQRV9NU0lfQ0FQQUJMRV9IUEVUOg0K PiAtICAgICAgREVCVUcgKChERUJVR19JTkZPLCJNU0kgQ2FwYWJsZSBIUEVUIikpOw0KPiAtICAg ICAgYnJlYWs7DQo+IC0gICAgY2FzZSBFRklfQUNQSV9ERVZJQ0VfU0NPUEVfRU5UUllfVFlQRV9B Q1BJX05BTUVTUEFDRV9ERVZJQ0U6DQo+IC0gICAgICBERUJVRyAoKERFQlVHX0lORk8sIkFDUEkg TmFtZXNwYWNlIERldmljZSIpKTsNCj4gLSAgICAgIGJyZWFrOw0KPiAtICAgIH0NCj4gLSAgICBE RUJVRyAoKERFQlVHX0lORk8sIiBTJTA0eCBCJTAyeCBEJTAyeCBGJTAyeFxuIiwgRG1hckRyaGQt DQo+ID5TZWdtZW50TnVtYmVyLCBCdXMsIERldmljZSwgRnVuY3Rpb24pKTsNCj4gLQ0KPiAtICAg IFNvdXJjZUlkLkJpdHMuQnVzID0gQnVzOw0KPiAtICAgIFNvdXJjZUlkLkJpdHMuRGV2aWNlID0g RGV2aWNlOw0KPiAtICAgIFNvdXJjZUlkLkJpdHMuRnVuY3Rpb24gPSBGdW5jdGlvbjsNCj4gLQ0K PiAtICAgIFN0YXR1cyA9IFJlZ2lzdGVyUGNpRGV2aWNlIChWVGRVbml0SW5mbywgRG1hckRyaGQt PlNlZ21lbnROdW1iZXIsDQo+IFNvdXJjZUlkLCBEbWFyRGV2U2NvcGVFbnRyeS0+VHlwZSwgVFJV RSk7DQo+IC0gICAgaWYgKEVGSV9FUlJPUiAoU3RhdHVzKSkgew0KPiAtICAgICAgREVCVUcgKChE RUJVR19FUlJPUiwiUmVnaXN0ZXJQY2lEZXZpY2UgRmFpbGVkICFcbiIpKTsNCj4gLSAgICB9DQo+ IC0NCj4gLSAgICBEbWFyRGV2U2NvcGVFbnRyeSA9DQo+IChFRklfQUNQSV9ETUFSX0RFVklDRV9T Q09QRV9TVFJVQ1RVUkVfSEVBREVSICopICgoVUlOVE4pDQo+IERtYXJEZXZTY29wZUVudHJ5ICsg RG1hckRldlNjb3BlRW50cnktPkxlbmd0aCk7DQo+IC0gIH0NCj4gLX0NCj4gLQ0KPiAtLyoqDQo+ IC0gIER1bXAgdGhlIFBDSSBkZXZpY2UgaW5mb3JtYXRpb24gbWFuYWdlZCBieSB0aGlzIFZUZCBl bmdpbmUuDQo+IC0NCj4gLSAgQHBhcmFtW2luXSAgVlRkSW5mbyAgICAgICAgICAgVGhlIFZUZCBl bmdpbmUgY29udGV4dCBpbmZvcm1hdGlvbi4NCj4gLSAgQHBhcmFtW2luXSAgVnRkSW5kZXggICAg ICAgICAgVGhlIGluZGV4IG9mIFZUZCBlbmdpbmUuDQo+IC0NCj4gLSoqLw0KPiAtVk9JRA0KPiAt RHVtcFBjaURldmljZUluZm8gKA0KPiAtICBJTiBWVERfSU5GTyAgICAgICAgICAgICAgICAgICAq VlRkSW5mbywNCj4gLSAgSU4gVUlOVE4gICAgICAgICAgICAgICAgICAgICAgVnRkSW5kZXgNCj4g LSAgKQ0KPiAtew0KPiAtICBVSU5UTiAgICAgICAgICAgICAgICAgICAgICAgICBJbmRleDsNCj4g LSAgUEVJX1BDSV9ERVZJQ0VfREFUQSAgICAgICAgICAgKlBjaURldmljZURhdGFCYXNlOw0KPiAt DQo+IC0gIERFQlVHICgoREVCVUdfSU5GTywiUENJIERldmljZSBJbmZvcm1hdGlvbiAoTnVtYmVy IDB4JXgsIEluY2x1ZGVBbGwgLQ0KPiAgJWQpOlxuIiwNCj4gLSAgICBWVGRJbmZvLT5WdGRVbml0 SW5mb1tWdGRJbmRleF0uUGNpRGV2aWNlSW5mby5QY2lEZXZpY2VEYXRhTnVtYmVyLA0KPiAtICAg IFZUZEluZm8tPlZ0ZFVuaXRJbmZvW1Z0ZEluZGV4XS5QY2lEZXZpY2VJbmZvLkluY2x1ZGVBbGxG bGFnDQo+IC0gICAgKSk7DQo+IC0NCj4gLSAgUGNpRGV2aWNlRGF0YUJhc2UgPSAoUEVJX1BDSV9E RVZJQ0VfREFUQSAqKSAoVUlOVE4pIFZUZEluZm8tDQo+ID5WdGRVbml0SW5mb1tWdGRJbmRleF0u UGNpRGV2aWNlSW5mby5QY2lEZXZpY2VEYXRhOw0KPiAtDQo+IC0gIGZvciAoSW5kZXggPSAwOyBJ bmRleCA8IFZUZEluZm8tDQo+ID5WdGRVbml0SW5mb1tWdGRJbmRleF0uUGNpRGV2aWNlSW5mby5Q Y2lEZXZpY2VEYXRhTnVtYmVyOyBJbmRleCsrKSB7DQo+IC0gICAgREVCVUcgKChERUJVR19JTkZP LCIgIFMlMDR4IEIlMDJ4IEQlMDJ4IEYlMDJ4XG4iLA0KPiAtICAgICAgVlRkSW5mby0+VnRkVW5p dEluZm9bVnRkSW5kZXhdLlNlZ21lbnQsDQo+IC0gICAgICBQY2lEZXZpY2VEYXRhQmFzZVtJbmRl eF0uUGNpU291cmNlSWQuQml0cy5CdXMsDQo+IC0gICAgICBQY2lEZXZpY2VEYXRhQmFzZVtJbmRl eF0uUGNpU291cmNlSWQuQml0cy5EZXZpY2UsDQo+IC0gICAgICBQY2lEZXZpY2VEYXRhQmFzZVtJ bmRleF0uUGNpU291cmNlSWQuQml0cy5GdW5jdGlvbg0KPiAtICAgICAgKSk7DQo+IC0gIH0NCj4g LX0NCj4gLQ0KPiAgLyoqDQo+ICAgIFBhcnNlIERNQVIgRFJIRCB0YWJsZS4NCj4gDQo+ICAgIEBw YXJhbVtpbl0gIEFjcGlEbWFyVGFibGUgICAgIERNQVIgQUNQSSB0YWJsZQ0KPiArICBAcGFyYW1b aW5dICBDYWxsYmFjayAgICAgICAgICBDYWxsYmFjayBmdW5jdGlvbiBmb3IgaGFuZGxlIERSSEQN Cj4gKyAgQHBhcmFtW2luXSAgQ29udGV4dCAgICAgICAgICAgQ2FsbGJhY2sgZnVuY3Rpb24gQ29u dGV4dA0KPiANCj4gICAgQHJldHVybiBFRklfU1VDQ0VTUyAgVGhlIERNQVIgRFJIRCB0YWJsZSBp cyBwYXJzZWQuDQo+IA0KPiAgKiovDQo+ICBFRklfU1RBVFVTDQo+ICBQYXJzZURtYXJBY3BpVGFi bGVEcmhkICgNCj4gLSAgSU4gRUZJX0FDUElfRE1BUl9IRUFERVIgICAgICAgICAgICAgICAqQWNw aURtYXJUYWJsZQ0KPiArICBJTiBFRklfQUNQSV9ETUFSX0hFQURFUiAgICAgICAgICAgICAgICpB Y3BpRG1hclRhYmxlLA0KPiArICBJTiBQUk9DRVNTX0RSSERfQ0FMTEJBQ0tfRlVOQyAgICAgICAg IENhbGxiYWNrLA0KPiArICBJTiBWT0lEICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpD b250ZXh0DQo+ICAgICkNCj4gIHsNCj4gICAgRUZJX0FDUElfRE1BUl9TVFJVQ1RVUkVfSEVBREVS ICAgICAgICAqRG1hckhlYWRlcjsNCj4gLSAgVUlOVE4gICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBWdGRVbml0TnVtYmVyOw0KPiAtICBVSU5UTiAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIFZ0ZEluZGV4Ow0KPiAtICBWVERfSU5GTyAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICpWVGRJbmZvOw0KPiAtDQo+IC0gIFZ0ZFVuaXROdW1iZXIgPSBHZXRWdGRFbmdpbmVO dW1iZXIgKEFjcGlEbWFyVGFibGUpOw0KPiAtICBpZiAoVnRkVW5pdE51bWJlciA9PSAwKSB7DQo+ IC0gICAgcmV0dXJuIEVGSV9VTlNVUFBPUlRFRDsNCj4gLSAgfQ0KPiAtDQo+IC0gIFZUZEluZm8g PSBCdWlsZEd1aWRIb2IgKCZtVlRkSW5mb0d1aWQsIHNpemVvZiAoVlREX0lORk8pICsNCj4gKFZ0 ZFVuaXROdW1iZXIgLSAxKSAqIHNpemVvZiAoVlREX1VOSVRfSU5GTykpOw0KPiAtICBBU1NFUlQo VlRkSW5mbyAhPSBOVUxMKTsNCj4gLSAgaWYgKFZUZEluZm8gPT0gTlVMTCkgew0KPiAtICAgIHJl dHVybiBFRklfT1VUX09GX1JFU09VUkNFUzsNCj4gLSAgfQ0KPiAtDQo+IC0gIC8vDQo+IC0gIC8v IEluaXRpYWxpemUgdGhlIGVuZ2luZSBtYXNrIHRvIGFsbC4NCj4gLSAgLy8NCj4gLSAgVlRkSW5m by0+QWNwaURtYXJUYWJsZSAgICA9IChVSU5UMzIpIChVSU5UTikgQWNwaURtYXJUYWJsZTsNCj4g LSAgVlRkSW5mby0+SG9zdEFkZHJlc3NXaWR0aCA9IEFjcGlEbWFyVGFibGUtPkhvc3RBZGRyZXNz V2lkdGg7DQo+IC0gIFZUZEluZm8tPlZUZEVuZ2luZUNvdW50ICAgPSAoVUlOVDMyKSBWdGRVbml0 TnVtYmVyOw0KPiArICBVSU5UMzIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFZ0ZElu ZGV4Ow0KPiANCj4gICAgVnRkSW5kZXggPSAwOw0KPiAgICBEbWFySGVhZGVyID0gKEVGSV9BQ1BJ X0RNQVJfU1RSVUNUVVJFX0hFQURFUiAqKSAoKFVJTlROKQ0KPiAoQWNwaURtYXJUYWJsZSArIDEp KTsNCj4gKw0KPiAgICB3aGlsZSAoKFVJTlROKSBEbWFySGVhZGVyIDwgKFVJTlROKSBBY3BpRG1h clRhYmxlICsgQWNwaURtYXJUYWJsZS0NCj4gPkhlYWRlci5MZW5ndGgpIHsNCj4gICAgICBzd2l0 Y2ggKERtYXJIZWFkZXItPlR5cGUpIHsNCj4gICAgICBjYXNlIEVGSV9BQ1BJX0RNQVJfVFlQRV9E UkhEOg0KPiAtICAgICAgQVNTRVJUIChWdGRJbmRleCA8IFZ0ZFVuaXROdW1iZXIpOw0KPiAtICAg ICAgUHJvY2Vzc0RyaGQgKCZWVGRJbmZvLT5WdGRVbml0SW5mb1tWdGRJbmRleF0sDQo+IChFRklf QUNQSV9ETUFSX0RSSERfSEVBREVSICopIERtYXJIZWFkZXIpOw0KPiArICAgICAgaWYgKENhbGxi YWNrICE9IE5VTEwpIHsNCj4gKyAgICAgICAgQ2FsbGJhY2sgKENvbnRleHQsIFZ0ZEluZGV4LCAo RUZJX0FDUElfRE1BUl9EUkhEX0hFQURFUiAqKQ0KPiBEbWFySGVhZGVyKTsNCj4gKyAgICAgIH0N Cj4gICAgICAgIFZ0ZEluZGV4Kys7DQo+IC0NCj4gICAgICAgIGJyZWFrOw0KPiAtDQo+ICAgICAg ZGVmYXVsdDoNCj4gICAgICAgIGJyZWFrOw0KPiAgICAgIH0NCj4gICAgICBEbWFySGVhZGVyID0g KEVGSV9BQ1BJX0RNQVJfU1RSVUNUVVJFX0hFQURFUiAqKSAoKFVJTlROKQ0KPiBEbWFySGVhZGVy ICsgRG1hckhlYWRlci0+TGVuZ3RoKTsNCj4gICAgfQ0KPiAtICBBU1NFUlQgKFZ0ZEluZGV4ID09 IFZ0ZFVuaXROdW1iZXIpOw0KPiAtDQo+IC0gIGZvciAoVnRkSW5kZXggPSAwOyBWdGRJbmRleCA8 IFZ0ZFVuaXROdW1iZXI7IFZ0ZEluZGV4KyspIHsNCj4gLSAgICBEdW1wUGNpRGV2aWNlSW5mbyAo VlRkSW5mbywgVnRkSW5kZXgpOw0KPiAtICB9DQo+IC0NCj4gLSAgcmV0dXJuIEVGSV9TVUNDRVNT Ow0KPiAtfQ0KPiAtDQo+IC0NCj4gLS8qKg0KPiAtICBQcm9jZXNzIERNQVIgUk1SUiB0YWJsZS4N Cj4gLQ0KPiAtICBAcGFyYW1baW5dICBWVGRJbmZvICAgICAgICAgICBUaGUgVlRkIGVuZ2luZSBj b250ZXh0IGluZm9ybWF0aW9uLg0KPiAtICBAcGFyYW1baW5dICBEbWFyUm1yciAgICAgICAgICBU aGUgUk1SUiB0YWJsZS4NCj4gLQ0KPiAtKiovDQo+IC1WT0lEDQo+IC1Qcm9jZXNzUm1yciAoDQo+ IC0gIElOIFZURF9JTkZPICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpWVGRJ bmZvLA0KPiAtICBJTiBFRklfQUNQSV9ETUFSX1JNUlJfSEVBREVSICAgICAgICAgICAgICAgICAg ICAqRG1hclJtcnINCj4gLSAgKQ0KPiAtew0KPiAtICBFRklfQUNQSV9ETUFSX0RFVklDRV9TQ09Q RV9TVFJVQ1RVUkVfSEVBREVSDQo+ICpEbWFyRGV2U2NvcGVFbnRyeTsNCj4gLSAgVUlOVDggICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQnVzOw0KPiAtICBVSU5UOCAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBEZXZpY2U7DQo+IC0gIFVJ TlQ4ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZ1bmN0aW9uOw0K PiAtICBFRklfU1RBVFVTICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTdGF0 dXM7DQo+IC0gIFZURF9TT1VSQ0VfSUQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IFNvdXJjZUlkOw0KPiAtDQo+IC0gIERFQlVHICgoREVCVUdfSU5GTywiICBQRUkgUk1SUiAoQmFz ZSAweCUwMTZseCwgTGltaXQgMHglMDE2bHgpXG4iLA0KPiBEbWFyUm1yci0+UmVzZXJ2ZWRNZW1v cnlSZWdpb25CYXNlQWRkcmVzcywgRG1hclJtcnItDQo+ID5SZXNlcnZlZE1lbW9yeVJlZ2lvbkxp bWl0QWRkcmVzcykpOw0KPiAtDQo+IC0gIGlmICgoRG1hclJtcnItPlJlc2VydmVkTWVtb3J5UmVn aW9uQmFzZUFkZHJlc3MgPT0gMCkgfHwNCj4gLSAgICAgIChEbWFyUm1yci0+UmVzZXJ2ZWRNZW1v cnlSZWdpb25MaW1pdEFkZHJlc3MgPT0gMCkpIHsNCj4gLSAgICByZXR1cm4gOw0KPiAtICB9DQo+ IC0NCj4gLSAgRG1hckRldlNjb3BlRW50cnkgPQ0KPiAoRUZJX0FDUElfRE1BUl9ERVZJQ0VfU0NP UEVfU1RSVUNUVVJFX0hFQURFUiAqKSAoKFVJTlROKQ0KPiAoRG1hclJtcnIgKyAxKSk7DQo+IC0g IHdoaWxlICgoVUlOVE4pIERtYXJEZXZTY29wZUVudHJ5IDwgKFVJTlROKSBEbWFyUm1yciArIERt YXJSbXJyLQ0KPiA+SGVhZGVyLkxlbmd0aCkgew0KPiAtICAgIGlmIChEbWFyRGV2U2NvcGVFbnRy eS0+VHlwZSAhPQ0KPiBFRklfQUNQSV9ERVZJQ0VfU0NPUEVfRU5UUllfVFlQRV9QQ0lfRU5EUE9J TlQpIHsNCj4gLSAgICAgIERFQlVHICgoREVCVUdfSU5GTywiUk1SUiBEZXZTY29wZUVudHJ5VHlw ZSBpcyBub3QgZW5kcG9pbnQsDQo+IHR5cGVbMHgleF0gXG4iLCBEbWFyRGV2U2NvcGVFbnRyeS0+ VHlwZSkpOw0KPiAtICAgICAgcmV0dXJuOw0KPiAtICAgIH0NCj4gLQ0KPiAtICAgIFN0YXR1cyA9 IEdldFBjaUJ1c0RldmljZUZ1bmN0aW9uIChEbWFyUm1yci0+U2VnbWVudE51bWJlciwNCj4gRG1h ckRldlNjb3BlRW50cnksICZCdXMsICZEZXZpY2UsICZGdW5jdGlvbik7DQo+IC0gICAgaWYgKEVG SV9FUlJPUiAoU3RhdHVzKSkgew0KPiAtICAgICAgY29udGludWU7DQo+IC0gICAgfQ0KPiAtDQo+ IC0gICAgREVCVUcgKChERUJVR19JTkZPLCJSTVJSIFMlMDR4IEIlMDJ4IEQlMDJ4IEYlMDJ4XG4i LCBEbWFyUm1yci0NCj4gPlNlZ21lbnROdW1iZXIsIEJ1cywgRGV2aWNlLCBGdW5jdGlvbikpOw0K PiAtDQo+IC0gICAgU291cmNlSWQuQml0cy5CdXMgPSBCdXM7DQo+IC0gICAgU291cmNlSWQuQml0 cy5EZXZpY2UgPSBEZXZpY2U7DQo+IC0gICAgU291cmNlSWQuQml0cy5GdW5jdGlvbiA9IEZ1bmN0 aW9uOw0KPiAtDQo+IC0gICAgU3RhdHVzID0gRW5hYmxlUm1yclBhZ2VBdHRyaWJ1dGUgKA0KPiAt ICAgICAgICAgICAgICAgVlRkSW5mbywNCj4gLSAgICAgICAgICAgICAgIERtYXJSbXJyLT5TZWdt ZW50TnVtYmVyLA0KPiAtICAgICAgICAgICAgICAgU291cmNlSWQsDQo+IC0gICAgICAgICAgICAg ICBEbWFyUm1yci0+UmVzZXJ2ZWRNZW1vcnlSZWdpb25CYXNlQWRkcmVzcywNCj4gLSAgICAgICAg ICAgICAgIERtYXJSbXJyLT5SZXNlcnZlZE1lbW9yeVJlZ2lvbkxpbWl0QWRkcmVzcywNCj4gLSAg ICAgICAgICAgICAgIEVES0lJX0lPTU1VX0FDQ0VTU19SRUFEIHwgRURLSUlfSU9NTVVfQUNDRVNT X1dSSVRFDQo+IC0gICAgICAgICAgICAgICApOw0KPiAtICAgIGlmIChFRklfRVJST1IgKFN0YXR1 cykpIHsNCj4gLSAgICAgIERFQlVHICgoREVCVUdfSU5GTywgIkVuYWJsZVJtcnJQYWdlQXR0cmli dXRlIDogJXJcbiIsIFN0YXR1cykpOw0KPiAtICAgIH0NCj4gLQ0KPiAtICAgIERtYXJEZXZTY29w ZUVudHJ5ID0NCj4gKEVGSV9BQ1BJX0RNQVJfREVWSUNFX1NDT1BFX1NUUlVDVFVSRV9IRUFERVIg KikgKChVSU5UTikNCj4gRG1hckRldlNjb3BlRW50cnkgKyBEbWFyRGV2U2NvcGVFbnRyeS0+TGVu Z3RoKTsNCj4gLSAgfQ0KPiAtfQ0KPiAtDQo+IC0vKioNCj4gLSAgUGFyc2UgRE1BUiBEUkhEIHRh YmxlLg0KPiAtDQo+IC0gIEBwYXJhbVtpbl0gIFZUZEluZm8gICAgICAgICAgIFRoZSBWVGQgZW5n aW5lIGNvbnRleHQgaW5mb3JtYXRpb24uDQo+IC0NCj4gLSoqLw0KPiAtVk9JRA0KPiAtUGFyc2VE bWFyQWNwaVRhYmxlUm1yciAoDQo+IC0gIElOIFZURF9JTkZPICAgICAgICAgICAgICAgICAgICAg ICAgICAgKlZUZEluZm8NCj4gLSAgKQ0KPiAtew0KPiAtICBFRklfQUNQSV9ETUFSX0hFQURFUiAg ICAgICAgICAgICAgICAgICpBY3BpRG1hclRhYmxlOw0KPiAtICBFRklfQUNQSV9ETUFSX1NUUlVD VFVSRV9IRUFERVIgICAgICAgICpEbWFySGVhZGVyOw0KPiANCj4gLSAgQWNwaURtYXJUYWJsZSA9 IChFRklfQUNQSV9ETUFSX0hFQURFUiAqKSAoVUlOVE4pIFZUZEluZm8tDQo+ID5BY3BpRG1hclRh YmxlOw0KPiAtDQo+IC0gIERtYXJIZWFkZXIgPSAoRUZJX0FDUElfRE1BUl9TVFJVQ1RVUkVfSEVB REVSICopICgoVUlOVE4pDQo+IChBY3BpRG1hclRhYmxlICsgMSkpOw0KPiAtICB3aGlsZSAoKFVJ TlROKSBEbWFySGVhZGVyIDwgKFVJTlROKSBBY3BpRG1hclRhYmxlICsgQWNwaURtYXJUYWJsZS0N Cj4gPkhlYWRlci5MZW5ndGgpIHsNCj4gLSAgICBzd2l0Y2ggKERtYXJIZWFkZXItPlR5cGUpIHsN Cj4gLSAgICBjYXNlIEVGSV9BQ1BJX0RNQVJfVFlQRV9STVJSOg0KPiAtICAgICAgUHJvY2Vzc1Jt cnIgKFZUZEluZm8sIChFRklfQUNQSV9ETUFSX1JNUlJfSEVBREVSICopDQo+IERtYXJIZWFkZXIp Ow0KPiAtICAgICAgYnJlYWs7DQo+IC0gICAgZGVmYXVsdDoNCj4gLSAgICAgIGJyZWFrOw0KPiAt ICAgIH0NCj4gLSAgICBEbWFySGVhZGVyID0gKEVGSV9BQ1BJX0RNQVJfU1RSVUNUVVJFX0hFQURF UiAqKSAoKFVJTlROKQ0KPiBEbWFySGVhZGVyICsgRG1hckhlYWRlci0+TGVuZ3RoKTsNCj4gLSAg fQ0KPiArICByZXR1cm4gVnRkSW5kZXg7DQo+ICB9DQo+IA0KPiBkaWZmIC0tZ2l0DQo+IGEvU2ls aWNvbi9JbnRlbC9JbnRlbFNpbGljb25Qa2cvRmVhdHVyZS9WVGQvSW50ZWxWVGREbWFyUGVpL0lu dGVsVlRkRG1hci4NCj4gYw0KPiBiL1NpbGljb24vSW50ZWwvSW50ZWxTaWxpY29uUGtnL0ZlYXR1 cmUvVlRkL0ludGVsVlRkRG1hclBlaS9JbnRlbFZUZERtYXIuDQo+IGMNCj4gaW5kZXggNjMzOTdh MWEuLjBlZDIxNmJiIDEwMDY0NA0KPiAtLS0NCj4gYS9TaWxpY29uL0ludGVsL0ludGVsU2lsaWNv blBrZy9GZWF0dXJlL1ZUZC9JbnRlbFZUZERtYXJQZWkvSW50ZWxWVGREbWFyLg0KPiBjDQo+ICsr Kw0KPiBiL1NpbGljb24vSW50ZWwvSW50ZWxTaWxpY29uUGtnL0ZlYXR1cmUvVlRkL0ludGVsVlRk RG1hclBlaS9JbnRlbFZUZERtYXIuDQo+IGMNCj4gQEAgLTEsNiArMSw2IEBADQo+ICAvKiogQGZp bGUNCj4gDQo+IC0gIENvcHlyaWdodCAoYykgMjAyMCwgSW50ZWwgQ29ycG9yYXRpb24uIEFsbCBy aWdodHMgcmVzZXJ2ZWQuPEJSPg0KPiArICBDb3B5cmlnaHQgKGMpIDIwMjAgLSAyMDIxLCBJbnRl bCBDb3Jwb3JhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC48QlI+DQo+IA0KPiAgICBTUERYLUxp Y2Vuc2UtSWRlbnRpZmllcjogQlNELTItQ2xhdXNlLVBhdGVudA0KPiANCj4gQEAgLTc5LDc3ICs3 OSw3MyBAQCBQZXJwYXJlQ2FjaGVJbnZhbGlkYXRpb25JbnRlcmZhY2UgKA0KPiAgICBJTiBWVERf VU5JVF9JTkZPICpWVGRVbml0SW5mbw0KPiAgICApDQo+ICB7DQo+IC0gIFVJTlQxNiAgICAgICAg IFF1ZXVlU2l6ZTsNCj4gKyAgVUlOVDE2ICAgICAgICAgUWlEZXNjTGVuZ3RoOw0KPiAgICBVSU5U NjQgICAgICAgICBSZWc2NDsNCj4gICAgVUlOVDMyICAgICAgICAgUmVnMzI7DQo+ICAgIFZURF9F Q0FQX1JFRyAgIEVDYXBSZWc7DQo+ICsgIFVJTlROICAgICAgICAgIFZ0ZFVuaXRCYXNlQWRkcmVz czsNCj4gDQo+ICsgIFZ0ZFVuaXRCYXNlQWRkcmVzcyA9IFZUZFVuaXRJbmZvLT5WdGRVbml0QmFz ZUFkZHJlc3M7DQo+IA0KPiAtICBpZiAoVlRkVW5pdEluZm8tPlZlclJlZy5CaXRzLk1ham9yIDw9 IDYpIHsNCj4gKyAgaWYgKFZUZFVuaXRJbmZvLT5WZXJSZWcuQml0cy5NYWpvciA8PSA1KSB7DQo+ ICAgICAgVlRkVW5pdEluZm8tPkVuYWJsZVF1ZXVlZEludmFsaWRhdGlvbiA9IDA7DQo+IC0gICAg REVCVUcgKChERUJVR19JTkZPLCAiVXNlIFJlZ2lzdGVyLWJhc2VkIEludmFsaWRhdGlvbiBJbnRl cmZhY2UgZm9yDQo+IGVuZ2luZSBbMHgleF1cbiIsIFZUZFVuaXRJbmZvLT5WdGRVbml0QmFzZUFk ZHJlc3MpKTsNCj4gKyAgICBERUJVRyAoKERFQlVHX0lORk8sICJVc2UgUmVnaXN0ZXItYmFzZWQg SW52YWxpZGF0aW9uIEludGVyZmFjZSBmb3INCj4gZW5naW5lIFsweCV4XVxuIiwgVnRkVW5pdEJh c2VBZGRyZXNzKSk7DQo+ICAgICAgcmV0dXJuIEVGSV9TVUNDRVNTOw0KPiAgICB9DQo+IA0KPiAt ICBFQ2FwUmVnLlVpbnQ2NCA9IE1taW9SZWFkNjQgKChVSU5UTilWVGRVbml0SW5mby0NCj4gPlZ0 ZFVuaXRCYXNlQWRkcmVzcyArIFJfRUNBUF9SRUcpOw0KPiArICBFQ2FwUmVnLlVpbnQ2NCA9IE1t aW9SZWFkNjQgKFZ0ZFVuaXRCYXNlQWRkcmVzcyArIFJfRUNBUF9SRUcpOw0KPiAgICBpZiAoRUNh cFJlZy5CaXRzLlFJID09IDApIHsNCj4gLSAgICBERUJVRyAoKERFQlVHX0VSUk9SLCAiSGFyZHdh cmUgZG9lcyBub3Qgc3VwcG9ydCBxdWV1ZWQNCj4gaW52YWxpZGF0aW9ucyBpbnRlcmZhY2UgZm9y IGVuZ2luZSBbMHgleF1cbiIsIFZUZFVuaXRJbmZvLQ0KPiA+VnRkVW5pdEJhc2VBZGRyZXNzKSk7 DQo+ICsgICAgREVCVUcgKChERUJVR19FUlJPUiwgIkhhcmR3YXJlIGRvZXMgbm90IHN1cHBvcnQg cXVldWVkDQo+IGludmFsaWRhdGlvbnMgaW50ZXJmYWNlIGZvciBlbmdpbmUgWzB4JXhdXG4iLCBW dGRVbml0QmFzZUFkZHJlc3MpKTsNCj4gICAgICByZXR1cm4gRUZJX1VOU1VQUE9SVEVEOw0KPiAg ICB9DQo+IA0KPiAgICBWVGRVbml0SW5mby0+RW5hYmxlUXVldWVkSW52YWxpZGF0aW9uID0gMTsN Cj4gLSAgREVCVUcgKChERUJVR19JTkZPLCAiVXNlIFF1ZXVlZCBJbnZhbGlkYXRpb24gSW50ZXJm YWNlIGZvciBlbmdpbmUNCj4gWzB4JXhdXG4iLCBWVGRVbml0SW5mby0+VnRkVW5pdEJhc2VBZGRy ZXNzKSk7DQo+ICsgIERFQlVHICgoREVCVUdfSU5GTywgIlVzZSBRdWV1ZWQgSW52YWxpZGF0aW9u IEludGVyZmFjZSBmb3IgZW5naW5lDQo+IFsweCV4XVxuIiwgVnRkVW5pdEJhc2VBZGRyZXNzKSk7 DQo+IA0KPiAtICBSZWczMiA9IE1taW9SZWFkMzIgKChVSU5UTilWVGRVbml0SW5mby0+VnRkVW5p dEJhc2VBZGRyZXNzICsNCj4gUl9HU1RTX1JFRyk7DQo+ICsgIFJlZzMyID0gTW1pb1JlYWQzMiAo VnRkVW5pdEJhc2VBZGRyZXNzICsgUl9HU1RTX1JFRyk7DQo+ICAgIGlmICgoUmVnMzIgJiBCX0dT VFNfUkVHX1FJRVMpICE9IDApIHsNCj4gICAgICBERUJVRyAoKERFQlVHX0lORk8sIlF1ZXVlZCBJ bnZhbGlkYXRpb24gSW50ZXJmYWNlIHdhcyBlbmFibGVkLlxuIikpOw0KPiAgICAgIFJlZzMyICY9 ICh+Ql9HU1RTX1JFR19RSUVTKTsNCj4gLSAgICBNbWlvV3JpdGUzMiAoKFVJTlROKVZUZFVuaXRJ bmZvLT5WdGRVbml0QmFzZUFkZHJlc3MgKw0KPiBSX0dDTURfUkVHLCBSZWczMik7DQo+ICsgICAg TW1pb1dyaXRlMzIgKFZ0ZFVuaXRCYXNlQWRkcmVzcyArIFJfR0NNRF9SRUcsIFJlZzMyKTsNCj4g ICAgICBkbyB7DQo+IC0gICAgICBSZWczMiA9IE1taW9SZWFkMzIgKChVSU5UTilWVGRVbml0SW5m by0+VnRkVW5pdEJhc2VBZGRyZXNzICsNCj4gUl9HU1RTX1JFRyk7DQo+ICsgICAgICBSZWczMiA9 IE1taW9SZWFkMzIgKFZ0ZFVuaXRCYXNlQWRkcmVzcyArIFJfR1NUU19SRUcpOw0KPiAgICAgIH0g d2hpbGUgKChSZWczMiAmIEJfR1NUU19SRUdfUUlFUykgIT0gMCk7DQo+IC0gICAgTW1pb1dyaXRl NjQgKChVSU5UTilWVGRVbml0SW5mby0+VnRkVW5pdEJhc2VBZGRyZXNzICsgUl9JUUFfUkVHLA0K PiAwKTsNCj4gLQ0KPiAtICAgIGlmIChWVGRVbml0SW5mby0+UWlEZXNjICE9IE5VTEwpIHsNCj4g LSAgICAgIEZyZWVQYWdlcyhWVGRVbml0SW5mby0+UWlEZXNjLCBFRklfU0laRV9UT19QQUdFUyhz aXplb2YoUUlfREVTQykgKg0KPiBWVGRVbml0SW5mby0+UWlEZXNjTGVuZ3RoKSk7DQo+IC0gICAg ICBWVGRVbml0SW5mby0+UWlEZXNjID0gTlVMTDsNCj4gLSAgICAgIFZUZFVuaXRJbmZvLT5RaURl c2NMZW5ndGggPSAwOw0KPiAtICAgIH0NCj4gKyAgICBNbWlvV3JpdGU2NCAoVnRkVW5pdEJhc2VB ZGRyZXNzICsgUl9JUUFfUkVHLCAwKTsNCj4gICAgfQ0KPiANCj4gICAgLy8NCj4gICAgLy8gSW5p dGlhbGl6ZSB0aGUgSW52YWxpZGF0aW9uIFF1ZXVlIFRhaWwgUmVnaXN0ZXIgdG8gemVyby4NCj4g ICAgLy8NCj4gLSAgTW1pb1dyaXRlNjQgKChVSU5UTilWVGRVbml0SW5mby0+VnRkVW5pdEJhc2VB ZGRyZXNzICsgUl9JUVRfUkVHLA0KPiAwKTsNCj4gKyAgTW1pb1dyaXRlNjQgKFZ0ZFVuaXRCYXNl QWRkcmVzcyArIFJfSVFUX1JFRywgMCk7DQo+IA0KPiAgICAvLw0KPiAgICAvLyBTZXR1cCB0aGUg SVEgYWRkcmVzcywgc2l6ZSBhbmQgZGVzY3JpcHRvciB3aWR0aCB0aHJvdWdoIHRoZSBJbnZhbGlk YXRpb24NCj4gUXVldWUgQWRkcmVzcyBSZWdpc3Rlcg0KPiAgICAvLw0KPiAtICBRdWV1ZVNpemUg PSAwOw0KPiAtICBWVGRVbml0SW5mby0+UWlEZXNjTGVuZ3RoID0gMSA8PCAoUXVldWVTaXplICsg OCk7DQo+IC0gIFZUZFVuaXRJbmZvLT5RaURlc2MgPSAoUUlfREVTQyAqKSBBbGxvY2F0ZVBhZ2Vz DQo+IChFRklfU0laRV9UT19QQUdFUyhzaXplb2YoUUlfREVTQykgKiBWVGRVbml0SW5mby0+UWlE ZXNjTGVuZ3RoKSk7DQo+IC0NCj4gICAgaWYgKFZUZFVuaXRJbmZvLT5RaURlc2MgPT0gTlVMTCkg ew0KPiAtICAgIFZUZFVuaXRJbmZvLT5RaURlc2NMZW5ndGggPSAwOw0KPiAtICAgIERFQlVHICgo REVCVUdfRVJST1IsIkNvdWxkIG5vdCBBbGxvYyBJbnZhbGlkYXRpb24gUXVldWUgQnVmZmVyLlxu IikpOw0KPiAtICAgIHJldHVybiBFRklfT1VUX09GX1JFU09VUkNFUzsNCj4gKyAgICBWVGRVbml0 SW5mby0+UXVldWVTaXplID0gMDsNCj4gKyAgICBRaURlc2NMZW5ndGggPSAxIDw8IChWVGRVbml0 SW5mby0+UXVldWVTaXplICsgOCk7DQo+ICsgICAgVlRkVW5pdEluZm8tPlFpRGVzYyA9IChRSV9E RVNDICopIEFsbG9jYXRlUGFnZXMNCj4gKEVGSV9TSVpFX1RPX1BBR0VTKHNpemVvZihRSV9ERVND KSAqIFFpRGVzY0xlbmd0aCkpOw0KPiArICAgIGlmIChWVGRVbml0SW5mby0+UWlEZXNjID09IE5V TEwpIHsNCj4gKyAgICAgIERFQlVHICgoREVCVUdfRVJST1IsIkNvdWxkIG5vdCBBbGxvYyBJbnZh bGlkYXRpb24gUXVldWUNCj4gQnVmZmVyLlxuIikpOw0KPiArICAgICAgcmV0dXJuIEVGSV9PVVRf T0ZfUkVTT1VSQ0VTOw0KPiArICAgIH0NCj4gICAgfQ0KPiANCj4gLSAgREVCVUcgKChERUJVR19J TkZPLCAiSW52YWxpZGF0aW9uIFF1ZXVlIExlbmd0aCA6ICVkXG4iLCBWVGRVbml0SW5mby0NCj4g PlFpRGVzY0xlbmd0aCkpOw0KPiAtICBSZWc2NCA9IChVSU5UNjQpKFVJTlROKVZUZFVuaXRJbmZv LT5RaURlc2M7DQo+IC0gIFJlZzY0IHw9IFF1ZXVlU2l6ZTsNCj4gLSAgTW1pb1dyaXRlNjQgKChV SU5UTilWVGRVbml0SW5mby0+VnRkVW5pdEJhc2VBZGRyZXNzICsgUl9JUUFfUkVHLA0KPiBSZWc2 NCk7DQo+ICsgIERFQlVHICgoREVCVUdfSU5GTywgIkludmFsaWRhdGlvbiBRdWV1ZSBMZW5ndGgg OiAlZFxuIiwNCj4gUWlEZXNjTGVuZ3RoKSk7DQo+ICsgIFJlZzY0ID0gKFVJTlQ2NCkgKFVJTlRO KSBWVGRVbml0SW5mby0+UWlEZXNjOw0KPiArICBSZWc2NCB8PSBWVGRVbml0SW5mby0+UXVldWVT aXplOw0KPiArICBNbWlvV3JpdGU2NCAoVnRkVW5pdEJhc2VBZGRyZXNzICsgUl9JUUFfUkVHLCBS ZWc2NCk7DQo+IA0KPiAgICAvLw0KPiAgICAvLyBFbmFibGUgdGhlIHF1ZXVlZCBpbnZhbGlkYXRp b24gaW50ZXJmYWNlIHRocm91Z2ggdGhlIEdsb2JhbCBDb21tYW5kDQo+IFJlZ2lzdGVyLg0KPiAg ICAvLyBXaGVuIGVuYWJsZWQsIGhhcmR3YXJlIHNldHMgdGhlIFFJRVMgZmllbGQgaW4gdGhlIEds b2JhbCBTdGF0dXMgUmVnaXN0ZXIuDQo+ICAgIC8vDQo+IC0gIFJlZzMyID0gTW1pb1JlYWQzMiAo KFVJTlROKVZUZFVuaXRJbmZvLT5WdGRVbml0QmFzZUFkZHJlc3MgKw0KPiBSX0dTVFNfUkVHKTsN Cj4gKyAgUmVnMzIgPSBNbWlvUmVhZDMyIChWdGRVbml0QmFzZUFkZHJlc3MgKyBSX0dTVFNfUkVH KTsNCj4gICAgUmVnMzIgfD0gQl9HTUNEX1JFR19RSUU7DQo+IC0gIE1taW9Xcml0ZTMyICgoVUlO VE4pVlRkVW5pdEluZm8tPlZ0ZFVuaXRCYXNlQWRkcmVzcyArDQo+IFJfR0NNRF9SRUcsIFJlZzMy KTsNCj4gKyAgTW1pb1dyaXRlMzIgKFZ0ZFVuaXRCYXNlQWRkcmVzcyArIFJfR0NNRF9SRUcsIFJl ZzMyKTsNCj4gICAgREVCVUcgKChERUJVR19JTkZPLCAiRW5hYmxlIFF1ZXVlZCBJbnZhbGlkYXRp b24gSW50ZXJmYWNlLiBHQ01EX1JFRw0KPiA9IDB4JXhcbiIsIFJlZzMyKSk7DQo+ICAgIGRvIHsN Cj4gLSAgICBSZWczMiA9IE1taW9SZWFkMzIgKChVSU5UTilWVGRVbml0SW5mby0+VnRkVW5pdEJh c2VBZGRyZXNzICsNCj4gUl9HU1RTX1JFRyk7DQo+ICsgICAgUmVnMzIgPSBNbWlvUmVhZDMyIChW dGRVbml0QmFzZUFkZHJlc3MgKyBSX0dTVFNfUkVHKTsNCj4gICAgfSB3aGlsZSAoKFJlZzMyICYg Ql9HU1RTX1JFR19RSUVTKSA9PSAwKTsNCj4gDQo+ICAgIFZUZFVuaXRJbmZvLT5RaUZyZWVIZWFk ID0gMDsNCj4gQEAgLTE2NywyMSArMTYzLDIzIEBAIERpc2FibGVRdWV1ZWRJbnZhbGlkYXRpb25J bnRlcmZhY2UgKA0KPiAgICBJTiBWVERfVU5JVF9JTkZPICpWVGRVbml0SW5mbw0KPiAgICApDQo+ ICB7DQo+IC0gIFVJTlQzMiAgUmVnMzI7DQo+ICsgIFVJTlQzMiAgICAgICAgIFJlZzMyOw0KPiAr ICBVSU5UMTYgICAgICAgICBRaURlc2NMZW5ndGg7DQo+IA0KPiAgICBpZiAoVlRkVW5pdEluZm8t PkVuYWJsZVF1ZXVlZEludmFsaWRhdGlvbiAhPSAwKSB7DQo+IC0gICAgUmVnMzIgPSBNbWlvUmVh ZDMyICgoVUlOVE4pVlRkVW5pdEluZm8tPlZ0ZFVuaXRCYXNlQWRkcmVzcyArDQo+IFJfR1NUU19S RUcpOw0KPiArICAgIFJlZzMyID0gTW1pb1JlYWQzMiAoVlRkVW5pdEluZm8tPlZ0ZFVuaXRCYXNl QWRkcmVzcyArDQo+IFJfR1NUU19SRUcpOw0KPiAgICAgIFJlZzMyICY9ICh+Ql9HTUNEX1JFR19R SUUpOw0KPiAtICAgIE1taW9Xcml0ZTMyICgoVUlOVE4pVlRkVW5pdEluZm8tPlZ0ZFVuaXRCYXNl QWRkcmVzcyArDQo+IFJfR0NNRF9SRUcsIFJlZzMyKTsNCj4gKyAgICBNbWlvV3JpdGUzMiAoVlRk VW5pdEluZm8tPlZ0ZFVuaXRCYXNlQWRkcmVzcyArIFJfR0NNRF9SRUcsDQo+IFJlZzMyKTsNCj4g ICAgICBERUJVRyAoKERFQlVHX0lORk8sICJEaXNhYmxlIFF1ZXVlZCBJbnZhbGlkYXRpb24gSW50 ZXJmYWNlLg0KPiBHQ01EX1JFRyA9IDB4JXhcbiIsIFJlZzMyKSk7DQo+ICAgICAgZG8gew0KPiAt ICAgICAgUmVnMzIgPSBNbWlvUmVhZDMyICgoVUlOVE4pVlRkVW5pdEluZm8tPlZ0ZFVuaXRCYXNl QWRkcmVzcyArDQo+IFJfR1NUU19SRUcpOw0KPiArICAgICAgUmVnMzIgPSBNbWlvUmVhZDMyIChW VGRVbml0SW5mby0+VnRkVW5pdEJhc2VBZGRyZXNzICsNCj4gUl9HU1RTX1JFRyk7DQo+ICAgICAg fSB3aGlsZSAoKFJlZzMyICYgQl9HU1RTX1JFR19RSUVTKSAhPSAwKTsNCj4gDQo+ICAgICAgaWYg KFZUZFVuaXRJbmZvLT5RaURlc2MgIT0gTlVMTCkgew0KPiAtICAgICAgRnJlZVBhZ2VzKFZUZFVu aXRJbmZvLT5RaURlc2MsIEVGSV9TSVpFX1RPX1BBR0VTKHNpemVvZihRSV9ERVNDKSAqDQo+IFZU ZFVuaXRJbmZvLT5RaURlc2NMZW5ndGgpKTsNCj4gKyAgICAgIFFpRGVzY0xlbmd0aCA9IDEgPDwg KFZUZFVuaXRJbmZvLT5RdWV1ZVNpemUgKyA4KTsNCj4gKyAgICAgIEZyZWVQYWdlcyhWVGRVbml0 SW5mby0+UWlEZXNjLCBFRklfU0laRV9UT19QQUdFUyhzaXplb2YoUUlfREVTQykNCj4gKiBRaURl c2NMZW5ndGgpKTsNCj4gICAgICAgIFZUZFVuaXRJbmZvLT5RaURlc2MgPSBOVUxMOw0KPiAtICAg ICAgVlRkVW5pdEluZm8tPlFpRGVzY0xlbmd0aCA9IDA7DQo+ICsgICAgICBWVGRVbml0SW5mby0+ UXVldWVTaXplID0gMDsNCj4gICAgICB9DQo+IA0KPiAgICAgIFZUZFVuaXRJbmZvLT5FbmFibGVR dWV1ZWRJbnZhbGlkYXRpb24gPSAwOw0KPiBAQCAtMjAzLDI2ICsyMDEsMTEgQEAgUXVldWVkSW52 YWxpZGF0aW9uQ2hlY2tGYXVsdCAoDQo+ICB7DQo+ICAgIFVJTlQzMiAgICAgRmF1bHRSZWc7DQo+ IA0KPiAtICBGYXVsdFJlZyA9IE1taW9SZWFkMzIgKChVSU5UTilWVGRVbml0SW5mby0+VnRkVW5p dEJhc2VBZGRyZXNzICsNCj4gUl9GU1RTX1JFRyk7DQo+IC0NCj4gLSAgaWYgKEZhdWx0UmVnICYg Ql9GU1RTX1JFR19JUUUpIHsNCj4gLSAgICBERUJVRygoREVCVUdfRVJST1IsICJEZXRlY3QgSW52 YWxpZGF0aW9uIFF1ZXVlIEVycm9yIFsweCUwOHhdXG4iLA0KPiBGYXVsdFJlZykpOw0KPiAtICAg IEZhdWx0UmVnIHw9IEJfRlNUU19SRUdfSVFFOw0KPiAtICAgIE1taW9Xcml0ZTMyICgoVUlOVE4p VlRkVW5pdEluZm8tPlZ0ZFVuaXRCYXNlQWRkcmVzcyArIFJfRlNUU19SRUcsDQo+IEZhdWx0UmVn KTsNCj4gLSAgICByZXR1cm4gUkVUVVJOX0RFVklDRV9FUlJPUjsNCj4gLSAgfQ0KPiAtDQo+IC0g IGlmIChGYXVsdFJlZyAmIEJfRlNUU19SRUdfSVRFKSB7DQo+IC0gICAgREVCVUcoKERFQlVHX0VS Uk9SLCAiRGV0ZWN0IEludmFsaWRhdGlvbiBUaW1lLW91dCBFcnJvciBbMHglMDh4XVxuIiwNCj4g RmF1bHRSZWcpKTsNCj4gLSAgICBGYXVsdFJlZyB8PSBCX0ZTVFNfUkVHX0lURTsNCj4gLSAgICBN bWlvV3JpdGUzMiAoKFVJTlROKVZUZFVuaXRJbmZvLT5WdGRVbml0QmFzZUFkZHJlc3MgKyBSX0ZT VFNfUkVHLA0KPiBGYXVsdFJlZyk7DQo+IC0gICAgcmV0dXJuIFJFVFVSTl9ERVZJQ0VfRVJST1I7 DQo+IC0gIH0NCj4gLQ0KPiAtICBpZiAoRmF1bHRSZWcgJiBCX0ZTVFNfUkVHX0lDRSkgew0KPiAt ICAgIERFQlVHKChERUJVR19FUlJPUiwgIkRldGVjdCBJbnZhbGlkYXRpb24gQ29tcGxldGlvbiBF cnJvcg0KPiBbMHglMDh4XVxuIiwgRmF1bHRSZWcpKTsNCj4gLSAgICBGYXVsdFJlZyB8PSBCX0ZT VFNfUkVHX0lDRTsNCj4gLSAgICBNbWlvV3JpdGUzMiAoKFVJTlROKVZUZFVuaXRJbmZvLT5WdGRV bml0QmFzZUFkZHJlc3MgKyBSX0ZTVFNfUkVHLA0KPiBGYXVsdFJlZyk7DQo+ICsgIEZhdWx0UmVn ID0gTW1pb1JlYWQzMiAoVlRkVW5pdEluZm8tPlZ0ZFVuaXRCYXNlQWRkcmVzcyArDQo+IFJfRlNU U19SRUcpOw0KPiArICBpZiAoRmF1bHRSZWcgJiAoQl9GU1RTX1JFR19JUUUgfCBCX0ZTVFNfUkVH X0lURSB8IEJfRlNUU19SRUdfSUNFKSkgew0KPiArICAgIERFQlVHKChERUJVR19FUlJPUiwgIkRl dGVjdCBRdWV1ZSBJbnZhbGlkYXRpb24gRXJyb3IgWzB4JTA4eF1cbiIsDQo+IEZhdWx0UmVnKSk7 DQo+ICsgICAgRmF1bHRSZWcgfD0gKEJfRlNUU19SRUdfSVFFIHwgQl9GU1RTX1JFR19JVEUgfCBC X0ZTVFNfUkVHX0lDRSk7DQo+ICsgICAgTW1pb1dyaXRlMzIgKFZUZFVuaXRJbmZvLT5WdGRVbml0 QmFzZUFkZHJlc3MgKyBSX0ZTVFNfUkVHLA0KPiBGYXVsdFJlZyk7DQo+ICAgICAgcmV0dXJuIFJF VFVSTl9ERVZJQ0VfRVJST1I7DQo+ICAgIH0NCj4gDQo+IEBAIC0yNTYsNyArMjM5LDcgQEAgU3Vi bWl0UXVldWVkSW52YWxpZGF0aW9uRGVzY3JpcHRvciAoDQo+ICAgICAgcmV0dXJuIEVGSV9JTlZB TElEX1BBUkFNRVRFUjsNCj4gICAgfQ0KPiANCj4gLSAgUWlEZXNjTGVuZ3RoID0gVlRkVW5pdElu Zm8tPlFpRGVzY0xlbmd0aDsNCj4gKyAgUWlEZXNjTGVuZ3RoID0gMSA8PCAoVlRkVW5pdEluZm8t PlF1ZXVlU2l6ZSArIDgpOw0KPiAgICBCYXNlRGVzYyA9IFZUZFVuaXRJbmZvLT5RaURlc2M7DQo+ IA0KPiAgICBERUJVRygoREVCVUdfSU5GTywgIlsweCV4XSBTdWJtaXQgUUkgRGVzY3JpcHRvciBb MHglMDh4LCAweCUwOHhdXG4iLA0KPiBWVGRVbml0SW5mby0+VnRkVW5pdEJhc2VBZGRyZXNzLCBE ZXNjLT5Mb3csIERlc2MtPkhpZ2gpKTsNCj4gQEAgLTI2OCwxMiArMjUxLDEyIEBAIFN1Ym1pdFF1 ZXVlZEludmFsaWRhdGlvbkRlc2NyaXB0b3IgKA0KPiAgICBERUJVRygoREVCVUdfSU5GTywiUUkg RnJlZSBIZWFkPTB4JXhcbiIsIFZUZFVuaXRJbmZvLQ0KPiA+UWlGcmVlSGVhZCkpOw0KPiAgICBW VGRVbml0SW5mby0+UWlGcmVlSGVhZCA9IChWVGRVbml0SW5mby0+UWlGcmVlSGVhZCArIDEpICUN Cj4gUWlEZXNjTGVuZ3RoOw0KPiANCj4gLSAgUmVnNjRJcWggPSBNbWlvUmVhZDY0ICgoVUlOVE4p VlRkVW5pdEluZm8tPlZ0ZFVuaXRCYXNlQWRkcmVzcyArDQo+IFJfSVFIX1JFRyk7DQo+ICsgIFJl ZzY0SXFoID0gTW1pb1JlYWQ2NCAoVlRkVW5pdEluZm8tPlZ0ZFVuaXRCYXNlQWRkcmVzcyArDQo+ IFJfSVFIX1JFRyk7DQo+ICAgIC8vDQo+ICAgIC8vIFVwZGF0ZSB0aGUgSFcgdGFpbCByZWdpc3Rl ciBpbmRpY2F0aW5nIHRoZSBwcmVzZW5jZSBvZiBuZXcgZGVzY3JpcHRvcnMuDQo+ICAgIC8vDQo+ ICAgIFJlZzY0SXF0ID0gVlRkVW5pdEluZm8tPlFpRnJlZUhlYWQgPDwgRE1BUl9JUV9TSElGVDsN Cj4gLSAgTW1pb1dyaXRlNjQgKChVSU5UTilWVGRVbml0SW5mby0+VnRkVW5pdEJhc2VBZGRyZXNz ICsgUl9JUVRfUkVHLA0KPiBSZWc2NElxdCk7DQo+ICsgIE1taW9Xcml0ZTY0IChWVGRVbml0SW5m by0+VnRkVW5pdEJhc2VBZGRyZXNzICsgUl9JUVRfUkVHLA0KPiBSZWc2NElxdCk7DQo+IA0KPiAg ICBTdGF0dXMgPSBFRklfU1VDQ0VTUzsNCj4gICAgZG8gew0KPiBAQCAtMjgzLDcgKzI2Niw3IEBA IFN1Ym1pdFF1ZXVlZEludmFsaWRhdGlvbkRlc2NyaXB0b3IgKA0KPiAgICAgICAgYnJlYWs7DQo+ ICAgICAgfQ0KPiANCj4gLSAgICBSZWc2NElxaCA9IE1taW9SZWFkNjQgKChVSU5UTilWVGRVbml0 SW5mby0+VnRkVW5pdEJhc2VBZGRyZXNzICsNCj4gUl9JUUhfUkVHKTsNCj4gKyAgICBSZWc2NElx aCA9IE1taW9SZWFkNjQgKFZUZFVuaXRJbmZvLT5WdGRVbml0QmFzZUFkZHJlc3MgKw0KPiBSX0lR SF9SRUcpOw0KPiAgICB9IHdoaWxlIChSZWc2NElxdCAhPSBSZWc2NElxaCk7DQo+IA0KPiAgICBE RUJVRygoREVCVUdfRVJST1IsIlN1Ym1pdFF1ZXVlZEludmFsaWRhdGlvbkRlc2NyaXB0b3IgZW5k XG4iKSk7DQo+IEBAIC0zMDcsMTggKzI5MCwxOCBAQCBJbnZhbGlkYXRlQ29udGV4dENhY2hlICgN Cj4gICAgICAvLw0KPiAgICAgIC8vIFJlZ2lzdGVyLWJhc2VkIEludmFsaWRhdGlvbg0KPiAgICAg IC8vDQo+IC0gICAgUmVnNjQgPSBNbWlvUmVhZDY0ICgoVUlOVE4pVlRkVW5pdEluZm8tPlZ0ZFVu aXRCYXNlQWRkcmVzcyArDQo+IFJfQ0NNRF9SRUcpOw0KPiArICAgIFJlZzY0ID0gTW1pb1JlYWQ2 NCAoVlRkVW5pdEluZm8tPlZ0ZFVuaXRCYXNlQWRkcmVzcyArDQo+IFJfQ0NNRF9SRUcpOw0KPiAg ICAgIGlmICgoUmVnNjQgJiBCX0NDTURfUkVHX0lDQykgIT0gMCkgew0KPiAtICAgICAgREVCVUcg KChERUJVR19FUlJPUiwiRVJST1I6IEludmFsaWRhdGVDb250ZXh0Q2FjaGU6DQo+IEJfQ0NNRF9S RUdfSUNDIGlzIHNldCBmb3IgVlREKCV4KVxuIiwgKFVJTlROKVZUZFVuaXRJbmZvLQ0KPiA+VnRk VW5pdEJhc2VBZGRyZXNzKSk7DQo+ICsgICAgICBERUJVRyAoKERFQlVHX0VSUk9SLCJFUlJPUjog SW52YWxpZGF0ZUNvbnRleHRDYWNoZToNCj4gQl9DQ01EX1JFR19JQ0MgaXMgc2V0IGZvciBWVEQo JXgpXG4iLCBWVGRVbml0SW5mby0NCj4gPlZ0ZFVuaXRCYXNlQWRkcmVzcykpOw0KPiAgICAgICAg cmV0dXJuIEVGSV9ERVZJQ0VfRVJST1I7DQo+ICAgICAgfQ0KPiANCj4gICAgICBSZWc2NCAmPSAo KH5CX0NDTURfUkVHX0lDQykgJiAofkJfQ0NNRF9SRUdfQ0lSR19NQVNLKSk7DQo+ICAgICAgUmVn NjQgfD0gKEJfQ0NNRF9SRUdfSUNDIHwgVl9DQ01EX1JFR19DSVJHX0dMT0JBTCk7DQo+IC0gICAg TW1pb1dyaXRlNjQgKChVSU5UTilWVGRVbml0SW5mby0+VnRkVW5pdEJhc2VBZGRyZXNzICsNCj4g Ul9DQ01EX1JFRywgUmVnNjQpOw0KPiArICAgIE1taW9Xcml0ZTY0IChWVGRVbml0SW5mby0+VnRk VW5pdEJhc2VBZGRyZXNzICsgUl9DQ01EX1JFRywNCj4gUmVnNjQpOw0KPiANCj4gICAgICBkbyB7 DQo+IC0gICAgICBSZWc2NCA9IE1taW9SZWFkNjQgKChVSU5UTilWVGRVbml0SW5mby0+VnRkVW5p dEJhc2VBZGRyZXNzICsNCj4gUl9DQ01EX1JFRyk7DQo+ICsgICAgICBSZWc2NCA9IE1taW9SZWFk NjQgKFZUZFVuaXRJbmZvLT5WdGRVbml0QmFzZUFkZHJlc3MgKw0KPiBSX0NDTURfUkVHKTsNCj4g ICAgICB9IHdoaWxlICgoUmVnNjQgJiBCX0NDTURfUkVHX0lDQykgIT0gMCk7DQo+ICAgIH0gZWxz ZSB7DQo+ICAgICAgLy8NCj4gQEAgLTM1MSwyNiArMzM0LDI2IEBAIEludmFsaWRhdGVJT1RMQiAo DQo+ICAgICAgLy8NCj4gICAgICAvLyBSZWdpc3Rlci1iYXNlZCBJbnZhbGlkYXRpb24NCj4gICAg ICAvLw0KPiAtICAgIEVDYXBSZWcuVWludDY0ID0gTW1pb1JlYWQ2NCAoKFVJTlROKVZUZFVuaXRJ bmZvLQ0KPiA+VnRkVW5pdEJhc2VBZGRyZXNzICsgUl9FQ0FQX1JFRyk7DQo+ICsgICAgRUNhcFJl Zy5VaW50NjQgPSBNbWlvUmVhZDY0IChWVGRVbml0SW5mby0+VnRkVW5pdEJhc2VBZGRyZXNzICsN Cj4gUl9FQ0FQX1JFRyk7DQo+IA0KPiAtICAgIFJlZzY0ID0gTW1pb1JlYWQ2NCAoKFVJTlROKVZU ZFVuaXRJbmZvLT5WdGRVbml0QmFzZUFkZHJlc3MgKw0KPiAoRUNhcFJlZy5CaXRzLklSTyAqIDE2 KSArIFJfSU9UTEJfUkVHKTsNCj4gKyAgICBSZWc2NCA9IE1taW9SZWFkNjQgKFZUZFVuaXRJbmZv LT5WdGRVbml0QmFzZUFkZHJlc3MgKw0KPiAoRUNhcFJlZy5CaXRzLklSTyAqIDE2KSArIFJfSU9U TEJfUkVHKTsNCj4gICAgICAgaWYgKChSZWc2NCAmIEJfSU9UTEJfUkVHX0lWVCkgIT0gMCkgew0K PiAtICAgICAgIERFQlVHICgoREVCVUdfRVJST1IsICJFUlJPUjogSW52YWxpZGF0ZUlPVExCOiBC X0lPVExCX1JFR19JVlQgaXMNCj4gc2V0IGZvciBWVEQoJXgpXG4iLCAoVUlOVE4pVlRkVW5pdElu Zm8tPlZ0ZFVuaXRCYXNlQWRkcmVzcykpOw0KPiArICAgICAgIERFQlVHICgoREVCVUdfRVJST1Is ICJFUlJPUjogSW52YWxpZGF0ZUlPVExCOiBCX0lPVExCX1JFR19JVlQgaXMNCj4gc2V0IGZvciBW VEQoJXgpXG4iLCBWVGRVbml0SW5mby0+VnRkVW5pdEJhc2VBZGRyZXNzKSk7DQo+ICAgICAgICAg cmV0dXJuIEVGSV9ERVZJQ0VfRVJST1I7DQo+ICAgICAgfQ0KPiANCj4gICAgICBSZWc2NCAmPSAo KH5CX0lPVExCX1JFR19JVlQpICYgKH5CX0lPVExCX1JFR19JSVJHX01BU0spKTsNCj4gICAgICBS ZWc2NCB8PSAoQl9JT1RMQl9SRUdfSVZUIHwgVl9JT1RMQl9SRUdfSUlSR19HTE9CQUwpOw0KPiAt ICAgIE1taW9Xcml0ZTY0ICgoVUlOVE4pVlRkVW5pdEluZm8tPlZ0ZFVuaXRCYXNlQWRkcmVzcyAr DQo+IChFQ2FwUmVnLkJpdHMuSVJPICogMTYpICsgUl9JT1RMQl9SRUcsIFJlZzY0KTsNCj4gKyAg ICBNbWlvV3JpdGU2NCAoVlRkVW5pdEluZm8tPlZ0ZFVuaXRCYXNlQWRkcmVzcyArIChFQ2FwUmVn LkJpdHMuSVJPICoNCj4gMTYpICsgUl9JT1RMQl9SRUcsIFJlZzY0KTsNCj4gDQo+ICAgICAgZG8g ew0KPiAtICAgICAgUmVnNjQgPSBNbWlvUmVhZDY0ICgoVUlOVE4pVlRkVW5pdEluZm8tPlZ0ZFVu aXRCYXNlQWRkcmVzcyArDQo+IChFQ2FwUmVnLkJpdHMuSVJPICogMTYpICsgUl9JT1RMQl9SRUcp Ow0KPiArICAgICAgUmVnNjQgPSBNbWlvUmVhZDY0IChWVGRVbml0SW5mby0+VnRkVW5pdEJhc2VB ZGRyZXNzICsNCj4gKEVDYXBSZWcuQml0cy5JUk8gKiAxNikgKyBSX0lPVExCX1JFRyk7DQo+ICAg ICAgfSB3aGlsZSAoKFJlZzY0ICYgQl9JT1RMQl9SRUdfSVZUKSAhPSAwKTsNCj4gICAgfSBlbHNl IHsNCj4gICAgICAvLw0KPiAgICAgIC8vIFF1ZXVlZCBJbnZhbGlkYXRpb24NCj4gICAgICAvLw0K PiAtICAgIEVDYXBSZWcuVWludDY0ID0gTW1pb1JlYWQ2NCAoKFVJTlROKVZUZFVuaXRJbmZvLQ0K PiA+VnRkVW5pdEJhc2VBZGRyZXNzICsgUl9FQ0FQX1JFRyk7DQo+ICsgICAgRUNhcFJlZy5VaW50 NjQgPSBNbWlvUmVhZDY0IChWVGRVbml0SW5mby0+VnRkVW5pdEJhc2VBZGRyZXNzICsNCj4gUl9F Q0FQX1JFRyk7DQo+ICAgICAgUWlEZXNjLkxvdyA9IFFJX0lPVExCX0RJRCgwKSB8DQo+IFFJX0lP VExCX0RSKENBUF9SRUFEX0RSQUlOKEVDYXBSZWcuVWludDY0KSkgfA0KPiBRSV9JT1RMQl9EVyhD QVBfV1JJVEVfRFJBSU4oRUNhcFJlZy5VaW50NjQpKSB8IFFJX0lPVExCX0dSQU4oMSkgfA0KPiBR SV9JT1RMQl9UWVBFOw0KPiAgICAgIFFpRGVzYy5IaWdoID0gUUlfSU9UTEJfQUREUigwKSB8IFFJ X0lPVExCX0lIKDApIHwgUUlfSU9UTEJfQU0oMCk7DQo+IA0KPiBAQCAtMzkyLDE0ICszNzUsMTQg QEAgSW52YWxpZGF0ZUlPVExCICgNCj4gIEVGSV9TVEFUVVMNCj4gIEVuYWJsZURtYXJQcmVNZW0g KA0KPiAgICBJTiBVSU5UTiAgICAgICAgICAgICAgICAgICAgICAgIFZ0ZFVuaXRCYXNlQWRkcmVz cywNCj4gLSAgSU4gVUlOVE4gICAgICAgICAgICAgICAgICAgICAgICBSdGFkZHJSZWdWYWx1ZQ0K PiArICBJTiBVSU5UNjQgICAgICAgICAgICAgICAgICAgICAgIFJ0YWRkclJlZ1ZhbHVlDQo+ICAg ICkNCj4gIHsNCj4gICAgVUlOVDMyICAgICAgICAgICAgICAgICAgICAgICAgICBSZWczMjsNCj4g DQo+ICAgIERFQlVHICgoREVCVUdfSU5GTywgIj4+Pj4+PkVuYWJsZURtYXJQcmVNZW0oKSBmb3Ig ZW5naW5lIFsleF0gXG4iLA0KPiBWdGRVbml0QmFzZUFkZHJlc3MpKTsNCj4gDQo+IC0gIERFQlVH ICgoREVCVUdfSU5GTywgIlJUQUREUl9SRUcgOiAweCV4IFxuIiwgUnRhZGRyUmVnVmFsdWUpKTsN Cj4gKyAgREVCVUcgKChERUJVR19JTkZPLCAiUlRBRERSX1JFRyA6IDB4JTAxNmx4IFxuIiwgUnRh ZGRyUmVnVmFsdWUpKTsNCj4gICAgTW1pb1dyaXRlNjQgKFZ0ZFVuaXRCYXNlQWRkcmVzcyArIFJf UlRBRERSX1JFRywgKFVJTlQ2NCkNCj4gUnRhZGRyUmVnVmFsdWUpOw0KPiANCj4gICAgUmVnMzIg PSBNbWlvUmVhZDMyIChWdGRVbml0QmFzZUFkZHJlc3MgKyBSX0dTVFNfUkVHKTsNCj4gQEAgLTQ1 MiwzMCArNDM1LDMzIEBAIEVuYWJsZURtYXIgKA0KPiAgICApDQo+ICB7DQo+ICAgIFVJTlQzMiAg ICAgICAgICAgICAgICAgICAgICAgIFJlZzMyOw0KPiArICBVSU5UTiAgICAgICAgICAgICAgICAg ICAgICAgICBWdGRVbml0QmFzZUFkZHJlc3M7DQo+IA0KPiAtICBERUJVRyAoKERFQlVHX0lORk8s ICI+Pj4+Pj5FbmFibGVEbWFyKCkgZm9yIGVuZ2luZSBbJXhdIFxuIiwNCj4gVlRkVW5pdEluZm8t PlZ0ZFVuaXRCYXNlQWRkcmVzcykpOw0KPiArICBWdGRVbml0QmFzZUFkZHJlc3MgPSBWVGRVbml0 SW5mby0+VnRkVW5pdEJhc2VBZGRyZXNzOw0KPiArDQo+ICsgIERFQlVHICgoREVCVUdfSU5GTywg Ij4+Pj4+PkVuYWJsZURtYXIoKSBmb3IgZW5naW5lIFsleF0gXG4iLA0KPiBWdGRVbml0QmFzZUFk ZHJlc3MpKTsNCj4gDQo+ICAgIERFQlVHICgoREVCVUdfSU5GTywgIlJvb3RFbnRyeVRhYmxlIDB4 JXggXG4iLCBSb290RW50cnlUYWJsZSkpOw0KPiAtICBNbWlvV3JpdGU2NCAoKFVJTlROKVZUZFVu aXRJbmZvLT5WdGRVbml0QmFzZUFkZHJlc3MgKw0KPiBSX1JUQUREUl9SRUcsIChVSU5UNjQpIChV SU5UTikgUm9vdEVudHJ5VGFibGUpOw0KPiArICBNbWlvV3JpdGU2NCAoVnRkVW5pdEJhc2VBZGRy ZXNzICsgUl9SVEFERFJfUkVHLCAoVUlOVDY0KQ0KPiBSb290RW50cnlUYWJsZSk7DQo+IA0KPiAt ICBSZWczMiA9IE1taW9SZWFkMzIgKChVSU5UTilWVGRVbml0SW5mby0+VnRkVW5pdEJhc2VBZGRy ZXNzICsNCj4gUl9HU1RTX1JFRyk7DQo+IC0gIE1taW9Xcml0ZTMyICgoVUlOVE4pVlRkVW5pdElu Zm8tPlZ0ZFVuaXRCYXNlQWRkcmVzcyArDQo+IFJfR0NNRF9SRUcsIFJlZzMyIHwgQl9HTUNEX1JF R19TUlRQKTsNCj4gKyAgUmVnMzIgPSBNbWlvUmVhZDMyIChWdGRVbml0QmFzZUFkZHJlc3MgKyBS X0dTVFNfUkVHKTsNCj4gKyAgTW1pb1dyaXRlMzIgKFZ0ZFVuaXRCYXNlQWRkcmVzcyArIFJfR0NN RF9SRUcsIFJlZzMyIHwNCj4gQl9HTUNEX1JFR19TUlRQKTsNCj4gDQo+ICAgIERFQlVHICgoREVC VUdfSU5GTywgIkVuYWJsZURtYXI6IHdhaXRpbmcgZm9yIFJUUFMgYml0IHRvIGJlIHNldC4uLiBc biIpKTsNCj4gICAgZG8gew0KPiAtICAgIFJlZzMyID0gTW1pb1JlYWQzMiAoKFVJTlROKVZUZFVu aXRJbmZvLT5WdGRVbml0QmFzZUFkZHJlc3MgKw0KPiBSX0dTVFNfUkVHKTsNCj4gKyAgICBSZWcz MiA9IE1taW9SZWFkMzIgKFZ0ZFVuaXRCYXNlQWRkcmVzcyArIFJfR1NUU19SRUcpOw0KPiAgICB9 IHdoaWxlKChSZWczMiAmIEJfR1NUU19SRUdfUlRQUykgPT0gMCk7DQo+ICAgIERFQlVHICgoREVC VUdfSU5GTywgIkVuYWJsZURtYXI6IFJfR1NUU19SRUcgPSAweCV4IFxuIiwgUmVnMzIpKTsNCj4g DQo+ICAgIC8vDQo+ICAgIC8vIEluaXQgRE1BciBGYXVsdCBFdmVudCBhbmQgRGF0YSByZWdpc3Rl cnMNCj4gICAgLy8NCj4gLSAgUmVnMzIgPSBNbWlvUmVhZDMyICgoVUlOVE4pVlRkVW5pdEluZm8t PlZ0ZFVuaXRCYXNlQWRkcmVzcyArDQo+IFJfRkVEQVRBX1JFRyk7DQo+ICsgIFJlZzMyID0gTW1p b1JlYWQzMiAoVnRkVW5pdEJhc2VBZGRyZXNzICsgUl9GRURBVEFfUkVHKTsNCj4gDQo+ICAgIC8v DQo+ICAgIC8vIFdyaXRlIEJ1ZmZlciBGbHVzaCBiZWZvcmUgaW52YWxpZGF0aW9uDQo+ICAgIC8v DQo+IC0gIEZsdXNoV3JpdGVCdWZmZXIgKChVSU5UTilWVGRVbml0SW5mby0+VnRkVW5pdEJhc2VB ZGRyZXNzKTsNCj4gKyAgRmx1c2hXcml0ZUJ1ZmZlciAoVnRkVW5pdEJhc2VBZGRyZXNzKTsNCj4g DQo+ICAgIC8vDQo+ICAgIC8vIEludmFsaWRhdGUgdGhlIGNvbnRleHQgY2FjaGUNCj4gQEAgLTQ5 MCwxMSArNDc2LDExIEBAIEVuYWJsZURtYXIgKA0KPiAgICAvLw0KPiAgICAvLyBFbmFibGUgVlRk DQo+ICAgIC8vDQo+IC0gIFJlZzMyID0gTW1pb1JlYWQzMiAoKFVJTlROKVZUZFVuaXRJbmZvLT5W dGRVbml0QmFzZUFkZHJlc3MgKw0KPiBSX0dTVFNfUkVHKTsNCj4gLSAgTW1pb1dyaXRlMzIgKChV SU5UTilWVGRVbml0SW5mby0+VnRkVW5pdEJhc2VBZGRyZXNzICsNCj4gUl9HQ01EX1JFRywgUmVn MzIgfCBCX0dNQ0RfUkVHX1RFKTsNCj4gKyAgUmVnMzIgPSBNbWlvUmVhZDMyIChWdGRVbml0QmFz ZUFkZHJlc3MgKyBSX0dTVFNfUkVHKTsNCj4gKyAgTW1pb1dyaXRlMzIgKFZ0ZFVuaXRCYXNlQWRk cmVzcyArIFJfR0NNRF9SRUcsIFJlZzMyIHwNCj4gQl9HTUNEX1JFR19URSk7DQo+ICAgIERFQlVH ICgoREVCVUdfSU5GTywgIkVuYWJsZURtYXI6IFdhaXRpbmcgQl9HU1RTX1JFR19URSAuLi5cbiIp KTsNCj4gICAgZG8gew0KPiAtICAgIFJlZzMyID0gTW1pb1JlYWQzMiAoKFVJTlROKVZUZFVuaXRJ bmZvLT5WdGRVbml0QmFzZUFkZHJlc3MgKw0KPiBSX0dTVFNfUkVHKTsNCj4gKyAgICBSZWczMiA9 IE1taW9SZWFkMzIgKFZ0ZFVuaXRCYXNlQWRkcmVzcyArIFJfR1NUU19SRUcpOw0KPiAgICB9IHdo aWxlICgoUmVnMzIgJiBCX0dTVFNfUkVHX1RFKSA9PSAwKTsNCj4gDQo+ICAgIERFQlVHICgoREVC VUdfSU5GTywgIlZURCAoKSBlbmFibGVkITw8PDw8PFxuIikpOw0KPiBAQCAtNTY2LDEzOSArNTUy LDUyIEBAIERpc2FibGVEbWFyICgNCj4gIH0NCj4gDQo+ICAvKioNCj4gLSAgRHVtcCBWVGQgdmVy c2lvbiByZWdpc3RlcnMuDQo+ICsgIEVuYWJsZSBWVGQgdHJhbnNsYXRpb24gdGFibGUgcHJvdGVj dGlvbiBmb3IgYmxvY2sgRE1BDQo+IA0KPiAtICBAcGFyYW1baW5dICBWZXJSZWcgICAgICAgICAg ICBUaGUgdmVyc2lvbiByZWdpc3Rlci4NCj4gLSoqLw0KPiAtVk9JRA0KPiAtRHVtcFZ0ZFZlclJl Z3MgKA0KPiAtICBJTiBWVERfVkVSX1JFRyAgICAgICAgICAgICAgICAqVmVyUmVnDQo+IC0gICkN Cj4gLXsNCj4gLSAgREVCVUcgKChERUJVR19JTkZPLCAiICBWZXJSZWc6XG4iLCBWZXJSZWctPlVp bnQzMikpOw0KPiAtICBERUJVRyAoKERFQlVHX0lORk8sICIgICAgTWFqb3IgICAgLSAweCV4XG4i LCBWZXJSZWctPkJpdHMuTWFqb3IpKTsNCj4gLSAgREVCVUcgKChERUJVR19JTkZPLCAiICAgIE1p bm9yICAgIC0gMHgleFxuIiwgVmVyUmVnLT5CaXRzLk1pbm9yKSk7DQo+IC19DQo+IC0NCj4gLS8q Kg0KPiAtICBEdW1wIFZUZCBjYXBhYmlsaXR5IHJlZ2lzdGVycy4NCj4gLQ0KPiAtICBAcGFyYW1b aW5dICBDYXBSZWcgICAgICAgICAgICBUaGUgY2FwYWJpbGl0eSByZWdpc3Rlci4NCj4gLSoqLw0K PiAtVk9JRA0KPiAtRHVtcFZ0ZENhcFJlZ3MgKA0KPiAtICBJTiBWVERfQ0FQX1JFRyAgICAgICAg ICAgICAgICAqQ2FwUmVnDQo+IC0gICkNCj4gLXsNCj4gLSAgREVCVUcgKChERUJVR19JTkZPLCAi ICBDYXBSZWc6XG4iLCBDYXBSZWctPlVpbnQ2NCkpOw0KPiAtICBERUJVRyAoKERFQlVHX0lORk8s ICIgICAgTkQgICAgIC0gMHgleFxuIiwgQ2FwUmVnLT5CaXRzLk5EKSk7DQo+IC0gIERFQlVHICgo REVCVUdfSU5GTywgIiAgICBBRkwgICAgLSAweCV4XG4iLCBDYXBSZWctPkJpdHMuQUZMKSk7DQo+ IC0gIERFQlVHICgoREVCVUdfSU5GTywgIiAgICBSV0JGICAgLSAweCV4XG4iLCBDYXBSZWctPkJp dHMuUldCRikpOw0KPiAtICBERUJVRyAoKERFQlVHX0lORk8sICIgICAgUExNUiAgIC0gMHgleFxu IiwgQ2FwUmVnLT5CaXRzLlBMTVIpKTsNCj4gLSAgREVCVUcgKChERUJVR19JTkZPLCAiICAgIFBI TVIgICAtIDB4JXhcbiIsIENhcFJlZy0+Qml0cy5QSE1SKSk7DQo+IC0gIERFQlVHICgoREVCVUdf SU5GTywgIiAgICBDTSAgICAgLSAweCV4XG4iLCBDYXBSZWctPkJpdHMuQ00pKTsNCj4gLSAgREVC VUcgKChERUJVR19JTkZPLCAiICAgIFNBR0FXICAtIDB4JXhcbiIsIENhcFJlZy0+Qml0cy5TQUdB VykpOw0KPiAtICBERUJVRyAoKERFQlVHX0lORk8sICIgICAgTUdBVyAgIC0gMHgleFxuIiwgQ2Fw UmVnLT5CaXRzLk1HQVcpKTsNCj4gLSAgREVCVUcgKChERUJVR19JTkZPLCAiICAgIFpMUiAgICAt IDB4JXhcbiIsIENhcFJlZy0+Qml0cy5aTFIpKTsNCj4gLSAgREVCVUcgKChERUJVR19JTkZPLCAi ICAgIEZSTyAgICAtIDB4JXhcbiIsIENhcFJlZy0+Qml0cy5GUk8pKTsNCj4gLSAgREVCVUcgKChE RUJVR19JTkZPLCAiICAgIFNMTFBTICAtIDB4JXhcbiIsIENhcFJlZy0+Qml0cy5TTExQUykpOw0K PiAtICBERUJVRyAoKERFQlVHX0lORk8sICIgICAgUFNJICAgIC0gMHgleFxuIiwgQ2FwUmVnLT5C aXRzLlBTSSkpOw0KPiAtICBERUJVRyAoKERFQlVHX0lORk8sICIgICAgTkZSICAgIC0gMHgleFxu IiwgQ2FwUmVnLT5CaXRzLk5GUikpOw0KPiAtICBERUJVRyAoKERFQlVHX0lORk8sICIgICAgTUFN ViAgIC0gMHgleFxuIiwgQ2FwUmVnLT5CaXRzLk1BTVYpKTsNCj4gLSAgREVCVUcgKChERUJVR19J TkZPLCAiICAgIERXRCAgICAtIDB4JXhcbiIsIENhcFJlZy0+Qml0cy5EV0QpKTsNCj4gLSAgREVC VUcgKChERUJVR19JTkZPLCAiICAgIERSRCAgICAtIDB4JXhcbiIsIENhcFJlZy0+Qml0cy5EUkQp KTsNCj4gLSAgREVCVUcgKChERUJVR19JTkZPLCAiICAgIEZMMUdQICAtIDB4JXhcbiIsIENhcFJl Zy0+Qml0cy5GTDFHUCkpOw0KPiAtICBERUJVRyAoKERFQlVHX0lORk8sICIgICAgUEkgICAgIC0g MHgleFxuIiwgQ2FwUmVnLT5CaXRzLlBJKSk7DQo+IC19DQo+ICsgIEBwYXJhbVtpbl0gVnRkVW5p dEJhc2VBZGRyZXNzIFRoZSBiYXNlIGFkZHJlc3Mgb2YgdGhlIFZUZCBlbmdpbmUuDQo+IA0KPiAt LyoqDQo+IC0gIER1bXAgVlRkIGV4dGVuZGVkIGNhcGFiaWxpdHkgcmVnaXN0ZXJzLg0KPiAtDQo+ IC0gIEBwYXJhbVtpbl0gIEVDYXBSZWcgICAgICAgICAgIFRoZSBleHRlbmRlZCBjYXBhYmlsaXR5 IHJlZ2lzdGVyLg0KPiArICBAcmV0dmFsIEVGSV9TVUNDRVNTICAgICAgICAgRE1BUiB0cmFuc2xh dGlvbiBpcyBlbmFibGVkLg0KPiArICBAcmV0dmFsIEVGSV9ERVZJQ0VfRVJST1IgICAgRE1BUiB0 cmFuc2xhdGlvbiBpcyBub3QgZW5hYmxlZC4NCj4gICoqLw0KPiAtVk9JRA0KPiAtRHVtcFZ0ZEVD YXBSZWdzICgNCj4gLSAgSU4gVlREX0VDQVBfUkVHICAgICAgICAgICAgICAgKkVDYXBSZWcNCj4g LSAgKQ0KPiAtew0KPiAtICBERUJVRyAoKERFQlVHX0lORk8sICIgIEVDYXBSZWc6XG4iLCBFQ2Fw UmVnLT5VaW50NjQpKTsNCj4gLSAgREVCVUcgKChERUJVR19JTkZPLCAiICAgIEMgICAgICAtIDB4 JXhcbiIsIEVDYXBSZWctPkJpdHMuQykpOw0KPiAtICBERUJVRyAoKERFQlVHX0lORk8sICIgICAg UUkgICAgIC0gMHgleFxuIiwgRUNhcFJlZy0+Qml0cy5RSSkpOw0KPiAtICBERUJVRyAoKERFQlVH X0lORk8sICIgICAgRFQgICAgIC0gMHgleFxuIiwgRUNhcFJlZy0+Qml0cy5EVCkpOw0KPiAtICBE RUJVRyAoKERFQlVHX0lORk8sICIgICAgSVIgICAgIC0gMHgleFxuIiwgRUNhcFJlZy0+Qml0cy5J UikpOw0KPiAtICBERUJVRyAoKERFQlVHX0lORk8sICIgICAgRUlNICAgIC0gMHgleFxuIiwgRUNh cFJlZy0+Qml0cy5FSU0pKTsNCj4gLSAgREVCVUcgKChERUJVR19JTkZPLCAiICAgIFBUICAgICAt IDB4JXhcbiIsIEVDYXBSZWctPkJpdHMuUFQpKTsNCj4gLSAgREVCVUcgKChERUJVR19JTkZPLCAi ICAgIFNDICAgICAtIDB4JXhcbiIsIEVDYXBSZWctPkJpdHMuU0MpKTsNCj4gLSAgREVCVUcgKChE RUJVR19JTkZPLCAiICAgIElSTyAgICAtIDB4JXhcbiIsIEVDYXBSZWctPkJpdHMuSVJPKSk7DQo+ IC0gIERFQlVHICgoREVCVUdfSU5GTywgIiAgICBNSE1WICAgLSAweCV4XG4iLCBFQ2FwUmVnLT5C aXRzLk1ITVYpKTsNCj4gLSAgREVCVUcgKChERUJVR19JTkZPLCAiICAgIE1UUyAgICAtIDB4JXhc biIsIEVDYXBSZWctPkJpdHMuTVRTKSk7DQo+IC0gIERFQlVHICgoREVCVUdfSU5GTywgIiAgICBO RVNUICAgLSAweCV4XG4iLCBFQ2FwUmVnLT5CaXRzLk5FU1QpKTsNCj4gLSAgREVCVUcgKChERUJV R19JTkZPLCAiICAgIFBBU0lEICAtIDB4JXhcbiIsIEVDYXBSZWctPkJpdHMuUEFTSUQpKTsNCj4g LSAgREVCVUcgKChERUJVR19JTkZPLCAiICAgIFBSUyAgICAtIDB4JXhcbiIsIEVDYXBSZWctPkJp dHMuUFJTKSk7DQo+IC0gIERFQlVHICgoREVCVUdfSU5GTywgIiAgICBFUlMgICAgLSAweCV4XG4i LCBFQ2FwUmVnLT5CaXRzLkVSUykpOw0KPiAtICBERUJVRyAoKERFQlVHX0lORk8sICIgICAgU1JT ICAgIC0gMHgleFxuIiwgRUNhcFJlZy0+Qml0cy5TUlMpKTsNCj4gLSAgREVCVUcgKChERUJVR19J TkZPLCAiICAgIE5XRlMgICAtIDB4JXhcbiIsIEVDYXBSZWctPkJpdHMuTldGUykpOw0KPiAtICBE RUJVRyAoKERFQlVHX0lORk8sICIgICAgRUFGUyAgIC0gMHgleFxuIiwgRUNhcFJlZy0+Qml0cy5F QUZTKSk7DQo+IC0gIERFQlVHICgoREVCVUdfSU5GTywgIiAgICBQU1MgICAgLSAweCV4XG4iLCBF Q2FwUmVnLT5CaXRzLlBTUykpOw0KPiAtICBERUJVRyAoKERFQlVHX0lORk8sICIgICAgQURNUyAg IC0gMHgleFxuIiwgRUNhcFJlZy0+Qml0cy5BRE1TKSk7DQo+IC19DQo+IC0NCj4gLQ0KPiAtLyoq DQo+IC0gIEVuYWJsZSBWVGQgdHJhbnNsYXRpb24gdGFibGUgcHJvdGVjdGlvbiBmb3IgYWxsLg0K PiAtDQo+IC0gIEBwYXJhbVtpbl0gIFZUZEluZm8gICAgICAgICAgIFRoZSBWVGQgZW5naW5lIGNv bnRleHQgaW5mb3JtYXRpb24uDQo+IC0gIEBwYXJhbVtpbl0gIEVuZ2luZU1hc2sgICAgICAgIFRo ZSBtYXNrIG9mIHRoZSBWVGQgZW5naW5lIHRvIGJlIGFjY2Vzc2VkLg0KPiAtKiovDQo+IC1WT0lE DQo+IC1FbmFibGVWVGRUcmFuc2xhdGlvblByb3RlY3Rpb25BbGwgKA0KPiAtICBJTiBWVERfSU5G TyAgICAgICAgICAgICAgICAgICAqVlRkSW5mbywNCj4gLSAgSU4gVUlOVDY0ICAgICAgICAgICAg ICAgICAgICAgRW5naW5lTWFzaw0KPiArRUZJX1NUQVRVUw0KPiArRW5hYmxlVlRkVHJhbnNsYXRp b25Qcm90ZWN0aW9uQmxvY2tEbWEgKA0KPiArICBJTiBVSU5UTiAgICAgICAgICAgICAgICAgICAg ICBWdGRVbml0QmFzZUFkZHJlc3MNCj4gICAgKQ0KPiAgew0KPiAtICBFRklfU1RBVFVTICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBTdGF0dXM7DQo+IC0gIEVES0lJX1ZURF9OVUxMX1JP T1RfRU5UUllfVEFCTEVfUFBJICAgICAgICpSb290RW50cnlUYWJsZTsNCj4gLSAgVUlOVE4gICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSW5kZXg7DQo+ICsgIEVGSV9TVEFUVVMg ICAgICAgICAgICAgICAgICAgICAgICAgICAgU3RhdHVzOw0KPiArICBWVERfRUNBUF9SRUcgICAg ICAgICAgICAgICAgICAgICAgICAgIEVDYXBSZWc7DQo+ICsgIEVES0lJX1ZURF9OVUxMX1JPT1Rf RU5UUllfVEFCTEVfUFBJICAgKlJvb3RFbnRyeVRhYmxlOw0KPiANCj4gLSAgREVCVUcgKChERUJV R19JTkZPLCAiRW5hYmxlVlRkVHJhbnNsYXRpb25Qcm90ZWN0aW9uQWxsIC0gMHglbHhcbiIsDQo+ IEVuZ2luZU1hc2spKTsNCj4gKyAgREVCVUcgKChERUJVR19JTkZPLCAiRW5hYmxlVlRkVHJhbnNs YXRpb25Qcm90ZWN0aW9uQmxvY2tEbWEgLQ0KPiAweCUwOHhcbiIsIFZ0ZFVuaXRCYXNlQWRkcmVz cykpOw0KPiANCj4gLSAgZm9yIChJbmRleCA9IDA7IEluZGV4IDwgVlRkSW5mby0+VlRkRW5naW5l Q291bnQ7IEluZGV4KyspIHsNCj4gLSAgICBpZiAoKEVuZ2luZU1hc2sgJiBMU2hpZnRVNjQoMSwg SW5kZXgpKSA9PSAwKSB7DQo+IC0gICAgICBjb250aW51ZTsNCj4gLSAgICB9DQo+ICsgIEVDYXBS ZWcuVWludDY0ID0gTW1pb1JlYWQ2NCAoVnRkVW5pdEJhc2VBZGRyZXNzICsgUl9FQ0FQX1JFRyk7 DQo+ICsgIERFQlVHICgoREVCVUdfSU5GTywgIkVDYXBSZWcgOiAwJTAxNmx4XG4iLCBFQ2FwUmVn LlVpbnQ2NCkpOw0KPiANCj4gLSAgICBWVGRJbmZvLT5WdGRVbml0SW5mb1tJbmRleF0uVmVyUmVn LlVpbnQzMiA9IE1taW9SZWFkMzIgKFZUZEluZm8tDQo+ID5WdGRVbml0SW5mb1tJbmRleF0uVnRk VW5pdEJhc2VBZGRyZXNzICsgUl9WRVJfUkVHKTsNCj4gLSAgICBEdW1wVnRkVmVyUmVncyAoJlZU ZEluZm8tPlZ0ZFVuaXRJbmZvW0luZGV4XS5WZXJSZWcpOw0KPiAtICAgIFZUZEluZm8tPlZ0ZFVu aXRJbmZvW0luZGV4XS5DYXBSZWcuVWludDY0ID0gTW1pb1JlYWQ2NCAoVlRkSW5mby0NCj4gPlZ0 ZFVuaXRJbmZvW0luZGV4XS5WdGRVbml0QmFzZUFkZHJlc3MgKyBSX0NBUF9SRUcpOw0KPiAtICAg IER1bXBWdGRDYXBSZWdzICgmVlRkSW5mby0+VnRkVW5pdEluZm9bSW5kZXhdLkNhcFJlZyk7DQo+ IC0gICAgVlRkSW5mby0+VnRkVW5pdEluZm9bSW5kZXhdLkVDYXBSZWcuVWludDY0ID0gTW1pb1Jl YWQ2NCAoVlRkSW5mby0NCj4gPlZ0ZFVuaXRJbmZvW0luZGV4XS5WdGRVbml0QmFzZUFkZHJlc3Mg KyBSX0VDQVBfUkVHKTsNCj4gLSAgICBEdW1wVnRkRUNhcFJlZ3MgKCZWVGRJbmZvLT5WdGRVbml0 SW5mb1tJbmRleF0uRUNhcFJlZyk7DQo+IC0NCj4gLSAgICBpZiAoVlRkSW5mby0+VnRkVW5pdElu Zm9bSW5kZXhdLkVDYXBSZWcuQml0cy5BRE1TID09IDEpIHsNCj4gLSAgICAgIC8vDQo+IC0gICAg ICAvLyBVc2UgQWJvcnQgRE1BIE1vZGUNCj4gLSAgICAgIC8vDQo+IC0gICAgICBTdGF0dXMgPSBF bmFibGVEbWFyUHJlTWVtIChWVGRJbmZvLQ0KPiA+VnRkVW5pdEluZm9bSW5kZXhdLlZ0ZFVuaXRC YXNlQWRkcmVzcywgVl9SVEFERFJfUkVHX1RUTV9BRE0pOw0KPiAtICAgIH0gZWxzZSB7DQo+IC0g ICAgICAvLw0KPiAtICAgICAgLy8gVXNlIE51bGwgUm9vdCBFbnRyeSBUYWJsZQ0KPiAtICAgICAg Ly8NCj4gLSAgICAgIFN0YXR1cyA9IFBlaVNlcnZpY2VzTG9jYXRlUHBpICgNCj4gLSAgICAgICAg ICAgICAgICAgJmdFZGtpaVZUZE51bGxSb290RW50cnlUYWJsZUd1aWQsDQo+IC0gICAgICAgICAg ICAgICAgIDAsDQo+IC0gICAgICAgICAgICAgICAgIE5VTEwsDQo+IC0gICAgICAgICAgICAgICAg IChWT0lEICoqKSZSb290RW50cnlUYWJsZQ0KPiAtICAgICAgICAgICAgICAgICApOw0KPiAtICAg ICAgaWYgKEVGSV9FUlJPUihTdGF0dXMpKSB7DQo+IC0gICAgICAgIERFQlVHICgoREVCVUdfRVJS T1IsICJMb2NhdGUgTnVsbCBSb290IEVudHJ5IFRhYmxlIFBwaSBGYWlsZWQgOiAlclxuIiwNCj4g U3RhdHVzKSk7DQo+IC0gICAgICAgIEFTU0VSVCAoRkFMU0UpOw0KPiAtICAgICAgICByZXR1cm47 DQo+IC0gICAgICB9DQo+IC0gICAgICBFbmFibGVEbWFyUHJlTWVtIChWVGRJbmZvLT5WdGRVbml0 SW5mb1tJbmRleF0uVnRkVW5pdEJhc2VBZGRyZXNzLA0KPiAoVUlOVE4pICpSb290RW50cnlUYWJs ZSk7DQo+ICsgIGlmIChFQ2FwUmVnLkJpdHMuQURNUyA9PSAxKSB7DQo+ICsgICAgLy8NCj4gKyAg ICAvLyBVc2UgQWJvcnQgRE1BIE1vZGUNCj4gKyAgICAvLw0KPiArICAgIERFQlVHICgoREVCVUdf SU5GTywgIkVuYWJsZSBhYm9ydCBETUEgbW9kZS5cbiIpKTsNCj4gKyAgICBTdGF0dXMgPSBFbmFi bGVEbWFyUHJlTWVtIChWdGRVbml0QmFzZUFkZHJlc3MsDQo+IFZfUlRBRERSX1JFR19UVE1fQURN KTsNCj4gKyAgfSBlbHNlIHsNCj4gKyAgICAvLw0KPiArICAgIC8vIFVzZSBOdWxsIFJvb3QgRW50 cnkgVGFibGUNCj4gKyAgICAvLw0KPiArICAgIFN0YXR1cyA9IFBlaVNlcnZpY2VzTG9jYXRlUHBp ICgNCj4gKyAgICAgICAgICAgICAgICZnRWRraWlWVGROdWxsUm9vdEVudHJ5VGFibGVHdWlkLA0K PiArICAgICAgICAgICAgICAgMCwNCj4gKyAgICAgICAgICAgICAgIE5VTEwsDQo+ICsgICAgICAg ICAgICAgICAoVk9JRCAqKikmUm9vdEVudHJ5VGFibGUNCj4gKyAgICAgICAgICAgICAgICk7DQo+ ICsgICAgaWYgKEVGSV9FUlJPUihTdGF0dXMpKSB7DQo+ICsgICAgICBERUJVRyAoKERFQlVHX0VS Uk9SLCAiTG9jYXRlIE51bGwgUm9vdCBFbnRyeSBUYWJsZSBQcGkgRmFpbGVkIDogJXJcbiIsDQo+ IFN0YXR1cykpOw0KPiArICAgICAgQVNTRVJUIChGQUxTRSk7DQo+ICsgICAgICByZXR1cm4gRUZJ X0RFVklDRV9FUlJPUjsNCj4gICAgICB9DQo+ICsgICAgU3RhdHVzID0gRW5hYmxlRG1hclByZU1l bSAoVnRkVW5pdEJhc2VBZGRyZXNzLCAoVUlOVDY0KQ0KPiAoKlJvb3RFbnRyeVRhYmxlKSk7DQo+ ICAgIH0NCj4gDQo+IC0gIHJldHVybjsNCj4gKyAgcmV0dXJuIFN0YXR1czsNCj4gIH0NCj4gDQo+ ICAvKioNCj4gQEAgLTcxNSwxOCArNjE0LDI1IEBAIEVuYWJsZVZUZFRyYW5zbGF0aW9uUHJvdGVj dGlvbiAoDQo+ICAgICkNCj4gIHsNCj4gICAgRUZJX1NUQVRVUyAgICAgICAgICAgICAgICAgICAg U3RhdHVzOw0KPiAtICBVSU5UTiAgICAgICAgICAgICAgICAgICAgICAgICBWdGRJbmRleDsNCj4g KyAgVUlOVE4gICAgICAgICAgICAgICAgICAgICAgICAgSW5kZXg7DQo+ICsgIFZURF9VTklUX0lO Rk8gICAgICAgICAgICAgICAgICpWdGRVbml0SW5mbzsNCj4gDQo+IC0gIGZvciAoVnRkSW5kZXgg PSAwOyBWdGRJbmRleCA8IFZUZEluZm8tPlZUZEVuZ2luZUNvdW50OyBWdGRJbmRleCsrKSB7DQo+ IC0gICAgaWYgKFZUZEluZm8tPlZ0ZFVuaXRJbmZvW1Z0ZEluZGV4XS5FeHRSb290RW50cnlUYWJs ZSAhPSAwKSB7DQo+IC0gICAgICBERUJVRyAoKERFQlVHX0lORk8sICJFbmFibGVWdGREbWFyICgl ZCkgRXh0Um9vdEVudHJ5VGFibGUNCj4gMHgleFxuIiwgVnRkSW5kZXgsIFZUZEluZm8tPlZ0ZFVu aXRJbmZvW1Z0ZEluZGV4XS5FeHRSb290RW50cnlUYWJsZSkpOw0KPiAtICAgICAgU3RhdHVzID0g RW5hYmxlRG1hciAoJlZUZEluZm8tPlZ0ZFVuaXRJbmZvW1Z0ZEluZGV4XSwgVlRkSW5mby0NCj4g PlZ0ZFVuaXRJbmZvW1Z0ZEluZGV4XS5FeHRSb290RW50cnlUYWJsZSk7DQo+ICsgIGZvciAoSW5k ZXggPSAwOyBJbmRleCA8IFZUZEluZm8tPlZUZEVuZ2luZUNvdW50OyBJbmRleCsrKSB7DQo+ICsg ICAgVnRkVW5pdEluZm8gPSAmVlRkSW5mby0+VnRkVW5pdEluZm9bSW5kZXhdOw0KPiArICAgIGlm IChWdGRVbml0SW5mby0+RG9uZSkgew0KPiArICAgICAgREVCVUcgKChERUJVR19JTkZPLCAiRW5h YmxlVnRkRG1hciAoJWQpIHdhcyBlbmFibGVkXG4iLCBJbmRleCkpOw0KPiArICAgICAgY29udGlu dWU7DQo+ICsgICAgfQ0KPiArDQo+ICsgICAgaWYgKFZ0ZFVuaXRJbmZvLT5FeHRSb290RW50cnlU YWJsZSAhPSAwKSB7DQo+ICsgICAgICBERUJVRyAoKERFQlVHX0lORk8sICJFbmFibGVWdGREbWFy ICglZCkgRXh0Um9vdEVudHJ5VGFibGUNCj4gMHgleFxuIiwgSW5kZXgsIFZ0ZFVuaXRJbmZvLT5F eHRSb290RW50cnlUYWJsZSkpOw0KPiArICAgICAgU3RhdHVzID0gRW5hYmxlRG1hciAoVnRkVW5p dEluZm8sIFZ0ZFVuaXRJbmZvLT5FeHRSb290RW50cnlUYWJsZSk7DQo+ICAgICAgfSBlbHNlIHsN Cj4gLSAgICAgIERFQlVHICgoREVCVUdfSU5GTywgIkVuYWJsZVZ0ZERtYXIgKCVkKSBSb290RW50 cnlUYWJsZSAweCV4XG4iLA0KPiBWdGRJbmRleCwgVlRkSW5mby0+VnRkVW5pdEluZm9bVnRkSW5k ZXhdLlJvb3RFbnRyeVRhYmxlKSk7DQo+IC0gICAgICBTdGF0dXMgPSBFbmFibGVEbWFyICgmVlRk SW5mby0+VnRkVW5pdEluZm9bVnRkSW5kZXhdLCBWVGRJbmZvLQ0KPiA+VnRkVW5pdEluZm9bVnRk SW5kZXhdLlJvb3RFbnRyeVRhYmxlKTsNCj4gKyAgICAgIERFQlVHICgoREVCVUdfSU5GTywgIkVu YWJsZVZ0ZERtYXIgKCVkKSBSb290RW50cnlUYWJsZSAweCV4XG4iLA0KPiBJbmRleCwgVnRkVW5p dEluZm8tPlJvb3RFbnRyeVRhYmxlKSk7DQo+ICsgICAgICBTdGF0dXMgPSBFbmFibGVEbWFyIChW dGRVbml0SW5mbywgVnRkVW5pdEluZm8tPlJvb3RFbnRyeVRhYmxlKTsNCj4gICAgICB9DQo+ICAg ICAgaWYgKEVGSV9FUlJPUiAoU3RhdHVzKSkgew0KPiAtICAgICAgREVCVUcgKChERUJVR19FUlJP UiwgIkVuYWJsZVZ0ZERtYXIgKCVkKSBGYWlsZWQgIVxuIiwgVnRkSW5kZXgpKTsNCj4gKyAgICAg IERFQlVHICgoREVCVUdfRVJST1IsICJFbmFibGVWdGREbWFyICglZCkgRmFpbGVkICFcbiIsIElu ZGV4KSk7DQo+ICAgICAgICByZXR1cm4gU3RhdHVzOw0KPiAgICAgIH0NCj4gICAgfQ0KPiBAQCAt NzM3LDIzICs2NDMsMjIgQEAgRW5hYmxlVlRkVHJhbnNsYXRpb25Qcm90ZWN0aW9uICgNCj4gICAg RGlzYWJsZSBWVGQgdHJhbnNsYXRpb24gdGFibGUgcHJvdGVjdGlvbi4NCj4gDQo+ICAgIEBwYXJh bVtpbl0gIFZUZEluZm8gICAgICAgICAgIFRoZSBWVGQgZW5naW5lIGNvbnRleHQgaW5mb3JtYXRp b24uDQo+IC0gIEBwYXJhbVtpbl0gIEVuZ2luZU1hc2sgICAgICAgIFRoZSBtYXNrIG9mIHRoZSBW VGQgZW5naW5lIHRvIGJlIGFjY2Vzc2VkLg0KPiAgKiovDQo+ICBWT0lEDQo+ICBEaXNhYmxlVlRk VHJhbnNsYXRpb25Qcm90ZWN0aW9uICgNCj4gLSAgSU4gVlREX0lORk8gICAgICAgICAgICAgICAg ICAgKlZUZEluZm8sDQo+IC0gIElOIFVJTlQ2NCAgICAgICAgICAgICAgICAgICAgIEVuZ2luZU1h c2sNCj4gKyAgSU4gVlREX0lORk8gICAgICAgICAgICAgICAgICAgKlZUZEluZm8NCj4gICAgKQ0K PiAgew0KPiAgICBVSU5UTiAgICAgICAgICAgICAgICAgICAgICAgICBJbmRleDsNCj4gDQo+IC0g IERFQlVHICgoREVCVUdfSU5GTywgIkRpc2FibGVWVGRUcmFuc2xhdGlvblByb3RlY3Rpb24gLSAw eCVseFxuIiwNCj4gRW5naW5lTWFzaykpOw0KPiArICBpZiAoVlRkSW5mbyA9PSBOVUxMKSB7DQo+ ICsgICAgcmV0dXJuOw0KPiArICB9DQo+ICsNCj4gKyAgREVCVUcgKChERUJVR19JTkZPLCAiRGlz YWJsZVZUZFRyYW5zbGF0aW9uUHJvdGVjdGlvbiAtICVkIFZ0ZA0KPiBFbmdpbmVcbiIsIFZUZElu Zm8tPlZUZEVuZ2luZUNvdW50KSk7DQo+IA0KPiAgICBmb3IgKEluZGV4ID0gMDsgSW5kZXggPCBW VGRJbmZvLT5WVGRFbmdpbmVDb3VudDsgSW5kZXgrKykgew0KPiAtICAgIGlmICgoRW5naW5lTWFz ayAmIExTaGlmdFU2NCgxLCBJbmRleCkpID09IDApIHsNCj4gLSAgICAgIGNvbnRpbnVlOw0KPiAt ICAgIH0NCj4gLSAgICBEaXNhYmxlRG1hciAoKFVJTlROKSBWVGRJbmZvLQ0KPiA+VnRkVW5pdElu Zm9bSW5kZXhdLlZ0ZFVuaXRCYXNlQWRkcmVzcyk7DQo+ICsgICAgRGlzYWJsZURtYXIgKFZUZElu Zm8tPlZ0ZFVuaXRJbmZvW0luZGV4XS5WdGRVbml0QmFzZUFkZHJlc3MpOw0KPiANCj4gICAgICBE aXNhYmxlUXVldWVkSW52YWxpZGF0aW9uSW50ZXJmYWNlKCZWVGRJbmZvLT5WdGRVbml0SW5mb1tJ bmRleF0pOw0KPiAgICB9DQo+IEBAIC03ODYsNiArNjkxLDM2IEBAIFByZXBhcmVWdGRDYWNoZUlu dmFsaWRhdGlvbkNvbmZpZyAoDQo+ICAgIHJldHVybiBFRklfU1VDQ0VTUzsNCj4gIH0NCj4gDQo+ ICsvKioNCj4gKw0KPiArKiovDQo+ICtFRklfU1RBVFVTDQo+ICtWdGRDaGVja1VzaW5nNUxldmVs UGFnaW5nICgNCj4gKyAgSU4gIFVJTlQ4ICAgICAgICAgICAgICAgICAgICAgICAgICAgIEhvc3RB ZGRyZXNzV2lkdGgsDQo+ICsgIElOICBWVERfVU5JVF9JTkZPICAgICAgICAgICAgICAgICAgICAq VnRkVW5pdEluZm8sDQo+ICsgIE9VVCBCT09MRUFOICAgICAgICAgICAgICAgICAgICAgICAgICAq SXM1TGV2ZWxQYWdpbmcNCj4gKyAgKQ0KPiArew0KPiArICBERUJVRygoREVCVUdfSU5GTywgIiAg Q2FwUmVnIFNBR0FXIGJpdHMgOiAweCUwMnhcbiIsIFZ0ZFVuaXRJbmZvLQ0KPiA+Q2FwUmVnLkJp dHMuU0FHQVcpKTsNCj4gKw0KPiArICAqSXM1TGV2ZWxQYWdpbmcgPSBGQUxTRTsNCj4gKyAgaWYg KChWdGRVbml0SW5mby0+Q2FwUmVnLkJpdHMuU0FHQVcgJiBCSVQzKSAhPSAwKSB7DQo+ICsgICAg KklzNUxldmVsUGFnaW5nID0gVFJVRTsNCj4gKyAgICBpZiAoKEhvc3RBZGRyZXNzV2lkdGggPD0g NDgpICYmDQo+ICsgICAgICAgICAoKFZ0ZFVuaXRJbmZvLT5DYXBSZWcuQml0cy5TQUdBVyAmIEJJ VDIpICE9IDApKSB7DQo+ICsgICAgICAqSXM1TGV2ZWxQYWdpbmcgPSBGQUxTRTsNCj4gKyAgICB9 IGVsc2Ugew0KPiArICAgICAgcmV0dXJuIEVGSV9VTlNVUFBPUlRFRDsNCj4gKyAgICB9DQo+ICsg IH0NCj4gKyAgaWYgKChWdGRVbml0SW5mby0+Q2FwUmVnLkJpdHMuU0FHQVcgJiAoQklUMyB8IEJJ VDIpKSA9PSAwKSB7DQo+ICsgICAgcmV0dXJuIEVGSV9VTlNVUFBPUlRFRDsNCj4gKyAgfQ0KPiAr ICBERUJVRygoREVCVUdfSU5GTywgIiAgVXNpbmcgJWQgTGV2ZWwgUGFnaW5nXG4iLCAqSXM1TGV2 ZWxQYWdpbmcgPyA1IDoNCj4gNCkpOw0KPiArICByZXR1cm4gRUZJX1NVQ0NFU1M7DQo+ICt9DQo+ ICsNCj4gKw0KPiAgLyoqDQo+ICAgIFByZXBhcmUgVlREIGNvbmZpZ3VyYXRpb24uDQo+IA0KPiBA QCAtNzk4LDQzICs3MzMsMzcgQEAgUHJlcGFyZVZ0ZENvbmZpZyAoDQo+ICAgIElOIFZURF9JTkZP ICAgICAgICAgICAgICAgICAgICpWVGRJbmZvDQo+ICAgICkNCj4gIHsNCj4gKyAgRUZJX1NUQVRV UyAgICAgICAgICAgICAgICAgICAgU3RhdHVzOw0KPiAgICBVSU5UTiAgICAgICAgICAgICAgICAg ICAgICAgICBJbmRleDsNCj4gLSAgVUlOVE4gICAgICAgICAgICAgICAgICAgICAgICAgRG9tYWlu TnVtYmVyOw0KPiArICBWVERfVU5JVF9JTkZPICAgICAgICAgICAgICAgICAqVnRkVW5pdEluZm87 DQo+ICsgIFVJTlROICAgICAgICAgICAgICAgICAgICAgICAgIFZ0ZFVuaXRCYXNlQWRkcmVzczsN Cj4gDQo+ICAgIGZvciAoSW5kZXggPSAwOyBJbmRleCA8IFZUZEluZm8tPlZUZEVuZ2luZUNvdW50 OyBJbmRleCsrKSB7DQo+IC0gICAgREVCVUcgKChERUJVR19FUlJPUiwgIkR1bXAgVlRkIENhcGFi aWxpdHkgKCVkKVxuIiwgSW5kZXgpKTsNCj4gLSAgICBWVGRJbmZvLT5WdGRVbml0SW5mb1tJbmRl eF0uVmVyUmVnLlVpbnQzMiA9IE1taW9SZWFkMzIgKFZUZEluZm8tDQo+ID5WdGRVbml0SW5mb1tJ bmRleF0uVnRkVW5pdEJhc2VBZGRyZXNzICsgUl9WRVJfUkVHKTsNCj4gLSAgICBEdW1wVnRkVmVy UmVncyAoJlZUZEluZm8tPlZ0ZFVuaXRJbmZvW0luZGV4XS5WZXJSZWcpOw0KPiAtICAgIFZUZElu Zm8tPlZ0ZFVuaXRJbmZvW0luZGV4XS5DYXBSZWcuVWludDY0ID0gTW1pb1JlYWQ2NCAoVlRkSW5m by0NCj4gPlZ0ZFVuaXRJbmZvW0luZGV4XS5WdGRVbml0QmFzZUFkZHJlc3MgKyBSX0NBUF9SRUcp Ow0KPiAtICAgIER1bXBWdGRDYXBSZWdzICgmVlRkSW5mby0+VnRkVW5pdEluZm9bSW5kZXhdLkNh cFJlZyk7DQo+IC0gICAgVlRkSW5mby0+VnRkVW5pdEluZm9bSW5kZXhdLkVDYXBSZWcuVWludDY0 ID0gTW1pb1JlYWQ2NCAoVlRkSW5mby0NCj4gPlZ0ZFVuaXRJbmZvW0luZGV4XS5WdGRVbml0QmFz ZUFkZHJlc3MgKyBSX0VDQVBfUkVHKTsNCj4gLSAgICBEdW1wVnRkRUNhcFJlZ3MgKCZWVGRJbmZv LT5WdGRVbml0SW5mb1tJbmRleF0uRUNhcFJlZyk7DQo+IC0NCj4gLSAgICBWVGRJbmZvLT5WdGRV bml0SW5mb1tJbmRleF0uSXM1TGV2ZWxQYWdpbmcgPSBGQUxTRTsNCj4gLSAgICBpZiAoKFZUZElu Zm8tPlZ0ZFVuaXRJbmZvW0luZGV4XS5DYXBSZWcuQml0cy5TQUdBVyAmIEJJVDIpICE9IDApIHsN Cj4gLSAgICAgIERFQlVHICgoREVCVUdfSU5GTywgIlN1cHBvcnQgNC1sZXZlbCBwYWdlLXRhYmxl IG9uIFZURCAlZFxuIiwNCj4gSW5kZXgpKTsNCj4gLSAgICB9DQo+IC0gICAgaWYgKChWVGRJbmZv LT5WdGRVbml0SW5mb1tJbmRleF0uQ2FwUmVnLkJpdHMuU0FHQVcgJiBCSVQzKSAhPSAwKSB7DQo+ IC0gICAgICBERUJVRygoREVCVUdfSU5GTywgIlN1cHBvcnQgNS1sZXZlbCBwYWdlLXRhYmxlIG9u IFZURCAlZFxuIiwNCj4gSW5kZXgpKTsNCj4gLSAgICAgIFZUZEluZm8tPlZ0ZFVuaXRJbmZvW0lu ZGV4XS5JczVMZXZlbFBhZ2luZyA9IFRSVUU7DQo+IC0NCj4gLSAgICAgIGlmICgoVlRkSW5mby0+ SG9zdEFkZHJlc3NXaWR0aCA8PSA0OCkgJiYNCj4gLSAgICAgICAgICAoKFZUZEluZm8tPlZ0ZFVu aXRJbmZvW0luZGV4XS5DYXBSZWcuQml0cy5TQUdBVyAmIEJJVDIpICE9IDApKSB7DQo+IC0gICAg ICAgIERFQlVHICgoREVCVUdfSU5GTywgIlJvbGxiYWNrIHRvIDQtbGV2ZWwgcGFnZS10YWJsZSBv biBWVEQgJWRcbiIsDQo+IEluZGV4KSk7DQo+IC0gICAgICAgIFZUZEluZm8tPlZ0ZFVuaXRJbmZv W0luZGV4XS5JczVMZXZlbFBhZ2luZyA9IEZBTFNFOw0KPiAtICAgICAgfQ0KPiArICAgIFZ0ZFVu aXRJbmZvID0gJlZUZEluZm8tPlZ0ZFVuaXRJbmZvW0luZGV4XTsNCj4gKyAgICBpZiAoVnRkVW5p dEluZm8tPkRvbmUpIHsNCj4gKyAgICAgIGNvbnRpbnVlOw0KPiAgICAgIH0NCj4gLSAgICBpZiAo KFZUZEluZm8tPlZ0ZFVuaXRJbmZvW0luZGV4XS5DYXBSZWcuQml0cy5TQUdBVyAmIChCSVQzIHwg QklUMikpID09DQo+IDApIHsNCj4gLSAgICAgIERFQlVHICgoREVCVUdfRVJST1IsICIhISEhIFBh Z2UtdGFibGUgdHlwZSAweCVYIGlzIG5vdCBzdXBwb3J0ZWQgb24NCj4gVlREICVkICEhISFcbiIs IEluZGV4LCBWVGRJbmZvLT5WdGRVbml0SW5mb1tJbmRleF0uQ2FwUmVnLkJpdHMuU0FHQVcpKTsN Cj4gLSAgICAgIHJldHVybiBFRklfVU5TVVBQT1JURUQ7DQo+ICsgICAgVnRkVW5pdEJhc2VBZGRy ZXNzID0gVnRkVW5pdEluZm8tPlZ0ZFVuaXRCYXNlQWRkcmVzczsNCj4gKyAgICBERUJVRygoREVC VUdfSU5GTywgIlZUZCBFbmdpbmU6IDB4JTA4WFxuIiwgVnRkVW5pdEJhc2VBZGRyZXNzKSk7DQo+ ICsNCj4gKyAgICBWdGRVbml0SW5mby0+VmVyUmVnLlVpbnQzMiA9IE1taW9SZWFkMzIgKFZ0ZFVu aXRCYXNlQWRkcmVzcyArDQo+IFJfVkVSX1JFRyk7DQo+ICsgICAgVnRkVW5pdEluZm8tPkNhcFJl Zy5VaW50NjQgPSBNbWlvUmVhZDY0IChWdGRVbml0QmFzZUFkZHJlc3MgKw0KPiBSX0NBUF9SRUcp Ow0KPiArICAgIFZ0ZFVuaXRJbmZvLT5FQ2FwUmVnLlVpbnQ2NCA9IE1taW9SZWFkNjQgKFZ0ZFVu aXRCYXNlQWRkcmVzcyArDQo+IFJfRUNBUF9SRUcpOw0KPiArICAgIERFQlVHKChERUJVR19JTkZP LCAiICBWZXJSZWcgIDogMHglMDhYXG4iLCBWdGRVbml0SW5mby0NCj4gPlZlclJlZy5VaW50MzIp KTsNCj4gKyAgICBERUJVRygoREVCVUdfSU5GTywgIiAgQ2FwUmVnICA6IDB4JTAxNmxYXG4iLCBW dGRVbml0SW5mby0NCj4gPkNhcFJlZy5VaW50NjQpKTsNCj4gKyAgICBERUJVRygoREVCVUdfSU5G TywgIiAgRUNhcFJlZyA6IDB4JTAxNmxYXG4iLCBWdGRVbml0SW5mby0NCj4gPkVDYXBSZWcuVWlu dDY0KSk7DQo+ICsNCj4gKyAgICBTdGF0dXMgPSBWdGRDaGVja1VzaW5nNUxldmVsUGFnaW5nIChW VGRJbmZvLT5Ib3N0QWRkcmVzc1dpZHRoLA0KPiBWdGRVbml0SW5mbywgJihWdGRVbml0SW5mby0+ SXM1TGV2ZWxQYWdpbmcpKTsNCj4gKyAgICBpZiAoRUZJX0VSUk9SIChTdGF0dXMpKSB7DQo+ICsg ICAgICBERUJVRyAoKERFQlVHX0VSUk9SLCAiISEhISBQYWdlLXRhYmxlIHR5cGUgMHglWCBpcyBu b3QNCj4gc3VwcG9ydGVkISEhIVxuIiwgVnRkVW5pdEluZm8tPkNhcFJlZy5CaXRzLlNBR0FXKSk7 DQo+ICsgICAgICByZXR1cm4gU3RhdHVzOw0KPiAgICAgIH0NCj4gDQo+IC0gICAgRG9tYWluTnVt YmVyID0gKFVJTlROKTEgPDwgKFVJTlQ4KSAoKFVJTlROKSBWVGRJbmZvLQ0KPiA+VnRkVW5pdElu Zm9bSW5kZXhdLkNhcFJlZy5CaXRzLk5EICogMiArIDQpOw0KPiAtICAgIGlmIChWVGRJbmZvLT5W dGRVbml0SW5mb1tJbmRleF0uUGNpRGV2aWNlSW5mby5QY2lEZXZpY2VEYXRhTnVtYmVyID49DQo+ IERvbWFpbk51bWJlcikgew0KPiAtICAgICAgREVCVUcgKChERUJVR19FUlJPUiwgIiEhISEgUGNp IGRldmljZSBOdW1iZXIoMHgleCkgPj0NCj4gRG9tYWluTnVtYmVyKDB4JXgpICEhISFcbiIsIFZU ZEluZm8tDQo+ID5WdGRVbml0SW5mb1tJbmRleF0uUGNpRGV2aWNlSW5mby5QY2lEZXZpY2VEYXRh TnVtYmVyLCBEb21haW5OdW1iZXIpKTsNCj4gLSAgICAgIHJldHVybiBFRklfVU5TVVBQT1JURUQ7 DQo+ICsgICAgU3RhdHVzID0gUGVycGFyZUNhY2hlSW52YWxpZGF0aW9uSW50ZXJmYWNlKFZ0ZFVu aXRJbmZvKTsNCj4gKyAgICBpZiAoRUZJX0VSUk9SIChTdGF0dXMpKSB7DQo+ICsgICAgICByZXR1 cm4gU3RhdHVzOw0KPiAgICAgIH0NCj4gICAgfQ0KPiArDQo+ICAgIHJldHVybiBFRklfU1VDQ0VT UzsNCj4gIH0NCj4gLQ0KPiBkaWZmIC0tZ2l0DQo+IGEvU2lsaWNvbi9JbnRlbC9JbnRlbFNpbGlj b25Qa2cvRmVhdHVyZS9WVGQvSW50ZWxWVGREbWFyUGVpL0ludGVsVlRkRG1hcg0KPiBQZWkuYw0K PiBiL1NpbGljb24vSW50ZWwvSW50ZWxTaWxpY29uUGtnL0ZlYXR1cmUvVlRkL0ludGVsVlRkRG1h clBlaS9JbnRlbFZUZERtYXINCj4gUGVpLmMNCj4gaW5kZXggYThmN2JmZWUuLmFjOTFlYWMzIDEw MDY0NA0KPiAtLS0NCj4gYS9TaWxpY29uL0ludGVsL0ludGVsU2lsaWNvblBrZy9GZWF0dXJlL1ZU ZC9JbnRlbFZUZERtYXJQZWkvSW50ZWxWVGREbWFyDQo+IFBlaS5jDQo+ICsrKw0KPiBiL1NpbGlj b24vSW50ZWwvSW50ZWxTaWxpY29uUGtnL0ZlYXR1cmUvVlRkL0ludGVsVlRkRG1hclBlaS9JbnRl bFZUZERtYXINCj4gUGVpLmMNCj4gQEAgLTEsNiArMSw2IEBADQo+ICAvKiogQGZpbGUNCj4gDQo+ IC0gIENvcHlyaWdodCAoYykgMjAyMCwgSW50ZWwgQ29ycG9yYXRpb24uIEFsbCByaWdodHMgcmVz ZXJ2ZWQuPEJSPg0KPiArICBDb3B5cmlnaHQgKGMpIDIwMjAgLSAyMDIxLCBJbnRlbCBDb3Jwb3Jh dGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC48QlI+DQo+IA0KPiAgICBTUERYLUxpY2Vuc2UtSWRl bnRpZmllcjogQlNELTItQ2xhdXNlLVBhdGVudA0KPiANCj4gQEAgLTUwLDIwICs1MCwyMCBAQCB0 eXBlZGVmIHN0cnVjdCB7DQo+ICAgIHRoZSBkZXZpY2UgZHJpdmVyIG5lZWQgdXNlIFNldEF0dHJp YnV0ZSgpIHRvIHVwZGF0ZSB0aGUgSU9NTVUNCj4gICAgYXR0cmlidXRlIHRvIHJlcXVlc3QgRE1B IGFjY2VzcyAocmVhZCBhbmQvb3Igd3JpdGUpLg0KPiANCj4gLSAgQHBhcmFtW2luXSAgVGhpcyAg ICAgICAgICAgICAgVGhlIFBQSSBpbnN0YW5jZSBwb2ludGVyLg0KPiAtICBAcGFyYW1baW5dICBE ZXZpY2VIYW5kbGUgICAgICBUaGUgZGV2aWNlIHdobyBpbml0aWF0ZXMgdGhlIERNQSBhY2Nlc3MN Cj4gcmVxdWVzdC4NCj4gLSAgQHBhcmFtW2luXSAgTWFwcGluZyAgICAgICAgICAgVGhlIG1hcHBp bmcgdmFsdWUgcmV0dXJuZWQgZnJvbSBNYXAoKS4NCj4gLSAgQHBhcmFtW2luXSAgSW9NbXVBY2Nl c3MgICAgICAgVGhlIElPTU1VIGFjY2Vzcy4NCj4gLQ0KPiAtICBAcmV0dmFsIEVGSV9TVUNDRVNT ICAgICAgICAgICBUaGUgSW9NbXVBY2Nlc3MgaXMgc2V0IGZvciB0aGUgbWVtb3J5IHJhbmdlDQo+ IHNwZWNpZmllZCBieSBEZXZpY2VBZGRyZXNzIGFuZCBMZW5ndGguDQo+IC0gIEByZXR2YWwgRUZJ X0lOVkFMSURfUEFSQU1FVEVSIE1hcHBpbmcgaXMgbm90IGEgdmFsdWUgdGhhdCB3YXMNCj4gcmV0 dXJuZWQgYnkgTWFwKCkuDQo+IC0gIEByZXR2YWwgRUZJX0lOVkFMSURfUEFSQU1FVEVSIElvTW11 QWNjZXNzIHNwZWNpZmllZCBhbiBpbGxlZ2FsDQo+IGNvbWJpbmF0aW9uIG9mIGFjY2Vzcy4NCj4g LSAgQHJldHZhbCBFRklfVU5TVVBQT1JURUQgICAgICAgVGhlIGJpdCBtYXNrIG9mIElvTW11QWNj ZXNzIGlzIG5vdA0KPiBzdXBwb3J0ZWQgYnkgdGhlIElPTU1VLg0KPiAtICBAcmV0dmFsIEVGSV9V TlNVUFBPUlRFRCAgICAgICBUaGUgSU9NTVUgZG9lcyBub3Qgc3VwcG9ydCB0aGUgbWVtb3J5DQo+ IHJhbmdlIHNwZWNpZmllZCBieSBNYXBwaW5nLg0KPiAtICBAcmV0dmFsIEVGSV9PVVRfT0ZfUkVT T1VSQ0VTICBUaGVyZSBhcmUgbm90IGVub3VnaCByZXNvdXJjZXMNCj4gYXZhaWxhYmxlIHRvIG1v ZGlmeSB0aGUgSU9NTVUgYWNjZXNzLg0KPiAtICBAcmV0dmFsIEVGSV9ERVZJQ0VfRVJST1IgICAg ICBUaGUgSU9NTVUgZGV2aWNlIHJlcG9ydGVkIGFuIGVycm9yIHdoaWxlDQo+IGF0dGVtcHRpbmcg dGhlIG9wZXJhdGlvbi4NCj4gLSAgQHJldHZhbCBFRklfTk9UX0FWQUlMQUJMRV9ZRVQgRE1BIHBy b3RlY3Rpb24gaGFzIGJlZW4gZW5hYmxlZCwgYnV0DQo+IERNQSBidWZmZXIgYXJlDQo+IC0gICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5vdCBhdmFpbGFibGUgdG8gYmUgYWxsb2NhdGVk IHlldC4NCj4gKyAgQHBhcmFtW2luXSAgVGhpcyAgICAgICAgICAgICAgICAgIFRoZSBQUEkgaW5z dGFuY2UgcG9pbnRlci4NCj4gKyAgQHBhcmFtW2luXSAgRGV2aWNlSGFuZGxlICAgICAgICAgIFRo ZSBkZXZpY2Ugd2hvIGluaXRpYXRlcyB0aGUgRE1BIGFjY2Vzcw0KPiByZXF1ZXN0Lg0KPiArICBA cGFyYW1baW5dICBNYXBwaW5nICAgICAgICAgICAgICAgVGhlIG1hcHBpbmcgdmFsdWUgcmV0dXJu ZWQgZnJvbSBNYXAoKS4NCj4gKyAgQHBhcmFtW2luXSAgSW9NbXVBY2Nlc3MgICAgICAgICAgIFRo ZSBJT01NVSBhY2Nlc3MuDQo+ICsNCj4gKyAgQHJldHZhbCBFRklfU1VDQ0VTUyAgICAgICAgICAg ICAgIFRoZSBJb01tdUFjY2VzcyBpcyBzZXQgZm9yIHRoZSBtZW1vcnkNCj4gcmFuZ2Ugc3BlY2lm aWVkIGJ5IERldmljZUFkZHJlc3MgYW5kIExlbmd0aC4NCj4gKyAgQHJldHZhbCBFRklfSU5WQUxJ RF9QQVJBTUVURVIgICAgIE1hcHBpbmcgaXMgbm90IGEgdmFsdWUgdGhhdCB3YXMNCj4gcmV0dXJu ZWQgYnkgTWFwKCkuDQo+ICsgIEByZXR2YWwgRUZJX0lOVkFMSURfUEFSQU1FVEVSICAgICBJb01t dUFjY2VzcyBzcGVjaWZpZWQgYW4gaWxsZWdhbA0KPiBjb21iaW5hdGlvbiBvZiBhY2Nlc3MuDQo+ ICsgIEByZXR2YWwgRUZJX1VOU1VQUE9SVEVEICAgICAgICAgICBUaGUgYml0IG1hc2sgb2YgSW9N bXVBY2Nlc3MgaXMgbm90DQo+IHN1cHBvcnRlZCBieSB0aGUgSU9NTVUuDQo+ICsgIEByZXR2YWwg RUZJX1VOU1VQUE9SVEVEICAgICAgICAgICBUaGUgSU9NTVUgZG9lcyBub3Qgc3VwcG9ydCB0aGUN Cj4gbWVtb3J5IHJhbmdlIHNwZWNpZmllZCBieSBNYXBwaW5nLg0KPiArICBAcmV0dmFsIEVGSV9P VVRfT0ZfUkVTT1VSQ0VTICAgICAgVGhlcmUgYXJlIG5vdCBlbm91Z2ggcmVzb3VyY2VzDQo+IGF2 YWlsYWJsZSB0byBtb2RpZnkgdGhlIElPTU1VIGFjY2Vzcy4NCj4gKyAgQHJldHZhbCBFRklfREVW SUNFX0VSUk9SICAgICAgICAgIFRoZSBJT01NVSBkZXZpY2UgcmVwb3J0ZWQgYW4gZXJyb3INCj4g d2hpbGUgYXR0ZW1wdGluZyB0aGUgb3BlcmF0aW9uLg0KPiArICBAcmV0dmFsIEVGSV9OT1RfQVZB SUxBQkxFX1lFVCAgICAgRE1BIHByb3RlY3Rpb24gaGFzIGJlZW4gZW5hYmxlZCwNCj4gYnV0IERN QSBidWZmZXIgYXJlDQo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBub3Qg YXZhaWxhYmxlIHRvIGJlIGFsbG9jYXRlZCB5ZXQuDQo+ICAqKi8NCj4gIEVGSV9TVEFUVVMNCj4g IEVGSUFQSQ0KPiBAQCAtOTMsMjIgKzkzLDIyIEBAIFBlaUlvTW11U2V0QXR0cmlidXRlICgNCj4g ICAgUHJvdmlkZXMgdGhlIGNvbnRyb2xsZXItc3BlY2lmaWMgYWRkcmVzc2VzIHJlcXVpcmVkIHRv IGFjY2VzcyBzeXN0ZW0NCj4gbWVtb3J5IGZyb20gYQ0KPiAgICBETUEgYnVzIG1hc3Rlci4NCj4g DQo+IC0gIEBwYXJhbSAgVGhpcyAgICAgICAgICAgICAgICAgIFRoZSBQUEkgaW5zdGFuY2UgcG9p bnRlci4NCj4gLSAgQHBhcmFtICBPcGVyYXRpb24gICAgICAgICAgICAgSW5kaWNhdGVzIGlmIHRo ZSBidXMgbWFzdGVyIGlzIGdvaW5nIHRvIHJlYWQgb3INCj4gd3JpdGUgdG8gc3lzdGVtIG1lbW9y eS4NCj4gLSAgQHBhcmFtICBIb3N0QWRkcmVzcyAgICAgICAgICAgVGhlIHN5c3RlbSBtZW1vcnkg YWRkcmVzcyB0byBtYXAgdG8gdGhlIFBDSQ0KPiBjb250cm9sbGVyLg0KPiAtICBAcGFyYW0gIE51 bWJlck9mQnl0ZXMgICAgICAgICBPbiBpbnB1dCB0aGUgbnVtYmVyIG9mIGJ5dGVzIHRvIG1hcC4g T24NCj4gb3V0cHV0IHRoZSBudW1iZXIgb2YgYnl0ZXMNCj4gLSAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgdGhhdCB3ZXJlIG1hcHBlZC4NCj4gLSAgQHBhcmFtICBEZXZpY2VBZGRyZXNz ICAgICAgICAgVGhlIHJlc3VsdGluZyBtYXAgYWRkcmVzcyBmb3IgdGhlIGJ1cyBtYXN0ZXINCj4g UENJIGNvbnRyb2xsZXIgdG8gdXNlIHRvDQo+IC0gICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIGFjY2VzcyB0aGUgaG9zdHMgSG9zdEFkZHJlc3MuDQo+IC0gIEBwYXJhbSAgTWFwcGluZyAg ICAgICAgICAgICAgIEEgcmVzdWx0aW5nIHZhbHVlIHRvIHBhc3MgdG8gVW5tYXAoKS4NCj4gLQ0K PiAtICBAcmV0dmFsIEVGSV9TVUNDRVNTICAgICAgICAgICBUaGUgcmFuZ2Ugd2FzIG1hcHBlZCBm b3IgdGhlIHJldHVybmVkDQo+IE51bWJlck9mQnl0ZXMuDQo+IC0gIEByZXR2YWwgRUZJX1VOU1VQ UE9SVEVEICAgICAgIFRoZSBIb3N0QWRkcmVzcyBjYW5ub3QgYmUgbWFwcGVkIGFzIGENCj4gY29t bW9uIGJ1ZmZlci4NCj4gLSAgQHJldHZhbCBFRklfSU5WQUxJRF9QQVJBTUVURVIgT25lIG9yIG1v cmUgcGFyYW1ldGVycyBhcmUgaW52YWxpZC4NCj4gLSAgQHJldHZhbCBFRklfT1VUX09GX1JFU09V UkNFUyAgVGhlIHJlcXVlc3QgY291bGQgbm90IGJlIGNvbXBsZXRlZA0KPiBkdWUgdG8gYSBsYWNr IG9mIHJlc291cmNlcy4NCj4gLSAgQHJldHZhbCBFRklfREVWSUNFX0VSUk9SICAgICAgVGhlIHN5 c3RlbSBoYXJkd2FyZSBjb3VsZCBub3QgbWFwIHRoZQ0KPiByZXF1ZXN0ZWQgYWRkcmVzcy4NCj4g LSAgQHJldHZhbCBFRklfTk9UX0FWQUlMQUJMRV9ZRVQgRE1BIHByb3RlY3Rpb24gaGFzIGJlZW4g ZW5hYmxlZCwgYnV0DQo+IERNQSBidWZmZXIgYXJlDQo+IC0gICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIG5vdCBhdmFpbGFibGUgdG8gYmUgYWxsb2NhdGVkIHlldC4NCj4gKyAgQHBhcmFt IFtpbl0gICAgICAgVGhpcyAgICAgICAgICAgIFRoZSBQUEkgaW5zdGFuY2UgcG9pbnRlci4NCj4g KyAgQHBhcmFtIFtpbl0gICAgICAgT3BlcmF0aW9uICAgICAgIEluZGljYXRlcyBpZiB0aGUgYnVz IG1hc3RlciBpcyBnb2luZyB0byByZWFkIG9yDQo+IHdyaXRlIHRvIHN5c3RlbSBtZW1vcnkuDQo+ ICsgIEBwYXJhbSBbaW5dICAgICAgIEhvc3RBZGRyZXNzICAgICBUaGUgc3lzdGVtIG1lbW9yeSBh ZGRyZXNzIHRvIG1hcCB0byB0aGUNCj4gUENJIGNvbnRyb2xsZXIuDQo+ICsgIEBwYXJhbSBbaW5d IFtvdXRdIE51bWJlck9mQnl0ZXMgICBPbiBpbnB1dCB0aGUgbnVtYmVyIG9mIGJ5dGVzIHRvIG1h cC4NCj4gT24gb3V0cHV0IHRoZSBudW1iZXIgb2YgYnl0ZXMNCj4gKyAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIHRoYXQgd2VyZSBtYXBwZWQuDQo+ICsgIEBwYXJhbSBbb3V0XSAg ICAgIERldmljZUFkZHJlc3MgICBUaGUgcmVzdWx0aW5nIG1hcCBhZGRyZXNzIGZvciB0aGUgYnVz DQo+IG1hc3RlciBQQ0kgY29udHJvbGxlciB0byB1c2UgdG8NCj4gKyAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIGFjY2VzcyB0aGUgaG9zdHMgSG9zdEFkZHJlc3MuDQo+ICsgIEBw YXJhbSBbb3V0XSAgICAgIE1hcHBpbmcgICAgICAgICBBIHJlc3VsdGluZyB2YWx1ZSB0byBwYXNz IHRvIFVubWFwKCkuDQo+ICsNCj4gKyAgQHJldHZhbCBFRklfU1VDQ0VTUyAgICAgICAgICAgICAg IFRoZSByYW5nZSB3YXMgbWFwcGVkIGZvciB0aGUgcmV0dXJuZWQNCj4gTnVtYmVyT2ZCeXRlcy4N Cj4gKyAgQHJldHZhbCBFRklfVU5TVVBQT1JURUQgICAgICAgICAgIFRoZSBIb3N0QWRkcmVzcyBj YW5ub3QgYmUgbWFwcGVkIGFzIGENCj4gY29tbW9uIGJ1ZmZlci4NCj4gKyAgQHJldHZhbCBFRklf SU5WQUxJRF9QQVJBTUVURVIgICAgIE9uZSBvciBtb3JlIHBhcmFtZXRlcnMgYXJlIGludmFsaWQu DQo+ICsgIEByZXR2YWwgRUZJX09VVF9PRl9SRVNPVVJDRVMgICAgICBUaGUgcmVxdWVzdCBjb3Vs ZCBub3QgYmUgY29tcGxldGVkDQo+IGR1ZSB0byBhIGxhY2sgb2YgcmVzb3VyY2VzLg0KPiArICBA cmV0dmFsIEVGSV9ERVZJQ0VfRVJST1IgICAgICAgICAgVGhlIHN5c3RlbSBoYXJkd2FyZSBjb3Vs ZCBub3QgbWFwIHRoZQ0KPiByZXF1ZXN0ZWQgYWRkcmVzcy4NCj4gKyAgQHJldHZhbCBFRklfTk9U X0FWQUlMQUJMRV9ZRVQgICAgIERNQSBwcm90ZWN0aW9uIGhhcyBiZWVuIGVuYWJsZWQsDQo+IGJ1 dCBETUEgYnVmZmVyIGFyZQ0KPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg bm90IGF2YWlsYWJsZSB0byBiZSBhbGxvY2F0ZWQgeWV0Lg0KPiAgKiovDQo+ICBFRklfU1RBVFVT DQo+ICBFRklBUEkNCj4gQEAgLTE0MCw3ICsxNDAsNyBAQCBQZWlJb01tdU1hcCAoDQo+IA0KPiAg ICBpZiAoT3BlcmF0aW9uID09IEVka2lpSW9NbXVPcGVyYXRpb25CdXNNYXN0ZXJDb21tb25CdWZm ZXIgfHwNCj4gICAgICAgIE9wZXJhdGlvbiA9PSBFZGtpaUlvTW11T3BlcmF0aW9uQnVzTWFzdGVy Q29tbW9uQnVmZmVyNjQpIHsNCj4gLSAgICAqRGV2aWNlQWRkcmVzcyA9IChVSU5UTilIb3N0QWRk cmVzczsNCj4gKyAgICAqRGV2aWNlQWRkcmVzcyA9IChVSU5UTikgSG9zdEFkZHJlc3M7DQo+ICAg ICAgKk1hcHBpbmcgPSBOVUxMOw0KPiAgICAgIHJldHVybiBFRklfU1VDQ0VTUzsNCj4gICAgfQ0K PiBAQCAtMTg0LDE0ICsxODQsMTQgQEAgUGVpSW9NbXVNYXAgKA0KPiAgLyoqDQo+ICAgIENvbXBs ZXRlcyB0aGUgTWFwKCkgb3BlcmF0aW9uIGFuZCByZWxlYXNlcyBhbnkgY29ycmVzcG9uZGluZyBy ZXNvdXJjZXMuDQo+IA0KPiAtICBAcGFyYW0gIFRoaXMgICAgICAgICAgICAgICAgICBUaGUgUFBJ IGluc3RhbmNlIHBvaW50ZXIuDQo+IC0gIEBwYXJhbSAgTWFwcGluZyAgICAgICAgICAgICAgIFRo ZSBtYXBwaW5nIHZhbHVlIHJldHVybmVkIGZyb20gTWFwKCkuDQo+ICsgIEBwYXJhbSBbaW5dIFRo aXMgICAgICAgICAgICAgICAgICBUaGUgUFBJIGluc3RhbmNlIHBvaW50ZXIuDQo+ICsgIEBwYXJh bSBbaW5dIE1hcHBpbmcgICAgICAgICAgICAgICBUaGUgbWFwcGluZyB2YWx1ZSByZXR1cm5lZCBm cm9tIE1hcCgpLg0KPiANCj4gLSAgQHJldHZhbCBFRklfU1VDQ0VTUyAgICAgICAgICAgVGhlIHJh bmdlIHdhcyB1bm1hcHBlZC4NCj4gLSAgQHJldHZhbCBFRklfSU5WQUxJRF9QQVJBTUVURVIgTWFw cGluZyBpcyBub3QgYSB2YWx1ZSB0aGF0IHdhcw0KPiByZXR1cm5lZCBieSBNYXAoKS4NCj4gLSAg QHJldHZhbCBFRklfREVWSUNFX0VSUk9SICAgICAgVGhlIGRhdGEgd2FzIG5vdCBjb21taXR0ZWQg dG8gdGhlIHRhcmdldA0KPiBzeXN0ZW0gbWVtb3J5Lg0KPiAtICBAcmV0dmFsIEVGSV9OT1RfQVZB SUxBQkxFX1lFVCBETUEgcHJvdGVjdGlvbiBoYXMgYmVlbiBlbmFibGVkLCBidXQNCj4gRE1BIGJ1 ZmZlciBhcmUNCj4gLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbm90IGF2YWlsYWJs ZSB0byBiZSBhbGxvY2F0ZWQgeWV0Lg0KPiArICBAcmV0dmFsIEVGSV9TVUNDRVNTICAgICAgICAg ICAgICAgVGhlIHJhbmdlIHdhcyB1bm1hcHBlZC4NCj4gKyAgQHJldHZhbCBFRklfSU5WQUxJRF9Q QVJBTUVURVIgICAgIE1hcHBpbmcgaXMgbm90IGEgdmFsdWUgdGhhdCB3YXMNCj4gcmV0dXJuZWQg YnkgTWFwKCkuDQo+ICsgIEByZXR2YWwgRUZJX0RFVklDRV9FUlJPUiAgICAgICAgICBUaGUgZGF0 YSB3YXMgbm90IGNvbW1pdHRlZCB0byB0aGUgdGFyZ2V0DQo+IHN5c3RlbSBtZW1vcnkuDQo+ICsg IEByZXR2YWwgRUZJX05PVF9BVkFJTEFCTEVfWUVUICAgICBETUEgcHJvdGVjdGlvbiBoYXMgYmVl biBlbmFibGVkLA0KPiBidXQgRE1BIGJ1ZmZlciBhcmUNCj4gKyAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIG5vdCBhdmFpbGFibGUgdG8gYmUgYWxsb2NhdGVkIHlldC4NCj4gICoq Lw0KPiAgRUZJX1NUQVRVUw0KPiAgRUZJQVBJDQo+IEBAIC0yNTAsMjEgKzI1MCwyMSBAQCBQZWlJ b01tdVVubWFwICgNCj4gICAgQWxsb2NhdGVzIHBhZ2VzIHRoYXQgYXJlIHN1aXRhYmxlIGZvciBh biBPcGVyYXRpb25CdXNNYXN0ZXJDb21tb25CdWZmZXINCj4gb3INCj4gICAgT3BlcmF0aW9uQnVz TWFzdGVyQ29tbW9uQnVmZmVyNjQgbWFwcGluZy4NCj4gDQo+IC0gIEBwYXJhbSAgVGhpcyAgICAg ICAgICAgICAgICAgIFRoZSBQUEkgaW5zdGFuY2UgcG9pbnRlci4NCj4gLSAgQHBhcmFtICBNZW1v cnlUeXBlICAgICAgICAgICAgVGhlIHR5cGUgb2YgbWVtb3J5IHRvIGFsbG9jYXRlLA0KPiBFZmlC b290U2VydmljZXNEYXRhIG9yDQo+IC0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEVm aVJ1bnRpbWVTZXJ2aWNlc0RhdGEuDQo+IC0gIEBwYXJhbSAgUGFnZXMgICAgICAgICAgICAgICAg IFRoZSBudW1iZXIgb2YgcGFnZXMgdG8gYWxsb2NhdGUuDQo+IC0gIEBwYXJhbSAgSG9zdEFkZHJl c3MgICAgICAgICAgIEEgcG9pbnRlciB0byBzdG9yZSB0aGUgYmFzZSBzeXN0ZW0gbWVtb3J5DQo+ IGFkZHJlc3Mgb2YgdGhlDQo+IC0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFsbG9j YXRlZCByYW5nZS4NCj4gLSAgQHBhcmFtICBBdHRyaWJ1dGVzICAgICAgICAgICAgVGhlIHJlcXVl c3RlZCBiaXQgbWFzayBvZiBhdHRyaWJ1dGVzIGZvciB0aGUNCj4gYWxsb2NhdGVkIHJhbmdlLg0K PiAtDQo+IC0gIEByZXR2YWwgRUZJX1NVQ0NFU1MgICAgICAgICAgIFRoZSByZXF1ZXN0ZWQgbWVt b3J5IHBhZ2VzIHdlcmUgYWxsb2NhdGVkLg0KPiAtICBAcmV0dmFsIEVGSV9VTlNVUFBPUlRFRCAg ICAgICBBdHRyaWJ1dGVzIGlzIHVuc3VwcG9ydGVkLiBUaGUgb25seSBsZWdhbA0KPiBhdHRyaWJ1 dGUgYml0cyBhcmUNCj4gLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTUVNT1JZX1dS SVRFX0NPTUJJTkUsIE1FTU9SWV9DQUNIRUQgYW5kDQo+IERVQUxfQUREUkVTU19DWUNMRS4NCj4g LSAgQHJldHZhbCBFRklfSU5WQUxJRF9QQVJBTUVURVIgT25lIG9yIG1vcmUgcGFyYW1ldGVycyBh cmUgaW52YWxpZC4NCj4gLSAgQHJldHZhbCBFRklfT1VUX09GX1JFU09VUkNFUyAgVGhlIG1lbW9y eSBwYWdlcyBjb3VsZCBub3QgYmUNCj4gYWxsb2NhdGVkLg0KPiAtICBAcmV0dmFsIEVGSV9OT1Rf QVZBSUxBQkxFX1lFVCBETUEgcHJvdGVjdGlvbiBoYXMgYmVlbiBlbmFibGVkLCBidXQNCj4gRE1B IGJ1ZmZlciBhcmUNCj4gLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbm90IGF2YWls YWJsZSB0byBiZSBhbGxvY2F0ZWQgeWV0Lg0KPiArICBAcGFyYW0gW2luXSAgICAgICBUaGlzICAg ICAgICAgICAgVGhlIFBQSSBpbnN0YW5jZSBwb2ludGVyLg0KPiArICBAcGFyYW0gW2luXSAgICAg ICBNZW1vcnlUeXBlICAgICAgVGhlIHR5cGUgb2YgbWVtb3J5IHRvIGFsbG9jYXRlLA0KPiBFZmlC b290U2VydmljZXNEYXRhIG9yDQo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBFZmlSdW50aW1lU2VydmljZXNEYXRhLg0KPiArICBAcGFyYW0gW2luXSAgICAgICBQYWdlcyAg ICAgICAgICAgVGhlIG51bWJlciBvZiBwYWdlcyB0byBhbGxvY2F0ZS4NCj4gKyAgQHBhcmFtIFtp bl0gW291dF0gSG9zdEFkZHJlc3MgICAgIEEgcG9pbnRlciB0byBzdG9yZSB0aGUgYmFzZSBzeXN0 ZW0NCj4gbWVtb3J5IGFkZHJlc3Mgb2YgdGhlDQo+ICsgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBhbGxvY2F0ZWQgcmFuZ2UuDQo+ICsgIEBwYXJhbSBbaW5dICAgICAgIEF0dHJp YnV0ZXMgICAgICBUaGUgcmVxdWVzdGVkIGJpdCBtYXNrIG9mIGF0dHJpYnV0ZXMgZm9yIHRoZQ0K PiBhbGxvY2F0ZWQgcmFuZ2UuDQo+ICsNCj4gKyAgQHJldHZhbCBFRklfU1VDQ0VTUyAgICAgICAg ICAgICAgIFRoZSByZXF1ZXN0ZWQgbWVtb3J5IHBhZ2VzIHdlcmUgYWxsb2NhdGVkLg0KPiArICBA cmV0dmFsIEVGSV9VTlNVUFBPUlRFRCAgICAgICAgICAgQXR0cmlidXRlcyBpcyB1bnN1cHBvcnRl ZC4gVGhlIG9ubHkgbGVnYWwNCj4gYXR0cmlidXRlIGJpdHMgYXJlDQo+ICsgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBNRU1PUllfV1JJVEVfQ09NQklORSwgTUVNT1JZX0NBQ0hF RCBhbmQNCj4gRFVBTF9BRERSRVNTX0NZQ0xFLg0KPiArICBAcmV0dmFsIEVGSV9JTlZBTElEX1BB UkFNRVRFUiAgICAgT25lIG9yIG1vcmUgcGFyYW1ldGVycyBhcmUgaW52YWxpZC4NCj4gKyAgQHJl dHZhbCBFRklfT1VUX09GX1JFU09VUkNFUyAgICAgIFRoZSBtZW1vcnkgcGFnZXMgY291bGQgbm90 IGJlDQo+IGFsbG9jYXRlZC4NCj4gKyAgQHJldHZhbCBFRklfTk9UX0FWQUlMQUJMRV9ZRVQgICAg IERNQSBwcm90ZWN0aW9uIGhhcyBiZWVuIGVuYWJsZWQsDQo+IGJ1dCBETUEgYnVmZmVyIGFyZQ0K PiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbm90IGF2YWlsYWJsZSB0byBi ZSBhbGxvY2F0ZWQgeWV0Lg0KPiAgKiovDQo+ICBFRklfU1RBVFVTDQo+ICBFRklBUEkNCj4gQEAg LTMwNywxNSArMzA3LDE1IEBAIFBlaUlvTW11QWxsb2NhdGVCdWZmZXIgKA0KPiAgLyoqDQo+ICAg IEZyZWVzIG1lbW9yeSB0aGF0IHdhcyBhbGxvY2F0ZWQgd2l0aCBBbGxvY2F0ZUJ1ZmZlcigpLg0K PiANCj4gLSAgQHBhcmFtICBUaGlzICAgICAgICAgICAgICAgICAgVGhlIFBQSSBpbnN0YW5jZSBw b2ludGVyLg0KPiAtICBAcGFyYW0gIFBhZ2VzICAgICAgICAgICAgICAgICBUaGUgbnVtYmVyIG9m IHBhZ2VzIHRvIGZyZWUuDQo+IC0gIEBwYXJhbSAgSG9zdEFkZHJlc3MgICAgICAgICAgIFRoZSBi YXNlIHN5c3RlbSBtZW1vcnkgYWRkcmVzcyBvZiB0aGUNCj4gYWxsb2NhdGVkIHJhbmdlLg0KPiAr ICBAcGFyYW0gW2luXSBUaGlzICAgICAgICAgICAgICAgICAgVGhlIFBQSSBpbnN0YW5jZSBwb2lu dGVyLg0KPiArICBAcGFyYW0gW2luXSBQYWdlcyAgICAgICAgICAgICAgICAgVGhlIG51bWJlciBv ZiBwYWdlcyB0byBmcmVlLg0KPiArICBAcGFyYW0gW2luXSBIb3N0QWRkcmVzcyAgICAgICAgICAg VGhlIGJhc2Ugc3lzdGVtIG1lbW9yeSBhZGRyZXNzIG9mIHRoZQ0KPiBhbGxvY2F0ZWQgcmFuZ2Uu DQo+IA0KPiAtICBAcmV0dmFsIEVGSV9TVUNDRVNTICAgICAgICAgICBUaGUgcmVxdWVzdGVkIG1l bW9yeSBwYWdlcyB3ZXJlIGZyZWVkLg0KPiAtICBAcmV0dmFsIEVGSV9JTlZBTElEX1BBUkFNRVRF UiBUaGUgbWVtb3J5IHJhbmdlIHNwZWNpZmllZCBieQ0KPiBIb3N0QWRkcmVzcyBhbmQgUGFnZXMN Cj4gLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2FzIG5vdCBhbGxvY2F0ZWQgd2l0 aCBBbGxvY2F0ZUJ1ZmZlcigpLg0KPiAtICBAcmV0dmFsIEVGSV9OT1RfQVZBSUxBQkxFX1lFVCBE TUEgcHJvdGVjdGlvbiBoYXMgYmVlbiBlbmFibGVkLCBidXQNCj4gRE1BIGJ1ZmZlciBhcmUNCj4g LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbm90IGF2YWlsYWJsZSB0byBiZSBhbGxv Y2F0ZWQgeWV0Lg0KPiArICBAcmV0dmFsIEVGSV9TVUNDRVNTICAgICAgICAgICAgICAgVGhlIHJl cXVlc3RlZCBtZW1vcnkgcGFnZXMgd2VyZSBmcmVlZC4NCj4gKyAgQHJldHZhbCBFRklfSU5WQUxJ RF9QQVJBTUVURVIgICAgIFRoZSBtZW1vcnkgcmFuZ2Ugc3BlY2lmaWVkIGJ5DQo+IEhvc3RBZGRy ZXNzIGFuZCBQYWdlcw0KPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2Fz IG5vdCBhbGxvY2F0ZWQgd2l0aCBBbGxvY2F0ZUJ1ZmZlcigpLg0KPiArICBAcmV0dmFsIEVGSV9O T1RfQVZBSUxBQkxFX1lFVCAgICAgRE1BIHByb3RlY3Rpb24gaGFzIGJlZW4gZW5hYmxlZCwNCj4g YnV0IERNQSBidWZmZXIgYXJlDQo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBub3QgYXZhaWxhYmxlIHRvIGJlIGFsbG9jYXRlZCB5ZXQuDQo+ICAqKi8NCj4gIEVGSV9TVEFU VVMNCj4gIEVGSUFQSQ0KPiBAQCAtMzY0LDUyICszNjQsMTE0IEBAIENPTlNUIEVGSV9QRUlfUFBJ X0RFU0NSSVBUT1IgbUlvTW11UHBpTGlzdA0KPiA9IHsNCj4gIH07DQo+IA0KPiAgLyoqDQo+IC0g IFJlbGVhc2UgdGhlIG1vbWVyeSBpbiB0aGUgSW50ZWwgVlRkIEluZm8NCj4gKyAgR2V0IEFDUEkg RE1BVCBUYWJsZSBmcm9tIEVka2lpVlRkSW5mbyBQUEkNCj4gDQo+IC0gIEBwYXJhbVtpbl0gIFZU ZEluZm8gICAgICAgICAgIFRoZSBWVGQgZW5naW5lIGNvbnRleHQgaW5mb3JtYXRpb24uDQo+ICsg IEByZXR2YWwgQWRkcmVzcyAgICAgICAgICAgICAgQUNQSSBETUFUIFRhYmxlIGFkZHJlc3MNCj4g KyAgQHJldHZhbCBOVUxMICAgICAgICAgICAgICAgICBGYWlsZWQgdG8gZ2V0IEFDUEkgRE1BVCBU YWJsZQ0KPiAgKiovDQo+IC1WT0lEDQo+IC1SZWxlYXNlVlRkSW5mbyAoDQo+IC0gIElOIFZURF9J TkZPICAgICAgICAgICAgICAgICAgICpWVGRJbmZvDQo+ICtFRklfQUNQSV9ETUFSX0hFQURFUiAq IEdldEFjcGlEbWFyVGFibGUgKA0KPiArICBWT0lEDQo+ICAgICkNCj4gIHsNCj4gLSAgVUlOVE4g ICAgICAgICAgICAgICAgICAgICAgICAgSW5kZXg7DQo+ICsgIEVGSV9TVEFUVVMgICAgICAgICAg ICAgICAgICBTdGF0dXM7DQo+ICsgIEVGSV9BQ1BJX0RNQVJfSEVBREVSICAgICAgICAqQWNwaURt YXJUYWJsZTsNCj4gDQo+IC0gIGZvciAoSW5kZXggPSAwOyBJbmRleCA8IFZUZEluZm8tPlZUZEVu Z2luZUNvdW50OyBJbmRleCsrKSB7DQo+IC0gICAgREVCVUcgKChERUJVR19JTkZPLCAiUmVsZWFz ZSBtb21lcnkgaW4gVlRkSW5mb1slZF1cbiIsIEluZGV4KSk7DQo+ICsgIC8vDQo+ICsgIC8vIEdl dCB0aGUgRE1BUiB0YWJsZQ0KPiArICAvLw0KPiArICBTdGF0dXMgPSBQZWlTZXJ2aWNlc0xvY2F0 ZVBwaSAoDQo+ICsgICAgICAgICAgICAgJmdFZGtpaVZUZEluZm9QcGlHdWlkLA0KPiArICAgICAg ICAgICAgIDAsDQo+ICsgICAgICAgICAgICAgTlVMTCwNCj4gKyAgICAgICAgICAgICAoVk9JRCAq KikmQWNwaURtYXJUYWJsZQ0KPiArICAgICAgICAgICAgICk7DQo+ICsgIGlmIChFRklfRVJST1Ig KFN0YXR1cykpIHsNCj4gKyAgICBERUJVRyAoKERFQlVHX0VSUk9SLCAiRmFpbCB0byBnZXQgQUNQ SSBETUFSIFRhYmxlIDogJXJcbiIsIFN0YXR1cykpOw0KPiArICAgIEFjcGlEbWFyVGFibGUgPSBO VUxMOw0KPiArICB9IGVsc2Ugew0KPiArICAgIER1bXBBY3BpRE1BUiAoQWNwaURtYXJUYWJsZSk7 DQo+ICsgIH0NCj4gDQo+IC0gICAgaWYgKFZUZEluZm8tPlZ0ZFVuaXRJbmZvW0luZGV4XS5GaXhl ZFNlY29uZExldmVsUGFnaW5nRW50cnkpIHsNCj4gLSAgICAgIEZyZWVQYWdlcyAoKFZPSUQgKikg KFVJTlROKSBWVGRJbmZvLQ0KPiA+VnRkVW5pdEluZm9bSW5kZXhdLkZpeGVkU2Vjb25kTGV2ZWxQ YWdpbmdFbnRyeSwgMSk7DQo+IC0gICAgICBWVGRJbmZvLT5WdGRVbml0SW5mb1tJbmRleF0uRml4 ZWRTZWNvbmRMZXZlbFBhZ2luZ0VudHJ5ID0gMDsNCj4gLSAgICB9DQo+ICsgIHJldHVybiBBY3Bp RG1hclRhYmxlOw0KPiArfQ0KPiANCj4gLSAgICBpZiAoVlRkSW5mby0+VnRkVW5pdEluZm9bSW5k ZXhdLlJtcnJTZWNvbmRMZXZlbFBhZ2luZ0VudHJ5KSB7DQo+IC0gICAgICBGcmVlUGFnZXMgKChW T0lEICopIChVSU5UTikgVlRkSW5mby0NCj4gPlZ0ZFVuaXRJbmZvW0luZGV4XS5SbXJyU2Vjb25k TGV2ZWxQYWdpbmdFbnRyeSwgMSk7DQo+IC0gICAgICBWVGRJbmZvLT5WdGRVbml0SW5mb1tJbmRl eF0uUm1yclNlY29uZExldmVsUGFnaW5nRW50cnkgPSAwOw0KPiAtICAgIH0NCj4gKy8qKg0KPiAr ICBHZXQgdGhlIFZUZCBlbmdpbmUgY29udGV4dCBpbmZvcm1hdGlvbiBob2IuDQo+IA0KPiAtICAg IGlmIChWVGRJbmZvLT5WdGRVbml0SW5mb1tJbmRleF0uUm9vdEVudHJ5VGFibGUpIHsNCj4gLSAg ICAgIEZyZWVQYWdlcyAoKFZPSUQgKikgKFVJTlROKSBWVGRJbmZvLQ0KPiA+VnRkVW5pdEluZm9b SW5kZXhdLlJvb3RFbnRyeVRhYmxlLCBWVGRJbmZvLQ0KPiA+VnRkVW5pdEluZm9bSW5kZXhdLlJv b3RFbnRyeVRhYmxlUGFnZVNpemUpOw0KPiAtICAgICAgVlRkSW5mby0+VnRkVW5pdEluZm9bSW5k ZXhdLlJvb3RFbnRyeVRhYmxlID0gMDsNCj4gLSAgICB9DQo+ICsgIEByZXR2YWwgVGhlIFZUZCBl bmdpbmUgY29udGV4dCBpbmZvcm1hdGlvbi4NCj4gDQo+IC0gICAgaWYgKFZUZEluZm8tPlZ0ZFVu aXRJbmZvW0luZGV4XS5FeHRSb290RW50cnlUYWJsZSkgew0KPiAtICAgICAgRnJlZVBhZ2VzICgo Vk9JRCAqKSAoVUlOVE4pIFZUZEluZm8tDQo+ID5WdGRVbml0SW5mb1tJbmRleF0uRXh0Um9vdEVu dHJ5VGFibGUsIFZUZEluZm8tDQo+ID5WdGRVbml0SW5mb1tJbmRleF0uRXh0Um9vdEVudHJ5VGFi bGVQYWdlU2l6ZSk7DQo+IC0gICAgICBWVGRJbmZvLT5WdGRVbml0SW5mb1tJbmRleF0uUm9vdEVu dHJ5VGFibGUgPSAwOw0KPiAtICAgIH0NCj4gKyoqLw0KPiArVlREX0lORk8gKg0KPiArR2V0VlRk SW5mb0hvYiAoDQo+ICsgIFZPSUQNCj4gKyAgKQ0KPiArew0KPiArICBWT0lEICAgICAgICAgICAg ICAgICAgICAgICAgICAqSG9iOw0KPiArICBWVERfSU5GTyAgICAgICAgICAgICAgICAgICAgICAq VlRkSW5mbzsNCj4gDQo+IC0gICAgaWYgKFZUZEluZm8tPlZ0ZFVuaXRJbmZvW0luZGV4XS5QY2lE ZXZpY2VJbmZvLlBjaURldmljZURhdGEpIHsNCj4gLSAgICAgIEZyZWVQYWdlcyAoKFZPSUQgKikg KFVJTlROKSBWVGRJbmZvLQ0KPiA+VnRkVW5pdEluZm9bSW5kZXhdLlBjaURldmljZUluZm8uUGNp RGV2aWNlRGF0YSwgVlRkSW5mby0NCj4gPlZ0ZFVuaXRJbmZvW0luZGV4XS5QY2lEZXZpY2VJbmZv LlBjaURldmljZURhdGFQYWdlU2l6ZSk7DQo+IC0gICAgICBWVGRJbmZvLT5WdGRVbml0SW5mb1tJ bmRleF0uUGNpRGV2aWNlSW5mby5QY2lEZXZpY2VEYXRhUGFnZVNpemUgPSAwOw0KPiAtICAgICAg VlRkSW5mby0+VnRkVW5pdEluZm9bSW5kZXhdLlBjaURldmljZUluZm8uUGNpRGV2aWNlRGF0YSA9 IDA7DQo+IC0gICAgICBWVGRJbmZvLT5WdGRVbml0SW5mb1tJbmRleF0uUGNpRGV2aWNlSW5mby5Q Y2lEZXZpY2VEYXRhTnVtYmVyID0gMDsNCj4gLSAgICAgIFZUZEluZm8tPlZ0ZFVuaXRJbmZvW0lu ZGV4XS5QY2lEZXZpY2VJbmZvLlBjaURldmljZURhdGFNYXhOdW1iZXIgPQ0KPiAwOw0KPiArICBI b2IgPSBHZXRGaXJzdEd1aWRIb2IgKCZtVlRkSW5mb0d1aWQpOw0KPiArICBpZiAoSG9iID09IE5V TEwpIHsNCj4gKyAgICBWVGRJbmZvID0gQnVpbGRHdWlkSG9iICgmbVZUZEluZm9HdWlkLCBzaXpl b2YgKFZURF9JTkZPKSk7DQo+ICsgICAgaWYgKFZUZEluZm8gIT0gTlVMTCkgew0KPiArICAgICAg WmVyb01lbSAoVlRkSW5mbywgc2l6ZW9mIChWVERfSU5GTykpOw0KPiAgICAgIH0NCj4gKyAgfSBl bHNlIHsNCj4gKyAgICBWVGRJbmZvID0gR0VUX0dVSURfSE9CX0RBVEEoSG9iKTsNCj4gICAgfQ0K PiArICByZXR1cm4gVlRkSW5mbzsNCj4gK30NCj4gKw0KPiArLyoqDQo+ICsgIENhbGxiYWNrIGZ1 bmN0aW9uIG9mIHBhcnNlIERNQVIgRFJIRCB0YWJsZSBpbiBwcmUtbWVtb3J5IHBoYXNlLg0KPiAr DQo+ICsgIEBwYXJhbSBbaW5dIFtvdXRdIENvbnRleHQgICAgICAgICAgQ2FsbGJhY2sgZnVuY3Rp b24gY29udGV4dC4NCj4gKyAgQHBhcmFtIFtpbl0gICAgICAgVlRkSW5kZXggICAgICAgICBUaGUg VlRkIGVuZ2luZSBpbmRleC4NCj4gKyAgQHBhcmFtIFtpbl0gICAgICAgRG1hckRyaGQgICAgICAg ICBUaGUgRFJIRCB0YWJsZS4NCj4gKw0KPiArKiovDQo+ICtWT0lEDQo+ICtQcm9jZXNzRGhyZFBy ZU1lbW9yeSAoDQo+ICsgIElOIE9VVCBWT0lEICAgICAgICAgICAgICAgICAgICAgICAqQ29udGV4 dCwNCj4gKyAgSU4gICAgIFVJTlQzMiAgICAgICAgICAgICAgICAgICAgIFZUZEluZGV4LA0KPiAr ICBJTiAgICAgRUZJX0FDUElfRE1BUl9EUkhEX0hFQURFUiAgKkRtYXJEcmhkDQo+ICsgICkNCj4g K3sNCj4gKyAgREVCVUcgKChERUJVR19JTkZPLCJWVEQgKCVkKSBCYXNlQWRkcmVzcyAtICAweCUw MTZseFxuIiwgVlRkSW5kZXgsDQo+IERtYXJEcmhkLT5SZWdpc3RlckJhc2VBZGRyZXNzKSk7DQo+ ICsNCj4gKyAgRW5hYmxlVlRkVHJhbnNsYXRpb25Qcm90ZWN0aW9uQmxvY2tEbWEgKChVSU5UTikg RG1hckRyaGQtDQo+ID5SZWdpc3RlckJhc2VBZGRyZXNzKTsNCj4gIH0NCj4gDQo+ICAvKioNCj4g LSAgSW5pdGlhbGl6ZXMgdGhlIEludGVsIFZUZCBJbmZvLg0KPiArICBDYWxsYmFjayBmdW5jdGlv biBvZiBwYXJzZSBETUFSIERSSEQgdGFibGUgaW4gcG9zdCBtZW1vcnkgcGhhc2UuDQo+ICsNCj4g KyAgQHBhcmFtIFtpbl0gW291dF0gQ29udGV4dCAgICAgICAgICBDYWxsYmFjayBmdW5jdGlvbiBj b250ZXh0Lg0KPiArICBAcGFyYW0gW2luXSAgICAgICBWVGRJbmRleCAgICAgICAgIFRoZSBWVGQg ZW5naW5lIGluZGV4Lg0KPiArICBAcGFyYW0gW2luXSAgICAgICBEbWFyRHJoZCAgICAgICAgIFRo ZSBEUkhEIHRhYmxlLg0KPiArDQo+ICsqKi8NCj4gK1ZPSUQNCj4gK1Byb2Nlc3NEcmhkUG9zdE1l bW9yeSAoDQo+ICsgIElOIE9VVCBWT0lEICAgICAgICAgICAgICAgICAgICAgICAqQ29udGV4dCwN Cj4gKyAgSU4gICAgIFVJTlQzMiAgICAgICAgICAgICAgICAgICAgIFZUZEluZGV4LA0KPiArICBJ TiAgICAgRUZJX0FDUElfRE1BUl9EUkhEX0hFQURFUiAgKkRtYXJEcmhkDQo+ICsgICkNCj4gK3sN Cj4gKyAgVlREX1VOSVRfSU5GTyAgICAgICAgICAgICAgICAgKlZ0ZFVuaXRJbmZvOw0KPiArDQo+ ICsgIFZ0ZFVuaXRJbmZvID0gKFZURF9VTklUX0lORk8gKikgQ29udGV4dDsNCj4gKyAgVnRkVW5p dEluZm8gKz0gVlRkSW5kZXg7DQo+ICsNCj4gKyAgVnRkVW5pdEluZm8tPkRvbmUgPSBGQUxTRTsN Cj4gKyAgVnRkVW5pdEluZm8tPlZ0ZFVuaXRCYXNlQWRkcmVzcyA9IChVSU5UTikgRG1hckRyaGQt DQo+ID5SZWdpc3RlckJhc2VBZGRyZXNzOw0KPiArICBWdGRVbml0SW5mby0+U2VnbWVudCA9IERt YXJEcmhkLT5TZWdtZW50TnVtYmVyOw0KPiArICBWdGRVbml0SW5mby0+RmxhZ3MgPSBEbWFyRHJo ZC0+RmxhZ3M7DQo+ICsNCj4gKyAgREVCVUcgKChERUJVR19JTkZPLCJWVEQgKCVkKSBCYXNlQWRk cmVzcyAtICAweCUwMTZseFxuIiwgVlRkSW5kZXgsDQo+IERtYXJEcmhkLT5SZWdpc3RlckJhc2VB ZGRyZXNzKSk7DQo+ICsgIERFQlVHICgoREVCVUdfSU5GTywiICBTZWdtZW50IC0gJWQsIEZsYWdz ICAgLSAweCV4XG4iLCBEbWFyRHJoZC0NCj4gPlNlZ21lbnROdW1iZXIsIERtYXJEcmhkLT5GbGFn cykpOw0KPiArfQ0KPiArDQo+ICsvKioNCj4gKyAgSW5pdGlhbGl6ZXMgdGhlIEludGVsIFZUZCBJ bmZvIGluIHBvc3QgbWVtb3J5IHBoYXNlLg0KPiANCj4gICAgQHJldHZhbCBFRklfU1VDQ0VTUyAg ICAgICAgICAgVXNiIGJvdCBkcml2ZXIgaXMgc3VjY2Vzc2Z1bGx5IGluaXRpYWxpemVkLg0KPiAg ICBAcmV0dmFsIEVGSV9PVVRfT0ZfUkVTT1VSQ0VTICBDYW4ndCBpbml0aWFsaXplIHRoZSBkcml2 ZXIuDQo+IEBAIC00MTksODkgKzQ4MSwxMDMgQEAgSW5pdFZUZEluZm8gKA0KPiAgICBWT0lEDQo+ ICAgICkNCj4gIHsNCj4gLSAgRUZJX1NUQVRVUyAgICAgICAgICAgICAgICAgICAgU3RhdHVzOw0K PiAtICBFRklfQUNQSV9ETUFSX0hFQURFUiAgICAgICAgICAqQWNwaURtYXJUYWJsZTsNCj4gLSAg Vk9JRCAgICAgICAgICAgICAgICAgICAgICAgICAgKkhvYjsNCj4gICAgVlREX0lORk8gICAgICAg ICAgICAgICAgICAgICAgKlZUZEluZm87DQo+IC0gIFVJTlQ2NCAgICAgICAgICAgICAgICAgICAg ICAgIEVuZ2luZU1hc2s7DQo+ICsgIEVGSV9BQ1BJX0RNQVJfSEVBREVSICAgICAgICAgICpBY3Bp RG1hclRhYmxlOw0KPiArICBVSU5UTiAgICAgICAgICAgICAgICAgICAgICAgICBWdGRVbml0TnVt YmVyOw0KPiArICBWVERfVU5JVF9JTkZPICAgICAgICAgICAgICAgICAqVnRkVW5pdEluZm87DQo+ ICsgIEVGSV9TVEFUVVMgICAgICAgICAgICAgICAgICAgIFN0YXR1czsNCj4gKyAgVUlOVE4gICAg ICAgICAgICAgICAgICAgICAgICAgTmV3VW5pdEluZGV4Ow0KPiArICBVSU5UTiAgICAgICAgICAg ICAgICAgICAgICAgICBQcmV2aW91c1VuaXRJbmRleDsNCj4gDQo+IC0gIFN0YXR1cyA9IFBlaVNl cnZpY2VzTG9jYXRlUHBpICgNCj4gLSAgICAgICAgICAgICAmZ0Vka2lpVlRkSW5mb1BwaUd1aWQs DQo+IC0gICAgICAgICAgICAgMCwNCj4gLSAgICAgICAgICAgICBOVUxMLA0KPiAtICAgICAgICAg ICAgIChWT0lEICoqKSZBY3BpRG1hclRhYmxlDQo+IC0gICAgICAgICAgICAgKTsNCj4gLSAgQVNT RVJUX0VGSV9FUlJPUiAoU3RhdHVzKTsNCj4gKyAgVlRkSW5mbyA9IEdldFZUZEluZm9Ib2IgKCk7 DQo+ICsgIEFTU0VSVCAoVlRkSW5mbyAhPSBOVUxMKTsNCj4gDQo+IC0gIER1bXBBY3BpRE1BUiAo QWNwaURtYXJUYWJsZSk7DQo+ICsgIEFjcGlEbWFyVGFibGUgPSBHZXRBY3BpRG1hclRhYmxlICgp Ow0KPiArICBBU1NFUlQgKEFjcGlEbWFyVGFibGUgIT0gTlVMTCk7DQo+IA0KPiAgICAvLw0KPiAt ICAvLyBDbGVhciBvbGQgVlRkSW5mbyBIb2IuDQo+ICsgIC8vIEdldCBWVGQgVW5pdCBOdW1iZXIN Cj4gICAgLy8NCj4gLSAgSG9iID0gR2V0Rmlyc3RHdWlkSG9iICgmbVZUZEluZm9HdWlkKTsNCj4g LSAgaWYgKEhvYiAhPSBOVUxMKSB7DQo+IC0gICAgREVCVUcgKChERUJVR19JTkZPLCAiIEZpbmQg SG9iIDogbVZUZEluZm9HdWlkIC0gMHgleFxuIiwgSG9iKSk7DQo+IC0NCj4gLSAgICBWVGRJbmZv ID0gR0VUX0dVSURfSE9CX0RBVEEoSG9iKTsNCj4gLSAgICBFbmdpbmVNYXNrID0gTFNoaWZ0VTY0 ICgxLCBWVGRJbmZvLT5WVGRFbmdpbmVDb3VudCkgLSAxOw0KPiAtICAgIEVuYWJsZVZUZFRyYW5z bGF0aW9uUHJvdGVjdGlvbkFsbCAoVlRkSW5mbywgRW5naW5lTWFzayk7DQo+IC0NCj4gLSAgICBS ZWxlYXNlVlRkSW5mbyAoVlRkSW5mbyk7DQo+IC0gICAgVlRkSW5mby0+VlRkRW5naW5lQ291bnQg PSAwOw0KPiArICBWdGRVbml0TnVtYmVyID0gUGFyc2VEbWFyQWNwaVRhYmxlRHJoZCAoQWNwaURt YXJUYWJsZSwgTlVMTCwgTlVMTCk7DQo+ICsgIGlmIChWdGRVbml0TnVtYmVyID09IDApIHsNCj4g KyAgICByZXR1cm4gRUZJX1VOU1VQUE9SVEVEOw0KPiArICB9DQo+IA0KPiAtICAgIFplcm9NZW0g KCYoKEVGSV9IT0JfR1VJRF9UWVBFICopIEhvYiktPk5hbWUsIHNpemVvZiAoRUZJX0dVSUQpKTsN Cj4gKyAgLy8NCj4gKyAgLy8gR2VucmF0ZSBhIG5ldyBWdGQgVW5pdCBJbmZvIFRhYmxlDQo+ICsg IC8vDQo+ICsgIFZ0ZFVuaXRJbmZvID0gQWxsb2NhdGVaZXJvUGFnZXMgKEVGSV9TSVpFX1RPX1BB R0VTIChzaXplb2YNCj4gKFZURF9VTklUX0lORk8pICogVnRkVW5pdE51bWJlcikpOw0KPiArICBp ZiAoVnRkVW5pdEluZm8gPT0gTlVMTCkgew0KPiArICAgIERFQlVHICgoREVCVUdfRVJST1IsICJJ bml0VlRkSW5mbyAtIE9VVF9PRl9SRVNPVVJDRVxuIikpOw0KPiArICAgIEFTU0VSVCAoRkFMU0Up Ow0KPiArICAgIHJldHVybiBFRklfT1VUX09GX1JFU09VUkNFUzsNCj4gICAgfQ0KPiANCj4gICAg Ly8NCj4gLSAgLy8gR2V0IERNQVIgaW5mb3JtYXRpb24gdG8gbG9jYWwgVlRkSW5mbw0KPiArICAv LyBQYXJzZSB0aGUgRE1BUiBBQ1BJIFRhYmxlIHRvIHRoZSBuZXcgVnRkIFVuaXQgSW5mbyBUYWJs ZQ0KPiAgICAvLw0KPiAtICBTdGF0dXMgPSBQYXJzZURtYXJBY3BpVGFibGVEcmhkIChBY3BpRG1h clRhYmxlKTsNCj4gLSAgaWYgKEVGSV9FUlJPUihTdGF0dXMpKSB7DQo+IC0gICAgREVCVUcgKChE RUJVR19FUlJPUiwgIiBQYXJzZURtYXJBY3BpVGFibGVEcmhkIDogJXJcbiIsIFN0YXR1cykpOw0K PiArICBTdGF0dXMgPSBQYXJzZURtYXJBY3BpVGFibGVEcmhkIChBY3BpRG1hclRhYmxlLA0KPiBQ cm9jZXNzRHJoZFBvc3RNZW1vcnksIFZ0ZFVuaXRJbmZvKTsNCj4gKyAgaWYgKEVGSV9FUlJPUiAo U3RhdHVzKSkgew0KPiArICAgIEFTU0VSVF9FRklfRVJST1IgKFN0YXR1cyk7DQo+ICAgICAgcmV0 dXJuIFN0YXR1czsNCj4gICAgfQ0KPiANCj4gICAgLy8NCj4gLSAgLy8gTk9URTogRG8gbm90IHBh cnNlIFJNUlIgaGVyZSwgYmVjYXVzZSBSTVJSIG1heSBjYXVzZSBETUFSDQo+IHByb2dyYW1taW5n Lg0KPiArICAvLyBDaGVjayBIb3N0IEFkZHJlc3MgV2lkdGgNCj4gICAgLy8NCj4gKyAgaWYgKEFj cGlEbWFyVGFibGUtPkhvc3RBZGRyZXNzV2lkdGggPT0gVlRkSW5mby0+SG9zdEFkZHJlc3NXaWR0 aCkgew0KPiArICAgIC8vDQo+ICsgICAgLy8gTmV3IFZ0ZCBVbml0IEluZm8gVGFibGUgTG9vcA0K PiArICAgIC8vDQo+ICsgICAgZm9yIChOZXdVbml0SW5kZXggPSAwOyBOZXdVbml0SW5kZXggPCBW dGRVbml0TnVtYmVyOw0KPiBOZXdVbml0SW5kZXgrKykgew0KPiArICAgICAgLy8NCj4gKyAgICAg IC8vIFByZXZpb3VzIFZ0ZCBVbml0IEluZm8gVGFibGUgTG9vcA0KPiArICAgICAgLy8NCj4gKyAg ICAgIGZvciAoUHJldmlvdXNVbml0SW5kZXggPSAwOyBQcmV2aW91c1VuaXRJbmRleCA8IFZUZElu Zm8tDQo+ID5WVGRFbmdpbmVDb3VudDsgUHJldmlvdXNVbml0SW5kZXgrKykgew0KPiArICAgICAg ICAvLw0KPiArICAgICAgICAvLyBDb21wYXJlIHRoZSBuZXcgVnRkIFVuaXQgd2l0aCB0aGUgcHJl dmlvdXMgVlRkIFVuaXQNCj4gKyAgICAgICAgLy8NCj4gKyAgICAgICAgaWYgKFZ0ZFVuaXRJbmZv W05ld1VuaXRJbmRleF0uVnRkVW5pdEJhc2VBZGRyZXNzID09IFZUZEluZm8tDQo+ID5WdGRVbml0 SW5mb1tQcmV2aW91c1VuaXRJbmRleF0uVnRkVW5pdEJhc2VBZGRyZXNzKSB7DQo+ICsgICAgICAg ICAgREVCVUcgKChERUJVR19JTkZPLCJGaW5kIFZURCBbMHglMDh4XSBFeGlzdFxuIiwNCj4gVnRk VW5pdEluZm9bTmV3VW5pdEluZGV4XS5WdGRVbml0QmFzZUFkZHJlc3MpKTsNCj4gKyAgICAgICAg ICBDb3B5TWVtICgmVnRkVW5pdEluZm9bTmV3VW5pdEluZGV4XSwgJlZUZEluZm8tDQo+ID5WdGRV bml0SW5mb1tQcmV2aW91c1VuaXRJbmRleF0sIHNpemVvZiAoVlREX1VOSVRfSU5GTykpOw0KPiAr ICAgICAgICAgIFZ0ZFVuaXRJbmZvW05ld1VuaXRJbmRleF0uRG9uZSA9IFRSVUU7DQo+ICsNCj4g KyAgICAgICAgICBicmVhazsNCj4gKyAgICAgICAgfQ0KPiArICAgICAgfQ0KPiArICAgIH0NCj4g KyAgfQ0KPiArICBWVGRJbmZvLT5BY3BpRG1hclRhYmxlID0gQWNwaURtYXJUYWJsZTsNCj4gKyAg VlRkSW5mby0+SG9zdEFkZHJlc3NXaWR0aCA9IEFjcGlEbWFyVGFibGUtPkhvc3RBZGRyZXNzV2lk dGg7DQo+ICsgIFZUZEluZm8tPlZUZEVuZ2luZUNvdW50ID0gVnRkVW5pdE51bWJlcjsNCj4gKyAg VlRkSW5mby0+VnRkVW5pdEluZm8gPSBWdGRVbml0SW5mbzsNCj4gDQo+ICAgIHJldHVybiBFRklf U1VDQ0VTUzsNCj4gIH0NCj4gDQo+ICAvKioNCj4gLSAgSW5pdGlhbGl6ZXMgdGhlIEludGVsIFZU ZCBETUFSIGZvciBhbGwgbWVtb3J5Lg0KPiArICBJbml0aWFsaXplcyB0aGUgSW50ZWwgVlRkIERN QVIgZm9yIGJsb2NrIGFsbCBETUEuDQo+IA0KPiAgICBAcmV0dmFsIEVGSV9TVUNDRVNTICAgICAg ICAgICBEcml2ZXIgaXMgc3VjY2Vzc2Z1bGx5IGluaXRpYWxpemVkLg0KPiAgICBAcmV0dmFsIFJF VFVSTl9OT1RfUkVBRFkgICAgICBGYWlsIHRvIGdldCBWVGRJbmZvIEhvYiAuDQo+ICAqKi8NCj4g IEVGSV9TVEFUVVMNCj4gLUluaXRWVGREbWFyRm9yQWxsICgNCj4gK0luaXRWVGREbWFyQmxvY2tB bGwgKA0KPiAgICBWT0lEDQo+ICAgICkNCj4gIHsNCj4gLSAgVk9JRCAgICAgICAgICAgICAgICAg ICAgICAgICAgKkhvYjsNCj4gLSAgVlREX0lORk8gICAgICAgICAgICAgICAgICAgICAgKlZUZElu Zm87DQo+IC0gIFVJTlQ2NCAgICAgICAgICAgICAgICAgICAgICAgIEVuZ2luZU1hc2s7DQo+IC0g IEVGSV9TVEFUVVMgICAgICAgICAgICAgICAgICAgIFN0YXR1czsNCj4gKyAgRUZJX0FDUElfRE1B Ul9IRUFERVIgICAgICAqQWNwaURtYXJUYWJsZTsNCj4gDQo+IC0gIEhvYiA9IEdldEZpcnN0R3Vp ZEhvYiAoJm1WVGRJbmZvR3VpZCk7DQo+IC0gIGlmIChIb2IgPT0gTlVMTCkgew0KPiAtICAgIERF QlVHICgoREVCVUdfRVJST1IsICJGYWlsIHRvIGdldCBWVGRJbmZvIEhvYi5cbiIpKTsNCj4gLSAg ICByZXR1cm4gUkVUVVJOX05PVF9SRUFEWTsNCj4gLSAgfQ0KPiAtICBWVGRJbmZvID0gR0VUX0dV SURfSE9CX0RBVEEgKEhvYik7DQo+IC0gIEVuZ2luZU1hc2sgPSBMU2hpZnRVNjQgKDEsIFZUZElu Zm8tPlZUZEVuZ2luZUNvdW50KSAtIDE7DQo+IC0NCj4gLSAgREVCVUcgKChERUJVR19JTkZPLCAi UHJlcGFyZVZ0ZENvbmZpZ1xuIikpOw0KPiAtICBTdGF0dXMgPSBQcmVwYXJlVnRkQ29uZmlnIChW VGRJbmZvKTsNCj4gLSAgaWYgKEVGSV9FUlJPUiAoU3RhdHVzKSkgew0KPiAtICAgIEFTU0VSVF9F RklfRVJST1IgKFN0YXR1cyk7DQo+IC0gICAgcmV0dXJuIFN0YXR1czsNCj4gLSAgfQ0KPiAtDQo+ IC0gIEVuYWJsZVZUZFRyYW5zbGF0aW9uUHJvdGVjdGlvbkFsbCAoVlRkSW5mbywgRW5naW5lTWFz ayk7DQo+ICsgIC8vDQo+ICsgIC8vIEdldCB0aGUgRE1BUiB0YWJsZQ0KPiArICAvLw0KPiArICBB Y3BpRG1hclRhYmxlID0gR2V0QWNwaURtYXJUYWJsZSAoKTsNCj4gKyAgQVNTRVJUIChBY3BpRG1h clRhYmxlICE9IE5VTEwpOw0KPiANCj4gLSAgcmV0dXJuIEVGSV9TVUNDRVNTOw0KPiArICAvLw0K PiArICAvLyBQYXJzZSB0aGUgRE1BUiB0YWJsZSBhbmQgYmxvY2sgYWxsIERNQQ0KPiArICAvLw0K PiArICByZXR1cm4gUGFyc2VEbWFyQWNwaVRhYmxlRHJoZCAoQWNwaURtYXJUYWJsZSwgUHJvY2Vz c0RocmRQcmVNZW1vcnksDQo+IE5VTEwpOw0KPiAgfQ0KPiANCj4gIC8qKg0KPiBAQCAtNTI0LDgg KzYwMCw4IEBAIEluaXREbWFCdWZmZXIoDQo+ICAgIERFQlVHICgoREVCVUdfSU5GTywgIkluaXRE bWFCdWZmZXIgOlxuIikpOw0KPiANCj4gICAgSG9iID0gR2V0Rmlyc3RHdWlkSG9iICgmbURtYUJ1 ZmZlckluZm9HdWlkKTsNCj4gKyAgQVNTRVJUKEhvYiAhPSBOVUxMKTsNCj4gICAgRG1hQnVmZmVy SW5mbyA9IEdFVF9HVUlEX0hPQl9EQVRBIChIb2IpOw0KPiAtICBWdGRQbXJIb2JQdHIgPSBHZXRG aXJzdEd1aWRIb2IgKCZnVnRkUG1ySW5mb0RhdGFIb2JHdWlkKTsNCj4gDQo+ICAgIC8qKg0KPiAg ICBXaGVuIGdWdGRQbXJJbmZvRGF0YUhvYkd1aWQgZXhpc3RzLCBpdCBtZWFuczoNCj4gQEAgLTUz NSw3ICs2MTEsNyBAQCBJbml0RG1hQnVmZmVyKA0KPiAgICAgIDQuIFByb3RlY3Rpb24gcmVnaW9u cyB3aWxsIGJlIGNvbnZleWVkIHRocm91Z2ggVlREX1BNUl9JTkZPX0hPQg0KPiANCj4gICAgV2hl biBnVnRkUG1ySW5mb0RhdGFIb2JHdWlkIGRvc2VuJ3QgZXhpc3QsIGl0IG1lYW5zOg0KPiAtICAg IDEuIEludGVsVlRkRG1hciBkcml2ZXIgd2lsbCBjYWxjdWF0ZSB0aGUgUE1SIG1lbW9yeSBhbGln bm1lbnQNCj4gKyAgICAxLiBJbnRlbFZUZERtYXJQZWkgZHJpdmVyIHdpbGwgY2FsY3VhdGUgdGhl IHByb3RlY3RlZCBtZW1vcnkgYWxpZ25tZW50DQo+ICAgICAgMi4gRG1hIGJ1ZmZlciBpcyByZXNl cnZlZCBieSBBbGxvY2F0ZUFsaWduZWRQYWdlcygpDQo+ICAgICoqLw0KPiANCj4gQEAgLTU0NSwz MyArNjIxLDQwIEBAIEluaXREbWFCdWZmZXIoDQo+ICAgICAgcmV0dXJuIEVGSV9JTlZBTElEX1BB UkFNRVRFUjsNCj4gICAgfQ0KPiANCj4gLSAgaWYgKFZ0ZFBtckhvYlB0ciA9PSBOVUxMKSB7DQo+ IC0gICAgLy8NCj4gLSAgICAvLyBBbGxvY2F0ZSBtZW1vcnkgZm9yIERNQSBidWZmZXINCj4gLSAg ICAvLw0KPiAtICAgIERtYUJ1ZmZlckluZm8tPkRtYUJ1ZmZlckJhc2UgPSAoVUlOVDY0KSAoVUlO VE4pDQo+IEFsbG9jYXRlQWxpZ25lZFBhZ2VzIChFRklfU0laRV9UT19QQUdFUyAoKFVJTlROKSBE bWFCdWZmZXJJbmZvLQ0KPiA+RG1hQnVmZmVyU2l6ZSksIDApOw0KPiAtICAgIGlmIChEbWFCdWZm ZXJJbmZvLT5EbWFCdWZmZXJCYXNlID09IDApIHsNCj4gLSAgICAgIERFQlVHICgoREVCVUdfRVJS T1IsICIgSW5pdERtYUJ1ZmZlciA6IE91dE9mUmVzb3VyY2VcbiIpKTsNCj4gLSAgICAgIHJldHVy biBFRklfT1VUX09GX1JFU09VUkNFUzsNCj4gKyAgaWYgKERtYUJ1ZmZlckluZm8tPkRtYUJ1ZmZl ckJhc2UgPT0gMCkgew0KPiArICAgIFZ0ZFBtckhvYlB0ciA9IEdldEZpcnN0R3VpZEhvYiAoJmdW dGRQbXJJbmZvRGF0YUhvYkd1aWQpOw0KPiArICAgIGlmIChWdGRQbXJIb2JQdHIgIT0gTlVMTCkg ew0KPiArICAgICAgLy8NCj4gKyAgICAgIC8vIEdldCB0aGUgcHJvdGVjdGVkIG1lbW9yeSByYW5n ZXMgaW5mb3JtYXRpb24gZnJvbSB0aGUgVlRkIFBNUiBob2INCj4gKyAgICAgIC8vDQo+ICsgICAg ICBWdGRQbXJIb2IgPSBHRVRfR1VJRF9IT0JfREFUQSAoVnRkUG1ySG9iUHRyKTsNCj4gKw0KPiAr ICAgICAgaWYgKChWdGRQbXJIb2ItPlByb3RlY3RlZEhpZ2hCYXNlIC0gVnRkUG1ySG9iLT5Qcm90 ZWN0ZWRMb3dMaW1pdCkNCj4gPCBEbWFCdWZmZXJJbmZvLT5EbWFCdWZmZXJTaXplKSB7DQo+ICsg ICAgICAgIERFQlVHICgoREVCVUdfRVJST1IsICIgRG1hQnVmZmVyU2l6ZSBub3QgZW5vdWdoXG4i KSk7DQo+ICsgICAgICAgIHJldHVybiBFRklfSU5WQUxJRF9QQVJBTUVURVI7DQo+ICsgICAgICB9 DQo+ICsgICAgICBEbWFCdWZmZXJJbmZvLT5EbWFCdWZmZXJCYXNlID0gVnRkUG1ySG9iLT5Qcm90 ZWN0ZWRMb3dMaW1pdDsNCj4gKyAgICB9IGVsc2Ugew0KPiArICAgICAgLy8NCj4gKyAgICAgIC8v IEFsbG9jYXRlIG1lbW9yeSBmb3IgRE1BIGJ1ZmZlcg0KPiArICAgICAgLy8NCj4gKyAgICAgIERt YUJ1ZmZlckluZm8tPkRtYUJ1ZmZlckJhc2UgPSAoVUlOVE4pIEFsbG9jYXRlQWxpZ25lZFBhZ2Vz DQo+IChFRklfU0laRV9UT19QQUdFUyAoRG1hQnVmZmVySW5mby0+RG1hQnVmZmVyU2l6ZSksIDAp Ow0KPiArICAgICAgaWYgKERtYUJ1ZmZlckluZm8tPkRtYUJ1ZmZlckJhc2UgPT0gMCkgew0KPiAr ICAgICAgICBERUJVRyAoKERFQlVHX0VSUk9SLCAiIEluaXREbWFCdWZmZXIgOiBPdXRPZlJlc291 cmNlXG4iKSk7DQo+ICsgICAgICAgIHJldHVybiBFRklfT1VUX09GX1JFU09VUkNFUzsNCj4gKyAg ICAgIH0NCj4gKyAgICAgIERFQlVHICgoREVCVUdfSU5GTywgIkFsbG9jIERNQSBidWZmZXIgc3Vj Y2Vzcy5cbiIpKTsNCj4gICAgICB9DQo+IC0gICAgRG1hQnVmZmVySW5mby0+RG1hQnVmZmVyTGlt aXQgPSBEbWFCdWZmZXJJbmZvLT5EbWFCdWZmZXJCYXNlICsNCj4gRG1hQnVmZmVySW5mby0+RG1h QnVmZmVyU2l6ZTsNCj4gLSAgICBERUJVRyAoKERFQlVHX0lORk8sICJBbGxvYyBETUEgYnVmZmVy IHN1Y2Nlc3MuXG4iKSk7DQo+IC0gIH0gZWxzZSB7DQo+IC0gICAgLy8NCj4gLSAgICAvLyBHZXQg dGhlIFBNUiByYW5nZXMgaW5mb3JtYXRpb24gZm9yIHRoZSBWVGQgUE1SIGhvYg0KPiAtICAgIC8v DQo+IC0gICAgVnRkUG1ySG9iID0gR0VUX0dVSURfSE9CX0RBVEEgKFZ0ZFBtckhvYlB0cik7DQo+ IC0gICAgRG1hQnVmZmVySW5mby0+RG1hQnVmZmVyQmFzZSA9IFZ0ZFBtckhvYi0+UHJvdGVjdGVk TG93TGltaXQ7DQo+IC0gICAgRG1hQnVmZmVySW5mby0+RG1hQnVmZmVyTGltaXQgPSBWdGRQbXJI b2ItPlByb3RlY3RlZEhpZ2hCYXNlOw0KPiArDQo+ICsgICAgRG1hQnVmZmVySW5mby0+RG1hQnVm ZmVyQ3VycmVudFRvcCA9IERtYUJ1ZmZlckluZm8tDQo+ID5EbWFCdWZmZXJCYXNlICsgRG1hQnVm ZmVySW5mby0+RG1hQnVmZmVyU2l6ZTsNCj4gKyAgICBEbWFCdWZmZXJJbmZvLT5EbWFCdWZmZXJD dXJyZW50Qm90dG9tID0gRG1hQnVmZmVySW5mby0NCj4gPkRtYUJ1ZmZlckJhc2U7DQo+ICsNCj4g KyAgICBERUJVRyAoKERFQlVHX0lORk8sICIgRG1hQnVmZmVyU2l6ZSAgICAgICAgICA6IDB4JXhc biIsIERtYUJ1ZmZlckluZm8tDQo+ID5EbWFCdWZmZXJTaXplKSk7DQo+ICsgICAgREVCVUcgKChE RUJVR19JTkZPLCAiIERtYUJ1ZmZlckJhc2UgICAgICAgICAgOiAweCV4XG4iLCBEbWFCdWZmZXJJ bmZvLQ0KPiA+RG1hQnVmZmVyQmFzZSkpOw0KPiAgICB9DQo+IC0gIERtYUJ1ZmZlckluZm8tPkRt YUJ1ZmZlckN1cnJlbnRUb3AgPSBEbWFCdWZmZXJJbmZvLT5EbWFCdWZmZXJCYXNlDQo+ICsgRG1h QnVmZmVySW5mby0+RG1hQnVmZmVyU2l6ZTsNCj4gLSAgRG1hQnVmZmVySW5mby0+RG1hQnVmZmVy Q3VycmVudEJvdHRvbSA9IERtYUJ1ZmZlckluZm8tDQo+ID5EbWFCdWZmZXJCYXNlOw0KPiANCj4g LSAgREVCVUcgKChERUJVR19JTkZPLCAiIERtYUJ1ZmZlclNpemUgICAgICAgICAgOiAweCVseFxu IiwgRG1hQnVmZmVySW5mby0NCj4gPkRtYUJ1ZmZlclNpemUpKTsNCj4gLSAgREVCVUcgKChERUJV R19JTkZPLCAiIERtYUJ1ZmZlckJhc2UgICAgICAgICAgOiAweCVseFxuIiwgRG1hQnVmZmVySW5m by0NCj4gPkRtYUJ1ZmZlckJhc2UpKTsNCj4gLSAgREVCVUcgKChERUJVR19JTkZPLCAiIERtYUJ1 ZmZlckxpbWl0ICAgICAgICAgOiAweCVseFxuIiwgRG1hQnVmZmVySW5mby0NCj4gPkRtYUJ1ZmZl ckxpbWl0KSk7DQo+IC0gIERFQlVHICgoREVCVUdfSU5GTywgIiBEbWFCdWZmZXJDdXJyZW50VG9w ICAgIDogMHglbHhcbiIsDQo+IERtYUJ1ZmZlckluZm8tPkRtYUJ1ZmZlckN1cnJlbnRUb3ApKTsN Cj4gLSAgREVCVUcgKChERUJVR19JTkZPLCAiIERtYUJ1ZmZlckN1cnJlbnRCb3R0b20gOiAweCVs eFxuIiwNCj4gRG1hQnVmZmVySW5mby0+RG1hQnVmZmVyQ3VycmVudEJvdHRvbSkpOw0KPiArICBE RUJVRyAoKERFQlVHX0lORk8sICIgRG1hQnVmZmVyQ3VycmVudFRvcCAgICA6IDB4JXhcbiIsDQo+ IERtYUJ1ZmZlckluZm8tPkRtYUJ1ZmZlckN1cnJlbnRUb3ApKTsNCj4gKyAgREVCVUcgKChERUJV R19JTkZPLCAiIERtYUJ1ZmZlckN1cnJlbnRCb3R0b20gOiAweCV4XG4iLA0KPiBEbWFCdWZmZXJJ bmZvLT5EbWFCdWZmZXJDdXJyZW50Qm90dG9tKSk7DQo+IA0KPiAgICByZXR1cm4gRUZJX1NVQ0NF U1M7DQo+ICB9DQo+IEBAIC01ODgsMTQgKzY3MSwxNCBAQCBJbml0VlRkRG1hckZvckRtYSAoDQo+ ICAgIFZPSUQNCj4gICAgKQ0KPiAgew0KPiAtICBWT0lEICAgICAgICAgICAgICAgICAgICAgICAg ICAqSG9iOw0KPiAgICBWVERfSU5GTyAgICAgICAgICAgICAgICAgICAgICAqVlRkSW5mbzsNCj4g Kw0KPiAgICBFRklfU1RBVFVTICAgICAgICAgICAgICAgICAgICBTdGF0dXM7DQo+ICAgIEVGSV9Q RUlfUFBJX0RFU0NSSVBUT1IgICAgICAgICpPbGREZXNjcmlwdG9yOw0KPiAgICBFREtJSV9JT01N VV9QUEkgICAgICAgICAgICAgICAqT2xkSW9NbXVQcGk7DQo+IA0KPiAtICBIb2IgPSBHZXRGaXJz dEd1aWRIb2IgKCZtVlRkSW5mb0d1aWQpOw0KPiAtICBWVGRJbmZvID0gR0VUX0dVSURfSE9CX0RB VEEgKEhvYik7DQo+ICsgIFZUZEluZm8gPSBHZXRWVGRJbmZvSG9iICgpOw0KPiArICBBU1NFUlQg KFZUZEluZm8gIT0gTlVMTCk7DQo+IA0KPiAgICBERUJVRyAoKERFQlVHX0lORk8sICJQcmVwYXJl VnRkQ29uZmlnXG4iKSk7DQo+ICAgIFN0YXR1cyA9IFByZXBhcmVWdGRDb25maWcgKFZUZEluZm8p Ow0KPiBAQCAtNjA0LDEzICs2ODcsNiBAQCBJbml0VlRkRG1hckZvckRtYSAoDQo+ICAgICAgcmV0 dXJuIFN0YXR1czsNCj4gICAgfQ0KPiANCj4gLSAgREVCVUcgKChERUJVR19JTkZPLCAiUHJlcGFy ZVZ0ZENhY2hlSW52YWxpZGF0aW9uQ29uZmlnXG4iKSk7DQo+IC0gIFN0YXR1cyA9IFByZXBhcmVW dGRDYWNoZUludmFsaWRhdGlvbkNvbmZpZyAoVlRkSW5mbyk7DQo+IC0gIGlmIChFRklfRVJST1Ig KFN0YXR1cykpIHsNCj4gLSAgICBBU1NFUlRfRUZJX0VSUk9SIChTdGF0dXMpOw0KPiAtICAgIHJl dHVybiBTdGF0dXM7DQo+IC0gIH0NCj4gLQ0KPiAgICAvLyBjcmVhdGUgcm9vdCBlbnRyeSB0YWJs ZQ0KPiAgICBERUJVRyAoKERFQlVHX0lORk8sICJTZXR1cFRyYW5zbGF0aW9uVGFibGVcbiIpKTsN Cj4gICAgU3RhdHVzID0gU2V0dXBUcmFuc2xhdGlvblRhYmxlIChWVGRJbmZvKTsNCj4gQEAgLTYx OSwxMCArNjk1LDYgQEAgSW5pdFZUZERtYXJGb3JEbWEgKA0KPiAgICAgIHJldHVybiBTdGF0dXM7 DQo+ICAgIH0NCj4gDQo+IC0gIC8vIElmIHRoZXJlIGlzIFJNUlIgbWVtb3J5LCBwYXJzZSBpdCBo ZXJlLg0KPiAtICBERUJVRyAoKERFQlVHX0lORk8sICJQZWlQYXJzZURtYXJBY3BpVGFibGVSbXJy XG4iKSk7DQo+IC0gIFBhcnNlRG1hckFjcGlUYWJsZVJtcnIgKFZUZEluZm8pOw0KPiAtDQo+ICAg IERFQlVHICgoREVCVUdfSU5GTywgIkVuYWJsZVZ0ZERtYXJcbiIpKTsNCj4gICAgU3RhdHVzID0g RW5hYmxlVlRkVHJhbnNsYXRpb25Qcm90ZWN0aW9uKFZUZEluZm8pOw0KPiAgICBpZiAoRUZJX0VS Uk9SIChTdGF0dXMpKSB7DQo+IEBAIC02NjgsMjEgKzc0MCwxMCBAQCBTM0VuZE9mUGVpTm90aWZ5 KA0KPiAgICBJTiBWT0lEICAgICAgICAgICAgICAgICAgICAgICAqUHBpDQo+ICAgICkNCj4gIHsN Cj4gLSAgVk9JRCAgICAgICAgICAgICAgICAgICAgICAgICAgKkhvYjsNCj4gLSAgVlREX0lORk8g ICAgICAgICAgICAgICAgICAgICAgKlZUZEluZm87DQo+IC0gIFVJTlQ2NCAgICAgICAgICAgICAg ICAgICAgICAgIEVuZ2luZU1hc2s7DQo+IC0NCj4gICAgREVCVUcoKERFQlVHX0lORk8sICJWVGQg RE1BUiBQRUkgUzNFbmRPZlBlaU5vdGlmeVxuIikpOw0KPiANCj4gICAgaWYgKChQY2RHZXQ4KFBj ZFZUZFBvbGljeVByb3BlcnR5TWFzaykgJiBCSVQxKSA9PSAwKSB7DQo+IC0gICAgSG9iID0gR2V0 Rmlyc3RHdWlkSG9iICgmbVZUZEluZm9HdWlkKTsNCj4gLSAgICBpZiAoSG9iID09IE5VTEwpIHsN Cj4gLSAgICAgIHJldHVybiBFRklfU1VDQ0VTUzsNCj4gLSAgICB9DQo+IC0gICAgVlRkSW5mbyA9 IEdFVF9HVUlEX0hPQl9EQVRBKEhvYik7DQo+IC0NCj4gLSAgICBFbmdpbmVNYXNrID0gTFNoaWZ0 VTY0ICgxLCBWVGRJbmZvLT5WVGRFbmdpbmVDb3VudCkgLSAxOw0KPiAtICAgIERpc2FibGVWVGRU cmFuc2xhdGlvblByb3RlY3Rpb24gKFZUZEluZm8sIEVuZ2luZU1hc2spOw0KPiArICAgIERpc2Fi bGVWVGRUcmFuc2xhdGlvblByb3RlY3Rpb24gKEdldFZUZEluZm9Ib2IgKCkpOw0KPiAgICB9DQo+ ICAgIHJldHVybiBFRklfU1VDQ0VTUzsNCj4gIH0NCj4gQEAgLTczMywxOCArNzk0LDEzIEBAIFZU ZEluZm9Ob3RpZnkgKA0KPiANCj4gICAgREVCVUcgKChERUJVR19JTkZPLCAiTWVtb3J5SW5pdGlh bGl6ZWQgLSAleFxuIiwgTWVtb3J5SW5pdGlhbGl6ZWQpKTsNCj4gDQo+IC0gIC8vDQo+IC0gIC8v IE5PVEU6IFdlIG5lZWQgcmVpbml0IFZUZEluZm8gYmVjYXVzZSBwcmV2aW91cyBpbmZvcm1hdGlv biBtaWdodCBiZQ0KPiBvdmVycmlkZW4uDQo+IC0gIC8vDQo+IC0gIEluaXRWVGRJbmZvICgpOw0K PiAtDQo+ICAgIGlmICghTWVtb3J5SW5pdGlhbGl6ZWQpIHsNCj4gICAgICAvLw0KPiAgICAgIC8v IElmIHRoZSBtZW1vcnkgaXMgbm90IGluaXRpYWxpemVkLA0KPiAgICAgIC8vIFByb3RlY3QgYWxs IHN5c3RlbSBtZW1vcnkNCj4gICAgICAvLw0KPiANCj4gLSAgICBJbml0VlRkRG1hckZvckFsbCAo KTsNCj4gKyAgICBJbml0VlRkRG1hckJsb2NrQWxsICgpOw0KPiANCj4gICAgICAvLw0KPiAgICAg IC8vIEluc3RhbGwgUFBJLg0KPiBAQCAtNzU4LDkgKzgxNCwxNiBAQCBWVGRJbmZvTm90aWZ5ICgN Cj4gICAgICAvLw0KPiANCj4gICAgICBTdGF0dXMgPSBJbml0RG1hQnVmZmVyICgpOw0KPiAtICAg IEFTU0VSVF9FRklfRVJST1IoU3RhdHVzKTsNCj4gKyAgICBBU1NFUlRfRUZJX0VSUk9SIChTdGF0 dXMpOw0KPiArDQo+ICsgICAgLy8NCj4gKyAgICAvLyBOT1RFOiBXZSBuZWVkIHJlaW5pdCBWVGRJ bmZvIGJlY2F1c2UgcHJldmlvdXMgaW5mb3JtYXRpb24gbWlnaHQgYmUNCj4gb3ZlcnJpZGVuLg0K PiArICAgIC8vDQo+ICsgICAgU3RhdHVzID0gSW5pdFZUZEluZm8gKCk7DQo+ICsgICAgQVNTRVJU X0VGSV9FUlJPUiAoU3RhdHVzKTsNCj4gDQo+IC0gICAgSW5pdFZUZERtYXJGb3JEbWEgKCk7DQo+ ICsgICAgU3RhdHVzID0gSW5pdFZUZERtYXJGb3JEbWEgKCk7DQo+ICsgICAgQVNTRVJUX0VGSV9F UlJPUiAoU3RhdHVzKTsNCj4gICAgfQ0KPiANCj4gICAgcmV0dXJuIEVGSV9TVUNDRVNTOw0KPiBA QCAtODI2LDQgKzg4OSwzIEBAIEludGVsVlRkRG1hckluaXRpYWxpemUgKA0KPiANCj4gICAgcmV0 dXJuIEVGSV9TVUNDRVNTOw0KPiAgfQ0KPiAtDQo+IGRpZmYgLS1naXQNCj4gYS9TaWxpY29uL0lu dGVsL0ludGVsU2lsaWNvblBrZy9GZWF0dXJlL1ZUZC9JbnRlbFZUZERtYXJQZWkvSW50ZWxWVGRE bWFyDQo+IFBlaS5oDQo+IGIvU2lsaWNvbi9JbnRlbC9JbnRlbFNpbGljb25Qa2cvRmVhdHVyZS9W VGQvSW50ZWxWVGREbWFyUGVpL0ludGVsVlRkRG1hcg0KPiBQZWkuaA0KPiBpbmRleCBlMjNhNmM4 ZS4uMzUxYTc4MTAgMTAwNjQ0DQo+IC0tLQ0KPiBhL1NpbGljb24vSW50ZWwvSW50ZWxTaWxpY29u UGtnL0ZlYXR1cmUvVlRkL0ludGVsVlRkRG1hclBlaS9JbnRlbFZUZERtYXINCj4gUGVpLmgNCj4g KysrDQo+IGIvU2lsaWNvbi9JbnRlbC9JbnRlbFNpbGljb25Qa2cvRmVhdHVyZS9WVGQvSW50ZWxW VGREbWFyUGVpL0ludGVsVlRkRG1hcg0KPiBQZWkuaA0KPiBAQCAtOSw2OCArOSw2MSBAQA0KPiAg I2lmbmRlZiBfX0RNQV9BQ0NFU1NfTElCX0hfXw0KPiAgI2RlZmluZSBfX0RNQV9BQ0NFU1NfTElC X0hfXw0KPiANCj4gLSNkZWZpbmUgTUFYX1ZURF9QQ0lfREFUQV9OVU1CRVIgICAgICAgICAgICAg MHgxMDANCj4gLQ0KPiAgI2RlZmluZSBWVERfNjRCSVRTX0FERFJFU1MoTG8sIEhpKSAoTFNoaWZ0 VTY0IChMbywgMTIpIHwgTFNoaWZ0VTY0IChIaSwgMzIpKQ0KPiANCj4gIHR5cGVkZWYgc3RydWN0 IHsNCj4gLSAgVUlOVDggICAgICAgICAgICAgICAgICAgICAgICAgICAgRGV2aWNlVHlwZTsNCj4g LSAgVlREX1NPVVJDRV9JRCAgICAgICAgICAgICAgICAgICAgUGNpU291cmNlSWQ7DQo+IC19IFBF SV9QQ0lfREVWSUNFX0RBVEE7DQo+IC0NCj4gLXR5cGVkZWYgc3RydWN0IHsNCj4gLSAgQk9PTEVB TiAgICAgICAgICAgICAgICAgICAgICAgICAgSW5jbHVkZUFsbEZsYWc7DQo+IC0gIFVJTlQzMiAg ICAgICAgICAgICAgICAgICAgICAgICAgIFBjaURldmljZURhdGFOdW1iZXI7DQo+IC0gIFVJTlQz MiAgICAgICAgICAgICAgICAgICAgICAgICAgIFBjaURldmljZURhdGFNYXhOdW1iZXI7DQo+IC0g IFVJTlQzMiAgICAgICAgICAgICAgICAgICAgICAgICAgIFBjaURldmljZURhdGFQYWdlU2l6ZTsN Cj4gLSAgVUlOVDMyICAgICAgICAgICAgICAgICAgICAgICAgICAgUGNpRGV2aWNlRGF0YTsNCj4g LX0gUEVJX1BDSV9ERVZJQ0VfSU5GT1JNQVRJT047DQo+IC0NCj4gLXR5cGVkZWYgc3RydWN0IHsN Cj4gLSAgVUlOVDMyICAgICAgICAgICAgICAgICAgICAgICAgICAgVnRkVW5pdEJhc2VBZGRyZXNz Ow0KPiArICBCT09MRUFOICAgICAgICAgICAgICAgICAgICAgICAgICBEb25lOw0KPiArICBVSU5U TiAgICAgICAgICAgICAgICAgICAgICAgICAgICBWdGRVbml0QmFzZUFkZHJlc3M7DQo+ICAgIFVJ TlQxNiAgICAgICAgICAgICAgICAgICAgICAgICAgIFNlZ21lbnQ7DQo+ICsgIFVJTlQ4ICAgICAg ICAgICAgICAgICAgICAgICAgICAgIEZsYWdzOw0KPiAgICBWVERfVkVSX1JFRyAgICAgICAgICAg ICAgICAgICAgICBWZXJSZWc7DQo+ICAgIFZURF9DQVBfUkVHICAgICAgICAgICAgICAgICAgICAg IENhcFJlZzsNCj4gICAgVlREX0VDQVBfUkVHICAgICAgICAgICAgICAgICAgICAgRUNhcFJlZzsN Cj4gICAgQk9PTEVBTiAgICAgICAgICAgICAgICAgICAgICAgICAgSXM1TGV2ZWxQYWdpbmc7DQo+ IC0gIFVJTlQzMiAgICAgICAgICAgICAgICAgICAgICAgICAgIEZpeGVkU2Vjb25kTGV2ZWxQYWdp bmdFbnRyeTsNCj4gLSAgVUlOVDMyICAgICAgICAgICAgICAgICAgICAgICAgICAgUm1yclNlY29u ZExldmVsUGFnaW5nRW50cnk7DQo+IC0gIFVJTlQzMiAgICAgICAgICAgICAgICAgICAgICAgICAg IFJvb3RFbnRyeVRhYmxlOw0KPiAtICBVSU5UMzIgICAgICAgICAgICAgICAgICAgICAgICAgICBF eHRSb290RW50cnlUYWJsZTsNCj4gLSAgVUlOVDE2ICAgICAgICAgICAgICAgICAgICAgICAgICAg Um9vdEVudHJ5VGFibGVQYWdlU2l6ZTsNCj4gLSAgVUlOVDE2ICAgICAgICAgICAgICAgICAgICAg ICAgICAgRXh0Um9vdEVudHJ5VGFibGVQYWdlU2l6ZTsNCj4gLSAgUEVJX1BDSV9ERVZJQ0VfSU5G T1JNQVRJT04gICAgICAgUGNpRGV2aWNlSW5mbzsNCj4gICAgVUlOVDggICAgICAgICAgICAgICAg ICAgICAgICAgICAgRW5hYmxlUXVldWVkSW52YWxpZGF0aW9uOw0KPiAtICBVSU5UMTYgICAgICAg ICAgICAgICAgICAgICAgICAgICBRaURlc2NMZW5ndGg7DQo+ICsgIFVJTlQxNiAgICAgICAgICAg ICAgICAgICAgICAgICAgIFF1ZXVlU2l6ZTsNCj4gICAgUUlfREVTQyAgICAgICAgICAgICAgICAg ICAgICAgICAgKlFpRGVzYzsNCj4gICAgVUlOVDE2ICAgICAgICAgICAgICAgICAgICAgICAgICAg UWlGcmVlSGVhZDsNCj4gKyAgVUlOVE4gICAgICAgICAgICAgICAgICAgICAgICAgICAgRml4ZWRT ZWNvbmRMZXZlbFBhZ2luZ0VudHJ5Ow0KPiArICBVSU5UTiAgICAgICAgICAgICAgICAgICAgICAg ICAgICBSb290RW50cnlUYWJsZTsNCj4gKyAgVUlOVE4gICAgICAgICAgICAgICAgICAgICAgICAg ICAgRXh0Um9vdEVudHJ5VGFibGU7DQo+ICsgIFVJTlROICAgICAgICAgICAgICAgICAgICAgICAg ICAgIFJvb3RFbnRyeVRhYmxlUGFnZVNpemU7DQo+ICsgIFVJTlROICAgICAgICAgICAgICAgICAg ICAgICAgICAgIEV4dFJvb3RFbnRyeVRhYmxlUGFnZVNpemU7DQo+ICB9IFZURF9VTklUX0lORk87 DQo+IA0KPiAgdHlwZWRlZiBzdHJ1Y3Qgew0KPiAtICBVSU5UMzIgICAgICAgICAgICAgICAgICAg ICAgICAgICBBY3BpRG1hclRhYmxlOw0KPiArICBFRklfQUNQSV9ETUFSX0hFQURFUiAgICAgICAg ICAgICAqQWNwaURtYXJUYWJsZTsNCj4gICAgVUlOVDggICAgICAgICAgICAgICAgICAgICAgICAg ICAgSG9zdEFkZHJlc3NXaWR0aDsNCj4gLSAgVUlOVDMyICAgICAgICAgICAgICAgICAgICAgICAg ICAgVlRkRW5naW5lQ291bnQ7DQo+IC0gIFZURF9VTklUX0lORk8gICAgICAgICAgICAgICAgICAg IFZ0ZFVuaXRJbmZvWzFdOw0KPiArICBVSU5UTiAgICAgICAgICAgICAgICAgICAgICAgICAgICBW VGRFbmdpbmVDb3VudDsNCj4gKyAgVlREX1VOSVRfSU5GTyAgICAgICAgICAgICAgICAgICAgKlZ0 ZFVuaXRJbmZvOw0KPiAgfSBWVERfSU5GTzsNCj4gDQo+ICB0eXBlZGVmIHN0cnVjdCB7DQo+IC0g IFVJTlQ2NCAgICAgICAgICAgICAgICAgICAgICAgICAgICBEbWFCdWZmZXJCYXNlOw0KPiAtICBV SU5UNjQgICAgICAgICAgICAgICAgICAgICAgICAgICAgRG1hQnVmZmVyU2l6ZTsNCj4gLSAgVUlO VDY0ICAgICAgICAgICAgICAgICAgICAgICAgICAgIERtYUJ1ZmZlckxpbWl0Ow0KPiAtICBVSU5U NjQgICAgICAgICAgICAgICAgICAgICAgICAgICAgRG1hQnVmZmVyQ3VycmVudFRvcDsNCj4gLSAg VUlOVDY0ICAgICAgICAgICAgICAgICAgICAgICAgICAgIERtYUJ1ZmZlckN1cnJlbnRCb3R0b207 DQo+ICsgIFVJTlROICAgICAgICAgICAgICAgICAgICAgICAgICAgIERtYUJ1ZmZlckJhc2U7DQo+ ICsgIFVJTlROICAgICAgICAgICAgICAgICAgICAgICAgICAgIERtYUJ1ZmZlclNpemU7DQo+ICsg IFVJTlROICAgICAgICAgICAgICAgICAgICAgICAgICAgIERtYUJ1ZmZlckN1cnJlbnRUb3A7DQo+ ICsgIFVJTlROICAgICAgICAgICAgICAgICAgICAgICAgICAgIERtYUJ1ZmZlckN1cnJlbnRCb3R0 b207DQo+ICB9IERNQV9CVUZGRVJfSU5GTzsNCj4gDQo+ICt0eXBlZGVmDQo+ICtWT0lEDQo+ICso KlBST0NFU1NfRFJIRF9DQUxMQkFDS19GVU5DKSAoDQo+ICsgIElOIE9VVCBWT0lEICAgICAgICAg ICAgICAgICAgICAgICAqQ29udGV4dCwNCj4gKyAgSU4gICAgIFVJTlQzMiAgICAgICAgICAgICAg ICAgICAgIFZUZEluZGV4LA0KPiArICBJTiAgICAgRUZJX0FDUElfRE1BUl9EUkhEX0hFQURFUiAg KkRtYXJEcmhkDQo+ICsgICk7DQo+ICsNCj4gIC8qKg0KPiAtICBFbmFibGUgVlRkIHRyYW5zbGF0 aW9uIHRhYmxlIHByb3RlY3Rpb24uDQo+ICsgIEVuYWJsZSBWVGQgdHJhbnNsYXRpb24gdGFibGUg cHJvdGVjdGlvbiBmb3IgYmxvY2sgRE1BDQo+IA0KPiAtICBAcGFyYW1baW5dICBWVGRJbmZvICAg ICAgICAgICBUaGUgVlRkIGVuZ2luZSBjb250ZXh0IGluZm9ybWF0aW9uLg0KPiAtICBAcGFyYW1b aW5dICBFbmdpbmVNYXNrICAgICAgICBUaGUgbWFzayBvZiB0aGUgVlRkIGVuZ2luZSB0byBiZSBh Y2Nlc3NlZC4NCj4gKyAgQHBhcmFtW2luXSBWdGRVbml0QmFzZUFkZHJlc3MgVGhlIGJhc2UgYWRk cmVzcyBvZiB0aGUgVlRkIGVuZ2luZS4NCj4gKw0KPiArICBAcmV0dmFsIEVGSV9TVUNDRVNTICAg ICAgICAgICBETUFSIHRyYW5zbGF0aW9uIGlzIGVuYWJsZWQuDQo+ICsgIEByZXR2YWwgRUZJX0RF VklDRV9FUlJPUiAgICAgIERNQVIgdHJhbnNsYXRpb24gaXMgbm90IGVuYWJsZWQuDQo+ICAqKi8N Cj4gLVZPSUQNCj4gLUVuYWJsZVZUZFRyYW5zbGF0aW9uUHJvdGVjdGlvbkFsbCAoDQo+IC0gIElO IFZURF9JTkZPICAgICAgICAgICAgICAgICAgICpWVGRJbmZvLA0KPiAtICBJTiBVSU5UNjQgICAg ICAgICAgICAgICAgICAgICBFbmdpbmVNYXNrDQo+ICtFRklfU1RBVFVTDQo+ICtFbmFibGVWVGRU cmFuc2xhdGlvblByb3RlY3Rpb25CbG9ja0RtYSAoDQo+ICsgIElOIFVJTlROICAgICAgICAgICAg ICAgICAgICAgIFZ0ZFVuaXRCYXNlQWRkcmVzcw0KPiAgICApOw0KPiANCj4gIC8qKg0KPiBAQCAt OTAsMzQgKzgzLDI3IEBAIEVuYWJsZVZUZFRyYW5zbGF0aW9uUHJvdGVjdGlvbiAoDQo+ICAgIERp c2FibGUgVlRkIHRyYW5zbGF0aW9uIHRhYmxlIHByb3RlY3Rpb24uDQo+IA0KPiAgICBAcGFyYW1b aW5dICBWVGRJbmZvICAgICAgICAgICBUaGUgVlRkIGVuZ2luZSBjb250ZXh0IGluZm9ybWF0aW9u Lg0KPiAtICBAcGFyYW1baW5dICBFbmdpbmVNYXNrICAgICAgICBUaGUgbWFzayBvZiB0aGUgVlRk IGVuZ2luZSB0byBiZSBhY2Nlc3NlZC4NCj4gICoqLw0KPiAgVk9JRA0KPiAgRGlzYWJsZVZUZFRy YW5zbGF0aW9uUHJvdGVjdGlvbiAoDQo+IC0gIElOIFZURF9JTkZPICAgICAgICAgICAgICAgICAg ICpWVGRJbmZvLA0KPiAtICBJTiBVSU5UNjQgICAgICAgICAgICAgICAgICAgICBFbmdpbmVNYXNr DQo+ICsgIElOIFZURF9JTkZPICAgICAgICAgICAgICAgICAgICpWVGRJbmZvDQo+ICAgICk7DQo+ IA0KPiAgLyoqDQo+ICAgIFBhcnNlIERNQVIgRFJIRCB0YWJsZS4NCj4gDQo+ICAgIEBwYXJhbVtp bl0gIEFjcGlEbWFyVGFibGUgICAgIERNQVIgQUNQSSB0YWJsZQ0KPiArICBAcGFyYW1baW5dICBD YWxsYmFjayAgICAgICAgICBDYWxsYmFjayBmdW5jdGlvbiBmb3IgaGFuZGxlIERSSEQNCj4gKyAg QHBhcmFtW2luXSAgQ29udGV4dCAgICAgICAgICAgQ2FsbGJhY2sgZnVuY3Rpb24gQ29udGV4dA0K PiANCj4gLSAgQHJldHVybiBFRklfU1VDQ0VTUyAgICAgICAgICAgVGhlIERNQVIgRFJIRCB0YWJs ZSBpcyBwYXJzZWQuDQo+IC0qKi8NCj4gLUVGSV9TVEFUVVMNCj4gLVBhcnNlRG1hckFjcGlUYWJs ZURyaGQgKA0KPiAtICBJTiBFRklfQUNQSV9ETUFSX0hFQURFUiAgICAgICAqQWNwaURtYXJUYWJs ZQ0KPiAtICApOw0KPiAtDQo+IC0vKioNCj4gLSAgUGFyc2UgRE1BUiBEUkhEIHRhYmxlLg0KPiAr ICBAcmV0dXJuIHRoZSBWVGQgZW5naW5lIG51bWJlci4NCj4gDQo+IC0gIEBwYXJhbVtpbl0gIFZU ZEluZm8gICAgICAgICAgIFRoZSBWVGQgZW5naW5lIGNvbnRleHQgaW5mb3JtYXRpb24uDQo+ICAq Ki8NCj4gLVZPSUQNCj4gLVBhcnNlRG1hckFjcGlUYWJsZVJtcnIgKA0KPiAtICBJTiBWVERfSU5G TyAgICAgICAgICAgICAgICAgICAqVlRkSW5mbw0KPiArVUlOVE4NCj4gK1BhcnNlRG1hckFjcGlU YWJsZURyaGQgKA0KPiArICBJTiBFRklfQUNQSV9ETUFSX0hFQURFUiAgICAgICAgICAgICAgICpB Y3BpRG1hclRhYmxlLA0KPiArICBJTiBQUk9DRVNTX0RSSERfQ0FMTEJBQ0tfRlVOQyAgICAgICAg IENhbGxiYWNrLA0KPiArICBJTiBWT0lEICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpD b250ZXh0DQo+ICAgICk7DQo+IA0KPiAgLyoqDQo+IEBAIC0yMTQsMzAgKzIwMCw3IEBAIEdldFBj aURhdGFJbmRleCAoDQo+ICAgIElOIFZURF9TT1VSQ0VfSUQgICAgICAgICAgICAgIFNvdXJjZUlk DQo+ICAgICk7DQo+IA0KPiAtLyoqDQo+IC0gIEFsd2F5cyBlbmFibGUgdGhlIFZUZCBwYWdlIGF0 dHJpYnV0ZSBmb3IgdGhlIGRldmljZS4NCj4gLQ0KPiAtICBAcGFyYW1baW5dICBWVGRJbmZvICAg ICAgICAgICBUaGUgVlRkIGVuZ2luZSBjb250ZXh0IGluZm9ybWF0aW9uLg0KPiAtICBAcGFyYW1b aW5dICBTZWdtZW50ICAgICAgICAgICBUaGUgU2VnbWVudCB1c2VkIHRvIGlkZW50aWZ5IGEgVlRk IGVuZ2luZS4NCj4gLSAgQHBhcmFtW2luXSAgU291cmNlSWQgICAgICAgICAgVGhlIFNvdXJjZUlk IHVzZWQgdG8gaWRlbnRpZnkgYSBWVGQgZW5naW5lIGFuZA0KPiB0YWJsZSBlbnRyeS4NCj4gLSAg QHBhcmFtW2luXSAgTWVtb3J5QmFzZSAgICAgICAgVGhlIGJhc2Ugb2YgdGhlIG1lbW9yeS4NCj4g LSAgQHBhcmFtW2luXSAgTWVtb3J5TGltaXQgICAgICAgVGhlIGxpbWl0IG9mIHRoZSBtZW1vcnku DQo+IC0gIEBwYXJhbVtpbl0gIElvTW11QWNjZXNzICAgICAgIFRoZSBJT01NVSBhY2Nlc3MuDQo+ IC0NCj4gLSAgQHJldHZhbCBFRklfU1VDQ0VTUyAgICAgICAgICAgVGhlIFZUZCBlbnRyeSBpcyB1 cGRhdGVkIHRvIGFsd2F5cyBlbmFibGUgYWxsDQo+IERNQSBhY2Nlc3MgZm9yIHRoZSBzcGVjaWZp YyBkZXZpY2UuDQo+IC0qKi8NCj4gLUVGSV9TVEFUVVMNCj4gLUVuYWJsZVJtcnJQYWdlQXR0cmli dXRlICgNCj4gLSAgSU4gVlREX0lORk8gICAgICAgICAgICAgICAgICAgKlZUZEluZm8sDQo+IC0g IElOIFVJTlQxNiAgICAgICAgICAgICAgICAgICAgIFNlZ21lbnQsDQo+IC0gIElOIFZURF9TT1VS Q0VfSUQgICAgICAgICAgICAgIFNvdXJjZUlkLA0KPiAtICBJTiBVSU5UNjQgICAgICAgICAgICAg ICAgICAgICBNZW1vcnlCYXNlLA0KPiAtICBJTiBVSU5UNjQgICAgICAgICAgICAgICAgICAgICBN ZW1vcnlMaW1pdCwNCj4gLSAgSU4gVUlOVDY0ICAgICAgICAgICAgICAgICAgICAgSW9NbXVBY2Nl c3MNCj4gLSAgKTsNCj4gLQ0KPiAgZXh0ZXJuIEVGSV9HVUlEIG1WVGRJbmZvR3VpZDsNCj4gIGV4 dGVybiBFRklfR1VJRCBtRG1hQnVmZmVySW5mb0d1aWQ7DQo+IA0KPiAgI2VuZGlmDQo+IC0NCj4g ZGlmZiAtLWdpdA0KPiBhL1NpbGljb24vSW50ZWwvSW50ZWxTaWxpY29uUGtnL0ZlYXR1cmUvVlRk L0ludGVsVlRkRG1hclBlaS9UcmFuc2xhdGlvblRhYg0KPiBsZS5jDQo+IGIvU2lsaWNvbi9JbnRl bC9JbnRlbFNpbGljb25Qa2cvRmVhdHVyZS9WVGQvSW50ZWxWVGREbWFyUGVpL1RyYW5zbGF0aW9u VGFiDQo+IGxlLmMNCj4gaW5kZXggYTMwOWQ1NjYuLmM5NGY0YTg1IDEwMDY0NA0KPiAtLS0NCj4g YS9TaWxpY29uL0ludGVsL0ludGVsU2lsaWNvblBrZy9GZWF0dXJlL1ZUZC9JbnRlbFZUZERtYXJQ ZWkvVHJhbnNsYXRpb25UYWINCj4gbGUuYw0KPiArKysNCj4gYi9TaWxpY29uL0ludGVsL0ludGVs U2lsaWNvblBrZy9GZWF0dXJlL1ZUZC9JbnRlbFZUZERtYXJQZWkvVHJhbnNsYXRpb25UYWINCj4g bGUuYw0KPiBAQCAtMSw2ICsxLDcgQEANCj4gIC8qKiBAZmlsZQ0KPiANCj4gICAgQ29weXJpZ2h0 IChjKSAyMDIwIC0gMjAyMSwgSW50ZWwgQ29ycG9yYXRpb24uIEFsbCByaWdodHMgcmVzZXJ2ZWQu PEJSPg0KPiArDQo+ICAgIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBCU0QtMi1DbGF1c2UtUGF0 ZW50DQo+IA0KPiAgKiovDQo+IEBAIC0xMjksMTIgKzEzMCwxMiBAQCBDcmVhdGVTZWNvbmRMZXZl bFBhZ2luZ0VudHJ5VGFibGUgKA0KPiAgICAgIEZsdXNoUGFnZVRhYmxlTWVtb3J5IChWVGRVbml0 SW5mbywgKFVJTlROKSBTZWNvbmRMZXZlbFBhZ2luZ0VudHJ5LA0KPiBFRklfUEFHRVNfVE9fU0la RSAoMSkpOw0KPiAgICB9DQo+IA0KPiAtICBERUJVRyAoKERFQlVHX0lORk8sICIgU2Vjb25kTGV2 ZWxQYWdpbmdFbnRyeToweCUwMTZseFxuIiwNCj4gU2Vjb25kTGV2ZWxQYWdpbmdFbnRyeSkpOw0K PiArICBERUJVRyAoKERFQlVHX0lORk8sICIgU2Vjb25kTGV2ZWxQYWdpbmdFbnRyeToweCUwMTZs eFxuIiwgKFVJTlQ2NCkNCj4gKFVJTlROKSBTZWNvbmRMZXZlbFBhZ2luZ0VudHJ5KSk7DQo+ICAg IC8vDQo+ICAgIC8vIElmIG5vIGFjY2VzcyBpcyBuZWVkZWQsIGp1c3QgY3JlYXRlIG5vdCBwcmVz ZW50IGVudHJ5Lg0KPiAgICAvLw0KPiAgICBpZiAoSW9NbXVBY2Nlc3MgPT0gMCkgew0KPiAtICAg IERFQlVHICgoREVCVUdfSU5GTywgIiBTZWNvbmRMZXZlbFBhZ2luZ0VudHJ5OjB4JTAxNmx4XG4i LCAoVUlOVE4pDQo+IFNlY29uZExldmVsUGFnaW5nRW50cnkpKTsNCj4gKyAgICBERUJVRyAoKERF QlVHX0lORk8sICIgU2Vjb25kTGV2ZWxQYWdpbmdFbnRyeToweCUwMTZseCBBY2Nlc3MgMFxuIiwN Cj4gKFVJTlQ2NCkgKFVJTlROKSBTZWNvbmRMZXZlbFBhZ2luZ0VudHJ5KSk7DQo+ICAgICAgcmV0 dXJuIFNlY29uZExldmVsUGFnaW5nRW50cnk7DQo+ICAgIH0NCj4gDQo+IEBAIC0yNDQsNyArMjQ1 LDcgQEAgQ3JlYXRlU2Vjb25kTGV2ZWxQYWdpbmdFbnRyeVRhYmxlICgNCj4gICAgfQ0KPiAgICBG bHVzaFBhZ2VUYWJsZU1lbW9yeSAoVlRkVW5pdEluZm8sIChVSU5UTikgJkx2bDVQdEVudHJ5W0x2 bDVTdGFydF0sDQo+IChVSU5UTikgJkx2bDVQdEVudHJ5W0x2bDVFbmQgKyAxXSAtIChVSU5UTikg Jkx2bDVQdEVudHJ5W0x2bDVTdGFydF0pOw0KPiANCj4gLSAgREVCVUcgKChERUJVR19JTkZPLCAi IFNlY29uZExldmVsUGFnaW5nRW50cnk6MHglMDE2bHhcbiIsDQo+IChVSU5UTilTZWNvbmRMZXZl bFBhZ2luZ0VudHJ5KSk7DQo+ICsgIERFQlVHICgoREVCVUdfSU5GTywgIiBTZWNvbmRMZXZlbFBh Z2luZ0VudHJ5OjB4JTAxNmx4XG4iLCAoVUlOVDY0KQ0KPiAoVUlOVE4pIFNlY29uZExldmVsUGFn aW5nRW50cnkpKTsNCj4gICAgcmV0dXJuIFNlY29uZExldmVsUGFnaW5nRW50cnk7DQo+ICB9DQo+ IA0KPiBAQCAtMjc2LDYgKzI3NywxMCBAQCBDcmVhdGVDb250ZXh0RW50cnkgKA0KPiAgICBWVERf U0VDT05EX0xFVkVMX1BBR0lOR19FTlRSWSAqU2Vjb25kTGV2ZWxQYWdpbmdFbnRyeTsNCj4gICAg VUlOVDY0ICAgICAgICAgICAgICAgICAgICAgICAgUHQ7DQo+IA0KPiArICBpZiAoVlRkVW5pdElu Zm8tPlJvb3RFbnRyeVRhYmxlICE9IDApIHsNCj4gKyAgICByZXR1cm4gRUZJX1NVQ0NFU1M7DQo+ ICsgIH0NCj4gKw0KPiAgICBSb290UGFnZXMgPSBFRklfU0laRV9UT19QQUdFUyAoc2l6ZW9mIChW VERfUk9PVF9FTlRSWSkgKg0KPiBWVERfUk9PVF9FTlRSWV9OVU1CRVIpOw0KPiAgICBDb250ZXh0 UGFnZXMgPSBFRklfU0laRV9UT19QQUdFUyAoc2l6ZW9mIChWVERfQ09OVEVYVF9FTlRSWSkgKg0K PiBWVERfQ09OVEVYVF9FTlRSWV9OVU1CRVIpOw0KPiAgICBFbnRyeVRhYmxlUGFnZXMgPSBSb290 UGFnZXMgKyBDb250ZXh0UGFnZXMgKg0KPiAoVlREX1JPT1RfRU5UUllfTlVNQkVSKTsNCj4gQEAg LTI4Niw4ICsyOTEsOCBAQCBDcmVhdGVDb250ZXh0RW50cnkgKA0KPiAgICB9DQo+IA0KPiAgICBE RUJVRyAoKERFQlVHX0VSUk9SLCAiUm9vdEVudHJ5VGFibGUgYWRkcmVzcyAtIDB4JXhcbiIsIEJ1 ZmZlcikpOw0KPiAtICBWVGRVbml0SW5mby0+Um9vdEVudHJ5VGFibGUgPSAoVUlOVDMyKSAoVUlO VE4pIEJ1ZmZlcjsNCj4gLSAgVlRkVW5pdEluZm8tPlJvb3RFbnRyeVRhYmxlUGFnZVNpemUgPSAo VUlOVDE2KSBFbnRyeVRhYmxlUGFnZXM7DQo+ICsgIFZUZFVuaXRJbmZvLT5Sb290RW50cnlUYWJs ZSA9IChVSU5UTikgQnVmZmVyOw0KPiArICBWVGRVbml0SW5mby0+Um9vdEVudHJ5VGFibGVQYWdl U2l6ZSA9IEVudHJ5VGFibGVQYWdlczsNCj4gICAgUm9vdEVudHJ5QmFzZSA9IChWVERfUk9PVF9F TlRSWSAqKSBCdWZmZXI7DQo+ICAgIEJ1ZmZlciA9IChVSU5UOCAqKSBCdWZmZXIgKyBFRklfUEFH RVNfVE9fU0laRSAoUm9vdFBhZ2VzKTsNCj4gDQo+IEBAIC0zMDQsNyArMzA5LDcgQEAgQ3JlYXRl Q29udGV4dEVudHJ5ICgNCj4gICAgICBSb290RW50cnktPkJpdHMuQ29udGV4dFRhYmxlUG9pbnRl ckhpICA9IChVSU5UMzIpIFJTaGlmdFU2NCAoKFVJTlQ2NCkNCj4gKFVJTlROKSBCdWZmZXIsIDMy KTsNCj4gICAgICBSb290RW50cnktPkJpdHMuUHJlc2VudCA9IDE7DQo+ICAgICAgQnVmZmVyID0g KFVJTlQ4ICopQnVmZmVyICsgRUZJX1BBR0VTX1RPX1NJWkUgKENvbnRleHRQYWdlcyk7DQo+IC0g ICAgQ29udGV4dEVudHJ5VGFibGUgPSAoVlREX0NPTlRFWFRfRU5UUlkgKikgKFVJTlROKQ0KPiBW VERfNjRCSVRTX0FERFJFU1MoUm9vdEVudHJ5LT5CaXRzLkNvbnRleHRUYWJsZVBvaW50ZXJMbywg Um9vdEVudHJ5LQ0KPiA+Qml0cy5Db250ZXh0VGFibGVQb2ludGVySGkpIDsNCj4gKyAgICBDb250 ZXh0RW50cnlUYWJsZSA9IChWVERfQ09OVEVYVF9FTlRSWSAqKSAoVUlOVE4pDQo+IFZURF82NEJJ VFNfQUREUkVTUyhSb290RW50cnktPkJpdHMuQ29udGV4dFRhYmxlUG9pbnRlckxvLCBSb290RW50 cnktDQo+ID5CaXRzLkNvbnRleHRUYWJsZVBvaW50ZXJIaSk7DQo+IA0KPiAgICAgIGZvciAoQ29u dGV4dEluZGV4ID0gMDsgQ29udGV4dEluZGV4IDwgVlREX0NPTlRFWFRfRU5UUllfTlVNQkVSOw0K PiBDb250ZXh0SW5kZXgrKykgew0KPiAgICAgICAgU291cmNlSWQuSW5kZXguQ29udGV4dEluZGV4 ID0gKFVJTlQ4KSBDb250ZXh0SW5kZXg7DQo+IEBAIC0zMTcsNyArMzIyLDcgQEAgQ3JlYXRlQ29u dGV4dEVudHJ5ICgNCj4gICAgICAgIENvbnRleHRFbnRyeS0+Qml0cy5BZGRyZXNzV2lkdGggPSBW VGRVbml0SW5mby0+SXM1TGV2ZWxQYWdpbmcgPyAweDMgOg0KPiAweDI7DQo+IA0KPiAgICAgICAg aWYgKFZUZFVuaXRJbmZvLT5GaXhlZFNlY29uZExldmVsUGFnaW5nRW50cnkgIT0gMCkgew0KPiAt ICAgICAgICBTZWNvbmRMZXZlbFBhZ2luZ0VudHJ5ID0gKFZURF9TRUNPTkRfTEVWRUxfUEFHSU5H X0VOVFJZICopDQo+IChVSU5UTikgVlRkVW5pdEluZm8tPkZpeGVkU2Vjb25kTGV2ZWxQYWdpbmdF bnRyeTsNCj4gKyAgICAgICAgU2Vjb25kTGV2ZWxQYWdpbmdFbnRyeSA9IChWVERfU0VDT05EX0xF VkVMX1BBR0lOR19FTlRSWSAqKQ0KPiBWVGRVbml0SW5mby0+Rml4ZWRTZWNvbmRMZXZlbFBhZ2lu Z0VudHJ5Ow0KPiAgICAgICAgICBQdCA9IChVSU5UNjQpUlNoaWZ0VTY0ICgoVUlOVDY0KSAoVUlO VE4pIFNlY29uZExldmVsUGFnaW5nRW50cnksIDEyKTsNCj4gICAgICAgICAgQ29udGV4dEVudHJ5 LT5CaXRzLlNlY29uZExldmVsUGFnZVRyYW5zbGF0aW9uUG9pbnRlckxvID0gKFVJTlQzMikgUHQ7 DQo+ICAgICAgICAgIENvbnRleHRFbnRyeS0+Qml0cy5TZWNvbmRMZXZlbFBhZ2VUcmFuc2xhdGlv blBvaW50ZXJIaSA9IChVSU5UMzIpDQo+IFJTaGlmdFU2NChQdCwgMjApOw0KPiBAQCAtMzU5LDYg KzM2NCwxMCBAQCBDcmVhdGVFeHRDb250ZXh0RW50cnkgKA0KPiAgICBWVERfU0VDT05EX0xFVkVM X1BBR0lOR19FTlRSWSAqU2Vjb25kTGV2ZWxQYWdpbmdFbnRyeTsNCj4gICAgVUlOVDY0ICAgICAg ICAgICAgICAgICAgICAgICAgUHQ7DQo+IA0KPiArICBpZiAoVlRkVW5pdEluZm8tPkV4dFJvb3RF bnRyeVRhYmxlICE9IDApIHsNCj4gKyAgICByZXR1cm4gRUZJX1NVQ0NFU1M7DQo+ICsgIH0NCj4g Kw0KPiAgICBSb290UGFnZXMgPSBFRklfU0laRV9UT19QQUdFUyAoc2l6ZW9mIChWVERfRVhUX1JP T1RfRU5UUlkpICoNCj4gVlREX1JPT1RfRU5UUllfTlVNQkVSKTsNCj4gICAgQ29udGV4dFBhZ2Vz ID0gRUZJX1NJWkVfVE9fUEFHRVMgKHNpemVvZiAoVlREX0VYVF9DT05URVhUX0VOVFJZKSAqDQo+ IFZURF9DT05URVhUX0VOVFJZX05VTUJFUik7DQo+ICAgIEVudHJ5VGFibGVQYWdlcyA9IFJvb3RQ YWdlcyArIENvbnRleHRQYWdlcyAqDQo+IChWVERfUk9PVF9FTlRSWV9OVU1CRVIpOw0KPiBAQCAt MzY5LDggKzM3OCw4IEBAIENyZWF0ZUV4dENvbnRleHRFbnRyeSAoDQo+ICAgIH0NCj4gDQo+ICAg IERFQlVHICgoREVCVUdfRVJST1IsICJFeHRSb290RW50cnlUYWJsZSBhZGRyZXNzIC0gMHgleFxu IiwgQnVmZmVyKSk7DQo+IC0gIFZUZFVuaXRJbmZvLT5FeHRSb290RW50cnlUYWJsZSA9IChVSU5U MzIpIChVSU5UTikgQnVmZmVyOw0KPiAtICBWVGRVbml0SW5mby0+RXh0Um9vdEVudHJ5VGFibGVQ YWdlU2l6ZSA9IChVSU5UMTYpIEVudHJ5VGFibGVQYWdlczsNCj4gKyAgVlRkVW5pdEluZm8tPkV4 dFJvb3RFbnRyeVRhYmxlID0gKFVJTlROKSBCdWZmZXI7DQo+ICsgIFZUZFVuaXRJbmZvLT5FeHRS b290RW50cnlUYWJsZVBhZ2VTaXplID0gRW50cnlUYWJsZVBhZ2VzOw0KPiAgICBFeHRSb290RW50 cnlCYXNlID0gKFZURF9FWFRfUk9PVF9FTlRSWSAqKSBCdWZmZXI7DQo+ICAgIEJ1ZmZlciA9IChV SU5UOCAqKSBCdWZmZXIgKyBFRklfUEFHRVNfVE9fU0laRSAoUm9vdFBhZ2VzKTsNCj4gDQo+IEBA IC0zOTAsNyArMzk5LDcgQEAgQ3JlYXRlRXh0Q29udGV4dEVudHJ5ICgNCj4gICAgICBFeHRSb290 RW50cnktPkJpdHMuVXBwZXJDb250ZXh0VGFibGVQb2ludGVySGkgID0gKFVJTlQzMikgUlNoaWZ0 VTY0DQo+IChSU2hpZnRVNjQgKChVSU5UNjQpIChVSU5UTikgQnVmZmVyLCAxMikgKyAxLCAyMCk7 DQo+ICAgICAgRXh0Um9vdEVudHJ5LT5CaXRzLlVwcGVyUHJlc2VudCA9IDE7DQo+ICAgICAgQnVm ZmVyID0gKFVJTlQ4ICopIEJ1ZmZlciArIEVGSV9QQUdFU19UT19TSVpFIChDb250ZXh0UGFnZXMp Ow0KPiAtICAgIEV4dENvbnRleHRFbnRyeVRhYmxlID0gKFZURF9FWFRfQ09OVEVYVF9FTlRSWSAq KSAoVUlOVE4pDQo+IFZURF82NEJJVFNfQUREUkVTUyAoRXh0Um9vdEVudHJ5LT5CaXRzLkxvd2Vy Q29udGV4dFRhYmxlUG9pbnRlckxvLA0KPiBFeHRSb290RW50cnktPkJpdHMuTG93ZXJDb250ZXh0 VGFibGVQb2ludGVySGkpIDsNCj4gKyAgICBFeHRDb250ZXh0RW50cnlUYWJsZSA9IChWVERfRVhU X0NPTlRFWFRfRU5UUlkgKikgKFVJTlROKQ0KPiBWVERfNjRCSVRTX0FERFJFU1MgKEV4dFJvb3RF bnRyeS0+Qml0cy5Mb3dlckNvbnRleHRUYWJsZVBvaW50ZXJMbywNCj4gRXh0Um9vdEVudHJ5LT5C aXRzLkxvd2VyQ29udGV4dFRhYmxlUG9pbnRlckhpKTsNCj4gDQo+ICAgICAgZm9yIChDb250ZXh0 SW5kZXggPSAwOyBDb250ZXh0SW5kZXggPCBWVERfQ09OVEVYVF9FTlRSWV9OVU1CRVI7DQo+IENv bnRleHRJbmRleCsrKSB7DQo+ICAgICAgICBTb3VyY2VJZC5JbmRleC5Db250ZXh0SW5kZXggPSAo VUlOVDgpIENvbnRleHRJbmRleDsNCj4gQEAgLTQwMyw3ICs0MTIsNyBAQCBDcmVhdGVFeHRDb250 ZXh0RW50cnkgKA0KPiAgICAgICAgRXh0Q29udGV4dEVudHJ5LT5CaXRzLkFkZHJlc3NXaWR0aCA9 IFZUZFVuaXRJbmZvLT5JczVMZXZlbFBhZ2luZyA/DQo+IDB4MyA6IDB4MjsNCj4gDQo+ICAgICAg ICBpZiAoVlRkVW5pdEluZm8tPkZpeGVkU2Vjb25kTGV2ZWxQYWdpbmdFbnRyeSAhPSAwKSB7DQo+ IC0gICAgICAgIFNlY29uZExldmVsUGFnaW5nRW50cnkgPSAoVlREX1NFQ09ORF9MRVZFTF9QQUdJ TkdfRU5UUlkgKikNCj4gKFVJTlROKSBWVGRVbml0SW5mby0+Rml4ZWRTZWNvbmRMZXZlbFBhZ2lu Z0VudHJ5Ow0KPiArICAgICAgICBTZWNvbmRMZXZlbFBhZ2luZ0VudHJ5ID0gKFZURF9TRUNPTkRf TEVWRUxfUEFHSU5HX0VOVFJZICopDQo+IFZUZFVuaXRJbmZvLT5GaXhlZFNlY29uZExldmVsUGFn aW5nRW50cnk7DQo+ICAgICAgICAgIFB0ID0gKFVJTlQ2NClSU2hpZnRVNjQgKChVSU5UNjQpIChV SU5UTikgU2Vjb25kTGV2ZWxQYWdpbmdFbnRyeSwgMTIpOw0KPiANCj4gICAgICAgICAgRXh0Q29u dGV4dEVudHJ5LT5CaXRzLlNlY29uZExldmVsUGFnZVRyYW5zbGF0aW9uUG9pbnRlckxvID0gKFVJ TlQzMikNCj4gUHQ7DQo+IEBAIC03OTEsOSArODAwLDYgQEAgU2V0U2Vjb25kTGV2ZWxQYWdpbmdB dHRyaWJ1dGUgKA0KPiAgICAgIFNwbGl0QXR0cmlidXRlID0gTmVlZFNwbGl0UGFnZSAoQmFzZUFk ZHJlc3MsIExlbmd0aCwgUGFnZUF0dHJpYnV0ZSk7DQo+ICAgICAgaWYgKFNwbGl0QXR0cmlidXRl ID09IFBhZ2VOb25lKSB7DQo+ICAgICAgICBDb252ZXJ0U2Vjb25kTGV2ZWxQYWdlRW50cnlBdHRy aWJ1dGUgKFZUZFVuaXRJbmZvLCBQYWdlRW50cnksDQo+IElvTW11QWNjZXNzLCAmSXNFbnRyeU1v ZGlmaWVkKTsNCj4gLSAgICAgIGlmIChJc0VudHJ5TW9kaWZpZWQpIHsNCj4gLSAgICAgICAgLy9t VnRkVW5pdEluZm9ybWF0aW9uW1Z0ZEluZGV4XS5IYXNEaXJ0eVBhZ2VzID0gVFJVRTsNCj4gLSAg ICAgIH0NCj4gICAgICAgIC8vDQo+ICAgICAgICAvLyBDb252ZXJ0IHN1Y2Nlc3MsIG1vdmUgdG8g bmV4dA0KPiAgICAgICAgLy8NCj4gQEAgLTgwNSw3ICs4MTEsNiBAQCBTZXRTZWNvbmRMZXZlbFBh Z2luZ0F0dHJpYnV0ZSAoDQo+ICAgICAgICAgIERFQlVHICgoREVCVUdfRVJST1IsICJTcGxpdFNl Y29uZExldmVsUGFnZSAtICVyXG4iLCBTdGF0dXMpKTsNCj4gICAgICAgICAgcmV0dXJuIFJFVFVS Tl9VTlNVUFBPUlRFRDsNCj4gICAgICAgIH0NCj4gLSAgICAgIC8vbVZ0ZFVuaXRJbmZvcm1hdGlv bltWdGRJbmRleF0uSGFzRGlydHlQYWdlcyA9IFRSVUU7DQo+ICAgICAgICAvLw0KPiAgICAgICAg Ly8gSnVzdCBzcGxpdCBjdXJyZW50IHBhZ2UNCj4gICAgICAgIC8vIENvbnZlcnQgc3VjY2VzcyBp biBuZXh0IGFyb3VuZA0KPiBAQCAtODM3LDcgKzg0MiwxMSBAQCBDcmVhdGVGaXhlZFNlY29uZExl dmVsUGFnaW5nRW50cnkgKA0KPiAgICBWT0lEICAgICAgICAgICAgICAgICAgICAgICAgICAqSG9i Ow0KPiAgICBETUFfQlVGRkVSX0lORk8gICAgICAgICAgICAgICAqRG1hQnVmZmVySW5mbzsNCj4g DQo+IC0gIFZUZFVuaXRJbmZvLT5GaXhlZFNlY29uZExldmVsUGFnaW5nRW50cnkgPSAoVUlOVDMy KSAoVUlOVE4pDQo+IENyZWF0ZVNlY29uZExldmVsUGFnaW5nRW50cnlUYWJsZSAoVlRkVW5pdElu Zm8sIE5VTEwsIDAsIFNJWkVfNEdCLCAwKTsNCj4gKyAgaWYgKFZUZFVuaXRJbmZvLT5GaXhlZFNl Y29uZExldmVsUGFnaW5nRW50cnkgIT0gMCkgew0KPiArICAgIHJldHVybiBFRklfU1VDQ0VTUzsN Cj4gKyAgfQ0KPiArDQo+ICsgIFZUZFVuaXRJbmZvLT5GaXhlZFNlY29uZExldmVsUGFnaW5nRW50 cnkgPSAoVUlOVE4pDQo+IENyZWF0ZVNlY29uZExldmVsUGFnaW5nRW50cnlUYWJsZSAoVlRkVW5p dEluZm8sIE5VTEwsIDAsIFNJWkVfNEdCLCAwKTsNCj4gICAgaWYgKFZUZFVuaXRJbmZvLT5GaXhl ZFNlY29uZExldmVsUGFnaW5nRW50cnkgPT0gMCkgew0KPiAgICAgIERFQlVHICgoREVCVUdfRVJS T1IsICJGaXhlZFNlY29uZExldmVsUGFnaW5nRW50cnkgaXMgZW1wdHlcbiIpKTsNCj4gICAgICBy ZXR1cm4gRUZJX09VVF9PRl9SRVNPVVJDRVM7DQo+IEBAIC04NDYsMTQgKzg1NSwxNCBAQCBDcmVh dGVGaXhlZFNlY29uZExldmVsUGFnaW5nRW50cnkgKA0KPiAgICBIb2IgPSBHZXRGaXJzdEd1aWRI b2IgKCZtRG1hQnVmZmVySW5mb0d1aWQpOw0KPiAgICBEbWFCdWZmZXJJbmZvID0gR0VUX0dVSURf SE9CX0RBVEEgKEhvYik7DQo+ICAgIEJhc2VBZGRyZXNzID0gRG1hQnVmZmVySW5mby0+RG1hQnVm ZmVyQmFzZTsNCj4gLSAgTGVuZ3RoID0gRG1hQnVmZmVySW5mby0+RG1hQnVmZmVyTGltaXQgLSBE bWFCdWZmZXJJbmZvLQ0KPiA+RG1hQnVmZmVyQmFzZTsNCj4gKyAgTGVuZ3RoID0gRG1hQnVmZmVy SW5mby0+RG1hQnVmZmVyU2l6ZTsNCj4gICAgSW9NbXVBY2Nlc3MgPSBFREtJSV9JT01NVV9BQ0NF U1NfUkVBRCB8DQo+IEVES0lJX0lPTU1VX0FDQ0VTU19XUklURTsNCj4gDQo+ICAgIERFQlVHICgo REVCVUdfSU5GTywgIiAgQmFzZUFkZHJlc3MgPSAweCVseFxuIiwgQmFzZUFkZHJlc3MpKTsNCj4g ICAgREVCVUcgKChERUJVR19JTkZPLCAiICBMZW5ndGggPSAweCVseFxuIiwgTGVuZ3RoKSk7DQo+ ICAgIERFQlVHICgoREVCVUdfSU5GTywgIiAgSW9NbXVBY2Nlc3MgPSAweCVseFxuIiwgSW9NbXVB Y2Nlc3MpKTsNCj4gDQo+IC0gIFN0YXR1cyA9IFNldFNlY29uZExldmVsUGFnaW5nQXR0cmlidXRl IChWVGRVbml0SW5mbywNCj4gKFZURF9TRUNPTkRfTEVWRUxfUEFHSU5HX0VOVFJZKikgKFVJTlRO KSBWVGRVbml0SW5mby0NCj4gPkZpeGVkU2Vjb25kTGV2ZWxQYWdpbmdFbnRyeSwgQmFzZUFkZHJl c3MsIExlbmd0aCwgSW9NbXVBY2Nlc3MpOw0KPiArICBTdGF0dXMgPSBTZXRTZWNvbmRMZXZlbFBh Z2luZ0F0dHJpYnV0ZSAoVlRkVW5pdEluZm8sDQo+IChWVERfU0VDT05EX0xFVkVMX1BBR0lOR19F TlRSWSopIFZUZFVuaXRJbmZvLQ0KPiA+Rml4ZWRTZWNvbmRMZXZlbFBhZ2luZ0VudHJ5LCBCYXNl QWRkcmVzcywgTGVuZ3RoLCBJb01tdUFjY2Vzcyk7DQo+IA0KPiAgICByZXR1cm4gU3RhdHVzOw0K PiAgfQ0KPiBAQCAtODc3LDYgKzg4Niw5IEBAIFNldHVwVHJhbnNsYXRpb25UYWJsZSAoDQo+IA0K PiAgICBmb3IgKEluZGV4ID0gMDsgSW5kZXggPCBWVGRJbmZvLT5WVGRFbmdpbmVDb3VudDsgSW5k ZXgrKykgew0KPiAgICAgIFZ0ZFVuaXRJbmZvID0gJlZUZEluZm8tPlZ0ZFVuaXRJbmZvW0luZGV4 XTsNCj4gKyAgICBpZiAoVnRkVW5pdEluZm8tPkRvbmUpIHsNCj4gKyAgICAgIGNvbnRpbnVlOw0K PiArICAgIH0NCj4gDQo+ICAgICAgU3RhdHVzID0gQ3JlYXRlRml4ZWRTZWNvbmRMZXZlbFBhZ2lu Z0VudHJ5IChWdGRVbml0SW5mbyk7DQo+ICAgICAgaWYgKEVGSV9FUlJPUiAoU3RhdHVzKSkgew0K PiBAQCAtOTExLDE1MSArOTIzLDMgQEAgU2V0dXBUcmFuc2xhdGlvblRhYmxlICgNCj4gICAgcmV0 dXJuIEVGSV9TVUNDRVNTOw0KPiAgfQ0KPiANCj4gLS8qKg0KPiAtICBGaW5kIHRoZSBWVGQgaW5k ZXggYnkgdGhlIFNlZ21lbnQgYW5kIFNvdXJjZUlkLg0KPiAtDQo+IC0gIEBwYXJhbVtpbl0gIFZU ZEluZm8gICAgICAgICAgIFRoZSBWVGQgZW5naW5lIGNvbnRleHQgaW5mb3JtYXRpb24uDQo+IC0g IEBwYXJhbVtpbl0gIFNlZ21lbnQgICAgICAgICAgIFRoZSBzZWdtZW50IG9mIHRoZSBzb3VyY2Uu DQo+IC0gIEBwYXJhbVtpbl0gIFNvdXJjZUlkICAgICAgICAgIFRoZSBTb3VyY2VJZCBvZiB0aGUg c291cmNlLg0KPiAtICBAcGFyYW1bb3V0XSBFeHRDb250ZXh0RW50cnkgICBUaGUgRXh0Q29udGV4 dEVudHJ5IG9mIHRoZSBzb3VyY2UuDQo+IC0gIEBwYXJhbVtvdXRdIENvbnRleHRFbnRyeSAgICAg IFRoZSBDb250ZXh0RW50cnkgb2YgdGhlIHNvdXJjZS4NCj4gLQ0KPiAtICBAcmV0dXJuIFRoZSBp bmRleCBvZiB0aGUgVlRkIGVuZ2luZS4NCj4gLSAgQHJldHZhbCAoVUlOVE4pLTEgIFRoZSBWVGQg ZW5naW5lIGlzIG5vdCBmb3VuZC4NCj4gLSoqLw0KPiAtVUlOVE4NCj4gLUZpbmRWdGRJbmRleEJ5 U2VnbWVudFNvdXJjZUlkICgNCj4gLSAgSU4gIFZURF9JTkZPICAgICAgICAgICAgICAgICAgKlZU ZEluZm8sDQo+IC0gIElOICBVSU5UMTYgICAgICAgICAgICAgICAgICAgIFNlZ21lbnQsDQo+IC0g IElOICBWVERfU09VUkNFX0lEICAgICAgICAgICAgIFNvdXJjZUlkLA0KPiAtICBPVVQgVlREX0VY VF9DT05URVhUX0VOVFJZICAgICAqKkV4dENvbnRleHRFbnRyeSwNCj4gLSAgT1VUIFZURF9DT05U RVhUX0VOVFJZICAgICAgICAgKipDb250ZXh0RW50cnkNCj4gLSAgKQ0KPiAtew0KPiAtICBVSU5U TiAgICAgICAgICAgICAgICAgICAgICAgICBWdGRJbmRleDsNCj4gLSAgVlREX1JPT1RfRU5UUlkg ICAgICAgICAgICAgICAgKlJvb3RFbnRyeUJhc2U7DQo+IC0gIFZURF9ST09UX0VOVFJZICAgICAg ICAgICAgICAgICpSb290RW50cnk7DQo+IC0gIFZURF9DT05URVhUX0VOVFJZICAgICAgICAgICAg ICpDb250ZXh0RW50cnlUYWJsZTsNCj4gLSAgVlREX0NPTlRFWFRfRU5UUlkgICAgICAgICAgICAg KlRoaXNDb250ZXh0RW50cnk7DQo+IC0gIFZURF9FWFRfUk9PVF9FTlRSWSAgICAgICAgICAgICpF eHRSb290RW50cnlCYXNlOw0KPiAtICBWVERfRVhUX1JPT1RfRU5UUlkgICAgICAgICAgICAqRXh0 Um9vdEVudHJ5Ow0KPiAtICBWVERfRVhUX0NPTlRFWFRfRU5UUlkgICAgICAgICAqRXh0Q29udGV4 dEVudHJ5VGFibGU7DQo+IC0gIFZURF9FWFRfQ09OVEVYVF9FTlRSWSAgICAgICAgICpUaGlzRXh0 Q29udGV4dEVudHJ5Ow0KPiAtDQo+IC0gIGZvciAoVnRkSW5kZXggPSAwOyBWdGRJbmRleCA8IFZU ZEluZm8tPlZUZEVuZ2luZUNvdW50OyBWdGRJbmRleCsrKSB7DQo+IC0gICAgaWYgKEdldFBjaURh dGFJbmRleCAoJlZUZEluZm8tPlZ0ZFVuaXRJbmZvW1Z0ZEluZGV4XSwgU2VnbWVudCwNCj4gU291 cmNlSWQpICE9IChVSU5UTiktMSkgew0KPiAtICAgICAgREVCVUcgKChERUJVR19JTkZPLCAiRmlu ZCBWdGRJbmRleCgweCV4KSBmb3IgUyUwNHggQiUwMnggRCUwMngNCj4gRiUwMnhcbiIsIFZ0ZElu ZGV4LCBTZWdtZW50LCBTb3VyY2VJZC5CaXRzLkJ1cywgU291cmNlSWQuQml0cy5EZXZpY2UsDQo+ IFNvdXJjZUlkLkJpdHMuRnVuY3Rpb24pKTsNCj4gLSAgICAgIGJyZWFrOw0KPiAtICAgIH0NCj4g LSAgfQ0KPiAtICBpZiAoVnRkSW5kZXggPj0gVlRkSW5mby0+VlRkRW5naW5lQ291bnQpIHsNCj4g LSAgICBmb3IgKFZ0ZEluZGV4ID0gMDsgVnRkSW5kZXggPCBWVGRJbmZvLT5WVGRFbmdpbmVDb3Vu dDsgVnRkSW5kZXgrKykgew0KPiAtICAgICAgaWYgKFNlZ21lbnQgIT0gVlRkSW5mby0+VnRkVW5p dEluZm9bVnRkSW5kZXhdLlNlZ21lbnQpIHsNCj4gLSAgICAgICAgY29udGludWU7DQo+IC0gICAg ICB9DQo+IC0gICAgICBpZiAoVlRkSW5mby0+VnRkVW5pdEluZm9bVnRkSW5kZXhdLlBjaURldmlj ZUluZm8uSW5jbHVkZUFsbEZsYWcpIHsNCj4gLSAgICAgICAgREVCVUcgKChERUJVR19JTkZPLCAi RmluZCBJbmNsdWRlQWxsRmxhZyBWdGRJbmRleCgweCV4KSBmb3IgUyUwNHgNCj4gQiUwMnggRCUw MnggRiUwMnhcbiIsIFZ0ZEluZGV4LCBTZWdtZW50LCBTb3VyY2VJZC5CaXRzLkJ1cywNCj4gU291 cmNlSWQuQml0cy5EZXZpY2UsIFNvdXJjZUlkLkJpdHMuRnVuY3Rpb24pKTsNCj4gLSAgICAgICAg YnJlYWs7DQo+IC0gICAgICB9DQo+IC0gICAgfQ0KPiAtICB9DQo+IC0NCj4gLSAgaWYgKFZ0ZElu ZGV4IDwgVlRkSW5mby0+VlRkRW5naW5lQ291bnQpIHsNCj4gLSAgICBFeHRSb290RW50cnlCYXNl ID0gKFZURF9FWFRfUk9PVF9FTlRSWSAqKSAoVUlOVE4pIFZUZEluZm8tDQo+ID5WdGRVbml0SW5m b1tWdGRJbmRleF0uRXh0Um9vdEVudHJ5VGFibGU7DQo+IC0gICAgaWYgKEV4dFJvb3RFbnRyeUJh c2UgIT0gMCkgew0KPiAtICAgICAgRXh0Um9vdEVudHJ5ID0gJkV4dFJvb3RFbnRyeUJhc2VbU291 cmNlSWQuSW5kZXguUm9vdEluZGV4XTsNCj4gLSAgICAgIEV4dENvbnRleHRFbnRyeVRhYmxlID0g KFZURF9FWFRfQ09OVEVYVF9FTlRSWSAqKSAoVUlOVE4pDQo+IFZURF82NEJJVFNfQUREUkVTUyhF eHRSb290RW50cnktPkJpdHMuTG93ZXJDb250ZXh0VGFibGVQb2ludGVyTG8sDQo+IEV4dFJvb3RF bnRyeS0+Qml0cy5Mb3dlckNvbnRleHRUYWJsZVBvaW50ZXJIaSkgOw0KPiAtICAgICAgVGhpc0V4 dENvbnRleHRFbnRyeSAgPQ0KPiAmRXh0Q29udGV4dEVudHJ5VGFibGVbU291cmNlSWQuSW5kZXgu Q29udGV4dEluZGV4XTsNCj4gLSAgICAgIGlmIChUaGlzRXh0Q29udGV4dEVudHJ5LT5CaXRzLkFk ZHJlc3NXaWR0aCA9PSAwKSB7DQo+IC0gICAgICAgIERFQlVHICgoREVCVUdfSU5GTywgIkV4dENv bnRleHRFbnRyeSBBZGRyZXNzV2lkdGggOiAweCV4XG4iLA0KPiBUaGlzRXh0Q29udGV4dEVudHJ5 LT5CaXRzLkFkZHJlc3NXaWR0aCkpOw0KPiAtICAgICAgICByZXR1cm4gKFVJTlROKS0xOw0KPiAt ICAgICAgfQ0KPiAtICAgICAgKkV4dENvbnRleHRFbnRyeSA9IFRoaXNFeHRDb250ZXh0RW50cnk7 DQo+IC0gICAgICAqQ29udGV4dEVudHJ5ICAgID0gTlVMTDsNCj4gLSAgICB9IGVsc2Ugew0KPiAt ICAgICAgUm9vdEVudHJ5QmFzZSA9IChWVERfUk9PVF9FTlRSWSopIChVSU5UTikgVlRkSW5mby0N Cj4gPlZ0ZFVuaXRJbmZvW1Z0ZEluZGV4XS5Sb290RW50cnlUYWJsZTsNCj4gLSAgICAgIFJvb3RF bnRyeSA9ICZSb290RW50cnlCYXNlW1NvdXJjZUlkLkluZGV4LlJvb3RJbmRleF07DQo+IC0gICAg ICBDb250ZXh0RW50cnlUYWJsZSA9IChWVERfQ09OVEVYVF9FTlRSWSAqKSAoVUlOVE4pDQo+IFZU RF82NEJJVFNfQUREUkVTUyhSb290RW50cnktPkJpdHMuQ29udGV4dFRhYmxlUG9pbnRlckxvLCBS b290RW50cnktDQo+ID5CaXRzLkNvbnRleHRUYWJsZVBvaW50ZXJIaSkgOw0KPiAtICAgICAgVGhp c0NvbnRleHRFbnRyeSAgPSAmQ29udGV4dEVudHJ5VGFibGVbU291cmNlSWQuSW5kZXguQ29udGV4 dEluZGV4XTsNCj4gLSAgICAgIGlmIChUaGlzQ29udGV4dEVudHJ5LT5CaXRzLkFkZHJlc3NXaWR0 aCA9PSAwKSB7DQo+IC0gICAgICAgIERFQlVHICgoREVCVUdfSU5GTywgIkNvbnRleHRFbnRyeSBB ZGRyZXNzV2lkdGggOiAweCV4XG4iLA0KPiBUaGlzQ29udGV4dEVudHJ5LT5CaXRzLkFkZHJlc3NX aWR0aCkpOw0KPiAtICAgICAgICByZXR1cm4gKFVJTlROKS0xOw0KPiAtICAgICAgfQ0KPiAtICAg ICAgKkV4dENvbnRleHRFbnRyeSA9IE5VTEw7DQo+IC0gICAgICAqQ29udGV4dEVudHJ5ICAgID0g VGhpc0NvbnRleHRFbnRyeTsNCj4gLSAgICB9DQo+IC0NCj4gLSAgICByZXR1cm4gVnRkSW5kZXg7 DQo+IC0gIH0NCj4gLQ0KPiAtICByZXR1cm4gKFVJTlROKS0xOw0KPiAtfQ0KPiAtDQo+IC0vKioN Cj4gLSAgQWx3YXlzIGVuYWJsZSB0aGUgVlRkIHBhZ2UgYXR0cmlidXRlIGZvciB0aGUgZGV2aWNl Lg0KPiAtDQo+IC0gIEBwYXJhbVtpbl0gIFZUZEluZm8gICAgICAgICAgIFRoZSBWVGQgZW5naW5l IGNvbnRleHQgaW5mb3JtYXRpb24uDQo+IC0gIEBwYXJhbVtpbl0gIFNlZ21lbnQgICAgICAgICAg IFRoZSBTZWdtZW50IHVzZWQgdG8gaWRlbnRpZnkgYSBWVGQgZW5naW5lLg0KPiAtICBAcGFyYW1b aW5dICBTb3VyY2VJZCAgICAgICAgICBUaGUgU291cmNlSWQgdXNlZCB0byBpZGVudGlmeSBhIFZU ZCBlbmdpbmUgYW5kDQo+IHRhYmxlIGVudHJ5Lg0KPiAtICBAcGFyYW1baW5dICBNZW1vcnlCYXNl ICAgICAgICBUaGUgYmFzZSBvZiB0aGUgbWVtb3J5Lg0KPiAtICBAcGFyYW1baW5dICBNZW1vcnlM aW1pdCAgICAgICBUaGUgbGltaXQgb2YgdGhlIG1lbW9yeS4NCj4gLSAgQHBhcmFtW2luXSAgSW9N bXVBY2Nlc3MgICAgICAgVGhlIElPTU1VIGFjY2Vzcy4NCj4gLQ0KPiAtICBAcmV0dmFsIEVGSV9T VUNDRVNTICAgICAgICAgICBUaGUgVlRkIGVudHJ5IGlzIHVwZGF0ZWQgdG8gYWx3YXlzIGVuYWJs ZSBhbGwNCj4gRE1BIGFjY2VzcyBmb3IgdGhlIHNwZWNpZmljIGRldmljZS4NCj4gLSoqLw0KPiAt RUZJX1NUQVRVUw0KPiAtRW5hYmxlUm1yclBhZ2VBdHRyaWJ1dGUgKA0KPiAtICBJTiBWVERfSU5G TyAgICAgICAgICAgICAgICAgICAqVlRkSW5mbywNCj4gLSAgSU4gVUlOVDE2ICAgICAgICAgICAg ICAgICAgICAgU2VnbWVudCwNCj4gLSAgSU4gVlREX1NPVVJDRV9JRCAgICAgICAgICAgICAgU291 cmNlSWQsDQo+IC0gIElOIFVJTlQ2NCAgICAgICAgICAgICAgICAgICAgIE1lbW9yeUJhc2UsDQo+ IC0gIElOIFVJTlQ2NCAgICAgICAgICAgICAgICAgICAgIE1lbW9yeUxpbWl0LA0KPiAtICBJTiBV SU5UNjQgICAgICAgICAgICAgICAgICAgICBJb01tdUFjY2Vzcw0KPiAtICApDQo+IC17DQo+IC0g IEVGSV9TVEFUVVMgU3RhdHVzOw0KPiAtICBVSU5UTiAgICAgICAgICAgICAgICAgICAgICAgICBW dGRJbmRleDsNCj4gLSAgVlREX0VYVF9DT05URVhUX0VOVFJZICAgICAgICAgKkV4dENvbnRleHRF bnRyeTsNCj4gLSAgVlREX0NPTlRFWFRfRU5UUlkgICAgICAgICAgICAgKkNvbnRleHRFbnRyeTsN Cj4gLSAgVlREX1NFQ09ORF9MRVZFTF9QQUdJTkdfRU5UUlkgKlNlY29uZExldmVsUGFnaW5nRW50 cnk7DQo+IC0gIFVJTlQ2NCAgICAgICAgICAgICAgICAgICAgICAgIFB0Ow0KPiAtDQo+IC0gIERF QlVHICgoREVCVUdfSU5GTywgIkVuYWJsZVJtcnJQYWdlQXR0cmlidXRlIChTJTA0eCBCJTAyeCBE JTAyeA0KPiBGJTAyeClcbiIsIFNlZ21lbnQsIFNvdXJjZUlkLkJpdHMuQnVzLCBTb3VyY2VJZC5C aXRzLkRldmljZSwNCj4gU291cmNlSWQuQml0cy5GdW5jdGlvbikpOw0KPiAtDQo+IC0gIFZ0ZElu ZGV4ID0gRmluZFZ0ZEluZGV4QnlTZWdtZW50U291cmNlSWQgKFZUZEluZm8sIFNlZ21lbnQsIFNv dXJjZUlkLA0KPiAmRXh0Q29udGV4dEVudHJ5LCAmQ29udGV4dEVudHJ5KTsNCj4gLSAgaWYgKFZ0 ZEluZGV4ID09IChVSU5UTiktMSkgew0KPiAtICAgIERFQlVHICgoREVCVUdfRVJST1IsICJFbmFi bGVSbXJyUGFnZUF0dHJpYnV0ZSAtIENhbiBub3QgbG9jYXRlIFBjaQ0KPiBkZXZpY2UgKFMlMDR4 IEIlMDJ4IEQlMDJ4IEYlMDJ4KSAhXG4iLCBTZWdtZW50LCBTb3VyY2VJZC5CaXRzLkJ1cywNCj4g U291cmNlSWQuQml0cy5EZXZpY2UsIFNvdXJjZUlkLkJpdHMuRnVuY3Rpb24pKTsNCj4gLSAgICBy ZXR1cm4gRUZJX0RFVklDRV9FUlJPUjsNCj4gLSAgfQ0KPiAtDQo+IC0gIGlmIChWVGRJbmZvLT5W dGRVbml0SW5mb1tWdGRJbmRleF0uUm1yclNlY29uZExldmVsUGFnaW5nRW50cnkgPT0gMCkgew0K PiAtICAgIERFQlVHICgoREVCVUdfSU5GTywgIkNyZWF0ZVNlY29uZExldmVsUGFnaW5nRW50cnkg LSAlZFxuIiwNCj4gVnRkSW5kZXgpKTsNCj4gLSAgICBWVGRJbmZvLT5WdGRVbml0SW5mb1tWdGRJ bmRleF0uUm1yclNlY29uZExldmVsUGFnaW5nRW50cnkgPQ0KPiAoVUlOVDMyKShVSU5UTilDcmVh dGVTZWNvbmRMZXZlbFBhZ2luZ0VudHJ5VGFibGUgKCZWVGRJbmZvLQ0KPiA+VnRkVW5pdEluZm9b VnRkSW5kZXhdLCBOVUxMLCAwLCBTSVpFXzRHQiwgMCk7DQo+IC0gICAgaWYgKFZUZEluZm8tPlZ0 ZFVuaXRJbmZvW1Z0ZEluZGV4XS5SbXJyU2Vjb25kTGV2ZWxQYWdpbmdFbnRyeSA9PSAwKSB7DQo+ IC0gICAgICByZXR1cm4gRUZJX09VVF9PRl9SRVNPVVJDRVM7DQo+IC0gICAgfQ0KPiAtDQo+IC0g ICAgU3RhdHVzID1TZXRTZWNvbmRMZXZlbFBhZ2luZ0F0dHJpYnV0ZSAoJlZUZEluZm8tDQo+ID5W dGRVbml0SW5mb1tWdGRJbmRleF0sDQo+IChWVERfU0VDT05EX0xFVkVMX1BBR0lOR19FTlRSWSop KFVJTlROKVZUZEluZm8tDQo+ID5WdGRVbml0SW5mb1tWdGRJbmRleF0uUm1yclNlY29uZExldmVs UGFnaW5nRW50cnksIE1lbW9yeUJhc2UsDQo+IE1lbW9yeUxpbWl0ICsgMSAtIE1lbW9yeUJhc2Us IElvTW11QWNjZXNzKTsNCj4gLSAgICBpZiAoRUZJX0VSUk9SIChTdGF0dXMpKSB7DQo+IC0gICAg ICByZXR1cm4gU3RhdHVzOw0KPiAtICAgIH0NCj4gLSAgfQ0KPiAtDQo+IC0gIFNlY29uZExldmVs UGFnaW5nRW50cnkgPSAoVlREX1NFQ09ORF9MRVZFTF9QQUdJTkdfRU5UUlkgKikNCj4gKFVJTlRO KSBWVGRJbmZvLT5WdGRVbml0SW5mb1tWdGRJbmRleF0uUm1yclNlY29uZExldmVsUGFnaW5nRW50 cnk7DQo+IC0gIFB0ID0gKFVJTlQ2NCkgUlNoaWZ0VTY0ICgoVUlOVDY0KSAoVUlOVE4pIFNlY29u ZExldmVsUGFnaW5nRW50cnksIDEyKTsNCj4gLSAgaWYgKEV4dENvbnRleHRFbnRyeSAhPSBOVUxM KSB7DQo+IC0gICAgRXh0Q29udGV4dEVudHJ5LT5CaXRzLlNlY29uZExldmVsUGFnZVRyYW5zbGF0 aW9uUG9pbnRlckxvID0gKFVJTlQzMikNCj4gUHQ7DQo+IC0gICAgRXh0Q29udGV4dEVudHJ5LT5C aXRzLlNlY29uZExldmVsUGFnZVRyYW5zbGF0aW9uUG9pbnRlckhpID0gKFVJTlQzMikNCj4gUlNo aWZ0VTY0KFB0LCAyMCk7DQo+IC0gICAgRXh0Q29udGV4dEVudHJ5LT5CaXRzLkRvbWFpbklkZW50 aWZpZXIgPSAoKDEgPDwgKFVJTlQ4KSAoKFVJTlROKQ0KPiBWVGRJbmZvLT5WdGRVbml0SW5mb1tW dGRJbmRleF0uQ2FwUmVnLkJpdHMuTkQgKiAyICsgNCkpIC0gMSk7DQo+IC0gICAgRXh0Q29udGV4 dEVudHJ5LT5CaXRzLlByZXNlbnQgPSAxOw0KPiAtICAgIEZsdXNoUGFnZVRhYmxlTWVtb3J5ICgm VlRkSW5mby0+VnRkVW5pdEluZm9bVnRkSW5kZXhdLCAoVUlOVE4pDQo+IEV4dENvbnRleHRFbnRy eSwgc2l6ZW9mKCpFeHRDb250ZXh0RW50cnkpKTsNCj4gLSAgfSBlbHNlIGlmIChDb250ZXh0RW50 cnkgIT0gTlVMTCkgew0KPiAtICAgIENvbnRleHRFbnRyeS0+Qml0cy5TZWNvbmRMZXZlbFBhZ2VU cmFuc2xhdGlvblBvaW50ZXJMbyA9IChVSU5UMzIpIFB0Ow0KPiAtICAgIENvbnRleHRFbnRyeS0+ Qml0cy5TZWNvbmRMZXZlbFBhZ2VUcmFuc2xhdGlvblBvaW50ZXJIaSA9IChVSU5UMzIpDQo+IFJT aGlmdFU2NCAoUHQsIDIwKTsNCj4gLSAgICBDb250ZXh0RW50cnktPkJpdHMuRG9tYWluSWRlbnRp ZmllciA9ICgoMSA8PCAoVUlOVDgpICgoVUlOVE4pIFZUZEluZm8tDQo+ID5WdGRVbml0SW5mb1tW dGRJbmRleF0uQ2FwUmVnLkJpdHMuTkQgKiAyICsgNCkpIC0gMSk7DQo+IC0gICAgQ29udGV4dEVu dHJ5LT5CaXRzLlByZXNlbnQgPSAxOw0KPiAtICAgIEZsdXNoUGFnZVRhYmxlTWVtb3J5ICgmVlRk SW5mby0+VnRkVW5pdEluZm9bVnRkSW5kZXhdLCAoVUlOVE4pDQo+IENvbnRleHRFbnRyeSwgc2l6 ZW9mICgqQ29udGV4dEVudHJ5KSk7DQo+IC0gIH0NCj4gLQ0KPiAtICByZXR1cm4gRUZJX1NVQ0NF U1M7DQo+IC19DQo+IC0tDQo+IDIuMTYuMi53aW5kb3dzLjENCg0K