From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from mga04.intel.com (mga04.intel.com [192.55.52.120]) by mx.groups.io with SMTP id smtpd.web11.36519.1599463805709810528 for ; Mon, 07 Sep 2020 00:30:05 -0700 Authentication-Results: mx.groups.io; dkim=pass header.i=@intel.onmicrosoft.com header.s=selector2-intel-onmicrosoft-com header.b=nwsgmbov; spf=pass (domain: intel.com, ip: 192.55.52.120, mailfrom: zhichao.gao@intel.com) IronPort-SDR: hhaLdEb8Zi7Wg8QvROz0ZNy9uy8oRVCgwRvM4yRvEhSz9dTcRg+kea5QRkbLwrd6HTfA0YnUSi mFDlzzM5nMwg== X-IronPort-AV: E=McAfee;i="6000,8403,9736"; a="155368829" X-IronPort-AV: E=Sophos;i="5.76,401,1592895600"; d="scan'208";a="155368829" X-Amp-Result: SKIPPED(no attachment in message) X-Amp-File-Uploaded: False Received: from fmsmga003.fm.intel.com ([10.253.24.29]) by fmsmga104.fm.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 07 Sep 2020 00:30:03 -0700 IronPort-SDR: V/CpAmJCliU5pnX8HpeICV2iUcc4sDlvIT0xYfgr00hTvo/6WVw1n3ovBdx2Y8uyw4MKwfgbEE xBFNcnd4e82Q== X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="5.76,401,1592895600"; d="scan'208";a="340737992" Received: from fmsmsx604.amr.corp.intel.com ([10.18.126.84]) by FMSMGA003.fm.intel.com with ESMTP; 07 Sep 2020 00:29:59 -0700 Received: from fmsmsx604.amr.corp.intel.com (10.18.126.84) by fmsmsx604.amr.corp.intel.com (10.18.126.84) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.1713.5; Mon, 7 Sep 2020 00:29:58 -0700 Received: from fmsmsx153.amr.corp.intel.com (10.18.125.6) by fmsmsx604.amr.corp.intel.com (10.18.126.84) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256) id 15.1.1713.5 via Frontend Transport; Mon, 7 Sep 2020 00:29:58 -0700 Received: from fmsedg602.ED.cps.intel.com (10.1.192.136) by FMSMSX153.amr.corp.intel.com (10.18.125.6) with Microsoft SMTP Server (TLS) id 14.3.439.0; Mon, 7 Sep 2020 00:29:58 -0700 Received: from NAM12-DM6-obe.outbound.protection.outlook.com (104.47.59.172) by edgegateway.intel.com (192.55.55.71) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.1.1713.5; Mon, 7 Sep 2020 00:29:58 -0700 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=MU/hTCm0Xy/rhxrSPbXu7CINXDEVcvve2QdxbO3fPSvZfjTqws4Bec6GYZDCZHOvrPe5XfiI90R6P3mbyj/ogcXQAysZujlafhBHzmkKy2eJQqblkmCkKeKvnzk6mlPcyne2gYhv6lR2MiNzQBurgR5K8xPGQfTbyTFKM5tfzKe8oIMuvp10EdI8aU2vdctYgRsI3NOroi2abCDkuEMmfSqPM61cdrKhx4Ts57H/dEYl5jZphVHnZkcIC0Luq+fR5Anyze6Y8I7dHL2lSm8VM7ThTnoYa5dqQPfYasz9Afr8uwEAF+tVXmTN22/0AoB5LeicbWAuOSx5Y6kwLYhpsg== 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-SenderADCheck; bh=xVJvE4jNYgCTXgdTx1xrMF6eIvMuvlNDzNYaEdOZzIU=; b=fB6jGlH8mblbfMRaJOqpsxlEt5Raqcxk0Y+HdfhLEZn72E8JXOa94ONTQUAEablR0VfnbYYVT+5hKmDXH4RQvi+QlvHt1Z7MgHbbFhKzSRyCbwkTMZStYRFDXUk3eTpnitxX7KcHypN1Hn0/SJoFk92P3Ol/UyPIWGj8NeJx/of4I6eZIU48GCJhEFjvm55pbOd/L+5Ie13Jjq6neiXahLpUMDqTnUmqyK0P1An+9XPdsn1b3TM01Z9+GKhEKx1R6DxQ0kY1ozHeRBo8laZGBREzyFwZpbgUA8EWz1Wl+qbHd53WqiUdo7sUhVIMbhQOamtUtMRru+TVFlGVx/vCPg== 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 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=intel.onmicrosoft.com; s=selector2-intel-onmicrosoft-com; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=xVJvE4jNYgCTXgdTx1xrMF6eIvMuvlNDzNYaEdOZzIU=; b=nwsgmbovLcY4h1C8bRJ5OBCromsq2UE16o012WuQPx68z9HffuOZdyFTe1jl6Z5/1vJRjyLYdKvzlqkJAAXOrGqQVFaFm5Igq+BZhseJTKnYywJWU3ALTrkx0BuEJJLGfeIewl64NHh6mz7jWPucAHLUgomJP/RPuBplhuiV3rM= Received: from DM6PR11MB4425.namprd11.prod.outlook.com (2603:10b6:5:1d9::31) by DM5PR1101MB2203.namprd11.prod.outlook.com (2603:10b6:4:52::7) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.3348.18; Mon, 7 Sep 2020 07:29:55 +0000 Received: from DM6PR11MB4425.namprd11.prod.outlook.com ([fe80::8dc1:7146:874:83f7]) by DM6PR11MB4425.namprd11.prod.outlook.com ([fe80::8dc1:7146:874:83f7%6]) with mapi id 15.20.3348.019; Mon, 7 Sep 2020 07:29:55 +0000 From: "Gao, Zhichao" To: "devel@edk2.groups.io" , "vladimir.olovyannikov@broadcom.com" CC: Samer El-Haj-Mahmoud , Laszlo Ersek , Maciej Rabeda , "Wu, Jiaxin" , "Fu, Siyuan" , "Ni, Ray" , "Gao, Liming" , Nd Subject: Re: [edk2-devel] [PATCH v9 1/1] ShellPkg/DynamicCommand: add HttpDynamicCommand Thread-Topic: [edk2-devel] [PATCH v9 1/1] ShellPkg/DynamicCommand: add HttpDynamicCommand Thread-Index: AQHWfmSkl3q5MFNnN06hXIXxJN4h86lUnujggAAcKQCAAE3JIA== Date: Mon, 7 Sep 2020 07:29:55 +0000 Message-ID: References: <20200830002847.12726-1-vladimir.olovyannikov@broadcom.com> <20200830002847.12726-3-vladimir.olovyannikov@broadcom.com> <83d2bd1699161581453f8f0ff2e3c676@mail.gmail.com> In-Reply-To: <83d2bd1699161581453f8f0ff2e3c676@mail.gmail.com> Accept-Language: en-US X-MS-Has-Attach: X-MS-TNEF-Correlator: dlp-product: dlpe-windows dlp-reaction: no-action dlp-version: 11.5.1.3 authentication-results: edk2.groups.io; dkim=none (message not signed) header.d=none;edk2.groups.io; dmarc=none action=none header.from=intel.com; x-originating-ip: [192.102.204.38] x-ms-publictraffictype: Email x-ms-office365-filtering-correlation-id: ffc11202-5aa7-4c0d-55d8-08d852ffd16b x-ms-traffictypediagnostic: DM5PR1101MB2203: x-ms-exchange-transport-forked: True x-microsoft-antispam-prvs: x-ms-oob-tlc-oobclassifiers: OLM:4502; x-ms-exchange-senderadcheck: 1 x-microsoft-antispam: BCL:0; x-microsoft-antispam-message-info: cn+/k2dEvUl+Jm3qj71s+aI/rnNbkrd3uCx7ZZ1aiKQzNvGlPKeGDbj4N6rGVmSOU16pp3BkjL/X741XzYBOmnO+fN8mENNuRTKNn5ujEFYMvmA7141RBuC3VZyS53OzmXF3tj+Ygj4/TMpGQ/cW/61JXcATWTFCNtxR8YpRu7sJr+malyb57ANVAUYoLIqA7RF+nayk12iHFGqmvDH3GW5IyNaxFAe0Z5qrd6Y/hnYny94VdWc1HD3fArd0O0CNoHO0XBx8opCkra0rYvQtCeQA+GWAnZDFv70KbjPSUrWgyi7Gvdeo+0LBuGU+B+41f7dJFgTucM6F86Xj+Q0zzZCKoIDjYc38wbW/76eAs7lbra1XBDUZb+XePEnz74tMwnzwVEUTFMWg3qZEJQEK2S95j7R6AOl+iev1JoTaHwV+R9/q2ub9GmcO/QRUSqqeLnoTqdSoC715i+2/rU4pS7OATSSCgpGQKR86ZjdqvPM= x-forefront-antispam-report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:DM6PR11MB4425.namprd11.prod.outlook.com;PTR:;CAT:NONE;SFS:(6019001)(4636009)(346002)(376002)(39860400002)(396003)(366004)(136003)(30864003)(83380400001)(26005)(54906003)(478600001)(110136005)(186003)(52536014)(55016002)(66946007)(83080400001)(76116006)(9686003)(66556008)(64756008)(66446008)(66476007)(2906002)(966005)(6506007)(53546011)(4326008)(86362001)(5660300002)(71200400001)(33656002)(7696005)(8676002)(316002)(19627235002)(8936002)(16940595002)(569008);DIR:OUT;SFP:1102; x-ms-exchange-antispam-messagedata: A+ZHicbnu+eDQ82mNArrFxETqBa1EgftHq16GhkLD0m4t69Omztonw+fAhRw0vbC4n0tWz6SeHj3eriDfuS46iImWosiLfTbJlwf1p3XzdHX/s3Oc9biY5ymAPCGQpMaEDjNi5jzR7JxIHFbG+7qETC8MYBEDpwMrsRE9+1cPkWNTUVyWwOrPKPML8BI6E9cNdFuMezNHJJjvh+YNq4QJGGD2NS0QjzKNhxmWfnvAwy6Z7CcP50Fm+LnskYmw7qHKQaRJKnagYlvTzOT6Y9PkSJQlAWrUeMlRhTxkXqD1IVyJVg8eqsT4XfqYnPPNWiYxC4fcDiaMuTBjn1h5b9t9YGEKQO+EpqpzdDaTyWbZyns/K2hUAnIiqoZ3dw0ZRSxDw0ymCeh1gJMxqol12sKtWP8PWnDVpCdTxjvNPCfTzMadSOnSRV69sq5/DxZx9UMBtuH78iW/pkQhDJ79M1ZZA99dzSxTXdRjZjJ/HRzHqGiSIV4KUAEw6r+CLnBJG/Oo2jV01g08R1N7RTSWB0OH1rHMridJYp21ygwtb2AvZ9Yfvy2n8AXqvhFlGjuDzVrf0DZ0ERup55hgZhvQAtBjDkYIxrLdkECRpI8y9FMAoDRpCJvXq5BtToA/W8qKAoUdHpeWU8p67Dx7LPseP1XnA== MIME-Version: 1.0 X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-AuthSource: DM6PR11MB4425.namprd11.prod.outlook.com X-MS-Exchange-CrossTenant-Network-Message-Id: ffc11202-5aa7-4c0d-55d8-08d852ffd16b X-MS-Exchange-CrossTenant-originalarrivaltime: 07 Sep 2020 07:29:55.5216 (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: ZFQYUHIlyMYtgIDzpSYvdtkUVm53wx8yXXCwX1bMidCsmmSPPggz1evclL0vCViJ2ASskSyx/ckPtNISQgafpw== X-MS-Exchange-Transport-CrossTenantHeadersStamped: DM5PR1101MB2203 Return-Path: zhichao.gao@intel.com X-OriginatorOrg: intel.com Content-Language: en-US Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 SGkgVmxhZGltbWlyLA0KDQpUaGVyZSBpcyBubyB0b29scyB0byBjaGVjayB0aGUgY29kaW5nIHN0 eWxlIGFuZCB0aGUgQ0NTIHNwZWMuIEkgY2hlY2sgdGhydSBwZXJzb25hbCByZXZpZXcuIEhvcGUg dGhlIGNoZWNrIHdvdWxkIGFkZGVkIGluIHRoZSBwYXRjaCBjaGVjayBpbiB0aGUgZnV0dXJlLg0K DQpUaGFua3MsDQpaaGljaGFvDQoNCj4gLS0tLS1PcmlnaW5hbCBNZXNzYWdlLS0tLS0NCj4gRnJv bTogZGV2ZWxAZWRrMi5ncm91cHMuaW8gPGRldmVsQGVkazIuZ3JvdXBzLmlvPiBPbiBCZWhhbGYg T2YgVmxhZGltaXINCj4gT2xvdnlhbm5pa292IHZpYSBncm91cHMuaW8NCj4gU2VudDogV2VkbmVz ZGF5LCBTZXB0ZW1iZXIgMiwgMjAyMCAxMTo0OSBBTQ0KPiBUbzogR2FvLCBaaGljaGFvIDx6aGlj aGFvLmdhb0BpbnRlbC5jb20+OyBkZXZlbEBlZGsyLmdyb3Vwcy5pbw0KPiBDYzogU2FtZXIgRWwt SGFqLU1haG1vdWQgPFNhbWVyLkVsLUhhai1NYWhtb3VkQGFybS5jb20+OyBMYXN6bG8gRXJzZWsN Cj4gPGxlcnNla0ByZWRoYXQuY29tPjsgTWFjaWVqIFJhYmVkYSA8bWFjaWVqLnJhYmVkYUBsaW51 eC5pbnRlbC5jb20+OyBXdSwNCj4gSmlheGluIDxqaWF4aW4ud3VAaW50ZWwuY29tPjsgRnUsIFNp eXVhbiA8c2l5dWFuLmZ1QGludGVsLmNvbT47IE5pLCBSYXkNCj4gPHJheS5uaUBpbnRlbC5jb20+ OyBHYW8sIExpbWluZyA8bGltaW5nLmdhb0BpbnRlbC5jb20+OyBOZCA8bmRAYXJtLmNvbT4NCj4g U3ViamVjdDogUmU6IFtlZGsyLWRldmVsXSBbUEFUQ0ggdjkgMS8xXSBTaGVsbFBrZy9EeW5hbWlj Q29tbWFuZDogYWRkDQo+IEh0dHBEeW5hbWljQ29tbWFuZA0KPiANCj4gSGkgWmhpY2hhbywNCj4g VGhhbmsgeW91IGZvciB0aGUgZmVlZGJhY2suDQo+IA0KPiA+IC0tLS0tT3JpZ2luYWwgTWVzc2Fn ZS0tLS0tDQo+ID4gRnJvbTogR2FvLCBaaGljaGFvIDx6aGljaGFvLmdhb0BpbnRlbC5jb20+DQo+ ID4gU2VudDogVHVlc2RheSwgU2VwdGVtYmVyIDEsIDIwMjAgNzozMiBQTQ0KPiA+IFRvOiBkZXZl bEBlZGsyLmdyb3Vwcy5pbzsgdmxhZGltaXIub2xvdnlhbm5pa292QGJyb2FkY29tLmNvbQ0KPiA+ IENjOiBTYW1lciBFbC1IYWotTWFobW91ZCA8U2FtZXIuRWwtSGFqLU1haG1vdWRAYXJtLmNvbT47 IExhc3psbw0KPiA+IEVyc2VrIDxsZXJzZWtAcmVkaGF0LmNvbT47IE1hY2llaiBSYWJlZGENCj4g PiA8bWFjaWVqLnJhYmVkYUBsaW51eC5pbnRlbC5jb20+OyBXdSwgSmlheGluIDxqaWF4aW4ud3VA aW50ZWwuY29tPjsgRnUsDQo+ID4gU2l5dWFuIDxzaXl1YW4uZnVAaW50ZWwuY29tPjsgTmksIFJh eSA8cmF5Lm5pQGludGVsLmNvbT47IEdhbywgTGltaW5nDQo+ID4gPGxpbWluZy5nYW9AaW50ZWwu Y29tPjsgTmQgPG5kQGFybS5jb20+DQo+ID4gU3ViamVjdDogUkU6IFtlZGsyLWRldmVsXSBbUEFU Q0ggdjkgMS8xXSBTaGVsbFBrZy9EeW5hbWljQ29tbWFuZDogYWRkDQo+ID4gSHR0cER5bmFtaWND b21tYW5kDQo+ID4NCj4gPiBUaGVyZSBpcyBubyBtdWNoIGNoYW5nZSBmb3IgdGhlIHNoZWxsIHBh cnQgVlMgVjYuIEJ1dCB0aGVyZSBhcmUgc3RpbGwNCj4gc29tZQ0KPiA+IGNvZGluZyBpc3N1ZS4g SSBhbHJlYWR5IGZpeGVkIGl0IGluIG15IGJyYW5jaA0KPiA+IGh0dHBzOi8vZ2l0aHViLmNvbS9a aGljaGFvR2FvL2VkazIvdHJlZS9wdXNoLCBvbmx5IGluZGVudCBpc3N1ZS4NCj4gVGhhbmsgeW91 IGZvciBzcG90dGluZyB0aGVzZS4NCj4gV2hpY2ggdG9vbCBkbyB5b3UgdXNlIHRvIGZpbmQgaXNz dWVzIGxpa2UgdGhpcz8NCj4gSSBsb29rZWQgdGhyb3VnaCB0aGUgY29kZSBhbmQganVzdCBvdmVy bG9va2VkIHRoaXMgaXNzdWUuDQo+ID4NCj4gPiBBbm90aGVyIGlzc3VlIGlzIHRoZSBFZmlUaW1l VG9FcG9jaDoNCj4gPiAtLS0NCj4gPiAgIFVJTlQzMiBFcG9jaERheXM7ICAgLy8gTnVtYmVyIG9m IGRheXMgZWxhcHNlZCBzaW5jZSBFUE9DSF9KVUxJQU5fREFZDQo+ID4gICBVSU5UMzIgRXBvY2hT ZWNvbmRzOw0KPiA+DQo+ID4gICBFcG9jaERheXMgPSBFZmlHZXRFcG9jaERheXMgKFRpbWUpOw0K PiA+IC0tLQ0KPiA+IEVmaUdldEVwb2NoRGF5cyByZXR1cm4gVUlOVE4gYW5kIGl0IHdvdWxkIGNh dXNlIGEgd2FybmluZyAod2FybmluZyB3b3VsZA0KPiA+IGJlIHRyZWF0ZWQgYXMgZXJyb3IpIHVu ZGVyIFg2NCBidWlsZC4gUGxlYXNlIGZpeCBpdC4NCj4gT0suIEkgYWN0dWFsbHkgdG9vayBpdCBl eGFjdGx5IGFzIGl0IGlzIGluDQo+IEVtYmVkZGVkUGtnL0xpYnJhcnkvVGltZUJhc2VMaWIvVGlt ZUJhc2VMaWIuYw0KPiBUaGUgdmVyeSBzYW1lIGlzc3VlIGV4aXN0cyB0aGVyZS4gRXZlbiB0aG91 Z2ggaXQgYnVpbGRzIGZpbmUgd2l0aA0KPiBidWlsZCAtYSBYNjQgLWIgTk9PUFQgLXQgR0NDNDgg LXAgU2hlbGxQa2cvU2hlbGxQa2cuZHNjIC1tDQo+IFNoZWxsUGtnL0R5bmFtaWNDb21tYW5kL0h0 dHBEeW5hbWljQ29tbWFuZC9IdHRwRHluYW1pY0NvbW1hbmQuaW5mDQo+IEkgYWdyZWUsIGl0IHNo b3VsZCBoYXZlIFVJTlROIGV2ZXJ5d2hlcmUuDQo+IFNpbWlsYXIgZml4IGhhcyB0byBiZSBkb25l IGZvcg0KPiBFbWJlZGRlZFBrZy9MaWJyYXJ5L1RpbWVCYXNlTGliL1RpbWVCYXNlTGliLmMgaW4g YSBsYXRlciwgc2VwYXJhdGUgcGF0Y2guDQo+ID4NCj4gPiBPdGhlcnMgYXJlIE9LIGZvciBtZS4N Cj4gPg0KPiA+IFRoYW5rcywNCj4gPiBaaGljaGFvDQo+IFRoYW5rIHlvdSwNCj4gVmxhZGltaXIN Cj4gPg0KPiA+ID4gLS0tLS1PcmlnaW5hbCBNZXNzYWdlLS0tLS0NCj4gPiA+IEZyb206IGRldmVs QGVkazIuZ3JvdXBzLmlvIDxkZXZlbEBlZGsyLmdyb3Vwcy5pbz4gT24gQmVoYWxmIE9mDQo+ID4g VmxhZGltaXINCj4gPiA+IE9sb3Z5YW5uaWtvdiB2aWEgZ3JvdXBzLmlvDQo+ID4gPiBTZW50OiBT dW5kYXksIEF1Z3VzdCAzMCwgMjAyMCA4OjI5IEFNDQo+ID4gPiBUbzogZGV2ZWxAZWRrMi5ncm91 cHMuaW8NCj4gPiA+IENjOiBWbGFkaW1pciBPbG92eWFubmlrb3YgPHZsYWRpbWlyLm9sb3Z5YW5u aWtvdkBicm9hZGNvbS5jb20+Ow0KPiA+IFNhbWVyIEVsLQ0KPiA+ID4gSGFqLU1haG1vdWQgPFNh bWVyLkVsLUhhai1NYWhtb3VkQGFybS5jb20+OyBMYXN6bG8gRXJzZWsNCj4gPiA+IDxsZXJzZWtA cmVkaGF0LmNvbT47IEdhbywgWmhpY2hhbyA8emhpY2hhby5nYW9AaW50ZWwuY29tPjsgTWFjaWVq DQo+ID4gUmFiZWRhDQo+ID4gPiA8bWFjaWVqLnJhYmVkYUBsaW51eC5pbnRlbC5jb20+OyBXdSwg SmlheGluIDxqaWF4aW4ud3VAaW50ZWwuY29tPjsgRnUsDQo+ID4gU2l5dWFuDQo+ID4gPiA8c2l5 dWFuLmZ1QGludGVsLmNvbT47IE5pLCBSYXkgPHJheS5uaUBpbnRlbC5jb20+OyBHYW8sIExpbWlu Zw0KPiA+ID4gPGxpbWluZy5nYW9AaW50ZWwuY29tPjsgTmQgPG5kQGFybS5jb20+DQo+ID4gPiBT dWJqZWN0OiBbZWRrMi1kZXZlbF0gW1BBVENIIHY5IDEvMV0gU2hlbGxQa2cvRHluYW1pY0NvbW1h bmQ6IGFkZA0KPiA+ID4gSHR0cER5bmFtaWNDb21tYW5kDQo+ID4gPg0KPiA+ID4gSW50cm9kdWNl IGFuIGh0dHAgY2xpZW50IHV0aWxpemluZyBFREsyIEhUVFAgcHJvdG9jb2wsIHRvDQo+ID4gPiBh bGxvdyBmYXN0IGltYWdlIGRvd25sb2FkaW5nIGZyb20gaHR0cC9odHRwcyBzZXJ2ZXJzLg0KPiA+ ID4gSFRUUCBkb3dubG9hZCBzcGVlZCBpcyB1c3VhbGx5IGZhc3RlciB0aGFuIHRmdHAuDQo+ID4g PiBUaGUgY2xpZW50IGlzIGJhc2VkIG9uIHRoZSBzYW1lIGFwcHJvYWNoIGFzIHRmdHAgZHluYW1p YyBjb21tYW5kLCBhbmQNCj4gPiA+IHVzZXMgdGhlIHNhbWUgVUVGSSBTaGVsbCBjb21tYW5kIGxp bmUgcGFyYW1ldGVycy4gVGhpcyBtYWtlcyBpdCBlYXN5DQo+ID4gPiBpbnRlZ3JhdGluZyBodHRw IGludG8gZXhpc3RpbmcgVUVGSSBTaGVsbCBzY3JpcHRzLg0KPiA+ID4gTm90ZSB0aGF0IHRvIGVu YWJsZSBIVFRQIGRvd25sb2FkLCBmZWF0dXJlIFBjZA0KPiA+ID4gZ0VmaU5ldHdvcmtQa2dUb2tl blNwYWNlR3VpZC5QY2RBbGxvd0h0dHBDb25uZWN0aW9ucyBtdXN0DQo+ID4gPiBiZSBzZXQgdG8g VFJVRS4NCj4gPiA+IEJaOiBodHRwczovL2J1Z3ppbGxhLnRpYW5vY29yZS5vcmcvc2hvd19idWcu Y2dpP2lkPTI4NjANCj4gPiA+DQo+ID4gPiBTaWduZWQtb2ZmLWJ5OiBWbGFkaW1pciBPbG92eWFu bmlrb3YNCj4gPiA8dmxhZGltaXIub2xvdnlhbm5pa292QGJyb2FkY29tLmNvbT4NCj4gPiA+IENj OiBTYW1lciBFbC1IYWotTWFobW91ZCA8U2FtZXIuRWwtSGFqLU1haG1vdWRAYXJtLmNvbT4NCj4g PiA+IENjOiBMYXN6bG8gRXJzZWsgPGxlcnNla0ByZWRoYXQuY29tPg0KPiA+ID4gQ2M6IFpoaWNo YW8gR2FvIDx6aGljaGFvLmdhb0BpbnRlbC5jb20+DQo+ID4gPiBDYzogTWFjaWVqIFJhYmVkYSA8 bWFjaWVqLnJhYmVkYUBsaW51eC5pbnRlbC5jb20+DQo+ID4gPiBDYzogSmlheGluIFd1IDxqaWF4 aW4ud3VAaW50ZWwuY29tPg0KPiA+ID4gQ2M6IFNpeXVhbiBGdSA8c2l5dWFuLmZ1QGludGVsLmNv bT4NCj4gPiA+IENjOiBSYXkgTmkgPHJheS5uaUBpbnRlbC5jb20+DQo+ID4gPiBDYzogTGltaW5n IEdhbyA8bGltaW5nLmdhb0BpbnRlbC5jb20+DQo+ID4gPiBDYzogTmQgPG5kQGFybS5jb20+DQo+ ID4gPiAtLS0NCj4gPiA+ICBTaGVsbFBrZy9TaGVsbFBrZy5kZWMgICAgICAgICAgICAgICAgICAg ICAgICAgfCAgICAxICsNCj4gPiA+ICBTaGVsbFBrZy9TaGVsbFBrZy5kc2MgICAgICAgICAgICAg ICAgICAgICAgICAgfCAgICA1ICsNCj4gPiA+ICAuLi4vSHR0cER5bmFtaWNDb21tYW5kL0h0dHBB cHAuaW5mICAgICAgICAgICAgfCAgIDU4ICsNCj4gPiA+ICAuLi4vSHR0cER5bmFtaWNDb21tYW5k L0h0dHBEeW5hbWljQ29tbWFuZC5pbmYgfCAgIDYzICsNCj4gPiA+ICAuLi4vRHluYW1pY0NvbW1h bmQvSHR0cER5bmFtaWNDb21tYW5kL0h0dHAuaCAgfCAgIDkwICsNCj4gPiA+ICBTaGVsbFBrZy9J bmNsdWRlL0d1aWQvU2hlbGxMaWJIaWlHdWlkLmggICAgICAgfCAgICA1ICsNCj4gPiA+ICAuLi4v RHluYW1pY0NvbW1hbmQvSHR0cER5bmFtaWNDb21tYW5kL0h0dHAuYyAgfCAxODMwDQo+ID4gPiAr KysrKysrKysrKysrKysrKw0KPiA+ID4gIC4uLi9IdHRwRHluYW1pY0NvbW1hbmQvSHR0cEFwcC5j ICAgICAgICAgICAgICB8ICAgNjEgKw0KPiA+ID4gIC4uLi9IdHRwRHluYW1pY0NvbW1hbmQvSHR0 cER5bmFtaWNDb21tYW5kLmMgICB8ICAxMzcgKysNCj4gPiA+ICAuLi4vSHR0cER5bmFtaWNDb21t YW5kL0h0dHAudW5pICAgICAgICAgICAgICAgfCAgMTE3ICsrDQo+ID4gPiAgMTAgZmlsZXMgY2hh bmdlZCwgMjM2NyBpbnNlcnRpb25zKCspDQo+ID4gPiAgY3JlYXRlIG1vZGUgMTAwNjQ0DQo+ID4g PiBTaGVsbFBrZy9EeW5hbWljQ29tbWFuZC9IdHRwRHluYW1pY0NvbW1hbmQvSHR0cEFwcC5pbmYN Cj4gPiA+ICBjcmVhdGUgbW9kZSAxMDA2NDQNCj4gPiA+DQo+ID4gU2hlbGxQa2cvRHluYW1pY0Nv bW1hbmQvSHR0cER5bmFtaWNDb21tYW5kL0h0dHBEeW5hbWljQ29tbWFuZA0KPiA+IC5pbmYNCj4g PiA+ICBjcmVhdGUgbW9kZSAxMDA2NDQNCj4gPiA+IFNoZWxsUGtnL0R5bmFtaWNDb21tYW5kL0h0 dHBEeW5hbWljQ29tbWFuZC9IdHRwLmgNCj4gPiA+ICBjcmVhdGUgbW9kZSAxMDA2NDQNCj4gPiBT aGVsbFBrZy9EeW5hbWljQ29tbWFuZC9IdHRwRHluYW1pY0NvbW1hbmQvSHR0cC5jDQo+ID4gPiAg Y3JlYXRlIG1vZGUgMTAwNjQ0DQo+ID4gPiBTaGVsbFBrZy9EeW5hbWljQ29tbWFuZC9IdHRwRHlu YW1pY0NvbW1hbmQvSHR0cEFwcC5jDQo+ID4gPiAgY3JlYXRlIG1vZGUgMTAwNjQ0DQo+ID4gPg0K PiA+IFNoZWxsUGtnL0R5bmFtaWNDb21tYW5kL0h0dHBEeW5hbWljQ29tbWFuZC9IdHRwRHluYW1p Y0NvbW1hbmQNCj4gPiAuYw0KPiA+ID4gIGNyZWF0ZSBtb2RlIDEwMDY0NA0KPiA+ID4gU2hlbGxQ a2cvRHluYW1pY0NvbW1hbmQvSHR0cER5bmFtaWNDb21tYW5kL0h0dHAudW5pDQo+ID4gPg0KPiA+ ID4gZGlmZiAtLWdpdCBhL1NoZWxsUGtnL1NoZWxsUGtnLmRlYyBiL1NoZWxsUGtnL1NoZWxsUGtn LmRlYw0KPiA+ID4gaW5kZXggZDA4NDNkMzM4MTI2Li43YjJkMTIzMGJkMmMgMTAwNjQ0DQo+ID4g PiAtLS0gYS9TaGVsbFBrZy9TaGVsbFBrZy5kZWMNCj4gPiA+ICsrKyBiL1NoZWxsUGtnL1NoZWxs UGtnLmRlYw0KPiA+ID4gQEAgLTUzLDYgKzUzLDcgQEAgW0d1aWRzXQ0KPiA+ID4gICAgZ1NoZWxs TmV0d29yazFIaWlHdWlkICAgICAgICAgICA9IHsweGYzZDMwMWJiLCAweGY0YTUsIDB4NDVhOCwN Cj4gezB4YjAsIDB4YjcsDQo+ID4gMHhmYSwNCj4gPiA+IDB4OTksIDB4OWMsIDB4NjIsIDB4Mzcs IDB4YWV9fQ0KPiA+ID4gICAgZ1NoZWxsTmV0d29yazJIaWlHdWlkICAgICAgICAgICA9IHsweDE3 NGIyYjUsIDB4ZjUwNSwgMHg0YjEyLA0KPiB7MHhhYSwgMHg2MCwNCj4gPiAweDU5LA0KPiA+ID4g MHhkZiwgMHhmOCwgMHhkNiwgMHhlYSwgMHgzN319DQo+ID4gPiAgICBnU2hlbGxUZnRwSGlpR3Vp ZCAgICAgICAgICAgICAgID0gezB4NzM4YTkzMTQsIDB4ODJjMSwgMHg0NTkyLA0KPiB7MHg4Ziwg MHhmNywgMHhjMSwNCj4gPiA+IDB4YmQsIDB4ZjEsIDB4YjIsIDB4MGUsIDB4ZDR9fQ0KPiA+ID4g KyAgZ1NoZWxsSHR0cEhpaUd1aWQgICAgICAgICAgICAgICA9IHsweDM5MGY4NGIzLCAweDIyMWMs IDB4NGQ5ZSwNCj4gezB4YjUsIDB4MDYsDQo+ID4gMHg2ZCwNCj4gPiA+IDB4YjksIDB4NDIsIDB4 M2UsIDB4MGEsIDB4N2V9fQ0KPiA+ID4gICAgZ1NoZWxsQmNmZ0hpaUd1aWQgICAgICAgICAgICAg ICA9IHsweDVmNWY2MDVkLCAweDE1ODMsIDB4NGEyZCwNCj4gezB4YTYsIDB4YjIsIDB4ZWIsDQo+ ID4gPiAweDEyLCAweGRhLCAweGI0LCAweGEyLCAweGI2fX0NCj4gPiA+ICAgIGdTaGVsbEFjcGlW aWV3SGlpR3VpZCAgICAgICAgICAgPSB7MHhkYThjY2RmNCwgMHhlZDhmLCAweDRmZmMsDQo+IHsw eGI1LCAweGVmLA0KPiA+IDB4MmUsDQo+ID4gPiAweGY1LCAweDVlLCAweDI0LCAweDkzLCAweDJh fX0NCj4gPiA+ICAgICMgRklMRV9HVUlEIGFzIGRlZmluZWQgaW4gU2hlbGxQa2cvQXBwbGljYXRp b24vU2hlbGwvU2hlbGwuaW5mDQo+ID4gPiBkaWZmIC0tZ2l0IGEvU2hlbGxQa2cvU2hlbGxQa2cu ZHNjIGIvU2hlbGxQa2cvU2hlbGxQa2cuZHNjDQo+ID4gPiBpbmRleCA4NmU5ZjFlMDA0MGQuLmM0 MmJjOTQ2NGEwZiAxMDA2NDQNCj4gPiA+IC0tLSBhL1NoZWxsUGtnL1NoZWxsUGtnLmRzYw0KPiA+ ID4gKysrIGIvU2hlbGxQa2cvU2hlbGxQa2cuZHNjDQo+ID4gPiBAQCAtMTM5LDYgKzEzOSwxMSBA QCBbQ29tcG9uZW50c10NCj4gPiA+ICAgICAgICBnRWZpU2hlbGxQa2dUb2tlblNwYWNlR3VpZC5Q Y2RTaGVsbExpYkF1dG9Jbml0aWFsaXplfEZBTFNFDQo+ID4gPiAgICB9DQo+ID4gPiAgICBTaGVs bFBrZy9EeW5hbWljQ29tbWFuZC9UZnRwRHluYW1pY0NvbW1hbmQvVGZ0cEFwcC5pbmYNCj4gPiA+ ICsNCj4gPiA+DQo+ID4gU2hlbGxQa2cvRHluYW1pY0NvbW1hbmQvSHR0cER5bmFtaWNDb21tYW5k L0h0dHBEeW5hbWljQ29tbWFuZA0KPiA+IC5pbmYgew0KPiA+ID4gKyAgICA8UGNkc0ZpeGVkQXRC dWlsZD4NCj4gPiA+ICsgICAgICBnRWZpU2hlbGxQa2dUb2tlblNwYWNlR3VpZC5QY2RTaGVsbExp YkF1dG9Jbml0aWFsaXplfEZBTFNFDQo+ID4gPiArICB9DQo+ID4gPiArICBTaGVsbFBrZy9EeW5h bWljQ29tbWFuZC9IdHRwRHluYW1pY0NvbW1hbmQvSHR0cEFwcC5pbmYNCj4gPiA+DQo+ID4gU2hl bGxQa2cvRHluYW1pY0NvbW1hbmQvRHBEeW5hbWljQ29tbWFuZC9EcER5bmFtaWNDb21tYW5kLmlu Zg0KPiA+IHsNCj4gPiA+ICAgICAgPFBjZHNGaXhlZEF0QnVpbGQ+DQo+ID4gPiAgICAgICAgZ0Vm aVNoZWxsUGtnVG9rZW5TcGFjZUd1aWQuUGNkU2hlbGxMaWJBdXRvSW5pdGlhbGl6ZXxGQUxTRQ0K PiA+ID4gZGlmZiAtLWdpdA0KPiA+IGEvU2hlbGxQa2cvRHluYW1pY0NvbW1hbmQvSHR0cER5bmFt aWNDb21tYW5kL0h0dHBBcHAuaW5mDQo+ID4gPiBiL1NoZWxsUGtnL0R5bmFtaWNDb21tYW5kL0h0 dHBEeW5hbWljQ29tbWFuZC9IdHRwQXBwLmluZg0KPiA+ID4gbmV3IGZpbGUgbW9kZSAxMDA2NDQN Cj4gPiA+IGluZGV4IDAwMDAwMDAwMDAwMC4uZDA4ZDQ3ZmIzN2Q1DQo+ID4gPiAtLS0gL2Rldi9u dWxsDQo+ID4gPiArKysgYi9TaGVsbFBrZy9EeW5hbWljQ29tbWFuZC9IdHRwRHluYW1pY0NvbW1h bmQvSHR0cEFwcC5pbmYNCj4gPiA+IEBAIC0wLDAgKzEsNTggQEANCj4gPiA+ICsjIyAgQGZpbGUN Cj4gPiA+ICsjIFByb3ZpZGVzIFNoZWxsICdodHRwJyBzdGFuZGFsb25lIGFwcGxpY2F0aW9uLg0K PiA+ID4gKyMNCj4gPiA+ICsjIENvcHlyaWdodCAoYykgMjAxMCAtIDIwMTksIEludGVsIENvcnBv cmF0aW9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLg0KPiA8QlI+DQo+ID4gPiArIyBDb3B5cmlnaHQg KGMpIDIwMTUsIEFSTSBMdGQuIEFsbCByaWdodHMgcmVzZXJ2ZWQuPEJSPg0KPiA+ID4gKyMgQ29w eXJpZ2h0IChjKSAyMDIwLCBCcm9hZGNvbS4gQWxsIHJpZ2h0cyByZXNlcnZlZC48QlI+DQo+ID4g PiArIw0KPiA+ID4gKyMgIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBCU0QtMi1DbGF1c2UtUGF0 ZW50DQo+ID4gPiArIw0KPiA+ID4gKyMNCj4gPiA+ICsjIw0KPiA+ID4gKw0KPiA+ID4gK1tEZWZp bmVzXQ0KPiA+ID4gKyAgSU5GX1ZFUlNJT04gICAgICAgICAgICAgICAgICAgID0gMHgwMDAxMDAw Ng0KPiA+ID4gKyAgQkFTRV9OQU1FICAgICAgICAgICAgICAgICAgICAgID0gaHR0cA0KPiA+ID4g KyAgRklMRV9HVUlEICAgICAgICAgICAgICAgICAgICAgID0NCj4gNTZCMDBGQjctOTFEMi04NjlC LUNFNUMtMjZDRDFBODlDNzNDDQo+ID4gPiArICBNT0RVTEVfVFlQRSAgICAgICAgICAgICAgICAg ICAgPSBVRUZJX0FQUExJQ0FUSU9ODQo+ID4gPiArICBWRVJTSU9OX1NUUklORyAgICAgICAgICAg ICAgICAgPSAxLjANCj4gPiA+ICsgIEVOVFJZX1BPSU5UICAgICAgICAgICAgICAgICAgICA9IEh0 dHBBcHBJbml0aWFsaXplDQo+ID4gPiArIw0KPiA+ID4gKyMgIFRoaXMgZmxhZyBzcGVjaWZpZXMg d2hldGhlciBISUkgcmVzb3VyY2Ugc2VjdGlvbiBpcyBnZW5lcmF0ZWQgaW50bw0KPiBQRQ0KPiA+ IGltYWdlLg0KPiA+ID4gKyMNCj4gPiA+ICsgIFVFRklfSElJX1JFU09VUkNFX1NFQ1RJT04gICAg ICA9IFRSVUUNCj4gPiA+ICsNCj4gPiA+ICtbU291cmNlcy5jb21tb25dDQo+ID4gPiArICBIdHRw LmMNCj4gPiA+ICsgIEh0dHBBcHAuYw0KPiA+ID4gKyAgSHR0cC5oDQo+ID4gPiArICBIdHRwLnVu aQ0KPiA+ID4gKw0KPiA+ID4gK1tQYWNrYWdlc10NCj4gPiA+ICsgIEVtYmVkZGVkUGtnL0VtYmVk ZGVkUGtnLmRlYw0KPiA+ID4gKyAgTWRlTW9kdWxlUGtnL01kZU1vZHVsZVBrZy5kZWMNCj4gPiA+ ICsgIE1kZVBrZy9NZGVQa2cuZGVjDQo+ID4gPiArICBOZXR3b3JrUGtnL05ldHdvcmtQa2cuZGVj DQo+ID4gPiArICBTaGVsbFBrZy9TaGVsbFBrZy5kZWMNCj4gPiA+ICsNCj4gPiA+ICtbTGlicmFy eUNsYXNzZXNdDQo+ID4gPiArICBCYXNlTGliDQo+ID4gPiArICBCYXNlTWVtb3J5TGliDQo+ID4g PiArICBEZWJ1Z0xpYg0KPiA+ID4gKyAgRmlsZUhhbmRsZUxpYg0KPiA+ID4gKyAgSGlpTGliDQo+ ID4gPiArICBIdHRwTGliDQo+ID4gPiArICBNZW1vcnlBbGxvY2F0aW9uTGliDQo+ID4gPiArICBO ZXRMaWINCj4gPiA+ICsgIFNoZWxsTGliDQo+ID4gPiArICBVZWZpQXBwbGljYXRpb25FbnRyeVBv aW50DQo+ID4gPiArICBVZWZpQm9vdFNlcnZpY2VzVGFibGVMaWINCj4gPiA+ICsgIFVlZmlIaWlT ZXJ2aWNlc0xpYg0KPiA+ID4gKyAgVWVmaUxpYg0KPiA+ID4gKyAgVWVmaVJ1bnRpbWVTZXJ2aWNl c1RhYmxlTGliDQo+ID4gPiArDQo+ID4gPiArW1Byb3RvY29sc10NCj4gPiA+ICsgIGdFZmlIaWlQ YWNrYWdlTGlzdFByb3RvY29sR3VpZCAgICAgICAgICAgICAgICAgIyMgQ09OU1VNRVMNCj4gPiA+ ICsgIGdFZmlIdHRwUHJvdG9jb2xHdWlkICAgICAgICAgICAgICAgICAgICAgICAgICMjIENPTlNV TUVTDQo+ID4gPiArICBnRWZpSHR0cFNlcnZpY2VCaW5kaW5nUHJvdG9jb2xHdWlkICAgICAgICAg ICAjIyBDT05TVU1FUw0KPiA+ID4gKyAgZ0VmaU1hbmFnZWROZXR3b3JrU2VydmljZUJpbmRpbmdQ cm90b2NvbEd1aWQgICAjIyBDT05TVU1FUw0KPiA+ID4gZGlmZiAtLWdpdA0KPiA+ID4NCj4gPiBh L1NoZWxsUGtnL0R5bmFtaWNDb21tYW5kL0h0dHBEeW5hbWljQ29tbWFuZC9IdHRwRHluYW1pY0Nv bW1hDQo+ID4gbmQuaW4NCj4gPiA+IGYNCj4gPiA+DQo+ID4gYi9TaGVsbFBrZy9EeW5hbWljQ29t bWFuZC9IdHRwRHluYW1pY0NvbW1hbmQvSHR0cER5bmFtaWNDb21tYQ0KPiA+IG5kLmluDQo+ID4g PiBmDQo+ID4gPiBuZXcgZmlsZSBtb2RlIDEwMDY0NA0KPiA+ID4gaW5kZXggMDAwMDAwMDAwMDAw Li41ZDQ2ZWUyMzg0ZDUNCj4gPiA+IC0tLSAvZGV2L251bGwNCj4gPiA+ICsrKw0KPiA+ID4NCj4g PiBiL1NoZWxsUGtnL0R5bmFtaWNDb21tYW5kL0h0dHBEeW5hbWljQ29tbWFuZC9IdHRwRHluYW1p Y0NvbW1hDQo+ID4gbmQuaW4NCj4gPiA+IGYNCj4gPiA+IEBAIC0wLDAgKzEsNjMgQEANCj4gPiA+ ICsjIyAgQGZpbGUNCj4gPiA+ICsjIFByb3ZpZGVzIFNoZWxsICdodHRwJyBkeW5hbWljIGNvbW1h bmQuDQo+ID4gPiArIw0KPiA+ID4gKyMgQ29weXJpZ2h0IChjKSAyMDEwIC0gMjAxOSwgSW50ZWwg Q29ycG9yYXRpb24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuDQo+IDxCUj4NCj4gPiA+ICsjIENvcHly aWdodCAoYykgMjAxNSwgQVJNIEx0ZC4gQWxsIHJpZ2h0cyByZXNlcnZlZC48QlI+DQo+ID4gPiAr IyBDb3B5cmlnaHQgKGMpIDIwMjAsIEJyb2FkY29tLiBBbGwgcmlnaHRzIHJlc2VydmVkLjxCUj4N Cj4gPiA+ICsjDQo+ID4gPiArIyAgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEJTRC0yLUNsYXVz ZS1QYXRlbnQNCj4gPiA+ICsjDQo+ID4gPiArIw0KPiA+ID4gKyMjDQo+ID4gPiArDQo+ID4gPiAr W0RlZmluZXNdDQo+ID4gPiArICBJTkZfVkVSU0lPTiAgICAgICAgICAgICAgICAgICAgPSAweDAw MDEwMDA2DQo+ID4gPiArICBCQVNFX05BTUUgICAgICAgICAgICAgICAgICAgICAgPSBodHRwRHlu YW1pY0NvbW1hbmQNCj4gPiA+ICsgIEZJTEVfR1VJRCAgICAgICAgICAgICAgICAgICAgICA9DQo+ IDE5NjE4QkNFLTU1QUUtMDlDNi0zN0U5LTRDRTA0MDg0QzdBMQ0KPiA+ID4gKyAgTU9EVUxFX1RZ UEUgICAgICAgICAgICAgICAgICAgID0gRFhFX0RSSVZFUg0KPiA+ID4gKyAgVkVSU0lPTl9TVFJJ TkcgICAgICAgICAgICAgICAgID0gMS4wDQo+ID4gPiArICBFTlRSWV9QT0lOVCAgICAgICAgICAg ICAgICAgICAgPSBIdHRwQ29tbWFuZEluaXRpYWxpemUNCj4gPiA+ICsgIFVOTE9BRF9JTUFHRSAg ICAgICAgICAgICAgICAgICA9IEh0dHBVbmxvYWQNCj4gPiA+ICsjDQo+ID4gPiArIyAgVGhpcyBm bGFnIHNwZWNpZmllcyB3aGV0aGVyIEhJSSByZXNvdXJjZSBzZWN0aW9uIGlzIGdlbmVyYXRlZCBp bnRvDQo+IFBFDQo+ID4gaW1hZ2UuDQo+ID4gPiArIw0KPiA+ID4gKyAgVUVGSV9ISUlfUkVTT1VS Q0VfU0VDVElPTiAgICAgID0gVFJVRQ0KPiA+ID4gKw0KPiA+ID4gK1tTb3VyY2VzLmNvbW1vbl0N Cj4gPiA+ICsgIEh0dHAuYw0KPiA+ID4gKyAgSHR0cER5bmFtaWNDb21tYW5kLmMNCj4gPiA+ICsg IEh0dHAuaA0KPiA+ID4gKyAgSHR0cC51bmkNCj4gPiA+ICsNCj4gPiA+ICtbUGFja2FnZXNdDQo+ ID4gPiArICBFbWJlZGRlZFBrZy9FbWJlZGRlZFBrZy5kZWMNCj4gPiA+ICsgIE1kZVBrZy9NZGVQ a2cuZGVjDQo+ID4gPiArICBNZGVNb2R1bGVQa2cvTWRlTW9kdWxlUGtnLmRlYw0KPiA+ID4gKyAg TmV0d29ya1BrZy9OZXR3b3JrUGtnLmRlYw0KPiA+ID4gKyAgU2hlbGxQa2cvU2hlbGxQa2cuZGVj DQo+ID4gPiArDQo+ID4gPiArW0xpYnJhcnlDbGFzc2VzXQ0KPiA+ID4gKyAgQmFzZUxpYg0KPiA+ ID4gKyAgQmFzZU1lbW9yeUxpYg0KPiA+ID4gKyAgRGVidWdMaWINCj4gPiA+ICsgIEZpbGVIYW5k bGVMaWINCj4gPiA+ICsgIEhpaUxpYg0KPiA+ID4gKyAgSHR0cExpYg0KPiA+ID4gKyAgTWVtb3J5 QWxsb2NhdGlvbkxpYg0KPiA+ID4gKyAgTmV0TGliDQo+ID4gPiArICBTaGVsbExpYg0KPiA+ID4g KyAgVWVmaUJvb3RTZXJ2aWNlc1RhYmxlTGliDQo+ID4gPiArICBVZWZpRHJpdmVyRW50cnlQb2lu dA0KPiA+ID4gKyAgVWVmaUhpaVNlcnZpY2VzTGliDQo+ID4gPiArICBVZWZpTGliDQo+ID4gPiAr ICBVZWZpUnVudGltZVNlcnZpY2VzVGFibGVMaWINCj4gPiA+ICsNCj4gPiA+ICtbUHJvdG9jb2xz XQ0KPiA+ID4gKyAgZ0VmaUhpaVBhY2thZ2VMaXN0UHJvdG9jb2xHdWlkICAgICAgICAgICAgICAg ICAjIyBDT05TVU1FUw0KPiA+ID4gKyAgZ0VmaUh0dHBQcm90b2NvbEd1aWQgICAgICAgICAgICAg ICAgICAgICAgICAgIyMgQ09OU1VNRVMNCj4gPiA+ICsgIGdFZmlIdHRwU2VydmljZUJpbmRpbmdQ cm90b2NvbEd1aWQgICAgICAgICAgICMjIENPTlNVTUVTDQo+ID4gPiArICBnRWZpTWFuYWdlZE5l dHdvcmtTZXJ2aWNlQmluZGluZ1Byb3RvY29sR3VpZCAgICMjIENPTlNVTUVTDQo+ID4gPiArICBn RWZpU2hlbGxEeW5hbWljQ29tbWFuZFByb3RvY29sR3VpZCAgICAgICAgICAgICMjIFBST0RVQ0VT DQo+ID4gPiArDQo+ID4gPiArW0RFUEVYXQ0KPiA+ID4gKyAgVFJVRQ0KPiA+ID4gZGlmZiAtLWdp dCBhL1NoZWxsUGtnL0R5bmFtaWNDb21tYW5kL0h0dHBEeW5hbWljQ29tbWFuZC9IdHRwLmgNCj4g PiA+IGIvU2hlbGxQa2cvRHluYW1pY0NvbW1hbmQvSHR0cER5bmFtaWNDb21tYW5kL0h0dHAuaA0K PiA+ID4gbmV3IGZpbGUgbW9kZSAxMDA2NDQNCj4gPiA+IGluZGV4IDAwMDAwMDAwMDAwMC4uYzUz NDc5YjgyM2U3DQo+ID4gPiAtLS0gL2Rldi9udWxsDQo+ID4gPiArKysgYi9TaGVsbFBrZy9EeW5h bWljQ29tbWFuZC9IdHRwRHluYW1pY0NvbW1hbmQvSHR0cC5oDQo+ID4gPiBAQCAtMCwwICsxLDkw IEBADQo+ID4gPiArLyoqIEBmaWxlDQo+ID4gPiArICBIZWFkZXIgZmlsZSBmb3IgJ2h0dHAnIGNv bW1hbmQgZnVuY3Rpb25zLg0KPiA+ID4gKw0KPiA+ID4gKyAgQ29weXJpZ2h0IChjKSAyMDEwIC0g MjAxNywgSW50ZWwgQ29ycG9yYXRpb24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuDQo+IDxCUj4NCj4g PiA+ICsgIENvcHlyaWdodCAoYykgMjAxNSwgQVJNIEx0ZC4gQWxsIHJpZ2h0cyByZXNlcnZlZC48 QlI+DQo+ID4gPiArICBDb3B5cmlnaHQgKGMpIDIwMjAsIEJyb2FkY29tLiBBbGwgcmlnaHRzIHJl c2VydmVkLjxCUj4NCj4gPiA+ICsNCj4gPiA+ICsgIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBC U0QtMi1DbGF1c2UtUGF0ZW50DQo+ID4gPiArDQo+ID4gPiArKiovDQo+ID4gPiArDQo+ID4gPiAr I2lmbmRlZiBfSFRUUF9IXw0KPiA+ID4gKyNkZWZpbmUgX0hUVFBfSF8NCj4gPiA+ICsNCj4gPiA+ ICsjaW5jbHVkZSA8VWVmaS5oPg0KPiA+ID4gKw0KPiA+ID4gKyNpbmNsdWRlIDxMaWJyYXJ5L0Jh c2VMaWIuaD4NCj4gPiA+ICsjaW5jbHVkZSA8TGlicmFyeS9CYXNlTWVtb3J5TGliLmg+DQo+ID4g PiArI2luY2x1ZGUgPExpYnJhcnkvRGVidWdMaWIuaD4NCj4gPiA+ICsjaW5jbHVkZSA8TGlicmFy eS9IaWlMaWIuaD4NCj4gPiA+ICsjaW5jbHVkZSA8TGlicmFyeS9IdHRwTGliLmg+DQo+ID4gPiAr I2luY2x1ZGUgPExpYnJhcnkvTWVtb3J5QWxsb2NhdGlvbkxpYi5oPg0KPiA+ID4gKyNpbmNsdWRl IDxMaWJyYXJ5L05ldExpYi5oPg0KPiA+ID4gKyNpbmNsdWRlIDxMaWJyYXJ5L1ByaW50TGliLmg+ DQo+ID4gPiArI2luY2x1ZGUgPExpYnJhcnkvU2hlbGxMaWIuaD4NCj4gPiA+ICsjaW5jbHVkZSA8 TGlicmFyeS9VZWZpQm9vdFNlcnZpY2VzVGFibGVMaWIuaD4NCj4gPiA+ICsjaW5jbHVkZSA8TGli cmFyeS9VZWZpSGlpU2VydmljZXNMaWIuaD4NCj4gPiA+ICsjaW5jbHVkZSA8TGlicmFyeS9VZWZp TGliLmg+DQo+ID4gPiArI2luY2x1ZGUgPExpYnJhcnkvVWVmaVJ1bnRpbWVTZXJ2aWNlc1RhYmxl TGliLmg+DQo+ID4gPiArDQo+ID4gPiArI2luY2x1ZGUgPFByb3RvY29sL0hpaVBhY2thZ2VMaXN0 Lmg+DQo+ID4gPiArI2luY2x1ZGUgPFByb3RvY29sL0h0dHBVdGlsaXRpZXMuaD4NCj4gPiA+ICsj aW5jbHVkZSA8UHJvdG9jb2wvU2VydmljZUJpbmRpbmcuaD4NCj4gPiA+ICsNCj4gPiA+ICsjZGVm aW5lIEhUVFBfQVBQX05BTUUgTCJodHRwIg0KPiA+ID4gKw0KPiA+ID4gKyNkZWZpbmUgUkVRX09L ICAgICAgICAgICAwDQo+ID4gPiArI2RlZmluZSBSRVFfTkVFRF9SRVBFQVQgIDENCj4gPiA+ICsN Cj4gPiA+ICsvLyBEb3dubG9hZCBGbGFncw0KPiA+ID4gKyNkZWZpbmUgRExfRkxBR19USU1FICAg ICBCSVQwIC8vIFNob3cgZWxhcHNlZCB0aW1lLg0KPiA+ID4gKyNkZWZpbmUgRExfRkxBR19LRUVQ X0JBRCBCSVQxIC8vIEtlZXAgZmlsZXMgZXZlbiBpZiBkb3dubG9hZCBmYWlsZWQuDQo+ID4gPiAr DQo+ID4gPiArZXh0ZXJuIEVGSV9ISUlfSEFORExFIG1IdHRwSGlpSGFuZGxlOw0KPiA+ID4gKw0K PiA+ID4gK3R5cGVkZWYgc3RydWN0IHsNCj4gPiA+ICsgIFVJTlROICAgICAgICAgICAgICAgICBD b250ZW50RG93bmxvYWRlZDsNCj4gPiA+ICsgIFVJTlROICAgICAgICAgICAgICAgICBDb250ZW50 TGVuZ3RoOw0KPiA+ID4gKyAgVUlOVE4gICAgICAgICAgICAgICAgIExhc3RSZXBvcnRlZE5iT2ZC eXRlczsNCj4gPiA+ICsgIFVJTlROICAgICAgICAgICAgICAgICBCdWZmZXJTaXplOw0KPiA+ID4g KyAgVUlOVE4gICAgICAgICAgICAgICAgIFN0YXR1czsNCj4gPiA+ICsgIFVJTlROICAgICAgICAg ICAgICAgICBGbGFnczsNCj4gPiA+ICsgIFVJTlQ4ICAgICAgICAgICAgICAgICAqQnVmZmVyOw0K PiA+ID4gKyAgQ0hBUjE2ICAgICAgICAgICAgICAgICpTZXJ2ZXJBZGRyQW5kUHJvdG87DQo+ID4g PiArICBDSEFSMTYgICAgICAgICAgICAgICAgKlVSSTsNCj4gPiA+ICsgIEVGSV9IVFRQX1RPS0VO ICAgICAgICBSZXNwb25zZVRva2VuOw0KPiA+ID4gKyAgRUZJX0hUVFBfVE9LRU4gICAgICAgIFJl cXVlc3RUb2tlbjsNCj4gPiA+ICsgIEVGSV9IVFRQX1BST1RPQ09MICAgICAqSHR0cDsNCj4gPiA+ ICsgIEVGSV9IVFRQX0NPTkZJR19EQVRBICBIdHRwQ29uZmlnRGF0YTsNCj4gPiA+ICt9IEhUVFBf RE9XTkxPQURfQ09OVEVYVDsNCj4gPiA+ICsNCj4gPiA+ICsvKioNCj4gPiA+ICsgIEZ1bmN0aW9u IGZvciAnaHR0cCcgY29tbWFuZC4NCj4gPiA+ICsNCj4gPiA+ICsgIEBwYXJhbVtpbl0gIEltYWdl SGFuZGxlICAgICBUaGUgaW1hZ2UgaGFuZGxlLg0KPiA+ID4gKyAgQHBhcmFtW2luXSAgU3lzdGVt VGFibGUgICAgIFRoZSBzeXN0ZW0gdGFibGUuDQo+ID4gPiArDQo+ID4gPiArICBAcmV0dmFsIFNI RUxMX1NVQ0NFU1MgICAgICAgICAgICBDb21tYW5kIGNvbXBsZXRlZCBzdWNjZXNzZnVsbHkuDQo+ ID4gPiArICBAcmV0dmFsIFNIRUxMX0lOVkFMSURfUEFSQU1FVEVSICBDb21tYW5kIHVzYWdlIGVy cm9yLg0KPiA+ID4gKyAgQHJldHZhbCBTSEVMTF9BQk9SVEVEICAgICAgICAgICAgVGhlIHVzZXIg YWJvcnRzIHRoZSBvcGVyYXRpb24uDQo+ID4gPiArICBAcmV0dmFsIHZhbHVlICAgICAgICAgICAg ICAgICAgICBVbmtub3duIGVycm9yLg0KPiA+ID4gKyoqLw0KPiA+ID4gK1NIRUxMX1NUQVRVUw0K PiA+ID4gK1J1bkh0dHAgKA0KPiA+ID4gKyAgSU4gRUZJX0hBTkRMRSAgICAgICAgSW1hZ2VIYW5k bGUsDQo+ID4gPiArICBJTiBFRklfU1lTVEVNX1RBQkxFICAqU3lzdGVtVGFibGUNCj4gPiA+ICsg ICk7DQo+ID4gPiArDQo+ID4gPiArLyoqDQo+ID4gPiArICBSZXRyaXZlIEhJSSBwYWNrYWdlIGxp c3QgZnJvbSBJbWFnZUhhbmRsZSBhbmQgcHVibGlzaCB0byBISUkNCj4gZGF0YWJhc2UuDQo+ID4g PiArDQo+ID4gPiArICBAcGFyYW0gSW1hZ2VIYW5kbGUgICAgICAgICAgICBUaGUgaW1hZ2UgaGFu ZGxlIG9mIHRoZSBwcm9jZXNzLg0KPiA+ID4gKw0KPiA+ID4gKyAgQHJldHVybiBISUkgaGFuZGxl Lg0KPiA+ID4gKyoqLw0KPiA+ID4gK0VGSV9ISUlfSEFORExFDQo+ID4gPiArSW5pdGlhbGl6ZUhp aVBhY2thZ2UgKA0KPiA+ID4gKyAgRUZJX0hBTkRMRSAgICAgICAgICAgICAgICAgIEltYWdlSGFu ZGxlDQo+ID4gPiArICApOw0KPiA+ID4gKyNlbmRpZiAvLyBfSFRUUF9IXw0KPiA+ID4gZGlmZiAt LWdpdCBhL1NoZWxsUGtnL0luY2x1ZGUvR3VpZC9TaGVsbExpYkhpaUd1aWQuaA0KPiA+ID4gYi9T aGVsbFBrZy9JbmNsdWRlL0d1aWQvU2hlbGxMaWJIaWlHdWlkLmgNCj4gPiA+IGluZGV4IDVkYTkx MjgzMzNhNC4uNmUzMjhiNDYwZDhjIDEwMDY0NA0KPiA+ID4gLS0tIGEvU2hlbGxQa2cvSW5jbHVk ZS9HdWlkL1NoZWxsTGliSGlpR3VpZC5oDQo+ID4gPiArKysgYi9TaGVsbFBrZy9JbmNsdWRlL0d1 aWQvU2hlbGxMaWJIaWlHdWlkLmgNCj4gPiA+IEBAIC01OSw2ICs1OSwxMCBAQA0KPiA+ID4gICAg ICAweDczOGE5MzE0LCAweDgyYzEsIDB4NDU5MiwgeyAweDhmLCAweGY3LCAweGMxLCAweGJkLCAw eGYxLCAweGIyLA0KPiAweDBlLA0KPiA+IDB4ZDQgfQ0KPiA+ID4gXA0KPiA+ID4gICAgfQ0KPiA+ ID4NCj4gPiA+ICsjZGVmaW5lIFNIRUxMX0hUVFBfSElJX0dVSUQgXA0KPiA+ID4gKyAgeyBcDQo+ ID4gPiArICAgIDB4MzkwZjg0YjMsIDB4MjIxYywgMHg0ZDllLCB7IDB4YjUsIDB4MDYsIDB4NmQs IDB4YjksIDB4NDIsIDB4M2UsDQo+IDB4MGEsDQo+ID4gPiAweDdlIH0gXA0KPiA+ID4gKyAgfQ0K PiA+ID4NCj4gPiA+ICAjZGVmaW5lIFNIRUxMX0JDRkdfSElJX0dVSUQgXA0KPiA+ID4gICAgeyBc DQo+ID4gPiBAQCAtNzUsNiArNzksNyBAQCBleHRlcm4gRUZJX0dVSUQgZ1NoZWxsTGV2ZWwzSGlp R3VpZDsNCj4gPiA+ICBleHRlcm4gRUZJX0dVSUQgZ1NoZWxsTmV0d29yazFIaWlHdWlkOw0KPiA+ ID4gIGV4dGVybiBFRklfR1VJRCBnU2hlbGxOZXR3b3JrMkhpaUd1aWQ7DQo+ID4gPiAgZXh0ZXJu IEVGSV9HVUlEIGdTaGVsbFRmdHBIaWlHdWlkOw0KPiA+ID4gK2V4dGVybiBFRklfR1VJRCBnU2hl bGxIdHRwSGlpR3VpZDsNCj4gPiA+ICBleHRlcm4gRUZJX0dVSUQgZ1NoZWxsQmNmZ0hpaUd1aWQ7 DQo+ID4gPg0KPiA+ID4gICNlbmRpZg0KPiA+ID4gZGlmZiAtLWdpdCBhL1NoZWxsUGtnL0R5bmFt aWNDb21tYW5kL0h0dHBEeW5hbWljQ29tbWFuZC9IdHRwLmMNCj4gPiA+IGIvU2hlbGxQa2cvRHlu YW1pY0NvbW1hbmQvSHR0cER5bmFtaWNDb21tYW5kL0h0dHAuYw0KPiA+ID4gbmV3IGZpbGUgbW9k ZSAxMDA2NDQNCj4gPiA+IGluZGV4IDAwMDAwMDAwMDAwMC4uNDY1NzA2YWI3NzU3DQo+ID4gPiAt LS0gL2Rldi9udWxsDQo+ID4gPiArKysgYi9TaGVsbFBrZy9EeW5hbWljQ29tbWFuZC9IdHRwRHlu YW1pY0NvbW1hbmQvSHR0cC5jDQo+ID4gPiBAQCAtMCwwICsxLDE4MzAgQEANCj4gPiA+ICsvKiog QGZpbGUNCj4gPiA+ICsgIFRoZSBpbXBsZW1lbnRhdGlvbiBmb3IgdGhlICdodHRwJyBTaGVsbCBj b21tYW5kLg0KPiA+ID4gKw0KPiA+ID4gKyAgQ29weXJpZ2h0IChjKSAyMDE1LCBBUk0gTHRkLiBB bGwgcmlnaHRzIHJlc2VydmVkLjxCUj4NCj4gPiA+ICsgIENvcHlyaWdodCAoYykgMjAxNSAtIDIw MTgsIEludGVsIENvcnBvcmF0aW9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLg0KPiA8QlI+DQo+ID4g PiArICAoQykgQ29weXJpZ2h0IDIwMTUgSGV3bGV0dCBQYWNrYXJkIEVudGVycHJpc2UgRGV2ZWxv cG1lbnQgTFA8QlI+DQo+ID4gPiArICBDb3B5cmlnaHQgKGMpIDIwMjAsIEJyb2FkY29tLiBBbGwg cmlnaHRzIHJlc2VydmVkLiA8QlI+DQo+ID4gPiArDQo+ID4gPiArICBTUERYLUxpY2Vuc2UtSWRl bnRpZmllcjogQlNELTItQ2xhdXNlLVBhdGVudA0KPiA+ID4gKyoqLw0KPiA+ID4gKw0KPiA+ID4g KyNpbmNsdWRlICJIdHRwLmgiDQo+ID4gPiArDQo+ID4gPiArI2RlZmluZSBJUDRfQ09ORklHMl9J TlRFUkZBQ0VfSU5GT19OQU1FX0xFTkdUSCAzMg0KPiA+ID4gKw0KPiA+ID4gKy8qDQo+ID4gPiAr ICAgQ29uc3RhbnQgc3RyaW5ncyBhbmQgZGVmaW5pdGlvbnMgcmVsYXRlZCB0byB0aGUgbWVzc2Fn ZQ0KPiA+ID4gKyAgIGluZGljYXRpbmcgdGhlIGFtb3VudCBvZiBwcm9ncmVzcyBpbiB0aGUgZG93 bG9hZGluZyBvZiBhIEhUVFANCj4gZmlsZS4NCj4gPiA+ICsqLw0KPiA+ID4gKw0KPiA+ID4gKy8v IE51bWJlciBvZiBzdGVwcyBpbiB0aGUgcHJvZ3Jlc3Npb24gc2xpZGVyDQo+ID4gPiArI2RlZmlu ZSBIVFRQX1BST0dSRVNTX1NMSURFUl9TVEVQUyAgXA0KPiA+ID4gKyAgKChzaXplb2YgKEhUVFBf UFJPR1JfRlJBTUUpIC8gc2l6ZW9mIChDSEFSMTYpKSAtIDMpDQo+ID4gPiArDQo+ID4gPiArLy8g U2l6ZSBpbiBudW1iZXIgb2YgY2hhcmFjdGVycyBwbHVzIG9uZSAoZmluYWwgemVybykgb2YgdGhl IG1lc3NhZ2UNCj4gdG8NCj4gPiA+ICsvLyBpbmRpY2F0ZSB0aGUgcHJvZ3Jlc3Mgb2YgYW4gSFRU UCBkb3dubG9hZC4gVGhlIGZvcm1hdCBpcw0KPiAiWyhwcm9ncmVzcw0KPiA+IHNsaWRlcjoNCj4g PiA+ICsvLyA0MCBjaGFyYWN0ZXJzKV0gKG5iIG9mIEtCeXRlcyBkb3dubG9hZGVkIHNvIGZhcjog NyBjaGFyYWN0ZXJzKQ0KPiBLYiIuDQo+ID4gVGhlcmUNCj4gPiA+ICsvLyBhcmUgdGh1cyB0aGUg bnVtYmVyIG9mIGNoYXJhY3RlcnMgaW4gSFRUUF9QUk9HUl9GUkFNRVtdIHBsdXMgMTENCj4gPiA+ IGNoYXJhY3RlcnMNCj4gPiA+ICsvLyAoMiAvLyBzcGFjZXMsICJLYiIgYW5kIHNldmVuIGNoYXJh Y3RlcnMgZm9yIHRoZSBudW1iZXIgb2YgS0J5dGVzKS4NCj4gPiA+ICsjZGVmaW5lIEhUVFBfUFJP R1JFU1NfTUVTU0FHRV9TSVpFICBcDQo+ID4gPiArICAoKHNpemVvZiAoSFRUUF9QUk9HUl9GUkFN RSkgLyBzaXplb2YgKENIQVIxNikpICsgMTIpDQo+ID4gPiArDQo+ID4gPiArLy8NCj4gPiA+ICsv LyBCdWZmZXIgc2l6ZS4gTm90ZSB0aGF0IGxhcmdlciBidWZmZXIgZG9lcyBub3QgbWVhbiBiZXR0 ZXIgc3BlZWQhDQo+ID4gPiArLy8NCj4gPiA+ICsjZGVmaW5lIERFRkFVTFRfQlVGX1NJWkUgICAg ICBTSVpFXzMyS0INCj4gPiA+ICsjZGVmaW5lIE1BWF9CVUZfU0laRSAgICAgICAgICBTSVpFXzRN Qg0KPiA+ID4gKw0KPiA+ID4gKyNkZWZpbmUgTUlOX1BBUkFNX0NPVU5UICAgICAgIDINCj4gPiA+ ICsjZGVmaW5lIE1BWF9QQVJBTV9DT1VOVCAgICAgICA0DQo+ID4gPiArI2RlZmluZSBORUVEX1JF RElSRUNUSU9OKENvZGUpIFwNCj4gPiA+ICsgICgoKENvZGUgPj0gSFRUUF9TVEFUVVNfMzAwX01V TFRJUExFX0NIT0lDRVMpIFwNCj4gPiA+ICsgICYmIChDb2RlIDw9IEhUVFBfU1RBVFVTXzMwN19U RU1QT1JBUllfUkVESVJFQ1QpKSBcDQo+ID4gPiArICB8fCAoQ29kZSA9PSBIVFRQX1NUQVRVU18z MDhfUEVSTUFORU5UX1JFRElSRUNUKSkNCj4gPiA+ICsNCj4gPiA+ICsjZGVmaW5lIENMT1NFX0hU VFBfSEFORExFKENvbnRyb2xsZXJIYW5kbGUsSHR0cENoaWxkSGFuZGxlKSBcDQo+ID4gPiArICBk byB7IFwNCj4gPiA+ICsgICAgaWYgKEh0dHBDaGlsZEhhbmRsZSkgeyBcDQo+ID4gPiArICAgICAg Q2xvc2VQcm90b2NvbEFuZERlc3Ryb3lTZXJ2aWNlQ2hpbGQgKCBcDQo+ID4gPiArICAgICAgICBD b250cm9sbGVySGFuZGxlLCBcDQo+ID4gPiArICAgICAgICAmZ0VmaUh0dHBTZXJ2aWNlQmluZGlu Z1Byb3RvY29sR3VpZCwgXA0KPiA+ID4gKyAgICAgICAgJmdFZmlIdHRwUHJvdG9jb2xHdWlkLCBc DQo+ID4gPiArICAgICAgICBIdHRwQ2hpbGRIYW5kbGUgXA0KPiA+ID4gKyAgICAgICAgKTsgXA0K PiA+ID4gKyAgICAgIEh0dHBDaGlsZEhhbmRsZSA9IE5VTEw7IFwNCj4gPiA+ICsgICAgfSBcDQo+ ID4gPiArICB9IHdoaWxlICgwKQ0KPiA+ID4gKw0KPiA+ID4gK3R5cGVkZWYgZW51bSB7DQo+ID4g PiArICBIRFJfSE9TVCwNCj4gPiA+ICsgIEhEUl9DT05OLA0KPiA+ID4gKyAgSERSX0FHRU5ULA0K PiA+ID4gKyAgSERSX01BWA0KPiA+ID4gK30gSERSX1RZUEU7DQo+ID4gPiArDQo+ID4gPiArI2Rl ZmluZSBVU0VSX0FHRU5UX0hEUiAgIk1vemlsbGEvNS4wIChFREsyOyBMaW51eCkgR2Vja28vMjAx MDAxMDENCj4gPiA+IEZpcmVmb3gvNzkuMCINCj4gPiA+ICsNCj4gPiA+ICsjZGVmaW5lIFRJTUVS X01BWF9USU1FT1VUX1MgICAxMA0KPiA+ID4gKw0KPiA+ID4gKy8vIEZpbGUgbmFtZSB0byB1c2Ug d2hlbiBVUkkgZW5kcyB3aXRoICIvIg0KPiA+ID4gKyNkZWZpbmUgREVGQVVMVF9IVE1MX0ZJTEUg ICAgIEwiaW5kZXguaHRtbCINCj4gPiA+ICsjZGVmaW5lIERFRkFVTFRfSFRUUF9QUk9UTyAgICBM Imh0dHAiDQo+ID4gPiArDQo+ID4gPiArLy8gU3RyaW5nIHRvIGRlbGV0ZSB0aGUgSFRUUCBwcm9n cmVzcyBtZXNzYWdlIHRvIGJlIGFibGUgdG8gdXBkYXRlIGl0DQo+IDoNCj4gPiA+ICsvLyAoSFRU UF9QUk9HUkVTU19NRVNTQUdFX1NJWkUtMSkgJ1xiJw0KPiA+ID4gKyNkZWZpbmUgSFRUUF9QUk9H UkVTU19ERUwgXA0KPiA+ID4gKw0KPiA+IEwiXGJcYlxiXGJcYlxiXGJcYlxiXGJcYlxiXGJcYlxi XGJcYlxiXGJcYlxiXGJcYlxiXGJcYlxiXGJcYlxiXGJcYlwNCj4gPiBiXGJcYlwNCj4gPiA+ICtc YlxiXGJcYlxiXGJcYlxiXGJcYlxiXGJcYlxiXGJcYlxiXGIiDQo+ID4gPiArDQo+ID4gPiArI2Rl ZmluZSBIVFRQX0tCICAgICAgICAgICAgICBMIlxiXGJcYlxiXGJcYlxiXGJcYlxiIg0KPiA+ID4g Ky8vIEZyYW1lIGZvciB0aGUgcHJvZ3Jlc3Npb24gc2xpZGVyDQo+ID4gPiArI2RlZmluZSBIVFRQ X1BST0dSX0ZSQU1FICAgICBMIlsNCj4gXSINCj4gPiA+ICsNCj4gPiA+ICsjZGVmaW5lIEVQT0NI X0pVTElBTl9EQVRFICAgIDI0NDA1ODgNCj4gPiA+ICsvLyBTZWNvbmRzIHBlciB1bml0DQo+ID4g PiArI2RlZmluZSBTRUNfUEVSX01JTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAoKFVJTlROKQ0KPiA2MCkNCj4gPiA+ICsjZGVmaW5lIFNFQ19QRVJfSE9VUiAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICgoVUlOVE4pDQo+IDM2MDApDQo+ID4gPiArI2RlZmlu ZSBTRUNfUEVSX0RBWSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKFVJTlRO KQ0KPiA4NjQwMCkNCj4gPiA+ICsjZGVmaW5lIFNFQ19QRVJfTU9OVEggICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICgoVUlOVE4pDQo+IDIsNTkyLDAwMCkNCj4gPiA+ICsjZGVmaW5l IFNFQ19QRVJfWUVBUiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoVUlOVE4p DQo+IDMxLDUzNiwwMDApDQo+ID4gPiArDQo+ID4gPiArLy8gSW1wcm92ZSByZWFkYWJpbGl0eSBi eSB1c2luZyB0aGVzZSBtYWNyb3MNCj4gPiA+ICsjZGVmaW5lIFBSSU5UX0hJSSh0b2tlbiwuLi4p IFwNCj4gPiA+ICsgIFNoZWxsUHJpbnRIaWlFeCAoXA0KPiA+ID4gKyAgICAgIC0xLCAtMSwgTlVM TCwgdG9rZW4sIG1IdHRwSGlpSGFuZGxlLCBfX1ZBX0FSR1NfXykNCj4gPiA+ICsNCj4gPiA+ICsj ZGVmaW5lIFBSSU5UX0hJSV9BUFAodG9rZW4sdmFsdWUpIFwNCj4gPiA+ICsgIFBSSU5UX0hJSSAo dG9rZW4sIEhUVFBfQVBQX05BTUUsIHZhbHVlKQ0KPiA+ID4gKw0KPiA+ID4gKy8vIFN0cmluZyBk ZXNjcmlwdGlvbnMgZm9yIHNlcnZlciBlcnJvcnMNCj4gPiA+ICtTVEFUSUMgQ09OU1QgQ0hBUjE2 ICpFcnJTdGF0dXNEZXNjW10gPQ0KPiA+ID4gK3sNCj4gPiA+ICsgIEwiNDAwIEJhZCBSZXF1ZXN0 IiwNCj4gPiA+ICsgIEwiNDAxIFVuYXV0aG9yaXplZCIsDQo+ID4gPiArICBMIjQwMiBQYXltZW50 IHJlcXVpcmVkIiwNCj4gPiA+ICsgIEwiNDAzIEZvcmJpZGRlbiIsDQo+ID4gPiArICBMIjQwNCBO b3QgRm91bmQiLA0KPiA+ID4gKyAgTCI0MDUgTWV0aG9kIG5vdCBhbGxvd2VkIiwNCj4gPiA+ICsg IEwiNDA2IE5vdCBhY2NlcHRhYmxlIiwNCj4gPiA+ICsgIEwiNDA3IFByb3h5IGF1dGhlbnRpY2F0 aW9uIHJlcXVpcmVkIiwNCj4gPiA+ICsgIEwiNDA4IFJlcXVlc3QgdGltZSBvdXQiLA0KPiA+ID4g KyAgTCI0MDkgQ29uZmxpY3QiLA0KPiA+ID4gKyAgTCI0MTAgR29uZSIsDQo+ID4gPiArICBMIjQx MSBMZW5ndGggcmVxdWlyZWQiLA0KPiA+ID4gKyAgTCI0MTIgUHJlY29uZGl0aW9uIGZhaWxlZCIs DQo+ID4gPiArICBMIjQxMyBSZXF1ZXN0IGVudGl0eSB0b28gbGFyZ2UiLA0KPiA+ID4gKyAgTCI0 MTQgUmVxdWVzdCBVUkkgdG8gbGFyZ2UiLA0KPiA+ID4gKyAgTCI0MTUgVW5zdXBwb3J0ZWQgbWVk aWEgdHlwZSIsDQo+ID4gPiArICBMIjQxNiBSZXF1ZXN0ZWQgcmFuZ2Ugbm90IHNhdGlzZmllZCIs DQo+ID4gPiArICBMIjQxNyBFeHBlY3RhdGlvbiBmYWlsZWQiLA0KPiA+ID4gKyAgTCI1MDAgSW50 ZXJuYWwgc2VydmVyIGVycm9yIiwNCj4gPiA+ICsgIEwiNTAxIE5vdCBpbXBsZW1lbnRlZCIsDQo+ ID4gPiArICBMIjUwMiBCYWQgZ2F0ZXdheSIsDQo+ID4gPiArICBMIjUwMyBTZXJ2aWNlIHVuYXZh aWxhYmxlIiwNCj4gPiA+ICsgIEwiNTA0IEdhdGV3YXkgdGltZW91dCIsDQo+ID4gPiArICBMIjUw NSBIVFRQIHZlcnNpb24gbm90IHN1cHBvcnRlZCINCj4gPiA+ICt9Ow0KPiA+ID4gKw0KPiA+ID4g K1NUQVRJQyBDT05TVCBTSEVMTF9QQVJBTV9JVEVNIFBhcmFtTGlzdFtdID0gew0KPiA+ID4gKyAg e0wiLWkiLCBUeXBlVmFsdWV9LA0KPiA+ID4gKyAge0wiLWsiLCBUeXBlRmxhZ30sDQo+ID4gPiAr ICB7TCItbCIsIFR5cGVWYWx1ZX0sDQo+ID4gPiArICB7TCItbSIsIFR5cGVGbGFnfSwNCj4gPiA+ ICsgIHtMIi1zIiwgVHlwZVZhbHVlfSwNCj4gPiA+ICsgIHtMIi10IiwgVHlwZVZhbHVlfSwNCj4g PiA+ICsgIHtOVUxMICwgVHlwZU1heH0NCj4gPiA+ICt9Ow0KPiA+ID4gKw0KPiA+ID4gKy8vIExv Y2FsIEZpbGUgSGFuZGxlDQo+ID4gPiArU1RBVElDIFNIRUxMX0ZJTEVfSEFORExFICAgbUZpbGVI YW5kbGUgPSBOVUxMOw0KPiA+ID4gKw0KPiA+ID4gKy8vIFBhdGggb2YgdGhlIGxvY2FsIGZpbGUs IFVuaWNvZGUgZW5jb2RlZA0KPiA+ID4gK1NUQVRJQyBDT05TVCBDSEFSMTYgICAgICAgICptTG9j YWxGaWxlUGF0aDsNCj4gPiA+ICsNCj4gPiA+ICtTVEFUSUMgQk9PTEVBTiAgICAgICAgICAgICBn UmVxdWVzdENhbGxiYWNrQ29tcGxldGUgPSBGQUxTRTsNCj4gPiA+ICtTVEFUSUMgQk9PTEVBTiAg ICAgICAgICAgICBnUmVzcG9uc2VDYWxsYmFja0NvbXBsZXRlID0gRkFMU0U7DQo+ID4gPiArDQo+ ID4gPiArU1RBVElDIEJPT0xFQU4gICAgICAgICAgICAgZ0h0dHBFcnJvcjsNCj4gPiA+ICsNCj4g PiA+ICtFRklfSElJX0hBTkRMRSAgICAgICAgICAgICBtSHR0cEhpaUhhbmRsZTsNCj4gPiA+ICsN Cj4gPiA+ICsvLyBGdW5jdGlvbnMgZGVjbGFyYXRpb25zDQo+ID4gPiArLyoqDQo+ID4gPiArICBD aGVjayBhbmQgY29udmVydCB0aGUgVUlOVDE2IG9wdGlvbiB2YWx1ZXMgb2YgdGhlICdodHRwJyBj b21tYW5kDQo+ID4gPiArDQo+ID4gPiArICBAcGFyYW1baW5dICBWYWx1ZVN0ciAgVmFsdWUgYXMg YW4gVW5pY29kZSBlbmNvZGVkIHN0cmluZw0KPiA+ID4gKyAgQHBhcmFtW291dF0gVmFsdWUgICAg IFVJTlQxNiB2YWx1ZQ0KPiA+ID4gKw0KPiA+ID4gKyAgQHJldHVybiAgICAgVFJVRSAgICAgIFRo ZSB2YWx1ZSB3YXMgcmV0dXJuZWQuDQo+ID4gPiArICBAcmV0dXJuICAgICBGQUxTRSAgICAgQSBw YXJzaW5nIGVycm9yIG9jY3VyZWQuDQo+ID4gPiArKiovDQo+ID4gPiArU1RBVElDDQo+ID4gPiAr Qk9PTEVBTg0KPiA+ID4gK1N0cmluZ1RvVWludDE2ICgNCj4gPiA+ICsgIElOICAgQ09OU1QgQ0hB UjE2ICAqVmFsdWVTdHIsDQo+ID4gPiArICBPVVQgIFVJTlQxNiAgICAgICAgKlZhbHVlDQo+ID4g PiArICApOw0KPiA+ID4gKw0KPiA+ID4gKy8qKg0KPiA+ID4gKyAgR2V0IHRoZSBuYW1lIG9mIHRo ZSBOSUMuDQo+ID4gPiArDQo+ID4gPiArICBAcGFyYW1baW5dICAgQ29udHJvbGxlckhhbmRsZSAg VGhlIG5ldHdvcmsgcGh5c2ljYWwgZGV2aWNlIGhhbmRsZS4NCj4gPiA+ICsgIEBwYXJhbVtpbl0g ICBOaWNOdW1iZXIgICAgICAgICBUaGUgbmV0d29yayBwaHlzaWNhbCBkZXZpY2UgbnVtYmVyLg0K PiA+ID4gKyAgQHBhcmFtW291dF0gIE5pY05hbWUgICAgICAgICAgIEFkZHJlc3Mgd2hlcmUgdG8g c3RvcmUgdGhlIE5JQyBuYW1lLg0KPiA+ID4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIFRoZSBtZW1vcnkgYXJlYSBoYXMgdG8gYmUgYXQgbGVhc3QNCj4gPiA+ICsNCj4gSVA0X0NP TkZJRzJfSU5URVJGQUNFX0lORk9fTkFNRV9MRU5HVEgNCj4gPiA+ICsgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBkb3VibGUgYnl0ZSB3aWRlLg0KPiA+ID4gKw0KPiA+ID4gKyAgQHJl dHVybiAgRUZJX1NVQ0NFU1MgIFRoZSBuYW1lIG9mIHRoZSBOSUMgd2FzIHJldHVybmVkLg0KPiA+ ID4gKyAgQHJldHVybiAgT3RoZXJzICAgICAgIFRoZSBjcmVhdGlvbiBvZiB0aGUgY2hpbGQgZm9y IHRoZSBNYW5hZ2VkDQo+ID4gPiArICAgICAgICAgICAgICAgICAgICAgICAgTmV0d29yayBTZXJ2 aWNlIGZhaWxlZCBvciB0aGUgb3BlbmluZyBvZg0KPiA+ID4gKyAgICAgICAgICAgICAgICAgICAg ICAgIHRoZSBNYW5hZ2VkIE5ldHdvcmsgUHJvdG9jb2wgZmFpbGVkIG9yDQo+ID4gPiArICAgICAg ICAgICAgICAgICAgICAgICAgdGhlIG9wZXJhdGlvbmFsIHBhcmFtZXRlcnMgZm9yIHRoZQ0KPiA+ ID4gKyAgICAgICAgICAgICAgICAgICAgICAgIE1hbmFnZWQgTmV0d29yayBQcm90b2NvbCBjb3Vs ZCBub3QgYmUNCj4gPiA+ICsgICAgICAgICAgICAgICAgICAgICAgICByZWFkLg0KPiA+ID4gKyoq Lw0KPiA+ID4gK1NUQVRJQw0KPiA+ID4gK0VGSV9TVEFUVVMNCj4gPiA+ICtHZXROaWNOYW1lICgN Cj4gPiA+ICsgIElOICAgRUZJX0hBTkRMRSAgQ29udHJvbGxlckhhbmRsZSwNCj4gPiA+ICsgIElO ICAgVUlOVE4gICAgICAgTmljTnVtYmVyLA0KPiA+ID4gKyAgT1VUICBDSEFSMTYgICAgICAqTmlj TmFtZQ0KPiA+ID4gKyAgKTsNCj4gPiA+ICsNCj4gPiA+ICsvKioNCj4gPiA+ICsgIENyZWF0ZSBh IGNoaWxkIGZvciB0aGUgc2VydmljZSBpZGVudGlmaWVkIGJ5IGl0cyBzZXJ2aWNlIGJpbmRpbmcN Cj4gcHJvdG9jb2wNCj4gPiBHVUlEDQo+ID4gPiArICBhbmQgZ2V0IGZyb20gdGhlIGNoaWxkIHRo ZSBpbnRlcmZhY2Ugb2YgdGhlIHByb3RvY29sIGlkZW50aWZpZWQgYnkNCj4gaXRzDQo+ID4gR1VJ RC4NCj4gPiA+ICsNCj4gPiA+ICsgIEBwYXJhbVtpbl0gICBDb250cm9sbGVySGFuZGxlICAgICAg ICAgICAgQ29udHJvbGxlciBoYW5kbGUuDQo+ID4gPiArICBAcGFyYW1baW5dICAgU2VydmljZUJp bmRpbmdQcm90b2NvbEd1aWQgIFNlcnZpY2UgYmluZGluZyBwcm90b2NvbA0KPiBHVUlEDQo+ID4g b2YgdGhlDQo+ID4gPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IHNlcnZpY2UgdG8gYmUgY3JlYXRlZC4NCj4gPiA+ICsgIEBwYXJhbVtpbl0gICBQcm90b2NvbEd1 aWQgICAgICAgICAgICAgICAgR1VJRCBvZiB0aGUgcHJvdG9jb2wgdG8gYmUNCj4gb3Blbi4NCj4g PiA+ICsgIEBwYXJhbVtvdXRdICBDaGlsZEhhbmRsZSAgICAgICAgICAgICAgICAgQWRkcmVzcyB3 aGVyZSB0aGUgaGFuZGxlcg0KPiBvZiB0aGUNCj4gPiA+ICsgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgY3JlYXRlZCBjaGlsZCBpcyByZXR1cm5lZC4NCj4gTlVMTCBp cw0KPiA+ID4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1 cm5lZCBpbiBjYXNlIG9mIGVycm9yLg0KPiA+ID4gKyAgQHBhcmFtW291dF0gIEludGVyZmFjZSAg ICAgICAgICAgICAgICAgICBBZGRyZXNzIHdoZXJlIGEgcG9pbnRlciB0bw0KPiB0aGUNCj4gPiA+ ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJvdG9jb2wgaW50 ZXJmYWNlIGlzDQo+IHJldHVybmVkIGluDQo+ID4gPiArICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIGNhc2Ugb2Ygc3VjY2Vzcy4NCj4gPiA+ICsNCj4gPiA+ICsgIEBy ZXR1cm4gIEVGSV9TVUNDRVNTICBUaGUgY2hpbGQgd2FzIGNyZWF0ZWQgYW5kIHRoZSBwcm90b2Nv bA0KPiBvcGVuZWQuDQo+ID4gPiArICBAcmV0dXJuICBPdGhlcnMgICAgICAgRWl0aGVyIHRoZSBj cmVhdGlvbiBvZiB0aGUgY2hpbGQgb3IgdGhlDQo+IG9wZW5pbmcNCj4gPiA+ICsgICAgICAgICAg ICAgICAgICAgICAgICBvZiB0aGUgcHJvdG9jb2wgZmFpbGVkLg0KPiA+ID4gKyoqLw0KPiA+ID4g K1NUQVRJQw0KPiA+ID4gK0VGSV9TVEFUVVMNCj4gPiA+ICtDcmVhdGVTZXJ2aWNlQ2hpbGRBbmRP cGVuUHJvdG9jb2wgKA0KPiA+ID4gKyAgSU4gICBFRklfSEFORExFICBDb250cm9sbGVySGFuZGxl LA0KPiA+ID4gKyAgSU4gICBFRklfR1VJRCAgICAqU2VydmljZUJpbmRpbmdQcm90b2NvbEd1aWQs DQo+ID4gPiArICBJTiAgIEVGSV9HVUlEICAgICpQcm90b2NvbEd1aWQsDQo+ID4gPiArICBPVVQg IEVGSV9IQU5ETEUgICpDaGlsZEhhbmRsZSwNCj4gPiA+ICsgIE9VVCAgVk9JRCAgICAgICAgKipJ bnRlcmZhY2UNCj4gPiA+ICsgICk7DQo+ID4gPiArDQo+ID4gPiArLyoqDQo+ID4gPiArICBDbG9z ZSB0aGUgcHJvdG9jb2wgaWRlbnRpZmllZCBieSBpdHMgR1VJRCBvbiB0aGUgY2hpbGQgaGFuZGxl IG9mDQo+IHRoZQ0KPiA+IHNlcnZpY2UNCj4gPiA+ICsgIGlkZW50aWZpZWQgYnkgaXRzIHNlcnZp Y2UgYmluZGluZyBwcm90b2NvbCBHVUlELCB0aGVuIGRlc3Ryb3kgdGhlDQo+IGNoaWxkDQo+ID4g PiArICBoYW5kbGUuDQo+ID4gPiArDQo+ID4gPiArICBAcGFyYW1baW5dICBDb250cm9sbGVySGFu ZGxlICAgICAgICAgICAgQ29udHJvbGxlciBoYW5kbGUuDQo+ID4gPiArICBAcGFyYW1baW5dICBT ZXJ2aWNlQmluZGluZ1Byb3RvY29sR3VpZCAgU2VydmljZSBiaW5kaW5nIHByb3RvY29sDQo+IEdV SUQNCj4gPiBvZiB0aGUNCj4gPiA+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBzZXJ2aWNlIHRvIGJlIGRlc3Ryb3llZC4NCj4gPiA+ICsgIEBwYXJhbVtpbl0gIFBy b3RvY29sR3VpZCAgICAgICAgICAgICAgICBHVUlEIG9mIHRoZSBwcm90b2NvbCB0byBiZQ0KPiBj bG9zZWQuDQo+ID4gPiArICBAcGFyYW1baW5dICBDaGlsZEhhbmRsZSAgICAgICAgICAgICAgICAg SGFuZGxlIG9mIHRoZSBjaGlsZCB0byBiZQ0KPiBkZXN0cm95ZWQuDQo+ID4gPiArDQo+ID4gPiAr KiovDQo+ID4gPiArU1RBVElDDQo+ID4gPiArVk9JRA0KPiA+ID4gK0Nsb3NlUHJvdG9jb2xBbmRE ZXN0cm95U2VydmljZUNoaWxkICgNCj4gPiA+ICsgIElOICBFRklfSEFORExFICBDb250cm9sbGVy SGFuZGxlLA0KPiA+ID4gKyAgSU4gIEVGSV9HVUlEICAgICpTZXJ2aWNlQmluZGluZ1Byb3RvY29s R3VpZCwNCj4gPiA+ICsgIElOICBFRklfR1VJRCAgICAqUHJvdG9jb2xHdWlkLA0KPiA+ID4gKyAg SU4gIEVGSV9IQU5ETEUgIENoaWxkSGFuZGxlDQo+ID4gPiArICApOw0KPiA+ID4gKw0KPiA+ID4g Ky8qKg0KPiA+ID4gKyAgV29ya2VyIGZ1bmN0aW9uIHRoYXQgZG93bmxvYWQgdGhlIGRhdGEgb2Yg YSBmaWxlIGZyb20gYW4gSFRUUA0KPiBzZXJ2ZXINCj4gPiBnaXZlbg0KPiA+ID4gKyAgdGhlIHBh dGggb2YgdGhlIGZpbGUgYW5kIGl0cyBzaXplLg0KPiA+ID4gKw0KPiA+ID4gKyAgQHBhcmFtW2lu XSAgIENvbnRleHQgICAgICAgICAgIEEgcG9pbnRlciB0byB0aGUgZG93bmxvYWQgY29udGV4dC4N Cj4gPiA+ICsNCj4gPiA+ICsgIEByZXR2YWwgIEVGSV9TVUNDRVNTICAgICAgICAgICBUaGUgZmls ZSB3YXMgZG93bmxvYWRlZC4NCj4gPiA+ICsgIEByZXR2YWwgIEVGSV9PVVRfT0ZfUkVTT1VSQ0VT ICBBIG1lbW9yeSBhbGxvY2F0aW9uIGZhaWxlZC4NCj4gPiA+ICsgIEByZXR2YWwgIE90aGVycyAg ICAgICAgICAgICAgICBUaGUgZG93bmxvYWRpbmcgb2YgdGhlIGZpbGUNCj4gPiA+ICsgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBmcm9tIHRoZSBzZXJ2ZXIgZmFpbGVkLg0KPiA+ID4g Kw0KPiA+ID4gKyoqLw0KPiA+ID4gK1NUQVRJQw0KPiA+ID4gK0VGSV9TVEFUVVMNCj4gPiA+ICtE b3dubG9hZEZpbGUgKA0KPiA+ID4gKyAgSU4gICBIVFRQX0RPV05MT0FEX0NPTlRFWFQgICAqQ29u dGV4dCwNCj4gPiA+ICsgIElOICAgRUZJX0hBTkRMRSAgICAgICAgICAgICAgQ29udHJvbGxlckhh bmRsZSwNCj4gPiA+ICsgIElOICAgQ0hBUjE2ICAgICAgICAgICAgICAgICAgKk5pY05hbWUNCj4g PiA+ICsgICk7DQo+ID4gPiArDQo+ID4gPiArLyoqDQo+ID4gPiArICBDbGVhbnMgb2ZmIGxlYWRp bmcgYW5kIHRyYWlsaW5nIHNwYWNlcyBhbmQgdGFicy4NCj4gPiA+ICsNCj4gPiA+ICsgIEBwYXJh bVtpbl0gU3RyaW5nIHBvaW50ZXIgdG8gdGhlIHN0cmluZyB0byB0cmltIHRoZW0gb2ZmLg0KPiA+ ID4gKyoqLw0KPiA+ID4gK1NUQVRJQw0KPiA+ID4gK0VGSV9TVEFUVVMNCj4gPiA+ICtUcmltU3Bh Y2VzICgNCj4gPiA+ICsgIElOIENIQVIxNiAqU3RyaW5nDQo+ID4gPiArICApDQo+ID4gPiArew0K PiA+ID4gKyAgQ0hBUjE2ICpTdHI7DQo+ID4gPiArICBVSU5UTiAgTGVuOw0KPiA+ID4gKw0KPiA+ ID4gKyAgQVNTRVJUIChTdHJpbmcgIT0gTlVMTCk7DQo+ID4gPiArDQo+ID4gPiArICBpZiAoIVN0 cmluZykgew0KPiA+ID4gKyAgICByZXR1cm4gRUZJX0lOVkFMSURfUEFSQU1FVEVSOw0KPiA+ID4g KyAgfQ0KPiA+ID4gKw0KPiA+ID4gKyAgU3RyID0gU3RyaW5nOw0KPiA+ID4gKw0KPiA+ID4gKyAg Ly8NCj4gPiA+ICsgIC8vIFJlbW92ZSBhbnkgd2hpdGVzcGFjZSBhdCB0aGUgYmVnaW5uaW5nIG9m IHRoZSBTdHIuDQo+ID4gPiArICAvLw0KPiA+ID4gKyAgd2hpbGUgKCpTdHIgPT0gTCcgJyB8fCAq U3RyID09IEwnXHQnKSB7DQo+ID4gPiArICAgIFN0cisrOw0KPiA+ID4gKyAgfQ0KPiA+ID4gKw0K PiA+ID4gKyAgLy8NCj4gPiA+ICsgIC8vIFJlbW92ZSBhbnkgd2hpdGVzcGFjZSBhdCB0aGUgZW5k IG9mIHRoZSBTdHIuDQo+ID4gPiArICAvLw0KPiA+ID4gKyAgZG8gew0KPiA+ID4gKyAgICBMZW4g PSBTdHJMZW4gKFN0cik7DQo+ID4gPiArICAgIGlmICghTGVuIHx8IChTdHJbTGVuIC0gMV0gIT0g TCcgJyAmJiBTdHJbTGVuIC0gMV0gIT0gJ1x0JykpIHsNCj4gPiA+ICsgICAgICBicmVhazsNCj4g PiA+ICsgICAgfQ0KPiA+ID4gKw0KPiA+ID4gKyAgICBTdHJbTGVuIC0gMV0gPSBDSEFSX05VTEw7 DQo+ID4gPiArICB9IHdoaWxlIChMZW4pOw0KPiA+ID4gKw0KPiA+ID4gKyAgQ29weU1lbSAoU3Ry aW5nLCBTdHIsIFN0clNpemUgKFN0cikpOw0KPiA+ID4gKw0KPiA+ID4gKyAgcmV0dXJuIEVGSV9T VUNDRVNTOw0KPiA+ID4gK30NCj4gPiA+ICsNCj4gPiA+ICsNCj4gPiA+ICsvKg0KPiA+ID4gKyAq IENhbGxiYWNrcyBmb3IgcmVxdWVzdCBhbmQgcmVzcG9uc2UuDQo+ID4gPiArICogV2UganVzdCBh Y2tub3dsZWRnZSB0aGF0IG9wZXJhdGlvbiBoYXMgY29tcGxldGVkIGhlcmUuDQo+ID4gPiArICov DQo+ID4gPiArU1RBVElDDQo+ID4gPiArVk9JRA0KPiA+ID4gK0VGSUFQSQ0KPiA+ID4gK1JlcXVl c3RDYWxsYmFjayAoDQo+ID4gPiArICBJTiBFRklfRVZFTlQgRXZlbnQsDQo+ID4gPiArICBJTiBW T0lEICAgICAgKkNvbnRleHQNCj4gPiA+ICspDQo+ID4gPiArew0KPiA+ID4gKyAgZ1JlcXVlc3RD YWxsYmFja0NvbXBsZXRlID0gVFJVRTsNCj4gPiA+ICt9DQo+ID4gPiArDQo+ID4gPiArU1RBVElD DQo+ID4gPiArVk9JRA0KPiA+ID4gK0VGSUFQSQ0KPiA+ID4gK1Jlc3BvbnNlQ2FsbGJhY2sgKA0K PiA+ID4gKyAgSU4gRUZJX0VWRU5UIEV2ZW50LA0KPiA+ID4gKyAgSU4gVk9JRCAgICAgICpDb250 ZXh0DQo+ID4gPiArKQ0KPiA+ID4gK3sNCj4gPiA+ICsgIGdSZXNwb25zZUNhbGxiYWNrQ29tcGxl dGUgPSBUUlVFOw0KPiA+ID4gK30NCj4gPiA+ICsNCj4gPiA+ICsvKioNCj4gPiA+ICsgIENhbGN1 bGF0ZSBFcG9jaCBkYXlzDQo+ID4gPiArICoqLw0KPiA+ID4gK1NUQVRJQw0KPiA+ID4gK1VJTlRO DQo+ID4gPiArRWZpR2V0RXBvY2hEYXlzICgNCj4gPiA+ICsgIElOICBFRklfVElNRSAgKlRpbWUN Cj4gPiA+ICsgICkNCj4gPiA+ICt7DQo+ID4gPiArICBVSU5UTiBhOw0KPiA+ID4gKyAgVUlOVE4g eTsNCj4gPiA+ICsgIFVJTlROIG07DQo+ID4gPiArICBVSU5UTiBKdWxpYW5EYXRlOyAvLyBBYnNv bHV0ZSBKdWxpYW4gRGF0ZSByZXByZXNlbnRhdGlvbiBvZiB0aGUNCj4gc3VwcGxpZWQNCj4gPiBU aW1lDQo+ID4gPiArICBVSU5UTiBFcG9jaERheXM7ICAvLyBOdW1iZXIgb2YgZGF5cyBlbGFwc2Vk IHNpbmNlDQo+ID4gRVBPQ0hfSlVMSUFOX0RBWQ0KPiA+ID4gKw0KPiA+ID4gKyAgYSA9ICgxNCAt IFRpbWUtPk1vbnRoKSAvIDEyIDsNCj4gPiA+ICsgIHkgPSBUaW1lLT5ZZWFyICsgNDgwMCAtIGE7 DQo+ID4gPiArICBtID0gVGltZS0+TW9udGggKyAoMTIgKiBhKSAtIDM7DQo+ID4gPiArDQo+ID4g PiArICBKdWxpYW5EYXRlID0gVGltZS0+RGF5ICsgKCgxNTMgKiBtICsgMikgLyA1KSArICgzNjUg KiB5KSArICh5IC8gNCkNCj4gLQ0KPiA+ID4gKyAgICAgICAgICAgICAgICh5IC8gMTAwKSArICh5 IC8gNDAwKSAtIDMyMDQ1Ow0KPiA+ID4gKw0KPiA+ID4gKyAgQVNTRVJUIChKdWxpYW5EYXRlID49 IEVQT0NIX0pVTElBTl9EQVRFKTsNCj4gPiA+ICsgIEVwb2NoRGF5cyA9IEp1bGlhbkRhdGUgLSBF UE9DSF9KVUxJQU5fREFURTsNCj4gPiA+ICsNCj4gPiA+ICsgIHJldHVybiBFcG9jaERheXM7DQo+ ID4gPiArfQ0KPiA+ID4gKy8qKg0KPiA+ID4gKyAgQ29udmVydHMgRUZJX1RJTUUgdG8gRXBvY2gg c2Vjb25kcw0KPiA+ID4gKyAgKGVsYXBzZWQgc2luY2UgMTk3MCBKQU5VQVJZIDAxLCAwMDowMDow MCBVVEMpDQo+ID4gPiArICoqLw0KPiA+ID4gK1NUQVRJQw0KPiA+ID4gK1VJTlQzMg0KPiA+ID4g K0VmaVRpbWVUb0Vwb2NoICgNCj4gPiA+ICsgIElOICBFRklfVElNRSAgKlRpbWUNCj4gPiA+ICsg ICkNCj4gPiA+ICt7DQo+ID4gPiArICBVSU5UMzIgRXBvY2hEYXlzOyAgIC8vIE51bWJlciBvZiBk YXlzIGVsYXBzZWQgc2luY2UNCj4gPiBFUE9DSF9KVUxJQU5fREFZDQo+ID4gPiArICBVSU5UMzIg RXBvY2hTZWNvbmRzOw0KPiA+ID4gKw0KPiA+ID4gKyAgRXBvY2hEYXlzID0gRWZpR2V0RXBvY2hE YXlzIChUaW1lKTsNCj4gPiA+ICsNCj4gPiA+ICsgIEVwb2NoU2Vjb25kcyA9IChFcG9jaERheXMg KiBTRUNfUEVSX0RBWSkgKw0KPiA+ID4gKyAgICAgICAgICAgICAgICAgKChVSU5UTilUaW1lLT5I b3VyICogU0VDX1BFUl9IT1VSKSArDQo+ID4gPiArICAgICAgICAgICAgICAgICAoVGltZS0+TWlu dXRlICogU0VDX1BFUl9NSU4pICsgVGltZS0+U2Vjb25kOw0KPiA+ID4gKw0KPiA+ID4gKyAgcmV0 dXJuIEVwb2NoU2Vjb25kczsNCj4gPiA+ICt9DQo+ID4gPiArDQo+ID4gPiArLyoqDQo+ID4gPiAr ICBGdW5jdGlvbiBmb3IgJ2h0dHAnIGNvbW1hbmQuDQo+ID4gPiArDQo+ID4gPiArICBAcGFyYW1b aW5dIEltYWdlSGFuZGxlICBIYW5kbGUgdG8gdGhlIEltYWdlIChOVUxMIGlmIEludGVybmFsKS4N Cj4gPiA+ICsgIEBwYXJhbVtpbl0gU3lzdGVtVGFibGUgIFBvaW50ZXIgdG8gdGhlIFN5c3RlbSBU YWJsZSAoTlVMTCBpZg0KPiBJbnRlcm5hbCkuDQo+ID4gPiArDQo+ID4gPiArICBAcmV0dXJuICBT SEVMTF9TVUNDRVNTICAgICAgICAgICAgVGhlICdodHRwJyBjb21tYW5kIGNvbXBsZXRlZA0KPiA+ IHN1Y2Nlc3NmdWxseS4NCj4gPiA+ICsgIEByZXR1cm4gIFNIRUxMX0FCT1JURUQgICAgICAgICAg ICBUaGUgU2hlbGwgTGlicmFyeSBpbml0aWFsaXphdGlvbg0KPiBmYWlsZWQuDQo+ID4gPiArICBA cmV0dXJuICBTSEVMTF9JTlZBTElEX1BBUkFNRVRFUiAgQXQgbGVhc3Qgb25lIG9mIHRoZSBjb21t YW5kJ3MNCj4gPiA+IGFyZ3VtZW50cyBpcw0KPiA+ID4gKyAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIG5vdCB2YWxpZC4NCj4gPiA+ICsgIEByZXR1cm4gIFNIRUxMX09VVF9PRl9S RVNPVVJDRVMgICBBIG1lbW9yeSBhbGxvY2F0aW9uIGZhaWxlZC4NCj4gPiA+ICsgIEByZXR1cm4g IFNIRUxMX05PVF9GT1VORCAgICAgICAgICBOZXR3b3JrIEludGVyZmFjZSBDYXJkIG5vdCBmb3Vu ZC4NCj4gPiA+ICsgIEByZXR1cm4gIFNIRUxMX1VOU1VQUE9SVEVEICAgICAgICBDb21tYW5kIHdh cyB2YWxpZCwgYnV0IHRoZSBzZXJ2ZXINCj4gPiA+IHJldHVybmVkDQo+ID4gPiArICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgYSBzdGF0dXMgY29kZSBpbmRpY2F0aW5nIHNvbWUN Cj4gZXJyb3IuDQo+ID4gPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRXhh bWluZSB0aGUgZmlsZSByZXF1ZXN0ZWQgZm9yDQo+IGVycm9yIGJvZHkuDQo+ID4gPiArDQo+ID4g PiArKiovDQo+ID4gPiArU0hFTExfU1RBVFVTDQo+ID4gPiArUnVuSHR0cCAoDQo+ID4gPiArICBJ TiBFRklfSEFORExFICAgICAgICBJbWFnZUhhbmRsZSwNCj4gPiA+ICsgIElOIEVGSV9TWVNURU1f VEFCTEUgICpTeXN0ZW1UYWJsZQ0KPiA+ID4gKyAgKQ0KPiA+ID4gK3sNCj4gPiA+ICsgIEVGSV9T VEFUVVMgICAgICAgICAgICAgIFN0YXR1czsNCj4gPiA+ICsgIExJU1RfRU5UUlkgICAgICAgICAg ICAgICpDaGVja1BhY2thZ2U7DQo+ID4gPiArICBVSU5UTiAgICAgICAgICAgICAgICAgICBQYXJh bUNvdW50Ow0KPiA+ID4gKyAgVUlOVE4gICAgICAgICAgICAgICAgICAgSGFuZGxlQ291bnQ7DQo+ ID4gPiArICBVSU5UTiAgICAgICAgICAgICAgICAgICBOaWNOdW1iZXI7DQo+ID4gPiArICBVSU5U TiAgICAgICAgICAgICAgICAgICBJbml0aWFsU2l6ZTsNCj4gPiA+ICsgIFVJTlROICAgICAgICAg ICAgICAgICAgIFBhcmFtT2Zmc2V0Ow0KPiA+ID4gKyAgVUlOVE4gICAgICAgICAgICAgICAgICAg U3RhcnRTaXplOw0KPiA+ID4gKyAgQ0hBUjE2ICAgICAgICAgICAgICAgICAgKlByb2JsZW1QYXJh bTsNCj4gPiA+ICsgIENIQVIxNg0KPiA+IE5pY05hbWVbSVA0X0NPTkZJRzJfSU5URVJGQUNFX0lO Rk9fTkFNRV9MRU5HVEhdOw0KPiA+ID4gKyAgQ0hBUjE2ICAgICAgICAgICAgICAgICAgKldhbGtl cjE7DQo+ID4gPiArICBDSEFSMTYgICAgICAgICAgICAgICAgICAqVlN0cjsNCj4gPiA+ICsgIENP TlNUIENIQVIxNiAgICAgICAgICAgICpVc2VyTmljTmFtZTsNCj4gPiA+ICsgIENPTlNUIENIQVIx NiAgICAgICAgICAgICpWYWx1ZVN0cjsNCj4gPiA+ICsgIENPTlNUIENIQVIxNiAgICAgICAgICAg ICpSZW1vdGVGaWxlUGF0aDsNCj4gPiA+ICsgIENPTlNUIENIQVIxNiAgICAgICAgICAgICpXYWxr ZXI7DQo+ID4gPiArICBFRklfSFRUUHY0X0FDQ0VTU19QT0lOVCBJUHY0Tm9kZTsNCj4gPiA+ICsg IEVGSV9IQU5ETEUgICAgICAgICAgICAgICpIYW5kbGVzOw0KPiA+ID4gKyAgRUZJX0hBTkRMRSAg ICAgICAgICAgICAgQ29udHJvbGxlckhhbmRsZTsNCj4gPiA+ICsgIEhUVFBfRE9XTkxPQURfQ09O VEVYVCAgIENvbnRleHQ7DQo+ID4gPiArICBCT09MRUFOICAgICAgICAgICAgICAgICBOaWNGb3Vu ZDsNCj4gPiA+ICsNCj4gPiA+ICsgIFByb2JsZW1QYXJhbSAgICAgICAgPSBOVUxMOw0KPiA+ID4g KyAgUmVtb3RlRmlsZVBhdGggICAgICA9IE5VTEw7DQo+ID4gPiArICBOaWNGb3VuZCAgICAgICAg ICAgID0gRkFMU0U7DQo+ID4gPiArICBIYW5kbGVzICAgICAgICAgICAgID0gTlVMTDsNCj4gPiA+ ICsNCj4gPiA+ICsgIC8vDQo+ID4gPiArICAvLyBJbml0aWFsaXplIHRoZSBTaGVsbCBsaWJyYXJ5 ICh3ZSBtdXN0IGJlIGluIG5vbi1hdXRvLWluaXQuLi4pDQo+ID4gPiArICAvLw0KPiA+ID4gKyAg UGFyYW1PZmZzZXQgPSAwOw0KPiA+ID4gKyAgZ0h0dHBFcnJvciAgPSBGQUxTRTsNCj4gPiA+ICsN Cj4gPiA+ICsgIFN0YXR1cyA9IFNoZWxsSW5pdGlhbGl6ZSAoKTsNCj4gPiA+ICsgIGlmIChFRklf RVJST1IgKFN0YXR1cykpIHsNCj4gPiA+ICsgICAgQVNTRVJUX0VGSV9FUlJPUiAoU3RhdHVzKTsN Cj4gPiA+ICsgICAgcmV0dXJuIFNIRUxMX0FCT1JURUQ7DQo+ID4gPiArICB9DQo+ID4gPiArDQo+ ID4gPiArICBaZXJvTWVtICgmQ29udGV4dCwgc2l6ZW9mIChDb250ZXh0KSk7DQo+ID4gPiArDQo+ ID4gPiArICAvLw0KPiA+ID4gKyAgLy8gUGFyc2UgdGhlIGNvbW1hbmQgbGluZS4NCj4gPiA+ICsg IC8vDQo+ID4gPiArICBTdGF0dXMgPSBTaGVsbENvbW1hbmRMaW5lUGFyc2UgKA0KPiA+ID4gKyAg ICAgICAgICAgICBQYXJhbUxpc3QsDQo+ID4gPiArICAgICAgICAgICAgICZDaGVja1BhY2thZ2Us DQo+ID4gPiArICAgICAgICAgICAgICZQcm9ibGVtUGFyYW0sDQo+ID4gPiArICAgICAgICAgICAg IFRSVUUNCj4gPiA+ICsgICAgICAgICAgICAgKTsNCj4gPiA+ICsgIGlmIChFRklfRVJST1IgKFN0 YXR1cykpIHsNCj4gPiA+ICsgICAgaWYgKChTdGF0dXMgPT0gRUZJX1ZPTFVNRV9DT1JSVVBURUQp DQo+ID4gPiArICAgICAmJiAoUHJvYmxlbVBhcmFtICE9IE5VTEwpKQ0KPiA+ID4gKyAgICB7DQo+ ID4gPiArICAgICAgUFJJTlRfSElJX0FQUCAoU1RSSU5HX1RPS0VOIChTVFJfR0VOX1BST0JMRU0p LA0KPiA+IFByb2JsZW1QYXJhbSk7DQo+ID4gPiArICAgICAgU0hFTExfRlJFRV9OT05fTlVMTCAo UHJvYmxlbVBhcmFtKTsNCj4gPiA+ICsgICAgfSBlbHNlIHsNCj4gPiA+ICsgICAgICBBU1NFUlQg KEZBTFNFKTsNCj4gPiA+ICsgICAgfQ0KPiA+ID4gKw0KPiA+ID4gKyAgICBnb3RvIEVycm9yOw0K PiA+ID4gKyAgfQ0KPiA+ID4gKw0KPiA+ID4gKyAgLy8NCj4gPiA+ICsgIC8vIENoZWNrIHRoZSBu dW1iZXIgb2YgcGFyYW1ldGVycw0KPiA+ID4gKyAgLy8NCj4gPiA+ICsgIFN0YXR1cyA9IEVGSV9J TlZBTElEX1BBUkFNRVRFUjsNCj4gPiA+ICsNCj4gPiA+ICsgIFBhcmFtQ291bnQgPSBTaGVsbENv bW1hbmRMaW5lR2V0Q291bnQgKENoZWNrUGFja2FnZSk7DQo+ID4gPiArICBpZiAoUGFyYW1Db3Vu dCA+IE1BWF9QQVJBTV9DT1VOVCkgew0KPiA+ID4gKyAgICBQUklOVF9ISUlfQVBQIChTVFJJTkdf VE9LRU4gKFNUUl9HRU5fVE9PX01BTlkpLCBOVUxMKTsNCj4gPiA+ICsgICAgZ290byBFcnJvcjsN Cj4gPiA+ICsgIH0NCj4gPiA+ICsNCj4gPiA+ICsgIGlmIChQYXJhbUNvdW50IDwgTUlOX1BBUkFN X0NPVU5UKSB7DQo+ID4gPiArICAgIFBSSU5UX0hJSV9BUFAgKFNUUklOR19UT0tFTiAoU1RSX0dF Tl9UT09fRkVXKSwgTlVMTCk7DQo+ID4gPiArICAgIGdvdG8gRXJyb3I7DQo+ID4gPiArICB9DQo+ ID4gPiArDQo+ID4gPiArICBaZXJvTWVtICgmQ29udGV4dC5IdHRwQ29uZmlnRGF0YSwgc2l6ZW9m IChDb250ZXh0Lkh0dHBDb25maWdEYXRhKSk7DQo+ID4gPiArICBaZXJvTWVtICgmSVB2NE5vZGUs IHNpemVvZiAoSVB2NE5vZGUpKTsNCj4gPiA+ICsgIElQdjROb2RlLlVzZURlZmF1bHRBZGRyZXNz ID0gVFJVRTsNCj4gPiA+ICsNCj4gPiA+ICsgIENvbnRleHQuSHR0cENvbmZpZ0RhdGEuSHR0cFZl cnNpb24gPSBIdHRwVmVyc2lvbjExOw0KPiA+ID4gKyAgQ29udGV4dC5IdHRwQ29uZmlnRGF0YS5B Y2Nlc3NQb2ludC5JUHY0Tm9kZSA9ICZJUHY0Tm9kZTsNCj4gPiA+ICsNCj4gPiA+ICsgIC8vDQo+ ID4gPiArICAvLyBHZXQgdGhlIGhvc3QgYWRkcmVzcyAobm90IG5lY2Vzc2FyaWx5IElQdjQgZm9y bWF0KQ0KPiA+ID4gKyAgLy8NCj4gPiA+ICsgIFZhbHVlU3RyID0gU2hlbGxDb21tYW5kTGluZUdl dFJhd1ZhbHVlIChDaGVja1BhY2thZ2UsIDEpOw0KPiA+ID4gKyAgaWYgKCFWYWx1ZVN0cikgew0K PiA+ID4gKyAgICBQUklOVF9ISUlfQVBQIChTVFJJTkdfVE9LRU4gKFNUUl9HRU5fUEFSQU1fSU5W KSwgVmFsdWVTdHIpOw0KPiA+ID4gKyAgICBnb3RvIEVycm9yOw0KPiA+ID4gKyAgfSBlbHNlIHsN Cj4gPiA+ICsgICAgU3RhcnRTaXplID0gMDsNCj4gPiA+ICsgICAgVHJpbVNwYWNlcyAoKENIQVIx NiAqKVZhbHVlU3RyKTsNCj4gPiA+ICsgICAgaWYgKCFTdHJTdHIgKFZhbHVlU3RyLCBMIjovLyIp KSB7DQo+ID4gPiArICAgICAgQ29udGV4dC5TZXJ2ZXJBZGRyQW5kUHJvdG8gPSBTdHJuQ2F0R3Jv dyAoDQo+ID4gPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZDb250ZXh0 LlNlcnZlckFkZHJBbmRQcm90bywNCj4gPiA+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgJlN0YXJ0U2l6ZSwNCj4gPiA+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgREVGQVVMVF9IVFRQX1BST1RPLA0KPiA+ID4gKyAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBTdHJMZW4gKERFRkFVTFRfSFRUUF9QUk9UTykNCj4gPiA+ICsgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKTsNCj4gPiA+ICsgICAgICBDb250ZXh0 LlNlcnZlckFkZHJBbmRQcm90byA9IFN0cm5DYXRHcm93ICgNCj4gPiA+ICsgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgJkNvbnRleHQuU2VydmVyQWRkckFuZFByb3RvLA0KPiA+ ID4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmU3RhcnRTaXplLA0KPiA+ ID4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBMIjovLyIsDQo+ID4gPiAr ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFN0ckxlbiAoTCI6Ly8iKQ0KPiA+ ID4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApOw0KPiA+ID4gKyAgICAg IFZTdHIgPSAoQ0hBUjE2ICopVmFsdWVTdHI7DQo+ID4gPiArICAgIH0gZWxzZSB7DQo+ID4gPiAr ICAgICAgVlN0ciA9IFN0clN0ciAoVmFsdWVTdHIsIEwiOi8vIikgKyBTdHJMZW4gKEwiOi8vIik7 DQo+ID4gPiArICAgIH0NCj4gPiA+ICsNCj4gPiA+ICsgICAgZm9yIChXYWxrZXIxID0gVlN0cjsg KldhbGtlcjE7IFdhbGtlcjErKykgew0KPiA+ID4gKyAgICAgIGlmICgqV2Fsa2VyMSA9PSBMJy8n KSB7DQo+ID4gPiArICAgICAgICBicmVhazsNCj4gPiA+ICsgICAgICB9DQo+ID4gPiArICAgIH0N Cj4gPiA+ICsNCj4gPiA+ICsgICAgaWYgKCpXYWxrZXIxID09IEwnLycpIHsNCj4gPiA+ICsgICAg ICBQYXJhbU9mZnNldCA9IDE7DQo+ID4gPiArICAgICAgUmVtb3RlRmlsZVBhdGggPSBXYWxrZXIx Ow0KPiA+ID4gKyAgICB9DQo+ID4gPiArDQo+ID4gPiArICAgIENvbnRleHQuU2VydmVyQWRkckFu ZFByb3RvID0gU3RybkNhdEdyb3cgKA0KPiA+ID4gKyAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgJkNvbnRleHQuU2VydmVyQWRkckFuZFByb3RvLA0KPiA+ID4gKyAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgJlN0YXJ0U2l6ZSwNCj4gPiA+ICsgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIFZhbHVlU3RyLA0KPiA+ID4gKyAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgU3RyTGVuIChWYWx1ZVN0cikgLSBTdHJMZW4NCj4gKFdhbGtlcjEp DQo+ID4gPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApOw0KPiA+ID4gKyAg ICBpZiAoIUNvbnRleHQuU2VydmVyQWRkckFuZFByb3RvKSB7DQo+ID4gPiArICAgICAgU3RhdHVz ID0gRUZJX09VVF9PRl9SRVNPVVJDRVM7DQo+ID4gPiArICAgICAgZ290byBFcnJvcjsNCj4gPiA+ ICsgICAgfQ0KPiA+ID4gKyAgfQ0KPiA+ID4gKw0KPiA+ID4gKyAgaWYgKCFSZW1vdGVGaWxlUGF0 aCkgew0KPiA+ID4gKyAgICBSZW1vdGVGaWxlUGF0aCA9IFNoZWxsQ29tbWFuZExpbmVHZXRSYXdW YWx1ZSAoQ2hlY2tQYWNrYWdlLCAyKTsNCj4gPiA+ICsgICAgaWYgKCFSZW1vdGVGaWxlUGF0aCkg ew0KPiA+ID4gKyAgICAgIC8vIElmIG5vIHBhdGggZ2l2ZW4sIGFzc3VtZSBqdXN0ICIvIg0KPiA+ ID4gKyAgICAgIFJlbW90ZUZpbGVQYXRoID0gTCIvIjsNCj4gPiA+ICsgICAgfQ0KPiA+ID4gKyAg fQ0KPiA+ID4gKw0KPiA+ID4gKyAgVHJpbVNwYWNlcyAoKENIQVIxNiAqKVJlbW90ZUZpbGVQYXRo KTsNCj4gPiA+ICsNCj4gPiA+ICsgIGlmIChQYXJhbUNvdW50ID09IE1BWF9QQVJBTV9DT1VOVCAt IFBhcmFtT2Zmc2V0KSB7DQo+ID4gPiArICAgIG1Mb2NhbEZpbGVQYXRoID0gU2hlbGxDb21tYW5k TGluZUdldFJhd1ZhbHVlICgNCj4gPiA+ICsgICAgICAgICAgICAgICAgICAgICAgIENoZWNrUGFj a2FnZSwNCj4gPiA+ICsgICAgICAgICAgICAgICAgICAgICAgIE1BWF9QQVJBTV9DT1VOVCAtIDEg LSBQYXJhbU9mZnNldA0KPiA+ID4gKyAgICAgICAgICAgICAgICAgICAgICAgKTsNCj4gPiA+ICsg IH0gZWxzZSB7DQo+ID4gPiArICAgIFdhbGtlciA9IFJlbW90ZUZpbGVQYXRoICsgU3RyTGVuIChS ZW1vdGVGaWxlUGF0aCk7DQo+ID4gPiArICAgIHdoaWxlICgoLS1XYWxrZXIpID49IFJlbW90ZUZp bGVQYXRoKSB7DQo+ID4gPiArICAgICAgaWYgKCgqV2Fsa2VyID09IEwnXFwnKSB8fA0KPiA+ID4g KyAgICAgICAgICAoKldhbGtlciA9PSBMJy8nICkgICAgKSB7DQo+ID4gPiArICAgICAgICBicmVh azsNCj4gPiA+ICsgICAgICB9DQo+ID4gPiArICAgIH0NCj4gPiA+ICsNCj4gPiA+ICsgICAgbUxv Y2FsRmlsZVBhdGggPSBXYWxrZXIgKyAxOw0KPiA+ID4gKyAgfQ0KPiA+ID4gKw0KPiA+ID4gKyAg aWYgKCFTdHJMZW4gKG1Mb2NhbEZpbGVQYXRoKSkgew0KPiA+ID4gKyAgICBtTG9jYWxGaWxlUGF0 aCA9IERFRkFVTFRfSFRNTF9GSUxFOw0KPiA+ID4gKyAgfQ0KPiA+ID4gKw0KPiA+ID4gKyAgSW5p dGlhbFNpemUgPSAwOw0KPiA+ID4gKyAgQ29udGV4dC5VUkkgPSBTdHJuQ2F0R3JvdyAoDQo+ID4g PiArICAgICAgICAgICAgICAgICAgJkNvbnRleHQuVVJJLA0KPiA+ID4gKyAgICAgICAgICAgICAg ICAgICZJbml0aWFsU2l6ZSwNCj4gPiA+ICsgICAgICAgICAgICAgICAgICBSZW1vdGVGaWxlUGF0 aCwNCj4gPiA+ICsgICAgICAgICAgICAgICAgICBTdHJMZW4gKFJlbW90ZUZpbGVQYXRoKQ0KPiA+ ID4gKyAgICAgICAgICAgICAgICAgICk7DQo+ID4gPiArICBpZiAoIUNvbnRleHQuVVJJKSB7DQo+ ID4gPiArICAgIFN0YXR1cyA9IEVGSV9PVVRfT0ZfUkVTT1VSQ0VTOw0KPiA+ID4gKyAgICBnb3Rv IEVycm9yOw0KPiA+ID4gKyAgfQ0KPiA+ID4gKw0KPiA+ID4gKyAgLy8NCj4gPiA+ICsgIC8vIEdl dCB0aGUgbmFtZSBvZiB0aGUgTmV0d29yayBJbnRlcmZhY2UgQ2FyZCB0byBiZSB1c2VkIGlmIGFu eS4NCj4gPiA+ICsgIC8vDQo+ID4gPiArICBVc2VyTmljTmFtZSA9IFNoZWxsQ29tbWFuZExpbmVH ZXRWYWx1ZSAoQ2hlY2tQYWNrYWdlLCBMIi1pIik7DQo+ID4gPiArDQo+ID4gPiArICBWYWx1ZVN0 ciA9IFNoZWxsQ29tbWFuZExpbmVHZXRWYWx1ZSAoQ2hlY2tQYWNrYWdlLCBMIi1sIik7DQo+ID4g PiArICBpZiAoKFZhbHVlU3RyICE9IE5VTEwpDQo+ID4gPiArICAgJiYgKCFTdHJpbmdUb1VpbnQx NiAoDQo+ID4gPiArICAgICAgICAgIFZhbHVlU3RyLA0KPiA+ID4gKyAgICAgICAgICAmQ29udGV4 dC5IdHRwQ29uZmlnRGF0YS5BY2Nlc3NQb2ludC5JUHY0Tm9kZS0+TG9jYWxQb3J0DQo+ID4gPiAr ICAgICAgICAgICkNCj4gPiA+ICsgICAgICApKQ0KPiA+ID4gKyAgew0KPiA+ID4gKyAgICBnb3Rv IEVycm9yOw0KPiA+ID4gKyAgfQ0KPiA+ID4gKw0KPiA+ID4gKyAgQ29udGV4dC5CdWZmZXJTaXpl ID0gREVGQVVMVF9CVUZfU0laRTsNCj4gPiA+ICsNCj4gPiA+ICsgIFZhbHVlU3RyID0gU2hlbGxD b21tYW5kTGluZUdldFZhbHVlIChDaGVja1BhY2thZ2UsIEwiLXMiKTsNCj4gPiA+ICsgIGlmIChW YWx1ZVN0ciAhPSBOVUxMKSB7DQo+ID4gPiArICAgIENvbnRleHQuQnVmZmVyU2l6ZSA9IFNoZWxs U3RyVG9VaW50biAoVmFsdWVTdHIpOw0KPiA+ID4gKyAgICBpZiAoIUNvbnRleHQuQnVmZmVyU2l6 ZSB8fCBDb250ZXh0LkJ1ZmZlclNpemUgPiBNQVhfQlVGX1NJWkUpIHsNCj4gPiA+ICsgICAgICBQ UklOVF9ISUlfQVBQIChTVFJJTkdfVE9LRU4gKFNUUl9HRU5fUEFSQU1fSU5WKSwgVmFsdWVTdHIp Ow0KPiA+ID4gKyAgICAgIGdvdG8gRXJyb3I7DQo+ID4gPiArICAgIH0NCj4gPiA+ICsgIH0NCj4g PiA+ICsNCj4gPiA+ICsgIFZhbHVlU3RyID0gU2hlbGxDb21tYW5kTGluZUdldFZhbHVlIChDaGVj a1BhY2thZ2UsIEwiLXQiKTsNCj4gPiA+ICsgIGlmIChWYWx1ZVN0ciAhPSBOVUxMKSB7DQo+ID4g PiArICAgIENvbnRleHQuSHR0cENvbmZpZ0RhdGEuVGltZU91dE1pbGxpc2VjID0gKFVJTlQzMilT aGVsbFN0clRvVWludG4NCj4gPiA+IChWYWx1ZVN0cik7DQo+ID4gPiArICB9DQo+ID4gPiArDQo+ ID4gPiArICAvLw0KPiA+ID4gKyAgLy8gTG9jYXRlIGFsbCBIVFRQIFNlcnZpY2UgQmluZGluZyBw cm90b2NvbHMNCj4gPiA+ICsgIC8vDQo+ID4gPiArICBTdGF0dXMgPSBnQlMtPkxvY2F0ZUhhbmRs ZUJ1ZmZlciAoDQo+ID4gPiArICAgICAgICAgICAgICAgICAgQnlQcm90b2NvbCwNCj4gPiA+ICsg ICAgICAgICAgICAgICAgICAmZ0VmaU1hbmFnZWROZXR3b3JrU2VydmljZUJpbmRpbmdQcm90b2Nv bEd1aWQsDQo+ID4gPiArICAgICAgICAgICAgICAgICAgTlVMTCwNCj4gPiA+ICsgICAgICAgICAg ICAgICAgICAmSGFuZGxlQ291bnQsDQo+ID4gPiArICAgICAgICAgICAgICAgICAgJkhhbmRsZXMN Cj4gPiA+ICsgICAgICAgICAgICAgICAgICApOw0KPiA+ID4gKyAgaWYgKEVGSV9FUlJPUiAoU3Rh dHVzKSB8fCAoSGFuZGxlQ291bnQgPT0gMCkpIHsNCj4gPiA+ICsgICAgUFJJTlRfSElJIChTVFJJ TkdfVE9LRU4gKFNUUl9IVFRQX0VSUl9OT19OSUMpLCBOVUxMKTsNCj4gPiA+ICsgICAgaWYgKCFF RklfRVJST1IgKFN0YXR1cykpIHsNCj4gPiA+ICsgICAgICBTdGF0dXMgPSBFRklfTk9UX0ZPVU5E Ow0KPiA+ID4gKyAgICB9DQo+ID4gPiArDQo+ID4gPiArICAgIGdvdG8gRXJyb3I7DQo+ID4gPiAr ICB9DQo+ID4gPiArDQo+ID4gPiArICBTdGF0dXMgPSBFRklfTk9UX0ZPVU5EOw0KPiA+ID4gKw0K PiA+ID4gKyAgQ29udGV4dC5GbGFncyA9IDA7DQo+ID4gPiArICBpZiAoU2hlbGxDb21tYW5kTGlu ZUdldEZsYWcgKENoZWNrUGFja2FnZSwgTCItbSIpKSB7DQo+ID4gPiArICAgIENvbnRleHQuRmxh Z3MgfD0gRExfRkxBR19USU1FOw0KPiA+ID4gKyAgfQ0KPiA+ID4gKw0KPiA+ID4gKyAgaWYgKFNo ZWxsQ29tbWFuZExpbmVHZXRGbGFnIChDaGVja1BhY2thZ2UsIEwiLWsiKSkgew0KPiA+ID4gKyAg ICBDb250ZXh0LkZsYWdzIHw9IERMX0ZMQUdfS0VFUF9CQUQ7DQo+ID4gPiArICB9DQo+ID4gPiAr DQo+ID4gPiArICBmb3IgKE5pY051bWJlciA9IDA7DQo+ID4gPiArICAgICAgIChOaWNOdW1iZXIg PCBIYW5kbGVDb3VudCkgJiYgKFN0YXR1cyAhPSBFRklfU1VDQ0VTUyk7DQo+ID4gPiArICAgICAg IE5pY051bWJlcisrKQ0KPiA+ID4gKyAgew0KPiA+ID4gKyAgICBDb250cm9sbGVySGFuZGxlID0g SGFuZGxlc1tOaWNOdW1iZXJdOw0KPiA+ID4gKw0KPiA+ID4gKyAgICBTdGF0dXMgPSBHZXROaWNO YW1lIChDb250cm9sbGVySGFuZGxlLCBOaWNOdW1iZXIsIE5pY05hbWUpOw0KPiA+ID4gKyAgICBp ZiAoRUZJX0VSUk9SIChTdGF0dXMpKSB7DQo+ID4gPiArICAgICAgUFJJTlRfSElJIChTVFJJTkdf VE9LRU4gKFNUUl9IVFRQX0VSUl9OSUNfTkFNRSksIE5pY051bWJlciwNCj4gPiA+IFN0YXR1cyk7 DQo+ID4gPiArICAgICAgY29udGludWU7DQo+ID4gPiArICAgIH0NCj4gPiA+ICsNCj4gPiA+ICsg ICAgaWYgKFVzZXJOaWNOYW1lICE9IE5VTEwpIHsNCj4gPiA+ICsgICAgICBpZiAoU3RyQ21wIChO aWNOYW1lLCBVc2VyTmljTmFtZSkgIT0gMCkgew0KPiA+ID4gKyAgICAgICAgU3RhdHVzID0gRUZJ X05PVF9GT1VORDsNCj4gPiA+ICsgICAgICAgIGNvbnRpbnVlOw0KPiA+ID4gKyAgICAgIH0NCj4g PiA+ICsNCj4gPiA+ICsgICAgICBOaWNGb3VuZCA9IFRSVUU7DQo+ID4gPiArICAgIH0NCj4gPiA+ ICsNCj4gPiA+ICsgICAgU3RhdHVzID0gRG93bmxvYWRGaWxlICgmQ29udGV4dCwgQ29udHJvbGxl ckhhbmRsZSwgTmljTmFtZSk7DQo+ID4gPiArICAgIFBSSU5UX0hJSSAoU1RSSU5HX1RPS0VOIChT VFJfR0VOX0NSTEYpLCBOVUxMKTsNCj4gPiA+ICsNCj4gPiA+ICsgICAgaWYgKEVGSV9FUlJPUiAo U3RhdHVzKSkgew0KPiA+ID4gKyAgICAgIFBSSU5UX0hJSSAoDQo+ID4gPiArICAgICAgICBTVFJJ TkdfVE9LRU4gKFNUUl9IVFRQX0VSUl9ET1dOTE9BRCksDQo+ID4gPiArICAgICAgICBSZW1vdGVG aWxlUGF0aCwNCj4gPiA+ICsgICAgICAgIE5pY05hbWUsDQo+ID4gPiArICAgICAgICBTdGF0dXMN Cj4gPiA+ICsgICAgICAgICk7DQo+ID4gPiArICAgICAgLy8gSWYgYSB1c2VyIGFib3J0ZWQgdGhl IG9wZXJhdGlvbiwgZG8gbm90IHRyeSBhbm90aGVyDQo+IGNvbnRyb2xsZXIuDQo+ID4gPiArICAg ICAgaWYgKFN0YXR1cyA9PSBFRklfQUJPUlRFRCkgew0KPiA+ID4gKyAgICAgICAgZ290byBFcnJv cjsNCj4gPiA+ICsgICAgICB9DQo+ID4gPiArICAgIH0NCj4gPiA+ICsNCj4gPiA+ICsgICAgaWYg KGdIdHRwRXJyb3IpIHsNCj4gPiA+ICsgICAgIC8vDQo+ID4gPiArICAgICAvLyBUaGlzIGlzIG5v dCByZWxhdGVkIHRvIGNvbm5lY3Rpb24sIHNvIG5vIG5lZWQgdG8gcmVwZWF0IHdpdGgNCj4gPiA+ ICsgICAgIC8vIGFub3RoZXIgaW50ZXJmYWNlLg0KPiA+ID4gKyAgICAgLy8NCj4gPiA+ICsgICAg ICBicmVhazsNCj4gPiA+ICsgICAgfQ0KPiA+ID4gKyAgfQ0KPiA+ID4gKw0KPiA+ID4gKyAgaWYg KChVc2VyTmljTmFtZSAhPSBOVUxMKSAmJiAoIU5pY0ZvdW5kKSkgew0KPiA+ID4gKyAgICBQUklO VF9ISUkgKFNUUklOR19UT0tFTiAoU1RSX0hUVFBfRVJSX05JQ19OT1RfRk9VTkQpLA0KPiA+ID4g VXNlck5pY05hbWUpOw0KPiA+ID4gKyAgfQ0KPiA+ID4gKw0KPiA+ID4gK0Vycm9yOg0KPiA+ID4g KyAgU2hlbGxDb21tYW5kTGluZUZyZWVWYXJMaXN0IChDaGVja1BhY2thZ2UpOw0KPiA+ID4gKyAg U0hFTExfRlJFRV9OT05fTlVMTCAoSGFuZGxlcyk7DQo+ID4gPiArICBTSEVMTF9GUkVFX05PTl9O VUxMIChDb250ZXh0LlNlcnZlckFkZHJBbmRQcm90byk7DQo+ID4gPiArICBTSEVMTF9GUkVFX05P Tl9OVUxMIChDb250ZXh0LlVSSSk7DQo+ID4gPiArDQo+ID4gPiArICByZXR1cm4gU3RhdHVzICYg fk1BWF9CSVQ7DQo+ID4gPiArfQ0KPiA+ID4gKw0KPiA+ID4gKy8qKg0KPiA+ID4gKyAgQ2hlY2sg YW5kIGNvbnZlcnQgdGhlIFVJTlQxNiBvcHRpb24gdmFsdWVzIG9mIHRoZSAnaHR0cCcgY29tbWFu ZA0KPiA+ID4gKw0KPiA+ID4gKyAgQHBhcmFtW2luXSAgVmFsdWVTdHIgIFZhbHVlIGFzIGFuIFVu aWNvZGUgZW5jb2RlZCBzdHJpbmcNCj4gPiA+ICsgIEBwYXJhbVtvdXRdIFZhbHVlICAgICBVSU5U MTYgdmFsdWUNCj4gPiA+ICsNCj4gPiA+ICsgIEByZXR1cm4gICAgIFRSVUUgICAgICBUaGUgdmFs dWUgd2FzIHJldHVybmVkLg0KPiA+ID4gKyAgQHJldHVybiAgICAgRkFMU0UgICAgIEEgcGFyc2lu ZyBlcnJvciBvY2N1cmVkLg0KPiA+ID4gKyoqLw0KPiA+ID4gK1NUQVRJQw0KPiA+ID4gK0JPT0xF QU4NCj4gPiA+ICtTdHJpbmdUb1VpbnQxNiAoDQo+ID4gPiArICBJTiAgIENPTlNUIENIQVIxNiAg KlZhbHVlU3RyLA0KPiA+ID4gKyAgT1VUICBVSU5UMTYgICAgICAgICpWYWx1ZQ0KPiA+ID4gKyAg KQ0KPiA+ID4gK3sNCj4gPiA+ICsgIFVJTlROICBWYWw7DQo+ID4gPiArDQo+ID4gPiArICBWYWwg PSBTaGVsbFN0clRvVWludG4gKFZhbHVlU3RyKTsNCj4gPiA+ICsgIGlmIChWYWwgPiBNQVhfVUlO VDE2KSB7DQo+ID4gPiArICAgIFBSSU5UX0hJSV9BUFAgKFNUUklOR19UT0tFTiAoU1RSX0dFTl9Q QVJBTV9JTlYpLCBWYWx1ZVN0cik7DQo+ID4gPiArICAgIHJldHVybiBGQUxTRTsNCj4gPiA+ICsg IH0NCj4gPiA+ICsNCj4gPiA+ICsgICpWYWx1ZSA9IChVSU5UMTYpVmFsOw0KPiA+ID4gKyAgcmV0 dXJuIFRSVUU7DQo+ID4gPiArfQ0KPiA+ID4gKw0KPiA+ID4gKy8qKg0KPiA+ID4gKyAgR2V0IHRo ZSBuYW1lIG9mIHRoZSBOSUMuDQo+ID4gPiArDQo+ID4gPiArICBAcGFyYW1baW5dICAgQ29udHJv bGxlckhhbmRsZSAgVGhlIG5ldHdvcmsgcGh5c2ljYWwgZGV2aWNlIGhhbmRsZS4NCj4gPiA+ICsg IEBwYXJhbVtpbl0gICBOaWNOdW1iZXIgICAgICAgICBUaGUgbmV0d29yayBwaHlzaWNhbCBkZXZp Y2UgbnVtYmVyLg0KPiA+ID4gKyAgQHBhcmFtW291dF0gIE5pY05hbWUgICAgICAgICAgIEFkZHJl c3Mgd2hlcmUgdG8gc3RvcmUgdGhlIE5JQyBuYW1lLg0KPiA+ID4gKyAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIFRoZSBtZW1vcnkgYXJlYSBoYXMgdG8gYmUgYXQgbGVhc3QNCj4gPiA+ ICsNCj4gSVA0X0NPTkZJRzJfSU5URVJGQUNFX0lORk9fTkFNRV9MRU5HVEgNCj4gPiA+ICsgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkb3VibGUgYnl0ZSB3aWRlLg0KPiA+ID4gKw0K PiA+ID4gKyAgQHJldHVybiAgRUZJX1NVQ0NFU1MgIFRoZSBuYW1lIG9mIHRoZSBOSUMgd2FzIHJl dHVybmVkLg0KPiA+ID4gKyAgQHJldHVybiAgT3RoZXJzICAgICAgIFRoZSBjcmVhdGlvbiBvZiB0 aGUgY2hpbGQgZm9yIHRoZSBNYW5hZ2VkDQo+ID4gPiArICAgICAgICAgICAgICAgICAgICAgICAg TmV0d29yayBTZXJ2aWNlIGZhaWxlZCBvciB0aGUgb3BlbmluZyBvZg0KPiA+ID4gKyAgICAgICAg ICAgICAgICAgICAgICAgIHRoZSBNYW5hZ2VkIE5ldHdvcmsgUHJvdG9jb2wgZmFpbGVkIG9yDQo+ ID4gPiArICAgICAgICAgICAgICAgICAgICAgICAgdGhlIG9wZXJhdGlvbmFsIHBhcmFtZXRlcnMg Zm9yIHRoZQ0KPiA+ID4gKyAgICAgICAgICAgICAgICAgICAgICAgIE1hbmFnZWQgTmV0d29yayBQ cm90b2NvbCBjb3VsZCBub3QgYmUNCj4gPiA+ICsgICAgICAgICAgICAgICAgICAgICAgICByZWFk Lg0KPiA+ID4gKyoqLw0KPiA+ID4gK1NUQVRJQw0KPiA+ID4gK0VGSV9TVEFUVVMNCj4gPiA+ICtH ZXROaWNOYW1lICgNCj4gPiA+ICsgIElOICAgRUZJX0hBTkRMRSAgQ29udHJvbGxlckhhbmRsZSwN Cj4gPiA+ICsgIElOICAgVUlOVE4gICAgICAgTmljTnVtYmVyLA0KPiA+ID4gKyAgT1VUICBDSEFS MTYgICAgICAqTmljTmFtZQ0KPiA+ID4gKyAgKQ0KPiA+ID4gK3sNCj4gPiA+ICsgIEVGSV9TVEFU VVMgICAgICAgICAgICAgICAgICAgIFN0YXR1czsNCj4gPiA+ICsgIEVGSV9IQU5ETEUgICAgICAg ICAgICAgICAgICAgIE1ucEhhbmRsZTsNCj4gPiA+ICsgIEVGSV9NQU5BR0VEX05FVFdPUktfUFJP VE9DT0wgICpNbnA7DQo+ID4gPiArICBFRklfU0lNUExFX05FVFdPUktfTU9ERSAgICAgICBTbnBN b2RlOw0KPiA+ID4gKw0KPiA+ID4gKyAgU3RhdHVzID0gQ3JlYXRlU2VydmljZUNoaWxkQW5kT3Bl blByb3RvY29sICgNCj4gPiA+ICsgICAgICAgICAgICAgQ29udHJvbGxlckhhbmRsZSwNCj4gPiA+ ICsgICAgICAgICAgICAgJmdFZmlNYW5hZ2VkTmV0d29ya1NlcnZpY2VCaW5kaW5nUHJvdG9jb2xH dWlkLA0KPiA+ID4gKyAgICAgICAgICAgICAmZ0VmaU1hbmFnZWROZXR3b3JrUHJvdG9jb2xHdWlk LA0KPiA+ID4gKyAgICAgICAgICAgICAmTW5wSGFuZGxlLA0KPiA+ID4gKyAgICAgICAgICAgICAo Vk9JRCoqKSZNbnANCj4gPiA+ICsgICAgICAgICAgICAgKTsNCj4gPiA+ICsgIGlmIChFRklfRVJS T1IgKFN0YXR1cykpIHsNCj4gPiA+ICsgICAgZ290byBFcnJvcjsNCj4gPiA+ICsgIH0NCj4gPiA+ ICsNCj4gPiA+ICsgIFN0YXR1cyA9IE1ucC0+R2V0TW9kZURhdGEgKE1ucCwgTlVMTCwgJlNucE1v ZGUpOw0KPiA+ID4gKyAgaWYgKEVGSV9FUlJPUiAoU3RhdHVzKSAmJiAoU3RhdHVzICE9IEVGSV9O T1RfU1RBUlRFRCkpIHsNCj4gPiA+ICsgICAgZ290byBFcnJvcjsNCj4gPiA+ICsgIH0NCj4gPiA+ ICsNCj4gPiA+ICsgIFVuaWNvZGVTUHJpbnQgKA0KPiA+ID4gKyAgICBOaWNOYW1lLA0KPiA+ID4g KyAgICBJUDRfQ09ORklHMl9JTlRFUkZBQ0VfSU5GT19OQU1FX0xFTkdUSCwNCj4gPiA+ICsgICAg U25wTW9kZS5JZlR5cGUgPT0gTkVUX0lGVFlQRV9FVEhFUk5FVCA/IEwiZXRoJWQiIDogTCJ1bmsl ZCIsDQo+ID4gPiArICAgIE5pY051bWJlcg0KPiA+ID4gKyAgICApOw0KPiA+ID4gKw0KPiA+ID4g KyAgU3RhdHVzID0gRUZJX1NVQ0NFU1M7DQo+ID4gPiArDQo+ID4gPiArRXJyb3I6DQo+ID4gPiAr DQo+ID4gPiArICBpZiAoTW5wSGFuZGxlICE9IE5VTEwpIHsNCj4gPiA+ICsgICAgQ2xvc2VQcm90 b2NvbEFuZERlc3Ryb3lTZXJ2aWNlQ2hpbGQgKA0KPiA+ID4gKyAgICAgIENvbnRyb2xsZXJIYW5k bGUsDQo+ID4gPiArICAgICAgJmdFZmlNYW5hZ2VkTmV0d29ya1NlcnZpY2VCaW5kaW5nUHJvdG9j b2xHdWlkLA0KPiA+ID4gKyAgICAgICZnRWZpTWFuYWdlZE5ldHdvcmtQcm90b2NvbEd1aWQsDQo+ ID4gPiArICAgICAgTW5wSGFuZGxlDQo+ID4gPiArICAgICAgKTsNCj4gPiA+ICsgIH0NCj4gPiA+ ICsNCj4gPiA+ICsgIHJldHVybiBTdGF0dXM7DQo+ID4gPiArfQ0KPiA+ID4gKw0KPiA+ID4gKy8q Kg0KPiA+ID4gKyAgQ3JlYXRlIGEgY2hpbGQgZm9yIHRoZSBzZXJ2aWNlIGlkZW50aWZpZWQgYnkg aXRzIHNlcnZpY2UgYmluZGluZw0KPiBwcm90b2NvbA0KPiA+IEdVSUQNCj4gPiA+ICsgIGFuZCBn ZXQgZnJvbSB0aGUgY2hpbGQgdGhlIGludGVyZmFjZSBvZiB0aGUgcHJvdG9jb2wgaWRlbnRpZmll ZCBieQ0KPiBpdHMNCj4gPiBHVUlELg0KPiA+ID4gKw0KPiA+ID4gKyAgQHBhcmFtW2luXSAgIENv bnRyb2xsZXJIYW5kbGUgICAgICAgICAgICBDb250cm9sbGVyIGhhbmRsZS4NCj4gPiA+ICsgIEBw YXJhbVtpbl0gICBTZXJ2aWNlQmluZGluZ1Byb3RvY29sR3VpZCAgU2VydmljZSBiaW5kaW5nIHBy b3RvY29sDQo+IEdVSUQNCj4gPiBvZiB0aGUNCj4gPiA+ICsgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgc2VydmljZSB0byBiZSBjcmVhdGVkLg0KPiA+ID4gKyAgQHBh cmFtW2luXSAgIFByb3RvY29sR3VpZCAgICAgICAgICAgICAgICBHVUlEIG9mIHRoZSBwcm90b2Nv bCB0byBiZQ0KPiBvcGVuLg0KPiA+ID4gKyAgQHBhcmFtW291dF0gIENoaWxkSGFuZGxlICAgICAg ICAgICAgICAgICBBZGRyZXNzIHdoZXJlIHRoZSBoYW5kbGVyDQo+IG9mIHRoZQ0KPiA+ID4gKyAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjcmVhdGVkIGNoaWxkIGlz IHJldHVybmVkLg0KPiBOVUxMIGlzDQo+ID4gPiArICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIHJldHVybmVkIGluIGNhc2Ugb2YgZXJyb3IuDQo+ID4gPiArICBAcGFy YW1bb3V0XSAgSW50ZXJmYWNlICAgICAgICAgICAgICAgICAgIEFkZHJlc3Mgd2hlcmUgYSBwb2lu dGVyIHRvDQo+IHRoZQ0KPiA+ID4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBwcm90b2NvbCBpbnRlcmZhY2UgaXMNCj4gcmV0dXJuZWQgaW4NCj4gPiA+ICsgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSBvZiBzdWNjZXNzLg0K PiA+ID4gKw0KPiA+ID4gKyAgQHJldHVybiAgRUZJX1NVQ0NFU1MgIFRoZSBjaGlsZCB3YXMgY3Jl YXRlZCBhbmQgdGhlIHByb3RvY29sDQo+IG9wZW5lZC4NCj4gPiA+ICsgIEByZXR1cm4gIE90aGVy cyAgICAgICBFaXRoZXIgdGhlIGNyZWF0aW9uIG9mIHRoZSBjaGlsZCBvciB0aGUNCj4gb3Blbmlu Zw0KPiA+ID4gKyAgICAgICAgICAgICAgICAgICAgICAgIG9mIHRoZSBwcm90b2NvbCBmYWlsZWQu DQo+ID4gPiArKiovDQo+ID4gPiArU1RBVElDDQo+ID4gPiArRUZJX1NUQVRVUw0KPiA+ID4gK0Ny ZWF0ZVNlcnZpY2VDaGlsZEFuZE9wZW5Qcm90b2NvbCAoDQo+ID4gPiArICBJTiAgIEVGSV9IQU5E TEUgIENvbnRyb2xsZXJIYW5kbGUsDQo+ID4gPiArICBJTiAgIEVGSV9HVUlEICAgICpTZXJ2aWNl QmluZGluZ1Byb3RvY29sR3VpZCwNCj4gPiA+ICsgIElOICAgRUZJX0dVSUQgICAgKlByb3RvY29s R3VpZCwNCj4gPiA+ICsgIE9VVCAgRUZJX0hBTkRMRSAgKkNoaWxkSGFuZGxlLA0KPiA+ID4gKyAg T1VUICBWT0lEICAgICAgICAqKkludGVyZmFjZQ0KPiA+ID4gKyAgKQ0KPiA+ID4gK3sNCj4gPiA+ ICsgIEVGSV9TVEFUVVMgIFN0YXR1czsNCj4gPiA+ICsNCj4gPiA+ICsgICpDaGlsZEhhbmRsZSA9 IE5VTEw7DQo+ID4gPiArICBTdGF0dXMgPSBOZXRMaWJDcmVhdGVTZXJ2aWNlQ2hpbGQgKA0KPiA+ ID4gKyAgICAgICAgICAgICBDb250cm9sbGVySGFuZGxlLA0KPiA+ID4gKyAgICAgICAgICAgICBn SW1hZ2VIYW5kbGUsDQo+ID4gPiArICAgICAgICAgICAgIFNlcnZpY2VCaW5kaW5nUHJvdG9jb2xH dWlkLA0KPiA+ID4gKyAgICAgICAgICAgICBDaGlsZEhhbmRsZQ0KPiA+ID4gKyAgICAgICAgICAg ICApOw0KPiA+ID4gKyAgaWYgKCFFRklfRVJST1IgKFN0YXR1cykpIHsNCj4gPiA+ICsgICAgU3Rh dHVzID0gZ0JTLT5PcGVuUHJvdG9jb2wgKA0KPiA+ID4gKyAgICAgICAgICAgICAgICAgICAgKkNo aWxkSGFuZGxlLA0KPiA+ID4gKyAgICAgICAgICAgICAgICAgICAgUHJvdG9jb2xHdWlkLA0KPiA+ ID4gKyAgICAgICAgICAgICAgICAgICAgSW50ZXJmYWNlLA0KPiA+ID4gKyAgICAgICAgICAgICAg ICAgICAgZ0ltYWdlSGFuZGxlLA0KPiA+ID4gKyAgICAgICAgICAgICAgICAgICAgQ29udHJvbGxl ckhhbmRsZSwNCj4gPiA+ICsgICAgICAgICAgICAgICAgICAgIEVGSV9PUEVOX1BST1RPQ09MX0dF VF9QUk9UT0NPTA0KPiA+ID4gKyAgICAgICAgICAgICAgICAgICAgKTsNCj4gPiA+ICsgICAgaWYg KEVGSV9FUlJPUiAoU3RhdHVzKSkgew0KPiA+ID4gKyAgICAgIE5ldExpYkRlc3Ryb3lTZXJ2aWNl Q2hpbGQgKA0KPiA+ID4gKyAgICAgICAgQ29udHJvbGxlckhhbmRsZSwNCj4gPiA+ICsgICAgICAg IGdJbWFnZUhhbmRsZSwNCj4gPiA+ICsgICAgICAgIFNlcnZpY2VCaW5kaW5nUHJvdG9jb2xHdWlk LA0KPiA+ID4gKyAgICAgICAgKkNoaWxkSGFuZGxlDQo+ID4gPiArICAgICAgICApOw0KPiA+ID4g KyAgICAgICpDaGlsZEhhbmRsZSA9IE5VTEw7DQo+ID4gPiArICAgIH0NCj4gPiA+ICsgIH0NCj4g PiA+ICsNCj4gPiA+ICsgIHJldHVybiBTdGF0dXM7DQo+ID4gPiArfQ0KPiA+ID4gKw0KPiA+ID4g Ky8qKg0KPiA+ID4gKyAgQ2xvc2UgdGhlIHByb3RvY29sIGlkZW50aWZpZWQgYnkgaXRzIEdVSUQg b24gdGhlIGNoaWxkIGhhbmRsZSBvZg0KPiB0aGUNCj4gPiBzZXJ2aWNlDQo+ID4gPiArICBpZGVu dGlmaWVkIGJ5IGl0cyBzZXJ2aWNlIGJpbmRpbmcgcHJvdG9jb2wgR1VJRCwgdGhlbiBkZXN0cm95 IHRoZQ0KPiBjaGlsZA0KPiA+ID4gKyAgaGFuZGxlLg0KPiA+ID4gKw0KPiA+ID4gKyAgQHBhcmFt W2luXSAgQ29udHJvbGxlckhhbmRsZSAgICAgICAgICAgIENvbnRyb2xsZXIgaGFuZGxlLg0KPiA+ ID4gKyAgQHBhcmFtW2luXSAgU2VydmljZUJpbmRpbmdQcm90b2NvbEd1aWQgIFNlcnZpY2UgYmlu ZGluZyBwcm90b2NvbA0KPiBHVUlEDQo+ID4gb2YgdGhlDQo+ID4gPiArICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VydmljZSB0byBiZSBkZXN0cm95ZWQuDQo+ID4g PiArICBAcGFyYW1baW5dICBQcm90b2NvbEd1aWQgICAgICAgICAgICAgICAgR1VJRCBvZiB0aGUg cHJvdG9jb2wgdG8gYmUNCj4gY2xvc2VkLg0KPiA+ID4gKyAgQHBhcmFtW2luXSAgQ2hpbGRIYW5k bGUgICAgICAgICAgICAgICAgIEhhbmRsZSBvZiB0aGUgY2hpbGQgdG8gYmUNCj4gZGVzdHJveWVk Lg0KPiA+ID4gKw0KPiA+ID4gKyoqLw0KPiA+ID4gK1NUQVRJQw0KPiA+ID4gK1ZPSUQNCj4gPiA+ ICtDbG9zZVByb3RvY29sQW5kRGVzdHJveVNlcnZpY2VDaGlsZCAoDQo+ID4gPiArICBJTiAgRUZJ X0hBTkRMRSAgQ29udHJvbGxlckhhbmRsZSwNCj4gPiA+ICsgIElOICBFRklfR1VJRCAgICAqU2Vy dmljZUJpbmRpbmdQcm90b2NvbEd1aWQsDQo+ID4gPiArICBJTiAgRUZJX0dVSUQgICAgKlByb3Rv Y29sR3VpZCwNCj4gPiA+ICsgIElOICBFRklfSEFORExFICBDaGlsZEhhbmRsZQ0KPiA+ID4gKyAg KQ0KPiA+ID4gK3sNCj4gPiA+ICsgIGdCUy0+Q2xvc2VQcm90b2NvbCAoDQo+ID4gPiArICAgICAg ICAgQ2hpbGRIYW5kbGUsDQo+ID4gPiArICAgICAgICAgUHJvdG9jb2xHdWlkLA0KPiA+ID4gKyAg ICAgICAgIGdJbWFnZUhhbmRsZSwNCj4gPiA+ICsgICAgICAgICBDb250cm9sbGVySGFuZGxlDQo+ ID4gPiArICAgICAgICAgKTsNCj4gPiA+ICsNCj4gPiA+ICsgIE5ldExpYkRlc3Ryb3lTZXJ2aWNl Q2hpbGQgKA0KPiA+ID4gKyAgICBDb250cm9sbGVySGFuZGxlLA0KPiA+ID4gKyAgICBnSW1hZ2VI YW5kbGUsDQo+ID4gPiArICAgIFNlcnZpY2VCaW5kaW5nUHJvdG9jb2xHdWlkLA0KPiA+ID4gKyAg ICBDaGlsZEhhbmRsZQ0KPiA+ID4gKyAgICApOw0KPiA+ID4gK30NCj4gPiA+ICsNCj4gPiA+ICsv KioNCj4gPiA+ICsgIFdhaXQgdW50aWwgb3BlcmF0aW9uIGNvbXBsZXRlcy4gQ29tcGxldGlvbiBp cyBpbmRpY2F0ZWQgYnkNCj4gPiA+ICsgIHNldHRpbmcgb2YgYW4gYXBwcm9wcmlhdGUgdmFyaWFi bGUuDQo+ID4gPiArDQo+ID4gPiArICBAcGFyYW1baW5dICAgQ29udGV4dCAgICAgICAgICAgICBB IHBvaW50ZXIgdG8gdGhlIEhUVFAgZG93bmxvYWQNCj4gY29udGV4dC4NCj4gPiA+ICsgIEBwYXJh bVtpbl0gICBDYWxsQmFja0NvbXBsZXRlICAgIEEgcG9pbnRlciB0byB0aGUgY2FsbGJhY2sNCj4g Y29tcGxldGlvbg0KPiA+ID4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFy aWFibGUgc2V0IGJ5IHRoZSBjYWxsYmFjay4NCj4gPiA+ICsNCj4gPiA+ICsgIEByZXR1cm4gIEVG SV9TVUNDRVNTICAgICAgICAgICAgIENhbGxiYWNrIHNpZ25hbGxlZCBjb21wbGV0aW9uLg0KPiA+ ID4gKyAgQHJldHVybiAgRUZJX1RJTUVPVVQgICAgICAgICAgICAgVGltZWQgb3V0IHdhaXRpbmcg Zm9yIGNvbXBsZXRpb24uDQo+ID4gPiArICBAcmV0dXJuICBPdGhlcnMgICAgICAgICAgICAgICAg ICBFcnJvciB3YWl0aW5nIGZvciBjb21wbGV0aW9uLg0KPiA+ID4gKyoqLw0KPiA+ID4gK1NUQVRJ Qw0KPiA+ID4gK0VGSV9TVEFUVVMNCj4gPiA+ICtXYWl0Rm9yQ29tcGxldGlvbiAoDQo+ID4gPiAr ICBJTiBIVFRQX0RPV05MT0FEX0NPTlRFWFQgICpDb250ZXh0LA0KPiA+ID4gKyAgSU4gT1VUIEJP T0xFQU4gICAgICAgICAgICAqQ2FsbEJhY2tDb21wbGV0ZQ0KPiA+ID4gKyAgKQ0KPiA+ID4gK3sN Cj4gPiA+ICsgIEVGSV9TVEFUVVMgICAgICAgICAgICAgICAgU3RhdHVzOw0KPiA+ID4gKyAgRUZJ X0VWRU5UICAgICAgICAgICAgICAgICBXYWl0RXZ0Ow0KPiA+ID4gKw0KPiA+ID4gKyAgU3RhdHVz ID0gRUZJX1NVQ0NFU1M7DQo+ID4gPiArDQo+ID4gPiArICAvLyBVc2UgYSB0aW1lciB0byBtZWFz dXJlIHRpbWVvdXQuIENhbm5vdCB1c2UgU3RhbGwgaGVyZSENCj4gPiA+ICsgIFN0YXR1cyA9IGdC Uy0+Q3JlYXRlRXZlbnQgKA0KPiA+ID4gKyAgICAgICAgICAgICAgICAgIEVWVF9USU1FUiwNCj4g PiA+ICsgICAgICAgICAgICAgICAgICBUUExfQ0FMTEJBQ0ssDQo+ID4gPiArICAgICAgICAgICAg ICAgICAgTlVMTCwNCj4gPiA+ICsgICAgICAgICAgICAgICAgICBOVUxMLA0KPiA+ID4gKyAgICAg ICAgICAgICAgICAgICZXYWl0RXZ0DQo+ID4gPiArICAgICAgICAgICAgICAgICAgKTsNCj4gPiA+ ICsgICBBU1NFUlRfRUZJX0VSUk9SIChTdGF0dXMpOw0KPiA+ID4gKw0KPiA+ID4gKyAgIGlmICgh RUZJX0VSUk9SIChTdGF0dXMpKSB7DQo+ID4gPiArICAgICBTdGF0dXMgPSBnQlMtPlNldFRpbWVy ICgNCj4gPiA+ICsgICAgICAgICAgICAgICAgICAgICBXYWl0RXZ0LA0KPiA+ID4gKyAgICAgICAg ICAgICAgICAgICAgIFRpbWVyUmVsYXRpdmUsDQo+ID4gPiArICAgICAgICAgICAgICAgICAgICAg RUZJX1RJTUVSX1BFUklPRF9TRUNPTkRTIChUSU1FUl9NQVhfVElNRU9VVF9TKQ0KPiA+ID4gKyAg ICAgICAgICAgICAgICAgICAgICk7DQo+ID4gPiArDQo+ID4gPiArICAgICBBU1NFUlRfRUZJX0VS Uk9SIChTdGF0dXMpOw0KPiA+ID4gKyAgIH0NCj4gPiA+ICsNCj4gPiA+ICsgIHdoaWxlICghICpD YWxsQmFja0NvbXBsZXRlDQo+ID4gPiArICAgICAgJiYgKCFFRklfRVJST1IgKFN0YXR1cykpDQo+ ID4gPiArICAgICAgJiYgRUZJX0VSUk9SIChnQlMtPkNoZWNrRXZlbnQgKFdhaXRFdnQpKSkNCj4g PiA+ICsgIHsNCj4gPiA+ICsgICAgU3RhdHVzID0gQ29udGV4dC0+SHR0cC0+UG9sbCAoQ29udGV4 dC0+SHR0cCk7DQo+ID4gPiArICAgIGlmICghQ29udGV4dC0+Q29udGVudERvd25sb2FkZWQNCj4g PiA+ICsgICAgICYmIENhbGxCYWNrQ29tcGxldGUgPT0gJmdSZXNwb25zZUNhbGxiYWNrQ29tcGxl dGUpDQo+ID4gPiArICAgIHsNCj4gPiA+ICsgICAgICAvLw0KPiA+ID4gKyAgICAgIC8vIEFuIEhU VFAgc2VydmVyIG1heSBqdXN0IHNlbmQgYSByZXNwb25zZSByZWRpcmVjdGlvbiBoZWFkZXIuDQo+ ID4gPiArICAgICAgLy8gSW4gdGhpcyBjYXNlLCBkb24ndCB3YWl0IGZvciB0aGUgZXZlbnQgYXMN Cj4gPiA+ICsgICAgICAvLyBpdCBtaWdodCBuZXZlciBoYXBwZW4gYW5kIHdlIHdhc3RlIDEwcyB3 YWl0aW5nLg0KPiA+ID4gKyAgICAgIC8vIE5vdGUgdGhhdCBhdCB0aGlzIHBvaW50IFJlc3BvbnNl IG1heSBub3QgaGFzIGJlZW4gcG9wdWxhdGVkLA0KPiA+ID4gKyAgICAgIC8vIHNvIGl0IG5lZWRz IHRvIGJlIGNoZWNrZWQgZmlyc3QuDQo+ID4gPiArICAgICAgLy8NCj4gPiA+ICsgICAgICBpZiAo Q29udGV4dC0+UmVzcG9uc2VUb2tlbi5NZXNzYWdlDQo+ID4gPiArICAgICAgICYmIENvbnRleHQt PlJlc3BvbnNlVG9rZW4uTWVzc2FnZS0+RGF0YS5SZXNwb25zZQ0KPiA+ID4gKyAgICAgICAmJiAo TkVFRF9SRURJUkVDVElPTiAoDQo+ID4gPiArICAgICAgICAgICAgQ29udGV4dC0+UmVzcG9uc2VU b2tlbi5NZXNzYWdlLT5EYXRhLlJlc3BvbnNlLT5TdGF0dXNDb2RlDQo+ID4gPiArICAgICAgICAg ICAgKQ0KPiA+ID4gKyAgICAgICAgICkpDQo+ID4gPiArICAgICAgew0KPiA+ID4gKyAgICAgICAg YnJlYWs7DQo+ID4gPiArICAgICAgfQ0KPiA+ID4gKyAgICB9DQo+ID4gPiArICB9DQo+ID4gPiAr DQo+ID4gPiArICBnQlMtPlNldFRpbWVyIChXYWl0RXZ0LCBUaW1lckNhbmNlbCwgMCk7DQo+ID4g PiArICBnQlMtPkNsb3NlRXZlbnQgKFdhaXRFdnQpOw0KPiA+ID4gKw0KPiA+ID4gKyAgaWYgKCpD YWxsQmFja0NvbXBsZXRlKSB7DQo+ID4gPiArICAgIHJldHVybiBFRklfU1VDQ0VTUzsNCj4gPiA+ ICsgIH0NCj4gPiA+ICsNCj4gPiA+ICsgIGlmICghRUZJX0VSUk9SIChTdGF0dXMpKSB7DQo+ID4g PiArICAgIFN0YXR1cyA9IEVGSV9USU1FT1VUOw0KPiA+ID4gKyAgfQ0KPiA+ID4gKw0KPiA+ID4g KyAgcmV0dXJuIFN0YXR1czsNCj4gPiA+ICt9DQo+ID4gPiArDQo+ID4gPiArLyoqDQo+ID4gPiAr ICBHZW5lcmF0ZSBhbmQgc2VuZCBhIHJlcXVlc3QgdG8gdGhlIGh0dHAgc2VydmVyLg0KPiA+ID4g Kw0KPiA+ID4gKyAgQHBhcmFtW2luXSAgIENvbnRleHQgICAgICAgICAgIEhUVFAgZG93bmxvYWQg Y29udGV4dC4NCj4gPiA+ICsgIEBwYXJhbVtpbl0gICBEb3dubG9hZFVybCAgICAgICBGdWxseSBx dWFsaWZpZWQgVVJMIHRvIGJlDQo+IGRvd25sb2FkZWQuDQo+ID4gPiArDQo+ID4gPiArICBAcmV0 dXJuIEVGSV9TVUNDRVNTICAgICAgICAgICAgUmVxdWVzdCBoYXMgYmVlbiBzZW50IHN1Y2Nlc3Nm dWxseS4NCj4gPiA+ICsgIEByZXR1cm4gRUZJX0lOVkFMSURfUEFSQU1FVEVSICBJbnZhbGlkIFVS TC4NCj4gPiA+ICsgIEByZXR1cm4gRUZJX09VVF9PRl9SRVNPVVJDRVMgICBPdXQgb2YgbWVtb3J5 Lg0KPiA+ID4gKyAgQHJldHVybiBFRklfREVWSUNFX0VSUk9SICAgICAgIElmIEhUVFBTIGlzIHVz ZWQsIHRoaXMgcHJvYmFibHkNCj4gPiA+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBtZWFucyB0aGF0IFRMUyBzdXBwb3J0IGVpdGhlciB3YXMNCj4gbm90DQo+ID4gPiArICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5zdGFsbGVkIG9yIG5vdCBjb25maWd1cmVkLg0K PiA+ID4gKyAgQHJldHVybiBPdGhlcnMgICAgICAgICAgICAgICAgIEVycm9yIHNlbmRpbmcgdGhl IHJlcXVlc3QuDQo+ID4gPiArKiovDQo+ID4gPiArDQo+ID4gPiArU1RBVElDDQo+ID4gPiArRUZJ X1NUQVRVUw0KPiA+ID4gK1NlbmRSZXF1ZXN0ICgNCj4gPiA+ICsgIElOIEhUVFBfRE9XTkxPQURf Q09OVEVYVCAgKkNvbnRleHQsDQo+ID4gPiArICBJTiBDSEFSMTYgICAgICAgICAgICAgICAgICpE b3dubG9hZFVybA0KPiA+ID4gKyAgKQ0KPiA+ID4gK3sNCj4gPiA+ICsgICAgRUZJX0hUVFBfUkVR VUVTVF9EQVRBICAgICAgIFJlcXVlc3REYXRhOw0KPiA+ID4gKyAgICBFRklfSFRUUF9IRUFERVIg ICAgICAgICAgICAgUmVxdWVzdEhlYWRlcltIRFJfTUFYXTsNCj4gPiA+ICsgICAgRUZJX0hUVFBf TUVTU0FHRSAgICAgICAgICAgIFJlcXVlc3RNZXNzYWdlOw0KPiA+ID4gKyAgICBFRklfU1RBVFVT ICAgICAgICAgICAgICAgICAgU3RhdHVzOw0KPiA+ID4gKyAgICBDSEFSMTYgICAgICAgICAgICAg ICAgICAgICAgKkhvc3Q7DQo+ID4gPiArICAgIFVJTlROICAgICAgICAgICAgICAgICAgICAgICBT dHJpbmdTaXplOw0KPiA+ID4gKw0KPiA+ID4gKyAgICBaZXJvTWVtICgmUmVxdWVzdERhdGEsIHNp emVvZiAoUmVxdWVzdERhdGEpKTsNCj4gPiA+ICsgICAgWmVyb01lbSAoJlJlcXVlc3RIZWFkZXIs IHNpemVvZiAoUmVxdWVzdEhlYWRlcikpOw0KPiA+ID4gKyAgICBaZXJvTWVtICgmUmVxdWVzdE1l c3NhZ2UsIHNpemVvZiAoUmVxdWVzdE1lc3NhZ2UpKTsNCj4gPiA+ICsgICAgWmVyb01lbSAoJkNv bnRleHQtPlJlcXVlc3RUb2tlbiwgc2l6ZW9mIChDb250ZXh0LQ0KPiA+ID5SZXF1ZXN0VG9rZW4p KTsNCj4gPiA+ICsNCj4gPiA+ICsgICAgUmVxdWVzdEhlYWRlcltIRFJfSE9TVF0uRmllbGROYW1l ID0gIkhvc3QiOw0KPiA+ID4gKyAgICBSZXF1ZXN0SGVhZGVyW0hEUl9DT05OXS5GaWVsZE5hbWUg PSAiQ29ubmVjdGlvbiI7DQo+ID4gPiArICAgIFJlcXVlc3RIZWFkZXJbSERSX0FHRU5UXS5GaWVs ZE5hbWUgPSAiVXNlci1BZ2VudCI7DQo+ID4gPiArDQo+ID4gPiArICAgIEhvc3QgPSAoQ0hBUjE2 ICopQ29udGV4dC0+U2VydmVyQWRkckFuZFByb3RvOw0KPiA+ID4gKyAgICB3aGlsZSAoKkhvc3Qg IT0gQ0hBUl9OVUxMICYmICpIb3N0ICE9IEwnLycpIHsNCj4gPiA+ICsgICAgICBIb3N0Kys7DQo+ ID4gPiArICAgIH0NCj4gPiA+ICsNCj4gPiA+ICsgICAgaWYgKCpIb3N0ID09IENIQVJfTlVMTCkg ew0KPiA+ID4gKyAgICAgIHJldHVybiBFRklfSU5WQUxJRF9QQVJBTUVURVI7DQo+ID4gPiArICAg IH0NCj4gPiA+ICsNCj4gPiA+ICsgICAgLy8NCj4gPiA+ICsgICAgLy8gR2V0IHRoZSBuZXh0IHNs YXNoDQo+ID4gPiArICAgIC8vDQo+ID4gPiArICAgIEhvc3QrKzsNCj4gPiA+ICsgICAgLy8NCj4g PiA+ICsgICAgLy8gQW5kIG5vdyB0aGUgaG9zdCBuYW1lDQo+ID4gPiArICAgIC8vDQo+ID4gPiAr ICAgIEhvc3QrKzsNCj4gPiA+ICsNCj4gPiA+ICsgICAgU3RyaW5nU2l6ZSA9IFN0ckxlbiAoSG9z dCkgKyAxOw0KPiA+ID4gKyAgICBSZXF1ZXN0SGVhZGVyW0hEUl9IT1NUXS5GaWVsZFZhbHVlID0g QWxsb2NhdGVQb29sIChTdHJpbmdTaXplKTsNCj4gPiA+ICsgICAgaWYgKCFSZXF1ZXN0SGVhZGVy W0hEUl9IT1NUXS5GaWVsZFZhbHVlKSB7DQo+ID4gPiArICAgICAgcmV0dXJuIEVGSV9PVVRfT0Zf UkVTT1VSQ0VTOw0KPiA+ID4gKyAgICB9DQo+ID4gPiArDQo+ID4gPiArICAgIFVuaWNvZGVTdHJU b0FzY2lpU3RyUyAoDQo+ID4gPiArICAgICAgSG9zdCwNCj4gPiA+ICsgICAgICBSZXF1ZXN0SGVh ZGVyW0hEUl9IT1NUXS5GaWVsZFZhbHVlLA0KPiA+ID4gKyAgICAgIFN0cmluZ1NpemUNCj4gPiA+ ICsgICAgICApOw0KPiA+ID4gKw0KPiA+ID4gKyAgICBSZXF1ZXN0SGVhZGVyW0hEUl9DT05OXS5G aWVsZFZhbHVlID0gImNsb3NlIjsNCj4gPiA+ICsgICAgUmVxdWVzdEhlYWRlcltIRFJfQUdFTlRd LkZpZWxkVmFsdWUgPSBVU0VSX0FHRU5UX0hEUjsNCj4gPiA+ICsgICAgUmVxdWVzdE1lc3NhZ2Uu SGVhZGVyQ291bnQgPSBIRFJfTUFYOw0KPiA+ID4gKw0KPiA+ID4gKyAgICBSZXF1ZXN0RGF0YS5N ZXRob2QgPSBIdHRwTWV0aG9kR2V0Ow0KPiA+ID4gKyAgICBSZXF1ZXN0RGF0YS5VcmwgPSBEb3du bG9hZFVybDsNCj4gPiA+ICsNCj4gPiA+ICsgICAgUmVxdWVzdE1lc3NhZ2UuRGF0YS5SZXF1ZXN0 ID0gJlJlcXVlc3REYXRhOw0KPiA+ID4gKyAgICBSZXF1ZXN0TWVzc2FnZS5IZWFkZXJzID0gUmVx dWVzdEhlYWRlcjsNCj4gPiA+ICsgICAgUmVxdWVzdE1lc3NhZ2UuQm9keUxlbmd0aCA9IDA7DQo+ ID4gPiArICAgIFJlcXVlc3RNZXNzYWdlLkJvZHkgPSBOVUxMOw0KPiA+ID4gKyAgICBDb250ZXh0 LT5SZXF1ZXN0VG9rZW4uRXZlbnQgPSBOVUxMOw0KPiA+ID4gKw0KPiA+ID4gKyAgICAvLw0KPiA+ ID4gKyAgICAvLyBDb21wbGV0aW9uIGNhbGxiYWNrIGV2ZW50IHRvIGJlIHNldCB3aGVuIFJlcXVl c3QgY29tcGxldGVzLg0KPiA+ID4gKyAgICAvLw0KPiA+ID4gKyAgICBTdGF0dXMgPSBnQlMtPkNy ZWF0ZUV2ZW50ICgNCj4gPiA+ICsgICAgICAgICAgICAgICAgICAgIEVWVF9OT1RJRllfU0lHTkFM LA0KPiA+ID4gKyAgICAgICAgICAgICAgICAgICAgVFBMX0NBTExCQUNLLA0KPiA+ID4gKyAgICAg ICAgICAgICAgICAgICAgUmVxdWVzdENhbGxiYWNrLA0KPiA+ID4gKyAgICAgICAgICAgICAgICAg ICAgQ29udGV4dCwNCj4gPiA+ICsgICAgICAgICAgICAgICAgICAgICZDb250ZXh0LT5SZXF1ZXN0 VG9rZW4uRXZlbnQNCj4gPiA+ICsgICAgICAgICAgICAgICAgICAgICk7DQo+ID4gPiArICAgIEFT U0VSVF9FRklfRVJST1IgKFN0YXR1cyk7DQo+ID4gPiArDQo+ID4gPiArICAgIENvbnRleHQtPlJl cXVlc3RUb2tlbi5TdGF0dXMgPSBFRklfU1VDQ0VTUzsNCj4gPiA+ICsgICAgQ29udGV4dC0+UmVx dWVzdFRva2VuLk1lc3NhZ2UgPSAmUmVxdWVzdE1lc3NhZ2U7DQo+ID4gPiArICAgIGdSZXF1ZXN0 Q2FsbGJhY2tDb21wbGV0ZSA9IEZBTFNFOw0KPiA+ID4gKyAgICBTdGF0dXMgPSBDb250ZXh0LT5I dHRwLT5SZXF1ZXN0IChDb250ZXh0LT5IdHRwLCAmQ29udGV4dC0NCj4gPiA+UmVxdWVzdFRva2Vu KTsNCj4gPiA+ICsgICAgaWYgKEVGSV9FUlJPUiAoU3RhdHVzKSkgew0KPiA+ID4gKyAgICAgIGdv dG8gRXJyb3I7DQo+ID4gPiArICAgIH0NCj4gPiA+ICsNCj4gPiA+ICsgICAgU3RhdHVzID0gV2Fp dEZvckNvbXBsZXRpb24gKENvbnRleHQsICZnUmVxdWVzdENhbGxiYWNrQ29tcGxldGUpOw0KPiA+ ID4gKyAgICBpZiAoRUZJX0VSUk9SIChTdGF0dXMpKSB7DQo+ID4gPiArICAgICAgQ29udGV4dC0+ SHR0cC0+Q2FuY2VsIChDb250ZXh0LT5IdHRwLCAmQ29udGV4dC0+UmVxdWVzdFRva2VuKTsNCj4g PiA+ICsgICAgfQ0KPiA+ID4gKw0KPiA+ID4gK0Vycm9yOg0KPiA+ID4gKyAgICBTSEVMTF9GUkVF X05PTl9OVUxMIChSZXF1ZXN0SGVhZGVyW0hEUl9IT1NUXS5GaWVsZFZhbHVlKTsNCj4gPiA+ICsg ICAgaWYgKENvbnRleHQtPlJlcXVlc3RUb2tlbi5FdmVudCkgew0KPiA+ID4gKyAgICAgIGdCUy0+ Q2xvc2VFdmVudCAoQ29udGV4dC0+UmVxdWVzdFRva2VuLkV2ZW50KTsNCj4gPiA+ICsgICAgICBa ZXJvTWVtICgmQ29udGV4dC0+UmVxdWVzdFRva2VuLCBzaXplb2YgKENvbnRleHQtDQo+ID4gPlJl cXVlc3RUb2tlbikpOw0KPiA+ID4gKyAgICB9DQo+ID4gPiArDQo+ID4gPiArICAgIHJldHVybiBT dGF0dXM7DQo+ID4gPiArfQ0KPiA+ID4gKw0KPiA+ID4gKy8qKg0KPiA+ID4gKyAgVXBkYXRlIHRo ZSBwcm9ncmVzcyBvZiBhIGZpbGUgZG93bmxvYWQNCj4gPiA+ICsgIFRoaXMgcHJvY2VkdXJlIGlz IGNhbGxlZCBlYWNoIHRpbWUgYSBuZXcgSFRUUCBib2R5IHBvcnRpb24gaXMNCj4gcmVjZWl2ZWQu DQo+ID4gPiArDQo+ID4gPiArICBAcGFyYW1baW5dICBDb250ZXh0ICAgICAgSFRUUCBkb3dubG9h ZCBjb250ZXh0Lg0KPiA+ID4gKyAgQHBhcmFtW2luXSAgRG93bmxvYWRMZW4gIFBvcnRpb24gc2l6 ZSwgaW4gYnl0ZXMuDQo+ID4gPiArICBAcGFyYW1baW5dICBCdWZmZXIgICAgICAgVGhlIHBvaW50 ZXIgdG8gdGhlIHBhcnNlZCBidWZmZXIuDQo+ID4gPiArDQo+ID4gPiArICBAcmV0dmFsICBFRklf U1VDQ0VTUyAgICAgUG9ydGlvbiBzYXZlZC4NCj4gPiA+ICsgIEByZXR2YWwgIE90aGVyICAgICAg ICAgICBFcnJvciBzYXZpbmcgdGhlIHBvcnRpb24uDQo+ID4gPiArDQo+ID4gPiArKiovDQo+ID4g PiArU1RBVElDDQo+ID4gPiArRUZJX1NUQVRVUw0KPiA+ID4gK0VGSUFQSQ0KPiA+ID4gK1NhdmVQ b3J0aW9uICgNCj4gPiA+ICsgIElOIEhUVFBfRE9XTkxPQURfQ09OVEVYVCAgKkNvbnRleHQsDQo+ ID4gPiArICBJTiBVSU5UTiAgICAgICAgICAgICAgICAgIERvd25sb2FkTGVuLA0KPiA+ID4gKyAg SU4gQ0hBUjggICAgICAgICAgICAgICAgICAqQnVmZmVyDQo+ID4gPiArICApDQo+ID4gPiArew0K PiA+ID4gKyAgQ0hBUjE2ICAgICAgICAgICAgUHJvZ3Jlc3NbSFRUUF9QUk9HUkVTU19NRVNTQUdF X1NJWkVdOw0KPiA+ID4gKyAgVUlOVE4gICAgICAgICAgICAgTmJPZktiOw0KPiA+ID4gKyAgVUlO VE4gICAgICAgICAgICAgSW5kZXg7DQo+ID4gPiArICBVSU5UTiAgICAgICAgICAgICBMYXN0U3Rl cDsNCj4gPiA+ICsgIFVJTlROICAgICAgICAgICAgIFN0ZXA7DQo+ID4gPiArICBFRklfU1RBVFVT ICAgICAgICBTdGF0dXM7DQo+ID4gPiArDQo+ID4gPiArICBMYXN0U3RlcCA9IDA7DQo+ID4gPiAr ICBTdGVwID0gMDsNCj4gPiA+ICsNCj4gPiA+ICsgIFNoZWxsU2V0RmlsZVBvc2l0aW9uIChtRmls ZUhhbmRsZSwgQ29udGV4dC0+TGFzdFJlcG9ydGVkTmJPZkJ5dGVzKTsNCj4gPiA+ICsgIFN0YXR1 cyA9IFNoZWxsV3JpdGVGaWxlIChtRmlsZUhhbmRsZSwgJkRvd25sb2FkTGVuLCBCdWZmZXIpOw0K PiA+ID4gKyAgaWYgKEVGSV9FUlJPUiAoU3RhdHVzKSkgew0KPiA+ID4gKyAgICBpZiAoQ29udGV4 dC0+Q29udGVudERvd25sb2FkZWQgPiAwKSB7DQo+ID4gPiArICAgICAgUFJJTlRfSElJIChTVFJJ TkdfVE9LRU4gKFNUUl9HRU5fQ1JMRiksIE5VTEwpOw0KPiA+ID4gKyAgICB9DQo+ID4gPiArDQo+ ID4gPiArICAgIFBSSU5UX0hJSSAoU1RSSU5HX1RPS0VOIChTVFJfSFRUUF9FUlJfV1JJVEUpLCBt TG9jYWxGaWxlUGF0aCwNCj4gPiBTdGF0dXMpOw0KPiA+ID4gKyAgICByZXR1cm4gU3RhdHVzOw0K PiA+ID4gKyAgfQ0KPiA+ID4gKw0KPiA+ID4gKyAgaWYgKENvbnRleHQtPkNvbnRlbnREb3dubG9h ZGVkID09IDApIHsNCj4gPiA+ICsgICAgU2hlbGxQcmludEV4ICgtMSwgLTEsIEwiJXMgICAgICAg MCBLYiIsIEhUVFBfUFJPR1JfRlJBTUUpOw0KPiA+ID4gKyAgfQ0KPiA+ID4gKw0KPiA+ID4gKyAg Q29udGV4dC0+Q29udGVudERvd25sb2FkZWQgKz0gRG93bmxvYWRMZW47DQo+ID4gPiArICBOYk9m S2IgPSBDb250ZXh0LT5Db250ZW50RG93bmxvYWRlZCA+PiAxMDsNCj4gPiA+ICsNCj4gPiA+ICsg IFByb2dyZXNzWzBdID0gTCdcMCc7DQo+ID4gPiArICBpZiAoQ29udGV4dC0+Q29udGVudExlbmd0 aCkgew0KPiA+ID4gKyAgICBMYXN0U3RlcCAgPSAoQ29udGV4dC0+TGFzdFJlcG9ydGVkTmJPZkJ5 dGVzICoNCj4gPiA+IEhUVFBfUFJPR1JFU1NfU0xJREVSX1NURVBTKSAvDQo+ID4gPiArICAgICAg ICAgICAgICAgICBDb250ZXh0LT5Db250ZW50TGVuZ3RoOw0KPiA+ID4gKyAgICBTdGVwICAgICAg PSAoQ29udGV4dC0+Q29udGVudERvd25sb2FkZWQgKg0KPiA+IEhUVFBfUFJPR1JFU1NfU0xJREVS X1NURVBTKSAvDQo+ID4gPiArICAgICAgICAgICAgICAgICBDb250ZXh0LT5Db250ZW50TGVuZ3Ro Ow0KPiA+ID4gKyAgfQ0KPiA+ID4gKw0KPiA+ID4gKyAgQ29udGV4dC0+TGFzdFJlcG9ydGVkTmJP ZkJ5dGVzID0gQ29udGV4dC0+Q29udGVudERvd25sb2FkZWQ7DQo+ID4gPiArDQo+ID4gPiArICBp ZiAoU3RlcCA8PSBMYXN0U3RlcCkgew0KPiA+ID4gKyAgICBpZiAoIUNvbnRleHQtPkNvbnRlbnRM ZW5ndGgpIHsNCj4gPiA+ICsgICAgICAvLw0KPiA+ID4gKyAgICAgIC8vIFVwZGF0ZSBkb3dubG9h ZGVkIHNpemUsIHRoZXJlIGlzIG5vIGxlbmd0aCBpbmZvIGF2YWlsYWJsZS4NCj4gPiA+ICsgICAg ICAvLw0KPiA+ID4gKyAgICAgIFNoZWxsUHJpbnRFeCAoLTEsIC0xLCBMIiVzIiwgSFRUUF9LQik7 DQo+ID4gPiArICAgICAgU2hlbGxQcmludEV4ICgtMSwgLTEsIEwiJTdkIEtiIiwgTmJPZktiKTsN Cj4gPiA+ICsgICAgfQ0KPiA+ID4gKw0KPiA+ID4gKyAgICByZXR1cm4gRUZJX1NVQ0NFU1M7DQo+ ID4gPiArICB9DQo+ID4gPiArDQo+ID4gPiArICBTaGVsbFByaW50RXggKC0xLCAtMSwgTCIlcyIs IEhUVFBfUFJPR1JFU1NfREVMKTsNCj4gPiA+ICsNCj4gPiA+ICsgIFN0YXR1cyA9IFN0ckNweVMg KFByb2dyZXNzLCBIVFRQX1BST0dSRVNTX01FU1NBR0VfU0laRSwNCj4gPiA+IEhUVFBfUFJPR1Jf RlJBTUUpOw0KPiA+ID4gKyAgaWYgKEVGSV9FUlJPUiAoU3RhdHVzKSkgew0KPiA+ID4gKyAgICBy ZXR1cm4gU3RhdHVzOw0KPiA+ID4gKyAgfQ0KPiA+ID4gKw0KPiA+ID4gKyAgZm9yIChJbmRleCA9 IDE7IEluZGV4IDwgU3RlcDsgSW5kZXgrKykgew0KPiA+ID4gKyAgICBQcm9ncmVzc1tJbmRleF0g PSBMJz0nOw0KPiA+ID4gKyAgfQ0KPiA+ID4gKw0KPiA+ID4gKyAgaWYgKFN0ZXApIHsNCj4gPiA+ ICsgICAgUHJvZ3Jlc3NbU3RlcF0gPSBMJz4nOw0KPiA+ID4gKyAgfQ0KPiA+ID4gKw0KPiA+ID4g KyAgVW5pY29kZVNQcmludCAoDQo+ID4gPiArICAgIFByb2dyZXNzICsgKHNpemVvZiAoSFRUUF9Q Uk9HUl9GUkFNRSkgLyBzaXplb2YgKENIQVIxNikpIC0gMSwNCj4gPiA+ICsgICAgc2l6ZW9mIChQ cm9ncmVzcykgLSBzaXplb2YgKEhUVFBfUFJPR1JfRlJBTUUpLA0KPiA+ID4gKyAgICBMIiAlN2Qg S2IiLA0KPiA+ID4gKyAgICBOYk9mS2INCj4gPiA+ICsgICAgKTsNCj4gPiA+ICsNCj4gPiA+ICsN Cj4gPiA+ICsgIFNoZWxsUHJpbnRFeCAoLTEsIC0xLCBMIiVzIiwgUHJvZ3Jlc3MpOw0KPiA+ID4g Kw0KPiA+ID4gKyAgcmV0dXJuIEVGSV9TVUNDRVNTOw0KPiA+ID4gK30NCj4gPiA+ICsNCj4gPiA+ ICsvKioNCj4gPiA+ICsgIFJlcGxhY2UgdGhlIG9yaWdpbmFsIEhvc3QgYW5kIFVSSSB3aXRoIEhv c3QgYW5kIFVSSSByZXR1cm5lZCBieSB0aGUNCj4gPiA+ICsgIEhUVFAgc2VydmVyIGluICdMb2Nh dGlvbicgaGVhZGVyIChyZWRpcmVjdGlvbikuDQo+ID4gPiArDQo+ID4gPiArICBAcGFyYW1baW5d ICAgTG9jYXRpb24gICAgICAgICAgIEEgcG9pbnRlciB0byB0aGUgJ0xvY2F0aW9uJyBzdHJpbmcN Cj4gPiA+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJvdmlkZWQgYnkgSFRU UCBzZXJ2ZXIuDQo+ID4gPiArICBAcGFyYW1baW5dICAgQ29udGV4dCAgICAgICAgICAgIEEgcG9p bnRlciB0byBIVFRQIGRvd25sb2FkIGNvbnRleHQuDQo+ID4gPiArICBAcGFyYW1baW5dICAgRG93 bmxvYWRVcmwgICAgICAgIEZ1bGx5IHF1YWxpZmllZCBIVFRQIFVSTC4NCj4gPiA+ICsNCj4gPiA+ ICsgIEByZXR1cm4gIEVGSV9TVUNDRVNTICAgICAgICAgICAgSG9zdCBhbmQgVVJJIHdlcmUgc3Vj Y2Vzc2Z1bGx5IHNldC4NCj4gPiA+ICsgIEByZXR1cm4gIEVGSV9PVVRfT0ZfUkVTT1VSQ0VTICAg RXJyb3Igc2V0dGluZyBIb3N0IG9yIFVSSS4NCj4gPiA+ICsqKi8NCj4gPiA+ICsNCj4gPiA+ICtT VEFUSUMNCj4gPiA+ICtFRklfU1RBVFVTDQo+ID4gPiArU2V0SG9zdFVSSSAoDQo+ID4gPiArICBJ TiBDSEFSOCAgICAgICAgICAgICAgICAgKkxvY2F0aW9uLA0KPiA+ID4gKyAgSU4gSFRUUF9ET1dO TE9BRF9DT05URVhUICpDb250ZXh0LA0KPiA+ID4gKyAgSU4gQ0hBUjE2ICAgICAgICAgICAgICAg ICpEb3dubG9hZFVybA0KPiA+ID4gKyAgKQ0KPiA+ID4gK3sNCj4gPiA+ICsgIEVGSV9TVEFUVVMg ICAgU3RhdHVzOw0KPiA+ID4gKyAgVUlOVE4gICAgICAgICBTdHJpbmdTaXplOw0KPiA+ID4gKyAg VUlOVE4gICAgICAgICBGaXJzdFN0ZXA7DQo+ID4gPiArICBVSU5UTiAgICAgICAgIElkeDsNCj4g PiA+ICsgIFVJTlROICAgICAgICAgU3RlcDsNCj4gPiA+ICsgIENIQVI4ICAgICAgICAgKldhbGtl cjsNCj4gPiA+ICsgIENIQVIxNiAgICAgICAgKlRlbXA7DQo+ID4gPiArICBDSEFSOCAgICAgICAg ICpUbXA7DQo+ID4gPiArICBDSEFSMTYgICAgICAgICpVcmw7DQo+ID4gPiArICBCT09MRUFOICAg ICAgIElzQWJFbXB0eVVybDsNCj4gPiA+ICsNCj4gPiA+ICsgIFRtcCA9IE5VTEw7DQo+ID4gPiAr ICBVcmwgPSBOVUxMOw0KPiA+ID4gKyAgSXNBYkVtcHR5VXJsID0gRkFMU0U7DQo+ID4gPiArICBG aXJzdFN0ZXAgPSAwOw0KPiA+ID4gKw0KPiA+ID4gKyAgU3RyaW5nU2l6ZSA9IChBc2NpaVN0clNp emUgKExvY2F0aW9uKSAqIHNpemVvZiAoQ0hBUjE2KSk7DQo+ID4gPiArICBVcmwgPSBBbGxvY2F0 ZVplcm9Qb29sIChTdHJpbmdTaXplKTsNCj4gPiA+ICsgIGlmICghVXJsKSB7DQo+ID4gPiArICAg IHJldHVybiBFRklfT1VUX09GX1JFU09VUkNFUzsNCj4gPiA+ICsgIH0NCj4gPiA+ICsNCj4gPiA+ ICsgIFN0YXR1cyA9IEFzY2lpU3RyVG9Vbmljb2RlU3RyUyAoDQo+ID4gPiArICAgICAgICAgICAg IChDT05TVCBDSEFSOCAqKUxvY2F0aW9uLA0KPiA+ID4gKyAgICAgICAgICAgICBVcmwsDQo+ID4g PiArICAgICAgICAgICAgIFN0cmluZ1NpemUNCj4gPiA+ICsgICAgICAgICAgICAgKTsNCj4gPiA+ ICsNCj4gPiA+ICsgIGlmIChFRklfRVJST1IgKFN0YXR1cykpIHsNCj4gPiA+ICsgICAgICAgIGdv dG8gRXJyb3I7DQo+ID4gPiArICB9DQo+ID4gPiArDQo+ID4gPiArICAvLw0KPiA+ID4gKyAgLy8g SWYgYW4gSFRUUCBzZXJ2ZXIgcmVkaXJlY3RzIHRvIHRoZSBzYW1lIGxvY2F0aW9uIG1vcmUgdGhh biBvbmNlLA0KPiA+ID4gKyAgLy8gdGhlbiBzdG9wIGF0dGVtcHRzIGFuZCB0ZWxsIGl0IGlzIG5v dCByZWFjaGFibGUuDQo+ID4gPiArICAvLw0KPiA+ID4gKyAgaWYgKCFTdHJDbXAgKFVybCwgRG93 bmxvYWRVcmwpKSB7DQo+ID4gPiArICAgIFN0YXR1cyA9IEVGSV9OT19NQVBQSU5HOw0KPiA+ID4g KyAgICBnb3RvIEVycm9yOw0KPiA+ID4gKyAgfQ0KPiA+ID4gKw0KPiA+ID4gKyAgaWYgKEFzY2lp U3RyTGVuIChMb2NhdGlvbikgPiAyKSB7DQo+ID4gPiArICAgIC8vIFNvbWUgc2VydmVycyByZXR1 cm4gJ0xvY2F0aW9uOiAvL3NlcnZlci9yZXNvdXJjZScNCj4gPiA+ICsgICAgSXNBYkVtcHR5VXJs ID0gKExvY2F0aW9uWzBdID09ICcvJykgJiYgKExvY2F0aW9uWzFdID09ICcvJyk7DQo+ID4gPiAr ICAgIGlmIChJc0FiRW1wdHlVcmwpIHsNCj4gPiA+ICsgICAgICAvLyBTa2lwIGZpcnN0ICIvLyIN Cj4gPiA+ICsgICAgICBMb2NhdGlvbiArPSAyOw0KPiA+ID4gKyAgICAgIEZpcnN0U3RlcCA9IDE7 DQo+ID4gPiArICAgIH0NCj4gPiA+ICsgIH0NCj4gPiA+ICsNCj4gPiA+ICsgIGlmIChBc2NpaVN0 clN0ciAoTG9jYXRpb24sICI6Ly8iKSB8fCBJc0FiRW1wdHlVcmwpIHsNCj4gPiA+ICsgICAgSWR4 ID0gMDsNCj4gPiA+ICsgICAgV2Fsa2VyID0gTG9jYXRpb247DQo+ID4gPiArDQo+ID4gPiArICAg IGZvciAoU3RlcCA9IEZpcnN0U3RlcDsgU3RlcCA8IDI7IFN0ZXArKykgew0KPiA+ID4gKyAgICAg IGZvciAoOyAqV2Fsa2VyICE9ICcvJyAmJiAqV2Fsa2VyICE9ICdcMCc7IFdhbGtlcisrKSB7DQo+ ID4gPiArICAgICAgICBJZHgrKzsNCj4gPiA+ICsgICAgICB9DQo+ID4gPiArDQo+ID4gPiArICAg ICAgaWYgKCFTdGVwKSB7DQo+ID4gPiArICAgICAgICAvLw0KPiA+ID4gKyAgICAgICAgLy8gU2tp cCAiLy8iDQo+ID4gPiArICAgICAgICAvLw0KPiA+ID4gKyAgICAgICAgSWR4ICs9IDI7DQo+ID4g PiArICAgICAgICBXYWxrZXIgKz0gMjsNCj4gPiA+ICsgICAgICB9DQo+ID4gPiArICAgIH0NCj4g PiA+ICsNCj4gPiA+ICsgICAgVG1wID0gQWxsb2NhdGVaZXJvUG9vbCAoSWR4ICsgMSk7DQo+ID4g PiArICAgIGlmICghVG1wKSB7DQo+ID4gPiArICAgICAgU3RhdHVzID0gRUZJX09VVF9PRl9SRVNP VVJDRVM7DQo+ID4gPiArICAgICAgZ290byBFcnJvcjsNCj4gPiA+ICsgICAgfQ0KPiA+ID4gKw0K PiA+ID4gKyAgICBDb3B5TWVtIChUbXAsIExvY2F0aW9uLCBJZHgpOw0KPiA+ID4gKw0KPiA+ID4g KyAgICAvLw0KPiA+ID4gKyAgICAvLyBMb2NhdGlvbiBub3cgcG9pbnRzIHRvIFVSSQ0KPiA+ID4g KyAgICAvLw0KPiA+ID4gKyAgICBMb2NhdGlvbiArPSBJZHg7DQo+ID4gPiArICAgIFN0cmluZ1Np emUgPSAoSWR4ICsgMSkgKiBzaXplb2YgKENIQVIxNik7DQo+ID4gPiArDQo+ID4gPiArICAgIFNI RUxMX0ZSRUVfTk9OX05VTEwgKENvbnRleHQtPlNlcnZlckFkZHJBbmRQcm90byk7DQo+ID4gPiAr DQo+ID4gPiArICAgIFRlbXAgPSBBbGxvY2F0ZVplcm9Qb29sIChTdHJpbmdTaXplKTsNCj4gPiA+ ICsgICAgaWYgKCFUZW1wKSB7DQo+ID4gPiArICAgICAgU3RhdHVzID0gRUZJX09VVF9PRl9SRVNP VVJDRVM7DQo+ID4gPiArICAgICAgZ290byBFcnJvcjsNCj4gPiA+ICsgICAgfQ0KPiA+ID4gKw0K PiA+ID4gKyAgICBTdGF0dXMgPSBBc2NpaVN0clRvVW5pY29kZVN0clMgKA0KPiA+ID4gKyAgICAg ICAgICAgICAgIChDT05TVCBDSEFSOCAqKVRtcCwNCj4gPiA+ICsgICAgICAgICAgICAgICBUZW1w LA0KPiA+ID4gKyAgICAgICAgICAgICAgIFN0cmluZ1NpemUNCj4gPiA+ICsgICAgICAgICAgICAg ICApOw0KPiA+ID4gKyAgICBpZiAoRUZJX0VSUk9SIChTdGF0dXMpKSB7DQo+ID4gPiArICAgICAg U0hFTExfRlJFRV9OT05fTlVMTCAoVGVtcCk7DQo+ID4gPiArICAgICAgZ290byBFcnJvcjsNCj4g PiA+ICsgICAgfQ0KPiA+ID4gKw0KPiA+ID4gKyAgICBJZHggPSAwOw0KPiA+ID4gKyAgICBpZiAo SXNBYkVtcHR5VXJsKSB7DQo+ID4gPiArICAgICAgQ29udGV4dC0+U2VydmVyQWRkckFuZFByb3Rv ID0gU3RybkNhdEdyb3cgKA0KPiA+ID4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgJkNvbnRleHQtPlNlcnZlckFkZHJBbmRQcm90bywNCj4gPiA+ICsgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICZJZHgsDQo+ID4gPiArICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBMImh0dHA6Ly8iLA0KPiA+ID4gKyAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgU3RyTGVuIChMImh0dHA6Ly8iKQ0KPiA+ID4gKyAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKTsNCj4gPiA+ICsgICAgfQ0KPiA+ID4gKw0K PiA+ID4gKyAgICBDb250ZXh0LT5TZXJ2ZXJBZGRyQW5kUHJvdG8gPSBTdHJuQ2F0R3JvdyAoDQo+ ID4gPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJkNvbnRleHQtPlNlcnZl ckFkZHJBbmRQcm90bywNCj4gPiA+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAmSWR4LA0KPiA+ID4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRlbXAs DQo+ID4gPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU3RyTGVuIChUZW1w KQ0KPiA+ID4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICk7DQo+ID4gPiAr ICAgIFNIRUxMX0ZSRUVfTk9OX05VTEwgKFRlbXApOw0KPiA+ID4gKyAgICBpZiAoIUNvbnRleHQt PlNlcnZlckFkZHJBbmRQcm90bykgew0KPiA+ID4gKyAgICAgIFN0YXR1cyA9IEVGSV9PVVRfT0Zf UkVTT1VSQ0VTOw0KPiA+ID4gKyAgICAgIGdvdG8gRXJyb3I7DQo+ID4gPiArICAgIH0NCj4gPiA+ ICsgIH0NCj4gPiA+ICsNCj4gPiA+ICsgIFNIRUxMX0ZSRUVfTk9OX05VTEwgKENvbnRleHQtPlVS SSk7DQo+ID4gPiArDQo+ID4gPiArICBTdHJpbmdTaXplID0gQXNjaWlTdHJTaXplIChMb2NhdGlv bikgKiBzaXplb2YgKENIQVIxNik7DQo+ID4gPiArICBDb250ZXh0LT5VUkkgPSBBbGxvY2F0ZVpl cm9Qb29sIChTdHJpbmdTaXplKTsNCj4gPiA+ICsgIGlmICghQ29udGV4dC0+VVJJKSB7DQo+ID4g PiArICAgIFN0YXR1cyA9IEVGSV9PVVRfT0ZfUkVTT1VSQ0VTOw0KPiA+ID4gKyAgICBnb3RvIEVy cm9yOw0KPiA+ID4gKyAgfQ0KPiA+ID4gKw0KPiA+ID4gKyAgLy8NCj4gPiA+ICsgIC8vIE5vdyBt YWtlIGNoYW5nZXMgdG8gdGhlIFVSSSBwYXJ0Lg0KPiA+ID4gKyAgLy8NCj4gPiA+ICsgIFN0YXR1 cyA9IEFzY2lpU3RyVG9Vbmljb2RlU3RyUyAoDQo+ID4gPiArICAgICAgICAgICAgIChDT05TVCBD SEFSOCAqKUxvY2F0aW9uLA0KPiA+ID4gKyAgICAgICAgICAgICBDb250ZXh0LT5VUkksDQo+ID4g PiArICAgICAgICAgICAgIFN0cmluZ1NpemUNCj4gPiA+ICsgICAgICAgICAgICAgKTsNCj4gPiA+ ICtFcnJvcjoNCj4gPiA+ICsgIFNIRUxMX0ZSRUVfTk9OX05VTEwgKFRtcCk7DQo+ID4gPiArICBT SEVMTF9GUkVFX05PTl9OVUxMIChVcmwpOw0KPiA+ID4gKw0KPiA+ID4gKyAgcmV0dXJuIFN0YXR1 czsNCj4gPiA+ICt9DQo+ID4gPiArDQo+ID4gPiArLyoqDQo+ID4gPiArICBNZXNzYWdlIHBhcnNl ciBjYWxsYmFjay4NCj4gPiA+ICsgIFNhdmUgYSBwb3J0aW9uIG9mIEhUVFAgYm9keS4NCj4gPiA+ ICsNCj4gPiA+ICsgIEBwYXJhbVtpbl0gICBFdmVudFR5cGUgICAgICAgVHlwZSBvZiBldmVudC4g Q2FuIGJlIGVpdGhlcg0KPiA+ID4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBPbkNv bXBsZXRlIG9yIE9uRGF0YS4NCj4gPiA+ICsgIEBwYXJhbVtpbl0gICBEYXRhICAgICAgICAgICAg QSBwb2ludGVyIHRvIHRoZSBidWZmZXIgd2l0aCBkYXRhLg0KPiA+ID4gKyAgQHBhcmFtW2luXSAg IExlbmd0aCAgICAgICAgICBEYXRhIGxlbmd0aCBvZiB0aGlzIHBvcnRpb24uDQo+ID4gPiArICBA cGFyYW1baW5dICAgQ29udGV4dCAgICAgICAgIEEgcG9pbnRlciB0byB0aGUgSFRUUCBkb3dubG9h ZA0KPiBjb250ZXh0Lg0KPiA+ID4gKw0KPiA+ID4gKyAgQHJldHVybiAgICAgIEVGSV9TVUNDRVNT ICAgIFRoZSBwb3J0aW9uIHdhcyBwcm9jZXNzZWQgc3VjY2Vzc2Z1bGx5Lg0KPiA+ID4gKyAgQHJl dHVybiAgICAgIE90aGVyICAgICAgICAgIEVycm9yIHJldHVybmVkIGJ5IFNhdmVQb3J0aW9uLg0K PiA+ID4gKyoqLw0KPiA+ID4gKw0KPiA+ID4gK1NUQVRJQw0KPiA+ID4gK0VGSV9TVEFUVVMNCj4g PiA+ICtFRklBUEkNCj4gPiA+ICtQYXJzZU1zZyAoDQo+ID4gPiArICBJTiBIVFRQX0JPRFlfUEFS U0VfRVZFTlQgICAgICBFdmVudFR5cGUsDQo+ID4gPiArICBJTiBDSEFSOCAgICAgICAgICAgICAg ICAgICAgICAqRGF0YSwNCj4gPiA+ICsgIElOIFVJTlROICAgICAgICAgICAgICAgICAgICAgIExl bmd0aCwNCj4gPiA+ICsgIElOIFZPSUQgICAgICAgICAgICAgICAgICAgICAgICpDb250ZXh0DQo+ ID4gPiArICApDQo+ID4gPiArew0KPiA+ID4gKyAgaWYgKCFEYXRhIHx8IChFdmVudFR5cGUgPT0g Qm9keVBhcnNlRXZlbnRPbkNvbXBsZXRlKSB8fCAhQ29udGV4dCkgew0KPiA+ID4gKyAgICByZXR1 cm4gRUZJX1NVQ0NFU1M7DQo+ID4gPiArICB9DQo+ID4gPiArDQo+ID4gPiArICByZXR1cm4gU2F2 ZVBvcnRpb24gKENvbnRleHQsIExlbmd0aCwgRGF0YSk7DQo+ID4gPiArfQ0KPiA+ID4gKw0KPiA+ ID4gKw0KPiA+ID4gKy8qKg0KPiA+ID4gKyAgR2V0IEhUVFAgc2VydmVyIHJlc3BvbnNlIGFuZCBj b2xsZWN0IHRoZSB3aG9sZSBib2R5IGFzIGEgZmlsZS4NCj4gPiA+ICsgIFNldCBhcHByb3ByaWF0 ZSBzdGF0dXMgaW4gQ29udGV4dCAoUkVRX09LLCBSRVFfUkVQRUFULCBSRVFfRVJST1IpLg0KPiA+ ID4gKyAgTm90ZSB0aGF0IGV2ZW4gaWYgSFRUUCBzZXJ2ZXIgcmV0dXJucyBhbiBlcnJvciBjb2Rl LCBpdCBtaWdodCBzZW5kDQo+ID4gPiArICB0aGUgYm9keSBhcyB3ZWxsLiBUaGlzIGJvZHkgd2ls bCBiZSBjb2xsZWN0ZWQgaW4gdGhlIHJlc3VsdGFudA0KPiBmaWxlLg0KPiA+ID4gKw0KPiA+ID4g KyAgQHBhcmFtW2luXSAgIENvbnRleHQgICAgICAgICBBIHBvaW50ZXIgdG8gdGhlIEhUVFAgZG93 bmxvYWQNCj4gY29udGV4dC4NCj4gPiA+ICsgIEBwYXJhbVtpbl0gICBEb3dubG9hZGVkVXJsICAg QSBwb2ludGVyIHRvIHRoZSBmdWxseSBxdWFsaWZpZWQgVVJMDQo+IHRvDQo+ID4gZG93bmxvYWQu DQo+ID4gPiArDQo+ID4gPiArICBAcmV0dXJuICBFRklfU1VDQ0VTUyAgICAgICAgIFZhbGlkIGZp bGUuIEJvZHkgc3VjY2Vzc2Z1bGx5DQo+IGNvbGxlY3RlZC4NCj4gPiA+ICsgIEByZXR1cm4gIEVG SV9IVFRQX0VSUk9SICAgICAgUmVzcG9uc2UgaXMgYSB2YWxpZCBIVFRQIHJlc3BvbnNlLCBidXQN Cj4gdGhlDQo+ID4gPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEhUVFAgc2VydmVy DQo+ID4gPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluZGljYXRlZCBhbiBlcnJv ciAoSFRUUCBjb2RlID49IDQwMCkuDQo+ID4gPiArICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIFJlc3BvbnNlIGJvZHkgTUFZIGNvbnRhaW4gZnVsbA0KPiA+ID4gKyAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBIVFRQIHNlcnZlciByZXNwb25zZS4NCj4gPiA+ICsgIEByZXR1cm4g T3RoZXJzICAgICAgICAgICAgICAgRXJyb3IgZ2V0dGluZyB0aGUgcmVwb25zZSBmcm9tIHRoZQ0K PiBIVFRQIHNlcnZlci4NCj4gPiA+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUmVz cG9uc2UgYm9keSBpcyBub3QgY29sbGVjdGVkLg0KPiA+ID4gKyoqLw0KPiA+ID4gK1NUQVRJQw0K PiA+ID4gK0VGSV9TVEFUVVMNCj4gPiA+ICtHZXRSZXNwb25zZSAoDQo+ID4gPiArICBJTiBIVFRQ X0RPV05MT0FEX0NPTlRFWFQgICAgKkNvbnRleHQsDQo+ID4gPiArICBJTiBDSEFSMTYgICAgICAg ICAgICAgICAgICAgKkRvd25sb2FkVXJsDQo+ID4gPiArICApDQo+ID4gPiArew0KPiA+ID4gKyAg RUZJX0hUVFBfUkVTUE9OU0VfREFUQSAgICAgIFJlc3BvbnNlRGF0YTsNCj4gPiA+ICsgIEVGSV9I VFRQX01FU1NBR0UgICAgICAgICAgICBSZXNwb25zZU1lc3NhZ2U7DQo+ID4gPiArICBFRklfSFRU UF9IRUFERVIgICAgICAgICAgICAgKkhlYWRlcjsNCj4gPiA+ICsgIEVGSV9TVEFUVVMgICAgICAg ICAgICAgICAgICBTdGF0dXM7DQo+ID4gPiArICBWT0lEICAgICAgICAgICAgICAgICAgICAgICAg Kk1zZ1BhcnNlcjsNCj4gPiA+ICsgIEVGSV9USU1FICAgICAgICAgICAgICAgICAgICBTdGFydFRp bWU7DQo+ID4gPiArICBFRklfVElNRSAgICAgICAgICAgICAgICAgICAgRW5kVGltZTsNCj4gPiA+ ICsgIENPTlNUIENIQVIxNiAgICAgICAgICAgICAgICAqRGVzYzsNCj4gPiA+ICsgIFVJTlROICAg ICAgICAgICAgICAgICAgICAgICBFbGFwc2VkU2Vjb25kczsNCj4gPiA+ICsgIEJPT0xFQU4gICAg ICAgICAgICAgICAgICAgICBJc1RydW5rZWQ7DQo+ID4gPiArICBCT09MRUFOICAgICAgICAgICAg ICAgICAgICAgQ2FuTWVhc3VyZVRpbWU7DQo+ID4gPiArDQo+ID4gPiArICBaZXJvTWVtICgmUmVz cG9uc2VEYXRhLCBzaXplb2YgKFJlc3BvbnNlRGF0YSkpOw0KPiA+ID4gKyAgWmVyb01lbSAoJlJl c3BvbnNlTWVzc2FnZSwgc2l6ZW9mIChSZXNwb25zZU1lc3NhZ2UpKTsNCj4gPiA+ICsgIFplcm9N ZW0gKCZDb250ZXh0LT5SZXNwb25zZVRva2VuLCBzaXplb2YgKENvbnRleHQtDQo+ID4gPlJlc3Bv bnNlVG9rZW4pKTsNCj4gPiA+ICsgIElzVHJ1bmtlZCA9IEZBTFNFOw0KPiA+ID4gKw0KPiA+ID4g KyAgUmVzcG9uc2VNZXNzYWdlLkJvZHkgPSBDb250ZXh0LT5CdWZmZXI7DQo+ID4gPiArICBDb250 ZXh0LT5SZXNwb25zZVRva2VuLlN0YXR1cyA9IEVGSV9TVUNDRVNTOw0KPiA+ID4gKyAgQ29udGV4 dC0+UmVzcG9uc2VUb2tlbi5NZXNzYWdlID0gJlJlc3BvbnNlTWVzc2FnZTsNCj4gPiA+ICsgIENv bnRleHQtPkNvbnRlbnRMZW5ndGggPSAwOw0KPiA+ID4gKyAgQ29udGV4dC0+U3RhdHVzID0gUkVR X09LOw0KPiA+ID4gKyAgTXNnUGFyc2VyID0gTlVMTDsNCj4gPiA+ICsgIFJlc3BvbnNlRGF0YS5T dGF0dXNDb2RlID0gSFRUUF9TVEFUVVNfVU5TVVBQT1JURURfU1RBVFVTOw0KPiA+ID4gKyAgUmVz cG9uc2VNZXNzYWdlLkRhdGEuUmVzcG9uc2UgPSAmUmVzcG9uc2VEYXRhOw0KPiA+ID4gKyAgQ29u dGV4dC0+UmVzcG9uc2VUb2tlbi5FdmVudCA9IE5VTEw7DQo+ID4gPiArICBDYW5NZWFzdXJlVGlt ZSA9IEZBTFNFOw0KPiA+ID4gKyAgaWYgKENvbnRleHQtPkZsYWdzICYgRExfRkxBR19USU1FKSB7 DQo+ID4gPiArICAgIFplcm9NZW0gKCZTdGFydFRpbWUsIHNpemVvZiAoU3RhcnRUaW1lKSk7DQo+ ID4gPiArICAgIENhbk1lYXN1cmVUaW1lID0gIUVGSV9FUlJPUiAoZ1JULT5HZXRUaW1lICgmU3Rh cnRUaW1lLCBOVUxMKSk7DQo+ID4gPiArICB9DQo+ID4gPiArDQo+ID4gPiArICBkbyB7DQo+ID4g PiArICAgIFNIRUxMX0ZSRUVfTk9OX05VTEwgKFJlc3BvbnNlTWVzc2FnZS5IZWFkZXJzKTsNCj4g PiA+ICsgICAgUmVzcG9uc2VNZXNzYWdlLkhlYWRlckNvdW50ID0gMDsNCj4gPiA+ICsgICAgZ1Jl c3BvbnNlQ2FsbGJhY2tDb21wbGV0ZSA9IEZBTFNFOw0KPiA+ID4gKyAgICBSZXNwb25zZU1lc3Nh Z2UuQm9keUxlbmd0aCA9IENvbnRleHQtPkJ1ZmZlclNpemU7DQo+ID4gPiArDQo+ID4gPiArICAg IGlmIChTaGVsbEdldEV4ZWN1dGlvbkJyZWFrRmxhZyAoKSkgew0KPiA+ID4gKyAgICAgIFN0YXR1 cyA9IEVGSV9BQk9SVEVEOw0KPiA+ID4gKyAgICAgIGJyZWFrOw0KPiA+ID4gKyAgICB9DQo+ID4g PiArDQo+ID4gPiArICAgIGlmICghQ29udGV4dC0+Q29udGVudERvd25sb2FkZWQgJiYgIUNvbnRl eHQtDQo+ID4gPlJlc3BvbnNlVG9rZW4uRXZlbnQpIHsNCj4gPiA+ICsgICAgICBTdGF0dXMgPSBn QlMtPkNyZWF0ZUV2ZW50ICgNCj4gPiA+ICsgICAgICAgICAgICAgICAgICAgICAgRVZUX05PVElG WV9TSUdOQUwsDQo+ID4gPiArICAgICAgICAgICAgICAgICAgICAgIFRQTF9DQUxMQkFDSywNCj4g PiA+ICsgICAgICAgICAgICAgICAgICAgICAgUmVzcG9uc2VDYWxsYmFjaywNCj4gPiA+ICsgICAg ICAgICAgICAgICAgICAgICAgQ29udGV4dCwNCj4gPiA+ICsgICAgICAgICAgICAgICAgICAgICAg JkNvbnRleHQtPlJlc3BvbnNlVG9rZW4uRXZlbnQNCj4gPiA+ICsgICAgICAgICAgICAgICAgICAg ICAgKTsNCj4gPiA+ICsgICAgICBBU1NFUlRfRUZJX0VSUk9SIChTdGF0dXMpOw0KPiA+ID4gKyAg ICB9IGVsc2Ugew0KPiA+ID4gKyAgICAgIFJlc3BvbnNlTWVzc2FnZS5EYXRhLlJlc3BvbnNlID0g TlVMTDsNCj4gPiA+ICsgICAgfQ0KPiA+ID4gKw0KPiA+ID4gKyAgICBpZiAoRUZJX0VSUk9SIChT dGF0dXMpKSB7DQo+ID4gPiArICAgICAgYnJlYWs7DQo+ID4gPiArICAgIH0NCj4gPiA+ICsNCj4g PiA+ICsgICAgU3RhdHVzID0gQ29udGV4dC0+SHR0cC0+UmVzcG9uc2UgKENvbnRleHQtPkh0dHAs ICZDb250ZXh0LQ0KPiA+ID4gPlJlc3BvbnNlVG9rZW4pOw0KPiA+ID4gKyAgICBpZiAoRUZJX0VS Uk9SIChTdGF0dXMpKSB7DQo+ID4gPiArICAgICAgYnJlYWs7DQo+ID4gPiArICAgIH0NCj4gPiA+ ICsNCj4gPiA+ICsgICAgU3RhdHVzID0gV2FpdEZvckNvbXBsZXRpb24gKENvbnRleHQsICZnUmVz cG9uc2VDYWxsYmFja0NvbXBsZXRlKTsNCj4gPiA+ICsgICAgaWYgKEVGSV9FUlJPUiAoU3RhdHVz KSAmJiBSZXNwb25zZU1lc3NhZ2UuSGVhZGVyQ291bnQpIHsNCj4gPiA+ICsgICAgICBTdGF0dXMg PSBFRklfU1VDQ0VTUzsNCj4gPiA+ICsgICAgfQ0KPiA+ID4gKw0KPiA+ID4gKyAgICBpZiAoRUZJ X0VSUk9SIChTdGF0dXMpKSB7DQo+ID4gPiArICAgICAgQ29udGV4dC0+SHR0cC0+Q2FuY2VsIChD b250ZXh0LT5IdHRwLCAmQ29udGV4dC0+UmVzcG9uc2VUb2tlbik7DQo+ID4gPiArICAgICAgYnJl YWs7DQo+ID4gPiArICAgIH0NCj4gPiA+ICsNCj4gPiA+ICsgICAgaWYgKCFDb250ZXh0LT5Db250 ZW50RG93bmxvYWRlZCkgew0KPiA+ID4gKyAgICAgIGlmIChORUVEX1JFRElSRUNUSU9OIChSZXNw b25zZURhdGEuU3RhdHVzQ29kZSkpIHsNCj4gPiA+ICsgICAgICAgIC8vDQo+ID4gPiArICAgICAg ICAvLyBOZWVkIHRvIHJlcGVhdCB0aGUgcmVxdWVzdCB3aXRoIG5ldyBMb2NhdGlvbiAoc2VydmVy DQo+IHJlZGlyZWN0ZWQpLg0KPiA+ID4gKyAgICAgICAgLy8NCj4gPiA+ICsgICAgICAgIENvbnRl eHQtPlN0YXR1cyA9IFJFUV9ORUVEX1JFUEVBVDsNCj4gPiA+ICsNCj4gPiA+ICsgICAgICAgIEhl YWRlciA9IEh0dHBGaW5kSGVhZGVyICgNCj4gPiA+ICsgICAgICAgICAgICAgICAgICAgUmVzcG9u c2VNZXNzYWdlLkhlYWRlckNvdW50LA0KPiA+ID4gKyAgICAgICAgICAgICAgICAgICBSZXNwb25z ZU1lc3NhZ2UuSGVhZGVycywNCj4gPiA+ICsgICAgICAgICAgICAgICAgICAgIkxvY2F0aW9uIg0K PiA+ID4gKyAgICAgICAgICAgICAgICAgICApOw0KPiA+ID4gKyAgICAgICAgaWYgKEhlYWRlcikg ew0KPiA+ID4gKyAgICAgICAgICBTdGF0dXMgPSBTZXRIb3N0VVJJIChIZWFkZXItPkZpZWxkVmFs dWUsIENvbnRleHQsDQo+IERvd25sb2FkVXJsKTsNCj4gPiA+ICsgICAgICAgICAgaWYgKFN0YXR1 cyA9PSBFRklfTk9fTUFQUElORykgew0KPiA+ID4gKyAgICAgICAgICAgIFBSSU5UX0hJSSAoDQo+ ID4gPiArICAgICAgICAgICAgICBTVFJJTkdfVE9LRU4gKFNUUl9IVFRQX0VSUl9TVEFUVVNDT0RF KSwNCj4gPiA+ICsgICAgICAgICAgICAgIENvbnRleHQtPlNlcnZlckFkZHJBbmRQcm90bywNCj4g PiA+ICsgICAgICAgICAgICAgIEwiUmVjdXJzaXZlIEhUVFAgc2VydmVyIHJlbG9jYXRpb24iLA0K PiA+ID4gKyAgICAgICAgICAgICAgQ29udGV4dC0+VVJJDQo+ID4gPiArICAgICAgICAgICAgICAp Ow0KPiA+ID4gKyAgICAgICAgICB9DQo+ID4gPiArICAgICAgICB9IGVsc2Ugew0KPiA+ID4gKyAg ICAgICAgICAvLw0KPiA+ID4gKyAgICAgICAgICAvLyBCYWQgcmVwbHkgZnJvbSB0aGUgc2VydmVy LiBTZXJ2ZXIgbXVzdCBzcGVjaWZ5IHRoZQ0KPiBsb2NhdGlvbi4NCj4gPiA+ICsgICAgICAgICAg Ly8gSW5kaWNhdGUgdGhhdCByZXNvdXJjZSB3YXMgbm90IGZvdW5kLCBhbmQgbm8gYm9keQ0KPiBj b2xsZWN0ZWQuDQo+ID4gPiArICAgICAgICAgIC8vDQo+ID4gPiArICAgICAgICAgIFN0YXR1cyA9 IEVGSV9OT1RfRk9VTkQ7DQo+ID4gPiArICAgICAgICB9DQo+ID4gPiArDQo+ID4gPiArICAgICAg ICBDb250ZXh0LT5IdHRwLT5DYW5jZWwgKENvbnRleHQtPkh0dHAsDQo+ICZDb250ZXh0LT5SZXNw b25zZVRva2VuKTsNCj4gPiA+ICsgICAgICAgIGJyZWFrOw0KPiA+ID4gKyAgICAgIH0NCj4gPiA+ ICsNCj4gPiA+ICsgICAgICAvLw0KPiA+ID4gKyAgICAgIC8vIEluaXQgbWVzc2FnZS1ib2R5IHBh cnNlciBieSBoZWFkZXIgaW5mb3JtYXRpb24uDQo+ID4gPiArICAgICAgLy8NCj4gPiA+ICsgICAg ICBpZiAoIU1zZ1BhcnNlcikgew0KPiA+ID4gKyAgICAgICAgU3RhdHVzID0gSHR0cEluaXRNc2dQ YXJzZXIgKA0KPiA+ID4gKyAgICAgICAgICAgICAgICAgICBSZXNwb25zZU1lc3NhZ2UuRGF0YS5S ZXF1ZXN0LT5NZXRob2QsDQo+ID4gPiArICAgICAgICAgICAgICAgICAgIFJlc3BvbnNlRGF0YS5T dGF0dXNDb2RlLA0KPiA+ID4gKyAgICAgICAgICAgICAgICAgICBSZXNwb25zZU1lc3NhZ2UuSGVh ZGVyQ291bnQsDQo+ID4gPiArICAgICAgICAgICAgICAgICAgIFJlc3BvbnNlTWVzc2FnZS5IZWFk ZXJzLA0KPiA+ID4gKyAgICAgICAgICAgICAgICAgICBQYXJzZU1zZywNCj4gPiA+ICsgICAgICAg ICAgICAgICAgICAgQ29udGV4dCwNCj4gPiA+ICsgICAgICAgICAgICAgICAgICAgJk1zZ1BhcnNl cg0KPiA+ID4gKyAgICAgICAgICAgICAgICAgICApOw0KPiA+ID4gKyAgICAgICAgaWYgKEVGSV9F UlJPUiAoU3RhdHVzKSkgew0KPiA+ID4gKyAgICAgICAgICBicmVhazsNCj4gPiA+ICsgICAgICAg IH0NCj4gPiA+ICsgICAgICB9DQo+ID4gPiArDQo+ID4gPiArICAgICAgLy8NCj4gPiA+ICsgICAg ICAvLyBJZiBpdCBpcyBhIHRydW5rZWQgbWVzc2FnZSwgcmVseSBvbiB0aGUgcGFyc2VyLg0KPiA+ ID4gKyAgICAgIC8vDQo+ID4gPiArICAgICAgSGVhZGVyID0gSHR0cEZpbmRIZWFkZXIgKA0KPiA+ ID4gKyAgICAgICAgICAgICAgICAgUmVzcG9uc2VNZXNzYWdlLkhlYWRlckNvdW50LA0KPiA+ID4g KyAgICAgICAgICAgICAgICAgUmVzcG9uc2VNZXNzYWdlLkhlYWRlcnMsDQo+ID4gPiArICAgICAg ICAgICAgICAgICAiVHJhbnNmZXItRW5jb2RpbmciDQo+ID4gPiArICAgICAgICAgICAgICAgICAp Ow0KPiA+ID4gKyAgICAgIElzVHJ1bmtlZCA9IChIZWFkZXIgJiYgIUFzY2lpU3RyQ21wIChIZWFk ZXItPkZpZWxkVmFsdWUsDQo+ID4gImNodW5rZWQiKSk7DQo+ID4gPiArDQo+ID4gPiArICAgICAg SHR0cEdldEVudGl0eUxlbmd0aCAoTXNnUGFyc2VyLCAmQ29udGV4dC0+Q29udGVudExlbmd0aCk7 DQo+ID4gPiArDQo+ID4gPiArICAgICAgaWYgKFJlc3BvbnNlRGF0YS5TdGF0dXNDb2RlID49IEhU VFBfU1RBVFVTXzQwMF9CQURfUkVRVUVTVA0KPiA+ID4gKyAgICAgICAmJiAoUmVzcG9uc2VEYXRh LlN0YXR1c0NvZGUgIT0NCj4gPiA+IEhUVFBfU1RBVFVTXzMwOF9QRVJNQU5FTlRfUkVESVJFQ1Qp KQ0KPiA+ID4gKyAgICAgIHsNCj4gPiA+ICsgICAgICAgIC8vDQo+ID4gPiArICAgICAgICAvLyBT ZXJ2ZXIgcmVwb3J0ZWQgYW4gZXJyb3IgdmlhIFJlc3BvbnNlIGNvZGUuDQo+ID4gPiArICAgICAg ICAvLyBDb2xsZWN0IHRoZSBib2R5IGlmIGFueS4NCj4gPiA+ICsgICAgICAgIC8vDQo+ID4gPiAr ICAgICAgICBpZiAoIWdIdHRwRXJyb3IpIHsNCj4gPiA+ICsgICAgICAgICAgZ0h0dHBFcnJvciA9 IFRSVUU7DQo+ID4gPiArDQo+ID4gPiArICAgICAgICAgIERlc2MgPSBFcnJTdGF0dXNEZXNjW1Jl c3BvbnNlRGF0YS5TdGF0dXNDb2RlIC0NCj4gPiA+ICsgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgSFRUUF9TVEFUVVNfNDAwX0JBRF9SRVFVRVNUXTsNCj4gPiA+ICsgICAgICAgICAgUFJJ TlRfSElJICgNCj4gPiA+ICsgICAgICAgICAgICBTVFJJTkdfVE9LRU4gKFNUUl9IVFRQX0VSUl9T VEFUVVNDT0RFKSwNCj4gPiA+ICsgICAgICAgICAgICBDb250ZXh0LT5TZXJ2ZXJBZGRyQW5kUHJv dG8sDQo+ID4gPiArICAgICAgICAgICAgRGVzYywNCj4gPiA+ICsgICAgICAgICAgICBDb250ZXh0 LT5VUkkNCj4gPiA+ICsgICAgICAgICAgICApOw0KPiA+ID4gKw0KPiA+ID4gKyAgICAgICAgICAv Lw0KPiA+ID4gKyAgICAgICAgICAvLyBUaGlzIGdpdmVzIGFuIFJGQyBIVFRQIGVycm9yLg0KPiA+ ID4gKyAgICAgICAgICAvLw0KPiA+ID4gKyAgICAgICAgICBDb250ZXh0LT5TdGF0dXMgPSBTaGVs bFN0clRvVWludG4gKERlc2MpOw0KPiA+ID4gKyAgICAgICAgICBTdGF0dXMgPSBFTkNPREVfRVJS T1IgKENvbnRleHQtPlN0YXR1cyk7DQo+ID4gPiArICAgICAgICB9DQo+ID4gPiArICAgICAgfQ0K PiA+ID4gKyAgICB9DQo+ID4gPiArDQo+ID4gPiArICAgIC8vIERvIE5PVCB0cnkgdG8gcGFyc2Ug YW4gZW1wdHkgYm9keS4NCj4gPiA+ICsgICAgaWYgKFJlc3BvbnNlTWVzc2FnZS5Cb2R5TGVuZ3Ro IHx8IElzVHJ1bmtlZCkgew0KPiA+ID4gKyAgICAgIFN0YXR1cyA9IEh0dHBQYXJzZU1lc3NhZ2VC b2R5ICgNCj4gPiA+ICsgICAgICAgICAgICAgICAgIE1zZ1BhcnNlciwNCj4gPiA+ICsgICAgICAg ICAgICAgICAgIFJlc3BvbnNlTWVzc2FnZS5Cb2R5TGVuZ3RoLA0KPiA+ID4gKyAgICAgICAgICAg ICAgICAgUmVzcG9uc2VNZXNzYWdlLkJvZHkNCj4gPiA+ICsgICAgICAgICAgICAgICAgICk7DQo+ ID4gPiArICAgIH0NCj4gPiA+ICsgIH0gd2hpbGUgKCFIdHRwSXNNZXNzYWdlQ29tcGxldGUgKE1z Z1BhcnNlcikNCj4gPiA+ICsgICAgICAgICYmICFFRklfRVJST1IgKFN0YXR1cykNCj4gPiA+ICsg ICAgICAgICYmIFJlc3BvbnNlTWVzc2FnZS5Cb2R5TGVuZ3RoKTsNCj4gPiA+ICsNCj4gPiA+ICsg IGlmIChDb250ZXh0LT5TdGF0dXMgIT0gUkVRX05FRURfUkVQRUFUDQo+ID4gPiArICAgJiYgU3Rh dHVzID09IEVGSV9TVUNDRVNTDQo+ID4gPiArICAgJiYgQ2FuTWVhc3VyZVRpbWUpDQo+ID4gPiAr ICB7DQo+ID4gPiArICAgIGlmICghRUZJX0VSUk9SIChnUlQtPkdldFRpbWUgKCZFbmRUaW1lLCBO VUxMKSkpIHsNCj4gPiA+ICsgICAgICBFbGFwc2VkU2Vjb25kcyA9IEVmaVRpbWVUb0Vwb2NoICgm RW5kVGltZSkgLSBFZmlUaW1lVG9FcG9jaA0KPiA+ID4gKCZTdGFydFRpbWUpOw0KPiA+ID4gKyAg ICAgIFByaW50ICgNCj4gPiA+ICsgICAgICAgIEwiLCVhJXVzXG4iLA0KPiA+ID4gKyAgICAgICAg RWxhcHNlZFNlY29uZHMgPyAiICIgOiAiIDwgIiwNCj4gPiA+ICsgICAgICAgIEVsYXBzZWRTZWNv bmRzID4gMSA/IEVsYXBzZWRTZWNvbmRzIDogMQ0KPiA+ID4gKyAgICAgICAgKTsNCj4gPiA+ICsg ICAgfQ0KPiA+ID4gKyAgfQ0KPiA+ID4gKw0KPiA+ID4gKyAgU0hFTExfRlJFRV9OT05fTlVMTCAo TXNnUGFyc2VyKTsNCj4gPiA+ICsgIGlmIChDb250ZXh0LT5SZXNwb25zZVRva2VuLkV2ZW50KSB7 DQo+ID4gPiArICAgIGdCUy0+Q2xvc2VFdmVudCAoQ29udGV4dC0+UmVzcG9uc2VUb2tlbi5FdmVu dCk7DQo+ID4gPiArICAgIFplcm9NZW0gKCZDb250ZXh0LT5SZXNwb25zZVRva2VuLCBzaXplb2Yg KENvbnRleHQtDQo+ID4gPlJlc3BvbnNlVG9rZW4pKTsNCj4gPiA+ICsgIH0NCj4gPiA+ICsNCj4g PiA+ICsgIHJldHVybiBTdGF0dXM7DQo+ID4gPiArfQ0KPiA+ID4gKw0KPiA+ID4gKy8qKg0KPiA+ ID4gKyAgV29ya2VyIGZ1bmN0aW9uIHRoYXQgZG93bmxvYWRzIHRoZSBkYXRhIG9mIGEgZmlsZSBm cm9tIGFuIEhUVFANCj4gc2VydmVyDQo+ID4gZ2l2ZW4NCj4gPiA+ICsgIHRoZSBwYXRoIG9mIHRo ZSBmaWxlIGFuZCBpdHMgc2l6ZS4NCj4gPiA+ICsNCj4gPiA+ICsgIEBwYXJhbVtpbl0gICBDb250 ZXh0ICAgICAgICAgICBBIHBvaW50ZXIgdG8gdGhlIEhUVFAgZG93bmxvYWQNCj4gY29udGV4dC4N Cj4gPiA+ICsgIEBwYXJhbVtpbl0gICBDb250cm9sbGVyaGFuZGxlICBUaGUgaGFuZGxlIG9mIHRo ZSBuZXR3b3JrIGludGVyZmFjZQ0KPiA+IGNvbnRyb2xsZXINCj4gPiA+ICsgIEBwYXJhbVtpbl0g ICBOaWNOYW1lICAgICAgICAgICBOSUMgbmFtZQ0KPiA+ID4gKw0KPiA+ID4gKyAgQHJldHZhbCAg RUZJX1NVQ0NFU1MgICAgICAgICAgIFRoZSBmaWxlIHdhcyBkb3dubG9hZGVkLg0KPiA+ID4gKyAg QHJldHZhbCAgRUZJX09VVF9PRl9SRVNPVVJDRVMgIEEgbWVtb3J5IGFsbG9jYXRpb24gZmFpbGVk Lg0KPiA+ID4gKyAgI3JldHZhbCAgRUZJX0hUVFBfRVJST1IgICAgICAgIFRoZSBzZXJ2ZXIgcmV0 dXJuZWQgYSB2YWxpZCBIVFRQDQo+IGVycm9yLg0KPiA+ID4gKyAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIEV4YW1pbmUgdGhlIG1Mb2NhbEZpbGVQYXRoIGZpbGUNCj4gPiA+ICsgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0byBnZXQgZXJyb3IgYm9keS4NCj4gPiA+ICsg IEByZXR2YWwgIE90aGVycyAgICAgICAgICAgICAgICBUaGUgZG93bmxvYWRpbmcgb2YgdGhlIGZp bGUgZnJvbSB0aGUNCj4gc2VydmVyDQo+ID4gPiArICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgZmFpbGVkLg0KPiA+ID4gKw0KPiA+ID4gKyoqLw0KPiA+ID4gK1NUQVRJQw0KPiA+ID4g K0VGSV9TVEFUVVMNCj4gPiA+ICtEb3dubG9hZEZpbGUgKA0KPiA+ID4gKyAgSU4gSFRUUF9ET1dO TE9BRF9DT05URVhUICAgKkNvbnRleHQsDQo+ID4gPiArICBJTiBFRklfSEFORExFICAgICAgICAg ICAgICBDb250cm9sbGVySGFuZGxlLA0KPiA+ID4gKyAgSU4gQ0hBUjE2ICAgICAgICAgICAgICAg ICAgKk5pY05hbWUNCj4gPiA+ICsgICkNCj4gPiA+ICt7DQo+ID4gPiArICBFRklfU1RBVFVTICAg ICAgICAgICAgICAgICBTdGF0dXM7DQo+ID4gPiArICBDSEFSMTYgICAgICAgICAgICAgICAgICAg ICAqRG93bmxvYWRVcmw7DQo+ID4gPiArICBVSU5UTiAgICAgICAgICAgICAgICAgICAgICBVcmxT aXplOw0KPiA+ID4gKyAgRUZJX0hBTkRMRSAgICAgICAgICAgICAgICAgSHR0cENoaWxkSGFuZGxl Ow0KPiA+ID4gKw0KPiA+ID4gKyAgQVNTRVJUIChDb250ZXh0KTsNCj4gPiA+ICsgIGlmICghQ29u dGV4dCkgew0KPiA+ID4gKyAgICByZXR1cm4gRUZJX0lOVkFMSURfUEFSQU1FVEVSOw0KPiA+ID4g KyAgfQ0KPiA+ID4gKw0KPiA+ID4gKyAgRG93bmxvYWRVcmwgPSBOVUxMOw0KPiA+ID4gKyAgSHR0 cENoaWxkSGFuZGxlID0gTlVMTDsNCj4gPiA+ICsNCj4gPiA+ICsgIENvbnRleHQtPkJ1ZmZlciA9 IEFsbG9jYXRlUG9vbCAoQ29udGV4dC0+QnVmZmVyU2l6ZSk7DQo+ID4gPiArICBpZiAoIUNvbnRl eHQtPkJ1ZmZlcikgew0KPiA+ID4gKyAgICBTdGF0dXMgPSBFRklfT1VUX09GX1JFU09VUkNFUzsN Cj4gPiA+ICsgICAgZ290byBPTl9FWElUOw0KPiA+ID4gKyAgfQ0KPiA+ID4gKw0KPiA+ID4gKyAg Ly8NCj4gPiA+ICsgIC8vIE9QRU4gRklMRQ0KPiA+ID4gKyAgLy8NCj4gPiA+ICsgIGlmICghRUZJ X0VSUk9SIChTaGVsbEZpbGVFeGlzdHMgKG1Mb2NhbEZpbGVQYXRoKSkpIHsNCj4gPiA+ICsgICAg U2hlbGxEZWxldGVGaWxlQnlOYW1lIChtTG9jYWxGaWxlUGF0aCk7DQo+ID4gPiArICB9DQo+ID4g PiArDQo+ID4gPiArICBTdGF0dXMgPSBTaGVsbE9wZW5GaWxlQnlOYW1lICgNCj4gPiA+ICsgICAg ICAgICAgICAgbUxvY2FsRmlsZVBhdGgsDQo+ID4gPiArICAgICAgICAgICAgICZtRmlsZUhhbmRs ZSwNCj4gPiA+ICsgICAgICAgICAgICAgRUZJX0ZJTEVfTU9ERV9DUkVBVEUgfA0KPiA+ID4gKyAg ICAgICAgICAgICBFRklfRklMRV9NT0RFX1dSSVRFICB8DQo+ID4gPiArICAgICAgICAgICAgIEVG SV9GSUxFX01PREVfUkVBRCwNCj4gPiA+ICsgICAgICAgICAgICAgMA0KPiA+ID4gKyAgICAgICAg ICAgICApOw0KPiA+ID4gKyAgaWYgKEVGSV9FUlJPUiAoU3RhdHVzKSkgew0KPiA+ID4gKyAgICBQ UklOVF9ISUlfQVBQIChTVFJJTkdfVE9LRU4gKFNUUl9HRU5fRklMRV9PUEVOX0ZBSUwpLA0KPiA+ ID4gbUxvY2FsRmlsZVBhdGgpOw0KPiA+ID4gKyAgICBnb3RvIE9OX0VYSVQ7DQo+ID4gPiArICB9 DQo+ID4gPiArDQo+ID4gPiArICBkbyB7DQo+ID4gPiArICAgIFNIRUxMX0ZSRUVfTk9OX05VTEwg KERvd25sb2FkVXJsKTsNCj4gPiA+ICsNCj4gPiA+ICsgICAgQ0xPU0VfSFRUUF9IQU5ETEUgKENv bnRyb2xsZXJIYW5kbGUsIEh0dHBDaGlsZEhhbmRsZSk7DQo+ID4gPiArDQo+ID4gPiArICAgIFN0 YXR1cyA9IENyZWF0ZVNlcnZpY2VDaGlsZEFuZE9wZW5Qcm90b2NvbCAoDQo+ID4gPiArICAgICAg ICAgICAgICAgQ29udHJvbGxlckhhbmRsZSwNCj4gPiA+ICsgICAgICAgICAgICAgICAmZ0VmaUh0 dHBTZXJ2aWNlQmluZGluZ1Byb3RvY29sR3VpZCwNCj4gPiA+ICsgICAgICAgICAgICAgICAmZ0Vm aUh0dHBQcm90b2NvbEd1aWQsDQo+ID4gPiArICAgICAgICAgICAgICAgJkh0dHBDaGlsZEhhbmRs ZSwNCj4gPiA+ICsgICAgICAgICAgICAgICAoVk9JRCoqKSZDb250ZXh0LT5IdHRwDQo+ID4gPiAr ICAgICAgICAgICAgICAgKTsNCj4gPiA+ICsNCj4gPiA+ICsgICAgaWYgKEVGSV9FUlJPUiAoU3Rh dHVzKSkgew0KPiA+ID4gKyAgICAgIFBSSU5UX0hJSSAoU1RSSU5HX1RPS0VOIChTVFJfSFRUUF9F UlJfT1BFTl9QUk9UT0NPTCksDQo+ID4gTmljTmFtZSwNCj4gPiA+IFN0YXR1cyk7DQo+ID4gPiAr ICAgICAgZ290byBPTl9FWElUOw0KPiA+ID4gKyAgICB9DQo+ID4gPiArDQo+ID4gPiArICAgIFN0 YXR1cyA9IENvbnRleHQtPkh0dHAtPkNvbmZpZ3VyZSAoQ29udGV4dC0+SHR0cCwgJkNvbnRleHQt DQo+ID4gPiA+SHR0cENvbmZpZ0RhdGEpOw0KPiA+ID4gKyAgICBpZiAoRUZJX0VSUk9SIChTdGF0 dXMpKSB7DQo+ID4gPiArICAgICAgUFJJTlRfSElJIChTVFJJTkdfVE9LRU4gKFNUUl9IVFRQX0VS Ul9DT05GSUdVUkUpLCBOaWNOYW1lLA0KPiA+ID4gU3RhdHVzKTsNCj4gPiA+ICsgICAgICBnb3Rv IE9OX0VYSVQ7DQo+ID4gPiArICAgIH0NCj4gPiA+ICsNCj4gPiA+ICsgICAgVXJsU2l6ZSA9IDA7 DQo+ID4gPiArICAgIERvd25sb2FkVXJsID0gU3RybkNhdEdyb3cgKA0KPiA+ID4gKyAgICAgICAg ICAgICAgICAgICAgJkRvd25sb2FkVXJsLA0KPiA+ID4gKyAgICAgICAgICAgICAgICAgICAgJlVy bFNpemUsDQo+ID4gPiArICAgICAgICAgICAgICAgICAgICBDb250ZXh0LT5TZXJ2ZXJBZGRyQW5k UHJvdG8sDQo+ID4gPiArICAgICAgICAgICAgICAgICAgICBTdHJMZW4gKENvbnRleHQtPlNlcnZl ckFkZHJBbmRQcm90bykNCj4gPiA+ICsgICAgICAgICAgICAgICAgICAgICk7DQo+ID4gPiArICAg IGlmIChDb250ZXh0LT5VUklbMF0gIT0gTCcvJykgew0KPiA+ID4gKyAgICAgIERvd25sb2FkVXJs ID0gU3RybkNhdEdyb3cgKA0KPiA+ID4gKyAgICAgICAgICAgICAgICAgICAgICAmRG93bmxvYWRV cmwsDQo+ID4gPiArICAgICAgICAgICAgICAgICAgICAgICZVcmxTaXplLA0KPiA+ID4gKyAgICAg ICAgICAgICAgICAgICAgICBMIi8iLA0KPiA+ID4gKyAgICAgICAgICAgICAgICAgICAgICBTdHJM ZW4gKENvbnRleHQtPlNlcnZlckFkZHJBbmRQcm90bykNCj4gPiA+ICsgICAgICAgICAgICAgICAg ICAgICAgKTsNCj4gPiA+ICsgICAgfQ0KPiA+ID4gKw0KPiA+ID4gKyAgICBEb3dubG9hZFVybCA9 IFN0cm5DYXRHcm93ICgNCj4gPiA+ICsgICAgICAgICAgICAgICAgICAgICZEb3dubG9hZFVybCwN Cj4gPiA+ICsgICAgICAgICAgICAgICAgICAgICZVcmxTaXplLA0KPiA+ID4gKyAgICAgICAgICAg ICAgICAgICAgQ29udGV4dC0+VVJJLA0KPiA+ID4gKyAgICAgICAgICAgICAgICAgICAgU3RyTGVu IChDb250ZXh0LT5VUkkpKTsNCj4gPiA+ICsNCj4gPiA+ICsgICAgUFJJTlRfSElJIChTVFJJTkdf VE9LRU4gKFNUUl9IVFRQX0RPV05MT0FESU5HKSwNCj4gPiBEb3dubG9hZFVybCk7DQo+ID4gPiAr DQo+ID4gPiArICAgIFN0YXR1cyA9IFNlbmRSZXF1ZXN0IChDb250ZXh0LCBEb3dubG9hZFVybCk7 DQo+ID4gPiArICAgIGlmIChTdGF0dXMpIHsNCj4gPiA+ICsgICAgICBnb3RvIE9OX0VYSVQ7DQo+ ID4gPiArICAgIH0NCj4gPiA+ICsNCj4gPiA+ICsgICAgU3RhdHVzID0gR2V0UmVzcG9uc2UgKENv bnRleHQsIERvd25sb2FkVXJsKTsNCj4gPiA+ICsNCj4gPiA+ICsgICAgaWYgKFN0YXR1cykgew0K PiA+ID4gKyAgICAgIGdvdG8gT05fRVhJVDsNCj4gPiA+ICsgICAgfQ0KPiA+ID4gKw0KPiA+ID4g KyAgfSB3aGlsZSAoQ29udGV4dC0+U3RhdHVzID09IFJFUV9ORUVEX1JFUEVBVCk7DQo+ID4gPiAr DQo+ID4gPiArICBpZiAoQ29udGV4dC0+U3RhdHVzKSB7DQo+ID4gPiArICAgIFN0YXR1cyA9IEVO Q09ERV9FUlJPUiAoQ29udGV4dC0+U3RhdHVzKTsNCj4gPiA+ICsgIH0NCj4gPiA+ICsNCj4gPiA+ ICtPTl9FWElUOg0KPiA+ID4gKyAgLy8NCj4gPiA+ICsgIC8vIENMT1NFIEZJTEUNCj4gPiA+ICsg IC8vDQo+ID4gPiArICBpZiAobUZpbGVIYW5kbGUpIHsNCj4gPiA+ICsgICAgaWYgKEVGSV9FUlJP UiAoU3RhdHVzKSAmJiAhKENvbnRleHQtPkZsYWdzICYgRExfRkxBR19LRUVQX0JBRCkpIHsNCj4g PiA+ICsgICAgICBTaGVsbERlbGV0ZUZpbGUgKCZtRmlsZUhhbmRsZSk7DQo+ID4gPiArICAgIH0g ZWxzZSB7DQo+ID4gPiArICAgICAgU2hlbGxDbG9zZUZpbGUgKCZtRmlsZUhhbmRsZSk7DQo+ID4g PiArICAgIH0NCj4gPiA+ICsgIH0NCj4gPiA+ICsNCj4gPiA+ICsgIFNIRUxMX0ZSRUVfTk9OX05V TEwgKERvd25sb2FkVXJsKTsNCj4gPiA+ICsgIFNIRUxMX0ZSRUVfTk9OX05VTEwgKENvbnRleHQt PkJ1ZmZlcik7DQo+ID4gPiArDQo+ID4gPiArICBDTE9TRV9IVFRQX0hBTkRMRSAoQ29udHJvbGxl ckhhbmRsZSwgSHR0cENoaWxkSGFuZGxlKTsNCj4gPiA+ICsNCj4gPiA+ICsgIHJldHVybiBTdGF0 dXM7DQo+ID4gPiArfQ0KPiA+ID4gKw0KPiA+ID4gKy8qKg0KPiA+ID4gKyAgUmV0cml2ZSBISUkg cGFja2FnZSBsaXN0IGZyb20gSW1hZ2VIYW5kbGUgYW5kIHB1Ymxpc2ggdG8gSElJDQo+IGRhdGFi YXNlLg0KPiA+ID4gKw0KPiA+ID4gKyAgQHBhcmFtIEltYWdlSGFuZGxlICAgICAgICAgICAgVGhl IGltYWdlIGhhbmRsZSBvZiB0aGUgcHJvY2Vzcy4NCj4gPiA+ICsNCj4gPiA+ICsgIEByZXR1cm4g SElJIGhhbmRsZS4NCj4gPiA+ICsqKi8NCj4gPiA+ICtFRklfSElJX0hBTkRMRQ0KPiA+ID4gK0lu aXRpYWxpemVIaWlQYWNrYWdlICgNCj4gPiA+ICsgIEVGSV9IQU5ETEUgICAgICAgICAgICAgICAg ICBJbWFnZUhhbmRsZQ0KPiA+ID4gKyAgKQ0KPiA+ID4gK3sNCj4gPiA+ICsgIEVGSV9TVEFUVVMg ICAgICAgICAgICAgICAgICBTdGF0dXM7DQo+ID4gPiArICBFRklfSElJX1BBQ0tBR0VfTElTVF9I RUFERVIgKlBhY2thZ2VMaXN0Ow0KPiA+ID4gKyAgRUZJX0hJSV9IQU5ETEUgICAgICAgICAgICAg IEhpaUhhbmRsZTsNCj4gPiA+ICsNCj4gPiA+ICsgIC8vDQo+ID4gPiArICAvLyBSZXRyaWV2ZSBI SUkgcGFja2FnZSBsaXN0IGZyb20gSW1hZ2VIYW5kbGUNCj4gPiA+ICsgIC8vDQo+ID4gPiArICBT dGF0dXMgPSBnQlMtPk9wZW5Qcm90b2NvbCAoDQo+ID4gPiArICAgICAgICAgICAgICAgICAgSW1h Z2VIYW5kbGUsDQo+ID4gPiArICAgICAgICAgICAgICAgICAgJmdFZmlIaWlQYWNrYWdlTGlzdFBy b3RvY29sR3VpZCwNCj4gPiA+ICsgICAgICAgICAgICAgICAgICAoVk9JRCAqKikmUGFja2FnZUxp c3QsDQo+ID4gPiArICAgICAgICAgICAgICAgICAgSW1hZ2VIYW5kbGUsDQo+ID4gPiArICAgICAg ICAgICAgICAgICAgTlVMTCwNCj4gPiA+ICsgICAgICAgICAgICAgICAgICBFRklfT1BFTl9QUk9U T0NPTF9HRVRfUFJPVE9DT0wNCj4gPiA+ICsgICAgICAgICAgICAgICAgICApOw0KPiA+ID4gKyAg QVNTRVJUX0VGSV9FUlJPUiAoU3RhdHVzKTsNCj4gPiA+ICsgIGlmIChFRklfRVJST1IgKFN0YXR1 cykpIHsNCj4gPiA+ICsgICAgcmV0dXJuIE5VTEw7DQo+ID4gPiArICB9DQo+ID4gPiArDQo+ID4g PiArICAvLw0KPiA+ID4gKyAgLy8gUHVibGlzaCBISUkgcGFja2FnZSBsaXN0IHRvIEhJSSBEYXRh YmFzZS4NCj4gPiA+ICsgIC8vDQo+ID4gPiArICBTdGF0dXMgPSBnSGlpRGF0YWJhc2UtPk5ld1Bh Y2thZ2VMaXN0ICgNCj4gPiA+ICsgICAgICAgICAgICAgZ0hpaURhdGFiYXNlLA0KPiA+ID4gKyAg ICAgICAgICAgICBQYWNrYWdlTGlzdCwNCj4gPiA+ICsgICAgICAgICAgICAgTlVMTCwNCj4gPiA+ ICsgICAgICAgICAgICAgJkhpaUhhbmRsZQ0KPiA+ID4gKyAgICAgICAgICAgICApOw0KPiA+ID4g KyAgQVNTRVJUX0VGSV9FUlJPUiAoU3RhdHVzKTsNCj4gPiA+ICsgIGlmIChFRklfRVJST1IgKFN0 YXR1cykpIHsNCj4gPiA+ICsgICAgcmV0dXJuIE5VTEw7DQo+ID4gPiArICB9DQo+ID4gPiArDQo+ ID4gPiArICByZXR1cm4gSGlpSGFuZGxlOw0KPiA+ID4gK30NCj4gPiA+IGRpZmYgLS1naXQgYS9T aGVsbFBrZy9EeW5hbWljQ29tbWFuZC9IdHRwRHluYW1pY0NvbW1hbmQvSHR0cEFwcC5jDQo+ID4g PiBiL1NoZWxsUGtnL0R5bmFtaWNDb21tYW5kL0h0dHBEeW5hbWljQ29tbWFuZC9IdHRwQXBwLmMN Cj4gPiA+IG5ldyBmaWxlIG1vZGUgMTAwNjQ0DQo+ID4gPiBpbmRleCAwMDAwMDAwMDAwMDAuLmE3 ZDJjMjcxOTFhMg0KPiA+ID4gLS0tIC9kZXYvbnVsbA0KPiA+ID4gKysrIGIvU2hlbGxQa2cvRHlu YW1pY0NvbW1hbmQvSHR0cER5bmFtaWNDb21tYW5kL0h0dHBBcHAuYw0KPiA+ID4gQEAgLTAsMCAr MSw2MSBAQA0KPiA+ID4gKy8qKiBAZmlsZQ0KPiA+ID4gKyAgRW50cnlwb2ludCBvZiAiaHR0cCIg c2hlbGwgc3RhbmRhbG9uZSBhcHBsaWNhdGlvbi4NCj4gPiA+ICsNCj4gPiA+ICsgIENvcHlyaWdo dCAoYykgMjAxMCAtIDIwMTcsIEludGVsIENvcnBvcmF0aW9uLiBBbGwgcmlnaHRzIHJlc2VydmVk Lg0KPiA8QlI+DQo+ID4gPiArICBDb3B5cmlnaHQgKGMpIDIwMTUsIEFSTSBMdGQuIEFsbCByaWdo dHMgcmVzZXJ2ZWQuPEJSPg0KPiA+ID4gKyAgQ29weXJpZ2h0IChjKSAyMDIwLCBCcm9hZGNvbS4g QWxsIHJpZ2h0cyByZXNlcnZlZC48QlI+DQo+ID4gPiArDQo+ID4gPiArICBTUERYLUxpY2Vuc2Ut SWRlbnRpZmllcjogQlNELTItQ2xhdXNlLVBhdGVudA0KPiA+ID4gKw0KPiA+ID4gKyoqLw0KPiA+ ID4gKyNpbmNsdWRlICJIdHRwLmgiDQo+ID4gPiArDQo+ID4gPiArLyoNCj4gPiA+ICsgKiBTdHJp bmcgdG9rZW4gSUQgb2YgaGVscCBtZXNzYWdlIHRleHQuDQo+ID4gPiArICogU2hlbGwgc3VwcG9y dHMgdG8gZmluZCBoZWxwIG1lc3NhZ2UgaW4gdGhlIHJlc291cmNlIHNlY3Rpb24gb2YgYW4NCj4g PiA+ICsgKiBhcHBsaWNhdGlvbiBpbWFnZSBpZiAqIC5NQU4gZmlsZSBpcyBub3QgZm91bmQuDQo+ ID4gPiArICogVGhpcyBnbG9iYWwgdmFyaWFibGUgaXMgYWRkZWQgdG8gbWFrZSBidWlsZCB0b29s IHJlY29nbml6ZXMNCj4gPiA+ICsgKiB0aGF0IHRoZSBoZWxwIHN0cmluZyBpcyBjb25zdW1lZCBi eSB1c2VyIGFuZCB0aGVuIGJ1aWxkIHRvb2wgd2lsbA0KPiA+ID4gKyAqIGFkZCB0aGUgc3RyaW5n IGludG8gdGhlIHJlc291cmNlIHNlY3Rpb24uDQo+ID4gPiArICogVGh1cyB0aGUgYXBwbGljYXRp b24gY2FuIHVzZSAnLT8nIG9wdGlvbiB0byBzaG93IGhlbHAgbWVzc2FnZSBpbg0KPiBTaGVsbC4N Cj4gPiA+ICsgKi8NCj4gPiA+ICtHTE9CQUxfUkVNT1ZFX0lGX1VOUkVGRVJFTkNFRA0KPiA+ID4g K0VGSV9TVFJJTkdfSUQgbVN0cmluZ0hlbHBUb2tlbklkID0gU1RSSU5HX1RPS0VODQo+ID4gKFNU Ul9HRVRfSEVMUF9IVFRQKTsNCj4gPiA+ICsNCj4gPiA+ICsvKioNCj4gPiA+ICsgIEVudHJ5IHBv aW50IG9mIEh0dHAgc3RhbmRhbG9uZSBhcHBsaWNhdGlvbi4NCj4gPiA+ICsNCj4gPiA+ICsgIEBw YXJhbSBJbWFnZUhhbmRsZSAgICAgICAgICAgIFRoZSBpbWFnZSBoYW5kbGUgb2YgdGhlIHByb2Nl c3MuDQo+ID4gPiArICBAcGFyYW0gU3lzdGVtVGFibGUgICAgICAgICAgICBUaGUgRUZJIFN5c3Rl bSBUYWJsZSBwb2ludGVyLg0KPiA+ID4gKw0KPiA+ID4gKyAgQHJldHZhbCBFRklfU1VDQ0VTUyAg ICAgICAgICAgSHR0cCBjb21tYW5kIGlzIGV4ZWN1dGVkIHN1Y2Vzc2Z1bGx5Lg0KPiA+ID4gKyAg QHJldHZhbCBFRklfQUJPUlRFRCAgICAgICAgICAgSElJIHBhY2thZ2Ugd2FzIGZhaWxlZCB0byBp bml0aWFsaXplLg0KPiA+ID4gKyAgQHJldHZhbCBvdGhlcnMgICAgICAgICAgICAgICAgT3RoZXIg ZXJyb3JzIHdoZW4gZXhlY3V0aW5nIGh0dHANCj4gY29tbWFuZC4NCj4gPiA+ICsqKi8NCj4gPiA+ ICtFRklfU1RBVFVTDQo+ID4gPiArRUZJQVBJDQo+ID4gPiArSHR0cEFwcEluaXRpYWxpemUgKA0K PiA+ID4gKyAgSU4gRUZJX0hBTkRMRSAgICAgICAgICAgICAgIEltYWdlSGFuZGxlLA0KPiA+ID4g KyAgSU4gRUZJX1NZU1RFTV9UQUJMRSAgICAgICAgICpTeXN0ZW1UYWJsZQ0KPiA+ID4gKyAgKQ0K PiA+ID4gK3sNCj4gPiA+ICsgIEVGSV9TVEFUVVMgICAgICAgICAgICAgICAgICBTdGF0dXM7DQo+ ID4gPiArICBTSEVMTF9TVEFUVVMgICAgICAgICAgICAgICAgU2hlbGxTdGF0dXM7DQo+ID4gPiAr DQo+ID4gPiArICBtSHR0cEhpaUhhbmRsZSA9IEluaXRpYWxpemVIaWlQYWNrYWdlIChJbWFnZUhh bmRsZSk7DQo+ID4gPiArICBpZiAobUh0dHBIaWlIYW5kbGUgPT0gTlVMTCkgew0KPiA+ID4gKyAg ICByZXR1cm4gRUZJX0FCT1JURUQ7DQo+ID4gPiArICB9DQo+ID4gPiArDQo+ID4gPiArICBTdGF0 dXMgPSBFRklfU1VDQ0VTUzsNCj4gPiA+ICsNCj4gPiA+ICsgIFNoZWxsU3RhdHVzID0gUnVuSHR0 cCAoSW1hZ2VIYW5kbGUsIFN5c3RlbVRhYmxlKTsNCj4gPiA+ICsNCj4gPiA+ICsgIEhpaVJlbW92 ZVBhY2thZ2VzIChtSHR0cEhpaUhhbmRsZSk7DQo+ID4gPiArDQo+ID4gPiArICBpZiAoU3RhdHVz ICE9IFNIRUxMX1NVQ0NFU1MpIHsNCj4gPiA+ICsgICAgU3RhdHVzID0gRU5DT0RFX0VSUk9SIChT aGVsbFN0YXR1cyk7DQo+ID4gPiArICB9DQo+ID4gPiArDQo+ID4gPiArICByZXR1cm4gU3RhdHVz Ow0KPiA+ID4gK30NCj4gPiA+IGRpZmYgLS1naXQNCj4gPiA+DQo+ID4gYS9TaGVsbFBrZy9EeW5h bWljQ29tbWFuZC9IdHRwRHluYW1pY0NvbW1hbmQvSHR0cER5bmFtaWNDb21tYQ0KPiA+IG5kLmMN Cj4gPiA+DQo+ID4gYi9TaGVsbFBrZy9EeW5hbWljQ29tbWFuZC9IdHRwRHluYW1pY0NvbW1hbmQv SHR0cER5bmFtaWNDb21tYQ0KPiA+IG5kLmMNCj4gPiA+IG5ldyBmaWxlIG1vZGUgMTAwNjQ0DQo+ ID4gPiBpbmRleCAwMDAwMDAwMDAwMDAuLjdmNTljYzc0ZDJhNw0KPiA+ID4gLS0tIC9kZXYvbnVs bA0KPiA+ID4gKysrDQo+ID4gPg0KPiA+IGIvU2hlbGxQa2cvRHluYW1pY0NvbW1hbmQvSHR0cER5 bmFtaWNDb21tYW5kL0h0dHBEeW5hbWljQ29tbWENCj4gPiBuZC5jDQo+ID4gPiBAQCAtMCwwICsx LDEzNyBAQA0KPiA+ID4gKy8qKiBAZmlsZQ0KPiA+ID4gKyAgUHJvZHVjZSAiaHR0cCIgc2hlbGwg ZHluYW1pYyBjb21tYW5kLg0KPiA+ID4gKw0KPiA+ID4gKyAgQ29weXJpZ2h0IChjKSAyMDEwIC0g MjAxNywgSW50ZWwgQ29ycG9yYXRpb24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuDQo+IDxCUj4NCj4g PiA+ICsgIENvcHlyaWdodCAoYykgMjAxNSwgQVJNIEx0ZC4gQWxsIHJpZ2h0cyByZXNlcnZlZC48 QlI+DQo+ID4gPiArICBDb3B5cmlnaHQgKGMpIDIwMjAsIEJyb2FkY29tLiBBbGwgcmlnaHRzIHJl c2VydmVkLjxCUj4NCj4gPiA+ICsNCj4gPiA+ICsgIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBC U0QtMi1DbGF1c2UtUGF0ZW50DQo+ID4gPiArDQo+ID4gPiArKiovDQo+ID4gPiArI2luY2x1ZGUg PFByb3RvY29sL1NoZWxsRHluYW1pY0NvbW1hbmQuaD4NCj4gPiA+ICsjaW5jbHVkZSAiSHR0cC5o Ig0KPiA+ID4gKw0KPiA+ID4gKy8qKg0KPiA+ID4gKyAgVGhpcyBpcyB0aGUgc2hlbGwgY29tbWFu ZCBoYW5kbGVyIGZ1bmN0aW9uIHBvaW50ZXIgY2FsbGJhY2sgdHlwZS4NCj4gVGhpcw0KPiA+ID4g KyAgZnVuY3Rpb24gaGFuZGxlcyB0aGUgY29tbWFuZCB3aGVuIGl0IGlzIGludm9rZWQgaW4gdGhl IHNoZWxsLg0KPiA+ID4gKw0KPiA+ID4gKyAgQHBhcmFtW2luXSBUaGlzICAgICAgICAgICAgICAg VGhlIGluc3RhbmNlIG9mIHRoZQ0KPiA+ID4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgRUZJX1NIRUxMX0RZTkFNSUNfQ09NTUFORF9QUk9UT0NPTC4NCj4gPiA+ICsgIEBwYXJhbVtp bl0gU3lzdGVtVGFibGUgICAgICAgIFRoZSBwb2ludGVyIHRvIHRoZSBzeXN0ZW0gdGFibGUuDQo+ ID4gPiArICBAcGFyYW1baW5dIFNoZWxsUGFyYW1ldGVycyAgICBUaGUgcGFyYW1ldGVycyBhc3Nv Y2lhdGVkIHdpdGggdGhlDQo+ID4gY29tbWFuZC4NCj4gPiA+ICsgIEBwYXJhbVtpbl0gU2hlbGwg ICAgICAgICAgICAgIFRoZSBpbnN0YW5jZSBvZiB0aGUgc2hlbGwgcHJvdG9jb2wNCj4gdXNlZCBp bg0KPiA+ID4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhlIGNvbnRleHQgb2Yg cHJvY2Vzc2luZyB0aGlzDQo+IGNvbW1hbmQuDQo+ID4gPiArDQo+ID4gPiArICBAcmV0dXJuIEVG SV9TVUNDRVNTICAgICAgICAgICB0aGUgb3BlcmF0aW9uIHdhcyBzdWNlc3NmdWwNCj4gPiA+ICsg IEByZXR1cm4gb3RoZXIgICAgICAgICAgICAgICAgIHRoZSBvcGVyYXRpb24gZmFpbGVkLg0KPiA+ ID4gKyoqLw0KPiA+ID4gK1NIRUxMX1NUQVRVUw0KPiA+ID4gK0VGSUFQSQ0KPiA+ID4gK0h0dHBD b21tYW5kSGFuZGxlciAoDQo+ID4gPiArICBJTiBFRklfU0hFTExfRFlOQU1JQ19DT01NQU5EX1BS T1RPQ09MICAgICpUaGlzLA0KPiA+ID4gKyAgSU4gRUZJX1NZU1RFTV9UQUJMRSAgICAgICAgICAg ICAgICAgICAgICAqU3lzdGVtVGFibGUsDQo+ID4gPiArICBJTiBFRklfU0hFTExfUEFSQU1FVEVS U19QUk9UT0NPTCAgICAgICAgICpTaGVsbFBhcmFtZXRlcnMsDQo+ID4gPiArICBJTiBFRklfU0hF TExfUFJPVE9DT0wgICAgICAgICAgICAgICAgICAgICpTaGVsbA0KPiA+ID4gKyAgKQ0KPiA+ID4g K3sNCj4gPiA+ICsgIGdFZmlTaGVsbFBhcmFtZXRlcnNQcm90b2NvbCA9IFNoZWxsUGFyYW1ldGVy czsNCj4gPiA+ICsgIGdFZmlTaGVsbFByb3RvY29sICAgICAgICAgICA9IFNoZWxsOw0KPiA+ID4g Kw0KPiA+ID4gKyAgcmV0dXJuIFJ1bkh0dHAgKGdJbWFnZUhhbmRsZSwgU3lzdGVtVGFibGUpOw0K PiA+ID4gK30NCj4gPiA+ICsNCj4gPiA+ICsvKioNCj4gPiA+ICsgIFRoaXMgaXMgdGhlIGNvbW1h bmQgaGVscCBoYW5kbGVyIGZ1bmN0aW9uIHBvaW50ZXIgY2FsbGJhY2sgdHlwZS4NCj4gVGhpcw0K PiA+ID4gKyAgZnVuY3Rpb24gaXMgcmVzcG9uc2libGUgZm9yIGRpc3BsYXlpbmcgaGVscCBpbmZv cm1hdGlvbiBmb3IgdGhlDQo+IGFzc29jaWF0ZWQNCj4gPiA+ICsgIGNvbW1hbmQuDQo+ID4gPiAr DQo+ID4gPiArICBAcGFyYW1baW5dIFRoaXMgICAgICAgIFRoZSBpbnN0YW5jZSBvZiB0aGUNCj4g PiA+IEVGSV9TSEVMTF9EWU5BTUlDX0NPTU1BTkRfUFJPVE9DT0wuDQo+ID4gPiArICBAcGFyYW1b aW5dIExhbmd1YWdlICAgIFRoZSBwb2ludGVyIHRvIHRoZSBsYW5ndWFnZSBzdHJpbmcgdG8gdXNl Lg0KPiA+ID4gKw0KPiA+ID4gKyAgQHJldHVybiBzdHJpbmcgICAgICAgICBQb29sIGFsbG9jYXRl ZCBoZWxwIHN0cmluZywgbXVzdCBiZSBmcmVlZCBieQ0KPiBjYWxsZXINCj4gPiA+ICsqKi8NCj4g PiA+ICtDSEFSMTYgKg0KPiA+ID4gK0VGSUFQSQ0KPiA+ID4gK0h0dHBDb21tYW5kR2V0SGVscCAo DQo+ID4gPiArICBJTiBFRklfU0hFTExfRFlOQU1JQ19DT01NQU5EX1BST1RPQ09MICAgICpUaGlz LA0KPiA+ID4gKyAgSU4gQ09OU1QgQ0hBUjggICAgICAgICAgICAgICAgICAgICAgICAgICAqTGFu Z3VhZ2UNCj4gPiA+ICsgICkNCj4gPiA+ICt7DQo+ID4gPiArICByZXR1cm4gSGlpR2V0U3RyaW5n ICgNCj4gPiA+ICsgICAgICAgICAgIG1IdHRwSGlpSGFuZGxlLA0KPiA+ID4gKyAgICAgICAgICAg U1RSSU5HX1RPS0VOIChTVFJfR0VUX0hFTFBfSFRUUCksDQo+ID4gPiArICAgICAgICAgICBMYW5n dWFnZQ0KPiA+ID4gKyAgICAgICAgICAgKTsNCj4gPiA+ICt9DQo+ID4gPiArDQo+ID4gPiArRUZJ X1NIRUxMX0RZTkFNSUNfQ09NTUFORF9QUk9UT0NPTCBtSHR0cER5bmFtaWNDb21tYW5kDQo+ID4g PSB7DQo+ID4gPiArICBIVFRQX0FQUF9OQU1FLA0KPiA+ID4gKyAgSHR0cENvbW1hbmRIYW5kbGVy LA0KPiA+ID4gKyAgSHR0cENvbW1hbmRHZXRIZWxwDQo+ID4gPiArfTsNCj4gPiA+ICsNCj4gPiA+ ICsvKioNCj4gPiA+ICsgIEVudHJ5IHBvaW50IG9mIEh0dHAgRHluYW1pYyBDb21tYW5kLg0KPiA+ ID4gKw0KPiA+ID4gKyAgUHJvZHVjZSB0aGUgRHluYW1pY0NvbW1hbmQgcHJvdG9jb2wgdG8gaGFu ZGxlICJodHRwIiBjb21tYW5kLg0KPiA+ID4gKw0KPiA+ID4gKyAgQHBhcmFtIEltYWdlSGFuZGxl ICAgICAgICAgICAgVGhlIGltYWdlIGhhbmRsZSBvZiB0aGUgcHJvY2Vzcy4NCj4gPiA+ICsgIEBw YXJhbSBTeXN0ZW1UYWJsZSAgICAgICAgICAgIFRoZSBFRkkgU3lzdGVtIFRhYmxlIHBvaW50ZXIu DQo+ID4gPiArDQo+ID4gPiArICBAcmV0dmFsIEVGSV9TVUNDRVNTICAgICAgICAgICBIdHRwIGNv bW1hbmQgaXMgZXhlY3V0ZWQgc3VjZXNzZnVsbHkuDQo+ID4gPiArICBAcmV0dmFsIEVGSV9BQk9S VEVEICAgICAgICAgICBISUkgcGFja2FnZSB3YXMgZmFpbGVkIHRvIGluaXRpYWxpemUuDQo+ID4g PiArICBAcmV0dmFsIG90aGVycyAgICAgICAgICAgICAgICBPdGhlciBlcnJvcnMgd2hlbiBleGVj dXRpbmcgaHR0cA0KPiBjb21tYW5kLg0KPiA+ID4gKyoqLw0KPiA+ID4gK0VGSV9TVEFUVVMNCj4g PiA+ICtFRklBUEkNCj4gPiA+ICtIdHRwQ29tbWFuZEluaXRpYWxpemUgKA0KPiA+ID4gKyAgSU4g RUZJX0hBTkRMRSAgICAgICAgICAgICAgIEltYWdlSGFuZGxlLA0KPiA+ID4gKyAgSU4gRUZJX1NZ U1RFTV9UQUJMRSAgICAgICAgICpTeXN0ZW1UYWJsZQ0KPiA+ID4gKyAgKQ0KPiA+ID4gK3sNCj4g PiA+ICsgIEVGSV9TVEFUVVMgICAgICAgICAgICAgICAgICBTdGF0dXM7DQo+ID4gPiArDQo+ID4g PiArICBtSHR0cEhpaUhhbmRsZSA9IEluaXRpYWxpemVIaWlQYWNrYWdlIChJbWFnZUhhbmRsZSk7 DQo+ID4gPiArICBpZiAobUh0dHBIaWlIYW5kbGUgPT0gTlVMTCkgew0KPiA+ID4gKyAgICByZXR1 cm4gRUZJX0FCT1JURUQ7DQo+ID4gPiArICB9DQo+ID4gPiArDQo+ID4gPiArICBTdGF0dXMgPSBn QlMtPkluc3RhbGxQcm90b2NvbEludGVyZmFjZSAoDQo+ID4gPiArICAgICAgICAgICAgICAgICAg JkltYWdlSGFuZGxlLA0KPiA+ID4gKyAgICAgICAgICAgICAgICAgICZnRWZpU2hlbGxEeW5hbWlj Q29tbWFuZFByb3RvY29sR3VpZCwNCj4gPiA+ICsgICAgICAgICAgICAgICAgICBFRklfTkFUSVZF X0lOVEVSRkFDRSwNCj4gPiA+ICsgICAgICAgICAgICAgICAgICAmbUh0dHBEeW5hbWljQ29tbWFu ZA0KPiA+ID4gKyAgICAgICAgICAgICAgICAgICk7DQo+ID4gPiArICBBU1NFUlRfRUZJX0VSUk9S IChTdGF0dXMpOw0KPiA+ID4gKyAgcmV0dXJuIFN0YXR1czsNCj4gPiA+ICt9DQo+ID4gPiArDQo+ ID4gPiArLyoqDQo+ID4gPiArICBIdHRwIGRyaXZlciB1bmxvYWQgaGFuZGxlci4NCj4gPiA+ICsN Cj4gPiA+ICsgIEBwYXJhbSBJbWFnZUhhbmRsZSAgICAgICAgICAgIFRoZSBpbWFnZSBoYW5kbGUg b2YgdGhlIHByb2Nlc3MuDQo+ID4gPiArDQo+ID4gPiArICBAcmV0dmFsIEVGSV9TVUNDRVNTICAg ICAgICAgICBUaGUgaW1hZ2UgaXMgdW5sb2FkZWQuDQo+ID4gPiArICBAcmV0dmFsIE90aGVycyAg ICAgICAgICAgICAgICBGYWlsZWQgdG8gdW5sb2FkIHRoZSBpbWFnZS4NCj4gPiA+ICsqKi8NCj4g PiA+ICtFRklfU1RBVFVTDQo+ID4gPiArRUZJQVBJDQo+ID4gPiArSHR0cFVubG9hZCAoDQo+ID4g PiArICBJTiBFRklfSEFORExFICAgICAgICAgICAgICAgSW1hZ2VIYW5kbGUNCj4gPiA+ICspDQo+ ID4gPiArew0KPiA+ID4gKyAgRUZJX1NUQVRVUyAgICAgICAgICAgICAgICAgIFN0YXR1czsNCj4g PiA+ICsNCj4gPiA+ICsgIFN0YXR1cyA9IGdCUy0+VW5pbnN0YWxsUHJvdG9jb2xJbnRlcmZhY2Ug KA0KPiA+ID4gKyAgICAgICAgICAgICAgICAgIEltYWdlSGFuZGxlLA0KPiA+ID4gKyAgICAgICAg ICAgICAgICAgICZnRWZpU2hlbGxEeW5hbWljQ29tbWFuZFByb3RvY29sR3VpZCwNCj4gPiA+ICsg ICAgICAgICAgICAgICAgICAmbUh0dHBEeW5hbWljQ29tbWFuZA0KPiA+ID4gKyAgICAgICAgICAg ICAgICAgICk7DQo+ID4gPiArICBpZiAoRUZJX0VSUk9SIChTdGF0dXMpKSB7DQo+ID4gPiArICAg IHJldHVybiBTdGF0dXM7DQo+ID4gPiArICB9DQo+ID4gPiArDQo+ID4gPiArICBIaWlSZW1vdmVQ YWNrYWdlcyAobUh0dHBIaWlIYW5kbGUpOw0KPiA+ID4gKw0KPiA+ID4gKyAgcmV0dXJuIEVGSV9T VUNDRVNTOw0KPiA+ID4gK30NCj4gPiA+IGRpZmYgLS1naXQgYS9TaGVsbFBrZy9EeW5hbWljQ29t bWFuZC9IdHRwRHluYW1pY0NvbW1hbmQvSHR0cC51bmkNCj4gPiA+IGIvU2hlbGxQa2cvRHluYW1p Y0NvbW1hbmQvSHR0cER5bmFtaWNDb21tYW5kL0h0dHAudW5pDQo+ID4gPiBuZXcgZmlsZSBtb2Rl IDEwMDY0NA0KPiA+ID4gaW5kZXggMDAwMDAwMDAwMDAwLi4wMGNmMDVkZWViNWMNCj4gPiA+IC0t LSAvZGV2L251bGwNCj4gPiA+ICsrKyBiL1NoZWxsUGtnL0R5bmFtaWNDb21tYW5kL0h0dHBEeW5h bWljQ29tbWFuZC9IdHRwLnVuaQ0KPiA+ID4gQEAgLTAsMCArMSwxMTcgQEANCj4gPiA+ICsvLyAv KioNCj4gPiA+ICsvLw0KPiA+ID4gKy8vIChDKSBDb3B5cmlnaHQgMjAxNS0yMDE2IEhld2xldHQg UGFja2FyZCBFbnRlcnByaXNlIERldmVsb3BtZW50DQo+ID4gTFA8QlI+DQo+ID4gPiArLy8gQ29w eXJpZ2h0IChjKSAyMDEwIC0gMjAxOCwgSW50ZWwgQ29ycG9yYXRpb24uIEFsbCByaWdodHMgcmVz ZXJ2ZWQuDQo+IDxCUj4NCj4gPiA+ICsvLyBDb3B5cmlnaHQgKGMpIDIwMjAsIEJyb2FkY29tLiBB bGwgcmlnaHRzIHJlc2VydmVkLjxCUj4NCj4gPiA+ICsvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmll cjogQlNELTItQ2xhdXNlLVBhdGVudA0KPiA+ID4gKy8vDQo+ID4gPiArLy8gTW9kdWxlIE5hbWU6 DQo+ID4gPiArLy8NCj4gPiA+ICsvLyBIdHRwLnVuaQ0KPiA+ID4gKy8vDQo+ID4gPiArLy8gQWJz dHJhY3Q6DQo+ID4gPiArLy8NCj4gPiA+ICsvLyBTdHJpbmcgZGVmaW5pdGlvbnMgZm9yIFVFRkkg U2hlbGwgSFRUUCBjb21tYW5kDQo+ID4gPiArLy8NCj4gPiA+ICsvLw0KPiA+ID4gKy8vICoqLw0K PiA+ID4gKw0KPiA+ID4gKy89Iw0KPiA+ID4gKw0KPiA+ID4gKyNsYW5nZGVmICAgZW4tVVMgImVu Z2xpc2giDQo+ID4gPiArDQo+ID4gPiArI3N0cmluZyBTVFJfR0VOX1RPT19NQU5ZICAgICAgICAg ICAjbGFuZ3VhZ2UgZW4tVVMgIiVIJXMlTjogVG9vDQo+ID4gbWFueQ0KPiA+ID4gYXJndW1lbnRz LiBUcnkgaGVscCBodHRwLlxyXG4iDQo+ID4gPiArI3N0cmluZyBTVFJfR0VOX1RPT19GRVcgICAg ICAgICAgICAjbGFuZ3VhZ2UgZW4tVVMgIiVIJXMlTjogVG9vIGZldw0KPiA+ID4gYXJndW1lbnRz LiBUcnkgaGVscCBodHRwLlxyXG4iDQo+ID4gPiArI3N0cmluZyBTVFJfR0VOX1BBUkFNX0lOViAg ICAgICAgICAjbGFuZ3VhZ2UgZW4tVVMgIiVIJXMlTjogSW52YWxpZA0KPiA+ID4gYXJndW1lbnQg LSAnJUglcyVOJy4gVHJ5IGhlbHAgaHR0cC5cclxuIg0KPiA+ID4gKyNzdHJpbmcgU1RSX0dFTl9Q Uk9CTEVNICAgICAgICAgICAgI2xhbmd1YWdlIGVuLVVTICIlSCVzJU46IFVua25vd24NCj4gPiBm bGFnIC0NCj4gPiA+ICclSCVzJU4nLiBUcnkgaGVscCBodHRwLlxyXG4iDQo+ID4gPiArI3N0cmlu ZyBTVFJfR0VOX0ZJTEVfT1BFTl9GQUlMICAgICAjbGFuZ3VhZ2UgZW4tVVMgIiVIJXMlTjogQ2Fu bm90DQo+ID4gb3Blbg0KPiA+ID4gZmlsZSAtICclSCVzJU4nXHJcbiINCj4gPiA+ICsjc3RyaW5n IFNUUl9HRU5fQ1JMRiAgICAgICAgICAgICAgICNsYW5ndWFnZSBlbi1VUyAiXHJcbiINCj4gPiA+ ICsNCj4gPiA+ICsjc3RyaW5nIFNUUl9IVFRQX0VSUl9OT19OSUMgICAgICAgICNsYW5ndWFnZSBl bi1VUyAiTm8gbmV0d29yaw0KPiA+IGludGVyZmFjZQ0KPiA+ID4gY2FyZCBmb3VuZC5cclxuIg0K PiA+ID4gKyNzdHJpbmcgU1RSX0hUVFBfRVJSX05JQ19OQU1FICAgICAgI2xhbmd1YWdlIGVuLVVT ICJGYWlsZWQgdG8gZ2V0IHRoZQ0KPiA+IG5hbWUNCj4gPiA+IG9mIHRoZSBuZXR3b3JrIGludGVy ZmFjZSBjYXJkIG51bWJlciAlZCAtICVyXHJcbiINCj4gPiA+ICsjc3RyaW5nIFNUUl9IVFRQX0VS Ul9PUEVOX1BST1RPQ09MICNsYW5ndWFnZSBlbi1VUyAiVW5hYmxlIHRvDQo+ID4gb3Blbg0KPiA+ ID4gSFRUUCBwcm90b2NvbCBvbiAnJUglcyVOJyAtICVyXHJcbiINCj4gPiA+ICsjc3RyaW5nIFNU Ul9IVFRQX0VSUl9DT05GSUdVUkUgICAgICNsYW5ndWFnZSBlbi1VUyAiVW5hYmxlIHRvDQo+ID4g Y29uZmlndXJlDQo+ID4gPiBIVFRQIHByb3RvY29sIG9uICclSCVzJU4nIC0gJXJcclxuIg0KPiA+ ID4gKyNzdHJpbmcgU1RSX0hUVFBfRVJSX0RPV05MT0FEICAgICAgI2xhbmd1YWdlIGVuLVVTICJV bmFibGUgdG8NCj4gPiBkb3dubG9hZA0KPiA+ID4gdGhlIGZpbGUgJyVIJXMlTicgb24gJyVIJXMl TicgLSAlclxyXG4iDQo+ID4gPiArI3N0cmluZyBTVFJfSFRUUF9FUlJfV1JJVEUgICAgICAgICAj bGFuZ3VhZ2UgZW4tVVMgIlVuYWJsZSB0byB3cml0ZQ0KPiBpbnRvDQo+ID4gZmlsZQ0KPiA+ID4g JyVIJXMlTicgLSAlclxyXG4iDQo+ID4gPiArI3N0cmluZyBTVFJfSFRUUF9FUlJfTklDX05PVF9G T1VORCAjbGFuZ3VhZ2UgZW4tVVMgIk5ldHdvcmsNCj4gPiBJbnRlcmZhY2UNCj4gPiA+IENhcmQg JyVIJXMlTicgbm90IGZvdW5kLlxyXG4iDQo+ID4gPiArI3N0cmluZyBTVFJfSFRUUF9FUlJfU1RB VFVTQ09ERSAgICAjbGFuZ3VhZ2UgZW4tVVMgIlxyJyVIJXMlTicNCj4gPiByZXBvcnRzDQo+ID4g PiAnJXMnIGZvciAnJUglcyVOJyBcclxuIg0KPiA+ID4gKyNzdHJpbmcgU1RSX0hUVFBfRE9XTkxP QURJTkcgICAgICAgI2xhbmd1YWdlIGVuLVVTICJEb3dubG9hZGluZw0KPiA+ID4gJyVIJXMlTidc clxuIg0KPiA+ID4gKw0KPiA+ID4gKyNzdHJpbmcgU1RSX0dFVF9IRUxQX0hUVFAgICAgICAgICAg I2xhbmd1YWdlIGVuLVVTICIiDQo+ID4gPiArIi5USCBodHRwIDAgIkRvd25sb2FkIGEgZmlsZSBm cm9tIEhUVFAgc2VydmVyLiJcclxuIg0KPiA+ID4gKyIuU0ggTkFNRVxyXG4iDQo+ID4gPiArIkRv d25sb2FkIGEgZmlsZSBmcm9tIEhUVFAgc2VydmVyLlxyXG4iDQo+ID4gPiArIi5TSCBTWU5PUFNJ U1xyXG4iDQo+ID4gPiArIiBcclxuIg0KPiA+ID4gKyJIVFRQIFstaSBpbnRlcmZhY2VdIFstbCBw b3J0XSBbLXQgdGltZW91dF0gWy1zIHNpemVdIFstbV0gWy1rXVxyXG4iDQo+ID4gPiArIiAgICAg IDxVUkw+IFtsb2NhbGZpbGVwYXRoXVxyXG4iDQo+ID4gPiArIi5TSCBPUFRJT05TXHJcbiINCj4g PiA+ICsiIFxyXG4iDQo+ID4gPiArIiAgLWkgaW50ZXJmYWNlICAgICAtIFNwZWNpZmllcyBhbiBh ZGFwdGVyIG5hbWUsIGkuZS4sIGV0aDAuXHJcbiINCj4gPiA+ICsiICAtayAgICAgICAgICAgICAg ICAgS2VlcCB0aGUgZG93bmxvYWRlZCBmaWxlIGV2ZW4gaWYgdGhlcmUgd2FzIGFuDQo+IGVycm9y LlxyXG4iDQo+ID4gPiArIiAgICAgICAgICAgICAgICAgICAgIElmIHRoaXMgcGFyYW1ldGVyIGlz IG5vdCB1c2VkLCB0aGUgZmlsZSB3aWxsIGJlDQo+IGRlbGV0ZWQuXHJcbiINCj4gPiA+ICsiICAt bCBwb3J0ICAgICAgICAgIC0gU3BlY2lmaWVzIHRoZSBsb2NhbCBwb3J0IG51bWJlci4gRGVmYXVs dCB2YWx1ZQ0KPiBpcyAwXHJcbiINCj4gPiA+ICsiICAgICAgICAgICAgICAgICAgICAgYW5kIHRo ZSBwb3J0IG51bWJlciBpcyBhdXRvbWF0aWNhbGx5DQo+IGFzc2lnbmVkLlxyXG4iDQo+ID4gPiAr IiAgLW0gICAgICAgICAgICAgICAgIE1lYXN1cmUgYW5kIHJlcG9ydCBkb3dubG9hZCB0aW1lIChp biBzZWNvbmRzKS4NCj4gXHJcbiINCj4gPiA+ICsiICAtcyBzaXplICAgICAgICAgICAgVGhlIHNp emUgb2YgdGhlIGRvd25sb2FkIGJ1ZmZlciBmb3IgYSBjaHVuaywgaW4NCj4gYnl0ZXMuXHJcbiIN Cj4gPiA+ICsiICAgICAgICAgICAgICAgICAgICAgRGVmYXVsdCBpcyAzMksuIE5vdGUgdGhhdCBs YXJnZXIgYnVmZmVyIGRvZXMNCj4gbm90IGltcGx5XHJcbiINCj4gPiA+ICsiICAgICAgICAgICAg ICAgICAgICAgYmV0dGVyIHNwZWVkLlxyXG4iDQo+ID4gPiArIiAgLXQgdGltZW91dCAgICAgICAt IFRoZSBudW1iZXIgb2Ygc2Vjb25kcyB0byB3YWl0IGZvciBjb21wbGV0aW9uDQo+IG9mXHJcbiIN Cj4gPiA+ICsiICAgICAgICAgICAgICAgICAgICAgcmVxdWVzdHMgYW5kIHJlc3BvbnNlcy4gRGVm YXVsdCBpcyAwIHdoaWNoIGlzDQo+ICdhdXRvbWF0aWMnLlxyXG4iDQo+ID4gPiArIiAgJUhVUkwl TlxyXG4iDQo+ID4gPiArIiAgVHdvIHR5cGVzIG9mIHByb3ZpZGluZyBvZiBVUkxzIGFyZSBzdXBw b3J0ZWQ6XHJcbiINCj4gPiA+ICsiICAgIDEuIHRmdHAtbGlrZSwgd2hlcmUgaG9zdCBhbmQgaHR0 cF91cmkgYXJlIHNlcGFyYXRlDQo+IHBhcmFtZXRlcnNcclxuIg0KPiA+ID4gKyIgICAgICAgKGV4 YW1wbGU6IGhvc3QgL2hvc3RfdXJpKSwgYW5kXHJcblwiDQo+ID4gPiArIiAgICAyLiB3Z2V0LWxp a2UsIHdoZXJlIGhvc3QgYW5kIGhvc3RfdXJpIGlzIG9uZSBwYXJhbWV0ZXIuXHJcbiINCj4gPiA+ ICsiICAgICAgIChleGFtcGxlOiBob3N0L2hvc3RfdXJpKVxyXG4iDQo+ID4gPiArIlxyXG4iDQo+ ID4gPiArIiAgICBob3N0ICAgICAgICAgICAgIC0gU3BlY2lmaWVzIEhUVFAgU2VydmVyIGFkZHJl c3MuXHJcbg0KPiA+ID4gKyAgICAgICAgICAgICAgICAgICAgICAgIENhbiBiZSBlaXRoZXIgSVB2 NCBhZGRyZXNzIG9yICdodHRwIChvcg0KPiBodHRwcyk6Ly9hZGRyJ1xyXG4NCj4gPiA+ICsgICAg ICAgICAgICAgICAgICAgICAgICBDYW4gdXNlIGFkZHJlc3NlcyByZXNvbHZhYmxlIGJ5IEROUyBh cyB3ZWxsLg0KPiBcclxuDQo+ID4gPiArICAgICAgICAgICAgICAgICAgICAgICAgUG9ydCBjYW4g YmUgc3BlY2lmaWVkIGFmdGVyICc6JyBpZiBuZWVkZWQuDQo+IFxyXG4NCj4gPiA+ICsgICAgICAg ICAgICAgICAgICAgICAgICBCeSBkZWZhdWx0IHBvcnQgODAgaXMgdXNlZC5cclxuIg0KPiA+ID4g KyIgICAgaHR0cF91cmkgICAgICAgICAtIEhUVFAgc2VydmVyIFVSSSB0byBkb3dubG9hZCB0aGUg ZmlsZS5cclxuIg0KPiA+ID4gKyJcclxuIg0KPiA+ID4gKyIgIGxvY2FsZmlsZXBhdGggICAgLSBM b2NhbCBkZXN0aW5hdGlvbiBmaWxlIHBhdGguXHJcbiINCj4gPiA+ICsiLlNIIERFU0NSSVBUSU9O XHJcbiINCj4gPiA+ICsiIFxyXG4iDQo+ID4gPiArIk5PVEVTOlxyXG4iDQo+ID4gPiArIiAgMS4g VGhlIEhUVFAgY29tbWFuZCBhbGxvd3MgZ2V0aW5nIG9mIHRoZSBmaWxlIHNwZWNpZmllZCBieSBp dHMNCj4gPiAnaHR0cF91cmknXHJcbiINCj4gPiA+ICsiICAgICBwYXRoIGZyb20gdGhlIEhUVFAg c2VydmVyIHNwZWNpZmllZCBieSBpdHMgJ2hvc3QnIElQdjQgYWRkcmVzcy4NCj4gSWYNCj4gPiB0 aGVcclxuIg0KPiA+ID4gKyIgICAgIG9wdGlvbmFsICdsb2NhbGZpbGVwYXRoJyBwYXJhbWV0ZXIg aXMgcHJvdmlkZWQsIHRoZSBkb3dubG9hZGVkDQo+IGZpbGUNCj4gPiBpc1xyXG4iDQo+ID4gPiAr IiAgICAgc3RvcmVkIGxvY2FsbHkgdXNpbmcgdGhlIHByb3ZpZGVkIGZpbGUgcGF0aC4gSWYgdGhl IGxvY2FsIGZpbGUNCj4gcGF0aCBpc1xyXG4iDQo+ID4gPiArIiAgICAgbm90IHNwZWNpZmllZCwg dGhlIGZpbGUgaXMgc3RvcmVkIGluIHRoZSBjdXJyZW50IGRpcmVjdG9yeQ0KPiB1c2luZyB0aGUN Cj4gPiBmaWxlXHJcbiINCj4gPiA+ICsiICAgICBzZXJ2ZXIncyBuYW1lLlxyXG4iDQo+ID4gPiAr IiAgMi4gQmVmb3JlIHVzaW5nIHRoZSBIVFRQIGNvbW1hbmQsIHRoZSBuZXR3b3JrIGludGVyZmFj ZSBpbnRlbmRlZA0KPiB0bw0KPiA+ID4gYmVcclxuIg0KPiA+ID4gKyIgICAgIHVzZWQgdG8gcmV0 cmlldmUgdGhlIGZpbGUgbXVzdCBiZSBjb25maWd1cmVkLiBUaGlzDQo+IGNvbmZpZ3VyYXRpb24g bWF5DQo+ID4gYmVcclxuIg0KPiA+ID4gKyIgICAgIGRvbmUgYnkgbWVhbnMgb2YgdGhlICdpZmNv bmZpZycgY29tbWFuZC5cclxuIg0KPiA+ID4gKyIgIDMuIElmIGEgbmV0d29yayBpbnRlcmZhY2Ug aXMgZGVmaW5lZCB3aXRoIHRoZSAnLWknIG9wdGlvbiB0aGVuDQo+IG9ubHkNCj4gPiB0aGlzXHJc biINCj4gPiA+ICsiICAgICBpbnRlcmZhY2Ugd2lsbCBiZSB1c2VkIHRvIHJldHJpZXZlIHRoZSBy ZW1vdGUgZmlsZS4gT3RoZXJ3aXNlLA0KPiBhbGwNCj4gPiA+IG5ldHdvcmtcclxuIg0KPiA+ID4g KyIgICAgIGludGVyZmFjZXMgYXJlIHRyaWVkIGluIHRoZSBvcmRlciB0aGV5IGhhdmUgYmVlbiBk aXNjb3ZlcmVkDQo+IGR1cmluZw0KPiA+IHRoZVxyXG4iDQo+ID4gPiArIiAgICAgRFhFIHBoYXNl LlxyXG4iDQo+ID4gPiArIi5TSCBFWEFNUExFU1xyXG4iDQo+ID4gPiArIiBcclxuIg0KPiA+ID4g KyJFWEFNUExFUzpcclxuIg0KPiA+ID4gKyIgICogVG8gZ2V0IHRoZSBmaWxlICJkaXIxL2ZpbGUx LmRhdCIgZnJvbSB0aGUgSFRUUCBzZXJ2ZXINCj4gMTkyLjE2OC4xLjEsIHBvcnQNCj4gPiA4MDgw LA0KPiA+ID4gYW5kXHJcbiINCj4gPiA+ICsiICAgIHN0b3JlIGl0IGFzIGZpbGUyLmRhdCBpbiB0 aGUgY3VycmVudCBkaXJlY3RvcnkgKHVzZSB0ZnRwLWxpa2UNCj4gVVJMIGZvcm1hdCkNCj4gPiA6 XHJcbiINCj4gPiA+ICsiICAgIGZzMDpcPiBodHRwIDE5Mi4xNjguMS4xOjgwODAgZGlyMS9maWxl MS5kYXQgZmlsZTIuZGF0XHJcbiINCj4gPiA+ICsiICAqIFRvIGdldCB0aGUgZmlsZSAvaW1hZ2Uu YmluIHZpYSBIVFRQUyBmcm9tIHNlcnZlciAxOTIuMTY4LjEuMSBhdA0KPiBwb3J0IDQ0Mw0KPiA+ ID4gXHJcbiINCj4gPiA+ICsiICAgIChkZWZhdWx0IEhUVFBTIHBvcnQpLCBhbmQgc3RvcmUgaXQg aW4gdGhlIGN1cnJlbnQgZGlyZWN0b3J5Og0KPiBcclxuIg0KPiA+ID4gKyIgICAgZnMwOlw+IGh0 dHAgaHR0cHM6Ly8xOTIuMTY4LjEuMSBpbWFnZS5iaW5cclxuIg0KPiA+ID4gKyIgICAgVG8gZ2V0 IGFuIGluZGV4IGZpbGUgZnJvbSBodHRwOi8vZ29vZ2xlLmNvbSBhbmQgcGxhY2UgaXQgaW50bw0K PiB0aGUgXHJcbiINCj4gPiA+ICsiICAgIGN1cnJlbnQgZGlyZWN0b3J5OlxyXG4iDQo+ID4gPiAr IiAgICBmczA6XD4gaHR0cCBnb29nbGUuY29tIGluZGV4Lmh0bWxcclxuIg0KPiA+ID4gKyIuU0gg UkVUVVJOVkFMVUVTXHJcbiINCj4gPiA+ICsiIFxyXG4iDQo+ID4gPiArIlJFVFVSTiBWQUxVRVM6 XHJcbiINCj4gPiA+ICsiICBTSEVMTF9TVUNDRVNTICAgICAgICAgICAgIFRoZSBhY3Rpb24gd2Fz IGNvbXBsZXRlZCBhcw0KPiByZXF1ZXN0ZWQuXHJcbiINCj4gPiA+ICsiICBTSEVMTF9JTlZBTElE X1BBUkFNRVRFUiAgIE9uZSBvZiB0aGUgcGFzc2VkLWluIHBhcmFtZXRlcnMgd2FzDQo+ID4gPiBp bmNvcnJlY3RseVxyXG4iDQo+ID4gPiArIiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3Jt YXR0ZWQgb3IgaXRzIHZhbHVlIHdhcyBvdXQgb2YNCj4gYm91bmRzLlxyXG4iDQo+ID4gPiArIiAg SFRUUF9FUlJPUiAgICAgICAgICAgICAgICBObyBFRkkgZXJyb3JzLCBidXQgdGhlIHNlcnZlciBy ZXBvcnRlZCBhDQo+IHN0YXR1cw0KPiA+ID4gY29kZVxyXG4iDQo+ID4gPiArIiAgICAgICAgICAg ICAgICAgICAgICAgICAgICB3aGljaCBzaG91bGQgYmUgdHJlYXRlZCBhcyBhbiBlcnJvci4gSWYN Cj4gYW4gZXJyb3IgYm9keQ0KPiA+IHNlbnRcclxuIg0KPiA+ID4gKyIgICAgICAgICAgICAgICAg ICAgICAgICAgICAgYnkgdGhlIHNlcnZlciwgYW5kIC1rIHBhcmFtZXRlciBpcyBvbg0KPiBjb21t YW5kIGxpbmUsDQo+ID4gPiArIiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGUgZmlsZSB3 aWwgYmUgc2F2ZWQgZWl0aGVyIGFzDQo+IGxvY2FsZmlsZXBhdGggZmlsZW5hbWUsXHJcbiINCj4g PiA+ICsiICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yIGFzIGFuIFVSSSBuYW1lIGluIHRo ZSBjdXJyZW50DQo+IGRpcmVjdG9yeS5cclxuIg0KPiA+ID4gKyIgICAgICAgICAgICAgICAgICAg ICAgICAgICAgSWYgJy8nIGlzIGF0IHRoZSBlbmQgb2YgdGhlIFVSTCwgYW5kIG5vDQo+IGxvY2Fm aWxlcGF0aA0KPiA+IGZpbGVuYW1lXHJcbiINCj4gPiA+ICsiICAgICAgICAgICAgICAgICAgICAg ICAgICAgIGlzIGdpdmVuIG9uIHRoZSBjb21tYW5kIGxpbmUsIHRoZSBmaWxlDQo+IHdpbGwgYmUg cmV0cmlldmVkDQo+ID4gYXNcclxuIg0KPiA+ID4gKyIgICAgICAgICAgICAgICAgICAgICAgICAg ICAgaW5kZXguaHRtbC5cclxuIg0KPiA+ID4gLS0NCj4gPiA+IDIuMjYuMi4yNjYuZ2U4NzAzMjVl ZTgNCj4gPiA+DQo+ID4gPg0KPiA+ID4NCj4gDQo+IA0KDQo=