From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from mx0a-002e3701.pphosted.com (mx0a-002e3701.pphosted.com [148.163.147.86]) by mx.groups.io with SMTP id smtpd.web11.9330.1603695191831767869 for ; Sun, 25 Oct 2020 23:53:11 -0700 Authentication-Results: mx.groups.io; dkim=pass header.i=@hpe.com header.s=pps0720 header.b=KaebG/wt; spf=pass (domain: hpe.com, ip: 148.163.147.86, mailfrom: prvs=0568607554=abner.chang@hpe.com) Received: from pps.filterd (m0134421.ppops.net [127.0.0.1]) by mx0b-002e3701.pphosted.com (8.16.0.42/8.16.0.42) with SMTP id 09Q6kJwE026271; Mon, 26 Oct 2020 06:53:11 GMT DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=hpe.com; h=from : to : cc : subject : date : message-id : references : in-reply-to : content-type : content-transfer-encoding : mime-version; s=pps0720; bh=USPHWhlXuwOZLXgB4CHKpui6N72WIt0ZviEAbu2bAaA=; b=KaebG/wten2F3GEMP7gyGiWtJYF2FL9aB1EROK5ac0rPvLzDeFC2AMNnNxdfvT2gRfwZ nI6E8voM42/xORHMwxhNfhBrLwVcBm/jORXsDq9r7YFEbIsoqsf+hotYn9c7S8sPeSXd as4cJa52QHimtjUssgKeX4rjL/aTgD+am9TA0XlCovLvnn4ZlZWL7lQbRw+GZwAu8nfe dmm+eFPi8JUsBBNERBx8uFiSJoCBRRAGfeYUjGVVWy3VQSg2HIQs5AT5QwLl3bpvqkQL eAKHp3vGjQ9YW8ZLcSGGYNhImNDxQPKPOwuh0SPwQno2U9Wur6k+lsHwWvV4T2jN2KHV kA== Received: from g2t2353.austin.hpe.com (g2t2353.austin.hpe.com [15.233.44.26]) by mx0b-002e3701.pphosted.com with ESMTP id 34cwmxexe5-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=NOT); Mon, 26 Oct 2020 06:53:11 +0000 Received: from G4W9121.americas.hpqcorp.net (g4w9121.houston.hp.com [16.210.21.16]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-SHA384 (256/256 bits)) (No client certificate requested) by g2t2353.austin.hpe.com (Postfix) with ESMTPS id 2958384; Mon, 26 Oct 2020 06:53:10 +0000 (UTC) Received: from G2W6310.americas.hpqcorp.net (2002:10c5:4034::10c5:4034) by G4W9121.americas.hpqcorp.net (2002:10d2:1510::10d2:1510) with Microsoft SMTP Server (TLS) id 15.0.1497.2; Mon, 26 Oct 2020 06:53:09 +0000 Received: from NAM10-DM6-obe.outbound.protection.outlook.com (15.241.52.11) by G2W6310.americas.hpqcorp.net (16.197.64.52) with Microsoft SMTP Server (TLS) id 15.0.1497.2 via Frontend Transport; Mon, 26 Oct 2020 06:53:09 +0000 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=FhZ6brn9Wx+azK/XFkUwT2DIA6v+PVp+0uxD5++KTgw2sKQdnAXL+S/U3gD5cwOkqltEuDvQRMipu0TAu0t9dsGwHuzPfNMV81uKuoAmAwAoUyepKtmNn9r54X4iIoR02io++MVVoREuBuo7WBO4FlWBT8HMhOi9azebdkNPmPye3EC2PWxcUZfFW5hDU9Z5J0U8YA1RHfDIc88RnMcCnKbdM+ii3Y0ZxPBL//7JEkvrR6YHusZSF/2KM0oatL+k6DS/OiUBw0VRs8jg4XOVRC0SsvFCMtJobom6JVp5tOsYVzi3QBYC9+HzFPSOs44qErpwwcayZEOQWn6LySi9nQ== 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=USPHWhlXuwOZLXgB4CHKpui6N72WIt0ZviEAbu2bAaA=; b=GtpKxC41hXzqZqudYhPEIfz5QMtg6QU24RucCtVa+Gffrp9jxRx0WhUHk/y2KohPLc2E0otGzidLX2HmJ7S1NZz/UhD1Sf9tLYy7ra6R8Yi3WL5UZuo/rCZs3KpFrw7yBAh1aabzMlZEK5vN53IVeHBTesE76Sm2a5bSXEmTKlV6FqIZmppv4rsjeBP2HsnVvMUkDNLHO6JOws+hiJ01RfRnLF7kxDrMZ0KdSqT3V/VJgcClnjAWz6Pj839wDgjow/mb31XaqRmw5RY7IlDCiHU3f6Z55mvFGN7Vcng9ia0L65lFarAxs0E4WvS8YpakJs1PlZEl1guiHqFsufJ0Ug== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=hpe.com; dmarc=pass action=none header.from=hpe.com; dkim=pass header.d=hpe.com; arc=none Received: from CS1PR8401MB1144.NAMPRD84.PROD.OUTLOOK.COM (2a01:111:e400:7508::16) by CS1PR8401MB0424.NAMPRD84.PROD.OUTLOOK.COM (2a01:111:e400:7510::15) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.3477.21; Mon, 26 Oct 2020 06:53:07 +0000 Received: from CS1PR8401MB1144.NAMPRD84.PROD.OUTLOOK.COM ([fe80::f4a5:2722:be1c:7222]) by CS1PR8401MB1144.NAMPRD84.PROD.OUTLOOK.COM ([fe80::f4a5:2722:be1c:7222%6]) with mapi id 15.20.3477.029; Mon, 26 Oct 2020 06:53:07 +0000 From: "Abner Chang" To: "Rabeda, Maciej" , "devel@edk2.groups.io" CC: Jiaxin Wu , Siyuan Fu , "Wang, Nickle (HPS SW)" Subject: Re: [edk2-devel] [DxeHttpIoLib PATCH V2 1/3] NetworkPkg/Library: Implementation of Http IO Helper Library Thread-Topic: [edk2-devel] [DxeHttpIoLib PATCH V2 1/3] NetworkPkg/Library: Implementation of Http IO Helper Library Thread-Index: AQHWqVkEIIf+aozq3EiZb39ZTth0kqmpI2Ig Date: Mon, 26 Oct 2020 06:53:07 +0000 Message-ID: References: <20201020023848.3015-1-abner.chang@hpe.com> <20201020023848.3015-2-abner.chang@hpe.com> <036e09c1-d1c8-8d8b-44fb-7f252ccf1bad@linux.intel.com> In-Reply-To: <036e09c1-d1c8-8d8b-44fb-7f252ccf1bad@linux.intel.com> Accept-Language: en-US X-MS-Has-Attach: X-MS-TNEF-Correlator: authentication-results: linux.intel.com; dkim=none (message not signed) header.d=none;linux.intel.com; dmarc=none action=none header.from=hpe.com; x-originating-ip: [16.242.247.131] x-ms-publictraffictype: Email x-ms-office365-filtering-ht: Tenant x-ms-office365-filtering-correlation-id: dee4e03d-ca63-409b-9d7d-08d8797bcb89 x-ms-traffictypediagnostic: CS1PR8401MB0424: x-ms-exchange-transport-forked: True x-microsoft-antispam-prvs: x-ms-oob-tlc-oobclassifiers: OLM:6790; x-ms-exchange-senderadcheck: 1 x-microsoft-antispam: BCL:0; x-microsoft-antispam-message-info: nWtSlBd1Jtfi2MNYfFr30xUB/A8CYS+MiuI+gOPA1/+/vnAfcY2reJ/60vctoTuLA+s6a4lW04tLozVIyv/lF3BTGhGWTuy0baYT4i+T4j2oo7eeYk66AypEQL9RfC9s9afZjfx/2zf1pgaokBg/72+9gwRA6m5v1vSaknslLe+Y9QJQCWF86xOM574MIt8ze+nCGhqyt4m2kFyeUniy2ERjUFP/EKpRXHBOOGIhDx7OY+8oh2FZns9tH0nbC01DffZoV6FfSvfRP+z5YR6TlJO5fXsuo3KWL2PQndCQ1jeplCl6ZCel7R0rLnBJ0hOjrYdRUmpQoU80RPJwICb3TYrybqlT3HvVXx0OQdTSfqI4HNg9aRoHUqtE18RhKeZ9cqmAw9Oqy8MtPivAKnSjRg== x-forefront-antispam-report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:CS1PR8401MB1144.NAMPRD84.PROD.OUTLOOK.COM;PTR:;CAT:NONE;SFS:(6029001)(346002)(376002)(396003)(136003)(39860400002)(366004)(66446008)(76116006)(966005)(66946007)(54906003)(33656002)(26005)(6506007)(5660300002)(66556008)(7696005)(19627235002)(316002)(55016002)(66476007)(64756008)(186003)(83380400001)(53546011)(8676002)(52536014)(30864003)(8936002)(478600001)(9686003)(71200400001)(110136005)(86362001)(4326008)(2906002)(559001)(579004);DIR:OUT;SFP:1102; x-ms-exchange-antispam-messagedata: xPK7oOa2I8kTSuMSMgGSrYEqBrzThpEALc4DTYvgNoXZ5beMJct6EA5HjM1NV3e9Er/DXXK83d3xjcKcK7q0rJ7gp1TrQ1Po0q8R5sjiH79R2mNNcUZ9y35z/pP/oPUp0JiulEinO1Fc1G7U6aTB8I+l5pK76jBSSP59OqdGEMI/WlUz62iZ+jbiTyGLwVvM+g6PSQTO/mMRbhetySYG+8XW6xpb9/gEnivGTZggiLynseovD6B/8rqOI8zn7x402qnNFyNZ21ucJ00F0tA9e6U+6c/aD0JEZM7BtuUhryagOwFZQTDIeVFjvAnsp04kkDTjzZ/YPOYM0ioRdDEpRd0cpyK1mbWiqiXAiyYyRiD95LJuyE0QO4w2yS6NtuCtRYJU5Db5dMZmYa7uVlCA6KM/YJbmZA5g0+p1T6tbE0TERWakUZ9XxDk7W5HK8dXJ+IuzXwnnomq6wt0HTFKJDpkQfpVwEEXBtQ3Qy8gzUMMM+5lKDFTJt8SwuZvHbdbI+McTwLc3rh2upmRKpxOePqdf8eHtLe+GxefBm51PRmZJ56ZB4iGClyfaSRbUDhNwH4LLHlqlIbsWu/eYxcg0dXwvalMir9L58JMYXAYCujCHrZ9zu66dDOA8fjl6nrN7efLUmYNfMzYZJl51A0tsGg== X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-AuthSource: CS1PR8401MB1144.NAMPRD84.PROD.OUTLOOK.COM X-MS-Exchange-CrossTenant-Network-Message-Id: dee4e03d-ca63-409b-9d7d-08d8797bcb89 X-MS-Exchange-CrossTenant-originalarrivaltime: 26 Oct 2020 06:53:07.4607 (UTC) X-MS-Exchange-CrossTenant-fromentityheader: Hosted X-MS-Exchange-CrossTenant-id: 105b2061-b669-4b31-92ac-24d304d195dc X-MS-Exchange-CrossTenant-mailboxtype: HOSTED X-MS-Exchange-CrossTenant-userprincipalname: 0ARPg8/nnwUi+trkRxkzmuOJ52Pcc1V2eqL8m/Ios4FDEJQSVvnL1Q/P43ba9eQtlQzJTndUS9kJ9o93n18Mpg== X-MS-Exchange-Transport-CrossTenantHeadersStamped: CS1PR8401MB0424 X-OriginatorOrg: hpe.com X-Proofpoint-UnRewURL: 0 URL was un-rewritten MIME-Version: 1.0 X-HPE-SCL: -1 X-Proofpoint-Virus-Version: vendor=fsecure engine=2.50.10434:6.0.235,18.0.737 definitions=2020-10-26_04:2020-10-26,2020-10-26 signatures=0 X-Proofpoint-Spam-Details: rule=outbound_notspam policy=outbound score=0 adultscore=0 clxscore=1015 priorityscore=1501 suspectscore=0 phishscore=0 malwarescore=0 mlxscore=0 mlxlogscore=999 impostorscore=0 lowpriorityscore=0 bulkscore=0 spamscore=0 classifier=spam adjust=0 reason=mlx scancount=1 engine=8.12.0-2009150000 definitions=main-2010260046 Content-Language: en-US Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 VGhhbmtzIGZvciByZXZpZXdpbmcgdGhpcyBNYWNpZWouDQoNCk1vc3Qgb2YgY29tbWVudHMgYXJl IGFkZHJlc3NlZC4gSSBhbHNvIHN1Ym1pdHRlZCBhIEJaIGZvciB0aGUgd3Jvbmcgc3BlbGxpbmcg b2YgQ0hVTktfVFJOQVNGRVJfKiwgdGhlIHBhdGNoIGlzIGFscmVhZHkgc2VudC4NClYzIG9mIHRo aXMgcGF0Y2ggc2V0IGlzIGFsc28gc2VudCB0byB0aGUgbWFpbGluZyBsaXN0Lg0KDQpPdGhlciBm ZWVkYmFja3MgIGFyZSBpbiBiZWxvdywNCg0KPiAtLS0tLU9yaWdpbmFsIE1lc3NhZ2UtLS0tLQ0K PiBGcm9tOiBSYWJlZGEsIE1hY2llaiBbbWFpbHRvOm1hY2llai5yYWJlZGFAbGludXguaW50ZWwu Y29tXQ0KPiBTZW50OiBTYXR1cmRheSwgT2N0b2JlciAyNCwgMjAyMCAxMjoyNSBBTQ0KPiBUbzog ZGV2ZWxAZWRrMi5ncm91cHMuaW87IENoYW5nLCBBYm5lciAoSFBTIFNXL0ZXIFRlY2hub2xvZ2lz dCkNCj4gPGFibmVyLmNoYW5nQGhwZS5jb20+DQo+IENjOiBKaWF4aW4gV3UgPGppYXhpbi53dUBp bnRlbC5jb20+OyBTaXl1YW4gRnUgPHNpeXVhbi5mdUBpbnRlbC5jb20+Ow0KPiBXYW5nLCBOaWNr bGUgKEhQUyBTVykgPG5pY2tsZS53YW5nQGhwZS5jb20+DQo+IFN1YmplY3Q6IFJlOiBbZWRrMi1k ZXZlbF0gW0R4ZUh0dHBJb0xpYiBQQVRDSCBWMiAxLzNdIE5ldHdvcmtQa2cvTGlicmFyeToNCj4g SW1wbGVtZW50YXRpb24gb2YgSHR0cCBJTyBIZWxwZXIgTGlicmFyeQ0KPiANCj4gSGkgQWJuZXIs DQo+IA0KPiBJIHVuZGVyc3RhbmQgdGhlIGNvbmNlcHQgb2YgbW92aW5nIEhUVFAgSS9PIGxheWVy IG91dHNpZGUgSHR0cEJvb3REeGUgYW5kDQo+IGludG8gYSBzZXBhcmF0ZSBsaWJyYXJ5IGFuZCBJ IGFwcHJvdmUgaXQuDQo+IEhvd2V2ZXIsIHRoZXJlIGFyZSBzb21lIHRoaW5ncyB0aGF0IGhhdmUg dG8gYWRkcmVzc2VkL2ZpeGVkL2V4cGxhaW5lZA0KPiBoZXJlLg0KPiBTZWUgY29tbWVudHMgd2l0 aGluIHRoZSBwYXRjaC4NCj4gDQo+IE9uIDIwLU9jdC0yMCAwNDozOCwgQWJuZXIgQ2hhbmcgd3Jv dGU6DQo+ID4gQWRkIEhUVFAgSU8gaGVscGVyIGxpYnJhcnkgd2hpY2ggY291bGQgYmUgc3VlZCBi eSBIVFRQIGFwcGxpY2F0aW9ucw0KPiA+IHN1Y2ggYXMgSFRUUCBCb290LCBSZWRmaXNoIEhUVFAg UkVTVCBFWCBkcml2ZXIgaW5zdGFuY2UgYW5kIGV0Yy4NCj4gPg0KPiA+IFNpZ25lZC1vZmYtYnk6 IEFibmVyIENoYW5nIDxhYm5lci5jaGFuZ0BocGUuY29tPg0KPiA+DQo+ID4gQ2M6IE1hY2llaiBS YWJlZGEgPG1hY2llai5yYWJlZGFAbGludXguaW50ZWwuY29tPg0KPiA+IENjOiBKaWF4aW4gV3Ug PGppYXhpbi53dUBpbnRlbC5jb20+DQo+ID4gQ2M6IFNpeXVhbiBGdSA8c2l5dWFuLmZ1QGludGVs LmNvbT4NCj4gPiBDYzogTmlja2xlIFdhbmcgPG5pY2tsZS53YW5nQGhwZS5jb20+DQo+ID4gLS0t DQo+ID4gICBOZXR3b3JrUGtnL0luY2x1ZGUvTGlicmFyeS9IdHRwSW9MaWIuaCAgICAgICAgfCAz MjggKysrKysrKw0KPiA+ICAgLi4uL0xpYnJhcnkvRHhlSHR0cElvTGliL0R4ZUh0dHBJb0xpYi5j ICAgICAgIHwgODA5ICsrKysrKysrKysrKysrKysrKw0KPiA+ICAgLi4uL0xpYnJhcnkvRHhlSHR0 cElvTGliL0R4ZUh0dHBJb0xpYi5pbmYgICAgIHwgIDQzICsNCj4gPiAgIC4uLi9MaWJyYXJ5L0R4 ZUh0dHBJb0xpYi9EeGVIdHRwSW9MaWIudW5pICAgICB8ICAxMyArDQo+ID4gICA0IGZpbGVzIGNo YW5nZWQsIDExOTMgaW5zZXJ0aW9ucygrKQ0KPiA+ICAgY3JlYXRlIG1vZGUgMTAwNjQ0IE5ldHdv cmtQa2cvSW5jbHVkZS9MaWJyYXJ5L0h0dHBJb0xpYi5oDQo+ID4gICBjcmVhdGUgbW9kZSAxMDA2 NDQgTmV0d29ya1BrZy9MaWJyYXJ5L0R4ZUh0dHBJb0xpYi9EeGVIdHRwSW9MaWIuYw0KPiA+ICAg Y3JlYXRlIG1vZGUgMTAwNjQ0IE5ldHdvcmtQa2cvTGlicmFyeS9EeGVIdHRwSW9MaWIvRHhlSHR0 cElvTGliLmluZg0KPiA+ICAgY3JlYXRlIG1vZGUgMTAwNjQ0IE5ldHdvcmtQa2cvTGlicmFyeS9E eGVIdHRwSW9MaWIvRHhlSHR0cElvTGliLnVuaQ0KPiA+DQo+ID4gZGlmZiAtLWdpdCBhL05ldHdv cmtQa2cvSW5jbHVkZS9MaWJyYXJ5L0h0dHBJb0xpYi5oDQo+ID4gYi9OZXR3b3JrUGtnL0luY2x1 ZGUvTGlicmFyeS9IdHRwSW9MaWIuaA0KPiA+IG5ldyBmaWxlIG1vZGUgMTAwNjQ0DQo+ID4gaW5k ZXggMDAwMDAwMDAwMC4uOGYzODA0Y2E0Mg0KPiA+IC0tLSAvZGV2L251bGwNCj4gPiArKysgYi9O ZXR3b3JrUGtnL0luY2x1ZGUvTGlicmFyeS9IdHRwSW9MaWIuaA0KPiA+IEBAIC0wLDAgKzEsMzI4 IEBADQo+ID4gKy8qKiBAZmlsZQ0KPiA+ICsgIEh0dHBJb0xpYi5oLg0KPiA+ICsNCj4gPiArKEMp IENvcHlyaWdodCAyMDIwIEhld2xldHQtUGFja2FyZCBEZXZlbG9wbWVudCBDb21wYW55LCBMLlAu PEJSPg0KPiA+ICtTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQlNELTItQ2xhdXNlLVBhdGVudA0K PiA+ICsNCj4gPiArKiovDQo+ID4gKw0KPiA+ICsjaWZuZGVmIEhUVFBfSU9fTElCX0hfDQo+ID4g KyNkZWZpbmUgSFRUUF9JT19MSUJfSF8NCj4gPiArDQo+ID4gKyNpbmNsdWRlIDxJbmR1c3RyeVN0 YW5kYXJkL0h0dHAxMS5oPg0KPiA+ICsNCj4gPiArI2luY2x1ZGUgPExpYnJhcnkvRHBjTGliLmg+ DQo+ID4gKyNpbmNsdWRlIDxMaWJyYXJ5L0h0dHBMaWIuaD4NCj4gPiArI2luY2x1ZGUgPExpYnJh cnkvTmV0TGliLmg+DQo+ID4gKw0KPiA+ICsjZGVmaW5lIEhUVFBfSU9fTUFYX1NFTkRfUEFZTE9B RCAgICAgICAgICAgICAgICAgICAgMTAyNA0KPiA+ICsjZGVmaW5lIEhUVFBfSU9fQ0hVTktfU0la RV9TVFJJTkdfTEVOICAgICAgICAgICAgICAgNTANCj4gPiArI2RlZmluZSBIVFRQX0lPX0NIVU5L RURfVFJBTlNGRVJfQ09ESU5HX0RBVEFfTEVOR1RIIDI1Ng0KPiA+ICsNCj4gPiArLy8vDQo+ID4g Ky8vLyBIVFRQX0lPX0NBTExCQUNLX0VWRU5UDQo+ID4gKy8vLw0KPiA+ICt0eXBlZGVmIGVudW0g ew0KPiA+ICsgIEh0dHBJb1JlcXVlc3QsDQo+ID4gKyAgSHR0cElvUmVzcG9uc2UNCj4gPiArfSBI VFRQX0lPX0NBTExCQUNLX0VWRU5UOw0KPiA+ICsNCj4gPiArLyoqDQo+ID4gKyAgSHR0cElvIENh bGxiYWNrIGZ1bmN0aW9uIHdoaWNoIHdpbGwgYmUgaW52b2tlZCB3aGVuIHNwZWNpZmllZA0KPiBI VFRQX0lPX0NBTExCQUNLX0VWRU5UIGhhcHBlbmVkLg0KPiA+ICsNCj4gPiArICBAcGFyYW1baW5d ICAgIEV2ZW50VHlwZSAgICAgIEluZGljYXRlIHRoZSBFdmVudCB0eXBlIHRoYXQgb2NjdXJzIGlu IHRoZQ0KPiBjdXJyZW50IGNhbGxiYWNrLg0KPiA+ICsgIEBwYXJhbVtpbl0gICAgTWVzc2FnZSAg ICAgICAgSFRUUCBtZXNzYWdlIHdoaWNoIHdpbGwgYmUgc2VuZCB0bywgb3IganVzdA0KPiByZWNl aXZlZCBmcm9tIEhUVFAgc2VydmVyLg0KPiA+ICsgIEBwYXJhbVtpbl0gICAgQ29udGV4dCAgICAg ICAgVGhlIENhbGxiYWNrIENvbnRleHQgcG9pbnRlci4NCj4gPiArDQo+ID4gKyAgQHJldHZhbCBF RklfU1VDQ0VTUyAgICAgICAgICBUZWxscyB0aGUgSHR0cElvIHRvIGNvbnRpbnVlIHRoZSBIVFRQ IHByb2Nlc3MuDQo+ID4gKyAgQHJldHZhbCBPdGhlcnMgICAgICAgICAgICAgICBUZWxscyB0aGUg SHR0cElvIHRvIGFib3J0IHRoZSBjdXJyZW50IEhUVFAgcHJvY2Vzcy4NCj4gPiArKiovDQo+ID4g K3R5cGVkZWYNCj4gPiArRUZJX1NUQVRVUw0KPiA+ICsoRUZJQVBJICogSFRUUF9JT19DQUxMQkFD SykgKA0KPiA+ICsgIElOICBIVFRQX0lPX0NBTExCQUNLX0VWRU5UICAgIEV2ZW50VHlwZSwNCj4g PiArICBJTiAgRUZJX0hUVFBfTUVTU0FHRSAgICAgICAgICAqTWVzc2FnZSwNCj4gPiArICBJTiAg Vk9JRCAgICAgICAgICAgICAgICAgICAgICAqQ29udGV4dA0KPiA+ICsgICk7DQo+ID4gKw0KPiA+ ICsvLy8NCj4gPiArLy8vIEEgd3JhcHBlciBzdHJ1Y3R1cmUgdG8gaG9sZCB0aGUgcmVjZWl2ZWQg SFRUUCByZXNwb25zZSBkYXRhLg0KPiA+ICsvLy8NCj4gPiArdHlwZWRlZiBzdHJ1Y3Qgew0KPiA+ ICsgIEVGSV9IVFRQX1JFU1BPTlNFX0RBVEEgICAgICBSZXNwb25zZTsNCj4gPiArICBVSU5UTiAg ICAgICAgICAgICAgICAgICAgICAgSGVhZGVyQ291bnQ7DQo+ID4gKyAgRUZJX0hUVFBfSEVBREVS ICAgICAgICAgICAgICpIZWFkZXJzOw0KPiA+ICsgIFVJTlROICAgICAgICAgICAgICAgICAgICAg ICBCb2R5TGVuZ3RoOw0KPiA+ICsgIENIQVI4ICAgICAgICAgICAgICAgICAgICAgICAqQm9keTsN Cj4gPiArICBFRklfU1RBVFVTICAgICAgICAgICAgICAgICAgU3RhdHVzOw0KPiA+ICt9IEhUVFBf SU9fUkVTUE9OU0VfREFUQTsNCj4gPiArDQo+ID4gKy8vLw0KPiA+ICsvLy8gSFRUUF9JTyBjb25m aWd1cmF0aW9uIGRhdGEgZm9yIElQdjQgLy8vIHR5cGVkZWYgc3RydWN0IHsNCj4gPiArICBFRklf SFRUUF9WRVJTSU9OICAgICAgICAgIEh0dHBWZXJzaW9uOw0KPiA+ICsgIFVJTlQzMiAgICAgICAg ICAgICAgICAgICAgUmVxdWVzdFRpbWVPdXQ7ICAvLy88IEluIG1pbGxpc2Vjb25kcy4NCj4gPiAr ICBVSU5UMzIgICAgICAgICAgICAgICAgICAgIFJlc3BvbnNlVGltZU91dDsgLy8vPCBJbiBtaWxs aXNlY29uZHMuDQo+ID4gKyAgQk9PTEVBTiAgICAgICAgICAgICAgICAgICBVc2VEZWZhdWx0QWRk cmVzczsNCj4gPiArICBFRklfSVB2NF9BRERSRVNTICAgICAgICAgIExvY2FsSXA7DQo+ID4gKyAg RUZJX0lQdjRfQUREUkVTUyAgICAgICAgICBTdWJuZXRNYXNrOw0KPiA+ICsgIFVJTlQxNiAgICAg ICAgICAgICAgICAgICAgTG9jYWxQb3J0Ow0KPiA+ICt9IEhUVFA0X0lPX0NPTkZJR19EQVRBOw0K PiA+ICsNCj4gPiArLy8vDQo+ID4gKy8vLyBIVFRQX0lPIGNvbmZpZ3VyYXRpb24gZGF0YSBmb3Ig SVB2NiAvLy8gdHlwZWRlZiBzdHJ1Y3Qgew0KPiA+ICsgIEVGSV9IVFRQX1ZFUlNJT04gICAgICAg ICAgSHR0cFZlcnNpb247DQo+ID4gKyAgVUlOVDMyICAgICAgICAgICAgICAgICAgICBSZXF1ZXN0 VGltZU91dDsgIC8vLzwgSW4gbWlsbGlzZWNvbmRzLg0KPiA+ICsgIEJPT0xFQU4gICAgICAgICAg ICAgICAgICAgVXNlRGVmYXVsdEFkZHJlc3M7DQo+ID4gKyAgRUZJX0lQdjZfQUREUkVTUyAgICAg ICAgICBMb2NhbElwOw0KPiA+ICsgIFVJTlQxNiAgICAgICAgICAgICAgICAgICAgTG9jYWxQb3J0 Ow0KPiA+ICt9IEhUVFA2X0lPX0NPTkZJR19EQVRBOw0KPiA+ICsNCj4gPiArLy8vDQo+ID4gKy8v LyBIVFRQX0lPIGNvbmZpZ3VyYXRpb24NCj4gPiArLy8vDQo+ID4gK3R5cGVkZWYgdW5pb24gew0K PiA+ICsgIEhUVFA0X0lPX0NPTkZJR19EQVRBICAgICAgIENvbmZpZzQ7DQo+ID4gKyAgSFRUUDZf SU9fQ09ORklHX0RBVEEgICAgICAgQ29uZmlnNjsNCj4gPiArfSBIVFRQX0lPX0NPTkZJR19EQVRB Ow0KPiA+ICsNCj4gPiArLy8vDQo+ID4gKy8vLyBIVFRQX0lPIHdyYXBwZXIgb2YgdGhlIEVGSSBI VFRQIHNlcnZpY2UuDQo+ID4gKy8vLw0KPiA+ICt0eXBlZGVmIHN0cnVjdCB7DQo+ID4gKyAgVUlO VDggICAgICAgICAgICAgICAgICAgICBJcFZlcnNpb247DQo+ID4gKyAgRUZJX0hBTkRMRSAgICAg ICAgICAgICAgICBJbWFnZTsNCj4gPiArICBFRklfSEFORExFICAgICAgICAgICAgICAgIENvbnRy b2xsZXI7DQo+ID4gKyAgRUZJX0hBTkRMRSAgICAgICAgICAgICAgICBIYW5kbGU7DQo+ID4gKw0K PiA+ICsgIEVGSV9IVFRQX1BST1RPQ09MICAgICAgICAgKkh0dHA7DQo+ID4gKw0KPiA+ICsgIEhU VFBfSU9fQ0FMTEJBQ0sgICAgICAgICAgQ2FsbGJhY2s7DQo+ID4gKyAgVk9JRCAgICAgICAgICAg ICAgICAgICAgICAqQ29udGV4dDsNCj4gPiArDQo+ID4gKyAgRUZJX0hUVFBfVE9LRU4gICAgICAg ICAgICBSZXFUb2tlbjsNCj4gPiArICBFRklfSFRUUF9NRVNTQUdFICAgICAgICAgIFJlcU1lc3Nh Z2U7DQo+ID4gKyAgRUZJX0hUVFBfVE9LRU4gICAgICAgICAgICBSc3BUb2tlbjsNCj4gPiArICBF RklfSFRUUF9NRVNTQUdFICAgICAgICAgIFJzcE1lc3NhZ2U7DQo+ID4gKw0KPiA+ICsgIEJPT0xF QU4gICAgICAgICAgICAgICAgICAgSXNUeERvbmU7DQo+ID4gKyAgQk9PTEVBTiAgICAgICAgICAg ICAgICAgICBJc1J4RG9uZTsNCj4gPiArDQo+ID4gKyAgRUZJX0VWRU5UICAgICAgICAgICAgICAg ICBUaW1lb3V0RXZlbnQ7DQo+ID4gKyAgVUlOVDMyICAgICAgICAgICAgICAgICAgICBUaW1lb3V0 Ow0KPiA+ICt9IEhUVFBfSU87DQo+ID4gKw0KPiA+ICsvLy8NCj4gPiArLy8vIFByb2Nlc3MgY29k ZSBvZiBIVFRQIGNodW5rIHRyYW5zZmVyLg0KPiA+ICsvLy8NCj4gPiArdHlwZWRlZiBlbnVtICB7 DQo+ID4gKyAgSHR0cElvU2VuZENodW5rTm9uZSA9IDAsDQo+ID4gKyAgSHR0cElvU2VuZENodW5r SGVhZGVyWmVyb0NvbnRlbnQsDQo+ID4gKyAgSHR0cElvU2VuZENodW5rQ29udGVudCwNCj4gPiAr ICBIdHRwSW9TZW5kQ2h1bmtFbmRDaHVuaywNCj4gPiArICBIdHRwSW9TZW5kQ2h1bmtGaW5pc2gN Cj4gPiArfSBIVFRQX0lPX1NFTkRfQ0hVTktfUFJPQ0VTUzsNCj4gPiArDQo+ID4gKy8vLw0KPiA+ ICsvLy8gUHJvY2VzcyBjb2RlIG9mIEhUVFAgbm9uIGNodW5rIHRyYW5zZmVyLg0KPiA+ICsvLy8N Cj4gPiArdHlwZWRlZiBlbnVtICB7DQo+ID4gKyAgSHR0cElvU2VuZE5vbkNodW5rTm9uZSA9IDAs DQo+ID4gKyAgSHR0cElvU2VuZE5vbkNodW5rSGVhZGVyWmVyb0NvbnRlbnQsDQo+ID4gKyAgSHR0 cElvU2VuZE5vbkNodW5rQ29udGVudCwNCj4gPiArICBIdHRwSW9TZW5kTm9uQ2h1bmtGaW5pc2gN Cj4gPiArfSBIVFRQX0lPX1NFTkRfTk9OX0NIVU5LX1BST0NFU1M7DQo+ID4gKw0KPiA+ICsvLy8N Cj4gPiArLy8vIENodW5rIGxpbmtzIGZvciBIVFRQIGNodW5rZWQgdHJhbnNmZXIgY29kaW5nLg0K PiA+ICsvLy8NCj4gPiArdHlwZWRlZiBzdHJ1Y3Qgew0KPiA+ICsgIExJU1RfRU5UUlkgIE5leHRD aHVuazsNCj4gPiArICBVSU5UTiAgICAgICBMZW5ndGg7DQo+ID4gKyAgQ0hBUjggICAgICAgKkRh dGE7DQo+ID4gK30gSFRUUF9JT19DSFVOS1M7DQo+ID4gKw0KPiA+ICsvKioNCj4gPiArICBOb3Rp ZnkgdGhlIGNhbGxiYWNrIGZ1bmN0aW9uIHdoZW4gYW4gZXZlbnQgaXMgdHJpZ2dlcmVkLg0KPiA+ ICsNCj4gPiArICBAcGFyYW1baW5dICBDb250ZXh0ICAgICAgICAgVGhlIG9wYXF1ZSBwYXJhbWV0 ZXIgdG8gdGhlIGZ1bmN0aW9uLg0KPiA+ICsNCj4gPiArKiovDQo+ID4gK1ZPSUQNCj4gPiArRUZJ QVBJDQo+ID4gK0h0dHBJb05vdGlmeURwYyAoDQo+ID4gKyAgSU4gVk9JRCAgICAgICAgICAgICAg ICAqQ29udGV4dA0KPiA+ICsgICk7DQo+ID4gKw0KPiA+ICsvKioNCj4gPiArICBSZXF1ZXN0IEh0 dHBJb05vdGlmeURwYyBhcyBhIERQQyBhdCBUUExfQ0FMTEJBQ0suDQo+ID4gKw0KPiA+ICsgIEBw YXJhbVtpbl0gIEV2ZW50ICAgICAgICAgICAgICAgICBUaGUgZXZlbnQgc2lnbmFsZWQuDQo+ID4g KyAgQHBhcmFtW2luXSAgQ29udGV4dCAgICAgICAgICAgICAgIFRoZSBvcGFxdWUgcGFyYW1ldGVy IHRvIHRoZSBmdW5jdGlvbi4NCj4gPiArDQo+ID4gKyoqLw0KPiA+ICtWT0lEDQo+ID4gK0VGSUFQ SQ0KPiA+ICtIdHRwSW9Ob3RpZnkgKA0KPiA+ICsgIElOIEVGSV9FVkVOVCAgICAgICAgICAgICAg RXZlbnQsDQo+ID4gKyAgSU4gVk9JRCAgICAgICAgICAgICAgICAgICAqQ29udGV4dA0KPiA+ICsg ICk7DQo+ID4gKw0KPiA+ICsvKioNCj4gPiArICBEZXN0cm95IHRoZSBIVFRQX0lPIGFuZCByZWxl YXNlIHRoZSByZXNvdXJjZXMuDQo+ID4gKw0KPiA+ICsgIEBwYXJhbVtpbl0gIEh0dHBJbyAgICAg ICAgICBUaGUgSFRUUF9JTyB3aGljaCB3cmFwcyB0aGUgSFRUUCBzZXJ2aWNlIHRvIGJlDQo+IGRl c3Ryb3llZC4NCj4gPiArDQo+ID4gKyoqLw0KPiA+ICtWT0lEDQo+ID4gK0h0dHBJb0Rlc3Ryb3lJ byAoDQo+ID4gKyAgSU4gSFRUUF9JTyAgICAgICAgICAgICAgICAqSHR0cElvDQo+ID4gKyAgKTsN Cj4gPiArDQo+ID4gKy8qKg0KPiA+ICsgIENyZWF0ZSBhIEhUVFBfSU8gdG8gYWNjZXNzIHRoZSBI VFRQIHNlcnZpY2UuIEl0IHdpbGwgY3JlYXRlIGFuZA0KPiA+ICtjb25maWd1cmUNCj4gPiArICBh IEhUVFAgY2hpbGQgaGFuZGxlLg0KPiA+ICsNCj4gPiArICBAcGFyYW1baW5dICBJbWFnZSAgICAg ICAgICBUaGUgaGFuZGxlIG9mIHRoZSBkcml2ZXIgaW1hZ2UuDQo+ID4gKyAgQHBhcmFtW2luXSAg Q29udHJvbGxlciAgICAgVGhlIGhhbmRsZSBvZiB0aGUgY29udHJvbGxlci4NCj4gPiArICBAcGFy YW1baW5dICBJcFZlcnNpb24gICAgICBJUF9WRVJTSU9OXzQgb3IgSVBfVkVSU0lPTl82Lg0KPiA+ ICsgIEBwYXJhbVtpbl0gIENvbmZpZ0RhdGEgICAgIFRoZSBIVFRQX0lPIGNvbmZpZ3VyYXRpb24g ZGF0YS4NCj4gPiArICBAcGFyYW1baW5dICBDYWxsYmFjayAgICAgICBDYWxsYmFjayBmdW5jdGlv biB3aGljaCB3aWxsIGJlIGludm9rZWQgd2hlbg0KPiBzcGVjaWZpZWQNCj4gPiArICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBIVFRQX0lPX0NBTExCQUNLX0VWRU5UIGhhcHBlbmVkLg0KPiA+ ICsgIEBwYXJhbVtpbl0gIENvbnRleHQgICAgICAgIFRoZSBDb250ZXh0IGRhdGEgd2hpY2ggd2ls bCBiZSBwYXNzZWQgdG8gdGhlDQo+IENhbGxiYWNrIGZ1bmN0aW9uLg0KPiA+ICsgIEBwYXJhbVtv dXRdIEh0dHBJbyAgICAgICAgIFRoZSBIVFRQX0lPLg0KPiA+ICsNCj4gPiArICBAcmV0dmFsIEVG SV9TVUNDRVNTICAgICAgICAgICAgVGhlIEhUVFBfSU8gaXMgY3JlYXRlZCBhbmQgY29uZmlndXJl ZC4NCj4gPiArICBAcmV0dmFsIEVGSV9JTlZBTElEX1BBUkFNRVRFUiAgT25lIG9yIG1vcmUgcGFy YW1ldGVycyBhcmUgaW52YWxpZC4NCj4gPiArICBAcmV0dmFsIEVGSV9VTlNVUFBPUlRFRCAgICAg ICAgT25lIG9yIG1vcmUgb2YgdGhlIGNvbnRyb2wgb3B0aW9ucyBhcmUNCj4gbm90DQo+ID4gKyAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN1cHBvcnRlZCBpbiB0aGUgaW1wbGVtZW50 YXRpb24uDQo+ID4gKyAgQHJldHZhbCBFRklfT1VUX09GX1JFU09VUkNFUyAgIEZhaWxlZCB0byBh bGxvY2F0ZSBtZW1vcnkuDQo+ID4gKyAgQHJldHZhbCBPdGhlcnMgICAgICAgICAgICAgICAgIEZh aWxlZCB0byBjcmVhdGUgdGhlIEhUVFBfSU8gb3IgY29uZmlndXJlIGl0Lg0KPiA+ICsNCj4gPiAr KiovDQo+ID4gK0VGSV9TVEFUVVMNCj4gPiArSHR0cElvQ3JlYXRlSW8gKA0KPiA+ICsgIElOIEVG SV9IQU5ETEUgICAgICAgICAgICAgSW1hZ2UsDQo+ID4gKyAgSU4gRUZJX0hBTkRMRSAgICAgICAg ICAgICBDb250cm9sbGVyLA0KPiA+ICsgIElOIFVJTlQ4ICAgICAgICAgICAgICAgICAgSXBWZXJz aW9uLA0KPiA+ICsgIElOIEhUVFBfSU9fQ09ORklHX0RBVEEgICAgKkNvbmZpZ0RhdGEsDQo+ID4g KyAgSU4gSFRUUF9JT19DQUxMQkFDSyAgICAgICBDYWxsYmFjaywNCj4gPiArICBJTiBWT0lEICAg ICAgICAgICAgICAgICAgICpDb250ZXh0LA0KPiA+ICsgIE9VVCBIVFRQX0lPICAgICAgICAgICAg ICAgKkh0dHBJbw0KPiA+ICsgICk7DQo+ID4gKw0KPiA+ICsvKioNCj4gPiArICBTeW5jaHJvbm91 c2x5IHNlbmQgYSBIVFRQIFJFUVVFU1QgbWVzc2FnZSB0byB0aGUgc2VydmVyLg0KPiA+ICsNCj4g PiArICBAcGFyYW1baW5dICAgSHR0cElvICAgICAgICAgICBUaGUgSHR0cElvIHdyYXBwaW5nIHRo ZSBIVFRQIHNlcnZpY2UuDQo+ID4gKyAgQHBhcmFtW2luXSAgIFJlcXVlc3QgICAgICAgICAgQSBw b2ludGVyIHRvIHN0b3JhZ2Ugc3VjaCBkYXRhIGFzIFVSTCBhbmQNCj4gSFRUUCBtZXRob2QuDQo+ ID4gKyAgQHBhcmFtW2luXSAgIEhlYWRlckNvdW50ICAgICAgTnVtYmVyIG9mIEhUVFAgaGVhZGVy IHN0cnVjdHVyZXMgaW4NCj4gSGVhZGVycyBsaXN0Lg0KPiA+ICsgIEBwYXJhbVtpbl0gICBIZWFk ZXJzICAgICAgICAgIEFycmF5IGNvbnRhaW5pbmcgbGlzdCBvZiBIVFRQIGhlYWRlcnMuDQo+ID4g KyAgQHBhcmFtW2luXSAgIEJvZHlMZW5ndGggICAgICAgTGVuZ3RoIGluIGJ5dGVzIG9mIHRoZSBI VFRQIGJvZHkuDQo+ID4gKyAgQHBhcmFtW2luXSAgIEJvZHkgICAgICAgICAgICAgQm9keSBhc3Nv Y2lhdGVkIHdpdGggdGhlIEhUVFAgcmVxdWVzdC4NCj4gPiArDQo+ID4gKyAgQHJldHZhbCBFRklf U1VDQ0VTUyAgICAgICAgICAgIFRoZSBIVFRQIHJlcXVlc3QgaXMgdHJhbnNtaXR0ZWQuDQo+ID4g KyAgQHJldHZhbCBFRklfSU5WQUxJRF9QQVJBTUVURVIgIE9uZSBvciBtb3JlIHBhcmFtZXRlcnMg YXJlIGludmFsaWQuDQo+ID4gKyAgQHJldHZhbCBFRklfT1VUX09GX1JFU09VUkNFUyAgIEZhaWxl ZCB0byBhbGxvY2F0ZSBtZW1vcnkuDQo+ID4gKyAgQHJldHZhbCBFRklfREVWSUNFX0VSUk9SICAg ICAgIEFuIHVuZXhwZWN0ZWQgbmV0d29yayBvciBzeXN0ZW0gZXJyb3INCj4gb2NjdXJyZWQuDQo+ ID4gKyAgQHJldHZhbCBPdGhlcnMgICAgICAgICAgICAgICAgIE90aGVyIGVycm9ycyBhcyBpbmRp Y2F0ZWQuDQo+ID4gKw0KPiA+ICsqKi8NCj4gPiArRUZJX1NUQVRVUw0KPiA+ICtIdHRwSW9TZW5k UmVxdWVzdCAoDQo+ID4gKyAgSU4gIEhUVFBfSU8gICAgICAgICAgICAgICAgKkh0dHBJbywNCj4g PiArICBJTiAgRUZJX0hUVFBfUkVRVUVTVF9EQVRBICAqUmVxdWVzdCwgICAgICBPUFRJT05BTA0K PiA+ICsgIElOICBVSU5UTiAgICAgICAgICAgICAgICAgIEhlYWRlckNvdW50LA0KPiA+ICsgIElO ICBFRklfSFRUUF9IRUFERVIgICAgICAgICpIZWFkZXJzLCAgICAgIE9QVElPTkFMDQo+ID4gKyAg SU4gIFVJTlROICAgICAgICAgICAgICAgICAgQm9keUxlbmd0aCwNCj4gPiArICBJTiAgVk9JRCAg ICAgICAgICAgICAgICAgICAqQm9keSAgICAgICAgICBPUFRJT05BTA0KPiA+ICsgICk7DQo+ID4g Kw0KPiA+ICsvKioNCj4gPiArICBTeW5jaHJvbm91c2x5IHJlY2VpdmUgYSBIVFRQIFJFU1BPTlNF IG1lc3NhZ2UgZnJvbSB0aGUgc2VydmVyLg0KPiA+ICsNCj4gPiArICBAcGFyYW1baW5dICAgSHR0 cElvICAgICAgICAgICBUaGUgSHR0cElvIHdyYXBwaW5nIHRoZSBIVFRQIHNlcnZpY2UuDQo+ID4g KyAgQHBhcmFtW2luXSAgIFJlY3ZNc2dIZWFkZXIgICAgVFJVRSB0byByZWNlaXZlIGEgbmV3IEhU VFAgcmVzcG9uc2UNCj4gKGZyb20gbWVzc2FnZSBoZWFkZXIpLg0KPiA+ICsgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIEZBTFNFIHRvIGNvbnRpbnVlIHJlY2VpdmUgdGhlIHByZXZpb3Vz IHJlc3BvbnNlIG1lc3NhZ2UuDQo+ID4gKyAgQHBhcmFtW291dF0gIFJlc3BvbnNlRGF0YSAgICAg UG9pbnQgdG8gYSB3cmFwcGVyIG9mIHRoZSByZWNlaXZlZA0KPiByZXNwb25zZSBkYXRhLg0KPiA+ ICsNCj4gPiArICBAcmV0dmFsIEVGSV9TVUNDRVNTICAgICAgICAgICAgVGhlIEhUVFAgcmVzcG9u c2UgaXMgcmVjZWl2ZWQuDQo+ID4gKyAgQHJldHZhbCBFRklfSU5WQUxJRF9QQVJBTUVURVIgIE9u ZSBvciBtb3JlIHBhcmFtZXRlcnMgYXJlIGludmFsaWQuDQo+ID4gKyAgQHJldHZhbCBFRklfT1VU X09GX1JFU09VUkNFUyAgIEZhaWxlZCB0byBhbGxvY2F0ZSBtZW1vcnkuDQo+ID4gKyAgQHJldHZh bCBFRklfREVWSUNFX0VSUk9SICAgICAgIEFuIHVuZXhwZWN0ZWQgbmV0d29yayBvciBzeXN0ZW0g ZXJyb3INCj4gb2NjdXJyZWQuDQo+ID4gKyAgQHJldHZhbCBPdGhlcnMgICAgICAgICAgICAgICAg IE90aGVyIGVycm9ycyBhcyBpbmRpY2F0ZWQuDQo+ID4gKw0KPiA+ICsqKi8NCj4gPiArRUZJX1NU QVRVUw0KPiA+ICtIdHRwSW9SZWN2UmVzcG9uc2UgKA0KPiA+ICsgIElOICAgICAgSFRUUF9JTyAg ICAgICAgICAgICAgICAgICpIdHRwSW8sDQo+ID4gKyAgSU4gICAgICBCT09MRUFOICAgICAgICAg ICAgICAgICAgUmVjdk1zZ0hlYWRlciwNCj4gPiArICBPVVQgICAgIEhUVFBfSU9fUkVTUE9OU0Vf REFUQSAgICAqUmVzcG9uc2VEYXRhDQo+ID4gKyAgKTsNCj4gPiArDQo+ID4gKy8qKg0KPiA+ICsg IEdldCB0aGUgdmFsdWUgb2YgdGhlIGNvbnRlbnQgbGVuZ3RoIGlmIHRoZXJlIGlzIGEgIkNvbnRl bnQtTGVuZ3RoIiBoZWFkZXIuDQo+ID4gKw0KPiA+ICsgIEBwYXJhbVtpbl0gICAgSGVhZGVyQ291 bnQgICAgICAgIE51bWJlciBvZiBIVFRQIGhlYWRlciBzdHJ1Y3R1cmVzIGluDQo+IEhlYWRlcnMu DQo+ID4gKyAgQHBhcmFtW2luXSAgICBIZWFkZXJzICAgICAgICAgICAgQXJyYXkgY29udGFpbmlu ZyBsaXN0IG9mIEhUVFAgaGVhZGVycy4NCj4gPiArICBAcGFyYW1bb3V0XSAgIENvbnRlbnRMZW5n dGggICAgICBQb2ludGVyIHRvIHNhdmUgdGhlIHZhbHVlIG9mIHRoZSBjb250ZW50DQo+IGxlbmd0 aC4NCj4gPiArDQo+ID4gKyAgQHJldHZhbCBFRklfU1VDQ0VTUyAgICAgICAgICAgICAgU3VjY2Vz c2Z1bGx5IGdldCB0aGUgY29udGVudCBsZW5ndGguDQo+ID4gKyAgQHJldHZhbCBFRklfTk9UX0ZP VU5EICAgICAgICAgICAgTm8gIkNvbnRlbnQtTGVuZ3RoIiBoZWFkZXIgaW4gdGhlDQo+IEhlYWRl cnMuDQo+ID4gKw0KPiA+ICsqKi8NCj4gPiArRUZJX1NUQVRVUw0KPiA+ICtIdHRwSW9HZXRDb250 ZW50TGVuZ3RoICgNCj4gPiArICBJTiAgICAgVUlOVE4gICAgICAgICAgICAgICAgSGVhZGVyQ291 bnQsDQo+ID4gKyAgSU4gICAgIEVGSV9IVFRQX0hFQURFUiAgICAgICpIZWFkZXJzLA0KPiA+ICsg IE9VVCAgICBVSU5UTiAgICAgICAgICAgICAgICAqQ29udGVudExlbmd0aA0KPiA+ICsgICk7DQo+ ID4gKw0KPiA+ICsvKioNCj4gPiArICBTeW5jaHJvbm91c2x5IHJlY2VpdmUgYSBIVFRQIFJFU1BP TlNFIG1lc3NhZ2UgZnJvbSB0aGUgc2VydmVyLg0KPiA+ICsNCj4gPiArICBAcGFyYW1baW5dICAg SHR0cElvICAgICAgICAgICBUaGUgSHR0cElvIHdyYXBwaW5nIHRoZSBIVFRQIHNlcnZpY2UuDQo+ ID4gKyAgQHBhcmFtW2luXSAgIEhlYWRlckNvdW50ICAgICAgTnVtYmVyIG9mIGhlYWRlcnMgaW4g SGVhZGVycy4NCj4gPiArICBAcGFyYW1baW5dICAgSGVhZGVycyAgICAgICAgICBBcnJheSBjb250 YWluaW5nIGxpc3Qgb2YgSFRUUCBoZWFkZXJzLg0KPiA+ICsgIEBwYXJhbVtvdXRdICBDaHVua0xp c3RIZWFkICAgIEEgcG9pbnRlciB0byByZWNlaXZjZSBsaXN0IGhlYWQgb2YgY2h1bmtlZA0KPiBk YXRhLg0KPiA+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENhbGxlciBoYXMgdG8g cmVsZWFzZSBtZW1vcnkgb2YgQ2h1bmtMaXN0SGVhZA0KPiA+ICsgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIGFuZCBhbGwgbGlzdCBlbnRyaWVzLg0KPiA+ICsgIEBwYXJhbVtvdXRdICBD b250ZW50TGVuZ3RoICAgIFRvdGFsIGNvbnRlbnQgbGVuZ3RoDQo+ID4gKw0KPiA+ICsgIEByZXR2 YWwgRUZJX1NVQ0NFU1MgICAgICAgICAgICBUaGUgSFRUUCBjaHVua2VkIHRyYW5zZmVyIGlzIHJl Y2VpdmVkLg0KPiA+ICsgIEByZXR2YWwgRUZJX05PVF9GT1VORCAgICAgICAgICBObyBjaHVua2Vk IHRyYW5zZmVyIGNvZGluZyBoZWFkZXIgZm91bmQuDQo+ID4gKyAgQHJldHZhbCBFRklfT1VUX09G X1JFU09VUkNFUyAgIEZhaWxlZCB0byBhbGxvY2F0ZSBtZW1vcnkuDQo+ID4gKyAgQHJldHZhbCBF RklfSU5WQUxJRF9QQVJBTUVURVIgIEltcHJvcGVyIHBhcmFtZXRlcnMuDQo+ID4gKyAgQHJldHZh bCBPdGhlcnMgICAgICAgICAgICAgICAgIE90aGVyIGVycm9ycyBhcyBpbmRpY2F0ZWQuDQo+ID4g Kw0KPiA+ICsqKi8NCj4gPiArRUZJX1NUQVRVUw0KPiA+ICtIdHRwSW9HZXRDaHVua2VkVHJhbnNm ZXJDb250ZW50ICgNCj4gPiArICBJTiAgICAgSFRUUF9JTyAgICAgICAgICAgICAgKkh0dHBJbywN Cj4gPiArICBJTiAgICAgVUlOVE4gICAgICAgICAgICAgICAgSGVhZGVyQ291bnQsDQo+ID4gKyAg SU4gICAgIEVGSV9IVFRQX0hFQURFUiAgICAgICpIZWFkZXJzLA0KPiA+ICsgIE9VVCAgICBMSVNU X0VOVFJZICAgICAgICAgICAqKkNodW5rTGlzdEhlYWQsDQo+ID4gKyAgT1VUICAgIFVJTlROICAg ICAgICAgICAgICAgICpDb250ZW50TGVuZ3RoDQo+ID4gKyAgKTsNCj4gPiArDQo+ID4gKy8qKg0K PiA+ICsgIFNlbmQgSFRUUCByZXF1ZXN0IGluIGNodW5rcy4NCj4gPiArDQo+ID4gKyAgQHBhcmFt W2luXSAgIEh0dHBJbyAgICAgICAgICAgICBUaGUgSHR0cElvIHdyYXBwaW5nIHRoZSBIVFRQIHNl cnZpY2UuDQo+ID4gKyAgQHBhcmFtW2luXSAgIFNlbmRDaHVua1Byb2Nlc3MgICBQb2ludGVyIHRv IGN1cnJlbnQgY2h1bmsgcHJvY2Vzcw0KPiBzdGF0dXMuDQo+ID4gKyAgQHBhcmFtW291dF0gIFJl cXVlc3RNZXNzYWdlICAgICBSZXF1ZXN0IHRvIHNlbmQuDQo+ID4gKw0KPiA+ICsgIEByZXR2YWwg RUZJX1NVQ0NFU1MgICAgICAgICAgICAgU3VjY2Vzc2Z1bGx5IHRvIHNlbmQgY2h1bmsgZGF0YSBh Y2NvcmRpbmcgdG8NCj4gU2VuZENodW5rUHJvY2Vzcy4NCj4gPiArICBAcmV0dmFsIE90aGVyICAg ICAgICAgICAgICAgICAgIE90aGVyIGVycm9ycy4NCj4gPiArDQo+ID4gKyoqLw0KPiA+ICtFRklf U1RBVFVTDQo+ID4gK0h0dHBJb1NlbmRDaHVua2VkVHJhbnNmZXIgKA0KPiA+ICsgIElOICBIVFRQ X0lPICAgICAgICAgICAgICAgICAgICAqSHR0cElvLA0KPiA+ICsgIElOICBIVFRQX0lPX1NFTkRf Q0hVTktfUFJPQ0VTUyAqU2VuZENodW5rUHJvY2VzcywNCj4gPiArICBJTiAgRUZJX0hUVFBfTUVT U0FHRSAgICAgICAgICAgKlJlcXVlc3RNZXNzYWdlDQo+ID4gKyk7DQo+ID4gKyNlbmRpZg0KPiA+ IGRpZmYgLS1naXQgYS9OZXR3b3JrUGtnL0xpYnJhcnkvRHhlSHR0cElvTGliL0R4ZUh0dHBJb0xp Yi5jDQo+ID4gYi9OZXR3b3JrUGtnL0xpYnJhcnkvRHhlSHR0cElvTGliL0R4ZUh0dHBJb0xpYi5j DQo+ID4gbmV3IGZpbGUgbW9kZSAxMDA2NDQNCj4gPiBpbmRleCAwMDAwMDAwMDAwLi5mYmNlODZl YTVjDQo+ID4gLS0tIC9kZXYvbnVsbA0KPiA+ICsrKyBiL05ldHdvcmtQa2cvTGlicmFyeS9EeGVI dHRwSW9MaWIvRHhlSHR0cElvTGliLmMNCj4gPiBAQCAtMCwwICsxLDgwOSBAQA0KPiA+ICsvKiog QGZpbGUNCj4gPiArICBIdHRwIElPIEhlbHBlciBMaWJyYXJ5Lg0KPiA+ICsNCj4gPiArICAoQykg Q29weXJpZ2h0IDIwMjAgSGV3bGV0dC1QYWNrYXJkIERldmVsb3BtZW50IENvbXBhbnksIEwuUC48 QlI+DQo+ID4gKyAgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEJTRC0yLUNsYXVzZS1QYXRlbnQg KiovDQo+ID4gKw0KPiA+ICsjaW5jbHVkZSA8VWVmaS5oPg0KPiA+ICsNCj4gPiArI2luY2x1ZGUg PFByb3RvY29sL0h0dHAuaD4NCj4gPiArDQo+ID4gKyNpbmNsdWRlIDxMaWJyYXJ5L0Jhc2VMaWIu aD4NCj4gPiArI2luY2x1ZGUgPExpYnJhcnkvQmFzZU1lbW9yeUxpYi5oPg0KPiA+ICsjaW5jbHVk ZSA8TGlicmFyeS9EZWJ1Z0xpYi5oPg0KPiA+ICsjaW5jbHVkZSA8TGlicmFyeS9IdHRwSW9MaWIu aD4NCj4gPiArI2luY2x1ZGUgPExpYnJhcnkvTWVtb3J5QWxsb2NhdGlvbkxpYi5oPiAjaW5jbHVk ZQ0KPiA+ICs8TGlicmFyeS9QcmludExpYi5oPiAjaW5jbHVkZSA8TGlicmFyeS9VZWZpQm9vdFNl cnZpY2VzVGFibGVMaWIuaD4NCj4gPiArDQo+ID4gKy8qKg0KPiA+ICsgIE5vdGlmeSB0aGUgY2Fs bGJhY2sgZnVuY3Rpb24gd2hlbiBhbiBldmVudCBpcyB0cmlnZ2VyZWQuDQo+ID4gKw0KPiA+ICsg IEBwYXJhbVtpbl0gIENvbnRleHQgICAgICAgICBUaGUgb3BhcXVlIHBhcmFtZXRlciB0byB0aGUg ZnVuY3Rpb24uDQo+ID4gKw0KPiA+ICsqKi8NCj4gPiArVk9JRA0KPiA+ICtFRklBUEkNCj4gPiAr SHR0cElvTm90aWZ5RHBjICgNCj4gPiArICBJTiBWT0lEICAgICAgICAgICAgICAgICpDb250ZXh0 DQo+ID4gKyAgKQ0KPiA+ICt7DQo+ID4gKyAgKigoQk9PTEVBTiAqKSBDb250ZXh0KSA9IFRSVUU7 DQo+ID4gK30NCj4gPiArDQo+ID4gKy8qKg0KPiA+ICsgIFJlcXVlc3QgSHR0cElvTm90aWZ5RHBj IGFzIGEgRFBDIGF0IFRQTF9DQUxMQkFDSy4NCj4gPiArDQo+ID4gKyAgQHBhcmFtW2luXSAgRXZl bnQgICAgICAgICAgICAgICAgIFRoZSBldmVudCBzaWduYWxlZC4NCj4gPiArICBAcGFyYW1baW5d ICBDb250ZXh0ICAgICAgICAgICAgICAgVGhlIG9wYXF1ZSBwYXJhbWV0ZXIgdG8gdGhlIGZ1bmN0 aW9uLg0KPiA+ICsNCj4gPiArKiovDQo+ID4gK1ZPSUQNCj4gPiArRUZJQVBJDQo+ID4gK0h0dHBJ b05vdGlmeSAoDQo+ID4gKyAgSU4gRUZJX0VWRU5UICAgICAgICAgICAgICBFdmVudCwNCj4gPiAr ICBJTiBWT0lEICAgICAgICAgICAgICAgICAgICpDb250ZXh0DQo+ID4gKyAgKQ0KPiA+ICt7DQo+ ID4gKyAgLy8NCj4gPiArICAvLyBSZXF1ZXN0IEh0dHBJb05vdGlmeURwYyBhcyBhIERQQyBhdCBU UExfQ0FMTEJBQ0sNCj4gPiArICAvLw0KPiA+ICsgIFF1ZXVlRHBjIChUUExfQ0FMTEJBQ0ssIEh0 dHBJb05vdGlmeURwYywgQ29udGV4dCk7IH0NCj4gPiArDQo+ID4gKy8qKg0KPiA+ICsgIERlc3Ry b3kgdGhlIEhUVFBfSU8gYW5kIHJlbGVhc2UgdGhlIHJlc291cmNlcy4NCj4gPiArDQo+ID4gKyAg QHBhcmFtW2luXSAgSHR0cElvICAgICAgICAgIFRoZSBIVFRQX0lPIHdoaWNoIHdyYXBzIHRoZSBI VFRQIHNlcnZpY2UgdG8gYmUNCj4gZGVzdHJveWVkLg0KPiA+ICsNCj4gPiArKiovDQo+ID4gK1ZP SUQNCj4gPiArSHR0cElvRGVzdHJveUlvICgNCj4gPiArICBJTiBIVFRQX0lPICAgICAgICAgICAg ICAgICpIdHRwSW8NCj4gPiArICApDQo+ID4gK3sNCj4gPiArICBFRklfSFRUUF9QUk9UT0NPTCAg ICAgICAgICpIdHRwOw0KPiA+ICsgIEVGSV9FVkVOVCAgICAgICAgICAgICAgICAgRXZlbnQ7DQo+ ID4gKw0KPiA+ICsgIGlmIChIdHRwSW8gPT0gTlVMTCkgew0KPiA+ICsgICAgcmV0dXJuOw0KPiA+ ICsgIH0NCj4gPiArDQo+ID4gKyAgRXZlbnQgPSBIdHRwSW8tPlJlcVRva2VuLkV2ZW50Ow0KPiA+ ICsgIGlmIChFdmVudCAhPSBOVUxMKSB7DQo+ID4gKyAgICBnQlMtPkNsb3NlRXZlbnQgKEV2ZW50 KTsNCj4gPiArICB9DQo+ID4gKw0KPiA+ICsgIEV2ZW50ID0gSHR0cElvLT5Sc3BUb2tlbi5FdmVu dDsNCj4gPiArICBpZiAoRXZlbnQgIT0gTlVMTCkgew0KPiA+ICsgICAgZ0JTLT5DbG9zZUV2ZW50 IChFdmVudCk7DQo+ID4gKyAgfQ0KPiA+ICsNCj4gPiArICBFdmVudCA9IEh0dHBJby0+VGltZW91 dEV2ZW50Ow0KPiA+ICsgIGlmIChFdmVudCAhPSBOVUxMKSB7DQo+ID4gKyAgICBnQlMtPkNsb3Nl RXZlbnQgKEV2ZW50KTsNCj4gPiArICB9DQo+ID4gKw0KPiA+ICsgIEh0dHAgPSBIdHRwSW8tPkh0 dHA7DQo+ID4gKyAgaWYgKEh0dHAgIT0gTlVMTCkgew0KPiA+ICsgICAgSHR0cC0+Q29uZmlndXJl IChIdHRwLCBOVUxMKTsNCj4gPiArICAgIGdCUy0+Q2xvc2VQcm90b2NvbCAoDQo+ID4gKyAgICAg ICAgICAgSHR0cElvLT5IYW5kbGUsDQo+ID4gKyAgICAgICAgICAgJmdFZmlIdHRwUHJvdG9jb2xH dWlkLA0KPiA+ICsgICAgICAgICAgIEh0dHBJby0+SW1hZ2UsDQo+ID4gKyAgICAgICAgICAgSHR0 cElvLT5Db250cm9sbGVyDQo+ID4gKyAgICAgICAgICAgKTsNCj4gPiArICB9DQo+ID4gKw0KPiA+ ICsgIE5ldExpYkRlc3Ryb3lTZXJ2aWNlQ2hpbGQgKA0KPiA+ICsgICAgSHR0cElvLT5Db250cm9s bGVyLA0KPiA+ICsgICAgSHR0cElvLT5JbWFnZSwNCj4gPiArICAgICZnRWZpSHR0cFNlcnZpY2VC aW5kaW5nUHJvdG9jb2xHdWlkLA0KPiA+ICsgICAgSHR0cElvLT5IYW5kbGUNCj4gPiArICAgICk7 DQo+ID4gK30NCj4gPiArDQo+ID4gKy8qKg0KPiA+ICsgIENyZWF0ZSBhIEhUVFBfSU8gdG8gYWNj ZXNzIHRoZSBIVFRQIHNlcnZpY2UuIEl0IHdpbGwgY3JlYXRlIGFuZA0KPiA+ICtjb25maWd1cmUN Cj4gPiArICBhIEhUVFAgY2hpbGQgaGFuZGxlLg0KPiA+ICsNCj4gPiArICBAcGFyYW1baW5dICBJ bWFnZSAgICAgICAgICBUaGUgaGFuZGxlIG9mIHRoZSBkcml2ZXIgaW1hZ2UuDQo+ID4gKyAgQHBh cmFtW2luXSAgQ29udHJvbGxlciAgICAgVGhlIGhhbmRsZSBvZiB0aGUgY29udHJvbGxlci4NCj4g PiArICBAcGFyYW1baW5dICBJcFZlcnNpb24gICAgICBJUF9WRVJTSU9OXzQgb3IgSVBfVkVSU0lP Tl82Lg0KPiA+ICsgIEBwYXJhbVtpbl0gIENvbmZpZ0RhdGEgICAgIFRoZSBIVFRQX0lPIGNvbmZp Z3VyYXRpb24gZGF0YSAsDQo+ID4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTlVMTCBt ZWFucyBub3QgdG8gY29uZmlndXJlIHRoZSBIVFRQIGNoaWxkLg0KPiA+ICsgIEBwYXJhbVtpbl0g IENhbGxiYWNrICAgICAgIENhbGxiYWNrIGZ1bmN0aW9uIHdoaWNoIHdpbGwgYmUgaW52b2tlZCB3 aGVuDQo+IHNwZWNpZmllZA0KPiA+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEhUVFBf SU9fQ0FMTEJBQ0tfRVZFTlQgaGFwcGVuZWQuDQo+ID4gKyAgQHBhcmFtW2luXSAgQ29udGV4dCAg ICAgICAgVGhlIENvbnRleHQgZGF0YSB3aGljaCB3aWxsIGJlIHBhc3NlZCB0byB0aGUNCj4gQ2Fs bGJhY2sgZnVuY3Rpb24uDQo+ID4gKyAgQHBhcmFtW291dF0gSHR0cElvICAgICAgICAgVGhlIEhU VFBfSU8uDQo+ID4gKw0KPiA+ICsgIEByZXR2YWwgRUZJX1NVQ0NFU1MgICAgICAgICAgICBUaGUg SFRUUF9JTyBpcyBjcmVhdGVkIGFuZCBjb25maWd1cmVkLg0KPiA+ICsgIEByZXR2YWwgRUZJX0lO VkFMSURfUEFSQU1FVEVSICBPbmUgb3IgbW9yZSBwYXJhbWV0ZXJzIGFyZSBpbnZhbGlkLg0KPiA+ ICsgIEByZXR2YWwgRUZJX1VOU1VQUE9SVEVEICAgICAgICBPbmUgb3IgbW9yZSBvZiB0aGUgY29u dHJvbCBvcHRpb25zIGFyZQ0KPiBub3QNCj4gPiArICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgc3VwcG9ydGVkIGluIHRoZSBpbXBsZW1lbnRhdGlvbi4NCj4gPiArICBAcmV0dmFsIEVG SV9PVVRfT0ZfUkVTT1VSQ0VTICAgRmFpbGVkIHRvIGFsbG9jYXRlIG1lbW9yeS4NCj4gPiArICBA cmV0dmFsIE90aGVycyAgICAgICAgICAgICAgICAgRmFpbGVkIHRvIGNyZWF0ZSB0aGUgSFRUUF9J TyBvciBjb25maWd1cmUgaXQuDQo+ID4gKw0KPiA+ICsqKi8NCj4gPiArRUZJX1NUQVRVUw0KPiA+ ICtIdHRwSW9DcmVhdGVJbyAoDQo+ID4gKyAgSU4gRUZJX0hBTkRMRSAgICAgICAgICAgICBJbWFn ZSwNCj4gPiArICBJTiBFRklfSEFORExFICAgICAgICAgICAgIENvbnRyb2xsZXIsDQo+ID4gKyAg SU4gVUlOVDggICAgICAgICAgICAgICAgICBJcFZlcnNpb24sDQo+ID4gKyAgSU4gSFRUUF9JT19D T05GSUdfREFUQSAgICAqQ29uZmlnRGF0YSwgT1BUSU9OQUwNCj4gPiArICBJTiBIVFRQX0lPX0NB TExCQUNLICAgICAgIENhbGxiYWNrLA0KPiA+ICsgIElOIFZPSUQgICAgICAgICAgICAgICAgICAg KkNvbnRleHQsDQo+ID4gKyAgT1VUIEhUVFBfSU8gICAgICAgICAgICAgICAqSHR0cElvDQo+ID4g KyAgKQ0KPiA+ICt7DQo+ID4gKyAgRUZJX1NUQVRVUyAgICAgICAgICAgICAgICBTdGF0dXM7DQo+ ID4gKyAgRUZJX0hUVFBfQ09ORklHX0RBVEEgICAgICBIdHRwQ29uZmlnRGF0YTsNCj4gPiArICBF RklfSFRUUHY0X0FDQ0VTU19QT0lOVCAgIEh0dHA0QWNjZXNzUG9pbnQ7DQo+ID4gKyAgRUZJX0hU VFB2Nl9BQ0NFU1NfUE9JTlQgICBIdHRwNkFjY2Vzc1BvaW50Ow0KPiA+ICsgIEVGSV9IVFRQX1BS T1RPQ09MICAgICAgICAgKkh0dHA7DQo+ID4gKyAgRUZJX0VWRU5UICAgICAgICAgICAgICAgICBF dmVudDsNCj4gPiArDQo+ID4gKyAgaWYgKChJbWFnZSA9PSBOVUxMKSB8fCAoQ29udHJvbGxlciA9 PSBOVUxMKSB8fCAoSHR0cElvID09IE5VTEwpKSB7DQo+ID4gKyAgICByZXR1cm4gRUZJX0lOVkFM SURfUEFSQU1FVEVSOw0KPiA+ICsgIH0NCj4gPiArDQo+ID4gKyAgaWYgKElwVmVyc2lvbiAhPSBJ UF9WRVJTSU9OXzQgJiYgSXBWZXJzaW9uICE9IElQX1ZFUlNJT05fNikgew0KPiA+ICsgICAgcmV0 dXJuIEVGSV9VTlNVUFBPUlRFRDsNCj4gPiArICB9DQo+ID4gKw0KPiA+ICsgIFplcm9NZW0gKEh0 dHBJbywgc2l6ZW9mIChIVFRQX0lPKSk7ICBaZXJvTWVtICgmSHR0cENvbmZpZ0RhdGEsDQo+ID4g KyBzaXplb2YgKEVGSV9IVFRQX0NPTkZJR19EQVRBKSk7DQo+ID4gKw0KPiA+ICsgIC8vDQo+ID4g KyAgLy8gQ3JlYXRlIHRoZSBIVFRQIGNoaWxkIGluc3RhbmNlIGFuZCBnZXQgdGhlIEhUVFAgcHJv dG9jb2wuDQo+ID4gKyAgLy8NCj4gPiArICBTdGF0dXMgPSBOZXRMaWJDcmVhdGVTZXJ2aWNlQ2hp bGQgKA0KPiA+ICsgICAgICAgICAgICAgQ29udHJvbGxlciwNCj4gPiArICAgICAgICAgICAgIElt YWdlLA0KPiA+ICsgICAgICAgICAgICAgJmdFZmlIdHRwU2VydmljZUJpbmRpbmdQcm90b2NvbEd1 aWQsDQo+ID4gKyAgICAgICAgICAgICAmSHR0cElvLT5IYW5kbGUNCj4gPiArICAgICAgICAgICAg ICk7DQo+ID4gKyAgaWYgKEVGSV9FUlJPUiAoU3RhdHVzKSkgew0KPiA+ICsgICAgcmV0dXJuIFN0 YXR1czsNCj4gPiArICB9DQo+ID4gKw0KPiA+ICsgIFN0YXR1cyA9IGdCUy0+T3BlblByb3RvY29s ICgNCj4gPiArICAgICAgICAgICAgICAgICAgSHR0cElvLT5IYW5kbGUsDQo+ID4gKyAgICAgICAg ICAgICAgICAgICZnRWZpSHR0cFByb3RvY29sR3VpZCwNCj4gPiArICAgICAgICAgICAgICAgICAg KFZPSUQgKiopICZIdHRwLA0KPiA+ICsgICAgICAgICAgICAgICAgICBJbWFnZSwNCj4gPiArICAg ICAgICAgICAgICAgICAgQ29udHJvbGxlciwNCj4gPiArICAgICAgICAgICAgICAgICAgRUZJX09Q RU5fUFJPVE9DT0xfQllfRFJJVkVSDQo+ID4gKyAgICAgICAgICAgICAgICAgICk7DQo+ID4gKyAg aWYgKEVGSV9FUlJPUiAoU3RhdHVzKSB8fCAoSHR0cCA9PSBOVUxMKSkgew0KPiA+ICsgICAgZ290 byBPTl9FUlJPUjsNCj4gPiArICB9DQo+ID4gKw0KPiA+ICsgIC8vDQo+ID4gKyAgLy8gSW5pdCB0 aGUgY29uZmlndXJhdGlvbiBkYXRhIGFuZCBjb25maWd1cmUgdGhlIEhUVFAgY2hpbGQuDQo+ID4g KyAgLy8NCj4gPiArICBIdHRwSW8tPkltYWdlICAgICAgID0gSW1hZ2U7DQo+ID4gKyAgSHR0cElv LT5Db250cm9sbGVyICA9IENvbnRyb2xsZXI7DQo+ID4gKyAgSHR0cElvLT5JcFZlcnNpb24gICA9 IElwVmVyc2lvbjsNCj4gPiArICBIdHRwSW8tPkh0dHAgICAgICAgID0gSHR0cDsNCj4gPiArICBI dHRwSW8tPkNhbGxiYWNrICAgID0gQ2FsbGJhY2s7DQo+ID4gKyAgSHR0cElvLT5Db250ZXh0ICAg ICA9IENvbnRleHQ7DQo+ID4gKw0KPiA+ICsgIGlmIChDb25maWdEYXRhICE9IE5VTEwpIHsNCj4g PiArICAgIGlmIChIdHRwSW8tPklwVmVyc2lvbiA9PSBJUF9WRVJTSU9OXzQpIHsNCj4gPiArICAg ICAgSHR0cENvbmZpZ0RhdGEuTG9jYWxBZGRyZXNzSXNJUHY2ICA9IEZBTFNFOw0KPiA+ICsgICAg ICBIdHRwQ29uZmlnRGF0YS5IdHRwVmVyc2lvbiAgICAgICAgID0gQ29uZmlnRGF0YS0+Q29uZmln NC5IdHRwVmVyc2lvbjsNCj4gPiArICAgICAgSHR0cENvbmZpZ0RhdGEuVGltZU91dE1pbGxpc2Vj ICAgICA9IENvbmZpZ0RhdGEtDQo+ID5Db25maWc0LlJlcXVlc3RUaW1lT3V0Ow0KPiA+ICsNCj4g PiArICAgICAgSHR0cDRBY2Nlc3NQb2ludC5Vc2VEZWZhdWx0QWRkcmVzcyA9IENvbmZpZ0RhdGEt DQo+ID5Db25maWc0LlVzZURlZmF1bHRBZGRyZXNzOw0KPiA+ICsgICAgICBIdHRwNEFjY2Vzc1Bv aW50LkxvY2FsUG9ydCAgICAgICAgID0gQ29uZmlnRGF0YS0+Q29uZmlnNC5Mb2NhbFBvcnQ7DQo+ ID4gKyAgICAgIElQNF9DT1BZX0FERFJFU1MgKCZIdHRwNEFjY2Vzc1BvaW50LkxvY2FsQWRkcmVz cywgJkNvbmZpZ0RhdGEtDQo+ID5Db25maWc0LkxvY2FsSXApOw0KPiA+ICsgICAgICBJUDRfQ09Q WV9BRERSRVNTICgmSHR0cDRBY2Nlc3NQb2ludC5Mb2NhbFN1Ym5ldCwgJkNvbmZpZ0RhdGEtDQo+ ID5Db25maWc0LlN1Ym5ldE1hc2spOw0KPiA+ICsgICAgICBIdHRwQ29uZmlnRGF0YS5BY2Nlc3NQ b2ludC5JUHY0Tm9kZSA9ICZIdHRwNEFjY2Vzc1BvaW50Ow0KPiA+ICsgICAgfSBlbHNlIHsNCj4g PiArICAgICAgSHR0cENvbmZpZ0RhdGEuTG9jYWxBZGRyZXNzSXNJUHY2ID0gVFJVRTsNCj4gPiAr ICAgICAgSHR0cENvbmZpZ0RhdGEuSHR0cFZlcnNpb24gICAgICAgICA9IENvbmZpZ0RhdGEtPkNv bmZpZzYuSHR0cFZlcnNpb247DQo+ID4gKyAgICAgIEh0dHBDb25maWdEYXRhLlRpbWVPdXRNaWxs aXNlYyAgICAgPSBDb25maWdEYXRhLQ0KPiA+Q29uZmlnNi5SZXF1ZXN0VGltZU91dDsNCj4gPiAr DQo+ID4gKyAgICAgIEh0dHA2QWNjZXNzUG9pbnQuTG9jYWxQb3J0ICAgICAgICAgPSBDb25maWdE YXRhLT5Db25maWc2LkxvY2FsUG9ydDsNCj4gPiArICAgICAgSVA2X0NPUFlfQUREUkVTUyAoJkh0 dHA2QWNjZXNzUG9pbnQuTG9jYWxBZGRyZXNzLCAmQ29uZmlnRGF0YS0NCj4gPkNvbmZpZzYuTG9j YWxJcCk7DQo+ID4gKyAgICAgIEh0dHBDb25maWdEYXRhLkFjY2Vzc1BvaW50LklQdjZOb2RlID0g Jkh0dHA2QWNjZXNzUG9pbnQ7DQo+ID4gKyAgICB9DQo+ID4gKw0KPiA+ICsgICAgU3RhdHVzID0g SHR0cC0+Q29uZmlndXJlIChIdHRwLCAmSHR0cENvbmZpZ0RhdGEpOw0KPiA+ICsgICAgaWYgKEVG SV9FUlJPUiAoU3RhdHVzKSkgew0KPiA+ICsgICAgICBnb3RvIE9OX0VSUk9SOw0KPiA+ICsgICAg fQ0KPiA+ICsgIH0NCj4gPiArDQo+ID4gKyAgLy8NCj4gPiArICAvLyBDcmVhdGUgZXZlbnRzIGZv ciB2YXJpdW9zIGFzeW5jaHJvbm91cyBvcGVyYXRpb25zLg0KPiA+ICsgIC8vDQo+ID4gKyAgU3Rh dHVzID0gZ0JTLT5DcmVhdGVFdmVudCAoDQo+ID4gKyAgICAgICAgICAgICAgICAgIEVWVF9OT1RJ RllfU0lHTkFMLA0KPiA+ICsgICAgICAgICAgICAgICAgICBUUExfTk9USUZZLA0KPiA+ICsgICAg ICAgICAgICAgICAgICBIdHRwSW9Ob3RpZnksDQo+ID4gKyAgICAgICAgICAgICAgICAgICZIdHRw SW8tPklzVHhEb25lLA0KPiA+ICsgICAgICAgICAgICAgICAgICAmRXZlbnQNCj4gPiArICAgICAg ICAgICAgICAgICAgKTsNCj4gPiArICBpZiAoRUZJX0VSUk9SIChTdGF0dXMpKSB7DQo+ID4gKyAg ICBnb3RvIE9OX0VSUk9SOw0KPiA+ICsgIH0NCj4gPiArICBIdHRwSW8tPlJlcVRva2VuLkV2ZW50 ID0gRXZlbnQ7DQo+ID4gKyAgSHR0cElvLT5SZXFUb2tlbi5NZXNzYWdlID0gJkh0dHBJby0+UmVx TWVzc2FnZTsNCj4gPiArDQo+ID4gKyAgU3RhdHVzID0gZ0JTLT5DcmVhdGVFdmVudCAoDQo+ID4g KyAgICAgICAgICAgICAgICAgIEVWVF9OT1RJRllfU0lHTkFMLA0KPiA+ICsgICAgICAgICAgICAg ICAgICBUUExfTk9USUZZLA0KPiA+ICsgICAgICAgICAgICAgICAgICBIdHRwSW9Ob3RpZnksDQo+ ID4gKyAgICAgICAgICAgICAgICAgICZIdHRwSW8tPklzUnhEb25lLA0KPiA+ICsgICAgICAgICAg ICAgICAgICAmRXZlbnQNCj4gPiArICAgICAgICAgICAgICAgICAgKTsNCj4gPiArICBpZiAoRUZJ X0VSUk9SIChTdGF0dXMpKSB7DQo+ID4gKyAgICBnb3RvIE9OX0VSUk9SOw0KPiA+ICsgIH0NCj4g PiArICBIdHRwSW8tPlJzcFRva2VuLkV2ZW50ID0gRXZlbnQ7DQo+ID4gKyAgSHR0cElvLT5Sc3BU b2tlbi5NZXNzYWdlID0gJkh0dHBJby0+UnNwTWVzc2FnZTsNCj4gPiArDQo+ID4gKyAgLy8NCj4g PiArICAvLyBDcmVhdGUgVGltZW91dEV2ZW50IGZvciByZXNwb25zZSAgLy8gIFN0YXR1cyA9IGdC Uy0+Q3JlYXRlRXZlbnQNCj4gPiArICgNCj4gPiArICAgICAgICAgICAgICAgICAgRVZUX1RJTUVS LA0KPiA+ICsgICAgICAgICAgICAgICAgICBUUExfQ0FMTEJBQ0ssDQo+ID4gKyAgICAgICAgICAg ICAgICAgIE5VTEwsDQo+ID4gKyAgICAgICAgICAgICAgICAgIE5VTEwsDQo+ID4gKyAgICAgICAg ICAgICAgICAgICZFdmVudA0KPiA+ICsgICAgICAgICAgICAgICAgICApOw0KPiA+ICsgIGlmIChF RklfRVJST1IgKFN0YXR1cykpIHsNCj4gPiArICAgIGdvdG8gT05fRVJST1I7DQo+ID4gKyAgfQ0K PiA+ICsgIEh0dHBJby0+VGltZW91dEV2ZW50ID0gRXZlbnQ7DQo+ID4gKyAgcmV0dXJuIEVGSV9T VUNDRVNTOw0KPiA+ICsNCj4gPiArT05fRVJST1I6DQo+ID4gKyAgSHR0cElvRGVzdHJveUlvIChI dHRwSW8pOw0KPiA+ICsNCj4gPiArICByZXR1cm4gU3RhdHVzOw0KPiA+ICt9DQo+ID4gKw0KPiA+ ICsvKioNCj4gPiArICBTeW5jaHJvbm91c2x5IHNlbmQgYSBIVFRQIFJFUVVFU1QgbWVzc2FnZSB0 byB0aGUgc2VydmVyLg0KPiA+ICsNCj4gPiArICBAcGFyYW1baW5dICAgSHR0cElvICAgICAgICAg ICBUaGUgSHR0cElvIHdyYXBwaW5nIHRoZSBIVFRQIHNlcnZpY2UuDQo+ID4gKyAgQHBhcmFtW2lu XSAgIFJlcXVlc3QgICAgICAgICAgQSBwb2ludGVyIHRvIHN0b3JhZ2Ugc3VjaCBkYXRhIGFzIFVS TCBhbmQNCj4gSFRUUCBtZXRob2QuDQo+ID4gKyAgQHBhcmFtW2luXSAgIEhlYWRlckNvdW50ICAg ICAgTnVtYmVyIG9mIEhUVFAgaGVhZGVyIHN0cnVjdHVyZXMgaW4NCj4gSGVhZGVycyBsaXN0Lg0K PiA+ICsgIEBwYXJhbVtpbl0gICBIZWFkZXJzICAgICAgICAgIEFycmF5IGNvbnRhaW5pbmcgbGlz dCBvZiBIVFRQIGhlYWRlcnMuDQo+ID4gKyAgQHBhcmFtW2luXSAgIEJvZHlMZW5ndGggICAgICAg TGVuZ3RoIGluIGJ5dGVzIG9mIHRoZSBIVFRQIGJvZHkuDQo+ID4gKyAgQHBhcmFtW2luXSAgIEJv ZHkgICAgICAgICAgICAgQm9keSBhc3NvY2lhdGVkIHdpdGggdGhlIEhUVFAgcmVxdWVzdC4NCj4g PiArDQo+ID4gKyAgQHJldHZhbCBFRklfU1VDQ0VTUyAgICAgICAgICAgIFRoZSBIVFRQIHJlcXVl c3QgaXMgdHJhc21pdHRlZC4NCj4gPiArICBAcmV0dmFsIEVGSV9JTlZBTElEX1BBUkFNRVRFUiAg T25lIG9yIG1vcmUgcGFyYW1ldGVycyBhcmUgaW52YWxpZC4NCj4gPiArICBAcmV0dmFsIEVGSV9P VVRfT0ZfUkVTT1VSQ0VTICAgRmFpbGVkIHRvIGFsbG9jYXRlIG1lbW9yeS4NCj4gPiArICBAcmV0 dmFsIEVGSV9ERVZJQ0VfRVJST1IgICAgICAgQW4gdW5leHBlY3RlZCBuZXR3b3JrIG9yIHN5c3Rl bSBlcnJvcg0KPiBvY2N1cnJlZC4NCj4gPiArICBAcmV0dmFsIE90aGVycyAgICAgICAgICAgICAg ICAgT3RoZXIgZXJyb3JzIGFzIGluZGljYXRlZC4NCj4gPiArDQo+ID4gKyoqLw0KPiA+ICtFRklf U1RBVFVTDQo+ID4gK0h0dHBJb1NlbmRSZXF1ZXN0ICgNCj4gPiArICBJTiAgSFRUUF9JTyAgICAg ICAgICAgICAgICAqSHR0cElvLA0KPiA+ICsgIElOICBFRklfSFRUUF9SRVFVRVNUX0RBVEEgICpS ZXF1ZXN0LA0KPiA+ICsgIElOICBVSU5UTiAgICAgICAgICAgICAgICAgIEhlYWRlckNvdW50LA0K PiA+ICsgIElOICBFRklfSFRUUF9IRUFERVIgICAgICAgICpIZWFkZXJzLA0KPiA+ICsgIElOICBV SU5UTiAgICAgICAgICAgICAgICAgIEJvZHlMZW5ndGgsDQo+ID4gKyAgSU4gIFZPSUQgICAgICAg ICAgICAgICAgICAgKkJvZHkNCj4gPiArICApDQo+ID4gK3sNCj4gPiArICBFRklfU1RBVFVTICAg ICAgICAgICAgICAgICBTdGF0dXM7DQo+ID4gKyAgRUZJX0hUVFBfUFJPVE9DT0wgICAgICAgICAg Kkh0dHA7DQo+ID4gKw0KPiA+ICsgIGlmIChIdHRwSW8gPT0gTlVMTCB8fCBIdHRwSW8tPkh0dHAg PT0gTlVMTCkgew0KPiA+ICsgICAgcmV0dXJuIEVGSV9JTlZBTElEX1BBUkFNRVRFUjsNCj4gPiAr ICB9DQo+ID4gKw0KPiA+ICsgIEh0dHBJby0+UmVxVG9rZW4uU3RhdHVzICA9IEVGSV9OT1RfUkVB RFk7DQo+ID4gKyBIdHRwSW8tPlJlcVRva2VuLk1lc3NhZ2UtPkRhdGEuUmVxdWVzdCA9IFJlcXVl c3Q7DQo+ID4gKyBIdHRwSW8tPlJlcVRva2VuLk1lc3NhZ2UtPkhlYWRlckNvdW50ICA9IEhlYWRl ckNvdW50Ow0KPiA+ICsgIEh0dHBJby0+UmVxVG9rZW4uTWVzc2FnZS0+SGVhZGVycyAgICAgID0g SGVhZGVyczsNCj4gPiArICBIdHRwSW8tPlJlcVRva2VuLk1lc3NhZ2UtPkJvZHlMZW5ndGggICA9 IEJvZHlMZW5ndGg7DQo+ID4gKyAgSHR0cElvLT5SZXFUb2tlbi5NZXNzYWdlLT5Cb2R5ICAgICAg ICAgPSBCb2R5Ow0KPiA+ICsNCj4gPiArICBpZiAoSHR0cElvLT5DYWxsYmFjayAhPSBOVUxMKSB7 DQo+ID4gKyAgICBTdGF0dXMgPSBIdHRwSW8tPkNhbGxiYWNrICgNCj4gPiArICAgICAgICAgICAg ICAgSHR0cElvUmVxdWVzdCwNCj4gPiArICAgICAgICAgICAgICAgSHR0cElvLT5SZXFUb2tlbi5N ZXNzYWdlLA0KPiA+ICsgICAgICAgICAgICAgICBIdHRwSW8tPkNvbnRleHQNCj4gPiArICAgICAg ICAgICAgICAgKTsNCj4gPiArICAgIGlmIChFRklfRVJST1IgKFN0YXR1cykpIHsNCj4gPiArICAg ICAgcmV0dXJuIFN0YXR1czsNCj4gPiArICAgIH0NCj4gPiArICB9DQo+ID4gKw0KPiA+ICsgIC8v DQo+ID4gKyAgLy8gUXVldWUgdGhlIHJlcXVlc3QgdG9rZW4gdG8gSFRUUCBpbnN0YW5jZXMuDQo+ ID4gKyAgLy8NCj4gPiArICBIdHRwID0gSHR0cElvLT5IdHRwOw0KPiA+ICsgIEh0dHBJby0+SXNU eERvbmUgPSBGQUxTRTsNCj4gPiArICBTdGF0dXMgPSBIdHRwLT5SZXF1ZXN0ICgNCj4gPiArICAg ICAgICAgICAgICAgICAgIEh0dHAsDQo+ID4gKyAgICAgICAgICAgICAgICAgICAmSHR0cElvLT5S ZXFUb2tlbg0KPiA+ICsgICAgICAgICAgICAgICAgICAgKTsNCj4gPiArICBpZiAoRUZJX0VSUk9S IChTdGF0dXMpKSB7DQo+ID4gKyAgICByZXR1cm4gU3RhdHVzOw0KPiA+ICsgIH0NCj4gPiArDQo+ ID4gKyAgLy8NCj4gPiArICAvLyBQb2xsIHRoZSBuZXR3b3JrIHVudGlsIHRyYW5zbWl0IGZpbmlz aC4NCj4gPiArICAvLw0KPiA+ICsgIHdoaWxlICghSHR0cElvLT5Jc1R4RG9uZSkgew0KPiA+ICsg ICAgSHR0cC0+UG9sbCAoSHR0cCk7DQo+ID4gKyAgfQ0KPiA+ICsNCj4gPiArICByZXR1cm4gSHR0 cElvLT5SZXFUb2tlbi5TdGF0dXM7DQo+ID4gK30NCj4gPiArDQo+ID4gKy8qKg0KPiA+ICsgIFN5 bmNocm9ub3VzbHkgcmVjZWl2ZSBhIEhUVFAgUkVTUE9OU0UgbWVzc2FnZSBmcm9tIHRoZSBzZXJ2 ZXIuDQo+ID4gKw0KPiA+ICsgIEBwYXJhbVtpbl0gICBIdHRwSW8gICAgICAgICAgIFRoZSBIdHRw SW8gd3JhcHBpbmcgdGhlIEhUVFAgc2VydmljZS4NCj4gPiArICBAcGFyYW1baW5dICAgUmVjdk1z Z0hlYWRlciAgICBUUlVFIHRvIHJlY2VpdmUgYSBuZXcgSFRUUCByZXNwb25zZQ0KPiAoZnJvbSBt ZXNzYWdlIGhlYWRlcikuDQo+ID4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRkFM U0UgdG8gY29udGludWUgcmVjZWl2ZSB0aGUgcHJldmlvdXMgcmVzcG9uc2UgbWVzc2FnZS4NCj4g PiArICBAcGFyYW1bb3V0XSAgUmVzcG9uc2VEYXRhICAgICBQb2ludCB0byBhIHdyYXBwZXIgb2Yg dGhlIHJlY2VpdmVkDQo+IHJlc3BvbnNlIGRhdGEuDQo+ID4gKw0KPiA+ICsgIEByZXR2YWwgRUZJ X1NVQ0NFU1MgICAgICAgICAgICBUaGUgSFRUUCByZXNwb25zZSBpcyByZWNlaXZlZC4NCj4gPiAr ICBAcmV0dmFsIEVGSV9JTlZBTElEX1BBUkFNRVRFUiAgT25lIG9yIG1vcmUgcGFyYW1ldGVycyBh cmUgaW52YWxpZC4NCj4gPiArICBAcmV0dmFsIEVGSV9PVVRfT0ZfUkVTT1VSQ0VTICAgRmFpbGVk IHRvIGFsbG9jYXRlIG1lbW9yeS4NCj4gPiArICBAcmV0dmFsIEVGSV9ERVZJQ0VfRVJST1IgICAg ICAgQW4gdW5leHBlY3RlZCBuZXR3b3JrIG9yIHN5c3RlbSBlcnJvcg0KPiBvY2N1cnJlZC4NCj4g PiArICBAcmV0dmFsIE90aGVycyAgICAgICAgICAgICAgICAgT3RoZXIgZXJyb3JzIGFzIGluZGlj YXRlZC4NCj4gPiArDQo+ID4gKyoqLw0KPiA+ICtFRklfU1RBVFVTDQo+ID4gK0h0dHBJb1JlY3ZS ZXNwb25zZSAoDQo+ID4gKyAgSU4gICAgICBIVFRQX0lPICAgICAgICAgICAgICAgICAgKkh0dHBJ bywNCj4gPiArICBJTiAgICAgIEJPT0xFQU4gICAgICAgICAgICAgICAgICBSZWN2TXNnSGVhZGVy LA0KPiA+ICsgIE9VVCAgICAgSFRUUF9JT19SRVNQT05TRV9EQVRBICAgICpSZXNwb25zZURhdGEN Cj4gPiArICApDQo+ID4gK3sNCj4gPiArICBFRklfU1RBVFVTICAgICAgICAgICAgICAgICBTdGF0 dXM7DQo+ID4gKyAgRUZJX0hUVFBfUFJPVE9DT0wgICAgICAgICAgKkh0dHA7DQo+ID4gKw0KPiA+ ICsgIGlmIChIdHRwSW8gPT0gTlVMTCB8fCBIdHRwSW8tPkh0dHAgPT0gTlVMTCB8fCBSZXNwb25z ZURhdGEgPT0gTlVMTCkgew0KPiA+ICsgICAgcmV0dXJuIEVGSV9JTlZBTElEX1BBUkFNRVRFUjsN Cj4gPiArICB9DQo+ID4gKw0KPiA+ICsgIC8vDQo+ID4gKyAgLy8gQ3JlYXRlIG5ldyBUaW1lb3V0 RXZlbnQgZm9yIHJlc3BvbnNlICAvLyAgaWYNCj4gPiArIChIdHRwSW8tPlRpbWVvdXRFdmVudCAh PSBOVUxMKSB7DQo+ID4gKyAgICBnQlMtPkNsb3NlRXZlbnQgKEh0dHBJby0+VGltZW91dEV2ZW50 KTsNCj4gPiArICAgIEh0dHBJby0+VGltZW91dEV2ZW50ID0gTlVMTDsNCj4gPiArICB9DQo+ID4g Kw0KPiA+ICsgIFN0YXR1cyA9IGdCUy0+Q3JlYXRlRXZlbnQgKA0KPiA+ICsgICAgICAgICAgICAg ICAgICBFVlRfVElNRVIsDQo+ID4gKyAgICAgICAgICAgICAgICAgIFRQTF9DQUxMQkFDSywNCj4g PiArICAgICAgICAgICAgICAgICAgTlVMTCwNCj4gPiArICAgICAgICAgICAgICAgICAgTlVMTCwN Cj4gPiArICAgICAgICAgICAgICAgICAgJkh0dHBJby0+VGltZW91dEV2ZW50DQo+ID4gKyAgICAg ICAgICAgICAgICAgICk7DQo+ID4gKyAgaWYgKEVGSV9FUlJPUiAoU3RhdHVzKSkgew0KPiA+ICsg ICAgcmV0dXJuIFN0YXR1czsNCj4gPiArICB9DQo+IElzIGl0IG5lY2Vzc2FyeSB0byByZWNyZWF0 ZSB0aGUgZXZlbnQ/IFdvdWxkbid0IHRoaXMgYmUgZW5vdWdoIHRvIHJlc2V0IGl0Pw0KTm8sIHdl IGRvbuKAmXQgaGF2ZSB0byByZWNyZWF0ZSB0aGlzIGV2ZW50LiANCj4gDQo+IGdCUy0+U2V0VGlt ZXIgKEh0dHBJby0+VGltZW91dEV2ZW50LCBUaW1lckNhbmNlbCwgMCk7DQpJIG1hZGUgc29tZSBj aGFuZ2VzIGluIHRoaXMgZnVuY3Rpb24uDQo+IA0KPiA+ICsNCj4gPiArICAvLw0KPiA+ICsgIC8v IFN0YXJ0IHRoZSB0aW1lciwgYW5kIHdhaXQgVGltZW91dCBzZWNvbmRzIHRvIHJlY2VpdmUgdGhl IGhlYWRlcg0KPiBwYWNrZXQuDQo+ID4gKyAgLy8NCj4gPiArICBTdGF0dXMgPSBnQlMtPlNldFRp bWVyIChIdHRwSW8tPlRpbWVvdXRFdmVudCwgVGltZXJSZWxhdGl2ZSwNCj4gPiArIEh0dHBJby0+ VGltZW91dCAqIFRJQ0tTX1BFUl9NUyk7ICBpZiAoRUZJX0VSUk9SIChTdGF0dXMpKSB7DQo+ID4g KyAgICByZXR1cm4gU3RhdHVzOw0KPiA+ICsgIH0NCj4gPiArDQo+ID4gKyAgLy8NCj4gPiArICAv LyBRdWV1ZSB0aGUgcmVzcG9uc2UgdG9rZW4gdG8gSFRUUCBpbnN0YW5jZXMuDQo+ID4gKyAgLy8N Cj4gPiArICBIdHRwSW8tPlJzcFRva2VuLlN0YXR1cyAgPSBFRklfTk9UX1JFQURZOyAgaWYgKFJl Y3ZNc2dIZWFkZXIpIHsNCj4gPiArICAgIEh0dHBJby0+UnNwVG9rZW4uTWVzc2FnZS0+RGF0YS5S ZXNwb25zZSA9DQo+ID4gKyAmUmVzcG9uc2VEYXRhLT5SZXNwb25zZTsgIH0gZWxzZSB7DQo+ID4g KyAgICBIdHRwSW8tPlJzcFRva2VuLk1lc3NhZ2UtPkRhdGEuUmVzcG9uc2UgPSBOVUxMOyAgfQ0K PiA+ICsgIEh0dHBJby0+UnNwVG9rZW4uTWVzc2FnZS0+SGVhZGVyQ291bnQgICA9IDA7DQo+ID4g KyAgSHR0cElvLT5Sc3BUb2tlbi5NZXNzYWdlLT5IZWFkZXJzICAgICAgID0gTlVMTDsNCj4gPiAr ICBIdHRwSW8tPlJzcFRva2VuLk1lc3NhZ2UtPkJvZHlMZW5ndGggICAgPSBSZXNwb25zZURhdGEt DQo+ID5Cb2R5TGVuZ3RoOw0KPiA+ICsgIEh0dHBJby0+UnNwVG9rZW4uTWVzc2FnZS0+Qm9keSAg ICAgICAgICA9IFJlc3BvbnNlRGF0YS0+Qm9keTsNCj4gPiArDQo+ID4gKyAgSHR0cCA9IEh0dHBJ by0+SHR0cDsNCj4gPiArICBIdHRwSW8tPklzUnhEb25lID0gRkFMU0U7DQo+ID4gKyAgU3RhdHVz ID0gSHR0cC0+UmVzcG9uc2UgKA0KPiA+ICsgICAgICAgICAgICAgICAgICAgSHR0cCwNCj4gPiAr ICAgICAgICAgICAgICAgICAgICZIdHRwSW8tPlJzcFRva2VuDQo+ID4gKyAgICAgICAgICAgICAg ICAgICApOw0KPiA+ICsNCj4gPiArICBpZiAoRUZJX0VSUk9SIChTdGF0dXMpKSB7DQo+ID4gKyAg ICBnQlMtPlNldFRpbWVyIChIdHRwSW8tPlRpbWVvdXRFdmVudCwgVGltZXJDYW5jZWwsIDApOw0K PiA+ICsgICAgcmV0dXJuIFN0YXR1czsNCj4gPiArICB9DQo+ID4gKw0KPiA+ICsgIC8vDQo+ID4g KyAgLy8gUG9sbCB0aGUgbmV0d29yayB1bnRpbCByZWNlaXZlIGZpbmlzaC4NCj4gPiArICAvLw0K PiA+ICsgIHdoaWxlICghSHR0cElvLT5Jc1J4RG9uZSAmJiAoKEh0dHBJby0+VGltZW91dEV2ZW50 ID09IE5VTEwpIHx8DQo+IEVGSV9FUlJPUiAoZ0JTLT5DaGVja0V2ZW50IChIdHRwSW8tPlRpbWVv dXRFdmVudCkpKSkgew0KPiA+ICsgICAgSHR0cC0+UG9sbCAoSHR0cCk7DQo+ID4gKyAgfQ0KPiA+ ICsNCj4gPiArICBnQlMtPlNldFRpbWVyIChIdHRwSW8tPlRpbWVvdXRFdmVudCwgVGltZXJDYW5j ZWwsIDApOw0KPiA+ICsNCj4gPiArICBpZiAoIUh0dHBJby0+SXNSeERvbmUpIHsNCj4gPiArICAg IC8vDQo+ID4gKyAgICAvLyBUaW1lb3V0IG9jY3VycywgY2FuY2VsIHRoZSByZXNwb25zZSB0b2tl bi4NCj4gPiArICAgIC8vDQo+ID4gKyAgICBIdHRwLT5DYW5jZWwgKEh0dHAsICZIdHRwSW8tPlJz cFRva2VuKTsNCj4gPiArDQo+ID4gKyAgICBTdGF0dXMgPSBFRklfVElNRU9VVDsNCj4gPiArDQo+ ID4gKyAgICByZXR1cm4gU3RhdHVzOw0KPiA+ICsgIH0gZWxzZSB7DQo+ID4gKyAgICBIdHRwSW8t PklzUnhEb25lID0gRkFMU0U7DQo+ID4gKyAgfQ0KPiA+ICsNCj4gPiArICBpZiAoKEh0dHBJby0+ Q2FsbGJhY2sgIT0gTlVMTCkgJiYNCj4gPiArICAgICAgKEh0dHBJby0+UnNwVG9rZW4uU3RhdHVz ID09IEVGSV9TVUNDRVNTIHx8IEh0dHBJby0NCj4gPlJzcFRva2VuLlN0YXR1cyA9PSBFRklfSFRU UF9FUlJPUikpIHsNCj4gPiArICAgIFN0YXR1cyA9IEh0dHBJby0+Q2FsbGJhY2sgKA0KPiA+ICsg ICAgICAgICAgICAgICBIdHRwSW9SZXNwb25zZSwNCj4gPiArICAgICAgICAgICAgICAgSHR0cElv LT5Sc3BUb2tlbi5NZXNzYWdlLA0KPiA+ICsgICAgICAgICAgICAgICBIdHRwSW8tPkNvbnRleHQN Cj4gPiArICAgICAgICAgICAgICAgKTsNCj4gPiArICAgIGlmIChFRklfRVJST1IgKFN0YXR1cykp IHsNCj4gPiArICAgICAgcmV0dXJuIFN0YXR1czsNCj4gPiArICAgIH0NCj4gPiArICB9DQo+ID4g Kw0KPiA+ICsgIC8vDQo+ID4gKyAgLy8gU3RvcmUgdGhlIHJlY2VpdmVkIGRhdGEgaW50byB0aGUg d3JhcHBlci4NCj4gPiArICAvLw0KPiA+ICsgIFJlc3BvbnNlRGF0YS0+U3RhdHVzID0gSHR0cElv LT5Sc3BUb2tlbi5TdGF0dXM7DQo+ID4gKyBSZXNwb25zZURhdGEtPkhlYWRlckNvdW50ID0gSHR0 cElvLT5Sc3BUb2tlbi5NZXNzYWdlLQ0KPiA+SGVhZGVyQ291bnQ7DQo+ID4gKyAgUmVzcG9uc2VE YXRhLT5IZWFkZXJzICAgICA9IEh0dHBJby0+UnNwVG9rZW4uTWVzc2FnZS0+SGVhZGVyczsNCj4g PiArICBSZXNwb25zZURhdGEtPkJvZHlMZW5ndGggID0gSHR0cElvLT5Sc3BUb2tlbi5NZXNzYWdl LQ0KPiA+Qm9keUxlbmd0aDsNCj4gPiArDQo+ID4gKyAgcmV0dXJuIFN0YXR1czsNCj4gPiArfQ0K PiA+ICsNCj4gPiArLyoqDQo+ID4gKyAgR2V0IHRoZSB2YWx1ZSBvZiB0aGUgY29udGVudCBsZW5n dGggaWYgdGhlcmUgaXMgYSAiQ29udGVudC1MZW5ndGgiIGhlYWRlci4NCj4gPiArDQo+ID4gKyAg QHBhcmFtW2luXSAgICBIZWFkZXJDb3VudCAgICAgICAgTnVtYmVyIG9mIEhUVFAgaGVhZGVyIHN0 cnVjdHVyZXMgaW4NCj4gSGVhZGVycy4NCj4gPiArICBAcGFyYW1baW5dICAgIEhlYWRlcnMgICAg ICAgICAgICBBcnJheSBjb250YWluaW5nIGxpc3Qgb2YgSFRUUCBoZWFkZXJzLg0KPiA+ICsgIEBw YXJhbVtvdXRdICAgQ29udGVudExlbmd0aCAgICAgIFBvaW50ZXIgdG8gc2F2ZSB0aGUgdmFsdWUg b2YgdGhlIGNvbnRlbnQNCj4gbGVuZ3RoLg0KPiA+ICsNCj4gPiArICBAcmV0dmFsIEVGSV9TVUND RVNTICAgICAgICAgICAgICBTdWNjZXNzZnVsbHkgZ2V0IHRoZSBjb250ZW50IGxlbmd0aC4NCj4g PiArICBAcmV0dmFsIEVGSV9OT1RfRk9VTkQgICAgICAgICAgICBObyAiQ29udGVudC1MZW5ndGgi IGhlYWRlciBpbiB0aGUNCj4gSGVhZGVycy4NCj4gPiArDQo+ID4gKyoqLw0KPiA+ICtFRklfU1RB VFVTDQo+ID4gK0h0dHBJb0dldENvbnRlbnRMZW5ndGggKA0KPiA+ICsgIElOICAgICBVSU5UTiAg ICAgICAgICAgICAgICBIZWFkZXJDb3VudCwNCj4gPiArICBJTiAgICAgRUZJX0hUVFBfSEVBREVS ICAgICAgKkhlYWRlcnMsDQo+ID4gKyAgT1VUICAgIFVJTlROICAgICAgICAgICAgICAgICpDb250 ZW50TGVuZ3RoDQo+ID4gKyAgKQ0KPiA+ICt7DQo+ID4gKyAgRUZJX0hUVFBfSEVBREVSICAgICAg ICpIZWFkZXI7DQo+ID4gKw0KPiA+ICsgIEhlYWRlciA9IEh0dHBGaW5kSGVhZGVyIChIZWFkZXJD b3VudCwgSGVhZGVycywNCj4gPiArIEhUVFBfSEVBREVSX0NPTlRFTlRfTEVOR1RIKTsgIGlmIChI ZWFkZXIgPT0gTlVMTCkgew0KPiA+ICsgICAgcmV0dXJuIEVGSV9OT1RfRk9VTkQ7DQo+ID4gKyAg fQ0KPiA+ICsNCj4gPiArICByZXR1cm4gQXNjaWlTdHJEZWNpbWFsVG9VaW50blMgKEhlYWRlci0+ RmllbGRWYWx1ZSwgKENIQVI4ICoqKQ0KPiA+ICtOVUxMLCBDb250ZW50TGVuZ3RoKTsgfQ0KPiA+ ICsvKioNCj4gPiArICBTZW5kIEhUVFAgcmVxdWVzdCBpbiBjaHVua3MuDQo+ID4gKw0KPiA+ICsg IEBwYXJhbVtpbl0gICBIdHRwSW8gICAgICAgICAgICAgVGhlIEh0dHBJbyB3cmFwcGluZyB0aGUg SFRUUCBzZXJ2aWNlLg0KPiA+ICsgIEBwYXJhbVtpbl0gICBTZW5kQ2h1bmtQcm9jZXNzICAgUG9p bnRlciB0byBjdXJyZW50IGNodW5rIHByb2Nlc3MNCj4gc3RhdHVzLg0KPiA+ICsgIEBwYXJhbVtp bl0gICBSZXF1ZXN0TWVzc2FnZSAgICAgUmVxdWVzdCB0byBzZW5kLg0KPiA+ICsNCj4gPiArICBA cmV0dmFsIEVGSV9TVUNDRVNTICAgICAgICAgICAgIFN1Y2Nlc3NmdWxseSB0byBzZW5kIGNodW5r IGRhdGEgYWNjb3JkaW5nIHRvDQo+IFNlbmRDaHVua1Byb2Nlc3MuDQo+ID4gKyAgQHJldHZhbCBP dGhlciAgICAgICAgICAgICAgICAgICBPdGhlciBlcnJvcnMuDQo+ID4gKw0KPiA+ICsqKi8NCj4g PiArRUZJX1NUQVRVUw0KPiA+ICtIdHRwSW9TZW5kQ2h1bmtlZFRyYW5zZmVyICgNCj4gPiArICBJ TiAgSFRUUF9JTyAgICAgICAgICAgICAgICAgICAgKkh0dHBJbywNCj4gPiArICBJTiAgSFRUUF9J T19TRU5EX0NIVU5LX1BST0NFU1MgKlNlbmRDaHVua1Byb2Nlc3MsDQo+ID4gKyAgSU4gIEVGSV9I VFRQX01FU1NBR0UgICAgICAgICAgICpSZXF1ZXN0TWVzc2FnZQ0KPiA+ICspDQo+ID4gK3sNCj4g PiArICBFRklfU1RBVFVTIFN0YXR1czsNCj4gPiArICBFRklfSFRUUF9IRUFERVIgKk5ld0hlYWRl cnM7DQo+ID4gKyAgRUZJX0hUVFBfSEVBREVSICpDb250ZW50TGVuZ3RoSGVhZGVyOw0KPiA+ICsg IFVJTlROIEFkZE5ld0hlYWRlcjsNCj4gPiArICBVSU5UTiBIZWFkZXJDb3VudDsNCj4gPiArICBD SEFSOCAqTWVzc2FnZUJvZHk7DQo+ID4gKyAgVUlOVE4gTWVzc2FnZUJvZHlMZW5ndGg7DQo+ID4g KyAgQ0hBUjggQ2h1bmtMZW5ndGhTdHIgW0hUVFBfSU9fQ0hVTktfU0laRV9TVFJJTkdfTEVOXTsN Cj4gPiArICBFRklfSFRUUF9SRVFVRVNUX0RBVEEgKlNlbnRSZXF1ZXN0RGF0YTsNCj4gVGhpcyBp cyBhIG5ldyBmdW5jdGlvbiBhbmQgSSBhbHJlYWR5IHNlZSBhIGRpZmZlcmVuY2UgaW4gdGhlIGNv ZGluZyBzdGFuZGFyZC4NCj4gUGxlYXNlIGFsaWduIHZhcmlhYmxlIG5hbWVzIGxpa2UgaW4gcHJl dmlvdXMgZnVuY3Rpb25zLg0KRG9uZQ0KDQo+ID4gKw0KPiA+ICsgIEFkZE5ld0hlYWRlciA9IDA7 DQo+ID4gKyAgTmV3SGVhZGVycyA9IE5VTEw7DQo+ID4gKyAgTWVzc2FnZUJvZHkgPSBOVUxMOw0K PiA+ICsgIENvbnRlbnRMZW5ndGhIZWFkZXIgPSBOVUxMOw0KPiA+ICsgIE1lc3NhZ2VCb2R5TGVu Z3RoID0gMDsNCj4gQWxpZ25tZW50IG9mIGFzc2lnbm1lbnRzLg0KRG9uZQ0KDQo+ID4gKw0KPiA+ ICsgIHN3aXRjaCAoKlNlbmRDaHVua1Byb2Nlc3MpIHsNCj4gPiArICBjYXNlIEh0dHBJb1NlbmRD aHVua0hlYWRlclplcm9Db250ZW50Og0KPiBDYXNlIHNwYWNpbmc6IDIgc3BhY2VzLiBBcHBsaWVz IHRocm91Z2hvdXQgbmV3IGNvZGUuDQo+ID4gKyAgICAgIENvbnRlbnRMZW5ndGhIZWFkZXIgPQ0K PiA+ICsgSHR0cEZpbmRIZWFkZXIoUmVxdWVzdE1lc3NhZ2UtPkhlYWRlckNvdW50LCBSZXF1ZXN0 TWVzc2FnZS0NCj4gPkhlYWRlcnMsDQo+ID4gKyBIVFRQX0hFQURFUl9DT05URU5UX0xFTkdUSCk7 DQo+IFNwYWNpbmcgYWZ0ZXIgZnVuY3Rpb24gY2FsbCBuYW1lLiBUaGlzIGFwcGxpZXMgZnJvbSB0 aGlzIHBvaW50IHVudGlsIHRoZSBlbmQgb2YNCj4gcGF0Y2guDQpEb25lDQo+ID4gKyAgICAgIGlm IChDb250ZW50TGVuZ3RoSGVhZGVyID09IE5VTEwpIHsNCj4gPiArICAgICAgICBBZGROZXdIZWFk ZXIgPSAxOw0KPiA+ICsgICAgICB9DQo+ID4gKw0KPiA+ICsgICAgICBOZXdIZWFkZXJzID0gQWxs b2NhdGVaZXJvUG9vbCgoUmVxdWVzdE1lc3NhZ2UtPkhlYWRlckNvdW50ICsNCj4gPiArIEFkZE5l d0hlYWRlcikgKiBzaXplb2YoRUZJX0hUVFBfSEVBREVSKSk7DQo+IExhY2sgb2YgTlVMTCBwb2lu dGVyIHRlc3QgZm9yIE5ld0hlYWRlcnMgKG91dCBvZiBtZW1vcnkgY2FzZSkuDQo+ID4gKyAgICAg IENvcHlNZW0gKChWT0lEKilOZXdIZWFkZXJzLCAoVk9JRCAqKVJlcXVlc3RNZXNzYWdlLT5IZWFk ZXJzLA0KPiBSZXF1ZXN0TWVzc2FnZS0+SGVhZGVyQ291bnQgKiBzaXplb2YgKEVGSV9IVFRQX0hF QURFUikpOw0KPiA+ICsgICAgICBpZiAoQWRkTmV3SGVhZGVyID09IDApIHsNCj4gPiArICAgICAg ICAvLw0KPiA+ICsgICAgICAgIC8vIE92ZXJyaWRlIGNvbnRlbnQtbGVuZ3RoIHRvIFRyYW5zZmVy LUVuY29kaW5nLg0KPiA+ICsgICAgICAgIC8vDQo+ID4gKyAgICAgICAgQ29udGVudExlbmd0aEhl YWRlciA9IEh0dHBGaW5kSGVhZGVyIChSZXF1ZXN0TWVzc2FnZS0NCj4gPkhlYWRlckNvdW50LCBO ZXdIZWFkZXJzLCBIVFRQX0hFQURFUl9DT05URU5UX0xFTkdUSCk7DQo+ID4gKyAgICAgICAgQ29u dGVudExlbmd0aEhlYWRlci0+RmllbGROYW1lID0gTlVMTDsNCj4gPiArICAgICAgICBDb250ZW50 TGVuZ3RoSGVhZGVyLT5GaWVsZFZhbHVlID0gTlVMTDsNCj4gPiArICAgICAgfSBlbHNlIHsNCj4g PiArICAgICAgICBDb250ZW50TGVuZ3RoSGVhZGVyID0gTmV3SGVhZGVycyArIFJlcXVlc3RNZXNz YWdlLQ0KPiA+SGVhZGVyQ291bnQ7DQo+ID4gKyAgICAgIH0NCj4gPiArICAgICAgSHR0cFNldEZp ZWxkTmFtZUFuZFZhbHVlKENvbnRlbnRMZW5ndGhIZWFkZXIsDQo+IEhUVFBfSEVBREVSX1RSQU5T RkVSX0VOQ09ESU5HLA0KPiBIVFRQX0hFQURFUl9UUkFOU0ZFUl9FTkNPRElOR19DSFVOS0VEKTsN Cj4gPiArICAgICAgSGVhZGVyQ291bnQgPSBSZXF1ZXN0TWVzc2FnZS0+SGVhZGVyQ291bnQgKyBB ZGROZXdIZWFkZXI7DQo+IE1vdmUgSGVhZGVyQ291bnQgYXNzaWdubWVudCBiZWZvcmUgTmV3SGVh ZGVycyBhbGxvY2F0aW9uLiBVc2UNCj4gSGVhZGVyQ291bnQgYXMgYXJndW1lbnQgZm9yIE5ld0hl YWRlcnMgYWxsb2NhdGlvbi4NCj4gPiArICAgICAgTWVzc2FnZUJvZHlMZW5ndGggPSAwOw0KPiA+ ICsgICAgICBNZXNzYWdlQm9keSA9IE5VTEw7DQo+ID4gKyAgICAgIFNlbnRSZXF1ZXN0RGF0YSA9 IFJlcXVlc3RNZXNzYWdlLT5EYXRhLlJlcXVlc3Q7DQo+ID4gKyAgICAgIGJyZWFrOw0KPiA+ICsN Cj4gPiArICBjYXNlIEh0dHBJb1NlbmRDaHVua0NvbnRlbnQ6DQo+ID4gKyAgICAgIEhlYWRlckNv dW50ID0gMDsNCj4gPiArICAgICAgTmV3SGVhZGVycyA9IE5VTEw7DQo+ID4gKyAgICAgIFNlbnRS ZXF1ZXN0RGF0YSA9IE5VTEw7DQo+ID4gKyAgICAgIGlmIChSZXF1ZXN0TWVzc2FnZS0+Qm9keUxl bmd0aCA+IEhUVFBfSU9fTUFYX1NFTkRfUEFZTE9BRCkgew0KPiA+ICsgICAgICAgIE1lc3NhZ2VC b2R5TGVuZ3RoID0gSFRUUF9JT19NQVhfU0VORF9QQVlMT0FEOw0KPiA+ICsgICAgICB9IGVsc2Ug ew0KPiA+ICsgICAgICAgIE1lc3NhZ2VCb2R5TGVuZ3RoID0gUmVxdWVzdE1lc3NhZ2UtPkJvZHlM ZW5ndGg7DQo+ID4gKyAgICAgIH0NCj4gPiArICAgICAgQXNjaWlTUHJpbnQgKENodW5rTGVuZ3Ro U3RyLCBIVFRQX0lPX0NIVU5LX1NJWkVfU1RSSU5HX0xFTiwNCj4gPiArICIleCVjJWMiLCBNZXNz YWdlQm9keUxlbmd0aCwgQ0hVTktFRF9UUk5BU0ZFUl9DT0RJTkdfQ1IsDQo+ID4gKyBDSFVOS0VE X1RSTkFTRkVSX0NPRElOR19MRik7DQo+IExpbmUgdG9vIGxvbmcsIGJyZWFrIGRvd24gaW4gYWNj b3JkYW5jZSB0byBjb2Rpbmcgc3RhbmRhcmQuDQpEb25lDQoNCj4gPiArICAgICAgTWVzc2FnZUJv ZHkgPSBBbGxvY2F0ZVBvb2wgKEFzY2lpU3RyTGVuIChDaHVua0xlbmd0aFN0cikgKw0KPiBNZXNz YWdlQm9keUxlbmd0aCArIDIpOw0KPiA+ICsgICAgICBpZiAoTWVzc2FnZUJvZHkgPT0gTlVMTCkg ew0KPiA+ICsgICAgICAgIERFQlVHKChERUJVR19FUlJPUiwgIk5vdCBlbm91Z2ggbWVtb3J5IGZv ciBjaHVuaw0KPiB0cmFuc2ZlclxuIikpOw0KPiA+ICsgICAgICAgIHJldHVybiBFRklfT1VUX09G X1JFU09VUkNFUzsNCj4gPiArICAgICAgfQ0KPiA+ICsgICAgICBDb3B5TWVtIChNZXNzYWdlQm9k eSwgQ2h1bmtMZW5ndGhTdHIsIEFzY2lpU3RyTGVuDQo+IChDaHVua0xlbmd0aFN0cikpOw0KPiA+ ICsgICAgICBDb3B5TWVtIChNZXNzYWdlQm9keSArIEFzY2lpU3RyTGVuIChDaHVua0xlbmd0aFN0 ciksDQo+IFJlcXVlc3RNZXNzYWdlLT5Cb2R5LCBNZXNzYWdlQm9keUxlbmd0aCk7DQo+ID4gKyAg ICAgICooTWVzc2FnZUJvZHkgKyBBc2NpaVN0ckxlbiAoQ2h1bmtMZW5ndGhTdHIpICsgTWVzc2Fn ZUJvZHlMZW5ndGgpDQo+ID0gQ0hVTktFRF9UUk5BU0ZFUl9DT0RJTkdfQ1I7DQo+ID4gKyAgICAg ICooTWVzc2FnZUJvZHkgKyBBc2NpaVN0ckxlbiAoQ2h1bmtMZW5ndGhTdHIpICsgTWVzc2FnZUJv ZHlMZW5ndGgNCj4gKyAxKSA9IENIVU5LRURfVFJOQVNGRVJfQ09ESU5HX0xGOw0KPiA+ICsgICAg ICBSZXF1ZXN0TWVzc2FnZS0+Qm9keUxlbmd0aCAtPSBNZXNzYWdlQm9keUxlbmd0aDsNCj4gPiAr ICAgICAgUmVxdWVzdE1lc3NhZ2UtPkJvZHkgPSAoVk9JRCAqKSgoQ0hBUjggKilSZXF1ZXN0TWVz c2FnZS0NCj4gPkJvZHkgKyBNZXNzYWdlQm9keUxlbmd0aCk7DQo+ID4gKyAgICAgIE1lc3NhZ2VC b2R5TGVuZ3RoICs9IChBc2NpaVN0ckxlbiAoQ2h1bmtMZW5ndGhTdHIpICsgMik7DQo+IFRoaXMg YmxvY2sgY291bGQgdXNlIHNvbWUgc3BhY2luZyBhbmQgY29tbWVudHMgdG8gaW1wcm92ZSByZWFk YWJpbGl0eS4NCkRvbmUNCg0KPiA+ICsgICAgICBpZiAoUmVxdWVzdE1lc3NhZ2UtPkJvZHlMZW5n dGggPT0gMCkgew0KPiA+ICsgICAgICAgICpTZW5kQ2h1bmtQcm9jZXNzID0gSHR0cElvU2VuZENo dW5rRW5kQ2h1bms7DQo+ID4gKyAgICAgIH0NCj4gPiArICAgICAgYnJlYWs7DQo+ID4gKw0KPiA+ ICsgIGNhc2UgSHR0cElvU2VuZENodW5rRW5kQ2h1bms6DQo+ID4gKyAgICAgIEhlYWRlckNvdW50 ID0gMDsNCj4gPiArICAgICAgTmV3SGVhZGVycyA9IE5VTEw7DQo+ID4gKyAgICAgIFNlbnRSZXF1 ZXN0RGF0YSA9IE5VTEw7DQo+ID4gKyAgICAgIEFzY2lpU1ByaW50IChDaHVua0xlbmd0aFN0ciwg SFRUUF9JT19DSFVOS19TSVpFX1NUUklOR19MRU4sDQo+ICIwJWMlYyVjJWMiLA0KPiA+ICsgICAg ICAgICAgICAgICAgICAgICAgQ0hVTktFRF9UUk5BU0ZFUl9DT0RJTkdfQ1IsDQo+IENIVU5LRURf VFJOQVNGRVJfQ09ESU5HX0xGLA0KPiA+ICsgICAgICAgICAgICAgICAgICAgICAgQ0hVTktFRF9U Uk5BU0ZFUl9DT0RJTkdfQ1IsDQo+IENIVU5LRURfVFJOQVNGRVJfQ09ESU5HX0xGDQo+ID4gKyAg ICAgICAgICAgICAgICAgICAgICApOw0KPiBQbGVhc2UgYnJlYWsgZnVuY3Rpb24gY2FsbHMgaW4g YWNjb3JkYW5jZSB3aXRoIGNvZGluZyBzdGFuZGFyZC4NCkRvbmUNCj4gPiArICAgICAgTWVzc2Fn ZUJvZHkgPSBBbGxvY2F0ZVBvb2wgKEFzY2lpU3RyTGVuKENodW5rTGVuZ3RoU3RyKSk7DQo+ID4g KyAgICAgIGlmIChNZXNzYWdlQm9keSA9PSBOVUxMKSB7DQo+ID4gKyAgICAgICAgREVCVUcoKERF QlVHX0VSUk9SLCAiTm90IGVub3VnaCBtZW1vcnkgZm9yIHRoZSBlbmQgY2h1bmsNCj4gdHJhbnNm ZXJcbiIpKTsNCj4gPiArICAgICAgICByZXR1cm4gRUZJX09VVF9PRl9SRVNPVVJDRVM7DQo+ID4g KyAgICAgIH0NCj4gPiArICAgICAgQ29weU1lbSAoTWVzc2FnZUJvZHksIENodW5rTGVuZ3RoU3Ry LCBBc2NpaVN0ckxlbg0KPiAoQ2h1bmtMZW5ndGhTdHIpKTsNCj4gPiArICAgICAgTWVzc2FnZUJv ZHlMZW5ndGggPSBBc2NpaVN0ckxlbihDaHVua0xlbmd0aFN0cik7DQo+ID4gKyAgICAgICpTZW5k Q2h1bmtQcm9jZXNzID0gSHR0cElvU2VuZENodW5rRmluaXNoOw0KPiA+ICsgICAgICBicmVhazsN Cj4gPiArDQo+ID4gKyAgZGVmYXVsdDoNCj4gPiArICAgICAgcmV0dXJuIEVGSV9JTlZBTElEX1BB UkFNRVRFUjsNCj4gPiArICB9DQo+ID4gKw0KPiA+ICsgIFN0YXR1cyA9IEh0dHBJb1NlbmRSZXF1 ZXN0KA0KPiA+ICsgICAgICAgICAgICAgICBIdHRwSW8sDQo+ID4gKyAgICAgICAgICAgICAgIFNl bnRSZXF1ZXN0RGF0YSwNCj4gPiArICAgICAgICAgICAgICAgSGVhZGVyQ291bnQsDQo+ID4gKyAg ICAgICAgICAgICAgIE5ld0hlYWRlcnMsDQo+ID4gKyAgICAgICAgICAgICAgIE1lc3NhZ2VCb2R5 TGVuZ3RoLA0KPiA+ICsgICAgICAgICAgICAgICBNZXNzYWdlQm9keQ0KPiA+ICsgICAgICAgICAg ICAgICApOw0KPiA+ICsgIGlmIChDb250ZW50TGVuZ3RoSGVhZGVyICE9IE5VTEwpIHsNCj4gPiAr ICAgIGlmIChDb250ZW50TGVuZ3RoSGVhZGVyLT5GaWVsZE5hbWUgIT0gTlVMTCkgew0KPiA+ICsg ICAgICBGcmVlUG9vbChDb250ZW50TGVuZ3RoSGVhZGVyLT5GaWVsZE5hbWUpOw0KPiA+ICsgICAg fQ0KPiA+ICsgICAgaWYgKENvbnRlbnRMZW5ndGhIZWFkZXItPkZpZWxkVmFsdWUgIT0gTlVMTCkg ew0KPiA+ICsgICAgICBGcmVlUG9vbChDb250ZW50TGVuZ3RoSGVhZGVyLT5GaWVsZFZhbHVlKTsN Cj4gPiArICAgIH0NCj4gPiArICAgIENvbnRlbnRMZW5ndGhIZWFkZXIgPSBOVUxMOw0KPiBOVUxM IGFzc2lnbm1lbnRzIGFyZSBub3QgbmVjZXNzYXJ5IGhlcmUgYXMgd2UgYXJlIGV4aXRpbmcgdGhl IGZ1bmN0aW9uIGFuZA0KPiB0aG9zZSB2YXJpYWJsZXMgd2lsbCBub3QgYmUgdXNlZC4NClJpZ2h0 LCBmaXhlZC4NCj4gPiArICB9DQo+ID4gKyAgaWYgKE5ld0hlYWRlcnMgIT0gTlVMTCkgew0KPiA+ ICsgICAgRnJlZVBvb2woTmV3SGVhZGVycyk7DQo+ID4gKyAgICBOZXdIZWFkZXJzID0gTlVMTDsN Cj4gPiArICB9DQo+ID4gKyAgaWYgKE1lc3NhZ2VCb2R5ICE9IE5VTEwpIHsNCj4gPiArICAgIEZy ZWVQb29sKE1lc3NhZ2VCb2R5KTsNCj4gPiArICAgIE1lc3NhZ2VCb2R5ID0gTlVMTDsNCj4gPiAr ICB9DQo+ID4gKyAgcmV0dXJuIFN0YXR1czsNCj4gPiArfQ0KPiA+ICsNCj4gPiArLyoqDQo+ID4g KyAgU3luY2hyb25vdXNseSByZWNlaXZlIGEgSFRUUCBSRVNQT05TRSBtZXNzYWdlIGZyb20gdGhl IHNlcnZlci4NCj4gPiArDQo+ID4gKyAgQHBhcmFtW2luXSAgIEh0dHBJbyAgICAgICAgICAgVGhl IEh0dHBJbyB3cmFwcGluZyB0aGUgSFRUUCBzZXJ2aWNlLg0KPiA+ICsgIEBwYXJhbVtpbl0gICBI ZWFkZXJDb3VudCAgICAgIE51bWJlciBvZiBoZWFkZXJzIGluIEhlYWRlcnMuDQo+ID4gKyAgQHBh cmFtW2luXSAgIEhlYWRlcnMgICAgICAgICAgQXJyYXkgY29udGFpbmluZyBsaXN0IG9mIEhUVFAg aGVhZGVycy4NCj4gPiArICBAcGFyYW1bb3V0XSAgQ2h1bmtMaXN0SGVhZCAgICBBIHBvaW50ZXIg dG8gcmVjZWl2Y2UgbGlzdCBoZWFkIG9mIGNodW5rZWQNCj4gZGF0YS4NCj4gU3BlbGxpbmc6IHJl Y2VpdmUuDQpGaXhlZC4NCg0KPiA+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENh bGxlciBoYXMgdG8gcmVsZWFzZSBtZW1vcnkgb2YgQ2h1bmtMaXN0SGVhZA0KPiA+ICsgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIGFuZCBhbGwgbGlzdCBlbnRyaWVzLg0KPiA+ICsgIEBw YXJhbVtvdXRdICBDb250ZW50TGVuZ3RoICAgIFRvdGFsIGNvbnRlbnQgbGVuZ3RoDQo+ID4gKw0K PiA+ICsgIEByZXR2YWwgRUZJX1NVQ0NFU1MgICAgICAgICAgICBUaGUgSFRUUCBjaHVua2VkIHRy YW5zZmVyIGlzIHJlY2VpdmVkLg0KPiA+ICsgIEByZXR2YWwgRUZJX05PVF9GT1VORCAgICAgICAg ICBObyBjaHVua2VkIHRyYW5zZmVyIGNvZGluZyBoZWFkZXIgZm91bmQuDQo+ID4gKyAgQHJldHZh bCBFRklfT1VUX09GX1JFU09VUkNFUyAgIEZhaWxlZCB0byBhbGxvY2F0ZSBtZW1vcnkuDQo+ID4g KyAgQHJldHZhbCBFRklfSU5WQUxJRF9QQVJBTUVURVIgIEltcHJvcGVyIHBhcmFtZXRlcnMuDQo+ ID4gKyAgQHJldHZhbCBPdGhlcnMgICAgICAgICAgICAgICAgIE90aGVyIGVycm9ycyBhcyBpbmRp Y2F0ZWQuDQo+ID4gKw0KPiA+ICsqKi8NCj4gPiArRUZJX1NUQVRVUw0KPiA+ICtIdHRwSW9HZXRD aHVua2VkVHJhbnNmZXJDb250ZW50ICgNCj4gPiArICBJTiAgICAgSFRUUF9JTyAgICAgICAgICAg ICAgKkh0dHBJbywNCj4gPiArICBJTiAgICAgVUlOVE4gICAgICAgICAgICAgICAgSGVhZGVyQ291 bnQsDQo+ID4gKyAgSU4gICAgIEVGSV9IVFRQX0hFQURFUiAgICAgICpIZWFkZXJzLA0KPiA+ICsg IE9VVCAgICBMSVNUX0VOVFJZICAgICAgICAgICAqKkNodW5rTGlzdEhlYWQsDQo+ID4gKyAgT1VU ICAgIFVJTlROICAgICAgICAgICAgICAgICpDb250ZW50TGVuZ3RoDQo+ID4gKyAgKQ0KPiA+ICt7 DQo+ID4gKyAgRUZJX0hUVFBfSEVBREVSICAgICAgICpIZWFkZXI7DQo+ID4gKyAgQ0hBUjggICAg ICAgICAgICAgICAgIENodW5rU2l6ZUFzY2lpWzI1Nl07DQo+ID4gKyAgRUZJX1NUQVRVUyAgICAg ICAgICAgIFN0YXR1czsNCj4gPiArICBVSU5UTiAgICAgICAgICAgICAgICAgSW5kZXg7DQo+ID4g KyAgSFRUUF9JT19SRVNQT05TRV9EQVRBIFJlc3BvbnNlRGF0YTsNCj4gPiArICBVSU5UTiAgICAg ICAgICAgICAgICAgVG90YWxMZW5ndGg7DQo+ID4gKyAgTElTVF9FTlRSWSAgICAgICAgICAgICpI dHRwQ2h1bmtzOw0KPiA+ICsgIEhUVFBfSU9fQ0hVTktTICAgICAgICpUaGlzQ2h1bms7DQo+IFZh cmlhYmxlIGFsaWdubWVudC4NCj4gPiArICBMSVNUX0VOVFJZICAgICAgICAgICAgKlRoaXNMaXN0 RW50cnk7DQo+ID4gKw0KPiA+ICsgIGlmIChDaHVua0xpc3RIZWFkID09IE5VTEwgfHwgQ29udGVu dExlbmd0aCA9PSBOVUxMKSB7DQo+ID4gKyAgICByZXR1cm4gRUZJX0lOVkFMSURfUEFSQU1FVEVS Ow0KPiA+ICsgIH0NCj4gPiArDQo+ID4gKyAgKkNvbnRlbnRMZW5ndGggPSAwOw0KPiA+ICsgIEhl YWRlciA9IEh0dHBGaW5kSGVhZGVyIChIZWFkZXJDb3VudCwgSGVhZGVycywNCj4gPiArIEhUVFBf SEVBREVSX1RSQU5TRkVSX0VOQ09ESU5HKTsgIGlmIChIZWFkZXIgPT0gTlVMTCkgew0KPiA+ICsg ICAgcmV0dXJuIEVGSV9OT1RfRk9VTkQ7DQo+ID4gKyAgfQ0KPiA+ICsgIGlmIChBc2NpaVN0ckNt cCAoSGVhZGVyLT5GaWVsZFZhbHVlLA0KPiA+ICsgSFRUUF9IRUFERVJfVFJBTlNGRVJfRU5DT0RJ TkdfQ0hVTktFRCkgPT0gMCkgew0KPiBQbGVhc2UgZG8gYSBuZWdhdGlvbiBjb21wYXJpc29uIGlu c3RlYWQgYW5kIHJldHVybi4gSXQgcmVkdWNlcyBvbmUgbGV2ZWwgb2YNCj4gaW5kZW50YXRpb24u DQpEb25lDQo+ID4gKyAgICAvLw0KPiA+ICsgICAgLy8gTG9vcCB0byBnZXQgYWxsIGNodW5rcy4N Cj4gPiArICAgIC8vDQo+IFBsZWFzZSBhdm9pZCBlbXB0eSBzaW5nbGUtbGluZSBjb21tZW50cyB3 aGVuIHN0YXJ0aW5nIGFuZCBlbmRpbmcNCj4gY29tbWVudCBibG9jay4NCj4gPiArICAgIFRvdGFs TGVuZ3RoID0gMDsNCj4gPiArICAgIEh0dHBDaHVua3MgPSAoTElTVF9FTlRSWSAqKUFsbG9jYXRl WmVyb1Bvb2wgKHNpemVvZiAoTElTVF9FTlRSWSkpOw0KPiA+ICsgICAgaWYgKEh0dHBDaHVua3Mg PT0gTlVMTCkgew0KPiA+ICsgICAgICBTdGF0dXMgPSBFRklfT1VUX09GX1JFU09VUkNFUzsNCj4g PiArICAgICAgZ290byBEZWxldGVyQ2h1bmtzOw0KPiA+ICsgICAgfQ0KPiA+ICsgICAgSW5pdGlh bGl6ZUxpc3RIZWFkIChIdHRwQ2h1bmtzKTsNCj4gQWRkIGEgYml0IG9mIHNwYWNpbmcgYWJvdmUg dG8gaW1wcm92ZSByZWFkYWJpbGl0eS4NCkZpeGVkDQo+ID4gKyAgICBERUJVRyAoKERFQlVHX0lO Rk8sICIgICAgIENodW5rZWQgdHJhbnNmZXJcbiIpKTsNCj4gPiArICAgIHdoaWxlIChUUlVFKSB7 DQo+ID4gKyAgICAgIFplcm9NZW0oKFZPSUQgKikmUmVzcG9uc2VEYXRhLA0KPiBzaXplb2YoSFRU UF9JT19SRVNQT05TRV9EQVRBKSk7DQo+ID4gKyAgICAgIFJlc3BvbnNlRGF0YS5Cb2R5TGVuZ3Ro ID0NCj4gSFRUUF9JT19DSFVOS0VEX1RSQU5TRkVSX0NPRElOR19EQVRBX0xFTkdUSDsNCj4gPiAr ICAgICAgUmVzcG9uc2VEYXRhLkJvZHkgPSBDaHVua1NpemVBc2NpaTsNCj4gPiArICAgICAgU3Rh dHVzID0gSHR0cElvUmVjdlJlc3BvbnNlICgNCj4gPiArICAgICAgICAgICAgICAgICBIdHRwSW8s DQo+ID4gKyAgICAgICAgICAgICAgICAgRkFMU0UsDQo+ID4gKyAgICAgICAgICAgICAgICAgJlJl c3BvbnNlRGF0YQ0KPiA+ICsgICAgICAgICAgICAgICAgICk7DQo+ID4gKyAgICAgIGlmIChFRklf RVJST1IgKFN0YXR1cykpIHsNCj4gPiArICAgICAgICByZXR1cm4gU3RhdHVzOw0KPiA+ICsgICAg ICB9DQo+IFJldHVybmluZyBoZXJlIGNyZWF0ZXMgbWVtb3J5IGxlYWsgcmlzayAtIGNodW5rcyBw cmV2aW91c2x5IHJlY2VpdmVkIHdpbGwgbm90DQo+IGJlIGZyZWVkLg0KRml4ZWQNCj4gPiArICAg ICAgLy8NCj4gPiArICAgICAgLy8gRGVjb2RpbmcgQ2h1bmtlZCBUcmFuc2ZlciBDb2RpbmcuDQo+ ID4gKyAgICAgIC8vIE9ubHkgZGVjb2RlIGNodW5rLXNpemUgYW5kIGxhc3QgY2h1bmsuDQo+ID4g KyAgICAgIC8vDQo+ID4gKyAgICAgIERFQlVHICgoREVCVUdfSU5GTywgIiAgICAgQ2h1bmsgSFRU UCBSZXNwb25zZSBTdGF0dXNDb2RlIC0gJWRcbiIsDQo+IFJlc3BvbnNlRGF0YS5SZXNwb25zZS5T dGF0dXNDb2RlKSk7DQo+ID4gKyAgICAgIC8vDQo+ID4gKyAgICAgIC8vIEJyZWFrIGlmIHRoaXMg aXMgbGFzdCBjaHVuay4NCj4gPiArICAgICAgLy8NCj4gPiArICAgICAgaWYgKENodW5rU2l6ZUFz Y2lpIFswXSA9PSBDSFVOS0VEX1RSTkFTRkVSX0NPRElOR19MQVNUX0NIVU5LKQ0KPiB7DQo+ID4g KyAgICAgICAgU3RhdHVzID0gRUZJX1NVQ0NFU1M7DQo+ID4gKyAgICAgICAgREVCVUcgKChERUJV R19JTkZPLCAiICAgICBMYXN0IGNodW5rXG4iKSk7DQo+ID4gKyAgICAgICAgVGhpc0NodW5rID0g KEhUVFBfSU9fQ0hVTktTICopQWxsb2NhdGVaZXJvUG9vbCAoc2l6ZW9mDQo+IChIVFRQX0lPX0NI VU5LUykpOw0KPiA+ICsgICAgICAgIGlmIChUaGlzQ2h1bmsgPT0gTlVMTCkgew0KPiA+ICsgICAg ICAgICAgU3RhdHVzID0gRUZJX09VVF9PRl9SRVNPVVJDRVM7DQo+ID4gKyAgICAgICAgICBnb3Rv IERlbGV0ZXJDaHVua3M7DQo+ID4gKyAgICAgICAgfQ0KPiA+ICsgICAgICAgIEluaXRpYWxpemVM aXN0SGVhZCAoJlRoaXNDaHVuay0+TmV4dENodW5rKTsNCj4gPiArICAgICAgICBUaGlzQ2h1bmst Pkxlbmd0aCA9IFJlc3BvbnNlRGF0YS5Cb2R5TGVuZ3RoIC0gMSAtIDI7IC8vIE1pbnVzDQo+IHNp emVvZiAnMCcgYW5kIENSTEYuDQo+ID4gKyAgICAgICAgVGhpc0NodW5rLT5EYXRhID0gKENIQVI4 ICopQWxsb2NhdGVQb29sIChUaGlzQ2h1bmstPkxlbmd0aCk7DQo+ID4gKyAgICAgICAgaWYgKFRo aXNDaHVuay0+RGF0YSA9PSBOVUxMKSB7DQo+ID4gKyAgICAgICAgICBGcmVlUG9vbCAoKFVJTlQ4 ICopVGhpc0NodW5rKTsNCj4gPiArICAgICAgICAgIFN0YXR1cyA9IEVGSV9PVVRfT0ZfUkVTT1VS Q0VTOw0KPiA+ICsgICAgICAgICAgZ290byBEZWxldGVyQ2h1bmtzOw0KPiA+ICsgICAgICAgIH0N Cj4gPiArICAgICAgICBDb3B5TWVtICgoVUlOVDggKilUaGlzQ2h1bmstPkRhdGEsIChVSU5UOCAq KVJlc3BvbnNlRGF0YS5Cb2R5DQo+ICsgMSwgVGhpc0NodW5rLT5MZW5ndGgpOw0KPiA+ICsgICAg ICAgIFRvdGFsTGVuZ3RoICs9IFRoaXNDaHVuay0+TGVuZ3RoOw0KPiA+ICsgICAgICAgIEluc2Vy dFRhaWxMaXN0IChIdHRwQ2h1bmtzLCAmVGhpc0NodW5rLT5OZXh0Q2h1bmspOw0KPiA+ICsgICAg ICAgIGJyZWFrOw0KPiA+ICsgICAgICB9DQo+ID4gKw0KPiA+ICsgICAgICAvLw0KPiA+ICsgICAg ICAvLyBHZXQgdGhlIGNodW5rIGxlbmd0aA0KPiA+ICsgICAgICAvLw0KPiA+ICsgICAgICBJbmRl eCA9IDA7DQo+ID4gKyAgICAgIHdoaWxlICgoQ2h1bmtTaXplQXNjaWkgW0luZGV4XSAhPQ0KPiBD SFVOS0VEX1RSTkFTRkVSX0NPRElOR19FWFRFTlNJT05fU0FQRVJBVE9SKSAmJg0KPiA+ICsgICAg ICAgICAgICAgKENodW5rU2l6ZUFzY2lpIFtJbmRleF0gIT0NCj4gPiArIChDSEFSOClDSFVOS0VE X1RSTkFTRkVSX0NPRElOR19DUikgJiYNCj4gU3BlbGxpbmcgZXJyb3JzIGluIG1hY3JvcyBhYm92 ZS4NCk9vcHMuIEJaIGlzIHN1Ym1pdHRlZCBmb3IgdGhpcyB0eXBvIGluIGh0dHAxMS5oLg0KaHR0 cHM6Ly9idWd6aWxsYS50aWFub2NvcmUub3JnL3Nob3dfYnVnLmNnaT9pZD0zMDE5DQpQYXRjaCBp cyBzZXQgdG8gdGhlIG1haWxpbmcgbGlzdCBmb3IgcmV2aWV3Lg0KDQoNCj4gPiArICAgICAgICAg ICAgIChJbmRleCAhPQ0KPiBIVFRQX0lPX0NIVU5LRURfVFJBTlNGRVJfQ09ESU5HX0RBVEFfTEVO R1RIKSkgew0KPiA+ICsgICAgICAgIEluZGV4ICsrOw0KPiA+ICsgICAgICB9Ow0KPiA+ICsgICAg ICBpZiAoSW5kZXggPT0gSFRUUF9JT19DSFVOS0VEX1RSQU5TRkVSX0NPRElOR19EQVRBX0xFTkdU SCkNCj4gew0KPiA+ICsgICAgICAgIHJldHVybiBFRklfTk9UX0ZPVU5EOw0KPiA+ICsgICAgICB9 DQo+IEFnYWluIC0gbWVtb3J5IGxlYWsuDQpGaXhlZA0KDQo+ID4gKyAgICAgIENodW5rU2l6ZUFz Y2lpW0luZGV4XSA9IDA7DQo+ID4gKyAgICAgIEFzY2lpU3RySGV4VG9VaW50blMgKENodW5rU2l6 ZUFzY2lpLCBOVUxMLCBDb250ZW50TGVuZ3RoKTsNCj4gPiArICAgICAgREVCVUcgKChERUJVR19J TkZPLCAiICAgICBMZW5ndGggb2YgdGhpcyBjaHVuayAlZFxuIiwNCj4gKkNvbnRlbnRMZW5ndGgp KTsNCj4gPiArICAgICAgLy8NCj4gPiArICAgICAgLy8gUmVjZWl2ZSB0aGUgZGF0YTsNCj4gPiAr ICAgICAgLy8NCj4gPiArICAgICAgVGhpc0NodW5rID0gKEhUVFBfSU9fQ0hVTktTICopQWxsb2Nh dGVaZXJvUG9vbCAoc2l6ZW9mDQo+IChIVFRQX0lPX0NIVU5LUykpOw0KPiA+ICsgICAgICBpZiAo VGhpc0NodW5rID09IE5VTEwpIHsNCj4gPiArICAgICAgICBTdGF0dXMgPSBFRklfT1VUX09GX1JF U09VUkNFUzsNCj4gPiArICAgICAgICBnb3RvIERlbGV0ZXJDaHVua3M7DQo+ID4gKyAgICAgIH0N Cj4gPiArICAgICAgUmVzcG9uc2VEYXRhLkJvZHlMZW5ndGggPSAqQ29udGVudExlbmd0aDsNCj4g PiArICAgICAgUmVzcG9uc2VEYXRhLkJvZHkgPSAoQ0hBUjggKilBbGxvY2F0ZVBvb2wgKCpDb250 ZW50TGVuZ3RoKTsNCj4gPiArICAgICAgaWYgKFJlc3BvbnNlRGF0YS5Cb2R5ID09IE5VTEwpIHsN Cj4gPiArICAgICAgICBGcmVlUG9vbCAoVGhpc0NodW5rKTsNCj4gPiArICAgICAgICBTdGF0dXMg PSBFRklfT1VUX09GX1JFU09VUkNFUzsNCj4gPiArICAgICAgICBnb3RvIERlbGV0ZXJDaHVua3M7 DQo+ID4gKyAgICAgIH0NCj4gPiArICAgICAgSW5pdGlhbGl6ZUxpc3RIZWFkICgmVGhpc0NodW5r LT5OZXh0Q2h1bmspOw0KPiA+ICsgICAgICBUaGlzQ2h1bmstPkxlbmd0aCA9ICpDb250ZW50TGVu Z3RoOw0KPiA+ICsgICAgICBUaGlzQ2h1bmstPkRhdGEgPSBSZXNwb25zZURhdGEuQm9keTsNCj4g PiArICAgICAgSW5zZXJ0VGFpbExpc3QgKEh0dHBDaHVua3MsICZUaGlzQ2h1bmstPk5leHRDaHVu ayk7DQo+ID4gKyAgICAgIFN0YXR1cyA9IEh0dHBJb1JlY3ZSZXNwb25zZSAoDQo+ID4gKyAgICAg ICAgICAgICAgICAgSHR0cElvLA0KPiA+ICsgICAgICAgICAgICAgICAgIEZBTFNFLA0KPiA+ICsg ICAgICAgICAgICAgICAgICZSZXNwb25zZURhdGENCj4gPiArICAgICAgICAgICAgICAgICApOw0K PiA+ICsgICAgICBpZiAoRUZJX0VSUk9SIChTdGF0dXMpKSB7DQo+ID4gKyAgICAgICAgZ290byBE ZWxldGVyQ2h1bmtzOw0KPiA+ICsgICAgICB9DQo+ID4gKyAgICAgIC8vDQo+ID4gKyAgICAgIC8v IFJlYWQgQ1JMRg0KPiA+ICsgICAgICAvLw0KPiA+ICsgICAgICBaZXJvTWVtKChWT0lEICopJlJl c3BvbnNlRGF0YSwNCj4gc2l6ZW9mKEhUVFBfSU9fUkVTUE9OU0VfREFUQSkpOw0KPiA+ICsgICAg ICBSZXNwb25zZURhdGEuQm9keUxlbmd0aCA9IDI7DQo+ID4gKyAgICAgIFJlc3BvbnNlRGF0YS5C b2R5ID0gQ2h1bmtTaXplQXNjaWk7DQo+ID4gKyAgICAgIFN0YXR1cyA9IEh0dHBJb1JlY3ZSZXNw b25zZSAoDQo+ID4gKyAgICAgICAgICAgICAgICAgSHR0cElvLA0KPiA+ICsgICAgICAgICAgICAg ICAgIEZBTFNFLA0KPiA+ICsgICAgICAgICAgICAgICAgICZSZXNwb25zZURhdGENCj4gPiArICAg ICAgICAgICAgICAgICApOw0KPiA+ICsgICAgICBpZiAoRUZJX0VSUk9SIChTdGF0dXMpKSB7DQo+ ID4gKyAgICAgICAgZ290byBEZWxldGVyQ2h1bmtzOw0KPiA+ICsgICAgICB9DQo+ID4gKw0KPiA+ ICsgICAgICBUb3RhbExlbmd0aCArPSAqQ29udGVudExlbmd0aDsNCj4gVGhlIGZvbGxvd2luZyBj b2RlIHJlcXVpcmVzIHNvbWUga2luZCBvZiBwcm90ZWN0aW9uIGFnYWluc3QgcmVjZWl2aW5nIGFu DQo+IGluZmluaXRlIG51bWJlciBvZiBjaHVua3MuDQo+IEN1cnJlbnRseSBJIGNvdWxkIGp1c3Qg bm90IHNlbmQgYSBsYXN0IGNodW5rIGFuZCB3YWl0IGZvciB0aGUgcGxhdGZvcm0gdG8gY3Jhc2gN Cj4gb3IvYW5kIHJ1biBvdXQgb2YgbWVtb3J5IDopDQo+DQpHb29kIHBvaW50ISBIb3dldmVyLCBJ IGNhbid0IHRoaW5rIG9mIGFueSBnb29kIHdheSB0byBwcmV2ZW50IGZyb20gdGhpcyBoYXBwZW5z LiBUaGlzIGRlcGVuZHMgb24gdGhlIHJlbGlhYmlsaXR5IG9mIGNvbnRlbnQgcHJvdmlkZXIgYW5k IGhvdyB0aGUgd2ViIHNlcnZpY2UgaGFuZGxlcyBjaHVuayB0cmFuc2ZlciwgcmlnaHQ/DQpGcm9t IHN5c3RlbSBmaXJtd2FyZSB2aWV3cG9pbnQsIHdlIHdvdWxkIGNvbm5lY3QgdG8gYSB0cnVzdGVk IGNvbnRlbnQgc291cmNlIGZvciBlaXRoZXIgSFRUUCBib290IGltYWdlIGFuZCBSZWRmaXNoIHNl cnZpY2UgcmVzb3VyY2UuDQpEbyB5b3UgdGhpbmsgdGhpcyBjb25jZXJuIGlzIHZhbGlkIGZvciB0 aGUgcmVhbCBwcmFjdGljZT8NCg0KT3IgZ2l2ZSBpdCBhIGxpbWl0ZWQgc2l6ZSBvZiBwYXlsb2Fk PyBMaWtlIHRoZSBzaXplIGxhcmdlciB0aGFuIDFHIGNvdWxkIGJlIGNvbnNpZGVyZWQgYXMgYW4g aWxsIGNvbnRlbnQ/DQoNCg0KPiA+ICsgICAgfTsNCj4gPiArICAgICpDb250ZW50TGVuZ3RoID0g VG90YWxMZW5ndGg7DQo+ID4gKyAgICAqQ2h1bmtMaXN0SGVhZCA9IEh0dHBDaHVua3M7DQo+ID4g KyAgICBERUJVRyAoKERFQlVHX0lORk8sICIgICAgIFRvdGFsIG9mIGxlbmdoIG9mIGNodW5rcyA6 JWRcbiIsDQo+IFRvdGFsTGVuZ3RoKSk7DQo+ID4gKyAgICByZXR1cm4gRUZJX1NVQ0NFU1M7DQo+ ID4gKyAgfSBlbHNlIHsNCj4gPiArICAgIHJldHVybiBFRklfTk9UX0ZPVU5EOw0KPiA+ICsgIH0N Cj4gPiArRGVsZXRlckNodW5rczo7DQo+IE5hbWUgdGhpcyBsYWJlbCBFeGl0RGVsZXRlQ2h1bmtz IGFuZCByZW1vdmUgdGhlIGNvbW1hLg0KDQo+ID4gKyAgd2hpbGUgKCFJc0xpc3RFbXB0eSAoSHR0 cENodW5rcykpIHsNCj4gPiArICAgIFRoaXNMaXN0RW50cnkgPSBHZXRGaXJzdE5vZGUgKEh0dHBD aHVua3MpOw0KPiA+ICsgICAgUmVtb3ZlRW50cnlMaXN0IChUaGlzTGlzdEVudHJ5KTsNCj4gPiAr ICB9Ow0KPiA+ICsgIHJldHVybiBTdGF0dXM7DQo+ID4gK30NCj4gPiBkaWZmIC0tZ2l0IGEvTmV0 d29ya1BrZy9MaWJyYXJ5L0R4ZUh0dHBJb0xpYi9EeGVIdHRwSW9MaWIuaW5mDQo+ID4gYi9OZXR3 b3JrUGtnL0xpYnJhcnkvRHhlSHR0cElvTGliL0R4ZUh0dHBJb0xpYi5pbmYNCj4gPiBuZXcgZmls ZSBtb2RlIDEwMDY0NA0KPiA+IGluZGV4IDAwMDAwMDAwMDAuLmEwMmI0MDk1NDcNCj4gPiAtLS0g L2Rldi9udWxsDQo+ID4gKysrIGIvTmV0d29ya1BrZy9MaWJyYXJ5L0R4ZUh0dHBJb0xpYi9EeGVI dHRwSW9MaWIuaW5mDQo+ID4gQEAgLTAsMCArMSw0MyBAQA0KPiA+ICsjIyBAZmlsZQ0KPiA+ICsj ICBUaGlzIGxpYnJhcnkgaW5zdGFuY2UgcHJvdmlkZXMgSFRUUCBJTyBoZWxwZXIgZnVuY3Rpb25z Lg0KPiA+ICsjDQo+ID4gKyMgIChDKSBDb3B5cmlnaHQgMjAyMCBIZXdsZXR0IFBhY2thcmQgRW50 ZXJwcmlzZSBEZXZlbG9wbWVudCBMUDxCUj4gIw0KPiA+ICtTUERYLUxpY2Vuc2UtSWRlbnRpZmll cjogQlNELTItQ2xhdXNlLVBhdGVudCAjICMjDQo+ID4gKw0KPiA+ICtbRGVmaW5lc10NCj4gPiAr ICBJTkZfVkVSU0lPTiAgICAgICAgICAgICAgICAgICAgPSAweDAwMDEwMDFiDQo+ID4gKyAgQkFT RV9OQU1FICAgICAgICAgICAgICAgICAgICAgID0gRHhlSHR0cElvTGliDQo+ID4gKyAgTU9EVUxF X1VOSV9GSUxFICAgICAgICAgICAgICAgID0gRHhlSHR0cElvTGliLnVuaQ0KPiA+ICsgIEZJTEVf R1VJRCAgICAgICAgICAgICAgICAgICAgICA9IDUwQjE5OEY4LTc5ODYtNEY1MS1BODU3LUNGRTQ2 NDNENTlGMw0KPiA+ICsgIE1PRFVMRV9UWVBFICAgICAgICAgICAgICAgICAgICA9IERYRV9EUklW RVINCj4gPiArICBWRVJTSU9OX1NUUklORyAgICAgICAgICAgICAgICAgPSAxLjANCj4gPiArICBM SUJSQVJZX0NMQVNTICAgICAgICAgICAgICAgICAgPSBIdHRwSW9MaWJ8IERYRV9DT1JFIERYRV9E UklWRVINCj4gRFhFX1JVTlRJTUVfRFJJVkVSIERYRV9TTU1fRFJJVkVSIFVFRklfQVBQTElDQVRJ T04NCj4gVUVGSV9EUklWRVINCj4gPiArDQo+ID4gKyMNCj4gPiArIyBUaGUgZm9sbG93aW5nIGlu Zm9ybWF0aW9uIGlzIGZvciByZWZlcmVuY2Ugb25seSBhbmQgbm90IHJlcXVpcmVkIGJ5IHRoZQ0K PiBidWlsZCB0b29scy4NCj4gPiArIw0KPiA+ICsjICBWQUxJRF9BUkNISVRFQ1RVUkVTICAgICAg ICAgICA9IElBMzIgWDY0IEVCQyBBUk0gQUFSTTY0IFJJU0NWNjQNCj4gPiArIw0KPiA+ICsNCj4g PiArW1NvdXJjZXNdDQo+ID4gKyAgRHhlSHR0cElvTGliLmMNCj4gPiArDQo+ID4gK1tQYWNrYWdl c10NCj4gPiArICBNZGVQa2cvTWRlUGtnLmRlYw0KPiA+ICsgIE5ldHdvcmtQa2cvTmV0d29ya1Br Zy5kZWMNCj4gPiArDQo+ID4gKw0KPiA+ICtbTGlicmFyeUNsYXNzZXNdDQo+ID4gKyAgQmFzZUxp Yg0KPiA+ICsgIEJhc2VNZW1vcnlMaWINCj4gPiArICBEZWJ1Z0xpYg0KPiA+ICsgIERwY0xpYg0K PiA+ICsgIE1lbW9yeUFsbG9jYXRpb25MaWINCj4gPiArICBQcmludExpYg0KPiA+ICsgIFVlZmlC b290U2VydmljZXNUYWJsZUxpYg0KPiA+ICsNCj4gPiArW1Byb3RvY29sc10NCj4gPiArICBnRWZp SHR0cFByb3RvY29sR3VpZCAgICAgICAgICAgICAjIyBTT01FVElNRVNfQ09OU1VNRVMNCj4gPiAr DQo+ID4gZGlmZiAtLWdpdCBhL05ldHdvcmtQa2cvTGlicmFyeS9EeGVIdHRwSW9MaWIvRHhlSHR0 cElvTGliLnVuaQ0KPiA+IGIvTmV0d29ya1BrZy9MaWJyYXJ5L0R4ZUh0dHBJb0xpYi9EeGVIdHRw SW9MaWIudW5pDQo+ID4gbmV3IGZpbGUgbW9kZSAxMDA2NDQNCj4gPiBpbmRleCAwMDAwMDAwMDAw Li5kNDE5YjFhNDlkDQo+ID4gLS0tIC9kZXYvbnVsbA0KPiA+ICsrKyBiL05ldHdvcmtQa2cvTGli cmFyeS9EeGVIdHRwSW9MaWIvRHhlSHR0cElvTGliLnVuaQ0KPiA+IEBAIC0wLDAgKzEsMTMgQEAN Cj4gPiArLy8gLyoqIEBmaWxlDQo+ID4gKy8vIFRoZSBsaWJyYXJ5IGluc3RhbmNlIHByb3ZpZGVz IEhUVFAgSU8gaGVscGVyIGZ1bmN0aW9ucy4NCj4gPiArLy8NCj4gPiArLy8gKEMpIENvcHlyaWdo dCAyMDIwIEhld2xldHQgUGFja2FyZCBFbnRlcnByaXNlIERldmVsb3BtZW50IExQPEJSPg0KPiA+ ICsvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQlNELTItQ2xhdXNlLVBhdGVudCAvLyAvLyAq Ki8NCj4gPiArDQo+ID4gKw0KPiA+ICsjc3RyaW5nIFNUUl9NT0RVTEVfQUJTVFJBQ1QgICAgICAg ICAgICAgI2xhbmd1YWdlIGVuLVVTICJIVFRQIElPIEhlbHBlcg0KPiBMaWJyYXJ5Ig0KPiA+ICsN Cj4gPiArI3N0cmluZyBTVFJfTU9EVUxFX0RFU0NSSVBUSU9OICAgICAgICAgICNsYW5ndWFnZSBl bi1VUyAiVGhlIGxpYnJhcnkNCj4gaW5zdGFuY2UgcHJvdmlkZXMgSFRUUCBJTyBoZWxwZXIgZnVu Y3Rpb25zLiINCj4gPiArDQoNCg==