From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from NAM11-CO1-obe.outbound.protection.outlook.com (NAM11-CO1-obe.outbound.protection.outlook.com [40.107.220.85]) by mx.groups.io with SMTP id smtpd.web09.4326.1665640148428676270 for ; Wed, 12 Oct 2022 22:49:09 -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.220.85, mailfrom: richardho@ami.com) ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=jz2R3U2k7H7V8p4aj7FMs9hzF9PiDetuNgArOQSLb3oascPLD5jgstJ/QRH1UsUWveM+y1eAIsqN0TgWEM4Wm0oVugyQ9zHjAApwqP4zcFhE8B2kLeSzZsmk3bfMLLOmuvoNTDw2LXkbOu+M4s1GiQPB0DVSA89enVFNXbJDUhSFHtZHuQJ6fpE5X8W2t96p84hGytkLW8tUzSKhZ6gdBA2JAFl1VvVSxbBowmljMph4M0MHdT7jdH0TbdC5bRq5ikmaYEr+mC/yjkxwsDSk5Mb5MQjR0a8oQEKcI8bsH1T1NIRXbJYDL8lggNEryUBJEmcAMysAhkehVSuAmccDhQ== 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=v03CdevXwJF2d4otlk7HhgBMc2Ys+T4DNyI2vkqnwiA=; b=DacKiRRl4Q1lAulD6jHuX2s+g4gjqkTBVQSG9BI0TjdNiQVHYNVL2CMBf3WyJ60QD7oXYv1W4pXKnGBoYsHRXDDPJsqvgsNZ7IRXP/uBCH5Wwpu4kczHhxaf71Ar16lU607sPJMQ6SIVjzy42gKEoXs1Bf8l5qFIKSkRY/d3qrcPV86bG3WqA0zg6Xgezxs+nE7/I38EW7teJVhoXQG3vD/1FeGH7m3u4C4pC+PNwzqRqWdlVQ3+mNPMJn1ckBmwakhn4wLeQ3BWiqasW+LWkmBAFi0UlTXl1q3FBNwkyA44twMcLJ67sk+BAOhN1W4k6Juiyg+W7jdgZbk5snIGCQ== 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=v03CdevXwJF2d4otlk7HhgBMc2Ys+T4DNyI2vkqnwiA=; b=jRLK/3pRvGTxHPYJUU2lco3V9PYo/dAZSNI2lyKMu3m9owIDuns8cWSXDZsRmuFqfopg6OR5hrxorXyruLyTCBcBIJwBAoYJDg7pq4Vlp2HB2qu6rk8Zs662xBH4ChiU6vcNJDN0zDUWAyGyVPzOCUHuVpmqdKGjqwnCYoScy4E= Received: from DM5PR10MB1660.namprd10.prod.outlook.com (2603:10b6:4:6::13) by DS7PR10MB5903.namprd10.prod.outlook.com (2603:10b6:8:85::9) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.5709.21; Thu, 13 Oct 2022 05:49:00 +0000 Received: from DM5PR10MB1660.namprd10.prod.outlook.com ([fe80::20f0:4bfa:166:8d2f]) by DM5PR10MB1660.namprd10.prod.outlook.com ([fe80::20f0:4bfa:166:8d2f%9]) with mapi id 15.20.5723.026; Thu, 13 Oct 2022 05:49:00 +0000 From: =?UTF-8?B?UmljaGFyZEhvIFvkvZXmmI7lv6Bd?= To: "Chang, Abner" , "devel@edk2.groups.io" , Andrew Fish , Leif Lindholm , Michael D Kinney CC: Michael Kubacki , Zhiguang Liu , Liming Gao , =?big5?B?VG9ueUxvIFvDuar3qlFd?= Subject: Re: [PATCH 1/3] UsbNetworkPkg/UsbRndis: Add USB RNDIS devices support Thread-Topic: [EXTERNAL] RE: [PATCH 1/3] UsbNetworkPkg/UsbRndis: Add USB RNDIS devices support Thread-Index: AQHY1wpGH06gF4PEpUaKgtTD6FIMNK4CmO5AgAlFeEA= Date: Thu, 13 Oct 2022 05:48:59 +0000 Message-ID: References: <20221003092643.4813-1-richardho@ami.com> In-Reply-To: Accept-Language: zh-TW, en-US X-MS-Has-Attach: X-MS-TNEF-Correlator: msip_labels: MSIP_Label_4342314e-0df4-4b58-84bf-38bed6170a0f_Enabled=true; MSIP_Label_4342314e-0df4-4b58-84bf-38bed6170a0f_SetDate=2022-10-07T08:21:39Z; MSIP_Label_4342314e-0df4-4b58-84bf-38bed6170a0f_Method=Standard; MSIP_Label_4342314e-0df4-4b58-84bf-38bed6170a0f_Name=General; MSIP_Label_4342314e-0df4-4b58-84bf-38bed6170a0f_SiteId=3dd8961f-e488-4e60-8e11-a82d994e183d; MSIP_Label_4342314e-0df4-4b58-84bf-38bed6170a0f_ActionId=6a61545e-ed65-44c3-9b54-2bef161f538a; MSIP_Label_4342314e-0df4-4b58-84bf-38bed6170a0f_ContentBits=1 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: DM5PR10MB1660:EE_|DS7PR10MB5903:EE_ x-ms-office365-filtering-correlation-id: bc6f490c-b6f7-434d-5750-08daacdea066 x-ms-exchange-senderadcheck: 1 x-ms-exchange-antispam-relay: 0 x-microsoft-antispam: BCL:0; x-microsoft-antispam-message-info: xmmZldKcA/ZAXP7ggPPftThNemt551KNm8f+qfkgiAqJjZIlYKwdhfSCMFWAEPA/h1hrNi9xDE7Cd2VCxHfZMIq6chE6YoLzUdwdCFnjofq2q89ENtDA9e0IOL8vjwXQdyL761nWxO+kbbfEX6ftpwCCnqYjjqk9Q+Tnw4dP/brjmyE53IEL56GU0sRdeqS+Ipo9CB2moQziDRJVfXV04EL6BEROw+j9PY/3bpgYASAzAMJOKAiq/6XThFx7x/jQ+H3KwHhwOQjvKZu2J7tIp433vKzf1lQGA2Qb70xyC5kyi9oMzIC52FH26h7aWnYp0ask1vNYK+yGV2ik51ZiaJH/CMrMQYXqfZ0ovDn/pkFgeGGu+3EmIuKZ7osaXrCmzDeF/5CvCXBSP73vHFsP8qu5c85oYdHgq6NMBp3d5qEpNIGULuIdCd5NH6twqL+iA5Qc03ElJNqzpFucGrZEvhtO/EjWfgjgQXCDUUV6VdONaoEfFL8HxT1NZazpoMkgKSOxChlbU35sw5ccrpR5RslhvHu/C2X2JpLylD92UBRKBqBas1MxE5skg6phbxaijwx6kAJIso9lYq0uFK+mvbxTenYXq8IAcvJYcnKxiKBi6KHityKmUd6QjV+b1A53w7MhBABy42/5KUWzsitpqjDdh0TFPFqFFQ5aq0a+FU9w+WCiSKRUXrPyzNizREkc0yc/3pEOmqskt2wIhSUaE/hcg22ySra/sGziGJf2V0B30S05rnx8q7uj957ZwPzAN/cce/0PjxVUIrp1LJ/B1Zxgs2d6ls++fBXLpYBe5rv8+8rNy0Q3uH9JdlaFlqVj x-forefront-antispam-report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:DM5PR10MB1660.namprd10.prod.outlook.com;PTR:;CAT:NONE;SFS:(13230022)(4636009)(346002)(39850400004)(376002)(366004)(136003)(396003)(451199015)(54906003)(71200400001)(76116006)(66946007)(38070700005)(38100700002)(2906002)(5660300002)(66476007)(64756008)(41300700001)(8936002)(122000001)(66556008)(30864003)(66446008)(8676002)(4326008)(52536014)(26005)(9686003)(186003)(6506007)(478600001)(45080400002)(966005)(53546011)(7696005)(316002)(19627235002)(110136005)(83380400001)(66899015)(33656002)(40140700001)(85182001)(55016003)(86362001)(559001)(579004)(44824005);DIR:OUT;SFP:1101; x-ms-exchange-antispam-messagedata-chunkcount: 1 x-ms-exchange-antispam-messagedata-0: =?big5?B?T3psMkhHRkt1am9hU2cxK1pWUEh6NWpFZm8yejUzVndVTDlmK2tjV2FZRU50Rm5L?= =?big5?B?emhRT1pTNytQYW03SlBobG1ieWo3eEtlQzJTL3NLVWpBWUk4M0J2ell2VHpoekhT?= =?big5?B?dzBqNXcvNVg2QjA0THhHbGcwczBRUHNLT3dqeTlaMEd5VlBSTzdDL3d1UEQxai9P?= =?big5?B?Q3hSb3VML2Z4RjN6TmNGODdNY3Q4Q1dZeld3bnh6R3VQNGd2WXhKRU9yUEZITXEw?= =?big5?B?bjc2SWJIb052UWw1dTdRMmoyMnVJcExpeE9neHQveE9tenhKU0hkcVNLQ3J2MmxM?= =?big5?B?cDBpNVRLQ1ZBendPblY5b08yZ2NEQ1lKNXViRFVOU0t3QVRuc2tMTTBId0lOZnl0?= =?big5?B?N3crd2hscE5sdUM0dDBvUVMwU2pLUkZITkRhMGJNTWJ5YmVDNjhmZkoyVHV3Q1Ev?= =?big5?B?Rjd4MC9pZDJ4WllPcUNJWUxDOTFNaDBPRlFqZFFaUURqS2I5bFRndWJWK3QrYVRC?= =?big5?B?MFowcGFlOEFpV0NtZGRBaUhsT3ErdTQvNkIwNlVnWHlzdXU5RzR1WDY3bTBDYzN5?= =?big5?B?WVpCZytJeWpYZXpUZ0ZzaDdFaDlUYy9BYVArdU1RL1IwMHlEREpwUHp0eEdnWXBN?= =?big5?B?U0VZeHNFaTJ6TmlPY0RNVDVjUGhPTnVyTEIyZ1lVZFpKYUIrbDZDS1JyNVNHbEtO?= =?big5?B?UmczTEkxSVNFYjlUeWVCOUVtYjdsQmtpb1NEUFg4eUdpMVVNdFo2dTVjVWlBZDJU?= =?big5?B?MGxMdm9jbi9NS1hBMnBqQjl3c2thbldZT1RKNWNZdjhaZndUVnEwYWtNY1IvOTdn?= =?big5?B?Ri9aanhPblUvSkEvcmlRelZkeHk2VE9EaTF0aHdJZGxkczQ0RTRlQ3FRdFk0SUtj?= =?big5?B?YkVYdW1sd0NDcWxWTGdKNjg5cS93SGF4WUNTNUYyVGdORTNjbldjaEYvYVI0bE11?= =?big5?B?ZnRMSEUwc0w0bHFCaUluekYwNFVUbng4VVljSkR1NXRsN3doRlh0bjlMZFZobkhI?= =?big5?B?VWp3WGhvLzZxd2t0TFJ6Y3hNNVNTSFBtQVhUVm1xeERWaDRMS2pqTG12Q2tHbGJl?= =?big5?B?RU92YnBZeGNiek5hL0w4ZEpGSDhEUFJkTTIvK2lkUDhhSCtySGVVUHh4dXlySzV6?= =?big5?B?YlcyZms0cDV2THBjKzV4SjVGdElFTWRqdnJhYVpLWERZeXMvblpjYS9xWGQyRWJm?= =?big5?B?dmIrbXV6Z2E4eThDUktFcjErRk9YSGsxM2VXWS9HS0tRRVlFZDl2enNJdG1LN29L?= =?big5?B?N01USGFCbW5kOFdiSUFjTVdTVTViVE0yaEFQb2ZsaE13a1lWNFlWQTZyWkNKVG02?= =?big5?B?V0NWWjhmSUZCOGo5a3l5T1lyU1JwYTNuNnkrUUJQOG1sVEVUOWNKcjlNWVRYY1Fl?= =?big5?B?ZEdOeWluRXM5UUNucGtuQ25waUJPdUFuZ2xTZXdGQ094UHRucnR0WTh6VDlseHZP?= =?big5?B?NHh6aG1CNlBWb1J3WDZZQitwalhHQTNCVUpEaUZTV2tVd2hGeDlOK2VIYTh0NExZ?= =?big5?B?ZEd5d0llK0xzOGFodVJZendaaDY2THYwWDE4NUVreXI3TnFZUGNUUk56ejY4bVpa?= =?big5?B?TmQvU2FIaVRUN0kyQUV0aTA1NHMxVDUxeXJ2YzdXK0lla3JPUENLNkZ2azJBcEFz?= =?big5?B?QVMwRzNQRjRMVVRRODNVRzhqVkxEbFlrc1VSbVUxajN5NDNtQ09yejBic0NLbjNi?= =?big5?B?eVVkc3JzaStBcmhQd2hjZTRwY2ozTWRoUTBaV3JwSzVkOXA3WkNkQk5wM1VpK3E5?= =?big5?B?RW1tM3hQaFFHWXNUOFhNTUxSRmZDWEtlUWhsQUtBdFhRcUF2UzVxSjhiTWtoYTQv?= =?big5?B?dHBjc0hQdjd0NkRZYVN3QkMyV1pWc0lzcmdtZ0hhQWxvUTZRVWdsNzRqWTZrMzVl?= =?big5?B?Vk5CM3BqSkdlTjJPaEFRQVgySnFsTWljMGVNTTJyUVM0OTVCWEJjY2tQWXRWdDhz?= =?big5?B?ZnQ2M3oxN2EvbnhuZjVnNGp3OWtqbTdwS0h0R0RUbDRlTTFEdFZwYllTVUg1NTEz?= =?big5?B?QXB5SHBDQXYvUVY1aTUvS1laWXZnT1lxY0ZPemlhdW40YkplbzBwQnJUVTMzcHMv?= =?big5?Q?PS/b2SlPyO45Uf4R?= MIME-Version: 1.0 X-OriginatorOrg: ami.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-AuthSource: DM5PR10MB1660.namprd10.prod.outlook.com X-MS-Exchange-CrossTenant-Network-Message-Id: bc6f490c-b6f7-434d-5750-08daacdea066 X-MS-Exchange-CrossTenant-originalarrivaltime: 13 Oct 2022 05:48:59.9969 (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: Pu/3PWDufhMVrLqMu2XwYOV5Qxo2GdIPjbTPUSuocsiXMNDAaXseRD7acZkAa+DDL64EeYYP9QgiBHMO484wkg== X-MS-Exchange-Transport-CrossTenantHeadersStamped: DS7PR10MB5903 Content-Language: zh-TW Content-Type: text/plain; charset="big5" Content-Transfer-Encoding: base64 SGkgc3Rld2FyZHMsDQoNCk1heSB3ZSBoYXZlIG5ldyBVc2JOZXR3b3JrUGtnICB0byBjb250cm9s IFVTQiBDREMgZGV2aWNlIGFuZCBSTkRJUyBkZXZpY2U/IEFuZCB1c2UgbWV0YSBmaWxlcyB1bmRl ciAvQ29uZmlnLg0KSSB3aWxsIGNyZWF0ZSA2IHBhdGNoZXMgbmV4dCBpZiBhZ3JlZSB0aGF0Lg0K DQpUaGFua3MsDQpSaWNoYXJkDQoNCi0tLS0tT3JpZ2luYWwgTWVzc2FnZS0tLS0tDQpGcm9tOiBD aGFuZywgQWJuZXIgPEFibmVyLkNoYW5nQGFtZC5jb20+DQpTZW50OiAyMDIypn4xMKTrN6TpIDQ6 MjIgUE0NClRvOiBkZXZlbEBlZGsyLmdyb3Vwcy5pbzsgUmljaGFyZEhvIFum86n6qb5dIDxSaWNo YXJkSG9AYW1pLmNvbT47IEFuZHJldyBGaXNoIDxhZmlzaEBhcHBsZS5jb20+OyBMZWlmIExpbmRo b2xtIDxxdWljX2xsaW5kaG9sQHF1aWNpbmMuY29tPjsgTWljaGFlbCBEIEtpbm5leSA8bWljaGFl bC5kLmtpbm5leUBpbnRlbC5jb20+DQpDYzogTWljaGFlbCBLdWJhY2tpIDxtaWNoYWVsLmt1YmFj a2lAbWljcm9zb2Z0LmNvbT47IFpoaWd1YW5nIExpdSA8emhpZ3VhbmcubGl1QGludGVsLmNvbT47 IExpbWluZyBHYW8gPGdhb2xpbWluZ0BieW9zb2Z0LmNvbS5jbj47IFRvbnlMbyBbw7mq96pRXSA8 VG9ueUxvQGFtaS5jb20+DQpTdWJqZWN0OiBbRVhURVJOQUxdIFJFOiBbUEFUQ0ggMS8zXSBVc2JO ZXR3b3JrUGtnL1VzYlJuZGlzOiBBZGQgVVNCIFJORElTIGRldmljZXMgc3VwcG9ydA0KDQoNCioq Q0FVVElPTjogVGhlIGUtbWFpbCBiZWxvdyBpcyBmcm9tIGFuIGV4dGVybmFsIHNvdXJjZS4gUGxl YXNlIGV4ZXJjaXNlIGNhdXRpb24gYmVmb3JlIG9wZW5pbmcgYXR0YWNobWVudHMsIGNsaWNraW5n IGxpbmtzLCBvciBmb2xsb3dpbmcgZ3VpZGFuY2UuKioNCg0KW0FNRCBPZmZpY2lhbCBVc2UgT25s eSAtIEdlbmVyYWxdDQoNCkhpIFJpY2hhcmQsDQpXZSB1c3VhbGx5IGhhdmUgdGhvc2UgbWV0YSBp bmNsdWRlIGZpbGVzIHVuZGVyIHRoZSBwYWNrYWdlIHJvb3QgaW5zdGVhZCBvZiBoYXZpbmcgdGhv c2UgdW5kZXIgL0NvbmZpZy4gSSB3aWxsIGxlYXZlIHRoZSBqdWRnZW1lbnQgdG8gc3Rld2FyZHMs IGFsc28gd2hldGhlciB0byBoYXZlIGEgbmV3IHBhY2thZ2UuDQpJIHdpbGwgc3VnZ2VzdCB5b3Ug Z2V0IHRoZSBhZ3JlZW1lbnQgZnJvbSBzdGV3YXJkcyBmaXJzdCwgb3RoZXJ3aXNlIHlvdSBtYXkg aGF2ZSBhbm90aGVyIGVmZm9ydCB0byBtb3ZlIHRob3NlIG1ldGEgZmlsZSBhcm91bmQuDQoNCkBB bmRyZXcgRmlzaEBMZWlmIExpbmRob2xtQE1pY2hhZWwgRCBLaW5uZXk6IEhvdyBkbyB5b3UgdGhp bmsgdG8gaGF2ZSB0aGUgbmV3IFVzYk5ldHdvcmtQa2c/DQoNCi4uLmFuZCB0aGUgcGF0Y2ggMS8z IGlzIHN0aWxsIHRvbyBiaWcsIHBsZWFzZSBoZWxwIHRvIGJyZWFrZG93biBwYXRjaCAxLzMgdG8g cGF0Y2hlcyAxLzYgLSA0LzYgYXMgdGhlIGJlbG93IGV4YW1wbGUuIFBhdGNoIDUvNiBhbmQgNi82 IHNob3VsZCBiZSBhY2NvbXBhbmllZCBFREsyIG1ldGEgZmlsZXMgdXBkYXRlLg0KUGF0Y2ggMS82 IEVESzIgcGFja2FnZSBtZXRhIGZpbGVzIGFuZCByZWFkbWUuDQpQYXRjaCAyLzYgRWRrSUlVc2JF dGhlcm5ldFByb3RvY29sLmgNClBhdGNoIDMvNiAgTmV0d29ya0NvbW1vbiArIEVESzIgbWV0YSBm aWxlcyB1cGRhdGUNClBhdGNoIDQvNiAgVXNiUm5kaXMgKyBFREsyIG1ldGEgZmlsZXMgdXBkYXRl DQpQYXRjaCA1LzYgVXNiTmV0d29ya1BrZy9Vc2JDZGNFY206IEFkZCBVU0IgQ2RjIEVDTSBkZXZp Y2VzIHN1cHBvcnQgICsgRURLMiBtZXRhIGZpbGVzIHVwZGF0ZQ0KUGF0Y2ggNi82IFVzYk5ldHdv cmtQa2cvVXNiQ2RjTmNtOiBBZGQgVVNCIENkYyBOQ00gZGV2aWNlcyBzdXBwb3J0KyBFREsyIG1l dGEgZmlsZXMgdXBkYXRlDQoNClRoYW5rcw0KQWJuZXINCg0KPiAtLS0tLU9yaWdpbmFsIE1lc3Nh Z2UtLS0tLQ0KPiBGcm9tOiBkZXZlbEBlZGsyLmdyb3Vwcy5pbyA8ZGV2ZWxAZWRrMi5ncm91cHMu aW8+IE9uIEJlaGFsZiBPZg0KPiBSaWNoYXJkSG8gWz8/P10gdmlhIGdyb3Vwcy5pbw0KPiBTZW50 OiBNb25kYXksIE9jdG9iZXIgMywgMjAyMiA1OjI3IFBNDQo+IFRvOiBkZXZlbEBlZGsyLmdyb3Vw cy5pbw0KPiBDYzogQW5kcmV3IEZpc2ggPGFmaXNoQGFwcGxlLmNvbT47IExlaWYgTGluZGhvbG0N Cj4gPHF1aWNfbGxpbmRob2xAcXVpY2luYy5jb20+OyBNaWNoYWVsIEQgS2lubmV5DQo+IDxtaWNo YWVsLmQua2lubmV5QGludGVsLmNvbT47IE1pY2hhZWwgS3ViYWNraQ0KPiA8bWljaGFlbC5rdWJh Y2tpQG1pY3Jvc29mdC5jb20+OyBaaGlndWFuZyBMaXUgPHpoaWd1YW5nLmxpdUBpbnRlbC5jb20+ Ow0KPiBMaW1pbmcgR2FvIDxnYW9saW1pbmdAYnlvc29mdC5jb20uY24+OyBUb255TG8gW8O5qveq UV0NCj4gPFRvbnlMb0BhbWkuY29tPg0KPiBTdWJqZWN0OiBbZWRrMi1kZXZlbF0gW1BBVENIIDEv M10gVXNiTmV0d29ya1BrZy9Vc2JSbmRpczogQWRkIFVTQg0KPiBSTkRJUyBkZXZpY2VzIHN1cHBv cnQNCj4NCj4gQ2F1dGlvbjogVGhpcyBtZXNzYWdlIG9yaWdpbmF0ZWQgZnJvbSBhbiBFeHRlcm5h bCBTb3VyY2UuIFVzZSBwcm9wZXINCj4gY2F1dGlvbiB3aGVuIG9wZW5pbmcgYXR0YWNobWVudHMs IGNsaWNraW5nIGxpbmtzLCBvciByZXNwb25kaW5nLg0KPg0KPg0KPiBUaGlzIGRyaXZlciBwcm92 aWRlcyBVRUZJIGRyaXZlciBmb3IgVVNCIFJORElTIGRldmljZQ0KPg0KPiBTaWduZWQtb2ZmLWJ5 OiBSaWNoYXJkIEhvIDxyaWNoYXJkaG9AYW1pLmNvbT4NCj4gQ2M6IEFuZHJldyBGaXNoIDxhZmlz aEBhcHBsZS5jb20+DQo+IENjOiBMZWlmIExpbmRob2xtIDxxdWljX2xsaW5kaG9sQHF1aWNpbmMu Y29tPg0KPiBDYzogTWljaGFlbCBEIEtpbm5leSA8bWljaGFlbC5kLmtpbm5leUBpbnRlbC5jb20+ DQo+IENjOiBNaWNoYWVsIEt1YmFja2kgPG1pY2hhZWwua3ViYWNraUBtaWNyb3NvZnQuY29tPg0K PiBDYzogWmhpZ3VhbmcgTGl1IDx6aGlndWFuZy5saXVAaW50ZWwuY29tPg0KPiBDYzogTGltaW5n IEdhbyA8Z2FvbGltaW5nQGJ5b3NvZnQuY29tLmNuPg0KPiBSZXZpZXdlZC1ieTogVG9ueSBMbyA8 dG9ueWxvQGFtaS5jb20+DQo+IC0tLQ0KPiAgVXNiTmV0d29ya1BrZy9Db25maWcvVXNiTmV0d29y a1BrZy5pbmMuZHNjICAgIHwgICAgOSArDQo+ICAuLi4vQ29uZmlnL1VzYk5ldHdvcmtQa2dDb21w b25lbnRzRHhlLmluYy5kc2MgfCAgIDIwICsNCj4gIC4uLi9Db25maWcvVXNiTmV0d29ya1BrZ0Nv bXBvbmVudHNEeGUuaW5jLmZkZiB8ICAgMjAgKw0KPiAgLi4uL0NvbmZpZy9Vc2JOZXR3b3JrUGtn RGVmaW5lcy5pbmMuZHNjICAgICAgIHwgICAyMyArDQo+ICAuLi4vUHJvdG9jb2wvRWRrSUlVc2JF dGhlcm5ldFByb3RvY29sLmggICAgICAgfCAgODc0ICsrKysrKysrKw0KPiAgVXNiTmV0d29ya1Br Zy9OZXR3b3JrQ29tbW9uL0NvbXBvbmVudE5hbWUuYyAgIHwgIDI2MyArKysNCj4gIFVzYk5ldHdv cmtQa2cvTmV0d29ya0NvbW1vbi9Ecml2ZXJCaW5kaW5nLmMgICB8ICA1ODEgKysrKysrDQo+ICBV c2JOZXR3b3JrUGtnL05ldHdvcmtDb21tb24vRHJpdmVyQmluZGluZy5oICAgfCAgMjYzICsrKw0K PiAgVXNiTmV0d29ya1BrZy9OZXR3b3JrQ29tbW9uL05ldHdvcmtDb21tb24uaW5mIHwgICA0NCAr DQo+ICBVc2JOZXR3b3JrUGtnL05ldHdvcmtDb21tb24vUHhlRnVuY3Rpb24uYyAgICAgfCAxNzM0 DQo+ICsrKysrKysrKysrKysrKysrDQo+ICBVc2JOZXR3b3JrUGtnL1JlYWRNZS5tZCAgICAgICAg ICAgICAgICAgICAgICAgfCAgIDY1ICsNCj4gIFVzYk5ldHdvcmtQa2cvUmVsZWFzZU5vdGVzLm1k ICAgICAgICAgICAgICAgICB8ICAgMTEgKw0KPiAgVXNiTmV0d29ya1BrZy9Vc2JOZXR3b3JrUGtn LmRlYyAgICAgICAgICAgICAgIHwgICAzNiArDQo+ICBVc2JOZXR3b3JrUGtnL1VzYlJuZGlzL0Nv bXBvbmVudE5hbWUuYyAgICAgICAgfCAgMTcyICsrDQo+ICBVc2JOZXR3b3JrUGtnL1VzYlJuZGlz L1VzYlJuZGlzLmMgICAgICAgICAgICAgfCAgODQ1ICsrKysrKysrDQo+ICBVc2JOZXR3b3JrUGtn L1VzYlJuZGlzL1VzYlJuZGlzLmggICAgICAgICAgICAgfCAgNTcxICsrKysrKw0KPiAgVXNiTmV0 d29ya1BrZy9Vc2JSbmRpcy9Vc2JSbmRpcy5pbmYgICAgICAgICAgIHwgICA0MiArDQo+ICBVc2JO ZXR3b3JrUGtnL1VzYlJuZGlzL1VzYlJuZGlzRnVuY3Rpb24uYyAgICAgfCAxNTkxICsrKysrKysr KysrKysrKw0KPiAgMTggZmlsZXMgY2hhbmdlZCwgNzE2NCBpbnNlcnRpb25zKCspDQo+ICBjcmVh dGUgbW9kZSAxMDA2NDQgVXNiTmV0d29ya1BrZy9Db25maWcvVXNiTmV0d29ya1BrZy5pbmMuZHNj DQo+ICBjcmVhdGUgbW9kZSAxMDA2NDQNCj4gVXNiTmV0d29ya1BrZy9Db25maWcvVXNiTmV0d29y a1BrZ0NvbXBvbmVudHNEeGUuaW5jLmRzYw0KPiAgY3JlYXRlIG1vZGUgMTAwNjQ0DQo+IFVzYk5l dHdvcmtQa2cvQ29uZmlnL1VzYk5ldHdvcmtQa2dDb21wb25lbnRzRHhlLmluYy5mZGYNCj4gIGNy ZWF0ZSBtb2RlIDEwMDY0NA0KPiBVc2JOZXR3b3JrUGtnL0NvbmZpZy9Vc2JOZXR3b3JrUGtnRGVm aW5lcy5pbmMuZHNjDQo+ICBjcmVhdGUgbW9kZSAxMDA2NDQNCj4gVXNiTmV0d29ya1BrZy9JbmNs dWRlL1Byb3RvY29sL0Vka0lJVXNiRXRoZXJuZXRQcm90b2NvbC5oDQo+ICBjcmVhdGUgbW9kZSAx MDA2NDQNCj4gVXNiTmV0d29ya1BrZy9OZXR3b3JrQ29tbW9uL0NvbXBvbmVudE5hbWUuYw0KPiAg Y3JlYXRlIG1vZGUgMTAwNjQ0IFVzYk5ldHdvcmtQa2cvTmV0d29ya0NvbW1vbi9Ecml2ZXJCaW5k aW5nLmMNCj4gIGNyZWF0ZSBtb2RlIDEwMDY0NCBVc2JOZXR3b3JrUGtnL05ldHdvcmtDb21tb24v RHJpdmVyQmluZGluZy5oDQo+ICBjcmVhdGUgbW9kZSAxMDA2NDQNCj4gVXNiTmV0d29ya1BrZy9O ZXR3b3JrQ29tbW9uL05ldHdvcmtDb21tb24uaW5mDQo+ICBjcmVhdGUgbW9kZSAxMDA2NDQgVXNi TmV0d29ya1BrZy9OZXR3b3JrQ29tbW9uL1B4ZUZ1bmN0aW9uLmMNCj4gIGNyZWF0ZSBtb2RlIDEw MDY0NCBVc2JOZXR3b3JrUGtnL1JlYWRNZS5tZA0KPiAgY3JlYXRlIG1vZGUgMTAwNjQ0IFVzYk5l dHdvcmtQa2cvUmVsZWFzZU5vdGVzLm1kDQo+ICBjcmVhdGUgbW9kZSAxMDA2NDQgVXNiTmV0d29y a1BrZy9Vc2JOZXR3b3JrUGtnLmRlYw0KPiAgY3JlYXRlIG1vZGUgMTAwNjQ0IFVzYk5ldHdvcmtQ a2cvVXNiUm5kaXMvQ29tcG9uZW50TmFtZS5jDQo+ICBjcmVhdGUgbW9kZSAxMDA2NDQgVXNiTmV0 d29ya1BrZy9Vc2JSbmRpcy9Vc2JSbmRpcy5jDQo+ICBjcmVhdGUgbW9kZSAxMDA2NDQgVXNiTmV0 d29ya1BrZy9Vc2JSbmRpcy9Vc2JSbmRpcy5oDQo+ICBjcmVhdGUgbW9kZSAxMDA2NDQgVXNiTmV0 d29ya1BrZy9Vc2JSbmRpcy9Vc2JSbmRpcy5pbmYNCj4gIGNyZWF0ZSBtb2RlIDEwMDY0NCBVc2JO ZXR3b3JrUGtnL1VzYlJuZGlzL1VzYlJuZGlzRnVuY3Rpb24uYw0KPg0KPiBkaWZmIC0tZ2l0IGEv VXNiTmV0d29ya1BrZy9Db25maWcvVXNiTmV0d29ya1BrZy5pbmMuZHNjDQo+IGIvVXNiTmV0d29y a1BrZy9Db25maWcvVXNiTmV0d29ya1BrZy5pbmMuZHNjDQo+IG5ldyBmaWxlIG1vZGUgMTAwNjQ0 DQo+IGluZGV4IDAwMDAwMDAwMDAuLmIxYzFiZWMxNjMNCj4gLS0tIC9kZXYvbnVsbA0KPiArKysg Yi9Vc2JOZXR3b3JrUGtnL0NvbmZpZy9Vc2JOZXR3b3JrUGtnLmluYy5kc2MNCj4gQEAgLTAsMCAr MSw5IEBADQo+ICsjIyBAZmlsZQ0KPiArIyBHbG9iYWwgRFNDIGRlZmluaXRpb25zIHRvIGJlIGlu Y2x1ZGVkIGludG8gcHJvamVjdCBEU0MgZmlsZS4NCj4gKyMNCj4gKyMgQ29weXJpZ2h0IChjKSAy MDIyLCBBbWVyaWNhbiBNZWdhdHJlbmRzIEludGVybmF0aW9uYWwgTExDLiBBbGwgcmlnaHRzDQo+ IHJlc2VydmVkLjxCUj4NCj4gKyMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEJTRC0yLUNsYXVz ZS1QYXRlbnQNCj4gKyMjDQo+ICsNCj4gK1tDb21wb25lbnRzLlg2NF0NCj4gKyFpbmNsdWRlIFVz Yk5ldHdvcmtQa2cvQ29uZmlnL1VzYk5ldHdvcmtQa2dDb21wb25lbnRzRHhlLmluYy5kc2MNCj4g ZGlmZiAtLWdpdCBhL1VzYk5ldHdvcmtQa2cvQ29uZmlnL1VzYk5ldHdvcmtQa2dDb21wb25lbnRz RHhlLmluYy5kc2MNCj4gYi9Vc2JOZXR3b3JrUGtnL0NvbmZpZy9Vc2JOZXR3b3JrUGtnQ29tcG9u ZW50c0R4ZS5pbmMuZHNjDQo+IG5ldyBmaWxlIG1vZGUgMTAwNjQ0DQo+IGluZGV4IDAwMDAwMDAw MDAuLjc0YjVhM2MxYjMNCj4gLS0tIC9kZXYvbnVsbA0KPiArKysgYi9Vc2JOZXR3b3JrUGtnL0Nv bmZpZy9Vc2JOZXR3b3JrUGtnQ29tcG9uZW50c0R4ZS5pbmMuZHNjDQo+IEBAIC0wLDAgKzEsMjAg QEANCj4gKyMjIEBmaWxlDQo+ICsjIExpc3Qgb2YgQ29yZSBDb21wb25lbnRzLg0KPiArIw0KPiAr IyBDb3B5cmlnaHQgKGMpIDIwMjIsIEFtZXJpY2FuIE1lZ2F0cmVuZHMgSW50ZXJuYXRpb25hbCBM TEMuIEFsbCByaWdodHMNCj4gcmVzZXJ2ZWQuPEJSPg0KPiArIyBTUERYLUxpY2Vuc2UtSWRlbnRp ZmllcjogQlNELTItQ2xhdXNlLVBhdGVudA0KPiArIyMNCj4gKw0KPiArICBVc2JOZXR3b3JrUGtn L05ldHdvcmtDb21tb24vTmV0d29ya0NvbW1vbi5pbmYNCj4gKw0KPiArIWlmIGdVc2JOZXR3b3Jr UGtnVG9rZW5TcGFjZUd1aWQuVXNiQ2RjRWNtU3VwcG9ydA0KPiArICBVc2JOZXR3b3JrUGtnL1Vz YkNkY0VjbS9Vc2JDZGNFY20uaW5mDQo+ICshZW5kaWYNCj4gKw0KPiArIWlmIGdVc2JOZXR3b3Jr UGtnVG9rZW5TcGFjZUd1aWQuVXNiQ2RjTmNtU3VwcG9ydA0KPiArICBVc2JOZXR3b3JrUGtnL1Vz YkNkY05jbS9Vc2JDZGNOY20uaW5mDQo+ICshZW5kaWYNCj4gKw0KPiArIWlmIGdVc2JOZXR3b3Jr UGtnVG9rZW5TcGFjZUd1aWQuVXNiUm5kaXNTdXBwb3J0DQo+ICsgIFVzYk5ldHdvcmtQa2cvVXNi Um5kaXMvVXNiUm5kaXMuaW5mDQo+ICshZW5kaWYNCj4gZGlmZiAtLWdpdCBhL1VzYk5ldHdvcmtQ a2cvQ29uZmlnL1VzYk5ldHdvcmtQa2dDb21wb25lbnRzRHhlLmluYy5mZGYNCj4gYi9Vc2JOZXR3 b3JrUGtnL0NvbmZpZy9Vc2JOZXR3b3JrUGtnQ29tcG9uZW50c0R4ZS5pbmMuZmRmDQo+IG5ldyBm aWxlIG1vZGUgMTAwNjQ0DQo+IGluZGV4IDAwMDAwMDAwMDAuLjVkNjI5M2EwZWQNCj4gLS0tIC9k ZXYvbnVsbA0KPiArKysgYi9Vc2JOZXR3b3JrUGtnL0NvbmZpZy9Vc2JOZXR3b3JrUGtnQ29tcG9u ZW50c0R4ZS5pbmMuZmRmDQo+IEBAIC0wLDAgKzEsMjAgQEANCj4gKyMjIEBmaWxlDQo+ICsjIExp c3Qgb2YgQ29yZSBDb21wb25lbnRzLg0KPiArIw0KPiArIyBDb3B5cmlnaHQgKGMpIDIwMjIsIEFt ZXJpY2FuIE1lZ2F0cmVuZHMgSW50ZXJuYXRpb25hbCBMTEMuIEFsbCByaWdodHMNCj4gcmVzZXJ2 ZWQuPEJSPg0KPiArIyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQlNELTItQ2xhdXNlLVBhdGVu dA0KPiArIyMNCj4gKw0KPiArICBJTkYgVXNiTmV0d29ya1BrZy9OZXR3b3JrQ29tbW9uL05ldHdv cmtDb21tb24uaW5mDQo+ICsNCj4gKyFpZiBnVXNiTmV0d29ya1BrZ1Rva2VuU3BhY2VHdWlkLlVz YkNkY0VjbVN1cHBvcnQNCj4gKyAgSU5GIFVzYk5ldHdvcmtQa2cvVXNiQ2RjRWNtL1VzYkNkY0Vj bS5pbmYNCj4gKyFlbmRpZg0KPiArDQo+ICshaWYgZ1VzYk5ldHdvcmtQa2dUb2tlblNwYWNlR3Vp ZC5Vc2JDZGNOY21TdXBwb3J0DQo+ICsgIElORiBVc2JOZXR3b3JrUGtnL1VzYkNkY05jbS9Vc2JD ZGNOY20uaW5mDQo+ICshZW5kaWYNCj4gKw0KPiArIWlmIGdVc2JOZXR3b3JrUGtnVG9rZW5TcGFj ZUd1aWQuVXNiUm5kaXNTdXBwb3J0DQo+ICsgIElORiBVc2JOZXR3b3JrUGtnL1VzYlJuZGlzL1Vz YlJuZGlzLmluZg0KPiArIWVuZGlmDQo+IGRpZmYgLS1naXQgYS9Vc2JOZXR3b3JrUGtnL0NvbmZp Zy9Vc2JOZXR3b3JrUGtnRGVmaW5lcy5pbmMuZHNjDQo+IGIvVXNiTmV0d29ya1BrZy9Db25maWcv VXNiTmV0d29ya1BrZ0RlZmluZXMuaW5jLmRzYw0KPiBuZXcgZmlsZSBtb2RlIDEwMDY0NA0KPiBp bmRleCAwMDAwMDAwMDAwLi4yYzFmMjU2ODViDQo+IC0tLSAvZGV2L251bGwNCj4gKysrIGIvVXNi TmV0d29ya1BrZy9Db25maWcvVXNiTmV0d29ya1BrZ0RlZmluZXMuaW5jLmRzYw0KPiBAQCAtMCww ICsxLDIzIEBADQo+ICsjIyBAZmlsZQ0KPiArIyBHbG9iYWwgc3dpdGNoZXMgZW5hYmxlL2Rpc2Fi bGUgcHJvamVjdCBmZWF0dXJlcy4NCj4gKyMNCj4gKyMgQ29weXJpZ2h0IChjKSAyMDIyLCBBbWVy aWNhbiBNZWdhdHJlbmRzIEludGVybmF0aW9uYWwgTExDLiBBbGwgcmlnaHRzDQo+IHJlc2VydmVk LjxCUj4NCj4gKyMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEJTRC0yLUNsYXVzZS1QYXRlbnQN Cj4gKyMjDQo+ICsNCj4gK1tEZWZpbmVzXQ0KPiArIWlmICJJQTMyIiBpbiAkKEFSQ0gpICYmICJY NjQiIGluICQoQVJDSCkNCj4gKyAgREVGSU5FIFBFST1JQTMyDQo+ICsgIERFRklORSBEWEU9WDY0 DQo+ICshZWxzZQ0KPiArICBERUZJTkUgUEVJPUNPTU1PTg0KPiArICBERUZJTkUgRFhFPUNPTU1P Tg0KPiArIWVuZGlmDQo+ICsNCj4gK1tQYWNrYWdlc10NCj4gKyAgVXNiTmV0d29ya1BrZy9Vc2JO ZXR3b3JrUGtnLmRlYw0KPiArDQo+ICtbUGNkc0ZlYXR1cmVGbGFnXQ0KPiArICBnVXNiTmV0d29y a1BrZ1Rva2VuU3BhY2VHdWlkLlVzYkNkY0VjbVN1cHBvcnR8RkFMU0UNCj4gKyAgZ1VzYk5ldHdv cmtQa2dUb2tlblNwYWNlR3VpZC5Vc2JDZGNOY21TdXBwb3J0fEZBTFNFDQo+ICsgIGdVc2JOZXR3 b3JrUGtnVG9rZW5TcGFjZUd1aWQuVXNiUm5kaXNTdXBwb3J0fFRSVUUNCj4gZGlmZiAtLWdpdCBh L1VzYk5ldHdvcmtQa2cvSW5jbHVkZS9Qcm90b2NvbC9FZGtJSVVzYkV0aGVybmV0UHJvdG9jb2wu aA0KPiBiL1VzYk5ldHdvcmtQa2cvSW5jbHVkZS9Qcm90b2NvbC9FZGtJSVVzYkV0aGVybmV0UHJv dG9jb2wuaA0KPiBuZXcgZmlsZSBtb2RlIDEwMDY0NA0KPiBpbmRleCAwMDAwMDAwMDAwLi41ZTJi OGQ4MTAwDQo+IC0tLSAvZGV2L251bGwNCj4gKysrIGIvVXNiTmV0d29ya1BrZy9JbmNsdWRlL1By b3RvY29sL0Vka0lJVXNiRXRoZXJuZXRQcm90b2NvbC5oDQo+IEBAIC0wLDAgKzEsODc0IEBADQo+ ICsvKiogQGZpbGUNCj4gKyAgSGVhZGVyIGZpbGUgY29udGFpbnMgY29kZSBmb3IgVVNCIEV0aGVy bmV0IFByb3RvY29sDQo+ICsgIGRlZmluaXRpb25zDQo+ICsNCj4gKyAgQ29weXJpZ2h0IChjKSAy MDIyLCBBbWVyaWNhbiBNZWdhdHJlbmRzIEludGVybmF0aW9uYWwgTExDLiBBbGwgcmlnaHRzDQo+ IHJlc2VydmVkLjxCUj4NCj4gKyAgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEJTRC0yLUNsYXVz ZS1QYXRlbnQNCj4gKyoqLw0KPiArDQo+ICsjaWZuZGVmIF9FREtJSV9VU0JfRVRIRVJORVRfUFJP VE9DT0xfSA0KPiArI2RlZmluZSBfRURLSUlfVVNCX0VUSEVSTkVUX1BST1RPQ09MX0gNCj4gKw0K PiArI2RlZmluZSBFREtJSV9VU0JfRVRIRVJORVRfUFJPVE9DT0xfR1VJRCBcDQo+ICsgICAgezB4 OGQ4OTY5Y2MsIDB4ZmViMCwgMHg0MzAzLCB7MHhiMiwgMHgxYSwgMHgxZiwgMHgxMSwgMHg2Ziwg MHgzOCwgMHg1NiwNCj4gMHg0M319DQo+ICsNCj4gK3R5cGVkZWYgc3RydWN0IF9FREtJSV9VU0Jf RVRIRVJORVRfUFJPVE9DT0wNCj4gRURLSUlfVVNCX0VUSEVSTkVUX1BST1RPQ09MOw0KPiArDQo+ ICsjZGVmaW5lIFVTQl9DRENfQ0xBU1MgICAgICAgICAgMHgwMg0KPiArI2RlZmluZSBVU0JfQ0RD X0FDTV9TVUJDTEFTUyAgIDB4MDINCj4gKyNkZWZpbmUgVVNCX0NEQ19FQ01fU1VCQ0xBU1MgICAw eDA2DQo+ICsjZGVmaW5lIFVTQl9DRENfTkNNX1NVQkNMQVNTICAgMHgwRA0KPiArI2RlZmluZSBV U0JfQ0RDX0RBVEFfQ0xBU1MgICAgIDB4MEENCj4gKyNkZWZpbmUgVVNCX0NEQ19EQVRBX1NVQkNM QVNTICAweDAwDQo+ICsjZGVmaW5lIFVTQl9OT19DTEFTU19QUk9UT0NPTCAgMHgwMA0KPiArI2Rl ZmluZSBVU0JfTkNNX05UQl9QUk9UT0NPTCAgIDB4MDENCj4gKyNkZWZpbmUgVVNCX1ZFTkRPUl9Q Uk9UT0NPTCAgICAweEZGDQo+ICsNCj4gKy8vIFR5cGUgVmFsdWVzIGZvciB0aGUgRGVzY3JpcHRv clR5cGUgRmllbGQNCj4gKyNkZWZpbmUgQ1NfSU5URVJGQUNFICAweDI0DQo+ICsjZGVmaW5lIENT X0VORFBPSU5UICAgMHgyNQ0KPiArDQo+ICsvLyBEZXNjcmlwdG9yIFN1YlR5cGUgaW4gRnVuY3Rp b25hbCBEZXNjcmlwdG9ycw0KPiArI2RlZmluZSBIRUFERVJfRlVOX0RFU0NSSVBUT1IgICAgMHgw MA0KPiArI2RlZmluZSBVTklPTl9GVU5fREVTQ1JJUFRPUiAgICAgMHgwNg0KPiArI2RlZmluZSBF VEhFUk5FVF9GVU5fREVTQ1JJUFRPUiAgMHgwRg0KPiArDQo+ICsjZGVmaW5lIE1BWF9MQU5fSU5U RVJGQUNFICAweDEwDQo+ICsNCj4gKy8vIFRhYmxlIDIwOiBDbGFzcy1TcGVjaWZpYyBOb3RpZmlj YXRpb24gQ29kZXMNCj4gKyNkZWZpbmUgVVNCX0NEQ19ORVRXT1JLX0NPTk5FQ1RJT04gIDB4MDAN Cj4gKw0KPiArLy8gNi4zLjEgTmV0d29ya0Nvbm5lY3Rpb24NCj4gKyNkZWZpbmUgTkVUV09SS19D T05ORUNURUQgICAweDAxDQo+ICsjZGVmaW5lIE5FVFdPUktfRElTQ09OTkVDVCAgMHgwMA0KPiAr DQo+ICsvLyBVU0IgSGVhZGVyIGZ1bmN0aW9uYWwgRGVzY3JpcHRvcg0KPiArdHlwZWRlZiBzdHJ1 Y3Qgew0KPiArICBVSU5UOCAgICAgRnVuY3Rpb25MZW5ndGg7DQo+ICsgIFVJTlQ4ICAgICBEZXNj cmlwdG9yVHlwZTsNCj4gKyAgVUlOVDggICAgIERlc2NyaXB0b3JTdWJ0eXBlOw0KPiArICBVSU5U MTYgICAgQmNkQ2RjOw0KPiArfSBVU0JfSEVBREVSX0ZVTl9ERVNDUklQVE9SOw0KPiArDQo+ICsv LyBVU0IgVW5pb24gRnVuY3Rpb25hbCBEZXNjcmlwdG9yDQo+ICt0eXBlZGVmIHN0cnVjdCB7DQo+ ICsgIFVJTlQ4ICAgIEZ1bmN0aW9uTGVuZ3RoOw0KPiArICBVSU5UOCAgICBEZXNjcmlwdG9yVHlw ZTsNCj4gKyAgVUlOVDggICAgRGVzY3JpcHRvclN1YnR5cGU7DQo+ICsgIFVJTlQ4ICAgIE1hc3Rl ckludGVyZmFjZTsNCj4gKyAgVUlOVDggICAgU2xhdmVJbnRlcmZhY2U7DQo+ICt9IFVTQl9VTklP Tl9GVU5fREVTQ1JJUFRPUjsNCj4gKw0KPiArLy8gVVNCIEV0aGVybmV0IEZ1bmN0aW9uYWwgRGVz Y3JpcHRvcg0KPiArdHlwZWRlZiBzdHJ1Y3Qgew0KPiArICBVSU5UOCAgICAgRnVuY3Rpb25MZW5n dGg7DQo+ICsgIFVJTlQ4ICAgICBEZXNjcmlwdG9yVHlwZTsNCj4gKyAgVUlOVDggICAgIERlc2Ny aXB0b3JTdWJ0eXBlOw0KPiArICBVSU5UOCAgICAgTWFjQWRkcmVzczsNCj4gKyAgVUlOVDMyICAg IEV0aGVybmV0U3RhdGlzdGljczsNCj4gKyAgVUlOVDE2ICAgIE1heFNlZ21lbnRTaXplOw0KPiAr ICBVSU5UMTYgICAgTnVtYmVyTWNGaWx0ZXJzOw0KPiArICBVSU5UOCAgICAgTnVtYmVyUG93ZXJG aWx0ZXJzOw0KPiArfSBVU0JfRVRIRVJORVRfRlVOX0RFU0NSSVBUT1I7DQo+ICsNCj4gK3R5cGVk ZWYgc3RydWN0IHsNCj4gKyAgVUlOVDMyICAgIFVzQml0UmF0ZTsNCj4gKyAgVUlOVDMyICAgIERz Qml0UmF0ZTsNCj4gK30gVVNCX0NPTk5FQ1RfU1BFRURfQ0hBTkdFOw0KPiArDQo+ICsvLyBSZXF1 ZXN0IFR5cGUgQ29kZXMgZm9yIFVTQiBFdGhlcm5ldA0KPiArI2RlZmluZSBVU0JfRVRIRVJORVRf R0VUX1JFUV9UWVBFICAweEExDQo+ICsjZGVmaW5lIFVTQl9FVEhSVE5FVF9TRVRfUkVRX1RZUEUg IDB4MjENCj4gKw0KPiArLy8gQ2xhc3MtU3BlY2lmaWMgUmVxdWVzdCBDb2RlcyBmb3IgRXRoZXJu ZXQgc3ViY2xhc3MNCj4gKy8vIFVTQiBFQ00gMS4yIHNwZWNpZmljYXRpb24sIFNlY3Rpb24gNi4y DQo+ICsjZGVmaW5lIFNFVF9FVEhfTVVMVElDQVNUX0ZJTFRFUlNfUkVRICAgICAgICAgICAgICAg IDB4NDANCj4gKyNkZWZpbmUgU0VUX0VUSF9QT1dFUl9NQU5BR0VNRU5UX1BBVFRFUk5fRklMVEVS X1JFUSAgMHg0MQ0KPiArI2RlZmluZSBHRVRfRVRIX1BPV0VSX01BTkFHRU1FTlRfUEFUVEVSTl9G SUxURVJfUkVRICAweDQyDQo+ICsjZGVmaW5lIFNFVF9FVEhfUEFDS0VUX0ZJTFRFUl9SRVEgICAg ICAgICAgICAgICAgICAgIDB4NDMNCj4gKyNkZWZpbmUgR0VUX0VUSF9TVEFUSVNUSUNfUkVRICAg ICAgICAgICAgICAgICAgICAgICAgMHg0NA0KPiArDQo+ICsvLyBVU0IgRUNNIGNvbW1hbmQgcmVx dWVzdCBsZW5ndGgNCj4gKyNkZWZpbmUgVVNCX0VUSF9QT1dFUl9GSUxURVJfTEVOR1RIICAgMiAv LyBTZWN0aW9uIDYuMi4zDQo+ICsjZGVmaW5lIFVTQl9FVEhfUEFDS0VUX0ZJTFRFUl9MRU5HVEgg IDAgLy8gU2VjdGlvbiA2LjIuNA0KPiArI2RlZmluZSBVU0JfRVRIX1NUQVRJU1RJQyAgICAgICAg ICAgICA0IC8vIFNlY3Rpb24gNi4yLjUNCj4gKw0KPiArLy8gVVNCIEV0aGVybmV0IFBhY2tldCBG aWx0ZXIgQml0bWFwDQo+ICsvLyBVU0IgRUNNIDEuMiBzcGVjaWZpY2F0aW9uLCBTZWN0aW9uIDYu Mi40DQo+ICsjZGVmaW5lIFVTQl9FVEhfUEFDS0VUX1RZUEVfUFJPTUlTQ1VPVVMgICAgQklUMA0K PiArI2RlZmluZSBVU0JfRVRIX1BBQ0tFVF9UWVBFX0FMTF9NVUxUSUNBU1QgIEJJVDENCj4gKyNk ZWZpbmUgVVNCX0VUSF9QQUNLRVRfVFlQRV9ESVJFQ1RFRCAgICAgICBCSVQyDQo+ICsjZGVmaW5l IFVTQl9FVEhfUEFDS0VUX1RZUEVfQlJPQURDQVNUICAgICAgQklUMw0KPiArI2RlZmluZSBVU0Jf RVRIX1BBQ0tFVF9UWVBFX01VTFRJQ0FTVCAgICAgIEJJVDQNCj4gKw0KPiArLy8gVVNCIEV0aGVy bmV0IFN0YXRpc3RpY3MgRmVhdHVyZSBTZWxlY3RvciBDb2Rlcw0KPiArLy8gVVNCIEVDTSAxLjIg c3BlY2lmaWNhdGlvbiwgU2VjdGlvbiA2LjIuNQ0KPiArI2RlZmluZSBVU0JfRVRIX1hNSVRfT0sg ICAgICAgICAgICAgICAgIDB4MDENCj4gKyNkZWZpbmUgVVNCX0VUSF9SQ1ZfT0sgICAgICAgICAg ICAgICAgICAweDAyDQo+ICsjZGVmaW5lIFVTQl9FVEhfWE1JVF9FUlJPUiAgICAgICAgICAgICAg MHgwMw0KPiArI2RlZmluZSBVU0JfRVRIX1JDVl9FUlJPUiAgICAgICAgICAgICAgIDB4MDQNCj4g KyNkZWZpbmUgVVNCX0VUSF9SQ1ZfTk9fQlVGRkVSICAgICAgICAgICAweDA1DQo+ICsjZGVmaW5l IFVTQl9FVEhfRElSRUNURURfQllURVNfWE1JVCAgICAgMHgwNg0KPiArI2RlZmluZSBVU0JfRVRI X0RJUkVDVEVEX0ZSQU1FU19YTUlUICAgIDB4MDcNCj4gKyNkZWZpbmUgVVNCX0VUSF9NVUxUSUNB U1RfQllURVNfWE1JVCAgICAweDA4DQo+ICsjZGVmaW5lIFVTQl9FVEhfTVVMVElDQVNUX0ZSQU1F U19YTUlUICAgMHgwOQ0KPiArI2RlZmluZSBVU0JfRVRIX0JST0FEQ0FTVF9CWVRFU19YTUlUICAg IDB4MEENCj4gKyNkZWZpbmUgVVNCX0VUSF9CUk9BRENBU1RfRlJBTUVTX1hNSVQgICAweDBCDQo+ ICsjZGVmaW5lIFVTQl9FVEhfRElSRUNURURfQllURVNfUkNWICAgICAgMHgwQw0KPiArI2RlZmlu ZSBVU0JfRVRIX0RJUkVDVEVEX0ZSQU1FU19SQ1YgICAgIDB4MEQNCj4gKyNkZWZpbmUgVVNCX0VU SF9NVUxUSUNBU1RfQllURVNfUkNWICAgICAweDBFDQo+ICsjZGVmaW5lIFVTQl9FVEhfTVVMVElD QVNUX0ZSQU1FU19SQ1YgICAgMHgwRg0KPiArI2RlZmluZSBVU0JfRVRIX0JST0FEQ0FTVF9CWVRF U19SQ1YgICAgIDB4MTANCj4gKyNkZWZpbmUgVVNCX0VUSF9CUk9BRENBU1RfRlJBTUVTX1JDViAg ICAweDExDQo+ICsjZGVmaW5lIFVTQl9FVEhfUkNWX0NSQ19FUlJPUiAgICAgICAgICAgMHgxMg0K PiArI2RlZmluZSBVU0JfRVRIX1RSQU5TTUlUX1FVRVVFX0xFTkdUSCAgIDB4MTMNCj4gKyNkZWZp bmUgVVNCX0VUSF9SQ1ZfRVJST1JfQUxJR05NRU5UICAgICAweDE0DQo+ICsjZGVmaW5lIFVTQl9F VEhfWE1JVF9PTkVfQ09MTElTSU9OICAgICAgMHgxNQ0KPiArI2RlZmluZSBVU0JfRVRIX1hNSVRf TU9SRV9DT0xMSVNJT05TICAgIDB4MTYNCj4gKyNkZWZpbmUgVVNCX0VUSF9YTUlUX0RFRkVSUkVE ICAgICAgICAgICAweDE3DQo+ICsjZGVmaW5lIFVTQl9FVEhfWE1JVF9NQVhfQ09MTElTSU9OUyAg ICAgMHgxOA0KPiArI2RlZmluZSBVU0JfRVRIX1JDVl9PVkVSUlVOICAgICAgICAgICAgIDB4MTkN Cj4gKyNkZWZpbmUgVVNCX0VUSF9YTUlUX1VOREVSUlVOICAgICAgICAgICAweDFBDQo+ICsjZGVm aW5lIFVTQl9FVEhfWE1JVF9IRUFSVEJFQVRfRkFJTFVSRSAgMHgxQg0KPiArI2RlZmluZSBVU0Jf RVRIX1hNSVRfVElNRVNfQ1JTX0xPU1QgICAgIDB4MUMNCj4gKyNkZWZpbmUgVVNCX0VUSF9YTUlU X0xBVEVfQ09MTElTSU9OUyAgICAweDFEDQo+ICsNCj4gKy8vIE5JQyBJbmZvcm1hdGlvbg0KPiAr dHlwZWRlZiBzdHJ1Y3Qgew0KPiArICBVSU5UMzIgICAgICAgICAgICAgICAgICAgICAgICAgU2ln bmF0dXJlOw0KPiArICBFREtJSV9VU0JfRVRIRVJORVRfUFJPVE9DT0wgICAgKlVzYkV0aDsNCj4g KyAgVUlOVDE2ICAgICAgICAgICAgICAgICAgICAgICAgIEludGVycnVwT3BGbGFnOw0KPiArICBV SU5UNjQgICAgICAgICAgICAgICAgICAgICAgICAgTWFwcGVkQWRkcjsNCj4gKyAgUFhFX01BQ19B RERSICAgICAgICAgICAgICAgICAgIE1jYXN0TGlzdFtNQVhfTUNBU1RfQUREUkVTU19DTlRdOw0K PiArICBVSU5UOCAgICAgICAgICAgICAgICAgICAgICAgICAgTWNhc3RDb3VudDsNCj4gKyAgVUlO VDY0ICAgICAgICAgICAgICAgICAgICAgICAgIE1lZGlhSGVhZGVyW01BWF9YTUlUX0JVRkZFUlNd Ow0KPiArICBVSU5UOCAgICAgICAgICAgICAgICAgICAgICAgICAgVHhCdWZmZXJDb3VudDsNCj4g KyAgVUlOVDE2ICAgICAgICAgICAgICAgICAgICAgICAgIFN0YXRlOw0KPiArICBCT09MRUFOICAg ICAgICAgICAgICAgICAgICAgICAgQ2FuVHJhbnNtaXQ7DQo+ICsgIEJPT0xFQU4gICAgICAgICAg ICAgICAgICAgICAgICBDYW5SZWNlaXZlOw0KPiArICBVSU5UMTYgICAgICAgICAgICAgICAgICAg ICAgICAgUmVjZWl2ZVN0YXR1czsNCj4gKyAgVUlOVDggICAgICAgICAgICAgICAgICAgICAgICAg IFJ4RmlsdGVyOw0KPiArICBVSU5UMzIgICAgICAgICAgICAgICAgICAgICAgICAgUnhGcmFtZTsN Cj4gKyAgVUlOVDMyICAgICAgICAgICAgICAgICAgICAgICAgIFR4RnJhbWU7DQo+ICsgIFVJTlQx NiAgICAgICAgICAgICAgICAgICAgICAgICBOZXR3b3JrQ29ubmVjdDsNCj4gKyAgVUlOVDggICAg ICAgICAgICAgICAgICAgICAgICAgIENhYmxlRGV0ZWN0Ow0KPiArICBVSU5UMTYgICAgICAgICAg ICAgICAgICAgICAgICAgTWF4U2VnbWVudFNpemU7DQo+ICsgIEVGSV9NQUNfQUREUkVTUyAgICAg ICAgICAgICAgICBNYWNBZGRyOw0KPiArICBQWEVfQ1BCX1NUQVJUXzMxICAgICAgICAgICAgICAg UHhlU3RhcnQ7DQo+ICsgIFBYRV9DUEJfSU5JVElBTElaRSAgICAgICAgICAgICBQeGVJbml0Ow0K PiArICBVSU5UOCAgICAgICAgICAgICAgICAgICAgICAgICAgUGVybU5vZGVBZGRyZXNzW1BYRV9N QUNfTEVOR1RIXTsNCj4gKyAgVUlOVDggICAgICAgICAgICAgICAgICAgICAgICAgIEN1cnJlbnRO b2RlQWRkcmVzc1tQWEVfTUFDX0xFTkdUSF07DQo+ICsgIFVJTlQ4ICAgICAgICAgICAgICAgICAg ICAgICAgICBCcm9hZGNhc3ROb2RlQWRkcmVzc1tQWEVfTUFDX0xFTkdUSF07DQo+ICsgIEVGSV9V U0JfREVWSUNFX1JFUVVFU1QgICAgICAgICBSZXF1ZXN0Ow0KPiArfSBOSUNfREFUQTsNCj4gKw0K PiArI2RlZmluZSBOSUNfREFUQV9TSUdOQVRVUkUgIFNJR05BVFVSRV8zMignbicsICdpJywgJ2Mn LCAnZCcpDQo+ICsjZGVmaW5lIE5JQ19EQVRBX0ZST01fRURLSUlfVVNCX0VUSEVSTkVUX1BST1RP Q09MKGEpICBDUiAoYSwNCj4gTklDX0RBVEEsIFVzYkV0aCwgTklDX0RBVEFfU0lHTkFUVVJFKQ0K PiArDQo+ICsvKioNCj4gKyAgVGhpcyBjb21tYW5kIGlzIHVzZWQgdG8gZGV0ZXJtaW5lIHRoZSBv cGVyYXRpb25hbCBzdGF0ZSBvZiB0aGUgVU5ESS4NCj4gKw0KPiArICBAcGFyYW1baW5dICBDZGIg IEEgcG9pbnRlciB0byB0aGUgY29tbWFuZCBkZXNjcmlwdG9yIGJsb2NrLg0KPiArICBAcGFyYW1b aW5dICBOaWMgIEEgcG9pbnRlciB0byB0aGUgTmV0d29yayBpbnRlcmZhY2UgY29udHJvbGxlciBk YXRhLg0KPiArDQo+ICsgIEByZXR2YWwgRUZJX1NVQ0NFU1MgICAgICAgICAgIFRoZSByZXF1ZXN0 IGV4ZWN1dGVkIHN1Y2Nlc3NmdWxseS4NCj4gKyAgQHJldHZhbCBFRklfVElNRU9VVCAgICAgICAg ICAgQSB0aW1lb3V0IG9jY3VycmVkIGV4ZWN1dGluZyB0aGUgcmVxdWVzdC4NCj4gKyAgQHJldHZh bCBFRklfREVWSUNFX0VSUk9SICAgICAgVGhlIHJlcXVlc3QgZmFpbGVkIGR1ZSB0byBhIGRldmlj ZSBlcnJvci4NCj4gKyAgQHJldHZhbCBFRklfSU5WQUxJRF9QQVJBTUVURVIgT25lIG9mIHRoZSBw YXJhbWV0ZXJzIGhhcyBhbiBpbnZhbGlkDQo+IHZhbHVlLg0KPiArICBAcmV0dmFsIEVGSV9VTlNV UFBPUlRFRCAgICAgICBOb3Qgc3VwcG9ydGVkLg0KPiArKiovDQo+ICt0eXBlZGVmDQo+ICtFRklf U1RBVFVTDQo+ICsoRUZJQVBJICpFREtJSV9VU0JfRVRIRVJORVRfVU5ESV9HRVRfU1RBVEUpKA0K PiArICBJTiAgUFhFX0NEQiAgICAgKkNkYiwNCj4gKyAgSU4gIE5JQ19EQVRBICAgICpOaWMNCj4g KyAgKTsNCj4gKw0KPiArLyoqDQo+ICsgIFRoaXMgY29tbWFuZCBpcyB1c2VkIHRvIGNoYW5nZSB0 aGUgVU5ESSBvcGVyYXRpb25hbCBzdGF0ZSBmcm9tIHN0b3BwZWQNCj4gdG8gc3RhcnRlZC4NCj4g Kw0KPiArICBAcGFyYW1baW5dICBDZGIgIEEgcG9pbnRlciB0byB0aGUgY29tbWFuZCBkZXNjcmlw dG9yIGJsb2NrLg0KPiArICBAcGFyYW1baW5dICBOaWMgIEEgcG9pbnRlciB0byB0aGUgTmV0d29y ayBpbnRlcmZhY2UgY29udHJvbGxlciBkYXRhLg0KPiArDQo+ICsgIEByZXR2YWwgRUZJX1NVQ0NF U1MgICAgICAgICAgIFRoZSByZXF1ZXN0IGV4ZWN1dGVkIHN1Y2Nlc3NmdWxseS4NCj4gKyAgQHJl dHZhbCBFRklfVElNRU9VVCAgICAgICAgICAgQSB0aW1lb3V0IG9jY3VycmVkIGV4ZWN1dGluZyB0 aGUgcmVxdWVzdC4NCj4gKyAgQHJldHZhbCBFRklfREVWSUNFX0VSUk9SICAgICAgVGhlIHJlcXVl c3QgZmFpbGVkIGR1ZSB0byBhIGRldmljZSBlcnJvci4NCj4gKyAgQHJldHZhbCBFRklfSU5WQUxJ RF9QQVJBTUVURVIgT25lIG9mIHRoZSBwYXJhbWV0ZXJzIGhhcyBhbiBpbnZhbGlkDQo+IHZhbHVl Lg0KPiArICBAcmV0dmFsIEVGSV9VTlNVUFBPUlRFRCAgICAgICBOb3Qgc3VwcG9ydGVkLg0KPiAr KiovDQo+ICt0eXBlZGVmDQo+ICtFRklfU1RBVFVTDQo+ICsoRUZJQVBJICpFREtJSV9VU0JfRVRI RVJORVRfVU5ESV9TVEFSVCkoDQo+ICsgIElOICBQWEVfQ0RCICAgICAqQ2RiLA0KPiArICBJTiAg TklDX0RBVEEgICAgKk5pYw0KPiArICApOw0KPiArDQo+ICsvKioNCj4gKyAgVGhpcyBjb21tYW5k IGlzIHVzZWQgdG8gY2hhbmdlIHRoZSBVTkRJIG9wZXJhdGlvbmFsIHN0YXRlIGZyb20gc3RhcnRl ZA0KPiB0byBzdG9wcGVkLg0KPiArDQo+ICsgIEBwYXJhbVtpbl0gIENkYiAgQSBwb2ludGVyIHRv IHRoZSBjb21tYW5kIGRlc2NyaXB0b3IgYmxvY2suDQo+ICsgIEBwYXJhbVtpbl0gIE5pYyAgQSBw b2ludGVyIHRvIHRoZSBOZXR3b3JrIGludGVyZmFjZSBjb250cm9sbGVyIGRhdGEuDQo+ICsNCj4g KyAgQHJldHZhbCBFRklfU1VDQ0VTUyAgICAgICAgICAgVGhlIHJlcXVlc3QgZXhlY3V0ZWQgc3Vj Y2Vzc2Z1bGx5Lg0KPiArICBAcmV0dmFsIEVGSV9USU1FT1VUICAgICAgICAgICBBIHRpbWVvdXQg b2NjdXJyZWQgZXhlY3V0aW5nIHRoZSByZXF1ZXN0Lg0KPiArICBAcmV0dmFsIEVGSV9ERVZJQ0Vf RVJST1IgICAgICBUaGUgcmVxdWVzdCBmYWlsZWQgZHVlIHRvIGEgZGV2aWNlIGVycm9yLg0KPiAr ICBAcmV0dmFsIEVGSV9JTlZBTElEX1BBUkFNRVRFUiBPbmUgb2YgdGhlIHBhcmFtZXRlcnMgaGFz IGFuIGludmFsaWQNCj4gdmFsdWUuDQo+ICsgIEByZXR2YWwgRUZJX1VOU1VQUE9SVEVEICAgICAg IE5vdCBzdXBwb3J0ZWQuDQo+ICsqKi8NCj4gK3R5cGVkZWYNCj4gK0VGSV9TVEFUVVMNCj4gKyhF RklBUEkgKkVES0lJX1VTQl9FVEhFUk5FVF9VTkRJX1NUT1ApKA0KPiArICBJTiAgUFhFX0NEQiAg ICAgKkNkYiwNCj4gKyAgSU4gIE5JQ19EQVRBICAgICpOaWMNCj4gKyAgKTsNCj4gKw0KPiArLyoq DQo+ICsgIFRoaXMgY29tbWFuZCBpcyB1c2VkIHRvIHJldHJpZXZlIGluaXRpYWxpemF0aW9uIGlu Zm9ybWF0aW9uIHRoYXQgaXMNCj4gKyAgbmVlZGVkIGJ5IGRyaXZlcnMgYW5kIGFwcGxpY2F0aW9u cyB0byBpbml0aWFsaXplZCBVTkRJLg0KPiArDQo+ICsgIEBwYXJhbVtpbl0gIENkYiAgQSBwb2lu dGVyIHRvIHRoZSBjb21tYW5kIGRlc2NyaXB0b3IgYmxvY2suDQo+ICsgIEBwYXJhbVtpbl0gIE5p YyAgQSBwb2ludGVyIHRvIHRoZSBOZXR3b3JrIGludGVyZmFjZSBjb250cm9sbGVyIGRhdGEuDQo+ ICsNCj4gKyAgQHJldHZhbCBFRklfU1VDQ0VTUyAgICAgICAgICAgVGhlIHJlcXVlc3QgZXhlY3V0 ZWQgc3VjY2Vzc2Z1bGx5Lg0KPiArICBAcmV0dmFsIEVGSV9USU1FT1VUICAgICAgICAgICBBIHRp bWVvdXQgb2NjdXJyZWQgZXhlY3V0aW5nIHRoZSByZXF1ZXN0Lg0KPiArICBAcmV0dmFsIEVGSV9E RVZJQ0VfRVJST1IgICAgICBUaGUgcmVxdWVzdCBmYWlsZWQgZHVlIHRvIGEgZGV2aWNlIGVycm9y Lg0KPiArICBAcmV0dmFsIEVGSV9JTlZBTElEX1BBUkFNRVRFUiBPbmUgb2YgdGhlIHBhcmFtZXRl cnMgaGFzIGFuIGludmFsaWQNCj4gdmFsdWUuDQo+ICsgIEByZXR2YWwgRUZJX1VOU1VQUE9SVEVE ICAgICAgIE5vdCBzdXBwb3J0ZWQuDQo+ICsqKi8NCj4gK3R5cGVkZWYNCj4gK0VGSV9TVEFUVVMN Cj4gKyhFRklBUEkgKkVES0lJX1VTQl9FVEhFUk5FVF9VTkRJX0dFVF9JTklUX0lORk8pKA0KPiAr ICBJTiAgUFhFX0NEQiAgICAgKkNkYiwNCj4gKyAgSU4gIE5JQ19EQVRBICAgICpOaWMNCj4gKyAg KTsNCj4gKw0KPiArLyoqDQo+ICsgIFRoaXMgY29tbWFuZCBpcyB1c2VkIHRvIHJldHJpZXZlIGNv bmZpZ3VyYXRpb24gaW5mb3JtYXRpb24gYWJvdXQNCj4gKyAgdGhlIE5JQyBiZWluZyBjb250cm9s bGVkIGJ5IHRoZSBVTkRJLg0KPiArDQo+ICsgIEBwYXJhbVtpbl0gIENkYiAgQSBwb2ludGVyIHRv IHRoZSBjb21tYW5kIGRlc2NyaXB0b3IgYmxvY2suDQo+ICsgIEBwYXJhbVtpbl0gIE5pYyAgQSBw b2ludGVyIHRvIHRoZSBOZXR3b3JrIGludGVyZmFjZSBjb250cm9sbGVyIGRhdGEuDQo+ICsNCj4g KyAgQHJldHZhbCBFRklfU1VDQ0VTUyAgICAgICAgICAgVGhlIHJlcXVlc3QgZXhlY3V0ZWQgc3Vj Y2Vzc2Z1bGx5Lg0KPiArICBAcmV0dmFsIEVGSV9USU1FT1VUICAgICAgICAgICBBIHRpbWVvdXQg b2NjdXJyZWQgZXhlY3V0aW5nIHRoZSByZXF1ZXN0Lg0KPiArICBAcmV0dmFsIEVGSV9ERVZJQ0Vf RVJST1IgICAgICBUaGUgcmVxdWVzdCBmYWlsZWQgZHVlIHRvIGEgZGV2aWNlIGVycm9yLg0KPiAr ICBAcmV0dmFsIEVGSV9JTlZBTElEX1BBUkFNRVRFUiBPbmUgb2YgdGhlIHBhcmFtZXRlcnMgaGFz IGFuIGludmFsaWQNCj4gdmFsdWUuDQo+ICsgIEByZXR2YWwgRUZJX1VOU1VQUE9SVEVEICAgICAg IE5vdCBzdXBwb3J0ZWQuDQo+ICsqKi8NCj4gK3R5cGVkZWYNCj4gK0VGSV9TVEFUVVMNCj4gKyhF RklBUEkgKkVES0lJX1VTQl9FVEhFUk5FVF9VTkRJX0dFVF9DT05GSUdfSU5GTykoDQo+ICsgIElO ICBQWEVfQ0RCICAgICAqQ2RiLA0KPiArICBJTiAgTklDX0RBVEEgICAgKk5pYw0KPiArICApOw0K PiArDQo+ICsvKioNCj4gKyAgVGhpcyBjb21tYW5kIHJlc2V0cyB0aGUgbmV0d29yayBhZGFwdGVy IGFuZCBpbml0aWFsaXplcyBVTkRJIHVzaW5nDQo+ICsgIHRoZSBwYXJhbWV0ZXJzIHN1cHBsaWVk IGluIHRoZSBDUEIuDQo+ICsNCj4gKyAgQHBhcmFtW2luXSAgQ2RiICBBIHBvaW50ZXIgdG8gdGhl IGNvbW1hbmQgZGVzY3JpcHRvciBibG9jay4NCj4gKyAgQHBhcmFtW2luXSAgTmljICBBIHBvaW50 ZXIgdG8gdGhlIE5ldHdvcmsgaW50ZXJmYWNlIGNvbnRyb2xsZXIgZGF0YS4NCj4gKw0KPiArICBA cmV0dmFsIEVGSV9TVUNDRVNTICAgICAgICAgICBUaGUgcmVxdWVzdCBleGVjdXRlZCBzdWNjZXNz ZnVsbHkuDQo+ICsgIEByZXR2YWwgRUZJX1RJTUVPVVQgICAgICAgICAgIEEgdGltZW91dCBvY2N1 cnJlZCBleGVjdXRpbmcgdGhlIHJlcXVlc3QuDQo+ICsgIEByZXR2YWwgRUZJX0RFVklDRV9FUlJP UiAgICAgIFRoZSByZXF1ZXN0IGZhaWxlZCBkdWUgdG8gYSBkZXZpY2UgZXJyb3IuDQo+ICsgIEBy ZXR2YWwgRUZJX0lOVkFMSURfUEFSQU1FVEVSIE9uZSBvZiB0aGUgcGFyYW1ldGVycyBoYXMgYW4g aW52YWxpZA0KPiB2YWx1ZS4NCj4gKyAgQHJldHZhbCBFRklfVU5TVVBQT1JURUQgICAgICAgTm90 IHN1cHBvcnRlZC4NCj4gKyoqLw0KPiArdHlwZWRlZg0KPiArRUZJX1NUQVRVUw0KPiArKEVGSUFQ SSAqRURLSUlfVVNCX0VUSEVSTkVUX1VORElfSU5JVElBTElaRSkoDQo+ICsgIElOICBQWEVfQ0RC ICAgKkNkYiwNCj4gKyAgSU4gIE5JQ19EQVRBICAqTmljDQo+ICsgICk7DQo+ICsNCj4gKy8qKg0K PiArICBUaGlzIGNvbW1hbmQgcmVzZXRzIHRoZSBuZXR3b3JrIGFkYXB0ZXIgYW5kIHJlaW5pdGlh bGl6ZXMgdGhlIFVOREkNCj4gKyAgd2l0aCB0aGUgc2FtZSBwYXJhbWV0ZXJzIHByb3ZpZGVkIGlu IHRoZSBJbml0aWFsaXplIGNvbW1hbmQuDQo+ICsNCj4gKyAgQHBhcmFtW2luXSAgQ2RiICBBIHBv aW50ZXIgdG8gdGhlIGNvbW1hbmQgZGVzY3JpcHRvciBibG9jay4NCj4gKyAgQHBhcmFtW2luXSAg TmljICBBIHBvaW50ZXIgdG8gdGhlIE5ldHdvcmsgaW50ZXJmYWNlIGNvbnRyb2xsZXIgZGF0YS4N Cj4gKw0KPiArICBAcmV0dmFsIEVGSV9TVUNDRVNTICAgICAgICAgICBUaGUgcmVxdWVzdCBleGVj dXRlZCBzdWNjZXNzZnVsbHkuDQo+ICsgIEByZXR2YWwgRUZJX1RJTUVPVVQgICAgICAgICAgIEEg dGltZW91dCBvY2N1cnJlZCBleGVjdXRpbmcgdGhlIHJlcXVlc3QuDQo+ICsgIEByZXR2YWwgRUZJ X0RFVklDRV9FUlJPUiAgICAgIFRoZSByZXF1ZXN0IGZhaWxlZCBkdWUgdG8gYSBkZXZpY2UgZXJy b3IuDQo+ICsgIEByZXR2YWwgRUZJX0lOVkFMSURfUEFSQU1FVEVSIE9uZSBvZiB0aGUgcGFyYW1l dGVycyBoYXMgYW4gaW52YWxpZA0KPiB2YWx1ZS4NCj4gKyAgQHJldHZhbCBFRklfVU5TVVBQT1JU RUQgICAgICAgTm90IHN1cHBvcnRlZC4NCj4gKyoqLw0KPiArdHlwZWRlZg0KPiArRUZJX1NUQVRV Uw0KPiArKEVGSUFQSSAqRURLSUlfVVNCX0VUSEVSTkVUX1VORElfUkVTRVQpKA0KPiArICBJTiAg UFhFX0NEQiAgICAgKkNkYiwNCj4gKyAgSU4gIE5JQ19EQVRBICAgICpOaWMNCj4gKyAgKTsNCj4g Kw0KPiArLyoqDQo+ICsgIFRoZSBTaHV0ZG93biBjb21tYW5kIHJlc2V0cyB0aGUgbmV0d29yayBh ZGFwdGVyIGFuZCBsZWF2ZXMgaXQgaW4gYQ0KPiArICBzYWZlIHN0YXRlIGZvciBhbm90aGVyIGRy aXZlciB0byBpbml0aWFsaXplLg0KPiArDQo+ICsgIEBwYXJhbVtpbl0gIENkYiAgQSBwb2ludGVy IHRvIHRoZSBjb21tYW5kIGRlc2NyaXB0b3IgYmxvY2suDQo+ICsgIEBwYXJhbVtpbl0gIE5pYyAg QSBwb2ludGVyIHRvIHRoZSBOZXR3b3JrIGludGVyZmFjZSBjb250cm9sbGVyIGRhdGEuDQo+ICsN Cj4gKyAgQHJldHZhbCBFRklfU1VDQ0VTUyAgICAgICAgICAgVGhlIHJlcXVlc3QgZXhlY3V0ZWQg c3VjY2Vzc2Z1bGx5Lg0KPiArICBAcmV0dmFsIEVGSV9USU1FT1VUICAgICAgICAgICBBIHRpbWVv dXQgb2NjdXJyZWQgZXhlY3V0aW5nIHRoZSByZXF1ZXN0Lg0KPiArICBAcmV0dmFsIEVGSV9ERVZJ Q0VfRVJST1IgICAgICBUaGUgcmVxdWVzdCBmYWlsZWQgZHVlIHRvIGEgZGV2aWNlIGVycm9yLg0K PiArICBAcmV0dmFsIEVGSV9JTlZBTElEX1BBUkFNRVRFUiBPbmUgb2YgdGhlIHBhcmFtZXRlcnMg aGFzIGFuIGludmFsaWQNCj4gdmFsdWUuDQo+ICsgIEByZXR2YWwgRUZJX1VOU1VQUE9SVEVEICAg ICAgIE5vdCBzdXBwb3J0ZWQuDQo+ICsqKi8NCj4gK3R5cGVkZWYNCj4gK0VGSV9TVEFUVVMNCj4g KyhFRklBUEkgKkVES0lJX1VTQl9FVEhFUk5FVF9VTkRJX1NIVVRET1dOKSgNCj4gKyAgSU4gIFBY RV9DREIgICAgICpDZGIsDQo+ICsgIElOICBOSUNfREFUQSAgICAqTmljDQo+ICsgICk7DQo+ICsN Cj4gKy8qKg0KPiArICBUaGUgSW50ZXJydXB0IEVuYWJsZXMgY29tbWFuZCBjYW4gYmUgdXNlZCB0 byByZWFkIGFuZC9vciBjaGFuZ2UNCj4gKyAgdGhlIGN1cnJlbnQgZXh0ZXJuYWwgaW50ZXJydXB0 IGVuYWJsZSBzZXR0aW5ncy4NCj4gKw0KPiArICBAcGFyYW1baW5dICBDZGIgIEEgcG9pbnRlciB0 byB0aGUgY29tbWFuZCBkZXNjcmlwdG9yIGJsb2NrLg0KPiArICBAcGFyYW1baW5dICBOaWMgIEEg cG9pbnRlciB0byB0aGUgTmV0d29yayBpbnRlcmZhY2UgY29udHJvbGxlciBkYXRhLg0KPiArDQo+ ICsgIEByZXR2YWwgRUZJX1NVQ0NFU1MgICAgICAgICAgIFRoZSByZXF1ZXN0IGV4ZWN1dGVkIHN1 Y2Nlc3NmdWxseS4NCj4gKyAgQHJldHZhbCBFRklfVElNRU9VVCAgICAgICAgICAgQSB0aW1lb3V0 IG9jY3VycmVkIGV4ZWN1dGluZyB0aGUgcmVxdWVzdC4NCj4gKyAgQHJldHZhbCBFRklfREVWSUNF X0VSUk9SICAgICAgVGhlIHJlcXVlc3QgZmFpbGVkIGR1ZSB0byBhIGRldmljZSBlcnJvci4NCj4g KyAgQHJldHZhbCBFRklfSU5WQUxJRF9QQVJBTUVURVIgT25lIG9mIHRoZSBwYXJhbWV0ZXJzIGhh cyBhbiBpbnZhbGlkDQo+IHZhbHVlLg0KPiArICBAcmV0dmFsIEVGSV9VTlNVUFBPUlRFRCAgICAg ICBOb3Qgc3VwcG9ydGVkLg0KPiArKiovDQo+ICt0eXBlZGVmDQo+ICtFRklfU1RBVFVTDQo+ICso RUZJQVBJICpFREtJSV9VU0JfRVRIRVJORVRfVU5ESV9JTlRFUlJVUFRfRU5BQkxFKSgNCj4gKyAg SU4gIFBYRV9DREIgICAgICpDZGIsDQo+ICsgIElOICBOSUNfREFUQSAgICAqTmljDQo+ICsgICk7 DQo+ICsNCj4gKy8qKg0KPiArICBUaGlzIGNvbW1hbmQgaXMgdXNlZCB0byByZWFkIGFuZCBjaGFu Z2UgcmVjZWl2ZSBmaWx0ZXJzIGFuZCwNCj4gKyAgaWYgc3VwcG9ydGVkLCByZWFkIGFuZCBjaGFu Z2UgdGhlIG11bHRpY2FzdCBNQUMgYWRkcmVzcyBmaWx0ZXIgbGlzdC4NCj4gKw0KPiArICBAcGFy YW1baW5dICBDZGIgIEEgcG9pbnRlciB0byB0aGUgY29tbWFuZCBkZXNjcmlwdG9yIGJsb2NrLg0K PiArICBAcGFyYW1baW5dICBOaWMgIEEgcG9pbnRlciB0byB0aGUgTmV0d29yayBpbnRlcmZhY2Ug Y29udHJvbGxlciBkYXRhLg0KPiArDQo+ICsgIEByZXR2YWwgRUZJX1NVQ0NFU1MgICAgICAgICAg IFRoZSByZXF1ZXN0IGV4ZWN1dGVkIHN1Y2Nlc3NmdWxseS4NCj4gKyAgQHJldHZhbCBFRklfVElN RU9VVCAgICAgICAgICAgQSB0aW1lb3V0IG9jY3VycmVkIGV4ZWN1dGluZyB0aGUgcmVxdWVzdC4N Cj4gKyAgQHJldHZhbCBFRklfREVWSUNFX0VSUk9SICAgICAgVGhlIHJlcXVlc3QgZmFpbGVkIGR1 ZSB0byBhIGRldmljZSBlcnJvci4NCj4gKyAgQHJldHZhbCBFRklfSU5WQUxJRF9QQVJBTUVURVIg T25lIG9mIHRoZSBwYXJhbWV0ZXJzIGhhcyBhbiBpbnZhbGlkDQo+IHZhbHVlLg0KPiArICBAcmV0 dmFsIEVGSV9VTlNVUFBPUlRFRCAgICAgICBOb3Qgc3VwcG9ydGVkLg0KPiArKiovDQo+ICt0eXBl ZGVmDQo+ICtFRklfU1RBVFVTDQo+ICsoRUZJQVBJICpFREtJSV9VU0JfRVRIRVJORVRfVU5ESV9S RUNFSVZFX0ZJTFRFUikoDQo+ICsgIElOICBQWEVfQ0RCICAgICAqQ2RiLA0KPiArICBJTiAgTklD X0RBVEEgICAgKk5pYw0KPiArICApOw0KPiArDQo+ICsvKioNCj4gKyAgVGhpcyBjb21tYW5kIGlz IHVzZWQgdG8gZ2V0IGN1cnJlbnQgc3RhdGlvbiBhbmQgYnJvYWRjYXN0IE1BQyBhZGRyZXNzZXMN Cj4gKyAgYW5kLCBpZiBzdXBwb3J0ZWQsIHRvIGNoYW5nZSB0aGUgY3VycmVudCBzdGF0aW9uIE1B QyBhZGRyZXNzLg0KPiArDQo+ICsgIEBwYXJhbVtpbl0gIENkYiAgQSBwb2ludGVyIHRvIHRoZSBj b21tYW5kIGRlc2NyaXB0b3IgYmxvY2suDQo+ICsgIEBwYXJhbVtpbl0gIE5pYyAgQSBwb2ludGVy IHRvIHRoZSBOZXR3b3JrIGludGVyZmFjZSBjb250cm9sbGVyIGRhdGEuDQo+ICsNCj4gKyAgQHJl dHZhbCBFRklfU1VDQ0VTUyAgICAgICAgICAgVGhlIHJlcXVlc3QgZXhlY3V0ZWQgc3VjY2Vzc2Z1 bGx5Lg0KPiArICBAcmV0dmFsIEVGSV9USU1FT1VUICAgICAgICAgICBBIHRpbWVvdXQgb2NjdXJy ZWQgZXhlY3V0aW5nIHRoZSByZXF1ZXN0Lg0KPiArICBAcmV0dmFsIEVGSV9ERVZJQ0VfRVJST1Ig ICAgICBUaGUgcmVxdWVzdCBmYWlsZWQgZHVlIHRvIGEgZGV2aWNlIGVycm9yLg0KPiArICBAcmV0 dmFsIEVGSV9JTlZBTElEX1BBUkFNRVRFUiBPbmUgb2YgdGhlIHBhcmFtZXRlcnMgaGFzIGFuIGlu dmFsaWQNCj4gdmFsdWUuDQo+ICsgIEByZXR2YWwgRUZJX1VOU1VQUE9SVEVEICAgICAgIE5vdCBz dXBwb3J0ZWQuDQo+ICsqKi8NCj4gK3R5cGVkZWYNCj4gK0VGSV9TVEFUVVMNCj4gKyhFRklBUEkg KkVES0lJX1VTQl9FVEhFUk5FVF9VTkRJX1NUQVRJT05fQUREUkVTUykoDQo+ICsgIElOICBQWEVf Q0RCICAgICAqQ2RiLA0KPiArICBJTiAgTklDX0RBVEEgICAgKk5pYw0KPiArICApOw0KPiArDQo+ ICsvKioNCj4gKyAgVGhpcyBjb21tYW5kIGlzIHVzZWQgdG8gcmVhZCBhbmQgY2xlYXIgdGhlIE5J QyB0cmFmZmljIHN0YXRpc3RpY3MuDQo+ICsNCj4gKyAgQHBhcmFtW2luXSAgQ2RiICBBIHBvaW50 ZXIgdG8gdGhlIGNvbW1hbmQgZGVzY3JpcHRvciBibG9jay4NCj4gKyAgQHBhcmFtW2luXSAgTmlj ICBBIHBvaW50ZXIgdG8gdGhlIE5ldHdvcmsgaW50ZXJmYWNlIGNvbnRyb2xsZXIgZGF0YS4NCj4g Kw0KPiArICBAcmV0dmFsIEVGSV9TVUNDRVNTICAgICAgICAgICBUaGUgcmVxdWVzdCBleGVjdXRl ZCBzdWNjZXNzZnVsbHkuDQo+ICsgIEByZXR2YWwgRUZJX1RJTUVPVVQgICAgICAgICAgIEEgdGlt ZW91dCBvY2N1cnJlZCBleGVjdXRpbmcgdGhlIHJlcXVlc3QuDQo+ICsgIEByZXR2YWwgRUZJX0RF VklDRV9FUlJPUiAgICAgIFRoZSByZXF1ZXN0IGZhaWxlZCBkdWUgdG8gYSBkZXZpY2UgZXJyb3Iu DQo+ICsgIEByZXR2YWwgRUZJX0lOVkFMSURfUEFSQU1FVEVSIE9uZSBvZiB0aGUgcGFyYW1ldGVy cyBoYXMgYW4gaW52YWxpZA0KPiB2YWx1ZS4NCj4gKyAgQHJldHZhbCBFRklfVU5TVVBQT1JURUQg ICAgICAgTm90IHN1cHBvcnRlZC4NCj4gKyoqLw0KPiArdHlwZWRlZg0KPiArRUZJX1NUQVRVUw0K PiArKEVGSUFQSSAqRURLSUlfVVNCX0VUSEVSTkVUX1VORElfU1RBVElTVElDUykoDQo+ICsgIElO ICBQWEVfQ0RCICAgICAqQ2RiLA0KPiArICBJTiAgTklDX0RBVEEgICAgKk5pYw0KPiArICApOw0K PiArDQo+ICsvKioNCj4gKyAgVHJhbnNsYXRlIGEgbXVsdGljYXN0IElQdjQgb3IgSVB2NiBhZGRy ZXNzIHRvIGEgbXVsdGljYXN0IE1BQyBhZGRyZXNzLg0KPiArDQo+ICsgIEBwYXJhbVtpbl0gIENk YiAgQSBwb2ludGVyIHRvIHRoZSBjb21tYW5kIGRlc2NyaXB0b3IgYmxvY2suDQo+ICsgIEBwYXJh bVtpbl0gIE5pYyAgQSBwb2ludGVyIHRvIHRoZSBOZXR3b3JrIGludGVyZmFjZSBjb250cm9sbGVy IGRhdGEuDQo+ICsNCj4gKyAgQHJldHZhbCBFRklfU1VDQ0VTUyAgICAgICAgICAgVGhlIHJlcXVl c3QgZXhlY3V0ZWQgc3VjY2Vzc2Z1bGx5Lg0KPiArICBAcmV0dmFsIEVGSV9USU1FT1VUICAgICAg ICAgICBBIHRpbWVvdXQgb2NjdXJyZWQgZXhlY3V0aW5nIHRoZSByZXF1ZXN0Lg0KPiArICBAcmV0 dmFsIEVGSV9ERVZJQ0VfRVJST1IgICAgICBUaGUgcmVxdWVzdCBmYWlsZWQgZHVlIHRvIGEgZGV2 aWNlIGVycm9yLg0KPiArICBAcmV0dmFsIEVGSV9JTlZBTElEX1BBUkFNRVRFUiBPbmUgb2YgdGhl IHBhcmFtZXRlcnMgaGFzIGFuIGludmFsaWQNCj4gdmFsdWUuDQo+ICsgIEByZXR2YWwgRUZJX1VO U1VQUE9SVEVEICAgICAgIE5vdCBzdXBwb3J0ZWQuDQo+ICsqKi8NCj4gK3R5cGVkZWYNCj4gK0VG SV9TVEFUVVMNCj4gKyhFRklBUEkgKkVES0lJX1VTQl9FVEhFUk5FVF9VTkRJX01DQVNUX0lQVE9N QUMpKA0KPiArICBJTiAgUFhFX0NEQiAgICAgKkNkYiwNCj4gKyAgSU4gIE5JQ19EQVRBICAgICpO aWMNCj4gKyAgKTsNCj4gKw0KPiArLyoqDQo+ICsgIFRoaXMgY29tbWFuZCBpcyB1c2VkIHRvIHJl YWQgYW5kIHdyaXRlIChpZiBzdXBwb3J0ZWQgYnkgTklDIEgvVykNCj4gKyAgbm9udm9sYXRpbGUg c3RvcmFnZSBvbiB0aGUgTklDLg0KPiArDQo+ICsgIEBwYXJhbVtpbl0gIENkYiAgQSBwb2ludGVy IHRvIHRoZSBjb21tYW5kIGRlc2NyaXB0b3IgYmxvY2suDQo+ICsgIEBwYXJhbVtpbl0gIE5pYyAg QSBwb2ludGVyIHRvIHRoZSBOZXR3b3JrIGludGVyZmFjZSBjb250cm9sbGVyIGRhdGEuDQo+ICsN Cj4gKyAgQHJldHZhbCBFRklfU1VDQ0VTUyAgICAgICAgICAgVGhlIHJlcXVlc3QgZXhlY3V0ZWQg c3VjY2Vzc2Z1bGx5Lg0KPiArICBAcmV0dmFsIEVGSV9USU1FT1VUICAgICAgICAgICBBIHRpbWVv dXQgb2NjdXJyZWQgZXhlY3V0aW5nIHRoZSByZXF1ZXN0Lg0KPiArICBAcmV0dmFsIEVGSV9ERVZJ Q0VfRVJST1IgICAgICBUaGUgcmVxdWVzdCBmYWlsZWQgZHVlIHRvIGEgZGV2aWNlIGVycm9yLg0K PiArICBAcmV0dmFsIEVGSV9JTlZBTElEX1BBUkFNRVRFUiBPbmUgb2YgdGhlIHBhcmFtZXRlcnMg aGFzIGFuIGludmFsaWQNCj4gdmFsdWUuDQo+ICsgIEByZXR2YWwgRUZJX1VOU1VQUE9SVEVEICAg ICAgIE5vdCBzdXBwb3J0ZWQuDQo+ICsqKi8NCj4gK3R5cGVkZWYNCj4gK0VGSV9TVEFUVVMNCj4g KyhFRklBUEkgKkVES0lJX1VTQl9FVEhFUk5FVF9VTkRJX05WX0RBVEEpKA0KPiArICBJTiAgUFhF X0NEQiAgICAgKkNkYiwNCj4gKyAgSU4gIE5JQ19EQVRBICAgICpOaWMNCj4gKyAgKTsNCj4gKw0K PiArLyoqDQo+ICsgIFRoaXMgY29tbWFuZCByZXR1cm5zIHRoZSBjdXJyZW50IGludGVycnVwdCBz dGF0dXMgYW5kL29yIHRoZQ0KPiArICB0cmFuc21pdHRlZCBidWZmZXIgYWRkcmVzc2VzIGFuZCB0 aGUgY3VycmVudCBtZWRpYSBzdGF0dXMuDQo+ICsNCj4gKyAgQHBhcmFtW2luXSAgQ2RiICBBIHBv aW50ZXIgdG8gdGhlIGNvbW1hbmQgZGVzY3JpcHRvciBibG9jay4NCj4gKyAgQHBhcmFtW2luXSAg TmljICBBIHBvaW50ZXIgdG8gdGhlIE5ldHdvcmsgaW50ZXJmYWNlIGNvbnRyb2xsZXIgZGF0YS4N Cj4gKw0KPiArICBAcmV0dmFsIEVGSV9TVUNDRVNTICAgICAgICAgICBUaGUgcmVxdWVzdCBleGVj dXRlZCBzdWNjZXNzZnVsbHkuDQo+ICsgIEByZXR2YWwgRUZJX1RJTUVPVVQgICAgICAgICAgIEEg dGltZW91dCBvY2N1cnJlZCBleGVjdXRpbmcgdGhlIHJlcXVlc3QuDQo+ICsgIEByZXR2YWwgRUZJ X0RFVklDRV9FUlJPUiAgICAgIFRoZSByZXF1ZXN0IGZhaWxlZCBkdWUgdG8gYSBkZXZpY2UgZXJy b3IuDQo+ICsgIEByZXR2YWwgRUZJX0lOVkFMSURfUEFSQU1FVEVSIE9uZSBvZiB0aGUgcGFyYW1l dGVycyBoYXMgYW4gaW52YWxpZA0KPiB2YWx1ZS4NCj4gKyAgQHJldHZhbCBFRklfVU5TVVBQT1JU RUQgICAgICAgTm90IHN1cHBvcnRlZC4NCj4gKyoqLw0KPiArdHlwZWRlZg0KPiArRUZJX1NUQVRV Uw0KPiArKEVGSUFQSSAqRURLSUlfVVNCX0VUSEVSTkVUX1VORElfR0VUX1NUQVRVUykoDQo+ICsg IElOICBQWEVfQ0RCICAgICAqQ2RiLA0KPiArICBJTiAgTklDX0RBVEEgICAgKk5pYw0KPiArICAp Ow0KPiArDQo+ICsvKioNCj4gKyAgVGhpcyBjb21tYW5kIGlzIHVzZWQgdG8gZmlsbCB0aGUgbWVk aWEgaGVhZGVyKHMpIGluIHRyYW5zbWl0IHBhY2tldChzKS4NCj4gKw0KPiArICBAcGFyYW1baW5d ICBDZGIgIEEgcG9pbnRlciB0byB0aGUgY29tbWFuZCBkZXNjcmlwdG9yIGJsb2NrLg0KPiArICBA cGFyYW1baW5dICBOaWMgIEEgcG9pbnRlciB0byB0aGUgTmV0d29yayBpbnRlcmZhY2UgY29udHJv bGxlciBkYXRhLg0KPiArDQo+ICsgIEByZXR2YWwgRUZJX1NVQ0NFU1MgICAgICAgICAgIFRoZSBy ZXF1ZXN0IGV4ZWN1dGVkIHN1Y2Nlc3NmdWxseS4NCj4gKyAgQHJldHZhbCBFRklfVElNRU9VVCAg ICAgICAgICAgQSB0aW1lb3V0IG9jY3VycmVkIGV4ZWN1dGluZyB0aGUgcmVxdWVzdC4NCj4gKyAg QHJldHZhbCBFRklfREVWSUNFX0VSUk9SICAgICAgVGhlIHJlcXVlc3QgZmFpbGVkIGR1ZSB0byBh IGRldmljZSBlcnJvci4NCj4gKyAgQHJldHZhbCBFRklfSU5WQUxJRF9QQVJBTUVURVIgT25lIG9m IHRoZSBwYXJhbWV0ZXJzIGhhcyBhbiBpbnZhbGlkDQo+IHZhbHVlLg0KPiArICBAcmV0dmFsIEVG SV9VTlNVUFBPUlRFRCAgICAgICBOb3Qgc3VwcG9ydGVkLg0KPiArKiovDQo+ICt0eXBlZGVmDQo+ ICtFRklfU1RBVFVTDQo+ICsoRUZJQVBJICpFREtJSV9VU0JfRVRIRVJORVRfVU5ESV9GSUxMX0hF QURFUikoDQo+ICsgIElOICBQWEVfQ0RCICAgICAqQ2RiLA0KPiArICBJTiAgTklDX0RBVEEgICAg Kk5pYw0KPiArICApOw0KPiArDQo+ICsvKioNCj4gKyAgVGhlIFRyYW5zbWl0IGNvbW1hbmQgaXMg dXNlZCB0byBwbGFjZSBhIHBhY2tldCBpbnRvIHRoZSB0cmFuc21pdCBxdWV1ZS4NCj4gKw0KPiAr ICBAcGFyYW1baW5dICBDZGIgIEEgcG9pbnRlciB0byB0aGUgY29tbWFuZCBkZXNjcmlwdG9yIGJs b2NrLg0KPiArICBAcGFyYW1baW5dICBOaWMgIEEgcG9pbnRlciB0byB0aGUgTmV0d29yayBpbnRl cmZhY2UgY29udHJvbGxlciBkYXRhLg0KPiArDQo+ICsgIEByZXR2YWwgRUZJX1NVQ0NFU1MgICAg ICAgICAgIFRoZSByZXF1ZXN0IGV4ZWN1dGVkIHN1Y2Nlc3NmdWxseS4NCj4gKyAgQHJldHZhbCBF RklfVElNRU9VVCAgICAgICAgICAgQSB0aW1lb3V0IG9jY3VycmVkIGV4ZWN1dGluZyB0aGUgcmVx dWVzdC4NCj4gKyAgQHJldHZhbCBFRklfREVWSUNFX0VSUk9SICAgICAgVGhlIHJlcXVlc3QgZmFp bGVkIGR1ZSB0byBhIGRldmljZSBlcnJvci4NCj4gKyAgQHJldHZhbCBFRklfSU5WQUxJRF9QQVJB TUVURVIgT25lIG9mIHRoZSBwYXJhbWV0ZXJzIGhhcyBhbiBpbnZhbGlkDQo+IHZhbHVlLg0KPiAr ICBAcmV0dmFsIEVGSV9VTlNVUFBPUlRFRCAgICAgICBOb3Qgc3VwcG9ydGVkLg0KPiArKiovDQo+ ICt0eXBlZGVmDQo+ICtFRklfU1RBVFVTDQo+ICsoRUZJQVBJICpFREtJSV9VU0JfRVRIRVJORVRf VU5ESV9UUkFOU01JVCkoDQo+ICsgIElOICBQWEVfQ0RCICAgICAqQ2RiLA0KPiArICBJTiAgTklD X0RBVEEgICAgKk5pYw0KPiArICApOw0KPiArDQo+ICsvKioNCj4gKyAgV2hlbiB0aGUgbmV0d29y ayBhZGFwdGVyIGhhcyByZWNlaXZlZCBhIGZyYW1lLCB0aGlzIGNvbW1hbmQgaXMgdXNlZA0KPiAr ICB0byBjb3B5IHRoZSBmcmFtZSBpbnRvIGRyaXZlci9hcHBsaWNhdGlvbiBzdG9yYWdlLg0KPiAr DQo+ICsgIEBwYXJhbVtpbl0gIENkYiAgQSBwb2ludGVyIHRvIHRoZSBjb21tYW5kIGRlc2NyaXB0 b3IgYmxvY2suDQo+ICsgIEBwYXJhbVtpbl0gIE5pYyAgQSBwb2ludGVyIHRvIHRoZSBOZXR3b3Jr IGludGVyZmFjZSBjb250cm9sbGVyIGRhdGEuDQo+ICsNCj4gKyAgQHJldHZhbCBFRklfU1VDQ0VT UyAgICAgICAgICAgVGhlIHJlcXVlc3QgZXhlY3V0ZWQgc3VjY2Vzc2Z1bGx5Lg0KPiArICBAcmV0 dmFsIEVGSV9USU1FT1VUICAgICAgICAgICBBIHRpbWVvdXQgb2NjdXJyZWQgZXhlY3V0aW5nIHRo ZSByZXF1ZXN0Lg0KPiArICBAcmV0dmFsIEVGSV9ERVZJQ0VfRVJST1IgICAgICBUaGUgcmVxdWVz dCBmYWlsZWQgZHVlIHRvIGEgZGV2aWNlIGVycm9yLg0KPiArICBAcmV0dmFsIEVGSV9JTlZBTElE X1BBUkFNRVRFUiBPbmUgb2YgdGhlIHBhcmFtZXRlcnMgaGFzIGFuIGludmFsaWQNCj4gdmFsdWUu DQo+ICsgIEByZXR2YWwgRUZJX1VOU1VQUE9SVEVEICAgICAgIE5vdCBzdXBwb3J0ZWQuDQo+ICsq Ki8NCj4gK3R5cGVkZWYNCj4gK0VGSV9TVEFUVVMNCj4gKyhFRklBUEkgKkVES0lJX1VTQl9FVEhF Uk5FVF9VTkRJX1JFQ0VJVkUpKA0KPiArICBJTiAgUFhFX0NEQiAgICAgKkNkYiwNCj4gKyAgSU4g IE5JQ19EQVRBICAgICpOaWMNCj4gKyAgKTsNCj4gKw0KPiArLyoqDQo+ICsgIFRoaXMgY29tbWFu ZCByZXNldHMgdGhlIG5ldHdvcmsgYWRhcHRlciBhbmQgaW5pdGlhbGl6ZXMgVU5ESSB1c2luZw0K PiArICB0aGUgcGFyYW1ldGVycyBzdXBwbGllZCBpbiB0aGUgQ1BCLg0KPiArDQo+ICsgIEBwYXJh bVtpbl0gICAgICBDZGIgIEEgcG9pbnRlciB0byB0aGUgY29tbWFuZCBkZXNjcmlwdG9yIGJsb2Nr Lg0KPiArICBAcGFyYW1baW4sIG91dF0gTmljICBBIHBvaW50ZXIgdG8gdGhlIE5ldHdvcmsgaW50 ZXJmYWNlIGNvbnRyb2xsZXIgZGF0YS4NCj4gKw0KPiArICBAcmV0dmFsIEVGSV9TVUNDRVNTICAg ICAgICAgICBUaGUgcmVxdWVzdCBleGVjdXRlZCBzdWNjZXNzZnVsbHkuDQo+ICsgIEByZXR2YWwg RUZJX1RJTUVPVVQgICAgICAgICAgIEEgdGltZW91dCBvY2N1cnJlZCBleGVjdXRpbmcgdGhlIHJl cXVlc3QuDQo+ICsgIEByZXR2YWwgRUZJX0RFVklDRV9FUlJPUiAgICAgIFRoZSByZXF1ZXN0IGZh aWxlZCBkdWUgdG8gYSBkZXZpY2UgZXJyb3IuDQo+ICsgIEByZXR2YWwgRUZJX0lOVkFMSURfUEFS QU1FVEVSIE9uZSBvZiB0aGUgcGFyYW1ldGVycyBoYXMgYW4gaW52YWxpZA0KPiB2YWx1ZS4NCj4g KyAgQHJldHZhbCBFRklfVU5TVVBQT1JURUQgICAgICAgTm90IHN1cHBvcnRlZC4NCj4gKyoqLw0K PiArdHlwZWRlZg0KPiArRUZJX1NUQVRVUw0KPiArKEVGSUFQSSAqRURLSUlfVVNCX0VUSEVSTkVU X0lOSVRJQUxJWkUpKA0KPiArICBJTiAgICAgIFBYRV9DREIgICAqQ2RiLA0KPiArICBJTiBPVVQg IE5JQ19EQVRBICAqTmljDQo+ICsgICk7DQo+ICsNCj4gKy8qKg0KPiArICBUaGlzIGNvbW1hbmQg aXMgdXNlZCB0byByZWFkIGFuZCBjbGVhciB0aGUgTklDIHRyYWZmaWMgc3RhdGlzdGljcy4NCj4g Kw0KPiArICBAcGFyYW1baW5dICBOaWMgICAgIEEgcG9pbnRlciB0byB0aGUgTmV0d29yayBpbnRl cmZhY2UgY29udHJvbGxlciBkYXRhLg0KPiArICBAcGFyYW1baW5dICBEYkFkZHIgIERhdGEgQmxv Y2sgQWRkcmVzcy4NCj4gKyAgQHBhcmFtW2luXSAgRGJTaXplICBEYXRhIEJsb2NrIFNpemUuDQo+ ICsNCj4gKyAgQHJldHZhbCBFRklfU1VDQ0VTUyAgICAgICAgICAgVGhlIHJlcXVlc3QgZXhlY3V0 ZWQgc3VjY2Vzc2Z1bGx5Lg0KPiArICBAcmV0dmFsIEVGSV9USU1FT1VUICAgICAgICAgICBBIHRp bWVvdXQgb2NjdXJyZWQgZXhlY3V0aW5nIHRoZSByZXF1ZXN0Lg0KPiArICBAcmV0dmFsIEVGSV9E RVZJQ0VfRVJST1IgICAgICBUaGUgcmVxdWVzdCBmYWlsZWQgZHVlIHRvIGEgZGV2aWNlIGVycm9y Lg0KPiArICBAcmV0dmFsIEVGSV9JTlZBTElEX1BBUkFNRVRFUiBPbmUgb2YgdGhlIHBhcmFtZXRl cnMgaGFzIGFuIGludmFsaWQNCj4gdmFsdWUuDQo+ICsgIEByZXR2YWwgRUZJX1VOU1VQUE9SVEVE ICAgICAgIE5vdCBzdXBwb3J0ZWQuDQo+ICsqKi8NCj4gK3R5cGVkZWYNCj4gK0VGSV9TVEFUVVMN Cj4gKyhFRklBUEkgKkVES0lJX1VTQl9FVEhFUk5FVF9TVEFUSVNUSUNTKSgNCj4gKyAgSU4gIE5J Q19EQVRBICAgICpOaWMsDQo+ICsgIElOICBVSU5UNjQgICAgICBEYkFkZHIsDQo+ICsgIElOICBV SU5UMTYgICAgICBEYlNpemUNCj4gKyAgKTsNCj4gKw0KPiArLyoqDQo+ICsgIFRoaXMgZnVuY3Rp b24gaXMgdXNlZCB0byBtYW5hZ2UgYSBVU0IgZGV2aWNlIHdpdGggdGhlIGJ1bGsgdHJhbnNmZXIg cGlwZS4NCj4gVGhlIGVuZHBvaW50IGlzIEJ1bGsgaW4uDQo+ICsNCj4gKyAgQHBhcmFtW2luXSAg ICAgIENkYiAgICAgICAgICAgQSBwb2ludGVyIHRvIHRoZSBjb21tYW5kIGRlc2NyaXB0b3IgYmxv Y2suDQo+ICsgIEBwYXJhbVtpbl0gICAgICBUaGlzICAgICAgICAgIEEgcG9pbnRlciB0byB0aGUg RURLSUlfVVNCX0VUSEVSTkVUX1BST1RPQ09MDQo+IGluc3RhbmNlLg0KPiArICBAcGFyYW1baW4s IG91dF0gUGFja2V0ICAgICAgICBBIHBvaW50ZXIgdG8gdGhlIGJ1ZmZlciBvZiBkYXRhIHRoYXQg d2lsbCBiZQ0KPiB0cmFuc21pdHRlZCB0byBVU0INCj4gKyAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgZGV2aWNlIG9yIHJlY2VpdmVkIGZyb20gVVNCIGRldmljZS4NCj4gKyAgQHBhcmFt W2luLCBvdXRdIFBhY2tldExlbmd0aCAgQSBwb2ludGVyIHRvIHRoZSBQYWNrZXRMZW5ndGguDQo+ ICsNCj4gKyAgQHJldHZhbCBFRklfU1VDQ0VTUyAgICAgICAgICAgVGhlIGJ1bGsgdHJhbnNmZXIg aGFzIGJlZW4gc3VjY2Vzc2Z1bGx5DQo+IGV4ZWN1dGVkLg0KPiArICBAcmV0dmFsIEVGSV9ERVZJ Q0VfRVJST1IgICAgICBUaGUgdHJhbnNmZXIgZmFpbGVkLiBUaGUgdHJhbnNmZXIgc3RhdHVzIGlz DQo+IHJldHVybmVkIGluIHN0YXR1cy4NCj4gKyAgQHJldHZhbCBFRklfSU5WQUxJRF9QQVJBTUVU RSAgT25lIG9yIG1vcmUgcGFyYW1ldGVycyBhcmUgaW52YWxpZC4NCj4gKyAgQHJldHZhbCBFRklf T1VUX09GX1JFU09VUkNFUyAgVGhlIHJlcXVlc3QgY291bGQgbm90IGJlIHN1Ym1pdHRlZA0KPiBk dWUgdG8gYSBsYWNrIG9mIHJlc291cmNlcy4NCj4gKyAgQHJldHZhbCBFRklfVElNRU9VVCAgICAg ICAgICAgVGhlIGNvbnRyb2wgdHJhbnNmZXIgZmFpbHMgZHVlIHRvIHRpbWVvdXQuDQo+ICsqKi8N Cj4gK3R5cGVkZWYNCj4gK0VGSV9TVEFUVVMNCj4gKyhFRklBUEkgKkVES0lJX1VTQl9FVEhFUk5F VF9SRUNFSVZFKSgNCj4gKyAgSU4gICAgIFBYRV9DREIgICAgICAgICAgICAgICAqQ2RiLA0KPiAr ICBJTiAgICAgRURLSUlfVVNCX0VUSEVSTkVUX1BST1RPQ09MICpUaGlzLA0KPiArICBJTiBPVVQg Vk9JRCAgICAgICAgICAgICAgICAgICpQYWNrZXQsDQo+ICsgIElOIE9VVCBVSU5UTiAgICAgICAg ICAgICAgICAgKlBhY2tldExlbmd0aA0KPiArICApOw0KPiArDQo+ICsvKioNCj4gKyAgVGhpcyBm dW5jdGlvbiBpcyB1c2VkIHRvIG1hbmFnZSBhIFVTQiBkZXZpY2Ugd2l0aCB0aGUgYnVsayB0cmFu c2ZlciBwaXBlLg0KPiBUaGUgZW5kcG9pbnQgaXMgQnVsayBvdXQuDQo+ICsNCj4gKyAgQHBhcmFt W2luXSAgICAgIENkYiAgICAgICAgICAgQSBwb2ludGVyIHRvIHRoZSBjb21tYW5kIGRlc2NyaXB0 b3IgYmxvY2suDQo+ICsgIEBwYXJhbVtpbl0gICAgICBUaGlzICAgICAgICAgIEEgcG9pbnRlciB0 byB0aGUgRURLSUlfVVNCX0VUSEVSTkVUX1BST1RPQ09MDQo+IGluc3RhbmNlLg0KPiArICBAcGFy YW1baW4sIG91dF0gUGFja2V0ICAgICAgICBBIHBvaW50ZXIgdG8gdGhlIGJ1ZmZlciBvZiBkYXRh IHRoYXQgd2lsbCBiZQ0KPiB0cmFuc21pdHRlZCB0byBVU0INCj4gKyAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgZGV2aWNlIG9yIHJlY2VpdmVkIGZyb20gVVNCIGRldmljZS4NCj4gKyAg QHBhcmFtW2luLCBvdXRdIFBhY2tldExlbmd0aCAgQSBwb2ludGVyIHRvIHRoZSBQYWNrZXRMZW5n dGguDQo+ICsNCj4gKyAgQHJldHZhbCBFRklfU1VDQ0VTUyAgICAgICAgICAgVGhlIGJ1bGsgdHJh bnNmZXIgaGFzIGJlZW4gc3VjY2Vzc2Z1bGx5DQo+IGV4ZWN1dGVkLg0KPiArICBAcmV0dmFsIEVG SV9ERVZJQ0VfRVJST1IgICAgICBUaGUgdHJhbnNmZXIgZmFpbGVkLiBUaGUgdHJhbnNmZXIgc3Rh dHVzIGlzDQo+IHJldHVybmVkIGluIHN0YXR1cy4NCj4gKyAgQHJldHZhbCBFRklfSU5WQUxJRF9Q QVJBTUVURSAgT25lIG9yIG1vcmUgcGFyYW1ldGVycyBhcmUgaW52YWxpZC4NCj4gKyAgQHJldHZh bCBFRklfT1VUX09GX1JFU09VUkNFUyAgVGhlIHJlcXVlc3QgY291bGQgbm90IGJlIHN1Ym1pdHRl ZA0KPiBkdWUgdG8gYSBsYWNrIG9mIHJlc291cmNlcy4NCj4gKyAgQHJldHZhbCBFRklfVElNRU9V VCAgICAgICAgICAgVGhlIGNvbnRyb2wgdHJhbnNmZXIgZmFpbHMgZHVlIHRvIHRpbWVvdXQuDQo+ ICsqKi8NCj4gK3R5cGVkZWYNCj4gK0VGSV9TVEFUVVMNCj4gKyhFRklBUEkgKkVES0lJX1VTQl9F VEhFUk5FVF9UUkFOU01JVCkoDQo+ICsgIElOICAgICBQWEVfQ0RCICAgICAgICAgICAgICAgKkNk YiwNCj4gKyAgSU4gICAgIEVES0lJX1VTQl9FVEhFUk5FVF9QUk9UT0NPTCAqVGhpcywNCj4gKyAg SU4gT1VUIFZPSUQgICAgICAgICAgICAgICAgICAqUGFja2V0LA0KPiArICBJTiBPVVQgVUlOVE4g ICAgICAgICAgICAgICAgICpQYWNrZXRMZW5ndGgNCj4gKyAgKTsNCj4gKw0KPiArLyoqDQo+ICsg IFRoaXMgZnVuY3Rpb24gaXMgdXNlZCB0byBtYW5hZ2UgYSBVU0IgZGV2aWNlIHdpdGggYW4gaW50 ZXJydXB0IHRyYW5zZmVyDQo+IHBpcGUuDQo+ICsNCj4gKyAgQHBhcmFtW2luXSAgVGhpcyAgICAg ICAgICAgICAgQSBwb2ludGVyIHRvIHRoZSBFREtJSV9VU0JfRVRIRVJORVRfUFJPVE9DT0wNCj4g aW5zdGFuY2UuDQo+ICsgIEBwYXJhbVtpbl0gIElzTmV3VHJhbnNmZXIgICAgIElmIFRSVUUsIGEg bmV3IHRyYW5zZmVyIHdpbGwgYmUgc3VibWl0dGVkIHRvDQo+IFVTQiBjb250cm9sbGVyLiBJZg0K PiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGQUxTRSwgdGhlIGludGVycnVwdCB0 cmFuc2ZlciBpcyBkZWxldGVkIGZyb20gdGhlIGRldmljZSdzDQo+IGludGVycnVwdA0KPiArICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0cmFuc2ZlciBxdWV1ZS4NCj4gKyAgQHBhcmFt W2luXSAgUG9sbGluZ0ludGVydmFsICAgSW5kaWNhdGVzIHRoZSBwZXJpb2RpYyByYXRlLCBpbiBt aWxsaXNlY29uZHMsDQo+IHRoYXQgdGhlIHRyYW5zZmVyIGlzIHRvIGJlDQo+ICsgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIGV4ZWN1dGVkLlRoaXMgcGFyYW1ldGVyIGlzIHJlcXVpcmVk IHdoZW4gSXNOZXdUcmFuc2ZlciBpcw0KPiBUUlVFLiBUaGUNCj4gKyAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgdmFsdWUgbXVzdCBiZSBiZXR3ZWVuIDEgdG8gMjU1LCBvdGhlcndpc2UN Cj4gRUZJX0lOVkFMSURfUEFSQU1FVEVSIGlzIHJldHVybmVkLg0KPiArICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBUaGUgdW5pdHMgYXJlIGluIG1pbGxpc2Vjb25kcy4NCj4gKyAgQHBh cmFtW2luXSAgUmVxdWVzdCAgICAgICAgICAgQSBwb2ludGVyIHRvIHRoZSBFRklfVVNCX0RFVklD RV9SRVFVRVNUDQo+IGRhdGEuDQo+ICsNCj4gKyAgQHJldHZhbCBFRklfU1VDQ0VTUyAgICAgICAg ICAgVGhlIGFzeW5jaHJvbm91cyBVU0IgdHJhbnNmZXIgcmVxdWVzdA0KPiB0cmFuc2ZlciBoYXMg YmVlbiBzdWNjZXNzZnVsbHkgZXhlY3V0ZWQuDQo+ICsgIEByZXR2YWwgRUZJX0RFVklDRV9FUlJP UiAgICAgIFRoZSBhc3luY2hyb25vdXMgVVNCIHRyYW5zZmVyIHJlcXVlc3QNCj4gZmFpbGVkLg0K PiArDQo+ICsqKi8NCj4gK3R5cGVkZWYNCj4gK0VGSV9TVEFUVVMNCj4gKyhFRklBUEkgKkVES0lJ X1VTQl9FVEhFUk5FVF9JTlRFUlJVUFQpKA0KPiArICBJTiBFREtJSV9VU0JfRVRIRVJORVRfUFJP VE9DT0wgICAqVGhpcywNCj4gKyAgSU4gQk9PTEVBTiAgICAgICAgICAgICAgICAgSXNOZXdUcmFu c2ZlciwNCj4gKyAgSU4gVUlOVE4gICAgICAgICAgICAgICAgICAgUG9sbGluZ0ludGVydmFsLA0K PiArICBJTiBFRklfVVNCX0RFVklDRV9SRVFVRVNUICAqUmVxdWVzdA0KPiArICApOw0KPiArDQo+ ICsvKioNCj4gKyAgUmV0cmlldmVzIHRoZSBVU0IgRXRoZXJuZXQgTWFjIEFkZHJlc3MuDQo+ICsN Cj4gKyAgQHBhcmFtW2luXSAgVGhpcyAgICAgICAgICBBIHBvaW50ZXIgdG8gdGhlIEVES0lJX1VT Ql9FVEhFUk5FVF9QUk9UT0NPTA0KPiBpbnN0YW5jZS4NCj4gKyAgQHBhcmFtW291dF0gTWFjQWRk cmVzcyAgICBBIHBvaW50ZXIgdG8gdGhlIGNhbGxlciBhbGxvY2F0ZWQgVVNCIEV0aGVybmV0DQo+ IE1hYyBBZGRyZXNzLg0KPiArDQo+ICsgIEByZXR2YWwgRUZJX1NVQ0NFU1MgICAgICAgICAgIFRo ZSBVU0IgSGVhZGVyIEZ1bmN0aW9uYWwgZGVzY3JpcHRvciB3YXMNCj4gcmV0cmlldmVkIHN1Y2Nl c3NmdWxseS4NCj4gKyAgQHJldHZhbCBFRklfSU5WQUxJRF9QQVJBTUVURVIgVXNiSGVhZGVyRnVu RGVzY3JpcHRvciBpcyBOVUxMLg0KPiArICBAcmV0dmFsIEVGSV9OT1RfRk9VTkQgICAgICAgICBU aGUgVVNCIEhlYWRlciBGdW5jdGlvbmFsIGRlc2NyaXB0b3Igd2FzDQo+IG5vdCBmb3VuZC4NCj4g KyoqLw0KPiArdHlwZWRlZg0KPiArRUZJX1NUQVRVUw0KPiArKEVGSUFQSSAqRURLSUlfVVNCX0dF VF9FVEhfTUFDX0FERFJFU1MpKA0KPiArICBJTiAgRURLSUlfVVNCX0VUSEVSTkVUX1BST1RPQ09M ICpUaGlzLA0KPiArICBPVVQgRUZJX01BQ19BRERSRVNTICAgICAgICpNYWNBZGRyZXNzDQo+ICsg ICk7DQo+ICsNCj4gKy8qKg0KPiArICBSZXRyaWV2ZXMgdGhlIFVTQiBFdGhlcm5ldCBCdWxrIHRy YW5zZmVyIGRhdGEgc2l6ZS4NCj4gKw0KPiArICBAcGFyYW1baW5dICBUaGlzICAgICAgICAgIEEg cG9pbnRlciB0byB0aGUgRURLSUlfVVNCX0VUSEVSTkVUX1BST1RPQ09MDQo+IGluc3RhbmNlLg0K PiArICBAcGFyYW1bb3V0XSBCdWxrU2l6ZSAgICAgIEEgcG9pbnRlciB0byB0aGUgQnVsayB0cmFu c2ZlciBkYXRhIHNpemUuDQo+ICsNCj4gKyAgQHJldHZhbCBFRklfU1VDQ0VTUyAgICAgICAgICAg VGhlIFVTQiBIZWFkZXIgRnVuY3Rpb25hbCBkZXNjcmlwdG9yIHdhcw0KPiByZXRyaWV2ZWQgc3Vj Y2Vzc2Z1bGx5Lg0KPiArICBAcmV0dmFsIEVGSV9JTlZBTElEX1BBUkFNRVRFUiBVc2JIZWFkZXJG dW5EZXNjcmlwdG9yIGlzIE5VTEwuDQo+ICsgIEByZXR2YWwgRUZJX05PVF9GT1VORCAgICAgICAg IFRoZSBVU0IgSGVhZGVyIEZ1bmN0aW9uYWwgZGVzY3JpcHRvciB3YXMNCj4gbm90IGZvdW5kLg0K PiArKiovDQo+ICt0eXBlZGVmDQo+ICtFRklfU1RBVFVTDQo+ICsoRUZJQVBJICpFREtJSV9VU0Jf RVRIX01BWF9CVUxLX1NJWkUpKA0KPiArICBJTiAgRURLSUlfVVNCX0VUSEVSTkVUX1BST1RPQ09M ICpUaGlzLA0KPiArICBPVVQgVUlOVE4gICAgICAgICAgICAgICAgICpCdWxrU2l6ZQ0KPiArICAp Ow0KPiArDQo+ICsvKioNCj4gKyAgUmV0cmlldmVzIHRoZSBVU0IgSGVhZGVyIGZ1bmN0aW9uYWwg RGVzY3JpcHRvci4NCj4gKw0KPiArICBAcGFyYW1baW5dICBUaGlzICAgICAgICAgICAgICAgICAg IEEgcG9pbnRlciB0byB0aGUNCj4gRURLSUlfVVNCX0VUSEVSTkVUX1BST1RPQ09MIGluc3RhbmNl Lg0KPiArICBAcGFyYW1bb3V0XSBVc2JIZWFkZXJGdW5EZXNjcmlwdG9yIEEgcG9pbnRlciB0byB0 aGUgY2FsbGVyIGFsbG9jYXRlZA0KPiBVU0IgSGVhZGVyIEZ1bmN0aW9uYWwgRGVzY3JpcHRvci4N Cj4gKw0KPiArICBAcmV0dmFsIEVGSV9TVUNDRVNTICAgICAgICAgICBUaGUgVVNCIEhlYWRlciBG dW5jdGlvbmFsIGRlc2NyaXB0b3Igd2FzDQo+IHJldHJpZXZlZCBzdWNjZXNzZnVsbHkuDQo+ICsg IEByZXR2YWwgRUZJX0lOVkFMSURfUEFSQU1FVEVSIFVzYkhlYWRlckZ1bkRlc2NyaXB0b3IgaXMg TlVMTC4NCj4gKyAgQHJldHZhbCBFRklfTk9UX0ZPVU5EICAgICAgICAgVGhlIFVTQiBIZWFkZXIg RnVuY3Rpb25hbCBkZXNjcmlwdG9yIHdhcw0KPiBub3QgZm91bmQuDQo+ICsqKi8NCj4gK3R5cGVk ZWYNCj4gK0VGSV9TVEFUVVMNCj4gKyhFRklBUEkgKkVES0lJX1VTQl9IRUFERVJfRlVOQ1RJT05B TF9ERVNDUklQVE9SKSgNCj4gKyAgSU4gRURLSUlfVVNCX0VUSEVSTkVUX1BST1RPQ09MICAgICAg KlRoaXMsDQo+ICsgIE9VVCBVU0JfSEVBREVSX0ZVTl9ERVNDUklQVE9SICpVc2JIZWFkZXJGdW5E ZXNjcmlwdG9yDQo+ICsgICk7DQo+ICsNCj4gKy8qKg0KPiArICBSZXRyaWV2ZXMgdGhlIFVTQiBV bmlvbiBmdW5jdGlvbmFsIERlc2NyaXB0b3IuDQo+ICsNCj4gKyAgQHBhcmFtW2luXSAgVGhpcyAg ICAgICAgICAgICAgICAgICBBIHBvaW50ZXIgdG8gdGhlDQo+IEVES0lJX1VTQl9FVEhFUk5FVF9Q Uk9UT0NPTCBpbnN0YW5jZS4NCj4gKyAgQHBhcmFtW291dF0gVXNiVW5pb25GdW5EZXNjcmlwdG9y ICBBIHBvaW50ZXIgdG8gdGhlIGNhbGxlciBhbGxvY2F0ZWQNCj4gVVNCIFVuaW9uIEZ1bmN0aW9u YWwgRGVzY3JpcHRvci4NCj4gKw0KPiArICBAcmV0dmFsIEVGSV9TVUNDRVNTICAgICAgICAgICBU aGUgVVNCIFVuaW9uIEZ1bmN0aW9uYWwgZGVzY3JpcHRvciB3YXMNCj4gcmV0cmlldmVkIHN1Y2Nl c3NmdWxseS4NCj4gKyAgQHJldHZhbCBFRklfSU5WQUxJRF9QQVJBTUVURVIgVXNiVW5pb25GdW5E ZXNjcmlwdG9yIGlzIE5VTEwuDQo+ICsgIEByZXR2YWwgRUZJX05PVF9GT1VORCAgICAgICAgIFRo ZSBVU0IgVW5pb24gRnVuY3Rpb25hbCBkZXNjcmlwdG9yIHdhcw0KPiBub3QgZm91bmQuDQo+ICsq Ki8NCj4gK3R5cGVkZWYNCj4gK0VGSV9TVEFUVVMNCj4gKyhFRklBUEkgKkVES0lJX1VTQl9VTklP Tl9GVU5DVElPTkFMX0RFU0NSSVBUT1IpKA0KPiArICBJTiBFREtJSV9VU0JfRVRIRVJORVRfUFJP VE9DT0wgICAgICpUaGlzLA0KPiArICBPVVQgVVNCX1VOSU9OX0ZVTl9ERVNDUklQVE9SICpVc2JV bmlvbkZ1bkRlc2NyaXB0b3INCj4gKyAgKTsNCj4gKw0KPiArLyoqDQo+ICsgIFJldHJpZXZlcyB0 aGUgVVNCIEV0aGVybmV0IGZ1bmN0aW9uYWwgRGVzY3JpcHRvci4NCj4gKw0KPiArICBAcGFyYW1b aW5dICBUaGlzICAgICAgICAgICAgICAgICAgIEEgcG9pbnRlciB0byB0aGUNCj4gRURLSUlfVVNC X0VUSEVSTkVUX1BST1RPQ09MIGluc3RhbmNlLg0KPiArICBAcGFyYW1bb3V0XSBVc2JFdGhGdW5E ZXNjcmlwdG9yICAgIEEgcG9pbnRlciB0byB0aGUgY2FsbGVyIGFsbG9jYXRlZCBVU0INCj4gRXRo ZXJuZXQgRnVuY3Rpb25hbCBEZXNjcmlwdG9yLg0KPiArDQo+ICsgIEByZXR2YWwgRUZJX1NVQ0NF U1MgICAgICAgICAgIFRoZSBVU0IgRXRoZXJuZXQgRnVuY3Rpb25hbCBkZXNjcmlwdG9yIHdhcw0K PiByZXRyaWV2ZWQgc3VjY2Vzc2Z1bGx5Lg0KPiArICBAcmV0dmFsIEVGSV9JTlZBTElEX1BBUkFN RVRFUiBVc2JFdGhGdW5EZXNjcmlwdG9yIGlzIE5VTEwuDQo+ICsgIEByZXR2YWwgRUZJX05PVF9G T1VORCAgICAgICAgIFRoZSBVU0IgRXRoZXJuZXQgRnVuY3Rpb25hbCBkZXNjcmlwdG9yIHdhcw0K PiBub3QgZm91bmQuDQo+ICsqKi8NCj4gK3R5cGVkZWYNCj4gK0VGSV9TVEFUVVMNCj4gKyhFRklB UEkgKkVES0lJX1VTQl9FVEhFUk5FVF9GVU5DVElPTkFMX0RFU0NSSVBUT1IpKA0KPiArICBJTiBF REtJSV9VU0JfRVRIRVJORVRfUFJPVE9DT0wgICAgICAgICpUaGlzLA0KPiArICBPVVQgVVNCX0VU SEVSTkVUX0ZVTl9ERVNDUklQVE9SICpVc2JFdGhGdW5EZXNjcmlwdG9yDQo+ICsgICk7DQo+ICsN Cj4gKy8qKg0KPiArICBUaGlzIHJlcXVlc3Qgc2V0cyB0aGUgRXRoZXJuZXQgZGV2aWNlIG11bHRp Y2FzdCBmaWx0ZXJzIGFzIHNwZWNpZmllZCBpbiB0aGUNCj4gKyAgc2VxdWVudGlhbCBsaXN0IG9m IDQ4IGJpdCBFdGhlcm5ldCBtdWx0aWNhc3QgYWRkcmVzc2VzLg0KPiArDQo+ICsgIEBwYXJhbVtp bl0gIFRoaXMgICAgICAgICAgICAgICAgICAgQSBwb2ludGVyIHRvIHRoZQ0KPiBFREtJSV9VU0Jf RVRIRVJORVRfUFJPVE9DT0wgaW5zdGFuY2UuDQo+ICsgIEBwYXJhbVtpbl0gIFZhbHVlICAgICAg ICAgICAgICAgICAgTnVtYmVyIG9mIGZpbHRlcnMuDQo+ICsgIEBwYXJhbVtpbl0gIE1jYXN0QWRk ciAgICAgICAgICAgICAgQSBwb2ludGVyIHRvIHRoZSB2YWx1ZSBvZiB0aGUgbXVsdGljYXN0DQo+ IGFkZHJlc3Nlcy4NCj4gKw0KPiArICBAcmV0dmFsIEVGSV9TVUNDRVNTICAgICAgICAgICBUaGUg cmVxdWVzdCBleGVjdXRlZCBzdWNjZXNzZnVsbHkuDQo+ICsgIEByZXR2YWwgRUZJX1RJTUVPVVQg ICAgICAgICAgIEEgdGltZW91dCBvY2N1cnJlZCBleGVjdXRpbmcgdGhlIHJlcXVlc3QuDQo+ICsg IEByZXR2YWwgRUZJX0RFVklDRV9FUlJPUiAgICAgIFRoZSByZXF1ZXN0IGZhaWxlZCBkdWUgdG8g YSBkZXZpY2UgZXJyb3IuDQo+ICsgIEByZXR2YWwgRUZJX0lOVkFMSURfUEFSQU1FVEVSIE9uZSBv ZiB0aGUgcGFyYW1ldGVycyBoYXMgYW4gaW52YWxpZA0KPiB2YWx1ZS4NCj4gKyAgQHJldHZhbCBF RklfVU5TVVBQT1JURUQgICAgICAgTm90IHN1cHBvcnRlZC4NCj4gKyoqLw0KPiArdHlwZWRlZg0K PiArRUZJX1NUQVRVUw0KPiArKEVGSUFQSSAqRURLSUlfVVNCX0VUSEVSTkVUX1NFVF9FVEhfTVVM VElDQVNUX0ZJTFRFUlMpKA0KPiArICBJTiBFREtJSV9VU0JfRVRIRVJORVRfUFJPVE9DT0wgKlRo aXMsDQo+ICsgIElOIFVJTlQxNiAgICAgICAgICAgICAgICBWYWx1ZSwNCj4gKyAgSU4gVk9JRCAg ICAgICAgICAgICAgICAgICpNY2FzdEFkZHINCj4gKyAgKTsNCj4gKw0KPiArLyoqDQo+ICsgIFRo aXMgcmVxdWVzdCBzZXRzIHVwIHRoZSBzcGVjaWZpZWQgRXRoZXJuZXQgcG93ZXIgbWFuYWdlbWVu dCBwYXR0ZXJuDQo+IGZpbHRlciBhcw0KPiArICBkZXNjcmliZWQgaW4gdGhlIGRhdGEgc3RydWN0 dXJlLg0KPiArDQo+ICsgIEBwYXJhbVtpbl0gIFRoaXMgICAgICAgICAgICAgICAgICAgQSBwb2lu dGVyIHRvIHRoZQ0KPiBFREtJSV9VU0JfRVRIRVJORVRfUFJPVE9DT0wgaW5zdGFuY2UuDQo+ICsg IEBwYXJhbVtpbl0gIFZhbHVlICAgICAgICAgICAgICAgICAgTnVtYmVyIG9mIGZpbHRlcnMuDQo+ ICsgIEBwYXJhbVtpbl0gIExlbmd0aCAgICAgICAgICAgICAgICAgU2l6ZSBvZiB0aGUgcG93ZXIg bWFuYWdlbWVudCBwYXR0ZXJuIGZpbHRlcg0KPiBkYXRhLg0KPiArICBAcGFyYW1baW5dICBQYXR0 ZXJuRmlsdGVyICAgICAgICAgIEEgcG9pbnRlciB0byB0aGUgcG93ZXIgbWFuYWdlbWVudA0KPiBw YXR0ZXJuIGZpbHRlciBzdHJ1Y3R1cmUuDQo+ICsNCj4gKyAgQHJldHZhbCBFRklfU1VDQ0VTUyAg ICAgICAgICAgVGhlIHJlcXVlc3QgZXhlY3V0ZWQgc3VjY2Vzc2Z1bGx5Lg0KPiArICBAcmV0dmFs IEVGSV9USU1FT1VUICAgICAgICAgICBBIHRpbWVvdXQgb2NjdXJyZWQgZXhlY3V0aW5nIHRoZSBy ZXF1ZXN0Lg0KPiArICBAcmV0dmFsIEVGSV9ERVZJQ0VfRVJST1IgICAgICBUaGUgcmVxdWVzdCBm YWlsZWQgZHVlIHRvIGEgZGV2aWNlIGVycm9yLg0KPiArICBAcmV0dmFsIEVGSV9JTlZBTElEX1BB UkFNRVRFUiBPbmUgb2YgdGhlIHBhcmFtZXRlcnMgaGFzIGFuIGludmFsaWQNCj4gdmFsdWUuDQo+ ICsgIEByZXR2YWwgRUZJX1VOU1VQUE9SVEVEICAgICAgIE5vdCBzdXBwb3J0ZWQuDQo+ICsqKi8N Cj4gK3R5cGVkZWYNCj4gK0VGSV9TVEFUVVMNCj4gKyhFRklBUEkNCj4gKkVES0lJX1VTQl9FVEhF Uk5FVF9TRVRfRVRIX1BPV0VSX01BTkFHRV9QQVRURVJOX0ZJTFRFUikoDQo+ICsgIElOIEVES0lJ X1VTQl9FVEhFUk5FVF9QUk9UT0NPTCAqVGhpcywNCj4gKyAgSU4gVUlOVDE2ICAgICAgICAgICAg ICAgIFZhbHVlLA0KPiArICBJTiBVSU5UMTYgICAgICAgICAgICAgICAgTGVuZ3RoLA0KPiArICBJ TiBWT0lEICAgICAgICAgICAgICAgICAgKlBhdHRlcm5GaWx0ZXINCj4gKyAgKTsNCj4gKw0KPiAr LyoqDQo+ICsgIFRoaXMgcmVxdWVzdCByZXRyaWV2ZXMgdGhlIHN0YXR1cyBvZiB0aGUgc3BlY2lm aWVkIEV0aGVybmV0IHBvd2VyDQo+IG1hbmFnZW1lbnQNCj4gKyAgcGF0dGVybiBmaWx0ZXIgZnJv bSB0aGUgZGV2aWNlLg0KPiArDQo+ICsgIEBwYXJhbVtpbl0gIFRoaXMgICAgICAgICAgICAgICAg ICAgQSBwb2ludGVyIHRvIHRoZQ0KPiBFREtJSV9VU0JfRVRIRVJORVRfUFJPVE9DT0wgaW5zdGFu Y2UuDQo+ICsgIEBwYXJhbVtpbl0gIFZhbHVlICAgICAgICAgICAgICAgICAgVGhlIGZpbHRlciBu dW1iZXIuDQo+ICsgIEBwYXJhbVtvdXRdIFBhdHRlcm5BY3RpdmUgICAgICAgICAgQSBwb2ludGVy IHRvIHRoZSBwYXR0ZXJuIGFjdGl2ZSBib29sZWFuLg0KPiArDQo+ICsgIEByZXR2YWwgRUZJX1NV Q0NFU1MgICAgICAgICAgIFRoZSByZXF1ZXN0IGV4ZWN1dGVkIHN1Y2Nlc3NmdWxseS4NCj4gKyAg QHJldHZhbCBFRklfVElNRU9VVCAgICAgICAgICAgQSB0aW1lb3V0IG9jY3VycmVkIGV4ZWN1dGlu ZyB0aGUgcmVxdWVzdC4NCj4gKyAgQHJldHZhbCBFRklfREVWSUNFX0VSUk9SICAgICAgVGhlIHJl cXVlc3QgZmFpbGVkIGR1ZSB0byBhIGRldmljZSBlcnJvci4NCj4gKyAgQHJldHZhbCBFRklfSU5W QUxJRF9QQVJBTUVURVIgT25lIG9mIHRoZSBwYXJhbWV0ZXJzIGhhcyBhbiBpbnZhbGlkDQo+IHZh bHVlLg0KPiArICBAcmV0dmFsIEVGSV9VTlNVUFBPUlRFRCAgICAgICBOb3Qgc3VwcG9ydGVkLg0K PiArKiovDQo+ICt0eXBlZGVmDQo+ICtFRklfU1RBVFVTDQo+ICsoRUZJQVBJDQo+ICpFREtJSV9V U0JfRVRIRVJORVRfR0VUX0VUSF9QT1dFUl9NQU5BR0VfUEFUVEVSTl9GSUxURVIpKA0KPiArICBJ TiAgIEVES0lJX1VTQl9FVEhFUk5FVF9QUk9UT0NPTCAqVGhpcywNCj4gKyAgSU4gICBVSU5UMTYg ICAgICAgICAgICAgICAgVmFsdWUsDQo+ICsgIE9VVCAgQk9PTEVBTiAgICAgICAgICAgICAgICpQ YXR0ZXJuQWN0aXZlDQo+ICsgICk7DQo+ICsNCj4gKy8qKg0KPiArICBUaGlzIHJlcXVlc3QgaXMg dXNlZCB0byBjb25maWd1cmUgZGV2aWNlIEV0aGVybmV0IHBhY2tldCBmaWx0ZXIgc2V0dGluZ3Mu DQo+ICsNCj4gKyAgQHBhcmFtW2luXSAgVGhpcyAgICAgICAgICAgICAgQSBwb2ludGVyIHRvIHRo ZSBFREtJSV9VU0JfRVRIRVJORVRfUFJPVE9DT0wNCj4gaW5zdGFuY2UuDQo+ICsgIEBwYXJhbVtp bl0gIFZhbHVlICAgICAgICAgICAgIFBhY2tldCBGaWx0ZXIgQml0bWFwLg0KPiArDQo+ICsgIEBy ZXR2YWwgRUZJX1NVQ0NFU1MgICAgICAgICAgIFRoZSByZXF1ZXN0IGV4ZWN1dGVkIHN1Y2Nlc3Nm dWxseS4NCj4gKyAgQHJldHZhbCBFRklfVElNRU9VVCAgICAgICAgICAgQSB0aW1lb3V0IG9jY3Vy cmVkIGV4ZWN1dGluZyB0aGUgcmVxdWVzdC4NCj4gKyAgQHJldHZhbCBFRklfREVWSUNFX0VSUk9S ICAgICAgVGhlIHJlcXVlc3QgZmFpbGVkIGR1ZSB0byBhIGRldmljZSBlcnJvci4NCj4gKyAgQHJl dHZhbCBFRklfSU5WQUxJRF9QQVJBTUVURVIgT25lIG9mIHRoZSBwYXJhbWV0ZXJzIGhhcyBhbiBp bnZhbGlkDQo+IHZhbHVlLg0KPiArICBAcmV0dmFsIEVGSV9VTlNVUFBPUlRFRCAgICAgICBOb3Qg c3VwcG9ydGVkLg0KPiArKiovDQo+ICt0eXBlZGVmDQo+ICtFRklfU1RBVFVTDQo+ICsoRUZJQVBJ ICpFREtJSV9VU0JfRVRIRVJORVRfU0VUX0VUSF9QQUNLRVRfRklMVEVSKSgNCj4gKyAgSU4gRURL SUlfVVNCX0VUSEVSTkVUX1BST1RPQ09MICpUaGlzLA0KPiArICBJTiBVSU5UMTYgICAgICAgICAg ICAgICAgVmFsdWUNCj4gKyAgKTsNCj4gKw0KPiArLyoqDQo+ICsgIFRoaXMgcmVxdWVzdCBpcyB1 c2VkIHRvIHJldHJpZXZlIGEgc3RhdGlzdGljIGJhc2VkIG9uIHRoZSBmZWF0dXJlIHNlbGVjdG9y Lg0KPiArDQo+ICsgIEBwYXJhbVtpbl0gIFRoaXMgICAgICAgICAgICAgICAgICBBIHBvaW50ZXIg dG8gdGhlDQo+IEVES0lJX1VTQl9FVEhFUk5FVF9QUk9UT0NPTCBpbnN0YW5jZS4NCj4gKyAgQHBh cmFtW2luXSAgRmVhdHVyZVNlbGVjdG9yICAgICAgIFZhbHVlIG9mIHRoZSBmZWF0dXJlIHNlbGVj dG9yLg0KPiArICBAcGFyYW1bb3V0XSBTdGF0aXN0aWMgICAgICAgICAgICAgQSBwb2ludGVyIHRv IHRoZSAzMiBiaXQgdW5zaWduZWQgaW50ZWdlci4NCj4gKw0KPiArICBAcmV0dmFsIEVGSV9TVUND RVNTICAgICAgICAgICBUaGUgcmVxdWVzdCBleGVjdXRlZCBzdWNjZXNzZnVsbHkuDQo+ICsgIEBy ZXR2YWwgRUZJX1RJTUVPVVQgICAgICAgICAgIEEgdGltZW91dCBvY2N1cnJlZCBleGVjdXRpbmcg dGhlIHJlcXVlc3QuDQo+ICsgIEByZXR2YWwgRUZJX0RFVklDRV9FUlJPUiAgICAgIFRoZSByZXF1 ZXN0IGZhaWxlZCBkdWUgdG8gYSBkZXZpY2UgZXJyb3IuDQo+ICsgIEByZXR2YWwgRUZJX0lOVkFM SURfUEFSQU1FVEVSIE9uZSBvZiB0aGUgcGFyYW1ldGVycyBoYXMgYW4gaW52YWxpZA0KPiB2YWx1 ZS4NCj4gKyAgQHJldHZhbCBFRklfVU5TVVBQT1JURUQgICAgICAgTm90IHN1cHBvcnRlZC4NCj4g KyoqLw0KPiArdHlwZWRlZg0KPiArRUZJX1NUQVRVUw0KPiArKEVGSUFQSSAqRURLSUlfVVNCX0VU SEVSTkVUX0dFVF9FVEhfU1RBVElTVElDKSgNCj4gKyAgSU4gIEVES0lJX1VTQl9FVEhFUk5FVF9Q Uk9UT0NPTCAgKlRoaXMsDQo+ICsgIElOICBVSU5UMTYgICAgICAgICAgICAgICAgIEZlYXR1cmVT ZWxlY3RvciwNCj4gKyAgT1VUIFZPSUQgICAgICAgICAgICAgICAgICAgKlN0YXRpc3RpYw0KPiAr ICApOw0KPiArDQo+ICt0eXBlZGVmIHN0cnVjdCB7DQo+ICsgIEVES0lJX1VTQl9FVEhFUk5FVF9V TkRJX0dFVF9TVEFURSAgICAgICAgICAgVXNiRXRoVW5kaUdldFN0YXRlOw0KPiArICBFREtJSV9V U0JfRVRIRVJORVRfVU5ESV9TVEFSVCAgICAgICAgICAgICAgIFVzYkV0aFVuZGlTdGFydDsNCj4g KyAgRURLSUlfVVNCX0VUSEVSTkVUX1VORElfU1RPUCAgICAgICAgICAgICAgICBVc2JFdGhVbmRp U3RvcDsNCj4gKyAgRURLSUlfVVNCX0VUSEVSTkVUX1VORElfR0VUX0lOSVRfSU5GTyAgICAgICBV c2JFdGhVbmRpR2V0SW5pdEluZm87DQo+ICsgIEVES0lJX1VTQl9FVEhFUk5FVF9VTkRJX0dFVF9D T05GSUdfSU5GTw0KPiBVc2JFdGhVbmRpR2V0Q29uZmlnSW5mbzsNCj4gKyAgRURLSUlfVVNCX0VU SEVSTkVUX1VORElfSU5JVElBTElaRSAgICAgICAgICBVc2JFdGhVbmRpSW5pdGlhbGl6ZTsNCj4g KyAgRURLSUlfVVNCX0VUSEVSTkVUX1VORElfUkVTRVQgICAgICAgICAgICAgICBVc2JFdGhVbmRp UmVzZXQ7DQo+ICsgIEVES0lJX1VTQl9FVEhFUk5FVF9VTkRJX1NIVVRET1dOICAgICAgICAgICAg VXNiRXRoVW5kaVNodXRkb3duOw0KPiArICBFREtJSV9VU0JfRVRIRVJORVRfVU5ESV9JTlRFUlJV UFRfRU5BQkxFDQo+IFVzYkV0aFVuZGlJbnRlcnJ1cHRFbmFibGU7DQo+ICsgIEVES0lJX1VTQl9F VEhFUk5FVF9VTkRJX1JFQ0VJVkVfRklMVEVSICAgICAgVXNiRXRoVW5kaVJlY2VpdmVGaWx0ZXI7 DQo+ICsgIEVES0lJX1VTQl9FVEhFUk5FVF9VTkRJX1NUQVRJT05fQUREUkVTUw0KPiBVc2JFdGhV bmRpU3RhdGlvbkFkZHJlc3M7DQo+ICsgIEVES0lJX1VTQl9FVEhFUk5FVF9VTkRJX1NUQVRJU1RJ Q1MgICAgICAgICAgVXNiRXRoVW5kaVN0YXRpc3RpY3M7DQo+ICsgIEVES0lJX1VTQl9FVEhFUk5F VF9VTkRJX01DQVNUX0lQVE9NQUMNCj4gVXNiRXRoVW5kaU1jYXN0SXAyTWFjOw0KPiArICBFREtJ SV9VU0JfRVRIRVJORVRfVU5ESV9OVl9EQVRBICAgICAgICAgICAgIFVzYkV0aFVuZGlOdkRhdGE7 DQo+ICsgIEVES0lJX1VTQl9FVEhFUk5FVF9VTkRJX0dFVF9TVEFUVVMgICAgICAgICAgVXNiRXRo VW5kaUdldFN0YXR1czsNCj4gKyAgRURLSUlfVVNCX0VUSEVSTkVUX1VORElfRklMTF9IRUFERVIg ICAgICAgICBVc2JFdGhVbmRpRmlsbEhlYWRlcjsNCj4gKyAgRURLSUlfVVNCX0VUSEVSTkVUX1VO RElfVFJBTlNNSVQgICAgICAgICAgICBVc2JFdGhVbmRpVHJhbnNtaXQ7DQo+ICsgIEVES0lJX1VT Ql9FVEhFUk5FVF9VTkRJX1JFQ0VJVkUgICAgICAgICAgICAgVXNiRXRoVW5kaVJlY2VpdmU7DQo+ ICt9IEVES0lJX1VTQl9FVEhFUk5FVF9VTkRJOw0KPiArDQo+ICsvLyBUaGUgRURLSUlfVVNCX0VU SEVSTkVUX1BST1RPQ09MIHByb3ZpZGVzIHNvbWUgYmFzaWMgVVNCIEV0aGVybmV0DQo+IGRldmlj ZSByZWxldmFudA0KPiArLy8gZGVzY3JpcHRvciBhbmQgc3BlY2lmaWMgcmVxdWVzdHMuDQo+ICtz dHJ1Y3QgX0VES0lJX1VTQl9FVEhFUk5FVF9QUk9UT0NPTCB7DQo+ICsgIEVES0lJX1VTQl9FVEhF Uk5FVF9VTkRJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBVc2JFdGhVbmRpOw0K PiArICAvLyBmb3IgY2FsbGluZyB0aGUgVU5ESSBjaGlsZCBmdW5jdGlvbnMNCj4gKyAgRURLSUlf VVNCX0VUSEVSTkVUX0lOSVRJQUxJWkUgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFVzYkV0 aEluaXRpYWxpemU7DQo+ICsgIEVES0lJX1VTQl9FVEhFUk5FVF9TVEFUSVNUSUNTICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBVc2JFdGhTdGF0aXN0aWNzOw0KPiArICBFREtJSV9VU0JfRVRI RVJORVRfUkVDRUlWRSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVXNiRXRoUmVjZWl2 ZTsNCj4gKyAgRURLSUlfVVNCX0VUSEVSTkVUX1RSQU5TTUlUICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIFVzYkV0aFRyYW5zbWl0Ow0KPiArICBFREtJSV9VU0JfRVRIRVJORVRfSU5URVJS VVBUICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVXNiRXRoSW50ZXJydXB0Ow0KPiArICBF REtJSV9VU0JfR0VUX0VUSF9NQUNfQUREUkVTUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg VXNiRXRoTWFjQWRkcmVzczsNCj4gKyAgRURLSUlfVVNCX0VUSF9NQVhfQlVMS19TSVpFICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIFVzYkV0aE1heEJ1bGtTaXplOw0KPiArICBFREtJSV9V U0JfSEVBREVSX0ZVTkNUSU9OQUxfREVTQ1JJUFRPUg0KPiBVc2JIZWFkZXJGdW5EZXNjcmlwdG9y Ow0KPiArICBFREtJSV9VU0JfVU5JT05fRlVOQ1RJT05BTF9ERVNDUklQVE9SDQo+IFVzYlVuaW9u RnVuRGVzY3JpcHRvcjsNCj4gKyAgRURLSUlfVVNCX0VUSEVSTkVUX0ZVTkNUSU9OQUxfREVTQ1JJ UFRPUg0KPiBVc2JFdGhGdW5EZXNjcmlwdG9yOw0KPiArICBFREtJSV9VU0JfRVRIRVJORVRfU0VU X0VUSF9NVUxUSUNBU1RfRklMVEVSUw0KPiBTZXRVc2JFdGhNY2FzdEZpbHRlcjsNCj4gKyAgRURL SUlfVVNCX0VUSEVSTkVUX1NFVF9FVEhfUE9XRVJfTUFOQUdFX1BBVFRFUk5fRklMVEVSDQo+IFNl dFVzYkV0aFBvd2VyUGF0dGVybkZpbHRlcjsNCj4gKyAgRURLSUlfVVNCX0VUSEVSTkVUX0dFVF9F VEhfUE9XRVJfTUFOQUdFX1BBVFRFUk5fRklMVEVSDQo+IEdldFVzYkV0aFBvZXdyUGF0dGVybkZp bHRlcjsNCj4gKyAgRURLSUlfVVNCX0VUSEVSTkVUX1NFVF9FVEhfUEFDS0VUX0ZJTFRFUg0KPiBT ZXRVc2JFdGhQYWNrZXRGaWx0ZXI7DQo+ICsgIEVES0lJX1VTQl9FVEhFUk5FVF9HRVRfRVRIX1NU QVRJU1RJQyAgICAgICAgICAgICAgICAgICAgICBHZXRVc2JFdGhTdGF0aXN0aWM7DQo+ICt9Ow0K PiArDQo+ICtleHRlcm4gRUZJX0dVSUQgIGdFZGtJSVVzYkV0aFByb3RvY29sR3VpZDsNCj4gKw0K PiArI2VuZGlmDQo+IGRpZmYgLS1naXQgYS9Vc2JOZXR3b3JrUGtnL05ldHdvcmtDb21tb24vQ29t cG9uZW50TmFtZS5jDQo+IGIvVXNiTmV0d29ya1BrZy9OZXR3b3JrQ29tbW9uL0NvbXBvbmVudE5h bWUuYw0KPiBuZXcgZmlsZSBtb2RlIDEwMDY0NA0KPiBpbmRleCAwMDAwMDAwMDAwLi4wODQ3ZjU2 OTEwDQo+IC0tLSAvZGV2L251bGwNCj4gKysrIGIvVXNiTmV0d29ya1BrZy9OZXR3b3JrQ29tbW9u L0NvbXBvbmVudE5hbWUuYw0KPiBAQCAtMCwwICsxLDI2MyBAQA0KPiArLyoqIEBmaWxlDQo+ICsg IFRoaXMgZmlsZSBjb250YWlucyBjb2RlIGZvciBVU0IgbmV0d29yayBjb21tb24gZHJpdmVyDQo+ ICsgIGNvbXBvbmVudCBuYW1lIGRlZmluaXRpb25zDQo+ICsNCj4gKyAgQ29weXJpZ2h0IChjKSAy MDIyLCBBbWVyaWNhbiBNZWdhdHJlbmRzIEludGVybmF0aW9uYWwgTExDLiBBbGwgcmlnaHRzDQo+ IHJlc2VydmVkLjxCUj4NCj4gKyAgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEJTRC0yLUNsYXVz ZS1QYXRlbnQNCj4gKyoqLw0KPiArDQo+ICsjaW5jbHVkZSAiRHJpdmVyQmluZGluZy5oIg0KPiAr DQo+ICtleHRlcm4gRUZJX0RSSVZFUl9CSU5ESU5HX1BST1RPQ09MICBnTmV0d29ya0NvbW1vbkRy aXZlckJpbmRpbmc7DQo+ICsNCj4gK0dMT0JBTF9SRU1PVkVfSUZfVU5SRUZFUkVOQ0VEIEVGSV9V TklDT0RFX1NUUklOR19UQUJMRQ0KPiBnTmV0d29ya0NvbW1vbkRyaXZlck5hbWVUYWJsZVtdID0g ew0KPiArICB7DQo+ICsgICAgImVuZztlbiIsDQo+ICsgICAgTCJOZXR3b3JrIENvbW1vbiBEcml2 ZXIiDQo+ICsgIH0sDQo+ICsgIHsNCj4gKyAgICBOVUxMLA0KPiArICAgIE5VTEwNCj4gKyAgfQ0K PiArfTsNCj4gK0dMT0JBTF9SRU1PVkVfSUZfVU5SRUZFUkVOQ0VEIEVGSV9VTklDT0RFX1NUUklO R19UQUJMRQ0KPiAqZ05ldHdvcmtDb21tb25Db250cm9sbGVyTmFtZVRhYmxlID0gTlVMTDsNCj4g Kw0KPiArRUZJX1NUQVRVUw0KPiArRUZJQVBJDQo+ICtOZXR3b3JrQ29tbW9uQ29tcG9uZW50TmFt ZUdldERyaXZlck5hbWUgKA0KPiArICBJTiAgRUZJX0NPTVBPTkVOVF9OQU1FX1BST1RPQ09MICAq VGhpcywNCj4gKyAgSU4gIENIQVI4ICAgICAgICAgICAgICAgICAgICAgICAgKkxhbmd1YWdlLA0K PiArICBPVVQgQ0hBUjE2ICAgICAgICAgICAgICAgICAgICAgICAqKkRyaXZlck5hbWUNCj4gKyAg KTsNCj4gKw0KPiArRUZJX1NUQVRVUw0KPiArRUZJQVBJDQo+ICtOZXR3b3JrQ29tbW9uQ29tcG9u ZW50TmFtZUdldENvbnRyb2xsZXJOYW1lICgNCj4gKyAgSU4gRUZJX0NPTVBPTkVOVF9OQU1FX1BS T1RPQ09MICAqVGhpcywNCj4gKyAgSU4gRUZJX0hBTkRMRSAgICAgICAgICAgICAgICAgICBDb250 cm9sbGVyLA0KPiArICBJTiBFRklfSEFORExFICAgICAgICAgICAgICAgICAgIENoaWxkSGFuZGxl ICAgICAgICBPUFRJT05BTCwNCj4gKyAgSU4gQ0hBUjggICAgICAgICAgICAgICAgICAgICAgICAq TGFuZ3VhZ2UsDQo+ICsgIE9VVCBDSEFSMTYgICAgICAgICAgICAgICAgICAgICAgKipDb250cm9s bGVyTmFtZQ0KPiArICApOw0KPiArDQo+ICtHTE9CQUxfUkVNT1ZFX0lGX1VOUkVGRVJFTkNFRA0K PiBFRklfQ09NUE9ORU5UX05BTUVfUFJPVE9DT0wgIGdOZXR3b3JrQ29tbW9uQ29tcG9uZW50TmFt ZQ0KPiA9IHsNCj4gKyAgTmV0d29ya0NvbW1vbkNvbXBvbmVudE5hbWVHZXREcml2ZXJOYW1lLA0K PiArICBOZXR3b3JrQ29tbW9uQ29tcG9uZW50TmFtZUdldENvbnRyb2xsZXJOYW1lLA0KPiArICAi ZW5nIg0KPiArfTsNCj4gKw0KPiArR0xPQkFMX1JFTU9WRV9JRl9VTlJFRkVSRU5DRUQNCj4gRUZJ X0NPTVBPTkVOVF9OQU1FMl9QUk9UT0NPTA0KPiBnTmV0d29ya0NvbW1vbkNvbXBvbmVudE5hbWUy ID0gew0KPiArDQo+IChFRklfQ09NUE9ORU5UX05BTUUyX0dFVF9EUklWRVJfTkFNRSlOZXR3b3Jr Q29tbW9uQ29tcG9uDQo+IGVudE5hbWVHZXREcml2ZXJOYW1lLA0KPiArDQo+IChFRklfQ09NUE9O RU5UX05BTUUyX0dFVF9DT05UUk9MTEVSX05BTUUpTmV0d29ya0NvbW1vbkNvDQo+IG1wb25lbnRO YW1lR2V0Q29udHJvbGxlck5hbWUsDQo+ICsgICJlbiINCj4gK307DQo+ICsNCj4gKy8qKg0KPiAr ICBSZXRyaWV2ZXMgYSBVbmljb2RlIHN0cmluZyB0aGF0IGlzIHRoZSB1c2VyIHJlYWRhYmxlIG5h bWUgb2YgdGhlIGRyaXZlci4NCj4gKw0KPiArICBUaGlzIGZ1bmN0aW9uIHJldHJpZXZlcyB0aGUg dXNlciByZWFkYWJsZSBuYW1lIG9mIGEgZHJpdmVyIGluIHRoZSBmb3JtIG9mIGENCj4gKyAgVW5p Y29kZSBzdHJpbmcuIElmIHRoZSBkcml2ZXIgc3BlY2lmaWVkIGJ5IFRoaXMgaGFzIGEgdXNlciBy ZWFkYWJsZSBuYW1lIGluDQo+ICsgIHRoZSBsYW5ndWFnZSBzcGVjaWZpZWQgYnkgTGFuZ3VhZ2Us IHRoZW4gYSBwb2ludGVyIHRvIHRoZSBkcml2ZXIgbmFtZSBpcw0KPiArICByZXR1cm5lZCBpbiBE cml2ZXJOYW1lLCBhbmQgRUZJX1NVQ0NFU1MgaXMgcmV0dXJuZWQuIElmIHRoZSBkcml2ZXINCj4g c3BlY2lmaWVkDQo+ICsgIGJ5IFRoaXMgZG9lcyBub3Qgc3VwcG9ydCB0aGUgbGFuZ3VhZ2Ugc3Bl Y2lmaWVkIGJ5IExhbmd1YWdlLA0KPiArICB0aGVuIEVGSV9VTlNVUFBPUlRFRCBpcyByZXR1cm5l ZC4NCj4gKw0KPiArICBAcGFyYW1baW5dICBUaGlzICAgICAgICAgICAgICBBIHBvaW50ZXIgdG8g dGhlDQo+IEVGSV9DT01QT05FTlRfTkFNRTJfUFJPVE9DT0wgb3INCj4gKyAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgRUZJX0NPTVBPTkVOVF9OQU1FX1BST1RPQ09MIGluc3RhbmNlLg0K PiArICBAcGFyYW1baW5dICBMYW5ndWFnZSAgICAgICAgICBBIHBvaW50ZXIgdG8gYSBOdWxsLXRl cm1pbmF0ZWQgQVNDSUkgc3RyaW5nDQo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IGFycmF5IGluZGljYXRpbmcgdGhlIGxhbmd1YWdlLiBUaGlzIGlzIHRoZQ0KPiArICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBsYW5ndWFnZSBvZiB0aGUgZHJpdmVyIG5hbWUgdGhhdCB0 aGUgY2FsbGVyIGlzDQo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlcXVlc3Rp bmcsIGFuZCBpdCBtdXN0IG1hdGNoIG9uZSBvZiB0aGUNCj4gKyAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgbGFuZ3VhZ2VzIHNwZWNpZmllZCBpbiBTdXBwb3J0ZWRMYW5ndWFnZXMuIFRo ZQ0KPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBudW1iZXIgb2YgbGFuZ3VhZ2Vz IHN1cHBvcnRlZCBieSBhIGRyaXZlciBpcyB1cA0KPiArICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICB0byB0aGUgZHJpdmVyIHdyaXRlci4gTGFuZ3VhZ2UgaXMgc3BlY2lmaWVkDQo+ICsg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluIFJGQyA0NjQ2IG9yIElTTyA2MzktMiBs YW5ndWFnZSBjb2RlIGZvcm1hdC4NCj4gKyAgQHBhcmFtW291dF0gRHJpdmVyTmFtZSAgICAgICAg QSBwb2ludGVyIHRvIHRoZSBVbmljb2RlIHN0cmluZyB0byByZXR1cm4uDQo+ICsgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIFRoaXMgVW5pY29kZSBzdHJpbmcgaXMgdGhlIG5hbWUgb2Yg dGhlDQo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRyaXZlciBzcGVjaWZpZWQg YnkgVGhpcyBpbiB0aGUgbGFuZ3VhZ2UNCj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgc3BlY2lmaWVkIGJ5IExhbmd1YWdlLg0KPiArDQo+ICsgIEByZXR2YWwgRUZJX1NVQ0NFU1Mg ICAgICAgICAgIFRoZSBVbmljb2RlIHN0cmluZyBmb3IgdGhlIERyaXZlciBzcGVjaWZpZWQgYnkN Cj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVGhpcyBhbmQgdGhlIGxhbmd1YWdl IHNwZWNpZmllZCBieSBMYW5ndWFnZSB3YXMNCj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgcmV0dXJuZWQgaW4gRHJpdmVyTmFtZS4NCj4gKyAgQHJldHZhbCBFRklfSU5WQUxJRF9Q QVJBTUVURVIgTGFuZ3VhZ2UgaXMgTlVMTC4NCj4gKyAgQHJldHZhbCBFRklfSU5WQUxJRF9QQVJB TUVURVIgRHJpdmVyTmFtZSBpcyBOVUxMLg0KPiArICBAcmV0dmFsIEVGSV9VTlNVUFBPUlRFRCAg ICAgICBUaGUgZHJpdmVyIHNwZWNpZmllZCBieSBUaGlzIGRvZXMgbm90DQo+IHN1cHBvcnQNCj4g KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhlIGxhbmd1YWdlIHNwZWNpZmllZCBi eSBMYW5ndWFnZS4NCj4gKw0KPiArKiovDQo+ICtFRklfU1RBVFVTDQo+ICtFRklBUEkNCj4gK05l dHdvcmtDb21tb25Db21wb25lbnROYW1lR2V0RHJpdmVyTmFtZSAoDQo+ICsgIElOICBFRklfQ09N UE9ORU5UX05BTUVfUFJPVE9DT0wgICpUaGlzLA0KPiArICBJTiAgQ0hBUjggICAgICAgICAgICAg ICAgICAgICAgICAqTGFuZ3VhZ2UsDQo+ICsgIE9VVCBDSEFSMTYgICAgICAgICAgICAgICAgICAg ICAgICoqRHJpdmVyTmFtZQ0KPiArICApDQo+ICt7DQo+ICsgIHJldHVybiBMb29rdXBVbmljb2Rl U3RyaW5nMiAoDQo+ICsgICAgICAgICAgIExhbmd1YWdlLA0KPiArICAgICAgICAgICBUaGlzLT5T dXBwb3J0ZWRMYW5ndWFnZXMsDQo+ICsgICAgICAgICAgIGdOZXR3b3JrQ29tbW9uRHJpdmVyTmFt ZVRhYmxlLA0KPiArICAgICAgICAgICBEcml2ZXJOYW1lLA0KPiArICAgICAgICAgICAoQk9PTEVB TikoVGhpcyA9PSAmZ05ldHdvcmtDb21tb25Db21wb25lbnROYW1lKQ0KPiArICAgICAgICAgICAp Ow0KPiArfQ0KPiArDQo+ICsvKioNCj4gKyAgUmV0cmlldmVzIGEgVW5pY29kZSBzdHJpbmcgdGhh dCBpcyB0aGUgdXNlciByZWFkYWJsZSBuYW1lIG9mIHRoZSBjb250cm9sbGVyDQo+ICsgIHRoYXQg aXMgYmVpbmcgbWFuYWdlZCBieSBhIGRyaXZlci4NCj4gKw0KPiArICBUaGlzIGZ1bmN0aW9uIHJl dHJpZXZlcyB0aGUgdXNlciByZWFkYWJsZSBuYW1lIG9mIHRoZSBjb250cm9sbGVyIHNwZWNpZmll ZA0KPiBieQ0KPiArICBDb250cm9sbGVySGFuZGxlIGFuZCBDaGlsZEhhbmRsZSBpbiB0aGUgZm9y bSBvZiBhIFVuaWNvZGUgc3RyaW5nLiBJZiB0aGUNCj4gKyAgZHJpdmVyIHNwZWNpZmllZCBieSBU aGlzIGhhcyBhIHVzZXIgcmVhZGFibGUgbmFtZSBpbiB0aGUgbGFuZ3VhZ2Ugc3BlY2lmaWVkDQo+ IGJ5DQo+ICsgIExhbmd1YWdlLCB0aGVuIGEgcG9pbnRlciB0byB0aGUgY29udHJvbGxlciBuYW1l IGlzIHJldHVybmVkIGluDQo+IENvbnRyb2xsZXJOYW1lLA0KPiArICBhbmQgRUZJX1NVQ0NFU1Mg aXMgcmV0dXJuZWQuICBJZiB0aGUgZHJpdmVyIHNwZWNpZmllZCBieSBUaGlzIGlzIG5vdCBjdXJy ZW50bHkNCj4gKyAgbWFuYWdpbmcgdGhlIGNvbnRyb2xsZXIgc3BlY2lmaWVkIGJ5IENvbnRyb2xs ZXJIYW5kbGUgYW5kIENoaWxkSGFuZGxlLA0KPiArICB0aGVuIEVGSV9VTlNVUFBPUlRFRCBpcyBy ZXR1cm5lZC4gIElmIHRoZSBkcml2ZXIgc3BlY2lmaWVkIGJ5IFRoaXMgZG9lcw0KPiBub3QNCj4g KyAgc3VwcG9ydCB0aGUgbGFuZ3VhZ2Ugc3BlY2lmaWVkIGJ5IExhbmd1YWdlLCB0aGVuIEVGSV9V TlNVUFBPUlRFRCBpcw0KPiByZXR1cm5lZC4NCj4gKw0KPiArICBAcGFyYW1baW5dICBUaGlzICAg ICAgICAgICAgICBBIHBvaW50ZXIgdG8gdGhlDQo+IEVGSV9DT01QT05FTlRfTkFNRTJfUFJPVE9D T0wgb3INCj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRUZJX0NPTVBPTkVOVF9O QU1FX1BST1RPQ09MIGluc3RhbmNlLg0KPiArICBAcGFyYW1baW5dICBDb250cm9sbGVyICAgICAg ICBUaGUgaGFuZGxlIG9mIGEgY29udHJvbGxlciB0aGF0IHRoZSBkcml2ZXINCj4gKyAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgc3BlY2lmaWVkIGJ5IFRoaXMgaXMgbWFuYWdpbmcuICBU aGlzIGhhbmRsZQ0KPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzcGVjaWZpZXMg dGhlIGNvbnRyb2xsZXIgd2hvc2UgbmFtZSBpcyB0byBiZQ0KPiArICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICByZXR1cm5lZC4NCj4gKyAgQHBhcmFtW2luXSAgQ2hpbGRIYW5kbGUgICAg ICAgVGhlIGhhbmRsZSBvZiB0aGUgY2hpbGQgY29udHJvbGxlciB0byByZXRyaWV2ZQ0KPiArICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGUgbmFtZSBvZi4gIFRoaXMgaXMgYW4gb3B0 aW9uYWwgcGFyYW1ldGVyIHRoYXQNCj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg bWF5IGJlIE5VTEwuICBJdCB3aWxsIGJlIE5VTEwgZm9yIGRldmljZQ0KPiArICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBkcml2ZXJzLiAgSXQgd2lsbCBhbHNvIGJlIE5VTEwgZm9yIGEg YnVzIGRyaXZlcnMNCj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhhdCB3aXNo IHRvIHJldHJpZXZlIHRoZSBuYW1lIG9mIHRoZSBidXMNCj4gKyAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgY29udHJvbGxlci4gIEl0IHdpbGwgbm90IGJlIE5VTEwgZm9yIGEgYnVzDQo+ ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRyaXZlciB0aGF0IHdpc2hlcyB0byBy ZXRyaWV2ZSB0aGUgbmFtZSBvZiBhDQo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IGNoaWxkIGNvbnRyb2xsZXIuDQo+ICsgIEBwYXJhbVtpbl0gIExhbmd1YWdlICAgICAgICAgIEEg cG9pbnRlciB0byBhIE51bGwtdGVybWluYXRlZCBBU0NJSSBzdHJpbmcNCj4gKyAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgYXJyYXkgaW5kaWNhdGluZyB0aGUgbGFuZ3VhZ2UuICBUaGlz IGlzIHRoZQ0KPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsYW5ndWFnZSBvZiB0 aGUgZHJpdmVyIG5hbWUgdGhhdCB0aGUgY2FsbGVyIGlzDQo+ICsgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIHJlcXVlc3RpbmcsIGFuZCBpdCBtdXN0IG1hdGNoIG9uZSBvZiB0aGUNCj4g KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGFuZ3VhZ2VzIHNwZWNpZmllZCBpbiBT dXBwb3J0ZWRMYW5ndWFnZXMuIFRoZQ0KPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBudW1iZXIgb2YgbGFuZ3VhZ2VzIHN1cHBvcnRlZCBieSBhIGRyaXZlciBpcyB1cA0KPiArICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0byB0aGUgZHJpdmVyIHdyaXRlci4gTGFuZ3Vh Z2UgaXMgc3BlY2lmaWVkIGluDQo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJG QyA0NjQ2IG9yIElTTyA2MzktMiBsYW5ndWFnZSBjb2RlIGZvcm1hdC4NCj4gKyAgQHBhcmFtW291 dF0gQ29udHJvbGxlck5hbWUgICAgQSBwb2ludGVyIHRvIHRoZSBVbmljb2RlIHN0cmluZyB0byBy ZXR1cm4uDQo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRoaXMgVW5pY29kZSBz dHJpbmcgaXMgdGhlIG5hbWUgb2YgdGhlDQo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIGNvbnRyb2xsZXIgc3BlY2lmaWVkIGJ5IENvbnRyb2xsZXJIYW5kbGUgYW5kDQo+ICsgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIENoaWxkSGFuZGxlIGluIHRoZSBsYW5ndWFnZSBz cGVjaWZpZWQgYnkNCj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTGFuZ3VhZ2Ug ZnJvbSB0aGUgcG9pbnQgb2YgdmlldyBvZiB0aGUgZHJpdmVyDQo+ICsgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIHNwZWNpZmllZCBieSBUaGlzLg0KPiArDQo+ICsgIEByZXR2YWwgRUZJ X1NVQ0NFU1MgICAgICAgICAgIFRoZSBVbmljb2RlIHN0cmluZyBmb3IgdGhlIHVzZXIgcmVhZGFi bGUgbmFtZQ0KPiBpbg0KPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGUgbGFu Z3VhZ2Ugc3BlY2lmaWVkIGJ5IExhbmd1YWdlIGZvciB0aGUNCj4gKyAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgZHJpdmVyIHNwZWNpZmllZCBieSBUaGlzIHdhcyByZXR1cm5lZCBpbg0K PiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBEcml2ZXJOYW1lLg0KPiArICBAcmV0 dmFsIEVGSV9JTlZBTElEX1BBUkFNRVRFUiBDb250cm9sbGVySGFuZGxlIGlzIG5vdCBhIHZhbGlk DQo+IEVGSV9IQU5ETEUuDQo+ICsgIEByZXR2YWwgRUZJX0lOVkFMSURfUEFSQU1FVEVSIENoaWxk SGFuZGxlIGlzIG5vdCBOVUxMIGFuZCBpdCBpcyBub3QgYQ0KPiB2YWxpZA0KPiArICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBFRklfSEFORExFLg0KPiArICBAcmV0dmFsIEVGSV9JTlZB TElEX1BBUkFNRVRFUiBMYW5ndWFnZSBpcyBOVUxMLg0KPiArICBAcmV0dmFsIEVGSV9JTlZBTElE X1BBUkFNRVRFUiBDb250cm9sbGVyTmFtZSBpcyBOVUxMLg0KPiArICBAcmV0dmFsIEVGSV9VTlNV UFBPUlRFRCAgICAgICBUaGUgZHJpdmVyIHNwZWNpZmllZCBieSBUaGlzIGlzIG5vdCBjdXJyZW50 bHkNCj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWFuYWdpbmcgdGhlIGNvbnRy b2xsZXIgc3BlY2lmaWVkIGJ5DQo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENv bnRyb2xsZXJIYW5kbGUgYW5kIENoaWxkSGFuZGxlLg0KPiArICBAcmV0dmFsIEVGSV9VTlNVUFBP UlRFRCAgICAgICBUaGUgZHJpdmVyIHNwZWNpZmllZCBieSBUaGlzIGRvZXMgbm90DQo+IHN1cHBv cnQNCj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhlIGxhbmd1YWdlIHNwZWNp ZmllZCBieSBMYW5ndWFnZS4NCj4gKw0KPiArKiovDQo+ICtFRklfU1RBVFVTDQo+ICtFRklBUEkN Cj4gK05ldHdvcmtDb21tb25Db21wb25lbnROYW1lR2V0Q29udHJvbGxlck5hbWUgKA0KPiArICBJ TiAgRUZJX0NPTVBPTkVOVF9OQU1FX1BST1RPQ09MICAqVGhpcywNCj4gKyAgSU4gIEVGSV9IQU5E TEUgICAgICAgICAgICAgICAgICAgQ29udHJvbGxlciwNCj4gKyAgSU4gIEVGSV9IQU5ETEUgICAg ICAgICAgICAgICAgICAgQ2hpbGRIYW5kbGUgICAgICAgIE9QVElPTkFMLA0KPiArICBJTiAgQ0hB UjggICAgICAgICAgICAgICAgICAgICAgICAqTGFuZ3VhZ2UsDQo+ICsgIE9VVCBDSEFSMTYgICAg ICAgICAgICAgICAgICAgICAgICoqQ29udHJvbGxlck5hbWUNCj4gKyAgKQ0KPiArew0KPiArICBF RklfU1RBVFVTICAgICAgICAgICAgICAgICBTdGF0dXM7DQo+ICsgIENIQVIxNiAgICAgICAgICAg ICAgICAgICAgICpIYW5kbGVOYW1lOw0KPiArICBFRklfVVNCX0lPX1BST1RPQ09MICAgICAgICAq VXNiSW8gPSBOVUxMOw0KPiArICBFRklfVVNCX0RFVklDRV9ERVNDUklQVE9SICBEZXZEZXNjOw0K PiArDQo+ICsgIGlmICghTGFuZ3VhZ2UgfHwgIUNvbnRyb2xsZXJOYW1lKSB7DQo+ICsgICAgcmV0 dXJuIEVGSV9JTlZBTElEX1BBUkFNRVRFUjsNCj4gKyAgfQ0KPiArDQo+ICsgIGlmIChDaGlsZEhh bmRsZSA9PSBOVUxMKSB7DQo+ICsgICAgcmV0dXJuIEVGSV9VTlNVUFBPUlRFRDsNCj4gKyAgfQ0K PiArDQo+ICsgIC8vDQo+ICsgIC8vIE1ha2Ugc3VyZSB0aGlzIGRyaXZlciBpcyBjdXJyZW50bHkg bWFuYWdpbmcgQ29udHJvbGxlckhhbmRsZQ0KPiArICAvLw0KPiArICBTdGF0dXMgPSBFZmlUZXN0 TWFuYWdlZERldmljZSAoDQo+ICsgICAgICAgICAgICAgQ29udHJvbGxlciwNCj4gKyAgICAgICAg ICAgICBnTmV0d29ya0NvbW1vbkRyaXZlckJpbmRpbmcuRHJpdmVyQmluZGluZ0hhbmRsZSwNCj4g KyAgICAgICAgICAgICAmZ0Vka0lJVXNiRXRoUHJvdG9jb2xHdWlkDQo+ICsgICAgICAgICAgICAg KTsNCj4gKyAgaWYgKEVGSV9FUlJPUiAoU3RhdHVzKSkgew0KPiArICAgIHJldHVybiBTdGF0dXM7 DQo+ICsgIH0NCj4gKw0KPiArICAvLw0KPiArICAvLyBNYWtlIHN1cmUgdGhpcyBkcml2ZXIgcHJv ZHVjZWQgQ2hpbGRIYW5kbGUNCj4gKyAgLy8NCj4gKyAgU3RhdHVzID0gRWZpVGVzdENoaWxkSGFu ZGxlICgNCj4gKyAgICAgICAgICAgICBDb250cm9sbGVyLA0KPiArICAgICAgICAgICAgIENoaWxk SGFuZGxlLA0KPiArICAgICAgICAgICAgICZnRWRrSUlVc2JFdGhQcm90b2NvbEd1aWQNCj4gKyAg ICAgICAgICAgICApOw0KPiArICBpZiAoRUZJX0VSUk9SIChTdGF0dXMpKSB7DQo+ICsgICAgcmV0 dXJuIFN0YXR1czsNCj4gKyAgfQ0KPiArDQo+ICsgIFN0YXR1cyA9IGdCUy0+SGFuZGxlUHJvdG9j b2wgKENvbnRyb2xsZXIsICZnRWZpVXNiSW9Qcm90b2NvbEd1aWQsIChWT0lEDQo+ICoqKSZVc2JJ byk7DQo+ICsNCj4gKyAgaWYgKCFFRklfRVJST1IgKFN0YXR1cykpIHsNCj4gKyAgICBTdGF0dXMg PSBVc2JJby0+VXNiR2V0RGV2aWNlRGVzY3JpcHRvciAoVXNiSW8sICZEZXZEZXNjKTsNCj4gKyAg ICBpZiAoRUZJX0VSUk9SIChTdGF0dXMpKSB7DQo+ICsgICAgICByZXR1cm4gU3RhdHVzOw0KPiAr ICAgIH0NCj4gKw0KPiArICAgIFN0YXR1cyA9IFVzYklvLT5Vc2JHZXRTdHJpbmdEZXNjcmlwdG9y IChVc2JJbywgMHg0MDksDQo+IERldkRlc2MuU3RyTWFudWZhY3R1cmVyLCAmSGFuZGxlTmFtZSk7 DQo+ICsgICAgaWYgKEVGSV9FUlJPUiAoU3RhdHVzKSkgew0KPiArICAgICAgcmV0dXJuIFN0YXR1 czsNCj4gKyAgICB9DQo+ICsNCj4gKyAgICAqQ29udHJvbGxlck5hbWUgPSBIYW5kbGVOYW1lOw0K PiArDQo+ICsgICAgaWYgKGdOZXR3b3JrQ29tbW9uQ29udHJvbGxlck5hbWVUYWJsZSAhPSBOVUxM KSB7DQo+ICsgICAgICBGcmVlVW5pY29kZVN0cmluZ1RhYmxlIChnTmV0d29ya0NvbW1vbkNvbnRy b2xsZXJOYW1lVGFibGUpOw0KPiArICAgICAgZ05ldHdvcmtDb21tb25Db250cm9sbGVyTmFtZVRh YmxlID0gTlVMTDsNCj4gKyAgICB9DQo+ICsNCj4gKyAgICBTdGF0dXMgPSBBZGRVbmljb2RlU3Ry aW5nMiAoDQo+ICsgICAgICAgICAgICAgICAiZW5nIiwNCj4gKyAgICAgICAgICAgICAgIGdOZXR3 b3JrQ29tbW9uQ29tcG9uZW50TmFtZS5TdXBwb3J0ZWRMYW5ndWFnZXMsDQo+ICsgICAgICAgICAg ICAgICAmZ05ldHdvcmtDb21tb25Db250cm9sbGVyTmFtZVRhYmxlLA0KPiArICAgICAgICAgICAg ICAgSGFuZGxlTmFtZSwNCj4gKyAgICAgICAgICAgICAgIFRSVUUNCj4gKyAgICAgICAgICAgICAg ICk7DQo+ICsgICAgaWYgKEVGSV9FUlJPUiAoU3RhdHVzKSkgew0KPiArICAgICAgcmV0dXJuIFN0 YXR1czsNCj4gKyAgICB9DQo+ICsNCj4gKyAgICBTdGF0dXMgPSBBZGRVbmljb2RlU3RyaW5nMiAo DQo+ICsgICAgICAgICAgICAgICAiZW4iLA0KPiArICAgICAgICAgICAgICAgZ05ldHdvcmtDb21t b25Db21wb25lbnROYW1lMi5TdXBwb3J0ZWRMYW5ndWFnZXMsDQo+ICsgICAgICAgICAgICAgICAm Z05ldHdvcmtDb21tb25Db250cm9sbGVyTmFtZVRhYmxlLA0KPiArICAgICAgICAgICAgICAgSGFu ZGxlTmFtZSwNCj4gKyAgICAgICAgICAgICAgIEZBTFNFDQo+ICsgICAgICAgICAgICAgICApOw0K PiArICAgIGlmIChFRklfRVJST1IgKFN0YXR1cykpIHsNCj4gKyAgICAgIHJldHVybiBTdGF0dXM7 DQo+ICsgICAgfQ0KPiArDQo+ICsgICAgcmV0dXJuIExvb2t1cFVuaWNvZGVTdHJpbmcyICgNCj4g KyAgICAgICAgICAgICBMYW5ndWFnZSwNCj4gKyAgICAgICAgICAgICBUaGlzLT5TdXBwb3J0ZWRM YW5ndWFnZXMsDQo+ICsgICAgICAgICAgICAgZ05ldHdvcmtDb21tb25Db250cm9sbGVyTmFtZVRh YmxlLA0KPiArICAgICAgICAgICAgIENvbnRyb2xsZXJOYW1lLA0KPiArICAgICAgICAgICAgIChC T09MRUFOKShUaGlzID09ICZnTmV0d29ya0NvbW1vbkNvbXBvbmVudE5hbWUpDQo+ICsgICAgICAg ICAgICAgKTsNCj4gKyAgfQ0KPiArDQo+ICsgIHJldHVybiBFRklfVU5TVVBQT1JURUQ7DQo+ICt9 DQo+IGRpZmYgLS1naXQgYS9Vc2JOZXR3b3JrUGtnL05ldHdvcmtDb21tb24vRHJpdmVyQmluZGlu Zy5jDQo+IGIvVXNiTmV0d29ya1BrZy9OZXR3b3JrQ29tbW9uL0RyaXZlckJpbmRpbmcuYw0KPiBu ZXcgZmlsZSBtb2RlIDEwMDY0NA0KPiBpbmRleCAwMDAwMDAwMDAwLi44OTc0NTFjNDE2DQo+IC0t LSAvZGV2L251bGwNCj4gKysrIGIvVXNiTmV0d29ya1BrZy9OZXR3b3JrQ29tbW9uL0RyaXZlckJp bmRpbmcuYw0KPiBAQCAtMCwwICsxLDU4MSBAQA0KPiArLyoqIEBmaWxlDQo+ICsgIFRoaXMgZmls ZSBjb250YWlucyBjb2RlIGZvciBVU0IgbmV0d29yayBiaW5kaW5nIGRyaXZlcg0KPiArDQo+ICsg IENvcHlyaWdodCAoYykgMjAyMiwgQW1lcmljYW4gTWVnYXRyZW5kcyBJbnRlcm5hdGlvbmFsIExM Qy4gQWxsIHJpZ2h0cw0KPiByZXNlcnZlZC48QlI+DQo+ICsgIFNQRFgtTGljZW5zZS1JZGVudGlm aWVyOiBCU0QtMi1DbGF1c2UtUGF0ZW50DQo+ICsqKi8NCj4gKw0KPiArI2luY2x1ZGUgIkRyaXZl ckJpbmRpbmcuaCINCj4gKw0KPiArUFhFX1NXX1VOREkgICpnUHhlID0gTlVMTDsNCj4gK05JQ19E RVZJQ0UgICAqZ0xhbkRldmljZUxpc3RbTUFYX0xBTl9JTlRFUkZBQ0VdOw0KPiArDQo+ICtFRklf RFJJVkVSX0JJTkRJTkdfUFJPVE9DT0wgIGdOZXR3b3JrQ29tbW9uRHJpdmVyQmluZGluZyA9IHsN Cj4gKyAgTmV0d29ya0NvbW1vblN1cHBvcnRlZCwNCj4gKyAgTmV0d29ya0NvbW1vbkRyaXZlclN0 YXJ0LA0KPiArICBOZXR3b3JrQ29tbW9uRHJpdmVyU3RvcCwNCj4gKyAgTkVUV09SS19DT01NT05f RFJJVkVSX1ZFUlNJT04sDQo+ICsgIE5VTEwsDQo+ICsgIE5VTEwNCj4gK307DQo+ICsNCj4gKy8q Kg0KPiArICBDcmVhdGUgTUFDIERldmljZSBQYXRoDQo+ICsNCj4gKyAgQHBhcmFtW2luLCBvdXRd IERldiAgICAgICAgICAgICBBIHBvaW50ZXIgdG8gdGhlIEVGSV9ERVZJQ0VfUEFUSF9QUk9UT0NP TA0KPiBpbnN0YW5jZS4NCj4gKyAgQHBhcmFtW2luXSAgICAgIEJhc2VEZXYgICAgICAgICBBIHBv aW50ZXIgdG8gdGhlDQo+IEVGSV9ERVZJQ0VfUEFUSF9QUk9UT0NPTCBpbnN0YW5jZS4NCj4gKyAg QHBhcmFtW2luXSAgICAgIE5pYyAgICAgICAgICAgICBBIHBvaW50ZXIgdG8gdGhlIE5ldHdvcmsg aW50ZXJmYWNlIGNvbnRyb2xsZXIgZGF0YS4NCj4gKw0KPiArICBAcmV0dmFsIEVGSV9PVVRfT0Zf UkVTT1VSQ0VTICAgIFRoZSBkZXZpY2UgcGF0aCBjb3VsZCBub3QgYmUgY3JlYXRlZA0KPiBzdWNj ZXNzZnVsbHkgZHVlIHRvIGEgbGFjayBvZiByZXNvdXJjZXMuDQo+ICsgIEByZXR2YWwgRUZJX1NV Q0NFU1MgICAgICAgICAgICAgTUFDIGRldmljZSBwYXRoIGNyZWF0ZWQgc3VjY2Vzc2Z1bGx5Lg0K PiArDQo+ICsqKi8NCj4gK0VGSV9TVEFUVVMNCj4gK0NyZWF0ZU1hY0RldmljZVBhdGggKA0KPiAr ICBJTiBPVVQgIEVGSV9ERVZJQ0VfUEFUSF9QUk9UT0NPTCAgKipEZXYsDQo+ICsgIElOICAgICAg RUZJX0RFVklDRV9QQVRIX1BST1RPQ09MICAqQmFzZURldiwNCj4gKyAgSU4gICAgICBOSUNfREFU QSAgICAgICAgICAgICAgICAgICpOaWMNCj4gKyAgKQ0KPiArew0KPiArICBFRklfU1RBVFVTICAg ICAgICAgICAgICAgIFN0YXR1czsNCj4gKyAgTUFDX0FERFJfREVWSUNFX1BBVEggICAgICBNYWNB ZGRyTm9kZTsNCj4gKyAgRUZJX0RFVklDRV9QQVRIX1BST1RPQ09MICAqRW5kTm9kZTsNCj4gKyAg VUlOVDggICAgICAgICAgICAgICAgICAgICAqRGV2aWNlUGF0aDsNCj4gKyAgVUlOVDE2ICAgICAg ICAgICAgICAgICAgICBUb3RhbExlbmd0aDsNCj4gKyAgVUlOVDE2ICAgICAgICAgICAgICAgICAg ICBCYXNlTGVuZ3RoOw0KPiArDQo+ICsgIFplcm9NZW0gKCZNYWNBZGRyTm9kZSwgc2l6ZW9mIChN QUNfQUREUl9ERVZJQ0VfUEFUSCkpOw0KPiArICBDb3B5TWVtICgmTWFjQWRkck5vZGUuTWFjQWRk cmVzcywgJk5pYy0+TWFjQWRkciwgc2l6ZW9mDQo+IChFRklfTUFDX0FERFJFU1MpKTsNCj4gKw0K PiArICBNYWNBZGRyTm9kZS5IZWFkZXIuVHlwZSAgICAgID0gTUVTU0FHSU5HX0RFVklDRV9QQVRI Ow0KPiArICBNYWNBZGRyTm9kZS5IZWFkZXIuU3ViVHlwZSAgID0gTVNHX01BQ19BRERSX0RQOw0K PiArICBNYWNBZGRyTm9kZS5IZWFkZXIuTGVuZ3RoWzBdID0gKFVJTlQ4KXNpemVvZiAoTWFjQWRk ck5vZGUpOw0KPiArICBNYWNBZGRyTm9kZS5IZWFkZXIuTGVuZ3RoWzFdID0gMDsNCj4gKw0KPiAr ICBFbmROb2RlID0gQmFzZURldjsNCj4gKw0KPiArICB3aGlsZSAoIUlzRGV2aWNlUGF0aEVuZCAo RW5kTm9kZSkpIHsNCj4gKyAgICBFbmROb2RlID0gTmV4dERldmljZVBhdGhOb2RlIChFbmROb2Rl KTsNCj4gKyAgfQ0KPiArDQo+ICsgIEJhc2VMZW5ndGggID0gKFVJTlQxNikoKFVJTlROKShFbmRO b2RlKSAtIChVSU5UTikoQmFzZURldikpOw0KPiArICBUb3RhbExlbmd0aCA9IChVSU5UMTYpKEJh c2VMZW5ndGggKyBzaXplb2YgKE1hY0FkZHJOb2RlKSArIHNpemVvZg0KPiAoRUZJX0RFVklDRV9Q QVRIX1BST1RPQ09MKSk7DQo+ICsNCj4gKyAgU3RhdHVzID0gZ0JTLT5BbGxvY2F0ZVBvb2wgKEVm aUJvb3RTZXJ2aWNlc0RhdGEsIFRvdGFsTGVuZ3RoLCAoVk9JRA0KPiAqKikmRGV2aWNlUGF0aCk7 DQo+ICsgIGlmIChFRklfRVJST1IgKFN0YXR1cykpIHsNCj4gKyAgICByZXR1cm4gU3RhdHVzOw0K PiArICB9DQo+ICsNCj4gKyAgKkRldiA9IChFRklfREVWSUNFX1BBVEhfUFJPVE9DT0wgKilEZXZp Y2VQYXRoOw0KPiArICBDb3B5TWVtIChEZXZpY2VQYXRoLCAoQ0hBUjggKilCYXNlRGV2LCBCYXNl TGVuZ3RoKTsNCj4gKyAgRGV2aWNlUGF0aCArPSBCYXNlTGVuZ3RoOw0KPiArICBDb3B5TWVtIChE ZXZpY2VQYXRoLCAoQ0hBUjggKikmTWFjQWRkck5vZGUsIHNpemVvZg0KPiAoTWFjQWRkck5vZGUp KTsNCj4gKyAgRGV2aWNlUGF0aCArPSBzaXplb2YgKE1hY0FkZHJOb2RlKTsNCj4gKyAgQ29weU1l bSAoRGV2aWNlUGF0aCwgKENIQVI4ICopRW5kTm9kZSwgc2l6ZW9mDQo+IChFRklfREVWSUNFX1BB VEhfUFJPVE9DT0wpKTsNCj4gKw0KPiArICByZXR1cm4gRUZJX1NVQ0NFU1M7DQo+ICt9DQo+ICsN Cj4gKy8qKg0KPiArICBOZXR3b3JrIENvbW1vbiBEcml2ZXIgQmluZGluZyBTdXBwb3J0Lg0KPiAr DQo+ICsgIEBwYXJhbVtpbl0gIFRoaXMgICAgICAgICAgICAgICAgICAgIFByb3RvY29sIGluc3Rh bmNlIHBvaW50ZXIuDQo+ICsgIEBwYXJhbVtpbl0gIENvbnRyb2xsZXJIYW5kbGUgICAgICAgIEhh bmRsZSBvZiBkZXZpY2UgdG8gdGVzdC4NCj4gKyAgQHBhcmFtW2luXSAgUmVtYWluaW5nRGV2aWNl UGF0aCAgICAgT3B0aW9uYWwgcGFyYW1ldGVyIHVzZSB0byBwaWNrIGENCj4gc3BlY2lmaWMgY2hp bGQNCj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGV2aWNlIHRvIHN0 YXJ0Lg0KPiArDQo+ICsgIEByZXR2YWwgRUZJX1NVQ0NFU1MgICAgICAgICAgICAgICAgIFRoaXMg ZHJpdmVyIHN1cHBvcnRzIHRoaXMgZGV2aWNlLg0KPiArICBAcmV0dmFsIEVGSV9BTFJFQURZX1NU QVJURUQgICAgICAgICBUaGlzIGRyaXZlciBpcyBhbHJlYWR5IHJ1bm5pbmcgb24gdGhpcw0KPiBk ZXZpY2UuDQo+ICsgIEByZXR2YWwgb3RoZXIgICAgICAgICAgICAgICAgICAgICAgIFRoaXMgZHJp dmVyIGRvZXMgbm90IHN1cHBvcnQgdGhpcyBkZXZpY2UuDQo+ICsNCj4gKyoqLw0KPiArRUZJX1NU QVRVUw0KPiArRUZJQVBJDQo+ICtOZXR3b3JrQ29tbW9uU3VwcG9ydGVkICgNCj4gKyAgSU4gRUZJ X0RSSVZFUl9CSU5ESU5HX1BST1RPQ09MICAqVGhpcywNCj4gKyAgSU4gRUZJX0hBTkRMRSAgICAg ICAgICAgICAgICAgICBDb250cm9sbGVySGFuZGxlLA0KPiArICBJTiBFRklfREVWSUNFX1BBVEhf UFJPVE9DT0wgICAgICpSZW1haW5pbmdEZXZpY2VQYXRoDQo+ICsgICkNCj4gK3sNCj4gKyAgRUZJ X1NUQVRVUyAgICAgICAgICAgICAgICAgICBTdGF0dXM7DQo+ICsgIEVES0lJX1VTQl9FVEhFUk5F VF9QUk9UT0NPTCAgKlVzYkV0aDsNCj4gKw0KPiArICBTdGF0dXMgPSBnQlMtPk9wZW5Qcm90b2Nv bCAoDQo+ICsgICAgICAgICAgICAgICAgICBDb250cm9sbGVySGFuZGxlLA0KPiArICAgICAgICAg ICAgICAgICAgJmdFZGtJSVVzYkV0aFByb3RvY29sR3VpZCwNCj4gKyAgICAgICAgICAgICAgICAg IChWT0lEICoqKSZVc2JFdGgsDQo+ICsgICAgICAgICAgICAgICAgICBUaGlzLT5Ecml2ZXJCaW5k aW5nSGFuZGxlLA0KPiArICAgICAgICAgICAgICAgICAgQ29udHJvbGxlckhhbmRsZSwNCj4gKyAg ICAgICAgICAgICAgICAgIEVGSV9PUEVOX1BST1RPQ09MX0JZX0RSSVZFUg0KPiArICAgICAgICAg ICAgICAgICAgKTsNCj4gKyAgaWYgKEVGSV9FUlJPUiAoU3RhdHVzKSkgew0KPiArICAgIHJldHVy biBTdGF0dXM7DQo+ICsgIH0NCj4gKw0KPiArICBnQlMtPkNsb3NlUHJvdG9jb2wgKA0KPiArICAg ICAgICAgQ29udHJvbGxlckhhbmRsZSwNCj4gKyAgICAgICAgICZnRWRrSUlVc2JFdGhQcm90b2Nv bEd1aWQsDQo+ICsgICAgICAgICBUaGlzLT5Ecml2ZXJCaW5kaW5nSGFuZGxlLA0KPiArICAgICAg ICAgQ29udHJvbGxlckhhbmRsZQ0KPiArICAgICAgICAgKTsNCj4gKyAgcmV0dXJuIFN0YXR1czsN Cj4gK30NCj4gKw0KPiArLyoqDQo+ICsgIE5ldHdvcmsgQ29tbW9uIERyaXZlciBCaW5kaW5nIFN0 YXJ0Lg0KPiArDQo+ICsgIEBwYXJhbVtpbl0gIFRoaXMgICAgICAgICAgICAgICAgICAgIFByb3Rv Y29sIGluc3RhbmNlIHBvaW50ZXIuDQo+ICsgIEBwYXJhbVtpbl0gIENvbnRyb2xsZXJIYW5kbGUg ICAgICAgIEhhbmRsZSBvZiBkZXZpY2UgdG8gYmluZCBkcml2ZXIgdG8uDQo+ICsgIEBwYXJhbVtp bl0gIFJlbWFpbmluZ0RldmljZVBhdGggICAgIE9wdGlvbmFsIHBhcmFtZXRlciB1c2UgdG8gcGlj ayBhDQo+IHNwZWNpZmljIGNoaWxkDQo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIGRldmljZSB0byBzdGFydC4NCj4gKw0KPiArICBAcmV0dmFsIEVGSV9TVUNDRVNTICAg ICAgICAgICAgICAgICBUaGlzIGRyaXZlciBpcyBhZGRlZCB0byBDb250cm9sbGVySGFuZGxlDQo+ ICsgIEByZXR2YWwgRUZJX0RFVklDRV9FUlJPUiAgICAgICAgICAgIFRoaXMgZHJpdmVyIGNvdWxk IG5vdCBiZSBzdGFydGVkIGR1ZSB0byBhDQo+IGRldmljZSBlcnJvcg0KPiArICBAcmV0dmFsIEVG SV9PVVRfT0ZfUkVTT1VSQ0VTICAgICAgICBUaGUgZHJpdmVyIGNvdWxkIG5vdCBpbnN0YWxsDQo+ IHN1Y2Nlc3NmdWxseSBkdWUgdG8gYSBsYWNrIG9mIHJlc291cmNlcy4NCj4gKyAgQHJldHZhbCBv dGhlciAgICAgICAgICAgICAgICAgICAgICAgVGhpcyBkcml2ZXIgZG9lcyBub3Qgc3VwcG9ydCB0 aGlzIGRldmljZQ0KPiArDQo+ICsqKi8NCj4gK0VGSV9TVEFUVVMNCj4gK0VGSUFQSQ0KPiArTmV0 d29ya0NvbW1vbkRyaXZlclN0YXJ0ICgNCj4gKyAgSU4gRUZJX0RSSVZFUl9CSU5ESU5HX1BST1RP Q09MICAqVGhpcywNCj4gKyAgSU4gRUZJX0hBTkRMRSAgICAgICAgICAgICAgICAgICBDb250cm9s bGVySGFuZGxlLA0KPiArICBJTiBFRklfREVWSUNFX1BBVEhfUFJPVE9DT0wgICAgICpSZW1haW5p bmdEZXZpY2VQYXRoDQo+ICsgICkNCj4gK3sNCj4gKyAgRUZJX1NUQVRVUyAgICAgICAgICAgICAg ICAgICBTdGF0dXM7DQo+ICsgIEVGSV9ERVZJQ0VfUEFUSF9QUk9UT0NPTCAgICAgKlVzYkV0aFBh dGg7DQo+ICsgIEVES0lJX1VTQl9FVEhFUk5FVF9QUk9UT0NPTCAgKlVzYkV0aDsNCj4gKyAgRUZJ X01BQ19BRERSRVNTICAgICAgICAgICAgICBNYWNBZGRyZXNzOw0KPiArICBVSU5UTiAgICAgICAg ICAgICAgICAgICAgICAgIEJ1bGtEYXRhU2l6ZTsNCj4gKyAgTklDX0RFVklDRSAgICAgICAgICAg ICAgICAgICAqTmljRGV2aWNlOw0KPiArICBVSU5UOCAgICAgICAgICAgICAgICAgICAgICAgICpU bXBQeGVQb2ludGVyID0gTlVMTDsNCj4gKw0KPiArICBTdGF0dXMgPSBnQlMtPk9wZW5Qcm90b2Nv bCAoDQo+ICsgICAgICAgICAgICAgICAgICBDb250cm9sbGVySGFuZGxlLA0KPiArICAgICAgICAg ICAgICAgICAgJmdFZGtJSVVzYkV0aFByb3RvY29sR3VpZCwNCj4gKyAgICAgICAgICAgICAgICAg IChWT0lEICoqKSZVc2JFdGgsDQo+ICsgICAgICAgICAgICAgICAgICBUaGlzLT5Ecml2ZXJCaW5k aW5nSGFuZGxlLA0KPiArICAgICAgICAgICAgICAgICAgQ29udHJvbGxlckhhbmRsZSwNCj4gKyAg ICAgICAgICAgICAgICAgIEVGSV9PUEVOX1BST1RPQ09MX0JZX0RSSVZFUg0KPiArICAgICAgICAg ICAgICAgICAgKTsNCj4gKyAgaWYgKEVGSV9FUlJPUiAoU3RhdHVzKSkgew0KPiArICAgIHJldHVy biBTdGF0dXM7DQo+ICsgIH0NCj4gKw0KPiArICBTdGF0dXMgPSBnQlMtPk9wZW5Qcm90b2NvbCAo DQo+ICsgICAgICAgICAgICAgICAgICBDb250cm9sbGVySGFuZGxlLA0KPiArICAgICAgICAgICAg ICAgICAgJmdFZmlEZXZpY2VQYXRoUHJvdG9jb2xHdWlkLA0KPiArICAgICAgICAgICAgICAgICAg KFZPSUQgKiopJlVzYkV0aFBhdGgsDQo+ICsgICAgICAgICAgICAgICAgICBUaGlzLT5Ecml2ZXJC aW5kaW5nSGFuZGxlLA0KPiArICAgICAgICAgICAgICAgICAgQ29udHJvbGxlckhhbmRsZSwNCj4g KyAgICAgICAgICAgICAgICAgIEVGSV9PUEVOX1BST1RPQ09MX0JZX0RSSVZFUg0KPiArICAgICAg ICAgICAgICAgICAgKTsNCj4gKw0KPiArICBpZiAoRUZJX0VSUk9SIChTdGF0dXMpKSB7DQo+ICsg ICAgZ0JTLT5DbG9zZVByb3RvY29sICgNCj4gKyAgICAgICAgICAgQ29udHJvbGxlckhhbmRsZSwN Cj4gKyAgICAgICAgICAgJmdFZGtJSVVzYkV0aFByb3RvY29sR3VpZCwNCj4gKyAgICAgICAgICAg VGhpcy0+RHJpdmVyQmluZGluZ0hhbmRsZSwNCj4gKyAgICAgICAgICAgQ29udHJvbGxlckhhbmRs ZQ0KPiArICAgICAgICAgICApOw0KPiArICAgIHJldHVybiBTdGF0dXM7DQo+ICsgIH0NCj4gKw0K PiArICBaZXJvTWVtICgmTWFjQWRkcmVzcywgc2l6ZW9mIChFRklfTUFDX0FERFJFU1MpKTsNCj4g Kw0KPiArICBTdGF0dXMgPSBVc2JFdGgtPlVzYkV0aE1hY0FkZHJlc3MgKFVzYkV0aCwgJk1hY0Fk ZHJlc3MpOw0KPiArICBBU1NFUlRfRUZJX0VSUk9SIChTdGF0dXMpOw0KPiArICBTdGF0dXMgPSBV c2JFdGgtPlVzYkV0aE1heEJ1bGtTaXplIChVc2JFdGgsICZCdWxrRGF0YVNpemUpOw0KPiArDQo+ ICsgIGlmIChFRklfRVJST1IgKFN0YXR1cykpIHsNCj4gKyAgICBnQlMtPkNsb3NlUHJvdG9jb2wg KA0KPiArICAgICAgICAgICBDb250cm9sbGVySGFuZGxlLA0KPiArICAgICAgICAgICAmZ0VmaURl dmljZVBhdGhQcm90b2NvbEd1aWQsDQo+ICsgICAgICAgICAgIFRoaXMtPkRyaXZlckJpbmRpbmdI YW5kbGUsDQo+ICsgICAgICAgICAgIENvbnRyb2xsZXJIYW5kbGUNCj4gKyAgICAgICAgICAgKTsN Cj4gKyAgICBnQlMtPkNsb3NlUHJvdG9jb2wgKA0KPiArICAgICAgICAgICBDb250cm9sbGVySGFu ZGxlLA0KPiArICAgICAgICAgICAmZ0Vka0lJVXNiRXRoUHJvdG9jb2xHdWlkLA0KPiArICAgICAg ICAgICBUaGlzLT5Ecml2ZXJCaW5kaW5nSGFuZGxlLA0KPiArICAgICAgICAgICBDb250cm9sbGVy SGFuZGxlDQo+ICsgICAgICAgICAgICk7DQo+ICsgICAgcmV0dXJuIFN0YXR1czsNCj4gKyAgfQ0K PiArDQo+ICsgIE5pY0RldmljZSA9IEFsbG9jYXRlWmVyb1Bvb2wgKHNpemVvZiAoTklDX0RFVklD RSkpOw0KPiArICBpZiAoIU5pY0RldmljZSkgew0KPiArICAgIGdCUy0+Q2xvc2VQcm90b2NvbCAo DQo+ICsgICAgICAgICAgIENvbnRyb2xsZXJIYW5kbGUsDQo+ICsgICAgICAgICAgICZnRWZpRGV2 aWNlUGF0aFByb3RvY29sR3VpZCwNCj4gKyAgICAgICAgICAgVGhpcy0+RHJpdmVyQmluZGluZ0hh bmRsZSwNCj4gKyAgICAgICAgICAgQ29udHJvbGxlckhhbmRsZQ0KPiArICAgICAgICAgICApOw0K PiArICAgIGdCUy0+Q2xvc2VQcm90b2NvbCAoDQo+ICsgICAgICAgICAgIENvbnRyb2xsZXJIYW5k bGUsDQo+ICsgICAgICAgICAgICZnRWRrSUlVc2JFdGhQcm90b2NvbEd1aWQsDQo+ICsgICAgICAg ICAgIFRoaXMtPkRyaXZlckJpbmRpbmdIYW5kbGUsDQo+ICsgICAgICAgICAgIENvbnRyb2xsZXJI YW5kbGUNCj4gKyAgICAgICAgICAgKTsNCj4gKyAgICByZXR1cm4gRUZJX09VVF9PRl9SRVNPVVJD RVM7DQo+ICsgIH0NCj4gKw0KPiArICAvLyBmb3IgYWxpZ25tZW50IGFkanVzdG1lbnQNCj4gKyAg aWYgKGdQeGUgPT0gTlVMTCkgew0KPiArICAgIFRtcFB4ZVBvaW50ZXIgPSBBbGxvY2F0ZVplcm9Q b29sIChzaXplb2YgKFBYRV9TV19VTkRJKSArIDE2KTsNCj4gKyAgICBpZiAoIVRtcFB4ZVBvaW50 ZXIpIHsNCj4gKyAgICAgIGlmIChOaWNEZXZpY2UgIT0gTlVMTCkgew0KPiArICAgICAgICBnQlMt PkZyZWVQb29sIChOaWNEZXZpY2UpOw0KPiArICAgICAgfQ0KPiArDQo+ICsgICAgICBnQlMtPkNs b3NlUHJvdG9jb2wgKA0KPiArICAgICAgICAgICAgIENvbnRyb2xsZXJIYW5kbGUsDQo+ICsgICAg ICAgICAgICAgJmdFZmlEZXZpY2VQYXRoUHJvdG9jb2xHdWlkLA0KPiArICAgICAgICAgICAgIFRo aXMtPkRyaXZlckJpbmRpbmdIYW5kbGUsDQo+ICsgICAgICAgICAgICAgQ29udHJvbGxlckhhbmRs ZQ0KPiArICAgICAgICAgICAgICk7DQo+ICsgICAgICBnQlMtPkNsb3NlUHJvdG9jb2wgKA0KPiAr ICAgICAgICAgICAgIENvbnRyb2xsZXJIYW5kbGUsDQo+ICsgICAgICAgICAgICAgJmdFZGtJSVVz YkV0aFByb3RvY29sR3VpZCwNCj4gKyAgICAgICAgICAgICBUaGlzLT5Ecml2ZXJCaW5kaW5nSGFu ZGxlLA0KPiArICAgICAgICAgICAgIENvbnRyb2xsZXJIYW5kbGUNCj4gKyAgICAgICAgICAgICAp Ow0KPiArDQo+ICsgICAgICByZXR1cm4gRUZJX09VVF9PRl9SRVNPVVJDRVM7DQo+ICsgICAgfSBl bHNlIHsNCj4gKyAgICAgIC8vIGNoZWNrIGZvciBwYXJhZ3JhcGggYWxpZ25tZW50IGhlcmUNCj4g KyAgICAgIGlmICgoKFVJTlROKVRtcFB4ZVBvaW50ZXIgJiAweDBGKSAhPSAwKSB7DQo+ICsgICAg ICAgIGdQeGUgPSAoUFhFX1NXX1VOREkgKikoVG1wUHhlUG9pbnRlciArIDgpOw0KPiArICAgICAg fSBlbHNlIHsNCj4gKyAgICAgICAgZ1B4ZSA9IChQWEVfU1dfVU5ESSAqKVRtcFB4ZVBvaW50ZXI7 DQo+ICsgICAgICB9DQo+ICsNCj4gKyAgICAgIGlmICghZ1B4ZSkgew0KPiArICAgICAgICBpZiAo TmljRGV2aWNlICE9IE5VTEwpIHsNCj4gKyAgICAgICAgICBnQlMtPkZyZWVQb29sIChOaWNEZXZp Y2UpOw0KPiArICAgICAgICB9DQo+ICsNCj4gKyAgICAgICAgZ0JTLT5DbG9zZVByb3RvY29sICgN Cj4gKyAgICAgICAgICAgICAgIENvbnRyb2xsZXJIYW5kbGUsDQo+ICsgICAgICAgICAgICAgICAm Z0VmaURldmljZVBhdGhQcm90b2NvbEd1aWQsDQo+ICsgICAgICAgICAgICAgICBUaGlzLT5Ecml2 ZXJCaW5kaW5nSGFuZGxlLA0KPiArICAgICAgICAgICAgICAgQ29udHJvbGxlckhhbmRsZQ0KPiAr ICAgICAgICAgICAgICAgKTsNCj4gKyAgICAgICAgZ0JTLT5DbG9zZVByb3RvY29sICgNCj4gKyAg ICAgICAgICAgICAgIENvbnRyb2xsZXJIYW5kbGUsDQo+ICsgICAgICAgICAgICAgICAmZ0Vka0lJ VXNiRXRoUHJvdG9jb2xHdWlkLA0KPiArICAgICAgICAgICAgICAgVGhpcy0+RHJpdmVyQmluZGlu Z0hhbmRsZSwNCj4gKyAgICAgICAgICAgICAgIENvbnRyb2xsZXJIYW5kbGUNCj4gKyAgICAgICAg ICAgICAgICk7DQo+ICsgICAgICAgIHJldHVybiBFRklfT1VUX09GX1JFU09VUkNFUzsNCj4gKyAg ICAgIH0NCj4gKw0KPiArICAgICAgUHhlU3RydWN0SW5pdCAoZ1B4ZSk7DQo+ICsgICAgfQ0KPiAr ICB9DQo+ICsNCj4gKyAgTmljRGV2aWNlLT5OaWlQcm90b2NvbC5JZCAgICA9IChVSU5UNjQpKFVJ TlROKShnUHhlKTsNCj4gKyAgTmljRGV2aWNlLT5OaWlQcm90b2NvbC5JZk51bSA9IGdQeGUtPklG Y250IHwgZ1B4ZS0+SUZjbnRFeHQgPDwgODsNCj4gKw0KPiArICBVcGRhdGVOaWNOdW0gKCZOaWNE ZXZpY2UtPk5pY0luZm8sIGdQeGUpOw0KPiArDQo+ICsgIE5pY0RldmljZS0+TmljSW5mby5TaWdu YXR1cmUgPSBOSUNfREFUQV9TSUdOQVRVUkU7DQo+ICsNCj4gKyAgTmljRGV2aWNlLT5OaWNJbmZv LlVzYkV0aCAgICAgICAgID0gVXNiRXRoOw0KPiArICBOaWNEZXZpY2UtPk5pY0luZm8uTWF4U2Vn bWVudFNpemUgPSAoVUlOVDE2KUJ1bGtEYXRhU2l6ZTsNCj4gKyAgTmljRGV2aWNlLT5OaWNJbmZv LkNhYmxlRGV0ZWN0ICAgID0gMDsNCj4gKw0KPiArICBDb3B5TWVtICgoQ0hBUjggKikmKE5pY0Rl dmljZS0+TmljSW5mby5NYWNBZGRyKSwgKENIQVI4DQo+ICopJk1hY0FkZHJlc3MsIHNpemVvZiAo TWFjQWRkcmVzcykpOw0KPiArDQo+ICsgIE5pY0RldmljZS0+TmljSW5mby5UeEJ1ZmZlckNvdW50 ID0gMDsNCj4gKw0KPiArICBpZiAoTmljRGV2aWNlLT5OaWlQcm90b2NvbC5JZk51bSA8IE1BWF9M QU5fSU5URVJGQUNFKSB7DQo+ICsgICAgZ0xhbkRldmljZUxpc3RbTmljRGV2aWNlLT5OaWlQcm90 b2NvbC5JZk51bV0gPSBOaWNEZXZpY2U7DQo+ICsgIH0gZWxzZSB7DQo+ICsgICAgZ0JTLT5DbG9z ZVByb3RvY29sICgNCj4gKyAgICAgICAgICAgQ29udHJvbGxlckhhbmRsZSwNCj4gKyAgICAgICAg ICAgJmdFZmlEZXZpY2VQYXRoUHJvdG9jb2xHdWlkLA0KPiArICAgICAgICAgICBUaGlzLT5Ecml2 ZXJCaW5kaW5nSGFuZGxlLA0KPiArICAgICAgICAgICBDb250cm9sbGVySGFuZGxlDQo+ICsgICAg ICAgICAgICk7DQo+ICsgICAgZ0JTLT5DbG9zZVByb3RvY29sICgNCj4gKyAgICAgICAgICAgQ29u dHJvbGxlckhhbmRsZSwNCj4gKyAgICAgICAgICAgJmdFZGtJSVVzYkV0aFByb3RvY29sR3VpZCwN Cj4gKyAgICAgICAgICAgVGhpcy0+RHJpdmVyQmluZGluZ0hhbmRsZSwNCj4gKyAgICAgICAgICAg Q29udHJvbGxlckhhbmRsZQ0KPiArICAgICAgICAgICApOw0KPiArDQo+ICsgICAgaWYgKFRtcFB4 ZVBvaW50ZXIgIT0gTlVMTCkgew0KPiArICAgICAgZ0JTLT5GcmVlUG9vbCAoVG1wUHhlUG9pbnRl cik7DQo+ICsgICAgfQ0KPiArDQo+ICsgICAgaWYgKE5pY0RldmljZSAhPSBOVUxMKSB7DQo+ICsg ICAgICBnQlMtPkZyZWVQb29sIChOaWNEZXZpY2UpOw0KPiArICAgIH0NCj4gKw0KPiArICAgIHJl dHVybiBFRklfREVWSUNFX0VSUk9SOw0KPiArICB9DQo+ICsNCj4gKyAgU3RhdHVzID0gQ3JlYXRl TWFjRGV2aWNlUGF0aCAoDQo+ICsgICAgICAgICAgICAgJk5pY0RldmljZS0+RGV2UGF0aCwNCj4g KyAgICAgICAgICAgICBVc2JFdGhQYXRoLA0KPiArICAgICAgICAgICAgICZOaWNEZXZpY2UtPk5p Y0luZm8NCj4gKyAgICAgICAgICAgICApOw0KPiArDQo+ICsgIGlmIChFRklfRVJST1IgKFN0YXR1 cykpIHsNCj4gKyAgICBVcGRhdGVOaWNOdW0gKE5VTEwsIGdQeGUpOw0KPiArICAgIGlmIChUbXBQ eGVQb2ludGVyICE9IE5VTEwpIHsNCj4gKyAgICAgIGdCUy0+RnJlZVBvb2wgKFRtcFB4ZVBvaW50 ZXIpOw0KPiArICAgIH0NCj4gKyAgfQ0KPiArDQo+ICsgIE5pY0RldmljZS0+U2lnbmF0dXJlICAg ICAgICAgICAgICAgICA9IFVORElfREVWX1NJR05BVFVSRTsNCj4gKyAgTmljRGV2aWNlLT5OaWlQ cm90b2NvbC5SZXZpc2lvbiAgICAgID0NCj4gRUZJX05FVFdPUktfSU5URVJGQUNFX0lERU5USUZJ RVJfUFJPVE9DT0xfUkVWSVNJT047DQo+ICsgIE5pY0RldmljZS0+TmlpUHJvdG9jb2wuVHlwZSAg ICAgICAgICA9IEVmaU5ldHdvcmtJbnRlcmZhY2VVbmRpOw0KPiArICBOaWNEZXZpY2UtPk5paVBy b3RvY29sLk1ham9yVmVyICAgICAgPSBQWEVfUk9NSURfTUFKT1JWRVI7DQo+ICsgIE5pY0Rldmlj ZS0+TmlpUHJvdG9jb2wuTWlub3JWZXIgICAgICA9IFBYRV9ST01JRF9NSU5PUlZFUjsNCj4gKyAg TmljRGV2aWNlLT5OaWlQcm90b2NvbC5JbWFnZVNpemUgICAgID0gMDsNCj4gKyAgTmljRGV2aWNl LT5OaWlQcm90b2NvbC5JbWFnZUFkZHIgICAgID0gMDsNCj4gKyAgTmljRGV2aWNlLT5OaWlQcm90 b2NvbC5JcHY2U3VwcG9ydGVkID0gVFJVRTsNCj4gKw0KPiArICBOaWNEZXZpY2UtPk5paVByb3Rv Y29sLlN0cmluZ0lkWzBdID0gJ1UnOw0KPiArICBOaWNEZXZpY2UtPk5paVByb3RvY29sLlN0cmlu Z0lkWzFdID0gJ04nOw0KPiArICBOaWNEZXZpY2UtPk5paVByb3RvY29sLlN0cmluZ0lkWzJdID0g J0QnOw0KPiArICBOaWNEZXZpY2UtPk5paVByb3RvY29sLlN0cmluZ0lkWzNdID0gJ0knOw0KPiAr ICBOaWNEZXZpY2UtPkRldmljZUhhbmRsZSAgICAgICAgICAgID0gTlVMTDsNCj4gKw0KPiArICBa ZXJvTWVtICgmTmljRGV2aWNlLT5OaWNJbmZvLlJlcXVlc3QsIHNpemVvZg0KPiAoRUZJX1VTQl9E RVZJQ0VfUkVRVUVTVCkpOw0KPiArDQo+ICsgIFN0YXR1cyA9IFVzYkV0aC0+VXNiRXRoSW50ZXJy dXB0IChVc2JFdGgsIFRSVUUsDQo+IE5FVFdPUktfQ09NTU9OX1BPTExJTkdfSU5URVJWQUwsICZO aWNEZXZpY2UtPk5pY0luZm8uUmVxdWVzdCk7DQo+ICsgIEFTU0VSVF9FRklfRVJST1IgKFN0YXR1 cyk7DQo+ICsNCj4gKyAgU3RhdHVzID0gZ0JTLT5JbnN0YWxsTXVsdGlwbGVQcm90b2NvbEludGVy ZmFjZXMgKA0KPiArICAgICAgICAgICAgICAgICAgJk5pY0RldmljZS0+RGV2aWNlSGFuZGxlLA0K PiArICAgICAgICAgICAgICAgICAgJmdFZmlOZXR3b3JrSW50ZXJmYWNlSWRlbnRpZmllclByb3Rv Y29sR3VpZF8zMSwNCj4gKyAgICAgICAgICAgICAgICAgICZOaWNEZXZpY2UtPk5paVByb3RvY29s LA0KPiArICAgICAgICAgICAgICAgICAgJmdFZmlEZXZpY2VQYXRoUHJvdG9jb2xHdWlkLA0KPiAr ICAgICAgICAgICAgICAgICAgTmljRGV2aWNlLT5EZXZQYXRoLA0KPiArICAgICAgICAgICAgICAg ICAgTlVMTA0KPiArICAgICAgICAgICAgICAgICAgKTsNCj4gKw0KPiArICBpZiAoRUZJX0VSUk9S IChTdGF0dXMpKSB7DQo+ICsgICAgaWYgKE5pY0RldmljZS0+TmlpUHJvdG9jb2wuSWZOdW0gPCBN QVhfTEFOX0lOVEVSRkFDRSkgew0KPiArICAgICAgZ0xhbkRldmljZUxpc3RbTmljRGV2aWNlLT5O aWlQcm90b2NvbC5JZk51bV0gPSBOVUxMOw0KPiArICAgIH0NCj4gKw0KPiArICAgIGdCUy0+Q2xv c2VQcm90b2NvbCAoDQo+ICsgICAgICAgICAgIENvbnRyb2xsZXJIYW5kbGUsDQo+ICsgICAgICAg ICAgICZnRWZpRGV2aWNlUGF0aFByb3RvY29sR3VpZCwNCj4gKyAgICAgICAgICAgVGhpcy0+RHJp dmVyQmluZGluZ0hhbmRsZSwNCj4gKyAgICAgICAgICAgQ29udHJvbGxlckhhbmRsZQ0KPiArICAg ICAgICAgICApOw0KPiArICAgIGdCUy0+Q2xvc2VQcm90b2NvbCAoDQo+ICsgICAgICAgICAgIENv bnRyb2xsZXJIYW5kbGUsDQo+ICsgICAgICAgICAgICZnRWRrSUlVc2JFdGhQcm90b2NvbEd1aWQs DQo+ICsgICAgICAgICAgIFRoaXMtPkRyaXZlckJpbmRpbmdIYW5kbGUsDQo+ICsgICAgICAgICAg IENvbnRyb2xsZXJIYW5kbGUNCj4gKyAgICAgICAgICAgKTsNCj4gKw0KPiArICAgIGlmIChUbXBQ eGVQb2ludGVyICE9IE5VTEwpIHsNCj4gKyAgICAgIGdCUy0+RnJlZVBvb2wgKFRtcFB4ZVBvaW50 ZXIpOw0KPiArICAgIH0NCj4gKw0KPiArICAgIGlmIChOaWNEZXZpY2UtPkRldlBhdGggIT0gTlVM TCkgew0KPiArICAgICAgZ0JTLT5GcmVlUG9vbCAoTmljRGV2aWNlLT5EZXZQYXRoKTsNCj4gKyAg ICB9DQo+ICsNCj4gKyAgICBpZiAoTmljRGV2aWNlICE9IE5VTEwpIHsNCj4gKyAgICAgIGdCUy0+ RnJlZVBvb2wgKE5pY0RldmljZSk7DQo+ICsgICAgfQ0KPiArDQo+ICsgICAgcmV0dXJuIEVGSV9E RVZJQ0VfRVJST1I7DQo+ICsgIH0NCj4gKw0KPiArICBTdGF0dXMgPSBnQlMtPk9wZW5Qcm90b2Nv bCAoDQo+ICsgICAgICAgICAgICAgICAgICBDb250cm9sbGVySGFuZGxlLA0KPiArICAgICAgICAg ICAgICAgICAgJmdFZGtJSVVzYkV0aFByb3RvY29sR3VpZCwNCj4gKyAgICAgICAgICAgICAgICAg IChWT0lEICoqKSZVc2JFdGgsDQo+ICsgICAgICAgICAgICAgICAgICBUaGlzLT5Ecml2ZXJCaW5k aW5nSGFuZGxlLA0KPiArICAgICAgICAgICAgICAgICAgTmljRGV2aWNlLT5EZXZpY2VIYW5kbGUs DQo+ICsgICAgICAgICAgICAgICAgICBFRklfT1BFTl9QUk9UT0NPTF9CWV9DSElMRF9DT05UUk9M TEVSDQo+ICsgICAgICAgICAgICAgICAgICApOw0KPiArDQo+ICsgIHJldHVybiBTdGF0dXM7DQo+ ICt9DQo+ICsNCj4gKy8qKg0KPiArICBOZXR3b3JrIENvbW1vbiBEcml2ZXIgQmluZGluZyBTdG9w Lg0KPiArDQo+ICsgIEBwYXJhbVtpbl0gIFRoaXMgICAgICAgICAgICAgICAgICBQcm90b2NvbCBp bnN0YW5jZSBwb2ludGVyLg0KPiArICBAcGFyYW1baW5dICBDb250cm9sbGVySGFuZGxlICAgICAg SGFuZGxlIG9mIGRldmljZSB0byBzdG9wIGRyaXZlciBvbg0KPiArICBAcGFyYW1baW5dICBOdW1i ZXJPZkNoaWxkcmVuICAgICAgTnVtYmVyIG9mIEhhbmRsZXMgaW4NCj4gQ2hpbGRIYW5kbGVCdWZm ZXIuIElmIG51bWJlciBvZg0KPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg Y2hpbGRyZW4gaXMgemVybyBzdG9wIHRoZSBlbnRpcmUgYnVzIGRyaXZlci4NCj4gKyAgQHBhcmFt W2luXSAgQ2hpbGRIYW5kbGVCdWZmZXIgICAgIExpc3Qgb2YgQ2hpbGQgSGFuZGxlcyB0byBTdG9w Lg0KPiArDQo+ICsgIEByZXR2YWwgRUZJX1NVQ0NFU1MgICAgICAgICAgICAgICBUaGlzIGRyaXZl ciBpcyByZW1vdmVkIENvbnRyb2xsZXJIYW5kbGUNCj4gKyAgQHJldHZhbCBvdGhlciAgICAgICAg ICAgICAgICAgICAgIFRoaXMgZHJpdmVyIHdhcyBub3QgcmVtb3ZlZCBmcm9tIHRoaXMgZGV2aWNl DQo+ICsNCj4gKyoqLw0KPiArRUZJX1NUQVRVUw0KPiArRUZJQVBJDQo+ICtOZXR3b3JrQ29tbW9u RHJpdmVyU3RvcCAoDQo+ICsgIElOICBFRklfRFJJVkVSX0JJTkRJTkdfUFJPVE9DT0wgICpUaGlz LA0KPiArICBJTiAgRUZJX0hBTkRMRSAgICAgICAgICAgICAgICAgICBDb250cm9sbGVySGFuZGxl LA0KPiArICBJTiAgVUlOVE4gICAgICAgICAgICAgICAgICAgICAgICBOdW1iZXJPZkNoaWxkcmVu LA0KPiArICBJTiAgRUZJX0hBTkRMRSAgICAgICAgICAgICAgICAgICAqQ2hpbGRIYW5kbGVCdWZm ZXINCj4gKyAgKQ0KPiArew0KPiArICBFRklfU1RBVFVTICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgU3RhdHVzOw0KPiArICBCT09MRUFOICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgQWxsQ2hpbGRyZW5TdG9wcGVkOw0KPiArICBVSU5UTiAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgSW5kZXg7DQo+ICsgIEVES0lJX1VTQl9FVEhFUk5FVF9QUk9U T0NPTCAgICAgICAgICAgICAgICAqVXNiRXRoOw0KPiArICBOSUNfREVWSUNFICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgKk5pY0RldmljZTsNCj4gKyAgRUZJX05FVFdPUktfSU5URVJG QUNFX0lERU5USUZJRVJfUFJPVE9DT0wgICpOaWlQcm90b2NvbDsNCj4gKw0KPiArICBpZiAoTnVt YmVyT2ZDaGlsZHJlbiA9PSAwKSB7DQo+ICsgICAgU3RhdHVzID0gZ0JTLT5PcGVuUHJvdG9jb2wg KA0KPiArICAgICAgICAgICAgICAgICAgICBDb250cm9sbGVySGFuZGxlLA0KPiArICAgICAgICAg ICAgICAgICAgICAmZ0VmaU5ldHdvcmtJbnRlcmZhY2VJZGVudGlmaWVyUHJvdG9jb2xHdWlkXzMx LA0KPiArICAgICAgICAgICAgICAgICAgICAoVk9JRCAqKikmTmlpUHJvdG9jb2wsDQo+ICsgICAg ICAgICAgICAgICAgICAgIFRoaXMtPkRyaXZlckJpbmRpbmdIYW5kbGUsDQo+ICsgICAgICAgICAg ICAgICAgICAgIENvbnRyb2xsZXJIYW5kbGUsDQo+ICsgICAgICAgICAgICAgICAgICAgIEVGSV9P UEVOX1BST1RPQ09MX0dFVF9QUk9UT0NPTA0KPiArICAgICAgICAgICAgICAgICAgICApOw0KPiAr DQo+ICsgICAgaWYgKEVGSV9FUlJPUiAoU3RhdHVzKSkgew0KPiArICAgICAgZ0JTLT5DbG9zZVBy b3RvY29sICgNCj4gKyAgICAgICAgICAgICBDb250cm9sbGVySGFuZGxlLA0KPiArICAgICAgICAg ICAgICZnRWZpRGV2aWNlUGF0aFByb3RvY29sR3VpZCwNCj4gKyAgICAgICAgICAgICBUaGlzLT5E cml2ZXJCaW5kaW5nSGFuZGxlLA0KPiArICAgICAgICAgICAgIENvbnRyb2xsZXJIYW5kbGUNCj4g KyAgICAgICAgICAgICApOw0KPiArICAgICAgZ0JTLT5DbG9zZVByb3RvY29sICgNCj4gKyAgICAg ICAgICAgICBDb250cm9sbGVySGFuZGxlLA0KPiArICAgICAgICAgICAgICZnRWRrSUlVc2JFdGhQ cm90b2NvbEd1aWQsDQo+ICsgICAgICAgICAgICAgVGhpcy0+RHJpdmVyQmluZGluZ0hhbmRsZSwN Cj4gKyAgICAgICAgICAgICBDb250cm9sbGVySGFuZGxlDQo+ICsgICAgICAgICAgICAgKTsNCj4g KyAgICAgIHJldHVybiBFRklfU1VDQ0VTUzsNCj4gKyAgICB9DQo+ICsNCj4gKyAgICBOaWNEZXZp Y2UgPSBVTkRJX0RFVl9GUk9NX1RISVMgKE5paVByb3RvY29sKTsNCj4gKyAgICBTdGF0dXMgICAg PSBnQlMtPlVuaW5zdGFsbE11bHRpcGxlUHJvdG9jb2xJbnRlcmZhY2VzICgNCj4gKyAgICAgICAg ICAgICAgICAgICAgICAgQ29udHJvbGxlckhhbmRsZSwNCj4gKyAgICAgICAgICAgICAgICAgICAg ICAgJmdFZmlOZXR3b3JrSW50ZXJmYWNlSWRlbnRpZmllclByb3RvY29sR3VpZF8zMSwNCj4gKyAg ICAgICAgICAgICAgICAgICAgICAgJk5pY0RldmljZS0+TmlpUHJvdG9jb2wsDQo+ICsgICAgICAg ICAgICAgICAgICAgICAgICZnRWZpRGV2aWNlUGF0aFByb3RvY29sR3VpZCwNCj4gKyAgICAgICAg ICAgICAgICAgICAgICAgTmljRGV2aWNlLT5EZXZQYXRoLA0KPiArICAgICAgICAgICAgICAgICAg ICAgICBOVUxMDQo+ICsgICAgICAgICAgICAgICAgICAgICAgICk7DQo+ICsgICAgaWYgKEVGSV9F UlJPUiAoU3RhdHVzKSkgew0KPiArICAgICAgcmV0dXJuIFN0YXR1czsNCj4gKyAgICB9DQo+ICsN Cj4gKyAgICBnQlMtPkZyZWVQb29sIChOaWNEZXZpY2UtPkRldlBhdGgpOw0KPiArICAgIGdCUy0+ RnJlZVBvb2wgKE5pY0RldmljZSk7DQo+ICsNCj4gKyAgICBnQlMtPkNsb3NlUHJvdG9jb2wgKA0K PiArICAgICAgICAgICBDb250cm9sbGVySGFuZGxlLA0KPiArICAgICAgICAgICAmZ0VmaURldmlj ZVBhdGhQcm90b2NvbEd1aWQsDQo+ICsgICAgICAgICAgIFRoaXMtPkRyaXZlckJpbmRpbmdIYW5k bGUsDQo+ICsgICAgICAgICAgIENvbnRyb2xsZXJIYW5kbGUNCj4gKyAgICAgICAgICAgKTsNCj4g KyAgICBnQlMtPkNsb3NlUHJvdG9jb2wgKA0KPiArICAgICAgICAgICBDb250cm9sbGVySGFuZGxl LA0KPiArICAgICAgICAgICAmZ0Vka0lJVXNiRXRoUHJvdG9jb2xHdWlkLA0KPiArICAgICAgICAg ICBUaGlzLT5Ecml2ZXJCaW5kaW5nSGFuZGxlLA0KPiArICAgICAgICAgICBDb250cm9sbGVySGFu ZGxlDQo+ICsgICAgICAgICAgICk7DQo+ICsgICAgcmV0dXJuIEVGSV9TVUNDRVNTOw0KPiArICB9 DQo+ICsNCj4gKyAgQWxsQ2hpbGRyZW5TdG9wcGVkID0gVFJVRTsNCj4gKw0KPiArICBmb3IgKElu ZGV4ID0gMDsgSW5kZXggPCBOdW1iZXJPZkNoaWxkcmVuOyBJbmRleCsrKSB7DQo+ICsgICAgU3Rh dHVzID0gZ0JTLT5PcGVuUHJvdG9jb2wgKA0KPiArICAgICAgICAgICAgICAgICAgICBDaGlsZEhh bmRsZUJ1ZmZlcltJbmRleF0sDQo+ICsgICAgICAgICAgICAgICAgICAgICZnRWZpTmV0d29ya0lu dGVyZmFjZUlkZW50aWZpZXJQcm90b2NvbEd1aWRfMzEsDQo+ICsgICAgICAgICAgICAgICAgICAg IChWT0lEICoqKSZOaWlQcm90b2NvbCwNCj4gKyAgICAgICAgICAgICAgICAgICAgVGhpcy0+RHJp dmVyQmluZGluZ0hhbmRsZSwNCj4gKyAgICAgICAgICAgICAgICAgICAgQ29udHJvbGxlckhhbmRs ZSwNCj4gKyAgICAgICAgICAgICAgICAgICAgRUZJX09QRU5fUFJPVE9DT0xfR0VUX1BST1RPQ09M DQo+ICsgICAgICAgICAgICAgICAgICAgICk7DQo+ICsgICAgaWYgKEVGSV9FUlJPUiAoU3RhdHVz KSkgew0KPiArICAgICAgQWxsQ2hpbGRyZW5TdG9wcGVkID0gRkFMU0U7DQo+ICsgICAgICBjb250 aW51ZTsNCj4gKyAgICB9DQo+ICsNCj4gKyAgICBOaWNEZXZpY2UgPSBVTkRJX0RFVl9GUk9NX1RI SVMgKE5paVByb3RvY29sKTsNCj4gKw0KPiArICAgIGdCUy0+Q2xvc2VQcm90b2NvbCAoDQo+ICsg ICAgICAgICAgIENvbnRyb2xsZXJIYW5kbGUsDQo+ICsgICAgICAgICAgICZnRWRrSUlVc2JFdGhQ cm90b2NvbEd1aWQsDQo+ICsgICAgICAgICAgIFRoaXMtPkRyaXZlckJpbmRpbmdIYW5kbGUsDQo+ ICsgICAgICAgICAgIENoaWxkSGFuZGxlQnVmZmVyW0luZGV4XQ0KPiArICAgICAgICAgICApOw0K PiArDQo+ICsgICAgU3RhdHVzID0gZ0JTLT5Vbmluc3RhbGxNdWx0aXBsZVByb3RvY29sSW50ZXJm YWNlcyAoDQo+ICsgICAgICAgICAgICAgICAgICAgIENoaWxkSGFuZGxlQnVmZmVyW0luZGV4XSwN Cj4gKyAgICAgICAgICAgICAgICAgICAgJmdFZmlOZXR3b3JrSW50ZXJmYWNlSWRlbnRpZmllclBy b3RvY29sR3VpZF8zMSwNCj4gKyAgICAgICAgICAgICAgICAgICAgJk5pY0RldmljZS0+TmlpUHJv dG9jb2wsDQo+ICsgICAgICAgICAgICAgICAgICAgICZnRWZpRGV2aWNlUGF0aFByb3RvY29sR3Vp ZCwNCj4gKyAgICAgICAgICAgICAgICAgICAgTmljRGV2aWNlLT5EZXZQYXRoLA0KPiArICAgICAg ICAgICAgICAgICAgICBOVUxMDQo+ICsgICAgICAgICAgICAgICAgICAgICk7DQo+ICsgICAgaWYg KEVGSV9FUlJPUiAoU3RhdHVzKSkgew0KPiArICAgICAgU3RhdHVzID0gZ0JTLT5PcGVuUHJvdG9j b2wgKA0KPiArICAgICAgICAgICAgICAgICAgICAgIENvbnRyb2xsZXJIYW5kbGUsDQo+ICsgICAg ICAgICAgICAgICAgICAgICAgJmdFZGtJSVVzYkV0aFByb3RvY29sR3VpZCwNCj4gKyAgICAgICAg ICAgICAgICAgICAgICAoVk9JRCAqKikmVXNiRXRoLA0KPiArICAgICAgICAgICAgICAgICAgICAg IFRoaXMtPkRyaXZlckJpbmRpbmdIYW5kbGUsDQo+ICsgICAgICAgICAgICAgICAgICAgICAgQ2hp bGRIYW5kbGVCdWZmZXJbSW5kZXhdLA0KPiArICAgICAgICAgICAgICAgICAgICAgIEVGSV9PUEVO X1BST1RPQ09MX0JZX0NISUxEX0NPTlRST0xMRVINCj4gKyAgICAgICAgICAgICAgICAgICAgICAp Ow0KPiArICAgIH0gZWxzZSB7DQo+ICsgICAgICBnQlMtPkZyZWVQb29sIChOaWNEZXZpY2UtPkRl dlBhdGgpOw0KPiArICAgICAgZ0JTLT5GcmVlUG9vbCAoTmljRGV2aWNlKTsNCj4gKyAgICB9DQo+ ICsgIH0NCj4gKw0KPiArICBpZiAoIUFsbENoaWxkcmVuU3RvcHBlZCkgew0KPiArICAgIHJldHVy biBFRklfREVWSUNFX0VSUk9SOw0KPiArICB9DQo+ICsNCj4gKyAgcmV0dXJuIFN0YXR1czsNCj4g K30NCj4gKw0KPiArLyoqDQo+ICsgIEVudHJ5cG9pbnQgb2YgTmV0d29yayBDb21tb24gRHJpdmVy Lg0KPiArDQo+ICsgIFRoaXMgZnVuY3Rpb24gaXMgdGhlIGVudHJ5cG9pbnQgb2YgTmV0d29yayBD b21tb24gRHJpdmVyLiBJdCBpbnN0YWxscyBEcml2ZXINCj4gQmluZGluZw0KPiArICBQcm90b2Nv bHMgdG9nZXRoZXIgd2l0aCBDb21wb25lbnQgTmFtZSBQcm90b2NvbHMuDQo+ICsNCj4gKyAgQHBh cmFtW2luXSAgSW1hZ2VIYW5kbGUgICAgICAgVGhlIGZpcm13YXJlIGFsbG9jYXRlZCBoYW5kbGUg Zm9yIHRoZSBFRkkNCj4gaW1hZ2UuDQo+ICsgIEBwYXJhbVtpbl0gIFN5c3RlbVRhYmxlICAgICAg IEEgcG9pbnRlciB0byB0aGUgRUZJIFN5c3RlbSBUYWJsZS4NCj4gKw0KPiArICBAcmV0dmFsIEVG SV9TVUNDRVNTICAgICAgICAgICBUaGUgZW50cnkgcG9pbnQgaXMgZXhlY3V0ZWQgc3VjY2Vzc2Z1 bGx5Lg0KPiArDQo+ICsqKi8NCj4gK0VGSV9TVEFUVVMNCj4gK0VGSUFQSQ0KPiArTmV0d29ya0Nv bW1vbkVudHJ5ICgNCj4gKyAgSU4gRUZJX0hBTkRMRSAgICAgICAgSW1hZ2VIYW5kbGUsDQo+ICsg IElOIEVGSV9TWVNURU1fVEFCTEUgICpTeXN0ZW1UYWJsZQ0KPiArICApDQo+ICt7DQo+ICsgIEVG SV9TVEFUVVMgIFN0YXR1czsNCj4gKw0KPiArICBnTmV0d29ya0NvbW1vbkRyaXZlckJpbmRpbmcu RHJpdmVyQmluZGluZ0hhbmRsZSA9IEltYWdlSGFuZGxlOw0KPiArICBnTmV0d29ya0NvbW1vbkRy aXZlckJpbmRpbmcuSW1hZ2VIYW5kbGUgICAgICAgICA9IEltYWdlSGFuZGxlOw0KPiArDQo+ICsg IFN0YXR1cyA9IGdCUy0+SW5zdGFsbE11bHRpcGxlUHJvdG9jb2xJbnRlcmZhY2VzICgNCj4gKyAg ICAgICAgICAgICAgICAgICZnTmV0d29ya0NvbW1vbkRyaXZlckJpbmRpbmcuRHJpdmVyQmluZGlu Z0hhbmRsZSwNCj4gKyAgICAgICAgICAgICAgICAgICZnRWZpRHJpdmVyQmluZGluZ1Byb3RvY29s R3VpZCwNCj4gKyAgICAgICAgICAgICAgICAgICZnTmV0d29ya0NvbW1vbkRyaXZlckJpbmRpbmcs DQo+ICsgICAgICAgICAgICAgICAgICAmZ0VmaUNvbXBvbmVudE5hbWUyUHJvdG9jb2xHdWlkLA0K PiArICAgICAgICAgICAgICAgICAgJmdOZXR3b3JrQ29tbW9uQ29tcG9uZW50TmFtZTIsDQo+ICsg ICAgICAgICAgICAgICAgICBOVUxMDQo+ICsgICAgICAgICAgICAgICAgICApOw0KPiArICByZXR1 cm4gU3RhdHVzOw0KPiArfQ0KPiBkaWZmIC0tZ2l0IGEvVXNiTmV0d29ya1BrZy9OZXR3b3JrQ29t bW9uL0RyaXZlckJpbmRpbmcuaA0KPiBiL1VzYk5ldHdvcmtQa2cvTmV0d29ya0NvbW1vbi9Ecml2 ZXJCaW5kaW5nLmgNCj4gbmV3IGZpbGUgbW9kZSAxMDA2NDQNCj4gaW5kZXggMDAwMDAwMDAwMC4u MjlmMWY5NjdmNQ0KPiAtLS0gL2Rldi9udWxsDQo+ICsrKyBiL1VzYk5ldHdvcmtQa2cvTmV0d29y a0NvbW1vbi9Ecml2ZXJCaW5kaW5nLmgNCj4gQEAgLTAsMCArMSwyNjMgQEANCj4gKy8qKiBAZmls ZQ0KPiArICBIZWFkZXIgZmlsZSBmb3IgZm9yIFVTQiBuZXR3b3JrIGNvbW1vbiBkcml2ZXINCj4g Kw0KPiArICBDb3B5cmlnaHQgKGMpIDIwMjIsIEFtZXJpY2FuIE1lZ2F0cmVuZHMgSW50ZXJuYXRp b25hbCBMTEMuIEFsbCByaWdodHMNCj4gcmVzZXJ2ZWQuPEJSPg0KPiArICBTUERYLUxpY2Vuc2Ut SWRlbnRpZmllcjogQlNELTItQ2xhdXNlLVBhdGVudA0KPiArKiovDQo+ICsNCj4gKyNpZm5kZWYg X0RSSVZFUl9CSU5ESU5HX0hfDQo+ICsjZGVmaW5lIF9EUklWRVJfQklORElOR19IXw0KPiArDQo+ ICsjaW5jbHVkZSA8TGlicmFyeS9VZWZpRHJpdmVyRW50cnlQb2ludC5oPg0KPiArI2luY2x1ZGUg PExpYnJhcnkvVWVmaUJvb3RTZXJ2aWNlc1RhYmxlTGliLmg+DQo+ICsjaW5jbHVkZSA8TGlicmFy eS9VZWZpTGliLmg+DQo+ICsjaW5jbHVkZSA8TGlicmFyeS9EZXZpY2VQYXRoTGliLmg+DQo+ICsj aW5jbHVkZSA8TGlicmFyeS9EZWJ1Z0xpYi5oPg0KPiArI2luY2x1ZGUgPExpYnJhcnkvTWVtb3J5 QWxsb2NhdGlvbkxpYi5oPg0KPiArI2luY2x1ZGUgPExpYnJhcnkvQmFzZU1lbW9yeUxpYi5oPg0K PiArI2luY2x1ZGUgPExpYnJhcnkvVWVmaVVzYkxpYi5oPg0KPiArI2luY2x1ZGUgPFByb3RvY29s L1VzYklvLmg+DQo+ICsjaW5jbHVkZSA8UHJvdG9jb2wvTmV0d29ya0ludGVyZmFjZUlkZW50aWZp ZXIuaD4NCj4gKyNpbmNsdWRlIDxQcm90b2NvbC9FZGtJSVVzYkV0aGVybmV0UHJvdG9jb2wuaD4N Cj4gKw0KPiArI2RlZmluZSBORVRXT1JLX0NPTU1PTl9EUklWRVJfVkVSU0lPTiAgICAxDQo+ICsj ZGVmaW5lIE5FVFdPUktfQ09NTU9OX1BPTExJTkdfSU5URVJWQUwgIDB4MTANCj4gKyNkZWZpbmUg UlhfQlVGRkVSX0NPVU5UICAgICAgICAgICAgICAgICAgMzINCj4gKyNkZWZpbmUgVFhfQlVGRkVS X0NPVU5UICAgICAgICAgICAgICAgICAgMzINCj4gKyNkZWZpbmUgTUVNT1JZX1JFUVVJUkUgICAg ICAgICAgICAgICAgICAgMA0KPiArDQo+ICsjZGVmaW5lIFVORElfREVWX1NJR05BVFVSRSAgU0lH TkFUVVJFXzMyKCd1JywnbicsJ2QnLCdpJykNCj4gKyNkZWZpbmUgVU5ESV9ERVZfRlJPTV9USElT KGEpICBDUihhLCBOSUNfREVWSUNFLCBOaWlQcm90b2NvbCwNCj4gVU5ESV9ERVZfU0lHTkFUVVJF KQ0KPiArI2RlZmluZSBVTkRJX0RFVl9GUk9NX05JQyhhKSAgIENSKGEsIE5JQ19ERVZJQ0UsIE5p Y0luZm8sDQo+IFVORElfREVWX1NJR05BVFVSRSkNCj4gKw0KPiArI3ByYWdtYSBwYWNrKDEpDQo+ ICt0eXBlZGVmIHN0cnVjdCB7DQo+ICsgIFVJTlQ4ICAgICBEZXN0QWRkcltQWEVfSFdBRERSX0xF Tl9FVEhFUl07DQo+ICsgIFVJTlQ4ICAgICBTcmNBZGRyW1BYRV9IV0FERFJfTEVOX0VUSEVSXTsN Cj4gKyAgVUlOVDE2ICAgIFByb3RvY29sOw0KPiArfSBFdGhlcm5ldEhlYWRlcjsNCj4gKyNwcmFn bWEgcGFjaygpDQo+ICsNCj4gK3R5cGVkZWYgc3RydWN0IHsNCj4gKyAgVUlOVE4gICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU2lnbmF0dXJlOw0KPiArICBFRklfTkVUV09S S19JTlRFUkZBQ0VfSURFTlRJRklFUl9QUk9UT0NPTCAgICBOaWlQcm90b2NvbDsNCj4gKyAgRUZJ X0hBTkRMRSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRGV2aWNlSGFuZGxlOw0K PiArICBFRklfREVWSUNFX1BBVEhfUFJPVE9DT0wgICAgICAgICAgICAgICAgICAgICAqQmFzZURl dlBhdGg7DQo+ICsgIEVGSV9ERVZJQ0VfUEFUSF9QUk9UT0NPTCAgICAgICAgICAgICAgICAgICAg ICpEZXZQYXRoOw0KPiArICBOSUNfREFUQSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBOaWNJbmZvOw0KPiArfSBOSUNfREVWSUNFOw0KPiArDQo+ICt0eXBlZGVmIFZPSUQgKCpB UElfRlVOQykoDQo+ICsgIFBYRV9DREIgKiwNCj4gKyAgTklDX0RBVEEgKg0KPiArICApOw0KPiAr DQo+ICtleHRlcm4gUFhFX1NXX1VOREkgICAgICAgICAgICAgICAgICAgKmdQeGU7DQo+ICtleHRl cm4gTklDX0RFVklDRSAgICAgICAgICAgICAgICAgICAgKmdMYW5EZXZpY2VMaXN0W01BWF9MQU5f SU5URVJGQUNFXTsNCj4gK2V4dGVybiBFRklfQ09NUE9ORU5UX05BTUUyX1BST1RPQ09MDQo+IGdO ZXR3b3JrQ29tbW9uQ29tcG9uZW50TmFtZTI7DQo+ICsNCj4gK0VGSV9TVEFUVVMNCj4gK0VGSUFQ SQ0KPiArTmV0d29ya0NvbW1vblN1cHBvcnRlZCAoDQo+ICsgIElOIEVGSV9EUklWRVJfQklORElO R19QUk9UT0NPTCAgKlRoaXMsDQo+ICsgIElOIEVGSV9IQU5ETEUgICAgICAgICAgICAgICAgICAg Q29udHJvbGxlckhhbmRsZSwNCj4gKyAgSU4gRUZJX0RFVklDRV9QQVRIX1BST1RPQ09MICAgICAq UmVtYWluaW5nRGV2aWNlUGF0aA0KPiArICApOw0KPiArDQo+ICtFRklfU1RBVFVTDQo+ICtFRklB UEkNCj4gK05ldHdvcmtDb21tb25Ecml2ZXJTdGFydCAoDQo+ICsgIElOIEVGSV9EUklWRVJfQklO RElOR19QUk9UT0NPTCAgKlRoaXMsDQo+ICsgIElOIEVGSV9IQU5ETEUgICAgICAgICAgICAgICAg ICAgQ29udHJvbGxlckhhbmRsZSwNCj4gKyAgSU4gRUZJX0RFVklDRV9QQVRIX1BST1RPQ09MICAg ICAqUmVtYWluaW5nRGV2aWNlUGF0aA0KPiArICApOw0KPiArDQo+ICtFRklfU1RBVFVTDQo+ICtF RklBUEkNCj4gK05ldHdvcmtDb21tb25Ecml2ZXJTdG9wICgNCj4gKyAgSU4gIEVGSV9EUklWRVJf QklORElOR19QUk9UT0NPTCAgKlRoaXMsDQo+ICsgIElOICBFRklfSEFORExFICAgICAgICAgICAg ICAgICAgIENvbnRyb2xsZXJIYW5kbGUsDQo+ICsgIElOICBVSU5UTiAgICAgICAgICAgICAgICAg ICAgICAgIE51bWJlck9mQ2hpbGRyZW4sDQo+ICsgIElOICBFRklfSEFORExFICAgICAgICAgICAg ICAgICAgICpDaGlsZEhhbmRsZUJ1ZmZlcg0KPiArICApOw0KPiArDQo+ICtWT0lEDQo+ICtQeGVT dHJ1Y3RJbml0ICgNCj4gKyAgT1VUIFBYRV9TV19VTkRJICAqUHhlU3cNCj4gKyAgKTsNCj4gKw0K PiArVk9JRA0KPiArVXBkYXRlTmljTnVtICgNCj4gKyAgSU4gICAgICBOSUNfREFUQSAgICAgKk5p YywNCj4gKyAgSU4gT1VUICBQWEVfU1dfVU5ESSAgKlB4ZVN3DQo+ICsgICk7DQo+ICsNCj4gK1ZP SUQNCj4gK1VuZGlBcGlFbnRyeSAoDQo+ICsgIElOICBVSU5UNjQgIENkYg0KPiArICApOw0KPiAr DQo+ICtVSU5UTg0KPiArTWFwSXQgKA0KPiArICBJTiBOSUNfREFUQSAgKk5pYywNCj4gKyAgSU4g VUlOVDY0ICAgIE1lbUFkZHIsDQo+ICsgIElOIFVJTlQzMiAgICBTaXplLA0KPiArICBJTiBVSU5U MzIgICAgRGlyZWN0aW9uLA0KPiArICBPVVQgVUlOVDY0ICAgTWFwcGVkQWRkcg0KPiArICApOw0K PiArDQo+ICtWT0lEDQo+ICtVbk1hcEl0ICgNCj4gKyAgSU4gTklDX0RBVEEgICpOaWMsDQo+ICsg IElOIFVJTlQ2NCAgICBNZW1BZGRyLA0KPiArICBJTiBVSU5UMzIgICAgU2l6ZSwNCj4gKyAgSU4g VUlOVDMyICAgIERpcmVjdGlvbiwNCj4gKyAgSU4gVUlOVDY0ICAgIE1hcHBlZEFkZHINCj4gKyAg KTsNCj4gKw0KPiArVk9JRA0KPiArVW5kaUdldFN0YXRlICgNCj4gKyAgSU4gIFBYRV9DREIgICAq Q2RiLA0KPiArICBJTiAgTklDX0RBVEEgICpOaWMNCj4gKyAgKTsNCj4gKw0KPiArVk9JRA0KPiAr VW5kaVN0YXJ0ICgNCj4gKyAgSU4gIFBYRV9DREIgICAqQ2RiLA0KPiArICBJTiAgTklDX0RBVEEg ICpOaWMNCj4gKyAgKTsNCj4gKw0KPiArVk9JRA0KPiArVW5kaVN0b3AgKA0KPiArICBJTiAgUFhF X0NEQiAgICpDZGIsDQo+ICsgIElOICBOSUNfREFUQSAgKk5pYw0KPiArICApOw0KPiArDQo+ICtW T0lEDQo+ICtVbmRpR2V0SW5pdEluZm8gKA0KPiArICBJTiAgUFhFX0NEQiAgICpDZGIsDQo+ICsg IElOICBOSUNfREFUQSAgKk5pYw0KPiArICApOw0KPiArDQo+ICtWT0lEDQo+ICtVbmRpR2V0Q29u ZmlnSW5mbyAoDQo+ICsgIElOICBQWEVfQ0RCICAgKkNkYiwNCj4gKyAgSU4gIE5JQ19EQVRBICAq TmljDQo+ICsgICk7DQo+ICsNCj4gK1ZPSUQNCj4gK1VuZGlJbml0aWFsaXplICgNCj4gKyAgSU4g ICAgICBQWEVfQ0RCICAgKkNkYiwNCj4gKyAgSU4gT1VUICBOSUNfREFUQSAgKk5pYw0KPiArICAp Ow0KPiArDQo+ICtWT0lEDQo+ICtVbmRpUmVzZXQgKA0KPiArICBJTiAgUFhFX0NEQiAgICpDZGIs DQo+ICsgIElOICBOSUNfREFUQSAgKk5pYw0KPiArICApOw0KPiArDQo+ICtWT0lEDQo+ICtVbmRp U2h1dGRvd24gKA0KPiArICBJTiAgICAgIFBYRV9DREIgICAqQ2RiLA0KPiArICBJTiBPVVQgIE5J Q19EQVRBICAqTmljDQo+ICsgICk7DQo+ICsNCj4gK1ZPSUQNCj4gK1VuZGlJbnRlcnJ1cHRFbmFi bGUgKA0KPiArICBJTiAgUFhFX0NEQiAgICpDZGIsDQo+ICsgIElOICBOSUNfREFUQSAgKk5pYw0K PiArICApOw0KPiArDQo+ICtWT0lEDQo+ICtVbmRpUmVjZWl2ZUZpbHRlciAoDQo+ICsgIElOICBQ WEVfQ0RCICAgKkNkYiwNCj4gKyAgSU4gIE5JQ19EQVRBICAqTmljDQo+ICsgICk7DQo+ICsNCj4g K1ZPSUQNCj4gK1VuZGlTdGF0aW9uQWRkcmVzcyAoDQo+ICsgIElOICBQWEVfQ0RCICAgKkNkYiwN Cj4gKyAgSU4gIE5JQ19EQVRBICAqTmljDQo+ICsgICk7DQo+ICsNCj4gK1ZPSUQNCj4gK1VuZGlT dGF0aXN0aWNzICgNCj4gKyAgSU4gIFBYRV9DREIgICAqQ2RiLA0KPiArICBJTiAgTklDX0RBVEEg ICpOaWMNCj4gKyAgKTsNCj4gKw0KPiArVk9JRA0KPiArVW5kaU1jYXN0SXAyTWFjICgNCj4gKyAg SU4gT1VUICBQWEVfQ0RCICAgKkNkYiwNCj4gKyAgSU4gICAgICBOSUNfREFUQSAgKk5pYw0KPiAr ICApOw0KPiArDQo+ICtWT0lEDQo+ICtVbmRpTnZEYXRhICgNCj4gKyAgSU4gIFBYRV9DREIgICAq Q2RiLA0KPiArICBJTiAgTklDX0RBVEEgICpOaWMNCj4gKyAgKTsNCj4gKw0KPiArVk9JRA0KPiAr VW5kaUdldFN0YXR1cyAoDQo+ICsgIElOICBQWEVfQ0RCICAgKkNkYiwNCj4gKyAgSU4gIE5JQ19E QVRBICAqTmljDQo+ICsgICk7DQo+ICsNCj4gK1ZPSUQNCj4gK1VuZGlGaWxsSGVhZGVyICgNCj4g KyAgSU4gIFBYRV9DREIgICAqQ2RiLA0KPiArICBJTiAgTklDX0RBVEEgICpOaWMNCj4gKyAgKTsN Cj4gKw0KPiArVk9JRA0KPiArVW5kaVRyYW5zbWl0ICgNCj4gKyAgSU4gIFBYRV9DREIgICAqQ2Ri LA0KPiArICBJTiAgTklDX0RBVEEgICpOaWMNCj4gKyAgKTsNCj4gKw0KPiArVk9JRA0KPiArVW5k aVJlY2VpdmUgKA0KPiArICBJTiAgUFhFX0NEQiAgICpDZGIsDQo+ICsgIElOICBOSUNfREFUQSAg Kk5pYw0KPiArICApOw0KPiArDQo+ICtVSU5UMTYNCj4gK0luaXRpYWxpemUgKA0KPiArICBJTiAg ICAgIFBYRV9DREIgICAqQ2RiLA0KPiArICBJTiBPVVQgIE5JQ19EQVRBICAqTmljDQo+ICsgICk7 DQo+ICsNCj4gK1VJTlQxNg0KPiArVHJhbnNtaXQgKA0KPiArICBJTiAgICAgIFBYRV9DREIgICAq Q2RiLA0KPiArICBJTiBPVVQgIE5JQ19EQVRBICAqTmljLA0KPiArICBJTiAgICAgIFVJTlQ2NCAg ICBDcGJBZGRyLA0KPiArICBJTiAgICAgIFVJTlQxNiAgICBPcEZsYWdzDQo+ICsgICk7DQo+ICsN Cj4gK1VJTlQxNg0KPiArUmVjZWl2ZSAoDQo+ICsgIElOIFBYRV9DREIgICAgICAgKkNkYiwNCj4g KyAgSU4gT1VUIE5JQ19EQVRBICAqTmljLA0KPiArICBJTiBVSU5UNjQgICAgICAgIENwYkFkZHIs DQo+ICsgIElOIE9VVCBVSU5UNjQgICAgRGJBZGRyDQo+ICsgICk7DQo+ICsNCj4gK1VJTlQxNg0K PiArU2V0ZmlsdGVyICgNCj4gKyAgSU4gIE5JQ19EQVRBICAqTmljLA0KPiArICBJTiAgVUlOVDE2 ICAgIFNldEZpbHRlciwNCj4gKyAgSU4gIFVJTlQ2NCAgICBDcGJBZGRyLA0KPiArICBJTiAgVUlO VDMyICAgIENwYlNpemUNCj4gKyAgKTsNCj4gKw0KPiArVUlOVDE2DQo+ICtTdGF0aXN0aWNzICgN Cj4gKyAgSU4gTklDX0RBVEEgICpOaWMsDQo+ICsgIElOIFVJTlQ2NCAgICBEYkFkZHIsDQo+ICsg IElOIFVJTlQxNiAgICBEYlNpemUNCj4gKyAgKTsNCj4gKw0KPiArI2VuZGlmDQo+IGRpZmYgLS1n aXQgYS9Vc2JOZXR3b3JrUGtnL05ldHdvcmtDb21tb24vTmV0d29ya0NvbW1vbi5pbmYNCj4gYi9V c2JOZXR3b3JrUGtnL05ldHdvcmtDb21tb24vTmV0d29ya0NvbW1vbi5pbmYNCj4gbmV3IGZpbGUg bW9kZSAxMDA2NDQNCj4gaW5kZXggMDAwMDAwMDAwMC4uODEwMDk5M2FlZQ0KPiAtLS0gL2Rldi9u dWxsDQo+ICsrKyBiL1VzYk5ldHdvcmtQa2cvTmV0d29ya0NvbW1vbi9OZXR3b3JrQ29tbW9uLmlu Zg0KPiBAQCAtMCwwICsxLDQ0IEBADQo+ICsjIyBAZmlsZQ0KPiArIyAgIFRoaXMgaXMgVXNiIE5l dHdvcmsgQ29tbW9uIGRyaXZlciBmb3IgRFhFIHBoYXNlLg0KPiArIw0KPiArIyBDb3B5cmlnaHQg KGMpIDIwMjIsIEFtZXJpY2FuIE1lZ2F0cmVuZHMgSW50ZXJuYXRpb25hbCBMTEMuIEFsbCByaWdo dHMNCj4gcmVzZXJ2ZWQuPEJSPg0KPiArIyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQlNELTIt Q2xhdXNlLVBhdGVudA0KPiArIyMNCj4gKw0KPiArW0RlZmluZXNdDQo+ICsgIElORl9WRVJTSU9O ICAgICAgICAgICAgICAgICAgICA9IDB4MDAwMTAwMDUNCj4gKyAgQkFTRV9OQU1FICAgICAgICAg ICAgICAgICAgICAgID0gTmV0d29ya0NvbW1vbg0KPiArICBGSUxFX0dVSUQgICAgICAgICAgICAg ICAgICAgICAgPSBjYTZlYjRmNC1mMWQ2LTQzNzUtOTdkNi0xODg1Njg3MWUxYmYNCj4gKyAgTU9E VUxFX1RZUEUgICAgICAgICAgICAgICAgICAgID0gRFhFX0RSSVZFUg0KPiArICBWRVJTSU9OX1NU UklORyAgICAgICAgICAgICAgICAgPSAxLjANCj4gKyAgRU5UUllfUE9JTlQgICAgICAgICAgICAg ICAgICAgID0gTmV0d29ya0NvbW1vbkVudHJ5DQo+ICsNCj4gK1tTb3VyY2VzXQ0KPiArICBEcml2 ZXJCaW5kaW5nLmMNCj4gKyAgRHJpdmVyQmluZGluZy5oDQo+ICsgIENvbXBvbmVudE5hbWUuYw0K PiArICBQeGVGdW5jdGlvbi5jDQo+ICsNCj4gK1tQYWNrYWdlc10NCj4gKyAgTWRlUGtnL01kZVBr Zy5kZWMNCj4gKyAgTWRlTW9kdWxlUGtnL01kZU1vZHVsZVBrZy5kZWMNCj4gKyAgVXNiTmV0d29y a1BrZy9Vc2JOZXR3b3JrUGtnLmRlYw0KPiArDQo+ICtbTGlicmFyeUNsYXNzZXNdDQo+ICsgIFVl ZmlEcml2ZXJFbnRyeVBvaW50DQo+ICsgIFVlZmlCb290U2VydmljZXNUYWJsZUxpYg0KPiArICBV ZWZpTGliDQo+ICsgIERlYnVnTGliDQo+ICsgIFVlZmlVc2JMaWINCj4gKyAgTWVtb3J5QWxsb2Nh dGlvbkxpYg0KPiArICBCYXNlTWVtb3J5TGliDQo+ICsNCj4gK1tQcm90b2NvbHNdDQo+ICsgIGdF ZmlOZXR3b3JrSW50ZXJmYWNlSWRlbnRpZmllclByb3RvY29sR3VpZF8zMQ0KPiArICBnRWZpVXNi SW9Qcm90b2NvbEd1aWQNCj4gKyAgZ0VmaURldmljZVBhdGhQcm90b2NvbEd1aWQNCj4gKyAgZ0Vm aURyaXZlckJpbmRpbmdQcm90b2NvbEd1aWQNCj4gKyAgZ0Vka0lJVXNiRXRoUHJvdG9jb2xHdWlk DQo+ICsNCj4gK1tEZXBleF0NCj4gKyAgVFJVRQ0KPiBkaWZmIC0tZ2l0IGEvVXNiTmV0d29ya1Br Zy9OZXR3b3JrQ29tbW9uL1B4ZUZ1bmN0aW9uLmMNCj4gYi9Vc2JOZXR3b3JrUGtnL05ldHdvcmtD b21tb24vUHhlRnVuY3Rpb24uYw0KPiBuZXcgZmlsZSBtb2RlIDEwMDY0NA0KPiBpbmRleCAwMDAw MDAwMDAwLi5mNjUwNWY3MDE4DQo+IC0tLSAvZGV2L251bGwNCj4gKysrIGIvVXNiTmV0d29ya1Br Zy9OZXR3b3JrQ29tbW9uL1B4ZUZ1bmN0aW9uLmMNCj4gQEAgLTAsMCArMSwxNzM0IEBADQo+ICsv KiogQGZpbGUNCj4gKyAgVGhpcyBmaWxlIGNvbnRhaW5zIGNvZGUgZm9yIFVOREkgY29tbWFuZCBi YXNlZCBvbiBVRUZJIHNwZWNpZmljYXRpb24uDQo+ICsNCj4gKyAgQ29weXJpZ2h0IChjKSAyMDIy LCBBbWVyaWNhbiBNZWdhdHJlbmRzIEludGVybmF0aW9uYWwgTExDLiBBbGwgcmlnaHRzDQo+IHJl c2VydmVkLjxCUj4NCj4gKyAgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEJTRC0yLUNsYXVzZS1Q YXRlbnQNCj4gKyoqLw0KPiArDQo+ICsjaW5jbHVkZSAiRHJpdmVyQmluZGluZy5oIg0KPiArDQo+ ICsvLyBBUEkgdGFibGUsIGRlZmluZWQgaW4gVUVGSSBzcGVjaWZpY2F0aW9uDQo+ICtBUElfRlVO QyAgZ1VuZGlBcGlUYWJsZVtdID0gew0KPiArICBVbmRpR2V0U3RhdGUsDQo+ICsgIFVuZGlTdGFy dCwNCj4gKyAgVW5kaVN0b3AsDQo+ICsgIFVuZGlHZXRJbml0SW5mbywNCj4gKyAgVW5kaUdldENv bmZpZ0luZm8sDQo+ICsgIFVuZGlJbml0aWFsaXplLA0KPiArICBVbmRpUmVzZXQsDQo+ICsgIFVu ZGlTaHV0ZG93biwNCj4gKyAgVW5kaUludGVycnVwdEVuYWJsZSwNCj4gKyAgVW5kaVJlY2VpdmVG aWx0ZXIsDQo+ICsgIFVuZGlTdGF0aW9uQWRkcmVzcywNCj4gKyAgVW5kaVN0YXRpc3RpY3MsDQo+ ICsgIFVuZGlNY2FzdElwMk1hYywNCj4gKyAgVW5kaU52RGF0YSwNCj4gKyAgVW5kaUdldFN0YXR1 cywNCj4gKyAgVW5kaUZpbGxIZWFkZXIsDQo+ICsgIFVuZGlUcmFuc21pdCwNCj4gKyAgVW5kaVJl Y2VpdmUNCj4gK307DQo+ICsNCj4gKy8qKg0KPiArICBUaGlzIGNvbW1hbmQgaXMgdXNlZCB0byBk ZXRlcm1pbmUgdGhlIG9wZXJhdGlvbmFsIHN0YXRlIG9mIHRoZSBVTkRJLg0KPiArDQo+ICsgIEBw YXJhbVtpbl0gIENkYiAgQSBwb2ludGVyIHRvIHRoZSBjb21tYW5kIGRlc2NyaXB0b3IgYmxvY2su DQo+ICsgIEBwYXJhbVtpbl0gIE5pYyAgQSBwb2ludGVyIHRvIHRoZSBOZXR3b3JrIGludGVyZmFj ZSBjb250cm9sbGVyIGRhdGEuDQo+ICsNCj4gKyoqLw0KPiArVk9JRA0KPiArVW5kaUdldFN0YXRl ICgNCj4gKyAgSU4gIFBYRV9DREIgICAqQ2RiLA0KPiArICBJTiAgTklDX0RBVEEgICpOaWMNCj4g KyAgKQ0KPiArew0KPiArICBFRklfU1RBVFVTICBTdGF0dXM7DQo+ICsNCj4gKyAgaWYgKChDZGIt Pk9wQ29kZSAhPSBQWEVfT1BDT0RFX0dFVF9TVEFURSkgfHwNCj4gKyAgICAgIChDZGItPlN0YXRD b2RlICE9IFBYRV9TVEFUQ09ERV9JTklUSUFMSVpFKSB8fA0KPiArICAgICAgKENkYi0+U3RhdEZs YWdzICE9IFBYRV9TVEFURkxBR1NfSU5JVElBTElaRSkgfHwNCj4gKyAgICAgIChDZGItPklGbnVt ID49IChnUHhlLT5JRmNudCB8IGdQeGUtPklGY250RXh0IDw8IDgpKSB8fA0KPiArICAgICAgKENk Yi0+Q1BCc2l6ZSAhPSBQWEVfQ1BCU0laRV9OT1RfVVNFRCkgfHwNCj4gKyAgICAgIChDZGItPkNQ QmFkZHIgIT0gUFhFX0NQQkFERFJfTk9UX1VTRUQpIHx8DQo+ICsgICAgICAoQ2RiLT5EQnNpemUg IT0gUFhFX0RCU0laRV9OT1RfVVNFRCkgfHwNCj4gKyAgICAgIChDZGItPkRCYWRkciAhPSBQWEVf REJBRERSX05PVF9VU0VEKSB8fA0KPiArICAgICAgKENkYi0+T3BGbGFncyAhPSBQWEVfT1BGTEFH U19OT1RfVVNFRCkpDQo+ICsgIHsNCj4gKyAgICBDZGItPlN0YXRGbGFncyA9IFBYRV9TVEFURkxB R1NfQ09NTUFORF9GQUlMRUQ7DQo+ICsgICAgQ2RiLT5TdGF0Q29kZSAgPSBQWEVfU1RBVENPREVf SU5WQUxJRF9DREI7DQo+ICsgICAgcmV0dXJuOw0KPiArICB9IGVsc2Ugew0KPiArICAgIENkYi0+ U3RhdEZsYWdzID0gUFhFX1NUQVRGTEFHU19DT01NQU5EX0NPTVBMRVRFOw0KPiArICAgIENkYi0+ U3RhdENvZGUgID0gUFhFX1NUQVRDT0RFX1NVQ0NFU1M7DQo+ICsgIH0NCj4gKw0KPiArICBDZGIt PlN0YXRGbGFncyA9IENkYi0+U3RhdEZsYWdzIHwgTmljLT5TdGF0ZTsNCj4gKw0KPiArICBpZiAo TmljLT5Vc2JFdGgtPlVzYkV0aFVuZGkuVXNiRXRoVW5kaUdldFN0YXRlICE9IE5VTEwpIHsNCj4g KyAgICBTdGF0dXMgPSBOaWMtPlVzYkV0aC0+VXNiRXRoVW5kaS5Vc2JFdGhVbmRpR2V0U3RhdGUg KENkYiwgTmljKTsNCj4gKyAgICBpZiAoRUZJX0VSUk9SIChTdGF0dXMpKSB7DQo+ICsgICAgICBD ZGItPlN0YXRGbGFncyA9IFBYRV9TVEFURkxBR1NfQ09NTUFORF9GQUlMRUQ7DQo+ICsgICAgfQ0K PiArICB9DQo+ICt9DQo+ICsNCj4gKy8qKg0KPiArICBUaGlzIGNvbW1hbmQgaXMgdXNlZCB0byBj aGFuZ2UgdGhlIFVOREkgb3BlcmF0aW9uYWwgc3RhdGUgZnJvbSBzdG9wcGVkDQo+IHRvIHN0YXJ0 ZWQuDQo+ICsNCj4gKyAgQHBhcmFtW2luXSAgQ2RiICBBIHBvaW50ZXIgdG8gdGhlIGNvbW1hbmQg ZGVzY3JpcHRvciBibG9jay4NCj4gKyAgQHBhcmFtW2luXSAgTmljICBBIHBvaW50ZXIgdG8gdGhl IE5ldHdvcmsgaW50ZXJmYWNlIGNvbnRyb2xsZXIgZGF0YS4NCj4gKw0KPiArKiovDQo+ICtWT0lE DQo+ICtVbmRpU3RhcnQgKA0KPiArICBJTiAgUFhFX0NEQiAgICpDZGIsDQo+ICsgIElOICBOSUNf REFUQSAgKk5pYw0KPiArICApDQo+ICt7DQo+ICsgIFBYRV9DUEJfU1RBUlRfMzEgICpDcGI7DQo+ ICsgIEVGSV9TVEFUVVMgICAgICAgIFN0YXR1czsNCj4gKw0KPiArICBpZiAoKENkYi0+T3BDb2Rl ICE9IFBYRV9PUENPREVfU1RBUlQpIHx8DQo+ICsgICAgICAoQ2RiLT5TdGF0Q29kZSAhPSBQWEVf U1RBVENPREVfSU5JVElBTElaRSkgfHwNCj4gKyAgICAgIChDZGItPlN0YXRGbGFncyAhPSBQWEVf U1RBVEZMQUdTX0lOSVRJQUxJWkUpIHx8DQo+ICsgICAgICAoQ2RiLT5JRm51bSA+PSAoZ1B4ZS0+ SUZjbnQgfCBnUHhlLT5JRmNudEV4dCA8PCA4KSkgfHwNCj4gKyAgICAgIChDZGItPkNQQnNpemUg IT0gc2l6ZW9mIChQWEVfQ1BCX1NUQVJUXzMxKSkgfHwNCj4gKyAgICAgIChDZGItPkRCc2l6ZSAh PSBQWEVfREJTSVpFX05PVF9VU0VEKSB8fA0KPiArICAgICAgKENkYi0+REJhZGRyICE9IFBYRV9E QkFERFJfTk9UX1VTRUQpIHx8DQo+ICsgICAgICAoQ2RiLT5PcEZsYWdzICE9IFBYRV9PUEZMQUdT X05PVF9VU0VEKSkNCj4gKyAgew0KPiArICAgIENkYi0+U3RhdEZsYWdzID0gUFhFX1NUQVRGTEFH U19DT01NQU5EX0ZBSUxFRDsNCj4gKyAgICBDZGItPlN0YXRDb2RlICA9IFBYRV9TVEFUQ09ERV9J TlZBTElEX0NEQjsNCj4gKyAgICByZXR1cm47DQo+ICsgIH0gZWxzZSB7DQo+ICsgICAgQ2RiLT5T dGF0RmxhZ3MgPSBQWEVfU1RBVEZMQUdTX0NPTU1BTkRfQ09NUExFVEU7DQo+ICsgICAgQ2RiLT5T dGF0Q29kZSAgPSBQWEVfU1RBVENPREVfU1VDQ0VTUzsNCj4gKyAgfQ0KPiArDQo+ICsgIGlmIChO aWMtPlN0YXRlICE9IFBYRV9TVEFURkxBR1NfR0VUX1NUQVRFX1NUT1BQRUQpIHsNCj4gKyAgICBD ZGItPlN0YXRGbGFncyA9IFBYRV9TVEFURkxBR1NfQ09NTUFORF9GQUlMRUQ7DQo+ICsgICAgQ2Ri LT5TdGF0Q29kZSAgPSBQWEVfU1RBVENPREVfQUxSRUFEWV9TVEFSVEVEOw0KPiArICAgIHJldHVy bjsNCj4gKyAgfQ0KPiArDQo+ICsgIENwYiA9IChQWEVfQ1BCX1NUQVJUXzMxICopKFVJTlROKUNk Yi0+Q1BCYWRkcjsNCj4gKw0KPiArICBOaWMtPlB4ZVN0YXJ0LkRlbGF5ICAgICA9IENwYi0+RGVs YXk7DQo+ICsgIE5pYy0+UHhlU3RhcnQuVmlydDJQaHlzID0gQ3BiLT5WaXJ0MlBoeXM7DQo+ICsg IE5pYy0+UHhlU3RhcnQuQmxvY2sgICAgID0gQ3BiLT5CbG9jazsNCj4gKyAgTmljLT5QeGVTdGFy dC5NYXBfTWVtICAgPSAwOw0KPiArICBOaWMtPlB4ZVN0YXJ0LlVuTWFwX01lbSA9IDA7DQo+ICsg IE5pYy0+UHhlU3RhcnQuU3luY19NZW0gID0gQ3BiLT5TeW5jX01lbTsNCj4gKyAgTmljLT5QeGVT dGFydC5VbmlxdWVfSUQgPSBDcGItPlVuaXF1ZV9JRDsNCj4gKyAgTmljLT5TdGF0ZSAgICAgICAg ICAgICAgPSBQWEVfU1RBVEZMQUdTX0dFVF9TVEFURV9TVEFSVEVEOw0KPiArDQo+ICsgIGlmIChO aWMtPlVzYkV0aC0+VXNiRXRoVW5kaS5Vc2JFdGhVbmRpU3RhcnQgIT0gTlVMTCkgew0KPiArICAg IFN0YXR1cyA9IE5pYy0+VXNiRXRoLT5Vc2JFdGhVbmRpLlVzYkV0aFVuZGlTdGFydCAoQ2RiLCBO aWMpOw0KPiArICAgIGlmIChFRklfRVJST1IgKFN0YXR1cykpIHsNCj4gKyAgICAgIENkYi0+U3Rh dEZsYWdzID0gUFhFX1NUQVRGTEFHU19DT01NQU5EX0ZBSUxFRDsNCj4gKyAgICB9DQo+ICsgIH0N Cj4gK30NCj4gKw0KPiArLyoqDQo+ICsgIFRoaXMgY29tbWFuZCBpcyB1c2VkIHRvIGNoYW5nZSB0 aGUgVU5ESSBvcGVyYXRpb25hbCBzdGF0ZSBmcm9tIHN0YXJ0ZWQNCj4gdG8gc3RvcHBlZC4NCj4g Kw0KPiArICBAcGFyYW1baW5dICBDZGIgIEEgcG9pbnRlciB0byB0aGUgY29tbWFuZCBkZXNjcmlw dG9yIGJsb2NrLg0KPiArICBAcGFyYW1baW5dICBOaWMgIEEgcG9pbnRlciB0byB0aGUgTmV0d29y ayBpbnRlcmZhY2UgY29udHJvbGxlciBkYXRhLg0KPiArDQo+ICsqKi8NCj4gK1ZPSUQNCj4gK1Vu ZGlTdG9wICgNCj4gKyAgSU4gIFBYRV9DREIgICAqQ2RiLA0KPiArICBJTiAgTklDX0RBVEEgICpO aWMNCj4gKyAgKQ0KPiArew0KPiArICBFRklfU1RBVFVTICBTdGF0dXM7DQo+ICsNCj4gKyAgaWYg KChDZGItPk9wQ29kZSAhPSBQWEVfT1BDT0RFX1NUT1ApIHx8DQo+ICsgICAgICAoQ2RiLT5TdGF0 Q29kZSAhPSBQWEVfU1RBVENPREVfSU5JVElBTElaRSkgfHwNCj4gKyAgICAgIChDZGItPlN0YXRG bGFncyAhPSBQWEVfU1RBVEZMQUdTX0lOSVRJQUxJWkUpIHx8DQo+ICsgICAgICAoQ2RiLT5JRm51 bSA+PSAoZ1B4ZS0+SUZjbnQgfCBnUHhlLT5JRmNudEV4dCA8PCA4KSkgfHwNCj4gKyAgICAgIChD ZGItPkNQQnNpemUgIT0gUFhFX0NQQlNJWkVfTk9UX1VTRUQpIHx8DQo+ICsgICAgICAoQ2RiLT5D UEJhZGRyICE9IFBYRV9DUEJBRERSX05PVF9VU0VEKSB8fA0KPiArICAgICAgKENkYi0+REJzaXpl ICE9IFBYRV9EQlNJWkVfTk9UX1VTRUQpIHx8DQo+ICsgICAgICAoQ2RiLT5EQmFkZHIgIT0gUFhF X0RCQUREUl9OT1RfVVNFRCkgfHwNCj4gKyAgICAgIChDZGItPk9wRmxhZ3MgIT0gUFhFX09QRkxB R1NfTk9UX1VTRUQpKQ0KPiArICB7DQo+ICsgICAgQ2RiLT5TdGF0RmxhZ3MgPSBQWEVfU1RBVEZM QUdTX0NPTU1BTkRfRkFJTEVEOw0KPiArICAgIENkYi0+U3RhdENvZGUgID0gUFhFX1NUQVRDT0RF X0lOVkFMSURfQ0RCOw0KPiArICAgIHJldHVybjsNCj4gKyAgfSBlbHNlIHsNCj4gKyAgICBDZGIt PlN0YXRGbGFncyA9IFBYRV9TVEFURkxBR1NfQ09NTUFORF9DT01QTEVURTsNCj4gKyAgICBDZGIt PlN0YXRDb2RlICA9IFBYRV9TVEFUQ09ERV9TVUNDRVNTOw0KPiArICB9DQo+ICsNCj4gKyAgaWYg KE5pYy0+U3RhdGUgPT0gUFhFX1NUQVRGTEFHU19HRVRfU1RBVEVfU1RPUFBFRCkgew0KPiArICAg IENkYi0+U3RhdEZsYWdzID0gUFhFX1NUQVRGTEFHU19DT01NQU5EX0ZBSUxFRDsNCj4gKyAgICBD ZGItPlN0YXRDb2RlICA9IFBYRV9TVEFUQ09ERV9OT1RfU1RBUlRFRDsNCj4gKyAgICByZXR1cm47 DQo+ICsgIH0NCj4gKw0KPiArICBpZiAoTmljLT5TdGF0ZSA9PSBQWEVfU1RBVEZMQUdTX0dFVF9T VEFURV9JTklUSUFMSVpFRCkgew0KPiArICAgIENkYi0+U3RhdEZsYWdzID0gUFhFX1NUQVRGTEFH U19DT01NQU5EX0ZBSUxFRDsNCj4gKyAgICBDZGItPlN0YXRDb2RlICA9IFBYRV9TVEFUQ09ERV9O T1RfU0hVVERPV047DQo+ICsgICAgcmV0dXJuOw0KPiArICB9DQo+ICsNCj4gKyAgTmljLT5QeGVT dGFydC5EZWxheSAgICAgPSAwOw0KPiArICBOaWMtPlB4ZVN0YXJ0LlZpcnQyUGh5cyA9IDA7DQo+ ICsgIE5pYy0+UHhlU3RhcnQuQmxvY2sgICAgID0gMDsNCj4gKyAgTmljLT5QeGVTdGFydC5NYXBf TWVtICAgPSAwOw0KPiArICBOaWMtPlB4ZVN0YXJ0LlVuTWFwX01lbSA9IDA7DQo+ICsgIE5pYy0+ UHhlU3RhcnQuU3luY19NZW0gID0gMDsNCj4gKyAgTmljLT5TdGF0ZSAgICAgICAgICAgICAgPSBQ WEVfU1RBVEZMQUdTX0dFVF9TVEFURV9TVE9QUEVEOw0KPiArDQo+ICsgIGlmIChOaWMtPlVzYkV0 aC0+VXNiRXRoVW5kaS5Vc2JFdGhVbmRpU3RvcCAhPSBOVUxMKSB7DQo+ICsgICAgU3RhdHVzID0g TmljLT5Vc2JFdGgtPlVzYkV0aFVuZGkuVXNiRXRoVW5kaVN0b3AgKENkYiwgTmljKTsNCj4gKyAg ICBpZiAoRUZJX0VSUk9SIChTdGF0dXMpKSB7DQo+ICsgICAgICBDZGItPlN0YXRGbGFncyA9IFBY RV9TVEFURkxBR1NfQ09NTUFORF9GQUlMRUQ7DQo+ICsgICAgfQ0KPiArICB9DQo+ICt9DQo+ICsN Cj4gKy8qKg0KPiArICBUaGlzIGNvbW1hbmQgaXMgdXNlZCB0byByZXRyaWV2ZSBpbml0aWFsaXph dGlvbiBpbmZvcm1hdGlvbiB0aGF0IGlzDQo+ICsgIG5lZWRlZCBieSBkcml2ZXJzIGFuZCBhcHBs aWNhdGlvbnMgdG8gaW5pdGlhbGl6ZWQgVU5ESS4NCj4gKw0KPiArICBAcGFyYW1baW5dICBDZGIg IEEgcG9pbnRlciB0byB0aGUgY29tbWFuZCBkZXNjcmlwdG9yIGJsb2NrLg0KPiArICBAcGFyYW1b aW5dICBOaWMgIEEgcG9pbnRlciB0byB0aGUgTmV0d29yayBpbnRlcmZhY2UgY29udHJvbGxlciBk YXRhLg0KPiArDQo+ICsqKi8NCj4gK1ZPSUQNCj4gK1VuZGlHZXRJbml0SW5mbyAoDQo+ICsgIElO ICBQWEVfQ0RCICAgKkNkYiwNCj4gKyAgSU4gIE5JQ19EQVRBICAqTmljDQo+ICsgICkNCj4gK3sN Cj4gKyAgUFhFX0RCX0dFVF9JTklUX0lORk8gICpEYjsNCj4gKyAgRUZJX1NUQVRVUyAgICAgICAg ICAgIFN0YXR1czsNCj4gKw0KPiArICBpZiAoKENkYi0+T3BDb2RlICE9IFBYRV9PUENPREVfR0VU X0lOSVRfSU5GTykgfHwNCj4gKyAgICAgIChDZGItPlN0YXRDb2RlICE9IFBYRV9TVEFUQ09ERV9J TklUSUFMSVpFKSB8fA0KPiArICAgICAgKENkYi0+U3RhdEZsYWdzICE9IFBYRV9TVEFURkxBR1Nf SU5JVElBTElaRSkgfHwNCj4gKyAgICAgIChDZGItPklGbnVtID49IChnUHhlLT5JRmNudCB8IGdQ eGUtPklGY250RXh0IDw8IDgpKSB8fA0KPiArICAgICAgKENkYi0+Q1BCc2l6ZSAhPSBQWEVfQ1BC U0laRV9OT1RfVVNFRCkgfHwNCj4gKyAgICAgIChDZGItPkNQQmFkZHIgIT0gUFhFX0NQQkFERFJf Tk9UX1VTRUQpIHx8DQo+ICsgICAgICAoQ2RiLT5EQnNpemUgIT0gc2l6ZW9mIChQWEVfREJfR0VU X0lOSVRfSU5GTykpIHx8DQo+ICsgICAgICAoQ2RiLT5PcEZsYWdzICE9IFBYRV9PUEZMQUdTX05P VF9VU0VEKSkNCj4gKyAgew0KPiArICAgIENkYi0+U3RhdEZsYWdzID0gUFhFX1NUQVRGTEFHU19D T01NQU5EX0ZBSUxFRDsNCj4gKyAgICBDZGItPlN0YXRDb2RlICA9IFBYRV9TVEFUQ09ERV9JTlZB TElEX0NEQjsNCj4gKyAgICByZXR1cm47DQo+ICsgIH0gZWxzZSB7DQo+ICsgICAgQ2RiLT5TdGF0 RmxhZ3MgPSBQWEVfU1RBVEZMQUdTX0NPTU1BTkRfQ09NUExFVEU7DQo+ICsgICAgQ2RiLT5TdGF0 Q29kZSAgPSBQWEVfU1RBVENPREVfU1VDQ0VTUzsNCj4gKyAgfQ0KPiArDQo+ICsgIGlmIChOaWMt PlN0YXRlID09IFBYRV9TVEFURkxBR1NfR0VUX1NUQVRFX1NUT1BQRUQpIHsNCj4gKyAgICBDZGIt PlN0YXRGbGFncyA9IFBYRV9TVEFURkxBR1NfQ09NTUFORF9GQUlMRUQ7DQo+ICsgICAgQ2RiLT5T dGF0Q29kZSAgPSBQWEVfU1RBVENPREVfTk9UX1NUQVJURUQ7DQo+ICsgICAgcmV0dXJuOw0KPiAr ICB9DQo+ICsNCj4gKyAgRGIgPSAoUFhFX0RCX0dFVF9JTklUX0lORk8gKikoVUlOVE4pQ2RiLT5E QmFkZHI7DQo+ICsNCj4gKyAgRGItPk1lbW9yeVJlcXVpcmVkICAgICAgICAgPSBNRU1PUllfUkVR VUlSRTsNCj4gKyAgRGItPkZyYW1lRGF0YUxlbiAgICAgICAgICAgPSBQWEVfTUFYX1RYUlhfVU5J VF9FVEhFUjsNCj4gKyAgRGItPkxpbmtTcGVlZHNbMF0gICAgICAgICAgPSAxMDsNCj4gKyAgRGIt PkxpbmtTcGVlZHNbMV0gICAgICAgICAgPSAxMDA7DQo+ICsgIERiLT5MaW5rU3BlZWRzWzJdICAg ICAgICAgID0gMTAwMDsNCj4gKyAgRGItPkxpbmtTcGVlZHNbM10gICAgICAgICAgPSAwOw0KPiAr ICBEYi0+TWVkaWFIZWFkZXJMZW4gICAgICAgICA9IFBYRV9NQUNfSEVBREVSX0xFTl9FVEhFUjsN Cj4gKyAgRGItPkhXYWRkckxlbiAgICAgICAgICAgICAgPSBQWEVfSFdBRERSX0xFTl9FVEhFUjsN Cj4gKyAgRGItPk1DYXN0RmlsdGVyQ250ICAgICAgICAgPSBNQVhfTUNBU1RfQUREUkVTU19DTlQ7 DQo+ICsgIERiLT5UeEJ1ZkNudCAgICAgICAgICAgICAgID0gTmljLT5QeGVJbml0LlR4QnVmQ250 Ow0KPiArICBEYi0+VHhCdWZTaXplICAgICAgICAgICAgICA9IE5pYy0+UHhlSW5pdC5UeEJ1ZlNp emU7DQo+ICsgIERiLT5SeEJ1ZkNudCAgICAgICAgICAgICAgID0gTmljLT5QeGVJbml0LlJ4QnVm Q250Ow0KPiArICBEYi0+UnhCdWZTaXplICAgICAgICAgICAgICA9IE5pYy0+UHhlSW5pdC5SeEJ1 ZlNpemU7DQo+ICsgIERiLT5JRnR5cGUgICAgICAgICAgICAgICAgID0gUFhFX0lGVFlQRV9FVEhF Uk5FVDsNCj4gKyAgRGItPlN1cHBvcnRlZER1cGxleE1vZGVzICAgPSBQWEVfRFVQTEVYX0RFRkFV TFQ7DQo+ICsgIERiLT5TdXBwb3J0ZWRMb29wQmFja01vZGVzID0gTE9PUEJBQ0tfTk9STUFMOw0K PiArDQo+ICsgIENkYi0+U3RhdEZsYWdzIHw9IChQWEVfU1RBVEZMQUdTX0NBQkxFX0RFVEVDVF9T VVBQT1JURUQgfA0KPiArICAgICAgICAgICAgICAgICAgICAgUFhFX1NUQVRGTEFHU19HRVRfU1RB VFVTX05PX01FRElBX1NVUFBPUlRFRCk7DQo+ICsNCj4gKyAgaWYgKE5pYy0+VXNiRXRoLT5Vc2JF dGhVbmRpLlVzYkV0aFVuZGlHZXRJbml0SW5mbyAhPSBOVUxMKSB7DQo+ICsgICAgU3RhdHVzID0g TmljLT5Vc2JFdGgtPlVzYkV0aFVuZGkuVXNiRXRoVW5kaUdldEluaXRJbmZvIChDZGIsIE5pYyk7 DQo+ICsgICAgaWYgKEVGSV9FUlJPUiAoU3RhdHVzKSkgew0KPiArICAgICAgQ2RiLT5TdGF0Rmxh Z3MgPSBQWEVfU1RBVEZMQUdTX0NPTU1BTkRfRkFJTEVEOw0KPiArICAgIH0NCj4gKyAgfQ0KPiAr fQ0KPiArDQo+ICsvKioNCj4gKyAgVGhpcyBjb21tYW5kIGlzIHVzZWQgdG8gcmV0cmlldmUgY29u ZmlndXJhdGlvbiBpbmZvcm1hdGlvbiBhYm91dA0KPiArICB0aGUgTklDIGJlaW5nIGNvbnRyb2xs ZWQgYnkgdGhlIFVOREkuDQo+ICsNCj4gKyAgQHBhcmFtW2luXSAgQ2RiICBBIHBvaW50ZXIgdG8g dGhlIGNvbW1hbmQgZGVzY3JpcHRvciBibG9jay4NCj4gKyAgQHBhcmFtW2luXSAgTmljICBBIHBv aW50ZXIgdG8gdGhlIE5ldHdvcmsgaW50ZXJmYWNlIGNvbnRyb2xsZXIgZGF0YS4NCj4gKw0KPiAr KiovDQo+ICtWT0lEDQo+ICtVbmRpR2V0Q29uZmlnSW5mbyAoDQo+ICsgIElOICBQWEVfQ0RCICAg KkNkYiwNCj4gKyAgSU4gIE5JQ19EQVRBICAqTmljDQo+ICsgICkNCj4gK3sNCj4gKyAgUFhFX0RC X0dFVF9DT05GSUdfSU5GTyAgKkRiOw0KPiArICBFRklfU1RBVFVTICAgICAgICAgICAgICBTdGF0 dXM7DQo+ICsNCj4gKyAgaWYgKChDZGItPk9wQ29kZSAhPSBQWEVfT1BDT0RFX0dFVF9DT05GSUdf SU5GTykgfHwNCj4gKyAgICAgIChDZGItPlN0YXRDb2RlICE9IFBYRV9TVEFUQ09ERV9JTklUSUFM SVpFKSB8fA0KPiArICAgICAgKENkYi0+U3RhdEZsYWdzICE9IFBYRV9TVEFURkxBR1NfSU5JVElB TElaRSkgfHwNCj4gKyAgICAgIChDZGItPklGbnVtID49IChnUHhlLT5JRmNudCB8IGdQeGUtPklG Y250RXh0IDw8IDgpKSB8fA0KPiArICAgICAgKENkYi0+Q1BCc2l6ZSAhPSBQWEVfQ1BCU0laRV9O T1RfVVNFRCkgfHwNCj4gKyAgICAgIChDZGItPkNQQmFkZHIgIT0gUFhFX0NQQkFERFJfTk9UX1VT RUQpIHx8DQo+ICsgICAgICAoQ2RiLT5EQnNpemUgIT0gc2l6ZW9mIChQWEVfREJfR0VUX0NPTkZJ R19JTkZPKSkgfHwNCj4gKyAgICAgIChDZGItPk9wRmxhZ3MgIT0gUFhFX09QRkxBR1NfTk9UX1VT RUQpKQ0KPiArICB7DQo+ICsgICAgQ2RiLT5TdGF0RmxhZ3MgPSBQWEVfU1RBVEZMQUdTX0NPTU1B TkRfRkFJTEVEOw0KPiArICAgIENkYi0+U3RhdENvZGUgID0gUFhFX1NUQVRDT0RFX0lOVkFMSURf Q0RCOw0KPiArICAgIHJldHVybjsNCj4gKyAgfSBlbHNlIHsNCj4gKyAgICBDZGItPlN0YXRGbGFn cyA9IFBYRV9TVEFURkxBR1NfQ09NTUFORF9DT01QTEVURTsNCj4gKyAgICBDZGItPlN0YXRDb2Rl ICA9IFBYRV9TVEFUQ09ERV9TVUNDRVNTOw0KPiArICB9DQo+ICsNCj4gKyAgaWYgKE5pYy0+U3Rh dGUgPT0gUFhFX1NUQVRGTEFHU19HRVRfU1RBVEVfU1RPUFBFRCkgew0KPiArICAgIENkYi0+U3Rh dEZsYWdzID0gUFhFX1NUQVRGTEFHU19DT01NQU5EX0ZBSUxFRDsNCj4gKyAgICBDZGItPlN0YXRD b2RlICA9IFBYRV9TVEFUQ09ERV9OT1RfU1RBUlRFRDsNCj4gKyAgICByZXR1cm47DQo+ICsgIH0N Cj4gKw0KPiArICBEYiA9IChQWEVfREJfR0VUX0NPTkZJR19JTkZPICopKFVJTlROKUNkYi0+REJh ZGRyOw0KPiArDQo+ICsgIERiLT5wY2kuQnVzVHlwZSA9IFBYRV9CVVNUWVBFX1VTQjsNCj4gKw0K PiArICBpZiAoTmljLT5Vc2JFdGgtPlVzYkV0aFVuZGkuVXNiRXRoVW5kaUdldENvbmZpZ0luZm8g IT0gTlVMTCkgew0KPiArICAgIFN0YXR1cyA9IE5pYy0+VXNiRXRoLT5Vc2JFdGhVbmRpLlVzYkV0 aFVuZGlHZXRDb25maWdJbmZvIChDZGIsIE5pYyk7DQo+ICsgICAgaWYgKEVGSV9FUlJPUiAoU3Rh dHVzKSkgew0KPiArICAgICAgQ2RiLT5TdGF0RmxhZ3MgPSBQWEVfU1RBVEZMQUdTX0NPTU1BTkRf RkFJTEVEOw0KPiArICAgIH0NCj4gKyAgfQ0KPiArfQ0KPiArDQo+ICsvKioNCj4gKyAgVGhpcyBj b21tYW5kIHJlc2V0cyB0aGUgbmV0d29yayBhZGFwdGVyIGFuZCBpbml0aWFsaXplcyBVTkRJIHVz aW5nDQo+ICsgIHRoZSBwYXJhbWV0ZXJzIHN1cHBsaWVkIGluIHRoZSBDUEIuDQo+ICsNCj4gKyAg QHBhcmFtW2luXSAgICAgIENkYiAgQSBwb2ludGVyIHRvIHRoZSBjb21tYW5kIGRlc2NyaXB0b3Ig YmxvY2suDQo+ICsgIEBwYXJhbVtpbiwgb3V0XSBOaWMgIEEgcG9pbnRlciB0byB0aGUgTmV0d29y ayBpbnRlcmZhY2UgY29udHJvbGxlciBkYXRhLg0KPiArDQo+ICsqKi8NCj4gK1ZPSUQNCj4gK1Vu ZGlJbml0aWFsaXplICgNCj4gKyAgSU4gICAgICBQWEVfQ0RCICAgKkNkYiwNCj4gKyAgSU4gT1VU ICBOSUNfREFUQSAgKk5pYw0KPiArICApDQo+ICt7DQo+ICsgIFBYRV9DUEJfSU5JVElBTElaRSAg KkNwYjsNCj4gKyAgUFhFX0RCX0lOSVRJQUxJWkUgICAqRGI7DQo+ICsgIEVGSV9TVEFUVVMgICAg ICAgICAgU3RhdHVzOw0KPiArDQo+ICsgIGlmICgoQ2RiLT5PcENvZGUgIT0gUFhFX09QQ09ERV9J TklUSUFMSVpFKSB8fA0KPiArICAgICAgKENkYi0+U3RhdENvZGUgIT0gUFhFX1NUQVRDT0RFX0lO SVRJQUxJWkUpIHx8DQo+ICsgICAgICAoQ2RiLT5TdGF0RmxhZ3MgIT0gUFhFX1NUQVRGTEFHU19J TklUSUFMSVpFKSB8fA0KPiArICAgICAgKENkYi0+SUZudW0gPj0gKGdQeGUtPklGY250IHwgZ1B4 ZS0+SUZjbnRFeHQgPDwgOCkpIHx8DQo+ICsgICAgICAoQ2RiLT5DUEJzaXplICE9IHNpemVvZiAo UFhFX0NQQl9JTklUSUFMSVpFKSkpDQo+ICsgIHsNCj4gKyAgICBDZGItPlN0YXRGbGFncyA9IFBY RV9TVEFURkxBR1NfQ09NTUFORF9GQUlMRUQ7DQo+ICsgICAgQ2RiLT5TdGF0Q29kZSAgPSBQWEVf U1RBVENPREVfSU5WQUxJRF9DREI7DQo+ICsgICAgcmV0dXJuOw0KPiArICB9IGVsc2Ugew0KPiAr ICAgIENkYi0+U3RhdEZsYWdzID0gUFhFX1NUQVRGTEFHU19DT01NQU5EX0NPTVBMRVRFOw0KPiAr ICB9DQo+ICsNCj4gKyAgaWYgKE5pYy0+U3RhdGUgPT0gUFhFX1NUQVRGTEFHU19HRVRfU1RBVEVf U1RPUFBFRCkgew0KPiArICAgIENkYi0+U3RhdEZsYWdzID0gUFhFX1NUQVRGTEFHU19DT01NQU5E X0ZBSUxFRDsNCj4gKyAgICBDZGItPlN0YXRDb2RlICA9IFBYRV9TVEFUQ09ERV9OT1RfU1RBUlRF RDsNCj4gKyAgICByZXR1cm47DQo+ICsgIH0NCj4gKw0KPiArICBpZiAoKENkYi0+T3BGbGFncyAh PSBQWEVfT1BGTEFHU19JTklUSUFMSVpFX0RFVEVDVF9DQUJMRSkgJiYNCj4gKyAgICAgIChDZGIt Pk9wRmxhZ3MgIT0gUFhFX09QRkxBR1NfSU5JVElBTElaRV9ET19OT1RfREVURUNUX0NBQkxFKSkN Cj4gKyAgew0KPiArICAgIENkYi0+U3RhdEZsYWdzID0gUFhFX1NUQVRGTEFHU19DT01NQU5EX0ZB SUxFRDsNCj4gKyAgICBDZGItPlN0YXRDb2RlICA9IFBYRV9TVEFUQ09ERV9JTlZBTElEX0NEQjsN Cj4gKyAgICByZXR1cm47DQo+ICsgIH0NCj4gKw0KPiArICBpZiAoTmljLT5TdGF0ZSA9PSBQWEVf U1RBVEZMQUdTX0dFVF9TVEFURV9JTklUSUFMSVpFRCkgew0KPiArICAgIENkYi0+U3RhdEZsYWdz ID0gUFhFX1NUQVRGTEFHU19DT01NQU5EX0ZBSUxFRDsNCj4gKyAgICBDZGItPlN0YXRDb2RlICA9 IFBYRV9TVEFUQ09ERV9BTFJFQURZX0lOSVRJQUxJWkVEOw0KPiArICAgIHJldHVybjsNCj4gKyAg fQ0KPiArDQo+ICsgIENwYiA9IChQWEVfQ1BCX0lOSVRJQUxJWkUgKikoVUlOVE4pQ2RiLT5DUEJh ZGRyOw0KPiArICBEYiAgPSAoUFhFX0RCX0lOSVRJQUxJWkUgKikoVUlOVE4pQ2RiLT5EQmFkZHI7 DQo+ICsNCj4gKyAgTmljLT5QeGVJbml0LkxpbmtTcGVlZCAgICA9IENwYi0+TGlua1NwZWVkOw0K PiArICBOaWMtPlB4ZUluaXQuRHVwbGV4TW9kZSAgID0gQ3BiLT5EdXBsZXhNb2RlOw0KPiArICBO aWMtPlB4ZUluaXQuTG9vcEJhY2tNb2RlID0gQ3BiLT5Mb29wQmFja01vZGU7DQo+ICsgIE5pYy0+ UHhlSW5pdC5NZW1vcnlBZGRyICAgPSBDcGItPk1lbW9yeUFkZHI7DQo+ICsgIE5pYy0+UHhlSW5p dC5NZW1vcnlMZW5ndGggPSBDcGItPk1lbW9yeUxlbmd0aDsNCj4gKyAgTmljLT5QeGVJbml0LlR4 QnVmQ250ICAgICA9IFRYX0JVRkZFUl9DT1VOVDsNCj4gKyAgTmljLT5QeGVJbml0LlR4QnVmU2l6 ZSAgICA9IE5pYy0+TWF4U2VnbWVudFNpemU7DQo+ICsgIE5pYy0+UHhlSW5pdC5SeEJ1ZkNudCAg ICAgPSBSWF9CVUZGRVJfQ09VTlQ7DQo+ICsgIE5pYy0+UHhlSW5pdC5SeEJ1ZlNpemUgICAgPSBO aWMtPk1heFNlZ21lbnRTaXplOw0KPiArDQo+ICsgIENkYi0+U3RhdENvZGUgPSBJbml0aWFsaXpl IChDZGIsIE5pYyk7DQo+ICsNCj4gKyAgRGItPk1lbW9yeVVzZWQgPSBNRU1PUllfUkVRVUlSRTsN Cj4gKyAgRGItPlR4QnVmQ250ICAgPSBOaWMtPlB4ZUluaXQuVHhCdWZDbnQ7DQo+ICsgIERiLT5U eEJ1ZlNpemUgID0gTmljLT5QeGVJbml0LlR4QnVmU2l6ZTsNCj4gKyAgRGItPlJ4QnVmQ250ICAg PSBOaWMtPlB4ZUluaXQuUnhCdWZDbnQ7DQo+ICsgIERiLT5SeEJ1ZlNpemUgID0gTmljLT5QeGVJ bml0LlJ4QnVmU2l6ZTsNCj4gKw0KPiArICBOaWMtPlJ4RmlsdGVyICAgID0gUFhFX09QRkxBR1Nf UkVDRUlWRV9GSUxURVJfQlJPQURDQVNUOw0KPiArICBOaWMtPkNhblJlY2VpdmUgID0gRkFMU0U7 DQo+ICsgIE5pYy0+Q2FuVHJhbnNtaXQgPSBGQUxTRTsNCj4gKw0KPiArICBpZiAoQ2RiLT5PcEZs YWdzID09IFBYRV9PUEZMQUdTX0lOSVRJQUxJWkVfREVURUNUX0NBQkxFKSB7DQo+ICsgICAgaWYg KChOaWMtPlJlcXVlc3QuUmVxdWVzdCA9PSBVU0JfQ0RDX05FVFdPUktfQ09OTkVDVElPTikgJiYN Cj4gKE5pYy0+UmVxdWVzdC5WYWx1ZSA9PSBORVRXT1JLX0RJU0NPTk5FQ1QpKSB7DQo+ICsgICAg ICBOaWMtPkNhYmxlRGV0ZWN0ID0gMDsNCj4gKyAgICB9IGVsc2UgaWYgKChOaWMtPlJlcXVlc3Qu UmVxdWVzdCA9PSBVU0JfQ0RDX05FVFdPUktfQ09OTkVDVElPTikNCj4gJiYgKE5pYy0+UmVxdWVz dC5WYWx1ZSA9PSBORVRXT1JLX0NPTk5FQ1RFRCkpIHsNCj4gKyAgICAgIE5pYy0+Q2FibGVEZXRl Y3QgPSAxOw0KPiArICAgIH0NCj4gKw0KPiArICAgIGlmIChOaWMtPkNhYmxlRGV0ZWN0ID09IDAp IHsNCj4gKyAgICAgIENkYi0+U3RhdEZsYWdzIHw9IFBYRV9TVEFURkxBR1NfSU5JVElBTElaRURf Tk9fTUVESUE7DQo+ICsgICAgfQ0KPiArICB9DQo+ICsNCj4gKyAgaWYgKENkYi0+U3RhdENvZGUg IT0gUFhFX1NUQVRDT0RFX1NVQ0NFU1MpIHsNCj4gKyAgICBDZGItPlN0YXRGbGFncyA9IFBYRV9T VEFURkxBR1NfQ09NTUFORF9GQUlMRUQ7DQo+ICsgIH0gZWxzZSB7DQo+ICsgICAgTmljLT5TdGF0 ZSA9IFBYRV9TVEFURkxBR1NfR0VUX1NUQVRFX0lOSVRJQUxJWkVEOw0KPiArICB9DQo+ICsNCj4g KyAgaWYgKE5pYy0+VXNiRXRoLT5Vc2JFdGhVbmRpLlVzYkV0aFVuZGlJbml0aWFsaXplICE9IE5V TEwpIHsNCj4gKyAgICBTdGF0dXMgPSBOaWMtPlVzYkV0aC0+VXNiRXRoVW5kaS5Vc2JFdGhVbmRp SW5pdGlhbGl6ZSAoQ2RiLCBOaWMpOw0KPiArICAgIGlmIChFRklfRVJST1IgKFN0YXR1cykpIHsN Cj4gKyAgICAgIENkYi0+U3RhdEZsYWdzID0gUFhFX1NUQVRGTEFHU19DT01NQU5EX0ZBSUxFRDsN Cj4gKyAgICB9DQo+ICsgIH0NCj4gK30NCj4gKw0KPiArLyoqDQo+ICsgIEluaXRpYWxpemUgTmV0 d29yayBpbnRlcmZhY2UgY29udHJvbGxlciBkYXRhLg0KPiArDQo+ICsgIEBwYXJhbVtpbl0gICAg ICBDZGIgICAgIEEgcG9pbnRlciB0byB0aGUgY29tbWFuZCBkZXNjcmlwdG9yIGJsb2NrLg0KPiAr ICBAcGFyYW1baW4sIG91dF0gTmljICAgICBBIHBvaW50ZXIgdG8gdGhlIE5ldHdvcmsgaW50ZXJm YWNlIGNvbnRyb2xsZXIgZGF0YS4NCj4gKw0KPiArICBAcmV0dmFsIFN0YXR1cyAgQSB2YWx1ZSBv ZiBQeGUgc3RhdGNvZGUuDQo+ICsNCj4gKyoqLw0KPiArVUlOVDE2DQo+ICtJbml0aWFsaXplICgN Cj4gKyAgSU4gICAgICBQWEVfQ0RCICAgKkNkYiwNCj4gKyAgSU4gT1VUICBOSUNfREFUQSAgKk5p Yw0KPiArICApDQo+ICt7DQo+ICsgIFVJTlROICAgICAgIFN0YXR1czsNCj4gKyAgVUlOVDMyICAg ICAgSW5kZXg7DQo+ICsgIEVGSV9TVEFUVVMgIEVmaVN0YXR1czsNCj4gKw0KPiArICBTdGF0dXMg PSBNYXBJdCAoDQo+ICsgICAgICAgICAgICAgTmljLA0KPiArICAgICAgICAgICAgIE5pYy0+UHhl SW5pdC5NZW1vcnlBZGRyLA0KPiArICAgICAgICAgICAgIE5pYy0+UHhlSW5pdC5NZW1vcnlMZW5n dGgsDQo+ICsgICAgICAgICAgICAgVE9fQU5EX0ZST01fREVWSUNFLA0KPiArICAgICAgICAgICAg IChVSU5UNjQpKFVJTlROKSZOaWMtPk1hcHBlZEFkZHINCj4gKyAgICAgICAgICAgICApOw0KPiAr DQo+ICsgIGlmIChTdGF0dXMgIT0gMCkgew0KPiArICAgIHJldHVybiAoVUlOVDE2KVN0YXR1czsN Cj4gKyAgfQ0KPiArDQo+ICsgIGZvciAoSW5kZXggPSAwOyBJbmRleCA8IFBYRV9IV0FERFJfTEVO X0VUSEVSOyBJbmRleCsrKSB7DQo+ICsgICAgTmljLT5QZXJtTm9kZUFkZHJlc3NbSW5kZXhdID0g TmljLT5NYWNBZGRyLkFkZHJbSW5kZXhdOw0KPiArICB9DQo+ICsNCj4gKyAgZm9yIChJbmRleCA9 IDA7IEluZGV4IDwgUFhFX0hXQUREUl9MRU5fRVRIRVI7IEluZGV4KyspIHsNCj4gKyAgICBOaWMt PkN1cnJlbnROb2RlQWRkcmVzc1tJbmRleF0gPSBOaWMtPlBlcm1Ob2RlQWRkcmVzc1tJbmRleF07 DQo+ICsgIH0NCj4gKw0KPiArICBmb3IgKEluZGV4ID0gMDsgSW5kZXggPCBQWEVfSFdBRERSX0xF Tl9FVEhFUjsgSW5kZXgrKykgew0KPiArICAgIE5pYy0+QnJvYWRjYXN0Tm9kZUFkZHJlc3NbSW5k ZXhdID0gMHhGRjsNCj4gKyAgfQ0KPiArDQo+ICsgIGZvciAoSW5kZXggPSBQWEVfSFdBRERSX0xF Tl9FVEhFUjsgSW5kZXggPCBQWEVfTUFDX0xFTkdUSDsNCj4gSW5kZXgrKykgew0KPiArICAgIE5p Yy0+Q3VycmVudE5vZGVBZGRyZXNzW0luZGV4XSAgID0gMDsNCj4gKyAgICBOaWMtPlBlcm1Ob2Rl QWRkcmVzc1tJbmRleF0gICAgICA9IDA7DQo+ICsgICAgTmljLT5Ccm9hZGNhc3ROb2RlQWRkcmVz c1tJbmRleF0gPSAwOw0KPiArICB9DQo+ICsNCj4gKyAgaWYgKE5pYy0+VXNiRXRoLT5Vc2JFdGhJ bml0aWFsaXplICE9IE5VTEwpIHsNCj4gKyAgICBFZmlTdGF0dXMgPSBOaWMtPlVzYkV0aC0+VXNi RXRoSW5pdGlhbGl6ZSAoQ2RiLCBOaWMpOw0KPiArICAgIGlmIChFRklfRVJST1IgKEVmaVN0YXR1 cykpIHsNCj4gKyAgICAgIHJldHVybiBQWEVfU1RBVEZMQUdTX0NPTU1BTkRfRkFJTEVEOw0KPiAr ICAgIH0NCj4gKyAgfQ0KPiArDQo+ICsgIHJldHVybiAoVUlOVDE2KVN0YXR1czsNCj4gK30NCj4g Kw0KPiArLyoqDQo+ICsgIFRoaXMgY29tbWFuZCByZXNldHMgdGhlIG5ldHdvcmsgYWRhcHRlciBh bmQgcmVpbml0aWFsaXplcyB0aGUgVU5ESQ0KPiArICB3aXRoIHRoZSBzYW1lIHBhcmFtZXRlcnMg cHJvdmlkZWQgaW4gdGhlIEluaXRpYWxpemUgY29tbWFuZC4NCj4gKw0KPiArICBAcGFyYW1baW5d ICBDZGIgIEEgcG9pbnRlciB0byB0aGUgY29tbWFuZCBkZXNjcmlwdG9yIGJsb2NrLg0KPiArICBA cGFyYW1baW5dICBOaWMgIEEgcG9pbnRlciB0byB0aGUgTmV0d29yayBpbnRlcmZhY2UgY29udHJv bGxlciBkYXRhLg0KPiArDQo+ICsqKi8NCj4gK1ZPSUQNCj4gK1VuZGlSZXNldCAoDQo+ICsgIElO ICBQWEVfQ0RCICAgKkNkYiwNCj4gKyAgSU4gIE5JQ19EQVRBICAqTmljDQo+ICsgICkNCj4gK3sN Cj4gKyAgRUZJX1NUQVRVUyAgU3RhdHVzOw0KPiArDQo+ICsgIGlmICgoQ2RiLT5PcENvZGUgIT0g UFhFX09QQ09ERV9SRVNFVCkgfHwNCj4gKyAgICAgIChDZGItPlN0YXRDb2RlICE9IFBYRV9TVEFU Q09ERV9JTklUSUFMSVpFKSB8fA0KPiArICAgICAgKENkYi0+U3RhdEZsYWdzICE9IFBYRV9TVEFU RkxBR1NfSU5JVElBTElaRSkgfHwNCj4gKyAgICAgIChDZGItPklGbnVtID49IChnUHhlLT5JRmNu dCB8IGdQeGUtPklGY250RXh0IDw8IDgpKSB8fA0KPiArICAgICAgKENkYi0+Q1BCc2l6ZSAhPSBQ WEVfQ1BCU0laRV9OT1RfVVNFRCkgfHwNCj4gKyAgICAgIChDZGItPkNQQmFkZHIgIT0gUFhFX0NQ QkFERFJfTk9UX1VTRUQpIHx8DQo+ICsgICAgICAoQ2RiLT5EQnNpemUgIT0gUFhFX0RCU0laRV9O T1RfVVNFRCkgfHwNCj4gKyAgICAgIChDZGItPkRCYWRkciAhPSBQWEVfREJBRERSX05PVF9VU0VE KSkNCj4gKyAgew0KPiArICAgIENkYi0+U3RhdEZsYWdzID0gUFhFX1NUQVRGTEFHU19DT01NQU5E X0ZBSUxFRDsNCj4gKyAgICBDZGItPlN0YXRDb2RlICA9IFBYRV9TVEFUQ09ERV9JTlZBTElEX0NE QjsNCj4gKyAgICByZXR1cm47DQo+ICsgIH0gZWxzZSB7DQo+ICsgICAgQ2RiLT5TdGF0RmxhZ3Mg PSBQWEVfU1RBVEZMQUdTX0NPTU1BTkRfQ09NUExFVEU7DQo+ICsgICAgQ2RiLT5TdGF0Q29kZSAg PSBQWEVfU1RBVENPREVfU1VDQ0VTUzsNCj4gKyAgfQ0KPiArDQo+ICsgIGlmIChOaWMtPlN0YXRl ICE9IFBYRV9TVEFURkxBR1NfR0VUX1NUQVRFX0lOSVRJQUxJWkVEKSB7DQo+ICsgICAgQ2RiLT5T dGF0Q29kZSAgPSBQWEVfU1RBVENPREVfTk9UX0lOSVRJQUxJWkVEOw0KPiArICAgIENkYi0+U3Rh dEZsYWdzID0gUFhFX1NUQVRGTEFHU19DT01NQU5EX0ZBSUxFRDsNCj4gKyAgICByZXR1cm47DQo+ ICsgIH0NCj4gKw0KPiArICBpZiAoKENkYi0+T3BGbGFncyAhPSBQWEVfT1BGTEFHU19OT1RfVVNF RCkgJiYNCj4gKyAgICAgIChDZGItPk9wRmxhZ3MgIT0gUFhFX09QRkxBR1NfUkVTRVRfRElTQUJM RV9JTlRFUlJVUFRTKSAmJg0KPiArICAgICAgKENkYi0+T3BGbGFncyAhPSBQWEVfT1BGTEFHU19S RVNFVF9ESVNBQkxFX0ZJTFRFUlMpKQ0KPiArICB7DQo+ICsgICAgQ2RiLT5TdGF0RmxhZ3MgPSBQ WEVfU1RBVEZMQUdTX0NPTU1BTkRfRkFJTEVEOw0KPiArICAgIENkYi0+U3RhdENvZGUgID0gUFhF X1NUQVRDT0RFX0lOVkFMSURfQ0RCOw0KPiArICAgIHJldHVybjsNCj4gKyAgfQ0KPiArDQo+ICsg IGlmICgoQ2RiLT5PcEZsYWdzICYgUFhFX09QRkxBR1NfUkVTRVRfRElTQUJMRV9GSUxURVJTKSA9 PSAwKSB7DQo+ICsgICAgTmljLT5SeEZpbHRlciA9IFBYRV9PUEZMQUdTX1JFQ0VJVkVfRklMVEVS X0JST0FEQ0FTVDsNCj4gKyAgfQ0KPiArDQo+ICsgIGlmICgoQ2RiLT5PcEZsYWdzICYgUFhFX09Q RkxBR1NfUkVTRVRfRElTQUJMRV9JTlRFUlJVUFRTKSAhPSAwKSB7DQo+ICsgICAgTmljLT5JbnRl cnJ1cE9wRmxhZyA9IDA7DQo+ICsgIH0NCj4gKw0KPiArICBpZiAoTmljLT5Vc2JFdGgtPlVzYkV0 aFVuZGkuVXNiRXRoVW5kaVJlc2V0ICE9IE5VTEwpIHsNCj4gKyAgICBTdGF0dXMgPSBOaWMtPlVz YkV0aC0+VXNiRXRoVW5kaS5Vc2JFdGhVbmRpUmVzZXQgKENkYiwgTmljKTsNCj4gKyAgICBpZiAo RUZJX0VSUk9SIChTdGF0dXMpKSB7DQo+ICsgICAgICBDZGItPlN0YXRGbGFncyA9IFBYRV9TVEFU RkxBR1NfQ09NTUFORF9GQUlMRUQ7DQo+ICsgICAgfQ0KPiArICB9DQo+ICt9DQo+ICsNCj4gKy8q Kg0KPiArICBUaGUgU2h1dGRvd24gY29tbWFuZCByZXNldHMgdGhlIG5ldHdvcmsgYWRhcHRlciBh bmQgbGVhdmVzIGl0IGluIGENCj4gKyAgc2FmZSBzdGF0ZSBmb3IgYW5vdGhlciBkcml2ZXIgdG8g aW5pdGlhbGl6ZS4NCj4gKw0KPiArICBAcGFyYW1baW5dICAgICAgQ2RiICBBIHBvaW50ZXIgdG8g dGhlIGNvbW1hbmQgZGVzY3JpcHRvciBibG9jay4NCj4gKyAgQHBhcmFtW2luLCBvdXRdIE5pYyAg QSBwb2ludGVyIHRvIHRoZSBOZXR3b3JrIGludGVyZmFjZSBjb250cm9sbGVyIGRhdGEuDQo+ICsN Cj4gKyoqLw0KPiArVk9JRA0KPiArVW5kaVNodXRkb3duICgNCj4gKyAgSU4gICAgICBQWEVfQ0RC ICAgKkNkYiwNCj4gKyAgSU4gT1VUICBOSUNfREFUQSAgKk5pYw0KPiArICApDQo+ICt7DQo+ICsg IEVGSV9TVEFUVVMgIFN0YXR1czsNCj4gKw0KPiArICBpZiAoKENkYi0+T3BDb2RlICE9IFBYRV9P UENPREVfU0hVVERPV04pIHx8DQo+ICsgICAgICAoQ2RiLT5TdGF0Q29kZSAhPSBQWEVfU1RBVENP REVfSU5JVElBTElaRSkgfHwNCj4gKyAgICAgIChDZGItPlN0YXRGbGFncyAhPSBQWEVfU1RBVEZM QUdTX0lOSVRJQUxJWkUpIHx8DQo+ICsgICAgICAoQ2RiLT5JRm51bSA+PSAoZ1B4ZS0+SUZjbnQg fCBnUHhlLT5JRmNudEV4dCA8PCA4KSkgfHwNCj4gKyAgICAgIChDZGItPkNQQnNpemUgIT0gUFhF X0NQQlNJWkVfTk9UX1VTRUQpIHx8DQo+ICsgICAgICAoQ2RiLT5DUEJhZGRyICE9IFBYRV9DUEJB RERSX05PVF9VU0VEKSB8fA0KPiArICAgICAgKENkYi0+REJzaXplICE9IFBYRV9EQlNJWkVfTk9U X1VTRUQpIHx8DQo+ICsgICAgICAoQ2RiLT5EQmFkZHIgIT0gUFhFX0RCQUREUl9OT1RfVVNFRCkg fHwNCj4gKyAgICAgIChDZGItPk9wRmxhZ3MgIT0gUFhFX09QRkxBR1NfTk9UX1VTRUQpKQ0KPiAr ICB7DQo+ICsgICAgQ2RiLT5TdGF0RmxhZ3MgPSBQWEVfU1RBVEZMQUdTX0NPTU1BTkRfRkFJTEVE Ow0KPiArICAgIENkYi0+U3RhdENvZGUgID0gUFhFX1NUQVRDT0RFX0lOVkFMSURfQ0RCOw0KPiAr ICAgIHJldHVybjsNCj4gKyAgfSBlbHNlIHsNCj4gKyAgICBDZGItPlN0YXRGbGFncyA9IFBYRV9T VEFURkxBR1NfQ09NTUFORF9DT01QTEVURTsNCj4gKyAgICBDZGItPlN0YXRDb2RlICA9IFBYRV9T VEFUQ09ERV9TVUNDRVNTOw0KPiArICB9DQo+ICsNCj4gKyAgaWYgKE5pYy0+U3RhdGUgIT0gUFhF X1NUQVRGTEFHU19HRVRfU1RBVEVfSU5JVElBTElaRUQpIHsNCj4gKyAgICBDZGItPlN0YXRDb2Rl ICA9IFBYRV9TVEFUQ09ERV9OT1RfSU5JVElBTElaRUQ7DQo+ICsgICAgQ2RiLT5TdGF0RmxhZ3Mg PSBQWEVfU1RBVEZMQUdTX0NPTU1BTkRfRkFJTEVEOw0KPiArICAgIHJldHVybjsNCj4gKyAgfQ0K PiArDQo+ICsgIE5pYy0+Q2FuUmVjZWl2ZSAgPSBGQUxTRTsNCj4gKyAgTmljLT5DYW5UcmFuc21p dCA9IEZBTFNFOw0KPiArDQo+ICsgIE5pYy0+U3RhdGUgPSBQWEVfU1RBVEZMQUdTX0dFVF9TVEFU RV9TVEFSVEVEOw0KPiArDQo+ICsgIGlmIChOaWMtPlVzYkV0aC0+VXNiRXRoVW5kaS5Vc2JFdGhV bmRpU2h1dGRvd24gIT0gTlVMTCkgew0KPiArICAgIFN0YXR1cyA9IE5pYy0+VXNiRXRoLT5Vc2JF dGhVbmRpLlVzYkV0aFVuZGlTaHV0ZG93biAoQ2RiLCBOaWMpOw0KPiArICAgIGlmIChFRklfRVJS T1IgKFN0YXR1cykpIHsNCj4gKyAgICAgIENkYi0+U3RhdENvZGUgID0gUFhFX1NUQVRDT0RFX05P VF9JTklUSUFMSVpFRDsNCj4gKyAgICAgIENkYi0+U3RhdEZsYWdzID0gUFhFX1NUQVRGTEFHU19D T01NQU5EX0ZBSUxFRDsNCj4gKyAgICB9DQo+ICsgIH0NCj4gK30NCj4gKw0KPiArLyoqDQo+ICsg IFRoZSBJbnRlcnJ1cHQgRW5hYmxlcyBjb21tYW5kIGNhbiBiZSB1c2VkIHRvIHJlYWQgYW5kL29y IGNoYW5nZQ0KPiArICB0aGUgY3VycmVudCBleHRlcm5hbCBpbnRlcnJ1cHQgZW5hYmxlIHNldHRp bmdzLg0KPiArDQo+ICsgIEBwYXJhbVtpbl0gIENkYiAgQSBwb2ludGVyIHRvIHRoZSBjb21tYW5k IGRlc2NyaXB0b3IgYmxvY2suDQo+ICsgIEBwYXJhbVtpbl0gIE5pYyAgQSBwb2ludGVyIHRvIHRo ZSBOZXR3b3JrIGludGVyZmFjZSBjb250cm9sbGVyIGRhdGEuDQo+ICsNCj4gKyoqLw0KPiArVk9J RA0KPiArVW5kaUludGVycnVwdEVuYWJsZSAoDQo+ICsgIElOICBQWEVfQ0RCICAgKkNkYiwNCj4g KyAgSU4gIE5JQ19EQVRBICAqTmljDQo+ICsgICkNCj4gK3sNCj4gKyAgRUZJX1NUQVRVUyAgU3Rh dHVzOw0KPiArDQo+ICsgIENkYi0+U3RhdENvZGUgPSBQWEVfU1RBVENPREVfVU5TVVBQT1JURUQ7 DQo+ICsgIGlmIChOaWMtPlVzYkV0aC0+VXNiRXRoVW5kaS5Vc2JFdGhVbmRpSW50ZXJydXB0RW5h YmxlICE9IE5VTEwpIHsNCj4gKyAgICBTdGF0dXMgPSBOaWMtPlVzYkV0aC0+VXNiRXRoVW5kaS5V c2JFdGhVbmRpSW50ZXJydXB0RW5hYmxlIChDZGIsDQo+IE5pYyk7DQo+ICsgICAgaWYgKEVGSV9F UlJPUiAoU3RhdHVzKSkgew0KPiArICAgICAgQ2RiLT5TdGF0RmxhZ3MgPSBQWEVfU1RBVEZMQUdT X0NPTU1BTkRfRkFJTEVEOw0KPiArICAgIH0gZWxzZSB7DQo+ICsgICAgICBDZGItPlN0YXRGbGFn cyA9IFBYRV9TVEFURkxBR1NfQ09NTUFORF9DT01QTEVURTsNCj4gKyAgICAgIENkYi0+U3RhdENv ZGUgID0gUFhFX1NUQVRDT0RFX1NVQ0NFU1M7DQo+ICsgICAgfQ0KPiArICB9DQo+ICt9DQo+ICsN Cj4gKy8qKg0KPiArICBUaGlzIGNvbW1hbmQgaXMgdXNlZCB0byByZWFkIGFuZCBjaGFuZ2UgcmVj ZWl2ZSBmaWx0ZXJzIGFuZCwNCj4gKyAgaWYgc3VwcG9ydGVkLCByZWFkIGFuZCBjaGFuZ2UgdGhl IG11bHRpY2FzdCBNQUMgYWRkcmVzcyBmaWx0ZXIgbGlzdC4NCj4gKw0KPiArICBAcGFyYW1baW5d ICBDZGIgIEEgcG9pbnRlciB0byB0aGUgY29tbWFuZCBkZXNjcmlwdG9yIGJsb2NrLg0KPiArICBA cGFyYW1baW5dICBOaWMgIEEgcG9pbnRlciB0byB0aGUgTmV0d29yayBpbnRlcmZhY2UgY29udHJv bGxlciBkYXRhLg0KPiArDQo+ICsqKi8NCj4gK1ZPSUQNCj4gK1VuZGlSZWNlaXZlRmlsdGVyICgN Cj4gKyAgSU4gIFBYRV9DREIgICAqQ2RiLA0KPiArICBJTiAgTklDX0RBVEEgICpOaWMNCj4gKyAg KQ0KPiArew0KPiArICBVSU5UMTYgICAgICAgICAgICAgICAgICBOZXdGaWx0ZXI7DQo+ICsgIFBY RV9EQl9SRUNFSVZFX0ZJTFRFUlMgICpEYjsNCj4gKyAgRUZJX1NUQVRVUyAgICAgICAgICAgICAg U3RhdHVzOw0KPiArDQo+ICsgIGlmICgoQ2RiLT5PcENvZGUgIT0gUFhFX09QQ09ERV9SRUNFSVZF X0ZJTFRFUlMpIHx8DQo+ICsgICAgICAoQ2RiLT5TdGF0Q29kZSAhPSBQWEVfU1RBVENPREVfSU5J VElBTElaRSkgfHwNCj4gKyAgICAgIChDZGItPlN0YXRGbGFncyAhPSBQWEVfU1RBVEZMQUdTX0lO SVRJQUxJWkUpIHx8DQo+ICsgICAgICAoQ2RiLT5JRm51bSA+PSAoZ1B4ZS0+SUZjbnQgfCBnUHhl LT5JRmNudEV4dCA8PCA4KSkpDQo+ICsgIHsNCj4gKyAgICBDZGItPlN0YXRGbGFncyA9IFBYRV9T VEFURkxBR1NfQ09NTUFORF9GQUlMRUQ7DQo+ICsgICAgQ2RiLT5TdGF0Q29kZSAgPSBQWEVfU1RB VENPREVfSU5WQUxJRF9DREI7DQo+ICsgICAgcmV0dXJuOw0KPiArICB9IGVsc2Ugew0KPiArICAg IENkYi0+U3RhdEZsYWdzID0gUFhFX1NUQVRGTEFHU19DT01NQU5EX0NPTVBMRVRFOw0KPiArICAg IENkYi0+U3RhdENvZGUgID0gUFhFX1NUQVRDT0RFX1NVQ0NFU1M7DQo+ICsgIH0NCj4gKw0KPiAr ICBpZiAoTmljLT5TdGF0ZSAhPSBQWEVfU1RBVEZMQUdTX0dFVF9TVEFURV9JTklUSUFMSVpFRCkg ew0KPiArICAgIENkYi0+U3RhdENvZGUgID0gUFhFX1NUQVRDT0RFX05PVF9JTklUSUFMSVpFRDsN Cj4gKyAgICBDZGItPlN0YXRGbGFncyA9IFBYRV9TVEFURkxBR1NfQ09NTUFORF9GQUlMRUQ7DQo+ ICsgICAgcmV0dXJuOw0KPiArICB9DQo+ICsNCj4gKyAgTmV3RmlsdGVyID0gKFVJTlQxNikoQ2Ri LT5PcEZsYWdzICYgMHgxRik7DQo+ICsNCj4gKyAgc3dpdGNoIChDZGItPk9wRmxhZ3MgJiBQWEVf T1BGTEFHU19SRUNFSVZFX0ZJTFRFUl9PUE1BU0spIHsNCj4gKyAgICBjYXNlIFBYRV9PUEZMQUdT X1JFQ0VJVkVfRklMVEVSX1JFQUQ6DQo+ICsgICAgICBpZiAoQ2RiLT5DUEJzaXplICE9IFBYRV9D UEJTSVpFX05PVF9VU0VEKSB7DQo+ICsgICAgICAgIENkYi0+U3RhdEZsYWdzID0gUFhFX1NUQVRG TEFHU19DT01NQU5EX0ZBSUxFRDsNCj4gKyAgICAgICAgQ2RiLT5TdGF0Q29kZSAgPSBQWEVfU1RB VENPREVfSU5WQUxJRF9DREI7DQo+ICsgICAgICB9DQo+ICsNCj4gKyAgICAgIGlmICgoTmV3Rmls dGVyICYgUFhFX09QRkxBR1NfUkVDRUlWRV9GSUxURVJfUkVTRVRfTUNBU1RfTElTVCkgPT0NCj4g MCkgew0KPiArICAgICAgICBpZiAoKENkYi0+REJzaXplICE9IDApKSB7DQo+ICsgICAgICAgICAg RGIgPSAoUFhFX0RCX1JFQ0VJVkVfRklMVEVSUyAqKShVSU5UTilDZGItPkRCYWRkcjsNCj4gKyAg ICAgICAgICBDb3B5TWVtIChEYiwgJk5pYy0+TWNhc3RMaXN0LCBOaWMtPk1jYXN0Q291bnQpOw0K PiArICAgICAgICB9DQo+ICsgICAgICB9DQo+ICsNCj4gKyAgICAgIGJyZWFrOw0KPiArDQo+ICsg ICAgY2FzZSBQWEVfT1BGTEFHU19SRUNFSVZFX0ZJTFRFUl9FTkFCTEU6DQo+ICsgICAgICBpZiAo TmV3RmlsdGVyID09IDApIHsNCj4gKyAgICAgICAgQ2RiLT5TdGF0RmxhZ3MgPSBQWEVfU1RBVEZM QUdTX0NPTU1BTkRfRkFJTEVEOw0KPiArICAgICAgfQ0KPiArDQo+ICsgICAgICBpZiAoQ2RiLT5D UEJzaXplICE9IDApIHsNCj4gKyAgICAgICAgaWYgKCgoTmV3RmlsdGVyICYgUFhFX09QRkxBR1Nf UkVDRUlWRV9GSUxURVJfRklMVEVSRURfTVVMVElDQVNUKQ0KPiA9PSAwKSB8fA0KPiArICAgICAg ICAgICAgKChOZXdGaWx0ZXIgJg0KPiBQWEVfT1BGTEFHU19SRUNFSVZFX0ZJTFRFUl9SRVNFVF9N Q0FTVF9MSVNUKSAhPSAwKSB8fA0KPiArICAgICAgICAgICAgKChOZXdGaWx0ZXIgJiBQWEVfT1BG TEFHU19SRUNFSVZFX0ZJTFRFUl9BTExfTVVMVElDQVNUKSAhPSAwKQ0KPiB8fA0KPiArICAgICAg ICAgICAgKChDZGItPkNQQnNpemUgJSBzaXplb2YgKFBYRV9NQUNfQUREUikpICE9IDApKQ0KPiAr ICAgICAgICB7DQo+ICsgICAgICAgICAgQ2RiLT5TdGF0RmxhZ3MgPSBQWEVfU1RBVEZMQUdTX0NP TU1BTkRfRkFJTEVEOw0KPiArICAgICAgICB9DQo+ICsgICAgICB9DQo+ICsNCj4gKyAgICAgIGlm ICgoQ2RiLT5PcEZsYWdzICYNCj4gUFhFX09QRkxBR1NfUkVDRUlWRV9GSUxURVJfRklMVEVSRURf TVVMVElDQVNUKSAhPSAwKSB7DQo+ICsgICAgICAgIGlmICgoKENkYi0+T3BGbGFncyAmDQo+IFBY RV9PUEZMQUdTX1JFQ0VJVkVfRklMVEVSX1JFU0VUX01DQVNUX0xJU1QpICE9IDApIHx8DQo+ICsg ICAgICAgICAgICAoKENkYi0+T3BGbGFncyAmDQo+IFBYRV9PUEZMQUdTX1JFQ0VJVkVfRklMVEVS X0FMTF9NVUxUSUNBU1QpICE9IDApKQ0KPiArICAgICAgICB7DQo+ICsgICAgICAgICAgQ2RiLT5T dGF0RmxhZ3MgPSBQWEVfU1RBVEZMQUdTX0NPTU1BTkRfRkFJTEVEOw0KPiArICAgICAgICB9DQo+ ICsNCj4gKyAgICAgICAgaWYgKChDZGItPkNQQnNpemUgPT0gMCkpIHsNCj4gKyAgICAgICAgICBD ZGItPlN0YXRGbGFncyA9IFBYRV9TVEFURkxBR1NfQ09NTUFORF9GQUlMRUQ7DQo+ICsgICAgICAg IH0NCj4gKyAgICAgIH0NCj4gKw0KPiArICAgICAgQ2RiLT5TdGF0Q29kZSA9IFNldGZpbHRlciAo TmljLCBOZXdGaWx0ZXIsIENkYi0+Q1BCYWRkciwgQ2RiLT5DUEJzaXplKTsNCj4gKyAgICAgIGJy ZWFrOw0KPiArDQo+ICsgICAgY2FzZSBQWEVfT1BGTEFHU19SRUNFSVZFX0ZJTFRFUl9ESVNBQkxF Og0KPiArICAgICAgaWYgKENkYi0+Q1BCc2l6ZSAhPSBQWEVfQ1BCU0laRV9OT1RfVVNFRCkgew0K PiArICAgICAgICBDZGItPlN0YXRGbGFncyA9IFBYRV9TVEFURkxBR1NfQ09NTUFORF9GQUlMRUQ7 DQo+ICsgICAgICAgIENkYi0+U3RhdENvZGUgID0gUFhFX1NUQVRDT0RFX0lOVkFMSURfQ0RCOw0K PiArICAgICAgfQ0KPiArDQo+ICsgICAgICBOaWMtPkNhblJlY2VpdmUgPSBUUlVFOw0KPiArICAg ICAgYnJlYWs7DQo+ICsNCj4gKyAgICBkZWZhdWx0Og0KPiArICAgICAgQ2RiLT5TdGF0RmxhZ3Mg PSBQWEVfU1RBVEZMQUdTX0NPTU1BTkRfRkFJTEVEOw0KPiArICAgICAgQ2RiLT5TdGF0Q29kZSAg PSBQWEVfU1RBVENPREVfSU5WQUxJRF9DREI7DQo+ICsgIH0NCj4gKw0KPiArICBpZiAoTmljLT5D YW5SZWNlaXZlKSB7DQo+ICsgICAgQ2RiLT5TdGF0RmxhZ3MgPSAoUFhFX1NUQVRGTEFHUykoQ2Ri LT5TdGF0RmxhZ3MgfCBOaWMtPlJ4RmlsdGVyKTsNCj4gKyAgfQ0KPiArDQo+ICsgIGlmIChOaWMt PlVzYkV0aC0+VXNiRXRoVW5kaS5Vc2JFdGhVbmRpUmVjZWl2ZUZpbHRlciAhPSBOVUxMKSB7DQo+ ICsgICAgU3RhdHVzID0gTmljLT5Vc2JFdGgtPlVzYkV0aFVuZGkuVXNiRXRoVW5kaVJlY2VpdmVG aWx0ZXIgKENkYiwgTmljKTsNCj4gKyAgICBpZiAoRUZJX0VSUk9SIChTdGF0dXMpKSB7DQo+ICsg ICAgICBDZGItPlN0YXRGbGFncyA9IFBYRV9TVEFURkxBR1NfQ09NTUFORF9GQUlMRUQ7DQo+ICsg ICAgfQ0KPiArICB9DQo+ICt9DQo+ICsNCj4gKy8qKg0KPiArICBTZXQgUFhFIHJlY2VpdmUgZmls dGVyLg0KPiArDQo+ICsgIEBwYXJhbVtpbl0gIE5pYyAgICAgICAgIEEgcG9pbnRlciB0byB0aGUg TmV0d29yayBpbnRlcmZhY2UgY29udHJvbGxlciBkYXRhLg0KPiArICBAcGFyYW1baW5dICBTZXRG aWx0ZXIgICBQWEUgcmVjZWl2ZSBmaWx0ZXINCj4gKyAgQHBhcmFtW2luXSAgQ3BiQWRkciAgICAg Q29tbWFuZCBQYXJhbWV0ZXIgQmxvY2sgQWRkcmVzcw0KPiArICBAcGFyYW1baW5dICBDcGJTaXpl ICAgICBDb21tYW5kIFBhcmFtZXRlciBCbG9jayBTaXplDQo+ICsNCj4gKyoqLw0KPiArVUlOVDE2 DQo+ICtTZXRmaWx0ZXIgKA0KPiArICBJTiAgTklDX0RBVEEgICpOaWMsDQo+ICsgIElOICBVSU5U MTYgICAgU2V0RmlsdGVyLA0KPiArICBJTiAgVUlOVDY0ICAgIENwYkFkZHIsDQo+ICsgIElOICBV SU5UMzIgICAgQ3BiU2l6ZQ0KPiArICApDQo+ICt7DQo+ICsgIEVGSV9TVEFUVVMgICAgICAgICAg ICAgICAgICAgU3RhdHVzOw0KPiArICBVSU5UOCAgICAgICAgICAgICAgICAgICAgICAgICpNY2Fz dExpc3Q7DQo+ICsgIFVJTlQ4ICAgICAgICAgICAgICAgICAgICAgICAgQ291bnQgPSAwOw0KPiAr ICBVSU5UOCAgICAgICAgICAgICAgICAgICAgICAgIEluZGV4MTsNCj4gKyAgVUlOVDggICAgICAg ICAgICAgICAgICAgICAgICBJbmRleDI7DQo+ICsgIFBYRV9DUEJfUkVDRUlWRV9GSUxURVJTICAg ICAgKkNwYiA9IChQWEVfQ1BCX1JFQ0VJVkVfRklMVEVSUw0KPiAqKShVSU5UTilDcGJBZGRyOw0K PiArICBVU0JfRVRIRVJORVRfRlVOX0RFU0NSSVBUT1IgIFVzYkV0aEZ1bkRlc2NyaXB0b3I7DQo+ ICsNCj4gKyAgLy8gVGhlIENwYiBjb3VsZCBiZSBOVUxMLihyZWY6UFhFX0NQQkFERFJfTk9UX1VT RUQpDQo+ICsgIE5pYy0+UnhGaWx0ZXIgPSAoVUlOVDgpU2V0RmlsdGVyOw0KPiArDQo+ICsgIGlm ICgoKFNldEZpbHRlciAmIFBYRV9PUEZMQUdTX1JFQ0VJVkVfRklMVEVSX0ZJTFRFUkVEX01VTFRJ Q0FTVCkgIT0NCj4gMCkgfHwgKENwYiAhPSBOVUxMKSkgew0KPiArICAgIGlmIChDcGIgIT0gTlVM TCkgew0KPiArICAgICAgTmljLT5NY2FzdENvdW50ID0gKFVJTlQ4KShDcGJTaXplIC8gUFhFX01B Q19MRU5HVEgpOw0KPiArICAgICAgQ29weU1lbSAoJk5pYy0+TWNhc3RMaXN0LCBDcGIsIE5pYy0+ TWNhc3RDb3VudCk7DQo+ICsgICAgfQ0KPiArDQo+ICsgICAgaWYgKE5pYy0+Q2FuUmVjZWl2ZSkg ew0KPiArICAgICAgTmljLT5DYW5SZWNlaXZlID0gRkFMU0U7DQo+ICsgICAgfQ0KPiArDQo+ICsg ICAgTmljLT5Vc2JFdGgtPlVzYkV0aEZ1bkRlc2NyaXB0b3IgKE5pYy0+VXNiRXRoLA0KPiAmVXNi RXRoRnVuRGVzY3JpcHRvcik7DQo+ICsgICAgaWYgKChVc2JFdGhGdW5EZXNjcmlwdG9yLk51bWJl ck1jRmlsdGVycyA8PCAxKSA9PSAwKSB7DQo+ICsgICAgICBOaWMtPlJ4RmlsdGVyIHw9IFBYRV9P UEZMQUdTX1JFQ0VJVkVfRklMVEVSX0FMTF9NVUxUSUNBU1Q7DQo+ICsgICAgICBOaWMtPlVzYkV0 aC0+U2V0VXNiRXRoUGFja2V0RmlsdGVyIChOaWMtPlVzYkV0aCwgTmljLT5SeEZpbHRlcik7DQo+ ICsgICAgfSBlbHNlIHsNCj4gKyAgICAgIFN0YXR1cyA9IGdCUy0+QWxsb2NhdGVQb29sIChFZmlC b290U2VydmljZXNEYXRhLCBOaWMtPk1jYXN0Q291bnQgKiA2LA0KPiAoVk9JRCAqKikmTWNhc3RM aXN0KTsNCj4gKyAgICAgIGlmIChFRklfRVJST1IgKFN0YXR1cykpIHsNCj4gKyAgICAgICAgcmV0 dXJuIFBYRV9TVEFUQ09ERV9JTlZBTElEX1BBUkFNRVRFUjsNCj4gKyAgICAgIH0NCj4gKw0KPiAr ICAgICAgaWYgKENwYiAhPSBOVUxMKSB7DQo+ICsgICAgICAgIGZvciAoSW5kZXgxID0gMDsgSW5k ZXgxIDwgTmljLT5NY2FzdENvdW50OyBJbmRleDErKykgew0KPiArICAgICAgICAgIGZvciAoSW5k ZXgyID0gMDsgSW5kZXgyIDwgNjsgSW5kZXgyKyspIHsNCj4gKyAgICAgICAgICAgIE1jYXN0TGlz dFtDb3VudCsrXSA9IENwYi0+TUNhc3RMaXN0W0luZGV4MV1bSW5kZXgyXTsNCj4gKyAgICAgICAg ICB9DQo+ICsgICAgICAgIH0NCj4gKyAgICAgIH0NCj4gKw0KPiArICAgICAgTmljLT5SeEZpbHRl ciB8PSBQWEVfT1BGTEFHU19SRUNFSVZFX0ZJTFRFUl9GSUxURVJFRF9NVUxUSUNBU1Q7DQo+ICsg ICAgICBpZiAoQ3BiICE9IE5VTEwpIHsNCj4gKyAgICAgICAgTmljLT5Vc2JFdGgtPlNldFVzYkV0 aE1jYXN0RmlsdGVyIChOaWMtPlVzYkV0aCwgTmljLT5NY2FzdENvdW50LA0KPiBNY2FzdExpc3Qp Ow0KPiArICAgICAgfQ0KPiArDQo+ICsgICAgICBOaWMtPlVzYkV0aC0+U2V0VXNiRXRoUGFja2V0 RmlsdGVyIChOaWMtPlVzYkV0aCwgTmljLT5SeEZpbHRlcik7DQo+ICsgICAgICBnQlMtPkZyZWVQ b29sIChNY2FzdExpc3QpOw0KPiArICAgIH0NCj4gKyAgfQ0KPiArDQo+ICsgIHJldHVybiBQWEVf U1RBVENPREVfU1VDQ0VTUzsNCj4gK30NCj4gKw0KPiArLyoqDQo+ICsgIFRoaXMgY29tbWFuZCBp cyB1c2VkIHRvIGdldCBjdXJyZW50IHN0YXRpb24gYW5kIGJyb2FkY2FzdCBNQUMgYWRkcmVzc2Vz DQo+ICsgIGFuZCwgaWYgc3VwcG9ydGVkLCB0byBjaGFuZ2UgdGhlIGN1cnJlbnQgc3RhdGlvbiBN QUMgYWRkcmVzcy4NCj4gKw0KPiArICBAcGFyYW1baW5dICBDZGIgIEEgcG9pbnRlciB0byB0aGUg Y29tbWFuZCBkZXNjcmlwdG9yIGJsb2NrLg0KPiArICBAcGFyYW1baW5dICBOaWMgIEEgcG9pbnRl ciB0byB0aGUgTmV0d29yayBpbnRlcmZhY2UgY29udHJvbGxlciBkYXRhLg0KPiArDQo+ICsqKi8N Cj4gK1ZPSUQNCj4gK1VuZGlTdGF0aW9uQWRkcmVzcyAoDQo+ICsgIElOICBQWEVfQ0RCICAgKkNk YiwNCj4gKyAgSU4gIE5JQ19EQVRBICAqTmljDQo+ICsgICkNCj4gK3sNCj4gKyAgUFhFX0NQQl9T VEFUSU9OX0FERFJFU1MgICpDcGI7DQo+ICsgIFBYRV9EQl9TVEFUSU9OX0FERFJFU1MgICAqRGI7 DQo+ICsgIFVJTlQxNiAgICAgICAgICAgICAgICAgICBJbmRleDsNCj4gKyAgRUZJX1NUQVRVUyAg ICAgICAgICAgICAgIFN0YXR1czsNCj4gKw0KPiArICBpZiAoKENkYi0+T3BDb2RlICE9IFBYRV9P UENPREVfU1RBVElPTl9BRERSRVNTKSB8fA0KPiArICAgICAgKENkYi0+U3RhdENvZGUgIT0gUFhF X1NUQVRDT0RFX0lOSVRJQUxJWkUpIHx8DQo+ICsgICAgICAoQ2RiLT5TdGF0RmxhZ3MgIT0gUFhF X1NUQVRGTEFHU19JTklUSUFMSVpFKSB8fA0KPiArICAgICAgKENkYi0+SUZudW0gPj0gKGdQeGUt PklGY250IHwgZ1B4ZS0+SUZjbnRFeHQgPDwgOCkpIHx8DQo+ICsgICAgICAoQ2RiLT5EQnNpemUg IT0gc2l6ZW9mIChQWEVfREJfU1RBVElPTl9BRERSRVNTKSkpDQo+ICsgIHsNCj4gKyAgICBDZGIt PlN0YXRGbGFncyA9IFBYRV9TVEFURkxBR1NfQ09NTUFORF9GQUlMRUQ7DQo+ICsgICAgQ2RiLT5T dGF0Q29kZSAgPSBQWEVfU1RBVENPREVfSU5WQUxJRF9DREI7DQo+ICsgICAgcmV0dXJuOw0KPiAr ICB9IGVsc2Ugew0KPiArICAgIENkYi0+U3RhdEZsYWdzID0gUFhFX1NUQVRGTEFHU19DT01NQU5E X0NPTVBMRVRFOw0KPiArICAgIENkYi0+U3RhdENvZGUgID0gUFhFX1NUQVRDT0RFX1NVQ0NFU1M7 DQo+ICsgIH0NCj4gKw0KPiArICBpZiAoTmljLT5TdGF0ZSAhPSBQWEVfU1RBVEZMQUdTX0dFVF9T VEFURV9JTklUSUFMSVpFRCkgew0KPiArICAgIENkYi0+U3RhdENvZGUgID0gUFhFX1NUQVRDT0RF X05PVF9JTklUSUFMSVpFRDsNCj4gKyAgICBDZGItPlN0YXRGbGFncyA9IFBYRV9TVEFURkxBR1Nf Q09NTUFORF9GQUlMRUQ7DQo+ICsgICAgcmV0dXJuOw0KPiArICB9DQo+ICsNCj4gKyAgaWYgKENk Yi0+T3BGbGFncyA9PSBQWEVfT1BGTEFHU19TVEFUSU9OX0FERFJFU1NfUkVTRVQpIHsNCj4gKyAg ICBpZiAoQ29tcGFyZU1lbSAoJk5pYy0+Q3VycmVudE5vZGVBZGRyZXNzWzBdLCAmTmljLQ0KPiA+ UGVybU5vZGVBZGRyZXNzWzBdLCBQWEVfTUFDX0xFTkdUSCkgIT0gMCkgew0KPiArICAgICAgZm9y IChJbmRleCA9IDA7IEluZGV4IDwgUFhFX01BQ19MRU5HVEg7IEluZGV4KyspIHsNCj4gKyAgICAg ICAgTmljLT5DdXJyZW50Tm9kZUFkZHJlc3NbSW5kZXhdID0gTmljLT5QZXJtTm9kZUFkZHJlc3Nb SW5kZXhdOw0KPiArICAgICAgfQ0KPiArICAgIH0NCj4gKyAgfQ0KPiArDQo+ICsgIGlmIChDZGIt PkNQQmFkZHIgIT0gMCkgew0KPiArICAgIENwYiA9IChQWEVfQ1BCX1NUQVRJT05fQUREUkVTUyAq KShVSU5UTilDZGItPkNQQmFkZHI7DQo+ICsgICAgZm9yIChJbmRleCA9IDA7IEluZGV4IDwgUFhF X01BQ19MRU5HVEg7IEluZGV4KyspIHsNCj4gKyAgICAgIE5pYy0+Q3VycmVudE5vZGVBZGRyZXNz W0luZGV4XSA9IENwYi0+U3RhdGlvbkFkZHJbSW5kZXhdOw0KPiArICAgIH0NCj4gKyAgfQ0KPiAr DQo+ICsgIGlmIChDZGItPkRCYWRkciAhPSAwKSB7DQo+ICsgICAgRGIgPSAoUFhFX0RCX1NUQVRJ T05fQUREUkVTUyAqKShVSU5UTilDZGItPkRCYWRkcjsNCj4gKyAgICBmb3IgKEluZGV4ID0gMDsg SW5kZXggPCBQWEVfTUFDX0xFTkdUSDsgSW5kZXgrKykgew0KPiArICAgICAgRGItPlN0YXRpb25B ZGRyW0luZGV4XSAgID0gTmljLT5DdXJyZW50Tm9kZUFkZHJlc3NbSW5kZXhdOw0KPiArICAgICAg RGItPkJyb2FkY2FzdEFkZHJbSW5kZXhdID0gTmljLT5Ccm9hZGNhc3ROb2RlQWRkcmVzc1tJbmRl eF07DQo+ICsgICAgICBEYi0+UGVybWFuZW50QWRkcltJbmRleF0gPSBOaWMtPlBlcm1Ob2RlQWRk cmVzc1tJbmRleF07DQo+ICsgICAgfQ0KPiArICB9DQo+ICsNCj4gKyAgaWYgKE5pYy0+VXNiRXRo LT5Vc2JFdGhVbmRpLlVzYkV0aFVuZGlTdGF0aW9uQWRkcmVzcyAhPSBOVUxMKSB7DQo+ICsgICAg U3RhdHVzID0gTmljLT5Vc2JFdGgtPlVzYkV0aFVuZGkuVXNiRXRoVW5kaVN0YXRpb25BZGRyZXNz IChDZGIsIE5pYyk7DQo+ICsgICAgaWYgKEVGSV9FUlJPUiAoU3RhdHVzKSkgew0KPiArICAgICAg Q2RiLT5TdGF0RmxhZ3MgPSBQWEVfU1RBVEZMQUdTX0NPTU1BTkRfRkFJTEVEOw0KPiArICAgIH0N Cj4gKyAgfQ0KPiArfQ0KPiArDQo+ICsvKioNCj4gKyAgVGhpcyBjb21tYW5kIGlzIHVzZWQgdG8g cmVhZCBhbmQgY2xlYXIgdGhlIE5JQyB0cmFmZmljIHN0YXRpc3RpY3MuDQo+ICsNCj4gKyAgQHBh cmFtW2luXSAgQ2RiICBBIHBvaW50ZXIgdG8gdGhlIGNvbW1hbmQgZGVzY3JpcHRvciBibG9jay4N Cj4gKyAgQHBhcmFtW2luXSAgTmljICBBIHBvaW50ZXIgdG8gdGhlIE5ldHdvcmsgaW50ZXJmYWNl IGNvbnRyb2xsZXIgZGF0YS4NCj4gKw0KPiArKiovDQo+ICtWT0lEDQo+ICtVbmRpU3RhdGlzdGlj cyAoDQo+ICsgIElOICBQWEVfQ0RCICAgKkNkYiwNCj4gKyAgSU4gIE5JQ19EQVRBICAqTmljDQo+ ICsgICkNCj4gK3sNCj4gKyAgRUZJX1NUQVRVUyAgU3RhdHVzOw0KPiArDQo+ICsgIGlmICgoQ2Ri LT5PcENvZGUgIT0gUFhFX09QQ09ERV9TVEFUSVNUSUNTKSB8fA0KPiArICAgICAgKENkYi0+U3Rh dENvZGUgIT0gUFhFX1NUQVRDT0RFX0lOSVRJQUxJWkUpIHx8DQo+ICsgICAgICAoQ2RiLT5TdGF0 RmxhZ3MgIT0gUFhFX1NUQVRGTEFHU19JTklUSUFMSVpFKSB8fA0KPiArICAgICAgKENkYi0+SUZu dW0gPj0gKGdQeGUtPklGY250IHwgZ1B4ZS0+SUZjbnRFeHQgPDwgOCkpIHx8DQo+ICsgICAgICAo Q2RiLT5DUEJzaXplICE9IFBYRV9DUEJTSVpFX05PVF9VU0VEKSB8fA0KPiArICAgICAgKENkYi0+ Q1BCYWRkciAhPSBQWEVfQ1BCQUREUl9OT1RfVVNFRCkpDQo+ICsgIHsNCj4gKyAgICBDZGItPlN0 YXRGbGFncyA9IFBYRV9TVEFURkxBR1NfQ09NTUFORF9GQUlMRUQ7DQo+ICsgICAgQ2RiLT5TdGF0 Q29kZSAgPSBQWEVfU1RBVENPREVfSU5WQUxJRF9DREI7DQo+ICsgICAgcmV0dXJuOw0KPiArICB9 IGVsc2Ugew0KPiArICAgIENkYi0+U3RhdEZsYWdzID0gUFhFX1NUQVRGTEFHU19DT01NQU5EX0NP TVBMRVRFOw0KPiArICB9DQo+ICsNCj4gKyAgaWYgKE5pYy0+U3RhdGUgIT0gUFhFX1NUQVRGTEFH U19HRVRfU1RBVEVfSU5JVElBTElaRUQpIHsNCj4gKyAgICBDZGItPlN0YXRDb2RlICA9IFBYRV9T VEFUQ09ERV9OT1RfSU5JVElBTElaRUQ7DQo+ICsgICAgQ2RiLT5TdGF0RmxhZ3MgPSBQWEVfU1RB VEZMQUdTX0NPTU1BTkRfRkFJTEVEOw0KPiArICAgIHJldHVybjsNCj4gKyAgfQ0KPiArDQo+ICsg IGlmICgoQ2RiLT5PcEZsYWdzICE9IFBYRV9PUEZMQUdTX1NUQVRJU1RJQ1NfUkVTRVQpICYmDQo+ ICsgICAgICAoQ2RiLT5PcEZsYWdzICE9IFBYRV9PUEZMQUdTX1NUQVRJU1RJQ1NfUkVBRCkpDQo+ ICsgIHsNCj4gKyAgICBDZGItPlN0YXRGbGFncyA9IFBYRV9TVEFURkxBR1NfQ09NTUFORF9GQUlM RUQ7DQo+ICsgICAgQ2RiLT5TdGF0Q29kZSAgPSBQWEVfU1RBVENPREVfSU5WQUxJRF9DREI7DQo+ ICsgICAgcmV0dXJuOw0KPiArICB9DQo+ICsNCj4gKyAgQ2RiLT5TdGF0Q29kZSA9IFN0YXRpc3Rp Y3MgKE5pYywgQ2RiLT5EQmFkZHIsIENkYi0+REJzaXplKTsNCj4gKw0KPiArICBpZiAoTmljLT5V c2JFdGgtPlVzYkV0aFVuZGkuVXNiRXRoVW5kaVN0YXRpc3RpY3MgIT0gTlVMTCkgew0KPiArICAg IFN0YXR1cyA9IE5pYy0+VXNiRXRoLT5Vc2JFdGhVbmRpLlVzYkV0aFVuZGlTdGF0aXN0aWNzIChD ZGIsIE5pYyk7DQo+ICsgICAgaWYgKEVGSV9FUlJPUiAoU3RhdHVzKSkgew0KPiArICAgICAgQ2Ri LT5TdGF0RmxhZ3MgPSBQWEVfU1RBVEZMQUdTX0NPTU1BTkRfRkFJTEVEOw0KPiArICAgIH0NCj4g KyAgfQ0KPiArfQ0KPiArDQo+ICsvKioNCj4gKyAgUmV0dXJuIGRhdGEgZm9yIERCIGRhdGEuDQo+ ICsNCj4gKyAgQHBhcmFtW2luXSAgTmljICAgICAgQSBwb2ludGVyIHRvIHRoZSBOZXR3b3JrIGlu dGVyZmFjZSBjb250cm9sbGVyIGRhdGEuDQo+ICsgIEBwYXJhbVtpbl0gIERiQWRkciAgIERhdGEg QmxvY2sgQWRkcmVzcy4NCj4gKyAgQHBhcmFtW2luXSAgRGJTaXplICAgRGF0YSBCbG9jayBTaXpl Lg0KPiArDQo+ICsqKi8NCj4gK1VJTlQxNg0KPiArU3RhdGlzdGljcyAoDQo+ICsgIElOIE5JQ19E QVRBICAqTmljLA0KPiArICBJTiBVSU5UNjQgICAgRGJBZGRyLA0KPiArICBJTiBVSU5UMTYgICAg RGJTaXplDQo+ICsgICkNCj4gK3sNCj4gKyAgUFhFX0RCX1NUQVRJU1RJQ1MgICpEYlN0YXRpc3Rp YzsNCj4gKyAgRUZJX1NUQVRVUyAgICAgICAgIFN0YXR1czsNCj4gKw0KPiArICBEYlN0YXRpc3Rp YyA9IChQWEVfREJfU1RBVElTVElDUyAqKShVSU5UTilEYkFkZHI7DQo+ICsNCj4gKyAgaWYgKERi U2l6ZSA9PSAwKSB7DQo+ICsgICAgcmV0dXJuIFBYRV9TVEFUQ09ERV9TVUNDRVNTOw0KPiArICB9 DQo+ICsNCj4gKyAgRGJTdGF0aXN0aWMtPlN1cHBvcnRlZCAgPSAweDgwMjsNCj4gKyAgRGJTdGF0 aXN0aWMtPkRhdGFbMHgwMV0gPSBOaWMtPlJ4RnJhbWU7DQo+ICsgIERiU3RhdGlzdGljLT5EYXRh WzB4MEJdID0gTmljLT5UeEZyYW1lOw0KPiArDQo+ICsgIGlmIChOaWMtPlVzYkV0aC0+VXNiRXRo U3RhdGlzdGljcyAhPSBOVUxMKSB7DQo+ICsgICAgU3RhdHVzID0gTmljLT5Vc2JFdGgtPlVzYkV0 aFN0YXRpc3RpY3MgKE5pYywgRGJBZGRyLCBEYlNpemUpOw0KPiArICAgIGlmIChFRklfRVJST1Ig KFN0YXR1cykpIHsNCj4gKyAgICAgIHJldHVybiBQWEVfU1RBVEZMQUdTX0NPTU1BTkRfRkFJTEVE Ow0KPiArICAgIH0NCj4gKyAgfQ0KPiArDQo+ICsgIHJldHVybiBQWEVfU1RBVENPREVfU1VDQ0VT UzsNCj4gK30NCj4gKw0KPiArLyoqDQo+ICsgIFRyYW5zbGF0ZSBhIG11bHRpY2FzdCBJUHY0IG9y IElQdjYgYWRkcmVzcyB0byBhIG11bHRpY2FzdCBNQUMgYWRkcmVzcy4NCj4gKw0KPiArICBAcGFy YW1baW4sIG91dF0gQ2RiICBBIHBvaW50ZXIgdG8gdGhlIGNvbW1hbmQgZGVzY3JpcHRvciBibG9j ay4NCj4gKyAgQHBhcmFtW2luXSAgICAgIE5pYyAgQSBwb2ludGVyIHRvIHRoZSBOZXR3b3JrIGlu dGVyZmFjZSBjb250cm9sbGVyIGRhdGEuDQo+ICsNCj4gKyoqLw0KPiArVk9JRA0KPiArVW5kaU1j YXN0SXAyTWFjICgNCj4gKyAgSU4gT1VUICBQWEVfQ0RCICAgKkNkYiwNCj4gKyAgSU4gICAgICBO SUNfREFUQSAgKk5pYw0KPiArICApDQo+ICt7DQo+ICsgIFBYRV9DUEJfTUNBU1RfSVBfVE9fTUFD ICAqQ3BiOw0KPiArICBQWEVfREJfTUNBU1RfSVBfVE9fTUFDICAgKkRiOw0KPiArICBVSU5UOCAg ICAgICAgICAgICAgICAgICAgKlRtcDsNCj4gKyAgRUZJX1NUQVRVUyAgICAgICAgICAgICAgIFN0 YXR1czsNCj4gKw0KPiArICBpZiAoKENkYi0+T3BDb2RlICE9IFBYRV9PUENPREVfTUNBU1RfSVBf VE9fTUFDKSB8fA0KPiArICAgICAgKENkYi0+U3RhdENvZGUgIT0gUFhFX1NUQVRDT0RFX0lOSVRJ QUxJWkUpIHx8DQo+ICsgICAgICAoQ2RiLT5TdGF0RmxhZ3MgIT0gUFhFX1NUQVRGTEFHU19JTklU SUFMSVpFKSB8fA0KPiArICAgICAgKENkYi0+SUZudW0gPj0gKGdQeGUtPklGY250IHwgZ1B4ZS0+ SUZjbnRFeHQgPDwgOCkpIHx8DQo+ICsgICAgICAoQ2RiLT5DUEJzaXplICE9IHNpemVvZiAoUFhF X0NQQl9NQ0FTVF9JUF9UT19NQUMpKSB8fA0KPiArICAgICAgKENkYi0+REJzaXplICE9IHNpemVv ZiAoUFhFX0RCX01DQVNUX0lQX1RPX01BQykpKQ0KPiArICB7DQo+ICsgICAgQ2RiLT5TdGF0Rmxh Z3MgPSBQWEVfU1RBVEZMQUdTX0NPTU1BTkRfRkFJTEVEOw0KPiArICAgIENkYi0+U3RhdENvZGUg ID0gUFhFX1NUQVRDT0RFX0lOVkFMSURfQ0RCOw0KPiArICAgIHJldHVybjsNCj4gKyAgfSBlbHNl IHsNCj4gKyAgICBDZGItPlN0YXRGbGFncyA9IFBYRV9TVEFURkxBR1NfQ09NTUFORF9DT01QTEVU RTsNCj4gKyAgICBDZGItPlN0YXRDb2RlICA9IFBYRV9TVEFUQ09ERV9TVUNDRVNTOw0KPiArICB9 DQo+ICsNCj4gKyAgaWYgKE5pYy0+U3RhdGUgIT0gUFhFX1NUQVRGTEFHU19HRVRfU1RBVEVfSU5J VElBTElaRUQpIHsNCj4gKyAgICBDZGItPlN0YXRDb2RlICA9IFBYRV9TVEFUQ09ERV9OT1RfSU5J VElBTElaRUQ7DQo+ICsgICAgQ2RiLT5TdGF0RmxhZ3MgPSBQWEVfU1RBVEZMQUdTX0NPTU1BTkRf RkFJTEVEOw0KPiArICAgIHJldHVybjsNCj4gKyAgfQ0KPiArDQo+ICsgIENwYiA9IChQWEVfQ1BC X01DQVNUX0lQX1RPX01BQyAqKShVSU5UTilDZGItPkNQQmFkZHI7DQo+ICsgIERiICA9IChQWEVf REJfTUNBU1RfSVBfVE9fTUFDICopKFVJTlROKUNkYi0+REJhZGRyOw0KPiArDQo+ICsgIGlmICgo Q2RiLT5PcEZsYWdzICYgUFhFX09QRkxBR1NfTUNBU1RfSVBWNl9UT19NQUMpICE9IDApIHsNCj4g KyAgICBDZGItPlN0YXRGbGFncyA9IFBYRV9TVEFURkxBR1NfQ09NTUFORF9GQUlMRUQ7DQo+ICsg ICAgQ2RiLT5TdGF0Q29kZSAgPSBQWEVfU1RBVENPREVfVU5TVVBQT1JURUQ7DQo+ICsgICAgcmV0 dXJuOw0KPiArICB9DQo+ICsNCj4gKyAgVG1wID0gKFVJTlQ4ICopKCZDcGItPklQLklQdjQpOw0K PiArDQo+ICsgIGlmICgoVG1wWzBdICYgMHhGMCkgIT0gMHhFMCkgew0KPiArICAgIENkYi0+U3Rh dEZsYWdzID0gUFhFX1NUQVRGTEFHU19DT01NQU5EX0ZBSUxFRDsNCj4gKyAgICBDZGItPlN0YXRD b2RlICA9IFBYRV9TVEFUQ09ERV9JTlZBTElEX0NQQjsNCj4gKyAgfQ0KPiArDQo+ICsgIERiLT5N QUNbMF0gPSAweDAxOw0KPiArICBEYi0+TUFDWzFdID0gMHgwMDsNCj4gKyAgRGItPk1BQ1syXSA9 IDB4NUU7DQo+ICsgIERiLT5NQUNbM10gPSBUbXBbMV0gJiAweDdGOw0KPiArICBEYi0+TUFDWzRd ID0gVG1wWzJdOw0KPiArICBEYi0+TUFDWzVdID0gVG1wWzNdOw0KPiArDQo+ICsgIGlmIChOaWMt PlVzYkV0aC0+VXNiRXRoVW5kaS5Vc2JFdGhVbmRpTWNhc3RJcDJNYWMgIT0gTlVMTCkgew0KPiAr ICAgIFN0YXR1cyA9IE5pYy0+VXNiRXRoLT5Vc2JFdGhVbmRpLlVzYkV0aFVuZGlNY2FzdElwMk1h YyAoQ2RiLCBOaWMpOw0KPiArICAgIGlmIChFRklfRVJST1IgKFN0YXR1cykpIHsNCj4gKyAgICAg IENkYi0+U3RhdEZsYWdzID0gUFhFX1NUQVRGTEFHU19DT01NQU5EX0ZBSUxFRDsNCj4gKyAgICB9 DQo+ICsgIH0NCj4gK30NCj4gKw0KPiArLyoqDQo+ICsgIFRoaXMgY29tbWFuZCBpcyB1c2VkIHRv IHJlYWQgYW5kIHdyaXRlIChpZiBzdXBwb3J0ZWQgYnkgTklDIEgvVykNCj4gKyAgbm9udm9sYXRp bGUgc3RvcmFnZSBvbiB0aGUgTklDLg0KPiArDQo+ICsgIEBwYXJhbVtpbl0gIENkYiAgQSBwb2lu dGVyIHRvIHRoZSBjb21tYW5kIGRlc2NyaXB0b3IgYmxvY2suDQo+ICsgIEBwYXJhbVtpbl0gIE5p YyAgQSBwb2ludGVyIHRvIHRoZSBOZXR3b3JrIGludGVyZmFjZSBjb250cm9sbGVyIGRhdGEuDQo+ ICsNCj4gKyoqLw0KPiArVk9JRA0KPiArVW5kaU52RGF0YSAoDQo+ICsgIElOICBQWEVfQ0RCICAg KkNkYiwNCj4gKyAgSU4gIE5JQ19EQVRBICAqTmljDQo+ICsgICkNCj4gK3sNCj4gKyAgRUZJX1NU QVRVUyAgU3RhdHVzOw0KPiArDQo+ICsgIENkYi0+U3RhdENvZGUgPSBQWEVfU1RBVENPREVfVU5T VVBQT1JURUQ7DQo+ICsgIGlmIChOaWMtPlVzYkV0aC0+VXNiRXRoVW5kaS5Vc2JFdGhVbmRpTnZE YXRhICE9IE5VTEwpIHsNCj4gKyAgICBTdGF0dXMgPSBOaWMtPlVzYkV0aC0+VXNiRXRoVW5kaS5V c2JFdGhVbmRpTnZEYXRhIChDZGIsIE5pYyk7DQo+ICsgICAgaWYgKEVGSV9FUlJPUiAoU3RhdHVz KSkgew0KPiArICAgICAgQ2RiLT5TdGF0RmxhZ3MgPSBQWEVfU1RBVEZMQUdTX0NPTU1BTkRfRkFJ TEVEOw0KPiArICAgIH0gZWxzZSB7DQo+ICsgICAgICBDZGItPlN0YXRGbGFncyA9IFBYRV9TVEFU RkxBR1NfQ09NTUFORF9DT01QTEVURTsNCj4gKyAgICAgIENkYi0+U3RhdENvZGUgID0gUFhFX1NU QVRDT0RFX1NVQ0NFU1M7DQo+ICsgICAgfQ0KPiArICB9DQo+ICt9DQo+ICsNCj4gKy8qKg0KPiAr ICBUaGlzIGNvbW1hbmQgcmV0dXJucyB0aGUgY3VycmVudCBpbnRlcnJ1cHQgc3RhdHVzIGFuZC9v ciB0aGUNCj4gKyAgdHJhbnNtaXR0ZWQgYnVmZmVyIGFkZHJlc3NlcyBhbmQgdGhlIGN1cnJlbnQg bWVkaWEgc3RhdHVzLg0KPiArDQo+ICsgIEBwYXJhbVtpbl0gIENkYiAgQSBwb2ludGVyIHRvIHRo ZSBjb21tYW5kIGRlc2NyaXB0b3IgYmxvY2suDQo+ICsgIEBwYXJhbVtpbl0gIE5pYyAgQSBwb2lu dGVyIHRvIHRoZSBOZXR3b3JrIGludGVyZmFjZSBjb250cm9sbGVyIGRhdGEuDQo+ICsNCj4gKyoq Lw0KPiArVk9JRA0KPiArVW5kaUdldFN0YXR1cyAoDQo+ICsgIElOICBQWEVfQ0RCICAgKkNkYiwN Cj4gKyAgSU4gIE5JQ19EQVRBICAqTmljDQo+ICsgICkNCj4gK3sNCj4gKyAgUFhFX0RCX0dFVF9T VEFUVVMgICpEYjsNCj4gKyAgUFhFX0RCX0dFVF9TVEFUVVMgIFRtcEdldFN0YXR1czsNCj4gKyAg VUlOVDE2ICAgICAgICAgICAgIE51bUVudHJpZXM7DQo+ICsgIFVJTlROICAgICAgICAgICAgICBJ bmRleDsNCj4gKyAgRUZJX1NUQVRVUyAgICAgICAgIFN0YXR1czsNCj4gKw0KPiArICBpZiAoKENk Yi0+T3BDb2RlICE9IFBYRV9PUENPREVfR0VUX1NUQVRVUykgfHwNCj4gKyAgICAgIChDZGItPlN0 YXRDb2RlICE9IFBYRV9TVEFUQ09ERV9JTklUSUFMSVpFKSB8fA0KPiArICAgICAgKENkYi0+U3Rh dEZsYWdzICE9IFBYRV9TVEFURkxBR1NfSU5JVElBTElaRSkgfHwNCj4gKyAgICAgIChDZGItPklG bnVtID49IChnUHhlLT5JRmNudCB8IGdQeGUtPklGY250RXh0IDw8IDgpKSB8fA0KPiArICAgICAg KENkYi0+Q1BCc2l6ZSAhPSBQWEVfQ1BCU0laRV9OT1RfVVNFRCkgfHwNCj4gKyAgICAgIChDZGIt PkNQQmFkZHIgIT0gUFhFX0NQQkFERFJfTk9UX1VTRUQpKQ0KPiArICB7DQo+ICsgICAgQ2RiLT5T dGF0RmxhZ3MgPSBQWEVfU1RBVEZMQUdTX0NPTU1BTkRfRkFJTEVEOw0KPiArICAgIENkYi0+U3Rh dENvZGUgID0gUFhFX1NUQVRDT0RFX0lOVkFMSURfQ0RCOw0KPiArICAgIHJldHVybjsNCj4gKyAg fSBlbHNlIHsNCj4gKyAgICBDZGItPlN0YXRGbGFncyA9IFBYRV9TVEFURkxBR1NfQ09NTUFORF9D T01QTEVURTsNCj4gKyAgICBDZGItPlN0YXRDb2RlICA9IFBYRV9TVEFUQ09ERV9TVUNDRVNTOw0K PiArICB9DQo+ICsNCj4gKyAgaWYgKE5pYy0+U3RhdGUgIT0gUFhFX1NUQVRGTEFHU19HRVRfU1RB VEVfSU5JVElBTElaRUQpIHsNCj4gKyAgICBDZGItPlN0YXRDb2RlICA9IFBYRV9TVEFUQ09ERV9O T1RfSU5JVElBTElaRUQ7DQo+ICsgICAgQ2RiLT5TdGF0RmxhZ3MgPSBQWEVfU1RBVEZMQUdTX0NP TU1BTkRfRkFJTEVEOw0KPiArICAgIHJldHVybjsNCj4gKyAgfQ0KPiArDQo+ICsgIFRtcEdldFN0 YXR1cy5SeEZyYW1lTGVuID0gMDsNCj4gKyAgVG1wR2V0U3RhdHVzLnJlc2VydmVkICAgPSAwOw0K PiArICBEYiAgICAgICAgICAgICAgICAgICAgICA9IChQWEVfREJfR0VUX1NUQVRVUyAqKShVSU5U TilDZGItPkRCYWRkcjsNCj4gKw0KPiArICBpZiAoKENkYi0+REJzaXplID4gMCkgJiYgKENkYi0+ REJzaXplIDwgc2l6ZW9mIChVSU5UMzIpICogMikpIHsNCj4gKyAgICBDb3B5TWVtIChEYiwgJlRt cEdldFN0YXR1cywgQ2RiLT5EQnNpemUpOw0KPiArICB9IGVsc2Ugew0KPiArICAgIENvcHlNZW0g KERiLCAmVG1wR2V0U3RhdHVzLCBzaXplb2YgKFVJTlQzMikgKiAyKTsNCj4gKyAgfQ0KPiArDQo+ ICsgIGlmICgoQ2RiLT5PcEZsYWdzICYgUFhFX09QRkxBR1NfR0VUX1RSQU5TTUlUVEVEX0JVRkZF UlMpICE9IDApIHsNCj4gKyAgICBpZiAoQ2RiLT5EQnNpemUgPT0gMCkgew0KPiArICAgICAgQ2Ri LT5TdGF0RmxhZ3MgPSBQWEVfU1RBVEZMQUdTX0NPTU1BTkRfRkFJTEVEOw0KPiArICAgICAgQ2Ri LT5TdGF0Q29kZSAgPSBQWEVfU1RBVENPREVfSU5WQUxJRF9DREI7DQo+ICsgICAgICByZXR1cm47 DQo+ICsgICAgfQ0KPiArDQo+ICsgICAgTnVtRW50cmllcyAgPSBDZGItPkRCc2l6ZSAtIHNpemVv ZiAoVUlOVDY0KTsNCj4gKyAgICBDZGItPkRCc2l6ZSA9IHNpemVvZiAoVUlOVDMyKSAqIDI7DQo+ ICsNCj4gKyAgICBmb3IgKEluZGV4ID0gMDsgTnVtRW50cmllcyA+PSBzaXplb2YgKFVJTlQ2NCk7 IEluZGV4KyssIE51bUVudHJpZXMgLT0NCj4gc2l6ZW9mIChVSU5UNjQpKSB7DQo+ICsgICAgICBp ZiAoTmljLT5UeEJ1ZmZlckNvdW50ID4gMCkgew0KPiArICAgICAgICBOaWMtPlR4QnVmZmVyQ291 bnQtLTsNCj4gKyAgICAgICAgRGItPlR4QnVmZmVyW0luZGV4XSA9IE5pYy0+TWVkaWFIZWFkZXJb TmljLT5UeEJ1ZmZlckNvdW50XTsNCj4gKyAgICAgIH0NCj4gKyAgICB9DQo+ICsgIH0NCj4gKw0K PiArICBpZiAoKENkYi0+T3BGbGFncyAmIFBYRV9PUEZMQUdTX0dFVF9JTlRFUlJVUFRfU1RBVFVT KSAhPSAwKSB7DQo+ICsgICAgaWYgKE5pYy0+UmVjZWl2ZVN0YXR1cyAhPSAwKSB7DQo+ICsgICAg ICBDZGItPlN0YXRGbGFncyB8PSBQWEVfU1RBVEZMQUdTX0dFVF9TVEFUVVNfUkVDRUlWRTsNCj4g KyAgICB9DQo+ICsgIH0NCj4gKw0KPiArICBpZiAoKE5pYy0+UmVxdWVzdC5SZXF1ZXN0ID09IFVT Ql9DRENfTkVUV09SS19DT05ORUNUSU9OKSAmJg0KPiAoTmljLT5SZXF1ZXN0LlZhbHVlID09IE5F VFdPUktfRElTQ09OTkVDVCkpIHsNCj4gKyAgICBOaWMtPkNhYmxlRGV0ZWN0ID0gMDsNCj4gKyAg fSBlbHNlIGlmICgoTmljLT5SZXF1ZXN0LlJlcXVlc3QgPT0gVVNCX0NEQ19ORVRXT1JLX0NPTk5F Q1RJT04pDQo+ICYmIChOaWMtPlJlcXVlc3QuVmFsdWUgPT0gTkVUV09SS19DT05ORUNURUQpKSB7 DQo+ICsgICAgTmljLT5DYWJsZURldGVjdCA9IDE7DQo+ICsgIH0NCj4gKw0KPiArICBpZiAoKENk Yi0+T3BGbGFncyAmIFBYRV9PUEZMQUdTX0dFVF9NRURJQV9TVEFUVVMpICE9IDApIHsNCj4gKyAg ICBpZiAoTmljLT5DYWJsZURldGVjdCA9PSAwKSB7DQo+ICsgICAgICBDZGItPlN0YXRGbGFncyB8 PSBQWEVfU1RBVEZMQUdTX0dFVF9TVEFUVVNfTk9fTUVESUE7DQo+ICsgICAgfQ0KPiArICB9DQo+ ICsNCj4gKyAgaWYgKE5pYy0+VXNiRXRoLT5Vc2JFdGhVbmRpLlVzYkV0aFVuZGlHZXRTdGF0dXMg IT0gTlVMTCkgew0KPiArICAgIFN0YXR1cyA9IE5pYy0+VXNiRXRoLT5Vc2JFdGhVbmRpLlVzYkV0 aFVuZGlHZXRTdGF0dXMgKENkYiwgTmljKTsNCj4gKyAgICBpZiAoRUZJX0VSUk9SIChTdGF0dXMp KSB7DQo+ICsgICAgICBDZGItPlN0YXRGbGFncyA9IFBYRV9TVEFURkxBR1NfQ09NTUFORF9GQUlM RUQ7DQo+ICsgICAgfQ0KPiArICB9DQo+ICt9DQo+ICsNCj4gKy8qKg0KPiArICBUaGlzIGNvbW1h bmQgaXMgdXNlZCB0byBmaWxsIHRoZSBtZWRpYSBoZWFkZXIocykgaW4gdHJhbnNtaXQgcGFja2V0 KHMpLg0KPiArDQo+ICsgIEBwYXJhbVtpbl0gIENkYiAgQSBwb2ludGVyIHRvIHRoZSBjb21tYW5k IGRlc2NyaXB0b3IgYmxvY2suDQo+ICsgIEBwYXJhbVtpbl0gIE5pYyAgQSBwb2ludGVyIHRvIHRo ZSBOZXR3b3JrIGludGVyZmFjZSBjb250cm9sbGVyIGRhdGEuDQo+ICsNCj4gKyoqLw0KPiArVk9J RA0KPiArVW5kaUZpbGxIZWFkZXIgKA0KPiArICBJTiAgUFhFX0NEQiAgICpDZGIsDQo+ICsgIElO ICBOSUNfREFUQSAgKk5pYw0KPiArICApDQo+ICt7DQo+ICsgIFBYRV9DUEJfRklMTF9IRUFERVIg ICAgICAgICAgICAgKkNwYkZpbGxIZWFkZXI7DQo+ICsgIFBYRV9DUEJfRklMTF9IRUFERVJfRlJB R01FTlRFRCAgKkNwYkZpbGw7DQo+ICsgIEV0aGVybmV0SGVhZGVyICAgICAgICAgICAgICAgICAg Kk1hY0hlYWRlcjsNCj4gKyAgVUlOVE4gICAgICAgICAgICAgICAgICAgICAgICAgICBJbmRleDsN Cj4gKyAgRUZJX1NUQVRVUyAgICAgICAgICAgICAgICAgICAgICBTdGF0dXM7DQo+ICsNCj4gKyAg aWYgKChDZGItPk9wQ29kZSAhPSBQWEVfT1BDT0RFX0ZJTExfSEVBREVSKSB8fA0KPiArICAgICAg KENkYi0+U3RhdENvZGUgIT0gUFhFX1NUQVRDT0RFX0lOSVRJQUxJWkUpIHx8DQo+ICsgICAgICAo Q2RiLT5TdGF0RmxhZ3MgIT0gUFhFX1NUQVRGTEFHU19JTklUSUFMSVpFKSB8fA0KPiArICAgICAg KENkYi0+SUZudW0gPj0gKGdQeGUtPklGY250IHwgZ1B4ZS0+SUZjbnRFeHQgPDwgOCkpIHx8DQo+ ICsgICAgICAoQ2RiLT5DUEJzaXplICE9IHNpemVvZiAoUFhFX0NQQl9GSUxMX0hFQURFUl9GUkFH TUVOVEVEKSkgfHwNCj4gKyAgICAgIChDZGItPkRCc2l6ZSAhPSBQWEVfREJTSVpFX05PVF9VU0VE KSB8fA0KPiArICAgICAgKENkYi0+REJhZGRyICE9IFBYRV9EQkFERFJfTk9UX1VTRUQpKQ0KPiAr ICB7DQo+ICsgICAgQ2RiLT5TdGF0RmxhZ3MgPSBQWEVfU1RBVEZMQUdTX0NPTU1BTkRfRkFJTEVE Ow0KPiArICAgIENkYi0+U3RhdENvZGUgID0gUFhFX1NUQVRDT0RFX0lOVkFMSURfQ0RCOw0KPiAr ICAgIHJldHVybjsNCj4gKyAgfSBlbHNlIHsNCj4gKyAgICBDZGItPlN0YXRGbGFncyA9IFBYRV9T VEFURkxBR1NfQ09NTUFORF9DT01QTEVURTsNCj4gKyAgICBDZGItPlN0YXRDb2RlICA9IFBYRV9T VEFUQ09ERV9TVUNDRVNTOw0KPiArICB9DQo+ICsNCj4gKyAgaWYgKE5pYy0+U3RhdGUgIT0gUFhF X1NUQVRGTEFHU19HRVRfU1RBVEVfSU5JVElBTElaRUQpIHsNCj4gKyAgICBDZGItPlN0YXRDb2Rl ICA9IFBYRV9TVEFUQ09ERV9OT1RfSU5JVElBTElaRUQ7DQo+ICsgICAgQ2RiLT5TdGF0RmxhZ3Mg PSBQWEVfU1RBVEZMQUdTX0NPTU1BTkRfRkFJTEVEOw0KPiArICAgIHJldHVybjsNCj4gKyAgfQ0K PiArDQo+ICsgIGlmIChDZGItPkNQQnNpemUgPT0gUFhFX0NQQlNJWkVfTk9UX1VTRUQpIHsNCj4g KyAgICBDZGItPlN0YXRGbGFncyA9IFBYRV9TVEFURkxBR1NfQ09NTUFORF9GQUlMRUQ7DQo+ICsg ICAgQ2RiLT5TdGF0Q29kZSAgPSBQWEVfU1RBVENPREVfSU5WQUxJRF9DREI7DQo+ICsgICAgcmV0 dXJuOw0KPiArICB9DQo+ICsNCj4gKyAgaWYgKChDZGItPk9wRmxhZ3MgJiBQWEVfT1BGTEFHU19G SUxMX0hFQURFUl9GUkFHTUVOVEVEKSAhPSAwKSB7DQo+ICsgICAgQ3BiRmlsbCA9IChQWEVfQ1BC X0ZJTExfSEVBREVSX0ZSQUdNRU5URUQgKikoVUlOVE4pQ2RiLQ0KPiA+Q1BCYWRkcjsNCj4gKw0K PiArICAgIGlmICgoQ3BiRmlsbC0+RnJhZ0NudCA9PSAwKSB8fCAoQ3BiRmlsbC0+RnJhZ0Rlc2Nb MF0uRnJhZ0xlbiA8DQo+IFBYRV9NQUNfSEVBREVSX0xFTl9FVEhFUikpIHsNCj4gKyAgICAgIENk Yi0+U3RhdEZsYWdzID0gUFhFX1NUQVRGTEFHU19DT01NQU5EX0ZBSUxFRDsNCj4gKyAgICAgIENk Yi0+U3RhdENvZGUgID0gUFhFX1NUQVRDT0RFX0lOVkFMSURfQ0RCOw0KPiArICAgICAgcmV0dXJu Ow0KPiArICAgIH0NCj4gKw0KPiArICAgIE1hY0hlYWRlciAgICAgICAgICAgPSAoRXRoZXJuZXRI ZWFkZXIgKikoVUlOVE4pQ3BiRmlsbC0NCj4gPkZyYWdEZXNjWzBdLkZyYWdBZGRyOw0KPiArICAg IE1hY0hlYWRlci0+UHJvdG9jb2wgPSBDcGJGaWxsLT5Qcm90b2NvbDsNCj4gKw0KPiArICAgIGZv ciAoSW5kZXggPSAwOyBJbmRleCA8IFBYRV9IV0FERFJfTEVOX0VUSEVSOyBJbmRleCsrKSB7DQo+ ICsgICAgICBNYWNIZWFkZXItPkRlc3RBZGRyW0luZGV4XSA9IENwYkZpbGwtPkRlc3RBZGRyW0lu ZGV4XTsNCj4gKyAgICAgIE1hY0hlYWRlci0+U3JjQWRkcltJbmRleF0gID0gQ3BiRmlsbC0+U3Jj QWRkcltJbmRleF07DQo+ICsgICAgfQ0KPiArICB9IGVsc2Ugew0KPiArICAgIENwYkZpbGxIZWFk ZXIgPSAoUFhFX0NQQl9GSUxMX0hFQURFUiAqKShVSU5UTilDZGItPkNQQmFkZHI7DQo+ICsNCj4g KyAgICBNYWNIZWFkZXIgICAgICAgICAgID0gKEV0aGVybmV0SGVhZGVyICopKFVJTlROKUNwYkZp bGxIZWFkZXItDQo+ID5NZWRpYUhlYWRlcjsNCj4gKyAgICBNYWNIZWFkZXItPlByb3RvY29sID0g Q3BiRmlsbEhlYWRlci0+UHJvdG9jb2w7DQo+ICsNCj4gKyAgICBmb3IgKEluZGV4ID0gMDsgSW5k ZXggPCBQWEVfSFdBRERSX0xFTl9FVEhFUjsgSW5kZXgrKykgew0KPiArICAgICAgTWFjSGVhZGVy LT5EZXN0QWRkcltJbmRleF0gPSBDcGJGaWxsSGVhZGVyLT5EZXN0QWRkcltJbmRleF07DQo+ICsg ICAgICBNYWNIZWFkZXItPlNyY0FkZHJbSW5kZXhdICA9IENwYkZpbGxIZWFkZXItPlNyY0FkZHJb SW5kZXhdOw0KPiArICAgIH0NCj4gKyAgfQ0KPiArDQo+ICsgIGlmIChOaWMtPlVzYkV0aC0+VXNi RXRoVW5kaS5Vc2JFdGhVbmRpRmlsbEhlYWRlciAhPSBOVUxMKSB7DQo+ICsgICAgU3RhdHVzID0g TmljLT5Vc2JFdGgtPlVzYkV0aFVuZGkuVXNiRXRoVW5kaUZpbGxIZWFkZXIgKENkYiwgTmljKTsN Cj4gKyAgICBpZiAoRUZJX0VSUk9SIChTdGF0dXMpKSB7DQo+ICsgICAgICBDZGItPlN0YXRGbGFn cyA9IFBYRV9TVEFURkxBR1NfQ09NTUFORF9GQUlMRUQ7DQo+ICsgICAgfQ0KPiArICB9DQo+ICt9 DQo+ICsNCj4gKy8qKg0KPiArICBUaGUgVHJhbnNtaXQgY29tbWFuZCBpcyB1c2VkIHRvIHBsYWNl IGEgcGFja2V0IGludG8gdGhlIHRyYW5zbWl0IHF1ZXVlLg0KPiArDQo+ICsgIEBwYXJhbVtpbl0g IENkYiAgQSBwb2ludGVyIHRvIHRoZSBjb21tYW5kIGRlc2NyaXB0b3IgYmxvY2suDQo+ICsgIEBw YXJhbVtpbl0gIE5pYyAgQSBwb2ludGVyIHRvIHRoZSBOZXR3b3JrIGludGVyZmFjZSBjb250cm9s bGVyIGRhdGEuDQo+ICsNCj4gKyoqLw0KPiArVk9JRA0KPiArVW5kaVRyYW5zbWl0ICgNCj4gKyAg SU4gIFBYRV9DREIgICAqQ2RiLA0KPiArICBJTiAgTklDX0RBVEEgICpOaWMNCj4gKyAgKQ0KPiAr ew0KPiArICBFRklfU1RBVFVTICBTdGF0dXM7DQo+ICsNCj4gKyAgaWYgKChDZGItPk9wQ29kZSAh PSBQWEVfT1BDT0RFX1RSQU5TTUlUKSB8fA0KPiArICAgICAgKENkYi0+U3RhdENvZGUgIT0gUFhF X1NUQVRDT0RFX0lOSVRJQUxJWkUpIHx8DQo+ICsgICAgICAoQ2RiLT5TdGF0RmxhZ3MgIT0gUFhF X1NUQVRGTEFHU19JTklUSUFMSVpFKSB8fA0KPiArICAgICAgKENkYi0+SUZudW0gPj0gKGdQeGUt PklGY250IHwgZ1B4ZS0+SUZjbnRFeHQgPDwgOCkpIHx8DQo+ICsgICAgICAoQ2RiLT5DUEJzaXpl ICE9IHNpemVvZiAoUFhFX0NQQl9UUkFOU01JVCkpIHx8DQo+ICsgICAgICAoQ2RiLT5EQnNpemUg IT0gUFhFX0RCU0laRV9OT1RfVVNFRCkgfHwNCj4gKyAgICAgIChDZGItPkRCYWRkciAhPSBQWEVf REJBRERSX05PVF9VU0VEKSkNCj4gKyAgew0KPiArICAgIENkYi0+U3RhdEZsYWdzID0gUFhFX1NU QVRGTEFHU19DT01NQU5EX0ZBSUxFRDsNCj4gKyAgICBDZGItPlN0YXRDb2RlICA9IFBYRV9TVEFU Q09ERV9JTlZBTElEX0NEQjsNCj4gKyAgICByZXR1cm47DQo+ICsgIH0gZWxzZSB7DQo+ICsgICAg Q2RiLT5TdGF0RmxhZ3MgPSBQWEVfU1RBVEZMQUdTX0NPTU1BTkRfQ09NUExFVEU7DQo+ICsgICAg Q2RiLT5TdGF0Q29kZSAgPSBQWEVfU1RBVENPREVfU1VDQ0VTUzsNCj4gKyAgfQ0KPiArDQo+ICsg IGlmIChOaWMtPlN0YXRlICE9IFBYRV9TVEFURkxBR1NfR0VUX1NUQVRFX0lOSVRJQUxJWkVEKSB7 DQo+ICsgICAgQ2RiLT5TdGF0RmxhZ3MgPSBQWEVfU1RBVEZMQUdTX0NPTU1BTkRfRkFJTEVEOw0K PiArICAgIENkYi0+U3RhdENvZGUgID0gUFhFX1NUQVRDT0RFX05PVF9JTklUSUFMSVpFRDsNCj4g KyAgICByZXR1cm47DQo+ICsgIH0NCj4gKw0KPiArICBpZiAoQ2RiLT5DUEJzaXplID09IFBYRV9D UEJTSVpFX05PVF9VU0VEKSB7DQo+ICsgICAgQ2RiLT5TdGF0RmxhZ3MgPSBQWEVfU1RBVEZMQUdT X0NPTU1BTkRfRkFJTEVEOw0KPiArICAgIENkYi0+U3RhdENvZGUgID0gUFhFX1NUQVRDT0RFX0lO VkFMSURfQ0RCOw0KPiArICAgIHJldHVybjsNCj4gKyAgfQ0KPiArDQo+ICsgIGlmIChOaWMtPlVz YkV0aC0+VXNiRXRoVW5kaS5Vc2JFdGhVbmRpVHJhbnNtaXQgIT0gTlVMTCkgew0KPiArICAgIFN0 YXR1cyA9IE5pYy0+VXNiRXRoLT5Vc2JFdGhVbmRpLlVzYkV0aFVuZGlUcmFuc21pdCAoQ2RiLCBO aWMpOw0KPiArICAgIGlmIChFRklfRVJST1IgKFN0YXR1cykpIHsNCj4gKyAgICAgIENkYi0+U3Rh dEZsYWdzID0gUFhFX1NUQVRGTEFHU19DT01NQU5EX0ZBSUxFRDsNCj4gKyAgICB9DQo+ICsNCj4g KyAgICByZXR1cm47DQo+ICsgIH0NCj4gKw0KPiArICBDZGItPlN0YXRDb2RlID0gVHJhbnNtaXQg KENkYiwgTmljLCBDZGItPkNQQmFkZHIsIENkYi0+T3BGbGFncyk7DQo+ICsNCj4gKyAgaWYgKENk Yi0+U3RhdENvZGUgIT0gUFhFX1NUQVRDT0RFX1NVQ0NFU1MpIHsNCj4gKyAgICBDZGItPlN0YXRG bGFncyA9IFBYRV9TVEFURkxBR1NfQ09NTUFORF9GQUlMRUQ7DQo+ICsgIH0NCj4gK30NCj4gKw0K PiArLyoqDQo+ICsgIFVzZSBVU0IgRXRoZXJuZXQgUHJvdG9jb2wgQnVsayBvdXQgY29tbWFuZCB0 byB0cmFuc21pdCBkYXRhLg0KPiArDQo+ICsgIEBwYXJhbVtpbl0gICAgICBDZGIgICAgICBBIHBv aW50ZXIgdG8gdGhlIGNvbW1hbmQgZGVzY3JpcHRvciBibG9jay4NCj4gKyAgQHBhcmFtW2luLCBv dXRdIE5pYyAgICAgIEEgcG9pbnRlciB0byB0aGUgTmV0d29yayBpbnRlcmZhY2UgY29udHJvbGxl ciBkYXRhLg0KPiArICBAcGFyYW1baW5dICAgICAgQ3BiQWRkciAgQ29tbWFuZCBQYXJhbWV0ZXIg QmxvY2sgQWRkcmVzcy4NCj4gKyAgQHBhcmFtW2luXSAgICAgIE9wRmxhZ3MgIE9wZXJhdGlvbiBG bGFncy4NCj4gKw0KPiArKiovDQo+ICtVSU5UMTYNCj4gK1RyYW5zbWl0ICgNCj4gKyAgSU4gICAg ICBQWEVfQ0RCICAgKkNkYiwNCj4gKyAgSU4gT1VUICBOSUNfREFUQSAgKk5pYywNCj4gKyAgSU4g ICAgICBVSU5UNjQgICAgQ3BiQWRkciwNCj4gKyAgSU4gICAgICBVSU5UMTYgICAgT3BGbGFncw0K PiArICApDQo+ICt7DQo+ICsgIEVGSV9TVEFUVVMgICAgICAgIFN0YXR1czsNCj4gKyAgUFhFX0NQ Ql9UUkFOU01JVCAgKkNwYjsNCj4gKyAgVUlOVDY0ICAgICAgICAgICAgQnVsa091dERhdGEgPSAw Ow0KPiArICBVSU5UTiAgICAgICAgICAgICBEYXRhTGVuZ3RoOw0KPiArICBVSU5UTiAgICAgICAg ICAgICBNYXA7DQo+ICsgIFVJTlQzMiAgICAgICAgICAgIENvdW50ZXIgPSAwOw0KPiArICBVSU5U MTYgICAgICAgICAgICBTdGF0Q29kZTsNCj4gKw0KPiArICBDcGIgPSAoUFhFX0NQQl9UUkFOU01J VCAqKShVSU5UTilDcGJBZGRyOw0KPiArDQo+ICsgIGlmIChOaWMtPkNhblRyYW5zbWl0KSB7DQo+ ICsgICAgcmV0dXJuIFBYRV9TVEFUQ09ERV9CVVNZOw0KPiArICB9DQo+ICsNCj4gKyAgTmljLT5D YW5UcmFuc21pdCA9IFRSVUU7DQo+ICsNCj4gKyAgaWYgKChPcEZsYWdzICYgUFhFX09QRkxBR1Nf VFJBTlNNSVRfRlJBR01FTlRFRCkgIT0gMCkgew0KPiArICAgIHJldHVybiBQWEVfU1RBVENPREVf SU5WQUxJRF9QQVJBTUVURVI7DQo+ICsgIH0NCj4gKw0KPiArICBNYXAgPSBNYXBJdCAoDQo+ICsg ICAgICAgICAgTmljLA0KPiArICAgICAgICAgIENwYi0+RnJhbWVBZGRyLA0KPiArICAgICAgICAg IENwYi0+RGF0YUxlbiArIChVSU5UMzIpQ3BiLT5NZWRpYWhlYWRlckxlbiwNCj4gKyAgICAgICAg ICBUT19ERVZJQ0UsDQo+ICsgICAgICAgICAgKFVJTlQ2NCkoVUlOVE4pJkJ1bGtPdXREYXRhDQo+ ICsgICAgICAgICAgKTsNCj4gKw0KPiArICBpZiAoTWFwICE9IDApIHsNCj4gKyAgICBOaWMtPkNh blRyYW5zbWl0ID0gRkFMU0U7DQo+ICsgICAgcmV0dXJuIFBYRV9TVEFUQ09ERV9JTlZBTElEX1BB UkFNRVRFUjsNCj4gKyAgfQ0KPiArDQo+ICsgIGlmIChOaWMtPlR4QnVmZmVyQ291bnQgPCBNQVhf WE1JVF9CVUZGRVJTKSB7DQo+ICsgICAgTmljLT5NZWRpYUhlYWRlcltOaWMtPlR4QnVmZmVyQ291 bnRdID0gQ3BiLT5GcmFtZUFkZHI7DQo+ICsgICAgTmljLT5UeEJ1ZmZlckNvdW50Kys7DQo+ICsg IH0NCj4gKw0KPiArICBEYXRhTGVuZ3RoID0gKFVJTlROKShDcGItPkRhdGFMZW4gKyAoVUlOVDMy KUNwYi0+TWVkaWFoZWFkZXJMZW4pOw0KPiArDQo+ICsgIHdoaWxlICgxKSB7DQo+ICsgICAgaWYg KENvdW50ZXIgPj0gMykgew0KPiArICAgICAgU3RhdENvZGUgPSBQWEVfU1RBVENPREVfQlVTWTsN Cj4gKyAgICAgIGJyZWFrOw0KPiArICAgIH0NCj4gKw0KPiArICAgIFN0YXR1cyA9IE5pYy0+VXNi RXRoLT5Vc2JFdGhUcmFuc21pdCAoQ2RiLCBOaWMtPlVzYkV0aCwgKFZPSUQNCj4gKikoVUlOVE4p QnVsa091dERhdGEsICZEYXRhTGVuZ3RoKTsNCj4gKyAgICBpZiAoRUZJX0VSUk9SIChTdGF0dXMp KSB7DQo+ICsgICAgICBTdGF0Q29kZSA9ICBQWEVfU1RBVEZMQUdTX0NPTU1BTkRfRkFJTEVEOw0K PiArICAgIH0NCj4gKw0KPiArICAgIGlmIChTdGF0dXMgPT0gRUZJX0lOVkFMSURfUEFSQU1FVEVS KSB7DQo+ICsgICAgICBTdGF0Q29kZSA9IFBYRV9TVEFUQ09ERV9JTlZBTElEX1BBUkFNRVRFUjsN Cj4gKyAgICAgIGJyZWFrOw0KPiArICAgIH0NCj4gKw0KPiArICAgIGlmIChTdGF0dXMgPT0gRUZJ X0RFVklDRV9FUlJPUikgew0KPiArICAgICAgU3RhdENvZGUgPSBQWEVfU1RBVENPREVfREVWSUNF X0ZBSUxVUkU7DQo+ICsgICAgICBicmVhazsNCj4gKyAgICB9DQo+ICsNCj4gKyAgICBpZiAoIUVG SV9FUlJPUiAoU3RhdHVzKSkgew0KPiArICAgICAgTmljLT5UeEZyYW1lKys7DQo+ICsgICAgICBT dGF0Q29kZSA9IFBYRV9TVEFUQ09ERV9TVUNDRVNTOw0KPiArICAgICAgYnJlYWs7DQo+ICsgICAg fQ0KPiArDQo+ICsgICAgQ291bnRlcisrOw0KPiArICB9DQo+ICsNCj4gKyAgVW5NYXBJdCAoDQo+ ICsgICAgTmljLA0KPiArICAgIENwYi0+RnJhbWVBZGRyLA0KPiArICAgIENwYi0+RGF0YUxlbiAr IChVSU5UMzIpQ3BiLT5NZWRpYWhlYWRlckxlbiwNCj4gKyAgICBUT19ERVZJQ0UsDQo+ICsgICAg QnVsa091dERhdGENCj4gKyAgICApOw0KPiArDQo+ICsgIE5pYy0+Q2FuVHJhbnNtaXQgPSBGQUxT RTsNCj4gKw0KPiArICByZXR1cm4gU3RhdENvZGU7DQo+ICt9DQo+ICsNCj4gKy8qKg0KPiArICBX aGVuIHRoZSBuZXR3b3JrIGFkYXB0ZXIgaGFzIHJlY2VpdmVkIGEgZnJhbWUsIHRoaXMgY29tbWFu ZCBpcyB1c2VkDQo+ICsgIHRvIGNvcHkgdGhlIGZyYW1lIGludG8gZHJpdmVyL2FwcGxpY2F0aW9u IHN0b3JhZ2UuDQo+ICsNCj4gKyAgQHBhcmFtW2luXSAgQ2RiICBBIHBvaW50ZXIgdG8gdGhlIGNv bW1hbmQgZGVzY3JpcHRvciBibG9jay4NCj4gKyAgQHBhcmFtW2luXSAgTmljICBBIHBvaW50ZXIg dG8gdGhlIE5ldHdvcmsgaW50ZXJmYWNlIGNvbnRyb2xsZXIgZGF0YS4NCj4gKw0KPiArKiovDQo+ ICtWT0lEDQo+ICtVbmRpUmVjZWl2ZSAoDQo+ICsgIElOICBQWEVfQ0RCICAgKkNkYiwNCj4gKyAg SU4gIE5JQ19EQVRBICAqTmljDQo+ICsgICkNCj4gK3sNCj4gKyAgRUZJX1NUQVRVUyAgU3RhdHVz Ow0KPiArDQo+ICsgIGlmICgoQ2RiLT5PcENvZGUgIT0gUFhFX09QQ09ERV9SRUNFSVZFKSB8fA0K PiArICAgICAgKENkYi0+U3RhdENvZGUgIT0gUFhFX1NUQVRDT0RFX0lOSVRJQUxJWkUpIHx8DQo+ ICsgICAgICAoQ2RiLT5TdGF0RmxhZ3MgIT0gUFhFX1NUQVRGTEFHU19JTklUSUFMSVpFKSB8fA0K PiArICAgICAgKENkYi0+SUZudW0gPj0gKGdQeGUtPklGY250IHwgZ1B4ZS0+SUZjbnRFeHQgPDwg OCkpIHx8DQo+ICsgICAgICAoQ2RiLT5DUEJzaXplICE9IHNpemVvZiAoUFhFX0NQQl9SRUNFSVZF KSkgfHwNCj4gKyAgICAgIChDZGItPkRCc2l6ZSAhPSBzaXplb2YgKFBYRV9EQl9SRUNFSVZFKSkg fHwNCj4gKyAgICAgIChDZGItPk9wRmxhZ3MgIT0gUFhFX09QRkxBR1NfTk9UX1VTRUQpKQ0KPiAr ICB7DQo+ICsgICAgQ2RiLT5TdGF0RmxhZ3MgPSBQWEVfU1RBVEZMQUdTX0NPTU1BTkRfRkFJTEVE Ow0KPiArICAgIENkYi0+U3RhdENvZGUgID0gUFhFX1NUQVRDT0RFX0lOVkFMSURfQ0RCOw0KPiAr ICAgIHJldHVybjsNCj4gKyAgfSBlbHNlIHsNCj4gKyAgICBDZGItPlN0YXRGbGFncyA9IFBYRV9T VEFURkxBR1NfQ09NTUFORF9DT01QTEVURTsNCj4gKyAgICBDZGItPlN0YXRDb2RlICA9IFBYRV9T VEFUQ09ERV9TVUNDRVNTOw0KPiArICB9DQo+ICsNCj4gKyAgaWYgKE5pYy0+U3RhdGUgIT0gUFhF X1NUQVRGTEFHU19HRVRfU1RBVEVfSU5JVElBTElaRUQpIHsNCj4gKyAgICBDZGItPlN0YXRGbGFn cyA9IFBYRV9TVEFURkxBR1NfQ09NTUFORF9GQUlMRUQ7DQo+ICsgICAgQ2RiLT5TdGF0Q29kZSAg PSBQWEVfU1RBVENPREVfTk9UX0lOSVRJQUxJWkVEOw0KPiArICAgIHJldHVybjsNCj4gKyAgfQ0K PiArDQo+ICsgIGlmICghTmljLT5DYW5SZWNlaXZlKSB7DQo+ICsgICAgQ2RiLT5TdGF0RmxhZ3Mg PSBQWEVfU1RBVEZMQUdTX0NPTU1BTkRfRkFJTEVEOw0KPiArICAgIENkYi0+U3RhdENvZGUgID0g UFhFX1NUQVRDT0RFX05PVF9JTklUSUFMSVpFRDsNCj4gKyAgICByZXR1cm47DQo+ICsgIH0NCj4g Kw0KPiArICBpZiAoTmljLT5Vc2JFdGgtPlVzYkV0aFVuZGkuVXNiRXRoVW5kaVJlY2VpdmUgIT0g TlVMTCkgew0KPiArICAgIFN0YXR1cyA9IE5pYy0+VXNiRXRoLT5Vc2JFdGhVbmRpLlVzYkV0aFVu ZGlSZWNlaXZlIChDZGIsIE5pYyk7DQo+ICsgICAgaWYgKEVGSV9FUlJPUiAoU3RhdHVzKSkgew0K PiArICAgICAgQ2RiLT5TdGF0RmxhZ3MgPSBQWEVfU1RBVEZMQUdTX0NPTU1BTkRfRkFJTEVEOw0K PiArICAgIH0NCj4gKw0KPiArICAgIHJldHVybjsNCj4gKyAgfQ0KPiArDQo+ICsgIENkYi0+U3Rh dENvZGUgPSBSZWNlaXZlIChDZGIsIE5pYywgQ2RiLT5DUEJhZGRyLCBDZGItPkRCYWRkcik7DQo+ ICsNCj4gKyAgaWYgKENkYi0+U3RhdENvZGUgIT0gUFhFX1NUQVRDT0RFX1NVQ0NFU1MpIHsNCj4g KyAgICBDZGItPlN0YXRGbGFncyA9IFBYRV9TVEFURkxBR1NfQ09NTUFORF9GQUlMRUQ7DQo+ICsg IH0NCj4gK30NCj4gKw0KPiArLyoqDQo+ICsgIFVzZSBVU0IgRXRoZXJuZXQgUHJvdG9jb2wgQnVs ayBpbiBjb21tYW5kIHRvIHJlY2VpdmUgZGF0YS4NCj4gKw0KPiArICBAcGFyYW1baW5dICAgICAg Q2RiICAgICAgQSBwb2ludGVyIHRvIHRoZSBjb21tYW5kIGRlc2NyaXB0b3IgYmxvY2suDQo+ICsg IEBwYXJhbVtpbiwgb3V0XSBOaWMgICAgICBBIHBvaW50ZXIgdG8gdGhlIE5ldHdvcmsgaW50ZXJm YWNlIGNvbnRyb2xsZXIgZGF0YS4NCj4gKyAgQHBhcmFtW2luXSAgICAgIENwYkFkZHIgIENvbW1h bmQgUGFyYW1ldGVyIEJsb2NrIEFkZHJlc3MuDQo+ICsgIEBwYXJhbVtpbiwgb3V0XSBEYkFkZHIg ICBEYXRhIEJsb2NrIEFkZHJlc3MuDQo+ICsNCj4gKyoqLw0KPiArVUlOVDE2DQo+ICtSZWNlaXZl ICgNCj4gKyAgSU4gUFhFX0NEQiAgICAgICAqQ2RiLA0KPiArICBJTiBPVVQgTklDX0RBVEEgICpO aWMsDQo+ICsgIElOIFVJTlQ2NCAgICAgICAgQ3BiQWRkciwNCj4gKyAgSU4gT1VUIFVJTlQ2NCAg ICBEYkFkZHINCj4gKyAgKQ0KPiArew0KPiArICBFRklfU1RBVFVTICAgICAgIFN0YXR1czsNCj4g KyAgVUlOVE4gICAgICAgICAgICBJbmRleDsNCj4gKyAgVUlOVDE2ICAgICAgICAgICBTdGF0Q29k ZSAgPSBQWEVfU1RBVENPREVfTk9fREFUQTsNCj4gKyAgUFhFX0ZSQU1FX1RZUEUgICBGcmFtZVR5 cGUgPSBQWEVfRlJBTUVfVFlQRV9OT05FOw0KPiArICBQWEVfQ1BCX1JFQ0VJVkUgICpDcGI7DQo+ ICsgIFBYRV9EQl9SRUNFSVZFICAgKkRiOw0KPiArICBVSU5UOCAgICAgICAgICAgICpCdWxrSW5E YXRhOw0KPiArICBVSU5UTiAgICAgICAgICAgIERhdGFMZW5ndGggPSAoVUlOVE4pTmljLT5NYXhT ZWdtZW50U2l6ZTsNCj4gKyAgRXRoZXJuZXRIZWFkZXIgICAqSGVhZGVyOw0KPiArDQo+ICsgIENw YiA9IChQWEVfQ1BCX1JFQ0VJVkUgKikoVUlOVE4pQ3BiQWRkcjsNCj4gKyAgRGIgID0gKFBYRV9E Ql9SRUNFSVZFICopKFVJTlROKURiQWRkcjsNCj4gKw0KPiArICBTdGF0dXMgPSBnQlMtPkFsbG9j YXRlUG9vbCAoRWZpQm9vdFNlcnZpY2VzRGF0YSwgRGF0YUxlbmd0aCwgKFZPSUQNCj4gKiopJkJ1 bGtJbkRhdGEpOw0KPiArICBpZiAoRUZJX0VSUk9SIChTdGF0dXMpKSB7DQo+ICsgICAgcmV0dXJu IFBYRV9TVEFUQ09ERV9JTlZBTElEX1BBUkFNRVRFUjsNCj4gKyAgfQ0KPiArDQo+ICsgIHdoaWxl ICgxKSB7DQo+ICsgICAgU3RhdHVzID0gTmljLT5Vc2JFdGgtPlVzYkV0aFJlY2VpdmUgKENkYiwg TmljLT5Vc2JFdGgsIChWT0lEDQo+ICopQnVsa0luRGF0YSwgJkRhdGFMZW5ndGgpOw0KPiArICAg IGlmIChFRklfRVJST1IgKFN0YXR1cykpIHsNCj4gKyAgICAgIGJyZWFrOw0KPiArICAgIH0NCj4g Kw0KPiArICAgIE5pYy0+UnhGcmFtZSsrOw0KPiArDQo+ICsgICAgaWYgKERhdGFMZW5ndGggIT0g MCkgew0KPiArICAgICAgaWYgKERhdGFMZW5ndGggPiBDcGItPkJ1ZmZlckxlbikgew0KPiArICAg ICAgICBEYXRhTGVuZ3RoID0gKFVJTlROKUNwYi0+QnVmZmVyTGVuOw0KPiArICAgICAgfQ0KPiAr DQo+ICsgICAgICBDb3B5TWVtICgoVUlOVDggKikoVUlOVE4pQ3BiLT5CdWZmZXJBZGRyLCAoVUlO VDggKilCdWxrSW5EYXRhLA0KPiBEYXRhTGVuZ3RoKTsNCj4gKw0KPiArICAgICAgSGVhZGVyID0g KEV0aGVybmV0SGVhZGVyICopQnVsa0luRGF0YTsNCj4gKw0KPiArICAgICAgRGItPkZyYW1lTGVu ICAgICAgID0gKFVJTlQzMilEYXRhTGVuZ3RoOw0KPiArICAgICAgRGItPk1lZGlhSGVhZGVyTGVu ID0gUFhFX01BQ19IRUFERVJfTEVOX0VUSEVSOw0KPiArDQo+ICsgICAgICBmb3IgKEluZGV4ID0g MDsgSW5kZXggPCBQWEVfSFdBRERSX0xFTl9FVEhFUjsgSW5kZXgrKykgew0KPiArICAgICAgICBp ZiAoSGVhZGVyLT5EZXN0QWRkcltJbmRleF0gIT0gTmljLT5DdXJyZW50Tm9kZUFkZHJlc3NbSW5k ZXhdKSB7DQo+ICsgICAgICAgICAgYnJlYWs7DQo+ICsgICAgICAgIH0NCj4gKyAgICAgIH0NCj4g Kw0KPiArICAgICAgaWYgKEluZGV4ID49IFBYRV9IV0FERFJfTEVOX0VUSEVSKSB7DQo+ICsgICAg ICAgIEZyYW1lVHlwZSA9IFBYRV9GUkFNRV9UWVBFX1VOSUNBU1Q7DQo+ICsgICAgICB9IGVsc2Ug ew0KPiArICAgICAgICBmb3IgKEluZGV4ID0gMDsgSW5kZXggPCBQWEVfSFdBRERSX0xFTl9FVEhF UjsgSW5kZXgrKykgew0KPiArICAgICAgICAgIGlmIChIZWFkZXItPkRlc3RBZGRyW0luZGV4XSAh PSBOaWMtPkJyb2FkY2FzdE5vZGVBZGRyZXNzW0luZGV4XSkgew0KPiArICAgICAgICAgICAgYnJl YWs7DQo+ICsgICAgICAgICAgfQ0KPiArICAgICAgICB9DQo+ICsNCj4gKyAgICAgICAgaWYgKElu ZGV4ID49IFBYRV9IV0FERFJfTEVOX0VUSEVSKSB7DQo+ICsgICAgICAgICAgRnJhbWVUeXBlID0g UFhFX0ZSQU1FX1RZUEVfQlJPQURDQVNUOw0KPiArICAgICAgICB9IGVsc2Ugew0KPiArICAgICAg ICAgIGlmICgoSGVhZGVyLT5EZXN0QWRkclswXSAmIDEpID09IDEpIHsNCj4gKyAgICAgICAgICAg IEZyYW1lVHlwZSA9IFBYRV9GUkFNRV9UWVBFX0ZJTFRFUkVEX01VTFRJQ0FTVDsNCj4gKyAgICAg ICAgICB9IGVsc2Ugew0KPiArICAgICAgICAgICAgRnJhbWVUeXBlID0gUFhFX0ZSQU1FX1RZUEVf UFJPTUlTQ1VPVVM7DQo+ICsgICAgICAgICAgfQ0KPiArICAgICAgICB9DQo+ICsgICAgICB9DQo+ ICsNCj4gKyAgICAgIERiLT5UeXBlICAgICA9IEZyYW1lVHlwZTsNCj4gKyAgICAgIERiLT5Qcm90 b2NvbCA9IEhlYWRlci0+UHJvdG9jb2w7DQo+ICsNCj4gKyAgICAgIGZvciAoSW5kZXggPSAwOyBJ bmRleCA8IFBYRV9IV0FERFJfTEVOX0VUSEVSOyBJbmRleCsrKSB7DQo+ICsgICAgICAgIERiLT5T cmNBZGRyW0luZGV4XSAgPSBIZWFkZXItPlNyY0FkZHJbSW5kZXhdOw0KPiArICAgICAgICBEYi0+ RGVzdEFkZHJbSW5kZXhdID0gSGVhZGVyLT5EZXN0QWRkcltJbmRleF07DQo+ICsgICAgICB9DQo+ ICsNCj4gKyAgICAgIFN0YXRDb2RlID0gUFhFX1NUQVRDT0RFX1NVQ0NFU1M7DQo+ICsgICAgICBi cmVhazsNCj4gKyAgICB9DQo+ICsgIH0NCj4gKw0KPiArICBpZiAoRnJhbWVUeXBlID09IFBYRV9G UkFNRV9UWVBFX05PTkUpIHsNCj4gKyAgICBOaWMtPlJlY2VpdmVTdGF0dXMgPSAwOw0KPiArICB9 IGVsc2Ugew0KPiArICAgIE5pYy0+UmVjZWl2ZVN0YXR1cyA9IDE7DQo+ICsgIH0NCj4gKw0KPiAr ICBnQlMtPkZyZWVQb29sIChCdWxrSW5EYXRhKTsNCj4gKw0KPiArICByZXR1cm4gU3RhdENvZGU7 DQo+ICt9DQo+ICsNCj4gKy8qKg0KPiArICBGaWxsIG91dCBQWEUgU1cgVU5ESSBzdHJ1Y3R1cmUu DQo+ICsNCj4gKyAgQHBhcmFtW291dF0gIFB4ZVN3ICAgICAgQSBwb2ludGVyIHRvIHRoZSBQWEUg U1cgVU5ESSBzdHJ1Y3R1cmUuDQo+ICsNCj4gKyoqLw0KPiArVk9JRA0KPiArUHhlU3RydWN0SW5p dCAoDQo+ICsgIE9VVCBQWEVfU1dfVU5ESSAgKlB4ZVN3DQo+ICsgICkNCj4gK3sNCj4gKyAgUHhl U3ctPlNpZ25hdHVyZSA9IFBYRV9ST01JRF9TSUdOQVRVUkU7DQo+ICsgIFB4ZVN3LT5MZW4gICAg ICAgPSAoVUlOVDgpc2l6ZW9mIChQWEVfU1dfVU5ESSk7DQo+ICsgIFB4ZVN3LT5GdWRnZSAgICAg PSAwOw0KPiArICBQeGVTdy0+SUZjbnQgICAgID0gMDsNCj4gKyAgUHhlU3ctPklGY250RXh0ICA9 IDA7DQo+ICsgIFB4ZVN3LT5SZXYgICAgICAgPSBQWEVfUk9NSURfUkVWOw0KPiArICBQeGVTdy0+ TWFqb3JWZXIgID0gUFhFX1JPTUlEX01BSk9SVkVSOw0KPiArICBQeGVTdy0+TWlub3JWZXIgID0g UFhFX1JPTUlEX01JTk9SVkVSOw0KPiArICBQeGVTdy0+cmVzZXJ2ZWQxID0gMDsNCj4gKw0KPiAr ICBQeGVTdy0+SW1wbGVtZW50YXRpb24gPSBQWEVfUk9NSURfSU1QX1NXX1ZJUlRfQUREUiB8DQo+ ICsgICAgICAgICAgICAgICAgICAgICAgICAgIFBYRV9ST01JRF9JTVBfRlJBR19TVVBQT1JURUQg fA0KPiArICAgICAgICAgICAgICAgICAgICAgICAgICBQWEVfUk9NSURfSU1QX0NNRF9MSU5LX1NV UFBPUlRFRCB8DQo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgIFBYRV9ST01JRF9JTVBfU1RB VElPTl9BRERSX1NFVFRBQkxFIHwNCj4gKw0KPiBQWEVfUk9NSURfSU1QX1BST01JU0NVT1VTX01V TFRJQ0FTVF9SWF9TVVBQT1JURUQgfA0KPiArICAgICAgICAgICAgICAgICAgICAgICAgICBQWEVf Uk9NSURfSU1QX1BST01JU0NVT1VTX1JYX1NVUFBPUlRFRCB8DQo+ICsgICAgICAgICAgICAgICAg ICAgICAgICAgIFBYRV9ST01JRF9JTVBfQlJPQURDQVNUX1JYX1NVUFBPUlRFRCB8DQo+ICsgICAg ICAgICAgICAgICAgICAgICAgICAgIFBYRV9ST01JRF9JTVBfRklMVEVSRURfTVVMVElDQVNUX1JY X1NVUFBPUlRFRDsNCj4gKw0KPiArICBQeGVTdy0+RW50cnlQb2ludCAgID0gKFVJTlQ2NCkoVUlO VE4pVW5kaUFwaUVudHJ5Ow0KPiArICBQeGVTdy0+cmVzZXJ2ZWQyWzBdID0gMDsNCj4gKyAgUHhl U3ctPnJlc2VydmVkMlsxXSA9IDA7DQo+ICsgIFB4ZVN3LT5yZXNlcnZlZDJbMl0gPSAwOw0KPiAr ICBQeGVTdy0+QnVzQ250ICAgICAgID0gMTsNCj4gKyAgUHhlU3ctPkJ1c1R5cGVbMF0gICA9IFBY RV9CVVNUWVBFX1VTQjsNCj4gKyAgUHhlU3ctPkZ1ZGdlICAgICAgICA9IFB4ZVN3LT5GdWRnZSAt IENhbGN1bGF0ZVN1bTggKChWT0lEICopUHhlU3csDQo+IFB4ZVN3LT5MZW4pOw0KPiArfQ0KPiAr DQo+ICsvKioNCj4gKyAgVXBkYXRlIE5JQyBudW1iZXIuDQo+ICsNCj4gKyAgQHBhcmFtW2luXSAg ICAgIE5pYyAgICAgICBBIHBvaW50ZXIgdG8gdGhlIE5ldHdvcmsgaW50ZXJmYWNlIGNvbnRyb2xs ZXIgZGF0YS4NCj4gKyAgQHBhcmFtW2luLCBvdXRdIFB4ZVN3ICAgICBBIHBvaW50ZXIgdG8gdGhl IFBYRSBTVyBVTkRJIHN0cnVjdHVyZS4NCj4gKw0KPiArKiovDQo+ICtWT0lEDQo+ICtVcGRhdGVO aWNOdW0gKA0KPiArICBJTiAgICAgIE5JQ19EQVRBICAgICAqTmljLA0KPiArICBJTiBPVVQgIFBY RV9TV19VTkRJICAqUHhlU3cNCj4gKyAgKQ0KPiArew0KPiArICBVSU5UMTYgIE5pY051bTsNCj4g Kw0KPiArICBOaWNOdW0gPSAoUHhlU3ctPklGY250IHwgUHhlU3ctPklGY250RXh0IDw8IDgpOw0K PiArDQo+ICsgIGlmIChOaWMgPT0gTlVMTCkgew0KPiArICAgIGlmIChOaWNOdW0gPiAwKSB7DQo+ ICsgICAgICBOaWNOdW0tLTsNCj4gKyAgICB9DQo+ICsNCj4gKyAgICBQeGVTdy0+SUZjbnQgICAg PSAoVUlOVDgpKE5pY051bSAmIDB4RkYpOyAgICAgICAgICAvLyBHZXQgbG93ZXIgYnl0ZQ0KPiAr ICAgIFB4ZVN3LT5JRmNudEV4dCA9IChVSU5UOCkoKE5pY051bSAmIDB4RkYwMCkgPj4gOCk7IC8v IEdldCB1cHBlciBieXRlDQo+ICsgICAgUHhlU3ctPkZ1ZGdlICAgID0gKFVJTlQ4KShQeGVTdy0+ RnVkZ2UgLSBDYWxjdWxhdGVTdW04ICgoVk9JRA0KPiAqKVB4ZVN3LCBQeGVTdy0+TGVuKSk7DQo+ ICsgICAgcmV0dXJuOw0KPiArICB9DQo+ICsNCj4gKyAgTmljTnVtKys7DQo+ICsNCj4gKyAgUHhl U3ctPklGY250ICAgID0gKFVJTlQ4KShOaWNOdW0gJiAweEZGKTsgICAgICAgICAgLy8gR2V0IGxv d2VyIGJ5dGUNCj4gKyAgUHhlU3ctPklGY250RXh0ID0gKFVJTlQ4KSgoTmljTnVtICYgMHhGRjAw KSA+PiA4KTsgLy8gR2V0IHVwcGVyIGJ5dGUNCj4gKyAgUHhlU3ctPkZ1ZGdlICAgID0gKFVJTlQ4 KShQeGVTdy0+RnVkZ2UgLSBDYWxjdWxhdGVTdW04ICgoVk9JRA0KPiAqKVB4ZVN3LCBQeGVTdy0+ TGVuKSk7DQo+ICt9DQo+ICsNCj4gKy8qKg0KPiArICBVTkRJIEFQSSB0YWJsZSBlbnRyeS4NCj4g Kw0KPiArICBAcGFyYW1baW5dICBDZGIgIEEgcG9pbnRlciB0byB0aGUgY29tbWFuZCBkZXNjcmlw dG9yIGJsb2NrLg0KPiArDQo+ICsqKi8NCj4gK1ZPSUQNCj4gK1VuZGlBcGlFbnRyeSAoDQo+ICsg IElOICBVSU5UNjQgIENkYg0KPiArICApDQo+ICt7DQo+ICsgIFBYRV9DREIgICAqQ2RiUHRyOw0K PiArICBOSUNfREFUQSAgKk5pYzsNCj4gKw0KPiArICBpZiAoQ2RiID09IDApIHsNCj4gKyAgICBy ZXR1cm47DQo+ICsgIH0NCj4gKw0KPiArICBDZGJQdHIgPSAoUFhFX0NEQiAqKShVSU5UTilDZGI7 DQo+ICsgIE5pYyAgICA9ICYoZ0xhbkRldmljZUxpc3RbQ2RiUHRyLT5JRm51bV0tPk5pY0luZm8p Ow0KPiArICBnVW5kaUFwaVRhYmxlW0NkYlB0ci0+T3BDb2RlXShDZGJQdHIsIE5pYyk7DQo+ICt9 DQo+ICsNCj4gKy8qKg0KPiArICBNYXAgdmlydHVhbCBtZW1vcnkgYWRkcmVzcyBmb3IgRE1BLiBU aGlzIGZpZWxkIGNhbiBiZSBzZXQgdG8NCj4gKyAgemVybyBpZiB0aGVyZSBpcyBubyBtYXBwaW5n IHNlcnZpY2UuDQo+ICsNCj4gKyAgQHBhcmFtW2luXSAgTmljICAgICAgICAgICBBIHBvaW50ZXIg dG8gdGhlIE5ldHdvcmsgaW50ZXJmYWNlIGNvbnRyb2xsZXIgZGF0YS4NCj4gKyAgQHBhcmFtW2lu XSAgTWVtQWRkciAgICAgICBWaXJ0dWFsIGFkZHJlc3MgdG8gYmUgbWFwcGVkLg0KPiArICBAcGFy YW1baW5dICBTaXplICAgICAgICAgIFNpemUgb2YgbWVtb3J5IHRvIGJlIG1hcHBlZC4NCj4gKyAg QHBhcmFtW2luXSAgRGlyZWN0aW9uICAgICBEaXJlY3Rpb24gb2YgZGF0YSBmbG93IGZvciB0aGlz IG1lbW9yeSdzIHVzYWdlOg0KPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNwdS0+ZGV2 aWNlLCBkZXZpY2UtPmNwdSBvciBib3RoIHdheXMuDQo+ICsgIEBwYXJhbVtvdXRdIE1hcHBlZEFk ZHIgICAgUG9pbnRlciB0byByZXR1cm4gdGhlIG1hcHBlZCBkZXZpY2UgYWRkcmVzcy4NCj4gKw0K PiArKiovDQo+ICtVSU5UTg0KPiArTWFwSXQgKA0KPiArICBJTiBOSUNfREFUQSAgKk5pYywNCj4g KyAgSU4gVUlOVDY0ICAgIE1lbUFkZHIsDQo+ICsgIElOIFVJTlQzMiAgICBTaXplLA0KPiArICBJ TiBVSU5UMzIgICAgRGlyZWN0aW9uLA0KPiArICBPVVQgVUlOVDY0ICAgTWFwcGVkQWRkcg0KPiAr ICApDQo+ICt7DQo+ICsgIFVJTlQ2NCAgKlBoeUFkZHI7DQo+ICsNCj4gKyAgUGh5QWRkciA9IChV SU5UNjQgKikoVUlOVE4pTWFwcGVkQWRkcjsNCj4gKw0KPiArICBpZiAoTmljLT5QeGVTdGFydC5N YXBfTWVtID09IDApIHsNCj4gKyAgICAqUGh5QWRkciA9IE1lbUFkZHI7DQo+ICsgIH0gZWxzZSB7 DQo+ICsgICAgKCh2b2lkICgqKShVSU5UNjQsIFVJTlQ2NCwgVUlOVDMyLCBVSU5UMzIsIFVJTlQ2 NCkpKFVJTlROKSBOaWMtDQo+ID5QeGVTdGFydC5NYXBfTWVtKSgNCj4gKyAgTmljLT5QeGVTdGFy dC5VbmlxdWVfSUQsDQo+ICsgIE1lbUFkZHIsDQo+ICsgIFNpemUsDQo+ICsgIERpcmVjdGlvbiwN Cj4gKyAgTWFwcGVkQWRkcg0KPiArICApOw0KPiArICB9DQo+ICsNCj4gKyAgcmV0dXJuIFBYRV9T VEFUQ09ERV9TVUNDRVNTOw0KPiArfQ0KPiArDQo+ICsvKioNCj4gKyAgVW4tbWFwIHByZXZpb3Vz bHkgbWFwcGVkIHZpcnR1YWwgbWVtb3J5IGFkZHJlc3MuIFRoaXMgZmllbGQgY2FuIGJlIHNldA0K PiArICB0byB6ZXJvIG9ubHkgaWYgdGhlIE1hcF9NZW0oKSBzZXJ2aWNlIGlzIGFsc28gc2V0IHRv IHplcm8uDQo+ICsNCj4gKyAgQHBhcmFtW2luXSAgTmljICAgICAgICAgICBBIHBvaW50ZXIgdG8g dGhlIE5ldHdvcmsgaW50ZXJmYWNlIGNvbnRyb2xsZXIgZGF0YS4NCj4gKyAgQHBhcmFtW2luXSAg TWVtQWRkciAgICAgICBWaXJ0dWFsIGFkZHJlc3MgdG8gYmUgbWFwcGVkLg0KPiArICBAcGFyYW1b aW5dICBTaXplICAgICAgICAgIFNpemUgb2YgbWVtb3J5IHRvIGJlIG1hcHBlZC4NCj4gKyAgQHBh cmFtW2luXSAgRGlyZWN0aW9uICAgICBEaXJlY3Rpb24gb2YgZGF0YSBmbG93IGZvciB0aGlzIG1l bW9yeSdzIHVzYWdlOg0KPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNwdS0+ZGV2aWNl LCBkZXZpY2UtPmNwdSBvciBib3RoIHdheXMuDQo+ICsgIEBwYXJhbVtpbl0gIE1hcHBlZEFkZHIg ICAgUG9pbnRlciB0byByZXR1cm4gdGhlIG1hcHBlZCBkZXZpY2UgYWRkcmVzcy4NCj4gKw0KPiAr KiovDQo+ICtWT0lEDQo+ICtVbk1hcEl0ICgNCj4gKyAgSU4gTklDX0RBVEEgICpOaWMsDQo+ICsg IElOIFVJTlQ2NCAgICBNZW1BZGRyLA0KPiArICBJTiBVSU5UMzIgICAgU2l6ZSwNCj4gKyAgSU4g VUlOVDMyICAgIERpcmVjdGlvbiwNCj4gKyAgSU4gVUlOVDY0ICAgIE1hcHBlZEFkZHINCj4gKyAg KQ0KPiArew0KPiArICBpZiAoTmljLT5QeGVTdGFydC5Vbk1hcF9NZW0gIT0gMCkgew0KPiArICAg ICgodm9pZCAoKikoVUlOVDY0LCBVSU5UNjQsIFVJTlQzMiwgVUlOVDMyLCBVSU5UNjQpKShVSU5U TikgTmljLQ0KPiA+UHhlU3RhcnQuVW5NYXBfTWVtKSgNCj4gKyAgTmljLT5QeGVTdGFydC5Vbmlx dWVfSUQsDQo+ICsgIE1lbUFkZHIsDQo+ICsgIFNpemUsDQo+ICsgIERpcmVjdGlvbiwNCj4gKyAg TWFwcGVkQWRkcg0KPiArICApOw0KPiArICB9DQo+ICsNCj4gKyAgcmV0dXJuOw0KPiArfQ0KPiBk aWZmIC0tZ2l0IGEvVXNiTmV0d29ya1BrZy9SZWFkTWUubWQgYi9Vc2JOZXR3b3JrUGtnL1JlYWRN ZS5tZA0KPiBuZXcgZmlsZSBtb2RlIDEwMDY0NA0KPiBpbmRleCAwMDAwMDAwMDAwLi5jYjcwNjg0 ZjBiDQo+IC0tLSAvZGV2L251bGwNCj4gKysrIGIvVXNiTmV0d29ya1BrZy9SZWFkTWUubWQNCj4g QEAgLTAsMCArMSw2NSBAQA0KPiArIyBVc2JOZXR3b3JrUGtnDQo+ICsNCj4gK1RoaXMgZG9jdW1l bnQgaXMgaW50ZW5kIHRvIHByb3ZpZGUgcGFja2FnZSBpbmZvcm1hdGlvbiwgaW5jbHVkZSB0aGUN Cj4gaW50ZXJmYWNlIGRldGFpbHMuDQo+ICsNCj4gKyMgSU5ERVgNCj4gKyAgKiBbSW50cm9kdWN0 aW9uXSgjaW50cm9kdWN0aW9uKQ0KPiArICAqIFtDb21wb25lbnRzXSgjY29tcG9uZW50cykNCj4g KyAgICAqIFtbTmV0d29ya0NvbW1vbl1dKCNuZXR3b3JrY29tbW9uKQ0KPiArICAgICogW1tVc2JD ZGNFY21dXSgjdXNiY2RjZWNtKQ0KPiArICAgICogW1tVc2JDZGNOY21dXSgjdXNiY2RjbmNtKQ0K PiArICAgICogW1tVc2JSbmRpc11dKCN1c2JybmRpcykNCj4gKw0KPiArIyAgSW50cm9kdWN0aW9u DQo+ICtVc2JOZXR3b3JrUGtnIHByb3ZpZGVzIG5ldHdvcmsgZnVuY3Rpb25zIGZvciBVU0IgTEFO IGRldmljZXMuDQo+ICsNCj4gKyMgQ29tcG9uZW50cw0KPiArQmVsb3cgbW9kdWxlIGlzIGluY2x1 ZGVkIGluIHRoaXMgcGFja2FnZTo8YnI+DQo+ICstIE5ldHdvcmtDb21tb24NCj4gKy0gVXNiQ2Rj RWNtDQo+ICstIFVzYkNkY05jbQ0KPiArLSBVc2JSbmRpcw0KPiArDQo+ICsjIyBbTmV0d29ya0Nv bW1vbl0NCj4gK1Byb3ZpZGVzIGEgTEFOIGRyaXZlciBiYXNlZCBvbiBVRUZJIHNwZWNpZmljYXRp b24oVU5ESSkuIEl0IHN1cHBvcnRzIFVTQg0KPiBjb21tdW5pY2F0aW9uIGNsYXNzIHN1YmNsYXNz IGRldmljZXMgYW5kIFVTQiBSbmRpcyBkZXZpY2VzLCBkZXBlbmRpbmcgb24NCj4gdGhlIFVzYkV0 aGVybmV0UHJvdG9jb2wuDQo+ICsNCj4gKyMjIFJlcXVpcmVkIENvbXBvbmVudHMNCj4gKy0gTmV0 d29ya1BrZw0KPiArDQo+ICsjIyBbVXNiQ2RjRWNtXQ0KPiArVGhpcyBkcml2ZXIgcHJvdmlkZXMg YSBjb21tdW5pY2F0aW9uIGludGVyZmFjZSBmb3IgVVNCIEV0aGVybmV0IGRldmljZXMNCj4gdGhh dCBmb2xsb3dzIHRoZSBFQ00gcHJvdG9jb2wuIFRoZSBkcml2ZXIgaW5zdGFsbHMgVXNiRXRoZXJu ZXRQcm90b2NvbCB3aXRoDQo+IEVDTSBmdW5jdGlvbnMgd2hpY2ggYXJlIGNvbnN1bWVkIGJ5IHRo ZSBOZXR3b3JrQ29tbW9uIGRyaXZlci4NCj4gKw0KPiArVGhlIGRyaXZlciBpcyBjb21wYXRpYmxl IHdpdGggdGhlIGZvbGxvd2luZyBVU0IgY2xhc3MgY29kZXM6DQo+ICt8Q2xhc3MgQ29kZXxTdWJD bGFzcyBDb2RlfFByb3RvY29sIENvZGV8DQo+ICt8Oi0tLS0tLS0tOnw6LS0tLS0tLS0tLS06fDot LS0tLS0tLS0tLTp8DQo+ICt8MHgwMnwweDA2fDB4MDB8DQo+ICsNCj4gKyMjIFJlcXVpcmVkIENv bXBvbmVudHMNCj4gKy0gTmV0d29ya0NvbW1vbg0KPiArLSBNZGVNb2R1bGVQa2coVVNCIGJ1cyBk cml2ZXIpDQo+ICsNCj4gKyMjIFtVc2JDZGNOY21dDQo+ICtUaGlzIGRyaXZlciBwcm92aWRlcyBh IGNvbW11bmljYXRpb24gaW50ZXJmYWNlIGZvciBVU0IgRXRoZXJuZXQgZGV2aWNlcw0KPiB0aGF0 IGZvbGxvd3MgdGhlIE5DTSBwcm90b2NvbC4gVGhlIGRyaXZlciBpbnN0YWxscyBVc2JFdGhlcm5l dFByb3RvY29sIHdpdGgNCj4gTkNNIGZ1bmN0aW9ucyB3aGljaCBhcmUgY29uc3VtZWQgYnkgdGhl IE5ldHdvcmtDb21tb24gZHJpdmVyLg0KPiArDQo+ICtUaGUgZHJpdmVyIGlzIGNvbXBhdGlibGUg d2l0aCB0aGUgZm9sbG93aW5nIFVTQiBjbGFzcyBjb2RlczoNCj4gK3xDbGFzcyBDb2RlfFN1YkNs YXNzIENvZGV8UHJvdG9jb2wgQ29kZXwNCj4gK3w6LS0tLS0tLS06fDotLS0tLS0tLS0tLTp8Oi0t LS0tLS0tLS0tOnwNCj4gK3wweDAyfDB4MER8MHgwMHwNCj4gKw0KPiArIyMgUmVxdWlyZWQgQ29t cG9uZW50cw0KPiArLSBOZXR3b3JrQ29tbW9uDQo+ICstIE1kZU1vZHVsZVBrZyhVU0IgYnVzIGRy aXZlcikNCj4gKw0KPiArIyMgW1VzYlJuZGlzXQ0KPiArVGhpcyBkcml2ZXIgcHJvdmlkZXMgYSBj b21tdW5pY2F0aW9uIGludGVyZmFjZSBmb3IgVVNCIEV0aGVybmV0IGRldmljZXMNCj4gdGhhdCBm b2xsb3dzIHRoZSBSTkRJUyBwcm90b2NvbC4gVGhlIGRyaXZlciBpbnN0YWxscyBVc2JFdGhlcm5l dFByb3RvY29sIHdpdGgNCj4gUk5ESVMgZnVuY3Rpb25zIHdoaWNoIGFyZSBjb25zdW1lZCBieSB0 aGUgTmV0d29ya0NvbW1vbiBkcml2ZXIuDQo+ICsNCj4gK1RoZSBkcml2ZXIgaXMgY29tcGF0aWJs ZSB3aXRoIHRoZSBmb2xsb3dpbmcgVVNCIGNsYXNzIGNvZGVzOg0KPiArfENsYXNzIENvZGV8U3Vi Q2xhc3MgQ29kZXxQcm90b2NvbCBDb2RlfA0KPiArfDotLS0tLS0tLTp8Oi0tLS0tLS0tLS0tOnw6 LS0tLS0tLS0tLS06fA0KPiArfDB4MDJ8MHgwMnwweEZGfA0KPiArfDB4RUZ8MHgwNHwweDAxfA0K PiArDQo+ICsjIyBSZXF1aXJlZCBDb21wb25lbnRzDQo+ICstIE5ldHdvcmtDb21tb24NCj4gKy0g TWRlTW9kdWxlUGtnKFVTQiBidXMgZHJpdmVyKQ0KPiArDQo+IGRpZmYgLS1naXQgYS9Vc2JOZXR3 b3JrUGtnL1JlbGVhc2VOb3Rlcy5tZA0KPiBiL1VzYk5ldHdvcmtQa2cvUmVsZWFzZU5vdGVzLm1k DQo+IG5ldyBmaWxlIG1vZGUgMTAwNjQ0DQo+IGluZGV4IDAwMDAwMDAwMDAuLmY4Y2NjY2RiMDgN Cj4gLS0tIC9kZXYvbnVsbA0KPiArKysgYi9Vc2JOZXR3b3JrUGtnL1JlbGVhc2VOb3Rlcy5tZA0K PiBAQCAtMCwwICsxLDExIEBADQo+ICsjIFVzYk5ldHdvcmtQa2cgUmVsZWFzZSBOb3RlczwhLS0g b21pdCBpbiB0b2MgLS0+DQo+ICsNCj4gKyMgUmVsZWFzZSBIaXN0b3J5PCEtLSBvbWl0IGluIHRv YyAtLT4NCj4gKy0gWzEuMDBdKCMxMDApDQo+ICsNCj4gKyMjIDEuMDANCj4gKw0KPiArKipSZWxl YXNlIERhdGU6KiogTWFyIDEwLCAyMDIyDQo+ICsNCj4gKyoqTmV3IEZlYXR1cmVzKioNCj4gKy0g VXNiTmV0d29ya1BrZyBmaXJzdCByZWxlYXNlLg0KPiBkaWZmIC0tZ2l0IGEvVXNiTmV0d29ya1Br Zy9Vc2JOZXR3b3JrUGtnLmRlYw0KPiBiL1VzYk5ldHdvcmtQa2cvVXNiTmV0d29ya1BrZy5kZWMN Cj4gbmV3IGZpbGUgbW9kZSAxMDA2NDQNCj4gaW5kZXggMDAwMDAwMDAwMC4uMDIxNTQyYTdmZA0K PiAtLS0gL2Rldi9udWxsDQo+ICsrKyBiL1VzYk5ldHdvcmtQa2cvVXNiTmV0d29ya1BrZy5kZWMN Cj4gQEAgLTAsMCArMSwzNiBAQA0KPiArIyMgQGZpbGUNCj4gKyMgIFRoaXMgcGFja2FnZSBkZWZp bmVzIFVzYiBuZXR3b3JrIHNwZWNpZmljIGludGVyZmFjZXMgYW5kIGxpYnJhcnkgY2xhc3Nlcw0K PiArIyAgYXMgd2VsbCBhcyBjb25maWd1cmF0aW9uIGZvciBzdGFuZGFyZCBlZGsyIHBhY2thZ2Vz Lg0KPiArIw0KPiArIyBDb3B5cmlnaHQgKGMpIDIwMjIsIEFtZXJpY2FuIE1lZ2F0cmVuZHMgSW50 ZXJuYXRpb25hbCBMTEMuIEFsbCByaWdodHMNCj4gcmVzZXJ2ZWQuPEJSPg0KPiArIyBTUERYLUxp Y2Vuc2UtSWRlbnRpZmllcjogQlNELTItQ2xhdXNlLVBhdGVudA0KPiArIyMNCj4gKw0KPiArW0Rl ZmluZXNdDQo+ICsgIERFQ19TUEVDSUZJQ0FUSU9OICAgICAgICAgICAgICA9IDB4MDAwMTAwMDUN Cj4gKyAgUEFDS0FHRV9OQU1FICAgICAgICAgICAgICAgICAgID0gVXNiTmV0d29ya1BrZw0KPiAr ICBQQUNLQUdFX0dVSUQgICAgICAgICAgICAgICAgICAgPSBhYmZhYjkxZS0zN2VhLTRjYjQtODBh Ni01NjNkYmIwYmNlYzYNCj4gKyAgUEFDS0FHRV9WRVJTSU9OICAgICAgICAgICAgICAgID0gMC4x DQo+ICsNCj4gK1tJbmNsdWRlc10NCj4gKyAgSW5jbHVkZQ0KPiArDQo+ICtbUHJvdG9jb2xzXQ0K PiArICAjIyBJbmNsdWRlL1Byb3RvY29sL0Vka0lJVXNiRXRoZXJuZXQuaA0KPiArICBnRWRrSUlV c2JFdGhQcm90b2NvbEd1aWQgPSB7IDB4OGQ4OTY5Y2MsIDB4ZmViMCwgMHg0MzAzLCB7IDB4YjIs IDB4MWEsDQo+IDB4MWYsIDB4MTEsIDB4NmYsIDB4MzgsIDB4NTYsIDB4NDMgfSB9DQo+ICsNCj4g K1tHdWlkc10NCj4gKyAgIyMgVXNiIE5ldHdvcmsgcGFja2FnZSB0b2tlbiBzcGFjZSBHVUlEDQo+ ICsgIGdVc2JOZXR3b3JrUGtnVG9rZW5TcGFjZUd1aWQgID0geyAweEExMjMxRTgyLCAweDIxQjgs IDB4NDIwNCwgeyAweDkyLA0KPiAweEJCLCAweDM3LCAweDNBLCAweEZCLCAweDAxLCAweEM2LCAw eEExIH0gfQ0KPiArDQo+ICtbUGNkc0ZlYXR1cmVGbGFnXQ0KPiArDQo+ICsgICMjIFNldCB0aGUg UENEICdVc2JDZGNFY21TdXBwb3J0JyB0byAnVFJVRScgaWYgJ1VzYiBDZGMgRWNtIGRldmljZScg bmVlZA0KPiB0byBiZSBlbmFibGVkLg0KPiArDQo+IGdVc2JOZXR3b3JrUGtnVG9rZW5TcGFjZUd1 aWQuVXNiQ2RjRWNtU3VwcG9ydHxGQUxTRXxCT09MRUFOfDB4DQo+IDAwMDAwMDAxDQo+ICsNCj4g KyAgIyMgU2V0IHRoZSBQQ0QgJ1VzYkNkY05jbVN1cHBvcnQnIHRvICdUUlVFJyBpZiAnVXNiIENk YyBOY20gZGV2aWNlJw0KPiBuZWVkIHRvIGJlIGVuYWJsZWQuDQo+ICsNCj4gZ1VzYk5ldHdvcmtQ a2dUb2tlblNwYWNlR3VpZC5Vc2JDZGNOY21TdXBwb3J0fEZBTFNFfEJPT0xFQU58MHgNCj4gMDAw MDAwMDINCj4gKw0KPiArICAjIyBTZXQgdGhlIFBDRCAnVXNiUm5kaXNTdXBwb3J0JyB0byAnVFJV RScgaWYgJ1VzYiBSbmRpcyBkZXZpY2UnIG5lZWQgdG8gYmUNCj4gZW5hYmxlZC4NCj4gKw0KPiBn VXNiTmV0d29ya1BrZ1Rva2VuU3BhY2VHdWlkLlVzYlJuZGlzU3VwcG9ydHxUUlVFfEJPT0xFQU58 MHgwMDANCj4gMDAwMDMNCj4gKw0KPiBkaWZmIC0tZ2l0IGEvVXNiTmV0d29ya1BrZy9Vc2JSbmRp cy9Db21wb25lbnROYW1lLmMNCj4gYi9Vc2JOZXR3b3JrUGtnL1VzYlJuZGlzL0NvbXBvbmVudE5h bWUuYw0KPiBuZXcgZmlsZSBtb2RlIDEwMDY0NA0KPiBpbmRleCAwMDAwMDAwMDAwLi40MzdkNzc2 YjE3DQo+IC0tLSAvZGV2L251bGwNCj4gKysrIGIvVXNiTmV0d29ya1BrZy9Vc2JSbmRpcy9Db21w b25lbnROYW1lLmMNCj4gQEAgLTAsMCArMSwxNzIgQEANCj4gKy8qKiBAZmlsZQ0KPiArICBUaGlz IGZpbGUgY29udGFpbnMgY29kZSBmb3IgVVNCIFJORElTIERyaXZlciBDb21wb25lbnQNCj4gKyAg TmFtZSBkZWZpbml0aW9ucw0KPiArDQo+ICsgIENvcHlyaWdodCAoYykgMjAyMiwgQW1lcmljYW4g TWVnYXRyZW5kcyBJbnRlcm5hdGlvbmFsIExMQy4gQWxsIHJpZ2h0cw0KPiByZXNlcnZlZC48QlI+ DQo+ICsgIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBCU0QtMi1DbGF1c2UtUGF0ZW50DQo+ICsq Ki8NCj4gKw0KPiArI2luY2x1ZGUgIlVzYlJuZGlzLmgiDQo+ICsNCj4gK0dMT0JBTF9SRU1PVkVf SUZfVU5SRUZFUkVOQ0VEIEVGSV9VTklDT0RFX1NUUklOR19UQUJMRQ0KPiBnVXNiUm5kaXNEcml2 ZXJOYW1lVGFibGVbXSA9IHsNCj4gKyAgew0KPiArICAgICJlbmc7ZW4iLA0KPiArICAgIEwiVVNC IFJORElTIERyaXZlciINCj4gKyAgfSwNCj4gKyAgew0KPiArICAgIE5VTEwsDQo+ICsgICAgTlVM TA0KPiArICB9DQo+ICt9Ow0KPiArDQo+ICtFRklfU1RBVFVTDQo+ICtFRklBUEkNCj4gK1VzYlJu ZGlzQ29tcG9uZW50TmFtZUdldERyaXZlck5hbWUgKA0KPiArICBJTiAgRUZJX0NPTVBPTkVOVF9O QU1FX1BST1RPQ09MICAqVGhpcywNCj4gKyAgSU4gIENIQVI4ICAgICAgICAgICAgICAgICAgICAg ICAgKkxhbmd1YWdlLA0KPiArICBPVVQgQ0hBUjE2ICAgICAgICAgICAgICAgICAgICAgICAqKkRy aXZlck5hbWUNCj4gKyAgKTsNCj4gKw0KPiArRUZJX1NUQVRVUw0KPiArRUZJQVBJDQo+ICtVc2JS bmRpc0NvbXBvbmVudE5hbWVHZXRDb250cm9sbGVyTmFtZSAoDQo+ICsgIElOIEVGSV9DT01QT05F TlRfTkFNRV9QUk9UT0NPTCAgKlRoaXMsDQo+ICsgIElOIEVGSV9IQU5ETEUgICAgICAgICAgICAg ICAgICAgQ29udHJvbGxlciwNCj4gKyAgSU4gRUZJX0hBTkRMRSAgICAgICAgICAgICAgICAgICBD aGlsZEhhbmRsZSAgICAgICAgT1BUSU9OQUwsDQo+ICsgIElOIENIQVI4ICAgICAgICAgICAgICAg ICAgICAgICAgKkxhbmd1YWdlLA0KPiArICBPVVQgQ0hBUjE2ICAgICAgICAgICAgICAgICAgICAg ICoqQ29udHJvbGxlck5hbWUNCj4gKyAgKTsNCj4gKw0KPiArR0xPQkFMX1JFTU9WRV9JRl9VTlJF RkVSRU5DRUQNCj4gRUZJX0NPTVBPTkVOVF9OQU1FX1BST1RPQ09MICBnVXNiUm5kaXNDb21wb25l bnROYW1lID0gew0KPiArICBVc2JSbmRpc0NvbXBvbmVudE5hbWVHZXREcml2ZXJOYW1lLA0KPiAr ICBVc2JSbmRpc0NvbXBvbmVudE5hbWVHZXRDb250cm9sbGVyTmFtZSwNCj4gKyAgImVuZyINCj4g K307DQo+ICsNCj4gK0dMT0JBTF9SRU1PVkVfSUZfVU5SRUZFUkVOQ0VEDQo+IEVGSV9DT01QT05F TlRfTkFNRTJfUFJPVE9DT0wgIGdVc2JSbmRpc0NvbXBvbmVudE5hbWUyID0gew0KPiArDQo+IChF RklfQ09NUE9ORU5UX05BTUUyX0dFVF9EUklWRVJfTkFNRSlVc2JSbmRpc0NvbXBvbmVudE5hbQ0K PiBlR2V0RHJpdmVyTmFtZSwNCj4gKw0KPiAoRUZJX0NPTVBPTkVOVF9OQU1FMl9HRVRfQ09OVFJP TExFUl9OQU1FKVVzYlJuZGlzQ29tcG9uZW50DQo+IE5hbWVHZXRDb250cm9sbGVyTmFtZSwNCj4g KyAgImVuIg0KPiArfTsNCj4gKw0KPiArLyoqDQo+ICsgIFJldHJpZXZlcyBhIFVuaWNvZGUgc3Ry aW5nIHRoYXQgaXMgdGhlIHVzZXIgcmVhZGFibGUgbmFtZSBvZiB0aGUgZHJpdmVyLg0KPiArDQo+ ICsgIFRoaXMgZnVuY3Rpb24gcmV0cmlldmVzIHRoZSB1c2VyIHJlYWRhYmxlIG5hbWUgb2YgYSBk cml2ZXIgaW4gdGhlIGZvcm0gb2YgYQ0KPiArICBVbmljb2RlIHN0cmluZy4gSWYgdGhlIGRyaXZl ciBzcGVjaWZpZWQgYnkgVGhpcyBoYXMgYSB1c2VyIHJlYWRhYmxlIG5hbWUgaW4NCj4gKyAgdGhl IGxhbmd1YWdlIHNwZWNpZmllZCBieSBMYW5ndWFnZSwgdGhlbiBhIHBvaW50ZXIgdG8gdGhlIGRy aXZlciBuYW1lIGlzDQo+ICsgIHJldHVybmVkIGluIERyaXZlck5hbWUsIGFuZCBFRklfU1VDQ0VT UyBpcyByZXR1cm5lZC4gSWYgdGhlIGRyaXZlcg0KPiBzcGVjaWZpZWQNCj4gKyAgYnkgVGhpcyBk b2VzIG5vdCBzdXBwb3J0IHRoZSBsYW5ndWFnZSBzcGVjaWZpZWQgYnkgTGFuZ3VhZ2UsDQo+ICsg IHRoZW4gRUZJX1VOU1VQUE9SVEVEIGlzIHJldHVybmVkLg0KPiArDQo+ICsgIEBwYXJhbVtpbl0g IFRoaXMgICAgICAgICAgICAgIEEgcG9pbnRlciB0byB0aGUNCj4gRUZJX0NPTVBPTkVOVF9OQU1F Ml9QUk9UT0NPTCBvcg0KPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBFRklfQ09N UE9ORU5UX05BTUVfUFJPVE9DT0wgaW5zdGFuY2UuDQo+ICsgIEBwYXJhbVtpbl0gIExhbmd1YWdl ICAgICAgICAgIEEgcG9pbnRlciB0byBhIE51bGwtdGVybWluYXRlZCBBU0NJSSBzdHJpbmcNCj4g KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXJyYXkgaW5kaWNhdGluZyB0aGUgbGFu Z3VhZ2UuIFRoaXMgaXMgdGhlDQo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxh bmd1YWdlIG9mIHRoZSBkcml2ZXIgbmFtZSB0aGF0IHRoZSBjYWxsZXIgaXMNCj4gKyAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgcmVxdWVzdGluZywgYW5kIGl0IG11c3QgbWF0Y2ggb25l IG9mIHRoZQ0KPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsYW5ndWFnZXMgc3Bl Y2lmaWVkIGluIFN1cHBvcnRlZExhbmd1YWdlcy4gVGhlDQo+ICsgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIG51bWJlciBvZiBsYW5ndWFnZXMgc3VwcG9ydGVkIGJ5IGEgZHJpdmVyIGlz IHVwDQo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRvIHRoZSBkcml2ZXIgd3Jp dGVyLiBMYW5ndWFnZSBpcyBzcGVjaWZpZWQNCj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgaW4gUkZDIDQ2NDYgb3IgSVNPIDYzOS0yIGxhbmd1YWdlIGNvZGUgZm9ybWF0Lg0KPiAr ICBAcGFyYW1bb3V0XSBEcml2ZXJOYW1lICAgICAgICBBIHBvaW50ZXIgdG8gdGhlIFVuaWNvZGUg c3RyaW5nIHRvIHJldHVybi4NCj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVGhp cyBVbmljb2RlIHN0cmluZyBpcyB0aGUgbmFtZSBvZiB0aGUNCj4gKyAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgZHJpdmVyIHNwZWNpZmllZCBieSBUaGlzIGluIHRoZSBsYW5ndWFnZQ0K PiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzcGVjaWZpZWQgYnkgTGFuZ3VhZ2Uu DQo+ICsNCj4gKyAgQHJldHZhbCBFRklfU1VDQ0VTUyAgICAgICAgICAgVGhlIFVuaWNvZGUgc3Ry aW5nIGZvciB0aGUgRHJpdmVyIHNwZWNpZmllZCBieQ0KPiArICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBUaGlzIGFuZCB0aGUgbGFuZ3VhZ2Ugc3BlY2lmaWVkIGJ5IExhbmd1YWdlIHdh cw0KPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm5lZCBpbiBEcml2ZXJO YW1lLg0KPiArICBAcmV0dmFsIEVGSV9JTlZBTElEX1BBUkFNRVRFUiBMYW5ndWFnZSBpcyBOVUxM Lg0KPiArICBAcmV0dmFsIEVGSV9JTlZBTElEX1BBUkFNRVRFUiBEcml2ZXJOYW1lIGlzIE5VTEwu DQo+ICsgIEByZXR2YWwgRUZJX1VOU1VQUE9SVEVEICAgICAgIFRoZSBkcml2ZXIgc3BlY2lmaWVk IGJ5IFRoaXMgZG9lcyBub3QNCj4gc3VwcG9ydA0KPiArICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICB0aGUgbGFuZ3VhZ2Ugc3BlY2lmaWVkIGJ5IExhbmd1YWdlLg0KPiArDQo+ICsqKi8N Cj4gK0VGSV9TVEFUVVMNCj4gK0VGSUFQSQ0KPiArVXNiUm5kaXNDb21wb25lbnROYW1lR2V0RHJp dmVyTmFtZSAoDQo+ICsgIElOICBFRklfQ09NUE9ORU5UX05BTUVfUFJPVE9DT0wgICpUaGlzLA0K PiArICBJTiAgQ0hBUjggICAgICAgICAgICAgICAgICAgICAgICAqTGFuZ3VhZ2UsDQo+ICsgIE9V VCBDSEFSMTYgICAgICAgICAgICAgICAgICAgICAgICoqRHJpdmVyTmFtZQ0KPiArICApDQo+ICt7 DQo+ICsgIHJldHVybiBMb29rdXBVbmljb2RlU3RyaW5nMiAoDQo+ICsgICAgICAgICAgIExhbmd1 YWdlLA0KPiArICAgICAgICAgICBUaGlzLT5TdXBwb3J0ZWRMYW5ndWFnZXMsDQo+ICsgICAgICAg ICAgIGdVc2JSbmRpc0RyaXZlck5hbWVUYWJsZSwNCj4gKyAgICAgICAgICAgRHJpdmVyTmFtZSwN Cj4gKyAgICAgICAgICAgKEJPT0xFQU4pKFRoaXMgPT0gJmdVc2JSbmRpc0NvbXBvbmVudE5hbWUp DQo+ICsgICAgICAgICAgICk7DQo+ICt9DQo+ICsNCj4gKy8qKg0KPiArICBSZXRyaWV2ZXMgYSBV bmljb2RlIHN0cmluZyB0aGF0IGlzIHRoZSB1c2VyIHJlYWRhYmxlIG5hbWUgb2YgdGhlIGNvbnRy b2xsZXINCj4gKyAgdGhhdCBpcyBiZWluZyBtYW5hZ2VkIGJ5IGEgZHJpdmVyLg0KPiArDQo+ICsg IFRoaXMgZnVuY3Rpb24gcmV0cmlldmVzIHRoZSB1c2VyIHJlYWRhYmxlIG5hbWUgb2YgdGhlIGNv bnRyb2xsZXIgc3BlY2lmaWVkDQo+IGJ5DQo+ICsgIENvbnRyb2xsZXJIYW5kbGUgYW5kIENoaWxk SGFuZGxlIGluIHRoZSBmb3JtIG9mIGEgVW5pY29kZSBzdHJpbmcuIElmIHRoZQ0KPiArICBkcml2 ZXIgc3BlY2lmaWVkIGJ5IFRoaXMgaGFzIGEgdXNlciByZWFkYWJsZSBuYW1lIGluIHRoZSBsYW5n dWFnZSBzcGVjaWZpZWQNCj4gYnkNCj4gKyAgTGFuZ3VhZ2UsIHRoZW4gYSBwb2ludGVyIHRvIHRo ZSBjb250cm9sbGVyIG5hbWUgaXMgcmV0dXJuZWQgaW4NCj4gQ29udHJvbGxlck5hbWUsDQo+ICsg IGFuZCBFRklfU1VDQ0VTUyBpcyByZXR1cm5lZC4gIElmIHRoZSBkcml2ZXIgc3BlY2lmaWVkIGJ5 IFRoaXMgaXMgbm90IGN1cnJlbnRseQ0KPiArICBtYW5hZ2luZyB0aGUgY29udHJvbGxlciBzcGVj aWZpZWQgYnkgQ29udHJvbGxlckhhbmRsZSBhbmQgQ2hpbGRIYW5kbGUsDQo+ICsgIHRoZW4gRUZJ X1VOU1VQUE9SVEVEIGlzIHJldHVybmVkLiAgSWYgdGhlIGRyaXZlciBzcGVjaWZpZWQgYnkgVGhp cyBkb2VzDQo+IG5vdA0KPiArICBzdXBwb3J0IHRoZSBsYW5ndWFnZSBzcGVjaWZpZWQgYnkgTGFu Z3VhZ2UsIHRoZW4gRUZJX1VOU1VQUE9SVEVEIGlzDQo+IHJldHVybmVkLg0KPiArDQo+ICsgIEBw YXJhbVtpbl0gIFRoaXMgICAgICAgICAgICAgIEEgcG9pbnRlciB0byB0aGUNCj4gRUZJX0NPTVBP TkVOVF9OQU1FMl9QUk9UT0NPTCBvcg0KPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBFRklfQ09NUE9ORU5UX05BTUVfUFJPVE9DT0wgaW5zdGFuY2UuDQo+ICsgIEBwYXJhbVtpbl0g IENvbnRyb2xsZXIgICAgICAgIFRoZSBoYW5kbGUgb2YgYSBjb250cm9sbGVyIHRoYXQgdGhlIGRy aXZlcg0KPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzcGVjaWZpZWQgYnkgVGhp cyBpcyBtYW5hZ2luZy4gIFRoaXMgaGFuZGxlDQo+ICsgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIHNwZWNpZmllcyB0aGUgY29udHJvbGxlciB3aG9zZSBuYW1lIGlzIHRvIGJlDQo+ICsg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybmVkLg0KPiArICBAcGFyYW1baW5d ICBDaGlsZEhhbmRsZSAgICAgICBUaGUgaGFuZGxlIG9mIHRoZSBjaGlsZCBjb250cm9sbGVyIHRv IHJldHJpZXZlDQo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoZSBuYW1lIG9m LiAgVGhpcyBpcyBhbiBvcHRpb25hbCBwYXJhbWV0ZXIgdGhhdA0KPiArICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBtYXkgYmUgTlVMTC4gIEl0IHdpbGwgYmUgTlVMTCBmb3IgZGV2aWNl DQo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRyaXZlcnMuICBJdCB3aWxsIGFs c28gYmUgTlVMTCBmb3IgYSBidXMgZHJpdmVycw0KPiArICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICB0aGF0IHdpc2ggdG8gcmV0cmlldmUgdGhlIG5hbWUgb2YgdGhlIGJ1cw0KPiArICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250cm9sbGVyLiAgSXQgd2lsbCBub3QgYmUg TlVMTCBmb3IgYSBidXMNCj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZHJpdmVy IHRoYXQgd2lzaGVzIHRvIHJldHJpZXZlIHRoZSBuYW1lIG9mIGENCj4gKyAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgY2hpbGQgY29udHJvbGxlci4NCj4gKyAgQHBhcmFtW2luXSAgTGFu Z3VhZ2UgICAgICAgICAgQSBwb2ludGVyIHRvIGEgTnVsbC10ZXJtaW5hdGVkIEFTQ0lJIHN0cmlu Zw0KPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcnJheSBpbmRpY2F0aW5nIHRo ZSBsYW5ndWFnZS4gIFRoaXMgaXMgdGhlDQo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIGxhbmd1YWdlIG9mIHRoZSBkcml2ZXIgbmFtZSB0aGF0IHRoZSBjYWxsZXIgaXMNCj4gKyAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVxdWVzdGluZywgYW5kIGl0IG11c3QgbWF0 Y2ggb25lIG9mIHRoZQ0KPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsYW5ndWFn ZXMgc3BlY2lmaWVkIGluIFN1cHBvcnRlZExhbmd1YWdlcy4gVGhlDQo+ICsgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIG51bWJlciBvZiBsYW5ndWFnZXMgc3VwcG9ydGVkIGJ5IGEgZHJp dmVyIGlzIHVwDQo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRvIHRoZSBkcml2 ZXIgd3JpdGVyLiBMYW5ndWFnZSBpcyBzcGVjaWZpZWQgaW4NCj4gKyAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgUkZDIDQ2NDYgb3IgSVNPIDYzOS0yIGxhbmd1YWdlIGNvZGUgZm9ybWF0 Lg0KPiArICBAcGFyYW1bb3V0XSBDb250cm9sbGVyTmFtZSAgICBBIHBvaW50ZXIgdG8gdGhlIFVu aWNvZGUgc3RyaW5nIHRvIHJldHVybi4NCj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgVGhpcyBVbmljb2RlIHN0cmluZyBpcyB0aGUgbmFtZSBvZiB0aGUNCj4gKyAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgY29udHJvbGxlciBzcGVjaWZpZWQgYnkgQ29udHJvbGxlckhh bmRsZSBhbmQNCj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ2hpbGRIYW5kbGUg aW4gdGhlIGxhbmd1YWdlIHNwZWNpZmllZCBieQ0KPiArICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBMYW5ndWFnZSBmcm9tIHRoZSBwb2ludCBvZiB2aWV3IG9mIHRoZSBkcml2ZXINCj4g KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3BlY2lmaWVkIGJ5IFRoaXMuDQo+ICsN Cj4gKyAgQHJldHZhbCBFRklfU1VDQ0VTUyAgICAgICAgICAgVGhlIFVuaWNvZGUgc3RyaW5nIGZv ciB0aGUgdXNlciByZWFkYWJsZSBuYW1lDQo+IGluDQo+ICsgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIHRoZSBsYW5ndWFnZSBzcGVjaWZpZWQgYnkgTGFuZ3VhZ2UgZm9yIHRoZQ0KPiAr ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkcml2ZXIgc3BlY2lmaWVkIGJ5IFRoaXMg d2FzIHJldHVybmVkIGluDQo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIERyaXZl ck5hbWUuDQo+ICsgIEByZXR2YWwgRUZJX0lOVkFMSURfUEFSQU1FVEVSIENvbnRyb2xsZXJIYW5k bGUgaXMgbm90IGEgdmFsaWQNCj4gRUZJX0hBTkRMRS4NCj4gKyAgQHJldHZhbCBFRklfSU5WQUxJ RF9QQVJBTUVURVIgQ2hpbGRIYW5kbGUgaXMgbm90IE5VTEwgYW5kIGl0IGlzIG5vdCBhDQo+IHZh bGlkDQo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEVGSV9IQU5ETEUuDQo+ICsg IEByZXR2YWwgRUZJX0lOVkFMSURfUEFSQU1FVEVSIExhbmd1YWdlIGlzIE5VTEwuDQo+ICsgIEBy ZXR2YWwgRUZJX0lOVkFMSURfUEFSQU1FVEVSIENvbnRyb2xsZXJOYW1lIGlzIE5VTEwuDQo+ICsg IEByZXR2YWwgRUZJX1VOU1VQUE9SVEVEICAgICAgIFRoZSBkcml2ZXIgc3BlY2lmaWVkIGJ5IFRo aXMgaXMgbm90IGN1cnJlbnRseQ0KPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBt YW5hZ2luZyB0aGUgY29udHJvbGxlciBzcGVjaWZpZWQgYnkNCj4gKyAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgQ29udHJvbGxlckhhbmRsZSBhbmQgQ2hpbGRIYW5kbGUuDQo+ICsgIEBy ZXR2YWwgRUZJX1VOU1VQUE9SVEVEICAgICAgIFRoZSBkcml2ZXIgc3BlY2lmaWVkIGJ5IFRoaXMg ZG9lcyBub3QNCj4gc3VwcG9ydA0KPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0 aGUgbGFuZ3VhZ2Ugc3BlY2lmaWVkIGJ5IExhbmd1YWdlLg0KPiArDQo+ICsqKi8NCj4gK0VGSV9T VEFUVVMNCj4gK0VGSUFQSQ0KPiArVXNiUm5kaXNDb21wb25lbnROYW1lR2V0Q29udHJvbGxlck5h bWUgKA0KPiArICBJTiBFRklfQ09NUE9ORU5UX05BTUVfUFJPVE9DT0wgICpUaGlzLA0KPiArICBJ TiBFRklfSEFORExFICAgICAgICAgICAgICAgICAgIENvbnRyb2xsZXIsDQo+ICsgIElOIEVGSV9I QU5ETEUgICAgICAgICAgICAgICAgICAgQ2hpbGRIYW5kbGUgICAgICAgIE9QVElPTkFMLA0KPiAr ICBJTiBDSEFSOCAgICAgICAgICAgICAgICAgICAgICAgICpMYW5ndWFnZSwNCj4gKyAgT1VUIENI QVIxNiAgICAgICAgICAgICAgICAgICAgICAqKkNvbnRyb2xsZXJOYW1lDQo+ICsgICkNCj4gK3sN Cj4gKyAgcmV0dXJuIEVGSV9VTlNVUFBPUlRFRDsNCj4gK30NCj4gZGlmZiAtLWdpdCBhL1VzYk5l dHdvcmtQa2cvVXNiUm5kaXMvVXNiUm5kaXMuYw0KPiBiL1VzYk5ldHdvcmtQa2cvVXNiUm5kaXMv VXNiUm5kaXMuYw0KPiBuZXcgZmlsZSBtb2RlIDEwMDY0NA0KPiBpbmRleCAwMDAwMDAwMDAwLi44 ZWMzMjZjNjU2DQo+IC0tLSAvZGV2L251bGwNCj4gKysrIGIvVXNiTmV0d29ya1BrZy9Vc2JSbmRp cy9Vc2JSbmRpcy5jDQo+IEBAIC0wLDAgKzEsODQ1IEBADQo+ICsvKiogQGZpbGUNCj4gKyAgVGhp cyBmaWxlIGNvbnRhaW5zIGNvZGUgZm9yIFVTQiBSZW1vdGUgTmV0d29yayBEcml2ZXINCj4gKyAg SW50ZXJmYWNlIFNwZWMuIERyaXZlciBCaW5kaW5nDQo+ICsNCj4gKyAgQ29weXJpZ2h0IChjKSAy MDIyLCBBbWVyaWNhbiBNZWdhdHJlbmRzIEludGVybmF0aW9uYWwgTExDLiBBbGwgcmlnaHRzDQo+ IHJlc2VydmVkLjxCUj4NCj4gKyAgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEJTRC0yLUNsYXVz ZS1QYXRlbnQNCj4gKyoqLw0KPiArDQo+ICsjaW5jbHVkZSAiVXNiUm5kaXMuaCINCj4gKw0KPiAr RUZJX0RSSVZFUl9CSU5ESU5HX1BST1RPQ09MICBnVXNiUm5kaXNEcml2ZXJCaW5kaW5nID0gew0K PiArICBVc2JSbmRpc0RyaXZlclN1cHBvcnRlZCwNCj4gKyAgVXNiUm5kaXNEcml2ZXJTdGFydCwN Cj4gKyAgVXNiUm5kaXNEcml2ZXJTdG9wLA0KPiArICBVU0JfUk5ESVNfRFJJVkVSX1ZFUlNJT04s DQo+ICsgIE5VTEwsDQo+ICsgIE5VTEwNCj4gK307DQo+ICsNCj4gKy8qKg0KPiArICBDaGVjayBp ZiB0aGlzIGludGVyZmFjZSBpcyBVU0IgUm5kaXMgU3ViVHlwZQ0KPiArDQo+ICsgIEBwYXJhbVtp bl0gIFVzYklvICBBIHBvaW50ZXIgdG8gdGhlIEVGSV9VU0JfSU9fUFJPVE9DT0wgaW5zdGFuY2Uu DQo+ICsNCj4gKyAgQHJldHZhbCBUUlVFICAgVVNCIFJuZGlzIFN1YlR5cGUuDQo+ICsgIEByZXR2 YWwgRkFMU0UgIE5vdCBVU0IgUm5kaXMgU3ViVHlwZS4NCj4gKw0KPiArKiovDQo+ICtCT09MRUFO DQo+ICtJc1N1cHBvcnRlZERldmljZSAoDQo+ICsgIElOIEVGSV9VU0JfSU9fUFJPVE9DT0wgICpV c2JJbw0KPiArICApDQo+ICt7DQo+ICsgIEVGSV9TVEFUVVMgICAgICAgICAgICAgICAgICAgIFN0 YXR1czsNCj4gKyAgRUZJX1VTQl9JTlRFUkZBQ0VfREVTQ1JJUFRPUiAgSW50ZXJmYWNlRGVzY3Jp cHRvcjsNCj4gKw0KPiArICBTdGF0dXMgPSBVc2JJby0+VXNiR2V0SW50ZXJmYWNlRGVzY3JpcHRv ciAoVXNiSW8sICZJbnRlcmZhY2VEZXNjcmlwdG9yKTsNCj4gKyAgaWYgKEVGSV9FUlJPUiAoU3Rh dHVzKSkgew0KPiArICAgIHJldHVybiBGQUxTRTsNCj4gKyAgfQ0KPiArDQo+ICsgIC8vIENoZWNr IHNwZWNpZmljIGRldmljZS9STkRJUyBhbmQgQ0RDLURBVEENCj4gKyAgaWYgKCgoSW50ZXJmYWNl RGVzY3JpcHRvci5JbnRlcmZhY2VDbGFzcyA9PSAweDIpICYmDQo+ICsgICAgICAgKEludGVyZmFj ZURlc2NyaXB0b3IuSW50ZXJmYWNlU3ViQ2xhc3MgPT0gMHgyKSAmJg0KPiArICAgICAgIChJbnRl cmZhY2VEZXNjcmlwdG9yLkludGVyZmFjZVByb3RvY29sID09IDB4RkYpKSB8fCBcDQo+ICsgICAg ICAoKEludGVyZmFjZURlc2NyaXB0b3IuSW50ZXJmYWNlQ2xhc3MgPT0gMHhFRikgJiYNCj4gKyAg ICAgICAoSW50ZXJmYWNlRGVzY3JpcHRvci5JbnRlcmZhY2VTdWJDbGFzcyA9PSAweDQpICYmDQo+ ICsgICAgICAgKEludGVyZmFjZURlc2NyaXB0b3IuSW50ZXJmYWNlUHJvdG9jb2wgPT0gMHgxKSkg fHwgXA0KPiArICAgICAgKChJbnRlcmZhY2VEZXNjcmlwdG9yLkludGVyZmFjZUNsYXNzID09IDB4 QSkgJiYNCj4gKyAgICAgICAoSW50ZXJmYWNlRGVzY3JpcHRvci5JbnRlcmZhY2VTdWJDbGFzcyA9 PSAweDApICYmDQo+ICsgICAgICAgKEludGVyZmFjZURlc2NyaXB0b3IuSW50ZXJmYWNlUHJvdG9j b2wgPT0gMHgwMCkpDQo+ICsgICAgICApDQo+ICsgIHsNCj4gKyAgICByZXR1cm4gVFJVRTsNCj4g KyAgfQ0KPiArDQo+ICsgIHJldHVybiBGQUxTRTsNCj4gK30NCj4gKw0KPiArLyoqDQo+ICsgIENo ZWNrIGlmIHRoaXMgaW50ZXJmYWNlIGlzIFVTQiBSbmRpcyBTdWJUeXBlIGJ1dCBub3QgQ0RDIERh dGEgaW50ZXJmYWNlDQo+ICsNCj4gKyAgQHBhcmFtW2luXSAgVXNiSW8gIEEgcG9pbnRlciB0byB0 aGUgRUZJX1VTQl9JT19QUk9UT0NPTCBpbnN0YW5jZS4NCj4gKw0KPiArICBAcmV0dmFsIFRSVUUg ICBVU0IgUm5kaXMgU3ViVHlwZS4NCj4gKyAgQHJldHZhbCBGQUxTRSAgTm90IFVTQiBSbmRpcyBT dWJUeXBlLg0KPiArDQo+ICsqKi8NCj4gK0JPT0xFQU4NCj4gK0lzUm5kaXNJbnRlcmZhY2UgKA0K PiArICBJTiBFRklfVVNCX0lPX1BST1RPQ09MICAqVXNiSW8NCj4gKyAgKQ0KPiArew0KPiArICBF RklfU1RBVFVTICAgICAgICAgICAgICAgICAgICBTdGF0dXM7DQo+ICsgIEVGSV9VU0JfSU5URVJG QUNFX0RFU0NSSVBUT1IgIEludGVyZmFjZURlc2NyaXB0b3I7DQo+ICsNCj4gKyAgU3RhdHVzID0g VXNiSW8tPlVzYkdldEludGVyZmFjZURlc2NyaXB0b3IgKFVzYklvLCAmSW50ZXJmYWNlRGVzY3Jp cHRvcik7DQo+ICsgIGlmIChFRklfRVJST1IgKFN0YXR1cykpIHsNCj4gKyAgICByZXR1cm4gRkFM U0U7DQo+ICsgIH0NCj4gKw0KPiArICAvLyBDaGVjayBmb3Igc3BlY2lmaWMgZGV2aWNlL1JORElT IGFuZCBDREMtREFUQQ0KPiArICBpZiAoKChJbnRlcmZhY2VEZXNjcmlwdG9yLkludGVyZmFjZUNs YXNzID09IDB4MikgJiYNCj4gKyAgICAgICAoSW50ZXJmYWNlRGVzY3JpcHRvci5JbnRlcmZhY2VT dWJDbGFzcyA9PSAweDIpICYmDQo+ICsgICAgICAgKEludGVyZmFjZURlc2NyaXB0b3IuSW50ZXJm YWNlUHJvdG9jb2wgPT0gMHhGRikpIHx8IFwNCj4gKyAgICAgICgoSW50ZXJmYWNlRGVzY3JpcHRv ci5JbnRlcmZhY2VDbGFzcyA9PSAweEVGKSAmJg0KPiArICAgICAgIChJbnRlcmZhY2VEZXNjcmlw dG9yLkludGVyZmFjZVN1YkNsYXNzID09IDB4NCkgJiYNCj4gKyAgICAgICAoSW50ZXJmYWNlRGVz Y3JpcHRvci5JbnRlcmZhY2VQcm90b2NvbCA9PSAweDEpKQ0KPiArICAgICAgKQ0KPiArICB7DQo+ ICsgICAgcmV0dXJuIFRSVUU7DQo+ICsgIH0NCj4gKw0KPiArICByZXR1cm4gRkFMU0U7DQo+ICt9 DQo+ICsNCj4gKy8qKg0KPiArICBDaGVjayBpZiB0aGUgVVNCIFJORElTIGFuZCBVU0IgQ0RDIERh dGEgaW50ZXJmYWNlcyBhcmUgZnJvbSB0aGUgc2FtZQ0KPiBkZXZpY2UuDQo+ICsNCj4gKyAgQHBh cmFtW2luXSAgVXNiUm5kaXNEYXRhUGF0aCAgQSBwb2ludGVyIHRvIHRoZQ0KPiBFRklfREVWSUNF X1BBVEhfUFJPVE9DT0wgaW5zdGFuY2UuDQo+ICsgIEBwYXJhbVtpbl0gIFVzYkNkY0RhdGFQYXRo ICAgIEEgcG9pbnRlciB0byB0aGUNCj4gRUZJX0RFVklDRV9QQVRIX1BST1RPQ09MIGluc3RhbmNl Lg0KPiArDQo+ICsgIEByZXR2YWwgRUZJX1NVQ0NFU1MgICAgICAgICAgIElzIHRoZSBzYW1lIGRl dmljZS4NCj4gKyAgQHJldHZhbCBFRklfVU5TVVBQT1JURUQgICAgICAgSXMgbm90IHRoZSBzYW1l IGRldmljZS4NCj4gKw0KPiArKiovDQo+ICtFRklfU1RBVFVTDQo+ICtJc1NhbWVEZXZpY2UgKA0K PiArICBJTiAgRUZJX0RFVklDRV9QQVRIX1BST1RPQ09MICAqVXNiUm5kaXNEYXRhUGF0aCwNCj4g KyAgSU4gIEVGSV9ERVZJQ0VfUEFUSF9QUk9UT0NPTCAgKlVzYkNkY0RhdGFQYXRoDQo+ICsgICkN Cj4gK3sNCj4gKyAgREVCVUcgKChERUJVR19WRVJCT1NFLCAiSXNTYW1lRGV2aWNlIEVudHJ5IFxu IikpOw0KPiArICB3aGlsZSAoMSkgew0KPiArICAgIGlmIChJc0RldmljZVBhdGhFbmQgKE5leHRE ZXZpY2VQYXRoTm9kZSAoVXNiUm5kaXNEYXRhUGF0aCkpKSB7DQo+ICsgICAgICBpZiAoKChVU0Jf REVWSUNFX1BBVEggKilVc2JSbmRpc0RhdGFQYXRoKS0+UGFyZW50UG9ydE51bWJlciA9PQ0KPiAr ICAgICAgICAgICgoVVNCX0RFVklDRV9QQVRIICopVXNiQ2RjRGF0YVBhdGgpLT5QYXJlbnRQb3J0 TnVtYmVyKQ0KPiArICAgICAgew0KPiArICAgICAgICByZXR1cm4gRUZJX1NVQ0NFU1M7DQo+ICsg ICAgICB9IGVsc2Ugew0KPiArICAgICAgICByZXR1cm4gRUZJX1VOU1VQUE9SVEVEOw0KPiArICAg ICAgfQ0KPiArICAgIH0gZWxzZSB7DQo+ICsgICAgICBpZiAoQ29tcGFyZU1lbSAoVXNiQ2RjRGF0 YVBhdGgsIFVzYlJuZGlzRGF0YVBhdGgsIHNpemVvZg0KPiAoRUZJX0RFVklDRV9QQVRIX1BST1RP Q09MKSkgIT0gMCkgew0KPiArICAgICAgICByZXR1cm4gRUZJX1VOU1VQUE9SVEVEOw0KPiArICAg ICAgfQ0KPiArDQo+ICsgICAgICBVc2JSbmRpc0RhdGFQYXRoID0gTmV4dERldmljZVBhdGhOb2Rl IChVc2JSbmRpc0RhdGFQYXRoKTsNCj4gKyAgICAgIFVzYkNkY0RhdGFQYXRoICAgPSBOZXh0RGV2 aWNlUGF0aE5vZGUgKFVzYkNkY0RhdGFQYXRoKTsNCj4gKyAgICB9DQo+ICsgIH0NCj4gKw0KPiAr ICBERUJVRyAoKERFQlVHX1ZFUkJPU0UsICJJc1NhbWVEZXZpY2UgRXhpdCBcbiIpKTsNCj4gK30N Cj4gKw0KPiArLyoqDQo+ICsgIENoZWNrIGlmIHRoZSBVU0IgQ0RDIERhdGEoVXNiSW8pIGluc3Rh bGxlZCBhbmQgcmV0dXJuIFVTQiBDREMgRGF0YQ0KPiBIYW5kbGUuDQo+ICsNCj4gKyAgQHBhcmFt W2luXSAgVXNiSW8gIEEgcG9pbnRlciB0byB0aGUgRUZJX1VTQl9JT19QUk9UT0NPTCBpbnN0YW5j ZS4NCj4gKw0KPiArICBAcmV0dmFsIFRSVUUgICAgICAgICAgICAgIFVTQiBDREMgRGF0YShVc2JJ bykgaW5zdGFsbGVkLg0KPiArICBAcmV0dmFsIEZBTFNFICAgICAgICAgICAgIFVTQiBDREMgRGF0 YShVc2JJbykgZGlkIG5vdCBpbnN0YWxsZWQuDQo+ICsNCj4gKyoqLw0KPiArQk9PTEVBTg0KPiAr SXNVc2JDZGNEYXRhICgNCj4gKyAgSU4gRUZJX1VTQl9JT19QUk9UT0NPTCAgKlVzYklvDQo+ICsg ICkNCj4gK3sNCj4gKyAgRUZJX1NUQVRVUyAgICAgICAgICAgICAgICAgICAgU3RhdHVzOw0KPiAr ICBFRklfVVNCX0lOVEVSRkFDRV9ERVNDUklQVE9SICBJbnRlcmZhY2VEZXNjcmlwdG9yOw0KPiAr DQo+ICsgIFN0YXR1cyA9IFVzYklvLT5Vc2JHZXRJbnRlcmZhY2VEZXNjcmlwdG9yIChVc2JJbywg JkludGVyZmFjZURlc2NyaXB0b3IpOw0KPiArICBpZiAoRUZJX0VSUk9SIChTdGF0dXMpKSB7DQo+ ICsgICAgcmV0dXJuIEZBTFNFOw0KPiArICB9DQo+ICsNCj4gKyAgLy8gQ2hlY2sgZm9yIENEQy1E QVRBDQo+ICsgIGlmICgoSW50ZXJmYWNlRGVzY3JpcHRvci5JbnRlcmZhY2VDbGFzcyA9PSAweEEp ICYmDQo+ICsgICAgICAoSW50ZXJmYWNlRGVzY3JpcHRvci5JbnRlcmZhY2VTdWJDbGFzcyA9PSAw eDApICYmDQo+ICsgICAgICAoSW50ZXJmYWNlRGVzY3JpcHRvci5JbnRlcmZhY2VQcm90b2NvbCA9 PSAweDApKQ0KPiArICB7DQo+ICsgICAgcmV0dXJuIFRSVUU7DQo+ICsgIH0NCj4gKw0KPiArICBy ZXR1cm4gRkFMU0U7DQo+ICt9DQo+ICsNCj4gKy8qKg0KPiArICBDaGVjayBpZiB0aGUgVVNCIFJu ZGlzKFVzYklvKSBpbnN0YWxsZWQNCj4gKw0KPiArICBAcGFyYW1baW5dICBVc2JJbyAgICAgICAg QSBwb2ludGVyIHRvIHRoZSBFRklfVVNCX0lPX1BST1RPQ09MIGluc3RhbmNlLg0KPiArDQo+ICsg IEByZXR2YWwgVFJVRSAgICAgICAgICAgICAgVVNCIFJuZGlzKFVzYklvKSBpbnN0YWxsZWQuDQo+ ICsgIEByZXR2YWwgRkFMU0UgICAgICAgICAgICAgVVNCIFJuZGlzKFVzYklvKSBkaWQgbm90IGlu c3RhbGxlZC4NCj4gKw0KPiArKiovDQo+ICtCT09MRUFODQo+ICtJc1VzYlJuZGlzICgNCj4gKyAg SU4gRUZJX1VTQl9JT19QUk9UT0NPTCAgKlVzYklvDQo+ICsgICkNCj4gK3sNCj4gKyAgRUZJX1NU QVRVUyAgICAgICAgICAgICAgICAgICAgU3RhdHVzOw0KPiArICBFRklfVVNCX0lOVEVSRkFDRV9E RVNDUklQVE9SICBJbnRlcmZhY2VEZXNjcmlwdG9yOw0KPiArDQo+ICsgIFN0YXR1cyA9IFVzYklv LT5Vc2JHZXRJbnRlcmZhY2VEZXNjcmlwdG9yIChVc2JJbywgJkludGVyZmFjZURlc2NyaXB0b3Ip Ow0KPiArICBpZiAoRUZJX0VSUk9SIChTdGF0dXMpKSB7DQo+ICsgICAgcmV0dXJuIEZBTFNFOw0K PiArICB9DQo+ICsNCj4gKyAgLy8gQ2hlY2sgZm9yIFJuZGlzDQo+ICsgIGlmICgoSW50ZXJmYWNl RGVzY3JpcHRvci5JbnRlcmZhY2VDbGFzcyA9PSAweDIpICYmDQo+ICsgICAgICAoSW50ZXJmYWNl RGVzY3JpcHRvci5JbnRlcmZhY2VTdWJDbGFzcyA9PSAweDIpICYmDQo+ICsgICAgICAoSW50ZXJm YWNlRGVzY3JpcHRvci5JbnRlcmZhY2VQcm90b2NvbCA9PSAweEZGKSkNCj4gKyAgew0KPiArICAg IHJldHVybiBUUlVFOw0KPiArICB9DQo+ICsNCj4gKyAgcmV0dXJuIEZBTFNFOw0KPiArfQ0KPiAr DQo+ICsvKioNCj4gKyAgQ29udHJvbCBjb21lcyBoZXJlIHdoZW4gYSBDREMgZGV2aWNlIGlzIGZv dW5kLkNoZWNrIGlmIGEgUk5ESVMgaW50ZXJmYWNlDQo+IGlzIGFscmVhZHkgZm91bmQgZm9yIHRo aXMgZGV2aWNlIG9yIG5vdC4NCj4gKyAgRm9yIG9uZSBkZXZpY2UgdHdvIFVTQklPIHdpbGwgYmUg aW5zdGFsbGVkIGVhY2ggZm9yIENEQyBhbmQgUk5ESVMNCj4gaW50ZXJmYWNlLg0KPiArDQo+ICsg IEBwYXJhbVtpbl0gIFVzYkV0aFBhdGggICAgICAgIEEgcG9pbnRlciB0byB0aGUNCj4gRUZJX0RF VklDRV9QQVRIX1BST1RPQ09MIGluc3RhbmNlLg0KPiArICBAcGFyYW1bb3V0XSBVc2JSbmRpc0Rl dmljZSAgICBBIHBvaW50ZXIgdG8gdGhlIFVTQl9STkRJU19ERVZJQ0UgRGF0YS4NCj4gKw0KPiAr ICBAcmV0dmFsIEVGSV9TVUNDRVNTICAgICAgICAgICAgIFRoZSBVU0JfUk5ESVNfREVWSUNFIG1h dGNoaW5nIHRoaXMgQ0RDDQo+IERhdGEgaXMgZm91bmQuDQo+ICsgIEByZXR2YWwgRUZJX05PVF9G T1VORCAgICAgICAgICAgVGhlIFVTQl9STkRJU19ERVZJQ0UgbWF0Y2hpbmcgdGhpcyBDREMNCj4g RGF0YSBpcyBub3QgZm91bmQuDQo+ICsNCj4gKyoqLw0KPiArRUZJX1NUQVRVUw0KPiArVXBkYXRl Um5kaXNEZXZpY2UgKA0KPiArICBJTiAgRUZJX0RFVklDRV9QQVRIX1BST1RPQ09MICAqVXNiQ2Rj RGF0YVBhdGgsDQo+ICsgIE9VVCBVU0JfUk5ESVNfREVWSUNFICAgICAgICAgICoqVXNiUm5kaXNE ZXZpY2UNCj4gKyAgKQ0KPiArew0KPiArICBFRklfU1RBVFVTICAgICAgICAgICAgICAgICAgIFN0 YXR1czsNCj4gKyAgVUlOVE4gICAgICAgICAgICAgICAgICAgICAgICBJbmRleDsNCj4gKyAgVUlO VE4gICAgICAgICAgICAgICAgICAgICAgICBIYW5kbGVDb3VudDsNCj4gKyAgRUZJX0hBTkRMRSAg ICAgICAgICAgICAgICAgICAqSGFuZGxlQnVmZmVyOw0KPiArICBFREtJSV9VU0JfRVRIRVJORVRf UFJPVE9DT0wgICpVc2JFdGhEZXZpY2U7DQo+ICsgIEVGSV9ERVZJQ0VfUEFUSF9QUk9UT0NPTCAg ICAgKlVzYlJuZGlzRGF0YVBhdGg7DQo+ICsgIEVGSV9VU0JfSU9fUFJPVE9DT0wgICAgICAgICAg KlVzYklvOw0KPiArICBCT09MRUFOICAgICAgICAgICAgICAgICAgICAgIElzUm5kaXNJbnRlcmZh Y2VGbGFnID0gRkFMU0U7DQo+ICsNCj4gKyAgU3RhdHVzID0gZ0JTLT5Mb2NhdGVIYW5kbGVCdWZm ZXIgKA0KPiArICAgICAgICAgICAgICAgICAgQnlQcm90b2NvbCwNCj4gKyAgICAgICAgICAgICAg ICAgICZnRWRrSUlVc2JFdGhQcm90b2NvbEd1aWQsDQo+ICsgICAgICAgICAgICAgICAgICBOVUxM LA0KPiArICAgICAgICAgICAgICAgICAgJkhhbmRsZUNvdW50LA0KPiArICAgICAgICAgICAgICAg ICAgJkhhbmRsZUJ1ZmZlcg0KPiArICAgICAgICAgICAgICAgICAgKTsNCj4gKyAgaWYgKEVGSV9F UlJPUiAoU3RhdHVzKSkgew0KPiArICAgIHJldHVybiBTdGF0dXM7DQo+ICsgIH0NCj4gKw0KPiAr ICBmb3IgKEluZGV4ID0gMDsgSW5kZXggPCBIYW5kbGVDb3VudDsgSW5kZXgrKykgew0KPiArICAg IFN0YXR1cyA9IGdCUy0+SGFuZGxlUHJvdG9jb2wgKA0KPiArICAgICAgICAgICAgICAgICAgICBI YW5kbGVCdWZmZXJbSW5kZXhdLA0KPiArICAgICAgICAgICAgICAgICAgICAmZ0Vka0lJVXNiRXRo UHJvdG9jb2xHdWlkLA0KPiArICAgICAgICAgICAgICAgICAgICAoVk9JRCAqKikmVXNiRXRoRGV2 aWNlDQo+ICsgICAgICAgICAgICAgICAgICAgICk7DQo+ICsgICAgaWYgKEVGSV9FUlJPUiAoU3Rh dHVzKSkgew0KPiArICAgICAgY29udGludWU7DQo+ICsgICAgfQ0KPiArDQo+ICsgICAgU3RhdHVz ID0gZ0JTLT5IYW5kbGVQcm90b2NvbCAoDQo+ICsgICAgICAgICAgICAgICAgICAgIEhhbmRsZUJ1 ZmZlcltJbmRleF0sDQo+ICsgICAgICAgICAgICAgICAgICAgICZnRWZpVXNiSW9Qcm90b2NvbEd1 aWQsDQo+ICsgICAgICAgICAgICAgICAgICAgIChWT0lEICoqKSZVc2JJbw0KPiArICAgICAgICAg ICAgICAgICAgICApOw0KPiArICAgIGlmIChFRklfRVJST1IgKFN0YXR1cykpIHsNCj4gKyAgICAg IGNvbnRpbnVlOw0KPiArICAgIH0NCj4gKw0KPiArICAgIElzUm5kaXNJbnRlcmZhY2VGbGFnID0g SXNSbmRpc0ludGVyZmFjZSAoVXNiSW8pOw0KPiArICAgIGlmIChJc1JuZGlzSW50ZXJmYWNlRmxh ZyA9PSBGQUxTRSkgew0KPiArICAgICAgY29udGludWU7DQo+ICsgICAgfQ0KPiArDQo+ICsgICAg U3RhdHVzID0gZ0JTLT5IYW5kbGVQcm90b2NvbCAoDQo+ICsgICAgICAgICAgICAgICAgICAgIEhh bmRsZUJ1ZmZlcltJbmRleF0sDQo+ICsgICAgICAgICAgICAgICAgICAgICZnRWZpRGV2aWNlUGF0 aFByb3RvY29sR3VpZCwNCj4gKyAgICAgICAgICAgICAgICAgICAgKFZPSUQgKiopJlVzYlJuZGlz RGF0YVBhdGgNCj4gKyAgICAgICAgICAgICAgICAgICAgKTsNCj4gKyAgICBTdGF0dXMgPSBJc1Nh bWVEZXZpY2UgKFVzYlJuZGlzRGF0YVBhdGgsIFVzYkNkY0RhdGFQYXRoKTsNCj4gKw0KPiArICAg IERFQlVHICgoREVCVUdfVkVSQk9TRSwgIlJuZGlzIElzU2FtZURldmljZSAlclxuIiwgU3RhdHVz KSk7DQo+ICsNCj4gKyAgICBpZiAoIUVGSV9FUlJPUiAoU3RhdHVzKSkgew0KPiArICAgICAgKlVz YlJuZGlzRGV2aWNlID0gVVNCX1JORElTX0RFVklDRV9GUk9NX1RISVMgKFVzYkV0aERldmljZSk7 DQo+ICsgICAgICBnQlMtPkZyZWVQb29sIChIYW5kbGVCdWZmZXIpOw0KPiArICAgICAgcmV0dXJu IEVGSV9TVUNDRVNTOw0KPiArICAgIH0NCj4gKyAgfSAgIC8vIEVuZCBvZiBGb3IgbG9vcA0KPiAr DQo+ICsgIGdCUy0+RnJlZVBvb2wgKEhhbmRsZUJ1ZmZlcik7DQo+ICsgIHJldHVybiBFRklfTk9U X0ZPVU5EOw0KPiArfQ0KPiArDQo+ICsvKioNCj4gKw0KPiArICBGb3IgdGhlIGdpdmVuIFJuZGlz IERldmljZSwgZmluZCBhIG1hdGNoaW5nIENEQyBkZXZpY2UgYWxyZWFkeSBleGlzdHMgb3INCj4g bm90LiBJZiBmb3VuZCB1cGRhdGUgdGhlIGhhbmRsZQ0KPiArICBhbmQgVXNiSU8gcHJvdG9jb2wu DQo+ICsNCj4gKyAgQHBhcmFtW2luXSAgVXNiUm5kaXNEZXZpY2UgICAgICAgIEEgcG9pbnRlciB0 byB0aGUgVVNCX1JORElTX0RFVklDRSBkYXRhLg0KPiArDQo+ICsqKi8NCj4gK1ZPSUQNCj4gK0Zp bmRNYXRjaGluZ0NkY0RhdGEgKA0KPiArICBJTiBVU0JfUk5ESVNfREVWSUNFICAqVXNiUm5kaXNE ZXZpY2UNCj4gKyAgKQ0KPiArew0KPiArICBFRklfU1RBVFVTICAgICAgICAgICAgICAgIFN0YXR1 czsNCj4gKyAgVUlOVE4gICAgICAgICAgICAgICAgICAgICBJbmRleDsNCj4gKyAgVUlOVE4gICAg ICAgICAgICAgICAgICAgICBIYW5kbGVDb3VudDsNCj4gKyAgRUZJX0hBTkRMRSAgICAgICAgICAg ICAgICAqSGFuZGxlQnVmZmVyOw0KPiArICBFRklfVVNCX0lPX1BST1RPQ09MICAgICAgICpVc2JJ bzsNCj4gKyAgRUZJX0RFVklDRV9QQVRIX1BST1RPQ09MICAqVXNiUm5kaXNEYXRhUGF0aDsNCj4g KyAgRUZJX0RFVklDRV9QQVRIX1BST1RPQ09MICAqVXNiQ2RjRGF0YVBhdGg7DQo+ICsNCj4gKyAg Ly8gRmluZCB0aGUgcGFyZW50IFJORElTIGFuZCB1cGRhdGUgdGhlIFVzYklvIGZvciB0aGUgQ0RD IGRldmljZQ0KPiArICBTdGF0dXMgPSBnQlMtPkhhbmRsZVByb3RvY29sICgNCj4gKyAgICAgICAg ICAgICAgICAgIFVzYlJuZGlzRGV2aWNlLT5Vc2JSbmRpc0hhbmRsZSwNCj4gKyAgICAgICAgICAg ICAgICAgICZnRWZpRGV2aWNlUGF0aFByb3RvY29sR3VpZCwNCj4gKyAgICAgICAgICAgICAgICAg IChWT0lEICoqKSZVc2JSbmRpc0RhdGFQYXRoDQo+ICsgICAgICAgICAgICAgICAgICApOw0KPiAr DQo+ICsgIGlmIChFRklfRVJST1IgKFN0YXR1cykpIHsNCj4gKyAgICByZXR1cm47DQo+ICsgIH0N Cj4gKw0KPiArICBTdGF0dXMgPSBnQlMtPkxvY2F0ZUhhbmRsZUJ1ZmZlciAoDQo+ICsgICAgICAg ICAgICAgICAgICBCeVByb3RvY29sLA0KPiArICAgICAgICAgICAgICAgICAgJmdFZmlVc2JJb1By b3RvY29sR3VpZCwNCj4gKyAgICAgICAgICAgICAgICAgIE5VTEwsDQo+ICsgICAgICAgICAgICAg ICAgICAmSGFuZGxlQ291bnQsDQo+ICsgICAgICAgICAgICAgICAgICAmSGFuZGxlQnVmZmVyDQo+ ICsgICAgICAgICAgICAgICAgICApOw0KPiArICBpZiAoRUZJX0VSUk9SIChTdGF0dXMpKSB7DQo+ ICsgICAgcmV0dXJuOw0KPiArICB9DQo+ICsNCj4gKyAgZm9yIChJbmRleCA9IDA7IEluZGV4IDwg SGFuZGxlQ291bnQ7IEluZGV4KyspIHsNCj4gKyAgICBTdGF0dXMgPSBnQlMtPkhhbmRsZVByb3Rv Y29sICgNCj4gKyAgICAgICAgICAgICAgICAgICAgSGFuZGxlQnVmZmVyW0luZGV4XSwNCj4gKyAg ICAgICAgICAgICAgICAgICAgJmdFZmlVc2JJb1Byb3RvY29sR3VpZCwNCj4gKyAgICAgICAgICAg ICAgICAgICAgKFZPSUQgKiopJlVzYklvDQo+ICsgICAgICAgICAgICAgICAgICAgICk7DQo+ICsg ICAgQVNTRVJUX0VGSV9FUlJPUiAoU3RhdHVzKTsNCj4gKw0KPiArICAgIGlmIChJc1VzYkNkY0Rh dGEgKFVzYklvKSkgew0KPiArICAgICAgREVCVUcgKChERUJVR19WRVJCT1NFLCAiUm5kaXMgRmlu ZE1hdGNoaW5nQ2RjRGF0YSBDRENEYXRhDQo+IGludGVyZmFjZSBmb3VuZFxuIikpOw0KPiArDQo+ ICsgICAgICBTdGF0dXMgPSBnQlMtPkhhbmRsZVByb3RvY29sICgNCj4gKyAgICAgICAgICAgICAg ICAgICAgICBIYW5kbGVCdWZmZXJbSW5kZXhdLA0KPiArICAgICAgICAgICAgICAgICAgICAgICZn RWZpRGV2aWNlUGF0aFByb3RvY29sR3VpZCwNCj4gKyAgICAgICAgICAgICAgICAgICAgICAoVk9J RCAqKikmVXNiQ2RjRGF0YVBhdGgNCj4gKyAgICAgICAgICAgICAgICAgICAgICApOw0KPiArICAg ICAgaWYgKEVGSV9FUlJPUiAoU3RhdHVzKSkgew0KPiArICAgICAgICBERUJVRyAoKERFQlVHX1ZF UkJPU0UsICJSbmRpcyBDRENEYXRhIERldmljZVBhdGggbm90IGZvdW5kXG4iKSk7DQo+ICsgICAg ICAgIGdCUy0+RnJlZVBvb2wgKEhhbmRsZUJ1ZmZlcik7DQo+ICsgICAgICAgIHJldHVybjsNCj4g KyAgICAgIH0NCj4gKw0KPiArICAgICAgU3RhdHVzID0gSXNTYW1lRGV2aWNlIChVc2JSbmRpc0Rh dGFQYXRoLCBVc2JDZGNEYXRhUGF0aCk7DQo+ICsgICAgICBERUJVRyAoKERFQlVHX1ZFUkJPU0Us ICJSbmRpcyBJc1NhbWVEZXZpY2UgJXJcbiIsIFN0YXR1cykpOw0KPiArICAgICAgaWYgKCFFRklf RVJST1IgKFN0YXR1cykpIHsNCj4gKyAgICAgICAgVXNiUm5kaXNEZXZpY2UtPlVzYkNkY0RhdGFI YW5kbGUgPSBIYW5kbGVCdWZmZXJbSW5kZXhdOw0KPiArICAgICAgICBVc2JSbmRpc0RldmljZS0+ VXNiSW9DZGNEYXRhICAgICA9IFVzYklvOw0KPiArICAgICAgICBHZXRFbmRwb2ludCAoVXNiUm5k aXNEZXZpY2UtPlVzYklvQ2RjRGF0YSwgVXNiUm5kaXNEZXZpY2UpOw0KPiArICAgICAgICBnQlMt PkZyZWVQb29sIChIYW5kbGVCdWZmZXIpOw0KPiArICAgICAgICByZXR1cm47DQo+ICsgICAgICB9 DQo+ICsgICAgfQ0KPiArICB9ICAgLy8gRW5kIG9mIEZvciBsb29wDQo+ICsNCj4gKyAgZ0JTLT5G cmVlUG9vbCAoSGFuZGxlQnVmZmVyKTsNCj4gK30NCj4gKw0KPiArLyoqDQo+ICsNCj4gKyAgRm9y IHRoZSBnaXZlbiBVc2JJbyBDZGNEYXRhLCBmaW5kIGEgbWF0Y2hpbmcgUk5ESVMgZGV2aWNlIGFs cmVhZHkgZXhpc3RzDQo+IG9yIG5vdC4NCj4gKw0KPiArICBAcGFyYW1baW5dICBDZGNIYW5kbGUg ICAgICAgQSBwb2ludGVyIHRvIHRoZSBFRklfSEFORExFIGZvciBVU0IgQ0RDIERhdGEuDQo+ICsg IEBwYXJhbVtvdXRdIENkY1VzYklvICAgICAgICBBIHBvaW50ZXIgZm9yIHJldHJpZXZlIHRoZQ0K PiBFRklfVVNCX0lPX1BST1RPQ09MIGluc3RhbmNlLg0KPiArICBAcGFyYW1bb3V0XSBSbmRpc0hh bmRsZSAgICAgQSBwb2ludGVyIGZvciByZXRyaWV2ZSB0aGUgaGFuZGxlIG9mIFJORElTDQo+IGRl dmljZS4NCj4gKw0KPiArICBAcmV0dmFsIEVGSV9TVUNDRVNTICAgICAgICAgICAgIFRoZSBVU0Jf Uk5ESVNfREVWSUNFIG1hdGNoaW5nIHRoaXMgQ0RDDQo+IERhdGEgaXMgZm91bmQuDQo+ICsgIEBy ZXR2YWwgRUZJX05PVF9GT1VORCAgICAgICAgICAgVGhlIFVTQl9STkRJU19ERVZJQ0UgbWF0Y2hp bmcgdGhpcyBDREMNCj4gRGF0YSBpcyBub3QgZm91bmQuDQo+ICsNCj4gKyoqLw0KPiArRUZJX1NU QVRVUw0KPiArRUZJQVBJDQo+ICtGaW5kTWF0Y2hpbmdSbmRpc0RldiAoDQo+ICsgIElOICBFRklf SEFORExFICAgICAgICAgICBDZGNIYW5kbGUsDQo+ICsgIE9VVCBFRklfVVNCX0lPX1BST1RPQ09M ICAqKkNkY1VzYklvLA0KPiArICBPVVQgRUZJX0hBTkRMRSAgICAgICAgICAgKlJuZGlzSGFuZGxl DQo+ICsgICkNCj4gK3sNCj4gKyAgRUZJX1NUQVRVUyAgICAgICAgICAgICAgICBTdGF0dXM7DQo+ ICsgIFVJTlROICAgICAgICAgICAgICAgICAgICAgSW5kZXg7DQo+ICsgIFVJTlROICAgICAgICAg ICAgICAgICAgICAgSGFuZGxlQ291bnQ7DQo+ICsgIEVGSV9IQU5ETEUgICAgICAgICAgICAgICAg KkhhbmRsZUJ1ZmZlcjsNCj4gKyAgRUZJX1VTQl9JT19QUk9UT0NPTCAgICAgICAqVXNiSW87DQo+ ICsgIEVGSV9ERVZJQ0VfUEFUSF9QUk9UT0NPTCAgKlVzYlJuZGlzRGF0YVBhdGg7DQo+ICsgIEVG SV9ERVZJQ0VfUEFUSF9QUk9UT0NPTCAgKlVzYkNkY0RhdGFQYXRoOw0KPiArDQo+ICsgIC8vIEZp bmQgdGhlIHBhcmVudCBSTkRJUyBhbmQgdXBkYXRlIHRoZSBVc2JJbyBmb3IgdGhlIENEQyBkZXZp Y2UNCj4gKyAgU3RhdHVzID0gZ0JTLT5IYW5kbGVQcm90b2NvbCAoDQo+ICsgICAgICAgICAgICAg ICAgICBDZGNIYW5kbGUsDQo+ICsgICAgICAgICAgICAgICAgICAmZ0VmaURldmljZVBhdGhQcm90 b2NvbEd1aWQsDQo+ICsgICAgICAgICAgICAgICAgICAoVk9JRCAqKikmVXNiQ2RjRGF0YVBhdGgN Cj4gKyAgICAgICAgICAgICAgICAgICk7DQo+ICsNCj4gKyAgaWYgKEVGSV9FUlJPUiAoU3RhdHVz KSkgew0KPiArICAgIHJldHVybiBTdGF0dXM7DQo+ICsgIH0NCj4gKw0KPiArICBTdGF0dXMgPSBn QlMtPkxvY2F0ZUhhbmRsZUJ1ZmZlciAoDQo+ICsgICAgICAgICAgICAgICAgICBCeVByb3RvY29s LA0KPiArICAgICAgICAgICAgICAgICAgJmdFZmlVc2JJb1Byb3RvY29sR3VpZCwNCj4gKyAgICAg ICAgICAgICAgICAgIE5VTEwsDQo+ICsgICAgICAgICAgICAgICAgICAmSGFuZGxlQ291bnQsDQo+ ICsgICAgICAgICAgICAgICAgICAmSGFuZGxlQnVmZmVyDQo+ICsgICAgICAgICAgICAgICAgICAp Ow0KPiArICBpZiAoRUZJX0VSUk9SIChTdGF0dXMpKSB7DQo+ICsgICAgcmV0dXJuIFN0YXR1czsN Cj4gKyAgfQ0KPiArDQo+ICsgIGZvciAoSW5kZXggPSAwOyBJbmRleCA8IEhhbmRsZUNvdW50OyBJ bmRleCsrKSB7DQo+ICsgICAgU3RhdHVzID0gZ0JTLT5IYW5kbGVQcm90b2NvbCAoDQo+ICsgICAg ICAgICAgICAgICAgICAgIEhhbmRsZUJ1ZmZlcltJbmRleF0sDQo+ICsgICAgICAgICAgICAgICAg ICAgICZnRWZpVXNiSW9Qcm90b2NvbEd1aWQsDQo+ICsgICAgICAgICAgICAgICAgICAgIChWT0lE ICoqKSZVc2JJbw0KPiArICAgICAgICAgICAgICAgICAgICApOw0KPiArICAgIEFTU0VSVF9FRklf RVJST1IgKFN0YXR1cyk7DQo+ICsNCj4gKyAgICBpZiAoSXNVc2JSbmRpcyAoVXNiSW8pKSB7DQo+ ICsgICAgICBTdGF0dXMgPSBnQlMtPkhhbmRsZVByb3RvY29sICgNCj4gKyAgICAgICAgICAgICAg ICAgICAgICBIYW5kbGVCdWZmZXJbSW5kZXhdLA0KPiArICAgICAgICAgICAgICAgICAgICAgICZn RWZpRGV2aWNlUGF0aFByb3RvY29sR3VpZCwNCj4gKyAgICAgICAgICAgICAgICAgICAgICAoVk9J RCAqKikmVXNiUm5kaXNEYXRhUGF0aA0KPiArICAgICAgICAgICAgICAgICAgICAgICk7DQo+ICsg ICAgICBpZiAoRUZJX0VSUk9SIChTdGF0dXMpKSB7DQo+ICsgICAgICAgIERFQlVHICgoREVCVUdf RVJST1IsICJVc2IgUm5kaXMgRGV2aWNlUGF0aCBub3QgZm91bmRcbiIpKTsNCj4gKyAgICAgICAg YnJlYWs7DQo+ICsgICAgICB9DQo+ICsNCj4gKyAgICAgIFN0YXR1cyA9IElzU2FtZURldmljZSAo VXNiUm5kaXNEYXRhUGF0aCwgVXNiQ2RjRGF0YVBhdGgpOw0KPiArDQo+ICsgICAgICBpZiAoIUVG SV9FUlJPUiAoU3RhdHVzKSkgew0KPiArICAgICAgICAqUm5kaXNIYW5kbGUgPSBIYW5kbGVCdWZm ZXJbSW5kZXhdOw0KPiArICAgICAgICAqQ2RjVXNiSW8gICAgPSBVc2JJbzsNCj4gKyAgICAgICAg Z0JTLT5GcmVlUG9vbCAoSGFuZGxlQnVmZmVyKTsNCj4gKyAgICAgICAgcmV0dXJuIFN0YXR1czsN Cj4gKyAgICAgIH0NCj4gKyAgICB9DQo+ICsgIH0gICAvLyBFbmQgb2YgRm9yIGxvb3ANCj4gKw0K PiArICBnQlMtPkZyZWVQb29sIChIYW5kbGVCdWZmZXIpOw0KPiArDQo+ICsgIHJldHVybiBFRklf Tk9UX0ZPVU5EOw0KPiArfQ0KPiArDQo+ICsvKioNCj4gKyAgVVNCIFJuZGlzIERyaXZlciBCaW5k aW5nIFN1cHBvcnQuDQo+ICsNCj4gKyAgQHBhcmFtW2luXSAgVGhpcyAgICAgICAgICAgICAgICAg ICAgUHJvdG9jb2wgaW5zdGFuY2UgcG9pbnRlci4NCj4gKyAgQHBhcmFtW2luXSAgQ29udHJvbGxl ckhhbmRsZSAgICAgICAgSGFuZGxlIG9mIGRldmljZSB0byB0ZXN0Lg0KPiArICBAcGFyYW1baW5d ICBSZW1haW5pbmdEZXZpY2VQYXRoICAgICBPcHRpb25hbCBwYXJhbWV0ZXIgdXNlIHRvIHBpY2sg YQ0KPiBzcGVjaWZpYyBjaGlsZA0KPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBkZXZpY2UgdG8gc3RhcnQuDQo+ICsNCj4gKyAgQHJldHZhbCBFRklfU1VDQ0VTUyAgICAg ICAgICAgICAgICAgVGhpcyBkcml2ZXIgc3VwcG9ydHMgdGhpcyBkZXZpY2UuDQo+ICsgIEByZXR2 YWwgRUZJX0FMUkVBRFlfU1RBUlRFRCAgICAgICAgIFRoaXMgZHJpdmVyIGlzIGFscmVhZHkgcnVu bmluZyBvbiB0aGlzDQo+IGRldmljZS4NCj4gKyAgQHJldHZhbCBvdGhlciAgICAgICAgICAgICAg ICAgICAgICAgVGhpcyBkcml2ZXIgZG9lcyBub3Qgc3VwcG9ydCB0aGlzIGRldmljZS4NCj4gKw0K PiArKiovDQo+ICtFRklfU1RBVFVTDQo+ICtFRklBUEkNCj4gK1VzYlJuZGlzRHJpdmVyU3VwcG9y dGVkICgNCj4gKyAgSU4gRUZJX0RSSVZFUl9CSU5ESU5HX1BST1RPQ09MICAqVGhpcywNCj4gKyAg SU4gRUZJX0hBTkRMRSAgICAgICAgICAgICAgICAgICBDb250cm9sbGVySGFuZGxlLA0KPiArICBJ TiBFRklfREVWSUNFX1BBVEhfUFJPVE9DT0wgICAgICpSZW1haW5pbmdEZXZpY2VQYXRoDQo+ICsg ICkNCj4gK3sNCj4gKyAgRUZJX1NUQVRVUyAgICAgICAgICAgU3RhdHVzOw0KPiArICBFRklfVVNC X0lPX1BST1RPQ09MICAqVXNiSW8gPSBOVUxMOw0KPiArDQo+ICsgIFN0YXR1cyA9IGdCUy0+T3Bl blByb3RvY29sICgNCj4gKyAgICAgICAgICAgICAgICAgIENvbnRyb2xsZXJIYW5kbGUsDQo+ICsg ICAgICAgICAgICAgICAgICAmZ0VmaVVzYklvUHJvdG9jb2xHdWlkLA0KPiArICAgICAgICAgICAg ICAgICAgKFZPSUQgKiopJlVzYklvLA0KPiArICAgICAgICAgICAgICAgICAgVGhpcy0+RHJpdmVy QmluZGluZ0hhbmRsZSwNCj4gKyAgICAgICAgICAgICAgICAgIENvbnRyb2xsZXJIYW5kbGUsDQo+ ICsgICAgICAgICAgICAgICAgICBFRklfT1BFTl9QUk9UT0NPTF9CWV9EUklWRVINCj4gKyAgICAg ICAgICAgICAgICAgICk7DQo+ICsgIGlmIChFRklfRVJST1IgKFN0YXR1cykpIHsNCj4gKyAgICBy ZXR1cm4gU3RhdHVzOw0KPiArICB9DQo+ICsNCj4gKyAgU3RhdHVzID0gSXNTdXBwb3J0ZWREZXZp Y2UgKFVzYklvKSA/IEVGSV9TVUNDRVNTIDogRUZJX1VOU1VQUE9SVEVEOw0KPiArDQo+ICsgIGdC Uy0+Q2xvc2VQcm90b2NvbCAoDQo+ICsgICAgICAgICBDb250cm9sbGVySGFuZGxlLA0KPiArICAg ICAgICAgJmdFZmlVc2JJb1Byb3RvY29sR3VpZCwNCj4gKyAgICAgICAgIFRoaXMtPkRyaXZlckJp bmRpbmdIYW5kbGUsDQo+ICsgICAgICAgICBDb250cm9sbGVySGFuZGxlDQo+ICsgICAgICAgICAp Ow0KPiArICByZXR1cm4gU3RhdHVzOw0KPiArfQ0KPiArDQo+ICsvKioNCj4gKyAgVVNCIFJORElT IERyaXZlciBCaW5kaW5nIFN0YXJ0Lg0KPiArDQo+ICsgIEBwYXJhbVtpbl0gIFRoaXMgICAgICAg ICAgICAgICAgICAgIFByb3RvY29sIGluc3RhbmNlIHBvaW50ZXIuDQo+ICsgIEBwYXJhbVtpbl0g IENvbnRyb2xsZXJIYW5kbGUgICAgICAgIEhhbmRsZSBvZiBkZXZpY2UgdG8gYmluZCBkcml2ZXIg dG8uDQo+ICsgIEBwYXJhbVtpbl0gIFJlbWFpbmluZ0RldmljZVBhdGggICAgIE9wdGlvbmFsIHBh cmFtZXRlciB1c2UgdG8gcGljayBhDQo+IHNwZWNpZmljIGNoaWxkDQo+ICsgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIGRldmljZSB0byBzdGFydC4NCj4gKw0KPiArICBAcmV0 dmFsIEVGSV9TVUNDRVNTICAgICAgICAgICAgICAgICBUaGlzIGRyaXZlciBpcyBhZGRlZCB0byBD b250cm9sbGVySGFuZGxlDQo+ICsgIEByZXR2YWwgRUZJX0RFVklDRV9FUlJPUiAgICAgICAgICAg IFRoaXMgZHJpdmVyIGNvdWxkIG5vdCBiZSBzdGFydGVkIGR1ZSB0byBhDQo+IGRldmljZSBlcnJv cg0KPiArICBAcmV0dmFsIEVGSV9PVVRfT0ZfUkVTT1VSQ0VTICAgICAgICBUaGUgZHJpdmVyIGNv dWxkIG5vdCBpbnN0YWxsDQo+IHN1Y2Nlc3NmdWxseSBkdWUgdG8gYSBsYWNrIG9mIHJlc291cmNl cy4NCj4gKyAgQHJldHZhbCBvdGhlciAgICAgICAgICAgICAgICAgICAgICAgVGhpcyBkcml2ZXIg ZG9lcyBub3Qgc3VwcG9ydCB0aGlzIGRldmljZQ0KPiArDQo+ICsqKi8NCj4gK0VGSV9TVEFUVVMN Cj4gK0VGSUFQSQ0KPiArVXNiUm5kaXNEcml2ZXJTdGFydCAoDQo+ICsgIElOIEVGSV9EUklWRVJf QklORElOR19QUk9UT0NPTCAgKlRoaXMsDQo+ICsgIElOIEVGSV9IQU5ETEUgICAgICAgICAgICAg ICAgICAgQ29udHJvbGxlckhhbmRsZSwNCj4gKyAgSU4gRUZJX0RFVklDRV9QQVRIX1BST1RPQ09M ICAgICAqUmVtYWluaW5nRGV2aWNlUGF0aA0KPiArICApDQo+ICt7DQo+ICsgIEVGSV9TVEFUVVMg ICAgICAgICAgICAgICAgICAgIFN0YXR1czsNCj4gKyAgVVNCX1JORElTX0RFVklDRSAgICAgICAg ICAgICAgKlVzYlJuZGlzRGV2aWNlOw0KPiArICBFRklfREVWSUNFX1BBVEhfUFJPVE9DT0wgICAg ICAqVXNiRXRoUGF0aDsNCj4gKyAgRUZJX1VTQl9JT19QUk9UT0NPTCAgICAgICAgICAgKlVzYklv Ow0KPiArICBFRklfVVNCX0lOVEVSRkFDRV9ERVNDUklQVE9SICBJbnRlcmZhY2U7DQo+ICsgIEVG SV9IQU5ETEUgICAgICAgICAgICAgICAgICAgIFJuZGlzSGFuZGxlID0gQ29udHJvbGxlckhhbmRs ZTsNCj4gKw0KPiArICBTdGF0dXMgPSBnQlMtPk9wZW5Qcm90b2NvbCAoDQo+ICsgICAgICAgICAg ICAgICAgICBDb250cm9sbGVySGFuZGxlLA0KPiArICAgICAgICAgICAgICAgICAgJmdFZmlVc2JJ b1Byb3RvY29sR3VpZCwNCj4gKyAgICAgICAgICAgICAgICAgIChWT0lEICoqKSZVc2JJbywNCj4g KyAgICAgICAgICAgICAgICAgIFRoaXMtPkRyaXZlckJpbmRpbmdIYW5kbGUsDQo+ICsgICAgICAg ICAgICAgICAgICBDb250cm9sbGVySGFuZGxlLA0KPiArICAgICAgICAgICAgICAgICAgRUZJX09Q RU5fUFJPVE9DT0xfQllfRFJJVkVSDQo+ICsgICAgICAgICAgICAgICAgICApOw0KPiArICBpZiAo RUZJX0VSUk9SIChTdGF0dXMpKSB7DQo+ICsgICAgcmV0dXJuIFN0YXR1czsNCj4gKyAgfQ0KPiAr DQo+ICsgIFN0YXR1cyA9IGdCUy0+T3BlblByb3RvY29sICgNCj4gKyAgICAgICAgICAgICAgICAg IENvbnRyb2xsZXJIYW5kbGUsDQo+ICsgICAgICAgICAgICAgICAgICAmZ0VmaURldmljZVBhdGhQ cm90b2NvbEd1aWQsDQo+ICsgICAgICAgICAgICAgICAgICAoVk9JRCAqKikmVXNiRXRoUGF0aCwN Cj4gKyAgICAgICAgICAgICAgICAgIFRoaXMtPkRyaXZlckJpbmRpbmdIYW5kbGUsDQo+ICsgICAg ICAgICAgICAgICAgICBDb250cm9sbGVySGFuZGxlLA0KPiArICAgICAgICAgICAgICAgICAgRUZJ X09QRU5fUFJPVE9DT0xfQllfRFJJVkVSDQo+ICsgICAgICAgICAgICAgICAgICApOw0KPiArICBp ZiAoRUZJX0VSUk9SIChTdGF0dXMpKSB7DQo+ICsgICAgZ0JTLT5DbG9zZVByb3RvY29sICgNCj4g KyAgICAgICAgICAgQ29udHJvbGxlckhhbmRsZSwNCj4gKyAgICAgICAgICAgJmdFZmlVc2JJb1By b3RvY29sR3VpZCwNCj4gKyAgICAgICAgICAgVGhpcy0+RHJpdmVyQmluZGluZ0hhbmRsZSwNCj4g KyAgICAgICAgICAgQ29udHJvbGxlckhhbmRsZQ0KPiArICAgICAgICAgICApOw0KPiArICAgIHJl dHVybiBTdGF0dXM7DQo+ICsgIH0NCj4gKw0KPiArICBnQlMtPkNsb3NlUHJvdG9jb2wgKA0KPiAr ICAgICAgICAgQ29udHJvbGxlckhhbmRsZSwNCj4gKyAgICAgICAgICZnRWZpRGV2aWNlUGF0aFBy b3RvY29sR3VpZCwNCj4gKyAgICAgICAgIFRoaXMtPkRyaXZlckJpbmRpbmdIYW5kbGUsDQo+ICsg ICAgICAgICBDb250cm9sbGVySGFuZGxlDQo+ICsgICAgICAgICApOw0KPiArDQo+ICsgIERFQlVH ICgoREVCVUdfRVJST1IsICJVc2JSbmRpc0RyaXZlclN0YXJ0ICV4XG4iLCBDb250cm9sbGVySGFu ZGxlKSk7DQo+ICsNCj4gKyAgLy8gQ29udHJvbHMgY29tZSBoZXJlIGZvciBSTkRJUyBhbmQgQ0RD LiBJZiBpdCBpcyBDREMsIGNoZWNrIHdoZXRoZXINCj4gUk5ESVMgaXMgcHJlc2VudCBvbiB0aGUg c2FtZSBjb250cm9sbGVyIG9yIG5vdC4NCj4gKyAgaWYgKElzVXNiQ2RjRGF0YSAoVXNiSW8pKSB7 DQo+ICsgICAgLy8gRmluZCB0aGUgcGFyZW50IFJORElTIGFuZCB1cGRhdGUgdGhlIFVzYklvIGZv ciB0aGUgQ0RDIGRldmljZQ0KPiArICAgIFN0YXR1cyA9IFVwZGF0ZVJuZGlzRGV2aWNlIChVc2JF dGhQYXRoLCAmVXNiUm5kaXNEZXZpY2UpOw0KPiArDQo+ICsgICAgaWYgKCFFRklfRVJST1IgKFN0 YXR1cykpIHsNCj4gKyAgICAgIERFQlVHICgoREVCVUdfVkVSQk9TRSwgIlJuZGlzIE1hdGNoaW5n IGludGVyZmFjZSBmb3VuZFxuIikpOw0KPiArICAgICAgVXNiUm5kaXNEZXZpY2UtPlVzYkNkY0Rh dGFIYW5kbGUgPSBDb250cm9sbGVySGFuZGxlOw0KPiArICAgICAgVXNiUm5kaXNEZXZpY2UtPlVz YklvQ2RjRGF0YSAgICAgPSBVc2JJbzsNCj4gKyAgICAgIEdldEVuZHBvaW50IChVc2JSbmRpc0Rl dmljZS0+VXNiSW9DZGNEYXRhLCBVc2JSbmRpc0RldmljZSk7DQo+ICsgICAgICByZXR1cm4gU3Rh dHVzOw0KPiArICAgIH0gZWxzZSB7DQo+ICsgICAgICAvLyBDaGVjayBpZiBSbkRpcyBleGlzdA0K PiArICAgICAgU3RhdHVzID0gRmluZE1hdGNoaW5nUm5kaXNEZXYgKENvbnRyb2xsZXJIYW5kbGUs ICZVc2JJbywNCj4gJlJuZGlzSGFuZGxlKTsNCj4gKw0KPiArICAgICAgaWYgKEVGSV9FUlJPUiAo U3RhdHVzKSkgew0KPiArICAgICAgICBnQlMtPkNsb3NlUHJvdG9jb2wgKA0KPiArICAgICAgICAg ICAgICAgQ29udHJvbGxlckhhbmRsZSwNCj4gKyAgICAgICAgICAgICAgICZnRWZpVXNiSW9Qcm90 b2NvbEd1aWQsDQo+ICsgICAgICAgICAgICAgICBUaGlzLT5Ecml2ZXJCaW5kaW5nSGFuZGxlLA0K PiArICAgICAgICAgICAgICAgQ29udHJvbGxlckhhbmRsZQ0KPiArICAgICAgICAgICAgICAgKTsN Cj4gKyAgICAgICAgcmV0dXJuIFN0YXR1czsNCj4gKyAgICAgIH0NCj4gKyAgICB9DQo+ICsgIH0N Cj4gKw0KPiArICBVc2JSbmRpc0RldmljZSA9IEFsbG9jYXRlWmVyb1Bvb2wgKHNpemVvZiAoVVNC X1JORElTX0RFVklDRSkpOw0KPiArDQo+ICsgIGlmICghVXNiUm5kaXNEZXZpY2UpIHsNCj4gKyAg ICBERUJVRyAoKERFQlVHX0VSUk9SLCAiQWxsb2NhdGVaZXJvUG9vbCBGYWlsXG4iKSk7DQo+ICsN Cj4gKyAgICBnQlMtPkNsb3NlUHJvdG9jb2wgKA0KPiArICAgICAgICAgICBDb250cm9sbGVySGFu ZGxlLA0KPiArICAgICAgICAgICAmZ0VmaVVzYklvUHJvdG9jb2xHdWlkLA0KPiArICAgICAgICAg ICBUaGlzLT5Ecml2ZXJCaW5kaW5nSGFuZGxlLA0KPiArICAgICAgICAgICBDb250cm9sbGVySGFu ZGxlDQo+ICsgICAgICAgICAgICk7DQo+ICsgICAgcmV0dXJuIEVGSV9PVVRfT0ZfUkVTT1VSQ0VT Ow0KPiArICB9DQo+ICsNCj4gKyAgU3RhdHVzID0gTG9hZEFsbERlc2NyaXB0b3IgKFVzYklvLCAm VXNiUm5kaXNEZXZpY2UtPkNvbmZpZyk7DQo+ICsgIEFTU0VSVF9FRklfRVJST1IgKFN0YXR1cyk7 DQo+ICsNCj4gKyAgU3RhdHVzID0gVXNiSW8tPlVzYkdldEludGVyZmFjZURlc2NyaXB0b3IgKFVz YklvLCAmSW50ZXJmYWNlKTsNCj4gKyAgQVNTRVJUX0VGSV9FUlJPUiAoU3RhdHVzKTsNCj4gKw0K PiArICBVc2JSbmRpc0RldmljZS0+U2lnbmF0dXJlICAgICAgICAgICAgICAgICAgICAgICAgICA9 IFVTQl9STkRJU19TSUdOQVRVUkU7DQo+ICsgIFVzYlJuZGlzRGV2aWNlLT5OdW1PZkludGVyZmFj ZSAgICAgICAgICAgICAgICAgICAgID0gSW50ZXJmYWNlLkludGVyZmFjZU51bWJlcjsNCj4gKyAg VXNiUm5kaXNEZXZpY2UtPlVzYlJuZGlzSGFuZGxlICAgICAgICAgICAgICAgICAgICAgPSBSbmRp c0hhbmRsZTsNCj4gKyAgVXNiUm5kaXNEZXZpY2UtPlVzYkNkY0RhdGFIYW5kbGUgICAgICAgICAg ICAgICAgICAgPSAwOw0KPiArICBVc2JSbmRpc0RldmljZS0+VXNiSW8gICAgICAgICAgICAgICAg ICAgICAgICAgICAgICA9IFVzYklvOw0KPiArICBVc2JSbmRpc0RldmljZS0+VXNiRXRoLlVzYkV0 aFJlY2VpdmUgICAgICAgICAgICAgICA9IFJuZGlzVW5kaVJlY2VpdmU7DQo+ICsgIFVzYlJuZGlz RGV2aWNlLT5Vc2JFdGguVXNiRXRoVHJhbnNtaXQgICAgICAgICAgICAgID0gUm5kaXNVbmRpVHJh bnNtaXQ7DQo+ICsgIFVzYlJuZGlzRGV2aWNlLT5Vc2JFdGguVXNiRXRoSW50ZXJydXB0ICAgICAg ICAgICAgID0gVXNiUm5kaXNJbnRlcnJ1cHQ7DQo+ICsgIFVzYlJuZGlzRGV2aWNlLT5Vc2JFdGgu VXNiRXRoTWFjQWRkcmVzcyAgICAgICAgICAgID0NCj4gR2V0VXNiRXRoTWFjQWRkcmVzczsNCj4g KyAgVXNiUm5kaXNEZXZpY2UtPlVzYkV0aC5Vc2JFdGhNYXhCdWxrU2l6ZSAgICAgICAgICAgPSBV c2JFdGhCdWxrU2l6ZTsNCj4gKyAgVXNiUm5kaXNEZXZpY2UtPlVzYkV0aC5Vc2JIZWFkZXJGdW5E ZXNjcmlwdG9yICAgICAgPQ0KPiBHZXRVc2JIZWFkZXJGdW5EZXNjcmlwdG9yOw0KPiArICBVc2JS bmRpc0RldmljZS0+VXNiRXRoLlVzYlVuaW9uRnVuRGVzY3JpcHRvciAgICAgICA9DQo+IEdldFVz YlVuaW9uRnVuRGVzY3JpcHRvcjsNCj4gKyAgVXNiUm5kaXNEZXZpY2UtPlVzYkV0aC5Vc2JFdGhG dW5EZXNjcmlwdG9yICAgICAgICAgPQ0KPiBHZXRVc2JSbmRpc0Z1bkRlc2NyaXB0b3I7DQo+ICsg IFVzYlJuZGlzRGV2aWNlLT5Vc2JFdGguU2V0VXNiRXRoTWNhc3RGaWx0ZXIgICAgICAgID0NCj4g U2V0VXNiUm5kaXNNY2FzdEZpbHRlcjsNCj4gKyAgVXNiUm5kaXNEZXZpY2UtPlVzYkV0aC5TZXRV c2JFdGhQb3dlclBhdHRlcm5GaWx0ZXIgPQ0KPiBTZXRVc2JSbmRpc1Bvd2VyRmlsdGVyOw0KPiAr ICBVc2JSbmRpc0RldmljZS0+VXNiRXRoLkdldFVzYkV0aFBvZXdyUGF0dGVybkZpbHRlciA9DQo+ IEdldFVzYlJuZGlzUG93ZXJGaWx0ZXI7DQo+ICsgIFVzYlJuZGlzRGV2aWNlLT5Vc2JFdGguU2V0 VXNiRXRoUGFja2V0RmlsdGVyICAgICAgID0NCj4gU2V0VXNiUm5kaXNQYWNrZXRGaWx0ZXI7DQo+ ICsgIFVzYlJuZGlzRGV2aWNlLT5Vc2JFdGguR2V0VXNiRXRoU3RhdGlzdGljICAgICAgICAgID0g R2V0Um5kaXNTdGF0aXN0aWM7DQo+ICsNCj4gKyAgVXNiUm5kaXNEZXZpY2UtPlVzYkV0aC5Vc2JF dGhVbmRpLlVzYkV0aFVuZGlHZXRTdGF0ZSAgICAgICAgPQ0KPiBSbmRpc0R1bW15UmV0dXJuOw0K PiArICBVc2JSbmRpc0RldmljZS0+VXNiRXRoLlVzYkV0aFVuZGkuVXNiRXRoVW5kaVN0YXJ0ICAg ICAgICAgICA9DQo+IFJuZGlzVW5kaVN0YXJ0Ow0KPiArICBVc2JSbmRpc0RldmljZS0+VXNiRXRo LlVzYkV0aFVuZGkuVXNiRXRoVW5kaVN0b3AgICAgICAgICAgICA9DQo+IFJuZGlzVW5kaVN0b3A7 DQo+ICsgIFVzYlJuZGlzRGV2aWNlLT5Vc2JFdGguVXNiRXRoVW5kaS5Vc2JFdGhVbmRpR2V0SW5p dEluZm8gICAgID0NCj4gUm5kaXNVbmRpR2V0SW5pdEluZm87DQo+ICsgIFVzYlJuZGlzRGV2aWNl LT5Vc2JFdGguVXNiRXRoVW5kaS5Vc2JFdGhVbmRpR2V0Q29uZmlnSW5mbyAgID0NCj4gUm5kaXNV bmRpR2V0Q29uZmlnSW5mbzsNCj4gKyAgVXNiUm5kaXNEZXZpY2UtPlVzYkV0aC5Vc2JFdGhVbmRp LlVzYkV0aFVuZGlJbml0aWFsaXplICAgICAgPQ0KPiBSbmRpc1VuZGlJbml0aWFsaXplOw0KPiAr ICBVc2JSbmRpc0RldmljZS0+VXNiRXRoLlVzYkV0aFVuZGkuVXNiRXRoVW5kaVJlc2V0ICAgICAg ICAgICA9DQo+IFJuZGlzVW5kaVJlc2V0Ow0KPiArICBVc2JSbmRpc0RldmljZS0+VXNiRXRoLlVz YkV0aFVuZGkuVXNiRXRoVW5kaVNodXRkb3duICAgICAgICA9DQo+IFJuZGlzVW5kaVNodXRkb3du Ow0KPiArICBVc2JSbmRpc0RldmljZS0+VXNiRXRoLlVzYkV0aFVuZGkuVXNiRXRoVW5kaUludGVy cnVwdEVuYWJsZSA9DQo+IFJuZGlzRHVtbXlSZXR1cm47DQo+ICsgIFVzYlJuZGlzRGV2aWNlLT5V c2JFdGguVXNiRXRoVW5kaS5Vc2JFdGhVbmRpUmVjZWl2ZUZpbHRlciAgID0NCj4gUm5kaXNVbmRp UmVjZWl2ZUZpbHRlcjsNCj4gKyAgVXNiUm5kaXNEZXZpY2UtPlVzYkV0aC5Vc2JFdGhVbmRpLlVz YkV0aFVuZGlTdGF0aW9uQWRkcmVzcyAgPQ0KPiBSbmRpc0R1bW15UmV0dXJuOw0KPiArICBVc2JS bmRpc0RldmljZS0+VXNiRXRoLlVzYkV0aFVuZGkuVXNiRXRoVW5kaVN0YXRpc3RpY3MgICAgICA9 IE5VTEw7DQo+ICsgIFVzYlJuZGlzRGV2aWNlLT5Vc2JFdGguVXNiRXRoVW5kaS5Vc2JFdGhVbmRp TWNhc3RJcDJNYWMgICAgID0NCj4gUm5kaXNEdW1teVJldHVybjsNCj4gKyAgVXNiUm5kaXNEZXZp Y2UtPlVzYkV0aC5Vc2JFdGhVbmRpLlVzYkV0aFVuZGlOdkRhdGEgICAgICAgICAgPQ0KPiBSbmRp c0R1bW15UmV0dXJuOw0KPiArICBVc2JSbmRpc0RldmljZS0+VXNiRXRoLlVzYkV0aFVuZGkuVXNi RXRoVW5kaUdldFN0YXR1cyAgICAgICA9DQo+IFJuZGlzVW5kaUdldFN0YXR1czsNCj4gKyAgVXNi Um5kaXNEZXZpY2UtPlVzYkV0aC5Vc2JFdGhVbmRpLlVzYkV0aFVuZGlGaWxsSGVhZGVyICAgICAg PQ0KPiBSbmRpc0R1bW15UmV0dXJuOw0KPiArICBVc2JSbmRpc0RldmljZS0+VXNiRXRoLlVzYkV0 aFVuZGkuVXNiRXRoVW5kaVRyYW5zbWl0ICAgICAgICA9IE5VTEw7DQo+ICsgIFVzYlJuZGlzRGV2 aWNlLT5Vc2JFdGguVXNiRXRoVW5kaS5Vc2JFdGhVbmRpUmVjZWl2ZSAgICAgICAgID0gTlVMTDsN Cj4gKw0KPiArICBVc2JSbmRpc0RldmljZS0+TWF4VHJhbnNmZXJTaXplICAgICAgID0gUk5ESVNf TUFYX1RSQU5TRkVSX1NJWkU7DQo+ICsgIFVzYlJuZGlzRGV2aWNlLT5NYXhQYWNrZXRzUGVyVHJh bnNmZXIgPSAxOw0KPiArICBVc2JSbmRpc0RldmljZS0+UGFja2V0QWxpZ25tZW50RmFjdG9yID0g MDsNCj4gKw0KPiArICBJbml0aWFsaXplTGlzdEhlYWQgKCZVc2JSbmRpc0RldmljZS0+UmVjZWl2 ZVBhY2tldExpc3QpOw0KPiArDQo+ICsgIC8vIFRoaXMgaXMgYSBSTkRJUyBpbnRlcmZhY2UuIFNl ZSB3aGV0aGVyIENEQy1EQVRBIGludGVyZmFjZSBoYXMgYWxyZWFkeQ0KPiBiZWVuIGNvbm5lY3Rl ZCBvciBub3QNCj4gKyAgRmluZE1hdGNoaW5nQ2RjRGF0YSAoVXNiUm5kaXNEZXZpY2UpOw0KPiAr DQo+ICsgIGlmIChVc2JSbmRpc0RldmljZS0+VXNiSW9DZGNEYXRhKSB7DQo+ICsgICAgU3RhdHVz ID0gZ0JTLT5JbnN0YWxsUHJvdG9jb2xJbnRlcmZhY2UgKA0KPiArICAgICAgICAgICAgICAgICAg ICAmQ29udHJvbGxlckhhbmRsZSwNCj4gKyAgICAgICAgICAgICAgICAgICAgJmdFZGtJSVVzYkV0 aFByb3RvY29sR3VpZCwNCj4gKyAgICAgICAgICAgICAgICAgICAgRUZJX05BVElWRV9JTlRFUkZB Q0UsDQo+ICsgICAgICAgICAgICAgICAgICAgICYoVXNiUm5kaXNEZXZpY2UtPlVzYkV0aCkNCj4g KyAgICAgICAgICAgICAgICAgICAgKTsNCj4gKyAgICBpZiAoRUZJX0VSUk9SIChTdGF0dXMpKSB7 DQo+ICsgICAgICBnQlMtPkNsb3NlUHJvdG9jb2wgKA0KPiArICAgICAgICAgICAgIENvbnRyb2xs ZXJIYW5kbGUsDQo+ICsgICAgICAgICAgICAgJmdFZmlVc2JJb1Byb3RvY29sR3VpZCwNCj4gKyAg ICAgICAgICAgICBUaGlzLT5Ecml2ZXJCaW5kaW5nSGFuZGxlLA0KPiArICAgICAgICAgICAgIENv bnRyb2xsZXJIYW5kbGUNCj4gKyAgICAgICAgICAgICApOw0KPiArDQo+ICsgICAgICBnQlMtPkZy ZWVQb29sIChVc2JSbmRpc0RldmljZS0+Q29uZmlnKTsNCj4gKyAgICAgIGdCUy0+RnJlZVBvb2wg KFVzYlJuZGlzRGV2aWNlKTsNCj4gKyAgICAgIHJldHVybiBTdGF0dXM7DQo+ICsgICAgfQ0KPiAr DQo+ICsgICAgR2V0RW5kcG9pbnQgKFVzYlJuZGlzRGV2aWNlLT5Vc2JJbywgVXNiUm5kaXNEZXZp Y2UpOw0KPiArDQo+ICsgICAgREVCVUcgKChERUJVR19FUlJPUiwgIlJuZGlzIERldmljZUhhbmRs ZSAlclxuIiwgVXNiUm5kaXNEZXZpY2UtDQo+ID5Vc2JSbmRpc0hhbmRsZSkpOw0KPiArICAgIERF QlVHICgoREVCVUdfRVJST1IsICJDREMgRGV2aWNlSGFuZGxlICVyXG4iLCBVc2JSbmRpc0Rldmlj ZS0NCj4gPlVzYkNkY0RhdGFIYW5kbGUpKTsNCj4gKyAgICByZXR1cm4gRUZJX1NVQ0NFU1M7DQo+ ICsgIH0NCj4gKw0KPiArICBnQlMtPkZyZWVQb29sIChVc2JSbmRpc0RldmljZS0+Q29uZmlnKTsN Cj4gKyAgZ0JTLT5GcmVlUG9vbCAoVXNiUm5kaXNEZXZpY2UpOw0KPiArDQo+ICsgIHJldHVybiBF RklfU1VDQ0VTUzsNCj4gK30NCj4gKw0KPiArLyoqDQo+ICsgIENoZWNrYW5kU3RvcFJuZGlzRGV2 aWNlDQo+ICsNCj4gKyAgQHBhcmFtW2luXSAgVGhpcyAgICAgICAgICAgICAgICAgUHJvdG9jb2wg aW5zdGFuY2UgcG9pbnRlci4NCj4gKyAgQHBhcmFtW2luXSAgQ29udHJvbGxlckhhbmRsZSAgICAg SGFuZGxlIG9mIGRldmljZSB0byBiaW5kIGRyaXZlciB0by4NCj4gKw0KPiArICBAcmV0dmFsIEVG SV9TVUNDRVNTICAgICAgICAgIFRoaXMgZHJpdmVyIGlzIGFkZGVkIHRvIENvbnRyb2xsZXJIYW5k bGUNCj4gKyAgQHJldHZhbCBFRklfREVWSUNFX0VSUk9SICAgICBUaGlzIGRyaXZlciBjb3VsZCBu b3QgYmUgc3RhcnRlZCBkdWUgdG8gYQ0KPiBkZXZpY2UgZXJyb3INCj4gKyAgQHJldHZhbCBvdGhl ciAgICAgICAgICAgICAgICBUaGlzIGRyaXZlciBkb2VzIG5vdCBzdXBwb3J0IHRoaXMgZGV2aWNl DQo+ICsNCj4gKyoqLw0KPiArRUZJX1NUQVRVUw0KPiArRUZJQVBJDQo+ICtDaGVja2FuZFN0b3BS bmRpc0RldmljZSAoDQo+ICsgIElOICBFRklfRFJJVkVSX0JJTkRJTkdfUFJPVE9DT0wgICpUaGlz LA0KPiArICBJTiAgRUZJX0hBTkRMRSAgICAgICAgICAgICAgICAgICBDb250cm9sbGVySGFuZGxl DQo+ICsgICkNCj4gK3sNCj4gKyAgRUZJX1NUQVRVUyAgICAgICAgICAgU3RhdHVzOw0KPiArICBF RklfVVNCX0lPX1BST1RPQ09MICAqVXNiSW87DQo+ICsNCj4gKyAgU3RhdHVzID0gZ0JTLT5PcGVu UHJvdG9jb2wgKA0KPiArICAgICAgICAgICAgICAgICAgQ29udHJvbGxlckhhbmRsZSwNCj4gKyAg ICAgICAgICAgICAgICAgICZnRWZpVXNiSW9Qcm90b2NvbEd1aWQsDQo+ICsgICAgICAgICAgICAg ICAgICAoVk9JRCAqKikmVXNiSW8sDQo+ICsgICAgICAgICAgICAgICAgICBUaGlzLT5Ecml2ZXJC aW5kaW5nSGFuZGxlLA0KPiArICAgICAgICAgICAgICAgICAgQ29udHJvbGxlckhhbmRsZSwNCj4g KyAgICAgICAgICAgICAgICAgIEVGSV9PUEVOX1BST1RPQ09MX0dFVF9QUk9UT0NPTA0KPiArICAg ICAgICAgICAgICAgICAgKTsNCj4gKyAgaWYgKEVGSV9FUlJPUiAoU3RhdHVzKSkgew0KPiArICAg IHJldHVybiBTdGF0dXM7DQo+ICsgIH0NCj4gKw0KPiArICBpZiAoSXNVc2JSbmRpcyAoVXNiSW8p KSB7DQo+ICsgICAgU3RhdHVzID0gZ0JTLT5DbG9zZVByb3RvY29sICgNCj4gKyAgICAgICAgICAg ICAgICAgICAgQ29udHJvbGxlckhhbmRsZSwNCj4gKyAgICAgICAgICAgICAgICAgICAgJmdFZmlV c2JJb1Byb3RvY29sR3VpZCwNCj4gKyAgICAgICAgICAgICAgICAgICAgVGhpcy0+RHJpdmVyQmlu ZGluZ0hhbmRsZSwNCj4gKyAgICAgICAgICAgICAgICAgICAgQ29udHJvbGxlckhhbmRsZQ0KPiAr ICAgICAgICAgICAgICAgICAgICApOw0KPiArICAgIERFQlVHICgoREVCVUdfRVJST1IsICJSbmRp cyBDb250cm9sbGVySGFuZGxlIFN0b3AgJXJcbiIsIFN0YXR1cykpOw0KPiArICAgIHJldHVybiBT dGF0dXM7DQo+ICsgIH0NCj4gKw0KPiArICByZXR1cm4gRUZJX1VOU1VQUE9SVEVEOw0KPiArfQ0K PiArDQo+ICsvKioNCj4gKyAgVVNCIFJuZGlzIERyaXZlciBCaW5kaW5nIFN0b3AuDQo+ICsNCj4g KyAgQHBhcmFtW2luXSAgVGhpcyAgICAgICAgICAgICAgICAgIFByb3RvY29sIGluc3RhbmNlIHBv aW50ZXIuDQo+ICsgIEBwYXJhbVtpbl0gIENvbnRyb2xsZXJIYW5kbGUgICAgICBIYW5kbGUgb2Yg ZGV2aWNlIHRvIHN0b3AgZHJpdmVyIG9uDQo+ICsgIEBwYXJhbVtpbl0gIE51bWJlck9mQ2hpbGRy ZW4gICAgICBOdW1iZXIgb2YgSGFuZGxlcyBpbg0KPiBDaGlsZEhhbmRsZUJ1ZmZlci4gSWYgbnVt YmVyIG9mDQo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGlsZHJlbiBp cyB6ZXJvIHN0b3AgdGhlIGVudGlyZSBidXMgZHJpdmVyLg0KPiArICBAcGFyYW1baW5dICBDaGls ZEhhbmRsZUJ1ZmZlciAgICAgTGlzdCBvZiBDaGlsZCBIYW5kbGVzIHRvIFN0b3AuDQo+ICsNCj4g KyAgQHJldHZhbCBFRklfU1VDQ0VTUyAgICAgICAgICAgICAgIFRoaXMgZHJpdmVyIGlzIHJlbW92 ZWQgQ29udHJvbGxlckhhbmRsZQ0KPiArICBAcmV0dmFsIG90aGVyICAgICAgICAgICAgICAgICAg ICAgVGhpcyBkcml2ZXIgd2FzIG5vdCByZW1vdmVkIGZyb20gdGhpcyBkZXZpY2UNCj4gKw0KPiAr KiovDQo+ICtFRklfU1RBVFVTDQo+ICtFRklBUEkNCj4gK1VzYlJuZGlzRHJpdmVyU3RvcCAoDQo+ ICsgIElOICBFRklfRFJJVkVSX0JJTkRJTkdfUFJPVE9DT0wgICpUaGlzLA0KPiArICBJTiAgRUZJ X0hBTkRMRSAgICAgICAgICAgICAgICAgICBDb250cm9sbGVySGFuZGxlLA0KPiArICBJTiAgVUlO VE4gICAgICAgICAgICAgICAgICAgICAgICBOdW1iZXJPZkNoaWxkcmVuLA0KPiArICBJTiAgRUZJ X0hBTkRMRSAgICAgICAgICAgICAgICAgICAqQ2hpbGRIYW5kbGVCdWZmZXINCj4gKyAgKQ0KPiAr ew0KPiArICBFRklfU1RBVFVTICAgICAgICAgICAgICAgICAgIFN0YXR1czsNCj4gKyAgRURLSUlf VVNCX0VUSEVSTkVUX1BST1RPQ09MICAqVXNiRXRoUHJvdG9jb2w7DQo+ICsgIFVTQl9STkRJU19E RVZJQ0UgICAgICAgICAgICAgKlVzYlJuZGlzRGV2aWNlOw0KPiArDQo+ICsgIERFQlVHICgoREVC VUdfRVJST1IsICJVc2JSbmRpc0RyaXZlclN0b3AgQ29udHJvbGxlckhhbmRsZSAlbHhcbiIsDQo+ IENvbnRyb2xsZXJIYW5kbGUpKTsNCj4gKw0KPiArICBTdGF0dXMgPSBnQlMtPk9wZW5Qcm90b2Nv bCAoDQo+ICsgICAgICAgICAgICAgICAgICBDb250cm9sbGVySGFuZGxlLA0KPiArICAgICAgICAg ICAgICAgICAgJmdFZGtJSVVzYkV0aFByb3RvY29sR3VpZCwNCj4gKyAgICAgICAgICAgICAgICAg IChWT0lEICoqKSZVc2JFdGhQcm90b2NvbCwNCj4gKyAgICAgICAgICAgICAgICAgIFRoaXMtPkRy aXZlckJpbmRpbmdIYW5kbGUsDQo+ICsgICAgICAgICAgICAgICAgICBDb250cm9sbGVySGFuZGxl LA0KPiArICAgICAgICAgICAgICAgICAgRUZJX09QRU5fUFJPVE9DT0xfR0VUX1BST1RPQ09MDQo+ ICsgICAgICAgICAgICAgICAgICApOw0KPiArICBpZiAoRUZJX0VSUk9SIChTdGF0dXMpKSB7DQo+ ICsgICAgU3RhdHVzID0gQ2hlY2thbmRTdG9wUm5kaXNEZXZpY2UgKFRoaXMsIENvbnRyb2xsZXJI YW5kbGUpOw0KPiArDQo+ICsgICAgREVCVUcgKChERUJVR19FUlJPUiwgIkNoZWNrYW5kU3RvcFJu ZGlzRGV2aWNlICVyXG4iLCBTdGF0dXMpKTsNCj4gKw0KPiArICAgIHJldHVybiBTdGF0dXM7DQo+ ICsgIH0NCj4gKw0KPiArICBVc2JSbmRpc0RldmljZSA9IFVTQl9STkRJU19ERVZJQ0VfRlJPTV9U SElTIChVc2JFdGhQcm90b2NvbCk7DQo+ICsNCj4gKyAgU3RhdHVzID0gZ0JTLT5DbG9zZVByb3Rv Y29sICgNCj4gKyAgICAgICAgICAgICAgICAgIFVzYlJuZGlzRGV2aWNlLT5Vc2JDZGNEYXRhSGFu ZGxlLA0KPiArICAgICAgICAgICAgICAgICAgJmdFZmlVc2JJb1Byb3RvY29sR3VpZCwNCj4gKyAg ICAgICAgICAgICAgICAgIFRoaXMtPkRyaXZlckJpbmRpbmdIYW5kbGUsDQo+ICsgICAgICAgICAg ICAgICAgICBVc2JSbmRpc0RldmljZS0+VXNiQ2RjRGF0YUhhbmRsZQ0KPiArICAgICAgICAgICAg ICAgICAgKTsNCj4gKw0KPiArICBTdGF0dXMgPSBnQlMtPlVuaW5zdGFsbFByb3RvY29sSW50ZXJm YWNlICgNCj4gKyAgICAgICAgICAgICAgICAgIENvbnRyb2xsZXJIYW5kbGUsDQo+ICsgICAgICAg ICAgICAgICAgICAmZ0Vka0lJVXNiRXRoUHJvdG9jb2xHdWlkLA0KPiArICAgICAgICAgICAgICAg ICAgVXNiRXRoUHJvdG9jb2wNCj4gKyAgICAgICAgICAgICAgICAgICk7DQo+ICsgIGlmIChFRklf RVJST1IgKFN0YXR1cykpIHsNCj4gKyAgICBERUJVRyAoKERFQlVHX0VSUk9SLCAiRUZJX0VSUk9S ICVyXG4iLCBTdGF0dXMpKTsNCj4gKw0KPiArICAgIHJldHVybiBTdGF0dXM7DQo+ICsgIH0NCj4g Kw0KPiArICBTdGF0dXMgPSBnQlMtPkNsb3NlUHJvdG9jb2wgKA0KPiArICAgICAgICAgICAgICAg ICAgQ29udHJvbGxlckhhbmRsZSwNCj4gKyAgICAgICAgICAgICAgICAgICZnRWZpVXNiSW9Qcm90 b2NvbEd1aWQsDQo+ICsgICAgICAgICAgICAgICAgICBUaGlzLT5Ecml2ZXJCaW5kaW5nSGFuZGxl LA0KPiArICAgICAgICAgICAgICAgICAgQ29udHJvbGxlckhhbmRsZQ0KPiArICAgICAgICAgICAg ICAgICAgKTsNCj4gKw0KPiArICBnQlMtPkZyZWVQb29sIChVc2JSbmRpc0RldmljZS0+Q29uZmln KTsNCj4gKyAgZ0JTLT5GcmVlUG9vbCAoVXNiUm5kaXNEZXZpY2UpOw0KPiArDQo+ICsgIERFQlVH ICgoREVCVUdfRVJST1IsICJVc2JSbmRpc0RyaXZlclN0b3AgJXJcbiIsIFN0YXR1cykpOw0KPiAr ICByZXR1cm4gU3RhdHVzOw0KPiArfQ0KPiArDQo+ICsvKioNCj4gKyAgRW50cnlwb2ludCBvZiBS TkRJUyBEcml2ZXIuDQo+ICsNCj4gKyAgVGhpcyBmdW5jdGlvbiBpcyB0aGUgZW50cnlwb2ludCBv ZiBSTkRJUyBEcml2ZXIuIEl0IGluc3RhbGxzIERyaXZlciBCaW5kaW5nDQo+ICsgIFByb3RvY29s cyB0b2dldGhlciB3aXRoIENvbXBvbmVudCBOYW1lIFByb3RvY29scy4NCj4gKw0KPiArICBAcGFy YW1baW5dICBJbWFnZUhhbmRsZSAgICAgICBUaGUgZmlybXdhcmUgYWxsb2NhdGVkIGhhbmRsZSBm b3IgdGhlIEVGSQ0KPiBpbWFnZS4NCj4gKyAgQHBhcmFtW2luXSAgU3lzdGVtVGFibGUgICAgICAg QSBwb2ludGVyIHRvIHRoZSBFRkkgU3lzdGVtIFRhYmxlLg0KPiArDQo+ICsgIEByZXR2YWwgRUZJ X1NVQ0NFU1MgICAgICAgICAgIFRoZSBlbnRyeSBwb2ludCBpcyBleGVjdXRlZCBzdWNjZXNzZnVs bHkuDQo+ICsNCj4gKyoqLw0KPiArRUZJX1NUQVRVUw0KPiArRUZJQVBJDQo+ICtVc2JSbmRpc0Vu dHJ5ICgNCj4gKyAgSU4gRUZJX0hBTkRMRSAgICAgICAgSW1hZ2VIYW5kbGUsDQo+ICsgIElOIEVG SV9TWVNURU1fVEFCTEUgICpTeXN0ZW1UYWJsZQ0KPiArICApDQo+ICt7DQo+ICsgIGdVc2JSbmRp c0RyaXZlckJpbmRpbmcuRHJpdmVyQmluZGluZ0hhbmRsZSA9IEltYWdlSGFuZGxlOw0KPiArICBn VXNiUm5kaXNEcml2ZXJCaW5kaW5nLkltYWdlSGFuZGxlICAgICAgICAgPSBJbWFnZUhhbmRsZTsN Cj4gKw0KPiArICByZXR1cm4gZ0JTLT5JbnN0YWxsTXVsdGlwbGVQcm90b2NvbEludGVyZmFjZXMg KA0KPiArICAgICAgICAgICAgICAgICZnVXNiUm5kaXNEcml2ZXJCaW5kaW5nLkRyaXZlckJpbmRp bmdIYW5kbGUsDQo+ICsgICAgICAgICAgICAgICAgJmdFZmlEcml2ZXJCaW5kaW5nUHJvdG9jb2xH dWlkLA0KPiArICAgICAgICAgICAgICAgICZnVXNiUm5kaXNEcml2ZXJCaW5kaW5nLA0KPiArICAg ICAgICAgICAgICAgICZnRWZpQ29tcG9uZW50TmFtZTJQcm90b2NvbEd1aWQsDQo+ICsgICAgICAg ICAgICAgICAgJmdVc2JSbmRpc0NvbXBvbmVudE5hbWUyLA0KPiArICAgICAgICAgICAgICAgIE5V TEwNCj4gKyAgICAgICAgICAgICAgICApOw0KPiArfQ0KPiBkaWZmIC0tZ2l0IGEvVXNiTmV0d29y a1BrZy9Vc2JSbmRpcy9Vc2JSbmRpcy5oDQo+IGIvVXNiTmV0d29ya1BrZy9Vc2JSbmRpcy9Vc2JS bmRpcy5oDQo+IG5ldyBmaWxlIG1vZGUgMTAwNjQ0DQo+IGluZGV4IDAwMDAwMDAwMDAuLjA1YjVh OWJmNGYNCj4gLS0tIC9kZXYvbnVsbA0KPiArKysgYi9Vc2JOZXR3b3JrUGtnL1VzYlJuZGlzL1Vz YlJuZGlzLmgNCj4gQEAgLTAsMCArMSw1NzEgQEANCj4gKy8qKiBAZmlsZQ0KPiArICBIZWFkZXIg ZmlsZSBmb3IgZm9yIFVTQiBSbmRpcyBkcml2ZXINCj4gKw0KPiArICBDb3B5cmlnaHQgKGMpIDIw MjIsIEFtZXJpY2FuIE1lZ2F0cmVuZHMgSW50ZXJuYXRpb25hbCBMTEMuIEFsbCByaWdodHMNCj4g cmVzZXJ2ZWQuPEJSPg0KPiArICBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQlNELTItQ2xhdXNl LVBhdGVudA0KPiArKiovDQo+ICsNCj4gKyNpZm5kZWYgX1VTQl9STkRJU19IXw0KPiArI2RlZmlu ZSBfVVNCX1JORElTX0hfDQo+ICsNCj4gKyNpbmNsdWRlIDxMaWJyYXJ5L1VlZmlEcml2ZXJFbnRy eVBvaW50Lmg+DQo+ICsjaW5jbHVkZSA8TGlicmFyeS9VZWZpQm9vdFNlcnZpY2VzVGFibGVMaWIu aD4NCj4gKyNpbmNsdWRlIDxMaWJyYXJ5L1VlZmlMaWIuaD4NCj4gKyNpbmNsdWRlIDxMaWJyYXJ5 L0RldmljZVBhdGhMaWIuaD4NCj4gKyNpbmNsdWRlIDxMaWJyYXJ5L0RlYnVnTGliLmg+DQo+ICsj aW5jbHVkZSA8TGlicmFyeS9NZW1vcnlBbGxvY2F0aW9uTGliLmg+DQo+ICsjaW5jbHVkZSA8TGli cmFyeS9CYXNlTWVtb3J5TGliLmg+DQo+ICsjaW5jbHVkZSA8TGlicmFyeS9VZWZpVXNiTGliLmg+ DQo+ICsjaW5jbHVkZSA8UHJvdG9jb2wvVXNiSW8uaD4NCj4gKyNpbmNsdWRlIDxQcm90b2NvbC9F ZGtJSVVzYkV0aGVybmV0UHJvdG9jb2wuaD4NCj4gKw0KPiArdHlwZWRlZiBzdHJ1Y3QgX1JFTU9U RV9ORElTX01TR19IRUFERVINCj4gUkVNT1RFX05ESVNfTVNHX0hFQURFUjsNCj4gKw0KPiArdHlw ZWRlZiBzdHJ1Y3Qgew0KPiArICBVSU5UMzIgICAgICAgICAgICAgICAgICAgICAgICAgU2lnbmF0 dXJlOw0KPiArICBFREtJSV9VU0JfRVRIRVJORVRfUFJPVE9DT0wgICAgVXNiRXRoOw0KPiArICBF RklfSEFORExFICAgICAgICAgICAgICAgICAgICAgVXNiQ2RjRGF0YUhhbmRsZTsNCj4gKyAgRUZJ X0hBTkRMRSAgICAgICAgICAgICAgICAgICAgIFVzYlJuZGlzSGFuZGxlOw0KPiArICBFRklfVVNC X0lPX1BST1RPQ09MICAgICAgICAgICAgKlVzYklvOw0KPiArICBFRklfVVNCX0lPX1BST1RPQ09M ICAgICAgICAgICAgKlVzYklvQ2RjRGF0YTsNCj4gKyAgRUZJX1VTQl9DT05GSUdfREVTQ1JJUFRP UiAgICAgICpDb25maWc7DQo+ICsgIFVJTlQ4ICAgICAgICAgICAgICAgICAgICAgICAgICBOdW1P ZkludGVyZmFjZTsNCj4gKyAgVUlOVDggICAgICAgICAgICAgICAgICAgICAgICAgIEJ1bGtJbkVu ZHBvaW50Ow0KPiArICBVSU5UOCAgICAgICAgICAgICAgICAgICAgICAgICAgQnVsa091dEVuZHBv aW50Ow0KPiArICBVSU5UOCAgICAgICAgICAgICAgICAgICAgICAgICAgSW50ZXJydXBFbmRwb2lu dDsNCj4gKyAgRUZJX01BQ19BRERSRVNTICAgICAgICAgICAgICAgIE1hY0FkZHJlc3M7DQo+ICsg IFVJTlQzMiAgICAgICAgICAgICAgICAgICAgICAgICBSZXF1ZXN0SWQ7DQo+ICsgIFVJTlQzMiAg ICAgICAgICAgICAgICAgICAgICAgICBNZWRpdW07DQo+ICsgIFVJTlQzMiAgICAgICAgICAgICAg ICAgICAgICAgICBNYXhQYWNrZXRzUGVyVHJhbnNmZXI7DQo+ICsgIFVJTlQzMiAgICAgICAgICAg ICAgICAgICAgICAgICBNYXhUcmFuc2ZlclNpemU7DQo+ICsgIFVJTlQzMiAgICAgICAgICAgICAg ICAgICAgICAgICBQYWNrZXRBbGlnbm1lbnRGYWN0b3I7DQo+ICsgIExJU1RfRU5UUlkgICAgICAg ICAgICAgICAgICAgICBSZWNlaXZlUGFja2V0TGlzdDsNCj4gK30gVVNCX1JORElTX0RFVklDRTsN Cj4gKw0KPiArI2RlZmluZSBVU0JfUk5ESVNfRFJJVkVSX1ZFUlNJT04gICAgICAgMQ0KPiArI2Rl ZmluZSBVU0JfVFhfRVRIRVJORVRfQlVMS19USU1FT1VUICAgMzAwMA0KPiArI2RlZmluZSBVU0Jf UlhfRVRIRVJORVRfQlVMS19USU1FT1VUICAgMw0KPiArI2RlZmluZSBVU0JfRVRIRVJORVRfVFJB TlNGRVJfVElNRU9VVCAgMjAwDQo+ICsNCj4gKyNkZWZpbmUgTEFOX0JVTEtJTl9DTURfQ09OVFJP TCAgMQ0KPiArI2RlZmluZSBNQVhJTVVNX1NUT1BCVUxLSU5fQ05UICAzMDAgICAgICAgICAgICAv LyBJbmRpY2F0aW5nIG1heGltdW0NCj4gY291bnRzIGZvciB3YWl0aW5nIGJ1bGsgaW4gY29tbWFu ZA0KPiArI2RlZmluZSBNSU5JTVVNX1NUT1BCVUxLSU5fQ05UICAzICAgICAgICAgICAgICAvLyBJ bmRpY2F0aW5nIG1pbmltdW0NCj4gY291bnRzIGZvciB3YWl0aW5nIGJ1bGsgaW4gY29tbWFuZA0K PiArI2RlZmluZSBCVUxLSU5fQ01EX1BPTExJTkdfQ05UICAzMDAgICAgICAgICAgICAvLyBJbmRp Y2F0aW5nIHRoZSB3YWl0aW5nDQo+IGNvdW50cyBmb3Igc2VuZCBidWxrIGluIGNvbW1hbmQgd2hl biBzeXN0ZW0gcGVuZGluZw0KPiArDQo+ICsjZGVmaW5lIFVTQl9STkRJU19TSUdOQVRVUkUgIFNJ R05BVFVSRV8zMigncicsICduJywgJ2QnLCAncycpDQo+ICsjZGVmaW5lIFVTQl9STkRJU19ERVZJ Q0VfRlJPTV9USElTKGEpICBDUiAoYSwgVVNCX1JORElTX0RFVklDRSwNCj4gVXNiRXRoLCBVU0Jf Uk5ESVNfU0lHTkFUVVJFKQ0KPiArDQo+ICtleHRlcm4gRUZJX0NPTVBPTkVOVF9OQU1FMl9QUk9U T0NPTA0KPiBnVXNiUm5kaXNDb21wb25lbnROYW1lMjsNCj4gKw0KPiArc3RydWN0IEJJVF9NQVAg ew0KPiArICB1bnNpZ25lZCBpbnQgICAgU3JjOw0KPiArICB1bnNpZ25lZCBpbnQgICAgRHN0Ow0K PiArfTsNCj4gKw0KPiArRUZJX1NUQVRVUw0KPiArRUZJQVBJDQo+ICtVc2JSbmRpc0RyaXZlclN1 cHBvcnRlZCAoDQo+ICsgIElOIEVGSV9EUklWRVJfQklORElOR19QUk9UT0NPTCAgKlRoaXMsDQo+ ICsgIElOIEVGSV9IQU5ETEUgICAgICAgICAgICAgICAgICAgQ29udHJvbGxlckhhbmRsZSwNCj4g KyAgSU4gRUZJX0RFVklDRV9QQVRIX1BST1RPQ09MICAgICAqUmVtYWluaW5nRGV2aWNlUGF0aA0K PiArICApOw0KPiArDQo+ICtFRklfU1RBVFVTDQo+ICtFRklBUEkNCj4gK1VzYlJuZGlzRHJpdmVy U3RhcnQgKA0KPiArICBJTiBFRklfRFJJVkVSX0JJTkRJTkdfUFJPVE9DT0wgICpUaGlzLA0KPiAr ICBJTiBFRklfSEFORExFICAgICAgICAgICAgICAgICAgIENvbnRyb2xsZXJIYW5kbGUsDQo+ICsg IElOIEVGSV9ERVZJQ0VfUEFUSF9QUk9UT0NPTCAgICAgKlJlbWFpbmluZ0RldmljZVBhdGgNCj4g KyAgKTsNCj4gKw0KPiArRUZJX1NUQVRVUw0KPiArRUZJQVBJDQo+ICtVc2JSbmRpc0RyaXZlclN0 b3AgKA0KPiArICBJTiAgRUZJX0RSSVZFUl9CSU5ESU5HX1BST1RPQ09MICAqVGhpcywNCj4gKyAg SU4gIEVGSV9IQU5ETEUgICAgICAgICAgICAgICAgICAgQ29udHJvbGxlckhhbmRsZSwNCj4gKyAg SU4gIFVJTlROICAgICAgICAgICAgICAgICAgICAgICAgTnVtYmVyT2ZDaGlsZHJlbiwNCj4gKyAg SU4gIEVGSV9IQU5ETEUgICAgICAgICAgICAgICAgICAgKkNoaWxkSGFuZGxlQnVmZmVyDQo+ICsg ICk7DQo+ICsNCj4gK0VGSV9TVEFUVVMNCj4gK0xvYWRBbGxEZXNjcmlwdG9yICgNCj4gKyAgSU4g IEVGSV9VU0JfSU9fUFJPVE9DT0wgICAgICAgICpVc2JJbywNCj4gKyAgT1VUIEVGSV9VU0JfQ09O RklHX0RFU0NSSVBUT1IgICoqQ29uZmlnRGVzYw0KPiArICApOw0KPiArDQo+ICtCT09MRUFODQo+ ICtOZXh0RGVzY3JpcHRvciAoDQo+ICsgIElOIEVGSV9VU0JfQ09ORklHX0RFU0NSSVBUT1IgICpE ZXNjLA0KPiArICBJTiBPVVQgVUlOVE4gICAgICAgICAgICAgICAgICAqT2Zmc2V0DQo+ICsgICk7 DQo+ICsNCj4gK0VGSV9TVEFUVVMNCj4gK0dldEZ1bmN0aW9uYWxEZXNjcmlwdG9yICgNCj4gKyAg SU4gIEVGSV9VU0JfQ09ORklHX0RFU0NSSVBUT1IgICpDb25maWcsDQo+ICsgIElOICBVSU5UOCAg ICAgICAgICAgICAgICAgICAgICBGdW5EZXNjcmlwdG9yVHlwZSwNCj4gKyAgT1VUIFZPSUQgICAg ICAgICAgICAgICAgICAgICAgICpEYXRhQnVmZmVyDQo+ICsgICk7DQo+ICsNCj4gK1ZPSUQNCj4g K0dldEVuZHBvaW50ICgNCj4gKyAgSU4gICAgICBFRklfVVNCX0lPX1BST1RPQ09MICAqVXNiSW8s DQo+ICsgIElOIE9VVCAgVVNCX1JORElTX0RFVklDRSAgICAgKlVzYlJuZGlzRGV2aWNlDQo+ICsg ICk7DQo+ICsNCj4gK0VGSV9TVEFUVVMNCj4gK0VGSUFQSQ0KPiArVXNiUm5kaXNJbnRlcnJ1cHQg KA0KPiArICBJTiBFREtJSV9VU0JfRVRIRVJORVRfUFJPVE9DT0wgICpUaGlzLA0KPiArICBJTiBC T09MRUFOICAgICAgICAgICAgICAgICAgICAgIElzTmV3VHJhbnNmZXIsDQo+ICsgIElOIFVJTlRO ICAgICAgICAgICAgICAgICAgICAgICAgUG9sbGluZ0ludGVydmFsLA0KPiArICBJTiBFRklfVVNC X0RFVklDRV9SRVFVRVNUICAgICAgICpSZXF1c3QNCj4gKyAgKTsNCj4gKw0KPiArRUZJX1NUQVRV Uw0KPiArRUZJQVBJDQo+ICtJbnRlcnJ1cHRDYWxsYmFjayAoDQo+ICsgIElOICBWT0lEICAgICpE YXRhLA0KPiArICBJTiAgVUlOVE4gICBEYXRhTGVuZ3RoLA0KPiArICBJTiAgVk9JRCAgICAqQ29u dGV4dCwNCj4gKyAgSU4gIFVJTlQzMiAgU3RhdHVzDQo+ICsgICk7DQo+ICsNCj4gK0VGSV9TVEFU VVMNCj4gK0VGSUFQSQ0KPiArR2V0VXNiRXRoTWFjQWRkcmVzcyAoDQo+ICsgIElOICBFREtJSV9V U0JfRVRIRVJORVRfUFJPVE9DT0wgICpUaGlzLA0KPiArICBPVVQgRUZJX01BQ19BRERSRVNTICAg ICAgICAgICAgICAqTWFjQWRkcmVzcw0KPiArICApOw0KPiArDQo+ICtFRklfU1RBVFVTDQo+ICtF RklBUEkNCj4gK1VzYkV0aEJ1bGtTaXplICgNCj4gKyAgSU4gIEVES0lJX1VTQl9FVEhFUk5FVF9Q Uk9UT0NPTCAgKlRoaXMsDQo+ICsgIE9VVCBVSU5UTiAgICAgICAgICAgICAgICAgICAgICAgICpC dWxrU2l6ZQ0KPiArICApOw0KPiArDQo+ICtFRklfU1RBVFVTDQo+ICtFRklBUEkNCj4gK1JuZGlz RHVtbXlSZXR1cm4gKA0KPiArICBJTiAgUFhFX0NEQiAgICpDZGIsDQo+ICsgIElOICBOSUNfREFU QSAgKk5pYw0KPiArICApOw0KPiArDQo+ICtFRklfU1RBVFVTDQo+ICtFRklBUEkNCj4gK1JuZGlz VW5kaVN0YXJ0ICgNCj4gKyAgSU4gUFhFX0NEQiAgICpDZGIsDQo+ICsgIElOIE5JQ19EQVRBICAq TmljDQo+ICsgICk7DQo+ICsNCj4gK0VGSV9TVEFUVVMNCj4gK0VGSUFQSQ0KPiArUm5kaXNVbmRp U3RvcCAoDQo+ICsgIElOIFBYRV9DREIgICAqQ2RiLA0KPiArICBJTiBOSUNfREFUQSAgKk5pYw0K PiArICApOw0KPiArDQo+ICtFRklfU1RBVFVTDQo+ICtFRklBUEkNCj4gK1JuZGlzVW5kaUdldElu aXRJbmZvICgNCj4gKyAgSU4gUFhFX0NEQiAgICpDZGIsDQo+ICsgIElOIE5JQ19EQVRBICAqTmlj DQo+ICsgICk7DQo+ICsNCj4gK0VGSV9TVEFUVVMNCj4gK0VGSUFQSQ0KPiArUm5kaXNVbmRpR2V0 Q29uZmlnSW5mbyAoDQo+ICsgIElOIFBYRV9DREIgICAqQ2RiLA0KPiArICBJTiBOSUNfREFUQSAg Kk5pYw0KPiArICApOw0KPiArDQo+ICtFRklfU1RBVFVTDQo+ICtFRklBUEkNCj4gK1JuZGlzVW5k aUluaXRpYWxpemUgKA0KPiArICBJTiBQWEVfQ0RCICAgKkNkYiwNCj4gKyAgSU4gTklDX0RBVEEg ICpOaWMNCj4gKyAgKTsNCj4gKw0KPiArRUZJX1NUQVRVUw0KPiArRUZJQVBJDQo+ICtSbmRpc1Vu ZGlUcmFuc21pdCAoDQo+ICsgIElOICAgICAgUFhFX0NEQiAgICAgICAgICAgICAgICAgICAgICAq Q2RiLA0KPiArICBJTiAgICAgIEVES0lJX1VTQl9FVEhFUk5FVF9QUk9UT0NPTCAgKlRoaXMsDQo+ ICsgIElOICAgICAgVk9JRCAgICAgICAgICAgICAgICAgICAgICAgICAqQnVsa091dERhdGEsDQo+ ICsgIElOIE9VVCAgVUlOVE4gICAgICAgICAgICAgICAgICAgICAgICAqRGF0YUxlbmd0aA0KPiAr ICApOw0KPiArDQo+ICtFRklfU1RBVFVTDQo+ICtFRklBUEkNCj4gK1JuZGlzVW5kaVJlY2VpdmUg KA0KPiArICBJTiAgICAgUFhFX0NEQiAgICAgICAgICAgICAgICAgICAgICAqQ2RiLA0KPiArICBJ TiAgICAgRURLSUlfVVNCX0VUSEVSTkVUX1BST1RPQ09MICAqVGhpcywNCj4gKyAgSU4gT1VUIFZP SUQgICAgICAgICAgICAgICAgICAgICAgICAgKkJ1bGtJbkRhdGEsDQo+ICsgIElOIE9VVCBVSU5U TiAgICAgICAgICAgICAgICAgICAgICAgICpEYXRhTGVuZ3RoDQo+ICsgICk7DQo+ICsNCj4gK0VG SV9TVEFUVVMNCj4gK0VGSUFQSQ0KPiArUm5kaXNVbmRpUmVzZXQgKA0KPiArICBJTiBQWEVfQ0RC ICAgKkNkYiwNCj4gKyAgSU4gTklDX0RBVEEgICpOaWMNCj4gKyAgKTsNCj4gKw0KPiArRUZJX1NU QVRVUw0KPiArRUZJQVBJDQo+ICtSbmRpc1VuZGlTaHV0ZG93biAoDQo+ICsgIElOIFBYRV9DREIg ICAqQ2RiLA0KPiArICBJTiBOSUNfREFUQSAgKk5pYw0KPiArICApOw0KPiArDQo+ICtFRklfU1RB VFVTDQo+ICtFRklBUEkNCj4gK1JuZGlzVW5kaVJlY2VpdmVGaWx0ZXIgKA0KPiArICBJTiBQWEVf Q0RCICAgKkNkYiwNCj4gKyAgSU4gTklDX0RBVEEgICpOaWMNCj4gKyAgKTsNCj4gKw0KPiArRUZJ X1NUQVRVUw0KPiArRUZJQVBJDQo+ICtSbmRpc1VuZGlHZXRTdGF0dXMgKA0KPiArICBJTiBQWEVf Q0RCICAgKkNkYiwNCj4gKyAgSU4gTklDX0RBVEEgICpOaWMNCj4gKyAgKTsNCj4gKw0KPiArRUZJ X1NUQVRVUw0KPiArRUZJQVBJDQo+ICtHZXRVc2JIZWFkZXJGdW5EZXNjcmlwdG9yICgNCj4gKyAg SU4gIEVES0lJX1VTQl9FVEhFUk5FVF9QUk9UT0NPTCAgKlRoaXMsDQo+ICsgIE9VVCBVU0JfSEVB REVSX0ZVTl9ERVNDUklQVE9SICAgICpVc2JIZWFkZXJGdW5EZXNjcmlwdG9yDQo+ICsgICk7DQo+ ICsNCj4gK0VGSV9TVEFUVVMNCj4gK0VGSUFQSQ0KPiArR2V0VXNiVW5pb25GdW5EZXNjcmlwdG9y ICgNCj4gKyAgSU4gIEVES0lJX1VTQl9FVEhFUk5FVF9QUk9UT0NPTCAgKlRoaXMsDQo+ICsgIE9V VCBVU0JfVU5JT05fRlVOX0RFU0NSSVBUT1IgICAgICpVc2JVbmlvbkZ1bkRlc2NyaXB0b3INCj4g KyAgKTsNCj4gKw0KPiArRUZJX1NUQVRVUw0KPiArRUZJQVBJDQo+ICtHZXRVc2JSbmRpc0Z1bkRl c2NyaXB0b3IgKA0KPiArICBJTiAgRURLSUlfVVNCX0VUSEVSTkVUX1BST1RPQ09MICAqVGhpcywN Cj4gKyAgT1VUIFVTQl9FVEhFUk5FVF9GVU5fREVTQ1JJUFRPUiAgKlVzYkV0aEZ1bkRlc2NyaXB0 b3INCj4gKyAgKTsNCj4gKw0KPiArRUZJX1NUQVRVUw0KPiArRUZJQVBJDQo+ICtTZXRVc2JSbmRp c01jYXN0RmlsdGVyICgNCj4gKyAgSU4gRURLSUlfVVNCX0VUSEVSTkVUX1BST1RPQ09MICAqVGhp cywNCj4gKyAgSU4gVUlOVDE2ICAgICAgICAgICAgICAgICAgICAgICBWYWx1ZSwNCj4gKyAgSU4g Vk9JRCAgICAgICAgICAgICAgICAgICAgICAgICAqTWNhc3RBZGRyDQo+ICsgICk7DQo+ICsNCj4g K0VGSV9TVEFUVVMNCj4gK0VGSUFQSQ0KPiArU2V0VXNiUm5kaXNQb3dlckZpbHRlciAoDQo+ICsg IElOIEVES0lJX1VTQl9FVEhFUk5FVF9QUk9UT0NPTCAgKlRoaXMsDQo+ICsgIElOIFVJTlQxNiAg ICAgICAgICAgICAgICAgICAgICAgVmFsdWUsDQo+ICsgIElOIFVJTlQxNiAgICAgICAgICAgICAg ICAgICAgICAgTGVuZ3RoLA0KPiArICBJTiBWT0lEICAgICAgICAgICAgICAgICAgICAgICAgICpQ YXR0ZXJuRmlsdGVyDQo+ICsgICk7DQo+ICsNCj4gK0VGSV9TVEFUVVMNCj4gK0VGSUFQSQ0KPiAr R2V0VXNiUm5kaXNQb3dlckZpbHRlciAoDQo+ICsgIElOIEVES0lJX1VTQl9FVEhFUk5FVF9QUk9U T0NPTCAgKlRoaXMsDQo+ICsgIElOIFVJTlQxNiAgICAgICAgICAgICAgICAgICAgICAgVmFsdWUs DQo+ICsgIElOIEJPT0xFQU4gICAgICAgICAgICAgICAgICAgICAgKlBhdHRlcm5BY3RpdmUNCj4g KyAgKTsNCj4gKw0KPiArRUZJX1NUQVRVUw0KPiArRUZJQVBJDQo+ICtTZXRVc2JSbmRpc1BhY2tl dEZpbHRlciAoDQo+ICsgIElOIEVES0lJX1VTQl9FVEhFUk5FVF9QUk9UT0NPTCAgKlRoaXMsDQo+ ICsgIElOIFVJTlQxNiAgICAgICAgICAgICAgICAgICAgICAgVmFsdWUNCj4gKyAgKTsNCj4gKw0K PiArRUZJX1NUQVRVUw0KPiArRUZJQVBJDQo+ICtHZXRSbmRpc1N0YXRpc3RpYyAoDQo+ICsgIElO IEVES0lJX1VTQl9FVEhFUk5FVF9QUk9UT0NPTCAgKlRoaXMsDQo+ICsgIElOIFVJTlQxNiAgICAg ICAgICAgICAgICAgICAgICAgVmFsdWUsDQo+ICsgIElOIFZPSUQgICAgICAgICAgICAgICAgICAg ICAgICAgKlN0YXRpc3RpYw0KPiArICApOw0KPiArDQo+ICtFRklfU1RBVFVTDQo+ICtTZW5kUm5k aXNTZXRNc2cgKA0KPiArICBJTiAgVVNCX1JORElTX0RFVklDRSAgKlVzYlJuZGlzRGV2aWNlLA0K PiArICBVSU5UOCAgICAgICAgICAgICAgICAgT2lkLA0KPiArICBVSU5UMzIgICAgICAgICAgICAg ICAgTGVuZ3RoLA0KPiArICBVSU5UOCAgICAgICAgICAgICAgICAgKkJ1Zg0KPiArICApOw0KPiAr DQo+ICtFRklfU1RBVFVTDQo+ICtSbmRpc0NvbnRyb2xNc2cgKA0KPiArICBJTiAgVVNCX1JORElT X0RFVklDRSAgICAgICAgKlVzYlJuZGlzRGV2aWNlLA0KPiArICBJTiAgUkVNT1RFX05ESVNfTVNH X0hFQURFUiAgKlJuZGlzTXNnLA0KPiArICBPVVQgUkVNT1RFX05ESVNfTVNHX0hFQURFUiAgKlJu ZGlzTXNnUmVzcG9uc2UNCj4gKyAgKTsNCj4gKw0KPiArRUZJX1NUQVRVUw0KPiArUm5kaXNUcmFu c21pdERhdGFNc2cgKA0KPiArICBJTiAgVVNCX1JORElTX0RFVklDRSAgICAgICAgKlVzYlJuZGlz RGV2aWNlLA0KPiArICBJTiAgUkVNT1RFX05ESVNfTVNHX0hFQURFUiAgKlJuZGlzTXNnLA0KPiAr ICBVSU5UTiAgICAgICAgICAgICAgICAgICAgICAgKlRyYW5zZmVyTGVuZ3RoDQo+ICsgICk7DQo+ ICsNCj4gK0VGSV9TVEFUVVMNCj4gK1JuZGlzUmVjZWl2ZURhdGFNc2cgKA0KPiArICBJTiAgVVNC X1JORElTX0RFVklDRSAgICAgICAgKlVzYlJuZGlzRGV2aWNlLA0KPiArICBJTiAgUkVNT1RFX05E SVNfTVNHX0hFQURFUiAgKlJuZGlzTXNnLA0KPiArICBVSU5UTiAgICAgICAgICAgICAgICAgICAg ICAgKlRyYW5zZmVyTGVuZ3RoDQo+ICsgICk7DQo+ICsNCj4gK1ZPSUQNCj4gK1ByaW50Um5kaXNN c2cgKA0KPiArICBJTiAgUkVNT1RFX05ESVNfTVNHX0hFQURFUiAgKlJuZGlzTXNnDQo+ICsgICk7 DQo+ICsNCj4gKyNkZWZpbmUgUk5ESVNfTUFKT1JfVkVSU0lPTiAgICAgIDB4MDAwMDAwMDENCj4g KyNkZWZpbmUgUk5ESVNfTUlOT1JfVkVSU0lPTiAgICAgIDB4MDAwMDAwMDANCj4gKyNkZWZpbmUg Uk5ESVNfTUFYX1RSQU5TRkVSX1NJWkUgIDB4NDAwMA0KPiArDQo+ICsjZGVmaW5lIFJORElTX1BB Q0tFVF9NU0cgICAgICAgICAgIDB4MDAwMDAwMDENCj4gKyNkZWZpbmUgUk5ESVNfSU5JVElBTEla RV9NU0cgICAgICAgMHgwMDAwMDAwMg0KPiArI2RlZmluZSBSTkRJU19JTklUSUFMSVpFX0NNUExU ICAgICAweDgwMDAwMDAyDQo+ICsjZGVmaW5lIFJORElTX0hMVF9NU0cgICAgICAgICAgICAgIDB4 MDAwMDAwMDMNCj4gKyNkZWZpbmUgUk5ESVNfUVVFUllfTVNHICAgICAgICAgICAgMHgwMDAwMDAw NA0KPiArI2RlZmluZSBSTkRJU19RVUVSWV9DTVBMVCAgICAgICAgICAweDgwMDAwMDA0DQo+ICsj ZGVmaW5lIFJORElTX1NFVF9NU0cgICAgICAgICAgICAgIDB4MDAwMDAwMDUNCj4gKyNkZWZpbmUg Uk5ESVNfU0VUX0NNUExUICAgICAgICAgICAgMHg4MDAwMDAwNQ0KPiArI2RlZmluZSBSTkRJU19S RVNFVF9NU0cgICAgICAgICAgICAweDAwMDAwMDA2DQo+ICsjZGVmaW5lIFJORElTX1JFU0VUX0NN UExUICAgICAgICAgIDB4ODAwMDAwMDYNCj4gKyNkZWZpbmUgUk5ESVNfSU5ESUNBVEVfU1RBVFVT X01TRyAgMHgwMDAwMDAwNw0KPiArI2RlZmluZSBSTkRJU19LRUVQQUxJVkVfTVNHICAgICAgICAw eDAwMDAwMDA4DQo+ICsjZGVmaW5lIFJORElTX0tFRVBBTElWRV9DTVBMVCAgICAgIDB4ODAwMDAw MDgNCj4gKw0KPiArI2RlZmluZSBSTkRJU19TVEFUVVNfU1VDQ0VTUyAgICAgICAgICAgMHgwMDAw MDAwMA0KPiArI2RlZmluZSBSTkRJU19TVEFUVVNfRkFJTFVSRSAgICAgICAgICAgMHhDMDAwMDAw MQ0KPiArI2RlZmluZSBSTkRJU19TVEFUVVNfSU5WQUxJRF9EQVRBICAgICAgMHhDMDAxMDAxNQ0K PiArI2RlZmluZSBSTkRJU19TVEFUVVNfTk9UX1NVUFBPUlRFRCAgICAgMHhDMDAwMDBCQg0KPiAr I2RlZmluZSBSTkRJU19TVEFUVVNfTUVESUFfQ09OTkVDVCAgICAgMHg0MDAxMDAwQg0KPiArI2Rl ZmluZSBSTkRJU19TVEFUVVNfTUVESUFfRElTQ09OTkVDVCAgMHg0MDAxMDAwQw0KPiArDQo+ICsj ZGVmaW5lIFJORElTX0NPTlRST0xfVElNRU9VVCAgICAxMDAwMCAgICAgICAgICAgIC8vIDEwc2Vj DQo+ICsjZGVmaW5lIFJORElTX0tFRVBBTElWRV9USU1FT1VUICA1MDAwICAgICAgICAgICAgIC8v IDVzZWMNCj4gKw0KPiArI2RlZmluZSBTRU5EX0VOQ0FQU1VMQVRFRF9DT01NQU5EICAweDAwMDAw MDAwDQo+ICsjZGVmaW5lIEdFVF9FTkNBUFNVTEFURURfUkVTUE9OU0UgIDB4MDAwMDAwMDENCj4g Kw0KPiArLy8NCj4gKy8vIEdlbmVyYWwgT2JqZWN0cw0KPiArLy8NCj4gKy8vIFRha2VuIGZyb20g TlRERE5ESVMuSA0KPiArI2RlZmluZSBPSURfR0VOX1NVUFBPUlRFRF9MSVNUICAgICAgICAgMHgw MDAxMDEwMQ0KPiArI2RlZmluZSBPSURfR0VOX0hBUkRXQVJFX1NUQVRVUyAgICAgICAgMHgwMDAx MDEwMg0KPiArI2RlZmluZSBPSURfR0VOX01FRElBX1NVUFBPUlRFRCAgICAgICAgMHgwMDAxMDEw Mw0KPiArI2RlZmluZSBPSURfR0VOX01FRElBX0lOX1VTRSAgICAgICAgICAgMHgwMDAxMDEwNA0K PiArI2RlZmluZSBPSURfR0VOX01BWElNVU1fTE9PS0FIRUFEICAgICAgMHgwMDAxMDEwNQ0KPiAr I2RlZmluZSBPSURfR0VOX01BWElNVU1fRlJBTUVfU0laRSAgICAgMHgwMDAxMDEwNg0KPiArI2Rl ZmluZSBPSURfR0VOX0xJTktfU1BFRUQgICAgICAgICAgICAgMHgwMDAxMDEwNw0KPiArI2RlZmlu ZSBPSURfR0VOX1RSQU5TTUlUX0JVRkZFUl9TUEFDRSAgMHgwMDAxMDEwOA0KPiArI2RlZmluZSBP SURfR0VOX1JFQ0VJVkVfQlVGRkVSX1NQQUNFICAgMHgwMDAxMDEwOQ0KPiArI2RlZmluZSBPSURf R0VOX1RSQU5TTUlUX0JMT0NLX1NJWkUgICAgMHgwMDAxMDEwQQ0KPiArI2RlZmluZSBPSURfR0VO X1JFQ0VJVkVfQkxPQ0tfU0laRSAgICAgMHgwMDAxMDEwQg0KPiArI2RlZmluZSBPSURfR0VOX1ZF TkRPUl9JRCAgICAgICAgICAgICAgMHgwMDAxMDEwQw0KPiArI2RlZmluZSBPSURfR0VOX1ZFTkRP Ul9ERVNDUklQVElPTiAgICAgMHgwMDAxMDEwRA0KPiArI2RlZmluZSBPSURfR0VOX0NVUlJFTlRf UEFDS0VUX0ZJTFRFUiAgMHgwMDAxMDEwRQ0KPiArI2RlZmluZSBPSURfR0VOX0NVUlJFTlRfTE9P S0FIRUFEICAgICAgMHgwMDAxMDEwRg0KPiArI2RlZmluZSBPSURfR0VOX0RSSVZFUl9WRVJTSU9O ICAgICAgICAgMHgwMDAxMDExMA0KPiArI2RlZmluZSBPSURfR0VOX01BWElNVU1fVE9UQUxfU0la RSAgICAgMHgwMDAxMDExMQ0KPiArI2RlZmluZSBPSURfR0VOX1BST1RPQ09MX09QVElPTlMgICAg ICAgMHgwMDAxMDExMg0KPiArI2RlZmluZSBPSURfR0VOX01BQ19PUFRJT05TICAgICAgICAgICAg MHgwMDAxMDExMw0KPiArI2RlZmluZSBPSURfR0VOX01FRElBX0NPTk5FQ1RfU1RBVFVTICAgMHgw MDAxMDExNA0KPiArI2RlZmluZSBPSURfR0VOX01BWElNVU1fU0VORF9QQUNLRVRTICAgMHgwMDAx MDExNQ0KPiArI2RlZmluZSBPSURfR0VOX1ZFTkRPUl9EUklWRVJfVkVSU0lPTiAgMHgwMDAxMDEx Ng0KPiArDQo+ICsjZGVmaW5lIE9JRF9HRU5fWE1JVF9PSyAgICAgICAgMHgwMDAyMDEwMQ0KPiAr I2RlZmluZSBPSURfR0VOX1JDVl9PSyAgICAgICAgIDB4MDAwMjAxMDINCj4gKyNkZWZpbmUgT0lE X0dFTl9YTUlUX0VSUk9SICAgICAweDAwMDIwMTAzDQo+ICsjZGVmaW5lIE9JRF9HRU5fUkNWX0VS Uk9SICAgICAgMHgwMDAyMDEwNA0KPiArI2RlZmluZSBPSURfR0VOX1JDVl9OT19CVUZGRVIgIDB4 MDAwMjAxMDUNCj4gKw0KPiArI2RlZmluZSBPSURfR0VOX0RJUkVDVEVEX0JZVEVTX1hNSVQgICAg MHgwMDAyMDIwMQ0KPiArI2RlZmluZSBPSURfR0VOX0RJUkVDVEVEX0ZSQU1FU19YTUlUICAgMHgw MDAyMDIwMg0KPiArI2RlZmluZSBPSURfR0VOX01VTFRJQ0FTVF9CWVRFU19YTUlUICAgMHgwMDAy MDIwMw0KPiArI2RlZmluZSBPSURfR0VOX01VTFRJQ0FTVF9GUkFNRVNfWE1JVCAgMHgwMDAyMDIw NA0KPiArI2RlZmluZSBPSURfR0VOX0JST0FEQ0FTVF9CWVRFU19YTUlUICAgMHgwMDAyMDIwNQ0K PiArI2RlZmluZSBPSURfR0VOX0JST0FEQ0FTVF9GUkFNRVNfWE1JVCAgMHgwMDAyMDIwNg0KPiAr I2RlZmluZSBPSURfR0VOX0RJUkVDVEVEX0JZVEVTX1JDViAgICAgMHgwMDAyMDIwNw0KPiArI2Rl ZmluZSBPSURfR0VOX0RJUkVDVEVEX0ZSQU1FU19SQ1YgICAgMHgwMDAyMDIwOA0KPiArI2RlZmlu ZSBPSURfR0VOX01VTFRJQ0FTVF9CWVRFU19SQ1YgICAgMHgwMDAyMDIwOQ0KPiArI2RlZmluZSBP SURfR0VOX01VTFRJQ0FTVF9GUkFNRVNfUkNWICAgMHgwMDAyMDIwQQ0KPiArI2RlZmluZSBPSURf R0VOX0JST0FEQ0FTVF9CWVRFU19SQ1YgICAgMHgwMDAyMDIwQg0KPiArI2RlZmluZSBPSURfR0VO X0JST0FEQ0FTVF9GUkFNRVNfUkNWICAgMHgwMDAyMDIwQw0KPiArI2RlZmluZSBPSURfR0VOX1JD Vl9DUkNfRVJST1IgICAgICAgICAgMHgwMDAyMDIwRA0KPiArI2RlZmluZSBPSURfR0VOX1RSQU5T TUlUX1FVRVVFX0xFTkdUSCAgMHgwMDAyMDIwRQ0KPiArDQo+ICsvLw0KPiArLy8gTmRpcyBQYWNr ZXQgRmlsdGVyIEJpdHMgKE9JRF9HRU5fQ1VSUkVOVF9QQUNLRVRfRklMVEVSKS4NCj4gKy8vDQo+ ICsjZGVmaW5lIE5ESVNfUEFDS0VUX1RZUEVfRElSRUNURUQgICAgICAgIDB4MDAwMQ0KPiArI2Rl ZmluZSBORElTX1BBQ0tFVF9UWVBFX01VTFRJQ0FTVCAgICAgICAweDAwMDINCj4gKyNkZWZpbmUg TkRJU19QQUNLRVRfVFlQRV9BTExfTVVMVElDQVNUICAgMHgwMDA0DQo+ICsjZGVmaW5lIE5ESVNf UEFDS0VUX1RZUEVfQlJPQURDQVNUICAgICAgIDB4MDAwOA0KPiArI2RlZmluZSBORElTX1BBQ0tF VF9UWVBFX1NPVVJDRV9ST1VUSU5HICAweDAwMTANCj4gKyNkZWZpbmUgTkRJU19QQUNLRVRfVFlQ RV9QUk9NSVNDVU9VUyAgICAgMHgwMDIwDQo+ICsjZGVmaW5lIE5ESVNfUEFDS0VUX1RZUEVfU01U ICAgICAgICAgICAgIDB4MDA0MA0KPiArI2RlZmluZSBORElTX1BBQ0tFVF9UWVBFX0FMTF9MT0NB TCAgICAgICAweDAwODANCj4gKyNkZWZpbmUgTkRJU19QQUNLRVRfVFlQRV9NQUNfRlJBTUUgICAg ICAgMHg4MDAwDQo+ICsjZGVmaW5lIE5ESVNfUEFDS0VUX1RZUEVfRlVOQ1RJT05BTCAgICAgIDB4 NDAwMA0KPiArI2RlZmluZSBORElTX1BBQ0tFVF9UWVBFX0FMTF9GVU5DVElPTkFMICAweDIwMDAN Cj4gKyNkZWZpbmUgTkRJU19QQUNLRVRfVFlQRV9HUk9VUCAgICAgICAgICAgMHgxMDAwDQo+ICsN Cj4gKyNwcmFnbWEgcGFjaygxKQ0KPiArDQo+ICt0eXBlZGVmIHN0cnVjdCBfUkVNT1RFX05ESVNf TVNHX0hFQURFUiB7DQo+ICsgIFVJTlQzMiAgICBNZXNzYWdlVHlwZTsNCj4gKyAgVUlOVDMyICAg IE1lc3NhZ2VMZW5ndGg7DQo+ICt9IFJFTU9URV9ORElTX01TR19IRUFERVI7DQo+ICsNCj4gK3R5 cGVkZWYgc3RydWN0IHsNCj4gKyAgVUlOVDMyICAgIE1lc3NhZ2VUeXBlOw0KPiArICBVSU5UMzIg ICAgTWVzc2FnZUxlbmd0aDsNCj4gKyAgVUlOVDMyICAgIFJlcXVlc3RJRDsNCj4gKyAgVUlOVDMy ICAgIE1ham9yVmVyc2lvbjsNCj4gKyAgVUlOVDMyICAgIE1pbm9yVmVyc2lvbjsNCj4gKyAgVUlO VDMyICAgIE1heFRyYW5zZmVyU2l6ZTsNCj4gK30gUkVNT1RFX05ESVNfSU5JVElBTElaRV9NU0c7 DQo+ICsNCj4gK3R5cGVkZWYgc3RydWN0IHsNCj4gKyAgVUlOVDMyICAgIE1lc3NhZ2VUeXBlOw0K PiArICBVSU5UMzIgICAgTWVzc2FnZUxlbmd0aDsNCj4gKyAgVUlOVDMyICAgIFJlcXVlc3RJRDsN Cj4gK30gUkVNT1RFX05ESVNfSEFMVF9NU0c7DQo+ICsNCj4gK3R5cGVkZWYgc3RydWN0IHsNCj4g KyAgVUlOVDMyICAgIE1lc3NhZ2VUeXBlOw0KPiArICBVSU5UMzIgICAgTWVzc2FnZUxlbmd0aDsN Cj4gKyAgVUlOVDMyICAgIFJlcXVlc3RJRDsNCj4gKyAgVUlOVDMyICAgIE9pZDsNCj4gKyAgVUlO VDMyICAgIEluZm9ybWF0aW9uQnVmZmVyTGVuZ3RoOw0KPiArICBVSU5UMzIgICAgSW5mb3JtYXRp b25CdWZmZXJPZmZzZXQ7DQo+ICsgIFVJTlQzMiAgICBSZXNlcnZlZDsNCj4gK30gUkVNT1RFX05E SVNfUVVFUllfTVNHOw0KPiArDQo+ICt0eXBlZGVmIHN0cnVjdCB7DQo+ICsgIFVJTlQzMiAgICBN ZXNzYWdlVHlwZTsNCj4gKyAgVUlOVDMyICAgIE1lc3NhZ2VMZW5ndGg7DQo+ICsgIFVJTlQzMiAg ICBSZXF1ZXN0SUQ7DQo+ICsgIFVJTlQzMiAgICBPaWQ7DQo+ICsgIFVJTlQzMiAgICBJbmZvcm1h dGlvbkJ1ZmZlckxlbmd0aDsNCj4gKyAgVUlOVDMyICAgIEluZm9ybWF0aW9uQnVmZmVyT2Zmc2V0 Ow0KPiArICBVSU5UMzIgICAgUmVzZXJ2ZWQ7DQo+ICt9IFJFTU9URV9ORElTX1NFVF9NU0c7DQo+ ICsNCj4gK3R5cGVkZWYgc3RydWN0IHsNCj4gKyAgVUlOVDMyICAgIE1lc3NhZ2VUeXBlOw0KPiAr ICBVSU5UMzIgICAgTWVzc2FnZUxlbmd0aDsNCj4gKyAgVUlOVDMyICAgIFJlc2VydmVkOw0KPiAr fSBSRU1PVEVfTkRJU19SRVNFVF9NU0c7DQo+ICsNCj4gK3R5cGVkZWYgc3RydWN0IHsNCj4gKyAg VUlOVDMyICAgIE1lc3NhZ2VUeXBlOw0KPiArICBVSU5UMzIgICAgTWVzc2FnZUxlbmd0aDsNCj4g KyAgVUlOVDMyICAgIFN0YXR1czsNCj4gKyAgVUlOVDMyICAgIFN0YXR1c0J1ZmZlckxlbmd0aDsN Cj4gKyAgVUlOVDMyICAgIFN0YXR1c0J1ZmZlck9mZnNldDsNCj4gK30gUkVNT1RFX05ESVNfSU5E SUNBVEVfU1RBVFVTX01TRzsNCj4gKw0KPiArdHlwZWRlZiBzdHJ1Y3Qgew0KPiArICBVSU5UMzIg ICAgRGlhZ1N0YXR1czsNCj4gKyAgVUlOVDMyICAgIEVycm9yT2Zmc2V0Ow0KPiArfSBSTkRJU19E SUFHTk9TVElDX0lORk87DQo+ICsNCj4gK3R5cGVkZWYgc3RydWN0IHsNCj4gKyAgVUlOVDMyICAg IE1lc3NhZ2VUeXBlOw0KPiArICBVSU5UMzIgICAgTWVzc2FnZUxlbmd0aDsNCj4gKyAgVUlOVDMy ICAgIFJlcXVlc3RJRDsNCj4gK30gUkVNT1RFX05ESVNfS0VFUEFMSVZFX01TRzsNCj4gKw0KPiAr dHlwZWRlZiBzdHJ1Y3Qgew0KPiArICBVSU5UMzIgICAgTWVzc2FnZVR5cGU7DQo+ICsgIFVJTlQz MiAgICBNZXNzYWdlTGVuZ3RoOw0KPiArICBVSU5UMzIgICAgUmVxdWVzdElEOw0KPiArICBVSU5U MzIgICAgU3RhdHVzOw0KPiArICBVSU5UMzIgICAgTWFqb3JWZXJzaW9uOw0KPiArICBVSU5UMzIg ICAgTWlub3JWZXJzaW9uOw0KPiArICBVSU5UMzIgICAgRGV2aWNlRmxhZ3M7DQo+ICsgIFVJTlQz MiAgICBNZWRpdW07DQo+ICsgIFVJTlQzMiAgICBNYXhQYWNrZXRzUGVyVHJhbnNmZXI7DQo+ICsg IFVJTlQzMiAgICBNYXhUcmFuc2ZlclNpemU7DQo+ICsgIFVJTlQzMiAgICBQYWNrZXRBbGlnbm1l bnRGYWN0b3I7DQo+ICsgIFVJTlQ2NCAgICBSZXNlcnZlZDsNCj4gK30gUkVNT1RFX05ESVNfSU5J VElBTElaRV9DTVBMVDsNCj4gKw0KPiArdHlwZWRlZiBzdHJ1Y3Qgew0KPiArICBVSU5UMzIgICAg TWVzc2FnZVR5cGU7DQo+ICsgIFVJTlQzMiAgICBNZXNzYWdlTGVuZ3RoOw0KPiArICBVSU5UMzIg ICAgUmVxdWVzdElEOw0KPiArICBVSU5UMzIgICAgU3RhdHVzOw0KPiArICBVSU5UMzIgICAgSW5m b3JtYXRpb25CdWZmZXJMZW5ndGg7DQo+ICsgIFVJTlQzMiAgICBJbmZvcm1hdGlvbkJ1ZmZlck9m ZnNldDsNCj4gK30gUkVNT1RFX05ESVNfUVVFUllfQ01QTFQ7DQo+ICsNCj4gK3R5cGVkZWYgc3Ry dWN0IHsNCj4gKyAgVUlOVDMyICAgIE1lc3NhZ2VUeXBlOw0KPiArICBVSU5UMzIgICAgTWVzc2Fn ZUxlbmd0aDsNCj4gKyAgVUlOVDMyICAgIFJlcXVlc3RJRDsNCj4gKyAgVUlOVDMyICAgIFN0YXR1 czsNCj4gK30gUkVNT1RFX05ESVNfU0VUX0NNUExUOw0KPiArDQo+ICt0eXBlZGVmIHN0cnVjdCB7 DQo+ICsgIFVJTlQzMiAgICBNZXNzYWdlVHlwZTsNCj4gKyAgVUlOVDMyICAgIE1lc3NhZ2VMZW5n dGg7DQo+ICsgIFVJTlQzMiAgICBTdGF0dXM7DQo+ICsgIFVJTlQzMiAgICBBZGRyZXNzaW5nUmVz ZXQ7DQo+ICt9IFJFTU9URV9ORElTX1JFU0VUX0NNUExUOw0KPiArDQo+ICt0eXBlZGVmIHN0cnVj dCB7DQo+ICsgIFVJTlQzMiAgICBNZXNzYWdlVHlwZTsNCj4gKyAgVUlOVDMyICAgIE1lc3NhZ2VM ZW5ndGg7DQo+ICsgIFVJTlQzMiAgICBSZXF1ZXN0SUQ7DQo+ICsgIFVJTlQzMiAgICBTdGF0dXM7 DQo+ICt9IFJFTU9URV9ORElTX0tFRVBBTElWRV9DTVBMVDsNCj4gKw0KPiArdHlwZWRlZiBzdHJ1 Y3Qgew0KPiArICBVSU5UMzIgICAgTWVzc2FnZVR5cGU7DQo+ICsgIFVJTlQzMiAgICBNZXNzYWdl TGVuZ3RoOw0KPiArICBVSU5UMzIgICAgRGF0YU9mZnNldDsNCj4gKyAgVUlOVDMyICAgIERhdGFM ZW5ndGg7DQo+ICsgIFVJTlQzMiAgICBPdXRPZkJhbmREYXRhT2Zmc2V0Ow0KPiArICBVSU5UMzIg ICAgT3V0T2ZCYW5kRGF0YUxlbmd0aDsNCj4gKyAgVUlOVDMyICAgIE51bU91dE9mQmFuZERhdGFF bGVtZW50czsNCj4gKyAgVUlOVDMyICAgIFBlclBhY2tldEluZm9PZmZzZXQ7DQo+ICsgIFVJTlQz MiAgICBQZXJQYWNrZXRJbmZvTGVuZ3RoOw0KPiArICBVSU5UMzIgICAgUmVzZXJ2ZWQxOw0KPiAr ICBVSU5UMzIgICAgUmVzZXJ2ZWQyOw0KPiArfSBSRU1PVEVfTkRJU19QQUNLRVRfTVNHOw0KPiAr DQo+ICt0eXBlZGVmIHN0cnVjdCB7DQo+ICsgIFVJTlQzMiAgICBTaXplOw0KPiArICBVSU5UMzIg ICAgVHlwZTsNCj4gKyAgVUlOVDMyICAgIENsYXNzSW5mb3JtYXRpb25PZmZzZXQ7DQo+ICt9IE9V VF9PRl9CQU5EX0RBVEFfUkVDT1JEOw0KPiArDQo+ICt0eXBlZGVmIHN0cnVjdCB7DQo+ICsgIFVJ TlQzMiAgICBTaXplOw0KPiArICBVSU5UMzIgICAgVHlwZTsNCj4gKyAgVUlOVDMyICAgIENsYXNz SW5mb3JtYXRpb25PZmZzZXQ7DQo+ICt9IFBFUl9QQUNLRVRfSU5GT19EQVRBX1JFQ09SRDsNCj4g Kw0KPiArdHlwZWRlZiBzdHJ1Y3Qgew0KPiArICBMSVNUX0VOVFJZICAgIFBhY2tldExpc3Q7DQo+ ICsgIFVJTlQ4ICAgICAgICAgKk9yZ0J1ZmZlcjsNCj4gKyAgVUlOVE4gICAgICAgICBSZW1haW5p bmdMZW5ndGg7DQo+ICt9IFBBQ0tFVF9MSVNUOw0KPiArDQo+ICsjcHJhZ21hIHBhY2soKQ0KPiAr DQo+ICsjZW5kaWYNCj4gZGlmZiAtLWdpdCBhL1VzYk5ldHdvcmtQa2cvVXNiUm5kaXMvVXNiUm5k aXMuaW5mDQo+IGIvVXNiTmV0d29ya1BrZy9Vc2JSbmRpcy9Vc2JSbmRpcy5pbmYNCj4gbmV3IGZp bGUgbW9kZSAxMDA2NDQNCj4gaW5kZXggMDAwMDAwMDAwMC4uNGMyOTYxZjFmNA0KPiAtLS0gL2Rl di9udWxsDQo+ICsrKyBiL1VzYk5ldHdvcmtQa2cvVXNiUm5kaXMvVXNiUm5kaXMuaW5mDQo+IEBA IC0wLDAgKzEsNDIgQEANCj4gKyMjIEBmaWxlDQo+ICsjICAgVGhpcyBpcyBVc2IgUm5kaXMgZHJp dmVyIGZvciBEWEUgcGhhc2UuDQo+ICsjDQo+ICsjIENvcHlyaWdodCAoYykgMjAyMiwgQW1lcmlj YW4gTWVnYXRyZW5kcyBJbnRlcm5hdGlvbmFsIExMQy4gQWxsIHJpZ2h0cw0KPiByZXNlcnZlZC48 QlI+DQo+ICsjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBCU0QtMi1DbGF1c2UtUGF0ZW50DQo+ ICsjIw0KPiArDQo+ICtbRGVmaW5lc10NCj4gKyAgSU5GX1ZFUlNJT04gICAgICAgICAgICAgICAg ICAgID0gMHgwMDAxMDAwNQ0KPiArICBCQVNFX05BTUUgICAgICAgICAgICAgICAgICAgICAgPSBV c2JSbmRpcw0KPiArICBGSUxFX0dVSUQgICAgICAgICAgICAgICAgICAgICAgPSAxMUUzMkMzNC02 MEI1LTQ5OTEtOERFQS02M0QzRThDODc2REUNCj4gKyAgTU9EVUxFX1RZUEUgICAgICAgICAgICAg ICAgICAgID0gRFhFX0RSSVZFUg0KPiArICBWRVJTSU9OX1NUUklORyAgICAgICAgICAgICAgICAg PSAxLjANCj4gKyAgRU5UUllfUE9JTlQgICAgICAgICAgICAgICAgICAgID0gVXNiUm5kaXNFbnRy eQ0KPiArDQo+ICtbU291cmNlc10NCj4gKyAgVXNiUm5kaXMuYw0KPiArICBVc2JSbmRpcy5oDQo+ ICsgIFVzYlJuZGlzRnVuY3Rpb24uYw0KPiArICBDb21wb25lbnROYW1lLmMNCj4gKw0KPiArW1Bh Y2thZ2VzXQ0KPiArICBNZGVQa2cvTWRlUGtnLmRlYw0KPiArICBVc2JOZXR3b3JrUGtnL1VzYk5l dHdvcmtQa2cuZGVjDQo+ICsNCj4gK1tMaWJyYXJ5Q2xhc3Nlc10NCj4gKyAgVWVmaURyaXZlckVu dHJ5UG9pbnQNCj4gKyAgVWVmaUJvb3RTZXJ2aWNlc1RhYmxlTGliDQo+ICsgIFVlZmlMaWINCj4g KyAgRGVidWdMaWINCj4gKyAgVWVmaVVzYkxpYg0KPiArICBNZW1vcnlBbGxvY2F0aW9uTGliDQo+ ICsgIEJhc2VNZW1vcnlMaWINCj4gKw0KPiArW1Byb3RvY29sc10NCj4gKyAgZ0VmaVVzYklvUHJv dG9jb2xHdWlkDQo+ICsgIGdFZmlEZXZpY2VQYXRoUHJvdG9jb2xHdWlkDQo+ICsgIGdFZmlEcml2 ZXJCaW5kaW5nUHJvdG9jb2xHdWlkDQo+ICsgIGdFZGtJSVVzYkV0aFByb3RvY29sR3VpZA0KPiAr DQo+ICtbRGVwZXhdDQo+ICsgIFRSVUUNCj4gZGlmZiAtLWdpdCBhL1VzYk5ldHdvcmtQa2cvVXNi Um5kaXMvVXNiUm5kaXNGdW5jdGlvbi5jDQo+IGIvVXNiTmV0d29ya1BrZy9Vc2JSbmRpcy9Vc2JS bmRpc0Z1bmN0aW9uLmMNCj4gbmV3IGZpbGUgbW9kZSAxMDA2NDQNCj4gaW5kZXggMDAwMDAwMDAw MC4uNWRiOTViMjg0Yw0KPiAtLS0gL2Rldi9udWxsDQo+ICsrKyBiL1VzYk5ldHdvcmtQa2cvVXNi Um5kaXMvVXNiUm5kaXNGdW5jdGlvbi5jDQo+IEBAIC0wLDAgKzEsMTU5MSBAQA0KPiArLyoqIEBm aWxlDQo+ICsgIFRoaXMgZmlsZSBjb250YWlucyBjb2RlIGZvciBVU0IgRXRoZXJuZXQgZGVzY3Jp cHRvcg0KPiArICBhbmQgc3BlY2lmaWMgcmVxdWVzdHMgaW1wbGVtZW50Lg0KPiArDQo+ICsgIENv cHlyaWdodCAoYykgMjAyMiwgQW1lcmljYW4gTWVnYXRyZW5kcyBJbnRlcm5hdGlvbmFsIExMQy4g QWxsIHJpZ2h0cw0KPiByZXNlcnZlZC48QlI+DQo+ICsgIFNQRFgtTGljZW5zZS1JZGVudGlmaWVy OiBCU0QtMi1DbGF1c2UtUGF0ZW50DQo+ICsqKi8NCj4gKw0KPiArI2luY2x1ZGUgIlVzYlJuZGlz LmgiDQo+ICsNCj4gK1VJTlQxNiAgU3RvcEJ1bGtJbkNudCAgPSAwOw0KPiArVUlOVDE2ICBCbG9j a0J1bGtJbkNudCA9IDA7DQo+ICsNCj4gKy8qKg0KPiArICBMb2FkIEFsbCBvZiBkZXZpY2UgZGVz Y3JpcHRvci4NCj4gKw0KPiArICBAcGFyYW1baW5dICBVc2JJbyAgICAgICAgICAgICAgICAgQSBw b2ludGVyIHRvIHRoZSBFRklfVVNCX0lPX1BST1RPQ09MDQo+IGluc3RhbmNlLg0KPiArICBAcGFy YW1bb3V0XSBDb25maWdEZXNjICAgICAgICAgICAgQSBwb2ludGVyIHRvIHRoZSBjb25maWd1cmF0 aW9uIGRlc2NyaXB0b3IuDQo+ICsNCj4gKyAgQHJldHZhbCBFRklfU1VDQ0VTUyAgICAgICAgICAg VGhlIHJlcXVlc3QgZXhlY3V0ZWQgc3VjY2Vzc2Z1bGx5Lg0KPiArICBAcmV0dmFsIEVGSV9PVVRf T0ZfUkVTT1VSQ0VTICBUaGUgcmVxdWVzdCBjb3VsZCBub3QgYmUgY29tcGxldGVkDQo+IGJlY2F1 c2UgdGhlDQo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJ1ZmZlciBzcGVjaWZp ZWQgYnkgRGVzY3JpcHRvckxlbmd0aCBhbmQgRGVzY3JpcHRvcg0KPiArICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBpcyBub3QgbGFyZ2UgZW5vdWdoIHRvIGhvbGQgdGhlIHJlc3VsdCBv ZiB0aGUgcmVxdWVzdC4NCj4gKyAgQHJldHZhbCBFRklfVElNRU9VVCAgICAgICAgICAgQSB0aW1l b3V0IG9jY3VycmVkIGV4ZWN1dGluZyB0aGUgcmVxdWVzdC4NCj4gKyAgQHJldHZhbCBFRklfREVW SUNFX0VSUk9SICAgICAgVGhlIHJlcXVlc3QgZmFpbGVkIGR1ZSB0byBhIGRldmljZSBlcnJvci4N Cj4gVGhlIHRyYW5zZmVyDQo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXR1 cyBpcyByZXR1cm5lZCBpbiBTdGF0dXMuDQo+ICsqKi8NCj4gK0VGSV9TVEFUVVMNCj4gK0xvYWRB bGxEZXNjcmlwdG9yICgNCj4gKyAgSU4gIEVGSV9VU0JfSU9fUFJPVE9DT0wgICAgICAgICpVc2JJ bywNCj4gKyAgT1VUIEVGSV9VU0JfQ09ORklHX0RFU0NSSVBUT1IgICoqQ29uZmlnRGVzYw0KPiAr ICApDQo+ICt7DQo+ICsgIEVGSV9TVEFUVVMgICAgICAgICAgICAgICAgIFN0YXR1czsNCj4gKyAg VUlOVDMyICAgICAgICAgICAgICAgICAgICAgVHJhbnNTdGF0dXM7DQo+ICsgIEVGSV9VU0JfQ09O RklHX0RFU0NSSVBUT1IgIFRtcDsNCj4gKw0KPiArICBTdGF0dXMgPSBVc2JJby0+VXNiR2V0Q29u ZmlnRGVzY3JpcHRvciAoVXNiSW8sICZUbXApOw0KPiArICBBU1NFUlRfRUZJX0VSUk9SIChTdGF0 dXMpOw0KPiArDQo+ICsgIFN0YXR1cyA9IGdCUy0+QWxsb2NhdGVQb29sICgNCj4gKyAgICAgICAg ICAgICAgICAgIEVmaUJvb3RTZXJ2aWNlc0RhdGEsDQo+ICsgICAgICAgICAgICAgICAgICBUbXAu VG90YWxMZW5ndGgsDQo+ICsgICAgICAgICAgICAgICAgICAoVk9JRCAqKilDb25maWdEZXNjDQo+ ICsgICAgICAgICAgICAgICAgICApOw0KPiArICBBU1NFUlRfRUZJX0VSUk9SIChTdGF0dXMpOw0K PiArDQo+ICsgIFN0YXR1cyA9IFVzYkdldERlc2NyaXB0b3IgKA0KPiArICAgICAgICAgICAgIFVz YklvLA0KPiArICAgICAgICAgICAgIFVTQl9ERVNDX1RZUEVfQ09ORklHIDw8IDggfCAoVG1wLkNv bmZpZ3VyYXRpb25WYWx1ZSAtIDEpLA0KPiAvLyB6ZXJvIGJhc2VkDQo+ICsgICAgICAgICAgICAg MCwNCj4gKyAgICAgICAgICAgICBUbXAuVG90YWxMZW5ndGgsDQo+ICsgICAgICAgICAgICAgKkNv bmZpZ0Rlc2MsDQo+ICsgICAgICAgICAgICAgJlRyYW5zU3RhdHVzDQo+ICsgICAgICAgICAgICAg KTsNCj4gKyAgcmV0dXJuIFN0YXR1czsNCj4gK30NCj4gKw0KPiArLyoqDQo+ICsgIFJldHVybnMg cG9pbnRlciB0byB0aGUgbmV4dCBkZXNjcmlwdG9yIGZvciB0aGUgcGFjayBvZiBVU0IgZGVzY3Jp cHRvcnMNCj4gKyAgbG9jYXRlZCBpbiBjb250aW51ZXMgbWVtb3J5IHNlZ21lbnQNCj4gKw0KPiAr ICBAcGFyYW1baW5dICAgICAgRGVzYyAgIEEgcG9pbnRlciB0byB0aGUgQ09ORklHX0RFU0NSSVBU T1IgaW5zdGFuY2UuDQo+ICsgIEBwYXJhbVtpbiwgb3V0XSBPZmZzZXQgQSBwb2ludGVyIHRvIHRo ZSBzdW0gb2YgZGVzY3JpcHRvciBsZW5ndGguDQo+ICsNCj4gKyAgQHJldHZhbCBUUlVFICAgVGhl IHJlcXVlc3QgZXhlY3V0ZWQgc3VjY2Vzc2Z1bGx5Lg0KPiArICBAcmV0dmFsIEZBTFNFICBObyBu ZXh0IGRlc2NyaXB0b3IuDQo+ICsNCj4gKyoqLw0KPiArQk9PTEVBTg0KPiArTmV4dERlc2NyaXB0 b3IgKA0KPiArICBJTiAgICAgIEVGSV9VU0JfQ09ORklHX0RFU0NSSVBUT1IgICpEZXNjLA0KPiAr ICBJTiBPVVQgIFVJTlROICAgICAgICAgICAgICAgICAgICAgICpPZmZzZXQNCj4gKyAgKQ0KPiAr ew0KPiArICBpZiAoKERlc2MgPT0gTlVMTCkgfHwgKCpPZmZzZXQgPj0gRGVzYy0+VG90YWxMZW5n dGgpKSB7DQo+ICsgICAgcmV0dXJuIEZBTFNFOw0KPiArICB9DQo+ICsNCj4gKyAgaWYgKCgoRUZJ X1VTQl9DT05GSUdfREVTQ1JJUFRPUiAqKSgoY2hhciAqKURlc2MrKk9mZnNldCkpLT5MZW5ndGgg PT0NCj4gMCkgew0KPiArICAgIHJldHVybiBGQUxTRTsNCj4gKyAgfQ0KPiArDQo+ICsgICpPZmZz ZXQgKz0gKChFRklfVVNCX0NPTkZJR19ERVNDUklQVE9SICopKChjaGFyICopRGVzYysqT2Zmc2V0 KSktDQo+ID5MZW5ndGg7DQo+ICsgIGlmICggKk9mZnNldCA+PSBEZXNjLT5Ub3RhbExlbmd0aCAp IHsNCj4gKyAgICByZXR1cm4gRkFMU0U7DQo+ICsgIH0NCj4gKw0KPiArICByZXR1cm4gVFJVRTsN Cj4gK30NCj4gKw0KPiArLyoqDQo+ICsgIFJlYWQgRnVuY3Rpb24gZGVzY3JpcHRvcg0KPiArDQo+ ICsgIEBwYXJhbVtpbl0gIENvbmZpZyAgICAgICAgICAgICBBIHBvaW50ZXIgdG8gYWxsIG9mIGNv bmZpZ3VyYXRpb24uDQo+ICsgIEBwYXJhbVtpbl0gIEZ1bkRlc2NyaXB0b3JUeXBlICBVU0IgQ0RD IGNsYXNzIGRlc2NyaXB0b3IgU3ViVHlwZS4NCj4gKyAgQHBhcmFtW291dF0gRGF0YUJ1ZmZlciAg ICAgICAgIEEgcG9pbnRlciB0byB0aGUgRGF0YSBvZiBjb3JyZXNwb25kaW5nIHRvDQo+IGRldmlj ZSBjYXBhYmlsaXR5Lg0KPiArDQo+ICsgIEByZXR2YWwgRUZJX1NVQ0NFU1MgICAgICAgIFRoZSBk ZXZpY2UgY2FwYWJpbGl0eSBkZXNjcmlwdG9yIHdhcyByZXRyaWV2ZWQNCj4gKyAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgc3VjY2Vzc2Z1bGx5Lg0KPiArICBAcmV0dmFsIEVGSV9VTlNVUFBP UlRFRCAgICBObyBzdXBwb3J0ZWQuDQo+ICsgIEByZXR2YWwgRUZJX05PVF9GT1VORCAgICAgIFRo ZSBkZXZpY2UgY2FwYWJpbGl0eSBkZXNjcmlwdG9yIHdhcyBub3QNCj4gZm91bmQuDQo+ICsNCj4g KyoqLw0KPiArRUZJX1NUQVRVUw0KPiArR2V0RnVuY3Rpb25hbERlc2NyaXB0b3IgKA0KPiArICBJ TiAgRUZJX1VTQl9DT05GSUdfREVTQ1JJUFRPUiAgKkNvbmZpZywNCj4gKyAgSU4gIFVJTlQ4ICAg ICAgICAgICAgICAgICAgICAgIEZ1bkRlc2NyaXB0b3JUeXBlLA0KPiArICBPVVQgVk9JRCAgICAg ICAgICAgICAgICAgICAgICAgKkRhdGFCdWZmZXINCj4gKyAgKQ0KPiArew0KPiArICBFRklfU1RB VFVTICAgICAgICAgICAgICAgICAgICBTdGF0dXMgPSBFRklfTk9UX0ZPVU5EOw0KPiArICBVSU5U TiAgICAgICAgICAgICAgICAgICAgICAgICBPZmZzZXQ7DQo+ICsgIEVGSV9VU0JfSU5URVJGQUNF X0RFU0NSSVBUT1IgICpJbnRlcmZhY2U7DQo+ICsNCj4gKyAgZm9yIChPZmZzZXQgPSAwOyBOZXh0 RGVzY3JpcHRvciAoQ29uZmlnLCAmT2Zmc2V0KTspIHsNCj4gKyAgICBJbnRlcmZhY2UgPSAoRUZJ X1VTQl9JTlRFUkZBQ0VfREVTQ1JJUFRPUiAqKSgoVUlOVDggKilDb25maWcgKw0KPiBPZmZzZXQp Ow0KPiArICAgIGlmIChJbnRlcmZhY2UtPkRlc2NyaXB0b3JUeXBlID09IENTX0lOVEVSRkFDRSkg ew0KPiArICAgICAgaWYgKCgoVVNCX0hFQURFUl9GVU5fREVTQ1JJUFRPUiAqKUludGVyZmFjZSkt PkRlc2NyaXB0b3JTdWJ0eXBlDQo+ID09IEZ1bkRlc2NyaXB0b3JUeXBlKSB7DQo+ICsgICAgICAg IHN3aXRjaCAoRnVuRGVzY3JpcHRvclR5cGUpIHsNCj4gKyAgICAgICAgICBjYXNlIEhFQURFUl9G VU5fREVTQ1JJUFRPUjoNCj4gKyAgICAgICAgICAgIENvcHlNZW0gKA0KPiArICAgICAgICAgICAg ICBEYXRhQnVmZmVyLA0KPiArICAgICAgICAgICAgICAoVVNCX0hFQURFUl9GVU5fREVTQ1JJUFRP UiAqKUludGVyZmFjZSwNCj4gKyAgICAgICAgICAgICAgc2l6ZW9mIChVU0JfSEVBREVSX0ZVTl9E RVNDUklQVE9SKQ0KPiArICAgICAgICAgICAgICApOw0KPiArICAgICAgICAgICAgcmV0dXJuIEVG SV9TVUNDRVNTOw0KPiArICAgICAgICAgIGNhc2UgVU5JT05fRlVOX0RFU0NSSVBUT1I6DQo+ICsg ICAgICAgICAgICBDb3B5TWVtICgNCj4gKyAgICAgICAgICAgICAgRGF0YUJ1ZmZlciwNCj4gKyAg ICAgICAgICAgICAgKFVTQl9VTklPTl9GVU5fREVTQ1JJUFRPUiAqKUludGVyZmFjZSwNCj4gKyAg ICAgICAgICAgICAgKChVU0JfVU5JT05fRlVOX0RFU0NSSVBUT1IgKilJbnRlcmZhY2UpLT5GdW5j dGlvbkxlbmd0aA0KPiArICAgICAgICAgICAgICApOw0KPiArICAgICAgICAgICAgcmV0dXJuIEVG SV9TVUNDRVNTOw0KPiArICAgICAgICAgIGNhc2UgRVRIRVJORVRfRlVOX0RFU0NSSVBUT1I6DQo+ ICsgICAgICAgICAgICBDb3B5TWVtICgNCj4gKyAgICAgICAgICAgICAgRGF0YUJ1ZmZlciwNCj4g KyAgICAgICAgICAgICAgKFVTQl9FVEhFUk5FVF9GVU5fREVTQ1JJUFRPUiAqKUludGVyZmFjZSwN Cj4gKyAgICAgICAgICAgICAgc2l6ZW9mIChVU0JfRVRIRVJORVRfRlVOX0RFU0NSSVBUT1IpDQo+ ICsgICAgICAgICAgICAgICk7DQo+ICsgICAgICAgICAgICByZXR1cm4gRUZJX1NVQ0NFU1M7DQo+ ICsgICAgICAgICAgZGVmYXVsdDoNCj4gKyAgICAgICAgICAgIFN0YXR1cyA9IEVGSV9VTlNVUFBP UlRFRDsNCj4gKyAgICAgICAgICAgIGJyZWFrOw0KPiArICAgICAgICB9DQo+ICsgICAgICB9DQo+ ICsgICAgfQ0KPiArICB9DQo+ICsNCj4gKyAgcmV0dXJuIFN0YXR1czsNCj4gK30NCj4gKw0KPiAr LyoqDQo+ICsgIEdldCBVU0IgRXRoZXJuZXQgSU8gZW5kcG9pbnQgYW5kIFVTQiBDREMgZGF0YSBJ TyBlbmRwb2ludC4NCj4gKw0KPiArICBAcGFyYW1baW5dICAgICAgVXNiSW8gICAgICAgICAgIEEg cG9pbnRlciB0byB0aGUgRUZJX1VTQl9JT19QUk9UT0NPTA0KPiBpbnN0YW5jZS4NCj4gKyAgQHBh cmFtW2luLCBvdXRdIFVzYlJuZGlzRGV2aWNlICBBIHBvaW50ZXIgdG8gdGhlIFVTQl9STkRJU19E RVZJQ0UNCj4gaW5zdGFuY2UuDQo+ICsNCj4gKyoqLw0KPiArVk9JRA0KPiArR2V0RW5kcG9pbnQg KA0KPiArICBJTiAgICAgIEVGSV9VU0JfSU9fUFJPVE9DT0wgICpVc2JJbywNCj4gKyAgSU4gT1VU ICBVU0JfUk5ESVNfREVWSUNFICAgICAqVXNiUm5kaXNEZXZpY2UNCj4gKyAgKQ0KPiArew0KPiAr ICBFRklfU1RBVFVTICAgICAgICAgICAgICAgICAgICBTdGF0dXM7DQo+ICsgIFVJTlQ4ICAgICAg ICAgICAgICAgICAgICAgICAgIEluZGV4Ow0KPiArICBVSU5UMzIgICAgICAgICAgICAgICAgICAg ICAgICBSZXN1bHQ7DQo+ICsgIEVGSV9VU0JfSU5URVJGQUNFX0RFU0NSSVBUT1IgIEludGVyZmFj ZTsNCj4gKyAgRUZJX1VTQl9FTkRQT0lOVF9ERVNDUklQVE9SICAgRW5kcG9pbnQ7DQo+ICsNCj4g KyAgU3RhdHVzID0gVXNiSW8tPlVzYkdldEludGVyZmFjZURlc2NyaXB0b3IgKFVzYklvLCAmSW50 ZXJmYWNlKTsNCj4gKyAgQVNTRVJUX0VGSV9FUlJPUiAoU3RhdHVzKTsNCj4gKw0KPiArICBpZiAo SW50ZXJmYWNlLk51bUVuZHBvaW50cyA9PSAwICkgew0KPiArICAgIFN0YXR1cyA9IFVzYlNldElu dGVyZmFjZSAoVXNiSW8sIDEsIDAsICZSZXN1bHQpOw0KPiArICAgIEFTU0VSVF9FRklfRVJST1Ig KFN0YXR1cyk7DQo+ICsNCj4gKyAgICBTdGF0dXMgPSBVc2JJby0+VXNiR2V0SW50ZXJmYWNlRGVz Y3JpcHRvciAoVXNiSW8sICZJbnRlcmZhY2UpOw0KPiArICAgIEFTU0VSVF9FRklfRVJST1IgKFN0 YXR1cyk7DQo+ICsgIH0NCj4gKw0KPiArICBmb3IgKEluZGV4ID0gMDsgSW5kZXggPCBJbnRlcmZh Y2UuTnVtRW5kcG9pbnRzOyBJbmRleCsrKSB7DQo+ICsgICAgU3RhdHVzID0gVXNiSW8tPlVzYkdl dEVuZHBvaW50RGVzY3JpcHRvciAoVXNiSW8sIEluZGV4LCAmRW5kcG9pbnQpOw0KPiArDQo+ICsg ICAgQVNTRVJUX0VGSV9FUlJPUiAoU3RhdHVzKTsNCj4gKw0KPiArICAgIHN3aXRjaCAoKEVuZHBv aW50LkF0dHJpYnV0ZXMgJiAoQklUMCB8IEJJVDEpKSkgew0KPiArICAgICAgY2FzZSBVU0JfRU5E UE9JTlRfQlVMSzoNCj4gKyAgICAgICAgaWYgKEVuZHBvaW50LkVuZHBvaW50QWRkcmVzcyAmIEJJ VDcpIHsNCj4gKyAgICAgICAgICBVc2JSbmRpc0RldmljZS0+QnVsa0luRW5kcG9pbnQgPSBFbmRw b2ludC5FbmRwb2ludEFkZHJlc3M7DQo+ICsgICAgICAgIH0gZWxzZSB7DQo+ICsgICAgICAgICAg VXNiUm5kaXNEZXZpY2UtPkJ1bGtPdXRFbmRwb2ludCA9IEVuZHBvaW50LkVuZHBvaW50QWRkcmVz czsNCj4gKyAgICAgICAgfQ0KPiArDQo+ICsgICAgICAgIGJyZWFrOw0KPiArICAgICAgY2FzZSBV U0JfRU5EUE9JTlRfSU5URVJSVVBUOg0KPiArICAgICAgICBVc2JSbmRpc0RldmljZS0+SW50ZXJy dXBFbmRwb2ludCA9IEVuZHBvaW50LkVuZHBvaW50QWRkcmVzczsNCj4gKyAgICAgICAgYnJlYWs7 DQo+ICsgICAgfQ0KPiArICB9DQo+ICt9DQo+ICsNCj4gKy8qKg0KPiArICBBc3luYyBVU0IgdHJh bnNmZXIgY2FsbGJhY2sgcm91dGluZS4NCj4gKw0KPiArICBAcGFyYW1baW5dICBEYXRhICAgICAg ICAgICAgRGF0YSByZWNlaXZlZCBvciBzZW50IHZpYSB0aGUgVVNCIEFzeW5jaHJvbm91cw0KPiBU cmFuc2ZlciwgaWYgdGhlDQo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0cmFuc2Zl ciBjb21wbGV0ZWQgc3VjY2Vzc2Z1bGx5Lg0KPiArICBAcGFyYW1baW5dICBEYXRhTGVuZ3RoICAg ICAgVGhlIGxlbmd0aCBvZiBEYXRhIHJlY2VpdmVkIG9yIHNlbnQgdmlhIHRoZQ0KPiBBc3luY2hy b25vdXMNCj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRyYW5zZmVyLCBpZiB0cmFu c2ZlciBzdWNjZXNzZnVsbHkgY29tcGxldGVzLg0KPiArICBAcGFyYW1baW5dICBDb250ZXh0ICAg ICAgICAgRGF0YSBwYXNzZWQgZnJvbSBVc2JBc3luY0ludGVycnVwdFRyYW5zZmVyKCkNCj4gcmVx dWVzdC4NCj4gKyAgQHBhcmFtW2luXSAgU3RhdHVzICAgICAgICAgIEluZGljYXRlcyB0aGUgcmVz dWx0IG9mIHRoZSBhc3luY2hyb25vdXMgdHJhbnNmZXIuDQo+ICsNCj4gKyAgQHJldHZhbCBFRklf U1VDQ0VTUyAgICAgICAgICAgVGhlIGFzeW5jaHJvbm91cyBVU0IgdHJhbnNmZXIgcmVxdWVzdCBo YXMNCj4gYmVlbiBzdWNjZXNzZnVsbHkgZXhlY3V0ZWQuDQo+ICsgIEByZXR2YWwgRUZJX0RFVklD RV9FUlJPUiAgICAgIFRoZSBhc3luY2hyb25vdXMgVVNCIHRyYW5zZmVyIHJlcXVlc3QNCj4gZmFp bGVkLg0KPiArDQo+ICsqKi8NCj4gK0VGSV9TVEFUVVMNCj4gK0VGSUFQSQ0KPiArSW50ZXJydXB0 Q2FsbGJhY2sgKA0KPiArICBJTiAgVk9JRCAgICAqRGF0YSwNCj4gKyAgSU4gIFVJTlROICAgRGF0 YUxlbmd0aCwNCj4gKyAgSU4gIFZPSUQgICAgKkNvbnRleHQsDQo+ICsgIElOICBVSU5UMzIgIFN0 YXR1cw0KPiArICApDQo+ICt7DQo+ICsgIGlmICgoKEVGSV9VU0JfREVWSUNFX1JFUVVFU1QgKilE YXRhKS0+UmVxdWVzdCA9PSAwKSB7DQo+ICsgICAgQ29weU1lbSAoDQo+ICsgICAgICAoRUZJX1VT Ql9ERVZJQ0VfUkVRVUVTVCAqKUNvbnRleHQsDQo+ICsgICAgICAoRUZJX1VTQl9ERVZJQ0VfUkVR VUVTVCAqKURhdGEsDQo+ICsgICAgICBzaXplb2YgKEVGSV9VU0JfREVWSUNFX1JFUVVFU1QpDQo+ ICsgICAgICApOw0KPiArICB9DQo+ICsNCj4gKyAgcmV0dXJuIEVGSV9TVUNDRVNTOw0KPiArfQ0K PiArDQo+ICsvKioNCj4gKyAgVGhpcyBmdW5jdGlvbiBpcyB1c2VkIHRvIG1hbmFnZSBhIFVTQiBk ZXZpY2Ugd2l0aCBhbiBpbnRlcnJ1cHQgdHJhbnNmZXINCj4gcGlwZS4NCj4gKw0KPiArICBAcGFy YW1baW5dICBUaGlzICAgICAgICAgICAgICBBIHBvaW50ZXIgdG8gdGhlIEVES0lJX1VTQl9FVEhF Uk5FVF9QUk9UT0NPTA0KPiBpbnN0YW5jZS4NCj4gKyAgQHBhcmFtW2luXSAgSXNOZXdUcmFuc2Zl ciAgICAgSWYgVFJVRSwgYSBuZXcgdHJhbnNmZXIgd2lsbCBiZSBzdWJtaXR0ZWQgdG8NCj4gVVNC IGNvbnRyb2xsZXIuIElmDQo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZBTFNF LCB0aGUgaW50ZXJydXB0IHRyYW5zZmVyIGlzIGRlbGV0ZWQgZnJvbSB0aGUgZGV2aWNlJ3MNCj4g aW50ZXJydXB0DQo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRyYW5zZmVyIHF1 ZXVlLg0KPiArICBAcGFyYW1baW5dICBQb2xsaW5nSW50ZXJ2YWwgICBJbmRpY2F0ZXMgdGhlIHBl cmlvZGljIHJhdGUsIGluIG1pbGxpc2Vjb25kcywNCj4gdGhhdCB0aGUgdHJhbnNmZXIgaXMgdG8g YmUNCj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXhlY3V0ZWQuVGhpcyBwYXJh bWV0ZXIgaXMgcmVxdWlyZWQgd2hlbiBJc05ld1RyYW5zZmVyIGlzDQo+IFRSVUUuIFRoZQ0KPiAr ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZSBtdXN0IGJlIGJldHdlZW4gMSB0 byAyNTUsIG90aGVyd2lzZQ0KPiBFRklfSU5WQUxJRF9QQVJBTUVURVIgaXMgcmV0dXJuZWQuDQo+ ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRoZSB1bml0cyBhcmUgaW4gbWlsbGlz ZWNvbmRzLg0KPiArICBAcGFyYW1baW5dICBSZXF1ZXN0ICAgICAgICAgICBBIHBvaW50ZXIgdG8g dGhlIEVGSV9VU0JfREVWSUNFX1JFUVVFU1QNCj4gZGF0YS4NCj4gKw0KPiArICBAcmV0dmFsIEVG SV9TVUNDRVNTICAgICAgICAgICBUaGUgYXN5bmNocm9ub3VzIFVTQiB0cmFuc2ZlciByZXF1ZXN0 DQo+IHRyYW5zZmVyIGhhcyBiZWVuIHN1Y2Nlc3NmdWxseSBleGVjdXRlZC4NCj4gKyAgQHJldHZh bCBFRklfREVWSUNFX0VSUk9SICAgICAgVGhlIGFzeW5jaHJvbm91cyBVU0IgdHJhbnNmZXIgcmVx dWVzdA0KPiBmYWlsZWQuDQo+ICsNCj4gKyoqLw0KPiArRUZJX1NUQVRVUw0KPiArRUZJQVBJDQo+ ICtVc2JSbmRpc0ludGVycnVwdCAoDQo+ICsgIElOIEVES0lJX1VTQl9FVEhFUk5FVF9QUk9UT0NP TCAgKlRoaXMsDQo+ICsgIElOIEJPT0xFQU4gICAgICAgICAgICAgICAgICAgICAgSXNOZXdUcmFu c2ZlciwNCj4gKyAgSU4gVUlOVE4gICAgICAgICAgICAgICAgICAgICAgICBQb2xsaW5nSW50ZXJ2 YWwsDQo+ICsgIElOIEVGSV9VU0JfREVWSUNFX1JFUVVFU1QgICAgICAgKlJlcXVzdA0KPiArICAp DQo+ICt7DQo+ICsgIEVGSV9TVEFUVVMgICAgICAgIFN0YXR1czsNCj4gKyAgVVNCX1JORElTX0RF VklDRSAgKlVzYlJuZGlzRGV2aWNlOw0KPiArICBVSU5UTiAgICAgICAgICAgICBEYXRhTGVuZ3Ro ID0gMDsNCj4gKw0KPiArICBVc2JSbmRpc0RldmljZSA9IFVTQl9STkRJU19ERVZJQ0VfRlJPTV9U SElTIChUaGlzKTsNCj4gKw0KPiArICBpZiAoSXNOZXdUcmFuc2ZlciA9PSBUUlVFKSB7DQo+ICsg ICAgRGF0YUxlbmd0aCA9IHNpemVvZiAoRUZJX1VTQl9ERVZJQ0VfUkVRVUVTVCkgKyBzaXplb2YN Cj4gKFVTQl9DT05ORUNUX1NQRUVEX0NIQU5HRSk7DQo+ICsgICAgU3RhdHVzICAgICA9IFVzYlJu ZGlzRGV2aWNlLT5Vc2JJby0+VXNiQXN5bmNJbnRlcnJ1cHRUcmFuc2ZlciAoDQo+ICsgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBVc2JSbmRpc0RldmljZS0+VXNiSW8s DQo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBVc2JSbmRpc0Rl dmljZS0+SW50ZXJydXBFbmRwb2ludCwNCj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIElzTmV3VHJhbnNmZXIsDQo+ICsgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBQb2xsaW5nSW50ZXJ2YWwsDQo+ICsgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBEYXRhTGVuZ3RoLA0KPiArICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgSW50ZXJydXB0Q2FsbGJhY2ssDQo+ICsgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBSZXF1c3QNCj4gKyAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICk7DQo+ICsNCj4gKyAgICBpZiAoU3RhdHVzID09 IEVGSV9JTlZBTElEX1BBUkFNRVRFUikgew0KPiArICAgICAgLy8gQmVjYXVzZSBvZiBTdGFja2Vk IEFzeW5jSW50ZXJydXB0IHJlcXVlc3QgYXJlIG5vdCBzdXBwb3J0ZWQNCj4gKyAgICAgIFN0YXR1 cyA9IFVzYlJuZGlzRGV2aWNlLT5Vc2JJby0+VXNiQXN5bmNJbnRlcnJ1cHRUcmFuc2ZlciAoDQo+ ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVXNiUm5kaXNEZXZpY2Ut PlVzYklvLA0KPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFVzYlJu ZGlzRGV2aWNlLT5JbnRlcnJ1cEVuZHBvaW50LA0KPiArICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIDAsDQo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgMCwNCj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwLA0K PiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5VTEwsDQo+ICsgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTlVMTA0KPiArICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICk7DQo+ICsgICAgfQ0KPiArICB9IGVsc2Ugew0K PiArICAgIFN0YXR1cyA9IFVzYlJuZGlzRGV2aWNlLT5Vc2JJby0+VXNiQXN5bmNJbnRlcnJ1cHRU cmFuc2ZlciAoDQo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFVzYlJu ZGlzRGV2aWNlLT5Vc2JJbywNCj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgVXNiUm5kaXNEZXZpY2UtPkludGVycnVwRW5kcG9pbnQsDQo+ICsgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIElzTmV3VHJhbnNmZXIsDQo+ICsgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIDAsDQo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIDAsDQo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5V TEwsDQo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5VTEwNCj4gKyAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKTsNCj4gKyAgfQ0KPiArDQo+ICsg IHJldHVybiBTdGF0dXM7DQo+ICt9DQo+ICsNCj4gKy8qKg0KPiArICBSZXRyaWV2ZXMgdGhlIFVT QiBFdGhlcm5ldCBNYWMgQWRkcmVzcy4NCj4gKw0KPiArICBAcGFyYW1baW5dICBUaGlzICAgICAg ICAgIEEgcG9pbnRlciB0byB0aGUgRURLSUlfVVNCX0VUSEVSTkVUX1BST1RPQ09MDQo+IGluc3Rh bmNlLg0KPiArICBAcGFyYW1bb3V0XSBNYWNBZGRyZXNzICAgIEEgcG9pbnRlciB0byB0aGUgY2Fs bGVyIGFsbG9jYXRlZCBVU0IgRXRoZXJuZXQNCj4gTWFjIEFkZHJlc3MuDQo+ICsNCj4gKyAgQHJl dHZhbCBFRklfU1VDQ0VTUyAgICAgICAgICAgVGhlIFVTQiBIZWFkZXIgRnVuY3Rpb25hbCBkZXNj cmlwdG9yIHdhcw0KPiByZXRyaWV2ZWQgc3VjY2Vzc2Z1bGx5Lg0KPiArICBAcmV0dmFsIEVGSV9J TlZBTElEX1BBUkFNRVRFUiBVc2JIZWFkZXJGdW5EZXNjcmlwdG9yIGlzIE5VTEwuDQo+ICsgIEBy ZXR2YWwgRUZJX05PVF9GT1VORCAgICAgICAgIFRoZSBVU0IgSGVhZGVyIEZ1bmN0aW9uYWwgZGVz Y3JpcHRvciB3YXMNCj4gbm90IGZvdW5kLg0KPiArDQo+ICsqKi8NCj4gK0VGSV9TVEFUVVMNCj4g K0VGSUFQSQ0KPiArR2V0VXNiRXRoTWFjQWRkcmVzcyAoDQo+ICsgIElOICBFREtJSV9VU0JfRVRI RVJORVRfUFJPVE9DT0wgICpUaGlzLA0KPiArICBPVVQgRUZJX01BQ19BRERSRVNTICAgICAgICAg ICAgICAqTWFjQWRkcmVzcw0KPiArICApDQo+ICt7DQo+ICsgIEVGSV9TVEFUVVMgICAgICAgICAg ICAgICAgICAgU3RhdHVzOw0KPiArICBVU0JfUk5ESVNfREVWSUNFICAgICAgICAgICAgICpVc2JS bmRpc0RldmljZTsNCj4gKyAgVVNCX0VUSEVSTkVUX0ZVTl9ERVNDUklQVE9SICBVc2JFdGhEZXNj cmlwdG9yOw0KPiArICBDSEFSMTYgICAgICAgICAgICAgICAgICAgICAgICpEYXRhOw0KPiArICBD SEFSMTYgICAgICAgICAgICAgICAgICAgICAgICpEYXRhUHRyOw0KPiArICBDSEFSMTYgICAgICAg ICAgICAgICAgICAgICAgIFRtcFN0clsxXTsNCj4gKyAgVUlOVDggICAgICAgICAgICAgICAgICAg ICAgICBJbmRleDsNCj4gKyAgVUlOVDggICAgICAgICAgICAgICAgICAgICAgICBIaTsNCj4gKyAg VUlOVDggICAgICAgICAgICAgICAgICAgICAgICBMb3c7DQo+ICsNCj4gKyAgVXNiUm5kaXNEZXZp Y2UgPSBVU0JfUk5ESVNfREVWSUNFX0ZST01fVEhJUyAoVGhpcyk7DQo+ICsNCj4gKyAgU3RhdHVz ID0gVGhpcy0+VXNiRXRoRnVuRGVzY3JpcHRvciAoVGhpcywgJlVzYkV0aERlc2NyaXB0b3IpOw0K PiArICBBU1NFUlRfRUZJX0VSUk9SIChTdGF0dXMpOw0KPiArDQo+ICsgIFN0YXR1cyA9IFVzYlJu ZGlzRGV2aWNlLT5Vc2JJby0+VXNiR2V0U3RyaW5nRGVzY3JpcHRvciAoDQo+ICsgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBVc2JSbmRpc0RldmljZS0+VXNiSW8sDQo+ICsgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDQwOSwgICAgICAgICAgICAgICAgICAg ICAgIC8vIEVuZ2xpc2gtVVMgTGFuZ3VhZ2UgSUQNCj4gKyAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIFVzYkV0aERlc2NyaXB0b3IuTWFjQWRkcmVzcywNCj4gKyAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICZEYXRhDQo+ICsgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICApOw0KPiArICBBU1NFUlRfRUZJX0VSUk9SIChTdGF0dXMpOw0KPiArDQo+ ICsgIERhdGFQdHIgPSBEYXRhOw0KPiArICBmb3IgKEluZGV4ID0gMDsgSW5kZXggPCBQWEVfSFdB RERSX0xFTl9FVEhFUjsgSW5kZXgrKykgew0KPiArICAgIENvcHlNZW0gKFRtcFN0ciwgRGF0YVB0 ciwgc2l6ZW9mIChDSEFSMTYpKTsNCj4gKyAgICBEYXRhUHRyKys7DQo+ICsgICAgSGkgPSAoVUlO VDgpU3RySGV4VG9VaW50biAoVG1wU3RyKTsNCj4gKyAgICBDb3B5TWVtIChUbXBTdHIsIERhdGFQ dHIsIHNpemVvZiAoQ0hBUjE2KSk7DQo+ICsgICAgRGF0YVB0cisrOw0KPiArICAgIExvdyAgICAg ICAgICAgICAgICAgICAgID0gKFVJTlQ4KVN0ckhleFRvVWludG4gKFRtcFN0cik7DQo+ICsgICAg TWFjQWRkcmVzcy0+QWRkcltJbmRleF0gPSAoSGkgPDwgNCkgfCBMb3c7DQo+ICsgIH0NCj4gKw0K PiArICByZXR1cm4gU3RhdHVzOw0KPiArfQ0KPiArDQo+ICsvKioNCj4gKyAgUmV0cmlldmVzIHRo ZSBVU0IgRXRoZXJuZXQgQnVsayB0cmFuc2ZlciBkYXRhIHNpemUuDQo+ICsNCj4gKyAgQHBhcmFt W2luXSAgVGhpcyAgICAgICAgICBBIHBvaW50ZXIgdG8gdGhlIEVES0lJX1VTQl9FVEhFUk5FVF9Q Uk9UT0NPTA0KPiBpbnN0YW5jZS4NCj4gKyAgQHBhcmFtW291dF0gQnVsa1NpemUgICAgICBBIHBv aW50ZXIgdG8gdGhlIEJ1bGsgdHJhbnNmZXIgZGF0YSBzaXplLg0KPiArDQo+ICsgIEByZXR2YWwg RUZJX1NVQ0NFU1MgICAgICAgVGhlIGJ1bGsgdHJhbnNmZXIgZGF0YSBzaXplIHdhcyByZXRyaWV2 ZWQNCj4gc3VjY2Vzc2Z1bGx5Lg0KPiArICBAcmV0dmFsIG90aGVyICAgICAgICAgICAgIEZhaWxl ZCB0byByZXRyaWV2ZSB0aGUgYnVsayB0cmFuc2ZlciBkYXRhIHNpemUuDQo+ICsNCj4gKyoqLw0K PiArRUZJX1NUQVRVUw0KPiArRUZJQVBJDQo+ICtVc2JFdGhCdWxrU2l6ZSAoDQo+ICsgIElOICBF REtJSV9VU0JfRVRIRVJORVRfUFJPVE9DT0wgICpUaGlzLA0KPiArICBPVVQgVUlOVE4gICAgICAg ICAgICAgICAgICAgICAgICAqQnVsa1NpemUNCj4gKyAgKQ0KPiArew0KPiArICBFRklfU1RBVFVT ICAgICAgICAgICAgICAgICAgIFN0YXR1czsNCj4gKyAgVVNCX0VUSEVSTkVUX0ZVTl9ERVNDUklQ VE9SICBVc2JFdGhGdW5EZXNjcmlwdG9yOw0KPiArDQo+ICsgIFN0YXR1cyA9IFRoaXMtPlVzYkV0 aEZ1bkRlc2NyaXB0b3IgKFRoaXMsICZVc2JFdGhGdW5EZXNjcmlwdG9yKTsNCj4gKyAgaWYgKEVG SV9FUlJPUiAoU3RhdHVzKSkgew0KPiArICAgIHJldHVybiBTdGF0dXM7DQo+ICsgIH0NCj4gKw0K PiArICAqQnVsa1NpemUgPSAoVUlOVE4pVXNiRXRoRnVuRGVzY3JpcHRvci5NYXhTZWdtZW50U2l6 ZTsNCj4gKyAgcmV0dXJuIFN0YXR1czsNCj4gK30NCj4gKw0KPiArLyoqDQo+ICsgIFJldHJpZXZl cyB0aGUgVVNCIEhlYWRlciBmdW5jdGlvbmFsIERlc2NyaXB0b3IuDQo+ICsNCj4gKyAgQHBhcmFt W2luXSAgVGhpcyAgICAgICAgICAgICAgICAgICBBIHBvaW50ZXIgdG8gdGhlDQo+IEVES0lJX1VT Ql9FVEhFUk5FVF9QUk9UT0NPTCBpbnN0YW5jZS4NCj4gKyAgQHBhcmFtW291dF0gVXNiSGVhZGVy RnVuRGVzY3JpcHRvciBBIHBvaW50ZXIgdG8gdGhlIGNhbGxlciBhbGxvY2F0ZWQNCj4gVVNCIEhl YWRlciBGdW5jdGlvbmFsIERlc2NyaXB0b3IuDQo+ICsNCj4gKyAgQHJldHZhbCBFRklfU1VDQ0VT UyAgICAgICAgICAgVGhlIFVTQiBIZWFkZXIgRnVuY3Rpb25hbCBkZXNjcmlwdG9yIHdhcw0KPiBy ZXRyaWV2ZWQgc3VjY2Vzc2Z1bGx5Lg0KPiArICBAcmV0dmFsIEVGSV9JTlZBTElEX1BBUkFNRVRF UiBVc2JIZWFkZXJGdW5EZXNjcmlwdG9yIGlzIE5VTEwuDQo+ICsgIEByZXR2YWwgRUZJX05PVF9G T1VORCAgICAgICAgIFRoZSBVU0IgSGVhZGVyIEZ1bmN0aW9uYWwgZGVzY3JpcHRvciB3YXMNCj4g bm90IGZvdW5kLg0KPiArDQo+ICsqKi8NCj4gK0VGSV9TVEFUVVMNCj4gK0VGSUFQSQ0KPiArR2V0 VXNiSGVhZGVyRnVuRGVzY3JpcHRvciAoDQo+ICsgIElOICBFREtJSV9VU0JfRVRIRVJORVRfUFJP VE9DT0wgICpUaGlzLA0KPiArICBPVVQgVVNCX0hFQURFUl9GVU5fREVTQ1JJUFRPUiAgICAqVXNi SGVhZGVyRnVuRGVzY3JpcHRvcg0KPiArICApDQo+ICt7DQo+ICsgIEVGSV9TVEFUVVMgICAgICAg IFN0YXR1czsNCj4gKyAgVVNCX1JORElTX0RFVklDRSAgKlVzYlJuZGlzRGV2aWNlOw0KPiArDQo+ ICsgIFVzYlJuZGlzRGV2aWNlID0gVVNCX1JORElTX0RFVklDRV9GUk9NX1RISVMgKFRoaXMpOw0K PiArDQo+ICsgIGlmIChVc2JIZWFkZXJGdW5EZXNjcmlwdG9yID09IE5VTEwpIHsNCj4gKyAgICBy ZXR1cm4gRUZJX0lOVkFMSURfUEFSQU1FVEVSOw0KPiArICB9DQo+ICsNCj4gKyAgU3RhdHVzID0g R2V0RnVuY3Rpb25hbERlc2NyaXB0b3IgKA0KPiArICAgICAgICAgICAgIFVzYlJuZGlzRGV2aWNl LT5Db25maWcsDQo+ICsgICAgICAgICAgICAgSEVBREVSX0ZVTl9ERVNDUklQVE9SLA0KPiArICAg ICAgICAgICAgIFVzYkhlYWRlckZ1bkRlc2NyaXB0b3INCj4gKyAgICAgICAgICAgICApOw0KPiAr ICByZXR1cm4gU3RhdHVzOw0KPiArfQ0KPiArDQo+ICsvKioNCj4gKyAgUmV0cmlldmVzIHRoZSBV U0IgVW5pb24gZnVuY3Rpb25hbCBEZXNjcmlwdG9yLg0KPiArDQo+ICsgIEBwYXJhbVtpbl0gIFRo aXMgICAgICAgICAgICAgICAgICAgQSBwb2ludGVyIHRvIHRoZQ0KPiBFREtJSV9VU0JfRVRIRVJO RVRfUFJPVE9DT0wgaW5zdGFuY2UuDQo+ICsgIEBwYXJhbVtvdXRdIFVzYlVuaW9uRnVuRGVzY3Jp cHRvciAgQSBwb2ludGVyIHRvIHRoZSBjYWxsZXIgYWxsb2NhdGVkDQo+IFVTQiBVbmlvbiBGdW5j dGlvbmFsIERlc2NyaXB0b3IuDQo+ICsNCj4gKyAgQHJldHZhbCBFRklfU1VDQ0VTUyAgICAgICAg ICAgIFRoZSBVU0IgVW5pb24gRnVuY3Rpb25hbCBkZXNjcmlwdG9yIHdhcw0KPiByZXRyaWV2ZWQg c3VjY2Vzc2Z1bGx5Lg0KPiArICBAcmV0dmFsIEVGSV9JTlZBTElEX1BBUkFNRVRFUiAgVXNiVW5p b25GdW5EZXNjcmlwdG9yIGlzIE5VTEwuDQo+ICsgIEByZXR2YWwgRUZJX05PVF9GT1VORCAgICAg ICAgICBUaGUgVVNCIFVuaW9uIEZ1bmN0aW9uYWwgZGVzY3JpcHRvciB3YXMNCj4gbm90IGZvdW5k Lg0KPiArDQo+ICsqKi8NCj4gK0VGSV9TVEFUVVMNCj4gK0VGSUFQSQ0KPiArR2V0VXNiVW5pb25G dW5EZXNjcmlwdG9yICgNCj4gKyAgSU4gIEVES0lJX1VTQl9FVEhFUk5FVF9QUk9UT0NPTCAgKlRo aXMsDQo+ICsgIE9VVCBVU0JfVU5JT05fRlVOX0RFU0NSSVBUT1IgICAgICpVc2JVbmlvbkZ1bkRl c2NyaXB0b3INCj4gKyAgKQ0KPiArew0KPiArICBFRklfU1RBVFVTICAgICAgICBTdGF0dXM7DQo+ ICsgIFVTQl9STkRJU19ERVZJQ0UgICpVc2JSbmRpc0RldmljZTsNCj4gKw0KPiArICBVc2JSbmRp c0RldmljZSA9IFVTQl9STkRJU19ERVZJQ0VfRlJPTV9USElTIChUaGlzKTsNCj4gKw0KPiArICBp ZiAoVXNiVW5pb25GdW5EZXNjcmlwdG9yID09IE5VTEwpIHsNCj4gKyAgICByZXR1cm4gRUZJX0lO VkFMSURfUEFSQU1FVEVSOw0KPiArICB9DQo+ICsNCj4gKyAgU3RhdHVzID0gR2V0RnVuY3Rpb25h bERlc2NyaXB0b3IgKA0KPiArICAgICAgICAgICAgIFVzYlJuZGlzRGV2aWNlLT5Db25maWcsDQo+ ICsgICAgICAgICAgICAgVU5JT05fRlVOX0RFU0NSSVBUT1IsDQo+ICsgICAgICAgICAgICAgVXNi VW5pb25GdW5EZXNjcmlwdG9yDQo+ICsgICAgICAgICAgICAgKTsNCj4gKyAgcmV0dXJuIFN0YXR1 czsNCj4gK30NCj4gKw0KPiArLyoqDQo+ICsgIFJldHJpZXZlcyB0aGUgVVNCIEV0aGVybmV0IGZ1 bmN0aW9uYWwgRGVzY3JpcHRvci4NCj4gKw0KPiArICBUaGlzIGZ1bmN0aW9uIGdldCB0aGUgTWFj IEFkZHJlc3MsIEV0aGVybmV0IHN0YXRpc3RpY3MsIG1heGltdW0gc2VnbWVudA0KPiBzaXplLA0K PiArICBudW1iZXIgb2YgbXVsdGljYXN0IGZpbHRlcnMsIGFuZCBudW1iZXIgb2YgcGF0dGVybiBm aWx0ZXJzIGZyb20gRXRoZXJuZXQNCj4gKyAgZnVuY3Rpb25hbCBEZXNjcmlwdG9yLg0KPiArDQo+ ICsgIEBwYXJhbVtpbl0gIFRoaXMgICAgICAgICAgICAgICAgICAgQSBwb2ludGVyIHRvIHRoZQ0K PiBFREtJSV9VU0JfRVRIRVJORVRfUFJPVE9DT0wgaW5zdGFuY2UuDQo+ICsgIEBwYXJhbVtvdXRd IFVzYkV0aEZ1bkRlc2NyaXB0b3IgICAgQSBwb2ludGVyIHRvIHRoZSBjYWxsZXIgYWxsb2NhdGVk IFVTQg0KPiBFdGhlcm5ldCBGdW5jdGlvbmFsIERlc2NyaXB0b3IuDQo+ICsNCj4gKyAgQHJldHZh bCBFRklfU1VDQ0VTUyAgICAgICAgICAgIFRoZSBVU0IgRXRoZXJuZXQgRnVuY3Rpb25hbCBkZXNj cmlwdG9yIHdhcw0KPiByZXRyaWV2ZWQgc3VjY2Vzc2Z1bGx5Lg0KPiArICBAcmV0dmFsIEVGSV9J TlZBTElEX1BBUkFNRVRFUiAgVXNiRXRoRnVuRGVzY3JpcHRvciBpcyBOVUxMLg0KPiArICBAcmV0 dmFsIEVGSV9OT1RfRk9VTkQgICAgICAgICAgVGhlIFVTQiBFdGhlcm5ldCBGdW5jdGlvbmFsIGRl c2NyaXB0b3Igd2FzDQo+IG5vdCBmb3VuZC4NCj4gKw0KPiArKiovDQo+ICtFRklfU1RBVFVTDQo+ ICtFRklBUEkNCj4gK0dldFVzYlJuZGlzRnVuRGVzY3JpcHRvciAoDQo+ICsgIElOICBFREtJSV9V U0JfRVRIRVJORVRfUFJPVE9DT0wgICpUaGlzLA0KPiArICBPVVQgVVNCX0VUSEVSTkVUX0ZVTl9E RVNDUklQVE9SICAqVXNiRXRoRnVuRGVzY3JpcHRvcg0KPiArICApDQo+ICt7DQo+ICsgIEVGSV9T VEFUVVMgICAgICAgIFN0YXR1czsNCj4gKyAgVVNCX1JORElTX0RFVklDRSAgKlVzYlJuZGlzRGV2 aWNlOw0KPiArDQo+ICsgIFVzYlJuZGlzRGV2aWNlID0gVVNCX1JORElTX0RFVklDRV9GUk9NX1RI SVMgKFRoaXMpOw0KPiArDQo+ICsgIGlmIChVc2JFdGhGdW5EZXNjcmlwdG9yID09IE5VTEwpIHsN Cj4gKyAgICByZXR1cm4gRUZJX0lOVkFMSURfUEFSQU1FVEVSOw0KPiArICB9DQo+ICsNCj4gKyAg U3RhdHVzID0gR2V0RnVuY3Rpb25hbERlc2NyaXB0b3IgKA0KPiArICAgICAgICAgICAgIFVzYlJu ZGlzRGV2aWNlLT5Db25maWcsDQo+ICsgICAgICAgICAgICAgRVRIRVJORVRfRlVOX0RFU0NSSVBU T1IsDQo+ICsgICAgICAgICAgICAgVXNiRXRoRnVuRGVzY3JpcHRvcg0KPiArICAgICAgICAgICAg ICk7DQo+ICsgIHJldHVybiBTdGF0dXM7DQo+ICt9DQo+ICsNCj4gKy8qKg0KPiArICBUaGlzIHJl cXVlc3Qgc2V0cyB0aGUgRXRoZXJuZXQgZGV2aWNlIG11bHRpY2FzdCBmaWx0ZXJzIGFzIHNwZWNp ZmllZCBpbiB0aGUNCj4gKyAgc2VxdWVudGlhbCBsaXN0IG9mIDQ4IGJpdCBFdGhlcm5ldCBtdWx0 aWNhc3QgYWRkcmVzc2VzLg0KPiArDQo+ICsgIEBwYXJhbVtpbl0gIFRoaXMgICAgICAgICAgICAg ICAgICAgQSBwb2ludGVyIHRvIHRoZQ0KPiBFREtJSV9VU0JfRVRIRVJORVRfUFJPVE9DT0wgaW5z dGFuY2UuDQo+ICsgIEBwYXJhbVtpbl0gIFZhbHVlICAgICAgICAgICAgICAgICAgTnVtYmVyIG9m IGZpbHRlcnMuDQo+ICsgIEBwYXJhbVtpbl0gIE1jYXN0QWRkciAgICAgICAgICAgICAgQSBwb2lu dGVyIHRvIHRoZSB2YWx1ZSBvZiB0aGUgbXVsdGljYXN0DQo+IGFkZHJlc3Nlcy4NCj4gKw0KPiAr ICBAcmV0dmFsIEVGSV9TVUNDRVNTICAgICAgICAgICAgVGhlIHJlcXVlc3QgZXhlY3V0ZWQgc3Vj Y2Vzc2Z1bGx5Lg0KPiArICBAcmV0dmFsIEVGSV9USU1FT1VUICAgICAgICAgICAgQSB0aW1lb3V0 IG9jY3VycmVkIGV4ZWN1dGluZyB0aGUgcmVxdWVzdC4NCj4gKyAgQHJldHZhbCBFRklfREVWSUNF X0VSUk9SICAgICAgIFRoZSByZXF1ZXN0IGZhaWxlZCBkdWUgdG8gYSBkZXZpY2UgZXJyb3IuDQo+ ICsgIEByZXR2YWwgRUZJX0lOVkFMSURfUEFSQU1FVEVSICBPbmUgb2YgdGhlIHBhcmFtZXRlcnMg aGFzIGFuIGludmFsaWQNCj4gdmFsdWUuDQo+ICsgIEByZXR2YWwgRUZJX1VOU1VQUE9SVEVEICAg ICAgICBOb3Qgc3VwcG9ydGVkLg0KPiArDQo+ICsqKi8NCj4gK0VGSV9TVEFUVVMNCj4gK0VGSUFQ SQ0KPiArU2V0VXNiUm5kaXNNY2FzdEZpbHRlciAoDQo+ICsgIElOIEVES0lJX1VTQl9FVEhFUk5F VF9QUk9UT0NPTCAgKlRoaXMsDQo+ICsgIElOIFVJTlQxNiAgICAgICAgICAgICAgICAgICAgICAg VmFsdWUsDQo+ICsgIElOIFZPSUQgICAgICAgICAgICAgICAgICAgICAgICAgKk1jYXN0QWRkcg0K PiArICApDQo+ICt7DQo+ICsgIEVGSV9TVEFUVVMgICAgICAgICAgICAgICAgICAgU3RhdHVzOw0K PiArICBFRklfVVNCX0RFVklDRV9SRVFVRVNUICAgICAgIFJlcXVlc3Q7DQo+ICsgIFVJTlQzMiAg ICAgICAgICAgICAgICAgICAgICAgVHJhbnNTdGF0dXM7DQo+ICsgIFVTQl9FVEhFUk5FVF9GVU5f REVTQ1JJUFRPUiAgVXNiRXRoRnVuRGVzY3JpcHRvcjsNCj4gKyAgVVNCX1JORElTX0RFVklDRSAg ICAgICAgICAgICAqVXNiUm5kaXNEZXZpY2U7DQo+ICsNCj4gKyAgVXNiUm5kaXNEZXZpY2UgPSBV U0JfUk5ESVNfREVWSUNFX0ZST01fVEhJUyAoVGhpcyk7DQo+ICsNCj4gKyAgU3RhdHVzID0gVGhp cy0+VXNiRXRoRnVuRGVzY3JpcHRvciAoVGhpcywgJlVzYkV0aEZ1bkRlc2NyaXB0b3IpOw0KPiAr ICBpZiAoRUZJX0VSUk9SIChTdGF0dXMpKSB7DQo+ICsgICAgcmV0dXJuIFN0YXR1czsNCj4gKyAg fQ0KPiArDQo+ICsgIGlmICgoVXNiRXRoRnVuRGVzY3JpcHRvci5OdW1iZXJNY0ZpbHRlcnMgPDwg MSkgPT0gMCkgew0KPiArICAgIHJldHVybiBFRklfVU5TVVBQT1JURUQ7DQo+ICsgIH0NCj4gKw0K PiArICBSZXF1ZXN0LlJlcXVlc3RUeXBlID0gVVNCX0VUSFJUTkVUX1NFVF9SRVFfVFlQRTsNCj4g KyAgUmVxdWVzdC5SZXF1ZXN0ICAgICA9IFNFVF9FVEhfTVVMVElDQVNUX0ZJTFRFUlNfUkVROw0K PiArICBSZXF1ZXN0LlZhbHVlICAgICAgID0gVmFsdWU7DQo+ICsgIFJlcXVlc3QuSW5kZXggICAg ICAgPSBVc2JSbmRpc0RldmljZS0+TnVtT2ZJbnRlcmZhY2U7DQo+ICsgIFJlcXVlc3QuTGVuZ3Ro ICAgICAgPSBWYWx1ZSAqIDY7DQo+ICsNCj4gKyAgcmV0dXJuIFVzYlJuZGlzRGV2aWNlLT5Vc2JJ by0+VXNiQ29udHJvbFRyYW5zZmVyICgNCj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBVc2JSbmRpc0RldmljZS0+VXNiSW8sDQo+ICsgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgJlJlcXVlc3QsDQo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg RWZpVXNiRGF0YU91dCwNCj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBVU0Jf RVRIRVJORVRfVFJBTlNGRVJfVElNRU9VVCwNCj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBNY2FzdEFkZHIsDQo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg UmVxdWVzdC5MZW5ndGgsDQo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJlRy YW5zU3RhdHVzDQo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKTsNCj4gK30N Cj4gKw0KPiArLyoqDQo+ICsgIFRoaXMgcmVxdWVzdCBzZXRzIHVwIHRoZSBzcGVjaWZpZWQgRXRo ZXJuZXQgcG93ZXIgbWFuYWdlbWVudCBwYXR0ZXJuDQo+IGZpbHRlciBhcw0KPiArICBkZXNjcmli ZWQgaW4gdGhlIGRhdGEgc3RydWN0dXJlLg0KPiArDQo+ICsgIEBwYXJhbVtpbl0gIFRoaXMgICAg ICAgICAgICAgICAgICBBIHBvaW50ZXIgdG8gdGhlDQo+IEVES0lJX1VTQl9FVEhFUk5FVF9QUk9U T0NPTCBpbnN0YW5jZS4NCj4gKyAgQHBhcmFtW2luXSAgVmFsdWUgICAgICAgICAgICAgICAgIE51 bWJlciBvZiBmaWx0ZXJzLg0KPiArICBAcGFyYW1baW5dICBMZW5ndGggICAgICAgICAgICAgICAg U2l6ZSBvZiB0aGUgcG93ZXIgbWFuYWdlbWVudCBwYXR0ZXJuIGZpbHRlcg0KPiBkYXRhLg0KPiAr ICBAcGFyYW1baW5dICBQYXR0ZXJuRmlsdGVyICAgICAgICAgQSBwb2ludGVyIHRvIHRoZSBwb3dl ciBtYW5hZ2VtZW50DQo+IHBhdHRlcm4gZmlsdGVyIHN0cnVjdHVyZS4NCj4gKw0KPiArICBAcmV0 dmFsIEVGSV9TVUNDRVNTICAgICAgICAgICAgVGhlIHJlcXVlc3QgZXhlY3V0ZWQgc3VjY2Vzc2Z1 bGx5Lg0KPiArICBAcmV0dmFsIEVGSV9USU1FT1VUICAgICAgICAgICAgQSB0aW1lb3V0IG9jY3Vy cmVkIGV4ZWN1dGluZyB0aGUgcmVxdWVzdC4NCj4gKyAgQHJldHZhbCBFRklfREVWSUNFX0VSUk9S ICAgICAgIFRoZSByZXF1ZXN0IGZhaWxlZCBkdWUgdG8gYSBkZXZpY2UgZXJyb3IuDQo+ICsgIEBy ZXR2YWwgRUZJX0lOVkFMSURfUEFSQU1FVEVSICBPbmUgb2YgdGhlIHBhcmFtZXRlcnMgaGFzIGFu IGludmFsaWQNCj4gdmFsdWUuDQo+ICsgIEByZXR2YWwgRUZJX1VOU1VQUE9SVEVEICAgICAgICBO b3Qgc3VwcG9ydGVkLg0KPiArDQo+ICsqKi8NCj4gK0VGSV9TVEFUVVMNCj4gK0VGSUFQSQ0KPiAr U2V0VXNiUm5kaXNQb3dlckZpbHRlciAoDQo+ICsgIElOIEVES0lJX1VTQl9FVEhFUk5FVF9QUk9U T0NPTCAgKlRoaXMsDQo+ICsgIElOIFVJTlQxNiAgICAgICAgICAgICAgICAgICAgICAgVmFsdWUs DQo+ICsgIElOIFVJTlQxNiAgICAgICAgICAgICAgICAgICAgICAgTGVuZ3RoLA0KPiArICBJTiBW T0lEICAgICAgICAgICAgICAgICAgICAgICAgICpQYXR0ZXJuRmlsdGVyDQo+ICsgICkNCj4gK3sN Cj4gKyAgRUZJX1VTQl9ERVZJQ0VfUkVRVUVTVCAgUmVxdWVzdDsNCj4gKyAgVUlOVDMyICAgICAg ICAgICAgICAgICAgVHJhbnNTdGF0dXM7DQo+ICsgIFVTQl9STkRJU19ERVZJQ0UgICAgICAgICpV c2JSbmRpc0RldmljZTsNCj4gKw0KPiArICBVc2JSbmRpc0RldmljZSA9IFVTQl9STkRJU19ERVZJ Q0VfRlJPTV9USElTIChUaGlzKTsNCj4gKw0KPiArICBSZXF1ZXN0LlJlcXVlc3RUeXBlID0gVVNC X0VUSFJUTkVUX1NFVF9SRVFfVFlQRTsNCj4gKyAgUmVxdWVzdC5SZXF1ZXN0ICAgICA9DQo+IFNF VF9FVEhfUE9XRVJfTUFOQUdFTUVOVF9QQVRURVJOX0ZJTFRFUl9SRVE7DQo+ICsgIFJlcXVlc3Qu VmFsdWUgICAgICAgPSBWYWx1ZTsNCj4gKyAgUmVxdWVzdC5JbmRleCAgICAgICA9IFVzYlJuZGlz RGV2aWNlLT5OdW1PZkludGVyZmFjZTsNCj4gKyAgUmVxdWVzdC5MZW5ndGggICAgICA9IExlbmd0 aDsNCj4gKw0KPiArICByZXR1cm4gVXNiUm5kaXNEZXZpY2UtPlVzYklvLT5Vc2JDb250cm9sVHJh bnNmZXIgKA0KPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFVzYlJuZGlzRGV2 aWNlLT5Vc2JJbywNCj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmUmVxdWVz dCwNCj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBFZmlVc2JEYXRhT3V0LA0K PiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFVTQl9FVEhFUk5FVF9UUkFOU0ZF Ul9USU1FT1VULA0KPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFBhdHRlcm5G aWx0ZXIsDQo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTGVuZ3RoLA0KPiAr ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZUcmFuc1N0YXR1cw0KPiArICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICk7DQo+ICt9DQo+ICsNCj4gKy8qKg0KPiArICBU aGlzIHJlcXVlc3QgcmV0cmlldmVzIHRoZSBzdGF0dXMgb2YgdGhlIHNwZWNpZmllZCBFdGhlcm5l dCBwb3dlcg0KPiBtYW5hZ2VtZW50DQo+ICsgIHBhdHRlcm4gZmlsdGVyIGZyb20gdGhlIGRldmlj ZS4NCj4gKw0KPiArICBAcGFyYW1baW5dICBUaGlzICAgICAgICAgICAgICAgICAgIEEgcG9pbnRl ciB0byB0aGUNCj4gRURLSUlfVVNCX0VUSEVSTkVUX1BST1RPQ09MIGluc3RhbmNlLg0KPiArICBA cGFyYW1baW5dICBWYWx1ZSAgICAgICAgICAgICAgICAgIFRoZSBmaWx0ZXIgbnVtYmVyLg0KPiAr ICBAcGFyYW1bb3V0XSBQYXR0ZXJuQWN0aXZlICAgICAgICAgIEEgcG9pbnRlciB0byB0aGUgcGF0 dGVybiBhY3RpdmUgYm9vbGVhbi4NCj4gKw0KPiArICBAcmV0dmFsIEVGSV9TVUNDRVNTICAgICAg ICAgICAgVGhlIHJlcXVlc3QgZXhlY3V0ZWQgc3VjY2Vzc2Z1bGx5Lg0KPiArICBAcmV0dmFsIEVG SV9USU1FT1VUICAgICAgICAgICAgQSB0aW1lb3V0IG9jY3VycmVkIGV4ZWN1dGluZyB0aGUgcmVx dWVzdC4NCj4gKyAgQHJldHZhbCBFRklfREVWSUNFX0VSUk9SICAgICAgIFRoZSByZXF1ZXN0IGZh aWxlZCBkdWUgdG8gYSBkZXZpY2UgZXJyb3IuDQo+ICsgIEByZXR2YWwgRUZJX0lOVkFMSURfUEFS QU1FVEVSICBPbmUgb2YgdGhlIHBhcmFtZXRlcnMgaGFzIGFuIGludmFsaWQNCj4gdmFsdWUuDQo+ ICsgIEByZXR2YWwgRUZJX1VOU1VQUE9SVEVEICAgICAgICBOb3Qgc3VwcG9ydGVkLg0KPiArDQo+ ICsqKi8NCj4gK0VGSV9TVEFUVVMNCj4gK0VGSUFQSQ0KPiArR2V0VXNiUm5kaXNQb3dlckZpbHRl ciAoDQo+ICsgIElOICBFREtJSV9VU0JfRVRIRVJORVRfUFJPVE9DT0wgICpUaGlzLA0KPiArICBJ TiAgVUlOVDE2ICAgICAgICAgICAgICAgICAgICAgICBWYWx1ZSwNCj4gKyAgT1VUIEJPT0xFQU4g ICAgICAgICAgICAgICAgICAgICAgKlBhdHRlcm5BY3RpdmUNCj4gKyAgKQ0KPiArew0KPiArICBF RklfVVNCX0RFVklDRV9SRVFVRVNUICBSZXF1ZXN0Ow0KPiArICBVSU5UMzIgICAgICAgICAgICAg ICAgICBUcmFuc1N0YXR1czsNCj4gKyAgVVNCX1JORElTX0RFVklDRSAgICAgICAgKlVzYlJuZGlz RGV2aWNlOw0KPiArDQo+ICsgIFVzYlJuZGlzRGV2aWNlID0gVVNCX1JORElTX0RFVklDRV9GUk9N X1RISVMgKFRoaXMpOw0KPiArDQo+ICsgIFJlcXVlc3QuUmVxdWVzdFR5cGUgPSBVU0JfRVRIRVJO RVRfR0VUX1JFUV9UWVBFOw0KPiArICBSZXF1ZXN0LlJlcXVlc3QgICAgID0NCj4gR0VUX0VUSF9Q T1dFUl9NQU5BR0VNRU5UX1BBVFRFUk5fRklMVEVSX1JFUTsNCj4gKyAgUmVxdWVzdC5WYWx1ZSAg ICAgICA9IFZhbHVlOw0KPiArICBSZXF1ZXN0LkluZGV4ICAgICAgID0gVXNiUm5kaXNEZXZpY2Ut Pk51bU9mSW50ZXJmYWNlOw0KPiArICBSZXF1ZXN0Lkxlbmd0aCAgICAgID0gVVNCX0VUSF9QT1dF Ul9GSUxURVJfTEVOR1RIOw0KPiArDQo+ICsgIHJldHVybiBVc2JSbmRpc0RldmljZS0+VXNiSW8t PlVzYkNvbnRyb2xUcmFuc2ZlciAoDQo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgVXNiUm5kaXNEZXZpY2UtPlVzYklvLA0KPiArICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICZSZXF1ZXN0LA0KPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEVm aVVzYkRhdGFJbiwNCj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBVU0JfRVRI RVJORVRfVFJBTlNGRVJfVElNRU9VVCwNCj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBQYXR0ZXJuQWN0aXZlLA0KPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IFVTQl9FVEhfUE9XRVJfRklMVEVSX0xFTkdUSCwNCj4gKyAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAmVHJhbnNTdGF0dXMNCj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICApOw0KPiArfQ0KPiArDQo+ICsvKioNCj4gKw0KPiArICBDb252ZXJ0cyBQWEUgZmlsdGVy IHNldHRpbmdzIHRvIFJORElTIHZhbHVlcw0KPiArDQo+ICsgIEBwYXJhbVtpbl0gIFZhbHVlICAg ICAgUFhFIGZpbHRlciBkYXRhLg0KPiArICBAcGFyYW1bb3V0XSBDZGNGaWx0ZXIgIEEgcG9pbnRl ciB0byB0aGUgRXRoZXJuZXQgUGFja2V0IEZpbHRlciBCaXRtYXANCj4gdmFsdWUgY29udmVydGVk IGJ5IFBYRV9PUEZMQUdTLg0KPiArDQo+ICsqKi8NCj4gK1ZPSUQNCj4gK0NvbnZlcnRGaWx0ZXIg KA0KPiArICBJTiAgVUlOVDE2ICBWYWx1ZSwNCj4gKyAgT1VUIFVJTlQxNiAgKkNkY0ZpbHRlcg0K PiArICApDQo+ICt7DQo+ICsgIFVJTlQzMiAgICAgICAgICAgICAgICAgSW5kZXg7DQo+ICsgIFVJ TlQzMiAgICAgICAgICAgICAgICAgQ291bnQ7DQo+ICsgIHN0YXRpYyBzdHJ1Y3QgQklUX01BUCAg VGFibGVbXSA9IHsNCj4gKyAgICB7IFBYRV9PUEZMQUdTX1JFQ0VJVkVfRklMVEVSX1VOSUNBU1Qs DQo+IE5ESVNfUEFDS0VUX1RZUEVfRElSRUNURUQgICAgICB9LA0KPiArICAgIHsgUFhFX09QRkxB R1NfUkVDRUlWRV9GSUxURVJfQlJPQURDQVNULA0KPiBORElTX1BBQ0tFVF9UWVBFX0JST0FEQ0FT VCAgICAgfSwNCj4gKyAgICB7IFBYRV9PUEZMQUdTX1JFQ0VJVkVfRklMVEVSX0ZJTFRFUkVEX01V TFRJQ0FTVCwNCj4gTkRJU19QQUNLRVRfVFlQRV9NVUxUSUNBU1QgICAgIH0sDQo+ICsgICAgeyBQ WEVfT1BGTEFHU19SRUNFSVZFX0ZJTFRFUl9QUk9NSVNDVU9VUywNCj4gTkRJU19QQUNLRVRfVFlQ RV9QUk9NSVNDVU9VUyAgIH0sDQo+ICsgICAgeyBQWEVfT1BGTEFHU19SRUNFSVZFX0ZJTFRFUl9B TExfTVVMVElDQVNULA0KPiBORElTX1BBQ0tFVF9UWVBFX0FMTF9NVUxUSUNBU1QgfSwNCj4gKyAg fTsNCj4gKw0KPiArICBDb3VudCA9IHNpemVvZiAoVGFibGUpL3NpemVvZiAoVGFibGVbMF0pOw0K PiArDQo+ICsgIGZvciAoSW5kZXggPSAwOyAoVGFibGVbSW5kZXhdLlNyYyAhPSAwKSAmJiAoSW5k ZXggPCBDb3VudCk7IEluZGV4KyspIHsNCj4gKyAgICBpZiAoVGFibGVbSW5kZXhdLlNyYyAmIFZh bHVlKSB7DQo+ICsgICAgICAqQ2RjRmlsdGVyIHw9IFRhYmxlW0luZGV4XS5Ec3Q7DQo+ICsgICAg fQ0KPiArICB9DQo+ICt9DQo+ICsNCj4gKy8qKg0KPiArDQo+ICsgIFVwZGF0ZXMgRmlsdGVyIHNl dHRpbmdzIG9uIHRoZSBkZXZpY2UuDQo+ICsNCj4gKyAgQHBhcmFtW2luXSAgQ2RiICBBIHBvaW50 ZXIgdG8gdGhlIGNvbW1hbmQgZGVzY3JpcHRvciBibG9jay4NCj4gKyAgQHBhcmFtW2luXSAgTmlj ICBBIHBvaW50ZXIgdG8gdGhlIE5ldHdvcmsgaW50ZXJmYWNlIGNvbnRyb2xsZXIgZGF0YS4NCj4g Kw0KPiArICBAcmV0dmFsIEVGSV9TVEFUVVMNCj4gKw0KPiArKiovDQo+ICtFRklfU1RBVFVTDQo+ ICtFRklBUEkNCj4gK1JuZGlzVW5kaVJlY2VpdmVGaWx0ZXIgKA0KPiArICBJTiAgUFhFX0NEQiAg ICpDZGIsDQo+ICsgIElOICBOSUNfREFUQSAgKk5pYw0KPiArICApDQo+ICt7DQo+ICsgIEVGSV9T VEFUVVMgICAgICAgICAgICAgICAgICAgU3RhdHVzOw0KPiArICBVSU5UOCAgICAgICAgICAgICAg ICAgICAgICAgICpNY2FzdExpc3Q7DQo+ICsgIFVJTlQ4ICAgICAgICAgICAgICAgICAgICAgICAg Q291bnQgPSAwOw0KPiArICBVSU5UOCAgICAgICAgICAgICAgICAgICAgICAgIEluZGV4MTsNCj4g KyAgVUlOVDggICAgICAgICAgICAgICAgICAgICAgICBJbmRleDI7DQo+ICsgIFVJTlQ2NCAgICAg ICAgICAgICAgICAgICAgICAgQ3BiQWRkciAgID0gQ2RiLT5DUEJhZGRyOw0KPiArICBVSU5UMzIg ICAgICAgICAgICAgICAgICAgICAgIENwYlNpemUgICA9IENkYi0+Q1BCc2l6ZTsNCj4gKyAgVUlO VDE2ICAgICAgICAgICAgICAgICAgICAgICBTZXRGaWx0ZXIgPSAoVUlOVDE2KShDZGItPk9wRmxh Z3MgJiAweDFGKTsNCj4gKyAgUFhFX0NQQl9SRUNFSVZFX0ZJTFRFUlMgICAgICAqQ3BiICAgICAg PSAoUFhFX0NQQl9SRUNFSVZFX0ZJTFRFUlMNCj4gKikoVUlOVE4pQ3BiQWRkcjsNCj4gKyAgVVNC X0VUSEVSTkVUX0ZVTl9ERVNDUklQVE9SICBVc2JFdGhGdW5EZXNjcmlwdG9yOw0KPiArDQo+ICsg IC8vIFRoZSBDcGIgY291bGQgYmUgTlVMTC4ocmVmOlBYRV9DUEJBRERSX05PVF9VU0VEKQ0KPiAr ICBOaWMtPlJ4RmlsdGVyID0gKFVJTlQ4KVNldEZpbHRlcjsNCj4gKw0KPiArICBpZiAoKChTZXRG aWx0ZXIgJiBQWEVfT1BGTEFHU19SRUNFSVZFX0ZJTFRFUl9GSUxURVJFRF9NVUxUSUNBU1QpICE9 DQo+IDApIHx8IChDcGIgIT0gTlVMTCkpIHsNCj4gKyAgICBpZiAoQ3BiICE9IE5VTEwpIHsNCj4g KyAgICAgIE5pYy0+TWNhc3RDb3VudCA9IChVSU5UOCkoQ3BiU2l6ZSAvIFBYRV9NQUNfTEVOR1RI KTsNCj4gKyAgICAgIENvcHlNZW0gKCZOaWMtPk1jYXN0TGlzdCwgQ3BiLCBOaWMtPk1jYXN0Q291 bnQpOw0KPiArICAgIH0gZWxzZSB7DQo+ICsgICAgICBOaWMtPk1jYXN0Q291bnQgPSAwOw0KPiAr ICAgIH0NCj4gKw0KPiArICAgIGlmIChOaWMtPkNhblJlY2VpdmUpIHsNCj4gKyAgICAgIE5pYy0+ Q2FuUmVjZWl2ZSA9IEZBTFNFOw0KPiArICAgIH0NCj4gKw0KPiArICAgIE5pYy0+VXNiRXRoLT5V c2JFdGhGdW5EZXNjcmlwdG9yIChOaWMtPlVzYkV0aCwNCj4gJlVzYkV0aEZ1bkRlc2NyaXB0b3Ip Ow0KPiArICAgIGlmICgoVXNiRXRoRnVuRGVzY3JpcHRvci5OdW1iZXJNY0ZpbHRlcnMgPDwgMSkg PT0gMCkgew0KPiArICAgICAgTmljLT5SeEZpbHRlciB8PSBQWEVfT1BGTEFHU19SRUNFSVZFX0ZJ TFRFUl9BTExfTVVMVElDQVNUOw0KPiArICAgICAgREVCVUcgKChERUJVR19JTkZPLCAiU2V0VXNi RXRoUGFja2V0RmlsdGVyIE5pYyAlbHggTmljLT5Vc2JFdGggJWx4DQo+ICIsIE5pYywgTmljLT5V c2JFdGgpKTsNCj4gKyAgICAgIE5pYy0+VXNiRXRoLT5TZXRVc2JFdGhQYWNrZXRGaWx0ZXIgKE5p Yy0+VXNiRXRoLCBOaWMtPlJ4RmlsdGVyKTsNCj4gKyAgICB9IGVsc2Ugew0KPiArICAgICAgU3Rh dHVzID0gZ0JTLT5BbGxvY2F0ZVBvb2wgKEVmaUJvb3RTZXJ2aWNlc0RhdGEsIE5pYy0+TWNhc3RD b3VudCAqIDYsDQo+IChWT0lEICoqKSZNY2FzdExpc3QpOw0KPiArICAgICAgaWYgKEVGSV9FUlJP UiAoU3RhdHVzKSkgew0KPiArICAgICAgICByZXR1cm4gUFhFX1NUQVRDT0RFX0lOVkFMSURfUEFS QU1FVEVSOw0KPiArICAgICAgfQ0KPiArDQo+ICsgICAgICBpZiAoQ3BiICE9IE5VTEwpIHsNCj4g KyAgICAgICAgZm9yIChJbmRleDEgPSAwOyBJbmRleDEgPCBOaWMtPk1jYXN0Q291bnQ7IEluZGV4 MSsrKSB7DQo+ICsgICAgICAgICAgZm9yIChJbmRleDIgPSAwOyBJbmRleDIgPCA2OyBJbmRleDIr Kykgew0KPiArICAgICAgICAgICAgTWNhc3RMaXN0W0NvdW50KytdID0gQ3BiLT5NQ2FzdExpc3Rb SW5kZXgxXVtJbmRleDJdOw0KPiArICAgICAgICAgIH0NCj4gKyAgICAgICAgfQ0KPiArICAgICAg fQ0KPiArDQo+ICsgICAgICBOaWMtPlJ4RmlsdGVyIHw9IFBYRV9PUEZMQUdTX1JFQ0VJVkVfRklM VEVSX0ZJTFRFUkVEX01VTFRJQ0FTVDsNCj4gKyAgICAgIGlmIChDcGIgIT0gTlVMTCkgew0KPiAr ICAgICAgICBOaWMtPlVzYkV0aC0+U2V0VXNiRXRoTWNhc3RGaWx0ZXIgKE5pYy0+VXNiRXRoLCBO aWMtPk1jYXN0Q291bnQsDQo+IE1jYXN0TGlzdCk7DQo+ICsgICAgICB9DQo+ICsNCj4gKyAgICAg IE5pYy0+VXNiRXRoLT5TZXRVc2JFdGhQYWNrZXRGaWx0ZXIgKE5pYy0+VXNiRXRoLCBOaWMtPlJ4 RmlsdGVyKTsNCj4gKyAgICAgIGdCUy0+RnJlZVBvb2wgKE1jYXN0TGlzdCk7DQo+ICsgICAgfQ0K PiArICB9DQo+ICsNCj4gKyAgcmV0dXJuIEVGSV9TVUNDRVNTOw0KPiArfQ0KPiArDQo+ICsvKioN Cj4gKyAgVGhpcyByZXF1ZXN0IGlzIHVzZWQgdG8gY29uZmlndXJlIGRldmljZSBFdGhlcm5ldCBw YWNrZXQgZmlsdGVyIHNldHRpbmdzLg0KPiArDQo+ICsgIEBwYXJhbVtpbl0gIFRoaXMgICAgICAg ICAgICAgIEEgcG9pbnRlciB0byB0aGUgRURLSUlfVVNCX0VUSEVSTkVUX1BST1RPQ09MDQo+IGlu c3RhbmNlLg0KPiArICBAcGFyYW1baW5dICBWYWx1ZSAgICAgICAgICAgICBQYWNrZXQgRmlsdGVy IEJpdG1hcC4NCj4gKw0KPiArICBAcmV0dmFsIEVGSV9TVUNDRVNTICAgICAgICAgICBUaGUgcmVx dWVzdCBleGVjdXRlZCBzdWNjZXNzZnVsbHkuDQo+ICsgIEByZXR2YWwgRUZJX1RJTUVPVVQgICAg ICAgICAgIEEgdGltZW91dCBvY2N1cnJlZCBleGVjdXRpbmcgdGhlIHJlcXVlc3QuDQo+ICsgIEBy ZXR2YWwgRUZJX0RFVklDRV9FUlJPUiAgICAgIFRoZSByZXF1ZXN0IGZhaWxlZCBkdWUgdG8gYSBk ZXZpY2UgZXJyb3IuDQo+ICsgIEByZXR2YWwgRUZJX0lOVkFMSURfUEFSQU1FVEVSIE9uZSBvZiB0 aGUgcGFyYW1ldGVycyBoYXMgYW4gaW52YWxpZA0KPiB2YWx1ZS4NCj4gKyAgQHJldHZhbCBFRklf VU5TVVBQT1JURUQgICAgICAgTm90IHN1cHBvcnRlZC4NCj4gKw0KPiArKiovDQo+ICtFRklfU1RB VFVTDQo+ICtFRklBUEkNCj4gK1NldFVzYlJuZGlzUGFja2V0RmlsdGVyICgNCj4gKyAgSU4gRURL SUlfVVNCX0VUSEVSTkVUX1BST1RPQ09MICAqVGhpcywNCj4gKyAgSU4gVUlOVDE2ICAgICAgICAg ICAgICAgICAgICAgICBWYWx1ZQ0KPiArICApDQo+ICt7DQo+ICsgIHJldHVybiBFRklfU1VDQ0VT UzsNCj4gK30NCj4gKw0KPiArLyoqDQo+ICsgIFRoaXMgcmVxdWVzdCBpcyB1c2VkIHRvIHJldHJp ZXZlIGEgc3RhdGlzdGljIGJhc2VkIG9uIHRoZSBmZWF0dXJlIHNlbGVjdG9yLg0KPiArDQo+ICsg IEBwYXJhbVtpbl0gIFRoaXMgICAgICAgICAgICAgICAgICBBIHBvaW50ZXIgdG8gdGhlDQo+IEVE S0lJX1VTQl9FVEhFUk5FVF9QUk9UT0NPTCBpbnN0YW5jZS4NCj4gKyAgQHBhcmFtW2luXSAgRmVh dHVyZVNlbGVjdG9yICAgICAgIFZhbHVlIG9mIHRoZSBmZWF0dXJlIHNlbGVjdG9yLg0KPiArICBA cGFyYW1bb3V0XSBTdGF0aXN0aWMgICAgICAgICAgICAgQSBwb2ludGVyIHRvIHRoZSAzMiBiaXQg dW5zaWduZWQgaW50ZWdlci4NCj4gKw0KPiArICBAcmV0dmFsIEVGSV9TVUNDRVNTICAgICAgICAg ICBUaGUgcmVxdWVzdCBleGVjdXRlZCBzdWNjZXNzZnVsbHkuDQo+ICsgIEByZXR2YWwgRUZJX1RJ TUVPVVQgICAgICAgICAgIEEgdGltZW91dCBvY2N1cnJlZCBleGVjdXRpbmcgdGhlIHJlcXVlc3Qu DQo+ICsgIEByZXR2YWwgRUZJX0RFVklDRV9FUlJPUiAgICAgIFRoZSByZXF1ZXN0IGZhaWxlZCBk dWUgdG8gYSBkZXZpY2UgZXJyb3IuDQo+ICsgIEByZXR2YWwgRUZJX0lOVkFMSURfUEFSQU1FVEVS IE9uZSBvZiB0aGUgcGFyYW1ldGVycyBoYXMgYW4gaW52YWxpZA0KPiB2YWx1ZS4NCj4gKyAgQHJl dHZhbCBFRklfVU5TVVBQT1JURUQgICAgICAgTm90IHN1cHBvcnRlZC4NCj4gKw0KPiArKiovDQo+ ICtFRklfU1RBVFVTDQo+ICtFRklBUEkNCj4gK0dldFJuZGlzU3RhdGlzdGljICgNCj4gKyAgSU4g IEVES0lJX1VTQl9FVEhFUk5FVF9QUk9UT0NPTCAgKlRoaXMsDQo+ICsgIElOICBVSU5UMTYgICAg ICAgICAgICAgICAgICAgICAgIEZlYXR1cmVTZWxlY3RvciwNCj4gKyAgT1VUIFZPSUQgICAgICAg ICAgICAgICAgICAgICAgICAgKlN0YXRpc3RpYw0KPiArICApDQo+ICt7DQo+ICsgIHJldHVybiBF RklfU1VDQ0VTUzsNCj4gK30NCj4gKw0KPiArLyoqDQo+ICsgIFRoaXMgZnVuY3Rpb24gaXMgY2Fs bGVkIHdoZW4gVW5kaVN0YXJ0IGlzIGludm9rZWQuDQo+ICsNCj4gKyAgQHBhcmFtW2luXSAgQ2Ri ICBBIHBvaW50ZXIgdG8gdGhlIGNvbW1hbmQgZGVzY3JpcHRvciBibG9jay4NCj4gKyAgQHBhcmFt W2luXSAgTmljICBBIHBvaW50ZXIgdG8gdGhlIE5ldHdvcmsgaW50ZXJmYWNlIGNvbnRyb2xsZXIg ZGF0YS4NCj4gKw0KPiArICBAcmV0dmFsIEVGSV9TVUNDRVNTICAgICBUaGUgcmVxdWVzdCBleGVj dXRlZCBzdWNjZXNzZnVsbHkuDQo+ICsNCj4gKyoqLw0KPiArRUZJX1NUQVRVUw0KPiArRUZJQVBJ DQo+ICtSbmRpc1VuZGlTdGFydCAoDQo+ICsgIElOICBQWEVfQ0RCICAgKkNkYiwNCj4gKyAgSU4g IE5JQ19EQVRBICAqTmljDQo+ICsgICkNCj4gK3sNCj4gKyAgRUZJX1NUQVRVUyAgU3RhdHVzOw0K PiArDQo+ICsgIERFQlVHICgoREVCVUdfSU5GTywgIlJuZGlzVW5kaVN0YXJ0IE5pYyAlbHggQ2Ri ICVseCBOaWMgU3RhdGUgJXhcbiIsDQo+IE5pYywgQ2RiLCBOaWMtPlN0YXRlKSk7DQo+ICsNCj4g KyAgLy8gSXNzdWUgUm5kaXMgUmVzZXQgYW5kIGJyaW5nIHRoZSBkZXZpY2UgdG8gUk5ESVNfQlVT X0lOSVRJQUxJWkVEIHN0YXRlDQo+ICsgIFN0YXR1cyA9IFJuZGlzVW5kaVJlc2V0IChDZGIsIE5p Yyk7DQo+ICsgIGlmIChFRklfRVJST1IgKFN0YXR1cykpIHsNCj4gKyAgICBSbmRpc1VuZGlSZXNl dCAoQ2RiLCBOaWMpOw0KPiArICB9DQo+ICsNCj4gKyAgU3RhdHVzID0gUm5kaXNVbmRpSW5pdGlh bGl6ZSAoQ2RiLCBOaWMpOw0KPiArICBpZiAoRUZJX0VSUk9SIChTdGF0dXMpKSB7DQo+ICsgICAg Um5kaXNVbmRpSW5pdGlhbGl6ZSAoQ2RiLCBOaWMpOw0KPiArICB9DQo+ICsNCj4gKyAgUm5kaXNV bmRpU2h1dGRvd24gKENkYiwgTmljKTsNCj4gKw0KPiArICByZXR1cm4gRUZJX1NVQ0NFU1M7DQo+ ICt9DQo+ICsNCj4gKy8qKg0KPiArICBUaGlzIGZ1bmN0aW9uIGlzIGNhbGxlZCB3aGVuIFVuZGlz dG9wIGlzIGludm9rZWQuDQo+ICsNCj4gKyAgQHBhcmFtW2luXSAgQ2RiICBBIHBvaW50ZXIgdG8g dGhlIGNvbW1hbmQgZGVzY3JpcHRvciBibG9jay4NCj4gKyAgQHBhcmFtW2luXSAgTmljICBBIHBv aW50ZXIgdG8gdGhlIE5ldHdvcmsgaW50ZXJmYWNlIGNvbnRyb2xsZXIgZGF0YS4NCj4gKw0KPiAr ICBAcmV0dmFsIEVGSV9TVUNDRVNTICAgICBUaGUgcmVxdWVzdCBleGVjdXRlZCBzdWNjZXNzZnVs bHkuDQo+ICsqKi8NCj4gK0VGSV9TVEFUVVMNCj4gK0VGSUFQSQ0KPiArUm5kaXNVbmRpU3RvcCAo DQo+ICsgIElOICBQWEVfQ0RCICAgKkNkYiwNCj4gKyAgSU4gIE5JQ19EQVRBICAqTmljDQo+ICsg ICkNCj4gK3sNCj4gKyAgREVCVUcgKChERUJVR19JTkZPLCAiUm5kaXNVbmRpU3RvcCBTdGF0ZSAl eFxuIiwgTmljLT5TdGF0ZSkpOw0KPiArICByZXR1cm4gRUZJX1NVQ0NFU1M7DQo+ICt9DQo+ICsN Cj4gKy8qKg0KPiArICBUaGlzIGZ1bmN0aW9uIGlzIGNhbGxlZCB3aGVuIFVuZGlHZXRJbml0SW5m byBpcyBpbnZva2VkLg0KPiArDQo+ICsgIEBwYXJhbVtpbl0gIENkYiAgQSBwb2ludGVyIHRvIHRo ZSBjb21tYW5kIGRlc2NyaXB0b3IgYmxvY2suDQo+ICsgIEBwYXJhbVtpbl0gIE5pYyAgQSBwb2lu dGVyIHRvIHRoZSBOZXR3b3JrIGludGVyZmFjZSBjb250cm9sbGVyIGRhdGEuDQo+ICsNCj4gKyAg QHJldHZhbCBFRklfU1VDQ0VTUyAgICAgVGhlIHJlcXVlc3QgZXhlY3V0ZWQgc3VjY2Vzc2Z1bGx5 Lg0KPiArDQo+ICsqKi8NCj4gK0VGSV9TVEFUVVMNCj4gK0VGSUFQSQ0KPiArUm5kaXNVbmRpR2V0 SW5pdEluZm8gKA0KPiArICBJTiAgUFhFX0NEQiAgICpDZGIsDQo+ICsgIElOICBOSUNfREFUQSAg Kk5pYw0KPiArICApDQo+ICt7DQo+ICsgIEVES0lJX1VTQl9FVEhFUk5FVF9QUk9UT0NPTCAgKlVz YkV0aERldmljZSAgID0gTmljLT5Vc2JFdGg7DQo+ICsgIFVTQl9STkRJU19ERVZJQ0UgICAgICAg ICAgICAgKlVzYlJuZGlzRGV2aWNlID0NCj4gVVNCX1JORElTX0RFVklDRV9GUk9NX1RISVMgKFVz YkV0aERldmljZSk7DQo+ICsgIFBYRV9EQl9HRVRfSU5JVF9JTkZPICAgICAgICAgKkRiOw0KPiAr DQo+ICsgIERFQlVHICgoREVCVUdfSU5GTywgIlJuZGlzVW5kaUdldEluaXRJbmZvXG4iKSk7DQo+ ICsNCj4gKyAgRGIgPSAoUFhFX0RCX0dFVF9JTklUX0lORk8gKikoVUlOVE4pQ2RiLT5EQmFkZHI7 DQo+ICsNCj4gKyAgRGItPkZyYW1lRGF0YUxlbiA9IFVzYlJuZGlzRGV2aWNlLT5NYXhUcmFuc2Zl clNpemUgLSBzaXplb2YNCj4gKFJFTU9URV9ORElTX1BBQ0tFVF9NU0cpIC0gUFhFX01BQ19IRUFE RVJfTEVOX0VUSEVSOw0KPiArICAvLyBMaW1pdCBNYXggTVRVIHNpemUgdG8gMTUwMCBieXRlcyBh cyBSTkRJUyBzcGVjLg0KPiArICBpZiAoRGItPkZyYW1lRGF0YUxlbiA+IFBYRV9NQVhfVFhSWF9V TklUX0VUSEVSKSB7DQo+ICsgICAgRGItPkZyYW1lRGF0YUxlbiA9IFBYRV9NQVhfVFhSWF9VTklU X0VUSEVSOw0KPiArICB9DQo+ICsNCj4gKyAgREVCVUcgKChERUJVR19JTkZPLCAiRGItPkZyYW1l RGF0YUxlbiAleFxuIiwgRGItPkZyYW1lRGF0YUxlbikpOw0KPiArDQo+ICsgIHJldHVybiBFRklf U1VDQ0VTUzsNCj4gK30NCj4gKw0KPiArLyoqDQo+ICsgIFRoaXMgZnVuY3Rpb24gaXMgY2FsbGVk IHdoZW4gUm5kaXNVbmRpR2V0Q29uZmlnSW5mbyBpcyBpbnZva2VkLg0KPiArDQo+ICsgIEBwYXJh bVtpbl0gIENkYiAgQSBwb2ludGVyIHRvIHRoZSBjb21tYW5kIGRlc2NyaXB0b3IgYmxvY2suDQo+ ICsgIEBwYXJhbVtpbl0gIE5pYyAgQSBwb2ludGVyIHRvIHRoZSBOZXR3b3JrIGludGVyZmFjZSBj b250cm9sbGVyIGRhdGEuDQo+ICsNCj4gKyAgQHJldHZhbCBFRklfU1VDQ0VTUyAgICAgVGhlIHJl cXVlc3QgZXhlY3V0ZWQgc3VjY2Vzc2Z1bGx5Lg0KPiArDQo+ICsqKi8NCj4gK0VGSV9TVEFUVVMN Cj4gK0VGSUFQSQ0KPiArUm5kaXNVbmRpR2V0Q29uZmlnSW5mbyAoDQo+ICsgIElOICBQWEVfQ0RC ICAgKkNkYiwNCj4gKyAgSU4gIE5JQ19EQVRBICAqTmljDQo+ICsgICkNCj4gK3sNCj4gKyAgREVC VUcgKChERUJVR19JTkZPLCAiUm5kaXNVbmRpR2V0Q29uZmlnSW5mb1xuIikpOw0KPiArICByZXR1 cm4gRUZJX1NVQ0NFU1M7DQo+ICt9DQo+ICsNCj4gKy8qKg0KPiArICBUaGlzIGZ1bmN0aW9uIGlz IGNhbGxlZCB3aGVuIFVuZGlJbml0aWFsaXplIGlzIGludm9rZWQuDQo+ICsNCj4gKyAgQHBhcmFt W2luXSAgQ2RiICBBIHBvaW50ZXIgdG8gdGhlIGNvbW1hbmQgZGVzY3JpcHRvciBibG9jay4NCj4g KyAgQHBhcmFtW2luXSAgTmljICBBIHBvaW50ZXIgdG8gdGhlIE5ldHdvcmsgaW50ZXJmYWNlIGNv bnRyb2xsZXIgZGF0YS4NCj4gKw0KPiArICBAcmV0dmFsIEVGSV9TVUNDRVNTICAgICAgICAgICBU aGUgcmVxdWVzdCBleGVjdXRlZCBzdWNjZXNzZnVsbHkuDQo+ICsgIEByZXR2YWwgRUZJX1VOU1VQ UE9SVEVEICAgICAgIE5vdCBzdXBwb3J0ZWQuDQo+ICsNCj4gKyoqLw0KPiArRUZJX1NUQVRVUw0K PiArRUZJQVBJDQo+ICtSbmRpc1VuZGlJbml0aWFsaXplICgNCj4gKyAgSU4gIFBYRV9DREIgICAq Q2RiLA0KPiArICBJTiAgTklDX0RBVEEgICpOaWMNCj4gKyAgKQ0KPiArew0KPiArICBFREtJSV9V U0JfRVRIRVJORVRfUFJPVE9DT0wgICAqVXNiRXRoRHJpdmVyICAgPSBOaWMtPlVzYkV0aDsNCj4g KyAgVVNCX1JORElTX0RFVklDRSAgICAgICAgICAgICAgKlVzYlJuZGlzRGV2aWNlID0NCj4gVVNC X1JORElTX0RFVklDRV9GUk9NX1RISVMgKFVzYkV0aERyaXZlcik7DQo+ICsgIFJFTU9URV9ORElT X0lOSVRJQUxJWkVfTVNHICAgIFJuZGlzSW5pdE1zZzsNCj4gKyAgUkVNT1RFX05ESVNfSU5JVElB TElaRV9DTVBMVCAgUm5kaXNJbml0TXNnQ21wbHQ7DQo+ICsgIEVGSV9TVEFUVVMgICAgICAgICAg ICAgICAgICAgIFN0YXR1czsNCj4gKw0KPiArICBERUJVRyAoKERFQlVHX0lORk8sICJSbmRpc1Vu ZGlJbml0aWFsaXplXG4iKSk7DQo+ICsNCj4gKyAgWmVyb01lbSAoJlJuZGlzSW5pdE1zZywgc2l6 ZW9mIChSRU1PVEVfTkRJU19JTklUSUFMSVpFX01TRykpOw0KPiArICBaZXJvTWVtICgmUm5kaXNJ bml0TXNnQ21wbHQsIHNpemVvZg0KPiAoUkVNT1RFX05ESVNfSU5JVElBTElaRV9DTVBMVCkpOw0K PiArDQo+ICsgIFJuZGlzSW5pdE1zZy5NZXNzYWdlVHlwZSAgICAgPSBSTkRJU19JTklUSUFMSVpF X01TRzsNCj4gKyAgUm5kaXNJbml0TXNnLk1lc3NhZ2VMZW5ndGggICA9IHNpemVvZiAoUkVNT1RF X05ESVNfSU5JVElBTElaRV9NU0cpOw0KPiArICBSbmRpc0luaXRNc2cuUmVxdWVzdElEICAgICAg ID0gVXNiUm5kaXNEZXZpY2UtPlJlcXVlc3RJZDsNCj4gKyAgUm5kaXNJbml0TXNnLk1ham9yVmVy c2lvbiAgICA9IFJORElTX01BSk9SX1ZFUlNJT047DQo+ICsgIFJuZGlzSW5pdE1zZy5NaW5vclZl cnNpb24gICAgPSBSTkRJU19NSU5PUl9WRVJTSU9OOw0KPiArICBSbmRpc0luaXRNc2cuTWF4VHJh bnNmZXJTaXplID0gUk5ESVNfTUFYX1RSQU5TRkVSX1NJWkU7DQo+ICsNCj4gKyAgUm5kaXNJbml0 TXNnQ21wbHQuTWVzc2FnZVR5cGUgICA9IFJORElTX0lOSVRJQUxJWkVfQ01QTFQ7DQo+ICsgIFJu ZGlzSW5pdE1zZ0NtcGx0Lk1lc3NhZ2VMZW5ndGggPSBzaXplb2YNCj4gKFJFTU9URV9ORElTX0lO SVRJQUxJWkVfQ01QTFQpOw0KPiArDQo+ICsgIFN0YXR1cyA9IFJuZGlzQ29udHJvbE1zZyAoVXNi Um5kaXNEZXZpY2UsDQo+IChSRU1PVEVfTkRJU19NU0dfSEVBREVSICopJlJuZGlzSW5pdE1zZywN Cj4gKFJFTU9URV9ORElTX01TR19IRUFERVIgKikmUm5kaXNJbml0TXNnQ21wbHQpOw0KPiArDQo+ ICsgIFVzYlJuZGlzRGV2aWNlLT5SZXF1ZXN0SWQrKzsNCj4gKw0KPiArICBpZiAoRUZJX0VSUk9S IChTdGF0dXMpIHx8IChSbmRpc0luaXRNc2dDbXBsdC5TdGF0dXMgJiAweDgwMDAwMDAwKSkgew0K PiArICAgIHJldHVybiBTdGF0dXM7DQo+ICsgIH0NCj4gKw0KPiArICAvLyBPbmx5IFdpcmVkIE1l ZGl1bSBpcyBzdXBwb3J0ZWQNCj4gKyAgaWYgKFJuZGlzSW5pdE1zZ0NtcGx0Lk1lZGl1bSkgew0K PiArICAgIHJldHVybiBFRklfVU5TVVBQT1JURUQ7DQo+ICsgIH0NCj4gKw0KPiArICBVc2JSbmRp c0RldmljZS0+TWVkaXVtICAgICAgICAgICAgICAgID0gUm5kaXNJbml0TXNnQ21wbHQuTWVkaXVt Ow0KPiArICBVc2JSbmRpc0RldmljZS0+TWF4UGFja2V0c1BlclRyYW5zZmVyID0NCj4gUm5kaXNJ bml0TXNnQ21wbHQuTWF4UGFja2V0c1BlclRyYW5zZmVyOw0KPiArICBVc2JSbmRpc0RldmljZS0+ TWF4VHJhbnNmZXJTaXplICAgICAgID0NCj4gUm5kaXNJbml0TXNnQ21wbHQuTWF4VHJhbnNmZXJT aXplOw0KPiArICBVc2JSbmRpc0RldmljZS0+UGFja2V0QWxpZ25tZW50RmFjdG9yID0NCj4gUm5k aXNJbml0TXNnQ21wbHQuUGFja2V0QWxpZ25tZW50RmFjdG9yOw0KPiArDQo+ICsgIERFQlVHICgo REVCVUdfSU5GTywgIk1lZGl1bSA6ICV4IFxuIiwgUm5kaXNJbml0TXNnQ21wbHQuTWVkaXVtKSk7 DQo+ICsgIERFQlVHICgoREVCVUdfSU5GTywgIk1heFBhY2tldHNQZXJUcmFuc2ZlciA6ICV4IFxu IiwNCj4gUm5kaXNJbml0TXNnQ21wbHQuTWF4UGFja2V0c1BlclRyYW5zZmVyKSk7DQo+ICsgIERF QlVHICgoREVCVUdfSU5GTywgIk1heFRyYW5zZmVyU2l6ZSA6ICV4XG4iLA0KPiBSbmRpc0luaXRN c2dDbXBsdC5NYXhUcmFuc2ZlclNpemUpKTsNCj4gKyAgREVCVUcgKChERUJVR19JTkZPLCAiUGFj a2V0QWxpZ25tZW50RmFjdG9yIDogJXhcbiIsDQo+IFJuZGlzSW5pdE1zZ0NtcGx0LlBhY2tldEFs aWdubWVudEZhY3RvcikpOw0KPiArDQo+ICsgIHJldHVybiBTdGF0dXM7DQo+ICt9DQo+ICsNCj4g Ky8qKg0KPiArICBUaGlzIGZ1bmN0aW9uIGlzIGNhbGxlZCB3aGVuIFVuZGlSZXNldCBpcyBpbnZv a2VkLg0KPiArDQo+ICsgIEBwYXJhbVtpbl0gIENkYiAgQSBwb2ludGVyIHRvIHRoZSBjb21tYW5k IGRlc2NyaXB0b3IgYmxvY2suDQo+ICsgIEBwYXJhbVtpbl0gIE5pYyAgQSBwb2ludGVyIHRvIHRo ZSBOZXR3b3JrIGludGVyZmFjZSBjb250cm9sbGVyIGRhdGEuDQo+ICsNCj4gKyAgQHJldHZhbCBF RklfU1VDQ0VTUyAgICAgICAgICAgVGhlIHJlcXVlc3QgZXhlY3V0ZWQgc3VjY2Vzc2Z1bGx5Lg0K PiArICBAcmV0dmFsIEVGSV9ERVZJQ0VfRVJST1IgICAgICBUaGUgcmVxdWVzdCBmYWlsZWQgZHVl IHRvIGEgZGV2aWNlIGVycm9yLg0KPiArDQo+ICsqKi8NCj4gK0VGSV9TVEFUVVMNCj4gK0VGSUFQ SQ0KPiArUm5kaXNVbmRpUmVzZXQgKA0KPiArICBJTiAgUFhFX0NEQiAgICpDZGIsDQo+ICsgIElO ICBOSUNfREFUQSAgKk5pYw0KPiArICApDQo+ICt7DQo+ICsgIEVES0lJX1VTQl9FVEhFUk5FVF9Q Uk9UT0NPTCAgKlVzYkV0aERyaXZlciAgID0gTmljLT5Vc2JFdGg7DQo+ICsgIFVTQl9STkRJU19E RVZJQ0UgICAgICAgICAgICAgKlVzYlJuZGlzRGV2aWNlID0NCj4gVVNCX1JORElTX0RFVklDRV9G Uk9NX1RISVMgKFVzYkV0aERyaXZlcik7DQo+ICsgIFJFTU9URV9ORElTX1JFU0VUX01TRyAgICAg ICAgUm5kaXNSZXNldE1zZzsNCj4gKyAgUkVNT1RFX05ESVNfUkVTRVRfQ01QTFQgICAgICBSbmRp c1Jlc2V0Q21wbHQ7DQo+ICsgIEVGSV9TVEFUVVMgICAgICAgICAgICAgICAgICAgU3RhdHVzOw0K PiArDQo+ICsgIERFQlVHICgoREVCVUdfSU5GTywgIlJuZGlzVW5kaVJlc2V0XG4iKSk7DQo+ICsN Cj4gKyAgWmVyb01lbSAoJlJuZGlzUmVzZXRNc2csIHNpemVvZiAoUkVNT1RFX05ESVNfUkVTRVRf TVNHKSk7DQo+ICsgIFplcm9NZW0gKCZSbmRpc1Jlc2V0Q21wbHQsIHNpemVvZiAoUkVNT1RFX05E SVNfUkVTRVRfQ01QTFQpKTsNCj4gKw0KPiArICBSbmRpc1Jlc2V0TXNnLk1lc3NhZ2VUeXBlICAg PSBSTkRJU19SRVNFVF9NU0c7DQo+ICsgIFJuZGlzUmVzZXRNc2cuTWVzc2FnZUxlbmd0aCA9IHNp emVvZiAoUkVNT1RFX05ESVNfUkVTRVRfTVNHKTsNCj4gKw0KPiArICBSbmRpc1Jlc2V0Q21wbHQu TWVzc2FnZVR5cGUgICA9IFJORElTX1JFU0VUX0NNUExUOw0KPiArICBSbmRpc1Jlc2V0Q21wbHQu TWVzc2FnZUxlbmd0aCA9IHNpemVvZiAoUkVNT1RFX05ESVNfUkVTRVRfQ01QTFQpOw0KPiArDQo+ ICsgIFN0YXR1cyA9IFJuZGlzQ29udHJvbE1zZyAoVXNiUm5kaXNEZXZpY2UsDQo+IChSRU1PVEVf TkRJU19NU0dfSEVBREVSICopJlJuZGlzUmVzZXRNc2csDQo+IChSRU1PVEVfTkRJU19NU0dfSEVB REVSICopJlJuZGlzUmVzZXRDbXBsdCk7DQo+ICsNCj4gKyAgVXNiUm5kaXNEZXZpY2UtPlJlcXVl c3RJZCA9IDE7ICAgICAgICAgIC8vIExldCdzIHN0YXJ0IHdpdGggMQ0KPiArDQo+ICsgIGlmIChF RklfRVJST1IgKFN0YXR1cykgfHwgKFJuZGlzUmVzZXRDbXBsdC5TdGF0dXMgJiAweDgwMDAwMDAw KSkgew0KPiArICAgIHJldHVybiBFRklfREVWSUNFX0VSUk9SOw0KPiArICB9DQo+ICsNCj4gKyAg cmV0dXJuIEVGSV9TVUNDRVNTOw0KPiArfQ0KPiArDQo+ICsvKioNCj4gKyAgVGhpcyBmdW5jdGlv biBpcyBjYWxsZWQgd2hlbiBVbmRpU2h1dGRvd24gaXMgaW52b2tlZC4NCj4gKw0KPiArICBAcGFy YW1baW5dICBDZGIgIEEgcG9pbnRlciB0byB0aGUgY29tbWFuZCBkZXNjcmlwdG9yIGJsb2NrLg0K PiArICBAcGFyYW1baW5dICBOaWMgIEEgcG9pbnRlciB0byB0aGUgTmV0d29yayBpbnRlcmZhY2Ug Y29udHJvbGxlciBkYXRhLg0KPiArDQo+ICsgIEByZXR2YWwgRUZJX1NVQ0NFU1MgICAgIFRoZSBy ZXF1ZXN0IGV4ZWN1dGVkIHN1Y2Nlc3NmdWxseS4NCj4gKw0KPiArKiovDQo+ICtFRklfU1RBVFVT DQo+ICtFRklBUEkNCj4gK1JuZGlzVW5kaVNodXRkb3duICgNCj4gKyAgSU4gIFBYRV9DREIgICAq Q2RiLA0KPiArICBJTiAgTklDX0RBVEEgICpOaWMNCj4gKyAgKQ0KPiArew0KPiArICBFREtJSV9V U0JfRVRIRVJORVRfUFJPVE9DT0wgICpVc2JFdGhEcml2ZXIgICA9IE5pYy0+VXNiRXRoOw0KPiAr ICBVU0JfUk5ESVNfREVWSUNFICAgICAgICAgICAgICpVc2JSbmRpc0RldmljZSA9DQo+IFVTQl9S TkRJU19ERVZJQ0VfRlJPTV9USElTIChVc2JFdGhEcml2ZXIpOw0KPiArICBSRU1PVEVfTkRJU19I QUxUX01TRyAgICAgICAgIFJuZGlzSGx0TXNnOw0KPiArICBFRklfU1RBVFVTICAgICAgICAgICAg ICAgICAgIFN0YXR1czsNCj4gKw0KPiArICBERUJVRyAoKERFQlVHX0lORk8sICJSbmRpc1VuZGlT aHV0ZG93blxuIikpOw0KPiArDQo+ICsgIFplcm9NZW0gKCZSbmRpc0hsdE1zZywgc2l6ZW9mIChS RU1PVEVfTkRJU19IQUxUX01TRykpOw0KPiArDQo+ICsgIFJuZGlzSGx0TXNnLk1lc3NhZ2VUeXBl ICAgPSBSTkRJU19ITFRfTVNHOw0KPiArICBSbmRpc0hsdE1zZy5NZXNzYWdlTGVuZ3RoID0gc2l6 ZW9mIChSRU1PVEVfTkRJU19IQUxUX01TRyk7DQo+ICsNCj4gKyAgU3RhdHVzID0gUm5kaXNDb250 cm9sTXNnIChVc2JSbmRpc0RldmljZSwNCj4gKFJFTU9URV9ORElTX01TR19IRUFERVIgKikmUm5k aXNIbHRNc2csIE5VTEwpOw0KPiArDQo+ICsgIGlmIChTdGF0dXMgPT0gRUZJX0RFVklDRV9FUlJP Uikgew0KPiArICAgIFN0YXR1cyA9IEVGSV9TVUNDRVNTOw0KPiArICB9DQo+ICsNCj4gKyAgVXNi Um5kaXNEZXZpY2UtPlJlcXVlc3RJZCA9IDE7DQo+ICsgIHJldHVybiBTdGF0dXM7DQo+ICt9DQo+ ICsNCj4gKy8qKg0KPiArICBVcGRhdGUgdGhlIE1lZGlhIGNvbm5lY3Rpb24uDQo+ICsNCj4gKyAg QHBhcmFtW2luXSAgQ2RiICBBIHBvaW50ZXIgdG8gdGhlIGNvbW1hbmQgZGVzY3JpcHRvciBibG9j ay4NCj4gKyAgQHBhcmFtW2luXSAgTmljICBBIHBvaW50ZXIgdG8gdGhlIE5ldHdvcmsgaW50ZXJm YWNlIGNvbnRyb2xsZXIgZGF0YS4NCj4gKw0KPiArICBAcmV0dmFsIEVGSV9TVUNDRVNTICAgICBU aGUgcmVxdWVzdCBleGVjdXRlZCBzdWNjZXNzZnVsbHkuDQo+ICsNCj4gKyoqLw0KPiArRUZJX1NU QVRVUw0KPiArRUZJQVBJDQo+ICtSbmRpc1VuZGlHZXRTdGF0dXMgKA0KPiArICBJTiAgUFhFX0NE QiAgICpDZGIsDQo+ICsgIElOICBOSUNfREFUQSAgKk5pYw0KPiArICApDQo+ICt7DQo+ICsgIENk Yi0+U3RhdEZsYWdzICY9IH4oUFhFX1NUQVRGTEFHU19HRVRfU1RBVFVTX05PX01FRElBKTsNCj4g KyAgcmV0dXJuIEVGSV9TVUNDRVNTOw0KPiArfQ0KPiArDQo+ICsvKioNCj4gKyAgVHJhbnNtaXQg dGhlIGRhdGEgYWZ0ZXIgYXBwZW5kaW5nIFJORElTIGhlYWRlci4NCj4gKw0KPiArICBAcGFyYW1b aW5dICAgICAgQ2RiICAgICAgICAgICBBIHBvaW50ZXIgdG8gdGhlIGNvbW1hbmQgZGVzY3JpcHRv ciBibG9jay4NCj4gKyAgQHBhcmFtW2luXSAgICAgIFRoaXMgICAgICAgICAgQSBwb2ludGVyIHRv IHRoZSBFREtJSV9VU0JfRVRIRVJORVRfUFJPVE9DT0wNCj4gaW5zdGFuY2UuDQo+ICsgIEBwYXJh bVtpbl0gICAgICBCdWxrT3V0RGF0YSAgIEEgcG9pbnRlciB0byB0aGUgYnVmZmVyIG9mIGRhdGEg dGhhdCB3aWxsIGJlDQo+IHRyYW5zbWl0dGVkIHRvIFVTQg0KPiArICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBkZXZpY2Ugb3IgcmVjZWl2ZWQgZnJvbSBVU0IgZGV2aWNlLg0KPiArICBA cGFyYW1baW4sIG91dF0gRGF0YUxlbmd0aCAgICBBIHBvaW50ZXIgdG8gdGhlIFBhY2tldExlbmd0 aC4NCj4gKw0KPiArICBAcmV0dmFsIEVGSV9TVUNDRVNTICAgICBUaGUgcmVxdWVzdCBleGVjdXRl ZCBzdWNjZXNzZnVsbHkuDQo+ICsNCj4gKyoqLw0KPiArRUZJX1NUQVRVUw0KPiArRUZJQVBJDQo+ ICtSbmRpc1VuZGlUcmFuc21pdCAoDQo+ICsgIElOICAgICAgUFhFX0NEQiAgICAgICAgICAgICAg ICAgICAgICAqQ2RiLA0KPiArICBJTiAgICAgIEVES0lJX1VTQl9FVEhFUk5FVF9QUk9UT0NPTCAg KlRoaXMsDQo+ICsgIElOICAgICAgVk9JRCAgICAgICAgICAgICAgICAgICAgICAgICAqQnVsa091 dERhdGEsDQo+ICsgIElOIE9VVCAgVUlOVE4gICAgICAgICAgICAgICAgICAgICAgICAqRGF0YUxl bmd0aA0KPiArICApDQo+ICt7DQo+ICsgIEVGSV9TVEFUVVMgICAgICAgICAgICAgIFN0YXR1czsN Cj4gKyAgVVNCX1JORElTX0RFVklDRSAgICAgICAgKlVzYlJuZGlzRGV2aWNlID0NCj4gVVNCX1JO RElTX0RFVklDRV9GUk9NX1RISVMgKFRoaXMpOw0KPiArICBSRU1PVEVfTkRJU19QQUNLRVRfTVNH ICAqUm5kaXNQYWNrZXRNc2c7DQo+ICsgIFVJTlROICAgICAgICAgICAgICAgICAgIFRyYW5zZmVy TGVuZ3RoOw0KPiArDQo+ICsgIERFQlVHICgoREVCVUdfSU5GTywgIlJuZGlzVW5kaVRyYW5zbWl0 IERhdGFMZW5ndGggOiAleFxuIiwNCj4gKkRhdGFMZW5ndGgpKTsNCj4gKw0KPiArICBTdGF0dXMg PSBnQlMtPkFsbG9jYXRlUG9vbCAoRWZpQm9vdFNlcnZpY2VzRGF0YSwgc2l6ZW9mDQo+IChSRU1P VEVfTkRJU19QQUNLRVRfTVNHKSArICpEYXRhTGVuZ3RoLCAoVk9JRCAqKikmUm5kaXNQYWNrZXRN c2cpOw0KPiArDQo+ICsgIFplcm9NZW0gKFJuZGlzUGFja2V0TXNnLCBzaXplb2YgKFJFTU9URV9O RElTX1BBQ0tFVF9NU0cpKTsNCj4gKw0KPiArICBSbmRpc1BhY2tldE1zZy0+TWVzc2FnZVR5cGUg ICA9IFJORElTX1BBQ0tFVF9NU0c7DQo+ICsgIFJuZGlzUGFja2V0TXNnLT5NZXNzYWdlTGVuZ3Ro ID0gc2l6ZW9mIChSRU1PVEVfTkRJU19QQUNLRVRfTVNHKQ0KPiArIChVSU5UMzIpKkRhdGFMZW5n dGg7DQo+ICsgIFJuZGlzUGFja2V0TXNnLT5EYXRhT2Zmc2V0ICAgID0gc2l6ZW9mIChSRU1PVEVf TkRJU19QQUNLRVRfTVNHKSAtIDg7DQo+ICsgIFJuZGlzUGFja2V0TXNnLT5EYXRhTGVuZ3RoICAg ID0gKFVJTlQzMikqRGF0YUxlbmd0aDsNCj4gKw0KPiArICBnQlMtPkNvcHlNZW0gKCgoVUlOVDgg KilSbmRpc1BhY2tldE1zZykgKyBzaXplb2YNCj4gKFJFTU9URV9ORElTX1BBQ0tFVF9NU0cpLCBC dWxrT3V0RGF0YSwgKkRhdGFMZW5ndGgpOw0KPiArDQo+ICsgIFRyYW5zZmVyTGVuZ3RoID0gUm5k aXNQYWNrZXRNc2ctPk1lc3NhZ2VMZW5ndGg7DQo+ICsNCj4gKyAgU3RhdHVzID0gUm5kaXNUcmFu c21pdERhdGFNc2cgKFVzYlJuZGlzRGV2aWNlLA0KPiAoUkVNT1RFX05ESVNfTVNHX0hFQURFUiAq KVJuZGlzUGFja2V0TXNnLCAmVHJhbnNmZXJMZW5ndGgpOw0KPiArDQo+ICsgIERFQlVHICgoREVC VUdfSU5GTywgIlxuUm5kaXNVbmRpVHJhbnNtaXQgVHJhbnNmZXJMZW5ndGggJWx4XG4iLA0KPiBU cmFuc2Zlckxlbmd0aCkpOw0KPiArDQo+ICsgIGdCUy0+RnJlZVBvb2wgKFJuZGlzUGFja2V0TXNn KTsNCj4gKw0KPiArICByZXR1cm4gU3RhdHVzOw0KPiArfQ0KPiArDQo+ICsvKioNCj4gKyAgUmVj ZWl2ZXMgYW5kIHJlbW92ZXMgUk5ESVMgaGVhZGVyIGFuZCByZXR1cm5zIHRoZSByYXcgZGF0YS4N Cj4gKw0KPiArICBAcGFyYW1baW5dICAgICAgQ2RiICAgICAgICAgICBBIHBvaW50ZXIgdG8gdGhl IGNvbW1hbmQgZGVzY3JpcHRvciBibG9jay4NCj4gKyAgQHBhcmFtW2luXSAgICAgIFRoaXMgICAg ICAgICAgQSBwb2ludGVyIHRvIHRoZSBFREtJSV9VU0JfRVRIRVJORVRfUFJPVE9DT0wNCj4gaW5z dGFuY2UuDQo+ICsgIEBwYXJhbVtpbiwgb3V0XSBCdWxrSW5EYXRhICAgIEEgcG9pbnRlciB0byB0 aGUgYnVmZmVyIG9mIGRhdGEgdGhhdCB3aWxsIGJlDQo+IHRyYW5zbWl0dGVkIHRvIFVTQg0KPiAr ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZXZpY2Ugb3IgcmVjZWl2ZWQgZnJvbSBV U0IgZGV2aWNlLg0KPiArICBAcGFyYW1baW4sIG91dF0gRGF0YUxlbmd0aCAgICBBIHBvaW50ZXIg dG8gdGhlIFBhY2tldExlbmd0aC4NCj4gKw0KPiArICBAcmV0dmFsIEVGSV9TVUNDRVNTICAgICAg ICAgICBUaGUgcmVxdWVzdCBleGVjdXRlZCBzdWNjZXNzZnVsbHkuDQo+ICsgIEByZXR2YWwgRUZJ X0JVRkZFUl9UT09fU01BTEwgIFRoZSB1c2VyIHByb3ZpZGVkIGJ1ZmZlciBpcyB0b28gc21hbGwN Cj4gKyAgQHJldHZhbCBFRklfTk9UX0ZPVU5EICAgICAgICAgTm8gYnVmZmVyIHdhcyBmb3VuZCBp biB0aGUgbGlzdC4NCj4gKw0KPiArKiovDQo+ICtFRklfU1RBVFVTDQo+ICtFRklBUEkNCj4gK1Ju ZGlzVW5kaVJlY2VpdmUgKA0KPiArICBJTiAgICAgUFhFX0NEQiAgICAgICAgICAgICAgICAgICAg ICAqQ2RiLA0KPiArICBJTiAgICAgRURLSUlfVVNCX0VUSEVSTkVUX1BST1RPQ09MICAqVGhpcywN Cj4gKyAgSU4gT1VUIFZPSUQgICAgICAgICAgICAgICAgICAgICAgICAgKkJ1bGtJbkRhdGEsDQo+ ICsgIElOIE9VVCBVSU5UTiAgICAgICAgICAgICAgICAgICAgICAgICpEYXRhTGVuZ3RoDQo+ICsg ICkNCj4gK3sNCj4gKyAgRUZJX1NUQVRVUyAgICAgICAgICAgICAgU3RhdHVzOw0KPiArICBVU0Jf Uk5ESVNfREVWSUNFICAgICAgICAqVXNiUm5kaXNEZXZpY2UgPQ0KPiBVU0JfUk5ESVNfREVWSUNF X0ZST01fVEhJUyAoVGhpcyk7DQo+ICsgIFJFTU9URV9ORElTX1BBQ0tFVF9NU0cgICpSbmRpc1Bh Y2tldE1zZzsNCj4gKyAgVUlOVE4gICAgICAgICAgICAgICAgICAgVHJhbnNmZXJMZW5ndGg7DQo+ ICsgIFZPSUQgICAgICAgICAgICAgICAgICAgICpCdWZmZXI7DQo+ICsgIFBBQ0tFVF9MSVNUICAg ICAgICAgICAgICpIZWFkUGFja2V0ID0gTlVMTDsNCj4gKyAgUEFDS0VUX0xJU1QgICAgICAgICAg ICAgKlBhY2tldExpc3Q7DQo+ICsgIFVJTlQzMiAgICAgICAgICAgICAgICAgIFJlY2VpdmVkQnl0 ZXMgPSAwOw0KPiArDQo+ICsgIC8vIENoZWNrIGlmIHRoZXJlIGlzIGFueSBvdXRzdGFuZGluZyBw YWNrZXQgdG8gcmVjZWl2ZQ0KPiArICAvLyBUaGUgYnVmZmVyIGFsbG9jYXRlZCBoYXMgYSBsaW5r ZWQgTGlzdCBmb2xsb3dlZCBieSB0aGUgcGFja2V0Lg0KPiArICBkbyB7DQo+ICsgICAgU3RhdHVz ICAgICAgICAgPSBnQlMtPkFsbG9jYXRlUG9vbCAoRWZpQm9vdFNlcnZpY2VzRGF0YSwgc2l6ZW9m IChQQUNLRVRfTElTVCkNCj4gKyBzaXplb2YgKFJFTU9URV9ORElTX1BBQ0tFVF9NU0cpICsgVXNi Um5kaXNEZXZpY2UtPk1heFRyYW5zZmVyU2l6ZSwNCj4gJkJ1ZmZlcik7DQo+ICsgICAgUm5kaXNQ YWNrZXRNc2cgPSAoUkVNT1RFX05ESVNfUEFDS0VUX01TRyAqKShzaXplb2YgKFBBQ0tFVF9MSVNU KQ0KPiArIChVSU5UOCAqKUJ1ZmZlcik7DQo+ICsgICAgUGFja2V0TGlzdCAgICAgPSAoUEFDS0VU X0xJU1QgKilCdWZmZXI7DQo+ICsgICAgLy8gU2F2ZSB0aGUgb3JpZ2luYWwgYWRkcmVzcyBmb3Ig ZnJlZWluZyBpdCB1cA0KPiArICAgIFBhY2tldExpc3QtPk9yZ0J1ZmZlciAgICAgICA9IEJ1ZmZl cjsNCj4gKyAgICBQYWNrZXRMaXN0LT5SZW1haW5pbmdMZW5ndGggPSBVc2JSbmRpc0RldmljZS0+ TWF4VHJhbnNmZXJTaXplOw0KPiArDQo+ICsgICAgWmVyb01lbSAoUm5kaXNQYWNrZXRNc2csIHNp emVvZiAoUkVNT1RFX05ESVNfUEFDS0VUX01TRykpOw0KPiArICAgIFRyYW5zZmVyTGVuZ3RoID0g VXNiUm5kaXNEZXZpY2UtPk1heFRyYW5zZmVyU2l6ZTsNCj4gKw0KPiArICAgIFN0YXR1cyA9IFJu ZGlzUmVjZWl2ZURhdGFNc2cgKFVzYlJuZGlzRGV2aWNlLA0KPiAoUkVNT1RFX05ESVNfTVNHX0hF QURFUiAqKVJuZGlzUGFja2V0TXNnLCAmVHJhbnNmZXJMZW5ndGgpOw0KPiArDQo+ICsgICAgaWYg KEVGSV9FUlJPUiAoU3RhdHVzKSB8fCAoVHJhbnNmZXJMZW5ndGggPT0gMCkpIHsNCj4gKyAgICAg IGdCUy0+RnJlZVBvb2wgKEJ1ZmZlcik7DQo+ICsgICAgICBicmVhazsNCj4gKyAgICB9DQo+ICsN Cj4gKyAgICAvLyBIYW5kbGUgTXVsdGlwbGUgcGFja2V0cw0KPiArICAgIGlmICgoUm5kaXNQYWNr ZXRNc2ctPk1lc3NhZ2VUeXBlID09IFJORElTX1BBQ0tFVF9NU0cpICYmDQo+IChSbmRpc1BhY2tl dE1zZy0+RGF0YU9mZnNldCA9PSBzaXplb2YgKFJFTU9URV9ORElTX1BBQ0tFVF9NU0cpIC0gOCkp DQo+IHsNCj4gKyAgICAgIC8vIEluc2VydCBQYWNrZXQNCj4gKyAgICAgIEluc2VydFRhaWxMaXN0 ICgmVXNiUm5kaXNEZXZpY2UtPlJlY2VpdmVQYWNrZXRMaXN0LCBCdWZmZXIpOw0KPiArICAgIH0N Cj4gKyAgfSB3aGlsZSAoMSk7DQo+ICsNCj4gKyAgLy8gQ2hlY2sgaWYgdGhleSBsaW5rZWQgbGlz dCBoYXMgYW55IHJlY2VpdmVkIGJ1ZmZlci4gSWYgeWVzIHJlcG9ydCBpdC4NCj4gKyAgaWYgKElz TGlzdEVtcHR5ICgmVXNiUm5kaXNEZXZpY2UtPlJlY2VpdmVQYWNrZXRMaXN0KSkgew0KPiArICAg IHJldHVybiBFRklfTk9UX0ZPVU5EOw0KPiArICB9DQo+ICsNCj4gKyAgSGVhZFBhY2tldCA9IChQ QUNLRVRfTElTVCAqKUdldEZpcnN0Tm9kZSAoJlVzYlJuZGlzRGV2aWNlLQ0KPiA+UmVjZWl2ZVBh Y2tldExpc3QpOw0KPiArDQo+ICsgIFJuZGlzUGFja2V0TXNnID0gKFJFTU9URV9ORElTX1BBQ0tF VF9NU0cgKikoKFVJTlQ4ICopSGVhZFBhY2tldA0KPiArIHNpemVvZiAoUEFDS0VUX0xJU1QpKTsN Cj4gKw0KPiArICBQcmludFJuZGlzTXNnICgoUkVNT1RFX05ESVNfTVNHX0hFQURFUiAqKVJuZGlz UGFja2V0TXNnKTsNCj4gKw0KPiArICBpZiAoKFJuZGlzUGFja2V0TXNnLT5NZXNzYWdlVHlwZSA9 PSBSTkRJU19QQUNLRVRfTVNHKSAmJg0KPiAoUm5kaXNQYWNrZXRNc2ctPkRhdGFPZmZzZXQgPT0g c2l6ZW9mIChSRU1PVEVfTkRJU19QQUNLRVRfTVNHKSAtIDgpKQ0KPiB7DQo+ICsgICAgaWYgKCpE YXRhTGVuZ3RoID49IFJuZGlzUGFja2V0TXNnLT5EYXRhTGVuZ3RoKSB7DQo+ICsgICAgICBnQlMt PkNvcHlNZW0gKEJ1bGtJbkRhdGEsIChVSU5UOCAqKVJuZGlzUGFja2V0TXNnICsNCj4gUm5kaXNQ YWNrZXRNc2ctPkRhdGFPZmZzZXQgKyA4LCBSbmRpc1BhY2tldE1zZy0+RGF0YUxlbmd0aCk7DQo+ ICsNCj4gKyAgICAgIFJlY2VpdmVkQnl0ZXMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICs9IFJuZGlzUGFja2V0TXNnLT5EYXRhTGVuZ3RoOw0KPiArICAgICAgQnVsa0luRGF0YSAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID0gKChVSU5UOCAqKUJ1bGtJbkRhdGEpICsg Um5kaXNQYWNrZXRNc2ctDQo+ID5EYXRhTGVuZ3RoOw0KPiArICAgICAgKChQQUNLRVRfTElTVCAq KUhlYWRQYWNrZXQpLT5SZW1haW5pbmdMZW5ndGggLT0gUm5kaXNQYWNrZXRNc2ctDQo+ID5EYXRh TGVuZ3RoOw0KPiArICAgIH0gZWxzZSB7DQo+ICsgICAgICBERUJVRyAoKERFQlVHX0VSUk9SLCAi Um5kaXNVbmRpUmVjZWl2ZTpCdWZmZXIgdG9vIHNtYWxsICV4XG4iLA0KPiBSbmRpc1BhY2tldE1z Zy0+RGF0YUxlbmd0aCkpOw0KPiArICAgICAgKkRhdGFMZW5ndGggPSBSbmRpc1BhY2tldE1zZy0+ RGF0YUxlbmd0aDsNCj4gKyAgICAgIHJldHVybiBFRklfQlVGRkVSX1RPT19TTUFMTDsNCj4gKyAg ICB9DQo+ICsNCj4gKyAgICAvLyBjaGVjayBpZiB0aGVyZSB0aGlzIGlzIGEgbXVsdGktcGFja2V0 IG1lc3NhZ2UuIElmIHNvIHVwZGF0ZSB0aGUgcG9pbnRlcg0KPiBzbyB0aGF0IG5leHQgUmVjZWl2 ZSBjYWxsIHdpbGwgcmV0dXJuIHRoYXQgZGF0YS4NCj4gKyAgICBSbmRpc1BhY2tldE1zZyA9IChS RU1PVEVfTkRJU19QQUNLRVRfTVNHICopKChVSU5UOA0KPiAqKVJuZGlzUGFja2V0TXNnICsgUm5k aXNQYWNrZXRNc2ctPkRhdGFMZW5ndGgpOw0KPiArICAgIFBhY2tldExpc3QgICAgID0gKFBBQ0tF VF9MSVNUICopKChVSU5UOCAqKVJuZGlzUGFja2V0TXNnIC0gc2l6ZW9mDQo+IChQQUNLRVRfTElT VCkpOw0KPiArDQo+ICsgICAgaWYgKChIZWFkUGFja2V0LT5SZW1haW5pbmdMZW5ndGggPiBzaXpl b2YNCj4gKFJFTU9URV9ORElTX1BBQ0tFVF9NU0cpKSAmJiBcDQo+ICsgICAgICAgIChSbmRpc1Bh Y2tldE1zZy0+TWVzc2FnZVR5cGUgPT0gUk5ESVNfUEFDS0VUX01TRykgJiYgXA0KPiArICAgICAg ICAoUm5kaXNQYWNrZXRNc2ctPkRhdGFPZmZzZXQgPT0gc2l6ZW9mIChSRU1PVEVfTkRJU19QQUNL RVRfTVNHKQ0KPiAtIDgpKQ0KPiArICAgIHsNCj4gKyAgICAgIC8vIE11bHRpLVBhY2tldCBtc2cg aXMgZm91bmQuIFNpbmNlIHRoZSBmaXJzdCBwYWNrZXQgaXMgY29uc3VtZWQsIHVwZGF0ZQ0KPiB0 aGUgbGlua2VkIGxpc3QgdG8gcG9pbnQgdGhpcyBuZXcgcGFja2V0Lg0KPiArICAgICAgUGFja2V0 TGlzdC0+T3JnQnVmZmVyICAgICAgID0gSGVhZFBhY2tldC0+T3JnQnVmZmVyOw0KPiArICAgICAg UGFja2V0TGlzdC0+UmVtYWluaW5nTGVuZ3RoID0gSGVhZFBhY2tldC0+UmVtYWluaW5nTGVuZ3Ro Ow0KPiArICAgICAgUmVtb3ZlRW50cnlMaXN0ICgmSGVhZFBhY2tldC0+UGFja2V0TGlzdCk7DQo+ ICsgICAgICBJbnNlcnRIZWFkTGlzdCAoJlVzYlJuZGlzRGV2aWNlLT5SZWNlaXZlUGFja2V0TGlz dCwgJihQYWNrZXRMaXN0LQ0KPiA+UGFja2V0TGlzdCkpOw0KPiArICAgIH0gZWxzZSB7DQo+ICsg ICAgICBSZW1vdmVFbnRyeUxpc3QgKCZIZWFkUGFja2V0LT5QYWNrZXRMaXN0KTsNCj4gKyAgICAg IGdCUy0+RnJlZVBvb2wgKChQQUNLRVRfTElTVCAqKUhlYWRQYWNrZXQtPk9yZ0J1ZmZlcik7DQo+ ICsgICAgfQ0KPiArICB9IGVsc2Ugew0KPiArICAgIC8vIFBhY2tldCBkb2Vzbid0IGNvbnRhaW4g dmFsaWQgaGVhZGVyDQo+ICsgICAgREVCVUcgKChERUJVR19JTkZPLCAiUm5kaXNVbmRpUmVjZWl2 ZTpJbnZhbGlkIFJORElTIFBhY2tldA0KPiByZWNlaXZlZFxuIikpOw0KPiArICAgIFJlbW92ZUVu dHJ5TGlzdCAoJihIZWFkUGFja2V0LT5QYWNrZXRMaXN0KSk7DQo+ICsgICAgZ0JTLT5GcmVlUG9v bCAoKFBBQ0tFVF9MSVNUICopSGVhZFBhY2tldC0+T3JnQnVmZmVyKTsNCj4gKyAgfQ0KPiArDQo+ ICsgIGlmIChSZWNlaXZlZEJ5dGVzKSB7DQo+ICsgICAgKkRhdGFMZW5ndGggPSBSZWNlaXZlZEJ5 dGVzOw0KPiArICB9DQo+ICsNCj4gKyAgcmV0dXJuIEVGSV9TVUNDRVNTOw0KPiArfQ0KPiArDQo+ ICsvKioNCj4gKyAgVGhpcyBpcyBhIGR1bW15IGZ1bmN0aW9uIHdoaWNoIGp1c3QgcmV0dXJucy4g VW5pbXBsaW1lbnRlZA0KPiBFREtJSV9VU0JfRVRIRVJORVRfUFJPVE9DT0wgZnVuY3Rpb25zDQo+ ICsgIHBvaW50IHRvIHRoaXMgZnVuY3Rpb24uDQo+ICsNCj4gKyAgQHBhcmFtW2luXSAgQ2RiICBB IHBvaW50ZXIgdG8gdGhlIGNvbW1hbmQgZGVzY3JpcHRvciBibG9jay4NCj4gKyAgQHBhcmFtW2lu XSAgTmljICBBIHBvaW50ZXIgdG8gdGhlIE5ldHdvcmsgaW50ZXJmYWNlIGNvbnRyb2xsZXIgZGF0 YS4NCj4gKw0KPiArICBAcmV0dmFsIEVGSV9TVUNDRVNTICAgICBUaGUgcmVxdWVzdCBleGVjdXRl ZCBzdWNjZXNzZnVsbHkuDQo+ICsNCj4gKyoqLw0KPiArRUZJX1NUQVRVUw0KPiArRUZJQVBJDQo+ ICtSbmRpc0R1bW15UmV0dXJuICgNCj4gKyAgSU4gIFBYRV9DREIgICAqQ2RiLA0KPiArICBJTiAg TklDX0RBVEEgICpOaWMNCj4gKyAgKQ0KPiArew0KPiArICBERUJVRyAoKERFQlVHX0lORk8sICJS bmRpc0R1bW15UmV0dXJuIGNhbGxlZFxuIikpOw0KPiArICByZXR1cm4gRUZJX1NVQ0NFU1M7DQo+ ICt9DQo+ICsNCj4gKy8qKg0KPiArICBUaGlzIGZ1bmN0aW9uIHNlbmRzIHRoZSBSTkRJUyBTRVRf TVNHIGNtZA0KPiArDQo+ICsgIEBwYXJhbVtpbl0gIFVzYlJuZGlzRGV2aWNlICBBIHBvaW50ZXIg dG8gdGhlIFVTQl9STkRJU19ERVZJQ0UNCj4gaW5zdGFuY2UuDQo+ICsgIEBwYXJhbVtpbl0gIE9p ZCAgICAgICAgICAgICBWYWx1ZSBvZiB0aGUgT0lELg0KPiArICBAcGFyYW1baW5dICBMZW5ndGgg ICAgICAgICAgTGVuZ3RoIG9mIHRoZSBkYXRhIGJ1ZmZlci4NCj4gKyAgQHBhcmFtW2luXSAgQnVm ICAgICAgICAgICAgIEEgcG9pbnRlciB0byB0aGUgZGF0YSBidWZmZXIuDQo+ICsNCj4gKyAgQHJl dHZhbCBFRklfU1VDQ0VTUyAgICAgICAgIFRoZSByZXF1ZXN0IGV4ZWN1dGVkIHN1Y2Nlc3NmdWxs eS4NCj4gKw0KPiArKiovDQo+ICtFRklfU1RBVFVTDQo+ICtTZW5kUm5kaXNTZXRNc2cgKA0KPiAr ICBJTiAgVVNCX1JORElTX0RFVklDRSAgKlVzYlJuZGlzRGV2aWNlLA0KPiArICBJTiAgVUlOVDgg ICAgICAgICAgICAgT2lkLA0KPiArICBJTiAgVUlOVDMyICAgICAgICAgICAgTGVuZ3RoLA0KPiAr ICBJTiAgVUlOVDggICAgICAgICAgICAgKkJ1Zg0KPiArICApDQo+ICt7DQo+ICsgIFJFTU9URV9O RElTX1NFVF9NU0cgICpSbmRpc1NldE1zZzsNCj4gKyAgRUZJX1NUQVRVUyAgICAgICAgICAgU3Rh dHVzOw0KPiArDQo+ICsgIFJuZGlzU2V0TXNnID0gQWxsb2NhdGVaZXJvUG9vbCAoc2l6ZW9mIChV U0JfUk5ESVNfREVWSUNFKSArIExlbmd0aCk7DQo+ICsNCj4gKyAgUm5kaXNTZXRNc2ctPk1lc3Nh Z2VUeXBlICAgICAgICAgICAgID0gUk5ESVNfU0VUX01TRzsNCj4gKyAgUm5kaXNTZXRNc2ctPk1l c3NhZ2VMZW5ndGggICAgICAgICAgID0gc2l6ZW9mIChSRU1PVEVfTkRJU19TRVRfTVNHKSArDQo+ IExlbmd0aDsNCj4gKyAgUm5kaXNTZXRNc2ctPlJlcXVlc3RJRCAgICAgICAgICAgICAgID0gVXNi Um5kaXNEZXZpY2UtPlJlcXVlc3RJZDsNCj4gKyAgUm5kaXNTZXRNc2ctPk9pZCAgICAgICAgICAg ICAgICAgICAgID0gT2lkOw0KPiArICBSbmRpc1NldE1zZy0+SW5mb3JtYXRpb25CdWZmZXJMZW5n dGggPSBMZW5ndGg7DQo+ICsgIFJuZGlzU2V0TXNnLT5JbmZvcm1hdGlvbkJ1ZmZlck9mZnNldCA9 IHNpemVvZg0KPiAoUkVNT1RFX05ESVNfU0VUX01TRykgLSA4Ow0KPiArDQo+ICsgIGdCUy0+Q29w eU1lbSAoKChVSU5UOCAqKVJuZGlzU2V0TXNnKSArIHNpemVvZg0KPiAoUkVNT1RFX05ESVNfU0VU X01TRyksIEJ1ZiwgTGVuZ3RoKTsNCj4gKw0KPiArICBTdGF0dXMgPSBSbmRpc0NvbnRyb2xNc2cg KFVzYlJuZGlzRGV2aWNlLA0KPiAoUkVNT1RFX05ESVNfTVNHX0hFQURFUiAqKVJuZGlzU2V0TXNn LCBOVUxMKTsNCj4gKw0KPiArICBnQlMtPkZyZWVQb29sIChSbmRpc1NldE1zZyk7DQo+ICsNCj4g KyAgcmV0dXJuIFN0YXR1czsNCj4gK30NCj4gKw0KPiArLyoqDQo+ICsgIFRoaXMgZnVuY3Rpb24g c2VuZCB0aGUgUk5ESVMgY29tbWFuZCB0aHJvdWdoIHRoZSBkZXZpY2UncyBjb250cm9sDQo+IGVu ZHBvaW50DQo+ICsNCj4gKyAgQHBhcmFtW2luXSAgVXNiUm5kaXNEZXZpY2UgICAgQSBwb2ludGVy IHRvIHRoZSBVU0JfUk5ESVNfREVWSUNFDQo+IGluc3RhbmNlLg0KPiArICBAcGFyYW1baW5dICBS bmRpc01zZyAgICAgICAgICBBIHBvaW50ZXIgdG8gdGhlIFJFTU9URV9ORElTX01TR19IRUFERVIN Cj4gZGF0YS4NCj4gKyAgQHBhcmFtW291dF0gUm5kaXNNc2dSZXNwb25zZSAgQSBwb2ludGVyIHRv IHRoZQ0KPiBSRU1PVEVfTkRJU19NU0dfSEVBREVSIGRhdGEgZm9yIGdldHRpbmcgcmVzcG9uc2Vz Lg0KPiArDQo+ICsgIEByZXR2YWwgRUZJX1NVQ0NFU1MgICAgICAgICAgIFRoZSBidWxrIHRyYW5z ZmVyIGhhcyBiZWVuIHN1Y2Nlc3NmdWxseQ0KPiBleGVjdXRlZC4NCj4gKw0KPiArKiovDQo+ICtF RklfU1RBVFVTDQo+ICtSbmRpc0NvbnRyb2xNc2cgKA0KPiArICBJTiAgVVNCX1JORElTX0RFVklD RSAgICAgICAgKlVzYlJuZGlzRGV2aWNlLA0KPiArICBJTiAgUkVNT1RFX05ESVNfTVNHX0hFQURF UiAgKlJuZGlzTXNnLA0KPiArICBPVVQgUkVNT1RFX05ESVNfTVNHX0hFQURFUiAgKlJuZGlzTXNn UmVzcG9uc2UNCj4gKyAgKQ0KPiArew0KPiArICBFRklfVVNCX0lPX1BST1RPQ09MICAgICAgICAg ICAqVXNiSW8gPSBVc2JSbmRpc0RldmljZS0+VXNiSW87DQo+ICsgIEVGSV9VU0JfREVWSUNFX1JF UVVFU1QgICAgICAgIERldlJlcTsNCj4gKyAgVUlOVDMyICAgICAgICAgICAgICAgICAgICAgICAg VXNiU3RhdHVzOw0KPiArICBFRklfU1RBVFVTICAgICAgICAgICAgICAgICAgICBTdGF0dXM7DQo+ ICsgIFVJTlQzMiAgICAgICAgICAgICAgICAgICAgICAgIFNhdmVSZXNwb25zZVR5cGUgICA9IDA7 DQo+ICsgIFVJTlQzMiAgICAgICAgICAgICAgICAgICAgICAgIFNhdmVSZXNwb25zZUxlbmd0aCA9 IDA7DQo+ICsgIFVJTlQzMiAgICAgICAgICAgICAgICAgICAgICAgIEluZGV4Ow0KPiArICBSRU1P VEVfTkRJU19JTklUSUFMSVpFX0NNUExUICAqUm5kaXNJbml0Q21wbHQgPQ0KPiAoUkVNT1RFX05E SVNfSU5JVElBTElaRV9DTVBMVCAqKVJuZGlzTXNnUmVzcG9uc2U7DQo+ICsNCj4gKyAgaWYgKFJu ZGlzTXNnUmVzcG9uc2UpIHsNCj4gKyAgICBTYXZlUmVzcG9uc2VUeXBlICAgPSBSbmRpc01zZ1Jl c3BvbnNlLT5NZXNzYWdlVHlwZTsNCj4gKyAgICBTYXZlUmVzcG9uc2VMZW5ndGggPSBSbmRpc01z Z1Jlc3BvbnNlLT5NZXNzYWdlTGVuZ3RoOw0KPiArICB9DQo+ICsNCj4gKyAgWmVyb01lbSAoJkRl dlJlcSwgc2l6ZW9mIChFRklfVVNCX0RFVklDRV9SRVFVRVNUKSk7DQo+ICsNCj4gKyAgRGV2UmVx LlJlcXVlc3RUeXBlID0gVVNCX1JFUV9UWVBFX0NMQVNTIHwgVVNCX1RBUkdFVF9JTlRFUkZBQ0U7 DQo+ICsgIERldlJlcS5SZXF1ZXN0ICAgICA9IFNFTkRfRU5DQVBTVUxBVEVEX0NPTU1BTkQ7DQo+ ICsgIERldlJlcS5WYWx1ZSAgICAgICA9IDA7DQo+ICsgIERldlJlcS5JbmRleCAgICAgICA9IDA7 DQo+ICsgIERldlJlcS5MZW5ndGggICAgICA9IChVSU5UMTYpUm5kaXNNc2ctPk1lc3NhZ2VMZW5n dGg7DQo+ICsNCj4gKyAgUHJpbnRSbmRpc01zZyAoUm5kaXNNc2cpOw0KPiArDQo+ICsgIFN0YXR1 cyA9IFVzYklvLT5Vc2JDb250cm9sVHJhbnNmZXIgKA0KPiArICAgICAgICAgICAgICAgICAgICBV c2JJbywNCj4gKyAgICAgICAgICAgICAgICAgICAgJkRldlJlcSwNCj4gKyAgICAgICAgICAgICAg ICAgICAgRWZpVXNiRGF0YU91dCwNCj4gKyAgICAgICAgICAgICAgICAgICAgVVNCX0VUSEVSTkVU X1RSQU5TRkVSX1RJTUVPVVQsDQo+ICsgICAgICAgICAgICAgICAgICAgIFJuZGlzTXNnLA0KPiAr ICAgICAgICAgICAgICAgICAgICBSbmRpc01zZy0+TWVzc2FnZUxlbmd0aCwNCj4gKyAgICAgICAg ICAgICAgICAgICAgJlVzYlN0YXR1cw0KPiArICAgICAgICAgICAgICAgICAgICApOw0KPiArDQo+ ICsgIERFQlVHICgoREVCVUdfSU5GTywgIlJuZGlzQ29udHJvbE1zZzogVXNiU3RhdHVzIDogJXgg U3RhdHVzIDogJXINCj4gUm5kaXNNc2dSZXNwb25zZSA6ICVseFxuIiwgVXNiU3RhdHVzLCBTdGF0 dXMsIFJuZGlzTXNnUmVzcG9uc2UpKTsNCj4gKw0KPiArICAvLyBFcnJvciBvciBubyByZXNwb25z ZSBleHBlY3RlZA0KPiArICBpZiAoKEVGSV9FUlJPUiAoU3RhdHVzKSkgfHwgKFJuZGlzTXNnUmVz cG9uc2UgPT0gTlVMTCkpIHsNCj4gKyAgICBERUJVRyAoKERFQlVHX0lORk8sICJSbmRpc0NvbnRy b2xNc2c6IFVzYlN0YXR1cyA6ICV4IFN0YXR1cyA6ICVyXG4iLA0KPiBVc2JTdGF0dXMsIFN0YXR1 cykpOw0KPiArICAgIHJldHVybiBTdGF0dXM7DQo+ICsgIH0NCj4gKw0KPiArICBmb3IgKEluZGV4 ID0gMDsgSW5kZXggPCAoUk5ESVNfQ09OVFJPTF9USU1FT1VULzEwMCk7IEluZGV4KyspIHsNCj4g KyAgICBaZXJvTWVtICgmRGV2UmVxLCBzaXplb2YgKEVGSV9VU0JfREVWSUNFX1JFUVVFU1QpKTsN Cj4gKw0KPiArICAgIERldlJlcS5SZXF1ZXN0VHlwZSA9IFVTQl9FTkRQT0lOVF9ESVJfSU4gfCBV U0JfUkVRX1RZUEVfQ0xBU1MNCj4gfCBVU0JfVEFSR0VUX0lOVEVSRkFDRTsNCj4gKyAgICBEZXZS ZXEuUmVxdWVzdCAgICAgPSBHRVRfRU5DQVBTVUxBVEVEX1JFU1BPTlNFOw0KPiArICAgIERldlJl cS5WYWx1ZSAgICAgICA9IDA7DQo+ICsgICAgRGV2UmVxLkluZGV4ICAgICAgID0gMDsNCj4gKyAg ICBEZXZSZXEuTGVuZ3RoICAgICAgPSAoVUlOVDE2KVJuZGlzTXNnUmVzcG9uc2UtPk1lc3NhZ2VM ZW5ndGg7DQo+ICsNCj4gKyAgICBTdGF0dXMgPSBVc2JJby0+VXNiQ29udHJvbFRyYW5zZmVyICgN Cj4gKyAgICAgICAgICAgICAgICAgICAgICBVc2JJbywNCj4gKyAgICAgICAgICAgICAgICAgICAg ICAmRGV2UmVxLA0KPiArICAgICAgICAgICAgICAgICAgICAgIEVmaVVzYkRhdGFJbiwNCj4gKyAg ICAgICAgICAgICAgICAgICAgICBVU0JfRVRIRVJORVRfVFJBTlNGRVJfVElNRU9VVCwNCj4gKyAg ICAgICAgICAgICAgICAgICAgICBSbmRpc01zZ1Jlc3BvbnNlLA0KPiArICAgICAgICAgICAgICAg ICAgICAgIFJuZGlzTXNnUmVzcG9uc2UtPk1lc3NhZ2VMZW5ndGgsDQo+ICsgICAgICAgICAgICAg ICAgICAgICAgJlVzYlN0YXR1cw0KPiArICAgICAgICAgICAgICAgICAgICAgICk7DQo+ICsNCj4g KyAgICBERUJVRyAoKERFQlVHX0lORk8sICJSbmRpc0NvbnRyb2xNc2cgUmVzcG9uc2U6IFVzYlN0 YXR1cyA6ICV4DQo+IFN0YXR1cyA6ICVyIFxuIiwgVXNiU3RhdHVzLCBTdGF0dXMpKTsNCj4gKw0K PiArICAgIFByaW50Um5kaXNNc2cgKFJuZGlzTXNnUmVzcG9uc2UpOw0KPiArDQo+ICsgICAgaWYg KCFFRklfRVJST1IgKFN0YXR1cykpIHsNCj4gKyAgICAgIGlmICgoUm5kaXNJbml0Q21wbHQtPlJl cXVlc3RJRCAhPSAoKFJFTU9URV9ORElTX0lOSVRJQUxJWkVfQ01QTFQNCj4gKilSbmRpc01zZykt PlJlcXVlc3RJRCkgfHwgKFJuZGlzSW5pdENtcGx0LT5NZXNzYWdlVHlwZSAhPQ0KPiBTYXZlUmVz cG9uc2VUeXBlKSkgew0KPiArICAgICAgICBERUJVRyAoKERFQlVHX0lORk8sICJSZXRyeSB0aGUg cmVzcG9uc2VcbiIpKTsNCj4gKyAgICAgICAgY29udGludWU7DQo+ICsgICAgICB9DQo+ICsNCj4g KyAgICAgIHJldHVybiBTdGF0dXM7DQo+ICsgICAgfQ0KPiArDQo+ICsgICAgUm5kaXNNc2dSZXNw b25zZS0+TWVzc2FnZVR5cGUgICA9IFNhdmVSZXNwb25zZVR5cGU7DQo+ICsgICAgUm5kaXNNc2dS ZXNwb25zZS0+TWVzc2FnZUxlbmd0aCA9IFNhdmVSZXNwb25zZUxlbmd0aDsNCj4gKw0KPiArICAg IGdCUy0+U3RhbGwgKDEwMDAwMCk7ICAgIC8vIDEwMG1zZWMNCj4gKyAgfQ0KPiArDQo+ICsgIERF QlVHICgoREVCVUdfSU5GTywgIlJuZGlzQ29udHJvbE1zZzogVGltZU91dFxuIikpOw0KPiArDQo+ ICsgIHJldHVybiBFRklfVElNRU9VVDsNCj4gK30NCj4gKw0KPiArLyoqDQo+ICsgIFRoaXMgZnVu Y3Rpb24gc2VuZCB0aGUgUk5ESVMgY29tbWFuZCB0aHJvdWdoIHRoZSBkZXZpY2UncyBEYXRhDQo+ IGVuZHBvaW50DQo+ICsNCj4gKyAgQHBhcmFtW2luXSAgICAgIFVzYlJuZGlzRGV2aWNlICBBIHBv aW50ZXIgdG8gdGhlIFVTQl9STkRJU19ERVZJQ0UNCj4gaW5zdGFuY2UuDQo+ICsgIEBwYXJhbVtp bl0gICAgICBSbmRpc01zZyAgICAgICAgQSBwb2ludGVyIHRvIHRoZQ0KPiBSRU1PVEVfTkRJU19N U0dfSEVBREVSIHRvIHNlbmQgb3V0Lg0KPiArICBAcGFyYW1baW4sIG91dF0gVHJhbnNmZXJMZW5n dGggIFRoZSBsZW5ndGggb2YgdGhlIFJuZGlzTXNnIGRhdGEgdG8NCj4gdHJhbnNmZXIuDQo+ICsN Cj4gKyAgQHJldHZhbCBFRklfU1VDQ0VTUyAgICAgVGhlIHJlcXVlc3QgZXhlY3V0ZWQgc3VjY2Vz c2Z1bGx5Lg0KPiArDQo+ICsqKi8NCj4gK0VGSV9TVEFUVVMNCj4gK1JuZGlzVHJhbnNtaXREYXRh TXNnICgNCj4gKyAgSU4gICAgICBVU0JfUk5ESVNfREVWSUNFICAgICAgICAqVXNiUm5kaXNEZXZp Y2UsDQo+ICsgIElOICAgICAgUkVNT1RFX05ESVNfTVNHX0hFQURFUiAgKlJuZGlzTXNnLA0KPiAr ICBJTiBPVVQgIFVJTlROICAgICAgICAgICAgICAgICAgICpUcmFuc2Zlckxlbmd0aA0KPiArICAp DQo+ICt7DQo+ICsgIEVGSV9TVEFUVVMgIFN0YXR1czsNCj4gKyAgVUlOVDMyICAgICAgVXNiU3Rh dHVzOw0KPiArDQo+ICsgIGlmIChVc2JSbmRpc0RldmljZS0+QnVsa0luRW5kcG9pbnQgPT0gMCkg ew0KPiArICAgIEdldEVuZHBvaW50IChVc2JSbmRpc0RldmljZS0+VXNiSW9DZGNEYXRhLCBVc2JS bmRpc0RldmljZSk7DQo+ICsgIH0NCj4gKw0KPiArICBQcmludFJuZGlzTXNnIChSbmRpc01zZyk7 DQo+ICsNCj4gKyAgU3RhdHVzID0gVXNiUm5kaXNEZXZpY2UtPlVzYklvQ2RjRGF0YS0+VXNiQnVs a1RyYW5zZmVyICgNCj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBVc2JSbmRpc0RldmljZS0+VXNiSW9DZGNEYXRhLA0KPiArICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIFVzYlJuZGlzRGV2aWNlLT5CdWxrT3V0RW5kcG9pbnQsDQo+ ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUm5kaXNNc2csDQo+ ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVHJhbnNmZXJMZW5n dGgsDQo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVVNCX1RY X0VUSEVSTkVUX0JVTEtfVElNRU9VVCwNCj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAmVXNiU3RhdHVzDQo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgKTsNCj4gKw0KPiArICBpZiAoU3RhdHVzID09IEVGSV9TVUNDRVNTKSB7 DQo+ICsgICAgU3RvcEJ1bGtJbkNudCA9IE1BWElNVU1fU1RPUEJVTEtJTl9DTlQ7ICAgICAvLyBB ZnRlciBzZW5kaW5nDQo+IGNtZCAsd2Ugd2lsbCBwb2xsaW5nIHJlY2VpdmUgcGFja2FnZSBmb3Ig TUFYSU1VTV9TVE9QQlVMS0lOX0NOVCB0aW1lcw0KPiArICB9DQo+ICsNCj4gKyAgcmV0dXJuIFN0 YXR1czsNCj4gK30NCj4gKw0KPiArLyoqDQo+ICsgIFRoaXMgZnVuY3Rpb24gc2VuZCB0aGUgUk5E SVMgY29tbWFuZCB0aHJvdWdoIHRoZSBkZXZpY2UncyBEYXRhDQo+IGVuZHBvaW50DQo+ICsNCj4g KyAgQHBhcmFtW2luXSAgICAgIFVzYlJuZGlzRGV2aWNlICAgIEEgcG9pbnRlciB0byB0aGUgVVNC X1JORElTX0RFVklDRQ0KPiBpbnN0YW5jZS4NCj4gKyAgQHBhcmFtW2luLCBvdXRdIFJuZGlzTXNn ICAgICAgICAgIEEgcG9pbnRlciB0byB0aGUNCj4gUkVNT1RFX05ESVNfTVNHX0hFQURFUiB0byBz ZW5kIG91dC4NCj4gKyAgQHBhcmFtW2luLCBvdXRdIFRyYW5zZmVyTGVuZ3RoICAgIFRoZSBsZW5n dGggb2YgdGhlIFJuZGlzTXNnIGRhdGEgdG8NCj4gdHJhbnNmZXIuDQo+ICsNCj4gKyAgQHJldHZh bCBFRklfU1VDQ0VTUyAgICAgVGhlIHJlcXVlc3QgZXhlY3V0ZWQgc3VjY2Vzc2Z1bGx5Lg0KPiAr DQo+ICsqKi8NCj4gK0VGSV9TVEFUVVMNCj4gK1JuZGlzUmVjZWl2ZURhdGFNc2cgKA0KPiArICBJ TiAgICAgIFVTQl9STkRJU19ERVZJQ0UgICAgICAgICpVc2JSbmRpc0RldmljZSwNCj4gKyAgSU4g T1VUICBSRU1PVEVfTkRJU19NU0dfSEVBREVSICAqUm5kaXNNc2csDQo+ICsgIElOIE9VVCAgVUlO VE4gICAgICAgICAgICAgICAgICAgKlRyYW5zZmVyTGVuZ3RoDQo+ICsgICkNCj4gK3sNCj4gKyAg RUZJX1NUQVRVUyAgU3RhdHVzOw0KPiArICBVSU5UMzIgICAgICBVc2JTdGF0dXMgPSAwOw0KPiAr DQo+ICsgIGlmIChVc2JSbmRpc0RldmljZS0+QnVsa0luRW5kcG9pbnQgPT0gMCkgew0KPiArICAg IEdldEVuZHBvaW50IChVc2JSbmRpc0RldmljZS0+VXNiSW9DZGNEYXRhLCBVc2JSbmRpc0Rldmlj ZSk7DQo+ICsgIH0NCj4gKw0KPiArICAvLyBVc2UgU3RvcEJ1bGtJbkNudCB0byBzdG9wIEJ1bGtJ biBjb21tYW5kDQo+ICsgIGlmIChTdG9wQnVsa0luQ250IHx8IExBTl9CVUxLSU5fQ01EX0NPTlRS T0wpIHsNCj4gKyAgICBTdGF0dXMgPSBVc2JSbmRpc0RldmljZS0+VXNiSW9DZGNEYXRhLT5Vc2JC dWxrVHJhbnNmZXIgKA0KPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgVXNiUm5kaXNEZXZpY2UtPlVzYklvQ2RjRGF0YSwNCj4gKyAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIFVzYlJuZGlzRGV2aWNlLT5CdWxrSW5FbmRwb2lu dCwNCj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJuZGlz TXNnLA0KPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVHJh bnNmZXJMZW5ndGgsDQo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBVU0JfUlhfRVRIRVJORVRfQlVMS19USU1FT1VULA0KPiArICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgJlVzYlN0YXR1cw0KPiArICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKTsNCj4gKw0KPiArICAgIGlmICghRUZJX0VS Uk9SIChTdGF0dXMpKSB7DQo+ICsgICAgICBTdG9wQnVsa0luQ250ID0gTUlOSU1VTV9TVE9QQlVM S0lOX0NOVDsNCj4gKyAgICB9IGVsc2Ugew0KPiArICAgICAgU3RvcEJ1bGtJbkNudC0tOw0KPiAr ICAgIH0NCj4gKyAgfSBlbHNlIHsNCj4gKyAgICBTdGF0dXMgICAgICAgICAgPSBFRklfVElNRU9V VDsNCj4gKyAgICAqVHJhbnNmZXJMZW5ndGggPSAwOw0KPiArICAgIEJsb2NrQnVsa0luQ250Kys7 DQo+ICsgIH0NCj4gKw0KPiArICBpZiAoQmxvY2tCdWxrSW5DbnQgPiBCVUxLSU5fQ01EX1BPTExJ TkdfQ05UKSB7DQo+ICsgICAgU3RvcEJ1bGtJbkNudCAgPSBNSU5JTVVNX1NUT1BCVUxLSU5fQ05U Ow0KPiArICAgIEJsb2NrQnVsa0luQ250ID0gMDsNCj4gKyAgfQ0KPiArDQo+ICsgIFByaW50Um5k aXNNc2cgKFJuZGlzTXNnKTsNCj4gKw0KPiArICByZXR1cm4gU3RhdHVzOw0KPiArfQ0KPiArDQo+ ICsvKioNCj4gKyAgUHJpbnRzIFJORElTIEhlYWRlciBhbmQgRGF0YQ0KPiArDQo+ICsgIEBwYXJh bVtpbl0gUm5kaXNNc2cgICAgQSBwb2ludGVyIHRvIHRoZSBSRU1PVEVfTkRJU19NU0dfSEVBREVS DQo+IGRhdGEuDQo+ICsNCj4gKyoqLw0KPiArVk9JRA0KPiArUHJpbnRSbmRpc01zZyAoDQo+ICsg IElOICBSRU1PVEVfTkRJU19NU0dfSEVBREVSICAqUm5kaXNNc2cNCj4gKyAgKQ0KPiArew0KPiAr ICBVSU5UTiAgTGVuZ3RoID0gMDsNCj4gKw0KPiArICBzd2l0Y2ggKFJuZGlzTXNnLT5NZXNzYWdl VHlwZSkgew0KPiArICAgIGNhc2UgUk5ESVNfUEFDS0VUX01TRzoNCj4gKyAgICAgIERFQlVHICgo REVCVUdfSU5GTywgIlJORElTX1BBQ0tFVF9NU0c6XG4iKSk7DQo+ICsgICAgICBMZW5ndGggPSBz aXplb2YgKFJFTU9URV9ORElTX1BBQ0tFVF9NU0cpICsgMHgxNDsNCj4gKyAgICAgIGJyZWFrOw0K PiArICAgIGNhc2UgUk5ESVNfSU5JVElBTElaRV9NU0c6DQo+ICsgICAgICBERUJVRyAoKERFQlVH X0lORk8sICJSTkRJU19JTklUSUFMSVpFX01TRzpcbiIpKTsNCj4gKyAgICAgIExlbmd0aCA9IHNp emVvZiAoUkVNT1RFX05ESVNfSU5JVElBTElaRV9NU0cpOw0KPiArICAgICAgYnJlYWs7DQo+ICsg ICAgY2FzZSBSTkRJU19JTklUSUFMSVpFX0NNUExUOg0KPiArICAgICAgREVCVUcgKChERUJVR19J TkZPLCAiUk5ESVNfSU5JVElBTElaRV9DTVBMVDpcbiIpKTsNCj4gKyAgICAgIExlbmd0aCA9IHNp emVvZiAoUkVNT1RFX05ESVNfSU5JVElBTElaRV9DTVBMVCk7DQo+ICsgICAgICBicmVhazsNCj4g KyAgICBjYXNlIFJORElTX0hMVF9NU0c6DQo+ICsgICAgICBERUJVRyAoKERFQlVHX0lORk8sICJS TkRJU19ITFRfTVNHOlxuIikpOw0KPiArICAgICAgTGVuZ3RoID0gc2l6ZW9mIChSRU1PVEVfTkRJ U19IQUxUX01TRyk7DQo+ICsgICAgICBicmVhazsNCj4gKyAgICBjYXNlIFJORElTX1FVRVJZX01T RzoNCj4gKyAgICAgIERFQlVHICgoREVCVUdfSU5GTywgIlJORElTX1FVRVJZX01TRzpcbiIpKTsN Cj4gKyAgICAgIExlbmd0aCA9IHNpemVvZiAoUkVNT1RFX05ESVNfUVVFUllfTVNHKTsNCj4gKyAg ICAgIGJyZWFrOw0KPiArICAgIGNhc2UgUk5ESVNfUVVFUllfQ01QTFQ6DQo+ICsgICAgICBERUJV RyAoKERFQlVHX0lORk8sICJSTkRJU19RVUVSWV9DTVBMVDpcbiIpKTsNCj4gKyAgICAgIExlbmd0 aCA9IHNpemVvZiAoUkVNT1RFX05ESVNfUVVFUllfQ01QTFQpOw0KPiArICAgICAgYnJlYWs7DQo+ ICsgICAgY2FzZSBSTkRJU19TRVRfTVNHOg0KPiArICAgICAgREVCVUcgKChERUJVR19JTkZPLCAi Uk5ESVNfU0VUX01TRzpcbiIpKTsNCj4gKyAgICAgIExlbmd0aCA9IHNpemVvZiAoUkVNT1RFX05E SVNfU0VUX01TRyk7DQo+ICsgICAgICBicmVhazsNCj4gKyAgICBjYXNlIFJORElTX1NFVF9DTVBM VDoNCj4gKyAgICAgIERFQlVHICgoREVCVUdfSU5GTywgIlJORElTX1NFVF9DTVBMVDpcbiIpKTsN Cj4gKyAgICAgIExlbmd0aCA9IHNpemVvZiAoUkVNT1RFX05ESVNfU0VUX0NNUExUKTsNCj4gKyAg ICAgIGJyZWFrOw0KPiArICAgIGNhc2UgUk5ESVNfUkVTRVRfTVNHOg0KPiArICAgICAgREVCVUcg KChERUJVR19JTkZPLCAiUk5ESVNfUkVTRVRfTVNHOlxuIikpOw0KPiArICAgICAgTGVuZ3RoID0g c2l6ZW9mIChSRU1PVEVfTkRJU19SRVNFVF9NU0cpOw0KPiArICAgICAgYnJlYWs7DQo+ICsgICAg Y2FzZSBSTkRJU19SRVNFVF9DTVBMVDoNCj4gKyAgICAgIERFQlVHICgoREVCVUdfSU5GTywgIlJO RElTX1JFU0VUX0NNUExUOlxuIikpOw0KPiArICAgICAgTGVuZ3RoID0gc2l6ZW9mIChSRU1PVEVf TkRJU19SRVNFVF9DTVBMVCk7DQo+ICsgICAgICBicmVhazsNCj4gKyAgICBjYXNlIFJORElTX0lO RElDQVRFX1NUQVRVU19NU0c6DQo+ICsgICAgICBERUJVRyAoKERFQlVHX0lORk8sICJSTkRJU19J TkRJQ0FURV9TVEFUVVNfTVNHOlxuIikpOw0KPiArICAgICAgTGVuZ3RoID0gc2l6ZW9mIChSRU1P VEVfTkRJU19JTkRJQ0FURV9TVEFUVVNfTVNHKTsNCj4gKyAgICAgIGJyZWFrOw0KPiArICAgIGNh c2UgUk5ESVNfS0VFUEFMSVZFX01TRzoNCj4gKyAgICAgIERFQlVHICgoREVCVUdfSU5GTywgIlJO RElTX0tFRVBBTElWRV9NU0c6XG4iKSk7DQo+ICsgICAgICBMZW5ndGggPSBzaXplb2YgKFJFTU9U RV9ORElTX0tFRVBBTElWRV9NU0cpOw0KPiArICAgICAgYnJlYWs7DQo+ICsgICAgY2FzZSBSTkRJ U19LRUVQQUxJVkVfQ01QTFQ6DQo+ICsgICAgICBERUJVRyAoKERFQlVHX0lORk8sICJSTkRJU19L RUVQQUxJVkVfQ01QTFQ6XG4iKSk7DQo+ICsgICAgICBMZW5ndGggPSBzaXplb2YgKFJFTU9URV9O RElTX0tFRVBBTElWRV9DTVBMVCk7DQo+ICsgIH0NCj4gKw0KPiArICBpZiAoTGVuZ3RoKSB7DQo+ ICsgICAgVUlOVE4gIEluZGV4ID0gMDsNCj4gKyAgICBmb3IgKCA7IExlbmd0aDsgTGVuZ3RoIC09 IDQsIEluZGV4KyspIHsNCj4gKyAgICAgIERFQlVHICgoREVCVUdfSU5GTywgIiU4WFx0IiwgUm5k aXNNc2dbSW5kZXhdKSk7DQo+ICsgICAgICBpZiAoKChJbmRleCAlIDQpID09IDMpICYmIChJbmRl eCAhPSAwKSkgew0KPiArICAgICAgICBERUJVRyAoKERFQlVHX0lORk8sICJcbiIpKTsNCj4gKyAg ICAgIH0NCj4gKyAgICB9DQo+ICsNCj4gKyAgICBpZiAoSW5kZXggJSA0KSB7DQo+ICsgICAgICBE RUJVRyAoKERFQlVHX0lORk8sICJcbiIpKTsNCj4gKyAgICB9DQo+ICsgIH0NCj4gK30NCj4gLS0N Cj4gMi4zNS4xLndpbmRvd3MuMg0KPiAtVGhlIGluZm9ybWF0aW9uIGNvbnRhaW5lZCBpbiB0aGlz IG1lc3NhZ2UgbWF5IGJlIGNvbmZpZGVudGlhbCBhbmQNCj4gcHJvcHJpZXRhcnkgdG8gQW1lcmlj YW4gTWVnYXRyZW5kcyAoQU1JKS4gVGhpcyBjb21tdW5pY2F0aW9uIGlzIGludGVuZGVkDQo+IHRv IGJlIHJlYWQgb25seSBieSB0aGUgaW5kaXZpZHVhbCBvciBlbnRpdHkgdG8gd2hvbSBpdCBpcyBh ZGRyZXNzZWQgb3IgYnkgdGhlaXINCj4gZGVzaWduZWUuIElmIHRoZSByZWFkZXIgb2YgdGhpcyBt ZXNzYWdlIGlzIG5vdCB0aGUgaW50ZW5kZWQgcmVjaXBpZW50LCB5b3UgYXJlDQo+IG9uIG5vdGlj ZSB0aGF0IGFueSBkaXN0cmlidXRpb24gb2YgdGhpcyBtZXNzYWdlLCBpbiBhbnkgZm9ybSwgaXMg c3RyaWN0bHkNCj4gcHJvaGliaXRlZC4gUGxlYXNlIHByb21wdGx5IG5vdGlmeSB0aGUgc2VuZGVy IGJ5IHJlcGx5IGUtbWFpbCBvciBieQ0KPiB0ZWxlcGhvbmUgYXQgNzcwLTI0Ni04NjAwLCBhbmQg dGhlbiBkZWxldGUgb3IgZGVzdHJveSBhbGwgY29waWVzIG9mIHRoZQ0KPiB0cmFuc21pc3Npb24u DQo+DQo+DQo+IA0KPg0KLVRoZSBpbmZvcm1hdGlvbiBjb250YWluZWQgaW4gdGhpcyBtZXNzYWdl IG1heSBiZSBjb25maWRlbnRpYWwgYW5kIHByb3ByaWV0YXJ5IHRvIEFtZXJpY2FuIE1lZ2F0cmVu ZHMgKEFNSSkuIFRoaXMgY29tbXVuaWNhdGlvbiBpcyBpbnRlbmRlZCB0byBiZSByZWFkIG9ubHkg YnkgdGhlIGluZGl2aWR1YWwgb3IgZW50aXR5IHRvIHdob20gaXQgaXMgYWRkcmVzc2VkIG9yIGJ5 IHRoZWlyIGRlc2lnbmVlLiBJZiB0aGUgcmVhZGVyIG9mIHRoaXMgbWVzc2FnZSBpcyBub3QgdGhl IGludGVuZGVkIHJlY2lwaWVudCwgeW91IGFyZSBvbiBub3RpY2UgdGhhdCBhbnkgZGlzdHJpYnV0 aW9uIG9mIHRoaXMgbWVzc2FnZSwgaW4gYW55IGZvcm0sIGlzIHN0cmljdGx5IHByb2hpYml0ZWQu IFBsZWFzZSBwcm9tcHRseSBub3RpZnkgdGhlIHNlbmRlciBieSByZXBseSBlLW1haWwgb3IgYnkg dGVsZXBob25lIGF0IDc3MC0yNDYtODYwMCwgYW5kIHRoZW4gZGVsZXRlIG9yIGRlc3Ryb3kgYWxs IGNvcGllcyBvZiB0aGUgdHJhbnNtaXNzaW9uLg0K