From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received-SPF: Pass (sender SPF authorized) identity=mailfrom; client-ip=40.92.9.54; helo=nam04-bn3-obe.outbound.protection.outlook.com; envelope-from=vanjeff_919@hotmail.com; receiver=edk2-devel@lists.01.org Received: from NAM04-BN3-obe.outbound.protection.outlook.com (mail-oln040092009054.outbound.protection.outlook.com [40.92.9.54]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-SHA384 (256/256 bits)) (No client certificate requested) by ml01.01.org (Postfix) with ESMTPS id 4D7AC21A04E2F for ; Thu, 23 Nov 2017 11:45:34 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=hotmail.com; s=selector1; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version; bh=EwgtbHMUZVhGsFaWH4QgCjolbDTIVXcHJbKq+vFF8sA=; b=iP1cqyS5u68Vds5oahblY4xrHcUG/I+kk7m7VOys7iQ2pQkzkHrTSTaepdrnrkMtaqOEXKojzCnyesWU03RIkY9AOPHkcO+MDvQbOZ6XisHJu/m+sk8CN0T1CVRVBr8bf0gHRGHmtzOs/uefQeqzwOSyhwAn1lqpsfnL8v8P2TJGIfUUmKj5t3QyK4OmKkqT3pdAlFh8DjfWQDSwyMcyX5qK7WVjZTMkjIrKibfBh489WGPwuEA+K6HgrPHOacnj7oakun65GuOZobfrSd1E2wJH9To2iL6J5fALFNiDCAnIVhyMYcd4ZCU8V3NhxUw137S3Ml4aSHR8X5dIuy4l7A== Received: from BN3NAM04FT019.eop-NAM04.prod.protection.outlook.com (10.152.92.57) by BN3NAM04HT030.eop-NAM04.prod.protection.outlook.com (10.152.92.246) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384_P384) id 15.20.218.12; Thu, 23 Nov 2017 19:49:50 +0000 Received: from CO2PR19MB0137.namprd19.prod.outlook.com (10.152.92.52) by BN3NAM04FT019.mail.protection.outlook.com (10.152.92.173) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256_P256) id 15.20.239.4 via Frontend Transport; Thu, 23 Nov 2017 19:49:50 +0000 Received: from CO2PR19MB0137.namprd19.prod.outlook.com ([10.161.82.25]) by CO2PR19MB0137.namprd19.prod.outlook.com ([10.161.82.25]) with mapi id 15.20.0239.009; Thu, 23 Nov 2017 19:49:50 +0000 From: Fan Jeff To: Andrew Fish CC: Paulo Alcantara , "edk2-devel@lists.01.org" , Laszlo Ersek , Eric Dong Thread-Topic: [edk2] [RFC v3 1/3] UefiCpuPkg/CpuExceptionHandlerLib/X64: Add stack trace support Thread-Index: AQHTZImx++EsCzPXTESic2XtOnhbo6MiX13W Date: Thu, 23 Nov 2017 19:49:50 +0000 Message-ID: References: <86955028c6e8f82de1dc1e8206d2b5441cbbf33c.1510868616.git.pcacjr@zytor.com> <2da80d1e-8b3a-f56b-6a34-871e32b8aba1@zytor.com> , <88E97D68-8EF4-476D-884C-5301AD3551BE@apple.com> In-Reply-To: <88E97D68-8EF4-476D-884C-5301AD3551BE@apple.com> Accept-Language: zh-CN, en-US X-MS-Has-Attach: X-MS-TNEF-Correlator: x-incomingtopheadermarker: OriginalChecksum:90074D90B9B5A6178B3C5AC39FD9772A7939DAB364E55C49FD1E3BC5703E8D68; UpperCasedChecksum:7DDA84968B7551B1ADB725E1BC215636547F0E9B4087E60290CF2E990DEF00E3; SizeAsReceived:7553; Count:47 x-ms-exchange-messagesentrepresentingtype: 1 x-tmn: [5Q19pFt2B30Q9+AWuUfuiUDdcWEzipuzhvnJwWxEBvI=] x-ms-publictraffictype: Email x-microsoft-exchange-diagnostics: 1; BN3NAM04HT030; 6:4+BO/w+Wz3S9b8zs5YjGJY1chDEoFCrum5gzjSMaRDVL2qvDTpzhJU3xYwaTFB+fWMyJ3U8+aUFEVUQhhgBTqqGLvgZSxNrz3muay8zEjReJ9KJF+EK18a6wfJcgd251OfDGiCV7efE9Hu64c04ANdy8zeN2SDab3DKjHxQ3lVXZlMxOCF7+THtaksULaVzBc26FO6B8A3dCCWwPdi7A1iJtp5ngMIlEjyf/O6KnFhEmUoxC3/XTg3haSFQvmwnOwScfoBAewn7APPya9LoS5h+9pJebrKKtNR3bGW0JwgO8bgUNeQ3pQ7Iq3JlPR5iIb6FSyc9lb14UO/4q86x4PUvdJB2ILA+cVzo8jnxSRWI=; 5:s9s3nWZVwcK+KCoSgS6Qe5r923FI8Liz3vrsZOSEd/fDvPH0nikrSwKFmOS4dTTwOBdhycdrIodpGoRXxjiV/HpXqGaftz3bIERC4jQH10EJtiqST8TvRuiDpyLSUV8Ar0UPY7hidDfXol9b2IMKe2Mnq78SAEzupv5pv3IvEE0=; 24:ZZIVzxrj4T0f2+rmoRnUl4YxwQF5qDeQ+YB/aNxA0HJ05PQZ1B0Auo8lEEu6vG+mL6b7J5l6FzeFB/KDtCKTmQyL0jNzWpivyuv+tXGCsgM=; 7:8OQIMDMIebcFoLqpAyqODZLfI/kVW/absxUjm6t6Ua5JCg2xAfkE/MDYt7ELdLc1mFI8XGp7+prLMWIilgVME3QaEbvV8e0s80GNqcIhac3FRfrTjLF4qxNO+VmJeYJrzlsPErpiYkjGUkT8Q58nY0FyDffu/0Q+K42R/GoejTDZNg0el7VdOCyz6nBW90jSP+DXcZ3H4+Hy/zpLAjXSp8LemfuYadGHkJIHMZuKW3EuMpuddHRlrqH8ZOMwEe4L x-incomingheadercount: 47 x-eopattributedmessage: 0 x-microsoft-antispam: UriScan:; BCL:0; PCL:0; RULEID:(201702061074)(5061506573)(5061507331)(1603103135)(2017031320274)(2017031324274)(2017031323274)(2017031322404)(1601125374)(1603101448)(1701031045); SRVR:BN3NAM04HT030; x-ms-traffictypediagnostic: BN3NAM04HT030: x-ms-office365-filtering-correlation-id: 8ec924ef-cb06-4d02-8652-08d532ab5bce x-exchange-antispam-report-cfa-test: BCL:0; PCL:0; RULEID:(100000700101)(100105000095)(100000701101)(100105300095)(100000702101)(100105100095)(444000031); SRVR:BN3NAM04HT030; BCL:0; PCL:0; RULEID:(100000800101)(100110000095)(100000801101)(100110300095)(100000802101)(100110100095)(100000803101)(100110400095)(100000804101)(100110200095)(100000805101)(100110500095); SRVR:BN3NAM04HT030; x-forefront-prvs: 05009853EF x-forefront-antispam-report: SFV:NSPM; SFS:(7070007)(98901004); DIR:OUT; SFP:1901; SCL:1; SRVR:BN3NAM04HT030; H:CO2PR19MB0137.namprd19.prod.outlook.com; FPR:; SPF:None; LANG:; spamdiagnosticoutput: 1:99 spamdiagnosticmetadata: NSPM MIME-Version: 1.0 X-OriginatorOrg: hotmail.com X-MS-Exchange-CrossTenant-Network-Message-Id: 8ec924ef-cb06-4d02-8652-08d532ab5bce X-MS-Exchange-CrossTenant-originalarrivaltime: 23 Nov 2017 19:49:50.2444 (UTC) X-MS-Exchange-CrossTenant-fromentityheader: Internet X-MS-Exchange-CrossTenant-id: 84df9e7f-e9f6-40af-b435-aaaaaaaaaaaa X-MS-Exchange-Transport-CrossTenantHeadersStamped: BN3NAM04HT030 X-Content-Filtered-By: Mailman/MimeDel 2.1.22 Subject: Re: [RFC v3 1/3] UefiCpuPkg/CpuExceptionHandlerLib/X64: Add stack trace support X-BeenThere: edk2-devel@lists.01.org X-Mailman-Version: 2.1.22 Precedence: list List-Id: EDK II Development List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Thu, 23 Nov 2017 19:45:35 -0000 Content-Language: zh-CN Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 QW5kcmV3LA0KDQpJIGFncmVlZCBtc2Z0IHg2NCBjb21waWxlciB3b3VsZCBub3QgdXNlIGVicCB0 byBzYXZlIHN0YWNrIGZyYW1lLiBJbiBteSBwYXJ0LCBJIGFtIHRyeWluZyB0byBtYWtlIHVzZSBv ZiBleGNlcHRpb24gZGF0YSBzZWN0aW9uIHRvIGNhbGN1bGF0ZSB0aGUgc3RhY2sgZnJhbWUuDQoN CkkganVzdCB1c2VkIFBhdWxv4oCZcyBnY2MgeDY0IGNhc2UgdG8gc2hvdyBteSBxdWVzdGlvbiBv biByZXR1cm4gYWRkcmVzcyBkaXNwbGF5IGlzc3VlLiBJdCBtYXliZSBub3QgYSBnb29kIGV4YW1w bGU6KQ0KSXTigJliZXR0ZXIgUGF1bG8gY291bGQgcHJvdmlkZSBoaXMgZ2NjIHJlYXNzZW1ibHkg Y29kZS4NCg0KVGhhbmtzIQ0KSmVmZg0KDQoNCg0K5Y+R6Ieq5oiR55qEIGlQaG9uZQ0KDQrlnKgg MjAxN+W5tDEx5pyIMjTml6XvvIzkuIrljYgyOjM077yMQW5kcmV3IEZpc2ggPGFmaXNoQGFwcGxl LmNvbTxtYWlsdG86YWZpc2hAYXBwbGUuY29tPj4g5YaZ6YGT77yaDQoNCg0KT24gTm92IDIzLCAy MDE3LCBhdCA2OjI3IEFNLCBGYW4gSmVmZiA8dmFuamVmZl85MTlAaG90bWFpbC5jb208bWFpbHRv OnZhbmplZmZfOTE5QGhvdG1haWwuY29tPj4gd3JvdGU6DQoNCkhpIFBhdWxvLA0KDQoNCg0KSeKA mWQgbGlrZSB0byBjbGFyaWZ5IG15IHF1ZXN0aW9uLg0KDQpUaGUgZm9sbG93aW5nIGNhbGwgdHJh Y2UgaW5mb3JtYXRpb24gaXMgYWJzdHJhY3RlZCBmcm9tIHlvdXIgeDY0IGR1bXAgY29udGVudHMu DQoNCkNhbGwgdHJhY2U6DQoNCjAgMHg3REJDRDU4MCBAIDB4N0RCQ0QwMDArMHg1N0YgKDB4N0VF QzhEREMpIGluIFBhcnRpdGlvbkR4ZS5kbGwNCg0KMSAweDdEQkQ0MUJFIEAgMHg3REJDRDAwMCsw eDcxQkQgKDB4N0VFQzhERkMpIGluIFBhcnRpdGlvbkR4ZS5kbGwNCg0KDQoNCkkgZ3Vlc3MgeW91 IHVzZWQgQ3B1QnJlYWtwb2ludCgpIHRvIGRvIHlvdXIgdmFsaWRhdGlvbi4NCg0KRm9yIDB4N0RC Q0Q1ODAsIGl0IGlzIHJldHVybiBhZGRyZXNzIGZvbGxvd2VkIGJ5IOKAnGludCAz4oCdIGZyb20g eW91ciBjYXNlLg0KDQpJZiB3ZSBkdW1wIG9iaiBmaWxlLCB3ZSB3b3VsZCBzZWUgdGhlIGZvbGxv d2luZyBhc20gY29kZS4NCg0KIDAwMDAwMDAwN0RCQ0Q1N0Y6IENDICAgICAgICAgICAgICAgICBp bnQgICAgICAgICAzDQoNCiAwMDAwMDAwMDdEQkNENTgwOiBDMyAgICAgICAgICAgICAgICAgcmV0 DQoNCg0KSmVmZiwNCg0KQ2FuIHlvdSB3YWxrIHRoZSBzdGFjayB3aXRob3V0IGEgZnJhbWUgcG9p bnRlcj8gSSBkb24ndCB0aGluayB0aGUgY29tbW9uIG5hc20gY29kZSBzdXBwb3J0cyB0aGF0LiBG b3IgeDg2IEdDQyBhbmQgY2xhbmcgdXNlICVyYnAgYXMgdGhlIGZyYW1lIHBvaW50ZXIuIFRoZSBj b21tb24gbmFzbSBjb2RlIG1heSBiZSB3aHkgaGlzIHdhbGsgaXMgb2ZmPw0KDQpBcyB5b3UgY2Fu IHNlZSB3aGVuIGVtaXQgZnJhbWUgcG9pbnRlciBpcyBvbiB5b3UgZ2V0Og0KcHVzaHEgJXJicA0K bW92cSAlcnNwLCAlcmJwDQouLi4NCnBvcHEgJXJicA0KcmV0cQ0KDQp2cy4gdGhpcyB3aXRob3V0 IHRoZSBmcmFtZSBwb2ludGVyLCBsaWtlIHlvdXIgZXhhbXBsZSBhYm92ZS4NCi4uLg0KcmV0cQ0K DQpXaXRob3V0IGEgZnJhbWUgcG9pbnRlciB5b3UgbmVlZCBkZWJ1ZyBzeW1ib2xzIGFzIHlvdSBk b24ndCBrbm93IGhvdyBkZWVwIHRoZSByZXR1cm4gYWRkcmVzcyBpcyBvbiB0aGUgc3RhY2sgaW4g YW55IGdpdmVuIGxvY2F0aW9uIGluIGEgZnVuY3Rpb24uDQoNClNpbXBsZSBmcmFtZSBwb2ludGVy IGV4YW1wbGUgd2l0aCBjbGFuZzoNCn4vd29yay9Db21waWxlcj5jYXQgYnJlYWtwb2ludC5jDQp2 b2lkDQpDcHVCcmVha3BvaW50ICgNCiAgdm9pZA0KICApDQp7DQogIF9fYXNtX18gX192b2xhdGls ZV9fICgiaW50ICQzIik7DQp9DQp+L3dvcmsvQ29tcGlsZXI+Y2xhbmcgYnJlYWtwb2ludC5jIC1T DQp+L3dvcmsvQ29tcGlsZXI+Y2F0IGJyZWFrcG9pbnQuUw0KLnNlY3Rpb24gX19URVhULF9fdGV4 dCxyZWd1bGFyLHB1cmVfaW5zdHJ1Y3Rpb25zDQoubWFjb3N4X3ZlcnNpb25fbWluIDEwLCAxMg0K Lmdsb2JsIF9DcHVCcmVha3BvaW50DQoucDJhbGlnbiA0LCAweDkwDQpfQ3B1QnJlYWtwb2ludDog ICAgICAgICAgICAgICAgICAgICAgICAgIyMgQENwdUJyZWFrcG9pbnQNCi5jZmlfc3RhcnRwcm9j DQojIyBCQiMwOg0KcHVzaHEgJXJicA0KTGNmaTA6DQouY2ZpX2RlZl9jZmFfb2Zmc2V0IDE2DQpM Y2ZpMToNCi5jZmlfb2Zmc2V0ICVyYnAsIC0xNg0KbW92cSAlcnNwLCAlcmJwDQpMY2ZpMjoNCi5j ZmlfZGVmX2NmYV9yZWdpc3RlciAlcmJwDQojIyBJbmxpbmVBc20gU3RhcnQNCmludDMNCiMjIElu bGluZUFzbSBFbmQNCnBvcHEgJXJicA0KcmV0cQ0KLmNmaV9lbmRwcm9jDQoNCg0KLnN1YnNlY3Rp b25zX3ZpYV9zeW1ib2xzDQp+L3dvcmsvQ29tcGlsZXI+DQoNClRoYW5rcywNCg0KQW5kcmV3IEZp c2gNCg0KUFMgc29tZSBsbGRiIFB5dGhvbiB0aGF0IHdhbGtzIGFuIHg4NiBzdGFjayBmcmFtZSwg YXNzdW1pbmcgeW91IGhhdmUgYSBzdGFjayBwb2ludGVyLiBHaXZlbiBkZXJlZmVyZW5jaW5nIGEg bm9uLWNhbm9uaWNhbCBhZGRyZXNzZXMgY2F1c2VzIGEgR2VuZXJhbCBQcm90ZWN0aW9uIGZhdWx0 IGl0IGlzIGdvb2QgdG8gZXJyb3IgY2hlY2sgZm9yIHRoZW0gaWYgeW91ciBzdGFjayB3YWxrIGNv ZGUgY2FuIG5vdCB0b2xlcmF0ZSBleGNlcHRpb25zLiBFRklfQkFEX1BPSU5URVIsIGFrYSAweEFG QUZBRkFGQUZBRkFGQUYsIGlzIHRoZSBtb3N0IGNvbW1vbiB0aGluZyB5b3UgaGl0IChUaGFua3Mg dG8gVmluY2VudCBaaW1tZXIgbWFraW5nIHN1cmUgRUZJIGZhdWx0cyBoYXZlIG15IGluaXRpYWxz IGluIHRoZW0sIG5vdCB0byBtZW50aW9uIHRoZSBoZWFkZXIgZm9yIFRFIGltYWdlcyBpcyBWWiku DQoNCmRlZiBOb3RDYW5vbmljYWxBZGRyZXNzKGFkZHIsIHN0YXJ0PTB4MDAwMDdGRkZGRkZGRkZG RiwgZW5kPTB4RkY4MDAwMDAwMDAwMDAwMDApOg0KICByZXR1cm4gYWRkciA+IHN0YXJ0IGFuZCBh ZGRyIDwgZW5kDQoNCmRlZiBwcmludF9yYXdfc3RhY2t0cmFjZShkZWJ1Z2dlciwgZnAsIHBjLCBh ZGRyZXNzID0gMCwgdmVyYm9zZSA9IEZhbHNlKToNCiAgIyBEbyBhIHJhdyBzdGFjayB0cmFjZQ0K DQogIHN0cmlkZSA9NA0KICBTQlRhcmdldCAgPSBkZWJ1Z2dlci5HZXRTZWxlY3RlZFRhcmdldCgp DQogIGlmIFNCVGFyZ2V0Og0KICAgIFRyaXBsZSA9IFNCVGFyZ2V0LnRyaXBsZQ0KICAgIGlmIFRy aXBsZS5maW5kICgieDg2XzY0IikgIT0gLTE6DQogICAgICBzdHJpZGUgPSA4DQoNCiAgZnJhbWVf bnVtICA9IDANCiAgaWYgYWRkcmVzcyAhPSAwOg0KICAgIGZyYW1lX2FkZHIgPSByZWFkUG9pbnRl ciAoZGVidWdnZXIsIGFkZHJlc3MgKyAwKQ0KICAgIGZyYW1lX3BjICAgPSByZWFkUG9pbnRlciAo ZGVidWdnZXIsIGFkZHJlc3MgKyBzdHJpZGUpDQogIGVsc2U6DQogICAgZnJhbWVfYWRkciA9IGZw DQogICAgZnJhbWVfcGMgICA9IHBjDQogIHdoaWxlIGZyYW1lX251bSA8IDUwOg0KICAgIHByaW50 ICIweCV4OiAweCV4OiAlcyIgJSAoZnJhbWVfYWRkciwgZnJhbWVfcGMsIGRpc2Fzc2VtYmxlSW5z dHJ1Y3Rpb24gKGRlYnVnZ2VyLCBmcmFtZV9wYykpDQogICAgaWYgdmVyYm9zZToNCiAgICAgIHN0 ciA9IGVmaVN5bWJvbGljYXRlIChkZWJ1Z2dlciwgTm9uZSwgZnJhbWVfcGMsIEZhbHNlKQ0KICAg ICAgaWYgc3RyICE9ICcnOg0KICAgICAgICBwcmludCAiICAlcyIgJSBzdHINCg0KICAgIGZyYW1l X3BjICAgPSByZWFkUG9pbnRlciAoZGVidWdnZXIsIGZyYW1lX2FkZHIgKyBzdHJpZGUpDQogICAg ZnJhbWVfYWRkciA9IHJlYWRQb2ludGVyIChkZWJ1Z2dlciwgZnJhbWVfYWRkciArIDApDQogICAg ZnJhbWVfbnVtICs9IDENCiAgICBpZiBmcmFtZV9wYyA9PSAwOg0KICAgICAgYnJlYWsNCiAgICBp ZiBOb3RDYW5vbmljYWxBZGRyZXNzKGZyYW1lX3BjKSBvciBOb3RDYW5vbmljYWxBZGRyZXNzKGZy YW1lX2FkZHIpOg0KICAgICAgYnJlYWsNCg0KICByZXR1cm4gZnJhbWVfbnVtDQoNCg0KDQogKE9u IGNhc2UgMCwgdGhlIGNvZGUgYXQgb2Zmc2V0IDB4NTdGIGlzIGludCAzKQ0KDQogMDAwMDAwMDA3 REJENDFCOTogRTggQUYgMkEgMDAgMDAgICAgIGNhbGwgICAgICAgIENwdUJyZWFrcG9pbnQNCg0K IDAwMDAwMDAwN0RCRDQxQkU6IFhYIFhYIFhYIFhYICAgICAgICAgWFhYICAgIFhYWFhYWA0KDQog KE9uIGNhc2UgMSwgd2hhdOKAmXMgdGhlIGNvZGUgYXQgb2Zmc2V0IDB4NzFCRD8/KQ0KDQoNCg0K SWYgdGhlIHVwcGVyIGFzbSBjb2RlIGlzIG5vdCBjb3JyZWN0LCBwbGVhc2UgY29weSB5b3VyIG9i aiBmaWxlIGhlcmUuDQoNCg0KDQpJZiB0aGUgdXBwZXIgYXNtIGNvZGUgaXMgY29ycmVjdCwgSSB0 aGluayB3ZSBzaG91bGQgc2hvdyB0aGUgcmV0dXJuIGFkZHJlc3MgYXMgYmVsb3csIHNpbmNlIHdl IGNhbm5vdCBjYWxjdWxhdGUgdGhlIGNhbGxpbmcgSVAgYWRkcmVzcyBvbiBtb3N0IGNhc2VzLiAo cmV0dXJuIGFkZHJlc3Mg4oCTIDEgaXMgbm90IGFsd2F5cyB0aGUgY2FsbGluZyBJUCBhZGRyZXNz IG9uIElBIGFyY2gpLg0KDQowIDB4N0RCQ0Q1ODAgQCAweDdEQkNEMDAwKzB4NTgwICgweDdFRUM4 RERDKSBpbiBQYXJ0aXRpb25EeGUuZGxsDQoNCjEgMHg3REJENDFCRSBAIDB4N0RCQ0QwMDArMHg3 MUJFICgweDdFRUM4REZDKSBpbiBQYXJ0aXRpb25EeGUuZGxsDQoNCg0KDQpUaGFua3MhDQoNCkpl ZmYNCg0KDQoNCl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fDQpGcm9tOiBQYXVsbyBB bGNhbnRhcmEgPHBjYWNqckB6eXRvci5jb208bWFpbHRvOnBjYWNqckB6eXRvci5jb20+Pg0KU2Vu dDogTW9uZGF5LCBOb3ZlbWJlciAyMCwgMjAxNyAxMDo1OTo0MSBQTQ0KVG86IEZhbiBKZWZmOyBl ZGsyLWRldmVsQGxpc3RzLjAxLm9yZzxtYWlsdG86ZWRrMi1kZXZlbEBsaXN0cy4wMS5vcmc+DQpD YzogTGFzemxvIEVyc2VrOyBFcmljIERvbmcNClN1YmplY3Q6IFJlOiDnrZTlpI06IFtlZGsyXSBb UkZDIHYzIDEvM10gVWVmaUNwdVBrZy9DcHVFeGNlcHRpb25IYW5kbGVyTGliL1g2NDogQWRkIHN0 YWNrIHRyYWNlIHN1cHBvcnQNCg0KSGkgSmVmZiwNCg0KKHNvcnJ5IGZvciB0aGUgbGF0ZSByZXNw b25zZSkNCg0KT24gMTEvMTcvMjAxNyA1OjI0IEFNLCBGYW4gSmVmZiB3cm90ZToNClBhdWxvLA0K DQoNCkkgZG9uJ3QgdW5kZXJzdGFuZCB3aHkgeW91IC0gMSB3aGVuIGNhbGN1bGF0aW5nIEVJUCBv ZmZzZXQgaW4gaW1hZ2UsIGl0DQpjb25mdXNlZCBtZS4NCg0KVGhhdCdzIGFuIG9mZnNldCByZWxh dGl2ZSB0byB0aGUgUEUvQ09GRiBpbWFnZSBiYXNlOiAwIC0gKEltYWdlQmFzZSArDQpJbWFnZUJh c2VTaXplIC0gMSkNCg0KRG9lc24ndCB0aGF0IGxvb2sgcmlnaHQgdG8geW91Pw0KDQpUaGFua3MN ClBhdWxvDQoNCg0KDQorICBmb3IgKDs7KSB7DQorICAgIC8vDQorICAgIC8vIFByaW50IHN0YWNr IGZyYW1lIGluIHRoZSBmb2xsb3dpbmcgZm9ybWF0Og0KKyAgICAvLw0KKyAgICAvLyAjIDxSSVA+ IEAgPEltYWdlQmFzZT4rPFJlbE9mZnNldD4gKFJCUCkgaW4gWzxNb2R1bGVOYW1lPiB8ID8/Pz9d DQorICAgIC8vDQorICAgIEludGVybmFsUHJpbnRNZXNzYWdlICgNCisgICAgICAiJWQgMHglMDE2 bHggQCAweCUwMTZseCsweCV4ICgweCUwMTZseCkgaW4gJWFcbiIsDQorICAgICAgKlVud291bmRT dGFja3NDb3VudCAtIDEsDQorICAgICAgUmlwLA0KKyAgICAgIEltYWdlQmFzZSwNCisgICAgICBS aXAgLSBJbWFnZUJhc2UgLSAxLCAgIC8vID8/Pz8NCisgICAgICBSYnAsDQorICAgICAgUGRiRmls ZU5hbWUNCisgICAgICApOw0KKw0KDQpKZWZmDQoNCg0KDQoNCi0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KKuWP keS7tuS6ujoqIGVkazItZGV2ZWwgPGVkazItZGV2ZWwtYm91bmNlc0BsaXN0cy4wMS5vcmc8bWFp bHRvOmVkazItZGV2ZWwtYm91bmNlc0BsaXN0cy4wMS5vcmc+PiDku6PooaggUGF1bG8NCkFsY2Fu dGFyYSA8cGNhY2pyQHp5dG9yLmNvbTxtYWlsdG86cGNhY2pyQHp5dG9yLmNvbT4+DQoq5Y+R6YCB 5pe26Ze0OiogMjAxN+W5tDEx5pyIMTfml6UgNTo1Ng0KKuaUtuS7tuS6ujoqIGVkazItZGV2ZWxA bGlzdHMuMDEub3JnPG1haWx0bzplZGsyLWRldmVsQGxpc3RzLjAxLm9yZz4NCirmioTpgIE6KiBM YXN6bG8gRXJzZWs7IEVyaWMgRG9uZw0KKuS4u+mimDoqIFtlZGsyXSBbUkZDIHYzIDEvM10gVWVm aUNwdVBrZy9DcHVFeGNlcHRpb25IYW5kbGVyTGliL1g2NDogQWRkDQpzdGFjayB0cmFjZSBzdXBw b3J0DQpUaGlzIHBhdGNoIGFkZHMgc3RhY2sgdHJhY2Ugc3VwcG9ydCBkdXJpbmcgYSBYNjQgQ1BV IGV4Y2VwdGlvbi4NCg0KSXQgd2lsbCBkdW1wIG91dCBiYWNrIHRyYWNlLCBzdGFjayBjb250ZW50 cyBhcyB3ZWxsIGFzIGltYWdlIG1vZHVsZQ0KbmFtZXMgdGhhdCB3ZXJlIHBhcnQgb2YgdGhlIGNh bGwgc3RhY2suDQoNCkNvbnRyaWJ1dGVkLXVuZGVyOiBUaWFub0NvcmUgQ29udHJpYnV0aW9uIEFn cmVlbWVudCAxLjENCkNjOiBFcmljIERvbmcgPGVyaWMuZG9uZ0BpbnRlbC5jb208bWFpbHRvOmVy aWMuZG9uZ0BpbnRlbC5jb20+Pg0KQ2M6IExhc3psbyBFcnNlayA8bGVyc2VrQHJlZGhhdC5jb208 bWFpbHRvOmxlcnNla0ByZWRoYXQuY29tPj4NClNpZ25lZC1vZmYtYnk6IFBhdWxvIEFsY2FudGFy YSA8cGNhY2pyQHp5dG9yLmNvbTxtYWlsdG86cGNhY2pyQHp5dG9yLmNvbT4+DQotLS0NCiBVZWZp Q3B1UGtnL0xpYnJhcnkvQ3B1RXhjZXB0aW9uSGFuZGxlckxpYi9YNjQvQXJjaEV4Y2VwdGlvbkhh bmRsZXIuYyB8DQozNzYgKysrKysrKysrKysrKysrKysrKy0NCiAxIGZpbGUgY2hhbmdlZCwgMzc0 IGluc2VydGlvbnMoKyksIDIgZGVsZXRpb25zKC0pDQoNCmRpZmYgLS1naXQNCmEvVWVmaUNwdVBr Zy9MaWJyYXJ5L0NwdUV4Y2VwdGlvbkhhbmRsZXJMaWIvWDY0L0FyY2hFeGNlcHRpb25IYW5kbGVy LmMNCmIvVWVmaUNwdVBrZy9MaWJyYXJ5L0NwdUV4Y2VwdGlvbkhhbmRsZXJMaWIvWDY0L0FyY2hF eGNlcHRpb25IYW5kbGVyLmMNCmluZGV4IDY1ZjBjZmY2ODAuLmZlNzc2Y2NjMmQgMTAwNjQ0DQot LS0gYS9VZWZpQ3B1UGtnL0xpYnJhcnkvQ3B1RXhjZXB0aW9uSGFuZGxlckxpYi9YNjQvQXJjaEV4 Y2VwdGlvbkhhbmRsZXIuYw0KKysrIGIvVWVmaUNwdVBrZy9MaWJyYXJ5L0NwdUV4Y2VwdGlvbkhh bmRsZXJMaWIvWDY0L0FyY2hFeGNlcHRpb25IYW5kbGVyLmMNCkBAIC0xNCw2ICsxNCwxMSBAQA0K DQogI2luY2x1ZGUgIkNwdUV4Y2VwdGlvbkNvbW1vbi5oIg0KDQorLy8NCisvLyBVbmtub3duIFBE QiBmaWxlIG5hbWUNCisvLw0KK0dMT0JBTF9SRU1PVkVfSUZfVU5SRUZFUkVOQ0VEIENPTlNUIENI QVI4ICptVW5rbm93blBkYkZpbGVOYW1lID0gIj8/Pz8iOw0KKw0KIC8qKg0KICAgUmV0dXJuIGFk ZHJlc3MgbWFwIG9mIGV4Y2VwdGlvbiBoYW5kbGVyIHRlbXBsYXRlIHNvIHRoYXQgQyBjb2RlIGNh bg0KZ2VuZXJhdGUNCiAgIGV4Y2VwdGlvbiB0YWJsZXMuDQpAQCAtMjQyLDYgKzI0NywzNTcgQEAg RHVtcENwdUNvbnRleHQgKA0KICAgICApOw0KIH0NCg0KKy8qKg0KKyAgR2V0IGFic29sdXRlIHBh dGggYW5kIGZpbGUgbmFtZSBvZiBQREIgZmlsZSBpbiBQRS9DT0ZGIGltYWdlLg0KKw0KKyAgQHBh cmFtW2luXSAgSW1hZ2VCYXNlICAgICAgICAgICAgQmFzZSBhZGRyZXNzIG9mIFBFL0NPRkYgaW1h Z2UuDQorICBAcGFyYW1bb3V0XSBQZGJBYnNvbHV0ZUZpbGVQYXRoICBBYnNvbHV0ZSBwYXRoIG9m IFBEQiBmaWxlLg0KKyAgQHBhcmFtW291dF0gUGRiRmlsZU5hbWUgICAgICAgICAgRmlsZSBuYW1l IG9mIFBEQiBmaWxlLg0KKyoqLw0KK1NUQVRJQw0KK1ZPSUQNCitHZXRQZGJGaWxlTmFtZSAoDQor ICBJTiAgVUlOVE4gICAgSW1hZ2VCYXNlLA0KKyAgT1VUIENIQVI4ICAgICoqUGRiQWJzb2x1dGVG aWxlUGF0aCwNCisgIE9VVCBDSEFSOCAgICAqKlBkYkZpbGVOYW1lDQorICApDQorew0KKyAgVk9J RCAgICpQZGJQb2ludGVyOw0KKyAgQ0hBUjggICpTdHI7DQorDQorICAvLw0KKyAgLy8gR2V0IFBE QiBmaWxlIG5hbWUgZnJvbSBQRS9DT0ZGIGltYWdlDQorICAvLw0KKyAgUGRiUG9pbnRlciA9IFBl Q29mZkxvYWRlckdldFBkYlBvaW50ZXIgKChWT0lEICopSW1hZ2VCYXNlKTsNCisgIGlmIChQZGJQ b2ludGVyID09IE5VTEwpIHsNCisgICAgLy8NCisgICAgLy8gTm8gUERCIGZpbGUgbmFtZSBmb3Vu ZC4gU2V0IGl0IHRvIGFuIHVua25vd24gZmlsZSBuYW1lLg0KKyAgICAvLw0KKyAgICAqUGRiRmls ZU5hbWUgPSAoQ0hBUjggKiltVW5rbm93blBkYkZpbGVOYW1lOw0KKyAgICBpZiAoUGRiQWJzb2x1 dGVGaWxlUGF0aCAhPSBOVUxMKSB7DQorICAgICAgKlBkYkFic29sdXRlRmlsZVBhdGggPSBOVUxM Ow0KKyAgICB9DQorICB9IGVsc2Ugew0KKyAgICAvLw0KKyAgICAvLyBHZXQgZmlsZSBuYW1lIHBv cnRpb24gb3V0IG9mIFBEQiBmaWxlIGluIFBFL0NPRkYgaW1hZ2UNCisgICAgLy8NCisgICAgU3Ry ID0gKENIQVI4ICopKChVSU5UTilQZGJQb2ludGVyICsNCisgICAgICAgICAgICAgICAgICAgIEFz Y2lpU3RyTGVuICgoQ0hBUjggKilQZGJQb2ludGVyKSAtIHNpemVvZiAqU3RyKTsNCisgICAgZm9y ICg7ICpTdHIgIT0gJy8nICYmICpTdHIgIT0gJ1xcJzsgU3RyLS0pIHsNCisgICAgICA7DQorICAg IH0NCisNCisgICAgLy8NCisgICAgLy8gU2V0IFBEQiBmaWxlIG5hbWUgKGFsc28gc2tpcCB0cmFp bGluZyBwYXRoIHNlcGFyYXRvcjogJy8nIG9yICdcXCcpDQorICAgIC8vDQorICAgICpQZGJGaWxl TmFtZSA9IFN0ciArIDE7DQorDQorICAgIGlmIChQZGJBYnNvbHV0ZUZpbGVQYXRoICE9IE5VTEwp IHsNCisgICAgICAvLw0KKyAgICAgIC8vIFNldCBhYnNvbHV0ZSBmaWxlIHBhdGggb2YgUERCIGZp bGUNCisgICAgICAvLw0KKyAgICAgICpQZGJBYnNvbHV0ZUZpbGVQYXRoID0gUGRiUG9pbnRlcjsN CisgICAgfQ0KKyAgfQ0KK30NCisNCisvKioNCisgIER1bXAgc3RhY2sgY29udGVudHMuDQorDQor ICBAcGFyYW1baW5dICBDdXJyZW50UnNwICAgICAgICAgQ3VycmVudCBzdGFjayBwb2ludGVyIGFk ZHJlc3MuDQorICBAcGFyYW1baW5dICBVbndvdW5kU3RhY2tzQ291bnQgIENvdW50IG9mIHVud291 bmQgc3RhY2sgZnJhbWVzLg0KKyoqLw0KK1NUQVRJQw0KK1ZPSUQNCitEdW1wU3RhY2tDb250ZW50 cyAoDQorICBJTiBVSU5UNjQgIEN1cnJlbnRSc3AsDQorICBJTiBJTlROICAgIFVud291bmRTdGFj a3NDb3VudA0KKyAgKQ0KK3sNCisgIC8vDQorICAvLyBDaGVjayBmb3IgcHJvcGVyIHN0YWNrIHBv aW50ZXIgYWxpZ25tZW50DQorICAvLw0KKyAgaWYgKCgoVUlOVE4pQ3VycmVudFJzcCAmIChDUFVf U1RBQ0tfQUxJR05NRU5UIC0gMSkpICE9IDApIHsNCisgICAgSW50ZXJuYWxQcmludE1lc3NhZ2Ug KCIhISEhIFVuYWxpZ25lZCBzdGFjayBwb2ludGVyLiAhISEhXG4iKTsNCisgICAgcmV0dXJuOw0K KyAgfQ0KKw0KKyAgLy8NCisgIC8vIER1bXAgb3V0IHN0YWNrIGNvbnRlbnRzDQorICAvLw0KKyAg SW50ZXJuYWxQcmludE1lc3NhZ2UgKCJcblN0YWNrIGR1bXA6XG4iKTsNCisgIHdoaWxlIChVbndv dW5kU3RhY2tzQ291bnQtLSA+IDApIHsNCisgICAgSW50ZXJuYWxQcmludE1lc3NhZ2UgKA0KKyAg ICAgICIweCUwMTZseDogJTAxNmx4ICUwMTZseFxuIiwNCisgICAgICBDdXJyZW50UnNwLA0KKyAg ICAgICooVUlOVDY0ICopQ3VycmVudFJzcCwNCisgICAgICAqKFVJTlQ2NCAqKSgoVUlOVE4pQ3Vy cmVudFJzcCArIDgpDQorICAgICAgKTsNCisNCisgICAgLy8NCisgICAgLy8gUG9pbnQgdG8gbmV4 dCBzdGFjaw0KKyAgICAvLw0KKyAgICBDdXJyZW50UnNwICs9IENQVV9TVEFDS19BTElHTk1FTlQ7 DQorICB9DQorfQ0KKw0KKy8qKg0KKyAgRHVtcCBhbGwgaW1hZ2UgbW9kdWxlIG5hbWVzIGZyb20g Y2FsbCBzdGFjay4NCisNCisgIEBwYXJhbVtpbl0gIFN5c3RlbUNvbnRleHQgIFBvaW50ZXIgdG8g RUZJX1NZU1RFTV9DT05URVhULg0KKyoqLw0KK1NUQVRJQw0KK1ZPSUQNCitEdW1wSW1hZ2VNb2R1 bGVOYW1lcyAoDQorICBJTiBFRklfU1lTVEVNX0NPTlRFWFQgICBTeXN0ZW1Db250ZXh0DQorICAp DQorew0KKyAgRUZJX1NUQVRVUyAgU3RhdHVzOw0KKyAgVUlOVDY0ICAgICAgUmlwOw0KKyAgVUlO VE4gICAgICAgSW1hZ2VCYXNlOw0KKyAgVk9JRCAgICAgICAgKkVudHJ5UG9pbnQ7DQorICBDSEFS OCAgICAgICAqUGRiQWJzb2x1dGVGaWxlUGF0aDsNCisgIENIQVI4ICAgICAgICpQZGJGaWxlTmFt ZTsNCisgIFVJTlQ2NCAgICAgIFJicDsNCisgIFVJTlROICAgICAgIExhc3RJbWFnZUJhc2U7DQor DQorICAvLw0KKyAgLy8gU2V0IGN1cnJlbnQgUklQIGFkZHJlc3MNCisgIC8vDQorICBSaXAgPSBT eXN0ZW1Db250ZXh0LlN5c3RlbUNvbnRleHRYNjQtPlJpcDsNCisNCisgIC8vDQorICAvLyBTZXQg Y3VycmVudCBmcmFtZSBwb2ludGVyIGFkZHJlc3MNCisgIC8vDQorICBSYnAgPSBTeXN0ZW1Db250 ZXh0LlN5c3RlbUNvbnRleHRYNjQtPlJicDsNCisNCisgIC8vDQorICAvLyBDaGVjayBmb3IgcHJv cGVyIGZyYW1lIHBvaW50ZXIgYWxpZ25tZW50DQorICAvLw0KKyAgaWYgKCgoVUlOVE4pUmJwICYg KENQVV9TVEFDS19BTElHTk1FTlQgLSAxKSkgIT0gMCkgew0KKyAgICBJbnRlcm5hbFByaW50TWVz c2FnZSAoIiEhISEgVW5hbGlnbmVkIGZyYW1lIHBvaW50ZXIuICEhISFcbiIpOw0KKyAgICByZXR1 cm47DQorICB9DQorDQorICAvLw0KKyAgLy8gR2V0IGluaXRpYWwgUEUvQ09GRiBpbWFnZSBiYXNl IGFkZHJlc3MgZnJvbSBjdXJyZW50IFJJUA0KKyAgLy8NCisgIEltYWdlQmFzZSA9IFBlQ29mZlNl YXJjaEltYWdlQmFzZSAoUmlwKTsNCisgIGlmIChJbWFnZUJhc2UgPT0gMCkgew0KKyAgICBJbnRl cm5hbFByaW50TWVzc2FnZSAoIiEhISEgQ291bGQgbm90IGZpbmQgaW1hZ2UgbW9kdWxlIG5hbWVz LiAhISEhIik7DQorICAgIHJldHVybjsNCisgIH0NCisNCisgIC8vDQorICAvLyBTZXQgbGFzdCBQ RS9DT0ZGIGltYWdlIGJhc2UgYWRkcmVzcw0KKyAgLy8NCisgIExhc3RJbWFnZUJhc2UgPSBJbWFn ZUJhc2U7DQorDQorICAvLw0KKyAgLy8gR2V0IGluaXRpYWwgUEUvQ09GRiBpbWFnZSdzIGVudHJ5 IHBvaW50DQorICAvLw0KKyAgU3RhdHVzID0gUGVDb2ZmTG9hZGVyR2V0RW50cnlQb2ludCAoKFZP SUQgKilJbWFnZUJhc2UsICZFbnRyeVBvaW50KTsNCisgIGlmIChFRklfRVJST1IgKFN0YXR1cykp IHsNCisgICAgRW50cnlQb2ludCA9IE5VTEw7DQorICB9DQorDQorICAvLw0KKyAgLy8gR2V0IGZp bGUgbmFtZSBhbmQgYWJzb2x1dGUgcGF0aCBvZiBpbml0aWFsIFBEQiBmaWxlDQorICAvLw0KKyAg R2V0UGRiRmlsZU5hbWUgKEltYWdlQmFzZSwgJlBkYkFic29sdXRlRmlsZVBhdGgsICZQZGJGaWxl TmFtZSk7DQorDQorICAvLw0KKyAgLy8gUHJpbnQgb3V0IGluaXRpYWwgaW1hZ2UgbW9kdWxlIG5h bWUgKGlmIGFueSkNCisgIC8vDQorICBpZiAoUGRiQWJzb2x1dGVGaWxlUGF0aCAhPSBOVUxMKSB7 DQorICAgIEludGVybmFsUHJpbnRNZXNzYWdlICgNCisgICAgICAiXG4lYSAoSW1hZ2VCYXNlPTB4 JTAxNmx4LCBFbnRyeVBvaW50PTB4JTAxNmx4KTpcbiIsDQorICAgICAgUGRiRmlsZU5hbWUsDQor ICAgICAgSW1hZ2VCYXNlLA0KKyAgICAgIChVSU5UTilFbnRyeVBvaW50DQorICAgICAgKTsNCisg ICAgSW50ZXJuYWxQcmludE1lc3NhZ2UgKCIlYVxuIiwgUGRiQWJzb2x1dGVGaWxlUGF0aCk7DQor ICB9DQorDQorICAvLw0KKyAgLy8gV2FsayB0aHJvdWdoIGNhbGwgc3RhY2sgYW5kIGZpbmQgbmV4 dCBtb2R1bGUgbmFtZXMNCisgIC8vDQorICBmb3IgKDs7KSB7DQorICAgIC8vDQorICAgIC8vIFNl dCBSSVAgd2l0aCByZXR1cm4gYWRkcmVzcyBmcm9tIGN1cnJlbnQgc3RhY2sgZnJhbWUNCisgICAg Ly8NCisgICAgUmlwID0gKihVSU5UNjQgKikoKFVJTlROKVJicCArIDgpOw0KKw0KKyAgICAvLw0K KyAgICAvLyBJZiBSSVAgaXMgemVybywgdGhlbiBzdG9wIHVud2luZGluZyB0aGUgc3RhY2sNCisg ICAgLy8NCisgICAgaWYgKFJpcCA9PSAwKSB7DQorICAgICAgYnJlYWs7DQorICAgIH0NCisNCisg ICAgLy8NCisgICAgLy8gU2VhcmNoIGZvciB0aGUgcmVzcGVjdGl2ZSBQRS9DT0ZGIGltYWdlIGJh c2VkIG9uIFJJUA0KKyAgICAvLw0KKyAgICBJbWFnZUJhc2UgPSBQZUNvZmZTZWFyY2hJbWFnZUJh c2UgKFJpcCk7DQorICAgIGlmIChJbWFnZUJhc2UgPT0gMCkgew0KKyAgICAgIC8vDQorICAgICAg Ly8gU3RvcCBzdGFjayB0cmFjZQ0KKyAgICAgIC8vDQorICAgICAgYnJlYWs7DQorICAgIH0NCisN CisgICAgLy8NCisgICAgLy8gSWYgUklQIHBvaW50cyB0byBhbm90aGVyIFBFL0NPRkYgaW1hZ2Us IHRoZW4gZmluZCBpdHMgcmVzcGVjdGl2ZQ0KUERCIGZpbGUNCisgICAgLy8gbmFtZS4NCisgICAg Ly8NCisgICAgaWYgKExhc3RJbWFnZUJhc2UgIT0gSW1hZ2VCYXNlKSB7DQorICAgICAgLy8NCisg ICAgICAvLyBHZXQgUEUvQ09GRiBpbWFnZSdzIGVudHJ5IHBvaW50DQorICAgICAgLy8NCisgICAg ICBTdGF0dXMgPSBQZUNvZmZMb2FkZXJHZXRFbnRyeVBvaW50ICgoVk9JRCAqKUltYWdlQmFzZSwg JkVudHJ5UG9pbnQpOw0KKyAgICAgIGlmIChFRklfRVJST1IgKFN0YXR1cykpIHsNCisgICAgICAg IEVudHJ5UG9pbnQgPSBOVUxMOw0KKyAgICAgIH0NCisNCisgICAgICAvLw0KKyAgICAgIC8vIEdl dCBmaWxlIG5hbWUgYW5kIGFic29sdXRlIHBhdGggb2YgUERCIGZpbGUNCisgICAgICAvLw0KKyAg ICAgIEdldFBkYkZpbGVOYW1lIChJbWFnZUJhc2UsICZQZGJBYnNvbHV0ZUZpbGVQYXRoLCAmUGRi RmlsZU5hbWUpOw0KKw0KKyAgICAgIC8vDQorICAgICAgLy8gUHJpbnQgb3V0IGltYWdlIG1vZHVs ZSBuYW1lIChpZiBhbnkpDQorICAgICAgLy8NCisgICAgICBpZiAoUGRiQWJzb2x1dGVGaWxlUGF0 aCAhPSBOVUxMKSB7DQorICAgICAgICBJbnRlcm5hbFByaW50TWVzc2FnZSAoDQorICAgICAgICAg ICIlYSAoSW1hZ2VCYXNlPTB4JTAxNmx4LCBFbnRyeVBvaW50PTB4JTAxNmx4KTpcbiIsDQorICAg ICAgICAgIFBkYkZpbGVOYW1lLA0KKyAgICAgICAgICBJbWFnZUJhc2UsDQorICAgICAgICAgIChV SU5UTilFbnRyeVBvaW50DQorICAgICAgICAgICk7DQorICAgICAgICBJbnRlcm5hbFByaW50TWVz c2FnZSAoIiVhXG4iLCBQZGJBYnNvbHV0ZUZpbGVQYXRoKTsNCisgICAgICB9DQorDQorICAgICAg Ly8NCisgICAgICAvLyBTYXZlIGxhc3QgUEUvQ09GRiBpbWFnZSBiYXNlIGFkZHJlc3MNCisgICAg ICAvLw0KKyAgICAgIExhc3RJbWFnZUJhc2UgPSBJbWFnZUJhc2U7DQorICAgIH0NCisNCisgICAg Ly8NCisgICAgLy8gVW53aW5kIHRoZSBzdGFjaw0KKyAgICAvLw0KKyAgICBSYnAgPSAqKFVJTlQ2 NCAqKShVSU5UTilSYnA7DQorICB9DQorfQ0KKw0KKy8qKg0KKyAgRHVtcCBzdGFjayB0cmFjZS4N CisNCisgIEBwYXJhbVtpbl0gIFN5c3RlbUNvbnRleHQgICAgICBQb2ludGVyIHRvIEVGSV9TWVNU RU1fQ09OVEVYVC4NCisgIEBwYXJhbVtvdXRdIFVud291bmRTdGFja3NDb3VudCAgQ291bnQgb2Yg dW53b3VuZCBzdGFjayBmcmFtZXMuDQorKiovDQorU1RBVElDDQorVk9JRA0KK0R1bXBTdGFja1Ry YWNlICgNCisgIElOICBFRklfU1lTVEVNX0NPTlRFWFQgICBTeXN0ZW1Db250ZXh0LA0KKyAgT1VU IElOVE4gICAgICAgICAgICAgICAgICpVbndvdW5kU3RhY2tzQ291bnQNCisgICkNCit7DQorICBV SU5UNjQgIFJpcDsNCisgIFVJTlQ2NCAgUmJwOw0KKyAgVUlOVE4gICBJbWFnZUJhc2U7DQorICBD SEFSOCAgICpQZGJGaWxlTmFtZTsNCisNCisgIC8vDQorICAvLyBTZXQgY3VycmVudCBSSVAgYWRk cmVzcw0KKyAgLy8NCisgIFJpcCA9IFN5c3RlbUNvbnRleHQuU3lzdGVtQ29udGV4dFg2NC0+Umlw Ow0KKw0KKyAgLy8NCisgIC8vIFNldCBjdXJyZW50IGZyYW1lIHBvaW50ZXIgYWRkcmVzcw0KKyAg Ly8NCisgIFJicCA9IFN5c3RlbUNvbnRleHQuU3lzdGVtQ29udGV4dFg2NC0+UmJwOw0KKw0KKyAg Ly8NCisgIC8vIEdldCBpbml0aWFsIFBFL0NPRkYgaW1hZ2UgYmFzZSBhZGRyZXNzIGZyb20gY3Vy cmVudCBSSVANCisgIC8vDQorICBJbWFnZUJhc2UgPSBQZUNvZmZTZWFyY2hJbWFnZUJhc2UgKFJp cCk7DQorICBpZiAoSW1hZ2VCYXNlID09IDApIHsNCisgICAgSW50ZXJuYWxQcmludE1lc3NhZ2Ug KCIhISEhIENvdWxkIG5vdCBmaW5kIGJhY2t0cmFjZSBpbmZvcm1hdGlvbi4NCiEhISEiKTsNCisg ICAgcmV0dXJuOw0KKyAgfQ0KKw0KKyAgLy8NCisgIC8vIEdldCBQREIgZmlsZSBuYW1lIGZyb20g aW5pdGlhbCBQRS9DT0ZGIGltYWdlDQorICAvLw0KKyAgR2V0UGRiRmlsZU5hbWUgKEltYWdlQmFz ZSwgTlVMTCwgJlBkYkZpbGVOYW1lKTsNCisNCisgIC8vDQorICAvLyBJbml0aWFsaXplIGNvdW50 IG9mIHVud291bmQgc3RhY2tzDQorICAvLw0KKyAgKlVud291bmRTdGFja3NDb3VudCA9IDE7DQor DQorICAvLw0KKyAgLy8gUHJpbnQgb3V0IGJhY2sgdHJhY2UNCisgIC8vDQorICBJbnRlcm5hbFBy aW50TWVzc2FnZSAoIlxuQ2FsbCB0cmFjZTpcbiIpOw0KKw0KKyAgZm9yICg7Oykgew0KKyAgICAv Lw0KKyAgICAvLyBQcmludCBzdGFjayBmcmFtZSBpbiB0aGUgZm9sbG93aW5nIGZvcm1hdDoNCisg ICAgLy8NCisgICAgLy8gIyA8UklQPiBAIDxJbWFnZUJhc2U+KzxSZWxPZmZzZXQ+IChSQlApIGlu IFs8TW9kdWxlTmFtZT4gfCA/Pz8/XQ0KKyAgICAvLw0KKyAgICBJbnRlcm5hbFByaW50TWVzc2Fn ZSAoDQorICAgICAgIiVkIDB4JTAxNmx4IEAgMHglMDE2bHgrMHgleCAoMHglMDE2bHgpIGluICVh XG4iLA0KKyAgICAgICpVbndvdW5kU3RhY2tzQ291bnQgLSAxLA0KKyAgICAgIFJpcCwNCisgICAg ICBJbWFnZUJhc2UsDQorICAgICAgUmlwIC0gSW1hZ2VCYXNlIC0gMSwNCisgICAgICBSYnAsDQor ICAgICAgUGRiRmlsZU5hbWUNCisgICAgICApOw0KKw0KKyAgICAvLw0KKyAgICAvLyBTZXQgUklQ IHdpdGggcmV0dXJuIGFkZHJlc3MgZnJvbSBjdXJyZW50IHN0YWNrIGZyYW1lDQorICAgIC8vDQor ICAgIFJpcCA9ICooVUlOVDY0ICopKChVSU5UTilSYnAgKyA4KTsNCisNCisgICAgLy8NCisgICAg Ly8gSWYgUklQIGlzIHplcm8sIHRoZW4gc3RvcCB1bndpbmRpbmcgdGhlIHN0YWNrDQorICAgIC8v DQorICAgIGlmIChSaXAgPT0gMCkgew0KKyAgICAgIGJyZWFrOw0KKyAgICB9DQorDQorICAgIC8v DQorICAgIC8vIFNlYXJjaCBmb3IgdGhlIHJlc3BlY3RpdmUgUEUvQ09GRiBpbWFnZSBiYXNlZCBv biBSSVANCisgICAgLy8NCisgICAgSW1hZ2VCYXNlID0gUGVDb2ZmU2VhcmNoSW1hZ2VCYXNlIChS aXApOw0KKyAgICBpZiAoSW1hZ2VCYXNlID09IDApIHsNCisgICAgICAvLw0KKyAgICAgIC8vIFN0 b3Agc3RhY2sgdHJhY2UNCisgICAgICAvLw0KKyAgICAgIGJyZWFrOw0KKyAgICB9DQorDQorICAg IC8vDQorICAgIC8vIEdldCBQREIgZmlsZSBuYW1lDQorICAgIC8vDQorICAgIEdldFBkYkZpbGVO YW1lIChJbWFnZUJhc2UsIE5VTEwsICZQZGJGaWxlTmFtZSk7DQorDQorICAgIC8vDQorICAgIC8v IFVud2luZCB0aGUgc3RhY2sNCisgICAgLy8NCisgICAgUmJwID0gKihVSU5UNjQgKikoVUlOVE4p UmJwOw0KKw0KKyAgICAvLw0KKyAgICAvLyBJbmNyZW1lbnQgY291bnQgb2YgdW53b3VuZCBzdGFj a3MNCisgICAgLy8NCisgICAgKCpVbndvdW5kU3RhY2tzQ291bnQpKys7DQorICB9DQorfQ0KKw0K IC8qKg0KICAgRGlzcGxheSBDUFUgaW5mb3JtYXRpb24uDQoNCkBAIC0yNTQsOSArNjEwLDI1IEBA IER1bXBJbWFnZUFuZENwdUNvbnRlbnQgKA0KICAgSU4gRUZJX1NZU1RFTV9DT05URVhUICAgU3lz dGVtQ29udGV4dA0KICAgKQ0KIHsNCisgIElOVE4gVW53b3VuZFN0YWNrc0NvdW50Ow0KKw0KKyAg Ly8NCisgIC8vIER1bXAgQ1BVIGNvbnRleHQNCisgIC8vDQogICBEdW1wQ3B1Q29udGV4dCAoRXhj ZXB0aW9uVHlwZSwgU3lzdGVtQ29udGV4dCk7DQorDQorICAvLw0KKyAgLy8gRHVtcCBzdGFjayB0 cmFjZQ0KKyAgLy8NCisgIER1bXBTdGFja1RyYWNlIChTeXN0ZW1Db250ZXh0LCAmVW53b3VuZFN0 YWNrc0NvdW50KTsNCisNCisgIC8vDQorICAvLyBEdW1wIGltYWdlIG1vZHVsZSBuYW1lcw0KKyAg Ly8NCisgIER1bXBJbWFnZU1vZHVsZU5hbWVzIChTeXN0ZW1Db250ZXh0KTsNCisNCiAgIC8vDQot ICAvLyBEdW1wIG1vZHVsZSBpbWFnZSBiYXNlIGFuZCBtb2R1bGUgZW50cnkgcG9pbnQgYnkgUklQ DQorICAvLyBEdW1wIHN0YWNrIGNvbnRlbnRzDQogICAvLw0KLSAgRHVtcE1vZHVsZUltYWdlSW5m byAoU3lzdGVtQ29udGV4dC5TeXN0ZW1Db250ZXh0WDY0LT5SaXApOw0KKyAgRHVtcFN0YWNrQ29u dGVudHMgKFN5c3RlbUNvbnRleHQuU3lzdGVtQ29udGV4dFg2NC0+UnNwLA0KVW53b3VuZFN0YWNr c0NvdW50KTsNCiB9DQotLQ0KMi4xNC4zDQoNCl9fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fDQplZGsyLWRldmVsIG1haWxpbmcgbGlzdA0KZWRrMi1kZXZlbEBs aXN0cy4wMS5vcmc8bWFpbHRvOmVkazItZGV2ZWxAbGlzdHMuMDEub3JnPg0KaHR0cHM6Ly9saXN0 cy4wMS5vcmcvbWFpbG1hbi9saXN0aW5mby9lZGsyLWRldmVsDQoNCmVkazItZGV2ZWwgSW5mbyBQ YWdlIC0gMDEub3JnPGh0dHA6Ly8wMS5vcmc+DQo8aHR0cHM6Ly9saXN0cy4wMS5vcmcvbWFpbG1h bi9saXN0aW5mby9lZGsyLWRldmVsPg0KbGlzdHMuMDEub3JnPGh0dHA6Ly9saXN0cy4wMS5vcmc+ DQpZb3VyIGVtYWlsIGFkZHJlc3M6IFlvdXIgbmFtZSAob3B0aW9uYWwpOiBZb3UgbWF5IGVudGVy IGEgcHJpdmFjeQ0KcGFzc3dvcmQgYmVsb3cuIFRoaXMgcHJvdmlkZXMgb25seSBtaWxkIHNlY3Vy aXR5LCBidXQgc2hvdWxkIHByZXZlbnQNCm90aGVycyBmcm9tIG1lc3NpbmcgLi4uDQoNCg0KDQpf X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXw0KZWRrMi1kZXZl bCBtYWlsaW5nIGxpc3QNCmVkazItZGV2ZWxAbGlzdHMuMDEub3JnPG1haWx0bzplZGsyLWRldmVs QGxpc3RzLjAxLm9yZz4NCmh0dHBzOi8vbGlzdHMuMDEub3JnL21haWxtYW4vbGlzdGluZm8vZWRr Mi1kZXZlbA0KDQo=