From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from mga12.intel.com (mga12.intel.com [192.55.52.136]) by mx.groups.io with SMTP id smtpd.web11.20667.1683266976943580099 for ; Thu, 04 May 2023 23:09:37 -0700 Authentication-Results: mx.groups.io; dkim=fail reason="unable to parse pub key" header.i=@intel.com header.s=intel header.b=HNWK0YLq; spf=pass (domain: intel.com, ip: 192.55.52.136, mailfrom: hao.a.wu@intel.com) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=intel.com; i=@intel.com; q=dns/txt; s=Intel; t=1683266976; x=1714802976; h=from:to:cc:subject:date:message-id:references: in-reply-to:content-transfer-encoding:mime-version; bh=fr0nT+Z5iW6svFYf8MHAWsw/Fe6FMW2s6KZqF3Mphzg=; b=HNWK0YLq6iqoVo7J3sPl+DZEwfn1feyvxlCFAD+OV9zB2S3Qp0eNCgvO 3wKxCOoc/Na+XA7cxQbfv5+mIfgCFYnUjlzUqYPRa8HRjUGp4yTS83UW5 6twB0rsc8I1r/+oeLRcw/lo+vjtX+GAoY5amfFhRNy0kM72m8y9Lfd3L8 dkhRv0XQ7o8ZvNE/HxKKMj5kA2BFf4olxlCpUTFBwkL33cEkx7iQ9KBxw darCOHQebcYURW3PMN0e4Z6zkHNp06q6d+MAis23cnZeoiXiXAbWRKQKS 1m1gn+ERn93k7Xu1QJQUI5KYwuNin5KOAS58+QiiqZvqWmlerDAizGf1d g==; X-IronPort-AV: E=McAfee;i="6600,9927,10700"; a="328760879" X-IronPort-AV: E=Sophos;i="5.99,251,1677571200"; d="scan'208";a="328760879" Received: from orsmga006.jf.intel.com ([10.7.209.51]) by fmsmga106.fm.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 04 May 2023 23:09:26 -0700 X-ExtLoop1: 1 X-IronPort-AV: E=McAfee;i="6600,9927,10700"; a="674889460" X-IronPort-AV: E=Sophos;i="5.99,251,1677571200"; d="scan'208";a="674889460" Received: from fmsmsx602.amr.corp.intel.com ([10.18.126.82]) by orsmga006.jf.intel.com with ESMTP; 04 May 2023 23:09:25 -0700 Received: from fmsmsx611.amr.corp.intel.com (10.18.126.91) by fmsmsx602.amr.corp.intel.com (10.18.126.82) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.2507.23; Thu, 4 May 2023 23:09:25 -0700 Received: from fmsmsx602.amr.corp.intel.com (10.18.126.82) by fmsmsx611.amr.corp.intel.com (10.18.126.91) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.2507.23; Thu, 4 May 2023 23:09:25 -0700 Received: from fmsedg601.ED.cps.intel.com (10.1.192.135) by fmsmsx602.amr.corp.intel.com (10.18.126.82) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.2507.23 via Frontend Transport; Thu, 4 May 2023 23:09:25 -0700 Received: from NAM11-BN8-obe.outbound.protection.outlook.com (104.47.58.168) by edgegateway.intel.com (192.55.55.70) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.1.2507.23; Thu, 4 May 2023 23:09:23 -0700 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=nTjXORMBk4y/B6t6Zq8DtqYJJoL28CJuii5BsRwQCo0pUQhRRS6D6VVIfSIOIVyTzo1EnUgDoelGoTJRHR5BBaXUwCcQHwG+LcE98SVQkpMGx0SkDxrnYm6S1XE+51nb6Galp+uG17sp1fvo1hR6gSoilo31tx/V00DllAXFefenJ6+AtvIFmDuEt+w6J0wCGaKky6ex+ZctaAoV1ok1nnyy6WqcB7So6ZnFEsKaW84LSy2QeSXjJp88vdk9JEsWy8s8qV27Fg/88YAY9TsQ0Xx02OmwmvuhbFV8P6zjsQ7gvyMn1lvrBHeKGglg9VvesV8WFuJcXJXQzaNh9+TifA== 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=fr0nT+Z5iW6svFYf8MHAWsw/Fe6FMW2s6KZqF3Mphzg=; b=a0J62OXxXNmqyXHEBv/oetgQorPrPRzz5ne/vkoETcHv/2uDzt6Sf014nlmOIhDWmuZGTCBtjqXpNYMgUijSYdyT7C4xHMFQ+0SzQo0IueWHSlJ9UtGig6SJf+dfJbeO2xCGEgxRzI+K5W7oxw817yLjgEqP0KFLnSOlWNNz1KJhNw0z7qP0xcv5cl8AFFSLnf5++XynlOj152KIjvhkD9M0n2f5hIro4XJKZ1+FL8ru1qvfN8gNqZ8FXHOsbA13Ac29YUUkZvgCbSQus/OYkzmsHeggJa+ok7KTWUl9Gr7q5KkKvBw+Sl1BDP5yF0uYP+Osh2A79JNdHCnvFq9zgQ== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=intel.com; dmarc=pass action=none header.from=intel.com; dkim=pass header.d=intel.com; arc=none Received: from MN2PR11MB4031.namprd11.prod.outlook.com (2603:10b6:208:150::18) by PH0PR11MB7659.namprd11.prod.outlook.com (2603:10b6:510:28e::12) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.6363.26; Fri, 5 May 2023 06:09:11 +0000 Received: from MN2PR11MB4031.namprd11.prod.outlook.com ([fe80::6280:3624:33a:cc38]) by MN2PR11MB4031.namprd11.prod.outlook.com ([fe80::6280:3624:33a:cc38%4]) with mapi id 15.20.6363.026; Fri, 5 May 2023 06:09:11 +0000 From: "Wu, Hao A" To: "devel@edk2.groups.io" , "richardho@ami.com" CC: Andrew Fish , Leif Lindholm , "Kinney, Michael D" , Michael Kubacki , "Liu, Zhiguang" , "Gao, Liming" , "Ni, Ray" , "Tinh Nguyen" , =?gb2312?B?VG9ueSBMbyAowV+98MvJKQ==?= Subject: Re: [PATCH v1 1/3] MdeModulePkg/Bus/Usb/UsbNetwork/UsbRndis: Add USB RNDIS devices support Thread-Topic: [PATCH v1 1/3] MdeModulePkg/Bus/Usb/UsbNetwork/UsbRndis: Add USB RNDIS devices support Thread-Index: AQHZdAEu3k6hb9eeA0GIRdyyB7ySBK9LQ7BQ Date: Fri, 5 May 2023 06:09:11 +0000 Message-ID: References: <20230421032658.1846-1-richardho@ami.com> In-Reply-To: <20230421032658.1846-1-richardho@ami.com> Accept-Language: en-US, zh-CN X-MS-Has-Attach: X-MS-TNEF-Correlator: authentication-results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=intel.com; x-ms-publictraffictype: Email x-ms-traffictypediagnostic: MN2PR11MB4031:EE_|PH0PR11MB7659:EE_ x-ms-office365-filtering-correlation-id: fe25dc2b-09f2-41d7-364a-08db4d2f3e92 x-ld-processed: 46c98d88-e344-4ed4-8496-4ed7712e255d,ExtAddr x-ms-exchange-senderadcheck: 1 x-ms-exchange-antispam-relay: 0 x-microsoft-antispam: BCL:0; x-microsoft-antispam-message-info: EFMHsGtkjHjtRNl6JFxaRpeAQb6QgqpdhS3xFF+TtyH6LREIIrfiUOeTInoI9cb/jRt5s9PMsfTJomcaAobugn38os6WmsmD4vhfel7otinASJO1Q2ZWxBhQtJj1ej/BZpcUuAERsr8AgrYfodl9pC76iKMbws9nv+s8ELcxBchQviQr90fRg71NyigAufcmHkL+LBcvW3tiJh4xpToIbsYMnmK5Ln0YlptygS4OXTnD8c7eWa5zzMFRKhS+e5fKe+cTRApg8e83SocihPr2KJaVBONcIrN/5w69Ee9kkbCzK9AJBeLnSF6rilyYVjtg+JfwDkiDkCmxXNnWdzx24SMAGoUSedFubVdKUUYSWMcEpCq2eXgf1uGV4Z8R6kiejSExpKxhP+SutfMNZBkTkfIo95kN/2q+OkZnEfuaKQBuAR0P7MvzVVP78RvAn65ik5uuifApkT7BnWOLpG3kDwhp5wUYKDR0rLvwyhxNHwTzVqv+T9nBCIeCB92BTE2g+9T+i9RfjQf9tD2ALUpOUNvdXyelGdp+Sl1cO1t7aIbDGKKCU9dF/GPoIHk61SnMBPey+PlRwdRd8xXdGyIRu8Laih/ApKXCaBYBEqhEF7H1nLLfoYdnD6ccCDXoCLeP8TzqtCPD1ZcdqAd6PxxblL5iga8q0w6VZBedL+Y3HV4= x-forefront-antispam-report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:MN2PR11MB4031.namprd11.prod.outlook.com;PTR:;CAT:NONE;SFS:(13230028)(366004)(136003)(396003)(39860400002)(376002)(346002)(451199021)(54906003)(110136005)(966005)(19627235002)(66899021)(71200400001)(186003)(55016003)(33656002)(478600001)(86362001)(40140700001)(7696005)(41300700001)(122000001)(30864003)(2906002)(82960400001)(38070700005)(316002)(8936002)(8676002)(38100700002)(83380400001)(52536014)(5660300002)(4326008)(66946007)(53546011)(66556008)(64756008)(66446008)(9686003)(66476007)(76116006)(6506007)(26005)(559001)(579004)(44824005);DIR:OUT;SFP:1102; x-ms-exchange-antispam-messagedata-chunkcount: 1 x-ms-exchange-antispam-messagedata-0: =?gb2312?B?SEllallJMDY2TlBwK3dzbUlBeVdzSUtZVlRINkIyN29tQUI3WTNjTGo3MkV4?= =?gb2312?B?TDdUc0tIbDk2Ky92Z09DWHVUQ0NuOXN4MFhGRTloQXd4STZXNVZYYWo3b0JZ?= =?gb2312?B?ZjZrY05RZE96R3kwL0VVTXNrZkcxakQyYWpMV0hlOWpJckhYN1Z5WUhlbis2?= =?gb2312?B?V29xdXNrdytzdnl2bjBZOGl6Qk5aNUZDckt0ZGxFVWFoYnVqLzdmL3pyeitW?= =?gb2312?B?eUNaY2h2cWJwMFcxU05yeWx2cHJNTm9zcnNOVTY1WjlzaFE4dzlvWU1nWGZN?= =?gb2312?B?a2pLWDI2UlV4VFNrYVFyb2E2YUVnSE05dkE3dUkrTHVNKzJsd0tyS0dIU2Ra?= =?gb2312?B?N1VmaGtjczlaZHlybks4K3U4K1lMVHordEFvZkhYZXY3dWJWVWY2Q3BOT2du?= =?gb2312?B?RFp5RWtYZjA2K1d5Mjd5T0J6MndGY20xVUVVWWR6RXFUZFJvTmNqY2crT2ta?= =?gb2312?B?MkgxdC8rV2RIc0o4N29TTnZ5MWROaEhyR1pCYXBydGdHOXU4enNBTVlXY005?= =?gb2312?B?Q3VTNTJLQ0xQeWUxR1pxME1Yc2gxK0lrTHBaZUpGQWlIckZaQys5UHYzdWJx?= =?gb2312?B?eVgwT0RBcmJCNGVjaTYybGlOdE1WbDlvVHNOa1YvUWVJMGdpS2R5bHBsaVZC?= =?gb2312?B?KzZKMExTa2xyeFFmSmlGVS91K2RxQWQ4NUJFbGdLdmRoTVJYM04vRUlXMnFi?= =?gb2312?B?OWQ0VVo2dkM4ZjJRSmFYcEF0R2o0a25Fa1pZKzNsT1Y1WXlYb0UvYUhzM0sw?= =?gb2312?B?Uk1Xc0liY0NBbUx2MG5ZTFppUTJVUUpSd1lCWWdmcGx2SVphbnhpdzRLR3NQ?= =?gb2312?B?ZG9LNWd3N1RKYmRUbmkrdEFUdmVkZDUvWjY4ZEJPM0pRTkJ0bWlpMHJVc24w?= =?gb2312?B?czFDbTdaQzljYWczZEh2emdPaEo3S05udXpQS2RQRDNsNVdhY2hiUFk2Q3RG?= =?gb2312?B?UTFncVJyTTExM1oxVjNWVkxscWg5bU1MNHpxOER5WlNUckdGK2JaOVFSUmcz?= =?gb2312?B?aFI1ZG9RaDhsSkFVOHUyZ3dsemMvMWNpQUI3WWtzNDhUSlo1RVl3dThwVTZz?= =?gb2312?B?eXJaNGkxNlQ2N3hXcmczeFl6dFNtTjNXcThNeGhXNWZad1FnZ2phTjV2Smhi?= =?gb2312?B?Z3Jjay9ER0doRkhoak5UOXQyV2pMWU1xY1pKOC9udlBoVnd1Z1lmclFwWFg5?= =?gb2312?B?c3c2bzd1THQzM2V4VDYyd01zZE9UdFZ0R3Z2Z0hyZk9RZmxhZ3pnSHhGVUVM?= =?gb2312?B?TGRJRXNRQWdjOWNYM3ZuR1B0aExTMXc3R3VUREJUNWZKVGpqTlJpaVJ4bFhH?= =?gb2312?B?Y2RZRjY1WDlCRDVjQ3Jnc0RPTHpxaTk5L0RhejFHbENUM1EyaXpubDgxZkR2?= =?gb2312?B?VDQ5UUNWVXdFa21GSFF5ZGFxd1J6UndVbHpPOTlodGV6Rk9zOFdlWW1aS0Uv?= =?gb2312?B?K1dhZTE2SWtqbVJNNHpIaGs3Zm0zQU1aZ0JleElkRWpWdFNyVnUyZ0NIK1gy?= =?gb2312?B?dGRvUjZ0dC9HaHB3OW0vTi9ISERYVFl4Zzk1NnV6K3g3MGkwd1NtK1dZenpi?= =?gb2312?B?MnVWSkt4bmoyVWxyY2E5a3dVbXVFMkMyS2xjTlJzZXFuMFNMU1RiQTdyMC9N?= =?gb2312?B?VjB2cjlLMzV5TXVFZFB5RE1qSVJiZjVVcGtmMEd1b1g1YmJ2QVB4RTZIVmJi?= =?gb2312?B?cVd6aU96YTArKzdObWJKa1lTU3F5MEFjVUlKd3djVVUyc01jSmxzaDhsZmg3?= =?gb2312?B?M0Z4eGZuU1J1Z3lidW9ibzE4MFJ0cVJGOWtpWFliNm9GRGtxbXN3dVBPYmZn?= =?gb2312?B?c0YwNkpBRVhOdmVsQ3NSSmhrZmtzSklBUFNJUW9lRENUWXh5NE1vbkdGMmhi?= =?gb2312?B?UlZzaXhHTEpQempkN0RpNkJZbzcrNkRSeVpEb0hCVGRGdjBzeGR0aS9Wb0xn?= =?gb2312?B?SjNreit2NXBZZldTMm1CVmM1WjRmd1NHSXgvM3JFRDJNSWtQMFJqVlBWSitT?= =?gb2312?B?Z21KSURlM3ZmcnFxTUZUaXRQY2NnelpOK3laYjZUUG9vdldIK3d5S1liZE9t?= =?gb2312?B?bk9BOG81L0Zyb05BWjlEV0tpM1Rwd3k2b3IwRlQ4VGdwTXpDVXNyRDBQcVMr?= =?gb2312?Q?0aDBwDrITcX/V1dZPgTjgoiy1?= MIME-Version: 1.0 X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-AuthSource: MN2PR11MB4031.namprd11.prod.outlook.com X-MS-Exchange-CrossTenant-Network-Message-Id: fe25dc2b-09f2-41d7-364a-08db4d2f3e92 X-MS-Exchange-CrossTenant-originalarrivaltime: 05 May 2023 06:09:11.1441 (UTC) X-MS-Exchange-CrossTenant-fromentityheader: Hosted X-MS-Exchange-CrossTenant-id: 46c98d88-e344-4ed4-8496-4ed7712e255d X-MS-Exchange-CrossTenant-mailboxtype: HOSTED X-MS-Exchange-CrossTenant-userprincipalname: soi841a8oX6ZZXDTDr9MGgzEw5CquOL8Mi8OKOLRpllsHjE2wh0Z5jGqaU2RdV681pvcKP1fkXaeMcrV8RJwig== X-MS-Exchange-Transport-CrossTenantHeadersStamped: PH0PR11MB7659 Return-Path: hao.a.wu@intel.com X-OriginatorOrg: intel.com Content-Language: en-US Content-Type: text/plain; charset="gb2312" Content-Transfer-Encoding: base64 U29ycnkgZm9yIHRoZSBsYXRlIHJlc3BvbnNlLg0KDQpJIGFtIG9rIHRvIHB1dCB0aGUgY29udGVu dHMgdW5kZXIgTWRlTW9kdWxlUGtnL0J1cy9Vc2IvVXNiTmV0d29yay8uDQoNCkhvd2V2ZXIsIGNv dWxkIHlvdSBhbHNvIGhlbHAgdG8gdXBkYXRlIHRoZSBNYWludGFpbmVycy50eHQgZmlsZSB1bmRl ciB0aGUNCnJvb3QgZGlyZWN0b3J5IHRvIGFkZCBhIG5ldyBzZWN0aW9uIGNhbGxlZDoNCiJNZGVN b2R1bGVQa2c6IFVTQiBOZXR3b3JrIG1vZHVsZXMiDQphbmQgbGlzdCB5b3UgYW5kIGFub3RoZXIg cGVyc29uIHdobyBpcyBleHBlcmllbmNlZCBpbiB0aGUgVVNCIG5ldHdvcmsNCmRvbWFpbiBhcyB0 aGUgcmV2aWV3ZXJzIGZvciBmdXR1cmUgY2hhbmdlcyB3aXRoaW4gdGhpcyBVc2JOZXR3b3JrIGZv bGRlcj8NCg0KQ291bGQgeW91IGhlbHAgdG8gY3JlYXRlIGEgUFIgZm9yIHRoaXMgc2VyaWVzIChv ciBzaGFyZSBhIHBlcnNvbmFsIGJyYW5jaA0Kd2l0aCB0aGUgY2hhbmdlcyk/IEkgYW0gaGF2aW5n IGlzc3VlcyB3aGVuIGFwcGx5aW5nIHRoZXNlIHBhdGNoZXMgYWZ0ZXINCmV4dHJhY3RpbmcgdGhl bSBmcm9tIG15IG1haWwgY2xpZW50LiBUaGFua3MuDQoNCkFsc28sIGlzIHRoZXJlIGEgQnVnemls bGEgdHJhY2tlciBmb3IgdGhpcz8gSWYgbm90LCBteSByZWNvbW1lbmRhdGlvbiBpcw0KdG8gZmls ZSBhIGZlYXR1cmUgcmVxdWVzdCBhdDoNCmh0dHBzOi8vYnVnemlsbGEudGlhbm9jb3JlLm9yZy9l bnRlcl9idWcuY2dpP3Byb2R1Y3Q9VGlhbm9jb3JlJTIwRmVhdHVyZSUyMFJlcXVlc3RzDQp0byB0 cmFjayB0aGlzIGFuZCBsaXN0IHN1Y2ggaW5mb3JtYXRpb24gaW4gdGhlIGNvbW1pdCBsb2cgbWVz c2FnZS4NCg0KQmVzdCBSZWdhcmRzLA0KSGFvIFd1DQoNCj4gLS0tLS1PcmlnaW5hbCBNZXNzYWdl LS0tLS0NCj4gRnJvbTogZGV2ZWxAZWRrMi5ncm91cHMuaW8gPGRldmVsQGVkazIuZ3JvdXBzLmlv PiBPbiBCZWhhbGYgT2YgUmljaGFyZEhvDQo+IFu6zsP31tJdIHZpYSBncm91cHMuaW8NCj4gU2Vu dDogRnJpZGF5LCBBcHJpbCAyMSwgMjAyMyAxMToyNyBBTQ0KPiBUbzogZGV2ZWxAZWRrMi5ncm91 cHMuaW8NCj4gQ2M6IEFuZHJldyBGaXNoIDxhZmlzaEBhcHBsZS5jb20+OyBMZWlmIExpbmRob2xt DQo+IDxxdWljX2xsaW5kaG9sQHF1aWNpbmMuY29tPjsgS2lubmV5LCBNaWNoYWVsIEQNCj4gPG1p Y2hhZWwuZC5raW5uZXlAaW50ZWwuY29tPjsgTWljaGFlbCBLdWJhY2tpDQo+IDxtaWt1YmFja0Bs aW51eC5taWNyb3NvZnQuY29tPjsgTGl1LCBaaGlndWFuZyA8emhpZ3VhbmcubGl1QGludGVsLmNv bT47DQo+IEdhbywgTGltaW5nIDxnYW9saW1pbmdAYnlvc29mdC5jb20uY24+OyBXdSwgSGFvIEEg PGhhby5hLnd1QGludGVsLmNvbT47DQo+IE5pLCBSYXkgPHJheS5uaUBpbnRlbC5jb20+OyBUaW5o IE5ndXllbg0KPiA8dGluaG5ndXllbkBvcy5hbXBlcmVjb21wdXRpbmcuY29tPjsgVG9ueSBMbyAo wV+98MvJKQ0KPiA8VG9ueUxvQGFtaS5jb20+DQo+IFN1YmplY3Q6IFtlZGsyLWRldmVsXSBbUEFU Q0ggdjEgMS8zXQ0KPiBNZGVNb2R1bGVQa2cvQnVzL1VzYi9Vc2JOZXR3b3JrL1VzYlJuZGlzOiBB ZGQgVVNCIFJORElTIGRldmljZXMNCj4gc3VwcG9ydA0KPiANCj4gVGhpcyBkcml2ZXIgcHJvdmlk ZXMgVUVGSSBkcml2ZXIgZm9yIFVTQiBSTkRJUyBkZXZpY2UNCj4gDQo+IFNpZ25lZC1vZmYtYnk6 IFJpY2hhcmQgSG8gPHJpY2hhcmRob0BhbWkuY29tPg0KPiBDYzogQW5kcmV3IEZpc2ggPGFmaXNo QGFwcGxlLmNvbT4NCj4gQ2M6IExlaWYgTGluZGhvbG0gPHF1aWNfbGxpbmRob2xAcXVpY2luYy5j b20+DQo+IENjOiBNaWNoYWVsIEQgS2lubmV5IDxtaWNoYWVsLmQua2lubmV5QGludGVsLmNvbT4N Cj4gQ2M6IE1pY2hhZWwgS3ViYWNraSA8bWlrdWJhY2tAbGludXgubWljcm9zb2Z0LmNvbT4NCj4g Q2M6IFpoaWd1YW5nIExpdSA8emhpZ3VhbmcubGl1QGludGVsLmNvbT4NCj4gQ2M6IExpbWluZyBH YW8gPGdhb2xpbWluZ0BieW9zb2Z0LmNvbS5jbj4NCj4gQ2M6IEhhbyBBIFd1IDxoYW8uYS53dUBp bnRlbC5jb20+DQo+IENjOiBSYXkgTmkgPHJheS5uaUBpbnRlbC5jb20+DQo+IFI6IFJlYmVjY2Eg Q3JhbiA8cmViZWNjYUBic2Rpby5jb20+DQo+IFRlc3RlZC1ieTogVGluaCBOZ3V5ZW4gPHRpbmhu Z3V5ZW5Ab3MuYW1wZXJlY29tcHV0aW5nLmNvbT4NCj4gUmV2aWV3ZWQtYnk6IFRvbnkgTG8gPHRv bnlsb0BhbWkuY29tPg0KPiAtLS0NCj4gIC4uLi9Vc2JOZXR3b3JrL05ldHdvcmtDb21tb24vQ29t cG9uZW50TmFtZS5jICB8ICAyNjMgKysrDQo+ICAuLi4vVXNiTmV0d29yay9OZXR3b3JrQ29tbW9u L0RyaXZlckJpbmRpbmcuYyAgfCAgNTk1ICsrKysrKw0KPiAgLi4uL1VzYk5ldHdvcmsvTmV0d29y a0NvbW1vbi9Ecml2ZXJCaW5kaW5nLmggIHwgIDI2NiArKysNCj4gIC4uLi9OZXR3b3JrQ29tbW9u L05ldHdvcmtDb21tb24uaW5mICAgICAgICAgICB8ICAgNDggKw0KPiAgLi4uL1VzYk5ldHdvcmsv TmV0d29ya0NvbW1vbi9QeGVGdW5jdGlvbi5jICAgIHwgMTgwMyArKysrKysrKysrKysrKysrKw0K PiAgLi4uL1VzYi9Vc2JOZXR3b3JrL1VzYlJuZGlzL0NvbXBvbmVudE5hbWUuYyAgIHwgIDE3MiAr Kw0KPiAgLi4uL0J1cy9Vc2IvVXNiTmV0d29yay9Vc2JSbmRpcy9Vc2JSbmRpcy5jICAgIHwgIDg4 NiArKysrKysrKw0KPiAgLi4uL0J1cy9Vc2IvVXNiTmV0d29yay9Vc2JSbmRpcy9Vc2JSbmRpcy5o ICAgIHwgIDU4NiArKysrKysNCj4gIC4uLi9CdXMvVXNiL1VzYk5ldHdvcmsvVXNiUm5kaXMvVXNi Um5kaXMuaW5mICB8ICAgNDIgKw0KPiAgLi4uL1VzYk5ldHdvcmsvVXNiUm5kaXMvVXNiUm5kaXNG dW5jdGlvbi5jICAgIHwgMTcxOCArKysrKysrKysrKysrKysrDQo+ICAuLi4vSW5jbHVkZS9Qcm90 b2NvbC9Vc2JFdGhlcm5ldFByb3RvY29sLmggICAgfCAgODc4ICsrKysrKysrDQo+ICBNZGVNb2R1 bGVQa2cvTWRlTW9kdWxlUGtnLmRlYyAgICAgICAgICAgICAgICAgfCAgIDE4ICsNCj4gIE1kZU1v ZHVsZVBrZy9NZGVNb2R1bGVQa2cuZHNjICAgICAgICAgICAgICAgICB8ICAgIDQgKw0KPiAgMTMg ZmlsZXMgY2hhbmdlZCwgNzI3OSBpbnNlcnRpb25zKCspDQo+ICBjcmVhdGUgbW9kZSAxMDA2NDQN Cj4gTWRlTW9kdWxlUGtnL0J1cy9Vc2IvVXNiTmV0d29yay9OZXR3b3JrQ29tbW9uL0NvbXBvbmVu dE5hbWUuYw0KPiAgY3JlYXRlIG1vZGUgMTAwNjQ0DQo+IE1kZU1vZHVsZVBrZy9CdXMvVXNiL1Vz Yk5ldHdvcmsvTmV0d29ya0NvbW1vbi9Ecml2ZXJCaW5kaW5nLmMNCj4gIGNyZWF0ZSBtb2RlIDEw MDY0NA0KPiBNZGVNb2R1bGVQa2cvQnVzL1VzYi9Vc2JOZXR3b3JrL05ldHdvcmtDb21tb24vRHJp dmVyQmluZGluZy5oDQo+ICBjcmVhdGUgbW9kZSAxMDA2NDQNCj4gTWRlTW9kdWxlUGtnL0J1cy9V c2IvVXNiTmV0d29yay9OZXR3b3JrQ29tbW9uL05ldHdvcmtDb21tb24uaW5mDQo+ICBjcmVhdGUg bW9kZSAxMDA2NDQNCj4gTWRlTW9kdWxlUGtnL0J1cy9Vc2IvVXNiTmV0d29yay9OZXR3b3JrQ29t bW9uL1B4ZUZ1bmN0aW9uLmMNCj4gIGNyZWF0ZSBtb2RlIDEwMDY0NA0KPiBNZGVNb2R1bGVQa2cv QnVzL1VzYi9Vc2JOZXR3b3JrL1VzYlJuZGlzL0NvbXBvbmVudE5hbWUuYw0KPiAgY3JlYXRlIG1v ZGUgMTAwNjQ0DQo+IE1kZU1vZHVsZVBrZy9CdXMvVXNiL1VzYk5ldHdvcmsvVXNiUm5kaXMvVXNi Um5kaXMuYw0KPiAgY3JlYXRlIG1vZGUgMTAwNjQ0DQo+IE1kZU1vZHVsZVBrZy9CdXMvVXNiL1Vz Yk5ldHdvcmsvVXNiUm5kaXMvVXNiUm5kaXMuaA0KPiAgY3JlYXRlIG1vZGUgMTAwNjQ0DQo+IE1k ZU1vZHVsZVBrZy9CdXMvVXNiL1VzYk5ldHdvcmsvVXNiUm5kaXMvVXNiUm5kaXMuaW5mDQo+ICBj cmVhdGUgbW9kZSAxMDA2NDQNCj4gTWRlTW9kdWxlUGtnL0J1cy9Vc2IvVXNiTmV0d29yay9Vc2JS bmRpcy9Vc2JSbmRpc0Z1bmN0aW9uLmMNCj4gIGNyZWF0ZSBtb2RlIDEwMDY0NCBNZGVNb2R1bGVQ a2cvSW5jbHVkZS9Qcm90b2NvbC9Vc2JFdGhlcm5ldFByb3RvY29sLmgNCj4gDQo+IGRpZmYgLS1n aXQNCj4gYS9NZGVNb2R1bGVQa2cvQnVzL1VzYi9Vc2JOZXR3b3JrL05ldHdvcmtDb21tb24vQ29t cG9uZW50TmFtZS5jDQo+IGIvTWRlTW9kdWxlUGtnL0J1cy9Vc2IvVXNiTmV0d29yay9OZXR3b3Jr Q29tbW9uL0NvbXBvbmVudE5hbWUuYw0KPiBuZXcgZmlsZSBtb2RlIDEwMDY0NA0KPiBpbmRleCAw MDAwMDAwMDAwLi5lODM0NjllMTMwDQo+IC0tLSAvZGV2L251bGwNCj4gKysrDQo+IGIvTWRlTW9k dWxlUGtnL0J1cy9Vc2IvVXNiTmV0d29yay9OZXR3b3JrQ29tbW9uL0NvbXBvbmVudE5hbWUuYw0K PiBAQCAtMCwwICsxLDI2MyBAQA0KPiArLyoqIEBmaWxlDQo+ICsgIFRoaXMgZmlsZSBjb250YWlu cyBjb2RlIGZvciBVU0IgbmV0d29yayBjb21tb24gZHJpdmVyDQo+ICsgIGNvbXBvbmVudCBuYW1l IGRlZmluaXRpb25zDQo+ICsNCj4gKyAgQ29weXJpZ2h0IChjKSAyMDIzLCBBbWVyaWNhbiBNZWdh dHJlbmRzIEludGVybmF0aW9uYWwgTExDLiBBbGwgcmlnaHRzDQo+IHJlc2VydmVkLjxCUj4NCj4g KyAgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEJTRC0yLUNsYXVzZS1QYXRlbnQNCj4gKyoqLw0K PiArDQo+ICsjaW5jbHVkZSAiRHJpdmVyQmluZGluZy5oIg0KPiArDQo+ICtleHRlcm4gRUZJX0RS SVZFUl9CSU5ESU5HX1BST1RPQ09MICBnTmV0d29ya0NvbW1vbkRyaXZlckJpbmRpbmc7DQo+ICsN Cj4gK0dMT0JBTF9SRU1PVkVfSUZfVU5SRUZFUkVOQ0VEIEVGSV9VTklDT0RFX1NUUklOR19UQUJM RQ0KPiBnTmV0d29ya0NvbW1vbkRyaXZlck5hbWVUYWJsZVtdID0gew0KPiArICB7DQo+ICsgICAg ImVuZztlbiIsDQo+ICsgICAgTCJOZXR3b3JrIENvbW1vbiBEcml2ZXIiDQo+ICsgIH0sDQo+ICsg IHsNCj4gKyAgICBOVUxMLA0KPiArICAgIE5VTEwNCj4gKyAgfQ0KPiArfTsNCj4gK0dMT0JBTF9S RU1PVkVfSUZfVU5SRUZFUkVOQ0VEIEVGSV9VTklDT0RFX1NUUklOR19UQUJMRQ0KPiAqZ05ldHdv cmtDb21tb25Db250cm9sbGVyTmFtZVRhYmxlID0gTlVMTDsNCj4gKw0KPiArRUZJX1NUQVRVUw0K PiArRUZJQVBJDQo+ICtOZXR3b3JrQ29tbW9uQ29tcG9uZW50TmFtZUdldERyaXZlck5hbWUgKA0K PiArICBJTiAgRUZJX0NPTVBPTkVOVF9OQU1FX1BST1RPQ09MICAqVGhpcywNCj4gKyAgSU4gIENI QVI4ICAgICAgICAgICAgICAgICAgICAgICAgKkxhbmd1YWdlLA0KPiArICBPVVQgQ0hBUjE2ICAg ICAgICAgICAgICAgICAgICAgICAqKkRyaXZlck5hbWUNCj4gKyAgKTsNCj4gKw0KPiArRUZJX1NU QVRVUw0KPiArRUZJQVBJDQo+ICtOZXR3b3JrQ29tbW9uQ29tcG9uZW50TmFtZUdldENvbnRyb2xs ZXJOYW1lICgNCj4gKyAgSU4gRUZJX0NPTVBPTkVOVF9OQU1FX1BST1RPQ09MICAqVGhpcywNCj4g KyAgSU4gRUZJX0hBTkRMRSAgICAgICAgICAgICAgICAgICBDb250cm9sbGVyLA0KPiArICBJTiBF RklfSEFORExFICAgICAgICAgICAgICAgICAgIENoaWxkSGFuZGxlICAgICAgICBPUFRJT05BTCwN Cj4gKyAgSU4gQ0hBUjggICAgICAgICAgICAgICAgICAgICAgICAqTGFuZ3VhZ2UsDQo+ICsgIE9V VCBDSEFSMTYgICAgICAgICAgICAgICAgICAgICAgKipDb250cm9sbGVyTmFtZQ0KPiArICApOw0K PiArDQo+ICtHTE9CQUxfUkVNT1ZFX0lGX1VOUkVGRVJFTkNFRCBFRklfQ09NUE9ORU5UX05BTUVf UFJPVE9DT0wNCj4gZ05ldHdvcmtDb21tb25Db21wb25lbnROYW1lID0gew0KPiArICBOZXR3b3Jr Q29tbW9uQ29tcG9uZW50TmFtZUdldERyaXZlck5hbWUsDQo+ICsgIE5ldHdvcmtDb21tb25Db21w b25lbnROYW1lR2V0Q29udHJvbGxlck5hbWUsDQo+ICsgICJlbmciDQo+ICt9Ow0KPiArDQo+ICtH TE9CQUxfUkVNT1ZFX0lGX1VOUkVGRVJFTkNFRA0KPiBFRklfQ09NUE9ORU5UX05BTUUyX1BST1RP Q09MICBnTmV0d29ya0NvbW1vbkNvbXBvbmVudE5hbWUyID0NCj4gew0KPiArDQo+IChFRklfQ09N UE9ORU5UX05BTUUyX0dFVF9EUklWRVJfTkFNRSlOZXR3b3JrQ29tbW9uQ29tcG9uZW50DQo+IE5h bWVHZXREcml2ZXJOYW1lLA0KPiArDQo+IChFRklfQ09NUE9ORU5UX05BTUUyX0dFVF9DT05UUk9M TEVSX05BTUUpTmV0d29ya0NvbW1vbkNvbXANCj4gb25lbnROYW1lR2V0Q29udHJvbGxlck5hbWUs DQo+ICsgICJlbiINCj4gK307DQo+ICsNCj4gKy8qKg0KPiArICBSZXRyaWV2ZXMgYSBVbmljb2Rl IHN0cmluZyB0aGF0IGlzIHRoZSB1c2VyIHJlYWRhYmxlIG5hbWUgb2YgdGhlIGRyaXZlci4NCj4g Kw0KPiArICBUaGlzIGZ1bmN0aW9uIHJldHJpZXZlcyB0aGUgdXNlciByZWFkYWJsZSBuYW1lIG9m IGEgZHJpdmVyIGluIHRoZSBmb3JtIG9mIGENCj4gKyAgVW5pY29kZSBzdHJpbmcuIElmIHRoZSBk cml2ZXIgc3BlY2lmaWVkIGJ5IFRoaXMgaGFzIGEgdXNlciByZWFkYWJsZSBuYW1lIGluDQo+ICsg IHRoZSBsYW5ndWFnZSBzcGVjaWZpZWQgYnkgTGFuZ3VhZ2UsIHRoZW4gYSBwb2ludGVyIHRvIHRo ZSBkcml2ZXIgbmFtZSBpcw0KPiArICByZXR1cm5lZCBpbiBEcml2ZXJOYW1lLCBhbmQgRUZJX1NV Q0NFU1MgaXMgcmV0dXJuZWQuIElmIHRoZSBkcml2ZXIgc3BlY2lmaWVkDQo+ICsgIGJ5IFRoaXMg ZG9lcyBub3Qgc3VwcG9ydCB0aGUgbGFuZ3VhZ2Ugc3BlY2lmaWVkIGJ5IExhbmd1YWdlLA0KPiAr ICB0aGVuIEVGSV9VTlNVUFBPUlRFRCBpcyByZXR1cm5lZC4NCj4gKw0KPiArICBAcGFyYW1baW5d ICBUaGlzICAgICAgICAgICAgICBBIHBvaW50ZXIgdG8gdGhlDQo+IEVGSV9DT01QT05FTlRfTkFN RTJfUFJPVE9DT0wgb3INCj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRUZJX0NP TVBPTkVOVF9OQU1FX1BST1RPQ09MIGluc3RhbmNlLg0KPiArICBAcGFyYW1baW5dICBMYW5ndWFn ZSAgICAgICAgICBBIHBvaW50ZXIgdG8gYSBOdWxsLXRlcm1pbmF0ZWQgQVNDSUkgc3RyaW5nDQo+ ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFycmF5IGluZGljYXRpbmcgdGhlIGxh bmd1YWdlLiBUaGlzIGlzIHRoZQ0KPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBs YW5ndWFnZSBvZiB0aGUgZHJpdmVyIG5hbWUgdGhhdCB0aGUgY2FsbGVyIGlzDQo+ICsgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIHJlcXVlc3RpbmcsIGFuZCBpdCBtdXN0IG1hdGNoIG9u ZSBvZiB0aGUNCj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGFuZ3VhZ2VzIHNw ZWNpZmllZCBpbiBTdXBwb3J0ZWRMYW5ndWFnZXMuIFRoZQ0KPiArICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBudW1iZXIgb2YgbGFuZ3VhZ2VzIHN1cHBvcnRlZCBieSBhIGRyaXZlciBp cyB1cA0KPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0byB0aGUgZHJpdmVyIHdy aXRlci4gTGFuZ3VhZ2UgaXMgc3BlY2lmaWVkDQo+ICsgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIGluIFJGQyA0NjQ2IG9yIElTTyA2MzktMiBsYW5ndWFnZSBjb2RlIGZvcm1hdC4NCj4g KyAgQHBhcmFtW291dF0gRHJpdmVyTmFtZSAgICAgICAgQSBwb2ludGVyIHRvIHRoZSBVbmljb2Rl IHN0cmluZyB0byByZXR1cm4uDQo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRo aXMgVW5pY29kZSBzdHJpbmcgaXMgdGhlIG5hbWUgb2YgdGhlDQo+ICsgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIGRyaXZlciBzcGVjaWZpZWQgYnkgVGhpcyBpbiB0aGUgbGFuZ3VhZ2UN Cj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3BlY2lmaWVkIGJ5IExhbmd1YWdl Lg0KPiArDQo+ICsgIEByZXR2YWwgRUZJX1NVQ0NFU1MgICAgICAgICAgIFRoZSBVbmljb2RlIHN0 cmluZyBmb3IgdGhlIERyaXZlciBzcGVjaWZpZWQgYnkNCj4gKyAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgVGhpcyBhbmQgdGhlIGxhbmd1YWdlIHNwZWNpZmllZCBieSBMYW5ndWFnZSB3 YXMNCj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuZWQgaW4gRHJpdmVy TmFtZS4NCj4gKyAgQHJldHZhbCBFRklfSU5WQUxJRF9QQVJBTUVURVIgTGFuZ3VhZ2UgaXMgTlVM TC4NCj4gKyAgQHJldHZhbCBFRklfSU5WQUxJRF9QQVJBTUVURVIgRHJpdmVyTmFtZSBpcyBOVUxM Lg0KPiArICBAcmV0dmFsIEVGSV9VTlNVUFBPUlRFRCAgICAgICBUaGUgZHJpdmVyIHNwZWNpZmll ZCBieSBUaGlzIGRvZXMgbm90IHN1cHBvcnQNCj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgdGhlIGxhbmd1YWdlIHNwZWNpZmllZCBieSBMYW5ndWFnZS4NCj4gKw0KPiArKiovDQo+ ICtFRklfU1RBVFVTDQo+ICtFRklBUEkNCj4gK05ldHdvcmtDb21tb25Db21wb25lbnROYW1lR2V0 RHJpdmVyTmFtZSAoDQo+ICsgIElOICBFRklfQ09NUE9ORU5UX05BTUVfUFJPVE9DT0wgICpUaGlz LA0KPiArICBJTiAgQ0hBUjggICAgICAgICAgICAgICAgICAgICAgICAqTGFuZ3VhZ2UsDQo+ICsg IE9VVCBDSEFSMTYgICAgICAgICAgICAgICAgICAgICAgICoqRHJpdmVyTmFtZQ0KPiArICApDQo+ ICt7DQo+ICsgIHJldHVybiBMb29rdXBVbmljb2RlU3RyaW5nMiAoDQo+ICsgICAgICAgICAgIExh bmd1YWdlLA0KPiArICAgICAgICAgICBUaGlzLT5TdXBwb3J0ZWRMYW5ndWFnZXMsDQo+ICsgICAg ICAgICAgIGdOZXR3b3JrQ29tbW9uRHJpdmVyTmFtZVRhYmxlLA0KPiArICAgICAgICAgICBEcml2 ZXJOYW1lLA0KPiArICAgICAgICAgICAoQk9PTEVBTikoVGhpcyA9PSAmZ05ldHdvcmtDb21tb25D b21wb25lbnROYW1lKQ0KPiArICAgICAgICAgICApOw0KPiArfQ0KPiArDQo+ICsvKioNCj4gKyAg UmV0cmlldmVzIGEgVW5pY29kZSBzdHJpbmcgdGhhdCBpcyB0aGUgdXNlciByZWFkYWJsZSBuYW1l IG9mIHRoZSBjb250cm9sbGVyDQo+ICsgIHRoYXQgaXMgYmVpbmcgbWFuYWdlZCBieSBhIGRyaXZl ci4NCj4gKw0KPiArICBUaGlzIGZ1bmN0aW9uIHJldHJpZXZlcyB0aGUgdXNlciByZWFkYWJsZSBu YW1lIG9mIHRoZSBjb250cm9sbGVyIHNwZWNpZmllZCBieQ0KPiArICBDb250cm9sbGVySGFuZGxl IGFuZCBDaGlsZEhhbmRsZSBpbiB0aGUgZm9ybSBvZiBhIFVuaWNvZGUgc3RyaW5nLiBJZiB0aGUN Cj4gKyAgZHJpdmVyIHNwZWNpZmllZCBieSBUaGlzIGhhcyBhIHVzZXIgcmVhZGFibGUgbmFtZSBp biB0aGUgbGFuZ3VhZ2Ugc3BlY2lmaWVkDQo+IGJ5DQo+ICsgIExhbmd1YWdlLCB0aGVuIGEgcG9p bnRlciB0byB0aGUgY29udHJvbGxlciBuYW1lIGlzIHJldHVybmVkIGluDQo+IENvbnRyb2xsZXJO YW1lLA0KPiArICBhbmQgRUZJX1NVQ0NFU1MgaXMgcmV0dXJuZWQuICBJZiB0aGUgZHJpdmVyIHNw ZWNpZmllZCBieSBUaGlzIGlzIG5vdCBjdXJyZW50bHkNCj4gKyAgbWFuYWdpbmcgdGhlIGNvbnRy b2xsZXIgc3BlY2lmaWVkIGJ5IENvbnRyb2xsZXJIYW5kbGUgYW5kIENoaWxkSGFuZGxlLA0KPiAr ICB0aGVuIEVGSV9VTlNVUFBPUlRFRCBpcyByZXR1cm5lZC4gIElmIHRoZSBkcml2ZXIgc3BlY2lm aWVkIGJ5IFRoaXMgZG9lcyBub3QNCj4gKyAgc3VwcG9ydCB0aGUgbGFuZ3VhZ2Ugc3BlY2lmaWVk IGJ5IExhbmd1YWdlLCB0aGVuIEVGSV9VTlNVUFBPUlRFRCBpcw0KPiByZXR1cm5lZC4NCj4gKw0K PiArICBAcGFyYW1baW5dICBUaGlzICAgICAgICAgICAgICBBIHBvaW50ZXIgdG8gdGhlDQo+IEVG SV9DT01QT05FTlRfTkFNRTJfUFJPVE9DT0wgb3INCj4gKyAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgRUZJX0NPTVBPTkVOVF9OQU1FX1BST1RPQ09MIGluc3RhbmNlLg0KPiArICBAcGFy YW1baW5dICBDb250cm9sbGVyICAgICAgICBUaGUgaGFuZGxlIG9mIGEgY29udHJvbGxlciB0aGF0 IHRoZSBkcml2ZXINCj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3BlY2lmaWVk IGJ5IFRoaXMgaXMgbWFuYWdpbmcuICBUaGlzIGhhbmRsZQ0KPiArICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBzcGVjaWZpZXMgdGhlIGNvbnRyb2xsZXIgd2hvc2UgbmFtZSBpcyB0byBi ZQ0KPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm5lZC4NCj4gKyAgQHBh cmFtW2luXSAgQ2hpbGRIYW5kbGUgICAgICAgVGhlIGhhbmRsZSBvZiB0aGUgY2hpbGQgY29udHJv bGxlciB0byByZXRyaWV2ZQ0KPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGUg bmFtZSBvZi4gIFRoaXMgaXMgYW4gb3B0aW9uYWwgcGFyYW1ldGVyIHRoYXQNCj4gKyAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgbWF5IGJlIE5VTEwuICBJdCB3aWxsIGJlIE5VTEwgZm9y IGRldmljZQ0KPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkcml2ZXJzLiAgSXQg d2lsbCBhbHNvIGJlIE5VTEwgZm9yIGEgYnVzIGRyaXZlcnMNCj4gKyAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgdGhhdCB3aXNoIHRvIHJldHJpZXZlIHRoZSBuYW1lIG9mIHRoZSBidXMN Cj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udHJvbGxlci4gIEl0IHdpbGwg bm90IGJlIE5VTEwgZm9yIGEgYnVzDQo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IGRyaXZlciB0aGF0IHdpc2hlcyB0byByZXRyaWV2ZSB0aGUgbmFtZSBvZiBhDQo+ICsgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIGNoaWxkIGNvbnRyb2xsZXIuDQo+ICsgIEBwYXJhbVtp bl0gIExhbmd1YWdlICAgICAgICAgIEEgcG9pbnRlciB0byBhIE51bGwtdGVybWluYXRlZCBBU0NJ SSBzdHJpbmcNCj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXJyYXkgaW5kaWNh dGluZyB0aGUgbGFuZ3VhZ2UuICBUaGlzIGlzIHRoZQ0KPiArICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBsYW5ndWFnZSBvZiB0aGUgZHJpdmVyIG5hbWUgdGhhdCB0aGUgY2FsbGVyIGlz DQo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlcXVlc3RpbmcsIGFuZCBpdCBt dXN0IG1hdGNoIG9uZSBvZiB0aGUNCj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg bGFuZ3VhZ2VzIHNwZWNpZmllZCBpbiBTdXBwb3J0ZWRMYW5ndWFnZXMuIFRoZQ0KPiArICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBudW1iZXIgb2YgbGFuZ3VhZ2VzIHN1cHBvcnRlZCBi eSBhIGRyaXZlciBpcyB1cA0KPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0byB0 aGUgZHJpdmVyIHdyaXRlci4gTGFuZ3VhZ2UgaXMgc3BlY2lmaWVkIGluDQo+ICsgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIFJGQyA0NjQ2IG9yIElTTyA2MzktMiBsYW5ndWFnZSBjb2Rl IGZvcm1hdC4NCj4gKyAgQHBhcmFtW291dF0gQ29udHJvbGxlck5hbWUgICAgQSBwb2ludGVyIHRv IHRoZSBVbmljb2RlIHN0cmluZyB0byByZXR1cm4uDQo+ICsgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIFRoaXMgVW5pY29kZSBzdHJpbmcgaXMgdGhlIG5hbWUgb2YgdGhlDQo+ICsgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRyb2xsZXIgc3BlY2lmaWVkIGJ5IENvbnRy b2xsZXJIYW5kbGUgYW5kDQo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENoaWxk SGFuZGxlIGluIHRoZSBsYW5ndWFnZSBzcGVjaWZpZWQgYnkNCj4gKyAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgTGFuZ3VhZ2UgZnJvbSB0aGUgcG9pbnQgb2YgdmlldyBvZiB0aGUgZHJp dmVyDQo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNwZWNpZmllZCBieSBUaGlz Lg0KPiArDQo+ICsgIEByZXR2YWwgRUZJX1NVQ0NFU1MgICAgICAgICAgIFRoZSBVbmljb2RlIHN0 cmluZyBmb3IgdGhlIHVzZXIgcmVhZGFibGUgbmFtZQ0KPiBpbg0KPiArICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICB0aGUgbGFuZ3VhZ2Ugc3BlY2lmaWVkIGJ5IExhbmd1YWdlIGZvciB0 aGUNCj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZHJpdmVyIHNwZWNpZmllZCBi eSBUaGlzIHdhcyByZXR1cm5lZCBpbg0KPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBEcml2ZXJOYW1lLg0KPiArICBAcmV0dmFsIEVGSV9JTlZBTElEX1BBUkFNRVRFUiBDb250cm9s bGVySGFuZGxlIGlzIG5vdCBhIHZhbGlkDQo+IEVGSV9IQU5ETEUuDQo+ICsgIEByZXR2YWwgRUZJ X0lOVkFMSURfUEFSQU1FVEVSIENoaWxkSGFuZGxlIGlzIG5vdCBOVUxMIGFuZCBpdCBpcyBub3Qg YQ0KPiB2YWxpZA0KPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBFRklfSEFORExF Lg0KPiArICBAcmV0dmFsIEVGSV9JTlZBTElEX1BBUkFNRVRFUiBMYW5ndWFnZSBpcyBOVUxMLg0K PiArICBAcmV0dmFsIEVGSV9JTlZBTElEX1BBUkFNRVRFUiBDb250cm9sbGVyTmFtZSBpcyBOVUxM Lg0KPiArICBAcmV0dmFsIEVGSV9VTlNVUFBPUlRFRCAgICAgICBUaGUgZHJpdmVyIHNwZWNpZmll ZCBieSBUaGlzIGlzIG5vdCBjdXJyZW50bHkNCj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgbWFuYWdpbmcgdGhlIGNvbnRyb2xsZXIgc3BlY2lmaWVkIGJ5DQo+ICsgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIENvbnRyb2xsZXJIYW5kbGUgYW5kIENoaWxkSGFuZGxlLg0K PiArICBAcmV0dmFsIEVGSV9VTlNVUFBPUlRFRCAgICAgICBUaGUgZHJpdmVyIHNwZWNpZmllZCBi eSBUaGlzIGRvZXMgbm90IHN1cHBvcnQNCj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgdGhlIGxhbmd1YWdlIHNwZWNpZmllZCBieSBMYW5ndWFnZS4NCj4gKw0KPiArKiovDQo+ICtF RklfU1RBVFVTDQo+ICtFRklBUEkNCj4gK05ldHdvcmtDb21tb25Db21wb25lbnROYW1lR2V0Q29u dHJvbGxlck5hbWUgKA0KPiArICBJTiAgRUZJX0NPTVBPTkVOVF9OQU1FX1BST1RPQ09MICAqVGhp cywNCj4gKyAgSU4gIEVGSV9IQU5ETEUgICAgICAgICAgICAgICAgICAgQ29udHJvbGxlciwNCj4g KyAgSU4gIEVGSV9IQU5ETEUgICAgICAgICAgICAgICAgICAgQ2hpbGRIYW5kbGUgICAgICAgIE9Q VElPTkFMLA0KPiArICBJTiAgQ0hBUjggICAgICAgICAgICAgICAgICAgICAgICAqTGFuZ3VhZ2Us DQo+ICsgIE9VVCBDSEFSMTYgICAgICAgICAgICAgICAgICAgICAgICoqQ29udHJvbGxlck5hbWUN Cj4gKyAgKQ0KPiArew0KPiArICBFRklfU1RBVFVTICAgICAgICAgICAgICAgICBTdGF0dXM7DQo+ ICsgIENIQVIxNiAgICAgICAgICAgICAgICAgICAgICpIYW5kbGVOYW1lOw0KPiArICBFRklfVVNC X0lPX1BST1RPQ09MICAgICAgICAqVXNiSW87DQo+ICsgIEVGSV9VU0JfREVWSUNFX0RFU0NSSVBU T1IgIERldkRlc2M7DQo+ICsNCj4gKyAgaWYgKCFMYW5ndWFnZSB8fCAhQ29udHJvbGxlck5hbWUp IHsNCj4gKyAgICByZXR1cm4gRUZJX0lOVkFMSURfUEFSQU1FVEVSOw0KPiArICB9DQo+ICsNCj4g KyAgaWYgKENoaWxkSGFuZGxlID09IE5VTEwpIHsNCj4gKyAgICByZXR1cm4gRUZJX1VOU1VQUE9S VEVEOw0KPiArICB9DQo+ICsNCj4gKyAgLy8NCj4gKyAgLy8gTWFrZSBzdXJlIHRoaXMgZHJpdmVy IGlzIGN1cnJlbnRseSBtYW5hZ2luZyBDb250cm9sbGVySGFuZGxlDQo+ICsgIC8vDQo+ICsgIFN0 YXR1cyA9IEVmaVRlc3RNYW5hZ2VkRGV2aWNlICgNCj4gKyAgICAgICAgICAgICBDb250cm9sbGVy LA0KPiArICAgICAgICAgICAgIGdOZXR3b3JrQ29tbW9uRHJpdmVyQmluZGluZy5Ecml2ZXJCaW5k aW5nSGFuZGxlLA0KPiArICAgICAgICAgICAgICZnRWRrSUlVc2JFdGhQcm90b2NvbEd1aWQNCj4g KyAgICAgICAgICAgICApOw0KPiArICBpZiAoRUZJX0VSUk9SIChTdGF0dXMpKSB7DQo+ICsgICAg cmV0dXJuIFN0YXR1czsNCj4gKyAgfQ0KPiArDQo+ICsgIC8vDQo+ICsgIC8vIE1ha2Ugc3VyZSB0 aGlzIGRyaXZlciBwcm9kdWNlZCBDaGlsZEhhbmRsZQ0KPiArICAvLw0KPiArICBTdGF0dXMgPSBF ZmlUZXN0Q2hpbGRIYW5kbGUgKA0KPiArICAgICAgICAgICAgIENvbnRyb2xsZXIsDQo+ICsgICAg ICAgICAgICAgQ2hpbGRIYW5kbGUsDQo+ICsgICAgICAgICAgICAgJmdFZGtJSVVzYkV0aFByb3Rv Y29sR3VpZA0KPiArICAgICAgICAgICAgICk7DQo+ICsgIGlmIChFRklfRVJST1IgKFN0YXR1cykp IHsNCj4gKyAgICByZXR1cm4gU3RhdHVzOw0KPiArICB9DQo+ICsNCj4gKyAgU3RhdHVzID0gZ0JT LT5IYW5kbGVQcm90b2NvbCAoQ29udHJvbGxlciwgJmdFZmlVc2JJb1Byb3RvY29sR3VpZCwgKFZP SUQNCj4gKiopJlVzYklvKTsNCj4gKw0KPiArICBpZiAoIUVGSV9FUlJPUiAoU3RhdHVzKSkgew0K PiArICAgIFN0YXR1cyA9IFVzYklvLT5Vc2JHZXREZXZpY2VEZXNjcmlwdG9yIChVc2JJbywgJkRl dkRlc2MpOw0KPiArICAgIGlmIChFRklfRVJST1IgKFN0YXR1cykpIHsNCj4gKyAgICAgIHJldHVy biBTdGF0dXM7DQo+ICsgICAgfQ0KPiArDQo+ICsgICAgU3RhdHVzID0gVXNiSW8tPlVzYkdldFN0 cmluZ0Rlc2NyaXB0b3IgKFVzYklvLCAweDQwOSwNCj4gRGV2RGVzYy5TdHJNYW51ZmFjdHVyZXIs ICZIYW5kbGVOYW1lKTsNCj4gKyAgICBpZiAoRUZJX0VSUk9SIChTdGF0dXMpKSB7DQo+ICsgICAg ICByZXR1cm4gU3RhdHVzOw0KPiArICAgIH0NCj4gKw0KPiArICAgICpDb250cm9sbGVyTmFtZSA9 IEhhbmRsZU5hbWU7DQo+ICsNCj4gKyAgICBpZiAoZ05ldHdvcmtDb21tb25Db250cm9sbGVyTmFt ZVRhYmxlICE9IE5VTEwpIHsNCj4gKyAgICAgIEZyZWVVbmljb2RlU3RyaW5nVGFibGUgKGdOZXR3 b3JrQ29tbW9uQ29udHJvbGxlck5hbWVUYWJsZSk7DQo+ICsgICAgICBnTmV0d29ya0NvbW1vbkNv bnRyb2xsZXJOYW1lVGFibGUgPSBOVUxMOw0KPiArICAgIH0NCj4gKw0KPiArICAgIFN0YXR1cyA9 IEFkZFVuaWNvZGVTdHJpbmcyICgNCj4gKyAgICAgICAgICAgICAgICJlbmciLA0KPiArICAgICAg ICAgICAgICAgZ05ldHdvcmtDb21tb25Db21wb25lbnROYW1lLlN1cHBvcnRlZExhbmd1YWdlcywN Cj4gKyAgICAgICAgICAgICAgICZnTmV0d29ya0NvbW1vbkNvbnRyb2xsZXJOYW1lVGFibGUsDQo+ ICsgICAgICAgICAgICAgICBIYW5kbGVOYW1lLA0KPiArICAgICAgICAgICAgICAgVFJVRQ0KPiAr ICAgICAgICAgICAgICAgKTsNCj4gKyAgICBpZiAoRUZJX0VSUk9SIChTdGF0dXMpKSB7DQo+ICsg ICAgICByZXR1cm4gU3RhdHVzOw0KPiArICAgIH0NCj4gKw0KPiArICAgIFN0YXR1cyA9IEFkZFVu aWNvZGVTdHJpbmcyICgNCj4gKyAgICAgICAgICAgICAgICJlbiIsDQo+ICsgICAgICAgICAgICAg ICBnTmV0d29ya0NvbW1vbkNvbXBvbmVudE5hbWUyLlN1cHBvcnRlZExhbmd1YWdlcywNCj4gKyAg ICAgICAgICAgICAgICZnTmV0d29ya0NvbW1vbkNvbnRyb2xsZXJOYW1lVGFibGUsDQo+ICsgICAg ICAgICAgICAgICBIYW5kbGVOYW1lLA0KPiArICAgICAgICAgICAgICAgRkFMU0UNCj4gKyAgICAg ICAgICAgICAgICk7DQo+ICsgICAgaWYgKEVGSV9FUlJPUiAoU3RhdHVzKSkgew0KPiArICAgICAg cmV0dXJuIFN0YXR1czsNCj4gKyAgICB9DQo+ICsNCj4gKyAgICByZXR1cm4gTG9va3VwVW5pY29k ZVN0cmluZzIgKA0KPiArICAgICAgICAgICAgIExhbmd1YWdlLA0KPiArICAgICAgICAgICAgIFRo aXMtPlN1cHBvcnRlZExhbmd1YWdlcywNCj4gKyAgICAgICAgICAgICBnTmV0d29ya0NvbW1vbkNv bnRyb2xsZXJOYW1lVGFibGUsDQo+ICsgICAgICAgICAgICAgQ29udHJvbGxlck5hbWUsDQo+ICsg ICAgICAgICAgICAgKEJPT0xFQU4pKFRoaXMgPT0gJmdOZXR3b3JrQ29tbW9uQ29tcG9uZW50TmFt ZSkNCj4gKyAgICAgICAgICAgICApOw0KPiArICB9DQo+ICsNCj4gKyAgcmV0dXJuIEVGSV9VTlNV UFBPUlRFRDsNCj4gK30NCj4gZGlmZiAtLWdpdA0KPiBhL01kZU1vZHVsZVBrZy9CdXMvVXNiL1Vz Yk5ldHdvcmsvTmV0d29ya0NvbW1vbi9Ecml2ZXJCaW5kaW5nLmMNCj4gYi9NZGVNb2R1bGVQa2cv QnVzL1VzYi9Vc2JOZXR3b3JrL05ldHdvcmtDb21tb24vRHJpdmVyQmluZGluZy5jDQo+IG5ldyBm aWxlIG1vZGUgMTAwNjQ0DQo+IGluZGV4IDAwMDAwMDAwMDAuLjg1MjBjZjg4NmMNCj4gLS0tIC9k ZXYvbnVsbA0KPiArKysgYi9NZGVNb2R1bGVQa2cvQnVzL1VzYi9Vc2JOZXR3b3JrL05ldHdvcmtD b21tb24vRHJpdmVyQmluZGluZy5jDQo+IEBAIC0wLDAgKzEsNTk1IEBADQo+ICsvKiogQGZpbGUN Cj4gKyAgVGhpcyBmaWxlIGNvbnRhaW5zIGNvZGUgZm9yIFVTQiBuZXR3b3JrIGJpbmRpbmcgZHJp dmVyDQo+ICsNCj4gKyAgQ29weXJpZ2h0IChjKSAyMDIzLCBBbWVyaWNhbiBNZWdhdHJlbmRzIElu dGVybmF0aW9uYWwgTExDLiBBbGwgcmlnaHRzDQo+IHJlc2VydmVkLjxCUj4NCj4gKyAgU1BEWC1M aWNlbnNlLUlkZW50aWZpZXI6IEJTRC0yLUNsYXVzZS1QYXRlbnQNCj4gKyoqLw0KPiArDQo+ICsj aW5jbHVkZSAiRHJpdmVyQmluZGluZy5oIg0KPiArDQo+ICtQWEVfU1dfVU5ESSAgKmdQeGUgPSBO VUxMOw0KPiArTklDX0RFVklDRSAgICpnTGFuRGV2aWNlTGlzdFtNQVhfTEFOX0lOVEVSRkFDRV07 DQo+ICtVSU5UMzIgICAgICAgZ1JhdGVMaW1pdGluZ0NyZWRpdDsNCj4gK1VJTlQzMiAgICAgICBn UmF0ZUxpbWl0aW5nUG9sbFRpbWVyOw0KPiArQk9PTEVBTiAgICAgIGdSYXRlTGltaXRpbmdFbmFi bGU7DQo+ICsNCj4gK0VGSV9EUklWRVJfQklORElOR19QUk9UT0NPTCAgZ05ldHdvcmtDb21tb25E cml2ZXJCaW5kaW5nID0gew0KPiArICBOZXR3b3JrQ29tbW9uU3VwcG9ydGVkLA0KPiArICBOZXR3 b3JrQ29tbW9uRHJpdmVyU3RhcnQsDQo+ICsgIE5ldHdvcmtDb21tb25Ecml2ZXJTdG9wLA0KPiAr ICBORVRXT1JLX0NPTU1PTl9EUklWRVJfVkVSU0lPTiwNCj4gKyAgTlVMTCwNCj4gKyAgTlVMTA0K PiArfTsNCj4gKw0KPiArLyoqDQo+ICsgIENyZWF0ZSBNQUMgRGV2aWNlIFBhdGgNCj4gKw0KPiAr ICBAcGFyYW1baW4sIG91dF0gRGV2ICAgICAgICAgICAgIEEgcG9pbnRlciB0byB0aGUgRUZJX0RF VklDRV9QQVRIX1BST1RPQ09MDQo+IGluc3RhbmNlLg0KPiArICBAcGFyYW1baW5dICAgICAgQmFz ZURldiAgICAgICAgIEEgcG9pbnRlciB0byB0aGUgRUZJX0RFVklDRV9QQVRIX1BST1RPQ09MDQo+ IGluc3RhbmNlLg0KPiArICBAcGFyYW1baW5dICAgICAgTmljICAgICAgICAgICAgIEEgcG9pbnRl ciB0byB0aGUgTmV0d29yayBpbnRlcmZhY2UgY29udHJvbGxlciBkYXRhLg0KPiArDQo+ICsgIEBy ZXR2YWwgRUZJX09VVF9PRl9SRVNPVVJDRVMgICAgVGhlIGRldmljZSBwYXRoIGNvdWxkIG5vdCBi ZSBjcmVhdGVkDQo+IHN1Y2Nlc3NmdWxseSBkdWUgdG8gYSBsYWNrIG9mIHJlc291cmNlcy4NCj4g KyAgQHJldHZhbCBFRklfU1VDQ0VTUyAgICAgICAgICAgICBNQUMgZGV2aWNlIHBhdGggY3JlYXRl ZCBzdWNjZXNzZnVsbHkuDQo+ICsNCj4gKyoqLw0KPiArRUZJX1NUQVRVUw0KPiArQ3JlYXRlTWFj RGV2aWNlUGF0aCAoDQo+ICsgIElOIE9VVCAgRUZJX0RFVklDRV9QQVRIX1BST1RPQ09MICAqKkRl diwNCj4gKyAgSU4gICAgICBFRklfREVWSUNFX1BBVEhfUFJPVE9DT0wgICpCYXNlRGV2LA0KPiAr ICBJTiAgICAgIE5JQ19EQVRBICAgICAgICAgICAgICAgICAgKk5pYw0KPiArICApDQo+ICt7DQo+ ICsgIEVGSV9TVEFUVVMgICAgICAgICAgICAgICAgU3RhdHVzOw0KPiArICBNQUNfQUREUl9ERVZJ Q0VfUEFUSCAgICAgIE1hY0FkZHJOb2RlOw0KPiArICBFRklfREVWSUNFX1BBVEhfUFJPVE9DT0wg ICpFbmROb2RlOw0KPiArICBVSU5UOCAgICAgICAgICAgICAgICAgICAgICpEZXZpY2VQYXRoOw0K PiArICBVSU5UMTYgICAgICAgICAgICAgICAgICAgIFRvdGFsTGVuZ3RoOw0KPiArICBVSU5UMTYg ICAgICAgICAgICAgICAgICAgIEJhc2VMZW5ndGg7DQo+ICsNCj4gKyAgWmVyb01lbSAoJk1hY0Fk ZHJOb2RlLCBzaXplb2YgKE1BQ19BRERSX0RFVklDRV9QQVRIKSk7DQo+ICsgIENvcHlNZW0gKCZN YWNBZGRyTm9kZS5NYWNBZGRyZXNzLCAmTmljLT5NYWNBZGRyLCBzaXplb2YNCj4gKEVGSV9NQUNf QUREUkVTUykpOw0KPiArDQo+ICsgIE1hY0FkZHJOb2RlLkhlYWRlci5UeXBlICAgICAgPSBNRVNT QUdJTkdfREVWSUNFX1BBVEg7DQo+ICsgIE1hY0FkZHJOb2RlLkhlYWRlci5TdWJUeXBlICAgPSBN U0dfTUFDX0FERFJfRFA7DQo+ICsgIE1hY0FkZHJOb2RlLkhlYWRlci5MZW5ndGhbMF0gPSAoVUlO VDgpc2l6ZW9mIChNYWNBZGRyTm9kZSk7DQo+ICsgIE1hY0FkZHJOb2RlLkhlYWRlci5MZW5ndGhb MV0gPSAwOw0KPiArDQo+ICsgIEVuZE5vZGUgPSBCYXNlRGV2Ow0KPiArDQo+ICsgIHdoaWxlICgh SXNEZXZpY2VQYXRoRW5kIChFbmROb2RlKSkgew0KPiArICAgIEVuZE5vZGUgPSBOZXh0RGV2aWNl UGF0aE5vZGUgKEVuZE5vZGUpOw0KPiArICB9DQo+ICsNCj4gKyAgQmFzZUxlbmd0aCAgPSAoVUlO VDE2KSgoVUlOVE4pKEVuZE5vZGUpIC0gKFVJTlROKShCYXNlRGV2KSk7DQo+ICsgIFRvdGFsTGVu Z3RoID0gKFVJTlQxNikoQmFzZUxlbmd0aCArIHNpemVvZiAoTWFjQWRkck5vZGUpICsgc2l6ZW9m DQo+IChFRklfREVWSUNFX1BBVEhfUFJPVE9DT0wpKTsNCj4gKw0KPiArICBTdGF0dXMgPSBnQlMt PkFsbG9jYXRlUG9vbCAoRWZpQm9vdFNlcnZpY2VzRGF0YSwgVG90YWxMZW5ndGgsIChWT0lEDQo+ ICoqKSZEZXZpY2VQYXRoKTsNCj4gKyAgaWYgKEVGSV9FUlJPUiAoU3RhdHVzKSkgew0KPiArICAg IHJldHVybiBTdGF0dXM7DQo+ICsgIH0NCj4gKw0KPiArICAqRGV2ID0gKEVGSV9ERVZJQ0VfUEFU SF9QUk9UT0NPTCAqKURldmljZVBhdGg7DQo+ICsgIENvcHlNZW0gKERldmljZVBhdGgsIChDSEFS OCAqKUJhc2VEZXYsIEJhc2VMZW5ndGgpOw0KPiArICBEZXZpY2VQYXRoICs9IEJhc2VMZW5ndGg7 DQo+ICsgIENvcHlNZW0gKERldmljZVBhdGgsIChDSEFSOCAqKSZNYWNBZGRyTm9kZSwgc2l6ZW9m IChNYWNBZGRyTm9kZSkpOw0KPiArICBEZXZpY2VQYXRoICs9IHNpemVvZiAoTWFjQWRkck5vZGUp Ow0KPiArICBDb3B5TWVtIChEZXZpY2VQYXRoLCAoQ0hBUjggKilFbmROb2RlLCBzaXplb2YNCj4g KEVGSV9ERVZJQ0VfUEFUSF9QUk9UT0NPTCkpOw0KPiArDQo+ICsgIHJldHVybiBFRklfU1VDQ0VT UzsNCj4gK30NCj4gKw0KPiArLyoqDQo+ICsgIE5ldHdvcmsgQ29tbW9uIERyaXZlciBCaW5kaW5n IFN1cHBvcnQuDQo+ICsNCj4gKyAgQHBhcmFtW2luXSAgVGhpcyAgICAgICAgICAgICAgICAgICAg UHJvdG9jb2wgaW5zdGFuY2UgcG9pbnRlci4NCj4gKyAgQHBhcmFtW2luXSAgQ29udHJvbGxlckhh bmRsZSAgICAgICAgSGFuZGxlIG9mIGRldmljZSB0byB0ZXN0Lg0KPiArICBAcGFyYW1baW5dICBS ZW1haW5pbmdEZXZpY2VQYXRoICAgICBPcHRpb25hbCBwYXJhbWV0ZXIgdXNlIHRvIHBpY2sgYQ0K PiBzcGVjaWZpYyBjaGlsZA0KPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBkZXZpY2UgdG8gc3RhcnQuDQo+ICsNCj4gKyAgQHJldHZhbCBFRklfU1VDQ0VTUyAgICAgICAg ICAgICAgICAgVGhpcyBkcml2ZXIgc3VwcG9ydHMgdGhpcyBkZXZpY2UuDQo+ICsgIEByZXR2YWwg RUZJX0FMUkVBRFlfU1RBUlRFRCAgICAgICAgIFRoaXMgZHJpdmVyIGlzIGFscmVhZHkgcnVubmlu ZyBvbiB0aGlzDQo+IGRldmljZS4NCj4gKyAgQHJldHZhbCBvdGhlciAgICAgICAgICAgICAgICAg ICAgICAgVGhpcyBkcml2ZXIgZG9lcyBub3Qgc3VwcG9ydCB0aGlzIGRldmljZS4NCj4gKw0KPiAr KiovDQo+ICtFRklfU1RBVFVTDQo+ICtFRklBUEkNCj4gK05ldHdvcmtDb21tb25TdXBwb3J0ZWQg KA0KPiArICBJTiBFRklfRFJJVkVSX0JJTkRJTkdfUFJPVE9DT0wgICpUaGlzLA0KPiArICBJTiBF RklfSEFORExFICAgICAgICAgICAgICAgICAgIENvbnRyb2xsZXJIYW5kbGUsDQo+ICsgIElOIEVG SV9ERVZJQ0VfUEFUSF9QUk9UT0NPTCAgICAgKlJlbWFpbmluZ0RldmljZVBhdGgNCj4gKyAgKQ0K PiArew0KPiArICBFRklfU1RBVFVTICAgICAgICAgICAgICAgICAgIFN0YXR1czsNCj4gKyAgRURL SUlfVVNCX0VUSEVSTkVUX1BST1RPQ09MICAqVXNiRXRoOw0KPiArDQo+ICsgIFN0YXR1cyA9IGdC Uy0+T3BlblByb3RvY29sICgNCj4gKyAgICAgICAgICAgICAgICAgIENvbnRyb2xsZXJIYW5kbGUs DQo+ICsgICAgICAgICAgICAgICAgICAmZ0Vka0lJVXNiRXRoUHJvdG9jb2xHdWlkLA0KPiArICAg ICAgICAgICAgICAgICAgKFZPSUQgKiopJlVzYkV0aCwNCj4gKyAgICAgICAgICAgICAgICAgIFRo aXMtPkRyaXZlckJpbmRpbmdIYW5kbGUsDQo+ICsgICAgICAgICAgICAgICAgICBDb250cm9sbGVy SGFuZGxlLA0KPiArICAgICAgICAgICAgICAgICAgRUZJX09QRU5fUFJPVE9DT0xfQllfRFJJVkVS DQo+ICsgICAgICAgICAgICAgICAgICApOw0KPiArICBpZiAoRUZJX0VSUk9SIChTdGF0dXMpKSB7 DQo+ICsgICAgcmV0dXJuIFN0YXR1czsNCj4gKyAgfQ0KPiArDQo+ICsgIGdCUy0+Q2xvc2VQcm90 b2NvbCAoDQo+ICsgICAgICAgICBDb250cm9sbGVySGFuZGxlLA0KPiArICAgICAgICAgJmdFZGtJ SVVzYkV0aFByb3RvY29sR3VpZCwNCj4gKyAgICAgICAgIFRoaXMtPkRyaXZlckJpbmRpbmdIYW5k bGUsDQo+ICsgICAgICAgICBDb250cm9sbGVySGFuZGxlDQo+ICsgICAgICAgICApOw0KPiArICBy ZXR1cm4gU3RhdHVzOw0KPiArfQ0KPiArDQo+ICsvKioNCj4gKyAgTmV0d29yayBDb21tb24gRHJp dmVyIEJpbmRpbmcgU3RhcnQuDQo+ICsNCj4gKyAgQHBhcmFtW2luXSAgVGhpcyAgICAgICAgICAg ICAgICAgICAgUHJvdG9jb2wgaW5zdGFuY2UgcG9pbnRlci4NCj4gKyAgQHBhcmFtW2luXSAgQ29u dHJvbGxlckhhbmRsZSAgICAgICAgSGFuZGxlIG9mIGRldmljZSB0byBiaW5kIGRyaXZlciB0by4N Cj4gKyAgQHBhcmFtW2luXSAgUmVtYWluaW5nRGV2aWNlUGF0aCAgICAgT3B0aW9uYWwgcGFyYW1l dGVyIHVzZSB0byBwaWNrIGENCj4gc3BlY2lmaWMgY2hpbGQNCj4gKyAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgZGV2aWNlIHRvIHN0YXJ0Lg0KPiArDQo+ICsgIEByZXR2YWwg RUZJX1NVQ0NFU1MgICAgICAgICAgICAgICAgIFRoaXMgZHJpdmVyIGlzIGFkZGVkIHRvIENvbnRy b2xsZXJIYW5kbGUNCj4gKyAgQHJldHZhbCBFRklfREVWSUNFX0VSUk9SICAgICAgICAgICAgVGhp cyBkcml2ZXIgY291bGQgbm90IGJlIHN0YXJ0ZWQgZHVlIHRvIGENCj4gZGV2aWNlIGVycm9yDQo+ ICsgIEByZXR2YWwgRUZJX09VVF9PRl9SRVNPVVJDRVMgICAgICAgIFRoZSBkcml2ZXIgY291bGQg bm90IGluc3RhbGwNCj4gc3VjY2Vzc2Z1bGx5IGR1ZSB0byBhIGxhY2sgb2YgcmVzb3VyY2VzLg0K PiArICBAcmV0dmFsIG90aGVyICAgICAgICAgICAgICAgICAgICAgICBUaGlzIGRyaXZlciBkb2Vz IG5vdCBzdXBwb3J0IHRoaXMgZGV2aWNlDQo+ICsNCj4gKyoqLw0KPiArRUZJX1NUQVRVUw0KPiAr RUZJQVBJDQo+ICtOZXR3b3JrQ29tbW9uRHJpdmVyU3RhcnQgKA0KPiArICBJTiBFRklfRFJJVkVS X0JJTkRJTkdfUFJPVE9DT0wgICpUaGlzLA0KPiArICBJTiBFRklfSEFORExFICAgICAgICAgICAg ICAgICAgIENvbnRyb2xsZXJIYW5kbGUsDQo+ICsgIElOIEVGSV9ERVZJQ0VfUEFUSF9QUk9UT0NP TCAgICAgKlJlbWFpbmluZ0RldmljZVBhdGgNCj4gKyAgKQ0KPiArew0KPiArICBFRklfU1RBVFVT ICAgICAgICAgICAgICAgICAgIFN0YXR1czsNCj4gKyAgRUZJX0RFVklDRV9QQVRIX1BST1RPQ09M ICAgICAqVXNiRXRoUGF0aDsNCj4gKyAgRURLSUlfVVNCX0VUSEVSTkVUX1BST1RPQ09MICAqVXNi RXRoOw0KPiArICBFRklfTUFDX0FERFJFU1MgICAgICAgICAgICAgIE1hY0FkZHJlc3M7DQo+ICsg IFVJTlROICAgICAgICAgICAgICAgICAgICAgICAgQnVsa0RhdGFTaXplOw0KPiArICBOSUNfREVW SUNFICAgICAgICAgICAgICAgICAgICpOaWNEZXZpY2U7DQo+ICsgIFVJTlQ4ICAgICAgICAgICAg ICAgICAgICAgICAgKlRtcFB4ZVBvaW50ZXI7DQo+ICsNCj4gKyAgU3RhdHVzID0gZ0JTLT5PcGVu UHJvdG9jb2wgKA0KPiArICAgICAgICAgICAgICAgICAgQ29udHJvbGxlckhhbmRsZSwNCj4gKyAg ICAgICAgICAgICAgICAgICZnRWRrSUlVc2JFdGhQcm90b2NvbEd1aWQsDQo+ICsgICAgICAgICAg ICAgICAgICAoVk9JRCAqKikmVXNiRXRoLA0KPiArICAgICAgICAgICAgICAgICAgVGhpcy0+RHJp dmVyQmluZGluZ0hhbmRsZSwNCj4gKyAgICAgICAgICAgICAgICAgIENvbnRyb2xsZXJIYW5kbGUs DQo+ICsgICAgICAgICAgICAgICAgICBFRklfT1BFTl9QUk9UT0NPTF9CWV9EUklWRVINCj4gKyAg ICAgICAgICAgICAgICAgICk7DQo+ICsgIGlmIChFRklfRVJST1IgKFN0YXR1cykpIHsNCj4gKyAg ICByZXR1cm4gU3RhdHVzOw0KPiArICB9DQo+ICsNCj4gKyAgU3RhdHVzID0gZ0JTLT5PcGVuUHJv dG9jb2wgKA0KPiArICAgICAgICAgICAgICAgICAgQ29udHJvbGxlckhhbmRsZSwNCj4gKyAgICAg ICAgICAgICAgICAgICZnRWZpRGV2aWNlUGF0aFByb3RvY29sR3VpZCwNCj4gKyAgICAgICAgICAg ICAgICAgIChWT0lEICoqKSZVc2JFdGhQYXRoLA0KPiArICAgICAgICAgICAgICAgICAgVGhpcy0+ RHJpdmVyQmluZGluZ0hhbmRsZSwNCj4gKyAgICAgICAgICAgICAgICAgIENvbnRyb2xsZXJIYW5k bGUsDQo+ICsgICAgICAgICAgICAgICAgICBFRklfT1BFTl9QUk9UT0NPTF9CWV9EUklWRVINCj4g KyAgICAgICAgICAgICAgICAgICk7DQo+ICsNCj4gKyAgaWYgKEVGSV9FUlJPUiAoU3RhdHVzKSkg ew0KPiArICAgIGdCUy0+Q2xvc2VQcm90b2NvbCAoDQo+ICsgICAgICAgICAgIENvbnRyb2xsZXJI YW5kbGUsDQo+ICsgICAgICAgICAgICZnRWRrSUlVc2JFdGhQcm90b2NvbEd1aWQsDQo+ICsgICAg ICAgICAgIFRoaXMtPkRyaXZlckJpbmRpbmdIYW5kbGUsDQo+ICsgICAgICAgICAgIENvbnRyb2xs ZXJIYW5kbGUNCj4gKyAgICAgICAgICAgKTsNCj4gKyAgICByZXR1cm4gU3RhdHVzOw0KPiArICB9 DQo+ICsNCj4gKyAgWmVyb01lbSAoJk1hY0FkZHJlc3MsIHNpemVvZiAoRUZJX01BQ19BRERSRVNT KSk7DQo+ICsNCj4gKyAgU3RhdHVzID0gVXNiRXRoLT5Vc2JFdGhNYWNBZGRyZXNzIChVc2JFdGgs ICZNYWNBZGRyZXNzKTsNCj4gKyAgQVNTRVJUX0VGSV9FUlJPUiAoU3RhdHVzKTsNCj4gKyAgU3Rh dHVzID0gVXNiRXRoLT5Vc2JFdGhNYXhCdWxrU2l6ZSAoVXNiRXRoLCAmQnVsa0RhdGFTaXplKTsN Cj4gKw0KPiArICBpZiAoRUZJX0VSUk9SIChTdGF0dXMpKSB7DQo+ICsgICAgZ0JTLT5DbG9zZVBy b3RvY29sICgNCj4gKyAgICAgICAgICAgQ29udHJvbGxlckhhbmRsZSwNCj4gKyAgICAgICAgICAg JmdFZmlEZXZpY2VQYXRoUHJvdG9jb2xHdWlkLA0KPiArICAgICAgICAgICBUaGlzLT5Ecml2ZXJC aW5kaW5nSGFuZGxlLA0KPiArICAgICAgICAgICBDb250cm9sbGVySGFuZGxlDQo+ICsgICAgICAg ICAgICk7DQo+ICsgICAgZ0JTLT5DbG9zZVByb3RvY29sICgNCj4gKyAgICAgICAgICAgQ29udHJv bGxlckhhbmRsZSwNCj4gKyAgICAgICAgICAgJmdFZGtJSVVzYkV0aFByb3RvY29sR3VpZCwNCj4g KyAgICAgICAgICAgVGhpcy0+RHJpdmVyQmluZGluZ0hhbmRsZSwNCj4gKyAgICAgICAgICAgQ29u dHJvbGxlckhhbmRsZQ0KPiArICAgICAgICAgICApOw0KPiArICAgIHJldHVybiBTdGF0dXM7DQo+ ICsgIH0NCj4gKw0KPiArICBOaWNEZXZpY2UgPSBBbGxvY2F0ZVplcm9Qb29sIChzaXplb2YgKE5J Q19ERVZJQ0UpICsgQnVsa0RhdGFTaXplICsgNDA5Nik7DQo+ICsgIGlmICghTmljRGV2aWNlKSB7 DQo+ICsgICAgZ0JTLT5DbG9zZVByb3RvY29sICgNCj4gKyAgICAgICAgICAgQ29udHJvbGxlckhh bmRsZSwNCj4gKyAgICAgICAgICAgJmdFZmlEZXZpY2VQYXRoUHJvdG9jb2xHdWlkLA0KPiArICAg ICAgICAgICBUaGlzLT5Ecml2ZXJCaW5kaW5nSGFuZGxlLA0KPiArICAgICAgICAgICBDb250cm9s bGVySGFuZGxlDQo+ICsgICAgICAgICAgICk7DQo+ICsgICAgZ0JTLT5DbG9zZVByb3RvY29sICgN Cj4gKyAgICAgICAgICAgQ29udHJvbGxlckhhbmRsZSwNCj4gKyAgICAgICAgICAgJmdFZGtJSVVz YkV0aFByb3RvY29sR3VpZCwNCj4gKyAgICAgICAgICAgVGhpcy0+RHJpdmVyQmluZGluZ0hhbmRs ZSwNCj4gKyAgICAgICAgICAgQ29udHJvbGxlckhhbmRsZQ0KPiArICAgICAgICAgICApOw0KPiAr ICAgIHJldHVybiBFRklfT1VUX09GX1JFU09VUkNFUzsNCj4gKyAgfQ0KPiArDQo+ICsgIC8vIGZv ciBhbGlnbm1lbnQgYWRqdXN0bWVudA0KPiArICBpZiAoZ1B4ZSA9PSBOVUxMKSB7DQo+ICsgICAg VG1wUHhlUG9pbnRlciA9IE5VTEw7DQo+ICsgICAgVG1wUHhlUG9pbnRlciA9IEFsbG9jYXRlWmVy b1Bvb2wgKHNpemVvZiAoUFhFX1NXX1VOREkpICsgMTYpOw0KPiArICAgIGlmICghVG1wUHhlUG9p bnRlcikgew0KPiArICAgICAgaWYgKE5pY0RldmljZSAhPSBOVUxMKSB7DQo+ICsgICAgICAgIEZy ZWVQb29sIChOaWNEZXZpY2UpOw0KPiArICAgICAgfQ0KPiArDQo+ICsgICAgICBnQlMtPkNsb3Nl UHJvdG9jb2wgKA0KPiArICAgICAgICAgICAgIENvbnRyb2xsZXJIYW5kbGUsDQo+ICsgICAgICAg ICAgICAgJmdFZmlEZXZpY2VQYXRoUHJvdG9jb2xHdWlkLA0KPiArICAgICAgICAgICAgIFRoaXMt PkRyaXZlckJpbmRpbmdIYW5kbGUsDQo+ICsgICAgICAgICAgICAgQ29udHJvbGxlckhhbmRsZQ0K PiArICAgICAgICAgICAgICk7DQo+ICsgICAgICBnQlMtPkNsb3NlUHJvdG9jb2wgKA0KPiArICAg ICAgICAgICAgIENvbnRyb2xsZXJIYW5kbGUsDQo+ICsgICAgICAgICAgICAgJmdFZGtJSVVzYkV0 aFByb3RvY29sR3VpZCwNCj4gKyAgICAgICAgICAgICBUaGlzLT5Ecml2ZXJCaW5kaW5nSGFuZGxl LA0KPiArICAgICAgICAgICAgIENvbnRyb2xsZXJIYW5kbGUNCj4gKyAgICAgICAgICAgICApOw0K PiArDQo+ICsgICAgICByZXR1cm4gRUZJX09VVF9PRl9SRVNPVVJDRVM7DQo+ICsgICAgfSBlbHNl IHsNCj4gKyAgICAgIC8vIGNoZWNrIGZvciBwYXJhZ3JhcGggYWxpZ25tZW50IGhlcmUNCj4gKyAg ICAgIGlmICgoKFVJTlROKVRtcFB4ZVBvaW50ZXIgJiAweDBGKSAhPSAwKSB7DQo+ICsgICAgICAg IGdQeGUgPSAoUFhFX1NXX1VOREkgKikoVG1wUHhlUG9pbnRlciArIDgpOw0KPiArICAgICAgfSBl bHNlIHsNCj4gKyAgICAgICAgZ1B4ZSA9IChQWEVfU1dfVU5ESSAqKVRtcFB4ZVBvaW50ZXI7DQo+ ICsgICAgICB9DQo+ICsNCj4gKyAgICAgIGlmICghZ1B4ZSkgew0KPiArICAgICAgICBpZiAoTmlj RGV2aWNlICE9IE5VTEwpIHsNCj4gKyAgICAgICAgICBGcmVlUG9vbCAoTmljRGV2aWNlKTsNCj4g KyAgICAgICAgfQ0KPiArDQo+ICsgICAgICAgIGdCUy0+Q2xvc2VQcm90b2NvbCAoDQo+ICsgICAg ICAgICAgICAgICBDb250cm9sbGVySGFuZGxlLA0KPiArICAgICAgICAgICAgICAgJmdFZmlEZXZp Y2VQYXRoUHJvdG9jb2xHdWlkLA0KPiArICAgICAgICAgICAgICAgVGhpcy0+RHJpdmVyQmluZGlu Z0hhbmRsZSwNCj4gKyAgICAgICAgICAgICAgIENvbnRyb2xsZXJIYW5kbGUNCj4gKyAgICAgICAg ICAgICAgICk7DQo+ICsgICAgICAgIGdCUy0+Q2xvc2VQcm90b2NvbCAoDQo+ICsgICAgICAgICAg ICAgICBDb250cm9sbGVySGFuZGxlLA0KPiArICAgICAgICAgICAgICAgJmdFZGtJSVVzYkV0aFBy b3RvY29sR3VpZCwNCj4gKyAgICAgICAgICAgICAgIFRoaXMtPkRyaXZlckJpbmRpbmdIYW5kbGUs DQo+ICsgICAgICAgICAgICAgICBDb250cm9sbGVySGFuZGxlDQo+ICsgICAgICAgICAgICAgICAp Ow0KPiArICAgICAgICByZXR1cm4gRUZJX09VVF9PRl9SRVNPVVJDRVM7DQo+ICsgICAgICB9DQo+ ICsNCj4gKyAgICAgIFB4ZVN0cnVjdEluaXQgKGdQeGUpOw0KPiArICAgIH0NCj4gKyAgfQ0KPiAr DQo+ICsgIE5pY0RldmljZS0+TmlpUHJvdG9jb2wuSWQgICAgPSAoVUlOVDY0KShVSU5UTikoZ1B4 ZSk7DQo+ICsgIE5pY0RldmljZS0+TmlpUHJvdG9jb2wuSWZOdW0gPSBnUHhlLT5JRmNudCB8IGdQ eGUtPklGY250RXh0IDw8IDg7DQo+ICsNCj4gKyAgVXBkYXRlTmljTnVtICgmTmljRGV2aWNlLT5O aWNJbmZvLCBnUHhlKTsNCj4gKw0KPiArICBOaWNEZXZpY2UtPk5pY0luZm8uU2lnbmF0dXJlID0g TklDX0RBVEFfU0lHTkFUVVJFOw0KPiArDQo+ICsgIE5pY0RldmljZS0+TmljSW5mby5Vc2JFdGgg ICAgICAgICA9IFVzYkV0aDsNCj4gKyAgTmljRGV2aWNlLT5OaWNJbmZvLk1heFNlZ21lbnRTaXpl ID0gKFVJTlQxNilCdWxrRGF0YVNpemU7DQo+ICsgIE5pY0RldmljZS0+TmljSW5mby5DYWJsZURl dGVjdCAgICA9IDA7DQo+ICsgIE5pY0RldmljZS0+UmVjZWl2ZUJ1ZmZlciAgICAgICAgICA9IEFM SUdOX1BPSU5URVIgKChWT0lEICopTmljRGV2aWNlLCA0MDk2KTsNCj4gKw0KPiArICBDb3B5TWVt ICgoQ0hBUjggKikmKE5pY0RldmljZS0+TmljSW5mby5NYWNBZGRyKSwgKENIQVI4DQo+ICopJk1h Y0FkZHJlc3MsIHNpemVvZiAoTWFjQWRkcmVzcykpOw0KPiArDQo+ICsgIE5pY0RldmljZS0+Tmlj SW5mby5UeEJ1ZmZlckNvdW50ID0gMDsNCj4gKw0KPiArICBpZiAoTmljRGV2aWNlLT5OaWlQcm90 b2NvbC5JZk51bSA8IE1BWF9MQU5fSU5URVJGQUNFKSB7DQo+ICsgICAgZ0xhbkRldmljZUxpc3Rb TmljRGV2aWNlLT5OaWlQcm90b2NvbC5JZk51bV0gPSBOaWNEZXZpY2U7DQo+ICsgIH0gZWxzZSB7 DQo+ICsgICAgZ0JTLT5DbG9zZVByb3RvY29sICgNCj4gKyAgICAgICAgICAgQ29udHJvbGxlckhh bmRsZSwNCj4gKyAgICAgICAgICAgJmdFZmlEZXZpY2VQYXRoUHJvdG9jb2xHdWlkLA0KPiArICAg ICAgICAgICBUaGlzLT5Ecml2ZXJCaW5kaW5nSGFuZGxlLA0KPiArICAgICAgICAgICBDb250cm9s bGVySGFuZGxlDQo+ICsgICAgICAgICAgICk7DQo+ICsgICAgZ0JTLT5DbG9zZVByb3RvY29sICgN Cj4gKyAgICAgICAgICAgQ29udHJvbGxlckhhbmRsZSwNCj4gKyAgICAgICAgICAgJmdFZGtJSVVz YkV0aFByb3RvY29sR3VpZCwNCj4gKyAgICAgICAgICAgVGhpcy0+RHJpdmVyQmluZGluZ0hhbmRs ZSwNCj4gKyAgICAgICAgICAgQ29udHJvbGxlckhhbmRsZQ0KPiArICAgICAgICAgICApOw0KPiAr DQo+ICsgICAgaWYgKFRtcFB4ZVBvaW50ZXIgIT0gTlVMTCkgew0KPiArICAgICAgRnJlZVBvb2wg KFRtcFB4ZVBvaW50ZXIpOw0KPiArICAgIH0NCj4gKw0KPiArICAgIGlmIChOaWNEZXZpY2UgIT0g TlVMTCkgew0KPiArICAgICAgRnJlZVBvb2wgKE5pY0RldmljZSk7DQo+ICsgICAgfQ0KPiArDQo+ ICsgICAgcmV0dXJuIEVGSV9ERVZJQ0VfRVJST1I7DQo+ICsgIH0NCj4gKw0KPiArICBTdGF0dXMg PSBDcmVhdGVNYWNEZXZpY2VQYXRoICgNCj4gKyAgICAgICAgICAgICAmTmljRGV2aWNlLT5EZXZQ YXRoLA0KPiArICAgICAgICAgICAgIFVzYkV0aFBhdGgsDQo+ICsgICAgICAgICAgICAgJk5pY0Rl dmljZS0+TmljSW5mbw0KPiArICAgICAgICAgICAgICk7DQo+ICsNCj4gKyAgaWYgKEVGSV9FUlJP UiAoU3RhdHVzKSkgew0KPiArICAgIFVwZGF0ZU5pY051bSAoTlVMTCwgZ1B4ZSk7DQo+ICsgICAg aWYgKFRtcFB4ZVBvaW50ZXIgIT0gTlVMTCkgew0KPiArICAgICAgRnJlZVBvb2wgKFRtcFB4ZVBv aW50ZXIpOw0KPiArICAgIH0NCj4gKyAgfQ0KPiArDQo+ICsgIE5pY0RldmljZS0+U2lnbmF0dXJl ICAgICAgICAgICAgICAgICA9IFVORElfREVWX1NJR05BVFVSRTsNCj4gKyAgTmljRGV2aWNlLT5O aWlQcm90b2NvbC5SZXZpc2lvbiAgICAgID0NCj4gRUZJX05FVFdPUktfSU5URVJGQUNFX0lERU5U SUZJRVJfUFJPVE9DT0xfUkVWSVNJT047DQo+ICsgIE5pY0RldmljZS0+TmlpUHJvdG9jb2wuVHlw ZSAgICAgICAgICA9IEVmaU5ldHdvcmtJbnRlcmZhY2VVbmRpOw0KPiArICBOaWNEZXZpY2UtPk5p aVByb3RvY29sLk1ham9yVmVyICAgICAgPSBQWEVfUk9NSURfTUFKT1JWRVI7DQo+ICsgIE5pY0Rl dmljZS0+TmlpUHJvdG9jb2wuTWlub3JWZXIgICAgICA9IFBYRV9ST01JRF9NSU5PUlZFUjsNCj4g KyAgTmljRGV2aWNlLT5OaWlQcm90b2NvbC5JbWFnZVNpemUgICAgID0gMDsNCj4gKyAgTmljRGV2 aWNlLT5OaWlQcm90b2NvbC5JbWFnZUFkZHIgICAgID0gMDsNCj4gKyAgTmljRGV2aWNlLT5OaWlQ cm90b2NvbC5JcHY2U3VwcG9ydGVkID0gVFJVRTsNCj4gKw0KPiArICBOaWNEZXZpY2UtPk5paVBy b3RvY29sLlN0cmluZ0lkWzBdID0gJ1UnOw0KPiArICBOaWNEZXZpY2UtPk5paVByb3RvY29sLlN0 cmluZ0lkWzFdID0gJ04nOw0KPiArICBOaWNEZXZpY2UtPk5paVByb3RvY29sLlN0cmluZ0lkWzJd ID0gJ0QnOw0KPiArICBOaWNEZXZpY2UtPk5paVByb3RvY29sLlN0cmluZ0lkWzNdID0gJ0knOw0K PiArICBOaWNEZXZpY2UtPkRldmljZUhhbmRsZSAgICAgICAgICAgID0gTlVMTDsNCj4gKw0KPiAr ICBOaWNEZXZpY2UtPk5pY0luZm8uUmF0ZUxpbWl0aW5nRW5hYmxlICAgICAgPSBnUmF0ZUxpbWl0 aW5nRW5hYmxlOw0KPiArICBOaWNEZXZpY2UtPk5pY0luZm8uUmF0ZUxpbWl0aW5nQ3JlZGl0Q291 bnQgPSAwOw0KPiArICBOaWNEZXZpY2UtPk5pY0luZm8uUmF0ZUxpbWl0aW5nQ3JlZGl0ICAgICAg PSBnUmF0ZUxpbWl0aW5nQ3JlZGl0Ow0KPiArICBOaWNEZXZpY2UtPk5pY0luZm8uUmF0ZUxpbWl0 aW5nUG9sbFRpbWVyICAgPSBnUmF0ZUxpbWl0aW5nUG9sbFRpbWVyOw0KPiArICBOaWNEZXZpY2Ut Pk5pY0luZm8uUmF0ZUxpbWl0ZXIgICAgICAgICAgICAgPSBOVUxMOw0KPiArDQo+ICsgIFplcm9N ZW0gKCZOaWNEZXZpY2UtPk5pY0luZm8uUmVxdWVzdCwgc2l6ZW9mDQo+IChFRklfVVNCX0RFVklD RV9SRVFVRVNUKSk7DQo+ICsNCj4gKyAgU3RhdHVzID0gVXNiRXRoLT5Vc2JFdGhJbnRlcnJ1cHQg KFVzYkV0aCwgVFJVRSwNCj4gTkVUV09SS19DT01NT05fUE9MTElOR19JTlRFUlZBTCwgJk5pY0Rl dmljZS0+TmljSW5mby5SZXF1ZXN0KTsNCj4gKyAgQVNTRVJUX0VGSV9FUlJPUiAoU3RhdHVzKTsN Cj4gKw0KPiArICBTdGF0dXMgPSBnQlMtPkluc3RhbGxNdWx0aXBsZVByb3RvY29sSW50ZXJmYWNl cyAoDQo+ICsgICAgICAgICAgICAgICAgICAmTmljRGV2aWNlLT5EZXZpY2VIYW5kbGUsDQo+ICsg ICAgICAgICAgICAgICAgICAmZ0VmaU5ldHdvcmtJbnRlcmZhY2VJZGVudGlmaWVyUHJvdG9jb2xH dWlkXzMxLA0KPiArICAgICAgICAgICAgICAgICAgJk5pY0RldmljZS0+TmlpUHJvdG9jb2wsDQo+ ICsgICAgICAgICAgICAgICAgICAmZ0VmaURldmljZVBhdGhQcm90b2NvbEd1aWQsDQo+ICsgICAg ICAgICAgICAgICAgICBOaWNEZXZpY2UtPkRldlBhdGgsDQo+ICsgICAgICAgICAgICAgICAgICBO VUxMDQo+ICsgICAgICAgICAgICAgICAgICApOw0KPiArDQo+ICsgIGlmIChFRklfRVJST1IgKFN0 YXR1cykpIHsNCj4gKyAgICBpZiAoTmljRGV2aWNlLT5OaWlQcm90b2NvbC5JZk51bSA8IE1BWF9M QU5fSU5URVJGQUNFKSB7DQo+ICsgICAgICBnTGFuRGV2aWNlTGlzdFtOaWNEZXZpY2UtPk5paVBy b3RvY29sLklmTnVtXSA9IE5VTEw7DQo+ICsgICAgfQ0KPiArDQo+ICsgICAgZ0JTLT5DbG9zZVBy b3RvY29sICgNCj4gKyAgICAgICAgICAgQ29udHJvbGxlckhhbmRsZSwNCj4gKyAgICAgICAgICAg JmdFZmlEZXZpY2VQYXRoUHJvdG9jb2xHdWlkLA0KPiArICAgICAgICAgICBUaGlzLT5Ecml2ZXJC aW5kaW5nSGFuZGxlLA0KPiArICAgICAgICAgICBDb250cm9sbGVySGFuZGxlDQo+ICsgICAgICAg ICAgICk7DQo+ICsgICAgZ0JTLT5DbG9zZVByb3RvY29sICgNCj4gKyAgICAgICAgICAgQ29udHJv bGxlckhhbmRsZSwNCj4gKyAgICAgICAgICAgJmdFZGtJSVVzYkV0aFByb3RvY29sR3VpZCwNCj4g KyAgICAgICAgICAgVGhpcy0+RHJpdmVyQmluZGluZ0hhbmRsZSwNCj4gKyAgICAgICAgICAgQ29u dHJvbGxlckhhbmRsZQ0KPiArICAgICAgICAgICApOw0KPiArDQo+ICsgICAgaWYgKFRtcFB4ZVBv aW50ZXIgIT0gTlVMTCkgew0KPiArICAgICAgRnJlZVBvb2wgKFRtcFB4ZVBvaW50ZXIpOw0KPiAr ICAgIH0NCj4gKw0KPiArICAgIGlmIChOaWNEZXZpY2UtPkRldlBhdGggIT0gTlVMTCkgew0KPiAr ICAgICAgRnJlZVBvb2wgKE5pY0RldmljZS0+RGV2UGF0aCk7DQo+ICsgICAgfQ0KPiArDQo+ICsg ICAgaWYgKE5pY0RldmljZSAhPSBOVUxMKSB7DQo+ICsgICAgICBGcmVlUG9vbCAoTmljRGV2aWNl KTsNCj4gKyAgICB9DQo+ICsNCj4gKyAgICByZXR1cm4gRUZJX0RFVklDRV9FUlJPUjsNCj4gKyAg fQ0KPiArDQo+ICsgIFN0YXR1cyA9IGdCUy0+T3BlblByb3RvY29sICgNCj4gKyAgICAgICAgICAg ICAgICAgIENvbnRyb2xsZXJIYW5kbGUsDQo+ICsgICAgICAgICAgICAgICAgICAmZ0Vka0lJVXNi RXRoUHJvdG9jb2xHdWlkLA0KPiArICAgICAgICAgICAgICAgICAgKFZPSUQgKiopJlVzYkV0aCwN Cj4gKyAgICAgICAgICAgICAgICAgIFRoaXMtPkRyaXZlckJpbmRpbmdIYW5kbGUsDQo+ICsgICAg ICAgICAgICAgICAgICBOaWNEZXZpY2UtPkRldmljZUhhbmRsZSwNCj4gKyAgICAgICAgICAgICAg ICAgIEVGSV9PUEVOX1BST1RPQ09MX0JZX0NISUxEX0NPTlRST0xMRVINCj4gKyAgICAgICAgICAg ICAgICAgICk7DQo+ICsNCj4gKyAgcmV0dXJuIFN0YXR1czsNCj4gK30NCj4gKw0KPiArLyoqDQo+ ICsgIE5ldHdvcmsgQ29tbW9uIERyaXZlciBCaW5kaW5nIFN0b3AuDQo+ICsNCj4gKyAgQHBhcmFt W2luXSAgVGhpcyAgICAgICAgICAgICAgICAgIFByb3RvY29sIGluc3RhbmNlIHBvaW50ZXIuDQo+ ICsgIEBwYXJhbVtpbl0gIENvbnRyb2xsZXJIYW5kbGUgICAgICBIYW5kbGUgb2YgZGV2aWNlIHRv IHN0b3AgZHJpdmVyIG9uDQo+ICsgIEBwYXJhbVtpbl0gIE51bWJlck9mQ2hpbGRyZW4gICAgICBO dW1iZXIgb2YgSGFuZGxlcyBpbiBDaGlsZEhhbmRsZUJ1ZmZlci4NCj4gSWYgbnVtYmVyIG9mDQo+ ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGlsZHJlbiBpcyB6ZXJvIHN0 b3AgdGhlIGVudGlyZSBidXMgZHJpdmVyLg0KPiArICBAcGFyYW1baW5dICBDaGlsZEhhbmRsZUJ1 ZmZlciAgICAgTGlzdCBvZiBDaGlsZCBIYW5kbGVzIHRvIFN0b3AuDQo+ICsNCj4gKyAgQHJldHZh bCBFRklfU1VDQ0VTUyAgICAgICAgICAgICAgIFRoaXMgZHJpdmVyIGlzIHJlbW92ZWQgQ29udHJv bGxlckhhbmRsZQ0KPiArICBAcmV0dmFsIG90aGVyICAgICAgICAgICAgICAgICAgICAgVGhpcyBk cml2ZXIgd2FzIG5vdCByZW1vdmVkIGZyb20gdGhpcyBkZXZpY2UNCj4gKw0KPiArKiovDQo+ICtF RklfU1RBVFVTDQo+ICtFRklBUEkNCj4gK05ldHdvcmtDb21tb25Ecml2ZXJTdG9wICgNCj4gKyAg SU4gIEVGSV9EUklWRVJfQklORElOR19QUk9UT0NPTCAgKlRoaXMsDQo+ICsgIElOICBFRklfSEFO RExFICAgICAgICAgICAgICAgICAgIENvbnRyb2xsZXJIYW5kbGUsDQo+ICsgIElOICBVSU5UTiAg ICAgICAgICAgICAgICAgICAgICAgIE51bWJlck9mQ2hpbGRyZW4sDQo+ICsgIElOICBFRklfSEFO RExFICAgICAgICAgICAgICAgICAgICpDaGlsZEhhbmRsZUJ1ZmZlcg0KPiArICApDQo+ICt7DQo+ ICsgIEVGSV9TVEFUVVMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTdGF0dXM7DQo+ ICsgIEJPT0xFQU4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBbGxDaGlsZHJl blN0b3BwZWQ7DQo+ICsgIFVJTlROICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBJbmRleDsNCj4gKyAgRURLSUlfVVNCX0VUSEVSTkVUX1BST1RPQ09MICAgICAgICAgICAgICAg ICpVc2JFdGg7DQo+ICsgIE5JQ19ERVZJQ0UgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAqTmljRGV2aWNlOw0KPiArICBFRklfTkVUV09SS19JTlRFUkZBQ0VfSURFTlRJRklFUl9QUk9U T0NPTCAgKk5paVByb3RvY29sOw0KPiArDQo+ICsgIGlmIChOdW1iZXJPZkNoaWxkcmVuID09IDAp IHsNCj4gKyAgICBTdGF0dXMgPSBnQlMtPk9wZW5Qcm90b2NvbCAoDQo+ICsgICAgICAgICAgICAg ICAgICAgIENvbnRyb2xsZXJIYW5kbGUsDQo+ICsgICAgICAgICAgICAgICAgICAgICZnRWZpTmV0 d29ya0ludGVyZmFjZUlkZW50aWZpZXJQcm90b2NvbEd1aWRfMzEsDQo+ICsgICAgICAgICAgICAg ICAgICAgIChWT0lEICoqKSZOaWlQcm90b2NvbCwNCj4gKyAgICAgICAgICAgICAgICAgICAgVGhp cy0+RHJpdmVyQmluZGluZ0hhbmRsZSwNCj4gKyAgICAgICAgICAgICAgICAgICAgQ29udHJvbGxl ckhhbmRsZSwNCj4gKyAgICAgICAgICAgICAgICAgICAgRUZJX09QRU5fUFJPVE9DT0xfR0VUX1BS T1RPQ09MDQo+ICsgICAgICAgICAgICAgICAgICAgICk7DQo+ICsNCj4gKyAgICBpZiAoRUZJX0VS Uk9SIChTdGF0dXMpKSB7DQo+ICsgICAgICBnQlMtPkNsb3NlUHJvdG9jb2wgKA0KPiArICAgICAg ICAgICAgIENvbnRyb2xsZXJIYW5kbGUsDQo+ICsgICAgICAgICAgICAgJmdFZmlEZXZpY2VQYXRo UHJvdG9jb2xHdWlkLA0KPiArICAgICAgICAgICAgIFRoaXMtPkRyaXZlckJpbmRpbmdIYW5kbGUs DQo+ICsgICAgICAgICAgICAgQ29udHJvbGxlckhhbmRsZQ0KPiArICAgICAgICAgICAgICk7DQo+ ICsgICAgICBnQlMtPkNsb3NlUHJvdG9jb2wgKA0KPiArICAgICAgICAgICAgIENvbnRyb2xsZXJI YW5kbGUsDQo+ICsgICAgICAgICAgICAgJmdFZGtJSVVzYkV0aFByb3RvY29sR3VpZCwNCj4gKyAg ICAgICAgICAgICBUaGlzLT5Ecml2ZXJCaW5kaW5nSGFuZGxlLA0KPiArICAgICAgICAgICAgIENv bnRyb2xsZXJIYW5kbGUNCj4gKyAgICAgICAgICAgICApOw0KPiArICAgICAgcmV0dXJuIEVGSV9T VUNDRVNTOw0KPiArICAgIH0NCj4gKw0KPiArICAgIE5pY0RldmljZSA9IFVORElfREVWX0ZST01f VEhJUyAoTmlpUHJvdG9jb2wpOw0KPiArICAgIFN0YXR1cyAgICA9IGdCUy0+VW5pbnN0YWxsTXVs dGlwbGVQcm90b2NvbEludGVyZmFjZXMgKA0KPiArICAgICAgICAgICAgICAgICAgICAgICBDb250 cm9sbGVySGFuZGxlLA0KPiArICAgICAgICAgICAgICAgICAgICAgICAmZ0VmaU5ldHdvcmtJbnRl cmZhY2VJZGVudGlmaWVyUHJvdG9jb2xHdWlkXzMxLA0KPiArICAgICAgICAgICAgICAgICAgICAg ICAmTmljRGV2aWNlLT5OaWlQcm90b2NvbCwNCj4gKyAgICAgICAgICAgICAgICAgICAgICAgJmdF ZmlEZXZpY2VQYXRoUHJvdG9jb2xHdWlkLA0KPiArICAgICAgICAgICAgICAgICAgICAgICBOaWNE ZXZpY2UtPkRldlBhdGgsDQo+ICsgICAgICAgICAgICAgICAgICAgICAgIE5VTEwNCj4gKyAgICAg ICAgICAgICAgICAgICAgICAgKTsNCj4gKyAgICBpZiAoRUZJX0VSUk9SIChTdGF0dXMpKSB7DQo+ ICsgICAgICByZXR1cm4gU3RhdHVzOw0KPiArICAgIH0NCj4gKw0KPiArICAgIEZyZWVQb29sIChO aWNEZXZpY2UtPkRldlBhdGgpOw0KPiArICAgIEZyZWVQb29sIChOaWNEZXZpY2UpOw0KPiArDQo+ ICsgICAgZ0JTLT5DbG9zZVByb3RvY29sICgNCj4gKyAgICAgICAgICAgQ29udHJvbGxlckhhbmRs ZSwNCj4gKyAgICAgICAgICAgJmdFZmlEZXZpY2VQYXRoUHJvdG9jb2xHdWlkLA0KPiArICAgICAg ICAgICBUaGlzLT5Ecml2ZXJCaW5kaW5nSGFuZGxlLA0KPiArICAgICAgICAgICBDb250cm9sbGVy SGFuZGxlDQo+ICsgICAgICAgICAgICk7DQo+ICsgICAgZ0JTLT5DbG9zZVByb3RvY29sICgNCj4g KyAgICAgICAgICAgQ29udHJvbGxlckhhbmRsZSwNCj4gKyAgICAgICAgICAgJmdFZGtJSVVzYkV0 aFByb3RvY29sR3VpZCwNCj4gKyAgICAgICAgICAgVGhpcy0+RHJpdmVyQmluZGluZ0hhbmRsZSwN Cj4gKyAgICAgICAgICAgQ29udHJvbGxlckhhbmRsZQ0KPiArICAgICAgICAgICApOw0KPiArICAg IHJldHVybiBFRklfU1VDQ0VTUzsNCj4gKyAgfQ0KPiArDQo+ICsgIEFsbENoaWxkcmVuU3RvcHBl ZCA9IFRSVUU7DQo+ICsNCj4gKyAgZm9yIChJbmRleCA9IDA7IEluZGV4IDwgTnVtYmVyT2ZDaGls ZHJlbjsgSW5kZXgrKykgew0KPiArICAgIFN0YXR1cyA9IGdCUy0+T3BlblByb3RvY29sICgNCj4g KyAgICAgICAgICAgICAgICAgICAgQ2hpbGRIYW5kbGVCdWZmZXJbSW5kZXhdLA0KPiArICAgICAg ICAgICAgICAgICAgICAmZ0VmaU5ldHdvcmtJbnRlcmZhY2VJZGVudGlmaWVyUHJvdG9jb2xHdWlk XzMxLA0KPiArICAgICAgICAgICAgICAgICAgICAoVk9JRCAqKikmTmlpUHJvdG9jb2wsDQo+ICsg ICAgICAgICAgICAgICAgICAgIFRoaXMtPkRyaXZlckJpbmRpbmdIYW5kbGUsDQo+ICsgICAgICAg ICAgICAgICAgICAgIENvbnRyb2xsZXJIYW5kbGUsDQo+ICsgICAgICAgICAgICAgICAgICAgIEVG SV9PUEVOX1BST1RPQ09MX0dFVF9QUk9UT0NPTA0KPiArICAgICAgICAgICAgICAgICAgICApOw0K PiArICAgIGlmIChFRklfRVJST1IgKFN0YXR1cykpIHsNCj4gKyAgICAgIEFsbENoaWxkcmVuU3Rv cHBlZCA9IEZBTFNFOw0KPiArICAgICAgY29udGludWU7DQo+ICsgICAgfQ0KPiArDQo+ICsgICAg TmljRGV2aWNlID0gVU5ESV9ERVZfRlJPTV9USElTIChOaWlQcm90b2NvbCk7DQo+ICsNCj4gKyAg ICBnQlMtPkNsb3NlUHJvdG9jb2wgKA0KPiArICAgICAgICAgICBDb250cm9sbGVySGFuZGxlLA0K PiArICAgICAgICAgICAmZ0Vka0lJVXNiRXRoUHJvdG9jb2xHdWlkLA0KPiArICAgICAgICAgICBU aGlzLT5Ecml2ZXJCaW5kaW5nSGFuZGxlLA0KPiArICAgICAgICAgICBDaGlsZEhhbmRsZUJ1ZmZl cltJbmRleF0NCj4gKyAgICAgICAgICAgKTsNCj4gKw0KPiArICAgIFN0YXR1cyA9IGdCUy0+VW5p bnN0YWxsTXVsdGlwbGVQcm90b2NvbEludGVyZmFjZXMgKA0KPiArICAgICAgICAgICAgICAgICAg ICBDaGlsZEhhbmRsZUJ1ZmZlcltJbmRleF0sDQo+ICsgICAgICAgICAgICAgICAgICAgICZnRWZp TmV0d29ya0ludGVyZmFjZUlkZW50aWZpZXJQcm90b2NvbEd1aWRfMzEsDQo+ICsgICAgICAgICAg ICAgICAgICAgICZOaWNEZXZpY2UtPk5paVByb3RvY29sLA0KPiArICAgICAgICAgICAgICAgICAg ICAmZ0VmaURldmljZVBhdGhQcm90b2NvbEd1aWQsDQo+ICsgICAgICAgICAgICAgICAgICAgIE5p Y0RldmljZS0+RGV2UGF0aCwNCj4gKyAgICAgICAgICAgICAgICAgICAgTlVMTA0KPiArICAgICAg ICAgICAgICAgICAgICApOw0KPiArICAgIGlmIChFRklfRVJST1IgKFN0YXR1cykpIHsNCj4gKyAg ICAgIFN0YXR1cyA9IGdCUy0+T3BlblByb3RvY29sICgNCj4gKyAgICAgICAgICAgICAgICAgICAg ICBDb250cm9sbGVySGFuZGxlLA0KPiArICAgICAgICAgICAgICAgICAgICAgICZnRWRrSUlVc2JF dGhQcm90b2NvbEd1aWQsDQo+ICsgICAgICAgICAgICAgICAgICAgICAgKFZPSUQgKiopJlVzYkV0 aCwNCj4gKyAgICAgICAgICAgICAgICAgICAgICBUaGlzLT5Ecml2ZXJCaW5kaW5nSGFuZGxlLA0K PiArICAgICAgICAgICAgICAgICAgICAgIENoaWxkSGFuZGxlQnVmZmVyW0luZGV4XSwNCj4gKyAg ICAgICAgICAgICAgICAgICAgICBFRklfT1BFTl9QUk9UT0NPTF9CWV9DSElMRF9DT05UUk9MTEVS DQo+ICsgICAgICAgICAgICAgICAgICAgICAgKTsNCj4gKyAgICB9IGVsc2Ugew0KPiArICAgICAg RnJlZVBvb2wgKE5pY0RldmljZS0+RGV2UGF0aCk7DQo+ICsgICAgICBGcmVlUG9vbCAoTmljRGV2 aWNlKTsNCj4gKyAgICB9DQo+ICsgIH0NCj4gKw0KPiArICBpZiAoIUFsbENoaWxkcmVuU3RvcHBl ZCkgew0KPiArICAgIHJldHVybiBFRklfREVWSUNFX0VSUk9SOw0KPiArICB9DQo+ICsNCj4gKyAg cmV0dXJuIFN0YXR1czsNCj4gK30NCj4gKw0KPiArLyoqDQo+ICsgIEVudHJ5cG9pbnQgb2YgTmV0 d29yayBDb21tb24gRHJpdmVyLg0KPiArDQo+ICsgIFRoaXMgZnVuY3Rpb24gaXMgdGhlIGVudHJ5 cG9pbnQgb2YgTmV0d29yayBDb21tb24gRHJpdmVyLiBJdCBpbnN0YWxscyBEcml2ZXINCj4gQmlu ZGluZw0KPiArICBQcm90b2NvbHMgdG9nZXRoZXIgd2l0aCBDb21wb25lbnQgTmFtZSBQcm90b2Nv bHMuDQo+ICsNCj4gKyAgQHBhcmFtW2luXSAgSW1hZ2VIYW5kbGUgICAgICAgVGhlIGZpcm13YXJl IGFsbG9jYXRlZCBoYW5kbGUgZm9yIHRoZSBFRkkNCj4gaW1hZ2UuDQo+ICsgIEBwYXJhbVtpbl0g IFN5c3RlbVRhYmxlICAgICAgIEEgcG9pbnRlciB0byB0aGUgRUZJIFN5c3RlbSBUYWJsZS4NCj4g Kw0KPiArICBAcmV0dmFsIEVGSV9TVUNDRVNTICAgICAgICAgICBUaGUgZW50cnkgcG9pbnQgaXMg ZXhlY3V0ZWQgc3VjY2Vzc2Z1bGx5Lg0KPiArDQo+ICsqKi8NCj4gK0VGSV9TVEFUVVMNCj4gK0VG SUFQSQ0KPiArTmV0d29ya0NvbW1vbkVudHJ5ICgNCj4gKyAgSU4gRUZJX0hBTkRMRSAgICAgICAg SW1hZ2VIYW5kbGUsDQo+ICsgIElOIEVGSV9TWVNURU1fVEFCTEUgICpTeXN0ZW1UYWJsZQ0KPiAr ICApDQo+ICt7DQo+ICsgIEVGSV9TVEFUVVMgIFN0YXR1czsNCj4gKw0KPiArICBnTmV0d29ya0Nv bW1vbkRyaXZlckJpbmRpbmcuRHJpdmVyQmluZGluZ0hhbmRsZSA9IEltYWdlSGFuZGxlOw0KPiAr ICBnTmV0d29ya0NvbW1vbkRyaXZlckJpbmRpbmcuSW1hZ2VIYW5kbGUgICAgICAgICA9IEltYWdl SGFuZGxlOw0KPiArICBnUmF0ZUxpbWl0aW5nRW5hYmxlICAgICAgICAgICAgICAgICAgICAgICAg ICAgICA9IFBjZEdldEJvb2wNCj4gKFBjZEVuYWJsZVVzYk5ldHdvcmtSYXRlTGltaXRpbmcpOw0K PiArICBnUmF0ZUxpbWl0aW5nQ3JlZGl0ICAgICAgICAgICAgICAgICAgICAgICAgICAgICA9IFBj ZEdldDMyDQo+IChQY2RVc2JOZXR3b3JrUmF0ZUxpbWl0aW5nQ3JlZGl0KTsNCj4gKyAgZ1JhdGVM aW1pdGluZ1BvbGxUaW1lciAgICAgICAgICAgICAgICAgICAgICAgICAgPSBQY2RHZXQzMg0KPiAo UGNkVXNiTmV0d29ya1JhdGVMaW1pdGluZ0ZhY3Rvcik7DQo+ICsNCj4gKyAgU3RhdHVzID0gZ0JT LT5JbnN0YWxsTXVsdGlwbGVQcm90b2NvbEludGVyZmFjZXMgKA0KPiArICAgICAgICAgICAgICAg ICAgJmdOZXR3b3JrQ29tbW9uRHJpdmVyQmluZGluZy5Ecml2ZXJCaW5kaW5nSGFuZGxlLA0KPiAr ICAgICAgICAgICAgICAgICAgJmdFZmlEcml2ZXJCaW5kaW5nUHJvdG9jb2xHdWlkLA0KPiArICAg ICAgICAgICAgICAgICAgJmdOZXR3b3JrQ29tbW9uRHJpdmVyQmluZGluZywNCj4gKyAgICAgICAg ICAgICAgICAgICZnRWZpQ29tcG9uZW50TmFtZTJQcm90b2NvbEd1aWQsDQo+ICsgICAgICAgICAg ICAgICAgICAmZ05ldHdvcmtDb21tb25Db21wb25lbnROYW1lMiwNCj4gKyAgICAgICAgICAgICAg ICAgIE5VTEwNCj4gKyAgICAgICAgICAgICAgICAgICk7DQo+ICsgIHJldHVybiBTdGF0dXM7DQo+ ICt9DQo+IGRpZmYgLS1naXQNCj4gYS9NZGVNb2R1bGVQa2cvQnVzL1VzYi9Vc2JOZXR3b3JrL05l dHdvcmtDb21tb24vRHJpdmVyQmluZGluZy5oDQo+IGIvTWRlTW9kdWxlUGtnL0J1cy9Vc2IvVXNi TmV0d29yay9OZXR3b3JrQ29tbW9uL0RyaXZlckJpbmRpbmcuaA0KPiBuZXcgZmlsZSBtb2RlIDEw MDY0NA0KPiBpbmRleCAwMDAwMDAwMDAwLi5hODA1ODM0YTc4DQo+IC0tLSAvZGV2L251bGwNCj4g KysrIGIvTWRlTW9kdWxlUGtnL0J1cy9Vc2IvVXNiTmV0d29yay9OZXR3b3JrQ29tbW9uL0RyaXZl ckJpbmRpbmcuaA0KPiBAQCAtMCwwICsxLDI2NiBAQA0KPiArLyoqIEBmaWxlDQo+ICsgIEhlYWRl ciBmaWxlIGZvciBmb3IgVVNCIG5ldHdvcmsgY29tbW9uIGRyaXZlcg0KPiArDQo+ICsgIENvcHly aWdodCAoYykgMjAyMywgQW1lcmljYW4gTWVnYXRyZW5kcyBJbnRlcm5hdGlvbmFsIExMQy4gQWxs IHJpZ2h0cw0KPiByZXNlcnZlZC48QlI+DQo+ICsgIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBC U0QtMi1DbGF1c2UtUGF0ZW50DQo+ICsqKi8NCj4gKw0KPiArI2lmbmRlZiBfRFJJVkVSX0JJTkRJ TkdfSF8NCj4gKyNkZWZpbmUgX0RSSVZFUl9CSU5ESU5HX0hfDQo+ICsNCj4gKyNpbmNsdWRlIDxM aWJyYXJ5L1VlZmlEcml2ZXJFbnRyeVBvaW50Lmg+DQo+ICsjaW5jbHVkZSA8TGlicmFyeS9VZWZp Qm9vdFNlcnZpY2VzVGFibGVMaWIuaD4NCj4gKyNpbmNsdWRlIDxMaWJyYXJ5L1VlZmlMaWIuaD4N Cj4gKyNpbmNsdWRlIDxMaWJyYXJ5L0RldmljZVBhdGhMaWIuaD4NCj4gKyNpbmNsdWRlIDxMaWJy YXJ5L0RlYnVnTGliLmg+DQo+ICsjaW5jbHVkZSA8TGlicmFyeS9NZW1vcnlBbGxvY2F0aW9uTGli Lmg+DQo+ICsjaW5jbHVkZSA8TGlicmFyeS9QY2RMaWIuaD4NCj4gKyNpbmNsdWRlIDxMaWJyYXJ5 L0Jhc2VNZW1vcnlMaWIuaD4NCj4gKyNpbmNsdWRlIDxMaWJyYXJ5L1VlZmlVc2JMaWIuaD4NCj4g KyNpbmNsdWRlIDxQcm90b2NvbC9Vc2JJby5oPg0KPiArI2luY2x1ZGUgPFByb3RvY29sL05ldHdv cmtJbnRlcmZhY2VJZGVudGlmaWVyLmg+DQo+ICsjaW5jbHVkZSA8UHJvdG9jb2wvVXNiRXRoZXJu ZXRQcm90b2NvbC5oPg0KPiArDQo+ICsjZGVmaW5lIE5FVFdPUktfQ09NTU9OX0RSSVZFUl9WRVJT SU9OICAgIDENCj4gKyNkZWZpbmUgTkVUV09SS19DT01NT05fUE9MTElOR19JTlRFUlZBTCAgMHgx MA0KPiArI2RlZmluZSBSWF9CVUZGRVJfQ09VTlQgICAgICAgICAgICAgICAgICAzMg0KPiArI2Rl ZmluZSBUWF9CVUZGRVJfQ09VTlQgICAgICAgICAgICAgICAgICAzMg0KPiArI2RlZmluZSBNRU1P UllfUkVRVUlSRSAgICAgICAgICAgICAgICAgICAwDQo+ICsNCj4gKyNkZWZpbmUgVU5ESV9ERVZf U0lHTkFUVVJFICBTSUdOQVRVUkVfMzIoJ3UnLCduJywnZCcsJ2knKQ0KPiArI2RlZmluZSBVTkRJ X0RFVl9GUk9NX1RISVMoYSkgIENSKGEsIE5JQ19ERVZJQ0UsIE5paVByb3RvY29sLA0KPiBVTkRJ X0RFVl9TSUdOQVRVUkUpDQo+ICsjZGVmaW5lIFVORElfREVWX0ZST01fTklDKGEpICAgQ1IoYSwg TklDX0RFVklDRSwgTmljSW5mbywNCj4gVU5ESV9ERVZfU0lHTkFUVVJFKQ0KPiArDQo+ICsjcHJh Z21hIHBhY2soMSkNCj4gK3R5cGVkZWYgc3RydWN0IHsNCj4gKyAgVUlOVDggICAgIERlc3RBZGRy W1BYRV9IV0FERFJfTEVOX0VUSEVSXTsNCj4gKyAgVUlOVDggICAgIFNyY0FkZHJbUFhFX0hXQURE Ul9MRU5fRVRIRVJdOw0KPiArICBVSU5UMTYgICAgUHJvdG9jb2w7DQo+ICt9IEV0aGVybmV0SGVh ZGVyOw0KPiArI3ByYWdtYSBwYWNrKCkNCj4gKw0KPiArdHlwZWRlZiBzdHJ1Y3Qgew0KPiArICBV SU5UTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTaWduYXR1cmU7DQo+ ICsgIEVGSV9ORVRXT1JLX0lOVEVSRkFDRV9JREVOVElGSUVSX1BST1RPQ09MICAgIE5paVByb3Rv Y29sOw0KPiArICBFRklfSEFORExFICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBE ZXZpY2VIYW5kbGU7DQo+ICsgIEVGSV9ERVZJQ0VfUEFUSF9QUk9UT0NPTCAgICAgICAgICAgICAg ICAgICAgICpCYXNlRGV2UGF0aDsNCj4gKyAgRUZJX0RFVklDRV9QQVRIX1BST1RPQ09MICAgICAg ICAgICAgICAgICAgICAgKkRldlBhdGg7DQo+ICsgIE5JQ19EQVRBICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIE5pY0luZm87DQo+ICsgIFZPSUQgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICpSZWNlaXZlQnVmZmVyOw0KPiArfSBOSUNfREVWSUNFOw0K PiArDQo+ICt0eXBlZGVmIFZPSUQgKCpBUElfRlVOQykoDQo+ICsgIFBYRV9DREIgKiwNCj4gKyAg TklDX0RBVEEgKg0KPiArICApOw0KPiArDQo+ICtleHRlcm4gUFhFX1NXX1VOREkgICAgICAgICAg ICAgICAgICAgKmdQeGU7DQo+ICtleHRlcm4gTklDX0RFVklDRSAgICAgICAgICAgICAgICAgICAg KmdMYW5EZXZpY2VMaXN0W01BWF9MQU5fSU5URVJGQUNFXTsNCj4gK2V4dGVybiBFRklfQ09NUE9O RU5UX05BTUUyX1BST1RPQ09MDQo+IGdOZXR3b3JrQ29tbW9uQ29tcG9uZW50TmFtZTI7DQo+ICsN Cj4gK0VGSV9TVEFUVVMNCj4gK0VGSUFQSQ0KPiArTmV0d29ya0NvbW1vblN1cHBvcnRlZCAoDQo+ ICsgIElOIEVGSV9EUklWRVJfQklORElOR19QUk9UT0NPTCAgKlRoaXMsDQo+ICsgIElOIEVGSV9I QU5ETEUgICAgICAgICAgICAgICAgICAgQ29udHJvbGxlckhhbmRsZSwNCj4gKyAgSU4gRUZJX0RF VklDRV9QQVRIX1BST1RPQ09MICAgICAqUmVtYWluaW5nRGV2aWNlUGF0aA0KPiArICApOw0KPiAr DQo+ICtFRklfU1RBVFVTDQo+ICtFRklBUEkNCj4gK05ldHdvcmtDb21tb25Ecml2ZXJTdGFydCAo DQo+ICsgIElOIEVGSV9EUklWRVJfQklORElOR19QUk9UT0NPTCAgKlRoaXMsDQo+ICsgIElOIEVG SV9IQU5ETEUgICAgICAgICAgICAgICAgICAgQ29udHJvbGxlckhhbmRsZSwNCj4gKyAgSU4gRUZJ X0RFVklDRV9QQVRIX1BST1RPQ09MICAgICAqUmVtYWluaW5nRGV2aWNlUGF0aA0KPiArICApOw0K PiArDQo+ICtFRklfU1RBVFVTDQo+ICtFRklBUEkNCj4gK05ldHdvcmtDb21tb25Ecml2ZXJTdG9w ICgNCj4gKyAgSU4gIEVGSV9EUklWRVJfQklORElOR19QUk9UT0NPTCAgKlRoaXMsDQo+ICsgIElO ICBFRklfSEFORExFICAgICAgICAgICAgICAgICAgIENvbnRyb2xsZXJIYW5kbGUsDQo+ICsgIElO ICBVSU5UTiAgICAgICAgICAgICAgICAgICAgICAgIE51bWJlck9mQ2hpbGRyZW4sDQo+ICsgIElO ICBFRklfSEFORExFICAgICAgICAgICAgICAgICAgICpDaGlsZEhhbmRsZUJ1ZmZlcg0KPiArICAp Ow0KPiArDQo+ICtWT0lEDQo+ICtQeGVTdHJ1Y3RJbml0ICgNCj4gKyAgT1VUIFBYRV9TV19VTkRJ ICAqUHhlU3cNCj4gKyAgKTsNCj4gKw0KPiArVk9JRA0KPiArVXBkYXRlTmljTnVtICgNCj4gKyAg SU4gICAgICBOSUNfREFUQSAgICAgKk5pYywNCj4gKyAgSU4gT1VUICBQWEVfU1dfVU5ESSAgKlB4 ZVN3DQo+ICsgICk7DQo+ICsNCj4gK0VGSV9TVEFUVVMNCj4gK0VGSUFQSQ0KPiArVW5kaUFwaUVu dHJ5ICgNCj4gKyAgSU4gIFVJTlQ2NCAgQ2RiDQo+ICsgICk7DQo+ICsNCj4gK1VJTlRODQo+ICtN YXBJdCAoDQo+ICsgIElOIE5JQ19EQVRBICAqTmljLA0KPiArICBJTiBVSU5UNjQgICAgTWVtQWRk ciwNCj4gKyAgSU4gVUlOVDMyICAgIFNpemUsDQo+ICsgIElOIFVJTlQzMiAgICBEaXJlY3Rpb24s DQo+ICsgIE9VVCBVSU5UNjQgICBNYXBwZWRBZGRyDQo+ICsgICk7DQo+ICsNCj4gK1ZPSUQNCj4g K1VuTWFwSXQgKA0KPiArICBJTiBOSUNfREFUQSAgKk5pYywNCj4gKyAgSU4gVUlOVDY0ICAgIE1l bUFkZHIsDQo+ICsgIElOIFVJTlQzMiAgICBTaXplLA0KPiArICBJTiBVSU5UMzIgICAgRGlyZWN0 aW9uLA0KPiArICBJTiBVSU5UNjQgICAgTWFwcGVkQWRkcg0KPiArICApOw0KPiArDQo+ICtWT0lE DQo+ICtVbmRpR2V0U3RhdGUgKA0KPiArICBJTiAgUFhFX0NEQiAgICpDZGIsDQo+ICsgIElOICBO SUNfREFUQSAgKk5pYw0KPiArICApOw0KPiArDQo+ICtWT0lEDQo+ICtVbmRpU3RhcnQgKA0KPiAr ICBJTiAgUFhFX0NEQiAgICpDZGIsDQo+ICsgIElOICBOSUNfREFUQSAgKk5pYw0KPiArICApOw0K PiArDQo+ICtWT0lEDQo+ICtVbmRpU3RvcCAoDQo+ICsgIElOICBQWEVfQ0RCICAgKkNkYiwNCj4g KyAgSU4gIE5JQ19EQVRBICAqTmljDQo+ICsgICk7DQo+ICsNCj4gK1ZPSUQNCj4gK1VuZGlHZXRJ bml0SW5mbyAoDQo+ICsgIElOICBQWEVfQ0RCICAgKkNkYiwNCj4gKyAgSU4gIE5JQ19EQVRBICAq TmljDQo+ICsgICk7DQo+ICsNCj4gK1ZPSUQNCj4gK1VuZGlHZXRDb25maWdJbmZvICgNCj4gKyAg SU4gIFBYRV9DREIgICAqQ2RiLA0KPiArICBJTiAgTklDX0RBVEEgICpOaWMNCj4gKyAgKTsNCj4g Kw0KPiArVk9JRA0KPiArVW5kaUluaXRpYWxpemUgKA0KPiArICBJTiAgICAgIFBYRV9DREIgICAq Q2RiLA0KPiArICBJTiBPVVQgIE5JQ19EQVRBICAqTmljDQo+ICsgICk7DQo+ICsNCj4gK1ZPSUQN Cj4gK1VuZGlSZXNldCAoDQo+ICsgIElOICBQWEVfQ0RCICAgKkNkYiwNCj4gKyAgSU4gIE5JQ19E QVRBICAqTmljDQo+ICsgICk7DQo+ICsNCj4gK1ZPSUQNCj4gK1VuZGlTaHV0ZG93biAoDQo+ICsg IElOICAgICAgUFhFX0NEQiAgICpDZGIsDQo+ICsgIElOIE9VVCAgTklDX0RBVEEgICpOaWMNCj4g KyAgKTsNCj4gKw0KPiArVk9JRA0KPiArVW5kaUludGVycnVwdEVuYWJsZSAoDQo+ICsgIElOICBQ WEVfQ0RCICAgKkNkYiwNCj4gKyAgSU4gIE5JQ19EQVRBICAqTmljDQo+ICsgICk7DQo+ICsNCj4g K1ZPSUQNCj4gK1VuZGlSZWNlaXZlRmlsdGVyICgNCj4gKyAgSU4gIFBYRV9DREIgICAqQ2RiLA0K PiArICBJTiAgTklDX0RBVEEgICpOaWMNCj4gKyAgKTsNCj4gKw0KPiArVk9JRA0KPiArVW5kaVN0 YXRpb25BZGRyZXNzICgNCj4gKyAgSU4gIFBYRV9DREIgICAqQ2RiLA0KPiArICBJTiAgTklDX0RB VEEgICpOaWMNCj4gKyAgKTsNCj4gKw0KPiArVk9JRA0KPiArVW5kaVN0YXRpc3RpY3MgKA0KPiAr ICBJTiAgUFhFX0NEQiAgICpDZGIsDQo+ICsgIElOICBOSUNfREFUQSAgKk5pYw0KPiArICApOw0K PiArDQo+ICtWT0lEDQo+ICtVbmRpTWNhc3RJcDJNYWMgKA0KPiArICBJTiBPVVQgIFBYRV9DREIg ICAqQ2RiLA0KPiArICBJTiAgICAgIE5JQ19EQVRBICAqTmljDQo+ICsgICk7DQo+ICsNCj4gK1ZP SUQNCj4gK1VuZGlOdkRhdGEgKA0KPiArICBJTiAgUFhFX0NEQiAgICpDZGIsDQo+ICsgIElOICBO SUNfREFUQSAgKk5pYw0KPiArICApOw0KPiArDQo+ICtWT0lEDQo+ICtVbmRpR2V0U3RhdHVzICgN Cj4gKyAgSU4gIFBYRV9DREIgICAqQ2RiLA0KPiArICBJTiAgTklDX0RBVEEgICpOaWMNCj4gKyAg KTsNCj4gKw0KPiArVk9JRA0KPiArVW5kaUZpbGxIZWFkZXIgKA0KPiArICBJTiAgUFhFX0NEQiAg ICpDZGIsDQo+ICsgIElOICBOSUNfREFUQSAgKk5pYw0KPiArICApOw0KPiArDQo+ICtWT0lEDQo+ ICtVbmRpVHJhbnNtaXQgKA0KPiArICBJTiAgUFhFX0NEQiAgICpDZGIsDQo+ICsgIElOICBOSUNf REFUQSAgKk5pYw0KPiArICApOw0KPiArDQo+ICtWT0lEDQo+ICtVbmRpUmVjZWl2ZSAoDQo+ICsg IElOICBQWEVfQ0RCICAgKkNkYiwNCj4gKyAgSU4gIE5JQ19EQVRBICAqTmljDQo+ICsgICk7DQo+ ICsNCj4gK1VJTlQxNg0KPiArSW5pdGlhbGl6ZSAoDQo+ICsgIElOICAgICAgUFhFX0NEQiAgICpD ZGIsDQo+ICsgIElOIE9VVCAgTklDX0RBVEEgICpOaWMNCj4gKyAgKTsNCj4gKw0KPiArVUlOVDE2 DQo+ICtUcmFuc21pdCAoDQo+ICsgIElOICAgICAgUFhFX0NEQiAgICpDZGIsDQo+ICsgIElOIE9V VCAgTklDX0RBVEEgICpOaWMsDQo+ICsgIElOICAgICAgVUlOVDY0ICAgIENwYkFkZHIsDQo+ICsg IElOICAgICAgVUlOVDE2ICAgIE9wRmxhZ3MNCj4gKyAgKTsNCj4gKw0KPiArVUlOVDE2DQo+ICtS ZWNlaXZlICgNCj4gKyAgSU4gUFhFX0NEQiAgICAgICAqQ2RiLA0KPiArICBJTiBPVVQgTklDX0RB VEEgICpOaWMsDQo+ICsgIElOIFVJTlQ2NCAgICAgICAgQ3BiQWRkciwNCj4gKyAgSU4gT1VUIFVJ TlQ2NCAgICBEYkFkZHINCj4gKyAgKTsNCj4gKw0KPiArVUlOVDE2DQo+ICtTZXRGaWx0ZXIgKA0K PiArICBJTiAgTklDX0RBVEEgICpOaWMsDQo+ICsgIElOICBVSU5UMTYgICAgU2V0RmlsdGVyLA0K PiArICBJTiAgVUlOVDY0ICAgIENwYkFkZHIsDQo+ICsgIElOICBVSU5UMzIgICAgQ3BiU2l6ZQ0K PiArICApOw0KPiArDQo+ICtVSU5UMTYNCj4gK1N0YXRpc3RpY3MgKA0KPiArICBJTiBOSUNfREFU QSAgKk5pYywNCj4gKyAgSU4gVUlOVDY0ICAgIERiQWRkciwNCj4gKyAgSU4gVUlOVDE2ICAgIERi U2l6ZQ0KPiArICApOw0KPiArDQo+ICsjZW5kaWYNCj4gZGlmZiAtLWdpdA0KPiBhL01kZU1vZHVs ZVBrZy9CdXMvVXNiL1VzYk5ldHdvcmsvTmV0d29ya0NvbW1vbi9OZXR3b3JrQ29tbW9uLmluDQo+ IGYNCj4gYi9NZGVNb2R1bGVQa2cvQnVzL1VzYi9Vc2JOZXR3b3JrL05ldHdvcmtDb21tb24vTmV0 d29ya0NvbW1vbi5pbg0KPiBmDQo+IG5ldyBmaWxlIG1vZGUgMTAwNjQ0DQo+IGluZGV4IDAwMDAw MDAwMDAuLmY5Y2EzMWZlODANCj4gLS0tIC9kZXYvbnVsbA0KPiArKysNCj4gYi9NZGVNb2R1bGVQ a2cvQnVzL1VzYi9Vc2JOZXR3b3JrL05ldHdvcmtDb21tb24vTmV0d29ya0NvbW1vbi5pbg0KPiBm DQo+IEBAIC0wLDAgKzEsNDggQEANCj4gKyMjIEBmaWxlDQo+ICsjICAgVGhpcyBpcyBVc2IgTmV0 d29yayBDb21tb24gZHJpdmVyIGZvciBEWEUgcGhhc2UuDQo+ICsjDQo+ICsjIENvcHlyaWdodCAo YykgMjAyMywgQW1lcmljYW4gTWVnYXRyZW5kcyBJbnRlcm5hdGlvbmFsIExMQy4gQWxsIHJpZ2h0 cw0KPiByZXNlcnZlZC48QlI+DQo+ICsjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBCU0QtMi1D bGF1c2UtUGF0ZW50DQo+ICsjIw0KPiArDQo+ICtbRGVmaW5lc10NCj4gKyAgSU5GX1ZFUlNJT04g ICAgICAgICAgICAgICAgICAgID0gMHgwMDAxMDAwNQ0KPiArICBCQVNFX05BTUUgICAgICAgICAg ICAgICAgICAgICAgPSBOZXR3b3JrQ29tbW9uDQo+ICsgIEZJTEVfR1VJRCAgICAgICAgICAgICAg ICAgICAgICA9IGNhNmViNGY0LWYxZDYtNDM3NS05N2Q2LTE4ODU2ODcxZTFiZg0KPiArICBNT0RV TEVfVFlQRSAgICAgICAgICAgICAgICAgICAgPSBEWEVfRFJJVkVSDQo+ICsgIFZFUlNJT05fU1RS SU5HICAgICAgICAgICAgICAgICA9IDEuMA0KPiArICBFTlRSWV9QT0lOVCAgICAgICAgICAgICAg ICAgICAgPSBOZXR3b3JrQ29tbW9uRW50cnkNCj4gKw0KPiArW1NvdXJjZXNdDQo+ICsgIERyaXZl ckJpbmRpbmcuYw0KPiArICBEcml2ZXJCaW5kaW5nLmgNCj4gKyAgQ29tcG9uZW50TmFtZS5jDQo+ ICsgIFB4ZUZ1bmN0aW9uLmMNCj4gKw0KPiArW1BhY2thZ2VzXQ0KPiArICBNZGVQa2cvTWRlUGtn LmRlYw0KPiArICBNZGVNb2R1bGVQa2cvTWRlTW9kdWxlUGtnLmRlYw0KPiArDQo+ICtbTGlicmFy eUNsYXNzZXNdDQo+ICsgIFVlZmlEcml2ZXJFbnRyeVBvaW50DQo+ICsgIFVlZmlCb290U2Vydmlj ZXNUYWJsZUxpYg0KPiArICBVZWZpTGliDQo+ICsgIERlYnVnTGliDQo+ICsgIFVlZmlVc2JMaWIN Cj4gKyAgTWVtb3J5QWxsb2NhdGlvbkxpYg0KPiArICBCYXNlTWVtb3J5TGliDQo+ICsNCj4gK1tQ cm90b2NvbHNdDQo+ICsgIGdFZmlOZXR3b3JrSW50ZXJmYWNlSWRlbnRpZmllclByb3RvY29sR3Vp ZF8zMQ0KPiArICBnRWZpVXNiSW9Qcm90b2NvbEd1aWQNCj4gKyAgZ0VmaURldmljZVBhdGhQcm90 b2NvbEd1aWQNCj4gKyAgZ0VmaURyaXZlckJpbmRpbmdQcm90b2NvbEd1aWQNCj4gKyAgZ0Vka0lJ VXNiRXRoUHJvdG9jb2xHdWlkDQo+ICsNCj4gK1tQY2RdDQo+ICsgIGdFZmlNZGVNb2R1bGVQa2dU b2tlblNwYWNlR3VpZC5QY2RFbmFibGVVc2JOZXR3b3JrUmF0ZUxpbWl0aW5nDQo+ICsgIGdFZmlN ZGVNb2R1bGVQa2dUb2tlblNwYWNlR3VpZC5QY2RVc2JOZXR3b3JrUmF0ZUxpbWl0aW5nQ3JlZGl0 DQo+ICsgIGdFZmlNZGVNb2R1bGVQa2dUb2tlblNwYWNlR3VpZC5QY2RVc2JOZXR3b3JrUmF0ZUxp bWl0aW5nRmFjdG9yDQo+ICsNCj4gK1tEZXBleF0NCj4gKyAgVFJVRQ0KPiBkaWZmIC0tZ2l0DQo+ IGEvTWRlTW9kdWxlUGtnL0J1cy9Vc2IvVXNiTmV0d29yay9OZXR3b3JrQ29tbW9uL1B4ZUZ1bmN0 aW9uLmMNCj4gYi9NZGVNb2R1bGVQa2cvQnVzL1VzYi9Vc2JOZXR3b3JrL05ldHdvcmtDb21tb24v UHhlRnVuY3Rpb24uYw0KPiBuZXcgZmlsZSBtb2RlIDEwMDY0NA0KPiBpbmRleCAwMDAwMDAwMDAw Li42ODdjYWJjYTRjDQo+IC0tLSAvZGV2L251bGwNCj4gKysrIGIvTWRlTW9kdWxlUGtnL0J1cy9V c2IvVXNiTmV0d29yay9OZXR3b3JrQ29tbW9uL1B4ZUZ1bmN0aW9uLmMNCj4gQEAgLTAsMCArMSwx ODAzIEBADQo+ICsvKiogQGZpbGUNCj4gKyAgVGhpcyBmaWxlIGNvbnRhaW5zIGNvZGUgZm9yIFVO REkgY29tbWFuZCBiYXNlZCBvbiBVRUZJIHNwZWNpZmljYXRpb24uDQo+ICsNCj4gKyAgQ29weXJp Z2h0IChjKSAyMDIzLCBBbWVyaWNhbiBNZWdhdHJlbmRzIEludGVybmF0aW9uYWwgTExDLiBBbGwg cmlnaHRzDQo+IHJlc2VydmVkLjxCUj4NCj4gKyAgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEJT RC0yLUNsYXVzZS1QYXRlbnQNCj4gKyoqLw0KPiArDQo+ICsjaW5jbHVkZSAiRHJpdmVyQmluZGlu Zy5oIg0KPiArDQo+ICsvLyBBUEkgdGFibGUsIGRlZmluZWQgaW4gVUVGSSBzcGVjaWZpY2F0aW9u DQo+ICtBUElfRlVOQyAgZ1VuZGlBcGlUYWJsZVtdID0gew0KPiArICBVbmRpR2V0U3RhdGUsDQo+ ICsgIFVuZGlTdGFydCwNCj4gKyAgVW5kaVN0b3AsDQo+ICsgIFVuZGlHZXRJbml0SW5mbywNCj4g KyAgVW5kaUdldENvbmZpZ0luZm8sDQo+ICsgIFVuZGlJbml0aWFsaXplLA0KPiArICBVbmRpUmVz ZXQsDQo+ICsgIFVuZGlTaHV0ZG93biwNCj4gKyAgVW5kaUludGVycnVwdEVuYWJsZSwNCj4gKyAg VW5kaVJlY2VpdmVGaWx0ZXIsDQo+ICsgIFVuZGlTdGF0aW9uQWRkcmVzcywNCj4gKyAgVW5kaVN0 YXRpc3RpY3MsDQo+ICsgIFVuZGlNY2FzdElwMk1hYywNCj4gKyAgVW5kaU52RGF0YSwNCj4gKyAg VW5kaUdldFN0YXR1cywNCj4gKyAgVW5kaUZpbGxIZWFkZXIsDQo+ICsgIFVuZGlUcmFuc21pdCwN Cj4gKyAgVW5kaVJlY2VpdmUNCj4gK307DQo+ICsNCj4gKy8qKg0KPiArICAgQ2FsbGJhY2sgZnVu Y3Rpb24gZm9yIGVuYWJsZSBSYXRlIExpbWl0ZXINCj4gKw0KPiArICAgQHBhcmFtW2luXSBFdmVu dCAgICAgICAgICAgRXZlbnQgd2hvc2Ugbm90aWZpY2F0aW9uIGZ1bmN0aW9uIGlzIGJlaW5nIGlu dm9rZWQNCj4gKyAgIEBwYXJhbVtpbl0gQ29udGV4dCAgICAgICAgIFBvaW50ZXIgdG8gdGhlIG5v dGlmaWNhdGlvbiBmdW5jdGlvbidzIGNvbnRleHQNCj4gKw0KPiArKiovDQo+ICtWT0lEDQo+ICtF RklBUEkNCj4gK1VuZGlSYXRlTGltaXRlckNhbGxiYWNrICgNCj4gKyAgSU4gIEVGSV9FVkVOVCAg RXZlbnQsDQo+ICsgIElOICBWT0lEICAgICAgICpDb250ZXh0DQo+ICsgICkNCj4gK3sNCj4gKyAg TklDX0RBVEEgICpOaWMgPSBDb250ZXh0Ow0KPiArDQo+ICsgIGlmIChOaWMtPlJhdGVMaW1pdGlu Z0NyZWRpdENvdW50IDwgTmljLT5SYXRlTGltaXRpbmdDcmVkaXQpIHsNCj4gKyAgICBOaWMtPlJh dGVMaW1pdGluZ0NyZWRpdENvdW50Kys7DQo+ICsgIH0NCj4gK30NCj4gKw0KPiArLyoqDQo+ICsg IFRoaXMgY29tbWFuZCBpcyB1c2VkIHRvIGRldGVybWluZSB0aGUgb3BlcmF0aW9uYWwgc3RhdGUg b2YgdGhlIFVOREkuDQo+ICsNCj4gKyAgQHBhcmFtW2luXSAgQ2RiICBBIHBvaW50ZXIgdG8gdGhl IGNvbW1hbmQgZGVzY3JpcHRvciBibG9jay4NCj4gKyAgQHBhcmFtW2luXSAgTmljICBBIHBvaW50 ZXIgdG8gdGhlIE5ldHdvcmsgaW50ZXJmYWNlIGNvbnRyb2xsZXIgZGF0YS4NCj4gKw0KPiArKiov DQo+ICtWT0lEDQo+ICtVbmRpR2V0U3RhdGUgKA0KPiArICBJTiAgUFhFX0NEQiAgICpDZGIsDQo+ ICsgIElOICBOSUNfREFUQSAgKk5pYw0KPiArICApDQo+ICt7DQo+ICsgIEVGSV9TVEFUVVMgIFN0 YXR1czsNCj4gKw0KPiArICBpZiAoKENkYi0+T3BDb2RlICE9IFBYRV9PUENPREVfR0VUX1NUQVRF KSB8fA0KPiArICAgICAgKENkYi0+U3RhdENvZGUgIT0gUFhFX1NUQVRDT0RFX0lOSVRJQUxJWkUp IHx8DQo+ICsgICAgICAoQ2RiLT5TdGF0RmxhZ3MgIT0gUFhFX1NUQVRGTEFHU19JTklUSUFMSVpF KSB8fA0KPiArICAgICAgKENkYi0+SUZudW0gPj0gKGdQeGUtPklGY250IHwgZ1B4ZS0+SUZjbnRF eHQgPDwgOCkpIHx8DQo+ICsgICAgICAoQ2RiLT5DUEJzaXplICE9IFBYRV9DUEJTSVpFX05PVF9V U0VEKSB8fA0KPiArICAgICAgKENkYi0+Q1BCYWRkciAhPSBQWEVfQ1BCQUREUl9OT1RfVVNFRCkg fHwNCj4gKyAgICAgIChDZGItPkRCc2l6ZSAhPSBQWEVfREJTSVpFX05PVF9VU0VEKSB8fA0KPiAr ICAgICAgKENkYi0+REJhZGRyICE9IFBYRV9EQkFERFJfTk9UX1VTRUQpIHx8DQo+ICsgICAgICAo Q2RiLT5PcEZsYWdzICE9IFBYRV9PUEZMQUdTX05PVF9VU0VEKSkNCj4gKyAgew0KPiArICAgIENk Yi0+U3RhdEZsYWdzID0gUFhFX1NUQVRGTEFHU19DT01NQU5EX0ZBSUxFRDsNCj4gKyAgICBDZGIt PlN0YXRDb2RlICA9IFBYRV9TVEFUQ09ERV9JTlZBTElEX0NEQjsNCj4gKyAgICByZXR1cm47DQo+ ICsgIH0gZWxzZSB7DQo+ICsgICAgQ2RiLT5TdGF0RmxhZ3MgPSBQWEVfU1RBVEZMQUdTX0NPTU1B TkRfQ09NUExFVEU7DQo+ICsgICAgQ2RiLT5TdGF0Q29kZSAgPSBQWEVfU1RBVENPREVfU1VDQ0VT UzsNCj4gKyAgfQ0KPiArDQo+ICsgIENkYi0+U3RhdEZsYWdzID0gQ2RiLT5TdGF0RmxhZ3MgfCBO aWMtPlN0YXRlOw0KPiArDQo+ICsgIGlmIChOaWMtPlVzYkV0aC0+VXNiRXRoVW5kaS5Vc2JFdGhV bmRpR2V0U3RhdGUgIT0gTlVMTCkgew0KPiArICAgIFN0YXR1cyA9IE5pYy0+VXNiRXRoLT5Vc2JF dGhVbmRpLlVzYkV0aFVuZGlHZXRTdGF0ZSAoQ2RiLCBOaWMpOw0KPiArICAgIGlmIChFRklfRVJS T1IgKFN0YXR1cykpIHsNCj4gKyAgICAgIENkYi0+U3RhdEZsYWdzID0gUFhFX1NUQVRGTEFHU19D T01NQU5EX0ZBSUxFRDsNCj4gKyAgICB9DQo+ICsgIH0NCj4gK30NCj4gKw0KPiArLyoqDQo+ICsg IFRoaXMgY29tbWFuZCBpcyB1c2VkIHRvIGNoYW5nZSB0aGUgVU5ESSBvcGVyYXRpb25hbCBzdGF0 ZSBmcm9tIHN0b3BwZWQgdG8NCj4gc3RhcnRlZC4NCj4gKw0KPiArICBAcGFyYW1baW5dICBDZGIg IEEgcG9pbnRlciB0byB0aGUgY29tbWFuZCBkZXNjcmlwdG9yIGJsb2NrLg0KPiArICBAcGFyYW1b aW5dICBOaWMgIEEgcG9pbnRlciB0byB0aGUgTmV0d29yayBpbnRlcmZhY2UgY29udHJvbGxlciBk YXRhLg0KPiArDQo+ICsqKi8NCj4gK1ZPSUQNCj4gK1VuZGlTdGFydCAoDQo+ICsgIElOICBQWEVf Q0RCICAgKkNkYiwNCj4gKyAgSU4gIE5JQ19EQVRBICAqTmljDQo+ICsgICkNCj4gK3sNCj4gKyAg UFhFX0NQQl9TVEFSVF8zMSAgKkNwYjsNCj4gKyAgRUZJX1NUQVRVUyAgICAgICAgU3RhdHVzOw0K PiArICBCT09MRUFOICAgICAgICAgICBFdmVudEVycm9yOw0KPiArDQo+ICsgIGlmICgoQ2RiLT5P cENvZGUgIT0gUFhFX09QQ09ERV9TVEFSVCkgfHwNCj4gKyAgICAgIChDZGItPlN0YXRDb2RlICE9 IFBYRV9TVEFUQ09ERV9JTklUSUFMSVpFKSB8fA0KPiArICAgICAgKENkYi0+U3RhdEZsYWdzICE9 IFBYRV9TVEFURkxBR1NfSU5JVElBTElaRSkgfHwNCj4gKyAgICAgIChDZGItPklGbnVtID49IChn UHhlLT5JRmNudCB8IGdQeGUtPklGY250RXh0IDw8IDgpKSB8fA0KPiArICAgICAgKENkYi0+Q1BC c2l6ZSAhPSBzaXplb2YgKFBYRV9DUEJfU1RBUlRfMzEpKSB8fA0KPiArICAgICAgKENkYi0+REJz aXplICE9IFBYRV9EQlNJWkVfTk9UX1VTRUQpIHx8DQo+ICsgICAgICAoQ2RiLT5EQmFkZHIgIT0g UFhFX0RCQUREUl9OT1RfVVNFRCkgfHwNCj4gKyAgICAgIChDZGItPk9wRmxhZ3MgIT0gUFhFX09Q RkxBR1NfTk9UX1VTRUQpKQ0KPiArICB7DQo+ICsgICAgQ2RiLT5TdGF0RmxhZ3MgPSBQWEVfU1RB VEZMQUdTX0NPTU1BTkRfRkFJTEVEOw0KPiArICAgIENkYi0+U3RhdENvZGUgID0gUFhFX1NUQVRD T0RFX0lOVkFMSURfQ0RCOw0KPiArICAgIHJldHVybjsNCj4gKyAgfQ0KPiArDQo+ICsgIGlmIChO aWMtPlN0YXRlICE9IFBYRV9TVEFURkxBR1NfR0VUX1NUQVRFX1NUT1BQRUQpIHsNCj4gKyAgICBD ZGItPlN0YXRGbGFncyA9IFBYRV9TVEFURkxBR1NfQ09NTUFORF9GQUlMRUQ7DQo+ICsgICAgQ2Ri LT5TdGF0Q29kZSAgPSBQWEVfU1RBVENPREVfQUxSRUFEWV9TVEFSVEVEOw0KPiArICAgIHJldHVy bjsNCj4gKyAgfQ0KPiArDQo+ICsgIENwYiA9IChQWEVfQ1BCX1NUQVJUXzMxICopKFVJTlROKUNk Yi0+Q1BCYWRkcjsNCj4gKw0KPiArICBOaWMtPlB4ZVN0YXJ0LkRlbGF5ICAgICA9IENwYi0+RGVs YXk7DQo+ICsgIE5pYy0+UHhlU3RhcnQuVmlydDJQaHlzID0gQ3BiLT5WaXJ0MlBoeXM7DQo+ICsg IE5pYy0+UHhlU3RhcnQuQmxvY2sgICAgID0gQ3BiLT5CbG9jazsNCj4gKyAgTmljLT5QeGVTdGFy dC5NYXBfTWVtICAgPSAwOw0KPiArICBOaWMtPlB4ZVN0YXJ0LlVuTWFwX01lbSA9IDA7DQo+ICsg IE5pYy0+UHhlU3RhcnQuU3luY19NZW0gID0gQ3BiLT5TeW5jX01lbTsNCj4gKyAgTmljLT5QeGVT dGFydC5VbmlxdWVfSUQgPSBDcGItPlVuaXF1ZV9JRDsNCj4gKyAgRXZlbnRFcnJvciAgICAgICAg ICAgICAgPSBGQUxTRTsNCj4gKyAgU3RhdHVzICAgICAgICAgICAgICAgICAgPSBFRklfU1VDQ0VT UzsNCj4gKyAgaWYgKE5pYy0+UmF0ZUxpbWl0aW5nRW5hYmxlID09IFRSVUUpIHsNCj4gKyAgICBT dGF0dXMgPSBnQlMtPkNyZWF0ZUV2ZW50ICgNCj4gKyAgICAgICAgICAgICAgICAgICAgRVZUX1RJ TUVSIHwgRVZUX05PVElGWV9TSUdOQUwsDQo+ICsgICAgICAgICAgICAgICAgICAgIFRQTF9OT1RJ RlksDQo+ICsgICAgICAgICAgICAgICAgICAgIFVuZGlSYXRlTGltaXRlckNhbGxiYWNrLA0KPiAr ICAgICAgICAgICAgICAgICAgICBOaWMsDQo+ICsgICAgICAgICAgICAgICAgICAgICZOaWMtPlJh dGVMaW1pdGVyDQo+ICsgICAgICAgICAgICAgICAgICAgICk7DQo+ICsgICAgaWYgKCFFRklfRVJS T1IgKFN0YXR1cykpIHsNCj4gKyAgICAgIFN0YXR1cyA9IGdCUy0+U2V0VGltZXIgKA0KPiArICAg ICAgICAgICAgICAgICAgICAgIE5pYy0+UmF0ZUxpbWl0ZXIsDQo+ICsgICAgICAgICAgICAgICAg ICAgICAgVGltZXJQZXJpb2RpYywNCj4gKyAgICAgICAgICAgICAgICAgICAgICBOaWMtPlJhdGVM aW1pdGluZ1BvbGxUaW1lciAqIDEwMDAwDQo+ICsgICAgICAgICAgICAgICAgICAgICAgKTsNCj4g KyAgICAgIGlmIChFRklfRVJST1IgKFN0YXR1cykpIHsNCj4gKyAgICAgICAgRXZlbnRFcnJvciA9 IFRSVUU7DQo+ICsgICAgICB9DQo+ICsgICAgfQ0KPiArICB9DQo+ICsNCj4gKyAgaWYgKChOaWMt PlVzYkV0aC0+VXNiRXRoVW5kaS5Vc2JFdGhVbmRpU3RhcnQgIT0gTlVMTCkgJiYgKEV2ZW50RXJy b3IgPT0NCj4gRkFMU0UpKSB7DQo+ICsgICAgU3RhdHVzID0gTmljLT5Vc2JFdGgtPlVzYkV0aFVu ZGkuVXNiRXRoVW5kaVN0YXJ0IChDZGIsIE5pYyk7DQo+ICsgIH0NCj4gKw0KPiArICBpZiAoIUVG SV9FUlJPUiAoU3RhdHVzKSkgew0KPiArICAgIC8vIEluaXRpYWwgdGhlIHN0YXRlIGZvciBVTkRJ IHN0YXJ0Lg0KPiArICAgIE5pYy0+U3RhdGUgICAgID0gUFhFX1NUQVRGTEFHU19HRVRfU1RBVEVf U1RBUlRFRDsNCj4gKyAgICBDZGItPlN0YXRGbGFncyA9IFBYRV9TVEFURkxBR1NfQ09NTUFORF9D T01QTEVURTsNCj4gKyAgICBDZGItPlN0YXRDb2RlICA9IFBYRV9TVEFUQ09ERV9TVUNDRVNTOw0K PiArICB9IGVsc2Ugew0KPiArICAgIGlmIChOaWMtPlJhdGVMaW1pdGluZ0VuYWJsZSA9PSBUUlVF KSB7DQo+ICsgICAgICBpZiAoIUV2ZW50RXJyb3IpIHsNCj4gKyAgICAgICAgZ0JTLT5TZXRUaW1l ciAoJk5pYy0+UmF0ZUxpbWl0ZXIsIFRpbWVyQ2FuY2VsLCAwKTsNCj4gKyAgICAgIH0NCj4gKw0K PiArICAgICAgaWYgKE5pYy0+UmF0ZUxpbWl0ZXIpIHsNCj4gKyAgICAgICAgZ0JTLT5DbG9zZUV2 ZW50ICgmTmljLT5SYXRlTGltaXRlcik7DQo+ICsgICAgICAgIE5pYy0+UmF0ZUxpbWl0ZXIgPSAw Ow0KPiArICAgICAgfQ0KPiArICAgIH0NCj4gKw0KPiArICAgIC8vIEluaXRpYWwgdGhlIHN0YXRl IHdoZW4gVU5ESSBzdGFydCBpcyBmYWlsDQo+ICsgICAgQ2RiLT5TdGF0RmxhZ3MgPSBQWEVfU1RB VEZMQUdTX0NPTU1BTkRfRkFJTEVEOw0KPiArICAgIENkYi0+U3RhdENvZGUgID0gUFhFX1NUQVRD T0RFX0RFVklDRV9GQUlMVVJFOw0KPiArICB9DQo+ICt9DQo+ICsNCj4gKy8qKg0KPiArICBUaGlz IGNvbW1hbmQgaXMgdXNlZCB0byBjaGFuZ2UgdGhlIFVOREkgb3BlcmF0aW9uYWwgc3RhdGUgZnJv bSBzdGFydGVkIHRvDQo+IHN0b3BwZWQuDQo+ICsNCj4gKyAgQHBhcmFtW2luXSAgQ2RiICBBIHBv aW50ZXIgdG8gdGhlIGNvbW1hbmQgZGVzY3JpcHRvciBibG9jay4NCj4gKyAgQHBhcmFtW2luXSAg TmljICBBIHBvaW50ZXIgdG8gdGhlIE5ldHdvcmsgaW50ZXJmYWNlIGNvbnRyb2xsZXIgZGF0YS4N Cj4gKw0KPiArKiovDQo+ICtWT0lEDQo+ICtVbmRpU3RvcCAoDQo+ICsgIElOICBQWEVfQ0RCICAg KkNkYiwNCj4gKyAgSU4gIE5JQ19EQVRBICAqTmljDQo+ICsgICkNCj4gK3sNCj4gKyAgRUZJX1NU QVRVUyAgU3RhdHVzOw0KPiArDQo+ICsgIGlmICgoQ2RiLT5PcENvZGUgIT0gUFhFX09QQ09ERV9T VE9QKSB8fA0KPiArICAgICAgKENkYi0+U3RhdENvZGUgIT0gUFhFX1NUQVRDT0RFX0lOSVRJQUxJ WkUpIHx8DQo+ICsgICAgICAoQ2RiLT5TdGF0RmxhZ3MgIT0gUFhFX1NUQVRGTEFHU19JTklUSUFM SVpFKSB8fA0KPiArICAgICAgKENkYi0+SUZudW0gPj0gKGdQeGUtPklGY250IHwgZ1B4ZS0+SUZj bnRFeHQgPDwgOCkpIHx8DQo+ICsgICAgICAoQ2RiLT5DUEJzaXplICE9IFBYRV9DUEJTSVpFX05P VF9VU0VEKSB8fA0KPiArICAgICAgKENkYi0+Q1BCYWRkciAhPSBQWEVfQ1BCQUREUl9OT1RfVVNF RCkgfHwNCj4gKyAgICAgIChDZGItPkRCc2l6ZSAhPSBQWEVfREJTSVpFX05PVF9VU0VEKSB8fA0K PiArICAgICAgKENkYi0+REJhZGRyICE9IFBYRV9EQkFERFJfTk9UX1VTRUQpIHx8DQo+ICsgICAg ICAoQ2RiLT5PcEZsYWdzICE9IFBYRV9PUEZMQUdTX05PVF9VU0VEKSkNCj4gKyAgew0KPiArICAg IENkYi0+U3RhdEZsYWdzID0gUFhFX1NUQVRGTEFHU19DT01NQU5EX0ZBSUxFRDsNCj4gKyAgICBD ZGItPlN0YXRDb2RlICA9IFBYRV9TVEFUQ09ERV9JTlZBTElEX0NEQjsNCj4gKyAgICByZXR1cm47 DQo+ICsgIH0gZWxzZSB7DQo+ICsgICAgQ2RiLT5TdGF0RmxhZ3MgPSBQWEVfU1RBVEZMQUdTX0NP TU1BTkRfQ09NUExFVEU7DQo+ICsgICAgQ2RiLT5TdGF0Q29kZSAgPSBQWEVfU1RBVENPREVfU1VD Q0VTUzsNCj4gKyAgfQ0KPiArDQo+ICsgIGlmIChOaWMtPlN0YXRlID09IFBYRV9TVEFURkxBR1Nf R0VUX1NUQVRFX1NUT1BQRUQpIHsNCj4gKyAgICBDZGItPlN0YXRGbGFncyA9IFBYRV9TVEFURkxB R1NfQ09NTUFORF9GQUlMRUQ7DQo+ICsgICAgQ2RiLT5TdGF0Q29kZSAgPSBQWEVfU1RBVENPREVf Tk9UX1NUQVJURUQ7DQo+ICsgICAgcmV0dXJuOw0KPiArICB9DQo+ICsNCj4gKyAgaWYgKE5pYy0+ U3RhdGUgPT0gUFhFX1NUQVRGTEFHU19HRVRfU1RBVEVfSU5JVElBTElaRUQpIHsNCj4gKyAgICBD ZGItPlN0YXRGbGFncyA9IFBYRV9TVEFURkxBR1NfQ09NTUFORF9GQUlMRUQ7DQo+ICsgICAgQ2Ri LT5TdGF0Q29kZSAgPSBQWEVfU1RBVENPREVfTk9UX1NIVVRET1dOOw0KPiArICAgIHJldHVybjsN Cj4gKyAgfQ0KPiArDQo+ICsgIE5pYy0+UHhlU3RhcnQuRGVsYXkgICAgID0gMDsNCj4gKyAgTmlj LT5QeGVTdGFydC5WaXJ0MlBoeXMgPSAwOw0KPiArICBOaWMtPlB4ZVN0YXJ0LkJsb2NrICAgICA9 IDA7DQo+ICsgIE5pYy0+UHhlU3RhcnQuTWFwX01lbSAgID0gMDsNCj4gKyAgTmljLT5QeGVTdGFy dC5Vbk1hcF9NZW0gPSAwOw0KPiArICBOaWMtPlB4ZVN0YXJ0LlN5bmNfTWVtICA9IDA7DQo+ICsg IE5pYy0+U3RhdGUgICAgICAgICAgICAgID0gUFhFX1NUQVRGTEFHU19HRVRfU1RBVEVfU1RPUFBF RDsNCj4gKw0KPiArICBpZiAoTmljLT5SYXRlTGltaXRpbmdFbmFibGUgPT0gVFJVRSkgew0KPiAr ICAgIGdCUy0+U2V0VGltZXIgKCZOaWMtPlJhdGVMaW1pdGVyLCBUaW1lckNhbmNlbCwgMCk7DQo+ ICsgICAgZ0JTLT5DbG9zZUV2ZW50ICgmTmljLT5SYXRlTGltaXRlcik7DQo+ICsgIH0NCj4gKw0K PiArICBpZiAoTmljLT5Vc2JFdGgtPlVzYkV0aFVuZGkuVXNiRXRoVW5kaVN0b3AgIT0gTlVMTCkg ew0KPiArICAgIFN0YXR1cyA9IE5pYy0+VXNiRXRoLT5Vc2JFdGhVbmRpLlVzYkV0aFVuZGlTdG9w IChDZGIsIE5pYyk7DQo+ICsgICAgaWYgKEVGSV9FUlJPUiAoU3RhdHVzKSkgew0KPiArICAgICAg Q2RiLT5TdGF0RmxhZ3MgPSBQWEVfU1RBVEZMQUdTX0NPTU1BTkRfRkFJTEVEOw0KPiArICAgIH0N Cj4gKyAgfQ0KPiArfQ0KPiArDQo+ICsvKioNCj4gKyAgVGhpcyBjb21tYW5kIGlzIHVzZWQgdG8g cmV0cmlldmUgaW5pdGlhbGl6YXRpb24gaW5mb3JtYXRpb24gdGhhdCBpcw0KPiArICBuZWVkZWQg YnkgZHJpdmVycyBhbmQgYXBwbGljYXRpb25zIHRvIGluaXRpYWxpemVkIFVOREkuDQo+ICsNCj4g KyAgQHBhcmFtW2luXSAgQ2RiICBBIHBvaW50ZXIgdG8gdGhlIGNvbW1hbmQgZGVzY3JpcHRvciBi bG9jay4NCj4gKyAgQHBhcmFtW2luXSAgTmljICBBIHBvaW50ZXIgdG8gdGhlIE5ldHdvcmsgaW50 ZXJmYWNlIGNvbnRyb2xsZXIgZGF0YS4NCj4gKw0KPiArKiovDQo+ICtWT0lEDQo+ICtVbmRpR2V0 SW5pdEluZm8gKA0KPiArICBJTiAgUFhFX0NEQiAgICpDZGIsDQo+ICsgIElOICBOSUNfREFUQSAg Kk5pYw0KPiArICApDQo+ICt7DQo+ICsgIFBYRV9EQl9HRVRfSU5JVF9JTkZPICAqRGI7DQo+ICsg IEVGSV9TVEFUVVMgICAgICAgICAgICBTdGF0dXM7DQo+ICsNCj4gKyAgaWYgKChDZGItPk9wQ29k ZSAhPSBQWEVfT1BDT0RFX0dFVF9JTklUX0lORk8pIHx8DQo+ICsgICAgICAoQ2RiLT5TdGF0Q29k ZSAhPSBQWEVfU1RBVENPREVfSU5JVElBTElaRSkgfHwNCj4gKyAgICAgIChDZGItPlN0YXRGbGFn cyAhPSBQWEVfU1RBVEZMQUdTX0lOSVRJQUxJWkUpIHx8DQo+ICsgICAgICAoQ2RiLT5JRm51bSA+ PSAoZ1B4ZS0+SUZjbnQgfCBnUHhlLT5JRmNudEV4dCA8PCA4KSkgfHwNCj4gKyAgICAgIChDZGIt PkNQQnNpemUgIT0gUFhFX0NQQlNJWkVfTk9UX1VTRUQpIHx8DQo+ICsgICAgICAoQ2RiLT5DUEJh ZGRyICE9IFBYRV9DUEJBRERSX05PVF9VU0VEKSB8fA0KPiArICAgICAgKENkYi0+REJzaXplICE9 IHNpemVvZiAoUFhFX0RCX0dFVF9JTklUX0lORk8pKSB8fA0KPiArICAgICAgKENkYi0+T3BGbGFn cyAhPSBQWEVfT1BGTEFHU19OT1RfVVNFRCkpDQo+ICsgIHsNCj4gKyAgICBDZGItPlN0YXRGbGFn cyA9IFBYRV9TVEFURkxBR1NfQ09NTUFORF9GQUlMRUQ7DQo+ICsgICAgQ2RiLT5TdGF0Q29kZSAg PSBQWEVfU1RBVENPREVfSU5WQUxJRF9DREI7DQo+ICsgICAgcmV0dXJuOw0KPiArICB9IGVsc2Ug ew0KPiArICAgIENkYi0+U3RhdEZsYWdzID0gUFhFX1NUQVRGTEFHU19DT01NQU5EX0NPTVBMRVRF Ow0KPiArICAgIENkYi0+U3RhdENvZGUgID0gUFhFX1NUQVRDT0RFX1NVQ0NFU1M7DQo+ICsgIH0N Cj4gKw0KPiArICBpZiAoTmljLT5TdGF0ZSA9PSBQWEVfU1RBVEZMQUdTX0dFVF9TVEFURV9TVE9Q UEVEKSB7DQo+ICsgICAgQ2RiLT5TdGF0RmxhZ3MgPSBQWEVfU1RBVEZMQUdTX0NPTU1BTkRfRkFJ TEVEOw0KPiArICAgIENkYi0+U3RhdENvZGUgID0gUFhFX1NUQVRDT0RFX05PVF9TVEFSVEVEOw0K PiArICAgIHJldHVybjsNCj4gKyAgfQ0KPiArDQo+ICsgIERiID0gKFBYRV9EQl9HRVRfSU5JVF9J TkZPICopKFVJTlROKUNkYi0+REJhZGRyOw0KPiArDQo+ICsgIERiLT5NZW1vcnlSZXF1aXJlZCAg ICAgICAgID0gTUVNT1JZX1JFUVVJUkU7DQo+ICsgIERiLT5GcmFtZURhdGFMZW4gICAgICAgICAg ID0gUFhFX01BWF9UWFJYX1VOSVRfRVRIRVI7DQo+ICsgIERiLT5MaW5rU3BlZWRzWzBdICAgICAg ICAgID0gMTA7DQo+ICsgIERiLT5MaW5rU3BlZWRzWzFdICAgICAgICAgID0gMTAwOw0KPiArICBE Yi0+TGlua1NwZWVkc1syXSAgICAgICAgICA9IDEwMDA7DQo+ICsgIERiLT5MaW5rU3BlZWRzWzNd ICAgICAgICAgID0gMDsNCj4gKyAgRGItPk1lZGlhSGVhZGVyTGVuICAgICAgICAgPSBQWEVfTUFD X0hFQURFUl9MRU5fRVRIRVI7DQo+ICsgIERiLT5IV2FkZHJMZW4gICAgICAgICAgICAgID0gUFhF X0hXQUREUl9MRU5fRVRIRVI7DQo+ICsgIERiLT5NQ2FzdEZpbHRlckNudCAgICAgICAgID0gTUFY X01DQVNUX0FERFJFU1NfQ05UOw0KPiArICBEYi0+VHhCdWZDbnQgICAgICAgICAgICAgICA9IE5p Yy0+UHhlSW5pdC5UeEJ1ZkNudDsNCj4gKyAgRGItPlR4QnVmU2l6ZSAgICAgICAgICAgICAgPSBO aWMtPlB4ZUluaXQuVHhCdWZTaXplOw0KPiArICBEYi0+UnhCdWZDbnQgICAgICAgICAgICAgICA9 IE5pYy0+UHhlSW5pdC5SeEJ1ZkNudDsNCj4gKyAgRGItPlJ4QnVmU2l6ZSAgICAgICAgICAgICAg PSBOaWMtPlB4ZUluaXQuUnhCdWZTaXplOw0KPiArICBEYi0+SUZ0eXBlICAgICAgICAgICAgICAg ICA9IFBYRV9JRlRZUEVfRVRIRVJORVQ7DQo+ICsgIERiLT5TdXBwb3J0ZWREdXBsZXhNb2RlcyAg ID0gUFhFX0RVUExFWF9ERUZBVUxUOw0KPiArICBEYi0+U3VwcG9ydGVkTG9vcEJhY2tNb2RlcyA9 IExPT1BCQUNLX05PUk1BTDsNCj4gKw0KPiArICBDZGItPlN0YXRGbGFncyB8PSAoUFhFX1NUQVRG TEFHU19DQUJMRV9ERVRFQ1RfU1VQUE9SVEVEIHwNCj4gKyAgICAgICAgICAgICAgICAgICAgIFBY RV9TVEFURkxBR1NfR0VUX1NUQVRVU19OT19NRURJQV9TVVBQT1JURUQpOw0KPiArDQo+ICsgIGlm IChOaWMtPlVzYkV0aC0+VXNiRXRoVW5kaS5Vc2JFdGhVbmRpR2V0SW5pdEluZm8gIT0gTlVMTCkg ew0KPiArICAgIFN0YXR1cyA9IE5pYy0+VXNiRXRoLT5Vc2JFdGhVbmRpLlVzYkV0aFVuZGlHZXRJ bml0SW5mbyAoQ2RiLCBOaWMpOw0KPiArICAgIGlmIChFRklfRVJST1IgKFN0YXR1cykpIHsNCj4g KyAgICAgIENkYi0+U3RhdEZsYWdzID0gUFhFX1NUQVRGTEFHU19DT01NQU5EX0ZBSUxFRDsNCj4g KyAgICB9DQo+ICsgIH0NCj4gK30NCj4gKw0KPiArLyoqDQo+ICsgIFRoaXMgY29tbWFuZCBpcyB1 c2VkIHRvIHJldHJpZXZlIGNvbmZpZ3VyYXRpb24gaW5mb3JtYXRpb24gYWJvdXQNCj4gKyAgdGhl IE5JQyBiZWluZyBjb250cm9sbGVkIGJ5IHRoZSBVTkRJLg0KPiArDQo+ICsgIEBwYXJhbVtpbl0g IENkYiAgQSBwb2ludGVyIHRvIHRoZSBjb21tYW5kIGRlc2NyaXB0b3IgYmxvY2suDQo+ICsgIEBw YXJhbVtpbl0gIE5pYyAgQSBwb2ludGVyIHRvIHRoZSBOZXR3b3JrIGludGVyZmFjZSBjb250cm9s bGVyIGRhdGEuDQo+ICsNCj4gKyoqLw0KPiArVk9JRA0KPiArVW5kaUdldENvbmZpZ0luZm8gKA0K PiArICBJTiAgUFhFX0NEQiAgICpDZGIsDQo+ICsgIElOICBOSUNfREFUQSAgKk5pYw0KPiArICAp DQo+ICt7DQo+ICsgIFBYRV9EQl9HRVRfQ09ORklHX0lORk8gICpEYjsNCj4gKyAgRUZJX1NUQVRV UyAgICAgICAgICAgICAgU3RhdHVzOw0KPiArDQo+ICsgIGlmICgoQ2RiLT5PcENvZGUgIT0gUFhF X09QQ09ERV9HRVRfQ09ORklHX0lORk8pIHx8DQo+ICsgICAgICAoQ2RiLT5TdGF0Q29kZSAhPSBQ WEVfU1RBVENPREVfSU5JVElBTElaRSkgfHwNCj4gKyAgICAgIChDZGItPlN0YXRGbGFncyAhPSBQ WEVfU1RBVEZMQUdTX0lOSVRJQUxJWkUpIHx8DQo+ICsgICAgICAoQ2RiLT5JRm51bSA+PSAoZ1B4 ZS0+SUZjbnQgfCBnUHhlLT5JRmNudEV4dCA8PCA4KSkgfHwNCj4gKyAgICAgIChDZGItPkNQQnNp emUgIT0gUFhFX0NQQlNJWkVfTk9UX1VTRUQpIHx8DQo+ICsgICAgICAoQ2RiLT5DUEJhZGRyICE9 IFBYRV9DUEJBRERSX05PVF9VU0VEKSB8fA0KPiArICAgICAgKENkYi0+REJzaXplICE9IHNpemVv ZiAoUFhFX0RCX0dFVF9DT05GSUdfSU5GTykpIHx8DQo+ICsgICAgICAoQ2RiLT5PcEZsYWdzICE9 IFBYRV9PUEZMQUdTX05PVF9VU0VEKSkNCj4gKyAgew0KPiArICAgIENkYi0+U3RhdEZsYWdzID0g UFhFX1NUQVRGTEFHU19DT01NQU5EX0ZBSUxFRDsNCj4gKyAgICBDZGItPlN0YXRDb2RlICA9IFBY RV9TVEFUQ09ERV9JTlZBTElEX0NEQjsNCj4gKyAgICByZXR1cm47DQo+ICsgIH0gZWxzZSB7DQo+ ICsgICAgQ2RiLT5TdGF0RmxhZ3MgPSBQWEVfU1RBVEZMQUdTX0NPTU1BTkRfQ09NUExFVEU7DQo+ ICsgICAgQ2RiLT5TdGF0Q29kZSAgPSBQWEVfU1RBVENPREVfU1VDQ0VTUzsNCj4gKyAgfQ0KPiAr DQo+ICsgIGlmIChOaWMtPlN0YXRlID09IFBYRV9TVEFURkxBR1NfR0VUX1NUQVRFX1NUT1BQRUQp IHsNCj4gKyAgICBDZGItPlN0YXRGbGFncyA9IFBYRV9TVEFURkxBR1NfQ09NTUFORF9GQUlMRUQ7 DQo+ICsgICAgQ2RiLT5TdGF0Q29kZSAgPSBQWEVfU1RBVENPREVfTk9UX1NUQVJURUQ7DQo+ICsg ICAgcmV0dXJuOw0KPiArICB9DQo+ICsNCj4gKyAgRGIgPSAoUFhFX0RCX0dFVF9DT05GSUdfSU5G TyAqKShVSU5UTilDZGItPkRCYWRkcjsNCj4gKw0KPiArICBEYi0+cGNpLkJ1c1R5cGUgPSBQWEVf QlVTVFlQRV9VU0I7DQo+ICsNCj4gKyAgaWYgKE5pYy0+VXNiRXRoLT5Vc2JFdGhVbmRpLlVzYkV0 aFVuZGlHZXRDb25maWdJbmZvICE9IE5VTEwpIHsNCj4gKyAgICBTdGF0dXMgPSBOaWMtPlVzYkV0 aC0+VXNiRXRoVW5kaS5Vc2JFdGhVbmRpR2V0Q29uZmlnSW5mbyAoQ2RiLCBOaWMpOw0KPiArICAg IGlmIChFRklfRVJST1IgKFN0YXR1cykpIHsNCj4gKyAgICAgIENkYi0+U3RhdEZsYWdzID0gUFhF X1NUQVRGTEFHU19DT01NQU5EX0ZBSUxFRDsNCj4gKyAgICB9DQo+ICsgIH0NCj4gK30NCj4gKw0K PiArLyoqDQo+ICsgIFRoaXMgY29tbWFuZCByZXNldHMgdGhlIG5ldHdvcmsgYWRhcHRlciBhbmQg aW5pdGlhbGl6ZXMgVU5ESSB1c2luZw0KPiArICB0aGUgcGFyYW1ldGVycyBzdXBwbGllZCBpbiB0 aGUgQ1BCLg0KPiArDQo+ICsgIEBwYXJhbVtpbl0gICAgICBDZGIgIEEgcG9pbnRlciB0byB0aGUg Y29tbWFuZCBkZXNjcmlwdG9yIGJsb2NrLg0KPiArICBAcGFyYW1baW4sIG91dF0gTmljICBBIHBv aW50ZXIgdG8gdGhlIE5ldHdvcmsgaW50ZXJmYWNlIGNvbnRyb2xsZXIgZGF0YS4NCj4gKw0KPiAr KiovDQo+ICtWT0lEDQo+ICtVbmRpSW5pdGlhbGl6ZSAoDQo+ICsgIElOICAgICAgUFhFX0NEQiAg ICpDZGIsDQo+ICsgIElOIE9VVCAgTklDX0RBVEEgICpOaWMNCj4gKyAgKQ0KPiArew0KPiArICBQ WEVfQ1BCX0lOSVRJQUxJWkUgICpDcGI7DQo+ICsgIFBYRV9EQl9JTklUSUFMSVpFICAgKkRiOw0K PiArICBFRklfU1RBVFVTICAgICAgICAgIFN0YXR1czsNCj4gKw0KPiArICBpZiAoKENkYi0+T3BD b2RlICE9IFBYRV9PUENPREVfSU5JVElBTElaRSkgfHwNCj4gKyAgICAgIChDZGItPlN0YXRDb2Rl ICE9IFBYRV9TVEFUQ09ERV9JTklUSUFMSVpFKSB8fA0KPiArICAgICAgKENkYi0+U3RhdEZsYWdz ICE9IFBYRV9TVEFURkxBR1NfSU5JVElBTElaRSkgfHwNCj4gKyAgICAgIChDZGItPklGbnVtID49 IChnUHhlLT5JRmNudCB8IGdQeGUtPklGY250RXh0IDw8IDgpKSB8fA0KPiArICAgICAgKENkYi0+ Q1BCc2l6ZSAhPSBzaXplb2YgKFBYRV9DUEJfSU5JVElBTElaRSkpKQ0KPiArICB7DQo+ICsgICAg Q2RiLT5TdGF0RmxhZ3MgPSBQWEVfU1RBVEZMQUdTX0NPTU1BTkRfRkFJTEVEOw0KPiArICAgIENk Yi0+U3RhdENvZGUgID0gUFhFX1NUQVRDT0RFX0lOVkFMSURfQ0RCOw0KPiArICAgIHJldHVybjsN Cj4gKyAgfSBlbHNlIHsNCj4gKyAgICBDZGItPlN0YXRGbGFncyA9IFBYRV9TVEFURkxBR1NfQ09N TUFORF9DT01QTEVURTsNCj4gKyAgfQ0KPiArDQo+ICsgIGlmIChOaWMtPlN0YXRlID09IFBYRV9T VEFURkxBR1NfR0VUX1NUQVRFX1NUT1BQRUQpIHsNCj4gKyAgICBDZGItPlN0YXRGbGFncyA9IFBY RV9TVEFURkxBR1NfQ09NTUFORF9GQUlMRUQ7DQo+ICsgICAgQ2RiLT5TdGF0Q29kZSAgPSBQWEVf U1RBVENPREVfTk9UX1NUQVJURUQ7DQo+ICsgICAgcmV0dXJuOw0KPiArICB9DQo+ICsNCj4gKyAg aWYgKChDZGItPk9wRmxhZ3MgIT0gUFhFX09QRkxBR1NfSU5JVElBTElaRV9ERVRFQ1RfQ0FCTEUp ICYmDQo+ICsgICAgICAoQ2RiLT5PcEZsYWdzICE9IFBYRV9PUEZMQUdTX0lOSVRJQUxJWkVfRE9f Tk9UX0RFVEVDVF9DQUJMRSkpDQo+ICsgIHsNCj4gKyAgICBDZGItPlN0YXRGbGFncyA9IFBYRV9T VEFURkxBR1NfQ09NTUFORF9GQUlMRUQ7DQo+ICsgICAgQ2RiLT5TdGF0Q29kZSAgPSBQWEVfU1RB VENPREVfSU5WQUxJRF9DREI7DQo+ICsgICAgcmV0dXJuOw0KPiArICB9DQo+ICsNCj4gKyAgaWYg KE5pYy0+U3RhdGUgPT0gUFhFX1NUQVRGTEFHU19HRVRfU1RBVEVfSU5JVElBTElaRUQpIHsNCj4g KyAgICBDZGItPlN0YXRGbGFncyA9IFBYRV9TVEFURkxBR1NfQ09NTUFORF9GQUlMRUQ7DQo+ICsg ICAgQ2RiLT5TdGF0Q29kZSAgPSBQWEVfU1RBVENPREVfQUxSRUFEWV9JTklUSUFMSVpFRDsNCj4g KyAgICByZXR1cm47DQo+ICsgIH0NCj4gKw0KPiArICBDcGIgPSAoUFhFX0NQQl9JTklUSUFMSVpF ICopKFVJTlROKUNkYi0+Q1BCYWRkcjsNCj4gKyAgRGIgID0gKFBYRV9EQl9JTklUSUFMSVpFICop KFVJTlROKUNkYi0+REJhZGRyOw0KPiArDQo+ICsgIE5pYy0+UHhlSW5pdC5MaW5rU3BlZWQgICAg PSBDcGItPkxpbmtTcGVlZDsNCj4gKyAgTmljLT5QeGVJbml0LkR1cGxleE1vZGUgICA9IENwYi0+ RHVwbGV4TW9kZTsNCj4gKyAgTmljLT5QeGVJbml0Lkxvb3BCYWNrTW9kZSA9IENwYi0+TG9vcEJh Y2tNb2RlOw0KPiArICBOaWMtPlB4ZUluaXQuTWVtb3J5QWRkciAgID0gQ3BiLT5NZW1vcnlBZGRy Ow0KPiArICBOaWMtPlB4ZUluaXQuTWVtb3J5TGVuZ3RoID0gQ3BiLT5NZW1vcnlMZW5ndGg7DQo+ ICsgIE5pYy0+UHhlSW5pdC5UeEJ1ZkNudCAgICAgPSBUWF9CVUZGRVJfQ09VTlQ7DQo+ICsgIE5p Yy0+UHhlSW5pdC5UeEJ1ZlNpemUgICAgPSBOaWMtPk1heFNlZ21lbnRTaXplOw0KPiArICBOaWMt PlB4ZUluaXQuUnhCdWZDbnQgICAgID0gUlhfQlVGRkVSX0NPVU5UOw0KPiArICBOaWMtPlB4ZUlu aXQuUnhCdWZTaXplICAgID0gTmljLT5NYXhTZWdtZW50U2l6ZTsNCj4gKw0KPiArICBDZGItPlN0 YXRDb2RlID0gSW5pdGlhbGl6ZSAoQ2RiLCBOaWMpOw0KPiArDQo+ICsgIERiLT5NZW1vcnlVc2Vk ID0gTUVNT1JZX1JFUVVJUkU7DQo+ICsgIERiLT5UeEJ1ZkNudCAgID0gTmljLT5QeGVJbml0LlR4 QnVmQ250Ow0KPiArICBEYi0+VHhCdWZTaXplICA9IE5pYy0+UHhlSW5pdC5UeEJ1ZlNpemU7DQo+ ICsgIERiLT5SeEJ1ZkNudCAgID0gTmljLT5QeGVJbml0LlJ4QnVmQ250Ow0KPiArICBEYi0+UnhC dWZTaXplICA9IE5pYy0+UHhlSW5pdC5SeEJ1ZlNpemU7DQo+ICsNCj4gKyAgTmljLT5SeEZpbHRl ciAgICA9IFBYRV9PUEZMQUdTX1JFQ0VJVkVfRklMVEVSX0JST0FEQ0FTVDsNCj4gKyAgTmljLT5D YW5UcmFuc21pdCA9IEZBTFNFOw0KPiArDQo+ICsgIGlmIChDZGItPk9wRmxhZ3MgPT0gUFhFX09Q RkxBR1NfSU5JVElBTElaRV9ERVRFQ1RfQ0FCTEUpIHsNCj4gKyAgICBpZiAoKE5pYy0+UmVxdWVz dC5SZXF1ZXN0ID09IFVTQl9DRENfTkVUV09SS19DT05ORUNUSU9OKSAmJiAoTmljLQ0KPiA+UmVx dWVzdC5WYWx1ZSA9PSBORVRXT1JLX0RJU0NPTk5FQ1QpKSB7DQo+ICsgICAgICBOaWMtPkNhYmxl RGV0ZWN0ID0gMDsNCj4gKyAgICB9IGVsc2UgaWYgKChOaWMtPlJlcXVlc3QuUmVxdWVzdCA9PSBV U0JfQ0RDX05FVFdPUktfQ09OTkVDVElPTikgJiYNCj4gKE5pYy0+UmVxdWVzdC5WYWx1ZSA9PSBO RVRXT1JLX0NPTk5FQ1RFRCkpIHsNCj4gKyAgICAgIE5pYy0+Q2FibGVEZXRlY3QgPSAxOw0KPiAr ICAgIH0NCj4gKw0KPiArICAgIGlmIChOaWMtPkNhYmxlRGV0ZWN0ID09IDApIHsNCj4gKyAgICAg IENkYi0+U3RhdEZsYWdzIHw9IFBYRV9TVEFURkxBR1NfSU5JVElBTElaRURfTk9fTUVESUE7DQo+ ICsgICAgfQ0KPiArICB9DQo+ICsNCj4gKyAgaWYgKENkYi0+U3RhdENvZGUgIT0gUFhFX1NUQVRD T0RFX1NVQ0NFU1MpIHsNCj4gKyAgICBDZGItPlN0YXRGbGFncyA9IFBYRV9TVEFURkxBR1NfQ09N TUFORF9GQUlMRUQ7DQo+ICsgIH0gZWxzZSB7DQo+ICsgICAgTmljLT5TdGF0ZSA9IFBYRV9TVEFU RkxBR1NfR0VUX1NUQVRFX0lOSVRJQUxJWkVEOw0KPiArICB9DQo+ICsNCj4gKyAgaWYgKE5pYy0+ VXNiRXRoLT5Vc2JFdGhVbmRpLlVzYkV0aFVuZGlJbml0aWFsaXplICE9IE5VTEwpIHsNCj4gKyAg ICBTdGF0dXMgPSBOaWMtPlVzYkV0aC0+VXNiRXRoVW5kaS5Vc2JFdGhVbmRpSW5pdGlhbGl6ZSAo Q2RiLCBOaWMpOw0KPiArICAgIGlmIChFRklfRVJST1IgKFN0YXR1cykpIHsNCj4gKyAgICAgIENk Yi0+U3RhdEZsYWdzID0gUFhFX1NUQVRGTEFHU19DT01NQU5EX0ZBSUxFRDsNCj4gKyAgICB9DQo+ ICsgIH0NCj4gK30NCj4gKw0KPiArLyoqDQo+ICsgIEluaXRpYWxpemUgTmV0d29yayBpbnRlcmZh Y2UgY29udHJvbGxlciBkYXRhLg0KPiArDQo+ICsgIEBwYXJhbVtpbl0gICAgICBDZGIgICAgIEEg cG9pbnRlciB0byB0aGUgY29tbWFuZCBkZXNjcmlwdG9yIGJsb2NrLg0KPiArICBAcGFyYW1baW4s IG91dF0gTmljICAgICBBIHBvaW50ZXIgdG8gdGhlIE5ldHdvcmsgaW50ZXJmYWNlIGNvbnRyb2xs ZXIgZGF0YS4NCj4gKw0KPiArICBAcmV0dmFsIFN0YXR1cyAgQSB2YWx1ZSBvZiBQeGUgc3RhdGNv ZGUuDQo+ICsNCj4gKyoqLw0KPiArVUlOVDE2DQo+ICtJbml0aWFsaXplICgNCj4gKyAgSU4gICAg ICBQWEVfQ0RCICAgKkNkYiwNCj4gKyAgSU4gT1VUICBOSUNfREFUQSAgKk5pYw0KPiArICApDQo+ ICt7DQo+ICsgIFVJTlROICAgICAgIFN0YXR1czsNCj4gKyAgVUlOVDMyICAgICAgSW5kZXg7DQo+ ICsgIEVGSV9TVEFUVVMgIEVmaVN0YXR1czsNCj4gKw0KPiArICBTdGF0dXMgPSBNYXBJdCAoDQo+ ICsgICAgICAgICAgICAgTmljLA0KPiArICAgICAgICAgICAgIE5pYy0+UHhlSW5pdC5NZW1vcnlB ZGRyLA0KPiArICAgICAgICAgICAgIE5pYy0+UHhlSW5pdC5NZW1vcnlMZW5ndGgsDQo+ICsgICAg ICAgICAgICAgVE9fQU5EX0ZST01fREVWSUNFLA0KPiArICAgICAgICAgICAgIChVSU5UNjQpKFVJ TlROKSZOaWMtPk1hcHBlZEFkZHINCj4gKyAgICAgICAgICAgICApOw0KPiArDQo+ICsgIGlmIChT dGF0dXMgIT0gMCkgew0KPiArICAgIHJldHVybiAoVUlOVDE2KVN0YXR1czsNCj4gKyAgfQ0KPiAr DQo+ICsgIGZvciAoSW5kZXggPSAwOyBJbmRleCA8IFBYRV9IV0FERFJfTEVOX0VUSEVSOyBJbmRl eCsrKSB7DQo+ICsgICAgTmljLT5QZXJtTm9kZUFkZHJlc3NbSW5kZXhdID0gTmljLT5NYWNBZGRy LkFkZHJbSW5kZXhdOw0KPiArICB9DQo+ICsNCj4gKyAgZm9yIChJbmRleCA9IDA7IEluZGV4IDwg UFhFX0hXQUREUl9MRU5fRVRIRVI7IEluZGV4KyspIHsNCj4gKyAgICBOaWMtPkN1cnJlbnROb2Rl QWRkcmVzc1tJbmRleF0gPSBOaWMtPlBlcm1Ob2RlQWRkcmVzc1tJbmRleF07DQo+ICsgIH0NCj4g Kw0KPiArICBmb3IgKEluZGV4ID0gMDsgSW5kZXggPCBQWEVfSFdBRERSX0xFTl9FVEhFUjsgSW5k ZXgrKykgew0KPiArICAgIE5pYy0+QnJvYWRjYXN0Tm9kZUFkZHJlc3NbSW5kZXhdID0gMHhGRjsN Cj4gKyAgfQ0KPiArDQo+ICsgIGZvciAoSW5kZXggPSBQWEVfSFdBRERSX0xFTl9FVEhFUjsgSW5k ZXggPCBQWEVfTUFDX0xFTkdUSDsgSW5kZXgrKykNCj4gew0KPiArICAgIE5pYy0+Q3VycmVudE5v ZGVBZGRyZXNzW0luZGV4XSAgID0gMDsNCj4gKyAgICBOaWMtPlBlcm1Ob2RlQWRkcmVzc1tJbmRl eF0gICAgICA9IDA7DQo+ICsgICAgTmljLT5Ccm9hZGNhc3ROb2RlQWRkcmVzc1tJbmRleF0gPSAw Ow0KPiArICB9DQo+ICsNCj4gKyAgaWYgKE5pYy0+VXNiRXRoLT5Vc2JFdGhJbml0aWFsaXplICE9 IE5VTEwpIHsNCj4gKyAgICBFZmlTdGF0dXMgPSBOaWMtPlVzYkV0aC0+VXNiRXRoSW5pdGlhbGl6 ZSAoQ2RiLCBOaWMpOw0KPiArICAgIGlmIChFRklfRVJST1IgKEVmaVN0YXR1cykpIHsNCj4gKyAg ICAgIHJldHVybiBQWEVfU1RBVEZMQUdTX0NPTU1BTkRfRkFJTEVEOw0KPiArICAgIH0NCj4gKyAg fQ0KPiArDQo+ICsgIHJldHVybiAoVUlOVDE2KVN0YXR1czsNCj4gK30NCj4gKw0KPiArLyoqDQo+ ICsgIFRoaXMgY29tbWFuZCByZXNldHMgdGhlIG5ldHdvcmsgYWRhcHRlciBhbmQgcmVpbml0aWFs aXplcyB0aGUgVU5ESQ0KPiArICB3aXRoIHRoZSBzYW1lIHBhcmFtZXRlcnMgcHJvdmlkZWQgaW4g dGhlIEluaXRpYWxpemUgY29tbWFuZC4NCj4gKw0KPiArICBAcGFyYW1baW5dICBDZGIgIEEgcG9p bnRlciB0byB0aGUgY29tbWFuZCBkZXNjcmlwdG9yIGJsb2NrLg0KPiArICBAcGFyYW1baW5dICBO aWMgIEEgcG9pbnRlciB0byB0aGUgTmV0d29yayBpbnRlcmZhY2UgY29udHJvbGxlciBkYXRhLg0K PiArDQo+ICsqKi8NCj4gK1ZPSUQNCj4gK1VuZGlSZXNldCAoDQo+ICsgIElOICBQWEVfQ0RCICAg KkNkYiwNCj4gKyAgSU4gIE5JQ19EQVRBICAqTmljDQo+ICsgICkNCj4gK3sNCj4gKyAgRUZJX1NU QVRVUyAgU3RhdHVzOw0KPiArDQo+ICsgIGlmICgoQ2RiLT5PcENvZGUgIT0gUFhFX09QQ09ERV9S RVNFVCkgfHwNCj4gKyAgICAgIChDZGItPlN0YXRDb2RlICE9IFBYRV9TVEFUQ09ERV9JTklUSUFM SVpFKSB8fA0KPiArICAgICAgKENkYi0+U3RhdEZsYWdzICE9IFBYRV9TVEFURkxBR1NfSU5JVElB TElaRSkgfHwNCj4gKyAgICAgIChDZGItPklGbnVtID49IChnUHhlLT5JRmNudCB8IGdQeGUtPklG Y250RXh0IDw8IDgpKSB8fA0KPiArICAgICAgKENkYi0+Q1BCc2l6ZSAhPSBQWEVfQ1BCU0laRV9O T1RfVVNFRCkgfHwNCj4gKyAgICAgIChDZGItPkNQQmFkZHIgIT0gUFhFX0NQQkFERFJfTk9UX1VT RUQpIHx8DQo+ICsgICAgICAoQ2RiLT5EQnNpemUgIT0gUFhFX0RCU0laRV9OT1RfVVNFRCkgfHwN Cj4gKyAgICAgIChDZGItPkRCYWRkciAhPSBQWEVfREJBRERSX05PVF9VU0VEKSkNCj4gKyAgew0K PiArICAgIENkYi0+U3RhdEZsYWdzID0gUFhFX1NUQVRGTEFHU19DT01NQU5EX0ZBSUxFRDsNCj4g KyAgICBDZGItPlN0YXRDb2RlICA9IFBYRV9TVEFUQ09ERV9JTlZBTElEX0NEQjsNCj4gKyAgICBy ZXR1cm47DQo+ICsgIH0gZWxzZSB7DQo+ICsgICAgQ2RiLT5TdGF0RmxhZ3MgPSBQWEVfU1RBVEZM QUdTX0NPTU1BTkRfQ09NUExFVEU7DQo+ICsgICAgQ2RiLT5TdGF0Q29kZSAgPSBQWEVfU1RBVENP REVfU1VDQ0VTUzsNCj4gKyAgfQ0KPiArDQo+ICsgIGlmIChOaWMtPlN0YXRlICE9IFBYRV9TVEFU RkxBR1NfR0VUX1NUQVRFX0lOSVRJQUxJWkVEKSB7DQo+ICsgICAgQ2RiLT5TdGF0Q29kZSAgPSBQ WEVfU1RBVENPREVfTk9UX0lOSVRJQUxJWkVEOw0KPiArICAgIENkYi0+U3RhdEZsYWdzID0gUFhF X1NUQVRGTEFHU19DT01NQU5EX0ZBSUxFRDsNCj4gKyAgICByZXR1cm47DQo+ICsgIH0NCj4gKw0K PiArICBpZiAoKENkYi0+T3BGbGFncyAhPSBQWEVfT1BGTEFHU19OT1RfVVNFRCkgJiYNCj4gKyAg ICAgIChDZGItPk9wRmxhZ3MgIT0gUFhFX09QRkxBR1NfUkVTRVRfRElTQUJMRV9JTlRFUlJVUFRT KSAmJg0KPiArICAgICAgKENkYi0+T3BGbGFncyAhPSBQWEVfT1BGTEFHU19SRVNFVF9ESVNBQkxF X0ZJTFRFUlMpKQ0KPiArICB7DQo+ICsgICAgQ2RiLT5TdGF0RmxhZ3MgPSBQWEVfU1RBVEZMQUdT X0NPTU1BTkRfRkFJTEVEOw0KPiArICAgIENkYi0+U3RhdENvZGUgID0gUFhFX1NUQVRDT0RFX0lO VkFMSURfQ0RCOw0KPiArICAgIHJldHVybjsNCj4gKyAgfQ0KPiArDQo+ICsgIGlmICgoQ2RiLT5P cEZsYWdzICYgUFhFX09QRkxBR1NfUkVTRVRfRElTQUJMRV9GSUxURVJTKSA9PSAwKSB7DQo+ICsg ICAgTmljLT5SeEZpbHRlciA9IFBYRV9PUEZMQUdTX1JFQ0VJVkVfRklMVEVSX0JST0FEQ0FTVDsN Cj4gKyAgfQ0KPiArDQo+ICsgIGlmICgoQ2RiLT5PcEZsYWdzICYgUFhFX09QRkxBR1NfUkVTRVRf RElTQUJMRV9JTlRFUlJVUFRTKSAhPSAwKSB7DQo+ICsgICAgTmljLT5JbnRlcnJ1cE9wRmxhZyA9 IDA7DQo+ICsgIH0NCj4gKw0KPiArICBpZiAoTmljLT5Vc2JFdGgtPlVzYkV0aFVuZGkuVXNiRXRo VW5kaVJlc2V0ICE9IE5VTEwpIHsNCj4gKyAgICBTdGF0dXMgPSBOaWMtPlVzYkV0aC0+VXNiRXRo VW5kaS5Vc2JFdGhVbmRpUmVzZXQgKENkYiwgTmljKTsNCj4gKyAgICBpZiAoRUZJX0VSUk9SIChT dGF0dXMpKSB7DQo+ICsgICAgICBDZGItPlN0YXRGbGFncyA9IFBYRV9TVEFURkxBR1NfQ09NTUFO RF9GQUlMRUQ7DQo+ICsgICAgfQ0KPiArICB9DQo+ICt9DQo+ICsNCj4gKy8qKg0KPiArICBUaGUg U2h1dGRvd24gY29tbWFuZCByZXNldHMgdGhlIG5ldHdvcmsgYWRhcHRlciBhbmQgbGVhdmVzIGl0 IGluIGENCj4gKyAgc2FmZSBzdGF0ZSBmb3IgYW5vdGhlciBkcml2ZXIgdG8gaW5pdGlhbGl6ZS4N Cj4gKw0KPiArICBAcGFyYW1baW5dICAgICAgQ2RiICBBIHBvaW50ZXIgdG8gdGhlIGNvbW1hbmQg ZGVzY3JpcHRvciBibG9jay4NCj4gKyAgQHBhcmFtW2luLCBvdXRdIE5pYyAgQSBwb2ludGVyIHRv IHRoZSBOZXR3b3JrIGludGVyZmFjZSBjb250cm9sbGVyIGRhdGEuDQo+ICsNCj4gKyoqLw0KPiAr Vk9JRA0KPiArVW5kaVNodXRkb3duICgNCj4gKyAgSU4gICAgICBQWEVfQ0RCICAgKkNkYiwNCj4g KyAgSU4gT1VUICBOSUNfREFUQSAgKk5pYw0KPiArICApDQo+ICt7DQo+ICsgIEVGSV9TVEFUVVMg IFN0YXR1czsNCj4gKw0KPiArICBpZiAoKENkYi0+T3BDb2RlICE9IFBYRV9PUENPREVfU0hVVERP V04pIHx8DQo+ICsgICAgICAoQ2RiLT5TdGF0Q29kZSAhPSBQWEVfU1RBVENPREVfSU5JVElBTEla RSkgfHwNCj4gKyAgICAgIChDZGItPlN0YXRGbGFncyAhPSBQWEVfU1RBVEZMQUdTX0lOSVRJQUxJ WkUpIHx8DQo+ICsgICAgICAoQ2RiLT5JRm51bSA+PSAoZ1B4ZS0+SUZjbnQgfCBnUHhlLT5JRmNu dEV4dCA8PCA4KSkgfHwNCj4gKyAgICAgIChDZGItPkNQQnNpemUgIT0gUFhFX0NQQlNJWkVfTk9U X1VTRUQpIHx8DQo+ICsgICAgICAoQ2RiLT5DUEJhZGRyICE9IFBYRV9DUEJBRERSX05PVF9VU0VE KSB8fA0KPiArICAgICAgKENkYi0+REJzaXplICE9IFBYRV9EQlNJWkVfTk9UX1VTRUQpIHx8DQo+ ICsgICAgICAoQ2RiLT5EQmFkZHIgIT0gUFhFX0RCQUREUl9OT1RfVVNFRCkgfHwNCj4gKyAgICAg IChDZGItPk9wRmxhZ3MgIT0gUFhFX09QRkxBR1NfTk9UX1VTRUQpKQ0KPiArICB7DQo+ICsgICAg Q2RiLT5TdGF0RmxhZ3MgPSBQWEVfU1RBVEZMQUdTX0NPTU1BTkRfRkFJTEVEOw0KPiArICAgIENk Yi0+U3RhdENvZGUgID0gUFhFX1NUQVRDT0RFX0lOVkFMSURfQ0RCOw0KPiArICAgIHJldHVybjsN Cj4gKyAgfSBlbHNlIHsNCj4gKyAgICBDZGItPlN0YXRGbGFncyA9IFBYRV9TVEFURkxBR1NfQ09N TUFORF9DT01QTEVURTsNCj4gKyAgICBDZGItPlN0YXRDb2RlICA9IFBYRV9TVEFUQ09ERV9TVUND RVNTOw0KPiArICB9DQo+ICsNCj4gKyAgaWYgKE5pYy0+U3RhdGUgIT0gUFhFX1NUQVRGTEFHU19H RVRfU1RBVEVfSU5JVElBTElaRUQpIHsNCj4gKyAgICBDZGItPlN0YXRDb2RlICA9IFBYRV9TVEFU Q09ERV9OT1RfSU5JVElBTElaRUQ7DQo+ICsgICAgQ2RiLT5TdGF0RmxhZ3MgPSBQWEVfU1RBVEZM QUdTX0NPTU1BTkRfRkFJTEVEOw0KPiArICAgIHJldHVybjsNCj4gKyAgfQ0KPiArDQo+ICsgIE5p Yy0+Q2FuVHJhbnNtaXQgPSBGQUxTRTsNCj4gKw0KPiArICBOaWMtPlN0YXRlID0gUFhFX1NUQVRG TEFHU19HRVRfU1RBVEVfU1RBUlRFRDsNCj4gKw0KPiArICBpZiAoTmljLT5Vc2JFdGgtPlVzYkV0 aFVuZGkuVXNiRXRoVW5kaVNodXRkb3duICE9IE5VTEwpIHsNCj4gKyAgICBTdGF0dXMgPSBOaWMt PlVzYkV0aC0+VXNiRXRoVW5kaS5Vc2JFdGhVbmRpU2h1dGRvd24gKENkYiwgTmljKTsNCj4gKyAg ICBpZiAoRUZJX0VSUk9SIChTdGF0dXMpKSB7DQo+ICsgICAgICBDZGItPlN0YXRDb2RlICA9IFBY RV9TVEFUQ09ERV9OT1RfSU5JVElBTElaRUQ7DQo+ICsgICAgICBDZGItPlN0YXRGbGFncyA9IFBY RV9TVEFURkxBR1NfQ09NTUFORF9GQUlMRUQ7DQo+ICsgICAgfQ0KPiArICB9DQo+ICt9DQo+ICsN Cj4gKy8qKg0KPiArICBUaGUgSW50ZXJydXB0IEVuYWJsZXMgY29tbWFuZCBjYW4gYmUgdXNlZCB0 byByZWFkIGFuZC9vciBjaGFuZ2UNCj4gKyAgdGhlIGN1cnJlbnQgZXh0ZXJuYWwgaW50ZXJydXB0 IGVuYWJsZSBzZXR0aW5ncy4NCj4gKw0KPiArICBAcGFyYW1baW5dICBDZGIgIEEgcG9pbnRlciB0 byB0aGUgY29tbWFuZCBkZXNjcmlwdG9yIGJsb2NrLg0KPiArICBAcGFyYW1baW5dICBOaWMgIEEg cG9pbnRlciB0byB0aGUgTmV0d29yayBpbnRlcmZhY2UgY29udHJvbGxlciBkYXRhLg0KPiArDQo+ ICsqKi8NCj4gK1ZPSUQNCj4gK1VuZGlJbnRlcnJ1cHRFbmFibGUgKA0KPiArICBJTiAgUFhFX0NE QiAgICpDZGIsDQo+ICsgIElOICBOSUNfREFUQSAgKk5pYw0KPiArICApDQo+ICt7DQo+ICsgIEVG SV9TVEFUVVMgIFN0YXR1czsNCj4gKw0KPiArICBDZGItPlN0YXRDb2RlID0gUFhFX1NUQVRDT0RF X1VOU1VQUE9SVEVEOw0KPiArICBpZiAoTmljLT5Vc2JFdGgtPlVzYkV0aFVuZGkuVXNiRXRoVW5k aUludGVycnVwdEVuYWJsZSAhPSBOVUxMKSB7DQo+ICsgICAgU3RhdHVzID0gTmljLT5Vc2JFdGgt PlVzYkV0aFVuZGkuVXNiRXRoVW5kaUludGVycnVwdEVuYWJsZSAoQ2RiLCBOaWMpOw0KPiArICAg IGlmIChFRklfRVJST1IgKFN0YXR1cykpIHsNCj4gKyAgICAgIENkYi0+U3RhdEZsYWdzID0gUFhF X1NUQVRGTEFHU19DT01NQU5EX0ZBSUxFRDsNCj4gKyAgICB9IGVsc2Ugew0KPiArICAgICAgQ2Ri LT5TdGF0RmxhZ3MgPSBQWEVfU1RBVEZMQUdTX0NPTU1BTkRfQ09NUExFVEU7DQo+ICsgICAgICBD ZGItPlN0YXRDb2RlICA9IFBYRV9TVEFUQ09ERV9TVUNDRVNTOw0KPiArICAgIH0NCj4gKyAgfQ0K PiArfQ0KPiArDQo+ICsvKioNCj4gKyAgVGhpcyBjb21tYW5kIGlzIHVzZWQgdG8gcmVhZCBhbmQg Y2hhbmdlIHJlY2VpdmUgZmlsdGVycyBhbmQsDQo+ICsgIGlmIHN1cHBvcnRlZCwgcmVhZCBhbmQg Y2hhbmdlIHRoZSBtdWx0aWNhc3QgTUFDIGFkZHJlc3MgZmlsdGVyIGxpc3QuDQo+ICsNCj4gKyAg QHBhcmFtW2luXSAgQ2RiICBBIHBvaW50ZXIgdG8gdGhlIGNvbW1hbmQgZGVzY3JpcHRvciBibG9j ay4NCj4gKyAgQHBhcmFtW2luXSAgTmljICBBIHBvaW50ZXIgdG8gdGhlIE5ldHdvcmsgaW50ZXJm YWNlIGNvbnRyb2xsZXIgZGF0YS4NCj4gKw0KPiArKiovDQo+ICtWT0lEDQo+ICtVbmRpUmVjZWl2 ZUZpbHRlciAoDQo+ICsgIElOICBQWEVfQ0RCICAgKkNkYiwNCj4gKyAgSU4gIE5JQ19EQVRBICAq TmljDQo+ICsgICkNCj4gK3sNCj4gKyAgVUlOVDE2ICAgICAgICAgICAgICAgICAgTmV3RmlsdGVy Ow0KPiArICBQWEVfREJfUkVDRUlWRV9GSUxURVJTICAqRGI7DQo+ICsgIEVGSV9TVEFUVVMgICAg ICAgICAgICAgIFN0YXR1czsNCj4gKw0KPiArICBpZiAoKENkYi0+T3BDb2RlICE9IFBYRV9PUENP REVfUkVDRUlWRV9GSUxURVJTKSB8fA0KPiArICAgICAgKENkYi0+U3RhdENvZGUgIT0gUFhFX1NU QVRDT0RFX0lOSVRJQUxJWkUpIHx8DQo+ICsgICAgICAoQ2RiLT5TdGF0RmxhZ3MgIT0gUFhFX1NU QVRGTEFHU19JTklUSUFMSVpFKSB8fA0KPiArICAgICAgKENkYi0+SUZudW0gPj0gKGdQeGUtPklG Y250IHwgZ1B4ZS0+SUZjbnRFeHQgPDwgOCkpKQ0KPiArICB7DQo+ICsgICAgQ2RiLT5TdGF0Rmxh Z3MgPSBQWEVfU1RBVEZMQUdTX0NPTU1BTkRfRkFJTEVEOw0KPiArICAgIENkYi0+U3RhdENvZGUg ID0gUFhFX1NUQVRDT0RFX0lOVkFMSURfQ0RCOw0KPiArICAgIHJldHVybjsNCj4gKyAgfSBlbHNl IHsNCj4gKyAgICBDZGItPlN0YXRGbGFncyA9IFBYRV9TVEFURkxBR1NfQ09NTUFORF9DT01QTEVU RTsNCj4gKyAgICBDZGItPlN0YXRDb2RlICA9IFBYRV9TVEFUQ09ERV9TVUNDRVNTOw0KPiArICB9 DQo+ICsNCj4gKyAgaWYgKE5pYy0+U3RhdGUgIT0gUFhFX1NUQVRGTEFHU19HRVRfU1RBVEVfSU5J VElBTElaRUQpIHsNCj4gKyAgICBDZGItPlN0YXRDb2RlICA9IFBYRV9TVEFUQ09ERV9OT1RfSU5J VElBTElaRUQ7DQo+ICsgICAgQ2RiLT5TdGF0RmxhZ3MgPSBQWEVfU1RBVEZMQUdTX0NPTU1BTkRf RkFJTEVEOw0KPiArICAgIHJldHVybjsNCj4gKyAgfQ0KPiArDQo+ICsgIE5ld0ZpbHRlciA9IChV SU5UMTYpKENkYi0+T3BGbGFncyAmIDB4MUYpOw0KPiArDQo+ICsgIHN3aXRjaCAoQ2RiLT5PcEZs YWdzICYgUFhFX09QRkxBR1NfUkVDRUlWRV9GSUxURVJfT1BNQVNLKSB7DQo+ICsgICAgY2FzZSBQ WEVfT1BGTEFHU19SRUNFSVZFX0ZJTFRFUl9SRUFEOg0KPiArICAgICAgaWYgKENkYi0+Q1BCc2l6 ZSAhPSBQWEVfQ1BCU0laRV9OT1RfVVNFRCkgew0KPiArICAgICAgICBDZGItPlN0YXRGbGFncyA9 IFBYRV9TVEFURkxBR1NfQ09NTUFORF9GQUlMRUQ7DQo+ICsgICAgICAgIENkYi0+U3RhdENvZGUg ID0gUFhFX1NUQVRDT0RFX0lOVkFMSURfQ0RCOw0KPiArICAgICAgfQ0KPiArDQo+ICsgICAgICBp ZiAoKE5ld0ZpbHRlciAmIFBYRV9PUEZMQUdTX1JFQ0VJVkVfRklMVEVSX1JFU0VUX01DQVNUX0xJ U1QpID09IDApDQo+IHsNCj4gKyAgICAgICAgaWYgKChDZGItPkRCc2l6ZSAhPSAwKSkgew0KPiAr ICAgICAgICAgIERiID0gKFBYRV9EQl9SRUNFSVZFX0ZJTFRFUlMgKikoVUlOVE4pQ2RiLT5EQmFk ZHI7DQo+ICsgICAgICAgICAgQ29weU1lbSAoRGIsICZOaWMtPk1jYXN0TGlzdCwgTmljLT5NY2Fz dENvdW50KTsNCj4gKyAgICAgICAgfQ0KPiArICAgICAgfQ0KPiArDQo+ICsgICAgICBicmVhazsN Cj4gKw0KPiArICAgIGNhc2UgUFhFX09QRkxBR1NfUkVDRUlWRV9GSUxURVJfRU5BQkxFOg0KPiAr ICAgICAgaWYgKE5ld0ZpbHRlciA9PSAwKSB7DQo+ICsgICAgICAgIENkYi0+U3RhdEZsYWdzID0g UFhFX1NUQVRGTEFHU19DT01NQU5EX0ZBSUxFRDsNCj4gKyAgICAgIH0NCj4gKw0KPiArICAgICAg aWYgKENkYi0+Q1BCc2l6ZSAhPSAwKSB7DQo+ICsgICAgICAgIGlmICgoKE5ld0ZpbHRlciAmIFBY RV9PUEZMQUdTX1JFQ0VJVkVfRklMVEVSX0ZJTFRFUkVEX01VTFRJQ0FTVCkNCj4gPT0gMCkgfHwN Cj4gKyAgICAgICAgICAgICgoTmV3RmlsdGVyICYgUFhFX09QRkxBR1NfUkVDRUlWRV9GSUxURVJf UkVTRVRfTUNBU1RfTElTVCkgIT0NCj4gMCkgfHwNCj4gKyAgICAgICAgICAgICgoTmV3RmlsdGVy ICYgUFhFX09QRkxBR1NfUkVDRUlWRV9GSUxURVJfQUxMX01VTFRJQ0FTVCkgIT0gMCkNCj4gfHwN Cj4gKyAgICAgICAgICAgICgoQ2RiLT5DUEJzaXplICUgc2l6ZW9mIChQWEVfTUFDX0FERFIpKSAh PSAwKSkNCj4gKyAgICAgICAgew0KPiArICAgICAgICAgIENkYi0+U3RhdEZsYWdzID0gUFhFX1NU QVRGTEFHU19DT01NQU5EX0ZBSUxFRDsNCj4gKyAgICAgICAgfQ0KPiArICAgICAgfQ0KPiArDQo+ ICsgICAgICBpZiAoKENkYi0+T3BGbGFncyAmDQo+IFBYRV9PUEZMQUdTX1JFQ0VJVkVfRklMVEVS X0ZJTFRFUkVEX01VTFRJQ0FTVCkgIT0gMCkgew0KPiArICAgICAgICBpZiAoKChDZGItPk9wRmxh Z3MgJg0KPiBQWEVfT1BGTEFHU19SRUNFSVZFX0ZJTFRFUl9SRVNFVF9NQ0FTVF9MSVNUKSAhPSAw KSB8fA0KPiArICAgICAgICAgICAgKChDZGItPk9wRmxhZ3MgJiBQWEVfT1BGTEFHU19SRUNFSVZF X0ZJTFRFUl9BTExfTVVMVElDQVNUKSAhPQ0KPiAwKSkNCj4gKyAgICAgICAgew0KPiArICAgICAg ICAgIENkYi0+U3RhdEZsYWdzID0gUFhFX1NUQVRGTEFHU19DT01NQU5EX0ZBSUxFRDsNCj4gKyAg ICAgICAgfQ0KPiArDQo+ICsgICAgICAgIGlmICgoQ2RiLT5DUEJzaXplID09IDApKSB7DQo+ICsg ICAgICAgICAgQ2RiLT5TdGF0RmxhZ3MgPSBQWEVfU1RBVEZMQUdTX0NPTU1BTkRfRkFJTEVEOw0K PiArICAgICAgICB9DQo+ICsgICAgICB9DQo+ICsNCj4gKyAgICAgIENkYi0+U3RhdENvZGUgPSBT ZXRGaWx0ZXIgKE5pYywgTmV3RmlsdGVyLCBDZGItPkNQQmFkZHIsIENkYi0+Q1BCc2l6ZSk7DQo+ ICsgICAgICBicmVhazsNCj4gKw0KPiArICAgIGNhc2UgUFhFX09QRkxBR1NfUkVDRUlWRV9GSUxU RVJfRElTQUJMRToNCj4gKyAgICAgIGlmIChDZGItPkNQQnNpemUgIT0gUFhFX0NQQlNJWkVfTk9U X1VTRUQpIHsNCj4gKyAgICAgICAgQ2RiLT5TdGF0RmxhZ3MgPSBQWEVfU1RBVEZMQUdTX0NPTU1B TkRfRkFJTEVEOw0KPiArICAgICAgICBDZGItPlN0YXRDb2RlICA9IFBYRV9TVEFUQ09ERV9JTlZB TElEX0NEQjsNCj4gKyAgICAgIH0NCj4gKw0KPiArICAgICAgYnJlYWs7DQo+ICsNCj4gKyAgICBk ZWZhdWx0Og0KPiArICAgICAgQ2RiLT5TdGF0RmxhZ3MgPSBQWEVfU1RBVEZMQUdTX0NPTU1BTkRf RkFJTEVEOw0KPiArICAgICAgQ2RiLT5TdGF0Q29kZSAgPSBQWEVfU1RBVENPREVfSU5WQUxJRF9D REI7DQo+ICsgIH0NCj4gKw0KPiArICBDZGItPlN0YXRGbGFncyA9IChQWEVfU1RBVEZMQUdTKShD ZGItPlN0YXRGbGFncyB8IE5pYy0+UnhGaWx0ZXIpOw0KPiArDQo+ICsgIGlmIChOaWMtPlVzYkV0 aC0+VXNiRXRoVW5kaS5Vc2JFdGhVbmRpUmVjZWl2ZUZpbHRlciAhPSBOVUxMKSB7DQo+ICsgICAg U3RhdHVzID0gTmljLT5Vc2JFdGgtPlVzYkV0aFVuZGkuVXNiRXRoVW5kaVJlY2VpdmVGaWx0ZXIg KENkYiwgTmljKTsNCj4gKyAgICBpZiAoRUZJX0VSUk9SIChTdGF0dXMpKSB7DQo+ICsgICAgICBD ZGItPlN0YXRGbGFncyA9IFBYRV9TVEFURkxBR1NfQ09NTUFORF9GQUlMRUQ7DQo+ICsgICAgfQ0K PiArICB9DQo+ICt9DQo+ICsNCj4gKy8qKg0KPiArICBTZXQgUFhFIHJlY2VpdmUgZmlsdGVyLg0K PiArDQo+ICsgIEBwYXJhbVtpbl0gIE5pYyAgICAgICAgIEEgcG9pbnRlciB0byB0aGUgTmV0d29y ayBpbnRlcmZhY2UgY29udHJvbGxlciBkYXRhLg0KPiArICBAcGFyYW1baW5dICBTZXRGaWx0ZXIg ICBQWEUgcmVjZWl2ZSBmaWx0ZXINCj4gKyAgQHBhcmFtW2luXSAgQ3BiQWRkciAgICAgQ29tbWFu ZCBQYXJhbWV0ZXIgQmxvY2sgQWRkcmVzcw0KPiArICBAcGFyYW1baW5dICBDcGJTaXplICAgICBD b21tYW5kIFBhcmFtZXRlciBCbG9jayBTaXplDQo+ICsNCj4gKyoqLw0KPiArVUlOVDE2DQo+ICtT ZXRGaWx0ZXIgKA0KPiArICBJTiAgTklDX0RBVEEgICpOaWMsDQo+ICsgIElOICBVSU5UMTYgICAg U2V0RmlsdGVyLA0KPiArICBJTiAgVUlOVDY0ICAgIENwYkFkZHIsDQo+ICsgIElOICBVSU5UMzIg ICAgQ3BiU2l6ZQ0KPiArICApDQo+ICt7DQo+ICsgIEVGSV9TVEFUVVMgICAgICAgICAgICAgICAg ICAgU3RhdHVzOw0KPiArICBVSU5UOCAgICAgICAgICAgICAgICAgICAgICAgICpNY2FzdExpc3Q7 DQo+ICsgIFVJTlQ4ICAgICAgICAgICAgICAgICAgICAgICAgQ291bnQ7DQo+ICsgIFVJTlQ4ICAg ICAgICAgICAgICAgICAgICAgICAgSW5kZXgxOw0KPiArICBVSU5UOCAgICAgICAgICAgICAgICAg ICAgICAgIEluZGV4MjsNCj4gKyAgUFhFX0NQQl9SRUNFSVZFX0ZJTFRFUlMgICAgICAqQ3BiOw0K PiArICBVU0JfRVRIRVJORVRfRlVOX0RFU0NSSVBUT1IgIFVzYkV0aEZ1bkRlc2NyaXB0b3I7DQo+ ICsNCj4gKyAgQ291bnQgPSAwOw0KPiArICBDcGIgICA9IChQWEVfQ1BCX1JFQ0VJVkVfRklMVEVS UyAqKShVSU5UTilDcGJBZGRyOw0KPiArDQo+ICsgIC8vIFRoZSBDcGIgY291bGQgYmUgTlVMTC4o cmVmOlBYRV9DUEJBRERSX05PVF9VU0VEKQ0KPiArICBOaWMtPlJ4RmlsdGVyID0gKFVJTlQ4KVNl dEZpbHRlcjsNCj4gKw0KPiArICBpZiAoKChTZXRGaWx0ZXIgJiBQWEVfT1BGTEFHU19SRUNFSVZF X0ZJTFRFUl9GSUxURVJFRF9NVUxUSUNBU1QpICE9IDApDQo+IHx8IChDcGIgIT0gTlVMTCkpIHsN Cj4gKyAgICBpZiAoQ3BiICE9IE5VTEwpIHsNCj4gKyAgICAgIE5pYy0+TWNhc3RDb3VudCA9IChV SU5UOCkoQ3BiU2l6ZSAvIFBYRV9NQUNfTEVOR1RIKTsNCj4gKyAgICAgIENvcHlNZW0gKCZOaWMt Pk1jYXN0TGlzdCwgQ3BiLCBOaWMtPk1jYXN0Q291bnQpOw0KPiArICAgIH0NCj4gKw0KPiArICAg IE5pYy0+VXNiRXRoLT5Vc2JFdGhGdW5EZXNjcmlwdG9yIChOaWMtPlVzYkV0aCwgJlVzYkV0aEZ1 bkRlc2NyaXB0b3IpOw0KPiArICAgIGlmICgoVXNiRXRoRnVuRGVzY3JpcHRvci5OdW1iZXJNY0Zp bHRlcnMgPDwgMSkgPT0gMCkgew0KPiArICAgICAgTmljLT5SeEZpbHRlciB8PSBQWEVfT1BGTEFH U19SRUNFSVZFX0ZJTFRFUl9BTExfTVVMVElDQVNUOw0KPiArICAgICAgTmljLT5Vc2JFdGgtPlNl dFVzYkV0aFBhY2tldEZpbHRlciAoTmljLT5Vc2JFdGgsIE5pYy0+UnhGaWx0ZXIpOw0KPiArICAg IH0gZWxzZSB7DQo+ICsgICAgICBTdGF0dXMgPSBnQlMtPkFsbG9jYXRlUG9vbCAoRWZpQm9vdFNl cnZpY2VzRGF0YSwgTmljLT5NY2FzdENvdW50ICogNiwNCj4gKFZPSUQgKiopJk1jYXN0TGlzdCk7 DQo+ICsgICAgICBpZiAoRUZJX0VSUk9SIChTdGF0dXMpKSB7DQo+ICsgICAgICAgIHJldHVybiBQ WEVfU1RBVENPREVfSU5WQUxJRF9QQVJBTUVURVI7DQo+ICsgICAgICB9DQo+ICsNCj4gKyAgICAg IGlmIChDcGIgIT0gTlVMTCkgew0KPiArICAgICAgICBmb3IgKEluZGV4MSA9IDA7IEluZGV4MSA8 IE5pYy0+TWNhc3RDb3VudDsgSW5kZXgxKyspIHsNCj4gKyAgICAgICAgICBmb3IgKEluZGV4MiA9 IDA7IEluZGV4MiA8IDY7IEluZGV4MisrKSB7DQo+ICsgICAgICAgICAgICBNY2FzdExpc3RbQ291 bnQrK10gPSBDcGItPk1DYXN0TGlzdFtJbmRleDFdW0luZGV4Ml07DQo+ICsgICAgICAgICAgfQ0K PiArICAgICAgICB9DQo+ICsgICAgICB9DQo+ICsNCj4gKyAgICAgIE5pYy0+UnhGaWx0ZXIgfD0g UFhFX09QRkxBR1NfUkVDRUlWRV9GSUxURVJfRklMVEVSRURfTVVMVElDQVNUOw0KPiArICAgICAg aWYgKENwYiAhPSBOVUxMKSB7DQo+ICsgICAgICAgIE5pYy0+VXNiRXRoLT5TZXRVc2JFdGhNY2Fz dEZpbHRlciAoTmljLT5Vc2JFdGgsIE5pYy0+TWNhc3RDb3VudCwNCj4gTWNhc3RMaXN0KTsNCj4g KyAgICAgIH0NCj4gKw0KPiArICAgICAgTmljLT5Vc2JFdGgtPlNldFVzYkV0aFBhY2tldEZpbHRl ciAoTmljLT5Vc2JFdGgsIE5pYy0+UnhGaWx0ZXIpOw0KPiArICAgICAgRnJlZVBvb2wgKE1jYXN0 TGlzdCk7DQo+ICsgICAgfQ0KPiArICB9DQo+ICsNCj4gKyAgcmV0dXJuIFBYRV9TVEFUQ09ERV9T VUNDRVNTOw0KPiArfQ0KPiArDQo+ICsvKioNCj4gKyAgVGhpcyBjb21tYW5kIGlzIHVzZWQgdG8g Z2V0IGN1cnJlbnQgc3RhdGlvbiBhbmQgYnJvYWRjYXN0IE1BQyBhZGRyZXNzZXMNCj4gKyAgYW5k LCBpZiBzdXBwb3J0ZWQsIHRvIGNoYW5nZSB0aGUgY3VycmVudCBzdGF0aW9uIE1BQyBhZGRyZXNz Lg0KPiArDQo+ICsgIEBwYXJhbVtpbl0gIENkYiAgQSBwb2ludGVyIHRvIHRoZSBjb21tYW5kIGRl c2NyaXB0b3IgYmxvY2suDQo+ICsgIEBwYXJhbVtpbl0gIE5pYyAgQSBwb2ludGVyIHRvIHRoZSBO ZXR3b3JrIGludGVyZmFjZSBjb250cm9sbGVyIGRhdGEuDQo+ICsNCj4gKyoqLw0KPiArVk9JRA0K PiArVW5kaVN0YXRpb25BZGRyZXNzICgNCj4gKyAgSU4gIFBYRV9DREIgICAqQ2RiLA0KPiArICBJ TiAgTklDX0RBVEEgICpOaWMNCj4gKyAgKQ0KPiArew0KPiArICBQWEVfQ1BCX1NUQVRJT05fQURE UkVTUyAgKkNwYjsNCj4gKyAgUFhFX0RCX1NUQVRJT05fQUREUkVTUyAgICpEYjsNCj4gKyAgVUlO VDE2ICAgICAgICAgICAgICAgICAgIEluZGV4Ow0KPiArICBFRklfU1RBVFVTICAgICAgICAgICAg ICAgU3RhdHVzOw0KPiArDQo+ICsgIGlmICgoQ2RiLT5PcENvZGUgIT0gUFhFX09QQ09ERV9TVEFU SU9OX0FERFJFU1MpIHx8DQo+ICsgICAgICAoQ2RiLT5TdGF0Q29kZSAhPSBQWEVfU1RBVENPREVf SU5JVElBTElaRSkgfHwNCj4gKyAgICAgIChDZGItPlN0YXRGbGFncyAhPSBQWEVfU1RBVEZMQUdT X0lOSVRJQUxJWkUpIHx8DQo+ICsgICAgICAoQ2RiLT5JRm51bSA+PSAoZ1B4ZS0+SUZjbnQgfCBn UHhlLT5JRmNudEV4dCA8PCA4KSkgfHwNCj4gKyAgICAgIChDZGItPkRCc2l6ZSAhPSBzaXplb2Yg KFBYRV9EQl9TVEFUSU9OX0FERFJFU1MpKSkNCj4gKyAgew0KPiArICAgIENkYi0+U3RhdEZsYWdz ID0gUFhFX1NUQVRGTEFHU19DT01NQU5EX0ZBSUxFRDsNCj4gKyAgICBDZGItPlN0YXRDb2RlICA9 IFBYRV9TVEFUQ09ERV9JTlZBTElEX0NEQjsNCj4gKyAgICByZXR1cm47DQo+ICsgIH0gZWxzZSB7 DQo+ICsgICAgQ2RiLT5TdGF0RmxhZ3MgPSBQWEVfU1RBVEZMQUdTX0NPTU1BTkRfQ09NUExFVEU7 DQo+ICsgICAgQ2RiLT5TdGF0Q29kZSAgPSBQWEVfU1RBVENPREVfU1VDQ0VTUzsNCj4gKyAgfQ0K PiArDQo+ICsgIGlmIChOaWMtPlN0YXRlICE9IFBYRV9TVEFURkxBR1NfR0VUX1NUQVRFX0lOSVRJ QUxJWkVEKSB7DQo+ICsgICAgQ2RiLT5TdGF0Q29kZSAgPSBQWEVfU1RBVENPREVfTk9UX0lOSVRJ QUxJWkVEOw0KPiArICAgIENkYi0+U3RhdEZsYWdzID0gUFhFX1NUQVRGTEFHU19DT01NQU5EX0ZB SUxFRDsNCj4gKyAgICByZXR1cm47DQo+ICsgIH0NCj4gKw0KPiArICBpZiAoQ2RiLT5PcEZsYWdz ID09IFBYRV9PUEZMQUdTX1NUQVRJT05fQUREUkVTU19SRVNFVCkgew0KPiArICAgIGlmIChDb21w YXJlTWVtICgmTmljLT5DdXJyZW50Tm9kZUFkZHJlc3NbMF0sICZOaWMtDQo+ID5QZXJtTm9kZUFk ZHJlc3NbMF0sIFBYRV9NQUNfTEVOR1RIKSAhPSAwKSB7DQo+ICsgICAgICBmb3IgKEluZGV4ID0g MDsgSW5kZXggPCBQWEVfTUFDX0xFTkdUSDsgSW5kZXgrKykgew0KPiArICAgICAgICBOaWMtPkN1 cnJlbnROb2RlQWRkcmVzc1tJbmRleF0gPSBOaWMtPlBlcm1Ob2RlQWRkcmVzc1tJbmRleF07DQo+ ICsgICAgICB9DQo+ICsgICAgfQ0KPiArICB9DQo+ICsNCj4gKyAgaWYgKENkYi0+Q1BCYWRkciAh PSAwKSB7DQo+ICsgICAgQ3BiID0gKFBYRV9DUEJfU1RBVElPTl9BRERSRVNTICopKFVJTlROKUNk Yi0+Q1BCYWRkcjsNCj4gKyAgICBmb3IgKEluZGV4ID0gMDsgSW5kZXggPCBQWEVfTUFDX0xFTkdU SDsgSW5kZXgrKykgew0KPiArICAgICAgTmljLT5DdXJyZW50Tm9kZUFkZHJlc3NbSW5kZXhdID0g Q3BiLT5TdGF0aW9uQWRkcltJbmRleF07DQo+ICsgICAgfQ0KPiArICB9DQo+ICsNCj4gKyAgaWYg KENkYi0+REJhZGRyICE9IDApIHsNCj4gKyAgICBEYiA9IChQWEVfREJfU1RBVElPTl9BRERSRVNT ICopKFVJTlROKUNkYi0+REJhZGRyOw0KPiArICAgIGZvciAoSW5kZXggPSAwOyBJbmRleCA8IFBY RV9NQUNfTEVOR1RIOyBJbmRleCsrKSB7DQo+ICsgICAgICBEYi0+U3RhdGlvbkFkZHJbSW5kZXhd ICAgPSBOaWMtPkN1cnJlbnROb2RlQWRkcmVzc1tJbmRleF07DQo+ICsgICAgICBEYi0+QnJvYWRj YXN0QWRkcltJbmRleF0gPSBOaWMtPkJyb2FkY2FzdE5vZGVBZGRyZXNzW0luZGV4XTsNCj4gKyAg ICAgIERiLT5QZXJtYW5lbnRBZGRyW0luZGV4XSA9IE5pYy0+UGVybU5vZGVBZGRyZXNzW0luZGV4 XTsNCj4gKyAgICB9DQo+ICsgIH0NCj4gKw0KPiArICBpZiAoTmljLT5Vc2JFdGgtPlVzYkV0aFVu ZGkuVXNiRXRoVW5kaVN0YXRpb25BZGRyZXNzICE9IE5VTEwpIHsNCj4gKyAgICBTdGF0dXMgPSBO aWMtPlVzYkV0aC0+VXNiRXRoVW5kaS5Vc2JFdGhVbmRpU3RhdGlvbkFkZHJlc3MgKENkYiwgTmlj KTsNCj4gKyAgICBpZiAoRUZJX0VSUk9SIChTdGF0dXMpKSB7DQo+ICsgICAgICBDZGItPlN0YXRG bGFncyA9IFBYRV9TVEFURkxBR1NfQ09NTUFORF9GQUlMRUQ7DQo+ICsgICAgfQ0KPiArICB9DQo+ ICt9DQo+ICsNCj4gKy8qKg0KPiArICBUaGlzIGNvbW1hbmQgaXMgdXNlZCB0byByZWFkIGFuZCBj bGVhciB0aGUgTklDIHRyYWZmaWMgc3RhdGlzdGljcy4NCj4gKw0KPiArICBAcGFyYW1baW5dICBD ZGIgIEEgcG9pbnRlciB0byB0aGUgY29tbWFuZCBkZXNjcmlwdG9yIGJsb2NrLg0KPiArICBAcGFy YW1baW5dICBOaWMgIEEgcG9pbnRlciB0byB0aGUgTmV0d29yayBpbnRlcmZhY2UgY29udHJvbGxl ciBkYXRhLg0KPiArDQo+ICsqKi8NCj4gK1ZPSUQNCj4gK1VuZGlTdGF0aXN0aWNzICgNCj4gKyAg SU4gIFBYRV9DREIgICAqQ2RiLA0KPiArICBJTiAgTklDX0RBVEEgICpOaWMNCj4gKyAgKQ0KPiAr ew0KPiArICBFRklfU1RBVFVTICBTdGF0dXM7DQo+ICsNCj4gKyAgaWYgKChDZGItPk9wQ29kZSAh PSBQWEVfT1BDT0RFX1NUQVRJU1RJQ1MpIHx8DQo+ICsgICAgICAoQ2RiLT5TdGF0Q29kZSAhPSBQ WEVfU1RBVENPREVfSU5JVElBTElaRSkgfHwNCj4gKyAgICAgIChDZGItPlN0YXRGbGFncyAhPSBQ WEVfU1RBVEZMQUdTX0lOSVRJQUxJWkUpIHx8DQo+ICsgICAgICAoQ2RiLT5JRm51bSA+PSAoZ1B4 ZS0+SUZjbnQgfCBnUHhlLT5JRmNudEV4dCA8PCA4KSkgfHwNCj4gKyAgICAgIChDZGItPkNQQnNp emUgIT0gUFhFX0NQQlNJWkVfTk9UX1VTRUQpIHx8DQo+ICsgICAgICAoQ2RiLT5DUEJhZGRyICE9 IFBYRV9DUEJBRERSX05PVF9VU0VEKSkNCj4gKyAgew0KPiArICAgIENkYi0+U3RhdEZsYWdzID0g UFhFX1NUQVRGTEFHU19DT01NQU5EX0ZBSUxFRDsNCj4gKyAgICBDZGItPlN0YXRDb2RlICA9IFBY RV9TVEFUQ09ERV9JTlZBTElEX0NEQjsNCj4gKyAgICByZXR1cm47DQo+ICsgIH0gZWxzZSB7DQo+ ICsgICAgQ2RiLT5TdGF0RmxhZ3MgPSBQWEVfU1RBVEZMQUdTX0NPTU1BTkRfQ09NUExFVEU7DQo+ ICsgIH0NCj4gKw0KPiArICBpZiAoTmljLT5TdGF0ZSAhPSBQWEVfU1RBVEZMQUdTX0dFVF9TVEFU RV9JTklUSUFMSVpFRCkgew0KPiArICAgIENkYi0+U3RhdENvZGUgID0gUFhFX1NUQVRDT0RFX05P VF9JTklUSUFMSVpFRDsNCj4gKyAgICBDZGItPlN0YXRGbGFncyA9IFBYRV9TVEFURkxBR1NfQ09N TUFORF9GQUlMRUQ7DQo+ICsgICAgcmV0dXJuOw0KPiArICB9DQo+ICsNCj4gKyAgaWYgKChDZGIt Pk9wRmxhZ3MgIT0gUFhFX09QRkxBR1NfU1RBVElTVElDU19SRVNFVCkgJiYNCj4gKyAgICAgIChD ZGItPk9wRmxhZ3MgIT0gUFhFX09QRkxBR1NfU1RBVElTVElDU19SRUFEKSkNCj4gKyAgew0KPiAr ICAgIENkYi0+U3RhdEZsYWdzID0gUFhFX1NUQVRGTEFHU19DT01NQU5EX0ZBSUxFRDsNCj4gKyAg ICBDZGItPlN0YXRDb2RlICA9IFBYRV9TVEFUQ09ERV9JTlZBTElEX0NEQjsNCj4gKyAgICByZXR1 cm47DQo+ICsgIH0NCj4gKw0KPiArICBDZGItPlN0YXRDb2RlID0gU3RhdGlzdGljcyAoTmljLCBD ZGItPkRCYWRkciwgQ2RiLT5EQnNpemUpOw0KPiArDQo+ICsgIGlmIChOaWMtPlVzYkV0aC0+VXNi RXRoVW5kaS5Vc2JFdGhVbmRpU3RhdGlzdGljcyAhPSBOVUxMKSB7DQo+ICsgICAgU3RhdHVzID0g TmljLT5Vc2JFdGgtPlVzYkV0aFVuZGkuVXNiRXRoVW5kaVN0YXRpc3RpY3MgKENkYiwgTmljKTsN Cj4gKyAgICBpZiAoRUZJX0VSUk9SIChTdGF0dXMpKSB7DQo+ICsgICAgICBDZGItPlN0YXRGbGFn cyA9IFBYRV9TVEFURkxBR1NfQ09NTUFORF9GQUlMRUQ7DQo+ICsgICAgfQ0KPiArICB9DQo+ICt9 DQo+ICsNCj4gKy8qKg0KPiArICBSZXR1cm4gZGF0YSBmb3IgREIgZGF0YS4NCj4gKw0KPiArICBA cGFyYW1baW5dICBOaWMgICAgICBBIHBvaW50ZXIgdG8gdGhlIE5ldHdvcmsgaW50ZXJmYWNlIGNv bnRyb2xsZXIgZGF0YS4NCj4gKyAgQHBhcmFtW2luXSAgRGJBZGRyICAgRGF0YSBCbG9jayBBZGRy ZXNzLg0KPiArICBAcGFyYW1baW5dICBEYlNpemUgICBEYXRhIEJsb2NrIFNpemUuDQo+ICsNCj4g KyoqLw0KPiArVUlOVDE2DQo+ICtTdGF0aXN0aWNzICgNCj4gKyAgSU4gTklDX0RBVEEgICpOaWMs DQo+ICsgIElOIFVJTlQ2NCAgICBEYkFkZHIsDQo+ICsgIElOIFVJTlQxNiAgICBEYlNpemUNCj4g KyAgKQ0KPiArew0KPiArICBQWEVfREJfU1RBVElTVElDUyAgKkRiU3RhdGlzdGljOw0KPiArICBF RklfU1RBVFVTICAgICAgICAgU3RhdHVzOw0KPiArDQo+ICsgIERiU3RhdGlzdGljID0gKFBYRV9E Ql9TVEFUSVNUSUNTICopKFVJTlROKURiQWRkcjsNCj4gKw0KPiArICBpZiAoRGJTaXplID09IDAp IHsNCj4gKyAgICByZXR1cm4gUFhFX1NUQVRDT0RFX1NVQ0NFU1M7DQo+ICsgIH0NCj4gKw0KPiAr ICBEYlN0YXRpc3RpYy0+U3VwcG9ydGVkICA9IDB4ODAyOw0KPiArICBEYlN0YXRpc3RpYy0+RGF0 YVsweDAxXSA9IE5pYy0+UnhGcmFtZTsNCj4gKyAgRGJTdGF0aXN0aWMtPkRhdGFbMHgwQl0gPSBO aWMtPlR4RnJhbWU7DQo+ICsNCj4gKyAgaWYgKE5pYy0+VXNiRXRoLT5Vc2JFdGhTdGF0aXN0aWNz ICE9IE5VTEwpIHsNCj4gKyAgICBTdGF0dXMgPSBOaWMtPlVzYkV0aC0+VXNiRXRoU3RhdGlzdGlj cyAoTmljLCBEYkFkZHIsIERiU2l6ZSk7DQo+ICsgICAgaWYgKEVGSV9FUlJPUiAoU3RhdHVzKSkg ew0KPiArICAgICAgcmV0dXJuIFBYRV9TVEFURkxBR1NfQ09NTUFORF9GQUlMRUQ7DQo+ICsgICAg fQ0KPiArICB9DQo+ICsNCj4gKyAgcmV0dXJuIFBYRV9TVEFUQ09ERV9TVUNDRVNTOw0KPiArfQ0K PiArDQo+ICsvKioNCj4gKyAgVHJhbnNsYXRlIGEgbXVsdGljYXN0IElQdjQgb3IgSVB2NiBhZGRy ZXNzIHRvIGEgbXVsdGljYXN0IE1BQyBhZGRyZXNzLg0KPiArDQo+ICsgIEBwYXJhbVtpbiwgb3V0 XSBDZGIgIEEgcG9pbnRlciB0byB0aGUgY29tbWFuZCBkZXNjcmlwdG9yIGJsb2NrLg0KPiArICBA cGFyYW1baW5dICAgICAgTmljICBBIHBvaW50ZXIgdG8gdGhlIE5ldHdvcmsgaW50ZXJmYWNlIGNv bnRyb2xsZXIgZGF0YS4NCj4gKw0KPiArKiovDQo+ICtWT0lEDQo+ICtVbmRpTWNhc3RJcDJNYWMg KA0KPiArICBJTiBPVVQgIFBYRV9DREIgICAqQ2RiLA0KPiArICBJTiAgICAgIE5JQ19EQVRBICAq TmljDQo+ICsgICkNCj4gK3sNCj4gKyAgUFhFX0NQQl9NQ0FTVF9JUF9UT19NQUMgICpDcGI7DQo+ ICsgIFBYRV9EQl9NQ0FTVF9JUF9UT19NQUMgICAqRGI7DQo+ICsgIFVJTlQ4ICAgICAgICAgICAg ICAgICAgICAqVG1wOw0KPiArICBFRklfU1RBVFVTICAgICAgICAgICAgICAgU3RhdHVzOw0KPiAr DQo+ICsgIGlmICgoQ2RiLT5PcENvZGUgIT0gUFhFX09QQ09ERV9NQ0FTVF9JUF9UT19NQUMpIHx8 DQo+ICsgICAgICAoQ2RiLT5TdGF0Q29kZSAhPSBQWEVfU1RBVENPREVfSU5JVElBTElaRSkgfHwN Cj4gKyAgICAgIChDZGItPlN0YXRGbGFncyAhPSBQWEVfU1RBVEZMQUdTX0lOSVRJQUxJWkUpIHx8 DQo+ICsgICAgICAoQ2RiLT5JRm51bSA+PSAoZ1B4ZS0+SUZjbnQgfCBnUHhlLT5JRmNudEV4dCA8 PCA4KSkgfHwNCj4gKyAgICAgIChDZGItPkNQQnNpemUgIT0gc2l6ZW9mIChQWEVfQ1BCX01DQVNU X0lQX1RPX01BQykpIHx8DQo+ICsgICAgICAoQ2RiLT5EQnNpemUgIT0gc2l6ZW9mIChQWEVfREJf TUNBU1RfSVBfVE9fTUFDKSkpDQo+ICsgIHsNCj4gKyAgICBDZGItPlN0YXRGbGFncyA9IFBYRV9T VEFURkxBR1NfQ09NTUFORF9GQUlMRUQ7DQo+ICsgICAgQ2RiLT5TdGF0Q29kZSAgPSBQWEVfU1RB VENPREVfSU5WQUxJRF9DREI7DQo+ICsgICAgcmV0dXJuOw0KPiArICB9IGVsc2Ugew0KPiArICAg IENkYi0+U3RhdEZsYWdzID0gUFhFX1NUQVRGTEFHU19DT01NQU5EX0NPTVBMRVRFOw0KPiArICAg IENkYi0+U3RhdENvZGUgID0gUFhFX1NUQVRDT0RFX1NVQ0NFU1M7DQo+ICsgIH0NCj4gKw0KPiAr ICBpZiAoTmljLT5TdGF0ZSAhPSBQWEVfU1RBVEZMQUdTX0dFVF9TVEFURV9JTklUSUFMSVpFRCkg ew0KPiArICAgIENkYi0+U3RhdENvZGUgID0gUFhFX1NUQVRDT0RFX05PVF9JTklUSUFMSVpFRDsN Cj4gKyAgICBDZGItPlN0YXRGbGFncyA9IFBYRV9TVEFURkxBR1NfQ09NTUFORF9GQUlMRUQ7DQo+ ICsgICAgcmV0dXJuOw0KPiArICB9DQo+ICsNCj4gKyAgQ3BiID0gKFBYRV9DUEJfTUNBU1RfSVBf VE9fTUFDICopKFVJTlROKUNkYi0+Q1BCYWRkcjsNCj4gKyAgRGIgID0gKFBYRV9EQl9NQ0FTVF9J UF9UT19NQUMgKikoVUlOVE4pQ2RiLT5EQmFkZHI7DQo+ICsNCj4gKyAgaWYgKChDZGItPk9wRmxh Z3MgJiBQWEVfT1BGTEFHU19NQ0FTVF9JUFY2X1RPX01BQykgIT0gMCkgew0KPiArICAgIENkYi0+ U3RhdEZsYWdzID0gUFhFX1NUQVRGTEFHU19DT01NQU5EX0ZBSUxFRDsNCj4gKyAgICBDZGItPlN0 YXRDb2RlICA9IFBYRV9TVEFUQ09ERV9VTlNVUFBPUlRFRDsNCj4gKyAgICByZXR1cm47DQo+ICsg IH0NCj4gKw0KPiArICBUbXAgPSAoVUlOVDggKikoJkNwYi0+SVAuSVB2NCk7DQo+ICsNCj4gKyAg aWYgKChUbXBbMF0gJiAweEYwKSAhPSAweEUwKSB7DQo+ICsgICAgQ2RiLT5TdGF0RmxhZ3MgPSBQ WEVfU1RBVEZMQUdTX0NPTU1BTkRfRkFJTEVEOw0KPiArICAgIENkYi0+U3RhdENvZGUgID0gUFhF X1NUQVRDT0RFX0lOVkFMSURfQ1BCOw0KPiArICB9DQo+ICsNCj4gKyAgRGItPk1BQ1swXSA9IDB4 MDE7DQo+ICsgIERiLT5NQUNbMV0gPSAweDAwOw0KPiArICBEYi0+TUFDWzJdID0gMHg1RTsNCj4g KyAgRGItPk1BQ1szXSA9IFRtcFsxXSAmIDB4N0Y7DQo+ICsgIERiLT5NQUNbNF0gPSBUbXBbMl07 DQo+ICsgIERiLT5NQUNbNV0gPSBUbXBbM107DQo+ICsNCj4gKyAgaWYgKE5pYy0+VXNiRXRoLT5V c2JFdGhVbmRpLlVzYkV0aFVuZGlNY2FzdElwMk1hYyAhPSBOVUxMKSB7DQo+ICsgICAgU3RhdHVz ID0gTmljLT5Vc2JFdGgtPlVzYkV0aFVuZGkuVXNiRXRoVW5kaU1jYXN0SXAyTWFjIChDZGIsIE5p Yyk7DQo+ICsgICAgaWYgKEVGSV9FUlJPUiAoU3RhdHVzKSkgew0KPiArICAgICAgQ2RiLT5TdGF0 RmxhZ3MgPSBQWEVfU1RBVEZMQUdTX0NPTU1BTkRfRkFJTEVEOw0KPiArICAgIH0NCj4gKyAgfQ0K PiArfQ0KPiArDQo+ICsvKioNCj4gKyAgVGhpcyBjb21tYW5kIGlzIHVzZWQgdG8gcmVhZCBhbmQg d3JpdGUgKGlmIHN1cHBvcnRlZCBieSBOSUMgSC9XKQ0KPiArICBub252b2xhdGlsZSBzdG9yYWdl IG9uIHRoZSBOSUMuDQo+ICsNCj4gKyAgQHBhcmFtW2luXSAgQ2RiICBBIHBvaW50ZXIgdG8gdGhl IGNvbW1hbmQgZGVzY3JpcHRvciBibG9jay4NCj4gKyAgQHBhcmFtW2luXSAgTmljICBBIHBvaW50 ZXIgdG8gdGhlIE5ldHdvcmsgaW50ZXJmYWNlIGNvbnRyb2xsZXIgZGF0YS4NCj4gKw0KPiArKiov DQo+ICtWT0lEDQo+ICtVbmRpTnZEYXRhICgNCj4gKyAgSU4gIFBYRV9DREIgICAqQ2RiLA0KPiAr ICBJTiAgTklDX0RBVEEgICpOaWMNCj4gKyAgKQ0KPiArew0KPiArICBFRklfU1RBVFVTICBTdGF0 dXM7DQo+ICsNCj4gKyAgQ2RiLT5TdGF0Q29kZSA9IFBYRV9TVEFUQ09ERV9VTlNVUFBPUlRFRDsN Cj4gKyAgaWYgKE5pYy0+VXNiRXRoLT5Vc2JFdGhVbmRpLlVzYkV0aFVuZGlOdkRhdGEgIT0gTlVM TCkgew0KPiArICAgIFN0YXR1cyA9IE5pYy0+VXNiRXRoLT5Vc2JFdGhVbmRpLlVzYkV0aFVuZGlO dkRhdGEgKENkYiwgTmljKTsNCj4gKyAgICBpZiAoRUZJX0VSUk9SIChTdGF0dXMpKSB7DQo+ICsg ICAgICBDZGItPlN0YXRGbGFncyA9IFBYRV9TVEFURkxBR1NfQ09NTUFORF9GQUlMRUQ7DQo+ICsg ICAgfSBlbHNlIHsNCj4gKyAgICAgIENkYi0+U3RhdEZsYWdzID0gUFhFX1NUQVRGTEFHU19DT01N QU5EX0NPTVBMRVRFOw0KPiArICAgICAgQ2RiLT5TdGF0Q29kZSAgPSBQWEVfU1RBVENPREVfU1VD Q0VTUzsNCj4gKyAgICB9DQo+ICsgIH0NCj4gK30NCj4gKw0KPiArLyoqDQo+ICsgIFRoaXMgY29t bWFuZCByZXR1cm5zIHRoZSBjdXJyZW50IGludGVycnVwdCBzdGF0dXMgYW5kL29yIHRoZQ0KPiAr ICB0cmFuc21pdHRlZCBidWZmZXIgYWRkcmVzc2VzIGFuZCB0aGUgY3VycmVudCBtZWRpYSBzdGF0 dXMuDQo+ICsNCj4gKyAgQHBhcmFtW2luXSAgQ2RiICBBIHBvaW50ZXIgdG8gdGhlIGNvbW1hbmQg ZGVzY3JpcHRvciBibG9jay4NCj4gKyAgQHBhcmFtW2luXSAgTmljICBBIHBvaW50ZXIgdG8gdGhl IE5ldHdvcmsgaW50ZXJmYWNlIGNvbnRyb2xsZXIgZGF0YS4NCj4gKw0KPiArKiovDQo+ICtWT0lE DQo+ICtVbmRpR2V0U3RhdHVzICgNCj4gKyAgSU4gIFBYRV9DREIgICAqQ2RiLA0KPiArICBJTiAg TklDX0RBVEEgICpOaWMNCj4gKyAgKQ0KPiArew0KPiArICBQWEVfREJfR0VUX1NUQVRVUyAgKkRi Ow0KPiArICBQWEVfREJfR0VUX1NUQVRVUyAgVG1wR2V0U3RhdHVzOw0KPiArICBVSU5UMTYgICAg ICAgICAgICAgTnVtRW50cmllczsNCj4gKyAgVUlOVE4gICAgICAgICAgICAgIEluZGV4Ow0KPiAr ICBFRklfU1RBVFVTICAgICAgICAgU3RhdHVzOw0KPiArDQo+ICsgIGlmICgoQ2RiLT5PcENvZGUg IT0gUFhFX09QQ09ERV9HRVRfU1RBVFVTKSB8fA0KPiArICAgICAgKENkYi0+U3RhdENvZGUgIT0g UFhFX1NUQVRDT0RFX0lOSVRJQUxJWkUpIHx8DQo+ICsgICAgICAoQ2RiLT5TdGF0RmxhZ3MgIT0g UFhFX1NUQVRGTEFHU19JTklUSUFMSVpFKSB8fA0KPiArICAgICAgKENkYi0+SUZudW0gPj0gKGdQ eGUtPklGY250IHwgZ1B4ZS0+SUZjbnRFeHQgPDwgOCkpIHx8DQo+ICsgICAgICAoQ2RiLT5DUEJz aXplICE9IFBYRV9DUEJTSVpFX05PVF9VU0VEKSB8fA0KPiArICAgICAgKENkYi0+Q1BCYWRkciAh PSBQWEVfQ1BCQUREUl9OT1RfVVNFRCkpDQo+ICsgIHsNCj4gKyAgICBDZGItPlN0YXRGbGFncyA9 IFBYRV9TVEFURkxBR1NfQ09NTUFORF9GQUlMRUQ7DQo+ICsgICAgQ2RiLT5TdGF0Q29kZSAgPSBQ WEVfU1RBVENPREVfSU5WQUxJRF9DREI7DQo+ICsgICAgcmV0dXJuOw0KPiArICB9IGVsc2Ugew0K PiArICAgIENkYi0+U3RhdEZsYWdzID0gUFhFX1NUQVRGTEFHU19DT01NQU5EX0NPTVBMRVRFOw0K PiArICAgIENkYi0+U3RhdENvZGUgID0gUFhFX1NUQVRDT0RFX1NVQ0NFU1M7DQo+ICsgIH0NCj4g Kw0KPiArICBpZiAoTmljLT5TdGF0ZSAhPSBQWEVfU1RBVEZMQUdTX0dFVF9TVEFURV9JTklUSUFM SVpFRCkgew0KPiArICAgIENkYi0+U3RhdENvZGUgID0gUFhFX1NUQVRDT0RFX05PVF9JTklUSUFM SVpFRDsNCj4gKyAgICBDZGItPlN0YXRGbGFncyA9IFBYRV9TVEFURkxBR1NfQ09NTUFORF9GQUlM RUQ7DQo+ICsgICAgcmV0dXJuOw0KPiArICB9DQo+ICsNCj4gKyAgVG1wR2V0U3RhdHVzLlJ4RnJh bWVMZW4gPSAwOw0KPiArICBUbXBHZXRTdGF0dXMucmVzZXJ2ZWQgICA9IDA7DQo+ICsgIERiICAg ICAgICAgICAgICAgICAgICAgID0gKFBYRV9EQl9HRVRfU1RBVFVTICopKFVJTlROKUNkYi0+REJh ZGRyOw0KPiArDQo+ICsgIGlmICgoQ2RiLT5EQnNpemUgPiAwKSAmJiAoQ2RiLT5EQnNpemUgPCBz aXplb2YgKFVJTlQzMikgKiAyKSkgew0KPiArICAgIENvcHlNZW0gKERiLCAmVG1wR2V0U3RhdHVz LCBDZGItPkRCc2l6ZSk7DQo+ICsgIH0gZWxzZSB7DQo+ICsgICAgQ29weU1lbSAoRGIsICZUbXBH ZXRTdGF0dXMsIHNpemVvZiAoVUlOVDMyKSAqIDIpOw0KPiArICB9DQo+ICsNCj4gKyAgaWYgKChD ZGItPk9wRmxhZ3MgJiBQWEVfT1BGTEFHU19HRVRfVFJBTlNNSVRURURfQlVGRkVSUykgIT0gMCkg ew0KPiArICAgIGlmIChDZGItPkRCc2l6ZSA9PSAwKSB7DQo+ICsgICAgICBDZGItPlN0YXRGbGFn cyA9IFBYRV9TVEFURkxBR1NfQ09NTUFORF9GQUlMRUQ7DQo+ICsgICAgICBDZGItPlN0YXRDb2Rl ICA9IFBYRV9TVEFUQ09ERV9JTlZBTElEX0NEQjsNCj4gKyAgICAgIHJldHVybjsNCj4gKyAgICB9 DQo+ICsNCj4gKyAgICBOdW1FbnRyaWVzICA9IENkYi0+REJzaXplIC0gc2l6ZW9mIChVSU5UNjQp Ow0KPiArICAgIENkYi0+REJzaXplID0gc2l6ZW9mIChVSU5UMzIpICogMjsNCj4gKw0KPiArICAg IGZvciAoSW5kZXggPSAwOyBOdW1FbnRyaWVzID49IHNpemVvZiAoVUlOVDY0KTsgSW5kZXgrKywg TnVtRW50cmllcyAtPSBzaXplb2YNCj4gKFVJTlQ2NCkpIHsNCj4gKyAgICAgIGlmIChOaWMtPlR4 QnVmZmVyQ291bnQgPiAwKSB7DQo+ICsgICAgICAgIE5pYy0+VHhCdWZmZXJDb3VudC0tOw0KPiAr ICAgICAgICBEYi0+VHhCdWZmZXJbSW5kZXhdID0gTmljLT5NZWRpYUhlYWRlcltOaWMtPlR4QnVm ZmVyQ291bnRdOw0KPiArICAgICAgfQ0KPiArICAgIH0NCj4gKyAgfQ0KPiArDQo+ICsgIGlmICgo Q2RiLT5PcEZsYWdzICYgUFhFX09QRkxBR1NfR0VUX0lOVEVSUlVQVF9TVEFUVVMpICE9IDApIHsN Cj4gKyAgICBpZiAoTmljLT5SZWNlaXZlU3RhdHVzICE9IDApIHsNCj4gKyAgICAgIENkYi0+U3Rh dEZsYWdzIHw9IFBYRV9TVEFURkxBR1NfR0VUX1NUQVRVU19SRUNFSVZFOw0KPiArICAgIH0NCj4g KyAgfQ0KPiArDQo+ICsgIGlmICgoTmljLT5SZXF1ZXN0LlJlcXVlc3QgPT0gVVNCX0NEQ19ORVRX T1JLX0NPTk5FQ1RJT04pICYmIChOaWMtDQo+ID5SZXF1ZXN0LlZhbHVlID09IE5FVFdPUktfRElT Q09OTkVDVCkpIHsNCj4gKyAgICBOaWMtPkNhYmxlRGV0ZWN0ID0gMDsNCj4gKyAgfSBlbHNlIGlm ICgoTmljLT5SZXF1ZXN0LlJlcXVlc3QgPT0gVVNCX0NEQ19ORVRXT1JLX0NPTk5FQ1RJT04pICYm DQo+IChOaWMtPlJlcXVlc3QuVmFsdWUgPT0gTkVUV09SS19DT05ORUNURUQpKSB7DQo+ICsgICAg TmljLT5DYWJsZURldGVjdCA9IDE7DQo+ICsgIH0NCj4gKw0KPiArICBpZiAoKENkYi0+T3BGbGFn cyAmIFBYRV9PUEZMQUdTX0dFVF9NRURJQV9TVEFUVVMpICE9IDApIHsNCj4gKyAgICBpZiAoTmlj LT5DYWJsZURldGVjdCA9PSAwKSB7DQo+ICsgICAgICBDZGItPlN0YXRGbGFncyB8PSBQWEVfU1RB VEZMQUdTX0dFVF9TVEFUVVNfTk9fTUVESUE7DQo+ICsgICAgfQ0KPiArICB9DQo+ICsNCj4gKyAg aWYgKE5pYy0+VXNiRXRoLT5Vc2JFdGhVbmRpLlVzYkV0aFVuZGlHZXRTdGF0dXMgIT0gTlVMTCkg ew0KPiArICAgIFN0YXR1cyA9IE5pYy0+VXNiRXRoLT5Vc2JFdGhVbmRpLlVzYkV0aFVuZGlHZXRT dGF0dXMgKENkYiwgTmljKTsNCj4gKyAgICBpZiAoRUZJX0VSUk9SIChTdGF0dXMpKSB7DQo+ICsg ICAgICBDZGItPlN0YXRGbGFncyA9IFBYRV9TVEFURkxBR1NfQ09NTUFORF9GQUlMRUQ7DQo+ICsg ICAgfQ0KPiArICB9DQo+ICt9DQo+ICsNCj4gKy8qKg0KPiArICBUaGlzIGNvbW1hbmQgaXMgdXNl ZCB0byBmaWxsIHRoZSBtZWRpYSBoZWFkZXIocykgaW4gdHJhbnNtaXQgcGFja2V0KHMpLg0KPiAr DQo+ICsgIEBwYXJhbVtpbl0gIENkYiAgQSBwb2ludGVyIHRvIHRoZSBjb21tYW5kIGRlc2NyaXB0 b3IgYmxvY2suDQo+ICsgIEBwYXJhbVtpbl0gIE5pYyAgQSBwb2ludGVyIHRvIHRoZSBOZXR3b3Jr IGludGVyZmFjZSBjb250cm9sbGVyIGRhdGEuDQo+ICsNCj4gKyoqLw0KPiArVk9JRA0KPiArVW5k aUZpbGxIZWFkZXIgKA0KPiArICBJTiAgUFhFX0NEQiAgICpDZGIsDQo+ICsgIElOICBOSUNfREFU QSAgKk5pYw0KPiArICApDQo+ICt7DQo+ICsgIFBYRV9DUEJfRklMTF9IRUFERVIgICAgICAgICAg ICAgKkNwYkZpbGxIZWFkZXI7DQo+ICsgIFBYRV9DUEJfRklMTF9IRUFERVJfRlJBR01FTlRFRCAg KkNwYkZpbGw7DQo+ICsgIEV0aGVybmV0SGVhZGVyICAgICAgICAgICAgICAgICAgKk1hY0hlYWRl cjsNCj4gKyAgVUlOVE4gICAgICAgICAgICAgICAgICAgICAgICAgICBJbmRleDsNCj4gKyAgRUZJ X1NUQVRVUyAgICAgICAgICAgICAgICAgICAgICBTdGF0dXM7DQo+ICsNCj4gKyAgaWYgKChDZGIt Pk9wQ29kZSAhPSBQWEVfT1BDT0RFX0ZJTExfSEVBREVSKSB8fA0KPiArICAgICAgKENkYi0+U3Rh dENvZGUgIT0gUFhFX1NUQVRDT0RFX0lOSVRJQUxJWkUpIHx8DQo+ICsgICAgICAoQ2RiLT5TdGF0 RmxhZ3MgIT0gUFhFX1NUQVRGTEFHU19JTklUSUFMSVpFKSB8fA0KPiArICAgICAgKENkYi0+SUZu dW0gPj0gKGdQeGUtPklGY250IHwgZ1B4ZS0+SUZjbnRFeHQgPDwgOCkpIHx8DQo+ICsgICAgICAo Q2RiLT5DUEJzaXplICE9IHNpemVvZiAoUFhFX0NQQl9GSUxMX0hFQURFUl9GUkFHTUVOVEVEKSkg fHwNCj4gKyAgICAgIChDZGItPkRCc2l6ZSAhPSBQWEVfREJTSVpFX05PVF9VU0VEKSB8fA0KPiAr ICAgICAgKENkYi0+REJhZGRyICE9IFBYRV9EQkFERFJfTk9UX1VTRUQpKQ0KPiArICB7DQo+ICsg ICAgQ2RiLT5TdGF0RmxhZ3MgPSBQWEVfU1RBVEZMQUdTX0NPTU1BTkRfRkFJTEVEOw0KPiArICAg IENkYi0+U3RhdENvZGUgID0gUFhFX1NUQVRDT0RFX0lOVkFMSURfQ0RCOw0KPiArICAgIHJldHVy bjsNCj4gKyAgfSBlbHNlIHsNCj4gKyAgICBDZGItPlN0YXRGbGFncyA9IFBYRV9TVEFURkxBR1Nf Q09NTUFORF9DT01QTEVURTsNCj4gKyAgICBDZGItPlN0YXRDb2RlICA9IFBYRV9TVEFUQ09ERV9T VUNDRVNTOw0KPiArICB9DQo+ICsNCj4gKyAgaWYgKE5pYy0+U3RhdGUgIT0gUFhFX1NUQVRGTEFH U19HRVRfU1RBVEVfSU5JVElBTElaRUQpIHsNCj4gKyAgICBDZGItPlN0YXRDb2RlICA9IFBYRV9T VEFUQ09ERV9OT1RfSU5JVElBTElaRUQ7DQo+ICsgICAgQ2RiLT5TdGF0RmxhZ3MgPSBQWEVfU1RB VEZMQUdTX0NPTU1BTkRfRkFJTEVEOw0KPiArICAgIHJldHVybjsNCj4gKyAgfQ0KPiArDQo+ICsg IGlmIChDZGItPkNQQnNpemUgPT0gUFhFX0NQQlNJWkVfTk9UX1VTRUQpIHsNCj4gKyAgICBDZGIt PlN0YXRGbGFncyA9IFBYRV9TVEFURkxBR1NfQ09NTUFORF9GQUlMRUQ7DQo+ICsgICAgQ2RiLT5T dGF0Q29kZSAgPSBQWEVfU1RBVENPREVfSU5WQUxJRF9DREI7DQo+ICsgICAgcmV0dXJuOw0KPiAr ICB9DQo+ICsNCj4gKyAgaWYgKChDZGItPk9wRmxhZ3MgJiBQWEVfT1BGTEFHU19GSUxMX0hFQURF Ul9GUkFHTUVOVEVEKSAhPSAwKSB7DQo+ICsgICAgQ3BiRmlsbCA9IChQWEVfQ1BCX0ZJTExfSEVB REVSX0ZSQUdNRU5URUQgKikoVUlOVE4pQ2RiLT5DUEJhZGRyOw0KPiArDQo+ICsgICAgaWYgKChD cGJGaWxsLT5GcmFnQ250ID09IDApIHx8IChDcGJGaWxsLT5GcmFnRGVzY1swXS5GcmFnTGVuIDwN Cj4gUFhFX01BQ19IRUFERVJfTEVOX0VUSEVSKSkgew0KPiArICAgICAgQ2RiLT5TdGF0RmxhZ3Mg PSBQWEVfU1RBVEZMQUdTX0NPTU1BTkRfRkFJTEVEOw0KPiArICAgICAgQ2RiLT5TdGF0Q29kZSAg PSBQWEVfU1RBVENPREVfSU5WQUxJRF9DREI7DQo+ICsgICAgICByZXR1cm47DQo+ICsgICAgfQ0K PiArDQo+ICsgICAgTWFjSGVhZGVyICAgICAgICAgICA9IChFdGhlcm5ldEhlYWRlciAqKShVSU5U TilDcGJGaWxsLQ0KPiA+RnJhZ0Rlc2NbMF0uRnJhZ0FkZHI7DQo+ICsgICAgTWFjSGVhZGVyLT5Q cm90b2NvbCA9IENwYkZpbGwtPlByb3RvY29sOw0KPiArDQo+ICsgICAgZm9yIChJbmRleCA9IDA7 IEluZGV4IDwgUFhFX0hXQUREUl9MRU5fRVRIRVI7IEluZGV4KyspIHsNCj4gKyAgICAgIE1hY0hl YWRlci0+RGVzdEFkZHJbSW5kZXhdID0gQ3BiRmlsbC0+RGVzdEFkZHJbSW5kZXhdOw0KPiArICAg ICAgTWFjSGVhZGVyLT5TcmNBZGRyW0luZGV4XSAgPSBDcGJGaWxsLT5TcmNBZGRyW0luZGV4XTsN Cj4gKyAgICB9DQo+ICsgIH0gZWxzZSB7DQo+ICsgICAgQ3BiRmlsbEhlYWRlciA9IChQWEVfQ1BC X0ZJTExfSEVBREVSICopKFVJTlROKUNkYi0+Q1BCYWRkcjsNCj4gKw0KPiArICAgIE1hY0hlYWRl ciAgICAgICAgICAgPSAoRXRoZXJuZXRIZWFkZXIgKikoVUlOVE4pQ3BiRmlsbEhlYWRlci0NCj4g Pk1lZGlhSGVhZGVyOw0KPiArICAgIE1hY0hlYWRlci0+UHJvdG9jb2wgPSBDcGJGaWxsSGVhZGVy LT5Qcm90b2NvbDsNCj4gKw0KPiArICAgIGZvciAoSW5kZXggPSAwOyBJbmRleCA8IFBYRV9IV0FE RFJfTEVOX0VUSEVSOyBJbmRleCsrKSB7DQo+ICsgICAgICBNYWNIZWFkZXItPkRlc3RBZGRyW0lu ZGV4XSA9IENwYkZpbGxIZWFkZXItPkRlc3RBZGRyW0luZGV4XTsNCj4gKyAgICAgIE1hY0hlYWRl ci0+U3JjQWRkcltJbmRleF0gID0gQ3BiRmlsbEhlYWRlci0+U3JjQWRkcltJbmRleF07DQo+ICsg ICAgfQ0KPiArICB9DQo+ICsNCj4gKyAgaWYgKE5pYy0+VXNiRXRoLT5Vc2JFdGhVbmRpLlVzYkV0 aFVuZGlGaWxsSGVhZGVyICE9IE5VTEwpIHsNCj4gKyAgICBTdGF0dXMgPSBOaWMtPlVzYkV0aC0+ VXNiRXRoVW5kaS5Vc2JFdGhVbmRpRmlsbEhlYWRlciAoQ2RiLCBOaWMpOw0KPiArICAgIGlmIChF RklfRVJST1IgKFN0YXR1cykpIHsNCj4gKyAgICAgIENkYi0+U3RhdEZsYWdzID0gUFhFX1NUQVRG TEFHU19DT01NQU5EX0ZBSUxFRDsNCj4gKyAgICB9DQo+ICsgIH0NCj4gK30NCj4gKw0KPiArLyoq DQo+ICsgIFRoZSBUcmFuc21pdCBjb21tYW5kIGlzIHVzZWQgdG8gcGxhY2UgYSBwYWNrZXQgaW50 byB0aGUgdHJhbnNtaXQgcXVldWUuDQo+ICsNCj4gKyAgQHBhcmFtW2luXSAgQ2RiICBBIHBvaW50 ZXIgdG8gdGhlIGNvbW1hbmQgZGVzY3JpcHRvciBibG9jay4NCj4gKyAgQHBhcmFtW2luXSAgTmlj ICBBIHBvaW50ZXIgdG8gdGhlIE5ldHdvcmsgaW50ZXJmYWNlIGNvbnRyb2xsZXIgZGF0YS4NCj4g Kw0KPiArKiovDQo+ICtWT0lEDQo+ICtVbmRpVHJhbnNtaXQgKA0KPiArICBJTiAgUFhFX0NEQiAg ICpDZGIsDQo+ICsgIElOICBOSUNfREFUQSAgKk5pYw0KPiArICApDQo+ICt7DQo+ICsgIEVGSV9T VEFUVVMgIFN0YXR1czsNCj4gKw0KPiArICBpZiAoKENkYi0+T3BDb2RlICE9IFBYRV9PUENPREVf VFJBTlNNSVQpIHx8DQo+ICsgICAgICAoQ2RiLT5TdGF0Q29kZSAhPSBQWEVfU1RBVENPREVfSU5J VElBTElaRSkgfHwNCj4gKyAgICAgIChDZGItPlN0YXRGbGFncyAhPSBQWEVfU1RBVEZMQUdTX0lO SVRJQUxJWkUpIHx8DQo+ICsgICAgICAoQ2RiLT5JRm51bSA+PSAoZ1B4ZS0+SUZjbnQgfCBnUHhl LT5JRmNudEV4dCA8PCA4KSkgfHwNCj4gKyAgICAgIChDZGItPkNQQnNpemUgIT0gc2l6ZW9mIChQ WEVfQ1BCX1RSQU5TTUlUKSkgfHwNCj4gKyAgICAgIChDZGItPkRCc2l6ZSAhPSBQWEVfREJTSVpF X05PVF9VU0VEKSB8fA0KPiArICAgICAgKENkYi0+REJhZGRyICE9IFBYRV9EQkFERFJfTk9UX1VT RUQpKQ0KPiArICB7DQo+ICsgICAgQ2RiLT5TdGF0RmxhZ3MgPSBQWEVfU1RBVEZMQUdTX0NPTU1B TkRfRkFJTEVEOw0KPiArICAgIENkYi0+U3RhdENvZGUgID0gUFhFX1NUQVRDT0RFX0lOVkFMSURf Q0RCOw0KPiArICAgIHJldHVybjsNCj4gKyAgfSBlbHNlIHsNCj4gKyAgICBDZGItPlN0YXRGbGFn cyA9IFBYRV9TVEFURkxBR1NfQ09NTUFORF9DT01QTEVURTsNCj4gKyAgICBDZGItPlN0YXRDb2Rl ICA9IFBYRV9TVEFUQ09ERV9TVUNDRVNTOw0KPiArICB9DQo+ICsNCj4gKyAgaWYgKE5pYy0+U3Rh dGUgIT0gUFhFX1NUQVRGTEFHU19HRVRfU1RBVEVfSU5JVElBTElaRUQpIHsNCj4gKyAgICBDZGIt PlN0YXRGbGFncyA9IFBYRV9TVEFURkxBR1NfQ09NTUFORF9GQUlMRUQ7DQo+ICsgICAgQ2RiLT5T dGF0Q29kZSAgPSBQWEVfU1RBVENPREVfTk9UX0lOSVRJQUxJWkVEOw0KPiArICAgIHJldHVybjsN Cj4gKyAgfQ0KPiArDQo+ICsgIGlmIChDZGItPkNQQnNpemUgPT0gUFhFX0NQQlNJWkVfTk9UX1VT RUQpIHsNCj4gKyAgICBDZGItPlN0YXRGbGFncyA9IFBYRV9TVEFURkxBR1NfQ09NTUFORF9GQUlM RUQ7DQo+ICsgICAgQ2RiLT5TdGF0Q29kZSAgPSBQWEVfU1RBVENPREVfSU5WQUxJRF9DREI7DQo+ ICsgICAgcmV0dXJuOw0KPiArICB9DQo+ICsNCj4gKyAgaWYgKE5pYy0+VXNiRXRoLT5Vc2JFdGhV bmRpLlVzYkV0aFVuZGlUcmFuc21pdCAhPSBOVUxMKSB7DQo+ICsgICAgU3RhdHVzID0gTmljLT5V c2JFdGgtPlVzYkV0aFVuZGkuVXNiRXRoVW5kaVRyYW5zbWl0IChDZGIsIE5pYyk7DQo+ICsgICAg aWYgKEVGSV9FUlJPUiAoU3RhdHVzKSkgew0KPiArICAgICAgQ2RiLT5TdGF0RmxhZ3MgPSBQWEVf U1RBVEZMQUdTX0NPTU1BTkRfRkFJTEVEOw0KPiArICAgIH0NCj4gKw0KPiArICAgIHJldHVybjsN Cj4gKyAgfQ0KPiArDQo+ICsgIENkYi0+U3RhdENvZGUgPSBUcmFuc21pdCAoQ2RiLCBOaWMsIENk Yi0+Q1BCYWRkciwgQ2RiLT5PcEZsYWdzKTsNCj4gKw0KPiArICBpZiAoQ2RiLT5TdGF0Q29kZSAh PSBQWEVfU1RBVENPREVfU1VDQ0VTUykgew0KPiArICAgIENkYi0+U3RhdEZsYWdzID0gUFhFX1NU QVRGTEFHU19DT01NQU5EX0ZBSUxFRDsNCj4gKyAgfQ0KPiArfQ0KPiArDQo+ICsvKioNCj4gKyAg VXNlIFVTQiBFdGhlcm5ldCBQcm90b2NvbCBCdWxrIG91dCBjb21tYW5kIHRvIHRyYW5zbWl0IGRh dGEuDQo+ICsNCj4gKyAgQHBhcmFtW2luXSAgICAgIENkYiAgICAgIEEgcG9pbnRlciB0byB0aGUg Y29tbWFuZCBkZXNjcmlwdG9yIGJsb2NrLg0KPiArICBAcGFyYW1baW4sIG91dF0gTmljICAgICAg QSBwb2ludGVyIHRvIHRoZSBOZXR3b3JrIGludGVyZmFjZSBjb250cm9sbGVyIGRhdGEuDQo+ICsg IEBwYXJhbVtpbl0gICAgICBDcGJBZGRyICBDb21tYW5kIFBhcmFtZXRlciBCbG9jayBBZGRyZXNz Lg0KPiArICBAcGFyYW1baW5dICAgICAgT3BGbGFncyAgT3BlcmF0aW9uIEZsYWdzLg0KPiArDQo+ ICsqKi8NCj4gK1VJTlQxNg0KPiArVHJhbnNtaXQgKA0KPiArICBJTiAgICAgIFBYRV9DREIgICAq Q2RiLA0KPiArICBJTiBPVVQgIE5JQ19EQVRBICAqTmljLA0KPiArICBJTiAgICAgIFVJTlQ2NCAg ICBDcGJBZGRyLA0KPiArICBJTiAgICAgIFVJTlQxNiAgICBPcEZsYWdzDQo+ICsgICkNCj4gK3sN Cj4gKyAgRUZJX1NUQVRVUyAgICAgICAgU3RhdHVzOw0KPiArICBQWEVfQ1BCX1RSQU5TTUlUICAq Q3BiOw0KPiArICBVSU5UNjQgICAgICAgICAgICBCdWxrT3V0RGF0YTsNCj4gKyAgVUlOVE4gICAg ICAgICAgICAgRGF0YUxlbmd0aDsNCj4gKyAgVUlOVE4gICAgICAgICAgICAgVHJhbnNtaXRMZW5n dGg7DQo+ICsgIFVJTlROICAgICAgICAgICAgIE1hcDsNCj4gKyAgVUlOVDMyICAgICAgICAgICAg Q291bnRlcjsNCj4gKyAgVUlOVDE2ICAgICAgICAgICAgU3RhdENvZGU7DQo+ICsNCj4gKyAgQnVs a091dERhdGEgPSAwOw0KPiArICBDb3VudGVyICAgICA9IDA7DQo+ICsgIENwYiAgICAgICAgID0g KFBYRV9DUEJfVFJBTlNNSVQgKikoVUlOVE4pQ3BiQWRkcjsNCj4gKw0KPiArICBpZiAoTmljLT5D YW5UcmFuc21pdCkgew0KPiArICAgIHJldHVybiBQWEVfU1RBVENPREVfQlVTWTsNCj4gKyAgfQ0K PiArDQo+ICsgIE5pYy0+Q2FuVHJhbnNtaXQgPSBUUlVFOw0KPiArDQo+ICsgIGlmICgoT3BGbGFn cyAmIFBYRV9PUEZMQUdTX1RSQU5TTUlUX0ZSQUdNRU5URUQpICE9IDApIHsNCj4gKyAgICByZXR1 cm4gUFhFX1NUQVRDT0RFX0lOVkFMSURfUEFSQU1FVEVSOw0KPiArICB9DQo+ICsNCj4gKyAgTWFw ID0gTWFwSXQgKA0KPiArICAgICAgICAgIE5pYywNCj4gKyAgICAgICAgICBDcGItPkZyYW1lQWRk ciwNCj4gKyAgICAgICAgICBDcGItPkRhdGFMZW4gKyAoVUlOVDMyKUNwYi0+TWVkaWFoZWFkZXJM ZW4sDQo+ICsgICAgICAgICAgVE9fREVWSUNFLA0KPiArICAgICAgICAgIChVSU5UNjQpKFVJTlRO KSZCdWxrT3V0RGF0YQ0KPiArICAgICAgICAgICk7DQo+ICsNCj4gKyAgaWYgKE1hcCAhPSAwKSB7 DQo+ICsgICAgTmljLT5DYW5UcmFuc21pdCA9IEZBTFNFOw0KPiArICAgIHJldHVybiBQWEVfU1RB VENPREVfSU5WQUxJRF9QQVJBTUVURVI7DQo+ICsgIH0NCj4gKw0KPiArICBpZiAoTmljLT5UeEJ1 ZmZlckNvdW50IDwgTUFYX1hNSVRfQlVGRkVSUykgew0KPiArICAgIE5pYy0+TWVkaWFIZWFkZXJb TmljLT5UeEJ1ZmZlckNvdW50XSA9IENwYi0+RnJhbWVBZGRyOw0KPiArICAgIE5pYy0+VHhCdWZm ZXJDb3VudCsrOw0KPiArICB9DQo+ICsNCj4gKyAgRGF0YUxlbmd0aCA9IChVSU5UTikoQ3BiLT5E YXRhTGVuICsgKFVJTlQzMilDcGItPk1lZGlhaGVhZGVyTGVuKTsNCj4gKw0KPiArICB3aGlsZSAo MSkgew0KPiArICAgIGlmIChDb3VudGVyID49IDMpIHsNCj4gKyAgICAgIFN0YXRDb2RlID0gUFhF X1NUQVRDT0RFX0JVU1k7DQo+ICsgICAgICBicmVhazsNCj4gKyAgICB9DQo+ICsNCj4gKyAgICBU cmFuc21pdExlbmd0aCA9IERhdGFMZW5ndGg7DQo+ICsNCj4gKyAgICBTdGF0dXMgPSBOaWMtPlVz YkV0aC0+VXNiRXRoVHJhbnNtaXQgKENkYiwgTmljLT5Vc2JFdGgsIChWT0lEDQo+ICopKFVJTlRO KUJ1bGtPdXREYXRhLCAmVHJhbnNtaXRMZW5ndGgpOw0KPiArICAgIGlmIChFRklfRVJST1IgKFN0 YXR1cykpIHsNCj4gKyAgICAgIFN0YXRDb2RlID0gIFBYRV9TVEFURkxBR1NfQ09NTUFORF9GQUlM RUQ7DQo+ICsgICAgfQ0KPiArDQo+ICsgICAgaWYgKFN0YXR1cyA9PSBFRklfSU5WQUxJRF9QQVJB TUVURVIpIHsNCj4gKyAgICAgIFN0YXRDb2RlID0gUFhFX1NUQVRDT0RFX0lOVkFMSURfUEFSQU1F VEVSOw0KPiArICAgICAgYnJlYWs7DQo+ICsgICAgfQ0KPiArDQo+ICsgICAgaWYgKFN0YXR1cyA9 PSBFRklfREVWSUNFX0VSUk9SKSB7DQo+ICsgICAgICBTdGF0Q29kZSA9IFBYRV9TVEFUQ09ERV9E RVZJQ0VfRkFJTFVSRTsNCj4gKyAgICAgIGJyZWFrOw0KPiArICAgIH0NCj4gKw0KPiArICAgIGlm ICghRUZJX0VSUk9SIChTdGF0dXMpKSB7DQo+ICsgICAgICBOaWMtPlR4RnJhbWUrKzsNCj4gKyAg ICAgIFN0YXRDb2RlID0gUFhFX1NUQVRDT0RFX1NVQ0NFU1M7DQo+ICsgICAgICBicmVhazsNCj4g KyAgICB9DQo+ICsNCj4gKyAgICBDb3VudGVyKys7DQo+ICsgIH0NCj4gKw0KPiArICBVbk1hcEl0 ICgNCj4gKyAgICBOaWMsDQo+ICsgICAgQ3BiLT5GcmFtZUFkZHIsDQo+ICsgICAgQ3BiLT5EYXRh TGVuICsgKFVJTlQzMilDcGItPk1lZGlhaGVhZGVyTGVuLA0KPiArICAgIFRPX0RFVklDRSwNCj4g KyAgICBCdWxrT3V0RGF0YQ0KPiArICAgICk7DQo+ICsNCj4gKyAgTmljLT5DYW5UcmFuc21pdCA9 IEZBTFNFOw0KPiArDQo+ICsgIHJldHVybiBTdGF0Q29kZTsNCj4gK30NCj4gKw0KPiArLyoqDQo+ ICsgIFdoZW4gdGhlIG5ldHdvcmsgYWRhcHRlciBoYXMgcmVjZWl2ZWQgYSBmcmFtZSwgdGhpcyBj b21tYW5kIGlzIHVzZWQNCj4gKyAgdG8gY29weSB0aGUgZnJhbWUgaW50byBkcml2ZXIvYXBwbGlj YXRpb24gc3RvcmFnZS4NCj4gKw0KPiArICBAcGFyYW1baW5dICBDZGIgIEEgcG9pbnRlciB0byB0 aGUgY29tbWFuZCBkZXNjcmlwdG9yIGJsb2NrLg0KPiArICBAcGFyYW1baW5dICBOaWMgIEEgcG9p bnRlciB0byB0aGUgTmV0d29yayBpbnRlcmZhY2UgY29udHJvbGxlciBkYXRhLg0KPiArDQo+ICsq Ki8NCj4gK1ZPSUQNCj4gK1VuZGlSZWNlaXZlICgNCj4gKyAgSU4gIFBYRV9DREIgICAqQ2RiLA0K PiArICBJTiAgTklDX0RBVEEgICpOaWMNCj4gKyAgKQ0KPiArew0KPiArICBFRklfU1RBVFVTICBT dGF0dXM7DQo+ICsNCj4gKyAgaWYgKChDZGItPk9wQ29kZSAhPSBQWEVfT1BDT0RFX1JFQ0VJVkUp IHx8DQo+ICsgICAgICAoQ2RiLT5TdGF0Q29kZSAhPSBQWEVfU1RBVENPREVfSU5JVElBTElaRSkg fHwNCj4gKyAgICAgIChDZGItPlN0YXRGbGFncyAhPSBQWEVfU1RBVEZMQUdTX0lOSVRJQUxJWkUp IHx8DQo+ICsgICAgICAoQ2RiLT5JRm51bSA+PSAoZ1B4ZS0+SUZjbnQgfCBnUHhlLT5JRmNudEV4 dCA8PCA4KSkgfHwNCj4gKyAgICAgIChDZGItPkNQQnNpemUgIT0gc2l6ZW9mIChQWEVfQ1BCX1JF Q0VJVkUpKSB8fA0KPiArICAgICAgKENkYi0+REJzaXplICE9IHNpemVvZiAoUFhFX0RCX1JFQ0VJ VkUpKSB8fA0KPiArICAgICAgKENkYi0+T3BGbGFncyAhPSBQWEVfT1BGTEFHU19OT1RfVVNFRCkp DQo+ICsgIHsNCj4gKyAgICBDZGItPlN0YXRGbGFncyA9IFBYRV9TVEFURkxBR1NfQ09NTUFORF9G QUlMRUQ7DQo+ICsgICAgQ2RiLT5TdGF0Q29kZSAgPSBQWEVfU1RBVENPREVfSU5WQUxJRF9DREI7 DQo+ICsgICAgcmV0dXJuOw0KPiArICB9IGVsc2Ugew0KPiArICAgIENkYi0+U3RhdEZsYWdzID0g UFhFX1NUQVRGTEFHU19DT01NQU5EX0NPTVBMRVRFOw0KPiArICAgIENkYi0+U3RhdENvZGUgID0g UFhFX1NUQVRDT0RFX1NVQ0NFU1M7DQo+ICsgIH0NCj4gKw0KPiArICBpZiAoTmljLT5TdGF0ZSAh PSBQWEVfU1RBVEZMQUdTX0dFVF9TVEFURV9JTklUSUFMSVpFRCkgew0KPiArICAgIENkYi0+U3Rh dEZsYWdzID0gUFhFX1NUQVRGTEFHU19DT01NQU5EX0ZBSUxFRDsNCj4gKyAgICBDZGItPlN0YXRD b2RlICA9IFBYRV9TVEFUQ09ERV9OT1RfSU5JVElBTElaRUQ7DQo+ICsgICAgcmV0dXJuOw0KPiAr ICB9DQo+ICsNCj4gKyAgaWYgKE5pYy0+VXNiRXRoLT5Vc2JFdGhVbmRpLlVzYkV0aFVuZGlSZWNl aXZlICE9IE5VTEwpIHsNCj4gKyAgICBTdGF0dXMgPSBOaWMtPlVzYkV0aC0+VXNiRXRoVW5kaS5V c2JFdGhVbmRpUmVjZWl2ZSAoQ2RiLCBOaWMpOw0KPiArICAgIGlmIChFRklfRVJST1IgKFN0YXR1 cykpIHsNCj4gKyAgICAgIENkYi0+U3RhdEZsYWdzID0gUFhFX1NUQVRGTEFHU19DT01NQU5EX0ZB SUxFRDsNCj4gKyAgICB9DQo+ICsNCj4gKyAgICByZXR1cm47DQo+ICsgIH0NCj4gKw0KPiArICBD ZGItPlN0YXRDb2RlID0gUmVjZWl2ZSAoQ2RiLCBOaWMsIENkYi0+Q1BCYWRkciwgQ2RiLT5EQmFk ZHIpOw0KPiArDQo+ICsgIGlmIChDZGItPlN0YXRDb2RlICE9IFBYRV9TVEFUQ09ERV9TVUNDRVNT KSB7DQo+ICsgICAgQ2RiLT5TdGF0RmxhZ3MgPSBQWEVfU1RBVEZMQUdTX0NPTU1BTkRfRkFJTEVE Ow0KPiArICB9DQo+ICt9DQo+ICsNCj4gKy8qKg0KPiArICBVc2UgVVNCIEV0aGVybmV0IFByb3Rv Y29sIEJ1bGsgaW4gY29tbWFuZCB0byByZWNlaXZlIGRhdGEuDQo+ICsNCj4gKyAgQHBhcmFtW2lu XSAgICAgIENkYiAgICAgIEEgcG9pbnRlciB0byB0aGUgY29tbWFuZCBkZXNjcmlwdG9yIGJsb2Nr Lg0KPiArICBAcGFyYW1baW4sIG91dF0gTmljICAgICAgQSBwb2ludGVyIHRvIHRoZSBOZXR3b3Jr IGludGVyZmFjZSBjb250cm9sbGVyIGRhdGEuDQo+ICsgIEBwYXJhbVtpbl0gICAgICBDcGJBZGRy ICBDb21tYW5kIFBhcmFtZXRlciBCbG9jayBBZGRyZXNzLg0KPiArICBAcGFyYW1baW4sIG91dF0g RGJBZGRyICAgRGF0YSBCbG9jayBBZGRyZXNzLg0KPiArDQo+ICsqKi8NCj4gK1VJTlQxNg0KPiAr UmVjZWl2ZSAoDQo+ICsgIElOIFBYRV9DREIgICAgICAgKkNkYiwNCj4gKyAgSU4gT1VUIE5JQ19E QVRBICAqTmljLA0KPiArICBJTiBVSU5UNjQgICAgICAgIENwYkFkZHIsDQo+ICsgIElOIE9VVCBV SU5UNjQgICAgRGJBZGRyDQo+ICsgICkNCj4gK3sNCj4gKyAgRUZJX1NUQVRVUyAgICAgICBTdGF0 dXM7DQo+ICsgIFVJTlROICAgICAgICAgICAgSW5kZXg7DQo+ICsgIFBYRV9GUkFNRV9UWVBFICAg RnJhbWVUeXBlOw0KPiArICBQWEVfQ1BCX1JFQ0VJVkUgICpDcGI7DQo+ICsgIFBYRV9EQl9SRUNF SVZFICAgKkRiOw0KPiArICBOSUNfREVWSUNFICAgICAgICpOaWNEZXZpY2U7DQo+ICsgIFVJTlQ4 ICAgICAgICAgICAgKkJ1bGtJbkRhdGE7DQo+ICsgIFVJTlROICAgICAgICAgICAgRGF0YUxlbmd0 aDsNCj4gKyAgRXRoZXJuZXRIZWFkZXIgICAqSGVhZGVyOw0KPiArICBFRklfVFBMICAgICAgICAg IE9yaWdpbmFsVHBsOw0KPiArDQo+ICsgIEZyYW1lVHlwZSAgPSBQWEVfRlJBTUVfVFlQRV9OT05F Ow0KPiArICBOaWNEZXZpY2UgID0gVU5ESV9ERVZfRlJPTV9OSUMgKE5pYyk7DQo+ICsgIEJ1bGtJ bkRhdGEgPSBOaWNEZXZpY2UtPlJlY2VpdmVCdWZmZXI7DQo+ICsgIERhdGFMZW5ndGggPSAoVUlO VE4pTmljLT5NYXhTZWdtZW50U2l6ZTsNCj4gKyAgQ3BiICAgICAgICA9IChQWEVfQ1BCX1JFQ0VJ VkUgKikoVUlOVE4pQ3BiQWRkcjsNCj4gKyAgRGIgICAgICAgICA9IChQWEVfREJfUkVDRUlWRSAq KShVSU5UTilEYkFkZHI7DQo+ICsNCj4gKyAgaWYgKCFCdWxrSW5EYXRhKSB7DQo+ICsgICAgcmV0 dXJuIFBYRV9TVEFUQ09ERV9JTlZBTElEX1BBUkFNRVRFUjsNCj4gKyAgfQ0KPiArDQo+ICsgIGlm ICgoTmljLT5SYXRlTGltaXRpbmdDcmVkaXRDb3VudCA9PSAwKSAmJiAoTmljLT5SYXRlTGltaXRp bmdFbmFibGUgPT0NCj4gVFJVRSkpIHsNCj4gKyAgICByZXR1cm4gUFhFX1NUQVRDT0RFX05PX0RB VEE7DQo+ICsgIH0NCj4gKw0KPiArICBTdGF0dXMgPSBOaWMtPlVzYkV0aC0+VXNiRXRoUmVjZWl2 ZSAoQ2RiLCBOaWMtPlVzYkV0aCwgKFZPSUQgKilCdWxrSW5EYXRhLA0KPiAmRGF0YUxlbmd0aCk7 DQo+ICsgIGlmIChFRklfRVJST1IgKFN0YXR1cykpIHsNCj4gKyAgICBOaWMtPlJlY2VpdmVTdGF0 dXMgPSAwOw0KPiArICAgIGlmIChOaWMtPlJhdGVMaW1pdGluZ0VuYWJsZSA9PSBUUlVFKSB7DQo+ ICsgICAgICBPcmlnaW5hbFRwbCA9IGdCUy0+UmFpc2VUUEwgKFRQTF9OT1RJRlkpOw0KPiArICAg ICAgaWYgKE5pYy0+UmF0ZUxpbWl0aW5nQ3JlZGl0Q291bnQgIT0gMCkgew0KPiArICAgICAgICBO aWMtPlJhdGVMaW1pdGluZ0NyZWRpdENvdW50LS07DQo+ICsgICAgICB9DQo+ICsNCj4gKyAgICAg IGdCUy0+UmVzdG9yZVRQTCAoT3JpZ2luYWxUcGwpOw0KPiArICAgIH0NCj4gKw0KPiArICAgIHJl dHVybiBQWEVfU1RBVENPREVfTk9fREFUQTsNCj4gKyAgfQ0KPiArDQo+ICsgIE5pYy0+UnhGcmFt ZSsrOw0KPiArDQo+ICsgIGlmIChEYXRhTGVuZ3RoICE9IDApIHsNCj4gKyAgICBpZiAoRGF0YUxl bmd0aCA+IENwYi0+QnVmZmVyTGVuKSB7DQo+ICsgICAgICBEYXRhTGVuZ3RoID0gKFVJTlROKUNw Yi0+QnVmZmVyTGVuOw0KPiArICAgIH0NCj4gKw0KPiArICAgIENvcHlNZW0gKChVSU5UOCAqKShV SU5UTilDcGItPkJ1ZmZlckFkZHIsIChVSU5UOCAqKUJ1bGtJbkRhdGEsDQo+IERhdGFMZW5ndGgp Ow0KPiArDQo+ICsgICAgSGVhZGVyID0gKEV0aGVybmV0SGVhZGVyICopQnVsa0luRGF0YTsNCj4g Kw0KPiArICAgIERiLT5GcmFtZUxlbiAgICAgICA9IChVSU5UMzIpRGF0YUxlbmd0aDsNCj4gKyAg ICBEYi0+TWVkaWFIZWFkZXJMZW4gPSBQWEVfTUFDX0hFQURFUl9MRU5fRVRIRVI7DQo+ICsNCj4g KyAgICBmb3IgKEluZGV4ID0gMDsgSW5kZXggPCBQWEVfSFdBRERSX0xFTl9FVEhFUjsgSW5kZXgr Kykgew0KPiArICAgICAgaWYgKEhlYWRlci0+RGVzdEFkZHJbSW5kZXhdICE9IE5pYy0+Q3VycmVu dE5vZGVBZGRyZXNzW0luZGV4XSkgew0KPiArICAgICAgICBicmVhazsNCj4gKyAgICAgIH0NCj4g KyAgICB9DQo+ICsNCj4gKyAgICBpZiAoSW5kZXggPj0gUFhFX0hXQUREUl9MRU5fRVRIRVIpIHsN Cj4gKyAgICAgIEZyYW1lVHlwZSA9IFBYRV9GUkFNRV9UWVBFX1VOSUNBU1Q7DQo+ICsgICAgfSBl bHNlIHsNCj4gKyAgICAgIGZvciAoSW5kZXggPSAwOyBJbmRleCA8IFBYRV9IV0FERFJfTEVOX0VU SEVSOyBJbmRleCsrKSB7DQo+ICsgICAgICAgIGlmIChIZWFkZXItPkRlc3RBZGRyW0luZGV4XSAh PSBOaWMtPkJyb2FkY2FzdE5vZGVBZGRyZXNzW0luZGV4XSkgew0KPiArICAgICAgICAgIGJyZWFr Ow0KPiArICAgICAgICB9DQo+ICsgICAgICB9DQo+ICsNCj4gKyAgICAgIGlmIChJbmRleCA+PSBQ WEVfSFdBRERSX0xFTl9FVEhFUikgew0KPiArICAgICAgICBGcmFtZVR5cGUgPSBQWEVfRlJBTUVf VFlQRV9CUk9BRENBU1Q7DQo+ICsgICAgICB9IGVsc2Ugew0KPiArICAgICAgICBpZiAoKEhlYWRl ci0+RGVzdEFkZHJbMF0gJiAxKSA9PSAxKSB7DQo+ICsgICAgICAgICAgRnJhbWVUeXBlID0gUFhF X0ZSQU1FX1RZUEVfRklMVEVSRURfTVVMVElDQVNUOw0KPiArICAgICAgICB9IGVsc2Ugew0KPiAr ICAgICAgICAgIEZyYW1lVHlwZSA9IFBYRV9GUkFNRV9UWVBFX1BST01JU0NVT1VTOw0KPiArICAg ICAgICB9DQo+ICsgICAgICB9DQo+ICsgICAgfQ0KPiArDQo+ICsgICAgRGItPlR5cGUgICAgID0g RnJhbWVUeXBlOw0KPiArICAgIERiLT5Qcm90b2NvbCA9IEhlYWRlci0+UHJvdG9jb2w7DQo+ICsN Cj4gKyAgICBmb3IgKEluZGV4ID0gMDsgSW5kZXggPCBQWEVfSFdBRERSX0xFTl9FVEhFUjsgSW5k ZXgrKykgew0KPiArICAgICAgRGItPlNyY0FkZHJbSW5kZXhdICA9IEhlYWRlci0+U3JjQWRkcltJ bmRleF07DQo+ICsgICAgICBEYi0+RGVzdEFkZHJbSW5kZXhdID0gSGVhZGVyLT5EZXN0QWRkcltJ bmRleF07DQo+ICsgICAgfQ0KPiArICB9DQo+ICsNCj4gKyAgaWYgKEZyYW1lVHlwZSA9PSBQWEVf RlJBTUVfVFlQRV9OT05FKSB7DQo+ICsgICAgTmljLT5SZWNlaXZlU3RhdHVzID0gMDsNCj4gKyAg fSBlbHNlIHsNCj4gKyAgICBOaWMtPlJlY2VpdmVTdGF0dXMgPSAxOw0KPiArICB9DQo+ICsNCj4g KyAgcmV0dXJuIFBYRV9TVEFUQ09ERV9TVUNDRVNTOw0KPiArfQ0KPiArDQo+ICsvKioNCj4gKyAg RmlsbCBvdXQgUFhFIFNXIFVOREkgc3RydWN0dXJlLg0KPiArDQo+ICsgIEBwYXJhbVtvdXRdICBQ eGVTdyAgICAgIEEgcG9pbnRlciB0byB0aGUgUFhFIFNXIFVOREkgc3RydWN0dXJlLg0KPiArDQo+ ICsqKi8NCj4gK1ZPSUQNCj4gK1B4ZVN0cnVjdEluaXQgKA0KPiArICBPVVQgUFhFX1NXX1VOREkg ICpQeGVTdw0KPiArICApDQo+ICt7DQo+ICsgIFB4ZVN3LT5TaWduYXR1cmUgPSBQWEVfUk9NSURf U0lHTkFUVVJFOw0KPiArICBQeGVTdy0+TGVuICAgICAgID0gKFVJTlQ4KXNpemVvZiAoUFhFX1NX X1VOREkpOw0KPiArICBQeGVTdy0+RnVkZ2UgICAgID0gMDsNCj4gKyAgUHhlU3ctPklGY250ICAg ICA9IDA7DQo+ICsgIFB4ZVN3LT5JRmNudEV4dCAgPSAwOw0KPiArICBQeGVTdy0+UmV2ICAgICAg ID0gUFhFX1JPTUlEX1JFVjsNCj4gKyAgUHhlU3ctPk1ham9yVmVyICA9IFBYRV9ST01JRF9NQUpP UlZFUjsNCj4gKyAgUHhlU3ctPk1pbm9yVmVyICA9IFBYRV9ST01JRF9NSU5PUlZFUjsNCj4gKyAg UHhlU3ctPnJlc2VydmVkMSA9IDA7DQo+ICsNCj4gKyAgUHhlU3ctPkltcGxlbWVudGF0aW9uID0g UFhFX1JPTUlEX0lNUF9TV19WSVJUX0FERFIgfA0KPiArICAgICAgICAgICAgICAgICAgICAgICAg ICBQWEVfUk9NSURfSU1QX0ZSQUdfU1VQUE9SVEVEIHwNCj4gKyAgICAgICAgICAgICAgICAgICAg ICAgICAgUFhFX1JPTUlEX0lNUF9DTURfTElOS19TVVBQT1JURUQgfA0KPiArICAgICAgICAgICAg ICAgICAgICAgICAgICBQWEVfUk9NSURfSU1QX1NUQVRJT05fQUREUl9TRVRUQUJMRSB8DQo+ICsN Cj4gUFhFX1JPTUlEX0lNUF9QUk9NSVNDVU9VU19NVUxUSUNBU1RfUlhfU1VQUE9SVEVEIHwNCj4g KyAgICAgICAgICAgICAgICAgICAgICAgICAgUFhFX1JPTUlEX0lNUF9QUk9NSVNDVU9VU19SWF9T VVBQT1JURUQgfA0KPiArICAgICAgICAgICAgICAgICAgICAgICAgICBQWEVfUk9NSURfSU1QX0JS T0FEQ0FTVF9SWF9TVVBQT1JURUQgfA0KPiArICAgICAgICAgICAgICAgICAgICAgICAgICBQWEVf Uk9NSURfSU1QX0ZJTFRFUkVEX01VTFRJQ0FTVF9SWF9TVVBQT1JURUQ7DQo+ICsNCj4gKyAgUHhl U3ctPkVudHJ5UG9pbnQgICA9IChVSU5UNjQpKFVJTlROKVVuZGlBcGlFbnRyeTsNCj4gKyAgUHhl U3ctPnJlc2VydmVkMlswXSA9IDA7DQo+ICsgIFB4ZVN3LT5yZXNlcnZlZDJbMV0gPSAwOw0KPiAr ICBQeGVTdy0+cmVzZXJ2ZWQyWzJdID0gMDsNCj4gKyAgUHhlU3ctPkJ1c0NudCAgICAgICA9IDE7 DQo+ICsgIFB4ZVN3LT5CdXNUeXBlWzBdICAgPSBQWEVfQlVTVFlQRV9VU0I7DQo+ICsgIFB4ZVN3 LT5GdWRnZSAgICAgICAgPSBQeGVTdy0+RnVkZ2UgLSBDYWxjdWxhdGVTdW04ICgoVk9JRCAqKVB4 ZVN3LCBQeGVTdy0NCj4gPkxlbik7DQo+ICt9DQo+ICsNCj4gKy8qKg0KPiArICBVcGRhdGUgTklD IG51bWJlci4NCj4gKw0KPiArICBAcGFyYW1baW5dICAgICAgTmljICAgICAgIEEgcG9pbnRlciB0 byB0aGUgTmV0d29yayBpbnRlcmZhY2UgY29udHJvbGxlciBkYXRhLg0KPiArICBAcGFyYW1baW4s IG91dF0gUHhlU3cgICAgIEEgcG9pbnRlciB0byB0aGUgUFhFIFNXIFVOREkgc3RydWN0dXJlLg0K PiArDQo+ICsqKi8NCj4gK1ZPSUQNCj4gK1VwZGF0ZU5pY051bSAoDQo+ICsgIElOICAgICAgTklD X0RBVEEgICAgICpOaWMsDQo+ICsgIElOIE9VVCAgUFhFX1NXX1VOREkgICpQeGVTdw0KPiArICAp DQo+ICt7DQo+ICsgIFVJTlQxNiAgTmljTnVtOw0KPiArDQo+ICsgIE5pY051bSA9IChQeGVTdy0+ SUZjbnQgfCBQeGVTdy0+SUZjbnRFeHQgPDwgOCk7DQo+ICsNCj4gKyAgaWYgKE5pYyA9PSBOVUxM KSB7DQo+ICsgICAgaWYgKE5pY051bSA+IDApIHsNCj4gKyAgICAgIE5pY051bS0tOw0KPiArICAg IH0NCj4gKw0KPiArICAgIFB4ZVN3LT5JRmNudCAgICA9IChVSU5UOCkoTmljTnVtICYgMHhGRik7 ICAgICAgICAgIC8vIEdldCBsb3dlciBieXRlDQo+ICsgICAgUHhlU3ctPklGY250RXh0ID0gKFVJ TlQ4KSgoTmljTnVtICYgMHhGRjAwKSA+PiA4KTsgLy8gR2V0IHVwcGVyIGJ5dGUNCj4gKyAgICBQ eGVTdy0+RnVkZ2UgICAgPSAoVUlOVDgpKFB4ZVN3LT5GdWRnZSAtIENhbGN1bGF0ZVN1bTggKChW T0lEICopUHhlU3csDQo+IFB4ZVN3LT5MZW4pKTsNCj4gKyAgICByZXR1cm47DQo+ICsgIH0NCj4g Kw0KPiArICBOaWNOdW0rKzsNCj4gKw0KPiArICBQeGVTdy0+SUZjbnQgICAgPSAoVUlOVDgpKE5p Y051bSAmIDB4RkYpOyAgICAgICAgICAvLyBHZXQgbG93ZXIgYnl0ZQ0KPiArICBQeGVTdy0+SUZj bnRFeHQgPSAoVUlOVDgpKChOaWNOdW0gJiAweEZGMDApID4+IDgpOyAvLyBHZXQgdXBwZXIgYnl0 ZQ0KPiArICBQeGVTdy0+RnVkZ2UgICAgPSAoVUlOVDgpKFB4ZVN3LT5GdWRnZSAtIENhbGN1bGF0 ZVN1bTggKChWT0lEICopUHhlU3csDQo+IFB4ZVN3LT5MZW4pKTsNCj4gK30NCj4gKw0KPiArLyoq DQo+ICsgIFVOREkgQVBJIHRhYmxlIGVudHJ5Lg0KPiArDQo+ICsgIEBwYXJhbVtpbl0gIENkYiAg QSBwb2ludGVyIHRvIHRoZSBjb21tYW5kIGRlc2NyaXB0b3IgYmxvY2suDQo+ICsNCj4gKyoqLw0K PiArRUZJX1NUQVRVUw0KPiArRUZJQVBJDQo+ICtVbmRpQXBpRW50cnkgKA0KPiArICBJTiAgVUlO VDY0ICBDZGINCj4gKyAgKQ0KPiArew0KPiArICBQWEVfQ0RCICAgKkNkYlB0cjsNCj4gKyAgTklD X0RBVEEgICpOaWM7DQo+ICsNCj4gKyAgaWYgKENkYiA9PSAwKSB7DQo+ICsgICAgcmV0dXJuIEVG SV9JTlZBTElEX1BBUkFNRVRFUjsNCj4gKyAgfQ0KPiArDQo+ICsgIENkYlB0ciA9IChQWEVfQ0RC ICopKFVJTlROKUNkYjsNCj4gKyAgTmljICAgID0gJihnTGFuRGV2aWNlTGlzdFtDZGJQdHItPklG bnVtXS0+TmljSW5mbyk7DQo+ICsgIGdVbmRpQXBpVGFibGVbQ2RiUHRyLT5PcENvZGVdKENkYlB0 ciwgTmljKTsNCj4gKyAgcmV0dXJuIEVGSV9TVUNDRVNTOw0KPiArfQ0KPiArDQo+ICsvKioNCj4g KyAgTWFwIHZpcnR1YWwgbWVtb3J5IGFkZHJlc3MgZm9yIERNQS4gVGhpcyBmaWVsZCBjYW4gYmUg c2V0IHRvDQo+ICsgIHplcm8gaWYgdGhlcmUgaXMgbm8gbWFwcGluZyBzZXJ2aWNlLg0KPiArDQo+ ICsgIEBwYXJhbVtpbl0gIE5pYyAgICAgICAgICAgQSBwb2ludGVyIHRvIHRoZSBOZXR3b3JrIGlu dGVyZmFjZSBjb250cm9sbGVyIGRhdGEuDQo+ICsgIEBwYXJhbVtpbl0gIE1lbUFkZHIgICAgICAg VmlydHVhbCBhZGRyZXNzIHRvIGJlIG1hcHBlZC4NCj4gKyAgQHBhcmFtW2luXSAgU2l6ZSAgICAg ICAgICBTaXplIG9mIG1lbW9yeSB0byBiZSBtYXBwZWQuDQo+ICsgIEBwYXJhbVtpbl0gIERpcmVj dGlvbiAgICAgRGlyZWN0aW9uIG9mIGRhdGEgZmxvdyBmb3IgdGhpcyBtZW1vcnkncyB1c2FnZToN Cj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBjcHUtPmRldmljZSwgZGV2aWNlLT5jcHUg b3IgYm90aCB3YXlzLg0KPiArICBAcGFyYW1bb3V0XSBNYXBwZWRBZGRyICAgIFBvaW50ZXIgdG8g cmV0dXJuIHRoZSBtYXBwZWQgZGV2aWNlIGFkZHJlc3MuDQo+ICsNCj4gKyoqLw0KPiArVUlOVE4N Cj4gK01hcEl0ICgNCj4gKyAgSU4gTklDX0RBVEEgICpOaWMsDQo+ICsgIElOIFVJTlQ2NCAgICBN ZW1BZGRyLA0KPiArICBJTiBVSU5UMzIgICAgU2l6ZSwNCj4gKyAgSU4gVUlOVDMyICAgIERpcmVj dGlvbiwNCj4gKyAgT1VUIFVJTlQ2NCAgIE1hcHBlZEFkZHINCj4gKyAgKQ0KPiArew0KPiArICBV SU5UNjQgICpQaHlBZGRyOw0KPiArDQo+ICsgIFBoeUFkZHIgPSAoVUlOVDY0ICopKFVJTlROKU1h cHBlZEFkZHI7DQo+ICsNCj4gKyAgaWYgKE5pYy0+UHhlU3RhcnQuTWFwX01lbSA9PSAwKSB7DQo+ ICsgICAgKlBoeUFkZHIgPSBNZW1BZGRyOw0KPiArICB9IGVsc2Ugew0KPiArICAgICgodm9pZCAo KikoVUlOVDY0LCBVSU5UNjQsIFVJTlQzMiwgVUlOVDMyLCBVSU5UNjQpKShVSU5UTikgTmljLQ0K PiA+UHhlU3RhcnQuTWFwX01lbSkoDQo+ICsgIE5pYy0+UHhlU3RhcnQuVW5pcXVlX0lELA0KPiAr ICBNZW1BZGRyLA0KPiArICBTaXplLA0KPiArICBEaXJlY3Rpb24sDQo+ICsgIE1hcHBlZEFkZHIN Cj4gKyAgKTsNCj4gKyAgfQ0KPiArDQo+ICsgIHJldHVybiBQWEVfU1RBVENPREVfU1VDQ0VTUzsN Cj4gK30NCj4gKw0KPiArLyoqDQo+ICsgIFVuLW1hcCBwcmV2aW91c2x5IG1hcHBlZCB2aXJ0dWFs IG1lbW9yeSBhZGRyZXNzLiBUaGlzIGZpZWxkIGNhbiBiZSBzZXQNCj4gKyAgdG8gemVybyBvbmx5 IGlmIHRoZSBNYXBfTWVtKCkgc2VydmljZSBpcyBhbHNvIHNldCB0byB6ZXJvLg0KPiArDQo+ICsg IEBwYXJhbVtpbl0gIE5pYyAgICAgICAgICAgQSBwb2ludGVyIHRvIHRoZSBOZXR3b3JrIGludGVy ZmFjZSBjb250cm9sbGVyIGRhdGEuDQo+ICsgIEBwYXJhbVtpbl0gIE1lbUFkZHIgICAgICAgVmly dHVhbCBhZGRyZXNzIHRvIGJlIG1hcHBlZC4NCj4gKyAgQHBhcmFtW2luXSAgU2l6ZSAgICAgICAg ICBTaXplIG9mIG1lbW9yeSB0byBiZSBtYXBwZWQuDQo+ICsgIEBwYXJhbVtpbl0gIERpcmVjdGlv biAgICAgRGlyZWN0aW9uIG9mIGRhdGEgZmxvdyBmb3IgdGhpcyBtZW1vcnkncyB1c2FnZToNCj4g KyAgICAgICAgICAgICAgICAgICAgICAgICAgICBjcHUtPmRldmljZSwgZGV2aWNlLT5jcHUgb3Ig Ym90aCB3YXlzLg0KPiArICBAcGFyYW1baW5dICBNYXBwZWRBZGRyICAgIFBvaW50ZXIgdG8gcmV0 dXJuIHRoZSBtYXBwZWQgZGV2aWNlIGFkZHJlc3MuDQo+ICsNCj4gKyoqLw0KPiArVk9JRA0KPiAr VW5NYXBJdCAoDQo+ICsgIElOIE5JQ19EQVRBICAqTmljLA0KPiArICBJTiBVSU5UNjQgICAgTWVt QWRkciwNCj4gKyAgSU4gVUlOVDMyICAgIFNpemUsDQo+ICsgIElOIFVJTlQzMiAgICBEaXJlY3Rp b24sDQo+ICsgIElOIFVJTlQ2NCAgICBNYXBwZWRBZGRyDQo+ICsgICkNCj4gK3sNCj4gKyAgaWYg KE5pYy0+UHhlU3RhcnQuVW5NYXBfTWVtICE9IDApIHsNCj4gKyAgICAoKHZvaWQgKCopKFVJTlQ2 NCwgVUlOVDY0LCBVSU5UMzIsIFVJTlQzMiwgVUlOVDY0KSkoVUlOVE4pIE5pYy0NCj4gPlB4ZVN0 YXJ0LlVuTWFwX01lbSkoDQo+ICsgIE5pYy0+UHhlU3RhcnQuVW5pcXVlX0lELA0KPiArICBNZW1B ZGRyLA0KPiArICBTaXplLA0KPiArICBEaXJlY3Rpb24sDQo+ICsgIE1hcHBlZEFkZHINCj4gKyAg KTsNCj4gKyAgfQ0KPiArDQo+ICsgIHJldHVybjsNCj4gK30NCj4gZGlmZiAtLWdpdCBhL01kZU1v ZHVsZVBrZy9CdXMvVXNiL1VzYk5ldHdvcmsvVXNiUm5kaXMvQ29tcG9uZW50TmFtZS5jDQo+IGIv TWRlTW9kdWxlUGtnL0J1cy9Vc2IvVXNiTmV0d29yay9Vc2JSbmRpcy9Db21wb25lbnROYW1lLmMN Cj4gbmV3IGZpbGUgbW9kZSAxMDA2NDQNCj4gaW5kZXggMDAwMDAwMDAwMC4uYjliYTE3MGMxMw0K PiAtLS0gL2Rldi9udWxsDQo+ICsrKyBiL01kZU1vZHVsZVBrZy9CdXMvVXNiL1VzYk5ldHdvcmsv VXNiUm5kaXMvQ29tcG9uZW50TmFtZS5jDQo+IEBAIC0wLDAgKzEsMTcyIEBADQo+ICsvKiogQGZp bGUNCj4gKyAgVGhpcyBmaWxlIGNvbnRhaW5zIGNvZGUgZm9yIFVTQiBSTkRJUyBEcml2ZXIgQ29t cG9uZW50DQo+ICsgIE5hbWUgZGVmaW5pdGlvbnMNCj4gKw0KPiArICBDb3B5cmlnaHQgKGMpIDIw MjMsIEFtZXJpY2FuIE1lZ2F0cmVuZHMgSW50ZXJuYXRpb25hbCBMTEMuIEFsbCByaWdodHMNCj4g cmVzZXJ2ZWQuPEJSPg0KPiArICBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQlNELTItQ2xhdXNl LVBhdGVudA0KPiArKiovDQo+ICsNCj4gKyNpbmNsdWRlICJVc2JSbmRpcy5oIg0KPiArDQo+ICtH TE9CQUxfUkVNT1ZFX0lGX1VOUkVGRVJFTkNFRCBFRklfVU5JQ09ERV9TVFJJTkdfVEFCTEUNCj4g Z1VzYlJuZGlzRHJpdmVyTmFtZVRhYmxlW10gPSB7DQo+ICsgIHsNCj4gKyAgICAiZW5nO2VuIiwN Cj4gKyAgICBMIlVTQiBSTkRJUyBEcml2ZXIiDQo+ICsgIH0sDQo+ICsgIHsNCj4gKyAgICBOVUxM LA0KPiArICAgIE5VTEwNCj4gKyAgfQ0KPiArfTsNCj4gKw0KPiArRUZJX1NUQVRVUw0KPiArRUZJ QVBJDQo+ICtVc2JSbmRpc0NvbXBvbmVudE5hbWVHZXREcml2ZXJOYW1lICgNCj4gKyAgSU4gIEVG SV9DT01QT05FTlRfTkFNRV9QUk9UT0NPTCAgKlRoaXMsDQo+ICsgIElOICBDSEFSOCAgICAgICAg ICAgICAgICAgICAgICAgICpMYW5ndWFnZSwNCj4gKyAgT1VUIENIQVIxNiAgICAgICAgICAgICAg ICAgICAgICAgKipEcml2ZXJOYW1lDQo+ICsgICk7DQo+ICsNCj4gK0VGSV9TVEFUVVMNCj4gK0VG SUFQSQ0KPiArVXNiUm5kaXNDb21wb25lbnROYW1lR2V0Q29udHJvbGxlck5hbWUgKA0KPiArICBJ TiBFRklfQ09NUE9ORU5UX05BTUVfUFJPVE9DT0wgICpUaGlzLA0KPiArICBJTiBFRklfSEFORExF ICAgICAgICAgICAgICAgICAgIENvbnRyb2xsZXIsDQo+ICsgIElOIEVGSV9IQU5ETEUgICAgICAg ICAgICAgICAgICAgQ2hpbGRIYW5kbGUgICAgICAgIE9QVElPTkFMLA0KPiArICBJTiBDSEFSOCAg ICAgICAgICAgICAgICAgICAgICAgICpMYW5ndWFnZSwNCj4gKyAgT1VUIENIQVIxNiAgICAgICAg ICAgICAgICAgICAgICAqKkNvbnRyb2xsZXJOYW1lDQo+ICsgICk7DQo+ICsNCj4gK0dMT0JBTF9S RU1PVkVfSUZfVU5SRUZFUkVOQ0VEIEVGSV9DT01QT05FTlRfTkFNRV9QUk9UT0NPTA0KPiBnVXNi Um5kaXNDb21wb25lbnROYW1lID0gew0KPiArICBVc2JSbmRpc0NvbXBvbmVudE5hbWVHZXREcml2 ZXJOYW1lLA0KPiArICBVc2JSbmRpc0NvbXBvbmVudE5hbWVHZXRDb250cm9sbGVyTmFtZSwNCj4g KyAgImVuZyINCj4gK307DQo+ICsNCj4gK0dMT0JBTF9SRU1PVkVfSUZfVU5SRUZFUkVOQ0VEDQo+ IEVGSV9DT01QT05FTlRfTkFNRTJfUFJPVE9DT0wgIGdVc2JSbmRpc0NvbXBvbmVudE5hbWUyID0g ew0KPiArDQo+IChFRklfQ09NUE9ORU5UX05BTUUyX0dFVF9EUklWRVJfTkFNRSlVc2JSbmRpc0Nv bXBvbmVudE5hbWVHZXQNCj4gRHJpdmVyTmFtZSwNCj4gKw0KPiAoRUZJX0NPTVBPTkVOVF9OQU1F Ml9HRVRfQ09OVFJPTExFUl9OQU1FKVVzYlJuZGlzQ29tcG9uZW50TmENCj4gbWVHZXRDb250cm9s bGVyTmFtZSwNCj4gKyAgImVuIg0KPiArfTsNCj4gKw0KPiArLyoqDQo+ICsgIFJldHJpZXZlcyBh IFVuaWNvZGUgc3RyaW5nIHRoYXQgaXMgdGhlIHVzZXIgcmVhZGFibGUgbmFtZSBvZiB0aGUgZHJp dmVyLg0KPiArDQo+ICsgIFRoaXMgZnVuY3Rpb24gcmV0cmlldmVzIHRoZSB1c2VyIHJlYWRhYmxl IG5hbWUgb2YgYSBkcml2ZXIgaW4gdGhlIGZvcm0gb2YgYQ0KPiArICBVbmljb2RlIHN0cmluZy4g SWYgdGhlIGRyaXZlciBzcGVjaWZpZWQgYnkgVGhpcyBoYXMgYSB1c2VyIHJlYWRhYmxlIG5hbWUg aW4NCj4gKyAgdGhlIGxhbmd1YWdlIHNwZWNpZmllZCBieSBMYW5ndWFnZSwgdGhlbiBhIHBvaW50 ZXIgdG8gdGhlIGRyaXZlciBuYW1lIGlzDQo+ICsgIHJldHVybmVkIGluIERyaXZlck5hbWUsIGFu ZCBFRklfU1VDQ0VTUyBpcyByZXR1cm5lZC4gSWYgdGhlIGRyaXZlciBzcGVjaWZpZWQNCj4gKyAg YnkgVGhpcyBkb2VzIG5vdCBzdXBwb3J0IHRoZSBsYW5ndWFnZSBzcGVjaWZpZWQgYnkgTGFuZ3Vh Z2UsDQo+ICsgIHRoZW4gRUZJX1VOU1VQUE9SVEVEIGlzIHJldHVybmVkLg0KPiArDQo+ICsgIEBw YXJhbVtpbl0gIFRoaXMgICAgICAgICAgICAgIEEgcG9pbnRlciB0byB0aGUNCj4gRUZJX0NPTVBP TkVOVF9OQU1FMl9QUk9UT0NPTCBvcg0KPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBFRklfQ09NUE9ORU5UX05BTUVfUFJPVE9DT0wgaW5zdGFuY2UuDQo+ICsgIEBwYXJhbVtpbl0g IExhbmd1YWdlICAgICAgICAgIEEgcG9pbnRlciB0byBhIE51bGwtdGVybWluYXRlZCBBU0NJSSBz dHJpbmcNCj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXJyYXkgaW5kaWNhdGlu ZyB0aGUgbGFuZ3VhZ2UuIFRoaXMgaXMgdGhlDQo+ICsgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIGxhbmd1YWdlIG9mIHRoZSBkcml2ZXIgbmFtZSB0aGF0IHRoZSBjYWxsZXIgaXMNCj4g KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVxdWVzdGluZywgYW5kIGl0IG11c3Qg bWF0Y2ggb25lIG9mIHRoZQ0KPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsYW5n dWFnZXMgc3BlY2lmaWVkIGluIFN1cHBvcnRlZExhbmd1YWdlcy4gVGhlDQo+ICsgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIG51bWJlciBvZiBsYW5ndWFnZXMgc3VwcG9ydGVkIGJ5IGEg ZHJpdmVyIGlzIHVwDQo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRvIHRoZSBk cml2ZXIgd3JpdGVyLiBMYW5ndWFnZSBpcyBzcGVjaWZpZWQNCj4gKyAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgaW4gUkZDIDQ2NDYgb3IgSVNPIDYzOS0yIGxhbmd1YWdlIGNvZGUgZm9y bWF0Lg0KPiArICBAcGFyYW1bb3V0XSBEcml2ZXJOYW1lICAgICAgICBBIHBvaW50ZXIgdG8gdGhl IFVuaWNvZGUgc3RyaW5nIHRvIHJldHVybi4NCj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgVGhpcyBVbmljb2RlIHN0cmluZyBpcyB0aGUgbmFtZSBvZiB0aGUNCj4gKyAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgZHJpdmVyIHNwZWNpZmllZCBieSBUaGlzIGluIHRoZSBs YW5ndWFnZQ0KPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzcGVjaWZpZWQgYnkg TGFuZ3VhZ2UuDQo+ICsNCj4gKyAgQHJldHZhbCBFRklfU1VDQ0VTUyAgICAgICAgICAgVGhlIFVu aWNvZGUgc3RyaW5nIGZvciB0aGUgRHJpdmVyIHNwZWNpZmllZCBieQ0KPiArICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBUaGlzIGFuZCB0aGUgbGFuZ3VhZ2Ugc3BlY2lmaWVkIGJ5IExh bmd1YWdlIHdhcw0KPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm5lZCBp biBEcml2ZXJOYW1lLg0KPiArICBAcmV0dmFsIEVGSV9JTlZBTElEX1BBUkFNRVRFUiBMYW5ndWFn ZSBpcyBOVUxMLg0KPiArICBAcmV0dmFsIEVGSV9JTlZBTElEX1BBUkFNRVRFUiBEcml2ZXJOYW1l IGlzIE5VTEwuDQo+ICsgIEByZXR2YWwgRUZJX1VOU1VQUE9SVEVEICAgICAgIFRoZSBkcml2ZXIg c3BlY2lmaWVkIGJ5IFRoaXMgZG9lcyBub3Qgc3VwcG9ydA0KPiArICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICB0aGUgbGFuZ3VhZ2Ugc3BlY2lmaWVkIGJ5IExhbmd1YWdlLg0KPiArDQo+ ICsqKi8NCj4gK0VGSV9TVEFUVVMNCj4gK0VGSUFQSQ0KPiArVXNiUm5kaXNDb21wb25lbnROYW1l R2V0RHJpdmVyTmFtZSAoDQo+ICsgIElOICBFRklfQ09NUE9ORU5UX05BTUVfUFJPVE9DT0wgICpU aGlzLA0KPiArICBJTiAgQ0hBUjggICAgICAgICAgICAgICAgICAgICAgICAqTGFuZ3VhZ2UsDQo+ ICsgIE9VVCBDSEFSMTYgICAgICAgICAgICAgICAgICAgICAgICoqRHJpdmVyTmFtZQ0KPiArICAp DQo+ICt7DQo+ICsgIHJldHVybiBMb29rdXBVbmljb2RlU3RyaW5nMiAoDQo+ICsgICAgICAgICAg IExhbmd1YWdlLA0KPiArICAgICAgICAgICBUaGlzLT5TdXBwb3J0ZWRMYW5ndWFnZXMsDQo+ICsg ICAgICAgICAgIGdVc2JSbmRpc0RyaXZlck5hbWVUYWJsZSwNCj4gKyAgICAgICAgICAgRHJpdmVy TmFtZSwNCj4gKyAgICAgICAgICAgKEJPT0xFQU4pKFRoaXMgPT0gJmdVc2JSbmRpc0NvbXBvbmVu dE5hbWUpDQo+ICsgICAgICAgICAgICk7DQo+ICt9DQo+ICsNCj4gKy8qKg0KPiArICBSZXRyaWV2 ZXMgYSBVbmljb2RlIHN0cmluZyB0aGF0IGlzIHRoZSB1c2VyIHJlYWRhYmxlIG5hbWUgb2YgdGhl IGNvbnRyb2xsZXINCj4gKyAgdGhhdCBpcyBiZWluZyBtYW5hZ2VkIGJ5IGEgZHJpdmVyLg0KPiAr DQo+ICsgIFRoaXMgZnVuY3Rpb24gcmV0cmlldmVzIHRoZSB1c2VyIHJlYWRhYmxlIG5hbWUgb2Yg dGhlIGNvbnRyb2xsZXIgc3BlY2lmaWVkIGJ5DQo+ICsgIENvbnRyb2xsZXJIYW5kbGUgYW5kIENo aWxkSGFuZGxlIGluIHRoZSBmb3JtIG9mIGEgVW5pY29kZSBzdHJpbmcuIElmIHRoZQ0KPiArICBk cml2ZXIgc3BlY2lmaWVkIGJ5IFRoaXMgaGFzIGEgdXNlciByZWFkYWJsZSBuYW1lIGluIHRoZSBs YW5ndWFnZSBzcGVjaWZpZWQNCj4gYnkNCj4gKyAgTGFuZ3VhZ2UsIHRoZW4gYSBwb2ludGVyIHRv IHRoZSBjb250cm9sbGVyIG5hbWUgaXMgcmV0dXJuZWQgaW4NCj4gQ29udHJvbGxlck5hbWUsDQo+ ICsgIGFuZCBFRklfU1VDQ0VTUyBpcyByZXR1cm5lZC4gIElmIHRoZSBkcml2ZXIgc3BlY2lmaWVk IGJ5IFRoaXMgaXMgbm90IGN1cnJlbnRseQ0KPiArICBtYW5hZ2luZyB0aGUgY29udHJvbGxlciBz cGVjaWZpZWQgYnkgQ29udHJvbGxlckhhbmRsZSBhbmQgQ2hpbGRIYW5kbGUsDQo+ICsgIHRoZW4g RUZJX1VOU1VQUE9SVEVEIGlzIHJldHVybmVkLiAgSWYgdGhlIGRyaXZlciBzcGVjaWZpZWQgYnkg VGhpcyBkb2VzIG5vdA0KPiArICBzdXBwb3J0IHRoZSBsYW5ndWFnZSBzcGVjaWZpZWQgYnkgTGFu 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 ZG9lcyBub3Qgc3VwcG9ydA0KPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGUg bGFuZ3VhZ2Ugc3BlY2lmaWVkIGJ5IExhbmd1YWdlLg0KPiArDQo+ICsqKi8NCj4gK0VGSV9TVEFU VVMNCj4gK0VGSUFQSQ0KPiArVXNiUm5kaXNDb21wb25lbnROYW1lR2V0Q29udHJvbGxlck5hbWUg KA0KPiArICBJTiBFRklfQ09NUE9ORU5UX05BTUVfUFJPVE9DT0wgICpUaGlzLA0KPiArICBJTiBF RklfSEFORExFICAgICAgICAgICAgICAgICAgIENvbnRyb2xsZXIsDQo+ICsgIElOIEVGSV9IQU5E TEUgICAgICAgICAgICAgICAgICAgQ2hpbGRIYW5kbGUgICAgICAgIE9QVElPTkFMLA0KPiArICBJ TiBDSEFSOCAgICAgICAgICAgICAgICAgICAgICAgICpMYW5ndWFnZSwNCj4gKyAgT1VUIENIQVIx NiAgICAgICAgICAgICAgICAgICAgICAqKkNvbnRyb2xsZXJOYW1lDQo+ICsgICkNCj4gK3sNCj4g KyAgcmV0dXJuIEVGSV9VTlNVUFBPUlRFRDsNCj4gK30NCj4gZGlmZiAtLWdpdCBhL01kZU1vZHVs ZVBrZy9CdXMvVXNiL1VzYk5ldHdvcmsvVXNiUm5kaXMvVXNiUm5kaXMuYw0KPiBiL01kZU1vZHVs ZVBrZy9CdXMvVXNiL1VzYk5ldHdvcmsvVXNiUm5kaXMvVXNiUm5kaXMuYw0KPiBuZXcgZmlsZSBt b2RlIDEwMDY0NA0KPiBpbmRleCAwMDAwMDAwMDAwLi45Yzc0ZDczZjc4DQo+IC0tLSAvZGV2L251 bGwNCj4gKysrIGIvTWRlTW9kdWxlUGtnL0J1cy9Vc2IvVXNiTmV0d29yay9Vc2JSbmRpcy9Vc2JS bmRpcy5jDQo+IEBAIC0wLDAgKzEsODg2IEBADQo+ICsvKiogQGZpbGUNCj4gKyAgVGhpcyBmaWxl IGNvbnRhaW5zIGNvZGUgZm9yIFVTQiBSZW1vdGUgTmV0d29yayBEcml2ZXINCj4gKyAgSW50ZXJm YWNlIFNwZWMuIERyaXZlciBCaW5kaW5nDQo+ICsNCj4gKyAgQ29weXJpZ2h0IChjKSAyMDIzLCBB bWVyaWNhbiBNZWdhdHJlbmRzIEludGVybmF0aW9uYWwgTExDLiBBbGwgcmlnaHRzDQo+IHJlc2Vy dmVkLjxCUj4NCj4gKyAgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEJTRC0yLUNsYXVzZS1QYXRl bnQNCj4gKyoqLw0KPiArDQo+ICsjaW5jbHVkZSAiVXNiUm5kaXMuaCINCj4gKw0KPiArRUZJX0RS SVZFUl9CSU5ESU5HX1BST1RPQ09MICBnVXNiUm5kaXNEcml2ZXJCaW5kaW5nID0gew0KPiArICBV c2JSbmRpc0RyaXZlclN1cHBvcnRlZCwNCj4gKyAgVXNiUm5kaXNEcml2ZXJTdGFydCwNCj4gKyAg VXNiUm5kaXNEcml2ZXJTdG9wLA0KPiArICBVU0JfUk5ESVNfRFJJVkVSX1ZFUlNJT04sDQo+ICsg IE5VTEwsDQo+ICsgIE5VTEwNCj4gK307DQo+ICsNCj4gKy8qKg0KPiArICBDaGVjayBpZiB0aGlz IGludGVyZmFjZSBpcyBVU0IgUm5kaXMgU3ViVHlwZQ0KPiArDQo+ICsgIEBwYXJhbVtpbl0gIFVz YklvICBBIHBvaW50ZXIgdG8gdGhlIEVGSV9VU0JfSU9fUFJPVE9DT0wgaW5zdGFuY2UuDQo+ICsN Cj4gKyAgQHJldHZhbCBUUlVFICAgVVNCIFJuZGlzIFN1YlR5cGUuDQo+ICsgIEByZXR2YWwgRkFM U0UgIE5vdCBVU0IgUm5kaXMgU3ViVHlwZS4NCj4gKw0KPiArKiovDQo+ICtCT09MRUFODQo+ICtJ c1N1cHBvcnRlZERldmljZSAoDQo+ICsgIElOIEVGSV9VU0JfSU9fUFJPVE9DT0wgICpVc2JJbw0K PiArICApDQo+ICt7DQo+ICsgIEVGSV9TVEFUVVMgICAgICAgICAgICAgICAgICAgIFN0YXR1czsN Cj4gKyAgRUZJX1VTQl9JTlRFUkZBQ0VfREVTQ1JJUFRPUiAgSW50ZXJmYWNlRGVzY3JpcHRvcjsN Cj4gKw0KPiArICBTdGF0dXMgPSBVc2JJby0+VXNiR2V0SW50ZXJmYWNlRGVzY3JpcHRvciAoVXNi SW8sICZJbnRlcmZhY2VEZXNjcmlwdG9yKTsNCj4gKyAgaWYgKEVGSV9FUlJPUiAoU3RhdHVzKSkg ew0KPiArICAgIHJldHVybiBGQUxTRTsNCj4gKyAgfQ0KPiArDQo+ICsgIC8vIENoZWNrIHNwZWNp ZmljIGRldmljZS9STkRJUyBhbmQgQ0RDLURBVEENCj4gKyAgaWYgKCgoSW50ZXJmYWNlRGVzY3Jp cHRvci5JbnRlcmZhY2VDbGFzcyA9PSAweDIpICYmDQo+ICsgICAgICAgKEludGVyZmFjZURlc2Ny aXB0b3IuSW50ZXJmYWNlU3ViQ2xhc3MgPT0gMHgyKSAmJg0KPiArICAgICAgIChJbnRlcmZhY2VE ZXNjcmlwdG9yLkludGVyZmFjZVByb3RvY29sID09IDB4RkYpKSB8fCBcDQo+ICsgICAgICAoKElu dGVyZmFjZURlc2NyaXB0b3IuSW50ZXJmYWNlQ2xhc3MgPT0gMHhFRikgJiYNCj4gKyAgICAgICAo SW50ZXJmYWNlRGVzY3JpcHRvci5JbnRlcmZhY2VTdWJDbGFzcyA9PSAweDQpICYmDQo+ICsgICAg ICAgKEludGVyZmFjZURlc2NyaXB0b3IuSW50ZXJmYWNlUHJvdG9jb2wgPT0gMHgxKSkgfHwgXA0K PiArICAgICAgKChJbnRlcmZhY2VEZXNjcmlwdG9yLkludGVyZmFjZUNsYXNzID09IDB4QSkgJiYN Cj4gKyAgICAgICAoSW50ZXJmYWNlRGVzY3JpcHRvci5JbnRlcmZhY2VTdWJDbGFzcyA9PSAweDAp ICYmDQo+ICsgICAgICAgKEludGVyZmFjZURlc2NyaXB0b3IuSW50ZXJmYWNlUHJvdG9jb2wgPT0g MHgwMCkpDQo+ICsgICAgICApDQo+ICsgIHsNCj4gKyAgICByZXR1cm4gVFJVRTsNCj4gKyAgfQ0K PiArDQo+ICsgIHJldHVybiBGQUxTRTsNCj4gK30NCj4gKw0KPiArLyoqDQo+ICsgIENoZWNrIGlm IHRoaXMgaW50ZXJmYWNlIGlzIFVTQiBSbmRpcyBTdWJUeXBlIGJ1dCBub3QgQ0RDIERhdGEgaW50 ZXJmYWNlDQo+ICsNCj4gKyAgQHBhcmFtW2luXSAgVXNiSW8gIEEgcG9pbnRlciB0byB0aGUgRUZJ X1VTQl9JT19QUk9UT0NPTCBpbnN0YW5jZS4NCj4gKw0KPiArICBAcmV0dmFsIFRSVUUgICBVU0Ig Um5kaXMgU3ViVHlwZS4NCj4gKyAgQHJldHZhbCBGQUxTRSAgTm90IFVTQiBSbmRpcyBTdWJUeXBl Lg0KPiArKiovDQo+ICtCT09MRUFODQo+ICtJc1JuZGlzSW50ZXJmYWNlICgNCj4gKyAgSU4gRUZJ X1VTQl9JT19QUk9UT0NPTCAgKlVzYklvDQo+ICsgICkNCj4gK3sNCj4gKyAgRUZJX1NUQVRVUyAg ICAgICAgICAgICAgICAgICAgU3RhdHVzOw0KPiArICBFRklfVVNCX0lOVEVSRkFDRV9ERVNDUklQ VE9SICBJbnRlcmZhY2VEZXNjcmlwdG9yOw0KPiArDQo+ICsgIFN0YXR1cyA9IFVzYklvLT5Vc2JH ZXRJbnRlcmZhY2VEZXNjcmlwdG9yIChVc2JJbywgJkludGVyZmFjZURlc2NyaXB0b3IpOw0KPiAr ICBpZiAoRUZJX0VSUk9SIChTdGF0dXMpKSB7DQo+ICsgICAgcmV0dXJuIEZBTFNFOw0KPiArICB9 DQo+ICsNCj4gKyAgLy8gQ2hlY2sgZm9yIHNwZWNpZmljIGRldmljZS9STkRJUyBhbmQgQ0RDLURB VEENCj4gKyAgaWYgKCgoSW50ZXJmYWNlRGVzY3JpcHRvci5JbnRlcmZhY2VDbGFzcyA9PSAweDIp ICYmDQo+ICsgICAgICAgKEludGVyZmFjZURlc2NyaXB0b3IuSW50ZXJmYWNlU3ViQ2xhc3MgPT0g MHgyKSAmJg0KPiArICAgICAgIChJbnRlcmZhY2VEZXNjcmlwdG9yLkludGVyZmFjZVByb3RvY29s ID09IDB4RkYpKSB8fCBcDQo+ICsgICAgICAoKEludGVyZmFjZURlc2NyaXB0b3IuSW50ZXJmYWNl Q2xhc3MgPT0gMHhFRikgJiYNCj4gKyAgICAgICAoSW50ZXJmYWNlRGVzY3JpcHRvci5JbnRlcmZh Y2VTdWJDbGFzcyA9PSAweDQpICYmDQo+ICsgICAgICAgKEludGVyZmFjZURlc2NyaXB0b3IuSW50 ZXJmYWNlUHJvdG9jb2wgPT0gMHgxKSkNCj4gKyAgICAgICkNCj4gKyAgew0KPiArICAgIHJldHVy biBUUlVFOw0KPiArICB9DQo+ICsNCj4gKyAgcmV0dXJuIEZBTFNFOw0KPiArfQ0KPiArDQo+ICsv KioNCj4gKyAgQ2hlY2sgaWYgdGhlIFVTQiBSTkRJUyBhbmQgVVNCIENEQyBEYXRhIGludGVyZmFj ZXMgYXJlIGZyb20gdGhlIHNhbWUNCj4gZGV2aWNlLg0KPiArDQo+ICsgIEBwYXJhbVtpbl0gIFVz YlJuZGlzRGF0YVBhdGggIEEgcG9pbnRlciB0byB0aGUNCj4gRUZJX0RFVklDRV9QQVRIX1BST1RP Q09MIGluc3RhbmNlLg0KPiArICBAcGFyYW1baW5dICBVc2JDZGNEYXRhUGF0aCAgICBBIHBvaW50 ZXIgdG8gdGhlDQo+IEVGSV9ERVZJQ0VfUEFUSF9QUk9UT0NPTCBpbnN0YW5jZS4NCj4gKw0KPiAr ICBAcmV0dmFsIEVGSV9TVUNDRVNTICAgICAgICAgICBJcyB0aGUgc2FtZSBkZXZpY2UuDQo+ICsg IEByZXR2YWwgRUZJX1VOU1VQUE9SVEVEICAgICAgIElzIG5vdCB0aGUgc2FtZSBkZXZpY2UuDQo+ ICsNCj4gKyoqLw0KPiArRUZJX1NUQVRVUw0KPiArSXNTYW1lRGV2aWNlICgNCj4gKyAgSU4gIEVG SV9ERVZJQ0VfUEFUSF9QUk9UT0NPTCAgKlVzYlJuZGlzRGF0YVBhdGgsDQo+ICsgIElOICBFRklf REVWSUNFX1BBVEhfUFJPVE9DT0wgICpVc2JDZGNEYXRhUGF0aA0KPiArICApDQo+ICt7DQo+ICsg IERFQlVHICgoREVCVUdfVkVSQk9TRSwgIklzU2FtZURldmljZSBFbnRyeSBcbiIpKTsNCj4gKyAg d2hpbGUgKDEpIHsNCj4gKyAgICBpZiAoSXNEZXZpY2VQYXRoRW5kIChOZXh0RGV2aWNlUGF0aE5v ZGUgKFVzYlJuZGlzRGF0YVBhdGgpKSkgew0KPiArICAgICAgaWYgKCgoVVNCX0RFVklDRV9QQVRI ICopVXNiUm5kaXNEYXRhUGF0aCktPlBhcmVudFBvcnROdW1iZXIgPT0NCj4gKyAgICAgICAgICAo KFVTQl9ERVZJQ0VfUEFUSCAqKVVzYkNkY0RhdGFQYXRoKS0+UGFyZW50UG9ydE51bWJlcikNCj4g KyAgICAgIHsNCj4gKyAgICAgICAgcmV0dXJuIEVGSV9TVUNDRVNTOw0KPiArICAgICAgfSBlbHNl IHsNCj4gKyAgICAgICAgcmV0dXJuIEVGSV9VTlNVUFBPUlRFRDsNCj4gKyAgICAgIH0NCj4gKyAg ICB9IGVsc2Ugew0KPiArICAgICAgaWYgKENvbXBhcmVNZW0gKFVzYkNkY0RhdGFQYXRoLCBVc2JS bmRpc0RhdGFQYXRoLCBzaXplb2YNCj4gKEVGSV9ERVZJQ0VfUEFUSF9QUk9UT0NPTCkpICE9IDAp IHsNCj4gKyAgICAgICAgcmV0dXJuIEVGSV9VTlNVUFBPUlRFRDsNCj4gKyAgICAgIH0NCj4gKw0K PiArICAgICAgVXNiUm5kaXNEYXRhUGF0aCA9IE5leHREZXZpY2VQYXRoTm9kZSAoVXNiUm5kaXNE YXRhUGF0aCk7DQo+ICsgICAgICBVc2JDZGNEYXRhUGF0aCAgID0gTmV4dERldmljZVBhdGhOb2Rl IChVc2JDZGNEYXRhUGF0aCk7DQo+ICsgICAgfQ0KPiArICB9DQo+ICsNCj4gKyAgREVCVUcgKChE RUJVR19WRVJCT1NFLCAiSXNTYW1lRGV2aWNlIEV4aXQgXG4iKSk7DQo+ICt9DQo+ICsNCj4gKy8q Kg0KPiArICBDaGVjayBpZiB0aGUgVVNCIENEQyBEYXRhKFVzYklvKSBpbnN0YWxsZWQgYW5kIHJl dHVybiBVU0IgQ0RDIERhdGEgSGFuZGxlLg0KPiArDQo+ICsgIEBwYXJhbVtpbl0gIFVzYklvICBB IHBvaW50ZXIgdG8gdGhlIEVGSV9VU0JfSU9fUFJPVE9DT0wgaW5zdGFuY2UuDQo+ICsNCj4gKyAg QHJldHZhbCBUUlVFICAgICAgICAgICAgICBVU0IgQ0RDIERhdGEoVXNiSW8pIGluc3RhbGxlZC4N Cj4gKyAgQHJldHZhbCBGQUxTRSAgICAgICAgICAgICBVU0IgQ0RDIERhdGEoVXNiSW8pIGRpZCBu b3QgaW5zdGFsbGVkLg0KPiArDQo+ICsqKi8NCj4gK0JPT0xFQU4NCj4gK0lzVXNiQ2RjRGF0YSAo DQo+ICsgIElOIEVGSV9VU0JfSU9fUFJPVE9DT0wgICpVc2JJbw0KPiArICApDQo+ICt7DQo+ICsg IEVGSV9TVEFUVVMgICAgICAgICAgICAgICAgICAgIFN0YXR1czsNCj4gKyAgRUZJX1VTQl9JTlRF UkZBQ0VfREVTQ1JJUFRPUiAgSW50ZXJmYWNlRGVzY3JpcHRvcjsNCj4gKw0KPiArICBTdGF0dXMg PSBVc2JJby0+VXNiR2V0SW50ZXJmYWNlRGVzY3JpcHRvciAoVXNiSW8sICZJbnRlcmZhY2VEZXNj cmlwdG9yKTsNCj4gKyAgaWYgKEVGSV9FUlJPUiAoU3RhdHVzKSkgew0KPiArICAgIHJldHVybiBG QUxTRTsNCj4gKyAgfQ0KPiArDQo+ICsgIC8vIENoZWNrIGZvciBDREMtREFUQQ0KPiArICBpZiAo KEludGVyZmFjZURlc2NyaXB0b3IuSW50ZXJmYWNlQ2xhc3MgPT0gMHhBKSAmJg0KPiArICAgICAg KEludGVyZmFjZURlc2NyaXB0b3IuSW50ZXJmYWNlU3ViQ2xhc3MgPT0gMHgwKSAmJg0KPiArICAg ICAgKEludGVyZmFjZURlc2NyaXB0b3IuSW50ZXJmYWNlUHJvdG9jb2wgPT0gMHgwKSkNCj4gKyAg ew0KPiArICAgIHJldHVybiBUUlVFOw0KPiArICB9DQo+ICsNCj4gKyAgcmV0dXJuIEZBTFNFOw0K PiArfQ0KPiArDQo+ICsvKioNCj4gKyAgQ2hlY2sgaWYgdGhlIFVTQiBSbmRpcyhVc2JJbykgaW5z dGFsbGVkDQo+ICsNCj4gKyAgQHBhcmFtW2luXSAgVXNiSW8gICAgICAgIEEgcG9pbnRlciB0byB0 aGUgRUZJX1VTQl9JT19QUk9UT0NPTCBpbnN0YW5jZS4NCj4gKw0KPiArICBAcmV0dmFsIFRSVUUg ICAgICAgICAgICAgIFVTQiBSbmRpcyhVc2JJbykgaW5zdGFsbGVkLg0KPiArICBAcmV0dmFsIEZB TFNFICAgICAgICAgICAgIFVTQiBSbmRpcyhVc2JJbykgZGlkIG5vdCBpbnN0YWxsZWQuDQo+ICsN Cj4gKyoqLw0KPiArQk9PTEVBTg0KPiArSXNVc2JSbmRpcyAoDQo+ICsgIElOIEVGSV9VU0JfSU9f UFJPVE9DT0wgICpVc2JJbw0KPiArICApDQo+ICt7DQo+ICsgIEVGSV9TVEFUVVMgICAgICAgICAg ICAgICAgICAgIFN0YXR1czsNCj4gKyAgRUZJX1VTQl9JTlRFUkZBQ0VfREVTQ1JJUFRPUiAgSW50 ZXJmYWNlRGVzY3JpcHRvcjsNCj4gKw0KPiArICBTdGF0dXMgPSBVc2JJby0+VXNiR2V0SW50ZXJm YWNlRGVzY3JpcHRvciAoVXNiSW8sICZJbnRlcmZhY2VEZXNjcmlwdG9yKTsNCj4gKyAgaWYgKEVG SV9FUlJPUiAoU3RhdHVzKSkgew0KPiArICAgIHJldHVybiBGQUxTRTsNCj4gKyAgfQ0KPiArDQo+ ICsgIC8vIENoZWNrIGZvciBSbmRpcw0KPiArICBpZiAoKEludGVyZmFjZURlc2NyaXB0b3IuSW50 ZXJmYWNlQ2xhc3MgPT0gMHgyKSAmJg0KPiArICAgICAgKEludGVyZmFjZURlc2NyaXB0b3IuSW50 ZXJmYWNlU3ViQ2xhc3MgPT0gMHgyKSAmJg0KPiArICAgICAgKEludGVyZmFjZURlc2NyaXB0b3Iu SW50ZXJmYWNlUHJvdG9jb2wgPT0gMHhGRikpDQo+ICsgIHsNCj4gKyAgICByZXR1cm4gVFJVRTsN Cj4gKyAgfQ0KPiArDQo+ICsgIHJldHVybiBGQUxTRTsNCj4gK30NCj4gKw0KPiArLyoqDQo+ICsg IENvbnRyb2wgY29tZXMgaGVyZSB3aGVuIGEgQ0RDIGRldmljZSBpcyBmb3VuZC5DaGVjayBpZiBh IFJORElTIGludGVyZmFjZSBpcw0KPiBhbHJlYWR5IGZvdW5kIGZvciB0aGlzIGRldmljZSBvciBu b3QuDQo+ICsgIEZvciBvbmUgZGV2aWNlIHR3byBVU0JJTyB3aWxsIGJlIGluc3RhbGxlZCBlYWNo IGZvciBDREMgYW5kIFJORElTIGludGVyZmFjZS4NCj4gKw0KPiArICBAcGFyYW1baW5dICBVc2JF dGhQYXRoICAgICAgICBBIHBvaW50ZXIgdG8gdGhlIEVGSV9ERVZJQ0VfUEFUSF9QUk9UT0NPTA0K PiBpbnN0YW5jZS4NCj4gKyAgQHBhcmFtW291dF0gVXNiUm5kaXNEZXZpY2UgICAgQSBwb2ludGVy IHRvIHRoZSBVU0JfUk5ESVNfREVWSUNFIERhdGEuDQo+ICsNCj4gKyAgQHJldHZhbCBFRklfU1VD Q0VTUyAgICAgICAgICAgICBUaGUgVVNCX1JORElTX0RFVklDRSBtYXRjaGluZyB0aGlzIENEQw0K PiBEYXRhIGlzIGZvdW5kLg0KPiArICBAcmV0dmFsIEVGSV9OT1RfRk9VTkQgICAgICAgICAgIFRo ZSBVU0JfUk5ESVNfREVWSUNFIG1hdGNoaW5nIHRoaXMgQ0RDDQo+IERhdGEgaXMgbm90IGZvdW5k Lg0KPiArDQo+ICsqKi8NCj4gK0VGSV9TVEFUVVMNCj4gK1VwZGF0ZVJuZGlzRGV2aWNlICgNCj4g KyAgSU4gIEVGSV9ERVZJQ0VfUEFUSF9QUk9UT0NPTCAgKlVzYkNkY0RhdGFQYXRoLA0KPiArICBP VVQgVVNCX1JORElTX0RFVklDRSAgICAgICAgICAqKlVzYlJuZGlzRGV2aWNlDQo+ICsgICkNCj4g K3sNCj4gKyAgRUZJX1NUQVRVUyAgICAgICAgICAgICAgICAgICBTdGF0dXM7DQo+ICsgIFVJTlRO ICAgICAgICAgICAgICAgICAgICAgICAgSW5kZXg7DQo+ICsgIFVJTlROICAgICAgICAgICAgICAg ICAgICAgICAgSGFuZGxlQ291bnQ7DQo+ICsgIEVGSV9IQU5ETEUgICAgICAgICAgICAgICAgICAg KkhhbmRsZUJ1ZmZlcjsNCj4gKyAgRURLSUlfVVNCX0VUSEVSTkVUX1BST1RPQ09MICAqVXNiRXRo RGV2aWNlOw0KPiArICBFRklfREVWSUNFX1BBVEhfUFJPVE9DT0wgICAgICpVc2JSbmRpc0RhdGFQ YXRoOw0KPiArICBFRklfVVNCX0lPX1BST1RPQ09MICAgICAgICAgICpVc2JJbzsNCj4gKyAgQk9P TEVBTiAgICAgICAgICAgICAgICAgICAgICBJc1JuZGlzSW50ZXJmYWNlRmxhZzsNCj4gKw0KPiAr ICBJc1JuZGlzSW50ZXJmYWNlRmxhZyA9IEZBTFNFOw0KPiArDQo+ICsgIFN0YXR1cyA9IGdCUy0+ TG9jYXRlSGFuZGxlQnVmZmVyICgNCj4gKyAgICAgICAgICAgICAgICAgIEJ5UHJvdG9jb2wsDQo+ ICsgICAgICAgICAgICAgICAgICAmZ0Vka0lJVXNiRXRoUHJvdG9jb2xHdWlkLA0KPiArICAgICAg ICAgICAgICAgICAgTlVMTCwNCj4gKyAgICAgICAgICAgICAgICAgICZIYW5kbGVDb3VudCwNCj4g KyAgICAgICAgICAgICAgICAgICZIYW5kbGVCdWZmZXINCj4gKyAgICAgICAgICAgICAgICAgICk7 DQo+ICsgIGlmIChFRklfRVJST1IgKFN0YXR1cykpIHsNCj4gKyAgICByZXR1cm4gU3RhdHVzOw0K PiArICB9DQo+ICsNCj4gKyAgZm9yIChJbmRleCA9IDA7IEluZGV4IDwgSGFuZGxlQ291bnQ7IElu ZGV4KyspIHsNCj4gKyAgICBTdGF0dXMgPSBnQlMtPkhhbmRsZVByb3RvY29sICgNCj4gKyAgICAg ICAgICAgICAgICAgICAgSGFuZGxlQnVmZmVyW0luZGV4XSwNCj4gKyAgICAgICAgICAgICAgICAg ICAgJmdFZGtJSVVzYkV0aFByb3RvY29sR3VpZCwNCj4gKyAgICAgICAgICAgICAgICAgICAgKFZP SUQgKiopJlVzYkV0aERldmljZQ0KPiArICAgICAgICAgICAgICAgICAgICApOw0KPiArICAgIGlm IChFRklfRVJST1IgKFN0YXR1cykpIHsNCj4gKyAgICAgIGNvbnRpbnVlOw0KPiArICAgIH0NCj4g Kw0KPiArICAgIFN0YXR1cyA9IGdCUy0+SGFuZGxlUHJvdG9jb2wgKA0KPiArICAgICAgICAgICAg ICAgICAgICBIYW5kbGVCdWZmZXJbSW5kZXhdLA0KPiArICAgICAgICAgICAgICAgICAgICAmZ0Vm aVVzYklvUHJvdG9jb2xHdWlkLA0KPiArICAgICAgICAgICAgICAgICAgICAoVk9JRCAqKikmVXNi SW8NCj4gKyAgICAgICAgICAgICAgICAgICAgKTsNCj4gKyAgICBpZiAoRUZJX0VSUk9SIChTdGF0 dXMpKSB7DQo+ICsgICAgICBjb250aW51ZTsNCj4gKyAgICB9DQo+ICsNCj4gKyAgICBJc1JuZGlz SW50ZXJmYWNlRmxhZyA9IElzUm5kaXNJbnRlcmZhY2UgKFVzYklvKTsNCj4gKyAgICBpZiAoSXNS bmRpc0ludGVyZmFjZUZsYWcgPT0gRkFMU0UpIHsNCj4gKyAgICAgIGNvbnRpbnVlOw0KPiArICAg IH0NCj4gKw0KPiArICAgIFN0YXR1cyA9IGdCUy0+SGFuZGxlUHJvdG9jb2wgKA0KPiArICAgICAg ICAgICAgICAgICAgICBIYW5kbGVCdWZmZXJbSW5kZXhdLA0KPiArICAgICAgICAgICAgICAgICAg ICAmZ0VmaURldmljZVBhdGhQcm90b2NvbEd1aWQsDQo+ICsgICAgICAgICAgICAgICAgICAgIChW T0lEICoqKSZVc2JSbmRpc0RhdGFQYXRoDQo+ICsgICAgICAgICAgICAgICAgICAgICk7DQo+ICsg ICAgaWYgKEVGSV9FUlJPUiAoU3RhdHVzKSkgew0KPiArICAgICAgY29udGludWU7DQo+ICsgICAg fQ0KPiArDQo+ICsgICAgU3RhdHVzID0gSXNTYW1lRGV2aWNlIChVc2JSbmRpc0RhdGFQYXRoLCBV c2JDZGNEYXRhUGF0aCk7DQo+ICsNCj4gKyAgICBERUJVRyAoKERFQlVHX1ZFUkJPU0UsICJSbmRp cyBJc1NhbWVEZXZpY2UgJXJcbiIsIFN0YXR1cykpOw0KPiArDQo+ICsgICAgaWYgKCFFRklfRVJS T1IgKFN0YXR1cykpIHsNCj4gKyAgICAgICpVc2JSbmRpc0RldmljZSA9IFVTQl9STkRJU19ERVZJ Q0VfRlJPTV9USElTIChVc2JFdGhEZXZpY2UpOw0KPiArICAgICAgRnJlZVBvb2wgKEhhbmRsZUJ1 ZmZlcik7DQo+ICsgICAgICByZXR1cm4gRUZJX1NVQ0NFU1M7DQo+ICsgICAgfQ0KPiArICB9ICAg Ly8gRW5kIG9mIEZvciBsb29wDQo+ICsNCj4gKyAgRnJlZVBvb2wgKEhhbmRsZUJ1ZmZlcik7DQo+ ICsgIHJldHVybiBFRklfTk9UX0ZPVU5EOw0KPiArfQ0KPiArDQo+ICsvKioNCj4gKw0KPiArICBG b3IgdGhlIGdpdmVuIFJuZGlzIERldmljZSwgZmluZCBhIG1hdGNoaW5nIENEQyBkZXZpY2UgYWxy ZWFkeSBleGlzdHMgb3Igbm90Lg0KPiBJZiBmb3VuZCB1cGRhdGUgdGhlIGhhbmRsZQ0KPiArICBh bmQgVXNiSU8gcHJvdG9jb2wuDQo+ICsNCj4gKyAgQHBhcmFtW2luXSAgVXNiUm5kaXNEZXZpY2Ug ICAgICAgIEEgcG9pbnRlciB0byB0aGUgVVNCX1JORElTX0RFVklDRSBkYXRhLg0KPiArDQo+ICsq Ki8NCj4gK1ZPSUQNCj4gK0ZpbmRNYXRjaGluZ0NkY0RhdGEgKA0KPiArICBJTiBVU0JfUk5ESVNf REVWSUNFICAqVXNiUm5kaXNEZXZpY2UNCj4gKyAgKQ0KPiArew0KPiArICBFRklfU1RBVFVTICAg ICAgICAgICAgICAgIFN0YXR1czsNCj4gKyAgVUlOVE4gICAgICAgICAgICAgICAgICAgICBJbmRl eDsNCj4gKyAgVUlOVE4gICAgICAgICAgICAgICAgICAgICBIYW5kbGVDb3VudDsNCj4gKyAgRUZJ X0hBTkRMRSAgICAgICAgICAgICAgICAqSGFuZGxlQnVmZmVyOw0KPiArICBFRklfVVNCX0lPX1BS T1RPQ09MICAgICAgICpVc2JJbzsNCj4gKyAgRUZJX0RFVklDRV9QQVRIX1BST1RPQ09MICAqVXNi Um5kaXNEYXRhUGF0aDsNCj4gKyAgRUZJX0RFVklDRV9QQVRIX1BST1RPQ09MICAqVXNiQ2RjRGF0 YVBhdGg7DQo+ICsNCj4gKyAgLy8gRmluZCB0aGUgcGFyZW50IFJORElTIGFuZCB1cGRhdGUgdGhl IFVzYklvIGZvciB0aGUgQ0RDIGRldmljZQ0KPiArICBTdGF0dXMgPSBnQlMtPkhhbmRsZVByb3Rv Y29sICgNCj4gKyAgICAgICAgICAgICAgICAgIFVzYlJuZGlzRGV2aWNlLT5Vc2JSbmRpc0hhbmRs ZSwNCj4gKyAgICAgICAgICAgICAgICAgICZnRWZpRGV2aWNlUGF0aFByb3RvY29sR3VpZCwNCj4g KyAgICAgICAgICAgICAgICAgIChWT0lEICoqKSZVc2JSbmRpc0RhdGFQYXRoDQo+ICsgICAgICAg ICAgICAgICAgICApOw0KPiArDQo+ICsgIGlmIChFRklfRVJST1IgKFN0YXR1cykpIHsNCj4gKyAg ICByZXR1cm47DQo+ICsgIH0NCj4gKw0KPiArICBTdGF0dXMgPSBnQlMtPkxvY2F0ZUhhbmRsZUJ1 ZmZlciAoDQo+ICsgICAgICAgICAgICAgICAgICBCeVByb3RvY29sLA0KPiArICAgICAgICAgICAg ICAgICAgJmdFZmlVc2JJb1Byb3RvY29sR3VpZCwNCj4gKyAgICAgICAgICAgICAgICAgIE5VTEws DQo+ICsgICAgICAgICAgICAgICAgICAmSGFuZGxlQ291bnQsDQo+ICsgICAgICAgICAgICAgICAg ICAmSGFuZGxlQnVmZmVyDQo+ICsgICAgICAgICAgICAgICAgICApOw0KPiArICBpZiAoRUZJX0VS Uk9SIChTdGF0dXMpKSB7DQo+ICsgICAgcmV0dXJuOw0KPiArICB9DQo+ICsNCj4gKyAgZm9yIChJ bmRleCA9IDA7IEluZGV4IDwgSGFuZGxlQ291bnQ7IEluZGV4KyspIHsNCj4gKyAgICBTdGF0dXMg PSBnQlMtPkhhbmRsZVByb3RvY29sICgNCj4gKyAgICAgICAgICAgICAgICAgICAgSGFuZGxlQnVm ZmVyW0luZGV4XSwNCj4gKyAgICAgICAgICAgICAgICAgICAgJmdFZmlVc2JJb1Byb3RvY29sR3Vp ZCwNCj4gKyAgICAgICAgICAgICAgICAgICAgKFZPSUQgKiopJlVzYklvDQo+ICsgICAgICAgICAg ICAgICAgICAgICk7DQo+ICsgICAgQVNTRVJUX0VGSV9FUlJPUiAoU3RhdHVzKTsNCj4gKw0KPiAr ICAgIGlmIChJc1VzYkNkY0RhdGEgKFVzYklvKSkgew0KPiArICAgICAgREVCVUcgKChERUJVR19W RVJCT1NFLCAiUm5kaXMgRmluZE1hdGNoaW5nQ2RjRGF0YSBDRENEYXRhDQo+IGludGVyZmFjZSBm b3VuZFxuIikpOw0KPiArDQo+ICsgICAgICBTdGF0dXMgPSBnQlMtPkhhbmRsZVByb3RvY29sICgN Cj4gKyAgICAgICAgICAgICAgICAgICAgICBIYW5kbGVCdWZmZXJbSW5kZXhdLA0KPiArICAgICAg ICAgICAgICAgICAgICAgICZnRWZpRGV2aWNlUGF0aFByb3RvY29sR3VpZCwNCj4gKyAgICAgICAg ICAgICAgICAgICAgICAoVk9JRCAqKikmVXNiQ2RjRGF0YVBhdGgNCj4gKyAgICAgICAgICAgICAg ICAgICAgICApOw0KPiArICAgICAgaWYgKEVGSV9FUlJPUiAoU3RhdHVzKSkgew0KPiArICAgICAg ICBERUJVRyAoKERFQlVHX1ZFUkJPU0UsICJSbmRpcyBDRENEYXRhIERldmljZVBhdGggbm90IGZv dW5kXG4iKSk7DQo+ICsgICAgICAgIEZyZWVQb29sIChIYW5kbGVCdWZmZXIpOw0KPiArICAgICAg ICByZXR1cm47DQo+ICsgICAgICB9DQo+ICsNCj4gKyAgICAgIFN0YXR1cyA9IElzU2FtZURldmlj ZSAoVXNiUm5kaXNEYXRhUGF0aCwgVXNiQ2RjRGF0YVBhdGgpOw0KPiArICAgICAgREVCVUcgKChE RUJVR19WRVJCT1NFLCAiUm5kaXMgSXNTYW1lRGV2aWNlICVyXG4iLCBTdGF0dXMpKTsNCj4gKyAg ICAgIGlmICghRUZJX0VSUk9SIChTdGF0dXMpKSB7DQo+ICsgICAgICAgIFVzYlJuZGlzRGV2aWNl LT5Vc2JDZGNEYXRhSGFuZGxlID0gSGFuZGxlQnVmZmVyW0luZGV4XTsNCj4gKyAgICAgICAgVXNi Um5kaXNEZXZpY2UtPlVzYklvQ2RjRGF0YSAgICAgPSBVc2JJbzsNCj4gKyAgICAgICAgR2V0RW5k cG9pbnQgKFVzYlJuZGlzRGV2aWNlLT5Vc2JJb0NkY0RhdGEsIFVzYlJuZGlzRGV2aWNlKTsNCj4g KyAgICAgICAgRnJlZVBvb2wgKEhhbmRsZUJ1ZmZlcik7DQo+ICsgICAgICAgIHJldHVybjsNCj4g KyAgICAgIH0NCj4gKyAgICB9DQo+ICsgIH0gICAvLyBFbmQgb2YgRm9yIGxvb3ANCj4gKw0KPiAr ICBGcmVlUG9vbCAoSGFuZGxlQnVmZmVyKTsNCj4gK30NCj4gKw0KPiArLyoqDQo+ICsNCj4gKyAg Rm9yIHRoZSBnaXZlbiBVc2JJbyBDZGNEYXRhLCBmaW5kIGEgbWF0Y2hpbmcgUk5ESVMgZGV2aWNl IGFscmVhZHkgZXhpc3RzIG9yDQo+IG5vdC4NCj4gKw0KPiArICBAcGFyYW1baW5dICBDZGNIYW5k bGUgICAgICAgQSBwb2ludGVyIHRvIHRoZSBFRklfSEFORExFIGZvciBVU0IgQ0RDIERhdGEuDQo+ ICsgIEBwYXJhbVtvdXRdIENkY1VzYklvICAgICAgICBBIHBvaW50ZXIgZm9yIHJldHJpZXZlIHRo ZQ0KPiBFRklfVVNCX0lPX1BST1RPQ09MIGluc3RhbmNlLg0KPiArICBAcGFyYW1bb3V0XSBSbmRp c0hhbmRsZSAgICAgQSBwb2ludGVyIGZvciByZXRyaWV2ZSB0aGUgaGFuZGxlIG9mIFJORElTDQo+ IGRldmljZS4NCj4gKw0KPiArICBAcmV0dmFsIEVGSV9TVUNDRVNTICAgICAgICAgICAgIFRoZSBV U0JfUk5ESVNfREVWSUNFIG1hdGNoaW5nIHRoaXMgQ0RDDQo+IERhdGEgaXMgZm91bmQuDQo+ICsg IEByZXR2YWwgRUZJX05PVF9GT1VORCAgICAgICAgICAgVGhlIFVTQl9STkRJU19ERVZJQ0UgbWF0 Y2hpbmcgdGhpcyBDREMNCj4gRGF0YSBpcyBub3QgZm91bmQuDQo+ICsNCj4gKyoqLw0KPiArRUZJ X1NUQVRVUw0KPiArRUZJQVBJDQo+ICtGaW5kTWF0Y2hpbmdSbmRpc0RldiAoDQo+ICsgIElOICBF RklfSEFORExFICAgICAgICAgICBDZGNIYW5kbGUsDQo+ICsgIE9VVCBFRklfVVNCX0lPX1BST1RP Q09MICAqKkNkY1VzYklvLA0KPiArICBPVVQgRUZJX0hBTkRMRSAgICAgICAgICAgKlJuZGlzSGFu ZGxlDQo+ICsgICkNCj4gK3sNCj4gKyAgRUZJX1NUQVRVUyAgICAgICAgICAgICAgICBTdGF0dXM7 DQo+ICsgIFVJTlROICAgICAgICAgICAgICAgICAgICAgSW5kZXg7DQo+ICsgIFVJTlROICAgICAg ICAgICAgICAgICAgICAgSGFuZGxlQ291bnQ7DQo+ICsgIEVGSV9IQU5ETEUgICAgICAgICAgICAg ICAgKkhhbmRsZUJ1ZmZlcjsNCj4gKyAgRUZJX1VTQl9JT19QUk9UT0NPTCAgICAgICAqVXNiSW87 DQo+ICsgIEVGSV9ERVZJQ0VfUEFUSF9QUk9UT0NPTCAgKlVzYlJuZGlzRGF0YVBhdGg7DQo+ICsg IEVGSV9ERVZJQ0VfUEFUSF9QUk9UT0NPTCAgKlVzYkNkY0RhdGFQYXRoOw0KPiArDQo+ICsgIC8v IEZpbmQgdGhlIHBhcmVudCBSTkRJUyBhbmQgdXBkYXRlIHRoZSBVc2JJbyBmb3IgdGhlIENEQyBk ZXZpY2UNCj4gKyAgU3RhdHVzID0gZ0JTLT5IYW5kbGVQcm90b2NvbCAoDQo+ICsgICAgICAgICAg ICAgICAgICBDZGNIYW5kbGUsDQo+ICsgICAgICAgICAgICAgICAgICAmZ0VmaURldmljZVBhdGhQ cm90b2NvbEd1aWQsDQo+ICsgICAgICAgICAgICAgICAgICAoVk9JRCAqKikmVXNiQ2RjRGF0YVBh dGgNCj4gKyAgICAgICAgICAgICAgICAgICk7DQo+ICsNCj4gKyAgaWYgKEVGSV9FUlJPUiAoU3Rh dHVzKSkgew0KPiArICAgIHJldHVybiBTdGF0dXM7DQo+ICsgIH0NCj4gKw0KPiArICBTdGF0dXMg PSBnQlMtPkxvY2F0ZUhhbmRsZUJ1ZmZlciAoDQo+ICsgICAgICAgICAgICAgICAgICBCeVByb3Rv Y29sLA0KPiArICAgICAgICAgICAgICAgICAgJmdFZmlVc2JJb1Byb3RvY29sR3VpZCwNCj4gKyAg ICAgICAgICAgICAgICAgIE5VTEwsDQo+ICsgICAgICAgICAgICAgICAgICAmSGFuZGxlQ291bnQs DQo+ICsgICAgICAgICAgICAgICAgICAmSGFuZGxlQnVmZmVyDQo+ICsgICAgICAgICAgICAgICAg ICApOw0KPiArICBpZiAoRUZJX0VSUk9SIChTdGF0dXMpKSB7DQo+ICsgICAgcmV0dXJuIFN0YXR1 czsNCj4gKyAgfQ0KPiArDQo+ICsgIGZvciAoSW5kZXggPSAwOyBJbmRleCA8IEhhbmRsZUNvdW50 OyBJbmRleCsrKSB7DQo+ICsgICAgU3RhdHVzID0gZ0JTLT5IYW5kbGVQcm90b2NvbCAoDQo+ICsg ICAgICAgICAgICAgICAgICAgIEhhbmRsZUJ1ZmZlcltJbmRleF0sDQo+ICsgICAgICAgICAgICAg ICAgICAgICZnRWZpVXNiSW9Qcm90b2NvbEd1aWQsDQo+ICsgICAgICAgICAgICAgICAgICAgIChW T0lEICoqKSZVc2JJbw0KPiArICAgICAgICAgICAgICAgICAgICApOw0KPiArICAgIGlmIChFRklf RVJST1IgKFN0YXR1cykpIHsNCj4gKyAgICAgIHJldHVybiBTdGF0dXM7DQo+ICsgICAgfQ0KPiAr DQo+ICsgICAgaWYgKElzVXNiUm5kaXMgKFVzYklvKSkgew0KPiArICAgICAgU3RhdHVzID0gZ0JT LT5IYW5kbGVQcm90b2NvbCAoDQo+ICsgICAgICAgICAgICAgICAgICAgICAgSGFuZGxlQnVmZmVy W0luZGV4XSwNCj4gKyAgICAgICAgICAgICAgICAgICAgICAmZ0VmaURldmljZVBhdGhQcm90b2Nv bEd1aWQsDQo+ICsgICAgICAgICAgICAgICAgICAgICAgKFZPSUQgKiopJlVzYlJuZGlzRGF0YVBh dGgNCj4gKyAgICAgICAgICAgICAgICAgICAgICApOw0KPiArICAgICAgaWYgKEVGSV9FUlJPUiAo U3RhdHVzKSkgew0KPiArICAgICAgICBERUJVRyAoKERFQlVHX0VSUk9SLCAiVXNiIFJuZGlzIERl dmljZVBhdGggbm90IGZvdW5kXG4iKSk7DQo+ICsgICAgICAgIGJyZWFrOw0KPiArICAgICAgfQ0K PiArDQo+ICsgICAgICBTdGF0dXMgPSBJc1NhbWVEZXZpY2UgKFVzYlJuZGlzRGF0YVBhdGgsIFVz YkNkY0RhdGFQYXRoKTsNCj4gKw0KPiArICAgICAgaWYgKCFFRklfRVJST1IgKFN0YXR1cykpIHsN Cj4gKyAgICAgICAgKlJuZGlzSGFuZGxlID0gSGFuZGxlQnVmZmVyW0luZGV4XTsNCj4gKyAgICAg ICAgKkNkY1VzYklvICAgID0gVXNiSW87DQo+ICsgICAgICAgIEZyZWVQb29sIChIYW5kbGVCdWZm ZXIpOw0KPiArICAgICAgICByZXR1cm4gU3RhdHVzOw0KPiArICAgICAgfQ0KPiArICAgIH0NCj4g KyAgfSAgIC8vIEVuZCBvZiBGb3IgbG9vcA0KPiArDQo+ICsgIEZyZWVQb29sIChIYW5kbGVCdWZm ZXIpOw0KPiArDQo+ICsgIHJldHVybiBFRklfTk9UX0ZPVU5EOw0KPiArfQ0KPiArDQo+ICsvKioN Cj4gKyAgVVNCIFJuZGlzIERyaXZlciBCaW5kaW5nIFN1cHBvcnQuDQo+ICsNCj4gKyAgQHBhcmFt W2luXSAgVGhpcyAgICAgICAgICAgICAgICAgICAgUHJvdG9jb2wgaW5zdGFuY2UgcG9pbnRlci4N Cj4gKyAgQHBhcmFtW2luXSAgQ29udHJvbGxlckhhbmRsZSAgICAgICAgSGFuZGxlIG9mIGRldmlj ZSB0byB0ZXN0Lg0KPiArICBAcGFyYW1baW5dICBSZW1haW5pbmdEZXZpY2VQYXRoICAgICBPcHRp b25hbCBwYXJhbWV0ZXIgdXNlIHRvIHBpY2sgYQ0KPiBzcGVjaWZpYyBjaGlsZA0KPiArICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZXZpY2UgdG8gc3RhcnQuDQo+ICsNCj4g KyAgQHJldHZhbCBFRklfU1VDQ0VTUyAgICAgICAgICAgICAgICAgVGhpcyBkcml2ZXIgc3VwcG9y dHMgdGhpcyBkZXZpY2UuDQo+ICsgIEByZXR2YWwgRUZJX0FMUkVBRFlfU1RBUlRFRCAgICAgICAg IFRoaXMgZHJpdmVyIGlzIGFscmVhZHkgcnVubmluZyBvbiB0aGlzDQo+IGRldmljZS4NCj4gKyAg QHJldHZhbCBvdGhlciAgICAgICAgICAgICAgICAgICAgICAgVGhpcyBkcml2ZXIgZG9lcyBub3Qg c3VwcG9ydCB0aGlzIGRldmljZS4NCj4gKw0KPiArKiovDQo+ICtFRklfU1RBVFVTDQo+ICtFRklB UEkNCj4gK1VzYlJuZGlzRHJpdmVyU3VwcG9ydGVkICgNCj4gKyAgSU4gRUZJX0RSSVZFUl9CSU5E SU5HX1BST1RPQ09MICAqVGhpcywNCj4gKyAgSU4gRUZJX0hBTkRMRSAgICAgICAgICAgICAgICAg ICBDb250cm9sbGVySGFuZGxlLA0KPiArICBJTiBFRklfREVWSUNFX1BBVEhfUFJPVE9DT0wgICAg ICpSZW1haW5pbmdEZXZpY2VQYXRoDQo+ICsgICkNCj4gK3sNCj4gKyAgRUZJX1NUQVRVUyAgICAg ICAgICAgU3RhdHVzOw0KPiArICBFRklfVVNCX0lPX1BST1RPQ09MICAqVXNiSW87DQo+ICsNCj4g KyAgU3RhdHVzID0gZ0JTLT5PcGVuUHJvdG9jb2wgKA0KPiArICAgICAgICAgICAgICAgICAgQ29u dHJvbGxlckhhbmRsZSwNCj4gKyAgICAgICAgICAgICAgICAgICZnRWZpVXNiSW9Qcm90b2NvbEd1 aWQsDQo+ICsgICAgICAgICAgICAgICAgICAoVk9JRCAqKikmVXNiSW8sDQo+ICsgICAgICAgICAg ICAgICAgICBUaGlzLT5Ecml2ZXJCaW5kaW5nSGFuZGxlLA0KPiArICAgICAgICAgICAgICAgICAg Q29udHJvbGxlckhhbmRsZSwNCj4gKyAgICAgICAgICAgICAgICAgIEVGSV9PUEVOX1BST1RPQ09M X0JZX0RSSVZFUg0KPiArICAgICAgICAgICAgICAgICAgKTsNCj4gKyAgaWYgKEVGSV9FUlJPUiAo U3RhdHVzKSkgew0KPiArICAgIHJldHVybiBTdGF0dXM7DQo+ICsgIH0NCj4gKw0KPiArICBTdGF0 dXMgPSBJc1N1cHBvcnRlZERldmljZSAoVXNiSW8pID8gRUZJX1NVQ0NFU1MgOiBFRklfVU5TVVBQ T1JURUQ7DQo+ICsNCj4gKyAgZ0JTLT5DbG9zZVByb3RvY29sICgNCj4gKyAgICAgICAgIENvbnRy b2xsZXJIYW5kbGUsDQo+ICsgICAgICAgICAmZ0VmaVVzYklvUHJvdG9jb2xHdWlkLA0KPiArICAg ICAgICAgVGhpcy0+RHJpdmVyQmluZGluZ0hhbmRsZSwNCj4gKyAgICAgICAgIENvbnRyb2xsZXJI YW5kbGUNCj4gKyAgICAgICAgICk7DQo+ICsgIHJldHVybiBTdGF0dXM7DQo+ICt9DQo+ICsNCj4g Ky8qKg0KPiArICBVU0IgUk5ESVMgRHJpdmVyIEJpbmRpbmcgU3RhcnQuDQo+ICsNCj4gKyAgQHBh cmFtW2luXSAgVGhpcyAgICAgICAgICAgICAgICAgICAgUHJvdG9jb2wgaW5zdGFuY2UgcG9pbnRl ci4NCj4gKyAgQHBhcmFtW2luXSAgQ29udHJvbGxlckhhbmRsZSAgICAgICAgSGFuZGxlIG9mIGRl dmljZSB0byBiaW5kIGRyaXZlciB0by4NCj4gKyAgQHBhcmFtW2luXSAgUmVtYWluaW5nRGV2aWNl UGF0aCAgICAgT3B0aW9uYWwgcGFyYW1ldGVyIHVzZSB0byBwaWNrIGENCj4gc3BlY2lmaWMgY2hp bGQNCj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGV2aWNlIHRvIHN0 YXJ0Lg0KPiArDQo+ICsgIEByZXR2YWwgRUZJX1NVQ0NFU1MgICAgICAgICAgICAgICAgIFRoaXMg ZHJpdmVyIGlzIGFkZGVkIHRvIENvbnRyb2xsZXJIYW5kbGUNCj4gKyAgQHJldHZhbCBFRklfREVW SUNFX0VSUk9SICAgICAgICAgICAgVGhpcyBkcml2ZXIgY291bGQgbm90IGJlIHN0YXJ0ZWQgZHVl IHRvIGENCj4gZGV2aWNlIGVycm9yDQo+ICsgIEByZXR2YWwgRUZJX09VVF9PRl9SRVNPVVJDRVMg ICAgICAgIFRoZSBkcml2ZXIgY291bGQgbm90IGluc3RhbGwNCj4gc3VjY2Vzc2Z1bGx5IGR1ZSB0 byBhIGxhY2sgb2YgcmVzb3VyY2VzLg0KPiArICBAcmV0dmFsIG90aGVyICAgICAgICAgICAgICAg ICAgICAgICBUaGlzIGRyaXZlciBkb2VzIG5vdCBzdXBwb3J0IHRoaXMgZGV2aWNlDQo+ICsNCj4g KyoqLw0KPiArRUZJX1NUQVRVUw0KPiArRUZJQVBJDQo+ICtVc2JSbmRpc0RyaXZlclN0YXJ0ICgN Cj4gKyAgSU4gRUZJX0RSSVZFUl9CSU5ESU5HX1BST1RPQ09MICAqVGhpcywNCj4gKyAgSU4gRUZJ X0hBTkRMRSAgICAgICAgICAgICAgICAgICBDb250cm9sbGVySGFuZGxlLA0KPiArICBJTiBFRklf REVWSUNFX1BBVEhfUFJPVE9DT0wgICAgICpSZW1haW5pbmdEZXZpY2VQYXRoDQo+ICsgICkNCj4g K3sNCj4gKyAgRUZJX1NUQVRVUyAgICAgICAgICAgICAgICAgICAgU3RhdHVzOw0KPiArICBVU0Jf Uk5ESVNfREVWSUNFICAgICAgICAgICAgICAqVXNiUm5kaXNEZXZpY2U7DQo+ICsgIEVGSV9ERVZJ Q0VfUEFUSF9QUk9UT0NPTCAgICAgICpVc2JFdGhQYXRoOw0KPiArICBFRklfVVNCX0lPX1BST1RP Q09MICAgICAgICAgICAqVXNiSW87DQo+ICsgIEVGSV9VU0JfSU5URVJGQUNFX0RFU0NSSVBUT1Ig IEludGVyZmFjZTsNCj4gKyAgRUZJX0hBTkRMRSAgICAgICAgICAgICAgICAgICAgUm5kaXNIYW5k bGU7DQo+ICsNCj4gKyAgUm5kaXNIYW5kbGUgPSBDb250cm9sbGVySGFuZGxlOw0KPiArDQo+ICsg IFN0YXR1cyA9IGdCUy0+T3BlblByb3RvY29sICgNCj4gKyAgICAgICAgICAgICAgICAgIENvbnRy b2xsZXJIYW5kbGUsDQo+ICsgICAgICAgICAgICAgICAgICAmZ0VmaVVzYklvUHJvdG9jb2xHdWlk LA0KPiArICAgICAgICAgICAgICAgICAgKFZPSUQgKiopJlVzYklvLA0KPiArICAgICAgICAgICAg ICAgICAgVGhpcy0+RHJpdmVyQmluZGluZ0hhbmRsZSwNCj4gKyAgICAgICAgICAgICAgICAgIENv bnRyb2xsZXJIYW5kbGUsDQo+ICsgICAgICAgICAgICAgICAgICBFRklfT1BFTl9QUk9UT0NPTF9C WV9EUklWRVINCj4gKyAgICAgICAgICAgICAgICAgICk7DQo+ICsgIGlmIChFRklfRVJST1IgKFN0 YXR1cykpIHsNCj4gKyAgICByZXR1cm4gU3RhdHVzOw0KPiArICB9DQo+ICsNCj4gKyAgU3RhdHVz ID0gZ0JTLT5PcGVuUHJvdG9jb2wgKA0KPiArICAgICAgICAgICAgICAgICAgQ29udHJvbGxlckhh bmRsZSwNCj4gKyAgICAgICAgICAgICAgICAgICZnRWZpRGV2aWNlUGF0aFByb3RvY29sR3VpZCwN Cj4gKyAgICAgICAgICAgICAgICAgIChWT0lEICoqKSZVc2JFdGhQYXRoLA0KPiArICAgICAgICAg ICAgICAgICAgVGhpcy0+RHJpdmVyQmluZGluZ0hhbmRsZSwNCj4gKyAgICAgICAgICAgICAgICAg IENvbnRyb2xsZXJIYW5kbGUsDQo+ICsgICAgICAgICAgICAgICAgICBFRklfT1BFTl9QUk9UT0NP TF9CWV9EUklWRVINCj4gKyAgICAgICAgICAgICAgICAgICk7DQo+ICsgIGlmIChFRklfRVJST1Ig KFN0YXR1cykpIHsNCj4gKyAgICBnQlMtPkNsb3NlUHJvdG9jb2wgKA0KPiArICAgICAgICAgICBD b250cm9sbGVySGFuZGxlLA0KPiArICAgICAgICAgICAmZ0VmaVVzYklvUHJvdG9jb2xHdWlkLA0K PiArICAgICAgICAgICBUaGlzLT5Ecml2ZXJCaW5kaW5nSGFuZGxlLA0KPiArICAgICAgICAgICBD b250cm9sbGVySGFuZGxlDQo+ICsgICAgICAgICAgICk7DQo+ICsgICAgcmV0dXJuIFN0YXR1czsN Cj4gKyAgfQ0KPiArDQo+ICsgIGdCUy0+Q2xvc2VQcm90b2NvbCAoDQo+ICsgICAgICAgICBDb250 cm9sbGVySGFuZGxlLA0KPiArICAgICAgICAgJmdFZmlEZXZpY2VQYXRoUHJvdG9jb2xHdWlkLA0K PiArICAgICAgICAgVGhpcy0+RHJpdmVyQmluZGluZ0hhbmRsZSwNCj4gKyAgICAgICAgIENvbnRy b2xsZXJIYW5kbGUNCj4gKyAgICAgICAgICk7DQo+ICsNCj4gKyAgLy8gQ29udHJvbHMgY29tZSBo ZXJlIGZvciBSTkRJUyBhbmQgQ0RDLiBJZiBpdCBpcyBDREMsIGNoZWNrIHdoZXRoZXIgUk5ESVMN Cj4gaXMgcHJlc2VudCBvbiB0aGUgc2FtZSBjb250cm9sbGVyIG9yIG5vdC4NCj4gKyAgaWYgKElz VXNiQ2RjRGF0YSAoVXNiSW8pKSB7DQo+ICsgICAgREVCVUcgKChERUJVR19JTkZPLCAiUm5kaXMg Q0RDRGF0YSBpbnRlcmZhY2UgZm91bmRcbiIpKTsNCj4gKw0KPiArICAgIC8vIEZpbmQgdGhlIHBh cmVudCBSTkRJUyBhbmQgdXBkYXRlIHRoZSBVc2JJbyBmb3IgdGhlIENEQyBkZXZpY2UNCj4gKyAg ICBTdGF0dXMgPSBVcGRhdGVSbmRpc0RldmljZSAoDQo+ICsgICAgICAgICAgICAgICBVc2JFdGhQ YXRoLA0KPiArICAgICAgICAgICAgICAgJlVzYlJuZGlzRGV2aWNlDQo+ICsgICAgICAgICAgICAg ICApOw0KPiArDQo+ICsgICAgaWYgKCFFRklfRVJST1IgKFN0YXR1cykpIHsNCj4gKyAgICAgIERF QlVHICgoREVCVUdfSU5GTywgIlJuZGlzIE1hdGNoaW5nIGludGVyZmFjZSBmb3VuZFxuIikpOw0K PiArICAgICAgVXNiUm5kaXNEZXZpY2UtPlVzYkNkY0RhdGFIYW5kbGUgPSBDb250cm9sbGVySGFu ZGxlOw0KPiArICAgICAgVXNiUm5kaXNEZXZpY2UtPlVzYklvQ2RjRGF0YSAgICAgPSBVc2JJbzsN Cj4gKyAgICAgIEdldEVuZHBvaW50IChVc2JSbmRpc0RldmljZS0+VXNiSW9DZGNEYXRhLCBVc2JS bmRpc0RldmljZSk7DQo+ICsgICAgICByZXR1cm4gU3RhdHVzOw0KPiArICAgIH0gZWxzZSB7DQo+ ICsgICAgICAvLyBDaGVjayBpZiBSbkRpcyBleGlzdA0KPiArICAgICAgU3RhdHVzID0gRmluZE1h dGNoaW5nUm5kaXNEZXYgKA0KPiArICAgICAgICAgICAgICAgICBDb250cm9sbGVySGFuZGxlLA0K PiArICAgICAgICAgICAgICAgICAmVXNiSW8sDQo+ICsgICAgICAgICAgICAgICAgICZSbmRpc0hh bmRsZQ0KPiArICAgICAgICAgICAgICAgICApOw0KPiArDQo+ICsgICAgICBpZiAoRUZJX0VSUk9S IChTdGF0dXMpKSB7DQo+ICsgICAgICAgIGdCUy0+Q2xvc2VQcm90b2NvbCAoDQo+ICsgICAgICAg ICAgICAgICBDb250cm9sbGVySGFuZGxlLA0KPiArICAgICAgICAgICAgICAgJmdFZmlVc2JJb1By b3RvY29sR3VpZCwNCj4gKyAgICAgICAgICAgICAgIFRoaXMtPkRyaXZlckJpbmRpbmdIYW5kbGUs DQo+ICsgICAgICAgICAgICAgICBDb250cm9sbGVySGFuZGxlDQo+ICsgICAgICAgICAgICAgICAp Ow0KPiArICAgICAgICByZXR1cm4gU3RhdHVzOw0KPiArICAgICAgfQ0KPiArICAgIH0NCj4gKyAg fQ0KPiArDQo+ICsgIFVzYlJuZGlzRGV2aWNlID0gQWxsb2NhdGVaZXJvUG9vbCAoc2l6ZW9mIChV U0JfUk5ESVNfREVWSUNFKSk7DQo+ICsNCj4gKyAgaWYgKCFVc2JSbmRpc0RldmljZSkgew0KPiAr ICAgIERFQlVHICgoREVCVUdfRVJST1IsICJBbGxvY2F0ZVplcm9Qb29sIEZhaWxcbiIpKTsNCj4g Kw0KPiArICAgIGdCUy0+Q2xvc2VQcm90b2NvbCAoDQo+ICsgICAgICAgICAgIENvbnRyb2xsZXJI YW5kbGUsDQo+ICsgICAgICAgICAgICZnRWZpVXNiSW9Qcm90b2NvbEd1aWQsDQo+ICsgICAgICAg ICAgIFRoaXMtPkRyaXZlckJpbmRpbmdIYW5kbGUsDQo+ICsgICAgICAgICAgIENvbnRyb2xsZXJI YW5kbGUNCj4gKyAgICAgICAgICAgKTsNCj4gKyAgICByZXR1cm4gRUZJX09VVF9PRl9SRVNPVVJD RVM7DQo+ICsgIH0NCj4gKw0KPiArICBTdGF0dXMgPSBMb2FkQWxsRGVzY3JpcHRvciAoDQo+ICsg ICAgICAgICAgICAgVXNiSW8sDQo+ICsgICAgICAgICAgICAgJlVzYlJuZGlzRGV2aWNlLT5Db25m aWcNCj4gKyAgICAgICAgICAgICApOw0KPiArICBpZiAoRUZJX0VSUk9SIChTdGF0dXMpKSB7DQo+ ICsgICAgREVCVUcgKChERUJVR19FUlJPUiwgIiVhOkxvYWRBbGxEZXNjcmlwdG9yIHN0YXR1cyA9 ICVyXG4iLCBfX2Z1bmNfXywNCj4gU3RhdHVzKSk7DQo+ICsgICAgZ0JTLT5DbG9zZVByb3RvY29s ICgNCj4gKyAgICAgICAgICAgQ29udHJvbGxlckhhbmRsZSwNCj4gKyAgICAgICAgICAgJmdFZmlV c2JJb1Byb3RvY29sR3VpZCwNCj4gKyAgICAgICAgICAgVGhpcy0+RHJpdmVyQmluZGluZ0hhbmRs ZSwNCj4gKyAgICAgICAgICAgQ29udHJvbGxlckhhbmRsZQ0KPiArICAgICAgICAgICApOw0KPiAr ICAgIEZyZWVQb29sIChVc2JSbmRpc0RldmljZSk7DQo+ICsgICAgcmV0dXJuIFN0YXR1czsNCj4g KyAgfQ0KPiArDQo+ICsgIFN0YXR1cyA9IFVzYklvLT5Vc2JHZXRJbnRlcmZhY2VEZXNjcmlwdG9y ICgNCj4gKyAgICAgICAgICAgICAgICAgICAgVXNiSW8sDQo+ICsgICAgICAgICAgICAgICAgICAg ICZJbnRlcmZhY2UNCj4gKyAgICAgICAgICAgICAgICAgICAgKTsNCj4gKyAgaWYgKEVGSV9FUlJP UiAoU3RhdHVzKSkgew0KPiArICAgIERFQlVHICgoREVCVUdfRVJST1IsICIlYTpVc2JHZXRJbnRl cmZhY2VEZXNjcmlwdG9yIHN0YXR1cyA9ICVyXG4iLA0KPiBfX2Z1bmNfXywgU3RhdHVzKSk7DQo+ ICsgICAgZ0JTLT5DbG9zZVByb3RvY29sICgNCj4gKyAgICAgICAgICAgQ29udHJvbGxlckhhbmRs ZSwNCj4gKyAgICAgICAgICAgJmdFZmlVc2JJb1Byb3RvY29sR3VpZCwNCj4gKyAgICAgICAgICAg VGhpcy0+RHJpdmVyQmluZGluZ0hhbmRsZSwNCj4gKyAgICAgICAgICAgQ29udHJvbGxlckhhbmRs ZQ0KPiArICAgICAgICAgICApOw0KPiArICAgIEZyZWVQb29sIChVc2JSbmRpc0RldmljZS0+Q29u ZmlnKTsNCj4gKyAgICBGcmVlUG9vbCAoVXNiUm5kaXNEZXZpY2UpOw0KPiArICAgIHJldHVybiBT dGF0dXM7DQo+ICsgIH0NCj4gKw0KPiArICBVc2JSbmRpc0RldmljZS0+U2lnbmF0dXJlICAgICAg ICAgICAgICAgICAgICAgICAgICA9IFVTQl9STkRJU19TSUdOQVRVUkU7DQo+ICsgIFVzYlJuZGlz RGV2aWNlLT5OdW1PZkludGVyZmFjZSAgICAgICAgICAgICAgICAgICAgID0gSW50ZXJmYWNlLklu dGVyZmFjZU51bWJlcjsNCj4gKyAgVXNiUm5kaXNEZXZpY2UtPlVzYlJuZGlzSGFuZGxlICAgICAg ICAgICAgICAgICAgICAgPSBSbmRpc0hhbmRsZTsNCj4gKyAgVXNiUm5kaXNEZXZpY2UtPlVzYkNk Y0RhdGFIYW5kbGUgICAgICAgICAgICAgICAgICAgPSAwOw0KPiArICBVc2JSbmRpc0RldmljZS0+ VXNiSW8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICA9IFVzYklvOw0KPiArICBVc2JSbmRp c0RldmljZS0+VXNiRXRoLlVzYkV0aFJlY2VpdmUgICAgICAgICAgICAgICA9IFJuZGlzVW5kaVJl Y2VpdmU7DQo+ICsgIFVzYlJuZGlzRGV2aWNlLT5Vc2JFdGguVXNiRXRoVHJhbnNtaXQgICAgICAg ICAgICAgID0gUm5kaXNVbmRpVHJhbnNtaXQ7DQo+ICsgIFVzYlJuZGlzRGV2aWNlLT5Vc2JFdGgu VXNiRXRoSW50ZXJydXB0ICAgICAgICAgICAgID0gVXNiUm5kaXNJbnRlcnJ1cHQ7DQo+ICsgIFVz YlJuZGlzRGV2aWNlLT5Vc2JFdGguVXNiRXRoTWFjQWRkcmVzcyAgICAgICAgICAgID0gR2V0VXNi RXRoTWFjQWRkcmVzczsNCj4gKyAgVXNiUm5kaXNEZXZpY2UtPlVzYkV0aC5Vc2JFdGhNYXhCdWxr U2l6ZSAgICAgICAgICAgPSBVc2JFdGhCdWxrU2l6ZTsNCj4gKyAgVXNiUm5kaXNEZXZpY2UtPlVz YkV0aC5Vc2JIZWFkZXJGdW5EZXNjcmlwdG9yICAgICAgPQ0KPiBHZXRVc2JIZWFkZXJGdW5EZXNj cmlwdG9yOw0KPiArICBVc2JSbmRpc0RldmljZS0+VXNiRXRoLlVzYlVuaW9uRnVuRGVzY3JpcHRv ciAgICAgICA9DQo+IEdldFVzYlVuaW9uRnVuRGVzY3JpcHRvcjsNCj4gKyAgVXNiUm5kaXNEZXZp Y2UtPlVzYkV0aC5Vc2JFdGhGdW5EZXNjcmlwdG9yICAgICAgICAgPQ0KPiBHZXRVc2JSbmRpc0Z1 bkRlc2NyaXB0b3I7DQo+ICsgIFVzYlJuZGlzRGV2aWNlLT5Vc2JFdGguU2V0VXNiRXRoTWNhc3RG aWx0ZXIgICAgICAgID0gU2V0VXNiUm5kaXNNY2FzdEZpbHRlcjsNCj4gKyAgVXNiUm5kaXNEZXZp Y2UtPlVzYkV0aC5TZXRVc2JFdGhQb3dlclBhdHRlcm5GaWx0ZXIgPQ0KPiBTZXRVc2JSbmRpc1Bv d2VyRmlsdGVyOw0KPiArICBVc2JSbmRpc0RldmljZS0+VXNiRXRoLkdldFVzYkV0aFBvd2VyUGF0 dGVybkZpbHRlciA9DQo+IEdldFVzYlJuZGlzUG93ZXJGaWx0ZXI7DQo+ICsgIFVzYlJuZGlzRGV2 aWNlLT5Vc2JFdGguU2V0VXNiRXRoUGFja2V0RmlsdGVyICAgICAgID0gU2V0VXNiUm5kaXNQYWNr ZXRGaWx0ZXI7DQo+ICsgIFVzYlJuZGlzRGV2aWNlLT5Vc2JFdGguR2V0VXNiRXRoU3RhdGlzdGlj ICAgICAgICAgID0gR2V0Um5kaXNTdGF0aXN0aWM7DQo+ICsNCj4gKyAgVXNiUm5kaXNEZXZpY2Ut PlVzYkV0aC5Vc2JFdGhVbmRpLlVzYkV0aFVuZGlHZXRTdGF0ZSAgICAgICAgPQ0KPiBSbmRpc0R1 bW15UmV0dXJuOw0KPiArICBVc2JSbmRpc0RldmljZS0+VXNiRXRoLlVzYkV0aFVuZGkuVXNiRXRo VW5kaVN0YXJ0ICAgICAgICAgICA9IFJuZGlzVW5kaVN0YXJ0Ow0KPiArICBVc2JSbmRpc0Rldmlj ZS0+VXNiRXRoLlVzYkV0aFVuZGkuVXNiRXRoVW5kaVN0b3AgICAgICAgICAgICA9IFJuZGlzVW5k aVN0b3A7DQo+ICsgIFVzYlJuZGlzRGV2aWNlLT5Vc2JFdGguVXNiRXRoVW5kaS5Vc2JFdGhVbmRp R2V0SW5pdEluZm8gICAgID0NCj4gUm5kaXNVbmRpR2V0SW5pdEluZm87DQo+ICsgIFVzYlJuZGlz RGV2aWNlLT5Vc2JFdGguVXNiRXRoVW5kaS5Vc2JFdGhVbmRpR2V0Q29uZmlnSW5mbyAgID0NCj4g Um5kaXNVbmRpR2V0Q29uZmlnSW5mbzsNCj4gKyAgVXNiUm5kaXNEZXZpY2UtPlVzYkV0aC5Vc2JF dGhVbmRpLlVzYkV0aFVuZGlJbml0aWFsaXplICAgICAgPQ0KPiBSbmRpc1VuZGlJbml0aWFsaXpl Ow0KPiArICBVc2JSbmRpc0RldmljZS0+VXNiRXRoLlVzYkV0aFVuZGkuVXNiRXRoVW5kaVJlc2V0 ICAgICAgICAgICA9DQo+IFJuZGlzVW5kaVJlc2V0Ow0KPiArICBVc2JSbmRpc0RldmljZS0+VXNi RXRoLlVzYkV0aFVuZGkuVXNiRXRoVW5kaVNodXRkb3duICAgICAgICA9DQo+IFJuZGlzVW5kaVNo dXRkb3duOw0KPiArICBVc2JSbmRpc0RldmljZS0+VXNiRXRoLlVzYkV0aFVuZGkuVXNiRXRoVW5k aUludGVycnVwdEVuYWJsZSA9DQo+IFJuZGlzRHVtbXlSZXR1cm47DQo+ICsgIFVzYlJuZGlzRGV2 aWNlLT5Vc2JFdGguVXNiRXRoVW5kaS5Vc2JFdGhVbmRpUmVjZWl2ZUZpbHRlciAgID0NCj4gUm5k aXNVbmRpUmVjZWl2ZUZpbHRlcjsNCj4gKyAgVXNiUm5kaXNEZXZpY2UtPlVzYkV0aC5Vc2JFdGhV bmRpLlVzYkV0aFVuZGlTdGF0aW9uQWRkcmVzcyAgPQ0KPiBSbmRpc0R1bW15UmV0dXJuOw0KPiAr ICBVc2JSbmRpc0RldmljZS0+VXNiRXRoLlVzYkV0aFVuZGkuVXNiRXRoVW5kaVN0YXRpc3RpY3Mg ICAgICA9IE5VTEw7DQo+ICsgIFVzYlJuZGlzRGV2aWNlLT5Vc2JFdGguVXNiRXRoVW5kaS5Vc2JF dGhVbmRpTWNhc3RJcDJNYWMgICAgID0NCj4gUm5kaXNEdW1teVJldHVybjsNCj4gKyAgVXNiUm5k aXNEZXZpY2UtPlVzYkV0aC5Vc2JFdGhVbmRpLlVzYkV0aFVuZGlOdkRhdGEgICAgICAgICAgPQ0K PiBSbmRpc0R1bW15UmV0dXJuOw0KPiArICBVc2JSbmRpc0RldmljZS0+VXNiRXRoLlVzYkV0aFVu ZGkuVXNiRXRoVW5kaUdldFN0YXR1cyAgICAgICA9DQo+IFJuZGlzVW5kaUdldFN0YXR1czsNCj4g KyAgVXNiUm5kaXNEZXZpY2UtPlVzYkV0aC5Vc2JFdGhVbmRpLlVzYkV0aFVuZGlGaWxsSGVhZGVy ICAgICAgPQ0KPiBSbmRpc0R1bW15UmV0dXJuOw0KPiArICBVc2JSbmRpc0RldmljZS0+VXNiRXRo LlVzYkV0aFVuZGkuVXNiRXRoVW5kaVRyYW5zbWl0ICAgICAgICA9IE5VTEw7DQo+ICsgIFVzYlJu ZGlzRGV2aWNlLT5Vc2JFdGguVXNiRXRoVW5kaS5Vc2JFdGhVbmRpUmVjZWl2ZSAgICAgICAgID0g TlVMTDsNCj4gKw0KPiArICBVc2JSbmRpc0RldmljZS0+TWF4VHJhbnNmZXJTaXplICAgICAgID0g Uk5ESVNfTUFYX1RSQU5TRkVSX1NJWkU7DQo+ICsgIFVzYlJuZGlzRGV2aWNlLT5NYXhQYWNrZXRz UGVyVHJhbnNmZXIgPSAxOw0KPiArICBVc2JSbmRpc0RldmljZS0+UGFja2V0QWxpZ25tZW50RmFj dG9yID0gMDsNCj4gKw0KPiArICBJbml0aWFsaXplTGlzdEhlYWQgKCZVc2JSbmRpc0RldmljZS0+ UmVjZWl2ZVBhY2tldExpc3QpOw0KPiArDQo+ICsgIC8vIFRoaXMgaXMgYSBSTkRJUyBpbnRlcmZh Y2UuIFNlZSB3aGV0aGVyIENEQy1EQVRBIGludGVyZmFjZSBoYXMgYWxyZWFkeQ0KPiBiZWVuIGNv bm5lY3RlZCBvciBub3QNCj4gKyAgRmluZE1hdGNoaW5nQ2RjRGF0YSAoVXNiUm5kaXNEZXZpY2Up Ow0KPiArDQo+ICsgIGlmIChVc2JSbmRpc0RldmljZS0+VXNiSW9DZGNEYXRhKSB7DQo+ICsgICAg U3RhdHVzID0gZ0JTLT5JbnN0YWxsUHJvdG9jb2xJbnRlcmZhY2UgKA0KPiArICAgICAgICAgICAg ICAgICAgICAmQ29udHJvbGxlckhhbmRsZSwNCj4gKyAgICAgICAgICAgICAgICAgICAgJmdFZGtJ SVVzYkV0aFByb3RvY29sR3VpZCwNCj4gKyAgICAgICAgICAgICAgICAgICAgRUZJX05BVElWRV9J TlRFUkZBQ0UsDQo+ICsgICAgICAgICAgICAgICAgICAgICYoVXNiUm5kaXNEZXZpY2UtPlVzYkV0 aCkNCj4gKyAgICAgICAgICAgICAgICAgICAgKTsNCj4gKyAgICBpZiAoRUZJX0VSUk9SIChTdGF0 dXMpKSB7DQo+ICsgICAgICBnQlMtPkNsb3NlUHJvdG9jb2wgKA0KPiArICAgICAgICAgICAgIENv bnRyb2xsZXJIYW5kbGUsDQo+ICsgICAgICAgICAgICAgJmdFZmlVc2JJb1Byb3RvY29sR3VpZCwN Cj4gKyAgICAgICAgICAgICBUaGlzLT5Ecml2ZXJCaW5kaW5nSGFuZGxlLA0KPiArICAgICAgICAg ICAgIENvbnRyb2xsZXJIYW5kbGUNCj4gKyAgICAgICAgICAgICApOw0KPiArDQo+ICsgICAgICBG cmVlUG9vbCAoVXNiUm5kaXNEZXZpY2UtPkNvbmZpZyk7DQo+ICsgICAgICBGcmVlUG9vbCAoVXNi Um5kaXNEZXZpY2UpOw0KPiArICAgICAgcmV0dXJuIFN0YXR1czsNCj4gKyAgICB9DQo+ICsNCj4g KyAgICBHZXRFbmRwb2ludCAoVXNiUm5kaXNEZXZpY2UtPlVzYklvLCBVc2JSbmRpc0RldmljZSk7 DQo+ICsNCj4gKyAgICBERUJVRyAoKERFQlVHX0lORk8sICJSbmRpcyBEZXZpY2VIYW5kbGUgJXJc biIsIFVzYlJuZGlzRGV2aWNlLQ0KPiA+VXNiUm5kaXNIYW5kbGUpKTsNCj4gKyAgICBERUJVRyAo KERFQlVHX0lORk8sICJDREMgRGV2aWNlSGFuZGxlICVyXG4iLCBVc2JSbmRpc0RldmljZS0NCj4g PlVzYkNkY0RhdGFIYW5kbGUpKTsNCj4gKyAgICByZXR1cm4gRUZJX1NVQ0NFU1M7DQo+ICsgIH0N Cj4gKw0KPiArICBGcmVlUG9vbCAoVXNiUm5kaXNEZXZpY2UtPkNvbmZpZyk7DQo+ICsgIEZyZWVQ b29sIChVc2JSbmRpc0RldmljZSk7DQo+ICsNCj4gKyAgcmV0dXJuIEVGSV9TVUNDRVNTOw0KPiAr fQ0KPiArDQo+ICsvKioNCj4gKyAgQ2hlY2thbmRTdG9wUm5kaXNEZXZpY2UNCj4gKw0KPiArICBA cGFyYW1baW5dICBUaGlzICAgICAgICAgICAgICAgICBQcm90b2NvbCBpbnN0YW5jZSBwb2ludGVy Lg0KPiArICBAcGFyYW1baW5dICBDb250cm9sbGVySGFuZGxlICAgICBIYW5kbGUgb2YgZGV2aWNl IHRvIGJpbmQgZHJpdmVyIHRvLg0KPiArDQo+ICsgIEByZXR2YWwgRUZJX1NVQ0NFU1MgICAgICAg ICAgVGhpcyBkcml2ZXIgaXMgYWRkZWQgdG8gQ29udHJvbGxlckhhbmRsZQ0KPiArICBAcmV0dmFs IEVGSV9ERVZJQ0VfRVJST1IgICAgIFRoaXMgZHJpdmVyIGNvdWxkIG5vdCBiZSBzdGFydGVkIGR1 ZSB0byBhDQo+IGRldmljZSBlcnJvcg0KPiArICBAcmV0dmFsIG90aGVyICAgICAgICAgICAgICAg IFRoaXMgZHJpdmVyIGRvZXMgbm90IHN1cHBvcnQgdGhpcyBkZXZpY2UNCj4gKw0KPiArKiovDQo+ ICtFRklfU1RBVFVTDQo+ICtFRklBUEkNCj4gK0NoZWNrYW5kU3RvcFJuZGlzRGV2aWNlICgNCj4g KyAgSU4gIEVGSV9EUklWRVJfQklORElOR19QUk9UT0NPTCAgKlRoaXMsDQo+ICsgIElOICBFRklf SEFORExFICAgICAgICAgICAgICAgICAgIENvbnRyb2xsZXJIYW5kbGUNCj4gKyAgKQ0KPiArew0K PiArICBFRklfU1RBVFVTICAgICAgICAgICBTdGF0dXM7DQo+ICsgIEVGSV9VU0JfSU9fUFJPVE9D T0wgICpVc2JJbzsNCj4gKw0KPiArICBTdGF0dXMgPSBnQlMtPk9wZW5Qcm90b2NvbCAoDQo+ICsg ICAgICAgICAgICAgICAgICBDb250cm9sbGVySGFuZGxlLA0KPiArICAgICAgICAgICAgICAgICAg JmdFZmlVc2JJb1Byb3RvY29sR3VpZCwNCj4gKyAgICAgICAgICAgICAgICAgIChWT0lEICoqKSZV c2JJbywNCj4gKyAgICAgICAgICAgICAgICAgIFRoaXMtPkRyaXZlckJpbmRpbmdIYW5kbGUsDQo+ ICsgICAgICAgICAgICAgICAgICBDb250cm9sbGVySGFuZGxlLA0KPiArICAgICAgICAgICAgICAg ICAgRUZJX09QRU5fUFJPVE9DT0xfR0VUX1BST1RPQ09MDQo+ICsgICAgICAgICAgICAgICAgICAp Ow0KPiArICBpZiAoRUZJX0VSUk9SIChTdGF0dXMpKSB7DQo+ICsgICAgcmV0dXJuIFN0YXR1czsN Cj4gKyAgfQ0KPiArDQo+ICsgIGlmIChJc1VzYlJuZGlzIChVc2JJbykpIHsNCj4gKyAgICBTdGF0 dXMgPSBnQlMtPkNsb3NlUHJvdG9jb2wgKA0KPiArICAgICAgICAgICAgICAgICAgICBDb250cm9s bGVySGFuZGxlLA0KPiArICAgICAgICAgICAgICAgICAgICAmZ0VmaVVzYklvUHJvdG9jb2xHdWlk LA0KPiArICAgICAgICAgICAgICAgICAgICBUaGlzLT5Ecml2ZXJCaW5kaW5nSGFuZGxlLA0KPiAr ICAgICAgICAgICAgICAgICAgICBDb250cm9sbGVySGFuZGxlDQo+ICsgICAgICAgICAgICAgICAg ICAgICk7DQo+ICsgICAgREVCVUcgKChERUJVR19FUlJPUiwgIlJuZGlzIENvbnRyb2xsZXJIYW5k bGUgU3RvcCAlclxuIiwgU3RhdHVzKSk7DQo+ICsgICAgcmV0dXJuIFN0YXR1czsNCj4gKyAgfQ0K PiArDQo+ICsgIHJldHVybiBFRklfVU5TVVBQT1JURUQ7DQo+ICt9DQo+ICsNCj4gKy8qKg0KPiAr ICBVU0IgUm5kaXMgRHJpdmVyIEJpbmRpbmcgU3RvcC4NCj4gKw0KPiArICBAcGFyYW1baW5dICBU aGlzICAgICAgICAgICAgICAgICAgUHJvdG9jb2wgaW5zdGFuY2UgcG9pbnRlci4NCj4gKyAgQHBh cmFtW2luXSAgQ29udHJvbGxlckhhbmRsZSAgICAgIEhhbmRsZSBvZiBkZXZpY2UgdG8gc3RvcCBk cml2ZXIgb24NCj4gKyAgQHBhcmFtW2luXSAgTnVtYmVyT2ZDaGlsZHJlbiAgICAgIE51bWJlciBv ZiBIYW5kbGVzIGluIENoaWxkSGFuZGxlQnVmZmVyLg0KPiBJZiBudW1iZXIgb2YNCj4gKyAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoaWxkcmVuIGlzIHplcm8gc3RvcCB0aGUg ZW50aXJlIGJ1cyBkcml2ZXIuDQo+ICsgIEBwYXJhbVtpbl0gIENoaWxkSGFuZGxlQnVmZmVyICAg ICBMaXN0IG9mIENoaWxkIEhhbmRsZXMgdG8gU3RvcC4NCj4gKw0KPiArICBAcmV0dmFsIEVGSV9T VUNDRVNTICAgICAgICAgICAgICAgVGhpcyBkcml2ZXIgaXMgcmVtb3ZlZCBDb250cm9sbGVySGFu ZGxlDQo+ICsgIEByZXR2YWwgb3RoZXIgICAgICAgICAgICAgICAgICAgICBUaGlzIGRyaXZlciB3 YXMgbm90IHJlbW92ZWQgZnJvbSB0aGlzIGRldmljZQ0KPiArDQo+ICsqKi8NCj4gK0VGSV9TVEFU VVMNCj4gK0VGSUFQSQ0KPiArVXNiUm5kaXNEcml2ZXJTdG9wICgNCj4gKyAgSU4gIEVGSV9EUklW RVJfQklORElOR19QUk9UT0NPTCAgKlRoaXMsDQo+ICsgIElOICBFRklfSEFORExFICAgICAgICAg ICAgICAgICAgIENvbnRyb2xsZXJIYW5kbGUsDQo+ICsgIElOICBVSU5UTiAgICAgICAgICAgICAg ICAgICAgICAgIE51bWJlck9mQ2hpbGRyZW4sDQo+ICsgIElOICBFRklfSEFORExFICAgICAgICAg ICAgICAgICAgICpDaGlsZEhhbmRsZUJ1ZmZlcg0KPiArICApDQo+ICt7DQo+ICsgIEVGSV9TVEFU VVMgICAgICAgICAgICAgICAgICAgU3RhdHVzOw0KPiArICBFREtJSV9VU0JfRVRIRVJORVRfUFJP VE9DT0wgICpVc2JFdGhQcm90b2NvbDsNCj4gKyAgVVNCX1JORElTX0RFVklDRSAgICAgICAgICAg ICAqVXNiUm5kaXNEZXZpY2U7DQo+ICsNCj4gKyAgREVCVUcgKChERUJVR19JTkZPLCAiVXNiUm5k aXNEcml2ZXJTdG9wIENvbnRyb2xsZXJIYW5kbGUgJWx4XG4iLA0KPiBDb250cm9sbGVySGFuZGxl KSk7DQo+ICsNCj4gKyAgU3RhdHVzID0gZ0JTLT5PcGVuUHJvdG9jb2wgKA0KPiArICAgICAgICAg ICAgICAgICAgQ29udHJvbGxlckhhbmRsZSwNCj4gKyAgICAgICAgICAgICAgICAgICZnRWRrSUlV c2JFdGhQcm90b2NvbEd1aWQsDQo+ICsgICAgICAgICAgICAgICAgICAoVk9JRCAqKikmVXNiRXRo UHJvdG9jb2wsDQo+ICsgICAgICAgICAgICAgICAgICBUaGlzLT5Ecml2ZXJCaW5kaW5nSGFuZGxl LA0KPiArICAgICAgICAgICAgICAgICAgQ29udHJvbGxlckhhbmRsZSwNCj4gKyAgICAgICAgICAg ICAgICAgIEVGSV9PUEVOX1BST1RPQ09MX0dFVF9QUk9UT0NPTA0KPiArICAgICAgICAgICAgICAg ICAgKTsNCj4gKyAgaWYgKEVGSV9FUlJPUiAoU3RhdHVzKSkgew0KPiArICAgIFN0YXR1cyA9IENo ZWNrYW5kU3RvcFJuZGlzRGV2aWNlIChUaGlzLCBDb250cm9sbGVySGFuZGxlKTsNCj4gKyAgICBy ZXR1cm4gU3RhdHVzOw0KPiArICB9DQo+ICsNCj4gKyAgVXNiUm5kaXNEZXZpY2UgPSBVU0JfUk5E SVNfREVWSUNFX0ZST01fVEhJUyAoVXNiRXRoUHJvdG9jb2wpOw0KPiArDQo+ICsgIFN0YXR1cyA9 IGdCUy0+Q2xvc2VQcm90b2NvbCAoDQo+ICsgICAgICAgICAgICAgICAgICBVc2JSbmRpc0Rldmlj ZS0+VXNiQ2RjRGF0YUhhbmRsZSwNCj4gKyAgICAgICAgICAgICAgICAgICZnRWZpVXNiSW9Qcm90 b2NvbEd1aWQsDQo+ICsgICAgICAgICAgICAgICAgICBUaGlzLT5Ecml2ZXJCaW5kaW5nSGFuZGxl LA0KPiArICAgICAgICAgICAgICAgICAgVXNiUm5kaXNEZXZpY2UtPlVzYkNkY0RhdGFIYW5kbGUN Cj4gKyAgICAgICAgICAgICAgICAgICk7DQo+ICsgIGlmIChFRklfRVJST1IgKFN0YXR1cykpIHsN Cj4gKyAgICBERUJVRyAoKERFQlVHX0VSUk9SLCAiJWE6Q2xvc2VQcm90b2NvbCBzdGF0dXMgPSAl clxuIiwgX19mdW5jX18sDQo+IFN0YXR1cykpOw0KPiArICB9DQo+ICsNCj4gKyAgU3RhdHVzID0g Z0JTLT5Vbmluc3RhbGxQcm90b2NvbEludGVyZmFjZSAoDQo+ICsgICAgICAgICAgICAgICAgICBD b250cm9sbGVySGFuZGxlLA0KPiArICAgICAgICAgICAgICAgICAgJmdFZGtJSVVzYkV0aFByb3Rv Y29sR3VpZCwNCj4gKyAgICAgICAgICAgICAgICAgIFVzYkV0aFByb3RvY29sDQo+ICsgICAgICAg ICAgICAgICAgICApOw0KPiArICBpZiAoRUZJX0VSUk9SIChTdGF0dXMpKSB7DQo+ICsgICAgcmV0 dXJuIFN0YXR1czsNCj4gKyAgfQ0KPiArDQo+ICsgIFN0YXR1cyA9IGdCUy0+Q2xvc2VQcm90b2Nv bCAoDQo+ICsgICAgICAgICAgICAgICAgICBDb250cm9sbGVySGFuZGxlLA0KPiArICAgICAgICAg ICAgICAgICAgJmdFZmlVc2JJb1Byb3RvY29sR3VpZCwNCj4gKyAgICAgICAgICAgICAgICAgIFRo aXMtPkRyaXZlckJpbmRpbmdIYW5kbGUsDQo+ICsgICAgICAgICAgICAgICAgICBDb250cm9sbGVy SGFuZGxlDQo+ICsgICAgICAgICAgICAgICAgICApOw0KPiArDQo+ICsgIEZyZWVQb29sIChVc2JS bmRpc0RldmljZS0+Q29uZmlnKTsNCj4gKyAgRnJlZVBvb2wgKFVzYlJuZGlzRGV2aWNlKTsNCj4g Kw0KPiArICBERUJVRyAoKERFQlVHX0lORk8sICJVc2JSbmRpc0RyaXZlclN0b3AgJXJcbiIsIFN0 YXR1cykpOw0KPiArICByZXR1cm4gU3RhdHVzOw0KPiArfQ0KPiArDQo+ICsvKioNCj4gKyAgRW50 cnlwb2ludCBvZiBSTkRJUyBEcml2ZXIuDQo+ICsNCj4gKyAgVGhpcyBmdW5jdGlvbiBpcyB0aGUg ZW50cnlwb2ludCBvZiBSTkRJUyBEcml2ZXIuIEl0IGluc3RhbGxzIERyaXZlciBCaW5kaW5nDQo+ ICsgIFByb3RvY29scyB0b2dldGhlciB3aXRoIENvbXBvbmVudCBOYW1lIFByb3RvY29scy4NCj4g Kw0KPiArICBAcGFyYW1baW5dICBJbWFnZUhhbmRsZSAgICAgICBUaGUgZmlybXdhcmUgYWxsb2Nh dGVkIGhhbmRsZSBmb3IgdGhlIEVGSQ0KPiBpbWFnZS4NCj4gKyAgQHBhcmFtW2luXSAgU3lzdGVt VGFibGUgICAgICAgQSBwb2ludGVyIHRvIHRoZSBFRkkgU3lzdGVtIFRhYmxlLg0KPiArDQo+ICsg IEByZXR2YWwgRUZJX1NVQ0NFU1MgICAgICAgICAgIFRoZSBlbnRyeSBwb2ludCBpcyBleGVjdXRl ZCBzdWNjZXNzZnVsbHkuDQo+ICsNCj4gKyoqLw0KPiArRUZJX1NUQVRVUw0KPiArRUZJQVBJDQo+ ICtVc2JSbmRpc0VudHJ5ICgNCj4gKyAgSU4gRUZJX0hBTkRMRSAgICAgICAgSW1hZ2VIYW5kbGUs DQo+ICsgIElOIEVGSV9TWVNURU1fVEFCTEUgICpTeXN0ZW1UYWJsZQ0KPiArICApDQo+ICt7DQo+ ICsgIGdVc2JSbmRpc0RyaXZlckJpbmRpbmcuRHJpdmVyQmluZGluZ0hhbmRsZSA9IEltYWdlSGFu ZGxlOw0KPiArICBnVXNiUm5kaXNEcml2ZXJCaW5kaW5nLkltYWdlSGFuZGxlICAgICAgICAgPSBJ bWFnZUhhbmRsZTsNCj4gKw0KPiArICByZXR1cm4gZ0JTLT5JbnN0YWxsTXVsdGlwbGVQcm90b2Nv bEludGVyZmFjZXMgKA0KPiArICAgICAgICAgICAgICAgICZnVXNiUm5kaXNEcml2ZXJCaW5kaW5n LkRyaXZlckJpbmRpbmdIYW5kbGUsDQo+ICsgICAgICAgICAgICAgICAgJmdFZmlEcml2ZXJCaW5k aW5nUHJvdG9jb2xHdWlkLA0KPiArICAgICAgICAgICAgICAgICZnVXNiUm5kaXNEcml2ZXJCaW5k aW5nLA0KPiArICAgICAgICAgICAgICAgICZnRWZpQ29tcG9uZW50TmFtZTJQcm90b2NvbEd1aWQs DQo+ICsgICAgICAgICAgICAgICAgJmdVc2JSbmRpc0NvbXBvbmVudE5hbWUyLA0KPiArICAgICAg ICAgICAgICAgIE5VTEwNCj4gKyAgICAgICAgICAgICAgICApOw0KPiArfQ0KPiBkaWZmIC0tZ2l0 IGEvTWRlTW9kdWxlUGtnL0J1cy9Vc2IvVXNiTmV0d29yay9Vc2JSbmRpcy9Vc2JSbmRpcy5oDQo+ IGIvTWRlTW9kdWxlUGtnL0J1cy9Vc2IvVXNiTmV0d29yay9Vc2JSbmRpcy9Vc2JSbmRpcy5oDQo+ IG5ldyBmaWxlIG1vZGUgMTAwNjQ0DQo+IGluZGV4IDAwMDAwMDAwMDAuLjljMzg2NDJmZmUNCj4g LS0tIC9kZXYvbnVsbA0KPiArKysgYi9NZGVNb2R1bGVQa2cvQnVzL1VzYi9Vc2JOZXR3b3JrL1Vz YlJuZGlzL1VzYlJuZGlzLmgNCj4gQEAgLTAsMCArMSw1ODYgQEANCj4gKy8qKiBAZmlsZQ0KPiAr ICBIZWFkZXIgZmlsZSBmb3IgZm9yIFVTQiBSbmRpcyBkcml2ZXINCj4gKw0KPiArICBDb3B5cmln aHQgKGMpIDIwMjMsIEFtZXJpY2FuIE1lZ2F0cmVuZHMgSW50ZXJuYXRpb25hbCBMTEMuIEFsbCBy aWdodHMNCj4gcmVzZXJ2ZWQuPEJSPg0KPiArICBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQlNE LTItQ2xhdXNlLVBhdGVudA0KPiArKiovDQo+ICsNCj4gKyNpZm5kZWYgX1VTQl9STkRJU19IXw0K PiArI2RlZmluZSBfVVNCX1JORElTX0hfDQo+ICsNCj4gKyNpbmNsdWRlIDxMaWJyYXJ5L1VlZmlE cml2ZXJFbnRyeVBvaW50Lmg+DQo+ICsjaW5jbHVkZSA8TGlicmFyeS9VZWZpQm9vdFNlcnZpY2Vz VGFibGVMaWIuaD4NCj4gKyNpbmNsdWRlIDxMaWJyYXJ5L1VlZmlMaWIuaD4NCj4gKyNpbmNsdWRl IDxMaWJyYXJ5L0RldmljZVBhdGhMaWIuaD4NCj4gKyNpbmNsdWRlIDxMaWJyYXJ5L0RlYnVnTGli Lmg+DQo+ICsjaW5jbHVkZSA8TGlicmFyeS9NZW1vcnlBbGxvY2F0aW9uTGliLmg+DQo+ICsjaW5j bHVkZSA8TGlicmFyeS9CYXNlTWVtb3J5TGliLmg+DQo+ICsjaW5jbHVkZSA8TGlicmFyeS9VZWZp VXNiTGliLmg+DQo+ICsjaW5jbHVkZSA8UHJvdG9jb2wvVXNiSW8uaD4NCj4gKyNpbmNsdWRlIDxQ cm90b2NvbC9Vc2JFdGhlcm5ldFByb3RvY29sLmg+DQo+ICsNCj4gK3R5cGVkZWYgc3RydWN0IF9S RU1PVEVfTkRJU19NU0dfSEVBREVSIFJFTU9URV9ORElTX01TR19IRUFERVI7DQo+ICsNCj4gK3R5 cGVkZWYgc3RydWN0IHsNCj4gKyAgVUlOVDMyICAgICAgICAgICAgICAgICAgICAgICAgIFNpZ25h dHVyZTsNCj4gKyAgRURLSUlfVVNCX0VUSEVSTkVUX1BST1RPQ09MICAgIFVzYkV0aDsNCj4gKyAg RUZJX0hBTkRMRSAgICAgICAgICAgICAgICAgICAgIFVzYkNkY0RhdGFIYW5kbGU7DQo+ICsgIEVG SV9IQU5ETEUgICAgICAgICAgICAgICAgICAgICBVc2JSbmRpc0hhbmRsZTsNCj4gKyAgRUZJX1VT Ql9JT19QUk9UT0NPTCAgICAgICAgICAgICpVc2JJbzsNCj4gKyAgRUZJX1VTQl9JT19QUk9UT0NP TCAgICAgICAgICAgICpVc2JJb0NkY0RhdGE7DQo+ICsgIEVGSV9VU0JfQ09ORklHX0RFU0NSSVBU T1IgICAgICAqQ29uZmlnOw0KPiArICBVSU5UOCAgICAgICAgICAgICAgICAgICAgICAgICAgTnVt T2ZJbnRlcmZhY2U7DQo+ICsgIFVJTlQ4ICAgICAgICAgICAgICAgICAgICAgICAgICBCdWxrSW5F bmRwb2ludDsNCj4gKyAgVUlOVDggICAgICAgICAgICAgICAgICAgICAgICAgIEJ1bGtPdXRFbmRw b2ludDsNCj4gKyAgVUlOVDggICAgICAgICAgICAgICAgICAgICAgICAgIEludGVycnVwRW5kcG9p bnQ7DQo+ICsgIEVGSV9NQUNfQUREUkVTUyAgICAgICAgICAgICAgICBNYWNBZGRyZXNzOw0KPiAr ICBVSU5UMzIgICAgICAgICAgICAgICAgICAgICAgICAgUmVxdWVzdElkOw0KPiArICBVSU5UMzIg ICAgICAgICAgICAgICAgICAgICAgICAgTWVkaXVtOw0KPiArICBVSU5UMzIgICAgICAgICAgICAg ICAgICAgICAgICAgTWF4UGFja2V0c1BlclRyYW5zZmVyOw0KPiArICBVSU5UMzIgICAgICAgICAg ICAgICAgICAgICAgICAgTWF4VHJhbnNmZXJTaXplOw0KPiArICBVSU5UMzIgICAgICAgICAgICAg ICAgICAgICAgICAgUGFja2V0QWxpZ25tZW50RmFjdG9yOw0KPiArICBMSVNUX0VOVFJZICAgICAg ICAgICAgICAgICAgICAgUmVjZWl2ZVBhY2tldExpc3Q7DQo+ICt9IFVTQl9STkRJU19ERVZJQ0U7 DQo+ICsNCj4gKyNkZWZpbmUgVVNCX1JORElTX0RSSVZFUl9WRVJTSU9OICAgICAgIDENCj4gKyNk ZWZpbmUgVVNCX1RYX0VUSEVSTkVUX0JVTEtfVElNRU9VVCAgIDMwMDANCj4gKyNkZWZpbmUgVVNC X1JYX0VUSEVSTkVUX0JVTEtfVElNRU9VVCAgIDMNCj4gKyNkZWZpbmUgVVNCX0VUSEVSTkVUX1RS QU5TRkVSX1RJTUVPVVQgIDIwMA0KPiArDQo+ICsjZGVmaW5lIExBTl9CVUxLSU5fQ01EX0NPTlRS T0wgICAgICAxDQo+ICsjZGVmaW5lIE1BWElNVU1fU1RPUEJVTEtJTl9DTlQgICAgICAzMDAgICAg ICAgIC8vIEluZGljYXRpbmcgbWF4aW11bQ0KPiBjb3VudHMgZm9yIHdhaXRpbmcgYnVsayBpbiBj b21tYW5kDQo+ICsjZGVmaW5lIE1JTklNVU1fU1RPUEJVTEtJTl9DTlQgICAgICAzICAgICAgICAg IC8vIEluZGljYXRpbmcgbWluaW11bQ0KPiBjb3VudHMgZm9yIHdhaXRpbmcgYnVsayBpbiBjb21t YW5kDQo+ICsjZGVmaW5lIEJVTEtJTl9DTURfUE9MTElOR19DTlQgICAgICAzMDAgICAgICAgIC8v IEluZGljYXRpbmcgdGhlIHdhaXRpbmcNCj4gY291bnRzIGZvciBzZW5kIGJ1bGsgaW4gY29tbWFu ZCB3aGVuIHN5c3RlbSBwZW5kaW5nDQo+ICsjZGVmaW5lIFJORElTX1JFU0VSVkVEX0JZVEVfTEVO R1RIICA4DQo+ICsNCj4gKyNkZWZpbmUgVVNCX1JORElTX1NJR05BVFVSRSAgU0lHTkFUVVJFXzMy KCdyJywgJ24nLCAnZCcsICdzJykNCj4gKyNkZWZpbmUgVVNCX1JORElTX0RFVklDRV9GUk9NX1RI SVMoYSkgIENSIChhLCBVU0JfUk5ESVNfREVWSUNFLA0KPiBVc2JFdGgsIFVTQl9STkRJU19TSUdO QVRVUkUpDQo+ICsNCj4gK2V4dGVybiBFRklfQ09NUE9ORU5UX05BTUUyX1BST1RPQ09MICBnVXNi Um5kaXNDb21wb25lbnROYW1lMjsNCj4gKw0KPiArc3RydWN0IEJJVF9NQVAgew0KPiArICB1bnNp Z25lZCBpbnQgICAgU3JjOw0KPiArICB1bnNpZ25lZCBpbnQgICAgRHN0Ow0KPiArfTsNCj4gKw0K PiArRUZJX1NUQVRVUw0KPiArRUZJQVBJDQo+ICtVc2JSbmRpc0RyaXZlclN1cHBvcnRlZCAoDQo+ ICsgIElOIEVGSV9EUklWRVJfQklORElOR19QUk9UT0NPTCAgKlRoaXMsDQo+ICsgIElOIEVGSV9I QU5ETEUgICAgICAgICAgICAgICAgICAgQ29udHJvbGxlckhhbmRsZSwNCj4gKyAgSU4gRUZJX0RF VklDRV9QQVRIX1BST1RPQ09MICAgICAqUmVtYWluaW5nRGV2aWNlUGF0aA0KPiArICApOw0KPiAr DQo+ICtFRklfU1RBVFVTDQo+ICtFRklBUEkNCj4gK1VzYlJuZGlzRHJpdmVyU3RhcnQgKA0KPiAr ICBJTiBFRklfRFJJVkVSX0JJTkRJTkdfUFJPVE9DT0wgICpUaGlzLA0KPiArICBJTiBFRklfSEFO RExFICAgICAgICAgICAgICAgICAgIENvbnRyb2xsZXJIYW5kbGUsDQo+ICsgIElOIEVGSV9ERVZJ Q0VfUEFUSF9QUk9UT0NPTCAgICAgKlJlbWFpbmluZ0RldmljZVBhdGgNCj4gKyAgKTsNCj4gKw0K PiArRUZJX1NUQVRVUw0KPiArRUZJQVBJDQo+ICtVc2JSbmRpc0RyaXZlclN0b3AgKA0KPiArICBJ TiAgRUZJX0RSSVZFUl9CSU5ESU5HX1BST1RPQ09MICAqVGhpcywNCj4gKyAgSU4gIEVGSV9IQU5E TEUgICAgICAgICAgICAgICAgICAgQ29udHJvbGxlckhhbmRsZSwNCj4gKyAgSU4gIFVJTlROICAg ICAgICAgICAgICAgICAgICAgICAgTnVtYmVyT2ZDaGlsZHJlbiwNCj4gKyAgSU4gIEVGSV9IQU5E TEUgICAgICAgICAgICAgICAgICAgKkNoaWxkSGFuZGxlQnVmZmVyDQo+ICsgICk7DQo+ICsNCj4g K0VGSV9TVEFUVVMNCj4gK0xvYWRBbGxEZXNjcmlwdG9yICgNCj4gKyAgSU4gIEVGSV9VU0JfSU9f UFJPVE9DT0wgICAgICAgICpVc2JJbywNCj4gKyAgT1VUIEVGSV9VU0JfQ09ORklHX0RFU0NSSVBU T1IgICoqQ29uZmlnRGVzYw0KPiArICApOw0KPiArDQo+ICtCT09MRUFODQo+ICtOZXh0RGVzY3Jp cHRvciAoDQo+ICsgIElOIEVGSV9VU0JfQ09ORklHX0RFU0NSSVBUT1IgICpEZXNjLA0KPiArICBJ TiBPVVQgVUlOVE4gICAgICAgICAgICAgICAgICAqT2Zmc2V0DQo+ICsgICk7DQo+ICsNCj4gK0VG SV9TVEFUVVMNCj4gK0dldEZ1bmN0aW9uYWxEZXNjcmlwdG9yICgNCj4gKyAgSU4gIEVGSV9VU0Jf Q09ORklHX0RFU0NSSVBUT1IgICpDb25maWcsDQo+ICsgIElOICBVSU5UOCAgICAgICAgICAgICAg ICAgICAgICBGdW5EZXNjcmlwdG9yVHlwZSwNCj4gKyAgT1VUIFZPSUQgICAgICAgICAgICAgICAg ICAgICAgICpEYXRhQnVmZmVyDQo+ICsgICk7DQo+ICsNCj4gK1ZPSUQNCj4gK0dldEVuZHBvaW50 ICgNCj4gKyAgSU4gICAgICBFRklfVVNCX0lPX1BST1RPQ09MICAqVXNiSW8sDQo+ICsgIElOIE9V VCAgVVNCX1JORElTX0RFVklDRSAgICAgKlVzYlJuZGlzRGV2aWNlDQo+ICsgICk7DQo+ICsNCj4g K0VGSV9TVEFUVVMNCj4gK0VGSUFQSQ0KPiArVXNiUm5kaXNJbnRlcnJ1cHQgKA0KPiArICBJTiBF REtJSV9VU0JfRVRIRVJORVRfUFJPVE9DT0wgICpUaGlzLA0KPiArICBJTiBCT09MRUFOICAgICAg ICAgICAgICAgICAgICAgIElzTmV3VHJhbnNmZXIsDQo+ICsgIElOIFVJTlROICAgICAgICAgICAg ICAgICAgICAgICAgUG9sbGluZ0ludGVydmFsLA0KPiArICBJTiBFRklfVVNCX0RFVklDRV9SRVFV RVNUICAgICAgICpSZXF1c3QNCj4gKyAgKTsNCj4gKw0KPiArRUZJX1NUQVRVUw0KPiArRUZJQVBJ DQo+ICtJbnRlcnJ1cHRDYWxsYmFjayAoDQo+ICsgIElOICBWT0lEICAgICpEYXRhLA0KPiArICBJ TiAgVUlOVE4gICBEYXRhTGVuZ3RoLA0KPiArICBJTiAgVk9JRCAgICAqQ29udGV4dCwNCj4gKyAg SU4gIFVJTlQzMiAgU3RhdHVzDQo+ICsgICk7DQo+ICsNCj4gK0VGSV9TVEFUVVMNCj4gK0VGSUFQ SQ0KPiArR2V0VXNiRXRoTWFjQWRkcmVzcyAoDQo+ICsgIElOICBFREtJSV9VU0JfRVRIRVJORVRf UFJPVE9DT0wgICpUaGlzLA0KPiArICBPVVQgRUZJX01BQ19BRERSRVNTICAgICAgICAgICAgICAq TWFjQWRkcmVzcw0KPiArICApOw0KPiArDQo+ICtFRklfU1RBVFVTDQo+ICtFRklBUEkNCj4gK1Vz YkV0aEJ1bGtTaXplICgNCj4gKyAgSU4gIEVES0lJX1VTQl9FVEhFUk5FVF9QUk9UT0NPTCAgKlRo aXMsDQo+ICsgIE9VVCBVSU5UTiAgICAgICAgICAgICAgICAgICAgICAgICpCdWxrU2l6ZQ0KPiAr ICApOw0KPiArDQo+ICtFRklfU1RBVFVTDQo+ICtFRklBUEkNCj4gK1JuZGlzRHVtbXlSZXR1cm4g KA0KPiArICBJTiAgUFhFX0NEQiAgICpDZGIsDQo+ICsgIElOICBOSUNfREFUQSAgKk5pYw0KPiAr ICApOw0KPiArDQo+ICtFRklfU1RBVFVTDQo+ICtFRklBUEkNCj4gK1JuZGlzVW5kaVN0YXJ0ICgN Cj4gKyAgSU4gUFhFX0NEQiAgICpDZGIsDQo+ICsgIElOIE5JQ19EQVRBICAqTmljDQo+ICsgICk7 DQo+ICsNCj4gK0VGSV9TVEFUVVMNCj4gK0VGSUFQSQ0KPiArUm5kaXNVbmRpU3RvcCAoDQo+ICsg IElOIFBYRV9DREIgICAqQ2RiLA0KPiArICBJTiBOSUNfREFUQSAgKk5pYw0KPiArICApOw0KPiAr DQo+ICtFRklfU1RBVFVTDQo+ICtFRklBUEkNCj4gK1JuZGlzVW5kaUdldEluaXRJbmZvICgNCj4g KyAgSU4gUFhFX0NEQiAgICpDZGIsDQo+ICsgIElOIE5JQ19EQVRBICAqTmljDQo+ICsgICk7DQo+ ICsNCj4gK0VGSV9TVEFUVVMNCj4gK0VGSUFQSQ0KPiArUm5kaXNVbmRpR2V0Q29uZmlnSW5mbyAo DQo+ICsgIElOIFBYRV9DREIgICAqQ2RiLA0KPiArICBJTiBOSUNfREFUQSAgKk5pYw0KPiArICAp Ow0KPiArDQo+ICtFRklfU1RBVFVTDQo+ICtFRklBUEkNCj4gK1JuZGlzVW5kaUluaXRpYWxpemUg KA0KPiArICBJTiBQWEVfQ0RCICAgKkNkYiwNCj4gKyAgSU4gTklDX0RBVEEgICpOaWMNCj4gKyAg KTsNCj4gKw0KPiArRUZJX1NUQVRVUw0KPiArRUZJQVBJDQo+ICtSbmRpc1VuZGlUcmFuc21pdCAo DQo+ICsgIElOICAgICAgUFhFX0NEQiAgICAgICAgICAgICAgICAgICAgICAqQ2RiLA0KPiArICBJ TiAgICAgIEVES0lJX1VTQl9FVEhFUk5FVF9QUk9UT0NPTCAgKlRoaXMsDQo+ICsgIElOICAgICAg Vk9JRCAgICAgICAgICAgICAgICAgICAgICAgICAqQnVsa091dERhdGEsDQo+ICsgIElOIE9VVCAg VUlOVE4gICAgICAgICAgICAgICAgICAgICAgICAqRGF0YUxlbmd0aA0KPiArICApOw0KPiArDQo+ ICtFRklfU1RBVFVTDQo+ICtFRklBUEkNCj4gK1JuZGlzVW5kaVJlY2VpdmUgKA0KPiArICBJTiAg ICAgUFhFX0NEQiAgICAgICAgICAgICAgICAgICAgICAqQ2RiLA0KPiArICBJTiAgICAgRURLSUlf VVNCX0VUSEVSTkVUX1BST1RPQ09MICAqVGhpcywNCj4gKyAgSU4gT1VUIFZPSUQgICAgICAgICAg ICAgICAgICAgICAgICAgKkJ1bGtJbkRhdGEsDQo+ICsgIElOIE9VVCBVSU5UTiAgICAgICAgICAg ICAgICAgICAgICAgICpEYXRhTGVuZ3RoDQo+ICsgICk7DQo+ICsNCj4gK0VGSV9TVEFUVVMNCj4g K0VGSUFQSQ0KPiArUm5kaXNVbmRpUmVzZXQgKA0KPiArICBJTiBQWEVfQ0RCICAgKkNkYiwNCj4g KyAgSU4gTklDX0RBVEEgICpOaWMNCj4gKyAgKTsNCj4gKw0KPiArRUZJX1NUQVRVUw0KPiArRUZJ QVBJDQo+ICtSbmRpc1VuZGlTaHV0ZG93biAoDQo+ICsgIElOIFBYRV9DREIgICAqQ2RiLA0KPiAr ICBJTiBOSUNfREFUQSAgKk5pYw0KPiArICApOw0KPiArDQo+ICtFRklfU1RBVFVTDQo+ICtFRklB UEkNCj4gK1JuZGlzVW5kaVJlY2VpdmVGaWx0ZXIgKA0KPiArICBJTiBQWEVfQ0RCICAgKkNkYiwN Cj4gKyAgSU4gTklDX0RBVEEgICpOaWMNCj4gKyAgKTsNCj4gKw0KPiArRUZJX1NUQVRVUw0KPiAr RUZJQVBJDQo+ICtSbmRpc1VuZGlHZXRTdGF0dXMgKA0KPiArICBJTiBQWEVfQ0RCICAgKkNkYiwN Cj4gKyAgSU4gTklDX0RBVEEgICpOaWMNCj4gKyAgKTsNCj4gKw0KPiArRUZJX1NUQVRVUw0KPiAr RUZJQVBJDQo+ICtHZXRVc2JIZWFkZXJGdW5EZXNjcmlwdG9yICgNCj4gKyAgSU4gIEVES0lJX1VT Ql9FVEhFUk5FVF9QUk9UT0NPTCAgKlRoaXMsDQo+ICsgIE9VVCBVU0JfSEVBREVSX0ZVTl9ERVND UklQVE9SICAgICpVc2JIZWFkZXJGdW5EZXNjcmlwdG9yDQo+ICsgICk7DQo+ICsNCj4gK0VGSV9T VEFUVVMNCj4gK0VGSUFQSQ0KPiArR2V0VXNiVW5pb25GdW5EZXNjcmlwdG9yICgNCj4gKyAgSU4g IEVES0lJX1VTQl9FVEhFUk5FVF9QUk9UT0NPTCAgKlRoaXMsDQo+ICsgIE9VVCBVU0JfVU5JT05f RlVOX0RFU0NSSVBUT1IgICAgICpVc2JVbmlvbkZ1bkRlc2NyaXB0b3INCj4gKyAgKTsNCj4gKw0K PiArRUZJX1NUQVRVUw0KPiArRUZJQVBJDQo+ICtHZXRVc2JSbmRpc0Z1bkRlc2NyaXB0b3IgKA0K PiArICBJTiAgRURLSUlfVVNCX0VUSEVSTkVUX1BST1RPQ09MICAqVGhpcywNCj4gKyAgT1VUIFVT Ql9FVEhFUk5FVF9GVU5fREVTQ1JJUFRPUiAgKlVzYkV0aEZ1bkRlc2NyaXB0b3INCj4gKyAgKTsN Cj4gKw0KPiArRUZJX1NUQVRVUw0KPiArRUZJQVBJDQo+ICtTZXRVc2JSbmRpc01jYXN0RmlsdGVy ICgNCj4gKyAgSU4gRURLSUlfVVNCX0VUSEVSTkVUX1BST1RPQ09MICAqVGhpcywNCj4gKyAgSU4g VUlOVDE2ICAgICAgICAgICAgICAgICAgICAgICBWYWx1ZSwNCj4gKyAgSU4gVk9JRCAgICAgICAg ICAgICAgICAgICAgICAgICAqTWNhc3RBZGRyDQo+ICsgICk7DQo+ICsNCj4gK0VGSV9TVEFUVVMN Cj4gK0VGSUFQSQ0KPiArU2V0VXNiUm5kaXNQb3dlckZpbHRlciAoDQo+ICsgIElOIEVES0lJX1VT Ql9FVEhFUk5FVF9QUk9UT0NPTCAgKlRoaXMsDQo+ICsgIElOIFVJTlQxNiAgICAgICAgICAgICAg ICAgICAgICAgVmFsdWUsDQo+ICsgIElOIFVJTlQxNiAgICAgICAgICAgICAgICAgICAgICAgTGVu Z3RoLA0KPiArICBJTiBWT0lEICAgICAgICAgICAgICAgICAgICAgICAgICpQYXR0ZXJuRmlsdGVy DQo+ICsgICk7DQo+ICsNCj4gK0VGSV9TVEFUVVMNCj4gK0VGSUFQSQ0KPiArR2V0VXNiUm5kaXNQ b3dlckZpbHRlciAoDQo+ICsgIElOIEVES0lJX1VTQl9FVEhFUk5FVF9QUk9UT0NPTCAgKlRoaXMs DQo+ICsgIElOIFVJTlQxNiAgICAgICAgICAgICAgICAgICAgICAgVmFsdWUsDQo+ICsgIElOIEJP T0xFQU4gICAgICAgICAgICAgICAgICAgICAgKlBhdHRlcm5BY3RpdmUNCj4gKyAgKTsNCj4gKw0K PiArRUZJX1NUQVRVUw0KPiArRUZJQVBJDQo+ICtTZXRVc2JSbmRpc1BhY2tldEZpbHRlciAoDQo+ ICsgIElOIEVES0lJX1VTQl9FVEhFUk5FVF9QUk9UT0NPTCAgKlRoaXMsDQo+ICsgIElOIFVJTlQx NiAgICAgICAgICAgICAgICAgICAgICAgVmFsdWUNCj4gKyAgKTsNCj4gKw0KPiArRUZJX1NUQVRV Uw0KPiArRUZJQVBJDQo+ICtHZXRSbmRpc1N0YXRpc3RpYyAoDQo+ICsgIElOIEVES0lJX1VTQl9F VEhFUk5FVF9QUk9UT0NPTCAgKlRoaXMsDQo+ICsgIElOIFVJTlQxNiAgICAgICAgICAgICAgICAg ICAgICAgVmFsdWUsDQo+ICsgIElOIFZPSUQgICAgICAgICAgICAgICAgICAgICAgICAgKlN0YXRp c3RpYw0KPiArICApOw0KPiArDQo+ICtFRklfU1RBVFVTDQo+ICtSbmRpc0NvbnRyb2xNc2cgKA0K PiArICBJTiAgVVNCX1JORElTX0RFVklDRSAgICAgICAgKlVzYlJuZGlzRGV2aWNlLA0KPiArICBJ TiAgUkVNT1RFX05ESVNfTVNHX0hFQURFUiAgKlJuZGlzTXNnLA0KPiArICBPVVQgUkVNT1RFX05E SVNfTVNHX0hFQURFUiAgKlJuZGlzTXNnUmVzcG9uc2UNCj4gKyAgKTsNCj4gKw0KPiArRUZJX1NU QVRVUw0KPiArUm5kaXNUcmFuc21pdERhdGFNc2cgKA0KPiArICBJTiAgVVNCX1JORElTX0RFVklD RSAgICAgICAgKlVzYlJuZGlzRGV2aWNlLA0KPiArICBJTiAgUkVNT1RFX05ESVNfTVNHX0hFQURF UiAgKlJuZGlzTXNnLA0KPiArICBVSU5UTiAgICAgICAgICAgICAgICAgICAgICAgKlRyYW5zZmVy TGVuZ3RoDQo+ICsgICk7DQo+ICsNCj4gK0VGSV9TVEFUVVMNCj4gK1JuZGlzUmVjZWl2ZURhdGFN c2cgKA0KPiArICBJTiAgVVNCX1JORElTX0RFVklDRSAgICAgICAgKlVzYlJuZGlzRGV2aWNlLA0K PiArICBJTiAgUkVNT1RFX05ESVNfTVNHX0hFQURFUiAgKlJuZGlzTXNnLA0KPiArICBVSU5UTiAg ICAgICAgICAgICAgICAgICAgICAgKlRyYW5zZmVyTGVuZ3RoDQo+ICsgICk7DQo+ICsNCj4gK1ZP SUQNCj4gK1ByaW50Um5kaXNNc2cgKA0KPiArICBJTiAgUkVNT1RFX05ESVNfTVNHX0hFQURFUiAg KlJuZGlzTXNnDQo+ICsgICk7DQo+ICsNCj4gKyNkZWZpbmUgUk5ESVNfTUFKT1JfVkVSU0lPTiAg ICAgIDB4MDAwMDAwMDENCj4gKyNkZWZpbmUgUk5ESVNfTUlOT1JfVkVSU0lPTiAgICAgIDB4MDAw MDAwMDANCj4gKyNkZWZpbmUgUk5ESVNfTUFYX1RSQU5TRkVSX1NJWkUgIDB4NDAwMA0KPiArDQo+ ICsjZGVmaW5lIFJORElTX1BBQ0tFVF9NU0cgICAgICAgICAgIDB4MDAwMDAwMDENCj4gKyNkZWZp bmUgUk5ESVNfSU5JVElBTElaRV9NU0cgICAgICAgMHgwMDAwMDAwMg0KPiArI2RlZmluZSBSTkRJ U19JTklUSUFMSVpFX0NNUExUICAgICAweDgwMDAwMDAyDQo+ICsjZGVmaW5lIFJORElTX0hMVF9N U0cgICAgICAgICAgICAgIDB4MDAwMDAwMDMNCj4gKyNkZWZpbmUgUk5ESVNfUVVFUllfTVNHICAg ICAgICAgICAgMHgwMDAwMDAwNA0KPiArI2RlZmluZSBSTkRJU19RVUVSWV9DTVBMVCAgICAgICAg ICAweDgwMDAwMDA0DQo+ICsjZGVmaW5lIFJORElTX1NFVF9NU0cgICAgICAgICAgICAgIDB4MDAw MDAwMDUNCj4gKyNkZWZpbmUgUk5ESVNfU0VUX0NNUExUICAgICAgICAgICAgMHg4MDAwMDAwNQ0K PiArI2RlZmluZSBSTkRJU19SRVNFVF9NU0cgICAgICAgICAgICAweDAwMDAwMDA2DQo+ICsjZGVm aW5lIFJORElTX1JFU0VUX0NNUExUICAgICAgICAgIDB4ODAwMDAwMDYNCj4gKyNkZWZpbmUgUk5E SVNfSU5ESUNBVEVfU1RBVFVTX01TRyAgMHgwMDAwMDAwNw0KPiArI2RlZmluZSBSTkRJU19LRUVQ QUxJVkVfTVNHICAgICAgICAweDAwMDAwMDA4DQo+ICsjZGVmaW5lIFJORElTX0tFRVBBTElWRV9D TVBMVCAgICAgIDB4ODAwMDAwMDgNCj4gKw0KPiArI2RlZmluZSBSTkRJU19TVEFUVVNfU1VDQ0VT UyAgICAgICAgICAgMHgwMDAwMDAwMA0KPiArI2RlZmluZSBSTkRJU19TVEFUVVNfRkFJTFVSRSAg ICAgICAgICAgMHhDMDAwMDAwMQ0KPiArI2RlZmluZSBSTkRJU19TVEFUVVNfSU5WQUxJRF9EQVRB ICAgICAgMHhDMDAxMDAxNQ0KPiArI2RlZmluZSBSTkRJU19TVEFUVVNfTk9UX1NVUFBPUlRFRCAg ICAgMHhDMDAwMDBCQg0KPiArI2RlZmluZSBSTkRJU19TVEFUVVNfTUVESUFfQ09OTkVDVCAgICAg MHg0MDAxMDAwQg0KPiArI2RlZmluZSBSTkRJU19TVEFUVVNfTUVESUFfRElTQ09OTkVDVCAgMHg0 MDAxMDAwQw0KPiArDQo+ICsjZGVmaW5lIFJORElTX0NPTlRST0xfVElNRU9VVCAgICAxMDAwMCAg ICAgICAgICAgIC8vIDEwc2VjDQo+ICsjZGVmaW5lIFJORElTX0tFRVBBTElWRV9USU1FT1VUICA1 MDAwICAgICAgICAgICAgIC8vIDVzZWMNCj4gKw0KPiArI2RlZmluZSBTRU5EX0VOQ0FQU1VMQVRF RF9DT01NQU5EICAweDAwMDAwMDAwDQo+ICsjZGVmaW5lIEdFVF9FTkNBUFNVTEFURURfUkVTUE9O U0UgIDB4MDAwMDAwMDENCj4gKw0KPiArLy8NCj4gKy8vIEdlbmVyYWwgT2JqZWN0cw0KPiArLy8N Cj4gKy8vIFRha2VuIGZyb20gTlRERE5ESVMuSA0KPiArI2RlZmluZSBPSURfR0VOX1NVUFBPUlRF RF9MSVNUICAgICAgICAgMHgwMDAxMDEwMQ0KPiArI2RlZmluZSBPSURfR0VOX0hBUkRXQVJFX1NU QVRVUyAgICAgICAgMHgwMDAxMDEwMg0KPiArI2RlZmluZSBPSURfR0VOX01FRElBX1NVUFBPUlRF RCAgICAgICAgMHgwMDAxMDEwMw0KPiArI2RlZmluZSBPSURfR0VOX01FRElBX0lOX1VTRSAgICAg ICAgICAgMHgwMDAxMDEwNA0KPiArI2RlZmluZSBPSURfR0VOX01BWElNVU1fTE9PS0FIRUFEICAg ICAgMHgwMDAxMDEwNQ0KPiArI2RlZmluZSBPSURfR0VOX01BWElNVU1fRlJBTUVfU0laRSAgICAg MHgwMDAxMDEwNg0KPiArI2RlZmluZSBPSURfR0VOX0xJTktfU1BFRUQgICAgICAgICAgICAgMHgw MDAxMDEwNw0KPiArI2RlZmluZSBPSURfR0VOX1RSQU5TTUlUX0JVRkZFUl9TUEFDRSAgMHgwMDAx MDEwOA0KPiArI2RlZmluZSBPSURfR0VOX1JFQ0VJVkVfQlVGRkVSX1NQQUNFICAgMHgwMDAxMDEw OQ0KPiArI2RlZmluZSBPSURfR0VOX1RSQU5TTUlUX0JMT0NLX1NJWkUgICAgMHgwMDAxMDEwQQ0K PiArI2RlZmluZSBPSURfR0VOX1JFQ0VJVkVfQkxPQ0tfU0laRSAgICAgMHgwMDAxMDEwQg0KPiAr I2RlZmluZSBPSURfR0VOX1ZFTkRPUl9JRCAgICAgICAgICAgICAgMHgwMDAxMDEwQw0KPiArI2Rl ZmluZSBPSURfR0VOX1ZFTkRPUl9ERVNDUklQVElPTiAgICAgMHgwMDAxMDEwRA0KPiArI2RlZmlu ZSBPSURfR0VOX0NVUlJFTlRfUEFDS0VUX0ZJTFRFUiAgMHgwMDAxMDEwRQ0KPiArI2RlZmluZSBP SURfR0VOX0NVUlJFTlRfTE9PS0FIRUFEICAgICAgMHgwMDAxMDEwRg0KPiArI2RlZmluZSBPSURf R0VOX0RSSVZFUl9WRVJTSU9OICAgICAgICAgMHgwMDAxMDExMA0KPiArI2RlZmluZSBPSURfR0VO X01BWElNVU1fVE9UQUxfU0laRSAgICAgMHgwMDAxMDExMQ0KPiArI2RlZmluZSBPSURfR0VOX1BS T1RPQ09MX09QVElPTlMgICAgICAgMHgwMDAxMDExMg0KPiArI2RlZmluZSBPSURfR0VOX01BQ19P UFRJT05TICAgICAgICAgICAgMHgwMDAxMDExMw0KPiArI2RlZmluZSBPSURfR0VOX01FRElBX0NP Tk5FQ1RfU1RBVFVTICAgMHgwMDAxMDExNA0KPiArI2RlZmluZSBPSURfR0VOX01BWElNVU1fU0VO RF9QQUNLRVRTICAgMHgwMDAxMDExNQ0KPiArI2RlZmluZSBPSURfR0VOX1ZFTkRPUl9EUklWRVJf VkVSU0lPTiAgMHgwMDAxMDExNg0KPiArDQo+ICsjZGVmaW5lIE9JRF9HRU5fWE1JVF9PSyAgICAg ICAgMHgwMDAyMDEwMQ0KPiArI2RlZmluZSBPSURfR0VOX1JDVl9PSyAgICAgICAgIDB4MDAwMjAx MDINCj4gKyNkZWZpbmUgT0lEX0dFTl9YTUlUX0VSUk9SICAgICAweDAwMDIwMTAzDQo+ICsjZGVm aW5lIE9JRF9HRU5fUkNWX0VSUk9SICAgICAgMHgwMDAyMDEwNA0KPiArI2RlZmluZSBPSURfR0VO X1JDVl9OT19CVUZGRVIgIDB4MDAwMjAxMDUNCj4gKw0KPiArI2RlZmluZSBPSURfR0VOX0RJUkVD VEVEX0JZVEVTX1hNSVQgICAgMHgwMDAyMDIwMQ0KPiArI2RlZmluZSBPSURfR0VOX0RJUkVDVEVE X0ZSQU1FU19YTUlUICAgMHgwMDAyMDIwMg0KPiArI2RlZmluZSBPSURfR0VOX01VTFRJQ0FTVF9C WVRFU19YTUlUICAgMHgwMDAyMDIwMw0KPiArI2RlZmluZSBPSURfR0VOX01VTFRJQ0FTVF9GUkFN RVNfWE1JVCAgMHgwMDAyMDIwNA0KPiArI2RlZmluZSBPSURfR0VOX0JST0FEQ0FTVF9CWVRFU19Y TUlUICAgMHgwMDAyMDIwNQ0KPiArI2RlZmluZSBPSURfR0VOX0JST0FEQ0FTVF9GUkFNRVNfWE1J VCAgMHgwMDAyMDIwNg0KPiArI2RlZmluZSBPSURfR0VOX0RJUkVDVEVEX0JZVEVTX1JDViAgICAg MHgwMDAyMDIwNw0KPiArI2RlZmluZSBPSURfR0VOX0RJUkVDVEVEX0ZSQU1FU19SQ1YgICAgMHgw MDAyMDIwOA0KPiArI2RlZmluZSBPSURfR0VOX01VTFRJQ0FTVF9CWVRFU19SQ1YgICAgMHgwMDAy MDIwOQ0KPiArI2RlZmluZSBPSURfR0VOX01VTFRJQ0FTVF9GUkFNRVNfUkNWICAgMHgwMDAyMDIw QQ0KPiArI2RlZmluZSBPSURfR0VOX0JST0FEQ0FTVF9CWVRFU19SQ1YgICAgMHgwMDAyMDIwQg0K PiArI2RlZmluZSBPSURfR0VOX0JST0FEQ0FTVF9GUkFNRVNfUkNWICAgMHgwMDAyMDIwQw0KPiAr I2RlZmluZSBPSURfR0VOX1JDVl9DUkNfRVJST1IgICAgICAgICAgMHgwMDAyMDIwRA0KPiArI2Rl ZmluZSBPSURfR0VOX1RSQU5TTUlUX1FVRVVFX0xFTkdUSCAgMHgwMDAyMDIwRQ0KPiArDQo+ICsj ZGVmaW5lIE9JRF84MDJfM19DVVJSRU5UX0FERFJFU1MgIDB4MDEwMTAxMDINCj4gKy8vDQo+ICsv LyBOZGlzIFBhY2tldCBGaWx0ZXIgQml0cyAoT0lEX0dFTl9DVVJSRU5UX1BBQ0tFVF9GSUxURVIp Lg0KPiArLy8NCj4gKyNkZWZpbmUgTkRJU19QQUNLRVRfVFlQRV9ESVJFQ1RFRCAgICAgICAgMHgw MDAxDQo+ICsjZGVmaW5lIE5ESVNfUEFDS0VUX1RZUEVfTVVMVElDQVNUICAgICAgIDB4MDAwMg0K PiArI2RlZmluZSBORElTX1BBQ0tFVF9UWVBFX0FMTF9NVUxUSUNBU1QgICAweDAwMDQNCj4gKyNk ZWZpbmUgTkRJU19QQUNLRVRfVFlQRV9CUk9BRENBU1QgICAgICAgMHgwMDA4DQo+ICsjZGVmaW5l IE5ESVNfUEFDS0VUX1RZUEVfU09VUkNFX1JPVVRJTkcgIDB4MDAxMA0KPiArI2RlZmluZSBORElT X1BBQ0tFVF9UWVBFX1BST01JU0NVT1VTICAgICAweDAwMjANCj4gKyNkZWZpbmUgTkRJU19QQUNL RVRfVFlQRV9TTVQgICAgICAgICAgICAgMHgwMDQwDQo+ICsjZGVmaW5lIE5ESVNfUEFDS0VUX1RZ UEVfQUxMX0xPQ0FMICAgICAgIDB4MDA4MA0KPiArI2RlZmluZSBORElTX1BBQ0tFVF9UWVBFX01B Q19GUkFNRSAgICAgICAweDgwMDANCj4gKyNkZWZpbmUgTkRJU19QQUNLRVRfVFlQRV9GVU5DVElP TkFMICAgICAgMHg0MDAwDQo+ICsjZGVmaW5lIE5ESVNfUEFDS0VUX1RZUEVfQUxMX0ZVTkNUSU9O QUwgIDB4MjAwMA0KPiArI2RlZmluZSBORElTX1BBQ0tFVF9UWVBFX0dST1VQICAgICAgICAgICAw eDEwMDANCj4gKw0KPiArI3ByYWdtYSBwYWNrKDEpDQo+ICsNCj4gK3R5cGVkZWYgc3RydWN0IF9S RU1PVEVfTkRJU19NU0dfSEVBREVSIHsNCj4gKyAgVUlOVDMyICAgIE1lc3NhZ2VUeXBlOw0KPiAr ICBVSU5UMzIgICAgTWVzc2FnZUxlbmd0aDsNCj4gK30gUkVNT1RFX05ESVNfTVNHX0hFQURFUjsN Cj4gKw0KPiArdHlwZWRlZiBzdHJ1Y3Qgew0KPiArICBVSU5UMzIgICAgTWVzc2FnZVR5cGU7DQo+ ICsgIFVJTlQzMiAgICBNZXNzYWdlTGVuZ3RoOw0KPiArICBVSU5UMzIgICAgUmVxdWVzdElEOw0K PiArICBVSU5UMzIgICAgTWFqb3JWZXJzaW9uOw0KPiArICBVSU5UMzIgICAgTWlub3JWZXJzaW9u Ow0KPiArICBVSU5UMzIgICAgTWF4VHJhbnNmZXJTaXplOw0KPiArfSBSRU1PVEVfTkRJU19JTklU SUFMSVpFX01TRzsNCj4gKw0KPiArdHlwZWRlZiBzdHJ1Y3Qgew0KPiArICBVSU5UMzIgICAgTWVz c2FnZVR5cGU7DQo+ICsgIFVJTlQzMiAgICBNZXNzYWdlTGVuZ3RoOw0KPiArICBVSU5UMzIgICAg UmVxdWVzdElEOw0KPiArfSBSRU1PVEVfTkRJU19IQUxUX01TRzsNCj4gKw0KPiArdHlwZWRlZiBz dHJ1Y3Qgew0KPiArICBVSU5UMzIgICAgTWVzc2FnZVR5cGU7DQo+ICsgIFVJTlQzMiAgICBNZXNz YWdlTGVuZ3RoOw0KPiArICBVSU5UMzIgICAgUmVxdWVzdElEOw0KPiArICBVSU5UMzIgICAgT2lk Ow0KPiArICBVSU5UMzIgICAgSW5mb3JtYXRpb25CdWZmZXJMZW5ndGg7DQo+ICsgIFVJTlQzMiAg ICBJbmZvcm1hdGlvbkJ1ZmZlck9mZnNldDsNCj4gKyAgVUlOVDMyICAgIFJlc2VydmVkOw0KPiAr fSBSRU1PVEVfTkRJU19RVUVSWV9NU0c7DQo+ICsNCj4gK3R5cGVkZWYgc3RydWN0IHsNCj4gKyAg UkVNT1RFX05ESVNfUVVFUllfTVNHICAgIFF1ZXJ5TXNnOw0KPiArICBVSU5UOCAgICAgICAgICAg ICAgICAgICAgQWRkcls2XTsNCj4gK30gUkVNT1RFX05ESVNfUVVFUllfTUFDX01TRzsNCj4gKw0K PiArdHlwZWRlZiBzdHJ1Y3Qgew0KPiArICBSRU1PVEVfTkRJU19RVUVSWV9NU0cgICAgUXVlcnlN c2c7DQo+ICsgIFVJTlQzMiAgICAgICAgICAgICAgICAgICBNYXhUb3RhbFNpemU7DQo+ICt9IFJF TU9URV9ORElTX1FVRVJZX01BWF9UT1RBTF9TSVpFX01TRzsNCj4gKw0KPiArdHlwZWRlZiBzdHJ1 Y3Qgew0KPiArICBVSU5UMzIgICAgTWVzc2FnZVR5cGU7DQo+ICsgIFVJTlQzMiAgICBNZXNzYWdl TGVuZ3RoOw0KPiArICBVSU5UMzIgICAgUmVxdWVzdElEOw0KPiArICBVSU5UMzIgICAgT2lkOw0K PiArICBVSU5UMzIgICAgSW5mb3JtYXRpb25CdWZmZXJMZW5ndGg7DQo+ICsgIFVJTlQzMiAgICBJ bmZvcm1hdGlvbkJ1ZmZlck9mZnNldDsNCj4gKyAgVUlOVDMyICAgIFJlc2VydmVkOw0KPiArfSBS RU1PVEVfTkRJU19TRVRfTVNHOw0KPiArDQo+ICt0eXBlZGVmIHN0cnVjdCB7DQo+ICsgIFVJTlQz MiAgICBNZXNzYWdlVHlwZTsNCj4gKyAgVUlOVDMyICAgIE1lc3NhZ2VMZW5ndGg7DQo+ICsgIFVJ TlQzMiAgICBSZXNlcnZlZDsNCj4gK30gUkVNT1RFX05ESVNfUkVTRVRfTVNHOw0KPiArDQo+ICt0 eXBlZGVmIHN0cnVjdCB7DQo+ICsgIFVJTlQzMiAgICBNZXNzYWdlVHlwZTsNCj4gKyAgVUlOVDMy ICAgIE1lc3NhZ2VMZW5ndGg7DQo+ICsgIFVJTlQzMiAgICBTdGF0dXM7DQo+ICsgIFVJTlQzMiAg ICBTdGF0dXNCdWZmZXJMZW5ndGg7DQo+ICsgIFVJTlQzMiAgICBTdGF0dXNCdWZmZXJPZmZzZXQ7 DQo+ICt9IFJFTU9URV9ORElTX0lORElDQVRFX1NUQVRVU19NU0c7DQo+ICsNCj4gK3R5cGVkZWYg c3RydWN0IHsNCj4gKyAgVUlOVDMyICAgIERpYWdTdGF0dXM7DQo+ICsgIFVJTlQzMiAgICBFcnJv ck9mZnNldDsNCj4gK30gUk5ESVNfRElBR05PU1RJQ19JTkZPOw0KPiArDQo+ICt0eXBlZGVmIHN0 cnVjdCB7DQo+ICsgIFVJTlQzMiAgICBNZXNzYWdlVHlwZTsNCj4gKyAgVUlOVDMyICAgIE1lc3Nh Z2VMZW5ndGg7DQo+ICsgIFVJTlQzMiAgICBSZXF1ZXN0SUQ7DQo+ICt9IFJFTU9URV9ORElTX0tF RVBBTElWRV9NU0c7DQo+ICsNCj4gK3R5cGVkZWYgc3RydWN0IHsNCj4gKyAgVUlOVDMyICAgIE1l c3NhZ2VUeXBlOw0KPiArICBVSU5UMzIgICAgTWVzc2FnZUxlbmd0aDsNCj4gKyAgVUlOVDMyICAg IFJlcXVlc3RJRDsNCj4gKyAgVUlOVDMyICAgIFN0YXR1czsNCj4gKyAgVUlOVDMyICAgIE1ham9y VmVyc2lvbjsNCj4gKyAgVUlOVDMyICAgIE1pbm9yVmVyc2lvbjsNCj4gKyAgVUlOVDMyICAgIERl dmljZUZsYWdzOw0KPiArICBVSU5UMzIgICAgTWVkaXVtOw0KPiArICBVSU5UMzIgICAgTWF4UGFj a2V0c1BlclRyYW5zZmVyOw0KPiArICBVSU5UMzIgICAgTWF4VHJhbnNmZXJTaXplOw0KPiArICBV SU5UMzIgICAgUGFja2V0QWxpZ25tZW50RmFjdG9yOw0KPiArICBVSU5UNjQgICAgUmVzZXJ2ZWQ7 DQo+ICt9IFJFTU9URV9ORElTX0lOSVRJQUxJWkVfQ01QTFQ7DQo+ICsNCj4gK3R5cGVkZWYgc3Ry dWN0IHsNCj4gKyAgVUlOVDMyICAgIE1lc3NhZ2VUeXBlOw0KPiArICBVSU5UMzIgICAgTWVzc2Fn ZUxlbmd0aDsNCj4gKyAgVUlOVDMyICAgIFJlcXVlc3RJRDsNCj4gKyAgVUlOVDMyICAgIFN0YXR1 czsNCj4gKyAgVUlOVDMyICAgIEluZm9ybWF0aW9uQnVmZmVyTGVuZ3RoOw0KPiArICBVSU5UMzIg ICAgSW5mb3JtYXRpb25CdWZmZXJPZmZzZXQ7DQo+ICt9IFJFTU9URV9ORElTX1FVRVJZX0NNUExU Ow0KPiArDQo+ICt0eXBlZGVmIHN0cnVjdCB7DQo+ICsgIFJFTU9URV9ORElTX1FVRVJZX0NNUExU ICAgIFF1ZXJ5Q21wbHQ7DQo+ICsgIFVJTlQ4ICAgICAgICAgICAgICAgICAgICAgIEFkZHJbNl07 DQo+ICt9IFJFTU9URV9ORElTX1FVRVJZX01BQ19DTVBMVDsNCj4gKw0KPiArdHlwZWRlZiBzdHJ1 Y3Qgew0KPiArICBSRU1PVEVfTkRJU19RVUVSWV9DTVBMVCAgICBRdWVyeUNtcGx0Ow0KPiArICBV SU5UMzIgICAgICAgICAgICAgICAgICAgICBNYXhUb3RhbFNpemU7DQo+ICt9IFJFTU9URV9ORElT X1FVRVJZX01BWF9UT1RBTF9TSVpFX0NNUExUOw0KPiArDQo+ICt0eXBlZGVmIHN0cnVjdCB7DQo+ ICsgIFVJTlQzMiAgICBNZXNzYWdlVHlwZTsNCj4gKyAgVUlOVDMyICAgIE1lc3NhZ2VMZW5ndGg7 DQo+ICsgIFVJTlQzMiAgICBSZXF1ZXN0SUQ7DQo+ICsgIFVJTlQzMiAgICBTdGF0dXM7DQo+ICt9 IFJFTU9URV9ORElTX1NFVF9DTVBMVDsNCj4gKw0KPiArdHlwZWRlZiBzdHJ1Y3Qgew0KPiArICBV SU5UMzIgICAgTWVzc2FnZVR5cGU7DQo+ICsgIFVJTlQzMiAgICBNZXNzYWdlTGVuZ3RoOw0KPiAr ICBVSU5UMzIgICAgU3RhdHVzOw0KPiArICBVSU5UMzIgICAgQWRkcmVzc2luZ1Jlc2V0Ow0KPiAr fSBSRU1PVEVfTkRJU19SRVNFVF9DTVBMVDsNCj4gKw0KPiArdHlwZWRlZiBzdHJ1Y3Qgew0KPiAr ICBVSU5UMzIgICAgTWVzc2FnZVR5cGU7DQo+ICsgIFVJTlQzMiAgICBNZXNzYWdlTGVuZ3RoOw0K PiArICBVSU5UMzIgICAgUmVxdWVzdElEOw0KPiArICBVSU5UMzIgICAgU3RhdHVzOw0KPiArfSBS RU1PVEVfTkRJU19LRUVQQUxJVkVfQ01QTFQ7DQo+ICsNCj4gK3R5cGVkZWYgc3RydWN0IHsNCj4g KyAgVUlOVDMyICAgIE1lc3NhZ2VUeXBlOw0KPiArICBVSU5UMzIgICAgTWVzc2FnZUxlbmd0aDsN Cj4gKyAgVUlOVDMyICAgIERhdGFPZmZzZXQ7DQo+ICsgIFVJTlQzMiAgICBEYXRhTGVuZ3RoOw0K PiArICBVSU5UMzIgICAgT3V0T2ZCYW5kRGF0YU9mZnNldDsNCj4gKyAgVUlOVDMyICAgIE91dE9m QmFuZERhdGFMZW5ndGg7DQo+ICsgIFVJTlQzMiAgICBOdW1PdXRPZkJhbmREYXRhRWxlbWVudHM7 DQo+ICsgIFVJTlQzMiAgICBQZXJQYWNrZXRJbmZvT2Zmc2V0Ow0KPiArICBVSU5UMzIgICAgUGVy UGFja2V0SW5mb0xlbmd0aDsNCj4gKyAgVUlOVDMyICAgIFJlc2VydmVkMTsNCj4gKyAgVUlOVDMy ICAgIFJlc2VydmVkMjsNCj4gK30gUkVNT1RFX05ESVNfUEFDS0VUX01TRzsNCj4gKw0KPiArdHlw ZWRlZiBzdHJ1Y3Qgew0KPiArICBVSU5UMzIgICAgU2l6ZTsNCj4gKyAgVUlOVDMyICAgIFR5cGU7 DQo+ICsgIFVJTlQzMiAgICBDbGFzc0luZm9ybWF0aW9uT2Zmc2V0Ow0KPiArfSBPVVRfT0ZfQkFO RF9EQVRBX1JFQ09SRDsNCj4gKw0KPiArdHlwZWRlZiBzdHJ1Y3Qgew0KPiArICBVSU5UMzIgICAg U2l6ZTsNCj4gKyAgVUlOVDMyICAgIFR5cGU7DQo+ICsgIFVJTlQzMiAgICBDbGFzc0luZm9ybWF0 aW9uT2Zmc2V0Ow0KPiArfSBQRVJfUEFDS0VUX0lORk9fREFUQV9SRUNPUkQ7DQo+ICsNCj4gK3R5 cGVkZWYgc3RydWN0IHsNCj4gKyAgTElTVF9FTlRSWSAgICBQYWNrZXRMaXN0Ow0KPiArICBVSU5U OCAgICAgICAgICpPcmdCdWZmZXI7DQo+ICsgIFVJTlROICAgICAgICAgUmVtYWluaW5nTGVuZ3Ro Ow0KPiArICBVSU5UOCAgICAgICAgICpQYWNrZXRTdGFydEJ1ZmZlcjsgICAgLy8gVmFyaWFibGUg c2l6ZSBkYXRhIHRvIGZvbGxvdw0KPiArfSBQQUNLRVRfTElTVDsNCj4gKw0KPiArI3ByYWdtYSBw YWNrKCkNCj4gKw0KPiArI2VuZGlmDQo+IGRpZmYgLS1naXQgYS9NZGVNb2R1bGVQa2cvQnVzL1Vz Yi9Vc2JOZXR3b3JrL1VzYlJuZGlzL1VzYlJuZGlzLmluZg0KPiBiL01kZU1vZHVsZVBrZy9CdXMv VXNiL1VzYk5ldHdvcmsvVXNiUm5kaXMvVXNiUm5kaXMuaW5mDQo+IG5ldyBmaWxlIG1vZGUgMTAw NjQ0DQo+IGluZGV4IDAwMDAwMDAwMDAuLjEwMjc4Mjg1MjcNCj4gLS0tIC9kZXYvbnVsbA0KPiAr KysgYi9NZGVNb2R1bGVQa2cvQnVzL1VzYi9Vc2JOZXR3b3JrL1VzYlJuZGlzL1VzYlJuZGlzLmlu Zg0KPiBAQCAtMCwwICsxLDQyIEBADQo+ICsjIyBAZmlsZQ0KPiArIyAgIFRoaXMgaXMgVXNiIFJu ZGlzIGRyaXZlciBmb3IgRFhFIHBoYXNlLg0KPiArIw0KPiArIyBDb3B5cmlnaHQgKGMpIDIwMjMs IEFtZXJpY2FuIE1lZ2F0cmVuZHMgSW50ZXJuYXRpb25hbCBMTEMuIEFsbCByaWdodHMNCj4gcmVz ZXJ2ZWQuPEJSPg0KPiArIyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQlNELTItQ2xhdXNlLVBh dGVudA0KPiArIyMNCj4gKw0KPiArW0RlZmluZXNdDQo+ICsgIElORl9WRVJTSU9OICAgICAgICAg ICAgICAgICAgICA9IDB4MDAwMTAwMDUNCj4gKyAgQkFTRV9OQU1FICAgICAgICAgICAgICAgICAg ICAgID0gVXNiUm5kaXMNCj4gKyAgRklMRV9HVUlEICAgICAgICAgICAgICAgICAgICAgID0gMTFF MzJDMzQtNjBCNS00OTkxLThERUEtNjNEM0U4Qzg3NkRFDQo+ICsgIE1PRFVMRV9UWVBFICAgICAg ICAgICAgICAgICAgICA9IERYRV9EUklWRVINCj4gKyAgVkVSU0lPTl9TVFJJTkcgICAgICAgICAg ICAgICAgID0gMS4wDQo+ICsgIEVOVFJZX1BPSU5UICAgICAgICAgICAgICAgICAgICA9IFVzYlJu ZGlzRW50cnkNCj4gKw0KPiArW1NvdXJjZXNdDQo+ICsgIFVzYlJuZGlzLmMNCj4gKyAgVXNiUm5k aXMuaA0KPiArICBVc2JSbmRpc0Z1bmN0aW9uLmMNCj4gKyAgQ29tcG9uZW50TmFtZS5jDQo+ICsN Cj4gK1tQYWNrYWdlc10NCj4gKyAgTWRlUGtnL01kZVBrZy5kZWMNCj4gKyAgTWRlTW9kdWxlUGtn L01kZU1vZHVsZVBrZy5kZWMNCj4gKw0KPiArW0xpYnJhcnlDbGFzc2VzXQ0KPiArICBVZWZpRHJp dmVyRW50cnlQb2ludA0KPiArICBVZWZpQm9vdFNlcnZpY2VzVGFibGVMaWINCj4gKyAgVWVmaUxp Yg0KPiArICBEZWJ1Z0xpYg0KPiArICBVZWZpVXNiTGliDQo+ICsgIE1lbW9yeUFsbG9jYXRpb25M aWINCj4gKyAgQmFzZU1lbW9yeUxpYg0KPiArDQo+ICtbUHJvdG9jb2xzXQ0KPiArICBnRWZpVXNi SW9Qcm90b2NvbEd1aWQNCj4gKyAgZ0VmaURldmljZVBhdGhQcm90b2NvbEd1aWQNCj4gKyAgZ0Vm aURyaXZlckJpbmRpbmdQcm90b2NvbEd1aWQNCj4gKyAgZ0Vka0lJVXNiRXRoUHJvdG9jb2xHdWlk DQo+ICsNCj4gK1tEZXBleF0NCj4gKyAgVFJVRQ0KPiBkaWZmIC0tZ2l0IGEvTWRlTW9kdWxlUGtn L0J1cy9Vc2IvVXNiTmV0d29yay9Vc2JSbmRpcy9Vc2JSbmRpc0Z1bmN0aW9uLmMNCj4gYi9NZGVN b2R1bGVQa2cvQnVzL1VzYi9Vc2JOZXR3b3JrL1VzYlJuZGlzL1VzYlJuZGlzRnVuY3Rpb24uYw0K PiBuZXcgZmlsZSBtb2RlIDEwMDY0NA0KPiBpbmRleCAwMDAwMDAwMDAwLi45YWJhM2YxMTI5DQo+ IC0tLSAvZGV2L251bGwNCj4gKysrIGIvTWRlTW9kdWxlUGtnL0J1cy9Vc2IvVXNiTmV0d29yay9V c2JSbmRpcy9Vc2JSbmRpc0Z1bmN0aW9uLmMNCj4gQEAgLTAsMCArMSwxNzE4IEBADQo+ICsvKiog QGZpbGUNCj4gKyAgVGhpcyBmaWxlIGNvbnRhaW5zIGNvZGUgZm9yIFVTQiBFdGhlcm5ldCBkZXNj cmlwdG9yDQo+ICsgIGFuZCBzcGVjaWZpYyByZXF1ZXN0cyBpbXBsZW1lbnQuDQo+ICsNCj4gKyAg Q29weXJpZ2h0IChjKSAyMDIzLCBBbWVyaWNhbiBNZWdhdHJlbmRzIEludGVybmF0aW9uYWwgTExD LiBBbGwgcmlnaHRzDQo+IHJlc2VydmVkLjxCUj4NCj4gKyAgU1BEWC1MaWNlbnNlLUlkZW50aWZp ZXI6IEJTRC0yLUNsYXVzZS1QYXRlbnQNCj4gKyoqLw0KPiArDQo+ICsjaW5jbHVkZSAiVXNiUm5k aXMuaCINCj4gKw0KPiArVUlOVDE2ICBnU3RvcEJ1bGtJbkNudCAgPSAwOw0KPiArVUlOVDE2ICBn QmxvY2tCdWxrSW5DbnQgPSAwOw0KPiArDQo+ICsvKioNCj4gKyAgTG9hZCBBbGwgb2YgZGV2aWNl IGRlc2NyaXB0b3IuDQo+ICsNCj4gKyAgQHBhcmFtW2luXSAgVXNiSW8gICAgICAgICAgICAgICAg IEEgcG9pbnRlciB0byB0aGUgRUZJX1VTQl9JT19QUk9UT0NPTA0KPiBpbnN0YW5jZS4NCj4gKyAg QHBhcmFtW291dF0gQ29uZmlnRGVzYyAgICAgICAgICAgIEEgcG9pbnRlciB0byB0aGUgY29uZmln dXJhdGlvbiBkZXNjcmlwdG9yLg0KPiArDQo+ICsgIEByZXR2YWwgRUZJX1NVQ0NFU1MgICAgICAg ICAgIFRoZSByZXF1ZXN0IGV4ZWN1dGVkIHN1Y2Nlc3NmdWxseS4NCj4gKyAgQHJldHZhbCBFRklf T1VUX09GX1JFU09VUkNFUyAgVGhlIHJlcXVlc3QgY291bGQgbm90IGJlIGNvbXBsZXRlZA0KPiBi ZWNhdXNlIHRoZQ0KPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBidWZmZXIgc3Bl Y2lmaWVkIGJ5IERlc2NyaXB0b3JMZW5ndGggYW5kIERlc2NyaXB0b3INCj4gKyAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgaXMgbm90IGxhcmdlIGVub3VnaCB0byBob2xkIHRoZSByZXN1 bHQgb2YgdGhlIHJlcXVlc3QuDQo+ICsgIEByZXR2YWwgRUZJX1RJTUVPVVQgICAgICAgICAgIEEg dGltZW91dCBvY2N1cnJlZCBleGVjdXRpbmcgdGhlIHJlcXVlc3QuDQo+ICsgIEByZXR2YWwgRUZJ X0RFVklDRV9FUlJPUiAgICAgIFRoZSByZXF1ZXN0IGZhaWxlZCBkdWUgdG8gYSBkZXZpY2UgZXJy b3IuIFRoZQ0KPiB0cmFuc2Zlcg0KPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBz dGF0dXMgaXMgcmV0dXJuZWQgaW4gU3RhdHVzLg0KPiArKiovDQo+ICtFRklfU1RBVFVTDQo+ICtM b2FkQWxsRGVzY3JpcHRvciAoDQo+ICsgIElOICBFRklfVVNCX0lPX1BST1RPQ09MICAgICAgICAq VXNiSW8sDQo+ICsgIE9VVCBFRklfVVNCX0NPTkZJR19ERVNDUklQVE9SICAqKkNvbmZpZ0Rlc2MN Cj4gKyAgKQ0KPiArew0KPiArICBFRklfU1RBVFVTICAgICAgICAgICAgICAgICBTdGF0dXM7DQo+ ICsgIFVJTlQzMiAgICAgICAgICAgICAgICAgICAgIFRyYW5zU3RhdHVzOw0KPiArICBFRklfVVNC X0NPTkZJR19ERVNDUklQVE9SICBUbXA7DQo+ICsNCj4gKyAgU3RhdHVzID0gVXNiSW8tPlVzYkdl dENvbmZpZ0Rlc2NyaXB0b3IgKFVzYklvLCAmVG1wKTsNCj4gKyAgaWYgKEVGSV9FUlJPUiAoU3Rh dHVzKSkgew0KPiArICAgIERFQlVHICgoREVCVUdfRVJST1IsICIlYTpVc2JHZXRDb25maWdEZXNj cmlwdG9yIHN0YXR1cyA9ICVyXG4iLA0KPiBfX2Z1bmNfXywgU3RhdHVzKSk7DQo+ICsgICAgcmV0 dXJuIFN0YXR1czsNCj4gKyAgfQ0KPiArDQo+ICsgIFN0YXR1cyA9IGdCUy0+QWxsb2NhdGVQb29s ICgNCj4gKyAgICAgICAgICAgICAgICAgIEVmaUJvb3RTZXJ2aWNlc0RhdGEsDQo+ICsgICAgICAg ICAgICAgICAgICBUbXAuVG90YWxMZW5ndGgsDQo+ICsgICAgICAgICAgICAgICAgICAoVk9JRCAq KilDb25maWdEZXNjDQo+ICsgICAgICAgICAgICAgICAgICApOw0KPiArICBpZiAoRUZJX0VSUk9S IChTdGF0dXMpKSB7DQo+ICsgICAgREVCVUcgKChERUJVR19FUlJPUiwgIiVhOiBBbGxvY2F0ZVBv b2wgc3RhdHVzID0gJXJcbiIsIF9fZnVuY19fLA0KPiBTdGF0dXMpKTsNCj4gKyAgICByZXR1cm4g U3RhdHVzOw0KPiArICB9DQo+ICsNCj4gKyAgU3RhdHVzID0gVXNiR2V0RGVzY3JpcHRvciAoDQo+ ICsgICAgICAgICAgICAgVXNiSW8sDQo+ICsgICAgICAgICAgICAgVVNCX0RFU0NfVFlQRV9DT05G SUcgPDwgOCB8IChUbXAuQ29uZmlndXJhdGlvblZhbHVlIC0gMSksDQo+IC8vIHplcm8gYmFzZWQN Cj4gKyAgICAgICAgICAgICAwLA0KPiArICAgICAgICAgICAgIFRtcC5Ub3RhbExlbmd0aCwNCj4g KyAgICAgICAgICAgICAqQ29uZmlnRGVzYywNCj4gKyAgICAgICAgICAgICAmVHJhbnNTdGF0dXMN Cj4gKyAgICAgICAgICAgICApOw0KPiArICByZXR1cm4gU3RhdHVzOw0KPiArfQ0KPiArDQo+ICsv KioNCj4gKyAgUmV0dXJucyBwb2ludGVyIHRvIHRoZSBuZXh0IGRlc2NyaXB0b3IgZm9yIHRoZSBw YWNrIG9mIFVTQiBkZXNjcmlwdG9ycw0KPiArICBsb2NhdGVkIGluIGNvbnRpbnVlcyBtZW1vcnkg c2VnbWVudA0KPiArDQo+ICsgIEBwYXJhbVtpbl0gICAgICBEZXNjICAgQSBwb2ludGVyIHRvIHRo ZSBDT05GSUdfREVTQ1JJUFRPUiBpbnN0YW5jZS4NCj4gKyAgQHBhcmFtW2luLCBvdXRdIE9mZnNl dCBBIHBvaW50ZXIgdG8gdGhlIHN1bSBvZiBkZXNjcmlwdG9yIGxlbmd0aC4NCj4gKw0KPiArICBA cmV0dmFsIFRSVUUgICBUaGUgcmVxdWVzdCBleGVjdXRlZCBzdWNjZXNzZnVsbHkuDQo+ICsgIEBy ZXR2YWwgRkFMU0UgIE5vIG5leHQgZGVzY3JpcHRvci4NCj4gKw0KPiArKiovDQo+ICtCT09MRUFO DQo+ICtOZXh0RGVzY3JpcHRvciAoDQo+ICsgIElOICAgICAgRUZJX1VTQl9DT05GSUdfREVTQ1JJ UFRPUiAgKkRlc2MsDQo+ICsgIElOIE9VVCAgVUlOVE4gICAgICAgICAgICAgICAgICAgICAgKk9m ZnNldA0KPiArICApDQo+ICt7DQo+ICsgIGlmICgoRGVzYyA9PSBOVUxMKSB8fCAoKk9mZnNldCA+ PSBEZXNjLT5Ub3RhbExlbmd0aCkpIHsNCj4gKyAgICByZXR1cm4gRkFMU0U7DQo+ICsgIH0NCj4g Kw0KPiArICBpZiAoKChFRklfVVNCX0NPTkZJR19ERVNDUklQVE9SICopKChjaGFyICopRGVzYysq T2Zmc2V0KSktPkxlbmd0aCA9PSAwKQ0KPiB7DQo+ICsgICAgcmV0dXJuIEZBTFNFOw0KPiArICB9 DQo+ICsNCj4gKyAgKk9mZnNldCArPSAoKEVGSV9VU0JfQ09ORklHX0RFU0NSSVBUT1IgKikoKGNo YXIgKilEZXNjKypPZmZzZXQpKS0NCj4gPkxlbmd0aDsNCj4gKyAgaWYgKCAqT2Zmc2V0ID49IERl c2MtPlRvdGFsTGVuZ3RoICkgew0KPiArICAgIHJldHVybiBGQUxTRTsNCj4gKyAgfQ0KPiArDQo+ ICsgIHJldHVybiBUUlVFOw0KPiArfQ0KPiArDQo+ICsvKioNCj4gKyAgUmVhZCBGdW5jdGlvbiBk ZXNjcmlwdG9yDQo+ICsNCj4gKyAgQHBhcmFtW2luXSAgQ29uZmlnICAgICAgICAgICAgIEEgcG9p bnRlciB0byBhbGwgb2YgY29uZmlndXJhdGlvbi4NCj4gKyAgQHBhcmFtW2luXSAgRnVuRGVzY3Jp cHRvclR5cGUgIFVTQiBDREMgY2xhc3MgZGVzY3JpcHRvciBTdWJUeXBlLg0KPiArICBAcGFyYW1b b3V0XSBEYXRhQnVmZmVyICAgICAgICAgQSBwb2ludGVyIHRvIHRoZSBEYXRhIG9mIGNvcnJlc3Bv bmRpbmcgdG8NCj4gZGV2aWNlIGNhcGFiaWxpdHkuDQo+ICsNCj4gKyAgQHJldHZhbCBFRklfU1VD Q0VTUyAgICAgICAgVGhlIGRldmljZSBjYXBhYmlsaXR5IGRlc2NyaXB0b3Igd2FzIHJldHJpZXZl ZA0KPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdWNjZXNzZnVsbHkuDQo+ICsgIEBy ZXR2YWwgRUZJX1VOU1VQUE9SVEVEICAgIE5vIHN1cHBvcnRlZC4NCj4gKyAgQHJldHZhbCBFRklf Tk9UX0ZPVU5EICAgICAgVGhlIGRldmljZSBjYXBhYmlsaXR5IGRlc2NyaXB0b3Igd2FzIG5vdCBm b3VuZC4NCj4gKw0KPiArKiovDQo+ICtFRklfU1RBVFVTDQo+ICtHZXRGdW5jdGlvbmFsRGVzY3Jp cHRvciAoDQo+ICsgIElOICBFRklfVVNCX0NPTkZJR19ERVNDUklQVE9SICAqQ29uZmlnLA0KPiAr ICBJTiAgVUlOVDggICAgICAgICAgICAgICAgICAgICAgRnVuRGVzY3JpcHRvclR5cGUsDQo+ICsg IE9VVCBWT0lEICAgICAgICAgICAgICAgICAgICAgICAqRGF0YUJ1ZmZlcg0KPiArICApDQo+ICt7 DQo+ICsgIEVGSV9TVEFUVVMgICAgICAgICAgICAgICAgICAgIFN0YXR1czsNCj4gKyAgVUlOVE4g ICAgICAgICAgICAgICAgICAgICAgICAgT2Zmc2V0Ow0KPiArICBFRklfVVNCX0lOVEVSRkFDRV9E RVNDUklQVE9SICAqSW50ZXJmYWNlOw0KPiArDQo+ICsgIFN0YXR1cyA9IEVGSV9OT1RfRk9VTkQ7 DQo+ICsNCj4gKyAgZm9yIChPZmZzZXQgPSAwOyBOZXh0RGVzY3JpcHRvciAoQ29uZmlnLCAmT2Zm c2V0KTspIHsNCj4gKyAgICBJbnRlcmZhY2UgPSAoRUZJX1VTQl9JTlRFUkZBQ0VfREVTQ1JJUFRP UiAqKSgoVUlOVDggKilDb25maWcgKyBPZmZzZXQpOw0KPiArICAgIGlmIChJbnRlcmZhY2UtPkRl c2NyaXB0b3JUeXBlID09IENTX0lOVEVSRkFDRSkgew0KPiArICAgICAgaWYgKCgoVVNCX0hFQURF Ul9GVU5fREVTQ1JJUFRPUiAqKUludGVyZmFjZSktPkRlc2NyaXB0b3JTdWJ0eXBlID09DQo+IEZ1 bkRlc2NyaXB0b3JUeXBlKSB7DQo+ICsgICAgICAgIHN3aXRjaCAoRnVuRGVzY3JpcHRvclR5cGUp IHsNCj4gKyAgICAgICAgICBjYXNlIEhFQURFUl9GVU5fREVTQ1JJUFRPUjoNCj4gKyAgICAgICAg ICAgIENvcHlNZW0gKA0KPiArICAgICAgICAgICAgICBEYXRhQnVmZmVyLA0KPiArICAgICAgICAg ICAgICAoVVNCX0hFQURFUl9GVU5fREVTQ1JJUFRPUiAqKUludGVyZmFjZSwNCj4gKyAgICAgICAg ICAgICAgc2l6ZW9mIChVU0JfSEVBREVSX0ZVTl9ERVNDUklQVE9SKQ0KPiArICAgICAgICAgICAg ICApOw0KPiArICAgICAgICAgICAgcmV0dXJuIEVGSV9TVUNDRVNTOw0KPiArICAgICAgICAgIGNh c2UgVU5JT05fRlVOX0RFU0NSSVBUT1I6DQo+ICsgICAgICAgICAgICBDb3B5TWVtICgNCj4gKyAg ICAgICAgICAgICAgRGF0YUJ1ZmZlciwNCj4gKyAgICAgICAgICAgICAgKFVTQl9VTklPTl9GVU5f REVTQ1JJUFRPUiAqKUludGVyZmFjZSwNCj4gKyAgICAgICAgICAgICAgKChVU0JfVU5JT05fRlVO X0RFU0NSSVBUT1IgKilJbnRlcmZhY2UpLT5GdW5jdGlvbkxlbmd0aA0KPiArICAgICAgICAgICAg ICApOw0KPiArICAgICAgICAgICAgcmV0dXJuIEVGSV9TVUNDRVNTOw0KPiArICAgICAgICAgIGNh c2UgRVRIRVJORVRfRlVOX0RFU0NSSVBUT1I6DQo+ICsgICAgICAgICAgICBDb3B5TWVtICgNCj4g KyAgICAgICAgICAgICAgRGF0YUJ1ZmZlciwNCj4gKyAgICAgICAgICAgICAgKFVTQl9FVEhFUk5F VF9GVU5fREVTQ1JJUFRPUiAqKUludGVyZmFjZSwNCj4gKyAgICAgICAgICAgICAgc2l6ZW9mIChV U0JfRVRIRVJORVRfRlVOX0RFU0NSSVBUT1IpDQo+ICsgICAgICAgICAgICAgICk7DQo+ICsgICAg ICAgICAgICByZXR1cm4gRUZJX1NVQ0NFU1M7DQo+ICsgICAgICAgICAgZGVmYXVsdDoNCj4gKyAg ICAgICAgICAgIFN0YXR1cyA9IEVGSV9VTlNVUFBPUlRFRDsNCj4gKyAgICAgICAgICAgIGJyZWFr Ow0KPiArICAgICAgICB9DQo+ICsgICAgICB9DQo+ICsgICAgfQ0KPiArICB9DQo+ICsNCj4gKyAg cmV0dXJuIFN0YXR1czsNCj4gK30NCj4gKw0KPiArLyoqDQo+ICsgIEdldCBVU0IgRXRoZXJuZXQg SU8gZW5kcG9pbnQgYW5kIFVTQiBDREMgZGF0YSBJTyBlbmRwb2ludC4NCj4gKw0KPiArICBAcGFy YW1baW5dICAgICAgVXNiSW8gICAgICAgICAgIEEgcG9pbnRlciB0byB0aGUgRUZJX1VTQl9JT19Q Uk9UT0NPTA0KPiBpbnN0YW5jZS4NCj4gKyAgQHBhcmFtW2luLCBvdXRdIFVzYlJuZGlzRGV2aWNl ICBBIHBvaW50ZXIgdG8gdGhlIFVTQl9STkRJU19ERVZJQ0UNCj4gaW5zdGFuY2UuDQo+ICsNCj4g KyoqLw0KPiArVk9JRA0KPiArR2V0RW5kcG9pbnQgKA0KPiArICBJTiAgICAgIEVGSV9VU0JfSU9f UFJPVE9DT0wgICpVc2JJbywNCj4gKyAgSU4gT1VUICBVU0JfUk5ESVNfREVWSUNFICAgICAqVXNi Um5kaXNEZXZpY2UNCj4gKyAgKQ0KPiArew0KPiArICBFRklfU1RBVFVTICAgICAgICAgICAgICAg ICAgICBTdGF0dXM7DQo+ICsgIFVJTlQ4ICAgICAgICAgICAgICAgICAgICAgICAgIEluZGV4Ow0K PiArICBVSU5UMzIgICAgICAgICAgICAgICAgICAgICAgICBSZXN1bHQ7DQo+ICsgIEVGSV9VU0Jf SU5URVJGQUNFX0RFU0NSSVBUT1IgIEludGVyZmFjZTsNCj4gKyAgRUZJX1VTQl9FTkRQT0lOVF9E RVNDUklQVE9SICAgRW5kcG9pbnQ7DQo+ICsNCj4gKyAgU3RhdHVzID0gVXNiSW8tPlVzYkdldElu dGVyZmFjZURlc2NyaXB0b3IgKFVzYklvLCAmSW50ZXJmYWNlKTsNCj4gKyAgaWYgKEVGSV9FUlJP UiAoU3RhdHVzKSkgew0KPiArICAgIERFQlVHICgoREVCVUdfRVJST1IsICIlYTpVc2JHZXRJbnRl cmZhY2VEZXNjcmlwdG9yIHN0YXR1cyA9ICVyXG4iLA0KPiBfX2Z1bmNfXywgU3RhdHVzKSk7DQo+ ICsgICAgcmV0dXJuOw0KPiArICB9DQo+ICsNCj4gKyAgaWYgKEludGVyZmFjZS5OdW1FbmRwb2lu dHMgPT0gMCApIHsNCj4gKyAgICBTdGF0dXMgPSBVc2JTZXRJbnRlcmZhY2UgKFVzYklvLCAxLCAw LCAmUmVzdWx0KTsNCj4gKyAgICBpZiAoRUZJX0VSUk9SIChTdGF0dXMpKSB7DQo+ICsgICAgICBE RUJVRyAoKERFQlVHX0VSUk9SLCAiJWE6VXNiU2V0SW50ZXJmYWNlIHN0YXR1cyA9ICVyXG4iLCBf X2Z1bmNfXywNCj4gU3RhdHVzKSk7DQo+ICsgICAgICByZXR1cm47DQo+ICsgICAgfQ0KPiArDQo+ ICsgICAgU3RhdHVzID0gVXNiSW8tPlVzYkdldEludGVyZmFjZURlc2NyaXB0b3IgKFVzYklvLCAm SW50ZXJmYWNlKTsNCj4gKyAgICBpZiAoRUZJX0VSUk9SIChTdGF0dXMpKSB7DQo+ICsgICAgICBE RUJVRyAoKERFQlVHX0VSUk9SLCAiJWE6VXNiR2V0SW50ZXJmYWNlRGVzY3JpcHRvciBzdGF0dXMg PSAlclxuIiwNCj4gX19mdW5jX18sIFN0YXR1cykpOw0KPiArICAgICAgcmV0dXJuOw0KPiArICAg IH0NCj4gKyAgfQ0KPiArDQo+ICsgIGZvciAoSW5kZXggPSAwOyBJbmRleCA8IEludGVyZmFjZS5O dW1FbmRwb2ludHM7IEluZGV4KyspIHsNCj4gKyAgICBTdGF0dXMgPSBVc2JJby0+VXNiR2V0RW5k cG9pbnREZXNjcmlwdG9yIChVc2JJbywgSW5kZXgsICZFbmRwb2ludCk7DQo+ICsgICAgaWYgKEVG SV9FUlJPUiAoU3RhdHVzKSkgew0KPiArICAgICAgREVCVUcgKChERUJVR19FUlJPUiwgIiVhOlVz YkdldEVuZHBvaW50RGVzY3JpcHRvciBzdGF0dXMgPSAlclxuIiwNCj4gX19mdW5jX18sIFN0YXR1 cykpOw0KPiArICAgICAgcmV0dXJuOw0KPiArICAgIH0NCj4gKw0KPiArICAgIHN3aXRjaCAoKEVu ZHBvaW50LkF0dHJpYnV0ZXMgJiAoQklUMCB8IEJJVDEpKSkgew0KPiArICAgICAgY2FzZSBVU0Jf RU5EUE9JTlRfQlVMSzoNCj4gKyAgICAgICAgaWYgKEVuZHBvaW50LkVuZHBvaW50QWRkcmVzcyAm IEJJVDcpIHsNCj4gKyAgICAgICAgICBVc2JSbmRpc0RldmljZS0+QnVsa0luRW5kcG9pbnQgPSBF bmRwb2ludC5FbmRwb2ludEFkZHJlc3M7DQo+ICsgICAgICAgIH0gZWxzZSB7DQo+ICsgICAgICAg ICAgVXNiUm5kaXNEZXZpY2UtPkJ1bGtPdXRFbmRwb2ludCA9IEVuZHBvaW50LkVuZHBvaW50QWRk cmVzczsNCj4gKyAgICAgICAgfQ0KPiArDQo+ICsgICAgICAgIGJyZWFrOw0KPiArICAgICAgY2Fz ZSBVU0JfRU5EUE9JTlRfSU5URVJSVVBUOg0KPiArICAgICAgICBVc2JSbmRpc0RldmljZS0+SW50 ZXJydXBFbmRwb2ludCA9IEVuZHBvaW50LkVuZHBvaW50QWRkcmVzczsNCj4gKyAgICAgICAgYnJl YWs7DQo+ICsgICAgfQ0KPiArICB9DQo+ICt9DQo+ICsNCj4gKy8qKg0KPiArICBBc3luYyBVU0Ig dHJhbnNmZXIgY2FsbGJhY2sgcm91dGluZS4NCj4gKw0KPiArICBAcGFyYW1baW5dICBEYXRhICAg ICAgICAgICAgRGF0YSByZWNlaXZlZCBvciBzZW50IHZpYSB0aGUgVVNCIEFzeW5jaHJvbm91cw0K PiBUcmFuc2ZlciwgaWYgdGhlDQo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0cmFu c2ZlciBjb21wbGV0ZWQgc3VjY2Vzc2Z1bGx5Lg0KPiArICBAcGFyYW1baW5dICBEYXRhTGVuZ3Ro ICAgICAgVGhlIGxlbmd0aCBvZiBEYXRhIHJlY2VpdmVkIG9yIHNlbnQgdmlhIHRoZQ0KPiBBc3lu Y2hyb25vdXMNCj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRyYW5zZmVyLCBpZiB0 cmFuc2ZlciBzdWNjZXNzZnVsbHkgY29tcGxldGVzLg0KPiArICBAcGFyYW1baW5dICBDb250ZXh0 ICAgICAgICAgRGF0YSBwYXNzZWQgZnJvbSBVc2JBc3luY0ludGVycnVwdFRyYW5zZmVyKCkNCj4g cmVxdWVzdC4NCj4gKyAgQHBhcmFtW2luXSAgU3RhdHVzICAgICAgICAgIEluZGljYXRlcyB0aGUg cmVzdWx0IG9mIHRoZSBhc3luY2hyb25vdXMgdHJhbnNmZXIuDQo+ICsNCj4gKyAgQHJldHZhbCBF RklfU1VDQ0VTUyAgICAgICAgICAgVGhlIGFzeW5jaHJvbm91cyBVU0IgdHJhbnNmZXIgcmVxdWVz dCBoYXMgYmVlbg0KPiBzdWNjZXNzZnVsbHkgZXhlY3V0ZWQuDQo+ICsgIEByZXR2YWwgRUZJX0RF VklDRV9FUlJPUiAgICAgIFRoZSBhc3luY2hyb25vdXMgVVNCIHRyYW5zZmVyIHJlcXVlc3QNCj4g ZmFpbGVkLg0KPiArDQo+ICsqKi8NCj4gK0VGSV9TVEFUVVMNCj4gK0VGSUFQSQ0KPiArSW50ZXJy dXB0Q2FsbGJhY2sgKA0KPiArICBJTiAgVk9JRCAgICAqRGF0YSwNCj4gKyAgSU4gIFVJTlROICAg RGF0YUxlbmd0aCwNCj4gKyAgSU4gIFZPSUQgICAgKkNvbnRleHQsDQo+ICsgIElOICBVSU5UMzIg IFN0YXR1cw0KPiArICApDQo+ICt7DQo+ICsgIGlmICgoRGF0YSA9PSBOVUxMKSB8fCAoQ29udGV4 dCA9PSBOVUxMKSkgew0KPiArICAgIHJldHVybiBFRklfSU5WQUxJRF9QQVJBTUVURVI7DQo+ICsg IH0NCj4gKw0KPiArICBpZiAoKChFRklfVVNCX0RFVklDRV9SRVFVRVNUICopRGF0YSktPlJlcXVl c3QgPT0gMCkgew0KPiArICAgIENvcHlNZW0gKA0KPiArICAgICAgKEVGSV9VU0JfREVWSUNFX1JF UVVFU1QgKilDb250ZXh0LA0KPiArICAgICAgKEVGSV9VU0JfREVWSUNFX1JFUVVFU1QgKilEYXRh LA0KPiArICAgICAgc2l6ZW9mIChFRklfVVNCX0RFVklDRV9SRVFVRVNUKQ0KPiArICAgICAgKTsN Cj4gKyAgfQ0KPiArDQo+ICsgIHJldHVybiBFRklfU1VDQ0VTUzsNCj4gK30NCj4gKw0KPiArLyoq DQo+ICsgIFRoaXMgZnVuY3Rpb24gaXMgdXNlZCB0byBtYW5hZ2UgYSBVU0IgZGV2aWNlIHdpdGgg YW4gaW50ZXJydXB0IHRyYW5zZmVyIHBpcGUuDQo+ICsNCj4gKyAgQHBhcmFtW2luXSAgVGhpcyAg ICAgICAgICAgICAgQSBwb2ludGVyIHRvIHRoZSBFREtJSV9VU0JfRVRIRVJORVRfUFJPVE9DT0wN Cj4gaW5zdGFuY2UuDQo+ICsgIEBwYXJhbVtpbl0gIElzTmV3VHJhbnNmZXIgICAgIElmIFRSVUUs IGEgbmV3IHRyYW5zZmVyIHdpbGwgYmUgc3VibWl0dGVkIHRvDQo+IFVTQiBjb250cm9sbGVyLiBJ Zg0KPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGQUxTRSwgdGhlIGludGVycnVw dCB0cmFuc2ZlciBpcyBkZWxldGVkIGZyb20gdGhlIGRldmljZSdzDQo+IGludGVycnVwdA0KPiAr ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0cmFuc2ZlciBxdWV1ZS4NCj4gKyAgQHBh cmFtW2luXSAgUG9sbGluZ0ludGVydmFsICAgSW5kaWNhdGVzIHRoZSBwZXJpb2RpYyByYXRlLCBp biBtaWxsaXNlY29uZHMsIHRoYXQNCj4gdGhlIHRyYW5zZmVyIGlzIHRvIGJlDQo+ICsgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIGV4ZWN1dGVkLlRoaXMgcGFyYW1ldGVyIGlzIHJlcXVp cmVkIHdoZW4gSXNOZXdUcmFuc2Zlcg0KPiBpcyBUUlVFLiBUaGUNCj4gKyAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgdmFsdWUgbXVzdCBiZSBiZXR3ZWVuIDEgdG8gMjU1LCBvdGhlcndp c2UNCj4gRUZJX0lOVkFMSURfUEFSQU1FVEVSIGlzIHJldHVybmVkLg0KPiArICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBUaGUgdW5pdHMgYXJlIGluIG1pbGxpc2Vjb25kcy4NCj4gKyAg QHBhcmFtW2luXSAgUmVxdWVzdCAgICAgICAgICAgQSBwb2ludGVyIHRvIHRoZSBFRklfVVNCX0RF VklDRV9SRVFVRVNUIGRhdGEuDQo+ICsNCj4gKyAgQHJldHZhbCBFRklfU1VDQ0VTUyAgICAgICAg ICAgVGhlIGFzeW5jaHJvbm91cyBVU0IgdHJhbnNmZXIgcmVxdWVzdCB0cmFuc2Zlcg0KPiBoYXMg YmVlbiBzdWNjZXNzZnVsbHkgZXhlY3V0ZWQuDQo+ICsgIEByZXR2YWwgRUZJX0RFVklDRV9FUlJP UiAgICAgIFRoZSBhc3luY2hyb25vdXMgVVNCIHRyYW5zZmVyIHJlcXVlc3QNCj4gZmFpbGVkLg0K PiArDQo+ICsqKi8NCj4gK0VGSV9TVEFUVVMNCj4gK0VGSUFQSQ0KPiArVXNiUm5kaXNJbnRlcnJ1 cHQgKA0KPiArICBJTiBFREtJSV9VU0JfRVRIRVJORVRfUFJPVE9DT0wgICpUaGlzLA0KPiArICBJ TiBCT09MRUFOICAgICAgICAgICAgICAgICAgICAgIElzTmV3VHJhbnNmZXIsDQo+ICsgIElOIFVJ TlROICAgICAgICAgICAgICAgICAgICAgICAgUG9sbGluZ0ludGVydmFsLA0KPiArICBJTiBFRklf VVNCX0RFVklDRV9SRVFVRVNUICAgICAgICpSZXF1c3QNCj4gKyAgKQ0KPiArew0KPiArICBFRklf U1RBVFVTICAgICAgICBTdGF0dXM7DQo+ICsgIFVTQl9STkRJU19ERVZJQ0UgICpVc2JSbmRpc0Rl dmljZTsNCj4gKyAgVUlOVE4gICAgICAgICAgICAgRGF0YUxlbmd0aDsNCj4gKw0KPiArICBVc2JS bmRpc0RldmljZSA9IFVTQl9STkRJU19ERVZJQ0VfRlJPTV9USElTIChUaGlzKTsNCj4gKyAgRGF0 YUxlbmd0aCAgICAgPSAwOw0KPiArDQo+ICsgIGlmIChJc05ld1RyYW5zZmVyID09IFRSVUUpIHsN Cj4gKyAgICBEYXRhTGVuZ3RoID0gc2l6ZW9mIChFRklfVVNCX0RFVklDRV9SRVFVRVNUKSArIHNp emVvZg0KPiAoVVNCX0NPTk5FQ1RfU1BFRURfQ0hBTkdFKTsNCj4gKyAgICBTdGF0dXMgICAgID0g VXNiUm5kaXNEZXZpY2UtPlVzYklvLT5Vc2JBc3luY0ludGVycnVwdFRyYW5zZmVyICgNCj4gKyAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFVzYlJuZGlzRGV2aWNlLT5V c2JJbywNCj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFVzYlJu ZGlzRGV2aWNlLT5JbnRlcnJ1cEVuZHBvaW50LA0KPiArICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgSXNOZXdUcmFuc2ZlciwNCj4gKyAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIFBvbGxpbmdJbnRlcnZhbCwNCj4gKyAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIERhdGFMZW5ndGgsDQo+ICsgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJbnRlcnJ1cHRDYWxsYmFjaywNCj4gKyAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJlcXVzdA0KPiArICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKTsNCj4gKw0KPiArICAgIGlmIChTdGF0 dXMgPT0gRUZJX0lOVkFMSURfUEFSQU1FVEVSKSB7DQo+ICsgICAgICAvLyBCZWNhdXNlIG9mIFN0 YWNrZWQgQXN5bmNJbnRlcnJ1cHQgcmVxdWVzdCBhcmUgbm90IHN1cHBvcnRlZA0KPiArICAgICAg U3RhdHVzID0gVXNiUm5kaXNEZXZpY2UtPlVzYklvLT5Vc2JBc3luY0ludGVycnVwdFRyYW5zZmVy ICgNCj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBVc2JSbmRpc0Rl dmljZS0+VXNiSW8sDQo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg VXNiUm5kaXNEZXZpY2UtPkludGVycnVwRW5kcG9pbnQsDQo+ICsgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgMCwNCj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAwLA0KPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IDAsDQo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTlVMTCwNCj4g KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBOVUxMDQo+ICsgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKTsNCj4gKyAgICB9DQo+ICsgIH0gZWxz ZSB7DQo+ICsgICAgU3RhdHVzID0gVXNiUm5kaXNEZXZpY2UtPlVzYklvLT5Vc2JBc3luY0ludGVy cnVwdFRyYW5zZmVyICgNCj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg VXNiUm5kaXNEZXZpY2UtPlVzYklvLA0KPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBVc2JSbmRpc0RldmljZS0+SW50ZXJydXBFbmRwb2ludCwNCj4gKyAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgSXNOZXdUcmFuc2ZlciwNCj4gKyAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgMCwNCj4gKyAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgMCwNCj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgTlVMTCwNCj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTlVMTA0K PiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApOw0KPiArICB9DQo+ICsN Cj4gKyAgcmV0dXJuIFN0YXR1czsNCj4gK30NCj4gKw0KPiArLyoqDQo+ICsgIFRoaXMgZnVuY3Rp b24gaXMgdXNlZCB0byByZWFkIFVTQiBpbnRlcnJ1cHQgdHJhbnNmZXIgYmVmb3JlIHRoZSByZXNw b25zZQ0KPiBSTkRJUyBtZXNzYWdlLg0KPiArDQo+ICsgIEBwYXJhbVtpbl0gIFRoaXMgICAgICAg ICAgICAgIEEgcG9pbnRlciB0byB0aGUgVVNCX1JORElTX0RFVklDRSBpbnN0YW5jZS4NCj4gKw0K PiArICBAcmV0dmFsIEVGSV9TVUNDRVNTICAgICAgICAgICBUaGUgVVNCIGludGVycnVwdCB0cmFu c2ZlciBoYXMgYmVlbiBzdWNjZXNzZnVsbHkNCj4gZXhlY3V0ZWQuDQo+ICsgIEByZXR2YWwgRUZJ X0RFVklDRV9FUlJPUiAgICAgIFRoZSBVU0IgaW50ZXJydXB0IHRyYW5zZmVyIGZhaWxlZC4NCj4g Kw0KPiArKiovDQo+ICtFRklfU1RBVFVTDQo+ICtFRklBUEkNCj4gK1JlYWRSbmRpc1Jlc3BvbnNl SW50ZXJydXB0ICgNCj4gKyAgSU4gVVNCX1JORElTX0RFVklDRSAgKlVzYlJuZGlzRGV2aWNlDQo+ ICsgICkNCj4gK3sNCj4gKyAgRUZJX1NUQVRVUyAgU3RhdHVzOw0KPiArICBVSU5UMzIgICAgICBE YXRhWzJdOw0KPiArICBVSU5UMzIgICAgICBVc2JTdGF0dXM7DQo+ICsgIFVJTlROICAgICAgIERh dGFMZW5ndGg7DQo+ICsNCj4gKyAgRGF0YUxlbmd0aCA9IDg7DQo+ICsNCj4gKyAgWmVyb01lbSAo RGF0YSwgc2l6ZW9mIChEYXRhKSk7DQo+ICsNCj4gKyAgU3RhdHVzID0gVXNiUm5kaXNEZXZpY2Ut PlVzYklvLT5Vc2JTeW5jSW50ZXJydXB0VHJhbnNmZXIgKA0KPiArICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgVXNiUm5kaXNEZXZpY2UtPlVzYklvLA0KPiArICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgVXNiUm5kaXNEZXZpY2UtPkludGVycnVwRW5kcG9pbnQs DQo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmRGF0YSwNCj4gKyAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZEYXRhTGVuZ3RoLA0KPiArICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgyMCwNCj4gKyAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICZVc2JTdGF0dXMNCj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICk7DQo+ICsNCj4gKyAgcmV0dXJuIFN0YXR1czsNCj4gK30NCj4gKw0KPiArLyoq DQo+ICsgIFJldHJpZXZlcyB0aGUgVVNCIEV0aGVybmV0IE1hYyBBZGRyZXNzLg0KPiArDQo+ICsg IEBwYXJhbVtpbl0gIFRoaXMgICAgICAgICAgQSBwb2ludGVyIHRvIHRoZSBFREtJSV9VU0JfRVRI RVJORVRfUFJPVE9DT0wNCj4gaW5zdGFuY2UuDQo+ICsgIEBwYXJhbVtvdXRdIE1hY0FkZHJlc3Mg ICAgQSBwb2ludGVyIHRvIHRoZSBjYWxsZXIgYWxsb2NhdGVkIFVTQiBFdGhlcm5ldA0KPiBNYWMg QWRkcmVzcy4NCj4gKw0KPiArICBAcmV0dmFsIEVGSV9TVUNDRVNTICAgICAgICAgICBUaGUgVVNC IEhlYWRlciBGdW5jdGlvbmFsIGRlc2NyaXB0b3Igd2FzDQo+IHJldHJpZXZlZCBzdWNjZXNzZnVs bHkuDQo+ICsgIEByZXR2YWwgRUZJX0lOVkFMSURfUEFSQU1FVEVSIFVzYkhlYWRlckZ1bkRlc2Ny aXB0b3IgaXMgTlVMTC4NCj4gKyAgQHJldHZhbCBFRklfTk9UX0ZPVU5EICAgICAgICAgVGhlIFVT QiBIZWFkZXIgRnVuY3Rpb25hbCBkZXNjcmlwdG9yIHdhcw0KPiBub3QgZm91bmQuDQo+ICsNCj4g KyoqLw0KPiArRUZJX1NUQVRVUw0KPiArRUZJQVBJDQo+ICtHZXRVc2JFdGhNYWNBZGRyZXNzICgN Cj4gKyAgSU4gIEVES0lJX1VTQl9FVEhFUk5FVF9QUk9UT0NPTCAgKlRoaXMsDQo+ICsgIE9VVCBF RklfTUFDX0FERFJFU1MgICAgICAgICAgICAgICpNYWNBZGRyZXNzDQo+ICsgICkNCj4gK3sNCj4g KyAgRUZJX1NUQVRVUyAgICAgICAgICAgICAgICAgICBTdGF0dXM7DQo+ICsgIFVTQl9STkRJU19E RVZJQ0UgICAgICAgICAgICAgKlVzYlJuZGlzRGV2aWNlOw0KPiArICBVU0JfRVRIRVJORVRfRlVO X0RFU0NSSVBUT1IgIFVzYkV0aERlc2NyaXB0b3I7DQo+ICsgIENIQVIxNiAgICAgICAgICAgICAg ICAgICAgICAgKkRhdGE7DQo+ICsgIENIQVIxNiAgICAgICAgICAgICAgICAgICAgICAgKkRhdGFQ dHI7DQo+ICsgIENIQVIxNiAgICAgICAgICAgICAgICAgICAgICAgVG1wU3RyWzFdOw0KPiArICBV SU5UOCAgICAgICAgICAgICAgICAgICAgICAgIEluZGV4Ow0KPiArICBVSU5UOCAgICAgICAgICAg ICAgICAgICAgICAgIEhpOw0KPiArICBVSU5UOCAgICAgICAgICAgICAgICAgICAgICAgIExvdzsN Cj4gKw0KPiArICBSRU1PVEVfTkRJU19RVUVSWV9NQUNfTVNHICAgIFJuZGlzUXVlcnlNc2c7DQo+ ICsgIFJFTU9URV9ORElTX1FVRVJZX01BQ19DTVBMVCAgUm5kaXNRdWVyeU1zZ0NtcGx0Ow0KPiAr DQo+ICsgIFVzYlJuZGlzRGV2aWNlID0gVVNCX1JORElTX0RFVklDRV9GUk9NX1RISVMgKFRoaXMp Ow0KPiArDQo+ICsgIFplcm9NZW0gKCZSbmRpc1F1ZXJ5TXNnLCBzaXplb2YgKFJFTU9URV9ORElT X1FVRVJZX01BQ19NU0cpKTsNCj4gKyAgWmVyb01lbSAoJlJuZGlzUXVlcnlNc2dDbXBsdCwgc2l6 ZW9mDQo+IChSRU1PVEVfTkRJU19RVUVSWV9NQUNfQ01QTFQpKTsNCj4gKw0KPiArICBSbmRpc1F1 ZXJ5TXNnLlF1ZXJ5TXNnLk1lc3NhZ2VUeXBlICAgPSBSTkRJU19RVUVSWV9NU0c7DQo+ICsgIFJu ZGlzUXVlcnlNc2cuUXVlcnlNc2cuTWVzc2FnZUxlbmd0aCA9IHNpemVvZg0KPiAoUkVNT1RFX05E SVNfUVVFUllfTUFDX01TRyk7DQo+ICsgIFJuZGlzUXVlcnlNc2cuUXVlcnlNc2cuUmVxdWVzdElE ICAgICA9IFVzYlJuZGlzRGV2aWNlLT5SZXF1ZXN0SWQ7DQo+ICsgIFJuZGlzUXVlcnlNc2cuUXVl cnlNc2cuT2lkICAgICAgICAgICA9IE9JRF84MDJfM19DVVJSRU5UX0FERFJFU1M7DQo+ICsNCj4g KyAgUm5kaXNRdWVyeU1zZ0NtcGx0LlF1ZXJ5Q21wbHQuTWVzc2FnZVR5cGUgICA9IFJORElTX1FV RVJZX0NNUExUOw0KPiArICBSbmRpc1F1ZXJ5TXNnQ21wbHQuUXVlcnlDbXBsdC5NZXNzYWdlTGVu Z3RoID0gc2l6ZW9mDQo+IChSRU1PVEVfTkRJU19RVUVSWV9NQUNfQ01QTFQpOw0KPiArDQo+ICsg IFN0YXR1cyA9IFJuZGlzQ29udHJvbE1zZyAoDQo+ICsgICAgICAgICAgICAgVXNiUm5kaXNEZXZp Y2UsDQo+ICsgICAgICAgICAgICAgKFJFTU9URV9ORElTX01TR19IRUFERVIgKikmUm5kaXNRdWVy eU1zZywNCj4gKyAgICAgICAgICAgICAoUkVNT1RFX05ESVNfTVNHX0hFQURFUiAqKSZSbmRpc1F1 ZXJ5TXNnQ21wbHQNCj4gKyAgICAgICAgICAgICApOw0KPiArICBpZiAoIUVGSV9FUlJPUiAoU3Rh dHVzKSkgew0KPiArICAgIERFQlVHICgoREVCVUdfSU5GTywgIlN1Y2Nlc3MgdG8gZ2V0IE1hYyBh ZGRyZXNzIGZyb20gUk5ESVMNCj4gbWVzc2FnZS5cbiIpKTsNCj4gKyAgICBmb3IgKEluZGV4ID0g MDsgSW5kZXggPCBQWEVfSFdBRERSX0xFTl9FVEhFUjsgSW5kZXgrKykgew0KPiArICAgICAgTWFj QWRkcmVzcy0+QWRkcltJbmRleF0gPSBSbmRpc1F1ZXJ5TXNnQ21wbHQuQWRkcltJbmRleF07DQo+ ICsgICAgfQ0KPiArDQo+ICsgICAgVXNiUm5kaXNEZXZpY2UtPlJlcXVlc3RJZCsrOw0KPiArICAg IHJldHVybiBTdGF0dXM7DQo+ICsgIH0NCj4gKw0KPiArICAvLyBJZiBpdCBpcyBub3Qgc3VwcG9y dCB0aGUgT0lEXzgwMl8zX0NVUlJFTlRfQUREUkVTUy4NCj4gKyAgLy8gVG8gY2hlY2sgVVNCIEV0 aGVybmV0IGZ1bmN0aW9uYWwgRGVzY3JpcHRvcg0KPiArICBTdGF0dXMgPSBUaGlzLT5Vc2JFdGhG dW5EZXNjcmlwdG9yIChUaGlzLCAmVXNiRXRoRGVzY3JpcHRvcik7DQo+ICsgIGlmIChFRklfRVJS T1IgKFN0YXR1cykpIHsNCj4gKyAgICBERUJVRyAoKERFQlVHX0VSUk9SLCAiJWE6VXNiRXRoRnVu RGVzY3JpcHRvciBzdGF0dXMgPSAlclxuIiwNCj4gX19mdW5jX18sIFN0YXR1cykpOw0KPiArICAg IHJldHVybiBTdGF0dXM7DQo+ICsgIH0NCj4gKw0KPiArICBTdGF0dXMgPSBVc2JSbmRpc0Rldmlj ZS0+VXNiSW8tPlVzYkdldFN0cmluZ0Rlc2NyaXB0b3IgKA0KPiArICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgVXNiUm5kaXNEZXZpY2UtPlVzYklvLA0KPiArICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgMHg0MDksICAgICAgICAgICAgICAgICAgICAgICAvLyBF bmdsaXNoLVVTIExhbmd1YWdlIElEDQo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBVc2JFdGhEZXNjcmlwdG9yLk1hY0FkZHJlc3MsDQo+ICsgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAmRGF0YQ0KPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgKTsNCj4gKyAgaWYgKEVGSV9FUlJPUiAoU3RhdHVzKSkgew0KPiArICAgIERFQlVHICgo REVCVUdfRVJST1IsICIlYTpVc2JHZXRTdHJpbmdEZXNjcmlwdG9yIHN0YXR1cyA9ICVyXG4iLA0K PiBfX2Z1bmNfXywgU3RhdHVzKSk7DQo+ICsgICAgcmV0dXJuIFN0YXR1czsNCj4gKyAgfQ0KPiAr DQo+ICsgIERhdGFQdHIgPSBEYXRhOw0KPiArICBmb3IgKEluZGV4ID0gMDsgSW5kZXggPCBQWEVf SFdBRERSX0xFTl9FVEhFUjsgSW5kZXgrKykgew0KPiArICAgIENvcHlNZW0gKFRtcFN0ciwgRGF0 YVB0ciwgc2l6ZW9mIChDSEFSMTYpKTsNCj4gKyAgICBEYXRhUHRyKys7DQo+ICsgICAgSGkgPSAo VUlOVDgpU3RySGV4VG9VaW50biAoVG1wU3RyKTsNCj4gKyAgICBDb3B5TWVtIChUbXBTdHIsIERh dGFQdHIsIHNpemVvZiAoQ0hBUjE2KSk7DQo+ICsgICAgRGF0YVB0cisrOw0KPiArICAgIExvdyAg ICAgICAgICAgICAgICAgICAgID0gKFVJTlQ4KVN0ckhleFRvVWludG4gKFRtcFN0cik7DQo+ICsg ICAgTWFjQWRkcmVzcy0+QWRkcltJbmRleF0gPSAoSGkgPDwgNCkgfCBMb3c7DQo+ICsgIH0NCj4g Kw0KPiArICByZXR1cm4gU3RhdHVzOw0KPiArfQ0KPiArDQo+ICsvKioNCj4gKyAgUmV0cmlldmVz IHRoZSBVU0IgRXRoZXJuZXQgQnVsayB0cmFuc2ZlciBkYXRhIHNpemUuDQo+ICsNCj4gKyAgQHBh cmFtW2luXSAgVGhpcyAgICAgICAgICBBIHBvaW50ZXIgdG8gdGhlIEVES0lJX1VTQl9FVEhFUk5F VF9QUk9UT0NPTA0KPiBpbnN0YW5jZS4NCj4gKyAgQHBhcmFtW291dF0gQnVsa1NpemUgICAgICBB IHBvaW50ZXIgdG8gdGhlIEJ1bGsgdHJhbnNmZXIgZGF0YSBzaXplLg0KPiArDQo+ICsgIEByZXR2 YWwgRUZJX1NVQ0NFU1MgICAgICAgVGhlIGJ1bGsgdHJhbnNmZXIgZGF0YSBzaXplIHdhcyByZXRy aWV2ZWQNCj4gc3VjY2Vzc2Z1bGx5Lg0KPiArICBAcmV0dmFsIG90aGVyICAgICAgICAgICAgIEZh aWxlZCB0byByZXRyaWV2ZSB0aGUgYnVsayB0cmFuc2ZlciBkYXRhIHNpemUuDQo+ICsNCj4gKyoq Lw0KPiArRUZJX1NUQVRVUw0KPiArRUZJQVBJDQo+ICtVc2JFdGhCdWxrU2l6ZSAoDQo+ICsgIElO ICBFREtJSV9VU0JfRVRIRVJORVRfUFJPVE9DT0wgICpUaGlzLA0KPiArICBPVVQgVUlOVE4gICAg ICAgICAgICAgICAgICAgICAgICAqQnVsa1NpemUNCj4gKyAgKQ0KPiArew0KPiArICBFRklfU1RB VFVTICAgICAgICAgICAgICAgICAgIFN0YXR1czsNCj4gKyAgVVNCX0VUSEVSTkVUX0ZVTl9ERVND UklQVE9SICBVc2JFdGhGdW5EZXNjcmlwdG9yOw0KPiArICBVU0JfUk5ESVNfREVWSUNFICAgICAg ICAgICAgICpVc2JSbmRpc0RldmljZTsNCj4gKw0KPiArICBSRU1PVEVfTkRJU19RVUVSWV9NQVhf VE9UQUxfU0laRV9NU0cgICAgUm5kaXNRdWVyeU1zZzsNCj4gKyAgUkVNT1RFX05ESVNfUVVFUllf TUFYX1RPVEFMX1NJWkVfQ01QTFQgIFJuZGlzUXVlcnlNc2dDbXBsdDsNCj4gKw0KPiArICBVc2JS bmRpc0RldmljZSA9IFVTQl9STkRJU19ERVZJQ0VfRlJPTV9USElTIChUaGlzKTsNCj4gKw0KPiAr ICBaZXJvTWVtICgmUm5kaXNRdWVyeU1zZywgc2l6ZW9mDQo+IChSRU1PVEVfTkRJU19RVUVSWV9N QVhfVE9UQUxfU0laRV9NU0cpKTsNCj4gKyAgWmVyb01lbSAoJlJuZGlzUXVlcnlNc2dDbXBsdCwg c2l6ZW9mDQo+IChSRU1PVEVfTkRJU19RVUVSWV9NQVhfVE9UQUxfU0laRV9DTVBMVCkpOw0KPiAr DQo+ICsgIFJuZGlzUXVlcnlNc2cuUXVlcnlNc2cuTWVzc2FnZVR5cGUgICA9IFJORElTX1FVRVJZ X01TRzsNCj4gKyAgUm5kaXNRdWVyeU1zZy5RdWVyeU1zZy5NZXNzYWdlTGVuZ3RoID0gc2l6ZW9m DQo+IChSRU1PVEVfTkRJU19RVUVSWV9NQVhfVE9UQUxfU0laRV9NU0cpOw0KPiArICBSbmRpc1F1 ZXJ5TXNnLlF1ZXJ5TXNnLlJlcXVlc3RJRCAgICAgPSBVc2JSbmRpc0RldmljZS0+UmVxdWVzdElk Ow0KPiArICBSbmRpc1F1ZXJ5TXNnLlF1ZXJ5TXNnLk9pZCAgICAgICAgICAgPSBPSURfR0VOX01B WElNVU1fVE9UQUxfU0laRTsNCj4gKw0KPiArICBSbmRpc1F1ZXJ5TXNnQ21wbHQuUXVlcnlDbXBs dC5NZXNzYWdlVHlwZSAgID0gUk5ESVNfUVVFUllfQ01QTFQ7DQo+ICsgIFJuZGlzUXVlcnlNc2dD bXBsdC5RdWVyeUNtcGx0Lk1lc3NhZ2VMZW5ndGggPSBzaXplb2YNCj4gKFJFTU9URV9ORElTX1FV RVJZX01BWF9UT1RBTF9TSVpFX0NNUExUKTsNCj4gKw0KPiArICBTdGF0dXMgPSBSbmRpc0NvbnRy b2xNc2cgKA0KPiArICAgICAgICAgICAgIFVzYlJuZGlzRGV2aWNlLA0KPiArICAgICAgICAgICAg IChSRU1PVEVfTkRJU19NU0dfSEVBREVSICopJlJuZGlzUXVlcnlNc2csDQo+ICsgICAgICAgICAg ICAgKFJFTU9URV9ORElTX01TR19IRUFERVIgKikmUm5kaXNRdWVyeU1zZ0NtcGx0DQo+ICsgICAg ICAgICAgICAgKTsNCj4gKyAgaWYgKCFFRklfRVJST1IgKFN0YXR1cykpIHsNCj4gKyAgICBERUJV RyAoKERFQlVHX0lORk8sICJTdWNjZXNzIHRvIGdldCBNYXggVG90YWwgc2l6ZSA6ICVYICBcbiIs DQo+IFJuZGlzUXVlcnlNc2dDbXBsdC5NYXhUb3RhbFNpemUpKTsNCj4gKyAgICAqQnVsa1NpemUg PSBSbmRpc1F1ZXJ5TXNnQ21wbHQuTWF4VG90YWxTaXplOw0KPiArICAgIFVzYlJuZGlzRGV2aWNl LT5SZXF1ZXN0SWQrKzsNCj4gKyAgICByZXR1cm4gU3RhdHVzOw0KPiArICB9DQo+ICsNCj4gKyAg U3RhdHVzID0gVGhpcy0+VXNiRXRoRnVuRGVzY3JpcHRvciAoVGhpcywgJlVzYkV0aEZ1bkRlc2Ny aXB0b3IpOw0KPiArICBpZiAoRUZJX0VSUk9SIChTdGF0dXMpKSB7DQo+ICsgICAgcmV0dXJuIFN0 YXR1czsNCj4gKyAgfQ0KPiArDQo+ICsgICpCdWxrU2l6ZSA9IChVSU5UTilVc2JFdGhGdW5EZXNj cmlwdG9yLk1heFNlZ21lbnRTaXplOw0KPiArICByZXR1cm4gU3RhdHVzOw0KPiArfQ0KPiArDQo+ ICsvKioNCj4gKyAgUmV0cmlldmVzIHRoZSBVU0IgSGVhZGVyIGZ1bmN0aW9uYWwgRGVzY3JpcHRv ci4NCj4gKw0KPiArICBAcGFyYW1baW5dICBUaGlzICAgICAgICAgICAgICAgICAgIEEgcG9pbnRl ciB0byB0aGUNCj4gRURLSUlfVVNCX0VUSEVSTkVUX1BST1RPQ09MIGluc3RhbmNlLg0KPiArICBA cGFyYW1bb3V0XSBVc2JIZWFkZXJGdW5EZXNjcmlwdG9yIEEgcG9pbnRlciB0byB0aGUgY2FsbGVy IGFsbG9jYXRlZCBVU0INCj4gSGVhZGVyIEZ1bmN0aW9uYWwgRGVzY3JpcHRvci4NCj4gKw0KPiAr ICBAcmV0dmFsIEVGSV9TVUNDRVNTICAgICAgICAgICBUaGUgVVNCIEhlYWRlciBGdW5jdGlvbmFs IGRlc2NyaXB0b3Igd2FzDQo+IHJldHJpZXZlZCBzdWNjZXNzZnVsbHkuDQo+ICsgIEByZXR2YWwg RUZJX0lOVkFMSURfUEFSQU1FVEVSIFVzYkhlYWRlckZ1bkRlc2NyaXB0b3IgaXMgTlVMTC4NCj4g KyAgQHJldHZhbCBFRklfTk9UX0ZPVU5EICAgICAgICAgVGhlIFVTQiBIZWFkZXIgRnVuY3Rpb25h bCBkZXNjcmlwdG9yIHdhcw0KPiBub3QgZm91bmQuDQo+ICsNCj4gKyoqLw0KPiArRUZJX1NUQVRV Uw0KPiArRUZJQVBJDQo+ICtHZXRVc2JIZWFkZXJGdW5EZXNjcmlwdG9yICgNCj4gKyAgSU4gIEVE S0lJX1VTQl9FVEhFUk5FVF9QUk9UT0NPTCAgKlRoaXMsDQo+ICsgIE9VVCBVU0JfSEVBREVSX0ZV Tl9ERVNDUklQVE9SICAgICpVc2JIZWFkZXJGdW5EZXNjcmlwdG9yDQo+ICsgICkNCj4gK3sNCj4g KyAgRUZJX1NUQVRVUyAgICAgICAgU3RhdHVzOw0KPiArICBVU0JfUk5ESVNfREVWSUNFICAqVXNi Um5kaXNEZXZpY2U7DQo+ICsNCj4gKyAgVXNiUm5kaXNEZXZpY2UgPSBVU0JfUk5ESVNfREVWSUNF X0ZST01fVEhJUyAoVGhpcyk7DQo+ICsNCj4gKyAgaWYgKFVzYkhlYWRlckZ1bkRlc2NyaXB0b3Ig PT0gTlVMTCkgew0KPiArICAgIHJldHVybiBFRklfSU5WQUxJRF9QQVJBTUVURVI7DQo+ICsgIH0N Cj4gKw0KPiArICBTdGF0dXMgPSBHZXRGdW5jdGlvbmFsRGVzY3JpcHRvciAoDQo+ICsgICAgICAg ICAgICAgVXNiUm5kaXNEZXZpY2UtPkNvbmZpZywNCj4gKyAgICAgICAgICAgICBIRUFERVJfRlVO X0RFU0NSSVBUT1IsDQo+ICsgICAgICAgICAgICAgVXNiSGVhZGVyRnVuRGVzY3JpcHRvcg0KPiAr ICAgICAgICAgICAgICk7DQo+ICsgIHJldHVybiBTdGF0dXM7DQo+ICt9DQo+ICsNCj4gKy8qKg0K PiArICBSZXRyaWV2ZXMgdGhlIFVTQiBVbmlvbiBmdW5jdGlvbmFsIERlc2NyaXB0b3IuDQo+ICsN Cj4gKyAgQHBhcmFtW2luXSAgVGhpcyAgICAgICAgICAgICAgICAgICBBIHBvaW50ZXIgdG8gdGhl DQo+IEVES0lJX1VTQl9FVEhFUk5FVF9QUk9UT0NPTCBpbnN0YW5jZS4NCj4gKyAgQHBhcmFtW291 dF0gVXNiVW5pb25GdW5EZXNjcmlwdG9yICBBIHBvaW50ZXIgdG8gdGhlIGNhbGxlciBhbGxvY2F0 ZWQgVVNCDQo+IFVuaW9uIEZ1bmN0aW9uYWwgRGVzY3JpcHRvci4NCj4gKw0KPiArICBAcmV0dmFs IEVGSV9TVUNDRVNTICAgICAgICAgICAgVGhlIFVTQiBVbmlvbiBGdW5jdGlvbmFsIGRlc2NyaXB0 b3Igd2FzDQo+IHJldHJpZXZlZCBzdWNjZXNzZnVsbHkuDQo+ICsgIEByZXR2YWwgRUZJX0lOVkFM SURfUEFSQU1FVEVSICBVc2JVbmlvbkZ1bkRlc2NyaXB0b3IgaXMgTlVMTC4NCj4gKyAgQHJldHZh bCBFRklfTk9UX0ZPVU5EICAgICAgICAgIFRoZSBVU0IgVW5pb24gRnVuY3Rpb25hbCBkZXNjcmlw dG9yIHdhcyBub3QNCj4gZm91bmQuDQo+ICsNCj4gKyoqLw0KPiArRUZJX1NUQVRVUw0KPiArRUZJ QVBJDQo+ICtHZXRVc2JVbmlvbkZ1bkRlc2NyaXB0b3IgKA0KPiArICBJTiAgRURLSUlfVVNCX0VU SEVSTkVUX1BST1RPQ09MICAqVGhpcywNCj4gKyAgT1VUIFVTQl9VTklPTl9GVU5fREVTQ1JJUFRP UiAgICAgKlVzYlVuaW9uRnVuRGVzY3JpcHRvcg0KPiArICApDQo+ICt7DQo+ICsgIEVGSV9TVEFU VVMgICAgICAgIFN0YXR1czsNCj4gKyAgVVNCX1JORElTX0RFVklDRSAgKlVzYlJuZGlzRGV2aWNl Ow0KPiArDQo+ICsgIFVzYlJuZGlzRGV2aWNlID0gVVNCX1JORElTX0RFVklDRV9GUk9NX1RISVMg KFRoaXMpOw0KPiArDQo+ICsgIGlmIChVc2JVbmlvbkZ1bkRlc2NyaXB0b3IgPT0gTlVMTCkgew0K PiArICAgIHJldHVybiBFRklfSU5WQUxJRF9QQVJBTUVURVI7DQo+ICsgIH0NCj4gKw0KPiArICBT dGF0dXMgPSBHZXRGdW5jdGlvbmFsRGVzY3JpcHRvciAoDQo+ICsgICAgICAgICAgICAgVXNiUm5k aXNEZXZpY2UtPkNvbmZpZywNCj4gKyAgICAgICAgICAgICBVTklPTl9GVU5fREVTQ1JJUFRPUiwN Cj4gKyAgICAgICAgICAgICBVc2JVbmlvbkZ1bkRlc2NyaXB0b3INCj4gKyAgICAgICAgICAgICAp Ow0KPiArICByZXR1cm4gU3RhdHVzOw0KPiArfQ0KPiArDQo+ICsvKioNCj4gKyAgUmV0cmlldmVz IHRoZSBVU0IgRXRoZXJuZXQgZnVuY3Rpb25hbCBEZXNjcmlwdG9yLg0KPiArDQo+ICsgIFRoaXMg ZnVuY3Rpb24gZ2V0IHRoZSBNYWMgQWRkcmVzcywgRXRoZXJuZXQgc3RhdGlzdGljcywgbWF4aW11 bSBzZWdtZW50DQo+IHNpemUsDQo+ICsgIG51bWJlciBvZiBtdWx0aWNhc3QgZmlsdGVycywgYW5k IG51bWJlciBvZiBwYXR0ZXJuIGZpbHRlcnMgZnJvbSBFdGhlcm5ldA0KPiArICBmdW5jdGlvbmFs IERlc2NyaXB0b3IuDQo+ICsNCj4gKyAgQHBhcmFtW2luXSAgVGhpcyAgICAgICAgICAgICAgICAg ICBBIHBvaW50ZXIgdG8gdGhlDQo+IEVES0lJX1VTQl9FVEhFUk5FVF9QUk9UT0NPTCBpbnN0YW5j ZS4NCj4gKyAgQHBhcmFtW291dF0gVXNiRXRoRnVuRGVzY3JpcHRvciAgICBBIHBvaW50ZXIgdG8g dGhlIGNhbGxlciBhbGxvY2F0ZWQgVVNCDQo+IEV0aGVybmV0IEZ1bmN0aW9uYWwgRGVzY3JpcHRv ci4NCj4gKw0KPiArICBAcmV0dmFsIEVGSV9TVUNDRVNTICAgICAgICAgICAgVGhlIFVTQiBFdGhl cm5ldCBGdW5jdGlvbmFsIGRlc2NyaXB0b3Igd2FzDQo+IHJldHJpZXZlZCBzdWNjZXNzZnVsbHku DQo+ICsgIEByZXR2YWwgRUZJX0lOVkFMSURfUEFSQU1FVEVSICBVc2JFdGhGdW5EZXNjcmlwdG9y IGlzIE5VTEwuDQo+ICsgIEByZXR2YWwgRUZJX05PVF9GT1VORCAgICAgICAgICBUaGUgVVNCIEV0 aGVybmV0IEZ1bmN0aW9uYWwgZGVzY3JpcHRvciB3YXMNCj4gbm90IGZvdW5kLg0KPiArDQo+ICsq Ki8NCj4gK0VGSV9TVEFUVVMNCj4gK0VGSUFQSQ0KPiArR2V0VXNiUm5kaXNGdW5EZXNjcmlwdG9y ICgNCj4gKyAgSU4gIEVES0lJX1VTQl9FVEhFUk5FVF9QUk9UT0NPTCAgKlRoaXMsDQo+ICsgIE9V VCBVU0JfRVRIRVJORVRfRlVOX0RFU0NSSVBUT1IgICpVc2JFdGhGdW5EZXNjcmlwdG9yDQo+ICsg ICkNCj4gK3sNCj4gKyAgRUZJX1NUQVRVUyAgICAgICAgU3RhdHVzOw0KPiArICBVU0JfUk5ESVNf REVWSUNFICAqVXNiUm5kaXNEZXZpY2U7DQo+ICsNCj4gKyAgVXNiUm5kaXNEZXZpY2UgPSBVU0Jf Uk5ESVNfREVWSUNFX0ZST01fVEhJUyAoVGhpcyk7DQo+ICsNCj4gKyAgaWYgKFVzYkV0aEZ1bkRl c2NyaXB0b3IgPT0gTlVMTCkgew0KPiArICAgIHJldHVybiBFRklfSU5WQUxJRF9QQVJBTUVURVI7 DQo+ICsgIH0NCj4gKw0KPiArICBTdGF0dXMgPSBHZXRGdW5jdGlvbmFsRGVzY3JpcHRvciAoDQo+ ICsgICAgICAgICAgICAgVXNiUm5kaXNEZXZpY2UtPkNvbmZpZywNCj4gKyAgICAgICAgICAgICBF VEhFUk5FVF9GVU5fREVTQ1JJUFRPUiwNCj4gKyAgICAgICAgICAgICBVc2JFdGhGdW5EZXNjcmlw dG9yDQo+ICsgICAgICAgICAgICAgKTsNCj4gKyAgcmV0dXJuIFN0YXR1czsNCj4gK30NCj4gKw0K PiArLyoqDQo+ICsgIFRoaXMgcmVxdWVzdCBzZXRzIHRoZSBFdGhlcm5ldCBkZXZpY2UgbXVsdGlj YXN0IGZpbHRlcnMgYXMgc3BlY2lmaWVkIGluIHRoZQ0KPiArICBzZXF1ZW50aWFsIGxpc3Qgb2Yg NDggYml0IEV0aGVybmV0IG11bHRpY2FzdCBhZGRyZXNzZXMuDQo+ICsNCj4gKyAgQHBhcmFtW2lu XSAgVGhpcyAgICAgICAgICAgICAgICAgICBBIHBvaW50ZXIgdG8gdGhlDQo+IEVES0lJX1VTQl9F VEhFUk5FVF9QUk9UT0NPTCBpbnN0YW5jZS4NCj4gKyAgQHBhcmFtW2luXSAgVmFsdWUgICAgICAg ICAgICAgICAgICBOdW1iZXIgb2YgZmlsdGVycy4NCj4gKyAgQHBhcmFtW2luXSAgTWNhc3RBZGRy ICAgICAgICAgICAgICBBIHBvaW50ZXIgdG8gdGhlIHZhbHVlIG9mIHRoZSBtdWx0aWNhc3QNCj4g YWRkcmVzc2VzLg0KPiArDQo+ICsgIEByZXR2YWwgRUZJX1NVQ0NFU1MgICAgICAgICAgICBUaGUg cmVxdWVzdCBleGVjdXRlZCBzdWNjZXNzZnVsbHkuDQo+ICsgIEByZXR2YWwgRUZJX1RJTUVPVVQg ICAgICAgICAgICBBIHRpbWVvdXQgb2NjdXJyZWQgZXhlY3V0aW5nIHRoZSByZXF1ZXN0Lg0KPiAr ICBAcmV0dmFsIEVGSV9ERVZJQ0VfRVJST1IgICAgICAgVGhlIHJlcXVlc3QgZmFpbGVkIGR1ZSB0 byBhIGRldmljZSBlcnJvci4NCj4gKyAgQHJldHZhbCBFRklfSU5WQUxJRF9QQVJBTUVURVIgIE9u ZSBvZiB0aGUgcGFyYW1ldGVycyBoYXMgYW4gaW52YWxpZA0KPiB2YWx1ZS4NCj4gKyAgQHJldHZh bCBFRklfVU5TVVBQT1JURUQgICAgICAgIE5vdCBzdXBwb3J0ZWQuDQo+ICsNCj4gKyoqLw0KPiAr RUZJX1NUQVRVUw0KPiArRUZJQVBJDQo+ICtTZXRVc2JSbmRpc01jYXN0RmlsdGVyICgNCj4gKyAg SU4gRURLSUlfVVNCX0VUSEVSTkVUX1BST1RPQ09MICAqVGhpcywNCj4gKyAgSU4gVUlOVDE2ICAg ICAgICAgICAgICAgICAgICAgICBWYWx1ZSwNCj4gKyAgSU4gVk9JRCAgICAgICAgICAgICAgICAg ICAgICAgICAqTWNhc3RBZGRyDQo+ICsgICkNCj4gK3sNCj4gKyAgRUZJX1NUQVRVUyAgICAgICAg ICAgICAgICAgICBTdGF0dXM7DQo+ICsgIEVGSV9VU0JfREVWSUNFX1JFUVVFU1QgICAgICAgUmVx dWVzdDsNCj4gKyAgVUlOVDMyICAgICAgICAgICAgICAgICAgICAgICBUcmFuc1N0YXR1czsNCj4g KyAgVVNCX0VUSEVSTkVUX0ZVTl9ERVNDUklQVE9SICBVc2JFdGhGdW5EZXNjcmlwdG9yOw0KPiAr ICBVU0JfUk5ESVNfREVWSUNFICAgICAgICAgICAgICpVc2JSbmRpc0RldmljZTsNCj4gKw0KPiAr ICBVc2JSbmRpc0RldmljZSA9IFVTQl9STkRJU19ERVZJQ0VfRlJPTV9USElTIChUaGlzKTsNCj4g Kw0KPiArICBTdGF0dXMgPSBUaGlzLT5Vc2JFdGhGdW5EZXNjcmlwdG9yIChUaGlzLCAmVXNiRXRo RnVuRGVzY3JpcHRvcik7DQo+ICsgIGlmIChFRklfRVJST1IgKFN0YXR1cykpIHsNCj4gKyAgICBy ZXR1cm4gU3RhdHVzOw0KPiArICB9DQo+ICsNCj4gKyAgaWYgKChVc2JFdGhGdW5EZXNjcmlwdG9y Lk51bWJlck1jRmlsdGVycyA8PCAxKSA9PSAwKSB7DQo+ICsgICAgcmV0dXJuIEVGSV9VTlNVUFBP UlRFRDsNCj4gKyAgfQ0KPiArDQo+ICsgIFJlcXVlc3QuUmVxdWVzdFR5cGUgPSBVU0JfRVRIRVJO RVRfU0VUX1JFUV9UWVBFOw0KPiArICBSZXF1ZXN0LlJlcXVlc3QgICAgID0gU0VUX0VUSF9NVUxU SUNBU1RfRklMVEVSU19SRVE7DQo+ICsgIFJlcXVlc3QuVmFsdWUgICAgICAgPSBWYWx1ZTsNCj4g KyAgUmVxdWVzdC5JbmRleCAgICAgICA9IFVzYlJuZGlzRGV2aWNlLT5OdW1PZkludGVyZmFjZTsN Cj4gKyAgUmVxdWVzdC5MZW5ndGggICAgICA9IFZhbHVlICogNjsNCj4gKw0KPiArICByZXR1cm4g VXNiUm5kaXNEZXZpY2UtPlVzYklvLT5Vc2JDb250cm9sVHJhbnNmZXIgKA0KPiArICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIFVzYlJuZGlzRGV2aWNlLT5Vc2JJbywNCj4gKyAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmUmVxdWVzdCwNCj4gKyAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBFZmlVc2JEYXRhT3V0LA0KPiArICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIFVTQl9FVEhFUk5FVF9UUkFOU0ZFUl9USU1FT1VULA0KPiArICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIE1jYXN0QWRkciwNCj4gKyAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBSZXF1ZXN0Lkxlbmd0aCwNCj4gKyAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAmVHJhbnNTdGF0dXMNCj4gKyAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICApOw0KPiArfQ0KPiArDQo+ICsvKioNCj4gKyAgVGhpcyByZXF1ZXN0IHNldHMg dXAgdGhlIHNwZWNpZmllZCBFdGhlcm5ldCBwb3dlciBtYW5hZ2VtZW50IHBhdHRlcm4gZmlsdGVy DQo+IGFzDQo+ICsgIGRlc2NyaWJlZCBpbiB0aGUgZGF0YSBzdHJ1Y3R1cmUuDQo+ICsNCj4gKyAg QHBhcmFtW2luXSAgVGhpcyAgICAgICAgICAgICAgICAgIEEgcG9pbnRlciB0byB0aGUNCj4gRURL SUlfVVNCX0VUSEVSTkVUX1BST1RPQ09MIGluc3RhbmNlLg0KPiArICBAcGFyYW1baW5dICBWYWx1 ZSAgICAgICAgICAgICAgICAgTnVtYmVyIG9mIGZpbHRlcnMuDQo+ICsgIEBwYXJhbVtpbl0gIExl bmd0aCAgICAgICAgICAgICAgICBTaXplIG9mIHRoZSBwb3dlciBtYW5hZ2VtZW50IHBhdHRlcm4g ZmlsdGVyDQo+IGRhdGEuDQo+ICsgIEBwYXJhbVtpbl0gIFBhdHRlcm5GaWx0ZXIgICAgICAgICBB IHBvaW50ZXIgdG8gdGhlIHBvd2VyIG1hbmFnZW1lbnQgcGF0dGVybg0KPiBmaWx0ZXIgc3RydWN0 dXJlLg0KPiArDQo+ICsgIEByZXR2YWwgRUZJX1NVQ0NFU1MgICAgICAgICAgICBUaGUgcmVxdWVz dCBleGVjdXRlZCBzdWNjZXNzZnVsbHkuDQo+ICsgIEByZXR2YWwgRUZJX1RJTUVPVVQgICAgICAg ICAgICBBIHRpbWVvdXQgb2NjdXJyZWQgZXhlY3V0aW5nIHRoZSByZXF1ZXN0Lg0KPiArICBAcmV0 dmFsIEVGSV9ERVZJQ0VfRVJST1IgICAgICAgVGhlIHJlcXVlc3QgZmFpbGVkIGR1ZSB0byBhIGRl dmljZSBlcnJvci4NCj4gKyAgQHJldHZhbCBFRklfSU5WQUxJRF9QQVJBTUVURVIgIE9uZSBvZiB0 aGUgcGFyYW1ldGVycyBoYXMgYW4gaW52YWxpZA0KPiB2YWx1ZS4NCj4gKyAgQHJldHZhbCBFRklf VU5TVVBQT1JURUQgICAgICAgIE5vdCBzdXBwb3J0ZWQuDQo+ICsNCj4gKyoqLw0KPiArRUZJX1NU QVRVUw0KPiArRUZJQVBJDQo+ICtTZXRVc2JSbmRpc1Bvd2VyRmlsdGVyICgNCj4gKyAgSU4gRURL SUlfVVNCX0VUSEVSTkVUX1BST1RPQ09MICAqVGhpcywNCj4gKyAgSU4gVUlOVDE2ICAgICAgICAg ICAgICAgICAgICAgICBWYWx1ZSwNCj4gKyAgSU4gVUlOVDE2ICAgICAgICAgICAgICAgICAgICAg ICBMZW5ndGgsDQo+ICsgIElOIFZPSUQgICAgICAgICAgICAgICAgICAgICAgICAgKlBhdHRlcm5G aWx0ZXINCj4gKyAgKQ0KPiArew0KPiArICBFRklfVVNCX0RFVklDRV9SRVFVRVNUICBSZXF1ZXN0 Ow0KPiArICBVSU5UMzIgICAgICAgICAgICAgICAgICBUcmFuc1N0YXR1czsNCj4gKyAgVVNCX1JO RElTX0RFVklDRSAgICAgICAgKlVzYlJuZGlzRGV2aWNlOw0KPiArDQo+ICsgIFVzYlJuZGlzRGV2 aWNlID0gVVNCX1JORElTX0RFVklDRV9GUk9NX1RISVMgKFRoaXMpOw0KPiArDQo+ICsgIFJlcXVl c3QuUmVxdWVzdFR5cGUgPSBVU0JfRVRIRVJORVRfU0VUX1JFUV9UWVBFOw0KPiArICBSZXF1ZXN0 LlJlcXVlc3QgICAgID0NCj4gU0VUX0VUSF9QT1dFUl9NQU5BR0VNRU5UX1BBVFRFUk5fRklMVEVS X1JFUTsNCj4gKyAgUmVxdWVzdC5WYWx1ZSAgICAgICA9IFZhbHVlOw0KPiArICBSZXF1ZXN0Lklu ZGV4ICAgICAgID0gVXNiUm5kaXNEZXZpY2UtPk51bU9mSW50ZXJmYWNlOw0KPiArICBSZXF1ZXN0 Lkxlbmd0aCAgICAgID0gTGVuZ3RoOw0KPiArDQo+ICsgIHJldHVybiBVc2JSbmRpc0RldmljZS0+ VXNiSW8tPlVzYkNvbnRyb2xUcmFuc2ZlciAoDQo+ICsgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgVXNiUm5kaXNEZXZpY2UtPlVzYklvLA0KPiArICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICZSZXF1ZXN0LA0KPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIEVmaVVzYkRhdGFPdXQsDQo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg VVNCX0VUSEVSTkVUX1RSQU5TRkVSX1RJTUVPVVQsDQo+ICsgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgUGF0dGVybkZpbHRlciwNCj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBMZW5ndGgsDQo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJlRy YW5zU3RhdHVzDQo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKTsNCj4gK30N Cj4gKw0KPiArLyoqDQo+ICsgIFRoaXMgcmVxdWVzdCByZXRyaWV2ZXMgdGhlIHN0YXR1cyBvZiB0 aGUgc3BlY2lmaWVkIEV0aGVybmV0IHBvd2VyDQo+IG1hbmFnZW1lbnQNCj4gKyAgcGF0dGVybiBm aWx0ZXIgZnJvbSB0aGUgZGV2aWNlLg0KPiArDQo+ICsgIEBwYXJhbVtpbl0gIFRoaXMgICAgICAg ICAgICAgICAgICAgQSBwb2ludGVyIHRvIHRoZQ0KPiBFREtJSV9VU0JfRVRIRVJORVRfUFJPVE9D T0wgaW5zdGFuY2UuDQo+ICsgIEBwYXJhbVtpbl0gIFZhbHVlICAgICAgICAgICAgICAgICAgVGhl IGZpbHRlciBudW1iZXIuDQo+ICsgIEBwYXJhbVtvdXRdIFBhdHRlcm5BY3RpdmUgICAgICAgICAg QSBwb2ludGVyIHRvIHRoZSBwYXR0ZXJuIGFjdGl2ZSBib29sZWFuLg0KPiArDQo+ICsgIEByZXR2 YWwgRUZJX1NVQ0NFU1MgICAgICAgICAgICBUaGUgcmVxdWVzdCBleGVjdXRlZCBzdWNjZXNzZnVs bHkuDQo+ICsgIEByZXR2YWwgRUZJX1RJTUVPVVQgICAgICAgICAgICBBIHRpbWVvdXQgb2NjdXJy ZWQgZXhlY3V0aW5nIHRoZSByZXF1ZXN0Lg0KPiArICBAcmV0dmFsIEVGSV9ERVZJQ0VfRVJST1Ig ICAgICAgVGhlIHJlcXVlc3QgZmFpbGVkIGR1ZSB0byBhIGRldmljZSBlcnJvci4NCj4gKyAgQHJl dHZhbCBFRklfSU5WQUxJRF9QQVJBTUVURVIgIE9uZSBvZiB0aGUgcGFyYW1ldGVycyBoYXMgYW4g aW52YWxpZA0KPiB2YWx1ZS4NCj4gKyAgQHJldHZhbCBFRklfVU5TVVBQT1JURUQgICAgICAgIE5v dCBzdXBwb3J0ZWQuDQo+ICsNCj4gKyoqLw0KPiArRUZJX1NUQVRVUw0KPiArRUZJQVBJDQo+ICtH ZXRVc2JSbmRpc1Bvd2VyRmlsdGVyICgNCj4gKyAgSU4gIEVES0lJX1VTQl9FVEhFUk5FVF9QUk9U T0NPTCAgKlRoaXMsDQo+ICsgIElOICBVSU5UMTYgICAgICAgICAgICAgICAgICAgICAgIFZhbHVl LA0KPiArICBPVVQgQk9PTEVBTiAgICAgICAgICAgICAgICAgICAgICAqUGF0dGVybkFjdGl2ZQ0K PiArICApDQo+ICt7DQo+ICsgIEVGSV9VU0JfREVWSUNFX1JFUVVFU1QgIFJlcXVlc3Q7DQo+ICsg IFVJTlQzMiAgICAgICAgICAgICAgICAgIFRyYW5zU3RhdHVzOw0KPiArICBVU0JfUk5ESVNfREVW SUNFICAgICAgICAqVXNiUm5kaXNEZXZpY2U7DQo+ICsNCj4gKyAgVXNiUm5kaXNEZXZpY2UgPSBV U0JfUk5ESVNfREVWSUNFX0ZST01fVEhJUyAoVGhpcyk7DQo+ICsNCj4gKyAgUmVxdWVzdC5SZXF1 ZXN0VHlwZSA9IFVTQl9FVEhFUk5FVF9HRVRfUkVRX1RZUEU7DQo+ICsgIFJlcXVlc3QuUmVxdWVz dCAgICAgPQ0KPiBHRVRfRVRIX1BPV0VSX01BTkFHRU1FTlRfUEFUVEVSTl9GSUxURVJfUkVROw0K PiArICBSZXF1ZXN0LlZhbHVlICAgICAgID0gVmFsdWU7DQo+ICsgIFJlcXVlc3QuSW5kZXggICAg ICAgPSBVc2JSbmRpc0RldmljZS0+TnVtT2ZJbnRlcmZhY2U7DQo+ICsgIFJlcXVlc3QuTGVuZ3Ro ICAgICAgPSBVU0JfRVRIX1BPV0VSX0ZJTFRFUl9MRU5HVEg7DQo+ICsNCj4gKyAgcmV0dXJuIFVz YlJuZGlzRGV2aWNlLT5Vc2JJby0+VXNiQ29udHJvbFRyYW5zZmVyICgNCj4gKyAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBVc2JSbmRpc0RldmljZS0+VXNiSW8sDQo+ICsgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgJlJlcXVlc3QsDQo+ICsgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgRWZpVXNiRGF0YUluLA0KPiArICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIFVTQl9FVEhFUk5FVF9UUkFOU0ZFUl9USU1FT1VULA0KPiArICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIFBhdHRlcm5BY3RpdmUsDQo+ICsgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgVVNCX0VUSF9QT1dFUl9GSUxURVJfTEVOR1RILA0KPiArICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZUcmFuc1N0YXR1cw0KPiArICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICk7DQo+ICt9DQo+ICsNCj4gKy8qKg0KPiArDQo+ICsg IENvbnZlcnRzIFBYRSBmaWx0ZXIgc2V0dGluZ3MgdG8gUk5ESVMgdmFsdWVzDQo+ICsNCj4gKyAg QHBhcmFtW2luXSAgVmFsdWUgICAgICBQWEUgZmlsdGVyIGRhdGEuDQo+ICsgIEBwYXJhbVtvdXRd IENkY0ZpbHRlciAgQSBwb2ludGVyIHRvIHRoZSBFdGhlcm5ldCBQYWNrZXQgRmlsdGVyIEJpdG1h cCB2YWx1ZQ0KPiBjb252ZXJ0ZWQgYnkgUFhFX09QRkxBR1MuDQo+ICsNCj4gKyoqLw0KPiArVk9J RA0KPiArQ29udmVydEZpbHRlciAoDQo+ICsgIElOICBVSU5UMTYgIFZhbHVlLA0KPiArICBPVVQg VUlOVDE2ICAqQ2RjRmlsdGVyDQo+ICsgICkNCj4gK3sNCj4gKyAgVUlOVDMyICAgICAgICAgICAg ICAgICBJbmRleDsNCj4gKyAgVUlOVDMyICAgICAgICAgICAgICAgICBDb3VudDsNCj4gKyAgc3Rh dGljIHN0cnVjdCBCSVRfTUFQICBUYWJsZVtdID0gew0KPiArICAgIHsgUFhFX09QRkxBR1NfUkVD RUlWRV9GSUxURVJfVU5JQ0FTVCwNCj4gTkRJU19QQUNLRVRfVFlQRV9ESVJFQ1RFRCAgICAgIH0s DQo+ICsgICAgeyBQWEVfT1BGTEFHU19SRUNFSVZFX0ZJTFRFUl9CUk9BRENBU1QsDQo+IE5ESVNf UEFDS0VUX1RZUEVfQlJPQURDQVNUICAgICB9LA0KPiArICAgIHsgUFhFX09QRkxBR1NfUkVDRUlW RV9GSUxURVJfRklMVEVSRURfTVVMVElDQVNULA0KPiBORElTX1BBQ0tFVF9UWVBFX01VTFRJQ0FT VCAgICAgfSwNCj4gKyAgICB7IFBYRV9PUEZMQUdTX1JFQ0VJVkVfRklMVEVSX1BST01JU0NVT1VT LA0KPiBORElTX1BBQ0tFVF9UWVBFX1BST01JU0NVT1VTICAgfSwNCj4gKyAgICB7IFBYRV9PUEZM QUdTX1JFQ0VJVkVfRklMVEVSX0FMTF9NVUxUSUNBU1QsDQo+IE5ESVNfUEFDS0VUX1RZUEVfQUxM X01VTFRJQ0FTVCB9LA0KPiArICB9Ow0KPiArDQo+ICsgIENvdW50ID0gc2l6ZW9mIChUYWJsZSkv c2l6ZW9mIChUYWJsZVswXSk7DQo+ICsNCj4gKyAgZm9yIChJbmRleCA9IDA7IChUYWJsZVtJbmRl eF0uU3JjICE9IDApICYmIChJbmRleCA8IENvdW50KTsgSW5kZXgrKykgew0KPiArICAgIGlmIChU YWJsZVtJbmRleF0uU3JjICYgVmFsdWUpIHsNCj4gKyAgICAgICpDZGNGaWx0ZXIgfD0gVGFibGVb SW5kZXhdLkRzdDsNCj4gKyAgICB9DQo+ICsgIH0NCj4gK30NCj4gKw0KPiArLyoqDQo+ICsNCj4g KyAgVXBkYXRlcyBGaWx0ZXIgc2V0dGluZ3Mgb24gdGhlIGRldmljZS4NCj4gKw0KPiArICBAcGFy YW1baW5dICBDZGIgIEEgcG9pbnRlciB0byB0aGUgY29tbWFuZCBkZXNjcmlwdG9yIGJsb2NrLg0K PiArICBAcGFyYW1baW5dICBOaWMgIEEgcG9pbnRlciB0byB0aGUgTmV0d29yayBpbnRlcmZhY2Ug Y29udHJvbGxlciBkYXRhLg0KPiArDQo+ICsgIEByZXR2YWwgRUZJX1NUQVRVUw0KPiArDQo+ICsq Ki8NCj4gK0VGSV9TVEFUVVMNCj4gK0VGSUFQSQ0KPiArUm5kaXNVbmRpUmVjZWl2ZUZpbHRlciAo DQo+ICsgIElOICBQWEVfQ0RCICAgKkNkYiwNCj4gKyAgSU4gIE5JQ19EQVRBICAqTmljDQo+ICsg ICkNCj4gK3sNCj4gKyAgRUZJX1NUQVRVUyAgICAgICAgICAgICAgICAgICBTdGF0dXM7DQo+ICsg IFVJTlQ4ICAgICAgICAgICAgICAgICAgICAgICAgKk1jYXN0TGlzdDsNCj4gKyAgVUlOVDggICAg ICAgICAgICAgICAgICAgICAgICBDb3VudDsNCj4gKyAgVUlOVDggICAgICAgICAgICAgICAgICAg ICAgICBJbmRleDE7DQo+ICsgIFVJTlQ4ICAgICAgICAgICAgICAgICAgICAgICAgSW5kZXgyOw0K PiArICBVSU5UNjQgICAgICAgICAgICAgICAgICAgICAgIENwYkFkZHI7DQo+ICsgIFVJTlQzMiAg ICAgICAgICAgICAgICAgICAgICAgQ3BiU2l6ZTsNCj4gKyAgVUlOVDE2ICAgICAgICAgICAgICAg ICAgICAgICBTZXRGaWx0ZXI7DQo+ICsgIFBYRV9DUEJfUkVDRUlWRV9GSUxURVJTICAgICAgKkNw YjsNCj4gKyAgVVNCX0VUSEVSTkVUX0ZVTl9ERVNDUklQVE9SICBVc2JFdGhGdW5EZXNjcmlwdG9y Ow0KPiArDQo+ICsgIENvdW50ICAgICA9IDA7DQo+ICsgIENwYkFkZHIgICA9IENkYi0+Q1BCYWRk cjsNCj4gKyAgQ3BiU2l6ZSAgID0gQ2RiLT5DUEJzaXplOw0KPiArICBTZXRGaWx0ZXIgPSAoVUlO VDE2KShDZGItPk9wRmxhZ3MgJiAweDFGKTsNCj4gKyAgQ3BiICAgICAgID0gKFBYRV9DUEJfUkVD RUlWRV9GSUxURVJTICopKFVJTlROKUNwYkFkZHI7DQo+ICsNCj4gKyAgLy8gVGhlIENwYiBjb3Vs ZCBiZSBOVUxMLihyZWY6UFhFX0NQQkFERFJfTk9UX1VTRUQpDQo+ICsgIE5pYy0+UnhGaWx0ZXIg PSAoVUlOVDgpU2V0RmlsdGVyOw0KPiArDQo+ICsgIGlmICgoKFNldEZpbHRlciAmIFBYRV9PUEZM QUdTX1JFQ0VJVkVfRklMVEVSX0ZJTFRFUkVEX01VTFRJQ0FTVCkgIT0gMCkNCj4gfHwgKENwYiAh PSBOVUxMKSkgew0KPiArICAgIGlmIChDcGIgIT0gTlVMTCkgew0KPiArICAgICAgTmljLT5NY2Fz dENvdW50ID0gKFVJTlQ4KShDcGJTaXplIC8gUFhFX01BQ19MRU5HVEgpOw0KPiArICAgICAgQ29w eU1lbSAoJk5pYy0+TWNhc3RMaXN0LCBDcGIsIE5pYy0+TWNhc3RDb3VudCk7DQo+ICsgICAgfSBl bHNlIHsNCj4gKyAgICAgIE5pYy0+TWNhc3RDb3VudCA9IDA7DQo+ICsgICAgfQ0KPiArDQo+ICsg ICAgTmljLT5Vc2JFdGgtPlVzYkV0aEZ1bkRlc2NyaXB0b3IgKE5pYy0+VXNiRXRoLCAmVXNiRXRo RnVuRGVzY3JpcHRvcik7DQo+ICsgICAgaWYgKChVc2JFdGhGdW5EZXNjcmlwdG9yLk51bWJlck1j RmlsdGVycyA8PCAxKSA9PSAwKSB7DQo+ICsgICAgICBOaWMtPlJ4RmlsdGVyIHw9IFBYRV9PUEZM QUdTX1JFQ0VJVkVfRklMVEVSX0FMTF9NVUxUSUNBU1Q7DQo+ICsgICAgICBERUJVRyAoKERFQlVH X0lORk8sICJTZXRVc2JFdGhQYWNrZXRGaWx0ZXIgTmljICVseCBOaWMtPlVzYkV0aCAlbHggIiwN Cj4gTmljLCBOaWMtPlVzYkV0aCkpOw0KPiArICAgICAgTmljLT5Vc2JFdGgtPlNldFVzYkV0aFBh Y2tldEZpbHRlciAoTmljLT5Vc2JFdGgsIE5pYy0+UnhGaWx0ZXIpOw0KPiArICAgIH0gZWxzZSB7 DQo+ICsgICAgICBTdGF0dXMgPSBnQlMtPkFsbG9jYXRlUG9vbCAoRWZpQm9vdFNlcnZpY2VzRGF0 YSwgTmljLT5NY2FzdENvdW50ICogNiwNCj4gKFZPSUQgKiopJk1jYXN0TGlzdCk7DQo+ICsgICAg ICBpZiAoRUZJX0VSUk9SIChTdGF0dXMpKSB7DQo+ICsgICAgICAgIHJldHVybiBQWEVfU1RBVENP REVfSU5WQUxJRF9QQVJBTUVURVI7DQo+ICsgICAgICB9DQo+ICsNCj4gKyAgICAgIGlmIChDcGIg IT0gTlVMTCkgew0KPiArICAgICAgICBmb3IgKEluZGV4MSA9IDA7IEluZGV4MSA8IE5pYy0+TWNh c3RDb3VudDsgSW5kZXgxKyspIHsNCj4gKyAgICAgICAgICBmb3IgKEluZGV4MiA9IDA7IEluZGV4 MiA8IDY7IEluZGV4MisrKSB7DQo+ICsgICAgICAgICAgICBNY2FzdExpc3RbQ291bnQrK10gPSBD cGItPk1DYXN0TGlzdFtJbmRleDFdW0luZGV4Ml07DQo+ICsgICAgICAgICAgfQ0KPiArICAgICAg ICB9DQo+ICsgICAgICB9DQo+ICsNCj4gKyAgICAgIE5pYy0+UnhGaWx0ZXIgfD0gUFhFX09QRkxB R1NfUkVDRUlWRV9GSUxURVJfRklMVEVSRURfTVVMVElDQVNUOw0KPiArICAgICAgaWYgKENwYiAh PSBOVUxMKSB7DQo+ICsgICAgICAgIE5pYy0+VXNiRXRoLT5TZXRVc2JFdGhNY2FzdEZpbHRlciAo TmljLT5Vc2JFdGgsIE5pYy0+TWNhc3RDb3VudCwNCj4gTWNhc3RMaXN0KTsNCj4gKyAgICAgIH0N Cj4gKw0KPiArICAgICAgTmljLT5Vc2JFdGgtPlNldFVzYkV0aFBhY2tldEZpbHRlciAoTmljLT5V c2JFdGgsIE5pYy0+UnhGaWx0ZXIpOw0KPiArICAgICAgRnJlZVBvb2wgKE1jYXN0TGlzdCk7DQo+ ICsgICAgfQ0KPiArICB9DQo+ICsNCj4gKyAgcmV0dXJuIEVGSV9TVUNDRVNTOw0KPiArfQ0KPiAr DQo+ICsvKioNCj4gKyAgVGhpcyByZXF1ZXN0IGlzIHVzZWQgdG8gY29uZmlndXJlIGRldmljZSBF dGhlcm5ldCBwYWNrZXQgZmlsdGVyIHNldHRpbmdzLg0KPiArDQo+ICsgIEBwYXJhbVtpbl0gIFRo aXMgICAgICAgICAgICAgIEEgcG9pbnRlciB0byB0aGUgRURLSUlfVVNCX0VUSEVSTkVUX1BST1RP Q09MDQo+IGluc3RhbmNlLg0KPiArICBAcGFyYW1baW5dICBWYWx1ZSAgICAgICAgICAgICBQYWNr ZXQgRmlsdGVyIEJpdG1hcC4NCj4gKw0KPiArICBAcmV0dmFsIEVGSV9TVUNDRVNTICAgICAgICAg ICBUaGUgcmVxdWVzdCBleGVjdXRlZCBzdWNjZXNzZnVsbHkuDQo+ICsgIEByZXR2YWwgRUZJX1RJ TUVPVVQgICAgICAgICAgIEEgdGltZW91dCBvY2N1cnJlZCBleGVjdXRpbmcgdGhlIHJlcXVlc3Qu DQo+ICsgIEByZXR2YWwgRUZJX0RFVklDRV9FUlJPUiAgICAgIFRoZSByZXF1ZXN0IGZhaWxlZCBk dWUgdG8gYSBkZXZpY2UgZXJyb3IuDQo+ICsgIEByZXR2YWwgRUZJX0lOVkFMSURfUEFSQU1FVEVS IE9uZSBvZiB0aGUgcGFyYW1ldGVycyBoYXMgYW4gaW52YWxpZA0KPiB2YWx1ZS4NCj4gKyAgQHJl dHZhbCBFRklfVU5TVVBQT1JURUQgICAgICAgTm90IHN1cHBvcnRlZC4NCj4gKw0KPiArKiovDQo+ ICtFRklfU1RBVFVTDQo+ICtFRklBUEkNCj4gK1NldFVzYlJuZGlzUGFja2V0RmlsdGVyICgNCj4g KyAgSU4gRURLSUlfVVNCX0VUSEVSTkVUX1BST1RPQ09MICAqVGhpcywNCj4gKyAgSU4gVUlOVDE2 ICAgICAgICAgICAgICAgICAgICAgICBWYWx1ZQ0KPiArICApDQo+ICt7DQo+ICsgIHJldHVybiBF RklfU1VDQ0VTUzsNCj4gK30NCj4gKw0KPiArLyoqDQo+ICsgIFRoaXMgcmVxdWVzdCBpcyB1c2Vk IHRvIHJldHJpZXZlIGEgc3RhdGlzdGljIGJhc2VkIG9uIHRoZSBmZWF0dXJlIHNlbGVjdG9yLg0K PiArDQo+ICsgIEBwYXJhbVtpbl0gIFRoaXMgICAgICAgICAgICAgICAgICBBIHBvaW50ZXIgdG8g dGhlDQo+IEVES0lJX1VTQl9FVEhFUk5FVF9QUk9UT0NPTCBpbnN0YW5jZS4NCj4gKyAgQHBhcmFt W2luXSAgRmVhdHVyZVNlbGVjdG9yICAgICAgIFZhbHVlIG9mIHRoZSBmZWF0dXJlIHNlbGVjdG9y Lg0KPiArICBAcGFyYW1bb3V0XSBTdGF0aXN0aWMgICAgICAgICAgICAgQSBwb2ludGVyIHRvIHRo ZSAzMiBiaXQgdW5zaWduZWQgaW50ZWdlci4NCj4gKw0KPiArICBAcmV0dmFsIEVGSV9TVUNDRVNT ICAgICAgICAgICBUaGUgcmVxdWVzdCBleGVjdXRlZCBzdWNjZXNzZnVsbHkuDQo+ICsgIEByZXR2 YWwgRUZJX1RJTUVPVVQgICAgICAgICAgIEEgdGltZW91dCBvY2N1cnJlZCBleGVjdXRpbmcgdGhl IHJlcXVlc3QuDQo+ICsgIEByZXR2YWwgRUZJX0RFVklDRV9FUlJPUiAgICAgIFRoZSByZXF1ZXN0 IGZhaWxlZCBkdWUgdG8gYSBkZXZpY2UgZXJyb3IuDQo+ICsgIEByZXR2YWwgRUZJX0lOVkFMSURf UEFSQU1FVEVSIE9uZSBvZiB0aGUgcGFyYW1ldGVycyBoYXMgYW4gaW52YWxpZA0KPiB2YWx1ZS4N Cj4gKyAgQHJldHZhbCBFRklfVU5TVVBQT1JURUQgICAgICAgTm90IHN1cHBvcnRlZC4NCj4gKw0K PiArKiovDQo+ICtFRklfU1RBVFVTDQo+ICtFRklBUEkNCj4gK0dldFJuZGlzU3RhdGlzdGljICgN Cj4gKyAgSU4gIEVES0lJX1VTQl9FVEhFUk5FVF9QUk9UT0NPTCAgKlRoaXMsDQo+ICsgIElOICBV SU5UMTYgICAgICAgICAgICAgICAgICAgICAgIEZlYXR1cmVTZWxlY3RvciwNCj4gKyAgT1VUIFZP SUQgICAgICAgICAgICAgICAgICAgICAgICAgKlN0YXRpc3RpYw0KPiArICApDQo+ICt7DQo+ICsg IHJldHVybiBFRklfU1VDQ0VTUzsNCj4gK30NCj4gKw0KPiArLyoqDQo+ICsgIFRoaXMgZnVuY3Rp b24gaXMgY2FsbGVkIHdoZW4gVW5kaVN0YXJ0IGlzIGludm9rZWQuDQo+ICsNCj4gKyAgQHBhcmFt W2luXSAgQ2RiICBBIHBvaW50ZXIgdG8gdGhlIGNvbW1hbmQgZGVzY3JpcHRvciBibG9jay4NCj4g KyAgQHBhcmFtW2luXSAgTmljICBBIHBvaW50ZXIgdG8gdGhlIE5ldHdvcmsgaW50ZXJmYWNlIGNv bnRyb2xsZXIgZGF0YS4NCj4gKw0KPiArICBAcmV0dmFsIEVGSV9TVUNDRVNTICAgICBUaGUgcmVx dWVzdCBleGVjdXRlZCBzdWNjZXNzZnVsbHkuDQo+ICsNCj4gKyoqLw0KPiArRUZJX1NUQVRVUw0K PiArRUZJQVBJDQo+ICtSbmRpc1VuZGlTdGFydCAoDQo+ICsgIElOICBQWEVfQ0RCICAgKkNkYiwN Cj4gKyAgSU4gIE5JQ19EQVRBICAqTmljDQo+ICsgICkNCj4gK3sNCj4gKyAgRUZJX1NUQVRVUyAg U3RhdHVzOw0KPiArDQo+ICsgIERFQlVHICgoREVCVUdfSU5GTywgIlJuZGlzVW5kaVN0YXJ0IE5p YyAlbHggQ2RiICVseCBOaWMgU3RhdGUgJXhcbiIsIE5pYywNCj4gQ2RiLCBOaWMtPlN0YXRlKSk7 DQo+ICsNCj4gKyAgLy8gSXNzdWUgUm5kaXMgUmVzZXQgYW5kIGJyaW5nIHRoZSBkZXZpY2UgdG8g Uk5ESVNfQlVTX0lOSVRJQUxJWkVEIHN0YXRlDQo+ICsgIFN0YXR1cyA9IFJuZGlzVW5kaVJlc2V0 IChDZGIsIE5pYyk7DQo+ICsgIGlmIChFRklfRVJST1IgKFN0YXR1cykpIHsNCj4gKyAgICBSbmRp c1VuZGlSZXNldCAoQ2RiLCBOaWMpOw0KPiArICB9DQo+ICsNCj4gKyAgU3RhdHVzID0gUm5kaXNV bmRpSW5pdGlhbGl6ZSAoQ2RiLCBOaWMpOw0KPiArICBpZiAoRUZJX0VSUk9SIChTdGF0dXMpKSB7 DQo+ICsgICAgUm5kaXNVbmRpSW5pdGlhbGl6ZSAoQ2RiLCBOaWMpOw0KPiArICB9DQo+ICsNCj4g KyAgUm5kaXNVbmRpU2h1dGRvd24gKENkYiwgTmljKTsNCj4gKw0KPiArICByZXR1cm4gRUZJX1NV Q0NFU1M7DQo+ICt9DQo+ICsNCj4gKy8qKg0KPiArICBUaGlzIGZ1bmN0aW9uIGlzIGNhbGxlZCB3 aGVuIFVuZGlzdG9wIGlzIGludm9rZWQuDQo+ICsNCj4gKyAgQHBhcmFtW2luXSAgQ2RiICBBIHBv aW50ZXIgdG8gdGhlIGNvbW1hbmQgZGVzY3JpcHRvciBibG9jay4NCj4gKyAgQHBhcmFtW2luXSAg TmljICBBIHBvaW50ZXIgdG8gdGhlIE5ldHdvcmsgaW50ZXJmYWNlIGNvbnRyb2xsZXIgZGF0YS4N Cj4gKw0KPiArICBAcmV0dmFsIEVGSV9TVUNDRVNTICAgICBUaGUgcmVxdWVzdCBleGVjdXRlZCBz dWNjZXNzZnVsbHkuDQo+ICsqKi8NCj4gK0VGSV9TVEFUVVMNCj4gK0VGSUFQSQ0KPiArUm5kaXNV bmRpU3RvcCAoDQo+ICsgIElOICBQWEVfQ0RCICAgKkNkYiwNCj4gKyAgSU4gIE5JQ19EQVRBICAq TmljDQo+ICsgICkNCj4gK3sNCj4gKyAgREVCVUcgKChERUJVR19JTkZPLCAiUm5kaXNVbmRpU3Rv cCBTdGF0ZSAleFxuIiwgTmljLT5TdGF0ZSkpOw0KPiArICByZXR1cm4gRUZJX1NVQ0NFU1M7DQo+ ICt9DQo+ICsNCj4gKy8qKg0KPiArICBUaGlzIGZ1bmN0aW9uIGlzIGNhbGxlZCB3aGVuIFVuZGlH ZXRJbml0SW5mbyBpcyBpbnZva2VkLg0KPiArDQo+ICsgIEBwYXJhbVtpbl0gIENkYiAgQSBwb2lu dGVyIHRvIHRoZSBjb21tYW5kIGRlc2NyaXB0b3IgYmxvY2suDQo+ICsgIEBwYXJhbVtpbl0gIE5p YyAgQSBwb2ludGVyIHRvIHRoZSBOZXR3b3JrIGludGVyZmFjZSBjb250cm9sbGVyIGRhdGEuDQo+ ICsNCj4gKyAgQHJldHZhbCBFRklfU1VDQ0VTUyAgICAgVGhlIHJlcXVlc3QgZXhlY3V0ZWQgc3Vj Y2Vzc2Z1bGx5Lg0KPiArDQo+ICsqKi8NCj4gK0VGSV9TVEFUVVMNCj4gK0VGSUFQSQ0KPiArUm5k aXNVbmRpR2V0SW5pdEluZm8gKA0KPiArICBJTiAgUFhFX0NEQiAgICpDZGIsDQo+ICsgIElOICBO SUNfREFUQSAgKk5pYw0KPiArICApDQo+ICt7DQo+ICsgIEVES0lJX1VTQl9FVEhFUk5FVF9QUk9U T0NPTCAgKlVzYkV0aERldmljZTsNCj4gKyAgVVNCX1JORElTX0RFVklDRSAgICAgICAgICAgICAq VXNiUm5kaXNEZXZpY2U7DQo+ICsgIFBYRV9EQl9HRVRfSU5JVF9JTkZPICAgICAgICAgKkRiOw0K PiArDQo+ICsgIERFQlVHICgoREVCVUdfSU5GTywgIlJuZGlzVW5kaUdldEluaXRJbmZvXG4iKSk7 DQo+ICsNCj4gKyAgVXNiRXRoRGV2aWNlICAgPSBOaWMtPlVzYkV0aDsNCj4gKyAgVXNiUm5kaXNE ZXZpY2UgPSBVU0JfUk5ESVNfREVWSUNFX0ZST01fVEhJUyAoVXNiRXRoRGV2aWNlKTsNCj4gKw0K PiArICBEYiA9IChQWEVfREJfR0VUX0lOSVRfSU5GTyAqKShVSU5UTilDZGItPkRCYWRkcjsNCj4g Kw0KPiArICBEYi0+RnJhbWVEYXRhTGVuID0gVXNiUm5kaXNEZXZpY2UtPk1heFRyYW5zZmVyU2l6 ZSAtIHNpemVvZg0KPiAoUkVNT1RFX05ESVNfUEFDS0VUX01TRykgLSBQWEVfTUFDX0hFQURFUl9M RU5fRVRIRVI7DQo+ICsgIC8vIExpbWl0IE1heCBNVFUgc2l6ZSB0byAxNTAwIGJ5dGVzIGFzIFJO RElTIHNwZWMuDQo+ICsgIGlmIChEYi0+RnJhbWVEYXRhTGVuID4gUFhFX01BWF9UWFJYX1VOSVRf RVRIRVIpIHsNCj4gKyAgICBEYi0+RnJhbWVEYXRhTGVuID0gUFhFX01BWF9UWFJYX1VOSVRfRVRI RVI7DQo+ICsgIH0NCj4gKw0KPiArICBERUJVRyAoKERFQlVHX0lORk8sICJEYi0+RnJhbWVEYXRh TGVuICV4XG4iLCBEYi0+RnJhbWVEYXRhTGVuKSk7DQo+ICsNCj4gKyAgcmV0dXJuIEVGSV9TVUND RVNTOw0KPiArfQ0KPiArDQo+ICsvKioNCj4gKyAgVGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQgd2hl biBSbmRpc1VuZGlHZXRDb25maWdJbmZvIGlzIGludm9rZWQuDQo+ICsNCj4gKyAgQHBhcmFtW2lu XSAgQ2RiICBBIHBvaW50ZXIgdG8gdGhlIGNvbW1hbmQgZGVzY3JpcHRvciBibG9jay4NCj4gKyAg QHBhcmFtW2luXSAgTmljICBBIHBvaW50ZXIgdG8gdGhlIE5ldHdvcmsgaW50ZXJmYWNlIGNvbnRy b2xsZXIgZGF0YS4NCj4gKw0KPiArICBAcmV0dmFsIEVGSV9TVUNDRVNTICAgICBUaGUgcmVxdWVz dCBleGVjdXRlZCBzdWNjZXNzZnVsbHkuDQo+ICsNCj4gKyoqLw0KPiArRUZJX1NUQVRVUw0KPiAr RUZJQVBJDQo+ICtSbmRpc1VuZGlHZXRDb25maWdJbmZvICgNCj4gKyAgSU4gIFBYRV9DREIgICAq Q2RiLA0KPiArICBJTiAgTklDX0RBVEEgICpOaWMNCj4gKyAgKQ0KPiArew0KPiArICBERUJVRyAo KERFQlVHX0lORk8sICJSbmRpc1VuZGlHZXRDb25maWdJbmZvXG4iKSk7DQo+ICsgIHJldHVybiBF RklfU1VDQ0VTUzsNCj4gK30NCj4gKw0KPiArLyoqDQo+ICsgIFRoaXMgZnVuY3Rpb24gaXMgY2Fs bGVkIHdoZW4gVW5kaUluaXRpYWxpemUgaXMgaW52b2tlZC4NCj4gKw0KPiArICBAcGFyYW1baW5d ICBDZGIgIEEgcG9pbnRlciB0byB0aGUgY29tbWFuZCBkZXNjcmlwdG9yIGJsb2NrLg0KPiArICBA cGFyYW1baW5dICBOaWMgIEEgcG9pbnRlciB0byB0aGUgTmV0d29yayBpbnRlcmZhY2UgY29udHJv bGxlciBkYXRhLg0KPiArDQo+ICsgIEByZXR2YWwgRUZJX1NVQ0NFU1MgICAgICAgICAgIFRoZSBy ZXF1ZXN0IGV4ZWN1dGVkIHN1Y2Nlc3NmdWxseS4NCj4gKyAgQHJldHZhbCBFRklfVU5TVVBQT1JU RUQgICAgICAgTm90IHN1cHBvcnRlZC4NCj4gKw0KPiArKiovDQo+ICtFRklfU1RBVFVTDQo+ICtF RklBUEkNCj4gK1JuZGlzVW5kaUluaXRpYWxpemUgKA0KPiArICBJTiAgUFhFX0NEQiAgICpDZGIs DQo+ICsgIElOICBOSUNfREFUQSAgKk5pYw0KPiArICApDQo+ICt7DQo+ICsgIEVES0lJX1VTQl9F VEhFUk5FVF9QUk9UT0NPTCAgICpVc2JFdGhEcml2ZXI7DQo+ICsgIFVTQl9STkRJU19ERVZJQ0Ug ICAgICAgICAgICAgICpVc2JSbmRpc0RldmljZTsNCj4gKyAgUkVNT1RFX05ESVNfSU5JVElBTEla RV9NU0cgICAgUm5kaXNJbml0TXNnOw0KPiArICBSRU1PVEVfTkRJU19JTklUSUFMSVpFX0NNUExU ICBSbmRpc0luaXRNc2dDbXBsdDsNCj4gKyAgRUZJX1NUQVRVUyAgICAgICAgICAgICAgICAgICAg U3RhdHVzOw0KPiArDQo+ICsgIERFQlVHICgoREVCVUdfSU5GTywgIlJuZGlzVW5kaUluaXRpYWxp emVcbiIpKTsNCj4gKw0KPiArICBVc2JFdGhEcml2ZXIgICA9IE5pYy0+VXNiRXRoOw0KPiArICBV c2JSbmRpc0RldmljZSA9IFVTQl9STkRJU19ERVZJQ0VfRlJPTV9USElTIChVc2JFdGhEcml2ZXIp Ow0KPiArDQo+ICsgIFplcm9NZW0gKCZSbmRpc0luaXRNc2csIHNpemVvZiAoUkVNT1RFX05ESVNf SU5JVElBTElaRV9NU0cpKTsNCj4gKyAgWmVyb01lbSAoJlJuZGlzSW5pdE1zZ0NtcGx0LCBzaXpl b2YgKFJFTU9URV9ORElTX0lOSVRJQUxJWkVfQ01QTFQpKTsNCj4gKw0KPiArICBSbmRpc0luaXRN c2cuTWVzc2FnZVR5cGUgICAgID0gUk5ESVNfSU5JVElBTElaRV9NU0c7DQo+ICsgIFJuZGlzSW5p dE1zZy5NZXNzYWdlTGVuZ3RoICAgPSBzaXplb2YgKFJFTU9URV9ORElTX0lOSVRJQUxJWkVfTVNH KTsNCj4gKyAgUm5kaXNJbml0TXNnLlJlcXVlc3RJRCAgICAgICA9IFVzYlJuZGlzRGV2aWNlLT5S ZXF1ZXN0SWQ7DQo+ICsgIFJuZGlzSW5pdE1zZy5NYWpvclZlcnNpb24gICAgPSBSTkRJU19NQUpP Ul9WRVJTSU9OOw0KPiArICBSbmRpc0luaXRNc2cuTWlub3JWZXJzaW9uICAgID0gUk5ESVNfTUlO T1JfVkVSU0lPTjsNCj4gKyAgUm5kaXNJbml0TXNnLk1heFRyYW5zZmVyU2l6ZSA9IFJORElTX01B WF9UUkFOU0ZFUl9TSVpFOw0KPiArDQo+ICsgIFJuZGlzSW5pdE1zZ0NtcGx0Lk1lc3NhZ2VUeXBl ICAgPSBSTkRJU19JTklUSUFMSVpFX0NNUExUOw0KPiArICBSbmRpc0luaXRNc2dDbXBsdC5NZXNz YWdlTGVuZ3RoID0gc2l6ZW9mDQo+IChSRU1PVEVfTkRJU19JTklUSUFMSVpFX0NNUExUKTsNCj4g Kw0KPiArICBTdGF0dXMgPSBSbmRpc0NvbnRyb2xNc2cgKFVzYlJuZGlzRGV2aWNlLCAoUkVNT1RF X05ESVNfTVNHX0hFQURFUg0KPiAqKSZSbmRpc0luaXRNc2csIChSRU1PVEVfTkRJU19NU0dfSEVB REVSICopJlJuZGlzSW5pdE1zZ0NtcGx0KTsNCj4gKw0KPiArICBVc2JSbmRpc0RldmljZS0+UmVx dWVzdElkKys7DQo+ICsNCj4gKyAgaWYgKEVGSV9FUlJPUiAoU3RhdHVzKSB8fCAoUm5kaXNJbml0 TXNnQ21wbHQuU3RhdHVzICYgMHg4MDAwMDAwMCkpIHsNCj4gKyAgICByZXR1cm4gU3RhdHVzOw0K PiArICB9DQo+ICsNCj4gKyAgLy8gT25seSBXaXJlZCBNZWRpdW0gaXMgc3VwcG9ydGVkDQo+ICsg IGlmIChSbmRpc0luaXRNc2dDbXBsdC5NZWRpdW0pIHsNCj4gKyAgICByZXR1cm4gRUZJX1VOU1VQ UE9SVEVEOw0KPiArICB9DQo+ICsNCj4gKyAgVXNiUm5kaXNEZXZpY2UtPk1lZGl1bSAgICAgICAg ICAgICAgICA9IFJuZGlzSW5pdE1zZ0NtcGx0Lk1lZGl1bTsNCj4gKyAgVXNiUm5kaXNEZXZpY2Ut Pk1heFBhY2tldHNQZXJUcmFuc2ZlciA9DQo+IFJuZGlzSW5pdE1zZ0NtcGx0Lk1heFBhY2tldHNQ ZXJUcmFuc2ZlcjsNCj4gKyAgVXNiUm5kaXNEZXZpY2UtPk1heFRyYW5zZmVyU2l6ZSAgICAgICA9 IFJuZGlzSW5pdE1zZ0NtcGx0Lk1heFRyYW5zZmVyU2l6ZTsNCj4gKyAgVXNiUm5kaXNEZXZpY2Ut PlBhY2tldEFsaWdubWVudEZhY3RvciA9DQo+IFJuZGlzSW5pdE1zZ0NtcGx0LlBhY2tldEFsaWdu bWVudEZhY3RvcjsNCj4gKw0KPiArICBERUJVRyAoKERFQlVHX0lORk8sICJNZWRpdW0gOiAleCBc biIsIFJuZGlzSW5pdE1zZ0NtcGx0Lk1lZGl1bSkpOw0KPiArICBERUJVRyAoKERFQlVHX0lORk8s ICJNYXhQYWNrZXRzUGVyVHJhbnNmZXIgOiAleCBcbiIsDQo+IFJuZGlzSW5pdE1zZ0NtcGx0Lk1h eFBhY2tldHNQZXJUcmFuc2ZlcikpOw0KPiArICBERUJVRyAoKERFQlVHX0lORk8sICJNYXhUcmFu c2ZlclNpemUgOiAleFxuIiwNCj4gUm5kaXNJbml0TXNnQ21wbHQuTWF4VHJhbnNmZXJTaXplKSk7 DQo+ICsgIERFQlVHICgoREVCVUdfSU5GTywgIlBhY2tldEFsaWdubWVudEZhY3RvciA6ICV4XG4i LA0KPiBSbmRpc0luaXRNc2dDbXBsdC5QYWNrZXRBbGlnbm1lbnRGYWN0b3IpKTsNCj4gKw0KPiAr ICByZXR1cm4gU3RhdHVzOw0KPiArfQ0KPiArDQo+ICsvKioNCj4gKyAgVGhpcyBmdW5jdGlvbiBp cyBjYWxsZWQgd2hlbiBVbmRpUmVzZXQgaXMgaW52b2tlZC4NCj4gKw0KPiArICBAcGFyYW1baW5d ICBDZGIgIEEgcG9pbnRlciB0byB0aGUgY29tbWFuZCBkZXNjcmlwdG9yIGJsb2NrLg0KPiArICBA cGFyYW1baW5dICBOaWMgIEEgcG9pbnRlciB0byB0aGUgTmV0d29yayBpbnRlcmZhY2UgY29udHJv bGxlciBkYXRhLg0KPiArDQo+ICsgIEByZXR2YWwgRUZJX1NVQ0NFU1MgICAgICAgICAgIFRoZSBy ZXF1ZXN0IGV4ZWN1dGVkIHN1Y2Nlc3NmdWxseS4NCj4gKyAgQHJldHZhbCBFRklfREVWSUNFX0VS Uk9SICAgICAgVGhlIHJlcXVlc3QgZmFpbGVkIGR1ZSB0byBhIGRldmljZSBlcnJvci4NCj4gKw0K PiArKiovDQo+ICtFRklfU1RBVFVTDQo+ICtFRklBUEkNCj4gK1JuZGlzVW5kaVJlc2V0ICgNCj4g KyAgSU4gIFBYRV9DREIgICAqQ2RiLA0KPiArICBJTiAgTklDX0RBVEEgICpOaWMNCj4gKyAgKQ0K PiArew0KPiArICBFREtJSV9VU0JfRVRIRVJORVRfUFJPVE9DT0wgICpVc2JFdGhEcml2ZXI7DQo+ ICsgIFVTQl9STkRJU19ERVZJQ0UgICAgICAgICAgICAgKlVzYlJuZGlzRGV2aWNlOw0KPiArICBS RU1PVEVfTkRJU19SRVNFVF9NU0cgICAgICAgIFJuZGlzUmVzZXRNc2c7DQo+ICsgIFJFTU9URV9O RElTX1JFU0VUX0NNUExUICAgICAgUm5kaXNSZXNldENtcGx0Ow0KPiArICBFRklfU1RBVFVTICAg ICAgICAgICAgICAgICAgIFN0YXR1czsNCj4gKw0KPiArICBERUJVRyAoKERFQlVHX0lORk8sICJS bmRpc1VuZGlSZXNldFxuIikpOw0KPiArDQo+ICsgIFVzYkV0aERyaXZlciAgID0gTmljLT5Vc2JF dGg7DQo+ICsgIFVzYlJuZGlzRGV2aWNlID0gVVNCX1JORElTX0RFVklDRV9GUk9NX1RISVMgKFVz YkV0aERyaXZlcik7DQo+ICsNCj4gKyAgWmVyb01lbSAoJlJuZGlzUmVzZXRNc2csIHNpemVvZiAo UkVNT1RFX05ESVNfUkVTRVRfTVNHKSk7DQo+ICsgIFplcm9NZW0gKCZSbmRpc1Jlc2V0Q21wbHQs IHNpemVvZiAoUkVNT1RFX05ESVNfUkVTRVRfQ01QTFQpKTsNCj4gKw0KPiArICBSbmRpc1Jlc2V0 TXNnLk1lc3NhZ2VUeXBlICAgPSBSTkRJU19SRVNFVF9NU0c7DQo+ICsgIFJuZGlzUmVzZXRNc2cu TWVzc2FnZUxlbmd0aCA9IHNpemVvZiAoUkVNT1RFX05ESVNfUkVTRVRfTVNHKTsNCj4gKw0KPiAr ICBSbmRpc1Jlc2V0Q21wbHQuTWVzc2FnZVR5cGUgICA9IFJORElTX1JFU0VUX0NNUExUOw0KPiAr ICBSbmRpc1Jlc2V0Q21wbHQuTWVzc2FnZUxlbmd0aCA9IHNpemVvZiAoUkVNT1RFX05ESVNfUkVT RVRfQ01QTFQpOw0KPiArDQo+ICsgIFN0YXR1cyA9IFJuZGlzQ29udHJvbE1zZyAoVXNiUm5kaXNE ZXZpY2UsIChSRU1PVEVfTkRJU19NU0dfSEVBREVSDQo+ICopJlJuZGlzUmVzZXRNc2csIChSRU1P VEVfTkRJU19NU0dfSEVBREVSICopJlJuZGlzUmVzZXRDbXBsdCk7DQo+ICsNCj4gKyAgVXNiUm5k aXNEZXZpY2UtPlJlcXVlc3RJZCA9IDE7ICAgICAgICAgIC8vIExldCdzIHN0YXJ0IHdpdGggMQ0K PiArDQo+ICsgIGlmIChFRklfRVJST1IgKFN0YXR1cykgfHwgKFJuZGlzUmVzZXRDbXBsdC5TdGF0 dXMgJiAweDgwMDAwMDAwKSkgew0KPiArICAgIHJldHVybiBFRklfREVWSUNFX0VSUk9SOw0KPiAr ICB9DQo+ICsNCj4gKyAgcmV0dXJuIEVGSV9TVUNDRVNTOw0KPiArfQ0KPiArDQo+ICsvKioNCj4g KyAgVGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQgd2hlbiBVbmRpU2h1dGRvd24gaXMgaW52b2tlZC4N Cj4gKw0KPiArICBAcGFyYW1baW5dICBDZGIgIEEgcG9pbnRlciB0byB0aGUgY29tbWFuZCBkZXNj cmlwdG9yIGJsb2NrLg0KPiArICBAcGFyYW1baW5dICBOaWMgIEEgcG9pbnRlciB0byB0aGUgTmV0 d29yayBpbnRlcmZhY2UgY29udHJvbGxlciBkYXRhLg0KPiArDQo+ICsgIEByZXR2YWwgRUZJX1NV Q0NFU1MgICAgIFRoZSByZXF1ZXN0IGV4ZWN1dGVkIHN1Y2Nlc3NmdWxseS4NCj4gKw0KPiArKiov DQo+ICtFRklfU1RBVFVTDQo+ICtFRklBUEkNCj4gK1JuZGlzVW5kaVNodXRkb3duICgNCj4gKyAg SU4gIFBYRV9DREIgICAqQ2RiLA0KPiArICBJTiAgTklDX0RBVEEgICpOaWMNCj4gKyAgKQ0KPiAr ew0KPiArICBFREtJSV9VU0JfRVRIRVJORVRfUFJPVE9DT0wgICpVc2JFdGhEcml2ZXI7DQo+ICsg IFVTQl9STkRJU19ERVZJQ0UgICAgICAgICAgICAgKlVzYlJuZGlzRGV2aWNlOw0KPiArICBSRU1P VEVfTkRJU19IQUxUX01TRyAgICAgICAgIFJuZGlzSGx0TXNnOw0KPiArICBFRklfU1RBVFVTICAg ICAgICAgICAgICAgICAgIFN0YXR1czsNCj4gKw0KPiArICBERUJVRyAoKERFQlVHX0lORk8sICJS bmRpc1VuZGlTaHV0ZG93blxuIikpOw0KPiArDQo+ICsgIFVzYkV0aERyaXZlciAgID0gTmljLT5V c2JFdGg7DQo+ICsgIFVzYlJuZGlzRGV2aWNlID0gVVNCX1JORElTX0RFVklDRV9GUk9NX1RISVMg KFVzYkV0aERyaXZlcik7DQo+ICsNCj4gKyAgWmVyb01lbSAoJlJuZGlzSGx0TXNnLCBzaXplb2Yg KFJFTU9URV9ORElTX0hBTFRfTVNHKSk7DQo+ICsNCj4gKyAgUm5kaXNIbHRNc2cuTWVzc2FnZVR5 cGUgICA9IFJORElTX0hMVF9NU0c7DQo+ICsgIFJuZGlzSGx0TXNnLk1lc3NhZ2VMZW5ndGggPSBz aXplb2YgKFJFTU9URV9ORElTX0hBTFRfTVNHKTsNCj4gKw0KPiArICBTdGF0dXMgPSBSbmRpc0Nv bnRyb2xNc2cgKFVzYlJuZGlzRGV2aWNlLCAoUkVNT1RFX05ESVNfTVNHX0hFQURFUg0KPiAqKSZS bmRpc0hsdE1zZywgTlVMTCk7DQo+ICsNCj4gKyAgaWYgKFN0YXR1cyA9PSBFRklfREVWSUNFX0VS Uk9SKSB7DQo+ICsgICAgU3RhdHVzID0gRUZJX1NVQ0NFU1M7DQo+ICsgIH0NCj4gKw0KPiArICBV c2JSbmRpc0RldmljZS0+UmVxdWVzdElkID0gMTsNCj4gKyAgcmV0dXJuIFN0YXR1czsNCj4gK30N Cj4gKw0KPiArLyoqDQo+ICsgIFVwZGF0ZSB0aGUgTWVkaWEgY29ubmVjdGlvbi4NCj4gKw0KPiAr ICBAcGFyYW1baW5dICBDZGIgIEEgcG9pbnRlciB0byB0aGUgY29tbWFuZCBkZXNjcmlwdG9yIGJs b2NrLg0KPiArICBAcGFyYW1baW5dICBOaWMgIEEgcG9pbnRlciB0byB0aGUgTmV0d29yayBpbnRl cmZhY2UgY29udHJvbGxlciBkYXRhLg0KPiArDQo+ICsgIEByZXR2YWwgRUZJX1NVQ0NFU1MgICAg IFRoZSByZXF1ZXN0IGV4ZWN1dGVkIHN1Y2Nlc3NmdWxseS4NCj4gKw0KPiArKiovDQo+ICtFRklf U1RBVFVTDQo+ICtFRklBUEkNCj4gK1JuZGlzVW5kaUdldFN0YXR1cyAoDQo+ICsgIElOICBQWEVf Q0RCICAgKkNkYiwNCj4gKyAgSU4gIE5JQ19EQVRBICAqTmljDQo+ICsgICkNCj4gK3sNCj4gKyAg Q2RiLT5TdGF0RmxhZ3MgJj0gfihQWEVfU1RBVEZMQUdTX0dFVF9TVEFUVVNfTk9fTUVESUEpOw0K PiArICByZXR1cm4gRUZJX1NVQ0NFU1M7DQo+ICt9DQo+ICsNCj4gKy8qKg0KPiArICBUcmFuc21p dCB0aGUgZGF0YSBhZnRlciBhcHBlbmRpbmcgUk5ESVMgaGVhZGVyLg0KPiArDQo+ICsgIEBwYXJh bVtpbl0gICAgICBDZGIgICAgICAgICAgIEEgcG9pbnRlciB0byB0aGUgY29tbWFuZCBkZXNjcmlw dG9yIGJsb2NrLg0KPiArICBAcGFyYW1baW5dICAgICAgVGhpcyAgICAgICAgICBBIHBvaW50ZXIg dG8gdGhlIEVES0lJX1VTQl9FVEhFUk5FVF9QUk9UT0NPTA0KPiBpbnN0YW5jZS4NCj4gKyAgQHBh cmFtW2luXSAgICAgIEJ1bGtPdXREYXRhICAgQSBwb2ludGVyIHRvIHRoZSBidWZmZXIgb2YgZGF0 YSB0aGF0IHdpbGwgYmUNCj4gdHJhbnNtaXR0ZWQgdG8gVVNCDQo+ICsgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIGRldmljZSBvciByZWNlaXZlZCBmcm9tIFVTQiBkZXZpY2UuDQo+ICsg IEBwYXJhbVtpbiwgb3V0XSBEYXRhTGVuZ3RoICAgIEEgcG9pbnRlciB0byB0aGUgUGFja2V0TGVu Z3RoLg0KPiArDQo+ICsgIEByZXR2YWwgRUZJX1NVQ0NFU1MgICAgIFRoZSByZXF1ZXN0IGV4ZWN1 dGVkIHN1Y2Nlc3NmdWxseS4NCj4gKw0KPiArKiovDQo+ICtFRklfU1RBVFVTDQo+ICtFRklBUEkN Cj4gK1JuZGlzVW5kaVRyYW5zbWl0ICgNCj4gKyAgSU4gICAgICBQWEVfQ0RCICAgICAgICAgICAg ICAgICAgICAgICpDZGIsDQo+ICsgIElOICAgICAgRURLSUlfVVNCX0VUSEVSTkVUX1BST1RPQ09M ICAqVGhpcywNCj4gKyAgSU4gICAgICBWT0lEICAgICAgICAgICAgICAgICAgICAgICAgICpCdWxr T3V0RGF0YSwNCj4gKyAgSU4gT1VUICBVSU5UTiAgICAgICAgICAgICAgICAgICAgICAgICpEYXRh TGVuZ3RoDQo+ICsgICkNCj4gK3sNCj4gKyAgRUZJX1NUQVRVUyAgICAgICAgICAgICAgU3RhdHVz Ow0KPiArICBVU0JfUk5ESVNfREVWSUNFICAgICAgICAqVXNiUm5kaXNEZXZpY2U7DQo+ICsgIFJF TU9URV9ORElTX1BBQ0tFVF9NU0cgICpSbmRpc1BhY2tldE1zZzsNCj4gKyAgVUlOVE4gICAgICAg ICAgICAgICAgICAgVHJhbnNmZXJMZW5ndGg7DQo+ICsNCj4gKyAgREVCVUcgKChERUJVR19JTkZP LCAiUm5kaXNVbmRpVHJhbnNtaXQgRGF0YUxlbmd0aCA6ICV4XG4iLA0KPiAqRGF0YUxlbmd0aCkp Ow0KPiArDQo+ICsgIFVzYlJuZGlzRGV2aWNlID0gVVNCX1JORElTX0RFVklDRV9GUk9NX1RISVMg KFRoaXMpOw0KPiArDQo+ICsgIFJuZGlzUGFja2V0TXNnID0gQWxsb2NhdGVaZXJvUG9vbCAoc2l6 ZW9mIChSRU1PVEVfTkRJU19QQUNLRVRfTVNHKSArDQo+ICpEYXRhTGVuZ3RoKTsNCj4gKyAgaWYg KFJuZGlzUGFja2V0TXNnID09IE5VTEwpIHsNCj4gKyAgICByZXR1cm4gRUZJX09VVF9PRl9SRVNP VVJDRVM7DQo+ICsgIH0NCj4gKw0KPiArICBSbmRpc1BhY2tldE1zZy0+TWVzc2FnZVR5cGUgICA9 IFJORElTX1BBQ0tFVF9NU0c7DQo+ICsgIFJuZGlzUGFja2V0TXNnLT5NZXNzYWdlTGVuZ3RoID0g c2l6ZW9mIChSRU1PVEVfTkRJU19QQUNLRVRfTVNHKSArDQo+IChVSU5UMzIpKkRhdGFMZW5ndGg7 DQo+ICsgIFJuZGlzUGFja2V0TXNnLT5EYXRhT2Zmc2V0ICAgID0gc2l6ZW9mIChSRU1PVEVfTkRJ U19QQUNLRVRfTVNHKSAtIDg7DQo+ICsgIFJuZGlzUGFja2V0TXNnLT5EYXRhTGVuZ3RoICAgID0g KFVJTlQzMikqRGF0YUxlbmd0aDsNCj4gKw0KPiArICBDb3B5TWVtICgNCj4gKyAgICAoKFVJTlQ4 ICopUm5kaXNQYWNrZXRNc2cpICsgc2l6ZW9mIChSRU1PVEVfTkRJU19QQUNLRVRfTVNHKSwNCj4g KyAgICBCdWxrT3V0RGF0YSwNCj4gKyAgICAqRGF0YUxlbmd0aA0KPiArICAgICk7DQo+ICsNCj4g KyAgVHJhbnNmZXJMZW5ndGggPSBSbmRpc1BhY2tldE1zZy0+TWVzc2FnZUxlbmd0aDsNCj4gKw0K PiArICBTdGF0dXMgPSBSbmRpc1RyYW5zbWl0RGF0YU1zZyAoDQo+ICsgICAgICAgICAgICAgVXNi Um5kaXNEZXZpY2UsDQo+ICsgICAgICAgICAgICAgKFJFTU9URV9ORElTX01TR19IRUFERVIgKilS bmRpc1BhY2tldE1zZywNCj4gKyAgICAgICAgICAgICAmVHJhbnNmZXJMZW5ndGgNCj4gKyAgICAg ICAgICAgICApOw0KPiArDQo+ICsgIERFQlVHICgoREVCVUdfSU5GTywgIlxuUm5kaXNVbmRpVHJh bnNtaXQgVHJhbnNmZXJMZW5ndGggJWx4XG4iLA0KPiBUcmFuc2Zlckxlbmd0aCkpOw0KPiArDQo+ ICsgIEZyZWVQb29sIChSbmRpc1BhY2tldE1zZyk7DQo+ICsNCj4gKyAgcmV0dXJuIFN0YXR1czsN Cj4gK30NCj4gKw0KPiArLyoqDQo+ICsgIFJlY2VpdmVzIGFuZCByZW1vdmVzIFJORElTIGhlYWRl ciBhbmQgcmV0dXJucyB0aGUgcmF3IGRhdGEuDQo+ICsNCj4gKyAgQHBhcmFtW2luXSAgICAgIENk YiAgICAgICAgICAgQSBwb2ludGVyIHRvIHRoZSBjb21tYW5kIGRlc2NyaXB0b3IgYmxvY2suDQo+ ICsgIEBwYXJhbVtpbl0gICAgICBUaGlzICAgICAgICAgIEEgcG9pbnRlciB0byB0aGUgRURLSUlf VVNCX0VUSEVSTkVUX1BST1RPQ09MDQo+IGluc3RhbmNlLg0KPiArICBAcGFyYW1baW4sIG91dF0g QnVsa0luRGF0YSAgICBBIHBvaW50ZXIgdG8gdGhlIGJ1ZmZlciBvZiBkYXRhIHRoYXQgd2lsbCBi ZQ0KPiB0cmFuc21pdHRlZCB0byBVU0INCj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgZGV2aWNlIG9yIHJlY2VpdmVkIGZyb20gVVNCIGRldmljZS4NCj4gKyAgQHBhcmFtW2luLCBv dXRdIERhdGFMZW5ndGggICAgQSBwb2ludGVyIHRvIHRoZSBQYWNrZXRMZW5ndGguDQo+ICsNCj4g KyAgQHJldHZhbCBFRklfU1VDQ0VTUyAgICAgICAgICAgVGhlIHJlcXVlc3QgZXhlY3V0ZWQgc3Vj Y2Vzc2Z1bGx5Lg0KPiArICBAcmV0dmFsIEVGSV9CVUZGRVJfVE9PX1NNQUxMICBUaGUgdXNlciBw cm92aWRlZCBidWZmZXIgaXMgdG9vIHNtYWxsDQo+ICsgIEByZXR2YWwgRUZJX05PVF9GT1VORCAg ICAgICAgIE5vIGJ1ZmZlciB3YXMgZm91bmQgaW4gdGhlIGxpc3QuDQo+ICsNCj4gKyoqLw0KPiAr RUZJX1NUQVRVUw0KPiArRUZJQVBJDQo+ICtSbmRpc1VuZGlSZWNlaXZlICgNCj4gKyAgSU4gICAg IFBYRV9DREIgICAgICAgICAgICAgICAgICAgICAgKkNkYiwNCj4gKyAgSU4gICAgIEVES0lJX1VT Ql9FVEhFUk5FVF9QUk9UT0NPTCAgKlRoaXMsDQo+ICsgIElOIE9VVCBWT0lEICAgICAgICAgICAg ICAgICAgICAgICAgICpCdWxrSW5EYXRhLA0KPiArICBJTiBPVVQgVUlOVE4gICAgICAgICAgICAg ICAgICAgICAgICAqRGF0YUxlbmd0aA0KPiArICApDQo+ICt7DQo+ICsgIEVGSV9TVEFUVVMgICAg ICAgICAgICAgIFN0YXR1czsNCj4gKyAgVVNCX1JORElTX0RFVklDRSAgICAgICAgKlVzYlJuZGlz RGV2aWNlOw0KPiArICBSRU1PVEVfTkRJU19QQUNLRVRfTVNHICAqUm5kaXNQYWNrZXRNc2c7DQo+ ICsgIFVJTlROICAgICAgICAgICAgICAgICAgIFRyYW5zZmVyTGVuZ3RoOw0KPiArICBWT0lEICAg ICAgICAgICAgICAgICAgICAqQnVmZmVyOw0KPiArICBQQUNLRVRfTElTVCAgICAgICAgICAgICAq SGVhZFBhY2tldDsNCj4gKyAgUEFDS0VUX0xJU1QgICAgICAgICAgICAgKlBhY2tldExpc3Q7DQo+ ICsNCj4gKyAgLy8gQ2hlY2sgaWYgdGhlcmUgaXMgYW55IG91dHN0YW5kaW5nIHBhY2tldCB0byBy ZWNlaXZlDQo+ICsgIC8vIFRoZSBidWZmZXIgYWxsb2NhdGVkIGhhcyBhIGxpbmtlZCBMaXN0IGZv bGxvd2VkIGJ5IHRoZSBwYWNrZXQuDQo+ICsNCj4gKyAgVXNiUm5kaXNEZXZpY2UgPSBVU0JfUk5E SVNfREVWSUNFX0ZST01fVEhJUyAoVGhpcyk7DQo+ICsgIEJ1ZmZlciAgICAgICAgID0gTlVMTDsN Cj4gKyAgSGVhZFBhY2tldCAgICAgPSBOVUxMOw0KPiArDQo+ICsgIHdoaWxlICgxKSB7DQo+ICsg ICAgQnVmZmVyID0gQWxsb2NhdGVaZXJvUG9vbCAoc2l6ZW9mIChQQUNLRVRfTElTVCkgKyBzaXpl b2YNCj4gKFJFTU9URV9ORElTX1BBQ0tFVF9NU0cpICsgVXNiUm5kaXNEZXZpY2UtPk1heFRyYW5z ZmVyU2l6ZSk7DQo+ICsgICAgaWYgKEJ1ZmZlciA9PSBOVUxMKSB7DQo+ICsgICAgICByZXR1cm4g RUZJX09VVF9PRl9SRVNPVVJDRVM7DQo+ICsgICAgfQ0KPiArDQo+ICsgICAgUm5kaXNQYWNrZXRN c2cgICAgICAgICAgICAgICAgPSAoUkVNT1RFX05ESVNfUEFDS0VUX01TRyAqKShzaXplb2YNCj4g KFBBQ0tFVF9MSVNUKSArIChVSU5UOCAqKUJ1ZmZlcik7DQo+ICsgICAgUGFja2V0TGlzdCAgICAg ICAgICAgICAgICAgICAgPSAoUEFDS0VUX0xJU1QgKilCdWZmZXI7DQo+ICsgICAgUGFja2V0TGlz dC0+UGFja2V0U3RhcnRCdWZmZXIgPSAoVUlOVDggKilCdWZmZXIgKyBzaXplb2YgKFBBQ0tFVF9M SVNUKTsNCj4gKyAgICAvLyBTYXZlIHRoZSBvcmlnaW5hbCBhZGRyZXNzIGZvciBmcmVlaW5nIGl0 IHVwDQo+ICsgICAgUGFja2V0TGlzdC0+T3JnQnVmZmVyID0gKFVJTlQ4ICopQnVmZmVyOw0KPiAr ICAgIFRyYW5zZmVyTGVuZ3RoICAgICAgICA9IFVzYlJuZGlzRGV2aWNlLT5NYXhUcmFuc2ZlclNp emU7DQo+ICsNCj4gKyAgICBTdGF0dXMgPSBSbmRpc1JlY2VpdmVEYXRhTXNnICgNCj4gKyAgICAg ICAgICAgICAgIFVzYlJuZGlzRGV2aWNlLA0KPiArICAgICAgICAgICAgICAgKFJFTU9URV9ORElT X01TR19IRUFERVIgKilSbmRpc1BhY2tldE1zZywNCj4gKyAgICAgICAgICAgICAgICZUcmFuc2Zl ckxlbmd0aA0KPiArICAgICAgICAgICAgICAgKTsNCj4gKw0KPiArICAgIGlmIChFRklfRVJST1Ig KFN0YXR1cykgfHwgKFRyYW5zZmVyTGVuZ3RoID09IDApKSB7DQo+ICsgICAgICBGcmVlUG9vbCAo QnVmZmVyKTsNCj4gKyAgICAgIGJyZWFrOw0KPiArICAgIH0NCj4gKw0KPiArICAgIC8vIENvbGxl Y3QgYWxsIHRoZSBSTkRJUyBwYWNrZXQgaW4gTGlua2VkIGxpc3QuDQo+ICsgICAgaWYgKChSbmRp c1BhY2tldE1zZy0+TWVzc2FnZVR5cGUgPT0gUk5ESVNfUEFDS0VUX01TRykgJiYNCj4gKyAgICAg ICAgKFJuZGlzUGFja2V0TXNnLT5EYXRhT2Zmc2V0ID09IHNpemVvZiAoUkVNT1RFX05ESVNfUEFD S0VUX01TRykgLQ0KPiBSTkRJU19SRVNFUlZFRF9CWVRFX0xFTkdUSCkgJiYNCj4gKyAgICAgICAg KFRyYW5zZmVyTGVuZ3RoID49IFJuZGlzUGFja2V0TXNnLT5NZXNzYWdlTGVuZ3RoKSkNCj4gKyAg ICB7DQo+ICsgICAgICAvLyBJbnNlcnQgUGFja2V0DQo+ICsgICAgICBQYWNrZXRMaXN0LT5SZW1h aW5pbmdMZW5ndGggPSBUcmFuc2Zlckxlbmd0aDsNCj4gKyAgICAgIEluc2VydFRhaWxMaXN0ICgm VXNiUm5kaXNEZXZpY2UtPlJlY2VpdmVQYWNrZXRMaXN0LCBCdWZmZXIpOw0KPiArICAgIH0gZWxz ZSB7DQo+ICsgICAgICBGcmVlUG9vbCAoQnVmZmVyKTsNCj4gKyAgICB9DQo+ICsgIH0NCj4gKw0K PiArICB3aGlsZSAoIUlzTGlzdEVtcHR5ICgmVXNiUm5kaXNEZXZpY2UtPlJlY2VpdmVQYWNrZXRM aXN0KSkgew0KPiArICAgIEhlYWRQYWNrZXQgPSAoUEFDS0VUX0xJU1QgKilHZXRGaXJzdE5vZGUg KCZVc2JSbmRpc0RldmljZS0NCj4gPlJlY2VpdmVQYWNrZXRMaXN0KTsNCj4gKw0KPiArICAgIFJu ZGlzUGFja2V0TXNnID0gKFJFTU9URV9ORElTX1BBQ0tFVF9NU0cgKikoVUlOVDggKilIZWFkUGFj a2V0LQ0KPiA+UGFja2V0U3RhcnRCdWZmZXI7DQo+ICsNCj4gKyAgICBQcmludFJuZGlzTXNnICgo UkVNT1RFX05ESVNfTVNHX0hFQURFUiAqKVJuZGlzUGFja2V0TXNnKTsNCj4gKw0KPiArICAgIC8v IENoZWNrIHdoZXRoZXIgdGhlIHBhY2tldCBpcyB2YWxpZCBSTkRJUyBwYWNrZXQuDQo+ICsgICAg aWYgKChIZWFkUGFja2V0LT5SZW1haW5pbmdMZW5ndGggPiBzaXplb2YgKFJFTU9URV9ORElTX1BB Q0tFVF9NU0cpKQ0KPiAmJiAoUm5kaXNQYWNrZXRNc2ctPk1lc3NhZ2VUeXBlID09IFJORElTX1BB Q0tFVF9NU0cpICYmDQo+ICsgICAgICAgIChSbmRpc1BhY2tldE1zZy0+RGF0YU9mZnNldCA9PSAo c2l6ZW9mIChSRU1PVEVfTkRJU19QQUNLRVRfTVNHKSAtDQo+IFJORElTX1JFU0VSVkVEX0JZVEVf TEVOR1RIKSkgJiYNCj4gKyAgICAgICAgKEhlYWRQYWNrZXQtPlJlbWFpbmluZ0xlbmd0aCA+PSBS bmRpc1BhY2tldE1zZy0+TWVzc2FnZUxlbmd0aCkpDQo+ICsgICAgew0KPiArICAgICAgaWYgKCpE YXRhTGVuZ3RoID49IFJuZGlzUGFja2V0TXNnLT5EYXRhTGVuZ3RoKSB7DQo+ICsgICAgICAgIENv cHlNZW0gKA0KPiArICAgICAgICAgIEJ1bGtJbkRhdGEsDQo+ICsgICAgICAgICAgKFVJTlQ4ICop Um5kaXNQYWNrZXRNc2cgKyAoUm5kaXNQYWNrZXRNc2ctPkRhdGFPZmZzZXQgKw0KPiBSTkRJU19S RVNFUlZFRF9CWVRFX0xFTkdUSCksDQo+ICsgICAgICAgICAgUm5kaXNQYWNrZXRNc2ctPkRhdGFM ZW5ndGgNCj4gKyAgICAgICAgICApOw0KPiArDQo+ICsgICAgICAgICpEYXRhTGVuZ3RoID0gIFJu ZGlzUGFja2V0TXNnLT5EYXRhTGVuZ3RoOw0KPiArDQo+ICsgICAgICAgIEhlYWRQYWNrZXQtPlJl bWFpbmluZ0xlbmd0aCAgID0gSGVhZFBhY2tldC0+UmVtYWluaW5nTGVuZ3RoIC0NCj4gUm5kaXNQ YWNrZXRNc2ctPk1lc3NhZ2VMZW5ndGg7DQo+ICsgICAgICAgIEhlYWRQYWNrZXQtPlBhY2tldFN0 YXJ0QnVmZmVyID0gKFVJTlQ4ICopUm5kaXNQYWNrZXRNc2cgKw0KPiBSbmRpc1BhY2tldE1zZy0+ TWVzc2FnZUxlbmd0aDsNCj4gKw0KPiArICAgICAgICByZXR1cm4gRUZJX1NVQ0NFU1M7DQo+ICsg ICAgICB9IGVsc2Ugew0KPiArICAgICAgICAqRGF0YUxlbmd0aCA9IFJuZGlzUGFja2V0TXNnLT5E YXRhTGVuZ3RoOw0KPiArICAgICAgICByZXR1cm4gRUZJX0JVRkZFUl9UT09fU01BTEw7DQo+ICsg ICAgICB9DQo+ICsgICAgfQ0KPiArDQo+ICsgICAgUmVtb3ZlRW50cnlMaXN0ICgmSGVhZFBhY2tl dC0+UGFja2V0TGlzdCk7DQo+ICsgICAgRnJlZVBvb2wgKChQQUNLRVRfTElTVCAqKUhlYWRQYWNr ZXQtPk9yZ0J1ZmZlcik7DQo+ICsgIH0NCj4gKw0KPiArICByZXR1cm4gRUZJX05PVF9GT1VORDsN Cj4gK30NCj4gKw0KPiArLyoqDQo+ICsgIFRoaXMgaXMgYSBkdW1teSBmdW5jdGlvbiB3aGljaCBq dXN0IHJldHVybnMuIFVuaW1wbGVtZW50ZWQNCj4gRURLSUlfVVNCX0VUSEVSTkVUX1BST1RPQ09M IGZ1bmN0aW9ucw0KPiArICBwb2ludCB0byB0aGlzIGZ1bmN0aW9uLg0KPiArDQo+ICsgIEBwYXJh bVtpbl0gIENkYiAgQSBwb2ludGVyIHRvIHRoZSBjb21tYW5kIGRlc2NyaXB0b3IgYmxvY2suDQo+ ICsgIEBwYXJhbVtpbl0gIE5pYyAgQSBwb2ludGVyIHRvIHRoZSBOZXR3b3JrIGludGVyZmFjZSBj b250cm9sbGVyIGRhdGEuDQo+ICsNCj4gKyAgQHJldHZhbCBFRklfU1VDQ0VTUyAgICAgVGhlIHJl cXVlc3QgZXhlY3V0ZWQgc3VjY2Vzc2Z1bGx5Lg0KPiArDQo+ICsqKi8NCj4gK0VGSV9TVEFUVVMN Cj4gK0VGSUFQSQ0KPiArUm5kaXNEdW1teVJldHVybiAoDQo+ICsgIElOICBQWEVfQ0RCICAgKkNk YiwNCj4gKyAgSU4gIE5JQ19EQVRBICAqTmljDQo+ICsgICkNCj4gK3sNCj4gKyAgREVCVUcgKChE RUJVR19JTkZPLCAiUm5kaXNEdW1teVJldHVybiBjYWxsZWRcbiIpKTsNCj4gKyAgcmV0dXJuIEVG SV9TVUNDRVNTOw0KPiArfQ0KPiArDQo+ICsvKioNCj4gKyAgVGhpcyBmdW5jdGlvbiBzZW5kIHRo ZSBSTkRJUyBjb21tYW5kIHRocm91Z2ggdGhlIGRldmljZSdzIGNvbnRyb2wgZW5kcG9pbnQNCj4g Kw0KPiArICBAcGFyYW1baW5dICBVc2JSbmRpc0RldmljZSAgICBBIHBvaW50ZXIgdG8gdGhlIFVT Ql9STkRJU19ERVZJQ0UgaW5zdGFuY2UuDQo+ICsgIEBwYXJhbVtpbl0gIFJuZGlzTXNnICAgICAg ICAgIEEgcG9pbnRlciB0byB0aGUgUkVNT1RFX05ESVNfTVNHX0hFQURFUg0KPiBkYXRhLg0KPiAr ICBAcGFyYW1bb3V0XSBSbmRpc01zZ1Jlc3BvbnNlICBBIHBvaW50ZXIgdG8gdGhlDQo+IFJFTU9U RV9ORElTX01TR19IRUFERVIgZGF0YSBmb3IgZ2V0dGluZyByZXNwb25zZXMuDQo+ICsNCj4gKyAg QHJldHZhbCBFRklfU1VDQ0VTUyAgICAgICAgICAgVGhlIGJ1bGsgdHJhbnNmZXIgaGFzIGJlZW4g c3VjY2Vzc2Z1bGx5IGV4ZWN1dGVkLg0KPiArDQo+ICsqKi8NCj4gK0VGSV9TVEFUVVMNCj4gK1Ju ZGlzQ29udHJvbE1zZyAoDQo+ICsgIElOICBVU0JfUk5ESVNfREVWSUNFICAgICAgICAqVXNiUm5k aXNEZXZpY2UsDQo+ICsgIElOICBSRU1PVEVfTkRJU19NU0dfSEVBREVSICAqUm5kaXNNc2csDQo+ ICsgIE9VVCBSRU1PVEVfTkRJU19NU0dfSEVBREVSICAqUm5kaXNNc2dSZXNwb25zZQ0KPiArICAp DQo+ICt7DQo+ICsgIEVGSV9VU0JfSU9fUFJPVE9DT0wgICAgICAgICAgICpVc2JJbyA9IFVzYlJu ZGlzRGV2aWNlLT5Vc2JJbzsNCj4gKyAgRUZJX1VTQl9ERVZJQ0VfUkVRVUVTVCAgICAgICAgRGV2 UmVxOw0KPiArICBVSU5UMzIgICAgICAgICAgICAgICAgICAgICAgICBVc2JTdGF0dXM7DQo+ICsg IEVGSV9TVEFUVVMgICAgICAgICAgICAgICAgICAgIFN0YXR1czsNCj4gKyAgVUlOVDMyICAgICAg ICAgICAgICAgICAgICAgICAgU2F2ZVJlc3BvbnNlVHlwZTsNCj4gKyAgVUlOVDMyICAgICAgICAg ICAgICAgICAgICAgICAgU2F2ZVJlc3BvbnNlTGVuZ3RoOw0KPiArICBVSU5UMzIgICAgICAgICAg ICAgICAgICAgICAgICBJbmRleDsNCj4gKyAgUkVNT1RFX05ESVNfSU5JVElBTElaRV9DTVBMVCAg KlJuZGlzSW5pdENtcGx0Ow0KPiArDQo+ICsgIFNhdmVSZXNwb25zZVR5cGUgICA9IDA7DQo+ICsg IFNhdmVSZXNwb25zZUxlbmd0aCA9IDA7DQo+ICsgIFJuZGlzSW5pdENtcGx0ICAgICA9IChSRU1P VEVfTkRJU19JTklUSUFMSVpFX0NNUExUICopUm5kaXNNc2dSZXNwb25zZTsNCj4gKw0KPiArICBp ZiAoUm5kaXNNc2dSZXNwb25zZSkgew0KPiArICAgIFNhdmVSZXNwb25zZVR5cGUgICA9IFJuZGlz TXNnUmVzcG9uc2UtPk1lc3NhZ2VUeXBlOw0KPiArICAgIFNhdmVSZXNwb25zZUxlbmd0aCA9IFJu ZGlzTXNnUmVzcG9uc2UtPk1lc3NhZ2VMZW5ndGg7DQo+ICsgIH0NCj4gKw0KPiArICBaZXJvTWVt ICgmRGV2UmVxLCBzaXplb2YgKEVGSV9VU0JfREVWSUNFX1JFUVVFU1QpKTsNCj4gKw0KPiArICBE ZXZSZXEuUmVxdWVzdFR5cGUgPSBVU0JfUkVRX1RZUEVfQ0xBU1MgfCBVU0JfVEFSR0VUX0lOVEVS RkFDRTsNCj4gKyAgRGV2UmVxLlJlcXVlc3QgICAgID0gU0VORF9FTkNBUFNVTEFURURfQ09NTUFO RDsNCj4gKyAgRGV2UmVxLlZhbHVlICAgICAgID0gMDsNCj4gKyAgRGV2UmVxLkluZGV4ICAgICAg ID0gMDsNCj4gKyAgRGV2UmVxLkxlbmd0aCAgICAgID0gKFVJTlQxNilSbmRpc01zZy0+TWVzc2Fn ZUxlbmd0aDsNCj4gKw0KPiArICBQcmludFJuZGlzTXNnIChSbmRpc01zZyk7DQo+ICsNCj4gKyAg U3RhdHVzID0gVXNiSW8tPlVzYkNvbnRyb2xUcmFuc2ZlciAoDQo+ICsgICAgICAgICAgICAgICAg ICAgIFVzYklvLA0KPiArICAgICAgICAgICAgICAgICAgICAmRGV2UmVxLA0KPiArICAgICAgICAg ICAgICAgICAgICBFZmlVc2JEYXRhT3V0LA0KPiArICAgICAgICAgICAgICAgICAgICBVU0JfRVRI RVJORVRfVFJBTlNGRVJfVElNRU9VVCwNCj4gKyAgICAgICAgICAgICAgICAgICAgUm5kaXNNc2cs DQo+ICsgICAgICAgICAgICAgICAgICAgIFJuZGlzTXNnLT5NZXNzYWdlTGVuZ3RoLA0KPiArICAg ICAgICAgICAgICAgICAgICAmVXNiU3RhdHVzDQo+ICsgICAgICAgICAgICAgICAgICAgICk7DQo+ ICsNCj4gKyAgREVCVUcgKChERUJVR19JTkZPLCAiUm5kaXNDb250cm9sTXNnOiBVc2JTdGF0dXMg OiAleCBTdGF0dXMgOiAlcg0KPiBSbmRpc01zZ1Jlc3BvbnNlIDogJWx4XG4iLCBVc2JTdGF0dXMs IFN0YXR1cywgUm5kaXNNc2dSZXNwb25zZSkpOw0KPiArDQo+ICsgIC8vIEVycm9yIG9yIG5vIHJl c3BvbnNlIGV4cGVjdGVkDQo+ICsgIGlmICgoRUZJX0VSUk9SIChTdGF0dXMpKSB8fCAoUm5kaXNN c2dSZXNwb25zZSA9PSBOVUxMKSkgew0KPiArICAgIERFQlVHICgoREVCVUdfSU5GTywgIlJuZGlz Q29udHJvbE1zZzogVXNiU3RhdHVzIDogJXggU3RhdHVzIDogJXJcbiIsDQo+IFVzYlN0YXR1cywg U3RhdHVzKSk7DQo+ICsgICAgcmV0dXJuIFN0YXR1czsNCj4gKyAgfQ0KPiArDQo+ICsgIGZvciAo SW5kZXggPSAwOyBJbmRleCA8IChSTkRJU19DT05UUk9MX1RJTUVPVVQvMTAwKTsgSW5kZXgrKykg ew0KPiArICAgIFJlYWRSbmRpc1Jlc3BvbnNlSW50ZXJydXB0IChVc2JSbmRpc0RldmljZSk7DQo+ ICsgICAgWmVyb01lbSAoJkRldlJlcSwgc2l6ZW9mIChFRklfVVNCX0RFVklDRV9SRVFVRVNUKSk7 DQo+ICsNCj4gKyAgICBEZXZSZXEuUmVxdWVzdFR5cGUgPSBVU0JfRU5EUE9JTlRfRElSX0lOIHwg VVNCX1JFUV9UWVBFX0NMQVNTIHwNCj4gVVNCX1RBUkdFVF9JTlRFUkZBQ0U7DQo+ICsgICAgRGV2 UmVxLlJlcXVlc3QgICAgID0gR0VUX0VOQ0FQU1VMQVRFRF9SRVNQT05TRTsNCj4gKyAgICBEZXZS ZXEuVmFsdWUgICAgICAgPSAwOw0KPiArICAgIERldlJlcS5JbmRleCAgICAgICA9IDA7DQo+ICsg ICAgRGV2UmVxLkxlbmd0aCAgICAgID0gKFVJTlQxNilSbmRpc01zZ1Jlc3BvbnNlLT5NZXNzYWdl TGVuZ3RoOw0KPiArDQo+ICsgICAgU3RhdHVzID0gVXNiSW8tPlVzYkNvbnRyb2xUcmFuc2ZlciAo DQo+ICsgICAgICAgICAgICAgICAgICAgICAgVXNiSW8sDQo+ICsgICAgICAgICAgICAgICAgICAg ICAgJkRldlJlcSwNCj4gKyAgICAgICAgICAgICAgICAgICAgICBFZmlVc2JEYXRhSW4sDQo+ICsg ICAgICAgICAgICAgICAgICAgICAgVVNCX0VUSEVSTkVUX1RSQU5TRkVSX1RJTUVPVVQsDQo+ICsg ICAgICAgICAgICAgICAgICAgICAgUm5kaXNNc2dSZXNwb25zZSwNCj4gKyAgICAgICAgICAgICAg ICAgICAgICBSbmRpc01zZ1Jlc3BvbnNlLT5NZXNzYWdlTGVuZ3RoLA0KPiArICAgICAgICAgICAg ICAgICAgICAgICZVc2JTdGF0dXMNCj4gKyAgICAgICAgICAgICAgICAgICAgICApOw0KPiArDQo+ ICsgICAgREVCVUcgKChERUJVR19JTkZPLCAiUm5kaXNDb250cm9sTXNnIFJlc3BvbnNlOiBVc2JT dGF0dXMgOiAleA0KPiBTdGF0dXMgOiAlciBcbiIsIFVzYlN0YXR1cywgU3RhdHVzKSk7DQo+ICsN Cj4gKyAgICBQcmludFJuZGlzTXNnIChSbmRpc01zZ1Jlc3BvbnNlKTsNCj4gKw0KPiArICAgIGlm ICghRUZJX0VSUk9SIChTdGF0dXMpKSB7DQo+ICsgICAgICBpZiAoKFJuZGlzSW5pdENtcGx0LT5S ZXF1ZXN0SUQgIT0gKChSRU1PVEVfTkRJU19JTklUSUFMSVpFX0NNUExUDQo+ICopUm5kaXNNc2cp LT5SZXF1ZXN0SUQpIHx8IChSbmRpc0luaXRDbXBsdC0+TWVzc2FnZVR5cGUgIT0NCj4gU2F2ZVJl c3BvbnNlVHlwZSkpIHsNCj4gKyAgICAgICAgREVCVUcgKChERUJVR19JTkZPLCAiUmV0cnkgdGhl IHJlc3BvbnNlXG4iKSk7DQo+ICsNCj4gKyAgICAgICAgUm5kaXNNc2dSZXNwb25zZS0+TWVzc2Fn ZVR5cGUgICA9IFNhdmVSZXNwb25zZVR5cGU7DQo+ICsgICAgICAgIFJuZGlzTXNnUmVzcG9uc2Ut Pk1lc3NhZ2VMZW5ndGggPSBTYXZlUmVzcG9uc2VMZW5ndGg7DQo+ICsgICAgICAgIGNvbnRpbnVl Ow0KPiArICAgICAgfQ0KPiArICAgIH0NCj4gKw0KPiArICAgIHJldHVybiBTdGF0dXM7DQo+ICsg IH0NCj4gKw0KPiArICBERUJVRyAoKERFQlVHX0lORk8sICJSbmRpc0NvbnRyb2xNc2c6IFRpbWVP dXRcbiIpKTsNCj4gKw0KPiArICByZXR1cm4gRUZJX1RJTUVPVVQ7DQo+ICt9DQo+ICsNCj4gKy8q Kg0KPiArICBUaGlzIGZ1bmN0aW9uIHNlbmQgdGhlIFJORElTIGNvbW1hbmQgdGhyb3VnaCB0aGUg ZGV2aWNlJ3MgRGF0YSBlbmRwb2ludA0KPiArDQo+ICsgIEBwYXJhbVtpbl0gICAgICBVc2JSbmRp c0RldmljZSAgQSBwb2ludGVyIHRvIHRoZSBVU0JfUk5ESVNfREVWSUNFDQo+IGluc3RhbmNlLg0K PiArICBAcGFyYW1baW5dICAgICAgUm5kaXNNc2cgICAgICAgIEEgcG9pbnRlciB0byB0aGUgUkVN T1RFX05ESVNfTVNHX0hFQURFUg0KPiB0byBzZW5kIG91dC4NCj4gKyAgQHBhcmFtW2luLCBvdXRd IFRyYW5zZmVyTGVuZ3RoICBUaGUgbGVuZ3RoIG9mIHRoZSBSbmRpc01zZyBkYXRhIHRvIHRyYW5z ZmVyLg0KPiArDQo+ICsgIEByZXR2YWwgRUZJX1NVQ0NFU1MgICAgIFRoZSByZXF1ZXN0IGV4ZWN1 dGVkIHN1Y2Nlc3NmdWxseS4NCj4gKw0KPiArKiovDQo+ICtFRklfU1RBVFVTDQo+ICtSbmRpc1Ry YW5zbWl0RGF0YU1zZyAoDQo+ICsgIElOICAgICAgVVNCX1JORElTX0RFVklDRSAgICAgICAgKlVz YlJuZGlzRGV2aWNlLA0KPiArICBJTiAgICAgIFJFTU9URV9ORElTX01TR19IRUFERVIgICpSbmRp c01zZywNCj4gKyAgSU4gT1VUICBVSU5UTiAgICAgICAgICAgICAgICAgICAqVHJhbnNmZXJMZW5n dGgNCj4gKyAgKQ0KPiArew0KPiArICBFRklfU1RBVFVTICBTdGF0dXM7DQo+ICsgIFVJTlQzMiAg ICAgIFVzYlN0YXR1czsNCj4gKw0KPiArICBpZiAoVXNiUm5kaXNEZXZpY2UtPkJ1bGtJbkVuZHBv aW50ID09IDApIHsNCj4gKyAgICBHZXRFbmRwb2ludCAoVXNiUm5kaXNEZXZpY2UtPlVzYklvQ2Rj RGF0YSwgVXNiUm5kaXNEZXZpY2UpOw0KPiArICB9DQo+ICsNCj4gKyAgUHJpbnRSbmRpc01zZyAo Um5kaXNNc2cpOw0KPiArDQo+ICsgIFN0YXR1cyA9IFVzYlJuZGlzRGV2aWNlLT5Vc2JJb0NkY0Rh dGEtPlVzYkJ1bGtUcmFuc2ZlciAoDQo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgVXNiUm5kaXNEZXZpY2UtPlVzYklvQ2RjRGF0YSwNCj4gKyAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBVc2JSbmRpc0RldmljZS0+QnVsa091dEVu ZHBvaW50LA0KPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJu ZGlzTXNnLA0KPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRy YW5zZmVyTGVuZ3RoLA0KPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIFVTQl9UWF9FVEhFUk5FVF9CVUxLX1RJTUVPVVQsDQo+ICsgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgJlVzYlN0YXR1cw0KPiArICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICk7DQo+ICsNCj4gKyAgaWYgKFN0YXR1cyA9PSBFRklf U1VDQ0VTUykgew0KPiArICAgIGdTdG9wQnVsa0luQ250ID0gTUFYSU1VTV9TVE9QQlVMS0lOX0NO VDsgICAgIC8vIEFmdGVyIHNlbmRpbmcNCj4gY21kICx3ZSB3aWxsIHBvbGxpbmcgcmVjZWl2ZSBw YWNrYWdlIGZvciBNQVhJTVVNX1NUT1BCVUxLSU5fQ05UIHRpbWVzDQo+ICsgIH0NCj4gKw0KPiAr ICByZXR1cm4gU3RhdHVzOw0KPiArfQ0KPiArDQo+ICsvKioNCj4gKyAgVGhpcyBmdW5jdGlvbiBz ZW5kIHRoZSBSTkRJUyBjb21tYW5kIHRocm91Z2ggdGhlIGRldmljZSdzIERhdGEgZW5kcG9pbnQN Cj4gKw0KPiArICBAcGFyYW1baW5dICAgICAgVXNiUm5kaXNEZXZpY2UgICAgQSBwb2ludGVyIHRv IHRoZSBVU0JfUk5ESVNfREVWSUNFDQo+IGluc3RhbmNlLg0KPiArICBAcGFyYW1baW4sIG91dF0g Um5kaXNNc2cgICAgICAgICAgQSBwb2ludGVyIHRvIHRoZQ0KPiBSRU1PVEVfTkRJU19NU0dfSEVB REVSIHRvIHNlbmQgb3V0Lg0KPiArICBAcGFyYW1baW4sIG91dF0gVHJhbnNmZXJMZW5ndGggICAg VGhlIGxlbmd0aCBvZiB0aGUgUm5kaXNNc2cgZGF0YSB0bw0KPiB0cmFuc2Zlci4NCj4gKw0KPiAr ICBAcmV0dmFsIEVGSV9TVUNDRVNTICAgICBUaGUgcmVxdWVzdCBleGVjdXRlZCBzdWNjZXNzZnVs bHkuDQo+ICsNCj4gKyoqLw0KPiArRUZJX1NUQVRVUw0KPiArUm5kaXNSZWNlaXZlRGF0YU1zZyAo DQo+ICsgIElOICAgICAgVVNCX1JORElTX0RFVklDRSAgICAgICAgKlVzYlJuZGlzRGV2aWNlLA0K PiArICBJTiBPVVQgIFJFTU9URV9ORElTX01TR19IRUFERVIgICpSbmRpc01zZywNCj4gKyAgSU4g T1VUICBVSU5UTiAgICAgICAgICAgICAgICAgICAqVHJhbnNmZXJMZW5ndGgNCj4gKyAgKQ0KPiAr ew0KPiArICBFRklfU1RBVFVTICBTdGF0dXM7DQo+ICsgIFVJTlQzMiAgICAgIFVzYlN0YXR1czsN Cj4gKw0KPiArICBVc2JTdGF0dXMgPSAwOw0KPiArDQo+ICsgIGlmIChVc2JSbmRpc0RldmljZS0+ QnVsa0luRW5kcG9pbnQgPT0gMCkgew0KPiArICAgIEdldEVuZHBvaW50IChVc2JSbmRpc0Rldmlj ZS0+VXNiSW9DZGNEYXRhLCBVc2JSbmRpc0RldmljZSk7DQo+ICsgIH0NCj4gKw0KPiArICAvLyBV c2UgZ1N0b3BCdWxrSW5DbnQgdG8gc3RvcCBCdWxrSW4gY29tbWFuZA0KPiArICBpZiAoZ1N0b3BC dWxrSW5DbnQgfHwgTEFOX0JVTEtJTl9DTURfQ09OVFJPTCkgew0KPiArICAgIFN0YXR1cyA9IFVz YlJuZGlzRGV2aWNlLT5Vc2JJb0NkY0RhdGEtPlVzYkJ1bGtUcmFuc2ZlciAoDQo+ICsgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBVc2JSbmRpc0RldmljZS0+VXNi SW9DZGNEYXRhLA0KPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgVXNiUm5kaXNEZXZpY2UtPkJ1bGtJbkVuZHBvaW50LA0KPiArICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgUm5kaXNNc2csDQo+ICsgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUcmFuc2Zlckxlbmd0aCwNCj4gKyAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFVTQl9SWF9FVEhFUk5FVF9CVUxL X1RJTUVPVVQsDQo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAmVXNiU3RhdHVzDQo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICApOw0KPiArDQo+ICsgICAgaWYgKCFFRklfRVJST1IgKFN0YXR1cykpIHsNCj4gKyAgICAg IGdTdG9wQnVsa0luQ250ID0gTUlOSU1VTV9TVE9QQlVMS0lOX0NOVDsNCj4gKyAgICB9IGVsc2Ug ew0KPiArICAgICAgZ1N0b3BCdWxrSW5DbnQtLTsNCj4gKyAgICB9DQo+ICsgIH0gZWxzZSB7DQo+ ICsgICAgU3RhdHVzICAgICAgICAgID0gRUZJX1RJTUVPVVQ7DQo+ICsgICAgKlRyYW5zZmVyTGVu Z3RoID0gMDsNCj4gKyAgICBnQmxvY2tCdWxrSW5DbnQrKzsNCj4gKyAgfQ0KPiArDQo+ICsgIGlm IChnQmxvY2tCdWxrSW5DbnQgPiBCVUxLSU5fQ01EX1BPTExJTkdfQ05UKSB7DQo+ICsgICAgZ1N0 b3BCdWxrSW5DbnQgID0gTUlOSU1VTV9TVE9QQlVMS0lOX0NOVDsNCj4gKyAgICBnQmxvY2tCdWxr SW5DbnQgPSAwOw0KPiArICB9DQo+ICsNCj4gKyAgUHJpbnRSbmRpc01zZyAoUm5kaXNNc2cpOw0K PiArDQo+ICsgIHJldHVybiBTdGF0dXM7DQo+ICt9DQo+ICsNCj4gKy8qKg0KPiArICBQcmludHMg Uk5ESVMgSGVhZGVyIGFuZCBEYXRhDQo+ICsNCj4gKyAgQHBhcmFtW2luXSBSbmRpc01zZyAgICBB IHBvaW50ZXIgdG8gdGhlIFJFTU9URV9ORElTX01TR19IRUFERVIgZGF0YS4NCj4gKw0KPiArKiov DQo+ICtWT0lEDQo+ICtQcmludFJuZGlzTXNnICgNCj4gKyAgSU4gIFJFTU9URV9ORElTX01TR19I RUFERVIgICpSbmRpc01zZw0KPiArICApDQo+ICt7DQo+ICsgIFVJTlROICAgICAgICAgICAgICAg ICAgICBMZW5ndGg7DQo+ICsgIFJFTU9URV9ORElTX1FVRVJZX0NNUExUICAqUm5kaXNRdWVyeUNt cGx0Ow0KPiArDQo+ICsgIExlbmd0aCA9IDA7DQo+ICsNCj4gKyAgc3dpdGNoIChSbmRpc01zZy0+ TWVzc2FnZVR5cGUpIHsNCj4gKyAgICBjYXNlIFJORElTX1BBQ0tFVF9NU0c6DQo+ICsgICAgICBE RUJVRyAoKERFQlVHX0lORk8sICJSTkRJU19QQUNLRVRfTVNHOlxuIikpOw0KPiArICAgICAgTGVu Z3RoID0gc2l6ZW9mIChSRU1PVEVfTkRJU19QQUNLRVRfTVNHKSArIDB4MTQ7DQo+ICsgICAgICBi cmVhazsNCj4gKyAgICBjYXNlIFJORElTX0lOSVRJQUxJWkVfTVNHOg0KPiArICAgICAgREVCVUcg KChERUJVR19JTkZPLCAiUk5ESVNfSU5JVElBTElaRV9NU0c6XG4iKSk7DQo+ICsgICAgICBMZW5n dGggPSBzaXplb2YgKFJFTU9URV9ORElTX0lOSVRJQUxJWkVfTVNHKTsNCj4gKyAgICAgIGJyZWFr Ow0KPiArICAgIGNhc2UgUk5ESVNfSU5JVElBTElaRV9DTVBMVDoNCj4gKyAgICAgIERFQlVHICgo REVCVUdfSU5GTywgIlJORElTX0lOSVRJQUxJWkVfQ01QTFQ6XG4iKSk7DQo+ICsgICAgICBMZW5n dGggPSBzaXplb2YgKFJFTU9URV9ORElTX0lOSVRJQUxJWkVfQ01QTFQpOw0KPiArICAgICAgYnJl YWs7DQo+ICsgICAgY2FzZSBSTkRJU19ITFRfTVNHOg0KPiArICAgICAgREVCVUcgKChERUJVR19J TkZPLCAiUk5ESVNfSExUX01TRzpcbiIpKTsNCj4gKyAgICAgIExlbmd0aCA9IHNpemVvZiAoUkVN T1RFX05ESVNfSEFMVF9NU0cpOw0KPiArICAgICAgYnJlYWs7DQo+ICsgICAgY2FzZSBSTkRJU19R VUVSWV9NU0c6DQo+ICsgICAgICBERUJVRyAoKERFQlVHX0lORk8sICJSTkRJU19RVUVSWV9NU0c6 XG4iKSk7DQo+ICsgICAgICBMZW5ndGggPSBzaXplb2YgKFJFTU9URV9ORElTX1FVRVJZX01TRyk7 DQo+ICsgICAgICBicmVhazsNCj4gKyAgICBjYXNlIFJORElTX1FVRVJZX0NNUExUOg0KPiArICAg ICAgREVCVUcgKChERUJVR19JTkZPLCAiUk5ESVNfUVVFUllfQ01QTFQ6XG4iKSk7DQo+ICsgICAg ICBSbmRpc1F1ZXJ5Q21wbHQgPSAoUkVNT1RFX05ESVNfUVVFUllfQ01QTFQgKilSbmRpc01zZzsN Cj4gKyAgICAgIExlbmd0aCAgICAgICAgICA9IHNpemVvZiAoUkVNT1RFX05ESVNfUVVFUllfQ01Q TFQpICsgUm5kaXNRdWVyeUNtcGx0LQ0KPiA+SW5mb3JtYXRpb25CdWZmZXJMZW5ndGg7DQo+ICsg ICAgICBicmVhazsNCj4gKyAgICBjYXNlIFJORElTX1NFVF9NU0c6DQo+ICsgICAgICBERUJVRyAo KERFQlVHX0lORk8sICJSTkRJU19TRVRfTVNHOlxuIikpOw0KPiArICAgICAgTGVuZ3RoID0gc2l6 ZW9mIChSRU1PVEVfTkRJU19TRVRfTVNHKTsNCj4gKyAgICAgIGJyZWFrOw0KPiArICAgIGNhc2Ug Uk5ESVNfU0VUX0NNUExUOg0KPiArICAgICAgREVCVUcgKChERUJVR19JTkZPLCAiUk5ESVNfU0VU X0NNUExUOlxuIikpOw0KPiArICAgICAgTGVuZ3RoID0gc2l6ZW9mIChSRU1PVEVfTkRJU19TRVRf Q01QTFQpOw0KPiArICAgICAgYnJlYWs7DQo+ICsgICAgY2FzZSBSTkRJU19SRVNFVF9NU0c6DQo+ ICsgICAgICBERUJVRyAoKERFQlVHX0lORk8sICJSTkRJU19SRVNFVF9NU0c6XG4iKSk7DQo+ICsg ICAgICBMZW5ndGggPSBzaXplb2YgKFJFTU9URV9ORElTX1JFU0VUX01TRyk7DQo+ICsgICAgICBi cmVhazsNCj4gKyAgICBjYXNlIFJORElTX1JFU0VUX0NNUExUOg0KPiArICAgICAgREVCVUcgKChE RUJVR19JTkZPLCAiUk5ESVNfUkVTRVRfQ01QTFQ6XG4iKSk7DQo+ICsgICAgICBMZW5ndGggPSBz aXplb2YgKFJFTU9URV9ORElTX1JFU0VUX0NNUExUKTsNCj4gKyAgICAgIGJyZWFrOw0KPiArICAg IGNhc2UgUk5ESVNfSU5ESUNBVEVfU1RBVFVTX01TRzoNCj4gKyAgICAgIERFQlVHICgoREVCVUdf SU5GTywgIlJORElTX0lORElDQVRFX1NUQVRVU19NU0c6XG4iKSk7DQo+ICsgICAgICBMZW5ndGgg PSBzaXplb2YgKFJFTU9URV9ORElTX0lORElDQVRFX1NUQVRVU19NU0cpOw0KPiArICAgICAgYnJl YWs7DQo+ICsgICAgY2FzZSBSTkRJU19LRUVQQUxJVkVfTVNHOg0KPiArICAgICAgREVCVUcgKChE RUJVR19JTkZPLCAiUk5ESVNfS0VFUEFMSVZFX01TRzpcbiIpKTsNCj4gKyAgICAgIExlbmd0aCA9 IHNpemVvZiAoUkVNT1RFX05ESVNfS0VFUEFMSVZFX01TRyk7DQo+ICsgICAgICBicmVhazsNCj4g KyAgICBjYXNlIFJORElTX0tFRVBBTElWRV9DTVBMVDoNCj4gKyAgICAgIERFQlVHICgoREVCVUdf SU5GTywgIlJORElTX0tFRVBBTElWRV9DTVBMVDpcbiIpKTsNCj4gKyAgICAgIExlbmd0aCA9IHNp emVvZiAoUkVNT1RFX05ESVNfS0VFUEFMSVZFX0NNUExUKTsNCj4gKyAgfQ0KPiArDQo+ICsgIGlm IChMZW5ndGgpIHsNCj4gKyAgICBVSU5UTiAgSW5kZXggPSAwOw0KPiArICAgIGZvciAoIDsgTGVu Z3RoOyBMZW5ndGggLT0gNCwgSW5kZXgrKykgew0KPiArICAgICAgREVCVUcgKChERUJVR19JTkZP LCAiJThYXHQiLCAqKChVSU5UMzIgKilSbmRpc01zZyArIEluZGV4KSkpOw0KPiArICAgICAgaWYg KCgoSW5kZXggJSA0KSA9PSAzKSAmJiAoSW5kZXggIT0gMCkpIHsNCj4gKyAgICAgICAgREVCVUcg KChERUJVR19JTkZPLCAiXG4iKSk7DQo+ICsgICAgICB9DQo+ICsNCj4gKyAgICAgIGlmICgoTGVu Z3RoIDwgOCkgJiYgKExlbmd0aCA+IDQpKSB7DQo+ICsgICAgICAgIFVJTlQzMiAgRGF0YTMyOw0K PiArICAgICAgICBJbmRleCsrOw0KPiArICAgICAgICBEYXRhMzIgPSAqKChVSU5UMzIgKilSbmRp c01zZyArIEluZGV4KTsNCj4gKyAgICAgICAgREVCVUcgKChERUJVR19JTkZPLCAiJThYXHQiLCBE YXRhMzIpKTsNCj4gKyAgICAgICAgYnJlYWs7DQo+ICsgICAgICB9DQo+ICsgICAgfQ0KPiArDQo+ ICsgICAgaWYgKEluZGV4ICUgNCkgew0KPiArICAgICAgREVCVUcgKChERUJVR19JTkZPLCAiXG4i KSk7DQo+ICsgICAgfQ0KPiArICB9DQo+ICt9DQo+IGRpZmYgLS1naXQgYS9NZGVNb2R1bGVQa2cv SW5jbHVkZS9Qcm90b2NvbC9Vc2JFdGhlcm5ldFByb3RvY29sLmgNCj4gYi9NZGVNb2R1bGVQa2cv SW5jbHVkZS9Qcm90b2NvbC9Vc2JFdGhlcm5ldFByb3RvY29sLmgNCj4gbmV3IGZpbGUgbW9kZSAx MDA2NDQNCj4gaW5kZXggMDAwMDAwMDAwMC4uODAwOTQ1ZDRiMw0KPiAtLS0gL2Rldi9udWxsDQo+ ICsrKyBiL01kZU1vZHVsZVBrZy9JbmNsdWRlL1Byb3RvY29sL1VzYkV0aGVybmV0UHJvdG9jb2wu aA0KPiBAQCAtMCwwICsxLDg3OCBAQA0KPiArLyoqIEBmaWxlDQo+ICsgIEhlYWRlciBmaWxlIGNv bnRhaW5zIGNvZGUgZm9yIFVTQiBFdGhlcm5ldCBQcm90b2NvbA0KPiArICBkZWZpbml0aW9ucw0K PiArDQo+ICsgIENvcHlyaWdodCAoYykgMjAyMywgQW1lcmljYW4gTWVnYXRyZW5kcyBJbnRlcm5h dGlvbmFsIExMQy4gQWxsIHJpZ2h0cw0KPiByZXNlcnZlZC48QlI+DQo+ICsgIFNQRFgtTGljZW5z ZS1JZGVudGlmaWVyOiBCU0QtMi1DbGF1c2UtUGF0ZW50DQo+ICsqKi8NCj4gKw0KPiArI2lmbmRl ZiBVU0JfRVRIRVJORVRfUFJPVE9DT0xfSF8NCj4gKyNkZWZpbmUgVVNCX0VUSEVSTkVUX1BST1RP Q09MX0hfDQo+ICsNCj4gKyNkZWZpbmUgRURLSUlfVVNCX0VUSEVSTkVUX1BST1RPQ09MX0dVSUQg XA0KPiArICAgIHsweDhkODk2OWNjLCAweGZlYjAsIDB4NDMwMywgezB4YjIsIDB4MWEsIDB4MWYs IDB4MTEsIDB4NmYsIDB4MzgsIDB4NTYsDQo+IDB4NDN9fQ0KPiArDQo+ICt0eXBlZGVmIHN0cnVj dCBfRURLSUlfVVNCX0VUSEVSTkVUX1BST1RPQ09MDQo+IEVES0lJX1VTQl9FVEhFUk5FVF9QUk9U T0NPTDsNCj4gKw0KPiArI2RlZmluZSBVU0JfQ0RDX0NMQVNTICAgICAgICAgIDB4MDINCj4gKyNk ZWZpbmUgVVNCX0NEQ19BQ01fU1VCQ0xBU1MgICAweDAyDQo+ICsjZGVmaW5lIFVTQl9DRENfRUNN X1NVQkNMQVNTICAgMHgwNg0KPiArI2RlZmluZSBVU0JfQ0RDX05DTV9TVUJDTEFTUyAgIDB4MEQN Cj4gKyNkZWZpbmUgVVNCX0NEQ19EQVRBX0NMQVNTICAgICAweDBBDQo+ICsjZGVmaW5lIFVTQl9D RENfREFUQV9TVUJDTEFTUyAgMHgwMA0KPiArI2RlZmluZSBVU0JfTk9fQ0xBU1NfUFJPVE9DT0wg IDB4MDANCj4gKyNkZWZpbmUgVVNCX05DTV9OVEJfUFJPVE9DT0wgICAweDAxDQo+ICsjZGVmaW5l IFVTQl9WRU5ET1JfUFJPVE9DT0wgICAgMHhGRg0KPiArDQo+ICsvLyBUeXBlIFZhbHVlcyBmb3Ig dGhlIERlc2NyaXB0b3JUeXBlIEZpZWxkDQo+ICsjZGVmaW5lIENTX0lOVEVSRkFDRSAgMHgyNA0K PiArI2RlZmluZSBDU19FTkRQT0lOVCAgIDB4MjUNCj4gKw0KPiArLy8gRGVzY3JpcHRvciBTdWJU eXBlIGluIEZ1bmN0aW9uYWwgRGVzY3JpcHRvcnMNCj4gKyNkZWZpbmUgSEVBREVSX0ZVTl9ERVND UklQVE9SICAgIDB4MDANCj4gKyNkZWZpbmUgVU5JT05fRlVOX0RFU0NSSVBUT1IgICAgIDB4MDYN Cj4gKyNkZWZpbmUgRVRIRVJORVRfRlVOX0RFU0NSSVBUT1IgIDB4MEYNCj4gKw0KPiArI2RlZmlu ZSBNQVhfTEFOX0lOVEVSRkFDRSAgMHgxMA0KPiArDQo+ICsvLyBUYWJsZSAyMDogQ2xhc3MtU3Bl Y2lmaWMgTm90aWZpY2F0aW9uIENvZGVzDQo+ICsjZGVmaW5lIFVTQl9DRENfTkVUV09SS19DT05O RUNUSU9OICAweDAwDQo+ICsNCj4gKy8vIDYuMy4xIE5ldHdvcmtDb25uZWN0aW9uDQo+ICsjZGVm aW5lIE5FVFdPUktfQ09OTkVDVEVEICAgMHgwMQ0KPiArI2RlZmluZSBORVRXT1JLX0RJU0NPTk5F Q1QgIDB4MDANCj4gKw0KPiArLy8gVVNCIEhlYWRlciBmdW5jdGlvbmFsIERlc2NyaXB0b3INCj4g K3R5cGVkZWYgc3RydWN0IHsNCj4gKyAgVUlOVDggICAgIEZ1bmN0aW9uTGVuZ3RoOw0KPiArICBV SU5UOCAgICAgRGVzY3JpcHRvclR5cGU7DQo+ICsgIFVJTlQ4ICAgICBEZXNjcmlwdG9yU3VidHlw ZTsNCj4gKyAgVUlOVDE2ICAgIEJjZENkYzsNCj4gK30gVVNCX0hFQURFUl9GVU5fREVTQ1JJUFRP UjsNCj4gKw0KPiArLy8gVVNCIFVuaW9uIEZ1bmN0aW9uYWwgRGVzY3JpcHRvcg0KPiArdHlwZWRl ZiBzdHJ1Y3Qgew0KPiArICBVSU5UOCAgICBGdW5jdGlvbkxlbmd0aDsNCj4gKyAgVUlOVDggICAg RGVzY3JpcHRvclR5cGU7DQo+ICsgIFVJTlQ4ICAgIERlc2NyaXB0b3JTdWJ0eXBlOw0KPiArICBV SU5UOCAgICBNYXN0ZXJJbnRlcmZhY2U7DQo+ICsgIFVJTlQ4ICAgIFNsYXZlSW50ZXJmYWNlOw0K PiArfSBVU0JfVU5JT05fRlVOX0RFU0NSSVBUT1I7DQo+ICsNCj4gKy8vIFVTQiBFdGhlcm5ldCBG dW5jdGlvbmFsIERlc2NyaXB0b3INCj4gK3R5cGVkZWYgc3RydWN0IHsNCj4gKyAgVUlOVDggICAg IEZ1bmN0aW9uTGVuZ3RoOw0KPiArICBVSU5UOCAgICAgRGVzY3JpcHRvclR5cGU7DQo+ICsgIFVJ TlQ4ICAgICBEZXNjcmlwdG9yU3VidHlwZTsNCj4gKyAgVUlOVDggICAgIE1hY0FkZHJlc3M7DQo+ ICsgIFVJTlQzMiAgICBFdGhlcm5ldFN0YXRpc3RpY3M7DQo+ICsgIFVJTlQxNiAgICBNYXhTZWdt ZW50U2l6ZTsNCj4gKyAgVUlOVDE2ICAgIE51bWJlck1jRmlsdGVyczsNCj4gKyAgVUlOVDggICAg IE51bWJlclBvd2VyRmlsdGVyczsNCj4gK30gVVNCX0VUSEVSTkVUX0ZVTl9ERVNDUklQVE9SOw0K PiArDQo+ICt0eXBlZGVmIHN0cnVjdCB7DQo+ICsgIFVJTlQzMiAgICBVc0JpdFJhdGU7DQo+ICsg IFVJTlQzMiAgICBEc0JpdFJhdGU7DQo+ICt9IFVTQl9DT05ORUNUX1NQRUVEX0NIQU5HRTsNCj4g Kw0KPiArLy8gUmVxdWVzdCBUeXBlIENvZGVzIGZvciBVU0IgRXRoZXJuZXQNCj4gKyNkZWZpbmUg VVNCX0VUSEVSTkVUX0dFVF9SRVFfVFlQRSAgMHhBMQ0KPiArI2RlZmluZSBVU0JfRVRIRVJORVRf U0VUX1JFUV9UWVBFICAweDIxDQo+ICsNCj4gKy8vIENsYXNzLVNwZWNpZmljIFJlcXVlc3QgQ29k ZXMgZm9yIEV0aGVybmV0IHN1YmNsYXNzDQo+ICsvLyBVU0IgRUNNIDEuMiBzcGVjaWZpY2F0aW9u LCBTZWN0aW9uIDYuMg0KPiArI2RlZmluZSBTRVRfRVRIX01VTFRJQ0FTVF9GSUxURVJTX1JFUSAg ICAgICAgICAgICAgICAweDQwDQo+ICsjZGVmaW5lIFNFVF9FVEhfUE9XRVJfTUFOQUdFTUVOVF9Q QVRURVJOX0ZJTFRFUl9SRVEgIDB4NDENCj4gKyNkZWZpbmUgR0VUX0VUSF9QT1dFUl9NQU5BR0VN RU5UX1BBVFRFUk5fRklMVEVSX1JFUSAgMHg0Mg0KPiArI2RlZmluZSBTRVRfRVRIX1BBQ0tFVF9G SUxURVJfUkVRICAgICAgICAgICAgICAgICAgICAweDQzDQo+ICsjZGVmaW5lIEdFVF9FVEhfU1RB VElTVElDX1JFUSAgICAgICAgICAgICAgICAgICAgICAgIDB4NDQNCj4gKw0KPiArLy8gVVNCIEVD TSBjb21tYW5kIHJlcXVlc3QgbGVuZ3RoDQo+ICsjZGVmaW5lIFVTQl9FVEhfUE9XRVJfRklMVEVS X0xFTkdUSCAgIDIgLy8gU2VjdGlvbiA2LjIuMw0KPiArI2RlZmluZSBVU0JfRVRIX1BBQ0tFVF9G SUxURVJfTEVOR1RIICAwIC8vIFNlY3Rpb24gNi4yLjQNCj4gKyNkZWZpbmUgVVNCX0VUSF9TVEFU SVNUSUMgICAgICAgICAgICAgNCAvLyBTZWN0aW9uIDYuMi41DQo+ICsNCj4gKy8vIFVTQiBFdGhl cm5ldCBQYWNrZXQgRmlsdGVyIEJpdG1hcA0KPiArLy8gVVNCIEVDTSAxLjIgc3BlY2lmaWNhdGlv biwgU2VjdGlvbiA2LjIuNA0KPiArI2RlZmluZSBVU0JfRVRIX1BBQ0tFVF9UWVBFX1BST01JU0NV T1VTICAgIEJJVDANCj4gKyNkZWZpbmUgVVNCX0VUSF9QQUNLRVRfVFlQRV9BTExfTVVMVElDQVNU ICBCSVQxDQo+ICsjZGVmaW5lIFVTQl9FVEhfUEFDS0VUX1RZUEVfRElSRUNURUQgICAgICAgQklU Mg0KPiArI2RlZmluZSBVU0JfRVRIX1BBQ0tFVF9UWVBFX0JST0FEQ0FTVCAgICAgIEJJVDMNCj4g KyNkZWZpbmUgVVNCX0VUSF9QQUNLRVRfVFlQRV9NVUxUSUNBU1QgICAgICBCSVQ0DQo+ICsNCj4g Ky8vIFVTQiBFdGhlcm5ldCBTdGF0aXN0aWNzIEZlYXR1cmUgU2VsZWN0b3IgQ29kZXMNCj4gKy8v IFVTQiBFQ00gMS4yIHNwZWNpZmljYXRpb24sIFNlY3Rpb24gNi4yLjUNCj4gKyNkZWZpbmUgVVNC X0VUSF9YTUlUX09LICAgICAgICAgICAgICAgICAweDAxDQo+ICsjZGVmaW5lIFVTQl9FVEhfUkNW X09LICAgICAgICAgICAgICAgICAgMHgwMg0KPiArI2RlZmluZSBVU0JfRVRIX1hNSVRfRVJST1Ig ICAgICAgICAgICAgIDB4MDMNCj4gKyNkZWZpbmUgVVNCX0VUSF9SQ1ZfRVJST1IgICAgICAgICAg ICAgICAweDA0DQo+ICsjZGVmaW5lIFVTQl9FVEhfUkNWX05PX0JVRkZFUiAgICAgICAgICAgMHgw NQ0KPiArI2RlZmluZSBVU0JfRVRIX0RJUkVDVEVEX0JZVEVTX1hNSVQgICAgIDB4MDYNCj4gKyNk ZWZpbmUgVVNCX0VUSF9ESVJFQ1RFRF9GUkFNRVNfWE1JVCAgICAweDA3DQo+ICsjZGVmaW5lIFVT Ql9FVEhfTVVMVElDQVNUX0JZVEVTX1hNSVQgICAgMHgwOA0KPiArI2RlZmluZSBVU0JfRVRIX01V TFRJQ0FTVF9GUkFNRVNfWE1JVCAgIDB4MDkNCj4gKyNkZWZpbmUgVVNCX0VUSF9CUk9BRENBU1Rf QllURVNfWE1JVCAgICAweDBBDQo+ICsjZGVmaW5lIFVTQl9FVEhfQlJPQURDQVNUX0ZSQU1FU19Y TUlUICAgMHgwQg0KPiArI2RlZmluZSBVU0JfRVRIX0RJUkVDVEVEX0JZVEVTX1JDViAgICAgIDB4 MEMNCj4gKyNkZWZpbmUgVVNCX0VUSF9ESVJFQ1RFRF9GUkFNRVNfUkNWICAgICAweDBEDQo+ICsj ZGVmaW5lIFVTQl9FVEhfTVVMVElDQVNUX0JZVEVTX1JDViAgICAgMHgwRQ0KPiArI2RlZmluZSBV U0JfRVRIX01VTFRJQ0FTVF9GUkFNRVNfUkNWICAgIDB4MEYNCj4gKyNkZWZpbmUgVVNCX0VUSF9C Uk9BRENBU1RfQllURVNfUkNWICAgICAweDEwDQo+ICsjZGVmaW5lIFVTQl9FVEhfQlJPQURDQVNU X0ZSQU1FU19SQ1YgICAgMHgxMQ0KPiArI2RlZmluZSBVU0JfRVRIX1JDVl9DUkNfRVJST1IgICAg ICAgICAgIDB4MTINCj4gKyNkZWZpbmUgVVNCX0VUSF9UUkFOU01JVF9RVUVVRV9MRU5HVEggICAw eDEzDQo+ICsjZGVmaW5lIFVTQl9FVEhfUkNWX0VSUk9SX0FMSUdOTUVOVCAgICAgMHgxNA0KPiAr I2RlZmluZSBVU0JfRVRIX1hNSVRfT05FX0NPTExJU0lPTiAgICAgIDB4MTUNCj4gKyNkZWZpbmUg VVNCX0VUSF9YTUlUX01PUkVfQ09MTElTSU9OUyAgICAweDE2DQo+ICsjZGVmaW5lIFVTQl9FVEhf WE1JVF9ERUZFUlJFRCAgICAgICAgICAgMHgxNw0KPiArI2RlZmluZSBVU0JfRVRIX1hNSVRfTUFY X0NPTExJU0lPTlMgICAgIDB4MTgNCj4gKyNkZWZpbmUgVVNCX0VUSF9SQ1ZfT1ZFUlJVTiAgICAg ICAgICAgICAweDE5DQo+ICsjZGVmaW5lIFVTQl9FVEhfWE1JVF9VTkRFUlJVTiAgICAgICAgICAg MHgxQQ0KPiArI2RlZmluZSBVU0JfRVRIX1hNSVRfSEVBUlRCRUFUX0ZBSUxVUkUgIDB4MUINCj4g KyNkZWZpbmUgVVNCX0VUSF9YTUlUX1RJTUVTX0NSU19MT1NUICAgICAweDFDDQo+ICsjZGVmaW5l IFVTQl9FVEhfWE1JVF9MQVRFX0NPTExJU0lPTlMgICAgMHgxRA0KPiArDQo+ICsvLyBOSUMgSW5m b3JtYXRpb24NCj4gK3R5cGVkZWYgc3RydWN0IHsNCj4gKyAgVUlOVDMyICAgICAgICAgICAgICAg ICAgICAgICAgIFNpZ25hdHVyZTsNCj4gKyAgRURLSUlfVVNCX0VUSEVSTkVUX1BST1RPQ09MICAg ICpVc2JFdGg7DQo+ICsgIFVJTlQxNiAgICAgICAgICAgICAgICAgICAgICAgICBJbnRlcnJ1cE9w RmxhZzsNCj4gKyAgVUlOVDY0ICAgICAgICAgICAgICAgICAgICAgICAgIE1hcHBlZEFkZHI7DQo+ ICsgIFBYRV9NQUNfQUREUiAgICAgICAgICAgICAgICAgICBNY2FzdExpc3RbTUFYX01DQVNUX0FE RFJFU1NfQ05UXTsNCj4gKyAgVUlOVDggICAgICAgICAgICAgICAgICAgICAgICAgIE1jYXN0Q291 bnQ7DQo+ICsgIFVJTlQ2NCAgICAgICAgICAgICAgICAgICAgICAgICBNZWRpYUhlYWRlcltNQVhf WE1JVF9CVUZGRVJTXTsNCj4gKyAgVUlOVDggICAgICAgICAgICAgICAgICAgICAgICAgIFR4QnVm ZmVyQ291bnQ7DQo+ICsgIFVJTlQxNiAgICAgICAgICAgICAgICAgICAgICAgICBTdGF0ZTsNCj4g KyAgQk9PTEVBTiAgICAgICAgICAgICAgICAgICAgICAgIENhblRyYW5zbWl0Ow0KPiArICBVSU5U MTYgICAgICAgICAgICAgICAgICAgICAgICAgUmVjZWl2ZVN0YXR1czsNCj4gKyAgVUlOVDggICAg ICAgICAgICAgICAgICAgICAgICAgIFJ4RmlsdGVyOw0KPiArICBVSU5UMzIgICAgICAgICAgICAg ICAgICAgICAgICAgUnhGcmFtZTsNCj4gKyAgVUlOVDMyICAgICAgICAgICAgICAgICAgICAgICAg IFR4RnJhbWU7DQo+ICsgIFVJTlQxNiAgICAgICAgICAgICAgICAgICAgICAgICBOZXR3b3JrQ29u bmVjdDsNCj4gKyAgVUlOVDggICAgICAgICAgICAgICAgICAgICAgICAgIENhYmxlRGV0ZWN0Ow0K PiArICBVSU5UMTYgICAgICAgICAgICAgICAgICAgICAgICAgTWF4U2VnbWVudFNpemU7DQo+ICsg IEVGSV9NQUNfQUREUkVTUyAgICAgICAgICAgICAgICBNYWNBZGRyOw0KPiArICBQWEVfQ1BCX1NU QVJUXzMxICAgICAgICAgICAgICAgUHhlU3RhcnQ7DQo+ICsgIFBYRV9DUEJfSU5JVElBTElaRSAg ICAgICAgICAgICBQeGVJbml0Ow0KPiArICBVSU5UOCAgICAgICAgICAgICAgICAgICAgICAgICAg UGVybU5vZGVBZGRyZXNzW1BYRV9NQUNfTEVOR1RIXTsNCj4gKyAgVUlOVDggICAgICAgICAgICAg ICAgICAgICAgICAgIEN1cnJlbnROb2RlQWRkcmVzc1tQWEVfTUFDX0xFTkdUSF07DQo+ICsgIFVJ TlQ4ICAgICAgICAgICAgICAgICAgICAgICAgICBCcm9hZGNhc3ROb2RlQWRkcmVzc1tQWEVfTUFD X0xFTkdUSF07DQo+ICsgIEVGSV9VU0JfREVWSUNFX1JFUVVFU1QgICAgICAgICBSZXF1ZXN0Ow0K PiArICBFRklfRVZFTlQgICAgICAgICAgICAgICAgICAgICAgUmF0ZUxpbWl0ZXI7DQo+ICsgIFVJ TlQzMiAgICAgICAgICAgICAgICAgICAgICAgICBSYXRlTGltaXRpbmdDcmVkaXQ7DQo+ICsgIFVJ TlQzMiAgICAgICAgICAgICAgICAgICAgICAgICBSYXRlTGltaXRpbmdDcmVkaXRDb3VudDsNCj4g KyAgVUlOVDMyICAgICAgICAgICAgICAgICAgICAgICAgIFJhdGVMaW1pdGluZ1BvbGxUaW1lcjsN Cj4gKyAgQk9PTEVBTiAgICAgICAgICAgICAgICAgICAgICAgIFJhdGVMaW1pdGluZ0VuYWJsZTsN Cj4gK30gTklDX0RBVEE7DQo+ICsNCj4gKyNkZWZpbmUgTklDX0RBVEFfU0lHTkFUVVJFICBTSUdO QVRVUkVfMzIoJ24nLCAnaScsICdjJywgJ2QnKQ0KPiArI2RlZmluZSBOSUNfREFUQV9GUk9NX0VE S0lJX1VTQl9FVEhFUk5FVF9QUk9UT0NPTChhKSAgQ1IgKGEsDQo+IE5JQ19EQVRBLCBVc2JFdGgs IE5JQ19EQVRBX1NJR05BVFVSRSkNCj4gKw0KPiArLyoqDQo+ICsgIFRoaXMgY29tbWFuZCBpcyB1 c2VkIHRvIGRldGVybWluZSB0aGUgb3BlcmF0aW9uYWwgc3RhdGUgb2YgdGhlIFVOREkuDQo+ICsN Cj4gKyAgQHBhcmFtW2luXSAgQ2RiICBBIHBvaW50ZXIgdG8gdGhlIGNvbW1hbmQgZGVzY3JpcHRv ciBibG9jay4NCj4gKyAgQHBhcmFtW2luXSAgTmljICBBIHBvaW50ZXIgdG8gdGhlIE5ldHdvcmsg aW50ZXJmYWNlIGNvbnRyb2xsZXIgZGF0YS4NCj4gKw0KPiArICBAcmV0dmFsIEVGSV9TVUNDRVNT ICAgICAgICAgICBUaGUgcmVxdWVzdCBleGVjdXRlZCBzdWNjZXNzZnVsbHkuDQo+ICsgIEByZXR2 YWwgRUZJX1RJTUVPVVQgICAgICAgICAgIEEgdGltZW91dCBvY2N1cnJlZCBleGVjdXRpbmcgdGhl IHJlcXVlc3QuDQo+ICsgIEByZXR2YWwgRUZJX0RFVklDRV9FUlJPUiAgICAgIFRoZSByZXF1ZXN0 IGZhaWxlZCBkdWUgdG8gYSBkZXZpY2UgZXJyb3IuDQo+ICsgIEByZXR2YWwgRUZJX0lOVkFMSURf UEFSQU1FVEVSIE9uZSBvZiB0aGUgcGFyYW1ldGVycyBoYXMgYW4gaW52YWxpZA0KPiB2YWx1ZS4N Cj4gKyAgQHJldHZhbCBFRklfVU5TVVBQT1JURUQgICAgICAgTm90IHN1cHBvcnRlZC4NCj4gKyoq Lw0KPiArdHlwZWRlZg0KPiArRUZJX1NUQVRVUw0KPiArKEVGSUFQSSAqRURLSUlfVVNCX0VUSEVS TkVUX1VORElfR0VUX1NUQVRFKSgNCj4gKyAgSU4gIFBYRV9DREIgICAgICpDZGIsDQo+ICsgIElO ICBOSUNfREFUQSAgICAqTmljDQo+ICsgICk7DQo+ICsNCj4gKy8qKg0KPiArICBUaGlzIGNvbW1h bmQgaXMgdXNlZCB0byBjaGFuZ2UgdGhlIFVOREkgb3BlcmF0aW9uYWwgc3RhdGUgZnJvbSBzdG9w cGVkIHRvDQo+IHN0YXJ0ZWQuDQo+ICsNCj4gKyAgQHBhcmFtW2luXSAgQ2RiICBBIHBvaW50ZXIg dG8gdGhlIGNvbW1hbmQgZGVzY3JpcHRvciBibG9jay4NCj4gKyAgQHBhcmFtW2luXSAgTmljICBB IHBvaW50ZXIgdG8gdGhlIE5ldHdvcmsgaW50ZXJmYWNlIGNvbnRyb2xsZXIgZGF0YS4NCj4gKw0K PiArICBAcmV0dmFsIEVGSV9TVUNDRVNTICAgICAgICAgICBUaGUgcmVxdWVzdCBleGVjdXRlZCBz dWNjZXNzZnVsbHkuDQo+ICsgIEByZXR2YWwgRUZJX1RJTUVPVVQgICAgICAgICAgIEEgdGltZW91 dCBvY2N1cnJlZCBleGVjdXRpbmcgdGhlIHJlcXVlc3QuDQo+ICsgIEByZXR2YWwgRUZJX0RFVklD RV9FUlJPUiAgICAgIFRoZSByZXF1ZXN0IGZhaWxlZCBkdWUgdG8gYSBkZXZpY2UgZXJyb3IuDQo+ ICsgIEByZXR2YWwgRUZJX0lOVkFMSURfUEFSQU1FVEVSIE9uZSBvZiB0aGUgcGFyYW1ldGVycyBo YXMgYW4gaW52YWxpZA0KPiB2YWx1ZS4NCj4gKyAgQHJldHZhbCBFRklfVU5TVVBQT1JURUQgICAg ICAgTm90IHN1cHBvcnRlZC4NCj4gKyoqLw0KPiArdHlwZWRlZg0KPiArRUZJX1NUQVRVUw0KPiAr KEVGSUFQSSAqRURLSUlfVVNCX0VUSEVSTkVUX1VORElfU1RBUlQpKA0KPiArICBJTiAgUFhFX0NE QiAgICAgKkNkYiwNCj4gKyAgSU4gIE5JQ19EQVRBICAgICpOaWMNCj4gKyAgKTsNCj4gKw0KPiAr LyoqDQo+ICsgIFRoaXMgY29tbWFuZCBpcyB1c2VkIHRvIGNoYW5nZSB0aGUgVU5ESSBvcGVyYXRp b25hbCBzdGF0ZSBmcm9tIHN0YXJ0ZWQgdG8NCj4gc3RvcHBlZC4NCj4gKw0KPiArICBAcGFyYW1b aW5dICBDZGIgIEEgcG9pbnRlciB0byB0aGUgY29tbWFuZCBkZXNjcmlwdG9yIGJsb2NrLg0KPiAr ICBAcGFyYW1baW5dICBOaWMgIEEgcG9pbnRlciB0byB0aGUgTmV0d29yayBpbnRlcmZhY2UgY29u dHJvbGxlciBkYXRhLg0KPiArDQo+ICsgIEByZXR2YWwgRUZJX1NVQ0NFU1MgICAgICAgICAgIFRo ZSByZXF1ZXN0IGV4ZWN1dGVkIHN1Y2Nlc3NmdWxseS4NCj4gKyAgQHJldHZhbCBFRklfVElNRU9V VCAgICAgICAgICAgQSB0aW1lb3V0IG9jY3VycmVkIGV4ZWN1dGluZyB0aGUgcmVxdWVzdC4NCj4g KyAgQHJldHZhbCBFRklfREVWSUNFX0VSUk9SICAgICAgVGhlIHJlcXVlc3QgZmFpbGVkIGR1ZSB0 byBhIGRldmljZSBlcnJvci4NCj4gKyAgQHJldHZhbCBFRklfSU5WQUxJRF9QQVJBTUVURVIgT25l IG9mIHRoZSBwYXJhbWV0ZXJzIGhhcyBhbiBpbnZhbGlkDQo+IHZhbHVlLg0KPiArICBAcmV0dmFs IEVGSV9VTlNVUFBPUlRFRCAgICAgICBOb3Qgc3VwcG9ydGVkLg0KPiArKiovDQo+ICt0eXBlZGVm DQo+ICtFRklfU1RBVFVTDQo+ICsoRUZJQVBJICpFREtJSV9VU0JfRVRIRVJORVRfVU5ESV9TVE9Q KSgNCj4gKyAgSU4gIFBYRV9DREIgICAgICpDZGIsDQo+ICsgIElOICBOSUNfREFUQSAgICAqTmlj DQo+ICsgICk7DQo+ICsNCj4gKy8qKg0KPiArICBUaGlzIGNvbW1hbmQgaXMgdXNlZCB0byByZXRy aWV2ZSBpbml0aWFsaXphdGlvbiBpbmZvcm1hdGlvbiB0aGF0IGlzDQo+ICsgIG5lZWRlZCBieSBk cml2ZXJzIGFuZCBhcHBsaWNhdGlvbnMgdG8gaW5pdGlhbGl6ZWQgVU5ESS4NCj4gKw0KPiArICBA cGFyYW1baW5dICBDZGIgIEEgcG9pbnRlciB0byB0aGUgY29tbWFuZCBkZXNjcmlwdG9yIGJsb2Nr Lg0KPiArICBAcGFyYW1baW5dICBOaWMgIEEgcG9pbnRlciB0byB0aGUgTmV0d29yayBpbnRlcmZh Y2UgY29udHJvbGxlciBkYXRhLg0KPiArDQo+ICsgIEByZXR2YWwgRUZJX1NVQ0NFU1MgICAgICAg ICAgIFRoZSByZXF1ZXN0IGV4ZWN1dGVkIHN1Y2Nlc3NmdWxseS4NCj4gKyAgQHJldHZhbCBFRklf VElNRU9VVCAgICAgICAgICAgQSB0aW1lb3V0IG9jY3VycmVkIGV4ZWN1dGluZyB0aGUgcmVxdWVz dC4NCj4gKyAgQHJldHZhbCBFRklfREVWSUNFX0VSUk9SICAgICAgVGhlIHJlcXVlc3QgZmFpbGVk IGR1ZSB0byBhIGRldmljZSBlcnJvci4NCj4gKyAgQHJldHZhbCBFRklfSU5WQUxJRF9QQVJBTUVU RVIgT25lIG9mIHRoZSBwYXJhbWV0ZXJzIGhhcyBhbiBpbnZhbGlkDQo+IHZhbHVlLg0KPiArICBA cmV0dmFsIEVGSV9VTlNVUFBPUlRFRCAgICAgICBOb3Qgc3VwcG9ydGVkLg0KPiArKiovDQo+ICt0 eXBlZGVmDQo+ICtFRklfU1RBVFVTDQo+ICsoRUZJQVBJICpFREtJSV9VU0JfRVRIRVJORVRfVU5E SV9HRVRfSU5JVF9JTkZPKSgNCj4gKyAgSU4gIFBYRV9DREIgICAgICpDZGIsDQo+ICsgIElOICBO SUNfREFUQSAgICAqTmljDQo+ICsgICk7DQo+ICsNCj4gKy8qKg0KPiArICBUaGlzIGNvbW1hbmQg aXMgdXNlZCB0byByZXRyaWV2ZSBjb25maWd1cmF0aW9uIGluZm9ybWF0aW9uIGFib3V0DQo+ICsg IHRoZSBOSUMgYmVpbmcgY29udHJvbGxlZCBieSB0aGUgVU5ESS4NCj4gKw0KPiArICBAcGFyYW1b aW5dICBDZGIgIEEgcG9pbnRlciB0byB0aGUgY29tbWFuZCBkZXNjcmlwdG9yIGJsb2NrLg0KPiAr ICBAcGFyYW1baW5dICBOaWMgIEEgcG9pbnRlciB0byB0aGUgTmV0d29yayBpbnRlcmZhY2UgY29u dHJvbGxlciBkYXRhLg0KPiArDQo+ICsgIEByZXR2YWwgRUZJX1NVQ0NFU1MgICAgICAgICAgIFRo ZSByZXF1ZXN0IGV4ZWN1dGVkIHN1Y2Nlc3NmdWxseS4NCj4gKyAgQHJldHZhbCBFRklfVElNRU9V VCAgICAgICAgICAgQSB0aW1lb3V0IG9jY3VycmVkIGV4ZWN1dGluZyB0aGUgcmVxdWVzdC4NCj4g KyAgQHJldHZhbCBFRklfREVWSUNFX0VSUk9SICAgICAgVGhlIHJlcXVlc3QgZmFpbGVkIGR1ZSB0 byBhIGRldmljZSBlcnJvci4NCj4gKyAgQHJldHZhbCBFRklfSU5WQUxJRF9QQVJBTUVURVIgT25l IG9mIHRoZSBwYXJhbWV0ZXJzIGhhcyBhbiBpbnZhbGlkDQo+IHZhbHVlLg0KPiArICBAcmV0dmFs IEVGSV9VTlNVUFBPUlRFRCAgICAgICBOb3Qgc3VwcG9ydGVkLg0KPiArKiovDQo+ICt0eXBlZGVm DQo+ICtFRklfU1RBVFVTDQo+ICsoRUZJQVBJICpFREtJSV9VU0JfRVRIRVJORVRfVU5ESV9HRVRf Q09ORklHX0lORk8pKA0KPiArICBJTiAgUFhFX0NEQiAgICAgKkNkYiwNCj4gKyAgSU4gIE5JQ19E QVRBICAgICpOaWMNCj4gKyAgKTsNCj4gKw0KPiArLyoqDQo+ICsgIFRoaXMgY29tbWFuZCByZXNl dHMgdGhlIG5ldHdvcmsgYWRhcHRlciBhbmQgaW5pdGlhbGl6ZXMgVU5ESSB1c2luZw0KPiArICB0 aGUgcGFyYW1ldGVycyBzdXBwbGllZCBpbiB0aGUgQ1BCLg0KPiArDQo+ICsgIEBwYXJhbVtpbl0g IENkYiAgQSBwb2ludGVyIHRvIHRoZSBjb21tYW5kIGRlc2NyaXB0b3IgYmxvY2suDQo+ICsgIEBw YXJhbVtpbl0gIE5pYyAgQSBwb2ludGVyIHRvIHRoZSBOZXR3b3JrIGludGVyZmFjZSBjb250cm9s bGVyIGRhdGEuDQo+ICsNCj4gKyAgQHJldHZhbCBFRklfU1VDQ0VTUyAgICAgICAgICAgVGhlIHJl cXVlc3QgZXhlY3V0ZWQgc3VjY2Vzc2Z1bGx5Lg0KPiArICBAcmV0dmFsIEVGSV9USU1FT1VUICAg ICAgICAgICBBIHRpbWVvdXQgb2NjdXJyZWQgZXhlY3V0aW5nIHRoZSByZXF1ZXN0Lg0KPiArICBA cmV0dmFsIEVGSV9ERVZJQ0VfRVJST1IgICAgICBUaGUgcmVxdWVzdCBmYWlsZWQgZHVlIHRvIGEg ZGV2aWNlIGVycm9yLg0KPiArICBAcmV0dmFsIEVGSV9JTlZBTElEX1BBUkFNRVRFUiBPbmUgb2Yg dGhlIHBhcmFtZXRlcnMgaGFzIGFuIGludmFsaWQNCj4gdmFsdWUuDQo+ICsgIEByZXR2YWwgRUZJ X1VOU1VQUE9SVEVEICAgICAgIE5vdCBzdXBwb3J0ZWQuDQo+ICsqKi8NCj4gK3R5cGVkZWYNCj4g K0VGSV9TVEFUVVMNCj4gKyhFRklBUEkgKkVES0lJX1VTQl9FVEhFUk5FVF9VTkRJX0lOSVRJQUxJ WkUpKA0KPiArICBJTiAgUFhFX0NEQiAgICpDZGIsDQo+ICsgIElOICBOSUNfREFUQSAgKk5pYw0K PiArICApOw0KPiArDQo+ICsvKioNCj4gKyAgVGhpcyBjb21tYW5kIHJlc2V0cyB0aGUgbmV0d29y ayBhZGFwdGVyIGFuZCByZWluaXRpYWxpemVzIHRoZSBVTkRJDQo+ICsgIHdpdGggdGhlIHNhbWUg cGFyYW1ldGVycyBwcm92aWRlZCBpbiB0aGUgSW5pdGlhbGl6ZSBjb21tYW5kLg0KPiArDQo+ICsg IEBwYXJhbVtpbl0gIENkYiAgQSBwb2ludGVyIHRvIHRoZSBjb21tYW5kIGRlc2NyaXB0b3IgYmxv Y2suDQo+ICsgIEBwYXJhbVtpbl0gIE5pYyAgQSBwb2ludGVyIHRvIHRoZSBOZXR3b3JrIGludGVy ZmFjZSBjb250cm9sbGVyIGRhdGEuDQo+ICsNCj4gKyAgQHJldHZhbCBFRklfU1VDQ0VTUyAgICAg ICAgICAgVGhlIHJlcXVlc3QgZXhlY3V0ZWQgc3VjY2Vzc2Z1bGx5Lg0KPiArICBAcmV0dmFsIEVG SV9USU1FT1VUICAgICAgICAgICBBIHRpbWVvdXQgb2NjdXJyZWQgZXhlY3V0aW5nIHRoZSByZXF1 ZXN0Lg0KPiArICBAcmV0dmFsIEVGSV9ERVZJQ0VfRVJST1IgICAgICBUaGUgcmVxdWVzdCBmYWls ZWQgZHVlIHRvIGEgZGV2aWNlIGVycm9yLg0KPiArICBAcmV0dmFsIEVGSV9JTlZBTElEX1BBUkFN RVRFUiBPbmUgb2YgdGhlIHBhcmFtZXRlcnMgaGFzIGFuIGludmFsaWQNCj4gdmFsdWUuDQo+ICsg IEByZXR2YWwgRUZJX1VOU1VQUE9SVEVEICAgICAgIE5vdCBzdXBwb3J0ZWQuDQo+ICsqKi8NCj4g K3R5cGVkZWYNCj4gK0VGSV9TVEFUVVMNCj4gKyhFRklBUEkgKkVES0lJX1VTQl9FVEhFUk5FVF9V TkRJX1JFU0VUKSgNCj4gKyAgSU4gIFBYRV9DREIgICAgICpDZGIsDQo+ICsgIElOICBOSUNfREFU QSAgICAqTmljDQo+ICsgICk7DQo+ICsNCj4gKy8qKg0KPiArICBUaGUgU2h1dGRvd24gY29tbWFu ZCByZXNldHMgdGhlIG5ldHdvcmsgYWRhcHRlciBhbmQgbGVhdmVzIGl0IGluIGENCj4gKyAgc2Fm ZSBzdGF0ZSBmb3IgYW5vdGhlciBkcml2ZXIgdG8gaW5pdGlhbGl6ZS4NCj4gKw0KPiArICBAcGFy YW1baW5dICBDZGIgIEEgcG9pbnRlciB0byB0aGUgY29tbWFuZCBkZXNjcmlwdG9yIGJsb2NrLg0K PiArICBAcGFyYW1baW5dICBOaWMgIEEgcG9pbnRlciB0byB0aGUgTmV0d29yayBpbnRlcmZhY2Ug Y29udHJvbGxlciBkYXRhLg0KPiArDQo+ICsgIEByZXR2YWwgRUZJX1NVQ0NFU1MgICAgICAgICAg IFRoZSByZXF1ZXN0IGV4ZWN1dGVkIHN1Y2Nlc3NmdWxseS4NCj4gKyAgQHJldHZhbCBFRklfVElN RU9VVCAgICAgICAgICAgQSB0aW1lb3V0IG9jY3VycmVkIGV4ZWN1dGluZyB0aGUgcmVxdWVzdC4N Cj4gKyAgQHJldHZhbCBFRklfREVWSUNFX0VSUk9SICAgICAgVGhlIHJlcXVlc3QgZmFpbGVkIGR1 ZSB0byBhIGRldmljZSBlcnJvci4NCj4gKyAgQHJldHZhbCBFRklfSU5WQUxJRF9QQVJBTUVURVIg T25lIG9mIHRoZSBwYXJhbWV0ZXJzIGhhcyBhbiBpbnZhbGlkDQo+IHZhbHVlLg0KPiArICBAcmV0 dmFsIEVGSV9VTlNVUFBPUlRFRCAgICAgICBOb3Qgc3VwcG9ydGVkLg0KPiArKiovDQo+ICt0eXBl ZGVmDQo+ICtFRklfU1RBVFVTDQo+ICsoRUZJQVBJICpFREtJSV9VU0JfRVRIRVJORVRfVU5ESV9T SFVURE9XTikoDQo+ICsgIElOICBQWEVfQ0RCICAgICAqQ2RiLA0KPiArICBJTiAgTklDX0RBVEEg ICAgKk5pYw0KPiArICApOw0KPiArDQo+ICsvKioNCj4gKyAgVGhlIEludGVycnVwdCBFbmFibGVz IGNvbW1hbmQgY2FuIGJlIHVzZWQgdG8gcmVhZCBhbmQvb3IgY2hhbmdlDQo+ICsgIHRoZSBjdXJy ZW50IGV4dGVybmFsIGludGVycnVwdCBlbmFibGUgc2V0dGluZ3MuDQo+ICsNCj4gKyAgQHBhcmFt W2luXSAgQ2RiICBBIHBvaW50ZXIgdG8gdGhlIGNvbW1hbmQgZGVzY3JpcHRvciBibG9jay4NCj4g KyAgQHBhcmFtW2luXSAgTmljICBBIHBvaW50ZXIgdG8gdGhlIE5ldHdvcmsgaW50ZXJmYWNlIGNv bnRyb2xsZXIgZGF0YS4NCj4gKw0KPiArICBAcmV0dmFsIEVGSV9TVUNDRVNTICAgICAgICAgICBU aGUgcmVxdWVzdCBleGVjdXRlZCBzdWNjZXNzZnVsbHkuDQo+ICsgIEByZXR2YWwgRUZJX1RJTUVP VVQgICAgICAgICAgIEEgdGltZW91dCBvY2N1cnJlZCBleGVjdXRpbmcgdGhlIHJlcXVlc3QuDQo+ ICsgIEByZXR2YWwgRUZJX0RFVklDRV9FUlJPUiAgICAgIFRoZSByZXF1ZXN0IGZhaWxlZCBkdWUg dG8gYSBkZXZpY2UgZXJyb3IuDQo+ICsgIEByZXR2YWwgRUZJX0lOVkFMSURfUEFSQU1FVEVSIE9u ZSBvZiB0aGUgcGFyYW1ldGVycyBoYXMgYW4gaW52YWxpZA0KPiB2YWx1ZS4NCj4gKyAgQHJldHZh bCBFRklfVU5TVVBQT1JURUQgICAgICAgTm90IHN1cHBvcnRlZC4NCj4gKyoqLw0KPiArdHlwZWRl Zg0KPiArRUZJX1NUQVRVUw0KPiArKEVGSUFQSSAqRURLSUlfVVNCX0VUSEVSTkVUX1VORElfSU5U RVJSVVBUX0VOQUJMRSkoDQo+ICsgIElOICBQWEVfQ0RCICAgICAqQ2RiLA0KPiArICBJTiAgTklD X0RBVEEgICAgKk5pYw0KPiArICApOw0KPiArDQo+ICsvKioNCj4gKyAgVGhpcyBjb21tYW5kIGlz IHVzZWQgdG8gcmVhZCBhbmQgY2hhbmdlIHJlY2VpdmUgZmlsdGVycyBhbmQsDQo+ICsgIGlmIHN1 cHBvcnRlZCwgcmVhZCBhbmQgY2hhbmdlIHRoZSBtdWx0aWNhc3QgTUFDIGFkZHJlc3MgZmlsdGVy IGxpc3QuDQo+ICsNCj4gKyAgQHBhcmFtW2luXSAgQ2RiICBBIHBvaW50ZXIgdG8gdGhlIGNvbW1h bmQgZGVzY3JpcHRvciBibG9jay4NCj4gKyAgQHBhcmFtW2luXSAgTmljICBBIHBvaW50ZXIgdG8g dGhlIE5ldHdvcmsgaW50ZXJmYWNlIGNvbnRyb2xsZXIgZGF0YS4NCj4gKw0KPiArICBAcmV0dmFs IEVGSV9TVUNDRVNTICAgICAgICAgICBUaGUgcmVxdWVzdCBleGVjdXRlZCBzdWNjZXNzZnVsbHku DQo+ICsgIEByZXR2YWwgRUZJX1RJTUVPVVQgICAgICAgICAgIEEgdGltZW91dCBvY2N1cnJlZCBl eGVjdXRpbmcgdGhlIHJlcXVlc3QuDQo+ICsgIEByZXR2YWwgRUZJX0RFVklDRV9FUlJPUiAgICAg IFRoZSByZXF1ZXN0IGZhaWxlZCBkdWUgdG8gYSBkZXZpY2UgZXJyb3IuDQo+ICsgIEByZXR2YWwg RUZJX0lOVkFMSURfUEFSQU1FVEVSIE9uZSBvZiB0aGUgcGFyYW1ldGVycyBoYXMgYW4gaW52YWxp ZA0KPiB2YWx1ZS4NCj4gKyAgQHJldHZhbCBFRklfVU5TVVBQT1JURUQgICAgICAgTm90IHN1cHBv cnRlZC4NCj4gKyoqLw0KPiArdHlwZWRlZg0KPiArRUZJX1NUQVRVUw0KPiArKEVGSUFQSSAqRURL SUlfVVNCX0VUSEVSTkVUX1VORElfUkVDRUlWRV9GSUxURVIpKA0KPiArICBJTiAgUFhFX0NEQiAg ICAgKkNkYiwNCj4gKyAgSU4gIE5JQ19EQVRBICAgICpOaWMNCj4gKyAgKTsNCj4gKw0KPiArLyoq DQo+ICsgIFRoaXMgY29tbWFuZCBpcyB1c2VkIHRvIGdldCBjdXJyZW50IHN0YXRpb24gYW5kIGJy b2FkY2FzdCBNQUMgYWRkcmVzc2VzDQo+ICsgIGFuZCwgaWYgc3VwcG9ydGVkLCB0byBjaGFuZ2Ug dGhlIGN1cnJlbnQgc3RhdGlvbiBNQUMgYWRkcmVzcy4NCj4gKw0KPiArICBAcGFyYW1baW5dICBD ZGIgIEEgcG9pbnRlciB0byB0aGUgY29tbWFuZCBkZXNjcmlwdG9yIGJsb2NrLg0KPiArICBAcGFy YW1baW5dICBOaWMgIEEgcG9pbnRlciB0byB0aGUgTmV0d29yayBpbnRlcmZhY2UgY29udHJvbGxl ciBkYXRhLg0KPiArDQo+ICsgIEByZXR2YWwgRUZJX1NVQ0NFU1MgICAgICAgICAgIFRoZSByZXF1 ZXN0IGV4ZWN1dGVkIHN1Y2Nlc3NmdWxseS4NCj4gKyAgQHJldHZhbCBFRklfVElNRU9VVCAgICAg ICAgICAgQSB0aW1lb3V0IG9jY3VycmVkIGV4ZWN1dGluZyB0aGUgcmVxdWVzdC4NCj4gKyAgQHJl dHZhbCBFRklfREVWSUNFX0VSUk9SICAgICAgVGhlIHJlcXVlc3QgZmFpbGVkIGR1ZSB0byBhIGRl dmljZSBlcnJvci4NCj4gKyAgQHJldHZhbCBFRklfSU5WQUxJRF9QQVJBTUVURVIgT25lIG9mIHRo ZSBwYXJhbWV0ZXJzIGhhcyBhbiBpbnZhbGlkDQo+IHZhbHVlLg0KPiArICBAcmV0dmFsIEVGSV9V TlNVUFBPUlRFRCAgICAgICBOb3Qgc3VwcG9ydGVkLg0KPiArKiovDQo+ICt0eXBlZGVmDQo+ICtF RklfU1RBVFVTDQo+ICsoRUZJQVBJICpFREtJSV9VU0JfRVRIRVJORVRfVU5ESV9TVEFUSU9OX0FE RFJFU1MpKA0KPiArICBJTiAgUFhFX0NEQiAgICAgKkNkYiwNCj4gKyAgSU4gIE5JQ19EQVRBICAg ICpOaWMNCj4gKyAgKTsNCj4gKw0KPiArLyoqDQo+ICsgIFRoaXMgY29tbWFuZCBpcyB1c2VkIHRv IHJlYWQgYW5kIGNsZWFyIHRoZSBOSUMgdHJhZmZpYyBzdGF0aXN0aWNzLg0KPiArDQo+ICsgIEBw YXJhbVtpbl0gIENkYiAgQSBwb2ludGVyIHRvIHRoZSBjb21tYW5kIGRlc2NyaXB0b3IgYmxvY2su DQo+ICsgIEBwYXJhbVtpbl0gIE5pYyAgQSBwb2ludGVyIHRvIHRoZSBOZXR3b3JrIGludGVyZmFj ZSBjb250cm9sbGVyIGRhdGEuDQo+ICsNCj4gKyAgQHJldHZhbCBFRklfU1VDQ0VTUyAgICAgICAg ICAgVGhlIHJlcXVlc3QgZXhlY3V0ZWQgc3VjY2Vzc2Z1bGx5Lg0KPiArICBAcmV0dmFsIEVGSV9U SU1FT1VUICAgICAgICAgICBBIHRpbWVvdXQgb2NjdXJyZWQgZXhlY3V0aW5nIHRoZSByZXF1ZXN0 Lg0KPiArICBAcmV0dmFsIEVGSV9ERVZJQ0VfRVJST1IgICAgICBUaGUgcmVxdWVzdCBmYWlsZWQg ZHVlIHRvIGEgZGV2aWNlIGVycm9yLg0KPiArICBAcmV0dmFsIEVGSV9JTlZBTElEX1BBUkFNRVRF UiBPbmUgb2YgdGhlIHBhcmFtZXRlcnMgaGFzIGFuIGludmFsaWQNCj4gdmFsdWUuDQo+ICsgIEBy ZXR2YWwgRUZJX1VOU1VQUE9SVEVEICAgICAgIE5vdCBzdXBwb3J0ZWQuDQo+ICsqKi8NCj4gK3R5 cGVkZWYNCj4gK0VGSV9TVEFUVVMNCj4gKyhFRklBUEkgKkVES0lJX1VTQl9FVEhFUk5FVF9VTkRJ X1NUQVRJU1RJQ1MpKA0KPiArICBJTiAgUFhFX0NEQiAgICAgKkNkYiwNCj4gKyAgSU4gIE5JQ19E QVRBICAgICpOaWMNCj4gKyAgKTsNCj4gKw0KPiArLyoqDQo+ICsgIFRyYW5zbGF0ZSBhIG11bHRp Y2FzdCBJUHY0IG9yIElQdjYgYWRkcmVzcyB0byBhIG11bHRpY2FzdCBNQUMgYWRkcmVzcy4NCj4g Kw0KPiArICBAcGFyYW1baW5dICBDZGIgIEEgcG9pbnRlciB0byB0aGUgY29tbWFuZCBkZXNjcmlw dG9yIGJsb2NrLg0KPiArICBAcGFyYW1baW5dICBOaWMgIEEgcG9pbnRlciB0byB0aGUgTmV0d29y ayBpbnRlcmZhY2UgY29udHJvbGxlciBkYXRhLg0KPiArDQo+ICsgIEByZXR2YWwgRUZJX1NVQ0NF U1MgICAgICAgICAgIFRoZSByZXF1ZXN0IGV4ZWN1dGVkIHN1Y2Nlc3NmdWxseS4NCj4gKyAgQHJl dHZhbCBFRklfVElNRU9VVCAgICAgICAgICAgQSB0aW1lb3V0IG9jY3VycmVkIGV4ZWN1dGluZyB0 aGUgcmVxdWVzdC4NCj4gKyAgQHJldHZhbCBFRklfREVWSUNFX0VSUk9SICAgICAgVGhlIHJlcXVl c3QgZmFpbGVkIGR1ZSB0byBhIGRldmljZSBlcnJvci4NCj4gKyAgQHJldHZhbCBFRklfSU5WQUxJ RF9QQVJBTUVURVIgT25lIG9mIHRoZSBwYXJhbWV0ZXJzIGhhcyBhbiBpbnZhbGlkDQo+IHZhbHVl Lg0KPiArICBAcmV0dmFsIEVGSV9VTlNVUFBPUlRFRCAgICAgICBOb3Qgc3VwcG9ydGVkLg0KPiAr KiovDQo+ICt0eXBlZGVmDQo+ICtFRklfU1RBVFVTDQo+ICsoRUZJQVBJICpFREtJSV9VU0JfRVRI RVJORVRfVU5ESV9NQ0FTVF9JUFRPTUFDKSgNCj4gKyAgSU4gIFBYRV9DREIgICAgICpDZGIsDQo+ ICsgIElOICBOSUNfREFUQSAgICAqTmljDQo+ICsgICk7DQo+ICsNCj4gKy8qKg0KPiArICBUaGlz IGNvbW1hbmQgaXMgdXNlZCB0byByZWFkIGFuZCB3cml0ZSAoaWYgc3VwcG9ydGVkIGJ5IE5JQyBI L1cpDQo+ICsgIG5vbnZvbGF0aWxlIHN0b3JhZ2Ugb24gdGhlIE5JQy4NCj4gKw0KPiArICBAcGFy YW1baW5dICBDZGIgIEEgcG9pbnRlciB0byB0aGUgY29tbWFuZCBkZXNjcmlwdG9yIGJsb2NrLg0K PiArICBAcGFyYW1baW5dICBOaWMgIEEgcG9pbnRlciB0byB0aGUgTmV0d29yayBpbnRlcmZhY2Ug Y29udHJvbGxlciBkYXRhLg0KPiArDQo+ICsgIEByZXR2YWwgRUZJX1NVQ0NFU1MgICAgICAgICAg IFRoZSByZXF1ZXN0IGV4ZWN1dGVkIHN1Y2Nlc3NmdWxseS4NCj4gKyAgQHJldHZhbCBFRklfVElN RU9VVCAgICAgICAgICAgQSB0aW1lb3V0IG9jY3VycmVkIGV4ZWN1dGluZyB0aGUgcmVxdWVzdC4N Cj4gKyAgQHJldHZhbCBFRklfREVWSUNFX0VSUk9SICAgICAgVGhlIHJlcXVlc3QgZmFpbGVkIGR1 ZSB0byBhIGRldmljZSBlcnJvci4NCj4gKyAgQHJldHZhbCBFRklfSU5WQUxJRF9QQVJBTUVURVIg T25lIG9mIHRoZSBwYXJhbWV0ZXJzIGhhcyBhbiBpbnZhbGlkDQo+IHZhbHVlLg0KPiArICBAcmV0 dmFsIEVGSV9VTlNVUFBPUlRFRCAgICAgICBOb3Qgc3VwcG9ydGVkLg0KPiArKiovDQo+ICt0eXBl ZGVmDQo+ICtFRklfU1RBVFVTDQo+ICsoRUZJQVBJICpFREtJSV9VU0JfRVRIRVJORVRfVU5ESV9O Vl9EQVRBKSgNCj4gKyAgSU4gIFBYRV9DREIgICAgICpDZGIsDQo+ICsgIElOICBOSUNfREFUQSAg ICAqTmljDQo+ICsgICk7DQo+ICsNCj4gKy8qKg0KPiArICBUaGlzIGNvbW1hbmQgcmV0dXJucyB0 aGUgY3VycmVudCBpbnRlcnJ1cHQgc3RhdHVzIGFuZC9vciB0aGUNCj4gKyAgdHJhbnNtaXR0ZWQg YnVmZmVyIGFkZHJlc3NlcyBhbmQgdGhlIGN1cnJlbnQgbWVkaWEgc3RhdHVzLg0KPiArDQo+ICsg IEBwYXJhbVtpbl0gIENkYiAgQSBwb2ludGVyIHRvIHRoZSBjb21tYW5kIGRlc2NyaXB0b3IgYmxv Y2suDQo+ICsgIEBwYXJhbVtpbl0gIE5pYyAgQSBwb2ludGVyIHRvIHRoZSBOZXR3b3JrIGludGVy ZmFjZSBjb250cm9sbGVyIGRhdGEuDQo+ICsNCj4gKyAgQHJldHZhbCBFRklfU1VDQ0VTUyAgICAg ICAgICAgVGhlIHJlcXVlc3QgZXhlY3V0ZWQgc3VjY2Vzc2Z1bGx5Lg0KPiArICBAcmV0dmFsIEVG SV9USU1FT1VUICAgICAgICAgICBBIHRpbWVvdXQgb2NjdXJyZWQgZXhlY3V0aW5nIHRoZSByZXF1 ZXN0Lg0KPiArICBAcmV0dmFsIEVGSV9ERVZJQ0VfRVJST1IgICAgICBUaGUgcmVxdWVzdCBmYWls ZWQgZHVlIHRvIGEgZGV2aWNlIGVycm9yLg0KPiArICBAcmV0dmFsIEVGSV9JTlZBTElEX1BBUkFN RVRFUiBPbmUgb2YgdGhlIHBhcmFtZXRlcnMgaGFzIGFuIGludmFsaWQNCj4gdmFsdWUuDQo+ICsg IEByZXR2YWwgRUZJX1VOU1VQUE9SVEVEICAgICAgIE5vdCBzdXBwb3J0ZWQuDQo+ICsqKi8NCj4g K3R5cGVkZWYNCj4gK0VGSV9TVEFUVVMNCj4gKyhFRklBUEkgKkVES0lJX1VTQl9FVEhFUk5FVF9V TkRJX0dFVF9TVEFUVVMpKA0KPiArICBJTiAgUFhFX0NEQiAgICAgKkNkYiwNCj4gKyAgSU4gIE5J Q19EQVRBICAgICpOaWMNCj4gKyAgKTsNCj4gKw0KPiArLyoqDQo+ICsgIFRoaXMgY29tbWFuZCBp cyB1c2VkIHRvIGZpbGwgdGhlIG1lZGlhIGhlYWRlcihzKSBpbiB0cmFuc21pdCBwYWNrZXQocyku DQo+ICsNCj4gKyAgQHBhcmFtW2luXSAgQ2RiICBBIHBvaW50ZXIgdG8gdGhlIGNvbW1hbmQgZGVz Y3JpcHRvciBibG9jay4NCj4gKyAgQHBhcmFtW2luXSAgTmljICBBIHBvaW50ZXIgdG8gdGhlIE5l dHdvcmsgaW50ZXJmYWNlIGNvbnRyb2xsZXIgZGF0YS4NCj4gKw0KPiArICBAcmV0dmFsIEVGSV9T VUNDRVNTICAgICAgICAgICBUaGUgcmVxdWVzdCBleGVjdXRlZCBzdWNjZXNzZnVsbHkuDQo+ICsg IEByZXR2YWwgRUZJX1RJTUVPVVQgICAgICAgICAgIEEgdGltZW91dCBvY2N1cnJlZCBleGVjdXRp bmcgdGhlIHJlcXVlc3QuDQo+ICsgIEByZXR2YWwgRUZJX0RFVklDRV9FUlJPUiAgICAgIFRoZSBy ZXF1ZXN0IGZhaWxlZCBkdWUgdG8gYSBkZXZpY2UgZXJyb3IuDQo+ICsgIEByZXR2YWwgRUZJX0lO VkFMSURfUEFSQU1FVEVSIE9uZSBvZiB0aGUgcGFyYW1ldGVycyBoYXMgYW4gaW52YWxpZA0KPiB2 YWx1ZS4NCj4gKyAgQHJldHZhbCBFRklfVU5TVVBQT1JURUQgICAgICAgTm90IHN1cHBvcnRlZC4N Cj4gKyoqLw0KPiArdHlwZWRlZg0KPiArRUZJX1NUQVRVUw0KPiArKEVGSUFQSSAqRURLSUlfVVNC X0VUSEVSTkVUX1VORElfRklMTF9IRUFERVIpKA0KPiArICBJTiAgUFhFX0NEQiAgICAgKkNkYiwN Cj4gKyAgSU4gIE5JQ19EQVRBICAgICpOaWMNCj4gKyAgKTsNCj4gKw0KPiArLyoqDQo+ICsgIFRo ZSBUcmFuc21pdCBjb21tYW5kIGlzIHVzZWQgdG8gcGxhY2UgYSBwYWNrZXQgaW50byB0aGUgdHJh bnNtaXQgcXVldWUuDQo+ICsNCj4gKyAgQHBhcmFtW2luXSAgQ2RiICBBIHBvaW50ZXIgdG8gdGhl IGNvbW1hbmQgZGVzY3JpcHRvciBibG9jay4NCj4gKyAgQHBhcmFtW2luXSAgTmljICBBIHBvaW50 ZXIgdG8gdGhlIE5ldHdvcmsgaW50ZXJmYWNlIGNvbnRyb2xsZXIgZGF0YS4NCj4gKw0KPiArICBA cmV0dmFsIEVGSV9TVUNDRVNTICAgICAgICAgICBUaGUgcmVxdWVzdCBleGVjdXRlZCBzdWNjZXNz ZnVsbHkuDQo+ICsgIEByZXR2YWwgRUZJX1RJTUVPVVQgICAgICAgICAgIEEgdGltZW91dCBvY2N1 cnJlZCBleGVjdXRpbmcgdGhlIHJlcXVlc3QuDQo+ICsgIEByZXR2YWwgRUZJX0RFVklDRV9FUlJP UiAgICAgIFRoZSByZXF1ZXN0IGZhaWxlZCBkdWUgdG8gYSBkZXZpY2UgZXJyb3IuDQo+ICsgIEBy ZXR2YWwgRUZJX0lOVkFMSURfUEFSQU1FVEVSIE9uZSBvZiB0aGUgcGFyYW1ldGVycyBoYXMgYW4g aW52YWxpZA0KPiB2YWx1ZS4NCj4gKyAgQHJldHZhbCBFRklfVU5TVVBQT1JURUQgICAgICAgTm90 IHN1cHBvcnRlZC4NCj4gKyoqLw0KPiArdHlwZWRlZg0KPiArRUZJX1NUQVRVUw0KPiArKEVGSUFQ SSAqRURLSUlfVVNCX0VUSEVSTkVUX1VORElfVFJBTlNNSVQpKA0KPiArICBJTiAgUFhFX0NEQiAg ICAgKkNkYiwNCj4gKyAgSU4gIE5JQ19EQVRBICAgICpOaWMNCj4gKyAgKTsNCj4gKw0KPiArLyoq DQo+ICsgIFdoZW4gdGhlIG5ldHdvcmsgYWRhcHRlciBoYXMgcmVjZWl2ZWQgYSBmcmFtZSwgdGhp cyBjb21tYW5kIGlzIHVzZWQNCj4gKyAgdG8gY29weSB0aGUgZnJhbWUgaW50byBkcml2ZXIvYXBw bGljYXRpb24gc3RvcmFnZS4NCj4gKw0KPiArICBAcGFyYW1baW5dICBDZGIgIEEgcG9pbnRlciB0 byB0aGUgY29tbWFuZCBkZXNjcmlwdG9yIGJsb2NrLg0KPiArICBAcGFyYW1baW5dICBOaWMgIEEg cG9pbnRlciB0byB0aGUgTmV0d29yayBpbnRlcmZhY2UgY29udHJvbGxlciBkYXRhLg0KPiArDQo+ ICsgIEByZXR2YWwgRUZJX1NVQ0NFU1MgICAgICAgICAgIFRoZSByZXF1ZXN0IGV4ZWN1dGVkIHN1 Y2Nlc3NmdWxseS4NCj4gKyAgQHJldHZhbCBFRklfVElNRU9VVCAgICAgICAgICAgQSB0aW1lb3V0 IG9jY3VycmVkIGV4ZWN1dGluZyB0aGUgcmVxdWVzdC4NCj4gKyAgQHJldHZhbCBFRklfREVWSUNF X0VSUk9SICAgICAgVGhlIHJlcXVlc3QgZmFpbGVkIGR1ZSB0byBhIGRldmljZSBlcnJvci4NCj4g KyAgQHJldHZhbCBFRklfSU5WQUxJRF9QQVJBTUVURVIgT25lIG9mIHRoZSBwYXJhbWV0ZXJzIGhh cyBhbiBpbnZhbGlkDQo+IHZhbHVlLg0KPiArICBAcmV0dmFsIEVGSV9VTlNVUFBPUlRFRCAgICAg ICBOb3Qgc3VwcG9ydGVkLg0KPiArKiovDQo+ICt0eXBlZGVmDQo+ICtFRklfU1RBVFVTDQo+ICso RUZJQVBJICpFREtJSV9VU0JfRVRIRVJORVRfVU5ESV9SRUNFSVZFKSgNCj4gKyAgSU4gIFBYRV9D REIgICAgICpDZGIsDQo+ICsgIElOICBOSUNfREFUQSAgICAqTmljDQo+ICsgICk7DQo+ICsNCj4g Ky8qKg0KPiArICBUaGlzIGNvbW1hbmQgcmVzZXRzIHRoZSBuZXR3b3JrIGFkYXB0ZXIgYW5kIGlu aXRpYWxpemVzIFVOREkgdXNpbmcNCj4gKyAgdGhlIHBhcmFtZXRlcnMgc3VwcGxpZWQgaW4gdGhl IENQQi4NCj4gKw0KPiArICBAcGFyYW1baW5dICAgICAgQ2RiICBBIHBvaW50ZXIgdG8gdGhlIGNv bW1hbmQgZGVzY3JpcHRvciBibG9jay4NCj4gKyAgQHBhcmFtW2luLCBvdXRdIE5pYyAgQSBwb2lu dGVyIHRvIHRoZSBOZXR3b3JrIGludGVyZmFjZSBjb250cm9sbGVyIGRhdGEuDQo+ICsNCj4gKyAg QHJldHZhbCBFRklfU1VDQ0VTUyAgICAgICAgICAgVGhlIHJlcXVlc3QgZXhlY3V0ZWQgc3VjY2Vz c2Z1bGx5Lg0KPiArICBAcmV0dmFsIEVGSV9USU1FT1VUICAgICAgICAgICBBIHRpbWVvdXQgb2Nj dXJyZWQgZXhlY3V0aW5nIHRoZSByZXF1ZXN0Lg0KPiArICBAcmV0dmFsIEVGSV9ERVZJQ0VfRVJS T1IgICAgICBUaGUgcmVxdWVzdCBmYWlsZWQgZHVlIHRvIGEgZGV2aWNlIGVycm9yLg0KPiArICBA cmV0dmFsIEVGSV9JTlZBTElEX1BBUkFNRVRFUiBPbmUgb2YgdGhlIHBhcmFtZXRlcnMgaGFzIGFu IGludmFsaWQNCj4gdmFsdWUuDQo+ICsgIEByZXR2YWwgRUZJX1VOU1VQUE9SVEVEICAgICAgIE5v dCBzdXBwb3J0ZWQuDQo+ICsqKi8NCj4gK3R5cGVkZWYNCj4gK0VGSV9TVEFUVVMNCj4gKyhFRklB UEkgKkVES0lJX1VTQl9FVEhFUk5FVF9JTklUSUFMSVpFKSgNCj4gKyAgSU4gICAgICBQWEVfQ0RC ICAgKkNkYiwNCj4gKyAgSU4gT1VUICBOSUNfREFUQSAgKk5pYw0KPiArICApOw0KPiArDQo+ICsv KioNCj4gKyAgVGhpcyBjb21tYW5kIGlzIHVzZWQgdG8gcmVhZCBhbmQgY2xlYXIgdGhlIE5JQyB0 cmFmZmljIHN0YXRpc3RpY3MuDQo+ICsNCj4gKyAgQHBhcmFtW2luXSAgTmljICAgICBBIHBvaW50 ZXIgdG8gdGhlIE5ldHdvcmsgaW50ZXJmYWNlIGNvbnRyb2xsZXIgZGF0YS4NCj4gKyAgQHBhcmFt W2luXSAgRGJBZGRyICBEYXRhIEJsb2NrIEFkZHJlc3MuDQo+ICsgIEBwYXJhbVtpbl0gIERiU2l6 ZSAgRGF0YSBCbG9jayBTaXplLg0KPiArDQo+ICsgIEByZXR2YWwgRUZJX1NVQ0NFU1MgICAgICAg ICAgIFRoZSByZXF1ZXN0IGV4ZWN1dGVkIHN1Y2Nlc3NmdWxseS4NCj4gKyAgQHJldHZhbCBFRklf VElNRU9VVCAgICAgICAgICAgQSB0aW1lb3V0IG9jY3VycmVkIGV4ZWN1dGluZyB0aGUgcmVxdWVz dC4NCj4gKyAgQHJldHZhbCBFRklfREVWSUNFX0VSUk9SICAgICAgVGhlIHJlcXVlc3QgZmFpbGVk IGR1ZSB0byBhIGRldmljZSBlcnJvci4NCj4gKyAgQHJldHZhbCBFRklfSU5WQUxJRF9QQVJBTUVU RVIgT25lIG9mIHRoZSBwYXJhbWV0ZXJzIGhhcyBhbiBpbnZhbGlkDQo+IHZhbHVlLg0KPiArICBA cmV0dmFsIEVGSV9VTlNVUFBPUlRFRCAgICAgICBOb3Qgc3VwcG9ydGVkLg0KPiArKiovDQo+ICt0 eXBlZGVmDQo+ICtFRklfU1RBVFVTDQo+ICsoRUZJQVBJICpFREtJSV9VU0JfRVRIRVJORVRfU1RB VElTVElDUykoDQo+ICsgIElOICBOSUNfREFUQSAgICAqTmljLA0KPiArICBJTiAgVUlOVDY0ICAg ICAgRGJBZGRyLA0KPiArICBJTiAgVUlOVDE2ICAgICAgRGJTaXplDQo+ICsgICk7DQo+ICsNCj4g Ky8qKg0KPiArICBUaGlzIGZ1bmN0aW9uIGlzIHVzZWQgdG8gbWFuYWdlIGEgVVNCIGRldmljZSB3 aXRoIHRoZSBidWxrIHRyYW5zZmVyIHBpcGUuIFRoZQ0KPiBlbmRwb2ludCBpcyBCdWxrIGluLg0K PiArDQo+ICsgIEBwYXJhbVtpbl0gICAgICBDZGIgICAgICAgICAgIEEgcG9pbnRlciB0byB0aGUg Y29tbWFuZCBkZXNjcmlwdG9yIGJsb2NrLg0KPiArICBAcGFyYW1baW5dICAgICAgVGhpcyAgICAg ICAgICBBIHBvaW50ZXIgdG8gdGhlIEVES0lJX1VTQl9FVEhFUk5FVF9QUk9UT0NPTA0KPiBpbnN0 YW5jZS4NCj4gKyAgQHBhcmFtW2luLCBvdXRdIFBhY2tldCAgICAgICAgQSBwb2ludGVyIHRvIHRo ZSBidWZmZXIgb2YgZGF0YSB0aGF0IHdpbGwgYmUNCj4gdHJhbnNtaXR0ZWQgdG8gVVNCDQo+ICsg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRldmljZSBvciByZWNlaXZlZCBmcm9tIFVT QiBkZXZpY2UuDQo+ICsgIEBwYXJhbVtpbiwgb3V0XSBQYWNrZXRMZW5ndGggIEEgcG9pbnRlciB0 byB0aGUgUGFja2V0TGVuZ3RoLg0KPiArDQo+ICsgIEByZXR2YWwgRUZJX1NVQ0NFU1MgICAgICAg ICAgIFRoZSBidWxrIHRyYW5zZmVyIGhhcyBiZWVuIHN1Y2Nlc3NmdWxseSBleGVjdXRlZC4NCj4g KyAgQHJldHZhbCBFRklfREVWSUNFX0VSUk9SICAgICAgVGhlIHRyYW5zZmVyIGZhaWxlZC4gVGhl IHRyYW5zZmVyIHN0YXR1cyBpcw0KPiByZXR1cm5lZCBpbiBzdGF0dXMuDQo+ICsgIEByZXR2YWwg RUZJX0lOVkFMSURfUEFSQU1FVEVSIE9uZSBvciBtb3JlIHBhcmFtZXRlcnMgYXJlIGludmFsaWQu DQo+ICsgIEByZXR2YWwgRUZJX09VVF9PRl9SRVNPVVJDRVMgIFRoZSByZXF1ZXN0IGNvdWxkIG5v dCBiZSBzdWJtaXR0ZWQgZHVlDQo+IHRvIGEgbGFjayBvZiByZXNvdXJjZXMuDQo+ICsgIEByZXR2 YWwgRUZJX1RJTUVPVVQgICAgICAgICAgIFRoZSBjb250cm9sIHRyYW5zZmVyIGZhaWxzIGR1ZSB0 byB0aW1lb3V0Lg0KPiArKiovDQo+ICt0eXBlZGVmDQo+ICtFRklfU1RBVFVTDQo+ICsoRUZJQVBJ ICpFREtJSV9VU0JfRVRIRVJORVRfUkVDRUlWRSkoDQo+ICsgIElOICAgICBQWEVfQ0RCICAgICAg ICAgICAgICAgKkNkYiwNCj4gKyAgSU4gICAgIEVES0lJX1VTQl9FVEhFUk5FVF9QUk9UT0NPTCAq VGhpcywNCj4gKyAgSU4gT1VUIFZPSUQgICAgICAgICAgICAgICAgICAqUGFja2V0LA0KPiArICBJ TiBPVVQgVUlOVE4gICAgICAgICAgICAgICAgICpQYWNrZXRMZW5ndGgNCj4gKyAgKTsNCj4gKw0K PiArLyoqDQo+ICsgIFRoaXMgZnVuY3Rpb24gaXMgdXNlZCB0byBtYW5hZ2UgYSBVU0IgZGV2aWNl IHdpdGggdGhlIGJ1bGsgdHJhbnNmZXIgcGlwZS4gVGhlDQo+IGVuZHBvaW50IGlzIEJ1bGsgb3V0 Lg0KPiArDQo+ICsgIEBwYXJhbVtpbl0gICAgICBDZGIgICAgICAgICAgIEEgcG9pbnRlciB0byB0 aGUgY29tbWFuZCBkZXNjcmlwdG9yIGJsb2NrLg0KPiArICBAcGFyYW1baW5dICAgICAgVGhpcyAg ICAgICAgICBBIHBvaW50ZXIgdG8gdGhlIEVES0lJX1VTQl9FVEhFUk5FVF9QUk9UT0NPTA0KPiBp bnN0YW5jZS4NCj4gKyAgQHBhcmFtW2luLCBvdXRdIFBhY2tldCAgICAgICAgQSBwb2ludGVyIHRv IHRoZSBidWZmZXIgb2YgZGF0YSB0aGF0IHdpbGwgYmUNCj4gdHJhbnNtaXR0ZWQgdG8gVVNCDQo+ ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRldmljZSBvciByZWNlaXZlZCBmcm9t IFVTQiBkZXZpY2UuDQo+ICsgIEBwYXJhbVtpbiwgb3V0XSBQYWNrZXRMZW5ndGggIEEgcG9pbnRl ciB0byB0aGUgUGFja2V0TGVuZ3RoLg0KPiArDQo+ICsgIEByZXR2YWwgRUZJX1NVQ0NFU1MgICAg ICAgICAgIFRoZSBidWxrIHRyYW5zZmVyIGhhcyBiZWVuIHN1Y2Nlc3NmdWxseSBleGVjdXRlZC4N Cj4gKyAgQHJldHZhbCBFRklfREVWSUNFX0VSUk9SICAgICAgVGhlIHRyYW5zZmVyIGZhaWxlZC4g VGhlIHRyYW5zZmVyIHN0YXR1cyBpcw0KPiByZXR1cm5lZCBpbiBzdGF0dXMuDQo+ICsgIEByZXR2 YWwgRUZJX0lOVkFMSURfUEFSQU1FVEVSIE9uZSBvciBtb3JlIHBhcmFtZXRlcnMgYXJlIGludmFs aWQuDQo+ICsgIEByZXR2YWwgRUZJX09VVF9PRl9SRVNPVVJDRVMgIFRoZSByZXF1ZXN0IGNvdWxk IG5vdCBiZSBzdWJtaXR0ZWQgZHVlDQo+IHRvIGEgbGFjayBvZiByZXNvdXJjZXMuDQo+ICsgIEBy ZXR2YWwgRUZJX1RJTUVPVVQgICAgICAgICAgIFRoZSBjb250cm9sIHRyYW5zZmVyIGZhaWxzIGR1 ZSB0byB0aW1lb3V0Lg0KPiArKiovDQo+ICt0eXBlZGVmDQo+ICtFRklfU1RBVFVTDQo+ICsoRUZJ QVBJICpFREtJSV9VU0JfRVRIRVJORVRfVFJBTlNNSVQpKA0KPiArICBJTiAgICAgUFhFX0NEQiAg ICAgICAgICAgICAgICpDZGIsDQo+ICsgIElOICAgICBFREtJSV9VU0JfRVRIRVJORVRfUFJPVE9D T0wgKlRoaXMsDQo+ICsgIElOIE9VVCBWT0lEICAgICAgICAgICAgICAgICAgKlBhY2tldCwNCj4g KyAgSU4gT1VUIFVJTlROICAgICAgICAgICAgICAgICAqUGFja2V0TGVuZ3RoDQo+ICsgICk7DQo+ ICsNCj4gKy8qKg0KPiArICBUaGlzIGZ1bmN0aW9uIGlzIHVzZWQgdG8gbWFuYWdlIGEgVVNCIGRl dmljZSB3aXRoIGFuIGludGVycnVwdCB0cmFuc2ZlciBwaXBlLg0KPiArDQo+ICsgIEBwYXJhbVtp bl0gIFRoaXMgICAgICAgICAgICAgIEEgcG9pbnRlciB0byB0aGUgRURLSUlfVVNCX0VUSEVSTkVU X1BST1RPQ09MDQo+IGluc3RhbmNlLg0KPiArICBAcGFyYW1baW5dICBJc05ld1RyYW5zZmVyICAg ICBJZiBUUlVFLCBhIG5ldyB0cmFuc2ZlciB3aWxsIGJlIHN1Ym1pdHRlZCB0bw0KPiBVU0IgY29u dHJvbGxlci4gSWYNCj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRkFMU0UsIHRo ZSBpbnRlcnJ1cHQgdHJhbnNmZXIgaXMgZGVsZXRlZCBmcm9tIHRoZSBkZXZpY2Uncw0KPiBpbnRl cnJ1cHQNCj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHJhbnNmZXIgcXVldWUu DQo+ICsgIEBwYXJhbVtpbl0gIFBvbGxpbmdJbnRlcnZhbCAgIEluZGljYXRlcyB0aGUgcGVyaW9k aWMgcmF0ZSwgaW4gbWlsbGlzZWNvbmRzLCB0aGF0DQo+IHRoZSB0cmFuc2ZlciBpcyB0byBiZQ0K PiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBleGVjdXRlZC5UaGlzIHBhcmFtZXRl ciBpcyByZXF1aXJlZCB3aGVuIElzTmV3VHJhbnNmZXINCj4gaXMgVFJVRS4gVGhlDQo+ICsgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlIG11c3QgYmUgYmV0d2VlbiAxIHRvIDI1 NSwgb3RoZXJ3aXNlDQo+IEVGSV9JTlZBTElEX1BBUkFNRVRFUiBpcyByZXR1cm5lZC4NCj4gKyAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVGhlIHVuaXRzIGFyZSBpbiBtaWxsaXNlY29u ZHMuDQo+ICsgIEBwYXJhbVtpbl0gIFJlcXVlc3QgICAgICAgICAgIEEgcG9pbnRlciB0byB0aGUg RUZJX1VTQl9ERVZJQ0VfUkVRVUVTVCBkYXRhLg0KPiArDQo+ICsgIEByZXR2YWwgRUZJX1NVQ0NF U1MgICAgICAgICAgIFRoZSBhc3luY2hyb25vdXMgVVNCIHRyYW5zZmVyIHJlcXVlc3QgdHJhbnNm ZXINCj4gaGFzIGJlZW4gc3VjY2Vzc2Z1bGx5IGV4ZWN1dGVkLg0KPiArICBAcmV0dmFsIEVGSV9E RVZJQ0VfRVJST1IgICAgICBUaGUgYXN5bmNocm9ub3VzIFVTQiB0cmFuc2ZlciByZXF1ZXN0DQo+ IGZhaWxlZC4NCj4gKw0KPiArKiovDQo+ICt0eXBlZGVmDQo+ICtFRklfU1RBVFVTDQo+ICsoRUZJ QVBJICpFREtJSV9VU0JfRVRIRVJORVRfSU5URVJSVVBUKSgNCj4gKyAgSU4gRURLSUlfVVNCX0VU SEVSTkVUX1BST1RPQ09MICAgKlRoaXMsDQo+ICsgIElOIEJPT0xFQU4gICAgICAgICAgICAgICAg IElzTmV3VHJhbnNmZXIsDQo+ICsgIElOIFVJTlROICAgICAgICAgICAgICAgICAgIFBvbGxpbmdJ bnRlcnZhbCwNCj4gKyAgSU4gRUZJX1VTQl9ERVZJQ0VfUkVRVUVTVCAgKlJlcXVlc3QNCj4gKyAg KTsNCj4gKw0KPiArLyoqDQo+ICsgIFJldHJpZXZlcyB0aGUgVVNCIEV0aGVybmV0IE1hYyBBZGRy ZXNzLg0KPiArDQo+ICsgIEBwYXJhbVtpbl0gIFRoaXMgICAgICAgICAgQSBwb2ludGVyIHRvIHRo ZSBFREtJSV9VU0JfRVRIRVJORVRfUFJPVE9DT0wNCj4gaW5zdGFuY2UuDQo+ICsgIEBwYXJhbVtv dXRdIE1hY0FkZHJlc3MgICAgQSBwb2ludGVyIHRvIHRoZSBjYWxsZXIgYWxsb2NhdGVkIFVTQiBF dGhlcm5ldA0KPiBNYWMgQWRkcmVzcy4NCj4gKw0KPiArICBAcmV0dmFsIEVGSV9TVUNDRVNTICAg ICAgICAgICBUaGUgVVNCIEhlYWRlciBGdW5jdGlvbmFsIGRlc2NyaXB0b3Igd2FzDQo+IHJldHJp ZXZlZCBzdWNjZXNzZnVsbHkuDQo+ICsgIEByZXR2YWwgRUZJX0lOVkFMSURfUEFSQU1FVEVSIFVz YkhlYWRlckZ1bkRlc2NyaXB0b3IgaXMgTlVMTC4NCj4gKyAgQHJldHZhbCBFRklfTk9UX0ZPVU5E ICAgICAgICAgVGhlIFVTQiBIZWFkZXIgRnVuY3Rpb25hbCBkZXNjcmlwdG9yIHdhcw0KPiBub3Qg Zm91bmQuDQo+ICsqKi8NCj4gK3R5cGVkZWYNCj4gK0VGSV9TVEFUVVMNCj4gKyhFRklBUEkgKkVE S0lJX1VTQl9HRVRfRVRIX01BQ19BRERSRVNTKSgNCj4gKyAgSU4gIEVES0lJX1VTQl9FVEhFUk5F VF9QUk9UT0NPTCAqVGhpcywNCj4gKyAgT1VUIEVGSV9NQUNfQUREUkVTUyAgICAgICAqTWFjQWRk cmVzcw0KPiArICApOw0KPiArDQo+ICsvKioNCj4gKyAgUmV0cmlldmVzIHRoZSBVU0IgRXRoZXJu ZXQgQnVsayB0cmFuc2ZlciBkYXRhIHNpemUuDQo+ICsNCj4gKyAgQHBhcmFtW2luXSAgVGhpcyAg ICAgICAgICBBIHBvaW50ZXIgdG8gdGhlIEVES0lJX1VTQl9FVEhFUk5FVF9QUk9UT0NPTA0KPiBp bnN0YW5jZS4NCj4gKyAgQHBhcmFtW291dF0gQnVsa1NpemUgICAgICBBIHBvaW50ZXIgdG8gdGhl IEJ1bGsgdHJhbnNmZXIgZGF0YSBzaXplLg0KPiArDQo+ICsgIEByZXR2YWwgRUZJX1NVQ0NFU1Mg ICAgICAgICAgIFRoZSBVU0IgSGVhZGVyIEZ1bmN0aW9uYWwgZGVzY3JpcHRvciB3YXMNCj4gcmV0 cmlldmVkIHN1Y2Nlc3NmdWxseS4NCj4gKyAgQHJldHZhbCBFRklfSU5WQUxJRF9QQVJBTUVURVIg VXNiSGVhZGVyRnVuRGVzY3JpcHRvciBpcyBOVUxMLg0KPiArICBAcmV0dmFsIEVGSV9OT1RfRk9V TkQgICAgICAgICBUaGUgVVNCIEhlYWRlciBGdW5jdGlvbmFsIGRlc2NyaXB0b3Igd2FzDQo+IG5v dCBmb3VuZC4NCj4gKyoqLw0KPiArdHlwZWRlZg0KPiArRUZJX1NUQVRVUw0KPiArKEVGSUFQSSAq RURLSUlfVVNCX0VUSF9NQVhfQlVMS19TSVpFKSgNCj4gKyAgSU4gIEVES0lJX1VTQl9FVEhFUk5F VF9QUk9UT0NPTCAqVGhpcywNCj4gKyAgT1VUIFVJTlROICAgICAgICAgICAgICAgICAqQnVsa1Np emUNCj4gKyAgKTsNCj4gKw0KPiArLyoqDQo+ICsgIFJldHJpZXZlcyB0aGUgVVNCIEhlYWRlciBm dW5jdGlvbmFsIERlc2NyaXB0b3IuDQo+ICsNCj4gKyAgQHBhcmFtW2luXSAgVGhpcyAgICAgICAg ICAgICAgICAgICBBIHBvaW50ZXIgdG8gdGhlDQo+IEVES0lJX1VTQl9FVEhFUk5FVF9QUk9UT0NP TCBpbnN0YW5jZS4NCj4gKyAgQHBhcmFtW291dF0gVXNiSGVhZGVyRnVuRGVzY3JpcHRvciBBIHBv aW50ZXIgdG8gdGhlIGNhbGxlciBhbGxvY2F0ZWQgVVNCDQo+IEhlYWRlciBGdW5jdGlvbmFsIERl c2NyaXB0b3IuDQo+ICsNCj4gKyAgQHJldHZhbCBFRklfU1VDQ0VTUyAgICAgICAgICAgVGhlIFVT QiBIZWFkZXIgRnVuY3Rpb25hbCBkZXNjcmlwdG9yIHdhcw0KPiByZXRyaWV2ZWQgc3VjY2Vzc2Z1 bGx5Lg0KPiArICBAcmV0dmFsIEVGSV9JTlZBTElEX1BBUkFNRVRFUiBVc2JIZWFkZXJGdW5EZXNj cmlwdG9yIGlzIE5VTEwuDQo+ICsgIEByZXR2YWwgRUZJX05PVF9GT1VORCAgICAgICAgIFRoZSBV U0IgSGVhZGVyIEZ1bmN0aW9uYWwgZGVzY3JpcHRvciB3YXMNCj4gbm90IGZvdW5kLg0KPiArKiov DQo+ICt0eXBlZGVmDQo+ICtFRklfU1RBVFVTDQo+ICsoRUZJQVBJICpFREtJSV9VU0JfSEVBREVS X0ZVTkNUSU9OQUxfREVTQ1JJUFRPUikoDQo+ICsgIElOIEVES0lJX1VTQl9FVEhFUk5FVF9QUk9U T0NPTCAgICAgICpUaGlzLA0KPiArICBPVVQgVVNCX0hFQURFUl9GVU5fREVTQ1JJUFRPUiAqVXNi SGVhZGVyRnVuRGVzY3JpcHRvcg0KPiArICApOw0KPiArDQo+ICsvKioNCj4gKyAgUmV0cmlldmVz IHRoZSBVU0IgVW5pb24gZnVuY3Rpb25hbCBEZXNjcmlwdG9yLg0KPiArDQo+ICsgIEBwYXJhbVtp bl0gIFRoaXMgICAgICAgICAgICAgICAgICAgQSBwb2ludGVyIHRvIHRoZQ0KPiBFREtJSV9VU0Jf RVRIRVJORVRfUFJPVE9DT0wgaW5zdGFuY2UuDQo+ICsgIEBwYXJhbVtvdXRdIFVzYlVuaW9uRnVu RGVzY3JpcHRvciAgQSBwb2ludGVyIHRvIHRoZSBjYWxsZXIgYWxsb2NhdGVkIFVTQg0KPiBVbmlv biBGdW5jdGlvbmFsIERlc2NyaXB0b3IuDQo+ICsNCj4gKyAgQHJldHZhbCBFRklfU1VDQ0VTUyAg ICAgICAgICAgVGhlIFVTQiBVbmlvbiBGdW5jdGlvbmFsIGRlc2NyaXB0b3Igd2FzDQo+IHJldHJp ZXZlZCBzdWNjZXNzZnVsbHkuDQo+ICsgIEByZXR2YWwgRUZJX0lOVkFMSURfUEFSQU1FVEVSIFVz YlVuaW9uRnVuRGVzY3JpcHRvciBpcyBOVUxMLg0KPiArICBAcmV0dmFsIEVGSV9OT1RfRk9VTkQg ICAgICAgICBUaGUgVVNCIFVuaW9uIEZ1bmN0aW9uYWwgZGVzY3JpcHRvciB3YXMgbm90DQo+IGZv dW5kLg0KPiArKiovDQo+ICt0eXBlZGVmDQo+ICtFRklfU1RBVFVTDQo+ICsoRUZJQVBJICpFREtJ SV9VU0JfVU5JT05fRlVOQ1RJT05BTF9ERVNDUklQVE9SKSgNCj4gKyAgSU4gRURLSUlfVVNCX0VU SEVSTkVUX1BST1RPQ09MICAgICAqVGhpcywNCj4gKyAgT1VUIFVTQl9VTklPTl9GVU5fREVTQ1JJ UFRPUiAqVXNiVW5pb25GdW5EZXNjcmlwdG9yDQo+ICsgICk7DQo+ICsNCj4gKy8qKg0KPiArICBS ZXRyaWV2ZXMgdGhlIFVTQiBFdGhlcm5ldCBmdW5jdGlvbmFsIERlc2NyaXB0b3IuDQo+ICsNCj4g KyAgQHBhcmFtW2luXSAgVGhpcyAgICAgICAgICAgICAgICAgICBBIHBvaW50ZXIgdG8gdGhlDQo+ IEVES0lJX1VTQl9FVEhFUk5FVF9QUk9UT0NPTCBpbnN0YW5jZS4NCj4gKyAgQHBhcmFtW291dF0g VXNiRXRoRnVuRGVzY3JpcHRvciAgICBBIHBvaW50ZXIgdG8gdGhlIGNhbGxlciBhbGxvY2F0ZWQg VVNCDQo+IEV0aGVybmV0IEZ1bmN0aW9uYWwgRGVzY3JpcHRvci4NCj4gKw0KPiArICBAcmV0dmFs IEVGSV9TVUNDRVNTICAgICAgICAgICBUaGUgVVNCIEV0aGVybmV0IEZ1bmN0aW9uYWwgZGVzY3Jp cHRvciB3YXMNCj4gcmV0cmlldmVkIHN1Y2Nlc3NmdWxseS4NCj4gKyAgQHJldHZhbCBFRklfSU5W QUxJRF9QQVJBTUVURVIgVXNiRXRoRnVuRGVzY3JpcHRvciBpcyBOVUxMLg0KPiArICBAcmV0dmFs IEVGSV9OT1RfRk9VTkQgICAgICAgICBUaGUgVVNCIEV0aGVybmV0IEZ1bmN0aW9uYWwgZGVzY3Jp cHRvciB3YXMNCj4gbm90IGZvdW5kLg0KPiArKiovDQo+ICt0eXBlZGVmDQo+ICtFRklfU1RBVFVT DQo+ICsoRUZJQVBJICpFREtJSV9VU0JfRVRIRVJORVRfRlVOQ1RJT05BTF9ERVNDUklQVE9SKSgN Cj4gKyAgSU4gRURLSUlfVVNCX0VUSEVSTkVUX1BST1RPQ09MICAgICAgICAqVGhpcywNCj4gKyAg T1VUIFVTQl9FVEhFUk5FVF9GVU5fREVTQ1JJUFRPUiAqVXNiRXRoRnVuRGVzY3JpcHRvcg0KPiAr ICApOw0KPiArDQo+ICsvKioNCj4gKyAgVGhpcyByZXF1ZXN0IHNldHMgdGhlIEV0aGVybmV0IGRl dmljZSBtdWx0aWNhc3QgZmlsdGVycyBhcyBzcGVjaWZpZWQgaW4gdGhlDQo+ICsgIHNlcXVlbnRp YWwgbGlzdCBvZiA0OCBiaXQgRXRoZXJuZXQgbXVsdGljYXN0IGFkZHJlc3Nlcy4NCj4gKw0KPiAr ICBAcGFyYW1baW5dICBUaGlzICAgICAgICAgICAgICAgICAgIEEgcG9pbnRlciB0byB0aGUNCj4g RURLSUlfVVNCX0VUSEVSTkVUX1BST1RPQ09MIGluc3RhbmNlLg0KPiArICBAcGFyYW1baW5dICBW YWx1ZSAgICAgICAgICAgICAgICAgIE51bWJlciBvZiBmaWx0ZXJzLg0KPiArICBAcGFyYW1baW5d ICBNY2FzdEFkZHIgICAgICAgICAgICAgIEEgcG9pbnRlciB0byB0aGUgdmFsdWUgb2YgdGhlIG11 bHRpY2FzdA0KPiBhZGRyZXNzZXMuDQo+ICsNCj4gKyAgQHJldHZhbCBFRklfU1VDQ0VTUyAgICAg ICAgICAgVGhlIHJlcXVlc3QgZXhlY3V0ZWQgc3VjY2Vzc2Z1bGx5Lg0KPiArICBAcmV0dmFsIEVG SV9USU1FT1VUICAgICAgICAgICBBIHRpbWVvdXQgb2NjdXJyZWQgZXhlY3V0aW5nIHRoZSByZXF1 ZXN0Lg0KPiArICBAcmV0dmFsIEVGSV9ERVZJQ0VfRVJST1IgICAgICBUaGUgcmVxdWVzdCBmYWls ZWQgZHVlIHRvIGEgZGV2aWNlIGVycm9yLg0KPiArICBAcmV0dmFsIEVGSV9JTlZBTElEX1BBUkFN RVRFUiBPbmUgb2YgdGhlIHBhcmFtZXRlcnMgaGFzIGFuIGludmFsaWQNCj4gdmFsdWUuDQo+ICsg IEByZXR2YWwgRUZJX1VOU1VQUE9SVEVEICAgICAgIE5vdCBzdXBwb3J0ZWQuDQo+ICsqKi8NCj4g K3R5cGVkZWYNCj4gK0VGSV9TVEFUVVMNCj4gKyhFRklBUEkgKkVES0lJX1VTQl9FVEhFUk5FVF9T RVRfRVRIX01VTFRJQ0FTVF9GSUxURVJTKSgNCj4gKyAgSU4gRURLSUlfVVNCX0VUSEVSTkVUX1BS T1RPQ09MICpUaGlzLA0KPiArICBJTiBVSU5UMTYgICAgICAgICAgICAgICAgVmFsdWUsDQo+ICsg IElOIFZPSUQgICAgICAgICAgICAgICAgICAqTWNhc3RBZGRyDQo+ICsgICk7DQo+ICsNCj4gKy8q Kg0KPiArICBUaGlzIHJlcXVlc3Qgc2V0cyB1cCB0aGUgc3BlY2lmaWVkIEV0aGVybmV0IHBvd2Vy IG1hbmFnZW1lbnQgcGF0dGVybiBmaWx0ZXINCj4gYXMNCj4gKyAgZGVzY3JpYmVkIGluIHRoZSBk YXRhIHN0cnVjdHVyZS4NCj4gKw0KPiArICBAcGFyYW1baW5dICBUaGlzICAgICAgICAgICAgICAg ICAgIEEgcG9pbnRlciB0byB0aGUNCj4gRURLSUlfVVNCX0VUSEVSTkVUX1BST1RPQ09MIGluc3Rh bmNlLg0KPiArICBAcGFyYW1baW5dICBWYWx1ZSAgICAgICAgICAgICAgICAgIE51bWJlciBvZiBm aWx0ZXJzLg0KPiArICBAcGFyYW1baW5dICBMZW5ndGggICAgICAgICAgICAgICAgIFNpemUgb2Yg dGhlIHBvd2VyIG1hbmFnZW1lbnQgcGF0dGVybiBmaWx0ZXINCj4gZGF0YS4NCj4gKyAgQHBhcmFt W2luXSAgUGF0dGVybkZpbHRlciAgICAgICAgICBBIHBvaW50ZXIgdG8gdGhlIHBvd2VyIG1hbmFn ZW1lbnQgcGF0dGVybg0KPiBmaWx0ZXIgc3RydWN0dXJlLg0KPiArDQo+ICsgIEByZXR2YWwgRUZJ X1NVQ0NFU1MgICAgICAgICAgIFRoZSByZXF1ZXN0IGV4ZWN1dGVkIHN1Y2Nlc3NmdWxseS4NCj4g KyAgQHJldHZhbCBFRklfVElNRU9VVCAgICAgICAgICAgQSB0aW1lb3V0IG9jY3VycmVkIGV4ZWN1 dGluZyB0aGUgcmVxdWVzdC4NCj4gKyAgQHJldHZhbCBFRklfREVWSUNFX0VSUk9SICAgICAgVGhl IHJlcXVlc3QgZmFpbGVkIGR1ZSB0byBhIGRldmljZSBlcnJvci4NCj4gKyAgQHJldHZhbCBFRklf SU5WQUxJRF9QQVJBTUVURVIgT25lIG9mIHRoZSBwYXJhbWV0ZXJzIGhhcyBhbiBpbnZhbGlkDQo+ IHZhbHVlLg0KPiArICBAcmV0dmFsIEVGSV9VTlNVUFBPUlRFRCAgICAgICBOb3Qgc3VwcG9ydGVk Lg0KPiArKiovDQo+ICt0eXBlZGVmDQo+ICtFRklfU1RBVFVTDQo+ICsoRUZJQVBJDQo+ICpFREtJ SV9VU0JfRVRIRVJORVRfU0VUX0VUSF9QT1dFUl9NQU5BR0VfUEFUVEVSTl9GSUxURVIpKA0KPiAr ICBJTiBFREtJSV9VU0JfRVRIRVJORVRfUFJPVE9DT0wgKlRoaXMsDQo+ICsgIElOIFVJTlQxNiAg ICAgICAgICAgICAgICBWYWx1ZSwNCj4gKyAgSU4gVUlOVDE2ICAgICAgICAgICAgICAgIExlbmd0 aCwNCj4gKyAgSU4gVk9JRCAgICAgICAgICAgICAgICAgICpQYXR0ZXJuRmlsdGVyDQo+ICsgICk7 DQo+ICsNCj4gKy8qKg0KPiArICBUaGlzIHJlcXVlc3QgcmV0cmlldmVzIHRoZSBzdGF0dXMgb2Yg dGhlIHNwZWNpZmllZCBFdGhlcm5ldCBwb3dlcg0KPiBtYW5hZ2VtZW50DQo+ICsgIHBhdHRlcm4g ZmlsdGVyIGZyb20gdGhlIGRldmljZS4NCj4gKw0KPiArICBAcGFyYW1baW5dICBUaGlzICAgICAg ICAgICAgICAgICAgIEEgcG9pbnRlciB0byB0aGUNCj4gRURLSUlfVVNCX0VUSEVSTkVUX1BST1RP Q09MIGluc3RhbmNlLg0KPiArICBAcGFyYW1baW5dICBWYWx1ZSAgICAgICAgICAgICAgICAgIFRo ZSBmaWx0ZXIgbnVtYmVyLg0KPiArICBAcGFyYW1bb3V0XSBQYXR0ZXJuQWN0aXZlICAgICAgICAg IEEgcG9pbnRlciB0byB0aGUgcGF0dGVybiBhY3RpdmUgYm9vbGVhbi4NCj4gKw0KPiArICBAcmV0 dmFsIEVGSV9TVUNDRVNTICAgICAgICAgICBUaGUgcmVxdWVzdCBleGVjdXRlZCBzdWNjZXNzZnVs bHkuDQo+ICsgIEByZXR2YWwgRUZJX1RJTUVPVVQgICAgICAgICAgIEEgdGltZW91dCBvY2N1cnJl ZCBleGVjdXRpbmcgdGhlIHJlcXVlc3QuDQo+ICsgIEByZXR2YWwgRUZJX0RFVklDRV9FUlJPUiAg ICAgIFRoZSByZXF1ZXN0IGZhaWxlZCBkdWUgdG8gYSBkZXZpY2UgZXJyb3IuDQo+ICsgIEByZXR2 YWwgRUZJX0lOVkFMSURfUEFSQU1FVEVSIE9uZSBvZiB0aGUgcGFyYW1ldGVycyBoYXMgYW4gaW52 YWxpZA0KPiB2YWx1ZS4NCj4gKyAgQHJldHZhbCBFRklfVU5TVVBQT1JURUQgICAgICAgTm90IHN1 cHBvcnRlZC4NCj4gKyoqLw0KPiArdHlwZWRlZg0KPiArRUZJX1NUQVRVUw0KPiArKEVGSUFQSQ0K PiAqRURLSUlfVVNCX0VUSEVSTkVUX0dFVF9FVEhfUE9XRVJfTUFOQUdFX1BBVFRFUk5fRklMVEVS KSgNCj4gKyAgSU4gICBFREtJSV9VU0JfRVRIRVJORVRfUFJPVE9DT0wgKlRoaXMsDQo+ICsgIElO ICAgVUlOVDE2ICAgICAgICAgICAgICAgIFZhbHVlLA0KPiArICBPVVQgIEJPT0xFQU4gICAgICAg ICAgICAgICAqUGF0dGVybkFjdGl2ZQ0KPiArICApOw0KPiArDQo+ICsvKioNCj4gKyAgVGhpcyBy ZXF1ZXN0IGlzIHVzZWQgdG8gY29uZmlndXJlIGRldmljZSBFdGhlcm5ldCBwYWNrZXQgZmlsdGVy IHNldHRpbmdzLg0KPiArDQo+ICsgIEBwYXJhbVtpbl0gIFRoaXMgICAgICAgICAgICAgIEEgcG9p bnRlciB0byB0aGUgRURLSUlfVVNCX0VUSEVSTkVUX1BST1RPQ09MDQo+IGluc3RhbmNlLg0KPiAr ICBAcGFyYW1baW5dICBWYWx1ZSAgICAgICAgICAgICBQYWNrZXQgRmlsdGVyIEJpdG1hcC4NCj4g Kw0KPiArICBAcmV0dmFsIEVGSV9TVUNDRVNTICAgICAgICAgICBUaGUgcmVxdWVzdCBleGVjdXRl ZCBzdWNjZXNzZnVsbHkuDQo+ICsgIEByZXR2YWwgRUZJX1RJTUVPVVQgICAgICAgICAgIEEgdGlt ZW91dCBvY2N1cnJlZCBleGVjdXRpbmcgdGhlIHJlcXVlc3QuDQo+ICsgIEByZXR2YWwgRUZJX0RF VklDRV9FUlJPUiAgICAgIFRoZSByZXF1ZXN0IGZhaWxlZCBkdWUgdG8gYSBkZXZpY2UgZXJyb3Iu DQo+ICsgIEByZXR2YWwgRUZJX0lOVkFMSURfUEFSQU1FVEVSIE9uZSBvZiB0aGUgcGFyYW1ldGVy cyBoYXMgYW4gaW52YWxpZA0KPiB2YWx1ZS4NCj4gKyAgQHJldHZhbCBFRklfVU5TVVBQT1JURUQg ICAgICAgTm90IHN1cHBvcnRlZC4NCj4gKyoqLw0KPiArdHlwZWRlZg0KPiArRUZJX1NUQVRVUw0K PiArKEVGSUFQSSAqRURLSUlfVVNCX0VUSEVSTkVUX1NFVF9FVEhfUEFDS0VUX0ZJTFRFUikoDQo+ ICsgIElOIEVES0lJX1VTQl9FVEhFUk5FVF9QUk9UT0NPTCAqVGhpcywNCj4gKyAgSU4gVUlOVDE2 ICAgICAgICAgICAgICAgIFZhbHVlDQo+ICsgICk7DQo+ICsNCj4gKy8qKg0KPiArICBUaGlzIHJl cXVlc3QgaXMgdXNlZCB0byByZXRyaWV2ZSBhIHN0YXRpc3RpYyBiYXNlZCBvbiB0aGUgZmVhdHVy ZSBzZWxlY3Rvci4NCj4gKw0KPiArICBAcGFyYW1baW5dICBUaGlzICAgICAgICAgICAgICAgICAg QSBwb2ludGVyIHRvIHRoZQ0KPiBFREtJSV9VU0JfRVRIRVJORVRfUFJPVE9DT0wgaW5zdGFuY2Uu DQo+ICsgIEBwYXJhbVtpbl0gIEZlYXR1cmVTZWxlY3RvciAgICAgICBWYWx1ZSBvZiB0aGUgZmVh dHVyZSBzZWxlY3Rvci4NCj4gKyAgQHBhcmFtW291dF0gU3RhdGlzdGljICAgICAgICAgICAgIEEg cG9pbnRlciB0byB0aGUgMzIgYml0IHVuc2lnbmVkIGludGVnZXIuDQo+ICsNCj4gKyAgQHJldHZh bCBFRklfU1VDQ0VTUyAgICAgICAgICAgVGhlIHJlcXVlc3QgZXhlY3V0ZWQgc3VjY2Vzc2Z1bGx5 Lg0KPiArICBAcmV0dmFsIEVGSV9USU1FT1VUICAgICAgICAgICBBIHRpbWVvdXQgb2NjdXJyZWQg ZXhlY3V0aW5nIHRoZSByZXF1ZXN0Lg0KPiArICBAcmV0dmFsIEVGSV9ERVZJQ0VfRVJST1IgICAg ICBUaGUgcmVxdWVzdCBmYWlsZWQgZHVlIHRvIGEgZGV2aWNlIGVycm9yLg0KPiArICBAcmV0dmFs IEVGSV9JTlZBTElEX1BBUkFNRVRFUiBPbmUgb2YgdGhlIHBhcmFtZXRlcnMgaGFzIGFuIGludmFs aWQNCj4gdmFsdWUuDQo+ICsgIEByZXR2YWwgRUZJX1VOU1VQUE9SVEVEICAgICAgIE5vdCBzdXBw b3J0ZWQuDQo+ICsqKi8NCj4gK3R5cGVkZWYNCj4gK0VGSV9TVEFUVVMNCj4gKyhFRklBUEkgKkVE S0lJX1VTQl9FVEhFUk5FVF9HRVRfRVRIX1NUQVRJU1RJQykoDQo+ICsgIElOICBFREtJSV9VU0Jf RVRIRVJORVRfUFJPVE9DT0wgICpUaGlzLA0KPiArICBJTiAgVUlOVDE2ICAgICAgICAgICAgICAg ICBGZWF0dXJlU2VsZWN0b3IsDQo+ICsgIE9VVCBWT0lEICAgICAgICAgICAgICAgICAgICpTdGF0 aXN0aWMNCj4gKyAgKTsNCj4gKw0KPiArdHlwZWRlZiBzdHJ1Y3Qgew0KPiArICBFREtJSV9VU0Jf RVRIRVJORVRfVU5ESV9HRVRfU1RBVEUgICAgICAgICAgIFVzYkV0aFVuZGlHZXRTdGF0ZTsNCj4g KyAgRURLSUlfVVNCX0VUSEVSTkVUX1VORElfU1RBUlQgICAgICAgICAgICAgICBVc2JFdGhVbmRp U3RhcnQ7DQo+ICsgIEVES0lJX1VTQl9FVEhFUk5FVF9VTkRJX1NUT1AgICAgICAgICAgICAgICAg VXNiRXRoVW5kaVN0b3A7DQo+ICsgIEVES0lJX1VTQl9FVEhFUk5FVF9VTkRJX0dFVF9JTklUX0lO Rk8gICAgICAgVXNiRXRoVW5kaUdldEluaXRJbmZvOw0KPiArICBFREtJSV9VU0JfRVRIRVJORVRf VU5ESV9HRVRfQ09ORklHX0lORk8NCj4gVXNiRXRoVW5kaUdldENvbmZpZ0luZm87DQo+ICsgIEVE S0lJX1VTQl9FVEhFUk5FVF9VTkRJX0lOSVRJQUxJWkUgICAgICAgICAgVXNiRXRoVW5kaUluaXRp YWxpemU7DQo+ICsgIEVES0lJX1VTQl9FVEhFUk5FVF9VTkRJX1JFU0VUICAgICAgICAgICAgICAg VXNiRXRoVW5kaVJlc2V0Ow0KPiArICBFREtJSV9VU0JfRVRIRVJORVRfVU5ESV9TSFVURE9XTiAg ICAgICAgICAgIFVzYkV0aFVuZGlTaHV0ZG93bjsNCj4gKyAgRURLSUlfVVNCX0VUSEVSTkVUX1VO RElfSU5URVJSVVBUX0VOQUJMRQ0KPiBVc2JFdGhVbmRpSW50ZXJydXB0RW5hYmxlOw0KPiArICBF REtJSV9VU0JfRVRIRVJORVRfVU5ESV9SRUNFSVZFX0ZJTFRFUiAgICAgIFVzYkV0aFVuZGlSZWNl aXZlRmlsdGVyOw0KPiArICBFREtJSV9VU0JfRVRIRVJORVRfVU5ESV9TVEFUSU9OX0FERFJFU1MN Cj4gVXNiRXRoVW5kaVN0YXRpb25BZGRyZXNzOw0KPiArICBFREtJSV9VU0JfRVRIRVJORVRfVU5E SV9TVEFUSVNUSUNTICAgICAgICAgIFVzYkV0aFVuZGlTdGF0aXN0aWNzOw0KPiArICBFREtJSV9V U0JfRVRIRVJORVRfVU5ESV9NQ0FTVF9JUFRPTUFDDQo+IFVzYkV0aFVuZGlNY2FzdElwMk1hYzsN Cj4gKyAgRURLSUlfVVNCX0VUSEVSTkVUX1VORElfTlZfREFUQSAgICAgICAgICAgICBVc2JFdGhV bmRpTnZEYXRhOw0KPiArICBFREtJSV9VU0JfRVRIRVJORVRfVU5ESV9HRVRfU1RBVFVTICAgICAg ICAgIFVzYkV0aFVuZGlHZXRTdGF0dXM7DQo+ICsgIEVES0lJX1VTQl9FVEhFUk5FVF9VTkRJX0ZJ TExfSEVBREVSICAgICAgICAgVXNiRXRoVW5kaUZpbGxIZWFkZXI7DQo+ICsgIEVES0lJX1VTQl9F VEhFUk5FVF9VTkRJX1RSQU5TTUlUICAgICAgICAgICAgVXNiRXRoVW5kaVRyYW5zbWl0Ow0KPiAr ICBFREtJSV9VU0JfRVRIRVJORVRfVU5ESV9SRUNFSVZFICAgICAgICAgICAgIFVzYkV0aFVuZGlS ZWNlaXZlOw0KPiArfSBFREtJSV9VU0JfRVRIRVJORVRfVU5ESTsNCj4gKw0KPiArLy8gVGhlIEVE S0lJX1VTQl9FVEhFUk5FVF9QUk9UT0NPTCBwcm92aWRlcyBzb21lIGJhc2ljIFVTQiBFdGhlcm5l dA0KPiBkZXZpY2UgcmVsZXZhbnQNCj4gKy8vIGRlc2NyaXB0b3IgYW5kIHNwZWNpZmljIHJlcXVl c3RzLg0KPiArc3RydWN0IF9FREtJSV9VU0JfRVRIRVJORVRfUFJPVE9DT0wgew0KPiArICBFREtJ SV9VU0JfRVRIRVJORVRfVU5ESSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVXNi RXRoVW5kaTsNCj4gKyAgLy8gZm9yIGNhbGxpbmcgdGhlIFVOREkgY2hpbGQgZnVuY3Rpb25zDQo+ ICsgIEVES0lJX1VTQl9FVEhFUk5FVF9JTklUSUFMSVpFICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBVc2JFdGhJbml0aWFsaXplOw0KPiArICBFREtJSV9VU0JfRVRIRVJORVRfU1RBVElTVElD UyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVXNiRXRoU3RhdGlzdGljczsNCj4gKyAgRURL SUlfVVNCX0VUSEVSTkVUX1JFQ0VJVkUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFVz YkV0aFJlY2VpdmU7DQo+ICsgIEVES0lJX1VTQl9FVEhFUk5FVF9UUkFOU01JVCAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBVc2JFdGhUcmFuc21pdDsNCj4gKyAgRURLSUlfVVNCX0VUSEVS TkVUX0lOVEVSUlVQVCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFVzYkV0aEludGVycnVw dDsNCj4gKyAgRURLSUlfVVNCX0dFVF9FVEhfTUFDX0FERFJFU1MgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIFVzYkV0aE1hY0FkZHJlc3M7DQo+ICsgIEVES0lJX1VTQl9FVEhfTUFYX0JVTEtf U0laRSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBVc2JFdGhNYXhCdWxrU2l6ZTsNCj4g KyAgRURLSUlfVVNCX0hFQURFUl9GVU5DVElPTkFMX0RFU0NSSVBUT1INCj4gVXNiSGVhZGVyRnVu RGVzY3JpcHRvcjsNCj4gKyAgRURLSUlfVVNCX1VOSU9OX0ZVTkNUSU9OQUxfREVTQ1JJUFRPUg0K PiBVc2JVbmlvbkZ1bkRlc2NyaXB0b3I7DQo+ICsgIEVES0lJX1VTQl9FVEhFUk5FVF9GVU5DVElP TkFMX0RFU0NSSVBUT1INCj4gVXNiRXRoRnVuRGVzY3JpcHRvcjsNCj4gKyAgRURLSUlfVVNCX0VU SEVSTkVUX1NFVF9FVEhfTVVMVElDQVNUX0ZJTFRFUlMNCj4gU2V0VXNiRXRoTWNhc3RGaWx0ZXI7 DQo+ICsgIEVES0lJX1VTQl9FVEhFUk5FVF9TRVRfRVRIX1BPV0VSX01BTkFHRV9QQVRURVJOX0ZJ TFRFUg0KPiBTZXRVc2JFdGhQb3dlclBhdHRlcm5GaWx0ZXI7DQo+ICsgIEVES0lJX1VTQl9FVEhF Uk5FVF9HRVRfRVRIX1BPV0VSX01BTkFHRV9QQVRURVJOX0ZJTFRFUg0KPiBHZXRVc2JFdGhQb3dl clBhdHRlcm5GaWx0ZXI7DQo+ICsgIEVES0lJX1VTQl9FVEhFUk5FVF9TRVRfRVRIX1BBQ0tFVF9G SUxURVINCj4gU2V0VXNiRXRoUGFja2V0RmlsdGVyOw0KPiArICBFREtJSV9VU0JfRVRIRVJORVRf R0VUX0VUSF9TVEFUSVNUSUMgICAgICAgICAgICAgICAgICAgICAgR2V0VXNiRXRoU3RhdGlzdGlj Ow0KPiArfTsNCj4gKw0KPiArZXh0ZXJuIEVGSV9HVUlEICBnRWRrSUlVc2JFdGhQcm90b2NvbEd1 aWQ7DQo+ICsNCj4gKyNlbmRpZg0KPiBkaWZmIC0tZ2l0IGEvTWRlTW9kdWxlUGtnL01kZU1vZHVs ZVBrZy5kZWMNCj4gYi9NZGVNb2R1bGVQa2cvTWRlTW9kdWxlUGtnLmRlYw0KPiBpbmRleCAzZWI0 YTc5YmY3Li44NjBlZWMwZjNjIDEwMDY0NA0KPiAtLS0gYS9NZGVNb2R1bGVQa2cvTWRlTW9kdWxl UGtnLmRlYw0KPiArKysgYi9NZGVNb2R1bGVQa2cvTWRlTW9kdWxlUGtnLmRlYw0KPiBAQCAtNjg1 LDYgKzY4NSw5IEBADQo+ICAgICMjIEluY2x1ZGUvUHJvdG9jb2wvVmFyaWFibGVQb2xpY3kuaA0K PiAgICBnRWRraWlWYXJpYWJsZVBvbGljeVByb3RvY29sR3VpZCA9IHsgMHg4MUQxNjc1QywgMHg4 NkY2LCAweDQ4REYsIHsgMHhCRCwNCj4gMHg5NSwgMHg5QSwgMHg2RSwgMHg0RiwgMHgwOSwgMHgy NSwgMHhDMyB9IH0NCj4gDQo+ICsgICMjIEluY2x1ZGUvUHJvdG9jb2wvVXNiRXRoZXJuZXRQcm90 b2NvbC5oDQo+ICsgIGdFZGtJSVVzYkV0aFByb3RvY29sR3VpZCA9IHsgMHg4ZDg5NjljYywgMHhm ZWIwLCAweDQzMDMsIHsgMHhiMiwgMHgxYSwgMHgxZiwNCj4gMHgxMSwgMHg2ZiwgMHgzOCwgMHg1 NiwgMHg0MyB9IH0NCj4gKw0KPiAgW1BjZHNGZWF0dXJlRmxhZ10NCj4gICAgIyMgSW5kaWNhdGVz IGlmIHRoZSBwbGF0Zm9ybSBjYW4gc3VwcG9ydCB1cGRhdGUgY2Fwc3VsZSBhY3Jvc3MgYSBzeXN0 ZW0NCj4gcmVzZXQuPEJSPjxCUj4NCj4gICAgIyAgIFRSVUUgIC0gU3VwcG9ydHMgdXBkYXRlIGNh cHN1bGUgYWNyb3NzIGEgc3lzdGVtIHJlc2V0LjxCUj4NCj4gQEAgLTIxMDgsNiArMjExMSwyMSBA QA0KPiAgICAjIEBQcm9tcHQgVGhlIHNoYXJlZCBiaXQgbWFzayB3aGVuIEludGVsIFRkeCBpcyBl bmFibGVkLg0KPiANCj4gZ0VmaU1kZU1vZHVsZVBrZ1Rva2VuU3BhY2VHdWlkLlBjZFRkeFNoYXJl ZEJpdE1hc2t8MHgwfFVJTlQ2NHwweDEwMA0KPiAwMDAyNQ0KPiANCj4gKyAgIyMgSW5kaWNhdGVz IGlmIHRoZSBVc2IgTmV0d29yayByYXRlIGxpbWl0aW5nIFN1cHBvcnRlZC48QlI+PEJSPg0KPiAr ICAjICAgVFJVRSAgLSBVc2IgTmV0d29yayByYXRlIGxpbWl0aW5nIGlzIHN1cHBvcnRlZC48QlI+ DQo+ICsgICMgICBGQUxTRSAtIFVzYiBOZXR3b3JrIHJhdGUgbGltaXRpbmcgaXMgbm90IHN1cHBv cnRlZC48QlI+DQo+ICsgICMgQFByb21wdCBFbmFibGUgVXNiIE5ldHdvcmsgcmF0ZSBsaW1pdGlu ZyBzdXBwb3J0Lg0KPiArDQo+IGdFZmlNZGVNb2R1bGVQa2dUb2tlblNwYWNlR3VpZC5QY2RFbmFi bGVVc2JOZXR3b3JrUmF0ZUxpbWl0aW5nfEZBTFNFDQo+IHxCT09MRUFOfDB4MTAwMDAwMjYNCj4g Kw0KPiArICAjIyBUaGUgcmF0ZSBsaW1pdGluZyBDcmVkaXQgdmFsdWUgaXMgY2hlY2sgaW4gcmF0 ZSBsaW1pdGVyIGV2ZW50Lg0KPiArICAjICBJdCBpcyB0byBjb250cm9sIHRoZSBSYXRlTGltaXRp bmdDcmVkaXRDb3VudCBtYXggdmFsdWUuDQo+ICsgICMgQFByb21wdCBUaGUgdmFsdWUgaXMgdXNl IGZvciBVc2IgTmV0d29yayByYXRlIGxpbWl0aW5nIHN1cHBvcnRlZC4NCj4gKw0KPiBnRWZpTWRl TW9kdWxlUGtnVG9rZW5TcGFjZUd1aWQuUGNkVXNiTmV0d29ya1JhdGVMaW1pdGluZ0NyZWRpdHwx MHxVSU4NCj4gVDMyfDB4MTAwMDAwMjcNCj4gKw0KPiArICAjIyBUaGUgdmFsdWUgb2YgcmF0ZSBs aW1pdGVyIGV2ZW50IGZvciB0aW1lb3V0IGNoZWNrLiBEZWZhdWx0IHZhbHVlIGlzDQo+IDEwMCh1 bml0IDFtcykuDQo+ICsgICMgQFByb21wdCBUaGUgdmFsdWUgaXMgdXNlIGZvciBVc2IgTmV0d29y ayByYXRlIGxpbWl0aW5nIHN1cHBvcnRlZC4NCj4gKw0KPiBnRWZpTWRlTW9kdWxlUGtnVG9rZW5T cGFjZUd1aWQuUGNkVXNiTmV0d29ya1JhdGVMaW1pdGluZ0ZhY3RvcnwxMDB8VUkNCj4gTlQzMnww eDEwMDAwMDI4DQo+ICsNCj4gIFtQY2RzUGF0Y2hhYmxlSW5Nb2R1bGVdDQo+ICAgICMjIFNwZWNp ZnkgbWVtb3J5IHNpemUgd2l0aCBwYWdlIG51bWJlciBmb3IgUEVJIGNvZGUgd2hlbg0KPiAgICAj ICBMb2FkaW5nIE1vZHVsZSBhdCBGaXhlZCBBZGRyZXNzIGZlYXR1cmUgaXMgZW5hYmxlZC4NCj4g ZGlmZiAtLWdpdCBhL01kZU1vZHVsZVBrZy9NZGVNb2R1bGVQa2cuZHNjDQo+IGIvTWRlTW9kdWxl UGtnL01kZU1vZHVsZVBrZy5kc2MNCj4gaW5kZXggMTAxNDU5OGYzMS4uMGFhZGQ0MDVmMyAxMDA2 NDQNCj4gLS0tIGEvTWRlTW9kdWxlUGtnL01kZU1vZHVsZVBrZy5kc2MNCj4gKysrIGIvTWRlTW9k dWxlUGtnL01kZU1vZHVsZVBrZy5kc2MNCj4gQEAgLTI3NCw2ICsyNzQsMTAgQEANCj4gICAgTWRl TW9kdWxlUGtnL0J1cy9Vc2IvVXNiTWFzc1N0b3JhZ2VEeGUvVXNiTWFzc1N0b3JhZ2VEeGUuaW5m DQo+IA0KPiBNZGVNb2R1bGVQa2cvQnVzL1VzYi9Vc2JNb3VzZUFic29sdXRlUG9pbnRlckR4ZS9V c2JNb3VzZUFic29sdXRlUG9pDQo+IG50ZXJEeGUuaW5mDQo+ICAgIE1kZU1vZHVsZVBrZy9CdXMv VXNiL1VzYk1vdXNlRHhlL1VzYk1vdXNlRHhlLmluZg0KPiArDQo+IE1kZU1vZHVsZVBrZy9CdXMv VXNiL1VzYk5ldHdvcmsvTmV0d29ya0NvbW1vbi9OZXR3b3JrQ29tbW9uLmluZg0KPiArICBNZGVN b2R1bGVQa2cvQnVzL1VzYi9Vc2JOZXR3b3JrL1VzYkNkY0VjbS9Vc2JDZGNFY20uaW5mDQo+ICsg IE1kZU1vZHVsZVBrZy9CdXMvVXNiL1VzYk5ldHdvcmsvVXNiQ2RjTmNtL1VzYkNkY05jbS5pbmYN Cj4gKyAgTWRlTW9kdWxlUGtnL0J1cy9Vc2IvVXNiTmV0d29yay9Vc2JSbmRpcy9Vc2JSbmRpcy5p bmYNCj4gICAgTWRlTW9kdWxlUGtnL0J1cy9JMmMvSTJjRHhlL0kyY0J1c0R4ZS5pbmYNCj4gICAg TWRlTW9kdWxlUGtnL0J1cy9JMmMvSTJjRHhlL0kyY0hvc3REeGUuaW5mDQo+ICAgIE1kZU1vZHVs ZVBrZy9CdXMvSTJjL0kyY0R4ZS9JMmNEeGUuaW5mDQo+IC0tDQo+IDIuMzUuMS53aW5kb3dzLjIN Cj4gLVRoZSBpbmZvcm1hdGlvbiBjb250YWluZWQgaW4gdGhpcyBtZXNzYWdlIG1heSBiZSBjb25m aWRlbnRpYWwgYW5kDQo+IHByb3ByaWV0YXJ5IHRvIEFtZXJpY2FuIE1lZ2F0cmVuZHMgKEFNSSku IFRoaXMgY29tbXVuaWNhdGlvbiBpcyBpbnRlbmRlZCB0bw0KPiBiZSByZWFkIG9ubHkgYnkgdGhl IGluZGl2aWR1YWwgb3IgZW50aXR5IHRvIHdob20gaXQgaXMgYWRkcmVzc2VkIG9yIGJ5IHRoZWly DQo+IGRlc2lnbmVlLiBJZiB0aGUgcmVhZGVyIG9mIHRoaXMgbWVzc2FnZSBpcyBub3QgdGhlIGlu dGVuZGVkIHJlY2lwaWVudCwgeW91IGFyZSBvbg0KPiBub3RpY2UgdGhhdCBhbnkgZGlzdHJpYnV0 aW9uIG9mIHRoaXMgbWVzc2FnZSwgaW4gYW55IGZvcm0sIGlzIHN0cmljdGx5IHByb2hpYml0ZWQu DQo+IFBsZWFzZSBwcm9tcHRseSBub3RpZnkgdGhlIHNlbmRlciBieSByZXBseSBlLW1haWwgb3Ig YnkgdGVsZXBob25lIGF0IDc3MC0yNDYtDQo+IDg2MDAsIGFuZCB0aGVuIGRlbGV0ZSBvciBkZXN0 cm95IGFsbCBjb3BpZXMgb2YgdGhlIHRyYW5zbWlzc2lvbi4NCj4gDQo+IA0KPiANCj4gDQoNCg==