From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from mga06.intel.com (mga06.intel.com [134.134.136.31]) by mx.groups.io with SMTP id smtpd.web12.9880.1643184968714706201 for ; Wed, 26 Jan 2022 00:16:09 -0800 Authentication-Results: mx.groups.io; dkim=fail reason="unable to parse pub key" header.i=@intel.com header.s=intel header.b=Bu8qCQlR; spf=pass (domain: intel.com, ip: 134.134.136.31, mailfrom: lisa.huang@intel.com) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=intel.com; i=@intel.com; q=dns/txt; s=Intel; t=1643184968; x=1674720968; h=from:to:cc:subject:date:message-id:references: in-reply-to:content-transfer-encoding:mime-version; bh=WsFp+lPRXk5Zy3UBkRfYRXRY/UzpP7cQaL9pom28dMk=; b=Bu8qCQlR+7sIk8uaNCGpEyjqa2AtsjH2/6bNBWCMB1giTpEi5L45g93v 86tsD4Qq8+KOFe7Wj/hUGFu4hWP/rQLQigquGX657S/ipFJErvLgLZCje 9nNWGTf/OlnGgPd2vRKXP2Wo6TOrZ4DBDE18YS6mDJaMn46Nb0FUKBVmO +6bOvwgFoLn5DnubY/PH/5wKJpv9q8IolCzidDaihiTvzg1Gx/BDu2xjO 1JEN4zpwH95qTe3Qbah+dE6ArwiysftIGptOs17npLaDkfF2o06lYgl6O RsAQpGZEi4sTqV2SiV6yW57jdgXa3hf2qBIp3sT/+nJQF74Ojqk629HZl Q==; X-IronPort-AV: E=McAfee;i="6200,9189,10238"; a="307219066" X-IronPort-AV: E=Sophos;i="5.88,317,1635231600"; d="scan'208";a="307219066" Received: from fmsmga008.fm.intel.com ([10.253.24.58]) by orsmga104.jf.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 26 Jan 2022 00:16:05 -0800 X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="5.88,317,1635231600"; d="scan'208";a="581034822" Received: from fmsmsx602.amr.corp.intel.com ([10.18.126.82]) by fmsmga008.fm.intel.com with ESMTP; 26 Jan 2022 00:16:04 -0800 Received: from fmsmsx604.amr.corp.intel.com (10.18.126.84) by fmsmsx602.amr.corp.intel.com (10.18.126.82) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.2308.20; Wed, 26 Jan 2022 00:16:04 -0800 Received: from FMSEDG603.ED.cps.intel.com (10.1.192.133) 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.2308.20 via Frontend Transport; Wed, 26 Jan 2022 00:16:04 -0800 Received: from NAM12-DM6-obe.outbound.protection.outlook.com (104.47.59.173) by edgegateway.intel.com (192.55.55.68) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.1.2308.20; Wed, 26 Jan 2022 00:16:02 -0800 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=W+RBB8dld+TGBu5atJbgz8DEYn/WNioVYghE/cKt0KQgMMavS0ossHhmtzkERzJD5USiRSD9pVeVJMeZYeVlpJVmOSYyuVwGEjKpiCc8Q4QG/c+esMOcKiDp0cf5ejRNsKFwjnlsmrqQMrDv9nCNogTdEPmbP3J0H3W3h/Q0dbJRCny/EBEvmoeK4Ph0zfDneiDeDqmHesxohGgb58ZD1cUbhUfj6PP66nhjHflwAXEy/jaKNs73ih0StQ9RNSjpDV5uz8MPJFL6y+FvSlEXvzW/WXEbZbjo/Z0c6SivPsXb30n9EAAYXlORFvOfc2WODMsSr2AnTxUfOQvDV5EqWw== 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=WsFp+lPRXk5Zy3UBkRfYRXRY/UzpP7cQaL9pom28dMk=; b=XK3A2dnYiXdlDRROifwrKiBZiqZXnrPTn8ubFHjQxB88jP5CF6RUij0cH1JzgW1moTZlnV/B8DZ5y6XsrvJptIJ+mew3XuY+JHPyLObvqFfXqTnsqRrICtsXjCcJxMsgrVTe2ja9YX92GGa/95cSMTFU6TtqCc5UoOB0p84NCAComXjCXy1JtUF+SfjcaJf+9ifZHyLuWBXNGk7ZTTu8wIsMP3cx8B8vuINmuWnf7OB1C+61bEeT6xLkwSfvy85QK14JUIrQixIKr457O3UFmBvt2WAFVYYrHrn+ZNsixTrdbNUuC5+ZbaF8z/svEsSR/JjvanHHSfmZTe5j0ded4w== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=none; dmarc=none; dkim=none; arc=none Received: from PH0PR11MB5659.namprd11.prod.outlook.com (2603:10b6:510:ea::6) by CO1PR11MB4849.namprd11.prod.outlook.com (2603:10b6:303:90::13) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.4930.15; Wed, 26 Jan 2022 08:16:00 +0000 Received: from PH0PR11MB5659.namprd11.prod.outlook.com ([fe80::8c3b:f58d:d445:2613]) by PH0PR11MB5659.namprd11.prod.outlook.com ([fe80::8c3b:f58d:d445:2613%9]) with mapi id 15.20.4930.017; Wed, 26 Jan 2022 08:16:00 +0000 From: lisa.huang@intel.com To: Michael Kubacki , "devel@edk2.groups.io" , "Gao, Liming" , "Feng, Bob C" CC: "Chen, Christine" , "Wu, Yidong" , "Xu, Wei6" , "You, Benjamin" , "mikuback@linux.microsoft.com" Subject: Re: [edk2-devel][PATCH] BaseTools/GenFw: Enhance to add export table in PE-COFF Thread-Topic: [edk2-devel][PATCH] BaseTools/GenFw: Enhance to add export table in PE-COFF Thread-Index: AQHYB4g+cvnUrFHGu0aV+Ww5F7lHBqxiDByAgAR0tNCAAcZJAIAAAF+AgAYe9gCABqJlwA== Date: Wed, 26 Jan 2022 08:16:00 +0000 Message-ID: References: <20220112074423.5075-1-lisa.huang@intel.com> <002001d80c2b$150f2230$3f2d6690$@byosoft.com.cn> In-Reply-To: Accept-Language: en-US X-MS-Has-Attach: X-MS-TNEF-Correlator: dlp-reaction: no-action dlp-version: 11.6.200.16 dlp-product: dlpe-windows authentication-results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=intel.com; x-ms-publictraffictype: Email x-ms-office365-filtering-correlation-id: a6605d2c-44d7-4183-39ee-08d9e0a41676 x-ms-traffictypediagnostic: CO1PR11MB4849:EE_ x-ld-processed: 46c98d88-e344-4ed4-8496-4ed7712e255d,ExtAddr x-microsoft-antispam-prvs: x-ms-oob-tlc-oobclassifiers: OLM:3044; x-ms-exchange-senderadcheck: 1 x-ms-exchange-antispam-relay: 0 x-microsoft-antispam: BCL:0; x-microsoft-antispam-message-info: yah3WcFmTz9rVm2MyHyWAGMBeLzlyfKU6PA8rOkj4XxthnJgfdW9WkA/7RUYMdX6ANEI6a6RUSvd8bkoVmN5LZx7kn2utS1SqVy41BuRJOCbjhVkHMuWGij/lU/v4qyX1EYFhY9XL8QVOR0uue5ZkClyXjD4aXyh8uIgBE00vQ/n40rg0wR/FJStm7zUVcFPNDFyuIx1b2/buGkD0OQWeHmqWx6fzy2m33+EPHysUaZJRIqV4+vGNwSGvZGpDSE4PNnFHcIx7UXeFu3J3riT/t8ePkqRFKdTAN7wEr6oTP9/iWCYf22i2EB7qFF/D1HkzfpShpPxR5KBrIVv45CbFz2pi0Hq1kJV8/8uOWU08LnE6RFm4IL1MALDh721tluRQEZICYa4bh4F5wFOEN1RfYYMLq19ARmn5xULsEuE04UkyPnnM4x3wKbyyNkebiD0ILgEE+2Thwfu9eY7Fn4nJ79s21EJT6I0yLCmGxyBsBwZ5fpdNnQMquO9syGPsd2VMAEnlgOyPCpoVBM24BHg95mCW5WkYcZ+n/kpDQMRw4eE6e0tcmPsdGb4GlehtgjqGmGKSpFEi/vyxHHBCT5bK4kB184R6lfFCpqzVgZs5pq99046tgM6+Ynp++b77l2A7btwoeUAwtg1TGWDm/ObDadxkTYp6xrk5ATBpm2G5S8g+yHGtv0BqT5LL5QBBGKnSPzyS/RfZ389+hpqPQKH7I7ifPAzlLsnScHlGI2gmynHjDxa0xPsZVUWuWec3AuZ+fPSABeSUJnMgKMsgqvGTtsFgNT1WjknduYONwMgdk14gl6u/qW7LWT7SKiszeSg x-forefront-antispam-report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:PH0PR11MB5659.namprd11.prod.outlook.com;PTR:;CAT:NONE;SFS:(13230001)(366004)(316002)(8936002)(8676002)(66476007)(66446008)(64756008)(83380400001)(4326008)(26005)(6636002)(33656002)(110136005)(54906003)(38070700005)(19627235002)(86362001)(38100700002)(186003)(82960400001)(122000001)(66556008)(76116006)(2906002)(66946007)(52536014)(9686003)(30864003)(55016003)(5660300002)(53546011)(7696005)(6506007)(45080400002)(508600001)(71200400001)(966005)(579004)(20210929001);DIR:OUT;SFP:1102; x-ms-exchange-antispam-messagedata-chunkcount: 1 x-ms-exchange-antispam-messagedata-0: =?utf-8?B?OTM1N3ZXSmo0aDZINlNMU0t2ZHM1RkhCQklETFViTjRpRGE0c29lc3J3Wmtz?= =?utf-8?B?TmpDbkZMSUdmV2twZmN5OGN6bWZjMzA1TDV2MDdoQU5VQStGWmtaVmM4QWEv?= =?utf-8?B?aXF6RVJCUjJVcThOc3kxS3VzcWVvaFc3MFVob01tL0R6aVZTa1JwVU1hV3NX?= =?utf-8?B?OENkYjFqQjZ4OVE2QVRRUUROZlorZVpKR2dFdEtsZi9rUWtsTUdJL2FtcXZp?= =?utf-8?B?SW93RkQrNGg4dzNEcnNESnVIak9lNVF4MEF1UERNNFhJK2FDaUFsN0ZGdXE4?= =?utf-8?B?cGw0TVhxWkUvRWFHbjFlZWVTOTgyclROS2dNUG45Rngwc1BtTVN1R1ZKREdC?= =?utf-8?B?Z2pFRENQRG1hT3BCUVJtdHpTSEVhQ1F6eksweVQ0aE8wWHhUSjdPSnUyMkdF?= =?utf-8?B?dzNXTWdCUitiTDRpbkQ3NHB2eHdCWXJQRUtQa0kzeTZIWXIvbHluM2Q3OGQx?= =?utf-8?B?Slo1bzBRdnZ3OUFsWngrUkRPeERBZ3RTeTA0RFFpVHRweGFpS2xuTUJna3Jw?= =?utf-8?B?ME45QnkzQS9qTWhPTUlkZEV4T2hyY3VQa1Q2Z0VycjVKSFVEMVVuVy9PbjhD?= =?utf-8?B?NXRjNURVWURvMVNpYlljSUt5czgzVnc2V2RZSk1Id3BnY2ZMVUcyWG5DaCs2?= =?utf-8?B?M3JUa0RrZmlabzQxakIxeXd1ampOSnhmd3k1VjBHVFk2ZHhqZS9sWW1LenU2?= =?utf-8?B?Q3NSNmVCM0xqR0s4WTduNW5US0lTMzQzVVBod01qWDZwelVQcHIwdTllVGZ2?= =?utf-8?B?NkwrQWdtcjZ0Rjd1cW1qNDdkbmlyZ3p6dWZOY01qaHo5d1JtTWpaL1cxdHQx?= =?utf-8?B?L1RmUE05MG1WdWY2RktNV1FvWEYyMkgrNUV2a0lDMFhIQXIxUml0SDlXK2hs?= =?utf-8?B?cC9icFhTMWNSSzJ6aEpJK0JqK05uMGp5eitaZEZEaldYbkhxYzJUc0pmUEd2?= =?utf-8?B?anJmRmk4ams0K0c5Y25BbndaY1haVFF6UnBwMUhkYlNvR2U5dTA5YVRHMVY0?= =?utf-8?B?U0tKTTdkbndiNVRrQVVZUHhtYjNTSXdyZXZEL1VTdWUwbXBTRlZCUGdTVlM1?= =?utf-8?B?dCtSWDdCamk4K0dBMEVLSnBTbXJvV3N6d3VPRnUrOTVXdXhVanZ3YjBLZkYy?= =?utf-8?B?VGVIaytyL2pZL1pBSmVFbzhKTG9RYmdlR29hQ1NUVkZWdngxNW5kSmdib1Vo?= =?utf-8?B?Njg0dVQxa2t6V1ladHFKWDFCVTJwelcrbDJkK3BXTnRKSFp6elpQeTJVNFlt?= =?utf-8?B?eUdub2JrbGRyUVh4bEJpdXlzSDhwWFV2MWVRNnYwVnhQQzVHZ0h1aG52R3hC?= =?utf-8?B?bmZLUEltUE90bnBhYjJxeWl1eDFldUZtWkQrbHVhQmxHSkJhNnZqeXpPUDQ4?= =?utf-8?B?S1o4UkpOZWlSbXFIOGcrSU9XRFpmYTQzOXd6bC9hcmtqZjRzL0NIYWsyUEFO?= =?utf-8?B?Q2NBN3ZGQlFwMFB1Mmp3ZjBJVkVpcDZWT2dxMDhQQlR4d3o3aGF5L1hDdVNU?= =?utf-8?B?UHVhTkgxNTN0YnRlK1ppSEU4ZnduUjE3cWhOY1U3YUxNSUJiRmdQQW5SYUNX?= =?utf-8?B?SXZ4aEpIRnRRT3k5dzN5WkhubXloNU9mRDFQNnRNWmgySENrL2xkejVzQ3JF?= =?utf-8?B?R0ZHaURLWWpmUysySlZNeGZJc2w0UU96VGZSRmFYSnBwc0kwNWtQZEFYMjA2?= =?utf-8?B?YWRyOURadlFKNWZhaW9ISkFMekI4MGZtQnpWbmFDczc1bUg1cXY4bXlUbXlY?= =?utf-8?B?Y0dmYmloc3oyMUtqMjF0RUtNTFZGQWhGWWdJY3NoSVY4VTVaVkJweW96dEQx?= =?utf-8?B?Z2sva2p3QXdYN095b0FrdlBmWFZKY1BzV2tUQ1VYQ2NEbzJ5Zys0TjNyQlB5?= =?utf-8?B?aUtzcU5RaDFOYWNrcURBVzlCLyt4amVlTHlNYUxPYXVjVlVTT2hCSXlEVmt0?= =?utf-8?B?Y2xnMVhmTTRJN040WkVJVWZ0Wi9ZOEhIODBIbXJvWFdSdzBkUmllSXVNNWJJ?= =?utf-8?B?ekJSNUxYa3hodHUzQThIYnlScXlybjhLRkR0Sk4zcDVvdUxjdThXeVlWck1p?= =?utf-8?B?akZtekVVa0ZIOUhVZnB4aDhFVVozMWxsMVlyL2luTUQ5M0gyckJUQjVIUkVZ?= =?utf-8?B?YmlyckV0Q2haVVRsSmltMnZBYWtzcjVXUXlHR3NYYVRYdmZyTmxvVkF3SUty?= =?utf-8?Q?i7r1GrbvHRNAcWyk8H/uIas=3D?= MIME-Version: 1.0 X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-AuthSource: PH0PR11MB5659.namprd11.prod.outlook.com X-MS-Exchange-CrossTenant-Network-Message-Id: a6605d2c-44d7-4183-39ee-08d9e0a41676 X-MS-Exchange-CrossTenant-originalarrivaltime: 26 Jan 2022 08:16:00.4491 (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: ytffxNz70cYXO1g6zqvOxkZVfQOPE7GedXCUJYltrIq1IYdu+Y9C8GTCX/sROSAoCBZkWqZ4eHzM4CtMVjAmLw== X-MS-Exchange-Transport-CrossTenantHeadersStamped: CO1PR11MB4849 Return-Path: lisa.huang@intel.com X-OriginatorOrg: intel.com Content-Language: en-US Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 SGkgTWljaGFlbCwNCg0KU3VyZSwgSSB3aWxsIGluY2x1ZGUgeW91IGlmIGFueSB1cGRhdGUgb24g UFJNIGZ1bmN0aW9uYWxpdHkuIA0KDQpCVFcsIEkgaGF2ZSBhIHF1ZXN0aW9uIGFib3V0IEluaXRp YWxpemVkRGF0YSwgZG9lcyBpdCBpbmNsdWRlIGV4cG9ydCBzZWN0aW9uIG9yIG5vdD8gVGhhbmtz Lg0KDQpSZWdhcmRzLA0KTGlzYQ0KDQotLS0tLU9yaWdpbmFsIE1lc3NhZ2UtLS0tLQ0KRnJvbTog TWljaGFlbCBLdWJhY2tpIDxtaWNoYWVsLmt1YmFja2lAb3V0bG9vay5jb20+IA0KU2VudDogMjAy MuW5tDHmnIgyMuaXpSAxMDo1MA0KVG86IGRldmVsQGVkazIuZ3JvdXBzLmlvOyBIdWFuZywgTGkt WGlhIDxsaXNhLmh1YW5nQGludGVsLmNvbT47IEdhbywgTGltaW5nIDxnYW9saW1pbmdAYnlvc29m dC5jb20uY24+OyBGZW5nLCBCb2IgQyA8Ym9iLmMuZmVuZ0BpbnRlbC5jb20+DQpDYzogQ2hlbiwg Q2hyaXN0aW5lIDx5dXdlaS5jaGVuQGludGVsLmNvbT47IFd1LCBZaWRvbmcgPHlpZG9uZy53dUBp bnRlbC5jb20+OyBYdSwgV2VpNiA8d2VpNi54dUBpbnRlbC5jb20+OyBZb3UsIEJlbmphbWluIDxi ZW5qYW1pbi55b3VAaW50ZWwuY29tPjsgbWlrdWJhY2tAbGludXgubWljcm9zb2Z0LmNvbQ0KU3Vi amVjdDogUmU6IFtlZGsyLWRldmVsXVtQQVRDSF0gQmFzZVRvb2xzL0dlbkZ3OiBFbmhhbmNlIHRv IGFkZCBleHBvcnQgdGFibGUgaW4gUEUtQ09GRg0KDQpIaSBMaXNhLA0KDQpUaGFuayB5b3UgZm9y IGNvbnRyaWJ1dGluZyB0aGlzLiBQbGVhc2UgaW5jbHVkZSBtZSBvbiBmdW5jdGlvbmFsaXR5IHJl bGF0ZWQgdG8gUFJNLg0KDQpJIHdhcyB1c2luZyB0aGUgUFJNX0VYUE9SVF9BUEkgbWFjcm8NCiho dHRwczovL2dpdGh1Yi5jb20vdGlhbm9jb3JlL2VkazItc3RhZ2luZy9ibG9iLzlkYThhYmY2NjUw NWQ4ZmY2MzZhYWVjYzQyOWE1MjM3Y2UyMjY2NTAvUHJtUGtnL0luY2x1ZGUvUHJtLmgjTDE3KQ0K dG8gc3VwcG9ydCB0aGlzIG9uIE1TIHRvb2xjaGFpbi4NCg0KSXQgbG9va3MgbGlrZSB0aGlzIGlz IHRvIGFkZCBzaW1pbGFyIGZ1bmN0aW9uYWxpdHkgZm9yIEVMRiBiaW5hcmllcyB1c2luZyBHZW5G dz8NCg0KVGhhbmtzLA0KTWljaGFlbA0KDQpPbiAxLzE4LzIwMjIgMToxOSBBTSwgSHVhbmcsIExp LVhpYSB3cm90ZToNCj4gSGkgTGltaW5nLA0KPiANCj4gVGhhbmtzIGZvciB5b3VyIGZlZWRiYWNr Lg0KPiANCj4gSSBoYXZlIGFkZGVkIHNvbWUgZGV0YWlsIGluIEJaLiDwn5iKDQo+IA0KPiBodHRw czovL2J1Z3ppbGxhLnRpYW5vY29yZS5vcmcvc2hvd19idWcuY2dpP2lkPTM4MDIjYWRkX2NvbW1l bnQNCj4gPGh0dHBzOi8vYnVnemlsbGEudGlhbm9jb3JlLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9Mzgw MiNhZGRfY29tbWVudD4NCj4gDQo+IFJlZ2FyZHMsDQo+IA0KPiBMaXNhDQo+IA0KPiAqRnJvbToq Z2FvbGltaW5nIDxnYW9saW1pbmdAYnlvc29mdC5jb20uY24+DQo+ICpTZW50OiogMjAyMuW5tDHm nIgxOOaXpTEzOjIwDQo+ICpUbzoqIGRldmVsQGVkazIuZ3JvdXBzLmlvOyBIdWFuZywgTGktWGlh IDxsaXNhLmh1YW5nQGludGVsLmNvbT47IA0KPiBGZW5nLCBCb2IgQyA8Ym9iLmMuZmVuZ0BpbnRl bC5jb20+DQo+ICpDYzoqIENoZW4sIENocmlzdGluZSA8eXV3ZWkuY2hlbkBpbnRlbC5jb20+OyBX dSwgWWlkb25nIA0KPiA8eWlkb25nLnd1QGludGVsLmNvbT47IFh1LCBXZWk2IDx3ZWk2Lnh1QGlu dGVsLmNvbT47IFlvdSwgQmVuamFtaW4gDQo+IDxiZW5qYW1pbi55b3VAaW50ZWwuY29tPg0KPiAq U3ViamVjdDoqIOWbnuWkjTogW2VkazItZGV2ZWxdW1BBVENIXSBCYXNlVG9vbHMvR2VuRnc6IEVu aGFuY2UgdG8gYWRkIA0KPiBleHBvcnQgdGFibGUgaW4gUEUtQ09GRg0KPiANCj4gTGlzYToNCj4g DQo+ICDCoENhbiB5b3UgZ2l2ZSBtb3JlIGJhY2tncm91bmQgYWJvdXQgUFJNIHVzYWdlPyBXaGF0 IG5ldyB1c2FnZSANCj4gcmVxdWlyZXMgUlBNPyBDYW4geW91IGFkZCB0aGUgZGV0YWlsIGluIEJa Pw0KPiANCj4gVGhhbmtzDQo+IA0KPiBMaW1pbmcNCj4gDQo+ICrlj5Hku7bkuroqKjoqZGV2ZWxA ZWRrMi5ncm91cHMuaW8NCj4gPG1haWx0bzpkZXZlbEBlZGsyLmdyb3Vwcy5pbz48ZGV2ZWxAZWRr Mi5ncm91cHMuaW8NCj4gPG1haWx0bzpkZXZlbEBlZGsyLmdyb3Vwcy5pbz4+ICrku6PooaggKkh1 YW5nLCBMaS1YaWENCj4gKuWPkemAgeaXtumXtDoqIDIwMjLlubQx5pyIMTfml6UgMTE6MDkNCj4g KuaUtuS7tuS6ujoqIEZlbmcsIEJvYiBDIDxib2IuYy5mZW5nQGludGVsLmNvbSANCj4gPG1haWx0 bzpib2IuYy5mZW5nQGludGVsLmNvbT4+OyBkZXZlbEBlZGsyLmdyb3Vwcy5pbyANCj4gPG1haWx0 bzpkZXZlbEBlZGsyLmdyb3Vwcy5pbz4NCj4gKuaKhOmAgToqIEdhbywgTGltaW5nIDxnYW9saW1p bmdAYnlvc29mdC5jb20uY24gDQo+IDxtYWlsdG86Z2FvbGltaW5nQGJ5b3NvZnQuY29tLmNuPj47 IENoZW4sIENocmlzdGluZSANCj4gPHl1d2VpLmNoZW5AaW50ZWwuY29tIDxtYWlsdG86eXV3ZWku Y2hlbkBpbnRlbC5jb20+PjsgV3UsIFlpZG9uZyANCj4gPHlpZG9uZy53dUBpbnRlbC5jb20gPG1h aWx0bzp5aWRvbmcud3VAaW50ZWwuY29tPj47IFh1LCBXZWk2IA0KPiA8d2VpNi54dUBpbnRlbC5j b20gPG1haWx0bzp3ZWk2Lnh1QGludGVsLmNvbT4+OyBZb3UsIEJlbmphbWluIA0KPiA8YmVuamFt aW4ueW91QGludGVsLmNvbSA8bWFpbHRvOmJlbmphbWluLnlvdUBpbnRlbC5jb20+Pg0KPiAq5Li7 6aKYOiogUmU6IFtlZGsyLWRldmVsXVtQQVRDSF0gQmFzZVRvb2xzL0dlbkZ3OiBFbmhhbmNlIHRv IGFkZCBleHBvcnQgDQo+IHRhYmxlIGluIFBFLUNPRkYNCj4gDQo+IEhpIEJvYiwNCj4gDQo+IFRo YW5rcyBmb3IgeW91ciBjb21tZW50cy4NCj4gDQo+IDEuwqAgSSB3aWxsIGFkZCB0aGUgaGVscCBp bmZvcm1hdGlvbiBmb3IgIi0tUFJNIjsNCj4gDQo+IDIuDQo+IA0KPiBAQCAtNzUwLDcgKzgxOCw3 IEBAIFNjYW5TZWN0aW9uczY0ICgNCj4gDQo+ICDCoMKgwqDCoCBpZiAoc2hkci0+c2hfYWRkcmFs aWduIDw9IG1Db2ZmQWxpZ25tZW50KSB7DQo+IA0KPiAgwqDCoMKgwqDCoMKgIGNvbnRpbnVlOw0K PiANCj4gIMKgwqDCoMKgIH0NCj4gDQo+IC3CoMKgwqAgaWYgKElzVGV4dFNoZHIoc2hkcikgfHwg SXNEYXRhU2hkcihzaGRyKSB8fCBJc0hpaVJzcmNTaGRyKHNoZHIpKSANCj4gew0KPiANCj4gK8Kg wqDCoCBpZiAoSXNUZXh0U2hkcihzaGRyKSB8fCBJc0RhdGFTaGRyKHNoZHIpIHx8IElzSGlpUnNy Y1NoZHIoc2hkcikgDQo+ICt8fA0KPiBJc1N5bWJvbFNoZHIoc2hkcikpIHsNCj4gDQo+ICDCoMKg wqDCoMKgwqAgbUNvZmZBbGlnbm1lbnQgPSAoVUlOVDMyKXNoZHItPnNoX2FkZHJhbGlnbjsNCj4g DQo+ICDCoMKgwqDCoCB9DQo+IA0KPiAgwqDCoCB9DQo+IA0KPiAxKSBBYm92ZSBjaGFuZ2UgaXMg dG8gU2V0IG1Db2ZmQWxpZ25tZW50IHRvIHRoZSBtYXhpbXVtIGFsaWdubWVudCBvZiANCj4gdGhl IGlucHV0IHNlY3Rpb25zIGluY2x1ZGluZyBzeW1ib2wgc2VjdGlvbi4NCj4gDQo+ICDCoMKgwqDC oFRoZSBzeW1ib2wgc2VjdGlvbiB3aWxsIG9ubHkgZXhpc3Qgd2l0aCBiZWxvdyBjaGFuZ2UsIHNv IGl0IA0KPiBzaG91bGQgaGF2ZSBubyBlZmZlY3QgdG8gb3RoZXIgZHJpdmVycy4NCj4gDQo+IGJ1 aWxkX3J1bGUudGVtcGxhdGU6DQo+IA0KPiAgwqDCoMKgIDxDb21tYW5kLkdDQz4NCj4gDQo+ICDC oMKgwqDCoMKgwqDCoCAkKENQKSAke3NyY30gJChERUJVR19ESVIpKCspJChNT0RVTEVfTkFNRSku ZGVidWcNCj4gDQo+ICDCoMKgwqDCoMKgwqDCoCAjJChPQkpDT1BZKSAtLXN0cmlwLXVubmVlZGVk IC1SIC5laF9mcmFtZSAke3NyY30NCj4gDQo+ICDCoMKgwqDCoMKgwqDCoCAkKE9CSkNPUFkpICQo T0JKQ09QWV9TVFJJUEZMQUcpICR7c3JjfQ0KPiANCj4gdG9vbHNfZGVmLnRlbXBsYXRlOg0KPiAN Cj4gKl8qXypfT0JKQ09QWV9TVFJJUEZMQUfCoMKgwqDCoMKgwqDCoMKgwqDCoMKgID0gLS1zdHJp cC11bm5lZWRlZCAtUiAuZWhfZnJhbWUNCj4gDQo+IFBybUFkZHJUcmFuc0RzbS5pbmY6DQo+IA0K PiBbQnVpbGRPcHRpb25zLmNvbW1vbl0NCj4gDQo+IC4uLg0KPiANCj4gIMKgIEdDQzogKl8qXypf T0JKQ09QWV9TVFJJUEZMQUcgPT0gLVIgLmVoX2ZyYW1lDQo+IA0KPiAyKSBGb3IgUFJNIGRyaXZl ciwgc2hfYWRkcmFsaWduIG9mIHN5bWJvbCBzZWN0aW9uIGlzIDgsIGFuZCBsZXNzIHRoYW4gDQo+ IG90aGVyIHNlY3Rpb25zIHN1Y2ggYXMgVGV4dCBhbmQgRGF0YSAoc2hfYWRkcmFsaWduIGlzIDQw OTYpLg0KPiANCj4gUmVnYXJkcywNCj4gDQo+IExpc2ENCj4gDQo+IC0tLS0tT3JpZ2luYWwgTWVz c2FnZS0tLS0tDQo+IEZyb206IEZlbmcsIEJvYiBDIDxib2IuYy5mZW5nQGludGVsLmNvbSA8bWFp bHRvOmJvYi5jLmZlbmdAaW50ZWwuY29tPj4NCj4gU2VudDogMjAyMuW5tDHmnIgxNOaXpSAxNDox Mg0KPiBUbzogSHVhbmcsIExpLVhpYSA8bGlzYS5odWFuZ0BpbnRlbC5jb20gDQo+IDxtYWlsdG86 bGlzYS5odWFuZ0BpbnRlbC5jb20+PjsgZGV2ZWxAZWRrMi5ncm91cHMuaW8gDQo+IDxtYWlsdG86 ZGV2ZWxAZWRrMi5ncm91cHMuaW8+DQo+IENjOiBHYW8sIExpbWluZyA8Z2FvbGltaW5nQGJ5b3Nv ZnQuY29tLmNuIA0KPiA8bWFpbHRvOmdhb2xpbWluZ0BieW9zb2Z0LmNvbS5jbj4+OyBDaGVuLCBD aHJpc3RpbmUgDQo+IDx5dXdlaS5jaGVuQGludGVsLmNvbSA8bWFpbHRvOnl1d2VpLmNoZW5AaW50 ZWwuY29tPj4NCj4gU3ViamVjdDogUkU6IFtlZGsyLWRldmVsXVtQQVRDSF0gQmFzZVRvb2xzL0dl bkZ3OiBFbmhhbmNlIHRvIGFkZCANCj4gZXhwb3J0IHRhYmxlIGluIFBFLUNPRkYNCj4gDQo+IEhp IExpeGlhLA0KPiANCj4gVGhpcyBwYXRjaCBpbnRyb2R1Y2UgYSBuZXcgY29tbWFuZCBsaW5lIG9w dGlvbiAtLVBSTS4gQ291bGQgeW91IGFkZCANCj4gdGhlIGhlbHAgaW5mb3JtYXRpb24gYWJvdXQg LS1QUk0/DQo+IA0KPiBDb3VsZCB5b3UgcHJvdmlkZSBtb3JlIGluZm9ybWF0aW9uIGFib3V0IHRo ZSBiZWxvdyBjaGFuZ2U/IFdvdWxkIHRoZXJlIA0KPiBiZSBzaWRlLWVmZmVjdD8NCj4gDQo+IEBA IC03NTAsNyArODE4LDcgQEAgU2NhblNlY3Rpb25zNjQgKA0KPiANCj4gIMKgwqDCoMKgIGlmIChz aGRyLT5zaF9hZGRyYWxpZ24gPD0gbUNvZmZBbGlnbm1lbnQpIHsNCj4gDQo+ICDCoMKgwqDCoMKg wqAgY29udGludWU7DQo+IA0KPiAgwqDCoMKgwqAgfQ0KPiANCj4gLcKgwqDCoCBpZiAoSXNUZXh0 U2hkcihzaGRyKSB8fCBJc0RhdGFTaGRyKHNoZHIpIHx8IElzSGlpUnNyY1NoZHIoc2hkcikpIA0K PiB7DQo+IA0KPiArwqDCoMKgIGlmIChJc1RleHRTaGRyKHNoZHIpIHx8IElzRGF0YVNoZHIoc2hk cikgfHwgSXNIaWlSc3JjU2hkcihzaGRyKSANCj4gK3x8DQo+IElzU3ltYm9sU2hkcihzaGRyKSkg ew0KPiANCj4gIMKgwqDCoMKgwqDCoCBtQ29mZkFsaWdubWVudCA9IChVSU5UMzIpc2hkci0+c2hf YWRkcmFsaWduOw0KPiANCj4gIMKgwqDCoMKgIH0NCj4gDQo+ICDCoMKgIH0NCj4gDQo+IFRoYW5r cywNCj4gDQo+IEJvYg0KPiANCj4gLS0tLS1PcmlnaW5hbCBNZXNzYWdlLS0tLS0NCj4gDQo+IEZy b206IEh1YW5nLCBMaS1YaWEgPGxpc2EuaHVhbmdAaW50ZWwuY29tIA0KPiA8bWFpbHRvOmxpc2Eu aHVhbmdAaW50ZWwuY29tPj4NCj4gDQo+IFNlbnQ6IFdlZG5lc2RheSwgSmFudWFyeSAxMiwgMjAy MiAzOjQ0IFBNDQo+IA0KPiBUbzogZGV2ZWxAZWRrMi5ncm91cHMuaW8gPG1haWx0bzpkZXZlbEBl ZGsyLmdyb3Vwcy5pbz4NCj4gDQo+IENjOiBIdWFuZywgTGktWGlhIDxsaXNhLmh1YW5nQGludGVs LmNvbSANCj4gPG1haWx0bzpsaXNhLmh1YW5nQGludGVsLmNvbT4+OyBHYW8sIExpbWluZyA8Z2Fv bGltaW5nQGJ5b3NvZnQuY29tLmNuIA0KPiA8bWFpbHRvOmdhb2xpbWluZ0BieW9zb2Z0LmNvbS5j bj4+OyBGZW5nLCBCb2IgQyA8Ym9iLmMuZmVuZ0BpbnRlbC5jb20gDQo+IDxtYWlsdG86Ym9iLmMu ZmVuZ0BpbnRlbC5jb20+PjsgQ2hlbiwgQ2hyaXN0aW5lIDx5dXdlaS5jaGVuQGludGVsLmNvbSAN Cj4gPG1haWx0bzp5dXdlaS5jaGVuQGludGVsLmNvbT4+DQo+IA0KPiBTdWJqZWN0OiBbZWRrMi1k ZXZlbF1bUEFUQ0hdIEJhc2VUb29scy9HZW5GdzogRW5oYW5jZSB0byBhZGQgZXhwb3J0IA0KPiB0 YWJsZSBpbiBQRS1DT0ZGDQo+IA0KPiBSRUY6IGh0dHBzOi8vYnVnemlsbGEudGlhbm9jb3JlLm9y Zy9zaG93X2J1Zy5jZ2k/aWQ9MzgwMg0KPiA8aHR0cHM6Ly9idWd6aWxsYS50aWFub2NvcmUub3Jn L3Nob3dfYnVnLmNnaT9pZD0zODAyPg0KPiANCj4gU2luY2UgUFJNIG1vZHVsZSBuZWVkcyB0byBz dXBwb3J0IGV4cG9ydCB0YWJsZSBpbiBQRS1DT0ZGLCB3ZSdsbCANCj4gZW5oYW5jZSBHZW5GdyB0 b29sIHRvIHN1cHBvcnQgdGhpcy4NCj4gDQo+IEFkZCBvbmUgZXhwb3J0IGZsYWcgaW4gR2VuRncg dG9vbC4gSWYgZXhwb3J0IGZsYWcgaXMgc2V0Og0KPiANCj4gU3RlcDE6IFNjYW4gRUxGIHN5bWJv bCB0YWJsZSBiYXNlZCBvbiBQUk0gbW9kdWxlIGRlc2NyaXB0b3IgdG8gZ2V0IA0KPiBkZXNjcmlw dG9yIG9mZnNldCBhZGRyZXNzOw0KPiANCj4gU3RlcDI6IEZpbmQgUFJNIGhhbmRsZXJzIG51bWJl ciBhbmQgbmFtZSBpbiBDT0ZGIGZpbGUgYmFzZWQgb24gdGhlIA0KPiBhZGRyZXNzIGZyb20gc3Rl cDE7DQo+IA0KPiBTdGVwMzogV3JpdGUgUFJNIGluZm8gc3VjaCBhcyBoYW5kbGVyIG5hbWUgYW5k IGV4cG9ydCBSVkEgaW50byBDT0ZGIA0KPiBleHBvcnQgdGFibGUuDQo+IA0KPiBDYzogTGltaW5n IEdhbyA8Z2FvbGltaW5nQGJ5b3NvZnQuY29tLmNuIA0KPiA8bWFpbHRvOmdhb2xpbWluZ0BieW9z b2Z0LmNvbS5jbj4+DQo+IA0KPiBDYzogQm9iIEZlbmcgPGJvYi5jLmZlbmdAaW50ZWwuY29tIDxt YWlsdG86Ym9iLmMuZmVuZ0BpbnRlbC5jb20+Pg0KPiANCj4gQ2M6IFl1d2VpIENoZW4gPHl1d2Vp LmNoZW5AaW50ZWwuY29tIDxtYWlsdG86eXV3ZWkuY2hlbkBpbnRlbC5jb20+Pg0KPiANCj4gU2ln bmVkLW9mZi1ieTogTGl4aWEgSHVhbmcgPGxpc2EuaHVhbmdAaW50ZWwuY29tIA0KPiA8bWFpbHRv Omxpc2EuaHVhbmdAaW50ZWwuY29tPj4NCj4gDQo+IC0tLQ0KPiANCj4gQmFzZVRvb2xzL1NvdXJj ZS9DL0dlbkZ3L0VsZjY0Q29udmVydC5jwqDCoMKgwqDCoMKgIHwgMjU0ICsrKysrKysrKysrKysr KysrLQ0KPiANCj4gQmFzZVRvb2xzL1NvdXJjZS9DL0dlbkZ3L0VsZkNvbnZlcnQuY8KgwqDCoMKg wqDCoMKgwqAgfMKgIDEwICsNCj4gDQo+IEJhc2VUb29scy9Tb3VyY2UvQy9HZW5Gdy9FbGZDb252 ZXJ0LmjCoMKgwqDCoMKgwqDCoMKgIHzCoCA0MiArKy0NCj4gDQo+IEJhc2VUb29scy9Tb3VyY2Uv Qy9HZW5Gdy9HZW5Gdy5jwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgfMKgIDExICstDQo+IA0K PiAuLi4vQy9JbmNsdWRlL0luZHVzdHJ5U3RhbmRhcmQvUGVJbWFnZS5owqDCoMKgwqDCoCB8wqDC oCA3ICsNCj4gDQo+IDUgZmlsZXMgY2hhbmdlZCwgMzE4IGluc2VydGlvbnMoKyksIDYgZGVsZXRp b25zKC0pDQo+IA0KPiBkaWZmIC0tZ2l0IGEvQmFzZVRvb2xzL1NvdXJjZS9DL0dlbkZ3L0VsZjY0 Q29udmVydC5jDQo+IGIvQmFzZVRvb2xzL1NvdXJjZS9DL0dlbkZ3L0VsZjY0Q29udmVydC5jDQo+ IA0KPiBpbmRleCAwYmIzZWFkMjI4Li4wMDc5NTA3MzU2IDEwMDY0NA0KPiANCj4gLS0tIGEvQmFz ZVRvb2xzL1NvdXJjZS9DL0dlbkZ3L0VsZjY0Q29udmVydC5jDQo+IA0KPiArKysgYi9CYXNlVG9v bHMvU291cmNlL0MvR2VuRncvRWxmNjRDb252ZXJ0LmMNCj4gDQo+IEBAIC01Niw2ICs1NiwxOCBA QCBXcml0ZURlYnVnNjQgKA0KPiANCj4gIMKgwqAgVk9JRMKgwqAgKTsgK1NUQVRJQytWT0lEK1Nj YW5TeW1ib2w2NCAoK8KgIFZPSUQrDQo+ICk7KytTVEFUSUMrVk9JRCtXcml0ZUV4cG9ydDY0ICgr wqAgVk9JRCvCoCApOysgU1RBVElDIFZPSUQgDQo+IFNldEltYWdlU2l6ZTY0IChAQCAtMTIyLDcg KzEzNCw3IEBAIFNUQVRJQyBVSU5UMzIgbURhdGFPZmZzZXQ7DQo+IA0KPiBTVEFUSUMgVUlOVDMy IG1IaWlSc3JjT2Zmc2V0OyBTVEFUSUMgVUlOVDMyIG1SZWxvY09mZnNldDsgU1RBVElDIA0KPiBV SU5UMzIgbURlYnVnT2Zmc2V0Oy0rU1RBVElDIFVJTlQzMiBtRXhwb3J0T2Zmc2V0OyAvLyAvLyBV c2VkIGZvciANCj4gUklTQy1WIHJlbG9jYXRpb25zLiAvL0BAIC0xMzIsNiArMTQ0LDE0IEBAIFNU QVRJQyBFbGY2NF9IYWxmIA0KPiBtUmlzY1ZQYXNzMVN5bVNlY0luZGV4ID0gMDsNCj4gDQo+IFNU QVRJQyBJTlQzMsKgwqDCoMKgwqDCoCBtUmlzY1ZQYXNzMU9mZnNldDsgU1RBVElDIElOVDMyICAg ICAgIA0KPiBtUmlzY1ZQYXNzMUdvdEZpeHVwOyArLy8rLy8gVXNlZCBmb3IgRXhwb3J0IHNlY3Rp b24uKy8vK1NUQVRJQyANCj4gVUlOVDMywqDCoMKgwqDCoCBtRXhwb3J0U2l6ZTsrU1RBVElDIFVJ TlQzMiAgICAgIA0KPiBtRXhwb3J0UlZBW1BSTV9NT0RVTEVfRVhQT1JUX1NZTUJPTF9OVU1dOytT VEFUSUMgVUlOVDMyICAgICAgDQo+IG1FeHBvcnRTeW1OdW07K1NUQVRJQyBDSEFSOCAgICAgICAN Cj4gbUV4cG9ydFN5bU5hbWVbUFJNX01PRFVMRV9FWFBPUlRfU1lNQk9MX05VTV1bUFJNX0hBTkRM RVJfTkFNRV9NQVhJTVVNXw0KPiBMRU5HVEhdOysgLy8gLy8gSW5pdGlhbGl6YXRpb24gRnVuY3Rp b24gLy9AQCAtMjAwLDYgKzIyMCwxMCBAQCANCj4gSW5pdGlhbGl6ZUVsZjY0ICgNCj4gDQo+ICDC oMKgIEVsZkZ1bmN0aW9ucy0+U2V0SW1hZ2VTaXplID0gU2V0SW1hZ2VTaXplNjQ7wqDCoCANCj4g RWxmRnVuY3Rpb25zLT5DbGVhblVwID0gQ2xlYW5VcDY0OyArwqAgaWYgKG1FeHBvcnRGbGFnKSB7 K8KgwqDCoCBFbGZGdW5jdGlvbnMtPlNjYW5TeW1ib2wgPQ0KPiBTY2FuU3ltYm9sNjQ7K8KgwqDC oCBFbGZGdW5jdGlvbnMtPldyaXRlRXhwb3J0ID0gV3JpdGVFeHBvcnQ2NDsrwqAgfSAgIA0KPiBy ZXR1cm4gVFJVRTsgfSBAQCAtMjYzLDYgKzI4NywxNyBAQCBJc0hpaVJzcmNTaGRyICgNCj4gDQo+ ICDCoMKgIHJldHVybiAoQk9PTEVBTikgKHN0cmNtcCgoQ0hBUjgqKW1FaGRyICsgTmFtZWRyLT5z aF9vZmZzZXQgKw0KPiBTaGRyLT5zaF9uYW1lLCBFTEZfSElJX1NFQ1RJT05fTkFNRSkgPT0gMCk7 IH0NCj4gK1NUQVRJQytCT09MRUFOK0lzU3ltYm9sU2hkciAoK8KgIEVsZl9TaGRyICpTaGRyK8Kg ICkreyvCoCBFbGZfU2hkcg0KPiAqTmFtZWhkciA9IEdldFNoZHJCeUluZGV4KG1FaGRyLT5lX3No c3RybmR4KTsrK8KgIHJldHVybiAoQk9PTEVBTikgDQo+IChzdHJjbXAoKENIQVI4KiltRWhkciAr IE5hbWVoZHItPnNoX29mZnNldCArIFNoZHItPnNoX25hbWUsDQo+IEVMRl9TWU1CT0xfU0VDVElP Tl9OQU1FKSA9PSAwKTsrfSsgU1RBVElDIEJPT0xFQU4gSXNEYXRhU2hkciAoQEAgDQo+IC0zMzUs Ng0KPiArMzcwLDM4IEBAIEdldFN5bU5hbWUgKA0KPiANCj4gIMKgwqAgcmV0dXJuIFN0cnRhYkNv bnRlbnRzICsgU3ltLT5zdF9uYW1lOyB9ICsvLysvLyBHZXQgUHJtIEhhbmRsZXIgDQo+IG51bWJl ciBhbmQgbmFtZSsvLytTVEFUSUMrVk9JRCtGaW5kUHJtSGFuZGxlciAoK8KgIFVJTlQ2NCBPZmZz ZXQrwqAgKSt7Kw0KPiBQUk1fTU9EVUxFX0VYUE9SVF9ERVNDUklQVE9SX1NUUlVDVF9IRUFERVIg KlBybUV4cG9ydDsrwqAgVUlOVDMyICAgDQo+IE5hbWVPZmZzZXQ7K8KgIFVJTlQzMsKgwqAgSGFu ZGxlck51bTsrIFVJTlQzMsKgwqAgSW5kZXg7K8KgIFVJTlQ4ICAgIA0KPiBTeW1OYW1lW1BSTV9I QU5ETEVSX05BTUVfTUFYSU1VTV9MRU5HVEhdOysrwqAgUHJtRXhwb3J0ID0gDQo+IChQUk1fTU9E VUxFX0VYUE9SVF9ERVNDUklQVE9SX1NUUlVDVF9IRUFERVIqKShtQ29mZkZpbGUgKyBPZmZzZXQp OysgDQo+IE5hbWVPZmZzZXQgPSBzaXplb2YoUFJNX01PRFVMRV9FWFBPUlRfREVTQ1JJUFRPUl9T VFJVQ1RfSEVBREVSKSArIA0KPiBzaXplb2YoRUZJX0dVSUQpOysrwqAgZm9yIChIYW5kbGVyTnVt ID0gMDsgSGFuZGxlck51bSA8DQo+IFBybUV4cG9ydC0+TnVtYmVyUHJtSGFuZGxlcnM7IEhhbmRs ZXJOdW0rKykgeyvCoMKgwqAgZm9yIChJbmRleCA9IDA7IA0KPiBQcm1FeHBvcnQtPkluZGV4DQo+ IDwgUFJNX0hBTkRMRVJfTkFNRV9NQVhJTVVNX0xFTkdUSDsgSW5kZXgrKykgeyvCoMKgwqDCoMKg IFN5bU5hbWVbSW5kZXhdID0NCj4gKigoVUlOVDggKilQcm1FeHBvcnQgKyBOYW1lT2Zmc2V0ICsg SW5kZXgpOyvCoMKgwqDCoMKgIGlmIChTeW1OYW1lW0luZGV4XSANCj4gPT0NCj4gMCkgeyvCoMKg wqDCoMKgwqDCoCBicmVhazsrIH0rwqDCoMKgIH0rK8KgwqDCoCANCj4gc3RyY3B5KG1FeHBvcnRT eW1OYW1lW21FeHBvcnRTeW1OdW1dLA0KPiAoQ0hBUjgqKVN5bU5hbWUpOyvCoMKgwqAgTmFtZU9m ZnNldCArPSBQUk1fSEFORExFUl9OQU1FX01BWElNVU1fTEVOR1RIICsgDQo+IHNpemVvZihFRklf R1VJRCk7K8KgwqDCoCBtRXhwb3J0U3ltTnVtICsrOyvCoCB9K30rIC8vIC8vIEZpbmQgdGhlIEVM RiANCj4gc2VjdGlvbiBob3N0aW5nIHRoZSBHT1QgZnJvbSBhbiBFTEYgUnZhIC8vwqDCoCBvZiBh IHNpbmdsZSBHT1QgZW50cnkuDQo+IE5vcm1hbGx5LCBHT1QgaXMgcGxhY2VkIGluQEAgLTcxNyw2 ICs3ODQsNyBAQCBTY2FuU2VjdGlvbnM2NCAoDQo+IA0KPiAgwqDCoCBVSU5UMzLCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBDb2ZmRW50cnk7ICAgDQo+ IFVJTlQzMsKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg IFNlY3Rpb25Db3VudDsgICANCj4gQk9PTEVBTsKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoCBGb3VuZFNlY3Rpb247Kw0KPiBVSU5UMzLCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBPZmZzZXQ7wqDCoMKgIENvZmZF bnRyeSA9IDA7wqDCoCANCj4gbUNvZmZPZmZzZXQgPSAwO0BAIC03NTAsNyArODE4LDcgQEAgU2Nh blNlY3Rpb25zNjQgKA0KPiANCj4gIMKgwqDCoMKgIGlmIChzaGRyLT5zaF9hZGRyYWxpZ24gPD0g bUNvZmZBbGlnbm1lbnQpIHvCoMKgwqDCoMKgwqAgY29udGludWU7ICAgICANCj4gfS3CoMKgwqAg aWYgKElzVGV4dFNoZHIoc2hkcikgfHwgSXNEYXRhU2hkcihzaGRyKSB8fCBJc0hpaVJzcmNTaGRy KHNoZHIpKSANCj4geyvCoMKgwqAgaWYgKElzVGV4dFNoZHIoc2hkcikgfHwgSXNEYXRhU2hkcihz aGRyKSB8fCBJc0hpaVJzcmNTaGRyKHNoZHIpIA0KPiB8fA0KPiBJc1N5bWJvbFNoZHIoc2hkcikp IHvCoMKgwqDCoMKgwqAgbUNvZmZBbGlnbm1lbnQgPSANCj4gKFVJTlQzMilzaGRyLT5zaF9hZGRy YWxpZ247wqDCoMKgwqAgfcKgwqAgfUBAIC04ODAsNiArOTQ4LDE2IEBAIA0KPiBTY2FuU2VjdGlv bnM2NCAoDQo+IA0KPiAgwqDCoMKgwqAgV2FybmluZyAoTlVMTCwgMCwgMCwgTlVMTCwgIk11bHRp cGxlIHNlY3Rpb25zIGluICVzIGFyZSBtZXJnZWQgDQo+IGludG8gMSBkYXRhIHNlY3Rpb24uIFNv dXJjZSBsZXZlbCBkZWJ1ZyBtaWdodCBub3Qgd29yayBjb3JyZWN0bHkuIiwgDQo+IG1JbkltYWdl TmFtZSk7wqDCoCB9ICvCoCAvLyvCoCAvL8KgIFRoZSBTeW1ib2wgc2VjdGlvbnMuK8KgIC8vK8Kg IGlmDQo+IChtRXhwb3J0RmxhZykgeyvCoMKgwqAgbUV4cG9ydE9mZnNldCA9IG1Db2ZmT2Zmc2V0 OyvCoMKgwqAgbUV4cG9ydFNpemUgPSANCj4gc2l6ZW9mKEVGSV9JTUFHRV9FWFBPUlRfRElSRUNU T1JZKSArIHN0cmxlbihtSW5JbWFnZU5hbWUpICsgMTsrICAgIA0KPiBtQ29mZk9mZnNldCArPSBt RXhwb3J0U2l6ZTsrwqDCoMKgIG1Db2ZmT2Zmc2V0ID0gQ29mZkFsaWduKG1Db2ZmT2Zmc2V0KTsr IA0KPiB9K8KgwqAgLy/CoMKgIC8vwqAgVGhlIEhJSSByZXNvdXJjZSBzZWN0aW9ucy7CoMKgIC8v QEAgLTk2Miw3ICsxMDQwLDExIEBADQo+IFNjYW5TZWN0aW9uczY0ICgNCj4gDQo+ICDCoMKgwqDC oCB8IEVGSV9JTUFHRV9GSUxFX0xBUkdFX0FERFJFU1NfQVdBUkU7ICAgIA0KPiBOdEhkci0+UGUz MlBsdXMuT3B0aW9uYWxIZWFkZXIuU2l6ZU9mQ29kZSA9IG1EYXRhT2Zmc2V0IC0gDQo+IE50SGRy LT5tVGV4dE9mZnNldDstIFBlMzJQbHVzLk9wdGlvbmFsSGVhZGVyLlNpemVPZkluaXRpYWxpemVk RGF0YSA9IA0KPiBOdEhkci0+bVJlbG9jT2Zmc2V0IC0NCj4gbURhdGFPZmZzZXQ7K8KgIGlmKG1F eHBvcnRGbGFnKSB7KyAgICANCj4gTnRIZHItPlBlMzJQbHVzLk9wdGlvbmFsSGVhZGVyLlNpemVP ZkluaXRpYWxpemVkRGF0YSA9IG1SZWxvY09mZnNldCAtDQo+IG1FeHBvcnRPZmZzZXQ7K8KgIH0g ZWxzZSB7KyAgICANCj4gTnRIZHItPlBlMzJQbHVzLk9wdGlvbmFsSGVhZGVyLlNpemVPZkluaXRp YWxpemVkRGF0YSA9IG1SZWxvY09mZnNldCAtDQo+IG1EYXRhT2Zmc2V0OyvCoCB9ICAgDQo+IE50 SGRyLT5QZTMyUGx1cy5PcHRpb25hbEhlYWRlci5TaXplT2ZVbmluaXRpYWxpemVkRGF0YSA9IDA7 ICAgDQo+IE50SGRyLT5QZTMyUGx1cy5PcHRpb25hbEhlYWRlci5BZGRyZXNzT2ZFbnRyeVBvaW50 ID0gQ29mZkVudHJ5OyBAQA0KPiAtOTg5LDggKzEwNzEsMTcgQEAgU2NhblNlY3Rpb25zNjQgKA0K PiANCj4gIMKgwqDCoMKgIE50SGRyLT5QZTMyUGx1cy5GaWxlSGVhZGVyLk51bWJlck9mU2VjdGlv bnMtLTvCoMKgIH0gK8KgIC8vK8KgIC8vIElmIA0KPiBmb3VuZCBzeW1ib2wsIGFkZCBlZGF0YSBz ZWN0aW9uIGJldHdlZW4gZGF0YSBhbmQgcnNyYyBzZWN0aW9uK8KgIC8vKw0KPiBpZihtRXhwb3J0 RmxhZykgeyvCoMKgwqAgT2Zmc2V0ID0gbUV4cG9ydE9mZnNldDsrwqAgfSBlbHNlIHsrwqDCoMKg IE9mZnNldCA9IA0KPiBtSGlpUnNyY09mZnNldDsrwqAgfSvCoMKgIGlmICgobUhpaVJzcmNPZmZz ZXQgLSBtRGF0YU9mZnNldCkgPiAwKSB7LSAgICANCj4gQ3JlYXRlU2VjdGlvbkhlYWRlciAoIi5k YXRhIiwgbURhdGFPZmZzZXQsIG1IaWlSc3JjT2Zmc2V0IC0gDQo+IG1EYXRhT2Zmc2V0LCvCoMKg wqAgQ3JlYXRlU2VjdGlvbkhlYWRlciAoIi5kYXRhIiwgbURhdGFPZmZzZXQsIE9mZnNldCAtDQo+ IG1EYXRhT2Zmc2V0LMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBFRklfSU1BR0VfU0NOX0NOVF9J TklUSUFMSVpFRF9EQVRBICAgICAgICAgICAgIA0KPiB8IEVGSV9JTUFHRV9TQ05fTUVNX1dSSVRF IHwgRUZJX0lNQUdFX1NDTl9NRU1fUkVBRCk7QEAgLTk5OSw2ICsxMDkwLDIwDQo+IEBAIFNjYW5T ZWN0aW9uczY0ICgNCj4gDQo+ICDCoMKgwqDCoCBOdEhkci0+UGUzMlBsdXMuRmlsZUhlYWRlci5O dW1iZXJPZlNlY3Rpb25zLS07wqDCoCB9ICsgIA0KPiBpZihtRXhwb3J0RmxhZykgeyvCoMKgwqAg aWYgKChtSGlpUnNyY09mZnNldCAtIG1FeHBvcnRPZmZzZXQpID4gMCkgeysgICAgICANCj4gQ3Jl YXRlU2VjdGlvbkhlYWRlciAoIi5lZGF0YSIsIG1FeHBvcnRPZmZzZXQsIG1IaWlSc3JjT2Zmc2V0 IC0gDQo+IG1FeHBvcnRPZmZzZXQsK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIEVGSV9JTUFH RV9TQ05fQ05UX0lOSVRJQUxJWkVEX0RBVEErIHwNCj4gRUZJX0lNQUdFX1NDTl9NRU1fUkVBRCk7 KyAgICAgIA0KPiBOdEhkci0+UGUzMlBsdXMuT3B0aW9uYWxIZWFkZXIuRGF0YURpcmVjdG9yeVtF RklfSU1BR0VfRElSRUNUT1JZX0VOVFJZDQo+IE50SGRyLT5fRVhQT1JUXS5TaXplDQo+ID0gbUhp aVJzcmNPZmZzZXQgLSBtRXhwb3J0T2Zmc2V0OysgICAgICANCj4gTnRIZHItPlBlMzJQbHVzLk9w dGlvbmFsSGVhZGVyLkRhdGFEaXJlY3RvcnlbRUZJX0lNQUdFX0RJUkVDVE9SWV9FTlRSWQ0KPiBO dEhkci0+X0VYUE9SVF0uVmlydHVhbEFkZHJlc3MNCj4gPSBtRXhwb3J0T2Zmc2V0OysgTnRIZHIt PlBlMzJQbHVzLkZpbGVIZWFkZXIuTnVtYmVyT2ZTZWN0aW9ucysrOyvCoMKgwqAgfSANCj4gZWxz ZSB7K8KgwqDCoMKgwqAgLy8gRG9uJ3QgbWFrZSBhIHNlY3Rpb24gb2Ygc2l6ZSAwLisgICAgICAN Cj4gTnRIZHItPlBlMzJQbHVzLkZpbGVIZWFkZXIuTnVtYmVyT2ZTZWN0aW9ucy0tOyvCoMKgwqAg fSvCoCB9K8KgwqAgaWYNCj4gKChtUmVsb2NPZmZzZXQgLSBtSGlpUnNyY09mZnNldCkgPiAwKSB7 wqDCoMKgwqAgQ3JlYXRlU2VjdGlvbkhlYWRlciANCj4gKCIucnNyYyIsIG1IaWlSc3JjT2Zmc2V0 LCBtUmVsb2NPZmZzZXQgLSBtSGlpUnNyY09mZnNldCwgICAgICAgICAgICAgDQo+IEVGSV9JTUFH RV9TQ05fQ05UX0lOSVRJQUxJWkVEX0RBVEFAQCAtMTc1Nyw0ICsxODYyLDE0NSBAQCBDbGVhblVw NjQgKA0KPiANCj4gIMKgwqAgfSB9ICtTVEFUSUMrVk9JRCtTY2FuU3ltYm9sNjQgKCvCoCBWT0lE K8KgICkreyvCoCBVSU5UMzIgICAgICANCj4gc2hJbmRleDsrwqAgVUlOVDMywqDCoMKgwqDCoCBT eW1JbmRleDsrwqAgRWxmX1N5bcKgwqDCoMKgICpTeW07K8KgIFVJTlQ2NCAgICAgIA0KPiBTeW1O dW07K8KgIGNvbnN0IFVJTlQ4ICpTeW1OYW1lOysrwqAgZm9yIChzaEluZGV4ID0gMDsgc2hJbmRl eCA8DQo+IG1FaGRyLT5lX3NobnVtOyBzaEluZGV4KyspIHsrwqDCoMKgIC8vK8KgwqDCoCAvLyBE ZXRlcm1pbmUgaWYgdGhpcyBpcyBhIA0KPiBtRWhkci0+c3ltYm9sDQo+IHNlY3Rpb24uK8KgwqDC oCAvLyvCoMKgwqAgRWxmX1NoZHIgKnNoZHIgPSBHZXRTaGRyQnlJbmRleChzaEluZGV4KTsrwqDC oMKgIGlmDQo+ICghSXNTeW1ib2xTaGRyKHNoZHIpKSB7K8KgwqDCoMKgwqAgY29udGludWU7K8Kg wqDCoCB9KyvCoMKgwqAgVUlOVDjCoMKgwqAgKlN5bXRhYiA9IA0KPiAoVUlOVDgqKW1FaGRyICsg c2hkci0+c2hfb2Zmc2V0OyvCoMKgwqAgU3ltTnVtID0gKHNoZHItPnNoX3NpemUpIC8NCj4gKHNo ZHItPnNoX2VudHNpemUpOysrIC8vK8KgwqDCoCAvLyBGaXJzdCBHZXQgUHJtTW9kdWxlRXhwb3J0 RGVzY3JpcHRvcisgICAgDQo+IC8vK8KgwqDCoCBmb3IgKFN5bUluZGV4ID0gMDsgU3ltSW5kZXgg PCBTeW1OdW07IFN5bUluZGV4KyspIHsrwqDCoMKgwqDCoCBTeW0gPSANCj4gKEVsZl9TeW0gKiko U3ltdGFiICsgU3ltSW5kZXggKiBzaGRyLT5zaF9lbnRzaXplKTsrwqDCoMKgwqDCoCBTeW1OYW1l ID0gDQo+IEdldFN5bU5hbWUoU3ltKTsrwqDCoMKgwqDCoCBpZiAoU3ltTmFtZSA9PSBOVUxMKSB7 K8KgwqDCoMKgwqDCoMKgwqDCoCBjb250aW51ZTsrIH0rK8KgwqDCoMKgwqAgDQo+IGlmIChzdHJj bXAoKENIQVI4KilTeW1OYW1lLCBQUk1fTU9EVUxFX0VYUE9SVF9ERVNDUklQVE9SX05BTUUpDQo+ ID09IDApIHsrwqDCoMKgwqDCoMKgwqAgLy8rwqDCoMKgwqDCoMKgwqAgLy8gRmluZCBQcm1IYW5k bGVyIE51bWJlciBhbmQgTmFtZSsgICAgICAgIA0KPiAvLyvCoMKgwqDCoMKgwqDCoCBGaW5kUHJt SGFuZGxlcihTeW0tPnN0X3ZhbHVlKTsrKyAgICAgICAgDQo+IHN0cmNweShtRXhwb3J0U3ltTmFt ZVttRXhwb3J0U3ltTnVtXSwgKENIQVI4KilTeW1OYW1lKTsrIA0KPiBtRXhwb3J0UlZBW21FeHBv cnRTeW1OdW1dID0gKFVJTlQzMikoU3ltLT5zdF92YWx1ZSk7K8KgwqDCoMKgwqDCoMKgIA0KPiBt RXhwb3J0U2l6ZQ0KPiArPSAyICogRUZJX0lNQUdFX0VYUE9SVF9BRERSX1NJWkUgKyBFRklfSU1B R0VfRVhQT1JUX09SRElOQUxfU0laRSArDQo+IHN0cmxlbigoQ0hBUjggKilTeW1OYW1lKSArIDE7 K8KgwqDCoMKgwqDCoMKgIG1FeHBvcnRTeW1OdW0gKys7KyAgICAgICAgDQo+IGJyZWFrOyvCoMKg wqDCoMKgIH0rwqDCoMKgIH0rK8KgwqDCoCAvLyvCoMKgwqAgLy8gU2Vjb25kIEdldCBQcm1IYW5k bGVyKyAvLyvCoMKgwqAgZm9yIA0KPiAoU3ltSW5kZXggPSAwOyBTeW1JbmRleCA8IFN5bU51bTsg U3ltSW5kZXgrKykgeyvCoMKgwqDCoMKgIFVJTlQzMiAgIA0KPiBFeHBJbmRleDsrwqDCoMKgwqDC oCBTeW0gPSAoRWxmX1N5bSAqKShTeW10YWIgKyBTeW1JbmRleCAqDQo+IHNoZHItPnNoX2VudHNp emUpOyvCoMKgwqDCoMKgIFN5bU5hbWUgPSBHZXRTeW1OYW1lKFN5bSk7K8KgwqDCoMKgwqAgaWYg KFN5bU5hbWUgDQo+IHNoZHItPj09DQo+IE5VTEwpIHsrwqDCoMKgwqDCoMKgwqDCoMKgIGNvbnRp bnVlOyvCoMKgwqDCoMKgIH0rK8KgwqDCoMKgwqAgZm9yIChFeHBJbmRleCA9IDA7IEV4cEluZGV4 IA0KPiA8IChtRXhwb3J0U3ltTnVtIC0xKTsgRXhwSW5kZXgrKykgeyvCoMKgwqDCoMKgwqDCoCBp ZiAoc3RyY21wKChDSEFSOCopU3ltTmFtZSwNCj4gbUV4cG9ydFN5bU5hbWVbRXhwSW5kZXhdKSAh PSAwKSB7K8KgwqDCoMKgwqDCoMKgwqDCoCBjb250aW51ZTsrwqDCoMKgwqDCoMKgwqAgfSsgICAg ICAgIA0KPiBtRXhwb3J0UlZBW0V4cEluZGV4XSA9IChVSU5UMzIpKFN5bS0+c3RfdmFsdWUpOyvC oMKgwqDCoMKgwqDCoCBtRXhwb3J0U2l6ZSArPSANCj4gMg0KPiAqIEVGSV9JTUFHRV9FWFBPUlRf QUREUl9TSVpFICsgRUZJX0lNQUdFX0VYUE9SVF9PUkRJTkFMX1NJWkUgKw0KPiBzdHJsZW4oKENI QVI4ICopU3ltTmFtZSkgKyAxOyvCoMKgwqDCoMKgIH0rwqDCoMKgIH0rK8KgwqDCoCBicmVhazsr DQo+IH0rfSsrU1RBVElDK1ZPSUQrV3JpdGVFeHBvcnQ2NCAoK8KgIFZPSUQrwqAgKSt7KyANCj4g RUZJX0lNQUdFX09QVElPTkFMX0hFQURFUl9VTklPTsKgwqDCoMKgICpOdEhkcjsrIA0KPiBFRklf SU1BR0VfRVhQT1JUX0RJUkVDVE9SWcKgwqDCoMKgwqDCoMKgwqDCoCAqRXhwb3J0RGlyOysNCj4g RUZJX0lNQUdFX0RBVEFfRElSRUNUT1JZICpEYXRhRGlyOyvCoCBVSU5UMzIgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICANCj4gRmlsZU5hbWVPZmZzZXQ7K8KgIFVJTlQzMsKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgRnVuY09mZnNl dDsrDQo+IFVJTlQxNsKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoCDCoMKgSW5kZXg7Kw0KPiBVSU5UOMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCAqVGRhdGEgPSBOVUxMOysrwqAgRXhw b3J0RGlyID0gDQo+IChFRklfSU1BR0VfRVhQT1JUX0RJUkVDVE9SWSopKG1Db2ZmRmlsZSArIG1F eHBvcnRPZmZzZXQpOysNCj4gRXhwb3J0RGlyLT5DaGFyYWN0ZXJpc3RpY3MgPSAwOyvCoCBFeHBv cnREaXItPlRpbWVEYXRlU3RhbXAgPSAwOysgDQo+IEV4cG9ydERpci0+TWFqb3JWZXJzaW9uID0g MDsrwqAgRXhwb3J0RGlyLT5NaW5vclZlcnNpb24gPTA7KyBOYW1lID0gMDsrwqAgDQo+IEV4cG9y dERpci0+RXhwb3J0RGlyLT5OdW1iZXJPZkZ1bmN0aW9ucyA9IG1FeHBvcnRTeW1OdW07KyANCj4g RXhwb3J0RGlyLT5OdW1iZXJPZk5hbWVzID0gbUV4cG9ydFN5bU51bTsrIEV4cG9ydERpci0+QmFz ZSA9DQo+IEVGSV9JTUFHRV9FWFBPUlRfT1JESU5BTF9CQVNFOyvCoCBFeHBvcnREaXItPkFkZHJl c3NPZkZ1bmN0aW9ucyA9IA0KPiBtRXhwb3J0T2Zmc2V0ICsgc2l6ZW9mKEVGSV9JTUFHRV9FWFBP UlRfRElSRUNUT1JZKTsrDQo+IEV4cG9ydERpci0+QWRkcmVzc09mTmFtZXMgPSBFeHBvcnREaXIt PkFkZHJlc3NPZkZ1bmN0aW9ucyArDQo+IEVGSV9JTUFHRV9FWFBPUlRfQUREUl9TSVpFICogbUV4 cG9ydFN5bU51bTsrDQo+IEV4cG9ydERpci0+QWRkcmVzc09mTmFtZU9yZGluYWxzID0gRXhwb3J0 RGlyLT5BZGRyZXNzT2ZOYW1lcyArDQo+IEVGSV9JTUFHRV9FWFBPUlRfQUREUl9TSVpFICogbUV4 cG9ydFN5bU51bTsrK8KgIEZpbGVOYW1lT2Zmc2V0ID0NCj4gRXhwb3J0RGlyLT5BZGRyZXNzT2ZO YW1lT3JkaW5hbHMgKyBFRklfSU1BR0VfRVhQT1JUX09SRElOQUxfU0laRSAqDQo+IG1FeHBvcnRT eW1OdW07K8KgIEZ1bmNPZmZzZXQgPSBGaWxlTmFtZU9mZnNldCArIHN0cmxlbihtSW5JbWFnZU5h bWUpICsgDQo+IDE7KyvCoCAvLyBXcml0ZSBJbnB1dCBpbWFnZSBOYW1lIFJWQSvCoCBUZGF0YSA9 IG1Db2ZmRmlsZSArIDEyOyvCoCANCj4gKihVSU5UMzIgKilUZGF0YSA9IEZpbGVOYW1lT2Zmc2V0 OysrwqAgLy8gV3JpdGUgSW5wdXQgaW1hZ2UgTmFtZSvCoCANCj4gc3RyY3B5KChjaGFyICopKG1D b2ZmRmlsZSArIEZpbGVOYW1lT2Zmc2V0KSwgbUluSW1hZ2VOYW1lKTsrK8KgIGZvciANCj4gKElu ZGV4ID0gMDsgSW5kZXggPCBtRXhwb3J0U3ltTnVtOyBJbmRleCsrKSB7K8KgwqDCoCAvLyvCoMKg wqAgLy8gV3JpdGUgDQo+IEV4cG9ydCBBZGRyZXNzIFRhYmxlKyAvLyvCoMKgwqAgVGRhdGEgPSBt Q29mZkZpbGUgKyANCj4gRXhwb3J0RGlyLT5BZGRyZXNzT2ZGdW5jdGlvbnMgKyBJbmRleCAqIEVG SV9JTUFHRV9FWFBPUlRfQUREUl9TSVpFOyvCoMKgwqAgKihVSU5UMzIgKilUZGF0YSA9DQo+IG1F eHBvcnRSVkFbSW5kZXhdOysrwqDCoMKgIC8vK8KgwqDCoCAvLyBXcml0ZSBFeHBvcnQgTmFtZSBQ b2ludGVyIFRhYmxlKyAgICANCj4gLy8rwqDCoMKgIFRkYXRhID0gbUNvZmZGaWxlICsgRXhwb3J0 RGlyLT5BZGRyZXNzT2ZOYW1lcyArIEluZGV4ICogDQo+IEVGSV9JTUFHRV9FWFBPUlRfQUREUl9T SVpFOysgKihVSU5UMzIgKilUZGF0YSA9IEZ1bmNPZmZzZXQ7KyvCoMKgwqAgLy8rICAgIA0KPiAv LyBXcml0ZSBFeHBvcnQgT3JkaW5hbCB0YWJsZSvCoMKgwqAgLy8rwqDCoMKgIFRkYXRhID0gbUNv ZmZGaWxlICsNCj4gRXhwb3J0RGlyLT5BZGRyZXNzT2ZOYW1lT3JkaW5hbHMgKyBJbmRleCAqDQo+ IEVGSV9JTUFHRV9FWFBPUlRfT1JESU5BTF9TSVpFOyvCoMKgwqAgKihVSU5UMTYgKilUZGF0YSA9 IEluZGV4OysrwqDCoMKgIC8vKyAgICANCj4gLy8gV3JpdGUgRXhwb3J0IE5hbWUgVGFibGUrwqDC oMKgIC8vKyBzdHJjcHkoKGNoYXIgKikobUNvZmZGaWxlICsgDQo+IEZ1bmNPZmZzZXQpLCBtRXhw b3J0U3ltTmFtZVtJbmRleF0pOyvCoMKgwqAgRnVuY09mZnNldCArPQ0KPiBzdHJsZW4obUV4cG9y dFN5bU5hbWVbSW5kZXhdKSArIDE7K8KgIH0rK8KgIE50SGRyID0gDQo+IChFRklfSU1BR0VfT1BU SU9OQUxfSEVBREVSX1VOSU9OICopKG1Db2ZmRmlsZSArIG1OdEhkck9mZnNldCk7K8KgIA0KPiBE YXRhRGlyID0gDQo+ICZOdEhkci0+UGUzMlBsdXMuT3B0aW9uYWxIZWFkZXIuRGF0YURpcmVjdG9y eVtFRklfSU1BR0VfRElSRUNUT1JZX0VOVFINCj4gWV9FWFBPUlRdOysNCj4gRGF0YURpci0+Vmly dHVhbEFkZHJlc3MgPSBtRXhwb3J0T2Zmc2V0OysgwqBEYXRhRGlyLT5TaXplID0NCj4gbUV4cG9y dFNpemU7Kyt9IGRpZmYgLS1naXQgYS9CYXNlVG9vbHMvU291cmNlL0MvR2VuRncvRWxmQ29udmVy dC5jDQo+IGIvQmFzZVRvb2xzL1NvdXJjZS9DL0dlbkZ3L0VsZkNvbnZlcnQuYw0KPiANCj4gaW5k ZXggN2RiODcyMTE2Ny4uNzk1Y2RiZDc0MyAxMDA2NDQNCj4gDQo+IC0tLSBhL0Jhc2VUb29scy9T b3VyY2UvQy9HZW5Gdy9FbGZDb252ZXJ0LmMNCj4gDQo+ICsrKyBiL0Jhc2VUb29scy9Tb3VyY2Uv Qy9HZW5Gdy9FbGZDb252ZXJ0LmMNCj4gDQo+IEBAIC0yMjMsNiArMjIzLDE2IEBAIENvbnZlcnRF bGYgKA0KPiANCj4gIMKgwqAgVmVyYm9zZU1zZyAoIldyaXRlIGRlYnVnIGluZm8uIik7wqDCoCBF bGZGdW5jdGlvbnMuV3JpdGVEZWJ1ZyAoKTsgKyANCj4gLy8rwqAgLy8gRm9yIFBSTSBEcml2ZXIg dG8gV3JpdGUgZXhwb3J0IGluZm8uK8KgIC8vK8KgIGlmIChtRXhwb3J0RmxhZykgDQo+IHsrwqDC oMKgIFZlcmJvc2VNc2cgKCJTY2FuIHN5bWJvbCBpbmZvLiIpOyvCoMKgwqAgRWxmRnVuY3Rpb25z LlNjYW5TeW1ib2wgDQo+ICgpOyvCoMKgwqAgVmVyYm9zZU1zZyAoIldyaXRlIGV4cG9ydCBpbmZv LiIpOyvCoMKgwqAgDQo+IEVsZkZ1bmN0aW9ucy5Xcml0ZUV4cG9ydCAoKTsrwqAgfSvCoMKgIC8v wqDCoCAvLyBNYWtlIHN1cmUgaW1hZ2Ugc2l6ZSBpcyANCj4gY29ycmVjdCBiZWZvcmUgcmV0dXJu aW5nIHRoZSBuZXcgaW1hZ2UuwqDCoCAvL2RpZmYgLS1naXQgDQo+IGEvQmFzZVRvb2xzL1NvdXJj ZS9DL0dlbkZ3L0VsZkNvbnZlcnQuaA0KPiBiL0Jhc2VUb29scy9Tb3VyY2UvQy9HZW5Gdy9FbGZD b252ZXJ0LmgNCj4gDQo+IGluZGV4IDgwMWU4ZGU0YTIuLjc5MjA3NjVmYmIgMTAwNjQ0DQo+IA0K PiAtLS0gYS9CYXNlVG9vbHMvU291cmNlL0MvR2VuRncvRWxmQ29udmVydC5oDQo+IA0KPiArKysg Yi9CYXNlVG9vbHMvU291cmNlL0MvR2VuRncvRWxmQ29udmVydC5oDQo+IA0KPiBAQCAtMjQsNiAr MjQsNyBAQCBleHRlcm4gVUlOVDjCoCAqbUNvZmZGaWxlO8KgIGV4dGVybiBVSU5UMzIgDQo+IG1U YWJsZU9mZnNldDsgZXh0ZXJuIFVJTlQzMiBtT3V0SW1hZ2VUeXBlOyBleHRlcm4gVUlOVDMyIA0K PiBtRmlsZUJ1ZmZlclNpemU7K2V4dGVybiBCT09MRUFOIG1FeHBvcnRGbGFnOyDCoC8vIC8vIENv bW1vbiBFRkkgDQo+IHNwZWNpZmljIGRhdGEuQEAgLTMxLDYgKzMyLDQyIEBAIGV4dGVybiBVSU5U MzIgbUZpbGVCdWZmZXJTaXplOw0KPiANCj4gI2RlZmluZSBFTEZfSElJX1NFQ1RJT05fTkFNRSAi LmhpaSIgI2RlZmluZSBFTEZfU1RSVEFCX1NFQ1RJT05fTkFNRSANCj4gIi5zdHJ0YWIiICNkZWZp bmUgTUFYX0NPRkZfQUxJR05NRU5UIDB4MTAwMDArI2RlZmluZSANCj4gRUxGX1NZTUJPTF9TRUNU SU9OX05BTUUgIi5zeW10YWIiKysvLysvLyBQbGF0Zm9ybSBSdW50aW1lIE1lY2hhbmlzbQ0KPiAo UFJNKSBzcGVjaWZpYyBkYXRhLisvLysjZGVmaW5lIFBSTV9NT0RVTEVfRVhQT1JUX1NZTUJPTF9O VU0gDQo+IDEwKyNkZWZpbmUgUFJNX0hBTkRMRVJfTkFNRV9NQVhJTVVNX0xFTkdUSCAxMjgrKyNk ZWZpbmUNCj4gUFJNX01PRFVMRV9FWFBPUlRfREVTQ1JJUFRPUl9OQU1FICAgICAgICAgDQo+ICJQ cm1Nb2R1bGVFeHBvcnREZXNjcmlwdG9yIisjZGVmaW5lDQo+IFBSTV9NT0RVTEVfRVhQT1JUX0RF U0NSSVBUT1JfU0lHTkFUVVJFwqDCoMKgIFNJR05BVFVSRV82NCAoJ1AnLCAnUicsICdNJywgDQo+ ICdfJywgJ00nLCAnRScsICdEJywgJ1QnKSsjZGVmaW5lIFBSTV9NT0RVTEVfRVhQT1JUX1JFVklT SU9OIDB4MCsrLy8rLy8gDQo+IFBsYXRmb3JtIFJ1bnRpbWUgTWVjaGFuaXNtIChQUk0pIEV4cG9y dCBEZXNjcmlwdG9yIFN0cnVjdHVyZXMrLy8rI3ByYWdtYQ0KPiBwYWNrKHB1c2gsIDEpKyt0eXBl ZGVmIHN0cnVjdCB7K8KgIEVGSV9HVUlEICAgICAgICAgICAgICAgICAgICAgICAgICAgICANCj4g IMKgUHJtSGFuZGxlckd1aWQ7K8KgIENIQVI4ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgDQo+IFBybUhhbmRsZXJOYW1lW1BSTV9IQU5ETEVSX05BTUVfTUFYSU1VTV9MRU5HVEhdOyt9 DQo+IFBSTV9IQU5ETEVSX0VYUE9SVF9ERVNDUklQVE9SX1NUUlVDVDsrK3R5cGVkZWYgc3RydWN0 IHsrDQo+IFVJTlQ2NMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgIFNpZ25hdHVyZTsrDQo+IFVJTlQxNsKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIFJldmlzaW9uOysN Cj4gVUlOVDE2wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqAgTnVtYmVyUHJtSGFuZGxlcnM7K8KgIEVGSV9HVUlEIA0KPiBQbGF0Zm9y bUd1aWQ7K8KgIEVGSV9HVUlEwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoCBNb2R1bGVHdWlkOyt9IA0KPiBQUk1fTU9EVUxFX0VYUE9SVF9E RVNDUklQVE9SX1NUUlVDVF9IRUFERVI7Kyt0eXBlZGVmIHN0cnVjdCB7KyANCj4gUFJNX01PRFVM RV9FWFBPUlRfREVTQ1JJUFRPUl9TVFJVQ1RfSEVBREVSwqAgSGVhZGVyOysNCj4gUFJNX0hBTkRM RVJfRVhQT1JUX0RFU0NSSVBUT1JfU1RSVUNUICAgICAgICANCj4gUHJtSGFuZGxlckV4cG9ydERl c2NyaXB0b3JzWzFdOyt9DQo+IFBSTV9NT0RVTEVfRVhQT1JUX0RFU0NSSVBUT1JfU1RSVUNUOysr I3ByYWdtYSBwYWNrKHBvcCnCoCAvLyAvLyBGaWx0ZXIgDQo+IFR5cGVzQEAgLTM4LDcgKzc1LDgg QEAgZXh0ZXJuIFVJTlQzMiBtRmlsZUJ1ZmZlclNpemU7DQo+IA0KPiB0eXBlZGVmIGVudW0geyDC oMKgU0VDVElPTl9URVhULMKgwqAgU0VDVElPTl9ISUksLcKgIFNFQ1RJT05fREFUQSsgDQo+IFNF Q1RJT05fREFUQSwrwqAgU0VDVElPTl9TWU1CT0zCoCB9IFNFQ1RJT05fRklMVEVSX1RZUEVTOyBA QCAtNTAsNiArODgsOCANCj4gQEAgdHlwZWRlZiBzdHJ1Y3Qgew0KPiANCj4gIMKgwqAgQk9PTEVB TiAoKldyaXRlU2VjdGlvbnMpIChTRUNUSU9OX0ZJTFRFUl9UWVBFU8KgIEZpbHRlclR5cGUpOyAg IA0KPiBWT0lEwqDCoMKgICgqV3JpdGVSZWxvY2F0aW9ucykgKCk7wqDCoCBWT0lEwqDCoMKgICgq V3JpdGVEZWJ1ZykgKCk7K8KgIFZPSUQgICAgDQo+ICgqU2NhblN5bWJvbCkgKCk7K8KgIFZPSUTC oMKgwqAgKCpXcml0ZUV4cG9ydCkgKCk7wqDCoCBWT0lEwqDCoMKgIA0KPiAoKlNldEltYWdlU2l6 ZSkgKCk7wqDCoCBWT0lEwqDCoMKgICgqQ2xlYW5VcCkgKCk7IGRpZmYgLS1naXQgDQo+IGEvQmFz ZVRvb2xzL1NvdXJjZS9DL0dlbkZ3L0dlbkZ3LmMgYi9CYXNlVG9vbHMvU291cmNlL0MvR2VuRncv R2VuRncuYw0KPiANCj4gaW5kZXggOGNhYjcwYmE0ZC4uYzdkZTViODlkOCAxMDA2NDQNCj4gDQo+ IC0tLSBhL0Jhc2VUb29scy9Tb3VyY2UvQy9HZW5Gdy9HZW5Gdy5jDQo+IA0KPiArKysgYi9CYXNl VG9vbHMvU291cmNlL0MvR2VuRncvR2VuRncuYw0KPiANCj4gQEAgLTg3LDcgKzg3LDcgQEAgVUlO VDMyIG1JbWFnZVRpbWVTdGFtcCA9IDA7DQo+IA0KPiBVSU5UMzIgbUltYWdlU2l6ZSA9IDA7IFVJ TlQzMiBtT3V0SW1hZ2VUeXBlID0gRldfRFVNTVlfSU1BR0U7IEJPT0xFQU4gDQo+IG1Jc0NvbnZl cnRYaXAgPSBGQUxTRTstK0JPT0xFQU4gbUV4cG9ydEZsYWcgPSBGQUxTRTvCoCBTVEFUSUMgDQo+ IEVGSV9TVEFUVVNAQCAtMTQzNiw2ICsxNDM2LDE1IEBAIFJldHVybnM6DQo+IA0KPiAgwqDCoMKg wqDCoMKgIGNvbnRpbnVlO8KgwqDCoMKgIH0gK8KgwqDCoCBpZiAoc3RyaWNtcCAoYXJndlswXSwg Ii0tUFJNIikgPT0gMCkgDQo+IHsrwqDCoMKgwqDCoCBpZiAoIW1FeHBvcnRGbGFnKSB7K8KgwqDC oMKgwqDCoMKgIG1FeHBvcnRGbGFnID0gVFJVRTsrwqDCoMKgwqDCoCB9KyAgICAgIA0KPiBhcmdj IC0tOyvCoMKgwqDCoMKgIGFyZ3YgKys7K8KgwqDCoMKgwqAgY29udGludWU7K8KgwqDCoCB9K8Kg wqDCoMKgIGlmIChhcmd2WzBdWzBdID09IA0KPiAnLScpIHvCoMKgwqDCoMKgwqAgRXJyb3IgKE5V TEwsIDAsIDEwMDAsICJVbmtub3duIG9wdGlvbiIsIGFyZ3ZbMF0pOyAgICAgICANCj4gZ290byBG aW5pc2g7ZGlmZiAtLWdpdA0KPiBhL0Jhc2VUb29scy9Tb3VyY2UvQy9JbmNsdWRlL0luZHVzdHJ5 U3RhbmRhcmQvUGVJbWFnZS5oDQo+IGIvQmFzZVRvb2xzL1NvdXJjZS9DL0luY2x1ZGUvSW5kdXN0 cnlTdGFuZGFyZC9QZUltYWdlLmgNCj4gDQo+IGluZGV4IGYxN2I4ZWUxOWIuLjIxYzk2OGU2NTAg MTAwNjQ0DQo+IA0KPiAtLS0gYS9CYXNlVG9vbHMvU291cmNlL0MvSW5jbHVkZS9JbmR1c3RyeVN0 YW5kYXJkL1BlSW1hZ2UuaA0KPiANCj4gKysrIGIvQmFzZVRvb2xzL1NvdXJjZS9DL0luY2x1ZGUv SW5kdXN0cnlTdGFuZGFyZC9QZUltYWdlLmgNCj4gDQo+IEBAIC01NzEsNiArNTcxLDEzIEBAIHR5 cGVkZWYgc3RydWN0IHsNCj4gDQo+ICDCoMKgIFVJTlQzMsKgIEFkZHJlc3NPZk5hbWVPcmRpbmFs czsgfSBFRklfSU1BR0VfRVhQT1JUX0RJUkVDVE9SWTsgKy8vKy8vIA0KPiBCYXNlZCBleHBvcnQg dHlwZXMuKy8vKyNkZWZpbmUgRUZJX0lNQUdFX0VYUE9SVF9PUkRJTkFMX0JBU0UgICAgIA0KPiAx KyNkZWZpbmUgRUZJX0lNQUdFX0VYUE9SVF9BRERSX1NJWkXCoMKgwqDCoMKgwqDCoCA0KyNkZWZp bmUNCj4gRUZJX0lNQUdFX0VYUE9SVF9PUkRJTkFMX1NJWkXCoMKgwqDCoCAyKyAvLy8gLy8vIERM TCBzdXBwb3J0LiAvLy8gSW1wb3J0DQo+IEZvcm1hdC0tDQo+IA0KPiAyLjI2LjIud2luZG93cy4x DQo+IA0KPiANCg==