From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from NAM10-DM6-obe.outbound.protection.outlook.com (NAM10-DM6-obe.outbound.protection.outlook.com [40.107.93.43]) by mx.groups.io with SMTP id smtpd.web10.4078.1686189536616160320 for ; Wed, 07 Jun 2023 18:58:57 -0700 Authentication-Results: mx.groups.io; dkim=fail, err=mail: missing word in phrase: charset not supported: "big5"; spf=pass (domain: ami.com, ip: 40.107.93.43, mailfrom: richardho@ami.com) ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=FsdqF+NRD78+lYIgmqeLdjuo3H9DZ91cGTkVLCx/ggEtX210ZUirrU64INpYj2rQENcqpqnoaluVpqBvb8nMfFQ5LMGpUw+RYEKmJOMX9DkU94EK5Q7EQfYAyUIyXjspIcf+k5WvTvyjzIjmcQGo8yUpBHEL2rGy97Vexvbmy1MpcS0bCwaP+p4B1zmAac+C8DMbQhhG4Hj1K7pUmTsVZoRNgO7AY/IwtnI5NYVC3u6qs2ExfE3K8YWqZvMOYjsFJJ+xMkdnt1syOcEVSa5ysuDtZVECfNq9tpW3oIdgmxvGDtc639TY8+dYimdzr2RAUYPWLjBnVB8qQY6qfYvesg== 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=c3Q53b/Aci4M2iPKni/rF0ozPtWSvCOiFK6vPNaMqms=; b=C01YCPGbF9Kp8dywwHdKxHiwWEC/IitDpoYYcecv27S2sQhnGnP908fHLD0pU3kHZV4VK3ybHNuzuxF8h55899GxHQYJHWV1EFNWINSgp+QvP6wlX2vK/UAOHuxQhuqAQX3Op5Yrpjoc6SLaLCYrOoP00yiT8uBaORUdMeYzddXvUShp9bXuv9WYf4w4le3zDCCZraTO8H9c8oUSuU+GBRDQY9RzDDsYxSOejR1nSG9BkL/nc/RBbSkUhElI7sQFDksbjl+YT4CM3eyojtYky2QTtdVHd41tg2wv24aDLzYQfbX+W8HAUri36XyooP30TqDuIe5+kD1cNoaNcTI7Xg== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=ami.com; dmarc=pass action=none header.from=ami.com; dkim=pass header.d=ami.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=ami.com; s=selector1; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=c3Q53b/Aci4M2iPKni/rF0ozPtWSvCOiFK6vPNaMqms=; b=aXD47s0iVtezSffogez0o9ImGYOPZLyayL8r4wByNSp1oyT+UM7EThgmO6RzR3PuseYf8JBUokQl/sqCG8dLhn1/bSUSCQ46yJpVRS8ugNCy6pbUA/KvW8c8Y3lT3vL43QGi5nKx+ZwddXkgEkGAifDEE2hCCj3BvEvPr+j7M6c= Received: from CY8PR10MB6441.namprd10.prod.outlook.com (2603:10b6:930:63::16) by DM4PR10MB6088.namprd10.prod.outlook.com (2603:10b6:8:8a::6) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.6455.38; Thu, 8 Jun 2023 01:58:46 +0000 Received: from CY8PR10MB6441.namprd10.prod.outlook.com ([fe80::1eb2:3625:6f26:9ed6]) by CY8PR10MB6441.namprd10.prod.outlook.com ([fe80::1eb2:3625:6f26:9ed6%6]) with mapi id 15.20.6455.030; Thu, 8 Jun 2023 01:58:46 +0000 From: =?UTF-8?B?UmljaGFyZEhvIFvkvZXmmI7lv6Bd?= To: "devel@edk2.groups.io" , =?big5?B?UmljaGFyZCBIbyAopvOp+qm+KQ==?= CC: Andrew Fish , Leif Lindholm , Michael D Kinney , Michael Kubacki , Zhiguang Liu , Liming Gao , Hao A Wu , Ray Ni , Tinh Nguyen , Rebecca Cran , =?big5?B?VG9ueSBMbyAow7mq96pRKQ==?= Subject: Re: [edk2-devel] [PATCH v3 1/3] MdeModulePkg/Bus/Usb/UsbNetwork/UsbRndis: Add USB RNDIS devices support Thread-Topic: [EXTERNAL] [edk2-devel] [PATCH v3 1/3] MdeModulePkg/Bus/Usb/UsbNetwork/UsbRndis: Add USB RNDIS devices support Thread-Index: AQHZgWCIeTnkjHAMmUOhrT/0m1P7Oq+AVj9A Date: Thu, 8 Jun 2023 01:58:46 +0000 Message-ID: References: <175D0EAC419FA602.2502@groups.io> In-Reply-To: <175D0EAC419FA602.2502@groups.io> Accept-Language: zh-TW, en-US X-MS-Has-Attach: X-MS-TNEF-Correlator: authentication-results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=ami.com; x-ms-publictraffictype: Email x-ms-traffictypediagnostic: CY8PR10MB6441:EE_|DM4PR10MB6088:EE_ x-ms-office365-filtering-correlation-id: eb8ef98a-07a1-4cbf-1343-08db67c3e524 x-ms-exchange-senderadcheck: 1 x-ms-exchange-antispam-relay: 0 x-microsoft-antispam: BCL:0; x-microsoft-antispam-message-info: C2nLuKwq+jIsFOlrf1G//fuzeaOkNLguDbpSVlZkEXjzjHCjQup2sMCpsfQm1FOcfbRjdoQ9ueuh5EfPnBZI2iQy0rt69qxEPCO7vFDRmn9dSMJUd0LTFOom9G73G7zmIUl73adAr2B0Xb4QqvxvDV4bD1TfSLHYOheRC95wFNSdY6f3UmNoB+g+QDbli69YORVjtwtl1r7oh2JGaVKgVtOZMGVC/sP90zd/NHcBpjJeA4atEJWYK4usEr18fIMbAhiB4HtvLVG2V1UZuLK/8hFNA01yfmGniEhsl68ldJqCAHykJj8Vj4610fLaAlKEK6f2UGAV4pSHq0RauEGGFqGkA4eMPLVrwmlciNRbsPUpo+4GM//b2iTV9eoSzGaK+CM1Ncy3q3QYge0JANGAGhtEL7gfrPKMC3ko/4FUFPbUZJaIyCCXsQuDiORZFzrO9XgN+NWjXJR5AHrKl4klkWzpNZbRqOG8anki4h09TSKw8yAKVqzBhrUgE05cUCUdl+j3wxnXvp1zT7kcMqDvksW/GZlOSqeTGGBF+kHIxAMs7cPWKrOJgR7czbSYZyTmgEBtOM2yfJhaFoKYA8pkZtKiZ+fUJTaBKBBsl+bKErcgO849BrH1ZPZr1I86u55nxCzBwVG5J7XLf3zGviiLvVJs4U4apMcc71lpxFMQDOI= x-forefront-antispam-report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:CY8PR10MB6441.namprd10.prod.outlook.com;PTR:;CAT:NONE;SFS:(13230028)(4636009)(376002)(136003)(346002)(39850400004)(366004)(396003)(451199021)(26005)(6506007)(186003)(9686003)(53546011)(66899021)(966005)(7416002)(83380400001)(7696005)(71200400001)(85182001)(2906002)(30864003)(40140700001)(45080400002)(8676002)(8936002)(110136005)(54906003)(55016003)(478600001)(19627235002)(33656002)(38100700002)(5660300002)(122000001)(4326008)(86362001)(38070700005)(41300700001)(66446008)(52536014)(66476007)(66556008)(64756008)(316002)(76116006)(66946007)(559001)(579004)(44824005);DIR:OUT;SFP:1101; x-ms-exchange-antispam-messagedata-chunkcount: 1 x-ms-exchange-antispam-messagedata-0: =?big5?B?L1hqZjl2R3pudFQ3Q2xCMzVGaUpSbEM1eExQa1ZUWG90alZYYVcxY0hjeDVPWjQ3?= =?big5?B?TFBxTWJJbUVKaFFJSjQwT085WlNnT1pwMUtpL3ZwWnlpUnFMWUhXRlA3MklWeGR4?= =?big5?B?TGtrVWY5bldUY1BkVmR5UUFnUWhTNVMzWllxR0ZIbGFLcHVORjhCMkQ0bFJETzkz?= =?big5?B?cXdINzh0Y0x0ZVNjZWxTNG1VY2F1UnZoRTFEcmdDZm9GOTd6K3h2S1A1NHJmMXhH?= =?big5?B?WWJ0WXk5TXlITE4vbnhRZ3htNGxRaGljOWJnTjl4MkNoOEI0SzlBT0FkbmVRZTlP?= =?big5?B?dkVEZGJKVlNtZzA5YWl1a1JwOEovRXAwaCs3eUhuZW9JMnNHcU5UZVdMbDV0L2U5?= =?big5?B?aW5SenY0QUc0TnBySy80Z1IzTHhnQ0hHRG9HcHlDZXQ3LzBlMmJ6K0E5ejVmeUdJ?= =?big5?B?bTJsbUNvc01WZXFHd3NxdUFETnhvcitsVlcvV0s2T1F3OTF4K0MvNU9BUFZMdkZv?= =?big5?B?UGlLL0JkWDM2cEY0TUhMZU41MTFBTU1OTFZzY2Z4b0UzSWpYVFFZb1Q3M0kwRGY4?= =?big5?B?TUdTVElYVklEa1ZMVzZpZFIrbGtDSVdGVTlCZld5LzNlUkV5eG9vSU40clo1TkJa?= =?big5?B?VkJmVHM2SGJBb0M2U204MHRJOWZZRDFLanZDS1FKMXZpUkkyUmowdk1LdE1DVmwv?= =?big5?B?UDFpM0FiL1BiaSsxYkJjTmVFVndESURUSk16OW82SDVuZGxPWEl2eVBzNXVtemFG?= =?big5?B?bG1RV0dIVUVSWHRrSFE1U1IvRUdQNC93azUyTHpMdzBRVDEwd3hJSDZqZEtnQ2dt?= =?big5?B?am1yY1FrUEQvRm9GVC9walJ1SGJMWi83UXd5MUtXU3hER1NNanpINjhaRzdWYUk4?= =?big5?B?SENaS2lYcUsrVXBNNlIwazZ5UkhueVdNYW1oK1pDcDd1K2NTWWtRTkQwNnNIOHVB?= =?big5?B?djF5VVdRV2FaQTVrQlEwZ3BuZW1lcEdEZ0VQYmZ2aVpGd3BBVEcrc1FpelNkbGlC?= =?big5?B?MTc2b015ekVIZWk3N3BlcHlKUE9iSWdJS25wdFk5OUVPVVNvZ2Q1L1dmd2doaHhi?= =?big5?B?ZTlRVmNUQ0R6cllkSzh0S2YzZWRXbkc2ZUdVamZld3h6TXpBYVJEOFVVYlZFeG9u?= =?big5?B?NzhOc0VRd3J2M0Z6UzVlNkVkQ29YRnpuWkpMbGswWDI4QUU0UGd1Vkh6WkkvdFJt?= =?big5?B?Q1VjZzN4RVhDeWJCOUVWRHRLNTlvQklPLzJRY2txVlJDek0xVEZSWEliaUlJd01J?= =?big5?B?NkZieTNRdkUvV1hLVHIrbEVFQlkvNS9wUnBRL2NRM1dleGJWdEZWbWlHWStHMGMy?= =?big5?B?K1FmdGVQeUdEVDBGOUc3c2pnYUlqRXN4VkRJSWtvbFhTOGNDallIaXJvdGtxVXpq?= =?big5?B?dVE1ZnlYTmVpTExWNHplNFNFcGhpd0l6RVVOaXZqcGNnT2dWTWxBbHJ3SFBGWjBh?= =?big5?B?R2l1c1VVZjBmYVZUM0NQQzk2WC9LUnJ1SVFIaXhuajN4R09vQit6cHhkKy9iSnZl?= =?big5?B?MVk3cUpIL2E4bTFML0Y3Ri9pWGdsN2FrM0dSWEU2dEM5dndmenhQeFhad2hnVHZJ?= =?big5?B?amE3NUNqdUMveVN5ZG5iOWNWSlJKOEkrYWd2V2Z5a25jZTAvaEc2Mlh6bGRldkY0?= =?big5?B?RU9iTDIxTUx3VE12Q1ZHd20yNFhYQk5xQ29lTnlKOXpCMGZpQTFUSnpTZis5eExq?= =?big5?B?a1pRK0xVU0FzT2NsOHBwMFhSd3pjNmswbkN2L0RCa0dDcUJlK1J6VWRKa0xyczJo?= =?big5?B?cDNwek5pMjVMWERqRkNJUzlldzFDNTY2UFRndWxidS9OVzgyZ1ZCYjVGeHZwZFor?= =?big5?B?WFYxc2EvcU5ZREMxdHJmdlVtLzNIWEJFK3IwQ2pmbE01V1pqVU4xc0d2UU5sa1NI?= =?big5?B?a3lra2s2a0s0QU5VTHl3Yi9zNkRzOVlLdWRYUGdPaXhRTWRCWHFKdS9EbGlFREFH?= =?big5?B?blFEaEIrZGJUWlBNbExXdDZvUzl2b1JmRVFmMzRzM0hacFY0SWlDWXFFNkRQN1BL?= =?big5?Q?0+/yiGXuYZ4DA1WrMWmYe+DFGJjv/ERFsRNoKPHiHag=3D?= MIME-Version: 1.0 X-OriginatorOrg: ami.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-AuthSource: CY8PR10MB6441.namprd10.prod.outlook.com X-MS-Exchange-CrossTenant-Network-Message-Id: eb8ef98a-07a1-4cbf-1343-08db67c3e524 X-MS-Exchange-CrossTenant-originalarrivaltime: 08 Jun 2023 01:58:46.3626 (UTC) X-MS-Exchange-CrossTenant-fromentityheader: Hosted X-MS-Exchange-CrossTenant-id: 27e97857-e15f-486c-b58e-86c2b3040f93 X-MS-Exchange-CrossTenant-mailboxtype: HOSTED X-MS-Exchange-CrossTenant-userprincipalname: qlc1Fh1YMxq4QUmELU6jCgdVnEDhe517fIbOFUFJzL2AYwQ0R1PWRl9g9tAAMH7F5/GB6U3UKw6+yvHEJdTsGw== X-MS-Exchange-Transport-CrossTenantHeadersStamped: DM4PR10MB6088 Content-Language: zh-TW Content-Type: text/plain; charset="big5" Content-Transfer-Encoding: base64 SGkgSGFvIFd1LA0KDQpEbyB5b3UgaGF2ZSBhbnkgdXBkYXRlIG9uIHRoaXMgcGF0Y2g/DQoNClRo YW5rcywNClJpY2hhcmQNCg0KDQotLS0tLU9yaWdpbmFsIE1lc3NhZ2UtLS0tLQ0KRnJvbTogZGV2 ZWxAZWRrMi5ncm91cHMuaW8gPGRldmVsQGVkazIuZ3JvdXBzLmlvPiBPbiBCZWhhbGYgT2YgUmlj aGFyZEhvIFum86n6qb5dIHZpYSBncm91cHMuaW8NClNlbnQ6IDIwMjOmfjWk6zik6SAxMTo1MyBB TQ0KVG86IGRldmVsQGVkazIuZ3JvdXBzLmlvDQpDYzogQW5kcmV3IEZpc2ggPGFmaXNoQGFwcGxl LmNvbT47IExlaWYgTGluZGhvbG0gPHF1aWNfbGxpbmRob2xAcXVpY2luYy5jb20+OyBNaWNoYWVs IEQgS2lubmV5IDxtaWNoYWVsLmQua2lubmV5QGludGVsLmNvbT47IE1pY2hhZWwgS3ViYWNraSA8 bWlrdWJhY2tAbGludXgubWljcm9zb2Z0LmNvbT47IFpoaWd1YW5nIExpdSA8emhpZ3VhbmcubGl1 QGludGVsLmNvbT47IExpbWluZyBHYW8gPGdhb2xpbWluZ0BieW9zb2Z0LmNvbS5jbj47IEhhbyBB IFd1IDxoYW8uYS53dUBpbnRlbC5jb20+OyBSYXkgTmkgPHJheS5uaUBpbnRlbC5jb20+OyBUaW5o IE5ndXllbiA8dGluaG5ndXllbkBvcy5hbXBlcmVjb21wdXRpbmcuY29tPjsgUmViZWNjYSBDcmFu IDxyZWJlY2NhQGJzZGlvLmNvbT47IFRvbnkgTG8gKMO5qveqUSkgPFRvbnlMb0BhbWkuY29tPg0K U3ViamVjdDogW0VYVEVSTkFMXSBbZWRrMi1kZXZlbF0gW1BBVENIIHYzIDEvM10gTWRlTW9kdWxl UGtnL0J1cy9Vc2IvVXNiTmV0d29yay9Vc2JSbmRpczogQWRkIFVTQiBSTkRJUyBkZXZpY2VzIHN1 cHBvcnQNCg0KDQoqKkNBVVRJT046IFRoZSBlLW1haWwgYmVsb3cgaXMgZnJvbSBhbiBleHRlcm5h bCBzb3VyY2UuIFBsZWFzZSBleGVyY2lzZSBjYXV0aW9uIGJlZm9yZSBvcGVuaW5nIGF0dGFjaG1l bnRzLCBjbGlja2luZyBsaW5rcywgb3IgZm9sbG93aW5nIGd1aWRhbmNlLioqDQoNClRoaXMgZHJp dmVyIHByb3ZpZGVzIFVFRkkgZHJpdmVyIGZvciBVU0IgUk5ESVMgZGV2aWNlDQoNClNpZ25lZC1v ZmYtYnk6IFJpY2hhcmQgSG8gPHJpY2hhcmRob0BhbWkuY29tPg0KQ2M6IEFuZHJldyBGaXNoIDxh ZmlzaEBhcHBsZS5jb20+DQpDYzogTGVpZiBMaW5kaG9sbSA8cXVpY19sbGluZGhvbEBxdWljaW5j LmNvbT4NCkNjOiBNaWNoYWVsIEQgS2lubmV5IDxtaWNoYWVsLmQua2lubmV5QGludGVsLmNvbT4N CkNjOiBNaWNoYWVsIEt1YmFja2kgPG1pa3ViYWNrQGxpbnV4Lm1pY3Jvc29mdC5jb20+DQpDYzog WmhpZ3VhbmcgTGl1IDx6aGlndWFuZy5saXVAaW50ZWwuY29tPg0KQ2M6IExpbWluZyBHYW8gPGdh b2xpbWluZ0BieW9zb2Z0LmNvbS5jbj4NCkNjOiBIYW8gQSBXdSA8aGFvLmEud3VAaW50ZWwuY29t Pg0KQ2M6IFJheSBOaSA8cmF5Lm5pQGludGVsLmNvbT4NClRlc3RlZC1ieTogVGluaCBOZ3V5ZW4g PHRpbmhuZ3V5ZW5Ab3MuYW1wZXJlY29tcHV0aW5nLmNvbT4NClJldmlld2VkLWJ5OiBSZWJlY2Nh IENyYW4gPHJlYmVjY2FAYnNkaW8uY29tPg0KUmV2aWV3ZWQtYnk6IFRvbnkgTG8gPHRvbnlsb0Bh bWkuY29tPg0KLS0tDQogTWFpbnRhaW5lcnMudHh0ICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIHwgICAgNiArDQogLi4uL1VzYk5ldHdvcmsvTmV0d29ya0NvbW1vbi9Db21wb25lbnROYW1l LmMgIHwgIDI2MyArKysNCiAuLi4vVXNiTmV0d29yay9OZXR3b3JrQ29tbW9uL0RyaXZlckJpbmRp bmcuYyAgfCAgNTk1ICsrKysrKw0KIC4uLi9Vc2JOZXR3b3JrL05ldHdvcmtDb21tb24vRHJpdmVy QmluZGluZy5oICB8ICAyNjYgKysrDQogLi4uL05ldHdvcmtDb21tb24vTmV0d29ya0NvbW1vbi5p bmYgICAgICAgICAgIHwgICA0OCArDQogLi4uL1VzYk5ldHdvcmsvTmV0d29ya0NvbW1vbi9QeGVG dW5jdGlvbi5jICAgIHwgMTgwMyArKysrKysrKysrKysrKysrKw0KIC4uLi9Vc2IvVXNiTmV0d29y ay9Vc2JSbmRpcy9Db21wb25lbnROYW1lLmMgICB8ICAxNzIgKysNCiAuLi4vQnVzL1VzYi9Vc2JO ZXR3b3JrL1VzYlJuZGlzL1VzYlJuZGlzLmMgICAgfCAgODg2ICsrKysrKysrDQogLi4uL0J1cy9V c2IvVXNiTmV0d29yay9Vc2JSbmRpcy9Vc2JSbmRpcy5oICAgIHwgIDU4NiArKysrKysNCiAuLi4v QnVzL1VzYi9Vc2JOZXR3b3JrL1VzYlJuZGlzL1VzYlJuZGlzLmluZiAgfCAgIDQyICsNCiAuLi4v VXNiTmV0d29yay9Vc2JSbmRpcy9Vc2JSbmRpc0Z1bmN0aW9uLmMgICAgfCAxNzE4ICsrKysrKysr KysrKysrKysNCiAuLi4vSW5jbHVkZS9Qcm90b2NvbC9Vc2JFdGhlcm5ldFByb3RvY29sLmggICAg fCAgODc4ICsrKysrKysrDQogTWRlTW9kdWxlUGtnL01kZU1vZHVsZVBrZy5kZWMgICAgICAgICAg ICAgICAgIHwgICAxOCArDQogTWRlTW9kdWxlUGtnL01kZU1vZHVsZVBrZy5kc2MgICAgICAgICAg ICAgICAgIHwgICAgNCArDQogMTQgZmlsZXMgY2hhbmdlZCwgNzI4NSBpbnNlcnRpb25zKCspDQog Y3JlYXRlIG1vZGUgMTAwNjQ0IE1kZU1vZHVsZVBrZy9CdXMvVXNiL1VzYk5ldHdvcmsvTmV0d29y a0NvbW1vbi9Db21wb25lbnROYW1lLmMNCiBjcmVhdGUgbW9kZSAxMDA2NDQgTWRlTW9kdWxlUGtn L0J1cy9Vc2IvVXNiTmV0d29yay9OZXR3b3JrQ29tbW9uL0RyaXZlckJpbmRpbmcuYw0KIGNyZWF0 ZSBtb2RlIDEwMDY0NCBNZGVNb2R1bGVQa2cvQnVzL1VzYi9Vc2JOZXR3b3JrL05ldHdvcmtDb21t b24vRHJpdmVyQmluZGluZy5oDQogY3JlYXRlIG1vZGUgMTAwNjQ0IE1kZU1vZHVsZVBrZy9CdXMv VXNiL1VzYk5ldHdvcmsvTmV0d29ya0NvbW1vbi9OZXR3b3JrQ29tbW9uLmluZg0KIGNyZWF0ZSBt b2RlIDEwMDY0NCBNZGVNb2R1bGVQa2cvQnVzL1VzYi9Vc2JOZXR3b3JrL05ldHdvcmtDb21tb24v UHhlRnVuY3Rpb24uYw0KIGNyZWF0ZSBtb2RlIDEwMDY0NCBNZGVNb2R1bGVQa2cvQnVzL1VzYi9V c2JOZXR3b3JrL1VzYlJuZGlzL0NvbXBvbmVudE5hbWUuYw0KIGNyZWF0ZSBtb2RlIDEwMDY0NCBN ZGVNb2R1bGVQa2cvQnVzL1VzYi9Vc2JOZXR3b3JrL1VzYlJuZGlzL1VzYlJuZGlzLmMNCiBjcmVh dGUgbW9kZSAxMDA2NDQgTWRlTW9kdWxlUGtnL0J1cy9Vc2IvVXNiTmV0d29yay9Vc2JSbmRpcy9V c2JSbmRpcy5oDQogY3JlYXRlIG1vZGUgMTAwNjQ0IE1kZU1vZHVsZVBrZy9CdXMvVXNiL1VzYk5l dHdvcmsvVXNiUm5kaXMvVXNiUm5kaXMuaW5mDQogY3JlYXRlIG1vZGUgMTAwNjQ0IE1kZU1vZHVs ZVBrZy9CdXMvVXNiL1VzYk5ldHdvcmsvVXNiUm5kaXMvVXNiUm5kaXNGdW5jdGlvbi5jDQogY3Jl YXRlIG1vZGUgMTAwNjQ0IE1kZU1vZHVsZVBrZy9JbmNsdWRlL1Byb3RvY29sL1VzYkV0aGVybmV0 UHJvdG9jb2wuaA0KDQpkaWZmIC0tZ2l0IGEvTWFpbnRhaW5lcnMudHh0IGIvTWFpbnRhaW5lcnMu dHh0DQppbmRleCAwOWQwNGFmMjdhLi45YTE1Y2RiOTkzIDEwMDY0NA0KLS0tIGEvTWFpbnRhaW5l cnMudHh0DQorKysgYi9NYWludGFpbmVycy50eHQNCkBAIC00MzcsNiArNDM3LDEyIEBAIFI6IFpo aWd1YW5nIExpdSA8emhpZ3VhbmcubGl1QGludGVsLmNvbT4gW0xpdVpoaWd1YW5nMDAxXQ0KIFI6 IFJheSBOaSA8cmF5Lm5pQGludGVsLmNvbT4gW25pcnVpeXVdDQogUjogR3VhIEd1byA8Z3VhLmd1 b0BpbnRlbC5jb20+IFtnZ3VvMTE4Mzc0NjNdDQoNCitNZGVNb2R1bGVQa2c6IFVTQiBOZXR3b3Jr IG1vZHVsZXMNCitGOiBNZGVNb2R1bGVQa2cvQnVzL1VzYi9Vc2JOZXR3b3JrDQorRjogTWRlTW9k dWxlUGtnL0luY2x1ZGUvUHJvdG9jb2wvVXNiRXRoZXJuZXRQcm90b2NvbC5oDQorTTogUmljaGFy ZCBIbyA8cmljaGFyZGhvQGFtaS5jb20+IFtyaWNoYXJkaG9dDQorUjogUmViZWNjYSBDcmFuIDxy ZWJlY2NhQGJzZGlvLmNvbT4gW2JjcmFuXQ0KKw0KIE1kZVBrZw0KIEY6IE1kZVBrZy8NCiBXOiBo dHRwczovL2dpdGh1Yi5jb20vdGlhbm9jb3JlL3RpYW5vY29yZS5naXRodWIuaW8vd2lraS9NZGVQ a2cNCmRpZmYgLS1naXQgYS9NZGVNb2R1bGVQa2cvQnVzL1VzYi9Vc2JOZXR3b3JrL05ldHdvcmtD b21tb24vQ29tcG9uZW50TmFtZS5jIGIvTWRlTW9kdWxlUGtnL0J1cy9Vc2IvVXNiTmV0d29yay9O ZXR3b3JrQ29tbW9uL0NvbXBvbmVudE5hbWUuYw0KbmV3IGZpbGUgbW9kZSAxMDA2NDQNCmluZGV4 IDAwMDAwMDAwMDAuLmU4MzQ2OWUxMzANCi0tLSAvZGV2L251bGwNCisrKyBiL01kZU1vZHVsZVBr Zy9CdXMvVXNiL1VzYk5ldHdvcmsvTmV0d29ya0NvbW1vbi9Db21wb25lbnROYW1lLmMNCkBAIC0w LDAgKzEsMjYzIEBADQorLyoqIEBmaWxlDQorICBUaGlzIGZpbGUgY29udGFpbnMgY29kZSBmb3Ig VVNCIG5ldHdvcmsgY29tbW9uIGRyaXZlcg0KKyAgY29tcG9uZW50IG5hbWUgZGVmaW5pdGlvbnMN CisNCisgIENvcHlyaWdodCAoYykgMjAyMywgQW1lcmljYW4gTWVnYXRyZW5kcyBJbnRlcm5hdGlv bmFsIExMQy4gQWxsIHJpZ2h0cyByZXNlcnZlZC48QlI+DQorICBTUERYLUxpY2Vuc2UtSWRlbnRp ZmllcjogQlNELTItQ2xhdXNlLVBhdGVudA0KKyoqLw0KKw0KKyNpbmNsdWRlICJEcml2ZXJCaW5k aW5nLmgiDQorDQorZXh0ZXJuIEVGSV9EUklWRVJfQklORElOR19QUk9UT0NPTCAgZ05ldHdvcmtD b21tb25Ecml2ZXJCaW5kaW5nOw0KKw0KK0dMT0JBTF9SRU1PVkVfSUZfVU5SRUZFUkVOQ0VEIEVG SV9VTklDT0RFX1NUUklOR19UQUJMRSAgZ05ldHdvcmtDb21tb25Ecml2ZXJOYW1lVGFibGVbXSA9 IHsNCisgIHsNCisgICAgImVuZztlbiIsDQorICAgIEwiTmV0d29yayBDb21tb24gRHJpdmVyIg0K KyAgfSwNCisgIHsNCisgICAgTlVMTCwNCisgICAgTlVMTA0KKyAgfQ0KK307DQorR0xPQkFMX1JF TU9WRV9JRl9VTlJFRkVSRU5DRUQgRUZJX1VOSUNPREVfU1RSSU5HX1RBQkxFICAqZ05ldHdvcmtD b21tb25Db250cm9sbGVyTmFtZVRhYmxlID0gTlVMTDsNCisNCitFRklfU1RBVFVTDQorRUZJQVBJ DQorTmV0d29ya0NvbW1vbkNvbXBvbmVudE5hbWVHZXREcml2ZXJOYW1lICgNCisgIElOICBFRklf Q09NUE9ORU5UX05BTUVfUFJPVE9DT0wgICpUaGlzLA0KKyAgSU4gIENIQVI4ICAgICAgICAgICAg ICAgICAgICAgICAgKkxhbmd1YWdlLA0KKyAgT1VUIENIQVIxNiAgICAgICAgICAgICAgICAgICAg ICAgKipEcml2ZXJOYW1lDQorICApOw0KKw0KK0VGSV9TVEFUVVMNCitFRklBUEkNCitOZXR3b3Jr Q29tbW9uQ29tcG9uZW50TmFtZUdldENvbnRyb2xsZXJOYW1lICgNCisgIElOIEVGSV9DT01QT05F TlRfTkFNRV9QUk9UT0NPTCAgKlRoaXMsDQorICBJTiBFRklfSEFORExFICAgICAgICAgICAgICAg ICAgIENvbnRyb2xsZXIsDQorICBJTiBFRklfSEFORExFICAgICAgICAgICAgICAgICAgIENoaWxk SGFuZGxlICAgICAgICBPUFRJT05BTCwNCisgIElOIENIQVI4ICAgICAgICAgICAgICAgICAgICAg ICAgKkxhbmd1YWdlLA0KKyAgT1VUIENIQVIxNiAgICAgICAgICAgICAgICAgICAgICAqKkNvbnRy b2xsZXJOYW1lDQorICApOw0KKw0KK0dMT0JBTF9SRU1PVkVfSUZfVU5SRUZFUkVOQ0VEIEVGSV9D T01QT05FTlRfTkFNRV9QUk9UT0NPTCAgZ05ldHdvcmtDb21tb25Db21wb25lbnROYW1lID0gew0K KyAgTmV0d29ya0NvbW1vbkNvbXBvbmVudE5hbWVHZXREcml2ZXJOYW1lLA0KKyAgTmV0d29ya0Nv bW1vbkNvbXBvbmVudE5hbWVHZXRDb250cm9sbGVyTmFtZSwNCisgICJlbmciDQorfTsNCisNCitH TE9CQUxfUkVNT1ZFX0lGX1VOUkVGRVJFTkNFRCBFRklfQ09NUE9ORU5UX05BTUUyX1BST1RPQ09M ICBnTmV0d29ya0NvbW1vbkNvbXBvbmVudE5hbWUyID0gew0KKyAgKEVGSV9DT01QT05FTlRfTkFN RTJfR0VUX0RSSVZFUl9OQU1FKU5ldHdvcmtDb21tb25Db21wb25lbnROYW1lR2V0RHJpdmVyTmFt ZSwNCisgIChFRklfQ09NUE9ORU5UX05BTUUyX0dFVF9DT05UUk9MTEVSX05BTUUpTmV0d29ya0Nv bW1vbkNvbXBvbmVudE5hbWVHZXRDb250cm9sbGVyTmFtZSwNCisgICJlbiINCit9Ow0KKw0KKy8q Kg0KKyAgUmV0cmlldmVzIGEgVW5pY29kZSBzdHJpbmcgdGhhdCBpcyB0aGUgdXNlciByZWFkYWJs ZSBuYW1lIG9mIHRoZSBkcml2ZXIuDQorDQorICBUaGlzIGZ1bmN0aW9uIHJldHJpZXZlcyB0aGUg dXNlciByZWFkYWJsZSBuYW1lIG9mIGEgZHJpdmVyIGluIHRoZSBmb3JtIG9mIGENCisgIFVuaWNv ZGUgc3RyaW5nLiBJZiB0aGUgZHJpdmVyIHNwZWNpZmllZCBieSBUaGlzIGhhcyBhIHVzZXIgcmVh ZGFibGUgbmFtZSBpbg0KKyAgdGhlIGxhbmd1YWdlIHNwZWNpZmllZCBieSBMYW5ndWFnZSwgdGhl biBhIHBvaW50ZXIgdG8gdGhlIGRyaXZlciBuYW1lIGlzDQorICByZXR1cm5lZCBpbiBEcml2ZXJO YW1lLCBhbmQgRUZJX1NVQ0NFU1MgaXMgcmV0dXJuZWQuIElmIHRoZSBkcml2ZXIgc3BlY2lmaWVk DQorICBieSBUaGlzIGRvZXMgbm90IHN1cHBvcnQgdGhlIGxhbmd1YWdlIHNwZWNpZmllZCBieSBM YW5ndWFnZSwNCisgIHRoZW4gRUZJX1VOU1VQUE9SVEVEIGlzIHJldHVybmVkLg0KKw0KKyAgQHBh cmFtW2luXSAgVGhpcyAgICAgICAgICAgICAgQSBwb2ludGVyIHRvIHRoZSBFRklfQ09NUE9ORU5U X05BTUUyX1BST1RPQ09MIG9yDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBFRklf Q09NUE9ORU5UX05BTUVfUFJPVE9DT0wgaW5zdGFuY2UuDQorICBAcGFyYW1baW5dICBMYW5ndWFn ZSAgICAgICAgICBBIHBvaW50ZXIgdG8gYSBOdWxsLXRlcm1pbmF0ZWQgQVNDSUkgc3RyaW5nDQor ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcnJheSBpbmRpY2F0aW5nIHRoZSBsYW5n dWFnZS4gVGhpcyBpcyB0aGUNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxhbmd1 YWdlIG9mIHRoZSBkcml2ZXIgbmFtZSB0aGF0IHRoZSBjYWxsZXIgaXMNCisgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIHJlcXVlc3RpbmcsIGFuZCBpdCBtdXN0IG1hdGNoIG9uZSBvZiB0 aGUNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxhbmd1YWdlcyBzcGVjaWZpZWQg aW4gU3VwcG9ydGVkTGFuZ3VhZ2VzLiBUaGUNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIG51bWJlciBvZiBsYW5ndWFnZXMgc3VwcG9ydGVkIGJ5IGEgZHJpdmVyIGlzIHVwDQorICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0byB0aGUgZHJpdmVyIHdyaXRlci4gTGFuZ3Vh Z2UgaXMgc3BlY2lmaWVkDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbiBSRkMg NDY0NiBvciBJU08gNjM5LTIgbGFuZ3VhZ2UgY29kZSBmb3JtYXQuDQorICBAcGFyYW1bb3V0XSBE cml2ZXJOYW1lICAgICAgICBBIHBvaW50ZXIgdG8gdGhlIFVuaWNvZGUgc3RyaW5nIHRvIHJldHVy bi4NCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRoaXMgVW5pY29kZSBzdHJpbmcg aXMgdGhlIG5hbWUgb2YgdGhlDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkcml2 ZXIgc3BlY2lmaWVkIGJ5IFRoaXMgaW4gdGhlIGxhbmd1YWdlDQorICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBzcGVjaWZpZWQgYnkgTGFuZ3VhZ2UuDQorDQorICBAcmV0dmFsIEVGSV9T VUNDRVNTICAgICAgICAgICBUaGUgVW5pY29kZSBzdHJpbmcgZm9yIHRoZSBEcml2ZXIgc3BlY2lm aWVkIGJ5DQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUaGlzIGFuZCB0aGUgbGFu Z3VhZ2Ugc3BlY2lmaWVkIGJ5IExhbmd1YWdlIHdhcw0KKyAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgcmV0dXJuZWQgaW4gRHJpdmVyTmFtZS4NCisgIEByZXR2YWwgRUZJX0lOVkFMSURf UEFSQU1FVEVSIExhbmd1YWdlIGlzIE5VTEwuDQorICBAcmV0dmFsIEVGSV9JTlZBTElEX1BBUkFN RVRFUiBEcml2ZXJOYW1lIGlzIE5VTEwuDQorICBAcmV0dmFsIEVGSV9VTlNVUFBPUlRFRCAgICAg ICBUaGUgZHJpdmVyIHNwZWNpZmllZCBieSBUaGlzIGRvZXMgbm90IHN1cHBvcnQNCisgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIHRoZSBsYW5ndWFnZSBzcGVjaWZpZWQgYnkgTGFuZ3Vh Z2UuDQorDQorKiovDQorRUZJX1NUQVRVUw0KK0VGSUFQSQ0KK05ldHdvcmtDb21tb25Db21wb25l bnROYW1lR2V0RHJpdmVyTmFtZSAoDQorICBJTiAgRUZJX0NPTVBPTkVOVF9OQU1FX1BST1RPQ09M ICAqVGhpcywNCisgIElOICBDSEFSOCAgICAgICAgICAgICAgICAgICAgICAgICpMYW5ndWFnZSwN CisgIE9VVCBDSEFSMTYgICAgICAgICAgICAgICAgICAgICAgICoqRHJpdmVyTmFtZQ0KKyAgKQ0K K3sNCisgIHJldHVybiBMb29rdXBVbmljb2RlU3RyaW5nMiAoDQorICAgICAgICAgICBMYW5ndWFn ZSwNCisgICAgICAgICAgIFRoaXMtPlN1cHBvcnRlZExhbmd1YWdlcywNCisgICAgICAgICAgIGdO ZXR3b3JrQ29tbW9uRHJpdmVyTmFtZVRhYmxlLA0KKyAgICAgICAgICAgRHJpdmVyTmFtZSwNCisg ICAgICAgICAgIChCT09MRUFOKShUaGlzID09ICZnTmV0d29ya0NvbW1vbkNvbXBvbmVudE5hbWUp DQorICAgICAgICAgICApOw0KK30NCisNCisvKioNCisgIFJldHJpZXZlcyBhIFVuaWNvZGUgc3Ry aW5nIHRoYXQgaXMgdGhlIHVzZXIgcmVhZGFibGUgbmFtZSBvZiB0aGUgY29udHJvbGxlcg0KKyAg dGhhdCBpcyBiZWluZyBtYW5hZ2VkIGJ5IGEgZHJpdmVyLg0KKw0KKyAgVGhpcyBmdW5jdGlvbiBy ZXRyaWV2ZXMgdGhlIHVzZXIgcmVhZGFibGUgbmFtZSBvZiB0aGUgY29udHJvbGxlciBzcGVjaWZp ZWQgYnkNCisgIENvbnRyb2xsZXJIYW5kbGUgYW5kIENoaWxkSGFuZGxlIGluIHRoZSBmb3JtIG9m IGEgVW5pY29kZSBzdHJpbmcuIElmIHRoZQ0KKyAgZHJpdmVyIHNwZWNpZmllZCBieSBUaGlzIGhh cyBhIHVzZXIgcmVhZGFibGUgbmFtZSBpbiB0aGUgbGFuZ3VhZ2Ugc3BlY2lmaWVkIGJ5DQorICBM YW5ndWFnZSwgdGhlbiBhIHBvaW50ZXIgdG8gdGhlIGNvbnRyb2xsZXIgbmFtZSBpcyByZXR1cm5l ZCBpbiBDb250cm9sbGVyTmFtZSwNCisgIGFuZCBFRklfU1VDQ0VTUyBpcyByZXR1cm5lZC4gIElm IHRoZSBkcml2ZXIgc3BlY2lmaWVkIGJ5IFRoaXMgaXMgbm90IGN1cnJlbnRseQ0KKyAgbWFuYWdp bmcgdGhlIGNvbnRyb2xsZXIgc3BlY2lmaWVkIGJ5IENvbnRyb2xsZXJIYW5kbGUgYW5kIENoaWxk SGFuZGxlLA0KKyAgdGhlbiBFRklfVU5TVVBQT1JURUQgaXMgcmV0dXJuZWQuICBJZiB0aGUgZHJp dmVyIHNwZWNpZmllZCBieSBUaGlzIGRvZXMgbm90DQorICBzdXBwb3J0IHRoZSBsYW5ndWFnZSBz cGVjaWZpZWQgYnkgTGFuZ3VhZ2UsIHRoZW4gRUZJX1VOU1VQUE9SVEVEIGlzIHJldHVybmVkLg0K Kw0KKyAgQHBhcmFtW2luXSAgVGhpcyAgICAgICAgICAgICAgQSBwb2ludGVyIHRvIHRoZSBFRklf Q09NUE9ORU5UX05BTUUyX1BST1RPQ09MIG9yDQorICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBFRklfQ09NUE9ORU5UX05BTUVfUFJPVE9DT0wgaW5zdGFuY2UuDQorICBAcGFyYW1baW5d ICBDb250cm9sbGVyICAgICAgICBUaGUgaGFuZGxlIG9mIGEgY29udHJvbGxlciB0aGF0IHRoZSBk cml2ZXINCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNwZWNpZmllZCBieSBUaGlz IGlzIG1hbmFnaW5nLiAgVGhpcyBoYW5kbGUNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIHNwZWNpZmllcyB0aGUgY29udHJvbGxlciB3aG9zZSBuYW1lIGlzIHRvIGJlDQorICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm5lZC4NCisgIEBwYXJhbVtpbl0gIENoaWxk SGFuZGxlICAgICAgIFRoZSBoYW5kbGUgb2YgdGhlIGNoaWxkIGNvbnRyb2xsZXIgdG8gcmV0cmll dmUNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoZSBuYW1lIG9mLiAgVGhpcyBp cyBhbiBvcHRpb25hbCBwYXJhbWV0ZXIgdGhhdA0KKyAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgbWF5IGJlIE5VTEwuICBJdCB3aWxsIGJlIE5VTEwgZm9yIGRldmljZQ0KKyAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgZHJpdmVycy4gIEl0IHdpbGwgYWxzbyBiZSBOVUxMIGZv ciBhIGJ1cyBkcml2ZXJzDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGF0IHdp c2ggdG8gcmV0cmlldmUgdGhlIG5hbWUgb2YgdGhlIGJ1cw0KKyAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgY29udHJvbGxlci4gIEl0IHdpbGwgbm90IGJlIE5VTEwgZm9yIGEgYnVzDQor ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkcml2ZXIgdGhhdCB3aXNoZXMgdG8gcmV0 cmlldmUgdGhlIG5hbWUgb2YgYQ0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hp bGQgY29udHJvbGxlci4NCisgIEBwYXJhbVtpbl0gIExhbmd1YWdlICAgICAgICAgIEEgcG9pbnRl ciB0byBhIE51bGwtdGVybWluYXRlZCBBU0NJSSBzdHJpbmcNCisgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIGFycmF5IGluZGljYXRpbmcgdGhlIGxhbmd1YWdlLiAgVGhpcyBpcyB0aGUN CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxhbmd1YWdlIG9mIHRoZSBkcml2ZXIg bmFtZSB0aGF0IHRoZSBjYWxsZXIgaXMNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IHJlcXVlc3RpbmcsIGFuZCBpdCBtdXN0IG1hdGNoIG9uZSBvZiB0aGUNCisgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIGxhbmd1YWdlcyBzcGVjaWZpZWQgaW4gU3VwcG9ydGVkTGFuZ3Vh Z2VzLiBUaGUNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG51bWJlciBvZiBsYW5n dWFnZXMgc3VwcG9ydGVkIGJ5IGEgZHJpdmVyIGlzIHVwDQorICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICB0byB0aGUgZHJpdmVyIHdyaXRlci4gTGFuZ3VhZ2UgaXMgc3BlY2lmaWVkIGlu DQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBSRkMgNDY0NiBvciBJU08gNjM5LTIg bGFuZ3VhZ2UgY29kZSBmb3JtYXQuDQorICBAcGFyYW1bb3V0XSBDb250cm9sbGVyTmFtZSAgICBB IHBvaW50ZXIgdG8gdGhlIFVuaWNvZGUgc3RyaW5nIHRvIHJldHVybi4NCisgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIFRoaXMgVW5pY29kZSBzdHJpbmcgaXMgdGhlIG5hbWUgb2YgdGhl DQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250cm9sbGVyIHNwZWNpZmllZCBi eSBDb250cm9sbGVySGFuZGxlIGFuZA0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg Q2hpbGRIYW5kbGUgaW4gdGhlIGxhbmd1YWdlIHNwZWNpZmllZCBieQ0KKyAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgTGFuZ3VhZ2UgZnJvbSB0aGUgcG9pbnQgb2YgdmlldyBvZiB0aGUg ZHJpdmVyDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzcGVjaWZpZWQgYnkgVGhp cy4NCisNCisgIEByZXR2YWwgRUZJX1NVQ0NFU1MgICAgICAgICAgIFRoZSBVbmljb2RlIHN0cmlu ZyBmb3IgdGhlIHVzZXIgcmVhZGFibGUgbmFtZSBpbg0KKyAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgdGhlIGxhbmd1YWdlIHNwZWNpZmllZCBieSBMYW5ndWFnZSBmb3IgdGhlDQorICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkcml2ZXIgc3BlY2lmaWVkIGJ5IFRoaXMgd2Fz IHJldHVybmVkIGluDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBEcml2ZXJOYW1l Lg0KKyAgQHJldHZhbCBFRklfSU5WQUxJRF9QQVJBTUVURVIgQ29udHJvbGxlckhhbmRsZSBpcyBu b3QgYSB2YWxpZCBFRklfSEFORExFLg0KKyAgQHJldHZhbCBFRklfSU5WQUxJRF9QQVJBTUVURVIg Q2hpbGRIYW5kbGUgaXMgbm90IE5VTEwgYW5kIGl0IGlzIG5vdCBhIHZhbGlkDQorICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBFRklfSEFORExFLg0KKyAgQHJldHZhbCBFRklfSU5WQUxJ RF9QQVJBTUVURVIgTGFuZ3VhZ2UgaXMgTlVMTC4NCisgIEByZXR2YWwgRUZJX0lOVkFMSURfUEFS QU1FVEVSIENvbnRyb2xsZXJOYW1lIGlzIE5VTEwuDQorICBAcmV0dmFsIEVGSV9VTlNVUFBPUlRF RCAgICAgICBUaGUgZHJpdmVyIHNwZWNpZmllZCBieSBUaGlzIGlzIG5vdCBjdXJyZW50bHkNCisg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hbmFnaW5nIHRoZSBjb250cm9sbGVyIHNw ZWNpZmllZCBieQ0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ29udHJvbGxlckhh bmRsZSBhbmQgQ2hpbGRIYW5kbGUuDQorICBAcmV0dmFsIEVGSV9VTlNVUFBPUlRFRCAgICAgICBU aGUgZHJpdmVyIHNwZWNpZmllZCBieSBUaGlzIGRvZXMgbm90IHN1cHBvcnQNCisgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIHRoZSBsYW5ndWFnZSBzcGVjaWZpZWQgYnkgTGFuZ3VhZ2Uu DQorDQorKiovDQorRUZJX1NUQVRVUw0KK0VGSUFQSQ0KK05ldHdvcmtDb21tb25Db21wb25lbnRO YW1lR2V0Q29udHJvbGxlck5hbWUgKA0KKyAgSU4gIEVGSV9DT01QT05FTlRfTkFNRV9QUk9UT0NP TCAgKlRoaXMsDQorICBJTiAgRUZJX0hBTkRMRSAgICAgICAgICAgICAgICAgICBDb250cm9sbGVy LA0KKyAgSU4gIEVGSV9IQU5ETEUgICAgICAgICAgICAgICAgICAgQ2hpbGRIYW5kbGUgICAgICAg IE9QVElPTkFMLA0KKyAgSU4gIENIQVI4ICAgICAgICAgICAgICAgICAgICAgICAgKkxhbmd1YWdl LA0KKyAgT1VUIENIQVIxNiAgICAgICAgICAgICAgICAgICAgICAgKipDb250cm9sbGVyTmFtZQ0K KyAgKQ0KK3sNCisgIEVGSV9TVEFUVVMgICAgICAgICAgICAgICAgIFN0YXR1czsNCisgIENIQVIx NiAgICAgICAgICAgICAgICAgICAgICpIYW5kbGVOYW1lOw0KKyAgRUZJX1VTQl9JT19QUk9UT0NP TCAgICAgICAgKlVzYklvOw0KKyAgRUZJX1VTQl9ERVZJQ0VfREVTQ1JJUFRPUiAgRGV2RGVzYzsN CisNCisgIGlmICghTGFuZ3VhZ2UgfHwgIUNvbnRyb2xsZXJOYW1lKSB7DQorICAgIHJldHVybiBF RklfSU5WQUxJRF9QQVJBTUVURVI7DQorICB9DQorDQorICBpZiAoQ2hpbGRIYW5kbGUgPT0gTlVM TCkgew0KKyAgICByZXR1cm4gRUZJX1VOU1VQUE9SVEVEOw0KKyAgfQ0KKw0KKyAgLy8NCisgIC8v IE1ha2Ugc3VyZSB0aGlzIGRyaXZlciBpcyBjdXJyZW50bHkgbWFuYWdpbmcgQ29udHJvbGxlckhh bmRsZQ0KKyAgLy8NCisgIFN0YXR1cyA9IEVmaVRlc3RNYW5hZ2VkRGV2aWNlICgNCisgICAgICAg ICAgICAgQ29udHJvbGxlciwNCisgICAgICAgICAgICAgZ05ldHdvcmtDb21tb25Ecml2ZXJCaW5k aW5nLkRyaXZlckJpbmRpbmdIYW5kbGUsDQorICAgICAgICAgICAgICZnRWRrSUlVc2JFdGhQcm90 b2NvbEd1aWQNCisgICAgICAgICAgICAgKTsNCisgIGlmIChFRklfRVJST1IgKFN0YXR1cykpIHsN CisgICAgcmV0dXJuIFN0YXR1czsNCisgIH0NCisNCisgIC8vDQorICAvLyBNYWtlIHN1cmUgdGhp cyBkcml2ZXIgcHJvZHVjZWQgQ2hpbGRIYW5kbGUNCisgIC8vDQorICBTdGF0dXMgPSBFZmlUZXN0 Q2hpbGRIYW5kbGUgKA0KKyAgICAgICAgICAgICBDb250cm9sbGVyLA0KKyAgICAgICAgICAgICBD aGlsZEhhbmRsZSwNCisgICAgICAgICAgICAgJmdFZGtJSVVzYkV0aFByb3RvY29sR3VpZA0KKyAg ICAgICAgICAgICApOw0KKyAgaWYgKEVGSV9FUlJPUiAoU3RhdHVzKSkgew0KKyAgICByZXR1cm4g U3RhdHVzOw0KKyAgfQ0KKw0KKyAgU3RhdHVzID0gZ0JTLT5IYW5kbGVQcm90b2NvbCAoQ29udHJv bGxlciwgJmdFZmlVc2JJb1Byb3RvY29sR3VpZCwgKFZPSUQgKiopJlVzYklvKTsNCisNCisgIGlm ICghRUZJX0VSUk9SIChTdGF0dXMpKSB7DQorICAgIFN0YXR1cyA9IFVzYklvLT5Vc2JHZXREZXZp Y2VEZXNjcmlwdG9yIChVc2JJbywgJkRldkRlc2MpOw0KKyAgICBpZiAoRUZJX0VSUk9SIChTdGF0 dXMpKSB7DQorICAgICAgcmV0dXJuIFN0YXR1czsNCisgICAgfQ0KKw0KKyAgICBTdGF0dXMgPSBV c2JJby0+VXNiR2V0U3RyaW5nRGVzY3JpcHRvciAoVXNiSW8sIDB4NDA5LCBEZXZEZXNjLlN0ck1h bnVmYWN0dXJlciwgJkhhbmRsZU5hbWUpOw0KKyAgICBpZiAoRUZJX0VSUk9SIChTdGF0dXMpKSB7 DQorICAgICAgcmV0dXJuIFN0YXR1czsNCisgICAgfQ0KKw0KKyAgICAqQ29udHJvbGxlck5hbWUg PSBIYW5kbGVOYW1lOw0KKw0KKyAgICBpZiAoZ05ldHdvcmtDb21tb25Db250cm9sbGVyTmFtZVRh YmxlICE9IE5VTEwpIHsNCisgICAgICBGcmVlVW5pY29kZVN0cmluZ1RhYmxlIChnTmV0d29ya0Nv bW1vbkNvbnRyb2xsZXJOYW1lVGFibGUpOw0KKyAgICAgIGdOZXR3b3JrQ29tbW9uQ29udHJvbGxl ck5hbWVUYWJsZSA9IE5VTEw7DQorICAgIH0NCisNCisgICAgU3RhdHVzID0gQWRkVW5pY29kZVN0 cmluZzIgKA0KKyAgICAgICAgICAgICAgICJlbmciLA0KKyAgICAgICAgICAgICAgIGdOZXR3b3Jr Q29tbW9uQ29tcG9uZW50TmFtZS5TdXBwb3J0ZWRMYW5ndWFnZXMsDQorICAgICAgICAgICAgICAg JmdOZXR3b3JrQ29tbW9uQ29udHJvbGxlck5hbWVUYWJsZSwNCisgICAgICAgICAgICAgICBIYW5k bGVOYW1lLA0KKyAgICAgICAgICAgICAgIFRSVUUNCisgICAgICAgICAgICAgICApOw0KKyAgICBp ZiAoRUZJX0VSUk9SIChTdGF0dXMpKSB7DQorICAgICAgcmV0dXJuIFN0YXR1czsNCisgICAgfQ0K Kw0KKyAgICBTdGF0dXMgPSBBZGRVbmljb2RlU3RyaW5nMiAoDQorICAgICAgICAgICAgICAgImVu IiwNCisgICAgICAgICAgICAgICBnTmV0d29ya0NvbW1vbkNvbXBvbmVudE5hbWUyLlN1cHBvcnRl ZExhbmd1YWdlcywNCisgICAgICAgICAgICAgICAmZ05ldHdvcmtDb21tb25Db250cm9sbGVyTmFt ZVRhYmxlLA0KKyAgICAgICAgICAgICAgIEhhbmRsZU5hbWUsDQorICAgICAgICAgICAgICAgRkFM U0UNCisgICAgICAgICAgICAgICApOw0KKyAgICBpZiAoRUZJX0VSUk9SIChTdGF0dXMpKSB7DQor ICAgICAgcmV0dXJuIFN0YXR1czsNCisgICAgfQ0KKw0KKyAgICByZXR1cm4gTG9va3VwVW5pY29k ZVN0cmluZzIgKA0KKyAgICAgICAgICAgICBMYW5ndWFnZSwNCisgICAgICAgICAgICAgVGhpcy0+ U3VwcG9ydGVkTGFuZ3VhZ2VzLA0KKyAgICAgICAgICAgICBnTmV0d29ya0NvbW1vbkNvbnRyb2xs ZXJOYW1lVGFibGUsDQorICAgICAgICAgICAgIENvbnRyb2xsZXJOYW1lLA0KKyAgICAgICAgICAg ICAoQk9PTEVBTikoVGhpcyA9PSAmZ05ldHdvcmtDb21tb25Db21wb25lbnROYW1lKQ0KKyAgICAg ICAgICAgICApOw0KKyAgfQ0KKw0KKyAgcmV0dXJuIEVGSV9VTlNVUFBPUlRFRDsNCit9DQpkaWZm IC0tZ2l0IGEvTWRlTW9kdWxlUGtnL0J1cy9Vc2IvVXNiTmV0d29yay9OZXR3b3JrQ29tbW9uL0Ry aXZlckJpbmRpbmcuYyBiL01kZU1vZHVsZVBrZy9CdXMvVXNiL1VzYk5ldHdvcmsvTmV0d29ya0Nv bW1vbi9Ecml2ZXJCaW5kaW5nLmMNCm5ldyBmaWxlIG1vZGUgMTAwNjQ0DQppbmRleCAwMDAwMDAw MDAwLi44NTIwY2Y4ODZjDQotLS0gL2Rldi9udWxsDQorKysgYi9NZGVNb2R1bGVQa2cvQnVzL1Vz Yi9Vc2JOZXR3b3JrL05ldHdvcmtDb21tb24vRHJpdmVyQmluZGluZy5jDQpAQCAtMCwwICsxLDU5 NSBAQA0KKy8qKiBAZmlsZQ0KKyAgVGhpcyBmaWxlIGNvbnRhaW5zIGNvZGUgZm9yIFVTQiBuZXR3 b3JrIGJpbmRpbmcgZHJpdmVyDQorDQorICBDb3B5cmlnaHQgKGMpIDIwMjMsIEFtZXJpY2FuIE1l Z2F0cmVuZHMgSW50ZXJuYXRpb25hbCBMTEMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuPEJSPg0KKyAg U1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEJTRC0yLUNsYXVzZS1QYXRlbnQNCisqKi8NCisNCisj aW5jbHVkZSAiRHJpdmVyQmluZGluZy5oIg0KKw0KK1BYRV9TV19VTkRJICAqZ1B4ZSA9IE5VTEw7 DQorTklDX0RFVklDRSAgICpnTGFuRGV2aWNlTGlzdFtNQVhfTEFOX0lOVEVSRkFDRV07DQorVUlO VDMyICAgICAgIGdSYXRlTGltaXRpbmdDcmVkaXQ7DQorVUlOVDMyICAgICAgIGdSYXRlTGltaXRp bmdQb2xsVGltZXI7DQorQk9PTEVBTiAgICAgIGdSYXRlTGltaXRpbmdFbmFibGU7DQorDQorRUZJ X0RSSVZFUl9CSU5ESU5HX1BST1RPQ09MICBnTmV0d29ya0NvbW1vbkRyaXZlckJpbmRpbmcgPSB7 DQorICBOZXR3b3JrQ29tbW9uU3VwcG9ydGVkLA0KKyAgTmV0d29ya0NvbW1vbkRyaXZlclN0YXJ0 LA0KKyAgTmV0d29ya0NvbW1vbkRyaXZlclN0b3AsDQorICBORVRXT1JLX0NPTU1PTl9EUklWRVJf VkVSU0lPTiwNCisgIE5VTEwsDQorICBOVUxMDQorfTsNCisNCisvKioNCisgIENyZWF0ZSBNQUMg RGV2aWNlIFBhdGgNCisNCisgIEBwYXJhbVtpbiwgb3V0XSBEZXYgICAgICAgICAgICAgQSBwb2lu dGVyIHRvIHRoZSBFRklfREVWSUNFX1BBVEhfUFJPVE9DT0wgaW5zdGFuY2UuDQorICBAcGFyYW1b aW5dICAgICAgQmFzZURldiAgICAgICAgIEEgcG9pbnRlciB0byB0aGUgRUZJX0RFVklDRV9QQVRI X1BST1RPQ09MIGluc3RhbmNlLg0KKyAgQHBhcmFtW2luXSAgICAgIE5pYyAgICAgICAgICAgICBB IHBvaW50ZXIgdG8gdGhlIE5ldHdvcmsgaW50ZXJmYWNlIGNvbnRyb2xsZXIgZGF0YS4NCisNCisg IEByZXR2YWwgRUZJX09VVF9PRl9SRVNPVVJDRVMgICAgVGhlIGRldmljZSBwYXRoIGNvdWxkIG5v dCBiZSBjcmVhdGVkIHN1Y2Nlc3NmdWxseSBkdWUgdG8gYSBsYWNrIG9mIHJlc291cmNlcy4NCisg IEByZXR2YWwgRUZJX1NVQ0NFU1MgICAgICAgICAgICAgTUFDIGRldmljZSBwYXRoIGNyZWF0ZWQg c3VjY2Vzc2Z1bGx5Lg0KKw0KKyoqLw0KK0VGSV9TVEFUVVMNCitDcmVhdGVNYWNEZXZpY2VQYXRo ICgNCisgIElOIE9VVCAgRUZJX0RFVklDRV9QQVRIX1BST1RPQ09MICAqKkRldiwNCisgIElOICAg ICAgRUZJX0RFVklDRV9QQVRIX1BST1RPQ09MICAqQmFzZURldiwNCisgIElOICAgICAgTklDX0RB VEEgICAgICAgICAgICAgICAgICAqTmljDQorICApDQorew0KKyAgRUZJX1NUQVRVUyAgICAgICAg ICAgICAgICBTdGF0dXM7DQorICBNQUNfQUREUl9ERVZJQ0VfUEFUSCAgICAgIE1hY0FkZHJOb2Rl Ow0KKyAgRUZJX0RFVklDRV9QQVRIX1BST1RPQ09MICAqRW5kTm9kZTsNCisgIFVJTlQ4ICAgICAg ICAgICAgICAgICAgICAgKkRldmljZVBhdGg7DQorICBVSU5UMTYgICAgICAgICAgICAgICAgICAg IFRvdGFsTGVuZ3RoOw0KKyAgVUlOVDE2ICAgICAgICAgICAgICAgICAgICBCYXNlTGVuZ3RoOw0K Kw0KKyAgWmVyb01lbSAoJk1hY0FkZHJOb2RlLCBzaXplb2YgKE1BQ19BRERSX0RFVklDRV9QQVRI KSk7DQorICBDb3B5TWVtICgmTWFjQWRkck5vZGUuTWFjQWRkcmVzcywgJk5pYy0+TWFjQWRkciwg c2l6ZW9mIChFRklfTUFDX0FERFJFU1MpKTsNCisNCisgIE1hY0FkZHJOb2RlLkhlYWRlci5UeXBl ICAgICAgPSBNRVNTQUdJTkdfREVWSUNFX1BBVEg7DQorICBNYWNBZGRyTm9kZS5IZWFkZXIuU3Vi VHlwZSAgID0gTVNHX01BQ19BRERSX0RQOw0KKyAgTWFjQWRkck5vZGUuSGVhZGVyLkxlbmd0aFsw XSA9IChVSU5UOClzaXplb2YgKE1hY0FkZHJOb2RlKTsNCisgIE1hY0FkZHJOb2RlLkhlYWRlci5M ZW5ndGhbMV0gPSAwOw0KKw0KKyAgRW5kTm9kZSA9IEJhc2VEZXY7DQorDQorICB3aGlsZSAoIUlz RGV2aWNlUGF0aEVuZCAoRW5kTm9kZSkpIHsNCisgICAgRW5kTm9kZSA9IE5leHREZXZpY2VQYXRo Tm9kZSAoRW5kTm9kZSk7DQorICB9DQorDQorICBCYXNlTGVuZ3RoICA9IChVSU5UMTYpKChVSU5U TikoRW5kTm9kZSkgLSAoVUlOVE4pKEJhc2VEZXYpKTsNCisgIFRvdGFsTGVuZ3RoID0gKFVJTlQx NikoQmFzZUxlbmd0aCArIHNpemVvZiAoTWFjQWRkck5vZGUpICsgc2l6ZW9mIChFRklfREVWSUNF X1BBVEhfUFJPVE9DT0wpKTsNCisNCisgIFN0YXR1cyA9IGdCUy0+QWxsb2NhdGVQb29sIChFZmlC b290U2VydmljZXNEYXRhLCBUb3RhbExlbmd0aCwgKFZPSUQgKiopJkRldmljZVBhdGgpOw0KKyAg aWYgKEVGSV9FUlJPUiAoU3RhdHVzKSkgew0KKyAgICByZXR1cm4gU3RhdHVzOw0KKyAgfQ0KKw0K KyAgKkRldiA9IChFRklfREVWSUNFX1BBVEhfUFJPVE9DT0wgKilEZXZpY2VQYXRoOw0KKyAgQ29w eU1lbSAoRGV2aWNlUGF0aCwgKENIQVI4ICopQmFzZURldiwgQmFzZUxlbmd0aCk7DQorICBEZXZp Y2VQYXRoICs9IEJhc2VMZW5ndGg7DQorICBDb3B5TWVtIChEZXZpY2VQYXRoLCAoQ0hBUjggKikm TWFjQWRkck5vZGUsIHNpemVvZiAoTWFjQWRkck5vZGUpKTsNCisgIERldmljZVBhdGggKz0gc2l6 ZW9mIChNYWNBZGRyTm9kZSk7DQorICBDb3B5TWVtIChEZXZpY2VQYXRoLCAoQ0hBUjggKilFbmRO b2RlLCBzaXplb2YgKEVGSV9ERVZJQ0VfUEFUSF9QUk9UT0NPTCkpOw0KKw0KKyAgcmV0dXJuIEVG SV9TVUNDRVNTOw0KK30NCisNCisvKioNCisgIE5ldHdvcmsgQ29tbW9uIERyaXZlciBCaW5kaW5n IFN1cHBvcnQuDQorDQorICBAcGFyYW1baW5dICBUaGlzICAgICAgICAgICAgICAgICAgICBQcm90 b2NvbCBpbnN0YW5jZSBwb2ludGVyLg0KKyAgQHBhcmFtW2luXSAgQ29udHJvbGxlckhhbmRsZSAg ICAgICAgSGFuZGxlIG9mIGRldmljZSB0byB0ZXN0Lg0KKyAgQHBhcmFtW2luXSAgUmVtYWluaW5n RGV2aWNlUGF0aCAgICAgT3B0aW9uYWwgcGFyYW1ldGVyIHVzZSB0byBwaWNrIGEgc3BlY2lmaWMg Y2hpbGQNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRldmljZSB0byBz dGFydC4NCisNCisgIEByZXR2YWwgRUZJX1NVQ0NFU1MgICAgICAgICAgICAgICAgIFRoaXMgZHJp dmVyIHN1cHBvcnRzIHRoaXMgZGV2aWNlLg0KKyAgQHJldHZhbCBFRklfQUxSRUFEWV9TVEFSVEVE ICAgICAgICAgVGhpcyBkcml2ZXIgaXMgYWxyZWFkeSBydW5uaW5nIG9uIHRoaXMgZGV2aWNlLg0K KyAgQHJldHZhbCBvdGhlciAgICAgICAgICAgICAgICAgICAgICAgVGhpcyBkcml2ZXIgZG9lcyBu b3Qgc3VwcG9ydCB0aGlzIGRldmljZS4NCisNCisqKi8NCitFRklfU1RBVFVTDQorRUZJQVBJDQor TmV0d29ya0NvbW1vblN1cHBvcnRlZCAoDQorICBJTiBFRklfRFJJVkVSX0JJTkRJTkdfUFJPVE9D T0wgICpUaGlzLA0KKyAgSU4gRUZJX0hBTkRMRSAgICAgICAgICAgICAgICAgICBDb250cm9sbGVy SGFuZGxlLA0KKyAgSU4gRUZJX0RFVklDRV9QQVRIX1BST1RPQ09MICAgICAqUmVtYWluaW5nRGV2 aWNlUGF0aA0KKyAgKQ0KK3sNCisgIEVGSV9TVEFUVVMgICAgICAgICAgICAgICAgICAgU3RhdHVz Ow0KKyAgRURLSUlfVVNCX0VUSEVSTkVUX1BST1RPQ09MICAqVXNiRXRoOw0KKw0KKyAgU3RhdHVz ID0gZ0JTLT5PcGVuUHJvdG9jb2wgKA0KKyAgICAgICAgICAgICAgICAgIENvbnRyb2xsZXJIYW5k bGUsDQorICAgICAgICAgICAgICAgICAgJmdFZGtJSVVzYkV0aFByb3RvY29sR3VpZCwNCisgICAg ICAgICAgICAgICAgICAoVk9JRCAqKikmVXNiRXRoLA0KKyAgICAgICAgICAgICAgICAgIFRoaXMt PkRyaXZlckJpbmRpbmdIYW5kbGUsDQorICAgICAgICAgICAgICAgICAgQ29udHJvbGxlckhhbmRs ZSwNCisgICAgICAgICAgICAgICAgICBFRklfT1BFTl9QUk9UT0NPTF9CWV9EUklWRVINCisgICAg ICAgICAgICAgICAgICApOw0KKyAgaWYgKEVGSV9FUlJPUiAoU3RhdHVzKSkgew0KKyAgICByZXR1 cm4gU3RhdHVzOw0KKyAgfQ0KKw0KKyAgZ0JTLT5DbG9zZVByb3RvY29sICgNCisgICAgICAgICBD b250cm9sbGVySGFuZGxlLA0KKyAgICAgICAgICZnRWRrSUlVc2JFdGhQcm90b2NvbEd1aWQsDQor ICAgICAgICAgVGhpcy0+RHJpdmVyQmluZGluZ0hhbmRsZSwNCisgICAgICAgICBDb250cm9sbGVy SGFuZGxlDQorICAgICAgICAgKTsNCisgIHJldHVybiBTdGF0dXM7DQorfQ0KKw0KKy8qKg0KKyAg TmV0d29yayBDb21tb24gRHJpdmVyIEJpbmRpbmcgU3RhcnQuDQorDQorICBAcGFyYW1baW5dICBU aGlzICAgICAgICAgICAgICAgICAgICBQcm90b2NvbCBpbnN0YW5jZSBwb2ludGVyLg0KKyAgQHBh cmFtW2luXSAgQ29udHJvbGxlckhhbmRsZSAgICAgICAgSGFuZGxlIG9mIGRldmljZSB0byBiaW5k IGRyaXZlciB0by4NCisgIEBwYXJhbVtpbl0gIFJlbWFpbmluZ0RldmljZVBhdGggICAgIE9wdGlv bmFsIHBhcmFtZXRlciB1c2UgdG8gcGljayBhIHNwZWNpZmljIGNoaWxkDQorICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBkZXZpY2UgdG8gc3RhcnQuDQorDQorICBAcmV0dmFs IEVGSV9TVUNDRVNTICAgICAgICAgICAgICAgICBUaGlzIGRyaXZlciBpcyBhZGRlZCB0byBDb250 cm9sbGVySGFuZGxlDQorICBAcmV0dmFsIEVGSV9ERVZJQ0VfRVJST1IgICAgICAgICAgICBUaGlz IGRyaXZlciBjb3VsZCBub3QgYmUgc3RhcnRlZCBkdWUgdG8gYSBkZXZpY2UgZXJyb3INCisgIEBy ZXR2YWwgRUZJX09VVF9PRl9SRVNPVVJDRVMgICAgICAgIFRoZSBkcml2ZXIgY291bGQgbm90IGlu c3RhbGwgc3VjY2Vzc2Z1bGx5IGR1ZSB0byBhIGxhY2sgb2YgcmVzb3VyY2VzLg0KKyAgQHJldHZh bCBvdGhlciAgICAgICAgICAgICAgICAgICAgICAgVGhpcyBkcml2ZXIgZG9lcyBub3Qgc3VwcG9y dCB0aGlzIGRldmljZQ0KKw0KKyoqLw0KK0VGSV9TVEFUVVMNCitFRklBUEkNCitOZXR3b3JrQ29t bW9uRHJpdmVyU3RhcnQgKA0KKyAgSU4gRUZJX0RSSVZFUl9CSU5ESU5HX1BST1RPQ09MICAqVGhp cywNCisgIElOIEVGSV9IQU5ETEUgICAgICAgICAgICAgICAgICAgQ29udHJvbGxlckhhbmRsZSwN CisgIElOIEVGSV9ERVZJQ0VfUEFUSF9QUk9UT0NPTCAgICAgKlJlbWFpbmluZ0RldmljZVBhdGgN CisgICkNCit7DQorICBFRklfU1RBVFVTICAgICAgICAgICAgICAgICAgIFN0YXR1czsNCisgIEVG SV9ERVZJQ0VfUEFUSF9QUk9UT0NPTCAgICAgKlVzYkV0aFBhdGg7DQorICBFREtJSV9VU0JfRVRI RVJORVRfUFJPVE9DT0wgICpVc2JFdGg7DQorICBFRklfTUFDX0FERFJFU1MgICAgICAgICAgICAg IE1hY0FkZHJlc3M7DQorICBVSU5UTiAgICAgICAgICAgICAgICAgICAgICAgIEJ1bGtEYXRhU2l6 ZTsNCisgIE5JQ19ERVZJQ0UgICAgICAgICAgICAgICAgICAgKk5pY0RldmljZTsNCisgIFVJTlQ4 ICAgICAgICAgICAgICAgICAgICAgICAgKlRtcFB4ZVBvaW50ZXI7DQorDQorICBTdGF0dXMgPSBn QlMtPk9wZW5Qcm90b2NvbCAoDQorICAgICAgICAgICAgICAgICAgQ29udHJvbGxlckhhbmRsZSwN CisgICAgICAgICAgICAgICAgICAmZ0Vka0lJVXNiRXRoUHJvdG9jb2xHdWlkLA0KKyAgICAgICAg ICAgICAgICAgIChWT0lEICoqKSZVc2JFdGgsDQorICAgICAgICAgICAgICAgICAgVGhpcy0+RHJp dmVyQmluZGluZ0hhbmRsZSwNCisgICAgICAgICAgICAgICAgICBDb250cm9sbGVySGFuZGxlLA0K KyAgICAgICAgICAgICAgICAgIEVGSV9PUEVOX1BST1RPQ09MX0JZX0RSSVZFUg0KKyAgICAgICAg ICAgICAgICAgICk7DQorICBpZiAoRUZJX0VSUk9SIChTdGF0dXMpKSB7DQorICAgIHJldHVybiBT dGF0dXM7DQorICB9DQorDQorICBTdGF0dXMgPSBnQlMtPk9wZW5Qcm90b2NvbCAoDQorICAgICAg ICAgICAgICAgICAgQ29udHJvbGxlckhhbmRsZSwNCisgICAgICAgICAgICAgICAgICAmZ0VmaURl dmljZVBhdGhQcm90b2NvbEd1aWQsDQorICAgICAgICAgICAgICAgICAgKFZPSUQgKiopJlVzYkV0 aFBhdGgsDQorICAgICAgICAgICAgICAgICAgVGhpcy0+RHJpdmVyQmluZGluZ0hhbmRsZSwNCisg ICAgICAgICAgICAgICAgICBDb250cm9sbGVySGFuZGxlLA0KKyAgICAgICAgICAgICAgICAgIEVG SV9PUEVOX1BST1RPQ09MX0JZX0RSSVZFUg0KKyAgICAgICAgICAgICAgICAgICk7DQorDQorICBp ZiAoRUZJX0VSUk9SIChTdGF0dXMpKSB7DQorICAgIGdCUy0+Q2xvc2VQcm90b2NvbCAoDQorICAg ICAgICAgICBDb250cm9sbGVySGFuZGxlLA0KKyAgICAgICAgICAgJmdFZGtJSVVzYkV0aFByb3Rv Y29sR3VpZCwNCisgICAgICAgICAgIFRoaXMtPkRyaXZlckJpbmRpbmdIYW5kbGUsDQorICAgICAg ICAgICBDb250cm9sbGVySGFuZGxlDQorICAgICAgICAgICApOw0KKyAgICByZXR1cm4gU3RhdHVz Ow0KKyAgfQ0KKw0KKyAgWmVyb01lbSAoJk1hY0FkZHJlc3MsIHNpemVvZiAoRUZJX01BQ19BRERS RVNTKSk7DQorDQorICBTdGF0dXMgPSBVc2JFdGgtPlVzYkV0aE1hY0FkZHJlc3MgKFVzYkV0aCwg Jk1hY0FkZHJlc3MpOw0KKyAgQVNTRVJUX0VGSV9FUlJPUiAoU3RhdHVzKTsNCisgIFN0YXR1cyA9 IFVzYkV0aC0+VXNiRXRoTWF4QnVsa1NpemUgKFVzYkV0aCwgJkJ1bGtEYXRhU2l6ZSk7DQorDQor ICBpZiAoRUZJX0VSUk9SIChTdGF0dXMpKSB7DQorICAgIGdCUy0+Q2xvc2VQcm90b2NvbCAoDQor ICAgICAgICAgICBDb250cm9sbGVySGFuZGxlLA0KKyAgICAgICAgICAgJmdFZmlEZXZpY2VQYXRo UHJvdG9jb2xHdWlkLA0KKyAgICAgICAgICAgVGhpcy0+RHJpdmVyQmluZGluZ0hhbmRsZSwNCisg ICAgICAgICAgIENvbnRyb2xsZXJIYW5kbGUNCisgICAgICAgICAgICk7DQorICAgIGdCUy0+Q2xv c2VQcm90b2NvbCAoDQorICAgICAgICAgICBDb250cm9sbGVySGFuZGxlLA0KKyAgICAgICAgICAg JmdFZGtJSVVzYkV0aFByb3RvY29sR3VpZCwNCisgICAgICAgICAgIFRoaXMtPkRyaXZlckJpbmRp bmdIYW5kbGUsDQorICAgICAgICAgICBDb250cm9sbGVySGFuZGxlDQorICAgICAgICAgICApOw0K KyAgICByZXR1cm4gU3RhdHVzOw0KKyAgfQ0KKw0KKyAgTmljRGV2aWNlID0gQWxsb2NhdGVaZXJv UG9vbCAoc2l6ZW9mIChOSUNfREVWSUNFKSArIEJ1bGtEYXRhU2l6ZSArIDQwOTYpOw0KKyAgaWYg KCFOaWNEZXZpY2UpIHsNCisgICAgZ0JTLT5DbG9zZVByb3RvY29sICgNCisgICAgICAgICAgIENv bnRyb2xsZXJIYW5kbGUsDQorICAgICAgICAgICAmZ0VmaURldmljZVBhdGhQcm90b2NvbEd1aWQs DQorICAgICAgICAgICBUaGlzLT5Ecml2ZXJCaW5kaW5nSGFuZGxlLA0KKyAgICAgICAgICAgQ29u dHJvbGxlckhhbmRsZQ0KKyAgICAgICAgICAgKTsNCisgICAgZ0JTLT5DbG9zZVByb3RvY29sICgN CisgICAgICAgICAgIENvbnRyb2xsZXJIYW5kbGUsDQorICAgICAgICAgICAmZ0Vka0lJVXNiRXRo UHJvdG9jb2xHdWlkLA0KKyAgICAgICAgICAgVGhpcy0+RHJpdmVyQmluZGluZ0hhbmRsZSwNCisg ICAgICAgICAgIENvbnRyb2xsZXJIYW5kbGUNCisgICAgICAgICAgICk7DQorICAgIHJldHVybiBF RklfT1VUX09GX1JFU09VUkNFUzsNCisgIH0NCisNCisgIC8vIGZvciBhbGlnbm1lbnQgYWRqdXN0 bWVudA0KKyAgaWYgKGdQeGUgPT0gTlVMTCkgew0KKyAgICBUbXBQeGVQb2ludGVyID0gTlVMTDsN CisgICAgVG1wUHhlUG9pbnRlciA9IEFsbG9jYXRlWmVyb1Bvb2wgKHNpemVvZiAoUFhFX1NXX1VO REkpICsgMTYpOw0KKyAgICBpZiAoIVRtcFB4ZVBvaW50ZXIpIHsNCisgICAgICBpZiAoTmljRGV2 aWNlICE9IE5VTEwpIHsNCisgICAgICAgIEZyZWVQb29sIChOaWNEZXZpY2UpOw0KKyAgICAgIH0N CisNCisgICAgICBnQlMtPkNsb3NlUHJvdG9jb2wgKA0KKyAgICAgICAgICAgICBDb250cm9sbGVy SGFuZGxlLA0KKyAgICAgICAgICAgICAmZ0VmaURldmljZVBhdGhQcm90b2NvbEd1aWQsDQorICAg ICAgICAgICAgIFRoaXMtPkRyaXZlckJpbmRpbmdIYW5kbGUsDQorICAgICAgICAgICAgIENvbnRy b2xsZXJIYW5kbGUNCisgICAgICAgICAgICAgKTsNCisgICAgICBnQlMtPkNsb3NlUHJvdG9jb2wg KA0KKyAgICAgICAgICAgICBDb250cm9sbGVySGFuZGxlLA0KKyAgICAgICAgICAgICAmZ0Vka0lJ VXNiRXRoUHJvdG9jb2xHdWlkLA0KKyAgICAgICAgICAgICBUaGlzLT5Ecml2ZXJCaW5kaW5nSGFu ZGxlLA0KKyAgICAgICAgICAgICBDb250cm9sbGVySGFuZGxlDQorICAgICAgICAgICAgICk7DQor DQorICAgICAgcmV0dXJuIEVGSV9PVVRfT0ZfUkVTT1VSQ0VTOw0KKyAgICB9IGVsc2Ugew0KKyAg ICAgIC8vIGNoZWNrIGZvciBwYXJhZ3JhcGggYWxpZ25tZW50IGhlcmUNCisgICAgICBpZiAoKChV SU5UTilUbXBQeGVQb2ludGVyICYgMHgwRikgIT0gMCkgew0KKyAgICAgICAgZ1B4ZSA9IChQWEVf U1dfVU5ESSAqKShUbXBQeGVQb2ludGVyICsgOCk7DQorICAgICAgfSBlbHNlIHsNCisgICAgICAg IGdQeGUgPSAoUFhFX1NXX1VOREkgKilUbXBQeGVQb2ludGVyOw0KKyAgICAgIH0NCisNCisgICAg ICBpZiAoIWdQeGUpIHsNCisgICAgICAgIGlmIChOaWNEZXZpY2UgIT0gTlVMTCkgew0KKyAgICAg ICAgICBGcmVlUG9vbCAoTmljRGV2aWNlKTsNCisgICAgICAgIH0NCisNCisgICAgICAgIGdCUy0+ Q2xvc2VQcm90b2NvbCAoDQorICAgICAgICAgICAgICAgQ29udHJvbGxlckhhbmRsZSwNCisgICAg ICAgICAgICAgICAmZ0VmaURldmljZVBhdGhQcm90b2NvbEd1aWQsDQorICAgICAgICAgICAgICAg VGhpcy0+RHJpdmVyQmluZGluZ0hhbmRsZSwNCisgICAgICAgICAgICAgICBDb250cm9sbGVySGFu ZGxlDQorICAgICAgICAgICAgICAgKTsNCisgICAgICAgIGdCUy0+Q2xvc2VQcm90b2NvbCAoDQor ICAgICAgICAgICAgICAgQ29udHJvbGxlckhhbmRsZSwNCisgICAgICAgICAgICAgICAmZ0Vka0lJ VXNiRXRoUHJvdG9jb2xHdWlkLA0KKyAgICAgICAgICAgICAgIFRoaXMtPkRyaXZlckJpbmRpbmdI YW5kbGUsDQorICAgICAgICAgICAgICAgQ29udHJvbGxlckhhbmRsZQ0KKyAgICAgICAgICAgICAg ICk7DQorICAgICAgICByZXR1cm4gRUZJX09VVF9PRl9SRVNPVVJDRVM7DQorICAgICAgfQ0KKw0K KyAgICAgIFB4ZVN0cnVjdEluaXQgKGdQeGUpOw0KKyAgICB9DQorICB9DQorDQorICBOaWNEZXZp Y2UtPk5paVByb3RvY29sLklkICAgID0gKFVJTlQ2NCkoVUlOVE4pKGdQeGUpOw0KKyAgTmljRGV2 aWNlLT5OaWlQcm90b2NvbC5JZk51bSA9IGdQeGUtPklGY250IHwgZ1B4ZS0+SUZjbnRFeHQgPDwg ODsNCisNCisgIFVwZGF0ZU5pY051bSAoJk5pY0RldmljZS0+TmljSW5mbywgZ1B4ZSk7DQorDQor ICBOaWNEZXZpY2UtPk5pY0luZm8uU2lnbmF0dXJlID0gTklDX0RBVEFfU0lHTkFUVVJFOw0KKw0K KyAgTmljRGV2aWNlLT5OaWNJbmZvLlVzYkV0aCAgICAgICAgID0gVXNiRXRoOw0KKyAgTmljRGV2 aWNlLT5OaWNJbmZvLk1heFNlZ21lbnRTaXplID0gKFVJTlQxNilCdWxrRGF0YVNpemU7DQorICBO aWNEZXZpY2UtPk5pY0luZm8uQ2FibGVEZXRlY3QgICAgPSAwOw0KKyAgTmljRGV2aWNlLT5SZWNl aXZlQnVmZmVyICAgICAgICAgID0gQUxJR05fUE9JTlRFUiAoKFZPSUQgKilOaWNEZXZpY2UsIDQw OTYpOw0KKw0KKyAgQ29weU1lbSAoKENIQVI4ICopJihOaWNEZXZpY2UtPk5pY0luZm8uTWFjQWRk ciksIChDSEFSOCAqKSZNYWNBZGRyZXNzLCBzaXplb2YgKE1hY0FkZHJlc3MpKTsNCisNCisgIE5p Y0RldmljZS0+TmljSW5mby5UeEJ1ZmZlckNvdW50ID0gMDsNCisNCisgIGlmIChOaWNEZXZpY2Ut Pk5paVByb3RvY29sLklmTnVtIDwgTUFYX0xBTl9JTlRFUkZBQ0UpIHsNCisgICAgZ0xhbkRldmlj ZUxpc3RbTmljRGV2aWNlLT5OaWlQcm90b2NvbC5JZk51bV0gPSBOaWNEZXZpY2U7DQorICB9IGVs c2Ugew0KKyAgICBnQlMtPkNsb3NlUHJvdG9jb2wgKA0KKyAgICAgICAgICAgQ29udHJvbGxlckhh bmRsZSwNCisgICAgICAgICAgICZnRWZpRGV2aWNlUGF0aFByb3RvY29sR3VpZCwNCisgICAgICAg ICAgIFRoaXMtPkRyaXZlckJpbmRpbmdIYW5kbGUsDQorICAgICAgICAgICBDb250cm9sbGVySGFu ZGxlDQorICAgICAgICAgICApOw0KKyAgICBnQlMtPkNsb3NlUHJvdG9jb2wgKA0KKyAgICAgICAg ICAgQ29udHJvbGxlckhhbmRsZSwNCisgICAgICAgICAgICZnRWRrSUlVc2JFdGhQcm90b2NvbEd1 aWQsDQorICAgICAgICAgICBUaGlzLT5Ecml2ZXJCaW5kaW5nSGFuZGxlLA0KKyAgICAgICAgICAg Q29udHJvbGxlckhhbmRsZQ0KKyAgICAgICAgICAgKTsNCisNCisgICAgaWYgKFRtcFB4ZVBvaW50 ZXIgIT0gTlVMTCkgew0KKyAgICAgIEZyZWVQb29sIChUbXBQeGVQb2ludGVyKTsNCisgICAgfQ0K Kw0KKyAgICBpZiAoTmljRGV2aWNlICE9IE5VTEwpIHsNCisgICAgICBGcmVlUG9vbCAoTmljRGV2 aWNlKTsNCisgICAgfQ0KKw0KKyAgICByZXR1cm4gRUZJX0RFVklDRV9FUlJPUjsNCisgIH0NCisN CisgIFN0YXR1cyA9IENyZWF0ZU1hY0RldmljZVBhdGggKA0KKyAgICAgICAgICAgICAmTmljRGV2 aWNlLT5EZXZQYXRoLA0KKyAgICAgICAgICAgICBVc2JFdGhQYXRoLA0KKyAgICAgICAgICAgICAm TmljRGV2aWNlLT5OaWNJbmZvDQorICAgICAgICAgICAgICk7DQorDQorICBpZiAoRUZJX0VSUk9S IChTdGF0dXMpKSB7DQorICAgIFVwZGF0ZU5pY051bSAoTlVMTCwgZ1B4ZSk7DQorICAgIGlmIChU bXBQeGVQb2ludGVyICE9IE5VTEwpIHsNCisgICAgICBGcmVlUG9vbCAoVG1wUHhlUG9pbnRlcik7 DQorICAgIH0NCisgIH0NCisNCisgIE5pY0RldmljZS0+U2lnbmF0dXJlICAgICAgICAgICAgICAg ICA9IFVORElfREVWX1NJR05BVFVSRTsNCisgIE5pY0RldmljZS0+TmlpUHJvdG9jb2wuUmV2aXNp b24gICAgICA9IEVGSV9ORVRXT1JLX0lOVEVSRkFDRV9JREVOVElGSUVSX1BST1RPQ09MX1JFVklT SU9OOw0KKyAgTmljRGV2aWNlLT5OaWlQcm90b2NvbC5UeXBlICAgICAgICAgID0gRWZpTmV0d29y a0ludGVyZmFjZVVuZGk7DQorICBOaWNEZXZpY2UtPk5paVByb3RvY29sLk1ham9yVmVyICAgICAg PSBQWEVfUk9NSURfTUFKT1JWRVI7DQorICBOaWNEZXZpY2UtPk5paVByb3RvY29sLk1pbm9yVmVy ICAgICAgPSBQWEVfUk9NSURfTUlOT1JWRVI7DQorICBOaWNEZXZpY2UtPk5paVByb3RvY29sLklt YWdlU2l6ZSAgICAgPSAwOw0KKyAgTmljRGV2aWNlLT5OaWlQcm90b2NvbC5JbWFnZUFkZHIgICAg ID0gMDsNCisgIE5pY0RldmljZS0+TmlpUHJvdG9jb2wuSXB2NlN1cHBvcnRlZCA9IFRSVUU7DQor DQorICBOaWNEZXZpY2UtPk5paVByb3RvY29sLlN0cmluZ0lkWzBdID0gJ1UnOw0KKyAgTmljRGV2 aWNlLT5OaWlQcm90b2NvbC5TdHJpbmdJZFsxXSA9ICdOJzsNCisgIE5pY0RldmljZS0+TmlpUHJv dG9jb2wuU3RyaW5nSWRbMl0gPSAnRCc7DQorICBOaWNEZXZpY2UtPk5paVByb3RvY29sLlN0cmlu Z0lkWzNdID0gJ0knOw0KKyAgTmljRGV2aWNlLT5EZXZpY2VIYW5kbGUgICAgICAgICAgICA9IE5V TEw7DQorDQorICBOaWNEZXZpY2UtPk5pY0luZm8uUmF0ZUxpbWl0aW5nRW5hYmxlICAgICAgPSBn UmF0ZUxpbWl0aW5nRW5hYmxlOw0KKyAgTmljRGV2aWNlLT5OaWNJbmZvLlJhdGVMaW1pdGluZ0Ny ZWRpdENvdW50ID0gMDsNCisgIE5pY0RldmljZS0+TmljSW5mby5SYXRlTGltaXRpbmdDcmVkaXQg ICAgICA9IGdSYXRlTGltaXRpbmdDcmVkaXQ7DQorICBOaWNEZXZpY2UtPk5pY0luZm8uUmF0ZUxp bWl0aW5nUG9sbFRpbWVyICAgPSBnUmF0ZUxpbWl0aW5nUG9sbFRpbWVyOw0KKyAgTmljRGV2aWNl LT5OaWNJbmZvLlJhdGVMaW1pdGVyICAgICAgICAgICAgID0gTlVMTDsNCisNCisgIFplcm9NZW0g KCZOaWNEZXZpY2UtPk5pY0luZm8uUmVxdWVzdCwgc2l6ZW9mIChFRklfVVNCX0RFVklDRV9SRVFV RVNUKSk7DQorDQorICBTdGF0dXMgPSBVc2JFdGgtPlVzYkV0aEludGVycnVwdCAoVXNiRXRoLCBU UlVFLCBORVRXT1JLX0NPTU1PTl9QT0xMSU5HX0lOVEVSVkFMLCAmTmljRGV2aWNlLT5OaWNJbmZv LlJlcXVlc3QpOw0KKyAgQVNTRVJUX0VGSV9FUlJPUiAoU3RhdHVzKTsNCisNCisgIFN0YXR1cyA9 IGdCUy0+SW5zdGFsbE11bHRpcGxlUHJvdG9jb2xJbnRlcmZhY2VzICgNCisgICAgICAgICAgICAg ICAgICAmTmljRGV2aWNlLT5EZXZpY2VIYW5kbGUsDQorICAgICAgICAgICAgICAgICAgJmdFZmlO ZXR3b3JrSW50ZXJmYWNlSWRlbnRpZmllclByb3RvY29sR3VpZF8zMSwNCisgICAgICAgICAgICAg ICAgICAmTmljRGV2aWNlLT5OaWlQcm90b2NvbCwNCisgICAgICAgICAgICAgICAgICAmZ0VmaURl dmljZVBhdGhQcm90b2NvbEd1aWQsDQorICAgICAgICAgICAgICAgICAgTmljRGV2aWNlLT5EZXZQ YXRoLA0KKyAgICAgICAgICAgICAgICAgIE5VTEwNCisgICAgICAgICAgICAgICAgICApOw0KKw0K KyAgaWYgKEVGSV9FUlJPUiAoU3RhdHVzKSkgew0KKyAgICBpZiAoTmljRGV2aWNlLT5OaWlQcm90 b2NvbC5JZk51bSA8IE1BWF9MQU5fSU5URVJGQUNFKSB7DQorICAgICAgZ0xhbkRldmljZUxpc3Rb TmljRGV2aWNlLT5OaWlQcm90b2NvbC5JZk51bV0gPSBOVUxMOw0KKyAgICB9DQorDQorICAgIGdC Uy0+Q2xvc2VQcm90b2NvbCAoDQorICAgICAgICAgICBDb250cm9sbGVySGFuZGxlLA0KKyAgICAg ICAgICAgJmdFZmlEZXZpY2VQYXRoUHJvdG9jb2xHdWlkLA0KKyAgICAgICAgICAgVGhpcy0+RHJp dmVyQmluZGluZ0hhbmRsZSwNCisgICAgICAgICAgIENvbnRyb2xsZXJIYW5kbGUNCisgICAgICAg ICAgICk7DQorICAgIGdCUy0+Q2xvc2VQcm90b2NvbCAoDQorICAgICAgICAgICBDb250cm9sbGVy SGFuZGxlLA0KKyAgICAgICAgICAgJmdFZGtJSVVzYkV0aFByb3RvY29sR3VpZCwNCisgICAgICAg ICAgIFRoaXMtPkRyaXZlckJpbmRpbmdIYW5kbGUsDQorICAgICAgICAgICBDb250cm9sbGVySGFu ZGxlDQorICAgICAgICAgICApOw0KKw0KKyAgICBpZiAoVG1wUHhlUG9pbnRlciAhPSBOVUxMKSB7 DQorICAgICAgRnJlZVBvb2wgKFRtcFB4ZVBvaW50ZXIpOw0KKyAgICB9DQorDQorICAgIGlmIChO aWNEZXZpY2UtPkRldlBhdGggIT0gTlVMTCkgew0KKyAgICAgIEZyZWVQb29sIChOaWNEZXZpY2Ut PkRldlBhdGgpOw0KKyAgICB9DQorDQorICAgIGlmIChOaWNEZXZpY2UgIT0gTlVMTCkgew0KKyAg ICAgIEZyZWVQb29sIChOaWNEZXZpY2UpOw0KKyAgICB9DQorDQorICAgIHJldHVybiBFRklfREVW SUNFX0VSUk9SOw0KKyAgfQ0KKw0KKyAgU3RhdHVzID0gZ0JTLT5PcGVuUHJvdG9jb2wgKA0KKyAg ICAgICAgICAgICAgICAgIENvbnRyb2xsZXJIYW5kbGUsDQorICAgICAgICAgICAgICAgICAgJmdF ZGtJSVVzYkV0aFByb3RvY29sR3VpZCwNCisgICAgICAgICAgICAgICAgICAoVk9JRCAqKikmVXNi RXRoLA0KKyAgICAgICAgICAgICAgICAgIFRoaXMtPkRyaXZlckJpbmRpbmdIYW5kbGUsDQorICAg ICAgICAgICAgICAgICAgTmljRGV2aWNlLT5EZXZpY2VIYW5kbGUsDQorICAgICAgICAgICAgICAg ICAgRUZJX09QRU5fUFJPVE9DT0xfQllfQ0hJTERfQ09OVFJPTExFUg0KKyAgICAgICAgICAgICAg ICAgICk7DQorDQorICByZXR1cm4gU3RhdHVzOw0KK30NCisNCisvKioNCisgIE5ldHdvcmsgQ29t bW9uIERyaXZlciBCaW5kaW5nIFN0b3AuDQorDQorICBAcGFyYW1baW5dICBUaGlzICAgICAgICAg ICAgICAgICAgUHJvdG9jb2wgaW5zdGFuY2UgcG9pbnRlci4NCisgIEBwYXJhbVtpbl0gIENvbnRy b2xsZXJIYW5kbGUgICAgICBIYW5kbGUgb2YgZGV2aWNlIHRvIHN0b3AgZHJpdmVyIG9uDQorICBA cGFyYW1baW5dICBOdW1iZXJPZkNoaWxkcmVuICAgICAgTnVtYmVyIG9mIEhhbmRsZXMgaW4gQ2hp bGRIYW5kbGVCdWZmZXIuIElmIG51bWJlciBvZg0KKyAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIGNoaWxkcmVuIGlzIHplcm8gc3RvcCB0aGUgZW50aXJlIGJ1cyBkcml2ZXIuDQor ICBAcGFyYW1baW5dICBDaGlsZEhhbmRsZUJ1ZmZlciAgICAgTGlzdCBvZiBDaGlsZCBIYW5kbGVz IHRvIFN0b3AuDQorDQorICBAcmV0dmFsIEVGSV9TVUNDRVNTICAgICAgICAgICAgICAgVGhpcyBk cml2ZXIgaXMgcmVtb3ZlZCBDb250cm9sbGVySGFuZGxlDQorICBAcmV0dmFsIG90aGVyICAgICAg ICAgICAgICAgICAgICAgVGhpcyBkcml2ZXIgd2FzIG5vdCByZW1vdmVkIGZyb20gdGhpcyBkZXZp Y2UNCisNCisqKi8NCitFRklfU1RBVFVTDQorRUZJQVBJDQorTmV0d29ya0NvbW1vbkRyaXZlclN0 b3AgKA0KKyAgSU4gIEVGSV9EUklWRVJfQklORElOR19QUk9UT0NPTCAgKlRoaXMsDQorICBJTiAg RUZJX0hBTkRMRSAgICAgICAgICAgICAgICAgICBDb250cm9sbGVySGFuZGxlLA0KKyAgSU4gIFVJ TlROICAgICAgICAgICAgICAgICAgICAgICAgTnVtYmVyT2ZDaGlsZHJlbiwNCisgIElOICBFRklf SEFORExFICAgICAgICAgICAgICAgICAgICpDaGlsZEhhbmRsZUJ1ZmZlcg0KKyAgKQ0KK3sNCisg IEVGSV9TVEFUVVMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTdGF0dXM7DQorICBC T09MRUFOICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQWxsQ2hpbGRyZW5TdG9w cGVkOw0KKyAgVUlOVE4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEluZGV4 Ow0KKyAgRURLSUlfVVNCX0VUSEVSTkVUX1BST1RPQ09MICAgICAgICAgICAgICAgICpVc2JFdGg7 DQorICBOSUNfREVWSUNFICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKk5pY0Rldmlj ZTsNCisgIEVGSV9ORVRXT1JLX0lOVEVSRkFDRV9JREVOVElGSUVSX1BST1RPQ09MICAqTmlpUHJv dG9jb2w7DQorDQorICBpZiAoTnVtYmVyT2ZDaGlsZHJlbiA9PSAwKSB7DQorICAgIFN0YXR1cyA9 IGdCUy0+T3BlblByb3RvY29sICgNCisgICAgICAgICAgICAgICAgICAgIENvbnRyb2xsZXJIYW5k bGUsDQorICAgICAgICAgICAgICAgICAgICAmZ0VmaU5ldHdvcmtJbnRlcmZhY2VJZGVudGlmaWVy UHJvdG9jb2xHdWlkXzMxLA0KKyAgICAgICAgICAgICAgICAgICAgKFZPSUQgKiopJk5paVByb3Rv Y29sLA0KKyAgICAgICAgICAgICAgICAgICAgVGhpcy0+RHJpdmVyQmluZGluZ0hhbmRsZSwNCisg ICAgICAgICAgICAgICAgICAgIENvbnRyb2xsZXJIYW5kbGUsDQorICAgICAgICAgICAgICAgICAg ICBFRklfT1BFTl9QUk9UT0NPTF9HRVRfUFJPVE9DT0wNCisgICAgICAgICAgICAgICAgICAgICk7 DQorDQorICAgIGlmIChFRklfRVJST1IgKFN0YXR1cykpIHsNCisgICAgICBnQlMtPkNsb3NlUHJv dG9jb2wgKA0KKyAgICAgICAgICAgICBDb250cm9sbGVySGFuZGxlLA0KKyAgICAgICAgICAgICAm Z0VmaURldmljZVBhdGhQcm90b2NvbEd1aWQsDQorICAgICAgICAgICAgIFRoaXMtPkRyaXZlckJp bmRpbmdIYW5kbGUsDQorICAgICAgICAgICAgIENvbnRyb2xsZXJIYW5kbGUNCisgICAgICAgICAg ICAgKTsNCisgICAgICBnQlMtPkNsb3NlUHJvdG9jb2wgKA0KKyAgICAgICAgICAgICBDb250cm9s bGVySGFuZGxlLA0KKyAgICAgICAgICAgICAmZ0Vka0lJVXNiRXRoUHJvdG9jb2xHdWlkLA0KKyAg ICAgICAgICAgICBUaGlzLT5Ecml2ZXJCaW5kaW5nSGFuZGxlLA0KKyAgICAgICAgICAgICBDb250 cm9sbGVySGFuZGxlDQorICAgICAgICAgICAgICk7DQorICAgICAgcmV0dXJuIEVGSV9TVUNDRVNT Ow0KKyAgICB9DQorDQorICAgIE5pY0RldmljZSA9IFVORElfREVWX0ZST01fVEhJUyAoTmlpUHJv dG9jb2wpOw0KKyAgICBTdGF0dXMgICAgPSBnQlMtPlVuaW5zdGFsbE11bHRpcGxlUHJvdG9jb2xJ bnRlcmZhY2VzICgNCisgICAgICAgICAgICAgICAgICAgICAgIENvbnRyb2xsZXJIYW5kbGUsDQor ICAgICAgICAgICAgICAgICAgICAgICAmZ0VmaU5ldHdvcmtJbnRlcmZhY2VJZGVudGlmaWVyUHJv dG9jb2xHdWlkXzMxLA0KKyAgICAgICAgICAgICAgICAgICAgICAgJk5pY0RldmljZS0+TmlpUHJv dG9jb2wsDQorICAgICAgICAgICAgICAgICAgICAgICAmZ0VmaURldmljZVBhdGhQcm90b2NvbEd1 aWQsDQorICAgICAgICAgICAgICAgICAgICAgICBOaWNEZXZpY2UtPkRldlBhdGgsDQorICAgICAg ICAgICAgICAgICAgICAgICBOVUxMDQorICAgICAgICAgICAgICAgICAgICAgICApOw0KKyAgICBp ZiAoRUZJX0VSUk9SIChTdGF0dXMpKSB7DQorICAgICAgcmV0dXJuIFN0YXR1czsNCisgICAgfQ0K Kw0KKyAgICBGcmVlUG9vbCAoTmljRGV2aWNlLT5EZXZQYXRoKTsNCisgICAgRnJlZVBvb2wgKE5p Y0RldmljZSk7DQorDQorICAgIGdCUy0+Q2xvc2VQcm90b2NvbCAoDQorICAgICAgICAgICBDb250 cm9sbGVySGFuZGxlLA0KKyAgICAgICAgICAgJmdFZmlEZXZpY2VQYXRoUHJvdG9jb2xHdWlkLA0K KyAgICAgICAgICAgVGhpcy0+RHJpdmVyQmluZGluZ0hhbmRsZSwNCisgICAgICAgICAgIENvbnRy b2xsZXJIYW5kbGUNCisgICAgICAgICAgICk7DQorICAgIGdCUy0+Q2xvc2VQcm90b2NvbCAoDQor ICAgICAgICAgICBDb250cm9sbGVySGFuZGxlLA0KKyAgICAgICAgICAgJmdFZGtJSVVzYkV0aFBy b3RvY29sR3VpZCwNCisgICAgICAgICAgIFRoaXMtPkRyaXZlckJpbmRpbmdIYW5kbGUsDQorICAg ICAgICAgICBDb250cm9sbGVySGFuZGxlDQorICAgICAgICAgICApOw0KKyAgICByZXR1cm4gRUZJ X1NVQ0NFU1M7DQorICB9DQorDQorICBBbGxDaGlsZHJlblN0b3BwZWQgPSBUUlVFOw0KKw0KKyAg Zm9yIChJbmRleCA9IDA7IEluZGV4IDwgTnVtYmVyT2ZDaGlsZHJlbjsgSW5kZXgrKykgew0KKyAg ICBTdGF0dXMgPSBnQlMtPk9wZW5Qcm90b2NvbCAoDQorICAgICAgICAgICAgICAgICAgICBDaGls ZEhhbmRsZUJ1ZmZlcltJbmRleF0sDQorICAgICAgICAgICAgICAgICAgICAmZ0VmaU5ldHdvcmtJ bnRlcmZhY2VJZGVudGlmaWVyUHJvdG9jb2xHdWlkXzMxLA0KKyAgICAgICAgICAgICAgICAgICAg KFZPSUQgKiopJk5paVByb3RvY29sLA0KKyAgICAgICAgICAgICAgICAgICAgVGhpcy0+RHJpdmVy QmluZGluZ0hhbmRsZSwNCisgICAgICAgICAgICAgICAgICAgIENvbnRyb2xsZXJIYW5kbGUsDQor ICAgICAgICAgICAgICAgICAgICBFRklfT1BFTl9QUk9UT0NPTF9HRVRfUFJPVE9DT0wNCisgICAg ICAgICAgICAgICAgICAgICk7DQorICAgIGlmIChFRklfRVJST1IgKFN0YXR1cykpIHsNCisgICAg ICBBbGxDaGlsZHJlblN0b3BwZWQgPSBGQUxTRTsNCisgICAgICBjb250aW51ZTsNCisgICAgfQ0K Kw0KKyAgICBOaWNEZXZpY2UgPSBVTkRJX0RFVl9GUk9NX1RISVMgKE5paVByb3RvY29sKTsNCisN CisgICAgZ0JTLT5DbG9zZVByb3RvY29sICgNCisgICAgICAgICAgIENvbnRyb2xsZXJIYW5kbGUs DQorICAgICAgICAgICAmZ0Vka0lJVXNiRXRoUHJvdG9jb2xHdWlkLA0KKyAgICAgICAgICAgVGhp cy0+RHJpdmVyQmluZGluZ0hhbmRsZSwNCisgICAgICAgICAgIENoaWxkSGFuZGxlQnVmZmVyW0lu ZGV4XQ0KKyAgICAgICAgICAgKTsNCisNCisgICAgU3RhdHVzID0gZ0JTLT5Vbmluc3RhbGxNdWx0 aXBsZVByb3RvY29sSW50ZXJmYWNlcyAoDQorICAgICAgICAgICAgICAgICAgICBDaGlsZEhhbmRs ZUJ1ZmZlcltJbmRleF0sDQorICAgICAgICAgICAgICAgICAgICAmZ0VmaU5ldHdvcmtJbnRlcmZh Y2VJZGVudGlmaWVyUHJvdG9jb2xHdWlkXzMxLA0KKyAgICAgICAgICAgICAgICAgICAgJk5pY0Rl dmljZS0+TmlpUHJvdG9jb2wsDQorICAgICAgICAgICAgICAgICAgICAmZ0VmaURldmljZVBhdGhQ cm90b2NvbEd1aWQsDQorICAgICAgICAgICAgICAgICAgICBOaWNEZXZpY2UtPkRldlBhdGgsDQor ICAgICAgICAgICAgICAgICAgICBOVUxMDQorICAgICAgICAgICAgICAgICAgICApOw0KKyAgICBp ZiAoRUZJX0VSUk9SIChTdGF0dXMpKSB7DQorICAgICAgU3RhdHVzID0gZ0JTLT5PcGVuUHJvdG9j b2wgKA0KKyAgICAgICAgICAgICAgICAgICAgICBDb250cm9sbGVySGFuZGxlLA0KKyAgICAgICAg ICAgICAgICAgICAgICAmZ0Vka0lJVXNiRXRoUHJvdG9jb2xHdWlkLA0KKyAgICAgICAgICAgICAg ICAgICAgICAoVk9JRCAqKikmVXNiRXRoLA0KKyAgICAgICAgICAgICAgICAgICAgICBUaGlzLT5E cml2ZXJCaW5kaW5nSGFuZGxlLA0KKyAgICAgICAgICAgICAgICAgICAgICBDaGlsZEhhbmRsZUJ1 ZmZlcltJbmRleF0sDQorICAgICAgICAgICAgICAgICAgICAgIEVGSV9PUEVOX1BST1RPQ09MX0JZ X0NISUxEX0NPTlRST0xMRVINCisgICAgICAgICAgICAgICAgICAgICAgKTsNCisgICAgfSBlbHNl IHsNCisgICAgICBGcmVlUG9vbCAoTmljRGV2aWNlLT5EZXZQYXRoKTsNCisgICAgICBGcmVlUG9v bCAoTmljRGV2aWNlKTsNCisgICAgfQ0KKyAgfQ0KKw0KKyAgaWYgKCFBbGxDaGlsZHJlblN0b3Bw ZWQpIHsNCisgICAgcmV0dXJuIEVGSV9ERVZJQ0VfRVJST1I7DQorICB9DQorDQorICByZXR1cm4g U3RhdHVzOw0KK30NCisNCisvKioNCisgIEVudHJ5cG9pbnQgb2YgTmV0d29yayBDb21tb24gRHJp dmVyLg0KKw0KKyAgVGhpcyBmdW5jdGlvbiBpcyB0aGUgZW50cnlwb2ludCBvZiBOZXR3b3JrIENv bW1vbiBEcml2ZXIuIEl0IGluc3RhbGxzIERyaXZlciBCaW5kaW5nDQorICBQcm90b2NvbHMgdG9n ZXRoZXIgd2l0aCBDb21wb25lbnQgTmFtZSBQcm90b2NvbHMuDQorDQorICBAcGFyYW1baW5dICBJ bWFnZUhhbmRsZSAgICAgICBUaGUgZmlybXdhcmUgYWxsb2NhdGVkIGhhbmRsZSBmb3IgdGhlIEVG SSBpbWFnZS4NCisgIEBwYXJhbVtpbl0gIFN5c3RlbVRhYmxlICAgICAgIEEgcG9pbnRlciB0byB0 aGUgRUZJIFN5c3RlbSBUYWJsZS4NCisNCisgIEByZXR2YWwgRUZJX1NVQ0NFU1MgICAgICAgICAg IFRoZSBlbnRyeSBwb2ludCBpcyBleGVjdXRlZCBzdWNjZXNzZnVsbHkuDQorDQorKiovDQorRUZJ X1NUQVRVUw0KK0VGSUFQSQ0KK05ldHdvcmtDb21tb25FbnRyeSAoDQorICBJTiBFRklfSEFORExF ICAgICAgICBJbWFnZUhhbmRsZSwNCisgIElOIEVGSV9TWVNURU1fVEFCTEUgICpTeXN0ZW1UYWJs ZQ0KKyAgKQ0KK3sNCisgIEVGSV9TVEFUVVMgIFN0YXR1czsNCisNCisgIGdOZXR3b3JrQ29tbW9u RHJpdmVyQmluZGluZy5Ecml2ZXJCaW5kaW5nSGFuZGxlID0gSW1hZ2VIYW5kbGU7DQorICBnTmV0 d29ya0NvbW1vbkRyaXZlckJpbmRpbmcuSW1hZ2VIYW5kbGUgICAgICAgICA9IEltYWdlSGFuZGxl Ow0KKyAgZ1JhdGVMaW1pdGluZ0VuYWJsZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPSBQ Y2RHZXRCb29sIChQY2RFbmFibGVVc2JOZXR3b3JrUmF0ZUxpbWl0aW5nKTsNCisgIGdSYXRlTGlt aXRpbmdDcmVkaXQgICAgICAgICAgICAgICAgICAgICAgICAgICAgID0gUGNkR2V0MzIgKFBjZFVz Yk5ldHdvcmtSYXRlTGltaXRpbmdDcmVkaXQpOw0KKyAgZ1JhdGVMaW1pdGluZ1BvbGxUaW1lciAg ICAgICAgICAgICAgICAgICAgICAgICAgPSBQY2RHZXQzMiAoUGNkVXNiTmV0d29ya1JhdGVMaW1p dGluZ0ZhY3Rvcik7DQorDQorICBTdGF0dXMgPSBnQlMtPkluc3RhbGxNdWx0aXBsZVByb3RvY29s SW50ZXJmYWNlcyAoDQorICAgICAgICAgICAgICAgICAgJmdOZXR3b3JrQ29tbW9uRHJpdmVyQmlu ZGluZy5Ecml2ZXJCaW5kaW5nSGFuZGxlLA0KKyAgICAgICAgICAgICAgICAgICZnRWZpRHJpdmVy QmluZGluZ1Byb3RvY29sR3VpZCwNCisgICAgICAgICAgICAgICAgICAmZ05ldHdvcmtDb21tb25E cml2ZXJCaW5kaW5nLA0KKyAgICAgICAgICAgICAgICAgICZnRWZpQ29tcG9uZW50TmFtZTJQcm90 b2NvbEd1aWQsDQorICAgICAgICAgICAgICAgICAgJmdOZXR3b3JrQ29tbW9uQ29tcG9uZW50TmFt ZTIsDQorICAgICAgICAgICAgICAgICAgTlVMTA0KKyAgICAgICAgICAgICAgICAgICk7DQorICBy ZXR1cm4gU3RhdHVzOw0KK30NCmRpZmYgLS1naXQgYS9NZGVNb2R1bGVQa2cvQnVzL1VzYi9Vc2JO ZXR3b3JrL05ldHdvcmtDb21tb24vRHJpdmVyQmluZGluZy5oIGIvTWRlTW9kdWxlUGtnL0J1cy9V c2IvVXNiTmV0d29yay9OZXR3b3JrQ29tbW9uL0RyaXZlckJpbmRpbmcuaA0KbmV3IGZpbGUgbW9k ZSAxMDA2NDQNCmluZGV4IDAwMDAwMDAwMDAuLmE4MDU4MzRhNzgNCi0tLSAvZGV2L251bGwNCisr KyBiL01kZU1vZHVsZVBrZy9CdXMvVXNiL1VzYk5ldHdvcmsvTmV0d29ya0NvbW1vbi9Ecml2ZXJC aW5kaW5nLmgNCkBAIC0wLDAgKzEsMjY2IEBADQorLyoqIEBmaWxlDQorICBIZWFkZXIgZmlsZSBm b3IgZm9yIFVTQiBuZXR3b3JrIGNvbW1vbiBkcml2ZXINCisNCisgIENvcHlyaWdodCAoYykgMjAy MywgQW1lcmljYW4gTWVnYXRyZW5kcyBJbnRlcm5hdGlvbmFsIExMQy4gQWxsIHJpZ2h0cyByZXNl cnZlZC48QlI+DQorICBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQlNELTItQ2xhdXNlLVBhdGVu dA0KKyoqLw0KKw0KKyNpZm5kZWYgX0RSSVZFUl9CSU5ESU5HX0hfDQorI2RlZmluZSBfRFJJVkVS X0JJTkRJTkdfSF8NCisNCisjaW5jbHVkZSA8TGlicmFyeS9VZWZpRHJpdmVyRW50cnlQb2ludC5o Pg0KKyNpbmNsdWRlIDxMaWJyYXJ5L1VlZmlCb290U2VydmljZXNUYWJsZUxpYi5oPg0KKyNpbmNs dWRlIDxMaWJyYXJ5L1VlZmlMaWIuaD4NCisjaW5jbHVkZSA8TGlicmFyeS9EZXZpY2VQYXRoTGli Lmg+DQorI2luY2x1ZGUgPExpYnJhcnkvRGVidWdMaWIuaD4NCisjaW5jbHVkZSA8TGlicmFyeS9N ZW1vcnlBbGxvY2F0aW9uTGliLmg+DQorI2luY2x1ZGUgPExpYnJhcnkvUGNkTGliLmg+DQorI2lu Y2x1ZGUgPExpYnJhcnkvQmFzZU1lbW9yeUxpYi5oPg0KKyNpbmNsdWRlIDxMaWJyYXJ5L1VlZmlV c2JMaWIuaD4NCisjaW5jbHVkZSA8UHJvdG9jb2wvVXNiSW8uaD4NCisjaW5jbHVkZSA8UHJvdG9j b2wvTmV0d29ya0ludGVyZmFjZUlkZW50aWZpZXIuaD4NCisjaW5jbHVkZSA8UHJvdG9jb2wvVXNi RXRoZXJuZXRQcm90b2NvbC5oPg0KKw0KKyNkZWZpbmUgTkVUV09SS19DT01NT05fRFJJVkVSX1ZF UlNJT04gICAgMQ0KKyNkZWZpbmUgTkVUV09SS19DT01NT05fUE9MTElOR19JTlRFUlZBTCAgMHgx MA0KKyNkZWZpbmUgUlhfQlVGRkVSX0NPVU5UICAgICAgICAgICAgICAgICAgMzINCisjZGVmaW5l IFRYX0JVRkZFUl9DT1VOVCAgICAgICAgICAgICAgICAgIDMyDQorI2RlZmluZSBNRU1PUllfUkVR VUlSRSAgICAgICAgICAgICAgICAgICAwDQorDQorI2RlZmluZSBVTkRJX0RFVl9TSUdOQVRVUkUg IFNJR05BVFVSRV8zMigndScsJ24nLCdkJywnaScpDQorI2RlZmluZSBVTkRJX0RFVl9GUk9NX1RI SVMoYSkgIENSKGEsIE5JQ19ERVZJQ0UsIE5paVByb3RvY29sLCBVTkRJX0RFVl9TSUdOQVRVUkUp DQorI2RlZmluZSBVTkRJX0RFVl9GUk9NX05JQyhhKSAgIENSKGEsIE5JQ19ERVZJQ0UsIE5pY0lu Zm8sIFVORElfREVWX1NJR05BVFVSRSkNCisNCisjcHJhZ21hIHBhY2soMSkNCit0eXBlZGVmIHN0 cnVjdCB7DQorICBVSU5UOCAgICAgRGVzdEFkZHJbUFhFX0hXQUREUl9MRU5fRVRIRVJdOw0KKyAg VUlOVDggICAgIFNyY0FkZHJbUFhFX0hXQUREUl9MRU5fRVRIRVJdOw0KKyAgVUlOVDE2ICAgIFBy b3RvY29sOw0KK30gRXRoZXJuZXRIZWFkZXI7DQorI3ByYWdtYSBwYWNrKCkNCisNCit0eXBlZGVm IHN0cnVjdCB7DQorICBVSU5UTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBTaWduYXR1cmU7DQorICBFRklfTkVUV09SS19JTlRFUkZBQ0VfSURFTlRJRklFUl9QUk9UT0NP TCAgICBOaWlQcm90b2NvbDsNCisgIEVGSV9IQU5ETEUgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIERldmljZUhhbmRsZTsNCisgIEVGSV9ERVZJQ0VfUEFUSF9QUk9UT0NPTCAgICAg ICAgICAgICAgICAgICAgICpCYXNlRGV2UGF0aDsNCisgIEVGSV9ERVZJQ0VfUEFUSF9QUk9UT0NP TCAgICAgICAgICAgICAgICAgICAgICpEZXZQYXRoOw0KKyAgTklDX0RBVEEgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgTmljSW5mbzsNCisgIFZPSUQgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICpSZWNlaXZlQnVmZmVyOw0KK30gTklDX0RFVklDRTsN CisNCit0eXBlZGVmIFZPSUQgKCpBUElfRlVOQykoDQorICBQWEVfQ0RCICosDQorICBOSUNfREFU QSAqDQorICApOw0KKw0KK2V4dGVybiBQWEVfU1dfVU5ESSAgICAgICAgICAgICAgICAgICAqZ1B4 ZTsNCitleHRlcm4gTklDX0RFVklDRSAgICAgICAgICAgICAgICAgICAgKmdMYW5EZXZpY2VMaXN0 W01BWF9MQU5fSU5URVJGQUNFXTsNCitleHRlcm4gRUZJX0NPTVBPTkVOVF9OQU1FMl9QUk9UT0NP TCAgZ05ldHdvcmtDb21tb25Db21wb25lbnROYW1lMjsNCisNCitFRklfU1RBVFVTDQorRUZJQVBJ DQorTmV0d29ya0NvbW1vblN1cHBvcnRlZCAoDQorICBJTiBFRklfRFJJVkVSX0JJTkRJTkdfUFJP VE9DT0wgICpUaGlzLA0KKyAgSU4gRUZJX0hBTkRMRSAgICAgICAgICAgICAgICAgICBDb250cm9s bGVySGFuZGxlLA0KKyAgSU4gRUZJX0RFVklDRV9QQVRIX1BST1RPQ09MICAgICAqUmVtYWluaW5n RGV2aWNlUGF0aA0KKyAgKTsNCisNCitFRklfU1RBVFVTDQorRUZJQVBJDQorTmV0d29ya0NvbW1v bkRyaXZlclN0YXJ0ICgNCisgIElOIEVGSV9EUklWRVJfQklORElOR19QUk9UT0NPTCAgKlRoaXMs DQorICBJTiBFRklfSEFORExFICAgICAgICAgICAgICAgICAgIENvbnRyb2xsZXJIYW5kbGUsDQor ICBJTiBFRklfREVWSUNFX1BBVEhfUFJPVE9DT0wgICAgICpSZW1haW5pbmdEZXZpY2VQYXRoDQor ICApOw0KKw0KK0VGSV9TVEFUVVMNCitFRklBUEkNCitOZXR3b3JrQ29tbW9uRHJpdmVyU3RvcCAo DQorICBJTiAgRUZJX0RSSVZFUl9CSU5ESU5HX1BST1RPQ09MICAqVGhpcywNCisgIElOICBFRklf SEFORExFICAgICAgICAgICAgICAgICAgIENvbnRyb2xsZXJIYW5kbGUsDQorICBJTiAgVUlOVE4g ICAgICAgICAgICAgICAgICAgICAgICBOdW1iZXJPZkNoaWxkcmVuLA0KKyAgSU4gIEVGSV9IQU5E TEUgICAgICAgICAgICAgICAgICAgKkNoaWxkSGFuZGxlQnVmZmVyDQorICApOw0KKw0KK1ZPSUQN CitQeGVTdHJ1Y3RJbml0ICgNCisgIE9VVCBQWEVfU1dfVU5ESSAgKlB4ZVN3DQorICApOw0KKw0K K1ZPSUQNCitVcGRhdGVOaWNOdW0gKA0KKyAgSU4gICAgICBOSUNfREFUQSAgICAgKk5pYywNCisg IElOIE9VVCAgUFhFX1NXX1VOREkgICpQeGVTdw0KKyAgKTsNCisNCitFRklfU1RBVFVTDQorRUZJ QVBJDQorVW5kaUFwaUVudHJ5ICgNCisgIElOICBVSU5UNjQgIENkYg0KKyAgKTsNCisNCitVSU5U Tg0KK01hcEl0ICgNCisgIElOIE5JQ19EQVRBICAqTmljLA0KKyAgSU4gVUlOVDY0ICAgIE1lbUFk ZHIsDQorICBJTiBVSU5UMzIgICAgU2l6ZSwNCisgIElOIFVJTlQzMiAgICBEaXJlY3Rpb24sDQor ICBPVVQgVUlOVDY0ICAgTWFwcGVkQWRkcg0KKyAgKTsNCisNCitWT0lEDQorVW5NYXBJdCAoDQor ICBJTiBOSUNfREFUQSAgKk5pYywNCisgIElOIFVJTlQ2NCAgICBNZW1BZGRyLA0KKyAgSU4gVUlO VDMyICAgIFNpemUsDQorICBJTiBVSU5UMzIgICAgRGlyZWN0aW9uLA0KKyAgSU4gVUlOVDY0ICAg IE1hcHBlZEFkZHINCisgICk7DQorDQorVk9JRA0KK1VuZGlHZXRTdGF0ZSAoDQorICBJTiAgUFhF X0NEQiAgICpDZGIsDQorICBJTiAgTklDX0RBVEEgICpOaWMNCisgICk7DQorDQorVk9JRA0KK1Vu ZGlTdGFydCAoDQorICBJTiAgUFhFX0NEQiAgICpDZGIsDQorICBJTiAgTklDX0RBVEEgICpOaWMN CisgICk7DQorDQorVk9JRA0KK1VuZGlTdG9wICgNCisgIElOICBQWEVfQ0RCICAgKkNkYiwNCisg IElOICBOSUNfREFUQSAgKk5pYw0KKyAgKTsNCisNCitWT0lEDQorVW5kaUdldEluaXRJbmZvICgN CisgIElOICBQWEVfQ0RCICAgKkNkYiwNCisgIElOICBOSUNfREFUQSAgKk5pYw0KKyAgKTsNCisN CitWT0lEDQorVW5kaUdldENvbmZpZ0luZm8gKA0KKyAgSU4gIFBYRV9DREIgICAqQ2RiLA0KKyAg SU4gIE5JQ19EQVRBICAqTmljDQorICApOw0KKw0KK1ZPSUQNCitVbmRpSW5pdGlhbGl6ZSAoDQor ICBJTiAgICAgIFBYRV9DREIgICAqQ2RiLA0KKyAgSU4gT1VUICBOSUNfREFUQSAgKk5pYw0KKyAg KTsNCisNCitWT0lEDQorVW5kaVJlc2V0ICgNCisgIElOICBQWEVfQ0RCICAgKkNkYiwNCisgIElO ICBOSUNfREFUQSAgKk5pYw0KKyAgKTsNCisNCitWT0lEDQorVW5kaVNodXRkb3duICgNCisgIElO ICAgICAgUFhFX0NEQiAgICpDZGIsDQorICBJTiBPVVQgIE5JQ19EQVRBICAqTmljDQorICApOw0K Kw0KK1ZPSUQNCitVbmRpSW50ZXJydXB0RW5hYmxlICgNCisgIElOICBQWEVfQ0RCICAgKkNkYiwN CisgIElOICBOSUNfREFUQSAgKk5pYw0KKyAgKTsNCisNCitWT0lEDQorVW5kaVJlY2VpdmVGaWx0 ZXIgKA0KKyAgSU4gIFBYRV9DREIgICAqQ2RiLA0KKyAgSU4gIE5JQ19EQVRBICAqTmljDQorICAp Ow0KKw0KK1ZPSUQNCitVbmRpU3RhdGlvbkFkZHJlc3MgKA0KKyAgSU4gIFBYRV9DREIgICAqQ2Ri LA0KKyAgSU4gIE5JQ19EQVRBICAqTmljDQorICApOw0KKw0KK1ZPSUQNCitVbmRpU3RhdGlzdGlj cyAoDQorICBJTiAgUFhFX0NEQiAgICpDZGIsDQorICBJTiAgTklDX0RBVEEgICpOaWMNCisgICk7 DQorDQorVk9JRA0KK1VuZGlNY2FzdElwMk1hYyAoDQorICBJTiBPVVQgIFBYRV9DREIgICAqQ2Ri LA0KKyAgSU4gICAgICBOSUNfREFUQSAgKk5pYw0KKyAgKTsNCisNCitWT0lEDQorVW5kaU52RGF0 YSAoDQorICBJTiAgUFhFX0NEQiAgICpDZGIsDQorICBJTiAgTklDX0RBVEEgICpOaWMNCisgICk7 DQorDQorVk9JRA0KK1VuZGlHZXRTdGF0dXMgKA0KKyAgSU4gIFBYRV9DREIgICAqQ2RiLA0KKyAg SU4gIE5JQ19EQVRBICAqTmljDQorICApOw0KKw0KK1ZPSUQNCitVbmRpRmlsbEhlYWRlciAoDQor ICBJTiAgUFhFX0NEQiAgICpDZGIsDQorICBJTiAgTklDX0RBVEEgICpOaWMNCisgICk7DQorDQor Vk9JRA0KK1VuZGlUcmFuc21pdCAoDQorICBJTiAgUFhFX0NEQiAgICpDZGIsDQorICBJTiAgTklD X0RBVEEgICpOaWMNCisgICk7DQorDQorVk9JRA0KK1VuZGlSZWNlaXZlICgNCisgIElOICBQWEVf Q0RCICAgKkNkYiwNCisgIElOICBOSUNfREFUQSAgKk5pYw0KKyAgKTsNCisNCitVSU5UMTYNCitJ bml0aWFsaXplICgNCisgIElOICAgICAgUFhFX0NEQiAgICpDZGIsDQorICBJTiBPVVQgIE5JQ19E QVRBICAqTmljDQorICApOw0KKw0KK1VJTlQxNg0KK1RyYW5zbWl0ICgNCisgIElOICAgICAgUFhF X0NEQiAgICpDZGIsDQorICBJTiBPVVQgIE5JQ19EQVRBICAqTmljLA0KKyAgSU4gICAgICBVSU5U NjQgICAgQ3BiQWRkciwNCisgIElOICAgICAgVUlOVDE2ICAgIE9wRmxhZ3MNCisgICk7DQorDQor VUlOVDE2DQorUmVjZWl2ZSAoDQorICBJTiBQWEVfQ0RCICAgICAgICpDZGIsDQorICBJTiBPVVQg TklDX0RBVEEgICpOaWMsDQorICBJTiBVSU5UNjQgICAgICAgIENwYkFkZHIsDQorICBJTiBPVVQg VUlOVDY0ICAgIERiQWRkcg0KKyAgKTsNCisNCitVSU5UMTYNCitTZXRGaWx0ZXIgKA0KKyAgSU4g IE5JQ19EQVRBICAqTmljLA0KKyAgSU4gIFVJTlQxNiAgICBTZXRGaWx0ZXIsDQorICBJTiAgVUlO VDY0ICAgIENwYkFkZHIsDQorICBJTiAgVUlOVDMyICAgIENwYlNpemUNCisgICk7DQorDQorVUlO VDE2DQorU3RhdGlzdGljcyAoDQorICBJTiBOSUNfREFUQSAgKk5pYywNCisgIElOIFVJTlQ2NCAg ICBEYkFkZHIsDQorICBJTiBVSU5UMTYgICAgRGJTaXplDQorICApOw0KKw0KKyNlbmRpZg0KZGlm ZiAtLWdpdCBhL01kZU1vZHVsZVBrZy9CdXMvVXNiL1VzYk5ldHdvcmsvTmV0d29ya0NvbW1vbi9O ZXR3b3JrQ29tbW9uLmluZiBiL01kZU1vZHVsZVBrZy9CdXMvVXNiL1VzYk5ldHdvcmsvTmV0d29y a0NvbW1vbi9OZXR3b3JrQ29tbW9uLmluZg0KbmV3IGZpbGUgbW9kZSAxMDA2NDQNCmluZGV4IDAw MDAwMDAwMDAuLmY5Y2EzMWZlODANCi0tLSAvZGV2L251bGwNCisrKyBiL01kZU1vZHVsZVBrZy9C dXMvVXNiL1VzYk5ldHdvcmsvTmV0d29ya0NvbW1vbi9OZXR3b3JrQ29tbW9uLmluZg0KQEAgLTAs MCArMSw0OCBAQA0KKyMjIEBmaWxlDQorIyAgIFRoaXMgaXMgVXNiIE5ldHdvcmsgQ29tbW9uIGRy aXZlciBmb3IgRFhFIHBoYXNlLg0KKyMNCisjIENvcHlyaWdodCAoYykgMjAyMywgQW1lcmljYW4g TWVnYXRyZW5kcyBJbnRlcm5hdGlvbmFsIExMQy4gQWxsIHJpZ2h0cyByZXNlcnZlZC48QlI+DQor IyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQlNELTItQ2xhdXNlLVBhdGVudA0KKyMjDQorDQor W0RlZmluZXNdDQorICBJTkZfVkVSU0lPTiAgICAgICAgICAgICAgICAgICAgPSAweDAwMDEwMDA1 DQorICBCQVNFX05BTUUgICAgICAgICAgICAgICAgICAgICAgPSBOZXR3b3JrQ29tbW9uDQorICBG SUxFX0dVSUQgICAgICAgICAgICAgICAgICAgICAgPSBjYTZlYjRmNC1mMWQ2LTQzNzUtOTdkNi0x ODg1Njg3MWUxYmYNCisgIE1PRFVMRV9UWVBFICAgICAgICAgICAgICAgICAgICA9IERYRV9EUklW RVINCisgIFZFUlNJT05fU1RSSU5HICAgICAgICAgICAgICAgICA9IDEuMA0KKyAgRU5UUllfUE9J TlQgICAgICAgICAgICAgICAgICAgID0gTmV0d29ya0NvbW1vbkVudHJ5DQorDQorW1NvdXJjZXNd DQorICBEcml2ZXJCaW5kaW5nLmMNCisgIERyaXZlckJpbmRpbmcuaA0KKyAgQ29tcG9uZW50TmFt ZS5jDQorICBQeGVGdW5jdGlvbi5jDQorDQorW1BhY2thZ2VzXQ0KKyAgTWRlUGtnL01kZVBrZy5k ZWMNCisgIE1kZU1vZHVsZVBrZy9NZGVNb2R1bGVQa2cuZGVjDQorDQorW0xpYnJhcnlDbGFzc2Vz XQ0KKyAgVWVmaURyaXZlckVudHJ5UG9pbnQNCisgIFVlZmlCb290U2VydmljZXNUYWJsZUxpYg0K KyAgVWVmaUxpYg0KKyAgRGVidWdMaWINCisgIFVlZmlVc2JMaWINCisgIE1lbW9yeUFsbG9jYXRp b25MaWINCisgIEJhc2VNZW1vcnlMaWINCisNCitbUHJvdG9jb2xzXQ0KKyAgZ0VmaU5ldHdvcmtJ bnRlcmZhY2VJZGVudGlmaWVyUHJvdG9jb2xHdWlkXzMxDQorICBnRWZpVXNiSW9Qcm90b2NvbEd1 aWQNCisgIGdFZmlEZXZpY2VQYXRoUHJvdG9jb2xHdWlkDQorICBnRWZpRHJpdmVyQmluZGluZ1By b3RvY29sR3VpZA0KKyAgZ0Vka0lJVXNiRXRoUHJvdG9jb2xHdWlkDQorDQorW1BjZF0NCisgIGdF ZmlNZGVNb2R1bGVQa2dUb2tlblNwYWNlR3VpZC5QY2RFbmFibGVVc2JOZXR3b3JrUmF0ZUxpbWl0 aW5nDQorICBnRWZpTWRlTW9kdWxlUGtnVG9rZW5TcGFjZUd1aWQuUGNkVXNiTmV0d29ya1JhdGVM aW1pdGluZ0NyZWRpdA0KKyAgZ0VmaU1kZU1vZHVsZVBrZ1Rva2VuU3BhY2VHdWlkLlBjZFVzYk5l dHdvcmtSYXRlTGltaXRpbmdGYWN0b3INCisNCitbRGVwZXhdDQorICBUUlVFDQpkaWZmIC0tZ2l0 IGEvTWRlTW9kdWxlUGtnL0J1cy9Vc2IvVXNiTmV0d29yay9OZXR3b3JrQ29tbW9uL1B4ZUZ1bmN0 aW9uLmMgYi9NZGVNb2R1bGVQa2cvQnVzL1VzYi9Vc2JOZXR3b3JrL05ldHdvcmtDb21tb24vUHhl RnVuY3Rpb24uYw0KbmV3IGZpbGUgbW9kZSAxMDA2NDQNCmluZGV4IDAwMDAwMDAwMDAuLjY4N2Nh YmNhNGMNCi0tLSAvZGV2L251bGwNCisrKyBiL01kZU1vZHVsZVBrZy9CdXMvVXNiL1VzYk5ldHdv cmsvTmV0d29ya0NvbW1vbi9QeGVGdW5jdGlvbi5jDQpAQCAtMCwwICsxLDE4MDMgQEANCisvKiog QGZpbGUNCisgIFRoaXMgZmlsZSBjb250YWlucyBjb2RlIGZvciBVTkRJIGNvbW1hbmQgYmFzZWQg b24gVUVGSSBzcGVjaWZpY2F0aW9uLg0KKw0KKyAgQ29weXJpZ2h0IChjKSAyMDIzLCBBbWVyaWNh biBNZWdhdHJlbmRzIEludGVybmF0aW9uYWwgTExDLiBBbGwgcmlnaHRzIHJlc2VydmVkLjxCUj4N CisgIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBCU0QtMi1DbGF1c2UtUGF0ZW50DQorKiovDQor DQorI2luY2x1ZGUgIkRyaXZlckJpbmRpbmcuaCINCisNCisvLyBBUEkgdGFibGUsIGRlZmluZWQg aW4gVUVGSSBzcGVjaWZpY2F0aW9uDQorQVBJX0ZVTkMgIGdVbmRpQXBpVGFibGVbXSA9IHsNCisg IFVuZGlHZXRTdGF0ZSwNCisgIFVuZGlTdGFydCwNCisgIFVuZGlTdG9wLA0KKyAgVW5kaUdldElu aXRJbmZvLA0KKyAgVW5kaUdldENvbmZpZ0luZm8sDQorICBVbmRpSW5pdGlhbGl6ZSwNCisgIFVu ZGlSZXNldCwNCisgIFVuZGlTaHV0ZG93biwNCisgIFVuZGlJbnRlcnJ1cHRFbmFibGUsDQorICBV bmRpUmVjZWl2ZUZpbHRlciwNCisgIFVuZGlTdGF0aW9uQWRkcmVzcywNCisgIFVuZGlTdGF0aXN0 aWNzLA0KKyAgVW5kaU1jYXN0SXAyTWFjLA0KKyAgVW5kaU52RGF0YSwNCisgIFVuZGlHZXRTdGF0 dXMsDQorICBVbmRpRmlsbEhlYWRlciwNCisgIFVuZGlUcmFuc21pdCwNCisgIFVuZGlSZWNlaXZl DQorfTsNCisNCisvKioNCisgICBDYWxsYmFjayBmdW5jdGlvbiBmb3IgZW5hYmxlIFJhdGUgTGlt aXRlcg0KKw0KKyAgIEBwYXJhbVtpbl0gRXZlbnQgICAgICAgICAgIEV2ZW50IHdob3NlIG5vdGlm aWNhdGlvbiBmdW5jdGlvbiBpcyBiZWluZyBpbnZva2VkDQorICAgQHBhcmFtW2luXSBDb250ZXh0 ICAgICAgICAgUG9pbnRlciB0byB0aGUgbm90aWZpY2F0aW9uIGZ1bmN0aW9uJ3MgY29udGV4dA0K Kw0KKyoqLw0KK1ZPSUQNCitFRklBUEkNCitVbmRpUmF0ZUxpbWl0ZXJDYWxsYmFjayAoDQorICBJ TiAgRUZJX0VWRU5UICBFdmVudCwNCisgIElOICBWT0lEICAgICAgICpDb250ZXh0DQorICApDQor ew0KKyAgTklDX0RBVEEgICpOaWMgPSBDb250ZXh0Ow0KKw0KKyAgaWYgKE5pYy0+UmF0ZUxpbWl0 aW5nQ3JlZGl0Q291bnQgPCBOaWMtPlJhdGVMaW1pdGluZ0NyZWRpdCkgew0KKyAgICBOaWMtPlJh dGVMaW1pdGluZ0NyZWRpdENvdW50Kys7DQorICB9DQorfQ0KKw0KKy8qKg0KKyAgVGhpcyBjb21t YW5kIGlzIHVzZWQgdG8gZGV0ZXJtaW5lIHRoZSBvcGVyYXRpb25hbCBzdGF0ZSBvZiB0aGUgVU5E SS4NCisNCisgIEBwYXJhbVtpbl0gIENkYiAgQSBwb2ludGVyIHRvIHRoZSBjb21tYW5kIGRlc2Ny aXB0b3IgYmxvY2suDQorICBAcGFyYW1baW5dICBOaWMgIEEgcG9pbnRlciB0byB0aGUgTmV0d29y ayBpbnRlcmZhY2UgY29udHJvbGxlciBkYXRhLg0KKw0KKyoqLw0KK1ZPSUQNCitVbmRpR2V0U3Rh dGUgKA0KKyAgSU4gIFBYRV9DREIgICAqQ2RiLA0KKyAgSU4gIE5JQ19EQVRBICAqTmljDQorICAp DQorew0KKyAgRUZJX1NUQVRVUyAgU3RhdHVzOw0KKw0KKyAgaWYgKChDZGItPk9wQ29kZSAhPSBQ WEVfT1BDT0RFX0dFVF9TVEFURSkgfHwNCisgICAgICAoQ2RiLT5TdGF0Q29kZSAhPSBQWEVfU1RB VENPREVfSU5JVElBTElaRSkgfHwNCisgICAgICAoQ2RiLT5TdGF0RmxhZ3MgIT0gUFhFX1NUQVRG TEFHU19JTklUSUFMSVpFKSB8fA0KKyAgICAgIChDZGItPklGbnVtID49IChnUHhlLT5JRmNudCB8 IGdQeGUtPklGY250RXh0IDw8IDgpKSB8fA0KKyAgICAgIChDZGItPkNQQnNpemUgIT0gUFhFX0NQ QlNJWkVfTk9UX1VTRUQpIHx8DQorICAgICAgKENkYi0+Q1BCYWRkciAhPSBQWEVfQ1BCQUREUl9O T1RfVVNFRCkgfHwNCisgICAgICAoQ2RiLT5EQnNpemUgIT0gUFhFX0RCU0laRV9OT1RfVVNFRCkg fHwNCisgICAgICAoQ2RiLT5EQmFkZHIgIT0gUFhFX0RCQUREUl9OT1RfVVNFRCkgfHwNCisgICAg ICAoQ2RiLT5PcEZsYWdzICE9IFBYRV9PUEZMQUdTX05PVF9VU0VEKSkNCisgIHsNCisgICAgQ2Ri LT5TdGF0RmxhZ3MgPSBQWEVfU1RBVEZMQUdTX0NPTU1BTkRfRkFJTEVEOw0KKyAgICBDZGItPlN0 YXRDb2RlICA9IFBYRV9TVEFUQ09ERV9JTlZBTElEX0NEQjsNCisgICAgcmV0dXJuOw0KKyAgfSBl bHNlIHsNCisgICAgQ2RiLT5TdGF0RmxhZ3MgPSBQWEVfU1RBVEZMQUdTX0NPTU1BTkRfQ09NUExF VEU7DQorICAgIENkYi0+U3RhdENvZGUgID0gUFhFX1NUQVRDT0RFX1NVQ0NFU1M7DQorICB9DQor DQorICBDZGItPlN0YXRGbGFncyA9IENkYi0+U3RhdEZsYWdzIHwgTmljLT5TdGF0ZTsNCisNCisg IGlmIChOaWMtPlVzYkV0aC0+VXNiRXRoVW5kaS5Vc2JFdGhVbmRpR2V0U3RhdGUgIT0gTlVMTCkg ew0KKyAgICBTdGF0dXMgPSBOaWMtPlVzYkV0aC0+VXNiRXRoVW5kaS5Vc2JFdGhVbmRpR2V0U3Rh dGUgKENkYiwgTmljKTsNCisgICAgaWYgKEVGSV9FUlJPUiAoU3RhdHVzKSkgew0KKyAgICAgIENk Yi0+U3RhdEZsYWdzID0gUFhFX1NUQVRGTEFHU19DT01NQU5EX0ZBSUxFRDsNCisgICAgfQ0KKyAg fQ0KK30NCisNCisvKioNCisgIFRoaXMgY29tbWFuZCBpcyB1c2VkIHRvIGNoYW5nZSB0aGUgVU5E SSBvcGVyYXRpb25hbCBzdGF0ZSBmcm9tIHN0b3BwZWQgdG8gc3RhcnRlZC4NCisNCisgIEBwYXJh bVtpbl0gIENkYiAgQSBwb2ludGVyIHRvIHRoZSBjb21tYW5kIGRlc2NyaXB0b3IgYmxvY2suDQor ICBAcGFyYW1baW5dICBOaWMgIEEgcG9pbnRlciB0byB0aGUgTmV0d29yayBpbnRlcmZhY2UgY29u dHJvbGxlciBkYXRhLg0KKw0KKyoqLw0KK1ZPSUQNCitVbmRpU3RhcnQgKA0KKyAgSU4gIFBYRV9D REIgICAqQ2RiLA0KKyAgSU4gIE5JQ19EQVRBICAqTmljDQorICApDQorew0KKyAgUFhFX0NQQl9T VEFSVF8zMSAgKkNwYjsNCisgIEVGSV9TVEFUVVMgICAgICAgIFN0YXR1czsNCisgIEJPT0xFQU4g ICAgICAgICAgIEV2ZW50RXJyb3I7DQorDQorICBpZiAoKENkYi0+T3BDb2RlICE9IFBYRV9PUENP REVfU1RBUlQpIHx8DQorICAgICAgKENkYi0+U3RhdENvZGUgIT0gUFhFX1NUQVRDT0RFX0lOSVRJ QUxJWkUpIHx8DQorICAgICAgKENkYi0+U3RhdEZsYWdzICE9IFBYRV9TVEFURkxBR1NfSU5JVElB TElaRSkgfHwNCisgICAgICAoQ2RiLT5JRm51bSA+PSAoZ1B4ZS0+SUZjbnQgfCBnUHhlLT5JRmNu dEV4dCA8PCA4KSkgfHwNCisgICAgICAoQ2RiLT5DUEJzaXplICE9IHNpemVvZiAoUFhFX0NQQl9T VEFSVF8zMSkpIHx8DQorICAgICAgKENkYi0+REJzaXplICE9IFBYRV9EQlNJWkVfTk9UX1VTRUQp IHx8DQorICAgICAgKENkYi0+REJhZGRyICE9IFBYRV9EQkFERFJfTk9UX1VTRUQpIHx8DQorICAg ICAgKENkYi0+T3BGbGFncyAhPSBQWEVfT1BGTEFHU19OT1RfVVNFRCkpDQorICB7DQorICAgIENk Yi0+U3RhdEZsYWdzID0gUFhFX1NUQVRGTEFHU19DT01NQU5EX0ZBSUxFRDsNCisgICAgQ2RiLT5T dGF0Q29kZSAgPSBQWEVfU1RBVENPREVfSU5WQUxJRF9DREI7DQorICAgIHJldHVybjsNCisgIH0N CisNCisgIGlmIChOaWMtPlN0YXRlICE9IFBYRV9TVEFURkxBR1NfR0VUX1NUQVRFX1NUT1BQRUQp IHsNCisgICAgQ2RiLT5TdGF0RmxhZ3MgPSBQWEVfU1RBVEZMQUdTX0NPTU1BTkRfRkFJTEVEOw0K KyAgICBDZGItPlN0YXRDb2RlICA9IFBYRV9TVEFUQ09ERV9BTFJFQURZX1NUQVJURUQ7DQorICAg IHJldHVybjsNCisgIH0NCisNCisgIENwYiA9IChQWEVfQ1BCX1NUQVJUXzMxICopKFVJTlROKUNk Yi0+Q1BCYWRkcjsNCisNCisgIE5pYy0+UHhlU3RhcnQuRGVsYXkgICAgID0gQ3BiLT5EZWxheTsN CisgIE5pYy0+UHhlU3RhcnQuVmlydDJQaHlzID0gQ3BiLT5WaXJ0MlBoeXM7DQorICBOaWMtPlB4 ZVN0YXJ0LkJsb2NrICAgICA9IENwYi0+QmxvY2s7DQorICBOaWMtPlB4ZVN0YXJ0Lk1hcF9NZW0g ICA9IDA7DQorICBOaWMtPlB4ZVN0YXJ0LlVuTWFwX01lbSA9IDA7DQorICBOaWMtPlB4ZVN0YXJ0 LlN5bmNfTWVtICA9IENwYi0+U3luY19NZW07DQorICBOaWMtPlB4ZVN0YXJ0LlVuaXF1ZV9JRCA9 IENwYi0+VW5pcXVlX0lEOw0KKyAgRXZlbnRFcnJvciAgICAgICAgICAgICAgPSBGQUxTRTsNCisg IFN0YXR1cyAgICAgICAgICAgICAgICAgID0gRUZJX1NVQ0NFU1M7DQorICBpZiAoTmljLT5SYXRl TGltaXRpbmdFbmFibGUgPT0gVFJVRSkgew0KKyAgICBTdGF0dXMgPSBnQlMtPkNyZWF0ZUV2ZW50 ICgNCisgICAgICAgICAgICAgICAgICAgIEVWVF9USU1FUiB8IEVWVF9OT1RJRllfU0lHTkFMLA0K KyAgICAgICAgICAgICAgICAgICAgVFBMX05PVElGWSwNCisgICAgICAgICAgICAgICAgICAgIFVu ZGlSYXRlTGltaXRlckNhbGxiYWNrLA0KKyAgICAgICAgICAgICAgICAgICAgTmljLA0KKyAgICAg ICAgICAgICAgICAgICAgJk5pYy0+UmF0ZUxpbWl0ZXINCisgICAgICAgICAgICAgICAgICAgICk7 DQorICAgIGlmICghRUZJX0VSUk9SIChTdGF0dXMpKSB7DQorICAgICAgU3RhdHVzID0gZ0JTLT5T ZXRUaW1lciAoDQorICAgICAgICAgICAgICAgICAgICAgIE5pYy0+UmF0ZUxpbWl0ZXIsDQorICAg ICAgICAgICAgICAgICAgICAgIFRpbWVyUGVyaW9kaWMsDQorICAgICAgICAgICAgICAgICAgICAg IE5pYy0+UmF0ZUxpbWl0aW5nUG9sbFRpbWVyICogMTAwMDANCisgICAgICAgICAgICAgICAgICAg ICAgKTsNCisgICAgICBpZiAoRUZJX0VSUk9SIChTdGF0dXMpKSB7DQorICAgICAgICBFdmVudEVy cm9yID0gVFJVRTsNCisgICAgICB9DQorICAgIH0NCisgIH0NCisNCisgIGlmICgoTmljLT5Vc2JF dGgtPlVzYkV0aFVuZGkuVXNiRXRoVW5kaVN0YXJ0ICE9IE5VTEwpICYmIChFdmVudEVycm9yID09 IEZBTFNFKSkgew0KKyAgICBTdGF0dXMgPSBOaWMtPlVzYkV0aC0+VXNiRXRoVW5kaS5Vc2JFdGhV bmRpU3RhcnQgKENkYiwgTmljKTsNCisgIH0NCisNCisgIGlmICghRUZJX0VSUk9SIChTdGF0dXMp KSB7DQorICAgIC8vIEluaXRpYWwgdGhlIHN0YXRlIGZvciBVTkRJIHN0YXJ0Lg0KKyAgICBOaWMt PlN0YXRlICAgICA9IFBYRV9TVEFURkxBR1NfR0VUX1NUQVRFX1NUQVJURUQ7DQorICAgIENkYi0+ U3RhdEZsYWdzID0gUFhFX1NUQVRGTEFHU19DT01NQU5EX0NPTVBMRVRFOw0KKyAgICBDZGItPlN0 YXRDb2RlICA9IFBYRV9TVEFUQ09ERV9TVUNDRVNTOw0KKyAgfSBlbHNlIHsNCisgICAgaWYgKE5p Yy0+UmF0ZUxpbWl0aW5nRW5hYmxlID09IFRSVUUpIHsNCisgICAgICBpZiAoIUV2ZW50RXJyb3Ip IHsNCisgICAgICAgIGdCUy0+U2V0VGltZXIgKCZOaWMtPlJhdGVMaW1pdGVyLCBUaW1lckNhbmNl bCwgMCk7DQorICAgICAgfQ0KKw0KKyAgICAgIGlmIChOaWMtPlJhdGVMaW1pdGVyKSB7DQorICAg ICAgICBnQlMtPkNsb3NlRXZlbnQgKCZOaWMtPlJhdGVMaW1pdGVyKTsNCisgICAgICAgIE5pYy0+ UmF0ZUxpbWl0ZXIgPSAwOw0KKyAgICAgIH0NCisgICAgfQ0KKw0KKyAgICAvLyBJbml0aWFsIHRo ZSBzdGF0ZSB3aGVuIFVOREkgc3RhcnQgaXMgZmFpbA0KKyAgICBDZGItPlN0YXRGbGFncyA9IFBY RV9TVEFURkxBR1NfQ09NTUFORF9GQUlMRUQ7DQorICAgIENkYi0+U3RhdENvZGUgID0gUFhFX1NU QVRDT0RFX0RFVklDRV9GQUlMVVJFOw0KKyAgfQ0KK30NCisNCisvKioNCisgIFRoaXMgY29tbWFu ZCBpcyB1c2VkIHRvIGNoYW5nZSB0aGUgVU5ESSBvcGVyYXRpb25hbCBzdGF0ZSBmcm9tIHN0YXJ0 ZWQgdG8gc3RvcHBlZC4NCisNCisgIEBwYXJhbVtpbl0gIENkYiAgQSBwb2ludGVyIHRvIHRoZSBj b21tYW5kIGRlc2NyaXB0b3IgYmxvY2suDQorICBAcGFyYW1baW5dICBOaWMgIEEgcG9pbnRlciB0 byB0aGUgTmV0d29yayBpbnRlcmZhY2UgY29udHJvbGxlciBkYXRhLg0KKw0KKyoqLw0KK1ZPSUQN CitVbmRpU3RvcCAoDQorICBJTiAgUFhFX0NEQiAgICpDZGIsDQorICBJTiAgTklDX0RBVEEgICpO aWMNCisgICkNCit7DQorICBFRklfU1RBVFVTICBTdGF0dXM7DQorDQorICBpZiAoKENkYi0+T3BD b2RlICE9IFBYRV9PUENPREVfU1RPUCkgfHwNCisgICAgICAoQ2RiLT5TdGF0Q29kZSAhPSBQWEVf U1RBVENPREVfSU5JVElBTElaRSkgfHwNCisgICAgICAoQ2RiLT5TdGF0RmxhZ3MgIT0gUFhFX1NU QVRGTEFHU19JTklUSUFMSVpFKSB8fA0KKyAgICAgIChDZGItPklGbnVtID49IChnUHhlLT5JRmNu dCB8IGdQeGUtPklGY250RXh0IDw8IDgpKSB8fA0KKyAgICAgIChDZGItPkNQQnNpemUgIT0gUFhF X0NQQlNJWkVfTk9UX1VTRUQpIHx8DQorICAgICAgKENkYi0+Q1BCYWRkciAhPSBQWEVfQ1BCQURE Ul9OT1RfVVNFRCkgfHwNCisgICAgICAoQ2RiLT5EQnNpemUgIT0gUFhFX0RCU0laRV9OT1RfVVNF RCkgfHwNCisgICAgICAoQ2RiLT5EQmFkZHIgIT0gUFhFX0RCQUREUl9OT1RfVVNFRCkgfHwNCisg ICAgICAoQ2RiLT5PcEZsYWdzICE9IFBYRV9PUEZMQUdTX05PVF9VU0VEKSkNCisgIHsNCisgICAg Q2RiLT5TdGF0RmxhZ3MgPSBQWEVfU1RBVEZMQUdTX0NPTU1BTkRfRkFJTEVEOw0KKyAgICBDZGIt PlN0YXRDb2RlICA9IFBYRV9TVEFUQ09ERV9JTlZBTElEX0NEQjsNCisgICAgcmV0dXJuOw0KKyAg fSBlbHNlIHsNCisgICAgQ2RiLT5TdGF0RmxhZ3MgPSBQWEVfU1RBVEZMQUdTX0NPTU1BTkRfQ09N UExFVEU7DQorICAgIENkYi0+U3RhdENvZGUgID0gUFhFX1NUQVRDT0RFX1NVQ0NFU1M7DQorICB9 DQorDQorICBpZiAoTmljLT5TdGF0ZSA9PSBQWEVfU1RBVEZMQUdTX0dFVF9TVEFURV9TVE9QUEVE KSB7DQorICAgIENkYi0+U3RhdEZsYWdzID0gUFhFX1NUQVRGTEFHU19DT01NQU5EX0ZBSUxFRDsN CisgICAgQ2RiLT5TdGF0Q29kZSAgPSBQWEVfU1RBVENPREVfTk9UX1NUQVJURUQ7DQorICAgIHJl dHVybjsNCisgIH0NCisNCisgIGlmIChOaWMtPlN0YXRlID09IFBYRV9TVEFURkxBR1NfR0VUX1NU QVRFX0lOSVRJQUxJWkVEKSB7DQorICAgIENkYi0+U3RhdEZsYWdzID0gUFhFX1NUQVRGTEFHU19D T01NQU5EX0ZBSUxFRDsNCisgICAgQ2RiLT5TdGF0Q29kZSAgPSBQWEVfU1RBVENPREVfTk9UX1NI VVRET1dOOw0KKyAgICByZXR1cm47DQorICB9DQorDQorICBOaWMtPlB4ZVN0YXJ0LkRlbGF5ICAg ICA9IDA7DQorICBOaWMtPlB4ZVN0YXJ0LlZpcnQyUGh5cyA9IDA7DQorICBOaWMtPlB4ZVN0YXJ0 LkJsb2NrICAgICA9IDA7DQorICBOaWMtPlB4ZVN0YXJ0Lk1hcF9NZW0gICA9IDA7DQorICBOaWMt PlB4ZVN0YXJ0LlVuTWFwX01lbSA9IDA7DQorICBOaWMtPlB4ZVN0YXJ0LlN5bmNfTWVtICA9IDA7 DQorICBOaWMtPlN0YXRlICAgICAgICAgICAgICA9IFBYRV9TVEFURkxBR1NfR0VUX1NUQVRFX1NU T1BQRUQ7DQorDQorICBpZiAoTmljLT5SYXRlTGltaXRpbmdFbmFibGUgPT0gVFJVRSkgew0KKyAg ICBnQlMtPlNldFRpbWVyICgmTmljLT5SYXRlTGltaXRlciwgVGltZXJDYW5jZWwsIDApOw0KKyAg ICBnQlMtPkNsb3NlRXZlbnQgKCZOaWMtPlJhdGVMaW1pdGVyKTsNCisgIH0NCisNCisgIGlmIChO aWMtPlVzYkV0aC0+VXNiRXRoVW5kaS5Vc2JFdGhVbmRpU3RvcCAhPSBOVUxMKSB7DQorICAgIFN0 YXR1cyA9IE5pYy0+VXNiRXRoLT5Vc2JFdGhVbmRpLlVzYkV0aFVuZGlTdG9wIChDZGIsIE5pYyk7 DQorICAgIGlmIChFRklfRVJST1IgKFN0YXR1cykpIHsNCisgICAgICBDZGItPlN0YXRGbGFncyA9 IFBYRV9TVEFURkxBR1NfQ09NTUFORF9GQUlMRUQ7DQorICAgIH0NCisgIH0NCit9DQorDQorLyoq DQorICBUaGlzIGNvbW1hbmQgaXMgdXNlZCB0byByZXRyaWV2ZSBpbml0aWFsaXphdGlvbiBpbmZv cm1hdGlvbiB0aGF0IGlzDQorICBuZWVkZWQgYnkgZHJpdmVycyBhbmQgYXBwbGljYXRpb25zIHRv IGluaXRpYWxpemVkIFVOREkuDQorDQorICBAcGFyYW1baW5dICBDZGIgIEEgcG9pbnRlciB0byB0 aGUgY29tbWFuZCBkZXNjcmlwdG9yIGJsb2NrLg0KKyAgQHBhcmFtW2luXSAgTmljICBBIHBvaW50 ZXIgdG8gdGhlIE5ldHdvcmsgaW50ZXJmYWNlIGNvbnRyb2xsZXIgZGF0YS4NCisNCisqKi8NCitW T0lEDQorVW5kaUdldEluaXRJbmZvICgNCisgIElOICBQWEVfQ0RCICAgKkNkYiwNCisgIElOICBO SUNfREFUQSAgKk5pYw0KKyAgKQ0KK3sNCisgIFBYRV9EQl9HRVRfSU5JVF9JTkZPICAqRGI7DQor ICBFRklfU1RBVFVTICAgICAgICAgICAgU3RhdHVzOw0KKw0KKyAgaWYgKChDZGItPk9wQ29kZSAh PSBQWEVfT1BDT0RFX0dFVF9JTklUX0lORk8pIHx8DQorICAgICAgKENkYi0+U3RhdENvZGUgIT0g UFhFX1NUQVRDT0RFX0lOSVRJQUxJWkUpIHx8DQorICAgICAgKENkYi0+U3RhdEZsYWdzICE9IFBY RV9TVEFURkxBR1NfSU5JVElBTElaRSkgfHwNCisgICAgICAoQ2RiLT5JRm51bSA+PSAoZ1B4ZS0+ SUZjbnQgfCBnUHhlLT5JRmNudEV4dCA8PCA4KSkgfHwNCisgICAgICAoQ2RiLT5DUEJzaXplICE9 IFBYRV9DUEJTSVpFX05PVF9VU0VEKSB8fA0KKyAgICAgIChDZGItPkNQQmFkZHIgIT0gUFhFX0NQ QkFERFJfTk9UX1VTRUQpIHx8DQorICAgICAgKENkYi0+REJzaXplICE9IHNpemVvZiAoUFhFX0RC X0dFVF9JTklUX0lORk8pKSB8fA0KKyAgICAgIChDZGItPk9wRmxhZ3MgIT0gUFhFX09QRkxBR1Nf Tk9UX1VTRUQpKQ0KKyAgew0KKyAgICBDZGItPlN0YXRGbGFncyA9IFBYRV9TVEFURkxBR1NfQ09N TUFORF9GQUlMRUQ7DQorICAgIENkYi0+U3RhdENvZGUgID0gUFhFX1NUQVRDT0RFX0lOVkFMSURf Q0RCOw0KKyAgICByZXR1cm47DQorICB9IGVsc2Ugew0KKyAgICBDZGItPlN0YXRGbGFncyA9IFBY RV9TVEFURkxBR1NfQ09NTUFORF9DT01QTEVURTsNCisgICAgQ2RiLT5TdGF0Q29kZSAgPSBQWEVf U1RBVENPREVfU1VDQ0VTUzsNCisgIH0NCisNCisgIGlmIChOaWMtPlN0YXRlID09IFBYRV9TVEFU RkxBR1NfR0VUX1NUQVRFX1NUT1BQRUQpIHsNCisgICAgQ2RiLT5TdGF0RmxhZ3MgPSBQWEVfU1RB VEZMQUdTX0NPTU1BTkRfRkFJTEVEOw0KKyAgICBDZGItPlN0YXRDb2RlICA9IFBYRV9TVEFUQ09E RV9OT1RfU1RBUlRFRDsNCisgICAgcmV0dXJuOw0KKyAgfQ0KKw0KKyAgRGIgPSAoUFhFX0RCX0dF VF9JTklUX0lORk8gKikoVUlOVE4pQ2RiLT5EQmFkZHI7DQorDQorICBEYi0+TWVtb3J5UmVxdWly ZWQgICAgICAgICA9IE1FTU9SWV9SRVFVSVJFOw0KKyAgRGItPkZyYW1lRGF0YUxlbiAgICAgICAg ICAgPSBQWEVfTUFYX1RYUlhfVU5JVF9FVEhFUjsNCisgIERiLT5MaW5rU3BlZWRzWzBdICAgICAg ICAgID0gMTA7DQorICBEYi0+TGlua1NwZWVkc1sxXSAgICAgICAgICA9IDEwMDsNCisgIERiLT5M aW5rU3BlZWRzWzJdICAgICAgICAgID0gMTAwMDsNCisgIERiLT5MaW5rU3BlZWRzWzNdICAgICAg ICAgID0gMDsNCisgIERiLT5NZWRpYUhlYWRlckxlbiAgICAgICAgID0gUFhFX01BQ19IRUFERVJf TEVOX0VUSEVSOw0KKyAgRGItPkhXYWRkckxlbiAgICAgICAgICAgICAgPSBQWEVfSFdBRERSX0xF Tl9FVEhFUjsNCisgIERiLT5NQ2FzdEZpbHRlckNudCAgICAgICAgID0gTUFYX01DQVNUX0FERFJF U1NfQ05UOw0KKyAgRGItPlR4QnVmQ250ICAgICAgICAgICAgICAgPSBOaWMtPlB4ZUluaXQuVHhC dWZDbnQ7DQorICBEYi0+VHhCdWZTaXplICAgICAgICAgICAgICA9IE5pYy0+UHhlSW5pdC5UeEJ1 ZlNpemU7DQorICBEYi0+UnhCdWZDbnQgICAgICAgICAgICAgICA9IE5pYy0+UHhlSW5pdC5SeEJ1 ZkNudDsNCisgIERiLT5SeEJ1ZlNpemUgICAgICAgICAgICAgID0gTmljLT5QeGVJbml0LlJ4QnVm U2l6ZTsNCisgIERiLT5JRnR5cGUgICAgICAgICAgICAgICAgID0gUFhFX0lGVFlQRV9FVEhFUk5F VDsNCisgIERiLT5TdXBwb3J0ZWREdXBsZXhNb2RlcyAgID0gUFhFX0RVUExFWF9ERUZBVUxUOw0K KyAgRGItPlN1cHBvcnRlZExvb3BCYWNrTW9kZXMgPSBMT09QQkFDS19OT1JNQUw7DQorDQorICBD ZGItPlN0YXRGbGFncyB8PSAoUFhFX1NUQVRGTEFHU19DQUJMRV9ERVRFQ1RfU1VQUE9SVEVEIHwN CisgICAgICAgICAgICAgICAgICAgICBQWEVfU1RBVEZMQUdTX0dFVF9TVEFUVVNfTk9fTUVESUFf U1VQUE9SVEVEKTsNCisNCisgIGlmIChOaWMtPlVzYkV0aC0+VXNiRXRoVW5kaS5Vc2JFdGhVbmRp R2V0SW5pdEluZm8gIT0gTlVMTCkgew0KKyAgICBTdGF0dXMgPSBOaWMtPlVzYkV0aC0+VXNiRXRo VW5kaS5Vc2JFdGhVbmRpR2V0SW5pdEluZm8gKENkYiwgTmljKTsNCisgICAgaWYgKEVGSV9FUlJP UiAoU3RhdHVzKSkgew0KKyAgICAgIENkYi0+U3RhdEZsYWdzID0gUFhFX1NUQVRGTEFHU19DT01N QU5EX0ZBSUxFRDsNCisgICAgfQ0KKyAgfQ0KK30NCisNCisvKioNCisgIFRoaXMgY29tbWFuZCBp cyB1c2VkIHRvIHJldHJpZXZlIGNvbmZpZ3VyYXRpb24gaW5mb3JtYXRpb24gYWJvdXQNCisgIHRo ZSBOSUMgYmVpbmcgY29udHJvbGxlZCBieSB0aGUgVU5ESS4NCisNCisgIEBwYXJhbVtpbl0gIENk YiAgQSBwb2ludGVyIHRvIHRoZSBjb21tYW5kIGRlc2NyaXB0b3IgYmxvY2suDQorICBAcGFyYW1b aW5dICBOaWMgIEEgcG9pbnRlciB0byB0aGUgTmV0d29yayBpbnRlcmZhY2UgY29udHJvbGxlciBk YXRhLg0KKw0KKyoqLw0KK1ZPSUQNCitVbmRpR2V0Q29uZmlnSW5mbyAoDQorICBJTiAgUFhFX0NE QiAgICpDZGIsDQorICBJTiAgTklDX0RBVEEgICpOaWMNCisgICkNCit7DQorICBQWEVfREJfR0VU X0NPTkZJR19JTkZPICAqRGI7DQorICBFRklfU1RBVFVTICAgICAgICAgICAgICBTdGF0dXM7DQor DQorICBpZiAoKENkYi0+T3BDb2RlICE9IFBYRV9PUENPREVfR0VUX0NPTkZJR19JTkZPKSB8fA0K KyAgICAgIChDZGItPlN0YXRDb2RlICE9IFBYRV9TVEFUQ09ERV9JTklUSUFMSVpFKSB8fA0KKyAg ICAgIChDZGItPlN0YXRGbGFncyAhPSBQWEVfU1RBVEZMQUdTX0lOSVRJQUxJWkUpIHx8DQorICAg ICAgKENkYi0+SUZudW0gPj0gKGdQeGUtPklGY250IHwgZ1B4ZS0+SUZjbnRFeHQgPDwgOCkpIHx8 DQorICAgICAgKENkYi0+Q1BCc2l6ZSAhPSBQWEVfQ1BCU0laRV9OT1RfVVNFRCkgfHwNCisgICAg ICAoQ2RiLT5DUEJhZGRyICE9IFBYRV9DUEJBRERSX05PVF9VU0VEKSB8fA0KKyAgICAgIChDZGIt PkRCc2l6ZSAhPSBzaXplb2YgKFBYRV9EQl9HRVRfQ09ORklHX0lORk8pKSB8fA0KKyAgICAgIChD ZGItPk9wRmxhZ3MgIT0gUFhFX09QRkxBR1NfTk9UX1VTRUQpKQ0KKyAgew0KKyAgICBDZGItPlN0 YXRGbGFncyA9IFBYRV9TVEFURkxBR1NfQ09NTUFORF9GQUlMRUQ7DQorICAgIENkYi0+U3RhdENv ZGUgID0gUFhFX1NUQVRDT0RFX0lOVkFMSURfQ0RCOw0KKyAgICByZXR1cm47DQorICB9IGVsc2Ug ew0KKyAgICBDZGItPlN0YXRGbGFncyA9IFBYRV9TVEFURkxBR1NfQ09NTUFORF9DT01QTEVURTsN CisgICAgQ2RiLT5TdGF0Q29kZSAgPSBQWEVfU1RBVENPREVfU1VDQ0VTUzsNCisgIH0NCisNCisg IGlmIChOaWMtPlN0YXRlID09IFBYRV9TVEFURkxBR1NfR0VUX1NUQVRFX1NUT1BQRUQpIHsNCisg ICAgQ2RiLT5TdGF0RmxhZ3MgPSBQWEVfU1RBVEZMQUdTX0NPTU1BTkRfRkFJTEVEOw0KKyAgICBD ZGItPlN0YXRDb2RlICA9IFBYRV9TVEFUQ09ERV9OT1RfU1RBUlRFRDsNCisgICAgcmV0dXJuOw0K KyAgfQ0KKw0KKyAgRGIgPSAoUFhFX0RCX0dFVF9DT05GSUdfSU5GTyAqKShVSU5UTilDZGItPkRC YWRkcjsNCisNCisgIERiLT5wY2kuQnVzVHlwZSA9IFBYRV9CVVNUWVBFX1VTQjsNCisNCisgIGlm IChOaWMtPlVzYkV0aC0+VXNiRXRoVW5kaS5Vc2JFdGhVbmRpR2V0Q29uZmlnSW5mbyAhPSBOVUxM KSB7DQorICAgIFN0YXR1cyA9IE5pYy0+VXNiRXRoLT5Vc2JFdGhVbmRpLlVzYkV0aFVuZGlHZXRD b25maWdJbmZvIChDZGIsIE5pYyk7DQorICAgIGlmIChFRklfRVJST1IgKFN0YXR1cykpIHsNCisg ICAgICBDZGItPlN0YXRGbGFncyA9IFBYRV9TVEFURkxBR1NfQ09NTUFORF9GQUlMRUQ7DQorICAg IH0NCisgIH0NCit9DQorDQorLyoqDQorICBUaGlzIGNvbW1hbmQgcmVzZXRzIHRoZSBuZXR3b3Jr IGFkYXB0ZXIgYW5kIGluaXRpYWxpemVzIFVOREkgdXNpbmcNCisgIHRoZSBwYXJhbWV0ZXJzIHN1 cHBsaWVkIGluIHRoZSBDUEIuDQorDQorICBAcGFyYW1baW5dICAgICAgQ2RiICBBIHBvaW50ZXIg dG8gdGhlIGNvbW1hbmQgZGVzY3JpcHRvciBibG9jay4NCisgIEBwYXJhbVtpbiwgb3V0XSBOaWMg IEEgcG9pbnRlciB0byB0aGUgTmV0d29yayBpbnRlcmZhY2UgY29udHJvbGxlciBkYXRhLg0KKw0K KyoqLw0KK1ZPSUQNCitVbmRpSW5pdGlhbGl6ZSAoDQorICBJTiAgICAgIFBYRV9DREIgICAqQ2Ri LA0KKyAgSU4gT1VUICBOSUNfREFUQSAgKk5pYw0KKyAgKQ0KK3sNCisgIFBYRV9DUEJfSU5JVElB TElaRSAgKkNwYjsNCisgIFBYRV9EQl9JTklUSUFMSVpFICAgKkRiOw0KKyAgRUZJX1NUQVRVUyAg ICAgICAgICBTdGF0dXM7DQorDQorICBpZiAoKENkYi0+T3BDb2RlICE9IFBYRV9PUENPREVfSU5J VElBTElaRSkgfHwNCisgICAgICAoQ2RiLT5TdGF0Q29kZSAhPSBQWEVfU1RBVENPREVfSU5JVElB TElaRSkgfHwNCisgICAgICAoQ2RiLT5TdGF0RmxhZ3MgIT0gUFhFX1NUQVRGTEFHU19JTklUSUFM SVpFKSB8fA0KKyAgICAgIChDZGItPklGbnVtID49IChnUHhlLT5JRmNudCB8IGdQeGUtPklGY250 RXh0IDw8IDgpKSB8fA0KKyAgICAgIChDZGItPkNQQnNpemUgIT0gc2l6ZW9mIChQWEVfQ1BCX0lO SVRJQUxJWkUpKSkNCisgIHsNCisgICAgQ2RiLT5TdGF0RmxhZ3MgPSBQWEVfU1RBVEZMQUdTX0NP TU1BTkRfRkFJTEVEOw0KKyAgICBDZGItPlN0YXRDb2RlICA9IFBYRV9TVEFUQ09ERV9JTlZBTElE X0NEQjsNCisgICAgcmV0dXJuOw0KKyAgfSBlbHNlIHsNCisgICAgQ2RiLT5TdGF0RmxhZ3MgPSBQ WEVfU1RBVEZMQUdTX0NPTU1BTkRfQ09NUExFVEU7DQorICB9DQorDQorICBpZiAoTmljLT5TdGF0 ZSA9PSBQWEVfU1RBVEZMQUdTX0dFVF9TVEFURV9TVE9QUEVEKSB7DQorICAgIENkYi0+U3RhdEZs YWdzID0gUFhFX1NUQVRGTEFHU19DT01NQU5EX0ZBSUxFRDsNCisgICAgQ2RiLT5TdGF0Q29kZSAg PSBQWEVfU1RBVENPREVfTk9UX1NUQVJURUQ7DQorICAgIHJldHVybjsNCisgIH0NCisNCisgIGlm ICgoQ2RiLT5PcEZsYWdzICE9IFBYRV9PUEZMQUdTX0lOSVRJQUxJWkVfREVURUNUX0NBQkxFKSAm Jg0KKyAgICAgIChDZGItPk9wRmxhZ3MgIT0gUFhFX09QRkxBR1NfSU5JVElBTElaRV9ET19OT1Rf REVURUNUX0NBQkxFKSkNCisgIHsNCisgICAgQ2RiLT5TdGF0RmxhZ3MgPSBQWEVfU1RBVEZMQUdT X0NPTU1BTkRfRkFJTEVEOw0KKyAgICBDZGItPlN0YXRDb2RlICA9IFBYRV9TVEFUQ09ERV9JTlZB TElEX0NEQjsNCisgICAgcmV0dXJuOw0KKyAgfQ0KKw0KKyAgaWYgKE5pYy0+U3RhdGUgPT0gUFhF X1NUQVRGTEFHU19HRVRfU1RBVEVfSU5JVElBTElaRUQpIHsNCisgICAgQ2RiLT5TdGF0RmxhZ3Mg PSBQWEVfU1RBVEZMQUdTX0NPTU1BTkRfRkFJTEVEOw0KKyAgICBDZGItPlN0YXRDb2RlICA9IFBY RV9TVEFUQ09ERV9BTFJFQURZX0lOSVRJQUxJWkVEOw0KKyAgICByZXR1cm47DQorICB9DQorDQor ICBDcGIgPSAoUFhFX0NQQl9JTklUSUFMSVpFICopKFVJTlROKUNkYi0+Q1BCYWRkcjsNCisgIERi ICA9IChQWEVfREJfSU5JVElBTElaRSAqKShVSU5UTilDZGItPkRCYWRkcjsNCisNCisgIE5pYy0+ UHhlSW5pdC5MaW5rU3BlZWQgICAgPSBDcGItPkxpbmtTcGVlZDsNCisgIE5pYy0+UHhlSW5pdC5E dXBsZXhNb2RlICAgPSBDcGItPkR1cGxleE1vZGU7DQorICBOaWMtPlB4ZUluaXQuTG9vcEJhY2tN b2RlID0gQ3BiLT5Mb29wQmFja01vZGU7DQorICBOaWMtPlB4ZUluaXQuTWVtb3J5QWRkciAgID0g Q3BiLT5NZW1vcnlBZGRyOw0KKyAgTmljLT5QeGVJbml0Lk1lbW9yeUxlbmd0aCA9IENwYi0+TWVt b3J5TGVuZ3RoOw0KKyAgTmljLT5QeGVJbml0LlR4QnVmQ250ICAgICA9IFRYX0JVRkZFUl9DT1VO VDsNCisgIE5pYy0+UHhlSW5pdC5UeEJ1ZlNpemUgICAgPSBOaWMtPk1heFNlZ21lbnRTaXplOw0K KyAgTmljLT5QeGVJbml0LlJ4QnVmQ250ICAgICA9IFJYX0JVRkZFUl9DT1VOVDsNCisgIE5pYy0+ UHhlSW5pdC5SeEJ1ZlNpemUgICAgPSBOaWMtPk1heFNlZ21lbnRTaXplOw0KKw0KKyAgQ2RiLT5T dGF0Q29kZSA9IEluaXRpYWxpemUgKENkYiwgTmljKTsNCisNCisgIERiLT5NZW1vcnlVc2VkID0g TUVNT1JZX1JFUVVJUkU7DQorICBEYi0+VHhCdWZDbnQgICA9IE5pYy0+UHhlSW5pdC5UeEJ1ZkNu dDsNCisgIERiLT5UeEJ1ZlNpemUgID0gTmljLT5QeGVJbml0LlR4QnVmU2l6ZTsNCisgIERiLT5S eEJ1ZkNudCAgID0gTmljLT5QeGVJbml0LlJ4QnVmQ250Ow0KKyAgRGItPlJ4QnVmU2l6ZSAgPSBO aWMtPlB4ZUluaXQuUnhCdWZTaXplOw0KKw0KKyAgTmljLT5SeEZpbHRlciAgICA9IFBYRV9PUEZM QUdTX1JFQ0VJVkVfRklMVEVSX0JST0FEQ0FTVDsNCisgIE5pYy0+Q2FuVHJhbnNtaXQgPSBGQUxT RTsNCisNCisgIGlmIChDZGItPk9wRmxhZ3MgPT0gUFhFX09QRkxBR1NfSU5JVElBTElaRV9ERVRF Q1RfQ0FCTEUpIHsNCisgICAgaWYgKChOaWMtPlJlcXVlc3QuUmVxdWVzdCA9PSBVU0JfQ0RDX05F VFdPUktfQ09OTkVDVElPTikgJiYgKE5pYy0+UmVxdWVzdC5WYWx1ZSA9PSBORVRXT1JLX0RJU0NP Tk5FQ1QpKSB7DQorICAgICAgTmljLT5DYWJsZURldGVjdCA9IDA7DQorICAgIH0gZWxzZSBpZiAo KE5pYy0+UmVxdWVzdC5SZXF1ZXN0ID09IFVTQl9DRENfTkVUV09SS19DT05ORUNUSU9OKSAmJiAo TmljLT5SZXF1ZXN0LlZhbHVlID09IE5FVFdPUktfQ09OTkVDVEVEKSkgew0KKyAgICAgIE5pYy0+ Q2FibGVEZXRlY3QgPSAxOw0KKyAgICB9DQorDQorICAgIGlmIChOaWMtPkNhYmxlRGV0ZWN0ID09 IDApIHsNCisgICAgICBDZGItPlN0YXRGbGFncyB8PSBQWEVfU1RBVEZMQUdTX0lOSVRJQUxJWkVE X05PX01FRElBOw0KKyAgICB9DQorICB9DQorDQorICBpZiAoQ2RiLT5TdGF0Q29kZSAhPSBQWEVf U1RBVENPREVfU1VDQ0VTUykgew0KKyAgICBDZGItPlN0YXRGbGFncyA9IFBYRV9TVEFURkxBR1Nf Q09NTUFORF9GQUlMRUQ7DQorICB9IGVsc2Ugew0KKyAgICBOaWMtPlN0YXRlID0gUFhFX1NUQVRG TEFHU19HRVRfU1RBVEVfSU5JVElBTElaRUQ7DQorICB9DQorDQorICBpZiAoTmljLT5Vc2JFdGgt PlVzYkV0aFVuZGkuVXNiRXRoVW5kaUluaXRpYWxpemUgIT0gTlVMTCkgew0KKyAgICBTdGF0dXMg PSBOaWMtPlVzYkV0aC0+VXNiRXRoVW5kaS5Vc2JFdGhVbmRpSW5pdGlhbGl6ZSAoQ2RiLCBOaWMp Ow0KKyAgICBpZiAoRUZJX0VSUk9SIChTdGF0dXMpKSB7DQorICAgICAgQ2RiLT5TdGF0RmxhZ3Mg PSBQWEVfU1RBVEZMQUdTX0NPTU1BTkRfRkFJTEVEOw0KKyAgICB9DQorICB9DQorfQ0KKw0KKy8q Kg0KKyAgSW5pdGlhbGl6ZSBOZXR3b3JrIGludGVyZmFjZSBjb250cm9sbGVyIGRhdGEuDQorDQor ICBAcGFyYW1baW5dICAgICAgQ2RiICAgICBBIHBvaW50ZXIgdG8gdGhlIGNvbW1hbmQgZGVzY3Jp cHRvciBibG9jay4NCisgIEBwYXJhbVtpbiwgb3V0XSBOaWMgICAgIEEgcG9pbnRlciB0byB0aGUg TmV0d29yayBpbnRlcmZhY2UgY29udHJvbGxlciBkYXRhLg0KKw0KKyAgQHJldHZhbCBTdGF0dXMg IEEgdmFsdWUgb2YgUHhlIHN0YXRjb2RlLg0KKw0KKyoqLw0KK1VJTlQxNg0KK0luaXRpYWxpemUg KA0KKyAgSU4gICAgICBQWEVfQ0RCICAgKkNkYiwNCisgIElOIE9VVCAgTklDX0RBVEEgICpOaWMN CisgICkNCit7DQorICBVSU5UTiAgICAgICBTdGF0dXM7DQorICBVSU5UMzIgICAgICBJbmRleDsN CisgIEVGSV9TVEFUVVMgIEVmaVN0YXR1czsNCisNCisgIFN0YXR1cyA9IE1hcEl0ICgNCisgICAg ICAgICAgICAgTmljLA0KKyAgICAgICAgICAgICBOaWMtPlB4ZUluaXQuTWVtb3J5QWRkciwNCisg ICAgICAgICAgICAgTmljLT5QeGVJbml0Lk1lbW9yeUxlbmd0aCwNCisgICAgICAgICAgICAgVE9f QU5EX0ZST01fREVWSUNFLA0KKyAgICAgICAgICAgICAoVUlOVDY0KShVSU5UTikmTmljLT5NYXBw ZWRBZGRyDQorICAgICAgICAgICAgICk7DQorDQorICBpZiAoU3RhdHVzICE9IDApIHsNCisgICAg cmV0dXJuIChVSU5UMTYpU3RhdHVzOw0KKyAgfQ0KKw0KKyAgZm9yIChJbmRleCA9IDA7IEluZGV4 IDwgUFhFX0hXQUREUl9MRU5fRVRIRVI7IEluZGV4KyspIHsNCisgICAgTmljLT5QZXJtTm9kZUFk ZHJlc3NbSW5kZXhdID0gTmljLT5NYWNBZGRyLkFkZHJbSW5kZXhdOw0KKyAgfQ0KKw0KKyAgZm9y IChJbmRleCA9IDA7IEluZGV4IDwgUFhFX0hXQUREUl9MRU5fRVRIRVI7IEluZGV4KyspIHsNCisg ICAgTmljLT5DdXJyZW50Tm9kZUFkZHJlc3NbSW5kZXhdID0gTmljLT5QZXJtTm9kZUFkZHJlc3Nb SW5kZXhdOw0KKyAgfQ0KKw0KKyAgZm9yIChJbmRleCA9IDA7IEluZGV4IDwgUFhFX0hXQUREUl9M RU5fRVRIRVI7IEluZGV4KyspIHsNCisgICAgTmljLT5Ccm9hZGNhc3ROb2RlQWRkcmVzc1tJbmRl eF0gPSAweEZGOw0KKyAgfQ0KKw0KKyAgZm9yIChJbmRleCA9IFBYRV9IV0FERFJfTEVOX0VUSEVS OyBJbmRleCA8IFBYRV9NQUNfTEVOR1RIOyBJbmRleCsrKSB7DQorICAgIE5pYy0+Q3VycmVudE5v ZGVBZGRyZXNzW0luZGV4XSAgID0gMDsNCisgICAgTmljLT5QZXJtTm9kZUFkZHJlc3NbSW5kZXhd ICAgICAgPSAwOw0KKyAgICBOaWMtPkJyb2FkY2FzdE5vZGVBZGRyZXNzW0luZGV4XSA9IDA7DQor ICB9DQorDQorICBpZiAoTmljLT5Vc2JFdGgtPlVzYkV0aEluaXRpYWxpemUgIT0gTlVMTCkgew0K KyAgICBFZmlTdGF0dXMgPSBOaWMtPlVzYkV0aC0+VXNiRXRoSW5pdGlhbGl6ZSAoQ2RiLCBOaWMp Ow0KKyAgICBpZiAoRUZJX0VSUk9SIChFZmlTdGF0dXMpKSB7DQorICAgICAgcmV0dXJuIFBYRV9T VEFURkxBR1NfQ09NTUFORF9GQUlMRUQ7DQorICAgIH0NCisgIH0NCisNCisgIHJldHVybiAoVUlO VDE2KVN0YXR1czsNCit9DQorDQorLyoqDQorICBUaGlzIGNvbW1hbmQgcmVzZXRzIHRoZSBuZXR3 b3JrIGFkYXB0ZXIgYW5kIHJlaW5pdGlhbGl6ZXMgdGhlIFVOREkNCisgIHdpdGggdGhlIHNhbWUg cGFyYW1ldGVycyBwcm92aWRlZCBpbiB0aGUgSW5pdGlhbGl6ZSBjb21tYW5kLg0KKw0KKyAgQHBh cmFtW2luXSAgQ2RiICBBIHBvaW50ZXIgdG8gdGhlIGNvbW1hbmQgZGVzY3JpcHRvciBibG9jay4N CisgIEBwYXJhbVtpbl0gIE5pYyAgQSBwb2ludGVyIHRvIHRoZSBOZXR3b3JrIGludGVyZmFjZSBj b250cm9sbGVyIGRhdGEuDQorDQorKiovDQorVk9JRA0KK1VuZGlSZXNldCAoDQorICBJTiAgUFhF X0NEQiAgICpDZGIsDQorICBJTiAgTklDX0RBVEEgICpOaWMNCisgICkNCit7DQorICBFRklfU1RB VFVTICBTdGF0dXM7DQorDQorICBpZiAoKENkYi0+T3BDb2RlICE9IFBYRV9PUENPREVfUkVTRVQp IHx8DQorICAgICAgKENkYi0+U3RhdENvZGUgIT0gUFhFX1NUQVRDT0RFX0lOSVRJQUxJWkUpIHx8 DQorICAgICAgKENkYi0+U3RhdEZsYWdzICE9IFBYRV9TVEFURkxBR1NfSU5JVElBTElaRSkgfHwN CisgICAgICAoQ2RiLT5JRm51bSA+PSAoZ1B4ZS0+SUZjbnQgfCBnUHhlLT5JRmNudEV4dCA8PCA4 KSkgfHwNCisgICAgICAoQ2RiLT5DUEJzaXplICE9IFBYRV9DUEJTSVpFX05PVF9VU0VEKSB8fA0K KyAgICAgIChDZGItPkNQQmFkZHIgIT0gUFhFX0NQQkFERFJfTk9UX1VTRUQpIHx8DQorICAgICAg KENkYi0+REJzaXplICE9IFBYRV9EQlNJWkVfTk9UX1VTRUQpIHx8DQorICAgICAgKENkYi0+REJh ZGRyICE9IFBYRV9EQkFERFJfTk9UX1VTRUQpKQ0KKyAgew0KKyAgICBDZGItPlN0YXRGbGFncyA9 IFBYRV9TVEFURkxBR1NfQ09NTUFORF9GQUlMRUQ7DQorICAgIENkYi0+U3RhdENvZGUgID0gUFhF X1NUQVRDT0RFX0lOVkFMSURfQ0RCOw0KKyAgICByZXR1cm47DQorICB9IGVsc2Ugew0KKyAgICBD ZGItPlN0YXRGbGFncyA9IFBYRV9TVEFURkxBR1NfQ09NTUFORF9DT01QTEVURTsNCisgICAgQ2Ri LT5TdGF0Q29kZSAgPSBQWEVfU1RBVENPREVfU1VDQ0VTUzsNCisgIH0NCisNCisgIGlmIChOaWMt PlN0YXRlICE9IFBYRV9TVEFURkxBR1NfR0VUX1NUQVRFX0lOSVRJQUxJWkVEKSB7DQorICAgIENk Yi0+U3RhdENvZGUgID0gUFhFX1NUQVRDT0RFX05PVF9JTklUSUFMSVpFRDsNCisgICAgQ2RiLT5T dGF0RmxhZ3MgPSBQWEVfU1RBVEZMQUdTX0NPTU1BTkRfRkFJTEVEOw0KKyAgICByZXR1cm47DQor ICB9DQorDQorICBpZiAoKENkYi0+T3BGbGFncyAhPSBQWEVfT1BGTEFHU19OT1RfVVNFRCkgJiYN CisgICAgICAoQ2RiLT5PcEZsYWdzICE9IFBYRV9PUEZMQUdTX1JFU0VUX0RJU0FCTEVfSU5URVJS VVBUUykgJiYNCisgICAgICAoQ2RiLT5PcEZsYWdzICE9IFBYRV9PUEZMQUdTX1JFU0VUX0RJU0FC TEVfRklMVEVSUykpDQorICB7DQorICAgIENkYi0+U3RhdEZsYWdzID0gUFhFX1NUQVRGTEFHU19D T01NQU5EX0ZBSUxFRDsNCisgICAgQ2RiLT5TdGF0Q29kZSAgPSBQWEVfU1RBVENPREVfSU5WQUxJ RF9DREI7DQorICAgIHJldHVybjsNCisgIH0NCisNCisgIGlmICgoQ2RiLT5PcEZsYWdzICYgUFhF X09QRkxBR1NfUkVTRVRfRElTQUJMRV9GSUxURVJTKSA9PSAwKSB7DQorICAgIE5pYy0+UnhGaWx0 ZXIgPSBQWEVfT1BGTEFHU19SRUNFSVZFX0ZJTFRFUl9CUk9BRENBU1Q7DQorICB9DQorDQorICBp ZiAoKENkYi0+T3BGbGFncyAmIFBYRV9PUEZMQUdTX1JFU0VUX0RJU0FCTEVfSU5URVJSVVBUUykg IT0gMCkgew0KKyAgICBOaWMtPkludGVycnVwT3BGbGFnID0gMDsNCisgIH0NCisNCisgIGlmIChO aWMtPlVzYkV0aC0+VXNiRXRoVW5kaS5Vc2JFdGhVbmRpUmVzZXQgIT0gTlVMTCkgew0KKyAgICBT dGF0dXMgPSBOaWMtPlVzYkV0aC0+VXNiRXRoVW5kaS5Vc2JFdGhVbmRpUmVzZXQgKENkYiwgTmlj KTsNCisgICAgaWYgKEVGSV9FUlJPUiAoU3RhdHVzKSkgew0KKyAgICAgIENkYi0+U3RhdEZsYWdz ID0gUFhFX1NUQVRGTEFHU19DT01NQU5EX0ZBSUxFRDsNCisgICAgfQ0KKyAgfQ0KK30NCisNCisv KioNCisgIFRoZSBTaHV0ZG93biBjb21tYW5kIHJlc2V0cyB0aGUgbmV0d29yayBhZGFwdGVyIGFu ZCBsZWF2ZXMgaXQgaW4gYQ0KKyAgc2FmZSBzdGF0ZSBmb3IgYW5vdGhlciBkcml2ZXIgdG8gaW5p dGlhbGl6ZS4NCisNCisgIEBwYXJhbVtpbl0gICAgICBDZGIgIEEgcG9pbnRlciB0byB0aGUgY29t bWFuZCBkZXNjcmlwdG9yIGJsb2NrLg0KKyAgQHBhcmFtW2luLCBvdXRdIE5pYyAgQSBwb2ludGVy IHRvIHRoZSBOZXR3b3JrIGludGVyZmFjZSBjb250cm9sbGVyIGRhdGEuDQorDQorKiovDQorVk9J RA0KK1VuZGlTaHV0ZG93biAoDQorICBJTiAgICAgIFBYRV9DREIgICAqQ2RiLA0KKyAgSU4gT1VU ICBOSUNfREFUQSAgKk5pYw0KKyAgKQ0KK3sNCisgIEVGSV9TVEFUVVMgIFN0YXR1czsNCisNCisg IGlmICgoQ2RiLT5PcENvZGUgIT0gUFhFX09QQ09ERV9TSFVURE9XTikgfHwNCisgICAgICAoQ2Ri LT5TdGF0Q29kZSAhPSBQWEVfU1RBVENPREVfSU5JVElBTElaRSkgfHwNCisgICAgICAoQ2RiLT5T dGF0RmxhZ3MgIT0gUFhFX1NUQVRGTEFHU19JTklUSUFMSVpFKSB8fA0KKyAgICAgIChDZGItPklG bnVtID49IChnUHhlLT5JRmNudCB8IGdQeGUtPklGY250RXh0IDw8IDgpKSB8fA0KKyAgICAgIChD ZGItPkNQQnNpemUgIT0gUFhFX0NQQlNJWkVfTk9UX1VTRUQpIHx8DQorICAgICAgKENkYi0+Q1BC YWRkciAhPSBQWEVfQ1BCQUREUl9OT1RfVVNFRCkgfHwNCisgICAgICAoQ2RiLT5EQnNpemUgIT0g UFhFX0RCU0laRV9OT1RfVVNFRCkgfHwNCisgICAgICAoQ2RiLT5EQmFkZHIgIT0gUFhFX0RCQURE Ul9OT1RfVVNFRCkgfHwNCisgICAgICAoQ2RiLT5PcEZsYWdzICE9IFBYRV9PUEZMQUdTX05PVF9V U0VEKSkNCisgIHsNCisgICAgQ2RiLT5TdGF0RmxhZ3MgPSBQWEVfU1RBVEZMQUdTX0NPTU1BTkRf RkFJTEVEOw0KKyAgICBDZGItPlN0YXRDb2RlICA9IFBYRV9TVEFUQ09ERV9JTlZBTElEX0NEQjsN CisgICAgcmV0dXJuOw0KKyAgfSBlbHNlIHsNCisgICAgQ2RiLT5TdGF0RmxhZ3MgPSBQWEVfU1RB VEZMQUdTX0NPTU1BTkRfQ09NUExFVEU7DQorICAgIENkYi0+U3RhdENvZGUgID0gUFhFX1NUQVRD T0RFX1NVQ0NFU1M7DQorICB9DQorDQorICBpZiAoTmljLT5TdGF0ZSAhPSBQWEVfU1RBVEZMQUdT X0dFVF9TVEFURV9JTklUSUFMSVpFRCkgew0KKyAgICBDZGItPlN0YXRDb2RlICA9IFBYRV9TVEFU Q09ERV9OT1RfSU5JVElBTElaRUQ7DQorICAgIENkYi0+U3RhdEZsYWdzID0gUFhFX1NUQVRGTEFH U19DT01NQU5EX0ZBSUxFRDsNCisgICAgcmV0dXJuOw0KKyAgfQ0KKw0KKyAgTmljLT5DYW5UcmFu c21pdCA9IEZBTFNFOw0KKw0KKyAgTmljLT5TdGF0ZSA9IFBYRV9TVEFURkxBR1NfR0VUX1NUQVRF X1NUQVJURUQ7DQorDQorICBpZiAoTmljLT5Vc2JFdGgtPlVzYkV0aFVuZGkuVXNiRXRoVW5kaVNo dXRkb3duICE9IE5VTEwpIHsNCisgICAgU3RhdHVzID0gTmljLT5Vc2JFdGgtPlVzYkV0aFVuZGku VXNiRXRoVW5kaVNodXRkb3duIChDZGIsIE5pYyk7DQorICAgIGlmIChFRklfRVJST1IgKFN0YXR1 cykpIHsNCisgICAgICBDZGItPlN0YXRDb2RlICA9IFBYRV9TVEFUQ09ERV9OT1RfSU5JVElBTEla RUQ7DQorICAgICAgQ2RiLT5TdGF0RmxhZ3MgPSBQWEVfU1RBVEZMQUdTX0NPTU1BTkRfRkFJTEVE Ow0KKyAgICB9DQorICB9DQorfQ0KKw0KKy8qKg0KKyAgVGhlIEludGVycnVwdCBFbmFibGVzIGNv bW1hbmQgY2FuIGJlIHVzZWQgdG8gcmVhZCBhbmQvb3IgY2hhbmdlDQorICB0aGUgY3VycmVudCBl eHRlcm5hbCBpbnRlcnJ1cHQgZW5hYmxlIHNldHRpbmdzLg0KKw0KKyAgQHBhcmFtW2luXSAgQ2Ri ICBBIHBvaW50ZXIgdG8gdGhlIGNvbW1hbmQgZGVzY3JpcHRvciBibG9jay4NCisgIEBwYXJhbVtp bl0gIE5pYyAgQSBwb2ludGVyIHRvIHRoZSBOZXR3b3JrIGludGVyZmFjZSBjb250cm9sbGVyIGRh dGEuDQorDQorKiovDQorVk9JRA0KK1VuZGlJbnRlcnJ1cHRFbmFibGUgKA0KKyAgSU4gIFBYRV9D REIgICAqQ2RiLA0KKyAgSU4gIE5JQ19EQVRBICAqTmljDQorICApDQorew0KKyAgRUZJX1NUQVRV UyAgU3RhdHVzOw0KKw0KKyAgQ2RiLT5TdGF0Q29kZSA9IFBYRV9TVEFUQ09ERV9VTlNVUFBPUlRF RDsNCisgIGlmIChOaWMtPlVzYkV0aC0+VXNiRXRoVW5kaS5Vc2JFdGhVbmRpSW50ZXJydXB0RW5h YmxlICE9IE5VTEwpIHsNCisgICAgU3RhdHVzID0gTmljLT5Vc2JFdGgtPlVzYkV0aFVuZGkuVXNi RXRoVW5kaUludGVycnVwdEVuYWJsZSAoQ2RiLCBOaWMpOw0KKyAgICBpZiAoRUZJX0VSUk9SIChT dGF0dXMpKSB7DQorICAgICAgQ2RiLT5TdGF0RmxhZ3MgPSBQWEVfU1RBVEZMQUdTX0NPTU1BTkRf RkFJTEVEOw0KKyAgICB9IGVsc2Ugew0KKyAgICAgIENkYi0+U3RhdEZsYWdzID0gUFhFX1NUQVRG TEFHU19DT01NQU5EX0NPTVBMRVRFOw0KKyAgICAgIENkYi0+U3RhdENvZGUgID0gUFhFX1NUQVRD T0RFX1NVQ0NFU1M7DQorICAgIH0NCisgIH0NCit9DQorDQorLyoqDQorICBUaGlzIGNvbW1hbmQg aXMgdXNlZCB0byByZWFkIGFuZCBjaGFuZ2UgcmVjZWl2ZSBmaWx0ZXJzIGFuZCwNCisgIGlmIHN1 cHBvcnRlZCwgcmVhZCBhbmQgY2hhbmdlIHRoZSBtdWx0aWNhc3QgTUFDIGFkZHJlc3MgZmlsdGVy IGxpc3QuDQorDQorICBAcGFyYW1baW5dICBDZGIgIEEgcG9pbnRlciB0byB0aGUgY29tbWFuZCBk ZXNjcmlwdG9yIGJsb2NrLg0KKyAgQHBhcmFtW2luXSAgTmljICBBIHBvaW50ZXIgdG8gdGhlIE5l dHdvcmsgaW50ZXJmYWNlIGNvbnRyb2xsZXIgZGF0YS4NCisNCisqKi8NCitWT0lEDQorVW5kaVJl Y2VpdmVGaWx0ZXIgKA0KKyAgSU4gIFBYRV9DREIgICAqQ2RiLA0KKyAgSU4gIE5JQ19EQVRBICAq TmljDQorICApDQorew0KKyAgVUlOVDE2ICAgICAgICAgICAgICAgICAgTmV3RmlsdGVyOw0KKyAg UFhFX0RCX1JFQ0VJVkVfRklMVEVSUyAgKkRiOw0KKyAgRUZJX1NUQVRVUyAgICAgICAgICAgICAg U3RhdHVzOw0KKw0KKyAgaWYgKChDZGItPk9wQ29kZSAhPSBQWEVfT1BDT0RFX1JFQ0VJVkVfRklM VEVSUykgfHwNCisgICAgICAoQ2RiLT5TdGF0Q29kZSAhPSBQWEVfU1RBVENPREVfSU5JVElBTEla RSkgfHwNCisgICAgICAoQ2RiLT5TdGF0RmxhZ3MgIT0gUFhFX1NUQVRGTEFHU19JTklUSUFMSVpF KSB8fA0KKyAgICAgIChDZGItPklGbnVtID49IChnUHhlLT5JRmNudCB8IGdQeGUtPklGY250RXh0 IDw8IDgpKSkNCisgIHsNCisgICAgQ2RiLT5TdGF0RmxhZ3MgPSBQWEVfU1RBVEZMQUdTX0NPTU1B TkRfRkFJTEVEOw0KKyAgICBDZGItPlN0YXRDb2RlICA9IFBYRV9TVEFUQ09ERV9JTlZBTElEX0NE QjsNCisgICAgcmV0dXJuOw0KKyAgfSBlbHNlIHsNCisgICAgQ2RiLT5TdGF0RmxhZ3MgPSBQWEVf U1RBVEZMQUdTX0NPTU1BTkRfQ09NUExFVEU7DQorICAgIENkYi0+U3RhdENvZGUgID0gUFhFX1NU QVRDT0RFX1NVQ0NFU1M7DQorICB9DQorDQorICBpZiAoTmljLT5TdGF0ZSAhPSBQWEVfU1RBVEZM QUdTX0dFVF9TVEFURV9JTklUSUFMSVpFRCkgew0KKyAgICBDZGItPlN0YXRDb2RlICA9IFBYRV9T VEFUQ09ERV9OT1RfSU5JVElBTElaRUQ7DQorICAgIENkYi0+U3RhdEZsYWdzID0gUFhFX1NUQVRG TEFHU19DT01NQU5EX0ZBSUxFRDsNCisgICAgcmV0dXJuOw0KKyAgfQ0KKw0KKyAgTmV3RmlsdGVy ID0gKFVJTlQxNikoQ2RiLT5PcEZsYWdzICYgMHgxRik7DQorDQorICBzd2l0Y2ggKENkYi0+T3BG bGFncyAmIFBYRV9PUEZMQUdTX1JFQ0VJVkVfRklMVEVSX09QTUFTSykgew0KKyAgICBjYXNlIFBY RV9PUEZMQUdTX1JFQ0VJVkVfRklMVEVSX1JFQUQ6DQorICAgICAgaWYgKENkYi0+Q1BCc2l6ZSAh PSBQWEVfQ1BCU0laRV9OT1RfVVNFRCkgew0KKyAgICAgICAgQ2RiLT5TdGF0RmxhZ3MgPSBQWEVf U1RBVEZMQUdTX0NPTU1BTkRfRkFJTEVEOw0KKyAgICAgICAgQ2RiLT5TdGF0Q29kZSAgPSBQWEVf U1RBVENPREVfSU5WQUxJRF9DREI7DQorICAgICAgfQ0KKw0KKyAgICAgIGlmICgoTmV3RmlsdGVy ICYgUFhFX09QRkxBR1NfUkVDRUlWRV9GSUxURVJfUkVTRVRfTUNBU1RfTElTVCkgPT0gMCkgew0K KyAgICAgICAgaWYgKChDZGItPkRCc2l6ZSAhPSAwKSkgew0KKyAgICAgICAgICBEYiA9IChQWEVf REJfUkVDRUlWRV9GSUxURVJTICopKFVJTlROKUNkYi0+REJhZGRyOw0KKyAgICAgICAgICBDb3B5 TWVtIChEYiwgJk5pYy0+TWNhc3RMaXN0LCBOaWMtPk1jYXN0Q291bnQpOw0KKyAgICAgICAgfQ0K KyAgICAgIH0NCisNCisgICAgICBicmVhazsNCisNCisgICAgY2FzZSBQWEVfT1BGTEFHU19SRUNF SVZFX0ZJTFRFUl9FTkFCTEU6DQorICAgICAgaWYgKE5ld0ZpbHRlciA9PSAwKSB7DQorICAgICAg ICBDZGItPlN0YXRGbGFncyA9IFBYRV9TVEFURkxBR1NfQ09NTUFORF9GQUlMRUQ7DQorICAgICAg fQ0KKw0KKyAgICAgIGlmIChDZGItPkNQQnNpemUgIT0gMCkgew0KKyAgICAgICAgaWYgKCgoTmV3 RmlsdGVyICYgUFhFX09QRkxBR1NfUkVDRUlWRV9GSUxURVJfRklMVEVSRURfTVVMVElDQVNUKSA9 PSAwKSB8fA0KKyAgICAgICAgICAgICgoTmV3RmlsdGVyICYgUFhFX09QRkxBR1NfUkVDRUlWRV9G SUxURVJfUkVTRVRfTUNBU1RfTElTVCkgIT0gMCkgfHwNCisgICAgICAgICAgICAoKE5ld0ZpbHRl ciAmIFBYRV9PUEZMQUdTX1JFQ0VJVkVfRklMVEVSX0FMTF9NVUxUSUNBU1QpICE9IDApIHx8DQor ICAgICAgICAgICAgKChDZGItPkNQQnNpemUgJSBzaXplb2YgKFBYRV9NQUNfQUREUikpICE9IDAp KQ0KKyAgICAgICAgew0KKyAgICAgICAgICBDZGItPlN0YXRGbGFncyA9IFBYRV9TVEFURkxBR1Nf Q09NTUFORF9GQUlMRUQ7DQorICAgICAgICB9DQorICAgICAgfQ0KKw0KKyAgICAgIGlmICgoQ2Ri LT5PcEZsYWdzICYgUFhFX09QRkxBR1NfUkVDRUlWRV9GSUxURVJfRklMVEVSRURfTVVMVElDQVNU KSAhPSAwKSB7DQorICAgICAgICBpZiAoKChDZGItPk9wRmxhZ3MgJiBQWEVfT1BGTEFHU19SRUNF SVZFX0ZJTFRFUl9SRVNFVF9NQ0FTVF9MSVNUKSAhPSAwKSB8fA0KKyAgICAgICAgICAgICgoQ2Ri LT5PcEZsYWdzICYgUFhFX09QRkxBR1NfUkVDRUlWRV9GSUxURVJfQUxMX01VTFRJQ0FTVCkgIT0g MCkpDQorICAgICAgICB7DQorICAgICAgICAgIENkYi0+U3RhdEZsYWdzID0gUFhFX1NUQVRGTEFH U19DT01NQU5EX0ZBSUxFRDsNCisgICAgICAgIH0NCisNCisgICAgICAgIGlmICgoQ2RiLT5DUEJz aXplID09IDApKSB7DQorICAgICAgICAgIENkYi0+U3RhdEZsYWdzID0gUFhFX1NUQVRGTEFHU19D T01NQU5EX0ZBSUxFRDsNCisgICAgICAgIH0NCisgICAgICB9DQorDQorICAgICAgQ2RiLT5TdGF0 Q29kZSA9IFNldEZpbHRlciAoTmljLCBOZXdGaWx0ZXIsIENkYi0+Q1BCYWRkciwgQ2RiLT5DUEJz aXplKTsNCisgICAgICBicmVhazsNCisNCisgICAgY2FzZSBQWEVfT1BGTEFHU19SRUNFSVZFX0ZJ TFRFUl9ESVNBQkxFOg0KKyAgICAgIGlmIChDZGItPkNQQnNpemUgIT0gUFhFX0NQQlNJWkVfTk9U X1VTRUQpIHsNCisgICAgICAgIENkYi0+U3RhdEZsYWdzID0gUFhFX1NUQVRGTEFHU19DT01NQU5E X0ZBSUxFRDsNCisgICAgICAgIENkYi0+U3RhdENvZGUgID0gUFhFX1NUQVRDT0RFX0lOVkFMSURf Q0RCOw0KKyAgICAgIH0NCisNCisgICAgICBicmVhazsNCisNCisgICAgZGVmYXVsdDoNCisgICAg ICBDZGItPlN0YXRGbGFncyA9IFBYRV9TVEFURkxBR1NfQ09NTUFORF9GQUlMRUQ7DQorICAgICAg Q2RiLT5TdGF0Q29kZSAgPSBQWEVfU1RBVENPREVfSU5WQUxJRF9DREI7DQorICB9DQorDQorICBD ZGItPlN0YXRGbGFncyA9IChQWEVfU1RBVEZMQUdTKShDZGItPlN0YXRGbGFncyB8IE5pYy0+UnhG aWx0ZXIpOw0KKw0KKyAgaWYgKE5pYy0+VXNiRXRoLT5Vc2JFdGhVbmRpLlVzYkV0aFVuZGlSZWNl aXZlRmlsdGVyICE9IE5VTEwpIHsNCisgICAgU3RhdHVzID0gTmljLT5Vc2JFdGgtPlVzYkV0aFVu ZGkuVXNiRXRoVW5kaVJlY2VpdmVGaWx0ZXIgKENkYiwgTmljKTsNCisgICAgaWYgKEVGSV9FUlJP UiAoU3RhdHVzKSkgew0KKyAgICAgIENkYi0+U3RhdEZsYWdzID0gUFhFX1NUQVRGTEFHU19DT01N QU5EX0ZBSUxFRDsNCisgICAgfQ0KKyAgfQ0KK30NCisNCisvKioNCisgIFNldCBQWEUgcmVjZWl2 ZSBmaWx0ZXIuDQorDQorICBAcGFyYW1baW5dICBOaWMgICAgICAgICBBIHBvaW50ZXIgdG8gdGhl IE5ldHdvcmsgaW50ZXJmYWNlIGNvbnRyb2xsZXIgZGF0YS4NCisgIEBwYXJhbVtpbl0gIFNldEZp bHRlciAgIFBYRSByZWNlaXZlIGZpbHRlcg0KKyAgQHBhcmFtW2luXSAgQ3BiQWRkciAgICAgQ29t bWFuZCBQYXJhbWV0ZXIgQmxvY2sgQWRkcmVzcw0KKyAgQHBhcmFtW2luXSAgQ3BiU2l6ZSAgICAg Q29tbWFuZCBQYXJhbWV0ZXIgQmxvY2sgU2l6ZQ0KKw0KKyoqLw0KK1VJTlQxNg0KK1NldEZpbHRl ciAoDQorICBJTiAgTklDX0RBVEEgICpOaWMsDQorICBJTiAgVUlOVDE2ICAgIFNldEZpbHRlciwN CisgIElOICBVSU5UNjQgICAgQ3BiQWRkciwNCisgIElOICBVSU5UMzIgICAgQ3BiU2l6ZQ0KKyAg KQ0KK3sNCisgIEVGSV9TVEFUVVMgICAgICAgICAgICAgICAgICAgU3RhdHVzOw0KKyAgVUlOVDgg ICAgICAgICAgICAgICAgICAgICAgICAqTWNhc3RMaXN0Ow0KKyAgVUlOVDggICAgICAgICAgICAg ICAgICAgICAgICBDb3VudDsNCisgIFVJTlQ4ICAgICAgICAgICAgICAgICAgICAgICAgSW5kZXgx Ow0KKyAgVUlOVDggICAgICAgICAgICAgICAgICAgICAgICBJbmRleDI7DQorICBQWEVfQ1BCX1JF Q0VJVkVfRklMVEVSUyAgICAgICpDcGI7DQorICBVU0JfRVRIRVJORVRfRlVOX0RFU0NSSVBUT1Ig IFVzYkV0aEZ1bkRlc2NyaXB0b3I7DQorDQorICBDb3VudCA9IDA7DQorICBDcGIgICA9IChQWEVf Q1BCX1JFQ0VJVkVfRklMVEVSUyAqKShVSU5UTilDcGJBZGRyOw0KKw0KKyAgLy8gVGhlIENwYiBj b3VsZCBiZSBOVUxMLihyZWY6UFhFX0NQQkFERFJfTk9UX1VTRUQpDQorICBOaWMtPlJ4RmlsdGVy ID0gKFVJTlQ4KVNldEZpbHRlcjsNCisNCisgIGlmICgoKFNldEZpbHRlciAmIFBYRV9PUEZMQUdT X1JFQ0VJVkVfRklMVEVSX0ZJTFRFUkVEX01VTFRJQ0FTVCkgIT0gMCkgfHwgKENwYiAhPSBOVUxM KSkgew0KKyAgICBpZiAoQ3BiICE9IE5VTEwpIHsNCisgICAgICBOaWMtPk1jYXN0Q291bnQgPSAo VUlOVDgpKENwYlNpemUgLyBQWEVfTUFDX0xFTkdUSCk7DQorICAgICAgQ29weU1lbSAoJk5pYy0+ TWNhc3RMaXN0LCBDcGIsIE5pYy0+TWNhc3RDb3VudCk7DQorICAgIH0NCisNCisgICAgTmljLT5V c2JFdGgtPlVzYkV0aEZ1bkRlc2NyaXB0b3IgKE5pYy0+VXNiRXRoLCAmVXNiRXRoRnVuRGVzY3Jp cHRvcik7DQorICAgIGlmICgoVXNiRXRoRnVuRGVzY3JpcHRvci5OdW1iZXJNY0ZpbHRlcnMgPDwg MSkgPT0gMCkgew0KKyAgICAgIE5pYy0+UnhGaWx0ZXIgfD0gUFhFX09QRkxBR1NfUkVDRUlWRV9G SUxURVJfQUxMX01VTFRJQ0FTVDsNCisgICAgICBOaWMtPlVzYkV0aC0+U2V0VXNiRXRoUGFja2V0 RmlsdGVyIChOaWMtPlVzYkV0aCwgTmljLT5SeEZpbHRlcik7DQorICAgIH0gZWxzZSB7DQorICAg ICAgU3RhdHVzID0gZ0JTLT5BbGxvY2F0ZVBvb2wgKEVmaUJvb3RTZXJ2aWNlc0RhdGEsIE5pYy0+ TWNhc3RDb3VudCAqIDYsIChWT0lEICoqKSZNY2FzdExpc3QpOw0KKyAgICAgIGlmIChFRklfRVJS T1IgKFN0YXR1cykpIHsNCisgICAgICAgIHJldHVybiBQWEVfU1RBVENPREVfSU5WQUxJRF9QQVJB TUVURVI7DQorICAgICAgfQ0KKw0KKyAgICAgIGlmIChDcGIgIT0gTlVMTCkgew0KKyAgICAgICAg Zm9yIChJbmRleDEgPSAwOyBJbmRleDEgPCBOaWMtPk1jYXN0Q291bnQ7IEluZGV4MSsrKSB7DQor ICAgICAgICAgIGZvciAoSW5kZXgyID0gMDsgSW5kZXgyIDwgNjsgSW5kZXgyKyspIHsNCisgICAg ICAgICAgICBNY2FzdExpc3RbQ291bnQrK10gPSBDcGItPk1DYXN0TGlzdFtJbmRleDFdW0luZGV4 Ml07DQorICAgICAgICAgIH0NCisgICAgICAgIH0NCisgICAgICB9DQorDQorICAgICAgTmljLT5S eEZpbHRlciB8PSBQWEVfT1BGTEFHU19SRUNFSVZFX0ZJTFRFUl9GSUxURVJFRF9NVUxUSUNBU1Q7 DQorICAgICAgaWYgKENwYiAhPSBOVUxMKSB7DQorICAgICAgICBOaWMtPlVzYkV0aC0+U2V0VXNi RXRoTWNhc3RGaWx0ZXIgKE5pYy0+VXNiRXRoLCBOaWMtPk1jYXN0Q291bnQsIE1jYXN0TGlzdCk7 DQorICAgICAgfQ0KKw0KKyAgICAgIE5pYy0+VXNiRXRoLT5TZXRVc2JFdGhQYWNrZXRGaWx0ZXIg KE5pYy0+VXNiRXRoLCBOaWMtPlJ4RmlsdGVyKTsNCisgICAgICBGcmVlUG9vbCAoTWNhc3RMaXN0 KTsNCisgICAgfQ0KKyAgfQ0KKw0KKyAgcmV0dXJuIFBYRV9TVEFUQ09ERV9TVUNDRVNTOw0KK30N CisNCisvKioNCisgIFRoaXMgY29tbWFuZCBpcyB1c2VkIHRvIGdldCBjdXJyZW50IHN0YXRpb24g YW5kIGJyb2FkY2FzdCBNQUMgYWRkcmVzc2VzDQorICBhbmQsIGlmIHN1cHBvcnRlZCwgdG8gY2hh bmdlIHRoZSBjdXJyZW50IHN0YXRpb24gTUFDIGFkZHJlc3MuDQorDQorICBAcGFyYW1baW5dICBD ZGIgIEEgcG9pbnRlciB0byB0aGUgY29tbWFuZCBkZXNjcmlwdG9yIGJsb2NrLg0KKyAgQHBhcmFt W2luXSAgTmljICBBIHBvaW50ZXIgdG8gdGhlIE5ldHdvcmsgaW50ZXJmYWNlIGNvbnRyb2xsZXIg ZGF0YS4NCisNCisqKi8NCitWT0lEDQorVW5kaVN0YXRpb25BZGRyZXNzICgNCisgIElOICBQWEVf Q0RCICAgKkNkYiwNCisgIElOICBOSUNfREFUQSAgKk5pYw0KKyAgKQ0KK3sNCisgIFBYRV9DUEJf U1RBVElPTl9BRERSRVNTICAqQ3BiOw0KKyAgUFhFX0RCX1NUQVRJT05fQUREUkVTUyAgICpEYjsN CisgIFVJTlQxNiAgICAgICAgICAgICAgICAgICBJbmRleDsNCisgIEVGSV9TVEFUVVMgICAgICAg ICAgICAgICBTdGF0dXM7DQorDQorICBpZiAoKENkYi0+T3BDb2RlICE9IFBYRV9PUENPREVfU1RB VElPTl9BRERSRVNTKSB8fA0KKyAgICAgIChDZGItPlN0YXRDb2RlICE9IFBYRV9TVEFUQ09ERV9J TklUSUFMSVpFKSB8fA0KKyAgICAgIChDZGItPlN0YXRGbGFncyAhPSBQWEVfU1RBVEZMQUdTX0lO SVRJQUxJWkUpIHx8DQorICAgICAgKENkYi0+SUZudW0gPj0gKGdQeGUtPklGY250IHwgZ1B4ZS0+ SUZjbnRFeHQgPDwgOCkpIHx8DQorICAgICAgKENkYi0+REJzaXplICE9IHNpemVvZiAoUFhFX0RC X1NUQVRJT05fQUREUkVTUykpKQ0KKyAgew0KKyAgICBDZGItPlN0YXRGbGFncyA9IFBYRV9TVEFU RkxBR1NfQ09NTUFORF9GQUlMRUQ7DQorICAgIENkYi0+U3RhdENvZGUgID0gUFhFX1NUQVRDT0RF X0lOVkFMSURfQ0RCOw0KKyAgICByZXR1cm47DQorICB9IGVsc2Ugew0KKyAgICBDZGItPlN0YXRG bGFncyA9IFBYRV9TVEFURkxBR1NfQ09NTUFORF9DT01QTEVURTsNCisgICAgQ2RiLT5TdGF0Q29k ZSAgPSBQWEVfU1RBVENPREVfU1VDQ0VTUzsNCisgIH0NCisNCisgIGlmIChOaWMtPlN0YXRlICE9 IFBYRV9TVEFURkxBR1NfR0VUX1NUQVRFX0lOSVRJQUxJWkVEKSB7DQorICAgIENkYi0+U3RhdENv ZGUgID0gUFhFX1NUQVRDT0RFX05PVF9JTklUSUFMSVpFRDsNCisgICAgQ2RiLT5TdGF0RmxhZ3Mg PSBQWEVfU1RBVEZMQUdTX0NPTU1BTkRfRkFJTEVEOw0KKyAgICByZXR1cm47DQorICB9DQorDQor ICBpZiAoQ2RiLT5PcEZsYWdzID09IFBYRV9PUEZMQUdTX1NUQVRJT05fQUREUkVTU19SRVNFVCkg ew0KKyAgICBpZiAoQ29tcGFyZU1lbSAoJk5pYy0+Q3VycmVudE5vZGVBZGRyZXNzWzBdLCAmTmlj LT5QZXJtTm9kZUFkZHJlc3NbMF0sIFBYRV9NQUNfTEVOR1RIKSAhPSAwKSB7DQorICAgICAgZm9y IChJbmRleCA9IDA7IEluZGV4IDwgUFhFX01BQ19MRU5HVEg7IEluZGV4KyspIHsNCisgICAgICAg IE5pYy0+Q3VycmVudE5vZGVBZGRyZXNzW0luZGV4XSA9IE5pYy0+UGVybU5vZGVBZGRyZXNzW0lu ZGV4XTsNCisgICAgICB9DQorICAgIH0NCisgIH0NCisNCisgIGlmIChDZGItPkNQQmFkZHIgIT0g MCkgew0KKyAgICBDcGIgPSAoUFhFX0NQQl9TVEFUSU9OX0FERFJFU1MgKikoVUlOVE4pQ2RiLT5D UEJhZGRyOw0KKyAgICBmb3IgKEluZGV4ID0gMDsgSW5kZXggPCBQWEVfTUFDX0xFTkdUSDsgSW5k ZXgrKykgew0KKyAgICAgIE5pYy0+Q3VycmVudE5vZGVBZGRyZXNzW0luZGV4XSA9IENwYi0+U3Rh dGlvbkFkZHJbSW5kZXhdOw0KKyAgICB9DQorICB9DQorDQorICBpZiAoQ2RiLT5EQmFkZHIgIT0g MCkgew0KKyAgICBEYiA9IChQWEVfREJfU1RBVElPTl9BRERSRVNTICopKFVJTlROKUNkYi0+REJh ZGRyOw0KKyAgICBmb3IgKEluZGV4ID0gMDsgSW5kZXggPCBQWEVfTUFDX0xFTkdUSDsgSW5kZXgr Kykgew0KKyAgICAgIERiLT5TdGF0aW9uQWRkcltJbmRleF0gICA9IE5pYy0+Q3VycmVudE5vZGVB ZGRyZXNzW0luZGV4XTsNCisgICAgICBEYi0+QnJvYWRjYXN0QWRkcltJbmRleF0gPSBOaWMtPkJy b2FkY2FzdE5vZGVBZGRyZXNzW0luZGV4XTsNCisgICAgICBEYi0+UGVybWFuZW50QWRkcltJbmRl eF0gPSBOaWMtPlBlcm1Ob2RlQWRkcmVzc1tJbmRleF07DQorICAgIH0NCisgIH0NCisNCisgIGlm IChOaWMtPlVzYkV0aC0+VXNiRXRoVW5kaS5Vc2JFdGhVbmRpU3RhdGlvbkFkZHJlc3MgIT0gTlVM TCkgew0KKyAgICBTdGF0dXMgPSBOaWMtPlVzYkV0aC0+VXNiRXRoVW5kaS5Vc2JFdGhVbmRpU3Rh dGlvbkFkZHJlc3MgKENkYiwgTmljKTsNCisgICAgaWYgKEVGSV9FUlJPUiAoU3RhdHVzKSkgew0K KyAgICAgIENkYi0+U3RhdEZsYWdzID0gUFhFX1NUQVRGTEFHU19DT01NQU5EX0ZBSUxFRDsNCisg ICAgfQ0KKyAgfQ0KK30NCisNCisvKioNCisgIFRoaXMgY29tbWFuZCBpcyB1c2VkIHRvIHJlYWQg YW5kIGNsZWFyIHRoZSBOSUMgdHJhZmZpYyBzdGF0aXN0aWNzLg0KKw0KKyAgQHBhcmFtW2luXSAg Q2RiICBBIHBvaW50ZXIgdG8gdGhlIGNvbW1hbmQgZGVzY3JpcHRvciBibG9jay4NCisgIEBwYXJh bVtpbl0gIE5pYyAgQSBwb2ludGVyIHRvIHRoZSBOZXR3b3JrIGludGVyZmFjZSBjb250cm9sbGVy IGRhdGEuDQorDQorKiovDQorVk9JRA0KK1VuZGlTdGF0aXN0aWNzICgNCisgIElOICBQWEVfQ0RC ICAgKkNkYiwNCisgIElOICBOSUNfREFUQSAgKk5pYw0KKyAgKQ0KK3sNCisgIEVGSV9TVEFUVVMg IFN0YXR1czsNCisNCisgIGlmICgoQ2RiLT5PcENvZGUgIT0gUFhFX09QQ09ERV9TVEFUSVNUSUNT KSB8fA0KKyAgICAgIChDZGItPlN0YXRDb2RlICE9IFBYRV9TVEFUQ09ERV9JTklUSUFMSVpFKSB8 fA0KKyAgICAgIChDZGItPlN0YXRGbGFncyAhPSBQWEVfU1RBVEZMQUdTX0lOSVRJQUxJWkUpIHx8 DQorICAgICAgKENkYi0+SUZudW0gPj0gKGdQeGUtPklGY250IHwgZ1B4ZS0+SUZjbnRFeHQgPDwg OCkpIHx8DQorICAgICAgKENkYi0+Q1BCc2l6ZSAhPSBQWEVfQ1BCU0laRV9OT1RfVVNFRCkgfHwN CisgICAgICAoQ2RiLT5DUEJhZGRyICE9IFBYRV9DUEJBRERSX05PVF9VU0VEKSkNCisgIHsNCisg ICAgQ2RiLT5TdGF0RmxhZ3MgPSBQWEVfU1RBVEZMQUdTX0NPTU1BTkRfRkFJTEVEOw0KKyAgICBD ZGItPlN0YXRDb2RlICA9IFBYRV9TVEFUQ09ERV9JTlZBTElEX0NEQjsNCisgICAgcmV0dXJuOw0K KyAgfSBlbHNlIHsNCisgICAgQ2RiLT5TdGF0RmxhZ3MgPSBQWEVfU1RBVEZMQUdTX0NPTU1BTkRf Q09NUExFVEU7DQorICB9DQorDQorICBpZiAoTmljLT5TdGF0ZSAhPSBQWEVfU1RBVEZMQUdTX0dF VF9TVEFURV9JTklUSUFMSVpFRCkgew0KKyAgICBDZGItPlN0YXRDb2RlICA9IFBYRV9TVEFUQ09E RV9OT1RfSU5JVElBTElaRUQ7DQorICAgIENkYi0+U3RhdEZsYWdzID0gUFhFX1NUQVRGTEFHU19D T01NQU5EX0ZBSUxFRDsNCisgICAgcmV0dXJuOw0KKyAgfQ0KKw0KKyAgaWYgKChDZGItPk9wRmxh Z3MgIT0gUFhFX09QRkxBR1NfU1RBVElTVElDU19SRVNFVCkgJiYNCisgICAgICAoQ2RiLT5PcEZs YWdzICE9IFBYRV9PUEZMQUdTX1NUQVRJU1RJQ1NfUkVBRCkpDQorICB7DQorICAgIENkYi0+U3Rh dEZsYWdzID0gUFhFX1NUQVRGTEFHU19DT01NQU5EX0ZBSUxFRDsNCisgICAgQ2RiLT5TdGF0Q29k ZSAgPSBQWEVfU1RBVENPREVfSU5WQUxJRF9DREI7DQorICAgIHJldHVybjsNCisgIH0NCisNCisg IENkYi0+U3RhdENvZGUgPSBTdGF0aXN0aWNzIChOaWMsIENkYi0+REJhZGRyLCBDZGItPkRCc2l6 ZSk7DQorDQorICBpZiAoTmljLT5Vc2JFdGgtPlVzYkV0aFVuZGkuVXNiRXRoVW5kaVN0YXRpc3Rp Y3MgIT0gTlVMTCkgew0KKyAgICBTdGF0dXMgPSBOaWMtPlVzYkV0aC0+VXNiRXRoVW5kaS5Vc2JF dGhVbmRpU3RhdGlzdGljcyAoQ2RiLCBOaWMpOw0KKyAgICBpZiAoRUZJX0VSUk9SIChTdGF0dXMp KSB7DQorICAgICAgQ2RiLT5TdGF0RmxhZ3MgPSBQWEVfU1RBVEZMQUdTX0NPTU1BTkRfRkFJTEVE Ow0KKyAgICB9DQorICB9DQorfQ0KKw0KKy8qKg0KKyAgUmV0dXJuIGRhdGEgZm9yIERCIGRhdGEu DQorDQorICBAcGFyYW1baW5dICBOaWMgICAgICBBIHBvaW50ZXIgdG8gdGhlIE5ldHdvcmsgaW50 ZXJmYWNlIGNvbnRyb2xsZXIgZGF0YS4NCisgIEBwYXJhbVtpbl0gIERiQWRkciAgIERhdGEgQmxv Y2sgQWRkcmVzcy4NCisgIEBwYXJhbVtpbl0gIERiU2l6ZSAgIERhdGEgQmxvY2sgU2l6ZS4NCisN CisqKi8NCitVSU5UMTYNCitTdGF0aXN0aWNzICgNCisgIElOIE5JQ19EQVRBICAqTmljLA0KKyAg SU4gVUlOVDY0ICAgIERiQWRkciwNCisgIElOIFVJTlQxNiAgICBEYlNpemUNCisgICkNCit7DQor ICBQWEVfREJfU1RBVElTVElDUyAgKkRiU3RhdGlzdGljOw0KKyAgRUZJX1NUQVRVUyAgICAgICAg IFN0YXR1czsNCisNCisgIERiU3RhdGlzdGljID0gKFBYRV9EQl9TVEFUSVNUSUNTICopKFVJTlRO KURiQWRkcjsNCisNCisgIGlmIChEYlNpemUgPT0gMCkgew0KKyAgICByZXR1cm4gUFhFX1NUQVRD T0RFX1NVQ0NFU1M7DQorICB9DQorDQorICBEYlN0YXRpc3RpYy0+U3VwcG9ydGVkICA9IDB4ODAy Ow0KKyAgRGJTdGF0aXN0aWMtPkRhdGFbMHgwMV0gPSBOaWMtPlJ4RnJhbWU7DQorICBEYlN0YXRp c3RpYy0+RGF0YVsweDBCXSA9IE5pYy0+VHhGcmFtZTsNCisNCisgIGlmIChOaWMtPlVzYkV0aC0+ VXNiRXRoU3RhdGlzdGljcyAhPSBOVUxMKSB7DQorICAgIFN0YXR1cyA9IE5pYy0+VXNiRXRoLT5V c2JFdGhTdGF0aXN0aWNzIChOaWMsIERiQWRkciwgRGJTaXplKTsNCisgICAgaWYgKEVGSV9FUlJP UiAoU3RhdHVzKSkgew0KKyAgICAgIHJldHVybiBQWEVfU1RBVEZMQUdTX0NPTU1BTkRfRkFJTEVE Ow0KKyAgICB9DQorICB9DQorDQorICByZXR1cm4gUFhFX1NUQVRDT0RFX1NVQ0NFU1M7DQorfQ0K Kw0KKy8qKg0KKyAgVHJhbnNsYXRlIGEgbXVsdGljYXN0IElQdjQgb3IgSVB2NiBhZGRyZXNzIHRv IGEgbXVsdGljYXN0IE1BQyBhZGRyZXNzLg0KKw0KKyAgQHBhcmFtW2luLCBvdXRdIENkYiAgQSBw b2ludGVyIHRvIHRoZSBjb21tYW5kIGRlc2NyaXB0b3IgYmxvY2suDQorICBAcGFyYW1baW5dICAg ICAgTmljICBBIHBvaW50ZXIgdG8gdGhlIE5ldHdvcmsgaW50ZXJmYWNlIGNvbnRyb2xsZXIgZGF0 YS4NCisNCisqKi8NCitWT0lEDQorVW5kaU1jYXN0SXAyTWFjICgNCisgIElOIE9VVCAgUFhFX0NE QiAgICpDZGIsDQorICBJTiAgICAgIE5JQ19EQVRBICAqTmljDQorICApDQorew0KKyAgUFhFX0NQ Ql9NQ0FTVF9JUF9UT19NQUMgICpDcGI7DQorICBQWEVfREJfTUNBU1RfSVBfVE9fTUFDICAgKkRi Ow0KKyAgVUlOVDggICAgICAgICAgICAgICAgICAgICpUbXA7DQorICBFRklfU1RBVFVTICAgICAg ICAgICAgICAgU3RhdHVzOw0KKw0KKyAgaWYgKChDZGItPk9wQ29kZSAhPSBQWEVfT1BDT0RFX01D QVNUX0lQX1RPX01BQykgfHwNCisgICAgICAoQ2RiLT5TdGF0Q29kZSAhPSBQWEVfU1RBVENPREVf SU5JVElBTElaRSkgfHwNCisgICAgICAoQ2RiLT5TdGF0RmxhZ3MgIT0gUFhFX1NUQVRGTEFHU19J TklUSUFMSVpFKSB8fA0KKyAgICAgIChDZGItPklGbnVtID49IChnUHhlLT5JRmNudCB8IGdQeGUt PklGY250RXh0IDw8IDgpKSB8fA0KKyAgICAgIChDZGItPkNQQnNpemUgIT0gc2l6ZW9mIChQWEVf Q1BCX01DQVNUX0lQX1RPX01BQykpIHx8DQorICAgICAgKENkYi0+REJzaXplICE9IHNpemVvZiAo UFhFX0RCX01DQVNUX0lQX1RPX01BQykpKQ0KKyAgew0KKyAgICBDZGItPlN0YXRGbGFncyA9IFBY RV9TVEFURkxBR1NfQ09NTUFORF9GQUlMRUQ7DQorICAgIENkYi0+U3RhdENvZGUgID0gUFhFX1NU QVRDT0RFX0lOVkFMSURfQ0RCOw0KKyAgICByZXR1cm47DQorICB9IGVsc2Ugew0KKyAgICBDZGIt PlN0YXRGbGFncyA9IFBYRV9TVEFURkxBR1NfQ09NTUFORF9DT01QTEVURTsNCisgICAgQ2RiLT5T dGF0Q29kZSAgPSBQWEVfU1RBVENPREVfU1VDQ0VTUzsNCisgIH0NCisNCisgIGlmIChOaWMtPlN0 YXRlICE9IFBYRV9TVEFURkxBR1NfR0VUX1NUQVRFX0lOSVRJQUxJWkVEKSB7DQorICAgIENkYi0+ U3RhdENvZGUgID0gUFhFX1NUQVRDT0RFX05PVF9JTklUSUFMSVpFRDsNCisgICAgQ2RiLT5TdGF0 RmxhZ3MgPSBQWEVfU1RBVEZMQUdTX0NPTU1BTkRfRkFJTEVEOw0KKyAgICByZXR1cm47DQorICB9 DQorDQorICBDcGIgPSAoUFhFX0NQQl9NQ0FTVF9JUF9UT19NQUMgKikoVUlOVE4pQ2RiLT5DUEJh ZGRyOw0KKyAgRGIgID0gKFBYRV9EQl9NQ0FTVF9JUF9UT19NQUMgKikoVUlOVE4pQ2RiLT5EQmFk ZHI7DQorDQorICBpZiAoKENkYi0+T3BGbGFncyAmIFBYRV9PUEZMQUdTX01DQVNUX0lQVjZfVE9f TUFDKSAhPSAwKSB7DQorICAgIENkYi0+U3RhdEZsYWdzID0gUFhFX1NUQVRGTEFHU19DT01NQU5E X0ZBSUxFRDsNCisgICAgQ2RiLT5TdGF0Q29kZSAgPSBQWEVfU1RBVENPREVfVU5TVVBQT1JURUQ7 DQorICAgIHJldHVybjsNCisgIH0NCisNCisgIFRtcCA9IChVSU5UOCAqKSgmQ3BiLT5JUC5JUHY0 KTsNCisNCisgIGlmICgoVG1wWzBdICYgMHhGMCkgIT0gMHhFMCkgew0KKyAgICBDZGItPlN0YXRG bGFncyA9IFBYRV9TVEFURkxBR1NfQ09NTUFORF9GQUlMRUQ7DQorICAgIENkYi0+U3RhdENvZGUg ID0gUFhFX1NUQVRDT0RFX0lOVkFMSURfQ1BCOw0KKyAgfQ0KKw0KKyAgRGItPk1BQ1swXSA9IDB4 MDE7DQorICBEYi0+TUFDWzFdID0gMHgwMDsNCisgIERiLT5NQUNbMl0gPSAweDVFOw0KKyAgRGIt Pk1BQ1szXSA9IFRtcFsxXSAmIDB4N0Y7DQorICBEYi0+TUFDWzRdID0gVG1wWzJdOw0KKyAgRGIt Pk1BQ1s1XSA9IFRtcFszXTsNCisNCisgIGlmIChOaWMtPlVzYkV0aC0+VXNiRXRoVW5kaS5Vc2JF dGhVbmRpTWNhc3RJcDJNYWMgIT0gTlVMTCkgew0KKyAgICBTdGF0dXMgPSBOaWMtPlVzYkV0aC0+ VXNiRXRoVW5kaS5Vc2JFdGhVbmRpTWNhc3RJcDJNYWMgKENkYiwgTmljKTsNCisgICAgaWYgKEVG SV9FUlJPUiAoU3RhdHVzKSkgew0KKyAgICAgIENkYi0+U3RhdEZsYWdzID0gUFhFX1NUQVRGTEFH U19DT01NQU5EX0ZBSUxFRDsNCisgICAgfQ0KKyAgfQ0KK30NCisNCisvKioNCisgIFRoaXMgY29t bWFuZCBpcyB1c2VkIHRvIHJlYWQgYW5kIHdyaXRlIChpZiBzdXBwb3J0ZWQgYnkgTklDIEgvVykN CisgIG5vbnZvbGF0aWxlIHN0b3JhZ2Ugb24gdGhlIE5JQy4NCisNCisgIEBwYXJhbVtpbl0gIENk YiAgQSBwb2ludGVyIHRvIHRoZSBjb21tYW5kIGRlc2NyaXB0b3IgYmxvY2suDQorICBAcGFyYW1b aW5dICBOaWMgIEEgcG9pbnRlciB0byB0aGUgTmV0d29yayBpbnRlcmZhY2UgY29udHJvbGxlciBk YXRhLg0KKw0KKyoqLw0KK1ZPSUQNCitVbmRpTnZEYXRhICgNCisgIElOICBQWEVfQ0RCICAgKkNk YiwNCisgIElOICBOSUNfREFUQSAgKk5pYw0KKyAgKQ0KK3sNCisgIEVGSV9TVEFUVVMgIFN0YXR1 czsNCisNCisgIENkYi0+U3RhdENvZGUgPSBQWEVfU1RBVENPREVfVU5TVVBQT1JURUQ7DQorICBp ZiAoTmljLT5Vc2JFdGgtPlVzYkV0aFVuZGkuVXNiRXRoVW5kaU52RGF0YSAhPSBOVUxMKSB7DQor ICAgIFN0YXR1cyA9IE5pYy0+VXNiRXRoLT5Vc2JFdGhVbmRpLlVzYkV0aFVuZGlOdkRhdGEgKENk YiwgTmljKTsNCisgICAgaWYgKEVGSV9FUlJPUiAoU3RhdHVzKSkgew0KKyAgICAgIENkYi0+U3Rh dEZsYWdzID0gUFhFX1NUQVRGTEFHU19DT01NQU5EX0ZBSUxFRDsNCisgICAgfSBlbHNlIHsNCisg ICAgICBDZGItPlN0YXRGbGFncyA9IFBYRV9TVEFURkxBR1NfQ09NTUFORF9DT01QTEVURTsNCisg ICAgICBDZGItPlN0YXRDb2RlICA9IFBYRV9TVEFUQ09ERV9TVUNDRVNTOw0KKyAgICB9DQorICB9 DQorfQ0KKw0KKy8qKg0KKyAgVGhpcyBjb21tYW5kIHJldHVybnMgdGhlIGN1cnJlbnQgaW50ZXJy dXB0IHN0YXR1cyBhbmQvb3IgdGhlDQorICB0cmFuc21pdHRlZCBidWZmZXIgYWRkcmVzc2VzIGFu ZCB0aGUgY3VycmVudCBtZWRpYSBzdGF0dXMuDQorDQorICBAcGFyYW1baW5dICBDZGIgIEEgcG9p bnRlciB0byB0aGUgY29tbWFuZCBkZXNjcmlwdG9yIGJsb2NrLg0KKyAgQHBhcmFtW2luXSAgTmlj ICBBIHBvaW50ZXIgdG8gdGhlIE5ldHdvcmsgaW50ZXJmYWNlIGNvbnRyb2xsZXIgZGF0YS4NCisN CisqKi8NCitWT0lEDQorVW5kaUdldFN0YXR1cyAoDQorICBJTiAgUFhFX0NEQiAgICpDZGIsDQor ICBJTiAgTklDX0RBVEEgICpOaWMNCisgICkNCit7DQorICBQWEVfREJfR0VUX1NUQVRVUyAgKkRi Ow0KKyAgUFhFX0RCX0dFVF9TVEFUVVMgIFRtcEdldFN0YXR1czsNCisgIFVJTlQxNiAgICAgICAg ICAgICBOdW1FbnRyaWVzOw0KKyAgVUlOVE4gICAgICAgICAgICAgIEluZGV4Ow0KKyAgRUZJX1NU QVRVUyAgICAgICAgIFN0YXR1czsNCisNCisgIGlmICgoQ2RiLT5PcENvZGUgIT0gUFhFX09QQ09E RV9HRVRfU1RBVFVTKSB8fA0KKyAgICAgIChDZGItPlN0YXRDb2RlICE9IFBYRV9TVEFUQ09ERV9J TklUSUFMSVpFKSB8fA0KKyAgICAgIChDZGItPlN0YXRGbGFncyAhPSBQWEVfU1RBVEZMQUdTX0lO SVRJQUxJWkUpIHx8DQorICAgICAgKENkYi0+SUZudW0gPj0gKGdQeGUtPklGY250IHwgZ1B4ZS0+ SUZjbnRFeHQgPDwgOCkpIHx8DQorICAgICAgKENkYi0+Q1BCc2l6ZSAhPSBQWEVfQ1BCU0laRV9O T1RfVVNFRCkgfHwNCisgICAgICAoQ2RiLT5DUEJhZGRyICE9IFBYRV9DUEJBRERSX05PVF9VU0VE KSkNCisgIHsNCisgICAgQ2RiLT5TdGF0RmxhZ3MgPSBQWEVfU1RBVEZMQUdTX0NPTU1BTkRfRkFJ TEVEOw0KKyAgICBDZGItPlN0YXRDb2RlICA9IFBYRV9TVEFUQ09ERV9JTlZBTElEX0NEQjsNCisg ICAgcmV0dXJuOw0KKyAgfSBlbHNlIHsNCisgICAgQ2RiLT5TdGF0RmxhZ3MgPSBQWEVfU1RBVEZM QUdTX0NPTU1BTkRfQ09NUExFVEU7DQorICAgIENkYi0+U3RhdENvZGUgID0gUFhFX1NUQVRDT0RF X1NVQ0NFU1M7DQorICB9DQorDQorICBpZiAoTmljLT5TdGF0ZSAhPSBQWEVfU1RBVEZMQUdTX0dF VF9TVEFURV9JTklUSUFMSVpFRCkgew0KKyAgICBDZGItPlN0YXRDb2RlICA9IFBYRV9TVEFUQ09E RV9OT1RfSU5JVElBTElaRUQ7DQorICAgIENkYi0+U3RhdEZsYWdzID0gUFhFX1NUQVRGTEFHU19D T01NQU5EX0ZBSUxFRDsNCisgICAgcmV0dXJuOw0KKyAgfQ0KKw0KKyAgVG1wR2V0U3RhdHVzLlJ4 RnJhbWVMZW4gPSAwOw0KKyAgVG1wR2V0U3RhdHVzLnJlc2VydmVkICAgPSAwOw0KKyAgRGIgICAg ICAgICAgICAgICAgICAgICAgPSAoUFhFX0RCX0dFVF9TVEFUVVMgKikoVUlOVE4pQ2RiLT5EQmFk ZHI7DQorDQorICBpZiAoKENkYi0+REJzaXplID4gMCkgJiYgKENkYi0+REJzaXplIDwgc2l6ZW9m IChVSU5UMzIpICogMikpIHsNCisgICAgQ29weU1lbSAoRGIsICZUbXBHZXRTdGF0dXMsIENkYi0+ REJzaXplKTsNCisgIH0gZWxzZSB7DQorICAgIENvcHlNZW0gKERiLCAmVG1wR2V0U3RhdHVzLCBz aXplb2YgKFVJTlQzMikgKiAyKTsNCisgIH0NCisNCisgIGlmICgoQ2RiLT5PcEZsYWdzICYgUFhF X09QRkxBR1NfR0VUX1RSQU5TTUlUVEVEX0JVRkZFUlMpICE9IDApIHsNCisgICAgaWYgKENkYi0+ REJzaXplID09IDApIHsNCisgICAgICBDZGItPlN0YXRGbGFncyA9IFBYRV9TVEFURkxBR1NfQ09N TUFORF9GQUlMRUQ7DQorICAgICAgQ2RiLT5TdGF0Q29kZSAgPSBQWEVfU1RBVENPREVfSU5WQUxJ RF9DREI7DQorICAgICAgcmV0dXJuOw0KKyAgICB9DQorDQorICAgIE51bUVudHJpZXMgID0gQ2Ri LT5EQnNpemUgLSBzaXplb2YgKFVJTlQ2NCk7DQorICAgIENkYi0+REJzaXplID0gc2l6ZW9mIChV SU5UMzIpICogMjsNCisNCisgICAgZm9yIChJbmRleCA9IDA7IE51bUVudHJpZXMgPj0gc2l6ZW9m IChVSU5UNjQpOyBJbmRleCsrLCBOdW1FbnRyaWVzIC09IHNpemVvZiAoVUlOVDY0KSkgew0KKyAg ICAgIGlmIChOaWMtPlR4QnVmZmVyQ291bnQgPiAwKSB7DQorICAgICAgICBOaWMtPlR4QnVmZmVy Q291bnQtLTsNCisgICAgICAgIERiLT5UeEJ1ZmZlcltJbmRleF0gPSBOaWMtPk1lZGlhSGVhZGVy W05pYy0+VHhCdWZmZXJDb3VudF07DQorICAgICAgfQ0KKyAgICB9DQorICB9DQorDQorICBpZiAo KENkYi0+T3BGbGFncyAmIFBYRV9PUEZMQUdTX0dFVF9JTlRFUlJVUFRfU1RBVFVTKSAhPSAwKSB7 DQorICAgIGlmIChOaWMtPlJlY2VpdmVTdGF0dXMgIT0gMCkgew0KKyAgICAgIENkYi0+U3RhdEZs YWdzIHw9IFBYRV9TVEFURkxBR1NfR0VUX1NUQVRVU19SRUNFSVZFOw0KKyAgICB9DQorICB9DQor DQorICBpZiAoKE5pYy0+UmVxdWVzdC5SZXF1ZXN0ID09IFVTQl9DRENfTkVUV09SS19DT05ORUNU SU9OKSAmJiAoTmljLT5SZXF1ZXN0LlZhbHVlID09IE5FVFdPUktfRElTQ09OTkVDVCkpIHsNCisg ICAgTmljLT5DYWJsZURldGVjdCA9IDA7DQorICB9IGVsc2UgaWYgKChOaWMtPlJlcXVlc3QuUmVx dWVzdCA9PSBVU0JfQ0RDX05FVFdPUktfQ09OTkVDVElPTikgJiYgKE5pYy0+UmVxdWVzdC5WYWx1 ZSA9PSBORVRXT1JLX0NPTk5FQ1RFRCkpIHsNCisgICAgTmljLT5DYWJsZURldGVjdCA9IDE7DQor ICB9DQorDQorICBpZiAoKENkYi0+T3BGbGFncyAmIFBYRV9PUEZMQUdTX0dFVF9NRURJQV9TVEFU VVMpICE9IDApIHsNCisgICAgaWYgKE5pYy0+Q2FibGVEZXRlY3QgPT0gMCkgew0KKyAgICAgIENk Yi0+U3RhdEZsYWdzIHw9IFBYRV9TVEFURkxBR1NfR0VUX1NUQVRVU19OT19NRURJQTsNCisgICAg fQ0KKyAgfQ0KKw0KKyAgaWYgKE5pYy0+VXNiRXRoLT5Vc2JFdGhVbmRpLlVzYkV0aFVuZGlHZXRT dGF0dXMgIT0gTlVMTCkgew0KKyAgICBTdGF0dXMgPSBOaWMtPlVzYkV0aC0+VXNiRXRoVW5kaS5V c2JFdGhVbmRpR2V0U3RhdHVzIChDZGIsIE5pYyk7DQorICAgIGlmIChFRklfRVJST1IgKFN0YXR1 cykpIHsNCisgICAgICBDZGItPlN0YXRGbGFncyA9IFBYRV9TVEFURkxBR1NfQ09NTUFORF9GQUlM RUQ7DQorICAgIH0NCisgIH0NCit9DQorDQorLyoqDQorICBUaGlzIGNvbW1hbmQgaXMgdXNlZCB0 byBmaWxsIHRoZSBtZWRpYSBoZWFkZXIocykgaW4gdHJhbnNtaXQgcGFja2V0KHMpLg0KKw0KKyAg QHBhcmFtW2luXSAgQ2RiICBBIHBvaW50ZXIgdG8gdGhlIGNvbW1hbmQgZGVzY3JpcHRvciBibG9j ay4NCisgIEBwYXJhbVtpbl0gIE5pYyAgQSBwb2ludGVyIHRvIHRoZSBOZXR3b3JrIGludGVyZmFj ZSBjb250cm9sbGVyIGRhdGEuDQorDQorKiovDQorVk9JRA0KK1VuZGlGaWxsSGVhZGVyICgNCisg IElOICBQWEVfQ0RCICAgKkNkYiwNCisgIElOICBOSUNfREFUQSAgKk5pYw0KKyAgKQ0KK3sNCisg IFBYRV9DUEJfRklMTF9IRUFERVIgICAgICAgICAgICAgKkNwYkZpbGxIZWFkZXI7DQorICBQWEVf Q1BCX0ZJTExfSEVBREVSX0ZSQUdNRU5URUQgICpDcGJGaWxsOw0KKyAgRXRoZXJuZXRIZWFkZXIg ICAgICAgICAgICAgICAgICAqTWFjSGVhZGVyOw0KKyAgVUlOVE4gICAgICAgICAgICAgICAgICAg ICAgICAgICBJbmRleDsNCisgIEVGSV9TVEFUVVMgICAgICAgICAgICAgICAgICAgICAgU3RhdHVz Ow0KKw0KKyAgaWYgKChDZGItPk9wQ29kZSAhPSBQWEVfT1BDT0RFX0ZJTExfSEVBREVSKSB8fA0K KyAgICAgIChDZGItPlN0YXRDb2RlICE9IFBYRV9TVEFUQ09ERV9JTklUSUFMSVpFKSB8fA0KKyAg ICAgIChDZGItPlN0YXRGbGFncyAhPSBQWEVfU1RBVEZMQUdTX0lOSVRJQUxJWkUpIHx8DQorICAg ICAgKENkYi0+SUZudW0gPj0gKGdQeGUtPklGY250IHwgZ1B4ZS0+SUZjbnRFeHQgPDwgOCkpIHx8 DQorICAgICAgKENkYi0+Q1BCc2l6ZSAhPSBzaXplb2YgKFBYRV9DUEJfRklMTF9IRUFERVJfRlJB R01FTlRFRCkpIHx8DQorICAgICAgKENkYi0+REJzaXplICE9IFBYRV9EQlNJWkVfTk9UX1VTRUQp IHx8DQorICAgICAgKENkYi0+REJhZGRyICE9IFBYRV9EQkFERFJfTk9UX1VTRUQpKQ0KKyAgew0K KyAgICBDZGItPlN0YXRGbGFncyA9IFBYRV9TVEFURkxBR1NfQ09NTUFORF9GQUlMRUQ7DQorICAg IENkYi0+U3RhdENvZGUgID0gUFhFX1NUQVRDT0RFX0lOVkFMSURfQ0RCOw0KKyAgICByZXR1cm47 DQorICB9IGVsc2Ugew0KKyAgICBDZGItPlN0YXRGbGFncyA9IFBYRV9TVEFURkxBR1NfQ09NTUFO RF9DT01QTEVURTsNCisgICAgQ2RiLT5TdGF0Q29kZSAgPSBQWEVfU1RBVENPREVfU1VDQ0VTUzsN CisgIH0NCisNCisgIGlmIChOaWMtPlN0YXRlICE9IFBYRV9TVEFURkxBR1NfR0VUX1NUQVRFX0lO SVRJQUxJWkVEKSB7DQorICAgIENkYi0+U3RhdENvZGUgID0gUFhFX1NUQVRDT0RFX05PVF9JTklU SUFMSVpFRDsNCisgICAgQ2RiLT5TdGF0RmxhZ3MgPSBQWEVfU1RBVEZMQUdTX0NPTU1BTkRfRkFJ TEVEOw0KKyAgICByZXR1cm47DQorICB9DQorDQorICBpZiAoQ2RiLT5DUEJzaXplID09IFBYRV9D UEJTSVpFX05PVF9VU0VEKSB7DQorICAgIENkYi0+U3RhdEZsYWdzID0gUFhFX1NUQVRGTEFHU19D T01NQU5EX0ZBSUxFRDsNCisgICAgQ2RiLT5TdGF0Q29kZSAgPSBQWEVfU1RBVENPREVfSU5WQUxJ RF9DREI7DQorICAgIHJldHVybjsNCisgIH0NCisNCisgIGlmICgoQ2RiLT5PcEZsYWdzICYgUFhF X09QRkxBR1NfRklMTF9IRUFERVJfRlJBR01FTlRFRCkgIT0gMCkgew0KKyAgICBDcGJGaWxsID0g KFBYRV9DUEJfRklMTF9IRUFERVJfRlJBR01FTlRFRCAqKShVSU5UTilDZGItPkNQQmFkZHI7DQor DQorICAgIGlmICgoQ3BiRmlsbC0+RnJhZ0NudCA9PSAwKSB8fCAoQ3BiRmlsbC0+RnJhZ0Rlc2Nb MF0uRnJhZ0xlbiA8IFBYRV9NQUNfSEVBREVSX0xFTl9FVEhFUikpIHsNCisgICAgICBDZGItPlN0 YXRGbGFncyA9IFBYRV9TVEFURkxBR1NfQ09NTUFORF9GQUlMRUQ7DQorICAgICAgQ2RiLT5TdGF0 Q29kZSAgPSBQWEVfU1RBVENPREVfSU5WQUxJRF9DREI7DQorICAgICAgcmV0dXJuOw0KKyAgICB9 DQorDQorICAgIE1hY0hlYWRlciAgICAgICAgICAgPSAoRXRoZXJuZXRIZWFkZXIgKikoVUlOVE4p Q3BiRmlsbC0+RnJhZ0Rlc2NbMF0uRnJhZ0FkZHI7DQorICAgIE1hY0hlYWRlci0+UHJvdG9jb2wg PSBDcGJGaWxsLT5Qcm90b2NvbDsNCisNCisgICAgZm9yIChJbmRleCA9IDA7IEluZGV4IDwgUFhF X0hXQUREUl9MRU5fRVRIRVI7IEluZGV4KyspIHsNCisgICAgICBNYWNIZWFkZXItPkRlc3RBZGRy W0luZGV4XSA9IENwYkZpbGwtPkRlc3RBZGRyW0luZGV4XTsNCisgICAgICBNYWNIZWFkZXItPlNy Y0FkZHJbSW5kZXhdICA9IENwYkZpbGwtPlNyY0FkZHJbSW5kZXhdOw0KKyAgICB9DQorICB9IGVs c2Ugew0KKyAgICBDcGJGaWxsSGVhZGVyID0gKFBYRV9DUEJfRklMTF9IRUFERVIgKikoVUlOVE4p Q2RiLT5DUEJhZGRyOw0KKw0KKyAgICBNYWNIZWFkZXIgICAgICAgICAgID0gKEV0aGVybmV0SGVh ZGVyICopKFVJTlROKUNwYkZpbGxIZWFkZXItPk1lZGlhSGVhZGVyOw0KKyAgICBNYWNIZWFkZXIt PlByb3RvY29sID0gQ3BiRmlsbEhlYWRlci0+UHJvdG9jb2w7DQorDQorICAgIGZvciAoSW5kZXgg PSAwOyBJbmRleCA8IFBYRV9IV0FERFJfTEVOX0VUSEVSOyBJbmRleCsrKSB7DQorICAgICAgTWFj SGVhZGVyLT5EZXN0QWRkcltJbmRleF0gPSBDcGJGaWxsSGVhZGVyLT5EZXN0QWRkcltJbmRleF07 DQorICAgICAgTWFjSGVhZGVyLT5TcmNBZGRyW0luZGV4XSAgPSBDcGJGaWxsSGVhZGVyLT5TcmNB ZGRyW0luZGV4XTsNCisgICAgfQ0KKyAgfQ0KKw0KKyAgaWYgKE5pYy0+VXNiRXRoLT5Vc2JFdGhV bmRpLlVzYkV0aFVuZGlGaWxsSGVhZGVyICE9IE5VTEwpIHsNCisgICAgU3RhdHVzID0gTmljLT5V c2JFdGgtPlVzYkV0aFVuZGkuVXNiRXRoVW5kaUZpbGxIZWFkZXIgKENkYiwgTmljKTsNCisgICAg aWYgKEVGSV9FUlJPUiAoU3RhdHVzKSkgew0KKyAgICAgIENkYi0+U3RhdEZsYWdzID0gUFhFX1NU QVRGTEFHU19DT01NQU5EX0ZBSUxFRDsNCisgICAgfQ0KKyAgfQ0KK30NCisNCisvKioNCisgIFRo ZSBUcmFuc21pdCBjb21tYW5kIGlzIHVzZWQgdG8gcGxhY2UgYSBwYWNrZXQgaW50byB0aGUgdHJh bnNtaXQgcXVldWUuDQorDQorICBAcGFyYW1baW5dICBDZGIgIEEgcG9pbnRlciB0byB0aGUgY29t bWFuZCBkZXNjcmlwdG9yIGJsb2NrLg0KKyAgQHBhcmFtW2luXSAgTmljICBBIHBvaW50ZXIgdG8g dGhlIE5ldHdvcmsgaW50ZXJmYWNlIGNvbnRyb2xsZXIgZGF0YS4NCisNCisqKi8NCitWT0lEDQor VW5kaVRyYW5zbWl0ICgNCisgIElOICBQWEVfQ0RCICAgKkNkYiwNCisgIElOICBOSUNfREFUQSAg Kk5pYw0KKyAgKQ0KK3sNCisgIEVGSV9TVEFUVVMgIFN0YXR1czsNCisNCisgIGlmICgoQ2RiLT5P cENvZGUgIT0gUFhFX09QQ09ERV9UUkFOU01JVCkgfHwNCisgICAgICAoQ2RiLT5TdGF0Q29kZSAh PSBQWEVfU1RBVENPREVfSU5JVElBTElaRSkgfHwNCisgICAgICAoQ2RiLT5TdGF0RmxhZ3MgIT0g UFhFX1NUQVRGTEFHU19JTklUSUFMSVpFKSB8fA0KKyAgICAgIChDZGItPklGbnVtID49IChnUHhl LT5JRmNudCB8IGdQeGUtPklGY250RXh0IDw8IDgpKSB8fA0KKyAgICAgIChDZGItPkNQQnNpemUg IT0gc2l6ZW9mIChQWEVfQ1BCX1RSQU5TTUlUKSkgfHwNCisgICAgICAoQ2RiLT5EQnNpemUgIT0g UFhFX0RCU0laRV9OT1RfVVNFRCkgfHwNCisgICAgICAoQ2RiLT5EQmFkZHIgIT0gUFhFX0RCQURE Ul9OT1RfVVNFRCkpDQorICB7DQorICAgIENkYi0+U3RhdEZsYWdzID0gUFhFX1NUQVRGTEFHU19D T01NQU5EX0ZBSUxFRDsNCisgICAgQ2RiLT5TdGF0Q29kZSAgPSBQWEVfU1RBVENPREVfSU5WQUxJ RF9DREI7DQorICAgIHJldHVybjsNCisgIH0gZWxzZSB7DQorICAgIENkYi0+U3RhdEZsYWdzID0g UFhFX1NUQVRGTEFHU19DT01NQU5EX0NPTVBMRVRFOw0KKyAgICBDZGItPlN0YXRDb2RlICA9IFBY RV9TVEFUQ09ERV9TVUNDRVNTOw0KKyAgfQ0KKw0KKyAgaWYgKE5pYy0+U3RhdGUgIT0gUFhFX1NU QVRGTEFHU19HRVRfU1RBVEVfSU5JVElBTElaRUQpIHsNCisgICAgQ2RiLT5TdGF0RmxhZ3MgPSBQ WEVfU1RBVEZMQUdTX0NPTU1BTkRfRkFJTEVEOw0KKyAgICBDZGItPlN0YXRDb2RlICA9IFBYRV9T VEFUQ09ERV9OT1RfSU5JVElBTElaRUQ7DQorICAgIHJldHVybjsNCisgIH0NCisNCisgIGlmIChD ZGItPkNQQnNpemUgPT0gUFhFX0NQQlNJWkVfTk9UX1VTRUQpIHsNCisgICAgQ2RiLT5TdGF0Rmxh Z3MgPSBQWEVfU1RBVEZMQUdTX0NPTU1BTkRfRkFJTEVEOw0KKyAgICBDZGItPlN0YXRDb2RlICA9 IFBYRV9TVEFUQ09ERV9JTlZBTElEX0NEQjsNCisgICAgcmV0dXJuOw0KKyAgfQ0KKw0KKyAgaWYg KE5pYy0+VXNiRXRoLT5Vc2JFdGhVbmRpLlVzYkV0aFVuZGlUcmFuc21pdCAhPSBOVUxMKSB7DQor ICAgIFN0YXR1cyA9IE5pYy0+VXNiRXRoLT5Vc2JFdGhVbmRpLlVzYkV0aFVuZGlUcmFuc21pdCAo Q2RiLCBOaWMpOw0KKyAgICBpZiAoRUZJX0VSUk9SIChTdGF0dXMpKSB7DQorICAgICAgQ2RiLT5T dGF0RmxhZ3MgPSBQWEVfU1RBVEZMQUdTX0NPTU1BTkRfRkFJTEVEOw0KKyAgICB9DQorDQorICAg IHJldHVybjsNCisgIH0NCisNCisgIENkYi0+U3RhdENvZGUgPSBUcmFuc21pdCAoQ2RiLCBOaWMs IENkYi0+Q1BCYWRkciwgQ2RiLT5PcEZsYWdzKTsNCisNCisgIGlmIChDZGItPlN0YXRDb2RlICE9 IFBYRV9TVEFUQ09ERV9TVUNDRVNTKSB7DQorICAgIENkYi0+U3RhdEZsYWdzID0gUFhFX1NUQVRG TEFHU19DT01NQU5EX0ZBSUxFRDsNCisgIH0NCit9DQorDQorLyoqDQorICBVc2UgVVNCIEV0aGVy bmV0IFByb3RvY29sIEJ1bGsgb3V0IGNvbW1hbmQgdG8gdHJhbnNtaXQgZGF0YS4NCisNCisgIEBw YXJhbVtpbl0gICAgICBDZGIgICAgICBBIHBvaW50ZXIgdG8gdGhlIGNvbW1hbmQgZGVzY3JpcHRv ciBibG9jay4NCisgIEBwYXJhbVtpbiwgb3V0XSBOaWMgICAgICBBIHBvaW50ZXIgdG8gdGhlIE5l dHdvcmsgaW50ZXJmYWNlIGNvbnRyb2xsZXIgZGF0YS4NCisgIEBwYXJhbVtpbl0gICAgICBDcGJB ZGRyICBDb21tYW5kIFBhcmFtZXRlciBCbG9jayBBZGRyZXNzLg0KKyAgQHBhcmFtW2luXSAgICAg IE9wRmxhZ3MgIE9wZXJhdGlvbiBGbGFncy4NCisNCisqKi8NCitVSU5UMTYNCitUcmFuc21pdCAo DQorICBJTiAgICAgIFBYRV9DREIgICAqQ2RiLA0KKyAgSU4gT1VUICBOSUNfREFUQSAgKk5pYywN CisgIElOICAgICAgVUlOVDY0ICAgIENwYkFkZHIsDQorICBJTiAgICAgIFVJTlQxNiAgICBPcEZs YWdzDQorICApDQorew0KKyAgRUZJX1NUQVRVUyAgICAgICAgU3RhdHVzOw0KKyAgUFhFX0NQQl9U UkFOU01JVCAgKkNwYjsNCisgIFVJTlQ2NCAgICAgICAgICAgIEJ1bGtPdXREYXRhOw0KKyAgVUlO VE4gICAgICAgICAgICAgRGF0YUxlbmd0aDsNCisgIFVJTlROICAgICAgICAgICAgIFRyYW5zbWl0 TGVuZ3RoOw0KKyAgVUlOVE4gICAgICAgICAgICAgTWFwOw0KKyAgVUlOVDMyICAgICAgICAgICAg Q291bnRlcjsNCisgIFVJTlQxNiAgICAgICAgICAgIFN0YXRDb2RlOw0KKw0KKyAgQnVsa091dERh dGEgPSAwOw0KKyAgQ291bnRlciAgICAgPSAwOw0KKyAgQ3BiICAgICAgICAgPSAoUFhFX0NQQl9U UkFOU01JVCAqKShVSU5UTilDcGJBZGRyOw0KKw0KKyAgaWYgKE5pYy0+Q2FuVHJhbnNtaXQpIHsN CisgICAgcmV0dXJuIFBYRV9TVEFUQ09ERV9CVVNZOw0KKyAgfQ0KKw0KKyAgTmljLT5DYW5UcmFu c21pdCA9IFRSVUU7DQorDQorICBpZiAoKE9wRmxhZ3MgJiBQWEVfT1BGTEFHU19UUkFOU01JVF9G UkFHTUVOVEVEKSAhPSAwKSB7DQorICAgIHJldHVybiBQWEVfU1RBVENPREVfSU5WQUxJRF9QQVJB TUVURVI7DQorICB9DQorDQorICBNYXAgPSBNYXBJdCAoDQorICAgICAgICAgIE5pYywNCisgICAg ICAgICAgQ3BiLT5GcmFtZUFkZHIsDQorICAgICAgICAgIENwYi0+RGF0YUxlbiArIChVSU5UMzIp Q3BiLT5NZWRpYWhlYWRlckxlbiwNCisgICAgICAgICAgVE9fREVWSUNFLA0KKyAgICAgICAgICAo VUlOVDY0KShVSU5UTikmQnVsa091dERhdGENCisgICAgICAgICAgKTsNCisNCisgIGlmIChNYXAg IT0gMCkgew0KKyAgICBOaWMtPkNhblRyYW5zbWl0ID0gRkFMU0U7DQorICAgIHJldHVybiBQWEVf U1RBVENPREVfSU5WQUxJRF9QQVJBTUVURVI7DQorICB9DQorDQorICBpZiAoTmljLT5UeEJ1ZmZl ckNvdW50IDwgTUFYX1hNSVRfQlVGRkVSUykgew0KKyAgICBOaWMtPk1lZGlhSGVhZGVyW05pYy0+ VHhCdWZmZXJDb3VudF0gPSBDcGItPkZyYW1lQWRkcjsNCisgICAgTmljLT5UeEJ1ZmZlckNvdW50 Kys7DQorICB9DQorDQorICBEYXRhTGVuZ3RoID0gKFVJTlROKShDcGItPkRhdGFMZW4gKyAoVUlO VDMyKUNwYi0+TWVkaWFoZWFkZXJMZW4pOw0KKw0KKyAgd2hpbGUgKDEpIHsNCisgICAgaWYgKENv dW50ZXIgPj0gMykgew0KKyAgICAgIFN0YXRDb2RlID0gUFhFX1NUQVRDT0RFX0JVU1k7DQorICAg ICAgYnJlYWs7DQorICAgIH0NCisNCisgICAgVHJhbnNtaXRMZW5ndGggPSBEYXRhTGVuZ3RoOw0K Kw0KKyAgICBTdGF0dXMgPSBOaWMtPlVzYkV0aC0+VXNiRXRoVHJhbnNtaXQgKENkYiwgTmljLT5V c2JFdGgsIChWT0lEICopKFVJTlROKUJ1bGtPdXREYXRhLCAmVHJhbnNtaXRMZW5ndGgpOw0KKyAg ICBpZiAoRUZJX0VSUk9SIChTdGF0dXMpKSB7DQorICAgICAgU3RhdENvZGUgPSAgUFhFX1NUQVRG TEFHU19DT01NQU5EX0ZBSUxFRDsNCisgICAgfQ0KKw0KKyAgICBpZiAoU3RhdHVzID09IEVGSV9J TlZBTElEX1BBUkFNRVRFUikgew0KKyAgICAgIFN0YXRDb2RlID0gUFhFX1NUQVRDT0RFX0lOVkFM SURfUEFSQU1FVEVSOw0KKyAgICAgIGJyZWFrOw0KKyAgICB9DQorDQorICAgIGlmIChTdGF0dXMg PT0gRUZJX0RFVklDRV9FUlJPUikgew0KKyAgICAgIFN0YXRDb2RlID0gUFhFX1NUQVRDT0RFX0RF VklDRV9GQUlMVVJFOw0KKyAgICAgIGJyZWFrOw0KKyAgICB9DQorDQorICAgIGlmICghRUZJX0VS Uk9SIChTdGF0dXMpKSB7DQorICAgICAgTmljLT5UeEZyYW1lKys7DQorICAgICAgU3RhdENvZGUg PSBQWEVfU1RBVENPREVfU1VDQ0VTUzsNCisgICAgICBicmVhazsNCisgICAgfQ0KKw0KKyAgICBD b3VudGVyKys7DQorICB9DQorDQorICBVbk1hcEl0ICgNCisgICAgTmljLA0KKyAgICBDcGItPkZy YW1lQWRkciwNCisgICAgQ3BiLT5EYXRhTGVuICsgKFVJTlQzMilDcGItPk1lZGlhaGVhZGVyTGVu LA0KKyAgICBUT19ERVZJQ0UsDQorICAgIEJ1bGtPdXREYXRhDQorICAgICk7DQorDQorICBOaWMt PkNhblRyYW5zbWl0ID0gRkFMU0U7DQorDQorICByZXR1cm4gU3RhdENvZGU7DQorfQ0KKw0KKy8q Kg0KKyAgV2hlbiB0aGUgbmV0d29yayBhZGFwdGVyIGhhcyByZWNlaXZlZCBhIGZyYW1lLCB0aGlz IGNvbW1hbmQgaXMgdXNlZA0KKyAgdG8gY29weSB0aGUgZnJhbWUgaW50byBkcml2ZXIvYXBwbGlj YXRpb24gc3RvcmFnZS4NCisNCisgIEBwYXJhbVtpbl0gIENkYiAgQSBwb2ludGVyIHRvIHRoZSBj b21tYW5kIGRlc2NyaXB0b3IgYmxvY2suDQorICBAcGFyYW1baW5dICBOaWMgIEEgcG9pbnRlciB0 byB0aGUgTmV0d29yayBpbnRlcmZhY2UgY29udHJvbGxlciBkYXRhLg0KKw0KKyoqLw0KK1ZPSUQN CitVbmRpUmVjZWl2ZSAoDQorICBJTiAgUFhFX0NEQiAgICpDZGIsDQorICBJTiAgTklDX0RBVEEg ICpOaWMNCisgICkNCit7DQorICBFRklfU1RBVFVTICBTdGF0dXM7DQorDQorICBpZiAoKENkYi0+ T3BDb2RlICE9IFBYRV9PUENPREVfUkVDRUlWRSkgfHwNCisgICAgICAoQ2RiLT5TdGF0Q29kZSAh PSBQWEVfU1RBVENPREVfSU5JVElBTElaRSkgfHwNCisgICAgICAoQ2RiLT5TdGF0RmxhZ3MgIT0g UFhFX1NUQVRGTEFHU19JTklUSUFMSVpFKSB8fA0KKyAgICAgIChDZGItPklGbnVtID49IChnUHhl LT5JRmNudCB8IGdQeGUtPklGY250RXh0IDw8IDgpKSB8fA0KKyAgICAgIChDZGItPkNQQnNpemUg IT0gc2l6ZW9mIChQWEVfQ1BCX1JFQ0VJVkUpKSB8fA0KKyAgICAgIChDZGItPkRCc2l6ZSAhPSBz aXplb2YgKFBYRV9EQl9SRUNFSVZFKSkgfHwNCisgICAgICAoQ2RiLT5PcEZsYWdzICE9IFBYRV9P UEZMQUdTX05PVF9VU0VEKSkNCisgIHsNCisgICAgQ2RiLT5TdGF0RmxhZ3MgPSBQWEVfU1RBVEZM QUdTX0NPTU1BTkRfRkFJTEVEOw0KKyAgICBDZGItPlN0YXRDb2RlICA9IFBYRV9TVEFUQ09ERV9J TlZBTElEX0NEQjsNCisgICAgcmV0dXJuOw0KKyAgfSBlbHNlIHsNCisgICAgQ2RiLT5TdGF0Rmxh Z3MgPSBQWEVfU1RBVEZMQUdTX0NPTU1BTkRfQ09NUExFVEU7DQorICAgIENkYi0+U3RhdENvZGUg ID0gUFhFX1NUQVRDT0RFX1NVQ0NFU1M7DQorICB9DQorDQorICBpZiAoTmljLT5TdGF0ZSAhPSBQ WEVfU1RBVEZMQUdTX0dFVF9TVEFURV9JTklUSUFMSVpFRCkgew0KKyAgICBDZGItPlN0YXRGbGFn cyA9IFBYRV9TVEFURkxBR1NfQ09NTUFORF9GQUlMRUQ7DQorICAgIENkYi0+U3RhdENvZGUgID0g UFhFX1NUQVRDT0RFX05PVF9JTklUSUFMSVpFRDsNCisgICAgcmV0dXJuOw0KKyAgfQ0KKw0KKyAg aWYgKE5pYy0+VXNiRXRoLT5Vc2JFdGhVbmRpLlVzYkV0aFVuZGlSZWNlaXZlICE9IE5VTEwpIHsN CisgICAgU3RhdHVzID0gTmljLT5Vc2JFdGgtPlVzYkV0aFVuZGkuVXNiRXRoVW5kaVJlY2VpdmUg KENkYiwgTmljKTsNCisgICAgaWYgKEVGSV9FUlJPUiAoU3RhdHVzKSkgew0KKyAgICAgIENkYi0+ U3RhdEZsYWdzID0gUFhFX1NUQVRGTEFHU19DT01NQU5EX0ZBSUxFRDsNCisgICAgfQ0KKw0KKyAg ICByZXR1cm47DQorICB9DQorDQorICBDZGItPlN0YXRDb2RlID0gUmVjZWl2ZSAoQ2RiLCBOaWMs IENkYi0+Q1BCYWRkciwgQ2RiLT5EQmFkZHIpOw0KKw0KKyAgaWYgKENkYi0+U3RhdENvZGUgIT0g UFhFX1NUQVRDT0RFX1NVQ0NFU1MpIHsNCisgICAgQ2RiLT5TdGF0RmxhZ3MgPSBQWEVfU1RBVEZM QUdTX0NPTU1BTkRfRkFJTEVEOw0KKyAgfQ0KK30NCisNCisvKioNCisgIFVzZSBVU0IgRXRoZXJu ZXQgUHJvdG9jb2wgQnVsayBpbiBjb21tYW5kIHRvIHJlY2VpdmUgZGF0YS4NCisNCisgIEBwYXJh bVtpbl0gICAgICBDZGIgICAgICBBIHBvaW50ZXIgdG8gdGhlIGNvbW1hbmQgZGVzY3JpcHRvciBi bG9jay4NCisgIEBwYXJhbVtpbiwgb3V0XSBOaWMgICAgICBBIHBvaW50ZXIgdG8gdGhlIE5ldHdv cmsgaW50ZXJmYWNlIGNvbnRyb2xsZXIgZGF0YS4NCisgIEBwYXJhbVtpbl0gICAgICBDcGJBZGRy ICBDb21tYW5kIFBhcmFtZXRlciBCbG9jayBBZGRyZXNzLg0KKyAgQHBhcmFtW2luLCBvdXRdIERi QWRkciAgIERhdGEgQmxvY2sgQWRkcmVzcy4NCisNCisqKi8NCitVSU5UMTYNCitSZWNlaXZlICgN CisgIElOIFBYRV9DREIgICAgICAgKkNkYiwNCisgIElOIE9VVCBOSUNfREFUQSAgKk5pYywNCisg IElOIFVJTlQ2NCAgICAgICAgQ3BiQWRkciwNCisgIElOIE9VVCBVSU5UNjQgICAgRGJBZGRyDQor ICApDQorew0KKyAgRUZJX1NUQVRVUyAgICAgICBTdGF0dXM7DQorICBVSU5UTiAgICAgICAgICAg IEluZGV4Ow0KKyAgUFhFX0ZSQU1FX1RZUEUgICBGcmFtZVR5cGU7DQorICBQWEVfQ1BCX1JFQ0VJ VkUgICpDcGI7DQorICBQWEVfREJfUkVDRUlWRSAgICpEYjsNCisgIE5JQ19ERVZJQ0UgICAgICAg Kk5pY0RldmljZTsNCisgIFVJTlQ4ICAgICAgICAgICAgKkJ1bGtJbkRhdGE7DQorICBVSU5UTiAg ICAgICAgICAgIERhdGFMZW5ndGg7DQorICBFdGhlcm5ldEhlYWRlciAgICpIZWFkZXI7DQorICBF RklfVFBMICAgICAgICAgIE9yaWdpbmFsVHBsOw0KKw0KKyAgRnJhbWVUeXBlICA9IFBYRV9GUkFN RV9UWVBFX05PTkU7DQorICBOaWNEZXZpY2UgID0gVU5ESV9ERVZfRlJPTV9OSUMgKE5pYyk7DQor ICBCdWxrSW5EYXRhID0gTmljRGV2aWNlLT5SZWNlaXZlQnVmZmVyOw0KKyAgRGF0YUxlbmd0aCA9 IChVSU5UTilOaWMtPk1heFNlZ21lbnRTaXplOw0KKyAgQ3BiICAgICAgICA9IChQWEVfQ1BCX1JF Q0VJVkUgKikoVUlOVE4pQ3BiQWRkcjsNCisgIERiICAgICAgICAgPSAoUFhFX0RCX1JFQ0VJVkUg KikoVUlOVE4pRGJBZGRyOw0KKw0KKyAgaWYgKCFCdWxrSW5EYXRhKSB7DQorICAgIHJldHVybiBQ WEVfU1RBVENPREVfSU5WQUxJRF9QQVJBTUVURVI7DQorICB9DQorDQorICBpZiAoKE5pYy0+UmF0 ZUxpbWl0aW5nQ3JlZGl0Q291bnQgPT0gMCkgJiYgKE5pYy0+UmF0ZUxpbWl0aW5nRW5hYmxlID09 IFRSVUUpKSB7DQorICAgIHJldHVybiBQWEVfU1RBVENPREVfTk9fREFUQTsNCisgIH0NCisNCisg IFN0YXR1cyA9IE5pYy0+VXNiRXRoLT5Vc2JFdGhSZWNlaXZlIChDZGIsIE5pYy0+VXNiRXRoLCAo Vk9JRCAqKUJ1bGtJbkRhdGEsICZEYXRhTGVuZ3RoKTsNCisgIGlmIChFRklfRVJST1IgKFN0YXR1 cykpIHsNCisgICAgTmljLT5SZWNlaXZlU3RhdHVzID0gMDsNCisgICAgaWYgKE5pYy0+UmF0ZUxp bWl0aW5nRW5hYmxlID09IFRSVUUpIHsNCisgICAgICBPcmlnaW5hbFRwbCA9IGdCUy0+UmFpc2VU UEwgKFRQTF9OT1RJRlkpOw0KKyAgICAgIGlmIChOaWMtPlJhdGVMaW1pdGluZ0NyZWRpdENvdW50 ICE9IDApIHsNCisgICAgICAgIE5pYy0+UmF0ZUxpbWl0aW5nQ3JlZGl0Q291bnQtLTsNCisgICAg ICB9DQorDQorICAgICAgZ0JTLT5SZXN0b3JlVFBMIChPcmlnaW5hbFRwbCk7DQorICAgIH0NCisN CisgICAgcmV0dXJuIFBYRV9TVEFUQ09ERV9OT19EQVRBOw0KKyAgfQ0KKw0KKyAgTmljLT5SeEZy YW1lKys7DQorDQorICBpZiAoRGF0YUxlbmd0aCAhPSAwKSB7DQorICAgIGlmIChEYXRhTGVuZ3Ro ID4gQ3BiLT5CdWZmZXJMZW4pIHsNCisgICAgICBEYXRhTGVuZ3RoID0gKFVJTlROKUNwYi0+QnVm ZmVyTGVuOw0KKyAgICB9DQorDQorICAgIENvcHlNZW0gKChVSU5UOCAqKShVSU5UTilDcGItPkJ1 ZmZlckFkZHIsIChVSU5UOCAqKUJ1bGtJbkRhdGEsIERhdGFMZW5ndGgpOw0KKw0KKyAgICBIZWFk ZXIgPSAoRXRoZXJuZXRIZWFkZXIgKilCdWxrSW5EYXRhOw0KKw0KKyAgICBEYi0+RnJhbWVMZW4g ICAgICAgPSAoVUlOVDMyKURhdGFMZW5ndGg7DQorICAgIERiLT5NZWRpYUhlYWRlckxlbiA9IFBY RV9NQUNfSEVBREVSX0xFTl9FVEhFUjsNCisNCisgICAgZm9yIChJbmRleCA9IDA7IEluZGV4IDwg UFhFX0hXQUREUl9MRU5fRVRIRVI7IEluZGV4KyspIHsNCisgICAgICBpZiAoSGVhZGVyLT5EZXN0 QWRkcltJbmRleF0gIT0gTmljLT5DdXJyZW50Tm9kZUFkZHJlc3NbSW5kZXhdKSB7DQorICAgICAg ICBicmVhazsNCisgICAgICB9DQorICAgIH0NCisNCisgICAgaWYgKEluZGV4ID49IFBYRV9IV0FE RFJfTEVOX0VUSEVSKSB7DQorICAgICAgRnJhbWVUeXBlID0gUFhFX0ZSQU1FX1RZUEVfVU5JQ0FT VDsNCisgICAgfSBlbHNlIHsNCisgICAgICBmb3IgKEluZGV4ID0gMDsgSW5kZXggPCBQWEVfSFdB RERSX0xFTl9FVEhFUjsgSW5kZXgrKykgew0KKyAgICAgICAgaWYgKEhlYWRlci0+RGVzdEFkZHJb SW5kZXhdICE9IE5pYy0+QnJvYWRjYXN0Tm9kZUFkZHJlc3NbSW5kZXhdKSB7DQorICAgICAgICAg IGJyZWFrOw0KKyAgICAgICAgfQ0KKyAgICAgIH0NCisNCisgICAgICBpZiAoSW5kZXggPj0gUFhF X0hXQUREUl9MRU5fRVRIRVIpIHsNCisgICAgICAgIEZyYW1lVHlwZSA9IFBYRV9GUkFNRV9UWVBF X0JST0FEQ0FTVDsNCisgICAgICB9IGVsc2Ugew0KKyAgICAgICAgaWYgKChIZWFkZXItPkRlc3RB ZGRyWzBdICYgMSkgPT0gMSkgew0KKyAgICAgICAgICBGcmFtZVR5cGUgPSBQWEVfRlJBTUVfVFlQ RV9GSUxURVJFRF9NVUxUSUNBU1Q7DQorICAgICAgICB9IGVsc2Ugew0KKyAgICAgICAgICBGcmFt ZVR5cGUgPSBQWEVfRlJBTUVfVFlQRV9QUk9NSVNDVU9VUzsNCisgICAgICAgIH0NCisgICAgICB9 DQorICAgIH0NCisNCisgICAgRGItPlR5cGUgICAgID0gRnJhbWVUeXBlOw0KKyAgICBEYi0+UHJv dG9jb2wgPSBIZWFkZXItPlByb3RvY29sOw0KKw0KKyAgICBmb3IgKEluZGV4ID0gMDsgSW5kZXgg PCBQWEVfSFdBRERSX0xFTl9FVEhFUjsgSW5kZXgrKykgew0KKyAgICAgIERiLT5TcmNBZGRyW0lu ZGV4XSAgPSBIZWFkZXItPlNyY0FkZHJbSW5kZXhdOw0KKyAgICAgIERiLT5EZXN0QWRkcltJbmRl eF0gPSBIZWFkZXItPkRlc3RBZGRyW0luZGV4XTsNCisgICAgfQ0KKyAgfQ0KKw0KKyAgaWYgKEZy YW1lVHlwZSA9PSBQWEVfRlJBTUVfVFlQRV9OT05FKSB7DQorICAgIE5pYy0+UmVjZWl2ZVN0YXR1 cyA9IDA7DQorICB9IGVsc2Ugew0KKyAgICBOaWMtPlJlY2VpdmVTdGF0dXMgPSAxOw0KKyAgfQ0K Kw0KKyAgcmV0dXJuIFBYRV9TVEFUQ09ERV9TVUNDRVNTOw0KK30NCisNCisvKioNCisgIEZpbGwg b3V0IFBYRSBTVyBVTkRJIHN0cnVjdHVyZS4NCisNCisgIEBwYXJhbVtvdXRdICBQeGVTdyAgICAg IEEgcG9pbnRlciB0byB0aGUgUFhFIFNXIFVOREkgc3RydWN0dXJlLg0KKw0KKyoqLw0KK1ZPSUQN CitQeGVTdHJ1Y3RJbml0ICgNCisgIE9VVCBQWEVfU1dfVU5ESSAgKlB4ZVN3DQorICApDQorew0K KyAgUHhlU3ctPlNpZ25hdHVyZSA9IFBYRV9ST01JRF9TSUdOQVRVUkU7DQorICBQeGVTdy0+TGVu ICAgICAgID0gKFVJTlQ4KXNpemVvZiAoUFhFX1NXX1VOREkpOw0KKyAgUHhlU3ctPkZ1ZGdlICAg ICA9IDA7DQorICBQeGVTdy0+SUZjbnQgICAgID0gMDsNCisgIFB4ZVN3LT5JRmNudEV4dCAgPSAw Ow0KKyAgUHhlU3ctPlJldiAgICAgICA9IFBYRV9ST01JRF9SRVY7DQorICBQeGVTdy0+TWFqb3JW ZXIgID0gUFhFX1JPTUlEX01BSk9SVkVSOw0KKyAgUHhlU3ctPk1pbm9yVmVyICA9IFBYRV9ST01J RF9NSU5PUlZFUjsNCisgIFB4ZVN3LT5yZXNlcnZlZDEgPSAwOw0KKw0KKyAgUHhlU3ctPkltcGxl bWVudGF0aW9uID0gUFhFX1JPTUlEX0lNUF9TV19WSVJUX0FERFIgfA0KKyAgICAgICAgICAgICAg ICAgICAgICAgICAgUFhFX1JPTUlEX0lNUF9GUkFHX1NVUFBPUlRFRCB8DQorICAgICAgICAgICAg ICAgICAgICAgICAgICBQWEVfUk9NSURfSU1QX0NNRF9MSU5LX1NVUFBPUlRFRCB8DQorICAgICAg ICAgICAgICAgICAgICAgICAgICBQWEVfUk9NSURfSU1QX1NUQVRJT05fQUREUl9TRVRUQUJMRSB8 DQorICAgICAgICAgICAgICAgICAgICAgICAgICBQWEVfUk9NSURfSU1QX1BST01JU0NVT1VTX01V TFRJQ0FTVF9SWF9TVVBQT1JURUQgfA0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgUFhFX1JP TUlEX0lNUF9QUk9NSVNDVU9VU19SWF9TVVBQT1JURUQgfA0KKyAgICAgICAgICAgICAgICAgICAg ICAgICAgUFhFX1JPTUlEX0lNUF9CUk9BRENBU1RfUlhfU1VQUE9SVEVEIHwNCisgICAgICAgICAg ICAgICAgICAgICAgICAgIFBYRV9ST01JRF9JTVBfRklMVEVSRURfTVVMVElDQVNUX1JYX1NVUFBP UlRFRDsNCisNCisgIFB4ZVN3LT5FbnRyeVBvaW50ICAgPSAoVUlOVDY0KShVSU5UTilVbmRpQXBp RW50cnk7DQorICBQeGVTdy0+cmVzZXJ2ZWQyWzBdID0gMDsNCisgIFB4ZVN3LT5yZXNlcnZlZDJb MV0gPSAwOw0KKyAgUHhlU3ctPnJlc2VydmVkMlsyXSA9IDA7DQorICBQeGVTdy0+QnVzQ250ICAg ICAgID0gMTsNCisgIFB4ZVN3LT5CdXNUeXBlWzBdICAgPSBQWEVfQlVTVFlQRV9VU0I7DQorICBQ eGVTdy0+RnVkZ2UgICAgICAgID0gUHhlU3ctPkZ1ZGdlIC0gQ2FsY3VsYXRlU3VtOCAoKFZPSUQg KilQeGVTdywgUHhlU3ctPkxlbik7DQorfQ0KKw0KKy8qKg0KKyAgVXBkYXRlIE5JQyBudW1iZXIu DQorDQorICBAcGFyYW1baW5dICAgICAgTmljICAgICAgIEEgcG9pbnRlciB0byB0aGUgTmV0d29y ayBpbnRlcmZhY2UgY29udHJvbGxlciBkYXRhLg0KKyAgQHBhcmFtW2luLCBvdXRdIFB4ZVN3ICAg ICBBIHBvaW50ZXIgdG8gdGhlIFBYRSBTVyBVTkRJIHN0cnVjdHVyZS4NCisNCisqKi8NCitWT0lE DQorVXBkYXRlTmljTnVtICgNCisgIElOICAgICAgTklDX0RBVEEgICAgICpOaWMsDQorICBJTiBP VVQgIFBYRV9TV19VTkRJICAqUHhlU3cNCisgICkNCit7DQorICBVSU5UMTYgIE5pY051bTsNCisN CisgIE5pY051bSA9IChQeGVTdy0+SUZjbnQgfCBQeGVTdy0+SUZjbnRFeHQgPDwgOCk7DQorDQor ICBpZiAoTmljID09IE5VTEwpIHsNCisgICAgaWYgKE5pY051bSA+IDApIHsNCisgICAgICBOaWNO dW0tLTsNCisgICAgfQ0KKw0KKyAgICBQeGVTdy0+SUZjbnQgICAgPSAoVUlOVDgpKE5pY051bSAm IDB4RkYpOyAgICAgICAgICAvLyBHZXQgbG93ZXIgYnl0ZQ0KKyAgICBQeGVTdy0+SUZjbnRFeHQg PSAoVUlOVDgpKChOaWNOdW0gJiAweEZGMDApID4+IDgpOyAvLyBHZXQgdXBwZXIgYnl0ZQ0KKyAg ICBQeGVTdy0+RnVkZ2UgICAgPSAoVUlOVDgpKFB4ZVN3LT5GdWRnZSAtIENhbGN1bGF0ZVN1bTgg KChWT0lEICopUHhlU3csIFB4ZVN3LT5MZW4pKTsNCisgICAgcmV0dXJuOw0KKyAgfQ0KKw0KKyAg TmljTnVtKys7DQorDQorICBQeGVTdy0+SUZjbnQgICAgPSAoVUlOVDgpKE5pY051bSAmIDB4RkYp OyAgICAgICAgICAvLyBHZXQgbG93ZXIgYnl0ZQ0KKyAgUHhlU3ctPklGY250RXh0ID0gKFVJTlQ4 KSgoTmljTnVtICYgMHhGRjAwKSA+PiA4KTsgLy8gR2V0IHVwcGVyIGJ5dGUNCisgIFB4ZVN3LT5G dWRnZSAgICA9IChVSU5UOCkoUHhlU3ctPkZ1ZGdlIC0gQ2FsY3VsYXRlU3VtOCAoKFZPSUQgKilQ eGVTdywgUHhlU3ctPkxlbikpOw0KK30NCisNCisvKioNCisgIFVOREkgQVBJIHRhYmxlIGVudHJ5 Lg0KKw0KKyAgQHBhcmFtW2luXSAgQ2RiICBBIHBvaW50ZXIgdG8gdGhlIGNvbW1hbmQgZGVzY3Jp cHRvciBibG9jay4NCisNCisqKi8NCitFRklfU1RBVFVTDQorRUZJQVBJDQorVW5kaUFwaUVudHJ5 ICgNCisgIElOICBVSU5UNjQgIENkYg0KKyAgKQ0KK3sNCisgIFBYRV9DREIgICAqQ2RiUHRyOw0K KyAgTklDX0RBVEEgICpOaWM7DQorDQorICBpZiAoQ2RiID09IDApIHsNCisgICAgcmV0dXJuIEVG SV9JTlZBTElEX1BBUkFNRVRFUjsNCisgIH0NCisNCisgIENkYlB0ciA9IChQWEVfQ0RCICopKFVJ TlROKUNkYjsNCisgIE5pYyAgICA9ICYoZ0xhbkRldmljZUxpc3RbQ2RiUHRyLT5JRm51bV0tPk5p Y0luZm8pOw0KKyAgZ1VuZGlBcGlUYWJsZVtDZGJQdHItPk9wQ29kZV0oQ2RiUHRyLCBOaWMpOw0K KyAgcmV0dXJuIEVGSV9TVUNDRVNTOw0KK30NCisNCisvKioNCisgIE1hcCB2aXJ0dWFsIG1lbW9y eSBhZGRyZXNzIGZvciBETUEuIFRoaXMgZmllbGQgY2FuIGJlIHNldCB0bw0KKyAgemVybyBpZiB0 aGVyZSBpcyBubyBtYXBwaW5nIHNlcnZpY2UuDQorDQorICBAcGFyYW1baW5dICBOaWMgICAgICAg ICAgIEEgcG9pbnRlciB0byB0aGUgTmV0d29yayBpbnRlcmZhY2UgY29udHJvbGxlciBkYXRhLg0K KyAgQHBhcmFtW2luXSAgTWVtQWRkciAgICAgICBWaXJ0dWFsIGFkZHJlc3MgdG8gYmUgbWFwcGVk Lg0KKyAgQHBhcmFtW2luXSAgU2l6ZSAgICAgICAgICBTaXplIG9mIG1lbW9yeSB0byBiZSBtYXBw ZWQuDQorICBAcGFyYW1baW5dICBEaXJlY3Rpb24gICAgIERpcmVjdGlvbiBvZiBkYXRhIGZsb3cg Zm9yIHRoaXMgbWVtb3J5J3MgdXNhZ2U6DQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNw dS0+ZGV2aWNlLCBkZXZpY2UtPmNwdSBvciBib3RoIHdheXMuDQorICBAcGFyYW1bb3V0XSBNYXBw ZWRBZGRyICAgIFBvaW50ZXIgdG8gcmV0dXJuIHRoZSBtYXBwZWQgZGV2aWNlIGFkZHJlc3MuDQor DQorKiovDQorVUlOVE4NCitNYXBJdCAoDQorICBJTiBOSUNfREFUQSAgKk5pYywNCisgIElOIFVJ TlQ2NCAgICBNZW1BZGRyLA0KKyAgSU4gVUlOVDMyICAgIFNpemUsDQorICBJTiBVSU5UMzIgICAg RGlyZWN0aW9uLA0KKyAgT1VUIFVJTlQ2NCAgIE1hcHBlZEFkZHINCisgICkNCit7DQorICBVSU5U NjQgICpQaHlBZGRyOw0KKw0KKyAgUGh5QWRkciA9IChVSU5UNjQgKikoVUlOVE4pTWFwcGVkQWRk cjsNCisNCisgIGlmIChOaWMtPlB4ZVN0YXJ0Lk1hcF9NZW0gPT0gMCkgew0KKyAgICAqUGh5QWRk ciA9IE1lbUFkZHI7DQorICB9IGVsc2Ugew0KKyAgICAoKHZvaWQgKCopKFVJTlQ2NCwgVUlOVDY0 LCBVSU5UMzIsIFVJTlQzMiwgVUlOVDY0KSkoVUlOVE4pIE5pYy0+UHhlU3RhcnQuTWFwX01lbSko DQorICBOaWMtPlB4ZVN0YXJ0LlVuaXF1ZV9JRCwNCisgIE1lbUFkZHIsDQorICBTaXplLA0KKyAg RGlyZWN0aW9uLA0KKyAgTWFwcGVkQWRkcg0KKyAgKTsNCisgIH0NCisNCisgIHJldHVybiBQWEVf U1RBVENPREVfU1VDQ0VTUzsNCit9DQorDQorLyoqDQorICBVbi1tYXAgcHJldmlvdXNseSBtYXBw ZWQgdmlydHVhbCBtZW1vcnkgYWRkcmVzcy4gVGhpcyBmaWVsZCBjYW4gYmUgc2V0DQorICB0byB6 ZXJvIG9ubHkgaWYgdGhlIE1hcF9NZW0oKSBzZXJ2aWNlIGlzIGFsc28gc2V0IHRvIHplcm8uDQor DQorICBAcGFyYW1baW5dICBOaWMgICAgICAgICAgIEEgcG9pbnRlciB0byB0aGUgTmV0d29yayBp bnRlcmZhY2UgY29udHJvbGxlciBkYXRhLg0KKyAgQHBhcmFtW2luXSAgTWVtQWRkciAgICAgICBW aXJ0dWFsIGFkZHJlc3MgdG8gYmUgbWFwcGVkLg0KKyAgQHBhcmFtW2luXSAgU2l6ZSAgICAgICAg ICBTaXplIG9mIG1lbW9yeSB0byBiZSBtYXBwZWQuDQorICBAcGFyYW1baW5dICBEaXJlY3Rpb24g ICAgIERpcmVjdGlvbiBvZiBkYXRhIGZsb3cgZm9yIHRoaXMgbWVtb3J5J3MgdXNhZ2U6DQorICAg ICAgICAgICAgICAgICAgICAgICAgICAgIGNwdS0+ZGV2aWNlLCBkZXZpY2UtPmNwdSBvciBib3Ro IHdheXMuDQorICBAcGFyYW1baW5dICBNYXBwZWRBZGRyICAgIFBvaW50ZXIgdG8gcmV0dXJuIHRo ZSBtYXBwZWQgZGV2aWNlIGFkZHJlc3MuDQorDQorKiovDQorVk9JRA0KK1VuTWFwSXQgKA0KKyAg SU4gTklDX0RBVEEgICpOaWMsDQorICBJTiBVSU5UNjQgICAgTWVtQWRkciwNCisgIElOIFVJTlQz MiAgICBTaXplLA0KKyAgSU4gVUlOVDMyICAgIERpcmVjdGlvbiwNCisgIElOIFVJTlQ2NCAgICBN YXBwZWRBZGRyDQorICApDQorew0KKyAgaWYgKE5pYy0+UHhlU3RhcnQuVW5NYXBfTWVtICE9IDAp IHsNCisgICAgKCh2b2lkICgqKShVSU5UNjQsIFVJTlQ2NCwgVUlOVDMyLCBVSU5UMzIsIFVJTlQ2 NCkpKFVJTlROKSBOaWMtPlB4ZVN0YXJ0LlVuTWFwX01lbSkoDQorICBOaWMtPlB4ZVN0YXJ0LlVu aXF1ZV9JRCwNCisgIE1lbUFkZHIsDQorICBTaXplLA0KKyAgRGlyZWN0aW9uLA0KKyAgTWFwcGVk QWRkcg0KKyAgKTsNCisgIH0NCisNCisgIHJldHVybjsNCit9DQpkaWZmIC0tZ2l0IGEvTWRlTW9k dWxlUGtnL0J1cy9Vc2IvVXNiTmV0d29yay9Vc2JSbmRpcy9Db21wb25lbnROYW1lLmMgYi9NZGVN b2R1bGVQa2cvQnVzL1VzYi9Vc2JOZXR3b3JrL1VzYlJuZGlzL0NvbXBvbmVudE5hbWUuYw0KbmV3 IGZpbGUgbW9kZSAxMDA2NDQNCmluZGV4IDAwMDAwMDAwMDAuLmI5YmExNzBjMTMNCi0tLSAvZGV2 L251bGwNCisrKyBiL01kZU1vZHVsZVBrZy9CdXMvVXNiL1VzYk5ldHdvcmsvVXNiUm5kaXMvQ29t cG9uZW50TmFtZS5jDQpAQCAtMCwwICsxLDE3MiBAQA0KKy8qKiBAZmlsZQ0KKyAgVGhpcyBmaWxl IGNvbnRhaW5zIGNvZGUgZm9yIFVTQiBSTkRJUyBEcml2ZXIgQ29tcG9uZW50DQorICBOYW1lIGRl ZmluaXRpb25zDQorDQorICBDb3B5cmlnaHQgKGMpIDIwMjMsIEFtZXJpY2FuIE1lZ2F0cmVuZHMg SW50ZXJuYXRpb25hbCBMTEMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuPEJSPg0KKyAgU1BEWC1MaWNl bnNlLUlkZW50aWZpZXI6IEJTRC0yLUNsYXVzZS1QYXRlbnQNCisqKi8NCisNCisjaW5jbHVkZSAi VXNiUm5kaXMuaCINCisNCitHTE9CQUxfUkVNT1ZFX0lGX1VOUkVGRVJFTkNFRCBFRklfVU5JQ09E RV9TVFJJTkdfVEFCTEUgIGdVc2JSbmRpc0RyaXZlck5hbWVUYWJsZVtdID0gew0KKyAgew0KKyAg ICAiZW5nO2VuIiwNCisgICAgTCJVU0IgUk5ESVMgRHJpdmVyIg0KKyAgfSwNCisgIHsNCisgICAg TlVMTCwNCisgICAgTlVMTA0KKyAgfQ0KK307DQorDQorRUZJX1NUQVRVUw0KK0VGSUFQSQ0KK1Vz YlJuZGlzQ29tcG9uZW50TmFtZUdldERyaXZlck5hbWUgKA0KKyAgSU4gIEVGSV9DT01QT05FTlRf TkFNRV9QUk9UT0NPTCAgKlRoaXMsDQorICBJTiAgQ0hBUjggICAgICAgICAgICAgICAgICAgICAg ICAqTGFuZ3VhZ2UsDQorICBPVVQgQ0hBUjE2ICAgICAgICAgICAgICAgICAgICAgICAqKkRyaXZl ck5hbWUNCisgICk7DQorDQorRUZJX1NUQVRVUw0KK0VGSUFQSQ0KK1VzYlJuZGlzQ29tcG9uZW50 TmFtZUdldENvbnRyb2xsZXJOYW1lICgNCisgIElOIEVGSV9DT01QT05FTlRfTkFNRV9QUk9UT0NP TCAgKlRoaXMsDQorICBJTiBFRklfSEFORExFICAgICAgICAgICAgICAgICAgIENvbnRyb2xsZXIs DQorICBJTiBFRklfSEFORExFICAgICAgICAgICAgICAgICAgIENoaWxkSGFuZGxlICAgICAgICBP UFRJT05BTCwNCisgIElOIENIQVI4ICAgICAgICAgICAgICAgICAgICAgICAgKkxhbmd1YWdlLA0K KyAgT1VUIENIQVIxNiAgICAgICAgICAgICAgICAgICAgICAqKkNvbnRyb2xsZXJOYW1lDQorICAp Ow0KKw0KK0dMT0JBTF9SRU1PVkVfSUZfVU5SRUZFUkVOQ0VEIEVGSV9DT01QT05FTlRfTkFNRV9Q Uk9UT0NPTCAgZ1VzYlJuZGlzQ29tcG9uZW50TmFtZSA9IHsNCisgIFVzYlJuZGlzQ29tcG9uZW50 TmFtZUdldERyaXZlck5hbWUsDQorICBVc2JSbmRpc0NvbXBvbmVudE5hbWVHZXRDb250cm9sbGVy TmFtZSwNCisgICJlbmciDQorfTsNCisNCitHTE9CQUxfUkVNT1ZFX0lGX1VOUkVGRVJFTkNFRCBF RklfQ09NUE9ORU5UX05BTUUyX1BST1RPQ09MICBnVXNiUm5kaXNDb21wb25lbnROYW1lMiA9IHsN CisgIChFRklfQ09NUE9ORU5UX05BTUUyX0dFVF9EUklWRVJfTkFNRSlVc2JSbmRpc0NvbXBvbmVu dE5hbWVHZXREcml2ZXJOYW1lLA0KKyAgKEVGSV9DT01QT05FTlRfTkFNRTJfR0VUX0NPTlRST0xM RVJfTkFNRSlVc2JSbmRpc0NvbXBvbmVudE5hbWVHZXRDb250cm9sbGVyTmFtZSwNCisgICJlbiIN Cit9Ow0KKw0KKy8qKg0KKyAgUmV0cmlldmVzIGEgVW5pY29kZSBzdHJpbmcgdGhhdCBpcyB0aGUg dXNlciByZWFkYWJsZSBuYW1lIG9mIHRoZSBkcml2ZXIuDQorDQorICBUaGlzIGZ1bmN0aW9uIHJl dHJpZXZlcyB0aGUgdXNlciByZWFkYWJsZSBuYW1lIG9mIGEgZHJpdmVyIGluIHRoZSBmb3JtIG9m IGENCisgIFVuaWNvZGUgc3RyaW5nLiBJZiB0aGUgZHJpdmVyIHNwZWNpZmllZCBieSBUaGlzIGhh cyBhIHVzZXIgcmVhZGFibGUgbmFtZSBpbg0KKyAgdGhlIGxhbmd1YWdlIHNwZWNpZmllZCBieSBM YW5ndWFnZSwgdGhlbiBhIHBvaW50ZXIgdG8gdGhlIGRyaXZlciBuYW1lIGlzDQorICByZXR1cm5l ZCBpbiBEcml2ZXJOYW1lLCBhbmQgRUZJX1NVQ0NFU1MgaXMgcmV0dXJuZWQuIElmIHRoZSBkcml2 ZXIgc3BlY2lmaWVkDQorICBieSBUaGlzIGRvZXMgbm90IHN1cHBvcnQgdGhlIGxhbmd1YWdlIHNw ZWNpZmllZCBieSBMYW5ndWFnZSwNCisgIHRoZW4gRUZJX1VOU1VQUE9SVEVEIGlzIHJldHVybmVk Lg0KKw0KKyAgQHBhcmFtW2luXSAgVGhpcyAgICAgICAgICAgICAgQSBwb2ludGVyIHRvIHRoZSBF RklfQ09NUE9ORU5UX05BTUUyX1BST1RPQ09MIG9yDQorICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBFRklfQ09NUE9ORU5UX05BTUVfUFJPVE9DT0wgaW5zdGFuY2UuDQorICBAcGFyYW1b aW5dICBMYW5ndWFnZSAgICAgICAgICBBIHBvaW50ZXIgdG8gYSBOdWxsLXRlcm1pbmF0ZWQgQVND SUkgc3RyaW5nDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcnJheSBpbmRpY2F0 aW5nIHRoZSBsYW5ndWFnZS4gVGhpcyBpcyB0aGUNCisgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIGxhbmd1YWdlIG9mIHRoZSBkcml2ZXIgbmFtZSB0aGF0IHRoZSBjYWxsZXIgaXMNCisg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlcXVlc3RpbmcsIGFuZCBpdCBtdXN0IG1h dGNoIG9uZSBvZiB0aGUNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxhbmd1YWdl cyBzcGVjaWZpZWQgaW4gU3VwcG9ydGVkTGFuZ3VhZ2VzLiBUaGUNCisgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIG51bWJlciBvZiBsYW5ndWFnZXMgc3VwcG9ydGVkIGJ5IGEgZHJpdmVy IGlzIHVwDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0byB0aGUgZHJpdmVyIHdy aXRlci4gTGFuZ3VhZ2UgaXMgc3BlY2lmaWVkDQorICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBpbiBSRkMgNDY0NiBvciBJU08gNjM5LTIgbGFuZ3VhZ2UgY29kZSBmb3JtYXQuDQorICBA cGFyYW1bb3V0XSBEcml2ZXJOYW1lICAgICAgICBBIHBvaW50ZXIgdG8gdGhlIFVuaWNvZGUgc3Ry aW5nIHRvIHJldHVybi4NCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRoaXMgVW5p Y29kZSBzdHJpbmcgaXMgdGhlIG5hbWUgb2YgdGhlDQorICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBkcml2ZXIgc3BlY2lmaWVkIGJ5IFRoaXMgaW4gdGhlIGxhbmd1YWdlDQorICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBzcGVjaWZpZWQgYnkgTGFuZ3VhZ2UuDQorDQorICBA cmV0dmFsIEVGSV9TVUNDRVNTICAgICAgICAgICBUaGUgVW5pY29kZSBzdHJpbmcgZm9yIHRoZSBE cml2ZXIgc3BlY2lmaWVkIGJ5DQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUaGlz IGFuZCB0aGUgbGFuZ3VhZ2Ugc3BlY2lmaWVkIGJ5IExhbmd1YWdlIHdhcw0KKyAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgcmV0dXJuZWQgaW4gRHJpdmVyTmFtZS4NCisgIEByZXR2YWwg RUZJX0lOVkFMSURfUEFSQU1FVEVSIExhbmd1YWdlIGlzIE5VTEwuDQorICBAcmV0dmFsIEVGSV9J TlZBTElEX1BBUkFNRVRFUiBEcml2ZXJOYW1lIGlzIE5VTEwuDQorICBAcmV0dmFsIEVGSV9VTlNV UFBPUlRFRCAgICAgICBUaGUgZHJpdmVyIHNwZWNpZmllZCBieSBUaGlzIGRvZXMgbm90IHN1cHBv cnQNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoZSBsYW5ndWFnZSBzcGVjaWZp ZWQgYnkgTGFuZ3VhZ2UuDQorDQorKiovDQorRUZJX1NUQVRVUw0KK0VGSUFQSQ0KK1VzYlJuZGlz Q29tcG9uZW50TmFtZUdldERyaXZlck5hbWUgKA0KKyAgSU4gIEVGSV9DT01QT05FTlRfTkFNRV9Q Uk9UT0NPTCAgKlRoaXMsDQorICBJTiAgQ0hBUjggICAgICAgICAgICAgICAgICAgICAgICAqTGFu Z3VhZ2UsDQorICBPVVQgQ0hBUjE2ICAgICAgICAgICAgICAgICAgICAgICAqKkRyaXZlck5hbWUN CisgICkNCit7DQorICByZXR1cm4gTG9va3VwVW5pY29kZVN0cmluZzIgKA0KKyAgICAgICAgICAg TGFuZ3VhZ2UsDQorICAgICAgICAgICBUaGlzLT5TdXBwb3J0ZWRMYW5ndWFnZXMsDQorICAgICAg ICAgICBnVXNiUm5kaXNEcml2ZXJOYW1lVGFibGUsDQorICAgICAgICAgICBEcml2ZXJOYW1lLA0K KyAgICAgICAgICAgKEJPT0xFQU4pKFRoaXMgPT0gJmdVc2JSbmRpc0NvbXBvbmVudE5hbWUpDQor ICAgICAgICAgICApOw0KK30NCisNCisvKioNCisgIFJldHJpZXZlcyBhIFVuaWNvZGUgc3RyaW5n IHRoYXQgaXMgdGhlIHVzZXIgcmVhZGFibGUgbmFtZSBvZiB0aGUgY29udHJvbGxlcg0KKyAgdGhh dCBpcyBiZWluZyBtYW5hZ2VkIGJ5IGEgZHJpdmVyLg0KKw0KKyAgVGhpcyBmdW5jdGlvbiByZXRy aWV2ZXMgdGhlIHVzZXIgcmVhZGFibGUgbmFtZSBvZiB0aGUgY29udHJvbGxlciBzcGVjaWZpZWQg YnkNCisgIENvbnRyb2xsZXJIYW5kbGUgYW5kIENoaWxkSGFuZGxlIGluIHRoZSBmb3JtIG9mIGEg VW5pY29kZSBzdHJpbmcuIElmIHRoZQ0KKyAgZHJpdmVyIHNwZWNpZmllZCBieSBUaGlzIGhhcyBh IHVzZXIgcmVhZGFibGUgbmFtZSBpbiB0aGUgbGFuZ3VhZ2Ugc3BlY2lmaWVkIGJ5DQorICBMYW5n dWFnZSwgdGhlbiBhIHBvaW50ZXIgdG8gdGhlIGNvbnRyb2xsZXIgbmFtZSBpcyByZXR1cm5lZCBp biBDb250cm9sbGVyTmFtZSwNCisgIGFuZCBFRklfU1VDQ0VTUyBpcyByZXR1cm5lZC4gIElmIHRo ZSBkcml2ZXIgc3BlY2lmaWVkIGJ5IFRoaXMgaXMgbm90IGN1cnJlbnRseQ0KKyAgbWFuYWdpbmcg dGhlIGNvbnRyb2xsZXIgc3BlY2lmaWVkIGJ5IENvbnRyb2xsZXJIYW5kbGUgYW5kIENoaWxkSGFu ZGxlLA0KKyAgdGhlbiBFRklfVU5TVVBQT1JURUQgaXMgcmV0dXJuZWQuICBJZiB0aGUgZHJpdmVy IHNwZWNpZmllZCBieSBUaGlzIGRvZXMgbm90DQorICBzdXBwb3J0IHRoZSBsYW5ndWFnZSBzcGVj aWZpZWQgYnkgTGFuZ3VhZ2UsIHRoZW4gRUZJX1VOU1VQUE9SVEVEIGlzIHJldHVybmVkLg0KKw0K KyAgQHBhcmFtW2luXSAgVGhpcyAgICAgICAgICAgICAgQSBwb2ludGVyIHRvIHRoZSBFRklfQ09N UE9ORU5UX05BTUUyX1BST1RPQ09MIG9yDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBFRklfQ09NUE9ORU5UX05BTUVfUFJPVE9DT0wgaW5zdGFuY2UuDQorICBAcGFyYW1baW5dICBD b250cm9sbGVyICAgICAgICBUaGUgaGFuZGxlIG9mIGEgY29udHJvbGxlciB0aGF0IHRoZSBkcml2 ZXINCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNwZWNpZmllZCBieSBUaGlzIGlz IG1hbmFnaW5nLiAgVGhpcyBoYW5kbGUNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IHNwZWNpZmllcyB0aGUgY29udHJvbGxlciB3aG9zZSBuYW1lIGlzIHRvIGJlDQorICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICByZXR1cm5lZC4NCisgIEBwYXJhbVtpbl0gIENoaWxkSGFu ZGxlICAgICAgIFRoZSBoYW5kbGUgb2YgdGhlIGNoaWxkIGNvbnRyb2xsZXIgdG8gcmV0cmlldmUN CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoZSBuYW1lIG9mLiAgVGhpcyBpcyBh biBvcHRpb25hbCBwYXJhbWV0ZXIgdGhhdA0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgbWF5IGJlIE5VTEwuICBJdCB3aWxsIGJlIE5VTEwgZm9yIGRldmljZQ0KKyAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgZHJpdmVycy4gIEl0IHdpbGwgYWxzbyBiZSBOVUxMIGZvciBh IGJ1cyBkcml2ZXJzDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGF0IHdpc2gg dG8gcmV0cmlldmUgdGhlIG5hbWUgb2YgdGhlIGJ1cw0KKyAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgY29udHJvbGxlci4gIEl0IHdpbGwgbm90IGJlIE5VTEwgZm9yIGEgYnVzDQorICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkcml2ZXIgdGhhdCB3aXNoZXMgdG8gcmV0cmll dmUgdGhlIG5hbWUgb2YgYQ0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hpbGQg Y29udHJvbGxlci4NCisgIEBwYXJhbVtpbl0gIExhbmd1YWdlICAgICAgICAgIEEgcG9pbnRlciB0 byBhIE51bGwtdGVybWluYXRlZCBBU0NJSSBzdHJpbmcNCisgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIGFycmF5IGluZGljYXRpbmcgdGhlIGxhbmd1YWdlLiAgVGhpcyBpcyB0aGUNCisg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxhbmd1YWdlIG9mIHRoZSBkcml2ZXIgbmFt ZSB0aGF0IHRoZSBjYWxsZXIgaXMNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJl cXVlc3RpbmcsIGFuZCBpdCBtdXN0IG1hdGNoIG9uZSBvZiB0aGUNCisgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIGxhbmd1YWdlcyBzcGVjaWZpZWQgaW4gU3VwcG9ydGVkTGFuZ3VhZ2Vz LiBUaGUNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG51bWJlciBvZiBsYW5ndWFn ZXMgc3VwcG9ydGVkIGJ5IGEgZHJpdmVyIGlzIHVwDQorICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICB0byB0aGUgZHJpdmVyIHdyaXRlci4gTGFuZ3VhZ2UgaXMgc3BlY2lmaWVkIGluDQor ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBSRkMgNDY0NiBvciBJU08gNjM5LTIgbGFu Z3VhZ2UgY29kZSBmb3JtYXQuDQorICBAcGFyYW1bb3V0XSBDb250cm9sbGVyTmFtZSAgICBBIHBv aW50ZXIgdG8gdGhlIFVuaWNvZGUgc3RyaW5nIHRvIHJldHVybi4NCisgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIFRoaXMgVW5pY29kZSBzdHJpbmcgaXMgdGhlIG5hbWUgb2YgdGhlDQor ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250cm9sbGVyIHNwZWNpZmllZCBieSBD b250cm9sbGVySGFuZGxlIGFuZA0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ2hp bGRIYW5kbGUgaW4gdGhlIGxhbmd1YWdlIHNwZWNpZmllZCBieQ0KKyAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgTGFuZ3VhZ2UgZnJvbSB0aGUgcG9pbnQgb2YgdmlldyBvZiB0aGUgZHJp dmVyDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzcGVjaWZpZWQgYnkgVGhpcy4N CisNCisgIEByZXR2YWwgRUZJX1NVQ0NFU1MgICAgICAgICAgIFRoZSBVbmljb2RlIHN0cmluZyBm b3IgdGhlIHVzZXIgcmVhZGFibGUgbmFtZSBpbg0KKyAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgdGhlIGxhbmd1YWdlIHNwZWNpZmllZCBieSBMYW5ndWFnZSBmb3IgdGhlDQorICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBkcml2ZXIgc3BlY2lmaWVkIGJ5IFRoaXMgd2FzIHJl dHVybmVkIGluDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBEcml2ZXJOYW1lLg0K KyAgQHJldHZhbCBFRklfSU5WQUxJRF9QQVJBTUVURVIgQ29udHJvbGxlckhhbmRsZSBpcyBub3Qg YSB2YWxpZCBFRklfSEFORExFLg0KKyAgQHJldHZhbCBFRklfSU5WQUxJRF9QQVJBTUVURVIgQ2hp bGRIYW5kbGUgaXMgbm90IE5VTEwgYW5kIGl0IGlzIG5vdCBhIHZhbGlkDQorICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBFRklfSEFORExFLg0KKyAgQHJldHZhbCBFRklfSU5WQUxJRF9Q QVJBTUVURVIgTGFuZ3VhZ2UgaXMgTlVMTC4NCisgIEByZXR2YWwgRUZJX0lOVkFMSURfUEFSQU1F VEVSIENvbnRyb2xsZXJOYW1lIGlzIE5VTEwuDQorICBAcmV0dmFsIEVGSV9VTlNVUFBPUlRFRCAg ICAgICBUaGUgZHJpdmVyIHNwZWNpZmllZCBieSBUaGlzIGlzIG5vdCBjdXJyZW50bHkNCisgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hbmFnaW5nIHRoZSBjb250cm9sbGVyIHNwZWNp ZmllZCBieQ0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ29udHJvbGxlckhhbmRs ZSBhbmQgQ2hpbGRIYW5kbGUuDQorICBAcmV0dmFsIEVGSV9VTlNVUFBPUlRFRCAgICAgICBUaGUg ZHJpdmVyIHNwZWNpZmllZCBieSBUaGlzIGRvZXMgbm90IHN1cHBvcnQNCisgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIHRoZSBsYW5ndWFnZSBzcGVjaWZpZWQgYnkgTGFuZ3VhZ2UuDQor DQorKiovDQorRUZJX1NUQVRVUw0KK0VGSUFQSQ0KK1VzYlJuZGlzQ29tcG9uZW50TmFtZUdldENv bnRyb2xsZXJOYW1lICgNCisgIElOIEVGSV9DT01QT05FTlRfTkFNRV9QUk9UT0NPTCAgKlRoaXMs DQorICBJTiBFRklfSEFORExFICAgICAgICAgICAgICAgICAgIENvbnRyb2xsZXIsDQorICBJTiBF RklfSEFORExFICAgICAgICAgICAgICAgICAgIENoaWxkSGFuZGxlICAgICAgICBPUFRJT05BTCwN CisgIElOIENIQVI4ICAgICAgICAgICAgICAgICAgICAgICAgKkxhbmd1YWdlLA0KKyAgT1VUIENI QVIxNiAgICAgICAgICAgICAgICAgICAgICAqKkNvbnRyb2xsZXJOYW1lDQorICApDQorew0KKyAg cmV0dXJuIEVGSV9VTlNVUFBPUlRFRDsNCit9DQpkaWZmIC0tZ2l0IGEvTWRlTW9kdWxlUGtnL0J1 cy9Vc2IvVXNiTmV0d29yay9Vc2JSbmRpcy9Vc2JSbmRpcy5jIGIvTWRlTW9kdWxlUGtnL0J1cy9V c2IvVXNiTmV0d29yay9Vc2JSbmRpcy9Vc2JSbmRpcy5jDQpuZXcgZmlsZSBtb2RlIDEwMDY0NA0K aW5kZXggMDAwMDAwMDAwMC4uOWM3NGQ3M2Y3OA0KLS0tIC9kZXYvbnVsbA0KKysrIGIvTWRlTW9k dWxlUGtnL0J1cy9Vc2IvVXNiTmV0d29yay9Vc2JSbmRpcy9Vc2JSbmRpcy5jDQpAQCAtMCwwICsx LDg4NiBAQA0KKy8qKiBAZmlsZQ0KKyAgVGhpcyBmaWxlIGNvbnRhaW5zIGNvZGUgZm9yIFVTQiBS ZW1vdGUgTmV0d29yayBEcml2ZXINCisgIEludGVyZmFjZSBTcGVjLiBEcml2ZXIgQmluZGluZw0K Kw0KKyAgQ29weXJpZ2h0IChjKSAyMDIzLCBBbWVyaWNhbiBNZWdhdHJlbmRzIEludGVybmF0aW9u YWwgTExDLiBBbGwgcmlnaHRzIHJlc2VydmVkLjxCUj4NCisgIFNQRFgtTGljZW5zZS1JZGVudGlm aWVyOiBCU0QtMi1DbGF1c2UtUGF0ZW50DQorKiovDQorDQorI2luY2x1ZGUgIlVzYlJuZGlzLmgi DQorDQorRUZJX0RSSVZFUl9CSU5ESU5HX1BST1RPQ09MICBnVXNiUm5kaXNEcml2ZXJCaW5kaW5n ID0gew0KKyAgVXNiUm5kaXNEcml2ZXJTdXBwb3J0ZWQsDQorICBVc2JSbmRpc0RyaXZlclN0YXJ0 LA0KKyAgVXNiUm5kaXNEcml2ZXJTdG9wLA0KKyAgVVNCX1JORElTX0RSSVZFUl9WRVJTSU9OLA0K KyAgTlVMTCwNCisgIE5VTEwNCit9Ow0KKw0KKy8qKg0KKyAgQ2hlY2sgaWYgdGhpcyBpbnRlcmZh Y2UgaXMgVVNCIFJuZGlzIFN1YlR5cGUNCisNCisgIEBwYXJhbVtpbl0gIFVzYklvICBBIHBvaW50 ZXIgdG8gdGhlIEVGSV9VU0JfSU9fUFJPVE9DT0wgaW5zdGFuY2UuDQorDQorICBAcmV0dmFsIFRS VUUgICBVU0IgUm5kaXMgU3ViVHlwZS4NCisgIEByZXR2YWwgRkFMU0UgIE5vdCBVU0IgUm5kaXMg U3ViVHlwZS4NCisNCisqKi8NCitCT09MRUFODQorSXNTdXBwb3J0ZWREZXZpY2UgKA0KKyAgSU4g RUZJX1VTQl9JT19QUk9UT0NPTCAgKlVzYklvDQorICApDQorew0KKyAgRUZJX1NUQVRVUyAgICAg ICAgICAgICAgICAgICAgU3RhdHVzOw0KKyAgRUZJX1VTQl9JTlRFUkZBQ0VfREVTQ1JJUFRPUiAg SW50ZXJmYWNlRGVzY3JpcHRvcjsNCisNCisgIFN0YXR1cyA9IFVzYklvLT5Vc2JHZXRJbnRlcmZh Y2VEZXNjcmlwdG9yIChVc2JJbywgJkludGVyZmFjZURlc2NyaXB0b3IpOw0KKyAgaWYgKEVGSV9F UlJPUiAoU3RhdHVzKSkgew0KKyAgICByZXR1cm4gRkFMU0U7DQorICB9DQorDQorICAvLyBDaGVj ayBzcGVjaWZpYyBkZXZpY2UvUk5ESVMgYW5kIENEQy1EQVRBDQorICBpZiAoKChJbnRlcmZhY2VE ZXNjcmlwdG9yLkludGVyZmFjZUNsYXNzID09IDB4MikgJiYNCisgICAgICAgKEludGVyZmFjZURl c2NyaXB0b3IuSW50ZXJmYWNlU3ViQ2xhc3MgPT0gMHgyKSAmJg0KKyAgICAgICAoSW50ZXJmYWNl RGVzY3JpcHRvci5JbnRlcmZhY2VQcm90b2NvbCA9PSAweEZGKSkgfHwgXA0KKyAgICAgICgoSW50 ZXJmYWNlRGVzY3JpcHRvci5JbnRlcmZhY2VDbGFzcyA9PSAweEVGKSAmJg0KKyAgICAgICAoSW50 ZXJmYWNlRGVzY3JpcHRvci5JbnRlcmZhY2VTdWJDbGFzcyA9PSAweDQpICYmDQorICAgICAgIChJ bnRlcmZhY2VEZXNjcmlwdG9yLkludGVyZmFjZVByb3RvY29sID09IDB4MSkpIHx8IFwNCisgICAg ICAoKEludGVyZmFjZURlc2NyaXB0b3IuSW50ZXJmYWNlQ2xhc3MgPT0gMHhBKSAmJg0KKyAgICAg ICAoSW50ZXJmYWNlRGVzY3JpcHRvci5JbnRlcmZhY2VTdWJDbGFzcyA9PSAweDApICYmDQorICAg ICAgIChJbnRlcmZhY2VEZXNjcmlwdG9yLkludGVyZmFjZVByb3RvY29sID09IDB4MDApKQ0KKyAg ICAgICkNCisgIHsNCisgICAgcmV0dXJuIFRSVUU7DQorICB9DQorDQorICByZXR1cm4gRkFMU0U7 DQorfQ0KKw0KKy8qKg0KKyAgQ2hlY2sgaWYgdGhpcyBpbnRlcmZhY2UgaXMgVVNCIFJuZGlzIFN1 YlR5cGUgYnV0IG5vdCBDREMgRGF0YSBpbnRlcmZhY2UNCisNCisgIEBwYXJhbVtpbl0gIFVzYklv ICBBIHBvaW50ZXIgdG8gdGhlIEVGSV9VU0JfSU9fUFJPVE9DT0wgaW5zdGFuY2UuDQorDQorICBA cmV0dmFsIFRSVUUgICBVU0IgUm5kaXMgU3ViVHlwZS4NCisgIEByZXR2YWwgRkFMU0UgIE5vdCBV U0IgUm5kaXMgU3ViVHlwZS4NCisqKi8NCitCT09MRUFODQorSXNSbmRpc0ludGVyZmFjZSAoDQor ICBJTiBFRklfVVNCX0lPX1BST1RPQ09MICAqVXNiSW8NCisgICkNCit7DQorICBFRklfU1RBVFVT ICAgICAgICAgICAgICAgICAgICBTdGF0dXM7DQorICBFRklfVVNCX0lOVEVSRkFDRV9ERVNDUklQ VE9SICBJbnRlcmZhY2VEZXNjcmlwdG9yOw0KKw0KKyAgU3RhdHVzID0gVXNiSW8tPlVzYkdldElu dGVyZmFjZURlc2NyaXB0b3IgKFVzYklvLCAmSW50ZXJmYWNlRGVzY3JpcHRvcik7DQorICBpZiAo RUZJX0VSUk9SIChTdGF0dXMpKSB7DQorICAgIHJldHVybiBGQUxTRTsNCisgIH0NCisNCisgIC8v IENoZWNrIGZvciBzcGVjaWZpYyBkZXZpY2UvUk5ESVMgYW5kIENEQy1EQVRBDQorICBpZiAoKChJ bnRlcmZhY2VEZXNjcmlwdG9yLkludGVyZmFjZUNsYXNzID09IDB4MikgJiYNCisgICAgICAgKElu dGVyZmFjZURlc2NyaXB0b3IuSW50ZXJmYWNlU3ViQ2xhc3MgPT0gMHgyKSAmJg0KKyAgICAgICAo SW50ZXJmYWNlRGVzY3JpcHRvci5JbnRlcmZhY2VQcm90b2NvbCA9PSAweEZGKSkgfHwgXA0KKyAg ICAgICgoSW50ZXJmYWNlRGVzY3JpcHRvci5JbnRlcmZhY2VDbGFzcyA9PSAweEVGKSAmJg0KKyAg ICAgICAoSW50ZXJmYWNlRGVzY3JpcHRvci5JbnRlcmZhY2VTdWJDbGFzcyA9PSAweDQpICYmDQor ICAgICAgIChJbnRlcmZhY2VEZXNjcmlwdG9yLkludGVyZmFjZVByb3RvY29sID09IDB4MSkpDQor ICAgICAgKQ0KKyAgew0KKyAgICByZXR1cm4gVFJVRTsNCisgIH0NCisNCisgIHJldHVybiBGQUxT RTsNCit9DQorDQorLyoqDQorICBDaGVjayBpZiB0aGUgVVNCIFJORElTIGFuZCBVU0IgQ0RDIERh dGEgaW50ZXJmYWNlcyBhcmUgZnJvbSB0aGUgc2FtZSBkZXZpY2UuDQorDQorICBAcGFyYW1baW5d ICBVc2JSbmRpc0RhdGFQYXRoICBBIHBvaW50ZXIgdG8gdGhlIEVGSV9ERVZJQ0VfUEFUSF9QUk9U T0NPTCBpbnN0YW5jZS4NCisgIEBwYXJhbVtpbl0gIFVzYkNkY0RhdGFQYXRoICAgIEEgcG9pbnRl ciB0byB0aGUgRUZJX0RFVklDRV9QQVRIX1BST1RPQ09MIGluc3RhbmNlLg0KKw0KKyAgQHJldHZh bCBFRklfU1VDQ0VTUyAgICAgICAgICAgSXMgdGhlIHNhbWUgZGV2aWNlLg0KKyAgQHJldHZhbCBF RklfVU5TVVBQT1JURUQgICAgICAgSXMgbm90IHRoZSBzYW1lIGRldmljZS4NCisNCisqKi8NCitF RklfU1RBVFVTDQorSXNTYW1lRGV2aWNlICgNCisgIElOICBFRklfREVWSUNFX1BBVEhfUFJPVE9D T0wgICpVc2JSbmRpc0RhdGFQYXRoLA0KKyAgSU4gIEVGSV9ERVZJQ0VfUEFUSF9QUk9UT0NPTCAg KlVzYkNkY0RhdGFQYXRoDQorICApDQorew0KKyAgREVCVUcgKChERUJVR19WRVJCT1NFLCAiSXNT YW1lRGV2aWNlIEVudHJ5IFxuIikpOw0KKyAgd2hpbGUgKDEpIHsNCisgICAgaWYgKElzRGV2aWNl UGF0aEVuZCAoTmV4dERldmljZVBhdGhOb2RlIChVc2JSbmRpc0RhdGFQYXRoKSkpIHsNCisgICAg ICBpZiAoKChVU0JfREVWSUNFX1BBVEggKilVc2JSbmRpc0RhdGFQYXRoKS0+UGFyZW50UG9ydE51 bWJlciA9PQ0KKyAgICAgICAgICAoKFVTQl9ERVZJQ0VfUEFUSCAqKVVzYkNkY0RhdGFQYXRoKS0+ UGFyZW50UG9ydE51bWJlcikNCisgICAgICB7DQorICAgICAgICByZXR1cm4gRUZJX1NVQ0NFU1M7 DQorICAgICAgfSBlbHNlIHsNCisgICAgICAgIHJldHVybiBFRklfVU5TVVBQT1JURUQ7DQorICAg ICAgfQ0KKyAgICB9IGVsc2Ugew0KKyAgICAgIGlmIChDb21wYXJlTWVtIChVc2JDZGNEYXRhUGF0 aCwgVXNiUm5kaXNEYXRhUGF0aCwgc2l6ZW9mIChFRklfREVWSUNFX1BBVEhfUFJPVE9DT0wpKSAh PSAwKSB7DQorICAgICAgICByZXR1cm4gRUZJX1VOU1VQUE9SVEVEOw0KKyAgICAgIH0NCisNCisg ICAgICBVc2JSbmRpc0RhdGFQYXRoID0gTmV4dERldmljZVBhdGhOb2RlIChVc2JSbmRpc0RhdGFQ YXRoKTsNCisgICAgICBVc2JDZGNEYXRhUGF0aCAgID0gTmV4dERldmljZVBhdGhOb2RlIChVc2JD ZGNEYXRhUGF0aCk7DQorICAgIH0NCisgIH0NCisNCisgIERFQlVHICgoREVCVUdfVkVSQk9TRSwg IklzU2FtZURldmljZSBFeGl0IFxuIikpOw0KK30NCisNCisvKioNCisgIENoZWNrIGlmIHRoZSBV U0IgQ0RDIERhdGEoVXNiSW8pIGluc3RhbGxlZCBhbmQgcmV0dXJuIFVTQiBDREMgRGF0YSBIYW5k bGUuDQorDQorICBAcGFyYW1baW5dICBVc2JJbyAgQSBwb2ludGVyIHRvIHRoZSBFRklfVVNCX0lP X1BST1RPQ09MIGluc3RhbmNlLg0KKw0KKyAgQHJldHZhbCBUUlVFICAgICAgICAgICAgICBVU0Ig Q0RDIERhdGEoVXNiSW8pIGluc3RhbGxlZC4NCisgIEByZXR2YWwgRkFMU0UgICAgICAgICAgICAg VVNCIENEQyBEYXRhKFVzYklvKSBkaWQgbm90IGluc3RhbGxlZC4NCisNCisqKi8NCitCT09MRUFO DQorSXNVc2JDZGNEYXRhICgNCisgIElOIEVGSV9VU0JfSU9fUFJPVE9DT0wgICpVc2JJbw0KKyAg KQ0KK3sNCisgIEVGSV9TVEFUVVMgICAgICAgICAgICAgICAgICAgIFN0YXR1czsNCisgIEVGSV9V U0JfSU5URVJGQUNFX0RFU0NSSVBUT1IgIEludGVyZmFjZURlc2NyaXB0b3I7DQorDQorICBTdGF0 dXMgPSBVc2JJby0+VXNiR2V0SW50ZXJmYWNlRGVzY3JpcHRvciAoVXNiSW8sICZJbnRlcmZhY2VE ZXNjcmlwdG9yKTsNCisgIGlmIChFRklfRVJST1IgKFN0YXR1cykpIHsNCisgICAgcmV0dXJuIEZB TFNFOw0KKyAgfQ0KKw0KKyAgLy8gQ2hlY2sgZm9yIENEQy1EQVRBDQorICBpZiAoKEludGVyZmFj ZURlc2NyaXB0b3IuSW50ZXJmYWNlQ2xhc3MgPT0gMHhBKSAmJg0KKyAgICAgIChJbnRlcmZhY2VE ZXNjcmlwdG9yLkludGVyZmFjZVN1YkNsYXNzID09IDB4MCkgJiYNCisgICAgICAoSW50ZXJmYWNl RGVzY3JpcHRvci5JbnRlcmZhY2VQcm90b2NvbCA9PSAweDApKQ0KKyAgew0KKyAgICByZXR1cm4g VFJVRTsNCisgIH0NCisNCisgIHJldHVybiBGQUxTRTsNCit9DQorDQorLyoqDQorICBDaGVjayBp ZiB0aGUgVVNCIFJuZGlzKFVzYklvKSBpbnN0YWxsZWQNCisNCisgIEBwYXJhbVtpbl0gIFVzYklv ICAgICAgICBBIHBvaW50ZXIgdG8gdGhlIEVGSV9VU0JfSU9fUFJPVE9DT0wgaW5zdGFuY2UuDQor DQorICBAcmV0dmFsIFRSVUUgICAgICAgICAgICAgIFVTQiBSbmRpcyhVc2JJbykgaW5zdGFsbGVk Lg0KKyAgQHJldHZhbCBGQUxTRSAgICAgICAgICAgICBVU0IgUm5kaXMoVXNiSW8pIGRpZCBub3Qg aW5zdGFsbGVkLg0KKw0KKyoqLw0KK0JPT0xFQU4NCitJc1VzYlJuZGlzICgNCisgIElOIEVGSV9V U0JfSU9fUFJPVE9DT0wgICpVc2JJbw0KKyAgKQ0KK3sNCisgIEVGSV9TVEFUVVMgICAgICAgICAg ICAgICAgICAgIFN0YXR1czsNCisgIEVGSV9VU0JfSU5URVJGQUNFX0RFU0NSSVBUT1IgIEludGVy ZmFjZURlc2NyaXB0b3I7DQorDQorICBTdGF0dXMgPSBVc2JJby0+VXNiR2V0SW50ZXJmYWNlRGVz Y3JpcHRvciAoVXNiSW8sICZJbnRlcmZhY2VEZXNjcmlwdG9yKTsNCisgIGlmIChFRklfRVJST1Ig KFN0YXR1cykpIHsNCisgICAgcmV0dXJuIEZBTFNFOw0KKyAgfQ0KKw0KKyAgLy8gQ2hlY2sgZm9y IFJuZGlzDQorICBpZiAoKEludGVyZmFjZURlc2NyaXB0b3IuSW50ZXJmYWNlQ2xhc3MgPT0gMHgy KSAmJg0KKyAgICAgIChJbnRlcmZhY2VEZXNjcmlwdG9yLkludGVyZmFjZVN1YkNsYXNzID09IDB4 MikgJiYNCisgICAgICAoSW50ZXJmYWNlRGVzY3JpcHRvci5JbnRlcmZhY2VQcm90b2NvbCA9PSAw eEZGKSkNCisgIHsNCisgICAgcmV0dXJuIFRSVUU7DQorICB9DQorDQorICByZXR1cm4gRkFMU0U7 DQorfQ0KKw0KKy8qKg0KKyAgQ29udHJvbCBjb21lcyBoZXJlIHdoZW4gYSBDREMgZGV2aWNlIGlz IGZvdW5kLkNoZWNrIGlmIGEgUk5ESVMgaW50ZXJmYWNlIGlzIGFscmVhZHkgZm91bmQgZm9yIHRo aXMgZGV2aWNlIG9yIG5vdC4NCisgIEZvciBvbmUgZGV2aWNlIHR3byBVU0JJTyB3aWxsIGJlIGlu c3RhbGxlZCBlYWNoIGZvciBDREMgYW5kIFJORElTIGludGVyZmFjZS4NCisNCisgIEBwYXJhbVtp bl0gIFVzYkV0aFBhdGggICAgICAgIEEgcG9pbnRlciB0byB0aGUgRUZJX0RFVklDRV9QQVRIX1BS T1RPQ09MIGluc3RhbmNlLg0KKyAgQHBhcmFtW291dF0gVXNiUm5kaXNEZXZpY2UgICAgQSBwb2lu dGVyIHRvIHRoZSBVU0JfUk5ESVNfREVWSUNFIERhdGEuDQorDQorICBAcmV0dmFsIEVGSV9TVUND RVNTICAgICAgICAgICAgIFRoZSBVU0JfUk5ESVNfREVWSUNFIG1hdGNoaW5nIHRoaXMgQ0RDIERh dGEgaXMgZm91bmQuDQorICBAcmV0dmFsIEVGSV9OT1RfRk9VTkQgICAgICAgICAgIFRoZSBVU0Jf Uk5ESVNfREVWSUNFIG1hdGNoaW5nIHRoaXMgQ0RDIERhdGEgaXMgbm90IGZvdW5kLg0KKw0KKyoq Lw0KK0VGSV9TVEFUVVMNCitVcGRhdGVSbmRpc0RldmljZSAoDQorICBJTiAgRUZJX0RFVklDRV9Q QVRIX1BST1RPQ09MICAqVXNiQ2RjRGF0YVBhdGgsDQorICBPVVQgVVNCX1JORElTX0RFVklDRSAg ICAgICAgICAqKlVzYlJuZGlzRGV2aWNlDQorICApDQorew0KKyAgRUZJX1NUQVRVUyAgICAgICAg ICAgICAgICAgICBTdGF0dXM7DQorICBVSU5UTiAgICAgICAgICAgICAgICAgICAgICAgIEluZGV4 Ow0KKyAgVUlOVE4gICAgICAgICAgICAgICAgICAgICAgICBIYW5kbGVDb3VudDsNCisgIEVGSV9I QU5ETEUgICAgICAgICAgICAgICAgICAgKkhhbmRsZUJ1ZmZlcjsNCisgIEVES0lJX1VTQl9FVEhF Uk5FVF9QUk9UT0NPTCAgKlVzYkV0aERldmljZTsNCisgIEVGSV9ERVZJQ0VfUEFUSF9QUk9UT0NP TCAgICAgKlVzYlJuZGlzRGF0YVBhdGg7DQorICBFRklfVVNCX0lPX1BST1RPQ09MICAgICAgICAg ICpVc2JJbzsNCisgIEJPT0xFQU4gICAgICAgICAgICAgICAgICAgICAgSXNSbmRpc0ludGVyZmFj ZUZsYWc7DQorDQorICBJc1JuZGlzSW50ZXJmYWNlRmxhZyA9IEZBTFNFOw0KKw0KKyAgU3RhdHVz ID0gZ0JTLT5Mb2NhdGVIYW5kbGVCdWZmZXIgKA0KKyAgICAgICAgICAgICAgICAgIEJ5UHJvdG9j b2wsDQorICAgICAgICAgICAgICAgICAgJmdFZGtJSVVzYkV0aFByb3RvY29sR3VpZCwNCisgICAg ICAgICAgICAgICAgICBOVUxMLA0KKyAgICAgICAgICAgICAgICAgICZIYW5kbGVDb3VudCwNCisg ICAgICAgICAgICAgICAgICAmSGFuZGxlQnVmZmVyDQorICAgICAgICAgICAgICAgICAgKTsNCisg IGlmIChFRklfRVJST1IgKFN0YXR1cykpIHsNCisgICAgcmV0dXJuIFN0YXR1czsNCisgIH0NCisN CisgIGZvciAoSW5kZXggPSAwOyBJbmRleCA8IEhhbmRsZUNvdW50OyBJbmRleCsrKSB7DQorICAg IFN0YXR1cyA9IGdCUy0+SGFuZGxlUHJvdG9jb2wgKA0KKyAgICAgICAgICAgICAgICAgICAgSGFu ZGxlQnVmZmVyW0luZGV4XSwNCisgICAgICAgICAgICAgICAgICAgICZnRWRrSUlVc2JFdGhQcm90 b2NvbEd1aWQsDQorICAgICAgICAgICAgICAgICAgICAoVk9JRCAqKikmVXNiRXRoRGV2aWNlDQor ICAgICAgICAgICAgICAgICAgICApOw0KKyAgICBpZiAoRUZJX0VSUk9SIChTdGF0dXMpKSB7DQor ICAgICAgY29udGludWU7DQorICAgIH0NCisNCisgICAgU3RhdHVzID0gZ0JTLT5IYW5kbGVQcm90 b2NvbCAoDQorICAgICAgICAgICAgICAgICAgICBIYW5kbGVCdWZmZXJbSW5kZXhdLA0KKyAgICAg ICAgICAgICAgICAgICAgJmdFZmlVc2JJb1Byb3RvY29sR3VpZCwNCisgICAgICAgICAgICAgICAg ICAgIChWT0lEICoqKSZVc2JJbw0KKyAgICAgICAgICAgICAgICAgICAgKTsNCisgICAgaWYgKEVG SV9FUlJPUiAoU3RhdHVzKSkgew0KKyAgICAgIGNvbnRpbnVlOw0KKyAgICB9DQorDQorICAgIElz Um5kaXNJbnRlcmZhY2VGbGFnID0gSXNSbmRpc0ludGVyZmFjZSAoVXNiSW8pOw0KKyAgICBpZiAo SXNSbmRpc0ludGVyZmFjZUZsYWcgPT0gRkFMU0UpIHsNCisgICAgICBjb250aW51ZTsNCisgICAg fQ0KKw0KKyAgICBTdGF0dXMgPSBnQlMtPkhhbmRsZVByb3RvY29sICgNCisgICAgICAgICAgICAg ICAgICAgIEhhbmRsZUJ1ZmZlcltJbmRleF0sDQorICAgICAgICAgICAgICAgICAgICAmZ0VmaURl dmljZVBhdGhQcm90b2NvbEd1aWQsDQorICAgICAgICAgICAgICAgICAgICAoVk9JRCAqKikmVXNi Um5kaXNEYXRhUGF0aA0KKyAgICAgICAgICAgICAgICAgICAgKTsNCisgICAgaWYgKEVGSV9FUlJP UiAoU3RhdHVzKSkgew0KKyAgICAgIGNvbnRpbnVlOw0KKyAgICB9DQorDQorICAgIFN0YXR1cyA9 IElzU2FtZURldmljZSAoVXNiUm5kaXNEYXRhUGF0aCwgVXNiQ2RjRGF0YVBhdGgpOw0KKw0KKyAg ICBERUJVRyAoKERFQlVHX1ZFUkJPU0UsICJSbmRpcyBJc1NhbWVEZXZpY2UgJXJcbiIsIFN0YXR1 cykpOw0KKw0KKyAgICBpZiAoIUVGSV9FUlJPUiAoU3RhdHVzKSkgew0KKyAgICAgICpVc2JSbmRp c0RldmljZSA9IFVTQl9STkRJU19ERVZJQ0VfRlJPTV9USElTIChVc2JFdGhEZXZpY2UpOw0KKyAg ICAgIEZyZWVQb29sIChIYW5kbGVCdWZmZXIpOw0KKyAgICAgIHJldHVybiBFRklfU1VDQ0VTUzsN CisgICAgfQ0KKyAgfSAgIC8vIEVuZCBvZiBGb3IgbG9vcA0KKw0KKyAgRnJlZVBvb2wgKEhhbmRs ZUJ1ZmZlcik7DQorICByZXR1cm4gRUZJX05PVF9GT1VORDsNCit9DQorDQorLyoqDQorDQorICBG b3IgdGhlIGdpdmVuIFJuZGlzIERldmljZSwgZmluZCBhIG1hdGNoaW5nIENEQyBkZXZpY2UgYWxy ZWFkeSBleGlzdHMgb3Igbm90LiBJZiBmb3VuZCB1cGRhdGUgdGhlIGhhbmRsZQ0KKyAgYW5kIFVz YklPIHByb3RvY29sLg0KKw0KKyAgQHBhcmFtW2luXSAgVXNiUm5kaXNEZXZpY2UgICAgICAgIEEg cG9pbnRlciB0byB0aGUgVVNCX1JORElTX0RFVklDRSBkYXRhLg0KKw0KKyoqLw0KK1ZPSUQNCitG aW5kTWF0Y2hpbmdDZGNEYXRhICgNCisgIElOIFVTQl9STkRJU19ERVZJQ0UgICpVc2JSbmRpc0Rl dmljZQ0KKyAgKQ0KK3sNCisgIEVGSV9TVEFUVVMgICAgICAgICAgICAgICAgU3RhdHVzOw0KKyAg VUlOVE4gICAgICAgICAgICAgICAgICAgICBJbmRleDsNCisgIFVJTlROICAgICAgICAgICAgICAg ICAgICAgSGFuZGxlQ291bnQ7DQorICBFRklfSEFORExFICAgICAgICAgICAgICAgICpIYW5kbGVC dWZmZXI7DQorICBFRklfVVNCX0lPX1BST1RPQ09MICAgICAgICpVc2JJbzsNCisgIEVGSV9ERVZJ Q0VfUEFUSF9QUk9UT0NPTCAgKlVzYlJuZGlzRGF0YVBhdGg7DQorICBFRklfREVWSUNFX1BBVEhf UFJPVE9DT0wgICpVc2JDZGNEYXRhUGF0aDsNCisNCisgIC8vIEZpbmQgdGhlIHBhcmVudCBSTkRJ UyBhbmQgdXBkYXRlIHRoZSBVc2JJbyBmb3IgdGhlIENEQyBkZXZpY2UNCisgIFN0YXR1cyA9IGdC Uy0+SGFuZGxlUHJvdG9jb2wgKA0KKyAgICAgICAgICAgICAgICAgIFVzYlJuZGlzRGV2aWNlLT5V c2JSbmRpc0hhbmRsZSwNCisgICAgICAgICAgICAgICAgICAmZ0VmaURldmljZVBhdGhQcm90b2Nv bEd1aWQsDQorICAgICAgICAgICAgICAgICAgKFZPSUQgKiopJlVzYlJuZGlzRGF0YVBhdGgNCisg ICAgICAgICAgICAgICAgICApOw0KKw0KKyAgaWYgKEVGSV9FUlJPUiAoU3RhdHVzKSkgew0KKyAg ICByZXR1cm47DQorICB9DQorDQorICBTdGF0dXMgPSBnQlMtPkxvY2F0ZUhhbmRsZUJ1ZmZlciAo DQorICAgICAgICAgICAgICAgICAgQnlQcm90b2NvbCwNCisgICAgICAgICAgICAgICAgICAmZ0Vm aVVzYklvUHJvdG9jb2xHdWlkLA0KKyAgICAgICAgICAgICAgICAgIE5VTEwsDQorICAgICAgICAg ICAgICAgICAgJkhhbmRsZUNvdW50LA0KKyAgICAgICAgICAgICAgICAgICZIYW5kbGVCdWZmZXIN CisgICAgICAgICAgICAgICAgICApOw0KKyAgaWYgKEVGSV9FUlJPUiAoU3RhdHVzKSkgew0KKyAg ICByZXR1cm47DQorICB9DQorDQorICBmb3IgKEluZGV4ID0gMDsgSW5kZXggPCBIYW5kbGVDb3Vu dDsgSW5kZXgrKykgew0KKyAgICBTdGF0dXMgPSBnQlMtPkhhbmRsZVByb3RvY29sICgNCisgICAg ICAgICAgICAgICAgICAgIEhhbmRsZUJ1ZmZlcltJbmRleF0sDQorICAgICAgICAgICAgICAgICAg ICAmZ0VmaVVzYklvUHJvdG9jb2xHdWlkLA0KKyAgICAgICAgICAgICAgICAgICAgKFZPSUQgKiop JlVzYklvDQorICAgICAgICAgICAgICAgICAgICApOw0KKyAgICBBU1NFUlRfRUZJX0VSUk9SIChT dGF0dXMpOw0KKw0KKyAgICBpZiAoSXNVc2JDZGNEYXRhIChVc2JJbykpIHsNCisgICAgICBERUJV RyAoKERFQlVHX1ZFUkJPU0UsICJSbmRpcyBGaW5kTWF0Y2hpbmdDZGNEYXRhIENEQ0RhdGEgaW50 ZXJmYWNlIGZvdW5kXG4iKSk7DQorDQorICAgICAgU3RhdHVzID0gZ0JTLT5IYW5kbGVQcm90b2Nv bCAoDQorICAgICAgICAgICAgICAgICAgICAgIEhhbmRsZUJ1ZmZlcltJbmRleF0sDQorICAgICAg ICAgICAgICAgICAgICAgICZnRWZpRGV2aWNlUGF0aFByb3RvY29sR3VpZCwNCisgICAgICAgICAg ICAgICAgICAgICAgKFZPSUQgKiopJlVzYkNkY0RhdGFQYXRoDQorICAgICAgICAgICAgICAgICAg ICAgICk7DQorICAgICAgaWYgKEVGSV9FUlJPUiAoU3RhdHVzKSkgew0KKyAgICAgICAgREVCVUcg KChERUJVR19WRVJCT1NFLCAiUm5kaXMgQ0RDRGF0YSBEZXZpY2VQYXRoIG5vdCBmb3VuZFxuIikp Ow0KKyAgICAgICAgRnJlZVBvb2wgKEhhbmRsZUJ1ZmZlcik7DQorICAgICAgICByZXR1cm47DQor ICAgICAgfQ0KKw0KKyAgICAgIFN0YXR1cyA9IElzU2FtZURldmljZSAoVXNiUm5kaXNEYXRhUGF0 aCwgVXNiQ2RjRGF0YVBhdGgpOw0KKyAgICAgIERFQlVHICgoREVCVUdfVkVSQk9TRSwgIlJuZGlz IElzU2FtZURldmljZSAlclxuIiwgU3RhdHVzKSk7DQorICAgICAgaWYgKCFFRklfRVJST1IgKFN0 YXR1cykpIHsNCisgICAgICAgIFVzYlJuZGlzRGV2aWNlLT5Vc2JDZGNEYXRhSGFuZGxlID0gSGFu ZGxlQnVmZmVyW0luZGV4XTsNCisgICAgICAgIFVzYlJuZGlzRGV2aWNlLT5Vc2JJb0NkY0RhdGEg ICAgID0gVXNiSW87DQorICAgICAgICBHZXRFbmRwb2ludCAoVXNiUm5kaXNEZXZpY2UtPlVzYklv Q2RjRGF0YSwgVXNiUm5kaXNEZXZpY2UpOw0KKyAgICAgICAgRnJlZVBvb2wgKEhhbmRsZUJ1ZmZl cik7DQorICAgICAgICByZXR1cm47DQorICAgICAgfQ0KKyAgICB9DQorICB9ICAgLy8gRW5kIG9m IEZvciBsb29wDQorDQorICBGcmVlUG9vbCAoSGFuZGxlQnVmZmVyKTsNCit9DQorDQorLyoqDQor DQorICBGb3IgdGhlIGdpdmVuIFVzYklvIENkY0RhdGEsIGZpbmQgYSBtYXRjaGluZyBSTkRJUyBk ZXZpY2UgYWxyZWFkeSBleGlzdHMgb3Igbm90Lg0KKw0KKyAgQHBhcmFtW2luXSAgQ2RjSGFuZGxl ICAgICAgIEEgcG9pbnRlciB0byB0aGUgRUZJX0hBTkRMRSBmb3IgVVNCIENEQyBEYXRhLg0KKyAg QHBhcmFtW291dF0gQ2RjVXNiSW8gICAgICAgIEEgcG9pbnRlciBmb3IgcmV0cmlldmUgdGhlIEVG SV9VU0JfSU9fUFJPVE9DT0wgaW5zdGFuY2UuDQorICBAcGFyYW1bb3V0XSBSbmRpc0hhbmRsZSAg ICAgQSBwb2ludGVyIGZvciByZXRyaWV2ZSB0aGUgaGFuZGxlIG9mIFJORElTIGRldmljZS4NCisN CisgIEByZXR2YWwgRUZJX1NVQ0NFU1MgICAgICAgICAgICAgVGhlIFVTQl9STkRJU19ERVZJQ0Ug bWF0Y2hpbmcgdGhpcyBDREMgRGF0YSBpcyBmb3VuZC4NCisgIEByZXR2YWwgRUZJX05PVF9GT1VO RCAgICAgICAgICAgVGhlIFVTQl9STkRJU19ERVZJQ0UgbWF0Y2hpbmcgdGhpcyBDREMgRGF0YSBp cyBub3QgZm91bmQuDQorDQorKiovDQorRUZJX1NUQVRVUw0KK0VGSUFQSQ0KK0ZpbmRNYXRjaGlu Z1JuZGlzRGV2ICgNCisgIElOICBFRklfSEFORExFICAgICAgICAgICBDZGNIYW5kbGUsDQorICBP VVQgRUZJX1VTQl9JT19QUk9UT0NPTCAgKipDZGNVc2JJbywNCisgIE9VVCBFRklfSEFORExFICAg ICAgICAgICAqUm5kaXNIYW5kbGUNCisgICkNCit7DQorICBFRklfU1RBVFVTICAgICAgICAgICAg ICAgIFN0YXR1czsNCisgIFVJTlROICAgICAgICAgICAgICAgICAgICAgSW5kZXg7DQorICBVSU5U TiAgICAgICAgICAgICAgICAgICAgIEhhbmRsZUNvdW50Ow0KKyAgRUZJX0hBTkRMRSAgICAgICAg ICAgICAgICAqSGFuZGxlQnVmZmVyOw0KKyAgRUZJX1VTQl9JT19QUk9UT0NPTCAgICAgICAqVXNi SW87DQorICBFRklfREVWSUNFX1BBVEhfUFJPVE9DT0wgICpVc2JSbmRpc0RhdGFQYXRoOw0KKyAg RUZJX0RFVklDRV9QQVRIX1BST1RPQ09MICAqVXNiQ2RjRGF0YVBhdGg7DQorDQorICAvLyBGaW5k IHRoZSBwYXJlbnQgUk5ESVMgYW5kIHVwZGF0ZSB0aGUgVXNiSW8gZm9yIHRoZSBDREMgZGV2aWNl DQorICBTdGF0dXMgPSBnQlMtPkhhbmRsZVByb3RvY29sICgNCisgICAgICAgICAgICAgICAgICBD ZGNIYW5kbGUsDQorICAgICAgICAgICAgICAgICAgJmdFZmlEZXZpY2VQYXRoUHJvdG9jb2xHdWlk LA0KKyAgICAgICAgICAgICAgICAgIChWT0lEICoqKSZVc2JDZGNEYXRhUGF0aA0KKyAgICAgICAg ICAgICAgICAgICk7DQorDQorICBpZiAoRUZJX0VSUk9SIChTdGF0dXMpKSB7DQorICAgIHJldHVy biBTdGF0dXM7DQorICB9DQorDQorICBTdGF0dXMgPSBnQlMtPkxvY2F0ZUhhbmRsZUJ1ZmZlciAo DQorICAgICAgICAgICAgICAgICAgQnlQcm90b2NvbCwNCisgICAgICAgICAgICAgICAgICAmZ0Vm aVVzYklvUHJvdG9jb2xHdWlkLA0KKyAgICAgICAgICAgICAgICAgIE5VTEwsDQorICAgICAgICAg ICAgICAgICAgJkhhbmRsZUNvdW50LA0KKyAgICAgICAgICAgICAgICAgICZIYW5kbGVCdWZmZXIN CisgICAgICAgICAgICAgICAgICApOw0KKyAgaWYgKEVGSV9FUlJPUiAoU3RhdHVzKSkgew0KKyAg ICByZXR1cm4gU3RhdHVzOw0KKyAgfQ0KKw0KKyAgZm9yIChJbmRleCA9IDA7IEluZGV4IDwgSGFu ZGxlQ291bnQ7IEluZGV4KyspIHsNCisgICAgU3RhdHVzID0gZ0JTLT5IYW5kbGVQcm90b2NvbCAo DQorICAgICAgICAgICAgICAgICAgICBIYW5kbGVCdWZmZXJbSW5kZXhdLA0KKyAgICAgICAgICAg ICAgICAgICAgJmdFZmlVc2JJb1Byb3RvY29sR3VpZCwNCisgICAgICAgICAgICAgICAgICAgIChW T0lEICoqKSZVc2JJbw0KKyAgICAgICAgICAgICAgICAgICAgKTsNCisgICAgaWYgKEVGSV9FUlJP UiAoU3RhdHVzKSkgew0KKyAgICAgIHJldHVybiBTdGF0dXM7DQorICAgIH0NCisNCisgICAgaWYg KElzVXNiUm5kaXMgKFVzYklvKSkgew0KKyAgICAgIFN0YXR1cyA9IGdCUy0+SGFuZGxlUHJvdG9j b2wgKA0KKyAgICAgICAgICAgICAgICAgICAgICBIYW5kbGVCdWZmZXJbSW5kZXhdLA0KKyAgICAg ICAgICAgICAgICAgICAgICAmZ0VmaURldmljZVBhdGhQcm90b2NvbEd1aWQsDQorICAgICAgICAg ICAgICAgICAgICAgIChWT0lEICoqKSZVc2JSbmRpc0RhdGFQYXRoDQorICAgICAgICAgICAgICAg ICAgICAgICk7DQorICAgICAgaWYgKEVGSV9FUlJPUiAoU3RhdHVzKSkgew0KKyAgICAgICAgREVC VUcgKChERUJVR19FUlJPUiwgIlVzYiBSbmRpcyBEZXZpY2VQYXRoIG5vdCBmb3VuZFxuIikpOw0K KyAgICAgICAgYnJlYWs7DQorICAgICAgfQ0KKw0KKyAgICAgIFN0YXR1cyA9IElzU2FtZURldmlj ZSAoVXNiUm5kaXNEYXRhUGF0aCwgVXNiQ2RjRGF0YVBhdGgpOw0KKw0KKyAgICAgIGlmICghRUZJ X0VSUk9SIChTdGF0dXMpKSB7DQorICAgICAgICAqUm5kaXNIYW5kbGUgPSBIYW5kbGVCdWZmZXJb SW5kZXhdOw0KKyAgICAgICAgKkNkY1VzYklvICAgID0gVXNiSW87DQorICAgICAgICBGcmVlUG9v bCAoSGFuZGxlQnVmZmVyKTsNCisgICAgICAgIHJldHVybiBTdGF0dXM7DQorICAgICAgfQ0KKyAg ICB9DQorICB9ICAgLy8gRW5kIG9mIEZvciBsb29wDQorDQorICBGcmVlUG9vbCAoSGFuZGxlQnVm ZmVyKTsNCisNCisgIHJldHVybiBFRklfTk9UX0ZPVU5EOw0KK30NCisNCisvKioNCisgIFVTQiBS bmRpcyBEcml2ZXIgQmluZGluZyBTdXBwb3J0Lg0KKw0KKyAgQHBhcmFtW2luXSAgVGhpcyAgICAg ICAgICAgICAgICAgICAgUHJvdG9jb2wgaW5zdGFuY2UgcG9pbnRlci4NCisgIEBwYXJhbVtpbl0g IENvbnRyb2xsZXJIYW5kbGUgICAgICAgIEhhbmRsZSBvZiBkZXZpY2UgdG8gdGVzdC4NCisgIEBw YXJhbVtpbl0gIFJlbWFpbmluZ0RldmljZVBhdGggICAgIE9wdGlvbmFsIHBhcmFtZXRlciB1c2Ug dG8gcGljayBhIHNwZWNpZmljIGNoaWxkDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBkZXZpY2UgdG8gc3RhcnQuDQorDQorICBAcmV0dmFsIEVGSV9TVUNDRVNTICAgICAg ICAgICAgICAgICBUaGlzIGRyaXZlciBzdXBwb3J0cyB0aGlzIGRldmljZS4NCisgIEByZXR2YWwg RUZJX0FMUkVBRFlfU1RBUlRFRCAgICAgICAgIFRoaXMgZHJpdmVyIGlzIGFscmVhZHkgcnVubmlu ZyBvbiB0aGlzIGRldmljZS4NCisgIEByZXR2YWwgb3RoZXIgICAgICAgICAgICAgICAgICAgICAg IFRoaXMgZHJpdmVyIGRvZXMgbm90IHN1cHBvcnQgdGhpcyBkZXZpY2UuDQorDQorKiovDQorRUZJ X1NUQVRVUw0KK0VGSUFQSQ0KK1VzYlJuZGlzRHJpdmVyU3VwcG9ydGVkICgNCisgIElOIEVGSV9E UklWRVJfQklORElOR19QUk9UT0NPTCAgKlRoaXMsDQorICBJTiBFRklfSEFORExFICAgICAgICAg ICAgICAgICAgIENvbnRyb2xsZXJIYW5kbGUsDQorICBJTiBFRklfREVWSUNFX1BBVEhfUFJPVE9D T0wgICAgICpSZW1haW5pbmdEZXZpY2VQYXRoDQorICApDQorew0KKyAgRUZJX1NUQVRVUyAgICAg ICAgICAgU3RhdHVzOw0KKyAgRUZJX1VTQl9JT19QUk9UT0NPTCAgKlVzYklvOw0KKw0KKyAgU3Rh dHVzID0gZ0JTLT5PcGVuUHJvdG9jb2wgKA0KKyAgICAgICAgICAgICAgICAgIENvbnRyb2xsZXJI YW5kbGUsDQorICAgICAgICAgICAgICAgICAgJmdFZmlVc2JJb1Byb3RvY29sR3VpZCwNCisgICAg ICAgICAgICAgICAgICAoVk9JRCAqKikmVXNiSW8sDQorICAgICAgICAgICAgICAgICAgVGhpcy0+ RHJpdmVyQmluZGluZ0hhbmRsZSwNCisgICAgICAgICAgICAgICAgICBDb250cm9sbGVySGFuZGxl LA0KKyAgICAgICAgICAgICAgICAgIEVGSV9PUEVOX1BST1RPQ09MX0JZX0RSSVZFUg0KKyAgICAg ICAgICAgICAgICAgICk7DQorICBpZiAoRUZJX0VSUk9SIChTdGF0dXMpKSB7DQorICAgIHJldHVy biBTdGF0dXM7DQorICB9DQorDQorICBTdGF0dXMgPSBJc1N1cHBvcnRlZERldmljZSAoVXNiSW8p ID8gRUZJX1NVQ0NFU1MgOiBFRklfVU5TVVBQT1JURUQ7DQorDQorICBnQlMtPkNsb3NlUHJvdG9j b2wgKA0KKyAgICAgICAgIENvbnRyb2xsZXJIYW5kbGUsDQorICAgICAgICAgJmdFZmlVc2JJb1By b3RvY29sR3VpZCwNCisgICAgICAgICBUaGlzLT5Ecml2ZXJCaW5kaW5nSGFuZGxlLA0KKyAgICAg ICAgIENvbnRyb2xsZXJIYW5kbGUNCisgICAgICAgICApOw0KKyAgcmV0dXJuIFN0YXR1czsNCit9 DQorDQorLyoqDQorICBVU0IgUk5ESVMgRHJpdmVyIEJpbmRpbmcgU3RhcnQuDQorDQorICBAcGFy YW1baW5dICBUaGlzICAgICAgICAgICAgICAgICAgICBQcm90b2NvbCBpbnN0YW5jZSBwb2ludGVy Lg0KKyAgQHBhcmFtW2luXSAgQ29udHJvbGxlckhhbmRsZSAgICAgICAgSGFuZGxlIG9mIGRldmlj ZSB0byBiaW5kIGRyaXZlciB0by4NCisgIEBwYXJhbVtpbl0gIFJlbWFpbmluZ0RldmljZVBhdGgg ICAgIE9wdGlvbmFsIHBhcmFtZXRlciB1c2UgdG8gcGljayBhIHNwZWNpZmljIGNoaWxkDQorICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZXZpY2UgdG8gc3RhcnQuDQorDQor ICBAcmV0dmFsIEVGSV9TVUNDRVNTICAgICAgICAgICAgICAgICBUaGlzIGRyaXZlciBpcyBhZGRl ZCB0byBDb250cm9sbGVySGFuZGxlDQorICBAcmV0dmFsIEVGSV9ERVZJQ0VfRVJST1IgICAgICAg ICAgICBUaGlzIGRyaXZlciBjb3VsZCBub3QgYmUgc3RhcnRlZCBkdWUgdG8gYSBkZXZpY2UgZXJy b3INCisgIEByZXR2YWwgRUZJX09VVF9PRl9SRVNPVVJDRVMgICAgICAgIFRoZSBkcml2ZXIgY291 bGQgbm90IGluc3RhbGwgc3VjY2Vzc2Z1bGx5IGR1ZSB0byBhIGxhY2sgb2YgcmVzb3VyY2VzLg0K KyAgQHJldHZhbCBvdGhlciAgICAgICAgICAgICAgICAgICAgICAgVGhpcyBkcml2ZXIgZG9lcyBu b3Qgc3VwcG9ydCB0aGlzIGRldmljZQ0KKw0KKyoqLw0KK0VGSV9TVEFUVVMNCitFRklBUEkNCitV c2JSbmRpc0RyaXZlclN0YXJ0ICgNCisgIElOIEVGSV9EUklWRVJfQklORElOR19QUk9UT0NPTCAg KlRoaXMsDQorICBJTiBFRklfSEFORExFICAgICAgICAgICAgICAgICAgIENvbnRyb2xsZXJIYW5k bGUsDQorICBJTiBFRklfREVWSUNFX1BBVEhfUFJPVE9DT0wgICAgICpSZW1haW5pbmdEZXZpY2VQ YXRoDQorICApDQorew0KKyAgRUZJX1NUQVRVUyAgICAgICAgICAgICAgICAgICAgU3RhdHVzOw0K KyAgVVNCX1JORElTX0RFVklDRSAgICAgICAgICAgICAgKlVzYlJuZGlzRGV2aWNlOw0KKyAgRUZJ X0RFVklDRV9QQVRIX1BST1RPQ09MICAgICAgKlVzYkV0aFBhdGg7DQorICBFRklfVVNCX0lPX1BS T1RPQ09MICAgICAgICAgICAqVXNiSW87DQorICBFRklfVVNCX0lOVEVSRkFDRV9ERVNDUklQVE9S ICBJbnRlcmZhY2U7DQorICBFRklfSEFORExFICAgICAgICAgICAgICAgICAgICBSbmRpc0hhbmRs ZTsNCisNCisgIFJuZGlzSGFuZGxlID0gQ29udHJvbGxlckhhbmRsZTsNCisNCisgIFN0YXR1cyA9 IGdCUy0+T3BlblByb3RvY29sICgNCisgICAgICAgICAgICAgICAgICBDb250cm9sbGVySGFuZGxl LA0KKyAgICAgICAgICAgICAgICAgICZnRWZpVXNiSW9Qcm90b2NvbEd1aWQsDQorICAgICAgICAg ICAgICAgICAgKFZPSUQgKiopJlVzYklvLA0KKyAgICAgICAgICAgICAgICAgIFRoaXMtPkRyaXZl ckJpbmRpbmdIYW5kbGUsDQorICAgICAgICAgICAgICAgICAgQ29udHJvbGxlckhhbmRsZSwNCisg ICAgICAgICAgICAgICAgICBFRklfT1BFTl9QUk9UT0NPTF9CWV9EUklWRVINCisgICAgICAgICAg ICAgICAgICApOw0KKyAgaWYgKEVGSV9FUlJPUiAoU3RhdHVzKSkgew0KKyAgICByZXR1cm4gU3Rh dHVzOw0KKyAgfQ0KKw0KKyAgU3RhdHVzID0gZ0JTLT5PcGVuUHJvdG9jb2wgKA0KKyAgICAgICAg ICAgICAgICAgIENvbnRyb2xsZXJIYW5kbGUsDQorICAgICAgICAgICAgICAgICAgJmdFZmlEZXZp Y2VQYXRoUHJvdG9jb2xHdWlkLA0KKyAgICAgICAgICAgICAgICAgIChWT0lEICoqKSZVc2JFdGhQ YXRoLA0KKyAgICAgICAgICAgICAgICAgIFRoaXMtPkRyaXZlckJpbmRpbmdIYW5kbGUsDQorICAg ICAgICAgICAgICAgICAgQ29udHJvbGxlckhhbmRsZSwNCisgICAgICAgICAgICAgICAgICBFRklf T1BFTl9QUk9UT0NPTF9CWV9EUklWRVINCisgICAgICAgICAgICAgICAgICApOw0KKyAgaWYgKEVG SV9FUlJPUiAoU3RhdHVzKSkgew0KKyAgICBnQlMtPkNsb3NlUHJvdG9jb2wgKA0KKyAgICAgICAg ICAgQ29udHJvbGxlckhhbmRsZSwNCisgICAgICAgICAgICZnRWZpVXNiSW9Qcm90b2NvbEd1aWQs DQorICAgICAgICAgICBUaGlzLT5Ecml2ZXJCaW5kaW5nSGFuZGxlLA0KKyAgICAgICAgICAgQ29u dHJvbGxlckhhbmRsZQ0KKyAgICAgICAgICAgKTsNCisgICAgcmV0dXJuIFN0YXR1czsNCisgIH0N CisNCisgIGdCUy0+Q2xvc2VQcm90b2NvbCAoDQorICAgICAgICAgQ29udHJvbGxlckhhbmRsZSwN CisgICAgICAgICAmZ0VmaURldmljZVBhdGhQcm90b2NvbEd1aWQsDQorICAgICAgICAgVGhpcy0+ RHJpdmVyQmluZGluZ0hhbmRsZSwNCisgICAgICAgICBDb250cm9sbGVySGFuZGxlDQorICAgICAg ICAgKTsNCisNCisgIC8vIENvbnRyb2xzIGNvbWUgaGVyZSBmb3IgUk5ESVMgYW5kIENEQy4gSWYg aXQgaXMgQ0RDLCBjaGVjayB3aGV0aGVyIFJORElTIGlzIHByZXNlbnQgb24gdGhlIHNhbWUgY29u dHJvbGxlciBvciBub3QuDQorICBpZiAoSXNVc2JDZGNEYXRhIChVc2JJbykpIHsNCisgICAgREVC VUcgKChERUJVR19JTkZPLCAiUm5kaXMgQ0RDRGF0YSBpbnRlcmZhY2UgZm91bmRcbiIpKTsNCisN CisgICAgLy8gRmluZCB0aGUgcGFyZW50IFJORElTIGFuZCB1cGRhdGUgdGhlIFVzYklvIGZvciB0 aGUgQ0RDIGRldmljZQ0KKyAgICBTdGF0dXMgPSBVcGRhdGVSbmRpc0RldmljZSAoDQorICAgICAg ICAgICAgICAgVXNiRXRoUGF0aCwNCisgICAgICAgICAgICAgICAmVXNiUm5kaXNEZXZpY2UNCisg ICAgICAgICAgICAgICApOw0KKw0KKyAgICBpZiAoIUVGSV9FUlJPUiAoU3RhdHVzKSkgew0KKyAg ICAgIERFQlVHICgoREVCVUdfSU5GTywgIlJuZGlzIE1hdGNoaW5nIGludGVyZmFjZSBmb3VuZFxu IikpOw0KKyAgICAgIFVzYlJuZGlzRGV2aWNlLT5Vc2JDZGNEYXRhSGFuZGxlID0gQ29udHJvbGxl ckhhbmRsZTsNCisgICAgICBVc2JSbmRpc0RldmljZS0+VXNiSW9DZGNEYXRhICAgICA9IFVzYklv Ow0KKyAgICAgIEdldEVuZHBvaW50IChVc2JSbmRpc0RldmljZS0+VXNiSW9DZGNEYXRhLCBVc2JS bmRpc0RldmljZSk7DQorICAgICAgcmV0dXJuIFN0YXR1czsNCisgICAgfSBlbHNlIHsNCisgICAg ICAvLyBDaGVjayBpZiBSbkRpcyBleGlzdA0KKyAgICAgIFN0YXR1cyA9IEZpbmRNYXRjaGluZ1Ju ZGlzRGV2ICgNCisgICAgICAgICAgICAgICAgIENvbnRyb2xsZXJIYW5kbGUsDQorICAgICAgICAg ICAgICAgICAmVXNiSW8sDQorICAgICAgICAgICAgICAgICAmUm5kaXNIYW5kbGUNCisgICAgICAg ICAgICAgICAgICk7DQorDQorICAgICAgaWYgKEVGSV9FUlJPUiAoU3RhdHVzKSkgew0KKyAgICAg ICAgZ0JTLT5DbG9zZVByb3RvY29sICgNCisgICAgICAgICAgICAgICBDb250cm9sbGVySGFuZGxl LA0KKyAgICAgICAgICAgICAgICZnRWZpVXNiSW9Qcm90b2NvbEd1aWQsDQorICAgICAgICAgICAg ICAgVGhpcy0+RHJpdmVyQmluZGluZ0hhbmRsZSwNCisgICAgICAgICAgICAgICBDb250cm9sbGVy SGFuZGxlDQorICAgICAgICAgICAgICAgKTsNCisgICAgICAgIHJldHVybiBTdGF0dXM7DQorICAg ICAgfQ0KKyAgICB9DQorICB9DQorDQorICBVc2JSbmRpc0RldmljZSA9IEFsbG9jYXRlWmVyb1Bv b2wgKHNpemVvZiAoVVNCX1JORElTX0RFVklDRSkpOw0KKw0KKyAgaWYgKCFVc2JSbmRpc0Rldmlj ZSkgew0KKyAgICBERUJVRyAoKERFQlVHX0VSUk9SLCAiQWxsb2NhdGVaZXJvUG9vbCBGYWlsXG4i KSk7DQorDQorICAgIGdCUy0+Q2xvc2VQcm90b2NvbCAoDQorICAgICAgICAgICBDb250cm9sbGVy SGFuZGxlLA0KKyAgICAgICAgICAgJmdFZmlVc2JJb1Byb3RvY29sR3VpZCwNCisgICAgICAgICAg IFRoaXMtPkRyaXZlckJpbmRpbmdIYW5kbGUsDQorICAgICAgICAgICBDb250cm9sbGVySGFuZGxl DQorICAgICAgICAgICApOw0KKyAgICByZXR1cm4gRUZJX09VVF9PRl9SRVNPVVJDRVM7DQorICB9 DQorDQorICBTdGF0dXMgPSBMb2FkQWxsRGVzY3JpcHRvciAoDQorICAgICAgICAgICAgIFVzYklv LA0KKyAgICAgICAgICAgICAmVXNiUm5kaXNEZXZpY2UtPkNvbmZpZw0KKyAgICAgICAgICAgICAp Ow0KKyAgaWYgKEVGSV9FUlJPUiAoU3RhdHVzKSkgew0KKyAgICBERUJVRyAoKERFQlVHX0VSUk9S LCAiJWE6TG9hZEFsbERlc2NyaXB0b3Igc3RhdHVzID0gJXJcbiIsIF9fZnVuY19fLCBTdGF0dXMp KTsNCisgICAgZ0JTLT5DbG9zZVByb3RvY29sICgNCisgICAgICAgICAgIENvbnRyb2xsZXJIYW5k bGUsDQorICAgICAgICAgICAmZ0VmaVVzYklvUHJvdG9jb2xHdWlkLA0KKyAgICAgICAgICAgVGhp cy0+RHJpdmVyQmluZGluZ0hhbmRsZSwNCisgICAgICAgICAgIENvbnRyb2xsZXJIYW5kbGUNCisg ICAgICAgICAgICk7DQorICAgIEZyZWVQb29sIChVc2JSbmRpc0RldmljZSk7DQorICAgIHJldHVy biBTdGF0dXM7DQorICB9DQorDQorICBTdGF0dXMgPSBVc2JJby0+VXNiR2V0SW50ZXJmYWNlRGVz Y3JpcHRvciAoDQorICAgICAgICAgICAgICAgICAgICBVc2JJbywNCisgICAgICAgICAgICAgICAg ICAgICZJbnRlcmZhY2UNCisgICAgICAgICAgICAgICAgICAgICk7DQorICBpZiAoRUZJX0VSUk9S IChTdGF0dXMpKSB7DQorICAgIERFQlVHICgoREVCVUdfRVJST1IsICIlYTpVc2JHZXRJbnRlcmZh Y2VEZXNjcmlwdG9yIHN0YXR1cyA9ICVyXG4iLCBfX2Z1bmNfXywgU3RhdHVzKSk7DQorICAgIGdC Uy0+Q2xvc2VQcm90b2NvbCAoDQorICAgICAgICAgICBDb250cm9sbGVySGFuZGxlLA0KKyAgICAg ICAgICAgJmdFZmlVc2JJb1Byb3RvY29sR3VpZCwNCisgICAgICAgICAgIFRoaXMtPkRyaXZlckJp bmRpbmdIYW5kbGUsDQorICAgICAgICAgICBDb250cm9sbGVySGFuZGxlDQorICAgICAgICAgICAp Ow0KKyAgICBGcmVlUG9vbCAoVXNiUm5kaXNEZXZpY2UtPkNvbmZpZyk7DQorICAgIEZyZWVQb29s IChVc2JSbmRpc0RldmljZSk7DQorICAgIHJldHVybiBTdGF0dXM7DQorICB9DQorDQorICBVc2JS bmRpc0RldmljZS0+U2lnbmF0dXJlICAgICAgICAgICAgICAgICAgICAgICAgICA9IFVTQl9STkRJ U19TSUdOQVRVUkU7DQorICBVc2JSbmRpc0RldmljZS0+TnVtT2ZJbnRlcmZhY2UgICAgICAgICAg ICAgICAgICAgICA9IEludGVyZmFjZS5JbnRlcmZhY2VOdW1iZXI7DQorICBVc2JSbmRpc0Rldmlj ZS0+VXNiUm5kaXNIYW5kbGUgICAgICAgICAgICAgICAgICAgICA9IFJuZGlzSGFuZGxlOw0KKyAg VXNiUm5kaXNEZXZpY2UtPlVzYkNkY0RhdGFIYW5kbGUgICAgICAgICAgICAgICAgICAgPSAwOw0K KyAgVXNiUm5kaXNEZXZpY2UtPlVzYklvICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPSBV c2JJbzsNCisgIFVzYlJuZGlzRGV2aWNlLT5Vc2JFdGguVXNiRXRoUmVjZWl2ZSAgICAgICAgICAg ICAgID0gUm5kaXNVbmRpUmVjZWl2ZTsNCisgIFVzYlJuZGlzRGV2aWNlLT5Vc2JFdGguVXNiRXRo VHJhbnNtaXQgICAgICAgICAgICAgID0gUm5kaXNVbmRpVHJhbnNtaXQ7DQorICBVc2JSbmRpc0Rl dmljZS0+VXNiRXRoLlVzYkV0aEludGVycnVwdCAgICAgICAgICAgICA9IFVzYlJuZGlzSW50ZXJy dXB0Ow0KKyAgVXNiUm5kaXNEZXZpY2UtPlVzYkV0aC5Vc2JFdGhNYWNBZGRyZXNzICAgICAgICAg ICAgPSBHZXRVc2JFdGhNYWNBZGRyZXNzOw0KKyAgVXNiUm5kaXNEZXZpY2UtPlVzYkV0aC5Vc2JF dGhNYXhCdWxrU2l6ZSAgICAgICAgICAgPSBVc2JFdGhCdWxrU2l6ZTsNCisgIFVzYlJuZGlzRGV2 aWNlLT5Vc2JFdGguVXNiSGVhZGVyRnVuRGVzY3JpcHRvciAgICAgID0gR2V0VXNiSGVhZGVyRnVu RGVzY3JpcHRvcjsNCisgIFVzYlJuZGlzRGV2aWNlLT5Vc2JFdGguVXNiVW5pb25GdW5EZXNjcmlw dG9yICAgICAgID0gR2V0VXNiVW5pb25GdW5EZXNjcmlwdG9yOw0KKyAgVXNiUm5kaXNEZXZpY2Ut PlVzYkV0aC5Vc2JFdGhGdW5EZXNjcmlwdG9yICAgICAgICAgPSBHZXRVc2JSbmRpc0Z1bkRlc2Ny aXB0b3I7DQorICBVc2JSbmRpc0RldmljZS0+VXNiRXRoLlNldFVzYkV0aE1jYXN0RmlsdGVyICAg ICAgICA9IFNldFVzYlJuZGlzTWNhc3RGaWx0ZXI7DQorICBVc2JSbmRpc0RldmljZS0+VXNiRXRo LlNldFVzYkV0aFBvd2VyUGF0dGVybkZpbHRlciA9IFNldFVzYlJuZGlzUG93ZXJGaWx0ZXI7DQor ICBVc2JSbmRpc0RldmljZS0+VXNiRXRoLkdldFVzYkV0aFBvd2VyUGF0dGVybkZpbHRlciA9IEdl dFVzYlJuZGlzUG93ZXJGaWx0ZXI7DQorICBVc2JSbmRpc0RldmljZS0+VXNiRXRoLlNldFVzYkV0 aFBhY2tldEZpbHRlciAgICAgICA9IFNldFVzYlJuZGlzUGFja2V0RmlsdGVyOw0KKyAgVXNiUm5k aXNEZXZpY2UtPlVzYkV0aC5HZXRVc2JFdGhTdGF0aXN0aWMgICAgICAgICAgPSBHZXRSbmRpc1N0 YXRpc3RpYzsNCisNCisgIFVzYlJuZGlzRGV2aWNlLT5Vc2JFdGguVXNiRXRoVW5kaS5Vc2JFdGhV bmRpR2V0U3RhdGUgICAgICAgID0gUm5kaXNEdW1teVJldHVybjsNCisgIFVzYlJuZGlzRGV2aWNl LT5Vc2JFdGguVXNiRXRoVW5kaS5Vc2JFdGhVbmRpU3RhcnQgICAgICAgICAgID0gUm5kaXNVbmRp U3RhcnQ7DQorICBVc2JSbmRpc0RldmljZS0+VXNiRXRoLlVzYkV0aFVuZGkuVXNiRXRoVW5kaVN0 b3AgICAgICAgICAgICA9IFJuZGlzVW5kaVN0b3A7DQorICBVc2JSbmRpc0RldmljZS0+VXNiRXRo LlVzYkV0aFVuZGkuVXNiRXRoVW5kaUdldEluaXRJbmZvICAgICA9IFJuZGlzVW5kaUdldEluaXRJ bmZvOw0KKyAgVXNiUm5kaXNEZXZpY2UtPlVzYkV0aC5Vc2JFdGhVbmRpLlVzYkV0aFVuZGlHZXRD b25maWdJbmZvICAgPSBSbmRpc1VuZGlHZXRDb25maWdJbmZvOw0KKyAgVXNiUm5kaXNEZXZpY2Ut PlVzYkV0aC5Vc2JFdGhVbmRpLlVzYkV0aFVuZGlJbml0aWFsaXplICAgICAgPSBSbmRpc1VuZGlJ bml0aWFsaXplOw0KKyAgVXNiUm5kaXNEZXZpY2UtPlVzYkV0aC5Vc2JFdGhVbmRpLlVzYkV0aFVu ZGlSZXNldCAgICAgICAgICAgPSBSbmRpc1VuZGlSZXNldDsNCisgIFVzYlJuZGlzRGV2aWNlLT5V c2JFdGguVXNiRXRoVW5kaS5Vc2JFdGhVbmRpU2h1dGRvd24gICAgICAgID0gUm5kaXNVbmRpU2h1 dGRvd247DQorICBVc2JSbmRpc0RldmljZS0+VXNiRXRoLlVzYkV0aFVuZGkuVXNiRXRoVW5kaUlu dGVycnVwdEVuYWJsZSA9IFJuZGlzRHVtbXlSZXR1cm47DQorICBVc2JSbmRpc0RldmljZS0+VXNi RXRoLlVzYkV0aFVuZGkuVXNiRXRoVW5kaVJlY2VpdmVGaWx0ZXIgICA9IFJuZGlzVW5kaVJlY2Vp dmVGaWx0ZXI7DQorICBVc2JSbmRpc0RldmljZS0+VXNiRXRoLlVzYkV0aFVuZGkuVXNiRXRoVW5k aVN0YXRpb25BZGRyZXNzICA9IFJuZGlzRHVtbXlSZXR1cm47DQorICBVc2JSbmRpc0RldmljZS0+ VXNiRXRoLlVzYkV0aFVuZGkuVXNiRXRoVW5kaVN0YXRpc3RpY3MgICAgICA9IE5VTEw7DQorICBV c2JSbmRpc0RldmljZS0+VXNiRXRoLlVzYkV0aFVuZGkuVXNiRXRoVW5kaU1jYXN0SXAyTWFjICAg ICA9IFJuZGlzRHVtbXlSZXR1cm47DQorICBVc2JSbmRpc0RldmljZS0+VXNiRXRoLlVzYkV0aFVu ZGkuVXNiRXRoVW5kaU52RGF0YSAgICAgICAgICA9IFJuZGlzRHVtbXlSZXR1cm47DQorICBVc2JS bmRpc0RldmljZS0+VXNiRXRoLlVzYkV0aFVuZGkuVXNiRXRoVW5kaUdldFN0YXR1cyAgICAgICA9 IFJuZGlzVW5kaUdldFN0YXR1czsNCisgIFVzYlJuZGlzRGV2aWNlLT5Vc2JFdGguVXNiRXRoVW5k aS5Vc2JFdGhVbmRpRmlsbEhlYWRlciAgICAgID0gUm5kaXNEdW1teVJldHVybjsNCisgIFVzYlJu ZGlzRGV2aWNlLT5Vc2JFdGguVXNiRXRoVW5kaS5Vc2JFdGhVbmRpVHJhbnNtaXQgICAgICAgID0g TlVMTDsNCisgIFVzYlJuZGlzRGV2aWNlLT5Vc2JFdGguVXNiRXRoVW5kaS5Vc2JFdGhVbmRpUmVj ZWl2ZSAgICAgICAgID0gTlVMTDsNCisNCisgIFVzYlJuZGlzRGV2aWNlLT5NYXhUcmFuc2ZlclNp emUgICAgICAgPSBSTkRJU19NQVhfVFJBTlNGRVJfU0laRTsNCisgIFVzYlJuZGlzRGV2aWNlLT5N YXhQYWNrZXRzUGVyVHJhbnNmZXIgPSAxOw0KKyAgVXNiUm5kaXNEZXZpY2UtPlBhY2tldEFsaWdu bWVudEZhY3RvciA9IDA7DQorDQorICBJbml0aWFsaXplTGlzdEhlYWQgKCZVc2JSbmRpc0Rldmlj ZS0+UmVjZWl2ZVBhY2tldExpc3QpOw0KKw0KKyAgLy8gVGhpcyBpcyBhIFJORElTIGludGVyZmFj ZS4gU2VlIHdoZXRoZXIgQ0RDLURBVEEgaW50ZXJmYWNlIGhhcyBhbHJlYWR5IGJlZW4gY29ubmVj dGVkIG9yIG5vdA0KKyAgRmluZE1hdGNoaW5nQ2RjRGF0YSAoVXNiUm5kaXNEZXZpY2UpOw0KKw0K KyAgaWYgKFVzYlJuZGlzRGV2aWNlLT5Vc2JJb0NkY0RhdGEpIHsNCisgICAgU3RhdHVzID0gZ0JT LT5JbnN0YWxsUHJvdG9jb2xJbnRlcmZhY2UgKA0KKyAgICAgICAgICAgICAgICAgICAgJkNvbnRy b2xsZXJIYW5kbGUsDQorICAgICAgICAgICAgICAgICAgICAmZ0Vka0lJVXNiRXRoUHJvdG9jb2xH dWlkLA0KKyAgICAgICAgICAgICAgICAgICAgRUZJX05BVElWRV9JTlRFUkZBQ0UsDQorICAgICAg ICAgICAgICAgICAgICAmKFVzYlJuZGlzRGV2aWNlLT5Vc2JFdGgpDQorICAgICAgICAgICAgICAg ICAgICApOw0KKyAgICBpZiAoRUZJX0VSUk9SIChTdGF0dXMpKSB7DQorICAgICAgZ0JTLT5DbG9z ZVByb3RvY29sICgNCisgICAgICAgICAgICAgQ29udHJvbGxlckhhbmRsZSwNCisgICAgICAgICAg ICAgJmdFZmlVc2JJb1Byb3RvY29sR3VpZCwNCisgICAgICAgICAgICAgVGhpcy0+RHJpdmVyQmlu ZGluZ0hhbmRsZSwNCisgICAgICAgICAgICAgQ29udHJvbGxlckhhbmRsZQ0KKyAgICAgICAgICAg ICApOw0KKw0KKyAgICAgIEZyZWVQb29sIChVc2JSbmRpc0RldmljZS0+Q29uZmlnKTsNCisgICAg ICBGcmVlUG9vbCAoVXNiUm5kaXNEZXZpY2UpOw0KKyAgICAgIHJldHVybiBTdGF0dXM7DQorICAg IH0NCisNCisgICAgR2V0RW5kcG9pbnQgKFVzYlJuZGlzRGV2aWNlLT5Vc2JJbywgVXNiUm5kaXNE ZXZpY2UpOw0KKw0KKyAgICBERUJVRyAoKERFQlVHX0lORk8sICJSbmRpcyBEZXZpY2VIYW5kbGUg JXJcbiIsIFVzYlJuZGlzRGV2aWNlLT5Vc2JSbmRpc0hhbmRsZSkpOw0KKyAgICBERUJVRyAoKERF QlVHX0lORk8sICJDREMgRGV2aWNlSGFuZGxlICVyXG4iLCBVc2JSbmRpc0RldmljZS0+VXNiQ2Rj RGF0YUhhbmRsZSkpOw0KKyAgICByZXR1cm4gRUZJX1NVQ0NFU1M7DQorICB9DQorDQorICBGcmVl UG9vbCAoVXNiUm5kaXNEZXZpY2UtPkNvbmZpZyk7DQorICBGcmVlUG9vbCAoVXNiUm5kaXNEZXZp Y2UpOw0KKw0KKyAgcmV0dXJuIEVGSV9TVUNDRVNTOw0KK30NCisNCisvKioNCisgIENoZWNrYW5k U3RvcFJuZGlzRGV2aWNlDQorDQorICBAcGFyYW1baW5dICBUaGlzICAgICAgICAgICAgICAgICBQ cm90b2NvbCBpbnN0YW5jZSBwb2ludGVyLg0KKyAgQHBhcmFtW2luXSAgQ29udHJvbGxlckhhbmRs ZSAgICAgSGFuZGxlIG9mIGRldmljZSB0byBiaW5kIGRyaXZlciB0by4NCisNCisgIEByZXR2YWwg RUZJX1NVQ0NFU1MgICAgICAgICAgVGhpcyBkcml2ZXIgaXMgYWRkZWQgdG8gQ29udHJvbGxlckhh bmRsZQ0KKyAgQHJldHZhbCBFRklfREVWSUNFX0VSUk9SICAgICBUaGlzIGRyaXZlciBjb3VsZCBu b3QgYmUgc3RhcnRlZCBkdWUgdG8gYSBkZXZpY2UgZXJyb3INCisgIEByZXR2YWwgb3RoZXIgICAg ICAgICAgICAgICAgVGhpcyBkcml2ZXIgZG9lcyBub3Qgc3VwcG9ydCB0aGlzIGRldmljZQ0KKw0K KyoqLw0KK0VGSV9TVEFUVVMNCitFRklBUEkNCitDaGVja2FuZFN0b3BSbmRpc0RldmljZSAoDQor ICBJTiAgRUZJX0RSSVZFUl9CSU5ESU5HX1BST1RPQ09MICAqVGhpcywNCisgIElOICBFRklfSEFO RExFICAgICAgICAgICAgICAgICAgIENvbnRyb2xsZXJIYW5kbGUNCisgICkNCit7DQorICBFRklf U1RBVFVTICAgICAgICAgICBTdGF0dXM7DQorICBFRklfVVNCX0lPX1BST1RPQ09MICAqVXNiSW87 DQorDQorICBTdGF0dXMgPSBnQlMtPk9wZW5Qcm90b2NvbCAoDQorICAgICAgICAgICAgICAgICAg Q29udHJvbGxlckhhbmRsZSwNCisgICAgICAgICAgICAgICAgICAmZ0VmaVVzYklvUHJvdG9jb2xH dWlkLA0KKyAgICAgICAgICAgICAgICAgIChWT0lEICoqKSZVc2JJbywNCisgICAgICAgICAgICAg ICAgICBUaGlzLT5Ecml2ZXJCaW5kaW5nSGFuZGxlLA0KKyAgICAgICAgICAgICAgICAgIENvbnRy b2xsZXJIYW5kbGUsDQorICAgICAgICAgICAgICAgICAgRUZJX09QRU5fUFJPVE9DT0xfR0VUX1BS T1RPQ09MDQorICAgICAgICAgICAgICAgICAgKTsNCisgIGlmIChFRklfRVJST1IgKFN0YXR1cykp IHsNCisgICAgcmV0dXJuIFN0YXR1czsNCisgIH0NCisNCisgIGlmIChJc1VzYlJuZGlzIChVc2JJ bykpIHsNCisgICAgU3RhdHVzID0gZ0JTLT5DbG9zZVByb3RvY29sICgNCisgICAgICAgICAgICAg ICAgICAgIENvbnRyb2xsZXJIYW5kbGUsDQorICAgICAgICAgICAgICAgICAgICAmZ0VmaVVzYklv UHJvdG9jb2xHdWlkLA0KKyAgICAgICAgICAgICAgICAgICAgVGhpcy0+RHJpdmVyQmluZGluZ0hh bmRsZSwNCisgICAgICAgICAgICAgICAgICAgIENvbnRyb2xsZXJIYW5kbGUNCisgICAgICAgICAg ICAgICAgICAgICk7DQorICAgIERFQlVHICgoREVCVUdfRVJST1IsICJSbmRpcyBDb250cm9sbGVy SGFuZGxlIFN0b3AgJXJcbiIsIFN0YXR1cykpOw0KKyAgICByZXR1cm4gU3RhdHVzOw0KKyAgfQ0K Kw0KKyAgcmV0dXJuIEVGSV9VTlNVUFBPUlRFRDsNCit9DQorDQorLyoqDQorICBVU0IgUm5kaXMg RHJpdmVyIEJpbmRpbmcgU3RvcC4NCisNCisgIEBwYXJhbVtpbl0gIFRoaXMgICAgICAgICAgICAg ICAgICBQcm90b2NvbCBpbnN0YW5jZSBwb2ludGVyLg0KKyAgQHBhcmFtW2luXSAgQ29udHJvbGxl ckhhbmRsZSAgICAgIEhhbmRsZSBvZiBkZXZpY2UgdG8gc3RvcCBkcml2ZXIgb24NCisgIEBwYXJh bVtpbl0gIE51bWJlck9mQ2hpbGRyZW4gICAgICBOdW1iZXIgb2YgSGFuZGxlcyBpbiBDaGlsZEhh bmRsZUJ1ZmZlci4gSWYgbnVtYmVyIG9mDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgY2hpbGRyZW4gaXMgemVybyBzdG9wIHRoZSBlbnRpcmUgYnVzIGRyaXZlci4NCisgIEBw YXJhbVtpbl0gIENoaWxkSGFuZGxlQnVmZmVyICAgICBMaXN0IG9mIENoaWxkIEhhbmRsZXMgdG8g U3RvcC4NCisNCisgIEByZXR2YWwgRUZJX1NVQ0NFU1MgICAgICAgICAgICAgICBUaGlzIGRyaXZl ciBpcyByZW1vdmVkIENvbnRyb2xsZXJIYW5kbGUNCisgIEByZXR2YWwgb3RoZXIgICAgICAgICAg ICAgICAgICAgICBUaGlzIGRyaXZlciB3YXMgbm90IHJlbW92ZWQgZnJvbSB0aGlzIGRldmljZQ0K Kw0KKyoqLw0KK0VGSV9TVEFUVVMNCitFRklBUEkNCitVc2JSbmRpc0RyaXZlclN0b3AgKA0KKyAg SU4gIEVGSV9EUklWRVJfQklORElOR19QUk9UT0NPTCAgKlRoaXMsDQorICBJTiAgRUZJX0hBTkRM RSAgICAgICAgICAgICAgICAgICBDb250cm9sbGVySGFuZGxlLA0KKyAgSU4gIFVJTlROICAgICAg ICAgICAgICAgICAgICAgICAgTnVtYmVyT2ZDaGlsZHJlbiwNCisgIElOICBFRklfSEFORExFICAg ICAgICAgICAgICAgICAgICpDaGlsZEhhbmRsZUJ1ZmZlcg0KKyAgKQ0KK3sNCisgIEVGSV9TVEFU VVMgICAgICAgICAgICAgICAgICAgU3RhdHVzOw0KKyAgRURLSUlfVVNCX0VUSEVSTkVUX1BST1RP Q09MICAqVXNiRXRoUHJvdG9jb2w7DQorICBVU0JfUk5ESVNfREVWSUNFICAgICAgICAgICAgICpV c2JSbmRpc0RldmljZTsNCisNCisgIERFQlVHICgoREVCVUdfSU5GTywgIlVzYlJuZGlzRHJpdmVy U3RvcCBDb250cm9sbGVySGFuZGxlICVseFxuIiwgQ29udHJvbGxlckhhbmRsZSkpOw0KKw0KKyAg U3RhdHVzID0gZ0JTLT5PcGVuUHJvdG9jb2wgKA0KKyAgICAgICAgICAgICAgICAgIENvbnRyb2xs ZXJIYW5kbGUsDQorICAgICAgICAgICAgICAgICAgJmdFZGtJSVVzYkV0aFByb3RvY29sR3VpZCwN CisgICAgICAgICAgICAgICAgICAoVk9JRCAqKikmVXNiRXRoUHJvdG9jb2wsDQorICAgICAgICAg ICAgICAgICAgVGhpcy0+RHJpdmVyQmluZGluZ0hhbmRsZSwNCisgICAgICAgICAgICAgICAgICBD b250cm9sbGVySGFuZGxlLA0KKyAgICAgICAgICAgICAgICAgIEVGSV9PUEVOX1BST1RPQ09MX0dF VF9QUk9UT0NPTA0KKyAgICAgICAgICAgICAgICAgICk7DQorICBpZiAoRUZJX0VSUk9SIChTdGF0 dXMpKSB7DQorICAgIFN0YXR1cyA9IENoZWNrYW5kU3RvcFJuZGlzRGV2aWNlIChUaGlzLCBDb250 cm9sbGVySGFuZGxlKTsNCisgICAgcmV0dXJuIFN0YXR1czsNCisgIH0NCisNCisgIFVzYlJuZGlz RGV2aWNlID0gVVNCX1JORElTX0RFVklDRV9GUk9NX1RISVMgKFVzYkV0aFByb3RvY29sKTsNCisN CisgIFN0YXR1cyA9IGdCUy0+Q2xvc2VQcm90b2NvbCAoDQorICAgICAgICAgICAgICAgICAgVXNi Um5kaXNEZXZpY2UtPlVzYkNkY0RhdGFIYW5kbGUsDQorICAgICAgICAgICAgICAgICAgJmdFZmlV c2JJb1Byb3RvY29sR3VpZCwNCisgICAgICAgICAgICAgICAgICBUaGlzLT5Ecml2ZXJCaW5kaW5n SGFuZGxlLA0KKyAgICAgICAgICAgICAgICAgIFVzYlJuZGlzRGV2aWNlLT5Vc2JDZGNEYXRhSGFu ZGxlDQorICAgICAgICAgICAgICAgICAgKTsNCisgIGlmIChFRklfRVJST1IgKFN0YXR1cykpIHsN CisgICAgREVCVUcgKChERUJVR19FUlJPUiwgIiVhOkNsb3NlUHJvdG9jb2wgc3RhdHVzID0gJXJc biIsIF9fZnVuY19fLCBTdGF0dXMpKTsNCisgIH0NCisNCisgIFN0YXR1cyA9IGdCUy0+VW5pbnN0 YWxsUHJvdG9jb2xJbnRlcmZhY2UgKA0KKyAgICAgICAgICAgICAgICAgIENvbnRyb2xsZXJIYW5k bGUsDQorICAgICAgICAgICAgICAgICAgJmdFZGtJSVVzYkV0aFByb3RvY29sR3VpZCwNCisgICAg ICAgICAgICAgICAgICBVc2JFdGhQcm90b2NvbA0KKyAgICAgICAgICAgICAgICAgICk7DQorICBp ZiAoRUZJX0VSUk9SIChTdGF0dXMpKSB7DQorICAgIHJldHVybiBTdGF0dXM7DQorICB9DQorDQor ICBTdGF0dXMgPSBnQlMtPkNsb3NlUHJvdG9jb2wgKA0KKyAgICAgICAgICAgICAgICAgIENvbnRy b2xsZXJIYW5kbGUsDQorICAgICAgICAgICAgICAgICAgJmdFZmlVc2JJb1Byb3RvY29sR3VpZCwN CisgICAgICAgICAgICAgICAgICBUaGlzLT5Ecml2ZXJCaW5kaW5nSGFuZGxlLA0KKyAgICAgICAg ICAgICAgICAgIENvbnRyb2xsZXJIYW5kbGUNCisgICAgICAgICAgICAgICAgICApOw0KKw0KKyAg RnJlZVBvb2wgKFVzYlJuZGlzRGV2aWNlLT5Db25maWcpOw0KKyAgRnJlZVBvb2wgKFVzYlJuZGlz RGV2aWNlKTsNCisNCisgIERFQlVHICgoREVCVUdfSU5GTywgIlVzYlJuZGlzRHJpdmVyU3RvcCAl clxuIiwgU3RhdHVzKSk7DQorICByZXR1cm4gU3RhdHVzOw0KK30NCisNCisvKioNCisgIEVudHJ5 cG9pbnQgb2YgUk5ESVMgRHJpdmVyLg0KKw0KKyAgVGhpcyBmdW5jdGlvbiBpcyB0aGUgZW50cnlw b2ludCBvZiBSTkRJUyBEcml2ZXIuIEl0IGluc3RhbGxzIERyaXZlciBCaW5kaW5nDQorICBQcm90 b2NvbHMgdG9nZXRoZXIgd2l0aCBDb21wb25lbnQgTmFtZSBQcm90b2NvbHMuDQorDQorICBAcGFy YW1baW5dICBJbWFnZUhhbmRsZSAgICAgICBUaGUgZmlybXdhcmUgYWxsb2NhdGVkIGhhbmRsZSBm b3IgdGhlIEVGSSBpbWFnZS4NCisgIEBwYXJhbVtpbl0gIFN5c3RlbVRhYmxlICAgICAgIEEgcG9p bnRlciB0byB0aGUgRUZJIFN5c3RlbSBUYWJsZS4NCisNCisgIEByZXR2YWwgRUZJX1NVQ0NFU1Mg ICAgICAgICAgIFRoZSBlbnRyeSBwb2ludCBpcyBleGVjdXRlZCBzdWNjZXNzZnVsbHkuDQorDQor KiovDQorRUZJX1NUQVRVUw0KK0VGSUFQSQ0KK1VzYlJuZGlzRW50cnkgKA0KKyAgSU4gRUZJX0hB TkRMRSAgICAgICAgSW1hZ2VIYW5kbGUsDQorICBJTiBFRklfU1lTVEVNX1RBQkxFICAqU3lzdGVt VGFibGUNCisgICkNCit7DQorICBnVXNiUm5kaXNEcml2ZXJCaW5kaW5nLkRyaXZlckJpbmRpbmdI YW5kbGUgPSBJbWFnZUhhbmRsZTsNCisgIGdVc2JSbmRpc0RyaXZlckJpbmRpbmcuSW1hZ2VIYW5k bGUgICAgICAgICA9IEltYWdlSGFuZGxlOw0KKw0KKyAgcmV0dXJuIGdCUy0+SW5zdGFsbE11bHRp cGxlUHJvdG9jb2xJbnRlcmZhY2VzICgNCisgICAgICAgICAgICAgICAgJmdVc2JSbmRpc0RyaXZl ckJpbmRpbmcuRHJpdmVyQmluZGluZ0hhbmRsZSwNCisgICAgICAgICAgICAgICAgJmdFZmlEcml2 ZXJCaW5kaW5nUHJvdG9jb2xHdWlkLA0KKyAgICAgICAgICAgICAgICAmZ1VzYlJuZGlzRHJpdmVy QmluZGluZywNCisgICAgICAgICAgICAgICAgJmdFZmlDb21wb25lbnROYW1lMlByb3RvY29sR3Vp ZCwNCisgICAgICAgICAgICAgICAgJmdVc2JSbmRpc0NvbXBvbmVudE5hbWUyLA0KKyAgICAgICAg ICAgICAgICBOVUxMDQorICAgICAgICAgICAgICAgICk7DQorfQ0KZGlmZiAtLWdpdCBhL01kZU1v ZHVsZVBrZy9CdXMvVXNiL1VzYk5ldHdvcmsvVXNiUm5kaXMvVXNiUm5kaXMuaCBiL01kZU1vZHVs ZVBrZy9CdXMvVXNiL1VzYk5ldHdvcmsvVXNiUm5kaXMvVXNiUm5kaXMuaA0KbmV3IGZpbGUgbW9k ZSAxMDA2NDQNCmluZGV4IDAwMDAwMDAwMDAuLjljMzg2NDJmZmUNCi0tLSAvZGV2L251bGwNCisr KyBiL01kZU1vZHVsZVBrZy9CdXMvVXNiL1VzYk5ldHdvcmsvVXNiUm5kaXMvVXNiUm5kaXMuaA0K QEAgLTAsMCArMSw1ODYgQEANCisvKiogQGZpbGUNCisgIEhlYWRlciBmaWxlIGZvciBmb3IgVVNC IFJuZGlzIGRyaXZlcg0KKw0KKyAgQ29weXJpZ2h0IChjKSAyMDIzLCBBbWVyaWNhbiBNZWdhdHJl bmRzIEludGVybmF0aW9uYWwgTExDLiBBbGwgcmlnaHRzIHJlc2VydmVkLjxCUj4NCisgIFNQRFgt TGljZW5zZS1JZGVudGlmaWVyOiBCU0QtMi1DbGF1c2UtUGF0ZW50DQorKiovDQorDQorI2lmbmRl ZiBfVVNCX1JORElTX0hfDQorI2RlZmluZSBfVVNCX1JORElTX0hfDQorDQorI2luY2x1ZGUgPExp YnJhcnkvVWVmaURyaXZlckVudHJ5UG9pbnQuaD4NCisjaW5jbHVkZSA8TGlicmFyeS9VZWZpQm9v dFNlcnZpY2VzVGFibGVMaWIuaD4NCisjaW5jbHVkZSA8TGlicmFyeS9VZWZpTGliLmg+DQorI2lu Y2x1ZGUgPExpYnJhcnkvRGV2aWNlUGF0aExpYi5oPg0KKyNpbmNsdWRlIDxMaWJyYXJ5L0RlYnVn TGliLmg+DQorI2luY2x1ZGUgPExpYnJhcnkvTWVtb3J5QWxsb2NhdGlvbkxpYi5oPg0KKyNpbmNs dWRlIDxMaWJyYXJ5L0Jhc2VNZW1vcnlMaWIuaD4NCisjaW5jbHVkZSA8TGlicmFyeS9VZWZpVXNi TGliLmg+DQorI2luY2x1ZGUgPFByb3RvY29sL1VzYklvLmg+DQorI2luY2x1ZGUgPFByb3RvY29s L1VzYkV0aGVybmV0UHJvdG9jb2wuaD4NCisNCit0eXBlZGVmIHN0cnVjdCBfUkVNT1RFX05ESVNf TVNHX0hFQURFUiBSRU1PVEVfTkRJU19NU0dfSEVBREVSOw0KKw0KK3R5cGVkZWYgc3RydWN0IHsN CisgIFVJTlQzMiAgICAgICAgICAgICAgICAgICAgICAgICBTaWduYXR1cmU7DQorICBFREtJSV9V U0JfRVRIRVJORVRfUFJPVE9DT0wgICAgVXNiRXRoOw0KKyAgRUZJX0hBTkRMRSAgICAgICAgICAg ICAgICAgICAgIFVzYkNkY0RhdGFIYW5kbGU7DQorICBFRklfSEFORExFICAgICAgICAgICAgICAg ICAgICAgVXNiUm5kaXNIYW5kbGU7DQorICBFRklfVVNCX0lPX1BST1RPQ09MICAgICAgICAgICAg KlVzYklvOw0KKyAgRUZJX1VTQl9JT19QUk9UT0NPTCAgICAgICAgICAgICpVc2JJb0NkY0RhdGE7 DQorICBFRklfVVNCX0NPTkZJR19ERVNDUklQVE9SICAgICAgKkNvbmZpZzsNCisgIFVJTlQ4ICAg ICAgICAgICAgICAgICAgICAgICAgICBOdW1PZkludGVyZmFjZTsNCisgIFVJTlQ4ICAgICAgICAg ICAgICAgICAgICAgICAgICBCdWxrSW5FbmRwb2ludDsNCisgIFVJTlQ4ICAgICAgICAgICAgICAg ICAgICAgICAgICBCdWxrT3V0RW5kcG9pbnQ7DQorICBVSU5UOCAgICAgICAgICAgICAgICAgICAg ICAgICAgSW50ZXJydXBFbmRwb2ludDsNCisgIEVGSV9NQUNfQUREUkVTUyAgICAgICAgICAgICAg ICBNYWNBZGRyZXNzOw0KKyAgVUlOVDMyICAgICAgICAgICAgICAgICAgICAgICAgIFJlcXVlc3RJ ZDsNCisgIFVJTlQzMiAgICAgICAgICAgICAgICAgICAgICAgICBNZWRpdW07DQorICBVSU5UMzIg ICAgICAgICAgICAgICAgICAgICAgICAgTWF4UGFja2V0c1BlclRyYW5zZmVyOw0KKyAgVUlOVDMy ICAgICAgICAgICAgICAgICAgICAgICAgIE1heFRyYW5zZmVyU2l6ZTsNCisgIFVJTlQzMiAgICAg ICAgICAgICAgICAgICAgICAgICBQYWNrZXRBbGlnbm1lbnRGYWN0b3I7DQorICBMSVNUX0VOVFJZ ICAgICAgICAgICAgICAgICAgICAgUmVjZWl2ZVBhY2tldExpc3Q7DQorfSBVU0JfUk5ESVNfREVW SUNFOw0KKw0KKyNkZWZpbmUgVVNCX1JORElTX0RSSVZFUl9WRVJTSU9OICAgICAgIDENCisjZGVm aW5lIFVTQl9UWF9FVEhFUk5FVF9CVUxLX1RJTUVPVVQgICAzMDAwDQorI2RlZmluZSBVU0JfUlhf RVRIRVJORVRfQlVMS19USU1FT1VUICAgMw0KKyNkZWZpbmUgVVNCX0VUSEVSTkVUX1RSQU5TRkVS X1RJTUVPVVQgIDIwMA0KKw0KKyNkZWZpbmUgTEFOX0JVTEtJTl9DTURfQ09OVFJPTCAgICAgIDEN CisjZGVmaW5lIE1BWElNVU1fU1RPUEJVTEtJTl9DTlQgICAgICAzMDAgICAgICAgIC8vIEluZGlj YXRpbmcgbWF4aW11bSBjb3VudHMgZm9yIHdhaXRpbmcgYnVsayBpbiBjb21tYW5kDQorI2RlZmlu ZSBNSU5JTVVNX1NUT1BCVUxLSU5fQ05UICAgICAgMyAgICAgICAgICAvLyBJbmRpY2F0aW5nIG1p bmltdW0gY291bnRzIGZvciB3YWl0aW5nIGJ1bGsgaW4gY29tbWFuZA0KKyNkZWZpbmUgQlVMS0lO X0NNRF9QT0xMSU5HX0NOVCAgICAgIDMwMCAgICAgICAgLy8gSW5kaWNhdGluZyB0aGUgd2FpdGlu ZyBjb3VudHMgZm9yIHNlbmQgYnVsayBpbiBjb21tYW5kIHdoZW4gc3lzdGVtIHBlbmRpbmcNCisj ZGVmaW5lIFJORElTX1JFU0VSVkVEX0JZVEVfTEVOR1RIICA4DQorDQorI2RlZmluZSBVU0JfUk5E SVNfU0lHTkFUVVJFICBTSUdOQVRVUkVfMzIoJ3InLCAnbicsICdkJywgJ3MnKQ0KKyNkZWZpbmUg VVNCX1JORElTX0RFVklDRV9GUk9NX1RISVMoYSkgIENSIChhLCBVU0JfUk5ESVNfREVWSUNFLCBV c2JFdGgsIFVTQl9STkRJU19TSUdOQVRVUkUpDQorDQorZXh0ZXJuIEVGSV9DT01QT05FTlRfTkFN RTJfUFJPVE9DT0wgIGdVc2JSbmRpc0NvbXBvbmVudE5hbWUyOw0KKw0KK3N0cnVjdCBCSVRfTUFQ IHsNCisgIHVuc2lnbmVkIGludCAgICBTcmM7DQorICB1bnNpZ25lZCBpbnQgICAgRHN0Ow0KK307 DQorDQorRUZJX1NUQVRVUw0KK0VGSUFQSQ0KK1VzYlJuZGlzRHJpdmVyU3VwcG9ydGVkICgNCisg IElOIEVGSV9EUklWRVJfQklORElOR19QUk9UT0NPTCAgKlRoaXMsDQorICBJTiBFRklfSEFORExF ICAgICAgICAgICAgICAgICAgIENvbnRyb2xsZXJIYW5kbGUsDQorICBJTiBFRklfREVWSUNFX1BB VEhfUFJPVE9DT0wgICAgICpSZW1haW5pbmdEZXZpY2VQYXRoDQorICApOw0KKw0KK0VGSV9TVEFU VVMNCitFRklBUEkNCitVc2JSbmRpc0RyaXZlclN0YXJ0ICgNCisgIElOIEVGSV9EUklWRVJfQklO RElOR19QUk9UT0NPTCAgKlRoaXMsDQorICBJTiBFRklfSEFORExFICAgICAgICAgICAgICAgICAg IENvbnRyb2xsZXJIYW5kbGUsDQorICBJTiBFRklfREVWSUNFX1BBVEhfUFJPVE9DT0wgICAgICpS ZW1haW5pbmdEZXZpY2VQYXRoDQorICApOw0KKw0KK0VGSV9TVEFUVVMNCitFRklBUEkNCitVc2JS bmRpc0RyaXZlclN0b3AgKA0KKyAgSU4gIEVGSV9EUklWRVJfQklORElOR19QUk9UT0NPTCAgKlRo aXMsDQorICBJTiAgRUZJX0hBTkRMRSAgICAgICAgICAgICAgICAgICBDb250cm9sbGVySGFuZGxl LA0KKyAgSU4gIFVJTlROICAgICAgICAgICAgICAgICAgICAgICAgTnVtYmVyT2ZDaGlsZHJlbiwN CisgIElOICBFRklfSEFORExFICAgICAgICAgICAgICAgICAgICpDaGlsZEhhbmRsZUJ1ZmZlcg0K KyAgKTsNCisNCitFRklfU1RBVFVTDQorTG9hZEFsbERlc2NyaXB0b3IgKA0KKyAgSU4gIEVGSV9V U0JfSU9fUFJPVE9DT0wgICAgICAgICpVc2JJbywNCisgIE9VVCBFRklfVVNCX0NPTkZJR19ERVND UklQVE9SICAqKkNvbmZpZ0Rlc2MNCisgICk7DQorDQorQk9PTEVBTg0KK05leHREZXNjcmlwdG9y ICgNCisgIElOIEVGSV9VU0JfQ09ORklHX0RFU0NSSVBUT1IgICpEZXNjLA0KKyAgSU4gT1VUIFVJ TlROICAgICAgICAgICAgICAgICAgKk9mZnNldA0KKyAgKTsNCisNCitFRklfU1RBVFVTDQorR2V0 RnVuY3Rpb25hbERlc2NyaXB0b3IgKA0KKyAgSU4gIEVGSV9VU0JfQ09ORklHX0RFU0NSSVBUT1Ig ICpDb25maWcsDQorICBJTiAgVUlOVDggICAgICAgICAgICAgICAgICAgICAgRnVuRGVzY3JpcHRv clR5cGUsDQorICBPVVQgVk9JRCAgICAgICAgICAgICAgICAgICAgICAgKkRhdGFCdWZmZXINCisg ICk7DQorDQorVk9JRA0KK0dldEVuZHBvaW50ICgNCisgIElOICAgICAgRUZJX1VTQl9JT19QUk9U T0NPTCAgKlVzYklvLA0KKyAgSU4gT1VUICBVU0JfUk5ESVNfREVWSUNFICAgICAqVXNiUm5kaXNE ZXZpY2UNCisgICk7DQorDQorRUZJX1NUQVRVUw0KK0VGSUFQSQ0KK1VzYlJuZGlzSW50ZXJydXB0 ICgNCisgIElOIEVES0lJX1VTQl9FVEhFUk5FVF9QUk9UT0NPTCAgKlRoaXMsDQorICBJTiBCT09M RUFOICAgICAgICAgICAgICAgICAgICAgIElzTmV3VHJhbnNmZXIsDQorICBJTiBVSU5UTiAgICAg ICAgICAgICAgICAgICAgICAgIFBvbGxpbmdJbnRlcnZhbCwNCisgIElOIEVGSV9VU0JfREVWSUNF X1JFUVVFU1QgICAgICAgKlJlcXVzdA0KKyAgKTsNCisNCitFRklfU1RBVFVTDQorRUZJQVBJDQor SW50ZXJydXB0Q2FsbGJhY2sgKA0KKyAgSU4gIFZPSUQgICAgKkRhdGEsDQorICBJTiAgVUlOVE4g ICBEYXRhTGVuZ3RoLA0KKyAgSU4gIFZPSUQgICAgKkNvbnRleHQsDQorICBJTiAgVUlOVDMyICBT dGF0dXMNCisgICk7DQorDQorRUZJX1NUQVRVUw0KK0VGSUFQSQ0KK0dldFVzYkV0aE1hY0FkZHJl c3MgKA0KKyAgSU4gIEVES0lJX1VTQl9FVEhFUk5FVF9QUk9UT0NPTCAgKlRoaXMsDQorICBPVVQg RUZJX01BQ19BRERSRVNTICAgICAgICAgICAgICAqTWFjQWRkcmVzcw0KKyAgKTsNCisNCitFRklf U1RBVFVTDQorRUZJQVBJDQorVXNiRXRoQnVsa1NpemUgKA0KKyAgSU4gIEVES0lJX1VTQl9FVEhF Uk5FVF9QUk9UT0NPTCAgKlRoaXMsDQorICBPVVQgVUlOVE4gICAgICAgICAgICAgICAgICAgICAg ICAqQnVsa1NpemUNCisgICk7DQorDQorRUZJX1NUQVRVUw0KK0VGSUFQSQ0KK1JuZGlzRHVtbXlS ZXR1cm4gKA0KKyAgSU4gIFBYRV9DREIgICAqQ2RiLA0KKyAgSU4gIE5JQ19EQVRBICAqTmljDQor ICApOw0KKw0KK0VGSV9TVEFUVVMNCitFRklBUEkNCitSbmRpc1VuZGlTdGFydCAoDQorICBJTiBQ WEVfQ0RCICAgKkNkYiwNCisgIElOIE5JQ19EQVRBICAqTmljDQorICApOw0KKw0KK0VGSV9TVEFU VVMNCitFRklBUEkNCitSbmRpc1VuZGlTdG9wICgNCisgIElOIFBYRV9DREIgICAqQ2RiLA0KKyAg SU4gTklDX0RBVEEgICpOaWMNCisgICk7DQorDQorRUZJX1NUQVRVUw0KK0VGSUFQSQ0KK1JuZGlz VW5kaUdldEluaXRJbmZvICgNCisgIElOIFBYRV9DREIgICAqQ2RiLA0KKyAgSU4gTklDX0RBVEEg ICpOaWMNCisgICk7DQorDQorRUZJX1NUQVRVUw0KK0VGSUFQSQ0KK1JuZGlzVW5kaUdldENvbmZp Z0luZm8gKA0KKyAgSU4gUFhFX0NEQiAgICpDZGIsDQorICBJTiBOSUNfREFUQSAgKk5pYw0KKyAg KTsNCisNCitFRklfU1RBVFVTDQorRUZJQVBJDQorUm5kaXNVbmRpSW5pdGlhbGl6ZSAoDQorICBJ TiBQWEVfQ0RCICAgKkNkYiwNCisgIElOIE5JQ19EQVRBICAqTmljDQorICApOw0KKw0KK0VGSV9T VEFUVVMNCitFRklBUEkNCitSbmRpc1VuZGlUcmFuc21pdCAoDQorICBJTiAgICAgIFBYRV9DREIg ICAgICAgICAgICAgICAgICAgICAgKkNkYiwNCisgIElOICAgICAgRURLSUlfVVNCX0VUSEVSTkVU X1BST1RPQ09MICAqVGhpcywNCisgIElOICAgICAgVk9JRCAgICAgICAgICAgICAgICAgICAgICAg ICAqQnVsa091dERhdGEsDQorICBJTiBPVVQgIFVJTlROICAgICAgICAgICAgICAgICAgICAgICAg KkRhdGFMZW5ndGgNCisgICk7DQorDQorRUZJX1NUQVRVUw0KK0VGSUFQSQ0KK1JuZGlzVW5kaVJl Y2VpdmUgKA0KKyAgSU4gICAgIFBYRV9DREIgICAgICAgICAgICAgICAgICAgICAgKkNkYiwNCisg IElOICAgICBFREtJSV9VU0JfRVRIRVJORVRfUFJPVE9DT0wgICpUaGlzLA0KKyAgSU4gT1VUIFZP SUQgICAgICAgICAgICAgICAgICAgICAgICAgKkJ1bGtJbkRhdGEsDQorICBJTiBPVVQgVUlOVE4g ICAgICAgICAgICAgICAgICAgICAgICAqRGF0YUxlbmd0aA0KKyAgKTsNCisNCitFRklfU1RBVFVT DQorRUZJQVBJDQorUm5kaXNVbmRpUmVzZXQgKA0KKyAgSU4gUFhFX0NEQiAgICpDZGIsDQorICBJ TiBOSUNfREFUQSAgKk5pYw0KKyAgKTsNCisNCitFRklfU1RBVFVTDQorRUZJQVBJDQorUm5kaXNV bmRpU2h1dGRvd24gKA0KKyAgSU4gUFhFX0NEQiAgICpDZGIsDQorICBJTiBOSUNfREFUQSAgKk5p Yw0KKyAgKTsNCisNCitFRklfU1RBVFVTDQorRUZJQVBJDQorUm5kaXNVbmRpUmVjZWl2ZUZpbHRl ciAoDQorICBJTiBQWEVfQ0RCICAgKkNkYiwNCisgIElOIE5JQ19EQVRBICAqTmljDQorICApOw0K Kw0KK0VGSV9TVEFUVVMNCitFRklBUEkNCitSbmRpc1VuZGlHZXRTdGF0dXMgKA0KKyAgSU4gUFhF X0NEQiAgICpDZGIsDQorICBJTiBOSUNfREFUQSAgKk5pYw0KKyAgKTsNCisNCitFRklfU1RBVFVT DQorRUZJQVBJDQorR2V0VXNiSGVhZGVyRnVuRGVzY3JpcHRvciAoDQorICBJTiAgRURLSUlfVVNC X0VUSEVSTkVUX1BST1RPQ09MICAqVGhpcywNCisgIE9VVCBVU0JfSEVBREVSX0ZVTl9ERVNDUklQ VE9SICAgICpVc2JIZWFkZXJGdW5EZXNjcmlwdG9yDQorICApOw0KKw0KK0VGSV9TVEFUVVMNCitF RklBUEkNCitHZXRVc2JVbmlvbkZ1bkRlc2NyaXB0b3IgKA0KKyAgSU4gIEVES0lJX1VTQl9FVEhF Uk5FVF9QUk9UT0NPTCAgKlRoaXMsDQorICBPVVQgVVNCX1VOSU9OX0ZVTl9ERVNDUklQVE9SICAg ICAqVXNiVW5pb25GdW5EZXNjcmlwdG9yDQorICApOw0KKw0KK0VGSV9TVEFUVVMNCitFRklBUEkN CitHZXRVc2JSbmRpc0Z1bkRlc2NyaXB0b3IgKA0KKyAgSU4gIEVES0lJX1VTQl9FVEhFUk5FVF9Q Uk9UT0NPTCAgKlRoaXMsDQorICBPVVQgVVNCX0VUSEVSTkVUX0ZVTl9ERVNDUklQVE9SICAqVXNi RXRoRnVuRGVzY3JpcHRvcg0KKyAgKTsNCisNCitFRklfU1RBVFVTDQorRUZJQVBJDQorU2V0VXNi Um5kaXNNY2FzdEZpbHRlciAoDQorICBJTiBFREtJSV9VU0JfRVRIRVJORVRfUFJPVE9DT0wgICpU aGlzLA0KKyAgSU4gVUlOVDE2ICAgICAgICAgICAgICAgICAgICAgICBWYWx1ZSwNCisgIElOIFZP SUQgICAgICAgICAgICAgICAgICAgICAgICAgKk1jYXN0QWRkcg0KKyAgKTsNCisNCitFRklfU1RB VFVTDQorRUZJQVBJDQorU2V0VXNiUm5kaXNQb3dlckZpbHRlciAoDQorICBJTiBFREtJSV9VU0Jf RVRIRVJORVRfUFJPVE9DT0wgICpUaGlzLA0KKyAgSU4gVUlOVDE2ICAgICAgICAgICAgICAgICAg ICAgICBWYWx1ZSwNCisgIElOIFVJTlQxNiAgICAgICAgICAgICAgICAgICAgICAgTGVuZ3RoLA0K KyAgSU4gVk9JRCAgICAgICAgICAgICAgICAgICAgICAgICAqUGF0dGVybkZpbHRlcg0KKyAgKTsN CisNCitFRklfU1RBVFVTDQorRUZJQVBJDQorR2V0VXNiUm5kaXNQb3dlckZpbHRlciAoDQorICBJ TiBFREtJSV9VU0JfRVRIRVJORVRfUFJPVE9DT0wgICpUaGlzLA0KKyAgSU4gVUlOVDE2ICAgICAg ICAgICAgICAgICAgICAgICBWYWx1ZSwNCisgIElOIEJPT0xFQU4gICAgICAgICAgICAgICAgICAg ICAgKlBhdHRlcm5BY3RpdmUNCisgICk7DQorDQorRUZJX1NUQVRVUw0KK0VGSUFQSQ0KK1NldFVz YlJuZGlzUGFja2V0RmlsdGVyICgNCisgIElOIEVES0lJX1VTQl9FVEhFUk5FVF9QUk9UT0NPTCAg KlRoaXMsDQorICBJTiBVSU5UMTYgICAgICAgICAgICAgICAgICAgICAgIFZhbHVlDQorICApOw0K Kw0KK0VGSV9TVEFUVVMNCitFRklBUEkNCitHZXRSbmRpc1N0YXRpc3RpYyAoDQorICBJTiBFREtJ SV9VU0JfRVRIRVJORVRfUFJPVE9DT0wgICpUaGlzLA0KKyAgSU4gVUlOVDE2ICAgICAgICAgICAg ICAgICAgICAgICBWYWx1ZSwNCisgIElOIFZPSUQgICAgICAgICAgICAgICAgICAgICAgICAgKlN0 YXRpc3RpYw0KKyAgKTsNCisNCitFRklfU1RBVFVTDQorUm5kaXNDb250cm9sTXNnICgNCisgIElO ICBVU0JfUk5ESVNfREVWSUNFICAgICAgICAqVXNiUm5kaXNEZXZpY2UsDQorICBJTiAgUkVNT1RF X05ESVNfTVNHX0hFQURFUiAgKlJuZGlzTXNnLA0KKyAgT1VUIFJFTU9URV9ORElTX01TR19IRUFE RVIgICpSbmRpc01zZ1Jlc3BvbnNlDQorICApOw0KKw0KK0VGSV9TVEFUVVMNCitSbmRpc1RyYW5z bWl0RGF0YU1zZyAoDQorICBJTiAgVVNCX1JORElTX0RFVklDRSAgICAgICAgKlVzYlJuZGlzRGV2 aWNlLA0KKyAgSU4gIFJFTU9URV9ORElTX01TR19IRUFERVIgICpSbmRpc01zZywNCisgIFVJTlRO ICAgICAgICAgICAgICAgICAgICAgICAqVHJhbnNmZXJMZW5ndGgNCisgICk7DQorDQorRUZJX1NU QVRVUw0KK1JuZGlzUmVjZWl2ZURhdGFNc2cgKA0KKyAgSU4gIFVTQl9STkRJU19ERVZJQ0UgICAg ICAgICpVc2JSbmRpc0RldmljZSwNCisgIElOICBSRU1PVEVfTkRJU19NU0dfSEVBREVSICAqUm5k aXNNc2csDQorICBVSU5UTiAgICAgICAgICAgICAgICAgICAgICAgKlRyYW5zZmVyTGVuZ3RoDQor ICApOw0KKw0KK1ZPSUQNCitQcmludFJuZGlzTXNnICgNCisgIElOICBSRU1PVEVfTkRJU19NU0df SEVBREVSICAqUm5kaXNNc2cNCisgICk7DQorDQorI2RlZmluZSBSTkRJU19NQUpPUl9WRVJTSU9O ICAgICAgMHgwMDAwMDAwMQ0KKyNkZWZpbmUgUk5ESVNfTUlOT1JfVkVSU0lPTiAgICAgIDB4MDAw MDAwMDANCisjZGVmaW5lIFJORElTX01BWF9UUkFOU0ZFUl9TSVpFICAweDQwMDANCisNCisjZGVm aW5lIFJORElTX1BBQ0tFVF9NU0cgICAgICAgICAgIDB4MDAwMDAwMDENCisjZGVmaW5lIFJORElT X0lOSVRJQUxJWkVfTVNHICAgICAgIDB4MDAwMDAwMDINCisjZGVmaW5lIFJORElTX0lOSVRJQUxJ WkVfQ01QTFQgICAgIDB4ODAwMDAwMDINCisjZGVmaW5lIFJORElTX0hMVF9NU0cgICAgICAgICAg ICAgIDB4MDAwMDAwMDMNCisjZGVmaW5lIFJORElTX1FVRVJZX01TRyAgICAgICAgICAgIDB4MDAw MDAwMDQNCisjZGVmaW5lIFJORElTX1FVRVJZX0NNUExUICAgICAgICAgIDB4ODAwMDAwMDQNCisj ZGVmaW5lIFJORElTX1NFVF9NU0cgICAgICAgICAgICAgIDB4MDAwMDAwMDUNCisjZGVmaW5lIFJO RElTX1NFVF9DTVBMVCAgICAgICAgICAgIDB4ODAwMDAwMDUNCisjZGVmaW5lIFJORElTX1JFU0VU X01TRyAgICAgICAgICAgIDB4MDAwMDAwMDYNCisjZGVmaW5lIFJORElTX1JFU0VUX0NNUExUICAg ICAgICAgIDB4ODAwMDAwMDYNCisjZGVmaW5lIFJORElTX0lORElDQVRFX1NUQVRVU19NU0cgIDB4 MDAwMDAwMDcNCisjZGVmaW5lIFJORElTX0tFRVBBTElWRV9NU0cgICAgICAgIDB4MDAwMDAwMDgN CisjZGVmaW5lIFJORElTX0tFRVBBTElWRV9DTVBMVCAgICAgIDB4ODAwMDAwMDgNCisNCisjZGVm aW5lIFJORElTX1NUQVRVU19TVUNDRVNTICAgICAgICAgICAweDAwMDAwMDAwDQorI2RlZmluZSBS TkRJU19TVEFUVVNfRkFJTFVSRSAgICAgICAgICAgMHhDMDAwMDAwMQ0KKyNkZWZpbmUgUk5ESVNf U1RBVFVTX0lOVkFMSURfREFUQSAgICAgIDB4QzAwMTAwMTUNCisjZGVmaW5lIFJORElTX1NUQVRV U19OT1RfU1VQUE9SVEVEICAgICAweEMwMDAwMEJCDQorI2RlZmluZSBSTkRJU19TVEFUVVNfTUVE SUFfQ09OTkVDVCAgICAgMHg0MDAxMDAwQg0KKyNkZWZpbmUgUk5ESVNfU1RBVFVTX01FRElBX0RJ U0NPTk5FQ1QgIDB4NDAwMTAwMEMNCisNCisjZGVmaW5lIFJORElTX0NPTlRST0xfVElNRU9VVCAg ICAxMDAwMCAgICAgICAgICAgIC8vIDEwc2VjDQorI2RlZmluZSBSTkRJU19LRUVQQUxJVkVfVElN RU9VVCAgNTAwMCAgICAgICAgICAgICAvLyA1c2VjDQorDQorI2RlZmluZSBTRU5EX0VOQ0FQU1VM QVRFRF9DT01NQU5EICAweDAwMDAwMDAwDQorI2RlZmluZSBHRVRfRU5DQVBTVUxBVEVEX1JFU1BP TlNFICAweDAwMDAwMDAxDQorDQorLy8NCisvLyBHZW5lcmFsIE9iamVjdHMNCisvLw0KKy8vIFRh a2VuIGZyb20gTlRERE5ESVMuSA0KKyNkZWZpbmUgT0lEX0dFTl9TVVBQT1JURURfTElTVCAgICAg ICAgIDB4MDAwMTAxMDENCisjZGVmaW5lIE9JRF9HRU5fSEFSRFdBUkVfU1RBVFVTICAgICAgICAw eDAwMDEwMTAyDQorI2RlZmluZSBPSURfR0VOX01FRElBX1NVUFBPUlRFRCAgICAgICAgMHgwMDAx MDEwMw0KKyNkZWZpbmUgT0lEX0dFTl9NRURJQV9JTl9VU0UgICAgICAgICAgIDB4MDAwMTAxMDQN CisjZGVmaW5lIE9JRF9HRU5fTUFYSU1VTV9MT09LQUhFQUQgICAgICAweDAwMDEwMTA1DQorI2Rl ZmluZSBPSURfR0VOX01BWElNVU1fRlJBTUVfU0laRSAgICAgMHgwMDAxMDEwNg0KKyNkZWZpbmUg T0lEX0dFTl9MSU5LX1NQRUVEICAgICAgICAgICAgIDB4MDAwMTAxMDcNCisjZGVmaW5lIE9JRF9H RU5fVFJBTlNNSVRfQlVGRkVSX1NQQUNFICAweDAwMDEwMTA4DQorI2RlZmluZSBPSURfR0VOX1JF Q0VJVkVfQlVGRkVSX1NQQUNFICAgMHgwMDAxMDEwOQ0KKyNkZWZpbmUgT0lEX0dFTl9UUkFOU01J VF9CTE9DS19TSVpFICAgIDB4MDAwMTAxMEENCisjZGVmaW5lIE9JRF9HRU5fUkVDRUlWRV9CTE9D S19TSVpFICAgICAweDAwMDEwMTBCDQorI2RlZmluZSBPSURfR0VOX1ZFTkRPUl9JRCAgICAgICAg ICAgICAgMHgwMDAxMDEwQw0KKyNkZWZpbmUgT0lEX0dFTl9WRU5ET1JfREVTQ1JJUFRJT04gICAg IDB4MDAwMTAxMEQNCisjZGVmaW5lIE9JRF9HRU5fQ1VSUkVOVF9QQUNLRVRfRklMVEVSICAweDAw MDEwMTBFDQorI2RlZmluZSBPSURfR0VOX0NVUlJFTlRfTE9PS0FIRUFEICAgICAgMHgwMDAxMDEw Rg0KKyNkZWZpbmUgT0lEX0dFTl9EUklWRVJfVkVSU0lPTiAgICAgICAgIDB4MDAwMTAxMTANCisj ZGVmaW5lIE9JRF9HRU5fTUFYSU1VTV9UT1RBTF9TSVpFICAgICAweDAwMDEwMTExDQorI2RlZmlu ZSBPSURfR0VOX1BST1RPQ09MX09QVElPTlMgICAgICAgMHgwMDAxMDExMg0KKyNkZWZpbmUgT0lE X0dFTl9NQUNfT1BUSU9OUyAgICAgICAgICAgIDB4MDAwMTAxMTMNCisjZGVmaW5lIE9JRF9HRU5f TUVESUFfQ09OTkVDVF9TVEFUVVMgICAweDAwMDEwMTE0DQorI2RlZmluZSBPSURfR0VOX01BWElN VU1fU0VORF9QQUNLRVRTICAgMHgwMDAxMDExNQ0KKyNkZWZpbmUgT0lEX0dFTl9WRU5ET1JfRFJJ VkVSX1ZFUlNJT04gIDB4MDAwMTAxMTYNCisNCisjZGVmaW5lIE9JRF9HRU5fWE1JVF9PSyAgICAg ICAgMHgwMDAyMDEwMQ0KKyNkZWZpbmUgT0lEX0dFTl9SQ1ZfT0sgICAgICAgICAweDAwMDIwMTAy DQorI2RlZmluZSBPSURfR0VOX1hNSVRfRVJST1IgICAgIDB4MDAwMjAxMDMNCisjZGVmaW5lIE9J RF9HRU5fUkNWX0VSUk9SICAgICAgMHgwMDAyMDEwNA0KKyNkZWZpbmUgT0lEX0dFTl9SQ1ZfTk9f QlVGRkVSICAweDAwMDIwMTA1DQorDQorI2RlZmluZSBPSURfR0VOX0RJUkVDVEVEX0JZVEVTX1hN SVQgICAgMHgwMDAyMDIwMQ0KKyNkZWZpbmUgT0lEX0dFTl9ESVJFQ1RFRF9GUkFNRVNfWE1JVCAg IDB4MDAwMjAyMDINCisjZGVmaW5lIE9JRF9HRU5fTVVMVElDQVNUX0JZVEVTX1hNSVQgICAweDAw MDIwMjAzDQorI2RlZmluZSBPSURfR0VOX01VTFRJQ0FTVF9GUkFNRVNfWE1JVCAgMHgwMDAyMDIw NA0KKyNkZWZpbmUgT0lEX0dFTl9CUk9BRENBU1RfQllURVNfWE1JVCAgIDB4MDAwMjAyMDUNCisj ZGVmaW5lIE9JRF9HRU5fQlJPQURDQVNUX0ZSQU1FU19YTUlUICAweDAwMDIwMjA2DQorI2RlZmlu ZSBPSURfR0VOX0RJUkVDVEVEX0JZVEVTX1JDViAgICAgMHgwMDAyMDIwNw0KKyNkZWZpbmUgT0lE X0dFTl9ESVJFQ1RFRF9GUkFNRVNfUkNWICAgIDB4MDAwMjAyMDgNCisjZGVmaW5lIE9JRF9HRU5f TVVMVElDQVNUX0JZVEVTX1JDViAgICAweDAwMDIwMjA5DQorI2RlZmluZSBPSURfR0VOX01VTFRJ Q0FTVF9GUkFNRVNfUkNWICAgMHgwMDAyMDIwQQ0KKyNkZWZpbmUgT0lEX0dFTl9CUk9BRENBU1Rf QllURVNfUkNWICAgIDB4MDAwMjAyMEINCisjZGVmaW5lIE9JRF9HRU5fQlJPQURDQVNUX0ZSQU1F U19SQ1YgICAweDAwMDIwMjBDDQorI2RlZmluZSBPSURfR0VOX1JDVl9DUkNfRVJST1IgICAgICAg ICAgMHgwMDAyMDIwRA0KKyNkZWZpbmUgT0lEX0dFTl9UUkFOU01JVF9RVUVVRV9MRU5HVEggIDB4 MDAwMjAyMEUNCisNCisjZGVmaW5lIE9JRF84MDJfM19DVVJSRU5UX0FERFJFU1MgIDB4MDEwMTAx MDINCisvLw0KKy8vIE5kaXMgUGFja2V0IEZpbHRlciBCaXRzIChPSURfR0VOX0NVUlJFTlRfUEFD S0VUX0ZJTFRFUikuDQorLy8NCisjZGVmaW5lIE5ESVNfUEFDS0VUX1RZUEVfRElSRUNURUQgICAg ICAgIDB4MDAwMQ0KKyNkZWZpbmUgTkRJU19QQUNLRVRfVFlQRV9NVUxUSUNBU1QgICAgICAgMHgw MDAyDQorI2RlZmluZSBORElTX1BBQ0tFVF9UWVBFX0FMTF9NVUxUSUNBU1QgICAweDAwMDQNCisj ZGVmaW5lIE5ESVNfUEFDS0VUX1RZUEVfQlJPQURDQVNUICAgICAgIDB4MDAwOA0KKyNkZWZpbmUg TkRJU19QQUNLRVRfVFlQRV9TT1VSQ0VfUk9VVElORyAgMHgwMDEwDQorI2RlZmluZSBORElTX1BB Q0tFVF9UWVBFX1BST01JU0NVT1VTICAgICAweDAwMjANCisjZGVmaW5lIE5ESVNfUEFDS0VUX1RZ UEVfU01UICAgICAgICAgICAgIDB4MDA0MA0KKyNkZWZpbmUgTkRJU19QQUNLRVRfVFlQRV9BTExf TE9DQUwgICAgICAgMHgwMDgwDQorI2RlZmluZSBORElTX1BBQ0tFVF9UWVBFX01BQ19GUkFNRSAg ICAgICAweDgwMDANCisjZGVmaW5lIE5ESVNfUEFDS0VUX1RZUEVfRlVOQ1RJT05BTCAgICAgIDB4 NDAwMA0KKyNkZWZpbmUgTkRJU19QQUNLRVRfVFlQRV9BTExfRlVOQ1RJT05BTCAgMHgyMDAwDQor I2RlZmluZSBORElTX1BBQ0tFVF9UWVBFX0dST1VQICAgICAgICAgICAweDEwMDANCisNCisjcHJh Z21hIHBhY2soMSkNCisNCit0eXBlZGVmIHN0cnVjdCBfUkVNT1RFX05ESVNfTVNHX0hFQURFUiB7 DQorICBVSU5UMzIgICAgTWVzc2FnZVR5cGU7DQorICBVSU5UMzIgICAgTWVzc2FnZUxlbmd0aDsN Cit9IFJFTU9URV9ORElTX01TR19IRUFERVI7DQorDQordHlwZWRlZiBzdHJ1Y3Qgew0KKyAgVUlO VDMyICAgIE1lc3NhZ2VUeXBlOw0KKyAgVUlOVDMyICAgIE1lc3NhZ2VMZW5ndGg7DQorICBVSU5U MzIgICAgUmVxdWVzdElEOw0KKyAgVUlOVDMyICAgIE1ham9yVmVyc2lvbjsNCisgIFVJTlQzMiAg ICBNaW5vclZlcnNpb247DQorICBVSU5UMzIgICAgTWF4VHJhbnNmZXJTaXplOw0KK30gUkVNT1RF X05ESVNfSU5JVElBTElaRV9NU0c7DQorDQordHlwZWRlZiBzdHJ1Y3Qgew0KKyAgVUlOVDMyICAg IE1lc3NhZ2VUeXBlOw0KKyAgVUlOVDMyICAgIE1lc3NhZ2VMZW5ndGg7DQorICBVSU5UMzIgICAg UmVxdWVzdElEOw0KK30gUkVNT1RFX05ESVNfSEFMVF9NU0c7DQorDQordHlwZWRlZiBzdHJ1Y3Qg ew0KKyAgVUlOVDMyICAgIE1lc3NhZ2VUeXBlOw0KKyAgVUlOVDMyICAgIE1lc3NhZ2VMZW5ndGg7 DQorICBVSU5UMzIgICAgUmVxdWVzdElEOw0KKyAgVUlOVDMyICAgIE9pZDsNCisgIFVJTlQzMiAg ICBJbmZvcm1hdGlvbkJ1ZmZlckxlbmd0aDsNCisgIFVJTlQzMiAgICBJbmZvcm1hdGlvbkJ1ZmZl ck9mZnNldDsNCisgIFVJTlQzMiAgICBSZXNlcnZlZDsNCit9IFJFTU9URV9ORElTX1FVRVJZX01T RzsNCisNCit0eXBlZGVmIHN0cnVjdCB7DQorICBSRU1PVEVfTkRJU19RVUVSWV9NU0cgICAgUXVl cnlNc2c7DQorICBVSU5UOCAgICAgICAgICAgICAgICAgICAgQWRkcls2XTsNCit9IFJFTU9URV9O RElTX1FVRVJZX01BQ19NU0c7DQorDQordHlwZWRlZiBzdHJ1Y3Qgew0KKyAgUkVNT1RFX05ESVNf UVVFUllfTVNHICAgIFF1ZXJ5TXNnOw0KKyAgVUlOVDMyICAgICAgICAgICAgICAgICAgIE1heFRv dGFsU2l6ZTsNCit9IFJFTU9URV9ORElTX1FVRVJZX01BWF9UT1RBTF9TSVpFX01TRzsNCisNCit0 eXBlZGVmIHN0cnVjdCB7DQorICBVSU5UMzIgICAgTWVzc2FnZVR5cGU7DQorICBVSU5UMzIgICAg TWVzc2FnZUxlbmd0aDsNCisgIFVJTlQzMiAgICBSZXF1ZXN0SUQ7DQorICBVSU5UMzIgICAgT2lk Ow0KKyAgVUlOVDMyICAgIEluZm9ybWF0aW9uQnVmZmVyTGVuZ3RoOw0KKyAgVUlOVDMyICAgIElu Zm9ybWF0aW9uQnVmZmVyT2Zmc2V0Ow0KKyAgVUlOVDMyICAgIFJlc2VydmVkOw0KK30gUkVNT1RF X05ESVNfU0VUX01TRzsNCisNCit0eXBlZGVmIHN0cnVjdCB7DQorICBVSU5UMzIgICAgTWVzc2Fn ZVR5cGU7DQorICBVSU5UMzIgICAgTWVzc2FnZUxlbmd0aDsNCisgIFVJTlQzMiAgICBSZXNlcnZl ZDsNCit9IFJFTU9URV9ORElTX1JFU0VUX01TRzsNCisNCit0eXBlZGVmIHN0cnVjdCB7DQorICBV SU5UMzIgICAgTWVzc2FnZVR5cGU7DQorICBVSU5UMzIgICAgTWVzc2FnZUxlbmd0aDsNCisgIFVJ TlQzMiAgICBTdGF0dXM7DQorICBVSU5UMzIgICAgU3RhdHVzQnVmZmVyTGVuZ3RoOw0KKyAgVUlO VDMyICAgIFN0YXR1c0J1ZmZlck9mZnNldDsNCit9IFJFTU9URV9ORElTX0lORElDQVRFX1NUQVRV U19NU0c7DQorDQordHlwZWRlZiBzdHJ1Y3Qgew0KKyAgVUlOVDMyICAgIERpYWdTdGF0dXM7DQor ICBVSU5UMzIgICAgRXJyb3JPZmZzZXQ7DQorfSBSTkRJU19ESUFHTk9TVElDX0lORk87DQorDQor dHlwZWRlZiBzdHJ1Y3Qgew0KKyAgVUlOVDMyICAgIE1lc3NhZ2VUeXBlOw0KKyAgVUlOVDMyICAg IE1lc3NhZ2VMZW5ndGg7DQorICBVSU5UMzIgICAgUmVxdWVzdElEOw0KK30gUkVNT1RFX05ESVNf S0VFUEFMSVZFX01TRzsNCisNCit0eXBlZGVmIHN0cnVjdCB7DQorICBVSU5UMzIgICAgTWVzc2Fn ZVR5cGU7DQorICBVSU5UMzIgICAgTWVzc2FnZUxlbmd0aDsNCisgIFVJTlQzMiAgICBSZXF1ZXN0 SUQ7DQorICBVSU5UMzIgICAgU3RhdHVzOw0KKyAgVUlOVDMyICAgIE1ham9yVmVyc2lvbjsNCisg IFVJTlQzMiAgICBNaW5vclZlcnNpb247DQorICBVSU5UMzIgICAgRGV2aWNlRmxhZ3M7DQorICBV SU5UMzIgICAgTWVkaXVtOw0KKyAgVUlOVDMyICAgIE1heFBhY2tldHNQZXJUcmFuc2ZlcjsNCisg IFVJTlQzMiAgICBNYXhUcmFuc2ZlclNpemU7DQorICBVSU5UMzIgICAgUGFja2V0QWxpZ25tZW50 RmFjdG9yOw0KKyAgVUlOVDY0ICAgIFJlc2VydmVkOw0KK30gUkVNT1RFX05ESVNfSU5JVElBTEla RV9DTVBMVDsNCisNCit0eXBlZGVmIHN0cnVjdCB7DQorICBVSU5UMzIgICAgTWVzc2FnZVR5cGU7 DQorICBVSU5UMzIgICAgTWVzc2FnZUxlbmd0aDsNCisgIFVJTlQzMiAgICBSZXF1ZXN0SUQ7DQor ICBVSU5UMzIgICAgU3RhdHVzOw0KKyAgVUlOVDMyICAgIEluZm9ybWF0aW9uQnVmZmVyTGVuZ3Ro Ow0KKyAgVUlOVDMyICAgIEluZm9ybWF0aW9uQnVmZmVyT2Zmc2V0Ow0KK30gUkVNT1RFX05ESVNf UVVFUllfQ01QTFQ7DQorDQordHlwZWRlZiBzdHJ1Y3Qgew0KKyAgUkVNT1RFX05ESVNfUVVFUllf Q01QTFQgICAgUXVlcnlDbXBsdDsNCisgIFVJTlQ4ICAgICAgICAgICAgICAgICAgICAgIEFkZHJb Nl07DQorfSBSRU1PVEVfTkRJU19RVUVSWV9NQUNfQ01QTFQ7DQorDQordHlwZWRlZiBzdHJ1Y3Qg ew0KKyAgUkVNT1RFX05ESVNfUVVFUllfQ01QTFQgICAgUXVlcnlDbXBsdDsNCisgIFVJTlQzMiAg ICAgICAgICAgICAgICAgICAgIE1heFRvdGFsU2l6ZTsNCit9IFJFTU9URV9ORElTX1FVRVJZX01B WF9UT1RBTF9TSVpFX0NNUExUOw0KKw0KK3R5cGVkZWYgc3RydWN0IHsNCisgIFVJTlQzMiAgICBN ZXNzYWdlVHlwZTsNCisgIFVJTlQzMiAgICBNZXNzYWdlTGVuZ3RoOw0KKyAgVUlOVDMyICAgIFJl cXVlc3RJRDsNCisgIFVJTlQzMiAgICBTdGF0dXM7DQorfSBSRU1PVEVfTkRJU19TRVRfQ01QTFQ7 DQorDQordHlwZWRlZiBzdHJ1Y3Qgew0KKyAgVUlOVDMyICAgIE1lc3NhZ2VUeXBlOw0KKyAgVUlO VDMyICAgIE1lc3NhZ2VMZW5ndGg7DQorICBVSU5UMzIgICAgU3RhdHVzOw0KKyAgVUlOVDMyICAg IEFkZHJlc3NpbmdSZXNldDsNCit9IFJFTU9URV9ORElTX1JFU0VUX0NNUExUOw0KKw0KK3R5cGVk ZWYgc3RydWN0IHsNCisgIFVJTlQzMiAgICBNZXNzYWdlVHlwZTsNCisgIFVJTlQzMiAgICBNZXNz YWdlTGVuZ3RoOw0KKyAgVUlOVDMyICAgIFJlcXVlc3RJRDsNCisgIFVJTlQzMiAgICBTdGF0dXM7 DQorfSBSRU1PVEVfTkRJU19LRUVQQUxJVkVfQ01QTFQ7DQorDQordHlwZWRlZiBzdHJ1Y3Qgew0K KyAgVUlOVDMyICAgIE1lc3NhZ2VUeXBlOw0KKyAgVUlOVDMyICAgIE1lc3NhZ2VMZW5ndGg7DQor ICBVSU5UMzIgICAgRGF0YU9mZnNldDsNCisgIFVJTlQzMiAgICBEYXRhTGVuZ3RoOw0KKyAgVUlO VDMyICAgIE91dE9mQmFuZERhdGFPZmZzZXQ7DQorICBVSU5UMzIgICAgT3V0T2ZCYW5kRGF0YUxl bmd0aDsNCisgIFVJTlQzMiAgICBOdW1PdXRPZkJhbmREYXRhRWxlbWVudHM7DQorICBVSU5UMzIg ICAgUGVyUGFja2V0SW5mb09mZnNldDsNCisgIFVJTlQzMiAgICBQZXJQYWNrZXRJbmZvTGVuZ3Ro Ow0KKyAgVUlOVDMyICAgIFJlc2VydmVkMTsNCisgIFVJTlQzMiAgICBSZXNlcnZlZDI7DQorfSBS RU1PVEVfTkRJU19QQUNLRVRfTVNHOw0KKw0KK3R5cGVkZWYgc3RydWN0IHsNCisgIFVJTlQzMiAg ICBTaXplOw0KKyAgVUlOVDMyICAgIFR5cGU7DQorICBVSU5UMzIgICAgQ2xhc3NJbmZvcm1hdGlv bk9mZnNldDsNCit9IE9VVF9PRl9CQU5EX0RBVEFfUkVDT1JEOw0KKw0KK3R5cGVkZWYgc3RydWN0 IHsNCisgIFVJTlQzMiAgICBTaXplOw0KKyAgVUlOVDMyICAgIFR5cGU7DQorICBVSU5UMzIgICAg Q2xhc3NJbmZvcm1hdGlvbk9mZnNldDsNCit9IFBFUl9QQUNLRVRfSU5GT19EQVRBX1JFQ09SRDsN CisNCit0eXBlZGVmIHN0cnVjdCB7DQorICBMSVNUX0VOVFJZICAgIFBhY2tldExpc3Q7DQorICBV SU5UOCAgICAgICAgICpPcmdCdWZmZXI7DQorICBVSU5UTiAgICAgICAgIFJlbWFpbmluZ0xlbmd0 aDsNCisgIFVJTlQ4ICAgICAgICAgKlBhY2tldFN0YXJ0QnVmZmVyOyAgICAvLyBWYXJpYWJsZSBz aXplIGRhdGEgdG8gZm9sbG93DQorfSBQQUNLRVRfTElTVDsNCisNCisjcHJhZ21hIHBhY2soKQ0K Kw0KKyNlbmRpZg0KZGlmZiAtLWdpdCBhL01kZU1vZHVsZVBrZy9CdXMvVXNiL1VzYk5ldHdvcmsv VXNiUm5kaXMvVXNiUm5kaXMuaW5mIGIvTWRlTW9kdWxlUGtnL0J1cy9Vc2IvVXNiTmV0d29yay9V c2JSbmRpcy9Vc2JSbmRpcy5pbmYNCm5ldyBmaWxlIG1vZGUgMTAwNjQ0DQppbmRleCAwMDAwMDAw MDAwLi4xMDI3ODI4NTI3DQotLS0gL2Rldi9udWxsDQorKysgYi9NZGVNb2R1bGVQa2cvQnVzL1Vz Yi9Vc2JOZXR3b3JrL1VzYlJuZGlzL1VzYlJuZGlzLmluZg0KQEAgLTAsMCArMSw0MiBAQA0KKyMj IEBmaWxlDQorIyAgIFRoaXMgaXMgVXNiIFJuZGlzIGRyaXZlciBmb3IgRFhFIHBoYXNlLg0KKyMN CisjIENvcHlyaWdodCAoYykgMjAyMywgQW1lcmljYW4gTWVnYXRyZW5kcyBJbnRlcm5hdGlvbmFs IExMQy4gQWxsIHJpZ2h0cyByZXNlcnZlZC48QlI+DQorIyBTUERYLUxpY2Vuc2UtSWRlbnRpZmll cjogQlNELTItQ2xhdXNlLVBhdGVudA0KKyMjDQorDQorW0RlZmluZXNdDQorICBJTkZfVkVSU0lP TiAgICAgICAgICAgICAgICAgICAgPSAweDAwMDEwMDA1DQorICBCQVNFX05BTUUgICAgICAgICAg ICAgICAgICAgICAgPSBVc2JSbmRpcw0KKyAgRklMRV9HVUlEICAgICAgICAgICAgICAgICAgICAg ID0gMTFFMzJDMzQtNjBCNS00OTkxLThERUEtNjNEM0U4Qzg3NkRFDQorICBNT0RVTEVfVFlQRSAg ICAgICAgICAgICAgICAgICAgPSBEWEVfRFJJVkVSDQorICBWRVJTSU9OX1NUUklORyAgICAgICAg ICAgICAgICAgPSAxLjANCisgIEVOVFJZX1BPSU5UICAgICAgICAgICAgICAgICAgICA9IFVzYlJu ZGlzRW50cnkNCisNCitbU291cmNlc10NCisgIFVzYlJuZGlzLmMNCisgIFVzYlJuZGlzLmgNCisg IFVzYlJuZGlzRnVuY3Rpb24uYw0KKyAgQ29tcG9uZW50TmFtZS5jDQorDQorW1BhY2thZ2VzXQ0K KyAgTWRlUGtnL01kZVBrZy5kZWMNCisgIE1kZU1vZHVsZVBrZy9NZGVNb2R1bGVQa2cuZGVjDQor DQorW0xpYnJhcnlDbGFzc2VzXQ0KKyAgVWVmaURyaXZlckVudHJ5UG9pbnQNCisgIFVlZmlCb290 U2VydmljZXNUYWJsZUxpYg0KKyAgVWVmaUxpYg0KKyAgRGVidWdMaWINCisgIFVlZmlVc2JMaWIN CisgIE1lbW9yeUFsbG9jYXRpb25MaWINCisgIEJhc2VNZW1vcnlMaWINCisNCitbUHJvdG9jb2xz XQ0KKyAgZ0VmaVVzYklvUHJvdG9jb2xHdWlkDQorICBnRWZpRGV2aWNlUGF0aFByb3RvY29sR3Vp ZA0KKyAgZ0VmaURyaXZlckJpbmRpbmdQcm90b2NvbEd1aWQNCisgIGdFZGtJSVVzYkV0aFByb3Rv Y29sR3VpZA0KKw0KK1tEZXBleF0NCisgIFRSVUUNCmRpZmYgLS1naXQgYS9NZGVNb2R1bGVQa2cv QnVzL1VzYi9Vc2JOZXR3b3JrL1VzYlJuZGlzL1VzYlJuZGlzRnVuY3Rpb24uYyBiL01kZU1vZHVs ZVBrZy9CdXMvVXNiL1VzYk5ldHdvcmsvVXNiUm5kaXMvVXNiUm5kaXNGdW5jdGlvbi5jDQpuZXcg ZmlsZSBtb2RlIDEwMDY0NA0KaW5kZXggMDAwMDAwMDAwMC4uOWFiYTNmMTEyOQ0KLS0tIC9kZXYv bnVsbA0KKysrIGIvTWRlTW9kdWxlUGtnL0J1cy9Vc2IvVXNiTmV0d29yay9Vc2JSbmRpcy9Vc2JS bmRpc0Z1bmN0aW9uLmMNCkBAIC0wLDAgKzEsMTcxOCBAQA0KKy8qKiBAZmlsZQ0KKyAgVGhpcyBm aWxlIGNvbnRhaW5zIGNvZGUgZm9yIFVTQiBFdGhlcm5ldCBkZXNjcmlwdG9yDQorICBhbmQgc3Bl Y2lmaWMgcmVxdWVzdHMgaW1wbGVtZW50Lg0KKw0KKyAgQ29weXJpZ2h0IChjKSAyMDIzLCBBbWVy aWNhbiBNZWdhdHJlbmRzIEludGVybmF0aW9uYWwgTExDLiBBbGwgcmlnaHRzIHJlc2VydmVkLjxC Uj4NCisgIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBCU0QtMi1DbGF1c2UtUGF0ZW50DQorKiov DQorDQorI2luY2x1ZGUgIlVzYlJuZGlzLmgiDQorDQorVUlOVDE2ICBnU3RvcEJ1bGtJbkNudCAg PSAwOw0KK1VJTlQxNiAgZ0Jsb2NrQnVsa0luQ250ID0gMDsNCisNCisvKioNCisgIExvYWQgQWxs IG9mIGRldmljZSBkZXNjcmlwdG9yLg0KKw0KKyAgQHBhcmFtW2luXSAgVXNiSW8gICAgICAgICAg ICAgICAgIEEgcG9pbnRlciB0byB0aGUgRUZJX1VTQl9JT19QUk9UT0NPTCBpbnN0YW5jZS4NCisg IEBwYXJhbVtvdXRdIENvbmZpZ0Rlc2MgICAgICAgICAgICBBIHBvaW50ZXIgdG8gdGhlIGNvbmZp Z3VyYXRpb24gZGVzY3JpcHRvci4NCisNCisgIEByZXR2YWwgRUZJX1NVQ0NFU1MgICAgICAgICAg IFRoZSByZXF1ZXN0IGV4ZWN1dGVkIHN1Y2Nlc3NmdWxseS4NCisgIEByZXR2YWwgRUZJX09VVF9P Rl9SRVNPVVJDRVMgIFRoZSByZXF1ZXN0IGNvdWxkIG5vdCBiZSBjb21wbGV0ZWQgYmVjYXVzZSB0 aGUNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJ1ZmZlciBzcGVjaWZpZWQgYnkg RGVzY3JpcHRvckxlbmd0aCBhbmQgRGVzY3JpcHRvcg0KKyAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgaXMgbm90IGxhcmdlIGVub3VnaCB0byBob2xkIHRoZSByZXN1bHQgb2YgdGhlIHJl cXVlc3QuDQorICBAcmV0dmFsIEVGSV9USU1FT1VUICAgICAgICAgICBBIHRpbWVvdXQgb2NjdXJy ZWQgZXhlY3V0aW5nIHRoZSByZXF1ZXN0Lg0KKyAgQHJldHZhbCBFRklfREVWSUNFX0VSUk9SICAg ICAgVGhlIHJlcXVlc3QgZmFpbGVkIGR1ZSB0byBhIGRldmljZSBlcnJvci4gVGhlIHRyYW5zZmVy DQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0dXMgaXMgcmV0dXJuZWQgaW4g U3RhdHVzLg0KKyoqLw0KK0VGSV9TVEFUVVMNCitMb2FkQWxsRGVzY3JpcHRvciAoDQorICBJTiAg RUZJX1VTQl9JT19QUk9UT0NPTCAgICAgICAgKlVzYklvLA0KKyAgT1VUIEVGSV9VU0JfQ09ORklH X0RFU0NSSVBUT1IgICoqQ29uZmlnRGVzYw0KKyAgKQ0KK3sNCisgIEVGSV9TVEFUVVMgICAgICAg ICAgICAgICAgIFN0YXR1czsNCisgIFVJTlQzMiAgICAgICAgICAgICAgICAgICAgIFRyYW5zU3Rh dHVzOw0KKyAgRUZJX1VTQl9DT05GSUdfREVTQ1JJUFRPUiAgVG1wOw0KKw0KKyAgU3RhdHVzID0g VXNiSW8tPlVzYkdldENvbmZpZ0Rlc2NyaXB0b3IgKFVzYklvLCAmVG1wKTsNCisgIGlmIChFRklf RVJST1IgKFN0YXR1cykpIHsNCisgICAgREVCVUcgKChERUJVR19FUlJPUiwgIiVhOlVzYkdldENv bmZpZ0Rlc2NyaXB0b3Igc3RhdHVzID0gJXJcbiIsIF9fZnVuY19fLCBTdGF0dXMpKTsNCisgICAg cmV0dXJuIFN0YXR1czsNCisgIH0NCisNCisgIFN0YXR1cyA9IGdCUy0+QWxsb2NhdGVQb29sICgN CisgICAgICAgICAgICAgICAgICBFZmlCb290U2VydmljZXNEYXRhLA0KKyAgICAgICAgICAgICAg ICAgIFRtcC5Ub3RhbExlbmd0aCwNCisgICAgICAgICAgICAgICAgICAoVk9JRCAqKilDb25maWdE ZXNjDQorICAgICAgICAgICAgICAgICAgKTsNCisgIGlmIChFRklfRVJST1IgKFN0YXR1cykpIHsN CisgICAgREVCVUcgKChERUJVR19FUlJPUiwgIiVhOiBBbGxvY2F0ZVBvb2wgc3RhdHVzID0gJXJc biIsIF9fZnVuY19fLCBTdGF0dXMpKTsNCisgICAgcmV0dXJuIFN0YXR1czsNCisgIH0NCisNCisg IFN0YXR1cyA9IFVzYkdldERlc2NyaXB0b3IgKA0KKyAgICAgICAgICAgICBVc2JJbywNCisgICAg ICAgICAgICAgVVNCX0RFU0NfVFlQRV9DT05GSUcgPDwgOCB8IChUbXAuQ29uZmlndXJhdGlvblZh bHVlIC0gMSksICAgICAgICAgICAgICAgICAvLyB6ZXJvIGJhc2VkDQorICAgICAgICAgICAgIDAs DQorICAgICAgICAgICAgIFRtcC5Ub3RhbExlbmd0aCwNCisgICAgICAgICAgICAgKkNvbmZpZ0Rl c2MsDQorICAgICAgICAgICAgICZUcmFuc1N0YXR1cw0KKyAgICAgICAgICAgICApOw0KKyAgcmV0 dXJuIFN0YXR1czsNCit9DQorDQorLyoqDQorICBSZXR1cm5zIHBvaW50ZXIgdG8gdGhlIG5leHQg ZGVzY3JpcHRvciBmb3IgdGhlIHBhY2sgb2YgVVNCIGRlc2NyaXB0b3JzDQorICBsb2NhdGVkIGlu IGNvbnRpbnVlcyBtZW1vcnkgc2VnbWVudA0KKw0KKyAgQHBhcmFtW2luXSAgICAgIERlc2MgICBB IHBvaW50ZXIgdG8gdGhlIENPTkZJR19ERVNDUklQVE9SIGluc3RhbmNlLg0KKyAgQHBhcmFtW2lu LCBvdXRdIE9mZnNldCBBIHBvaW50ZXIgdG8gdGhlIHN1bSBvZiBkZXNjcmlwdG9yIGxlbmd0aC4N CisNCisgIEByZXR2YWwgVFJVRSAgIFRoZSByZXF1ZXN0IGV4ZWN1dGVkIHN1Y2Nlc3NmdWxseS4N CisgIEByZXR2YWwgRkFMU0UgIE5vIG5leHQgZGVzY3JpcHRvci4NCisNCisqKi8NCitCT09MRUFO DQorTmV4dERlc2NyaXB0b3IgKA0KKyAgSU4gICAgICBFRklfVVNCX0NPTkZJR19ERVNDUklQVE9S ICAqRGVzYywNCisgIElOIE9VVCAgVUlOVE4gICAgICAgICAgICAgICAgICAgICAgKk9mZnNldA0K KyAgKQ0KK3sNCisgIGlmICgoRGVzYyA9PSBOVUxMKSB8fCAoKk9mZnNldCA+PSBEZXNjLT5Ub3Rh bExlbmd0aCkpIHsNCisgICAgcmV0dXJuIEZBTFNFOw0KKyAgfQ0KKw0KKyAgaWYgKCgoRUZJX1VT Ql9DT05GSUdfREVTQ1JJUFRPUiAqKSgoY2hhciAqKURlc2MrKk9mZnNldCkpLT5MZW5ndGggPT0g MCkgew0KKyAgICByZXR1cm4gRkFMU0U7DQorICB9DQorDQorICAqT2Zmc2V0ICs9ICgoRUZJX1VT Ql9DT05GSUdfREVTQ1JJUFRPUiAqKSgoY2hhciAqKURlc2MrKk9mZnNldCkpLT5MZW5ndGg7DQor ICBpZiAoICpPZmZzZXQgPj0gRGVzYy0+VG90YWxMZW5ndGggKSB7DQorICAgIHJldHVybiBGQUxT RTsNCisgIH0NCisNCisgIHJldHVybiBUUlVFOw0KK30NCisNCisvKioNCisgIFJlYWQgRnVuY3Rp b24gZGVzY3JpcHRvcg0KKw0KKyAgQHBhcmFtW2luXSAgQ29uZmlnICAgICAgICAgICAgIEEgcG9p bnRlciB0byBhbGwgb2YgY29uZmlndXJhdGlvbi4NCisgIEBwYXJhbVtpbl0gIEZ1bkRlc2NyaXB0 b3JUeXBlICBVU0IgQ0RDIGNsYXNzIGRlc2NyaXB0b3IgU3ViVHlwZS4NCisgIEBwYXJhbVtvdXRd IERhdGFCdWZmZXIgICAgICAgICBBIHBvaW50ZXIgdG8gdGhlIERhdGEgb2YgY29ycmVzcG9uZGlu ZyB0byBkZXZpY2UgY2FwYWJpbGl0eS4NCisNCisgIEByZXR2YWwgRUZJX1NVQ0NFU1MgICAgICAg IFRoZSBkZXZpY2UgY2FwYWJpbGl0eSBkZXNjcmlwdG9yIHdhcyByZXRyaWV2ZWQNCisgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIHN1Y2Nlc3NmdWxseS4NCisgIEByZXR2YWwgRUZJX1VOU1VQ UE9SVEVEICAgIE5vIHN1cHBvcnRlZC4NCisgIEByZXR2YWwgRUZJX05PVF9GT1VORCAgICAgIFRo ZSBkZXZpY2UgY2FwYWJpbGl0eSBkZXNjcmlwdG9yIHdhcyBub3QgZm91bmQuDQorDQorKiovDQor RUZJX1NUQVRVUw0KK0dldEZ1bmN0aW9uYWxEZXNjcmlwdG9yICgNCisgIElOICBFRklfVVNCX0NP TkZJR19ERVNDUklQVE9SICAqQ29uZmlnLA0KKyAgSU4gIFVJTlQ4ICAgICAgICAgICAgICAgICAg ICAgIEZ1bkRlc2NyaXB0b3JUeXBlLA0KKyAgT1VUIFZPSUQgICAgICAgICAgICAgICAgICAgICAg ICpEYXRhQnVmZmVyDQorICApDQorew0KKyAgRUZJX1NUQVRVUyAgICAgICAgICAgICAgICAgICAg U3RhdHVzOw0KKyAgVUlOVE4gICAgICAgICAgICAgICAgICAgICAgICAgT2Zmc2V0Ow0KKyAgRUZJ X1VTQl9JTlRFUkZBQ0VfREVTQ1JJUFRPUiAgKkludGVyZmFjZTsNCisNCisgIFN0YXR1cyA9IEVG SV9OT1RfRk9VTkQ7DQorDQorICBmb3IgKE9mZnNldCA9IDA7IE5leHREZXNjcmlwdG9yIChDb25m aWcsICZPZmZzZXQpOykgew0KKyAgICBJbnRlcmZhY2UgPSAoRUZJX1VTQl9JTlRFUkZBQ0VfREVT Q1JJUFRPUiAqKSgoVUlOVDggKilDb25maWcgKyBPZmZzZXQpOw0KKyAgICBpZiAoSW50ZXJmYWNl LT5EZXNjcmlwdG9yVHlwZSA9PSBDU19JTlRFUkZBQ0UpIHsNCisgICAgICBpZiAoKChVU0JfSEVB REVSX0ZVTl9ERVNDUklQVE9SICopSW50ZXJmYWNlKS0+RGVzY3JpcHRvclN1YnR5cGUgPT0gRnVu RGVzY3JpcHRvclR5cGUpIHsNCisgICAgICAgIHN3aXRjaCAoRnVuRGVzY3JpcHRvclR5cGUpIHsN CisgICAgICAgICAgY2FzZSBIRUFERVJfRlVOX0RFU0NSSVBUT1I6DQorICAgICAgICAgICAgQ29w eU1lbSAoDQorICAgICAgICAgICAgICBEYXRhQnVmZmVyLA0KKyAgICAgICAgICAgICAgKFVTQl9I RUFERVJfRlVOX0RFU0NSSVBUT1IgKilJbnRlcmZhY2UsDQorICAgICAgICAgICAgICBzaXplb2Yg KFVTQl9IRUFERVJfRlVOX0RFU0NSSVBUT1IpDQorICAgICAgICAgICAgICApOw0KKyAgICAgICAg ICAgIHJldHVybiBFRklfU1VDQ0VTUzsNCisgICAgICAgICAgY2FzZSBVTklPTl9GVU5fREVTQ1JJ UFRPUjoNCisgICAgICAgICAgICBDb3B5TWVtICgNCisgICAgICAgICAgICAgIERhdGFCdWZmZXIs DQorICAgICAgICAgICAgICAoVVNCX1VOSU9OX0ZVTl9ERVNDUklQVE9SICopSW50ZXJmYWNlLA0K KyAgICAgICAgICAgICAgKChVU0JfVU5JT05fRlVOX0RFU0NSSVBUT1IgKilJbnRlcmZhY2UpLT5G dW5jdGlvbkxlbmd0aA0KKyAgICAgICAgICAgICAgKTsNCisgICAgICAgICAgICByZXR1cm4gRUZJ X1NVQ0NFU1M7DQorICAgICAgICAgIGNhc2UgRVRIRVJORVRfRlVOX0RFU0NSSVBUT1I6DQorICAg ICAgICAgICAgQ29weU1lbSAoDQorICAgICAgICAgICAgICBEYXRhQnVmZmVyLA0KKyAgICAgICAg ICAgICAgKFVTQl9FVEhFUk5FVF9GVU5fREVTQ1JJUFRPUiAqKUludGVyZmFjZSwNCisgICAgICAg ICAgICAgIHNpemVvZiAoVVNCX0VUSEVSTkVUX0ZVTl9ERVNDUklQVE9SKQ0KKyAgICAgICAgICAg ICAgKTsNCisgICAgICAgICAgICByZXR1cm4gRUZJX1NVQ0NFU1M7DQorICAgICAgICAgIGRlZmF1 bHQ6DQorICAgICAgICAgICAgU3RhdHVzID0gRUZJX1VOU1VQUE9SVEVEOw0KKyAgICAgICAgICAg IGJyZWFrOw0KKyAgICAgICAgfQ0KKyAgICAgIH0NCisgICAgfQ0KKyAgfQ0KKw0KKyAgcmV0dXJu IFN0YXR1czsNCit9DQorDQorLyoqDQorICBHZXQgVVNCIEV0aGVybmV0IElPIGVuZHBvaW50IGFu ZCBVU0IgQ0RDIGRhdGEgSU8gZW5kcG9pbnQuDQorDQorICBAcGFyYW1baW5dICAgICAgVXNiSW8g ICAgICAgICAgIEEgcG9pbnRlciB0byB0aGUgRUZJX1VTQl9JT19QUk9UT0NPTCBpbnN0YW5jZS4N CisgIEBwYXJhbVtpbiwgb3V0XSBVc2JSbmRpc0RldmljZSAgQSBwb2ludGVyIHRvIHRoZSBVU0Jf Uk5ESVNfREVWSUNFIGluc3RhbmNlLg0KKw0KKyoqLw0KK1ZPSUQNCitHZXRFbmRwb2ludCAoDQor ICBJTiAgICAgIEVGSV9VU0JfSU9fUFJPVE9DT0wgICpVc2JJbywNCisgIElOIE9VVCAgVVNCX1JO RElTX0RFVklDRSAgICAgKlVzYlJuZGlzRGV2aWNlDQorICApDQorew0KKyAgRUZJX1NUQVRVUyAg ICAgICAgICAgICAgICAgICAgU3RhdHVzOw0KKyAgVUlOVDggICAgICAgICAgICAgICAgICAgICAg ICAgSW5kZXg7DQorICBVSU5UMzIgICAgICAgICAgICAgICAgICAgICAgICBSZXN1bHQ7DQorICBF RklfVVNCX0lOVEVSRkFDRV9ERVNDUklQVE9SICBJbnRlcmZhY2U7DQorICBFRklfVVNCX0VORFBP SU5UX0RFU0NSSVBUT1IgICBFbmRwb2ludDsNCisNCisgIFN0YXR1cyA9IFVzYklvLT5Vc2JHZXRJ bnRlcmZhY2VEZXNjcmlwdG9yIChVc2JJbywgJkludGVyZmFjZSk7DQorICBpZiAoRUZJX0VSUk9S IChTdGF0dXMpKSB7DQorICAgIERFQlVHICgoREVCVUdfRVJST1IsICIlYTpVc2JHZXRJbnRlcmZh Y2VEZXNjcmlwdG9yIHN0YXR1cyA9ICVyXG4iLCBfX2Z1bmNfXywgU3RhdHVzKSk7DQorICAgIHJl dHVybjsNCisgIH0NCisNCisgIGlmIChJbnRlcmZhY2UuTnVtRW5kcG9pbnRzID09IDAgKSB7DQor ICAgIFN0YXR1cyA9IFVzYlNldEludGVyZmFjZSAoVXNiSW8sIDEsIDAsICZSZXN1bHQpOw0KKyAg ICBpZiAoRUZJX0VSUk9SIChTdGF0dXMpKSB7DQorICAgICAgREVCVUcgKChERUJVR19FUlJPUiwg IiVhOlVzYlNldEludGVyZmFjZSBzdGF0dXMgPSAlclxuIiwgX19mdW5jX18sIFN0YXR1cykpOw0K KyAgICAgIHJldHVybjsNCisgICAgfQ0KKw0KKyAgICBTdGF0dXMgPSBVc2JJby0+VXNiR2V0SW50 ZXJmYWNlRGVzY3JpcHRvciAoVXNiSW8sICZJbnRlcmZhY2UpOw0KKyAgICBpZiAoRUZJX0VSUk9S IChTdGF0dXMpKSB7DQorICAgICAgREVCVUcgKChERUJVR19FUlJPUiwgIiVhOlVzYkdldEludGVy ZmFjZURlc2NyaXB0b3Igc3RhdHVzID0gJXJcbiIsIF9fZnVuY19fLCBTdGF0dXMpKTsNCisgICAg ICByZXR1cm47DQorICAgIH0NCisgIH0NCisNCisgIGZvciAoSW5kZXggPSAwOyBJbmRleCA8IElu dGVyZmFjZS5OdW1FbmRwb2ludHM7IEluZGV4KyspIHsNCisgICAgU3RhdHVzID0gVXNiSW8tPlVz YkdldEVuZHBvaW50RGVzY3JpcHRvciAoVXNiSW8sIEluZGV4LCAmRW5kcG9pbnQpOw0KKyAgICBp ZiAoRUZJX0VSUk9SIChTdGF0dXMpKSB7DQorICAgICAgREVCVUcgKChERUJVR19FUlJPUiwgIiVh OlVzYkdldEVuZHBvaW50RGVzY3JpcHRvciBzdGF0dXMgPSAlclxuIiwgX19mdW5jX18sIFN0YXR1 cykpOw0KKyAgICAgIHJldHVybjsNCisgICAgfQ0KKw0KKyAgICBzd2l0Y2ggKChFbmRwb2ludC5B dHRyaWJ1dGVzICYgKEJJVDAgfCBCSVQxKSkpIHsNCisgICAgICBjYXNlIFVTQl9FTkRQT0lOVF9C VUxLOg0KKyAgICAgICAgaWYgKEVuZHBvaW50LkVuZHBvaW50QWRkcmVzcyAmIEJJVDcpIHsNCisg ICAgICAgICAgVXNiUm5kaXNEZXZpY2UtPkJ1bGtJbkVuZHBvaW50ID0gRW5kcG9pbnQuRW5kcG9p bnRBZGRyZXNzOw0KKyAgICAgICAgfSBlbHNlIHsNCisgICAgICAgICAgVXNiUm5kaXNEZXZpY2Ut PkJ1bGtPdXRFbmRwb2ludCA9IEVuZHBvaW50LkVuZHBvaW50QWRkcmVzczsNCisgICAgICAgIH0N CisNCisgICAgICAgIGJyZWFrOw0KKyAgICAgIGNhc2UgVVNCX0VORFBPSU5UX0lOVEVSUlVQVDoN CisgICAgICAgIFVzYlJuZGlzRGV2aWNlLT5JbnRlcnJ1cEVuZHBvaW50ID0gRW5kcG9pbnQuRW5k cG9pbnRBZGRyZXNzOw0KKyAgICAgICAgYnJlYWs7DQorICAgIH0NCisgIH0NCit9DQorDQorLyoq DQorICBBc3luYyBVU0IgdHJhbnNmZXIgY2FsbGJhY2sgcm91dGluZS4NCisNCisgIEBwYXJhbVtp bl0gIERhdGEgICAgICAgICAgICBEYXRhIHJlY2VpdmVkIG9yIHNlbnQgdmlhIHRoZSBVU0IgQXN5 bmNocm9ub3VzIFRyYW5zZmVyLCBpZiB0aGUNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICB0cmFuc2ZlciBjb21wbGV0ZWQgc3VjY2Vzc2Z1bGx5Lg0KKyAgQHBhcmFtW2luXSAgRGF0YUxl bmd0aCAgICAgIFRoZSBsZW5ndGggb2YgRGF0YSByZWNlaXZlZCBvciBzZW50IHZpYSB0aGUgQXN5 bmNocm9ub3VzDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVHJhbnNmZXIsIGlmIHRy YW5zZmVyIHN1Y2Nlc3NmdWxseSBjb21wbGV0ZXMuDQorICBAcGFyYW1baW5dICBDb250ZXh0ICAg ICAgICAgRGF0YSBwYXNzZWQgZnJvbSBVc2JBc3luY0ludGVycnVwdFRyYW5zZmVyKCkgcmVxdWVz dC4NCisgIEBwYXJhbVtpbl0gIFN0YXR1cyAgICAgICAgICBJbmRpY2F0ZXMgdGhlIHJlc3VsdCBv ZiB0aGUgYXN5bmNocm9ub3VzIHRyYW5zZmVyLg0KKw0KKyAgQHJldHZhbCBFRklfU1VDQ0VTUyAg ICAgICAgICAgVGhlIGFzeW5jaHJvbm91cyBVU0IgdHJhbnNmZXIgcmVxdWVzdCBoYXMgYmVlbiBz dWNjZXNzZnVsbHkgZXhlY3V0ZWQuDQorICBAcmV0dmFsIEVGSV9ERVZJQ0VfRVJST1IgICAgICBU aGUgYXN5bmNocm9ub3VzIFVTQiB0cmFuc2ZlciByZXF1ZXN0IGZhaWxlZC4NCisNCisqKi8NCitF RklfU1RBVFVTDQorRUZJQVBJDQorSW50ZXJydXB0Q2FsbGJhY2sgKA0KKyAgSU4gIFZPSUQgICAg KkRhdGEsDQorICBJTiAgVUlOVE4gICBEYXRhTGVuZ3RoLA0KKyAgSU4gIFZPSUQgICAgKkNvbnRl eHQsDQorICBJTiAgVUlOVDMyICBTdGF0dXMNCisgICkNCit7DQorICBpZiAoKERhdGEgPT0gTlVM TCkgfHwgKENvbnRleHQgPT0gTlVMTCkpIHsNCisgICAgcmV0dXJuIEVGSV9JTlZBTElEX1BBUkFN RVRFUjsNCisgIH0NCisNCisgIGlmICgoKEVGSV9VU0JfREVWSUNFX1JFUVVFU1QgKilEYXRhKS0+ UmVxdWVzdCA9PSAwKSB7DQorICAgIENvcHlNZW0gKA0KKyAgICAgIChFRklfVVNCX0RFVklDRV9S RVFVRVNUICopQ29udGV4dCwNCisgICAgICAoRUZJX1VTQl9ERVZJQ0VfUkVRVUVTVCAqKURhdGEs DQorICAgICAgc2l6ZW9mIChFRklfVVNCX0RFVklDRV9SRVFVRVNUKQ0KKyAgICAgICk7DQorICB9 DQorDQorICByZXR1cm4gRUZJX1NVQ0NFU1M7DQorfQ0KKw0KKy8qKg0KKyAgVGhpcyBmdW5jdGlv biBpcyB1c2VkIHRvIG1hbmFnZSBhIFVTQiBkZXZpY2Ugd2l0aCBhbiBpbnRlcnJ1cHQgdHJhbnNm ZXIgcGlwZS4NCisNCisgIEBwYXJhbVtpbl0gIFRoaXMgICAgICAgICAgICAgIEEgcG9pbnRlciB0 byB0aGUgRURLSUlfVVNCX0VUSEVSTkVUX1BST1RPQ09MIGluc3RhbmNlLg0KKyAgQHBhcmFtW2lu XSAgSXNOZXdUcmFuc2ZlciAgICAgSWYgVFJVRSwgYSBuZXcgdHJhbnNmZXIgd2lsbCBiZSBzdWJt aXR0ZWQgdG8gVVNCIGNvbnRyb2xsZXIuIElmDQorICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBGQUxTRSwgdGhlIGludGVycnVwdCB0cmFuc2ZlciBpcyBkZWxldGVkIGZyb20gdGhlIGRl dmljZSdzIGludGVycnVwdA0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHJhbnNm ZXIgcXVldWUuDQorICBAcGFyYW1baW5dICBQb2xsaW5nSW50ZXJ2YWwgICBJbmRpY2F0ZXMgdGhl IHBlcmlvZGljIHJhdGUsIGluIG1pbGxpc2Vjb25kcywgdGhhdCB0aGUgdHJhbnNmZXIgaXMgdG8g YmUNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4ZWN1dGVkLlRoaXMgcGFyYW1l dGVyIGlzIHJlcXVpcmVkIHdoZW4gSXNOZXdUcmFuc2ZlciBpcyBUUlVFLiBUaGUNCisgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlIG11c3QgYmUgYmV0d2VlbiAxIHRvIDI1NSwg b3RoZXJ3aXNlIEVGSV9JTlZBTElEX1BBUkFNRVRFUiBpcyByZXR1cm5lZC4NCisgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIFRoZSB1bml0cyBhcmUgaW4gbWlsbGlzZWNvbmRzLg0KKyAg QHBhcmFtW2luXSAgUmVxdWVzdCAgICAgICAgICAgQSBwb2ludGVyIHRvIHRoZSBFRklfVVNCX0RF VklDRV9SRVFVRVNUIGRhdGEuDQorDQorICBAcmV0dmFsIEVGSV9TVUNDRVNTICAgICAgICAgICBU aGUgYXN5bmNocm9ub3VzIFVTQiB0cmFuc2ZlciByZXF1ZXN0IHRyYW5zZmVyIGhhcyBiZWVuIHN1 Y2Nlc3NmdWxseSBleGVjdXRlZC4NCisgIEByZXR2YWwgRUZJX0RFVklDRV9FUlJPUiAgICAgIFRo ZSBhc3luY2hyb25vdXMgVVNCIHRyYW5zZmVyIHJlcXVlc3QgZmFpbGVkLg0KKw0KKyoqLw0KK0VG SV9TVEFUVVMNCitFRklBUEkNCitVc2JSbmRpc0ludGVycnVwdCAoDQorICBJTiBFREtJSV9VU0Jf RVRIRVJORVRfUFJPVE9DT0wgICpUaGlzLA0KKyAgSU4gQk9PTEVBTiAgICAgICAgICAgICAgICAg ICAgICBJc05ld1RyYW5zZmVyLA0KKyAgSU4gVUlOVE4gICAgICAgICAgICAgICAgICAgICAgICBQ b2xsaW5nSW50ZXJ2YWwsDQorICBJTiBFRklfVVNCX0RFVklDRV9SRVFVRVNUICAgICAgICpSZXF1 c3QNCisgICkNCit7DQorICBFRklfU1RBVFVTICAgICAgICBTdGF0dXM7DQorICBVU0JfUk5ESVNf REVWSUNFICAqVXNiUm5kaXNEZXZpY2U7DQorICBVSU5UTiAgICAgICAgICAgICBEYXRhTGVuZ3Ro Ow0KKw0KKyAgVXNiUm5kaXNEZXZpY2UgPSBVU0JfUk5ESVNfREVWSUNFX0ZST01fVEhJUyAoVGhp cyk7DQorICBEYXRhTGVuZ3RoICAgICA9IDA7DQorDQorICBpZiAoSXNOZXdUcmFuc2ZlciA9PSBU UlVFKSB7DQorICAgIERhdGFMZW5ndGggPSBzaXplb2YgKEVGSV9VU0JfREVWSUNFX1JFUVVFU1Qp ICsgc2l6ZW9mIChVU0JfQ09OTkVDVF9TUEVFRF9DSEFOR0UpOw0KKyAgICBTdGF0dXMgICAgID0g VXNiUm5kaXNEZXZpY2UtPlVzYklvLT5Vc2JBc3luY0ludGVycnVwdFRyYW5zZmVyICgNCisgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBVc2JSbmRpc0RldmljZS0+VXNi SW8sDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVXNiUm5kaXNE ZXZpY2UtPkludGVycnVwRW5kcG9pbnQsDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgSXNOZXdUcmFuc2ZlciwNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBQb2xsaW5nSW50ZXJ2YWwsDQorICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgRGF0YUxlbmd0aCwNCisgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBJbnRlcnJ1cHRDYWxsYmFjaywNCisgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBSZXF1c3QNCisgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICApOw0KKw0KKyAgICBpZiAoU3RhdHVzID09IEVGSV9JTlZBTElEX1BB UkFNRVRFUikgew0KKyAgICAgIC8vIEJlY2F1c2Ugb2YgU3RhY2tlZCBBc3luY0ludGVycnVwdCBy ZXF1ZXN0IGFyZSBub3Qgc3VwcG9ydGVkDQorICAgICAgU3RhdHVzID0gVXNiUm5kaXNEZXZpY2Ut PlVzYklvLT5Vc2JBc3luY0ludGVycnVwdFRyYW5zZmVyICgNCisgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgVXNiUm5kaXNEZXZpY2UtPlVzYklvLA0KKyAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBVc2JSbmRpc0RldmljZS0+SW50ZXJydXBFbmRw b2ludCwNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMCwNCisgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMCwNCisgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgMCwNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgTlVMTCwNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgTlVMTA0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApOw0KKyAg ICB9DQorICB9IGVsc2Ugew0KKyAgICBTdGF0dXMgPSBVc2JSbmRpc0RldmljZS0+VXNiSW8tPlVz YkFzeW5jSW50ZXJydXB0VHJhbnNmZXIgKA0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgVXNiUm5kaXNEZXZpY2UtPlVzYklvLA0KKyAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgVXNiUm5kaXNEZXZpY2UtPkludGVycnVwRW5kcG9pbnQsDQorICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJc05ld1RyYW5zZmVyLA0KKyAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMCwNCisgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIDAsDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBOVUxMLA0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTlVMTA0KKyAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKTsNCisgIH0NCisNCisgIHJldHVy biBTdGF0dXM7DQorfQ0KKw0KKy8qKg0KKyAgVGhpcyBmdW5jdGlvbiBpcyB1c2VkIHRvIHJlYWQg VVNCIGludGVycnVwdCB0cmFuc2ZlciBiZWZvcmUgdGhlIHJlc3BvbnNlIFJORElTIG1lc3NhZ2Uu DQorDQorICBAcGFyYW1baW5dICBUaGlzICAgICAgICAgICAgICBBIHBvaW50ZXIgdG8gdGhlIFVT Ql9STkRJU19ERVZJQ0UgaW5zdGFuY2UuDQorDQorICBAcmV0dmFsIEVGSV9TVUNDRVNTICAgICAg ICAgICBUaGUgVVNCIGludGVycnVwdCB0cmFuc2ZlciBoYXMgYmVlbiBzdWNjZXNzZnVsbHkgZXhl Y3V0ZWQuDQorICBAcmV0dmFsIEVGSV9ERVZJQ0VfRVJST1IgICAgICBUaGUgVVNCIGludGVycnVw dCB0cmFuc2ZlciBmYWlsZWQuDQorDQorKiovDQorRUZJX1NUQVRVUw0KK0VGSUFQSQ0KK1JlYWRS bmRpc1Jlc3BvbnNlSW50ZXJydXB0ICgNCisgIElOIFVTQl9STkRJU19ERVZJQ0UgICpVc2JSbmRp c0RldmljZQ0KKyAgKQ0KK3sNCisgIEVGSV9TVEFUVVMgIFN0YXR1czsNCisgIFVJTlQzMiAgICAg IERhdGFbMl07DQorICBVSU5UMzIgICAgICBVc2JTdGF0dXM7DQorICBVSU5UTiAgICAgICBEYXRh TGVuZ3RoOw0KKw0KKyAgRGF0YUxlbmd0aCA9IDg7DQorDQorICBaZXJvTWVtIChEYXRhLCBzaXpl b2YgKERhdGEpKTsNCisNCisgIFN0YXR1cyA9IFVzYlJuZGlzRGV2aWNlLT5Vc2JJby0+VXNiU3lu Y0ludGVycnVwdFRyYW5zZmVyICgNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBVc2JSbmRpc0RldmljZS0+VXNiSW8sDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgVXNiUm5kaXNEZXZpY2UtPkludGVycnVwRW5kcG9pbnQsDQorICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgJkRhdGEsDQorICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgJkRhdGFMZW5ndGgsDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgMHgyMCwNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmVXNiU3RhdHVz DQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKTsNCisNCisgIHJldHVybiBT dGF0dXM7DQorfQ0KKw0KKy8qKg0KKyAgUmV0cmlldmVzIHRoZSBVU0IgRXRoZXJuZXQgTWFjIEFk ZHJlc3MuDQorDQorICBAcGFyYW1baW5dICBUaGlzICAgICAgICAgIEEgcG9pbnRlciB0byB0aGUg RURLSUlfVVNCX0VUSEVSTkVUX1BST1RPQ09MIGluc3RhbmNlLg0KKyAgQHBhcmFtW291dF0gTWFj QWRkcmVzcyAgICBBIHBvaW50ZXIgdG8gdGhlIGNhbGxlciBhbGxvY2F0ZWQgVVNCIEV0aGVybmV0 IE1hYyBBZGRyZXNzLg0KKw0KKyAgQHJldHZhbCBFRklfU1VDQ0VTUyAgICAgICAgICAgVGhlIFVT QiBIZWFkZXIgRnVuY3Rpb25hbCBkZXNjcmlwdG9yIHdhcyByZXRyaWV2ZWQgc3VjY2Vzc2Z1bGx5 Lg0KKyAgQHJldHZhbCBFRklfSU5WQUxJRF9QQVJBTUVURVIgVXNiSGVhZGVyRnVuRGVzY3JpcHRv ciBpcyBOVUxMLg0KKyAgQHJldHZhbCBFRklfTk9UX0ZPVU5EICAgICAgICAgVGhlIFVTQiBIZWFk ZXIgRnVuY3Rpb25hbCBkZXNjcmlwdG9yIHdhcyBub3QgZm91bmQuDQorDQorKiovDQorRUZJX1NU QVRVUw0KK0VGSUFQSQ0KK0dldFVzYkV0aE1hY0FkZHJlc3MgKA0KKyAgSU4gIEVES0lJX1VTQl9F VEhFUk5FVF9QUk9UT0NPTCAgKlRoaXMsDQorICBPVVQgRUZJX01BQ19BRERSRVNTICAgICAgICAg ICAgICAqTWFjQWRkcmVzcw0KKyAgKQ0KK3sNCisgIEVGSV9TVEFUVVMgICAgICAgICAgICAgICAg ICAgU3RhdHVzOw0KKyAgVVNCX1JORElTX0RFVklDRSAgICAgICAgICAgICAqVXNiUm5kaXNEZXZp Y2U7DQorICBVU0JfRVRIRVJORVRfRlVOX0RFU0NSSVBUT1IgIFVzYkV0aERlc2NyaXB0b3I7DQor ICBDSEFSMTYgICAgICAgICAgICAgICAgICAgICAgICpEYXRhOw0KKyAgQ0hBUjE2ICAgICAgICAg ICAgICAgICAgICAgICAqRGF0YVB0cjsNCisgIENIQVIxNiAgICAgICAgICAgICAgICAgICAgICAg VG1wU3RyWzFdOw0KKyAgVUlOVDggICAgICAgICAgICAgICAgICAgICAgICBJbmRleDsNCisgIFVJ TlQ4ICAgICAgICAgICAgICAgICAgICAgICAgSGk7DQorICBVSU5UOCAgICAgICAgICAgICAgICAg ICAgICAgIExvdzsNCisNCisgIFJFTU9URV9ORElTX1FVRVJZX01BQ19NU0cgICAgUm5kaXNRdWVy eU1zZzsNCisgIFJFTU9URV9ORElTX1FVRVJZX01BQ19DTVBMVCAgUm5kaXNRdWVyeU1zZ0NtcGx0 Ow0KKw0KKyAgVXNiUm5kaXNEZXZpY2UgPSBVU0JfUk5ESVNfREVWSUNFX0ZST01fVEhJUyAoVGhp cyk7DQorDQorICBaZXJvTWVtICgmUm5kaXNRdWVyeU1zZywgc2l6ZW9mIChSRU1PVEVfTkRJU19R VUVSWV9NQUNfTVNHKSk7DQorICBaZXJvTWVtICgmUm5kaXNRdWVyeU1zZ0NtcGx0LCBzaXplb2Yg KFJFTU9URV9ORElTX1FVRVJZX01BQ19DTVBMVCkpOw0KKw0KKyAgUm5kaXNRdWVyeU1zZy5RdWVy eU1zZy5NZXNzYWdlVHlwZSAgID0gUk5ESVNfUVVFUllfTVNHOw0KKyAgUm5kaXNRdWVyeU1zZy5R dWVyeU1zZy5NZXNzYWdlTGVuZ3RoID0gc2l6ZW9mIChSRU1PVEVfTkRJU19RVUVSWV9NQUNfTVNH KTsNCisgIFJuZGlzUXVlcnlNc2cuUXVlcnlNc2cuUmVxdWVzdElEICAgICA9IFVzYlJuZGlzRGV2 aWNlLT5SZXF1ZXN0SWQ7DQorICBSbmRpc1F1ZXJ5TXNnLlF1ZXJ5TXNnLk9pZCAgICAgICAgICAg PSBPSURfODAyXzNfQ1VSUkVOVF9BRERSRVNTOw0KKw0KKyAgUm5kaXNRdWVyeU1zZ0NtcGx0LlF1 ZXJ5Q21wbHQuTWVzc2FnZVR5cGUgICA9IFJORElTX1FVRVJZX0NNUExUOw0KKyAgUm5kaXNRdWVy eU1zZ0NtcGx0LlF1ZXJ5Q21wbHQuTWVzc2FnZUxlbmd0aCA9IHNpemVvZiAoUkVNT1RFX05ESVNf UVVFUllfTUFDX0NNUExUKTsNCisNCisgIFN0YXR1cyA9IFJuZGlzQ29udHJvbE1zZyAoDQorICAg ICAgICAgICAgIFVzYlJuZGlzRGV2aWNlLA0KKyAgICAgICAgICAgICAoUkVNT1RFX05ESVNfTVNH X0hFQURFUiAqKSZSbmRpc1F1ZXJ5TXNnLA0KKyAgICAgICAgICAgICAoUkVNT1RFX05ESVNfTVNH X0hFQURFUiAqKSZSbmRpc1F1ZXJ5TXNnQ21wbHQNCisgICAgICAgICAgICAgKTsNCisgIGlmICgh RUZJX0VSUk9SIChTdGF0dXMpKSB7DQorICAgIERFQlVHICgoREVCVUdfSU5GTywgIlN1Y2Nlc3Mg dG8gZ2V0IE1hYyBhZGRyZXNzIGZyb20gUk5ESVMgbWVzc2FnZS5cbiIpKTsNCisgICAgZm9yIChJ bmRleCA9IDA7IEluZGV4IDwgUFhFX0hXQUREUl9MRU5fRVRIRVI7IEluZGV4KyspIHsNCisgICAg ICBNYWNBZGRyZXNzLT5BZGRyW0luZGV4XSA9IFJuZGlzUXVlcnlNc2dDbXBsdC5BZGRyW0luZGV4 XTsNCisgICAgfQ0KKw0KKyAgICBVc2JSbmRpc0RldmljZS0+UmVxdWVzdElkKys7DQorICAgIHJl dHVybiBTdGF0dXM7DQorICB9DQorDQorICAvLyBJZiBpdCBpcyBub3Qgc3VwcG9ydCB0aGUgT0lE XzgwMl8zX0NVUlJFTlRfQUREUkVTUy4NCisgIC8vIFRvIGNoZWNrIFVTQiBFdGhlcm5ldCBmdW5j dGlvbmFsIERlc2NyaXB0b3INCisgIFN0YXR1cyA9IFRoaXMtPlVzYkV0aEZ1bkRlc2NyaXB0b3Ig KFRoaXMsICZVc2JFdGhEZXNjcmlwdG9yKTsNCisgIGlmIChFRklfRVJST1IgKFN0YXR1cykpIHsN CisgICAgREVCVUcgKChERUJVR19FUlJPUiwgIiVhOlVzYkV0aEZ1bkRlc2NyaXB0b3Igc3RhdHVz ID0gJXJcbiIsIF9fZnVuY19fLCBTdGF0dXMpKTsNCisgICAgcmV0dXJuIFN0YXR1czsNCisgIH0N CisNCisgIFN0YXR1cyA9IFVzYlJuZGlzRGV2aWNlLT5Vc2JJby0+VXNiR2V0U3RyaW5nRGVzY3Jp cHRvciAoDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVXNiUm5kaXNEZXZp Y2UtPlVzYklvLA0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4NDA5LCAg ICAgICAgICAgICAgICAgICAgICAgLy8gRW5nbGlzaC1VUyBMYW5ndWFnZSBJRA0KKyAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIFVzYkV0aERlc2NyaXB0b3IuTWFjQWRkcmVzcywN CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmRGF0YQ0KKyAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICk7DQorICBpZiAoRUZJX0VSUk9SIChTdGF0dXMpKSB7 DQorICAgIERFQlVHICgoREVCVUdfRVJST1IsICIlYTpVc2JHZXRTdHJpbmdEZXNjcmlwdG9yIHN0 YXR1cyA9ICVyXG4iLCBfX2Z1bmNfXywgU3RhdHVzKSk7DQorICAgIHJldHVybiBTdGF0dXM7DQor ICB9DQorDQorICBEYXRhUHRyID0gRGF0YTsNCisgIGZvciAoSW5kZXggPSAwOyBJbmRleCA8IFBY RV9IV0FERFJfTEVOX0VUSEVSOyBJbmRleCsrKSB7DQorICAgIENvcHlNZW0gKFRtcFN0ciwgRGF0 YVB0ciwgc2l6ZW9mIChDSEFSMTYpKTsNCisgICAgRGF0YVB0cisrOw0KKyAgICBIaSA9IChVSU5U OClTdHJIZXhUb1VpbnRuIChUbXBTdHIpOw0KKyAgICBDb3B5TWVtIChUbXBTdHIsIERhdGFQdHIs IHNpemVvZiAoQ0hBUjE2KSk7DQorICAgIERhdGFQdHIrKzsNCisgICAgTG93ICAgICAgICAgICAg ICAgICAgICAgPSAoVUlOVDgpU3RySGV4VG9VaW50biAoVG1wU3RyKTsNCisgICAgTWFjQWRkcmVz cy0+QWRkcltJbmRleF0gPSAoSGkgPDwgNCkgfCBMb3c7DQorICB9DQorDQorICByZXR1cm4gU3Rh dHVzOw0KK30NCisNCisvKioNCisgIFJldHJpZXZlcyB0aGUgVVNCIEV0aGVybmV0IEJ1bGsgdHJh bnNmZXIgZGF0YSBzaXplLg0KKw0KKyAgQHBhcmFtW2luXSAgVGhpcyAgICAgICAgICBBIHBvaW50 ZXIgdG8gdGhlIEVES0lJX1VTQl9FVEhFUk5FVF9QUk9UT0NPTCBpbnN0YW5jZS4NCisgIEBwYXJh bVtvdXRdIEJ1bGtTaXplICAgICAgQSBwb2ludGVyIHRvIHRoZSBCdWxrIHRyYW5zZmVyIGRhdGEg c2l6ZS4NCisNCisgIEByZXR2YWwgRUZJX1NVQ0NFU1MgICAgICAgVGhlIGJ1bGsgdHJhbnNmZXIg ZGF0YSBzaXplIHdhcyByZXRyaWV2ZWQgc3VjY2Vzc2Z1bGx5Lg0KKyAgQHJldHZhbCBvdGhlciAg ICAgICAgICAgICBGYWlsZWQgdG8gcmV0cmlldmUgdGhlIGJ1bGsgdHJhbnNmZXIgZGF0YSBzaXpl Lg0KKw0KKyoqLw0KK0VGSV9TVEFUVVMNCitFRklBUEkNCitVc2JFdGhCdWxrU2l6ZSAoDQorICBJ TiAgRURLSUlfVVNCX0VUSEVSTkVUX1BST1RPQ09MICAqVGhpcywNCisgIE9VVCBVSU5UTiAgICAg ICAgICAgICAgICAgICAgICAgICpCdWxrU2l6ZQ0KKyAgKQ0KK3sNCisgIEVGSV9TVEFUVVMgICAg ICAgICAgICAgICAgICAgU3RhdHVzOw0KKyAgVVNCX0VUSEVSTkVUX0ZVTl9ERVNDUklQVE9SICBV c2JFdGhGdW5EZXNjcmlwdG9yOw0KKyAgVVNCX1JORElTX0RFVklDRSAgICAgICAgICAgICAqVXNi Um5kaXNEZXZpY2U7DQorDQorICBSRU1PVEVfTkRJU19RVUVSWV9NQVhfVE9UQUxfU0laRV9NU0cg ICAgUm5kaXNRdWVyeU1zZzsNCisgIFJFTU9URV9ORElTX1FVRVJZX01BWF9UT1RBTF9TSVpFX0NN UExUICBSbmRpc1F1ZXJ5TXNnQ21wbHQ7DQorDQorICBVc2JSbmRpc0RldmljZSA9IFVTQl9STkRJ U19ERVZJQ0VfRlJPTV9USElTIChUaGlzKTsNCisNCisgIFplcm9NZW0gKCZSbmRpc1F1ZXJ5TXNn LCBzaXplb2YgKFJFTU9URV9ORElTX1FVRVJZX01BWF9UT1RBTF9TSVpFX01TRykpOw0KKyAgWmVy b01lbSAoJlJuZGlzUXVlcnlNc2dDbXBsdCwgc2l6ZW9mIChSRU1PVEVfTkRJU19RVUVSWV9NQVhf VE9UQUxfU0laRV9DTVBMVCkpOw0KKw0KKyAgUm5kaXNRdWVyeU1zZy5RdWVyeU1zZy5NZXNzYWdl VHlwZSAgID0gUk5ESVNfUVVFUllfTVNHOw0KKyAgUm5kaXNRdWVyeU1zZy5RdWVyeU1zZy5NZXNz YWdlTGVuZ3RoID0gc2l6ZW9mIChSRU1PVEVfTkRJU19RVUVSWV9NQVhfVE9UQUxfU0laRV9NU0cp Ow0KKyAgUm5kaXNRdWVyeU1zZy5RdWVyeU1zZy5SZXF1ZXN0SUQgICAgID0gVXNiUm5kaXNEZXZp Y2UtPlJlcXVlc3RJZDsNCisgIFJuZGlzUXVlcnlNc2cuUXVlcnlNc2cuT2lkICAgICAgICAgICA9 IE9JRF9HRU5fTUFYSU1VTV9UT1RBTF9TSVpFOw0KKw0KKyAgUm5kaXNRdWVyeU1zZ0NtcGx0LlF1 ZXJ5Q21wbHQuTWVzc2FnZVR5cGUgICA9IFJORElTX1FVRVJZX0NNUExUOw0KKyAgUm5kaXNRdWVy eU1zZ0NtcGx0LlF1ZXJ5Q21wbHQuTWVzc2FnZUxlbmd0aCA9IHNpemVvZiAoUkVNT1RFX05ESVNf UVVFUllfTUFYX1RPVEFMX1NJWkVfQ01QTFQpOw0KKw0KKyAgU3RhdHVzID0gUm5kaXNDb250cm9s TXNnICgNCisgICAgICAgICAgICAgVXNiUm5kaXNEZXZpY2UsDQorICAgICAgICAgICAgIChSRU1P VEVfTkRJU19NU0dfSEVBREVSICopJlJuZGlzUXVlcnlNc2csDQorICAgICAgICAgICAgIChSRU1P VEVfTkRJU19NU0dfSEVBREVSICopJlJuZGlzUXVlcnlNc2dDbXBsdA0KKyAgICAgICAgICAgICAp Ow0KKyAgaWYgKCFFRklfRVJST1IgKFN0YXR1cykpIHsNCisgICAgREVCVUcgKChERUJVR19JTkZP LCAiU3VjY2VzcyB0byBnZXQgTWF4IFRvdGFsIHNpemUgOiAlWCAgXG4iLCBSbmRpc1F1ZXJ5TXNn Q21wbHQuTWF4VG90YWxTaXplKSk7DQorICAgICpCdWxrU2l6ZSA9IFJuZGlzUXVlcnlNc2dDbXBs dC5NYXhUb3RhbFNpemU7DQorICAgIFVzYlJuZGlzRGV2aWNlLT5SZXF1ZXN0SWQrKzsNCisgICAg cmV0dXJuIFN0YXR1czsNCisgIH0NCisNCisgIFN0YXR1cyA9IFRoaXMtPlVzYkV0aEZ1bkRlc2Ny aXB0b3IgKFRoaXMsICZVc2JFdGhGdW5EZXNjcmlwdG9yKTsNCisgIGlmIChFRklfRVJST1IgKFN0 YXR1cykpIHsNCisgICAgcmV0dXJuIFN0YXR1czsNCisgIH0NCisNCisgICpCdWxrU2l6ZSA9IChV SU5UTilVc2JFdGhGdW5EZXNjcmlwdG9yLk1heFNlZ21lbnRTaXplOw0KKyAgcmV0dXJuIFN0YXR1 czsNCit9DQorDQorLyoqDQorICBSZXRyaWV2ZXMgdGhlIFVTQiBIZWFkZXIgZnVuY3Rpb25hbCBE ZXNjcmlwdG9yLg0KKw0KKyAgQHBhcmFtW2luXSAgVGhpcyAgICAgICAgICAgICAgICAgICBBIHBv aW50ZXIgdG8gdGhlIEVES0lJX1VTQl9FVEhFUk5FVF9QUk9UT0NPTCBpbnN0YW5jZS4NCisgIEBw YXJhbVtvdXRdIFVzYkhlYWRlckZ1bkRlc2NyaXB0b3IgQSBwb2ludGVyIHRvIHRoZSBjYWxsZXIg YWxsb2NhdGVkIFVTQiBIZWFkZXIgRnVuY3Rpb25hbCBEZXNjcmlwdG9yLg0KKw0KKyAgQHJldHZh bCBFRklfU1VDQ0VTUyAgICAgICAgICAgVGhlIFVTQiBIZWFkZXIgRnVuY3Rpb25hbCBkZXNjcmlw dG9yIHdhcyByZXRyaWV2ZWQgc3VjY2Vzc2Z1bGx5Lg0KKyAgQHJldHZhbCBFRklfSU5WQUxJRF9Q QVJBTUVURVIgVXNiSGVhZGVyRnVuRGVzY3JpcHRvciBpcyBOVUxMLg0KKyAgQHJldHZhbCBFRklf Tk9UX0ZPVU5EICAgICAgICAgVGhlIFVTQiBIZWFkZXIgRnVuY3Rpb25hbCBkZXNjcmlwdG9yIHdh cyBub3QgZm91bmQuDQorDQorKiovDQorRUZJX1NUQVRVUw0KK0VGSUFQSQ0KK0dldFVzYkhlYWRl ckZ1bkRlc2NyaXB0b3IgKA0KKyAgSU4gIEVES0lJX1VTQl9FVEhFUk5FVF9QUk9UT0NPTCAgKlRo aXMsDQorICBPVVQgVVNCX0hFQURFUl9GVU5fREVTQ1JJUFRPUiAgICAqVXNiSGVhZGVyRnVuRGVz Y3JpcHRvcg0KKyAgKQ0KK3sNCisgIEVGSV9TVEFUVVMgICAgICAgIFN0YXR1czsNCisgIFVTQl9S TkRJU19ERVZJQ0UgICpVc2JSbmRpc0RldmljZTsNCisNCisgIFVzYlJuZGlzRGV2aWNlID0gVVNC X1JORElTX0RFVklDRV9GUk9NX1RISVMgKFRoaXMpOw0KKw0KKyAgaWYgKFVzYkhlYWRlckZ1bkRl c2NyaXB0b3IgPT0gTlVMTCkgew0KKyAgICByZXR1cm4gRUZJX0lOVkFMSURfUEFSQU1FVEVSOw0K KyAgfQ0KKw0KKyAgU3RhdHVzID0gR2V0RnVuY3Rpb25hbERlc2NyaXB0b3IgKA0KKyAgICAgICAg ICAgICBVc2JSbmRpc0RldmljZS0+Q29uZmlnLA0KKyAgICAgICAgICAgICBIRUFERVJfRlVOX0RF U0NSSVBUT1IsDQorICAgICAgICAgICAgIFVzYkhlYWRlckZ1bkRlc2NyaXB0b3INCisgICAgICAg ICAgICAgKTsNCisgIHJldHVybiBTdGF0dXM7DQorfQ0KKw0KKy8qKg0KKyAgUmV0cmlldmVzIHRo ZSBVU0IgVW5pb24gZnVuY3Rpb25hbCBEZXNjcmlwdG9yLg0KKw0KKyAgQHBhcmFtW2luXSAgVGhp cyAgICAgICAgICAgICAgICAgICBBIHBvaW50ZXIgdG8gdGhlIEVES0lJX1VTQl9FVEhFUk5FVF9Q Uk9UT0NPTCBpbnN0YW5jZS4NCisgIEBwYXJhbVtvdXRdIFVzYlVuaW9uRnVuRGVzY3JpcHRvciAg QSBwb2ludGVyIHRvIHRoZSBjYWxsZXIgYWxsb2NhdGVkIFVTQiBVbmlvbiBGdW5jdGlvbmFsIERl c2NyaXB0b3IuDQorDQorICBAcmV0dmFsIEVGSV9TVUNDRVNTICAgICAgICAgICAgVGhlIFVTQiBV bmlvbiBGdW5jdGlvbmFsIGRlc2NyaXB0b3Igd2FzIHJldHJpZXZlZCBzdWNjZXNzZnVsbHkuDQor ICBAcmV0dmFsIEVGSV9JTlZBTElEX1BBUkFNRVRFUiAgVXNiVW5pb25GdW5EZXNjcmlwdG9yIGlz IE5VTEwuDQorICBAcmV0dmFsIEVGSV9OT1RfRk9VTkQgICAgICAgICAgVGhlIFVTQiBVbmlvbiBG dW5jdGlvbmFsIGRlc2NyaXB0b3Igd2FzIG5vdCBmb3VuZC4NCisNCisqKi8NCitFRklfU1RBVFVT DQorRUZJQVBJDQorR2V0VXNiVW5pb25GdW5EZXNjcmlwdG9yICgNCisgIElOICBFREtJSV9VU0Jf RVRIRVJORVRfUFJPVE9DT0wgICpUaGlzLA0KKyAgT1VUIFVTQl9VTklPTl9GVU5fREVTQ1JJUFRP UiAgICAgKlVzYlVuaW9uRnVuRGVzY3JpcHRvcg0KKyAgKQ0KK3sNCisgIEVGSV9TVEFUVVMgICAg ICAgIFN0YXR1czsNCisgIFVTQl9STkRJU19ERVZJQ0UgICpVc2JSbmRpc0RldmljZTsNCisNCisg IFVzYlJuZGlzRGV2aWNlID0gVVNCX1JORElTX0RFVklDRV9GUk9NX1RISVMgKFRoaXMpOw0KKw0K KyAgaWYgKFVzYlVuaW9uRnVuRGVzY3JpcHRvciA9PSBOVUxMKSB7DQorICAgIHJldHVybiBFRklf SU5WQUxJRF9QQVJBTUVURVI7DQorICB9DQorDQorICBTdGF0dXMgPSBHZXRGdW5jdGlvbmFsRGVz Y3JpcHRvciAoDQorICAgICAgICAgICAgIFVzYlJuZGlzRGV2aWNlLT5Db25maWcsDQorICAgICAg ICAgICAgIFVOSU9OX0ZVTl9ERVNDUklQVE9SLA0KKyAgICAgICAgICAgICBVc2JVbmlvbkZ1bkRl c2NyaXB0b3INCisgICAgICAgICAgICAgKTsNCisgIHJldHVybiBTdGF0dXM7DQorfQ0KKw0KKy8q Kg0KKyAgUmV0cmlldmVzIHRoZSBVU0IgRXRoZXJuZXQgZnVuY3Rpb25hbCBEZXNjcmlwdG9yLg0K Kw0KKyAgVGhpcyBmdW5jdGlvbiBnZXQgdGhlIE1hYyBBZGRyZXNzLCBFdGhlcm5ldCBzdGF0aXN0 aWNzLCBtYXhpbXVtIHNlZ21lbnQgc2l6ZSwNCisgIG51bWJlciBvZiBtdWx0aWNhc3QgZmlsdGVy cywgYW5kIG51bWJlciBvZiBwYXR0ZXJuIGZpbHRlcnMgZnJvbSBFdGhlcm5ldA0KKyAgZnVuY3Rp b25hbCBEZXNjcmlwdG9yLg0KKw0KKyAgQHBhcmFtW2luXSAgVGhpcyAgICAgICAgICAgICAgICAg ICBBIHBvaW50ZXIgdG8gdGhlIEVES0lJX1VTQl9FVEhFUk5FVF9QUk9UT0NPTCBpbnN0YW5jZS4N CisgIEBwYXJhbVtvdXRdIFVzYkV0aEZ1bkRlc2NyaXB0b3IgICAgQSBwb2ludGVyIHRvIHRoZSBj YWxsZXIgYWxsb2NhdGVkIFVTQiBFdGhlcm5ldCBGdW5jdGlvbmFsIERlc2NyaXB0b3IuDQorDQor ICBAcmV0dmFsIEVGSV9TVUNDRVNTICAgICAgICAgICAgVGhlIFVTQiBFdGhlcm5ldCBGdW5jdGlv bmFsIGRlc2NyaXB0b3Igd2FzIHJldHJpZXZlZCBzdWNjZXNzZnVsbHkuDQorICBAcmV0dmFsIEVG SV9JTlZBTElEX1BBUkFNRVRFUiAgVXNiRXRoRnVuRGVzY3JpcHRvciBpcyBOVUxMLg0KKyAgQHJl dHZhbCBFRklfTk9UX0ZPVU5EICAgICAgICAgIFRoZSBVU0IgRXRoZXJuZXQgRnVuY3Rpb25hbCBk ZXNjcmlwdG9yIHdhcyBub3QgZm91bmQuDQorDQorKiovDQorRUZJX1NUQVRVUw0KK0VGSUFQSQ0K K0dldFVzYlJuZGlzRnVuRGVzY3JpcHRvciAoDQorICBJTiAgRURLSUlfVVNCX0VUSEVSTkVUX1BS T1RPQ09MICAqVGhpcywNCisgIE9VVCBVU0JfRVRIRVJORVRfRlVOX0RFU0NSSVBUT1IgICpVc2JF dGhGdW5EZXNjcmlwdG9yDQorICApDQorew0KKyAgRUZJX1NUQVRVUyAgICAgICAgU3RhdHVzOw0K KyAgVVNCX1JORElTX0RFVklDRSAgKlVzYlJuZGlzRGV2aWNlOw0KKw0KKyAgVXNiUm5kaXNEZXZp Y2UgPSBVU0JfUk5ESVNfREVWSUNFX0ZST01fVEhJUyAoVGhpcyk7DQorDQorICBpZiAoVXNiRXRo RnVuRGVzY3JpcHRvciA9PSBOVUxMKSB7DQorICAgIHJldHVybiBFRklfSU5WQUxJRF9QQVJBTUVU RVI7DQorICB9DQorDQorICBTdGF0dXMgPSBHZXRGdW5jdGlvbmFsRGVzY3JpcHRvciAoDQorICAg ICAgICAgICAgIFVzYlJuZGlzRGV2aWNlLT5Db25maWcsDQorICAgICAgICAgICAgIEVUSEVSTkVU X0ZVTl9ERVNDUklQVE9SLA0KKyAgICAgICAgICAgICBVc2JFdGhGdW5EZXNjcmlwdG9yDQorICAg ICAgICAgICAgICk7DQorICByZXR1cm4gU3RhdHVzOw0KK30NCisNCisvKioNCisgIFRoaXMgcmVx dWVzdCBzZXRzIHRoZSBFdGhlcm5ldCBkZXZpY2UgbXVsdGljYXN0IGZpbHRlcnMgYXMgc3BlY2lm aWVkIGluIHRoZQ0KKyAgc2VxdWVudGlhbCBsaXN0IG9mIDQ4IGJpdCBFdGhlcm5ldCBtdWx0aWNh c3QgYWRkcmVzc2VzLg0KKw0KKyAgQHBhcmFtW2luXSAgVGhpcyAgICAgICAgICAgICAgICAgICBB IHBvaW50ZXIgdG8gdGhlIEVES0lJX1VTQl9FVEhFUk5FVF9QUk9UT0NPTCBpbnN0YW5jZS4NCisg IEBwYXJhbVtpbl0gIFZhbHVlICAgICAgICAgICAgICAgICAgTnVtYmVyIG9mIGZpbHRlcnMuDQor ICBAcGFyYW1baW5dICBNY2FzdEFkZHIgICAgICAgICAgICAgIEEgcG9pbnRlciB0byB0aGUgdmFs dWUgb2YgdGhlIG11bHRpY2FzdCBhZGRyZXNzZXMuDQorDQorICBAcmV0dmFsIEVGSV9TVUNDRVNT ICAgICAgICAgICAgVGhlIHJlcXVlc3QgZXhlY3V0ZWQgc3VjY2Vzc2Z1bGx5Lg0KKyAgQHJldHZh bCBFRklfVElNRU9VVCAgICAgICAgICAgIEEgdGltZW91dCBvY2N1cnJlZCBleGVjdXRpbmcgdGhl IHJlcXVlc3QuDQorICBAcmV0dmFsIEVGSV9ERVZJQ0VfRVJST1IgICAgICAgVGhlIHJlcXVlc3Qg ZmFpbGVkIGR1ZSB0byBhIGRldmljZSBlcnJvci4NCisgIEByZXR2YWwgRUZJX0lOVkFMSURfUEFS QU1FVEVSICBPbmUgb2YgdGhlIHBhcmFtZXRlcnMgaGFzIGFuIGludmFsaWQgdmFsdWUuDQorICBA cmV0dmFsIEVGSV9VTlNVUFBPUlRFRCAgICAgICAgTm90IHN1cHBvcnRlZC4NCisNCisqKi8NCitF RklfU1RBVFVTDQorRUZJQVBJDQorU2V0VXNiUm5kaXNNY2FzdEZpbHRlciAoDQorICBJTiBFREtJ SV9VU0JfRVRIRVJORVRfUFJPVE9DT0wgICpUaGlzLA0KKyAgSU4gVUlOVDE2ICAgICAgICAgICAg ICAgICAgICAgICBWYWx1ZSwNCisgIElOIFZPSUQgICAgICAgICAgICAgICAgICAgICAgICAgKk1j YXN0QWRkcg0KKyAgKQ0KK3sNCisgIEVGSV9TVEFUVVMgICAgICAgICAgICAgICAgICAgU3RhdHVz Ow0KKyAgRUZJX1VTQl9ERVZJQ0VfUkVRVUVTVCAgICAgICBSZXF1ZXN0Ow0KKyAgVUlOVDMyICAg ICAgICAgICAgICAgICAgICAgICBUcmFuc1N0YXR1czsNCisgIFVTQl9FVEhFUk5FVF9GVU5fREVT Q1JJUFRPUiAgVXNiRXRoRnVuRGVzY3JpcHRvcjsNCisgIFVTQl9STkRJU19ERVZJQ0UgICAgICAg ICAgICAgKlVzYlJuZGlzRGV2aWNlOw0KKw0KKyAgVXNiUm5kaXNEZXZpY2UgPSBVU0JfUk5ESVNf REVWSUNFX0ZST01fVEhJUyAoVGhpcyk7DQorDQorICBTdGF0dXMgPSBUaGlzLT5Vc2JFdGhGdW5E ZXNjcmlwdG9yIChUaGlzLCAmVXNiRXRoRnVuRGVzY3JpcHRvcik7DQorICBpZiAoRUZJX0VSUk9S IChTdGF0dXMpKSB7DQorICAgIHJldHVybiBTdGF0dXM7DQorICB9DQorDQorICBpZiAoKFVzYkV0 aEZ1bkRlc2NyaXB0b3IuTnVtYmVyTWNGaWx0ZXJzIDw8IDEpID09IDApIHsNCisgICAgcmV0dXJu IEVGSV9VTlNVUFBPUlRFRDsNCisgIH0NCisNCisgIFJlcXVlc3QuUmVxdWVzdFR5cGUgPSBVU0Jf RVRIRVJORVRfU0VUX1JFUV9UWVBFOw0KKyAgUmVxdWVzdC5SZXF1ZXN0ICAgICA9IFNFVF9FVEhf TVVMVElDQVNUX0ZJTFRFUlNfUkVROw0KKyAgUmVxdWVzdC5WYWx1ZSAgICAgICA9IFZhbHVlOw0K KyAgUmVxdWVzdC5JbmRleCAgICAgICA9IFVzYlJuZGlzRGV2aWNlLT5OdW1PZkludGVyZmFjZTsN CisgIFJlcXVlc3QuTGVuZ3RoICAgICAgPSBWYWx1ZSAqIDY7DQorDQorICByZXR1cm4gVXNiUm5k aXNEZXZpY2UtPlVzYklvLT5Vc2JDb250cm9sVHJhbnNmZXIgKA0KKyAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBVc2JSbmRpc0RldmljZS0+VXNiSW8sDQorICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICZSZXF1ZXN0LA0KKyAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBFZmlVc2JEYXRhT3V0LA0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBVU0JfRVRIRVJORVRfVFJBTlNGRVJfVElNRU9VVCwNCisgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgTWNhc3RBZGRyLA0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBSZXF1ZXN0Lkxlbmd0aCwNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJlRy YW5zU3RhdHVzDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICk7DQorfQ0KKw0K Ky8qKg0KKyAgVGhpcyByZXF1ZXN0IHNldHMgdXAgdGhlIHNwZWNpZmllZCBFdGhlcm5ldCBwb3dl ciBtYW5hZ2VtZW50IHBhdHRlcm4gZmlsdGVyIGFzDQorICBkZXNjcmliZWQgaW4gdGhlIGRhdGEg c3RydWN0dXJlLg0KKw0KKyAgQHBhcmFtW2luXSAgVGhpcyAgICAgICAgICAgICAgICAgIEEgcG9p bnRlciB0byB0aGUgRURLSUlfVVNCX0VUSEVSTkVUX1BST1RPQ09MIGluc3RhbmNlLg0KKyAgQHBh cmFtW2luXSAgVmFsdWUgICAgICAgICAgICAgICAgIE51bWJlciBvZiBmaWx0ZXJzLg0KKyAgQHBh cmFtW2luXSAgTGVuZ3RoICAgICAgICAgICAgICAgIFNpemUgb2YgdGhlIHBvd2VyIG1hbmFnZW1l bnQgcGF0dGVybiBmaWx0ZXIgZGF0YS4NCisgIEBwYXJhbVtpbl0gIFBhdHRlcm5GaWx0ZXIgICAg ICAgICBBIHBvaW50ZXIgdG8gdGhlIHBvd2VyIG1hbmFnZW1lbnQgcGF0dGVybiBmaWx0ZXIgc3Ry dWN0dXJlLg0KKw0KKyAgQHJldHZhbCBFRklfU1VDQ0VTUyAgICAgICAgICAgIFRoZSByZXF1ZXN0 IGV4ZWN1dGVkIHN1Y2Nlc3NmdWxseS4NCisgIEByZXR2YWwgRUZJX1RJTUVPVVQgICAgICAgICAg ICBBIHRpbWVvdXQgb2NjdXJyZWQgZXhlY3V0aW5nIHRoZSByZXF1ZXN0Lg0KKyAgQHJldHZhbCBF RklfREVWSUNFX0VSUk9SICAgICAgIFRoZSByZXF1ZXN0IGZhaWxlZCBkdWUgdG8gYSBkZXZpY2Ug ZXJyb3IuDQorICBAcmV0dmFsIEVGSV9JTlZBTElEX1BBUkFNRVRFUiAgT25lIG9mIHRoZSBwYXJh bWV0ZXJzIGhhcyBhbiBpbnZhbGlkIHZhbHVlLg0KKyAgQHJldHZhbCBFRklfVU5TVVBQT1JURUQg ICAgICAgIE5vdCBzdXBwb3J0ZWQuDQorDQorKiovDQorRUZJX1NUQVRVUw0KK0VGSUFQSQ0KK1Nl dFVzYlJuZGlzUG93ZXJGaWx0ZXIgKA0KKyAgSU4gRURLSUlfVVNCX0VUSEVSTkVUX1BST1RPQ09M ICAqVGhpcywNCisgIElOIFVJTlQxNiAgICAgICAgICAgICAgICAgICAgICAgVmFsdWUsDQorICBJ TiBVSU5UMTYgICAgICAgICAgICAgICAgICAgICAgIExlbmd0aCwNCisgIElOIFZPSUQgICAgICAg ICAgICAgICAgICAgICAgICAgKlBhdHRlcm5GaWx0ZXINCisgICkNCit7DQorICBFRklfVVNCX0RF VklDRV9SRVFVRVNUICBSZXF1ZXN0Ow0KKyAgVUlOVDMyICAgICAgICAgICAgICAgICAgVHJhbnNT dGF0dXM7DQorICBVU0JfUk5ESVNfREVWSUNFICAgICAgICAqVXNiUm5kaXNEZXZpY2U7DQorDQor ICBVc2JSbmRpc0RldmljZSA9IFVTQl9STkRJU19ERVZJQ0VfRlJPTV9USElTIChUaGlzKTsNCisN CisgIFJlcXVlc3QuUmVxdWVzdFR5cGUgPSBVU0JfRVRIRVJORVRfU0VUX1JFUV9UWVBFOw0KKyAg UmVxdWVzdC5SZXF1ZXN0ICAgICA9IFNFVF9FVEhfUE9XRVJfTUFOQUdFTUVOVF9QQVRURVJOX0ZJ TFRFUl9SRVE7DQorICBSZXF1ZXN0LlZhbHVlICAgICAgID0gVmFsdWU7DQorICBSZXF1ZXN0Lklu ZGV4ICAgICAgID0gVXNiUm5kaXNEZXZpY2UtPk51bU9mSW50ZXJmYWNlOw0KKyAgUmVxdWVzdC5M ZW5ndGggICAgICA9IExlbmd0aDsNCisNCisgIHJldHVybiBVc2JSbmRpc0RldmljZS0+VXNiSW8t PlVzYkNvbnRyb2xUcmFuc2ZlciAoDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IFVzYlJuZGlzRGV2aWNlLT5Vc2JJbywNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgJlJlcXVlc3QsDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEVmaVVzYkRh dGFPdXQsDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFVTQl9FVEhFUk5FVF9U UkFOU0ZFUl9USU1FT1VULA0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQYXR0 ZXJuRmlsdGVyLA0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBMZW5ndGgsDQor ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZUcmFuc1N0YXR1cw0KKyAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICApOw0KK30NCisNCisvKioNCisgIFRoaXMgcmVxdWVz dCByZXRyaWV2ZXMgdGhlIHN0YXR1cyBvZiB0aGUgc3BlY2lmaWVkIEV0aGVybmV0IHBvd2VyIG1h bmFnZW1lbnQNCisgIHBhdHRlcm4gZmlsdGVyIGZyb20gdGhlIGRldmljZS4NCisNCisgIEBwYXJh bVtpbl0gIFRoaXMgICAgICAgICAgICAgICAgICAgQSBwb2ludGVyIHRvIHRoZSBFREtJSV9VU0Jf RVRIRVJORVRfUFJPVE9DT0wgaW5zdGFuY2UuDQorICBAcGFyYW1baW5dICBWYWx1ZSAgICAgICAg ICAgICAgICAgIFRoZSBmaWx0ZXIgbnVtYmVyLg0KKyAgQHBhcmFtW291dF0gUGF0dGVybkFjdGl2 ZSAgICAgICAgICBBIHBvaW50ZXIgdG8gdGhlIHBhdHRlcm4gYWN0aXZlIGJvb2xlYW4uDQorDQor ICBAcmV0dmFsIEVGSV9TVUNDRVNTICAgICAgICAgICAgVGhlIHJlcXVlc3QgZXhlY3V0ZWQgc3Vj Y2Vzc2Z1bGx5Lg0KKyAgQHJldHZhbCBFRklfVElNRU9VVCAgICAgICAgICAgIEEgdGltZW91dCBv Y2N1cnJlZCBleGVjdXRpbmcgdGhlIHJlcXVlc3QuDQorICBAcmV0dmFsIEVGSV9ERVZJQ0VfRVJS T1IgICAgICAgVGhlIHJlcXVlc3QgZmFpbGVkIGR1ZSB0byBhIGRldmljZSBlcnJvci4NCisgIEBy ZXR2YWwgRUZJX0lOVkFMSURfUEFSQU1FVEVSICBPbmUgb2YgdGhlIHBhcmFtZXRlcnMgaGFzIGFu IGludmFsaWQgdmFsdWUuDQorICBAcmV0dmFsIEVGSV9VTlNVUFBPUlRFRCAgICAgICAgTm90IHN1 cHBvcnRlZC4NCisNCisqKi8NCitFRklfU1RBVFVTDQorRUZJQVBJDQorR2V0VXNiUm5kaXNQb3dl ckZpbHRlciAoDQorICBJTiAgRURLSUlfVVNCX0VUSEVSTkVUX1BST1RPQ09MICAqVGhpcywNCisg IElOICBVSU5UMTYgICAgICAgICAgICAgICAgICAgICAgIFZhbHVlLA0KKyAgT1VUIEJPT0xFQU4g ICAgICAgICAgICAgICAgICAgICAgKlBhdHRlcm5BY3RpdmUNCisgICkNCit7DQorICBFRklfVVNC X0RFVklDRV9SRVFVRVNUICBSZXF1ZXN0Ow0KKyAgVUlOVDMyICAgICAgICAgICAgICAgICAgVHJh bnNTdGF0dXM7DQorICBVU0JfUk5ESVNfREVWSUNFICAgICAgICAqVXNiUm5kaXNEZXZpY2U7DQor DQorICBVc2JSbmRpc0RldmljZSA9IFVTQl9STkRJU19ERVZJQ0VfRlJPTV9USElTIChUaGlzKTsN CisNCisgIFJlcXVlc3QuUmVxdWVzdFR5cGUgPSBVU0JfRVRIRVJORVRfR0VUX1JFUV9UWVBFOw0K KyAgUmVxdWVzdC5SZXF1ZXN0ICAgICA9IEdFVF9FVEhfUE9XRVJfTUFOQUdFTUVOVF9QQVRURVJO X0ZJTFRFUl9SRVE7DQorICBSZXF1ZXN0LlZhbHVlICAgICAgID0gVmFsdWU7DQorICBSZXF1ZXN0 LkluZGV4ICAgICAgID0gVXNiUm5kaXNEZXZpY2UtPk51bU9mSW50ZXJmYWNlOw0KKyAgUmVxdWVz dC5MZW5ndGggICAgICA9IFVTQl9FVEhfUE9XRVJfRklMVEVSX0xFTkdUSDsNCisNCisgIHJldHVy biBVc2JSbmRpc0RldmljZS0+VXNiSW8tPlVzYkNvbnRyb2xUcmFuc2ZlciAoDQorICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIFVzYlJuZGlzRGV2aWNlLT5Vc2JJbywNCisgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgJlJlcXVlc3QsDQorICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIEVmaVVzYkRhdGFJbiwNCisgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgVVNCX0VUSEVSTkVUX1RSQU5TRkVSX1RJTUVPVVQsDQorICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIFBhdHRlcm5BY3RpdmUsDQorICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIFVTQl9FVEhfUE9XRVJfRklMVEVSX0xFTkdUSCwNCisgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgJlRyYW5zU3RhdHVzDQorICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICk7DQorfQ0KKw0KKy8qKg0KKw0KKyAgQ29udmVydHMgUFhFIGZpbHRlciBz ZXR0aW5ncyB0byBSTkRJUyB2YWx1ZXMNCisNCisgIEBwYXJhbVtpbl0gIFZhbHVlICAgICAgUFhF IGZpbHRlciBkYXRhLg0KKyAgQHBhcmFtW291dF0gQ2RjRmlsdGVyICBBIHBvaW50ZXIgdG8gdGhl IEV0aGVybmV0IFBhY2tldCBGaWx0ZXIgQml0bWFwIHZhbHVlIGNvbnZlcnRlZCBieSBQWEVfT1BG TEFHUy4NCisNCisqKi8NCitWT0lEDQorQ29udmVydEZpbHRlciAoDQorICBJTiAgVUlOVDE2ICBW YWx1ZSwNCisgIE9VVCBVSU5UMTYgICpDZGNGaWx0ZXINCisgICkNCit7DQorICBVSU5UMzIgICAg ICAgICAgICAgICAgIEluZGV4Ow0KKyAgVUlOVDMyICAgICAgICAgICAgICAgICBDb3VudDsNCisg IHN0YXRpYyBzdHJ1Y3QgQklUX01BUCAgVGFibGVbXSA9IHsNCisgICAgeyBQWEVfT1BGTEFHU19S RUNFSVZFX0ZJTFRFUl9VTklDQVNULCAgICAgICAgICAgIE5ESVNfUEFDS0VUX1RZUEVfRElSRUNU RUQgICAgICB9LA0KKyAgICB7IFBYRV9PUEZMQUdTX1JFQ0VJVkVfRklMVEVSX0JST0FEQ0FTVCwg ICAgICAgICAgTkRJU19QQUNLRVRfVFlQRV9CUk9BRENBU1QgICAgIH0sDQorICAgIHsgUFhFX09Q RkxBR1NfUkVDRUlWRV9GSUxURVJfRklMVEVSRURfTVVMVElDQVNULCBORElTX1BBQ0tFVF9UWVBF X01VTFRJQ0FTVCAgICAgfSwNCisgICAgeyBQWEVfT1BGTEFHU19SRUNFSVZFX0ZJTFRFUl9QUk9N SVNDVU9VUywgICAgICAgIE5ESVNfUEFDS0VUX1RZUEVfUFJPTUlTQ1VPVVMgICB9LA0KKyAgICB7 IFBYRV9PUEZMQUdTX1JFQ0VJVkVfRklMVEVSX0FMTF9NVUxUSUNBU1QsICAgICAgTkRJU19QQUNL RVRfVFlQRV9BTExfTVVMVElDQVNUIH0sDQorICB9Ow0KKw0KKyAgQ291bnQgPSBzaXplb2YgKFRh YmxlKS9zaXplb2YgKFRhYmxlWzBdKTsNCisNCisgIGZvciAoSW5kZXggPSAwOyAoVGFibGVbSW5k ZXhdLlNyYyAhPSAwKSAmJiAoSW5kZXggPCBDb3VudCk7IEluZGV4KyspIHsNCisgICAgaWYgKFRh YmxlW0luZGV4XS5TcmMgJiBWYWx1ZSkgew0KKyAgICAgICpDZGNGaWx0ZXIgfD0gVGFibGVbSW5k ZXhdLkRzdDsNCisgICAgfQ0KKyAgfQ0KK30NCisNCisvKioNCisNCisgIFVwZGF0ZXMgRmlsdGVy IHNldHRpbmdzIG9uIHRoZSBkZXZpY2UuDQorDQorICBAcGFyYW1baW5dICBDZGIgIEEgcG9pbnRl ciB0byB0aGUgY29tbWFuZCBkZXNjcmlwdG9yIGJsb2NrLg0KKyAgQHBhcmFtW2luXSAgTmljICBB IHBvaW50ZXIgdG8gdGhlIE5ldHdvcmsgaW50ZXJmYWNlIGNvbnRyb2xsZXIgZGF0YS4NCisNCisg IEByZXR2YWwgRUZJX1NUQVRVUw0KKw0KKyoqLw0KK0VGSV9TVEFUVVMNCitFRklBUEkNCitSbmRp c1VuZGlSZWNlaXZlRmlsdGVyICgNCisgIElOICBQWEVfQ0RCICAgKkNkYiwNCisgIElOICBOSUNf REFUQSAgKk5pYw0KKyAgKQ0KK3sNCisgIEVGSV9TVEFUVVMgICAgICAgICAgICAgICAgICAgU3Rh dHVzOw0KKyAgVUlOVDggICAgICAgICAgICAgICAgICAgICAgICAqTWNhc3RMaXN0Ow0KKyAgVUlO VDggICAgICAgICAgICAgICAgICAgICAgICBDb3VudDsNCisgIFVJTlQ4ICAgICAgICAgICAgICAg ICAgICAgICAgSW5kZXgxOw0KKyAgVUlOVDggICAgICAgICAgICAgICAgICAgICAgICBJbmRleDI7 DQorICBVSU5UNjQgICAgICAgICAgICAgICAgICAgICAgIENwYkFkZHI7DQorICBVSU5UMzIgICAg ICAgICAgICAgICAgICAgICAgIENwYlNpemU7DQorICBVSU5UMTYgICAgICAgICAgICAgICAgICAg ICAgIFNldEZpbHRlcjsNCisgIFBYRV9DUEJfUkVDRUlWRV9GSUxURVJTICAgICAgKkNwYjsNCisg IFVTQl9FVEhFUk5FVF9GVU5fREVTQ1JJUFRPUiAgVXNiRXRoRnVuRGVzY3JpcHRvcjsNCisNCisg IENvdW50ICAgICA9IDA7DQorICBDcGJBZGRyICAgPSBDZGItPkNQQmFkZHI7DQorICBDcGJTaXpl ICAgPSBDZGItPkNQQnNpemU7DQorICBTZXRGaWx0ZXIgPSAoVUlOVDE2KShDZGItPk9wRmxhZ3Mg JiAweDFGKTsNCisgIENwYiAgICAgICA9IChQWEVfQ1BCX1JFQ0VJVkVfRklMVEVSUyAqKShVSU5U TilDcGJBZGRyOw0KKw0KKyAgLy8gVGhlIENwYiBjb3VsZCBiZSBOVUxMLihyZWY6UFhFX0NQQkFE RFJfTk9UX1VTRUQpDQorICBOaWMtPlJ4RmlsdGVyID0gKFVJTlQ4KVNldEZpbHRlcjsNCisNCisg IGlmICgoKFNldEZpbHRlciAmIFBYRV9PUEZMQUdTX1JFQ0VJVkVfRklMVEVSX0ZJTFRFUkVEX01V TFRJQ0FTVCkgIT0gMCkgfHwgKENwYiAhPSBOVUxMKSkgew0KKyAgICBpZiAoQ3BiICE9IE5VTEwp IHsNCisgICAgICBOaWMtPk1jYXN0Q291bnQgPSAoVUlOVDgpKENwYlNpemUgLyBQWEVfTUFDX0xF TkdUSCk7DQorICAgICAgQ29weU1lbSAoJk5pYy0+TWNhc3RMaXN0LCBDcGIsIE5pYy0+TWNhc3RD b3VudCk7DQorICAgIH0gZWxzZSB7DQorICAgICAgTmljLT5NY2FzdENvdW50ID0gMDsNCisgICAg fQ0KKw0KKyAgICBOaWMtPlVzYkV0aC0+VXNiRXRoRnVuRGVzY3JpcHRvciAoTmljLT5Vc2JFdGgs ICZVc2JFdGhGdW5EZXNjcmlwdG9yKTsNCisgICAgaWYgKChVc2JFdGhGdW5EZXNjcmlwdG9yLk51 bWJlck1jRmlsdGVycyA8PCAxKSA9PSAwKSB7DQorICAgICAgTmljLT5SeEZpbHRlciB8PSBQWEVf T1BGTEFHU19SRUNFSVZFX0ZJTFRFUl9BTExfTVVMVElDQVNUOw0KKyAgICAgIERFQlVHICgoREVC VUdfSU5GTywgIlNldFVzYkV0aFBhY2tldEZpbHRlciBOaWMgJWx4IE5pYy0+VXNiRXRoICVseCAi LCBOaWMsIE5pYy0+VXNiRXRoKSk7DQorICAgICAgTmljLT5Vc2JFdGgtPlNldFVzYkV0aFBhY2tl dEZpbHRlciAoTmljLT5Vc2JFdGgsIE5pYy0+UnhGaWx0ZXIpOw0KKyAgICB9IGVsc2Ugew0KKyAg ICAgIFN0YXR1cyA9IGdCUy0+QWxsb2NhdGVQb29sIChFZmlCb290U2VydmljZXNEYXRhLCBOaWMt Pk1jYXN0Q291bnQgKiA2LCAoVk9JRCAqKikmTWNhc3RMaXN0KTsNCisgICAgICBpZiAoRUZJX0VS Uk9SIChTdGF0dXMpKSB7DQorICAgICAgICByZXR1cm4gUFhFX1NUQVRDT0RFX0lOVkFMSURfUEFS QU1FVEVSOw0KKyAgICAgIH0NCisNCisgICAgICBpZiAoQ3BiICE9IE5VTEwpIHsNCisgICAgICAg IGZvciAoSW5kZXgxID0gMDsgSW5kZXgxIDwgTmljLT5NY2FzdENvdW50OyBJbmRleDErKykgew0K KyAgICAgICAgICBmb3IgKEluZGV4MiA9IDA7IEluZGV4MiA8IDY7IEluZGV4MisrKSB7DQorICAg ICAgICAgICAgTWNhc3RMaXN0W0NvdW50KytdID0gQ3BiLT5NQ2FzdExpc3RbSW5kZXgxXVtJbmRl eDJdOw0KKyAgICAgICAgICB9DQorICAgICAgICB9DQorICAgICAgfQ0KKw0KKyAgICAgIE5pYy0+ UnhGaWx0ZXIgfD0gUFhFX09QRkxBR1NfUkVDRUlWRV9GSUxURVJfRklMVEVSRURfTVVMVElDQVNU Ow0KKyAgICAgIGlmIChDcGIgIT0gTlVMTCkgew0KKyAgICAgICAgTmljLT5Vc2JFdGgtPlNldFVz YkV0aE1jYXN0RmlsdGVyIChOaWMtPlVzYkV0aCwgTmljLT5NY2FzdENvdW50LCBNY2FzdExpc3Qp Ow0KKyAgICAgIH0NCisNCisgICAgICBOaWMtPlVzYkV0aC0+U2V0VXNiRXRoUGFja2V0RmlsdGVy IChOaWMtPlVzYkV0aCwgTmljLT5SeEZpbHRlcik7DQorICAgICAgRnJlZVBvb2wgKE1jYXN0TGlz dCk7DQorICAgIH0NCisgIH0NCisNCisgIHJldHVybiBFRklfU1VDQ0VTUzsNCit9DQorDQorLyoq DQorICBUaGlzIHJlcXVlc3QgaXMgdXNlZCB0byBjb25maWd1cmUgZGV2aWNlIEV0aGVybmV0IHBh Y2tldCBmaWx0ZXIgc2V0dGluZ3MuDQorDQorICBAcGFyYW1baW5dICBUaGlzICAgICAgICAgICAg ICBBIHBvaW50ZXIgdG8gdGhlIEVES0lJX1VTQl9FVEhFUk5FVF9QUk9UT0NPTCBpbnN0YW5jZS4N CisgIEBwYXJhbVtpbl0gIFZhbHVlICAgICAgICAgICAgIFBhY2tldCBGaWx0ZXIgQml0bWFwLg0K Kw0KKyAgQHJldHZhbCBFRklfU1VDQ0VTUyAgICAgICAgICAgVGhlIHJlcXVlc3QgZXhlY3V0ZWQg c3VjY2Vzc2Z1bGx5Lg0KKyAgQHJldHZhbCBFRklfVElNRU9VVCAgICAgICAgICAgQSB0aW1lb3V0 IG9jY3VycmVkIGV4ZWN1dGluZyB0aGUgcmVxdWVzdC4NCisgIEByZXR2YWwgRUZJX0RFVklDRV9F UlJPUiAgICAgIFRoZSByZXF1ZXN0IGZhaWxlZCBkdWUgdG8gYSBkZXZpY2UgZXJyb3IuDQorICBA cmV0dmFsIEVGSV9JTlZBTElEX1BBUkFNRVRFUiBPbmUgb2YgdGhlIHBhcmFtZXRlcnMgaGFzIGFu IGludmFsaWQgdmFsdWUuDQorICBAcmV0dmFsIEVGSV9VTlNVUFBPUlRFRCAgICAgICBOb3Qgc3Vw cG9ydGVkLg0KKw0KKyoqLw0KK0VGSV9TVEFUVVMNCitFRklBUEkNCitTZXRVc2JSbmRpc1BhY2tl dEZpbHRlciAoDQorICBJTiBFREtJSV9VU0JfRVRIRVJORVRfUFJPVE9DT0wgICpUaGlzLA0KKyAg SU4gVUlOVDE2ICAgICAgICAgICAgICAgICAgICAgICBWYWx1ZQ0KKyAgKQ0KK3sNCisgIHJldHVy biBFRklfU1VDQ0VTUzsNCit9DQorDQorLyoqDQorICBUaGlzIHJlcXVlc3QgaXMgdXNlZCB0byBy ZXRyaWV2ZSBhIHN0YXRpc3RpYyBiYXNlZCBvbiB0aGUgZmVhdHVyZSBzZWxlY3Rvci4NCisNCisg IEBwYXJhbVtpbl0gIFRoaXMgICAgICAgICAgICAgICAgICBBIHBvaW50ZXIgdG8gdGhlIEVES0lJ X1VTQl9FVEhFUk5FVF9QUk9UT0NPTCBpbnN0YW5jZS4NCisgIEBwYXJhbVtpbl0gIEZlYXR1cmVT ZWxlY3RvciAgICAgICBWYWx1ZSBvZiB0aGUgZmVhdHVyZSBzZWxlY3Rvci4NCisgIEBwYXJhbVtv dXRdIFN0YXRpc3RpYyAgICAgICAgICAgICBBIHBvaW50ZXIgdG8gdGhlIDMyIGJpdCB1bnNpZ25l ZCBpbnRlZ2VyLg0KKw0KKyAgQHJldHZhbCBFRklfU1VDQ0VTUyAgICAgICAgICAgVGhlIHJlcXVl c3QgZXhlY3V0ZWQgc3VjY2Vzc2Z1bGx5Lg0KKyAgQHJldHZhbCBFRklfVElNRU9VVCAgICAgICAg ICAgQSB0aW1lb3V0IG9jY3VycmVkIGV4ZWN1dGluZyB0aGUgcmVxdWVzdC4NCisgIEByZXR2YWwg RUZJX0RFVklDRV9FUlJPUiAgICAgIFRoZSByZXF1ZXN0IGZhaWxlZCBkdWUgdG8gYSBkZXZpY2Ug ZXJyb3IuDQorICBAcmV0dmFsIEVGSV9JTlZBTElEX1BBUkFNRVRFUiBPbmUgb2YgdGhlIHBhcmFt ZXRlcnMgaGFzIGFuIGludmFsaWQgdmFsdWUuDQorICBAcmV0dmFsIEVGSV9VTlNVUFBPUlRFRCAg ICAgICBOb3Qgc3VwcG9ydGVkLg0KKw0KKyoqLw0KK0VGSV9TVEFUVVMNCitFRklBUEkNCitHZXRS bmRpc1N0YXRpc3RpYyAoDQorICBJTiAgRURLSUlfVVNCX0VUSEVSTkVUX1BST1RPQ09MICAqVGhp cywNCisgIElOICBVSU5UMTYgICAgICAgICAgICAgICAgICAgICAgIEZlYXR1cmVTZWxlY3RvciwN CisgIE9VVCBWT0lEICAgICAgICAgICAgICAgICAgICAgICAgICpTdGF0aXN0aWMNCisgICkNCit7 DQorICByZXR1cm4gRUZJX1NVQ0NFU1M7DQorfQ0KKw0KKy8qKg0KKyAgVGhpcyBmdW5jdGlvbiBp cyBjYWxsZWQgd2hlbiBVbmRpU3RhcnQgaXMgaW52b2tlZC4NCisNCisgIEBwYXJhbVtpbl0gIENk YiAgQSBwb2ludGVyIHRvIHRoZSBjb21tYW5kIGRlc2NyaXB0b3IgYmxvY2suDQorICBAcGFyYW1b aW5dICBOaWMgIEEgcG9pbnRlciB0byB0aGUgTmV0d29yayBpbnRlcmZhY2UgY29udHJvbGxlciBk YXRhLg0KKw0KKyAgQHJldHZhbCBFRklfU1VDQ0VTUyAgICAgVGhlIHJlcXVlc3QgZXhlY3V0ZWQg c3VjY2Vzc2Z1bGx5Lg0KKw0KKyoqLw0KK0VGSV9TVEFUVVMNCitFRklBUEkNCitSbmRpc1VuZGlT dGFydCAoDQorICBJTiAgUFhFX0NEQiAgICpDZGIsDQorICBJTiAgTklDX0RBVEEgICpOaWMNCisg ICkNCit7DQorICBFRklfU1RBVFVTICBTdGF0dXM7DQorDQorICBERUJVRyAoKERFQlVHX0lORk8s ICJSbmRpc1VuZGlTdGFydCBOaWMgJWx4IENkYiAlbHggTmljIFN0YXRlICV4XG4iLCBOaWMsIENk YiwgTmljLT5TdGF0ZSkpOw0KKw0KKyAgLy8gSXNzdWUgUm5kaXMgUmVzZXQgYW5kIGJyaW5nIHRo ZSBkZXZpY2UgdG8gUk5ESVNfQlVTX0lOSVRJQUxJWkVEIHN0YXRlDQorICBTdGF0dXMgPSBSbmRp c1VuZGlSZXNldCAoQ2RiLCBOaWMpOw0KKyAgaWYgKEVGSV9FUlJPUiAoU3RhdHVzKSkgew0KKyAg ICBSbmRpc1VuZGlSZXNldCAoQ2RiLCBOaWMpOw0KKyAgfQ0KKw0KKyAgU3RhdHVzID0gUm5kaXNV bmRpSW5pdGlhbGl6ZSAoQ2RiLCBOaWMpOw0KKyAgaWYgKEVGSV9FUlJPUiAoU3RhdHVzKSkgew0K KyAgICBSbmRpc1VuZGlJbml0aWFsaXplIChDZGIsIE5pYyk7DQorICB9DQorDQorICBSbmRpc1Vu ZGlTaHV0ZG93biAoQ2RiLCBOaWMpOw0KKw0KKyAgcmV0dXJuIEVGSV9TVUNDRVNTOw0KK30NCisN CisvKioNCisgIFRoaXMgZnVuY3Rpb24gaXMgY2FsbGVkIHdoZW4gVW5kaXN0b3AgaXMgaW52b2tl ZC4NCisNCisgIEBwYXJhbVtpbl0gIENkYiAgQSBwb2ludGVyIHRvIHRoZSBjb21tYW5kIGRlc2Ny aXB0b3IgYmxvY2suDQorICBAcGFyYW1baW5dICBOaWMgIEEgcG9pbnRlciB0byB0aGUgTmV0d29y ayBpbnRlcmZhY2UgY29udHJvbGxlciBkYXRhLg0KKw0KKyAgQHJldHZhbCBFRklfU1VDQ0VTUyAg ICAgVGhlIHJlcXVlc3QgZXhlY3V0ZWQgc3VjY2Vzc2Z1bGx5Lg0KKyoqLw0KK0VGSV9TVEFUVVMN CitFRklBUEkNCitSbmRpc1VuZGlTdG9wICgNCisgIElOICBQWEVfQ0RCICAgKkNkYiwNCisgIElO ICBOSUNfREFUQSAgKk5pYw0KKyAgKQ0KK3sNCisgIERFQlVHICgoREVCVUdfSU5GTywgIlJuZGlz VW5kaVN0b3AgU3RhdGUgJXhcbiIsIE5pYy0+U3RhdGUpKTsNCisgIHJldHVybiBFRklfU1VDQ0VT UzsNCit9DQorDQorLyoqDQorICBUaGlzIGZ1bmN0aW9uIGlzIGNhbGxlZCB3aGVuIFVuZGlHZXRJ bml0SW5mbyBpcyBpbnZva2VkLg0KKw0KKyAgQHBhcmFtW2luXSAgQ2RiICBBIHBvaW50ZXIgdG8g dGhlIGNvbW1hbmQgZGVzY3JpcHRvciBibG9jay4NCisgIEBwYXJhbVtpbl0gIE5pYyAgQSBwb2lu dGVyIHRvIHRoZSBOZXR3b3JrIGludGVyZmFjZSBjb250cm9sbGVyIGRhdGEuDQorDQorICBAcmV0 dmFsIEVGSV9TVUNDRVNTICAgICBUaGUgcmVxdWVzdCBleGVjdXRlZCBzdWNjZXNzZnVsbHkuDQor DQorKiovDQorRUZJX1NUQVRVUw0KK0VGSUFQSQ0KK1JuZGlzVW5kaUdldEluaXRJbmZvICgNCisg IElOICBQWEVfQ0RCICAgKkNkYiwNCisgIElOICBOSUNfREFUQSAgKk5pYw0KKyAgKQ0KK3sNCisg IEVES0lJX1VTQl9FVEhFUk5FVF9QUk9UT0NPTCAgKlVzYkV0aERldmljZTsNCisgIFVTQl9STkRJ U19ERVZJQ0UgICAgICAgICAgICAgKlVzYlJuZGlzRGV2aWNlOw0KKyAgUFhFX0RCX0dFVF9JTklU X0lORk8gICAgICAgICAqRGI7DQorDQorICBERUJVRyAoKERFQlVHX0lORk8sICJSbmRpc1VuZGlH ZXRJbml0SW5mb1xuIikpOw0KKw0KKyAgVXNiRXRoRGV2aWNlICAgPSBOaWMtPlVzYkV0aDsNCisg IFVzYlJuZGlzRGV2aWNlID0gVVNCX1JORElTX0RFVklDRV9GUk9NX1RISVMgKFVzYkV0aERldmlj ZSk7DQorDQorICBEYiA9IChQWEVfREJfR0VUX0lOSVRfSU5GTyAqKShVSU5UTilDZGItPkRCYWRk cjsNCisNCisgIERiLT5GcmFtZURhdGFMZW4gPSBVc2JSbmRpc0RldmljZS0+TWF4VHJhbnNmZXJT aXplIC0gc2l6ZW9mIChSRU1PVEVfTkRJU19QQUNLRVRfTVNHKSAtIFBYRV9NQUNfSEVBREVSX0xF Tl9FVEhFUjsNCisgIC8vIExpbWl0IE1heCBNVFUgc2l6ZSB0byAxNTAwIGJ5dGVzIGFzIFJORElT IHNwZWMuDQorICBpZiAoRGItPkZyYW1lRGF0YUxlbiA+IFBYRV9NQVhfVFhSWF9VTklUX0VUSEVS KSB7DQorICAgIERiLT5GcmFtZURhdGFMZW4gPSBQWEVfTUFYX1RYUlhfVU5JVF9FVEhFUjsNCisg IH0NCisNCisgIERFQlVHICgoREVCVUdfSU5GTywgIkRiLT5GcmFtZURhdGFMZW4gJXhcbiIsIERi LT5GcmFtZURhdGFMZW4pKTsNCisNCisgIHJldHVybiBFRklfU1VDQ0VTUzsNCit9DQorDQorLyoq DQorICBUaGlzIGZ1bmN0aW9uIGlzIGNhbGxlZCB3aGVuIFJuZGlzVW5kaUdldENvbmZpZ0luZm8g aXMgaW52b2tlZC4NCisNCisgIEBwYXJhbVtpbl0gIENkYiAgQSBwb2ludGVyIHRvIHRoZSBjb21t YW5kIGRlc2NyaXB0b3IgYmxvY2suDQorICBAcGFyYW1baW5dICBOaWMgIEEgcG9pbnRlciB0byB0 aGUgTmV0d29yayBpbnRlcmZhY2UgY29udHJvbGxlciBkYXRhLg0KKw0KKyAgQHJldHZhbCBFRklf U1VDQ0VTUyAgICAgVGhlIHJlcXVlc3QgZXhlY3V0ZWQgc3VjY2Vzc2Z1bGx5Lg0KKw0KKyoqLw0K K0VGSV9TVEFUVVMNCitFRklBUEkNCitSbmRpc1VuZGlHZXRDb25maWdJbmZvICgNCisgIElOICBQ WEVfQ0RCICAgKkNkYiwNCisgIElOICBOSUNfREFUQSAgKk5pYw0KKyAgKQ0KK3sNCisgIERFQlVH ICgoREVCVUdfSU5GTywgIlJuZGlzVW5kaUdldENvbmZpZ0luZm9cbiIpKTsNCisgIHJldHVybiBF RklfU1VDQ0VTUzsNCit9DQorDQorLyoqDQorICBUaGlzIGZ1bmN0aW9uIGlzIGNhbGxlZCB3aGVu IFVuZGlJbml0aWFsaXplIGlzIGludm9rZWQuDQorDQorICBAcGFyYW1baW5dICBDZGIgIEEgcG9p bnRlciB0byB0aGUgY29tbWFuZCBkZXNjcmlwdG9yIGJsb2NrLg0KKyAgQHBhcmFtW2luXSAgTmlj ICBBIHBvaW50ZXIgdG8gdGhlIE5ldHdvcmsgaW50ZXJmYWNlIGNvbnRyb2xsZXIgZGF0YS4NCisN CisgIEByZXR2YWwgRUZJX1NVQ0NFU1MgICAgICAgICAgIFRoZSByZXF1ZXN0IGV4ZWN1dGVkIHN1 Y2Nlc3NmdWxseS4NCisgIEByZXR2YWwgRUZJX1VOU1VQUE9SVEVEICAgICAgIE5vdCBzdXBwb3J0 ZWQuDQorDQorKiovDQorRUZJX1NUQVRVUw0KK0VGSUFQSQ0KK1JuZGlzVW5kaUluaXRpYWxpemUg KA0KKyAgSU4gIFBYRV9DREIgICAqQ2RiLA0KKyAgSU4gIE5JQ19EQVRBICAqTmljDQorICApDQor ew0KKyAgRURLSUlfVVNCX0VUSEVSTkVUX1BST1RPQ09MICAgKlVzYkV0aERyaXZlcjsNCisgIFVT Ql9STkRJU19ERVZJQ0UgICAgICAgICAgICAgICpVc2JSbmRpc0RldmljZTsNCisgIFJFTU9URV9O RElTX0lOSVRJQUxJWkVfTVNHICAgIFJuZGlzSW5pdE1zZzsNCisgIFJFTU9URV9ORElTX0lOSVRJ QUxJWkVfQ01QTFQgIFJuZGlzSW5pdE1zZ0NtcGx0Ow0KKyAgRUZJX1NUQVRVUyAgICAgICAgICAg ICAgICAgICAgU3RhdHVzOw0KKw0KKyAgREVCVUcgKChERUJVR19JTkZPLCAiUm5kaXNVbmRpSW5p dGlhbGl6ZVxuIikpOw0KKw0KKyAgVXNiRXRoRHJpdmVyICAgPSBOaWMtPlVzYkV0aDsNCisgIFVz YlJuZGlzRGV2aWNlID0gVVNCX1JORElTX0RFVklDRV9GUk9NX1RISVMgKFVzYkV0aERyaXZlcik7 DQorDQorICBaZXJvTWVtICgmUm5kaXNJbml0TXNnLCBzaXplb2YgKFJFTU9URV9ORElTX0lOSVRJ QUxJWkVfTVNHKSk7DQorICBaZXJvTWVtICgmUm5kaXNJbml0TXNnQ21wbHQsIHNpemVvZiAoUkVN T1RFX05ESVNfSU5JVElBTElaRV9DTVBMVCkpOw0KKw0KKyAgUm5kaXNJbml0TXNnLk1lc3NhZ2VU eXBlICAgICA9IFJORElTX0lOSVRJQUxJWkVfTVNHOw0KKyAgUm5kaXNJbml0TXNnLk1lc3NhZ2VM ZW5ndGggICA9IHNpemVvZiAoUkVNT1RFX05ESVNfSU5JVElBTElaRV9NU0cpOw0KKyAgUm5kaXNJ bml0TXNnLlJlcXVlc3RJRCAgICAgICA9IFVzYlJuZGlzRGV2aWNlLT5SZXF1ZXN0SWQ7DQorICBS bmRpc0luaXRNc2cuTWFqb3JWZXJzaW9uICAgID0gUk5ESVNfTUFKT1JfVkVSU0lPTjsNCisgIFJu ZGlzSW5pdE1zZy5NaW5vclZlcnNpb24gICAgPSBSTkRJU19NSU5PUl9WRVJTSU9OOw0KKyAgUm5k aXNJbml0TXNnLk1heFRyYW5zZmVyU2l6ZSA9IFJORElTX01BWF9UUkFOU0ZFUl9TSVpFOw0KKw0K KyAgUm5kaXNJbml0TXNnQ21wbHQuTWVzc2FnZVR5cGUgICA9IFJORElTX0lOSVRJQUxJWkVfQ01Q TFQ7DQorICBSbmRpc0luaXRNc2dDbXBsdC5NZXNzYWdlTGVuZ3RoID0gc2l6ZW9mIChSRU1PVEVf TkRJU19JTklUSUFMSVpFX0NNUExUKTsNCisNCisgIFN0YXR1cyA9IFJuZGlzQ29udHJvbE1zZyAo VXNiUm5kaXNEZXZpY2UsIChSRU1PVEVfTkRJU19NU0dfSEVBREVSICopJlJuZGlzSW5pdE1zZywg KFJFTU9URV9ORElTX01TR19IRUFERVIgKikmUm5kaXNJbml0TXNnQ21wbHQpOw0KKw0KKyAgVXNi Um5kaXNEZXZpY2UtPlJlcXVlc3RJZCsrOw0KKw0KKyAgaWYgKEVGSV9FUlJPUiAoU3RhdHVzKSB8 fCAoUm5kaXNJbml0TXNnQ21wbHQuU3RhdHVzICYgMHg4MDAwMDAwMCkpIHsNCisgICAgcmV0dXJu IFN0YXR1czsNCisgIH0NCisNCisgIC8vIE9ubHkgV2lyZWQgTWVkaXVtIGlzIHN1cHBvcnRlZA0K KyAgaWYgKFJuZGlzSW5pdE1zZ0NtcGx0Lk1lZGl1bSkgew0KKyAgICByZXR1cm4gRUZJX1VOU1VQ UE9SVEVEOw0KKyAgfQ0KKw0KKyAgVXNiUm5kaXNEZXZpY2UtPk1lZGl1bSAgICAgICAgICAgICAg ICA9IFJuZGlzSW5pdE1zZ0NtcGx0Lk1lZGl1bTsNCisgIFVzYlJuZGlzRGV2aWNlLT5NYXhQYWNr ZXRzUGVyVHJhbnNmZXIgPSBSbmRpc0luaXRNc2dDbXBsdC5NYXhQYWNrZXRzUGVyVHJhbnNmZXI7 DQorICBVc2JSbmRpc0RldmljZS0+TWF4VHJhbnNmZXJTaXplICAgICAgID0gUm5kaXNJbml0TXNn Q21wbHQuTWF4VHJhbnNmZXJTaXplOw0KKyAgVXNiUm5kaXNEZXZpY2UtPlBhY2tldEFsaWdubWVu dEZhY3RvciA9IFJuZGlzSW5pdE1zZ0NtcGx0LlBhY2tldEFsaWdubWVudEZhY3RvcjsNCisNCisg IERFQlVHICgoREVCVUdfSU5GTywgIk1lZGl1bSA6ICV4IFxuIiwgUm5kaXNJbml0TXNnQ21wbHQu TWVkaXVtKSk7DQorICBERUJVRyAoKERFQlVHX0lORk8sICJNYXhQYWNrZXRzUGVyVHJhbnNmZXIg OiAleCBcbiIsIFJuZGlzSW5pdE1zZ0NtcGx0Lk1heFBhY2tldHNQZXJUcmFuc2ZlcikpOw0KKyAg REVCVUcgKChERUJVR19JTkZPLCAiTWF4VHJhbnNmZXJTaXplIDogJXhcbiIsIFJuZGlzSW5pdE1z Z0NtcGx0Lk1heFRyYW5zZmVyU2l6ZSkpOw0KKyAgREVCVUcgKChERUJVR19JTkZPLCAiUGFja2V0 QWxpZ25tZW50RmFjdG9yIDogJXhcbiIsIFJuZGlzSW5pdE1zZ0NtcGx0LlBhY2tldEFsaWdubWVu dEZhY3RvcikpOw0KKw0KKyAgcmV0dXJuIFN0YXR1czsNCit9DQorDQorLyoqDQorICBUaGlzIGZ1 bmN0aW9uIGlzIGNhbGxlZCB3aGVuIFVuZGlSZXNldCBpcyBpbnZva2VkLg0KKw0KKyAgQHBhcmFt W2luXSAgQ2RiICBBIHBvaW50ZXIgdG8gdGhlIGNvbW1hbmQgZGVzY3JpcHRvciBibG9jay4NCisg IEBwYXJhbVtpbl0gIE5pYyAgQSBwb2ludGVyIHRvIHRoZSBOZXR3b3JrIGludGVyZmFjZSBjb250 cm9sbGVyIGRhdGEuDQorDQorICBAcmV0dmFsIEVGSV9TVUNDRVNTICAgICAgICAgICBUaGUgcmVx dWVzdCBleGVjdXRlZCBzdWNjZXNzZnVsbHkuDQorICBAcmV0dmFsIEVGSV9ERVZJQ0VfRVJST1Ig ICAgICBUaGUgcmVxdWVzdCBmYWlsZWQgZHVlIHRvIGEgZGV2aWNlIGVycm9yLg0KKw0KKyoqLw0K K0VGSV9TVEFUVVMNCitFRklBUEkNCitSbmRpc1VuZGlSZXNldCAoDQorICBJTiAgUFhFX0NEQiAg ICpDZGIsDQorICBJTiAgTklDX0RBVEEgICpOaWMNCisgICkNCit7DQorICBFREtJSV9VU0JfRVRI RVJORVRfUFJPVE9DT0wgICpVc2JFdGhEcml2ZXI7DQorICBVU0JfUk5ESVNfREVWSUNFICAgICAg ICAgICAgICpVc2JSbmRpc0RldmljZTsNCisgIFJFTU9URV9ORElTX1JFU0VUX01TRyAgICAgICAg Um5kaXNSZXNldE1zZzsNCisgIFJFTU9URV9ORElTX1JFU0VUX0NNUExUICAgICAgUm5kaXNSZXNl dENtcGx0Ow0KKyAgRUZJX1NUQVRVUyAgICAgICAgICAgICAgICAgICBTdGF0dXM7DQorDQorICBE RUJVRyAoKERFQlVHX0lORk8sICJSbmRpc1VuZGlSZXNldFxuIikpOw0KKw0KKyAgVXNiRXRoRHJp dmVyICAgPSBOaWMtPlVzYkV0aDsNCisgIFVzYlJuZGlzRGV2aWNlID0gVVNCX1JORElTX0RFVklD RV9GUk9NX1RISVMgKFVzYkV0aERyaXZlcik7DQorDQorICBaZXJvTWVtICgmUm5kaXNSZXNldE1z Zywgc2l6ZW9mIChSRU1PVEVfTkRJU19SRVNFVF9NU0cpKTsNCisgIFplcm9NZW0gKCZSbmRpc1Jl c2V0Q21wbHQsIHNpemVvZiAoUkVNT1RFX05ESVNfUkVTRVRfQ01QTFQpKTsNCisNCisgIFJuZGlz UmVzZXRNc2cuTWVzc2FnZVR5cGUgICA9IFJORElTX1JFU0VUX01TRzsNCisgIFJuZGlzUmVzZXRN c2cuTWVzc2FnZUxlbmd0aCA9IHNpemVvZiAoUkVNT1RFX05ESVNfUkVTRVRfTVNHKTsNCisNCisg IFJuZGlzUmVzZXRDbXBsdC5NZXNzYWdlVHlwZSAgID0gUk5ESVNfUkVTRVRfQ01QTFQ7DQorICBS bmRpc1Jlc2V0Q21wbHQuTWVzc2FnZUxlbmd0aCA9IHNpemVvZiAoUkVNT1RFX05ESVNfUkVTRVRf Q01QTFQpOw0KKw0KKyAgU3RhdHVzID0gUm5kaXNDb250cm9sTXNnIChVc2JSbmRpc0RldmljZSwg KFJFTU9URV9ORElTX01TR19IRUFERVIgKikmUm5kaXNSZXNldE1zZywgKFJFTU9URV9ORElTX01T R19IRUFERVIgKikmUm5kaXNSZXNldENtcGx0KTsNCisNCisgIFVzYlJuZGlzRGV2aWNlLT5SZXF1 ZXN0SWQgPSAxOyAgICAgICAgICAvLyBMZXQncyBzdGFydCB3aXRoIDENCisNCisgIGlmIChFRklf RVJST1IgKFN0YXR1cykgfHwgKFJuZGlzUmVzZXRDbXBsdC5TdGF0dXMgJiAweDgwMDAwMDAwKSkg ew0KKyAgICByZXR1cm4gRUZJX0RFVklDRV9FUlJPUjsNCisgIH0NCisNCisgIHJldHVybiBFRklf U1VDQ0VTUzsNCit9DQorDQorLyoqDQorICBUaGlzIGZ1bmN0aW9uIGlzIGNhbGxlZCB3aGVuIFVu ZGlTaHV0ZG93biBpcyBpbnZva2VkLg0KKw0KKyAgQHBhcmFtW2luXSAgQ2RiICBBIHBvaW50ZXIg dG8gdGhlIGNvbW1hbmQgZGVzY3JpcHRvciBibG9jay4NCisgIEBwYXJhbVtpbl0gIE5pYyAgQSBw b2ludGVyIHRvIHRoZSBOZXR3b3JrIGludGVyZmFjZSBjb250cm9sbGVyIGRhdGEuDQorDQorICBA cmV0dmFsIEVGSV9TVUNDRVNTICAgICBUaGUgcmVxdWVzdCBleGVjdXRlZCBzdWNjZXNzZnVsbHku DQorDQorKiovDQorRUZJX1NUQVRVUw0KK0VGSUFQSQ0KK1JuZGlzVW5kaVNodXRkb3duICgNCisg IElOICBQWEVfQ0RCICAgKkNkYiwNCisgIElOICBOSUNfREFUQSAgKk5pYw0KKyAgKQ0KK3sNCisg IEVES0lJX1VTQl9FVEhFUk5FVF9QUk9UT0NPTCAgKlVzYkV0aERyaXZlcjsNCisgIFVTQl9STkRJ U19ERVZJQ0UgICAgICAgICAgICAgKlVzYlJuZGlzRGV2aWNlOw0KKyAgUkVNT1RFX05ESVNfSEFM VF9NU0cgICAgICAgICBSbmRpc0hsdE1zZzsNCisgIEVGSV9TVEFUVVMgICAgICAgICAgICAgICAg ICAgU3RhdHVzOw0KKw0KKyAgREVCVUcgKChERUJVR19JTkZPLCAiUm5kaXNVbmRpU2h1dGRvd25c biIpKTsNCisNCisgIFVzYkV0aERyaXZlciAgID0gTmljLT5Vc2JFdGg7DQorICBVc2JSbmRpc0Rl dmljZSA9IFVTQl9STkRJU19ERVZJQ0VfRlJPTV9USElTIChVc2JFdGhEcml2ZXIpOw0KKw0KKyAg WmVyb01lbSAoJlJuZGlzSGx0TXNnLCBzaXplb2YgKFJFTU9URV9ORElTX0hBTFRfTVNHKSk7DQor DQorICBSbmRpc0hsdE1zZy5NZXNzYWdlVHlwZSAgID0gUk5ESVNfSExUX01TRzsNCisgIFJuZGlz SGx0TXNnLk1lc3NhZ2VMZW5ndGggPSBzaXplb2YgKFJFTU9URV9ORElTX0hBTFRfTVNHKTsNCisN CisgIFN0YXR1cyA9IFJuZGlzQ29udHJvbE1zZyAoVXNiUm5kaXNEZXZpY2UsIChSRU1PVEVfTkRJ U19NU0dfSEVBREVSICopJlJuZGlzSGx0TXNnLCBOVUxMKTsNCisNCisgIGlmIChTdGF0dXMgPT0g RUZJX0RFVklDRV9FUlJPUikgew0KKyAgICBTdGF0dXMgPSBFRklfU1VDQ0VTUzsNCisgIH0NCisN CisgIFVzYlJuZGlzRGV2aWNlLT5SZXF1ZXN0SWQgPSAxOw0KKyAgcmV0dXJuIFN0YXR1czsNCit9 DQorDQorLyoqDQorICBVcGRhdGUgdGhlIE1lZGlhIGNvbm5lY3Rpb24uDQorDQorICBAcGFyYW1b aW5dICBDZGIgIEEgcG9pbnRlciB0byB0aGUgY29tbWFuZCBkZXNjcmlwdG9yIGJsb2NrLg0KKyAg QHBhcmFtW2luXSAgTmljICBBIHBvaW50ZXIgdG8gdGhlIE5ldHdvcmsgaW50ZXJmYWNlIGNvbnRy b2xsZXIgZGF0YS4NCisNCisgIEByZXR2YWwgRUZJX1NVQ0NFU1MgICAgIFRoZSByZXF1ZXN0IGV4 ZWN1dGVkIHN1Y2Nlc3NmdWxseS4NCisNCisqKi8NCitFRklfU1RBVFVTDQorRUZJQVBJDQorUm5k aXNVbmRpR2V0U3RhdHVzICgNCisgIElOICBQWEVfQ0RCICAgKkNkYiwNCisgIElOICBOSUNfREFU QSAgKk5pYw0KKyAgKQ0KK3sNCisgIENkYi0+U3RhdEZsYWdzICY9IH4oUFhFX1NUQVRGTEFHU19H RVRfU1RBVFVTX05PX01FRElBKTsNCisgIHJldHVybiBFRklfU1VDQ0VTUzsNCit9DQorDQorLyoq DQorICBUcmFuc21pdCB0aGUgZGF0YSBhZnRlciBhcHBlbmRpbmcgUk5ESVMgaGVhZGVyLg0KKw0K KyAgQHBhcmFtW2luXSAgICAgIENkYiAgICAgICAgICAgQSBwb2ludGVyIHRvIHRoZSBjb21tYW5k IGRlc2NyaXB0b3IgYmxvY2suDQorICBAcGFyYW1baW5dICAgICAgVGhpcyAgICAgICAgICBBIHBv aW50ZXIgdG8gdGhlIEVES0lJX1VTQl9FVEhFUk5FVF9QUk9UT0NPTCBpbnN0YW5jZS4NCisgIEBw YXJhbVtpbl0gICAgICBCdWxrT3V0RGF0YSAgIEEgcG9pbnRlciB0byB0aGUgYnVmZmVyIG9mIGRh dGEgdGhhdCB3aWxsIGJlIHRyYW5zbWl0dGVkIHRvIFVTQg0KKyAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgZGV2aWNlIG9yIHJlY2VpdmVkIGZyb20gVVNCIGRldmljZS4NCisgIEBwYXJh bVtpbiwgb3V0XSBEYXRhTGVuZ3RoICAgIEEgcG9pbnRlciB0byB0aGUgUGFja2V0TGVuZ3RoLg0K Kw0KKyAgQHJldHZhbCBFRklfU1VDQ0VTUyAgICAgVGhlIHJlcXVlc3QgZXhlY3V0ZWQgc3VjY2Vz c2Z1bGx5Lg0KKw0KKyoqLw0KK0VGSV9TVEFUVVMNCitFRklBUEkNCitSbmRpc1VuZGlUcmFuc21p dCAoDQorICBJTiAgICAgIFBYRV9DREIgICAgICAgICAgICAgICAgICAgICAgKkNkYiwNCisgIElO ICAgICAgRURLSUlfVVNCX0VUSEVSTkVUX1BST1RPQ09MICAqVGhpcywNCisgIElOICAgICAgVk9J RCAgICAgICAgICAgICAgICAgICAgICAgICAqQnVsa091dERhdGEsDQorICBJTiBPVVQgIFVJTlRO ICAgICAgICAgICAgICAgICAgICAgICAgKkRhdGFMZW5ndGgNCisgICkNCit7DQorICBFRklfU1RB VFVTICAgICAgICAgICAgICBTdGF0dXM7DQorICBVU0JfUk5ESVNfREVWSUNFICAgICAgICAqVXNi Um5kaXNEZXZpY2U7DQorICBSRU1PVEVfTkRJU19QQUNLRVRfTVNHICAqUm5kaXNQYWNrZXRNc2c7 DQorICBVSU5UTiAgICAgICAgICAgICAgICAgICBUcmFuc2Zlckxlbmd0aDsNCisNCisgIERFQlVH ICgoREVCVUdfSU5GTywgIlJuZGlzVW5kaVRyYW5zbWl0IERhdGFMZW5ndGggOiAleFxuIiwgKkRh dGFMZW5ndGgpKTsNCisNCisgIFVzYlJuZGlzRGV2aWNlID0gVVNCX1JORElTX0RFVklDRV9GUk9N X1RISVMgKFRoaXMpOw0KKw0KKyAgUm5kaXNQYWNrZXRNc2cgPSBBbGxvY2F0ZVplcm9Qb29sIChz aXplb2YgKFJFTU9URV9ORElTX1BBQ0tFVF9NU0cpICsgKkRhdGFMZW5ndGgpOw0KKyAgaWYgKFJu ZGlzUGFja2V0TXNnID09IE5VTEwpIHsNCisgICAgcmV0dXJuIEVGSV9PVVRfT0ZfUkVTT1VSQ0VT Ow0KKyAgfQ0KKw0KKyAgUm5kaXNQYWNrZXRNc2ctPk1lc3NhZ2VUeXBlICAgPSBSTkRJU19QQUNL RVRfTVNHOw0KKyAgUm5kaXNQYWNrZXRNc2ctPk1lc3NhZ2VMZW5ndGggPSBzaXplb2YgKFJFTU9U RV9ORElTX1BBQ0tFVF9NU0cpICsgKFVJTlQzMikqRGF0YUxlbmd0aDsNCisgIFJuZGlzUGFja2V0 TXNnLT5EYXRhT2Zmc2V0ICAgID0gc2l6ZW9mIChSRU1PVEVfTkRJU19QQUNLRVRfTVNHKSAtIDg7 DQorICBSbmRpc1BhY2tldE1zZy0+RGF0YUxlbmd0aCAgICA9IChVSU5UMzIpKkRhdGFMZW5ndGg7 DQorDQorICBDb3B5TWVtICgNCisgICAgKChVSU5UOCAqKVJuZGlzUGFja2V0TXNnKSArIHNpemVv ZiAoUkVNT1RFX05ESVNfUEFDS0VUX01TRyksDQorICAgIEJ1bGtPdXREYXRhLA0KKyAgICAqRGF0 YUxlbmd0aA0KKyAgICApOw0KKw0KKyAgVHJhbnNmZXJMZW5ndGggPSBSbmRpc1BhY2tldE1zZy0+ TWVzc2FnZUxlbmd0aDsNCisNCisgIFN0YXR1cyA9IFJuZGlzVHJhbnNtaXREYXRhTXNnICgNCisg ICAgICAgICAgICAgVXNiUm5kaXNEZXZpY2UsDQorICAgICAgICAgICAgIChSRU1PVEVfTkRJU19N U0dfSEVBREVSICopUm5kaXNQYWNrZXRNc2csDQorICAgICAgICAgICAgICZUcmFuc2Zlckxlbmd0 aA0KKyAgICAgICAgICAgICApOw0KKw0KKyAgREVCVUcgKChERUJVR19JTkZPLCAiXG5SbmRpc1Vu ZGlUcmFuc21pdCBUcmFuc2Zlckxlbmd0aCAlbHhcbiIsIFRyYW5zZmVyTGVuZ3RoKSk7DQorDQor ICBGcmVlUG9vbCAoUm5kaXNQYWNrZXRNc2cpOw0KKw0KKyAgcmV0dXJuIFN0YXR1czsNCit9DQor DQorLyoqDQorICBSZWNlaXZlcyBhbmQgcmVtb3ZlcyBSTkRJUyBoZWFkZXIgYW5kIHJldHVybnMg dGhlIHJhdyBkYXRhLg0KKw0KKyAgQHBhcmFtW2luXSAgICAgIENkYiAgICAgICAgICAgQSBwb2lu dGVyIHRvIHRoZSBjb21tYW5kIGRlc2NyaXB0b3IgYmxvY2suDQorICBAcGFyYW1baW5dICAgICAg VGhpcyAgICAgICAgICBBIHBvaW50ZXIgdG8gdGhlIEVES0lJX1VTQl9FVEhFUk5FVF9QUk9UT0NP TCBpbnN0YW5jZS4NCisgIEBwYXJhbVtpbiwgb3V0XSBCdWxrSW5EYXRhICAgIEEgcG9pbnRlciB0 byB0aGUgYnVmZmVyIG9mIGRhdGEgdGhhdCB3aWxsIGJlIHRyYW5zbWl0dGVkIHRvIFVTQg0KKyAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGV2aWNlIG9yIHJlY2VpdmVkIGZyb20gVVNC IGRldmljZS4NCisgIEBwYXJhbVtpbiwgb3V0XSBEYXRhTGVuZ3RoICAgIEEgcG9pbnRlciB0byB0 aGUgUGFja2V0TGVuZ3RoLg0KKw0KKyAgQHJldHZhbCBFRklfU1VDQ0VTUyAgICAgICAgICAgVGhl IHJlcXVlc3QgZXhlY3V0ZWQgc3VjY2Vzc2Z1bGx5Lg0KKyAgQHJldHZhbCBFRklfQlVGRkVSX1RP T19TTUFMTCAgVGhlIHVzZXIgcHJvdmlkZWQgYnVmZmVyIGlzIHRvbyBzbWFsbA0KKyAgQHJldHZh bCBFRklfTk9UX0ZPVU5EICAgICAgICAgTm8gYnVmZmVyIHdhcyBmb3VuZCBpbiB0aGUgbGlzdC4N CisNCisqKi8NCitFRklfU1RBVFVTDQorRUZJQVBJDQorUm5kaXNVbmRpUmVjZWl2ZSAoDQorICBJ TiAgICAgUFhFX0NEQiAgICAgICAgICAgICAgICAgICAgICAqQ2RiLA0KKyAgSU4gICAgIEVES0lJ X1VTQl9FVEhFUk5FVF9QUk9UT0NPTCAgKlRoaXMsDQorICBJTiBPVVQgVk9JRCAgICAgICAgICAg ICAgICAgICAgICAgICAqQnVsa0luRGF0YSwNCisgIElOIE9VVCBVSU5UTiAgICAgICAgICAgICAg ICAgICAgICAgICpEYXRhTGVuZ3RoDQorICApDQorew0KKyAgRUZJX1NUQVRVUyAgICAgICAgICAg ICAgU3RhdHVzOw0KKyAgVVNCX1JORElTX0RFVklDRSAgICAgICAgKlVzYlJuZGlzRGV2aWNlOw0K KyAgUkVNT1RFX05ESVNfUEFDS0VUX01TRyAgKlJuZGlzUGFja2V0TXNnOw0KKyAgVUlOVE4gICAg ICAgICAgICAgICAgICAgVHJhbnNmZXJMZW5ndGg7DQorICBWT0lEICAgICAgICAgICAgICAgICAg ICAqQnVmZmVyOw0KKyAgUEFDS0VUX0xJU1QgICAgICAgICAgICAgKkhlYWRQYWNrZXQ7DQorICBQ QUNLRVRfTElTVCAgICAgICAgICAgICAqUGFja2V0TGlzdDsNCisNCisgIC8vIENoZWNrIGlmIHRo ZXJlIGlzIGFueSBvdXRzdGFuZGluZyBwYWNrZXQgdG8gcmVjZWl2ZQ0KKyAgLy8gVGhlIGJ1ZmZl ciBhbGxvY2F0ZWQgaGFzIGEgbGlua2VkIExpc3QgZm9sbG93ZWQgYnkgdGhlIHBhY2tldC4NCisN CisgIFVzYlJuZGlzRGV2aWNlID0gVVNCX1JORElTX0RFVklDRV9GUk9NX1RISVMgKFRoaXMpOw0K KyAgQnVmZmVyICAgICAgICAgPSBOVUxMOw0KKyAgSGVhZFBhY2tldCAgICAgPSBOVUxMOw0KKw0K KyAgd2hpbGUgKDEpIHsNCisgICAgQnVmZmVyID0gQWxsb2NhdGVaZXJvUG9vbCAoc2l6ZW9mIChQ QUNLRVRfTElTVCkgKyBzaXplb2YgKFJFTU9URV9ORElTX1BBQ0tFVF9NU0cpICsgVXNiUm5kaXNE ZXZpY2UtPk1heFRyYW5zZmVyU2l6ZSk7DQorICAgIGlmIChCdWZmZXIgPT0gTlVMTCkgew0KKyAg ICAgIHJldHVybiBFRklfT1VUX09GX1JFU09VUkNFUzsNCisgICAgfQ0KKw0KKyAgICBSbmRpc1Bh Y2tldE1zZyAgICAgICAgICAgICAgICA9IChSRU1PVEVfTkRJU19QQUNLRVRfTVNHICopKHNpemVv ZiAoUEFDS0VUX0xJU1QpICsgKFVJTlQ4ICopQnVmZmVyKTsNCisgICAgUGFja2V0TGlzdCAgICAg ICAgICAgICAgICAgICAgPSAoUEFDS0VUX0xJU1QgKilCdWZmZXI7DQorICAgIFBhY2tldExpc3Qt PlBhY2tldFN0YXJ0QnVmZmVyID0gKFVJTlQ4ICopQnVmZmVyICsgc2l6ZW9mIChQQUNLRVRfTElT VCk7DQorICAgIC8vIFNhdmUgdGhlIG9yaWdpbmFsIGFkZHJlc3MgZm9yIGZyZWVpbmcgaXQgdXAN CisgICAgUGFja2V0TGlzdC0+T3JnQnVmZmVyID0gKFVJTlQ4ICopQnVmZmVyOw0KKyAgICBUcmFu c2Zlckxlbmd0aCAgICAgICAgPSBVc2JSbmRpc0RldmljZS0+TWF4VHJhbnNmZXJTaXplOw0KKw0K KyAgICBTdGF0dXMgPSBSbmRpc1JlY2VpdmVEYXRhTXNnICgNCisgICAgICAgICAgICAgICBVc2JS bmRpc0RldmljZSwNCisgICAgICAgICAgICAgICAoUkVNT1RFX05ESVNfTVNHX0hFQURFUiAqKVJu ZGlzUGFja2V0TXNnLA0KKyAgICAgICAgICAgICAgICZUcmFuc2Zlckxlbmd0aA0KKyAgICAgICAg ICAgICAgICk7DQorDQorICAgIGlmIChFRklfRVJST1IgKFN0YXR1cykgfHwgKFRyYW5zZmVyTGVu Z3RoID09IDApKSB7DQorICAgICAgRnJlZVBvb2wgKEJ1ZmZlcik7DQorICAgICAgYnJlYWs7DQor ICAgIH0NCisNCisgICAgLy8gQ29sbGVjdCBhbGwgdGhlIFJORElTIHBhY2tldCBpbiBMaW5rZWQg bGlzdC4NCisgICAgaWYgKChSbmRpc1BhY2tldE1zZy0+TWVzc2FnZVR5cGUgPT0gUk5ESVNfUEFD S0VUX01TRykgJiYNCisgICAgICAgIChSbmRpc1BhY2tldE1zZy0+RGF0YU9mZnNldCA9PSBzaXpl b2YgKFJFTU9URV9ORElTX1BBQ0tFVF9NU0cpIC0gUk5ESVNfUkVTRVJWRURfQllURV9MRU5HVEgp ICYmDQorICAgICAgICAoVHJhbnNmZXJMZW5ndGggPj0gUm5kaXNQYWNrZXRNc2ctPk1lc3NhZ2VM ZW5ndGgpKQ0KKyAgICB7DQorICAgICAgLy8gSW5zZXJ0IFBhY2tldA0KKyAgICAgIFBhY2tldExp c3QtPlJlbWFpbmluZ0xlbmd0aCA9IFRyYW5zZmVyTGVuZ3RoOw0KKyAgICAgIEluc2VydFRhaWxM aXN0ICgmVXNiUm5kaXNEZXZpY2UtPlJlY2VpdmVQYWNrZXRMaXN0LCBCdWZmZXIpOw0KKyAgICB9 IGVsc2Ugew0KKyAgICAgIEZyZWVQb29sIChCdWZmZXIpOw0KKyAgICB9DQorICB9DQorDQorICB3 aGlsZSAoIUlzTGlzdEVtcHR5ICgmVXNiUm5kaXNEZXZpY2UtPlJlY2VpdmVQYWNrZXRMaXN0KSkg ew0KKyAgICBIZWFkUGFja2V0ID0gKFBBQ0tFVF9MSVNUICopR2V0Rmlyc3ROb2RlICgmVXNiUm5k aXNEZXZpY2UtPlJlY2VpdmVQYWNrZXRMaXN0KTsNCisNCisgICAgUm5kaXNQYWNrZXRNc2cgPSAo UkVNT1RFX05ESVNfUEFDS0VUX01TRyAqKShVSU5UOCAqKUhlYWRQYWNrZXQtPlBhY2tldFN0YXJ0 QnVmZmVyOw0KKw0KKyAgICBQcmludFJuZGlzTXNnICgoUkVNT1RFX05ESVNfTVNHX0hFQURFUiAq KVJuZGlzUGFja2V0TXNnKTsNCisNCisgICAgLy8gQ2hlY2sgd2hldGhlciB0aGUgcGFja2V0IGlz IHZhbGlkIFJORElTIHBhY2tldC4NCisgICAgaWYgKChIZWFkUGFja2V0LT5SZW1haW5pbmdMZW5n dGggPiBzaXplb2YgKFJFTU9URV9ORElTX1BBQ0tFVF9NU0cpKSAmJiAoUm5kaXNQYWNrZXRNc2ct Pk1lc3NhZ2VUeXBlID09IFJORElTX1BBQ0tFVF9NU0cpICYmDQorICAgICAgICAoUm5kaXNQYWNr ZXRNc2ctPkRhdGFPZmZzZXQgPT0gKHNpemVvZiAoUkVNT1RFX05ESVNfUEFDS0VUX01TRykgLSBS TkRJU19SRVNFUlZFRF9CWVRFX0xFTkdUSCkpICYmDQorICAgICAgICAoSGVhZFBhY2tldC0+UmVt YWluaW5nTGVuZ3RoID49IFJuZGlzUGFja2V0TXNnLT5NZXNzYWdlTGVuZ3RoKSkNCisgICAgew0K KyAgICAgIGlmICgqRGF0YUxlbmd0aCA+PSBSbmRpc1BhY2tldE1zZy0+RGF0YUxlbmd0aCkgew0K KyAgICAgICAgQ29weU1lbSAoDQorICAgICAgICAgIEJ1bGtJbkRhdGEsDQorICAgICAgICAgIChV SU5UOCAqKVJuZGlzUGFja2V0TXNnICsgKFJuZGlzUGFja2V0TXNnLT5EYXRhT2Zmc2V0ICsgUk5E SVNfUkVTRVJWRURfQllURV9MRU5HVEgpLA0KKyAgICAgICAgICBSbmRpc1BhY2tldE1zZy0+RGF0 YUxlbmd0aA0KKyAgICAgICAgICApOw0KKw0KKyAgICAgICAgKkRhdGFMZW5ndGggPSAgUm5kaXNQ YWNrZXRNc2ctPkRhdGFMZW5ndGg7DQorDQorICAgICAgICBIZWFkUGFja2V0LT5SZW1haW5pbmdM ZW5ndGggICA9IEhlYWRQYWNrZXQtPlJlbWFpbmluZ0xlbmd0aCAtIFJuZGlzUGFja2V0TXNnLT5N ZXNzYWdlTGVuZ3RoOw0KKyAgICAgICAgSGVhZFBhY2tldC0+UGFja2V0U3RhcnRCdWZmZXIgPSAo VUlOVDggKilSbmRpc1BhY2tldE1zZyArIFJuZGlzUGFja2V0TXNnLT5NZXNzYWdlTGVuZ3RoOw0K Kw0KKyAgICAgICAgcmV0dXJuIEVGSV9TVUNDRVNTOw0KKyAgICAgIH0gZWxzZSB7DQorICAgICAg ICAqRGF0YUxlbmd0aCA9IFJuZGlzUGFja2V0TXNnLT5EYXRhTGVuZ3RoOw0KKyAgICAgICAgcmV0 dXJuIEVGSV9CVUZGRVJfVE9PX1NNQUxMOw0KKyAgICAgIH0NCisgICAgfQ0KKw0KKyAgICBSZW1v dmVFbnRyeUxpc3QgKCZIZWFkUGFja2V0LT5QYWNrZXRMaXN0KTsNCisgICAgRnJlZVBvb2wgKChQ QUNLRVRfTElTVCAqKUhlYWRQYWNrZXQtPk9yZ0J1ZmZlcik7DQorICB9DQorDQorICByZXR1cm4g RUZJX05PVF9GT1VORDsNCit9DQorDQorLyoqDQorICBUaGlzIGlzIGEgZHVtbXkgZnVuY3Rpb24g d2hpY2gganVzdCByZXR1cm5zLiBVbmltcGxlbWVudGVkIEVES0lJX1VTQl9FVEhFUk5FVF9QUk9U T0NPTCBmdW5jdGlvbnMNCisgIHBvaW50IHRvIHRoaXMgZnVuY3Rpb24uDQorDQorICBAcGFyYW1b aW5dICBDZGIgIEEgcG9pbnRlciB0byB0aGUgY29tbWFuZCBkZXNjcmlwdG9yIGJsb2NrLg0KKyAg QHBhcmFtW2luXSAgTmljICBBIHBvaW50ZXIgdG8gdGhlIE5ldHdvcmsgaW50ZXJmYWNlIGNvbnRy b2xsZXIgZGF0YS4NCisNCisgIEByZXR2YWwgRUZJX1NVQ0NFU1MgICAgIFRoZSByZXF1ZXN0IGV4 ZWN1dGVkIHN1Y2Nlc3NmdWxseS4NCisNCisqKi8NCitFRklfU1RBVFVTDQorRUZJQVBJDQorUm5k aXNEdW1teVJldHVybiAoDQorICBJTiAgUFhFX0NEQiAgICpDZGIsDQorICBJTiAgTklDX0RBVEEg ICpOaWMNCisgICkNCit7DQorICBERUJVRyAoKERFQlVHX0lORk8sICJSbmRpc0R1bW15UmV0dXJu IGNhbGxlZFxuIikpOw0KKyAgcmV0dXJuIEVGSV9TVUNDRVNTOw0KK30NCisNCisvKioNCisgIFRo aXMgZnVuY3Rpb24gc2VuZCB0aGUgUk5ESVMgY29tbWFuZCB0aHJvdWdoIHRoZSBkZXZpY2UncyBj b250cm9sIGVuZHBvaW50DQorDQorICBAcGFyYW1baW5dICBVc2JSbmRpc0RldmljZSAgICBBIHBv aW50ZXIgdG8gdGhlIFVTQl9STkRJU19ERVZJQ0UgaW5zdGFuY2UuDQorICBAcGFyYW1baW5dICBS bmRpc01zZyAgICAgICAgICBBIHBvaW50ZXIgdG8gdGhlIFJFTU9URV9ORElTX01TR19IRUFERVIg ZGF0YS4NCisgIEBwYXJhbVtvdXRdIFJuZGlzTXNnUmVzcG9uc2UgIEEgcG9pbnRlciB0byB0aGUg UkVNT1RFX05ESVNfTVNHX0hFQURFUiBkYXRhIGZvciBnZXR0aW5nIHJlc3BvbnNlcy4NCisNCisg IEByZXR2YWwgRUZJX1NVQ0NFU1MgICAgICAgICAgIFRoZSBidWxrIHRyYW5zZmVyIGhhcyBiZWVu IHN1Y2Nlc3NmdWxseSBleGVjdXRlZC4NCisNCisqKi8NCitFRklfU1RBVFVTDQorUm5kaXNDb250 cm9sTXNnICgNCisgIElOICBVU0JfUk5ESVNfREVWSUNFICAgICAgICAqVXNiUm5kaXNEZXZpY2Us DQorICBJTiAgUkVNT1RFX05ESVNfTVNHX0hFQURFUiAgKlJuZGlzTXNnLA0KKyAgT1VUIFJFTU9U RV9ORElTX01TR19IRUFERVIgICpSbmRpc01zZ1Jlc3BvbnNlDQorICApDQorew0KKyAgRUZJX1VT Ql9JT19QUk9UT0NPTCAgICAgICAgICAgKlVzYklvID0gVXNiUm5kaXNEZXZpY2UtPlVzYklvOw0K KyAgRUZJX1VTQl9ERVZJQ0VfUkVRVUVTVCAgICAgICAgRGV2UmVxOw0KKyAgVUlOVDMyICAgICAg ICAgICAgICAgICAgICAgICAgVXNiU3RhdHVzOw0KKyAgRUZJX1NUQVRVUyAgICAgICAgICAgICAg ICAgICAgU3RhdHVzOw0KKyAgVUlOVDMyICAgICAgICAgICAgICAgICAgICAgICAgU2F2ZVJlc3Bv bnNlVHlwZTsNCisgIFVJTlQzMiAgICAgICAgICAgICAgICAgICAgICAgIFNhdmVSZXNwb25zZUxl bmd0aDsNCisgIFVJTlQzMiAgICAgICAgICAgICAgICAgICAgICAgIEluZGV4Ow0KKyAgUkVNT1RF X05ESVNfSU5JVElBTElaRV9DTVBMVCAgKlJuZGlzSW5pdENtcGx0Ow0KKw0KKyAgU2F2ZVJlc3Bv bnNlVHlwZSAgID0gMDsNCisgIFNhdmVSZXNwb25zZUxlbmd0aCA9IDA7DQorICBSbmRpc0luaXRD bXBsdCAgICAgPSAoUkVNT1RFX05ESVNfSU5JVElBTElaRV9DTVBMVCAqKVJuZGlzTXNnUmVzcG9u c2U7DQorDQorICBpZiAoUm5kaXNNc2dSZXNwb25zZSkgew0KKyAgICBTYXZlUmVzcG9uc2VUeXBl ICAgPSBSbmRpc01zZ1Jlc3BvbnNlLT5NZXNzYWdlVHlwZTsNCisgICAgU2F2ZVJlc3BvbnNlTGVu Z3RoID0gUm5kaXNNc2dSZXNwb25zZS0+TWVzc2FnZUxlbmd0aDsNCisgIH0NCisNCisgIFplcm9N ZW0gKCZEZXZSZXEsIHNpemVvZiAoRUZJX1VTQl9ERVZJQ0VfUkVRVUVTVCkpOw0KKw0KKyAgRGV2 UmVxLlJlcXVlc3RUeXBlID0gVVNCX1JFUV9UWVBFX0NMQVNTIHwgVVNCX1RBUkdFVF9JTlRFUkZB Q0U7DQorICBEZXZSZXEuUmVxdWVzdCAgICAgPSBTRU5EX0VOQ0FQU1VMQVRFRF9DT01NQU5EOw0K KyAgRGV2UmVxLlZhbHVlICAgICAgID0gMDsNCisgIERldlJlcS5JbmRleCAgICAgICA9IDA7DQor ICBEZXZSZXEuTGVuZ3RoICAgICAgPSAoVUlOVDE2KVJuZGlzTXNnLT5NZXNzYWdlTGVuZ3RoOw0K Kw0KKyAgUHJpbnRSbmRpc01zZyAoUm5kaXNNc2cpOw0KKw0KKyAgU3RhdHVzID0gVXNiSW8tPlVz YkNvbnRyb2xUcmFuc2ZlciAoDQorICAgICAgICAgICAgICAgICAgICBVc2JJbywNCisgICAgICAg ICAgICAgICAgICAgICZEZXZSZXEsDQorICAgICAgICAgICAgICAgICAgICBFZmlVc2JEYXRhT3V0 LA0KKyAgICAgICAgICAgICAgICAgICAgVVNCX0VUSEVSTkVUX1RSQU5TRkVSX1RJTUVPVVQsDQor ICAgICAgICAgICAgICAgICAgICBSbmRpc01zZywNCisgICAgICAgICAgICAgICAgICAgIFJuZGlz TXNnLT5NZXNzYWdlTGVuZ3RoLA0KKyAgICAgICAgICAgICAgICAgICAgJlVzYlN0YXR1cw0KKyAg ICAgICAgICAgICAgICAgICAgKTsNCisNCisgIERFQlVHICgoREVCVUdfSU5GTywgIlJuZGlzQ29u dHJvbE1zZzogVXNiU3RhdHVzIDogJXggU3RhdHVzIDogJXIgUm5kaXNNc2dSZXNwb25zZSA6ICVs eFxuIiwgVXNiU3RhdHVzLCBTdGF0dXMsIFJuZGlzTXNnUmVzcG9uc2UpKTsNCisNCisgIC8vIEVy cm9yIG9yIG5vIHJlc3BvbnNlIGV4cGVjdGVkDQorICBpZiAoKEVGSV9FUlJPUiAoU3RhdHVzKSkg fHwgKFJuZGlzTXNnUmVzcG9uc2UgPT0gTlVMTCkpIHsNCisgICAgREVCVUcgKChERUJVR19JTkZP LCAiUm5kaXNDb250cm9sTXNnOiBVc2JTdGF0dXMgOiAleCBTdGF0dXMgOiAlclxuIiwgVXNiU3Rh dHVzLCBTdGF0dXMpKTsNCisgICAgcmV0dXJuIFN0YXR1czsNCisgIH0NCisNCisgIGZvciAoSW5k ZXggPSAwOyBJbmRleCA8IChSTkRJU19DT05UUk9MX1RJTUVPVVQvMTAwKTsgSW5kZXgrKykgew0K KyAgICBSZWFkUm5kaXNSZXNwb25zZUludGVycnVwdCAoVXNiUm5kaXNEZXZpY2UpOw0KKyAgICBa ZXJvTWVtICgmRGV2UmVxLCBzaXplb2YgKEVGSV9VU0JfREVWSUNFX1JFUVVFU1QpKTsNCisNCisg ICAgRGV2UmVxLlJlcXVlc3RUeXBlID0gVVNCX0VORFBPSU5UX0RJUl9JTiB8IFVTQl9SRVFfVFlQ RV9DTEFTUyB8IFVTQl9UQVJHRVRfSU5URVJGQUNFOw0KKyAgICBEZXZSZXEuUmVxdWVzdCAgICAg PSBHRVRfRU5DQVBTVUxBVEVEX1JFU1BPTlNFOw0KKyAgICBEZXZSZXEuVmFsdWUgICAgICAgPSAw Ow0KKyAgICBEZXZSZXEuSW5kZXggICAgICAgPSAwOw0KKyAgICBEZXZSZXEuTGVuZ3RoICAgICAg PSAoVUlOVDE2KVJuZGlzTXNnUmVzcG9uc2UtPk1lc3NhZ2VMZW5ndGg7DQorDQorICAgIFN0YXR1 cyA9IFVzYklvLT5Vc2JDb250cm9sVHJhbnNmZXIgKA0KKyAgICAgICAgICAgICAgICAgICAgICBV c2JJbywNCisgICAgICAgICAgICAgICAgICAgICAgJkRldlJlcSwNCisgICAgICAgICAgICAgICAg ICAgICAgRWZpVXNiRGF0YUluLA0KKyAgICAgICAgICAgICAgICAgICAgICBVU0JfRVRIRVJORVRf VFJBTlNGRVJfVElNRU9VVCwNCisgICAgICAgICAgICAgICAgICAgICAgUm5kaXNNc2dSZXNwb25z ZSwNCisgICAgICAgICAgICAgICAgICAgICAgUm5kaXNNc2dSZXNwb25zZS0+TWVzc2FnZUxlbmd0 aCwNCisgICAgICAgICAgICAgICAgICAgICAgJlVzYlN0YXR1cw0KKyAgICAgICAgICAgICAgICAg ICAgICApOw0KKw0KKyAgICBERUJVRyAoKERFQlVHX0lORk8sICJSbmRpc0NvbnRyb2xNc2cgUmVz cG9uc2U6IFVzYlN0YXR1cyA6ICV4IFN0YXR1cyA6ICVyIFxuIiwgVXNiU3RhdHVzLCBTdGF0dXMp KTsNCisNCisgICAgUHJpbnRSbmRpc01zZyAoUm5kaXNNc2dSZXNwb25zZSk7DQorDQorICAgIGlm ICghRUZJX0VSUk9SIChTdGF0dXMpKSB7DQorICAgICAgaWYgKChSbmRpc0luaXRDbXBsdC0+UmVx dWVzdElEICE9ICgoUkVNT1RFX05ESVNfSU5JVElBTElaRV9DTVBMVCAqKVJuZGlzTXNnKS0+UmVx dWVzdElEKSB8fCAoUm5kaXNJbml0Q21wbHQtPk1lc3NhZ2VUeXBlICE9IFNhdmVSZXNwb25zZVR5 cGUpKSB7DQorICAgICAgICBERUJVRyAoKERFQlVHX0lORk8sICJSZXRyeSB0aGUgcmVzcG9uc2Vc biIpKTsNCisNCisgICAgICAgIFJuZGlzTXNnUmVzcG9uc2UtPk1lc3NhZ2VUeXBlICAgPSBTYXZl UmVzcG9uc2VUeXBlOw0KKyAgICAgICAgUm5kaXNNc2dSZXNwb25zZS0+TWVzc2FnZUxlbmd0aCA9 IFNhdmVSZXNwb25zZUxlbmd0aDsNCisgICAgICAgIGNvbnRpbnVlOw0KKyAgICAgIH0NCisgICAg fQ0KKw0KKyAgICByZXR1cm4gU3RhdHVzOw0KKyAgfQ0KKw0KKyAgREVCVUcgKChERUJVR19JTkZP LCAiUm5kaXNDb250cm9sTXNnOiBUaW1lT3V0XG4iKSk7DQorDQorICByZXR1cm4gRUZJX1RJTUVP VVQ7DQorfQ0KKw0KKy8qKg0KKyAgVGhpcyBmdW5jdGlvbiBzZW5kIHRoZSBSTkRJUyBjb21tYW5k IHRocm91Z2ggdGhlIGRldmljZSdzIERhdGEgZW5kcG9pbnQNCisNCisgIEBwYXJhbVtpbl0gICAg ICBVc2JSbmRpc0RldmljZSAgQSBwb2ludGVyIHRvIHRoZSBVU0JfUk5ESVNfREVWSUNFIGluc3Rh bmNlLg0KKyAgQHBhcmFtW2luXSAgICAgIFJuZGlzTXNnICAgICAgICBBIHBvaW50ZXIgdG8gdGhl IFJFTU9URV9ORElTX01TR19IRUFERVIgdG8gc2VuZCBvdXQuDQorICBAcGFyYW1baW4sIG91dF0g VHJhbnNmZXJMZW5ndGggIFRoZSBsZW5ndGggb2YgdGhlIFJuZGlzTXNnIGRhdGEgdG8gdHJhbnNm ZXIuDQorDQorICBAcmV0dmFsIEVGSV9TVUNDRVNTICAgICBUaGUgcmVxdWVzdCBleGVjdXRlZCBz dWNjZXNzZnVsbHkuDQorDQorKiovDQorRUZJX1NUQVRVUw0KK1JuZGlzVHJhbnNtaXREYXRhTXNn ICgNCisgIElOICAgICAgVVNCX1JORElTX0RFVklDRSAgICAgICAgKlVzYlJuZGlzRGV2aWNlLA0K KyAgSU4gICAgICBSRU1PVEVfTkRJU19NU0dfSEVBREVSICAqUm5kaXNNc2csDQorICBJTiBPVVQg IFVJTlROICAgICAgICAgICAgICAgICAgICpUcmFuc2Zlckxlbmd0aA0KKyAgKQ0KK3sNCisgIEVG SV9TVEFUVVMgIFN0YXR1czsNCisgIFVJTlQzMiAgICAgIFVzYlN0YXR1czsNCisNCisgIGlmIChV c2JSbmRpc0RldmljZS0+QnVsa0luRW5kcG9pbnQgPT0gMCkgew0KKyAgICBHZXRFbmRwb2ludCAo VXNiUm5kaXNEZXZpY2UtPlVzYklvQ2RjRGF0YSwgVXNiUm5kaXNEZXZpY2UpOw0KKyAgfQ0KKw0K KyAgUHJpbnRSbmRpc01zZyAoUm5kaXNNc2cpOw0KKw0KKyAgU3RhdHVzID0gVXNiUm5kaXNEZXZp Y2UtPlVzYklvQ2RjRGF0YS0+VXNiQnVsa1RyYW5zZmVyICgNCisgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgVXNiUm5kaXNEZXZpY2UtPlVzYklvQ2RjRGF0YSwNCisg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVXNiUm5kaXNEZXZpY2Ut PkJ1bGtPdXRFbmRwb2ludCwNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgUm5kaXNNc2csDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIFRyYW5zZmVyTGVuZ3RoLA0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBVU0JfVFhfRVRIRVJORVRfQlVMS19USU1FT1VULA0KKyAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAmVXNiU3RhdHVzDQorICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICk7DQorDQorICBpZiAoU3RhdHVzID09IEVGSV9TVUND RVNTKSB7DQorICAgIGdTdG9wQnVsa0luQ250ID0gTUFYSU1VTV9TVE9QQlVMS0lOX0NOVDsgICAg IC8vIEFmdGVyIHNlbmRpbmcgY21kICx3ZSB3aWxsIHBvbGxpbmcgcmVjZWl2ZSBwYWNrYWdlIGZv ciBNQVhJTVVNX1NUT1BCVUxLSU5fQ05UIHRpbWVzDQorICB9DQorDQorICByZXR1cm4gU3RhdHVz Ow0KK30NCisNCisvKioNCisgIFRoaXMgZnVuY3Rpb24gc2VuZCB0aGUgUk5ESVMgY29tbWFuZCB0 aHJvdWdoIHRoZSBkZXZpY2UncyBEYXRhIGVuZHBvaW50DQorDQorICBAcGFyYW1baW5dICAgICAg VXNiUm5kaXNEZXZpY2UgICAgQSBwb2ludGVyIHRvIHRoZSBVU0JfUk5ESVNfREVWSUNFIGluc3Rh bmNlLg0KKyAgQHBhcmFtW2luLCBvdXRdIFJuZGlzTXNnICAgICAgICAgIEEgcG9pbnRlciB0byB0 aGUgUkVNT1RFX05ESVNfTVNHX0hFQURFUiB0byBzZW5kIG91dC4NCisgIEBwYXJhbVtpbiwgb3V0 XSBUcmFuc2Zlckxlbmd0aCAgICBUaGUgbGVuZ3RoIG9mIHRoZSBSbmRpc01zZyBkYXRhIHRvIHRy YW5zZmVyLg0KKw0KKyAgQHJldHZhbCBFRklfU1VDQ0VTUyAgICAgVGhlIHJlcXVlc3QgZXhlY3V0 ZWQgc3VjY2Vzc2Z1bGx5Lg0KKw0KKyoqLw0KK0VGSV9TVEFUVVMNCitSbmRpc1JlY2VpdmVEYXRh TXNnICgNCisgIElOICAgICAgVVNCX1JORElTX0RFVklDRSAgICAgICAgKlVzYlJuZGlzRGV2aWNl LA0KKyAgSU4gT1VUICBSRU1PVEVfTkRJU19NU0dfSEVBREVSICAqUm5kaXNNc2csDQorICBJTiBP VVQgIFVJTlROICAgICAgICAgICAgICAgICAgICpUcmFuc2Zlckxlbmd0aA0KKyAgKQ0KK3sNCisg IEVGSV9TVEFUVVMgIFN0YXR1czsNCisgIFVJTlQzMiAgICAgIFVzYlN0YXR1czsNCisNCisgIFVz YlN0YXR1cyA9IDA7DQorDQorICBpZiAoVXNiUm5kaXNEZXZpY2UtPkJ1bGtJbkVuZHBvaW50ID09 IDApIHsNCisgICAgR2V0RW5kcG9pbnQgKFVzYlJuZGlzRGV2aWNlLT5Vc2JJb0NkY0RhdGEsIFVz YlJuZGlzRGV2aWNlKTsNCisgIH0NCisNCisgIC8vIFVzZSBnU3RvcEJ1bGtJbkNudCB0byBzdG9w IEJ1bGtJbiBjb21tYW5kDQorICBpZiAoZ1N0b3BCdWxrSW5DbnQgfHwgTEFOX0JVTEtJTl9DTURf Q09OVFJPTCkgew0KKyAgICBTdGF0dXMgPSBVc2JSbmRpc0RldmljZS0+VXNiSW9DZGNEYXRhLT5V c2JCdWxrVHJhbnNmZXIgKA0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIFVzYlJuZGlzRGV2aWNlLT5Vc2JJb0NkY0RhdGEsDQorICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgVXNiUm5kaXNEZXZpY2UtPkJ1bGtJbkVuZHBvaW50 LA0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJuZGlzTXNn LA0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRyYW5zZmVy TGVuZ3RoLA0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFVT Ql9SWF9FVEhFUk5FVF9CVUxLX1RJTUVPVVQsDQorICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgJlVzYlN0YXR1cw0KKyAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICk7DQorDQorICAgIGlmICghRUZJX0VSUk9SIChTdGF0dXMpKSB7 DQorICAgICAgZ1N0b3BCdWxrSW5DbnQgPSBNSU5JTVVNX1NUT1BCVUxLSU5fQ05UOw0KKyAgICB9 IGVsc2Ugew0KKyAgICAgIGdTdG9wQnVsa0luQ250LS07DQorICAgIH0NCisgIH0gZWxzZSB7DQor ICAgIFN0YXR1cyAgICAgICAgICA9IEVGSV9USU1FT1VUOw0KKyAgICAqVHJhbnNmZXJMZW5ndGgg PSAwOw0KKyAgICBnQmxvY2tCdWxrSW5DbnQrKzsNCisgIH0NCisNCisgIGlmIChnQmxvY2tCdWxr SW5DbnQgPiBCVUxLSU5fQ01EX1BPTExJTkdfQ05UKSB7DQorICAgIGdTdG9wQnVsa0luQ250ICA9 IE1JTklNVU1fU1RPUEJVTEtJTl9DTlQ7DQorICAgIGdCbG9ja0J1bGtJbkNudCA9IDA7DQorICB9 DQorDQorICBQcmludFJuZGlzTXNnIChSbmRpc01zZyk7DQorDQorICByZXR1cm4gU3RhdHVzOw0K K30NCisNCisvKioNCisgIFByaW50cyBSTkRJUyBIZWFkZXIgYW5kIERhdGENCisNCisgIEBwYXJh bVtpbl0gUm5kaXNNc2cgICAgQSBwb2ludGVyIHRvIHRoZSBSRU1PVEVfTkRJU19NU0dfSEVBREVS IGRhdGEuDQorDQorKiovDQorVk9JRA0KK1ByaW50Um5kaXNNc2cgKA0KKyAgSU4gIFJFTU9URV9O RElTX01TR19IRUFERVIgICpSbmRpc01zZw0KKyAgKQ0KK3sNCisgIFVJTlROICAgICAgICAgICAg ICAgICAgICBMZW5ndGg7DQorICBSRU1PVEVfTkRJU19RVUVSWV9DTVBMVCAgKlJuZGlzUXVlcnlD bXBsdDsNCisNCisgIExlbmd0aCA9IDA7DQorDQorICBzd2l0Y2ggKFJuZGlzTXNnLT5NZXNzYWdl VHlwZSkgew0KKyAgICBjYXNlIFJORElTX1BBQ0tFVF9NU0c6DQorICAgICAgREVCVUcgKChERUJV R19JTkZPLCAiUk5ESVNfUEFDS0VUX01TRzpcbiIpKTsNCisgICAgICBMZW5ndGggPSBzaXplb2Yg KFJFTU9URV9ORElTX1BBQ0tFVF9NU0cpICsgMHgxNDsNCisgICAgICBicmVhazsNCisgICAgY2Fz ZSBSTkRJU19JTklUSUFMSVpFX01TRzoNCisgICAgICBERUJVRyAoKERFQlVHX0lORk8sICJSTkRJ U19JTklUSUFMSVpFX01TRzpcbiIpKTsNCisgICAgICBMZW5ndGggPSBzaXplb2YgKFJFTU9URV9O RElTX0lOSVRJQUxJWkVfTVNHKTsNCisgICAgICBicmVhazsNCisgICAgY2FzZSBSTkRJU19JTklU SUFMSVpFX0NNUExUOg0KKyAgICAgIERFQlVHICgoREVCVUdfSU5GTywgIlJORElTX0lOSVRJQUxJ WkVfQ01QTFQ6XG4iKSk7DQorICAgICAgTGVuZ3RoID0gc2l6ZW9mIChSRU1PVEVfTkRJU19JTklU SUFMSVpFX0NNUExUKTsNCisgICAgICBicmVhazsNCisgICAgY2FzZSBSTkRJU19ITFRfTVNHOg0K KyAgICAgIERFQlVHICgoREVCVUdfSU5GTywgIlJORElTX0hMVF9NU0c6XG4iKSk7DQorICAgICAg TGVuZ3RoID0gc2l6ZW9mIChSRU1PVEVfTkRJU19IQUxUX01TRyk7DQorICAgICAgYnJlYWs7DQor ICAgIGNhc2UgUk5ESVNfUVVFUllfTVNHOg0KKyAgICAgIERFQlVHICgoREVCVUdfSU5GTywgIlJO RElTX1FVRVJZX01TRzpcbiIpKTsNCisgICAgICBMZW5ndGggPSBzaXplb2YgKFJFTU9URV9ORElT X1FVRVJZX01TRyk7DQorICAgICAgYnJlYWs7DQorICAgIGNhc2UgUk5ESVNfUVVFUllfQ01QTFQ6 DQorICAgICAgREVCVUcgKChERUJVR19JTkZPLCAiUk5ESVNfUVVFUllfQ01QTFQ6XG4iKSk7DQor ICAgICAgUm5kaXNRdWVyeUNtcGx0ID0gKFJFTU9URV9ORElTX1FVRVJZX0NNUExUICopUm5kaXNN c2c7DQorICAgICAgTGVuZ3RoICAgICAgICAgID0gc2l6ZW9mIChSRU1PVEVfTkRJU19RVUVSWV9D TVBMVCkgKyBSbmRpc1F1ZXJ5Q21wbHQtPkluZm9ybWF0aW9uQnVmZmVyTGVuZ3RoOw0KKyAgICAg IGJyZWFrOw0KKyAgICBjYXNlIFJORElTX1NFVF9NU0c6DQorICAgICAgREVCVUcgKChERUJVR19J TkZPLCAiUk5ESVNfU0VUX01TRzpcbiIpKTsNCisgICAgICBMZW5ndGggPSBzaXplb2YgKFJFTU9U RV9ORElTX1NFVF9NU0cpOw0KKyAgICAgIGJyZWFrOw0KKyAgICBjYXNlIFJORElTX1NFVF9DTVBM VDoNCisgICAgICBERUJVRyAoKERFQlVHX0lORk8sICJSTkRJU19TRVRfQ01QTFQ6XG4iKSk7DQor ICAgICAgTGVuZ3RoID0gc2l6ZW9mIChSRU1PVEVfTkRJU19TRVRfQ01QTFQpOw0KKyAgICAgIGJy ZWFrOw0KKyAgICBjYXNlIFJORElTX1JFU0VUX01TRzoNCisgICAgICBERUJVRyAoKERFQlVHX0lO Rk8sICJSTkRJU19SRVNFVF9NU0c6XG4iKSk7DQorICAgICAgTGVuZ3RoID0gc2l6ZW9mIChSRU1P VEVfTkRJU19SRVNFVF9NU0cpOw0KKyAgICAgIGJyZWFrOw0KKyAgICBjYXNlIFJORElTX1JFU0VU X0NNUExUOg0KKyAgICAgIERFQlVHICgoREVCVUdfSU5GTywgIlJORElTX1JFU0VUX0NNUExUOlxu IikpOw0KKyAgICAgIExlbmd0aCA9IHNpemVvZiAoUkVNT1RFX05ESVNfUkVTRVRfQ01QTFQpOw0K KyAgICAgIGJyZWFrOw0KKyAgICBjYXNlIFJORElTX0lORElDQVRFX1NUQVRVU19NU0c6DQorICAg ICAgREVCVUcgKChERUJVR19JTkZPLCAiUk5ESVNfSU5ESUNBVEVfU1RBVFVTX01TRzpcbiIpKTsN CisgICAgICBMZW5ndGggPSBzaXplb2YgKFJFTU9URV9ORElTX0lORElDQVRFX1NUQVRVU19NU0cp Ow0KKyAgICAgIGJyZWFrOw0KKyAgICBjYXNlIFJORElTX0tFRVBBTElWRV9NU0c6DQorICAgICAg REVCVUcgKChERUJVR19JTkZPLCAiUk5ESVNfS0VFUEFMSVZFX01TRzpcbiIpKTsNCisgICAgICBM ZW5ndGggPSBzaXplb2YgKFJFTU9URV9ORElTX0tFRVBBTElWRV9NU0cpOw0KKyAgICAgIGJyZWFr Ow0KKyAgICBjYXNlIFJORElTX0tFRVBBTElWRV9DTVBMVDoNCisgICAgICBERUJVRyAoKERFQlVH X0lORk8sICJSTkRJU19LRUVQQUxJVkVfQ01QTFQ6XG4iKSk7DQorICAgICAgTGVuZ3RoID0gc2l6 ZW9mIChSRU1PVEVfTkRJU19LRUVQQUxJVkVfQ01QTFQpOw0KKyAgfQ0KKw0KKyAgaWYgKExlbmd0 aCkgew0KKyAgICBVSU5UTiAgSW5kZXggPSAwOw0KKyAgICBmb3IgKCA7IExlbmd0aDsgTGVuZ3Ro IC09IDQsIEluZGV4KyspIHsNCisgICAgICBERUJVRyAoKERFQlVHX0lORk8sICIlOFhcdCIsICoo KFVJTlQzMiAqKVJuZGlzTXNnICsgSW5kZXgpKSk7DQorICAgICAgaWYgKCgoSW5kZXggJSA0KSA9 PSAzKSAmJiAoSW5kZXggIT0gMCkpIHsNCisgICAgICAgIERFQlVHICgoREVCVUdfSU5GTywgIlxu IikpOw0KKyAgICAgIH0NCisNCisgICAgICBpZiAoKExlbmd0aCA8IDgpICYmIChMZW5ndGggPiA0 KSkgew0KKyAgICAgICAgVUlOVDMyICBEYXRhMzI7DQorICAgICAgICBJbmRleCsrOw0KKyAgICAg ICAgRGF0YTMyID0gKigoVUlOVDMyICopUm5kaXNNc2cgKyBJbmRleCk7DQorICAgICAgICBERUJV RyAoKERFQlVHX0lORk8sICIlOFhcdCIsIERhdGEzMikpOw0KKyAgICAgICAgYnJlYWs7DQorICAg ICAgfQ0KKyAgICB9DQorDQorICAgIGlmIChJbmRleCAlIDQpIHsNCisgICAgICBERUJVRyAoKERF QlVHX0lORk8sICJcbiIpKTsNCisgICAgfQ0KKyAgfQ0KK30NCmRpZmYgLS1naXQgYS9NZGVNb2R1 bGVQa2cvSW5jbHVkZS9Qcm90b2NvbC9Vc2JFdGhlcm5ldFByb3RvY29sLmggYi9NZGVNb2R1bGVQ a2cvSW5jbHVkZS9Qcm90b2NvbC9Vc2JFdGhlcm5ldFByb3RvY29sLmgNCm5ldyBmaWxlIG1vZGUg MTAwNjQ0DQppbmRleCAwMDAwMDAwMDAwLi44MDA5NDVkNGIzDQotLS0gL2Rldi9udWxsDQorKysg Yi9NZGVNb2R1bGVQa2cvSW5jbHVkZS9Qcm90b2NvbC9Vc2JFdGhlcm5ldFByb3RvY29sLmgNCkBA IC0wLDAgKzEsODc4IEBADQorLyoqIEBmaWxlDQorICBIZWFkZXIgZmlsZSBjb250YWlucyBjb2Rl IGZvciBVU0IgRXRoZXJuZXQgUHJvdG9jb2wNCisgIGRlZmluaXRpb25zDQorDQorICBDb3B5cmln aHQgKGMpIDIwMjMsIEFtZXJpY2FuIE1lZ2F0cmVuZHMgSW50ZXJuYXRpb25hbCBMTEMuIEFsbCBy aWdodHMgcmVzZXJ2ZWQuPEJSPg0KKyAgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEJTRC0yLUNs YXVzZS1QYXRlbnQNCisqKi8NCisNCisjaWZuZGVmIFVTQl9FVEhFUk5FVF9QUk9UT0NPTF9IXw0K KyNkZWZpbmUgVVNCX0VUSEVSTkVUX1BST1RPQ09MX0hfDQorDQorI2RlZmluZSBFREtJSV9VU0Jf RVRIRVJORVRfUFJPVE9DT0xfR1VJRCBcDQorICAgIHsweDhkODk2OWNjLCAweGZlYjAsIDB4NDMw MywgezB4YjIsIDB4MWEsIDB4MWYsIDB4MTEsIDB4NmYsIDB4MzgsIDB4NTYsIDB4NDN9fQ0KKw0K K3R5cGVkZWYgc3RydWN0IF9FREtJSV9VU0JfRVRIRVJORVRfUFJPVE9DT0wgRURLSUlfVVNCX0VU SEVSTkVUX1BST1RPQ09MOw0KKw0KKyNkZWZpbmUgVVNCX0NEQ19DTEFTUyAgICAgICAgICAweDAy DQorI2RlZmluZSBVU0JfQ0RDX0FDTV9TVUJDTEFTUyAgIDB4MDINCisjZGVmaW5lIFVTQl9DRENf RUNNX1NVQkNMQVNTICAgMHgwNg0KKyNkZWZpbmUgVVNCX0NEQ19OQ01fU1VCQ0xBU1MgICAweDBE DQorI2RlZmluZSBVU0JfQ0RDX0RBVEFfQ0xBU1MgICAgIDB4MEENCisjZGVmaW5lIFVTQl9DRENf REFUQV9TVUJDTEFTUyAgMHgwMA0KKyNkZWZpbmUgVVNCX05PX0NMQVNTX1BST1RPQ09MICAweDAw DQorI2RlZmluZSBVU0JfTkNNX05UQl9QUk9UT0NPTCAgIDB4MDENCisjZGVmaW5lIFVTQl9WRU5E T1JfUFJPVE9DT0wgICAgMHhGRg0KKw0KKy8vIFR5cGUgVmFsdWVzIGZvciB0aGUgRGVzY3JpcHRv clR5cGUgRmllbGQNCisjZGVmaW5lIENTX0lOVEVSRkFDRSAgMHgyNA0KKyNkZWZpbmUgQ1NfRU5E UE9JTlQgICAweDI1DQorDQorLy8gRGVzY3JpcHRvciBTdWJUeXBlIGluIEZ1bmN0aW9uYWwgRGVz Y3JpcHRvcnMNCisjZGVmaW5lIEhFQURFUl9GVU5fREVTQ1JJUFRPUiAgICAweDAwDQorI2RlZmlu ZSBVTklPTl9GVU5fREVTQ1JJUFRPUiAgICAgMHgwNg0KKyNkZWZpbmUgRVRIRVJORVRfRlVOX0RF U0NSSVBUT1IgIDB4MEYNCisNCisjZGVmaW5lIE1BWF9MQU5fSU5URVJGQUNFICAweDEwDQorDQor Ly8gVGFibGUgMjA6IENsYXNzLVNwZWNpZmljIE5vdGlmaWNhdGlvbiBDb2Rlcw0KKyNkZWZpbmUg VVNCX0NEQ19ORVRXT1JLX0NPTk5FQ1RJT04gIDB4MDANCisNCisvLyA2LjMuMSBOZXR3b3JrQ29u bmVjdGlvbg0KKyNkZWZpbmUgTkVUV09SS19DT05ORUNURUQgICAweDAxDQorI2RlZmluZSBORVRX T1JLX0RJU0NPTk5FQ1QgIDB4MDANCisNCisvLyBVU0IgSGVhZGVyIGZ1bmN0aW9uYWwgRGVzY3Jp cHRvcg0KK3R5cGVkZWYgc3RydWN0IHsNCisgIFVJTlQ4ICAgICBGdW5jdGlvbkxlbmd0aDsNCisg IFVJTlQ4ICAgICBEZXNjcmlwdG9yVHlwZTsNCisgIFVJTlQ4ICAgICBEZXNjcmlwdG9yU3VidHlw ZTsNCisgIFVJTlQxNiAgICBCY2RDZGM7DQorfSBVU0JfSEVBREVSX0ZVTl9ERVNDUklQVE9SOw0K Kw0KKy8vIFVTQiBVbmlvbiBGdW5jdGlvbmFsIERlc2NyaXB0b3INCit0eXBlZGVmIHN0cnVjdCB7 DQorICBVSU5UOCAgICBGdW5jdGlvbkxlbmd0aDsNCisgIFVJTlQ4ICAgIERlc2NyaXB0b3JUeXBl Ow0KKyAgVUlOVDggICAgRGVzY3JpcHRvclN1YnR5cGU7DQorICBVSU5UOCAgICBNYXN0ZXJJbnRl cmZhY2U7DQorICBVSU5UOCAgICBTbGF2ZUludGVyZmFjZTsNCit9IFVTQl9VTklPTl9GVU5fREVT Q1JJUFRPUjsNCisNCisvLyBVU0IgRXRoZXJuZXQgRnVuY3Rpb25hbCBEZXNjcmlwdG9yDQordHlw ZWRlZiBzdHJ1Y3Qgew0KKyAgVUlOVDggICAgIEZ1bmN0aW9uTGVuZ3RoOw0KKyAgVUlOVDggICAg IERlc2NyaXB0b3JUeXBlOw0KKyAgVUlOVDggICAgIERlc2NyaXB0b3JTdWJ0eXBlOw0KKyAgVUlO VDggICAgIE1hY0FkZHJlc3M7DQorICBVSU5UMzIgICAgRXRoZXJuZXRTdGF0aXN0aWNzOw0KKyAg VUlOVDE2ICAgIE1heFNlZ21lbnRTaXplOw0KKyAgVUlOVDE2ICAgIE51bWJlck1jRmlsdGVyczsN CisgIFVJTlQ4ICAgICBOdW1iZXJQb3dlckZpbHRlcnM7DQorfSBVU0JfRVRIRVJORVRfRlVOX0RF U0NSSVBUT1I7DQorDQordHlwZWRlZiBzdHJ1Y3Qgew0KKyAgVUlOVDMyICAgIFVzQml0UmF0ZTsN CisgIFVJTlQzMiAgICBEc0JpdFJhdGU7DQorfSBVU0JfQ09OTkVDVF9TUEVFRF9DSEFOR0U7DQor DQorLy8gUmVxdWVzdCBUeXBlIENvZGVzIGZvciBVU0IgRXRoZXJuZXQNCisjZGVmaW5lIFVTQl9F VEhFUk5FVF9HRVRfUkVRX1RZUEUgIDB4QTENCisjZGVmaW5lIFVTQl9FVEhFUk5FVF9TRVRfUkVR X1RZUEUgIDB4MjENCisNCisvLyBDbGFzcy1TcGVjaWZpYyBSZXF1ZXN0IENvZGVzIGZvciBFdGhl cm5ldCBzdWJjbGFzcw0KKy8vIFVTQiBFQ00gMS4yIHNwZWNpZmljYXRpb24sIFNlY3Rpb24gNi4y DQorI2RlZmluZSBTRVRfRVRIX01VTFRJQ0FTVF9GSUxURVJTX1JFUSAgICAgICAgICAgICAgICAw eDQwDQorI2RlZmluZSBTRVRfRVRIX1BPV0VSX01BTkFHRU1FTlRfUEFUVEVSTl9GSUxURVJfUkVR ICAweDQxDQorI2RlZmluZSBHRVRfRVRIX1BPV0VSX01BTkFHRU1FTlRfUEFUVEVSTl9GSUxURVJf UkVRICAweDQyDQorI2RlZmluZSBTRVRfRVRIX1BBQ0tFVF9GSUxURVJfUkVRICAgICAgICAgICAg ICAgICAgICAweDQzDQorI2RlZmluZSBHRVRfRVRIX1NUQVRJU1RJQ19SRVEgICAgICAgICAgICAg ICAgICAgICAgICAweDQ0DQorDQorLy8gVVNCIEVDTSBjb21tYW5kIHJlcXVlc3QgbGVuZ3RoDQor I2RlZmluZSBVU0JfRVRIX1BPV0VSX0ZJTFRFUl9MRU5HVEggICAyIC8vIFNlY3Rpb24gNi4yLjMN CisjZGVmaW5lIFVTQl9FVEhfUEFDS0VUX0ZJTFRFUl9MRU5HVEggIDAgLy8gU2VjdGlvbiA2LjIu NA0KKyNkZWZpbmUgVVNCX0VUSF9TVEFUSVNUSUMgICAgICAgICAgICAgNCAvLyBTZWN0aW9uIDYu Mi41DQorDQorLy8gVVNCIEV0aGVybmV0IFBhY2tldCBGaWx0ZXIgQml0bWFwDQorLy8gVVNCIEVD TSAxLjIgc3BlY2lmaWNhdGlvbiwgU2VjdGlvbiA2LjIuNA0KKyNkZWZpbmUgVVNCX0VUSF9QQUNL RVRfVFlQRV9QUk9NSVNDVU9VUyAgICBCSVQwDQorI2RlZmluZSBVU0JfRVRIX1BBQ0tFVF9UWVBF X0FMTF9NVUxUSUNBU1QgIEJJVDENCisjZGVmaW5lIFVTQl9FVEhfUEFDS0VUX1RZUEVfRElSRUNU RUQgICAgICAgQklUMg0KKyNkZWZpbmUgVVNCX0VUSF9QQUNLRVRfVFlQRV9CUk9BRENBU1QgICAg ICBCSVQzDQorI2RlZmluZSBVU0JfRVRIX1BBQ0tFVF9UWVBFX01VTFRJQ0FTVCAgICAgIEJJVDQN CisNCisvLyBVU0IgRXRoZXJuZXQgU3RhdGlzdGljcyBGZWF0dXJlIFNlbGVjdG9yIENvZGVzDQor Ly8gVVNCIEVDTSAxLjIgc3BlY2lmaWNhdGlvbiwgU2VjdGlvbiA2LjIuNQ0KKyNkZWZpbmUgVVNC X0VUSF9YTUlUX09LICAgICAgICAgICAgICAgICAweDAxDQorI2RlZmluZSBVU0JfRVRIX1JDVl9P SyAgICAgICAgICAgICAgICAgIDB4MDINCisjZGVmaW5lIFVTQl9FVEhfWE1JVF9FUlJPUiAgICAg ICAgICAgICAgMHgwMw0KKyNkZWZpbmUgVVNCX0VUSF9SQ1ZfRVJST1IgICAgICAgICAgICAgICAw eDA0DQorI2RlZmluZSBVU0JfRVRIX1JDVl9OT19CVUZGRVIgICAgICAgICAgIDB4MDUNCisjZGVm aW5lIFVTQl9FVEhfRElSRUNURURfQllURVNfWE1JVCAgICAgMHgwNg0KKyNkZWZpbmUgVVNCX0VU SF9ESVJFQ1RFRF9GUkFNRVNfWE1JVCAgICAweDA3DQorI2RlZmluZSBVU0JfRVRIX01VTFRJQ0FT VF9CWVRFU19YTUlUICAgIDB4MDgNCisjZGVmaW5lIFVTQl9FVEhfTVVMVElDQVNUX0ZSQU1FU19Y TUlUICAgMHgwOQ0KKyNkZWZpbmUgVVNCX0VUSF9CUk9BRENBU1RfQllURVNfWE1JVCAgICAweDBB DQorI2RlZmluZSBVU0JfRVRIX0JST0FEQ0FTVF9GUkFNRVNfWE1JVCAgIDB4MEINCisjZGVmaW5l IFVTQl9FVEhfRElSRUNURURfQllURVNfUkNWICAgICAgMHgwQw0KKyNkZWZpbmUgVVNCX0VUSF9E SVJFQ1RFRF9GUkFNRVNfUkNWICAgICAweDBEDQorI2RlZmluZSBVU0JfRVRIX01VTFRJQ0FTVF9C WVRFU19SQ1YgICAgIDB4MEUNCisjZGVmaW5lIFVTQl9FVEhfTVVMVElDQVNUX0ZSQU1FU19SQ1Yg ICAgMHgwRg0KKyNkZWZpbmUgVVNCX0VUSF9CUk9BRENBU1RfQllURVNfUkNWICAgICAweDEwDQor I2RlZmluZSBVU0JfRVRIX0JST0FEQ0FTVF9GUkFNRVNfUkNWICAgIDB4MTENCisjZGVmaW5lIFVT Ql9FVEhfUkNWX0NSQ19FUlJPUiAgICAgICAgICAgMHgxMg0KKyNkZWZpbmUgVVNCX0VUSF9UUkFO U01JVF9RVUVVRV9MRU5HVEggICAweDEzDQorI2RlZmluZSBVU0JfRVRIX1JDVl9FUlJPUl9BTElH Tk1FTlQgICAgIDB4MTQNCisjZGVmaW5lIFVTQl9FVEhfWE1JVF9PTkVfQ09MTElTSU9OICAgICAg MHgxNQ0KKyNkZWZpbmUgVVNCX0VUSF9YTUlUX01PUkVfQ09MTElTSU9OUyAgICAweDE2DQorI2Rl ZmluZSBVU0JfRVRIX1hNSVRfREVGRVJSRUQgICAgICAgICAgIDB4MTcNCisjZGVmaW5lIFVTQl9F VEhfWE1JVF9NQVhfQ09MTElTSU9OUyAgICAgMHgxOA0KKyNkZWZpbmUgVVNCX0VUSF9SQ1ZfT1ZF UlJVTiAgICAgICAgICAgICAweDE5DQorI2RlZmluZSBVU0JfRVRIX1hNSVRfVU5ERVJSVU4gICAg ICAgICAgIDB4MUENCisjZGVmaW5lIFVTQl9FVEhfWE1JVF9IRUFSVEJFQVRfRkFJTFVSRSAgMHgx Qg0KKyNkZWZpbmUgVVNCX0VUSF9YTUlUX1RJTUVTX0NSU19MT1NUICAgICAweDFDDQorI2RlZmlu ZSBVU0JfRVRIX1hNSVRfTEFURV9DT0xMSVNJT05TICAgIDB4MUQNCisNCisvLyBOSUMgSW5mb3Jt YXRpb24NCit0eXBlZGVmIHN0cnVjdCB7DQorICBVSU5UMzIgICAgICAgICAgICAgICAgICAgICAg ICAgU2lnbmF0dXJlOw0KKyAgRURLSUlfVVNCX0VUSEVSTkVUX1BST1RPQ09MICAgICpVc2JFdGg7 DQorICBVSU5UMTYgICAgICAgICAgICAgICAgICAgICAgICAgSW50ZXJydXBPcEZsYWc7DQorICBV SU5UNjQgICAgICAgICAgICAgICAgICAgICAgICAgTWFwcGVkQWRkcjsNCisgIFBYRV9NQUNfQURE UiAgICAgICAgICAgICAgICAgICBNY2FzdExpc3RbTUFYX01DQVNUX0FERFJFU1NfQ05UXTsNCisg IFVJTlQ4ICAgICAgICAgICAgICAgICAgICAgICAgICBNY2FzdENvdW50Ow0KKyAgVUlOVDY0ICAg ICAgICAgICAgICAgICAgICAgICAgIE1lZGlhSGVhZGVyW01BWF9YTUlUX0JVRkZFUlNdOw0KKyAg VUlOVDggICAgICAgICAgICAgICAgICAgICAgICAgIFR4QnVmZmVyQ291bnQ7DQorICBVSU5UMTYg ICAgICAgICAgICAgICAgICAgICAgICAgU3RhdGU7DQorICBCT09MRUFOICAgICAgICAgICAgICAg ICAgICAgICAgQ2FuVHJhbnNtaXQ7DQorICBVSU5UMTYgICAgICAgICAgICAgICAgICAgICAgICAg UmVjZWl2ZVN0YXR1czsNCisgIFVJTlQ4ICAgICAgICAgICAgICAgICAgICAgICAgICBSeEZpbHRl cjsNCisgIFVJTlQzMiAgICAgICAgICAgICAgICAgICAgICAgICBSeEZyYW1lOw0KKyAgVUlOVDMy ICAgICAgICAgICAgICAgICAgICAgICAgIFR4RnJhbWU7DQorICBVSU5UMTYgICAgICAgICAgICAg ICAgICAgICAgICAgTmV0d29ya0Nvbm5lY3Q7DQorICBVSU5UOCAgICAgICAgICAgICAgICAgICAg ICAgICAgQ2FibGVEZXRlY3Q7DQorICBVSU5UMTYgICAgICAgICAgICAgICAgICAgICAgICAgTWF4 U2VnbWVudFNpemU7DQorICBFRklfTUFDX0FERFJFU1MgICAgICAgICAgICAgICAgTWFjQWRkcjsN CisgIFBYRV9DUEJfU1RBUlRfMzEgICAgICAgICAgICAgICBQeGVTdGFydDsNCisgIFBYRV9DUEJf SU5JVElBTElaRSAgICAgICAgICAgICBQeGVJbml0Ow0KKyAgVUlOVDggICAgICAgICAgICAgICAg ICAgICAgICAgIFBlcm1Ob2RlQWRkcmVzc1tQWEVfTUFDX0xFTkdUSF07DQorICBVSU5UOCAgICAg ICAgICAgICAgICAgICAgICAgICAgQ3VycmVudE5vZGVBZGRyZXNzW1BYRV9NQUNfTEVOR1RIXTsN CisgIFVJTlQ4ICAgICAgICAgICAgICAgICAgICAgICAgICBCcm9hZGNhc3ROb2RlQWRkcmVzc1tQ WEVfTUFDX0xFTkdUSF07DQorICBFRklfVVNCX0RFVklDRV9SRVFVRVNUICAgICAgICAgUmVxdWVz dDsNCisgIEVGSV9FVkVOVCAgICAgICAgICAgICAgICAgICAgICBSYXRlTGltaXRlcjsNCisgIFVJ TlQzMiAgICAgICAgICAgICAgICAgICAgICAgICBSYXRlTGltaXRpbmdDcmVkaXQ7DQorICBVSU5U MzIgICAgICAgICAgICAgICAgICAgICAgICAgUmF0ZUxpbWl0aW5nQ3JlZGl0Q291bnQ7DQorICBV SU5UMzIgICAgICAgICAgICAgICAgICAgICAgICAgUmF0ZUxpbWl0aW5nUG9sbFRpbWVyOw0KKyAg Qk9PTEVBTiAgICAgICAgICAgICAgICAgICAgICAgIFJhdGVMaW1pdGluZ0VuYWJsZTsNCit9IE5J Q19EQVRBOw0KKw0KKyNkZWZpbmUgTklDX0RBVEFfU0lHTkFUVVJFICBTSUdOQVRVUkVfMzIoJ24n LCAnaScsICdjJywgJ2QnKQ0KKyNkZWZpbmUgTklDX0RBVEFfRlJPTV9FREtJSV9VU0JfRVRIRVJO RVRfUFJPVE9DT0woYSkgIENSIChhLCBOSUNfREFUQSwgVXNiRXRoLCBOSUNfREFUQV9TSUdOQVRV UkUpDQorDQorLyoqDQorICBUaGlzIGNvbW1hbmQgaXMgdXNlZCB0byBkZXRlcm1pbmUgdGhlIG9w ZXJhdGlvbmFsIHN0YXRlIG9mIHRoZSBVTkRJLg0KKw0KKyAgQHBhcmFtW2luXSAgQ2RiICBBIHBv aW50ZXIgdG8gdGhlIGNvbW1hbmQgZGVzY3JpcHRvciBibG9jay4NCisgIEBwYXJhbVtpbl0gIE5p YyAgQSBwb2ludGVyIHRvIHRoZSBOZXR3b3JrIGludGVyZmFjZSBjb250cm9sbGVyIGRhdGEuDQor DQorICBAcmV0dmFsIEVGSV9TVUNDRVNTICAgICAgICAgICBUaGUgcmVxdWVzdCBleGVjdXRlZCBz dWNjZXNzZnVsbHkuDQorICBAcmV0dmFsIEVGSV9USU1FT1VUICAgICAgICAgICBBIHRpbWVvdXQg b2NjdXJyZWQgZXhlY3V0aW5nIHRoZSByZXF1ZXN0Lg0KKyAgQHJldHZhbCBFRklfREVWSUNFX0VS Uk9SICAgICAgVGhlIHJlcXVlc3QgZmFpbGVkIGR1ZSB0byBhIGRldmljZSBlcnJvci4NCisgIEBy ZXR2YWwgRUZJX0lOVkFMSURfUEFSQU1FVEVSIE9uZSBvZiB0aGUgcGFyYW1ldGVycyBoYXMgYW4g aW52YWxpZCB2YWx1ZS4NCisgIEByZXR2YWwgRUZJX1VOU1VQUE9SVEVEICAgICAgIE5vdCBzdXBw b3J0ZWQuDQorKiovDQordHlwZWRlZg0KK0VGSV9TVEFUVVMNCisoRUZJQVBJICpFREtJSV9VU0Jf RVRIRVJORVRfVU5ESV9HRVRfU1RBVEUpKA0KKyAgSU4gIFBYRV9DREIgICAgICpDZGIsDQorICBJ TiAgTklDX0RBVEEgICAgKk5pYw0KKyAgKTsNCisNCisvKioNCisgIFRoaXMgY29tbWFuZCBpcyB1 c2VkIHRvIGNoYW5nZSB0aGUgVU5ESSBvcGVyYXRpb25hbCBzdGF0ZSBmcm9tIHN0b3BwZWQgdG8g c3RhcnRlZC4NCisNCisgIEBwYXJhbVtpbl0gIENkYiAgQSBwb2ludGVyIHRvIHRoZSBjb21tYW5k IGRlc2NyaXB0b3IgYmxvY2suDQorICBAcGFyYW1baW5dICBOaWMgIEEgcG9pbnRlciB0byB0aGUg TmV0d29yayBpbnRlcmZhY2UgY29udHJvbGxlciBkYXRhLg0KKw0KKyAgQHJldHZhbCBFRklfU1VD Q0VTUyAgICAgICAgICAgVGhlIHJlcXVlc3QgZXhlY3V0ZWQgc3VjY2Vzc2Z1bGx5Lg0KKyAgQHJl dHZhbCBFRklfVElNRU9VVCAgICAgICAgICAgQSB0aW1lb3V0IG9jY3VycmVkIGV4ZWN1dGluZyB0 aGUgcmVxdWVzdC4NCisgIEByZXR2YWwgRUZJX0RFVklDRV9FUlJPUiAgICAgIFRoZSByZXF1ZXN0 IGZhaWxlZCBkdWUgdG8gYSBkZXZpY2UgZXJyb3IuDQorICBAcmV0dmFsIEVGSV9JTlZBTElEX1BB UkFNRVRFUiBPbmUgb2YgdGhlIHBhcmFtZXRlcnMgaGFzIGFuIGludmFsaWQgdmFsdWUuDQorICBA cmV0dmFsIEVGSV9VTlNVUFBPUlRFRCAgICAgICBOb3Qgc3VwcG9ydGVkLg0KKyoqLw0KK3R5cGVk ZWYNCitFRklfU1RBVFVTDQorKEVGSUFQSSAqRURLSUlfVVNCX0VUSEVSTkVUX1VORElfU1RBUlQp KA0KKyAgSU4gIFBYRV9DREIgICAgICpDZGIsDQorICBJTiAgTklDX0RBVEEgICAgKk5pYw0KKyAg KTsNCisNCisvKioNCisgIFRoaXMgY29tbWFuZCBpcyB1c2VkIHRvIGNoYW5nZSB0aGUgVU5ESSBv cGVyYXRpb25hbCBzdGF0ZSBmcm9tIHN0YXJ0ZWQgdG8gc3RvcHBlZC4NCisNCisgIEBwYXJhbVtp bl0gIENkYiAgQSBwb2ludGVyIHRvIHRoZSBjb21tYW5kIGRlc2NyaXB0b3IgYmxvY2suDQorICBA cGFyYW1baW5dICBOaWMgIEEgcG9pbnRlciB0byB0aGUgTmV0d29yayBpbnRlcmZhY2UgY29udHJv bGxlciBkYXRhLg0KKw0KKyAgQHJldHZhbCBFRklfU1VDQ0VTUyAgICAgICAgICAgVGhlIHJlcXVl c3QgZXhlY3V0ZWQgc3VjY2Vzc2Z1bGx5Lg0KKyAgQHJldHZhbCBFRklfVElNRU9VVCAgICAgICAg ICAgQSB0aW1lb3V0IG9jY3VycmVkIGV4ZWN1dGluZyB0aGUgcmVxdWVzdC4NCisgIEByZXR2YWwg RUZJX0RFVklDRV9FUlJPUiAgICAgIFRoZSByZXF1ZXN0IGZhaWxlZCBkdWUgdG8gYSBkZXZpY2Ug ZXJyb3IuDQorICBAcmV0dmFsIEVGSV9JTlZBTElEX1BBUkFNRVRFUiBPbmUgb2YgdGhlIHBhcmFt ZXRlcnMgaGFzIGFuIGludmFsaWQgdmFsdWUuDQorICBAcmV0dmFsIEVGSV9VTlNVUFBPUlRFRCAg ICAgICBOb3Qgc3VwcG9ydGVkLg0KKyoqLw0KK3R5cGVkZWYNCitFRklfU1RBVFVTDQorKEVGSUFQ SSAqRURLSUlfVVNCX0VUSEVSTkVUX1VORElfU1RPUCkoDQorICBJTiAgUFhFX0NEQiAgICAgKkNk YiwNCisgIElOICBOSUNfREFUQSAgICAqTmljDQorICApOw0KKw0KKy8qKg0KKyAgVGhpcyBjb21t YW5kIGlzIHVzZWQgdG8gcmV0cmlldmUgaW5pdGlhbGl6YXRpb24gaW5mb3JtYXRpb24gdGhhdCBp cw0KKyAgbmVlZGVkIGJ5IGRyaXZlcnMgYW5kIGFwcGxpY2F0aW9ucyB0byBpbml0aWFsaXplZCBV TkRJLg0KKw0KKyAgQHBhcmFtW2luXSAgQ2RiICBBIHBvaW50ZXIgdG8gdGhlIGNvbW1hbmQgZGVz Y3JpcHRvciBibG9jay4NCisgIEBwYXJhbVtpbl0gIE5pYyAgQSBwb2ludGVyIHRvIHRoZSBOZXR3 b3JrIGludGVyZmFjZSBjb250cm9sbGVyIGRhdGEuDQorDQorICBAcmV0dmFsIEVGSV9TVUNDRVNT ICAgICAgICAgICBUaGUgcmVxdWVzdCBleGVjdXRlZCBzdWNjZXNzZnVsbHkuDQorICBAcmV0dmFs IEVGSV9USU1FT1VUICAgICAgICAgICBBIHRpbWVvdXQgb2NjdXJyZWQgZXhlY3V0aW5nIHRoZSBy ZXF1ZXN0Lg0KKyAgQHJldHZhbCBFRklfREVWSUNFX0VSUk9SICAgICAgVGhlIHJlcXVlc3QgZmFp bGVkIGR1ZSB0byBhIGRldmljZSBlcnJvci4NCisgIEByZXR2YWwgRUZJX0lOVkFMSURfUEFSQU1F VEVSIE9uZSBvZiB0aGUgcGFyYW1ldGVycyBoYXMgYW4gaW52YWxpZCB2YWx1ZS4NCisgIEByZXR2 YWwgRUZJX1VOU1VQUE9SVEVEICAgICAgIE5vdCBzdXBwb3J0ZWQuDQorKiovDQordHlwZWRlZg0K K0VGSV9TVEFUVVMNCisoRUZJQVBJICpFREtJSV9VU0JfRVRIRVJORVRfVU5ESV9HRVRfSU5JVF9J TkZPKSgNCisgIElOICBQWEVfQ0RCICAgICAqQ2RiLA0KKyAgSU4gIE5JQ19EQVRBICAgICpOaWMN CisgICk7DQorDQorLyoqDQorICBUaGlzIGNvbW1hbmQgaXMgdXNlZCB0byByZXRyaWV2ZSBjb25m aWd1cmF0aW9uIGluZm9ybWF0aW9uIGFib3V0DQorICB0aGUgTklDIGJlaW5nIGNvbnRyb2xsZWQg YnkgdGhlIFVOREkuDQorDQorICBAcGFyYW1baW5dICBDZGIgIEEgcG9pbnRlciB0byB0aGUgY29t bWFuZCBkZXNjcmlwdG9yIGJsb2NrLg0KKyAgQHBhcmFtW2luXSAgTmljICBBIHBvaW50ZXIgdG8g dGhlIE5ldHdvcmsgaW50ZXJmYWNlIGNvbnRyb2xsZXIgZGF0YS4NCisNCisgIEByZXR2YWwgRUZJ X1NVQ0NFU1MgICAgICAgICAgIFRoZSByZXF1ZXN0IGV4ZWN1dGVkIHN1Y2Nlc3NmdWxseS4NCisg IEByZXR2YWwgRUZJX1RJTUVPVVQgICAgICAgICAgIEEgdGltZW91dCBvY2N1cnJlZCBleGVjdXRp bmcgdGhlIHJlcXVlc3QuDQorICBAcmV0dmFsIEVGSV9ERVZJQ0VfRVJST1IgICAgICBUaGUgcmVx dWVzdCBmYWlsZWQgZHVlIHRvIGEgZGV2aWNlIGVycm9yLg0KKyAgQHJldHZhbCBFRklfSU5WQUxJ RF9QQVJBTUVURVIgT25lIG9mIHRoZSBwYXJhbWV0ZXJzIGhhcyBhbiBpbnZhbGlkIHZhbHVlLg0K KyAgQHJldHZhbCBFRklfVU5TVVBQT1JURUQgICAgICAgTm90IHN1cHBvcnRlZC4NCisqKi8NCit0 eXBlZGVmDQorRUZJX1NUQVRVUw0KKyhFRklBUEkgKkVES0lJX1VTQl9FVEhFUk5FVF9VTkRJX0dF VF9DT05GSUdfSU5GTykoDQorICBJTiAgUFhFX0NEQiAgICAgKkNkYiwNCisgIElOICBOSUNfREFU QSAgICAqTmljDQorICApOw0KKw0KKy8qKg0KKyAgVGhpcyBjb21tYW5kIHJlc2V0cyB0aGUgbmV0 d29yayBhZGFwdGVyIGFuZCBpbml0aWFsaXplcyBVTkRJIHVzaW5nDQorICB0aGUgcGFyYW1ldGVy cyBzdXBwbGllZCBpbiB0aGUgQ1BCLg0KKw0KKyAgQHBhcmFtW2luXSAgQ2RiICBBIHBvaW50ZXIg dG8gdGhlIGNvbW1hbmQgZGVzY3JpcHRvciBibG9jay4NCisgIEBwYXJhbVtpbl0gIE5pYyAgQSBw b2ludGVyIHRvIHRoZSBOZXR3b3JrIGludGVyZmFjZSBjb250cm9sbGVyIGRhdGEuDQorDQorICBA cmV0dmFsIEVGSV9TVUNDRVNTICAgICAgICAgICBUaGUgcmVxdWVzdCBleGVjdXRlZCBzdWNjZXNz ZnVsbHkuDQorICBAcmV0dmFsIEVGSV9USU1FT1VUICAgICAgICAgICBBIHRpbWVvdXQgb2NjdXJy ZWQgZXhlY3V0aW5nIHRoZSByZXF1ZXN0Lg0KKyAgQHJldHZhbCBFRklfREVWSUNFX0VSUk9SICAg ICAgVGhlIHJlcXVlc3QgZmFpbGVkIGR1ZSB0byBhIGRldmljZSBlcnJvci4NCisgIEByZXR2YWwg RUZJX0lOVkFMSURfUEFSQU1FVEVSIE9uZSBvZiB0aGUgcGFyYW1ldGVycyBoYXMgYW4gaW52YWxp ZCB2YWx1ZS4NCisgIEByZXR2YWwgRUZJX1VOU1VQUE9SVEVEICAgICAgIE5vdCBzdXBwb3J0ZWQu DQorKiovDQordHlwZWRlZg0KK0VGSV9TVEFUVVMNCisoRUZJQVBJICpFREtJSV9VU0JfRVRIRVJO RVRfVU5ESV9JTklUSUFMSVpFKSgNCisgIElOICBQWEVfQ0RCICAgKkNkYiwNCisgIElOICBOSUNf REFUQSAgKk5pYw0KKyAgKTsNCisNCisvKioNCisgIFRoaXMgY29tbWFuZCByZXNldHMgdGhlIG5l dHdvcmsgYWRhcHRlciBhbmQgcmVpbml0aWFsaXplcyB0aGUgVU5ESQ0KKyAgd2l0aCB0aGUgc2Ft ZSBwYXJhbWV0ZXJzIHByb3ZpZGVkIGluIHRoZSBJbml0aWFsaXplIGNvbW1hbmQuDQorDQorICBA cGFyYW1baW5dICBDZGIgIEEgcG9pbnRlciB0byB0aGUgY29tbWFuZCBkZXNjcmlwdG9yIGJsb2Nr Lg0KKyAgQHBhcmFtW2luXSAgTmljICBBIHBvaW50ZXIgdG8gdGhlIE5ldHdvcmsgaW50ZXJmYWNl IGNvbnRyb2xsZXIgZGF0YS4NCisNCisgIEByZXR2YWwgRUZJX1NVQ0NFU1MgICAgICAgICAgIFRo ZSByZXF1ZXN0IGV4ZWN1dGVkIHN1Y2Nlc3NmdWxseS4NCisgIEByZXR2YWwgRUZJX1RJTUVPVVQg ICAgICAgICAgIEEgdGltZW91dCBvY2N1cnJlZCBleGVjdXRpbmcgdGhlIHJlcXVlc3QuDQorICBA cmV0dmFsIEVGSV9ERVZJQ0VfRVJST1IgICAgICBUaGUgcmVxdWVzdCBmYWlsZWQgZHVlIHRvIGEg ZGV2aWNlIGVycm9yLg0KKyAgQHJldHZhbCBFRklfSU5WQUxJRF9QQVJBTUVURVIgT25lIG9mIHRo ZSBwYXJhbWV0ZXJzIGhhcyBhbiBpbnZhbGlkIHZhbHVlLg0KKyAgQHJldHZhbCBFRklfVU5TVVBQ T1JURUQgICAgICAgTm90IHN1cHBvcnRlZC4NCisqKi8NCit0eXBlZGVmDQorRUZJX1NUQVRVUw0K KyhFRklBUEkgKkVES0lJX1VTQl9FVEhFUk5FVF9VTkRJX1JFU0VUKSgNCisgIElOICBQWEVfQ0RC ICAgICAqQ2RiLA0KKyAgSU4gIE5JQ19EQVRBICAgICpOaWMNCisgICk7DQorDQorLyoqDQorICBU aGUgU2h1dGRvd24gY29tbWFuZCByZXNldHMgdGhlIG5ldHdvcmsgYWRhcHRlciBhbmQgbGVhdmVz IGl0IGluIGENCisgIHNhZmUgc3RhdGUgZm9yIGFub3RoZXIgZHJpdmVyIHRvIGluaXRpYWxpemUu DQorDQorICBAcGFyYW1baW5dICBDZGIgIEEgcG9pbnRlciB0byB0aGUgY29tbWFuZCBkZXNjcmlw dG9yIGJsb2NrLg0KKyAgQHBhcmFtW2luXSAgTmljICBBIHBvaW50ZXIgdG8gdGhlIE5ldHdvcmsg aW50ZXJmYWNlIGNvbnRyb2xsZXIgZGF0YS4NCisNCisgIEByZXR2YWwgRUZJX1NVQ0NFU1MgICAg ICAgICAgIFRoZSByZXF1ZXN0IGV4ZWN1dGVkIHN1Y2Nlc3NmdWxseS4NCisgIEByZXR2YWwgRUZJ X1RJTUVPVVQgICAgICAgICAgIEEgdGltZW91dCBvY2N1cnJlZCBleGVjdXRpbmcgdGhlIHJlcXVl c3QuDQorICBAcmV0dmFsIEVGSV9ERVZJQ0VfRVJST1IgICAgICBUaGUgcmVxdWVzdCBmYWlsZWQg ZHVlIHRvIGEgZGV2aWNlIGVycm9yLg0KKyAgQHJldHZhbCBFRklfSU5WQUxJRF9QQVJBTUVURVIg T25lIG9mIHRoZSBwYXJhbWV0ZXJzIGhhcyBhbiBpbnZhbGlkIHZhbHVlLg0KKyAgQHJldHZhbCBF RklfVU5TVVBQT1JURUQgICAgICAgTm90IHN1cHBvcnRlZC4NCisqKi8NCit0eXBlZGVmDQorRUZJ X1NUQVRVUw0KKyhFRklBUEkgKkVES0lJX1VTQl9FVEhFUk5FVF9VTkRJX1NIVVRET1dOKSgNCisg IElOICBQWEVfQ0RCICAgICAqQ2RiLA0KKyAgSU4gIE5JQ19EQVRBICAgICpOaWMNCisgICk7DQor DQorLyoqDQorICBUaGUgSW50ZXJydXB0IEVuYWJsZXMgY29tbWFuZCBjYW4gYmUgdXNlZCB0byBy ZWFkIGFuZC9vciBjaGFuZ2UNCisgIHRoZSBjdXJyZW50IGV4dGVybmFsIGludGVycnVwdCBlbmFi bGUgc2V0dGluZ3MuDQorDQorICBAcGFyYW1baW5dICBDZGIgIEEgcG9pbnRlciB0byB0aGUgY29t bWFuZCBkZXNjcmlwdG9yIGJsb2NrLg0KKyAgQHBhcmFtW2luXSAgTmljICBBIHBvaW50ZXIgdG8g dGhlIE5ldHdvcmsgaW50ZXJmYWNlIGNvbnRyb2xsZXIgZGF0YS4NCisNCisgIEByZXR2YWwgRUZJ X1NVQ0NFU1MgICAgICAgICAgIFRoZSByZXF1ZXN0IGV4ZWN1dGVkIHN1Y2Nlc3NmdWxseS4NCisg IEByZXR2YWwgRUZJX1RJTUVPVVQgICAgICAgICAgIEEgdGltZW91dCBvY2N1cnJlZCBleGVjdXRp bmcgdGhlIHJlcXVlc3QuDQorICBAcmV0dmFsIEVGSV9ERVZJQ0VfRVJST1IgICAgICBUaGUgcmVx dWVzdCBmYWlsZWQgZHVlIHRvIGEgZGV2aWNlIGVycm9yLg0KKyAgQHJldHZhbCBFRklfSU5WQUxJ RF9QQVJBTUVURVIgT25lIG9mIHRoZSBwYXJhbWV0ZXJzIGhhcyBhbiBpbnZhbGlkIHZhbHVlLg0K KyAgQHJldHZhbCBFRklfVU5TVVBQT1JURUQgICAgICAgTm90IHN1cHBvcnRlZC4NCisqKi8NCit0 eXBlZGVmDQorRUZJX1NUQVRVUw0KKyhFRklBUEkgKkVES0lJX1VTQl9FVEhFUk5FVF9VTkRJX0lO VEVSUlVQVF9FTkFCTEUpKA0KKyAgSU4gIFBYRV9DREIgICAgICpDZGIsDQorICBJTiAgTklDX0RB VEEgICAgKk5pYw0KKyAgKTsNCisNCisvKioNCisgIFRoaXMgY29tbWFuZCBpcyB1c2VkIHRvIHJl YWQgYW5kIGNoYW5nZSByZWNlaXZlIGZpbHRlcnMgYW5kLA0KKyAgaWYgc3VwcG9ydGVkLCByZWFk IGFuZCBjaGFuZ2UgdGhlIG11bHRpY2FzdCBNQUMgYWRkcmVzcyBmaWx0ZXIgbGlzdC4NCisNCisg IEBwYXJhbVtpbl0gIENkYiAgQSBwb2ludGVyIHRvIHRoZSBjb21tYW5kIGRlc2NyaXB0b3IgYmxv Y2suDQorICBAcGFyYW1baW5dICBOaWMgIEEgcG9pbnRlciB0byB0aGUgTmV0d29yayBpbnRlcmZh Y2UgY29udHJvbGxlciBkYXRhLg0KKw0KKyAgQHJldHZhbCBFRklfU1VDQ0VTUyAgICAgICAgICAg VGhlIHJlcXVlc3QgZXhlY3V0ZWQgc3VjY2Vzc2Z1bGx5Lg0KKyAgQHJldHZhbCBFRklfVElNRU9V VCAgICAgICAgICAgQSB0aW1lb3V0IG9jY3VycmVkIGV4ZWN1dGluZyB0aGUgcmVxdWVzdC4NCisg IEByZXR2YWwgRUZJX0RFVklDRV9FUlJPUiAgICAgIFRoZSByZXF1ZXN0IGZhaWxlZCBkdWUgdG8g YSBkZXZpY2UgZXJyb3IuDQorICBAcmV0dmFsIEVGSV9JTlZBTElEX1BBUkFNRVRFUiBPbmUgb2Yg dGhlIHBhcmFtZXRlcnMgaGFzIGFuIGludmFsaWQgdmFsdWUuDQorICBAcmV0dmFsIEVGSV9VTlNV UFBPUlRFRCAgICAgICBOb3Qgc3VwcG9ydGVkLg0KKyoqLw0KK3R5cGVkZWYNCitFRklfU1RBVFVT DQorKEVGSUFQSSAqRURLSUlfVVNCX0VUSEVSTkVUX1VORElfUkVDRUlWRV9GSUxURVIpKA0KKyAg SU4gIFBYRV9DREIgICAgICpDZGIsDQorICBJTiAgTklDX0RBVEEgICAgKk5pYw0KKyAgKTsNCisN CisvKioNCisgIFRoaXMgY29tbWFuZCBpcyB1c2VkIHRvIGdldCBjdXJyZW50IHN0YXRpb24gYW5k IGJyb2FkY2FzdCBNQUMgYWRkcmVzc2VzDQorICBhbmQsIGlmIHN1cHBvcnRlZCwgdG8gY2hhbmdl IHRoZSBjdXJyZW50IHN0YXRpb24gTUFDIGFkZHJlc3MuDQorDQorICBAcGFyYW1baW5dICBDZGIg IEEgcG9pbnRlciB0byB0aGUgY29tbWFuZCBkZXNjcmlwdG9yIGJsb2NrLg0KKyAgQHBhcmFtW2lu XSAgTmljICBBIHBvaW50ZXIgdG8gdGhlIE5ldHdvcmsgaW50ZXJmYWNlIGNvbnRyb2xsZXIgZGF0 YS4NCisNCisgIEByZXR2YWwgRUZJX1NVQ0NFU1MgICAgICAgICAgIFRoZSByZXF1ZXN0IGV4ZWN1 dGVkIHN1Y2Nlc3NmdWxseS4NCisgIEByZXR2YWwgRUZJX1RJTUVPVVQgICAgICAgICAgIEEgdGlt ZW91dCBvY2N1cnJlZCBleGVjdXRpbmcgdGhlIHJlcXVlc3QuDQorICBAcmV0dmFsIEVGSV9ERVZJ Q0VfRVJST1IgICAgICBUaGUgcmVxdWVzdCBmYWlsZWQgZHVlIHRvIGEgZGV2aWNlIGVycm9yLg0K KyAgQHJldHZhbCBFRklfSU5WQUxJRF9QQVJBTUVURVIgT25lIG9mIHRoZSBwYXJhbWV0ZXJzIGhh cyBhbiBpbnZhbGlkIHZhbHVlLg0KKyAgQHJldHZhbCBFRklfVU5TVVBQT1JURUQgICAgICAgTm90 IHN1cHBvcnRlZC4NCisqKi8NCit0eXBlZGVmDQorRUZJX1NUQVRVUw0KKyhFRklBUEkgKkVES0lJ X1VTQl9FVEhFUk5FVF9VTkRJX1NUQVRJT05fQUREUkVTUykoDQorICBJTiAgUFhFX0NEQiAgICAg KkNkYiwNCisgIElOICBOSUNfREFUQSAgICAqTmljDQorICApOw0KKw0KKy8qKg0KKyAgVGhpcyBj b21tYW5kIGlzIHVzZWQgdG8gcmVhZCBhbmQgY2xlYXIgdGhlIE5JQyB0cmFmZmljIHN0YXRpc3Rp Y3MuDQorDQorICBAcGFyYW1baW5dICBDZGIgIEEgcG9pbnRlciB0byB0aGUgY29tbWFuZCBkZXNj cmlwdG9yIGJsb2NrLg0KKyAgQHBhcmFtW2luXSAgTmljICBBIHBvaW50ZXIgdG8gdGhlIE5ldHdv cmsgaW50ZXJmYWNlIGNvbnRyb2xsZXIgZGF0YS4NCisNCisgIEByZXR2YWwgRUZJX1NVQ0NFU1Mg ICAgICAgICAgIFRoZSByZXF1ZXN0IGV4ZWN1dGVkIHN1Y2Nlc3NmdWxseS4NCisgIEByZXR2YWwg RUZJX1RJTUVPVVQgICAgICAgICAgIEEgdGltZW91dCBvY2N1cnJlZCBleGVjdXRpbmcgdGhlIHJl cXVlc3QuDQorICBAcmV0dmFsIEVGSV9ERVZJQ0VfRVJST1IgICAgICBUaGUgcmVxdWVzdCBmYWls ZWQgZHVlIHRvIGEgZGV2aWNlIGVycm9yLg0KKyAgQHJldHZhbCBFRklfSU5WQUxJRF9QQVJBTUVU RVIgT25lIG9mIHRoZSBwYXJhbWV0ZXJzIGhhcyBhbiBpbnZhbGlkIHZhbHVlLg0KKyAgQHJldHZh bCBFRklfVU5TVVBQT1JURUQgICAgICAgTm90IHN1cHBvcnRlZC4NCisqKi8NCit0eXBlZGVmDQor RUZJX1NUQVRVUw0KKyhFRklBUEkgKkVES0lJX1VTQl9FVEhFUk5FVF9VTkRJX1NUQVRJU1RJQ1Mp KA0KKyAgSU4gIFBYRV9DREIgICAgICpDZGIsDQorICBJTiAgTklDX0RBVEEgICAgKk5pYw0KKyAg KTsNCisNCisvKioNCisgIFRyYW5zbGF0ZSBhIG11bHRpY2FzdCBJUHY0IG9yIElQdjYgYWRkcmVz cyB0byBhIG11bHRpY2FzdCBNQUMgYWRkcmVzcy4NCisNCisgIEBwYXJhbVtpbl0gIENkYiAgQSBw b2ludGVyIHRvIHRoZSBjb21tYW5kIGRlc2NyaXB0b3IgYmxvY2suDQorICBAcGFyYW1baW5dICBO aWMgIEEgcG9pbnRlciB0byB0aGUgTmV0d29yayBpbnRlcmZhY2UgY29udHJvbGxlciBkYXRhLg0K Kw0KKyAgQHJldHZhbCBFRklfU1VDQ0VTUyAgICAgICAgICAgVGhlIHJlcXVlc3QgZXhlY3V0ZWQg c3VjY2Vzc2Z1bGx5Lg0KKyAgQHJldHZhbCBFRklfVElNRU9VVCAgICAgICAgICAgQSB0aW1lb3V0 IG9jY3VycmVkIGV4ZWN1dGluZyB0aGUgcmVxdWVzdC4NCisgIEByZXR2YWwgRUZJX0RFVklDRV9F UlJPUiAgICAgIFRoZSByZXF1ZXN0IGZhaWxlZCBkdWUgdG8gYSBkZXZpY2UgZXJyb3IuDQorICBA cmV0dmFsIEVGSV9JTlZBTElEX1BBUkFNRVRFUiBPbmUgb2YgdGhlIHBhcmFtZXRlcnMgaGFzIGFu IGludmFsaWQgdmFsdWUuDQorICBAcmV0dmFsIEVGSV9VTlNVUFBPUlRFRCAgICAgICBOb3Qgc3Vw cG9ydGVkLg0KKyoqLw0KK3R5cGVkZWYNCitFRklfU1RBVFVTDQorKEVGSUFQSSAqRURLSUlfVVNC X0VUSEVSTkVUX1VORElfTUNBU1RfSVBUT01BQykoDQorICBJTiAgUFhFX0NEQiAgICAgKkNkYiwN CisgIElOICBOSUNfREFUQSAgICAqTmljDQorICApOw0KKw0KKy8qKg0KKyAgVGhpcyBjb21tYW5k IGlzIHVzZWQgdG8gcmVhZCBhbmQgd3JpdGUgKGlmIHN1cHBvcnRlZCBieSBOSUMgSC9XKQ0KKyAg bm9udm9sYXRpbGUgc3RvcmFnZSBvbiB0aGUgTklDLg0KKw0KKyAgQHBhcmFtW2luXSAgQ2RiICBB IHBvaW50ZXIgdG8gdGhlIGNvbW1hbmQgZGVzY3JpcHRvciBibG9jay4NCisgIEBwYXJhbVtpbl0g IE5pYyAgQSBwb2ludGVyIHRvIHRoZSBOZXR3b3JrIGludGVyZmFjZSBjb250cm9sbGVyIGRhdGEu DQorDQorICBAcmV0dmFsIEVGSV9TVUNDRVNTICAgICAgICAgICBUaGUgcmVxdWVzdCBleGVjdXRl ZCBzdWNjZXNzZnVsbHkuDQorICBAcmV0dmFsIEVGSV9USU1FT1VUICAgICAgICAgICBBIHRpbWVv dXQgb2NjdXJyZWQgZXhlY3V0aW5nIHRoZSByZXF1ZXN0Lg0KKyAgQHJldHZhbCBFRklfREVWSUNF X0VSUk9SICAgICAgVGhlIHJlcXVlc3QgZmFpbGVkIGR1ZSB0byBhIGRldmljZSBlcnJvci4NCisg IEByZXR2YWwgRUZJX0lOVkFMSURfUEFSQU1FVEVSIE9uZSBvZiB0aGUgcGFyYW1ldGVycyBoYXMg YW4gaW52YWxpZCB2YWx1ZS4NCisgIEByZXR2YWwgRUZJX1VOU1VQUE9SVEVEICAgICAgIE5vdCBz dXBwb3J0ZWQuDQorKiovDQordHlwZWRlZg0KK0VGSV9TVEFUVVMNCisoRUZJQVBJICpFREtJSV9V U0JfRVRIRVJORVRfVU5ESV9OVl9EQVRBKSgNCisgIElOICBQWEVfQ0RCICAgICAqQ2RiLA0KKyAg SU4gIE5JQ19EQVRBICAgICpOaWMNCisgICk7DQorDQorLyoqDQorICBUaGlzIGNvbW1hbmQgcmV0 dXJucyB0aGUgY3VycmVudCBpbnRlcnJ1cHQgc3RhdHVzIGFuZC9vciB0aGUNCisgIHRyYW5zbWl0 dGVkIGJ1ZmZlciBhZGRyZXNzZXMgYW5kIHRoZSBjdXJyZW50IG1lZGlhIHN0YXR1cy4NCisNCisg IEBwYXJhbVtpbl0gIENkYiAgQSBwb2ludGVyIHRvIHRoZSBjb21tYW5kIGRlc2NyaXB0b3IgYmxv Y2suDQorICBAcGFyYW1baW5dICBOaWMgIEEgcG9pbnRlciB0byB0aGUgTmV0d29yayBpbnRlcmZh Y2UgY29udHJvbGxlciBkYXRhLg0KKw0KKyAgQHJldHZhbCBFRklfU1VDQ0VTUyAgICAgICAgICAg VGhlIHJlcXVlc3QgZXhlY3V0ZWQgc3VjY2Vzc2Z1bGx5Lg0KKyAgQHJldHZhbCBFRklfVElNRU9V VCAgICAgICAgICAgQSB0aW1lb3V0IG9jY3VycmVkIGV4ZWN1dGluZyB0aGUgcmVxdWVzdC4NCisg IEByZXR2YWwgRUZJX0RFVklDRV9FUlJPUiAgICAgIFRoZSByZXF1ZXN0IGZhaWxlZCBkdWUgdG8g YSBkZXZpY2UgZXJyb3IuDQorICBAcmV0dmFsIEVGSV9JTlZBTElEX1BBUkFNRVRFUiBPbmUgb2Yg dGhlIHBhcmFtZXRlcnMgaGFzIGFuIGludmFsaWQgdmFsdWUuDQorICBAcmV0dmFsIEVGSV9VTlNV UFBPUlRFRCAgICAgICBOb3Qgc3VwcG9ydGVkLg0KKyoqLw0KK3R5cGVkZWYNCitFRklfU1RBVFVT DQorKEVGSUFQSSAqRURLSUlfVVNCX0VUSEVSTkVUX1VORElfR0VUX1NUQVRVUykoDQorICBJTiAg UFhFX0NEQiAgICAgKkNkYiwNCisgIElOICBOSUNfREFUQSAgICAqTmljDQorICApOw0KKw0KKy8q Kg0KKyAgVGhpcyBjb21tYW5kIGlzIHVzZWQgdG8gZmlsbCB0aGUgbWVkaWEgaGVhZGVyKHMpIGlu IHRyYW5zbWl0IHBhY2tldChzKS4NCisNCisgIEBwYXJhbVtpbl0gIENkYiAgQSBwb2ludGVyIHRv IHRoZSBjb21tYW5kIGRlc2NyaXB0b3IgYmxvY2suDQorICBAcGFyYW1baW5dICBOaWMgIEEgcG9p bnRlciB0byB0aGUgTmV0d29yayBpbnRlcmZhY2UgY29udHJvbGxlciBkYXRhLg0KKw0KKyAgQHJl dHZhbCBFRklfU1VDQ0VTUyAgICAgICAgICAgVGhlIHJlcXVlc3QgZXhlY3V0ZWQgc3VjY2Vzc2Z1 bGx5Lg0KKyAgQHJldHZhbCBFRklfVElNRU9VVCAgICAgICAgICAgQSB0aW1lb3V0IG9jY3VycmVk IGV4ZWN1dGluZyB0aGUgcmVxdWVzdC4NCisgIEByZXR2YWwgRUZJX0RFVklDRV9FUlJPUiAgICAg IFRoZSByZXF1ZXN0IGZhaWxlZCBkdWUgdG8gYSBkZXZpY2UgZXJyb3IuDQorICBAcmV0dmFsIEVG SV9JTlZBTElEX1BBUkFNRVRFUiBPbmUgb2YgdGhlIHBhcmFtZXRlcnMgaGFzIGFuIGludmFsaWQg dmFsdWUuDQorICBAcmV0dmFsIEVGSV9VTlNVUFBPUlRFRCAgICAgICBOb3Qgc3VwcG9ydGVkLg0K KyoqLw0KK3R5cGVkZWYNCitFRklfU1RBVFVTDQorKEVGSUFQSSAqRURLSUlfVVNCX0VUSEVSTkVU X1VORElfRklMTF9IRUFERVIpKA0KKyAgSU4gIFBYRV9DREIgICAgICpDZGIsDQorICBJTiAgTklD X0RBVEEgICAgKk5pYw0KKyAgKTsNCisNCisvKioNCisgIFRoZSBUcmFuc21pdCBjb21tYW5kIGlz IHVzZWQgdG8gcGxhY2UgYSBwYWNrZXQgaW50byB0aGUgdHJhbnNtaXQgcXVldWUuDQorDQorICBA cGFyYW1baW5dICBDZGIgIEEgcG9pbnRlciB0byB0aGUgY29tbWFuZCBkZXNjcmlwdG9yIGJsb2Nr Lg0KKyAgQHBhcmFtW2luXSAgTmljICBBIHBvaW50ZXIgdG8gdGhlIE5ldHdvcmsgaW50ZXJmYWNl IGNvbnRyb2xsZXIgZGF0YS4NCisNCisgIEByZXR2YWwgRUZJX1NVQ0NFU1MgICAgICAgICAgIFRo ZSByZXF1ZXN0IGV4ZWN1dGVkIHN1Y2Nlc3NmdWxseS4NCisgIEByZXR2YWwgRUZJX1RJTUVPVVQg ICAgICAgICAgIEEgdGltZW91dCBvY2N1cnJlZCBleGVjdXRpbmcgdGhlIHJlcXVlc3QuDQorICBA cmV0dmFsIEVGSV9ERVZJQ0VfRVJST1IgICAgICBUaGUgcmVxdWVzdCBmYWlsZWQgZHVlIHRvIGEg ZGV2aWNlIGVycm9yLg0KKyAgQHJldHZhbCBFRklfSU5WQUxJRF9QQVJBTUVURVIgT25lIG9mIHRo ZSBwYXJhbWV0ZXJzIGhhcyBhbiBpbnZhbGlkIHZhbHVlLg0KKyAgQHJldHZhbCBFRklfVU5TVVBQ T1JURUQgICAgICAgTm90IHN1cHBvcnRlZC4NCisqKi8NCit0eXBlZGVmDQorRUZJX1NUQVRVUw0K KyhFRklBUEkgKkVES0lJX1VTQl9FVEhFUk5FVF9VTkRJX1RSQU5TTUlUKSgNCisgIElOICBQWEVf Q0RCICAgICAqQ2RiLA0KKyAgSU4gIE5JQ19EQVRBICAgICpOaWMNCisgICk7DQorDQorLyoqDQor ICBXaGVuIHRoZSBuZXR3b3JrIGFkYXB0ZXIgaGFzIHJlY2VpdmVkIGEgZnJhbWUsIHRoaXMgY29t bWFuZCBpcyB1c2VkDQorICB0byBjb3B5IHRoZSBmcmFtZSBpbnRvIGRyaXZlci9hcHBsaWNhdGlv biBzdG9yYWdlLg0KKw0KKyAgQHBhcmFtW2luXSAgQ2RiICBBIHBvaW50ZXIgdG8gdGhlIGNvbW1h bmQgZGVzY3JpcHRvciBibG9jay4NCisgIEBwYXJhbVtpbl0gIE5pYyAgQSBwb2ludGVyIHRvIHRo ZSBOZXR3b3JrIGludGVyZmFjZSBjb250cm9sbGVyIGRhdGEuDQorDQorICBAcmV0dmFsIEVGSV9T VUNDRVNTICAgICAgICAgICBUaGUgcmVxdWVzdCBleGVjdXRlZCBzdWNjZXNzZnVsbHkuDQorICBA cmV0dmFsIEVGSV9USU1FT1VUICAgICAgICAgICBBIHRpbWVvdXQgb2NjdXJyZWQgZXhlY3V0aW5n IHRoZSByZXF1ZXN0Lg0KKyAgQHJldHZhbCBFRklfREVWSUNFX0VSUk9SICAgICAgVGhlIHJlcXVl c3QgZmFpbGVkIGR1ZSB0byBhIGRldmljZSBlcnJvci4NCisgIEByZXR2YWwgRUZJX0lOVkFMSURf UEFSQU1FVEVSIE9uZSBvZiB0aGUgcGFyYW1ldGVycyBoYXMgYW4gaW52YWxpZCB2YWx1ZS4NCisg IEByZXR2YWwgRUZJX1VOU1VQUE9SVEVEICAgICAgIE5vdCBzdXBwb3J0ZWQuDQorKiovDQordHlw ZWRlZg0KK0VGSV9TVEFUVVMNCisoRUZJQVBJICpFREtJSV9VU0JfRVRIRVJORVRfVU5ESV9SRUNF SVZFKSgNCisgIElOICBQWEVfQ0RCICAgICAqQ2RiLA0KKyAgSU4gIE5JQ19EQVRBICAgICpOaWMN CisgICk7DQorDQorLyoqDQorICBUaGlzIGNvbW1hbmQgcmVzZXRzIHRoZSBuZXR3b3JrIGFkYXB0 ZXIgYW5kIGluaXRpYWxpemVzIFVOREkgdXNpbmcNCisgIHRoZSBwYXJhbWV0ZXJzIHN1cHBsaWVk IGluIHRoZSBDUEIuDQorDQorICBAcGFyYW1baW5dICAgICAgQ2RiICBBIHBvaW50ZXIgdG8gdGhl IGNvbW1hbmQgZGVzY3JpcHRvciBibG9jay4NCisgIEBwYXJhbVtpbiwgb3V0XSBOaWMgIEEgcG9p bnRlciB0byB0aGUgTmV0d29yayBpbnRlcmZhY2UgY29udHJvbGxlciBkYXRhLg0KKw0KKyAgQHJl dHZhbCBFRklfU1VDQ0VTUyAgICAgICAgICAgVGhlIHJlcXVlc3QgZXhlY3V0ZWQgc3VjY2Vzc2Z1 bGx5Lg0KKyAgQHJldHZhbCBFRklfVElNRU9VVCAgICAgICAgICAgQSB0aW1lb3V0IG9jY3VycmVk IGV4ZWN1dGluZyB0aGUgcmVxdWVzdC4NCisgIEByZXR2YWwgRUZJX0RFVklDRV9FUlJPUiAgICAg IFRoZSByZXF1ZXN0IGZhaWxlZCBkdWUgdG8gYSBkZXZpY2UgZXJyb3IuDQorICBAcmV0dmFsIEVG SV9JTlZBTElEX1BBUkFNRVRFUiBPbmUgb2YgdGhlIHBhcmFtZXRlcnMgaGFzIGFuIGludmFsaWQg dmFsdWUuDQorICBAcmV0dmFsIEVGSV9VTlNVUFBPUlRFRCAgICAgICBOb3Qgc3VwcG9ydGVkLg0K KyoqLw0KK3R5cGVkZWYNCitFRklfU1RBVFVTDQorKEVGSUFQSSAqRURLSUlfVVNCX0VUSEVSTkVU X0lOSVRJQUxJWkUpKA0KKyAgSU4gICAgICBQWEVfQ0RCICAgKkNkYiwNCisgIElOIE9VVCAgTklD X0RBVEEgICpOaWMNCisgICk7DQorDQorLyoqDQorICBUaGlzIGNvbW1hbmQgaXMgdXNlZCB0byBy ZWFkIGFuZCBjbGVhciB0aGUgTklDIHRyYWZmaWMgc3RhdGlzdGljcy4NCisNCisgIEBwYXJhbVtp bl0gIE5pYyAgICAgQSBwb2ludGVyIHRvIHRoZSBOZXR3b3JrIGludGVyZmFjZSBjb250cm9sbGVy IGRhdGEuDQorICBAcGFyYW1baW5dICBEYkFkZHIgIERhdGEgQmxvY2sgQWRkcmVzcy4NCisgIEBw YXJhbVtpbl0gIERiU2l6ZSAgRGF0YSBCbG9jayBTaXplLg0KKw0KKyAgQHJldHZhbCBFRklfU1VD Q0VTUyAgICAgICAgICAgVGhlIHJlcXVlc3QgZXhlY3V0ZWQgc3VjY2Vzc2Z1bGx5Lg0KKyAgQHJl dHZhbCBFRklfVElNRU9VVCAgICAgICAgICAgQSB0aW1lb3V0IG9jY3VycmVkIGV4ZWN1dGluZyB0 aGUgcmVxdWVzdC4NCisgIEByZXR2YWwgRUZJX0RFVklDRV9FUlJPUiAgICAgIFRoZSByZXF1ZXN0 IGZhaWxlZCBkdWUgdG8gYSBkZXZpY2UgZXJyb3IuDQorICBAcmV0dmFsIEVGSV9JTlZBTElEX1BB UkFNRVRFUiBPbmUgb2YgdGhlIHBhcmFtZXRlcnMgaGFzIGFuIGludmFsaWQgdmFsdWUuDQorICBA cmV0dmFsIEVGSV9VTlNVUFBPUlRFRCAgICAgICBOb3Qgc3VwcG9ydGVkLg0KKyoqLw0KK3R5cGVk ZWYNCitFRklfU1RBVFVTDQorKEVGSUFQSSAqRURLSUlfVVNCX0VUSEVSTkVUX1NUQVRJU1RJQ1Mp KA0KKyAgSU4gIE5JQ19EQVRBICAgICpOaWMsDQorICBJTiAgVUlOVDY0ICAgICAgRGJBZGRyLA0K KyAgSU4gIFVJTlQxNiAgICAgIERiU2l6ZQ0KKyAgKTsNCisNCisvKioNCisgIFRoaXMgZnVuY3Rp b24gaXMgdXNlZCB0byBtYW5hZ2UgYSBVU0IgZGV2aWNlIHdpdGggdGhlIGJ1bGsgdHJhbnNmZXIg cGlwZS4gVGhlIGVuZHBvaW50IGlzIEJ1bGsgaW4uDQorDQorICBAcGFyYW1baW5dICAgICAgQ2Ri ICAgICAgICAgICBBIHBvaW50ZXIgdG8gdGhlIGNvbW1hbmQgZGVzY3JpcHRvciBibG9jay4NCisg IEBwYXJhbVtpbl0gICAgICBUaGlzICAgICAgICAgIEEgcG9pbnRlciB0byB0aGUgRURLSUlfVVNC X0VUSEVSTkVUX1BST1RPQ09MIGluc3RhbmNlLg0KKyAgQHBhcmFtW2luLCBvdXRdIFBhY2tldCAg ICAgICAgQSBwb2ludGVyIHRvIHRoZSBidWZmZXIgb2YgZGF0YSB0aGF0IHdpbGwgYmUgdHJhbnNt aXR0ZWQgdG8gVVNCDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZXZpY2Ugb3Ig cmVjZWl2ZWQgZnJvbSBVU0IgZGV2aWNlLg0KKyAgQHBhcmFtW2luLCBvdXRdIFBhY2tldExlbmd0 aCAgQSBwb2ludGVyIHRvIHRoZSBQYWNrZXRMZW5ndGguDQorDQorICBAcmV0dmFsIEVGSV9TVUND RVNTICAgICAgICAgICBUaGUgYnVsayB0cmFuc2ZlciBoYXMgYmVlbiBzdWNjZXNzZnVsbHkgZXhl Y3V0ZWQuDQorICBAcmV0dmFsIEVGSV9ERVZJQ0VfRVJST1IgICAgICBUaGUgdHJhbnNmZXIgZmFp bGVkLiBUaGUgdHJhbnNmZXIgc3RhdHVzIGlzIHJldHVybmVkIGluIHN0YXR1cy4NCisgIEByZXR2 YWwgRUZJX0lOVkFMSURfUEFSQU1FVEVSIE9uZSBvciBtb3JlIHBhcmFtZXRlcnMgYXJlIGludmFs aWQuDQorICBAcmV0dmFsIEVGSV9PVVRfT0ZfUkVTT1VSQ0VTICBUaGUgcmVxdWVzdCBjb3VsZCBu b3QgYmUgc3VibWl0dGVkIGR1ZSB0byBhIGxhY2sgb2YgcmVzb3VyY2VzLg0KKyAgQHJldHZhbCBF RklfVElNRU9VVCAgICAgICAgICAgVGhlIGNvbnRyb2wgdHJhbnNmZXIgZmFpbHMgZHVlIHRvIHRp bWVvdXQuDQorKiovDQordHlwZWRlZg0KK0VGSV9TVEFUVVMNCisoRUZJQVBJICpFREtJSV9VU0Jf RVRIRVJORVRfUkVDRUlWRSkoDQorICBJTiAgICAgUFhFX0NEQiAgICAgICAgICAgICAgICpDZGIs DQorICBJTiAgICAgRURLSUlfVVNCX0VUSEVSTkVUX1BST1RPQ09MICpUaGlzLA0KKyAgSU4gT1VU IFZPSUQgICAgICAgICAgICAgICAgICAqUGFja2V0LA0KKyAgSU4gT1VUIFVJTlROICAgICAgICAg ICAgICAgICAqUGFja2V0TGVuZ3RoDQorICApOw0KKw0KKy8qKg0KKyAgVGhpcyBmdW5jdGlvbiBp cyB1c2VkIHRvIG1hbmFnZSBhIFVTQiBkZXZpY2Ugd2l0aCB0aGUgYnVsayB0cmFuc2ZlciBwaXBl LiBUaGUgZW5kcG9pbnQgaXMgQnVsayBvdXQuDQorDQorICBAcGFyYW1baW5dICAgICAgQ2RiICAg ICAgICAgICBBIHBvaW50ZXIgdG8gdGhlIGNvbW1hbmQgZGVzY3JpcHRvciBibG9jay4NCisgIEBw YXJhbVtpbl0gICAgICBUaGlzICAgICAgICAgIEEgcG9pbnRlciB0byB0aGUgRURLSUlfVVNCX0VU SEVSTkVUX1BST1RPQ09MIGluc3RhbmNlLg0KKyAgQHBhcmFtW2luLCBvdXRdIFBhY2tldCAgICAg ICAgQSBwb2ludGVyIHRvIHRoZSBidWZmZXIgb2YgZGF0YSB0aGF0IHdpbGwgYmUgdHJhbnNtaXR0 ZWQgdG8gVVNCDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZXZpY2Ugb3IgcmVj ZWl2ZWQgZnJvbSBVU0IgZGV2aWNlLg0KKyAgQHBhcmFtW2luLCBvdXRdIFBhY2tldExlbmd0aCAg QSBwb2ludGVyIHRvIHRoZSBQYWNrZXRMZW5ndGguDQorDQorICBAcmV0dmFsIEVGSV9TVUNDRVNT ICAgICAgICAgICBUaGUgYnVsayB0cmFuc2ZlciBoYXMgYmVlbiBzdWNjZXNzZnVsbHkgZXhlY3V0 ZWQuDQorICBAcmV0dmFsIEVGSV9ERVZJQ0VfRVJST1IgICAgICBUaGUgdHJhbnNmZXIgZmFpbGVk LiBUaGUgdHJhbnNmZXIgc3RhdHVzIGlzIHJldHVybmVkIGluIHN0YXR1cy4NCisgIEByZXR2YWwg RUZJX0lOVkFMSURfUEFSQU1FVEVSIE9uZSBvciBtb3JlIHBhcmFtZXRlcnMgYXJlIGludmFsaWQu DQorICBAcmV0dmFsIEVGSV9PVVRfT0ZfUkVTT1VSQ0VTICBUaGUgcmVxdWVzdCBjb3VsZCBub3Qg YmUgc3VibWl0dGVkIGR1ZSB0byBhIGxhY2sgb2YgcmVzb3VyY2VzLg0KKyAgQHJldHZhbCBFRklf VElNRU9VVCAgICAgICAgICAgVGhlIGNvbnRyb2wgdHJhbnNmZXIgZmFpbHMgZHVlIHRvIHRpbWVv dXQuDQorKiovDQordHlwZWRlZg0KK0VGSV9TVEFUVVMNCisoRUZJQVBJICpFREtJSV9VU0JfRVRI RVJORVRfVFJBTlNNSVQpKA0KKyAgSU4gICAgIFBYRV9DREIgICAgICAgICAgICAgICAqQ2RiLA0K KyAgSU4gICAgIEVES0lJX1VTQl9FVEhFUk5FVF9QUk9UT0NPTCAqVGhpcywNCisgIElOIE9VVCBW T0lEICAgICAgICAgICAgICAgICAgKlBhY2tldCwNCisgIElOIE9VVCBVSU5UTiAgICAgICAgICAg ICAgICAgKlBhY2tldExlbmd0aA0KKyAgKTsNCisNCisvKioNCisgIFRoaXMgZnVuY3Rpb24gaXMg dXNlZCB0byBtYW5hZ2UgYSBVU0IgZGV2aWNlIHdpdGggYW4gaW50ZXJydXB0IHRyYW5zZmVyIHBp cGUuDQorDQorICBAcGFyYW1baW5dICBUaGlzICAgICAgICAgICAgICBBIHBvaW50ZXIgdG8gdGhl IEVES0lJX1VTQl9FVEhFUk5FVF9QUk9UT0NPTCBpbnN0YW5jZS4NCisgIEBwYXJhbVtpbl0gIElz TmV3VHJhbnNmZXIgICAgIElmIFRSVUUsIGEgbmV3IHRyYW5zZmVyIHdpbGwgYmUgc3VibWl0dGVk IHRvIFVTQiBjb250cm9sbGVyLiBJZg0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg RkFMU0UsIHRoZSBpbnRlcnJ1cHQgdHJhbnNmZXIgaXMgZGVsZXRlZCBmcm9tIHRoZSBkZXZpY2Un cyBpbnRlcnJ1cHQNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRyYW5zZmVyIHF1 ZXVlLg0KKyAgQHBhcmFtW2luXSAgUG9sbGluZ0ludGVydmFsICAgSW5kaWNhdGVzIHRoZSBwZXJp b2RpYyByYXRlLCBpbiBtaWxsaXNlY29uZHMsIHRoYXQgdGhlIHRyYW5zZmVyIGlzIHRvIGJlDQor ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBleGVjdXRlZC5UaGlzIHBhcmFtZXRlciBp cyByZXF1aXJlZCB3aGVuIElzTmV3VHJhbnNmZXIgaXMgVFJVRS4gVGhlDQorICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICB2YWx1ZSBtdXN0IGJlIGJldHdlZW4gMSB0byAyNTUsIG90aGVy d2lzZSBFRklfSU5WQUxJRF9QQVJBTUVURVIgaXMgcmV0dXJuZWQuDQorICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBUaGUgdW5pdHMgYXJlIGluIG1pbGxpc2Vjb25kcy4NCisgIEBwYXJh bVtpbl0gIFJlcXVlc3QgICAgICAgICAgIEEgcG9pbnRlciB0byB0aGUgRUZJX1VTQl9ERVZJQ0Vf UkVRVUVTVCBkYXRhLg0KKw0KKyAgQHJldHZhbCBFRklfU1VDQ0VTUyAgICAgICAgICAgVGhlIGFz eW5jaHJvbm91cyBVU0IgdHJhbnNmZXIgcmVxdWVzdCB0cmFuc2ZlciBoYXMgYmVlbiBzdWNjZXNz ZnVsbHkgZXhlY3V0ZWQuDQorICBAcmV0dmFsIEVGSV9ERVZJQ0VfRVJST1IgICAgICBUaGUgYXN5 bmNocm9ub3VzIFVTQiB0cmFuc2ZlciByZXF1ZXN0IGZhaWxlZC4NCisNCisqKi8NCit0eXBlZGVm DQorRUZJX1NUQVRVUw0KKyhFRklBUEkgKkVES0lJX1VTQl9FVEhFUk5FVF9JTlRFUlJVUFQpKA0K KyAgSU4gRURLSUlfVVNCX0VUSEVSTkVUX1BST1RPQ09MICAgKlRoaXMsDQorICBJTiBCT09MRUFO ICAgICAgICAgICAgICAgICBJc05ld1RyYW5zZmVyLA0KKyAgSU4gVUlOVE4gICAgICAgICAgICAg ICAgICAgUG9sbGluZ0ludGVydmFsLA0KKyAgSU4gRUZJX1VTQl9ERVZJQ0VfUkVRVUVTVCAgKlJl cXVlc3QNCisgICk7DQorDQorLyoqDQorICBSZXRyaWV2ZXMgdGhlIFVTQiBFdGhlcm5ldCBNYWMg QWRkcmVzcy4NCisNCisgIEBwYXJhbVtpbl0gIFRoaXMgICAgICAgICAgQSBwb2ludGVyIHRvIHRo ZSBFREtJSV9VU0JfRVRIRVJORVRfUFJPVE9DT0wgaW5zdGFuY2UuDQorICBAcGFyYW1bb3V0XSBN YWNBZGRyZXNzICAgIEEgcG9pbnRlciB0byB0aGUgY2FsbGVyIGFsbG9jYXRlZCBVU0IgRXRoZXJu ZXQgTWFjIEFkZHJlc3MuDQorDQorICBAcmV0dmFsIEVGSV9TVUNDRVNTICAgICAgICAgICBUaGUg VVNCIEhlYWRlciBGdW5jdGlvbmFsIGRlc2NyaXB0b3Igd2FzIHJldHJpZXZlZCBzdWNjZXNzZnVs bHkuDQorICBAcmV0dmFsIEVGSV9JTlZBTElEX1BBUkFNRVRFUiBVc2JIZWFkZXJGdW5EZXNjcmlw dG9yIGlzIE5VTEwuDQorICBAcmV0dmFsIEVGSV9OT1RfRk9VTkQgICAgICAgICBUaGUgVVNCIEhl YWRlciBGdW5jdGlvbmFsIGRlc2NyaXB0b3Igd2FzIG5vdCBmb3VuZC4NCisqKi8NCit0eXBlZGVm DQorRUZJX1NUQVRVUw0KKyhFRklBUEkgKkVES0lJX1VTQl9HRVRfRVRIX01BQ19BRERSRVNTKSgN CisgIElOICBFREtJSV9VU0JfRVRIRVJORVRfUFJPVE9DT0wgKlRoaXMsDQorICBPVVQgRUZJX01B Q19BRERSRVNTICAgICAgICpNYWNBZGRyZXNzDQorICApOw0KKw0KKy8qKg0KKyAgUmV0cmlldmVz IHRoZSBVU0IgRXRoZXJuZXQgQnVsayB0cmFuc2ZlciBkYXRhIHNpemUuDQorDQorICBAcGFyYW1b aW5dICBUaGlzICAgICAgICAgIEEgcG9pbnRlciB0byB0aGUgRURLSUlfVVNCX0VUSEVSTkVUX1BS T1RPQ09MIGluc3RhbmNlLg0KKyAgQHBhcmFtW291dF0gQnVsa1NpemUgICAgICBBIHBvaW50ZXIg dG8gdGhlIEJ1bGsgdHJhbnNmZXIgZGF0YSBzaXplLg0KKw0KKyAgQHJldHZhbCBFRklfU1VDQ0VT UyAgICAgICAgICAgVGhlIFVTQiBIZWFkZXIgRnVuY3Rpb25hbCBkZXNjcmlwdG9yIHdhcyByZXRy aWV2ZWQgc3VjY2Vzc2Z1bGx5Lg0KKyAgQHJldHZhbCBFRklfSU5WQUxJRF9QQVJBTUVURVIgVXNi SGVhZGVyRnVuRGVzY3JpcHRvciBpcyBOVUxMLg0KKyAgQHJldHZhbCBFRklfTk9UX0ZPVU5EICAg ICAgICAgVGhlIFVTQiBIZWFkZXIgRnVuY3Rpb25hbCBkZXNjcmlwdG9yIHdhcyBub3QgZm91bmQu DQorKiovDQordHlwZWRlZg0KK0VGSV9TVEFUVVMNCisoRUZJQVBJICpFREtJSV9VU0JfRVRIX01B WF9CVUxLX1NJWkUpKA0KKyAgSU4gIEVES0lJX1VTQl9FVEhFUk5FVF9QUk9UT0NPTCAqVGhpcywN CisgIE9VVCBVSU5UTiAgICAgICAgICAgICAgICAgKkJ1bGtTaXplDQorICApOw0KKw0KKy8qKg0K KyAgUmV0cmlldmVzIHRoZSBVU0IgSGVhZGVyIGZ1bmN0aW9uYWwgRGVzY3JpcHRvci4NCisNCisg IEBwYXJhbVtpbl0gIFRoaXMgICAgICAgICAgICAgICAgICAgQSBwb2ludGVyIHRvIHRoZSBFREtJ SV9VU0JfRVRIRVJORVRfUFJPVE9DT0wgaW5zdGFuY2UuDQorICBAcGFyYW1bb3V0XSBVc2JIZWFk ZXJGdW5EZXNjcmlwdG9yIEEgcG9pbnRlciB0byB0aGUgY2FsbGVyIGFsbG9jYXRlZCBVU0IgSGVh ZGVyIEZ1bmN0aW9uYWwgRGVzY3JpcHRvci4NCisNCisgIEByZXR2YWwgRUZJX1NVQ0NFU1MgICAg ICAgICAgIFRoZSBVU0IgSGVhZGVyIEZ1bmN0aW9uYWwgZGVzY3JpcHRvciB3YXMgcmV0cmlldmVk IHN1Y2Nlc3NmdWxseS4NCisgIEByZXR2YWwgRUZJX0lOVkFMSURfUEFSQU1FVEVSIFVzYkhlYWRl ckZ1bkRlc2NyaXB0b3IgaXMgTlVMTC4NCisgIEByZXR2YWwgRUZJX05PVF9GT1VORCAgICAgICAg IFRoZSBVU0IgSGVhZGVyIEZ1bmN0aW9uYWwgZGVzY3JpcHRvciB3YXMgbm90IGZvdW5kLg0KKyoq Lw0KK3R5cGVkZWYNCitFRklfU1RBVFVTDQorKEVGSUFQSSAqRURLSUlfVVNCX0hFQURFUl9GVU5D VElPTkFMX0RFU0NSSVBUT1IpKA0KKyAgSU4gRURLSUlfVVNCX0VUSEVSTkVUX1BST1RPQ09MICAg ICAgKlRoaXMsDQorICBPVVQgVVNCX0hFQURFUl9GVU5fREVTQ1JJUFRPUiAqVXNiSGVhZGVyRnVu RGVzY3JpcHRvcg0KKyAgKTsNCisNCisvKioNCisgIFJldHJpZXZlcyB0aGUgVVNCIFVuaW9uIGZ1 bmN0aW9uYWwgRGVzY3JpcHRvci4NCisNCisgIEBwYXJhbVtpbl0gIFRoaXMgICAgICAgICAgICAg ICAgICAgQSBwb2ludGVyIHRvIHRoZSBFREtJSV9VU0JfRVRIRVJORVRfUFJPVE9DT0wgaW5zdGFu Y2UuDQorICBAcGFyYW1bb3V0XSBVc2JVbmlvbkZ1bkRlc2NyaXB0b3IgIEEgcG9pbnRlciB0byB0 aGUgY2FsbGVyIGFsbG9jYXRlZCBVU0IgVW5pb24gRnVuY3Rpb25hbCBEZXNjcmlwdG9yLg0KKw0K KyAgQHJldHZhbCBFRklfU1VDQ0VTUyAgICAgICAgICAgVGhlIFVTQiBVbmlvbiBGdW5jdGlvbmFs IGRlc2NyaXB0b3Igd2FzIHJldHJpZXZlZCBzdWNjZXNzZnVsbHkuDQorICBAcmV0dmFsIEVGSV9J TlZBTElEX1BBUkFNRVRFUiBVc2JVbmlvbkZ1bkRlc2NyaXB0b3IgaXMgTlVMTC4NCisgIEByZXR2 YWwgRUZJX05PVF9GT1VORCAgICAgICAgIFRoZSBVU0IgVW5pb24gRnVuY3Rpb25hbCBkZXNjcmlw dG9yIHdhcyBub3QgZm91bmQuDQorKiovDQordHlwZWRlZg0KK0VGSV9TVEFUVVMNCisoRUZJQVBJ ICpFREtJSV9VU0JfVU5JT05fRlVOQ1RJT05BTF9ERVNDUklQVE9SKSgNCisgIElOIEVES0lJX1VT Ql9FVEhFUk5FVF9QUk9UT0NPTCAgICAgKlRoaXMsDQorICBPVVQgVVNCX1VOSU9OX0ZVTl9ERVND UklQVE9SICpVc2JVbmlvbkZ1bkRlc2NyaXB0b3INCisgICk7DQorDQorLyoqDQorICBSZXRyaWV2 ZXMgdGhlIFVTQiBFdGhlcm5ldCBmdW5jdGlvbmFsIERlc2NyaXB0b3IuDQorDQorICBAcGFyYW1b aW5dICBUaGlzICAgICAgICAgICAgICAgICAgIEEgcG9pbnRlciB0byB0aGUgRURLSUlfVVNCX0VU SEVSTkVUX1BST1RPQ09MIGluc3RhbmNlLg0KKyAgQHBhcmFtW291dF0gVXNiRXRoRnVuRGVzY3Jp cHRvciAgICBBIHBvaW50ZXIgdG8gdGhlIGNhbGxlciBhbGxvY2F0ZWQgVVNCIEV0aGVybmV0IEZ1 bmN0aW9uYWwgRGVzY3JpcHRvci4NCisNCisgIEByZXR2YWwgRUZJX1NVQ0NFU1MgICAgICAgICAg IFRoZSBVU0IgRXRoZXJuZXQgRnVuY3Rpb25hbCBkZXNjcmlwdG9yIHdhcyByZXRyaWV2ZWQgc3Vj Y2Vzc2Z1bGx5Lg0KKyAgQHJldHZhbCBFRklfSU5WQUxJRF9QQVJBTUVURVIgVXNiRXRoRnVuRGVz Y3JpcHRvciBpcyBOVUxMLg0KKyAgQHJldHZhbCBFRklfTk9UX0ZPVU5EICAgICAgICAgVGhlIFVT QiBFdGhlcm5ldCBGdW5jdGlvbmFsIGRlc2NyaXB0b3Igd2FzIG5vdCBmb3VuZC4NCisqKi8NCit0 eXBlZGVmDQorRUZJX1NUQVRVUw0KKyhFRklBUEkgKkVES0lJX1VTQl9FVEhFUk5FVF9GVU5DVElP TkFMX0RFU0NSSVBUT1IpKA0KKyAgSU4gRURLSUlfVVNCX0VUSEVSTkVUX1BST1RPQ09MICAgICAg ICAqVGhpcywNCisgIE9VVCBVU0JfRVRIRVJORVRfRlVOX0RFU0NSSVBUT1IgKlVzYkV0aEZ1bkRl c2NyaXB0b3INCisgICk7DQorDQorLyoqDQorICBUaGlzIHJlcXVlc3Qgc2V0cyB0aGUgRXRoZXJu ZXQgZGV2aWNlIG11bHRpY2FzdCBmaWx0ZXJzIGFzIHNwZWNpZmllZCBpbiB0aGUNCisgIHNlcXVl bnRpYWwgbGlzdCBvZiA0OCBiaXQgRXRoZXJuZXQgbXVsdGljYXN0IGFkZHJlc3Nlcy4NCisNCisg IEBwYXJhbVtpbl0gIFRoaXMgICAgICAgICAgICAgICAgICAgQSBwb2ludGVyIHRvIHRoZSBFREtJ SV9VU0JfRVRIRVJORVRfUFJPVE9DT0wgaW5zdGFuY2UuDQorICBAcGFyYW1baW5dICBWYWx1ZSAg ICAgICAgICAgICAgICAgIE51bWJlciBvZiBmaWx0ZXJzLg0KKyAgQHBhcmFtW2luXSAgTWNhc3RB ZGRyICAgICAgICAgICAgICBBIHBvaW50ZXIgdG8gdGhlIHZhbHVlIG9mIHRoZSBtdWx0aWNhc3Qg YWRkcmVzc2VzLg0KKw0KKyAgQHJldHZhbCBFRklfU1VDQ0VTUyAgICAgICAgICAgVGhlIHJlcXVl c3QgZXhlY3V0ZWQgc3VjY2Vzc2Z1bGx5Lg0KKyAgQHJldHZhbCBFRklfVElNRU9VVCAgICAgICAg ICAgQSB0aW1lb3V0IG9jY3VycmVkIGV4ZWN1dGluZyB0aGUgcmVxdWVzdC4NCisgIEByZXR2YWwg RUZJX0RFVklDRV9FUlJPUiAgICAgIFRoZSByZXF1ZXN0IGZhaWxlZCBkdWUgdG8gYSBkZXZpY2Ug ZXJyb3IuDQorICBAcmV0dmFsIEVGSV9JTlZBTElEX1BBUkFNRVRFUiBPbmUgb2YgdGhlIHBhcmFt ZXRlcnMgaGFzIGFuIGludmFsaWQgdmFsdWUuDQorICBAcmV0dmFsIEVGSV9VTlNVUFBPUlRFRCAg ICAgICBOb3Qgc3VwcG9ydGVkLg0KKyoqLw0KK3R5cGVkZWYNCitFRklfU1RBVFVTDQorKEVGSUFQ SSAqRURLSUlfVVNCX0VUSEVSTkVUX1NFVF9FVEhfTVVMVElDQVNUX0ZJTFRFUlMpKA0KKyAgSU4g RURLSUlfVVNCX0VUSEVSTkVUX1BST1RPQ09MICpUaGlzLA0KKyAgSU4gVUlOVDE2ICAgICAgICAg ICAgICAgIFZhbHVlLA0KKyAgSU4gVk9JRCAgICAgICAgICAgICAgICAgICpNY2FzdEFkZHINCisg ICk7DQorDQorLyoqDQorICBUaGlzIHJlcXVlc3Qgc2V0cyB1cCB0aGUgc3BlY2lmaWVkIEV0aGVy bmV0IHBvd2VyIG1hbmFnZW1lbnQgcGF0dGVybiBmaWx0ZXIgYXMNCisgIGRlc2NyaWJlZCBpbiB0 aGUgZGF0YSBzdHJ1Y3R1cmUuDQorDQorICBAcGFyYW1baW5dICBUaGlzICAgICAgICAgICAgICAg ICAgIEEgcG9pbnRlciB0byB0aGUgRURLSUlfVVNCX0VUSEVSTkVUX1BST1RPQ09MIGluc3RhbmNl Lg0KKyAgQHBhcmFtW2luXSAgVmFsdWUgICAgICAgICAgICAgICAgICBOdW1iZXIgb2YgZmlsdGVy cy4NCisgIEBwYXJhbVtpbl0gIExlbmd0aCAgICAgICAgICAgICAgICAgU2l6ZSBvZiB0aGUgcG93 ZXIgbWFuYWdlbWVudCBwYXR0ZXJuIGZpbHRlciBkYXRhLg0KKyAgQHBhcmFtW2luXSAgUGF0dGVy bkZpbHRlciAgICAgICAgICBBIHBvaW50ZXIgdG8gdGhlIHBvd2VyIG1hbmFnZW1lbnQgcGF0dGVy biBmaWx0ZXIgc3RydWN0dXJlLg0KKw0KKyAgQHJldHZhbCBFRklfU1VDQ0VTUyAgICAgICAgICAg VGhlIHJlcXVlc3QgZXhlY3V0ZWQgc3VjY2Vzc2Z1bGx5Lg0KKyAgQHJldHZhbCBFRklfVElNRU9V VCAgICAgICAgICAgQSB0aW1lb3V0IG9jY3VycmVkIGV4ZWN1dGluZyB0aGUgcmVxdWVzdC4NCisg IEByZXR2YWwgRUZJX0RFVklDRV9FUlJPUiAgICAgIFRoZSByZXF1ZXN0IGZhaWxlZCBkdWUgdG8g YSBkZXZpY2UgZXJyb3IuDQorICBAcmV0dmFsIEVGSV9JTlZBTElEX1BBUkFNRVRFUiBPbmUgb2Yg dGhlIHBhcmFtZXRlcnMgaGFzIGFuIGludmFsaWQgdmFsdWUuDQorICBAcmV0dmFsIEVGSV9VTlNV UFBPUlRFRCAgICAgICBOb3Qgc3VwcG9ydGVkLg0KKyoqLw0KK3R5cGVkZWYNCitFRklfU1RBVFVT DQorKEVGSUFQSSAqRURLSUlfVVNCX0VUSEVSTkVUX1NFVF9FVEhfUE9XRVJfTUFOQUdFX1BBVFRF Uk5fRklMVEVSKSgNCisgIElOIEVES0lJX1VTQl9FVEhFUk5FVF9QUk9UT0NPTCAqVGhpcywNCisg IElOIFVJTlQxNiAgICAgICAgICAgICAgICBWYWx1ZSwNCisgIElOIFVJTlQxNiAgICAgICAgICAg ICAgICBMZW5ndGgsDQorICBJTiBWT0lEICAgICAgICAgICAgICAgICAgKlBhdHRlcm5GaWx0ZXIN CisgICk7DQorDQorLyoqDQorICBUaGlzIHJlcXVlc3QgcmV0cmlldmVzIHRoZSBzdGF0dXMgb2Yg dGhlIHNwZWNpZmllZCBFdGhlcm5ldCBwb3dlciBtYW5hZ2VtZW50DQorICBwYXR0ZXJuIGZpbHRl ciBmcm9tIHRoZSBkZXZpY2UuDQorDQorICBAcGFyYW1baW5dICBUaGlzICAgICAgICAgICAgICAg ICAgIEEgcG9pbnRlciB0byB0aGUgRURLSUlfVVNCX0VUSEVSTkVUX1BST1RPQ09MIGluc3RhbmNl Lg0KKyAgQHBhcmFtW2luXSAgVmFsdWUgICAgICAgICAgICAgICAgICBUaGUgZmlsdGVyIG51bWJl ci4NCisgIEBwYXJhbVtvdXRdIFBhdHRlcm5BY3RpdmUgICAgICAgICAgQSBwb2ludGVyIHRvIHRo ZSBwYXR0ZXJuIGFjdGl2ZSBib29sZWFuLg0KKw0KKyAgQHJldHZhbCBFRklfU1VDQ0VTUyAgICAg ICAgICAgVGhlIHJlcXVlc3QgZXhlY3V0ZWQgc3VjY2Vzc2Z1bGx5Lg0KKyAgQHJldHZhbCBFRklf VElNRU9VVCAgICAgICAgICAgQSB0aW1lb3V0IG9jY3VycmVkIGV4ZWN1dGluZyB0aGUgcmVxdWVz dC4NCisgIEByZXR2YWwgRUZJX0RFVklDRV9FUlJPUiAgICAgIFRoZSByZXF1ZXN0IGZhaWxlZCBk dWUgdG8gYSBkZXZpY2UgZXJyb3IuDQorICBAcmV0dmFsIEVGSV9JTlZBTElEX1BBUkFNRVRFUiBP bmUgb2YgdGhlIHBhcmFtZXRlcnMgaGFzIGFuIGludmFsaWQgdmFsdWUuDQorICBAcmV0dmFsIEVG SV9VTlNVUFBPUlRFRCAgICAgICBOb3Qgc3VwcG9ydGVkLg0KKyoqLw0KK3R5cGVkZWYNCitFRklf U1RBVFVTDQorKEVGSUFQSSAqRURLSUlfVVNCX0VUSEVSTkVUX0dFVF9FVEhfUE9XRVJfTUFOQUdF X1BBVFRFUk5fRklMVEVSKSgNCisgIElOICAgRURLSUlfVVNCX0VUSEVSTkVUX1BST1RPQ09MICpU aGlzLA0KKyAgSU4gICBVSU5UMTYgICAgICAgICAgICAgICAgVmFsdWUsDQorICBPVVQgIEJPT0xF QU4gICAgICAgICAgICAgICAqUGF0dGVybkFjdGl2ZQ0KKyAgKTsNCisNCisvKioNCisgIFRoaXMg cmVxdWVzdCBpcyB1c2VkIHRvIGNvbmZpZ3VyZSBkZXZpY2UgRXRoZXJuZXQgcGFja2V0IGZpbHRl ciBzZXR0aW5ncy4NCisNCisgIEBwYXJhbVtpbl0gIFRoaXMgICAgICAgICAgICAgIEEgcG9pbnRl ciB0byB0aGUgRURLSUlfVVNCX0VUSEVSTkVUX1BST1RPQ09MIGluc3RhbmNlLg0KKyAgQHBhcmFt W2luXSAgVmFsdWUgICAgICAgICAgICAgUGFja2V0IEZpbHRlciBCaXRtYXAuDQorDQorICBAcmV0 dmFsIEVGSV9TVUNDRVNTICAgICAgICAgICBUaGUgcmVxdWVzdCBleGVjdXRlZCBzdWNjZXNzZnVs bHkuDQorICBAcmV0dmFsIEVGSV9USU1FT1VUICAgICAgICAgICBBIHRpbWVvdXQgb2NjdXJyZWQg ZXhlY3V0aW5nIHRoZSByZXF1ZXN0Lg0KKyAgQHJldHZhbCBFRklfREVWSUNFX0VSUk9SICAgICAg VGhlIHJlcXVlc3QgZmFpbGVkIGR1ZSB0byBhIGRldmljZSBlcnJvci4NCisgIEByZXR2YWwgRUZJ X0lOVkFMSURfUEFSQU1FVEVSIE9uZSBvZiB0aGUgcGFyYW1ldGVycyBoYXMgYW4gaW52YWxpZCB2 YWx1ZS4NCisgIEByZXR2YWwgRUZJX1VOU1VQUE9SVEVEICAgICAgIE5vdCBzdXBwb3J0ZWQuDQor KiovDQordHlwZWRlZg0KK0VGSV9TVEFUVVMNCisoRUZJQVBJICpFREtJSV9VU0JfRVRIRVJORVRf U0VUX0VUSF9QQUNLRVRfRklMVEVSKSgNCisgIElOIEVES0lJX1VTQl9FVEhFUk5FVF9QUk9UT0NP TCAqVGhpcywNCisgIElOIFVJTlQxNiAgICAgICAgICAgICAgICBWYWx1ZQ0KKyAgKTsNCisNCisv KioNCisgIFRoaXMgcmVxdWVzdCBpcyB1c2VkIHRvIHJldHJpZXZlIGEgc3RhdGlzdGljIGJhc2Vk IG9uIHRoZSBmZWF0dXJlIHNlbGVjdG9yLg0KKw0KKyAgQHBhcmFtW2luXSAgVGhpcyAgICAgICAg ICAgICAgICAgIEEgcG9pbnRlciB0byB0aGUgRURLSUlfVVNCX0VUSEVSTkVUX1BST1RPQ09MIGlu c3RhbmNlLg0KKyAgQHBhcmFtW2luXSAgRmVhdHVyZVNlbGVjdG9yICAgICAgIFZhbHVlIG9mIHRo ZSBmZWF0dXJlIHNlbGVjdG9yLg0KKyAgQHBhcmFtW291dF0gU3RhdGlzdGljICAgICAgICAgICAg IEEgcG9pbnRlciB0byB0aGUgMzIgYml0IHVuc2lnbmVkIGludGVnZXIuDQorDQorICBAcmV0dmFs IEVGSV9TVUNDRVNTICAgICAgICAgICBUaGUgcmVxdWVzdCBleGVjdXRlZCBzdWNjZXNzZnVsbHku DQorICBAcmV0dmFsIEVGSV9USU1FT1VUICAgICAgICAgICBBIHRpbWVvdXQgb2NjdXJyZWQgZXhl Y3V0aW5nIHRoZSByZXF1ZXN0Lg0KKyAgQHJldHZhbCBFRklfREVWSUNFX0VSUk9SICAgICAgVGhl IHJlcXVlc3QgZmFpbGVkIGR1ZSB0byBhIGRldmljZSBlcnJvci4NCisgIEByZXR2YWwgRUZJX0lO VkFMSURfUEFSQU1FVEVSIE9uZSBvZiB0aGUgcGFyYW1ldGVycyBoYXMgYW4gaW52YWxpZCB2YWx1 ZS4NCisgIEByZXR2YWwgRUZJX1VOU1VQUE9SVEVEICAgICAgIE5vdCBzdXBwb3J0ZWQuDQorKiov DQordHlwZWRlZg0KK0VGSV9TVEFUVVMNCisoRUZJQVBJICpFREtJSV9VU0JfRVRIRVJORVRfR0VU X0VUSF9TVEFUSVNUSUMpKA0KKyAgSU4gIEVES0lJX1VTQl9FVEhFUk5FVF9QUk9UT0NPTCAgKlRo aXMsDQorICBJTiAgVUlOVDE2ICAgICAgICAgICAgICAgICBGZWF0dXJlU2VsZWN0b3IsDQorICBP VVQgVk9JRCAgICAgICAgICAgICAgICAgICAqU3RhdGlzdGljDQorICApOw0KKw0KK3R5cGVkZWYg c3RydWN0IHsNCisgIEVES0lJX1VTQl9FVEhFUk5FVF9VTkRJX0dFVF9TVEFURSAgICAgICAgICAg VXNiRXRoVW5kaUdldFN0YXRlOw0KKyAgRURLSUlfVVNCX0VUSEVSTkVUX1VORElfU1RBUlQgICAg ICAgICAgICAgICBVc2JFdGhVbmRpU3RhcnQ7DQorICBFREtJSV9VU0JfRVRIRVJORVRfVU5ESV9T VE9QICAgICAgICAgICAgICAgIFVzYkV0aFVuZGlTdG9wOw0KKyAgRURLSUlfVVNCX0VUSEVSTkVU X1VORElfR0VUX0lOSVRfSU5GTyAgICAgICBVc2JFdGhVbmRpR2V0SW5pdEluZm87DQorICBFREtJ SV9VU0JfRVRIRVJORVRfVU5ESV9HRVRfQ09ORklHX0lORk8gICAgIFVzYkV0aFVuZGlHZXRDb25m aWdJbmZvOw0KKyAgRURLSUlfVVNCX0VUSEVSTkVUX1VORElfSU5JVElBTElaRSAgICAgICAgICBV c2JFdGhVbmRpSW5pdGlhbGl6ZTsNCisgIEVES0lJX1VTQl9FVEhFUk5FVF9VTkRJX1JFU0VUICAg ICAgICAgICAgICAgVXNiRXRoVW5kaVJlc2V0Ow0KKyAgRURLSUlfVVNCX0VUSEVSTkVUX1VORElf U0hVVERPV04gICAgICAgICAgICBVc2JFdGhVbmRpU2h1dGRvd247DQorICBFREtJSV9VU0JfRVRI RVJORVRfVU5ESV9JTlRFUlJVUFRfRU5BQkxFICAgIFVzYkV0aFVuZGlJbnRlcnJ1cHRFbmFibGU7 DQorICBFREtJSV9VU0JfRVRIRVJORVRfVU5ESV9SRUNFSVZFX0ZJTFRFUiAgICAgIFVzYkV0aFVu ZGlSZWNlaXZlRmlsdGVyOw0KKyAgRURLSUlfVVNCX0VUSEVSTkVUX1VORElfU1RBVElPTl9BRERS RVNTICAgICBVc2JFdGhVbmRpU3RhdGlvbkFkZHJlc3M7DQorICBFREtJSV9VU0JfRVRIRVJORVRf VU5ESV9TVEFUSVNUSUNTICAgICAgICAgIFVzYkV0aFVuZGlTdGF0aXN0aWNzOw0KKyAgRURLSUlf VVNCX0VUSEVSTkVUX1VORElfTUNBU1RfSVBUT01BQyAgICAgICBVc2JFdGhVbmRpTWNhc3RJcDJN YWM7DQorICBFREtJSV9VU0JfRVRIRVJORVRfVU5ESV9OVl9EQVRBICAgICAgICAgICAgIFVzYkV0 aFVuZGlOdkRhdGE7DQorICBFREtJSV9VU0JfRVRIRVJORVRfVU5ESV9HRVRfU1RBVFVTICAgICAg ICAgIFVzYkV0aFVuZGlHZXRTdGF0dXM7DQorICBFREtJSV9VU0JfRVRIRVJORVRfVU5ESV9GSUxM X0hFQURFUiAgICAgICAgIFVzYkV0aFVuZGlGaWxsSGVhZGVyOw0KKyAgRURLSUlfVVNCX0VUSEVS TkVUX1VORElfVFJBTlNNSVQgICAgICAgICAgICBVc2JFdGhVbmRpVHJhbnNtaXQ7DQorICBFREtJ SV9VU0JfRVRIRVJORVRfVU5ESV9SRUNFSVZFICAgICAgICAgICAgIFVzYkV0aFVuZGlSZWNlaXZl Ow0KK30gRURLSUlfVVNCX0VUSEVSTkVUX1VOREk7DQorDQorLy8gVGhlIEVES0lJX1VTQl9FVEhF Uk5FVF9QUk9UT0NPTCBwcm92aWRlcyBzb21lIGJhc2ljIFVTQiBFdGhlcm5ldCBkZXZpY2UgcmVs ZXZhbnQNCisvLyBkZXNjcmlwdG9yIGFuZCBzcGVjaWZpYyByZXF1ZXN0cy4NCitzdHJ1Y3QgX0VE S0lJX1VTQl9FVEhFUk5FVF9QUk9UT0NPTCB7DQorICBFREtJSV9VU0JfRVRIRVJORVRfVU5ESSAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVXNiRXRoVW5kaTsNCisgIC8vIGZvciBj YWxsaW5nIHRoZSBVTkRJIGNoaWxkIGZ1bmN0aW9ucw0KKyAgRURLSUlfVVNCX0VUSEVSTkVUX0lO SVRJQUxJWkUgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFVzYkV0aEluaXRpYWxpemU7DQor ICBFREtJSV9VU0JfRVRIRVJORVRfU1RBVElTVElDUyAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgVXNiRXRoU3RhdGlzdGljczsNCisgIEVES0lJX1VTQl9FVEhFUk5FVF9SRUNFSVZFICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBVc2JFdGhSZWNlaXZlOw0KKyAgRURLSUlfVVNCX0VU SEVSTkVUX1RSQU5TTUlUICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFVzYkV0aFRyYW5z bWl0Ow0KKyAgRURLSUlfVVNCX0VUSEVSTkVUX0lOVEVSUlVQVCAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIFVzYkV0aEludGVycnVwdDsNCisgIEVES0lJX1VTQl9HRVRfRVRIX01BQ19BRERS RVNTICAgICAgICAgICAgICAgICAgICAgICAgICAgICBVc2JFdGhNYWNBZGRyZXNzOw0KKyAgRURL SUlfVVNCX0VUSF9NQVhfQlVMS19TSVpFICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFVz YkV0aE1heEJ1bGtTaXplOw0KKyAgRURLSUlfVVNCX0hFQURFUl9GVU5DVElPTkFMX0RFU0NSSVBU T1IgICAgICAgICAgICAgICAgICAgIFVzYkhlYWRlckZ1bkRlc2NyaXB0b3I7DQorICBFREtJSV9V U0JfVU5JT05fRlVOQ1RJT05BTF9ERVNDUklQVE9SICAgICAgICAgICAgICAgICAgICAgVXNiVW5p b25GdW5EZXNjcmlwdG9yOw0KKyAgRURLSUlfVVNCX0VUSEVSTkVUX0ZVTkNUSU9OQUxfREVTQ1JJ UFRPUiAgICAgICAgICAgICAgICAgIFVzYkV0aEZ1bkRlc2NyaXB0b3I7DQorICBFREtJSV9VU0Jf RVRIRVJORVRfU0VUX0VUSF9NVUxUSUNBU1RfRklMVEVSUyAgICAgICAgICAgICAgU2V0VXNiRXRo TWNhc3RGaWx0ZXI7DQorICBFREtJSV9VU0JfRVRIRVJORVRfU0VUX0VUSF9QT1dFUl9NQU5BR0Vf UEFUVEVSTl9GSUxURVIgICAgU2V0VXNiRXRoUG93ZXJQYXR0ZXJuRmlsdGVyOw0KKyAgRURLSUlf VVNCX0VUSEVSTkVUX0dFVF9FVEhfUE9XRVJfTUFOQUdFX1BBVFRFUk5fRklMVEVSICAgIEdldFVz YkV0aFBvd2VyUGF0dGVybkZpbHRlcjsNCisgIEVES0lJX1VTQl9FVEhFUk5FVF9TRVRfRVRIX1BB Q0tFVF9GSUxURVIgICAgICAgICAgICAgICAgICBTZXRVc2JFdGhQYWNrZXRGaWx0ZXI7DQorICBF REtJSV9VU0JfRVRIRVJORVRfR0VUX0VUSF9TVEFUSVNUSUMgICAgICAgICAgICAgICAgICAgICAg R2V0VXNiRXRoU3RhdGlzdGljOw0KK307DQorDQorZXh0ZXJuIEVGSV9HVUlEICBnRWRrSUlVc2JF dGhQcm90b2NvbEd1aWQ7DQorDQorI2VuZGlmDQpkaWZmIC0tZ2l0IGEvTWRlTW9kdWxlUGtnL01k ZU1vZHVsZVBrZy5kZWMgYi9NZGVNb2R1bGVQa2cvTWRlTW9kdWxlUGtnLmRlYw0KaW5kZXggM2Vi NGE3OWJmNy4uODYwZWVjMGYzYyAxMDA2NDQNCi0tLSBhL01kZU1vZHVsZVBrZy9NZGVNb2R1bGVQ a2cuZGVjDQorKysgYi9NZGVNb2R1bGVQa2cvTWRlTW9kdWxlUGtnLmRlYw0KQEAgLTY4NSw2ICs2 ODUsOSBAQA0KICAgIyMgSW5jbHVkZS9Qcm90b2NvbC9WYXJpYWJsZVBvbGljeS5oDQogICBnRWRr aWlWYXJpYWJsZVBvbGljeVByb3RvY29sR3VpZCA9IHsgMHg4MUQxNjc1QywgMHg4NkY2LCAweDQ4 REYsIHsgMHhCRCwgMHg5NSwgMHg5QSwgMHg2RSwgMHg0RiwgMHgwOSwgMHgyNSwgMHhDMyB9IH0N Cg0KKyAgIyMgSW5jbHVkZS9Qcm90b2NvbC9Vc2JFdGhlcm5ldFByb3RvY29sLmgNCisgIGdFZGtJ SVVzYkV0aFByb3RvY29sR3VpZCA9IHsgMHg4ZDg5NjljYywgMHhmZWIwLCAweDQzMDMsIHsgMHhi MiwgMHgxYSwgMHgxZiwgMHgxMSwgMHg2ZiwgMHgzOCwgMHg1NiwgMHg0MyB9IH0NCisNCiBbUGNk c0ZlYXR1cmVGbGFnXQ0KICAgIyMgSW5kaWNhdGVzIGlmIHRoZSBwbGF0Zm9ybSBjYW4gc3VwcG9y dCB1cGRhdGUgY2Fwc3VsZSBhY3Jvc3MgYSBzeXN0ZW0gcmVzZXQuPEJSPjxCUj4NCiAgICMgICBU UlVFICAtIFN1cHBvcnRzIHVwZGF0ZSBjYXBzdWxlIGFjcm9zcyBhIHN5c3RlbSByZXNldC48QlI+ DQpAQCAtMjEwOCw2ICsyMTExLDIxIEBADQogICAjIEBQcm9tcHQgVGhlIHNoYXJlZCBiaXQgbWFz ayB3aGVuIEludGVsIFRkeCBpcyBlbmFibGVkLg0KICAgZ0VmaU1kZU1vZHVsZVBrZ1Rva2VuU3Bh Y2VHdWlkLlBjZFRkeFNoYXJlZEJpdE1hc2t8MHgwfFVJTlQ2NHwweDEwMDAwMDI1DQoNCisgICMj IEluZGljYXRlcyBpZiB0aGUgVXNiIE5ldHdvcmsgcmF0ZSBsaW1pdGluZyBTdXBwb3J0ZWQuPEJS PjxCUj4NCisgICMgICBUUlVFICAtIFVzYiBOZXR3b3JrIHJhdGUgbGltaXRpbmcgaXMgc3VwcG9y dGVkLjxCUj4NCisgICMgICBGQUxTRSAtIFVzYiBOZXR3b3JrIHJhdGUgbGltaXRpbmcgaXMgbm90 IHN1cHBvcnRlZC48QlI+DQorICAjIEBQcm9tcHQgRW5hYmxlIFVzYiBOZXR3b3JrIHJhdGUgbGlt aXRpbmcgc3VwcG9ydC4NCisgIGdFZmlNZGVNb2R1bGVQa2dUb2tlblNwYWNlR3VpZC5QY2RFbmFi bGVVc2JOZXR3b3JrUmF0ZUxpbWl0aW5nfEZBTFNFfEJPT0xFQU58MHgxMDAwMDAyNg0KKw0KKyAg IyMgVGhlIHJhdGUgbGltaXRpbmcgQ3JlZGl0IHZhbHVlIGlzIGNoZWNrIGluIHJhdGUgbGltaXRl ciBldmVudC4NCisgICMgIEl0IGlzIHRvIGNvbnRyb2wgdGhlIFJhdGVMaW1pdGluZ0NyZWRpdENv dW50IG1heCB2YWx1ZS4NCisgICMgQFByb21wdCBUaGUgdmFsdWUgaXMgdXNlIGZvciBVc2IgTmV0 d29yayByYXRlIGxpbWl0aW5nIHN1cHBvcnRlZC4NCisgIGdFZmlNZGVNb2R1bGVQa2dUb2tlblNw YWNlR3VpZC5QY2RVc2JOZXR3b3JrUmF0ZUxpbWl0aW5nQ3JlZGl0fDEwfFVJTlQzMnwweDEwMDAw MDI3DQorDQorICAjIyBUaGUgdmFsdWUgb2YgcmF0ZSBsaW1pdGVyIGV2ZW50IGZvciB0aW1lb3V0 IGNoZWNrLiBEZWZhdWx0IHZhbHVlIGlzIDEwMCh1bml0IDFtcykuDQorICAjIEBQcm9tcHQgVGhl IHZhbHVlIGlzIHVzZSBmb3IgVXNiIE5ldHdvcmsgcmF0ZSBsaW1pdGluZyBzdXBwb3J0ZWQuDQor ICBnRWZpTWRlTW9kdWxlUGtnVG9rZW5TcGFjZUd1aWQuUGNkVXNiTmV0d29ya1JhdGVMaW1pdGlu Z0ZhY3RvcnwxMDB8VUlOVDMyfDB4MTAwMDAwMjgNCisNCiBbUGNkc1BhdGNoYWJsZUluTW9kdWxl XQ0KICAgIyMgU3BlY2lmeSBtZW1vcnkgc2l6ZSB3aXRoIHBhZ2UgbnVtYmVyIGZvciBQRUkgY29k ZSB3aGVuDQogICAjICBMb2FkaW5nIE1vZHVsZSBhdCBGaXhlZCBBZGRyZXNzIGZlYXR1cmUgaXMg ZW5hYmxlZC4NCmRpZmYgLS1naXQgYS9NZGVNb2R1bGVQa2cvTWRlTW9kdWxlUGtnLmRzYyBiL01k ZU1vZHVsZVBrZy9NZGVNb2R1bGVQa2cuZHNjDQppbmRleCAxMDE0NTk4ZjMxLi4wYWFkZDQwNWYz IDEwMDY0NA0KLS0tIGEvTWRlTW9kdWxlUGtnL01kZU1vZHVsZVBrZy5kc2MNCisrKyBiL01kZU1v ZHVsZVBrZy9NZGVNb2R1bGVQa2cuZHNjDQpAQCAtMjc0LDYgKzI3NCwxMCBAQA0KICAgTWRlTW9k dWxlUGtnL0J1cy9Vc2IvVXNiTWFzc1N0b3JhZ2VEeGUvVXNiTWFzc1N0b3JhZ2VEeGUuaW5mDQog ICBNZGVNb2R1bGVQa2cvQnVzL1VzYi9Vc2JNb3VzZUFic29sdXRlUG9pbnRlckR4ZS9Vc2JNb3Vz ZUFic29sdXRlUG9pbnRlckR4ZS5pbmYNCiAgIE1kZU1vZHVsZVBrZy9CdXMvVXNiL1VzYk1vdXNl RHhlL1VzYk1vdXNlRHhlLmluZg0KKyAgTWRlTW9kdWxlUGtnL0J1cy9Vc2IvVXNiTmV0d29yay9O ZXR3b3JrQ29tbW9uL05ldHdvcmtDb21tb24uaW5mDQorICBNZGVNb2R1bGVQa2cvQnVzL1VzYi9V c2JOZXR3b3JrL1VzYkNkY0VjbS9Vc2JDZGNFY20uaW5mDQorICBNZGVNb2R1bGVQa2cvQnVzL1Vz Yi9Vc2JOZXR3b3JrL1VzYkNkY05jbS9Vc2JDZGNOY20uaW5mDQorICBNZGVNb2R1bGVQa2cvQnVz L1VzYi9Vc2JOZXR3b3JrL1VzYlJuZGlzL1VzYlJuZGlzLmluZg0KICAgTWRlTW9kdWxlUGtnL0J1 cy9JMmMvSTJjRHhlL0kyY0J1c0R4ZS5pbmYNCiAgIE1kZU1vZHVsZVBrZy9CdXMvSTJjL0kyY0R4 ZS9JMmNIb3N0RHhlLmluZg0KICAgTWRlTW9kdWxlUGtnL0J1cy9JMmMvSTJjRHhlL0kyY0R4ZS5p bmYNCi0tDQoyLjM1LjEud2luZG93cy4yDQotVGhlIGluZm9ybWF0aW9uIGNvbnRhaW5lZCBpbiB0 aGlzIG1lc3NhZ2UgbWF5IGJlIGNvbmZpZGVudGlhbCBhbmQgcHJvcHJpZXRhcnkgdG8gQW1lcmlj YW4gTWVnYXRyZW5kcyAoQU1JKS4gVGhpcyBjb21tdW5pY2F0aW9uIGlzIGludGVuZGVkIHRvIGJl IHJlYWQgb25seSBieSB0aGUgaW5kaXZpZHVhbCBvciBlbnRpdHkgdG8gd2hvbSBpdCBpcyBhZGRy ZXNzZWQgb3IgYnkgdGhlaXIgZGVzaWduZWUuIElmIHRoZSByZWFkZXIgb2YgdGhpcyBtZXNzYWdl IGlzIG5vdCB0aGUgaW50ZW5kZWQgcmVjaXBpZW50LCB5b3UgYXJlIG9uIG5vdGljZSB0aGF0IGFu eSBkaXN0cmlidXRpb24gb2YgdGhpcyBtZXNzYWdlLCBpbiBhbnkgZm9ybSwgaXMgc3RyaWN0bHkg cHJvaGliaXRlZC4gUGxlYXNlIHByb21wdGx5IG5vdGlmeSB0aGUgc2VuZGVyIGJ5IHJlcGx5IGUt bWFpbCBvciBieSB0ZWxlcGhvbmUgYXQgNzcwLTI0Ni04NjAwLCBhbmQgdGhlbiBkZWxldGUgb3Ig ZGVzdHJveSBhbGwgY29waWVzIG9mIHRoZSB0cmFuc21pc3Npb24uDQoNCg0KDQoNCg0KLVRoZSBp bmZvcm1hdGlvbiBjb250YWluZWQgaW4gdGhpcyBtZXNzYWdlIG1heSBiZSBjb25maWRlbnRpYWwg YW5kIHByb3ByaWV0YXJ5IHRvIEFtZXJpY2FuIE1lZ2F0cmVuZHMgKEFNSSkuIFRoaXMgY29tbXVu aWNhdGlvbiBpcyBpbnRlbmRlZCB0byBiZSByZWFkIG9ubHkgYnkgdGhlIGluZGl2aWR1YWwgb3Ig ZW50aXR5IHRvIHdob20gaXQgaXMgYWRkcmVzc2VkIG9yIGJ5IHRoZWlyIGRlc2lnbmVlLiBJZiB0 aGUgcmVhZGVyIG9mIHRoaXMgbWVzc2FnZSBpcyBub3QgdGhlIGludGVuZGVkIHJlY2lwaWVudCwg eW91IGFyZSBvbiBub3RpY2UgdGhhdCBhbnkgZGlzdHJpYnV0aW9uIG9mIHRoaXMgbWVzc2FnZSwg aW4gYW55IGZvcm0sIGlzIHN0cmljdGx5IHByb2hpYml0ZWQuIFBsZWFzZSBwcm9tcHRseSBub3Rp ZnkgdGhlIHNlbmRlciBieSByZXBseSBlLW1haWwgb3IgYnkgdGVsZXBob25lIGF0IDc3MC0yNDYt ODYwMCwgYW5kIHRoZW4gZGVsZXRlIG9yIGRlc3Ryb3kgYWxsIGNvcGllcyBvZiB0aGUgdHJhbnNt aXNzaW9uLg0K