From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received-SPF: Pass (sender SPF authorized) identity=mailfrom; client-ip=63.128.21.162; helo=us-smtp-delivery-162.mimecast.com; envelope-from=eugene@hp.com; receiver=edk2-devel@lists.01.org Received: from us-smtp-delivery-162.mimecast.com (us-smtp-delivery-162.mimecast.com [63.128.21.162]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-SHA384 (256/256 bits)) (No client certificate requested) by ml01.01.org (Postfix) with ESMTPS id E0C6B2118FF00 for ; Tue, 13 Nov 2018 14:12:42 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=hp.com; s=mimecast20180716; t=1542147162; h=from:from:sender:reply-to:subject:subject:date:date: message-id:message-id:to:to:cc:cc:mime-version:mime-version: content-type:content-type: content-transfer-encoding:content-transfer-encoding:in-reply-to: references; bh=l8SXjQ2h7j4rMwrZKZcE1UXKTd8+4v11sq4eyNgKoJU=; b=dCvKGcZf0aW4CiwXqRSJcjQ9eKqRHj4rBVOfKdpm3v1e3fgpCrOzNxWrQlurDNxr2roA1eijR7QZ4BL7ToFdcB9RtlXowR19tyKXpUeb0Ag61VPJaq1VdponvpK8sp6N1OnVhXyi8KTiCFcDFG8rja7oc5qd3CdkC0BBLx8Vf08= Received: from NAM03-BY2-obe.outbound.protection.outlook.com (mail-by2nam03lp0054.outbound.protection.outlook.com [216.32.180.54]) (Using TLS) by relay.mimecast.com with ESMTP id us-mta-242-j_oopfBRPwSD_lMaOj3VUw-1; Tue, 13 Nov 2018 17:12:40 -0500 Received: from CS1PR8401MB1189.NAMPRD84.PROD.OUTLOOK.COM (10.169.97.20) by CS1PR8401MB0549.NAMPRD84.PROD.OUTLOOK.COM (10.169.14.12) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.1294.27; Tue, 13 Nov 2018 22:12:38 +0000 Received: from CS1PR8401MB1189.NAMPRD84.PROD.OUTLOOK.COM ([fe80::d41f:6ad6:8b6f:26ca]) by CS1PR8401MB1189.NAMPRD84.PROD.OUTLOOK.COM ([fe80::d41f:6ad6:8b6f:26ca%4]) with mapi id 15.20.1294.045; Tue, 13 Nov 2018 22:12:38 +0000 From: "Cohen, Eugene" To: "edk2-devel@lists.01.org" , "Yao, Jiewen" , "Zhang, Chao B" CC: =?ks_c_5601-1987?B?QmluLCBTdW5nLVVrICi687y6v+0p?= Thread-Topic: [PATCH 2/4] SecurityPkg: introduce TpmIoLib to abstract TPM IO access Thread-Index: AdR7nXHzCkYpoEyBTgySnxf2Ikelgg== Date: Tue, 13 Nov 2018 22:12:38 +0000 Message-ID: Accept-Language: en-US X-MS-Has-Attach: X-MS-TNEF-Correlator: x-originating-ip: [15.65.252.15] x-ms-publictraffictype: Email x-microsoft-exchange-diagnostics: 1; CS1PR8401MB0549; 6:gNVwhmaqUQJddAGEGKmh4jCwg/xAqrVNma5Tsw3sP5dcH6I390Up3HcCqRLl5hULgjF5zj1QDryj5M0Vx3twcApsVXoYxDgNibvSEVV5yxWRg3Z4TU67Q8NH16GdAqqZvIPgNYGiL3pmOBIaxdn9eTOXdmZDRypVSJQOI3tBXi7hEh4iEgZLAZ/sZCt1OgBQj5USqdnmvJOj16Pq309I+CQn03r1FKns6gZ6jxbSDcN3zEBKQO34R9Bw9dZ5/uwc6Jp4ekD6Qg2+SuuZng9Z3YaCceRNE/HvCndiGHnVoMJeH8S6s9NC4cPW+6iTotEFCUiGRQQyLNc8651g/ife0Qd7T9e+aAnOpLgrU3HS95KFkGe5opCPLQPbPCdzN9ntXyjMS2c270g6/PleuC3rkZn+U2Eewm9nfFv64Ck3YGPwFnKKOMxHdbTEOKZtzcnXHhIIy3MAhcL4V1D5JgbVRw==; 5:s9kyGTTnIpZj45XgZ7D6rX7dd+cfEY88LML6WqGUF7ZM/tBnRbATCX+4VOl/+TAicLTOOYMAfF6y5pwRqqVzFjqTVjr9OOIHltraEZJOcdSg7ANE/UW3R9C2Ajprd/WeaVAaj0yunAD6KmxuF8fQ9Sz+yPHpPul/AnOUELL8vD4=; 7:5Sf5Bfq5vZD1YuWd7VZ5gHbVd+zWQRsjnZCDNd7P4qunrPk9Q+vdFG03MjZK4XlrjT4bVo+Zf+RdA3MtX5lpiPRYj1qBNfy5OIsEqDfDz3vrK+GV+gLW9tkjan208QnnDStlFNfnEWBkEWrHkB2awg== x-ms-exchange-antispam-srfa-diagnostics: SOS;SOR; x-forefront-antispam-report: SFV:SKI; SCL:-1; SFV:NSPM; SFS:(10019020)(6029001)(396003)(39860400002)(136003)(376002)(366004)(346002)(6602003)(189003)(199004)(99286004)(71200400001)(2906002)(15188155005)(102836004)(2420400007)(15650500001)(7110500001)(4326008)(53376002)(106356001)(55016002)(53936002)(6436002)(68736007)(2900100001)(10710500007)(71190400001)(8676002)(14454004)(33656002)(186003)(81166006)(81156014)(86362001)(8936002)(575784001)(316002)(7696005)(110136005)(26005)(6506007)(478600001)(16799955002)(3846002)(6116002)(74316002)(97736004)(2501003)(14444005)(486006)(9686003)(476003)(66066001)(25786009)(305945005)(7736002)(5660300001)(105586002)(6306002)(256004); DIR:OUT; SFP:1102; SCL:1; SRVR:CS1PR8401MB0549; H:CS1PR8401MB1189.NAMPRD84.PROD.OUTLOOK.COM; FPR:; SPF:None; LANG:en; PTR:InfoNoRecords; MX:1; A:1; x-ms-office365-filtering-correlation-id: c0e92979-7781-4b85-1f8b-08d649b51f6a x-microsoft-antispam: BCL:0; PCL:0; RULEID:(2390060)(7020095)(4652040)(8989299)(5600074)(711020)(4534185)(4627221)(201703031133081)(201702281549075)(8990200)(2017052603328)(7153060)(7193020); SRVR:CS1PR8401MB0549; x-ms-traffictypediagnostic: CS1PR8401MB0549: x-microsoft-antispam-prvs: x-exchange-antispam-report-test: UriScan:(228905959029699)(73583498263828); x-ms-exchange-senderadcheck: 1 x-exchange-antispam-report-cfa-test: BCL:0; PCL:0; RULEID:(8211001083)(6040522)(2401047)(5005006)(8121501046)(3231382)(944501410)(4982022)(52105112)(3002001)(10201501046)(93006095)(93001095)(148016)(149066)(150057)(6041310)(20161123562045)(20161123564045)(20161123560045)(201703131423095)(201702281528075)(20161123555045)(201703061421075)(201703061406153)(20161123558120)(201708071742011)(7699051)(76991095); SRVR:CS1PR8401MB0549; BCL:0; PCL:0; RULEID:; SRVR:CS1PR8401MB0549; x-forefront-prvs: 085551F5A8 x-microsoft-antispam-message-info: 1hahi0QWHU/OBpX8StWa7w0IvAbzs/p1eundLslRBxQA85INJaiyXUjE+0tCiOYSE9vMcQMcMKXtFjp7o/5RrdNwuVZhNvww3S7kYrEQpYCtHT+c55c4GF2xlqausC3vOcq5dpIkgxU5I7v15Mp15LrDYiTu1sA1Q9zDBZ5pyOBU69UjGPyG78tja/TiOI3gi4/uOYsVbteuEeOqsQI8vqkiWzWXmLuwk7yoVrIp3RE/esCGUk22ptWUMiJrGMA+nx4TBW/TAEKyNR0xdO2D7LjaGcLFQLWzmZS1YU/CgQpQFW6cRsk4HRxYsfBXiw5juYC+oFkZ48InmdbWz1OJMRYpfnGxmtc45qhbTRZT408= spamdiagnosticoutput: 1:99 spamdiagnosticmetadata: NSPM MIME-Version: 1.0 X-OriginatorOrg: hp.com X-MS-Exchange-CrossTenant-Network-Message-Id: c0e92979-7781-4b85-1f8b-08d649b51f6a X-MS-Exchange-CrossTenant-originalarrivaltime: 13 Nov 2018 22:12:38.3119 (UTC) X-MS-Exchange-CrossTenant-fromentityheader: Hosted X-MS-Exchange-CrossTenant-id: ca7981a2-785a-463d-b82a-3db87dfc3ce6 X-MS-Exchange-Transport-CrossTenantHeadersStamped: CS1PR8401MB0549 X-MC-Unique: j_oopfBRPwSD_lMaOj3VUw-1 Subject: [PATCH 2/4] SecurityPkg: introduce TpmIoLib to abstract TPM IO access X-BeenThere: edk2-devel@lists.01.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: EDK II Development List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Tue, 13 Nov 2018 22:12:43 -0000 X-List-Received-Date: Tue, 13 Nov 2018 22:12:43 -0000 X-List-Received-Date: Tue, 13 Nov 2018 22:12:43 -0000 X-List-Received-Date: Tue, 13 Nov 2018 22:12:43 -0000 X-List-Received-Date: Tue, 13 Nov 2018 22:12:43 -0000 X-List-Received-Date: Tue, 13 Nov 2018 22:12:43 -0000 X-List-Received-Date: Tue, 13 Nov 2018 22:12:43 -0000 X-List-Received-Date: Tue, 13 Nov 2018 22:12:43 -0000 X-List-Received-Date: Tue, 13 Nov 2018 22:12:43 -0000 X-List-Received-Date: Tue, 13 Nov 2018 22:12:43 -0000 X-List-Received-Date: Tue, 13 Nov 2018 22:12:43 -0000 X-List-Received-Date: Tue, 13 Nov 2018 22:12:43 -0000 X-List-Received-Date: Tue, 13 Nov 2018 22:12:43 -0000 X-List-Received-Date: Tue, 13 Nov 2018 22:12:43 -0000 X-List-Received-Date: Tue, 13 Nov 2018 22:12:43 -0000 X-List-Received-Date: Tue, 13 Nov 2018 22:12:43 -0000 X-List-Received-Date: Tue, 13 Nov 2018 22:12:43 -0000 X-List-Received-Date: Tue, 13 Nov 2018 22:12:43 -0000 X-List-Received-Date: Tue, 13 Nov 2018 22:12:43 -0000 X-List-Received-Date: Tue, 13 Nov 2018 22:12:43 -0000 X-List-Received-Date: Tue, 13 Nov 2018 22:12:43 -0000 X-List-Received-Date: Tue, 13 Nov 2018 22:12:43 -0000 X-List-Received-Date: Tue, 13 Nov 2018 22:12:43 -0000 X-List-Received-Date: Tue, 13 Nov 2018 22:12:43 -0000 X-List-Received-Date: Tue, 13 Nov 2018 22:12:43 -0000 X-List-Received-Date: Tue, 13 Nov 2018 22:12:43 -0000 X-List-Received-Date: Tue, 13 Nov 2018 22:12:43 -0000 X-List-Received-Date: Tue, 13 Nov 2018 22:12:43 -0000 X-List-Received-Date: Tue, 13 Nov 2018 22:12:43 -0000 X-List-Received-Date: Tue, 13 Nov 2018 22:12:43 -0000 X-List-Received-Date: Tue, 13 Nov 2018 22:12:43 -0000 X-List-Received-Date: Tue, 13 Nov 2018 22:12:43 -0000 X-List-Received-Date: Tue, 13 Nov 2018 22:12:43 -0000 X-List-Received-Date: Tue, 13 Nov 2018 22:12:43 -0000 X-List-Received-Date: Tue, 13 Nov 2018 22:12:43 -0000 X-List-Received-Date: Tue, 13 Nov 2018 22:12:43 -0000 X-List-Received-Date: Tue, 13 Nov 2018 22:12:43 -0000 X-List-Received-Date: Tue, 13 Nov 2018 22:12:43 -0000 X-List-Received-Date: Tue, 13 Nov 2018 22:12:43 -0000 X-List-Received-Date: Tue, 13 Nov 2018 22:12:43 -0000 Content-Language: en-US Content-Type: text/plain; charset=KS_C_5601-1987 Content-Transfer-Encoding: base64 U2VjdXJpdHlQa2c6IGludHJvZHVjZSBUcG1Jb0xpYiB0byBhYnN0cmFjdCBUUE0gSU8gYWNjZXNz DQogDQpDb250cmlidXRlZC11bmRlcjogVGlhbm9Db3JlIENvbnRyaWJ1dGlvbiBBZ3JlZW1lbnQg MS4xDQpDYzogQ2hhbyBaaGFuZyA8Y2hhby5iLnpoYW5nQGludGVsLmNvbT4NCkNjOiBKaWV3ZW4g WWFvIDxqaWV3ZW4ueWFvQGludGVsLmNvbT4NClNpZ25lZC1vZmYtYnk6IEV1Z2VuZSBDb2hlbiA8 ZXVnZW5lQGhwLmNvbT4NCi0tLQ0KIFNlY3VyaXR5UGtnL0luY2x1ZGUvTGlicmFyeS9UcG1Jb0xp Yi5oIHwgMTk2ICsrKysrKysrKysrKysrKysrKysrDQogMSBmaWxlIGNoYW5nZWQsIDE5NiBpbnNl cnRpb25zKCspDQoNCmRpZmYgLS1naXQgYS9TZWN1cml0eVBrZy9JbmNsdWRlL0xpYnJhcnkvVHBt SW9MaWIuaCBiL1NlY3VyaXR5UGtnL0luY2x1ZGUvTGlicmFyeS9UcG1Jb0xpYi5oDQpuZXcgZmls ZSBtb2RlIDEwMDY0NA0KaW5kZXggMDAwMDAwMC4uYWFmMGYwYw0KLS0tIC9kZXYvbnVsbA0KKysr IGIvU2VjdXJpdHlQa2cvSW5jbHVkZS9MaWJyYXJ5L1RwbUlvTGliLmgNCkBAIC0wLDAgKzEsMTk2 IEBADQorLyoqIEBmaWxlDQorICBUaGlzIGxpYnJhcnkgaXMgdG8gYWJzdHJhY3QgVFBNMiByZWdp c3RlciBhY2Nlc3NlcyBzbyB0aGF0IGEgY29tbW9uDQorICBpbnRlcmZhY2UgY2FuIGJlIHVzZWQg Zm9yIG11bHRpcGxlIHVuZGVybHlpbmcgYnVzc2VzIHN1Y2ggYXMgVFBNLA0KKyAgU1BJLCBvciBJ MkMgYWNjZXNzLg0KKw0KK0NvcHlyaWdodCAoYykgMjAxOCBIUCBEZXZlbG9wbWVudCBDb21wYW55 LCBMLlAuDQorVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscw0KK2Fy ZSBsaWNlbnNlZCBhbmQgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIGFuZCBjb25kaXRp b25zIG9mIHRoZSBCU0QgTGljZW5zZQ0KK3doaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0 aW9uLiAgVGhlIGZ1bGwgdGV4dCBvZiB0aGUgbGljZW5zZSBtYXkgYmUgZm91bmQgYXQNCitodHRw Oi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvYnNkLWxpY2Vuc2UucGhwDQorDQorVEhFIFBST0dS QU0gSVMgRElTVFJJQlVURUQgVU5ERVIgVEhFIEJTRCBMSUNFTlNFIE9OIEFOICJBUyBJUyIgQkFT SVMsDQorV0lUSE9VVCBXQVJSQU5USUVTIE9SIFJFUFJFU0VOVEFUSU9OUyBPRiBBTlkgS0lORCwg RUlUSEVSIEVYUFJFU1MgT1IgSU1QTElFRC4NCisNCisqKi8NCisNCisjaWZuZGVmIF9UUE1fSU9f TElCX0hfDQorI2RlZmluZSBfVFBNX0lPX0xJQl9IXw0KKw0KKyNpbmNsdWRlIDxCYXNlLmg+DQor DQorDQorLyoqDQorICBSZWFkcyBhbiA4LWJpdCBUUE0gcmVnaXN0ZXIuDQorDQorICBSZWFkcyB0 aGUgOC1iaXQgVFBNIHJlZ2lzdGVyIHNwZWNpZmllZCBieSBBZGRyZXNzLiBUaGUgOC1iaXQgcmVh ZCB2YWx1ZSBpcw0KKyAgcmV0dXJuZWQuIFRoaXMgZnVuY3Rpb24gbXVzdCBndWFyYW50ZWUgdGhh dCBhbGwgVFBNIHJlYWQgYW5kIHdyaXRlDQorICBvcGVyYXRpb25zIGFyZSBzZXJpYWxpemVkLg0K Kw0KKyAgSWYgOC1iaXQgVFBNIHJlZ2lzdGVyIG9wZXJhdGlvbnMgYXJlIG5vdCBzdXBwb3J0ZWQs IHRoZW4gQVNTRVJUKCkuDQorDQorICBAcGFyYW0gIEFkZHJlc3MgVGhlIFRQTSByZWdpc3RlciB0 byByZWFkLg0KKw0KKyAgQHJldHVybiBUaGUgdmFsdWUgcmVhZC4NCisNCisqKi8NCitVSU5UOA0K K0VGSUFQSQ0KK1RwbVJlYWQ4ICgNCisgIElOICAgICAgVUlOVE4gICAgICAgICAgICAgICAgICAg ICBBZGRyZXNzDQorICApOw0KKw0KKy8qKg0KKyAgV3JpdGVzIGFuIDgtYml0IFRQTSByZWdpc3Rl ci4NCisNCisgIFdyaXRlcyB0aGUgOC1iaXQgVFBNIHJlZ2lzdGVyIHNwZWNpZmllZCBieSBBZGRy ZXNzIHdpdGggdGhlIHZhbHVlIHNwZWNpZmllZA0KKyAgYnkgVmFsdWUgYW5kIHJldHVybnMgVmFs dWUuIFRoaXMgZnVuY3Rpb24gbXVzdCBndWFyYW50ZWUgdGhhdCBhbGwgVFBNIHJlYWQNCisgIGFu ZCB3cml0ZSBvcGVyYXRpb25zIGFyZSBzZXJpYWxpemVkLg0KKw0KKyAgSWYgOC1iaXQgVFBNIHJl Z2lzdGVyIG9wZXJhdGlvbnMgYXJlIG5vdCBzdXBwb3J0ZWQsIHRoZW4gQVNTRVJUKCkuDQorDQor ICBAcGFyYW0gIEFkZHJlc3MgVGhlIFRQTSByZWdpc3RlciB0byB3cml0ZS4NCisgIEBwYXJhbSAg VmFsdWUgICBUaGUgdmFsdWUgdG8gd3JpdGUgdG8gdGhlIFRQTSByZWdpc3Rlci4NCisNCisgIEBy ZXR1cm4gVmFsdWUuDQorDQorKiovDQorVUlOVDgNCitFRklBUEkNCitUcG1Xcml0ZTggKA0KKyAg SU4gICAgICBVSU5UTiAgICAgICAgICAgICAgICAgICAgIEFkZHJlc3MsDQorICBJTiAgICAgIFVJ TlQ4ICAgICAgICAgICAgICAgICAgICAgVmFsdWUNCisgICk7DQorDQorLyoqDQorICBSZWFkcyBh IDE2LWJpdCBUUE0gcmVnaXN0ZXIuDQorDQorICBSZWFkcyB0aGUgMTYtYml0IFRQTSByZWdpc3Rl ciBzcGVjaWZpZWQgYnkgQWRkcmVzcy4gVGhlIDE2LWJpdCByZWFkIHZhbHVlIGlzDQorICByZXR1 cm5lZC4gVGhpcyBmdW5jdGlvbiBtdXN0IGd1YXJhbnRlZSB0aGF0IGFsbCBUUE0gcmVhZCBhbmQg d3JpdGUNCisgIG9wZXJhdGlvbnMgYXJlIHNlcmlhbGl6ZWQuDQorDQorICBJZiAxNi1iaXQgVFBN IHJlZ2lzdGVyIG9wZXJhdGlvbnMgYXJlIG5vdCBzdXBwb3J0ZWQsIHRoZW4gQVNTRVJUKCkuDQor ICBJZiBBZGRyZXNzIGlzIG5vdCBhbGlnbmVkIG9uIGEgMTYtYml0IGJvdW5kYXJ5LCB0aGVuIEFT U0VSVCgpLg0KKw0KKyAgQHBhcmFtICBBZGRyZXNzIFRoZSBUUE0gcmVnaXN0ZXIgdG8gcmVhZC4N CisNCisgIEByZXR1cm4gVGhlIHZhbHVlIHJlYWQuDQorDQorKiovDQorVUlOVDE2DQorRUZJQVBJ DQorVHBtUmVhZDE2ICgNCisgIElOICAgICAgVUlOVE4gICAgICAgICAgICAgICAgICAgICBBZGRy ZXNzDQorICApOw0KKw0KKy8qKg0KKyAgV3JpdGVzIGEgMTYtYml0IFRQTSByZWdpc3Rlci4NCisN CisgIFdyaXRlcyB0aGUgMTYtYml0IFRQTSByZWdpc3RlciBzcGVjaWZpZWQgYnkgQWRkcmVzcyB3 aXRoIHRoZSB2YWx1ZSBzcGVjaWZpZWQNCisgIGJ5IFZhbHVlIGFuZCByZXR1cm5zIFZhbHVlLiBU aGlzIGZ1bmN0aW9uIG11c3QgZ3VhcmFudGVlIHRoYXQgYWxsIFRQTSByZWFkDQorICBhbmQgd3Jp dGUgb3BlcmF0aW9ucyBhcmUgc2VyaWFsaXplZC4NCisNCisgIElmIDE2LWJpdCBUUE0gcmVnaXN0 ZXIgb3BlcmF0aW9ucyBhcmUgbm90IHN1cHBvcnRlZCwgdGhlbiBBU1NFUlQoKS4NCisgIElmIEFk ZHJlc3MgaXMgbm90IGFsaWduZWQgb24gYSAxNi1iaXQgYm91bmRhcnksIHRoZW4gQVNTRVJUKCku DQorDQorICBAcGFyYW0gIEFkZHJlc3MgVGhlIFRQTSByZWdpc3RlciB0byB3cml0ZS4NCisgIEBw YXJhbSAgVmFsdWUgICBUaGUgdmFsdWUgdG8gd3JpdGUgdG8gdGhlIFRQTSByZWdpc3Rlci4NCisN CisgIEByZXR1cm4gVmFsdWUuDQorDQorKiovDQorVUlOVDE2DQorRUZJQVBJDQorVHBtV3JpdGUx NiAoDQorICBJTiAgICAgIFVJTlROICAgICAgICAgICAgICAgICAgICAgQWRkcmVzcywNCisgIElO ICAgICAgVUlOVDE2ICAgICAgICAgICAgICAgICAgICBWYWx1ZQ0KKyAgKTsNCisNCisvKioNCisg IFJlYWRzIGEgMzItYml0IFRQTSByZWdpc3Rlci4NCisNCisgIFJlYWRzIHRoZSAzMi1iaXQgVFBN IHJlZ2lzdGVyIHNwZWNpZmllZCBieSBBZGRyZXNzLiBUaGUgMzItYml0IHJlYWQgdmFsdWUgaXMN CisgIHJldHVybmVkLiBUaGlzIGZ1bmN0aW9uIG11c3QgZ3VhcmFudGVlIHRoYXQgYWxsIFRQTSBy ZWFkIGFuZCB3cml0ZQ0KKyAgb3BlcmF0aW9ucyBhcmUgc2VyaWFsaXplZC4NCisNCisgIElmIDMy LWJpdCBUUE0gcmVnaXN0ZXIgb3BlcmF0aW9ucyBhcmUgbm90IHN1cHBvcnRlZCwgdGhlbiBBU1NF UlQoKS4NCisgIElmIEFkZHJlc3MgaXMgbm90IGFsaWduZWQgb24gYSAzMi1iaXQgYm91bmRhcnks IHRoZW4gQVNTRVJUKCkuDQorDQorICBAcGFyYW0gIEFkZHJlc3MgVGhlIFRQTSByZWdpc3RlciB0 byByZWFkLg0KKw0KKyAgQHJldHVybiBUaGUgdmFsdWUgcmVhZC4NCisNCisqKi8NCitVSU5UMzIN CitFRklBUEkNCitUcG1SZWFkMzIgKA0KKyAgSU4gICAgICBVSU5UTiAgICAgICAgICAgICAgICAg ICAgIEFkZHJlc3MNCisgICk7DQorDQorLyoqDQorICBXcml0ZXMgYSAzMi1iaXQgVFBNIHJlZ2lz dGVyLg0KKw0KKyAgV3JpdGVzIHRoZSAzMi1iaXQgVFBNIHJlZ2lzdGVyIHNwZWNpZmllZCBieSBB ZGRyZXNzIHdpdGggdGhlIHZhbHVlIHNwZWNpZmllZA0KKyAgYnkgVmFsdWUgYW5kIHJldHVybnMg VmFsdWUuIFRoaXMgZnVuY3Rpb24gbXVzdCBndWFyYW50ZWUgdGhhdCBhbGwgVFBNIHJlYWQNCisg IGFuZCB3cml0ZSBvcGVyYXRpb25zIGFyZSBzZXJpYWxpemVkLg0KKw0KKyAgSWYgMzItYml0IFRQ TSByZWdpc3RlciBvcGVyYXRpb25zIGFyZSBub3Qgc3VwcG9ydGVkLCB0aGVuIEFTU0VSVCgpLg0K KyAgSWYgQWRkcmVzcyBpcyBub3QgYWxpZ25lZCBvbiBhIDMyLWJpdCBib3VuZGFyeSwgdGhlbiBB U1NFUlQoKS4NCisNCisgIEBwYXJhbSAgQWRkcmVzcyBUaGUgVFBNIHJlZ2lzdGVyIHRvIHdyaXRl Lg0KKyAgQHBhcmFtICBWYWx1ZSAgIFRoZSB2YWx1ZSB0byB3cml0ZSB0byB0aGUgVFBNIHJlZ2lz dGVyLg0KKw0KKyAgQHJldHVybiBWYWx1ZS4NCisNCisqKi8NCitVSU5UMzINCitFRklBUEkNCitU cG1Xcml0ZTMyICgNCisgIElOICAgICAgVUlOVE4gICAgICAgICAgICAgICAgICAgICBBZGRyZXNz LA0KKyAgSU4gICAgICBVSU5UMzIgICAgICAgICAgICAgICAgICAgIFZhbHVlDQorICApOw0KKw0K Kw0KKy8qKg0KKyAgUmVhZHMgYSA2NC1iaXQgVFBNIHJlZ2lzdGVyLg0KKw0KKyAgUmVhZHMgdGhl IDY0LWJpdCBUUE0gcmVnaXN0ZXIgc3BlY2lmaWVkIGJ5IEFkZHJlc3MuIFRoZSA2NC1iaXQgcmVh ZCB2YWx1ZSBpcw0KKyAgcmV0dXJuZWQuIFRoaXMgZnVuY3Rpb24gbXVzdCBndWFyYW50ZWUgdGhh dCBhbGwgVFBNIHJlYWQgYW5kIHdyaXRlDQorICBvcGVyYXRpb25zIGFyZSBzZXJpYWxpemVkLg0K Kw0KKyAgSWYgNjQtYml0IFRQTSByZWdpc3RlciBvcGVyYXRpb25zIGFyZSBub3Qgc3VwcG9ydGVk LCB0aGVuIEFTU0VSVCgpLg0KKyAgSWYgQWRkcmVzcyBpcyBub3QgYWxpZ25lZCBvbiBhIDY0LWJp dCBib3VuZGFyeSwgdGhlbiBBU1NFUlQoKS4NCisNCisgIEBwYXJhbSAgQWRkcmVzcyBUaGUgVFBN IHJlZ2lzdGVyIHRvIHJlYWQuDQorDQorICBAcmV0dXJuIFRoZSB2YWx1ZSByZWFkLg0KKw0KKyoq Lw0KK1VJTlQ2NA0KK0VGSUFQSQ0KK1RwbVJlYWQ2NCAoDQorICBJTiAgICAgIFVJTlROICAgICAg ICAgICAgICAgICAgICAgQWRkcmVzcw0KKyAgKTsNCisNCisvKioNCisgIFdyaXRlcyBhIDY0LWJp dCBUUE0gcmVnaXN0ZXIuDQorDQorICBXcml0ZXMgdGhlIDY0LWJpdCBUUE0gcmVnaXN0ZXIgc3Bl Y2lmaWVkIGJ5IEFkZHJlc3Mgd2l0aCB0aGUgdmFsdWUgc3BlY2lmaWVkDQorICBieSBWYWx1ZSBh bmQgcmV0dXJucyBWYWx1ZS4gVGhpcyBmdW5jdGlvbiBtdXN0IGd1YXJhbnRlZSB0aGF0IGFsbCBU UE0gcmVhZA0KKyAgYW5kIHdyaXRlIG9wZXJhdGlvbnMgYXJlIHNlcmlhbGl6ZWQuDQorDQorICBJ ZiA2NC1iaXQgVFBNIHJlZ2lzdGVyIG9wZXJhdGlvbnMgYXJlIG5vdCBzdXBwb3J0ZWQsIHRoZW4g QVNTRVJUKCkuDQorICBJZiBBZGRyZXNzIGlzIG5vdCBhbGlnbmVkIG9uIGEgNjQtYml0IGJvdW5k YXJ5LCB0aGVuIEFTU0VSVCgpLg0KKw0KKyAgQHBhcmFtICBBZGRyZXNzIFRoZSBUUE0gcmVnaXN0 ZXIgdG8gd3JpdGUuDQorICBAcGFyYW0gIFZhbHVlICAgVGhlIHZhbHVlIHRvIHdyaXRlIHRvIHRo ZSBUUE0gcmVnaXN0ZXIuDQorDQorKiovDQorVUlOVDY0DQorRUZJQVBJDQorVHBtV3JpdGU2NCAo DQorICBJTiAgICAgIFVJTlROICAgICAgICAgICAgICAgICAgICAgQWRkcmVzcywNCisgIElOICAg ICAgVUlOVDY0ICAgICAgICAgICAgICAgICAgICBWYWx1ZQ0KKyAgKTsNCisNCisjZW5kaWYNCi0t IA0KMi43LjQNCg0K