From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from mga03.intel.com (mga03.intel.com [134.134.136.65]) by mx.groups.io with SMTP id smtpd.web08.10097.1636684728984899072 for ; Thu, 11 Nov 2021 18:38:49 -0800 Authentication-Results: mx.groups.io; dkim=pass header.i=@intel.onmicrosoft.com header.s=selector2-intel-onmicrosoft-com header.b=G3bTqXcG; spf=pass (domain: intel.com, ip: 134.134.136.65, mailfrom: min.m.xu@intel.com) X-IronPort-AV: E=McAfee;i="6200,9189,10165"; a="233005201" X-IronPort-AV: E=Sophos;i="5.87,227,1631602800"; d="scan'208";a="233005201" Received: from fmsmga007.fm.intel.com ([10.253.24.52]) by orsmga103.jf.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 11 Nov 2021 18:38:48 -0800 X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="5.87,227,1631602800"; d="scan'208";a="502282462" Received: from fmsmsx605.amr.corp.intel.com ([10.18.126.85]) by fmsmga007.fm.intel.com with ESMTP; 11 Nov 2021 18:38:47 -0800 Received: from fmsmsx612.amr.corp.intel.com (10.18.126.92) by fmsmsx605.amr.corp.intel.com (10.18.126.85) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.2242.12; Thu, 11 Nov 2021 18:38:47 -0800 Received: from fmsmsx605.amr.corp.intel.com (10.18.126.85) by fmsmsx612.amr.corp.intel.com (10.18.126.92) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.2242.12; Thu, 11 Nov 2021 18:38:47 -0800 Received: from fmsedg602.ED.cps.intel.com (10.1.192.136) by fmsmsx605.amr.corp.intel.com (10.18.126.85) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.2242.12 via Frontend Transport; Thu, 11 Nov 2021 18:38:47 -0800 Received: from NAM11-BN8-obe.outbound.protection.outlook.com (104.47.58.171) 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.2242.12; Thu, 11 Nov 2021 18:38:46 -0800 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=FW3hQQ77gDJGd+tqzWNVO/bQ94hJz3ME0I96oE5tPVnWRF6oAOv4ZG8/hd6faIU5JmXxAVwofiIosR0XjQ2TsALeTeErfu/s2bO3VEvIQEEnOViaN/G58XJNUlwqCJWFv0A6gb9zjyPtsB9LMltghoO7QAQcdm/txAhV1YxzcFqgeHTs5WymGu7URVsNvLY083EVj2Sl/ZFPPVpbAbl/6C/N7Fqu2mf9ymdJEfG1xhgCTdTrO4B5EbtzS4CmkKAZALa49zfywKDhOGFaRbJKqqnSKS3MNj4fXxg6uVxBL6O6YpVZSpELgj+yio+BnkU1Kg6No6WSlY4Ly0grYEiBGw== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector9901; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-AntiSpam-MessageData-ChunkCount:X-MS-Exchange-AntiSpam-MessageData-0:X-MS-Exchange-AntiSpam-MessageData-1; bh=Au6eFEtlDsYe4lUZNpA4v1KET/rPr+24aNsJwSDXeTk=; b=G0Uo5bGFz1b1tSm/J4o08JskzE2QSUw05QEYGrr4K8a19yWg7CNdJsT5IAwgEgthl4WrR1HSTNj37wHDdIcyw2CZrj0s02PryUvFanf/QkKRXrm8wXY75xfe3dbZafQ4SiVkh5VvnLcv2uwJRPfa9GceWZf7xi71D+/fyB0SgxpZfPBFPfivIw1LEYnzzmFQXaPVYzq5ySD/kT0DtVymD/jPZrCTt/P4x3TvWs6gEk5O5tu6K5n9u3BrCfrRiBqF+pDy77Ce22saShZHNwvaBkaGh+i2Up2mVpt0dNSTSw62UoIFueAP2vdJxyrKviGFCZx284zT0u4wVDxGRMOfGA== 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=Au6eFEtlDsYe4lUZNpA4v1KET/rPr+24aNsJwSDXeTk=; b=G3bTqXcGfMYKz6Nrk0T+zPAQ0kTWMcr/D6zsxy1245FzElaTDUJoUue88oqF5yqvGzuF3PB9pheC2zDLF5c2KgNAcBobIlKfpreadHsOt1XCbMHqO9bzO80osWw/3QQyW0watTIUlb1NwkFLJM5Jxf3DoQr2iOmLn/NlizG+q90= Received: from CO1PR11MB5058.namprd11.prod.outlook.com (2603:10b6:303:99::17) by MWHPR11MB1630.namprd11.prod.outlook.com (2603:10b6:301:e::7) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.4669.11; Fri, 12 Nov 2021 02:38:45 +0000 Received: from CO1PR11MB5058.namprd11.prod.outlook.com ([fe80::49d5:fe9f:6dd9:8f95]) by CO1PR11MB5058.namprd11.prod.outlook.com ([fe80::49d5:fe9f:6dd9:8f95%9]) with mapi id 15.20.4649.023; Fri, 12 Nov 2021 02:38:45 +0000 From: "Min Xu" To: Erdem Aktas CC: "devel@edk2.groups.io" , "Kinney, Michael D" , Liming Gao , "Liu, Zhiguang" , Brijesh Singh , James Bottomley , "Yao, Jiewen" , Tom Lendacky , Gerd Hoffmann Subject: Re: [PATCH V3 02/29] MdePkg: Add TdxLib to wrap Tdx operations Thread-Topic: [PATCH V3 02/29] MdePkg: Add TdxLib to wrap Tdx operations Thread-Index: AQHXzyK7o5BT5Qs88kmpsZzaPIaVJqv8n86AgAFZdvA= Date: Fri, 12 Nov 2021 02:38:44 +0000 Message-ID: References: <232162e8ee92888f7ac9795ee9baa331ea39c613.1635769996.git.min.m.xu@intel.com> In-Reply-To: Accept-Language: en-US X-MS-Has-Attach: X-MS-TNEF-Correlator: dlp-product: dlpe-windows dlp-reaction: no-action dlp-version: 11.6.200.16 authentication-results: google.com; dkim=none (message not signed) header.d=none;google.com; dmarc=none action=none header.from=intel.com; x-ms-publictraffictype: Email x-ms-office365-filtering-correlation-id: 5ac8d7c4-8108-4e12-4b79-08d9a5858c47 x-ms-traffictypediagnostic: MWHPR11MB1630: x-microsoft-antispam-prvs: x-ms-oob-tlc-oobclassifiers: OLM:9508; x-ms-exchange-senderadcheck: 1 x-ms-exchange-antispam-relay: 0 x-microsoft-antispam: BCL:0; x-microsoft-antispam-message-info: SJSwvm4bPgBNbTSYxiOSr7aD2pjDbXxfhTohxZuTAoYq6T8P3XTyxnzehHN/8PD8rRn5VFi4+34fV99U6rvVW20h0VrWYj8CmyVxLRVhnNcXDh8sHDyifTwlEwGe+VVOkf3V/c7wjDzXe45aYJH9OhMPquZq+hvm0BzBXQuSsLNu7OtPIXITUt3M1ZPAm05EwEtGRkOd9eStdlkTGB7lGCHrkLD888542Z8yHGO3X781bXbT4uYWlX93/4hSiIa5T+SaNAQ8+tDeDY/eJ58I5CCT2vgltmVksTzrZ5IoaKyHZ6kqYitXlzFjvpPEQaFwJEzqH0zvYsCbliPbHW11uAZt39E5S4XQUHFTh5hgTR6txwTjOQCcMxSCpYj3AK+THlOQELKI3APveEd66BcntySQR15q2fCUh5NSXCIPL/+d5f3CDD/46pOLnQbw5fE2I73uxj4guRG7o93M5tNj+LWMfX27Zn9u6fFz1VMSmJvkGxZoSp5Ic3k/qu5GP9vSz8/mTRLtj6JeAjGWiDaJTe3bAShnDlqYXYMgXezfO2QCyyMdLN7CcYDrrjqRxt/J8+IjpKloDJEV2mHk/tKG8SeNEnx1xcMhxYmSxsNOq3rxeM9xqVlnrVAgfUgdgMxK8DnXJQ04pg02ABCGea9anExAiB1d4ZwWW3XJvAWP+UawXcOBZP6csjhAXtoVcJgZhbWj1N/ZVbiRkwWrj3RzEJcNT4gJBzdWf1/Hh2IzFvqxtCEz+vieEQ+mlHtoX2KHfKwUsvIMnygwstaE4Bosub7heFCqqVq7DutIYIhhmQJMWO9HRB/2Geh0ERhvDrNQjAthq031I36J9dPMFcw/AA== x-forefront-antispam-report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:CO1PR11MB5058.namprd11.prod.outlook.com;PTR:;CAT:NONE;SFS:(366004)(316002)(82960400001)(6916009)(83380400001)(26005)(55016002)(52536014)(122000001)(66476007)(966005)(7696005)(64756008)(76116006)(66446008)(33656002)(8676002)(8936002)(508600001)(66556008)(38100700002)(9686003)(53546011)(66946007)(38070700005)(6506007)(71200400001)(86362001)(2906002)(54906003)(186003)(5660300002)(4326008);DIR:OUT;SFP:1102; x-ms-exchange-antispam-messagedata-chunkcount: 1 x-ms-exchange-antispam-messagedata-0: =?utf-8?B?cHdSc1NOUUVhQ2pqL3J4TnVVd211YXJ5MXRvT01OSDlBdGRxQU41dU4rekla?= =?utf-8?B?TzZqNUkvNWJTWTZWT0lZcmNOMktCMVRFZHhoK3dMbThrU0ZzbTd1NkUyOWZ2?= =?utf-8?B?V0ZZbktKQmwrOXArbmNZb0hjeWF3QlVFeUNQMm5kOUZ6dlN2TTRNbUN6TlBD?= =?utf-8?B?T2ViNFc2MnJ1VmVRM1ZvV1ZNZXpmaUpOc3g4cS9mRHdxQkl0Y1M2bGFOVTFB?= =?utf-8?B?eUUyaTRWcUNCbU9qK2hBNlFCMmR3RFdGWE1SODJVRHR2RUwvR1NWeVRSZWZI?= =?utf-8?B?d09GWFh1UlBmWVhwOXlKa2RCTHRrNEpRL2NGMGwxY3VxMHJRaDFPV1N0UEQv?= =?utf-8?B?Tm1qc2RQdm1WVmdSR21OSUM1TG1aWko1RTNzQTZMaW5uMzBLdTIra2h2QUp3?= =?utf-8?B?eEUya3JuT1JsaHY1bVJCNzJobDkrMlJSRUlmVHl4UEQ1MGpJRi95bGhjemp4?= =?utf-8?B?OGRzcW52cEovZkdhTEloQjRrOWZCdUFMRFJocVZCSTd2SWdWZEQ0bmZzcGlv?= =?utf-8?B?UWlPVXR1OU1KMytTaEtLZGVtY2liSFZva2pjeWd5UCtEM1I5c3EzKzRMSStR?= =?utf-8?B?R1VKMnROT3RZS3BkdjBzNkR2djMxZHpwQnpvUUl1UnFoWEFhU0IzSXdzRjlr?= =?utf-8?B?ME1jYXp1NjF1YXhoTU5hcmVzdmdRZEp3QTJpMXpzYW5uK2l3a1RZL3lkazZF?= =?utf-8?B?emduczMyQkZUV0p6RnRkdlppaEFXMXV4WnlJNmJ2aVNocEtTbUZVblJnRGJF?= =?utf-8?B?eXdreTNCUmhuK0drNmdCNDVVdi9ZdDA0QVBpd29oMGQ3K2RnNU1ZOWRDY1RH?= =?utf-8?B?MXVFcGV5UFpzLzlYVkJ5a0FQY0dGakhQQ0dOS3dONnJQQUJhV0lqd1JNRDNX?= =?utf-8?B?VlllTGZPanVEUFg1c2M3Y1hnY2JZZE1ZY2VpdGc0Y1E0MWQ2QjFlbGJDNDNW?= =?utf-8?B?MlVNU3pEYUlaa2xvOFhRSWFqY21XT2g5SVUxdkg2WTVKckxudlRZMHluTFJB?= =?utf-8?B?UC9IWDVrSHAxWlZBYjV5OWRpQzQyYzBxd1huNmZES0xEVnlacVJBVDhVaUVB?= =?utf-8?B?amxRV2s1Nlg2QmcvVWtIK3h3MFQ4NkZQZkpJdEhtUmhMUTJjdDlyeHJkQ0lx?= =?utf-8?B?OXNlUjg5YkxCeE9ZeE1aSVZVSFAwSGhrc1pqcmlScjdpSjZ4RnBNdEN2cE4w?= =?utf-8?B?dzJCZGJkNGMxZ05yaDh0YWZJKy90NDVUQkZONTMzdHhKVW9MdWl4RStnUHEv?= =?utf-8?B?MGZ1dEdhZ2J3cEJRWkM2b1JKWTZGV1dDcE9zUDJDNEhLUTRhOTVXUnhvbStV?= =?utf-8?B?WjdTcnVDZ09xZWc1K08zdHYraU50d0ZCM2UyNXhJdDdKcnNSYUJBZWZzS2hT?= =?utf-8?B?L0RySTh3SzJVckVDZTMrSDYrdlk0NmNNWnlERVNibkxCWGhURHVwZHJBZ0Ez?= =?utf-8?B?anNWTFV3cUFiYjVKRjltQnVGRmF3Zm1ueW5xL0NuRDY5UXZERkpqY0o1Z29S?= =?utf-8?B?SjA1T0tqNjBNb2xubUlTNjFVbDV6YzBxVCthWGZmR3FPbDUvMDBEa28rUE5F?= =?utf-8?B?Y01xTlcvM0I3NDE1V0dNTnhENW1TNFJPSXlHNGZ2VmpyK3kxYnkvTXJ4UkNa?= =?utf-8?B?a1dkY1VSRG9LR0N4a1NXQmNQN2xhblFzdEtQNUQxQzNmWWRtWjBBMEdoS2Ri?= =?utf-8?B?K0tIWmhac1p3WlRwTVdrVkpoajFKbnhHdmR1NUkzVG1qbEtwWTBudmo5YXlh?= =?utf-8?B?NEhXSkxMUzNuMnEzMmRJdGtra0ovS2dNTFJPdEN6eEY3c2NWd2pXbGloZnFl?= =?utf-8?B?WTA2TEVBT3hUc0lLQ1U5YWEwZENQaS9CelNpMnB2QllxMTdwMnRtVmFMc2xB?= =?utf-8?B?VTd3MjdjUE1aM3BPQUdkNjJuUTlydTd1cnI1Lzd3UW9kcmV4RklKNHp1WW5R?= =?utf-8?B?SVJYbkpjQTdsbDl1NXQva0YyZ20zWHhVUHRuZzltamJzS2EvRXhZRXV4WGFY?= =?utf-8?B?RVFmcDZMa010UTlkOXVXbmp1aW9QSVVOa1dOUFNpREIwTjVkWjhFRHdIUzZP?= =?utf-8?B?Ni8wcTV5dzNHNXBxL25ITGtCNWlMdUMySjFSdzl1UGJ5RnhmQmZKZXZTRVM1?= =?utf-8?B?NGp5UHhFb1B4V2ErUm1VYUVFRWlzWXBZYnVDaWdTb000N2xjWHNlUXNlZGgr?= =?utf-8?B?ZXc9PQ==?= MIME-Version: 1.0 X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-AuthSource: CO1PR11MB5058.namprd11.prod.outlook.com X-MS-Exchange-CrossTenant-Network-Message-Id: 5ac8d7c4-8108-4e12-4b79-08d9a5858c47 X-MS-Exchange-CrossTenant-originalarrivaltime: 12 Nov 2021 02:38:45.1336 (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: ENuDoO2yIfu1tOcuQruk9BGjPK//14iwi5rOFpqva6J/4Z0ilsKv6B7OCoJCdUKpSsWiXN46qt1HoO4RIgd1Jg== X-MS-Exchange-Transport-CrossTenantHeadersStamped: MWHPR11MB1630 Return-Path: min.m.xu@intel.com X-OriginatorOrg: intel.com Content-Language: en-US Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 T24gTm92ZW1iZXIgMTAsIDIwMjEgNjozOCBQTSwgRXJkZW0gQWt0YXMgd3JvdGU6DQo+IE9uIE1v biwgTm92IDEsIDIwMjEgYXQgNjoxNiBBTSBNaW4gWHUgPG1pbi5tLnh1QGludGVsLmNvbT4gd3Jv dGU6DQo+ID4NCj4gPiBSRkM6IGh0dHBzOi8vYnVnemlsbGEudGlhbm9jb3JlLm9yZy9zaG93X2J1 Zy5jZ2k/aWQ9MzQyOQ0KPiA+DQo+IC4uLi4NCj4gPiArKiovDQo+ID4gK1VJTlQzMg0KPiA+ICtH ZXRHcGFQYWdlTGV2ZWwgKA0KPiA+ICsgIFVJTlQzMiBQYWdlU2l6ZQ0KPiA+ICsgICkNCj4gPiAr ew0KPiA+ICsgIFVJTlQzMiBJbmRleDsNCj4gPiArDQo+ID4gKyAgZm9yIChJbmRleCA9IDA7IElu ZGV4IDwgQVJSQVlfU0laRSAobVRkeEFjY2VwdFBhZ2VMZXZlbE1hcCk7IEluZGV4KyspDQo+IHsN Cj4gPiArICAgIGlmIChtVGR4QWNjZXB0UGFnZUxldmVsTWFwW0luZGV4XSA9PSBQYWdlU2l6ZSkg ew0KPiA+ICsgICAgICBicmVhazsNCj4gPiArICAgIH0NCj4gPiArICB9DQo+ID4gKw0KPiA+ICsg IHJldHVybiBJbmRleCA9PSBBUlJBWV9TSVpFIChtVGR4QWNjZXB0UGFnZUxldmVsTWFwKSA/IC0x IDogSW5kZXg7DQo+IA0KPiBJcyB0aGlzIGludGVudGlvbmFsPyBSZXR1cm5pbmcgc2lnbmVkIGlu dGVnZXIgYnV0IHRoZSBmdW5jdGlvbiByZXR1cm5zDQo+IHVuc2lnbmVkIGludGVnZXIuDQpBaCwg LTEgc2hvdWxkIG5vdCBiZSByZXR1cm5lZCBiZWNhdXNlIHRoZSBmdW5jdGlvbiByZXR1cm5zIHVu c2lnbmVkIGludGVnZXIuDQpJdCB3aWxsIGJlIGZpeGVkIGluIHRoZSBuZXh0IHZlcnNpb24gbGlr ZSB0aGlzOg0KDQpVSU5UMzIgIG1UZHhBY2NlcHRQYWdlTGV2ZWxNYXBbMl0gPSB7DQogIFNJWkVf NEtCLA0KICBTSVpFXzJNQg0KfTsNCiNkZWZpbmUgSU5WQUxJRF9BQ0NFUFRfUEFHRUxFVkVMICBB UlJBWV9TSVpFKG1UZHhBY2NlcHRQYWdlTGV2ZWxNYXApDQoNClVJTlQzMg0KR2V0R3BhUGFnZUxl dmVsICgNCiAgVUlOVDMyIFBhZ2VTaXplDQogICkNCnsNCiAgVUlOVDMyIEluZGV4Ow0KICBmb3Ig KEluZGV4ID0gMDsgSW5kZXggPCBBUlJBWV9TSVpFIChtVGR4QWNjZXB0UGFnZUxldmVsTWFwKTsg SW5kZXgrKykgew0KICAgIGlmIChtVGR4QWNjZXB0UGFnZUxldmVsTWFwW0luZGV4XSA9PSBQYWdl U2l6ZSkgew0KICAgICAgYnJlYWs7DQogICAgfQ0KICB9DQogIHJldHVybiBJbmRleDsNCn0NCi4u LiAuLi4NCiAgR3BhUGFnZUxldmVsID0gR2V0R3BhUGFnZUxldmVsIChQYWdlU2l6ZSk7DQogIGlm IChHcGFQYWdlTGV2ZWwgPT0gSU5WQUxJRF9BQ0NFUFRfUEFHRUxFVkVMKSB7DQogICAgREVCVUcg KChERUJVR19FUlJPUiwgIkFjY2VwdCBwYWdlIHNpemUgbXVzdCBiZSA0Sy8yTS4gSW52YWxpZCBw YWdlIHNpemUgLSAweCVsbHhcbiIsIFBhZ2VTaXplKSk7DQogICAgcmV0dXJuIEVGSV9JTlZBTElE X1BBUkFNRVRFUjsNCiAgfQ0KPiANCj4gKy8qKg0KPiArICBUaGlzIGZ1bmN0aW9uIGFjY2VwdHMg YSBwZW5kaW5nIHByaXZhdGUgcGFnZSwgYW5kIGluaXRpYWxpemUgdGhlIHBhZ2UNCj4gK3RvDQo+ ICsgIGFsbC0wIHVzaW5nIHRoZSBURCBlcGhlbWVyYWwgcHJpdmF0ZSBrZXkuDQo+ICsNCj4gKyAg QHBhcmFtW2luXSAgU3RhcnRBZGRyZXNzICAgICBHdWVzdCBwaHlzaWNhbCBhZGRyZXNzIG9mIHRo ZSBwcml2YXRlIHBhZ2UNCj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0byBhY2Nl cHQuDQo+ICsgIEBwYXJhbVtpbl0gIE51bWJlck9mUGFnZXMgICAgTnVtYmVyIG9mIHRoZSBwYWdl cyB0byBiZSBhY2NlcHRlZC4NCj4gKyAgQHBhcmFtW2luXSAgUGFnZVNpemUgICAgICAgICBHUEEg cGFnZSBzaXplLiBBY2NlcHQgMUcvMk0vNEsgcGFnZSBzaXplLg0KPiANCj4gVGhlIGNvbW1lbnQg c2F5cyB0aGF0IDFHIGlzIGFjY2VwdGFibGUgYnV0IHRoZSBjb2RlIG9ubHkgYWNjZXB0cyAyTSBv ciA0Sw0KPiBwYWdlIHNpemVzLg0KQ3VycmVudGx5IDJNLzRLIGFjY2VwdCBwYWdlIHNpemUgaXMg c3VwcG9ydGVkLiBUaGUgY29tbWVudHMgd2lsbCBiZSBmaXhlZCBpbiB0aGUgbmV4dCB2ZXJzaW9u Lg0KPiANCj4gKw0KPiArICBAcmV0dXJuIEVGSV9TVUNDRVNTDQo+ID4gK0VGSV9TVEFUVVMNCj4g PiArRUZJQVBJDQo+ID4gK1RkQWNjZXB0UGFnZXMgKA0KPiA+ICsgIElOIFVJTlQ2NCAgU3RhcnRB ZGRyZXNzLA0KPiA+ICsgIElOIFVJTlQ2NCAgTnVtYmVyT2ZQYWdlcywNCj4gPiArICBJTiBVSU5U MzIgIFBhZ2VTaXplDQo+ID4gKyAgKQ0KPiA+ICt7DQo+ID4gKyAgRUZJX1NUQVRVUyAgU3RhdHVz Ow0KPiA+ICsgIFVJTlQ2NCAgICAgIEFkZHJlc3M7DQo+ID4gKyAgVUlOVDY0ICAgICAgVGR4U3Rh dHVzOw0KPiA+ICsgIFVJTlQ2NCAgICAgIEluZGV4Ow0KPiA+ICsgIFVJTlQzMiAgICAgIEdwYVBh Z2VMZXZlbDsNCj4gPiArICBVSU5UMzIgICAgICBQYWdlU2l6ZTI7DQo+ID4gKw0KPiA+ICsgIEFk ZHJlc3MgPSBTdGFydEFkZHJlc3M7DQo+ID4gKw0KPiA+ICsgIEdwYVBhZ2VMZXZlbCA9IEdldEdw YVBhZ2VMZXZlbCAoUGFnZVNpemUpOyAgaWYgKEdwYVBhZ2VMZXZlbCA9PSAtMSkNCj4gPiArIHsN Cj4gDQo+IENvbXBhcmluZyB1bnNpZ25lZCBpbnQgdG8gc2lnbmVkIGludC4gSSBiZWxpZXZlIHRo aXMgc2hvdWxkIHdvcmsgd2l0aCBHQ0MNCj4gd2l0aCB3YXJuaW5nIG1lc3NhZ2VzLg0KPiBKdXN0 IGNoZWNraW5nIGlmIHRoaXMgaXMgaW50ZW50aW9uYWw/DQpJdCB3aWxsIGJlIGZpeGVkLiBTZWUg bXkgZmlyc3QgY29tbWVudHMuDQo+IA0KPiA+ICsgICAgREVCVUcgKChERUJVR19FUlJPUiwgIkFj Y2VwdCBwYWdlIHNpemUgbXVzdCBiZSA0Sy8yTS4gSW52YWxpZCBwYWdlDQo+IHNpemUgLSAweCVs bHhcbiIsIFBhZ2VTaXplKSk7DQo+ID4gKyAgICByZXR1cm4gRUZJX0lOVkFMSURfUEFSQU1FVEVS Ow0KPiA+ICsgIH0NCj4gPiArDQo+ID4gKyAgU3RhdHVzID0gRUZJX1NVQ0NFU1M7DQo+ID4gKyAg Zm9yIChJbmRleCA9IDA7IEluZGV4IDwgTnVtYmVyT2ZQYWdlczsgSW5kZXgrKykgew0KPiA+ICsg ICAgVGR4U3RhdHVzID0gVGRDYWxsIChURENBTExfVERBQ0NFUFRQQUdFLCBBZGRyZXNzIHwgR3Bh UGFnZUxldmVsLA0KPiA+ICsgMCwgMCwgMCk7DQo+IA0KPiBBZGRyZXNzWzExOjNdIGFuZCBbNjM6 NTJdIGFyZSByZXNlcnZlZCBhbmQgbXVzdCBiZSAwLiBUaGUgY29kZSBkb2VzIG5vdA0KPiBjaGVj ayBpdCwgc3BlYyBpcyBub3QgY2xlYXIgYWJvdXQgdGhlIGJlaGF2aW9yIGJ1dCBJIGFtIGFzc3Vt aW5nIHRoYXQgaW4gdGhhdA0KPiBjYXNlLCBURFhfT1BFUkFORF9JTlZBTElEIHdpbGwgYmUgcmV0 dXJuZWQgYXMgZXJyb3IgY29kZSBidXQgc2hvdWxkIHdlDQo+IGNoZWNrIGFuZCBsb2cgaXQgcHJv cGVybHk/DQpSaWdodC4gVGhlIGlucHV0IGFkZHJlc3Mgc2hvdWxkIGJlIGNoZWNrZWQgd2l0aCBB ZGRyZXNzWzExOjNdIGFuZCBbNjM6NTJdLg0KQWRkcmVzc1syOjBdIHNob3VsZCBiZSAwIHRvby4g QmVjYXVzZSBBZGRyZXNzWzI6MF0gd2lsbCBiZSBzZXQgd2l0aCBBY2NlcHQgUGFnZSBMZXZlbC4N Ckl0IHdpbGwgYmUgZml4ZWQgaW4gdGhlIG5leHQgdmVyc2lvbi4gDQo+IA0KPiA+ICsgICAgaWYg KFRkeFN0YXR1cyAhPSBURFhfRVhJVF9SRUFTT05fU1VDQ0VTUykgew0KPiA+ICsgICAgICAgIGlm ICgoVGR4U3RhdHVzICYgfjB4RkZGRlVMTCkgPT0NCj4gVERYX0VYSVRfUkVBU09OX1BBR0VfQUxS RUFEWV9BQ0NFUFRFRCkgew0KPiA+ICsgICAgICAgICAgLy8NCj4gPiArICAgICAgICAgIC8vIEFs cmVhZHkgYWNjZXB0ZWQNCj4gPiArICAgICAgICAgIC8vDQo+ID4gKyAgICAgICAgICBtTnVtYmVy T2ZEdXBsaWNhdGVkQWNjZXB0ZWRQYWdlcysrOw0KPiANCj4gSXMgdGhlcmUgYW55IGxlZ2l0IGNh c2UgdGhhdCBhIHBhZ2Ugc2hvdWxkIGJlIGFjY2VwdGVkIHR3aWNlPyBMb29rcyBsaWtlIG90aGVy DQo+IHRoYW4gZGVidWcgcHJpbnRpbmcsIHRoaXMgaW5mb3JtYXRpb24gaXMgaWdub3JlZC4NCklk ZWFsbHkgYSBwYWdlIHNob3VsZCBiZSBhY2NlcHRlZCBvbmx5IG9uY2UuIEJ1dCBpZiBhIHBhZ2Ug aXMgYWNjZXB0ZWQgdHdpY2UsIGl0IGlzIG5vdCBhbiBlcnJvciAoZnJvbSB0aGUgcGVyc3BlY3Rp dmUgb2YgVGRDYWxsX0FjY2VwdCkuIEluIHRoZSBQb0Mgd2UgZG8gcmFuIGludG8gc3VjaCBjYXNl cyAoaXQgaXMgYSBidWcgaW4gdGhlIGNvZGUpLiBTbyB3ZSBrZWVwIGl0IGFzIGRlYnVnIHByaW50 aW5nLg0KPiANCj4gPiArICAgICAgICAgIERFQlVHICgoREVCVUdfV0FSTiwgIlBhZ2UgYXQgQWRk cmVzcyAoMHglbGx4KSBoYXMgYWxyZWFkeSBiZWVuDQo+IGFjY2VwdGVkLiAtICVkXG4iLCBBZGRy ZXNzLCBtTnVtYmVyT2ZEdXBsaWNhdGVkQWNjZXB0ZWRQYWdlcykpOw0KPiA+ICsgICAgICAgIH0g ZWxzZSBpZiAoKFRkeFN0YXR1cyAmIH4weEZGRkZVTEwpID09DQo+IFREWF9FWElUX1JFQVNPTl9Q QUdFX1NJWkVfTUlTTUFUQ0gpIHsNCj4gPiArICAgICAgICAgIC8vDQo+ID4gKyAgICAgICAgICAv LyBHcGFQYWdlTGV2ZWwgaXMgbWlzbWF0Y2gsIGZhbGwgYmFjayB0byBhIHNtYWxsZXIgR3BhUGFn ZUxldmVsIGlmDQo+IHBvc3NpYmxlDQo+ID4gKyAgICAgICAgICAvLw0KPiA+ICsgICAgICAgICAg REVCVUcgKChERUJVR19WRVJCT1NFLCAiQWRkcmVzcyAlbGx4IGNhbm5vdCBiZSBhY2NlcHRlZCBp bg0KPiA+ICsgUGFnZUxldmVsIG9mICVkXG4iLCBBZGRyZXNzLCBHcGFQYWdlTGV2ZWwpKTsNCj4g PiArDQo+ID4gKyAgICAgICAgICBpZiAoR3BhUGFnZUxldmVsID09IDApIHsNCj4gPiArICAgICAg ICAgICAgLy8NCj4gPiArICAgICAgICAgICAgLy8gQ2Fubm90IGZhbGwgYmFjayB0byBzbWFsbGVy IHBhZ2UgbGV2ZWwNCj4gPiArICAgICAgICAgICAgLy8NCj4gDQo+IENvdWxkIHlvdSBoZWxwIG1l IHVuZGVyc3RhbmQgdGhpcz8gU28gaWYgLGZvciBzb21lIHJlYXNvbiwgVk1NIG1hcHMgYQ0KPiAy TUIgcHJpdmF0ZSBwYWdlIGFuZCBhIGd1ZXN0IHdhbnRzIHRvIGFjY2VwdCBpdCBpbiA0S0IgcGFn ZSBjaHVua3MsIHRoaXMgd2lsbA0KPiBhbHdheXMgZmFpbC4gSXMgaXQgbm90IGEgcG9zc2libGUg dXNlIGNhc2U/DQpHdWVzdCB3YW50IHRvIGFjY2VwdCBwYWdlIHdpdGggMk0gc2l6ZSwgYnV0IGlu IHNvbWUgY2FzZSwgdGhlIFZNTSBjYW5ub3QgZG8gdGhhdCB3aXRoIDJNIHBhZ2Ugc2l6ZS4gSW4g dGhpcyBjYXNlLCBHdWVzdCB3aWxsIGdldCBhIHJldHVybmVkIHJlc3VsdCAoVERYX0VYSVRfUkVB U09OX1BBR0VfU0laRV9NSVNNQVRDSCkgZnJvbSB0aGUgVGRDYWxsLiBTbyBHdWVzdCBmYWxscyBi YWNrIHRvIGFjY2VwdCB0aGUgcGFnZSB3aXRoIGEgc21hbGxlciBwYWdlIHNpemUuIEN1cnJlbnRs eSBvbmx5IDJNLzRLIGFjY2VwdCBwYWdlIHNpemUgaXMgc3VwcG9ydGVkLiBJbiB0aGUgZnV0dXJl LCAxRyBhY2NlcHQgcGFnZSBzaXplIHdpbGwgYmUgc3VwcG9ydGVkLiBJbiB0aGF0IGNhc2UsIHRo ZXJlIG1heSBiZSAyIGZhbGwgYmFja3M6IDFHLT4yTSBhbmQgMk0tPjRLLiBCdXQgaWYgdGhlIGFj Y2VwdCBwYWdlIHNpemUgaXMgNEssIGl0IGNhbm5vdCBmYWxsIGJhY2sgdG8gYSBzbWFsbGVyIHNp emUuDQpHdWVzdCBzdGFydCB0byBhY2NlcHQgcGFnZXMsIFZNTSBqdXN0IHJlc3BvbnNlIHRvIHRo ZSBhY2NlcHQgcGFnZSBjb21tYW5kIGZyb20gR3Vlc3QuIA0KPiANCj4gPiArICAgICAgICAgICAg REVCVUcgKChERUJVR19FUlJPUiwgIkFjY2VwdFBhZ2UgY2Fubm90IGZhbGxiYWNrIGZyb20NCj4g UGFnZUxldmVsICVkXG4iLCBHcGFQYWdlTGV2ZWwpKTsNCj4gPiArICAgICAgICAgICAgU3RhdHVz ID0gRUZJX0lOVkFMSURfUEFSQU1FVEVSOw0KPiA+ICsgICAgICAgICAgICBicmVhazsNCj4gPiAr ICAgICAgICAgIH0gZWxzZSB7DQo+ID4gKyAgICAgICAgICAgIC8vDQo+ID4gKyAgICAgICAgICAg IC8vIEZhbGwgYmFjayB0byBhIHNtYWxsZXIgcGFnZSBzaXplDQo+ID4gKyAgICAgICAgICAgIC8v DQo+ID4gKyAgICAgICAgICAgIFBhZ2VTaXplMiA9IG1UZHhBY2NlcHRQYWdlTGV2ZWxNYXAgW0dw YVBhZ2VMZXZlbCAtIDFdOw0KPiA+ICsgICAgICAgICAgICBTdGF0dXMgPSBUZEFjY2VwdFBhZ2Vz KEFkZHJlc3MsIDUxMiwgUGFnZVNpemUyKTsNCj4gPiArICAgICAgICAgICAgaWYgKEVGSV9FUlJP UiAoU3RhdHVzKSkgew0KPiA+ICsgICAgICAgICAgICAgIGJyZWFrOw0KPiA+ICsgICAgICAgICAg ICB9DQo+ID4gKyAgICAgICAgICB9DQo+ID4gKyAgICAgICAgfWVsc2Ugew0KPiA+ICsNCj4gPiAr ICAgICAgICAgIC8vDQo+ID4gKyAgICAgICAgICAvLyBPdGhlciBlcnJvcnMNCj4gPiArICAgICAg ICAgIC8vDQo+IA0KPiBXaHkgbm90IGhhbmRsZSB0aGUgVERYX09QRVJBTkRfQlVTWT8gIEl0IGlz IG5vdCBhbiBlcnJvciBhbmQgdGRhY2NlcHQNCj4gbmVlZHMgdG8gYmUgcmV0aXJlZCwgSSBndWVz cywgaGFuZGxpbmcgaXQgbGlrZSBhbiBlcnJvciBtaWdodCBjYXVzZSByZWxpYWJpbGl0eQ0KPiBp c3N1ZXMuDQpUaGFua3MgZm9yIHJlbWluZGVyLiBJdCB3aWxsIGJlIGZpeGVkIGluIHRoZSBuZXh0 IHZlcnNpb24uDQo+IA0KPiA+ICsgICAgICAgICAgREVCVUcgKChERUJVR19FUlJPUiwgIkFkZHJl c3MgJWxseCAoJWQpIGZhaWxlZCB0byBiZSBhY2NlcHRlZC4NCj4gRXJyb3IgPSAweCVsbHhcbiIs DQo+ID4gKyAgICAgICAgICAgIEFkZHJlc3MsIEluZGV4LCBUZHhTdGF0dXMpKTsNCj4gPiArICAg ICAgICAgIFN0YXR1cyA9IEVGSV9JTlZBTElEX1BBUkFNRVRFUjsNCj4gPiArICAgICAgICAgIGJy ZWFrOw0KPiA+ICsgICAgICAgIH0NCj4gPiArICAgIH0NCj4gPiArICAgIEFkZHJlc3MgKz0gUGFn ZVNpemU7DQo+ID4gKyAgfQ0KPiA+ICsgIHJldHVybiBTdGF0dXM7DQo+ID4gK30NCj4gDQo+IC4u Li4uDQo+IA0KPiA+ICsqKi8NCj4gPiArRUZJX1NUQVRVUw0KPiA+ICtFRklBUEkNCj4gPiArVGRF eHRlbmRSdG1yICgNCj4gPiArICBJTiAgVUlOVDMyICAqRGF0YSwNCj4gPiArICBJTiAgVUlOVDMy ICBEYXRhTGVuLA0KPiA+ICsgIElOICBVSU5UOCAgIEluZGV4DQo+ID4gKyAgKQ0KPiA+ICt7DQo+ ID4gKyAgRUZJX1NUQVRVUyAgICAgICAgICAgIFN0YXR1czsNCj4gPiArICBVSU5UNjQgICAgICAg ICAgICAgICAgVGRDYWxsU3RhdHVzOw0KPiA+ICsgIFVJTlQ4ICAgICAgICAgICAgICAgICAqRXh0 ZW5kQnVmZmVyOw0KPiA+ICsNCj4gPiArICBTdGF0dXMgPSBFRklfU1VDQ0VTUzsNCj4gPiArDQo+ ID4gKyAgQVNTRVJUIChEYXRhICE9IE5VTEwpOw0KPiA+ICsgIEFTU0VSVCAoRGF0YUxlbiA9PSBT SEEzODRfRElHRVNUX1NJWkUpOyAgQVNTRVJUIChJbmRleCA+PSAwICYmDQo+ID4gKyBJbmRleCA8 IFJUTVJfQ09VTlQpOw0KPiA+ICsNCj4gDQo+IEJlY2F1c2Ugb2YgdGhlIEFzc2VydHMgYWJvdmUg LCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbiB3aWxsIG5ldmVyIHJ1biwgcmlnaHQ/DQpBU1NFUlQg KCkgaXMgZm9yIGRlYnVnZ2luZyBwdXJwb3NlLiBJdCB3aWxsIGJlIGlnbm9yZWQgaW4gcmVsZWFz ZSBtb2RlLiBTbyB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbiB3aWxsIHJ1biBpbiByZWxlYXNlIG1v ZGUuDQpTZWUgaHR0cHM6Ly9naXRodWIuY29tL3RpYW5vY29yZS9lZGsyL2Jsb2IvbWFzdGVyL01k ZVBrZy9JbmNsdWRlL0xpYnJhcnkvRGVidWdMaWIuaCNMMzg1LUw0MDkNCj4gDQo+ID4gKyAgaWYg KERhdGEgPT0gTlVMTCB8fCBEYXRhTGVuICE9IFNIQTM4NF9ESUdFU1RfU0laRSB8fCBJbmRleCA+ PQ0KPiBSVE1SX0NPVU5UKSB7DQo+ID4gKyAgICByZXR1cm4gRUZJX0lOVkFMSURfUEFSQU1FVEVS Ow0KPiA+ICsgIH0NCj4gPiArDQo+IA0KPiAuLi4NCj4gDQo+ID4gKzsgIFVJTlQ2NA0KPiA+ICs7 ICBFRklBUEkNCj4gPiArOyAgVGRWbUNhbGwgKA0KPiA+ICs7ICAgIFVJTlQ2NCAgTGVhZiwgIC8v IFJjeA0KPiA+ICs7ICAgIFVJTlQ2NCAgUDEsICAvLyBSZHgNCj4gPiArOyAgICBVSU5UNjQgIFAy LCAgLy8gUjgNCj4gPiArOyAgICBVSU5UNjQgIFAzLCAgLy8gUjkNCj4gPiArOyAgICBVSU5UNjQg IFA0LCAgLy8gcnNwICsgMHgyOA0KPiA+ICs7ICAgIFVJTlQ2NCAgKlZhbCAvLyByc3AgKyAweDMw DQo+ID4gKzsgICAgKQ0KPiA+ICtnbG9iYWwgQVNNX1BGWChUZFZtQ2FsbCkNCj4gPiArQVNNX1BG WChUZFZtQ2FsbCk6DQo+ID4gKyAgICAgICB0ZGNhbGxfcHVzaF9yZWdzDQo+ID4gKw0KPiA+ICsg ICAgICAgbW92IHIxMSwgcmN4DQo+ID4gKyAgICAgICBtb3YgcjEyLCByZHgNCj4gPiArICAgICAg IG1vdiByMTMsIHI4DQo+ID4gKyAgICAgICBtb3YgcjE0LCByOQ0KPiA+ICsgICAgICAgbW92IHIx NSwgW3JzcCArIGZpcnN0X3ZhcmlhYmxlX29uX3N0YWNrX29mZnNldCBdDQo+ID4gKw0KPiA+ICsg ICAgICAgdGRjYWxsX3JlZ3NfcHJlYW1ibGUgVERWTUNBTEwsIFREVk1DQUxMX0VYUE9TRV9SRUdT X01BU0sNCj4gPiArDQo+ID4gKyAgICAgICB0ZGNhbGwNCj4gPiArDQo+ID4gKyAgICAgICA7IGln bm9yZSByZXR1cm4gZGF0YWlmIFREQ0FMTCByZXBvcnRzIGZhaWx1cmUuDQo+IA0KPiBzaG91bGQg d2Ugbm90IHBhbmljIGhlcmUgYWxzbz8NCkkgZG9uJ3QgdGhpbmsgd2Ugc2hvdWxkIHBhbmljIGhl cmUuIA0KQmVjYXVzZSBUZFZtQ2FsbCBpcyBhIGNvbW1vbiBmdW5jdGlvbiAoc2VlIHN1Yi1sZWFm IG9mIFREVk1DQUxMKS4gVGhlcmUgYXJlIHZhcmlvdXMgZXJyb3JzLiBTb21lIG9mIHRoZW0gYXJl IG5vdCBzbyBzZXJpb3VzIHRoYXQgcGFuaWMgaXMgbmVlZGVkLiBDYWxsZXIgb2YgVGRWbUNhbGwg d2lsbCBoYW5kbGUgdGhlIHJldHVybmVkIHJlc3VsdC4NCj4gDQo+ID4gKyAgICAgICB0ZXN0IHJh eCwgcmF4DQo+ID4gKyAgICAgICBqbnogLm5vX3JldHVybl9kYXRhDQo+ID4gKw0KPiA+ICsgICAg ICAgOyBQcm9wYWdhdGUgVERWTUNBTEwgc3VjY2Vzcy9mYWlsdXJlIHRvIHJldHVybiB2YWx1ZS4N Cj4gPiArICAgICAgIG1vdiByYXgsIHIxMA0KPiA+ICsNCj4gPiArICAgICAgIDsgUmV0cmlldmUg dGhlIFZhbCBwb2ludGVyLg0KPiA+ICsgICAgICAgbW92IHI5LCBbcnNwICsgc2Vjb25kX3Zhcmlh YmxlX29uX3N0YWNrX29mZnNldCBdDQo+ID4gKyAgICAgICB0ZXN0IHI5LCByOQ0KPiA+ICsgICAg ICAganogLm5vX3JldHVybl9kYXRhDQo+ID4gKw0KPiA+ICsgICAgICAgOyBPbiBzdWNjZXNzLCBw cm9wYWdhdGUgVERWTUNBTEwgb3V0cHV0IHZhbHVlIHRvIG91dHB1dCBwYXJhbQ0KPiA+ICsgICAg ICAgdGVzdCByYXgsIHJheA0KPiA+ICsgICAgICAgam56IC5ub19yZXR1cm5fZGF0YQ0KPiA+ICsg ICAgICAgbW92IFtyOV0sIHIxMQ0KPiA+ICsubm9fcmV0dXJuX2RhdGE6DQo+ID4gKyAgICAgICB0 ZGNhbGxfcmVnc19wb3N0YW1ibGUNCj4gPiArDQo+ID4gKyAgICAgICB0ZGNhbGxfcG9wX3JlZ3MN Cj4gPiArDQo+ID4gKyAgICAgICByZXQNCj4gPiArDQo+ID4gKzstLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0NCj4gPiArOyAwICAgPT4gUkFYID0gVERDQUxMIGxlYWYNCj4gPiArOyBNICAgPT4gUkNYID0g VERWTUNBTEwgcmVnaXN0ZXIgYmVoYXZpb3INCj4gPiArOyAxICAgPT4gUjEwID0gc3RhbmRhcmQg dnMuIHZlbmRvcg0KPiA+ICs7IFJESSA9PiBSMTEgPSBURFZNQ0FMTCBmdW5jdGlvbiAvIG5yIDsg UlNJID0gIFIxMiA9IHAxIDsgUkRYID0+IFIxMw0KPiA+ICs9IHAyIDsgUkNYID0+IFIxNCA9IHAz IDsgUjggID0+IFIxNSA9IHA0DQo+ID4gKw0KPiANCj4gQWJvdmUgY29tbWVudCBkb2VzIG5vdCBt YXRjaCB0aGUgYmVsb3cgZGVmaW5pdGlvbi4NClRoYW5rcyBmb3IgcmVtaW5kZXIuIEl0IHdpbGwg YmUgdXBkYXRlZCBpbiB0aGUgbmV4dCB2ZXJzaW9uLg0KPiANCj4gPiArOyAgVUlOVDY0DQo+ID4g KzsgIEVGSUFQSQ0KPiA+ICs7ICBUZFZtQ2FsbENwdWlkICgNCj4gPiArOyAgICBVSU5UNjQgIEVh eEluLCAgICAvLyBSY3gNCj4gPiArOyAgICBVSU5UNjQgIEVjeEluLCAgICAvLyBSZHgNCj4gPiAr OyAgICBVSU5UNjQgICpSZXN1bHRzICAvLyBSOA0KPiA+ICs7ICAgICkNCj4gPiArZ2xvYmFsIEFT TV9QRlgoVGRWbUNhbGxDcHVpZCkNCj4gPiArQVNNX1BGWChUZFZtQ2FsbENwdWlkKToNCj4gPiAr ICAgICAgIHRkY2FsbF9wdXNoX3JlZ3MNCj4gPiArDQo+ID4gKyAgICAgICBtb3YgcjExLCBFWElU X1JFQVNPTl9DUFVJRA0KPiA+ICsgICAgICAgbW92IHIxMiwgcmN4DQo+ID4gKyAgICAgICBtb3Yg cjEzLCByZHgNCj4gPiArDQo+ID4gKyAgICAgICA7IFNhdmUgKnJlc3VsdHMgcG9pbnRlcnMNCj4g PiArICAgICAgIHB1c2ggcjgNCj4gPiArDQo+IA0KPiBMb29rcyBsaWtlIHdlIGFyZSBsZWFraW5n IHIxNCBhbmQgcjE1IGhlcmUuDQpUaGFua3MgZm9yIHJlbWluZGVyLiBJdCB3aWxsIGJlIGZpeGVk IGluIHRoZSBuZXh0IHZlcnNpb24uDQo+IA0KPiA+ICsgICAgICAgdGRjYWxsX3JlZ3NfcHJlYW1i bGUgVERWTUNBTEwsIFREVk1DQUxMX0VYUE9TRV9SRUdTX01BU0sNCj4gPiArDQo+ID4gKyAgICAg ICB0ZGNhbGwNCj4gPiArDQo+ID4gKyAgICAgICA7IFBhbmljIGlmIFREQ0FMTCByZXBvcnRzIGZh aWx1cmUuDQo+ID4gKyAgICAgICB0ZXN0IHJheCwgcmF4DQo+ID4gKyAgICAgICBqbnogLm5vX3Jl dHVybl9kYXRhDQo+ID4gKw0K