From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from mga11.intel.com (mga11.intel.com [192.55.52.93]) by mx.groups.io with SMTP id smtpd.web08.3371.1663818970430756068 for ; Wed, 21 Sep 2022 20:56:10 -0700 Authentication-Results: mx.groups.io; dkim=fail reason="unable to parse pub key" header.i=@intel.com header.s=intel header.b=Jknu2NDT; spf=pass (domain: intel.com, ip: 192.55.52.93, mailfrom: michael.d.kinney@intel.com) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=intel.com; i=@intel.com; q=dns/txt; s=Intel; t=1663818970; x=1695354970; h=from:to:cc:subject:date:message-id:references: in-reply-to:content-transfer-encoding:mime-version; bh=hurhi9o9iRDJ4ghYrGZXzCkHc0fQ92FzecLAICgxy/U=; b=Jknu2NDTEW3sv9KLTRmksuLb/1jyFSz063876sBBhcY6oanWVzfXO2Wa vYk9oNiCxBuNpp2aLNJwDkdIlBQ40OpNJJ6y/dFM2AIdAPMmfXOSKhQqV rEBYYDRSCyZal5WVsBqgp7eYIoeRTLygmgrW4FXr4p2KZ10ZTeWC2r3bG xZ9R4L+C75atl6OMKTo0mCOrC0h6qD5sJkNC5F2ISIrdGf1CIH7y7uHqi 1whF0Rv749kiYFiJdjOSqgr+y5jLnW6VqGi+6s2W3xJ5HamTpU3wXlbIL o3PP6Vj3R/gAxXLG8F1U9YJGonizrT+dn7nfUUFvuZOX4KPmEg49FQdD3 w==; X-IronPort-AV: E=McAfee;i="6500,9779,10477"; a="297790742" X-IronPort-AV: E=Sophos;i="5.93,335,1654585200"; d="scan'208";a="297790742" Received: from fmsmga003.fm.intel.com ([10.253.24.29]) by fmsmga102.fm.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 21 Sep 2022 20:56:09 -0700 X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="5.93,335,1654585200"; d="scan'208";a="708714862" Received: from orsmsx602.amr.corp.intel.com ([10.22.229.15]) by FMSMGA003.fm.intel.com with ESMTP; 21 Sep 2022 20:56:09 -0700 Received: from orsmsx610.amr.corp.intel.com (10.22.229.23) by ORSMSX602.amr.corp.intel.com (10.22.229.15) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.2375.31; Wed, 21 Sep 2022 20:56:10 -0700 Received: from orsmsx612.amr.corp.intel.com (10.22.229.25) by ORSMSX610.amr.corp.intel.com (10.22.229.23) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.2375.31; Wed, 21 Sep 2022 20:56:09 -0700 Received: from orsedg603.ED.cps.intel.com (10.7.248.4) by orsmsx612.amr.corp.intel.com (10.22.229.25) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.2375.31 via Frontend Transport; Wed, 21 Sep 2022 20:56:09 -0700 Received: from NAM10-MW2-obe.outbound.protection.outlook.com (104.47.55.109) by edgegateway.intel.com (134.134.137.100) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.1.2375.31; Wed, 21 Sep 2022 20:56:08 -0700 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=I9eWJsOkvKgm/NZ6F0hQFCSIgD9SPARbLCgW1d8wARU4dR1Szh8NJqs0yez6suDj1xB5BbFRP6tPNatSI6lNFDt41YV17UoqSlqFB3q4nTLqImVipRRgqlGUsW00u+yrcXt+SzJytadhABChhb6x84p4GJTDwxPfnHZMyInvBY2zj292iJ2cswNu0oq2j2d/T5TxZGh5RXjgsFNH5/77zvi+uGt4L9mLEBOUds0fF/9TwXLtEq+AhGBQc9QIvGQhZFkwW48XDol2adL40S6LzoP0esPwwANK12hXpxNZBRooph9I7QiffkzVvVWMEgjJUG8nip4b6+GmMIvGlNh2bQ== 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=hurhi9o9iRDJ4ghYrGZXzCkHc0fQ92FzecLAICgxy/U=; b=hvnceOnEJDEUISmyz7//Pt3C9noN088sgmj5yI9uR8qLRpLbRbBonD5EVJTSQNGLkH4/f6/cW0V4V6CU1K/vdt/bZ80eVx1eSPMvUjqGbp4p+aU9AenGq+3dj3Va+44tmHw2xQd+1lN9lrtsvVau+d9RsCrPnTDK+h3tREshYrneDs5GRfEwiBLQdST9g03vNYF2oYr5+98chKKXYfxbNgn8DVCW/oKDsuRlhTx/cUnJmIdFTj352ThLCfEoSTg9TRkFDNe9f2ZfzGkh2yEE8zzJdRF8Gdem0rVDA48hyyaPjDt85MEbpMsuuiY6mBE54Z2gyp/1RKfszEd76A5bVA== 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 Received: from CO1PR11MB4929.namprd11.prod.outlook.com (2603:10b6:303:6d::19) by PH0PR11MB5657.namprd11.prod.outlook.com (2603:10b6:510:ee::19) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.5654.18; Thu, 22 Sep 2022 03:56:05 +0000 Received: from CO1PR11MB4929.namprd11.prod.outlook.com ([fe80::ce64:b1b4:e087:4cc2]) by CO1PR11MB4929.namprd11.prod.outlook.com ([fe80::ce64:b1b4:e087:4cc2%7]) with mapi id 15.20.5654.018; Thu, 22 Sep 2022 03:56:05 +0000 From: "Michael D Kinney" To: "Li, Yi1" , "devel@edk2.groups.io" , "Kishore, Shelly" CC: "Yao, Jiewen" , "Wang, Jian J" , "Lu, Xiaoyu1" , "Jiang, Guomin" Subject: Re: [edk2-devel] [PATCH V2 1/3] CryptoPkg: Add EC support Thread-Topic: [edk2-devel] [PATCH V2 1/3] CryptoPkg: Add EC support Thread-Index: AQHYzXZUSlj4dA4GnU+byMn1X74/Xa3qEDxAgACnSgCAABuVUA== Date: Thu, 22 Sep 2022 03:56:05 +0000 Message-ID: References: <9dcccc674996fa3fdcb8858e3609437e66ce82ac.1663735439.git.yi1.li@intel.com> In-Reply-To: Accept-Language: en-US X-MS-Has-Attach: X-MS-TNEF-Correlator: dlp-product: dlpe-windows dlp-reaction: no-action dlp-version: 11.6.500.17 authentication-results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=intel.com; x-ms-publictraffictype: Email x-ms-traffictypediagnostic: CO1PR11MB4929:EE_|PH0PR11MB5657:EE_ x-ms-office365-filtering-correlation-id: 492b2ce7-c68b-40d7-2568-08da9c4e5fea x-ms-exchange-senderadcheck: 1 x-ms-exchange-antispam-relay: 0 x-microsoft-antispam: BCL:0; x-microsoft-antispam-message-info: c873NKXK0/OKQ1nRVEVrgjiw/LFGAhQnikRYgWFvG1cDEg0gGx4sHDJR3lu9gBZW6fYIvn7ZjHN9CdBWiExlFubxoLbBWww3mM7rNqS9TaYWwqNrE2CljRgSJnzvkKjkftriWINP7Bln6JQPPyVZYd84IXZGqEakh+8Ke+Rlqw//mR5sMDKTKVSVNmwzybmBEi93MWuQ71lH/P3jNMBcIP/9LBfO07U9sGzoG78FPNsORQ5JdN5cfNOA89+3mm1Y2vIAVBZxHi5IUA/PRDdAAmq/l+uJIMpvujPAvqHB4Y4swSo+DO4nEO3iuL1sOiT5WUtvUSsKficD7IacrmHiGV6QkwCrlpBYbn9fJVvxVPDze3SnAF8zxzzMnwXn4Jg7vLi1XOv21m23giYrfCbdzCxFmDaVwVjmA8mWBuPWnXNEm5RH6sjAAe9aK46dYvydieuNgQr1fkFyS4PoIcz7GFICDDR1USFzlcuDha3K2aiXzgymnC4gOX6DVbiQHUpY8SXyhwmyupquuHiVRP7pKEJ2Fq7rvfi+8A59LmatG2qLQvBHAfylNIBsf9aYPv+4T6IpddEGKgNUz0TgGOmsE8xkQsOrQOCNm44Wf3dBnaRgrhxrV3UBXE+smB2Jnwz9X4WcH+kO38KV/8PkAECaDW8AtAei3r93Jy6yfm+LIm+v6EKeMXC2hWgmVI0m0iHbi2P5JCg9CYCGxu2YqxE2TRQeu5Ue5KQNjk+ECKnGW2yyeALXVAepG/T9foh/50ytq7ByZNo0avPyLQKSTqf1GjeNJNikQZJLWsHIr5KRO5TpAxCYzSaQYHcqbGV2ecaME92faKm1CGobUx29+ylWXg== x-forefront-antispam-report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:CO1PR11MB4929.namprd11.prod.outlook.com;PTR:;CAT:NONE;SFS:(13230022)(376002)(39860400002)(396003)(136003)(346002)(366004)(451199015)(2906002)(5660300002)(30864003)(6636002)(33656002)(19627235002)(8936002)(316002)(8676002)(54906003)(110136005)(71200400001)(966005)(107886003)(4326008)(64756008)(66446008)(66476007)(66556008)(66946007)(76116006)(52536014)(41300700001)(478600001)(26005)(9686003)(53546011)(7696005)(6506007)(83380400001)(38070700005)(86362001)(186003)(82960400001)(122000001)(55016003)(38100700002)(579004)(559001);DIR:OUT;SFP:1102; x-ms-exchange-antispam-messagedata-chunkcount: 1 x-ms-exchange-antispam-messagedata-0: =?utf-8?B?N2t6N1VjWkx2VndYRVZoUFEzMFh0UXQvSDdlVk01NGozRVNQUVVkaFQwSkkx?= =?utf-8?B?UVZPSWgyUGdhZXlaYk5sVFVYWkhoa3pKT1c4dUIwWVg2NlRuTzBzUnRBS0s5?= =?utf-8?B?V3hUK2NrNHJqa1U4akk5elJkWFdrSzc4VzgrQ0k3a2ZoOU81TXFpZ2JDalha?= =?utf-8?B?RitkTVJXUmc5ZEEwNTJNRENFVkZkNGdEell3N1djaWpxa0ZnZEIzeDBibkVN?= =?utf-8?B?S0YyYy9Dc3h2cmtoNjM2QUhES3Z6d3hUNzlkUGwwa2NEenAxSE1KVkNXdVJ0?= =?utf-8?B?QmdZL002ekFPUXkrTkFGYkJUWXFtSzg3Q25QNGZQa01MbnZOa2oyT0ZDcnpS?= =?utf-8?B?WXYybU5HcE1UMWlWNEd5cWZUOGNrZmhudDEwSUZyRmkzSHlqNGFreVVSVHdw?= =?utf-8?B?S1k5dE00TmYrUmFxaS9MVWZETFlJSVJoUFZublVpQjF2NFllei9HOGN6Q1ds?= =?utf-8?B?U2xqQmRMUVU5QnFzZ3Bpa0tzWGx1MEx4RTFDSkJFMSsySDBBNDU3bW9FZW8z?= =?utf-8?B?d0VVam1QRUl5R3A2R2pVV0dCSVREMXNCVm44d0dCVVQwdllMQ09JSk5MZFpO?= =?utf-8?B?RXk0azJVOUhIUWc1K00waGdFK2xoMVR2KzcvYXRzRVp6K3VzY0tUQm9UL1Ji?= =?utf-8?B?NHAyakNLOHR0WjZoVktoRllmSk9sVnBENTlCQVdqSUFyT09hU2hCalFSeUhB?= =?utf-8?B?cWg0TitFRC9ERkR0QThoZVlzOUVjd3hKRGI0a3NDVXJxYlhHZlluY0RpNFhE?= =?utf-8?B?bEd0MXVsQnc0UCtGVGVFTWt3WGdjNXkvSHE1QjZsMjM5cmREdFZVNGhETEhs?= =?utf-8?B?R3EzNDIxTGZkQXZJNitHVjZldmZzdmlhMnVlWHIrMVBKdGdjVG9lY2x6V01S?= =?utf-8?B?T1hvNm9LRWVEUGl2NFRqbXlZbXgyaS9PdjBwWm1YU1pOdE5GUGFvbE9DVnEx?= =?utf-8?B?UndpazVwT3ZvNjl6TENaWGpZd0k4ajhvY1IveXJjU0c4d0UrR3E3ZXJkdTVK?= =?utf-8?B?aCtVdm11S3N2L0dFRm5BSGRmZ3FOb2k4RFJJUmVBRVBRYWlxcVpqa3NEUElo?= =?utf-8?B?Rlh1UmVRRzVFTzFXclZsV2VEY3kralNCTFpkVTJ0UWQrWjErRnFZV09DeWdG?= =?utf-8?B?MHlZaVlva0tSdkJLMEc4end1WjZGZHh2M3hxem1CcHllU3Fmb2xOOG5LZ1d3?= =?utf-8?B?SXBDNG1LQkNjL2dVYzVnYkJ4ZkdVWTdtUERkQnFLQmRidjhOdW5OMVZiMSs4?= =?utf-8?B?d2ZQVXBZMWdmSlNhZWR0Mm44YURVT2dSMURSRlFGcUtXRC85R1NiWTdRN1JF?= =?utf-8?B?bklxbTdJc3hzcEZ2bU9oRXNoVzJ1R3paWWZrZGdsSnhSM3RDK3pxWXFLK1NH?= =?utf-8?B?NFkwdld6Qm0wMGJmcXV0YTNWK1Y4cVdRZXdpZm9FaXdTenNueFRUV1BWUFFj?= =?utf-8?B?bVVGeG9DelErVWJ6anBRczZkOTFySGk0QlZldXQvOGxjT2ZqdmIxTDMxcm1k?= =?utf-8?B?dGpCb0FhTjdMdzNSbW1VQUJob1hPcmhPdXYrTElmZVNWbDI5UEFxQmcyUmdR?= =?utf-8?B?Um5lRzFGTTZQb20xeFFTcnB3emxXclR2R0xkNWZreXdYZDdOVkZHRUM5MXox?= =?utf-8?B?dHJmRXpRajl4ZkNZMUs2dE9JU3dMRW5WS2tOT090NjRqQUVrVGpzejNtK1Ew?= =?utf-8?B?RmtLeEtDQjN5Wm1FeTNkQ1BTNVE1TFgwLzJWL1VpUmJsNEFUOVcyQm9jTmpV?= =?utf-8?B?a1NGeVcvZHRzdGV0Q0JXYlcvSG9laHh1YStXeitMWGZ5REpNeU9NSXkycUtD?= =?utf-8?B?YVlDLzBCb21YRm4rZmY2R3l2eFZZRkFURTV5MGZMZWc3M1plYTlLN1BwVnZU?= =?utf-8?B?b2g5TkZZT1p4WlpPelJ5NXNTcFdKV2RINktRWGU4bUdNNkNNVmVXb2wzbG56?= =?utf-8?B?aG03Zy9McThvSU1YSTEyMmpON1lFZ1BvVDd2a1ZUbnQxZXZRWXV0M2NmM1F6?= =?utf-8?B?SWVNVm5Nbld0aHUwR0RSeGN3cFV6Yy9ibzdsdlBYL3FPRUxVVzFNa2xzc1VL?= =?utf-8?B?NWJpMEVtTDBRQ2Y2am9NY2RUZmhaNXZFVng1WExHSjdDMk9wOG1lWSt4cmpp?= =?utf-8?B?d0owaEtIWC85RlhsQWE5OUZIRDArS1dZWkdUZUs4NVJqUS8yNEE0Tm8rQ3Iy?= =?utf-8?B?WGc9PQ==?= MIME-Version: 1.0 X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-AuthSource: CO1PR11MB4929.namprd11.prod.outlook.com X-MS-Exchange-CrossTenant-Network-Message-Id: 492b2ce7-c68b-40d7-2568-08da9c4e5fea X-MS-Exchange-CrossTenant-originalarrivaltime: 22 Sep 2022 03:56:05.6284 (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: iTgiyel3aiVCR4AYYlCeGAWc+wtAOpslKAWHuR0zSuw9gygwwpUv+RsZRaJ98LxGZxq+0Kj+oHlrWyJMaaZdv5b5Ms9Bv6iHOzO7hAV4tmg= X-MS-Exchange-Transport-CrossTenantHeadersStamped: PH0PR11MB5657 Return-Path: michael.d.kinney@intel.com X-OriginatorOrg: intel.com Content-Language: en-US Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 VGhhdCBjaGFuZ2UgdG8gT3BlbnNzbExpYi5pbmYgc2hvdWxkIG5vdCBoYXZlIGJlZW4gZG9uZSBl aXRoZXIuDQoNCkxvb2tzIGxpa2UgdGhpcyBFQyBmZWF0dXJlIG5lZWRzIG1vcmUgZXZhbHVhdGlv biB0byBmaXQgaW50byB0aGUNCnN0cnVjdHVyZWQgUENEIGNvbnRyb2wgb2YgdGhlIGxpYiBzaXpl cy4NCg0KTWlrZQ0KDQo+IC0tLS0tT3JpZ2luYWwgTWVzc2FnZS0tLS0tDQo+IEZyb206IExpLCBZ aTEgPHlpMS5saUBpbnRlbC5jb20+DQo+IFNlbnQ6IFdlZG5lc2RheSwgU2VwdGVtYmVyIDIxLCAy MDIyIDc6MTYgUE0NCj4gVG86IEtpbm5leSwgTWljaGFlbCBEIDxtaWNoYWVsLmQua2lubmV5QGlu dGVsLmNvbT47IGRldmVsQGVkazIuZ3JvdXBzLmlvDQo+IENjOiBZYW8sIEppZXdlbiA8amlld2Vu Lnlhb0BpbnRlbC5jb20+OyBXYW5nLCBKaWFuIEogPGppYW4uai53YW5nQGludGVsLmNvbT47IEx1 LCBYaWFveXUxIDx4aWFveXUxLmx1QGludGVsLmNvbT47IEppYW5nLA0KPiBHdW9taW4gPGd1b21p bi5qaWFuZ0BpbnRlbC5jb20+DQo+IFN1YmplY3Q6IFJFOiBbZWRrMi1kZXZlbF0gW1BBVENIIFYy IDEvM10gQ3J5cHRvUGtnOiBBZGQgRUMgc3VwcG9ydA0KPiANCj4gSGkgTWlrZSwNCj4gVGhhbmtz IGZvciByZXZpZXcuDQo+IA0KPiBFdmVuIFBDRF9DUllQVE9fU0VSVklDRV9GQU1JTFlfRU5BQkxF IGlzIHNldCB0byAwLCBDcnlwdG9FYy5jIHdpbGwgYWxzbyBiZSBjb21waWxlZCBhbmQgdGhyb3cg YnVpbGQgZXJyb3I6DQo+IA0KPiBkOlx3b3Jrc3BhY2VcdGlhbm9jb3JlXGVkazJcQ3J5cHRvUGtn XExpYnJhcnlcQmFzZUNyeXB0TGliXFBrXENyeXB0RWMuYyg3Nyk6IGVycm9yIEMyMjIwOiB0aGUg Zm9sbG93aW5nIHdhcm5pbmcgaXMgdHJlYXRlZCBhcw0KPiBhbiBlcnJvcg0KPiAgICAgICAgIDEg ZmlsZShzKSBjb3BpZWQuDQo+IGQ6XHdvcmtzcGFjZVx0aWFub2NvcmVcZWRrMlxDcnlwdG9Qa2dc TGlicmFyeVxCYXNlQ3J5cHRMaWJcUGtcQ3J5cHRFYy5jKDc3KTogd2FybmluZyBDNDAxMzogJ0VD X0dST1VQX25ld19ieV9jdXJ2ZV9uYW1lJw0KPiB1bmRlZmluZWQ7IGFzc3VtaW5nIGV4dGVybiBy ZXR1cm5pbmcgaW50DQo+IGQ6XHdvcmtzcGFjZVx0aWFub2NvcmVcZWRrMlxDcnlwdG9Qa2dcTGli cmFyeVxCYXNlQ3J5cHRMaWJcUGtcQ3J5cHRFYy5jKDc3KTogd2FybmluZyBDNDA0NzogJ3JldHVy bic6ICd2b2lkIConIGRpZmZlcnMgaW4NCj4gbGV2ZWxzIG9mIGluZGlyZWN0aW9uIGZyb20gJ2lu dCcNCj4gZDpcd29ya3NwYWNlXHRpYW5vY29yZVxlZGsyXENyeXB0b1BrZ1xMaWJyYXJ5XEJhc2VD cnlwdExpYlxQa1xDcnlwdEVjLmMoMTA1KTogd2FybmluZyBDNDAxMzogJ0VDX0dST1VQX2dldF9j dXJ2ZScgdW5kZWZpbmVkOw0KPiBhc3N1bWluZyBleHRlcm4gcmV0dXJuaW5nIGludA0KPiANCj4g SSB0aGluayB0aGUgcm9vdCBjYXVzZSBpcyB0aGF0IHdlIGhhdmUgZW5hYmxlZCBjb25kaXRpb25h bCBlYyBpbiBPcGVuc3NsTGliLmluZiBiZWZvcmUgYnkgUGNkT3BlbnNzbEVjRW5hYmxlZCwNCj4g aHR0cHM6Ly9naXRodWIuY29tL3RpYW5vY29yZS9lZGsyL2Jsb2IvMmMxN2Q2NzZlNDAyZDc1YTNh Njc0NDk5MzQyZjdkZGFjY2YzODdiZC9DcnlwdG9Qa2cvTGlicmFyeS9PcGVuc3NsTGliL09wZW5z c2xMaWIuaW5mI0wyDQo+IDAyLUwyMzgNCj4gIGlmIFBjZE9wZW5zc2xFY0VuYWJsZWQgbm90IHRy dWUsIGFsbCBlYyBmaWxlcyB3aWxsIG5vdCBiZSBjb21waWxlZC4NCj4gVGhpcyB3aWxsIHNhdmUg MjAwK2tiIG1lbW9yeSBvbiBwbGF0Zm9ybXMgd2hpY2ggdXNlIGR4ZSBkcml2ZXIgYnV0IGRvIG5v dCBuZWVkIGVjIGZlYXR1cmUuDQo+IA0KPiBTbyBJIGFkZCB0aGlzIFBDRCB0byBCYXNlQ3J5cHRM aWIuaW5mIGFsc28gdG8gYXZvaWQgYnVpbGQgZXJyb3IsIE5vdCBzdXJlIGlmIHRoZXJlIGlzIGFu eSBvdGhlciB3YXksIG90aGVyIGJldHRlciBpZGVhcyBhcmUNCj4gd2VsY29tZS4NCj4gDQo+IFRo YW5rcywNCj4gWWkNCj4gDQo+IC0tLS0tT3JpZ2luYWwgTWVzc2FnZS0tLS0tDQo+IEZyb206IEtp bm5leSwgTWljaGFlbCBEIDxtaWNoYWVsLmQua2lubmV5QGludGVsLmNvbT4NCj4gU2VudDogVGh1 cnNkYXksIFNlcHRlbWJlciAyMiwgMjAyMiAxMjoyMiBBTQ0KPiBUbzogZGV2ZWxAZWRrMi5ncm91 cHMuaW87IExpLCBZaTEgPHlpMS5saUBpbnRlbC5jb20+OyBLaW5uZXksIE1pY2hhZWwgRCA8bWlj aGFlbC5kLmtpbm5leUBpbnRlbC5jb20+DQo+IENjOiBZYW8sIEppZXdlbiA8amlld2VuLnlhb0Bp bnRlbC5jb20+OyBXYW5nLCBKaWFuIEogPGppYW4uai53YW5nQGludGVsLmNvbT47IEx1LCBYaWFv eXUxIDx4aWFveXUxLmx1QGludGVsLmNvbT47IEppYW5nLA0KPiBHdW9taW4gPGd1b21pbi5qaWFu Z0BpbnRlbC5jb20+DQo+IFN1YmplY3Q6IFJFOiBbZWRrMi1kZXZlbF0gW1BBVENIIFYyIDEvM10g Q3J5cHRvUGtnOiBBZGQgRUMgc3VwcG9ydA0KPiANCj4gQ29tbWVudHMgZW1iZWRkZWQgYmVsb3cu DQo+IA0KPiBNaWtlDQo+IA0KPiA+IC0tLS0tT3JpZ2luYWwgTWVzc2FnZS0tLS0tDQo+ID4gRnJv bTogZGV2ZWxAZWRrMi5ncm91cHMuaW8gPGRldmVsQGVkazIuZ3JvdXBzLmlvPiBPbiBCZWhhbGYg T2YgeWkxIGxpDQo+ID4gU2VudDogVHVlc2RheSwgU2VwdGVtYmVyIDIwLCAyMDIyIDk6NTUgUE0N Cj4gPiBUbzogZGV2ZWxAZWRrMi5ncm91cHMuaW8NCj4gPiBDYzogTGksIFlpMSA8eWkxLmxpQGlu dGVsLmNvbT47IFlhbywgSmlld2VuIDxqaWV3ZW4ueWFvQGludGVsLmNvbT47IFdhbmcsIEppYW4g SiA8amlhbi5qLndhbmdAaW50ZWwuY29tPjsgTHUsIFhpYW95dTENCj4gPiA8eGlhb3l1MS5sdUBp bnRlbC5jb20+OyBKaWFuZywgR3VvbWluIDxndW9taW4uamlhbmdAaW50ZWwuY29tPg0KPiA+IFN1 YmplY3Q6IFtlZGsyLWRldmVsXSBbUEFUQ0ggVjIgMS8zXSBDcnlwdG9Qa2c6IEFkZCBFQyBzdXBw b3J0DQo+ID4NCj4gPiBSRUY6IGh0dHBzOi8vYnVnemlsbGEudGlhbm9jb3JlLm9yZy9zaG93X2J1 Zy5jZ2k/aWQ9MzgyOA0KPiA+DQo+ID4gVGhpcyBwYXRjaCBpcyB1c2VkIHRvIGFkZCBDcnlwdEVj IGxpYnJhcnksIHdoaWNoIGlzIHdyYXBwZWQNCj4gPiBvdmVyIE9wZW5TU0wuDQo+ID4NCj4gPiBD YzogSmlld2VuIFlhbyA8amlld2VuLnlhb0BpbnRlbC5jb20+DQo+ID4gQ2M6IEppYW4gSiBXYW5n IDxqaWFuLmoud2FuZ0BpbnRlbC5jb20+DQo+ID4gQ2M6IFhpYW95dSBMdSA8eGlhb3l1MS5sdUBp bnRlbC5jb20+DQo+ID4gQ2M6IEd1b21pbiBKaWFuZyA8Z3VvbWluLmppYW5nQGludGVsLmNvbT4N Cj4gPg0KPiA+IFNpZ25lZC1vZmYtYnk6IFlpIExpIDx5aTEubGlAaW50ZWwuY29tPg0KPiA+IC0t LQ0KPiA+ICBDcnlwdG9Qa2cvSW5jbHVkZS9MaWJyYXJ5L0Jhc2VDcnlwdExpYi5oICAgICAgfCA0 MjQgKysrKysrKysrKw0KPiA+ICAuLi4vTGlicmFyeS9CYXNlQ3J5cHRMaWIvQmFzZUNyeXB0TGli LmluZiAgICAgfCAgIDIgKw0KPiA+ICAuLi4vTGlicmFyeS9CYXNlQ3J5cHRMaWIvUGVpQ3J5cHRM aWIuaW5mICAgICAgfCAgIDEgKw0KPiA+ICBDcnlwdG9Qa2cvTGlicmFyeS9CYXNlQ3J5cHRMaWIv UGsvQ3J5cHRFYy5jICAgfCA3NjUgKysrKysrKysrKysrKysrKysrDQo+ID4gIC4uLi9MaWJyYXJ5 L0Jhc2VDcnlwdExpYi9Qay9DcnlwdEVjTnVsbC5jICAgICB8IDQ5NiArKysrKysrKysrKysNCj4g PiAgLi4uL0xpYnJhcnkvQmFzZUNyeXB0TGliL1NtbUNyeXB0TGliLmluZiAgICAgIHwgICAxICsN Cj4gPiAgLi4uL0Jhc2VDcnlwdExpYk51bGwvQmFzZUNyeXB0TGliTnVsbC5pbmYgICAgIHwgICAx ICsNCj4gPiAgLi4uL0xpYnJhcnkvQmFzZUNyeXB0TGliTnVsbC9Qay9DcnlwdEVjTnVsbC5jIHwg NDk2ICsrKysrKysrKysrKw0KPiA+ICA4IGZpbGVzIGNoYW5nZWQsIDIxODYgaW5zZXJ0aW9ucygr KQ0KPiA+ICBjcmVhdGUgbW9kZSAxMDA2NDQgQ3J5cHRvUGtnL0xpYnJhcnkvQmFzZUNyeXB0TGli L1BrL0NyeXB0RWMuYw0KPiA+ICBjcmVhdGUgbW9kZSAxMDA2NDQgQ3J5cHRvUGtnL0xpYnJhcnkv QmFzZUNyeXB0TGliL1BrL0NyeXB0RWNOdWxsLmMNCj4gPiAgY3JlYXRlIG1vZGUgMTAwNjQ0IENy eXB0b1BrZy9MaWJyYXJ5L0Jhc2VDcnlwdExpYk51bGwvUGsvQ3J5cHRFY051bGwuYw0KPiA+DQo+ ID4gZGlmZiAtLWdpdCBhL0NyeXB0b1BrZy9JbmNsdWRlL0xpYnJhcnkvQmFzZUNyeXB0TGliLmgg Yi9DcnlwdG9Qa2cvSW5jbHVkZS9MaWJyYXJ5L0Jhc2VDcnlwdExpYi5oDQo+ID4gaW5kZXggYjI1 MzkyM2RkOC4uZDc0ZmMyMWMxZSAxMDA2NDQNCj4gPiAtLS0gYS9DcnlwdG9Qa2cvSW5jbHVkZS9M aWJyYXJ5L0Jhc2VDcnlwdExpYi5oDQo+ID4gKysrIGIvQ3J5cHRvUGtnL0luY2x1ZGUvTGlicmFy eS9CYXNlQ3J5cHRMaWIuaA0KPiA+IEBAIC0xNCw2ICsxNCwxMyBAQCBTUERYLUxpY2Vuc2UtSWRl bnRpZmllcjogQlNELTItQ2xhdXNlLVBhdGVudA0KPiA+DQo+ID4gICNpbmNsdWRlIDxVZWZpL1Vl ZmlCYXNlVHlwZS5oPg0KPiA+DQo+ID4gKyNkZWZpbmUgQ1JZUFRPX05JRF9OVUxMICAweDAwMDAN Cj4gPiArDQo+ID4gKy8vIEtleSBFeGNoYW5nZQ0KPiA+ICsjZGVmaW5lIENSWVBUT19OSURfU0VD UDI1NlIxICAweDAyMDQNCj4gPiArI2RlZmluZSBDUllQVE9fTklEX1NFQ1AzODRSMSAgMHgwMjA1 DQo+ID4gKyNkZWZpbmUgQ1JZUFRPX05JRF9TRUNQNTIxUjEgIDB4MDIwNg0KPiA+ICsNCj4gPiAg Ly8vDQo+ID4gIC8vLyBNRDUgZGlnZXN0IHNpemUgaW4gYnl0ZXMNCj4gPiAgLy8vDQo+ID4gQEAg LTI4NTAsNCArMjg1Nyw0MjEgQEAgQmlnTnVtQWRkTW9kICgNCj4gPiAgICBPVVQgVk9JRCAgICAg ICAqQm5SZXMNCj4gPiAgICApOw0KPiA+DQo+ID4gKy8vID09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT0NCj4gPiArLy8gICAgQmFzaWMgRWxsaXB0aWMgQ3VydmUgUHJpbWl0aXZlcw0KPiA+ICsv LyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09DQo+ID4gKw0KPiA+ICsvKioNCj4gPiArICBJ bml0aWFsaXplIG5ldyBvcGFxdWUgRWNHcm91cCBvYmplY3QuIFRoaXMgb2JqZWN0IHJlcHJlc2Vu dHMgYW4gRUMgY3VydmUgYW5kDQo+ID4gKyAgYW5kIGlzIHVzZWQgZm9yIGNhbGN1bGF0aW9uIHdp dGhpbiB0aGlzIGdyb3VwLiBUaGlzIG9iamVjdCBzaG91bGQgYmUgZnJlZWQNCj4gPiArICB1c2lu ZyBFY0dyb3VwRnJlZSgpIGZ1bmN0aW9uLg0KPiA+ICsNCj4gPiArICBAcGFyYW1baW5dICBDcnlw dG9OaWQgICBJZGVudGlmeWluZyBudW1iZXIgZm9yIHRoZSBFQ0MgY3VydmUgKERlZmluZWQgaW4N Cj4gPiArICAgICAgICAgICAgICAgICAgICAgICAgICBCYXNlQ3J5cHRMaWIuaCkuDQo+ID4gKw0K PiA+ICsgIEByZXR2YWwgRWNHcm91cCBvYmplY3QgIE9uIHN1Y2Nlc3MuDQo+ID4gKyAgQHJldHZh bCBOVUxMICAgICAgICAgICAgT24gZmFpbHVyZS4NCj4gPiArKiovDQo+ID4gK1ZPSUQgKg0KPiA+ ICtFRklBUEkNCj4gPiArRWNHcm91cEluaXQgKA0KPiA+ICsgIElOIFVJTlROICBDcnlwdG9OaWQN Cj4gPiArICApOw0KPiA+ICsNCj4gPiArLyoqDQo+ID4gKyAgR2V0IEVDIGN1cnZlIHBhcmFtZXRl cnMuIFdoaWxlIGVsbGlwdGljIGN1cnZlIGVxdWF0aW9uIGlzIFleMiBtb2QgUCA9IChYXjMgKyBB WCArIEIpIE1vZCBQLg0KPiA+ICsgIFRoaXMgZnVuY3Rpb24gd2lsbCBzZXQgdGhlIHByb3ZpZGVk IEJpZyBOdW1iZXIgb2JqZWN0cyAgdG8gdGhlIGNvcnJlc3BvbmRpbmcNCj4gPiArICB2YWx1ZXMu IFRoZSBjYWxsZXIgbmVlZHMgdG8gbWFrZSBzdXJlIGFsbCB0aGUgIm91dCIgQmlnTnVtYmVyIHBh cmFtZXRlcnMNCj4gPiArICBhcmUgcHJvcGVybHkgaW5pdGlhbGl6ZWQuDQo+ID4gKw0KPiA+ICsg IEBwYXJhbVtpbl0gIEVjR3JvdXAgICAgRUMgZ3JvdXAgb2JqZWN0Lg0KPiA+ICsgIEBwYXJhbVtv dXRdIEJuUHJpbWUgICAgR3JvdXAgcHJpbWUgbnVtYmVyLg0KPiA+ICsgIEBwYXJhbVtvdXRdIEJu QSAgICAgICAgQSBjb2VmZmljaWVudC4NCj4gPiArICBAcGFyYW1bb3V0XSBCbkIgICAgICAgIEIg Y29lZmZpY2llbnQuDQo+ID4gKyAgQHBhcmFtW2luXSAgQm5DdHggICAgICBCTiBjb250ZXh0Lg0K PiA+ICsNCj4gPiArICBAcmV0dmFsIFRSVUUgICAgICAgICAgT24gc3VjY2Vzcy4NCj4gPiArICBA cmV0dmFsIEZBTFNFICAgICAgICAgT3RoZXJ3aXNlLg0KPiA+ICsqKi8NCj4gPiArQk9PTEVBTg0K PiA+ICtFRklBUEkNCj4gPiArRWNHcm91cEdldEN1cnZlICgNCj4gPiArICBJTiBDT05TVCBWT0lE ICAqRWNHcm91cCwNCj4gPiArICBPVVQgVk9JRCAgICAgICAqQm5QcmltZSwNCj4gPiArICBPVVQg Vk9JRCAgICAgICAqQm5BLA0KPiA+ICsgIE9VVCBWT0lEICAgICAgICpCbkIsDQo+ID4gKyAgSU4g Vk9JRCAgICAgICAgKkJuQ3R4DQo+ID4gKyAgKTsNCj4gPiArDQo+ID4gKy8qKg0KPiA+ICsgIEdl dCBFQyBncm91cCBvcmRlci4NCj4gPiArICBUaGlzIGZ1bmN0aW9uIHdpbGwgc2V0IHRoZSBwcm92 aWRlZCBCaWcgTnVtYmVyIG9iamVjdCB0byB0aGUgY29ycmVzcG9uZGluZw0KPiA+ICsgIHZhbHVl LiBUaGUgY2FsbGVyIG5lZWRzIHRvIG1ha2Ugc3VyZSB0aGF0IHRoZSAib3V0IiBCaWdOdW1iZXIg cGFyYW1ldGVyDQo+ID4gKyAgaXMgcHJvcGVybHkgaW5pdGlhbGl6ZWQuDQo+ID4gKw0KPiA+ICsg IEBwYXJhbVtpbl0gIEVjR3JvdXAgICBFQyBncm91cCBvYmplY3QuDQo+ID4gKyAgQHBhcmFtW291 dF0gQm5PcmRlciAgIEdyb3VwIHByaW1lIG51bWJlci4NCj4gPiArDQo+ID4gKyAgQHJldHZhbCBU UlVFICAgICAgICAgIE9uIHN1Y2Nlc3MuDQo+ID4gKyAgQHJldHZhbCBGQUxTRSAgICAgICAgIE90 aGVyd2lzZS4NCj4gPiArKiovDQo+ID4gK0JPT0xFQU4NCj4gPiArRUZJQVBJDQo+ID4gK0VjR3Jv dXBHZXRPcmRlciAoDQo+ID4gKyAgSU4gVk9JRCAgICpFY0dyb3VwLA0KPiA+ICsgIE9VVCBWT0lE ICAqQm5PcmRlcg0KPiA+ICsgICk7DQo+ID4gKw0KPiA+ICsvKioNCj4gPiArICBGcmVlIHByZXZp b3VzbHkgYWxsb2NhdGVkIEVDIGdyb3VwIG9iamVjdCB1c2luZyBFY0dyb3VwSW5pdCgpLg0KPiA+ ICsNCj4gPiArICBAcGFyYW1baW5dICBFY0dyb3VwICAgRUMgZ3JvdXAgb2JqZWN0IHRvIGZyZWUu DQo+ID4gKyoqLw0KPiA+ICtWT0lEDQo+ID4gK0VGSUFQSQ0KPiA+ICtFY0dyb3VwRnJlZSAoDQo+ ID4gKyAgSU4gVk9JRCAgKkVjR3JvdXANCj4gPiArICApOw0KPiA+ICsNCj4gPiArLyoqDQo+ID4g KyAgSW5pdGlhbGl6ZSBuZXcgb3BhcXVlIEVDIFBvaW50IG9iamVjdC4gVGhpcyBvYmplY3QgcmVw cmVzZW50cyBhbiBFQyBwb2ludA0KPiA+ICsgIHdpdGhpbiB0aGUgZ2l2ZW4gRUMgZ3JvdXAgKGN1 cnZlKS4NCj4gPiArDQo+ID4gKyAgQHBhcmFtW2luXSAgRUMgR3JvdXAsIHByb3Blcmx5IGluaXRp YWxpemVkIHVzaW5nIEVjR3JvdXBJbml0KCkuDQo+ID4gKw0KPiA+ICsgIEByZXR2YWwgRUMgUG9p bnQgb2JqZWN0ICBPbiBzdWNjZXNzLg0KPiA+ICsgIEByZXR2YWwgTlVMTCAgICAgICAgICAgICBP biBmYWlsdXJlLg0KPiA+ICsqKi8NCj4gPiArVk9JRCAqDQo+ID4gK0VGSUFQSQ0KPiA+ICtFY1Bv aW50SW5pdCAoDQo+ID4gKyAgSU4gQ09OU1QgVk9JRCAgKkVjR3JvdXANCj4gPiArICApOw0KPiA+ ICsNCj4gPiArLyoqDQo+ID4gKyAgRnJlZSBwcmV2aW91c2x5IGFsbG9jYXRlZCBFQyBQb2ludCBv YmplY3QgdXNpbmcgRWNQb2ludEluaXQoKS4NCj4gPiArDQo+ID4gKyAgQHBhcmFtW2luXSAgRWNQ b2ludCAgIEVDIFBvaW50IHRvIGZyZWUuDQo+ID4gKyAgQHBhcmFtW2luXSAgQ2xlYXIgICAgIFRS VUUgaWZmIHRoZSBtZW1vcnkgc2hvdWxkIGJlIGNsZWFyZWQuDQo+ID4gKyoqLw0KPiA+ICtWT0lE DQo+ID4gK0VGSUFQSQ0KPiA+ICtFY1BvaW50RGVJbml0ICgNCj4gPiArICBJTiBWT0lEICAgICAq RWNQb2ludCwNCj4gPiArICBJTiBCT09MRUFOICBDbGVhcg0KPiA+ICsgICk7DQo+ID4gKw0KPiA+ ICsvKioNCj4gPiArICBHZXQgRUMgcG9pbnQgYWZmaW5lICh4LHkpIGNvb3JkaW5hdGVzLg0KPiA+ ICsgIFRoaXMgZnVuY3Rpb24gd2lsbCBzZXQgdGhlIHByb3ZpZGVkIEJpZyBOdW1iZXIgb2JqZWN0 cyB0byB0aGUgY29ycmVzcG9uZGluZw0KPiA+ICsgIHZhbHVlcy4gVGhlIGNhbGxlciBuZWVkcyB0 byBtYWtlIHN1cmUgYWxsIHRoZSAib3V0IiBCaWdOdW1iZXIgcGFyYW1ldGVycw0KPiA+ICsgIGFy ZSBwcm9wZXJseSBpbml0aWFsaXplZC4NCj4gPiArDQo+ID4gKyAgQHBhcmFtW2luXSAgRWNHcm91 cCAgICBFQyBncm91cCBvYmplY3QuDQo+ID4gKyAgQHBhcmFtW2luXSAgRWNQb2ludCAgICBFQyBw b2ludCBvYmplY3QuDQo+ID4gKyAgQHBhcmFtW291dF0gQm5YICAgICAgICBYIGNvb3JkaW5hdGUu DQo+ID4gKyAgQHBhcmFtW291dF0gQm5ZICAgICAgICBZIGNvb3JkaW5hdGUuDQo+ID4gKyAgQHBh cmFtW2luXSAgQm5DdHggICAgICBCTiBjb250ZXh0LCBjcmVhdGVkIHdpdGggQmlnTnVtTmV3Q29u dGV4dCgpLg0KPiA+ICsNCj4gPiArICBAcmV0dmFsIFRSVUUgICAgICAgICAgT24gc3VjY2Vzcy4N Cj4gPiArICBAcmV0dmFsIEZBTFNFICAgICAgICAgT3RoZXJ3aXNlLg0KPiA+ICsqKi8NCj4gPiAr Qk9PTEVBTg0KPiA+ICtFRklBUEkNCj4gPiArRWNQb2ludEdldEFmZmluZUNvb3JkaW5hdGVzICgN Cj4gPiArICBJTiBDT05TVCBWT0lEICAqRWNHcm91cCwNCj4gPiArICBJTiBDT05TVCBWT0lEICAq RWNQb2ludCwNCj4gPiArICBPVVQgVk9JRCAgICAgICAqQm5YLA0KPiA+ICsgIE9VVCBWT0lEICAg ICAgICpCblksDQo+ID4gKyAgSU4gVk9JRCAgICAgICAgKkJuQ3R4DQo+ID4gKyAgKTsNCj4gPiAr DQo+ID4gKy8qKg0KPiA+ICsgIFNldCBFQyBwb2ludCBhZmZpbmUgKHgseSkgY29vcmRpbmF0ZXMu DQo+ID4gKw0KPiA+ICsgIEBwYXJhbVtpbl0gIEVjR3JvdXAgICAgRUMgZ3JvdXAgb2JqZWN0Lg0K PiA+ICsgIEBwYXJhbVtpbl0gIEVjUG9pbnQgICAgRUMgcG9pbnQgb2JqZWN0Lg0KPiA+ICsgIEBw YXJhbVtpbl0gIEJuWCAgICAgICAgWCBjb29yZGluYXRlLg0KPiA+ICsgIEBwYXJhbVtpbl0gIEJu WSAgICAgICAgWSBjb29yZGluYXRlLg0KPiA+ICsgIEBwYXJhbVtpbl0gIEJuQ3R4ICAgICAgQk4g Y29udGV4dCwgY3JlYXRlZCB3aXRoIEJpZ051bU5ld0NvbnRleHQoKS4NCj4gPiArDQo+ID4gKyAg QHJldHZhbCBUUlVFICAgICAgICAgIE9uIHN1Y2Nlc3MuDQo+ID4gKyAgQHJldHZhbCBGQUxTRSAg ICAgICAgIE90aGVyd2lzZS4NCj4gPiArKiovDQo+ID4gK0JPT0xFQU4NCj4gPiArRUZJQVBJDQo+ ID4gK0VjUG9pbnRTZXRBZmZpbmVDb29yZGluYXRlcyAoDQo+ID4gKyAgSU4gQ09OU1QgVk9JRCAg KkVjR3JvdXAsDQo+ID4gKyAgSU4gVk9JRCAgICAgICAgKkVjUG9pbnQsDQo+ID4gKyAgSU4gQ09O U1QgVk9JRCAgKkJuWCwNCj4gPiArICBJTiBDT05TVCBWT0lEICAqQm5ZLA0KPiA+ICsgIElOIFZP SUQgICAgICAgICpCbkN0eA0KPiA+ICsgICk7DQo+ID4gKw0KPiA+ICsvKioNCj4gPiArICBFQyBQ b2ludCBhZGRpdGlvbi4gRWNQb2ludFJlc3VsdCA9IEVjUG9pbnRBICsgRWNQb2ludEIuDQo+ID4g Kw0KPiA+ICsgIEBwYXJhbVtpbl0gIEVjR3JvdXAgICAgICAgICAgRUMgZ3JvdXAgb2JqZWN0Lg0K PiA+ICsgIEBwYXJhbVtvdXRdIEVjUG9pbnRSZXN1bHQgICAgRUMgcG9pbnQgdG8gaG9sZCB0aGUg cmVzdWx0LiBUaGUgcG9pbnQgc2hvdWxkDQo+ID4gKyAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBiZSBwcm9wZXJseSBpbml0aWFsaXplZC4NCj4gPiArICBAcGFyYW1baW5dICBFY1BvaW50 QSAgICAgICAgIEVDIFBvaW50Lg0KPiA+ICsgIEBwYXJhbVtpbl0gIEVjUG9pbnRCICAgICAgICAg RUMgUG9pbnQuDQo+ID4gKyAgQHBhcmFtW2luXSAgQm5DdHggICAgICAgICAgICBCTiBjb250ZXh0 LCBjcmVhdGVkIHdpdGggQmlnTnVtTmV3Q29udGV4dCgpLg0KPiA+ICsNCj4gPiArICBAcmV0dmFs IFRSVUUgICAgICAgICAgT24gc3VjY2Vzcy4NCj4gPiArICBAcmV0dmFsIEZBTFNFICAgICAgICAg T3RoZXJ3aXNlLg0KPiA+ICsqKi8NCj4gPiArQk9PTEVBTg0KPiA+ICtFRklBUEkNCj4gPiArRWNQ b2ludEFkZCAoDQo+ID4gKyAgSU4gQ09OU1QgVk9JRCAgKkVjR3JvdXAsDQo+ID4gKyAgT1VUIFZP SUQgICAgICAgKkVjUG9pbnRSZXN1bHQsDQo+ID4gKyAgSU4gQ09OU1QgVk9JRCAgKkVjUG9pbnRB LA0KPiA+ICsgIElOIENPTlNUIFZPSUQgICpFY1BvaW50QiwNCj4gPiArICBJTiBWT0lEICAgICAg ICAqQm5DdHgNCj4gPiArICApOw0KPiA+ICsNCj4gPiArLyoqDQo+ID4gKyAgVmFyaWFibGUgRUMg cG9pbnQgbXVsdGlwbGljYXRpb24uIEVjUG9pbnRSZXN1bHQgPSBFY1BvaW50ICogQm5QU2NhbGFy Lg0KPiA+ICsNCj4gPiArICBAcGFyYW1baW5dICBFY0dyb3VwICAgICAgICAgIEVDIGdyb3VwIG9i amVjdC4NCj4gPiArICBAcGFyYW1bb3V0XSBFY1BvaW50UmVzdWx0ICAgIEVDIHBvaW50IHRvIGhv bGQgdGhlIHJlc3VsdC4gVGhlIHBvaW50IHNob3VsZA0KPiA+ICsgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgYmUgcHJvcGVybHkgaW5pdGlhbGl6ZWQuDQo+ID4gKyAgQHBhcmFtW2luXSAg RWNQb2ludCAgICAgICAgICBFQyBQb2ludC4NCj4gPiArICBAcGFyYW1baW5dICBCblBTY2FsYXIg ICAgICAgIFAgU2NhbGFyLg0KPiA+ICsgIEBwYXJhbVtpbl0gIEJuQ3R4ICAgICAgICAgICAgQk4g Y29udGV4dCwgY3JlYXRlZCB3aXRoIEJpZ051bU5ld0NvbnRleHQoKS4NCj4gPiArDQo+ID4gKyAg QHJldHZhbCBUUlVFICAgICAgICAgIE9uIHN1Y2Nlc3MuDQo+ID4gKyAgQHJldHZhbCBGQUxTRSAg ICAgICAgIE90aGVyd2lzZS4NCj4gPiArKiovDQo+ID4gK0JPT0xFQU4NCj4gPiArRUZJQVBJDQo+ ID4gK0VjUG9pbnRNdWwgKA0KPiA+ICsgIElOIENPTlNUIFZPSUQgICpFY0dyb3VwLA0KPiA+ICsg IE9VVCBWT0lEICAgICAgICpFY1BvaW50UmVzdWx0LA0KPiA+ICsgIElOIENPTlNUIFZPSUQgICpF Y1BvaW50LA0KPiA+ICsgIElOIENPTlNUIFZPSUQgICpCblBTY2FsYXIsDQo+ID4gKyAgSU4gVk9J RCAgICAgICAgKkJuQ3R4DQo+ID4gKyAgKTsNCj4gPiArDQo+ID4gKy8qKg0KPiA+ICsgIENhbGN1 bGF0ZSB0aGUgaW52ZXJzZSBvZiB0aGUgc3VwcGxpZWQgRUMgcG9pbnQuDQo+ID4gKw0KPiA+ICsg IEBwYXJhbVtpbl0gICAgIEVjR3JvdXAgICBFQyBncm91cCBvYmplY3QuDQo+ID4gKyAgQHBhcmFt W2luLG91dF0gRWNQb2ludCAgIEVDIHBvaW50IHRvIGludmVydC4NCj4gPiArICBAcGFyYW1baW5d ICAgICBCbkN0eCAgICAgQk4gY29udGV4dCwgY3JlYXRlZCB3aXRoIEJpZ051bU5ld0NvbnRleHQo KS4NCj4gPiArDQo+ID4gKyAgQHJldHZhbCBUUlVFICAgICAgICAgIE9uIHN1Y2Nlc3MuDQo+ID4g KyAgQHJldHZhbCBGQUxTRSAgICAgICAgIE90aGVyd2lzZS4NCj4gPiArKiovDQo+ID4gK0JPT0xF QU4NCj4gPiArRUZJQVBJDQo+ID4gK0VjUG9pbnRJbnZlcnQgKA0KPiA+ICsgIElOIENPTlNUIFZP SUQgICpFY0dyb3VwLA0KPiA+ICsgIElOIE9VVCBWT0lEICAgICpFY1BvaW50LA0KPiA+ICsgIElO IFZPSUQgICAgICAgICpCbkN0eA0KPiA+ICsgICk7DQo+ID4gKw0KPiA+ICsvKioNCj4gPiArICBD aGVjayBpZiB0aGUgc3VwcGxpZWQgcG9pbnQgaXMgb24gRUMgY3VydmUuDQo+ID4gKw0KPiA+ICsg IEBwYXJhbVtpbl0gIEVjR3JvdXAgICBFQyBncm91cCBvYmplY3QuDQo+ID4gKyAgQHBhcmFtW2lu XSAgRWNQb2ludCAgIEVDIHBvaW50IHRvIGNoZWNrLg0KPiA+ICsgIEBwYXJhbVtpbl0gIEJuQ3R4 ICAgICBCTiBjb250ZXh0LCBjcmVhdGVkIHdpdGggQmlnTnVtTmV3Q29udGV4dCgpLg0KPiA+ICsN Cj4gPiArICBAcmV0dmFsIFRSVUUgICAgICAgICAgT24gY3VydmUuDQo+ID4gKyAgQHJldHZhbCBG QUxTRSAgICAgICAgIE90aGVyd2lzZS4NCj4gPiArKiovDQo+ID4gK0JPT0xFQU4NCj4gPiArRUZJ QVBJDQo+ID4gK0VjUG9pbnRJc09uQ3VydmUgKA0KPiA+ICsgIElOIENPTlNUIFZPSUQgICpFY0dy b3VwLA0KPiA+ICsgIElOIENPTlNUIFZPSUQgICpFY1BvaW50LA0KPiA+ICsgIElOIFZPSUQgICAg ICAgICpCbkN0eA0KPiA+ICsgICk7DQo+ID4gKw0KPiA+ICsvKioNCj4gPiArICBDaGVjayBpZiB0 aGUgc3VwcGxpZWQgcG9pbnQgaXMgYXQgaW5maW5pdHkuDQo+ID4gKw0KPiA+ICsgIEBwYXJhbVtp bl0gIEVjR3JvdXAgICBFQyBncm91cCBvYmplY3QuDQo+ID4gKyAgQHBhcmFtW2luXSAgRWNQb2lu dCAgIEVDIHBvaW50IHRvIGNoZWNrLg0KPiA+ICsNCj4gPiArICBAcmV0dmFsIFRSVUUgICAgICAg ICAgQXQgaW5maW5pdHkuDQo+ID4gKyAgQHJldHZhbCBGQUxTRSAgICAgICAgIE90aGVyd2lzZS4N Cj4gPiArKiovDQo+ID4gK0JPT0xFQU4NCj4gPiArRUZJQVBJDQo+ID4gK0VjUG9pbnRJc0F0SW5m aW5pdHkgKA0KPiA+ICsgIElOIENPTlNUIFZPSUQgICpFY0dyb3VwLA0KPiA+ICsgIElOIENPTlNU IFZPSUQgICpFY1BvaW50DQo+ID4gKyAgKTsNCj4gPiArDQo+ID4gKy8qKg0KPiA+ICsgIENoZWNr IGlmIEVDIHBvaW50cyBhcmUgZXF1YWwuDQo+ID4gKw0KPiA+ICsgIEBwYXJhbVtpbl0gIEVjR3Jv dXAgICBFQyBncm91cCBvYmplY3QuDQo+ID4gKyAgQHBhcmFtW2luXSAgRWNQb2ludEEgIEVDIHBv aW50IEEuDQo+ID4gKyAgQHBhcmFtW2luXSAgRWNQb2ludEIgIEVDIHBvaW50IEIuDQo+ID4gKyAg QHBhcmFtW2luXSAgQm5DdHggICAgIEJOIGNvbnRleHQsIGNyZWF0ZWQgd2l0aCBCaWdOdW1OZXdD b250ZXh0KCkuDQo+ID4gKw0KPiA+ICsgIEByZXR2YWwgVFJVRSAgICAgICAgICBBID09IEIuDQo+ ID4gKyAgQHJldHZhbCBGQUxTRSAgICAgICAgIE90aGVyd2lzZS4NCj4gPiArKiovDQo+ID4gK0JP T0xFQU4NCj4gPiArRUZJQVBJDQo+ID4gK0VjUG9pbnRFcXVhbCAoDQo+ID4gKyAgSU4gQ09OU1Qg Vk9JRCAgKkVjR3JvdXAsDQo+ID4gKyAgSU4gQ09OU1QgVk9JRCAgKkVjUG9pbnRBLA0KPiA+ICsg IElOIENPTlNUIFZPSUQgICpFY1BvaW50QiwNCj4gPiArICBJTiBWT0lEICAgICAgICAqQm5DdHgN Cj4gPiArICApOw0KPiA+ICsNCj4gPiArLyoqDQo+ID4gKyAgU2V0IEVDIHBvaW50IGNvbXByZXNz ZWQgY29vcmRpbmF0ZXMuIFBvaW50cyBjYW4gYmUgZGVzY3JpYmVkIGluIHRlcm1zIG9mDQo+ID4g KyAgdGhlaXIgY29tcHJlc3NlZCBjb29yZGluYXRlcy4gRm9yIGEgcG9pbnQgKHgsIHkpLCBmb3Ig YW55IGdpdmVuIHZhbHVlIGZvciB4DQo+ID4gKyAgc3VjaCB0aGF0IHRoZSBwb2ludCBpcyBvbiB0 aGUgY3VydmUgdGhlcmUgd2lsbCBvbmx5IGV2ZXIgYmUgdHdvIHBvc3NpYmxlDQo+ID4gKyAgdmFs dWVzIGZvciB5LiBUaGVyZWZvcmUsIGEgcG9pbnQgY2FuIGJlIHNldCB1c2luZyB0aGlzIGZ1bmN0 aW9uIHdoZXJlIEJuWCBpcw0KPiA+ICsgIHRoZSB4IGNvb3JkaW5hdGUgYW5kIFlCaXQgaXMgYSB2 YWx1ZSAwIG9yIDEgdG8gaWRlbnRpZnkgd2hpY2ggb2YgdGhlIHR3bw0KPiA+ICsgIHBvc3NpYmxl IHZhbHVlcyBmb3IgeSBzaG91bGQgYmUgdXNlZC4NCj4gPiArDQo+ID4gKyAgQHBhcmFtW2luXSAg RWNHcm91cCAgICBFQyBncm91cCBvYmplY3QuDQo+ID4gKyAgQHBhcmFtW2luXSAgRWNQb2ludCAg ICBFQyBQb2ludC4NCj4gPiArICBAcGFyYW1baW5dICBCblggICAgICAgIFggY29vcmRpbmF0ZS4N Cj4gPiArICBAcGFyYW1baW5dICBZQml0ICAgICAgIDAgb3IgMSB0byBpZGVudGlmeSB3aGljaCBZ IHZhbHVlIGlzIHVzZWQuDQo+ID4gKyAgQHBhcmFtW2luXSAgQm5DdHggICAgICBCTiBjb250ZXh0 LCBjcmVhdGVkIHdpdGggQmlnTnVtTmV3Q29udGV4dCgpLg0KPiA+ICsNCj4gPiArICBAcmV0dmFs IFRSVUUgICAgICAgICAgT24gc3VjY2Vzcy4NCj4gPiArICBAcmV0dmFsIEZBTFNFICAgICAgICAg T3RoZXJ3aXNlLg0KPiA+ICsqKi8NCj4gPiArQk9PTEVBTg0KPiA+ICtFRklBUEkNCj4gPiArRWNQ b2ludFNldENvbXByZXNzZWRDb29yZGluYXRlcyAoDQo+ID4gKyAgSU4gQ09OU1QgVk9JRCAgKkVj R3JvdXAsDQo+ID4gKyAgSU4gVk9JRCAgICAgICAgKkVjUG9pbnQsDQo+ID4gKyAgSU4gQ09OU1Qg Vk9JRCAgKkJuWCwNCj4gPiArICBJTiBVSU5UOCAgICAgICBZQml0LA0KPiA+ICsgIElOIFZPSUQg ICAgICAgICpCbkN0eA0KPiA+ICsgICk7DQo+ID4gKw0KPiA+ICsvLyA9PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09DQo+ID4gKy8vICAgIEVsbGlwdGljIEN1cnZlIERpZmZpZSBIZWxsbWFuIFBy aW1pdGl2ZXMNCj4gPiArLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQ0KPiA+ICsNCj4g PiArLyoqDQo+ID4gKyAgQWxsb2NhdGVzIGFuZCBJbml0aWFsaXplcyBvbmUgRWxsaXB0aWMgQ3Vy dmUgQ29udGV4dCBmb3Igc3Vic2VxdWVudCB1c2UNCj4gPiArICB3aXRoIHRoZSBOSUQuDQo+ID4g Kw0KPiA+ICsgIEBwYXJhbVtpbl0gIE5pZCBjaXBoZXIgTklEDQo+ID4gKyAgQHJldHVybiAgICAg UG9pbnRlciB0byB0aGUgRWxsaXB0aWMgQ3VydmUgQ29udGV4dCB0aGF0IGhhcyBiZWVuIGluaXRp YWxpemVkLg0KPiA+ICsgICAgICAgICAgICAgIElmIHRoZSBhbGxvY2F0aW9ucyBmYWlscywgRWNO ZXdCeU5pZCgpIHJldHVybnMgTlVMTC4NCj4gPiArKiovDQo+ID4gK1ZPSUQgKg0KPiA+ICtFRklB UEkNCj4gPiArRWNOZXdCeU5pZCAoDQo+ID4gKyAgSU4gVUlOVE4gIE5pZA0KPiA+ICsgICk7DQo+ ID4gKw0KPiA+ICsvKioNCj4gPiArICBSZWxlYXNlIHRoZSBzcGVjaWZpZWQgRUMgY29udGV4dC4N Cj4gPiArDQo+ID4gKyAgQHBhcmFtW2luXSAgRWNDb250ZXh0ICBQb2ludGVyIHRvIHRoZSBFQyBj b250ZXh0IHRvIGJlIHJlbGVhc2VkLg0KPiA+ICsqKi8NCj4gPiArVk9JRA0KPiA+ICtFRklBUEkN Cj4gPiArRWNGcmVlICgNCj4gPiArICBJTiAgVk9JRCAgKkVjQ29udGV4dA0KPiA+ICsgICk7DQo+ ID4gKw0KPiA+ICsvKioNCj4gPiArICBHZW5lcmF0ZXMgRUMga2V5IGFuZCByZXR1cm5zIEVDIHB1 YmxpYyBrZXkgKFgsIFkpLCBQbGVhc2Ugbm90ZSwgdGhpcyBmdW5jdGlvbiB1c2VzDQo+ID4gKyAg cHNldWRvIHJhbmRvbSBudW1iZXIgZ2VuZXJhdG9yLiBUaGUgY2FsbGVyIG11c3QgbWFrZSBzdXJl IFJhbmRvbVNlZWQoKQ0KPiA+ICsgIGZ1bmN0aW9uIHdhcyBwcm9wZXJseSBjYWxsZWQgYmVmb3Jl Lg0KPiA+ICsgIFRoZSBFYyBjb250ZXh0IHNob3VsZCBiZSBjb3JyZWN0bHkgaW5pdGlhbGl6ZWQg YnkgRWNOZXdCeU5pZC4NCj4gPiArICBUaGlzIGZ1bmN0aW9uIGdlbmVyYXRlcyByYW5kb20gc2Vj cmV0LCBhbmQgY29tcHV0ZXMgdGhlIHB1YmxpYyBrZXkgKFgsIFkpLCB3aGljaCBpcw0KPiA+ICsg IHJldHVybmVkIHZpYSBwYXJhbWV0ZXIgUHVibGljLCBQdWJsaWNTaXplLg0KPiA+ICsgIFggaXMg dGhlIGZpcnN0IGhhbGYgb2YgUHVibGljIHdpdGggc2l6ZSBiZWluZyBQdWJsaWNTaXplIC8gMiwN Cj4gPiArICBZIGlzIHRoZSBzZWNvbmQgaGFsZiBvZiBQdWJsaWMgd2l0aCBzaXplIGJlaW5nIFB1 YmxpY1NpemUgLyAyLg0KPiA+ICsgIEVDIGNvbnRleHQgaXMgdXBkYXRlZCBhY2NvcmRpbmdseS4N Cj4gPiArICBJZiB0aGUgUHVibGljIGJ1ZmZlciBpcyB0b28gc21hbGwgdG8gaG9sZCB0aGUgcHVi bGljIFgsIFksIEZBTFNFIGlzIHJldHVybmVkIGFuZA0KPiA+ICsgIFB1YmxpY1NpemUgaXMgc2V0 IHRvIHRoZSByZXF1aXJlZCBidWZmZXIgc2l6ZSB0byBvYnRhaW4gdGhlIHB1YmxpYyBYLCBZLg0K PiA+ICsgIEZvciBQLTI1NiwgdGhlIFB1YmxpY1NpemUgaXMgNjQuIEZpcnN0IDMyLWJ5dGUgaXMg WCwgU2Vjb25kIDMyLWJ5dGUgaXMgWS4NCj4gPiArICBGb3IgUC0zODQsIHRoZSBQdWJsaWNTaXpl IGlzIDk2LiBGaXJzdCA0OC1ieXRlIGlzIFgsIFNlY29uZCA0OC1ieXRlIGlzIFkuDQo+ID4gKyAg Rm9yIFAtNTIxLCB0aGUgUHVibGljU2l6ZSBpcyAxMzIuIEZpcnN0IDY2LWJ5dGUgaXMgWCwgU2Vj b25kIDY2LWJ5dGUgaXMgWS4NCj4gPiArICBJZiBFY0NvbnRleHQgaXMgTlVMTCwgdGhlbiByZXR1 cm4gRkFMU0UuDQo+ID4gKyAgSWYgUHVibGljU2l6ZSBpcyBOVUxMLCB0aGVuIHJldHVybiBGQUxT RS4NCj4gPiArICBJZiBQdWJsaWNTaXplIGlzIGxhcmdlIGVub3VnaCBidXQgUHVibGljIGlzIE5V TEwsIHRoZW4gcmV0dXJuIEZBTFNFLg0KPiA+ICsgIEBwYXJhbVtpbiwgb3V0XSAgRWNDb250ZXh0 ICAgICAgUG9pbnRlciB0byB0aGUgRUMgY29udGV4dC4NCj4gPiArICBAcGFyYW1bb3V0XSAgICAg IFB1YmxpY0tleSAgICAgIFBvaW50ZXIgdG8gdCBidWZmZXIgdG8gcmVjZWl2ZSBnZW5lcmF0ZWQg cHVibGljIFgsWS4NCj4gPiArICBAcGFyYW1baW4sIG91dF0gIFB1YmxpY0tleVNpemUgIE9uIGlu cHV0LCB0aGUgc2l6ZSBvZiBQdWJsaWMgYnVmZmVyIGluIGJ5dGVzLg0KPiA+ICsgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgT24gb3V0cHV0LCB0aGUgc2l6ZSBvZiBkYXRhIHJldHVy bmVkIGluIFB1YmxpYyBidWZmZXIgaW4gYnl0ZXMuDQo+ID4gKyAgQHJldHZhbCBUUlVFICAgRUMg cHVibGljIFgsWSBnZW5lcmF0aW9uIHN1Y2NlZWRlZC4NCj4gPiArICBAcmV0dmFsIEZBTFNFICBF QyBwdWJsaWMgWCxZIGdlbmVyYXRpb24gZmFpbGVkLg0KPiA+ICsgIEByZXR2YWwgRkFMU0UgIFB1 YmxpY0tleVNpemUgaXMgbm90IGxhcmdlIGVub3VnaC4NCj4gPiArKiovDQo+ID4gK0JPT0xFQU4N Cj4gPiArRUZJQVBJDQo+ID4gK0VjR2VuZXJhdGVLZXkgKA0KPiA+ICsgIElOIE9VVCAgVk9JRCAg ICpFY0NvbnRleHQsDQo+ID4gKyAgT1VUICAgICBVSU5UOCAgKlB1YmxpY0tleSwNCj4gPiArICBJ TiBPVVQgIFVJTlROICAqUHVibGljS2V5U2l6ZQ0KPiA+ICsgICk7DQo+ID4gKw0KPiA+ICsvKioN Cj4gPiArICBHZXRzIHRoZSBwdWJsaWMga2V5IGNvbXBvbmVudCBmcm9tIHRoZSBlc3RhYmxpc2hl ZCBFQyBjb250ZXh0Lg0KPiA+ICsgIFRoZSBFYyBjb250ZXh0IHNob3VsZCBiZSBjb3JyZWN0bHkg aW5pdGlhbGl6ZWQgYnkgRWNOZXdCeU5pZCwgYW5kIHN1Y2Nlc3NmdWxseQ0KPiA+ICsgIGdlbmVy YXRlIGtleSBwYWlyIGZyb20gRWNHZW5lcmF0ZUtleSgpLg0KPiA+ICsgIEZvciBQLTI1NiwgdGhl IFB1YmxpY1NpemUgaXMgNjQuIEZpcnN0IDMyLWJ5dGUgaXMgWCwgU2Vjb25kIDMyLWJ5dGUgaXMg WS4NCj4gPiArICBGb3IgUC0zODQsIHRoZSBQdWJsaWNTaXplIGlzIDk2LiBGaXJzdCA0OC1ieXRl IGlzIFgsIFNlY29uZCA0OC1ieXRlIGlzIFkuDQo+ID4gKyAgRm9yIFAtNTIxLCB0aGUgUHVibGlj U2l6ZSBpcyAxMzIuIEZpcnN0IDY2LWJ5dGUgaXMgWCwgU2Vjb25kIDY2LWJ5dGUgaXMgWS4NCj4g PiArICBAcGFyYW1baW4sIG91dF0gIEVjQ29udGV4dCAgICAgIFBvaW50ZXIgdG8gRUMgY29udGV4 dCBiZWluZyBzZXQuDQo+ID4gKyAgQHBhcmFtW291dF0gICAgICBQdWJsaWNLZXkgICAgICBQb2lu dGVyIHRvIHQgYnVmZmVyIHRvIHJlY2VpdmUgZ2VuZXJhdGVkIHB1YmxpYyBYLFkuDQo+ID4gKyAg QHBhcmFtW2luLCBvdXRdICBQdWJsaWNLZXlTaXplICBPbiBpbnB1dCwgdGhlIHNpemUgb2YgUHVi bGljIGJ1ZmZlciBpbiBieXRlcy4NCj4gPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIE9uIG91dHB1dCwgdGhlIHNpemUgb2YgZGF0YSByZXR1cm5lZCBpbiBQdWJsaWMgYnVmZmVy IGluIGJ5dGVzLg0KPiA+ICsgIEByZXR2YWwgIFRSVUUgICBFQyBrZXkgY29tcG9uZW50IHdhcyBy ZXRyaWV2ZWQgc3VjY2Vzc2Z1bGx5Lg0KPiA+ICsgIEByZXR2YWwgIEZBTFNFICBJbnZhbGlkIEVD IGtleSBjb21wb25lbnQuDQo+ID4gKyoqLw0KPiA+ICtCT09MRUFODQo+ID4gK0VGSUFQSQ0KPiA+ ICtFY0dldFB1YktleSAoDQo+ID4gKyAgSU4gT1VUICBWT0lEICAgKkVjQ29udGV4dCwNCj4gPiAr ICBPVVQgICAgIFVJTlQ4ICAqUHVibGljS2V5LA0KPiA+ICsgIElOIE9VVCAgVUlOVE4gICpQdWJs aWNLZXlTaXplDQo+ID4gKyAgKTsNCj4gPiArDQo+ID4gKy8qKg0KPiA+ICsgIENvbXB1dGVzIGV4 Y2hhbmdlZCBjb21tb24ga2V5Lg0KPiA+ICsgIEdpdmVuIHBlZXIncyBwdWJsaWMga2V5IChYLCBZ KSwgdGhpcyBmdW5jdGlvbiBjb21wdXRlcyB0aGUgZXhjaGFuZ2VkIGNvbW1vbiBrZXksDQo+ID4g KyAgYmFzZWQgb24gaXRzIG93biBjb250ZXh0IGluY2x1ZGluZyB2YWx1ZSBvZiBjdXJ2ZSBwYXJh bWV0ZXIgYW5kIHJhbmRvbSBzZWNyZXQuDQo+ID4gKyAgWCBpcyB0aGUgZmlyc3QgaGFsZiBvZiBQ ZWVyUHVibGljIHdpdGggc2l6ZSBiZWluZyBQZWVyUHVibGljU2l6ZSAvIDIsDQo+ID4gKyAgWSBp cyB0aGUgc2Vjb25kIGhhbGYgb2YgUGVlclB1YmxpYyB3aXRoIHNpemUgYmVpbmcgUGVlclB1Ymxp Y1NpemUgLyAyLg0KPiA+ICsgIElmIEVjQ29udGV4dCBpcyBOVUxMLCB0aGVuIHJldHVybiBGQUxT RS4NCj4gPiArICBJZiBQZWVyUHVibGljIGlzIE5VTEwsIHRoZW4gcmV0dXJuIEZBTFNFLg0KPiA+ ICsgIElmIFBlZXJQdWJsaWNTaXplIGlzIDAsIHRoZW4gcmV0dXJuIEZBTFNFLg0KPiA+ICsgIElm IEtleSBpcyBOVUxMLCB0aGVuIHJldHVybiBGQUxTRS4NCj4gPiArICBJZiBLZXlTaXplIGlzIG5v dCBsYXJnZSBlbm91Z2gsIHRoZW4gcmV0dXJuIEZBTFNFLg0KPiA+ICsgIEZvciBQLTI1NiwgdGhl IFBlZXJQdWJsaWNTaXplIGlzIDY0LiBGaXJzdCAzMi1ieXRlIGlzIFgsIFNlY29uZCAzMi1ieXRl IGlzIFkuDQo+ID4gKyAgRm9yIFAtMzg0LCB0aGUgUGVlclB1YmxpY1NpemUgaXMgOTYuIEZpcnN0 IDQ4LWJ5dGUgaXMgWCwgU2Vjb25kIDQ4LWJ5dGUgaXMgWS4NCj4gPiArICBGb3IgUC01MjEsIHRo ZSBQZWVyUHVibGljU2l6ZSBpcyAxMzIuIEZpcnN0IDY2LWJ5dGUgaXMgWCwgU2Vjb25kIDY2LWJ5 dGUgaXMgWS4NCj4gPiArICBAcGFyYW1baW4sIG91dF0gIEVjQ29udGV4dCAgICAgICAgICBQb2lu dGVyIHRvIHRoZSBFQyBjb250ZXh0Lg0KPiA+ICsgIEBwYXJhbVtpbl0gICAgICAgUGVlclB1Ymxp YyAgICAgICAgIFBvaW50ZXIgdG8gdGhlIHBlZXIncyBwdWJsaWMgWCxZLg0KPiA+ICsgIEBwYXJh bVtpbl0gICAgICAgUGVlclB1YmxpY1NpemUgICAgIFNpemUgb2YgcGVlcidzIHB1YmxpYyBYLFkg aW4gYnl0ZXMuDQo+ID4gKyAgQHBhcmFtW2luXSAgICAgICBDb21wcmVzc0ZsYWcgICAgICAgRmxh ZyBvZiBQZWVyUHVibGljIGlzIGNvbXByZXNzZWQgb3Igbm90Lg0KPiA+ICsgIEBwYXJhbVtvdXRd ICAgICAgS2V5ICAgICAgICAgICAgICAgIFBvaW50ZXIgdG8gdGhlIGJ1ZmZlciB0byByZWNlaXZl IGdlbmVyYXRlZCBrZXkuDQo+ID4gKyAgQHBhcmFtW2luLCBvdXRdICBLZXlTaXplICAgICAgICAg ICAgT24gaW5wdXQsIHRoZSBzaXplIG9mIEtleSBidWZmZXIgaW4gYnl0ZXMuDQo+ID4gKyAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgT24gb3V0cHV0LCB0aGUgc2l6ZSBvZiBk YXRhIHJldHVybmVkIGluIEtleSBidWZmZXIgaW4gYnl0ZXMuDQo+ID4gKyAgQHJldHZhbCBUUlVF ICAgRUMgZXhjaGFuZ2VkIGtleSBnZW5lcmF0aW9uIHN1Y2NlZWRlZC4NCj4gPiArICBAcmV0dmFs IEZBTFNFICBFQyBleGNoYW5nZWQga2V5IGdlbmVyYXRpb24gZmFpbGVkLg0KPiA+ICsgIEByZXR2 YWwgRkFMU0UgIEtleVNpemUgaXMgbm90IGxhcmdlIGVub3VnaC4NCj4gPiArKiovDQo+ID4gK0JP T0xFQU4NCj4gPiArRUZJQVBJDQo+ID4gK0VjRGhDb21wdXRlS2V5ICgNCj4gPiArICBJTiBPVVQg IFZPSUQgICAgICAgICAqRWNDb250ZXh0LA0KPiA+ICsgIElOICAgICAgQ09OU1QgVUlOVDggICpQ ZWVyUHVibGljLA0KPiA+ICsgIElOICAgICAgVUlOVE4gICAgICAgIFBlZXJQdWJsaWNTaXplLA0K PiA+ICsgIElOICAgICAgQ09OU1QgSU5UMzIgICpDb21wcmVzc0ZsYWcsDQo+ID4gKyAgT1VUICAg ICBVSU5UOCAgICAgICAgKktleSwNCj4gPiArICBJTiBPVVQgIFVJTlROICAgICAgICAqS2V5U2l6 ZQ0KPiA+ICsgICk7DQo+ID4gKw0KPiA+ICAjZW5kaWYgLy8gX19CQVNFX0NSWVBUX0xJQl9IX18N Cj4gPiBkaWZmIC0tZ2l0IGEvQ3J5cHRvUGtnL0xpYnJhcnkvQmFzZUNyeXB0TGliL0Jhc2VDcnlw dExpYi5pbmYgYi9DcnlwdG9Qa2cvTGlicmFyeS9CYXNlQ3J5cHRMaWIvQmFzZUNyeXB0TGliLmlu Zg0KPiA+IGluZGV4IDllNGJlMmZiMGQuLmFkZTZlZTNmZGQgMTAwNjQ0DQo+ID4gLS0tIGEvQ3J5 cHRvUGtnL0xpYnJhcnkvQmFzZUNyeXB0TGliL0Jhc2VDcnlwdExpYi5pbmYNCj4gPiArKysgYi9D cnlwdG9Qa2cvTGlicmFyeS9CYXNlQ3J5cHRMaWIvQmFzZUNyeXB0TGliLmluZg0KPiA+IEBAIC01 Miw2ICs1Miw4IEBADQo+ID4gICAgUGsvQ3J5cHRUcy5jDQo+ID4gICAgUGsvQ3J5cHRSc2FQc3Mu Yw0KPiA+ICAgIFBrL0NyeXB0UnNhUHNzU2lnbi5jDQo+ID4gKyAgUGsvQ3J5cHRFY051bGwuYyAg ICB8KnwqfCp8IWdFZmlDcnlwdG9Qa2dUb2tlblNwYWNlR3VpZC5QY2RPcGVuc3NsRWNFbmFibGVk DQo+ID4gKyAgUGsvQ3J5cHRFYy5jICAgIHwqfCp8KnxnRWZpQ3J5cHRvUGtnVG9rZW5TcGFjZUd1 aWQuUGNkT3BlbnNzbEVjRW5hYmxlZA0KPiANCj4gVGhlIHVzZSBvZiB0aGUgUENEIHRvIHNlbGVj dCB0aGUgZmlsZSBzaG91bGQgbm90IGJlIG5lZWRlZCBoZXJlLiAgVGhlDQo+IEVjIEZhbWlseSBh bmQgaW5kaXZpZHVhbCBzZXJ2aWNlIGVuYWJsZS9kaXNhYmxlIGZpZWxkcyBpbiB0aGUNCj4gUENE X0NSWVBUT19TRVJWSUNFX0ZBTUlMWV9FTkFCTEUgc3RydWN0dXJlZCBQQ0QgYXJlIGFsbCB0aGF0 IGlzIG5lZWRlZCB0bw0KPiBkaXNhYmxlIHRoZSBFYyBzZXJ2aWNlcy4NCj4gDQo+IFRoZSBQQ0Qg Z0VmaUNyeXB0b1BrZ1Rva2VuU3BhY2VHdWlkLlBjZE9wZW5zc2xFY0VuYWJsZWQgc2hvdWxkIGJl IHJlbW92ZWQNCj4gY29tcGxldGVseSBhcyBwYXJ0IG9mIHRoaXMgcGF0Y2ggc2VyaWVzLg0KPiAN Cj4gPiAgICBQZW0vQ3J5cHRQZW0uYw0KPiA+ICAgIEJuL0NyeXB0Qm4uYw0KPiA+DQo+ID4gZGlm ZiAtLWdpdCBhL0NyeXB0b1BrZy9MaWJyYXJ5L0Jhc2VDcnlwdExpYi9QZWlDcnlwdExpYi5pbmYg Yi9DcnlwdG9Qa2cvTGlicmFyeS9CYXNlQ3J5cHRMaWIvUGVpQ3J5cHRMaWIuaW5mDQo+ID4gaW5k ZXggNjVhZDIzZmI4MS4uMzgzZGYyYjIzYyAxMDA2NDQNCj4gPiAtLS0gYS9DcnlwdG9Qa2cvTGli cmFyeS9CYXNlQ3J5cHRMaWIvUGVpQ3J5cHRMaWIuaW5mDQo+ID4gKysrIGIvQ3J5cHRvUGtnL0xp YnJhcnkvQmFzZUNyeXB0TGliL1BlaUNyeXB0TGliLmluZg0KPiA+IEBAIC01OCw2ICs1OCw3IEBA DQo+ID4gICAgUGsvQ3J5cHRUc051bGwuYw0KPiA+ICAgIFBrL0NyeXB0UnNhUHNzLmMNCj4gPiAg ICBQay9DcnlwdFJzYVBzc1NpZ25OdWxsLmMNCj4gPiArICBQay9DcnlwdEVjTnVsbC5jDQo+ID4g ICAgUGVtL0NyeXB0UGVtTnVsbC5jDQo+ID4gICAgUmFuZC9DcnlwdFJhbmROdWxsLmMNCj4gPiAg ICBCbi9DcnlwdEJuTnVsbC5jDQo+ID4gZGlmZiAtLWdpdCBhL0NyeXB0b1BrZy9MaWJyYXJ5L0Jh c2VDcnlwdExpYi9Qay9DcnlwdEVjLmMgYi9DcnlwdG9Qa2cvTGlicmFyeS9CYXNlQ3J5cHRMaWIv UGsvQ3J5cHRFYy5jDQo+ID4gbmV3IGZpbGUgbW9kZSAxMDA2NDQNCj4gPiBpbmRleCAwMDAwMDAw MDAwLi4zOTZjODE5ODM0DQo+ID4gLS0tIC9kZXYvbnVsbA0KPiA+ICsrKyBiL0NyeXB0b1BrZy9M aWJyYXJ5L0Jhc2VDcnlwdExpYi9Qay9DcnlwdEVjLmMNCj4gPiBAQCAtMCwwICsxLDc2NSBAQA0K PiA+ICsvKiogQGZpbGUNCj4gPiArICBFbGxpcHRpYyBDdXJ2ZSBhbmQgRUNESCBBUEkgaW1wbGVt ZW50YXRpb24gYmFzZWQgb24gT3BlblNTTA0KPiA+ICsNCj4gPiArICBDb3B5cmlnaHQgKGMpIDIw MjIsIEludGVsIENvcnBvcmF0aW9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLjxCUj4NCj4gPiArICBT UERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQlNELTItQ2xhdXNlLVBhdGVudA0KPiA+ICsNCj4gPiAr KiovDQo+ID4gKw0KPiA+ICsjaW5jbHVkZSAiSW50ZXJuYWxDcnlwdExpYi5oIg0KPiA+ICsjaW5j bHVkZSA8b3BlbnNzbC9vYmplY3RzLmg+DQo+ID4gKyNpbmNsdWRlIDxvcGVuc3NsL2JuLmg+DQo+ ID4gKyNpbmNsdWRlIDxvcGVuc3NsL2VjLmg+DQo+ID4gKw0KPiA+ICsvLyA9PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09DQo+ID4gKy8vICAgIEJhc2ljIEVsbGlwdGljIEN1cnZlIFByaW1pdGl2 ZXMNCj4gPiArLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQ0KPiA+ICsNCj4gPiArLyoq DQo+ID4gKyAgUmV0dXJuIHRoZSBOaWQgb2YgY2VydGFpbiBFQ0MgY3VydmUuDQo+ID4gKw0KPiA+ ICsgIEBwYXJhbVtpbl0gIENyeXB0b05pZCAgIElkZW50aWZ5aW5nIG51bWJlciBmb3IgdGhlIEVD QyBjdXJ2ZSAoRGVmaW5lZCBpbg0KPiA+ICsgICAgICAgICAgICAgICAgICAgICAgICAgIEJhc2VD cnlwdExpYi5oKS4NCj4gPiArDQo+ID4gKyAgQHJldHZhbCAhPS0xICAgIE9uIHN1Y2Nlc3MuDQo+ ID4gKyAgQHJldHZhbCAtMSAgICAgIEVDQyBjdXJ2ZSBub3Qgc3VwcG9ydGVkLg0KPiA+ICsqKi8N Cj4gPiArU1RBVElDDQo+ID4gK0lOVDMyDQo+ID4gK0NyeXB0b05pZFRvT3BlbnNzbE5pZCAoDQo+ ID4gKyAgSU4gVUlOVE4gIENyeXB0b05pZA0KPiA+ICsgICkNCj4gPiArew0KPiA+ICsgIElOVDMy ICBOaWQ7DQo+ID4gKw0KPiA+ICsgIHN3aXRjaCAoQ3J5cHRvTmlkKSB7DQo+ID4gKyAgICBjYXNl IENSWVBUT19OSURfU0VDUDI1NlIxOg0KPiA+ICsgICAgICBOaWQgPSBOSURfWDlfNjJfcHJpbWUy NTZ2MTsNCj4gPiArICAgICAgYnJlYWs7DQo+ID4gKyAgICBjYXNlIENSWVBUT19OSURfU0VDUDM4 NFIxOg0KPiA+ICsgICAgICBOaWQgPSBOSURfc2VjcDM4NHIxOw0KPiA+ICsgICAgICBicmVhazsN Cj4gPiArICAgIGNhc2UgQ1JZUFRPX05JRF9TRUNQNTIxUjE6DQo+ID4gKyAgICAgIE5pZCA9IE5J RF9zZWNwNTIxcjE7DQo+ID4gKyAgICAgIGJyZWFrOw0KPiA+ICsgICAgZGVmYXVsdDoNCj4gPiAr ICAgICAgcmV0dXJuIC0xOw0KPiA+ICsgIH0NCj4gPiArDQo+ID4gKyAgcmV0dXJuIE5pZDsNCj4g PiArfQ0KPiA+ICsNCj4gPiArLyoqDQo+ID4gKyAgSW5pdGlhbGl6ZSBuZXcgb3BhcXVlIEVjR3Jv dXAgb2JqZWN0LiBUaGlzIG9iamVjdCByZXByZXNlbnRzIGFuIEVDIGN1cnZlIGFuZA0KPiA+ICsg IGFuZCBpcyB1c2VkIGZvciBjYWxjdWxhdGlvbiB3aXRoaW4gdGhpcyBncm91cC4gVGhpcyBvYmpl Y3Qgc2hvdWxkIGJlIGZyZWVkDQo+ID4gKyAgdXNpbmcgRWNHcm91cEZyZWUoKSBmdW5jdGlvbi4N Cj4gPiArDQo+ID4gKyAgQHBhcmFtW2luXSAgQ3J5cHRvTmlkICAgSWRlbnRpZnlpbmcgbnVtYmVy IGZvciB0aGUgRUNDIGN1cnZlIChEZWZpbmVkIGluDQo+ID4gKyAgICAgICAgICAgICAgICAgICAg ICAgICAgQmFzZUNyeXB0TGliLmgpLg0KPiA+ICsNCj4gPiArICBAcmV0dmFsIEVjR3JvdXAgb2Jq ZWN0ICBPbiBzdWNjZXNzLg0KPiA+ICsgIEByZXR2YWwgTlVMTCAgICAgICAgICAgIE9uIGZhaWx1 cmUuDQo+ID4gKyoqLw0KPiA+ICtWT0lEICoNCj4gPiArRUZJQVBJDQo+ID4gK0VjR3JvdXBJbml0 ICgNCj4gPiArICBJTiBVSU5UTiAgQ3J5cHRvTmlkDQo+ID4gKyAgKQ0KPiA+ICt7DQo+ID4gKyAg SU5UMzIgIE5pZDsNCj4gPiArDQo+ID4gKyAgTmlkID0gQ3J5cHRvTmlkVG9PcGVuc3NsTmlkIChD cnlwdG9OaWQpOw0KPiA+ICsNCj4gPiArICBpZiAoTmlkIDwgMCkgew0KPiA+ICsgICAgcmV0dXJu IE5VTEw7DQo+ID4gKyAgfQ0KPiA+ICsNCj4gPiArICByZXR1cm4gRUNfR1JPVVBfbmV3X2J5X2N1 cnZlX25hbWUgKE5pZCk7DQo+ID4gK30NCj4gPiArDQo+ID4gKy8qKg0KPiA+ICsgIEdldCBFQyBj dXJ2ZSBwYXJhbWV0ZXJzLiBXaGlsZSBlbGxpcHRpYyBjdXJ2ZSBlcXVhdGlvbiBpcyBZXjIgbW9k IFAgPSAoWF4zICsgQVggKyBCKSBNb2QgUC4NCj4gPiArICBUaGlzIGZ1bmN0aW9uIHdpbGwgc2V0 IHRoZSBwcm92aWRlZCBCaWcgTnVtYmVyIG9iamVjdHMgIHRvIHRoZSBjb3JyZXNwb25kaW5nDQo+ ID4gKyAgdmFsdWVzLiBUaGUgY2FsbGVyIG5lZWRzIHRvIG1ha2Ugc3VyZSBhbGwgdGhlICJvdXQi IEJpZ051bWJlciBwYXJhbWV0ZXJzDQo+ID4gKyAgYXJlIHByb3Blcmx5IGluaXRpYWxpemVkLg0K PiA+ICsNCj4gPiArICBAcGFyYW1baW5dICBFY0dyb3VwICAgIEVDIGdyb3VwIG9iamVjdC4NCj4g PiArICBAcGFyYW1bb3V0XSBCblByaW1lICAgIEdyb3VwIHByaW1lIG51bWJlci4NCj4gPiArICBA cGFyYW1bb3V0XSBCbkEgICAgICAgIEEgY29lZmZpY2llbnQuDQo+ID4gKyAgQHBhcmFtW291dF0g Qm5CICAgICAgICBCIGNvZWZmaWNpZW50Li4NCj4gPiArICBAcGFyYW1baW5dICBCbkN0eCAgICAg IEJOIGNvbnRleHQuDQo+ID4gKw0KPiA+ICsgIEByZXR2YWwgVFJVRSAgICAgICAgICBPbiBzdWNj ZXNzLg0KPiA+ICsgIEByZXR2YWwgRkFMU0UgICAgICAgICBPdGhlcndpc2UuDQo+ID4gKyoqLw0K PiA+ICtCT09MRUFODQo+ID4gK0VGSUFQSQ0KPiA+ICtFY0dyb3VwR2V0Q3VydmUgKA0KPiA+ICsg IElOIENPTlNUIFZPSUQgICpFY0dyb3VwLA0KPiA+ICsgIE9VVCBWT0lEICAgICAgICpCblByaW1l LA0KPiA+ICsgIE9VVCBWT0lEICAgICAgICpCbkEsDQo+ID4gKyAgT1VUIFZPSUQgICAgICAgKkJu QiwNCj4gPiArICBJTiBWT0lEICAgICAgICAqQm5DdHgNCj4gPiArICApDQo+ID4gK3sNCj4gPiAr ICByZXR1cm4gKEJPT0xFQU4pRUNfR1JPVVBfZ2V0X2N1cnZlIChFY0dyb3VwLCBCblByaW1lLCBC bkEsIEJuQiwgQm5DdHgpOw0KPiA+ICt9DQo+ID4gKw0KPiA+ICsvKioNCj4gPiArICBHZXQgRUMg Z3JvdXAgb3JkZXIuDQo+ID4gKyAgVGhpcyBmdW5jdGlvbiB3aWxsIHNldCB0aGUgcHJvdmlkZWQg QmlnIE51bWJlciBvYmplY3QgdG8gdGhlIGNvcnJlc3BvbmRpbmcNCj4gPiArICB2YWx1ZS4gVGhl IGNhbGxlciBuZWVkcyB0byBtYWtlIHN1cmUgdGhhdCB0aGUgIm91dCIgQmlnTnVtYmVyIHBhcmFt ZXRlcg0KPiA+ICsgIGlzIHByb3Blcmx5IGluaXRpYWxpemVkLg0KPiA+ICsNCj4gPiArICBAcGFy YW1baW5dICBFY0dyb3VwICAgRUMgZ3JvdXAgb2JqZWN0Lg0KPiA+ICsgIEBwYXJhbVtvdXRdIEJu T3JkZXIgICBHcm91cCBwcmltZSBudW1iZXIuDQo+ID4gKw0KPiA+ICsgIEByZXR2YWwgVFJVRSAg ICAgICAgICBPbiBzdWNjZXNzLg0KPiA+ICsgIEByZXR2YWwgRkFMU0UgICAgICAgICBPdGhlcndp c2UuDQo+ID4gKyoqLw0KPiA+ICtCT09MRUFODQo+ID4gK0VGSUFQSQ0KPiA+ICtFY0dyb3VwR2V0 T3JkZXIgKA0KPiA+ICsgIElOIFZPSUQgICAqRWNHcm91cCwNCj4gPiArICBPVVQgVk9JRCAgKkJu T3JkZXINCj4gPiArICApDQo+ID4gK3sNCj4gPiArICByZXR1cm4gKEJPT0xFQU4pRUNfR1JPVVBf Z2V0X29yZGVyIChFY0dyb3VwLCBCbk9yZGVyLCBOVUxMKTsNCj4gPiArfQ0KPiA+ICsNCj4gPiAr LyoqDQo+ID4gKyAgRnJlZSBwcmV2aW91c2x5IGFsbG9jYXRlZCBFQyBncm91cCBvYmplY3QgdXNp bmcgRWNHcm91cEluaXQoKS4NCj4gPiArDQo+ID4gKyAgQHBhcmFtW2luXSAgRWNHcm91cCAgIEVD IGdyb3VwIG9iamVjdCB0byBmcmVlLg0KPiA+ICsqKi8NCj4gPiArVk9JRA0KPiA+ICtFRklBUEkN Cj4gPiArRWNHcm91cEZyZWUgKA0KPiA+ICsgIElOIFZPSUQgICpFY0dyb3VwDQo+ID4gKyAgKQ0K PiA+ICt7DQo+ID4gKyAgRUNfR1JPVVBfZnJlZSAoRWNHcm91cCk7DQo+ID4gK30NCj4gPiArDQo+ ID4gKy8qKg0KPiA+ICsgIEluaXRpYWxpemUgbmV3IG9wYXF1ZSBFQyBQb2ludCBvYmplY3QuIFRo aXMgb2JqZWN0IHJlcHJlc2VudHMgYW4gRUMgcG9pbnQNCj4gPiArICB3aXRoaW4gdGhlIGdpdmVu IEVDIGdyb3VwIChjdXJ2ZSkuDQo+ID4gKw0KPiA+ICsgIEBwYXJhbVtpbl0gIEVDIEdyb3VwLCBw cm9wZXJseSBpbml0aWFsaXplZCB1c2luZyBFY0dyb3VwSW5pdCgpLg0KPiA+ICsNCj4gPiArICBA cmV0dmFsIEVDIFBvaW50IG9iamVjdCAgT24gc3VjY2Vzcy4NCj4gPiArICBAcmV0dmFsIE5VTEwg ICAgICAgICAgICAgT24gZmFpbHVyZS4NCj4gPiArKiovDQo+ID4gK1ZPSUQgKg0KPiA+ICtFRklB UEkNCj4gPiArRWNQb2ludEluaXQgKA0KPiA+ICsgIElOIENPTlNUIFZPSUQgICpFY0dyb3VwDQo+ ID4gKyAgKQ0KPiA+ICt7DQo+ID4gKyAgcmV0dXJuIEVDX1BPSU5UX25ldyAoRWNHcm91cCk7DQo+ ID4gK30NCj4gPiArDQo+ID4gKy8qKg0KPiA+ICsgIEZyZWUgcHJldmlvdXNseSBhbGxvY2F0ZWQg RUMgUG9pbnQgb2JqZWN0IHVzaW5nIEVjUG9pbnRJbml0KCkuDQo+ID4gKw0KPiA+ICsgIEBwYXJh bVtpbl0gIEVjUG9pbnQgICBFQyBQb2ludCB0byBmcmVlLg0KPiA+ICsgIEBwYXJhbVtpbl0gIENs ZWFyICAgICBUUlVFIGlmZiB0aGUgbWVtb3J5IHNob3VsZCBiZSBjbGVhcmVkLg0KPiA+ICsqKi8N Cj4gPiArVk9JRA0KPiA+ICtFRklBUEkNCj4gPiArRWNQb2ludERlSW5pdCAoDQo+ID4gKyAgSU4g Vk9JRCAgICAgKkVjUG9pbnQsDQo+ID4gKyAgSU4gQk9PTEVBTiAgQ2xlYXINCj4gPiArICApDQo+ ID4gK3sNCj4gPiArICBpZiAoQ2xlYXIpIHsNCj4gPiArICAgIEVDX1BPSU5UX2NsZWFyX2ZyZWUg KEVjUG9pbnQpOw0KPiA+ICsgIH0gZWxzZSB7DQo+ID4gKyAgICBFQ19QT0lOVF9mcmVlIChFY1Bv aW50KTsNCj4gPiArICB9DQo+ID4gK30NCj4gPiArDQo+ID4gKy8qKg0KPiA+ICsgIEdldCBFQyBw b2ludCBhZmZpbmUgKHgseSkgY29vcmRpbmF0ZXMuDQo+ID4gKyAgVGhpcyBmdW5jdGlvbiB3aWxs IHNldCB0aGUgcHJvdmlkZWQgQmlnIE51bWJlciBvYmplY3RzIHRvIHRoZSBjb3JyZXNwb25kaW5n DQo+ID4gKyAgdmFsdWVzLiBUaGUgY2FsbGVyIG5lZWRzIHRvIG1ha2Ugc3VyZSBhbGwgdGhlICJv dXQiIEJpZ051bWJlciBwYXJhbWV0ZXJzDQo+ID4gKyAgYXJlIHByb3Blcmx5IGluaXRpYWxpemVk Lg0KPiA+ICsNCj4gPiArICBAcGFyYW1baW5dICBFY0dyb3VwICAgIEVDIGdyb3VwIG9iamVjdC4N Cj4gPiArICBAcGFyYW1baW5dICBFY1BvaW50ICAgIEVDIHBvaW50IG9iamVjdC4NCj4gPiArICBA cGFyYW1bb3V0XSBCblggICAgICAgIFggY29vcmRpbmF0ZS4NCj4gPiArICBAcGFyYW1bb3V0XSBC blkgICAgICAgIFkgY29vcmRpbmF0ZS4NCj4gPiArICBAcGFyYW1baW5dICBCbkN0eCAgICAgIEJO IGNvbnRleHQsIGNyZWF0ZWQgd2l0aCBCaWdOdW1OZXdDb250ZXh0KCkuDQo+ID4gKw0KPiA+ICsg IEByZXR2YWwgVFJVRSAgICAgICAgICBPbiBzdWNjZXNzLg0KPiA+ICsgIEByZXR2YWwgRkFMU0Ug ICAgICAgICBPdGhlcndpc2UuDQo+ID4gKyoqLw0KPiA+ICtCT09MRUFODQo+ID4gK0VGSUFQSQ0K PiA+ICtFY1BvaW50R2V0QWZmaW5lQ29vcmRpbmF0ZXMgKA0KPiA+ICsgIElOIENPTlNUIFZPSUQg ICpFY0dyb3VwLA0KPiA+ICsgIElOIENPTlNUIFZPSUQgICpFY1BvaW50LA0KPiA+ICsgIE9VVCBW T0lEICAgICAgICpCblgsDQo+ID4gKyAgT1VUIFZPSUQgICAgICAgKkJuWSwNCj4gPiArICBJTiBW T0lEICAgICAgICAqQm5DdHgNCj4gPiArICApDQo+ID4gK3sNCj4gPiArICByZXR1cm4gKEJPT0xF QU4pRUNfUE9JTlRfZ2V0X2FmZmluZV9jb29yZGluYXRlcyAoRWNHcm91cCwgRWNQb2ludCwgQm5Y LCBCblksIEJuQ3R4KTsNCj4gPiArfQ0KPiA+ICsNCj4gPiArLyoqDQo+ID4gKyAgU2V0IEVDIHBv aW50IGFmZmluZSAoeCx5KSBjb29yZGluYXRlcy4NCj4gPiArDQo+ID4gKyAgQHBhcmFtW2luXSAg RWNHcm91cCAgICBFQyBncm91cCBvYmplY3QuDQo+ID4gKyAgQHBhcmFtW2luXSAgRWNQb2ludCAg ICBFQyBwb2ludCBvYmplY3QuDQo+ID4gKyAgQHBhcmFtW2luXSAgQm5YICAgICAgICBYIGNvb3Jk aW5hdGUuDQo+ID4gKyAgQHBhcmFtW2luXSAgQm5ZICAgICAgICBZIGNvb3JkaW5hdGUuDQo+ID4g KyAgQHBhcmFtW2luXSAgQm5DdHggICAgICBCTiBjb250ZXh0LCBjcmVhdGVkIHdpdGggQmlnTnVt TmV3Q29udGV4dCgpLg0KPiA+ICsNCj4gPiArICBAcmV0dmFsIFRSVUUgICAgICAgICAgT24gc3Vj Y2Vzcy4NCj4gPiArICBAcmV0dmFsIEZBTFNFICAgICAgICAgT3RoZXJ3aXNlLg0KPiA+ICsqKi8N Cj4gPiArQk9PTEVBTg0KPiA+ICtFRklBUEkNCj4gPiArRWNQb2ludFNldEFmZmluZUNvb3JkaW5h dGVzICgNCj4gPiArICBJTiBDT05TVCBWT0lEICAqRWNHcm91cCwNCj4gPiArICBJTiBWT0lEICAg ICAgICAqRWNQb2ludCwNCj4gPiArICBJTiBDT05TVCBWT0lEICAqQm5YLA0KPiA+ICsgIElOIENP TlNUIFZPSUQgICpCblksDQo+ID4gKyAgSU4gVk9JRCAgICAgICAgKkJuQ3R4DQo+ID4gKyAgKQ0K PiA+ICt7DQo+ID4gKyAgcmV0dXJuIChCT09MRUFOKUVDX1BPSU5UX3NldF9hZmZpbmVfY29vcmRp bmF0ZXMgKEVjR3JvdXAsIEVjUG9pbnQsIEJuWCwgQm5ZLCBCbkN0eCk7DQo+ID4gK30NCj4gPiAr DQo+ID4gKy8qKg0KPiA+ICsgIEVDIFBvaW50IGFkZGl0aW9uLiBFY1BvaW50UmVzdWx0ID0gRWNQ b2ludEEgKyBFY1BvaW50Qi4NCj4gPiArDQo+ID4gKyAgQHBhcmFtW2luXSAgRWNHcm91cCAgICAg ICAgICBFQyBncm91cCBvYmplY3QuDQo+ID4gKyAgQHBhcmFtW291dF0gRWNQb2ludFJlc3VsdCAg ICBFQyBwb2ludCB0byBob2xkIHRoZSByZXN1bHQuIFRoZSBwb2ludCBzaG91bGQNCj4gPiArICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJlIHByb3Blcmx5IGluaXRpYWxpemVkLg0KPiA+ ICsgIEBwYXJhbVtpbl0gIEVjUG9pbnRBICAgICAgICAgRUMgUG9pbnQuDQo+ID4gKyAgQHBhcmFt W2luXSAgRWNQb2ludEIgICAgICAgICBFQyBQb2ludC4NCj4gPiArICBAcGFyYW1baW5dICBCbkN0 eCAgICAgICAgICAgIEJOIGNvbnRleHQsIGNyZWF0ZWQgd2l0aCBCaWdOdW1OZXdDb250ZXh0KCku DQo+ID4gKw0KPiA+ICsgIEByZXR2YWwgVFJVRSAgICAgICAgICBPbiBzdWNjZXNzLg0KPiA+ICsg IEByZXR2YWwgRkFMU0UgICAgICAgICBPdGhlcndpc2UuDQo+ID4gKyoqLw0KPiA+ICtCT09MRUFO DQo+ID4gK0VGSUFQSQ0KPiA+ICtFY1BvaW50QWRkICgNCj4gPiArICBJTiBDT05TVCBWT0lEICAq RWNHcm91cCwNCj4gPiArICBPVVQgVk9JRCAgICAgICAqRWNQb2ludFJlc3VsdCwNCj4gPiArICBJ TiBDT05TVCBWT0lEICAqRWNQb2ludEEsDQo+ID4gKyAgSU4gQ09OU1QgVk9JRCAgKkVjUG9pbnRC LA0KPiA+ICsgIElOIFZPSUQgICAgICAgICpCbkN0eA0KPiA+ICsgICkNCj4gPiArew0KPiA+ICsg IHJldHVybiAoQk9PTEVBTilFQ19QT0lOVF9hZGQgKEVjR3JvdXAsIEVjUG9pbnRSZXN1bHQsIEVj UG9pbnRBLCBFY1BvaW50QiwgQm5DdHgpOw0KPiA+ICt9DQo+ID4gKw0KPiA+ICsvKioNCj4gPiAr ICBWYXJpYWJsZSBFQyBwb2ludCBtdWx0aXBsaWNhdGlvbi4gRWNQb2ludFJlc3VsdCA9IEVjUG9p bnQgKiBCblBTY2FsYXIuDQo+ID4gKw0KPiA+ICsgIEBwYXJhbVtpbl0gIEVjR3JvdXAgICAgICAg ICAgRUMgZ3JvdXAgb2JqZWN0Lg0KPiA+ICsgIEBwYXJhbVtvdXRdIEVjUG9pbnRSZXN1bHQgICAg RUMgcG9pbnQgdG8gaG9sZCB0aGUgcmVzdWx0LiBUaGUgcG9pbnQgc2hvdWxkDQo+ID4gKyAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBiZSBwcm9wZXJseSBpbml0aWFsaXplZC4NCj4gPiAr ICBAcGFyYW1baW5dICBFY1BvaW50ICAgICAgICAgIEVDIFBvaW50Lg0KPiA+ICsgIEBwYXJhbVtp bl0gIEJuUFNjYWxhciAgICAgICAgUCBTY2FsYXIuDQo+ID4gKyAgQHBhcmFtW2luXSAgQm5DdHgg ICAgICAgICAgICBCTiBjb250ZXh0LCBjcmVhdGVkIHdpdGggQmlnTnVtTmV3Q29udGV4dCgpLg0K PiA+ICsNCj4gPiArICBAcmV0dmFsIFRSVUUgICAgICAgICAgT24gc3VjY2Vzcy4NCj4gPiArICBA cmV0dmFsIEZBTFNFICAgICAgICAgT3RoZXJ3aXNlLg0KPiA+ICsqKi8NCj4gPiArQk9PTEVBTg0K PiA+ICtFRklBUEkNCj4gPiArRWNQb2ludE11bCAoDQo+ID4gKyAgSU4gQ09OU1QgVk9JRCAgKkVj R3JvdXAsDQo+ID4gKyAgT1VUIFZPSUQgICAgICAgKkVjUG9pbnRSZXN1bHQsDQo+ID4gKyAgSU4g Q09OU1QgVk9JRCAgKkVjUG9pbnQsDQo+ID4gKyAgSU4gQ09OU1QgVk9JRCAgKkJuUFNjYWxhciwN Cj4gPiArICBJTiBWT0lEICAgICAgICAqQm5DdHgNCj4gPiArICApDQo+ID4gK3sNCj4gPiArICBy ZXR1cm4gKEJPT0xFQU4pRUNfUE9JTlRfbXVsIChFY0dyb3VwLCBFY1BvaW50UmVzdWx0LCBOVUxM LCBFY1BvaW50LCBCblBTY2FsYXIsIEJuQ3R4KTsNCj4gPiArfQ0KPiA+ICsNCj4gPiArLyoqDQo+ ID4gKyAgQ2FsY3VsYXRlIHRoZSBpbnZlcnNlIG9mIHRoZSBzdXBwbGllZCBFQyBwb2ludC4NCj4g PiArDQo+ID4gKyAgQHBhcmFtW2luXSAgICAgRWNHcm91cCAgIEVDIGdyb3VwIG9iamVjdC4NCj4g PiArICBAcGFyYW1baW4sb3V0XSBFY1BvaW50ICAgRUMgcG9pbnQgdG8gaW52ZXJ0Lg0KPiA+ICsg IEBwYXJhbVtpbl0gICAgIEJuQ3R4ICAgICBCTiBjb250ZXh0LCBjcmVhdGVkIHdpdGggQmlnTnVt TmV3Q29udGV4dCgpLg0KPiA+ICsNCj4gPiArICBAcmV0dmFsIFRSVUUgICAgICAgICAgT24gc3Vj Y2Vzcy4NCj4gPiArICBAcmV0dmFsIEZBTFNFICAgICAgICAgT3RoZXJ3aXNlLg0KPiA+ICsqKi8N Cj4gPiArQk9PTEVBTg0KPiA+ICtFRklBUEkNCj4gPiArRWNQb2ludEludmVydCAoDQo+ID4gKyAg SU4gQ09OU1QgVk9JRCAgKkVjR3JvdXAsDQo+ID4gKyAgSU4gT1VUIFZPSUQgICAgKkVjUG9pbnQs DQo+ID4gKyAgSU4gVk9JRCAgICAgICAgKkJuQ3R4DQo+ID4gKyAgKQ0KPiA+ICt7DQo+ID4gKyAg cmV0dXJuIChCT09MRUFOKUVDX1BPSU5UX2ludmVydCAoRWNHcm91cCwgRWNQb2ludCwgQm5DdHgp Ow0KPiA+ICt9DQo+ID4gKw0KPiA+ICsvKioNCj4gPiArICBDaGVjayBpZiB0aGUgc3VwcGxpZWQg cG9pbnQgaXMgb24gRUMgY3VydmUuDQo+ID4gKw0KPiA+ICsgIEBwYXJhbVtpbl0gIEVjR3JvdXAg ICBFQyBncm91cCBvYmplY3QuDQo+ID4gKyAgQHBhcmFtW2luXSAgRWNQb2ludCAgIEVDIHBvaW50 IHRvIGNoZWNrLg0KPiA+ICsgIEBwYXJhbVtpbl0gIEJuQ3R4ICAgICBCTiBjb250ZXh0LCBjcmVh dGVkIHdpdGggQmlnTnVtTmV3Q29udGV4dCgpLg0KPiA+ICsNCj4gPiArICBAcmV0dmFsIFRSVUUg ICAgICAgICAgT24gY3VydmUuDQo+ID4gKyAgQHJldHZhbCBGQUxTRSAgICAgICAgIE90aGVyd2lz ZS4NCj4gPiArKiovDQo+ID4gK0JPT0xFQU4NCj4gPiArRUZJQVBJDQo+ID4gK0VjUG9pbnRJc09u Q3VydmUgKA0KPiA+ICsgIElOIENPTlNUIFZPSUQgICpFY0dyb3VwLA0KPiA+ICsgIElOIENPTlNU IFZPSUQgICpFY1BvaW50LA0KPiA+ICsgIElOIFZPSUQgICAgICAgICpCbkN0eA0KPiA+ICsgICkN Cj4gPiArew0KPiA+ICsgIHJldHVybiBFQ19QT0lOVF9pc19vbl9jdXJ2ZSAoRWNHcm91cCwgRWNQ b2ludCwgQm5DdHgpID09IDE7DQo+ID4gK30NCj4gPiArDQo+ID4gKy8qKg0KPiA+ICsgIENoZWNr IGlmIHRoZSBzdXBwbGllZCBwb2ludCBpcyBhdCBpbmZpbml0eS4NCj4gPiArDQo+ID4gKyAgQHBh cmFtW2luXSAgRWNHcm91cCAgIEVDIGdyb3VwIG9iamVjdC4NCj4gPiArICBAcGFyYW1baW5dICBF Y1BvaW50ICAgRUMgcG9pbnQgdG8gY2hlY2suDQo+ID4gKw0KPiA+ICsgIEByZXR2YWwgVFJVRSAg ICAgICAgICBBdCBpbmZpbml0eS4NCj4gPiArICBAcmV0dmFsIEZBTFNFICAgICAgICAgT3RoZXJ3 aXNlLg0KPiA+ICsqKi8NCj4gPiArQk9PTEVBTg0KPiA+ICtFRklBUEkNCj4gPiArRWNQb2ludElz QXRJbmZpbml0eSAoDQo+ID4gKyAgSU4gQ09OU1QgVk9JRCAgKkVjR3JvdXAsDQo+ID4gKyAgSU4g Q09OU1QgVk9JRCAgKkVjUG9pbnQNCj4gPiArICApDQo+ID4gK3sNCj4gPiArICByZXR1cm4gRUNf UE9JTlRfaXNfYXRfaW5maW5pdHkgKEVjR3JvdXAsIEVjUG9pbnQpID09IDE7DQo+ID4gK30NCj4g PiArDQo+ID4gKy8qKg0KPiA+ICsgIENoZWNrIGlmIEVDIHBvaW50cyBhcmUgZXF1YWwuDQo+ID4g Kw0KPiA+ICsgIEBwYXJhbVtpbl0gIEVjR3JvdXAgICBFQyBncm91cCBvYmplY3QuDQo+ID4gKyAg QHBhcmFtW2luXSAgRWNQb2ludEEgIEVDIHBvaW50IEEuDQo+ID4gKyAgQHBhcmFtW2luXSAgRWNQ b2ludEIgIEVDIHBvaW50IEIuDQo+ID4gKyAgQHBhcmFtW2luXSAgQm5DdHggICAgIEJOIGNvbnRl eHQsIGNyZWF0ZWQgd2l0aCBCaWdOdW1OZXdDb250ZXh0KCkuDQo+ID4gKw0KPiA+ICsgIEByZXR2 YWwgVFJVRSAgICAgICAgICBBID09IEIuDQo+ID4gKyAgQHJldHZhbCBGQUxTRSAgICAgICAgIE90 aGVyd2lzZS4NCj4gPiArKiovDQo+ID4gK0JPT0xFQU4NCj4gPiArRUZJQVBJDQo+ID4gK0VjUG9p bnRFcXVhbCAoDQo+ID4gKyAgSU4gQ09OU1QgVk9JRCAgKkVjR3JvdXAsDQo+ID4gKyAgSU4gQ09O U1QgVk9JRCAgKkVjUG9pbnRBLA0KPiA+ICsgIElOIENPTlNUIFZPSUQgICpFY1BvaW50QiwNCj4g PiArICBJTiBWT0lEICAgICAgICAqQm5DdHgNCj4gPiArICApDQo+ID4gK3sNCj4gPiArICByZXR1 cm4gRUNfUE9JTlRfY21wIChFY0dyb3VwLCBFY1BvaW50QSwgRWNQb2ludEIsIEJuQ3R4KSA9PSAw Ow0KPiA+ICt9DQo+ID4gKw0KPiA+ICsvKioNCj4gPiArICBTZXQgRUMgcG9pbnQgY29tcHJlc3Nl ZCBjb29yZGluYXRlcy4gUG9pbnRzIGNhbiBiZSBkZXNjcmliZWQgaW4gdGVybXMgb2YNCj4gPiAr ICB0aGVpciBjb21wcmVzc2VkIGNvb3JkaW5hdGVzLiBGb3IgYSBwb2ludCAoeCwgeSksIGZvciBh bnkgZ2l2ZW4gdmFsdWUgZm9yIHgNCj4gPiArICBzdWNoIHRoYXQgdGhlIHBvaW50IGlzIG9uIHRo ZSBjdXJ2ZSB0aGVyZSB3aWxsIG9ubHkgZXZlciBiZSB0d28gcG9zc2libGUNCj4gPiArICB2YWx1 ZXMgZm9yIHkuIFRoZXJlZm9yZSwgYSBwb2ludCBjYW4gYmUgc2V0IHVzaW5nIHRoaXMgZnVuY3Rp b24gd2hlcmUgQm5YIGlzDQo+ID4gKyAgdGhlIHggY29vcmRpbmF0ZSBhbmQgWUJpdCBpcyBhIHZh bHVlIDAgb3IgMSB0byBpZGVudGlmeSB3aGljaCBvZiB0aGUgdHdvDQo+ID4gKyAgcG9zc2libGUg dmFsdWVzIGZvciB5IHNob3VsZCBiZSB1c2VkLg0KPiA+ICsNCj4gPiArICBAcGFyYW1baW5dICBF Y0dyb3VwICAgIEVDIGdyb3VwIG9iamVjdC4NCj4gPiArICBAcGFyYW1baW5dICBFY1BvaW50ICAg IEVDIFBvaW50Lg0KPiA+ICsgIEBwYXJhbVtpbl0gIEJuWCAgICAgICAgWCBjb29yZGluYXRlLg0K PiA+ICsgIEBwYXJhbVtpbl0gIFlCaXQgICAgICAgMCBvciAxIHRvIGlkZW50aWZ5IHdoaWNoIFkg dmFsdWUgaXMgdXNlZC4NCj4gPiArICBAcGFyYW1baW5dICBCbkN0eCAgICAgIEJOIGNvbnRleHQs IGNyZWF0ZWQgd2l0aCBCaWdOdW1OZXdDb250ZXh0KCkuDQo+ID4gKw0KPiA+ICsgIEByZXR2YWwg VFJVRSAgICAgICAgICBPbiBzdWNjZXNzLg0KPiA+ICsgIEByZXR2YWwgRkFMU0UgICAgICAgICBP dGhlcndpc2UuDQo+ID4gKyoqLw0KPiA+ICtCT09MRUFODQo+ID4gK0VGSUFQSQ0KPiA+ICtFY1Bv aW50U2V0Q29tcHJlc3NlZENvb3JkaW5hdGVzICgNCj4gPiArICBJTiBDT05TVCBWT0lEICAqRWNH cm91cCwNCj4gPiArICBJTiBWT0lEICAgICAgICAqRWNQb2ludCwNCj4gPiArICBJTiBDT05TVCBW T0lEICAqQm5YLA0KPiA+ICsgIElOIFVJTlQ4ICAgICAgIFlCaXQsDQo+ID4gKyAgSU4gVk9JRCAg ICAgICAgKkJuQ3R4DQo+ID4gKyAgKQ0KPiA+ICt7DQo+ID4gKyAgcmV0dXJuIChCT09MRUFOKUVD X1BPSU5UX3NldF9jb21wcmVzc2VkX2Nvb3JkaW5hdGVzIChFY0dyb3VwLCBFY1BvaW50LCBCblgs IFlCaXQsIEJuQ3R4KTsNCj4gPiArfQ0KPiA+ICsNCj4gPiArLy8gPT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PQ0KPiA+ICsvLyAgICBFbGxpcHRpYyBDdXJ2ZSBEaWZmaWUgSGVsbG1hbiBQcmlt aXRpdmVzDQo+ID4gKy8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0NCj4gPiArDQo+ID4g Ky8qKg0KPiA+ICsgIEFsbG9jYXRlcyBhbmQgSW5pdGlhbGl6ZXMgb25lIEVsbGlwdGljIEN1cnZl IENvbnRleHQgZm9yIHN1YnNlcXVlbnQgdXNlDQo+ID4gKyAgd2l0aCB0aGUgTklELg0KPiA+ICsN Cj4gPiArICBAcGFyYW1baW5dICBOaWQgICBJZGVudGlmeWluZyBudW1iZXIgZm9yIHRoZSBFQ0Mg Y3VydmUgKERlZmluZWQgaW4NCj4gPiArICAgICAgICAgICAgICAgICAgICBCYXNlQ3J5cHRMaWIu aCkuDQo+ID4gKyAgQHJldHVybiAgICAgUG9pbnRlciB0byB0aGUgRWxsaXB0aWMgQ3VydmUgQ29u dGV4dCB0aGF0IGhhcyBiZWVuIGluaXRpYWxpemVkLg0KPiA+ICsgICAgICAgICAgICAgIElmIHRo ZSBhbGxvY2F0aW9ucyBmYWlscywgRWNOZXdCeU5pZCgpIHJldHVybnMgTlVMTC4NCj4gPiArKiov DQo+ID4gK1ZPSUQgKg0KPiA+ICtFRklBUEkNCj4gPiArRWNOZXdCeU5pZCAoDQo+ID4gKyAgSU4g VUlOVE4gIE5pZA0KPiA+ICsgICkNCj4gPiArew0KPiA+ICsgIElOVDMyICBPcGVuU3NsTmlkOw0K PiA+ICsNCj4gPiArICBPcGVuU3NsTmlkID0gQ3J5cHRvTmlkVG9PcGVuc3NsTmlkIChOaWQpOw0K PiA+ICsgIGlmIChPcGVuU3NsTmlkIDwgMCkgew0KPiA+ICsgICAgcmV0dXJuIE5VTEw7DQo+ID4g KyAgfQ0KPiA+ICsNCj4gPiArICByZXR1cm4gKFZPSUQgKilFQ19LRVlfbmV3X2J5X2N1cnZlX25h bWUgKE9wZW5Tc2xOaWQpOw0KPiA+ICt9DQo+ID4gKw0KPiA+ICsvKioNCj4gPiArICBSZWxlYXNl IHRoZSBzcGVjaWZpZWQgRUMgY29udGV4dC4NCj4gPiArDQo+ID4gKyAgQHBhcmFtW2luXSAgRWND b250ZXh0ICBQb2ludGVyIHRvIHRoZSBFQyBjb250ZXh0IHRvIGJlIHJlbGVhc2VkLg0KPiA+ICsq Ki8NCj4gPiArVk9JRA0KPiA+ICtFRklBUEkNCj4gPiArRWNGcmVlICgNCj4gPiArICBJTiAgVk9J RCAgKkVjQ29udGV4dA0KPiA+ICsgICkNCj4gPiArew0KPiA+ICsgIEVDX0tFWV9mcmVlICgoRUNf S0VZICopRWNDb250ZXh0KTsNCj4gPiArfQ0KPiA+ICsNCj4gPiArLyoqDQo+ID4gKyAgR2VuZXJh dGVzIEVDIGtleSBhbmQgcmV0dXJucyBFQyBwdWJsaWMga2V5IChYLCBZKSwgUGxlYXNlIG5vdGUs IHRoaXMgZnVuY3Rpb24gdXNlcw0KPiA+ICsgIHBzZXVkbyByYW5kb20gbnVtYmVyIGdlbmVyYXRv ci4gVGhlIGNhbGxlciBtdXN0IG1ha2Ugc3VyZSBSYW5kb21TZWVkKCkNCj4gPiArICBmdW5jdGlv biB3YXMgcHJvcGVybHkgY2FsbGVkIGJlZm9yZS4NCj4gPiArICBUaGUgRWMgY29udGV4dCBzaG91 bGQgYmUgY29ycmVjdGx5IGluaXRpYWxpemVkIGJ5IEVjTmV3QnlOaWQuDQo+ID4gKyAgVGhpcyBm dW5jdGlvbiBnZW5lcmF0ZXMgcmFuZG9tIHNlY3JldCwgYW5kIGNvbXB1dGVzIHRoZSBwdWJsaWMg a2V5IChYLCBZKSwgd2hpY2ggaXMNCj4gPiArICByZXR1cm5lZCB2aWEgcGFyYW1ldGVyIFB1Ymxp YywgUHVibGljU2l6ZS4NCj4gPiArICBYIGlzIHRoZSBmaXJzdCBoYWxmIG9mIFB1YmxpYyB3aXRo IHNpemUgYmVpbmcgUHVibGljU2l6ZSAvIDIsDQo+ID4gKyAgWSBpcyB0aGUgc2Vjb25kIGhhbGYg b2YgUHVibGljIHdpdGggc2l6ZSBiZWluZyBQdWJsaWNTaXplIC8gMi4NCj4gPiArICBFQyBjb250 ZXh0IGlzIHVwZGF0ZWQgYWNjb3JkaW5nbHkuDQo+ID4gKyAgSWYgdGhlIFB1YmxpYyBidWZmZXIg aXMgdG9vIHNtYWxsIHRvIGhvbGQgdGhlIHB1YmxpYyBYLCBZLCBGQUxTRSBpcyByZXR1cm5lZCBh bmQNCj4gPiArICBQdWJsaWNTaXplIGlzIHNldCB0byB0aGUgcmVxdWlyZWQgYnVmZmVyIHNpemUg dG8gb2J0YWluIHRoZSBwdWJsaWMgWCwgWS4NCj4gPiArICBGb3IgUC0yNTYsIHRoZSBQdWJsaWNT aXplIGlzIDY0LiBGaXJzdCAzMi1ieXRlIGlzIFgsIFNlY29uZCAzMi1ieXRlIGlzIFkuDQo+ID4g KyAgRm9yIFAtMzg0LCB0aGUgUHVibGljU2l6ZSBpcyA5Ni4gRmlyc3QgNDgtYnl0ZSBpcyBYLCBT ZWNvbmQgNDgtYnl0ZSBpcyBZLg0KPiA+ICsgIEZvciBQLTUyMSwgdGhlIFB1YmxpY1NpemUgaXMg MTMyLiBGaXJzdCA2Ni1ieXRlIGlzIFgsIFNlY29uZCA2Ni1ieXRlIGlzIFkuDQo+ID4gKyAgSWYg RWNDb250ZXh0IGlzIE5VTEwsIHRoZW4gcmV0dXJuIEZBTFNFLg0KPiA+ICsgIElmIFB1YmxpY1Np emUgaXMgTlVMTCwgdGhlbiByZXR1cm4gRkFMU0UuDQo+ID4gKyAgSWYgUHVibGljU2l6ZSBpcyBs YXJnZSBlbm91Z2ggYnV0IFB1YmxpYyBpcyBOVUxMLCB0aGVuIHJldHVybiBGQUxTRS4NCj4gPiAr ICBAcGFyYW1baW4sIG91dF0gIEVjQ29udGV4dCAgICAgIFBvaW50ZXIgdG8gdGhlIEVDIGNvbnRl eHQuDQo+ID4gKyAgQHBhcmFtW291dF0gICAgICBQdWJsaWNLZXkgICAgICBQb2ludGVyIHRvIHQg YnVmZmVyIHRvIHJlY2VpdmUgZ2VuZXJhdGVkIHB1YmxpYyBYLFkuDQo+ID4gKyAgQHBhcmFtW2lu LCBvdXRdICBQdWJsaWNLZXlTaXplICBPbiBpbnB1dCwgdGhlIHNpemUgb2YgUHVibGljIGJ1ZmZl ciBpbiBieXRlcy4NCj4gPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE9uIG91 dHB1dCwgdGhlIHNpemUgb2YgZGF0YSByZXR1cm5lZCBpbiBQdWJsaWMgYnVmZmVyIGluIGJ5dGVz Lg0KPiA+ICsgIEByZXR2YWwgVFJVRSAgIEVDIHB1YmxpYyBYLFkgZ2VuZXJhdGlvbiBzdWNjZWVk ZWQuDQo+ID4gKyAgQHJldHZhbCBGQUxTRSAgRUMgcHVibGljIFgsWSBnZW5lcmF0aW9uIGZhaWxl ZC4NCj4gPiArICBAcmV0dmFsIEZBTFNFICBQdWJsaWNLZXlTaXplIGlzIG5vdCBsYXJnZSBlbm91 Z2guDQo+ID4gKyoqLw0KPiA+ICtCT09MRUFODQo+ID4gK0VGSUFQSQ0KPiA+ICtFY0dlbmVyYXRl S2V5ICgNCj4gPiArICBJTiBPVVQgIFZPSUQgICAqRWNDb250ZXh0LA0KPiA+ICsgIE9VVCAgICAg VUlOVDggICpQdWJsaWNLZXksDQo+ID4gKyAgSU4gT1VUICBVSU5UTiAgKlB1YmxpY0tleVNpemUN Cj4gPiArICApDQo+ID4gK3sNCj4gPiArICBFQ19LRVkgICAgICAgICAgKkVjS2V5Ow0KPiA+ICsg IENPTlNUIEVDX0dST1VQICAqR3JvdXA7DQo+ID4gKyAgQ09OU1QgRUNfUE9JTlQgICpFY1BvaW50 Ow0KPiA+ICsgIEJPT0xFQU4gICAgICAgICBSZXRWYWw7DQo+ID4gKyAgQklHTlVNICAgICAgICAg ICpCblg7DQo+ID4gKyAgQklHTlVNICAgICAgICAgICpCblk7DQo+ID4gKyAgVUlOVE4gICAgICAg ICAgIEhhbGZTaXplOw0KPiA+ICsgIElOVE4gICAgICAgICAgICBYU2l6ZTsNCj4gPiArICBJTlRO ICAgICAgICAgICAgWVNpemU7DQo+ID4gKw0KPiA+ICsgIGlmICgoRWNDb250ZXh0ID09IE5VTEwp IHx8IChQdWJsaWNLZXlTaXplID09IE5VTEwpKSB7DQo+ID4gKyAgICByZXR1cm4gRkFMU0U7DQo+ ID4gKyAgfQ0KPiA+ICsNCj4gPiArICBpZiAoKFB1YmxpY0tleSA9PSBOVUxMKSAmJiAoKlB1Ymxp Y0tleVNpemUgIT0gMCkpIHsNCj4gPiArICAgIHJldHVybiBGQUxTRTsNCj4gPiArICB9DQo+ID4g Kw0KPiA+ICsgIEVjS2V5ICAgID0gKEVDX0tFWSAqKUVjQ29udGV4dDsNCj4gPiArICBHcm91cCAg ICA9IEVDX0tFWV9nZXQwX2dyb3VwIChFY0tleSk7DQo+ID4gKyAgSGFsZlNpemUgPSAoRUNfR1JP VVBfZ2V0X2RlZ3JlZSAoR3JvdXApICsgNykgLyA4Ow0KPiA+ICsNCj4gPiArICAvLyBBc3N1bWUg UkFORF9zZWVkIHdhcyBjYWxsZWQNCj4gPiArICBpZiAoRUNfS0VZX2dlbmVyYXRlX2tleSAoRWNL ZXkpICE9IDEpIHsNCj4gPiArICAgIHJldHVybiBGQUxTRTsNCj4gPiArICB9DQo+ID4gKw0KPiA+ ICsgIGlmICgqUHVibGljS2V5U2l6ZSA8IEhhbGZTaXplICogMikgew0KPiA+ICsgICAgKlB1Ymxp Y0tleVNpemUgPSBIYWxmU2l6ZSAqIDI7DQo+ID4gKyAgICByZXR1cm4gRkFMU0U7DQo+ID4gKyAg fQ0KPiA+ICsNCj4gPiArICAqUHVibGljS2V5U2l6ZSA9IEhhbGZTaXplICogMjsNCj4gPiArDQo+ ID4gKyAgRWNQb2ludCA9IEVDX0tFWV9nZXQwX3B1YmxpY19rZXkgKEVjS2V5KTsNCj4gPiArICBp ZiAoRWNQb2ludCA9PSBOVUxMKSB7DQo+ID4gKyAgICByZXR1cm4gRkFMU0U7DQo+ID4gKyAgfQ0K PiA+ICsNCj4gPiArICBSZXRWYWwgPSBGQUxTRTsNCj4gPiArICBCblggICAgPSBCTl9uZXcgKCk7 DQo+ID4gKyAgQm5ZICAgID0gQk5fbmV3ICgpOw0KPiA+ICsgIGlmICgoQm5YID09IE5VTEwpIHx8 IChCblkgPT0gTlVMTCkpIHsNCj4gPiArICAgIGdvdG8gZmFpbDsNCj4gPiArICB9DQo+ID4gKw0K PiA+ICsgIGlmIChFQ19QT0lOVF9nZXRfYWZmaW5lX2Nvb3JkaW5hdGVzIChHcm91cCwgRWNQb2lu dCwgQm5YLCBCblksIE5VTEwpICE9IDEpIHsNCj4gPiArICAgIGdvdG8gZmFpbDsNCj4gPiArICB9 DQo+ID4gKw0KPiA+ICsgIFhTaXplID0gQk5fbnVtX2J5dGVzIChCblgpOw0KPiA+ICsgIFlTaXpl ID0gQk5fbnVtX2J5dGVzIChCblkpOw0KPiA+ICsgIGlmICgoWFNpemUgPD0gMCkgfHwgKFlTaXpl IDw9IDApKSB7DQo+ID4gKyAgICBnb3RvIGZhaWw7DQo+ID4gKyAgfQ0KPiA+ICsNCj4gPiArICBB U1NFUlQgKChVSU5UTilYU2l6ZSA8PSBIYWxmU2l6ZSAmJiAoVUlOVE4pWVNpemUgPD0gSGFsZlNp emUpOw0KPiA+ICsNCj4gPiArICBaZXJvTWVtIChQdWJsaWNLZXksICpQdWJsaWNLZXlTaXplKTsN Cj4gPiArICBCTl9ibjJiaW4gKEJuWCwgJlB1YmxpY0tleVswICsgSGFsZlNpemUgLSBYU2l6ZV0p Ow0KPiA+ICsgIEJOX2JuMmJpbiAoQm5ZLCAmUHVibGljS2V5W0hhbGZTaXplICsgSGFsZlNpemUg LSBZU2l6ZV0pOw0KPiA+ICsNCj4gPiArICBSZXRWYWwgPSBUUlVFOw0KPiA+ICsNCj4gPiArZmFp bDoNCj4gPiArICBCTl9mcmVlIChCblgpOw0KPiA+ICsgIEJOX2ZyZWUgKEJuWSk7DQo+ID4gKyAg cmV0dXJuIFJldFZhbDsNCj4gPiArfQ0KPiA+ICsNCj4gPiArLyoqDQo+ID4gKyAgR2V0cyB0aGUg cHVibGljIGtleSBjb21wb25lbnQgZnJvbSB0aGUgZXN0YWJsaXNoZWQgRUMgY29udGV4dC4NCj4g PiArICBUaGUgRWMgY29udGV4dCBzaG91bGQgYmUgY29ycmVjdGx5IGluaXRpYWxpemVkIGJ5IEVj TmV3QnlOaWQsIGFuZCBzdWNjZXNzZnVsbHkNCj4gPiArICBnZW5lcmF0ZSBrZXkgcGFpciBmcm9t IEVjR2VuZXJhdGVLZXkoKS4NCj4gPiArICBGb3IgUC0yNTYsIHRoZSBQdWJsaWNTaXplIGlzIDY0 LiBGaXJzdCAzMi1ieXRlIGlzIFgsIFNlY29uZCAzMi1ieXRlIGlzIFkuDQo+ID4gKyAgRm9yIFAt Mzg0LCB0aGUgUHVibGljU2l6ZSBpcyA5Ni4gRmlyc3QgNDgtYnl0ZSBpcyBYLCBTZWNvbmQgNDgt Ynl0ZSBpcyBZLg0KPiA+ICsgIEZvciBQLTUyMSwgdGhlIFB1YmxpY1NpemUgaXMgMTMyLiBGaXJz dCA2Ni1ieXRlIGlzIFgsIFNlY29uZCA2Ni1ieXRlIGlzIFkuDQo+ID4gKyAgQHBhcmFtW2luLCBv dXRdICBFY0NvbnRleHQgICAgICBQb2ludGVyIHRvIEVDIGNvbnRleHQgYmVpbmcgc2V0Lg0KPiA+ ICsgIEBwYXJhbVtvdXRdICAgICAgUHVibGljS2V5ICAgICAgUG9pbnRlciB0byB0IGJ1ZmZlciB0 byByZWNlaXZlIGdlbmVyYXRlZCBwdWJsaWMgWCxZLg0KPiA+ICsgIEBwYXJhbVtpbiwgb3V0XSAg UHVibGljS2V5U2l6ZSAgT24gaW5wdXQsIHRoZSBzaXplIG9mIFB1YmxpYyBidWZmZXIgaW4gYnl0 ZXMuDQo+ID4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBPbiBvdXRwdXQsIHRo ZSBzaXplIG9mIGRhdGEgcmV0dXJuZWQgaW4gUHVibGljIGJ1ZmZlciBpbiBieXRlcy4NCj4gPiAr ICBAcmV0dmFsICBUUlVFICAgRUMga2V5IGNvbXBvbmVudCB3YXMgcmV0cmlldmVkIHN1Y2Nlc3Nm dWxseS4NCj4gPiArICBAcmV0dmFsICBGQUxTRSAgSW52YWxpZCBFQyBrZXkgY29tcG9uZW50Lg0K PiA+ICsqKi8NCj4gPiArQk9PTEVBTg0KPiA+ICtFRklBUEkNCj4gPiArRWNHZXRQdWJLZXkgKA0K PiA+ICsgIElOIE9VVCAgVk9JRCAgICpFY0NvbnRleHQsDQo+ID4gKyAgT1VUICAgICBVSU5UOCAg KlB1YmxpY0tleSwNCj4gPiArICBJTiBPVVQgIFVJTlROICAqUHVibGljS2V5U2l6ZQ0KPiA+ICsg ICkNCj4gPiArew0KPiA+ICsgIEVDX0tFWSAgICAgICAgICAqRWNLZXk7DQo+ID4gKyAgQ09OU1Qg RUNfR1JPVVAgICpHcm91cDsNCj4gPiArICBDT05TVCBFQ19QT0lOVCAgKkVjUG9pbnQ7DQo+ID4g KyAgQklHTlVNICAgICAgICAgICpCblg7DQo+ID4gKyAgQklHTlVNICAgICAgICAgICpCblk7DQo+ ID4gKyAgVUlOVE4gICAgICAgICAgIEhhbGZTaXplOw0KPiA+ICsgIElOVE4gICAgICAgICAgICBY U2l6ZTsNCj4gPiArICBJTlROICAgICAgICAgICAgWVNpemU7DQo+ID4gKyAgQk9PTEVBTiAgICAg ICAgIFJldFZhbDsNCj4gPiArDQo+ID4gKyAgaWYgKChFY0NvbnRleHQgPT0gTlVMTCkgfHwgKFB1 YmxpY0tleVNpemUgPT0gTlVMTCkpIHsNCj4gPiArICAgIHJldHVybiBGQUxTRTsNCj4gPiArICB9 DQo+ID4gKw0KPiA+ICsgIGlmICgoUHVibGljS2V5ID09IE5VTEwpICYmICgqUHVibGljS2V5U2l6 ZSAhPSAwKSkgew0KPiA+ICsgICAgcmV0dXJuIEZBTFNFOw0KPiA+ICsgIH0NCj4gPiArDQo+ID4g KyAgRWNLZXkgICAgPSAoRUNfS0VZICopRWNDb250ZXh0Ow0KPiA+ICsgIEdyb3VwICAgID0gRUNf S0VZX2dldDBfZ3JvdXAgKEVjS2V5KTsNCj4gPiArICBIYWxmU2l6ZSA9IChFQ19HUk9VUF9nZXRf ZGVncmVlIChHcm91cCkgKyA3KSAvIDg7DQo+ID4gKyAgaWYgKCpQdWJsaWNLZXlTaXplIDwgSGFs ZlNpemUgKiAyKSB7DQo+ID4gKyAgICAqUHVibGljS2V5U2l6ZSA9IEhhbGZTaXplICogMjsNCj4g PiArICAgIHJldHVybiBGQUxTRTsNCj4gPiArICB9DQo+ID4gKw0KPiA+ICsgICpQdWJsaWNLZXlT aXplID0gSGFsZlNpemUgKiAyOw0KPiA+ICsNCj4gPiArICBFY1BvaW50ID0gRUNfS0VZX2dldDBf cHVibGljX2tleSAoRWNLZXkpOw0KPiA+ICsgIGlmIChFY1BvaW50ID09IE5VTEwpIHsNCj4gPiAr ICAgIHJldHVybiBGQUxTRTsNCj4gPiArICB9DQo+ID4gKw0KPiA+ICsgIFJldFZhbCA9IEZBTFNF Ow0KPiA+ICsgIEJuWCAgICA9IEJOX25ldyAoKTsNCj4gPiArICBCblkgICAgPSBCTl9uZXcgKCk7 DQo+ID4gKyAgaWYgKChCblggPT0gTlVMTCkgfHwgKEJuWSA9PSBOVUxMKSkgew0KPiA+ICsgICAg Z290byBmYWlsOw0KPiA+ICsgIH0NCj4gPiArDQo+ID4gKyAgaWYgKEVDX1BPSU5UX2dldF9hZmZp bmVfY29vcmRpbmF0ZXMgKEdyb3VwLCBFY1BvaW50LCBCblgsIEJuWSwgTlVMTCkgIT0gMSkgew0K PiA+ICsgICAgZ290byBmYWlsOw0KPiA+ICsgIH0NCj4gPiArDQo+ID4gKyAgWFNpemUgPSBCTl9u dW1fYnl0ZXMgKEJuWCk7DQo+ID4gKyAgWVNpemUgPSBCTl9udW1fYnl0ZXMgKEJuWSk7DQo+ID4g KyAgaWYgKChYU2l6ZSA8PSAwKSB8fCAoWVNpemUgPD0gMCkpIHsNCj4gPiArICAgIGdvdG8gZmFp bDsNCj4gPiArICB9DQo+ID4gKw0KPiA+ICsgIEFTU0VSVCAoKFVJTlROKVhTaXplIDw9IEhhbGZT aXplICYmIChVSU5UTilZU2l6ZSA8PSBIYWxmU2l6ZSk7DQo+ID4gKw0KPiA+ICsgIGlmIChQdWJs aWNLZXkgIT0gTlVMTCkgew0KPiA+ICsgICAgWmVyb01lbSAoUHVibGljS2V5LCAqUHVibGljS2V5 U2l6ZSk7DQo+ID4gKyAgICBCTl9ibjJiaW4gKEJuWCwgJlB1YmxpY0tleVswICsgSGFsZlNpemUg LSBYU2l6ZV0pOw0KPiA+ICsgICAgQk5fYm4yYmluIChCblksICZQdWJsaWNLZXlbSGFsZlNpemUg KyBIYWxmU2l6ZSAtIFlTaXplXSk7DQo+ID4gKyAgfQ0KPiA+ICsNCj4gPiArICBSZXRWYWwgPSBU UlVFOw0KPiA+ICsNCj4gPiArZmFpbDoNCj4gPiArICBCTl9mcmVlIChCblgpOw0KPiA+ICsgIEJO X2ZyZWUgKEJuWSk7DQo+ID4gKyAgcmV0dXJuIFJldFZhbDsNCj4gPiArfQ0KPiA+ICsNCj4gPiAr LyoqDQo+ID4gKyAgQ29tcHV0ZXMgZXhjaGFuZ2VkIGNvbW1vbiBrZXkuDQo+ID4gKyAgR2l2ZW4g cGVlcidzIHB1YmxpYyBrZXkgKFgsIFkpLCB0aGlzIGZ1bmN0aW9uIGNvbXB1dGVzIHRoZSBleGNo YW5nZWQgY29tbW9uIGtleSwNCj4gPiArICBiYXNlZCBvbiBpdHMgb3duIGNvbnRleHQgaW5jbHVk aW5nIHZhbHVlIG9mIGN1cnZlIHBhcmFtZXRlciBhbmQgcmFuZG9tIHNlY3JldC4NCj4gPiArICBY IGlzIHRoZSBmaXJzdCBoYWxmIG9mIFBlZXJQdWJsaWMgd2l0aCBzaXplIGJlaW5nIFBlZXJQdWJs aWNTaXplIC8gMiwNCj4gPiArICBZIGlzIHRoZSBzZWNvbmQgaGFsZiBvZiBQZWVyUHVibGljIHdp dGggc2l6ZSBiZWluZyBQZWVyUHVibGljU2l6ZSAvIDIuDQo+ID4gKyAgSWYgcHVibGljIGtleSBp cyBjb21wcmVzc2VkLCB0aGUgUGVlclB1YmxpYyB3aWxsIG9ubHkgY29udGFpbiBoYWxmIGtleSAo WCkuDQo+ID4gKyAgSWYgRWNDb250ZXh0IGlzIE5VTEwsIHRoZW4gcmV0dXJuIEZBTFNFLg0KPiA+ ICsgIElmIFBlZXJQdWJsaWMgaXMgTlVMTCwgdGhlbiByZXR1cm4gRkFMU0UuDQo+ID4gKyAgSWYg UGVlclB1YmxpY1NpemUgaXMgMCwgdGhlbiByZXR1cm4gRkFMU0UuDQo+ID4gKyAgSWYgS2V5IGlz IE5VTEwsIHRoZW4gcmV0dXJuIEZBTFNFLg0KPiA+ICsgIElmIEtleVNpemUgaXMgbm90IGxhcmdl IGVub3VnaCwgdGhlbiByZXR1cm4gRkFMU0UuDQo+ID4gKyAgRm9yIFAtMjU2LCB0aGUgUGVlclB1 YmxpY1NpemUgaXMgNjQuIEZpcnN0IDMyLWJ5dGUgaXMgWCwgU2Vjb25kIDMyLWJ5dGUgaXMgWS4N Cj4gPiArICBGb3IgUC0zODQsIHRoZSBQZWVyUHVibGljU2l6ZSBpcyA5Ni4gRmlyc3QgNDgtYnl0 ZSBpcyBYLCBTZWNvbmQgNDgtYnl0ZSBpcyBZLg0KPiA+ICsgIEZvciBQLTUyMSwgdGhlIFBlZXJQ dWJsaWNTaXplIGlzIDEzMi4gRmlyc3QgNjYtYnl0ZSBpcyBYLCBTZWNvbmQgNjYtYnl0ZSBpcyBZ Lg0KPiA+ICsgIEBwYXJhbVtpbiwgb3V0XSAgRWNDb250ZXh0ICAgICAgICAgIFBvaW50ZXIgdG8g dGhlIEVDIGNvbnRleHQuDQo+ID4gKyAgQHBhcmFtW2luXSAgICAgICBQZWVyUHVibGljICAgICAg ICAgUG9pbnRlciB0byB0aGUgcGVlcidzIHB1YmxpYyBYLFkuDQo+ID4gKyAgQHBhcmFtW2luXSAg ICAgICBQZWVyUHVibGljU2l6ZSAgICAgU2l6ZSBvZiBwZWVyJ3MgcHVibGljIFgsWSBpbiBieXRl cy4NCj4gPiArICBAcGFyYW1baW5dICAgICAgIENvbXByZXNzRmxhZyAgICAgICBGbGFnIG9mIFBl ZXJQdWJsaWMgaXMgY29tcHJlc3NlZCBvciBub3QuDQo+ID4gKyAgQHBhcmFtW291dF0gICAgICBL ZXkgICAgICAgICAgICAgICAgUG9pbnRlciB0byB0aGUgYnVmZmVyIHRvIHJlY2VpdmUgZ2VuZXJh dGVkIGtleS4NCj4gPiArICBAcGFyYW1baW4sIG91dF0gIEtleVNpemUgICAgICAgICAgICBPbiBp bnB1dCwgdGhlIHNpemUgb2YgS2V5IGJ1ZmZlciBpbiBieXRlcy4NCj4gPiArICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBPbiBvdXRwdXQsIHRoZSBzaXplIG9mIGRhdGEgcmV0 dXJuZWQgaW4gS2V5IGJ1ZmZlciBpbiBieXRlcy4NCj4gPiArICBAcmV0dmFsIFRSVUUgICBFQyBl eGNoYW5nZWQga2V5IGdlbmVyYXRpb24gc3VjY2VlZGVkLg0KPiA+ICsgIEByZXR2YWwgRkFMU0Ug IEVDIGV4Y2hhbmdlZCBrZXkgZ2VuZXJhdGlvbiBmYWlsZWQuDQo+ID4gKyAgQHJldHZhbCBGQUxT RSAgS2V5U2l6ZSBpcyBub3QgbGFyZ2UgZW5vdWdoLg0KPiA+ICsqKi8NCj4gPiArQk9PTEVBTg0K PiA+ICtFRklBUEkNCj4gPiArRWNEaENvbXB1dGVLZXkgKA0KPiA+ICsgIElOIE9VVCAgVk9JRCAg ICAgICAgICpFY0NvbnRleHQsDQo+ID4gKyAgSU4gICAgICBDT05TVCBVSU5UOCAgKlBlZXJQdWJs aWMsDQo+ID4gKyAgSU4gICAgICBVSU5UTiAgICAgICAgUGVlclB1YmxpY1NpemUsDQo+ID4gKyAg SU4gICAgICBDT05TVCBJTlQzMiAgKkNvbXByZXNzRmxhZywNCj4gPiArICBPVVQgICAgIFVJTlQ4 ICAgICAgICAqS2V5LA0KPiA+ICsgIElOIE9VVCAgVUlOVE4gICAgICAgICpLZXlTaXplDQo+ID4g KyAgKQ0KPiA+ICt7DQo+ID4gKyAgRUNfS0VZICAgICAgICAgICpFY0tleTsNCj4gPiArICBFQ19L RVkgICAgICAgICAgKlBlZXJFY0tleTsNCj4gPiArICBDT05TVCBFQ19HUk9VUCAgKkdyb3VwOw0K PiA+ICsgIEJPT0xFQU4gICAgICAgICBSZXRWYWw7DQo+ID4gKyAgQklHTlVNICAgICAgICAgICpC blg7DQo+ID4gKyAgQklHTlVNICAgICAgICAgICpCblk7DQo+ID4gKyAgRUNfUE9JTlQgICAgICAg ICpQb2ludDsNCj4gPiArICBJTlQzMiAgICAgICAgICAgT3BlblNzbE5pZDsNCj4gPiArICBVSU5U TiAgICAgICAgICAgSGFsZlNpemU7DQo+ID4gKw0KPiA+ICsgIGlmICgoRWNDb250ZXh0ID09IE5V TEwpIHx8IChQZWVyUHVibGljID09IE5VTEwpIHx8IChLZXlTaXplID09IE5VTEwpKSB7DQo+ID4g KyAgICByZXR1cm4gRkFMU0U7DQo+ID4gKyAgfQ0KPiA+ICsNCj4gPiArICBpZiAoKEtleSA9PSBO VUxMKSAmJiAoKktleVNpemUgIT0gMCkpIHsNCj4gPiArICAgIHJldHVybiBGQUxTRTsNCj4gPiAr ICB9DQo+ID4gKw0KPiA+ICsgIGlmIChQZWVyUHVibGljU2l6ZSA+IElOVF9NQVgpIHsNCj4gPiAr ICAgIHJldHVybiBGQUxTRTsNCj4gPiArICB9DQo+ID4gKw0KPiA+ICsgIEVjS2V5ICAgID0gKEVD X0tFWSAqKUVjQ29udGV4dDsNCj4gPiArICBHcm91cCAgICA9IEVDX0tFWV9nZXQwX2dyb3VwIChF Y0tleSk7DQo+ID4gKyAgSGFsZlNpemUgPSAoRUNfR1JPVVBfZ2V0X2RlZ3JlZSAoR3JvdXApICsg NykgLyA4Ow0KPiA+ICsgIGlmICgoQ29tcHJlc3NGbGFnID09IE5VTEwpICYmIChQZWVyUHVibGlj U2l6ZSAhPSBIYWxmU2l6ZSAqIDIpKSB7DQo+ID4gKyAgICByZXR1cm4gRkFMU0U7DQo+ID4gKyAg fQ0KPiA+ICsNCj4gPiArICBpZiAoKENvbXByZXNzRmxhZyAhPSBOVUxMKSAmJiAoUGVlclB1Ymxp Y1NpemUgIT0gSGFsZlNpemUpKSB7DQo+ID4gKyAgICByZXR1cm4gRkFMU0U7DQo+ID4gKyAgfQ0K PiA+ICsNCj4gPiArICBpZiAoKktleVNpemUgPCBIYWxmU2l6ZSkgew0KPiA+ICsgICAgKktleVNp emUgPSBIYWxmU2l6ZTsNCj4gPiArICAgIHJldHVybiBGQUxTRTsNCj4gPiArICB9DQo+ID4gKw0K PiA+ICsgICpLZXlTaXplID0gSGFsZlNpemU7DQo+ID4gKw0KPiA+ICsgIFJldFZhbCAgICA9IEZB TFNFOw0KPiA+ICsgIFBvaW50ICAgICA9IE5VTEw7DQo+ID4gKyAgQm5YICAgICAgID0gQk5fYmlu MmJuIChQZWVyUHVibGljLCAoSU5UMzIpSGFsZlNpemUsIE5VTEwpOw0KPiA+ICsgIEJuWSAgICAg ICA9IE5VTEw7DQo+ID4gKyAgUG9pbnQgICAgID0gRUNfUE9JTlRfbmV3IChHcm91cCk7DQo+ID4g KyAgUGVlckVjS2V5ID0gTlVMTDsNCj4gPiArICBpZiAoKEJuWCA9PSBOVUxMKSB8fCAoUG9pbnQg PT0gTlVMTCkpIHsNCj4gPiArICAgIGdvdG8gZmFpbDsNCj4gPiArICB9DQo+ID4gKw0KPiA+ICsg IGlmIChDb21wcmVzc0ZsYWcgPT0gTlVMTCkgew0KPiA+ICsgICAgQm5ZID0gQk5fYmluMmJuIChQ ZWVyUHVibGljICsgSGFsZlNpemUsIChJTlQzMilIYWxmU2l6ZSwgTlVMTCk7DQo+ID4gKyAgICBp ZiAoQm5ZID09IE5VTEwpIHsNCj4gPiArICAgICAgZ290byBmYWlsOw0KPiA+ICsgICAgfQ0KPiA+ ICsNCj4gPiArICAgIGlmIChFQ19QT0lOVF9zZXRfYWZmaW5lX2Nvb3JkaW5hdGVzIChHcm91cCwg UG9pbnQsIEJuWCwgQm5ZLCBOVUxMKSAhPSAxKSB7DQo+ID4gKyAgICAgIGdvdG8gZmFpbDsNCj4g PiArICAgIH0NCj4gPiArICB9IGVsc2Ugew0KPiA+ICsgICAgaWYgKEVDX1BPSU5UX3NldF9jb21w cmVzc2VkX2Nvb3JkaW5hdGVzIChHcm91cCwgUG9pbnQsIEJuWCwgKkNvbXByZXNzRmxhZywgTlVM TCkgIT0gMSkgew0KPiA+ICsgICAgICBnb3RvIGZhaWw7DQo+ID4gKyAgICB9DQo+ID4gKyAgfQ0K PiA+ICsNCj4gPiArICAvLyBWYWxpZGF0ZSBOSVNUIEVDREggcHVibGljIGtleQ0KPiA+ICsgIE9w ZW5Tc2xOaWQgPSBFQ19HUk9VUF9nZXRfY3VydmVfbmFtZSAoR3JvdXApOw0KPiA+ICsgIFBlZXJF Y0tleSAgPSBFQ19LRVlfbmV3X2J5X2N1cnZlX25hbWUgKE9wZW5Tc2xOaWQpOw0KPiA+ICsgIGlm IChQZWVyRWNLZXkgPT0gTlVMTCkgew0KPiA+ICsgICAgZ290byBmYWlsOw0KPiA+ICsgIH0NCj4g PiArDQo+ID4gKyAgaWYgKEVDX0tFWV9zZXRfcHVibGljX2tleSAoUGVlckVjS2V5LCBQb2ludCkg IT0gMSkgew0KPiA+ICsgICAgZ290byBmYWlsOw0KPiA+ICsgIH0NCj4gPiArDQo+ID4gKyAgaWYg KEVDX0tFWV9jaGVja19rZXkgKFBlZXJFY0tleSkgIT0gMSkgew0KPiA+ICsgICAgZ290byBmYWls Ow0KPiA+ICsgIH0NCj4gPiArDQo+ID4gKyAgaWYgKEVDREhfY29tcHV0ZV9rZXkgKEtleSwgKktl eVNpemUsIFBvaW50LCBFY0tleSwgTlVMTCkgPD0gMCkgew0KPiA+ICsgICAgZ290byBmYWlsOw0K PiA+ICsgIH0NCj4gPiArDQo+ID4gKyAgUmV0VmFsID0gVFJVRTsNCj4gPiArDQo+ID4gK2ZhaWw6 DQo+ID4gKyAgQk5fZnJlZSAoQm5YKTsNCj4gPiArICBCTl9mcmVlIChCblkpOw0KPiA+ICsgIEVD X1BPSU5UX2ZyZWUgKFBvaW50KTsNCj4gPiArICBFQ19LRVlfZnJlZSAoUGVlckVjS2V5KTsNCj4g PiArICByZXR1cm4gUmV0VmFsOw0KPiA+ICt9DQo+ID4gZGlmZiAtLWdpdCBhL0NyeXB0b1BrZy9M aWJyYXJ5L0Jhc2VDcnlwdExpYi9Qay9DcnlwdEVjTnVsbC5jIGIvQ3J5cHRvUGtnL0xpYnJhcnkv QmFzZUNyeXB0TGliL1BrL0NyeXB0RWNOdWxsLmMNCj4gPiBuZXcgZmlsZSBtb2RlIDEwMDY0NA0K PiA+IGluZGV4IDAwMDAwMDAwMDAuLmQ5ZjEwMDRmNmMNCj4gPiAtLS0gL2Rldi9udWxsDQo+ID4g KysrIGIvQ3J5cHRvUGtnL0xpYnJhcnkvQmFzZUNyeXB0TGliL1BrL0NyeXB0RWNOdWxsLmMNCj4g PiBAQCAtMCwwICsxLDQ5NiBAQA0KPiA+ICsvKiogQGZpbGUNCj4gPiArICBFbGxpcHRpYyBDdXJ2 ZSBhbmQgRUNESCBBUEkgaW1wbGVtZW50YXRpb24gYmFzZWQgb24gT3BlblNTTA0KPiA+ICsNCj4g PiArICBDb3B5cmlnaHQgKGMpIDIwMjIsIEludGVsIENvcnBvcmF0aW9uLiBBbGwgcmlnaHRzIHJl c2VydmVkLjxCUj4NCj4gPiArICBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQlNELTItQ2xhdXNl LVBhdGVudA0KPiA+ICsNCj4gPiArKiovDQo+ID4gKw0KPiA+ICsjaW5jbHVkZSA8TGlicmFyeS9C YXNlQ3J5cHRMaWIuaD4NCj4gPiArI2luY2x1ZGUgPExpYnJhcnkvRGVidWdMaWIuaD4NCj4gPiAr DQo+ID4gKy8qKg0KPiA+ICsgIEluaXRpYWxpemUgbmV3IG9wYXF1ZSBFY0dyb3VwIG9iamVjdC4g VGhpcyBvYmplY3QgcmVwcmVzZW50cyBhbiBFQyBjdXJ2ZSBhbmQNCj4gPiArICBhbmQgaXMgdXNl ZCBmb3IgY2FsY3VsYXRpb24gd2l0aGluIHRoaXMgZ3JvdXAuIFRoaXMgb2JqZWN0IHNob3VsZCBi ZSBmcmVlZA0KPiA+ICsgIHVzaW5nIEVjR3JvdXBGcmVlKCkgZnVuY3Rpb24uDQo+ID4gKw0KPiA+ ICsgIEBwYXJhbVtpbl0gIENyeXB0b05pZCAgIElkZW50aWZ5aW5nIG51bWJlciBmb3IgdGhlIEVD QyBjdXJ2ZSAoRGVmaW5lZCBpbg0KPiA+ICsgICAgICAgICAgICAgICAgICAgICAgICAgIEJhc2VD cnlwdExpYi5oKS4NCj4gPiArDQo+ID4gKyAgQHJldHZhbCBFY0dyb3VwIG9iamVjdCAgT24gc3Vj Y2Vzcy4NCj4gPiArICBAcmV0dmFsIE5VTEwgICAgICAgICAgICBPbiBmYWlsdXJlLg0KPiA+ICsq Ki8NCj4gPiArVk9JRCAqDQo+ID4gK0VGSUFQSQ0KPiA+ICtFY0dyb3VwSW5pdCAoDQo+ID4gKyAg SU4gVUlOVE4gIENyeXB0b05pZA0KPiA+ICsgICkNCj4gPiArew0KPiA+ICsgIEFTU0VSVCAoRkFM U0UpOw0KPiA+ICsgIHJldHVybiBOVUxMOw0KPiA+ICt9DQo+ID4gKw0KPiA+ICsvKioNCj4gPiAr ICBHZXQgRUMgY3VydmUgcGFyYW1ldGVycy4gV2hpbGUgZWxsaXB0aWMgY3VydmUgZXF1YXRpb24g aXMgWV4yIG1vZCBQID0gKFheMyArIEFYICsgQikgTW9kIFAuDQo+ID4gKyAgVGhpcyBmdW5jdGlv biB3aWxsIHNldCB0aGUgcHJvdmlkZWQgQmlnIE51bWJlciBvYmplY3RzICB0byB0aGUgY29ycmVz cG9uZGluZw0KPiA+ICsgIHZhbHVlcy4gVGhlIGNhbGxlciBuZWVkcyB0byBtYWtlIHN1cmUgYWxs IHRoZSAib3V0IiBCaWdOdW1iZXIgcGFyYW1ldGVycw0KPiA+ICsgIGFyZSBwcm9wZXJseSBpbml0 aWFsaXplZC4NCj4gPiArDQo+ID4gKyAgQHBhcmFtW2luXSAgRWNHcm91cCAgICBFQyBncm91cCBv YmplY3QuDQo+ID4gKyAgQHBhcmFtW291dF0gQm5QcmltZSAgICBHcm91cCBwcmltZSBudW1iZXIu DQo+ID4gKyAgQHBhcmFtW291dF0gQm5BICAgICAgICBBIGNvZWZmaWNpZW50Lg0KPiA+ICsgIEBw YXJhbVtvdXRdIEJuQiAgICAgICAgQiBjb2VmZmljaWVudC4uDQo+ID4gKyAgQHBhcmFtW2luXSAg Qm5DdHggICAgICBCTiBjb250ZXh0Lg0KPiA+ICsNCj4gPiArICBAcmV0dmFsIFRSVUUgICAgICAg ICAgT24gc3VjY2Vzcy4NCj4gPiArICBAcmV0dmFsIEZBTFNFICAgICAgICAgT3RoZXJ3aXNlLg0K PiA+ICsqKi8NCj4gPiArQk9PTEVBTg0KPiA+ICtFRklBUEkNCj4gPiArRWNHcm91cEdldEN1cnZl ICgNCj4gPiArICBJTiBDT05TVCBWT0lEICAqRWNHcm91cCwNCj4gPiArICBPVVQgVk9JRCAgICAg ICAqQm5QcmltZSwNCj4gPiArICBPVVQgVk9JRCAgICAgICAqQm5BLA0KPiA+ICsgIE9VVCBWT0lE ICAgICAgICpCbkIsDQo+ID4gKyAgSU4gVk9JRCAgICAgICAgKkJuQ3R4DQo+ID4gKyAgKQ0KPiA+ ICt7DQo+ID4gKyAgQVNTRVJUIChGQUxTRSk7DQo+ID4gKyAgcmV0dXJuIEZBTFNFOw0KPiA+ICt9 DQo+ID4gKw0KPiA+ICsvKioNCj4gPiArICBHZXQgRUMgZ3JvdXAgb3JkZXIuDQo+ID4gKyAgVGhp cyBmdW5jdGlvbiB3aWxsIHNldCB0aGUgcHJvdmlkZWQgQmlnIE51bWJlciBvYmplY3QgdG8gdGhl IGNvcnJlc3BvbmRpbmcNCj4gPiArICB2YWx1ZS4gVGhlIGNhbGxlciBuZWVkcyB0byBtYWtlIHN1 cmUgdGhhdCB0aGUgIm91dCIgQmlnTnVtYmVyIHBhcmFtZXRlcg0KPiA+ICsgIGlzIHByb3Blcmx5 IGluaXRpYWxpemVkLg0KPiA+ICsNCj4gPiArICBAcGFyYW1baW5dICBFY0dyb3VwICAgRUMgZ3Jv dXAgb2JqZWN0Lg0KPiA+ICsgIEBwYXJhbVtvdXRdIEJuT3JkZXIgICBHcm91cCBwcmltZSBudW1i ZXIuDQo+ID4gKw0KPiA+ICsgIEByZXR2YWwgVFJVRSAgICAgICAgICBPbiBzdWNjZXNzLg0KPiA+ ICsgIEByZXR2YWwgRkFMU0UgICAgICAgICBPdGhlcndpc2UuDQo+ID4gKyoqLw0KPiA+ICtCT09M RUFODQo+ID4gK0VGSUFQSQ0KPiA+ICtFY0dyb3VwR2V0T3JkZXIgKA0KPiA+ICsgIElOIFZPSUQg ICAqRWNHcm91cCwNCj4gPiArICBPVVQgVk9JRCAgKkJuT3JkZXINCj4gPiArICApDQo+ID4gK3sN Cj4gPiArICBBU1NFUlQgKEZBTFNFKTsNCj4gPiArICByZXR1cm4gRkFMU0U7DQo+ID4gK30NCj4g PiArDQo+ID4gKy8qKg0KPiA+ICsgIEZyZWUgcHJldmlvdXNseSBhbGxvY2F0ZWQgRUMgZ3JvdXAg b2JqZWN0IHVzaW5nIEVjR3JvdXBJbml0KCkuDQo+ID4gKw0KPiA+ICsgIEBwYXJhbVtpbl0gIEVj R3JvdXAgICBFQyBncm91cCBvYmplY3QgdG8gZnJlZS4NCj4gPiArKiovDQo+ID4gK1ZPSUQNCj4g PiArRUZJQVBJDQo+ID4gK0VjR3JvdXBGcmVlICgNCj4gPiArICBJTiBWT0lEICAqRWNHcm91cA0K PiA+ICsgICkNCj4gPiArew0KPiA+ICsgIEFTU0VSVCAoRkFMU0UpOw0KPiA+ICt9DQo+ID4gKw0K PiA+ICsvKioNCj4gPiArICBJbml0aWFsaXplIG5ldyBvcGFxdWUgRUMgUG9pbnQgb2JqZWN0LiBU aGlzIG9iamVjdCByZXByZXNlbnRzIGFuIEVDIHBvaW50DQo+ID4gKyAgd2l0aGluIHRoZSBnaXZl biBFQyBncm91cCAoY3VydmUpLg0KPiA+ICsNCj4gPiArICBAcGFyYW1baW5dICBFQyBHcm91cCwg cHJvcGVybHkgaW5pdGlhbGl6ZWQgdXNpbmcgRWNHcm91cEluaXQoKS4NCj4gPiArDQo+ID4gKyAg QHJldHZhbCBFQyBQb2ludCBvYmplY3QgIE9uIHN1Y2Nlc3MuDQo+ID4gKyAgQHJldHZhbCBOVUxM ICAgICAgICAgICAgIE9uIGZhaWx1cmUuDQo+ID4gKyoqLw0KPiA+ICtWT0lEICoNCj4gPiArRUZJ QVBJDQo+ID4gK0VjUG9pbnRJbml0ICgNCj4gPiArICBJTiBDT05TVCBWT0lEICAqRWNHcm91cA0K PiA+ICsgICkNCj4gPiArew0KPiA+ICsgIEFTU0VSVCAoRkFMU0UpOw0KPiA+ICsgIHJldHVybiBO VUxMOw0KPiA+ICt9DQo+ID4gKw0KPiA+ICsvKioNCj4gPiArICBGcmVlIHByZXZpb3VzbHkgYWxs b2NhdGVkIEVDIFBvaW50IG9iamVjdCB1c2luZyBFY1BvaW50SW5pdCgpLg0KPiA+ICsNCj4gPiAr ICBAcGFyYW1baW5dICBFY1BvaW50ICAgRUMgUG9pbnQgdG8gZnJlZS4NCj4gPiArICBAcGFyYW1b aW5dICBDbGVhciAgICAgVFJVRSBpZmYgdGhlIG1lbW9yeSBzaG91bGQgYmUgY2xlYXJlZC4NCj4g PiArKiovDQo+ID4gK1ZPSUQNCj4gPiArRUZJQVBJDQo+ID4gK0VjUG9pbnREZUluaXQgKA0KPiA+ ICsgIElOIFZPSUQgICAgICpFY1BvaW50LA0KPiA+ICsgIElOIEJPT0xFQU4gIENsZWFyDQo+ID4g KyAgKQ0KPiA+ICt7DQo+ID4gKyAgQVNTRVJUIChGQUxTRSk7DQo+ID4gK30NCj4gPiArDQo+ID4g Ky8qKg0KPiA+ICsgIEdldCBFQyBwb2ludCBhZmZpbmUgKHgseSkgY29vcmRpbmF0ZXMuDQo+ID4g KyAgVGhpcyBmdW5jdGlvbiB3aWxsIHNldCB0aGUgcHJvdmlkZWQgQmlnIE51bWJlciBvYmplY3Rz IHRvIHRoZSBjb3JyZXNwb25kaW5nDQo+ID4gKyAgdmFsdWVzLiBUaGUgY2FsbGVyIG5lZWRzIHRv IG1ha2Ugc3VyZSBhbGwgdGhlICJvdXQiIEJpZ051bWJlciBwYXJhbWV0ZXJzDQo+ID4gKyAgYXJl IHByb3Blcmx5IGluaXRpYWxpemVkLg0KPiA+ICsNCj4gPiArICBAcGFyYW1baW5dICBFY0dyb3Vw ICAgIEVDIGdyb3VwIG9iamVjdC4NCj4gPiArICBAcGFyYW1baW5dICBFY1BvaW50ICAgIEVDIHBv aW50IG9iamVjdC4NCj4gPiArICBAcGFyYW1bb3V0XSBCblggICAgICAgIFggY29vcmRpbmF0ZS4N Cj4gPiArICBAcGFyYW1bb3V0XSBCblkgICAgICAgIFkgY29vcmRpbmF0ZS4NCj4gPiArICBAcGFy YW1baW5dICBCbkN0eCAgICAgIEJOIGNvbnRleHQsIGNyZWF0ZWQgd2l0aCBCaWdOdW1OZXdDb250 ZXh0KCkuDQo+ID4gKw0KPiA+ICsgIEByZXR2YWwgVFJVRSAgICAgICAgICBPbiBzdWNjZXNzLg0K PiA+ICsgIEByZXR2YWwgRkFMU0UgICAgICAgICBPdGhlcndpc2UuDQo+ID4gKyoqLw0KPiA+ICtC T09MRUFODQo+ID4gK0VGSUFQSQ0KPiA+ICtFY1BvaW50R2V0QWZmaW5lQ29vcmRpbmF0ZXMgKA0K PiA+ICsgIElOIENPTlNUIFZPSUQgICpFY0dyb3VwLA0KPiA+ICsgIElOIENPTlNUIFZPSUQgICpF Y1BvaW50LA0KPiA+ICsgIE9VVCBWT0lEICAgICAgICpCblgsDQo+ID4gKyAgT1VUIFZPSUQgICAg ICAgKkJuWSwNCj4gPiArICBJTiBWT0lEICAgICAgICAqQm5DdHgNCj4gPiArICApDQo+ID4gK3sN Cj4gPiArICBBU1NFUlQgKEZBTFNFKTsNCj4gPiArICByZXR1cm4gRkFMU0U7DQo+ID4gK30NCj4g PiArDQo+ID4gKy8qKg0KPiA+ICsgIFNldCBFQyBwb2ludCBhZmZpbmUgKHgseSkgY29vcmRpbmF0 ZXMuDQo+ID4gKw0KPiA+ICsgIEBwYXJhbVtpbl0gIEVjR3JvdXAgICAgRUMgZ3JvdXAgb2JqZWN0 Lg0KPiA+ICsgIEBwYXJhbVtpbl0gIEVjUG9pbnQgICAgRUMgcG9pbnQgb2JqZWN0Lg0KPiA+ICsg IEBwYXJhbVtpbl0gIEJuWCAgICAgICAgWCBjb29yZGluYXRlLg0KPiA+ICsgIEBwYXJhbVtpbl0g IEJuWSAgICAgICAgWSBjb29yZGluYXRlLg0KPiA+ICsgIEBwYXJhbVtpbl0gIEJuQ3R4ICAgICAg Qk4gY29udGV4dCwgY3JlYXRlZCB3aXRoIEJpZ051bU5ld0NvbnRleHQoKS4NCj4gPiArDQo+ID4g KyAgQHJldHZhbCBUUlVFICAgICAgICAgIE9uIHN1Y2Nlc3MuDQo+ID4gKyAgQHJldHZhbCBGQUxT RSAgICAgICAgIE90aGVyd2lzZS4NCj4gPiArKiovDQo+ID4gK0JPT0xFQU4NCj4gPiArRUZJQVBJ DQo+ID4gK0VjUG9pbnRTZXRBZmZpbmVDb29yZGluYXRlcyAoDQo+ID4gKyAgSU4gQ09OU1QgVk9J RCAgKkVjR3JvdXAsDQo+ID4gKyAgSU4gVk9JRCAgICAgICAgKkVjUG9pbnQsDQo+ID4gKyAgSU4g Q09OU1QgVk9JRCAgKkJuWCwNCj4gPiArICBJTiBDT05TVCBWT0lEICAqQm5ZLA0KPiA+ICsgIElO IFZPSUQgICAgICAgICpCbkN0eA0KPiA+ICsgICkNCj4gPiArew0KPiA+ICsgIEFTU0VSVCAoRkFM U0UpOw0KPiA+ICsgIHJldHVybiBGQUxTRTsNCj4gPiArfQ0KPiA+ICsNCj4gPiArLyoqDQo+ID4g KyAgRUMgUG9pbnQgYWRkaXRpb24uIEVjUG9pbnRSZXN1bHQgPSBFY1BvaW50QSArIEVjUG9pbnRC Lg0KPiA+ICsNCj4gPiArICBAcGFyYW1baW5dICBFY0dyb3VwICAgICAgICAgIEVDIGdyb3VwIG9i amVjdC4NCj4gPiArICBAcGFyYW1bb3V0XSBFY1BvaW50UmVzdWx0ICAgIEVDIHBvaW50IHRvIGhv bGQgdGhlIHJlc3VsdC4gVGhlIHBvaW50IHNob3VsZA0KPiA+ICsgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgYmUgcHJvcGVybHkgaW5pdGlhbGl6ZWQuDQo+ID4gKyAgQHBhcmFtW2luXSAg RWNQb2ludEEgICAgICAgICBFQyBQb2ludC4NCj4gPiArICBAcGFyYW1baW5dICBFY1BvaW50QiAg ICAgICAgIEVDIFBvaW50Lg0KPiA+ICsgIEBwYXJhbVtpbl0gIEJuQ3R4ICAgICAgICAgICAgQk4g Y29udGV4dCwgY3JlYXRlZCB3aXRoIEJpZ051bU5ld0NvbnRleHQoKS4NCj4gPiArDQo+ID4gKyAg QHJldHZhbCBUUlVFICAgICAgICAgIE9uIHN1Y2Nlc3MuDQo+ID4gKyAgQHJldHZhbCBGQUxTRSAg ICAgICAgIE90aGVyd2lzZS4NCj4gPiArKiovDQo+ID4gK0JPT0xFQU4NCj4gPiArRUZJQVBJDQo+ ID4gK0VjUG9pbnRBZGQgKA0KPiA+ICsgIElOIENPTlNUIFZPSUQgICpFY0dyb3VwLA0KPiA+ICsg IE9VVCBWT0lEICAgICAgICpFY1BvaW50UmVzdWx0LA0KPiA+ICsgIElOIENPTlNUIFZPSUQgICpF Y1BvaW50QSwNCj4gPiArICBJTiBDT05TVCBWT0lEICAqRWNQb2ludEIsDQo+ID4gKyAgSU4gVk9J RCAgICAgICAgKkJuQ3R4DQo+ID4gKyAgKQ0KPiA+ICt7DQo+ID4gKyAgQVNTRVJUIChGQUxTRSk7 DQo+ID4gKyAgcmV0dXJuIEZBTFNFOw0KPiA+ICt9DQo+ID4gKw0KPiA+ICsvKioNCj4gPiArICBW YXJpYWJsZSBFQyBwb2ludCBtdWx0aXBsaWNhdGlvbi4gRWNQb2ludFJlc3VsdCA9IEVjUG9pbnQg KiBCblBTY2FsYXIuDQo+ID4gKw0KPiA+ICsgIEBwYXJhbVtpbl0gIEVjR3JvdXAgICAgICAgICAg RUMgZ3JvdXAgb2JqZWN0Lg0KPiA+ICsgIEBwYXJhbVtvdXRdIEVjUG9pbnRSZXN1bHQgICAgRUMg cG9pbnQgdG8gaG9sZCB0aGUgcmVzdWx0LiBUaGUgcG9pbnQgc2hvdWxkDQo+ID4gKyAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBiZSBwcm9wZXJseSBpbml0aWFsaXplZC4NCj4gPiArICBA cGFyYW1baW5dICBFY1BvaW50ICAgICAgICAgIEVDIFBvaW50Lg0KPiA+ICsgIEBwYXJhbVtpbl0g IEJuUFNjYWxhciAgICAgICAgUCBTY2FsYXIuDQo+ID4gKyAgQHBhcmFtW2luXSAgQm5DdHggICAg ICAgICAgICBCTiBjb250ZXh0LCBjcmVhdGVkIHdpdGggQmlnTnVtTmV3Q29udGV4dCgpLg0KPiA+ ICsNCj4gPiArICBAcmV0dmFsIFRSVUUgICAgICAgICAgT24gc3VjY2Vzcy4NCj4gPiArICBAcmV0 dmFsIEZBTFNFICAgICAgICAgT3RoZXJ3aXNlLg0KPiA+ICsqKi8NCj4gPiArQk9PTEVBTg0KPiA+ ICtFRklBUEkNCj4gPiArRWNQb2ludE11bCAoDQo+ID4gKyAgSU4gQ09OU1QgVk9JRCAgKkVjR3Jv dXAsDQo+ID4gKyAgT1VUIFZPSUQgICAgICAgKkVjUG9pbnRSZXN1bHQsDQo+ID4gKyAgSU4gQ09O U1QgVk9JRCAgKkVjUG9pbnQsDQo+ID4gKyAgSU4gQ09OU1QgVk9JRCAgKkJuUFNjYWxhciwNCj4g PiArICBJTiBWT0lEICAgICAgICAqQm5DdHgNCj4gPiArICApDQo+ID4gK3sNCj4gPiArICBBU1NF UlQgKEZBTFNFKTsNCj4gPiArICByZXR1cm4gRkFMU0U7DQo+ID4gK30NCj4gPiArDQo+ID4gKy8q Kg0KPiA+ICsgIENhbGN1bGF0ZSB0aGUgaW52ZXJzZSBvZiB0aGUgc3VwcGxpZWQgRUMgcG9pbnQu DQo+ID4gKw0KPiA+ICsgIEBwYXJhbVtpbl0gICAgIEVjR3JvdXAgICBFQyBncm91cCBvYmplY3Qu DQo+ID4gKyAgQHBhcmFtW2luLG91dF0gRWNQb2ludCAgIEVDIHBvaW50IHRvIGludmVydC4NCj4g PiArICBAcGFyYW1baW5dICAgICBCbkN0eCAgICAgQk4gY29udGV4dCwgY3JlYXRlZCB3aXRoIEJp Z051bU5ld0NvbnRleHQoKS4NCj4gPiArDQo+ID4gKyAgQHJldHZhbCBUUlVFICAgICAgICAgIE9u IHN1Y2Nlc3MuDQo+ID4gKyAgQHJldHZhbCBGQUxTRSAgICAgICAgIE90aGVyd2lzZS4NCj4gPiAr KiovDQo+ID4gK0JPT0xFQU4NCj4gPiArRUZJQVBJDQo+ID4gK0VjUG9pbnRJbnZlcnQgKA0KPiA+ ICsgIElOIENPTlNUIFZPSUQgICpFY0dyb3VwLA0KPiA+ICsgIElOIE9VVCBWT0lEICAgICpFY1Bv aW50LA0KPiA+ICsgIElOIFZPSUQgICAgICAgICpCbkN0eA0KPiA+ICsgICkNCj4gPiArew0KPiA+ ICsgIEFTU0VSVCAoRkFMU0UpOw0KPiA+ICsgIHJldHVybiBGQUxTRTsNCj4gPiArfQ0KPiA+ICsN Cj4gPiArLyoqDQo+ID4gKyAgQ2hlY2sgaWYgdGhlIHN1cHBsaWVkIHBvaW50IGlzIG9uIEVDIGN1 cnZlLg0KPiA+ICsNCj4gPiArICBAcGFyYW1baW5dICBFY0dyb3VwICAgRUMgZ3JvdXAgb2JqZWN0 Lg0KPiA+ICsgIEBwYXJhbVtpbl0gIEVjUG9pbnQgICBFQyBwb2ludCB0byBjaGVjay4NCj4gPiAr ICBAcGFyYW1baW5dICBCbkN0eCAgICAgQk4gY29udGV4dCwgY3JlYXRlZCB3aXRoIEJpZ051bU5l d0NvbnRleHQoKS4NCj4gPiArDQo+ID4gKyAgQHJldHZhbCBUUlVFICAgICAgICAgIE9uIGN1cnZl Lg0KPiA+ICsgIEByZXR2YWwgRkFMU0UgICAgICAgICBPdGhlcndpc2UuDQo+ID4gKyoqLw0KPiA+ ICtCT09MRUFODQo+ID4gK0VGSUFQSQ0KPiA+ICtFY1BvaW50SXNPbkN1cnZlICgNCj4gPiArICBJ TiBDT05TVCBWT0lEICAqRWNHcm91cCwNCj4gPiArICBJTiBDT05TVCBWT0lEICAqRWNQb2ludCwN Cj4gPiArICBJTiBWT0lEICAgICAgICAqQm5DdHgNCj4gPiArICApDQo+ID4gK3sNCj4gPiArICBB U1NFUlQgKEZBTFNFKTsNCj4gPiArICByZXR1cm4gRkFMU0U7DQo+ID4gK30NCj4gPiArDQo+ID4g Ky8qKg0KPiA+ICsgIENoZWNrIGlmIHRoZSBzdXBwbGllZCBwb2ludCBpcyBhdCBpbmZpbml0eS4N Cj4gPiArDQo+ID4gKyAgQHBhcmFtW2luXSAgRWNHcm91cCAgIEVDIGdyb3VwIG9iamVjdC4NCj4g PiArICBAcGFyYW1baW5dICBFY1BvaW50ICAgRUMgcG9pbnQgdG8gY2hlY2suDQo+ID4gKw0KPiA+ ICsgIEByZXR2YWwgVFJVRSAgICAgICAgICBBdCBpbmZpbml0eS4NCj4gPiArICBAcmV0dmFsIEZB TFNFICAgICAgICAgT3RoZXJ3aXNlLg0KPiA+ICsqKi8NCj4gPiArQk9PTEVBTg0KPiA+ICtFRklB UEkNCj4gPiArRWNQb2ludElzQXRJbmZpbml0eSAoDQo+ID4gKyAgSU4gQ09OU1QgVk9JRCAgKkVj R3JvdXAsDQo+ID4gKyAgSU4gQ09OU1QgVk9JRCAgKkVjUG9pbnQNCj4gPiArICApDQo+ID4gK3sN Cj4gPiArICBBU1NFUlQgKEZBTFNFKTsNCj4gPiArICByZXR1cm4gRkFMU0U7DQo+ID4gK30NCj4g PiArDQo+ID4gKy8qKg0KPiA+ICsgIENoZWNrIGlmIEVDIHBvaW50cyBhcmUgZXF1YWwuDQo+ID4g Kw0KPiA+ICsgIEBwYXJhbVtpbl0gIEVjR3JvdXAgICBFQyBncm91cCBvYmplY3QuDQo+ID4gKyAg QHBhcmFtW2luXSAgRWNQb2ludEEgIEVDIHBvaW50IEEuDQo+ID4gKyAgQHBhcmFtW2luXSAgRWNQ b2ludEIgIEVDIHBvaW50IEIuDQo+ID4gKyAgQHBhcmFtW2luXSAgQm5DdHggICAgIEJOIGNvbnRl eHQsIGNyZWF0ZWQgd2l0aCBCaWdOdW1OZXdDb250ZXh0KCkuDQo+ID4gKw0KPiA+ICsgIEByZXR2 YWwgVFJVRSAgICAgICAgICBBID09IEIuDQo+ID4gKyAgQHJldHZhbCBGQUxTRSAgICAgICAgIE90 aGVyd2lzZS4NCj4gPiArKiovDQo+ID4gK0JPT0xFQU4NCj4gPiArRUZJQVBJDQo+ID4gK0VjUG9p bnRFcXVhbCAoDQo+ID4gKyAgSU4gQ09OU1QgVk9JRCAgKkVjR3JvdXAsDQo+ID4gKyAgSU4gQ09O U1QgVk9JRCAgKkVjUG9pbnRBLA0KPiA+ICsgIElOIENPTlNUIFZPSUQgICpFY1BvaW50QiwNCj4g PiArICBJTiBWT0lEICAgICAgICAqQm5DdHgNCj4gPiArICApDQo+ID4gK3sNCj4gPiArICBBU1NF UlQgKEZBTFNFKTsNCj4gPiArICByZXR1cm4gRkFMU0U7DQo+ID4gK30NCj4gPiArDQo+ID4gKy8q Kg0KPiA+ICsgIFNldCBFQyBwb2ludCBjb21wcmVzc2VkIGNvb3JkaW5hdGVzLiBQb2ludHMgY2Fu IGJlIGRlc2NyaWJlZCBpbiB0ZXJtcyBvZg0KPiA+ICsgIHRoZWlyIGNvbXByZXNzZWQgY29vcmRp bmF0ZXMuIEZvciBhIHBvaW50ICh4LCB5KSwgZm9yIGFueSBnaXZlbiB2YWx1ZSBmb3IgeA0KPiA+ ICsgIHN1Y2ggdGhhdCB0aGUgcG9pbnQgaXMgb24gdGhlIGN1cnZlIHRoZXJlIHdpbGwgb25seSBl dmVyIGJlIHR3byBwb3NzaWJsZQ0KPiA+ICsgIHZhbHVlcyBmb3IgeS4gVGhlcmVmb3JlLCBhIHBv aW50IGNhbiBiZSBzZXQgdXNpbmcgdGhpcyBmdW5jdGlvbiB3aGVyZSBCblggaXMNCj4gPiArICB0 aGUgeCBjb29yZGluYXRlIGFuZCBZQml0IGlzIGEgdmFsdWUgMCBvciAxIHRvIGlkZW50aWZ5IHdo aWNoIG9mIHRoZSB0d28NCj4gPiArICBwb3NzaWJsZSB2YWx1ZXMgZm9yIHkgc2hvdWxkIGJlIHVz ZWQuDQo+ID4gKw0KPiA+ICsgIEBwYXJhbVtpbl0gIEVjR3JvdXAgICAgRUMgZ3JvdXAgb2JqZWN0 Lg0KPiA+ICsgIEBwYXJhbVtpbl0gIEVjUG9pbnQgICAgRUMgUG9pbnQuDQo+ID4gKyAgQHBhcmFt W2luXSAgQm5YICAgICAgICBYIGNvb3JkaW5hdGUuDQo+ID4gKyAgQHBhcmFtW2luXSAgWUJpdCAg ICAgICAwIG9yIDEgdG8gaWRlbnRpZnkgd2hpY2ggWSB2YWx1ZSBpcyB1c2VkLg0KPiA+ICsgIEBw YXJhbVtpbl0gIEJuQ3R4ICAgICAgQk4gY29udGV4dCwgY3JlYXRlZCB3aXRoIEJpZ051bU5ld0Nv bnRleHQoKS4NCj4gPiArDQo+ID4gKyAgQHJldHZhbCBUUlVFICAgICAgICAgIE9uIHN1Y2Nlc3Mu DQo+ID4gKyAgQHJldHZhbCBGQUxTRSAgICAgICAgIE90aGVyd2lzZS4NCj4gPiArKiovDQo+ID4g K0JPT0xFQU4NCj4gPiArRUZJQVBJDQo+ID4gK0VjUG9pbnRTZXRDb21wcmVzc2VkQ29vcmRpbmF0 ZXMgKA0KPiA+ICsgIElOIENPTlNUIFZPSUQgICpFY0dyb3VwLA0KPiA+ICsgIElOIFZPSUQgICAg ICAgICpFY1BvaW50LA0KPiA+ICsgIElOIENPTlNUIFZPSUQgICpCblgsDQo+ID4gKyAgSU4gVUlO VDggICAgICAgWUJpdCwNCj4gPiArICBJTiBWT0lEICAgICAgICAqQm5DdHgNCj4gPiArICApDQo+ ID4gK3sNCj4gPiArICBBU1NFUlQgKEZBTFNFKTsNCj4gPiArICByZXR1cm4gRkFMU0U7DQo+ID4g K30NCj4gPiArDQo+ID4gKy8qKg0KPiA+ICsgIEFsbG9jYXRlcyBhbmQgSW5pdGlhbGl6ZXMgb25l IEVsbGlwdGljIEN1cnZlIENvbnRleHQgZm9yIHN1YnNlcXVlbnQgdXNlDQo+ID4gKyAgd2l0aCB0 aGUgTklELg0KPiA+ICsNCj4gPiArICBAcGFyYW1baW5dICBOaWQgY2lwaGVyIE5JRA0KPiA+ICsg IEByZXR1cm4gICAgIFBvaW50ZXIgdG8gdGhlIEVsbGlwdGljIEN1cnZlIENvbnRleHQgdGhhdCBo YXMgYmVlbiBpbml0aWFsaXplZC4NCj4gPiArICAgICAgICAgICAgICBJZiB0aGUgYWxsb2NhdGlv bnMgZmFpbHMsIEVjTmV3QnlOaWQoKSByZXR1cm5zIE5VTEwuDQo+ID4gKyoqLw0KPiA+ICtWT0lE ICoNCj4gPiArRUZJQVBJDQo+ID4gK0VjTmV3QnlOaWQgKA0KPiA+ICsgIElOIFVJTlROICBOaWQN Cj4gPiArICApDQo+ID4gK3sNCj4gPiArICBBU1NFUlQgKEZBTFNFKTsNCj4gPiArICByZXR1cm4g TlVMTDsNCj4gPiArfQ0KPiA+ICsNCj4gPiArLyoqDQo+ID4gKyAgUmVsZWFzZSB0aGUgc3BlY2lm aWVkIEVDIGNvbnRleHQuDQo+ID4gKw0KPiA+ICsgIEBwYXJhbVtpbl0gIEVjQ29udGV4dCAgUG9p bnRlciB0byB0aGUgRUMgY29udGV4dCB0byBiZSByZWxlYXNlZC4NCj4gPiArKiovDQo+ID4gK1ZP SUQNCj4gPiArRUZJQVBJDQo+ID4gK0VjRnJlZSAoDQo+ID4gKyAgSU4gIFZPSUQgICpFY0NvbnRl eHQNCj4gPiArICApDQo+ID4gK3sNCj4gPiArICBBU1NFUlQgKEZBTFNFKTsNCj4gPiArfQ0KPiA+ ICsNCj4gPiArLyoqDQo+ID4gKyAgR2VuZXJhdGVzIEVDIGtleSBhbmQgcmV0dXJucyBFQyBwdWJs aWMga2V5IChYLCBZKSwgUGxlYXNlIG5vdGUsIHRoaXMgZnVuY3Rpb24gdXNlcw0KPiA+ICsgIHBz ZXVkbyByYW5kb20gbnVtYmVyIGdlbmVyYXRvci4gVGhlIGNhbGxlciBtdXN0IG1ha2Ugc3VyZSBS YW5kb21TZWVkKCkNCj4gPiArICBmdW5jdGlvbiB3YXMgcHJvcGVybHkgY2FsbGVkIGJlZm9yZS4N Cj4gPiArICBUaGUgRWMgY29udGV4dCBzaG91bGQgYmUgY29ycmVjdGx5IGluaXRpYWxpemVkIGJ5 IEVjTmV3QnlOaWQuDQo+ID4gKyAgVGhpcyBmdW5jdGlvbiBnZW5lcmF0ZXMgcmFuZG9tIHNlY3Jl dCwgYW5kIGNvbXB1dGVzIHRoZSBwdWJsaWMga2V5IChYLCBZKSwgd2hpY2ggaXMNCj4gPiArICBy ZXR1cm5lZCB2aWEgcGFyYW1ldGVyIFB1YmxpYywgUHVibGljU2l6ZS4NCj4gPiArICBYIGlzIHRo ZSBmaXJzdCBoYWxmIG9mIFB1YmxpYyB3aXRoIHNpemUgYmVpbmcgUHVibGljU2l6ZSAvIDIsDQo+ ID4gKyAgWSBpcyB0aGUgc2Vjb25kIGhhbGYgb2YgUHVibGljIHdpdGggc2l6ZSBiZWluZyBQdWJs aWNTaXplIC8gMi4NCj4gPiArICBFQyBjb250ZXh0IGlzIHVwZGF0ZWQgYWNjb3JkaW5nbHkuDQo+ ID4gKyAgSWYgdGhlIFB1YmxpYyBidWZmZXIgaXMgdG9vIHNtYWxsIHRvIGhvbGQgdGhlIHB1Ymxp YyBYLCBZLCBGQUxTRSBpcyByZXR1cm5lZCBhbmQNCj4gPiArICBQdWJsaWNTaXplIGlzIHNldCB0 byB0aGUgcmVxdWlyZWQgYnVmZmVyIHNpemUgdG8gb2J0YWluIHRoZSBwdWJsaWMgWCwgWS4NCj4g PiArICBGb3IgUC0yNTYsIHRoZSBQdWJsaWNTaXplIGlzIDY0LiBGaXJzdCAzMi1ieXRlIGlzIFgs IFNlY29uZCAzMi1ieXRlIGlzIFkuDQo+ID4gKyAgRm9yIFAtMzg0LCB0aGUgUHVibGljU2l6ZSBp cyA5Ni4gRmlyc3QgNDgtYnl0ZSBpcyBYLCBTZWNvbmQgNDgtYnl0ZSBpcyBZLg0KPiA+ICsgIEZv ciBQLTUyMSwgdGhlIFB1YmxpY1NpemUgaXMgMTMyLiBGaXJzdCA2Ni1ieXRlIGlzIFgsIFNlY29u ZCA2Ni1ieXRlIGlzIFkuDQo+ID4gKyAgSWYgRWNDb250ZXh0IGlzIE5VTEwsIHRoZW4gcmV0dXJu IEZBTFNFLg0KPiA+ICsgIElmIFB1YmxpY1NpemUgaXMgTlVMTCwgdGhlbiByZXR1cm4gRkFMU0Uu DQo+ID4gKyAgSWYgUHVibGljU2l6ZSBpcyBsYXJnZSBlbm91Z2ggYnV0IFB1YmxpYyBpcyBOVUxM LCB0aGVuIHJldHVybiBGQUxTRS4NCj4gPiArICBAcGFyYW1baW4sIG91dF0gIEVjQ29udGV4dCAg ICAgIFBvaW50ZXIgdG8gdGhlIEVDIGNvbnRleHQuDQo+ID4gKyAgQHBhcmFtW291dF0gICAgICBQ dWJsaWNLZXkgICAgICBQb2ludGVyIHRvIHQgYnVmZmVyIHRvIHJlY2VpdmUgZ2VuZXJhdGVkIHB1 YmxpYyBYLFkuDQo+ID4gKyAgQHBhcmFtW2luLCBvdXRdICBQdWJsaWNLZXlTaXplICBPbiBpbnB1 dCwgdGhlIHNpemUgb2YgUHVibGljIGJ1ZmZlciBpbiBieXRlcy4NCj4gPiArICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIE9uIG91dHB1dCwgdGhlIHNpemUgb2YgZGF0YSByZXR1cm5l ZCBpbiBQdWJsaWMgYnVmZmVyIGluIGJ5dGVzLg0KPiA+ICsgIEByZXR2YWwgVFJVRSAgIEVDIHB1 YmxpYyBYLFkgZ2VuZXJhdGlvbiBzdWNjZWVkZWQuDQo+ID4gKyAgQHJldHZhbCBGQUxTRSAgRUMg cHVibGljIFgsWSBnZW5lcmF0aW9uIGZhaWxlZC4NCj4gPiArICBAcmV0dmFsIEZBTFNFICBQdWJs aWNLZXlTaXplIGlzIG5vdCBsYXJnZSBlbm91Z2guDQo+ID4gKyoqLw0KPiA+ICtCT09MRUFODQo+ ID4gK0VGSUFQSQ0KPiA+ICtFY0dlbmVyYXRlS2V5ICgNCj4gPiArICBJTiBPVVQgIFZPSUQgICAq RWNDb250ZXh0LA0KPiA+ICsgIE9VVCAgICAgVUlOVDggICpQdWJsaWNLZXksDQo+ID4gKyAgSU4g T1VUICBVSU5UTiAgKlB1YmxpY0tleVNpemUNCj4gPiArICApDQo+ID4gK3sNCj4gPiArICBBU1NF UlQgKEZBTFNFKTsNCj4gPiArICByZXR1cm4gRkFMU0U7DQo+ID4gK30NCj4gPiArDQo+ID4gKy8q Kg0KPiA+ICsgIEdldHMgdGhlIHB1YmxpYyBrZXkgY29tcG9uZW50IGZyb20gdGhlIGVzdGFibGlz aGVkIEVDIGNvbnRleHQuDQo+ID4gKyAgVGhlIEVjIGNvbnRleHQgc2hvdWxkIGJlIGNvcnJlY3Rs eSBpbml0aWFsaXplZCBieSBFY05ld0J5TmlkLCBhbmQgc3VjY2Vzc2Z1bGx5DQo+ID4gKyAgZ2Vu ZXJhdGUga2V5IHBhaXIgZnJvbSBFY0dlbmVyYXRlS2V5KCkuDQo+ID4gKyAgRm9yIFAtMjU2LCB0 aGUgUHVibGljU2l6ZSBpcyA2NC4gRmlyc3QgMzItYnl0ZSBpcyBYLCBTZWNvbmQgMzItYnl0ZSBp cyBZLg0KPiA+ICsgIEZvciBQLTM4NCwgdGhlIFB1YmxpY1NpemUgaXMgOTYuIEZpcnN0IDQ4LWJ5 dGUgaXMgWCwgU2Vjb25kIDQ4LWJ5dGUgaXMgWS4NCj4gPiArICBGb3IgUC01MjEsIHRoZSBQdWJs aWNTaXplIGlzIDEzMi4gRmlyc3QgNjYtYnl0ZSBpcyBYLCBTZWNvbmQgNjYtYnl0ZSBpcyBZLg0K PiA+ICsgIEBwYXJhbVtpbiwgb3V0XSAgRWNDb250ZXh0ICAgICAgUG9pbnRlciB0byBFQyBjb250 ZXh0IGJlaW5nIHNldC4NCj4gPiArICBAcGFyYW1bb3V0XSAgICAgIFB1YmxpY0tleSAgICAgIFBv aW50ZXIgdG8gdCBidWZmZXIgdG8gcmVjZWl2ZSBnZW5lcmF0ZWQgcHVibGljIFgsWS4NCj4gPiAr ICBAcGFyYW1baW4sIG91dF0gIFB1YmxpY0tleVNpemUgIE9uIGlucHV0LCB0aGUgc2l6ZSBvZiBQ dWJsaWMgYnVmZmVyIGluIGJ5dGVzLg0KPiA+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgT24gb3V0cHV0LCB0aGUgc2l6ZSBvZiBkYXRhIHJldHVybmVkIGluIFB1YmxpYyBidWZm ZXIgaW4gYnl0ZXMuDQo+ID4gKyAgQHJldHZhbCAgVFJVRSAgIEVDIGtleSBjb21wb25lbnQgd2Fz IHJldHJpZXZlZCBzdWNjZXNzZnVsbHkuDQo+ID4gKyAgQHJldHZhbCAgRkFMU0UgIEludmFsaWQg RUMga2V5IGNvbXBvbmVudC4NCj4gPiArKiovDQo+ID4gK0JPT0xFQU4NCj4gPiArRUZJQVBJDQo+ ID4gK0VjR2V0UHViS2V5ICgNCj4gPiArICBJTiBPVVQgIFZPSUQgICAqRWNDb250ZXh0LA0KPiA+ ICsgIE9VVCAgICAgVUlOVDggICpQdWJsaWNLZXksDQo+ID4gKyAgSU4gT1VUICBVSU5UTiAgKlB1 YmxpY0tleVNpemUNCj4gPiArICApDQo+ID4gK3sNCj4gPiArICBBU1NFUlQgKEZBTFNFKTsNCj4g PiArICByZXR1cm4gRkFMU0U7DQo+ID4gK30NCj4gPiArDQo+ID4gKy8qKg0KPiA+ICsgIENvbXB1 dGVzIGV4Y2hhbmdlZCBjb21tb24ga2V5Lg0KPiA+ICsgIEdpdmVuIHBlZXIncyBwdWJsaWMga2V5 IChYLCBZKSwgdGhpcyBmdW5jdGlvbiBjb21wdXRlcyB0aGUgZXhjaGFuZ2VkIGNvbW1vbiBrZXks DQo+ID4gKyAgYmFzZWQgb24gaXRzIG93biBjb250ZXh0IGluY2x1ZGluZyB2YWx1ZSBvZiBjdXJ2 ZSBwYXJhbWV0ZXIgYW5kIHJhbmRvbSBzZWNyZXQuDQo+ID4gKyAgWCBpcyB0aGUgZmlyc3QgaGFs ZiBvZiBQZWVyUHVibGljIHdpdGggc2l6ZSBiZWluZyBQZWVyUHVibGljU2l6ZSAvIDIsDQo+ID4g KyAgWSBpcyB0aGUgc2Vjb25kIGhhbGYgb2YgUGVlclB1YmxpYyB3aXRoIHNpemUgYmVpbmcgUGVl clB1YmxpY1NpemUgLyAyLg0KPiA+ICsgIElmIEVjQ29udGV4dCBpcyBOVUxMLCB0aGVuIHJldHVy biBGQUxTRS4NCj4gPiArICBJZiBQZWVyUHVibGljIGlzIE5VTEwsIHRoZW4gcmV0dXJuIEZBTFNF Lg0KPiA+ICsgIElmIFBlZXJQdWJsaWNTaXplIGlzIDAsIHRoZW4gcmV0dXJuIEZBTFNFLg0KPiA+ ICsgIElmIEtleSBpcyBOVUxMLCB0aGVuIHJldHVybiBGQUxTRS4NCj4gPiArICBJZiBLZXlTaXpl IGlzIG5vdCBsYXJnZSBlbm91Z2gsIHRoZW4gcmV0dXJuIEZBTFNFLg0KPiA+ICsgIEZvciBQLTI1 NiwgdGhlIFBlZXJQdWJsaWNTaXplIGlzIDY0LiBGaXJzdCAzMi1ieXRlIGlzIFgsIFNlY29uZCAz Mi1ieXRlIGlzIFkuDQo+ID4gKyAgRm9yIFAtMzg0LCB0aGUgUGVlclB1YmxpY1NpemUgaXMgOTYu IEZpcnN0IDQ4LWJ5dGUgaXMgWCwgU2Vjb25kIDQ4LWJ5dGUgaXMgWS4NCj4gPiArICBGb3IgUC01 MjEsIHRoZSBQZWVyUHVibGljU2l6ZSBpcyAxMzIuIEZpcnN0IDY2LWJ5dGUgaXMgWCwgU2Vjb25k IDY2LWJ5dGUgaXMgWS4NCj4gPiArICBAcGFyYW1baW4sIG91dF0gIEVjQ29udGV4dCAgICAgICAg ICBQb2ludGVyIHRvIHRoZSBFQyBjb250ZXh0Lg0KPiA+ICsgIEBwYXJhbVtpbl0gICAgICAgUGVl clB1YmxpYyAgICAgICAgIFBvaW50ZXIgdG8gdGhlIHBlZXIncyBwdWJsaWMgWCxZLg0KPiA+ICsg IEBwYXJhbVtpbl0gICAgICAgUGVlclB1YmxpY1NpemUgICAgIFNpemUgb2YgcGVlcidzIHB1Ymxp YyBYLFkgaW4gYnl0ZXMuDQo+ID4gKyAgQHBhcmFtW2luXSAgICAgICBDb21wcmVzc0ZsYWcgICAg ICAgRmxhZyBvZiBQZWVyUHVibGljIGlzIGNvbXByZXNzZWQgb3Igbm90Lg0KPiA+ICsgIEBwYXJh bVtvdXRdICAgICAgS2V5ICAgICAgICAgICAgICAgIFBvaW50ZXIgdG8gdGhlIGJ1ZmZlciB0byBy ZWNlaXZlIGdlbmVyYXRlZCBrZXkuDQo+ID4gKyAgQHBhcmFtW2luLCBvdXRdICBLZXlTaXplICAg ICAgICAgICAgT24gaW5wdXQsIHRoZSBzaXplIG9mIEtleSBidWZmZXIgaW4gYnl0ZXMuDQo+ID4g KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgT24gb3V0cHV0LCB0aGUgc2l6 ZSBvZiBkYXRhIHJldHVybmVkIGluIEtleSBidWZmZXIgaW4gYnl0ZXMuDQo+ID4gKyAgQHJldHZh bCBUUlVFICAgRUMgZXhjaGFuZ2VkIGtleSBnZW5lcmF0aW9uIHN1Y2NlZWRlZC4NCj4gPiArICBA cmV0dmFsIEZBTFNFICBFQyBleGNoYW5nZWQga2V5IGdlbmVyYXRpb24gZmFpbGVkLg0KPiA+ICsg IEByZXR2YWwgRkFMU0UgIEtleVNpemUgaXMgbm90IGxhcmdlIGVub3VnaC4NCj4gPiArKiovDQo+ ID4gK0JPT0xFQU4NCj4gPiArRUZJQVBJDQo+ID4gK0VjRGhDb21wdXRlS2V5ICgNCj4gPiArICBJ TiBPVVQgIFZPSUQgICAgICAgICAqRWNDb250ZXh0LA0KPiA+ICsgIElOICAgICAgQ09OU1QgVUlO VDggICpQZWVyUHVibGljLA0KPiA+ICsgIElOICAgICAgVUlOVE4gICAgICAgIFBlZXJQdWJsaWNT aXplLA0KPiA+ICsgIElOICAgICAgQ09OU1QgSU5UMzIgICpDb21wcmVzc0ZsYWcsDQo+ID4gKyAg T1VUICAgICBVSU5UOCAgICAgICAgKktleSwNCj4gPiArICBJTiBPVVQgIFVJTlROICAgICAgICAq S2V5U2l6ZQ0KPiA+ICsgICkNCj4gPiArew0KPiA+ICsgIEFTU0VSVCAoRkFMU0UpOw0KPiA+ICsg IHJldHVybiBGQUxTRTsNCj4gPiArfQ0KPiA+IGRpZmYgLS1naXQgYS9DcnlwdG9Qa2cvTGlicmFy eS9CYXNlQ3J5cHRMaWIvU21tQ3J5cHRMaWIuaW5mIGIvQ3J5cHRvUGtnL0xpYnJhcnkvQmFzZUNy eXB0TGliL1NtbUNyeXB0TGliLmluZg0KPiA+IGluZGV4IGNlNmE3ODlkZmQuLjRiYzMwNjM0ODUg MTAwNjQ0DQo+ID4gLS0tIGEvQ3J5cHRvUGtnL0xpYnJhcnkvQmFzZUNyeXB0TGliL1NtbUNyeXB0 TGliLmluZg0KPiA+ICsrKyBiL0NyeXB0b1BrZy9MaWJyYXJ5L0Jhc2VDcnlwdExpYi9TbW1Dcnlw dExpYi5pbmYNCj4gPiBAQCAtNTksNiArNTksNyBAQA0KPiA+ICAgIFBrL0NyeXB0VHNOdWxsLmMN Cj4gPiAgICBQay9DcnlwdFJzYVBzcy5jDQo+ID4gICAgUGsvQ3J5cHRSc2FQc3NTaWduTnVsbC5j DQo+ID4gKyAgUGsvQ3J5cHRFY051bGwuYw0KPiA+ICAgIFBlbS9DcnlwdFBlbS5jDQo+ID4gICAg Qm4vQ3J5cHRCbk51bGwuYw0KPiA+DQo+ID4gZGlmZiAtLWdpdCBhL0NyeXB0b1BrZy9MaWJyYXJ5 L0Jhc2VDcnlwdExpYk51bGwvQmFzZUNyeXB0TGliTnVsbC5pbmYNCj4gYi9DcnlwdG9Qa2cvTGli cmFyeS9CYXNlQ3J5cHRMaWJOdWxsL0Jhc2VDcnlwdExpYk51bGwuaW5mDQo+ID4gaW5kZXggMzU0 ZjNkODBhYS4uZTFhNTdlZjA5ZiAxMDA2NDQNCj4gPiAtLS0gYS9DcnlwdG9Qa2cvTGlicmFyeS9C YXNlQ3J5cHRMaWJOdWxsL0Jhc2VDcnlwdExpYk51bGwuaW5mDQo+ID4gKysrIGIvQ3J5cHRvUGtn L0xpYnJhcnkvQmFzZUNyeXB0TGliTnVsbC9CYXNlQ3J5cHRMaWJOdWxsLmluZg0KPiA+IEBAIC00 OSw2ICs0OSw3IEBADQo+ID4gICAgUGsvQ3J5cHRYNTA5TnVsbC5jDQo+ID4gICAgUGsvQ3J5cHRB dXRoZW50aWNvZGVOdWxsLmMNCj4gPiAgICBQay9DcnlwdFRzTnVsbC5jDQo+ID4gKyAgUGsvQ3J5 cHRFY051bGwuYw0KPiA+ICAgIFBlbS9DcnlwdFBlbU51bGwuYw0KPiA+ICAgIFJhbmQvQ3J5cHRS YW5kTnVsbC5jDQo+ID4gICAgUGsvQ3J5cHRSc2FQc3NOdWxsLmMNCj4gPiBkaWZmIC0tZ2l0IGEv Q3J5cHRvUGtnL0xpYnJhcnkvQmFzZUNyeXB0TGliTnVsbC9Qay9DcnlwdEVjTnVsbC5jIGIvQ3J5 cHRvUGtnL0xpYnJhcnkvQmFzZUNyeXB0TGliTnVsbC9Qay9DcnlwdEVjTnVsbC5jDQo+ID4gbmV3 IGZpbGUgbW9kZSAxMDA2NDQNCj4gPiBpbmRleCAwMDAwMDAwMDAwLi5kOWYxMDA0ZjZjDQo+ID4g LS0tIC9kZXYvbnVsbA0KPiA+ICsrKyBiL0NyeXB0b1BrZy9MaWJyYXJ5L0Jhc2VDcnlwdExpYk51 bGwvUGsvQ3J5cHRFY051bGwuYw0KPiA+IEBAIC0wLDAgKzEsNDk2IEBADQo+ID4gKy8qKiBAZmls ZQ0KPiA+ICsgIEVsbGlwdGljIEN1cnZlIGFuZCBFQ0RIIEFQSSBpbXBsZW1lbnRhdGlvbiBiYXNl ZCBvbiBPcGVuU1NMDQo+ID4gKw0KPiA+ICsgIENvcHlyaWdodCAoYykgMjAyMiwgSW50ZWwgQ29y cG9yYXRpb24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuPEJSPg0KPiA+ICsgIFNQRFgtTGljZW5zZS1J ZGVudGlmaWVyOiBCU0QtMi1DbGF1c2UtUGF0ZW50DQo+ID4gKw0KPiA+ICsqKi8NCj4gPiArDQo+ ID4gKyNpbmNsdWRlIDxMaWJyYXJ5L0Jhc2VDcnlwdExpYi5oPg0KPiA+ICsjaW5jbHVkZSA8TGli cmFyeS9EZWJ1Z0xpYi5oPg0KPiA+ICsNCj4gPiArLyoqDQo+ID4gKyAgSW5pdGlhbGl6ZSBuZXcg b3BhcXVlIEVjR3JvdXAgb2JqZWN0LiBUaGlzIG9iamVjdCByZXByZXNlbnRzIGFuIEVDIGN1cnZl IGFuZA0KPiA+ICsgIGFuZCBpcyB1c2VkIGZvciBjYWxjdWxhdGlvbiB3aXRoaW4gdGhpcyBncm91 cC4gVGhpcyBvYmplY3Qgc2hvdWxkIGJlIGZyZWVkDQo+ID4gKyAgdXNpbmcgRWNHcm91cEZyZWUo KSBmdW5jdGlvbi4NCj4gPiArDQo+ID4gKyAgQHBhcmFtW2luXSAgQ3J5cHRvTmlkICAgSWRlbnRp ZnlpbmcgbnVtYmVyIGZvciB0aGUgRUNDIGN1cnZlIChEZWZpbmVkIGluDQo+ID4gKyAgICAgICAg ICAgICAgICAgICAgICAgICAgQmFzZUNyeXB0TGliLmgpLg0KPiA+ICsNCj4gPiArICBAcmV0dmFs IEVjR3JvdXAgb2JqZWN0ICBPbiBzdWNjZXNzLg0KPiA+ICsgIEByZXR2YWwgTlVMTCAgICAgICAg ICAgIE9uIGZhaWx1cmUuDQo+ID4gKyoqLw0KPiA+ICtWT0lEICoNCj4gPiArRUZJQVBJDQo+ID4g K0VjR3JvdXBJbml0ICgNCj4gPiArICBJTiBVSU5UTiAgQ3J5cHRvTmlkDQo+ID4gKyAgKQ0KPiA+ ICt7DQo+ID4gKyAgQVNTRVJUIChGQUxTRSk7DQo+ID4gKyAgcmV0dXJuIE5VTEw7DQo+ID4gK30N Cj4gPiArDQo+ID4gKy8qKg0KPiA+ICsgIEdldCBFQyBjdXJ2ZSBwYXJhbWV0ZXJzLiBXaGlsZSBl bGxpcHRpYyBjdXJ2ZSBlcXVhdGlvbiBpcyBZXjIgbW9kIFAgPSAoWF4zICsgQVggKyBCKSBNb2Qg UC4NCj4gPiArICBUaGlzIGZ1bmN0aW9uIHdpbGwgc2V0IHRoZSBwcm92aWRlZCBCaWcgTnVtYmVy IG9iamVjdHMgIHRvIHRoZSBjb3JyZXNwb25kaW5nDQo+ID4gKyAgdmFsdWVzLiBUaGUgY2FsbGVy IG5lZWRzIHRvIG1ha2Ugc3VyZSBhbGwgdGhlICJvdXQiIEJpZ051bWJlciBwYXJhbWV0ZXJzDQo+ ID4gKyAgYXJlIHByb3Blcmx5IGluaXRpYWxpemVkLg0KPiA+ICsNCj4gPiArICBAcGFyYW1baW5d ICBFY0dyb3VwICAgIEVDIGdyb3VwIG9iamVjdC4NCj4gPiArICBAcGFyYW1bb3V0XSBCblByaW1l ICAgIEdyb3VwIHByaW1lIG51bWJlci4NCj4gPiArICBAcGFyYW1bb3V0XSBCbkEgICAgICAgIEEg Y29lZmZpY2llbnQuDQo+ID4gKyAgQHBhcmFtW291dF0gQm5CICAgICAgICBCIGNvZWZmaWNpZW50 Li4NCj4gPiArICBAcGFyYW1baW5dICBCbkN0eCAgICAgIEJOIGNvbnRleHQuDQo+ID4gKw0KPiA+ ICsgIEByZXR2YWwgVFJVRSAgICAgICAgICBPbiBzdWNjZXNzLg0KPiA+ICsgIEByZXR2YWwgRkFM U0UgICAgICAgICBPdGhlcndpc2UuDQo+ID4gKyoqLw0KPiA+ICtCT09MRUFODQo+ID4gK0VGSUFQ SQ0KPiA+ICtFY0dyb3VwR2V0Q3VydmUgKA0KPiA+ICsgIElOIENPTlNUIFZPSUQgICpFY0dyb3Vw LA0KPiA+ICsgIE9VVCBWT0lEICAgICAgICpCblByaW1lLA0KPiA+ICsgIE9VVCBWT0lEICAgICAg ICpCbkEsDQo+ID4gKyAgT1VUIFZPSUQgICAgICAgKkJuQiwNCj4gPiArICBJTiBWT0lEICAgICAg ICAqQm5DdHgNCj4gPiArICApDQo+ID4gK3sNCj4gPiArICBBU1NFUlQgKEZBTFNFKTsNCj4gPiAr ICByZXR1cm4gRkFMU0U7DQo+ID4gK30NCj4gPiArDQo+ID4gKy8qKg0KPiA+ICsgIEdldCBFQyBn cm91cCBvcmRlci4NCj4gPiArICBUaGlzIGZ1bmN0aW9uIHdpbGwgc2V0IHRoZSBwcm92aWRlZCBC aWcgTnVtYmVyIG9iamVjdCB0byB0aGUgY29ycmVzcG9uZGluZw0KPiA+ICsgIHZhbHVlLiBUaGUg Y2FsbGVyIG5lZWRzIHRvIG1ha2Ugc3VyZSB0aGF0IHRoZSAib3V0IiBCaWdOdW1iZXIgcGFyYW1l dGVyDQo+ID4gKyAgaXMgcHJvcGVybHkgaW5pdGlhbGl6ZWQuDQo+ID4gKw0KPiA+ICsgIEBwYXJh bVtpbl0gIEVjR3JvdXAgICBFQyBncm91cCBvYmplY3QuDQo+ID4gKyAgQHBhcmFtW291dF0gQm5P cmRlciAgIEdyb3VwIHByaW1lIG51bWJlci4NCj4gPiArDQo+ID4gKyAgQHJldHZhbCBUUlVFICAg ICAgICAgIE9uIHN1Y2Nlc3MuDQo+ID4gKyAgQHJldHZhbCBGQUxTRSAgICAgICAgIE90aGVyd2lz ZS4NCj4gPiArKiovDQo+ID4gK0JPT0xFQU4NCj4gPiArRUZJQVBJDQo+ID4gK0VjR3JvdXBHZXRP cmRlciAoDQo+ID4gKyAgSU4gVk9JRCAgICpFY0dyb3VwLA0KPiA+ICsgIE9VVCBWT0lEICAqQm5P cmRlcg0KPiA+ICsgICkNCj4gPiArew0KPiA+ICsgIEFTU0VSVCAoRkFMU0UpOw0KPiA+ICsgIHJl dHVybiBGQUxTRTsNCj4gPiArfQ0KPiA+ICsNCj4gPiArLyoqDQo+ID4gKyAgRnJlZSBwcmV2aW91 c2x5IGFsbG9jYXRlZCBFQyBncm91cCBvYmplY3QgdXNpbmcgRWNHcm91cEluaXQoKS4NCj4gPiAr DQo+ID4gKyAgQHBhcmFtW2luXSAgRWNHcm91cCAgIEVDIGdyb3VwIG9iamVjdCB0byBmcmVlLg0K PiA+ICsqKi8NCj4gPiArVk9JRA0KPiA+ICtFRklBUEkNCj4gPiArRWNHcm91cEZyZWUgKA0KPiA+ ICsgIElOIFZPSUQgICpFY0dyb3VwDQo+ID4gKyAgKQ0KPiA+ICt7DQo+ID4gKyAgQVNTRVJUIChG QUxTRSk7DQo+ID4gK30NCj4gPiArDQo+ID4gKy8qKg0KPiA+ICsgIEluaXRpYWxpemUgbmV3IG9w YXF1ZSBFQyBQb2ludCBvYmplY3QuIFRoaXMgb2JqZWN0IHJlcHJlc2VudHMgYW4gRUMgcG9pbnQN Cj4gPiArICB3aXRoaW4gdGhlIGdpdmVuIEVDIGdyb3VwIChjdXJ2ZSkuDQo+ID4gKw0KPiA+ICsg IEBwYXJhbVtpbl0gIEVDIEdyb3VwLCBwcm9wZXJseSBpbml0aWFsaXplZCB1c2luZyBFY0dyb3Vw SW5pdCgpLg0KPiA+ICsNCj4gPiArICBAcmV0dmFsIEVDIFBvaW50IG9iamVjdCAgT24gc3VjY2Vz cy4NCj4gPiArICBAcmV0dmFsIE5VTEwgICAgICAgICAgICAgT24gZmFpbHVyZS4NCj4gPiArKiov DQo+ID4gK1ZPSUQgKg0KPiA+ICtFRklBUEkNCj4gPiArRWNQb2ludEluaXQgKA0KPiA+ICsgIElO IENPTlNUIFZPSUQgICpFY0dyb3VwDQo+ID4gKyAgKQ0KPiA+ICt7DQo+ID4gKyAgQVNTRVJUIChG QUxTRSk7DQo+ID4gKyAgcmV0dXJuIE5VTEw7DQo+ID4gK30NCj4gPiArDQo+ID4gKy8qKg0KPiA+ ICsgIEZyZWUgcHJldmlvdXNseSBhbGxvY2F0ZWQgRUMgUG9pbnQgb2JqZWN0IHVzaW5nIEVjUG9p bnRJbml0KCkuDQo+ID4gKw0KPiA+ICsgIEBwYXJhbVtpbl0gIEVjUG9pbnQgICBFQyBQb2ludCB0 byBmcmVlLg0KPiA+ICsgIEBwYXJhbVtpbl0gIENsZWFyICAgICBUUlVFIGlmZiB0aGUgbWVtb3J5 IHNob3VsZCBiZSBjbGVhcmVkLg0KPiA+ICsqKi8NCj4gPiArVk9JRA0KPiA+ICtFRklBUEkNCj4g PiArRWNQb2ludERlSW5pdCAoDQo+ID4gKyAgSU4gVk9JRCAgICAgKkVjUG9pbnQsDQo+ID4gKyAg SU4gQk9PTEVBTiAgQ2xlYXINCj4gPiArICApDQo+ID4gK3sNCj4gPiArICBBU1NFUlQgKEZBTFNF KTsNCj4gPiArfQ0KPiA+ICsNCj4gPiArLyoqDQo+ID4gKyAgR2V0IEVDIHBvaW50IGFmZmluZSAo eCx5KSBjb29yZGluYXRlcy4NCj4gPiArICBUaGlzIGZ1bmN0aW9uIHdpbGwgc2V0IHRoZSBwcm92 aWRlZCBCaWcgTnVtYmVyIG9iamVjdHMgdG8gdGhlIGNvcnJlc3BvbmRpbmcNCj4gPiArICB2YWx1 ZXMuIFRoZSBjYWxsZXIgbmVlZHMgdG8gbWFrZSBzdXJlIGFsbCB0aGUgIm91dCIgQmlnTnVtYmVy IHBhcmFtZXRlcnMNCj4gPiArICBhcmUgcHJvcGVybHkgaW5pdGlhbGl6ZWQuDQo+ID4gKw0KPiA+ ICsgIEBwYXJhbVtpbl0gIEVjR3JvdXAgICAgRUMgZ3JvdXAgb2JqZWN0Lg0KPiA+ICsgIEBwYXJh bVtpbl0gIEVjUG9pbnQgICAgRUMgcG9pbnQgb2JqZWN0Lg0KPiA+ICsgIEBwYXJhbVtvdXRdIEJu WCAgICAgICAgWCBjb29yZGluYXRlLg0KPiA+ICsgIEBwYXJhbVtvdXRdIEJuWSAgICAgICAgWSBj b29yZGluYXRlLg0KPiA+ICsgIEBwYXJhbVtpbl0gIEJuQ3R4ICAgICAgQk4gY29udGV4dCwgY3Jl YXRlZCB3aXRoIEJpZ051bU5ld0NvbnRleHQoKS4NCj4gPiArDQo+ID4gKyAgQHJldHZhbCBUUlVF ICAgICAgICAgIE9uIHN1Y2Nlc3MuDQo+ID4gKyAgQHJldHZhbCBGQUxTRSAgICAgICAgIE90aGVy d2lzZS4NCj4gPiArKiovDQo+ID4gK0JPT0xFQU4NCj4gPiArRUZJQVBJDQo+ID4gK0VjUG9pbnRH ZXRBZmZpbmVDb29yZGluYXRlcyAoDQo+ID4gKyAgSU4gQ09OU1QgVk9JRCAgKkVjR3JvdXAsDQo+ ID4gKyAgSU4gQ09OU1QgVk9JRCAgKkVjUG9pbnQsDQo+ID4gKyAgT1VUIFZPSUQgICAgICAgKkJu WCwNCj4gPiArICBPVVQgVk9JRCAgICAgICAqQm5ZLA0KPiA+ICsgIElOIFZPSUQgICAgICAgICpC bkN0eA0KPiA+ICsgICkNCj4gPiArew0KPiA+ICsgIEFTU0VSVCAoRkFMU0UpOw0KPiA+ICsgIHJl dHVybiBGQUxTRTsNCj4gPiArfQ0KPiA+ICsNCj4gPiArLyoqDQo+ID4gKyAgU2V0IEVDIHBvaW50 IGFmZmluZSAoeCx5KSBjb29yZGluYXRlcy4NCj4gPiArDQo+ID4gKyAgQHBhcmFtW2luXSAgRWNH cm91cCAgICBFQyBncm91cCBvYmplY3QuDQo+ID4gKyAgQHBhcmFtW2luXSAgRWNQb2ludCAgICBF QyBwb2ludCBvYmplY3QuDQo+ID4gKyAgQHBhcmFtW2luXSAgQm5YICAgICAgICBYIGNvb3JkaW5h dGUuDQo+ID4gKyAgQHBhcmFtW2luXSAgQm5ZICAgICAgICBZIGNvb3JkaW5hdGUuDQo+ID4gKyAg QHBhcmFtW2luXSAgQm5DdHggICAgICBCTiBjb250ZXh0LCBjcmVhdGVkIHdpdGggQmlnTnVtTmV3 Q29udGV4dCgpLg0KPiA+ICsNCj4gPiArICBAcmV0dmFsIFRSVUUgICAgICAgICAgT24gc3VjY2Vz cy4NCj4gPiArICBAcmV0dmFsIEZBTFNFICAgICAgICAgT3RoZXJ3aXNlLg0KPiA+ICsqKi8NCj4g PiArQk9PTEVBTg0KPiA+ICtFRklBUEkNCj4gPiArRWNQb2ludFNldEFmZmluZUNvb3JkaW5hdGVz ICgNCj4gPiArICBJTiBDT05TVCBWT0lEICAqRWNHcm91cCwNCj4gPiArICBJTiBWT0lEICAgICAg ICAqRWNQb2ludCwNCj4gPiArICBJTiBDT05TVCBWT0lEICAqQm5YLA0KPiA+ICsgIElOIENPTlNU IFZPSUQgICpCblksDQo+ID4gKyAgSU4gVk9JRCAgICAgICAgKkJuQ3R4DQo+ID4gKyAgKQ0KPiA+ ICt7DQo+ID4gKyAgQVNTRVJUIChGQUxTRSk7DQo+ID4gKyAgcmV0dXJuIEZBTFNFOw0KPiA+ICt9 DQo+ID4gKw0KPiA+ICsvKioNCj4gPiArICBFQyBQb2ludCBhZGRpdGlvbi4gRWNQb2ludFJlc3Vs dCA9IEVjUG9pbnRBICsgRWNQb2ludEIuDQo+ID4gKw0KPiA+ICsgIEBwYXJhbVtpbl0gIEVjR3Jv dXAgICAgICAgICAgRUMgZ3JvdXAgb2JqZWN0Lg0KPiA+ICsgIEBwYXJhbVtvdXRdIEVjUG9pbnRS ZXN1bHQgICAgRUMgcG9pbnQgdG8gaG9sZCB0aGUgcmVzdWx0LiBUaGUgcG9pbnQgc2hvdWxkDQo+ ID4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiZSBwcm9wZXJseSBpbml0aWFsaXpl ZC4NCj4gPiArICBAcGFyYW1baW5dICBFY1BvaW50QSAgICAgICAgIEVDIFBvaW50Lg0KPiA+ICsg IEBwYXJhbVtpbl0gIEVjUG9pbnRCICAgICAgICAgRUMgUG9pbnQuDQo+ID4gKyAgQHBhcmFtW2lu XSAgQm5DdHggICAgICAgICAgICBCTiBjb250ZXh0LCBjcmVhdGVkIHdpdGggQmlnTnVtTmV3Q29u dGV4dCgpLg0KPiA+ICsNCj4gPiArICBAcmV0dmFsIFRSVUUgICAgICAgICAgT24gc3VjY2Vzcy4N Cj4gPiArICBAcmV0dmFsIEZBTFNFICAgICAgICAgT3RoZXJ3aXNlLg0KPiA+ICsqKi8NCj4gPiAr Qk9PTEVBTg0KPiA+ICtFRklBUEkNCj4gPiArRWNQb2ludEFkZCAoDQo+ID4gKyAgSU4gQ09OU1Qg Vk9JRCAgKkVjR3JvdXAsDQo+ID4gKyAgT1VUIFZPSUQgICAgICAgKkVjUG9pbnRSZXN1bHQsDQo+ ID4gKyAgSU4gQ09OU1QgVk9JRCAgKkVjUG9pbnRBLA0KPiA+ICsgIElOIENPTlNUIFZPSUQgICpF Y1BvaW50QiwNCj4gPiArICBJTiBWT0lEICAgICAgICAqQm5DdHgNCj4gPiArICApDQo+ID4gK3sN Cj4gPiArICBBU1NFUlQgKEZBTFNFKTsNCj4gPiArICByZXR1cm4gRkFMU0U7DQo+ID4gK30NCj4g PiArDQo+ID4gKy8qKg0KPiA+ICsgIFZhcmlhYmxlIEVDIHBvaW50IG11bHRpcGxpY2F0aW9uLiBF Y1BvaW50UmVzdWx0ID0gRWNQb2ludCAqIEJuUFNjYWxhci4NCj4gPiArDQo+ID4gKyAgQHBhcmFt W2luXSAgRWNHcm91cCAgICAgICAgICBFQyBncm91cCBvYmplY3QuDQo+ID4gKyAgQHBhcmFtW291 dF0gRWNQb2ludFJlc3VsdCAgICBFQyBwb2ludCB0byBob2xkIHRoZSByZXN1bHQuIFRoZSBwb2lu dCBzaG91bGQNCj4gPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJlIHByb3Blcmx5 IGluaXRpYWxpemVkLg0KPiA+ICsgIEBwYXJhbVtpbl0gIEVjUG9pbnQgICAgICAgICAgRUMgUG9p bnQuDQo+ID4gKyAgQHBhcmFtW2luXSAgQm5QU2NhbGFyICAgICAgICBQIFNjYWxhci4NCj4gPiAr ICBAcGFyYW1baW5dICBCbkN0eCAgICAgICAgICAgIEJOIGNvbnRleHQsIGNyZWF0ZWQgd2l0aCBC aWdOdW1OZXdDb250ZXh0KCkuDQo+ID4gKw0KPiA+ICsgIEByZXR2YWwgVFJVRSAgICAgICAgICBP biBzdWNjZXNzLg0KPiA+ICsgIEByZXR2YWwgRkFMU0UgICAgICAgICBPdGhlcndpc2UuDQo+ID4g KyoqLw0KPiA+ICtCT09MRUFODQo+ID4gK0VGSUFQSQ0KPiA+ICtFY1BvaW50TXVsICgNCj4gPiAr ICBJTiBDT05TVCBWT0lEICAqRWNHcm91cCwNCj4gPiArICBPVVQgVk9JRCAgICAgICAqRWNQb2lu dFJlc3VsdCwNCj4gPiArICBJTiBDT05TVCBWT0lEICAqRWNQb2ludCwNCj4gPiArICBJTiBDT05T VCBWT0lEICAqQm5QU2NhbGFyLA0KPiA+ICsgIElOIFZPSUQgICAgICAgICpCbkN0eA0KPiA+ICsg ICkNCj4gPiArew0KPiA+ICsgIEFTU0VSVCAoRkFMU0UpOw0KPiA+ICsgIHJldHVybiBGQUxTRTsN Cj4gPiArfQ0KPiA+ICsNCj4gPiArLyoqDQo+ID4gKyAgQ2FsY3VsYXRlIHRoZSBpbnZlcnNlIG9m IHRoZSBzdXBwbGllZCBFQyBwb2ludC4NCj4gPiArDQo+ID4gKyAgQHBhcmFtW2luXSAgICAgRWNH cm91cCAgIEVDIGdyb3VwIG9iamVjdC4NCj4gPiArICBAcGFyYW1baW4sb3V0XSBFY1BvaW50ICAg RUMgcG9pbnQgdG8gaW52ZXJ0Lg0KPiA+ICsgIEBwYXJhbVtpbl0gICAgIEJuQ3R4ICAgICBCTiBj b250ZXh0LCBjcmVhdGVkIHdpdGggQmlnTnVtTmV3Q29udGV4dCgpLg0KPiA+ICsNCj4gPiArICBA cmV0dmFsIFRSVUUgICAgICAgICAgT24gc3VjY2Vzcy4NCj4gPiArICBAcmV0dmFsIEZBTFNFICAg ICAgICAgT3RoZXJ3aXNlLg0KPiA+ICsqKi8NCj4gPiArQk9PTEVBTg0KPiA+ICtFRklBUEkNCj4g PiArRWNQb2ludEludmVydCAoDQo+ID4gKyAgSU4gQ09OU1QgVk9JRCAgKkVjR3JvdXAsDQo+ID4g KyAgSU4gT1VUIFZPSUQgICAgKkVjUG9pbnQsDQo+ID4gKyAgSU4gVk9JRCAgICAgICAgKkJuQ3R4 DQo+ID4gKyAgKQ0KPiA+ICt7DQo+ID4gKyAgQVNTRVJUIChGQUxTRSk7DQo+ID4gKyAgcmV0dXJu IEZBTFNFOw0KPiA+ICt9DQo+ID4gKw0KPiA+ICsvKioNCj4gPiArICBDaGVjayBpZiB0aGUgc3Vw cGxpZWQgcG9pbnQgaXMgb24gRUMgY3VydmUuDQo+ID4gKw0KPiA+ICsgIEBwYXJhbVtpbl0gIEVj R3JvdXAgICBFQyBncm91cCBvYmplY3QuDQo+ID4gKyAgQHBhcmFtW2luXSAgRWNQb2ludCAgIEVD IHBvaW50IHRvIGNoZWNrLg0KPiA+ICsgIEBwYXJhbVtpbl0gIEJuQ3R4ICAgICBCTiBjb250ZXh0 LCBjcmVhdGVkIHdpdGggQmlnTnVtTmV3Q29udGV4dCgpLg0KPiA+ICsNCj4gPiArICBAcmV0dmFs IFRSVUUgICAgICAgICAgT24gY3VydmUuDQo+ID4gKyAgQHJldHZhbCBGQUxTRSAgICAgICAgIE90 aGVyd2lzZS4NCj4gPiArKiovDQo+ID4gK0JPT0xFQU4NCj4gPiArRUZJQVBJDQo+ID4gK0VjUG9p bnRJc09uQ3VydmUgKA0KPiA+ICsgIElOIENPTlNUIFZPSUQgICpFY0dyb3VwLA0KPiA+ICsgIElO IENPTlNUIFZPSUQgICpFY1BvaW50LA0KPiA+ICsgIElOIFZPSUQgICAgICAgICpCbkN0eA0KPiA+ ICsgICkNCj4gPiArew0KPiA+ICsgIEFTU0VSVCAoRkFMU0UpOw0KPiA+ICsgIHJldHVybiBGQUxT RTsNCj4gPiArfQ0KPiA+ICsNCj4gPiArLyoqDQo+ID4gKyAgQ2hlY2sgaWYgdGhlIHN1cHBsaWVk IHBvaW50IGlzIGF0IGluZmluaXR5Lg0KPiA+ICsNCj4gPiArICBAcGFyYW1baW5dICBFY0dyb3Vw ICAgRUMgZ3JvdXAgb2JqZWN0Lg0KPiA+ICsgIEBwYXJhbVtpbl0gIEVjUG9pbnQgICBFQyBwb2lu dCB0byBjaGVjay4NCj4gPiArDQo+ID4gKyAgQHJldHZhbCBUUlVFICAgICAgICAgIEF0IGluZmlu aXR5Lg0KPiA+ICsgIEByZXR2YWwgRkFMU0UgICAgICAgICBPdGhlcndpc2UuDQo+ID4gKyoqLw0K PiA+ICtCT09MRUFODQo+ID4gK0VGSUFQSQ0KPiA+ICtFY1BvaW50SXNBdEluZmluaXR5ICgNCj4g PiArICBJTiBDT05TVCBWT0lEICAqRWNHcm91cCwNCj4gPiArICBJTiBDT05TVCBWT0lEICAqRWNQ b2ludA0KPiA+ICsgICkNCj4gPiArew0KPiA+ICsgIEFTU0VSVCAoRkFMU0UpOw0KPiA+ICsgIHJl dHVybiBGQUxTRTsNCj4gPiArfQ0KPiA+ICsNCj4gPiArLyoqDQo+ID4gKyAgQ2hlY2sgaWYgRUMg cG9pbnRzIGFyZSBlcXVhbC4NCj4gPiArDQo+ID4gKyAgQHBhcmFtW2luXSAgRWNHcm91cCAgIEVD IGdyb3VwIG9iamVjdC4NCj4gPiArICBAcGFyYW1baW5dICBFY1BvaW50QSAgRUMgcG9pbnQgQS4N Cj4gPiArICBAcGFyYW1baW5dICBFY1BvaW50QiAgRUMgcG9pbnQgQi4NCj4gPiArICBAcGFyYW1b aW5dICBCbkN0eCAgICAgQk4gY29udGV4dCwgY3JlYXRlZCB3aXRoIEJpZ051bU5ld0NvbnRleHQo KS4NCj4gPiArDQo+ID4gKyAgQHJldHZhbCBUUlVFICAgICAgICAgIEEgPT0gQi4NCj4gPiArICBA cmV0dmFsIEZBTFNFICAgICAgICAgT3RoZXJ3aXNlLg0KPiA+ICsqKi8NCj4gPiArQk9PTEVBTg0K PiA+ICtFRklBUEkNCj4gPiArRWNQb2ludEVxdWFsICgNCj4gPiArICBJTiBDT05TVCBWT0lEICAq RWNHcm91cCwNCj4gPiArICBJTiBDT05TVCBWT0lEICAqRWNQb2ludEEsDQo+ID4gKyAgSU4gQ09O U1QgVk9JRCAgKkVjUG9pbnRCLA0KPiA+ICsgIElOIFZPSUQgICAgICAgICpCbkN0eA0KPiA+ICsg ICkNCj4gPiArew0KPiA+ICsgIEFTU0VSVCAoRkFMU0UpOw0KPiA+ICsgIHJldHVybiBGQUxTRTsN Cj4gPiArfQ0KPiA+ICsNCj4gPiArLyoqDQo+ID4gKyAgU2V0IEVDIHBvaW50IGNvbXByZXNzZWQg Y29vcmRpbmF0ZXMuIFBvaW50cyBjYW4gYmUgZGVzY3JpYmVkIGluIHRlcm1zIG9mDQo+ID4gKyAg dGhlaXIgY29tcHJlc3NlZCBjb29yZGluYXRlcy4gRm9yIGEgcG9pbnQgKHgsIHkpLCBmb3IgYW55 IGdpdmVuIHZhbHVlIGZvciB4DQo+ID4gKyAgc3VjaCB0aGF0IHRoZSBwb2ludCBpcyBvbiB0aGUg Y3VydmUgdGhlcmUgd2lsbCBvbmx5IGV2ZXIgYmUgdHdvIHBvc3NpYmxlDQo+ID4gKyAgdmFsdWVz IGZvciB5LiBUaGVyZWZvcmUsIGEgcG9pbnQgY2FuIGJlIHNldCB1c2luZyB0aGlzIGZ1bmN0aW9u IHdoZXJlIEJuWCBpcw0KPiA+ICsgIHRoZSB4IGNvb3JkaW5hdGUgYW5kIFlCaXQgaXMgYSB2YWx1 ZSAwIG9yIDEgdG8gaWRlbnRpZnkgd2hpY2ggb2YgdGhlIHR3bw0KPiA+ICsgIHBvc3NpYmxlIHZh bHVlcyBmb3IgeSBzaG91bGQgYmUgdXNlZC4NCj4gPiArDQo+ID4gKyAgQHBhcmFtW2luXSAgRWNH cm91cCAgICBFQyBncm91cCBvYmplY3QuDQo+ID4gKyAgQHBhcmFtW2luXSAgRWNQb2ludCAgICBF QyBQb2ludC4NCj4gPiArICBAcGFyYW1baW5dICBCblggICAgICAgIFggY29vcmRpbmF0ZS4NCj4g PiArICBAcGFyYW1baW5dICBZQml0ICAgICAgIDAgb3IgMSB0byBpZGVudGlmeSB3aGljaCBZIHZh bHVlIGlzIHVzZWQuDQo+ID4gKyAgQHBhcmFtW2luXSAgQm5DdHggICAgICBCTiBjb250ZXh0LCBj cmVhdGVkIHdpdGggQmlnTnVtTmV3Q29udGV4dCgpLg0KPiA+ICsNCj4gPiArICBAcmV0dmFsIFRS VUUgICAgICAgICAgT24gc3VjY2Vzcy4NCj4gPiArICBAcmV0dmFsIEZBTFNFICAgICAgICAgT3Ro ZXJ3aXNlLg0KPiA+ICsqKi8NCj4gPiArQk9PTEVBTg0KPiA+ICtFRklBUEkNCj4gPiArRWNQb2lu dFNldENvbXByZXNzZWRDb29yZGluYXRlcyAoDQo+ID4gKyAgSU4gQ09OU1QgVk9JRCAgKkVjR3Jv dXAsDQo+ID4gKyAgSU4gVk9JRCAgICAgICAgKkVjUG9pbnQsDQo+ID4gKyAgSU4gQ09OU1QgVk9J RCAgKkJuWCwNCj4gPiArICBJTiBVSU5UOCAgICAgICBZQml0LA0KPiA+ICsgIElOIFZPSUQgICAg ICAgICpCbkN0eA0KPiA+ICsgICkNCj4gPiArew0KPiA+ICsgIEFTU0VSVCAoRkFMU0UpOw0KPiA+ ICsgIHJldHVybiBGQUxTRTsNCj4gPiArfQ0KPiA+ICsNCj4gPiArLyoqDQo+ID4gKyAgQWxsb2Nh dGVzIGFuZCBJbml0aWFsaXplcyBvbmUgRWxsaXB0aWMgQ3VydmUgQ29udGV4dCBmb3Igc3Vic2Vx dWVudCB1c2UNCj4gPiArICB3aXRoIHRoZSBOSUQuDQo+ID4gKw0KPiA+ICsgIEBwYXJhbVtpbl0g IE5pZCBjaXBoZXIgTklEDQo+ID4gKyAgQHJldHVybiAgICAgUG9pbnRlciB0byB0aGUgRWxsaXB0 aWMgQ3VydmUgQ29udGV4dCB0aGF0IGhhcyBiZWVuIGluaXRpYWxpemVkLg0KPiA+ICsgICAgICAg ICAgICAgIElmIHRoZSBhbGxvY2F0aW9ucyBmYWlscywgRWNOZXdCeU5pZCgpIHJldHVybnMgTlVM TC4NCj4gPiArKiovDQo+ID4gK1ZPSUQgKg0KPiA+ICtFRklBUEkNCj4gPiArRWNOZXdCeU5pZCAo DQo+ID4gKyAgSU4gVUlOVE4gIE5pZA0KPiA+ICsgICkNCj4gPiArew0KPiA+ICsgIEFTU0VSVCAo RkFMU0UpOw0KPiA+ICsgIHJldHVybiBOVUxMOw0KPiA+ICt9DQo+ID4gKw0KPiA+ICsvKioNCj4g PiArICBSZWxlYXNlIHRoZSBzcGVjaWZpZWQgRUMgY29udGV4dC4NCj4gPiArDQo+ID4gKyAgQHBh cmFtW2luXSAgRWNDb250ZXh0ICBQb2ludGVyIHRvIHRoZSBFQyBjb250ZXh0IHRvIGJlIHJlbGVh c2VkLg0KPiA+ICsqKi8NCj4gPiArVk9JRA0KPiA+ICtFRklBUEkNCj4gPiArRWNGcmVlICgNCj4g PiArICBJTiAgVk9JRCAgKkVjQ29udGV4dA0KPiA+ICsgICkNCj4gPiArew0KPiA+ICsgIEFTU0VS VCAoRkFMU0UpOw0KPiA+ICt9DQo+ID4gKw0KPiA+ICsvKioNCj4gPiArICBHZW5lcmF0ZXMgRUMg a2V5IGFuZCByZXR1cm5zIEVDIHB1YmxpYyBrZXkgKFgsIFkpLCBQbGVhc2Ugbm90ZSwgdGhpcyBm dW5jdGlvbiB1c2VzDQo+ID4gKyAgcHNldWRvIHJhbmRvbSBudW1iZXIgZ2VuZXJhdG9yLiBUaGUg Y2FsbGVyIG11c3QgbWFrZSBzdXJlIFJhbmRvbVNlZWQoKQ0KPiA+ICsgIGZ1bmN0aW9uIHdhcyBw cm9wZXJseSBjYWxsZWQgYmVmb3JlLg0KPiA+ICsgIFRoZSBFYyBjb250ZXh0IHNob3VsZCBiZSBj b3JyZWN0bHkgaW5pdGlhbGl6ZWQgYnkgRWNOZXdCeU5pZC4NCj4gPiArICBUaGlzIGZ1bmN0aW9u IGdlbmVyYXRlcyByYW5kb20gc2VjcmV0LCBhbmQgY29tcHV0ZXMgdGhlIHB1YmxpYyBrZXkgKFgs IFkpLCB3aGljaCBpcw0KPiA+ICsgIHJldHVybmVkIHZpYSBwYXJhbWV0ZXIgUHVibGljLCBQdWJs aWNTaXplLg0KPiA+ICsgIFggaXMgdGhlIGZpcnN0IGhhbGYgb2YgUHVibGljIHdpdGggc2l6ZSBi ZWluZyBQdWJsaWNTaXplIC8gMiwNCj4gPiArICBZIGlzIHRoZSBzZWNvbmQgaGFsZiBvZiBQdWJs aWMgd2l0aCBzaXplIGJlaW5nIFB1YmxpY1NpemUgLyAyLg0KPiA+ICsgIEVDIGNvbnRleHQgaXMg dXBkYXRlZCBhY2NvcmRpbmdseS4NCj4gPiArICBJZiB0aGUgUHVibGljIGJ1ZmZlciBpcyB0b28g c21hbGwgdG8gaG9sZCB0aGUgcHVibGljIFgsIFksIEZBTFNFIGlzIHJldHVybmVkIGFuZA0KPiA+ ICsgIFB1YmxpY1NpemUgaXMgc2V0IHRvIHRoZSByZXF1aXJlZCBidWZmZXIgc2l6ZSB0byBvYnRh aW4gdGhlIHB1YmxpYyBYLCBZLg0KPiA+ICsgIEZvciBQLTI1NiwgdGhlIFB1YmxpY1NpemUgaXMg NjQuIEZpcnN0IDMyLWJ5dGUgaXMgWCwgU2Vjb25kIDMyLWJ5dGUgaXMgWS4NCj4gPiArICBGb3Ig UC0zODQsIHRoZSBQdWJsaWNTaXplIGlzIDk2LiBGaXJzdCA0OC1ieXRlIGlzIFgsIFNlY29uZCA0 OC1ieXRlIGlzIFkuDQo+ID4gKyAgRm9yIFAtNTIxLCB0aGUgUHVibGljU2l6ZSBpcyAxMzIuIEZp cnN0IDY2LWJ5dGUgaXMgWCwgU2Vjb25kIDY2LWJ5dGUgaXMgWS4NCj4gPiArICBJZiBFY0NvbnRl eHQgaXMgTlVMTCwgdGhlbiByZXR1cm4gRkFMU0UuDQo+ID4gKyAgSWYgUHVibGljU2l6ZSBpcyBO VUxMLCB0aGVuIHJldHVybiBGQUxTRS4NCj4gPiArICBJZiBQdWJsaWNTaXplIGlzIGxhcmdlIGVu b3VnaCBidXQgUHVibGljIGlzIE5VTEwsIHRoZW4gcmV0dXJuIEZBTFNFLg0KPiA+ICsgIEBwYXJh bVtpbiwgb3V0XSAgRWNDb250ZXh0ICAgICAgUG9pbnRlciB0byB0aGUgRUMgY29udGV4dC4NCj4g PiArICBAcGFyYW1bb3V0XSAgICAgIFB1YmxpY0tleSAgICAgIFBvaW50ZXIgdG8gdCBidWZmZXIg dG8gcmVjZWl2ZSBnZW5lcmF0ZWQgcHVibGljIFgsWS4NCj4gPiArICBAcGFyYW1baW4sIG91dF0g IFB1YmxpY0tleVNpemUgIE9uIGlucHV0LCB0aGUgc2l6ZSBvZiBQdWJsaWMgYnVmZmVyIGluIGJ5 dGVzLg0KPiA+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgT24gb3V0cHV0LCB0 aGUgc2l6ZSBvZiBkYXRhIHJldHVybmVkIGluIFB1YmxpYyBidWZmZXIgaW4gYnl0ZXMuDQo+ID4g KyAgQHJldHZhbCBUUlVFICAgRUMgcHVibGljIFgsWSBnZW5lcmF0aW9uIHN1Y2NlZWRlZC4NCj4g PiArICBAcmV0dmFsIEZBTFNFICBFQyBwdWJsaWMgWCxZIGdlbmVyYXRpb24gZmFpbGVkLg0KPiA+ ICsgIEByZXR2YWwgRkFMU0UgIFB1YmxpY0tleVNpemUgaXMgbm90IGxhcmdlIGVub3VnaC4NCj4g PiArKiovDQo+ID4gK0JPT0xFQU4NCj4gPiArRUZJQVBJDQo+ID4gK0VjR2VuZXJhdGVLZXkgKA0K PiA+ICsgIElOIE9VVCAgVk9JRCAgICpFY0NvbnRleHQsDQo+ID4gKyAgT1VUICAgICBVSU5UOCAg KlB1YmxpY0tleSwNCj4gPiArICBJTiBPVVQgIFVJTlROICAqUHVibGljS2V5U2l6ZQ0KPiA+ICsg ICkNCj4gPiArew0KPiA+ICsgIEFTU0VSVCAoRkFMU0UpOw0KPiA+ICsgIHJldHVybiBGQUxTRTsN Cj4gPiArfQ0KPiA+ICsNCj4gPiArLyoqDQo+ID4gKyAgR2V0cyB0aGUgcHVibGljIGtleSBjb21w b25lbnQgZnJvbSB0aGUgZXN0YWJsaXNoZWQgRUMgY29udGV4dC4NCj4gPiArICBUaGUgRWMgY29u dGV4dCBzaG91bGQgYmUgY29ycmVjdGx5IGluaXRpYWxpemVkIGJ5IEVjTmV3QnlOaWQsIGFuZCBz dWNjZXNzZnVsbHkNCj4gPiArICBnZW5lcmF0ZSBrZXkgcGFpciBmcm9tIEVjR2VuZXJhdGVLZXko KS4NCj4gPiArICBGb3IgUC0yNTYsIHRoZSBQdWJsaWNTaXplIGlzIDY0LiBGaXJzdCAzMi1ieXRl IGlzIFgsIFNlY29uZCAzMi1ieXRlIGlzIFkuDQo+ID4gKyAgRm9yIFAtMzg0LCB0aGUgUHVibGlj U2l6ZSBpcyA5Ni4gRmlyc3QgNDgtYnl0ZSBpcyBYLCBTZWNvbmQgNDgtYnl0ZSBpcyBZLg0KPiA+ ICsgIEZvciBQLTUyMSwgdGhlIFB1YmxpY1NpemUgaXMgMTMyLiBGaXJzdCA2Ni1ieXRlIGlzIFgs IFNlY29uZCA2Ni1ieXRlIGlzIFkuDQo+ID4gKyAgQHBhcmFtW2luLCBvdXRdICBFY0NvbnRleHQg ICAgICBQb2ludGVyIHRvIEVDIGNvbnRleHQgYmVpbmcgc2V0Lg0KPiA+ICsgIEBwYXJhbVtvdXRd ICAgICAgUHVibGljS2V5ICAgICAgUG9pbnRlciB0byB0IGJ1ZmZlciB0byByZWNlaXZlIGdlbmVy YXRlZCBwdWJsaWMgWCxZLg0KPiA+ICsgIEBwYXJhbVtpbiwgb3V0XSAgUHVibGljS2V5U2l6ZSAg T24gaW5wdXQsIHRoZSBzaXplIG9mIFB1YmxpYyBidWZmZXIgaW4gYnl0ZXMuDQo+ID4gKyAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBPbiBvdXRwdXQsIHRoZSBzaXplIG9mIGRhdGEg cmV0dXJuZWQgaW4gUHVibGljIGJ1ZmZlciBpbiBieXRlcy4NCj4gPiArICBAcmV0dmFsICBUUlVF ICAgRUMga2V5IGNvbXBvbmVudCB3YXMgcmV0cmlldmVkIHN1Y2Nlc3NmdWxseS4NCj4gPiArICBA cmV0dmFsICBGQUxTRSAgSW52YWxpZCBFQyBrZXkgY29tcG9uZW50Lg0KPiA+ICsqKi8NCj4gPiAr Qk9PTEVBTg0KPiA+ICtFRklBUEkNCj4gPiArRWNHZXRQdWJLZXkgKA0KPiA+ICsgIElOIE9VVCAg Vk9JRCAgICpFY0NvbnRleHQsDQo+ID4gKyAgT1VUICAgICBVSU5UOCAgKlB1YmxpY0tleSwNCj4g PiArICBJTiBPVVQgIFVJTlROICAqUHVibGljS2V5U2l6ZQ0KPiA+ICsgICkNCj4gPiArew0KPiA+ ICsgIEFTU0VSVCAoRkFMU0UpOw0KPiA+ICsgIHJldHVybiBGQUxTRTsNCj4gPiArfQ0KPiA+ICsN Cj4gPiArLyoqDQo+ID4gKyAgQ29tcHV0ZXMgZXhjaGFuZ2VkIGNvbW1vbiBrZXkuDQo+ID4gKyAg R2l2ZW4gcGVlcidzIHB1YmxpYyBrZXkgKFgsIFkpLCB0aGlzIGZ1bmN0aW9uIGNvbXB1dGVzIHRo ZSBleGNoYW5nZWQgY29tbW9uIGtleSwNCj4gPiArICBiYXNlZCBvbiBpdHMgb3duIGNvbnRleHQg aW5jbHVkaW5nIHZhbHVlIG9mIGN1cnZlIHBhcmFtZXRlciBhbmQgcmFuZG9tIHNlY3JldC4NCj4g PiArICBYIGlzIHRoZSBmaXJzdCBoYWxmIG9mIFBlZXJQdWJsaWMgd2l0aCBzaXplIGJlaW5nIFBl ZXJQdWJsaWNTaXplIC8gMiwNCj4gPiArICBZIGlzIHRoZSBzZWNvbmQgaGFsZiBvZiBQZWVyUHVi bGljIHdpdGggc2l6ZSBiZWluZyBQZWVyUHVibGljU2l6ZSAvIDIuDQo+ID4gKyAgSWYgRWNDb250 ZXh0IGlzIE5VTEwsIHRoZW4gcmV0dXJuIEZBTFNFLg0KPiA+ICsgIElmIFBlZXJQdWJsaWMgaXMg TlVMTCwgdGhlbiByZXR1cm4gRkFMU0UuDQo+ID4gKyAgSWYgUGVlclB1YmxpY1NpemUgaXMgMCwg dGhlbiByZXR1cm4gRkFMU0UuDQo+ID4gKyAgSWYgS2V5IGlzIE5VTEwsIHRoZW4gcmV0dXJuIEZB TFNFLg0KPiA+ICsgIElmIEtleVNpemUgaXMgbm90IGxhcmdlIGVub3VnaCwgdGhlbiByZXR1cm4g RkFMU0UuDQo+ID4gKyAgRm9yIFAtMjU2LCB0aGUgUGVlclB1YmxpY1NpemUgaXMgNjQuIEZpcnN0 IDMyLWJ5dGUgaXMgWCwgU2Vjb25kIDMyLWJ5dGUgaXMgWS4NCj4gPiArICBGb3IgUC0zODQsIHRo ZSBQZWVyUHVibGljU2l6ZSBpcyA5Ni4gRmlyc3QgNDgtYnl0ZSBpcyBYLCBTZWNvbmQgNDgtYnl0 ZSBpcyBZLg0KPiA+ICsgIEZvciBQLTUyMSwgdGhlIFBlZXJQdWJsaWNTaXplIGlzIDEzMi4gRmly c3QgNjYtYnl0ZSBpcyBYLCBTZWNvbmQgNjYtYnl0ZSBpcyBZLg0KPiA+ICsgIEBwYXJhbVtpbiwg b3V0XSAgRWNDb250ZXh0ICAgICAgICAgIFBvaW50ZXIgdG8gdGhlIEVDIGNvbnRleHQuDQo+ID4g KyAgQHBhcmFtW2luXSAgICAgICBQZWVyUHVibGljICAgICAgICAgUG9pbnRlciB0byB0aGUgcGVl cidzIHB1YmxpYyBYLFkuDQo+ID4gKyAgQHBhcmFtW2luXSAgICAgICBQZWVyUHVibGljU2l6ZSAg ICAgU2l6ZSBvZiBwZWVyJ3MgcHVibGljIFgsWSBpbiBieXRlcy4NCj4gPiArICBAcGFyYW1baW5d ICAgICAgIENvbXByZXNzRmxhZyAgICAgICBGbGFnIG9mIFBlZXJQdWJsaWMgaXMgY29tcHJlc3Nl ZCBvciBub3QuDQo+ID4gKyAgQHBhcmFtW291dF0gICAgICBLZXkgICAgICAgICAgICAgICAgUG9p bnRlciB0byB0aGUgYnVmZmVyIHRvIHJlY2VpdmUgZ2VuZXJhdGVkIGtleS4NCj4gPiArICBAcGFy YW1baW4sIG91dF0gIEtleVNpemUgICAgICAgICAgICBPbiBpbnB1dCwgdGhlIHNpemUgb2YgS2V5 IGJ1ZmZlciBpbiBieXRlcy4NCj4gPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBPbiBvdXRwdXQsIHRoZSBzaXplIG9mIGRhdGEgcmV0dXJuZWQgaW4gS2V5IGJ1ZmZlciBp biBieXRlcy4NCj4gPiArICBAcmV0dmFsIFRSVUUgICBFQyBleGNoYW5nZWQga2V5IGdlbmVyYXRp b24gc3VjY2VlZGVkLg0KPiA+ICsgIEByZXR2YWwgRkFMU0UgIEVDIGV4Y2hhbmdlZCBrZXkgZ2Vu ZXJhdGlvbiBmYWlsZWQuDQo+ID4gKyAgQHJldHZhbCBGQUxTRSAgS2V5U2l6ZSBpcyBub3QgbGFy Z2UgZW5vdWdoLg0KPiA+ICsqKi8NCj4gPiArQk9PTEVBTg0KPiA+ICtFRklBUEkNCj4gPiArRWNE aENvbXB1dGVLZXkgKA0KPiA+ICsgIElOIE9VVCAgVk9JRCAgICAgICAgICpFY0NvbnRleHQsDQo+ ID4gKyAgSU4gICAgICBDT05TVCBVSU5UOCAgKlBlZXJQdWJsaWMsDQo+ID4gKyAgSU4gICAgICBV SU5UTiAgICAgICAgUGVlclB1YmxpY1NpemUsDQo+ID4gKyAgSU4gICAgICBDT05TVCBJTlQzMiAg KkNvbXByZXNzRmxhZywNCj4gPiArICBPVVQgICAgIFVJTlQ4ICAgICAgICAqS2V5LA0KPiA+ICsg IElOIE9VVCAgVUlOVE4gICAgICAgICpLZXlTaXplDQo+ID4gKyAgKQ0KPiA+ICt7DQo+ID4gKyAg QVNTRVJUIChGQUxTRSk7DQo+ID4gKyAgcmV0dXJuIEZBTFNFOw0KPiA+ICt9DQo+ID4gLS0NCj4g PiAyLjMxLjEud2luZG93cy4xDQo+ID4NCj4gPg0KPiA+DQo+ID4gDQo+ID4NCg0K