From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from mga14.intel.com (mga14.intel.com [192.55.52.115]) by mx.groups.io with SMTP id smtpd.web12.2887.1610507035485277080 for ; Tue, 12 Jan 2021 19:03:55 -0800 Authentication-Results: mx.groups.io; dkim=pass header.i=@intel.onmicrosoft.com header.s=selector2-intel-onmicrosoft-com header.b=FGDGUdtY; spf=pass (domain: intel.com, ip: 192.55.52.115, mailfrom: zhichao.gao@intel.com) IronPort-SDR: tQu3RkLG9Hy/0ehfDBtYooDZJ0amE9aiwfvHmFuILYxlTt3SacD510jMWWADvdX118AZhP6kew IIRvNYDlHecQ== X-IronPort-AV: E=McAfee;i="6000,8403,9862"; a="177365679" X-IronPort-AV: E=Sophos;i="5.79,343,1602572400"; d="scan'208";a="177365679" Received: from orsmga001.jf.intel.com ([10.7.209.18]) by fmsmga103.fm.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 12 Jan 2021 19:03:54 -0800 IronPort-SDR: CPPzbKFPW5j5mmjnBwERZr3x9CPGKLgQ3gvcit9OgCV4iyEwYGs3ocpOglqKK9AHyeNaSRhakS fLhjmN5Qlvfw== X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="5.79,343,1602572400"; d="scan'208";a="424401554" Received: from fmsmsx604.amr.corp.intel.com ([10.18.126.84]) by orsmga001.jf.intel.com with ESMTP; 12 Jan 2021 19:03:53 -0800 Received: from fmsmsx612.amr.corp.intel.com (10.18.126.92) by fmsmsx604.amr.corp.intel.com (10.18.126.84) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.1713.5; Tue, 12 Jan 2021 19:03:53 -0800 Received: from fmsedg602.ED.cps.intel.com (10.1.192.136) 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.1713.5 via Frontend Transport; Tue, 12 Jan 2021 19:03:53 -0800 Received: from NAM12-BN8-obe.outbound.protection.outlook.com (104.47.55.170) by edgegateway.intel.com (192.55.55.71) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.1.1713.5; Tue, 12 Jan 2021 19:03:50 -0800 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=E4pXr+bm58kGPj1AX7VbdN9m9r69aE2+UKwPe0TN81swuy2emiyVQIDOnVCIe4eyKRv+iqdGJ1wb6XFbCCLN0IVAtT6PFpbiw8Mlt9gb+H0DVaqGMXQqctbiXV5GixXnaBb1bBbRe9LKpQZTerhLxrlL0WvkG6Gpz0oBLiEXM7JNQGCuOmMYQPECyTwGh2G3IbSmqmS0hbo7SHTrNUKGhalDFOzyR4r/H9c/wO8pvd2Qb6USCAom3VburfgvfWXVKHT6qckCF2YRrm/A2US/9ic+bUBwGjQJHJJtrfo45mXGtJhxaX/fFsSYVcMi9vmWUKcpgrCYayflikq3pjVObA== 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=CfRe4FNEq855ub1YFLhfOa++elDv7zW1EA8yv2HMSQY=; b=OhXeAuFPbTS0TgYLlg0tIrE67LpR+ZG/QP5i5lzItenoKPQz04NF2bhe8FL1YiSYwA9NtcJ6Z0sbp7kxoEoR9sKe92d2mWAZMCYnRwSwXkOIMD5t70QwCVcx8ZL4hAyMluPLrXLwRnv0GPNHm6lHDJtJjzm8ynqCPLtWweR+uWdeEaN5FVN2gaBk8ZLxZPG/mDiUMjcj5DUiPCK0Lxcfq4a810/7DiFPldGFO45G01A7aDwhRkpvQXuMbKgg85nRQ4P19tmNUD5c9nnOhVPX3f6RnMjcNw+L8rsmuk3ou+/rJsrYVj1DoC01SMzDjq4uEwK5fy5WoHfPKnmToPmejw== 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=CfRe4FNEq855ub1YFLhfOa++elDv7zW1EA8yv2HMSQY=; b=FGDGUdtYYxhLa2Oa7bTaM0IyEBiSHWsNVM98gghkXQ3qJzm31rKDoKk93tlzeloXLUbkFb4TeVo2KDExV5vZeKzi7rhNqRqE86zBUD55lFs732CXtZjWbOxDY4nW3VzSSL8aI91x7zJkSw21wPE8QEtLsRJovKRVM5WIQHDbrvM= Received: from MWHPR11MB1647.namprd11.prod.outlook.com (2603:10b6:301:d::12) by MW3PR11MB4748.namprd11.prod.outlook.com (2603:10b6:303:2e::9) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.3742.6; Wed, 13 Jan 2021 03:03:49 +0000 Received: from MWHPR11MB1647.namprd11.prod.outlook.com ([fe80::c861:b9c1:b082:7c77]) by MWHPR11MB1647.namprd11.prod.outlook.com ([fe80::c861:b9c1:b082:7c77%8]) with mapi id 15.20.3742.012; Wed, 13 Jan 2021 03:03:49 +0000 From: "Gao, Zhichao" To: Laszlo Ersek , edk2-devel-groups-io CC: =?utf-8?B?UGhpbGlwcGUgTWF0aGlldS1EYXVkw6k=?= , "Ni, Ray" Subject: Re: [PATCH 4/8] ShellPkg/ShellCommandLib: add ShellSortFileList() Thread-Topic: [PATCH 4/8] ShellPkg/ShellCommandLib: add ShellSortFileList() Thread-Index: AQHW4rBIcO4pVXDMskevZOdzWUUhFqok6jJg Date: Wed, 13 Jan 2021 03:03:49 +0000 Message-ID: References: <20210104154235.31785-1-lersek@redhat.com> <20210104154235.31785-5-lersek@redhat.com> In-Reply-To: <20210104154235.31785-5-lersek@redhat.com> Accept-Language: en-US X-MS-Has-Attach: X-MS-TNEF-Correlator: dlp-product: dlpe-windows dlp-reaction: no-action dlp-version: 11.5.1.3 authentication-results: redhat.com; dkim=none (message not signed) header.d=none;redhat.com; dmarc=none action=none header.from=intel.com; x-originating-ip: [192.198.147.213] x-ms-publictraffictype: Email x-ms-office365-filtering-correlation-id: 138af122-e6b2-4763-277e-08d8b76fd99d x-ms-traffictypediagnostic: MW3PR11MB4748: x-ms-exchange-transport-forked: True x-microsoft-antispam-prvs: x-ms-oob-tlc-oobclassifiers: OLM:9508; x-ms-exchange-senderadcheck: 1 x-microsoft-antispam: BCL:0; x-microsoft-antispam-message-info: DbYhvH/OHqGmBiuHewcgDKRBkFBFLel126jMJY0kvfWDwU5dCF1OSB1CECXWsOZaj7U882FA9ljTy3YYY53c22wCXDekMGR6xZkZKEXFxmbzClm7aW9yiN3UvD45bgcevArd4kYn95wMYJdSghf65mAqHMfeoPXddSy+0sQ/KZBCVdZIuHKdub3Tup28UR7Zx9o/Iwzh6RKWJ2PMSBdZQOgkDjNAvZ3A/vJrNDsknjiKy05tjEji/UjSL27psRu/ksqLmfWVC7PrlHNer7f/QZ+dRm9gcidQFe30pNkq3wCjZoydUar1ARjlNxfMYs6b0N+D/0cHlJE51pZtpR+Jc8VMMTr9Y9Ry+Ox1JikJe7YevGjdRMPdsYh3WLiqwuiHDKwF/P1iPuBAt8hBmRlB+Q+rOldZxKvzWih4CiTQT8Hx8HgiIgeu4PW19hmkY3ichM2y5h2nNyJgge6AIGKM8ro+mLW+s/1CSVCBHYAMaNQ9xYvUsBjpfjn0GUqVoWuv9zQG8MbYkaZrU/2po7GXgg== x-forefront-antispam-report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:MWHPR11MB1647.namprd11.prod.outlook.com;PTR:;CAT:NONE;SFS:(4636009)(366004)(376002)(396003)(346002)(39860400002)(136003)(4326008)(8676002)(55016002)(9686003)(71200400001)(107886003)(478600001)(19627235002)(66556008)(76116006)(54906003)(64756008)(316002)(966005)(7696005)(86362001)(66946007)(66446008)(186003)(26005)(66476007)(52536014)(30864003)(83380400001)(2906002)(53546011)(110136005)(6506007)(5660300002)(8936002)(33656002)(403724002)(579004);DIR:OUT;SFP:1102; x-ms-exchange-antispam-messagedata: =?utf-8?B?WEt4SzQ5MHo0S2orajlZaE13QkR3aWIwWE5vYTMzbm5NUGhkNnY5TC9NSHlZ?= =?utf-8?B?NkZyYzViMDVFOHNXWG1TMG1JVXZTQzFQbmMrNzZoY010WUIxeTZBVHkzMmVP?= =?utf-8?B?dktQV3hFS2NaQlBDcnpWbHVnanNYVEgwdkxBN0szTDNvY1VEK0MzRUhwWEda?= =?utf-8?B?YVVzbVZGVVBsT2pGMXl5bnoxVk16VHlLaEplVGtkTXNObDB4bEUxeFdSSUJh?= =?utf-8?B?Nlh0azVGSFZnVHpGWHlLTTRvK05zR3FwMlVsU0FlMWtwN3ZTcVN3b1dNZDJI?= =?utf-8?B?NG55THk3OWFQbXllejFBS09Pd2FlOTVzakJJNWp0WVJaazEvclY2Q0pmd25x?= =?utf-8?B?L1NKZS9DcGUrVHJsTmFTT3JkU1d2bkVtZEhNSVovMjN4TTE5VWdFQ09RUGhP?= =?utf-8?B?eDg4TElVZ2ExaHNJa2hqMENsN1JlNEFUZktIZGlRNlFNQUNFNEY1YW1hSzdY?= =?utf-8?B?aTgrbGI3NkZhYnRtdGJ3Z0E4S25FVG1rdGUxK014bmt2OERJZm1MdUhnc1o5?= =?utf-8?B?bFhoU1pjRDhJc0l1eVl1eU5OaXBaSEt5NU9jTS96b2hCWGFQSmpLTEpkZ3FJ?= =?utf-8?B?TGlGK3Qvckw1aU05ZWY5aE5tbkxwamtGRy85SmljVnJpNXhyMkt1eGZEUjZM?= =?utf-8?B?cll1WlpFRXBZd0M1KytxTWpqYWJ6aVUxOGFiMTY5d2x6aW16anVCTUp2YXR6?= =?utf-8?B?Q0dUc1NQUEtpSEx2UW9pbEJpN2VjaVFzMUluWVA3ZHl0VW9DaVdsMmZUWUMv?= =?utf-8?B?V0lTZk5TNHIxdjZtajVsY1YzSXhBRkFQVGVORU05MWg2UGY3bUpCTGZuK2w2?= =?utf-8?B?bFdlMEJqbG9LVjMwUytmY3pYZW1UMU96MjhPSEFqNlRrQ0IzS2I3MXpidGNQ?= =?utf-8?B?NXo1SWtkQnBLS2NrSTVsS1FSVzBNQnpKSHd0aGFvRVNWeUNmOVo4OUY2S2ti?= =?utf-8?B?YldsYnVwejYyd2d4OXE4WjdVWk1yK2dBckxCZ2JONG5BdGxVMVUxYnBrWHA2?= =?utf-8?B?MEJkRC9uUVhwcDJsUEJlREg0MXZhOWJMSjhjcVJydzFnK3o1MlR6K0VkVG9q?= =?utf-8?B?d1ZsR0JPWURaWFhSdjlWWmErQjZiZkJvVEdkSjRiMG5sQnRjVS9DTkdCd3VZ?= =?utf-8?B?WS9FNHlrUHlXK0hUMWVhaWFuMXNkUHU4L3hhOXFTeHFnbVIvdk94SEh1TkdH?= =?utf-8?B?dml5QlR6MlN2V1dXRmgzVXkvaTNNL2FYS2wvRkxCNmhKalV2bG9sWGxUYkY2?= =?utf-8?B?WEdiMUxEaEI2U3R5WlArbDBmb3c3WjI5VFVLZDR6bVhkbkJ0dFU1VU1NaG5U?= =?utf-8?Q?ZmsyHOG6TBJQA=3D?= MIME-Version: 1.0 X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-AuthSource: MWHPR11MB1647.namprd11.prod.outlook.com X-MS-Exchange-CrossTenant-Network-Message-Id: 138af122-e6b2-4763-277e-08d8b76fd99d X-MS-Exchange-CrossTenant-originalarrivaltime: 13 Jan 2021 03:03:49.2043 (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: xzRImrKmmK8rmeWMNdq5PNt9Jwh0Eu2Lz16d9o+gqFGFIIFDqzfKIsYDjrXHTY0n7QaE2meTIgGPk8H5fGswzg== X-MS-Exchange-Transport-CrossTenantHeadersStamped: MW3PR11MB4748 Return-Path: zhichao.gao@intel.com X-OriginatorOrg: intel.com Content-Language: en-US Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 UmV2aWV3ZWQtYnk6IFpoaWNoYW8gR2FvIDx6aGljaGFvLmdhb0BpbnRlbC5jb20+DQoNClRoYW5r cywNClpoaWNoYW8NCg0KPiAtLS0tLU9yaWdpbmFsIE1lc3NhZ2UtLS0tLQ0KPiBGcm9tOiBMYXN6 bG8gRXJzZWsgPGxlcnNla0ByZWRoYXQuY29tPg0KPiBTZW50OiBNb25kYXksIEphbnVhcnkgNCwg MjAyMSAxMTo0MyBQTQ0KPiBUbzogZWRrMi1kZXZlbC1ncm91cHMtaW8gPGRldmVsQGVkazIuZ3Jv dXBzLmlvPg0KPiBDYzogUGhpbGlwcGUgTWF0aGlldS1EYXVkw6kgPHBoaWxtZEByZWRoYXQuY29t PjsgTmksIFJheSA8cmF5Lm5pQGludGVsLmNvbT47DQo+IEdhbywgWmhpY2hhbyA8emhpY2hhby5n YW9AaW50ZWwuY29tPg0KPiBTdWJqZWN0OiBbUEFUQ0ggNC84XSBTaGVsbFBrZy9TaGVsbENvbW1h bmRMaWI6IGFkZCBTaGVsbFNvcnRGaWxlTGlzdCgpDQo+IA0KPiBJbnRyb2R1Y2UgdGhlIFNoZWxs U29ydEZpbGVMaXN0KCkgZnVuY3Rpb24sIGZvciBzb3J0aW5nIGFuIEVGSV9TSEVMTF9GSUxFX0lO Rk8gbGlzdCwNCj4gYnkgRmlsZU5hbWUgb3IgYnkgRnVsbE5hbWUuDQo+IA0KPiBEdXBsaWNhdGVz IGNhbiBiZSBrZXB0IGluIHRoZSBzYW1lIGxpc3QsIG9yIHNlcGFyYXRlZCBvdXQgdG8gYSBuZXcg bGlzdC4NCj4gSW4gZWl0aGVyIGNhc2UsIHRoZSByZWxhdGl2ZSBvcmRlciBiZXR3ZWVuIGR1cGxp Y2F0ZXMgZG9lcyBub3QgY2hhbmdlICh0aGUNCj4gc29ydGluZyBpcyBzdGFibGUpLg0KPiANCj4g Rm9yIHRoZSBzb3J0aW5nLCB1c2UgT3JkZXJlZENvbGxlY3Rpb25MaWIgcmF0aGVyIHRoYW4gU29y dExpYjoNCj4gDQo+IC0gVGhlIFBlcmZvcm1RdWlja1NvcnQoKSBmdW5jdGlvbiBmcm9tIHRoZSBs YXR0ZXIgaGFzIHF1YWRyYXRpYyB3b3JzdC1jYXNlDQo+ICAgdGltZSBjb21wbGV4aXR5LCBwbHVz IGl0IGlzIGltcGxlbWVudGVkIHJlY3Vyc2l2ZWx5IChzZWUNCj4gICAiTWRlTW9kdWxlUGtnL0xp YnJhcnkvVWVmaVNvcnRMaWIvVWVmaVNvcnRMaWIuYyIpLiBJdCBjYW4gYWxzbyBub3QNCj4gICBy ZXR1cm4gYW4gZXJyb3Igb24gbWVtb3J5IGFsbG9jYXRpb24gZmFpbHVyZS4NCj4gDQo+IC0gSW4g Y29tcGFyaXNvbiwgdGhlIFJlZC1CbGFjayBUcmVlIGluc3RhbmNlIG9mIE9yZGVyZWRDb2xsZWN0 aW9uTGliIHNvcnRzDQo+ICAgaW4gTyhuKmxvZyhuKSkgd29yc3QtY2FzZSB0aW1lLCBjb250YWlu cyBubyByZWN1cnNpb24gd2l0aCB0aGUgZGVmYXVsdA0KPiAgIFBjZFZhbGlkYXRlT3JkZXJlZENv bGxlY3Rpb249RkFMU0Ugc2V0dGluZywgYW5kIHRoZSBPcmRlcmVkQ29sbGVjdGlvbkxpYg0KPiAg IGNsYXNzIEFQSXMgcmV0dXJuIGVycm9ycyBhcHByb3ByaWF0ZWx5Lg0KPiANCj4gVGhlIE9yZGVy ZWRDb2xsZWN0aW9uTGliIEFQSXMgZG8gbm90IHBlcm1pdCBkdXBsaWNhdGVzIG5hdGl2ZWx5LCBi dXQgYnkgdXNpbmcgbGlzdHMNCj4gYXMgY29sbGVjdGlvbiBlbnRyaWVzLCBzdGFibGUgc29ydGlu ZyBvZiBkdXBsaWNhdGVzIGNhbiBiZSBhY2hpZXZlZC4NCj4gDQo+IENjOiBQaGlsaXBwZSBNYXRo aWV1LURhdWTDqSA8cGhpbG1kQHJlZGhhdC5jb20+DQo+IENjOiBSYXkgTmkgPHJheS5uaUBpbnRl bC5jb20+DQo+IENjOiBaaGljaGFvIEdhbyA8emhpY2hhby5nYW9AaW50ZWwuY29tPg0KPiBSZWY6 IGh0dHBzOi8vYnVnemlsbGEudGlhbm9jb3JlLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MzE1MQ0KPiBT aWduZWQtb2ZmLWJ5OiBMYXN6bG8gRXJzZWsgPGxlcnNla0ByZWRoYXQuY29tPg0KPiAtLS0NCj4g IFNoZWxsUGtnL1NoZWxsUGtnLmRzYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICB8ICAgMSArDQo+ICBTaGVsbFBrZy9JbmNsdWRlL0xpYnJhcnkvU2hlbGxDb21tYW5kTGli LmggICAgICAgICAgICAgICAgICAgfCAgODEgKysrKysNCj4gIFNoZWxsUGtnL0xpYnJhcnkvVWVm aVNoZWxsQ29tbWFuZExpYi9VZWZpU2hlbGxDb21tYW5kTGliLmluZiB8ICAgMSArDQo+ICBTaGVs bFBrZy9MaWJyYXJ5L1VlZmlTaGVsbENvbW1hbmRMaWIvVWVmaVNoZWxsQ29tbWFuZExpYi5oICAg fCAgMTkgKysNCj4gIFNoZWxsUGtnL0xpYnJhcnkvVWVmaVNoZWxsQ29tbWFuZExpYi9VZWZpU2hl bGxDb21tYW5kTGliLmMgICB8IDMxMg0KPiArKysrKysrKysrKysrKysrKysrKw0KPiAgNSBmaWxl cyBjaGFuZ2VkLCA0MTQgaW5zZXJ0aW9ucygrKQ0KPiANCj4gZGlmZiAtLWdpdCBhL1NoZWxsUGtn L1NoZWxsUGtnLmRzYyBiL1NoZWxsUGtnL1NoZWxsUGtnLmRzYyBpbmRleA0KPiBjNDJiYzk0NjRh MGYuLmE4YjZkZTMzNDI4NCAxMDA2NDQNCj4gLS0tIGEvU2hlbGxQa2cvU2hlbGxQa2cuZHNjDQo+ ICsrKyBiL1NoZWxsUGtnL1NoZWxsUGtnLmRzYw0KPiBAQCAtNDcsNiArNDcsNyBAQCBbTGlicmFy eUNsYXNzZXMuY29tbW9uXQ0KPiANCj4gU2hlbGxDb21tYW5kTGlifFNoZWxsUGtnL0xpYnJhcnkv VWVmaVNoZWxsQ29tbWFuZExpYi9VZWZpU2hlbGxDb21tYW5kTGliLmkNCj4gbmYNCj4gICAgU2hl bGxDRW50cnlMaWJ8U2hlbGxQa2cvTGlicmFyeS9VZWZpU2hlbGxDRW50cnlMaWIvVWVmaVNoZWxs Q0VudHJ5TGliLmluZg0KPiANCj4gSGFuZGxlUGFyc2luZ0xpYnxTaGVsbFBrZy9MaWJyYXJ5L1Vl ZmlIYW5kbGVQYXJzaW5nTGliL1VlZmlIYW5kbGVQYXJzaW5nTGliLmluDQo+IGYNCj4gKw0KPiAr IE9yZGVyZWRDb2xsZWN0aW9uTGlifE1kZVBrZy9MaWJyYXJ5L0Jhc2VPcmRlcmVkQ29sbGVjdGlv blJlZEJsYWNrVHJlZUwNCj4gKyBpYi9CYXNlT3JkZXJlZENvbGxlY3Rpb25SZWRCbGFja1RyZWVM aWIuaW5mDQo+IA0KPiANCj4gUGVDb2ZmR2V0RW50cnlQb2ludExpYnxNZGVQa2cvTGlicmFyeS9C YXNlUGVDb2ZmR2V0RW50cnlQb2ludExpYi9CYXNlUGVDbw0KPiBmZkdldEVudHJ5UG9pbnRMaWIu aW5mDQo+IA0KPiBCY2ZnQ29tbWFuZExpYnxTaGVsbFBrZy9MaWJyYXJ5L1VlZmlTaGVsbEJjZmdD b21tYW5kTGliL1VlZmlTaGVsbEJjZmdDb20NCj4gbWFuZExpYi5pbmYNCj4gZGlmZiAtLWdpdCBh L1NoZWxsUGtnL0luY2x1ZGUvTGlicmFyeS9TaGVsbENvbW1hbmRMaWIuaA0KPiBiL1NoZWxsUGtn L0luY2x1ZGUvTGlicmFyeS9TaGVsbENvbW1hbmRMaWIuaA0KPiBpbmRleCA2M2ZjYWM4MmEyZGUu LmJjMWFmZWQ1ZTdmNSAxMDA2NDQNCj4gLS0tIGEvU2hlbGxQa2cvSW5jbHVkZS9MaWJyYXJ5L1No ZWxsQ29tbWFuZExpYi5oDQo+ICsrKyBiL1NoZWxsUGtnL0luY2x1ZGUvTGlicmFyeS9TaGVsbENv bW1hbmRMaWIuaA0KPiBAQCAtNzE0LDQgKzcxNCw4NSBAQCBDYXRTRHVtcEhleCAoDQo+ICAgIElO IFVJTlROICAgRGF0YVNpemUsDQo+ICAgIElOIFZPSUQgICAgKlVzZXJEYXRhDQo+ICAgICk7DQo+ ICsNCj4gKy8vDQo+ICsvLyBEZXRlcm1pbmVzIHRoZSBvcmRlcmluZyBvcGVyYXRpb24gZm9yIFNo ZWxsU29ydEZpbGVMaXN0KCkuDQo+ICsvLw0KPiArdHlwZWRlZiBlbnVtIHsNCj4gKyAgLy8NCj4g KyAgLy8gU29ydCB0aGUgRUZJX1NIRUxMX0ZJTEVfSU5GTyBvYmplY3RzIGJ5IHRoZSBGaWxlTmFt ZSBmaWVsZCwgaW4NCj4gK2luY3JlYXNpbmcNCj4gKyAgLy8gb3JkZXIsIHVzaW5nIGdVbmljb2Rl Q29sbGF0aW9uLT5TdHJpQ29sbCgpLg0KPiArICAvLw0KPiArICBTaGVsbFNvcnRGaWxlTGlzdEJ5 RmlsZU5hbWUsDQo+ICsgIC8vDQo+ICsgIC8vIFNvcnQgdGhlIEVGSV9TSEVMTF9GSUxFX0lORk8g b2JqZWN0cyBieSB0aGUgRnVsbE5hbWUgZmllbGQsIGluDQo+ICtpbmNyZWFzaW5nDQo+ICsgIC8v IG9yZGVyLCB1c2luZyBnVW5pY29kZUNvbGxhdGlvbi0+U3RyaUNvbGwoKS4NCj4gKyAgLy8NCj4g KyAgU2hlbGxTb3J0RmlsZUxpc3RCeUZ1bGxOYW1lLA0KPiArICBTaGVsbFNvcnRGaWxlTGlzdE1h eA0KPiArfSBTSEVMTF9TT1JUX0ZJTEVfTElTVDsNCj4gKw0KPiArLyoqDQo+ICsgIFNvcnQgYW4g RUZJX1NIRUxMX0ZJTEVfSU5GTyBsaXN0LCBvcHRpb25hbGx5IG1vdmluZyBkdXBsaWNhdGVzIHRv IGENCj4gK3NlcGFyYXRlDQo+ICsgIGxpc3QuDQo+ICsNCj4gKyAgQHBhcmFtW2luLG91dF0gRmls ZUxpc3QgIFRoZSBsaXN0IG9mIEVGSV9TSEVMTF9GSUxFX0lORk8gb2JqZWN0cyB0byBzb3J0Lg0K PiArDQo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICBJZiBGaWxlTGlzdCBpcyBOVUxMIG9u IGlucHV0LCB0aGVuIEZpbGVMaXN0IGlzDQo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICBj b25zaWRlcmVkIGFuIGVtcHR5LCBoZW5jZSBhbHJlYWR5IHNvcnRlZCwgbGlzdC4NCj4gKw0KPiAr ICAgICAgICAgICAgICAgICAgICAgICAgICAgT3RoZXJ3aXNlLCBpZiAoKkZpbGVMaXN0KSBpcyBO VUxMIG9uIGlucHV0LCB0aGVuDQo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICBFRklfSU5W QUxJRF9QQVJBTUVURVIgaXMgcmV0dXJuZWQuDQo+ICsNCj4gKyAgICAgICAgICAgICAgICAgICAg ICAgICAgIE90aGVyd2lzZSwgdGhlIGNhbGxlciBpcyByZXNwb25zaWJsZSBmb3IgaGF2aW5nDQo+ ICsgICAgICAgICAgICAgICAgICAgICAgICAgICBpbml0aWFsaXplZCAoKkZpbGVMaXN0KS0+TGlu ayB3aXRoDQo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICBJbml0aWFsaXplTGlzdEhlYWQo KS4gTm8gb3RoZXIgZmllbGRzIGluIHRoZQ0KPiArICAgICAgICAgICAgICAgICAgICAgICAgICAg KCoqRmlsZUxpc3QpIGhlYWQgZWxlbWVudCBhcmUgYWNjZXNzZWQgYnkgdGhpcw0KPiArICAgICAg ICAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb24uDQo+ICsNCj4gKyAgICAgICAgICAgICAgICAg ICAgICAgICAgIE9uIG91dHB1dCwgKCpGaWxlTGlzdCkgaXMgc29ydGVkIGFjY29yZGluZyB0byBP cmRlci4NCj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgIElmIER1cGxpY2F0ZXMgaXMgTlVM TCBvbiBpbnB1dCwgdGhlbiBkdXBsaWNhdGUNCj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAg IGVsZW1lbnRzIGFyZSBwcmVzZXJ2ZWQsIHNvcnRlZCBzdGFibHksIG9uDQo+ICsgICAgICAgICAg ICAgICAgICAgICAgICAgICAoKkZpbGVMaXN0KS4gSWYgRHVwbGljYXRlcyBpcyBub3QgTlVMTCBv biBpbnB1dCwNCj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoZW4gZHVwbGljYXRlcyBh cmUgbW92ZWQgKHN0YWJseSBzb3J0ZWQpIHRvIHRoZQ0KPiArICAgICAgICAgICAgICAgICAgICAg ICAgICAgbmV3LCBkeW5hbWljYWxseSBhbGxvY2F0ZWQgKCpEdXBsaWNhdGVzKSBsaXN0Lg0KPiAr DQo+ICsgIEBwYXJhbVtvdXRdIER1cGxpY2F0ZXMgICBJZiBEdXBsaWNhdGVzIGlzIE5VTEwgb24g aW5wdXQsICgqRmlsZUxpc3QpIHdpbGwgYmUNCj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAg IGEgbW9ub3RvbmljYWxseSBvcmRlcmVkIGxpc3Qgb24gb3V0cHV0LCB3aXRoDQo+ICsgICAgICAg ICAgICAgICAgICAgICAgICAgICBkdXBsaWNhdGVzIHN0YWJseSBzb3J0ZWQuDQo+ICsNCj4gKyAg ICAgICAgICAgICAgICAgICAgICAgICAgIElmIER1cGxpY2F0ZXMgaXMgbm90IE5VTEwgb24gaW5w dXQsICgqRmlsZUxpc3QpIHdpbGwNCj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgIGJlIGEg c3RyaWN0bHkgbW9ub3RvbmljYWxseSBvcmVkZXJlZCBsaXN0IG9uIG91dHB1dCwNCj4gKyAgICAg ICAgICAgICAgICAgICAgICAgICAgIHdpdGggZHVwbGljYXRlcyBzZXBhcmF0ZWQgKHN0YWJseSBz b3J0ZWQpIHRvDQo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAoKkR1cGxpY2F0ZXMpLiBB bGwgZmllbGRzIGV4Y2VwdCBMaW5rIHdpbGwgYmUNCj4gKyAgICAgICAgICAgICAgICAgICAgICAg ICAgIHplcm8taW5pdGlhbGl6ZWQgaW4gdGhlICgqKkR1cGxpY2F0ZXMpIGhlYWQgZWxlbWVudC4N Cj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgIElmIG5vIGR1cGxpY2F0ZXMgZXhpc3QsIHRo ZW4gKCpEdXBsaWNhdGVzKSBpcyBzZXQgdG8NCj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAg IE5VTEwgb24gb3V0cHV0Lg0KPiArDQo+ICsgIEBwYXJhbVtpbl0gT3JkZXIgICAgICAgICBEZXRl cm1pbmVzIHRoZSBjb21wYXJpc29uIG9wZXJhdGlvbiBiZXR3ZWVuDQo+ICsgICAgICAgICAgICAg ICAgICAgICAgICAgICBFRklfU0hFTExfRklMRV9JTkZPIG9iamVjdHMuDQo+ICsNCj4gKyAgQHJl dHZhbCBFRklfSU5WQUxJRF9QQVJBTUVURVIgIChVSU5UTilPcmRlciBpcyBncmVhdGVyIHRoYW4g b3IgZXF1YWwgdG8NCj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChVSU5UTilT aGVsbFNvcnRGaWxlTGlzdE1heC4gTmVpdGhlciB0aGUNCj4gKyAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICgqRmlsZUxpc3QpIG5vciB0aGUgKCpEdXBsaWNhdGVzKSBsaXN0IGhhcw0K PiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmVlbiBtb2RpZmllZC4NCj4gKw0K PiArICBAcmV0dmFsIEVGSV9JTlZBTElEX1BBUkFNRVRFUiAgKCpGaWxlTGlzdCkgd2FzIE5VTEwg b24gaW5wdXQuIE5laXRoZXIgdGhlDQo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAoKkZpbGVMaXN0KSBub3IgdGhlICgqRHVwbGljYXRlcykgbGlzdCBoYXMNCj4gKyAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIGJlZW4gbW9kaWZpZWQuDQo+ICsNCj4gKyAgQHJldHZh bCBFRklfT1VUX09GX1JFU09VUkNFUyAgIE1lbW9yeSBhbGxvY2F0aW9uIGZhaWxlZC4gTmVpdGhl ciB0aGUNCj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgqRmlsZUxpc3QpIG5v ciB0aGUgKCpEdXBsaWNhdGVzKSBsaXN0IGhhcw0KPiArICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgYmVlbiBtb2RpZmllZC4NCj4gKw0KPiArICBAcmV0dmFsIEVGSV9TVUNDRVNTICAg ICAgICAgICAgU29ydGluZyBzdWNjZXNzZnVsLCBpbmNsdWRpbmcgdGhlIGNhc2Ugd2hlbg0KPiAr ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRmlsZUxpc3QgaXMgTlVMTCBvbiBpbnB1 dC4NCj4gKyoqLw0KPiArRUZJX1NUQVRVUw0KPiArRUZJQVBJDQo+ICtTaGVsbFNvcnRGaWxlTGlz dCAoDQo+ICsgIElOIE9VVCBFRklfU0hFTExfRklMRV9JTkZPICAqKkZpbGVMaXN0LA0KPiArICAg ICBPVVQgRUZJX1NIRUxMX0ZJTEVfSU5GTyAgKipEdXBsaWNhdGVzIE9QVElPTkFMLA0KPiArICBJ TiAgICAgU0hFTExfU09SVF9GSUxFX0xJU1QgT3JkZXINCj4gKyAgKTsNCj4gICNlbmRpZiAvL19T SEVMTF9DT01NQU5EX0xJQl8NCj4gZGlmZiAtLWdpdCBhL1NoZWxsUGtnL0xpYnJhcnkvVWVmaVNo ZWxsQ29tbWFuZExpYi9VZWZpU2hlbGxDb21tYW5kTGliLmluZg0KPiBiL1NoZWxsUGtnL0xpYnJh cnkvVWVmaVNoZWxsQ29tbWFuZExpYi9VZWZpU2hlbGxDb21tYW5kTGliLmluZg0KPiBpbmRleCBh MWI1NjAxYzk2YjYuLjA4Y2E3Y2I3ODg0MiAxMDA2NDQNCj4gLS0tIGEvU2hlbGxQa2cvTGlicmFy eS9VZWZpU2hlbGxDb21tYW5kTGliL1VlZmlTaGVsbENvbW1hbmRMaWIuaW5mDQo+ICsrKyBiL1No ZWxsUGtnL0xpYnJhcnkvVWVmaVNoZWxsQ29tbWFuZExpYi9VZWZpU2hlbGxDb21tYW5kTGliLmlu Zg0KPiBAQCAtNDIsNiArNDIsNyBAQCBbTGlicmFyeUNsYXNzZXNdDQo+ICAgIFNoZWxsTGliDQo+ ICAgIEhpaUxpYg0KPiAgICBIYW5kbGVQYXJzaW5nTGliDQo+ICsgIE9yZGVyZWRDb2xsZWN0aW9u TGliDQo+IA0KPiAgW1Byb3RvY29sc10NCj4gICAgZ0VmaVVuaWNvZGVDb2xsYXRpb24yUHJvdG9j b2xHdWlkICAgICAgICAgICAgICAgICAgICAgICAjIyBDT05TVU1FUw0KPiBkaWZmIC0tZ2l0IGEv U2hlbGxQa2cvTGlicmFyeS9VZWZpU2hlbGxDb21tYW5kTGliL1VlZmlTaGVsbENvbW1hbmRMaWIu aA0KPiBiL1NoZWxsUGtnL0xpYnJhcnkvVWVmaVNoZWxsQ29tbWFuZExpYi9VZWZpU2hlbGxDb21t YW5kTGliLmgNCj4gaW5kZXggOGVjYzJmNmJmNWEyLi4wY2EyOTFlNGY5YmYgMTAwNjQ0DQo+IC0t LSBhL1NoZWxsUGtnL0xpYnJhcnkvVWVmaVNoZWxsQ29tbWFuZExpYi9VZWZpU2hlbGxDb21tYW5k TGliLmgNCj4gKysrIGIvU2hlbGxQa2cvTGlicmFyeS9VZWZpU2hlbGxDb21tYW5kTGliL1VlZmlT aGVsbENvbW1hbmRMaWIuaA0KPiBAQCAtMzksNiArMzksNyBAQA0KPiAgI2luY2x1ZGUgPExpYnJh cnkvSGlpTGliLmg+DQo+ICAjaW5jbHVkZSA8TGlicmFyeS9VZWZpQm9vdFNlcnZpY2VzVGFibGVM aWIuaD4NCj4gICNpbmNsdWRlIDxMaWJyYXJ5L1VlZmlMaWIuaD4NCj4gKyNpbmNsdWRlIDxMaWJy YXJ5L09yZGVyZWRDb2xsZWN0aW9uTGliLmg+DQo+IA0KPiAgdHlwZWRlZiBzdHJ1Y3R7DQo+ICAg IExJU1RfRU5UUlkgICAgICAgICAgICAgICAgICBMaW5rOw0KPiBAQCAtNjAsNiArNjEsMjQgQEAg dHlwZWRlZiBzdHJ1Y3Qgew0KPiAgICBDSEFSMTYgICAgICAgICAgICAqUGF0aDsNCj4gIH0gU0hF TExfQ09NTUFORF9GSUxFX0hBTkRMRTsNCj4gDQo+ICsvLw0KPiArLy8gQ29sbGVjdHMgbXVsdGlw bGUgRUZJX1NIRUxMX0ZJTEVfSU5GTyBvYmplY3RzIHRoYXQgc2hhcmUgdGhlIHNhbWUgbmFtZS4N Cj4gKy8vDQo+ICt0eXBlZGVmIHN0cnVjdCB7DQo+ICsgIC8vDQo+ICsgIC8vIEEgc3RyaW5nIHRo YXQgY29tcGFyZXMgZXF1YWwgdG8gZWl0aGVyIHRoZSBGaWxlTmFtZSBvciB0aGUNCj4gK0Z1bGxO YW1lIGZpZWxkcw0KPiArICAvLyBvZiBhbGwgRUZJX1NIRUxMX0ZJTEVfSU5GTyBvYmplY3RzIG9u IFNhbWVOYW1lTGlzdCwgYWNjb3JkaW5nIHRvDQo+ICsgIC8vIGdVbmljb2RlQ29sbGF0aW9uLT5T dHJpQ29sbCgpLiBUaGUgc3RyaW5nIGlzIG5vdCBkeW5hbWljYWxseQ0KPiArYWxsb2NhdGVkOw0K PiArICAvLyBpbnN0ZWFkLCBpdCAqYWxpYXNlcyogdGhlIEZpbGVOYW1lIG9yIEZ1bGxOYW1lIGZp ZWxkIG9mIHRoZQ0KPiArICAvLyBFRklfU0hFTExfRklMRV9JTkZPIG9iamVjdCB0aGF0IHdhcyBm aXJzdCBlbmNvdW50ZXJlZCB3aXRoIHRoaXMgbmFtZS4NCj4gKyAgLy8NCj4gKyAgQ09OU1QgQ0hB UjE2ICpBbGlhczsNCj4gKyAgLy8NCj4gKyAgLy8gQSBsaXN0IG9mIEVGSV9TSEVMTF9GSUxFX0lO Rk8gb2JqZWN0cyB3aG9zZSBGaWxlTmFtZSBvciBGdWxsTmFtZQ0KPiArZmllbGRzDQo+ICsgIC8v IGNvbXBhcmUgZXF1YWwgdG8gQWxpYXMsIGFjY29yZGluZyB0byBnVW5pY29kZUNvbGxhdGlvbi0+ U3RyaUNvbGwoKS4NCj4gKyAgLy8NCj4gKyAgTElTVF9FTlRSWSBTYW1lTmFtZUxpc3Q7DQo+ICt9 IFNIRUxMX1NPUlRfVU5JUVVFX05BTUU7DQo+IA0KPiAgI2VuZGlmIC8vX1VFRklfQ09NTUFORF9M SUJfSU5URVJOQUxfSEVBREVSXw0KPiANCj4gZGlmZiAtLWdpdCBhL1NoZWxsUGtnL0xpYnJhcnkv VWVmaVNoZWxsQ29tbWFuZExpYi9VZWZpU2hlbGxDb21tYW5kTGliLmMNCj4gYi9TaGVsbFBrZy9M aWJyYXJ5L1VlZmlTaGVsbENvbW1hbmRMaWIvVWVmaVNoZWxsQ29tbWFuZExpYi5jDQo+IGluZGV4 IDM0NTgwOGExZWFjNi4uYjA2ZDIyNTkyZDMzIDEwMDY0NA0KPiAtLS0gYS9TaGVsbFBrZy9MaWJy YXJ5L1VlZmlTaGVsbENvbW1hbmRMaWIvVWVmaVNoZWxsQ29tbWFuZExpYi5jDQo+ICsrKyBiL1No ZWxsUGtnL0xpYnJhcnkvVWVmaVNoZWxsQ29tbWFuZExpYi9VZWZpU2hlbGxDb21tYW5kTGliLmMN Cj4gQEAgLTE5MDksMyArMTkwOSwzMTUgQEAgQ2F0U0R1bXBIZXggKA0KPiANCj4gICAgcmV0dXJu IFJldFZhbDsNCj4gIH0NCj4gKw0KPiArLyoqDQo+ICsgIE9SREVSRURfQ09MTEVDVElPTl9VU0VS X0NPTVBBUkUgZnVuY3Rpb24gZm9yDQo+IFNIRUxMX1NPUlRfVU5JUVVFX05BTUUgb2JqZWN0cy4N Cj4gKw0KPiArICBAcGFyYW1baW5dIFVuaXF1ZTFBc1ZvaWQgIFRoZSBmaXJzdCBTSEVMTF9TT1JU X1VOSVFVRV9OQU1FIG9iamVjdA0KPiAoVW5pcXVlMSksDQo+ICsgICAgICAgICAgICAgICAgICAg ICAgICAgICAgcGFzc2VkIGluIGFzIGEgcG9pbnRlci10by1WT0lELg0KPiArDQo+ICsgIEBwYXJh bVtpbl0gVW5pcXVlMkFzVm9pZCAgVGhlIHNlY29uZCBTSEVMTF9TT1JUX1VOSVFVRV9OQU1FIG9i amVjdA0KPiAoVW5pcXVlMiksDQo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFzc2Vk IGluIGFzIGEgcG9pbnRlci10by1WT0lELg0KPiArDQo+ICsgIEByZXR2YWwgPDAgIElmIFVuaXF1 ZTEgY29tcGFyZXMgbGVzcyB0aGFuIFVuaXF1ZTIuDQo+ICsNCj4gKyAgQHJldHZhbCAgMCAgSWYg VW5pcXVlMSBjb21wYXJlcyBlcXVhbCB0byBVbmlxdWUyLg0KPiArDQo+ICsgIEByZXR2YWwgPjAg IElmIFVuaXF1ZTEgY29tcGFyZXMgZ3JlYXRlciB0aGFuIFVuaXF1ZTIuDQo+ICsqKi8NCj4gK1NU QVRJQw0KPiArSU5UTg0KPiArRUZJQVBJDQo+ICtVbmlxdWVOYW1lQ29tcGFyZSAoDQo+ICsgIElO IENPTlNUIFZPSUQgKlVuaXF1ZTFBc1ZvaWQsDQo+ICsgIElOIENPTlNUIFZPSUQgKlVuaXF1ZTJB c1ZvaWQNCj4gKyAgKQ0KPiArew0KPiArICBDT05TVCBTSEVMTF9TT1JUX1VOSVFVRV9OQU1FICpV bmlxdWUxOw0KPiArICBDT05TVCBTSEVMTF9TT1JUX1VOSVFVRV9OQU1FICpVbmlxdWUyOw0KPiAr DQo+ICsgIFVuaXF1ZTEgPSBVbmlxdWUxQXNWb2lkOw0KPiArICBVbmlxdWUyID0gVW5pcXVlMkFz Vm9pZDsNCj4gKw0KPiArICAvLw0KPiArICAvLyBXZSBuZWVkIHRvIGNhc3QgYXdheSBDT05TVCBm b3IgRUZJX1VOSUNPREVfQ09MTEFUSU9OX1NUUklDT0xMLg0KPiArICAvLw0KPiArICByZXR1cm4g Z1VuaWNvZGVDb2xsYXRpb24tPlN0cmlDb2xsICgNCj4gKyAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIGdVbmljb2RlQ29sbGF0aW9uLA0KPiArICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgKENIQVIxNiAqKVVuaXF1ZTEtPkFsaWFzLA0KPiArICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgKENIQVIxNiAqKVVuaXF1ZTItPkFsaWFzDQo+ICsgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICApOw0KPiArfQ0KPiArDQo+ICsvKioNCj4gKyAgT1JERVJFRF9DT0xMRUNUSU9OX0tF WV9DT01QQVJFIGZ1bmN0aW9uIGZvcg0KPiBTSEVMTF9TT1JUX1VOSVFVRV9OQU1FIG9iamVjdHMu DQo+ICsNCj4gKyAgQHBhcmFtW2luXSBVbmlxdWVBbGlhc0FzVm9pZCAgVGhlIENIQVIxNiBzdHJp bmcgVW5pcXVlQWxpYXMsIHBhc3NlZCBpbiBhcyBhDQo+ICsgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIHBvaW50ZXItdG8tVk9JRC4NCj4gKw0KPiArICBAcGFyYW1baW5dIFVuaXF1ZUFz Vm9pZCAgICAgICBUaGUgU0hFTExfU09SVF9VTklRVUVfTkFNRSBvYmplY3QNCj4gKFVuaXF1ZSks DQo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhc3NlZCBpbiBhcyBhIHBvaW50 ZXItdG8tVk9JRC4NCj4gKw0KPiArICBAcmV0dmFsIDwwICBJZiBVbmlxdWVBbGlhcyBjb21wYXJl cyBsZXNzIHRoYW4gVW5pcXVlLT5BbGlhcy4NCj4gKw0KPiArICBAcmV0dmFsICAwICBJZiBVbmlx dWVBbGlhcyBjb21wYXJlcyBlcXVhbCB0byBVbmlxdWUtPkFsaWFzLg0KPiArDQo+ICsgIEByZXR2 YWwgPjAgIElmIFVuaXF1ZUFsaWFzIGNvbXBhcmVzIGdyZWF0ZXIgdGhhbiBVbmlxdWUtPkFsaWFz Lg0KPiArKiovDQo+ICtTVEFUSUMNCj4gK0lOVE4NCj4gK0VGSUFQSQ0KPiArVW5pcXVlTmFtZUFs aWFzQ29tcGFyZSAoDQo+ICsgIElOIENPTlNUIFZPSUQgKlVuaXF1ZUFsaWFzQXNWb2lkLA0KPiAr ICBJTiBDT05TVCBWT0lEICpVbmlxdWVBc1ZvaWQNCj4gKyAgKQ0KPiArew0KPiArICBDT05TVCBD SEFSMTYgICAgICAgICAgICAgICAgICpVbmlxdWVBbGlhczsNCj4gKyAgQ09OU1QgU0hFTExfU09S VF9VTklRVUVfTkFNRSAqVW5pcXVlOw0KPiArDQo+ICsgIFVuaXF1ZUFsaWFzID0gVW5pcXVlQWxp YXNBc1ZvaWQ7DQo+ICsgIFVuaXF1ZSAgICAgID0gVW5pcXVlQXNWb2lkOw0KPiArDQo+ICsgIC8v DQo+ICsgIC8vIFdlIG5lZWQgdG8gY2FzdCBhd2F5IENPTlNUIGZvciBFRklfVU5JQ09ERV9DT0xM QVRJT05fU1RSSUNPTEwuDQo+ICsgIC8vDQo+ICsgIHJldHVybiBnVW5pY29kZUNvbGxhdGlvbi0+ U3RyaUNvbGwgKA0KPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ1VuaWNvZGVDb2xs YXRpb24sDQo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoQ0hBUjE2ICopVW5pcXVl QWxpYXMsDQo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoQ0hBUjE2ICopVW5pcXVl LT5BbGlhcw0KPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKTsNCj4gK30NCj4gKw0K PiArLyoqDQo+ICsgIFNvcnQgYW4gRUZJX1NIRUxMX0ZJTEVfSU5GTyBsaXN0LCBvcHRpb25hbGx5 IG1vdmluZyBkdXBsaWNhdGVzIHRvIGENCj4gK3NlcGFyYXRlDQo+ICsgIGxpc3QuDQo+ICsNCj4g KyAgQHBhcmFtW2luLG91dF0gRmlsZUxpc3QgIFRoZSBsaXN0IG9mIEVGSV9TSEVMTF9GSUxFX0lO Rk8gb2JqZWN0cyB0byBzb3J0Lg0KPiArDQo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICBJ ZiBGaWxlTGlzdCBpcyBOVUxMIG9uIGlucHV0LCB0aGVuIEZpbGVMaXN0IGlzDQo+ICsgICAgICAg ICAgICAgICAgICAgICAgICAgICBjb25zaWRlcmVkIGFuIGVtcHR5LCBoZW5jZSBhbHJlYWR5IHNv cnRlZCwgbGlzdC4NCj4gKw0KPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgT3RoZXJ3aXNl LCBpZiAoKkZpbGVMaXN0KSBpcyBOVUxMIG9uIGlucHV0LCB0aGVuDQo+ICsgICAgICAgICAgICAg ICAgICAgICAgICAgICBFRklfSU5WQUxJRF9QQVJBTUVURVIgaXMgcmV0dXJuZWQuDQo+ICsNCj4g KyAgICAgICAgICAgICAgICAgICAgICAgICAgIE90aGVyd2lzZSwgdGhlIGNhbGxlciBpcyByZXNw b25zaWJsZSBmb3IgaGF2aW5nDQo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICBpbml0aWFs aXplZCAoKkZpbGVMaXN0KS0+TGluayB3aXRoDQo+ICsgICAgICAgICAgICAgICAgICAgICAgICAg ICBJbml0aWFsaXplTGlzdEhlYWQoKS4gTm8gb3RoZXIgZmllbGRzIGluIHRoZQ0KPiArICAgICAg ICAgICAgICAgICAgICAgICAgICAgKCoqRmlsZUxpc3QpIGhlYWQgZWxlbWVudCBhcmUgYWNjZXNz ZWQgYnkgdGhpcw0KPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb24uDQo+ICsN Cj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgIE9uIG91dHB1dCwgKCpGaWxlTGlzdCkgaXMg c29ydGVkIGFjY29yZGluZyB0byBPcmRlci4NCj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAg IElmIER1cGxpY2F0ZXMgaXMgTlVMTCBvbiBpbnB1dCwgdGhlbiBkdXBsaWNhdGUNCj4gKyAgICAg ICAgICAgICAgICAgICAgICAgICAgIGVsZW1lbnRzIGFyZSBwcmVzZXJ2ZWQsIHNvcnRlZCBzdGFi bHksIG9uDQo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAoKkZpbGVMaXN0KS4gSWYgRHVw bGljYXRlcyBpcyBub3QgTlVMTCBvbiBpbnB1dCwNCj4gKyAgICAgICAgICAgICAgICAgICAgICAg ICAgIHRoZW4gZHVwbGljYXRlcyBhcmUgbW92ZWQgKHN0YWJseSBzb3J0ZWQpIHRvIHRoZQ0KPiAr ICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV3LCBkeW5hbWljYWxseSBhbGxvY2F0ZWQgKCpE dXBsaWNhdGVzKSBsaXN0Lg0KPiArDQo+ICsgIEBwYXJhbVtvdXRdIER1cGxpY2F0ZXMgICBJZiBE dXBsaWNhdGVzIGlzIE5VTEwgb24gaW5wdXQsICgqRmlsZUxpc3QpIHdpbGwgYmUNCj4gKyAgICAg ICAgICAgICAgICAgICAgICAgICAgIGEgbW9ub3RvbmljYWxseSBvcmRlcmVkIGxpc3Qgb24gb3V0 cHV0LCB3aXRoDQo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICBkdXBsaWNhdGVzIHN0YWJs eSBzb3J0ZWQuDQo+ICsNCj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgIElmIER1cGxpY2F0 ZXMgaXMgbm90IE5VTEwgb24gaW5wdXQsICgqRmlsZUxpc3QpIHdpbGwNCj4gKyAgICAgICAgICAg ICAgICAgICAgICAgICAgIGJlIGEgc3RyaWN0bHkgbW9ub3RvbmljYWxseSBvcmVkZXJlZCBsaXN0 IG9uIG91dHB1dCwNCj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgIHdpdGggZHVwbGljYXRl cyBzZXBhcmF0ZWQgKHN0YWJseSBzb3J0ZWQpIHRvDQo+ICsgICAgICAgICAgICAgICAgICAgICAg ICAgICAoKkR1cGxpY2F0ZXMpLiBBbGwgZmllbGRzIGV4Y2VwdCBMaW5rIHdpbGwgYmUNCj4gKyAg ICAgICAgICAgICAgICAgICAgICAgICAgIHplcm8taW5pdGlhbGl6ZWQgaW4gdGhlICgqKkR1cGxp Y2F0ZXMpIGhlYWQgZWxlbWVudC4NCj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgIElmIG5v IGR1cGxpY2F0ZXMgZXhpc3QsIHRoZW4gKCpEdXBsaWNhdGVzKSBpcyBzZXQgdG8NCj4gKyAgICAg ICAgICAgICAgICAgICAgICAgICAgIE5VTEwgb24gb3V0cHV0Lg0KPiArDQo+ICsgIEBwYXJhbVtp bl0gT3JkZXIgICAgICAgICBEZXRlcm1pbmVzIHRoZSBjb21wYXJpc29uIG9wZXJhdGlvbiBiZXR3 ZWVuDQo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICBFRklfU0hFTExfRklMRV9JTkZPIG9i amVjdHMuDQo+ICsNCj4gKyAgQHJldHZhbCBFRklfSU5WQUxJRF9QQVJBTUVURVIgIChVSU5UTilP cmRlciBpcyBncmVhdGVyIHRoYW4gb3IgZXF1YWwgdG8NCj4gKyAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIChVSU5UTilTaGVsbFNvcnRGaWxlTGlzdE1heC4gTmVpdGhlciB0aGUNCj4g KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgqRmlsZUxpc3QpIG5vciB0aGUgKCpE dXBsaWNhdGVzKSBsaXN0IGhhcw0KPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg YmVlbiBtb2RpZmllZC4NCj4gKw0KPiArICBAcmV0dmFsIEVGSV9JTlZBTElEX1BBUkFNRVRFUiAg KCpGaWxlTGlzdCkgd2FzIE5VTEwgb24gaW5wdXQuIE5laXRoZXIgdGhlDQo+ICsgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAoKkZpbGVMaXN0KSBub3IgdGhlICgqRHVwbGljYXRlcykg bGlzdCBoYXMNCj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJlZW4gbW9kaWZp ZWQuDQo+ICsNCj4gKyAgQHJldHZhbCBFRklfT1VUX09GX1JFU09VUkNFUyAgIE1lbW9yeSBhbGxv Y2F0aW9uIGZhaWxlZC4gTmVpdGhlciB0aGUNCj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICgqRmlsZUxpc3QpIG5vciB0aGUgKCpEdXBsaWNhdGVzKSBsaXN0IGhhcw0KPiArICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmVlbiBtb2RpZmllZC4NCj4gKw0KPiArICBA cmV0dmFsIEVGSV9TVUNDRVNTICAgICAgICAgICAgU29ydGluZyBzdWNjZXNzZnVsLCBpbmNsdWRp bmcgdGhlIGNhc2Ugd2hlbg0KPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRmls ZUxpc3QgaXMgTlVMTCBvbiBpbnB1dC4NCj4gKyoqLw0KPiArRUZJX1NUQVRVUw0KPiArRUZJQVBJ DQo+ICtTaGVsbFNvcnRGaWxlTGlzdCAoDQo+ICsgIElOIE9VVCBFRklfU0hFTExfRklMRV9JTkZP ICAqKkZpbGVMaXN0LA0KPiArICAgICBPVVQgRUZJX1NIRUxMX0ZJTEVfSU5GTyAgKipEdXBsaWNh dGVzIE9QVElPTkFMLA0KPiArICBJTiAgICAgU0hFTExfU09SVF9GSUxFX0xJU1QgT3JkZXINCj4g KyAgKQ0KPiArew0KPiArICBMSVNUX0VOVFJZICAgICAgICAgICAgICAgKkZpbGVzSGVhZDsNCj4g KyAgT1JERVJFRF9DT0xMRUNUSU9OICAgICAgICpTb3J0Ow0KPiArICBMSVNUX0VOVFJZICAgICAg ICAgICAgICAgKkZpbGVFbnRyeTsNCj4gKyAgRUZJX1NIRUxMX0ZJTEVfSU5GTyAgICAgICpGaWxl SW5mbzsNCj4gKyAgU0hFTExfU09SVF9VTklRVUVfTkFNRSAgICpVbmlxdWU7DQo+ICsgIEVGSV9T VEFUVVMgICAgICAgICAgICAgICBTdGF0dXM7DQo+ICsgIEVGSV9TSEVMTF9GSUxFX0lORk8gICAg ICAqRHVwZXM7DQo+ICsgIExJU1RfRU5UUlkgICAgICAgICAgICAgICAqTmV4dEZpbGVFbnRyeTsN Cj4gKyAgQ09OU1QgQ0hBUjE2ICAgICAgICAgICAgICpBbGlhczsNCj4gKyAgT1JERVJFRF9DT0xM RUNUSU9OX0VOVFJZICpTb3J0RW50cnk7DQo+ICsgIExJU1RfRU5UUlkgICAgICAgICAgICAgICAq VGFyZ2V0RmlsZUxpc3Q7DQo+ICsgIE9SREVSRURfQ09MTEVDVElPTl9FTlRSWSAqTmV4dFNvcnRF bnRyeTsNCj4gKyAgVk9JRCAgICAgICAgICAgICAgICAgICAgICpVbmlxdWVBc1ZvaWQ7DQo+ICsN Cj4gKyAgaWYgKChVSU5UTilPcmRlciA+PSAoVUlOVE4pU2hlbGxTb3J0RmlsZUxpc3RNYXgpIHsN Cj4gKyAgICByZXR1cm4gRUZJX0lOVkFMSURfUEFSQU1FVEVSOw0KPiArICB9DQo+ICsNCj4gKyAg aWYgKEZpbGVMaXN0ID09IE5VTEwpIHsNCj4gKyAgICAvLw0KPiArICAgIC8vIEZpbGVMaXN0IGlz IGNvbnNpZGVyZWQgZW1wdHksIGhlbmNlIGFscmVhZHkgc29ydGVkLCB3aXRoIG5vIGR1cGxpY2F0 ZXMuDQo+ICsgICAgLy8NCj4gKyAgICBpZiAoRHVwbGljYXRlcyAhPSBOVUxMKSB7DQo+ICsgICAg ICAqRHVwbGljYXRlcyA9IE5VTEw7DQo+ICsgICAgfQ0KPiArICAgIHJldHVybiBFRklfU1VDQ0VT UzsNCj4gKyAgfQ0KPiArDQo+ICsgIGlmICgqRmlsZUxpc3QgPT0gTlVMTCkgew0KPiArICAgIHJl dHVybiBFRklfSU5WQUxJRF9QQVJBTUVURVI7DQo+ICsgIH0NCj4gKyAgRmlsZXNIZWFkID0gJigq RmlsZUxpc3QpLT5MaW5rOw0KPiArDQo+ICsgIC8vDQo+ICsgIC8vIENvbGxlY3QgYWxsIHRoZSB1 bmlxdWUgbmFtZXMuDQo+ICsgIC8vDQo+ICsgIFNvcnQgPSBPcmRlcmVkQ29sbGVjdGlvbkluaXQg KFVuaXF1ZU5hbWVDb21wYXJlLA0KPiArIFVuaXF1ZU5hbWVBbGlhc0NvbXBhcmUpOyAgaWYgKFNv cnQgPT0gTlVMTCkgew0KPiArICAgIHJldHVybiBFRklfT1VUX09GX1JFU09VUkNFUzsNCj4gKyAg fQ0KPiArDQo+ICsgIEJBU0VfTElTVF9GT1JfRUFDSCAoRmlsZUVudHJ5LCBGaWxlc0hlYWQpIHsN Cj4gKyAgICBGaWxlSW5mbyA9IChFRklfU0hFTExfRklMRV9JTkZPICopRmlsZUVudHJ5Ow0KPiAr DQo+ICsgICAgLy8NCj4gKyAgICAvLyBUcnkgdG8gcmVjb3JkIHRoZSBuYW1lIG9mIHRoaXMgZmls ZSBhcyBhIHVuaXF1ZSBuYW1lLg0KPiArICAgIC8vDQo+ICsgICAgVW5pcXVlID0gQWxsb2NhdGVQ b29sIChzaXplb2YgKCpVbmlxdWUpKTsNCj4gKyAgICBpZiAoVW5pcXVlID09IE5VTEwpIHsNCj4g KyAgICAgIFN0YXR1cyA9IEVGSV9PVVRfT0ZfUkVTT1VSQ0VTOw0KPiArICAgICAgZ290byBVbmlu aXRTb3J0Ow0KPiArICAgIH0NCj4gKyAgICBVbmlxdWUtPkFsaWFzID0gKChPcmRlciA9PSBTaGVs bFNvcnRGaWxlTGlzdEJ5RmlsZU5hbWUpID8NCj4gKyAgICAgICAgICAgICAgICAgICAgIEZpbGVJ bmZvLT5GaWxlTmFtZSA6DQo+ICsgICAgICAgICAgICAgICAgICAgICBGaWxlSW5mby0+RnVsbE5h bWUpOw0KPiArICAgIEluaXRpYWxpemVMaXN0SGVhZCAoJlVuaXF1ZS0+U2FtZU5hbWVMaXN0KTsN Cj4gKw0KPiArICAgIFN0YXR1cyA9IE9yZGVyZWRDb2xsZWN0aW9uSW5zZXJ0IChTb3J0LCBOVUxM LCBVbmlxdWUpOw0KPiArICAgIGlmIChFRklfRVJST1IgKFN0YXR1cykpIHsNCj4gKyAgICAgIC8v DQo+ICsgICAgICAvLyBPbmx5IHR3byBlcnJvcnMgYXJlIHBvc3NpYmxlOiBtZW1vcnkgYWxsb2Nh dGlvbiBmYWlsZWQsIG9yIHRoaXMgbmFtZQ0KPiArICAgICAgLy8gaGFzIGJlZW4gZW5jb3VudGVy ZWQgYmVmb3JlLiBJbiBlaXRoZXIgY2FzZSwgdGhlDQo+ICsgICAgICAvLyBTSEVMTF9TT1JUX1VO SVFVRV9OQU1FIG9iamVjdCBiZWluZyBjb25zdHJ1Y3RlZCBoYXMgdG8gYmUgcmVsZWFzZWQuDQo+ ICsgICAgICAvLw0KPiArICAgICAgRnJlZVBvb2wgKFVuaXF1ZSk7DQo+ICsgICAgICAvLw0KPiAr ICAgICAgLy8gTWVtb3J5IGFsbG9jYXRpb24gZmFpbHVyZSBpcyBmYXRhbCwgd2hpbGUgaGF2aW5n IHNlZW4gdGhlIHNhbWUgbmFtZQ0KPiArICAgICAgLy8gYmVmb3JlIGlzIG5vcm1hbC4NCj4gKyAg ICAgIC8vDQo+ICsgICAgICBpZiAoU3RhdHVzID09IEVGSV9PVVRfT0ZfUkVTT1VSQ0VTKSB7DQo+ ICsgICAgICAgIGdvdG8gVW5pbml0U29ydDsNCj4gKyAgICAgIH0NCj4gKyAgICAgIEFTU0VSVCAo U3RhdHVzID09IEVGSV9BTFJFQURZX1NUQVJURUQpOw0KPiArICAgIH0NCj4gKyAgfQ0KPiArDQo+ ICsgIC8vDQo+ICsgIC8vIElmIHNlcGFyYXRpb24gb2YgZHVwbGljYXRlcyBoYXMgYmVlbiByZXF1 ZXN0ZWQsIGFsbG9jYXRlIHRoZSBsaXN0DQo+ICsgZm9yICAvLyB0aGVtLg0KPiArICAvLw0KPiAr ICBpZiAoRHVwbGljYXRlcyAhPSBOVUxMKSB7DQo+ICsgICAgRHVwZXMgPSBBbGxvY2F0ZVplcm9Q b29sIChzaXplb2YgKCpEdXBlcykpOw0KPiArICAgIGlmIChEdXBlcyA9PSBOVUxMKSB7DQo+ICsg ICAgICBTdGF0dXMgPSBFRklfT1VUX09GX1JFU09VUkNFUzsNCj4gKyAgICAgIGdvdG8gVW5pbml0 U29ydDsNCj4gKyAgICB9DQo+ICsgICAgSW5pdGlhbGl6ZUxpc3RIZWFkICgmRHVwZXMtPkxpbmsp Ow0KPiArICB9DQo+ICsNCj4gKyAgLy8NCj4gKyAgLy8gTm8gbWVtb3J5IGFsbG9jYXRpb24gYmV5 b25kIHRoaXMgcG9pbnQ7IHRodXMsIG5vIGNoYW5jZSB0byBmYWlsLg0KPiArIFdlIGNhbiAgLy8g bm93IG1pZ3JhdGUgdGhlIEVGSV9TSEVMTF9GSUxFX0lORk8gb2JqZWN0cyBmcm9tICgqRmlsZUxp c3QpIHRvDQo+IFNvcnQuDQo+ICsgIC8vDQo+ICsgIEJBU0VfTElTVF9GT1JfRUFDSF9TQUZFIChG aWxlRW50cnksIE5leHRGaWxlRW50cnksIEZpbGVzSGVhZCkgew0KPiArICAgIEZpbGVJbmZvID0g KEVGSV9TSEVMTF9GSUxFX0lORk8gKilGaWxlRW50cnk7DQo+ICsgICAgLy8NCj4gKyAgICAvLyBM b29rIHVwIHRoZSBTSEVMTF9TT1JUX1VOSVFVRV9OQU1FIHRoYXQgbWF0Y2hlcyBGaWxlSW5mbydz IG5hbWUuDQo+ICsgICAgLy8NCj4gKyAgICBBbGlhcyA9ICgoT3JkZXIgPT0gU2hlbGxTb3J0Rmls ZUxpc3RCeUZpbGVOYW1lKSA/DQo+ICsgICAgICAgICAgICAgRmlsZUluZm8tPkZpbGVOYW1lIDoN Cj4gKyAgICAgICAgICAgICBGaWxlSW5mby0+RnVsbE5hbWUpOw0KPiArICAgIFNvcnRFbnRyeSA9 IE9yZGVyZWRDb2xsZWN0aW9uRmluZCAoU29ydCwgQWxpYXMpOw0KPiArICAgIEFTU0VSVCAoU29y dEVudHJ5ICE9IE5VTEwpOw0KPiArICAgIFVuaXF1ZSA9IE9yZGVyZWRDb2xsZWN0aW9uVXNlclN0 cnVjdCAoU29ydEVudHJ5KTsNCj4gKyAgICAvLw0KPiArICAgIC8vIE1vdmUgRmlsZUluZm8gZnJv bSAoKkZpbGVMaXN0KSB0byB0aGUgZW5kIG9mIHRoZSBsaXN0IG9mIGZpbGVzIHdob3NlDQo+ICsg ICAgLy8gbmFtZXMgYWxsIGNvbXBhcmUgaWRlbnRpY2FsIHRvIEZpbGVJbmZvJ3MgbmFtZS4NCj4g KyAgICAvLw0KPiArICAgIFJlbW92ZUVudHJ5TGlzdCAoJkZpbGVJbmZvLT5MaW5rKTsNCj4gKyAg ICBJbnNlcnRUYWlsTGlzdCAoJlVuaXF1ZS0+U2FtZU5hbWVMaXN0LCAmRmlsZUluZm8tPkxpbmsp OyAgfQ0KPiArDQo+ICsgIC8vDQo+ICsgIC8vIEFsbCBFRklfU0hFTExfRklMRV9JTkZPIG9iamVj dHMgb3JpZ2luYWxseSBpbiAoKkZpbGVMaXN0KSBoYXZlDQo+ICsgYmVlbiAgLy8gZGlzdHJpYnV0 ZWQgdG8gU29ydC4gTm93IG1pZ3JhdGUgdGhlbSBiYWNrIHRvICgqRmlsZUxpc3QpLA0KPiArIGFk dmFuY2luZyBpbiAgLy8gdW5pcXVlIG5hbWUgb3JkZXIuDQo+ICsgIC8vDQo+ICsgIGZvciAoU29y dEVudHJ5ID0gT3JkZXJlZENvbGxlY3Rpb25NaW4gKFNvcnQpOw0KPiArICAgICAgIFNvcnRFbnRy eSAhPSBOVUxMOw0KPiArICAgICAgIFNvcnRFbnRyeSA9IE9yZGVyZWRDb2xsZWN0aW9uTmV4dCAo U29ydEVudHJ5KSkgew0KPiArICAgIFVuaXF1ZSA9IE9yZGVyZWRDb2xsZWN0aW9uVXNlclN0cnVj dCAoU29ydEVudHJ5KTsNCj4gKyAgICAvLw0KPiArICAgIC8vIFRoZSBmaXJzdCBGaWxlSW5mbyBl bmNvdW50ZXJlZCBmb3IgZWFjaCB1bmlxdWUgbmFtZSBnb2VzIGJhY2sgb24NCj4gKyAgICAvLyAo KkZpbGVMaXN0KSB1bmNvbmRpdGlvbmFsbHkuIEZ1cnRoZXIgRmlsZUluZm8gaW5zdGFuY2VzIGZv ciB0aGUgc2FtZQ0KPiArICAgIC8vIHVuaXF1ZSBuYW1lIC0tIHRoYXQgaXMsIGR1cGxpY2F0ZXMg LS0gYXJlIGVpdGhlciByZXR1cm5lZCB0byAoKkZpbGVMaXN0KQ0KPiArICAgIC8vIG9yIHNlcGFy YXRlZCwgZGVwZW5kZW50IG9uIHRoZSBjYWxsZXIncyByZXF1ZXN0Lg0KPiArICAgIC8vDQo+ICsg ICAgVGFyZ2V0RmlsZUxpc3QgPSBGaWxlc0hlYWQ7DQo+ICsgICAgQkFTRV9MSVNUX0ZPUl9FQUNI X1NBRkUgKEZpbGVFbnRyeSwgTmV4dEZpbGVFbnRyeSwgJlVuaXF1ZS0NCj4gPlNhbWVOYW1lTGlz dCkgew0KPiArICAgICAgUmVtb3ZlRW50cnlMaXN0IChGaWxlRW50cnkpOw0KPiArICAgICAgSW5z ZXJ0VGFpbExpc3QgKFRhcmdldEZpbGVMaXN0LCBGaWxlRW50cnkpOw0KPiArICAgICAgaWYgKER1 cGxpY2F0ZXMgIT0gTlVMTCkgew0KPiArICAgICAgICBUYXJnZXRGaWxlTGlzdCA9ICZEdXBlcy0+ TGluazsNCj4gKyAgICAgIH0NCj4gKyAgICB9DQo+ICsgIH0NCj4gKw0KPiArICAvLw0KPiArICAv LyBXZSdyZSBkb25lLiBJZiBzZXBhcmF0aW9uIG9mIGR1cGxpY2F0ZXMgaGFzIGJlZW4gcmVxdWVz dGVkLCBvdXRwdXQNCj4gKyB0aGUgIC8vIGxpc3Qgb2YgZHVwbGljYXRlcyAtLSBhbmQgZnJlZSB0 aGF0IGxpc3QgYXQgb25jZSwgaWYgaXQncw0KPiArIGVtcHR5IChpLmUuLCBpZiAgLy8gbm8gZHVw bGljYXRlcyBoYXZlIGJlZW4gZm91bmQpLg0KPiArICAvLw0KPiArICBpZiAoRHVwbGljYXRlcyAh PSBOVUxMKSB7DQo+ICsgICAgaWYgKElzTGlzdEVtcHR5ICgmRHVwZXMtPkxpbmspKSB7DQo+ICsg ICAgICBGcmVlUG9vbCAoRHVwZXMpOw0KPiArICAgICAgKkR1cGxpY2F0ZXMgPSBOVUxMOw0KPiAr ICAgIH0gZWxzZSB7DQo+ICsgICAgICAqRHVwbGljYXRlcyA9IER1cGVzOw0KPiArICAgIH0NCj4g KyAgfQ0KPiArICBTdGF0dXMgPSBFRklfU1VDQ0VTUzsNCj4gKw0KPiArICAvLw0KPiArICAvLyBG YWxsIHRocm91Z2guDQo+ICsgIC8vDQo+ICtVbmluaXRTb3J0Og0KPiArICBmb3IgKFNvcnRFbnRy eSA9IE9yZGVyZWRDb2xsZWN0aW9uTWluIChTb3J0KTsNCj4gKyAgICAgICBTb3J0RW50cnkgIT0g TlVMTDsNCj4gKyAgICAgICBTb3J0RW50cnkgPSBOZXh0U29ydEVudHJ5KSB7DQo+ICsgICAgTmV4 dFNvcnRFbnRyeSA9IE9yZGVyZWRDb2xsZWN0aW9uTmV4dCAoU29ydEVudHJ5KTsNCj4gKyAgICBP cmRlcmVkQ29sbGVjdGlvbkRlbGV0ZSAoU29ydCwgU29ydEVudHJ5LCAmVW5pcXVlQXNWb2lkKTsN Cj4gKyAgICBVbmlxdWUgPSBVbmlxdWVBc1ZvaWQ7DQo+ICsgICAgQVNTRVJUIChJc0xpc3RFbXB0 eSAoJlVuaXF1ZS0+U2FtZU5hbWVMaXN0KSk7DQo+ICsgICAgRnJlZVBvb2wgKFVuaXF1ZSk7DQo+ ICsgIH0NCj4gKyAgT3JkZXJlZENvbGxlY3Rpb25VbmluaXQgKFNvcnQpOw0KPiArDQo+ICsgIHJl dHVybiBTdGF0dXM7DQo+ICt9DQo+IC0tDQo+IDIuMTkuMS4zLmczMDI0N2FhNWQyMDENCj4gDQoN Cg==