Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by smtp.lore.kernel.org (Postfix) with ESMTP id 05878C54E94 for ; Wed, 25 Jan 2023 22:27:19 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S235121AbjAYW1T (ORCPT ); Wed, 25 Jan 2023 17:27:19 -0500 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:40640 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S229458AbjAYW1R (ORCPT ); Wed, 25 Jan 2023 17:27:17 -0500 Received: from mga04.intel.com (mga04.intel.com [192.55.52.120]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id A5C88CA3B for ; Wed, 25 Jan 2023 14:27:12 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=intel.com; i=@intel.com; q=dns/txt; s=Intel; t=1674685632; x=1706221632; h=from:to:cc:subject:date:message-id:references: in-reply-to:content-id:content-transfer-encoding: mime-version; bh=DrYhblk+ayOaa0crprli8RbAKwvUO7BRrXxdw+ayObQ=; b=jjFKGtUvU8HYk5C13Gzy/3EFWE2AtGOQkZCJiz44xTdql7cNSK3/MYy/ euxzQB9NPYFBNILBHCe1zs0cDSqU8MxSVivzpYq1lK3HSrCTSZtbw31fl zabvbMf91UFB2faWQ7PRaxE/jAsEzQQSVjhiqBkA8x6CnWAbsB++Sez53 vs1AzQgsV0P9koYse0VefP6zpOuIwR+qDQ+k6O4fdOahIL5u+QbQMqkHL +Vc2nctSBhPoHxDnzEWOLInJHpe4+poKOcTQQTqU22aO7/RKE4dODZfJY a+pCqc+0thb5R047mZPRa4dJGCqc+VNAjXOnssv0mS6cqE66j0zjJdjvN Q==; X-IronPort-AV: E=McAfee;i="6500,9779,10601"; a="325368216" X-IronPort-AV: E=Sophos;i="5.97,246,1669104000"; d="scan'208";a="325368216" Received: from fmsmga002.fm.intel.com ([10.253.24.26]) by fmsmga104.fm.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 25 Jan 2023 14:27:12 -0800 X-ExtLoop1: 1 X-IronPort-AV: E=McAfee;i="6500,9779,10601"; a="770916618" X-IronPort-AV: E=Sophos;i="5.97,246,1669104000"; d="scan'208";a="770916618" Received: from fmsmsx602.amr.corp.intel.com ([10.18.126.82]) by fmsmga002.fm.intel.com with ESMTP; 25 Jan 2023 14:27:12 -0800 Received: from fmsmsx610.amr.corp.intel.com (10.18.126.90) by fmsmsx602.amr.corp.intel.com (10.18.126.82) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.2507.16; Wed, 25 Jan 2023 14:27:11 -0800 Received: from FMSEDG603.ED.cps.intel.com (10.1.192.133) by fmsmsx610.amr.corp.intel.com (10.18.126.90) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.2507.16 via Frontend Transport; Wed, 25 Jan 2023 14:27:11 -0800 Received: from NAM11-CO1-obe.outbound.protection.outlook.com (104.47.56.170) by edgegateway.intel.com (192.55.55.68) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.1.2507.16; Wed, 25 Jan 2023 14:27:10 -0800 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=I6lSWf16tc8USwEzIJVp85TVsXdsXH1kamEYp54Oz2qKXhuhaHvpkgkc4BhODGrcofyKUfVanbsDBAM/+rQI3lnyPXiPIxiQHCvfrVhSaTpqbaBmOVlN8h3zUqKWqMAUFwA7CcoORLdsE3Q9ye9cwy/8BHvyRklU7Oq2zjTyTXuMz1puRlLW4Whn0o21v+ebGeCSZauIBNj0EgFoUtqe+z0kw/qxL1sC9Lvw7VAVXv0U/NDe8RVe36DDqwT4t1shS0XZvOq3y4VQV8EZop+7v5izeFbbokwWqrthK1IHI1Su6ILrF7e/maphNfkRHgpT+PI7oQAkROoft4U39KXl0w== 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=DrYhblk+ayOaa0crprli8RbAKwvUO7BRrXxdw+ayObQ=; b=IDxLWsU2MzeroHbalVFspI5+hy3yEdUbzuYp6qq0X+gYDMnbBgvbTnBWc2UPu2pKwmsRHnZMGdxbXxECE/C65LKWoBwK5T0gQ2gt3pQ1K0e8NH0NHXv8a+KnQLUP/vIylqkilh+qCCK89SX0+dqKXQiGQdkSbay+U1xt97xqhTQIkJxdnCGsv6moUe77d2EWQbQzha4TYYsfDHYVXoRMDGlh09SxOs3fg7YmCuWbR4dRmNvb6jGYuB6msZ9SsIIErggkBqoZ7TWqPHrOIDwp4nblXYccwUof8EtEP1hgUQzGU1vMbqbVsXs7FxvKdf3X6QopWTRFNdE8pxTWAST5VA== 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 MW3PR11MB4556.namprd11.prod.outlook.com (2603:10b6:303:5b::21) by SA1PR11MB5874.namprd11.prod.outlook.com (2603:10b6:806:229::10) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.6002.33; Wed, 25 Jan 2023 22:27:05 +0000 Received: from MW3PR11MB4556.namprd11.prod.outlook.com ([fe80::addc:9f87:a77f:fa6f]) by MW3PR11MB4556.namprd11.prod.outlook.com ([fe80::addc:9f87:a77f:fa6f%9]) with mapi id 15.20.6002.033; Wed, 25 Jan 2023 22:27:05 +0000 From: "Stotland, Inga" To: "brian.gix@gmail.com" , "linux-bluetooth@vger.kernel.org" CC: "Gix, Brian" Subject: Re: [PATCH BlueZ v4 02/13] mesh: Add Remote Provisioning Thread-Topic: [PATCH BlueZ v4 02/13] mesh: Add Remote Provisioning Thread-Index: AQHZMDI/ewwmSp3DX0ey25iV4njYcK6vt+gA Date: Wed, 25 Jan 2023 22:27:05 +0000 Message-ID: <599e5683d44c983ae5863a140fc24616c045fb43.camel@intel.com> References: <20230124202616.310544-1-brian.gix@gmail.com> <20230124202616.310544-3-brian.gix@gmail.com> In-Reply-To: <20230124202616.310544-3-brian.gix@gmail.com> Accept-Language: en-US Content-Language: en-US X-MS-Has-Attach: X-MS-TNEF-Correlator: user-agent: Evolution 3.44.4 (3.44.4-2.fc36) 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: MW3PR11MB4556:EE_|SA1PR11MB5874:EE_ x-ms-office365-filtering-correlation-id: 1df92bbe-3931-48b9-f40f-08daff234a04 x-ms-exchange-senderadcheck: 1 x-ms-exchange-antispam-relay: 0 x-microsoft-antispam: BCL:0; x-microsoft-antispam-message-info: 2kix4EsOaKn1E8PvolIVA7GaLQ0wyVTiU17TmcRUyC8KccuiHiXaBHzWcI7k5zhWCnngthP0UZHSVZjcvTIzKOe1J4XTXe5JLCWVKaeRPBoC91wknNXT/5es1qiEPj929I5SkkH0ZiOP3zDKMX9UJ3hWoj8SB8RLRuWtR3WdNO8oQMl+16cSqruzIAImU1luNch4LOwPbLy0Vvxy13+ghRdKqQBRgUHszfQjTqV2+Y2zi17FHC9Q2Ti1m6xpN0IZatMw7nEXSlF/V+h1BKzmMZ15phzFdqZiwnzuMm33XnUc9DI8WgO1u52tT2faOiLvSvpxLZPe5QXDJABpIf1yjECIWVhenKiUsTOWe4mqSNrtO3quh4zfYtjBuGYUXGjqqvXAPgbeLjAJhfWU95jCDCLwIL4g3NQIrMUw6n/NSYgmIzPRijdtaXH2/4jqh5V7C23idD2yVLYIOwySCRbQGXUuwJQdEU6mSGGV489WDTG+OBk1xBLk9iLimwBzGbQRZ9zc3yGmML7yo0BRFhRIGkeLX7akHl+X6E2dtEx2en8MYJU54Af5MbfqMU7pySkWb0gu96ut97xwb/tJzZEeJQmKjs2ymlt0TpvtSAQTGiZvNThk4eDdpzH7SAhU7blt/ijs5FVVTK/KmyPrIqIqaPSlcsbQ/yNskYV8d6y0opghHcoRgcXcGS4qsEOpC9C+m3LRmsUYO+X/cvwrF7X90D7jiVKWC+osEPQAjTk5tg4= x-forefront-antispam-report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:MW3PR11MB4556.namprd11.prod.outlook.com;PTR:;CAT:NONE;SFS:(13230025)(346002)(39860400002)(366004)(396003)(376002)(136003)(451199018)(83380400001)(6486002)(122000001)(107886003)(4326008)(2616005)(66946007)(26005)(316002)(8676002)(66446008)(38070700005)(66556008)(186003)(478600001)(71200400001)(76116006)(64756008)(86362001)(36756003)(82960400001)(2906002)(38100700002)(66476007)(110136005)(6506007)(6512007)(41300700001)(5660300002)(8936002)(30864003)(2004002)(559001)(579004);DIR:OUT;SFP:1102; x-ms-exchange-antispam-messagedata-chunkcount: 1 x-ms-exchange-antispam-messagedata-0: =?utf-8?B?WVptRXgyOUpiOTMvcW1ibzBPRS8ydndGMHZ6UXJVRTZsQ082VTl1OGcwcWtl?= =?utf-8?B?VGdZeFJ3YURib09FRHRDRzFydzNiYnordG5QNFZiUFBVZVM2YUdZMGJ5aTVL?= =?utf-8?B?aUkrS0xRTVFsRTZBckk0TDBONUNNZkxpVkswem9sRnJFandPRWhCa2hFU21V?= =?utf-8?B?U2JHV3dKeFY2UENLUDVQeXV6ZCtzQ1RpSzFqSTMyRDczdVFkUkFBdmF1OVla?= =?utf-8?B?U3ZtZHZZSVJnQnpnbU5GTWlIdGFENnNSZkxnMWNYTDJyZngxMDZiMUNQQVFP?= =?utf-8?B?ZW5hcFljMCtUUEgwL2VRMzVXZCs1NEs4Tmd6a3pDL1JWMTFQVHNrblJqSURM?= =?utf-8?B?cDhwa3pzaFJDYUpHSUVDaGttMVVkc09wN2I2Nm1kd21QaDU1WDcyVlcwbXpD?= =?utf-8?B?dmNCNWNwVXlzZ2lLS0JiVU8vWmhYcS9LNmZER1QwalAxbStrSy9lNFZ6aTVi?= =?utf-8?B?ckFKclhsVDlVR3o4b3psTExUMldqelNHNTNtMER3eXRsSzFrdWRrQTVkWk1B?= =?utf-8?B?Mk5ieXZlc1pJb2U4bG1NSElidTgxV1hSc2N2QVdHd2lsM0FPb1hUa2tsbm1v?= =?utf-8?B?Zk01TFNzTlJ1NEw4eEtOYkcyQWM0N0xTRnhKYTF0K1ZhYmhYUVFocmJHcnRx?= =?utf-8?B?aDdWVVM1ZEtWRThJM3ZGZ2ZJSWxwSjVNZ2EvVXhtbEdhak43RWxjSDUzSVZx?= =?utf-8?B?bFhIOWRIUTlrN3VGbVd1cjVPOWVlYkNWNkF2RVJVN0orZmZPNkpqNG5Rd3J4?= =?utf-8?B?anJxN3NBd2VzdnhSUnd0ZnRjVTNudWxIWTlDa2FlZk1wbnVEdHpiMkhxRnNK?= =?utf-8?B?dHZ0alIvRFQ0WmRTcHlYMHFJcTM3bGFvRitGaHNSWGFxTkJiOW9uQVVSODNz?= =?utf-8?B?WVV1clY3ZklBdlIzZTM5S3hvS3lQQmM4QVF4cFdsSzdoZkNjeWNRUmlKQ01Q?= =?utf-8?B?NUEwNy9abUV1OG03UWh5SFhHdEtlNjZHZEoyVE1hWEZCZXVSY1ljRWdwQUNF?= =?utf-8?B?RFVvWEptVndsSkxqeGVSem52U2MwUmk0Tno0VHFxOGx3dzRuUEY5b0NKRnY2?= =?utf-8?B?ZVlvVVRvbDkvZy9nTXg3SXFDZm5XQ3pnZmJwUjBlT1dTa0wrVldCWjBKUTN0?= =?utf-8?B?S0ZlSW9rT245b1MxdnBzRkg1dDFKdVN6U21ydVNWMk95YmhVYmhtbXpmZE1a?= =?utf-8?B?UzNFdVQyQzU3UjZHYnB6T1ZQWHNkQXNBdUNqNGdwMXRKano0S25nZ0JtZmly?= =?utf-8?B?b3BmdHRjUFgrTEhvZHRNL0l4dUNsMjRIS2NrMTQxdGwrVGFPbExOTnpValMy?= =?utf-8?B?SGxVemNkcnZRdmVDVk96aEtzSzlIVGdrbWwxZFpud3VRcHBEZU11aklIOXli?= =?utf-8?B?WjJ3QWJ3eklEb1pZa1RBKzA3bEtSWWx1czN1U0JaUnF0R3JvUk1GeHZkTFJX?= =?utf-8?B?WDlLSEZqZjlmYnM1TWMxTDFUT2MreDgrNkRlaXRKZUxHZkdYbU9iUTNwcVE0?= =?utf-8?B?cXJBeVcxSk5SeHMvSVlRSSt4MS9tTzNtVENGeVRpaVhPRnVFWk1jUVlLaEZz?= =?utf-8?B?K0ZNeXVVR01pVGZnQjBhampxZ1dBU0hoUGJMeTNlWEdxRXIxZ2F0NUJwZWl2?= =?utf-8?B?bnpxeDZSd2VIamJzYzhJanVMNXpiWUFmRVp6MnlKeVBwTVRLM29RbFJnOGxH?= =?utf-8?B?TTdCYlBTV0JJbDJOZnNHRGRMK3ZpOWJLd3JPdTRJOWhlRWdZc0pHVkxwUHFs?= =?utf-8?B?TFNwME5reVQ3bWRwNHdTMDkrTWFlRkZFM1VDd3FqdUtMVUtOSGkwQ0k2VHR1?= =?utf-8?B?UGNDRWkyUjRzdW85a3VTOGMrVytyOTJLR1hNZEluOXFUOEpCVHdjdHhVN2t1?= =?utf-8?B?T2FpOVlWWFlaWjNZUnFTUVFmUlNMVUxoUXgyY0VzVUZrdUdPSWR4K3JheFdL?= =?utf-8?B?UUZKdmVoWGs5QW9BTkFNcTZDUkhFblFKSTJyWTFSNUdEcnZ5UDkzT2s3c1o4?= =?utf-8?B?OFpaODdZMUlFcUhwMlZkWEVVZjNveFVabFNma2tYUEM4MnB6d0gxWGZFSjJN?= =?utf-8?B?UC8yNnB4TlgrRmZ3Qm1aSGkwTUFSallyUXJ3QjhCbk0zYU53ZGozWW9uV2t5?= =?utf-8?B?YjF4RzVSZ3JKZ0ZlbGFzL2pQcnZSS0E0MWRJN0lQWmIxbVlCOGJOTUdSZ1p4?= =?utf-8?B?UXc9PQ==?= Content-Type: text/plain; charset="utf-8" Content-ID: <2C6EB9F49C3714409E34934978EC34DF@namprd11.prod.outlook.com> Content-Transfer-Encoding: base64 MIME-Version: 1.0 X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-AuthSource: MW3PR11MB4556.namprd11.prod.outlook.com X-MS-Exchange-CrossTenant-Network-Message-Id: 1df92bbe-3931-48b9-f40f-08daff234a04 X-MS-Exchange-CrossTenant-originalarrivaltime: 25 Jan 2023 22:27:05.6966 (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: yn2xHQH8/IXKdcRFQH9oWnB2QKryJg+JHpBxjbUBdTRg0/mCTlUDHYhDR2BULc6yZGA91rqgnA7s5qT6l+ohyA== X-MS-Exchange-Transport-CrossTenantHeadersStamped: SA1PR11MB5874 X-OriginatorOrg: intel.com Precedence: bulk List-ID: X-Mailing-List: linux-bluetooth@vger.kernel.org VGlueSBmaXggYW5kIGEgcXVlc3Rpb24gYmVsb3cKCk9uIFR1ZSwgMjAyMy0wMS0yNCBhdCAxMjoy NiAtMDgwMCwgQnJpYW4gR2l4IHdyb3RlOgo+IEZyb206IEJyaWFuIEdpeCA8YnJpYW4uZ2l4QGlu dGVsLmNvbT4KPiAKPiBBZGQgUmVtb3RlIFByb3Zpc2lvbmluZyBTZXJ2ZXIKPiBBZGQgUmVtb3Rl IFByb3Zpc2lvbmluZyBDbGllbnQKPiBSZW1vdmUgbG9jYWwgc2Nhbm5pbmcvcHJvdmlzaW9uaW5n Cj4gQWRkIGRlbGV0ZS1hbGwgZGV2IGtleSBmdW5jdGlvbgo+IEFkZCBOUFBJIHByb2NlZHVyZXMK PiAtLS0KPiDCoE1ha2VmaWxlLm1lc2jCoMKgwqDCoMKgwqDCoMKgwqDCoCB8wqDCoCAxICsKPiDC oG1lc2gvY2ZnbW9kLXNlcnZlci5jwqDCoMKgIHzCoMKgIDIgKy0KPiDCoG1lc2gva2V5cmluZy5j wqDCoMKgwqDCoMKgwqDCoMKgIHzCoCAyOSArLQo+IMKgbWVzaC9rZXlyaW5nLmjCoMKgwqDCoMKg wqDCoMKgwqAgfMKgwqAgMSArCj4gwqBtZXNoL21hbmFnZXIuY8KgwqDCoMKgwqDCoMKgwqDCoCB8 IDUzNSArKysrKysrKysrKysrKysrKysrLS0tLS0KPiDCoG1lc2gvbWVzaC1jb25maWctanNvbi5j IHwgMzgwICsrKysrKysrKysrLS0tLS0tCj4gwqBtZXNoL21lc2gtY29uZmlnLmjCoMKgwqDCoMKg IHzCoMKgIDYgKy0KPiDCoG1lc2gvbW9kZWwuY8KgwqDCoMKgwqDCoMKgwqDCoMKgwqAgfMKgIDI3 ICstCj4gwqBtZXNoL25vZGUuY8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCB8IDI1NSArKysrKysr KystLQo+IMKgbWVzaC9ub2RlLmjCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgfMKgwqAgMyArCj4g wqBtZXNoL3BiLWFkdi5jwqDCoMKgwqDCoMKgwqDCoMKgwqAgfMKgwqAgNCArLQo+IMKgbWVzaC9w Yi1hZHYuaMKgwqDCoMKgwqDCoMKgwqDCoMKgIHzCoMKgIDIgKy0KPiDCoG1lc2gvcHJvdi1hY2Nl cHRvci5jwqDCoMKgIHzCoCA4NyArKy0tCj4gwqBtZXNoL3Byb3YtaW5pdGlhdG9yLmPCoMKgIHwg MjY5ICsrKysrKysrKysrLQo+IMKgbWVzaC9wcm92LmjCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAg fMKgwqAgNCArLQo+IMKgbWVzaC9wcm92aXNpb24uaMKgwqDCoMKgwqDCoMKgIHzCoCAyMyArLQo+ IMKgbWVzaC9yZW1wcnYtc2VydmVyLmPCoMKgwqAgfCA5MDcKPiArKysrKysrKysrKysrKysrKysr KysrKysrKysrKysrKysrKysrKysrCj4gwqBtZXNoL3JlbXBydi5owqDCoMKgwqDCoMKgwqDCoMKg wqAgfMKgIDc4ICsrKysKPiDCoDE4IGZpbGVzIGNoYW5nZWQsIDIyNDYgaW5zZXJ0aW9ucygrKSwg MzY3IGRlbGV0aW9ucygtKQo+IMKgY3JlYXRlIG1vZGUgMTAwNjQ0IG1lc2gvcmVtcHJ2LXNlcnZl ci5jCj4gwqBjcmVhdGUgbW9kZSAxMDA2NDQgbWVzaC9yZW1wcnYuaAo+IAo+IGRpZmYgLS1naXQg YS9NYWtlZmlsZS5tZXNoIGIvTWFrZWZpbGUubWVzaAo+IGluZGV4IDMwNDdmMzYyYi4uZTE4YTE2 OWViIDEwMDY0NAo+IC0tLSBhL01ha2VmaWxlLm1lc2gKPiArKysgYi9NYWtlZmlsZS5tZXNoCj4g QEAgLTI2LDYgKzI2LDcgQEAgbWVzaF9zb3VyY2VzID0gbWVzaC9tZXNoLmggbWVzaC9tZXNoLmMg XAo+IMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqBtZXNoL3Byb3Zpc2lvbi5oIG1lc2gvcHJvdi5oIFwKPiDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgbWVzaC9t b2RlbC5oIG1lc2gvbW9kZWwuYyBcCj4gwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoG1lc2gvY2ZnbW9kLmggbWVzaC9jZmdtb2Qt c2VydmVyLmMgXAo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoG1lc2gvcmVtcHJ2LmggbWVzaC9yZW1wcnYtc2VydmVyLmMgXAo+ IMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqBtZXNoL21lc2gtY29uZmlnLmggbWVzaC9tZXNoLWNvbmZpZy0KPiBqc29uLmMgXAo+ IMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqBtZXNoL3V0aWwuaCBtZXNoL3V0aWwuYyBcCj4gwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoG1lc2gvZGJ1cy5oIG1l c2gvZGJ1cy5jIFwKPiBkaWZmIC0tZ2l0IGEvbWVzaC9jZmdtb2Qtc2VydmVyLmMgYi9tZXNoL2Nm Z21vZC1zZXJ2ZXIuYwo+IGluZGV4IGJlOTBlZjhjNS4uM2Q3ZWZjNDRiIDEwMDY0NAo+IC0tLSBh L21lc2gvY2ZnbW9kLXNlcnZlci5jCj4gKysrIGIvbWVzaC9jZmdtb2Qtc2VydmVyLmMKPiBAQCAt MzAsOCArMzAsOCBAQAo+IMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgKFNFVF9JRChT SUdfVkVORE9SLCBsX2dldF9sZTE2KHBrdCkpKSkKPiDCoAo+IMKgLyogU3VwcG9ydGVkIGNvbXBv c2l0aW9uIHBhZ2VzLCBzb3J0ZWQgaGlnaCB0byBsb3cgKi8KPiAtLyogT25seSBwYWdlIDAgaXMg Y3VycmVudGx5IHN1cHBvcnRlZCAqLwo+IMKgc3RhdGljIGNvbnN0IHVpbnQ4X3Qgc3VwcG9ydGVk X3BhZ2VzW10gPSB7Cj4gK8KgwqDCoMKgwqDCoMKgMTI4LAo+IMKgwqDCoMKgwqDCoMKgwqAwCj4g wqB9Owo+IMKgCj4gZGlmZiAtLWdpdCBhL21lc2gva2V5cmluZy5jIGIvbWVzaC9rZXlyaW5nLmMK PiBpbmRleCA5OTVhNGI4OGYuLjg5NGZiMTRmYSAxMDA2NDQKPiAtLS0gYS9tZXNoL2tleXJpbmcu Ywo+ICsrKyBiL21lc2gva2V5cmluZy5jCj4gQEAgLTMwLDkgKzMwLDkgQEAKPiDCoCNpbmNsdWRl ICJtZXNoL25vZGUuaCIKPiDCoCNpbmNsdWRlICJtZXNoL2tleXJpbmcuaCIKPiDCoAo+IC1jb25z dCBjaGFyICpkZXZfa2V5X2RpciA9ICIvZGV2X2tleXMiOwo+IC1jb25zdCBjaGFyICphcHBfa2V5 X2RpciA9ICIvYXBwX2tleXMiOwo+IC1jb25zdCBjaGFyICpuZXRfa2V5X2RpciA9ICIvbmV0X2tl eXMiOwo+ICtzdGF0aWMgY29uc3QgY2hhciAqZGV2X2tleV9kaXIgPSAiL2Rldl9rZXlzIjsKPiAr c3RhdGljIGNvbnN0IGNoYXIgKmFwcF9rZXlfZGlyID0gIi9hcHBfa2V5cyI7Cj4gK3N0YXRpYyBj b25zdCBjaGFyICpuZXRfa2V5X2RpciA9ICIvbmV0X2tleXMiOwo+IMKgCj4gwqBzdGF0aWMgaW50 IG9wZW5fa2V5X2ZpbGUoc3RydWN0IG1lc2hfbm9kZSAqbm9kZSwgY29uc3QgY2hhcgo+ICprZXlf ZGlyLAo+IMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqB1aW50MTZfdCBpZHgsCj4gaW50IGZsYWdzKQo+IEBAIC0yOTUsNiArMjk1LDcgQEAgYm9v bCBrZXlyaW5nX2dldF9yZW1vdGVfZGV2X2tleShzdHJ1Y3QgbWVzaF9ub2RlCj4gKm5vZGUsIHVp bnQxNl90IHVuaWNhc3QsCj4gwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBjbG9zZShm ZCk7Cj4gwqDCoMKgwqDCoMKgwqDCoH0KPiDCoAo+ICsKCmluZ2FzOiBEaWQgeW91IGFjY2lkZW50 YWxseSBhZGQgYW4gZXh0cmEgZW1wdHkgbGluZT8KCj4gwqDCoMKgwqDCoMKgwqDCoHJldHVybiBy ZXN1bHQ7Cj4gwqB9Cj4gwqAKPiBAQCAtMzcxLDYgKzM3MiwyOCBAQCBib29sIGtleXJpbmdfZGVs X3JlbW90ZV9kZXZfa2V5KHN0cnVjdCBtZXNoX25vZGUKPiAqbm9kZSwgdWludDE2X3QgdW5pY2Fz dCwKPiDCoMKgwqDCoMKgwqDCoMKgcmV0dXJuIHRydWU7Cj4gwqB9Cj4gwqAKPiArYm9vbCBrZXly aW5nX2RlbF9yZW1vdGVfZGV2X2tleV9hbGwoc3RydWN0IG1lc2hfbm9kZSAqbm9kZSwgdWludDE2 X3QKPiB1bmljYXN0KQo+ICt7Cj4gK8KgwqDCoMKgwqDCoMKgdWludDhfdCBkZXZfa2V5WzE2XTsK PiArwqDCoMKgwqDCoMKgwqB1aW50OF90IHRlc3Rfa2V5WzE2XTsKPiArwqDCoMKgwqDCoMKgwqB1 aW50OF90IGNudCA9IDE7Cj4gKwo+ICvCoMKgwqDCoMKgwqDCoGlmICgha2V5cmluZ19nZXRfcmVt b3RlX2Rldl9rZXkobm9kZSwgdW5pY2FzdCwgZGV2X2tleSkpCj4gK8KgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoHJldHVybiBmYWxzZTsKPiArCj4gK8KgwqDCoMKgwqDCoMKgd2hpbGUgKGtl eXJpbmdfZ2V0X3JlbW90ZV9kZXZfa2V5KG5vZGUsIHVuaWNhc3QgKyBjbnQsCj4gdGVzdF9rZXkp KSB7Cj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoGlmIChtZW1jbXAoZGV2X2tleSwg dGVzdF9rZXksIHNpemVvZihkZXZfa2V5KSkpCj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqBicmVhazsKPiArCj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoGNudCsrOwo+ICvCoMKgwqDCoMKgwqDCoH0KPiArCj4gK8KgwqDCoMKgwqDCoMKgaWYg KGNudCA+IDEpCj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoHJldHVybiBrZXlyaW5n X2RlbF9yZW1vdGVfZGV2X2tleShub2RlLCB1bmljYXN0ICsgMSwKPiBjbnQgLSAxKTsKPiArCgpp bmdhczogSnVzdCBjaGVja2luZyBpZiB0aGlzIGlzIHlvdXIgaW50ZW50IGhlcmU6IGRlbGV0ZSBh bGwgdGhlIERldktleQplbnRyaWVzIGZyb20gdGhlIHNlY29uZGFyeSBlbGVtZW50cyBhbmQga2Vl cCB0aGUgb25lIGFzc29jaWF0ZWQgd2l0aAp0aGUgcHJpbWFyeSBlbGVtZW50PwoKPiArwqDCoMKg wqDCoMKgwqByZXR1cm4gdHJ1ZTsKPiArfQo+ICsKPiDCoHN0YXRpYyBESVIgKm9wZW5fa2V5X2Rp cihjb25zdCBjaGFyICpub2RlX3BhdGgsIGNvbnN0IGNoYXIKPiAqa2V5X2Rpcl9uYW1lKQo+IMKg ewo+IMKgwqDCoMKgwqDCoMKgwqBjaGFyIGRpcl9wYXRoW1BBVEhfTUFYXTsKPiBkaWZmIC0tZ2l0 IGEvbWVzaC9rZXlyaW5nLmggYi9tZXNoL2tleXJpbmcuaAo+IGluZGV4IGVjZjYyY2JjMS4uZWZj NDk5YWMyIDEwMDY0NAo+IC0tLSBhL21lc2gva2V5cmluZy5oCj4gKysrIGIvbWVzaC9rZXlyaW5n LmgKPiBAQCAtMzksNSArMzksNiBAQCBib29sIGtleXJpbmdfcHV0X3JlbW90ZV9kZXZfa2V5KHN0 cnVjdCBtZXNoX25vZGUKPiAqbm9kZSwgdWludDE2X3QgdW5pY2FzdCwKPiDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoHVpbnQ4X3QgY291bnQsIHVpbnQ4X3QKPiBkZXZfa2V5WzE2XSk7Cj4gwqBib29s IGtleXJpbmdfZGVsX3JlbW90ZV9kZXZfa2V5KHN0cnVjdCBtZXNoX25vZGUgKm5vZGUsIHVpbnQx Nl90Cj4gdW5pY2FzdCwKPiDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoHVpbnQ4Cj4gX3QgY291bnQpOwo+ICtib29s IGtleXJpbmdfZGVsX3JlbW90ZV9kZXZfa2V5X2FsbChzdHJ1Y3QgbWVzaF9ub2RlICpub2RlLCB1 aW50MTZfdAo+IHVuaWNhc3QpOwo+IMKgYm9vbCBrZXlyaW5nX2J1aWxkX2V4cG9ydF9rZXlzX3Jl cGx5KHN0cnVjdCBtZXNoX25vZGUgKm5vZGUsCj4gwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBzdHJ1 Y3QgbF9kYnVzX21lc3NhZ2VfYnVpbGRlcgo+ICpidWlsZGVyKTsKPiBkaWZmIC0tZ2l0IGEvbWVz aC9tYW5hZ2VyLmMgYi9tZXNoL21hbmFnZXIuYwo+IGluZGV4IGU2NmIxYTQ1Yi4uZTE2ZGJjNTEz IDEwMDY0NAo+IC0tLSBhL21lc2gvbWFuYWdlci5jCj4gKysrIGIvbWVzaC9tYW5hZ2VyLmMKPiBA QCAtMjEsNzUgKzIxLDEzNyBAQAo+IMKgI2luY2x1ZGUgIm1lc2gvbWVzaC5oIgo+IMKgI2luY2x1 ZGUgIm1lc2gvbWVzaC1pby5oIgo+IMKgI2luY2x1ZGUgIm1lc2gvbm9kZS5oIgo+ICsjaW5jbHVk ZSAibWVzaC9tb2RlbC5oIgo+IMKgI2luY2x1ZGUgIm1lc2gvbmV0LmgiCj4gwqAjaW5jbHVkZSAi bWVzaC9rZXlyaW5nLmgiCj4gwqAjaW5jbHVkZSAibWVzaC9hZ2VudC5oIgo+IMKgI2luY2x1ZGUg Im1lc2gvcHJvdmlzaW9uLmgiCj4gKyNpbmNsdWRlICJtZXNoL3Byb3YuaCIKPiArI2luY2x1ZGUg Im1lc2gvcmVtcHJ2LmgiCj4gwqAjaW5jbHVkZSAibWVzaC9tYW5hZ2VyLmgiCj4gwqAKPiAtc3Ry dWN0IGFkZF9kYXRhewo+ICtzdHJ1Y3QgcHJvdl9yZW1vdGVfZGF0YSB7Cj4gwqDCoMKgwqDCoMKg wqDCoHN0cnVjdCBsX2RidXNfbWVzc2FnZSAqbXNnOwo+IMKgwqDCoMKgwqDCoMKgwqBzdHJ1Y3Qg bWVzaF9hZ2VudCAqYWdlbnQ7Cj4gwqDCoMKgwqDCoMKgwqDCoHN0cnVjdCBtZXNoX25vZGUgKm5v ZGU7Cj4gwqDCoMKgwqDCoMKgwqDCoHVpbnQzMl90IGRpc2Nfd2F0Y2g7Cj4gK8KgwqDCoMKgwqDC oMKgdWludDE2X3Qgb3JpZ2luYWw7Cj4gwqDCoMKgwqDCoMKgwqDCoHVpbnQxNl90IHByaW1hcnk7 Cj4gwqDCoMKgwqDCoMKgwqDCoHVpbnQxNl90IG5ldF9pZHg7Cj4gK8KgwqDCoMKgwqDCoMKgdWlu dDhfdCB0cmFuc3BvcnQ7Cj4gwqDCoMKgwqDCoMKgwqDCoHVpbnQ4X3QgbnVtX2VsZTsKPiDCoMKg wqDCoMKgwqDCoMKgdWludDhfdCB1dWlkWzE2XTsKPiDCoH07Cj4gwqAKPiAtc3RhdGljIGludDhf dCBzY2FuX3Jzc2k7Cj4gLXN0YXRpYyB1aW50OF90IHNjYW5fdXVpZFsxNl07Cj4gLXN0YXRpYyBz dHJ1Y3QgbWVzaF9ub2RlICpzY2FuX25vZGU7Cj4gLXN0YXRpYyBzdHJ1Y3QgbF90aW1lb3V0ICpz Y2FuX3RpbWVvdXQ7Cj4gLXN0YXRpYyBzdHJ1Y3QgYWRkX2RhdGEgKmFkZF9wZW5kaW5nOwo+ICtz dHJ1Y3Qgc2Nhbl9yZXEgewo+ICvCoMKgwqDCoMKgwqDCoHN0cnVjdCBtZXNoX25vZGUgKm5vZGU7 Cj4gK8KgwqDCoMKgwqDCoMKgc3RydWN0IGxfdGltZW91dCAqdGltZW91dDsKPiArwqDCoMKgwqDC oMKgwqB1aW50MTZfdCBzZXJ2ZXI7Cj4gK8KgwqDCoMKgwqDCoMKgdWludDE2X3QgbmV0X2lkeDsK PiArwqDCoMKgwqDCoMKgwqB1aW50OF90IHV1aWRbMTZdOwo+ICvCoMKgwqDCoMKgwqDCoGludDhf dCByc3NpOwo+ICvCoMKgwqDCoMKgwqDCoGJvb2wgZXh0Owo+ICt9Owo+ICsKPiArc3RhdGljIHN0 cnVjdCBsX3F1ZXVlICpzY2FuczsKPiArc3RhdGljIHN0cnVjdCBwcm92X3JlbW90ZV9kYXRhICpw cm92X3BlbmRpbmc7Cj4gwqBzdGF0aWMgY29uc3QgdWludDhfdCBwcnZiWzJdID0ge01FU0hfQURf VFlQRV9CRUFDT04sIDB4MDB9Owo+IMKgCj4gK3N0YXRpYyBib29sIGJ5X3NjYW4oY29uc3Qgdm9p ZCAqYSwgY29uc3Qgdm9pZCAqYikKPiArewo+ICvCoMKgwqDCoMKgwqDCoHJldHVybiBhID09IGI7 Cj4gK30KPiArCj4gK3N0YXRpYyBib29sIGJ5X25vZGUoY29uc3Qgdm9pZCAqYSwgY29uc3Qgdm9p ZCAqYikKPiArewo+ICvCoMKgwqDCoMKgwqDCoGNvbnN0IHN0cnVjdCBzY2FuX3JlcSAqcmVxID0g YTsKPiArwqDCoMKgwqDCoMKgwqBjb25zdCBzdHJ1Y3QgbWVzaF9ub2RlICpub2RlID0gYjsKPiAr Cj4gK8KgwqDCoMKgwqDCoMKgcmV0dXJuIHJlcS0+bm9kZSA9PSBub2RlOwo+ICt9Cj4gKwo+ICtz dGF0aWMgYm9vbCBieV9ub2RlX3N2cihjb25zdCB2b2lkICphLCBjb25zdCB2b2lkICpiKQo+ICt7 Cj4gK8KgwqDCoMKgwqDCoMKgY29uc3Qgc3RydWN0IHNjYW5fcmVxICpyZXEgPSBhOwo+ICvCoMKg wqDCoMKgwqDCoGNvbnN0IHN0cnVjdCBzY2FuX3JlcSAqdGVzdCA9IGI7Cj4gKwo+ICvCoMKgwqDC oMKgwqDCoHJldHVybiByZXEtPm5vZGUgPT0gdGVzdC0+bm9kZSAmJiByZXEtPnNlcnZlciA9PSB0 ZXN0LQo+ID5zZXJ2ZXI7Cj4gK30KPiArCj4gwqBzdGF0aWMgdm9pZCBzY2FuX2NhbmNlbChzdHJ1 Y3QgbF90aW1lb3V0ICp0aW1lb3V0LCB2b2lkICp1c2VyX2RhdGEpCj4gwqB7Cj4gLcKgwqDCoMKg wqDCoMKgc3RydWN0IG1lc2hfbm9kZSAqbm9kZSA9IHVzZXJfZGF0YTsKPiArwqDCoMKgwqDCoMKg wqBzdHJ1Y3Qgc2Nhbl9yZXEgKnJlcSA9IHVzZXJfZGF0YTsKPiDCoMKgwqDCoMKgwqDCoMKgc3Ry dWN0IG1lc2hfaW8gKmlvOwo+IMKgwqDCoMKgwqDCoMKgwqBzdHJ1Y3QgbWVzaF9uZXQgKm5ldDsK PiArwqDCoMKgwqDCoMKgwqB1aW50OF90IG1zZ1s0XTsKPiArwqDCoMKgwqDCoMKgwqBpbnQgbjsK PiDCoAo+IMKgwqDCoMKgwqDCoMKgwqBsX2RlYnVnKCIiKTsKPiDCoAo+IC3CoMKgwqDCoMKgwqDC oGlmIChzY2FuX3RpbWVvdXQpCj4gLcKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoGxfdGlt ZW91dF9yZW1vdmUoc2Nhbl90aW1lb3V0KTsKPiArwqDCoMKgwqDCoMKgwqByZXEgPSBsX3F1ZXVl X3JlbW92ZV9pZihzY2FucywgYnlfc2NhbiwgcmVxKTsKPiArCj4gK8KgwqDCoMKgwqDCoMKgaWYg KCFyZXEpCj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoHJldHVybjsKPiArCj4gK8Kg wqDCoMKgwqDCoMKgbF90aW1lb3V0X3JlbW92ZShyZXEtPnRpbWVvdXQpOwo+ICsKPiArwqDCoMKg wqDCoMKgwqBpZiAocmVxLT5zZXJ2ZXIpIHsKPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgbiA9IG1lc2hfbW9kZWxfb3Bjb2RlX3NldChPUF9SRU1fUFJPVl9TQ0FOX1NUT1AsCj4gbXNn KTsKPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgbWVzaF9tb2RlbF9zZW5kKHJlcS0+ bm9kZSwgMCwgcmVxLT5zZXJ2ZXIsCj4gQVBQX0lEWF9ERVZfUkVNT1RFLAo+ICvCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgcmVxLT5uZXRfaWR4LAo+IERFRkFVTFRfVFRMLAo+ ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgdHJ1ZSwgbiwgbXNnKTsKPiAr wqDCoMKgwqDCoMKgwqB9IGVsc2Ugewo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBu ZXQgPSBub2RlX2dldF9uZXQocmVxLT5ub2RlKTsKPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgaW8gPSBtZXNoX25ldF9nZXRfaW8obmV0KTsKPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgbWVzaF9pb19kZXJlZ2lzdGVyX3JlY3ZfY2IoaW8sIHBydmIsIHNpemVvZihwcnZi KSk7Cj4gK8KgwqDCoMKgwqDCoMKgfQo+IMKgCj4gLcKgwqDCoMKgwqDCoMKgbmV0ID0gbm9kZV9n ZXRfbmV0KG5vZGUpOwo+IC3CoMKgwqDCoMKgwqDCoGlvID0gbWVzaF9uZXRfZ2V0X2lvKG5ldCk7 Cj4gLcKgwqDCoMKgwqDCoMKgbWVzaF9pb19kZXJlZ2lzdGVyX3JlY3ZfY2IoaW8sIHBydmIsIHNp emVvZihwcnZiKSk7Cj4gLcKgwqDCoMKgwqDCoMKgc2Nhbl9ub2RlID0gTlVMTDsKPiAtwqDCoMKg wqDCoMKgwqBzY2FuX3RpbWVvdXQgPSBOVUxMOwo+ICvCoMKgwqDCoMKgwqDCoGluaXRpYXRvcl9z Y2FuX3VucmVnKHJlcS0+bm9kZSk7Cj4gK8KgwqDCoMKgwqDCoMKgbF9mcmVlKHJlcSk7Cj4gwqB9 Cj4gwqAKPiAtc3RhdGljIHZvaWQgZnJlZV9wZW5kaW5nX2FkZF9jYWxsKCkKPiArc3RhdGljIHZv aWQgZnJlZV9wZW5kaW5nX2FkZF9jYWxsKHZvaWQpCj4gwqB7Cj4gLcKgwqDCoMKgwqDCoMKgaWYg KCFhZGRfcGVuZGluZykKPiArwqDCoMKgwqDCoMKgwqBpZiAoIXByb3ZfcGVuZGluZykKPiDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoHJldHVybjsKPiDCoAo+IC3CoMKgwqDCoMKgwqDC oGlmIChhZGRfcGVuZGluZy0+ZGlzY193YXRjaCkKPiArwqDCoMKgwqDCoMKgwqBpZiAocHJvdl9w ZW5kaW5nLT5kaXNjX3dhdGNoKQo+IMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgbF9k YnVzX3JlbW92ZV93YXRjaChkYnVzX2dldF9idXMoKSwKPiAtwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoGFkZF9wZW5kaW5nLQo+ID5kaXNjX3dhdGNoKTsKPiArwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoHByb3ZfcGVuZGluZy0KPiA+ZGlzY193YXRjaCk7 Cj4gwqAKPiAtwqDCoMKgwqDCoMKgwqBpZiAoYWRkX3BlbmRpbmctPm1zZykKPiAtwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgbF9kYnVzX21lc3NhZ2VfdW5yZWYoYWRkX3BlbmRpbmctPm1z Zyk7Cj4gK8KgwqDCoMKgwqDCoMKgaWYgKHByb3ZfcGVuZGluZy0+bXNnKQo+ICvCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqBsX2RidXNfbWVzc2FnZV91bnJlZihwcm92X3BlbmRpbmctPm1z Zyk7Cj4gwqAKPiAtwqDCoMKgwqDCoMKgwqBsX2ZyZWUoYWRkX3BlbmRpbmcpOwo+IC3CoMKgwqDC oMKgwqDCoGFkZF9wZW5kaW5nID0gTlVMTDsKPiArwqDCoMKgwqDCoMKgwqBsX2ZyZWUocHJvdl9w ZW5kaW5nKTsKPiArwqDCoMKgwqDCoMKgwqBwcm92X3BlbmRpbmcgPSBOVUxMOwo+IMKgfQo+IMKg Cj4gwqBzdGF0aWMgdm9pZCBwcm92X2Rpc2NfY2Ioc3RydWN0IGxfZGJ1cyAqYnVzLCB2b2lkICp1 c2VyX2RhdGEpCj4gwqB7Cj4gLcKgwqDCoMKgwqDCoMKgaWYgKCFhZGRfcGVuZGluZykKPiArwqDC oMKgwqDCoMKgwqBpZiAoIXByb3ZfcGVuZGluZykKPiDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoHJldHVybjsKPiDCoAo+IC3CoMKgwqDCoMKgwqDCoGluaXRpYXRvcl9jYW5jZWwoYWRk X3BlbmRpbmcpOwo+IC3CoMKgwqDCoMKgwqDCoGFkZF9wZW5kaW5nLT5kaXNjX3dhdGNoID0gMDsK PiArwqDCoMKgwqDCoMKgwqBpbml0aWF0b3JfY2FuY2VsKHByb3ZfcGVuZGluZyk7Cj4gK8KgwqDC oMKgwqDCoMKgcHJvdl9wZW5kaW5nLT5kaXNjX3dhdGNoID0gMDsKPiDCoAo+IMKgwqDCoMKgwqDC oMKgwqBmcmVlX3BlbmRpbmdfYWRkX2NhbGwoKTsKPiDCoH0KPiDCoAo+ICtzdGF0aWMgdm9pZCBh cHBlbmRfZGljdF9lbnRyeV9iYXNpYyhzdHJ1Y3QgbF9kYnVzX21lc3NhZ2VfYnVpbGRlcgo+ICpi dWlsZGVyLAo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBjb25zdCBjaGFyICprZXksIGNvbnN0IGNo YXIKPiAqc2lnbmF0dXJlLAo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBjb25zdCB2b2lkICpkYXRh KQo+ICt7Cj4gK8KgwqDCoMKgwqDCoMKgaWYgKCFidWlsZGVyKQo+ICvCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqByZXR1cm47Cj4gKwo+ICvCoMKgwqDCoMKgwqDCoGxfZGJ1c19tZXNzYWdl X2J1aWxkZXJfZW50ZXJfZGljdChidWlsZGVyLCAic3YiKTsKPiArwqDCoMKgwqDCoMKgwqBsX2Ri dXNfbWVzc2FnZV9idWlsZGVyX2FwcGVuZF9iYXNpYyhidWlsZGVyLCAncycsIGtleSk7Cj4gK8Kg wqDCoMKgwqDCoMKgbF9kYnVzX21lc3NhZ2VfYnVpbGRlcl9lbnRlcl92YXJpYW50KGJ1aWxkZXIs IHNpZ25hdHVyZSk7Cj4gK8KgwqDCoMKgwqDCoMKgbF9kYnVzX21lc3NhZ2VfYnVpbGRlcl9hcHBl bmRfYmFzaWMoYnVpbGRlciwgc2lnbmF0dXJlWzBdLAo+IGRhdGEpOwo+ICvCoMKgwqDCoMKgwqDC oGxfZGJ1c19tZXNzYWdlX2J1aWxkZXJfbGVhdmVfdmFyaWFudChidWlsZGVyKTsKPiArwqDCoMKg wqDCoMKgwqBsX2RidXNfbWVzc2FnZV9idWlsZGVyX2xlYXZlX2RpY3QoYnVpbGRlcik7Cj4gK30K PiArCj4gwqBzdGF0aWMgdm9pZCBzZW5kX2FkZF9mYWlsZWQoY29uc3QgY2hhciAqb3duZXIsIGNv bnN0IGNoYXIgKnBhdGgsCj4gwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoHVpbnQ4X3QKPiBzdGF0dXMpCj4gwqB7Cj4gQEAgLTEwMiw3ICsxNjQs NyBAQCBzdGF0aWMgdm9pZCBzZW5kX2FkZF9mYWlsZWQoY29uc3QgY2hhciAqb3duZXIsCj4gY29u c3QgY2hhciAqcGF0aCwKPiDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAi QWRkTm9kZUZhaWxlZCIpOwo+IMKgCj4gwqDCoMKgwqDCoMKgwqDCoGJ1aWxkZXIgPSBsX2RidXNf bWVzc2FnZV9idWlsZGVyX25ldyhtc2cpOwo+IC3CoMKgwqDCoMKgwqDCoGRidXNfYXBwZW5kX2J5 dGVfYXJyYXkoYnVpbGRlciwgYWRkX3BlbmRpbmctPnV1aWQsIDE2KTsKPiArwqDCoMKgwqDCoMKg wqBkYnVzX2FwcGVuZF9ieXRlX2FycmF5KGJ1aWxkZXIsIHByb3ZfcGVuZGluZy0+dXVpZCwgMTYp Owo+IMKgwqDCoMKgwqDCoMKgwqBsX2RidXNfbWVzc2FnZV9idWlsZGVyX2FwcGVuZF9iYXNpYyhi dWlsZGVyLCAncycsCj4gwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgbWVz aF9wcm92X3N0YXR1c19zdHIoCj4gc3RhdHVzKSk7Cj4gwqDCoMKgwqDCoMKgwqDCoGxfZGJ1c19t ZXNzYWdlX2J1aWxkZXJfZmluYWxpemUoYnVpbGRlcik7Cj4gQEAgLTExNSwxNCArMTc3LDE0IEBA IHN0YXRpYyB2b2lkIHNlbmRfYWRkX2ZhaWxlZChjb25zdCBjaGFyICpvd25lciwKPiBjb25zdCBj aGFyICpwYXRoLAo+IMKgc3RhdGljIGJvb2wgYWRkX2NtcGx0KHZvaWQgKnVzZXJfZGF0YSwgdWlu dDhfdCBzdGF0dXMsCj4gwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBzdHJ1Y3QgbWVzaF9wcm92X25v ZGVfaW5mbwo+ICppbmZvKQo+IMKgewo+IC3CoMKgwqDCoMKgwqDCoHN0cnVjdCBhZGRfZGF0YSAq cGVuZGluZyA9IHVzZXJfZGF0YTsKPiArwqDCoMKgwqDCoMKgwqBzdHJ1Y3QgcHJvdl9yZW1vdGVf ZGF0YSAqcGVuZGluZyA9IHVzZXJfZGF0YTsKPiDCoMKgwqDCoMKgwqDCoMKgc3RydWN0IG1lc2hf bm9kZSAqbm9kZSA9IHBlbmRpbmctPm5vZGU7Cj4gwqDCoMKgwqDCoMKgwqDCoHN0cnVjdCBsX2Ri dXMgKmRidXMgPSBkYnVzX2dldF9idXMoKTsKPiDCoMKgwqDCoMKgwqDCoMKgc3RydWN0IGxfZGJ1 c19tZXNzYWdlX2J1aWxkZXIgKmJ1aWxkZXI7Cj4gwqDCoMKgwqDCoMKgwqDCoHN0cnVjdCBsX2Ri dXNfbWVzc2FnZSAqbXNnOwo+IMKgwqDCoMKgwqDCoMKgwqBib29sIHJlc3VsdDsKPiDCoAo+IC3C oMKgwqDCoMKgwqDCoGlmIChwZW5kaW5nICE9IGFkZF9wZW5kaW5nKQo+ICvCoMKgwqDCoMKgwqDC oGlmIChwZW5kaW5nICE9IHByb3ZfcGVuZGluZykKPiDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoHJldHVybiBmYWxzZTsKPiDCoAo+IMKgwqDCoMKgwqDCoMKgwqBpZiAoc3RhdHVzICE9 IFBST1ZfRVJSX1NVQ0NFU1MpIHsKPiBAQCAtMTMxLDcgKzE5MywxMiBAQCBzdGF0aWMgYm9vbCBh ZGRfY21wbHQodm9pZCAqdXNlcl9kYXRhLCB1aW50OF90Cj4gc3RhdHVzLAo+IMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgcmV0dXJuIGZhbHNlOwo+IMKgwqDCoMKgwqDCoMKgwqB9Cj4g wqAKPiAtwqDCoMKgwqDCoMKgwqByZXN1bHQgPSBrZXlyaW5nX3B1dF9yZW1vdGVfZGV2X2tleShh ZGRfcGVuZGluZy0+bm9kZSwgaW5mby0KPiA+dW5pY2FzdCwKPiArwqDCoMKgwqDCoMKgwqAvKiBJ ZiBVbmljYXN0IGFkZHJlc3MgY2hhbmdpbmcsIGRlbGV0ZSBvbGQgZGV2IGtleSAqLwo+ICvCoMKg wqDCoMKgwqDCoGlmIChwZW5kaW5nLT50cmFuc3BvcnQgPT0gUEJfTlBQSV8wMSkKPiArwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKga2V5cmluZ19kZWxfcmVtb3RlX2Rldl9rZXlfYWxsKHBl bmRpbmctPm5vZGUsCj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgcGVuZGluZy0KPiA+b3JpZ2luYWwpOwo+ICsKPiArwqDCoMKgwqDCoMKgwqBy ZXN1bHQgPSBrZXlyaW5nX3B1dF9yZW1vdGVfZGV2X2tleShwZW5kaW5nLT5ub2RlLCBpbmZvLQo+ ID51bmljYXN0LAo+IMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgaW5mby0+bnVtX2VsZSwgaW5mby0K PiA+ZGV2aWNlX2tleSk7Cj4gwqAKPiDCoMKgwqDCoMKgwqDCoMKgaWYgKCFyZXN1bHQpIHsKPiBA QCAtMTQwLDEzICsyMDcsMjkgQEAgc3RhdGljIGJvb2wgYWRkX2NtcGx0KHZvaWQgKnVzZXJfZGF0 YSwgdWludDhfdAo+IHN0YXR1cywKPiDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoHJl dHVybiBmYWxzZTsKPiDCoMKgwqDCoMKgwqDCoMKgfQo+IMKgCj4gLcKgwqDCoMKgwqDCoMKgbXNn ID0gbF9kYnVzX21lc3NhZ2VfbmV3X21ldGhvZF9jYWxsKGRidXMsCj4gbm9kZV9nZXRfb3duZXIo bm9kZSksCj4gK8KgwqDCoMKgwqDCoMKgaWYgKHBlbmRpbmctPnRyYW5zcG9ydCA+IFBCX05QUElf MDIpCj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoG1zZyA9IGxfZGJ1c19tZXNzYWdl X25ld19tZXRob2RfY2FsbChkYnVzLAo+IG5vZGVfZ2V0X293bmVyKG5vZGUpLAo+IMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoG5vZGVfZ2V0X2FwcF9wYXRoKG5vZAo+IGUp LAo+IMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoE1FU0hfUFJPVklTSU9O RVJfSU5URQo+IFJGQUNFLAo+IMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oCJBZGROb2RlQ29tcGxldGUiKTsKPiArwqDCoMKgwqDCoMKgwqBlbHNlCj4gK8KgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoG1zZyA9IGxfZGJ1c19tZXNzYWdlX25ld19tZXRob2RfY2FsbChk YnVzLAo+IG5vZGVfZ2V0X293bmVyKG5vZGUpLAo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgbm9kZV9nZXRfYXBwX3BhdGgobm9kCj4gZSksCj4gK8KgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBNRVNIX1BST1ZJU0lPTkVSX0lOVEUKPiBSRkFDRSwKPiAr wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCJSZXByb3ZDb21wbGV0ZSIpOwo+ IMKgCj4gwqDCoMKgwqDCoMKgwqDCoGJ1aWxkZXIgPSBsX2RidXNfbWVzc2FnZV9idWlsZGVyX25l dyhtc2cpOwo+IC3CoMKgwqDCoMKgwqDCoGRidXNfYXBwZW5kX2J5dGVfYXJyYXkoYnVpbGRlciwg YWRkX3BlbmRpbmctPnV1aWQsIDE2KTsKPiArCj4gK8KgwqDCoMKgwqDCoMKgaWYgKHBlbmRpbmct PnRyYW5zcG9ydCA+IFBCX05QUElfMDIpCj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oGRidXNfYXBwZW5kX2J5dGVfYXJyYXkoYnVpbGRlciwgcGVuZGluZy0+dXVpZCwgMTYpOwo+ICvC oMKgwqDCoMKgwqDCoGVsc2Ugewo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqB1aW50 OF90IG5wcGkgPSAodWludDhfdCkgcGVuZGluZy0+dHJhbnNwb3J0Owo+ICsKPiArwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgbF9kYnVzX21lc3NhZ2VfYnVpbGRlcl9hcHBlbmRfYmFzaWMo YnVpbGRlciwgJ3EnLAo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoCZwZW5kaW5nLQo+ID5vcmlnaW5hbCk7Cj4gK8KgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoGxfZGJ1c19tZXNzYWdlX2J1aWxkZXJfYXBwZW5kX2Jhc2ljKGJ1aWxkZXIs ICd5JywKPiAmbnBwaSk7Cj4gK8KgwqDCoMKgwqDCoMKgfQo+ICsKPiDCoMKgwqDCoMKgwqDCoMKg bF9kYnVzX21lc3NhZ2VfYnVpbGRlcl9hcHBlbmRfYmFzaWMoYnVpbGRlciwgJ3EnLCAmaW5mby0K PiA+dW5pY2FzdCk7Cj4gwqDCoMKgwqDCoMKgwqDCoGxfZGJ1c19tZXNzYWdlX2J1aWxkZXJfYXBw ZW5kX2Jhc2ljKGJ1aWxkZXIsICd5JywgJmluZm8tCj4gPm51bV9lbGUpOwo+IMKgwqDCoMKgwqDC oMKgwqBsX2RidXNfbWVzc2FnZV9idWlsZGVyX2ZpbmFsaXplKGJ1aWxkZXIpOwo+IEBAIC0xNjEs NDcgKzI0NCw2NiBAQCBzdGF0aWMgYm9vbCBhZGRfY21wbHQodm9pZCAqdXNlcl9kYXRhLCB1aW50 OF90Cj4gc3RhdHVzLAo+IMKgCj4gwqBzdGF0aWMgdm9pZCBtZ3JfcHJvdl9kYXRhIChzdHJ1Y3Qg bF9kYnVzX21lc3NhZ2UgKnJlcGx5LCB2b2lkCj4gKnVzZXJfZGF0YSkKPiDCoHsKPiAtwqDCoMKg wqDCoMKgwqBzdHJ1Y3QgYWRkX2RhdGEgKnBlbmRpbmcgPSB1c2VyX2RhdGE7Cj4gK8KgwqDCoMKg wqDCoMKgc3RydWN0IHByb3ZfcmVtb3RlX2RhdGEgKnBlbmRpbmcgPSB1c2VyX2RhdGE7Cj4gwqDC oMKgwqDCoMKgwqDCoHVpbnQxNl90IG5ldF9pZHg7Cj4gwqDCoMKgwqDCoMKgwqDCoHVpbnQxNl90 IHByaW1hcnk7Cj4gwqAKPiAtwqDCoMKgwqDCoMKgwqBpZiAocGVuZGluZyAhPSBhZGRfcGVuZGlu ZykKPiArwqDCoMKgwqDCoMKgwqBpZiAocGVuZGluZyAhPSBwcm92X3BlbmRpbmcpCj4gwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqByZXR1cm47Cj4gwqAKPiDCoMKgwqDCoMKgwqDCoMKg aWYgKGxfZGJ1c19tZXNzYWdlX2lzX2Vycm9yKHJlcGx5KSkKPiDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoHJldHVybjsKPiDCoAo+IC3CoMKgwqDCoMKgwqDCoGlmICghbF9kYnVzX21l c3NhZ2VfZ2V0X2FyZ3VtZW50cyhyZXBseSwgInFxIiwgJm5ldF9pZHgsCj4gJnByaW1hcnkpKQo+ ICvCoMKgwqDCoMKgwqDCoGlmIChwZW5kaW5nLT50cmFuc3BvcnQgPT0gUEJfTlBQSV8wMSkgewo+ ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAvKiBJZiBwZXJmb3JtaW5nIE5QUEksIHdl IG9ubHkgZ2V0IG5ldyBwcmltYXJ5Cj4gdW5pY2FzdCBoZXJlICovCj4gK8KgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoGlmICghbF9kYnVzX21lc3NhZ2VfZ2V0X2FyZ3VtZW50cyhyZXBseSwg InEiLAo+ICZwcmltYXJ5KSkKPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoHJldHVybjsKPiArCj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoG5l dF9pZHggPSBwZW5kaW5nLT5uZXRfaWR4Owo+ICsKPiArwqDCoMKgwqDCoMKgwqB9IGVsc2UgaWYg KCFsX2RidXNfbWVzc2FnZV9nZXRfYXJndW1lbnRzKHJlcGx5LCAicXEiLAo+ICZuZXRfaWR4LAo+ ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqAmcHJpbQo+IGFyeSkpCj4gwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqByZXR1cm47Cj4gwqAKPiAtwqDCoMKgwqDCoMKgwqBhZGRfcGVuZGluZy0+cHJpbWFyeSA9 IHByaW1hcnk7Cj4gLcKgwqDCoMKgwqDCoMKgYWRkX3BlbmRpbmctPm5ldF9pZHggPSBuZXRfaWR4 Owo+IC3CoMKgwqDCoMKgwqDCoGluaXRpYXRvcl9wcm92X2RhdGEobmV0X2lkeCwgcHJpbWFyeSwg YWRkX3BlbmRpbmcpOwo+ICvCoMKgwqDCoMKgwqDCoHBlbmRpbmctPnByaW1hcnkgPSBwcmltYXJ5 Owo+ICvCoMKgwqDCoMKgwqDCoHBlbmRpbmctPm5ldF9pZHggPSBuZXRfaWR4Owo+ICvCoMKgwqDC oMKgwqDCoGluaXRpYXRvcl9wcm92X2RhdGEobmV0X2lkeCwgcHJpbWFyeSwgcGVuZGluZyk7Cj4g wqB9Cj4gwqAKPiDCoHN0YXRpYyBib29sIGFkZF9kYXRhX2dldCh2b2lkICp1c2VyX2RhdGEsIHVp bnQ4X3QgbnVtX2VsZSkKPiDCoHsKPiAtwqDCoMKgwqDCoMKgwqBzdHJ1Y3QgYWRkX2RhdGEgKnBl bmRpbmcgPSB1c2VyX2RhdGE7Cj4gK8KgwqDCoMKgwqDCoMKgc3RydWN0IHByb3ZfcmVtb3RlX2Rh dGEgKnBlbmRpbmcgPSB1c2VyX2RhdGE7Cj4gwqDCoMKgwqDCoMKgwqDCoHN0cnVjdCBsX2RidXNf bWVzc2FnZSAqbXNnOwo+IMKgwqDCoMKgwqDCoMKgwqBzdHJ1Y3QgbF9kYnVzICpkYnVzOwo+IMKg wqDCoMKgwqDCoMKgwqBjb25zdCBjaGFyICphcHBfcGF0aDsKPiDCoMKgwqDCoMKgwqDCoMKgY29u c3QgY2hhciAqc2VuZGVyOwo+IMKgCj4gLcKgwqDCoMKgwqDCoMKgaWYgKHBlbmRpbmcgIT0gYWRk X3BlbmRpbmcpCj4gK8KgwqDCoMKgwqDCoMKgaWYgKHBlbmRpbmcgIT0gcHJvdl9wZW5kaW5nKQo+ IMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgcmV0dXJuIGZhbHNlOwo+IMKgCj4gwqDC oMKgwqDCoMKgwqDCoGRidXMgPSBkYnVzX2dldF9idXMoKTsKPiAtwqDCoMKgwqDCoMKgwqBhcHBf cGF0aCA9IG5vZGVfZ2V0X2FwcF9wYXRoKGFkZF9wZW5kaW5nLT5ub2RlKTsKPiAtwqDCoMKgwqDC oMKgwqBzZW5kZXIgPSBub2RlX2dldF9vd25lcihhZGRfcGVuZGluZy0+bm9kZSk7Cj4gK8KgwqDC oMKgwqDCoMKgYXBwX3BhdGggPSBub2RlX2dldF9hcHBfcGF0aChwZW5kaW5nLT5ub2RlKTsKPiAr wqDCoMKgwqDCoMKgwqBzZW5kZXIgPSBub2RlX2dldF9vd25lcihwZW5kaW5nLT5ub2RlKTsKPiDC oAo+IC3CoMKgwqDCoMKgwqDCoG1zZyA9IGxfZGJ1c19tZXNzYWdlX25ld19tZXRob2RfY2FsbChk YnVzLCBzZW5kZXIsIGFwcF9wYXRoLAo+ICvCoMKgwqDCoMKgwqDCoGlmIChwZW5kaW5nLT50cmFu c3BvcnQgPiBQQl9OUFBJXzAyKSB7Cj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoG1z ZyA9IGxfZGJ1c19tZXNzYWdlX25ld19tZXRob2RfY2FsbChkYnVzLCBzZW5kZXIsCj4gYXBwX3Bh dGgsCj4gwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgTUVTSF9QUk9WSVNJ T05FUl9JTlRFCj4gUkZBQ0UsCj4gwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgIlJlcXVlc3RQcm92RGF0YSIpOwo+IMKgCj4gLcKgwqDCoMKgwqDCoMKgbF9kYnVzX21lc3Nh Z2Vfc2V0X2FyZ3VtZW50cyhtc2csICJ5IiwgbnVtX2VsZSk7Cj4gLcKgwqDCoMKgwqDCoMKgbF9k YnVzX3NlbmRfd2l0aF9yZXBseShkYnVzLCBtc2csIG1ncl9wcm92X2RhdGEsIGFkZF9wZW5kaW5n LAo+IE5VTEwpOwo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBsX2RidXNfbWVzc2Fn ZV9zZXRfYXJndW1lbnRzKG1zZywgInkiLCBudW1fZWxlKTsKPiArwqDCoMKgwqDCoMKgwqB9IGVs c2UgaWYgKHBlbmRpbmctPnRyYW5zcG9ydCA9PSBQQl9OUFBJXzAxKSB7Cj4gK8KgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoG1zZyA9IGxfZGJ1c19tZXNzYWdlX25ld19tZXRob2RfY2FsbChk YnVzLCBzZW5kZXIsCj4gYXBwX3BhdGgsCj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqBNRVNIX1BST1ZJU0lPTkVSX0lOVEUKPiBSRkFDRSwKPiArwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoCJSZXF1ZXN0UmVwcm92RGF0YSIpOwo+ICsKPiArwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgbF9kYnVzX21lc3NhZ2Vfc2V0X2FyZ3VtZW50cyhtc2cs ICJxeSIsIHBlbmRpbmctCj4gPm9yaWdpbmFsLAo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBudW1fZQo+IGxlKTsK PiArwqDCoMKgwqDCoMKgwqB9IGVsc2UKPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg cmV0dXJuIGZhbHNlOwo+IMKgCj4gLcKgwqDCoMKgwqDCoMKgYWRkX3BlbmRpbmctPm51bV9lbGUg PSBudW1fZWxlOwo+ICvCoMKgwqDCoMKgwqDCoGxfZGJ1c19zZW5kX3dpdGhfcmVwbHkoZGJ1cywg bXNnLCBtZ3JfcHJvdl9kYXRhLCBwZW5kaW5nLAo+IE5VTEwpOwo+ICsKPiArwqDCoMKgwqDCoMKg wqBwZW5kaW5nLT5udW1fZWxlID0gbnVtX2VsZTsKPiDCoAo+IMKgwqDCoMKgwqDCoMKgwqByZXR1 cm4gdHJ1ZTsKPiDCoH0KPiBAQCAtMjEzLDE1ICszMTUsOTUgQEAgc3RhdGljIHZvaWQgYWRkX3N0 YXJ0KHZvaWQgKnVzZXJfZGF0YSwgaW50IGVycikKPiDCoMKgwqDCoMKgwqDCoMKgbF9kZWJ1Zygi U3RhcnQgY2FsbGJhY2siKTsKPiDCoAo+IMKgwqDCoMKgwqDCoMKgwqBpZiAoZXJyID09IE1FU0hf RVJST1JfTk9ORSkKPiAtwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgcmVwbHkgPSBsX2Ri dXNfbWVzc2FnZV9uZXdfbWV0aG9kX3JldHVybihhZGRfcGVuZGluZy0KPiA+bXNnKTsKPiArwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgcmVwbHkgPQo+IGxfZGJ1c19tZXNzYWdlX25ld19t ZXRob2RfcmV0dXJuKHByb3ZfcGVuZGluZy0+bXNnKTsKPiDCoMKgwqDCoMKgwqDCoMKgZWxzZQo+ IC3CoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqByZXBseSA9IGRidXNfZXJyb3IoYWRkX3Bl bmRpbmctPm1zZywKPiBNRVNIX0VSUk9SX0ZBSUxFRCwKPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgcmVwbHkgPSBkYnVzX2Vycm9yKHByb3ZfcGVuZGluZy0+bXNnLAo+IE1FU0hfRVJS T1JfRkFJTEVELAo+IMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqAiRmFpbGVkIHRvIHN0YXJ0IHByb3Zpc2lvbmluZwo+IGluaXRp YXRvciIpOwo+IMKgCj4gwqDCoMKgwqDCoMKgwqDCoGxfZGJ1c19zZW5kKGRidXNfZ2V0X2J1cygp LCByZXBseSk7Cj4gLcKgwqDCoMKgwqDCoMKgbF9kYnVzX21lc3NhZ2VfdW5yZWYoYWRkX3BlbmRp bmctPm1zZyk7Cj4gK8KgwqDCoMKgwqDCoMKgbF9kYnVzX21lc3NhZ2VfdW5yZWYocHJvdl9wZW5k aW5nLT5tc2cpOwo+ICsKPiArwqDCoMKgwqDCoMKgwqBwcm92X3BlbmRpbmctPm1zZyA9IE5VTEw7 Cj4gK30KPiArCj4gK3N0YXRpYyBzdHJ1Y3QgbF9kYnVzX21lc3NhZ2UgKnJlcHJvdmlzaW9uX2Nh bGwoc3RydWN0IGxfZGJ1cyAqZGJ1cywKPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoHN0cnVjdCBsX2RidXNfbWVzc2FnZQo+ICptc2csCj4gK8KgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqB2b2lkICp1c2VyX2RhdGEpCj4gK3sKPiArwqDCoMKgwqDCoMKg wqBzdHJ1Y3QgbWVzaF9ub2RlICpub2RlID0gdXNlcl9kYXRhOwo+ICvCoMKgwqDCoMKgwqDCoHN0 cnVjdCBsX2RidXNfbWVzc2FnZV9pdGVyIG9wdGlvbnMsIHZhcjsKPiArwqDCoMKgwqDCoMKgwqBz dHJ1Y3QgbF9kYnVzX21lc3NhZ2UgKnJlcGx5Owo+ICvCoMKgwqDCoMKgwqDCoHN0cnVjdCBtZXNo X25ldCAqbmV0ID0gbm9kZV9nZXRfbmV0KG5vZGUpOwo+ICvCoMKgwqDCoMKgwqDCoGNvbnN0IGNo YXIgKmtleTsKPiArwqDCoMKgwqDCoMKgwqB1aW50MTZfdCBzdWJpZHg7Cj4gK8KgwqDCoMKgwqDC oMKgdWludDE2X3Qgc2VydmVyID0gMDsKPiArwqDCoMKgwqDCoMKgwqB1aW50OF90IG5wcGkgPSAw Owo+ICsKPiArwqDCoMKgwqDCoMKgwqBsX2RlYnVnKCJSZXByb3Zpc2lvbiByZXF1ZXN0Iik7Cj4g Kwo+ICvCoMKgwqDCoMKgwqDCoGlmICghbF9kYnVzX21lc3NhZ2VfZ2V0X2FyZ3VtZW50cyhtc2cs ICJxYXtzdn0iLCAmc2VydmVyLAo+ICZvcHRpb25zKSkKPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgcmV0dXJuIGRidXNfZXJyb3IobXNnLCBNRVNIX0VSUk9SX0lOVkFMSURfQVJHUywK PiBOVUxMKTsKPiArCj4gK8KgwqDCoMKgwqDCoMKgaWYgKCFJU19VTklDQVNUKHNlcnZlcikpCj4g K8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoHJldHVybiBkYnVzX2Vycm9yKG1zZywgTUVT SF9FUlJPUl9JTlZBTElEX0FSR1MsICJCYWQKPiBVbmljYXN0Iik7Cj4gKwo+ICvCoMKgwqDCoMKg wqDCoC8qIERlZmF1bHQgdG8gbm9kZXMgcHJpbWFyeSBzdWJuZXQgaW5kZXggKi8KPiArwqDCoMKg wqDCoMKgwqBzdWJpZHggPSBtZXNoX25ldF9nZXRfcHJpbWFyeV9pZHgobmV0KTsKPiArCj4gK8Kg wqDCoMKgwqDCoMKgLyogR2V0IFByb3Zpc2lvbmluZyBPcHRpb25zICovCj4gK8KgwqDCoMKgwqDC oMKgd2hpbGUgKGxfZGJ1c19tZXNzYWdlX2l0ZXJfbmV4dF9lbnRyeSgmb3B0aW9ucywgJmtleSwg JnZhcikpCj4gewo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBib29sIGZhaWxlZCA9 IHRydWU7Cj4gKwo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBpZiAoIXN0cmNtcChr ZXksICJOUFBJIikpIHsKPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoGlmIChsX2RidXNfbWVzc2FnZV9pdGVyX2dldF92YXJpYW50KCZ2YXIsCj4gInkiLCAm bnBwaSkpIHsKPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqBpZiAobnBwaSA8PSAyKQo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBm YWlsZWQgPSBmYWxzZTsKPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoH0KPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgfSBlbHNlIGlmICghc3Ry Y21wKGtleSwgIlN1Ym5ldCIpKSB7Cj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqBpZiAobF9kYnVzX21lc3NhZ2VfaXRlcl9nZXRfdmFyaWFudCgmdmFyLAo+ ICJxIiwKPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgJnN1YmkKPiBkeCkpIHsKPiArwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBpZiAoc3ViaWR4IDw9 IE1BWF9LRVlfSURYKQo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBmYWlsZWQgPSBmYWxzZTsKPiAr wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoH0KPiArwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgfQo+ICsKPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgaWYgKGZhaWxlZCkKPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoHJldHVybiBkYnVzX2Vycm9yKG1zZywKPiBNRVNIX0VSUk9SX0lOVkFMSURfQVJH UywKPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqAiSW52YWxpZAo+IG9wdGlvbnMiKTsKPiArwqDCoMKgwqDCoMKgwqB9Cj4gKwo+ICvCoMKgwqDC oMKgwqDCoC8qIEFkZE5vZGUgY2FuY2VscyBhbGwgb3V0c3RhbmRpbmcgU2Nhbm5pbmcgZnJvbSBu b2RlICovCj4gK8KgwqDCoMKgwqDCoMKgbWFuYWdlcl9zY2FuX2NhbmNlbChub2RlKTsKPiDCoAo+ IC3CoMKgwqDCoMKgwqDCoGFkZF9wZW5kaW5nLT5tc2cgPSBOVUxMOwo+ICvCoMKgwqDCoMKgwqDC oC8qIEludm9rZSBQcm92IEluaXRpYXRvciAqLwo+ICvCoMKgwqDCoMKgwqDCoHByb3ZfcGVuZGlu ZyA9IGxfbmV3KHN0cnVjdCBwcm92X3JlbW90ZV9kYXRhLCAxKTsKPiArCj4gK8KgwqDCoMKgwqDC oMKgcHJvdl9wZW5kaW5nLT50cmFuc3BvcnQgPSBucHBpOwo+ICvCoMKgwqDCoMKgwqDCoHByb3Zf cGVuZGluZy0+bm9kZSA9IG5vZGU7Cj4gK8KgwqDCoMKgwqDCoMKgcHJvdl9wZW5kaW5nLT5vcmln aW5hbCA9IHNlcnZlcjsKPiArwqDCoMKgwqDCoMKgwqBwcm92X3BlbmRpbmctPmFnZW50ID0gbm9k ZV9nZXRfYWdlbnQobm9kZSk7Cj4gKwo+ICvCoMKgwqDCoMKgwqDCoGlmICghbm9kZV9pc19wcm92 aXNpb25lcihub2RlKSB8fCAocHJvdl9wZW5kaW5nLT5hZ2VudCA9PQo+IE5VTEwpKSB7Cj4gK8Kg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoHJlcGx5ID0gZGJ1c19lcnJvcihtc2csIE1FU0hf RVJST1JfTk9UX0FVVEhPUklaRUQsCj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgIk1pc3NpbmcKPiBJbnRlcmZhY2VzIik7Cj4gK8KgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoGdvdG8gZmFpbDsKPiArwqDCoMKgwqDCoMKgwqB9Cj4gKwo+ ICvCoMKgwqDCoMKgwqDCoHByb3ZfcGVuZGluZy0+bXNnID0gbF9kYnVzX21lc3NhZ2VfcmVmKG1z Zyk7Cj4gK8KgwqDCoMKgwqDCoMKgaW5pdGlhdG9yX3N0YXJ0KHByb3ZfcGVuZGluZy0+dHJhbnNw b3J0LCBzZXJ2ZXIsIHN1YmlkeCwKPiBOVUxMLCA5OSwgNjAsCj4gK8KgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoHByb3ZfcGVuZGluZy0+YWdlbnQsCj4gYWRkX3N0YXJ0LAo+ICvCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqBhZGRfZGF0YV9nZXQsIGFkZF9jbXBsdCwKPiBub2RlLAo+ICvCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqBwcm92X3BlbmRpbmcpOwo+ICsKPiArwqDCoMKgwqDCoMKgwqBwcm92X3BlbmRpbmctPmRp c2Nfd2F0Y2ggPSBsX2RidXNfYWRkX2Rpc2Nvbm5lY3Rfd2F0Y2goZGJ1cywKPiArwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoG5vZGVfZ2V0X293bmVyKG5vZGUpLAo+ICvCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgcHJvdl9kaXNjX2NiLCBOVUxMLAo+IE5V TEwpOwo+ICsKPiArwqDCoMKgwqDCoMKgwqByZXR1cm4gTlVMTDsKPiArZmFpbDoKPiArwqDCoMKg wqDCoMKgwqBsX2ZyZWUocHJvdl9wZW5kaW5nKTsKPiArwqDCoMKgwqDCoMKgwqBwcm92X3BlbmRp bmcgPSBOVUxMOwo+ICvCoMKgwqDCoMKgwqDCoHJldHVybiByZXBseTsKPiDCoH0KPiDCoAo+IMKg c3RhdGljIHN0cnVjdCBsX2RidXNfbWVzc2FnZSAqYWRkX25vZGVfY2FsbChzdHJ1Y3QgbF9kYnVz ICpkYnVzLAo+IEBAIC0yMjksNTUgKzQxMSwxMDEgQEAgc3RhdGljIHN0cnVjdCBsX2RidXNfbWVz c2FnZQo+ICphZGRfbm9kZV9jYWxsKHN0cnVjdCBsX2RidXMgKmRidXMsCj4gwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgdm9pZCAqdXNlcl9kYXRhKQo+IMKgewo+IMKgwqDC oMKgwqDCoMKgwqBzdHJ1Y3QgbWVzaF9ub2RlICpub2RlID0gdXNlcl9kYXRhOwo+IC3CoMKgwqDC oMKgwqDCoHN0cnVjdCBsX2RidXNfbWVzc2FnZV9pdGVyIGl0ZXJfdXVpZCwgb3B0aW9uczsKPiAr wqDCoMKgwqDCoMKgwqBzdHJ1Y3QgbF9kYnVzX21lc3NhZ2VfaXRlciBpdGVyX3V1aWQsIG9wdGlv bnMsIHZhcjsKPiDCoMKgwqDCoMKgwqDCoMKgc3RydWN0IGxfZGJ1c19tZXNzYWdlICpyZXBseTsK PiArwqDCoMKgwqDCoMKgwqBzdHJ1Y3QgbWVzaF9uZXQgKm5ldCA9IG5vZGVfZ2V0X25ldChub2Rl KTsKPiArwqDCoMKgwqDCoMKgwqBjb25zdCBjaGFyICprZXk7Cj4gwqDCoMKgwqDCoMKgwqDCoHVp bnQ4X3QgKnV1aWQ7Cj4gLcKgwqDCoMKgwqDCoMKgdWludDMyX3QgbiA9IDIyOwo+ICvCoMKgwqDC oMKgwqDCoHVpbnQzMl90IG4gPSAwOwo+ICvCoMKgwqDCoMKgwqDCoHVpbnQxNl90IHN1YmlkeDsK PiArwqDCoMKgwqDCoMKgwqB1aW50MTZfdCBzZWMgPSA2MDsKPiArwqDCoMKgwqDCoMKgwqB1aW50 MTZfdCBzZXJ2ZXIgPSAwOwo+IMKgCj4gwqDCoMKgwqDCoMKgwqDCoGxfZGVidWcoIkFkZE5vZGUg cmVxdWVzdCIpOwo+IMKgCj4gwqDCoMKgwqDCoMKgwqDCoGlmICghbF9kYnVzX21lc3NhZ2VfZ2V0 X2FyZ3VtZW50cyhtc2csICJheWF7c3Z9IiwgJml0ZXJfdXVpZCwKPiAmb3B0aW9ucykpCj4gwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqByZXR1cm4gZGJ1c19lcnJvcihtc2csIE1FU0hf RVJST1JfSU5WQUxJRF9BUkdTLAo+IE5VTEwpOwo+IMKgCj4gLcKgwqDCoMKgwqDCoMKgaWYgKCFs X2RidXNfbWVzc2FnZV9pdGVyX2dldF9maXhlZF9hcnJheSgmaXRlcl91dWlkLCAmdXVpZCwKPiAm bikKPiAtwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgfHwgbgo+ICE9IDE2KQo+ICvCoMKgwqDCoMKgwqDCoGlmICghbF9k YnVzX21lc3NhZ2VfaXRlcl9nZXRfZml4ZWRfYXJyYXkoJml0ZXJfdXVpZCwgJnV1aWQsCj4gJm4p IHx8Cj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAKPiDCoMKgwqBuICE9IDE2KQo+IMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgcmV0dXJuIGRidXNfZXJyb3IobXNnLCBNRVNIX0VSUk9S X0lOVkFMSURfQVJHUywKPiDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgIkJhZCBkZXZpY2UKPiBVVUlEIik7Cj4gwqAKPiAtwqDCoMKgwqDCoMKg wqAvKiBBbGxvdyBBZGROb2RlIHRvIGNhbmNlbCBTY2FubmluZyBpZiBmcm9tIHRoZSBzYW1lIG5v ZGUgKi8KPiAtwqDCoMKgwqDCoMKgwqBpZiAoc2Nhbl9ub2RlKSB7Cj4gLcKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoGlmIChzY2FuX25vZGUgIT0gbm9kZSkKPiAtwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoHJldHVybiBkYnVzX2Vycm9yKG1zZywgTUVT SF9FUlJPUl9CVVNZLAo+IE5VTEwpOwo+ICvCoMKgwqDCoMKgwqDCoC8qIERlZmF1bHQgdG8gbm9k ZXMgcHJpbWFyeSBzdWJuZXQgaW5kZXggKi8KPiArwqDCoMKgwqDCoMKgwqBzdWJpZHggPSBtZXNo X25ldF9nZXRfcHJpbWFyeV9pZHgobmV0KTsKPiDCoAo+IC3CoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqBzY2FuX2NhbmNlbChOVUxMLCBub2RlKTsKPiArwqDCoMKgwqDCoMKgwqAvKiBHZXQg UHJvdmlzaW9uaW5nIE9wdGlvbnMgKi8KPiArwqDCoMKgwqDCoMKgwqB3aGlsZSAobF9kYnVzX21l c3NhZ2VfaXRlcl9uZXh0X2VudHJ5KCZvcHRpb25zLCAma2V5LCAmdmFyKSkKPiB7Cj4gK8KgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoGJvb2wgZmFpbGVkID0gdHJ1ZTsKPiArCj4gK8KgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoGlmICghc3RyY21wKGtleSwgIlNlY29uZHMiKSkgewo+ ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgaWYgKGxfZGJ1 c19tZXNzYWdlX2l0ZXJfZ2V0X3ZhcmlhbnQoJnZhciwKPiAicSIsICZzZWMpKQo+ICvCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoGZh aWxlZCA9IGZhbHNlOwo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqB9IGVsc2UgaWYg KCFzdHJjbXAoa2V5LCAiU2VydmVyIikpIHsKPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoGlmIChsX2RidXNfbWVzc2FnZV9pdGVyX2dldF92YXJpYW50KCZ2 YXIsCj4gInEiLAo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAmc2Vydgo+IGVyKSkgewo+ICvCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoGlmIChzZXJ2 ZXIgPCAweDgwMDApCj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoGZhaWxlZCA9IGZhbHNlOwo+ICvC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgfQo+ICvCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqB9IGVsc2UgaWYgKCFzdHJjbXAoa2V5LCAiU3VibmV0Iikp IHsKPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoGlmIChs X2RidXNfbWVzc2FnZV9pdGVyX2dldF92YXJpYW50KCZ2YXIsCj4gInEiLAo+ICvCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqAmc3ViaQo+IGR4KSkgewo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoGlmIChzdWJpZHggPD0gTUFYX0tFWV9JRFgpCj4gK8Kg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoGZhaWxlZCA9IGZhbHNlOwo+ICvCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgfQo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqB9Cj4gKwo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBpZiAoZmFpbGVkKQo+ ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgcmV0dXJuIGRi dXNfZXJyb3IobXNnLAo+IE1FU0hfRVJST1JfSU5WQUxJRF9BUkdTLAo+ICvCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCJJbnZhbGlkCj4gb3B0aW9u cyIpOwo+IMKgwqDCoMKgwqDCoMKgwqB9Cj4gwqAKPiArwqDCoMKgwqDCoMKgwqAvKiBEZXZpY2Ug S2V5IHVwZGF0ZS9Db21wb3NpdGlvbiB1cGRhdGUgcmVxdWlyZXMgcmVtb3RlCj4gc2VydmVyICov Cj4gK8KgwqDCoMKgwqDCoMKgaWYgKCFuICYmICFzZXJ2ZXIpCj4gK8KgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoHJldHVybiBkYnVzX2Vycm9yKG1zZywgTUVTSF9FUlJPUl9JTlZBTElEX0FS R1MsCj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgIkludmFsaWQKPiBvcHRpb25zIik7Cj4gKwo+ICvCoMKgwqDCoMKgwqDCoC8qIElmIG5vIHNl cnZlciBzcGVjaWZpZWQsIHVzZSBsb2NhbCAqLwo+ICvCoMKgwqDCoMKgwqDCoGlmICghc2VydmVy KQo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBzZXJ2ZXIgPSBub2RlX2dldF9wcmlt YXJ5KG5vZGUpOwo+ICsKPiArwqDCoMKgwqDCoMKgwqAvKiBBZGROb2RlIGNhbmNlbHMgYWxsIG91 dHN0YW5kaW5nIFNjYW5uaW5nIGZyb20gbm9kZSAqLwo+ICvCoMKgwqDCoMKgwqDCoG1hbmFnZXJf c2Nhbl9jYW5jZWwobm9kZSk7Cj4gKwo+IMKgwqDCoMKgwqDCoMKgwqAvKiBJbnZva2UgUHJvdiBJ bml0aWF0b3IgKi8KPiAtwqDCoMKgwqDCoMKgwqBhZGRfcGVuZGluZyA9IGxfbmV3KHN0cnVjdCBh ZGRfZGF0YSwgMSk7Cj4gLcKgwqDCoMKgwqDCoMKgbWVtY3B5KGFkZF9wZW5kaW5nLT51dWlkLCB1 dWlkLCAxNik7Cj4gLcKgwqDCoMKgwqDCoMKgYWRkX3BlbmRpbmctPm5vZGUgPSBub2RlOwo+IC3C oMKgwqDCoMKgwqDCoGFkZF9wZW5kaW5nLT5hZ2VudCA9IG5vZGVfZ2V0X2FnZW50KG5vZGUpOwo+ ICvCoMKgwqDCoMKgwqDCoHByb3ZfcGVuZGluZyA9IGxfbmV3KHN0cnVjdCBwcm92X3JlbW90ZV9k YXRhLCAxKTsKPiArCj4gK8KgwqDCoMKgwqDCoMKgaWYgKG4pCj4gK8KgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoG1lbWNweShwcm92X3BlbmRpbmctPnV1aWQsIHV1aWQsIDE2KTsKPiArwqDC oMKgwqDCoMKgwqBlbHNlCj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoHV1aWQgPSBO VUxMOwo+IMKgCj4gLcKgwqDCoMKgwqDCoMKgaWYgKCFub2RlX2lzX3Byb3Zpc2lvbmVyKG5vZGUp IHx8IChhZGRfcGVuZGluZy0+YWdlbnQgPT0KPiBOVUxMKSkgewo+ICvCoMKgwqDCoMKgwqDCoHBy b3ZfcGVuZGluZy0+dHJhbnNwb3J0ID0gUEJfQURWOwo+ICvCoMKgwqDCoMKgwqDCoHByb3ZfcGVu ZGluZy0+bm9kZSA9IG5vZGU7Cj4gK8KgwqDCoMKgwqDCoMKgcHJvdl9wZW5kaW5nLT5hZ2VudCA9 IG5vZGVfZ2V0X2FnZW50KG5vZGUpOwo+ICsKPiArwqDCoMKgwqDCoMKgwqBpZiAoIW5vZGVfaXNf cHJvdmlzaW9uZXIobm9kZSkgfHwgKHByb3ZfcGVuZGluZy0+YWdlbnQgPT0KPiBOVUxMKSkgewo+ IMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgbF9kZWJ1ZygiUHJvdmlzaW9uZXI6ICVk IiwKPiBub2RlX2lzX3Byb3Zpc2lvbmVyKG5vZGUpKTsKPiAtwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgbF9kZWJ1ZygiQWdlbnQ6ICVwIiwgYWRkX3BlbmRpbmctPmFnZW50KTsKPiArwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgbF9kZWJ1ZygiQWdlbnQ6ICVwIiwgcHJvdl9wZW5k aW5nLT5hZ2VudCk7Cj4gwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqByZXBseSA9IGRi dXNfZXJyb3IobXNnLCBNRVNIX0VSUk9SX05PVF9BVVRIT1JJWkVELAo+IMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAiTWlzc2luZwo+IEludGVy ZmFjZXMiKTsKPiDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoGdvdG8gZmFpbDsKPiDC oMKgwqDCoMKgwqDCoMKgfQo+IMKgCj4gLcKgwqDCoMKgwqDCoMKgYWRkX3BlbmRpbmctPm1zZyA9 IGxfZGJ1c19tZXNzYWdlX3JlZihtc2cpOwo+IC3CoMKgwqDCoMKgwqDCoGluaXRpYXRvcl9zdGFy dChQQl9BRFYsIHV1aWQsIDk5LCA2MCwgYWRkX3BlbmRpbmctPmFnZW50LAo+IGFkZF9zdGFydCwK PiAtwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqBhZGRfZGF0YV9nZXQsIGFkZF9jbXBsdCwgbm9kZSwKPiBhZGRfcGVuZGluZyk7Cj4g K8KgwqDCoMKgwqDCoMKgcHJvdl9wZW5kaW5nLT5tc2cgPSBsX2RidXNfbWVzc2FnZV9yZWYobXNn KTsKPiArwqDCoMKgwqDCoMKgwqBpbml0aWF0b3Jfc3RhcnQoUEJfQURWLCBzZXJ2ZXIsIHN1Ymlk eCwgdXVpZCwgOTksIHNlYywKPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgcHJvdl9wZW5kaW5nLT5h Z2VudCwKPiBhZGRfc3RhcnQsCj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoGFkZF9kYXRhX2dldCwg YWRkX2NtcGx0LAo+IG5vZGUsCj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoHByb3ZfcGVuZGluZyk7 Cj4gwqAKPiAtwqDCoMKgwqDCoMKgwqBhZGRfcGVuZGluZy0+ZGlzY193YXRjaCA9IGxfZGJ1c19h ZGRfZGlzY29ubmVjdF93YXRjaChkYnVzLAo+ICvCoMKgwqDCoMKgwqDCoHByb3ZfcGVuZGluZy0+ ZGlzY193YXRjaCA9IGxfZGJ1c19hZGRfZGlzY29ubmVjdF93YXRjaChkYnVzLAo+IMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoG5vZGVfZ2V0X293bmVyKG5vZGUpLAo+IMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoHByb3ZfZGlzY19jYiwgTlVMTCwK PiBOVUxMKTsKPiDCoAo+IMKgwqDCoMKgwqDCoMKgwqByZXR1cm4gTlVMTDsKPiDCoGZhaWw6Cj4g LcKgwqDCoMKgwqDCoMKgbF9mcmVlKGFkZF9wZW5kaW5nKTsKPiAtwqDCoMKgwqDCoMKgwqBhZGRf cGVuZGluZyA9IE5VTEw7Cj4gK8KgwqDCoMKgwqDCoMKgbF9mcmVlKHByb3ZfcGVuZGluZyk7Cj4g K8KgwqDCoMKgwqDCoMKgcHJvdl9wZW5kaW5nID0gTlVMTDsKPiDCoMKgwqDCoMKgwqDCoMKgcmV0 dXJuIHJlcGx5Owo+IMKgfQo+IMKgCj4gQEAgLTMzNywzOCArNTY1LDUwIEBAIHN0YXRpYyBzdHJ1 Y3QgbF9kYnVzX21lc3NhZ2UKPiAqZGVsZXRlX25vZGVfY2FsbChzdHJ1Y3QgbF9kYnVzICpkYnVz LAo+IMKgwqDCoMKgwqDCoMKgwqByZXR1cm4gbF9kYnVzX21lc3NhZ2VfbmV3X21ldGhvZF9yZXR1 cm4obXNnKTsKPiDCoH0KPiDCoAo+IC1zdGF0aWMgdm9pZCBwcm92X2JlYWNvbl9yZWN2KHZvaWQg KnVzZXJfZGF0YSwgc3RydWN0Cj4gbWVzaF9pb19yZWN2X2luZm8gKmluZm8sCj4gK3N0YXRpYyB2 b2lkIG1hbmFnZXJfc2Nhbl9yZXN1bHQodm9pZCAqdXNlcl9kYXRhLCB1aW50MTZfdCBzZXJ2ZXIs Cj4gYm9vbCBleHQsCj4gwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBjb25zdCB1aW50OF90ICpkYXRh LCB1aW50MTZfdAo+IGxlbikKPiDCoHsKPiAtwqDCoMKgwqDCoMKgwqBzdHJ1Y3QgbWVzaF9ub2Rl ICpub2RlID0gdXNlcl9kYXRhOwo+ICvCoMKgwqDCoMKgwqDCoHN0cnVjdCBzY2FuX3JlcSBub2Rl X3N2ciA9IHsKPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgLm5vZGUgPSB1c2VyX2Rh dGEsCj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoC5zZXJ2ZXIgPSBzZXJ2ZXIsCj4g K8KgwqDCoMKgwqDCoMKgfTsKPiArwqDCoMKgwqDCoMKgwqBzdHJ1Y3Qgc2Nhbl9yZXEgKnJlcTsK PiDCoMKgwqDCoMKgwqDCoMKgc3RydWN0IGxfZGJ1c19tZXNzYWdlX2J1aWxkZXIgKmJ1aWxkZXI7 Cj4gwqDCoMKgwqDCoMKgwqDCoHN0cnVjdCBsX2RidXNfbWVzc2FnZSAqbXNnOwo+IMKgwqDCoMKg wqDCoMKgwqBzdHJ1Y3QgbF9kYnVzICpkYnVzOwo+IMKgwqDCoMKgwqDCoMKgwqBpbnQxNl90IHJz c2k7Cj4gwqAKPiAtwqDCoMKgwqDCoMKgwqBpZiAoc2Nhbl9ub2RlICE9IG5vZGUgfHwgbGVuIDwg c2l6ZW9mKHNjYW5fdXVpZCkgKyAyIHx8Cj4gZGF0YVsxXSAhPSAweDAwKQo+ICvCoMKgwqDCoMKg wqDCoGxfZGVidWcoInNjYW5fcmVzdWx0ICU0LjR4ICVwIiwgc2VydmVyLCB1c2VyX2RhdGEpOwo+ ICvCoMKgwqDCoMKgwqDCoHJlcSA9IGxfcXVldWVfZmluZChzY2FucywgYnlfbm9kZV9zdnIsICZu b2RlX3N2cik7Cj4gK8KgwqDCoMKgwqDCoMKgaWYgKCFyZXEpIHsKPiArwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgbF9kZWJ1ZygiTm8gc2Nhbl9yZXN1bHQgcmVxIik7Cj4gwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqByZXR1cm47Cj4gK8KgwqDCoMKgwqDCoMKgfQo+IMKgCj4g LcKgwqDCoMKgwqDCoMKgaWYgKCFtZW1jbXAoZGF0YSArIDIsIHNjYW5fdXVpZCwgc2l6ZW9mKHNj YW5fdXVpZCkpKSB7Cj4gLcKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoGlmIChpbmZvLT5y c3NpIDw9IHNjYW5fcnNzaSkKPiArwqDCoMKgwqDCoMKgwqAvKiBGaWx0ZXIgcmVwZWF0cyB3aXRo IHdlYWtlciBzaWduYWwgKi8KPiArwqDCoMKgwqDCoMKgwqBpZiAoIW1lbWNtcChkYXRhICsgMSwg cmVxLT51dWlkLCBzaXplb2YocmVxLT51dWlkKSkpIHsKPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgaWYgKCFleHQgJiYgKChpbnQ4X3QpIGRhdGFbMF0gPD0gcmVxLT5yc3NpKSkgewo+ ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgbF9kZWJ1Zygi QWxyZWFkeSBTZWVuIik7Cj4gwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgcmV0dXJuOwo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqB9Cj4gwqDC oMKgwqDCoMKgwqDCoH0KPiDCoAo+IC3CoMKgwqDCoMKgwqDCoG1lbWNweShzY2FuX3V1aWQsIGRh dGEgKyAyLCBzaXplb2Yoc2Nhbl91dWlkKSk7Cj4gLcKgwqDCoMKgwqDCoMKgc2Nhbl9yc3NpID0g aW5mby0+cnNzaTsKPiAtwqDCoMKgwqDCoMKgwqByc3NpID0gaW5mby0+cnNzaTsKPiArwqDCoMKg wqDCoMKgwqBpZiAoIWV4dCAmJiAoKGludDhfdCkgZGF0YVswXSA+IHJlcS0+cnNzaSkpCj4gK8Kg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoHJlcS0+cnNzaSA9IChpbnQ4X3QpIGRhdGFbMF07 Cj4gwqAKPiArwqDCoMKgwqDCoMKgwqByc3NpID0gcmVxLT5yc3NpOwo+ICvCoMKgwqDCoMKgwqDC oG1lbWNweShyZXEtPnV1aWQsIGRhdGEgKyAxLCBzaXplb2YocmVxLT51dWlkKSk7Cj4gwqDCoMKg wqDCoMKgwqDCoGRidXMgPSBkYnVzX2dldF9idXMoKTsKPiAtwqDCoMKgwqDCoMKgwqBtc2cgPSBs X2RidXNfbWVzc2FnZV9uZXdfbWV0aG9kX2NhbGwoZGJ1cywKPiBub2RlX2dldF9vd25lcihub2Rl KSwKPiAtCj4gwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoG5vZGVfZ2V0X2Fw cF9wYXRoKG5vZGUpCj4gLAo+ICvCoMKgwqDCoMKgwqDCoG1zZyA9IGxfZGJ1c19tZXNzYWdlX25l d19tZXRob2RfY2FsbChkYnVzLAo+IG5vZGVfZ2V0X293bmVyKHJlcS0+bm9kZSksCj4gK8KgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBub2RlX2dldF9hcHBfcGF0aChyZXEKPiAt Pm5vZGUpLAo+IMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoE1FU0hfUFJP VklTSU9ORVJfSU5URQo+IFJGQUNFLAo+IMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoCJTY2FuUmVzdWx0Iik7Cj4gwqAKPiDCoMKgwqDCoMKgwqDCoMKgYnVpbGRlciA9IGxf ZGJ1c19tZXNzYWdlX2J1aWxkZXJfbmV3KG1zZyk7Cj4gwqDCoMKgwqDCoMKgwqDCoGxfZGJ1c19t ZXNzYWdlX2J1aWxkZXJfYXBwZW5kX2Jhc2ljKGJ1aWxkZXIsICduJywgJnJzc2kpOwo+IC3CoMKg wqDCoMKgwqDCoGRidXNfYXBwZW5kX2J5dGVfYXJyYXkoYnVpbGRlciwgZGF0YSArIDIsIGxlbiAt Mik7Cj4gK8KgwqDCoMKgwqDCoMKgZGJ1c19hcHBlbmRfYnl0ZV9hcnJheShidWlsZGVyLCBkYXRh ICsgMSwgbGVuIC0gMSk7Cj4gwqDCoMKgwqDCoMKgwqDCoGxfZGJ1c19tZXNzYWdlX2J1aWxkZXJf ZW50ZXJfYXJyYXkoYnVpbGRlciwgIntzdn0iKTsKPiAtwqDCoMKgwqDCoMKgwqAvKiBUT0RPOiBw b3B1bGF0ZSB3aXRoIG9wdGlvbnMgd2hlbiBkZWZpbmVkICovCj4gK8KgwqDCoMKgwqDCoMKgYXBw ZW5kX2RpY3RfZW50cnlfYmFzaWMoYnVpbGRlciwgIlNlcnZlciIsICJxIiwgJnNlcnZlcik7Cj4g wqDCoMKgwqDCoMKgwqDCoGxfZGJ1c19tZXNzYWdlX2J1aWxkZXJfbGVhdmVfYXJyYXkoYnVpbGRl cik7Cj4gwqDCoMKgwqDCoMKgwqDCoGxfZGJ1c19tZXNzYWdlX2J1aWxkZXJfZmluYWxpemUoYnVp bGRlcik7Cj4gwqDCoMKgwqDCoMKgwqDCoGxfZGJ1c19tZXNzYWdlX2J1aWxkZXJfZGVzdHJveShi dWlsZGVyKTsKPiBAQCAtMzgwLDI3ICs2MjAsNzEgQEAgc3RhdGljIHN0cnVjdCBsX2RidXNfbWVz c2FnZQo+ICpzdGFydF9zY2FuX2NhbGwoc3RydWN0IGxfZGJ1cyAqZGJ1cywKPiDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBzdHJ1Y3QgbF9kYnVzX21lc3NhZ2UKPiAqbXNn LAo+IMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoHZvaWQgKnVzZXJfZGF0 YSkKPiDCoHsKPiAtwqDCoMKgwqDCoMKgwqBzdHJ1Y3QgbWVzaF9ub2RlICpub2RlID0gdXNlcl9k YXRhOwo+IC3CoMKgwqDCoMKgwqDCoHVpbnQxNl90IGR1cmF0aW9uID0gMDsKPiAtwqDCoMKgwqDC oMKgwqBzdHJ1Y3QgbWVzaF9pbyAqaW87Cj4gK8KgwqDCoMKgwqDCoMKgc3RydWN0IHNjYW5fcmVx IG5ld19yZXEgPSB7Cj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoC5ub2RlID0gdXNl cl9kYXRhLAo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAuc2VydmVyID0gMCwKPiAr wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgLnRpbWVvdXQgPSBOVUxMLAo+ICvCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAuZXh0ID0gZmFsc2UsCj4gK8KgwqDCoMKgwqDCoMKgfTsK PiArwqDCoMKgwqDCoMKgwqBzdHJ1Y3Qgc2Nhbl9yZXEgKnJlcTsKPiDCoMKgwqDCoMKgwqDCoMKg c3RydWN0IG1lc2hfbmV0ICpuZXQ7Cj4gK8KgwqDCoMKgwqDCoMKgdWludDhfdCAqdXVpZCwgKmV4 dCA9IE5VTEw7Cj4gK8KgwqDCoMKgwqDCoMKgdWludDhfdCBzY2FuX3JlcVsyMV07Cj4gK8KgwqDC oMKgwqDCoMKgaW50IG47Cj4gK8KgwqDCoMKgwqDCoMKgdWludDMyX3QgZXh0X2xlbjsKPiArwqDC oMKgwqDCoMKgwqB1aW50MzJfdCBmbGVuID0gMDsKPiArwqDCoMKgwqDCoMKgwqB1aW50MTZfdCBz ZWMgPSA2MDsKPiDCoMKgwqDCoMKgwqDCoMKgY29uc3QgY2hhciAqa2V5Owo+IMKgwqDCoMKgwqDC oMKgwqBzdHJ1Y3QgbF9kYnVzX21lc3NhZ2VfaXRlciBvcHRpb25zLCB2YXI7Cj4gwqDCoMKgwqDC oMKgwqDCoGNvbnN0IGNoYXIgKnNlbmRlciA9IGxfZGJ1c19tZXNzYWdlX2dldF9zZW5kZXIobXNn KTsKPiDCoAo+IC3CoMKgwqDCoMKgwqDCoGlmIChzdHJjbXAoc2VuZGVyLCBub2RlX2dldF9vd25l cihub2RlKSkpCj4gK8KgwqDCoMKgwqDCoMKgaWYgKHN0cmNtcChzZW5kZXIsIG5vZGVfZ2V0X293 bmVyKG5ld19yZXEubm9kZSkpKQo+IMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgcmV0 dXJuIGRidXNfZXJyb3IobXNnLCBNRVNIX0VSUk9SX05PVF9BVVRIT1JJWkVELAo+IE5VTEwpOwo+ IMKgCj4gwqDCoMKgwqDCoMKgwqDCoGlmICghbF9kYnVzX21lc3NhZ2VfZ2V0X2FyZ3VtZW50cyht c2csICJhe3N2fSIsICZvcHRpb25zKSkKPiDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oHJldHVybiBkYnVzX2Vycm9yKG1zZywgTUVTSF9FUlJPUl9JTlZBTElEX0FSR1MsCj4gTlVMTCk7 Cj4gwqAKPiArwqDCoMKgwqDCoMKgwqBpZiAoIW5vZGVfaXNfcHJvdmlzaW9uZXIobmV3X3JlcS5u b2RlKSkKPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgcmV0dXJuIGRidXNfZXJyb3Io bXNnLCBNRVNIX0VSUk9SX05PVF9BVVRIT1JJWkVELAo+IE5VTEwpOwo+ICsKPiArwqDCoMKgwqDC oMKgwqBuZXQgPSBub2RlX2dldF9uZXQobmV3X3JlcS5ub2RlKTsKPiArwqDCoMKgwqDCoMKgwqBu ZXdfcmVxLm5ldF9pZHggPSBtZXNoX25ldF9nZXRfcHJpbWFyeV9pZHgobmV0KTsKPiArwqDCoMKg wqDCoMKgwqBtZW1zZXQobmV3X3JlcS51dWlkLCAwLCBzaXplb2YobmV3X3JlcS51dWlkKSk7Cj4g Kwo+IMKgwqDCoMKgwqDCoMKgwqB3aGlsZSAobF9kYnVzX21lc3NhZ2VfaXRlcl9uZXh0X2VudHJ5 KCZvcHRpb25zLCAma2V5LCAmdmFyKSkKPiB7Cj4gwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqBib29sIGZhaWxlZCA9IHRydWU7Cj4gwqAKPiDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoGlmICghc3RyY21wKGtleSwgIlNlY29uZHMiKSkgewo+IC3CoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgaWYgKGxfZGJ1c19tZXNzYWdlX2l0ZXJfZ2V0 X3ZhcmlhbnQoJnZhciwKPiAicSIsCj4gLcKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgCj4gJmR1cmF0aW9uKSkgewo+ICvCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgaWYgKGxfZGJ1c19tZXNzYWdlX2l0 ZXJfZ2V0X3ZhcmlhbnQoJnZhciwKPiAicSIsICZzZWMpKQo+IMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBmYWlsZWQgPSBmYWxz ZTsKPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgfSBlbHNlIGlmICghc3RyY21wKGtl eSwgIlN1Ym5ldCIpKSB7Cj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqBpZiAobF9kYnVzX21lc3NhZ2VfaXRlcl9nZXRfdmFyaWFudCgmdmFyLAo+ICJxIiwK PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAm bmV3X3JlcS5uZXRfCj4gaWR4KSkgewo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoGlmIChuZXdfcmVxLm5ldF9pZHggPD0gTUFY X0tFWV9JRFgpCj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoGZhaWxlZCA9IGZhbHNlOwo+ICvCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgfQo+ICvCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqB9IGVsc2UgaWYgKCFzdHJjbXAoa2V5LCAiU2VydmVyIikpIHsK PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoGlmIChsX2Ri dXNfbWVzc2FnZV9pdGVyX2dldF92YXJpYW50KCZ2YXIsCj4gInEiLAo+ICvCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCZuZXdfcmVxLnNlcnYKPiBl cikpIHsKPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqBpZiAobmV3X3JlcS5zZXJ2ZXIgPCAweDgwMDApCj4gK8KgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoGZhaWxlZCA9IGZhbHNlOwo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgfQo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqB9IGVs c2UgaWYgKCFzdHJjbXAoa2V5LCAiRmlsdGVyIikpIHsKPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoGlmIChsX2RidXNfbWVzc2FnZV9pdGVyX2dldF92YXJp YW50KCZ2YXIsCj4gImF5IiwgJnZhcikpIHsKPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBpZgo+IChsX2RidXNfbWVzc2FnZV9p dGVyX2dldF9maXhlZF9hcnJheSgmdmFyLAo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAmdXVpZAo+ICwgJmZsZW4p KSB7Cj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoGlmIChmbGVuID09IDE2KSB7Cj4gK8KgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBtZW1jcHkobmV3X3JlcS51dWlkLAo+IHV1aWQs Cj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAKPiDCoMKgwqBmbGVuKTsKPiArwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoGZhaWxlZCA9IGZhbHNlOwo+ICvCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqB9Cj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgfQo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgfQo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqB9IGVsc2UgaWYg KCFzdHJjbXAoa2V5LCAiRXh0ZW5kZWQiKSkgewo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgaWYgKGxfZGJ1c19tZXNzYWdlX2l0ZXJfZ2V0X3ZhcmlhbnQo JnZhciwKPiAiYXkiLCAmdmFyKSkgewo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoGlmCj4gKGxfZGJ1c19tZXNzYWdlX2l0ZXJf Z2V0X2ZpeGVkX2FycmF5KCZ2YXIsCj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCZleHQsCj4gJmV4dF9sZW4pKQo+ ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBmYWlsZWQgPSBmYWxzZTsKPiDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqB9Cj4gwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqB9Cj4gwqAKPiBAQCAtNDA5LDI3ICs2OTMsNTEgQEAgc3RhdGljIHN0cnVjdCBs X2RidXNfbWVzc2FnZQo+ICpzdGFydF9zY2FuX2NhbGwoc3RydWN0IGxfZGJ1cyAqZGJ1cywKPiDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIklu dmFsaWQKPiBvcHRpb25zIik7Cj4gwqDCoMKgwqDCoMKgwqDCoH0KPiDCoAo+IC3CoMKgwqDCoMKg wqDCoGlmIChzY2FuX25vZGUgJiYgc2Nhbl9ub2RlICE9IG5vZGUpCj4gLcKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoHJldHVybiBkYnVzX2Vycm9yKG1zZywgTUVTSF9FUlJPUl9CVVNZLCBO VUxMKTsKPiArwqDCoMKgwqDCoMKgwqBpZiAoIXNjYW5zKQo+ICvCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqBzY2FucyA9IGxfcXVldWVfbmV3KCk7Cj4gwqAKPiAtwqDCoMKgwqDCoMKgwqBp ZiAoIW5vZGVfaXNfcHJvdmlzaW9uZXIobm9kZSkpCj4gLcKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoHJldHVybiBkYnVzX2Vycm9yKG1zZywgTUVTSF9FUlJPUl9OT1RfQVVUSE9SSVpFRCwK PiBOVUxMKTsKPiArwqDCoMKgwqDCoMKgwqBpZiAobmV3X3JlcS5zZXJ2ZXIpIHsKPiArwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgaWYgKCFzZWMgfHwgc2VjID4gNjApCj4gK8KgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqByZXR1cm4gZGJ1c19lcnJvciht c2csCj4gTUVTSF9FUlJPUl9JTlZBTElEX0FSR1MsCj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIkludmFsaWQKPiBvcHRpb25zIik7Cj4gK8Kg wqDCoMKgwqDCoMKgfSBlbHNlIHsKPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgbmV3 X3JlcS5zZXJ2ZXIgPSBub2RlX2dldF9wcmltYXJ5KG5ld19yZXEubm9kZSk7Cj4gK8KgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoGlmICghc2VjIHx8IHNlYyA+IDYwKQo+ICvCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgc2VjID0gNjA7Cj4gK8KgwqDCoMKg wqDCoMKgfQo+ICsKPiArwqDCoMKgwqDCoMKgwqByZXEgPSBsX3F1ZXVlX3JlbW92ZV9pZihzY2Fu cywgYnlfbm9kZV9zdnIsICZuZXdfcmVxKTsKPiArCj4gK8KgwqDCoMKgwqDCoMKgaWYgKCFyZXEp Cj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoHJlcSA9IGxfbWFsbG9jKHNpemVvZihu ZXdfcmVxKSk7Cj4gKwo+ICvCoMKgwqDCoMKgwqDCoGlmIChyZXEtPnRpbWVvdXQpIHsKPiArwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgbF90aW1lb3V0X3JlbW92ZShyZXEtPnRpbWVvdXQp Owo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqByZXEtPnRpbWVvdXQgPSBOVUxMOwo+ ICvCoMKgwqDCoMKgwqDCoH0KPiArCj4gK8KgwqDCoMKgwqDCoMKgKnJlcSA9IG5ld19yZXE7Cj4g K8KgwqDCoMKgwqDCoMKgcmVxLT5yc3NpID0gLTEyODsKPiArCj4gK8KgwqDCoMKgwqDCoMKgaWYg KHNlYykKPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgcmVxLT50aW1lb3V0ID0gbF90 aW1lb3V0X2NyZWF0ZShzZWMsIHNjYW5fY2FuY2VsLAo+IHJlcSwgTlVMTCk7Cj4gwqAKPiAtwqDC oMKgwqDCoMKgwqBpZiAoc2Nhbl90aW1lb3V0KQo+IC3CoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqBsX3RpbWVvdXRfcmVtb3ZlKHNjYW5fdGltZW91dCk7Cj4gwqAKPiAtwqDCoMKgwqDCoMKg wqBtZW1zZXQoc2Nhbl91dWlkLCAwLCBzaXplb2Yoc2Nhbl91dWlkKSk7Cj4gLcKgwqDCoMKgwqDC oMKgc2Nhbl9yc3NpID0gLTEyODsKPiAtwqDCoMKgwqDCoMKgwqBzY2FuX3RpbWVvdXQgPSBOVUxM Owo+IC3CoMKgwqDCoMKgwqDCoG5ldCA9IG5vZGVfZ2V0X25ldChub2RlKTsKPiAtwqDCoMKgwqDC oMKgwqBpbyA9IG1lc2hfbmV0X2dldF9pbyhuZXQpOwo+IC3CoMKgwqDCoMKgwqDCoHNjYW5fbm9k ZSA9IG5vZGU7Cj4gLcKgwqDCoMKgwqDCoMKgbWVzaF9pb19yZWdpc3Rlcl9yZWN2X2NiKGlvLCBw cnZiLCBzaXplb2YocHJ2YiksCj4gLcKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqBwcm92X2JlYWNvbl9yZWN2LAo+IG5vZGUpOwo+ICvCoMKgwqDCoMKgwqDCoG4gPSBtZXNoX21v ZGVsX29wY29kZV9zZXQoT1BfUkVNX1BST1ZfU0NBTl9TVEFSVCwgc2Nhbl9yZXEpOwo+ICvCoMKg wqDCoMKgwqDCoHNjYW5fcmVxW24rK10gPSA1Owo+ICvCoMKgwqDCoMKgwqDCoHNjYW5fcmVxW24r K10gPSBzZWM7Cj4gK8KgwqDCoMKgwqDCoMKgaWYgKGZsZW4pIHsKPiArwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgbWVtY3B5KHNjYW5fcmVxICsgbiwgcmVxLT51dWlkLCBmbGVuKTsKPiAr wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgbiArPSBmbGVuOwo+ICvCoMKgwqDCoMKgwqDC oH0KPiArCj4gK8KgwqDCoMKgwqDCoMKgbWVzaF9tb2RlbF9zZW5kKHJlcS0+bm9kZSwgMCwgcmVx LT5zZXJ2ZXIsCj4gQVBQX0lEWF9ERVZfUkVNT1RFLAo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgcmVxLT5uZXRfaWR4LAo+IERFRkFVTFRfVFRMLAo+ICvCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgdHJ1ZSwgbiwgc2Nhbl9yZXEpOwo+IMKgCj4gLcKg wqDCoMKgwqDCoMKgaWYgKGR1cmF0aW9uKQo+IC3CoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqBzY2FuX3RpbWVvdXQgPSBsX3RpbWVvdXRfY3JlYXRlKGR1cmF0aW9uLAo+IHNjYW5fY2FuY2Vs LAo+IC3CoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqBub2RlLAo+IE5VTEwpOwo+ICvCoMKgwqDCoMKgwqDCoGluaXRpYXRv cl9zY2FuX3JlZyhtYW5hZ2VyX3NjYW5fcmVzdWx0LCByZXEtPm5vZGUpOwo+ICsKPiArwqDCoMKg wqDCoMKgwqBsX3F1ZXVlX3B1c2hfdGFpbChzY2FucywgcmVxKTsKPiDCoAo+IMKgwqDCoMKgwqDC oMKgwqByZXR1cm4gbF9kYnVzX21lc3NhZ2VfbmV3X21ldGhvZF9yZXR1cm4obXNnKTsKPiDCoH0K PiBAQCAtNDQ0LDEyICs3NTIsNyBAQCBzdGF0aWMgc3RydWN0IGxfZGJ1c19tZXNzYWdlCj4gKmNh bmNlbF9zY2FuX2NhbGwoc3RydWN0IGxfZGJ1cyAqZGJ1cywKPiDCoMKgwqDCoMKgwqDCoMKgaWYg KHN0cmNtcChzZW5kZXIsIG5vZGVfZ2V0X293bmVyKG5vZGUpKSB8fAo+ICFub2RlX2lzX3Byb3Zp c2lvbmVyKG5vZGUpKQo+IMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgcmV0dXJuIGRi dXNfZXJyb3IobXNnLCBNRVNIX0VSUk9SX05PVF9BVVRIT1JJWkVELAo+IE5VTEwpOwo+IMKgCj4g LcKgwqDCoMKgwqDCoMKgaWYgKHNjYW5fbm9kZSkgewo+IC3CoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqBpZiAoc2Nhbl9ub2RlICE9IG5vZGUpCj4gLcKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqByZXR1cm4gZGJ1c19lcnJvcihtc2csIE1FU0hfRVJST1Jf QlVTWSwKPiBOVUxMKTsKPiAtCj4gLcKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoHNjYW5f Y2FuY2VsKE5VTEwsIG5vZGUpOwo+IC3CoMKgwqDCoMKgwqDCoH0KPiArwqDCoMKgwqDCoMKgwqBt YW5hZ2VyX3NjYW5fY2FuY2VsKG5vZGUpOwo+IMKgCj4gwqDCoMKgwqDCoMKgwqDCoHJldHVybiBs X2RidXNfbWVzc2FnZV9uZXdfbWV0aG9kX3JldHVybihtc2cpOwo+IMKgfQo+IEBAIC04MTQsNiAr MTExNyw4IEBAIHN0YXRpYyB2b2lkIHNldHVwX21hbmFnZW1lbnRfaW50ZXJmYWNlKHN0cnVjdAo+ IGxfZGJ1c19pbnRlcmZhY2UgKmlmYWNlKQo+IMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoCJheWF7c3Z9IiwgInV1aWQiLAo+ICJvcHRpb25zIik7Cj4gwqDCoMKgwqDCoMKg wqDCoGxfZGJ1c19pbnRlcmZhY2VfbWV0aG9kKGlmYWNlLCAiSW1wb3J0UmVtb3RlTm9kZSIsIDAs Cj4gaW1wb3J0X25vZGVfY2FsbCwKPiDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIiIsICJxeWF5IiwgInByaW1hcnkiLCAiY291 bnQiLAo+ICJkZXZfa2V5Iik7Cj4gK8KgwqDCoMKgwqDCoMKgbF9kYnVzX2ludGVyZmFjZV9tZXRo b2QoaWZhY2UsICJSZXByb3Zpc2lvbiIsIDAsCj4gcmVwcm92aXNpb25fY2FsbCwKPiArwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgIiIsICJxYXtzdn0iLCAidW5pY2FzdCIsCj4gIm9wdGlvbnMiKTsKPiDC oMKgwqDCoMKgwqDCoMKgbF9kYnVzX2ludGVyZmFjZV9tZXRob2QoaWZhY2UsICJEZWxldGVSZW1v dGVOb2RlIiwgMCwKPiBkZWxldGVfbm9kZV9jYWxsLAo+IMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoCIiLCAicXkiLCAicHJpbWFyeSIsCj4gImNvdW50Iik7Cj4gwqDCoMKg wqDCoMKgwqDCoGxfZGJ1c19pbnRlcmZhY2VfbWV0aG9kKGlmYWNlLCAiVW5wcm92aXNpb25lZFNj YW4iLCAwLAo+IHN0YXJ0X3NjYW5fY2FsbCwKPiBAQCAtODQ5LDcgKzExNTQsNyBAQCBib29sIG1h bmFnZXJfZGJ1c19pbml0KHN0cnVjdCBsX2RidXMgKmJ1cykKPiDCoMKgwqDCoMKgwqDCoMKgaWYg KCFsX2RidXNfcmVnaXN0ZXJfaW50ZXJmYWNlKGJ1cywKPiBNRVNIX01BTkFHRU1FTlRfSU5URVJG QUNFLAo+IMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoHNldHVwX21hbmFn ZW1lbnRfaW50ZQo+IHJmYWNlLAo+IMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoE5VTEwsIGZhbHNlKSkgewo+IC3CoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBsX2lu Zm8oIlVuYWJsZSB0byByZWdpc3RlciAlcyBpbnRlcmZhY2UiLAo+ICvCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqBsX2RlYnVnKCJVbmFibGUgdG8gcmVnaXN0ZXIgJXMgaW50ZXJmYWNlIiwK PiDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBNRVNIX01BTkFHRU1FTlRf SU5URVIKPiBGQUNFKTsKPiDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoHJldHVybiBm YWxzZTsKPiDCoMKgwqDCoMKgwqDCoMKgfQo+IEBAIC04NTksOCArMTE2NCw4IEBAIGJvb2wgbWFu YWdlcl9kYnVzX2luaXQoc3RydWN0IGxfZGJ1cyAqYnVzKQo+IMKgCj4gwqB2b2lkIG1hbmFnZXJf c2Nhbl9jYW5jZWwoc3RydWN0IG1lc2hfbm9kZSAqbm9kZSkKPiDCoHsKPiAtwqDCoMKgwqDCoMKg wqBpZiAoc2Nhbl9ub2RlICE9IG5vZGUpCj4gLcKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oHJldHVybjsKPiArwqDCoMKgwqDCoMKgwqBzdHJ1Y3Qgc2Nhbl9yZXEgKnJlcTsKPiDCoAo+IC3C oMKgwqDCoMKgwqDCoHNjYW5fY2FuY2VsKE5VTEwsIG5vZGUpOwo+ICvCoMKgwqDCoMKgwqDCoHdo aWxlICgocmVxID0gbF9xdWV1ZV9maW5kKHNjYW5zLCBieV9ub2RlLCBub2RlKSkpCj4gK8KgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoHNjYW5fY2FuY2VsKE5VTEwsIHJlcSk7Cj4gwqB9Cj4g ZGlmZiAtLWdpdCBhL21lc2gvbWVzaC1jb25maWctanNvbi5jIGIvbWVzaC9tZXNoLWNvbmZpZy1q c29uLmMKPiBpbmRleCA3ZjQ2Yzg1ODIuLjhmMzIxYTczMSAxMDA2NDQKPiAtLS0gYS9tZXNoL21l c2gtY29uZmlnLWpzb24uYwo+ICsrKyBiL21lc2gvbWVzaC1jb25maWctanNvbi5jCj4gQEAgLTU4 LDYgKzU4LDMzIEBAIHN0YXRpYyBjb25zdCBjaGFyICpjZmdub2RlX25hbWUgPSAiL25vZGUuanNv biI7Cj4gwqBzdGF0aWMgY29uc3QgY2hhciAqYmFrX2V4dCA9ICIuYmFrIjsKPiDCoHN0YXRpYyBj b25zdCBjaGFyICp0bXBfZXh0ID0gIi50bXAiOwo+IMKgCj4gKy8qIEpTT04ga2V5IHdvcmRzICov Cj4gK3N0YXRpYyBjb25zdCBjaGFyICp1bmljYXN0QWRkcmVzcyA9ICJ1bmljYXN0QWRkcmVzcyI7 Cj4gK3N0YXRpYyBjb25zdCBjaGFyICpkZXZpY2VDYW4gPSAiZGV2aWNlQ2FuIjsKPiArc3RhdGlj IGNvbnN0IGNoYXIgKmRldmljZUtleSA9ICJkZXZpY2VLZXkiOwo+ICtzdGF0aWMgY29uc3QgY2hh ciAqZGVmYXVsdFRUTCA9ICJkZWZhdWx0VFRMIjsKPiArc3RhdGljIGNvbnN0IGNoYXIgKnNlcXVl bmNlTnVtYmVyID0gInNlcXVlbmNlTnVtYmVyIjsKPiArc3RhdGljIGNvbnN0IGNoYXIgKm5ldEtl eXMgPSAibmV0S2V5cyI7Cj4gK3N0YXRpYyBjb25zdCBjaGFyICphcHBLZXlzID0gImFwcEtleXMi Owo+ICtzdGF0aWMgY29uc3QgY2hhciAqZWxlbWVudHMgPSAiZWxlbWVudHMiOwo+ICtzdGF0aWMg Y29uc3QgY2hhciAqbW9kZWxzID0gIm1vZGVscyI7Cj4gK3N0YXRpYyBjb25zdCBjaGFyICptb2Rl bElkID0gIm1vZGVsSWQiOwo+ICtzdGF0aWMgY29uc3QgY2hhciAqYWRkcmVzcyA9ICJhZGRyZXNz IjsKPiArc3RhdGljIGNvbnN0IGNoYXIgKmJpbmQgPSAiYmluZCI7Cj4gK3N0YXRpYyBjb25zdCBj aGFyICpwdWJsaXNoID0gInB1Ymxpc2giOwo+ICtzdGF0aWMgY29uc3QgY2hhciAqc3Vic2NyaWJl ID0gInN1YnNjcmliZSI7Cj4gK3N0YXRpYyBjb25zdCBjaGFyICpib3VuZE5ldEtleSA9ICJib3Vu ZE5ldEtleSI7Cj4gK3N0YXRpYyBjb25zdCBjaGFyICprZXlSZWZyZXNoID0gImtleVJlZnJlc2gi Owo+ICtzdGF0aWMgY29uc3QgY2hhciAqc3ViRW5hYmxlZCA9ICJzdWJFbmFibGVkIjsKPiArc3Rh dGljIGNvbnN0IGNoYXIgKnB1YkVuYWJsZWQgPSAicHViRW5hYmxlZCI7Cj4gK3N0YXRpYyBjb25z dCBjaGFyICpyZXRyYW5zbWl0ID0gInJldHJhbnNtaXQiOwo+ICsKPiArLyogQ29tbW9uIEpTT04g dmFsdWVzICovCj4gK3N0YXRpYyBjb25zdCBjaGFyICplbmFibGVkID0gImVuYWJsZWQiOwo+ICtz dGF0aWMgY29uc3QgY2hhciAqZGlzYWJsZWQgPSAiZGlzYWJsZWQiOwo+ICtzdGF0aWMgY29uc3Qg Y2hhciAqdW5zdXBwb3J0ZWQgPSAidW5zdXBwb3J0ZWQiOwo+ICsKPiArCj4gwqBzdGF0aWMgYm9v bCBzYXZlX2NvbmZpZyhqc29uX29iamVjdCAqam5vZGUsIGNvbnN0IGNoYXIgKmZuYW1lKQo+IMKg ewo+IMKgwqDCoMKgwqDCoMKgwqBGSUxFICpvdXRmaWxlOwo+IEBAIC0xMzQsMTQgKzE2MSwxNCBA QCBzdGF0aWMgaW50IGdldF9lbGVtZW50X2luZGV4KGpzb25fb2JqZWN0Cj4gKmpub2RlLCB1aW50 MTZfdCBlbGVfYWRkcikKPiDCoMKgwqDCoMKgwqDCoMKgdWludDE2X3QgYWRkciwgbnVtX2VsZTsK PiDCoMKgwqDCoMKgwqDCoMKgY2hhciAqc3RyOwo+IMKgCj4gLcKgwqDCoMKgwqDCoMKgaWYgKCFq c29uX29iamVjdF9vYmplY3RfZ2V0X2V4KGpub2RlLCAidW5pY2FzdEFkZHJlc3MiLAo+ICZqdmFs dWUpKQo+ICvCoMKgwqDCoMKgwqDCoGlmICghanNvbl9vYmplY3Rfb2JqZWN0X2dldF9leChqbm9k ZSwgdW5pY2FzdEFkZHJlc3MsCj4gJmp2YWx1ZSkpCj4gwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqByZXR1cm4gLTE7Cj4gwqAKPiDCoMKgwqDCoMKgwqDCoMKgc3RyID0gKGNoYXIgKilq c29uX29iamVjdF9nZXRfc3RyaW5nKGp2YWx1ZSk7Cj4gwqDCoMKgwqDCoMKgwqDCoGlmIChzc2Nh bmYoc3RyLCAiJTA0aHgiLCAmYWRkcikgIT0gMSkKPiDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoHJldHVybiAtMTsKPiDCoAo+IC3CoMKgwqDCoMKgwqDCoGlmICghanNvbl9vYmplY3Rf b2JqZWN0X2dldF9leChqbm9kZSwgImVsZW1lbnRzIiwKPiAmamVsZW1lbnRzKSkKPiArwqDCoMKg wqDCoMKgwqBpZiAoIWpzb25fb2JqZWN0X29iamVjdF9nZXRfZXgoam5vZGUsIGVsZW1lbnRzLCAm amVsZW1lbnRzKSkKPiDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoHJldHVybiAtMTsK PiDCoAo+IMKgwqDCoMKgwqDCoMKgwqBudW1fZWxlID0ganNvbl9vYmplY3RfYXJyYXlfbGVuZ3Ro KGplbGVtZW50cyk7Cj4gQEAgLTE2MCwxNCArMTg3LDE0IEBAIHN0YXRpYyBqc29uX29iamVjdAo+ ICpnZXRfZWxlbWVudF9tb2RlbChqc29uX29iamVjdCAqam5vZGUsIGludCBlbGVfaWR4LAo+IMKg wqDCoMKgwqDCoMKgwqBzaXplX3QgbGVuOwo+IMKgwqDCoMKgwqDCoMKgwqBjaGFyIGJ1Zls5XTsK PiDCoAo+IC3CoMKgwqDCoMKgwqDCoGlmICghanNvbl9vYmplY3Rfb2JqZWN0X2dldF9leChqbm9k ZSwgImVsZW1lbnRzIiwKPiAmamVsZW1lbnRzKSkKPiArwqDCoMKgwqDCoMKgwqBpZiAoIWpzb25f b2JqZWN0X29iamVjdF9nZXRfZXgoam5vZGUsIGVsZW1lbnRzLCAmamVsZW1lbnRzKSkKPiDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoHJldHVybiBOVUxMOwo+IMKgCj4gwqDCoMKgwqDC oMKgwqDCoGplbGVtZW50ID0ganNvbl9vYmplY3RfYXJyYXlfZ2V0X2lkeChqZWxlbWVudHMsIGVs ZV9pZHgpOwo+IMKgwqDCoMKgwqDCoMKgwqBpZiAoIWplbGVtZW50KQo+IMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgcmV0dXJuIE5VTEw7Cj4gwqAKPiAtwqDCoMKgwqDCoMKgwqBpZiAo IWpzb25fb2JqZWN0X29iamVjdF9nZXRfZXgoamVsZW1lbnQsICJtb2RlbHMiLCAmam1vZGVscykp Cj4gK8KgwqDCoMKgwqDCoMKgaWYgKCFqc29uX29iamVjdF9vYmplY3RfZ2V0X2V4KGplbGVtZW50 LCBtb2RlbHMsICZqbW9kZWxzKSkKPiDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoHJl dHVybiBOVUxMOwo+IMKgCj4gwqDCoMKgwqDCoMKgwqDCoG51bV9tb2RzID0ganNvbl9vYmplY3Rf YXJyYXlfbGVuZ3RoKGptb2RlbHMpOwo+IEBAIC0xODksNyArMjE2LDcgQEAgc3RhdGljIGpzb25f b2JqZWN0ICpnZXRfZWxlbWVudF9tb2RlbChqc29uX29iamVjdAo+ICpqbm9kZSwgaW50IGVsZV9p ZHgsCj4gwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBjaGFyICpzdHI7Cj4gwqAKPiDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoGptb2RlbCA9IGpzb25fb2JqZWN0X2FycmF5 X2dldF9pZHgoam1vZGVscywgaSk7Cj4gLcKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoGlm ICghanNvbl9vYmplY3Rfb2JqZWN0X2dldF9leChqbW9kZWwsICJtb2RlbElkIiwKPiAmanZhbHVl KSkKPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgaWYgKCFqc29uX29iamVjdF9vYmpl Y3RfZ2V0X2V4KGptb2RlbCwgbW9kZWxJZCwKPiAmanZhbHVlKSkKPiDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqByZXR1cm4gTlVMTDsKPiDCoAo+IMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgc3RyID0gKGNoYXIgKilqc29uX29iamVjdF9nZXRf c3RyaW5nKGp2YWx1ZSk7Cj4gQEAgLTI5OCw3ICszMjUsNyBAQCBzdGF0aWMgYm9vbCByZWFkX3Vu aWNhc3RfYWRkcmVzcyhqc29uX29iamVjdAo+ICpqb2JqLCB1aW50MTZfdCAqdW5pY2FzdCkKPiDC oMKgwqDCoMKgwqDCoMKganNvbl9vYmplY3QgKmp2YWx1ZTsKPiDCoMKgwqDCoMKgwqDCoMKgY2hh ciAqc3RyOwo+IMKgCj4gLcKgwqDCoMKgwqDCoMKgaWYgKCFqc29uX29iamVjdF9vYmplY3RfZ2V0 X2V4KGpvYmosICJ1bmljYXN0QWRkcmVzcyIsCj4gJmp2YWx1ZSkpCj4gK8KgwqDCoMKgwqDCoMKg aWYgKCFqc29uX29iamVjdF9vYmplY3RfZ2V0X2V4KGpvYmosIHVuaWNhc3RBZGRyZXNzLAo+ICZq dmFsdWUpKQo+IMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgcmV0dXJuIGZhbHNlOwo+ IMKgCj4gwqDCoMKgwqDCoMKgwqDCoHN0ciA9IChjaGFyICopanNvbl9vYmplY3RfZ2V0X3N0cmlu ZyhqdmFsdWUpOwo+IEBAIC0zMTQsNyArMzQxLDcgQEAgc3RhdGljIGJvb2wgcmVhZF9kZWZhdWx0 X3R0bChqc29uX29iamVjdCAqam9iaiwKPiB1aW50OF90ICp0dGwpCj4gwqDCoMKgwqDCoMKgwqDC oGludCB2YWw7Cj4gwqAKPiDCoMKgwqDCoMKgwqDCoMKgLyogZGVmYXVsdFRUTCBpcyBvcHRpb25h bCAqLwo+IC3CoMKgwqDCoMKgwqDCoGlmICghanNvbl9vYmplY3Rfb2JqZWN0X2dldF9leChqb2Jq LCAiZGVmYXVsdFRUTCIsICZqdmFsdWUpKQo+ICvCoMKgwqDCoMKgwqDCoGlmICghanNvbl9vYmpl Y3Rfb2JqZWN0X2dldF9leChqb2JqLCBkZWZhdWx0VFRMLCAmanZhbHVlKSkKPiDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoHJldHVybiB0cnVlOwo+IMKgCj4gwqDCoMKgwqDCoMKgwqDC oHZhbCA9IGpzb25fb2JqZWN0X2dldF9pbnQoanZhbHVlKTsKPiBAQCAtMzM2LDcgKzM2Myw3IEBA IHN0YXRpYyBib29sIHJlYWRfc2VxX251bWJlcihqc29uX29iamVjdCAqam9iaiwKPiB1aW50MzJf dCAqc2VxX251bWJlcikKPiDCoMKgwqDCoMKgwqDCoMKgaW50IHZhbDsKPiDCoAo+IMKgwqDCoMKg wqDCoMKgwqAvKiBzZXF1ZW5jZU51bWJlciBpcyBvcHRpb25hbCAqLwo+IC3CoMKgwqDCoMKgwqDC oGlmICghanNvbl9vYmplY3Rfb2JqZWN0X2dldF9leChqb2JqLCAic2VxdWVuY2VOdW1iZXIiLAo+ ICZqdmFsdWUpKQo+ICvCoMKgwqDCoMKgwqDCoGlmICghanNvbl9vYmplY3Rfb2JqZWN0X2dldF9l eChqb2JqLCBzZXF1ZW5jZU51bWJlciwKPiAmanZhbHVlKSkKPiDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoHJldHVybiB0cnVlOwo+IMKgCj4gwqDCoMKgwqDCoMKgwqDCoHZhbCA9IGpz b25fb2JqZWN0X2dldF9pbnQoanZhbHVlKTsKPiBAQCAtMzk2LDcgKzQyMywyNSBAQCBzdGF0aWMg Ym9vbCByZWFkX2RldmljZV9rZXkoanNvbl9vYmplY3QgKmpvYmosCj4gdWludDhfdCBrZXlfYnVm WzE2XSkKPiDCoMKgwqDCoMKgwqDCoMKgaWYgKCFrZXlfYnVmKQo+IMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgcmV0dXJuIGZhbHNlOwo+IMKgCj4gLcKgwqDCoMKgwqDCoMKgaWYgKCFq c29uX29iamVjdF9vYmplY3RfZ2V0X2V4KGpvYmosICJkZXZpY2VLZXkiLCAmanZhbHVlKSkKPiAr wqDCoMKgwqDCoMKgwqBpZiAoIWpzb25fb2JqZWN0X29iamVjdF9nZXRfZXgoam9iaiwgZGV2aWNl S2V5LCAmanZhbHVlKSkKPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgcmV0dXJuIGZh bHNlOwo+ICsKPiArwqDCoMKgwqDCoMKgwqBzdHIgPSAoY2hhciAqKWpzb25fb2JqZWN0X2dldF9z dHJpbmcoanZhbHVlKTsKPiArwqDCoMKgwqDCoMKgwqBpZiAoIXN0cjJoZXgoc3RyLCBzdHJsZW4o c3RyKSwga2V5X2J1ZiwgMTYpKQo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqByZXR1 cm4gZmFsc2U7Cj4gKwo+ICvCoMKgwqDCoMKgwqDCoHJldHVybiB0cnVlOwo+ICt9Cj4gKwo+ICtz dGF0aWMgYm9vbCByZWFkX2NhbmRpZGF0ZShqc29uX29iamVjdCAqam9iaiwgdWludDhfdCBrZXlf YnVmWzE2XSkKPiArewo+ICvCoMKgwqDCoMKgwqDCoGpzb25fb2JqZWN0ICpqdmFsdWU7Cj4gK8Kg wqDCoMKgwqDCoMKgY2hhciAqc3RyOwo+ICsKPiArwqDCoMKgwqDCoMKgwqBpZiAoIWtleV9idWYp Cj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoHJldHVybiBmYWxzZTsKPiArCj4gK8Kg wqDCoMKgwqDCoMKgaWYgKCFqc29uX29iamVjdF9vYmplY3RfZ2V0X2V4KGpvYmosIGRldmljZUNh biwgJmp2YWx1ZSkpCj4gwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqByZXR1cm4gZmFs c2U7Cj4gwqAKPiDCoMKgwqDCoMKgwqDCoMKgc3RyID0gKGNoYXIgKilqc29uX29iamVjdF9nZXRf c3RyaW5nKGp2YWx1ZSk7Cj4gQEAgLTQ2MCw3ICs1MDUsNyBAQCBzdGF0aWMgYm9vbCByZWFkX2Fw cF9rZXlzKGpzb25fb2JqZWN0ICpqb2JqLAo+IHN0cnVjdCBtZXNoX2NvbmZpZ19ub2RlICpub2Rl KQo+IMKgwqDCoMKgwqDCoMKgwqBpbnQgbGVuOwo+IMKgwqDCoMKgwqDCoMKgwqBpbnQgaTsKPiDC oAo+IC3CoMKgwqDCoMKgwqDCoGlmICghanNvbl9vYmplY3Rfb2JqZWN0X2dldF9leChqb2JqLCAi YXBwS2V5cyIsICZqYXJyYXkpKQo+ICvCoMKgwqDCoMKgwqDCoGlmICghanNvbl9vYmplY3Rfb2Jq ZWN0X2dldF9leChqb2JqLCBhcHBLZXlzLCAmamFycmF5KSkKPiDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoHJldHVybiB0cnVlOwo+IMKgCj4gwqDCoMKgwqDCoMKgwqDCoGlmIChqc29u X29iamVjdF9nZXRfdHlwZShqYXJyYXkpICE9IGpzb25fdHlwZV9hcnJheSkKPiBAQCAtNDg0LDcg KzUyOSw3IEBAIHN0YXRpYyBib29sIHJlYWRfYXBwX2tleXMoanNvbl9vYmplY3QgKmpvYmosCj4g c3RydWN0IG1lc2hfY29uZmlnX25vZGUgKm5vZGUpCj4gwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqBpZiAoIWdldF9rZXlfaW5kZXgoanRlbXAsICJpbmRleCIsICZhcHBrZXktPmFwcF9p ZHgpKQo+IMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoGdv dG8gZmFpbDsKPiDCoAo+IC3CoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBpZiAoIWdldF9r ZXlfaW5kZXgoanRlbXAsICJib3VuZE5ldEtleSIsICZhcHBrZXktCj4gPm5ldF9pZHgpKQo+ICvC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBpZiAoIWdldF9rZXlfaW5kZXgoanRlbXAsIGJv dW5kTmV0S2V5LCAmYXBwa2V5LQo+ID5uZXRfaWR4KSkKPiDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBnb3RvIGZhaWw7Cj4gwqAKPiDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoGlmICghanNvbl9vYmplY3Rfb2JqZWN0X2dldF9leChqdGVtcCwg ImtleSIsCj4gJmp2YWx1ZSkpCj4gQEAgLTUxNiw3ICs1NjEsNyBAQCBzdGF0aWMgYm9vbCByZWFk X25ldF9rZXlzKGpzb25fb2JqZWN0ICpqb2JqLAo+IHN0cnVjdCBtZXNoX2NvbmZpZ19ub2RlICpu b2RlKQo+IMKgwqDCoMKgwqDCoMKgwqBpbnQgaTsKPiDCoAo+IMKgwqDCoMKgwqDCoMKgwqAvKiBB dCBsZWFzdCBvbmUgTmV0S2V5IG11c3QgYmUgcHJlc2VudCBmb3IgYSBwcm92aXNpb25lZCBub2Rl Cj4gKi8KPiAtwqDCoMKgwqDCoMKgwqBpZiAoIWpzb25fb2JqZWN0X29iamVjdF9nZXRfZXgoam9i aiwgIm5ldEtleXMiLCAmamFycmF5KSkKPiArwqDCoMKgwqDCoMKgwqBpZiAoIWpzb25fb2JqZWN0 X29iamVjdF9nZXRfZXgoam9iaiwgbmV0S2V5cywgJmphcnJheSkpCj4gwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqByZXR1cm4gZmFsc2U7Cj4gwqAKPiDCoMKgwqDCoMKgwqDCoMKgaWYg KGpzb25fb2JqZWN0X2dldF90eXBlKGphcnJheSkgIT0ganNvbl90eXBlX2FycmF5KQo+IEBAIC01 NDcsNyArNTkyLDcgQEAgc3RhdGljIGJvb2wgcmVhZF9uZXRfa2V5cyhqc29uX29iamVjdCAqam9i aiwKPiBzdHJ1Y3QgbWVzaF9jb25maWdfbm9kZSAqbm9kZSkKPiDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoGlmICghc3RyMmhleChzdHIsIHN0cmxlbihzdHIpLCBuZXRrZXktPm5ld19r ZXksIDE2KSkKPiDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqBnb3RvIGZhaWw7Cj4gwqAKPiAtwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgaWYgKCFq c29uX29iamVjdF9vYmplY3RfZ2V0X2V4KGp0ZW1wLCAia2V5UmVmcmVzaCIsCj4gJmp2YWx1ZSkp Cj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoGlmICghanNvbl9vYmplY3Rfb2JqZWN0 X2dldF9leChqdGVtcCwga2V5UmVmcmVzaCwKPiAmanZhbHVlKSkKPiDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBuZXRrZXktPnBoYXNlID0gS0VZX1JFRlJF U0hfUEhBU0VfTk9ORTsKPiDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoGVsc2UKPiDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBuZXRrZXktPnBo YXNlID0gKHVpbnQ4X3QpCj4ganNvbl9vYmplY3RfZ2V0X2ludChqdmFsdWUpOwo+IEBAIC01OTgs NyArNjQzLDcgQEAgYm9vbCBtZXNoX2NvbmZpZ19uZXRfa2V5X2FkZChzdHJ1Y3QgbWVzaF9jb25m aWcKPiAqY2ZnLCB1aW50MTZfdCBpZHgsCj4gwqDCoMKgwqDCoMKgwqDCoGpub2RlID0gY2ZnLT5q bm9kZTsKPiDCoAo+IMKgwqDCoMKgwqDCoMKgwqBsX2RlYnVnKCJuZXRLZXkgJTQuNHgiLCBpZHgp Owo+IC3CoMKgwqDCoMKgwqDCoGpzb25fb2JqZWN0X29iamVjdF9nZXRfZXgoam5vZGUsICJuZXRL ZXlzIiwgJmphcnJheSk7Cj4gK8KgwqDCoMKgwqDCoMKganNvbl9vYmplY3Rfb2JqZWN0X2dldF9l eChqbm9kZSwgbmV0S2V5cywgJmphcnJheSk7Cj4gwqDCoMKgwqDCoMKgwqDCoGlmIChqYXJyYXkp Cj4gwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBqZW50cnkgPSBnZXRfa2V5X29iamVj dChqYXJyYXksIGlkeCk7Cj4gwqAKPiBAQCAtNjE2LDE0ICs2NjEsMTQgQEAgYm9vbCBtZXNoX2Nv bmZpZ19uZXRfa2V5X2FkZChzdHJ1Y3QgbWVzaF9jb25maWcKPiAqY2ZnLCB1aW50MTZfdCBpZHgs Cj4gwqDCoMKgwqDCoMKgwqDCoGlmICghYWRkX2tleV92YWx1ZShqZW50cnksICJrZXkiLCBrZXkp KQo+IMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgZ290byBmYWlsOwo+IMKgCj4gLcKg wqDCoMKgwqDCoMKganNvbl9vYmplY3Rfb2JqZWN0X2FkZChqZW50cnksICJrZXlSZWZyZXNoIiwK PiArwqDCoMKgwqDCoMKgwqBqc29uX29iamVjdF9vYmplY3RfYWRkKGplbnRyeSwga2V5UmVmcmVz aCwKPiDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKganNvbl9vYmplY3RfbmV3X2ludChLRVlfUkVGUkVTSF9QSEFTRQo+IF9OT05F KSk7Cj4gwqAKPiDCoMKgwqDCoMKgwqDCoMKgaWYgKCFqYXJyYXkpIHsKPiDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoGphcnJheSA9IGpzb25fb2JqZWN0X25ld19hcnJheSgpOwo+IMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgaWYgKCFqYXJyYXkpCj4gwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgZ290byBmYWlsOwo+IC3CoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBqc29uX29iamVjdF9vYmplY3RfYWRkKGpub2RlLCAibmV0 S2V5cyIsIGphcnJheSk7Cj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoGpzb25fb2Jq ZWN0X29iamVjdF9hZGQoam5vZGUsIG5ldEtleXMsIGphcnJheSk7Cj4gwqDCoMKgwqDCoMKgwqDC oH0KPiDCoAo+IMKgwqDCoMKgwqDCoMKgwqBqc29uX29iamVjdF9hcnJheV9hZGQoamFycmF5LCBq ZW50cnkpOwo+IEBAIC02NDgsNyArNjkzLDcgQEAgYm9vbCBtZXNoX2NvbmZpZ19uZXRfa2V5X3Vw ZGF0ZShzdHJ1Y3QKPiBtZXNoX2NvbmZpZyAqY2ZnLCB1aW50MTZfdCBpZHgsCj4gwqAKPiDCoMKg wqDCoMKgwqDCoMKgam5vZGUgPSBjZmctPmpub2RlOwo+IMKgCj4gLcKgwqDCoMKgwqDCoMKgaWYg KCFqc29uX29iamVjdF9vYmplY3RfZ2V0X2V4KGpub2RlLCAibmV0S2V5cyIsICZqYXJyYXkpKQo+ ICvCoMKgwqDCoMKgwqDCoGlmICghanNvbl9vYmplY3Rfb2JqZWN0X2dldF9leChqbm9kZSwgbmV0 S2V5cywgJmphcnJheSkpCj4gwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqByZXR1cm4g ZmFsc2U7Cj4gwqAKPiDCoMKgwqDCoMKgwqDCoMKgamVudHJ5ID0gZ2V0X2tleV9vYmplY3QoamFy cmF5LCBpZHgpOwo+IEBAIC02NjcsNyArNzEyLDcgQEAgYm9vbCBtZXNoX2NvbmZpZ19uZXRfa2V5 X3VwZGF0ZShzdHJ1Y3QKPiBtZXNoX2NvbmZpZyAqY2ZnLCB1aW50MTZfdCBpZHgsCj4gwqDCoMKg wqDCoMKgwqDCoGlmICghYWRkX2tleV92YWx1ZShqZW50cnksICJrZXkiLCBrZXkpKQo+IMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgcmV0dXJuIGZhbHNlOwo+IMKgCj4gLcKgwqDCoMKg wqDCoMKganNvbl9vYmplY3Rfb2JqZWN0X2FkZChqZW50cnksICJrZXlSZWZyZXNoIiwKPiArwqDC oMKgwqDCoMKgwqBqc29uX29iamVjdF9vYmplY3RfYWRkKGplbnRyeSwga2V5UmVmcmVzaCwKPiDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKganNvbl9vYmplY3RfbmV3X2ludChLRVlfUkVGUkVTSF9QSEFTRQo+IF9PTkUpKTsKPiDC oAo+IMKgwqDCoMKgwqDCoMKgwqByZXR1cm4gc2F2ZV9jb25maWcoam5vZGUsIGNmZy0+bm9kZV9k aXJfcGF0aCk7Cj4gQEAgLTY4MiwyMCArNzI3LDU1IEBAIGJvb2wgbWVzaF9jb25maWdfbmV0X2tl eV9kZWwoc3RydWN0IG1lc2hfY29uZmlnCj4gKmNmZywgdWludDE2X3QgaWR4KQo+IMKgCj4gwqDC oMKgwqDCoMKgwqDCoGpub2RlID0gY2ZnLT5qbm9kZTsKPiDCoAo+IC3CoMKgwqDCoMKgwqDCoGlm ICghanNvbl9vYmplY3Rfb2JqZWN0X2dldF9leChqbm9kZSwgIm5ldEtleXMiLCAmamFycmF5KSkK PiArwqDCoMKgwqDCoMKgwqBpZiAoIWpzb25fb2JqZWN0X29iamVjdF9nZXRfZXgoam5vZGUsIG5l dEtleXMsICZqYXJyYXkpKQo+IMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgcmV0dXJu IHRydWU7Cj4gwqAKPiDCoMKgwqDCoMKgwqDCoMKgamFycmF5X2tleV9kZWwoamFycmF5LCBpZHgp Owo+IMKgCj4gwqDCoMKgwqDCoMKgwqDCoGlmICghanNvbl9vYmplY3RfYXJyYXlfbGVuZ3RoKGph cnJheSkpCj4gLcKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoGpzb25fb2JqZWN0X29iamVj dF9kZWwoam5vZGUsICJuZXRLZXlzIik7Cj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oGpzb25fb2JqZWN0X29iamVjdF9kZWwoam5vZGUsIG5ldEtleXMpOwo+IMKgCj4gwqDCoMKgwqDC oMKgwqDCoHJldHVybiBzYXZlX2NvbmZpZyhqbm9kZSwgY2ZnLT5ub2RlX2Rpcl9wYXRoKTsKPiDC oH0KPiDCoAo+IMKgYm9vbCBtZXNoX2NvbmZpZ193cml0ZV9kZXZpY2Vfa2V5KHN0cnVjdCBtZXNo X2NvbmZpZyAqY2ZnLCB1aW50OF90Cj4gKmtleSkKPiDCoHsKPiAtwqDCoMKgwqDCoMKgwqBpZiAo IWNmZyB8fCAhYWRkX2tleV92YWx1ZShjZmctPmpub2RlLCAiZGV2aWNlS2V5Iiwga2V5KSkKPiAr wqDCoMKgwqDCoMKgwqBpZiAoIWNmZyB8fCAhYWRkX2tleV92YWx1ZShjZmctPmpub2RlLCBkZXZp Y2VLZXksIGtleSkpCj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoHJldHVybiBmYWxz ZTsKPiArCj4gK8KgwqDCoMKgwqDCoMKgcmV0dXJuIHNhdmVfY29uZmlnKGNmZy0+am5vZGUsIGNm Zy0+bm9kZV9kaXJfcGF0aCk7Cj4gK30KPiArCj4gK2Jvb2wgbWVzaF9jb25maWdfd3JpdGVfY2Fu ZGlkYXRlKHN0cnVjdCBtZXNoX2NvbmZpZyAqY2ZnLCB1aW50OF90Cj4gKmtleSkKPiArewo+ICvC oMKgwqDCoMKgwqDCoGlmICghY2ZnIHx8ICFhZGRfa2V5X3ZhbHVlKGNmZy0+am5vZGUsIGRldmlj ZUNhbiwga2V5KSkKPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgcmV0dXJuIGZhbHNl Owo+ICsKPiArwqDCoMKgwqDCoMKgwqByZXR1cm4gc2F2ZV9jb25maWcoY2ZnLT5qbm9kZSwgY2Zn LT5ub2RlX2Rpcl9wYXRoKTsKPiArfQo+ICsKPiArYm9vbCBtZXNoX2NvbmZpZ19yZWFkX2NhbmRp ZGF0ZShzdHJ1Y3QgbWVzaF9jb25maWcgKmNmZywgdWludDhfdAo+ICprZXkpCj4gK3sKPiArwqDC oMKgwqDCoMKgwqBpZiAoIWNmZykKPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgcmV0 dXJuIGZhbHNlOwo+ICsKPiArwqDCoMKgwqDCoMKgwqByZXR1cm4gcmVhZF9jYW5kaWRhdGUoY2Zn LT5qbm9kZSwga2V5KTsKPiArfQo+ICsKPiArYm9vbCBtZXNoX2NvbmZpZ19maW5hbGl6ZV9jYW5k aWRhdGUoc3RydWN0IG1lc2hfY29uZmlnICpjZmcpCj4gK3sKPiArwqDCoMKgwqDCoMKgwqB1aW50 OF90IGtleVsxNl07Cj4gKwo+ICvCoMKgwqDCoMKgwqDCoGlmICghY2ZnKQo+ICvCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqByZXR1cm4gZmFsc2U7Cj4gKwo+ICvCoMKgwqDCoMKgwqDCoGlm ICghcmVhZF9jYW5kaWRhdGUoY2ZnLT5qbm9kZSwga2V5KSkKPiArwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgcmV0dXJuIGZhbHNlOwo+ICsKPiArwqDCoMKgwqDCoMKgwqBqc29uX29iamVj dF9vYmplY3RfZGVsKGNmZy0+am5vZGUsIGRldmljZUNhbik7Cj4gK8KgwqDCoMKgwqDCoMKganNv bl9vYmplY3Rfb2JqZWN0X2RlbChjZmctPmpub2RlLCBkZXZpY2VLZXkpOwo+ICsKPiArwqDCoMKg wqDCoMKgwqBpZiAoIWFkZF9rZXlfdmFsdWUoY2ZnLT5qbm9kZSwgZGV2aWNlS2V5LCBrZXkpKQo+ IMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgcmV0dXJuIGZhbHNlOwo+IMKgCj4gwqDC oMKgwqDCoMKgwqDCoHJldHVybiBzYXZlX2NvbmZpZyhjZmctPmpub2RlLCBjZmctPm5vZGVfZGly X3BhdGgpOwo+IEBAIC03MTksNyArNzk5LDcgQEAgYm9vbCBtZXNoX2NvbmZpZ19hcHBfa2V5X2Fk ZChzdHJ1Y3QgbWVzaF9jb25maWcKPiAqY2ZnLCB1aW50MTZfdCBuZXRfaWR4LAo+IMKgCj4gwqDC oMKgwqDCoMKgwqDCoGpub2RlID0gY2ZnLT5qbm9kZTsKPiDCoAo+IC3CoMKgwqDCoMKgwqDCoGpz b25fb2JqZWN0X29iamVjdF9nZXRfZXgoam5vZGUsICJhcHBLZXlzIiwgJmphcnJheSk7Cj4gK8Kg wqDCoMKgwqDCoMKganNvbl9vYmplY3Rfb2JqZWN0X2dldF9leChqbm9kZSwgYXBwS2V5cywgJmph cnJheSk7Cj4gwqDCoMKgwqDCoMKgwqDCoGlmIChqYXJyYXkpCj4gwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqBqZW50cnkgPSBnZXRfa2V5X29iamVjdChqYXJyYXksIGFwcF9pZHgpOwo+ IMKgCj4gQEAgLTczNCw3ICs4MTQsNyBAQCBib29sIG1lc2hfY29uZmlnX2FwcF9rZXlfYWRkKHN0 cnVjdCBtZXNoX2NvbmZpZwo+ICpjZmcsIHVpbnQxNl90IG5ldF9pZHgsCj4gwqDCoMKgwqDCoMKg wqDCoGlmICghd3JpdGVfaW50KGplbnRyeSwgImluZGV4IiwgYXBwX2lkeCkpCj4gwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBnb3RvIGZhaWw7Cj4gwqAKPiAtwqDCoMKgwqDCoMKgwqBp ZiAoIXdyaXRlX2ludChqZW50cnksICJib3VuZE5ldEtleSIsIG5ldF9pZHgpKQo+ICvCoMKgwqDC oMKgwqDCoGlmICghd3JpdGVfaW50KGplbnRyeSwgYm91bmROZXRLZXksIG5ldF9pZHgpKQo+IMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgZ290byBmYWlsOwo+IMKgCj4gwqDCoMKgwqDC oMKgwqDCoGlmICghYWRkX2tleV92YWx1ZShqZW50cnksICJrZXkiLCBrZXkpKQo+IEBAIC03NDQs NyArODI0LDcgQEAgYm9vbCBtZXNoX2NvbmZpZ19hcHBfa2V5X2FkZChzdHJ1Y3QgbWVzaF9jb25m aWcKPiAqY2ZnLCB1aW50MTZfdCBuZXRfaWR4LAo+IMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgamFycmF5ID0ganNvbl9vYmplY3RfbmV3X2FycmF5KCk7Cj4gwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqBpZiAoIWphcnJheSkKPiDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBnb3RvIGZhaWw7Cj4gLcKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoGpzb25fb2JqZWN0X29iamVjdF9hZGQoam5vZGUsICJhcHBLZXlzIiwgamFycmF5 KTsKPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKganNvbl9vYmplY3Rfb2JqZWN0X2Fk ZChqbm9kZSwgYXBwS2V5cywgamFycmF5KTsKPiDCoMKgwqDCoMKgwqDCoMKgfQo+IMKgCj4gwqDC oMKgwqDCoMKgwqDCoGpzb25fb2JqZWN0X2FycmF5X2FkZChqYXJyYXksIGplbnRyeSk7Cj4gQEAg LTc3MCw3ICs4NTAsNyBAQCBib29sIG1lc2hfY29uZmlnX2FwcF9rZXlfdXBkYXRlKHN0cnVjdAo+ IG1lc2hfY29uZmlnICpjZmcsIHVpbnQxNl90IGFwcF9pZHgsCj4gwqAKPiDCoMKgwqDCoMKgwqDC oMKgam5vZGUgPSBjZmctPmpub2RlOwo+IMKgCj4gLcKgwqDCoMKgwqDCoMKgaWYgKCFqc29uX29i amVjdF9vYmplY3RfZ2V0X2V4KGpub2RlLCAiYXBwS2V5cyIsICZqYXJyYXkpKQo+ICvCoMKgwqDC oMKgwqDCoGlmICghanNvbl9vYmplY3Rfb2JqZWN0X2dldF9leChqbm9kZSwgYXBwS2V5cywgJmph cnJheSkpCj4gwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqByZXR1cm4gZmFsc2U7Cj4g wqAKPiDCoMKgwqDCoMKgwqDCoMKgLyogVGhlIGtleSBlbnRyeSBzaG91bGQgZXhpc3QgaWYgdGhl IGtleSBpcyB1cGRhdGVkICovCj4gQEAgLTgwNCwxMyArODg0LDEzIEBAIGJvb2wgbWVzaF9jb25m aWdfYXBwX2tleV9kZWwoc3RydWN0IG1lc2hfY29uZmlnCj4gKmNmZywgdWludDE2X3QgbmV0X2lk eCwKPiDCoAo+IMKgwqDCoMKgwqDCoMKgwqBqbm9kZSA9IGNmZy0+am5vZGU7Cj4gwqAKPiAtwqDC oMKgwqDCoMKgwqBpZiAoIWpzb25fb2JqZWN0X29iamVjdF9nZXRfZXgoam5vZGUsICJhcHBLZXlz IiwgJmphcnJheSkpCj4gK8KgwqDCoMKgwqDCoMKgaWYgKCFqc29uX29iamVjdF9vYmplY3RfZ2V0 X2V4KGpub2RlLCBhcHBLZXlzLCAmamFycmF5KSkKPiDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoHJldHVybiB0cnVlOwo+IMKgCj4gwqDCoMKgwqDCoMKgwqDCoGphcnJheV9rZXlfZGVs KGphcnJheSwgaWR4KTsKPiDCoAo+IMKgwqDCoMKgwqDCoMKgwqBpZiAoIWpzb25fb2JqZWN0X2Fy cmF5X2xlbmd0aChqYXJyYXkpKQo+IC3CoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBqc29u X29iamVjdF9vYmplY3RfZGVsKGpub2RlLCAiYXBwS2V5cyIpOwo+ICvCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqBqc29uX29iamVjdF9vYmplY3RfZGVsKGpub2RlLCBhcHBLZXlzKTsKPiDC oAo+IMKgwqDCoMKgwqDCoMKgwqByZXR1cm4gc2F2ZV9jb25maWcoam5vZGUsIGNmZy0+bm9kZV9k aXJfcGF0aCk7Cj4gwqB9Cj4gQEAgLTg0MCw3ICs5MjAsNyBAQCBib29sIG1lc2hfY29uZmlnX21v ZGVsX2JpbmRpbmdfYWRkKHN0cnVjdAo+IG1lc2hfY29uZmlnICpjZmcsIHVpbnQxNl90IGVsZV9h ZGRyLAo+IMKgwqDCoMKgwqDCoMKgwqBpZiAoIWptb2RlbCkKPiDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoHJldHVybiBmYWxzZTsKPiDCoAo+IC3CoMKgwqDCoMKgwqDCoGpzb25fb2Jq ZWN0X29iamVjdF9nZXRfZXgoam1vZGVsLCAiYmluZCIsICZqYXJyYXkpOwo+ICvCoMKgwqDCoMKg wqDCoGpzb25fb2JqZWN0X29iamVjdF9nZXRfZXgoam1vZGVsLCBiaW5kLCAmamFycmF5KTsKPiDC oMKgwqDCoMKgwqDCoMKgaWYgKGphcnJheSAmJiBqYXJyYXlfaGFzX3N0cmluZyhqYXJyYXksIGJ1 ZiwgNCkpCj4gwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqByZXR1cm4gdHJ1ZTsKPiDC oAo+IEBAIC04NTQsNyArOTM0LDcgQEAgYm9vbCBtZXNoX2NvbmZpZ19tb2RlbF9iaW5kaW5nX2Fk ZChzdHJ1Y3QKPiBtZXNoX2NvbmZpZyAqY2ZnLCB1aW50MTZfdCBlbGVfYWRkciwKPiDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBqc29uX29iamVjdF9wdXQo anN0cmluZyk7Cj4gwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgcmV0dXJuIGZhbHNlOwo+IMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgfQo+IC3C oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBqc29uX29iamVjdF9vYmplY3RfYWRkKGptb2Rl bCwgImJpbmQiLCBqYXJyYXkpOwo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBqc29u X29iamVjdF9vYmplY3RfYWRkKGptb2RlbCwgYmluZCwgamFycmF5KTsKPiDCoMKgwqDCoMKgwqDC oMKgfQo+IMKgCj4gwqDCoMKgwqDCoMKgwqDCoGpzb25fb2JqZWN0X2FycmF5X2FkZChqYXJyYXks IGpzdHJpbmcpOwo+IEBAIC04ODcsMTMgKzk2NywxMyBAQCBib29sIG1lc2hfY29uZmlnX21vZGVs X2JpbmRpbmdfZGVsKHN0cnVjdAo+IG1lc2hfY29uZmlnICpjZmcsIHVpbnQxNl90IGVsZV9hZGRy LAo+IMKgwqDCoMKgwqDCoMKgwqBpZiAoIWptb2RlbCkKPiDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoHJldHVybiBmYWxzZTsKPiDCoAo+IC3CoMKgwqDCoMKgwqDCoGlmICghanNvbl9v YmplY3Rfb2JqZWN0X2dldF9leChqbW9kZWwsICJiaW5kIiwgJmphcnJheSkpCj4gK8KgwqDCoMKg wqDCoMKgaWYgKCFqc29uX29iamVjdF9vYmplY3RfZ2V0X2V4KGptb2RlbCwgYmluZCwgJmphcnJh eSkpCj4gwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqByZXR1cm4gdHJ1ZTsKPiDCoAo+ IMKgwqDCoMKgwqDCoMKgwqBqYXJyYXlfc3RyaW5nX2RlbChqYXJyYXksIGJ1ZiwgNCk7Cj4gwqAK PiDCoMKgwqDCoMKgwqDCoMKgaWYgKCFqc29uX29iamVjdF9hcnJheV9sZW5ndGgoamFycmF5KSkK PiAtwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKganNvbl9vYmplY3Rfb2JqZWN0X2RlbChq bW9kZWwsICJiaW5kIik7Cj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoGpzb25fb2Jq ZWN0X29iamVjdF9kZWwoam1vZGVsLCBiaW5kKTsKPiDCoAo+IMKgwqDCoMKgwqDCoMKgwqByZXR1 cm4gc2F2ZV9jb25maWcoam5vZGUsIGNmZy0+bm9kZV9kaXJfcGF0aCk7Cj4gwqB9Cj4gQEAgLTk2 Myw3ICsxMDQzLDcgQEAgc3RhdGljIHN0cnVjdCBtZXNoX2NvbmZpZ19wdWIKPiAqcGFyc2VfbW9k ZWxfcHVibGljYXRpb24oanNvbl9vYmplY3QgKmpwdWIpCj4gwqDCoMKgwqDCoMKgwqDCoGludCBs ZW4sIHZhbHVlOwo+IMKgwqDCoMKgwqDCoMKgwqBjaGFyICpzdHI7Cj4gwqAKPiAtwqDCoMKgwqDC oMKgwqBpZiAoIWpzb25fb2JqZWN0X29iamVjdF9nZXRfZXgoanB1YiwgImFkZHJlc3MiLCAmanZh bHVlKSkKPiArwqDCoMKgwqDCoMKgwqBpZiAoIWpzb25fb2JqZWN0X29iamVjdF9nZXRfZXgoanB1 YiwgYWRkcmVzcywgJmp2YWx1ZSkpCj4gwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBy ZXR1cm4gTlVMTDsKPiDCoAo+IMKgwqDCoMKgwqDCoMKgwqBzdHIgPSAoY2hhciAqKWpzb25fb2Jq ZWN0X2dldF9zdHJpbmcoanZhbHVlKTsKPiBAQCAtOTk4LDkgKzEwNzgsMTAgQEAgc3RhdGljIHN0 cnVjdCBtZXNoX2NvbmZpZ19wdWIKPiAqcGFyc2VfbW9kZWxfcHVibGljYXRpb24oanNvbl9vYmpl Y3QgKmpwdWIpCj4gwqAKPiDCoMKgwqDCoMKgwqDCoMKgaWYgKCFnZXRfaW50KGpwdWIsICJjcmVk ZW50aWFscyIsICZ2YWx1ZSkpCj4gwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBnb3Rv IGZhaWw7Cj4gKwo+IMKgwqDCoMKgwqDCoMKgwqBwdWItPmNyZWRlbnRpYWwgPSAodWludDhfdCkg dmFsdWU7Cj4gwqAKPiAtwqDCoMKgwqDCoMKgwqBpZiAoIWpzb25fb2JqZWN0X29iamVjdF9nZXRf ZXgoanB1YiwgInJldHJhbnNtaXQiLCAmanZhbHVlKSkKPiArwqDCoMKgwqDCoMKgwqBpZiAoIWpz b25fb2JqZWN0X29iamVjdF9nZXRfZXgoanB1YiwgcmV0cmFuc21pdCwgJmp2YWx1ZSkpCj4gwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBnb3RvIGZhaWw7Cj4gwqAKPiDCoMKgwqDCoMKg wqDCoMKgaWYgKCFnZXRfaW50KGp2YWx1ZSwgImNvdW50IiwgJnZhbHVlKSkKPiBAQCAtMTA5Myw3 ICsxMTc0LDcgQEAgc3RhdGljIGJvb2wgcGFyc2VfbW9kZWxzKGpzb25fb2JqZWN0ICpqbW9kZWxz LAo+IHN0cnVjdCBtZXNoX2NvbmZpZ19lbGVtZW50ICplbGUpCj4gwqAKPiDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoGxfcXVldWVfcHVzaF90YWlsKGVsZS0+bW9kZWxzLCBtb2QpOwo+ IMKgCj4gLcKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoGlmICghanNvbl9vYmplY3Rfb2Jq ZWN0X2dldF9leChqbW9kZWwsICJtb2RlbElkIiwKPiAmanZhbHVlKSkKPiArwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgaWYgKCFqc29uX29iamVjdF9vYmplY3RfZ2V0X2V4KGptb2RlbCwg bW9kZWxJZCwKPiAmanZhbHVlKSkKPiDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqBnb3RvIGZhaWw7Cj4gwqAKPiDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoHN0ciA9IChjaGFyICopanNvbl9vYmplY3RfZ2V0X3N0cmluZyhqdmFsdWUpOwo+IEBA IC0xMTEyLDI5ICsxMTkzLDMyIEBAIHN0YXRpYyBib29sIHBhcnNlX21vZGVscyhqc29uX29iamVj dAo+ICpqbW9kZWxzLCBzdHJ1Y3QgbWVzaF9jb25maWdfZWxlbWVudCAqZWxlKQo+IMKgCj4gwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBtb2QtPmlkID0gaWQ7Cj4gwqAKPiAtwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgaWYgKGpzb25fb2JqZWN0X29iamVjdF9nZXRfZXgoam1v ZGVsLCAiYmluZCIsCj4gJmphcnJheSkpIHsKPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgaWYgKGxlbiA9PSA4KQo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgbW9kLT52ZW5kb3IgPSB0cnVlOwo+ICsKPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgaWYgKGpzb25fb2JqZWN0X29iamVjdF9nZXRfZXgoam1vZGVsLCBiaW5kLCAmamFy cmF5KSkKPiB7Cj4gwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgaWYgKGpzb25fb2JqZWN0X2dldF90eXBlKGphcnJheSkgIT0KPiBqc29uX3R5cGVfYXJyYXkg fHwKPiDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCFwYXJzZV9iaW5kaW5ncyhqYXJyYXksIG1vZCkp Cj4gwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoGdvdG8gZmFpbDsKPiDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoH0K PiDCoAo+IC3CoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBpZiAoanNvbl9vYmplY3Rfb2Jq ZWN0X2dldF9leChqbW9kZWwsICJwdWJFbmFibGVkIiwKPiAmanZhbHVlKSkKPiArwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgaWYgKGpzb25fb2JqZWN0X29iamVjdF9nZXRfZXgoam1vZGVs LCBwdWJFbmFibGVkLAo+ICZqdmFsdWUpKQo+IMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoG1vZC0+cHViX2VuYWJsZWQgPQo+IGpzb25fb2JqZWN0X2dldF9i b29sZWFuKGp2YWx1ZSk7Cj4gwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBlbHNlCj4g wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgbW9kLT5wdWJf ZW5hYmxlZCA9IHRydWU7Cj4gwqAKPiAtwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgaWYg KGpzb25fb2JqZWN0X29iamVjdF9nZXRfZXgoam1vZGVsLCAic3ViRW5hYmxlZCIsCj4gJmp2YWx1 ZSkpCj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoGlmIChqc29uX29iamVjdF9vYmpl Y3RfZ2V0X2V4KGptb2RlbCwgc3ViRW5hYmxlZCwKPiAmanZhbHVlKSkKPiDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBtb2QtPnN1Yl9lbmFibGVkID0KPiBq c29uX29iamVjdF9nZXRfYm9vbGVhbihqdmFsdWUpOwo+IMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgZWxzZQo+IMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoG1vZC0+c3ViX2VuYWJsZWQgPSB0cnVlOwo+IMKgCj4gLcKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoGlmIChqc29uX29iamVjdF9vYmplY3RfZ2V0X2V4KGptb2RlbCwgInB1Ymxp c2giLAo+ICZqdmFsdWUpKSB7Cj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoGlmIChq c29uX29iamVjdF9vYmplY3RfZ2V0X2V4KGptb2RlbCwgcHVibGlzaCwKPiAmanZhbHVlKSkgewo+ IMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoG1vZC0+cHVi ID0gcGFyc2VfbW9kZWxfcHVibGljYXRpb24oanZhbHVlKTsKPiDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBpZiAoIW1vZC0+cHViKQo+IMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBnb3Rv IGZhaWw7Cj4gwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqB9Cj4gwqAKPiAtwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgaWYgKGpzb25fb2JqZWN0X29iamVjdF9nZXRfZXgoam1v ZGVsLCAic3Vic2NyaWJlIiwKPiAmamFycmF5KSkgewo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqBpZiAoanNvbl9vYmplY3Rfb2JqZWN0X2dldF9leChqbW9kZWwsIHN1YnNjcmliZSwK PiAmamFycmF5KSkgewo+IMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoGlmICghcGFyc2VfbW9kZWxfc3Vic2NyaXB0aW9ucyhqYXJyYXksIG1vZCkpCj4gwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoGdvdG8gZmFpbDsKPiDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoH0KPiBAQCAt MTE4Nyw3ICsxMjcxLDcgQEAgc3RhdGljIGJvb2wgcGFyc2VfZWxlbWVudHMoanNvbl9vYmplY3Qg KmplbGVtcywKPiBzdHJ1Y3QgbWVzaF9jb25maWdfbm9kZSAqbm9kZSkKPiDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoGlmIChzc2NhbmYoc3RyLCAiJTA0aHgiLCAmKGVsZS0+bG9jYXRp b24pKSAhPSAxKQo+IMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoGdvdG8gZmFpbDsKPiDCoAo+IC3CoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBpZiAo anNvbl9vYmplY3Rfb2JqZWN0X2dldF9leChqZWxlbWVudCwgIm1vZGVscyIsCj4gJmptb2RlbHMp KSB7Cj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoGlmIChqc29uX29iamVjdF9vYmpl Y3RfZ2V0X2V4KGplbGVtZW50LCBtb2RlbHMsCj4gJmptb2RlbHMpKSB7Cj4gwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgaWYgKGpzb25fb2JqZWN0X2dldF90 eXBlKGptb2RlbHMpICE9Cj4ganNvbl90eXBlX2FycmF5IHx8Cj4gwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgIXBhcnNlX21vZGVscyhqbW9kZWxzCj4gLCBlbGUpKQo+IMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqBnb3RvIGZhaWw7Cj4gQEAgLTEyMTEsMTMgKzEyOTUsMTMgQEAgc3RhdGljIGludCBnZXRf bW9kZShqc29uX29iamVjdCAqanZhbHVlKQo+IMKgwqDCoMKgwqDCoMKgwqBpZiAoIXN0cikKPiDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoHJldHVybiAweGZmZmZmZmZmOwo+IMKgCj4g LcKgwqDCoMKgwqDCoMKgaWYgKCFzdHJuY2FzZWNtcChzdHIsICJkaXNhYmxlZCIsIHN0cmxlbigi ZGlzYWJsZWQiKSkpCj4gK8KgwqDCoMKgwqDCoMKgaWYgKCFzdHJuY2FzZWNtcChzdHIsIGRpc2Fi bGVkLCBzdHJsZW4oZGlzYWJsZWQpKSkKPiDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oHJldHVybiBNRVNIX01PREVfRElTQUJMRUQ7Cj4gwqAKPiAtwqDCoMKgwqDCoMKgwqBpZiAoIXN0 cm5jYXNlY21wKHN0ciwgImVuYWJsZWQiLCBzdHJsZW4oImVuYWJsZWQiKSkpCj4gK8KgwqDCoMKg wqDCoMKgaWYgKCFzdHJuY2FzZWNtcChzdHIsIGVuYWJsZWQsIHN0cmxlbihlbmFibGVkKSkpCj4g wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqByZXR1cm4gTUVTSF9NT0RFX0VOQUJMRUQ7 Cj4gwqAKPiAtwqDCoMKgwqDCoMKgwqBpZiAoIXN0cm5jYXNlY21wKHN0ciwgInVuc3VwcG9ydGVk Iiwgc3RybGVuKCJ1bnN1cHBvcnRlZCIpKSkKPiArwqDCoMKgwqDCoMKgwqBpZiAoIXN0cm5jYXNl Y21wKHN0ciwgdW5zdXBwb3J0ZWQsIHN0cmxlbih1bnN1cHBvcnRlZCkpKQo+IMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgcmV0dXJuIE1FU0hfTU9ERV9VTlNVUFBPUlRFRDsKPiDCoAo+ IMKgwqDCoMKgwqDCoMKgwqByZXR1cm4gMHhmZmZmZmZmZjsKPiBAQCAtMTMyMyw3ICsxNDA3LDcg QEAgc3RhdGljIGJvb2wgcmVhZF9uZXRfdHJhbnNtaXQoanNvbl9vYmplY3QKPiAqam9iaiwgc3Ry dWN0IG1lc2hfY29uZmlnX25vZGUgKm5vZGUpCj4gwqDCoMKgwqDCoMKgwqDCoHVpbnQxNl90IGlu dGVydmFsOwo+IMKgwqDCoMKgwqDCoMKgwqB1aW50OF90IGNudDsKPiDCoAo+IC3CoMKgwqDCoMKg wqDCoGlmICghanNvbl9vYmplY3Rfb2JqZWN0X2dldF9leChqb2JqLCAicmV0cmFuc21pdCIsICZq cnR4KSkKPiArwqDCoMKgwqDCoMKgwqBpZiAoIWpzb25fb2JqZWN0X29iamVjdF9nZXRfZXgoam9i aiwgcmV0cmFuc21pdCwgJmpydHgpKQo+IMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg cmV0dXJuIHRydWU7Cj4gwqAKPiDCoMKgwqDCoMKgwqDCoMKgaWYgKCFqc29uX29iamVjdF9vYmpl Y3RfZ2V0X2V4KGpydHgsICJjb3VudCIsICZqdmFsdWUpKQo+IEBAIC0xMzg2LDcgKzE0NzAsNyBA QCBzdGF0aWMgYm9vbCByZWFkX25vZGUoanNvbl9vYmplY3QgKmpub2RlLAo+IHN0cnVjdCBtZXNo X2NvbmZpZ19ub2RlICpub2RlKQo+IMKgwqDCoMKgwqDCoMKgwqB9Cj4gwqAKPiDCoMKgwqDCoMKg wqDCoMKgLyogQ2hlY2sgZm9yIHJlcXVpcmVkICJlbGVtZW50cyIgcHJvcGVydHkgKi8KPiAtwqDC oMKgwqDCoMKgwqBpZiAoIWpzb25fb2JqZWN0X29iamVjdF9nZXRfZXgoam5vZGUsICJlbGVtZW50 cyIsICZqdmFsdWUpKQo+ICvCoMKgwqDCoMKgwqDCoGlmICghanNvbl9vYmplY3Rfb2JqZWN0X2dl dF9leChqbm9kZSwgZWxlbWVudHMsICZqdmFsdWUpKQo+IMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgcmV0dXJuIGZhbHNlOwo+IMKgCj4gwqDCoMKgwqDCoMKgwqDCoGlmICghcmVhZF9u ZXRfdHJhbnNtaXQoam5vZGUsIG5vZGUpKSB7Cj4gQEAgLTE0NjAsMTEgKzE1NDQsMTEgQEAgc3Rh dGljIGNvbnN0IGNoYXIgKm1vZGVfdG9fc3RyaW5nKGludCBtb2RlKQo+IMKgewo+IMKgwqDCoMKg wqDCoMKgwqBzd2l0Y2ggKG1vZGUpIHsKPiDCoMKgwqDCoMKgwqDCoMKgY2FzZSBNRVNIX01PREVf RElTQUJMRUQ6Cj4gLcKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoHJldHVybiAiZGlzYWJs ZWQiOwo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqByZXR1cm4gZGlzYWJsZWQ7Cj4g wqDCoMKgwqDCoMKgwqDCoGNhc2UgTUVTSF9NT0RFX0VOQUJMRUQ6Cj4gLcKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoHJldHVybiAiZW5hYmxlZCI7Cj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoHJldHVybiBlbmFibGVkOwo+IMKgwqDCoMKgwqDCoMKgwqBkZWZhdWx0Ogo+IC3C oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqByZXR1cm4gInVuc3VwcG9ydGVkIjsKPiArwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgcmV0dXJuIHVuc3VwcG9ydGVkOwo+IMKgwqDCoMKg wqDCoMKgwqB9Cj4gwqB9Cj4gwqAKPiBAQCAtMTUyMiw3ICsxNjA2LDcgQEAgZmFpbDoKPiDCoAo+ IMKgYm9vbCBtZXNoX2NvbmZpZ193cml0ZV91bmljYXN0KHN0cnVjdCBtZXNoX2NvbmZpZyAqY2Zn LCB1aW50MTZfdAo+IHVuaWNhc3QpCj4gwqB7Cj4gLcKgwqDCoMKgwqDCoMKgaWYgKCFjZmcgfHwg IXdyaXRlX3VpbnQxNl9oZXgoY2ZnLT5qbm9kZSwgInVuaWNhc3RBZGRyZXNzIiwKPiB1bmljYXN0 KSkKPiArwqDCoMKgwqDCoMKgwqBpZiAoIWNmZyB8fCAhd3JpdGVfdWludDE2X2hleChjZmctPmpu b2RlLCB1bmljYXN0QWRkcmVzcywKPiB1bmljYXN0KSkKPiDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoHJldHVybiBmYWxzZTsKPiDCoAo+IMKgwqDCoMKgwqDCoMKgwqByZXR1cm4gc2F2 ZV9jb25maWcoY2ZnLT5qbm9kZSwgY2ZnLT5ub2RlX2Rpcl9wYXRoKTsKPiBAQCAtMTU1OCw4ICsx NjQyLDggQEAgYm9vbCBtZXNoX2NvbmZpZ193cml0ZV9uZXRfdHJhbnNtaXQoc3RydWN0Cj4gbWVz aF9jb25maWcgKmNmZywgdWludDhfdCBjbnQsCj4gwqDCoMKgwqDCoMKgwqDCoGlmICghd3JpdGVf aW50KGpydHgsICJpbnRlcnZhbCIsIGludGVydmFsKSkKPiDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoGdvdG8gZmFpbDsKPiDCoAo+IC3CoMKgwqDCoMKgwqDCoGpzb25fb2JqZWN0X29i amVjdF9kZWwoam5vZGUsICJyZXRyYW5zbWl0Iik7Cj4gLcKgwqDCoMKgwqDCoMKganNvbl9vYmpl Y3Rfb2JqZWN0X2FkZChqbm9kZSwgInJldHJhbnNtaXQiLCBqcnR4KTsKPiArwqDCoMKgwqDCoMKg wqBqc29uX29iamVjdF9vYmplY3RfZGVsKGpub2RlLCByZXRyYW5zbWl0KTsKPiArwqDCoMKgwqDC oMKgwqBqc29uX29iamVjdF9vYmplY3RfYWRkKGpub2RlLCByZXRyYW5zbWl0LCBqcnR4KTsKPiDC oAo+IMKgwqDCoMKgwqDCoMKgwqByZXR1cm4gc2F2ZV9jb25maWcoY2ZnLT5qbm9kZSwgY2ZnLT5u b2RlX2Rpcl9wYXRoKTsKPiDCoAo+IEBAIC0xNTk5LDggKzE2ODMsOCBAQCBzdGF0aWMgdm9pZCBh ZGRfbW9kZWwodm9pZCAqYSwgdm9pZCAqYikKPiDCoMKgwqDCoMKgwqDCoMKgaWYgKCFqbW9kZWwp Cj4gwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqByZXR1cm47Cj4gwqAKPiAtwqDCoMKg wqDCoMKgwqByZXN1bHQgPSAobW9kLT52ZW5kb3IpID8gd3JpdGVfdWludDMyX2hleChqbW9kZWws ICJtb2RlbElkIiwKPiBtb2QtPmlkKSA6Cj4gLcKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqB3cml0ZV91aW50MTZfaGV4KGptb2RlbCwgIm1vZGVsSWQiLAo+ICh1 aW50MTZfdCkgbW9kLT5pZCk7Cj4gK8KgwqDCoMKgwqDCoMKgcmVzdWx0ID0gKG1vZC0+dmVuZG9y KSA/IHdyaXRlX3VpbnQzMl9oZXgoam1vZGVsLCBtb2RlbElkLAo+IG1vZC0+aWQpIDoKPiArwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoHdyaXRlX3VpbnQxNl9o ZXgoam1vZGVsLCBtb2RlbElkLCAodWludDE2X3QpCj4gbW9kLT5pZCk7Cj4gwqAKPiDCoMKgwqDC oMKgwqDCoMKgaWYgKCFyZXN1bHQpIHsKPiDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oGpzb25fb2JqZWN0X3B1dChqbW9kZWwpOwo+IEBAIC0xNjA4LDEwICsxNjkyLDEwIEBAIHN0YXRp YyB2b2lkIGFkZF9tb2RlbCh2b2lkICphLCB2b2lkICpiKQo+IMKgwqDCoMKgwqDCoMKgwqB9Cj4g wqAKPiDCoMKgwqDCoMKgwqDCoMKganZhbCA9IGpzb25fb2JqZWN0X25ld19ib29sZWFuKG1vZC0+ c3ViX2VuYWJsZWQpOwo+IC3CoMKgwqDCoMKgwqDCoGpzb25fb2JqZWN0X29iamVjdF9hZGQoam1v ZGVsLCAic3ViRW5hYmxlZCIsIGp2YWwpOwo+ICvCoMKgwqDCoMKgwqDCoGpzb25fb2JqZWN0X29i amVjdF9hZGQoam1vZGVsLCBzdWJFbmFibGVkLCBqdmFsKTsKPiDCoAo+IMKgwqDCoMKgwqDCoMKg wqBqdmFsID0ganNvbl9vYmplY3RfbmV3X2Jvb2xlYW4obW9kLT5wdWJfZW5hYmxlZCk7Cj4gLcKg wqDCoMKgwqDCoMKganNvbl9vYmplY3Rfb2JqZWN0X2FkZChqbW9kZWwsICJwdWJFbmFibGVkIiwg anZhbCk7Cj4gK8KgwqDCoMKgwqDCoMKganNvbl9vYmplY3Rfb2JqZWN0X2FkZChqbW9kZWwsIHB1 YkVuYWJsZWQsIGp2YWwpOwo+IMKgCj4gwqDCoMKgwqDCoMKgwqDCoGpzb25fb2JqZWN0X2FycmF5 X2FkZChqbW9kZWxzLCBqbW9kZWwpOwo+IMKgfQo+IEBAIC0xNjYzLDExICsxNzQ3LDExIEBAIHN0 YXRpYyBzdHJ1Y3QgbWVzaF9jb25maWcKPiAqY3JlYXRlX2NvbmZpZyhjb25zdCBjaGFyICpjZmdf cGF0aCwKPiDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoHJldHVybiBOVUxMOwo+IMKg Cj4gwqDCoMKgwqDCoMKgwqDCoC8qIFNlcXVlbmNlIG51bWJlciAqLwo+IC3CoMKgwqDCoMKgwqDC oGpzb25fb2JqZWN0X29iamVjdF9hZGQoam5vZGUsICJzZXF1ZW5jZU51bWJlciIsCj4gK8KgwqDC oMKgwqDCoMKganNvbl9vYmplY3Rfb2JqZWN0X2FkZChqbm9kZSwgc2VxdWVuY2VOdW1iZXIsCj4g wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBqc29uX29iamVjdF9uZXdfaW50KG5vZGUtCj4gPnNlcV9u dW1iZXIpKTsKPiDCoAo+IMKgwqDCoMKgwqDCoMKgwqAvKiBEZWZhdWx0IFRUTCAqLwo+IC3CoMKg wqDCoMKgwqDCoGpzb25fb2JqZWN0X29iamVjdF9hZGQoam5vZGUsICJkZWZhdWx0VFRMIiwKPiAr wqDCoMKgwqDCoMKgwqBqc29uX29iamVjdF9vYmplY3RfYWRkKGpub2RlLCBkZWZhdWx0VFRMLAo+ IMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoGpzb25fb2JqZWN0X25ld19p bnQobgo+IG9kZS0+dHRsKSk7Cj4gwqAKPiDCoMKgwqDCoMKgwqDCoMKgLyogRWxlbWVudHMgKi8K PiBAQCAtMTcwMiwxMSArMTc4NiwxMSBAQCBzdGF0aWMgc3RydWN0IG1lc2hfY29uZmlnCj4gKmNy ZWF0ZV9jb25maWcoY29uc3QgY2hhciAqY2ZnX3BhdGgsCj4gwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqBpZiAoIWptb2RlbHMpCj4gwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgZ290byBmYWlsOwo+IMKgCj4gLcKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoGpzb25fb2JqZWN0X29iamVjdF9hZGQoamVsZW1lbnQsICJtb2RlbHMiLCBqbW9k ZWxzKTsKPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKganNvbl9vYmplY3Rfb2JqZWN0 X2FkZChqZWxlbWVudCwgbW9kZWxzLCBqbW9kZWxzKTsKPiDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoGxfcXVldWVfZm9yZWFjaChlbGUtPm1vZGVscywgYWRkX21vZGVsLCBqbW9kZWxz KTsKPiDCoMKgwqDCoMKgwqDCoMKgfQo+IMKgCj4gLcKgwqDCoMKgwqDCoMKganNvbl9vYmplY3Rf b2JqZWN0X2FkZChqbm9kZSwgImVsZW1lbnRzIiwgamVsZW1zKTsKPiArwqDCoMKgwqDCoMKgwqBq c29uX29iamVjdF9vYmplY3RfYWRkKGpub2RlLCBlbGVtZW50cywgamVsZW1zKTsKPiDCoAo+IMKg wqDCoMKgwqDCoMKgwqBjZmcgPSBsX25ldyhzdHJ1Y3QgbWVzaF9jb25maWcsIDEpOwo+IMKgCj4g QEAgLTE3MjQsNiArMTgwOCw1NSBAQCBmYWlsOgo+IMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgcmV0dXJuIE5VTEw7Cj4gwqB9Cj4gwqAKPiArdm9pZCBtZXNoX2NvbmZpZ19yZXNldChz dHJ1Y3QgbWVzaF9jb25maWcgKmNmZywgc3RydWN0Cj4gbWVzaF9jb25maWdfbm9kZSAqbm9kZSkK PiArewo+ICvCoMKgwqDCoMKgwqDCoGpzb25fb2JqZWN0ICpqZWxlbXM7Cj4gK8KgwqDCoMKgwqDC oMKgY29uc3Qgc3RydWN0IGxfcXVldWVfZW50cnkgKmVudHJ5Owo+ICsKPiArwqDCoMKgwqDCoMKg wqBpZiAoIWNmZyB8fCAhY2ZnLT5qbm9kZSkKPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgcmV0dXJuOwo+ICsKPiArwqDCoMKgwqDCoMKgwqAvKiBUT0RPOiBSZWNyZWF0ZSBFbGVtZW50 IEFycmF5ICovCj4gK8KgwqDCoMKgwqDCoMKgamVsZW1zID0ganNvbl9vYmplY3RfbmV3X2FycmF5 KCk7Cj4gK8KgwqDCoMKgwqDCoMKgaWYgKCFqZWxlbXMpCj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoHJldHVybjsKPiArCj4gK8KgwqDCoMKgwqDCoMKgZW50cnkgPSBsX3F1ZXVlX2dl dF9lbnRyaWVzKG5vZGUtPmVsZW1lbnRzKTsKPiArCj4gK8KgwqDCoMKgwqDCoMKgZm9yICg7IGVu dHJ5OyBlbnRyeSA9IGVudHJ5LT5uZXh0KSB7Cj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoHN0cnVjdCBtZXNoX2NvbmZpZ19lbGVtZW50ICplbGUgPSBlbnRyeS0+ZGF0YTsKPiArwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKganNvbl9vYmplY3QgKmplbGVtZW50LCAqam1vZGVs czsKPiArCj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoGplbGVtZW50ID0ganNvbl9v YmplY3RfbmV3X29iamVjdCgpOwo+ICsKPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg aWYgKCFqZWxlbWVudCkgewo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKganNvbl9vYmplY3RfcHV0KGplbGVtcyk7Cj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqByZXR1cm47Cj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoH0KPiArCj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoHdyaXRlX2lu dChqZWxlbWVudCwgImVsZW1lbnRJbmRleCIsIGVsZS0+aW5kZXgpOwo+ICvCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqB3cml0ZV91aW50MTZfaGV4KGplbGVtZW50LCAibG9jYXRpb24iLCBl bGUtCj4gPmxvY2F0aW9uKTsKPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKganNvbl9v YmplY3RfYXJyYXlfYWRkKGplbGVtcywgamVsZW1lbnQpOwo+ICsKPiArwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgLyogTW9kZWxzICovCj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoGlmIChsX3F1ZXVlX2lzZW1wdHkoZWxlLT5tb2RlbHMpKQo+ICvCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgY29udGludWU7Cj4gKwo+ICvCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqBqbW9kZWxzID0ganNvbl9vYmplY3RfbmV3X2FycmF5KCk7Cj4g K8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoGlmICgham1vZGVscykgewo+ICvCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKganNvbl9vYmplY3RfcHV0KGpl bGVtcyk7Cj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBy ZXR1cm47Cj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoH0KPiArCj4gK8KgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoGpzb25fb2JqZWN0X29iamVjdF9hZGQoamVsZW1lbnQsIG1v ZGVscywgam1vZGVscyk7Cj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoGxfcXVldWVf Zm9yZWFjaChlbGUtPm1vZGVscywgYWRkX21vZGVsLCBqbW9kZWxzKTsKPiArwqDCoMKgwqDCoMKg wqB9Cj4gKwo+ICvCoMKgwqDCoMKgwqDCoC8qIFJlcGxhY2UgZWxlbWVudCBhcnJheSAqLwo+ICvC oMKgwqDCoMKgwqDCoGpzb25fb2JqZWN0X29iamVjdF9kZWwoY2ZnLT5qbm9kZSwgZWxlbWVudHMp Owo+ICvCoMKgwqDCoMKgwqDCoGpzb25fb2JqZWN0X29iamVjdF9hZGQoY2ZnLT5qbm9kZSwgZWxl bWVudHMsIGplbGVtcyk7Cj4gK30KPiArCj4gwqBzdHJ1Y3QgbWVzaF9jb25maWcgKm1lc2hfY29u ZmlnX2NyZWF0ZShjb25zdCBjaGFyICpjZmdkaXJfbmFtZSwKPiDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoGNvbnN0IHVpbnQ4X3QgdXVpZFsxNl0sIHN0cnVjdCBtZXNoX2NvbmZpZ19u b2RlCj4gKmRiX25vZGUpCj4gwqB7Cj4gQEAgLTE3NjgsNyArMTkwMSw3IEBAIHN0YXRpYyB2b2lk IGZpbmlzaF9rZXlfcmVmcmVzaChqc29uX29iamVjdAo+ICpqb2JqLCB1aW50MTZfdCBuZXRfaWR4 KQo+IMKgwqDCoMKgwqDCoMKgwqBpbnQgaSwgbGVuOwo+IMKgCj4gwqDCoMKgwqDCoMKgwqDCoC8q IENsZWFuIHVwIGFsbCB0aGUgYm91bmQgYXBwa2V5cyAqLwo+IC3CoMKgwqDCoMKgwqDCoGlmICgh anNvbl9vYmplY3Rfb2JqZWN0X2dldF9leChqb2JqLCAiYXBwS2V5cyIsICZqYXJyYXkpKQo+ICvC oMKgwqDCoMKgwqDCoGlmICghanNvbl9vYmplY3Rfb2JqZWN0X2dldF9leChqb2JqLCBhcHBLZXlz LCAmamFycmF5KSkKPiDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoHJldHVybjsKPiDC oAo+IMKgwqDCoMKgwqDCoMKgwqBsZW4gPSBqc29uX29iamVjdF9hcnJheV9sZW5ndGgoamFycmF5 KTsKPiBAQCAtMTc3OSw3ICsxOTEyLDcgQEAgc3RhdGljIHZvaWQgZmluaXNoX2tleV9yZWZyZXNo KGpzb25fb2JqZWN0Cj4gKmpvYmosIHVpbnQxNl90IG5ldF9pZHgpCj4gwqAKPiDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoGplbnRyeSA9IGpzb25fb2JqZWN0X2FycmF5X2dldF9pZHgo amFycmF5LCBpKTsKPiDCoAo+IC3CoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBpZiAoIWdl dF9rZXlfaW5kZXgoamVudHJ5LCAiYm91bmROZXRLZXkiLCAmaWR4KSkKPiArwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgaWYgKCFnZXRfa2V5X2luZGV4KGplbnRyeSwgYm91bmROZXRLZXks ICZpZHgpKQo+IMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oGNvbnRpbnVlOwo+IMKgCj4gwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBpZiAoaWR4 ICE9IG5ldF9pZHgpCj4gQEAgLTE4MDMsMTQgKzE5MzYsMTQgQEAgYm9vbCBtZXNoX2NvbmZpZ19u ZXRfa2V5X3NldF9waGFzZShzdHJ1Y3QKPiBtZXNoX2NvbmZpZyAqY2ZnLCB1aW50MTZfdCBpZHgs Cj4gwqAKPiDCoMKgwqDCoMKgwqDCoMKgam5vZGUgPSBjZmctPmpub2RlOwo+IMKgCj4gLcKgwqDC oMKgwqDCoMKgaWYgKGpzb25fb2JqZWN0X29iamVjdF9nZXRfZXgoam5vZGUsICJuZXRLZXlzIiwg JmphcnJheSkpCj4gK8KgwqDCoMKgwqDCoMKgaWYgKGpzb25fb2JqZWN0X29iamVjdF9nZXRfZXgo am5vZGUsIG5ldEtleXMsICZqYXJyYXkpKQo+IMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgamVudHJ5ID0gZ2V0X2tleV9vYmplY3QoamFycmF5LCBpZHgpOwo+IMKgCj4gwqDCoMKgwqDC oMKgwqDCoGlmICghamVudHJ5KQo+IMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgcmV0 dXJuIGZhbHNlOwo+IMKgCj4gLcKgwqDCoMKgwqDCoMKganNvbl9vYmplY3Rfb2JqZWN0X2RlbChq ZW50cnksICJrZXlSZWZyZXNoIik7Cj4gLcKgwqDCoMKgwqDCoMKganNvbl9vYmplY3Rfb2JqZWN0 X2FkZChqZW50cnksICJrZXlSZWZyZXNoIiwKPiArwqDCoMKgwqDCoMKgwqBqc29uX29iamVjdF9v YmplY3RfZGVsKGplbnRyeSwga2V5UmVmcmVzaCk7Cj4gK8KgwqDCoMKgwqDCoMKganNvbl9vYmpl Y3Rfb2JqZWN0X2FkZChqZW50cnksIGtleVJlZnJlc2gsCj4gwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqBqc29uX29iamVjdF9uZXdfaW50KHBoYXNlKSk7Cj4gwqAKPiDCoMKgwqDCoMKgwqDCoMKgaWYg KHBoYXNlID09IEtFWV9SRUZSRVNIX1BIQVNFX05PTkUpIHsKPiBAQCAtMTg0MiwxNiArMTk3NSwx NiBAQCBib29sIG1lc2hfY29uZmlnX21vZGVsX3B1Yl9hZGQoc3RydWN0Cj4gbWVzaF9jb25maWcg KmNmZywgdWludDE2X3QgZWxlX2FkZHIsCj4gwqDCoMKgwqDCoMKgwqDCoGlmICgham1vZGVsKQo+ IMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgcmV0dXJuIGZhbHNlOwo+IMKgCj4gLcKg wqDCoMKgwqDCoMKganNvbl9vYmplY3Rfb2JqZWN0X2RlbChqbW9kZWwsICJwdWJsaXNoIik7Cj4g K8KgwqDCoMKgwqDCoMKganNvbl9vYmplY3Rfb2JqZWN0X2RlbChqbW9kZWwsIHB1Ymxpc2gpOwo+ IMKgCj4gwqDCoMKgwqDCoMKgwqDCoGpwdWIgPSBqc29uX29iamVjdF9uZXdfb2JqZWN0KCk7Cj4g wqDCoMKgwqDCoMKgwqDCoGlmICghanB1YikKPiDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoHJldHVybiBmYWxzZTsKPiDCoAo+IMKgwqDCoMKgwqDCoMKgwqBpZiAocHViLT52aXJ0KQo+ IC3CoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqByZXMgPSBhZGRfa2V5X3ZhbHVlKGpwdWIs ICJhZGRyZXNzIiwgcHViLT52aXJ0X2FkZHIpOwo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqByZXMgPSBhZGRfa2V5X3ZhbHVlKGpwdWIsIGFkZHJlc3MsIHB1Yi0+dmlydF9hZGRyKTsK PiDCoMKgwqDCoMKgwqDCoMKgZWxzZQo+IC3CoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBy ZXMgPSB3cml0ZV91aW50MTZfaGV4KGpwdWIsICJhZGRyZXNzIiwgcHViLT5hZGRyKTsKPiArwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgcmVzID0gd3JpdGVfdWludDE2X2hleChqcHViLCBh ZGRyZXNzLCBwdWItPmFkZHIpOwo+IMKgCj4gwqDCoMKgwqDCoMKgwqDCoGlmICghcmVzKQo+IMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgZ290byBmYWlsOwo+IEBAIC0xODc4LDggKzIw MTEsOCBAQCBib29sIG1lc2hfY29uZmlnX21vZGVsX3B1Yl9hZGQoc3RydWN0Cj4gbWVzaF9jb25m aWcgKmNmZywgdWludDE2X3QgZWxlX2FkZHIsCj4gwqDCoMKgwqDCoMKgwqDCoGlmICghd3JpdGVf aW50KGpydHgsICJpbnRlcnZhbCIsIHB1Yi0+aW50ZXJ2YWwpKQo+IMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgZ290byBmYWlsOwo+IMKgCj4gLcKgwqDCoMKgwqDCoMKganNvbl9vYmpl Y3Rfb2JqZWN0X2FkZChqcHViLCAicmV0cmFuc21pdCIsIGpydHgpOwo+IC3CoMKgwqDCoMKgwqDC oGpzb25fb2JqZWN0X29iamVjdF9hZGQoam1vZGVsLCAicHVibGlzaCIsIGpwdWIpOwo+ICvCoMKg wqDCoMKgwqDCoGpzb25fb2JqZWN0X29iamVjdF9hZGQoanB1YiwgcmV0cmFuc21pdCwganJ0eCk7 Cj4gK8KgwqDCoMKgwqDCoMKganNvbl9vYmplY3Rfb2JqZWN0X2FkZChqbW9kZWwsIHB1Ymxpc2gs IGpwdWIpOwo+IMKgCj4gwqDCoMKgwqDCoMKgwqDCoHJldHVybiBzYXZlX2NvbmZpZyhqbm9kZSwg Y2ZnLT5ub2RlX2Rpcl9wYXRoKTsKPiDCoAo+IEBAIC0xOTExLDIzICsyMDQ0LDIzIEBAIGJvb2wg bWVzaF9jb25maWdfbW9kZWxfcHViX2RlbChzdHJ1Y3QKPiBtZXNoX2NvbmZpZyAqY2ZnLCB1aW50 MTZfdCBhZGRyLAo+IMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoHVpbnQz Ml90IG1vZF9pZCwgYm9vbAo+IHZlbmRvcikKPiDCoHsKPiDCoMKgwqDCoMKgwqDCoMKgaWYgKCFj ZmcgfHwgIWRlbGV0ZV9tb2RlbF9wcm9wZXJ0eShjZmctPmpub2RlLCBhZGRyLCBtb2RfaWQsCj4g dmVuZG9yLAo+IC0KPiDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAicHVibGlzCj4gaCIpKQo+ICvCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBw dWJsaQo+IHNoKSkKPiDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoHJldHVybiBmYWxz ZTsKPiDCoAo+IMKgwqDCoMKgwqDCoMKgwqByZXR1cm4gc2F2ZV9jb25maWcoY2ZnLT5qbm9kZSwg Y2ZnLT5ub2RlX2Rpcl9wYXRoKTsKPiDCoH0KPiDCoAo+IC1zdGF0aWMgdm9pZCBkZWxfcGFnZShq c29uX29iamVjdCAqamFycmF5LCB1aW50OF90IHBhZ2UpCj4gK3N0YXRpYyBib29sIGRlbF9wYWdl KGpzb25fb2JqZWN0ICpqYXJyYXksIHVpbnQ4X3QgcGFnZSkKPiDCoHsKPiDCoMKgwqDCoMKgwqDC oMKgY2hhciBidWZbM107Cj4gwqDCoMKgwqDCoMKgwqDCoGludCBpLCBsZW4sIHJldDsKPiDCoAo+ IMKgwqDCoMKgwqDCoMKgwqBpZiAoIWphcnJheSkKPiAtwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgcmV0dXJuOwo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqByZXR1cm4gZmFs c2U7Cj4gwqAKPiDCoMKgwqDCoMKgwqDCoMKgcmV0ID0gc25wcmludGYoYnVmLCAzLCAiJTIuMngi LCBwYWdlKTsKPiDCoMKgwqDCoMKgwqDCoMKgaWYgKHJldCA8IDApCj4gLcKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoHJldHVybjsKPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg cmV0dXJuIGZhbHNlOwo+IMKgCj4gwqDCoMKgwqDCoMKgwqDCoGxlbiA9IGpzb25fb2JqZWN0X2Fy cmF5X2xlbmd0aChqYXJyYXkpOwo+IMKgCj4gQEAgLTE5MzgsMTAgKzIwNzEsMjkgQEAgc3RhdGlj IHZvaWQgZGVsX3BhZ2UoanNvbl9vYmplY3QgKmphcnJheSwKPiB1aW50OF90IHBhZ2UpCj4gwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBqZW50cnkgPSBqc29uX29iamVjdF9hcnJheV9n ZXRfaWR4KGphcnJheSwgaSk7Cj4gwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBzdHIg PSAoY2hhciAqKWpzb25fb2JqZWN0X2dldF9zdHJpbmcoamVudHJ5KTsKPiDCoAo+IC3CoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAvKiBEZWxldGUgbWF0Y2hpbmcgcGFnZShzKSAqLwo+IC3C oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBpZiAoIW1lbWNtcChzdHIsIGJ1ZiwgMikpCj4g K8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoC8qIERlbGV0ZSBtYXRjaGluZyBwYWdlICov Cj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoGlmICghbWVtY21wKHN0ciwgYnVmLCAy KSkgewo+IMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoGpz b25fb2JqZWN0X2FycmF5X2RlbF9pZHgoamFycmF5LCBpLCAxKTsKPiArwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoGJyZWFrOwo+ICvCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqB9Cj4gwqDCoMKgwqDCoMKgwqDCoH0KPiArCj4gK8KgwqDCoMKgwqDCoMKg cmV0dXJuIHRydWU7Cj4gK30KPiArCj4gK3ZvaWQgbWVzaF9jb25maWdfY29tcF9wYWdlX2RlbChz dHJ1Y3QgbWVzaF9jb25maWcgKmNmZywgdWludDhfdAo+IHBhZ2UpCj4gK3sKPiArwqDCoMKgwqDC oMKgwqBqc29uX29iamVjdCAqam5vZGUsICpqYXJyYXkgPSBOVUxMOwo+ICsKPiArwqDCoMKgwqDC oMKgwqBpZiAoIWNmZykKPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgcmV0dXJuOwo+ ICsKPiArwqDCoMKgwqDCoMKgwqBqbm9kZSA9IGNmZy0+am5vZGU7Cj4gKwo+ICvCoMKgwqDCoMKg wqDCoGpzb25fb2JqZWN0X29iamVjdF9nZXRfZXgoam5vZGUsICJwYWdlcyIsICZqYXJyYXkpOwo+ ICsKPiArwqDCoMKgwqDCoMKgwqBpZiAoZGVsX3BhZ2UoamFycmF5LCBwYWdlKSkKPiArwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgc2F2ZV9jb25maWcoam5vZGUsIGNmZy0+bm9kZV9kaXJf cGF0aCk7Cj4gwqB9Cj4gwqAKPiDCoGJvb2wgbWVzaF9jb25maWdfY29tcF9wYWdlX2FkZChzdHJ1 Y3QgbWVzaF9jb25maWcgKmNmZywgdWludDhfdAo+IHBhZ2UsCj4gQEAgLTE5ODQsNTYgKzIxMzYs NiBAQCBib29sIG1lc2hfY29uZmlnX2NvbXBfcGFnZV9hZGQoc3RydWN0Cj4gbWVzaF9jb25maWcg KmNmZywgdWludDhfdCBwYWdlLAo+IMKgwqDCoMKgwqDCoMKgwqByZXR1cm4gc2F2ZV9jb25maWco am5vZGUsIGNmZy0+bm9kZV9kaXJfcGF0aCk7Cj4gwqB9Cj4gwqAKPiAtYm9vbCBtZXNoX2NvbmZp Z19jb21wX3BhZ2VfbXYoc3RydWN0IG1lc2hfY29uZmlnICpjZmcsIHVpbnQ4X3Qgb2xkLAo+IHVp bnQ4X3QgbncpCj4gLXsKPiAtwqDCoMKgwqDCoMKgwqBqc29uX29iamVjdCAqam5vZGUsICpqYXJy YXkgPSBOVUxMOwo+IC3CoMKgwqDCoMKgwqDCoHVpbnQ4X3QgKmRhdGE7Cj4gLcKgwqDCoMKgwqDC oMKgY2hhciAqc3RyOwo+IC3CoMKgwqDCoMKgwqDCoGNoYXIgb2xkX2J1ZlszXTsKPiAtwqDCoMKg wqDCoMKgwqBpbnQgaSwgbGVuLCByZXQsIGRsZW4gPSAwOwo+IC3CoMKgwqDCoMKgwqDCoGJvb2wg c3RhdHVzID0gdHJ1ZTsKPiAtCj4gLcKgwqDCoMKgwqDCoMKgaWYgKCFjZmcgfHwgb2xkID09IG53 KQo+IC3CoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqByZXR1cm4gZmFsc2U7Cj4gLQo+IC3C oMKgwqDCoMKgwqDCoHJldCA9IHNucHJpbnRmKG9sZF9idWYsIDMsICIlMi4yeCIsIG9sZCk7Cj4g LcKgwqDCoMKgwqDCoMKgaWYgKHJldCA8IDApCj4gLcKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoHJldHVybiBmYWxzZTsKPiAtCj4gLcKgwqDCoMKgwqDCoMKgam5vZGUgPSBjZmctPmpub2Rl Owo+IC0KPiAtwqDCoMKgwqDCoMKgwqBqc29uX29iamVjdF9vYmplY3RfZ2V0X2V4KGpub2RlLCAi cGFnZXMiLCAmamFycmF5KTsKPiAtCj4gLcKgwqDCoMKgwqDCoMKgaWYgKCFqYXJyYXkpCj4gLcKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoHJldHVybiBmYWxzZTsKPiAtCj4gLcKgwqDCoMKg wqDCoMKgZGF0YSA9IGxfbWFsbG9jKE1BWF9NU0dfTEVOKTsKPiAtCj4gLcKgwqDCoMKgwqDCoMKg bGVuID0ganNvbl9vYmplY3RfYXJyYXlfbGVuZ3RoKGphcnJheSk7Cj4gLQo+IC3CoMKgwqDCoMKg wqDCoGZvciAoaSA9IDA7IGkgPCBsZW47IGkrKykgewo+IC3CoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqBqc29uX29iamVjdCAqamVudHJ5Owo+IC0KPiAtwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgamVudHJ5ID0ganNvbl9vYmplY3RfYXJyYXlfZ2V0X2lkeChqYXJyYXksIGkpOwo+ IC3CoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBzdHIgPSAoY2hhciAqKWpzb25fb2JqZWN0 X2dldF9zdHJpbmcoamVudHJ5KTsKPiAtCj4gLcKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oC8qIERlbGV0ZSBtYXRjaGluZyBwYWdlKHMpIGJ1dCBzYXZlIGRhdGEqLwo+IC3CoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqBpZiAoIW1lbWNtcChzdHIsIG9sZF9idWYsIDIpKSB7Cj4gLcKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBkbGVuID0gc3RybGVu KHN0ciArIDIpOwo+IC3CoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgc3RyMmhleChzdHIgKyAyLCBkbGVuLCBkYXRhLCBNQVhfTVNHX0xFTik7Cj4gLcKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBkbGVuIC89IDI7Cj4gLcKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBqc29uX29iamVjdF9hcnJh eV9kZWxfaWR4KGphcnJheSwgaSwgMSk7Cj4gLcKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oH0KPiAtwqDCoMKgwqDCoMKgwqB9Cj4gLQo+IC3CoMKgwqDCoMKgwqDCoGlmIChkbGVuKQo+IC3C oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBzdGF0dXMgPSBtZXNoX2NvbmZpZ19jb21wX3Bh Z2VfYWRkKGNmZywgbncsIGRhdGEsCj4gZGxlbik7Cj4gLQo+IC3CoMKgwqDCoMKgwqDCoGxfZnJl ZShkYXRhKTsKPiAtCj4gLcKgwqDCoMKgwqDCoMKgcmV0dXJuIHN0YXR1czsKPiAtfQo+IC0KPiDC oGJvb2wgbWVzaF9jb25maWdfbW9kZWxfc3ViX2FkZChzdHJ1Y3QgbWVzaF9jb25maWcgKmNmZywg dWludDE2X3QKPiBlbGVfYWRkciwKPiDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqB1aW50MzJfdCBtb2RfaWQsIGJvb2wKPiB2ZW5kb3IsCj4gwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgc3RydWN0Cj4gbWVzaF9jb25maWdfc3ViICpzdWIpCj4gQEAg LTIwNjQsNyArMjE2Niw3IEBAIGJvb2wgbWVzaF9jb25maWdfbW9kZWxfc3ViX2FkZChzdHJ1Y3QK PiBtZXNoX2NvbmZpZyAqY2ZnLCB1aW50MTZfdCBlbGVfYWRkciwKPiDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoGxlbiA9IDMyOwo+IMKgwqDCoMKgwqDCoMKgwqB9Cj4gwqAKPiAtwqDC oMKgwqDCoMKgwqBqc29uX29iamVjdF9vYmplY3RfZ2V0X2V4KGptb2RlbCwgInN1YnNjcmliZSIs ICZqYXJyYXkpOwo+ICvCoMKgwqDCoMKgwqDCoGpzb25fb2JqZWN0X29iamVjdF9nZXRfZXgoam1v ZGVsLCBzdWJzY3JpYmUsICZqYXJyYXkpOwo+IMKgwqDCoMKgwqDCoMKgwqBpZiAoamFycmF5ICYm IGphcnJheV9oYXNfc3RyaW5nKGphcnJheSwgYnVmLCBsZW4pKQo+IMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgcmV0dXJuIHRydWU7Cj4gwqAKPiBAQCAtMjA3OCw3ICsyMTgwLDcgQEAg Ym9vbCBtZXNoX2NvbmZpZ19tb2RlbF9zdWJfYWRkKHN0cnVjdAo+IG1lc2hfY29uZmlnICpjZmcs IHVpbnQxNl90IGVsZV9hZGRyLAo+IMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoGpzb25fb2JqZWN0X3B1dChqc3RyaW5nKTsKPiDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqByZXR1cm4gZmFsc2U7Cj4gwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqB9Cj4gLcKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oGpzb25fb2JqZWN0X29iamVjdF9hZGQoam1vZGVsLCAic3Vic2NyaWJlIiwgamFycmF5KTsKPiAr wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKganNvbl9vYmplY3Rfb2JqZWN0X2FkZChqbW9k ZWwsIHN1YnNjcmliZSwgamFycmF5KTsKPiDCoMKgwqDCoMKgwqDCoMKgfQo+IMKgCj4gwqDCoMKg wqDCoMKgwqDCoGpzb25fb2JqZWN0X2FycmF5X2FkZChqYXJyYXksIGpzdHJpbmcpOwo+IEBAIC0y MTA3LDcgKzIyMDksNyBAQCBib29sIG1lc2hfY29uZmlnX21vZGVsX3N1Yl9kZWwoc3RydWN0Cj4g bWVzaF9jb25maWcgKmNmZywgdWludDE2X3QgZWxlX2FkZHIsCj4gwqDCoMKgwqDCoMKgwqDCoGlm ICgham1vZGVsKQo+IMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgcmV0dXJuIGZhbHNl Owo+IMKgCj4gLcKgwqDCoMKgwqDCoMKgaWYgKCFqc29uX29iamVjdF9vYmplY3RfZ2V0X2V4KGpt b2RlbCwgInN1YnNjcmliZSIsICZqYXJyYXkpKQo+ICvCoMKgwqDCoMKgwqDCoGlmICghanNvbl9v YmplY3Rfb2JqZWN0X2dldF9leChqbW9kZWwsIHN1YnNjcmliZSwgJmphcnJheSkpCj4gwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqByZXR1cm4gdHJ1ZTsKPiDCoAo+IMKgwqDCoMKgwqDC oMKgwqBpZiAoIXN1Yi0+dmlydCkgewo+IEBAIC0yMTIyLDcgKzIyMjQsNyBAQCBib29sIG1lc2hf Y29uZmlnX21vZGVsX3N1Yl9kZWwoc3RydWN0Cj4gbWVzaF9jb25maWcgKmNmZywgdWludDE2X3Qg ZWxlX2FkZHIsCj4gwqDCoMKgwqDCoMKgwqDCoGphcnJheV9zdHJpbmdfZGVsKGphcnJheSwgYnVm LCBsZW4pOwo+IMKgCj4gwqDCoMKgwqDCoMKgwqDCoGlmICghanNvbl9vYmplY3RfYXJyYXlfbGVu Z3RoKGphcnJheSkpCj4gLcKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoGpzb25fb2JqZWN0 X29iamVjdF9kZWwoam1vZGVsLCAic3Vic2NyaWJlIik7Cj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoGpzb25fb2JqZWN0X29iamVjdF9kZWwoam1vZGVsLCBzdWJzY3JpYmUpOwo+IMKg Cj4gwqDCoMKgwqDCoMKgwqDCoHJldHVybiBzYXZlX2NvbmZpZyhqbm9kZSwgY2ZnLT5ub2RlX2Rp cl9wYXRoKTsKPiDCoH0KPiBAQCAtMjEzMSw3ICsyMjMzLDcgQEAgYm9vbCBtZXNoX2NvbmZpZ19t b2RlbF9zdWJfZGVsX2FsbChzdHJ1Y3QKPiBtZXNoX2NvbmZpZyAqY2ZnLCB1aW50MTZfdCBhZGRy LAo+IMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoHVpbnQzMl90IG1vZF9p ZCwgYm9vbAo+IHZlbmRvcikKPiDCoHsKPiDCoMKgwqDCoMKgwqDCoMKgaWYgKCFjZmcgfHwgIWRl bGV0ZV9tb2RlbF9wcm9wZXJ0eShjZmctPmpub2RlLCBhZGRyLCBtb2RfaWQsCj4gdmVuZG9yLAo+ IC0KPiDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqAic3Vic2NyCj4gaWJlIikpCj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoHN1YnNjCj4g cmliZSkpCj4gwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqByZXR1cm4gZmFsc2U7Cj4g wqAKPiDCoMKgwqDCoMKgwqDCoMKgcmV0dXJuIHNhdmVfY29uZmlnKGNmZy0+am5vZGUsIGNmZy0+ bm9kZV9kaXJfcGF0aCk7Cj4gQEAgLTIxNjEsNyArMjI2Myw3IEBAIGJvb2wgbWVzaF9jb25maWdf bW9kZWxfcHViX2VuYWJsZShzdHJ1Y3QKPiBtZXNoX2NvbmZpZyAqY2ZnLCB1aW50MTZfdCBlbGVf YWRkciwKPiDCoMKgwqDCoMKgwqDCoMKganNvbl9vYmplY3Rfb2JqZWN0X2FkZChqbW9kZWwsICJw dWJEaXNhYmxlZCIsIGp2YWwpOwo+IMKgCj4gwqDCoMKgwqDCoMKgwqDCoGlmICghZW5hYmxlKQo+ IC3CoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBqc29uX29iamVjdF9vYmplY3RfZGVsKGpt b2RlbCwgInB1Ymxpc2giKTsKPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKganNvbl9v YmplY3Rfb2JqZWN0X2RlbChqbW9kZWwsIHB1Ymxpc2gpOwo+IMKgCj4gwqDCoMKgwqDCoMKgwqDC oHJldHVybiBzYXZlX2NvbmZpZyhjZmctPmpub2RlLCBjZmctPm5vZGVfZGlyX3BhdGgpOwo+IMKg fQo+IEBAIC0yMTg0LDEzICsyMjg2LDEzIEBAIGJvb2wgbWVzaF9jb25maWdfbW9kZWxfc3ViX2Vu YWJsZShzdHJ1Y3QKPiBtZXNoX2NvbmZpZyAqY2ZnLCB1aW50MTZfdCBlbGVfYWRkciwKPiDCoMKg wqDCoMKgwqDCoMKgaWYgKCFqbW9kZWwpCj4gwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqByZXR1cm4gZmFsc2U7Cj4gwqAKPiAtwqDCoMKgwqDCoMKgwqBqc29uX29iamVjdF9vYmplY3Rf ZGVsKGptb2RlbCwgInN1YkVuYWJsZWQiKTsKPiArwqDCoMKgwqDCoMKgwqBqc29uX29iamVjdF9v YmplY3RfZGVsKGptb2RlbCwgc3ViRW5hYmxlZCk7Cj4gwqAKPiDCoMKgwqDCoMKgwqDCoMKganZh bCA9IGpzb25fb2JqZWN0X25ld19ib29sZWFuKGVuYWJsZSk7Cj4gLcKgwqDCoMKgwqDCoMKganNv bl9vYmplY3Rfb2JqZWN0X2FkZChqbW9kZWwsICJzdWJFbmFibGVkIiwganZhbCk7Cj4gK8KgwqDC oMKgwqDCoMKganNvbl9vYmplY3Rfb2JqZWN0X2FkZChqbW9kZWwsIHN1YkVuYWJsZWQsIGp2YWwp Owo+IMKgCj4gwqDCoMKgwqDCoMKgwqDCoGlmICghZW5hYmxlKQo+IC3CoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqBqc29uX29iamVjdF9vYmplY3RfZGVsKGptb2RlbCwgInN1YnNjcmliZSIp Owo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBqc29uX29iamVjdF9vYmplY3RfZGVs KGptb2RlbCwgc3Vic2NyaWJlKTsKPiDCoAo+IMKgwqDCoMKgwqDCoMKgwqByZXR1cm4gc2F2ZV9j b25maWcoY2ZnLT5qbm9kZSwgY2ZnLT5ub2RlX2Rpcl9wYXRoKTsKPiDCoH0KPiBAQCAtMjIwNSwx NCArMjMwNywxNCBAQCBib29sIG1lc2hfY29uZmlnX3dyaXRlX3NlcV9udW1iZXIoc3RydWN0Cj4g bWVzaF9jb25maWcgKmNmZywgdWludDMyX3Qgc2VxLAo+IMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgcmV0dXJuIGZhbHNlOwo+IMKgCj4gwqDCoMKgwqDCoMKgwqDCoGlmICghY2FjaGUp IHsKPiAtwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgaWYgKCF3cml0ZV9pbnQoY2ZnLT5q bm9kZSwgInNlcXVlbmNlTnVtYmVyIiwgc2VxKSkKPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgaWYgKCF3cml0ZV9pbnQoY2ZnLT5qbm9kZSwgc2VxdWVuY2VOdW1iZXIsIHNlcSkpCj4g wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgcmV0dXJuIGZh bHNlOwo+IMKgCj4gwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqByZXR1cm4gbWVzaF9j b25maWdfc2F2ZShjZmcsIHRydWUsIE5VTEwsIE5VTEwpOwo+IMKgwqDCoMKgwqDCoMKgwqB9Cj4g wqAKPiDCoMKgwqDCoMKgwqDCoMKgLyogSWYgcmVzZXR0aW5nIHNlcSB0byBaZXJvLCBtYWtlIHN1 cmUgY2FjaGVkIHZhbHVlIHJlc2V0IGFzCj4gd2VsbCAqLwo+IC3CoMKgwqDCoMKgwqDCoGlmIChz ZXEgJiYgZ2V0X2ludChjZmctPmpub2RlLCAic2VxdWVuY2VOdW1iZXIiLCAmdmFsdWUpKQo+ICvC oMKgwqDCoMKgwqDCoGlmIChzZXEgJiYgZ2V0X2ludChjZmctPmpub2RlLCBzZXF1ZW5jZU51bWJl ciwgJnZhbHVlKSkKPiDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoGNhY2hlZCA9ICh1 aW50MzJfdCl2YWx1ZTsKPiDCoAo+IMKgwqDCoMKgwqDCoMKgwqAvKgo+IEBAIC0yMjYyLDggKzIz NjQsOCBAQCBib29sIG1lc2hfY29uZmlnX3dyaXRlX3NlcV9udW1iZXIoc3RydWN0Cj4gbWVzaF9j b25maWcgKmNmZywgdWludDMyX3Qgc2VxLAo+IMKgCj4gwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqBsX2RlYnVnKCJTZXEgQ2FjaGU6ICVkIC0+ICVkIiwgc2VxLCBjYWNoZWQpOwo+IMKg Cj4gLcKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoGlmICghd3JpdGVfaW50KGNmZy0+am5v ZGUsICJzZXF1ZW5jZU51bWJlciIsIGNhY2hlZCkpCj4gLcKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoCByZXR1cm4gZmFsc2U7Cj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoGlmICghd3JpdGVfaW50KGNmZy0+am5vZGUsIHNlcXVlbmNlTnVtYmVyLCBjYWNoZWQpKQo+ ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgcmV0dXJuIGZh bHNlOwo+IMKgCj4gwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqByZXR1cm4gbWVzaF9j b25maWdfc2F2ZShjZmcsIGZhbHNlLCBOVUxMLCBOVUxMKTsKPiDCoMKgwqDCoMKgwqDCoMKgfQo+ IEBAIC0yMjczLDcgKzIzNzUsNyBAQCBib29sIG1lc2hfY29uZmlnX3dyaXRlX3NlcV9udW1iZXIo c3RydWN0Cj4gbWVzaF9jb25maWcgKmNmZywgdWludDMyX3Qgc2VxLAo+IMKgCj4gwqBib29sIG1l c2hfY29uZmlnX3dyaXRlX3R0bChzdHJ1Y3QgbWVzaF9jb25maWcgKmNmZywgdWludDhfdCB0dGwp Cj4gwqB7Cj4gLcKgwqDCoMKgwqDCoMKgaWYgKCFjZmcgfHwgIXdyaXRlX2ludChjZmctPmpub2Rl LCAiZGVmYXVsdFRUTCIsIHR0bCkpCj4gK8KgwqDCoMKgwqDCoMKgaWYgKCFjZmcgfHwgIXdyaXRl X2ludChjZmctPmpub2RlLCBkZWZhdWx0VFRMLCB0dGwpKQo+IMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgcmV0dXJuIGZhbHNlOwo+IMKgCj4gwqDCoMKgwqDCoMKgwqDCoHJldHVybiBz YXZlX2NvbmZpZyhjZmctPmpub2RlLCBjZmctPm5vZGVfZGlyX3BhdGgpOwo+IGRpZmYgLS1naXQg YS9tZXNoL21lc2gtY29uZmlnLmggYi9tZXNoL21lc2gtY29uZmlnLmgKPiBpbmRleCA0MjA3NzU4 MjkuLmVkMWI2MTBkZSAxMDA2NDQKPiAtLS0gYS9tZXNoL21lc2gtY29uZmlnLmgKPiArKysgYi9t ZXNoL21lc2gtY29uZmlnLmgKPiBAQCAtMTE5LDYgKzExOSw3IEBAIHZvaWQgbWVzaF9jb25maWdf cmVsZWFzZShzdHJ1Y3QgbWVzaF9jb25maWcKPiAqY2ZnKTsKPiDCoHZvaWQgbWVzaF9jb25maWdf ZGVzdHJveV9udm0oc3RydWN0IG1lc2hfY29uZmlnICpjZmcpOwo+IMKgYm9vbCBtZXNoX2NvbmZp Z19zYXZlKHN0cnVjdCBtZXNoX2NvbmZpZyAqY2ZnLCBib29sIG5vX3dhaXQsCj4gwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoG1l c2hfY29uZmlnX3N0YXR1c19mdW5jX3QgY2IsIHZvaWQKPiAqdXNlcl9kYXRhKTsKPiArdm9pZCBt ZXNoX2NvbmZpZ19yZXNldChzdHJ1Y3QgbWVzaF9jb25maWcgKmNmZywgc3RydWN0Cj4gbWVzaF9j b25maWdfbm9kZSAqbm9kZSk7Cj4gwqBzdHJ1Y3QgbWVzaF9jb25maWcgKm1lc2hfY29uZmlnX2Ny ZWF0ZShjb25zdCBjaGFyICpjZmdkaXJfbmFtZSwKPiDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqBjb25zdCB1aW50OF90Cj4gdXVpZFsxNl0sCj4gwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgc3RydWN0Cj4gbWVzaF9jb25maWdfbm9kZSAqbm9kZSk7 Cj4gQEAgLTEyNiw2ICsxMjcsOSBAQCBzdHJ1Y3QgbWVzaF9jb25maWcgKm1lc2hfY29uZmlnX2Ny ZWF0ZShjb25zdCBjaGFyCj4gKmNmZ2Rpcl9uYW1lLAo+IMKgYm9vbCBtZXNoX2NvbmZpZ193cml0 ZV9uZXRfdHJhbnNtaXQoc3RydWN0IG1lc2hfY29uZmlnICpjZmcsIHVpbnQ4X3QKPiBjbnQsCj4g wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoHVp bnQxNl90Cj4gaW50ZXJ2YWwpOwo+IMKgYm9vbCBtZXNoX2NvbmZpZ193cml0ZV9kZXZpY2Vfa2V5 KHN0cnVjdCBtZXNoX2NvbmZpZyAqY2ZnLCB1aW50OF90Cj4gKmtleSk7Cj4gK2Jvb2wgbWVzaF9j b25maWdfd3JpdGVfY2FuZGlkYXRlKHN0cnVjdCBtZXNoX2NvbmZpZyAqY2ZnLCB1aW50OF90Cj4g KmtleSk7Cj4gK2Jvb2wgbWVzaF9jb25maWdfcmVhZF9jYW5kaWRhdGUoc3RydWN0IG1lc2hfY29u ZmlnICpjZmcsIHVpbnQ4X3QKPiAqa2V5KTsKPiArYm9vbCBtZXNoX2NvbmZpZ19maW5hbGl6ZV9j YW5kaWRhdGUoc3RydWN0IG1lc2hfY29uZmlnICpjZmcpOwo+IMKgYm9vbCBtZXNoX2NvbmZpZ193 cml0ZV90b2tlbihzdHJ1Y3QgbWVzaF9jb25maWcgKmNmZywgdWludDhfdAo+ICp0b2tlbik7Cj4g wqBib29sIG1lc2hfY29uZmlnX3dyaXRlX25ldHdvcmtfa2V5KHN0cnVjdCBtZXNoX2NvbmZpZyAq Y2ZnLCB1aW50MTZfdAo+IGlkeCwKPiDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgdWludDhfdCAqa2V5LCB1aW50OF90ICpuZXdf a2V5LCBpbnQKPiBwaGFzZSk7Cj4gQEAgLTE0MSw3ICsxNDUsNyBAQCBib29sIG1lc2hfY29uZmln X3dyaXRlX21vZGUoc3RydWN0IG1lc2hfY29uZmlnCj4gKmNmZywgY29uc3QgY2hhciAqa2V5d29y ZCwKPiDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoGludAo+IHZhbHVlKTsKPiDCoGJvb2wgbWVzaF9jb25maWdfY29t cF9wYWdlX2FkZChzdHJ1Y3QgbWVzaF9jb25maWcgKmNmZywgdWludDhfdAo+IHBhZ2UsCj4gwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgdWludDhfdCAqZGF0YSwKPiB1aW50 MTZfdCBzaXplKTsKPiAtYm9vbCBtZXNoX2NvbmZpZ19jb21wX3BhZ2VfbXYoc3RydWN0IG1lc2hf Y29uZmlnICpjZmcsIHVpbnQ4X3Qgb2xkLAo+IHVpbnQ4X3QgbncpOwo+ICt2b2lkIG1lc2hfY29u ZmlnX2NvbXBfcGFnZV9kZWwoc3RydWN0IG1lc2hfY29uZmlnICpjZmcsIHVpbnQ4X3QKPiBwYWdl KTsKPiDCoGJvb2wgbWVzaF9jb25maWdfbW9kZWxfYmluZGluZ19hZGQoc3RydWN0IG1lc2hfY29u ZmlnICpjZmcsIHVpbnQxNl90Cj4gZWxlX2FkZHIsCj4gwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgdWludDMyX3QgbW9kX2lkLCBib29sCj4gdmVuZG9yLAo+IMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqB1aW50MTZfdAo+ IGFwcF9pZHgpOwo+IGRpZmYgLS1naXQgYS9tZXNoL21vZGVsLmMgYi9tZXNoL21vZGVsLmMKPiBp bmRleCBkNDhlNmVmMTIuLmUyYmFiZWExMCAxMDA2NDQKPiAtLS0gYS9tZXNoL21vZGVsLmMKPiAr KysgYi9tZXNoL21vZGVsLmMKPiBAQCAtMjQsNiArMjQsOCBAQAo+IMKgI2luY2x1ZGUgIm1lc2gv bmV0LmgiCj4gwqAjaW5jbHVkZSAibWVzaC9hcHBrZXkuaCIKPiDCoCNpbmNsdWRlICJtZXNoL2Nm Z21vZC5oIgo+ICsjaW5jbHVkZSAibWVzaC9wcm92LmgiCj4gKyNpbmNsdWRlICJtZXNoL3JlbXBy di5oIgo+IMKgI2luY2x1ZGUgIm1lc2gvZXJyb3IuaCIKPiDCoCNpbmNsdWRlICJtZXNoL2RidXMu aCIKPiDCoCNpbmNsdWRlICJtZXNoL3V0aWwuaCIKPiBAQCAtNzYsNiArNzgsOSBAQCBzdGF0aWMg Ym9vbCBpc19pbnRlcm5hbCh1aW50MzJfdCBpZCkKPiDCoMKgwqDCoMKgwqDCoMKgaWYgKGlkID09 IENPTkZJR19TUlZfTU9ERUwgfHwgaWQgPT0gQ09ORklHX0NMSV9NT0RFTCkKPiDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoHJldHVybiB0cnVlOwo+IMKgCj4gK8KgwqDCoMKgwqDCoMKg aWYgKGlkID09IFJFTV9QUk9WX1NSVl9NT0RFTCB8fCBpZCA9PSBSRU1fUFJPVl9DTElfTU9ERUwp Cj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoHJldHVybiB0cnVlOwo+ICsKPiDCoMKg wqDCoMKgwqDCoMKgcmV0dXJuIGZhbHNlOwo+IMKgfQo+IMKgCj4gQEAgLTQ1NywxMyArNDYyLDI1 IEBAIHN0YXRpYyBpbnQgZGV2X3BhY2tldF9kZWNyeXB0KHN0cnVjdCBtZXNoX25vZGUKPiAqbm9k ZSwgY29uc3QgdWludDhfdCAqZGF0YSwKPiDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoGRzdCwga2V5 X2FpZCwgc2VxLCBpdl9pZHgsCj4gb3V0LCBrZXkpKQo+IMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgcmV0dXJuIEFQUF9JRFhfREVWX0xPQ0FMOwo+IMKgCj4gLcKgwqDCoMKgwqDCoMKg aWYgKCFrZXlyaW5nX2dldF9yZW1vdGVfZGV2X2tleShub2RlLCBzcmMsIGRldl9rZXkpKQo+ICvC oMKgwqDCoMKgwqDCoGtleSA9IGRldl9rZXk7Cj4gKwo+ICvCoMKgwqDCoMKgwqDCoGlmIChrZXly aW5nX2dldF9yZW1vdGVfZGV2X2tleShub2RlLCBzcmMsIGRldl9rZXkpKSB7Cj4gK8KgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoGlmIChtZXNoX2NyeXB0b19wYXlsb2FkX2RlY3J5cHQoTlVM TCwgMCwgZGF0YSwgc2l6ZSwKPiBzem1pY3QsCj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgc3JjLCBkc3QsIGtleV9haWQsIHNl cSwgaXZfaWR4LCBvdXQsCj4ga2V5KSkKPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoHJldHVybiBBUFBfSURYX0RFVl9SRU1PVEU7Cj4gK8KgwqDCoMKgwqDC oMKgfQo+ICsKPiArwqDCoMKgwqDCoMKgwqAvKiBTZWUgaWYgdGhlcmUgaXMgYSBsb2NhbCBEZXZp Y2UgS2V5IENhbmRpZGF0ZSBhcyBsYXN0Cj4gcmVzb3J0ICovCj4gK8KgwqDCoMKgwqDCoMKgaWYg KCFub2RlX2dldF9kZXZpY2Vfa2V5X2NhbmRpZGF0ZShub2RlLCBkZXZfa2V5KSkKPiDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoHJldHVybiAtMTsKPiDCoAo+IC3CoMKgwqDCoMKgwqDC oGtleSA9IGRldl9rZXk7Cj4gLcKgwqDCoMKgwqDCoMKgaWYgKG1lc2hfY3J5cHRvX3BheWxvYWRf ZGVjcnlwdChOVUxMLCAwLCBkYXRhLCBzaXplLCBzem1pY3QsCj4gc3JjLAo+IC3CoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqBkc3QsIGtleV9haWQsIHNlcSwgaXZfaWR4LAo+IG91dCwga2V5KSkKPiAtwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgcmV0dXJuIEFQUF9JRFhfREVWX1JFTU9URTsKPiAr wqDCoMKgwqDCoMKgwqBpZiAobWVzaF9jcnlwdG9fcGF5bG9hZF9kZWNyeXB0KE5VTEwsIDAsIGRh dGEsIHNpemUsIHN6bWljdCwKPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBzcmMsIGRzdCwga2V5X2FpZCwgc2VxLCBpdl9pZHgs IG91dCwKPiBrZXkpKSB7Cj4gKwo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAvKiBJ ZiBjYW5kaWRhdGUgZGV2X2tleSB3b3JrZWQsIGl0IGlzIGNvbnNpZGVyZWQKPiBmaW5hbGl6ZWQg Ki8KPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgbm9kZV9maW5hbGl6ZV9jYW5kaWRh dGUobm9kZSk7Cj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoHJldHVybiBBUFBfSURY X0RFVl9MT0NBTDsKPiArwqDCoMKgwqDCoMKgwqB9Cj4gwqAKPiDCoMKgwqDCoMKgwqDCoMKgcmV0 dXJuIC0xOwo+IMKgfQo+IGRpZmYgLS1naXQgYS9tZXNoL25vZGUuYyBiL21lc2gvbm9kZS5jCj4g aW5kZXggY2Y0ZWQxNDBlLi41MTUwYTA4NWEgMTAwNjQ0Cj4gLS0tIGEvbWVzaC9ub2RlLmMKPiAr KysgYi9tZXNoL25vZGUuYwo+IEBAIC0yNyw5ICsyNywxMSBAQAo+IMKgI2luY2x1ZGUgIm1lc2gv YXBwa2V5LmgiCj4gwqAjaW5jbHVkZSAibWVzaC9tZXNoLWNvbmZpZy5oIgo+IMKgI2luY2x1ZGUg Im1lc2gvcHJvdmlzaW9uLmgiCj4gKyNpbmNsdWRlICJtZXNoL3Byb3YuaCIKPiDCoCNpbmNsdWRl ICJtZXNoL2tleXJpbmcuaCIKPiDCoCNpbmNsdWRlICJtZXNoL21vZGVsLmgiCj4gwqAjaW5jbHVk ZSAibWVzaC9jZmdtb2QuaCIKPiArI2luY2x1ZGUgIm1lc2gvcmVtcHJ2LmgiCj4gwqAjaW5jbHVk ZSAibWVzaC91dGlsLmgiCj4gwqAjaW5jbHVkZSAibWVzaC9lcnJvci5oIgo+IMKgI2luY2x1ZGUg Im1lc2gvZGJ1cy5oIgo+IEBAIC0zNDcsNiArMzQ5LDE1IEBAIHN0YXRpYyBib29sIGFkZF9lbGVt ZW50c19mcm9tX3N0b3JhZ2Uoc3RydWN0Cj4gbWVzaF9ub2RlICpub2RlLAo+IMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgaWYgKCFhZGRfZWxlbWVudF9mcm9tX3N0b3JhZ2Uobm9kZSwg ZW50cnktPmRhdGEpKQo+IMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoHJldHVybiBmYWxzZTsKPiDCoAo+ICvCoMKgwqDCoMKgwqDCoC8qIEFkZCBjb25maWd1 cmF0aW9uIHNlcnZlciBtb2RlbCBvbiB0aGUgcHJpbWFyeSBlbGVtZW50ICovCj4gK8KgwqDCoMKg wqDCoMKgbWVzaF9tb2RlbF9hZGQobm9kZSwgUFJJTUFSWV9FTEVfSURYLCBDT05GSUdfU1JWX01P REVMLAo+IE5VTEwpOwo+ICsKPiArwqDCoMKgwqDCoMKgwqAvKiBBZGQgcmVtb3RlIHByb3Zpc2lv bmluZyBtb2RlbHMgb24gdGhlIHByaW1hcnkgZWxlbWVudCAqLwo+ICvCoMKgwqDCoMKgwqDCoG1l c2hfbW9kZWxfYWRkKG5vZGUsIFBSSU1BUllfRUxFX0lEWCwgUkVNX1BST1ZfU1JWX01PREVMLAo+ IE5VTEwpOwo+ICsKPiArwqDCoMKgwqDCoMKgwqBpZiAobm9kZS0+cHJvdmlzaW9uZXIpCj4gK8Kg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoG1lc2hfbW9kZWxfYWRkKG5vZGUsIFBSSU1BUllf RUxFX0lEWCwKPiBSRU1fUFJPVl9DTElfTU9ERUwsIE5VTEwpOwo+ICsKPiDCoMKgwqDCoMKgwqDC oMKgcmV0dXJuIHRydWU7Cj4gwqB9Cj4gwqAKPiBAQCAtNDg5LDYgKzUwMCwxMCBAQCBzdGF0aWMg Ym9vbCBpbml0X2Zyb21fc3RvcmFnZShzdHJ1Y3QKPiBtZXNoX2NvbmZpZ19ub2RlICpkYl9ub2Rl LAo+IMKgwqDCoMKgwqDCoMKgwqAvKiBJbml0aWFsaXplIGNvbmZpZ3VyYXRpb24gc2VydmVyIG1v ZGVsICovCj4gwqDCoMKgwqDCoMKgwqDCoGNmZ21vZF9zZXJ2ZXJfaW5pdChub2RlLCBQUklNQVJZ X0VMRV9JRFgpOwo+IMKgCj4gK8KgwqDCoMKgwqDCoMKgLyogSW5pdGlhbGl6ZSByZW1vdGUgcHJv dmlzaW9uaW5nIG1vZGVscyAqLwo+ICvCoMKgwqDCoMKgwqDCoHJlbW90ZV9wcm92X3NlcnZlcl9p bml0KG5vZGUsIFBSSU1BUllfRUxFX0lEWCk7Cj4gK8KgwqDCoMKgwqDCoMKgcmVtb3RlX3Byb3Zf Y2xpZW50X2luaXQobm9kZSwgUFJJTUFSWV9FTEVfSURYKTsKPiArCj4gwqDCoMKgwqDCoMKgwqDC oG5vZGUtPmNmZyA9IGNmZzsKPiDCoAo+IMKgwqDCoMKgwqDCoMKgwqByZXR1cm4gdHJ1ZTsKPiBA QCAtNTUwLDEyICs1NjUsNzggQEAgdWludDE2X3Qgbm9kZV9nZXRfcHJpbWFyeShzdHJ1Y3QgbWVz aF9ub2RlCj4gKm5vZGUpCj4gwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqByZXR1cm4g bm9kZS0+cHJpbWFyeTsKPiDCoH0KPiDCoAo+ICtib29sIG5vZGVfcmVmcmVzaChzdHJ1Y3QgbWVz aF9ub2RlICpub2RlLCBib29sIGhhcmQsIHZvaWQKPiAqcHJvdl9pbmZvKQo+ICt7Cj4gK8KgwqDC oMKgwqDCoMKgc3RydWN0IG1lc2hfcHJvdl9ub2RlX2luZm8gKmluZm8gPSBwcm92X2luZm87Cj4g K8KgwqDCoMKgwqDCoMKgYm9vbCByZXMgPSB0cnVlOwo+ICsKPiArwqDCoMKgwqDCoMKgwqBpZiAo IW5vZGUgfHwgIWluZm8pCj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoHJldHVybiBm YWxzZTsKPiArCj4gK8KgwqDCoMKgwqDCoMKgaWYgKCFJU19VTklDQVNUKGluZm8tPnVuaWNhc3Qp KQo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqByZXR1cm4gZmFsc2U7Cj4gKwo+ICvC oMKgwqDCoMKgwqDCoC8qIENoYW5naW5nIFVuaWNhc3QgYWRkcmVzc2VzIHJlcXVpcmVzIGEgaGFy ZCBub2RlIHJlc2V0ICovCj4gK8KgwqDCoMKgwqDCoMKgaWYgKCFoYXJkICYmIGluZm8tPnVuaWNh c3QgIT0gbm9kZS0+cHJpbWFyeSkKPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgcmV0 dXJuIGZhbHNlOwo+ICsKPiArwqDCoMKgwqDCoMKgwqAvKgo+ICvCoMKgwqDCoMKgwqDCoCAqIEhh cmQgcmVmcmVzaCByZXN1bHRzIGluIGltbWVkaWF0ZSB1c2Ugb2YgbmV3IERldmljZSBLZXkuCj4g K8KgwqDCoMKgwqDCoMKgICogU29mdCByZWZyZXNoIHNhdmVzIG5ldyBkZXZpY2Uga2V5IGFzIENh bmRpZGF0ZSB1bnRpbCB3ZQo+ICvCoMKgwqDCoMKgwqDCoCAqIHN1Y2Nlc3NmdWxseSByZWNlaXZl IG5ldyBpbmNvbWluZyBtZXNzYWdlIG9uIHRoYXQga2V5Lgo+ICvCoMKgwqDCoMKgwqDCoCAqLwo+ ICvCoMKgwqDCoMKgwqDCoGlmIChoYXJkKSB7Cj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoGlmICghbWVzaF9jb25maWdfd3JpdGVfZGV2aWNlX2tleShub2RlLT5jZmcsIGluZm8tCj4g PmRldmljZV9rZXkpKQo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgcmV0dXJuIGZhbHNlOwo+ICsKPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg bWVtY3B5KG5vZGUtPmRldl9rZXksIGluZm8tPmRldmljZV9rZXksIHNpemVvZihub2RlLQo+ID5k ZXZfa2V5KSk7Cj4gKwo+ICvCoMKgwqDCoMKgwqDCoH0gZWxzZSBpZiAoIW1lc2hfY29uZmlnX3dy aXRlX2NhbmRpZGF0ZShub2RlLT5jZmcsIGluZm8tCj4gPmRldmljZV9rZXkpKQo+ICvCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqByZXR1cm4gZmFsc2U7Cj4gKwo+ICvCoMKgwqDCoMKgwqDC oC8qIFJlcGxhY2UgUHJpbWFyeSBVbmljYXN0IGFkZHJlc3MgaWYgaXQgaGFzIGNoYW5nZWQgKi8K PiArwqDCoMKgwqDCoMKgwqBpZiAobm9kZS0+cHJpbWFyeSAhPSBpbmZvLT51bmljYXN0KSB7Cj4g K8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoHJlcyA9IG1lc2hfY29uZmlnX3dyaXRlX3Vu aWNhc3Qobm9kZS0+Y2ZnLCBpbmZvLQo+ID51bmljYXN0KTsKPiArwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgaWYgKHJlcykgewo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgbm9kZS0+cHJpbWFyeSA9IGluZm8tPnVuaWNhc3Q7Cj4gK8KgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBub2RlLT5udW1fZWxlID0gaW5m by0+bnVtX2VsZTsKPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoG1lc2hfbmV0X3JlZ2lzdGVyX3VuaWNhc3Qobm9kZS0+bmV0LCBub2RlLQo+ID5wcmltYXJ5 LAo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqBub2RlLQo+ID5udW1fZWxlKTsKPiArwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgfQo+ICvCoMKgwqDCoMKgwqDCoH0KPiArCj4gK8KgwqDCoMKgwqDCoMKgLyog UmVwbGFjZSBQYWdlIDAgd2l0aCBQYWdlIDEyOCBpZiBpdCBleGlzdHMgKi8KPiArwqDCoMKgwqDC oMKgwqBpZiAocmVzKSB7Cj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoGlmIChub2Rl X3JlcGxhY2VfY29tcChub2RlLCAwLCAxMjgpKQo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgcmV0dXJuIHRydWU7Cj4gK8KgwqDCoMKgwqDCoMKgfQo+ICsK PiArwqDCoMKgwqDCoMKgwqByZXR1cm4gcmVzOwo+ICt9Cj4gKwo+IMKgY29uc3QgdWludDhfdCAq bm9kZV9nZXRfZGV2aWNlX2tleShzdHJ1Y3QgbWVzaF9ub2RlICpub2RlKQo+IMKgewo+IMKgwqDC oMKgwqDCoMKgwqBpZiAoIW5vZGUpCj4gwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBy ZXR1cm4gTlVMTDsKPiAtwqDCoMKgwqDCoMKgwqBlbHNlCj4gLcKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoHJldHVybiBub2RlLT5kZXZfa2V5Owo+ICsKPiArwqDCoMKgwqDCoMKgwqByZXR1 cm4gbm9kZS0+ZGV2X2tleTsKPiArfQo+ICsKPiArYm9vbCBub2RlX2dldF9kZXZpY2Vfa2V5X2Nh bmRpZGF0ZShzdHJ1Y3QgbWVzaF9ub2RlICpub2RlLCB1aW50OF90Cj4gKmtleSkKPiArewo+ICvC oMKgwqDCoMKgwqDCoGlmICghbm9kZSkKPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg cmV0dXJuIGZhbHNlOwo+ICsKPiArwqDCoMKgwqDCoMKgwqByZXR1cm4gbWVzaF9jb25maWdfcmVh ZF9jYW5kaWRhdGUobm9kZS0+Y2ZnLCBrZXkpOwo+ICt9Cj4gKwo+ICt2b2lkIG5vZGVfZmluYWxp emVfY2FuZGlkYXRlKHN0cnVjdCBtZXNoX25vZGUgKm5vZGUpCj4gK3sKPiArwqDCoMKgwqDCoMKg wqBpZiAoIW5vZGUpCj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoHJldHVybjsKPiAr Cj4gK8KgwqDCoMKgwqDCoMKgaWYgKG1lc2hfY29uZmlnX3JlYWRfY2FuZGlkYXRlKG5vZGUtPmNm Zywgbm9kZS0+ZGV2X2tleSkpCj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoG1lc2hf Y29uZmlnX2ZpbmFsaXplX2NhbmRpZGF0ZShub2RlLT5jZmcpOwo+IMKgfQo+IMKgCj4gwqB2b2lk IG5vZGVfc2V0X3Rva2VuKHN0cnVjdCBtZXNoX25vZGUgKm5vZGUsIHVpbnQ4X3QgdG9rZW5bOF0p Cj4gQEAgLTc4NSw3ICs4NjYsNyBAQCB1aW50OF90IG5vZGVfZnJpZW5kX21vZGVfZ2V0KHN0cnVj dCBtZXNoX25vZGUKPiAqbm9kZSkKPiDCoMKgwqDCoMKgwqDCoMKgcmV0dXJuIG5vZGUtPmZyaWVu ZDsKPiDCoH0KPiDCoAo+IC1zdGF0aWMgdWludDE2X3QgZ2VuZXJhdGVfbm9kZV9jb21wKHN0cnVj dCBtZXNoX25vZGUgKm5vZGUsIHVpbnQ4X3QKPiAqYnVmLAo+ICtzdGF0aWMgdWludDE2X3Qgbm9k ZV9nZW5lcmF0ZV9jb21wKHN0cnVjdCBtZXNoX25vZGUgKm5vZGUsIHVpbnQ4X3QKPiAqYnVmLAo+ IMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgdWludDEKPiA2X3Qgc3opCj4gwqB7Cj4gwqDCoMKgwqDCoMKgwqDCoHVp bnQxNl90IG4sIGZlYXR1cmVzLCBudW1fZWxlID0gMDsKPiBAQCAtODk1LDYgKzk3NiwyMSBAQCBz dGF0aWMgdm9pZCBjb252ZXJ0X25vZGVfdG9fc3RvcmFnZShzdHJ1Y3QKPiBtZXNoX25vZGUgKm5v ZGUsCj4gwqAKPiDCoH0KPiDCoAo+ICtzdGF0aWMgdm9pZCBmcmVlX2RiX3N0b3JhZ2Uoc3RydWN0 IG1lc2hfY29uZmlnX25vZGUgKmRiX25vZGUpCj4gK3sKPiArwqDCoMKgwqDCoMKgwqBjb25zdCBz dHJ1Y3QgbF9xdWV1ZV9lbnRyeSAqZW50cnk7Cj4gKwo+ICvCoMKgwqDCoMKgwqDCoC8qIEZyZWUg dGVtcG9yYXJpbHkgYWxsb2NhdGVkIHJlc291cmNlcyAqLwo+ICvCoMKgwqDCoMKgwqDCoGVudHJ5 ID0gbF9xdWV1ZV9nZXRfZW50cmllcyhkYl9ub2RlLT5lbGVtZW50cyk7Cj4gK8KgwqDCoMKgwqDC oMKgZm9yICg7IGVudHJ5OyBlbnRyeSA9IGVudHJ5LT5uZXh0KSB7Cj4gK8KgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoHN0cnVjdCBtZXNoX2NvbmZpZ19lbGVtZW50ICpkYl9lbGUgPSBlbnRy eS0+ZGF0YTsKPiArCj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoGxfcXVldWVfZGVz dHJveShkYl9lbGUtPm1vZGVscywgbF9mcmVlKTsKPiArwqDCoMKgwqDCoMKgwqB9Cj4gKwo+ICvC oMKgwqDCoMKgwqDCoGxfcXVldWVfZGVzdHJveShkYl9ub2RlLT5lbGVtZW50cywgbF9mcmVlKTsK PiArfQo+ICsKPiDCoHN0YXRpYyBib29sIGNyZWF0ZV9ub2RlX2NvbmZpZyhzdHJ1Y3QgbWVzaF9u b2RlICpub2RlLCBjb25zdCB1aW50OF90Cj4gdXVpZFsxNl0pCj4gwqB7Cj4gwqDCoMKgwqDCoMKg wqDCoHN0cnVjdCBtZXNoX2NvbmZpZ19ub2RlIGRiX25vZGU7Cj4gQEAgLTkyMiw3ICsxMDE4LDIy IEBAIHN0YXRpYyBib29sIGNyZWF0ZV9ub2RlX2NvbmZpZyhzdHJ1Y3QgbWVzaF9ub2RlCj4gKm5v ZGUsIGNvbnN0IHVpbnQ4X3QgdXVpZFsxNl0pCj4gwqDCoMKgwqDCoMKgwqDCoHJldHVybiBub2Rl LT5jZmcgIT0gTlVMTDsKPiDCoH0KPiDCoAo+IC1zdGF0aWMgYm9vbCBzZXRfbm9kZV9jb21wKHN0 cnVjdCBtZXNoX25vZGUgKm5vZGUsIHVpbnQ4X3QgcGFnZV9udW0sCj4gK3N0YXRpYyB2b2lkIG5v ZGVfZGVsX2NvbXAoc3RydWN0IG1lc2hfbm9kZSAqbm9kZSwgdWludDhfdCBwYWdlX251bSkKPiAr ewo+ICvCoMKgwqDCoMKgwqDCoHN0cnVjdCBtZXNoX2NvbmZpZ19jb21wX3BhZ2UgKnBhZ2U7Cj4g Kwo+ICvCoMKgwqDCoMKgwqDCoGlmICghbm9kZSkKPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgcmV0dXJuOwo+ICsKPiArwqDCoMKgwqDCoMKgwqBwYWdlID0gbF9xdWV1ZV9yZW1vdmVf aWYobm9kZS0+cGFnZXMsIG1hdGNoX3BhZ2UsCj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqBMX1VJTlRfVE9fUFRSKHBhZ2VfbnUKPiBtKSk7Cj4gKwo+ICvCoMKgwqDCoMKg wqDCoGxfZnJlZShwYWdlKTsKPiArCj4gK8KgwqDCoMKgwqDCoMKgbWVzaF9jb25maWdfY29tcF9w YWdlX2RlbChub2RlLT5jZmcsIHBhZ2VfbnVtKTsKPiArfQo+ICsKPiArc3RhdGljIGJvb2wgbm9k ZV9zZXRfY29tcChzdHJ1Y3QgbWVzaF9ub2RlICpub2RlLCB1aW50OF90IHBhZ2VfbnVtLAo+IMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgY29uc3QgdWludDhfdCAqZGF0YSwgdWludDE2X3QKPiBsZW4p Cj4gwqB7Cj4gwqDCoMKgwqDCoMKgwqDCoHN0cnVjdCBtZXNoX2NvbmZpZ19jb21wX3BhZ2UgKnBh Z2U7Cj4gQEAgLTk0NCwxNiArMTA1NSw2IEBAIHN0YXRpYyBib29sIHNldF9ub2RlX2NvbXAoc3Ry dWN0IG1lc2hfbm9kZQo+ICpub2RlLCB1aW50OF90IHBhZ2VfbnVtLAo+IMKgwqDCoMKgwqDCoMKg wqByZXR1cm4gbWVzaF9jb25maWdfY29tcF9wYWdlX2FkZChub2RlLT5jZmcsIHBhZ2VfbnVtLCBw YWdlLQo+ID5kYXRhLCBsZW4pOwo+IMKgfQo+IMKgCj4gLXN0YXRpYyBib29sIGNyZWF0ZV9ub2Rl X2NvbXAoc3RydWN0IG1lc2hfbm9kZSAqbm9kZSkKPiAtewo+IC3CoMKgwqDCoMKgwqDCoHVpbnQx Nl90IGxlbjsKPiAtwqDCoMKgwqDCoMKgwqB1aW50OF90IGNvbXBbTUFYX01TR19MRU4gLSAyXTsK PiAtCj4gLcKgwqDCoMKgwqDCoMKgbGVuID0gZ2VuZXJhdGVfbm9kZV9jb21wKG5vZGUsIGNvbXAs IHNpemVvZihjb21wKSk7Cj4gLQo+IC3CoMKgwqDCoMKgwqDCoHJldHVybiBzZXRfbm9kZV9jb21w KG5vZGUsIDAsIGNvbXAsIGxlbik7Cj4gLX0KPiAtCj4gwqBjb25zdCB1aW50OF90ICpub2RlX2dl dF9jb21wKHN0cnVjdCBtZXNoX25vZGUgKm5vZGUsIHVpbnQ4X3QKPiBwYWdlX251bSwKPiDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoHVpbnQxCj4gNl90ICpsZW4pCj4gwqB7Cj4gQEAgLTk3NSw2ICsxMDc2LDcgQEAg Y29uc3QgdWludDhfdCAqbm9kZV9nZXRfY29tcChzdHJ1Y3QgbWVzaF9ub2RlCj4gKm5vZGUsIHVp bnQ4X3QgcGFnZV9udW0sCj4gwqBib29sIG5vZGVfcmVwbGFjZV9jb21wKHN0cnVjdCBtZXNoX25v ZGUgKm5vZGUsIHVpbnQ4X3QgcmV0aXJlLAo+IHVpbnQ4X3Qgd2l0aCkKPiDCoHsKPiDCoMKgwqDC oMKgwqDCoMKgc3RydWN0IG1lc2hfY29uZmlnX2NvbXBfcGFnZSAqb2xkX3BhZ2UsICprZWVwOwo+ ICvCoMKgwqDCoMKgwqDCoGJvb2wgc3RhdHVzOwo+IMKgCj4gwqDCoMKgwqDCoMKgwqDCoGlmICgh bm9kZSkKPiDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoHJldHVybiBmYWxzZTsKPiBA QCAtOTg5LDkgKzEwOTEsMTMgQEAgYm9vbCBub2RlX3JlcGxhY2VfY29tcChzdHJ1Y3QgbWVzaF9u b2RlICpub2RlLAo+IHVpbnQ4X3QgcmV0aXJlLCB1aW50OF90IHdpdGgpCj4gwqAKPiDCoMKgwqDC oMKgwqDCoMKgbF9mcmVlKG9sZF9wYWdlKTsKPiDCoMKgwqDCoMKgwqDCoMKga2VlcC0+cGFnZV9u dW0gPSByZXRpcmU7Cj4gLcKgwqDCoMKgwqDCoMKgbWVzaF9jb25maWdfY29tcF9wYWdlX212KG5v ZGUtPmNmZywgd2l0aCwgcmV0aXJlKTsKPiArwqDCoMKgwqDCoMKgwqBzdGF0dXMgPSBtZXNoX2Nv bmZpZ19jb21wX3BhZ2VfYWRkKG5vZGUtPmNmZywga2VlcC0+cGFnZV9udW0sCj4gK8KgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKga2VlcC0+ZGF0YSwK PiBrZWVwLT5sZW4pOwo+IMKgCj4gLcKgwqDCoMKgwqDCoMKgcmV0dXJuIHRydWU7Cj4gK8KgwqDC oMKgwqDCoMKgaWYgKHdpdGggIT0gcmV0aXJlKQo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqBtZXNoX2NvbmZpZ19jb21wX3BhZ2VfZGVsKG5vZGUtPmNmZywgd2l0aCk7Cj4gKwo+ICvC oMKgwqDCoMKgwqDCoHJldHVybiBzdGF0dXM7Cj4gwqB9Cj4gwqAKPiDCoHN0YXRpYyB2b2lkIGF0 dGFjaF9pbyh2b2lkICphLCB2b2lkICpiKQo+IEBAIC0xMTcwLDggKzEyNzYsMTMgQEAgc3RhdGlj IGJvb2wgZ2V0X2VsZW1lbnRfcHJvcGVydGllcyhzdHJ1Y3QKPiBtZXNoX25vZGUgKm5vZGUsIGNv bnN0IGNoYXIgKnBhdGgsCj4gwqDCoMKgwqDCoMKgwqDCoCAqIGRhZW1vbi4gSWYgdGhlIG1vZGVs IGlzIHByZXNlbnQgaW4gdGhlIGFwcGxpY2F0aW9uCj4gcHJvcGVydGllcywKPiDCoMKgwqDCoMKg wqDCoMKgICogdGhlIG9wZXJhdGlvbiBiZWxvdyB3aWxsIGJlIGEgIm5vLW9wIi4KPiDCoMKgwqDC oMKgwqDCoMKgICovCj4gLcKgwqDCoMKgwqDCoMKgaWYgKGVsZS0+aWR4ID09IFBSSU1BUllfRUxF X0lEWCkKPiArwqDCoMKgwqDCoMKgwqBpZiAoZWxlLT5pZHggPT0gUFJJTUFSWV9FTEVfSURYKSB7 Cj4gwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBtZXNoX21vZGVsX2FkZChub2RlLCBl bGUtPm1vZGVscywgQ09ORklHX1NSVl9NT0RFTCwKPiBOVUxMKTsKPiArwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgbWVzaF9tb2RlbF9hZGQobm9kZSwgZWxlLT5tb2RlbHMsIFJFTV9QUk9W X1NSVl9NT0RFTCwKPiBOVUxMKTsKPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgaWYg KG5vZGUtPnByb3Zpc2lvbmVyKQo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgbWVzaF9tb2RlbF9hZGQobm9kZSwgZWxlLT5tb2RlbHMsCj4gUkVNX1BST1Zf Q0xJX01PREVMLAo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgCj4gwqDCoMKgTlVMTCk7Cj4gK8Kg wqDCoMKgwqDCoMKgfQo+IMKgCj4gwqDCoMKgwqDCoMKgwqDCoHJldHVybiB0cnVlOwo+IMKgZmFp bDoKPiBAQCAtMTIzMiw2ICsxMzQzLDE1IEBAIHN0YXRpYyBib29sIGdldF9hcHBfcHJvcGVydGll cyhzdHJ1Y3QKPiBtZXNoX25vZGUgKm5vZGUsIGNvbnN0IGNoYXIgKnBhdGgsCj4gwqDCoMKgwqDC oMKgwqDCoHJldHVybiB0cnVlOwo+IMKgfQo+IMKgCj4gK3N0YXRpYyB2b2lkIHNhdmVfcGFnZXMo dm9pZCAqZGF0YSwgdm9pZCAqdXNlcl9kYXRhKQo+ICt7Cj4gK8KgwqDCoMKgwqDCoMKgc3RydWN0 IG1lc2hfY29uZmlnX2NvbXBfcGFnZSAqcGFnZSA9IGRhdGE7Cj4gK8KgwqDCoMKgwqDCoMKgc3Ry dWN0IG1lc2hfbm9kZSAqbm9kZSA9IHVzZXJfZGF0YTsKPiArCj4gK8KgwqDCoMKgwqDCoMKgbWVz aF9jb25maWdfY29tcF9wYWdlX2FkZChub2RlLT5jZmcsIHBhZ2UtPnBhZ2VfbnVtLCBwYWdlLQo+ ID5kYXRhLAo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBwYWdlLQo+ID5sZW4pOwo+ICt9Cj4gKwo+IMKgc3RhdGlj IGJvb2wgYWRkX2xvY2FsX25vZGUoc3RydWN0IG1lc2hfbm9kZSAqbm9kZSwgdWludDE2X3QgdW5p Y2FzdCwKPiBib29sIGtyLAo+IMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBib29sIGl2dSwgdWludDMyX3QgaXZfaWR4LCB1aW50 OF90Cj4gZGV2X2tleVsxNl0sCj4gwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoHVpbnQxNl90IG5ldF9rZXlfaWR4LCB1aW50OF90 Cj4gbmV0X2tleVsxNl0pCj4gQEAgLTEyNzUsMTAgKzEzOTUsMTQgQEAgc3RhdGljIGJvb2wgYWRk X2xvY2FsX25vZGUoc3RydWN0IG1lc2hfbm9kZQo+ICpub2RlLCB1aW50MTZfdCB1bmljYXN0LCBi b29sIGtyLAo+IMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oHJldHVybiBmYWxzZTsKPiDCoMKgwqDCoMKgwqDCoMKgfQo+IMKgCj4gK8KgwqDCoMKgwqDCoMKg bF9xdWV1ZV9mb3JlYWNoKG5vZGUtPnBhZ2VzLCBzYXZlX3BhZ2VzLCBub2RlKTsKPiArCj4gwqDC oMKgwqDCoMKgwqDCoHVwZGF0ZV9uZXRfc2V0dGluZ3Mobm9kZSk7Cj4gwqAKPiAtwqDCoMKgwqDC oMKgwqAvKiBJbml0aWFsaXplIGNvbmZpZ3VyYXRpb24gc2VydmVyIG1vZGVsICovCj4gK8KgwqDC oMKgwqDCoMKgLyogSW5pdGlhbGl6ZSBpbnRlcm5hbCBzZXJ2ZXIgbW9kZWxzICovCj4gwqDCoMKg wqDCoMKgwqDCoGNmZ21vZF9zZXJ2ZXJfaW5pdChub2RlLCBQUklNQVJZX0VMRV9JRFgpOwo+ICvC oMKgwqDCoMKgwqDCoHJlbW90ZV9wcm92X3NlcnZlcl9pbml0KG5vZGUsIFBSSU1BUllfRUxFX0lE WCk7Cj4gK8KgwqDCoMKgwqDCoMKgcmVtb3RlX3Byb3ZfY2xpZW50X2luaXQobm9kZSwgUFJJTUFS WV9FTEVfSURYKTsKPiDCoAo+IMKgwqDCoMKgwqDCoMKgwqBub2RlLT5idXN5ID0gdHJ1ZTsKPiDC oAo+IEBAIC0xMzI2LDM5ICsxNDUwLDU5IEBAIHN0YXRpYyB2b2lkIHVwZGF0ZV9tb2RlbF9vcHRp b25zKHN0cnVjdAo+IG1lc2hfbm9kZSAqbm9kZSwKPiDCoAo+IMKgc3RhdGljIGJvb2wgY2hlY2tf cmVxX25vZGUoc3RydWN0IG1hbmFnZWRfb2JqX3JlcXVlc3QgKnJlcSkKPiDCoHsKPiArwqDCoMKg wqDCoMKgwqBzdHJ1Y3QgbWVzaF9ub2RlICpub2RlOwo+IMKgwqDCoMKgwqDCoMKgwqBjb25zdCBp bnQgb2Zmc2V0ID0gODsKPiDCoMKgwqDCoMKgwqDCoMKgdWludDE2X3Qgbm9kZV9sZW4sIGxlbjsK PiDCoMKgwqDCoMKgwqDCoMKgdWludDhfdCBjb21wW01BWF9NU0dfTEVOIC0gMl07Cj4gwqDCoMKg wqDCoMKgwqDCoGNvbnN0IHVpbnQ4X3QgKm5vZGVfY29tcDsKPiDCoAo+IC3CoMKgwqDCoMKgwqDC oGxlbiA9IGdlbmVyYXRlX25vZGVfY29tcChyZXEtPm5vZGUsIGNvbXAsIHNpemVvZihjb21wKSk7 Cj4gK8KgwqDCoMKgwqDCoMKgaWYgKHJlcS0+dHlwZSAhPSBSRVFVRVNUX1RZUEVfQVRUQUNIKSB7 Cj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoG5vZGUgPSByZXEtPm5vZGU7Cj4gwqAK PiAtwqDCoMKgwqDCoMKgwqBpZiAobGVuIDwgTUlOX0NPTVBfU0laRSkKPiAtwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgcmV0dXJuIGZhbHNlOwo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqBpZiAoIWNyZWF0ZV9ub2RlX2NvbmZpZyhub2RlLCBub2RlLT51dWlkKSkKPiArwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoHJldHVybiBmYWxzZTsK PiArwqDCoMKgwqDCoMKgwqB9IGVsc2UKPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg bm9kZSA9IHJlcS0+YXR0YWNoOwo+IMKgCj4gLcKgwqDCoMKgwqDCoMKgbm9kZV9jb21wID0gbm9k ZV9nZXRfY29tcChyZXEtPmF0dGFjaCwgMCwgJm5vZGVfbGVuKTsKPiArwqDCoMKgwqDCoMKgwqBu b2RlX2NvbXAgPSBub2RlX2dldF9jb21wKG5vZGUsIDAsICZub2RlX2xlbik7Cj4gK8KgwqDCoMKg wqDCoMKgbGVuID0gbm9kZV9nZW5lcmF0ZV9jb21wKHJlcS0+bm9kZSwgY29tcCwgc2l6ZW9mKGNv bXApKTsKPiDCoAo+IC3CoMKgwqDCoMKgwqDCoC8qIElmIG5vIHBhZ2UgMCBleGlzdHMsIGNyZWF0 ZSBpdCBhbmQgYWNjZXB0ICovCj4gLcKgwqDCoMKgwqDCoMKgaWYgKCFub2RlX2xlbiB8fCAhbm9k ZV9jb21wKQo+IC3CoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqByZXR1cm4gc2V0X25vZGVf Y29tcChyZXEtPmF0dGFjaCwgMCwgY29tcCwgbGVuKTsKPiArwqDCoMKgwqDCoMKgwqAvKiBJZiBu byBwYWdlIDAgZXhpc3RzLCB0aGVuIGN1cnJlbnQgY29tcG9zaXRpb24gYXMgdmFsaWQgKi8KPiAr wqDCoMKgwqDCoMKgwqBpZiAocmVxLT50eXBlICE9IFJFUVVFU1RfVFlQRV9BVFRBQ0ggfHwgIW5v ZGVfbGVuKQo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBnb3RvIHBhZ2VfemVyb192 YWxpZDsKPiDCoAo+IC3CoMKgwqDCoMKgwqDCoC8qIFRlc3QgRWxlbWVudC9Nb2RlbCBwYXJ0IG9m IGNvbXBvc2l0aW9uIGFuZCByZWplY3QgaWYKPiBjaGFuZ2VkICovCj4gK8KgwqDCoMKgwqDCoMKg LyoKPiArwqDCoMKgwqDCoMKgwqAgKiBJZiBjb21wb3NpdGlvbiBoYXMgbWF0ZXJpYWxseSBjaGFu Z2VkLCBzYXZlIG5ldwo+IGNvbXBvc2l0aW9uCj4gK8KgwqDCoMKgwqDCoMKgICogaW4gcGFnZSAx MjggdW50aWwgbmV4dCBOUFBJIHByb2NlZHVyZS4gQnV0IHdlIGRvIGFsbG93Cj4gK8KgwqDCoMKg wqDCoMKgICogZm9yIENJRCwgUElELCBWSUQgYW5kL29yIENSUEwgdG8gZnJlZWx5IGNoYW5nZSB3 aXRob3V0Cj4gK8KgwqDCoMKgwqDCoMKgICogcmVxdWlyaW5nIGEgTlBQSSBwcm9jZWR1cmUuCj4g K8KgwqDCoMKgwqDCoMKgICovCj4gwqDCoMKgwqDCoMKgwqDCoGlmIChub2RlX2xlbiAhPSBsZW4g fHwgbWVtY21wKCZub2RlX2NvbXBbb2Zmc2V0XSwKPiAmY29tcFtvZmZzZXRdLAo+IMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBub2RlX2xlbiAt Cj4gb2Zmc2V0KSkKPiAtwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgcmV0dXJuIGZhbHNl Owo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqByZXR1cm4gbm9kZV9zZXRfY29tcChu b2RlLCAxMjgsIGNvbXAsIGxlbik7Cj4gwqAKPiAtwqDCoMKgwqDCoMKgwqAvKiBJZiBjb21wIGhh cyBjaGFuZ2VkLCBidXQgbm90IEVsZW1lbnQvTW9kZWxzLCByZXNhdmUgYW5kCj4gYWNjZXB0ICov Cj4gLcKgwqDCoMKgwqDCoMKgZWxzZSBpZiAobWVtY21wKG5vZGVfY29tcCwgY29tcCwgbm9kZV9s ZW4pKQo+IC3CoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqByZXR1cm4gc2V0X25vZGVfY29t cChyZXEtPmF0dGFjaCwgMCwgY29tcCwgbGVuKTsKPiArcGFnZV96ZXJvX3ZhbGlkOgo+ICvCoMKg wqDCoMKgwqDCoC8qIElmIHBhZ2UgMCByZXByZXNlbnRzIGN1cnJlbnQgQXBwLCBlbnN1cmUgcGFn ZSAxMjggZG9lc24ndAo+IGV4aXN0ICovCj4gK8KgwqDCoMKgwqDCoMKgbm9kZV9kZWxfY29tcChu b2RlLCAxMjgpOwo+IMKgCj4gLcKgwqDCoMKgwqDCoMKgLyogTm90aGluZyBoYXMgY2hhbmdlZCAq Lwo+IC3CoMKgwqDCoMKgwqDCoHJldHVybiB0cnVlOwo+ICvCoMKgwqDCoMKgwqDCoGlmIChsZW4g PT0gbm9kZV9sZW4gJiYgIW1lbWNtcChub2RlX2NvbXAsIGNvbXAsIGxlbikpCj4gK8KgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoHJldHVybiB0cnVlOwo+ICsKPiArwqDCoMKgwqDCoMKgwqBy ZXR1cm4gbm9kZV9zZXRfY29tcChub2RlLCAwLCBjb21wLCBsZW4pOwo+ICt9Cj4gKwo+ICtzdGF0 aWMgYm9vbCBpc196ZXJvKGNvbnN0IHZvaWQgKmEsIGNvbnN0IHZvaWQgKmIpCj4gK3sKPiArwqDC oMKgwqDCoMKgwqBjb25zdCBzdHJ1Y3Qgbm9kZV9lbGVtZW50ICplbGVtZW50ID0gYTsKPiArCj4g K8KgwqDCoMKgwqDCoMKgcmV0dXJuICFlbGVtZW50LT5pZHg7Cj4gwqB9Cj4gwqAKPiDCoHN0YXRp YyBib29sIGF0dGFjaF9yZXFfbm9kZShzdHJ1Y3QgbWVzaF9ub2RlICphdHRhY2gsIHN0cnVjdAo+ IG1lc2hfbm9kZSAqbm9kZSkKPiDCoHsKPiDCoMKgwqDCoMKgwqDCoMKgY29uc3Qgc3RydWN0IGxf cXVldWVfZW50cnkgKmF0dGFjaF9lbnRyeTsKPiDCoMKgwqDCoMKgwqDCoMKgY29uc3Qgc3RydWN0 IGxfcXVldWVfZW50cnkgKm5vZGVfZW50cnk7Cj4gK8KgwqDCoMKgwqDCoMKgYm9vbCBjb21wX2No YW5nZWQgPSBmYWxzZTsKPiDCoAo+IMKgwqDCoMKgwqDCoMKgwqBhdHRhY2gtPm9ial9wYXRoID0g bm9kZS0+b2JqX3BhdGg7Cj4gwqDCoMKgwqDCoMKgwqDCoG5vZGUtPm9ial9wYXRoID0gTlVMTDsK PiBAQCAtMTM2OCw2ICsxNTEyLDM0IEBAIHN0YXRpYyBib29sIGF0dGFjaF9yZXFfbm9kZShzdHJ1 Y3QgbWVzaF9ub2RlCj4gKmF0dGFjaCwgc3RydWN0IG1lc2hfbm9kZSAqbm9kZSkKPiDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoHJldHVybiBmYWxzZTsKPiDCoMKgwqDCoMKgwqDCoMKg fQo+IMKgCj4gK8KgwqDCoMKgwqDCoMKgaWYgKGF0dGFjaC0+bnVtX2VsZSAhPSBub2RlLT5udW1f ZWxlKSB7Cj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoHN0cnVjdCBtZXNoX2NvbmZp Z19ub2RlIGRiX25vZGU7Cj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoHN0cnVjdCBu b2RlX2VsZW1lbnQgKm9sZF9lbGUsICpuZXdfZWxlOwo+ICsKPiArwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgY29udmVydF9ub2RlX3RvX3N0b3JhZ2Uobm9kZSwgJmRiX25vZGUpOwo+ICsK PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgLyoKPiArwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgICogSWYgY29tcG9zaXRpb24gaGFzIG1hdGVyaWFsbHkgY2hhbmdlZCwgd2Ug bmVlZCB0bwo+IGRpc2NhcmQKPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgICogZXZl cnl0aGluZyB3ZSBrbmV3IGFib3V0IGVsZW1lbnRzIGluIHRoZSBvbGQKPiBhcHBsaWNhdGlvbiwK PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgICogYW5kIHN0YXJ0IGZyb20gd2hhdCB0 aGV5IGFyZSB0ZWxsaW5nIHVzIG5vdy4KPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg ICovCj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoG9sZF9lbGUgPSBsX3F1ZXVlX3Jl bW92ZV9pZihhdHRhY2gtPmVsZW1lbnRzLAo+IGlzX3plcm8sIE5VTEwpOwo+ICvCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqBuZXdfZWxlID0gbF9xdWV1ZV9yZW1vdmVfaWYobm9kZS0+ZWxl bWVudHMsIGlzX3plcm8sCj4gTlVMTCk7Cj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oGVsZW1lbnRfZnJlZShuZXdfZWxlKTsKPiArCj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoGxfcXVldWVfZGVzdHJveShhdHRhY2gtPmVsZW1lbnRzLCBlbGVtZW50X2ZyZWUpOwo+ICvC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBhdHRhY2gtPmVsZW1lbnRzID0gbm9kZS0+ZWxl bWVudHM7Cj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoGF0dGFjaC0+bnVtX2VsZSA9 IG5vZGUtPm51bV9lbGU7Cj4gKwo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAvKiBS ZXN0b3JlIHByaW1hcnkgZWxlbWVudHMgKi8KPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgbF9xdWV1ZV9wdXNoX2hlYWQoYXR0YWNoLT5lbGVtZW50cywgb2xkX2VsZSk7Cj4gKwo+ICvC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBjb21wX2NoYW5nZWQgPSB0cnVlOwo+ICsKPiAr wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgbWVzaF9jb25maWdfcmVzZXQoYXR0YWNoLT5j ZmcsICZkYl9ub2RlKTsKPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgZnJlZV9kYl9z dG9yYWdlKCZkYl9ub2RlKTsKPiArwqDCoMKgwqDCoMKgwqB9Cj4gKwo+IMKgwqDCoMKgwqDCoMKg wqBhdHRhY2hfZW50cnkgPSBsX3F1ZXVlX2dldF9lbnRyaWVzKGF0dGFjaC0+ZWxlbWVudHMpOwo+ IMKgwqDCoMKgwqDCoMKgwqBub2RlX2VudHJ5ID0gbF9xdWV1ZV9nZXRfZW50cmllcyhub2RlLT5l bGVtZW50cyk7Cj4gwqAKPiBAQCAtMTM4NCw2ICsxNTU2LDEwIEBAIHN0YXRpYyBib29sIGF0dGFj aF9yZXFfbm9kZShzdHJ1Y3QgbWVzaF9ub2RlCj4gKmF0dGFjaCwgc3RydWN0IG1lc2hfbm9kZSAq bm9kZSkKPiDCoAo+IMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgYXR0YWNoX2VudHJ5 ID0gYXR0YWNoX2VudHJ5LT5uZXh0Owo+IMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg bm9kZV9lbnRyeSA9IG5vZGVfZW50cnktPm5leHQ7Cj4gKwo+ICvCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqAvKiBPbmx5IG5lZWQgdGhlIFByaW1hcnkgZWxlbWVudCBkdXJpbmcgQ29tcG9z aXRpb24KPiBjaGFuZ2UgKi8KPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgaWYgKGNv bXBfY2hhbmdlZCkKPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoGJyZWFrOwo+IMKgwqDCoMKgwqDCoMKgwqB9Cj4gwqAKPiDCoMKgwqDCoMKgwqDCoMKgbWVz aF9hZ2VudF9yZW1vdmUoYXR0YWNoLT5hZ2VudCk7Cj4gQEAgLTEzOTksOCArMTU3NSwxMiBAQCBz dGF0aWMgYm9vbCBhdHRhY2hfcmVxX25vZGUoc3RydWN0IG1lc2hfbm9kZQo+ICphdHRhY2gsIHN0 cnVjdCBtZXNoX25vZGUgKm5vZGUpCj4gwqDCoMKgwqDCoMKgwqDCoG5vZGUtPm93bmVyID0gTlVM TDsKPiDCoAo+IMKgwqDCoMKgwqDCoMKgwqB1cGRhdGVfY29tcG9zaXRpb24obm9kZSwgYXR0YWNo KTsKPiArCj4gwqDCoMKgwqDCoMKgwqDCoHVwZGF0ZV9tb2RlbF9vcHRpb25zKG5vZGUsIGF0dGFj aCk7Cj4gwqAKPiArwqDCoMKgwqDCoMKgwqBpZiAoY29tcF9jaGFuZ2VkKQo+ICvCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqBub2RlLT5lbGVtZW50cyA9IE5VTEw7Cj4gKwo+IMKgwqDCoMKg wqDCoMKgwqBub2RlX3JlbW92ZShub2RlKTsKPiDCoAo+IMKgwqDCoMKgwqDCoMKgwqByZXR1cm4g dHJ1ZTsKPiBAQCAtMTQ5OSwxNiArMTY3OSw3IEBAIHN0YXRpYyB2b2lkIGdldF9tYW5hZ2VkX29i amVjdHNfY2Ioc3RydWN0Cj4gbF9kYnVzX21lc3NhZ2UgKm1zZywgdm9pZCAqdXNlcl9kYXRhKQo+ IMKgCj4gwqDCoMKgwqDCoMKgwqDCoG5vZGUtPm51bV9lbGUgPSBudW1fZWxlOwo+IMKgCj4gLcKg wqDCoMKgwqDCoMKgaWYgKHJlcS0+dHlwZSAhPSBSRVFVRVNUX1RZUEVfQVRUQUNIKSB7Cj4gLcKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoC8qIEdlbmVyYXRlIG5vZGUgY29uZmlndXJhdGlv biBmb3IgYSBicmFuZCBuZXcgbm9kZQo+ICovCj4gLcKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoGlmICghY3JlYXRlX25vZGVfY29uZmlnKG5vZGUsIG5vZGUtPnV1aWQpKQo+IC3CoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgZ290byBmYWlsOwo+IC0KPiAt wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgLyogQ3JlYXRlIG5vZGUgY29tcG9zaXRpb24g Ki8KPiAtwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgaWYgKCFjcmVhdGVfbm9kZV9jb21w KG5vZGUpKQo+IC3CoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg Z290byBmYWlsOwo+IC3CoMKgwqDCoMKgwqDCoH0gZWxzZSBpZiAoIWNoZWNrX3JlcV9ub2RlKHJl cSkpCj4gLcKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoC8qIENoZWNrIHRoZSBpbnRlZ3Jp dHkgb2YgdGhlIG5vZGUgY29tcG9zaXRpb24gKi8KPiArwqDCoMKgwqDCoMKgwqBpZiAoIWNoZWNr X3JlcV9ub2RlKHJlcSkpCj4gwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBnb3RvIGZh aWw7Cj4gwqAKPiDCoMKgwqDCoMKgwqDCoMKgc3dpdGNoIChyZXEtPnR5cGUpIHsKPiBkaWZmIC0t Z2l0IGEvbWVzaC9ub2RlLmggYi9tZXNoL25vZGUuaAo+IGluZGV4IDJlM2Q4OTgxMi4uYTk4OTQ1 MjIzIDEwMDY0NAo+IC0tLSBhL21lc2gvbm9kZS5oCj4gKysrIGIvbWVzaC9ub2RlLmgKPiBAQCAt MzgsNiArMzgsOCBAQCB1aW50MTZfdCBub2RlX2dldF9wcmltYXJ5X25ldF9pZHgoc3RydWN0IG1l c2hfbm9kZQo+ICpub2RlKTsKPiDCoHZvaWQgbm9kZV9zZXRfdG9rZW4oc3RydWN0IG1lc2hfbm9k ZSAqbm9kZSwgdWludDhfdCB0b2tlbls4XSk7Cj4gwqBjb25zdCB1aW50OF90ICpub2RlX2dldF90 b2tlbihzdHJ1Y3QgbWVzaF9ub2RlICpub2RlKTsKPiDCoGNvbnN0IHVpbnQ4X3QgKm5vZGVfZ2V0 X2RldmljZV9rZXkoc3RydWN0IG1lc2hfbm9kZSAqbm9kZSk7Cj4gK2Jvb2wgbm9kZV9nZXRfZGV2 aWNlX2tleV9jYW5kaWRhdGUoc3RydWN0IG1lc2hfbm9kZSAqbm9kZSwgdWludDhfdAo+ICprZXkp Owo+ICt2b2lkIG5vZGVfZmluYWxpemVfY2FuZGlkYXRlKHN0cnVjdCBtZXNoX25vZGUgKm5vZGUp Owo+IMKgdm9pZCBub2RlX3NldF9udW1fZWxlbWVudHMoc3RydWN0IG1lc2hfbm9kZSAqbm9kZSwg dWludDhfdCBudW1fZWxlKTsKPiDCoHVpbnQ4X3Qgbm9kZV9nZXRfbnVtX2VsZW1lbnRzKHN0cnVj dCBtZXNoX25vZGUgKm5vZGUpOwo+IMKgdWludDhfdCBub2RlX2RlZmF1bHRfdHRsX2dldChzdHJ1 Y3QgbWVzaF9ub2RlICpub2RlKTsKPiBAQCAtODksMyArOTEsNCBAQCBjb25zdCBjaGFyICpub2Rl X2dldF9zdG9yYWdlX2RpcihzdHJ1Y3QgbWVzaF9ub2RlCj4gKm5vZGUpOwo+IMKgYm9vbCBub2Rl X2xvYWRfZnJvbV9zdG9yYWdlKGNvbnN0IGNoYXIgKnN0b3JhZ2VfZGlyKTsKPiDCoHZvaWQgbm9k ZV9maW5hbGl6ZV9uZXdfbm9kZShzdHJ1Y3QgbWVzaF9ub2RlICpub2RlLCBzdHJ1Y3QgbWVzaF9p bwo+ICppbyk7Cj4gwqB2b2lkIG5vZGVfcHJvcGVydHlfY2hhbmdlZChzdHJ1Y3QgbWVzaF9ub2Rl ICpub2RlLCBjb25zdCBjaGFyCj4gKnByb3BlcnR5KTsKPiArYm9vbCBub2RlX3JlZnJlc2goc3Ry dWN0IG1lc2hfbm9kZSAqbm9kZSwgYm9vbCBoYXJkLCB2b2lkCj4gKnByb3ZfaW5mbyk7Cj4gZGlm ZiAtLWdpdCBhL21lc2gvcGItYWR2LmMgYi9tZXNoL3BiLWFkdi5jCj4gaW5kZXggMTgwYjE2MjU4 Li4zODVkODFkNjUgMTAwNjQ0Cj4gLS0tIGEvbWVzaC9wYi1hZHYuYwo+ICsrKyBiL21lc2gvcGIt YWR2LmMKPiBAQCAtMjE5LDcgKzIxOSw3IEBAIHN0YXRpYyB2b2lkIHR4X3RpbWVvdXQoc3RydWN0 IGxfdGltZW91dCAqdGltZW91dCwKPiB2b2lkICp1c2VyX2RhdGEpCj4gwqDCoMKgwqDCoMKgwqDC oGNiKHVzZXJfZGF0YSwgMSk7Cj4gwqB9Cj4gwqAKPiAtc3RhdGljIHZvaWQgcGJfYWR2X3R4KHZv aWQgKnVzZXJfZGF0YSwgdm9pZCAqZGF0YSwgdWludDE2X3QgbGVuKQo+ICtzdGF0aWMgdm9pZCBw Yl9hZHZfdHgodm9pZCAqdXNlcl9kYXRhLCBjb25zdCB2b2lkICpkYXRhLCB1aW50MTZfdAo+IGxl bikKPiDCoHsKPiDCoMKgwqDCoMKgwqDCoMKgc3RydWN0IHBiX2Fkdl9zZXNzaW9uICpzZXNzaW9u ID0gdXNlcl9kYXRhOwo+IMKgCj4gQEAgLTQ3OCw3ICs0NzgsNyBAQCBzdGF0aWMgdm9pZCBwYl9h ZHZfcGFja2V0KHZvaWQgKnVzZXJfZGF0YSwgY29uc3QKPiB1aW50OF90ICpwa3QsIHVpbnQxNl90 IGxlbikKPiDCoGJvb2wgcGJfYWR2X3JlZyhib29sIGluaXRpYXRvciwgbWVzaF9wcm92X29wZW5f ZnVuY190IG9wZW5fY2IsCj4gwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBtZXNoX3By b3ZfY2xvc2VfZnVuY190IGNsb3NlX2NiLAo+IMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgbWVzaF9wcm92X3JlY2VpdmVfZnVuY190IHJ4X2NiLCBtZXNoX3Byb3ZfYWNrX2Z1bmNfdAo+ IGFja19jYiwKPiAtwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgdWludDhfdCB1dWlkWzE2 XSwgdm9pZCAqdXNlcl9kYXRhKQo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBjb25z dCB1aW50OF90ICp1dWlkLCB2b2lkICp1c2VyX2RhdGEpCj4gwqB7Cj4gwqDCoMKgwqDCoMKgwqDC oHN0cnVjdCBwYl9hZHZfc2Vzc2lvbiAqc2Vzc2lvbiwgKm9sZF9zZXNzaW9uOwo+IMKgCj4gZGlm ZiAtLWdpdCBhL21lc2gvcGItYWR2LmggYi9tZXNoL3BiLWFkdi5oCj4gaW5kZXggNWIxZTAzZGFl Li5lMzNiYThlMzUgMTAwNjQ0Cj4gLS0tIGEvbWVzaC9wYi1hZHYuaAo+ICsrKyBiL21lc2gvcGIt YWR2LmgKPiBAQCAtMTEsNSArMTEsNSBAQAo+IMKgYm9vbCBwYl9hZHZfcmVnKGJvb2wgaW5pdGlh dG9yLCBtZXNoX3Byb3Zfb3Blbl9mdW5jX3Qgb3Blbl9jYiwKPiDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoG1lc2hfcHJvdl9jbG9zZV9mdW5jX3QgY2xvc2VfY2IsCj4gwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBtZXNoX3Byb3ZfcmVjZWl2ZV9mdW5jX3QgcnhfY2IsIG1l c2hfcHJvdl9hY2tfZnVuY190Cj4gYWNrX2NiLAo+IC3CoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqB1aW50OF90IHV1aWRbMTZdLCB2b2lkICp1c2VyX2RhdGEpOwo+ICvCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqBjb25zdCB1aW50OF90ICp1dWlkLCB2b2lkICp1c2VyX2RhdGEpOwo+ IMKgdm9pZCBwYl9hZHZfdW5yZWcodm9pZCAqdXNlcl9kYXRhKTsKPiBkaWZmIC0tZ2l0IGEvbWVz aC9wcm92LWFjY2VwdG9yLmMgYi9tZXNoL3Byb3YtYWNjZXB0b3IuYwo+IGluZGV4IGJmOGM1NzNk YS4uZmQ5ZDRjZDVkIDEwMDY0NAo+IC0tLSBhL21lc2gvcHJvdi1hY2NlcHRvci5jCj4gKysrIGIv bWVzaC9wcm92LWFjY2VwdG9yLmMKPiBAQCAtMjIsNiArMjIsNyBAQAo+IMKgI2luY2x1ZGUgIm1l c2gvbmV0LmgiCj4gwqAjaW5jbHVkZSAibWVzaC9wcm92LmgiCj4gwqAjaW5jbHVkZSAibWVzaC9w cm92aXNpb24uaCIKPiArI2luY2x1ZGUgIm1lc2gvcmVtcHJ2LmgiCj4gwqAjaW5jbHVkZSAibWVz aC9wYi1hZHYuaCIKPiDCoCNpbmNsdWRlICJtZXNoL21lc2guaCIKPiDCoCNpbmNsdWRlICJtZXNo L2FnZW50LmgiCj4gQEAgLTE2OSw5ICsxNzAsNiBAQCBzdGF0aWMgdm9pZCBhY3BfcHJvdl9vcGVu KHZvaWQgKnVzZXJfZGF0YSwKPiBwcm92X3RyYW5zX3R4X3QgdHJhbnNfdHgsCj4gwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqBwcm92LT50cmFuc3BvcnQgIT0gdHJhbnNwb3J0KQo+IMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgcmV0dXJuOwo+IMKgCj4gLcKgwqDCoMKgwqDCoMKgaWYgKHRy YW5zcG9ydCAhPSBQQl9BRFYpCj4gLcKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoHJldHVy bjsKPiAtCj4gwqDCoMKgwqDCoMKgwqDCoHByb3YtPnRyYW5zX3R4ID0gdHJhbnNfdHg7Cj4gwqDC oMKgwqDCoMKgwqDCoHByb3YtPnRyYW5zcG9ydCA9IHRyYW5zcG9ydDsKPiDCoMKgwqDCoMKgwqDC oMKgcHJvdi0+dHJhbnNfZGF0YSA9IHRyYW5zX2RhdGE7Cj4gQEAgLTQyNSw5ICs0MjMsMTAgQEAg c3RhdGljIGJvb2wgcHJvdl9zdGFydF9jaGVjayhzdHJ1Y3QgcHJvdl9zdGFydAo+ICpzdGFydCwK PiDCoMKgwqDCoMKgwqDCoMKgcmV0dXJuIHRydWU7Cj4gwqB9Cj4gwqAKPiAtc3RhdGljIHZvaWQg YWNwX3Byb3Zfcngodm9pZCAqdXNlcl9kYXRhLCBjb25zdCB1aW50OF90ICpkYXRhLAo+IHVpbnQx Nl90IGxlbikKPiArc3RhdGljIHZvaWQgYWNwX3Byb3Zfcngodm9pZCAqdXNlcl9kYXRhLCBjb25z dCB2b2lkICpkcHRyLCB1aW50MTZfdAo+IGxlbikKPiDCoHsKPiDCoMKgwqDCoMKgwqDCoMKgc3Ry dWN0IG1lc2hfcHJvdl9hY2NlcHRvciAqcnhfcHJvdiA9IHVzZXJfZGF0YTsKPiArwqDCoMKgwqDC oMKgwqBjb25zdCB1aW50OF90ICpkYXRhID0gZHB0cjsKPiDCoMKgwqDCoMKgwqDCoMKgc3RydWN0 IG1lc2hfcHJvdl9ub2RlX2luZm8gKmluZm87Cj4gwqDCoMKgwqDCoMKgwqDCoHN0cnVjdCBwcm92 X2ZhaWxfbXNnIGZhaWw7Cj4gwqDCoMKgwqDCoMKgwqDCoHVpbnQ4X3QgdHlwZSA9ICpkYXRhKys7 Cj4gQEAgLTY1NCwxNCArNjUzLDE5IEBAIHN0YXRpYyB2b2lkIGFjcF9wcm92X3J4KHZvaWQgKnVz ZXJfZGF0YSwgY29uc3QKPiB1aW50OF90ICpkYXRhLCB1aW50MTZfdCBsZW4pCj4gwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBpbmZvLT5mbGFncyA9IHByb3YtPnJhbmRfYXV0aF93b3Jr c3BhY2VbMThdOwo+IMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgaW5mby0+aXZfaW5k ZXggPSBsX2dldF9iZTMyKHByb3YtPnJhbmRfYXV0aF93b3Jrc3BhY2UKPiArIDE5KTsKPiDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoGluZm8tPnVuaWNhc3QgPSBsX2dldF9iZTE2KHBy b3YtPnJhbmRfYXV0aF93b3Jrc3BhY2UKPiArIDIzKTsKPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgaW5mby0+bnVtX2VsZSA9IHByb3YtPmNvbmZfaW5wdXRzLmNhcHMubnVtX2VsZTsK PiArCj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoC8qIFNlbmQgcHJvdiBjb21wbGV0 ZSAqLwo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBwcm92LT5yYW5kX2F1dGhfd29y a3NwYWNlWzBdID0gUFJPVl9DT01QTEVURTsKPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgcHJvdi0+dHJhbnNfdHgocHJvdi0+dHJhbnNfZGF0YSwKPiArwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBwcm92LT5yYW5kX2F1 dGhfd29ya3NwYWNlLCAxKTsKPiDCoAo+IMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg cmVzdWx0ID0gcHJvdi0+Y21wbHQocHJvdi0+Y2FsbGVyX2RhdGEsCj4gUFJPVl9FUlJfU1VDQ0VT UywgaW5mbyk7Cj4gwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBwcm92LT5jbXBsdCA9 IE5VTEw7Cj4gwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBsX2ZyZWUoaW5mbyk7Cj4g wqAKPiDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoGlmIChyZXN1bHQpIHsKPiAtwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoHByb3YtPnJhbmRfYXV0 aF93b3Jrc3BhY2VbMF0gPSBQUk9WX0NPTVBMRVRFOwo+IC3CoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgcHJvdl9zZW5kKHByb3YsIHByb3YtPnJhbmRfYXV0aF93 b3Jrc3BhY2UsCj4gMSk7Cj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqBsX2RlYnVnKCJQUk9WX0NPTVBMRVRFIik7Cj4gwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgZ290byBjbGVhbnVwOwo+IMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgfSBlbHNlIHsKPiDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqBmYWlsLnJlYXNvbiA9IFBST1ZfRVJSX1VORVhQRUNURURfRVJS Owo+IEBAIC03MjEsNyArNzI1LDcgQEAgc3RhdGljIHZvaWQgYWNwX3Byb3ZfYWNrKHZvaWQgKnVz ZXJfZGF0YSwgdWludDhfdAo+IG1zZ19udW0pCj4gwqAKPiDCoAo+IMKgLyogVGhpcyBzdGFydHMg dW5wcm92aXNpb25lZCBkZXZpY2UgYmVhY29uICovCj4gLWJvb2wgYWNjZXB0b3Jfc3RhcnQodWlu dDhfdCBudW1fZWxlLCB1aW50OF90IHV1aWRbMTZdLAo+ICtib29sIGFjY2VwdG9yX3N0YXJ0KHVp bnQ4X3QgbnVtX2VsZSwgdWludDhfdCAqdXVpZCwKPiDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoHVpbnQxNl90IGFsZ29yaXRobXMsIHVpbnQzMl90IHRpbWVvdXQsCj4gwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBzdHJ1Y3QgbWVzaF9hZ2VudCAqYWdlbnQsCj4gwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBtZXNoX3Byb3ZfYWNjZXB0b3JfY29tcGxldGVfZnVu Y190IGNvbXBsZXRlX2NiLAo+IEBAIC03MzMsOCArNzM3LDEwIEBAIGJvb2wgYWNjZXB0b3Jfc3Rh cnQodWludDhfdCBudW1fZWxlLCB1aW50OF90Cj4gdXVpZFsxNl0sCj4gwqDCoMKgwqDCoMKgwqDC oHVpbnQ4X3QgbGVuID0gc2l6ZW9mKGJlYWNvbikgLSBzaXplb2YodWludDMyX3QpOwo+IMKgwqDC oMKgwqDCoMKgwqBib29sIHJlc3VsdDsKPiDCoAo+IC3CoMKgwqDCoMKgwqDCoC8qIEludm9rZWQg ZnJvbSBKb2luKCkgbWV0aG9kIGluIG1lc2gtYXBpLnR4dCwgdG8gam9pbiBhCj4gLcKgwqDCoMKg wqDCoMKgICogcmVtb3RlIG1lc2ggbmV0d29yay4KPiArwqDCoMKgwqDCoMKgwqAvKgo+ICvCoMKg wqDCoMKgwqDCoCAqIEludm9rZWQgZnJvbSBKb2luKCkgbWV0aG9kIGluIG1lc2gtYXBpLnR4dCwg dG8gam9pbiBhCj4gK8KgwqDCoMKgwqDCoMKgICogcmVtb3RlIG1lc2ggbmV0d29yay4gTWF5IGFs c28gYmUgaW52b2tlZCB3aXRoIGEgTlVMTAo+ICvCoMKgwqDCoMKgwqDCoCAqIHV1aWQgdG8gcGVy Zm9ybSBhIERldmljZSBLZXkgUmVmcmVzaCBwcm9jZWR1cmUuCj4gwqDCoMKgwqDCoMKgwqDCoCAq Lwo+IMKgCj4gwqDCoMKgwqDCoMKgwqDCoGlmIChwcm92KQo+IEBAIC03NTIsMzcgKzc1OCw1MCBA QCBib29sIGFjY2VwdG9yX3N0YXJ0KHVpbnQ4X3QgbnVtX2VsZSwgdWludDhfdAo+IHV1aWRbMTZd LAo+IMKgCj4gwqDCoMKgwqDCoMKgwqDCoGNhcHMgPSBtZXNoX2FnZW50X2dldF9jYXBzKGFnZW50 KTsKPiDCoAo+IC3CoMKgwqDCoMKgwqDCoC8qIFRPRE86IFNob3VsZCB3ZSBzYW5pdHkgY2hlY2sg dmFsdWVzIGhlcmUgb3IgZWxzZXdoZXJlPyAqLwo+IMKgwqDCoMKgwqDCoMKgwqBwcm92LT5jb25m X2lucHV0cy5jYXBzLm51bV9lbGUgPSBudW1fZWxlOwo+IC3CoMKgwqDCoMKgwqDCoHByb3YtPmNv bmZfaW5wdXRzLmNhcHMucHViX3R5cGUgPSBjYXBzLT5wdWJfdHlwZTsKPiAtwqDCoMKgwqDCoMKg wqBwcm92LT5jb25mX2lucHV0cy5jYXBzLnN0YXRpY190eXBlID0gY2Fwcy0+c3RhdGljX3R5cGU7 Cj4gLcKgwqDCoMKgwqDCoMKgcHJvdi0+Y29uZl9pbnB1dHMuY2Fwcy5vdXRwdXRfc2l6ZSA9IGNh cHMtPm91dHB1dF9zaXplOwo+IC3CoMKgwqDCoMKgwqDCoHByb3YtPmNvbmZfaW5wdXRzLmNhcHMu aW5wdXRfc2l6ZSA9IGNhcHMtPmlucHV0X3NpemU7Cj4gLQo+IC3CoMKgwqDCoMKgwqDCoC8qIFN0 b3JlIFVJTlQxNiB2YWx1ZXMgaW4gT3Zlci10aGUtQWlyIG9yZGVyLCBpbiBwYWNrZWQKPiBzdHJ1 Y3R1cmUKPiAtwqDCoMKgwqDCoMKgwqAgKiBmb3IgY3J5cHRvIGlucHV0cwo+IC3CoMKgwqDCoMKg wqDCoCAqLwo+IMKgwqDCoMKgwqDCoMKgwqBsX3B1dF9iZTE2KGFsZ29yaXRobXMsICZwcm92LT5j b25mX2lucHV0cy5jYXBzLmFsZ29yaXRobXMpOwo+IC3CoMKgwqDCoMKgwqDCoGxfcHV0X2JlMTYo Y2Fwcy0+b3V0cHV0X2FjdGlvbiwgJnByb3YtCj4gPmNvbmZfaW5wdXRzLmNhcHMub3V0cHV0X2Fj dGlvbik7Cj4gLcKgwqDCoMKgwqDCoMKgbF9wdXRfYmUxNihjYXBzLT5pbnB1dF9hY3Rpb24sICZw cm92LQo+ID5jb25mX2lucHV0cy5jYXBzLmlucHV0X2FjdGlvbik7Cj4gLQo+IC3CoMKgwqDCoMKg wqDCoC8qIENvbXBvc2UgVW5wcm92aXNpb25lZCBCZWFjb24gKi8KPiAtwqDCoMKgwqDCoMKgwqBt ZW1jcHkoYmVhY29uICsgMiwgdXVpZCwgMTYpOwo+IC3CoMKgwqDCoMKgwqDCoGxfcHV0X2JlMTYo Y2Fwcy0+b29iX2luZm8sIGJlYWNvbiArIDE4KTsKPiAtwqDCoMKgwqDCoMKgwqBpZiAoY2Fwcy0+ b29iX2luZm8gJiBPT0JfSU5GT19VUklfSEFTSCl7Cj4gLcKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoGxfcHV0X2JlMzIoY2Fwcy0+dXJpX2hhc2gsIGJlYWNvbiArIDIwKTsKPiAtwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgbGVuICs9IHNpemVvZih1aW50MzJfdCk7Cj4gKwo+ICvC oMKgwqDCoMKgwqDCoGlmIChjYXBzKSB7Cj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oC8qIFRPRE86IFNob3VsZCB3ZSBzYW5pdHkgY2hlY2sgdmFsdWVzIGhlcmUgb3IKPiBlbHNld2hl cmU/ICovCj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoHByb3YtPmNvbmZfaW5wdXRz LmNhcHMucHViX3R5cGUgPSBjYXBzLT5wdWJfdHlwZTsKPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgcHJvdi0+Y29uZl9pbnB1dHMuY2Fwcy5zdGF0aWNfdHlwZSA9IGNhcHMtCj4gPnN0 YXRpY190eXBlOwo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBwcm92LT5jb25mX2lu cHV0cy5jYXBzLm91dHB1dF9zaXplID0gY2Fwcy0KPiA+b3V0cHV0X3NpemU7Cj4gK8KgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoHByb3YtPmNvbmZfaW5wdXRzLmNhcHMuaW5wdXRfc2l6ZSA9 IGNhcHMtPmlucHV0X3NpemU7Cj4gKwo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAv KiBTdG9yZSBVSU5UMTYgdmFsdWVzIGluIE92ZXItdGhlLUFpciBvcmRlciwgaW4KPiBwYWNrZWQK PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgICogc3RydWN0dXJlIGZvciBjcnlwdG8g aW5wdXRzCj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCAqLwo+ICvCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqBsX3B1dF9iZTE2KGNhcHMtPm91dHB1dF9hY3Rpb24sCj4gK8Kg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoCZwcm92LQo+ID5jb25mX2lucHV0cy5jYXBzLm91dHB1dF9hY3Rp b24pOwo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBsX3B1dF9iZTE2KGNhcHMtPmlu cHV0X2FjdGlvbiwKPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgJnByb3YtCj4gPmNvbmZfaW5wdXRz LmNhcHMuaW5wdXRfYWN0aW9uKTsKPiArCj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oC8qIFBvcHVsYXRlIENhcHMgZmllbGRzIG9mIGJlYWNvbiAqLwo+ICvCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqBsX3B1dF9iZTE2KGNhcHMtPm9vYl9pbmZvLCBiZWFjb24gKyAxOCk7Cj4g K8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoGlmIChjYXBzLT5vb2JfaW5mbyAmIE9PQl9J TkZPX1VSSV9IQVNIKSB7Cj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqBsX3B1dF9iZTMyKGNhcHMtPnVyaV9oYXNoLCBiZWFjb24gKyAyMCk7Cj4gK8KgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBsZW4gKz0gc2l6ZW9mKHVp bnQzMl90KTsKPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgfQo+IMKgwqDCoMKgwqDC oMKgwqB9Cj4gwqAKPiAtwqDCoMKgwqDCoMKgwqAvKiBJbmZpbml0ZWx5IEJlYWNvbiB1bnRpbCBD YW5jZWxlZCwgb3IgUHJvdmlzaW9uaW5nIFN0YXJ0cwo+ICovCj4gLcKgwqDCoMKgwqDCoMKgcmVz dWx0ID0gbWVzaF9zZW5kX3BrdCgwLCA1MDAsIGJlYWNvbiwgbGVuKTsKPiArwqDCoMKgwqDCoMKg wqBpZiAodXVpZCkgewo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAvKiBDb21wb3Nl IFVucHJvdmlzaW9uZWQgQmVhY29uICovCj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oG1lbWNweShiZWFjb24gKyAyLCB1dWlkLCAxNik7Cj4gKwo+ICvCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqAvKiBJbmZpbml0ZWx5IEJlYWNvbiB1bnRpbCBDYW5jZWxlZCwgb3IgUHJvdmlz aW9uaW5nCj4gU3RhcnRzICovCj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoHJlc3Vs dCA9IG1lc2hfc2VuZF9wa3QoMCwgNTAwLCBiZWFjb24sIGxlbik7Cj4gwqAKPiAtwqDCoMKgwqDC oMKgwqBpZiAoIXJlc3VsdCkKPiAtwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgZ290byBl cnJvcl9mYWlsOwo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBpZiAoIXJlc3VsdCkK PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoGdvdG8gZXJy b3JfZmFpbDsKPiDCoAo+IC3CoMKgwqDCoMKgwqDCoC8qIEFsd2F5cyByZWdpc3RlciBmb3IgUEIt QURWICovCj4gLcKgwqDCoMKgwqDCoMKgcmVzdWx0ID0gcGJfYWR2X3JlZyhmYWxzZSwgYWNwX3By b3Zfb3BlbiwgYWNwX3Byb3ZfY2xvc2UsCj4gYWNwX3Byb3ZfcngsCj4gLcKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBhY3BfcHJvdl9hY2ssIHV1aWQsCj4gcHJvdik7Cj4gK8Kg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoC8qIEFsd2F5cyByZWdpc3RlciBmb3IgUEItQURW ICovCj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoHJlc3VsdCA9IHBiX2Fkdl9yZWco ZmFsc2UsIGFjcF9wcm92X29wZW4sCj4gYWNwX3Byb3ZfY2xvc2UsCj4gK8KgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoGFjcF9wcm92X3J4LCBhY3BfcHJvdl9hY2ssCj4gdXVpZCwgcHJvdik7Cj4gK8KgwqDC oMKgwqDCoMKgfSBlbHNlIHsKPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgLyogUnVu IERldmljZSBLZXkgUmVmcmVzaCBQcm9jZWR1cmUgKi8KPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgcmVzdWx0ID0gcmVnaXN0ZXJfbnBwaV9hY2NlcHRvcihhY3BfcHJvdl9vcGVuLAo+ IGFjcF9wcm92X2Nsb3NlLAo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBhY3BfcHJvdl9yeCwgYWNw X3Byb3ZfYWNrLAo+IHByb3YpOwo+ICvCoMKgwqDCoMKgwqDCoH0KPiDCoAo+IMKgwqDCoMKgwqDC oMKgwqBpZiAocmVzdWx0KQo+IMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgcmV0dXJu IHRydWU7Cj4gZGlmZiAtLWdpdCBhL21lc2gvcHJvdi1pbml0aWF0b3IuYyBiL21lc2gvcHJvdi1p bml0aWF0b3IuYwo+IGluZGV4IGM2MjU3NzUyMy4uNjUzZjNhZTNlIDEwMDY0NAo+IC0tLSBhL21l c2gvcHJvdi1pbml0aWF0b3IuYwo+ICsrKyBiL21lc2gvcHJvdi1pbml0aWF0b3IuYwo+IEBAIC0y MSwxMCArMjEsMTIgQEAKPiDCoCNpbmNsdWRlICJtZXNoL2NyeXB0by5oIgo+IMKgI2luY2x1ZGUg Im1lc2gvbmV0LmgiCj4gwqAjaW5jbHVkZSAibWVzaC9ub2RlLmgiCj4gKyNpbmNsdWRlICJtZXNo L21vZGVsLmgiCj4gwqAjaW5jbHVkZSAibWVzaC9rZXlyaW5nLmgiCj4gwqAjaW5jbHVkZSAibWVz aC9wcm92LmgiCj4gwqAjaW5jbHVkZSAibWVzaC9wcm92aXNpb24uaCIKPiDCoCNpbmNsdWRlICJt ZXNoL3BiLWFkdi5oIgo+ICsjaW5jbHVkZSAibWVzaC9yZW1wcnYuaCIKPiDCoCNpbmNsdWRlICJt ZXNoL21lc2guaCIKPiDCoCNpbmNsdWRlICJtZXNoL2FnZW50LmgiCj4gwqAjaW5jbHVkZSAibWVz aC9lcnJvci5oIgo+IEBAIC04MiwxMiArODQsMTYgQEAgc3RydWN0IG1lc2hfcHJvdl9pbml0aWF0 b3Igewo+IMKgwqDCoMKgwqDCoMKgwqBzdHJ1Y3QgbF90aW1lb3V0ICp0aW1lb3V0Owo+IMKgwqDC oMKgwqDCoMKgwqB1aW50MzJfdCB0b19zZWNzOwo+IMKgwqDCoMKgwqDCoMKgwqBlbnVtIGludF9z dGF0ZcKgwqBzdGF0ZTsKPiAtwqDCoMKgwqDCoMKgwqBlbnVtIHRyYW5zX3R5cGUgdHJhbnNwb3J0 Owo+IMKgwqDCoMKgwqDCoMKgwqB1aW50MTZfdCBuZXRfaWR4Owo+ICvCoMKgwqDCoMKgwqDCoHVp bnQxNl90IHN2cl9pZHg7Cj4gwqDCoMKgwqDCoMKgwqDCoHVpbnQxNl90IHVuaWNhc3Q7Cj4gK8Kg wqDCoMKgwqDCoMKgdWludDE2X3Qgc2VydmVyOwo+ICvCoMKgwqDCoMKgwqDCoHVpbnQ4X3QgdHJh bnNwb3J0Owo+IMKgwqDCoMKgwqDCoMKgwqB1aW50OF90IG1hdGVyaWFsOwo+IMKgwqDCoMKgwqDC oMKgwqB1aW50OF90IGV4cGVjdGVkOwo+IMKgwqDCoMKgwqDCoMKgwqBpbnQ4X3QgcHJldmlvdXM7 Cj4gK8KgwqDCoMKgwqDCoMKgdWludDhfdCBvdXRfbnVtOwo+ICvCoMKgwqDCoMKgwqDCoHVpbnQ4 X3QgcnByX3N0YXRlOwo+IMKgwqDCoMKgwqDCoMKgwqBzdHJ1Y3QgY29uZl9pbnB1dCBjb25mX2lu cHV0czsKPiDCoMKgwqDCoMKgwqDCoMKgdWludDhfdCBjYWxjX2tleVsxNl07Cj4gwqDCoMKgwqDC oMKgwqDCoHVpbnQ4X3Qgc2FsdFsxNl07Cj4gQEAgLTEwMCwxNCArMTA2LDIzIEBAIHN0cnVjdCBt ZXNoX3Byb3ZfaW5pdGlhdG9yIHsKPiDCoMKgwqDCoMKgwqDCoMKgdWludDhfdCB1dWlkWzE2XTsK PiDCoH07Cj4gwqAKPiArc3RydWN0IHNjYW5fcmVxIHsKPiArwqDCoMKgwqDCoMKgwqBtZXNoX3By b3ZfaW5pdGlhdG9yX3NjYW5fcmVzdWx0X3Qgc2Nhbl9yZXN1bHQ7Cj4gK8KgwqDCoMKgwqDCoMKg c3RydWN0IG1lc2hfbm9kZSAqbm9kZTsKPiArwqDCoMKgwqDCoMKgwqBpbnQgY291bnQ7Cj4gK307 Cj4gKwo+IMKgc3RhdGljIHN0cnVjdCBtZXNoX3Byb3ZfaW5pdGlhdG9yICpwcm92ID0gTlVMTDsK PiArc3RhdGljIHN0cnVjdCBsX3F1ZXVlICpzY2FuczsKPiDCoAo+IMKgc3RhdGljIHZvaWQgaW5p dGlhdG9yX2ZyZWUodm9pZCkKPiDCoHsKPiAtwqDCoMKgwqDCoMKgwqBpZiAocHJvdikKPiArwqDC oMKgwqDCoMKgwqBpZiAocHJvdikgewo+IMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg bF90aW1lb3V0X3JlbW92ZShwcm92LT50aW1lb3V0KTsKPiDCoAo+IC3CoMKgwqDCoMKgwqDCoG1l c2hfc2VuZF9jYW5jZWwoJnBrdF9maWx0ZXIsIHNpemVvZihwa3RfZmlsdGVyKSk7Cj4gK8KgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoGlmICghcHJvdi0+c2VydmVyKQo+ICvCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgbWVzaF9zZW5kX2NhbmNlbCgmcGt0 X2ZpbHRlciwKPiBzaXplb2YocGt0X2ZpbHRlcikpOwo+ICvCoMKgwqDCoMKgwqDCoH0KPiDCoAo+ IMKgwqDCoMKgwqDCoMKgwqBwYl9hZHZfdW5yZWcocHJvdik7Cj4gwqAKPiBAQCAtMTE5LDYgKzEz NCwxNSBAQCBzdGF0aWMgdm9pZCBpbnRfcHJvdl9jbG9zZSh2b2lkICp1c2VyX2RhdGEsCj4gdWlu dDhfdCByZWFzb24pCj4gwqB7Cj4gwqDCoMKgwqDCoMKgwqDCoHN0cnVjdCBtZXNoX3Byb3ZfaW5p dGlhdG9yICpwcm92ID0gdXNlcl9kYXRhOwo+IMKgwqDCoMKgwqDCoMKgwqBzdHJ1Y3QgbWVzaF9w cm92X25vZGVfaW5mbyBpbmZvOwo+ICvCoMKgwqDCoMKgwqDCoHVpbnQ4X3QgbXNnWzRdOwo+ICvC oMKgwqDCoMKgwqDCoGludCBuOwo+ICsKPiArwqDCoMKgwqDCoMKgwqBpZiAocHJvdi0+c2VydmVy KSB7Cj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoG4gPSBtZXNoX21vZGVsX29wY29k ZV9zZXQoT1BfUkVNX1BST1ZfTElOS19DTE9TRSwKPiBtc2cpOwo+ICvCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqBtc2dbbisrXSA9IHJlYXNvbiA9PSBQUk9WX0VSUl9TVUNDRVNTID8gMHgw MCA6IDB4MDI7Cj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoG1lc2hfbW9kZWxfc2Vu ZChwcm92LT5ub2RlLCAwLCBwcm92LT5zZXJ2ZXIsCj4gQVBQX0lEWF9ERVZfUkVNT1RFLAo+ICvC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoHByb3YtPnN2cl9pZHgsIERFRkFVTFRfVFRMLCB0cnVlLCBuLAo+IG1zZyk7Cj4gK8KgwqDC oMKgwqDCoMKgfQo+IMKgCj4gwqDCoMKgwqDCoMKgwqDCoGlmIChyZWFzb24gIT0gUFJPVl9FUlJf U1VDQ0VTUykgewo+IMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgcHJvdi0+Y29tcGxl dGVfY2IocHJvdi0+Y2FsbGVyX2RhdGEsIHJlYXNvbiwgTlVMTCk7Cj4gQEAgLTYyNiw5ICs2NTAs MTAgQEAgc3RhdGljIHZvaWQgaW50X3Byb3Zfc3RhcnRfYXV0aChjb25zdCBzdHJ1Y3QKPiBtZXNo X2FnZW50X3Byb3ZfY2FwcyAqcHJvdl9jYXBzLAo+IMKgwqDCoMKgwqDCoMKgwqB9Cj4gwqB9Cj4g wqAKPiAtc3RhdGljIHZvaWQgaW50X3Byb3Zfcngodm9pZCAqdXNlcl9kYXRhLCBjb25zdCB1aW50 OF90ICpkYXRhLAo+IHVpbnQxNl90IGxlbikKPiArc3RhdGljIHZvaWQgaW50X3Byb3Zfcngodm9p ZCAqdXNlcl9kYXRhLCBjb25zdCB2b2lkICpkcHRyLCB1aW50MTZfdAo+IGxlbikKPiDCoHsKPiDC oMKgwqDCoMKgwqDCoMKgc3RydWN0IG1lc2hfcHJvdl9pbml0aWF0b3IgKnJ4X3Byb3YgPSB1c2Vy X2RhdGE7Cj4gK8KgwqDCoMKgwqDCoMKgY29uc3QgdWludDhfdCAqZGF0YSA9IGRwdHI7Cj4gwqDC oMKgwqDCoMKgwqDCoHVpbnQ4X3QgKm91dDsKPiDCoMKgwqDCoMKgwqDCoMKgdWludDhfdCB0eXBl ID0gKmRhdGErKzsKPiDCoMKgwqDCoMKgwqDCoMKgdWludDhfdCBmYWlsX2NvZGVbMl07Cj4gQEAg LTY1MSw3ICs2NzYsNyBAQCBzdGF0aWMgdm9pZCBpbnRfcHJvdl9yeCh2b2lkICp1c2VyX2RhdGEs IGNvbnN0Cj4gdWludDhfdCAqZGF0YSwgdWludDE2X3QgbGVuKQo+IMKgwqDCoMKgwqDCoMKgwqBp ZiAodHlwZSA+PSBMX0FSUkFZX1NJWkUoZXhwZWN0ZWRfcGR1X3NpemUpIHx8Cj4gwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqBsZW4gIT0KPiBleHBlY3RlZF9wZHVfc2l6ZVt0eXBlXSkgewo+IMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgbF9lcnJvcigiRXhwZWN0ZWQgUERVIHNpemUgJWQs IEdvdCAlZCAodHlwZTogJTIuMngpIiwKPiAtwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoGxlbiwgZXhwZWN0ZWRfcGR1X3NpemVbdHlwZV0sIHR5cGUpOwo+ICvC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgZXhwZWN0ZWRfcGR1 X3NpemVbdHlwZV0sIGxlbiwgdHlwZSk7Cj4gwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqBmYWlsX2NvZGVbMV0gPSBQUk9WX0VSUl9JTlZBTElEX0ZPUk1BVDsKPiDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoGdvdG8gZmFpbHVyZTsKPiDCoMKgwqDCoMKgwqDCoMKgfQo+IEBA IC03NzMsNyArNzk4LDEyIEBAIHN0YXRpYyB2b2lkIGludF9wcm92X3J4KHZvaWQgKnVzZXJfZGF0 YSwgY29uc3QKPiB1aW50OF90ICpkYXRhLCB1aW50MTZfdCBsZW4pCj4gwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgZ290byBmYWlsdXJlOwo+IMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgfQo+IMKgCj4gLcKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoGlmICghcHJvdi0+ZGF0YV9yZXFfY2IocHJvdi0+Y2FsbGVyX2RhdGEsCj4gK8KgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoGlmIChwcm92LT50cmFuc3BvcnQgPT0gUEJfTlBQSV8w MCB8fAo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgcHJvdi0+dHJhbnNw b3J0ID09Cj4gUEJfTlBQSV8wMikgewo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgLyogTm8gQXBwIGRhdGEgbmVlZGVkICovCj4gK8KgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBpbml0aWF0b3JfcHJvdl9kYXRhKHByb3Yt PnN2cl9pZHgsIHByb3YtCj4gPnNlcnZlciwKPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBwcm92LQo+ID5jYWxsZXJfZGF0YSk7Cj4gK8KgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoH0gZWxzZSBpZiAoIXByb3YtPmRhdGFfcmVxX2NiKHBy b3YtPmNhbGxlcl9kYXRhLAo+IMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgcHJvdi0KPiA+Y29uZl9p bnB1dHMuY2Fwcy5udW1fZWxlKSkgewo+IMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoGxfZXJyb3IoIlByb3Zpc2lvbmluZyBGYWlsZWQtRGF0YSBHZXQiKTsK PiDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBmYWlsX2Nv ZGVbMV0gPSBQUk9WX0VSUl9DQU5UX0FTU0lHTl9BRERSOwo+IEBAIC04NTEsNiArODgxLDggQEAg c3RhdGljIHZvaWQgaW50X3Byb3ZfYWNrKHZvaWQgKnVzZXJfZGF0YSwgdWludDhfdAo+IG1zZ19u dW0pCj4gwqAKPiDCoHN0YXRpYyB2b2lkIGluaXRpYXRvcl9vcGVuX2NiKHZvaWQgKnVzZXJfZGF0 YSwgaW50IGVycikKPiDCoHsKPiArwqDCoMKgwqDCoMKgwqB1aW50OF90IG1zZ1syMF07Cj4gK8Kg wqDCoMKgwqDCoMKgaW50IG47Cj4gwqDCoMKgwqDCoMKgwqDCoGJvb2wgcmVzdWx0Owo+IMKgCj4g wqDCoMKgwqDCoMKgwqDCoGlmICghcHJvdikKPiBAQCAtODU5LDE4ICs4OTEsMzAgQEAgc3RhdGlj IHZvaWQgaW5pdGlhdG9yX29wZW5fY2Iodm9pZCAqdXNlcl9kYXRhLAo+IGludCBlcnIpCj4gwqDC oMKgwqDCoMKgwqDCoGlmIChlcnIgIT0gTUVTSF9FUlJPUl9OT05FKQo+IMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgZ290byBmYWlsOwo+IMKgCj4gLcKgwqDCoMKgwqDCoMKgLyogQWx3 YXlzIHJlZ2lzdGVyIGZvciBQQi1BRFYgKi8KPiAtwqDCoMKgwqDCoMKgwqByZXN1bHQgPSBwYl9h ZHZfcmVnKHRydWUsIGludF9wcm92X29wZW4sIGludF9wcm92X2Nsb3NlLAo+IGludF9wcm92X3J4 LAo+IC3CoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgaW50X3Byb3ZfYWNrLCBw cm92LQo+ID51dWlkLCBwcm92KTsKPiArwqDCoMKgwqDCoMKgwqBpZiAocHJvdi0+c2VydmVyKSB7 Cj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoG4gPSBtZXNoX21vZGVsX29wY29kZV9z ZXQoT1BfUkVNX1BST1ZfTElOS19PUEVOLAo+IG1zZyk7Cj4gKwo+ICvCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqBpZiAocHJvdi0+dHJhbnNwb3J0IDw9IFBCX05QUElfMDIpIHsKPiArwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoG1zZ1tuKytdID0gcHJv di0+dHJhbnNwb3J0Owo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqB9IGVsc2Ugewo+ ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgbWVtY3B5KG1z ZyArIG4sIHByb3YtPnV1aWQsIDE2KTsKPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoG4gKz0gMTY7Cj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oH0KPiArCj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoHJlc3VsdCA9IG1lc2hfbW9k ZWxfc2VuZChwcm92LT5ub2RlLCAwLCBwcm92LT5zZXJ2ZXIsCj4gK8KgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoEFQUF9JRFhfREVWX1JFTU9URSwgcHJvdi0KPiA+c3ZyX2lkeCwKPiArwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgREVGQVVMVF9UVEwsIHRydWUsIG4sIG1zZyk7Cj4gK8KgwqDCoMKgwqDCoMKgfSBl bHNlIHsKPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgLyogQWx3YXlzIHJlZ2lzdGVy IGZvciBQQi1BRFYgKi8KPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgcmVzdWx0ID0g cGJfYWR2X3JlZyh0cnVlLCBpbnRfcHJvdl9vcGVuLAo+IGludF9wcm92X2Nsb3NlLAo+ICvCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oGludF9wcm92X3J4LCBpbnRfcHJvdl9hY2ssIHByb3YtCj4gPnV1aWQsIHByb3YpOwo+ICvCoMKg wqDCoMKgwqDCoH0KPiDCoAo+IMKgwqDCoMKgwqDCoMKgwqBpZiAoIXJlc3VsdCkgewo+IMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgZXJyID0gTUVTSF9FUlJPUl9GQUlMRUQ7Cj4gwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBnb3RvIGZhaWw7Cj4gwqDCoMKgwqDCoMKgwqDC oH0KPiDCoAo+IC3CoMKgwqDCoMKgwqDCoGlmICghcHJvdikKPiAtwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgcmV0dXJuOwo+IC0KPiDCoMKgwqDCoMKgwqDCoMKgcHJvdi0+c3RhcnRfY2Io cHJvdi0+Y2FsbGVyX2RhdGEsIE1FU0hfRVJST1JfTk9ORSk7Cj4gwqDCoMKgwqDCoMKgwqDCoHJl dHVybjsKPiDCoGZhaWw6Cj4gQEAgLTg3OCwxMCArOTIyLDIwIEBAIGZhaWw6Cj4gwqDCoMKgwqDC oMKgwqDCoGluaXRpYXRvcl9mcmVlKCk7Cj4gwqB9Cj4gwqAKPiAtYm9vbCBpbml0aWF0b3Jfc3Rh cnQoZW51bSB0cmFuc190eXBlIHRyYW5zcG9ydCwKPiAtwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgdWludDhfdCB1dWlkWzE2XSwKPiAtwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg dWludDE2X3QgbWF4X2VsZSwKPiAtwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgdWludDMy X3QgdGltZW91dCwgLyogaW4gc2Vjb25kcyBmcm9tIG1lc2guY29uZiAqLwo+ICtzdGF0aWMgdm9p ZCBpbml0aWF0ZV90byhzdHJ1Y3QgbF90aW1lb3V0ICp0aW1lb3V0LCB2b2lkICp1c2VyX2RhdGEp Cj4gK3sKPiArwqDCoMKgwqDCoMKgwqBzdHJ1Y3QgbWVzaF9wcm92X2luaXRpYXRvciAqcnhfcHJv diA9IHVzZXJfZGF0YTsKPiArCj4gK8KgwqDCoMKgwqDCoMKgaWYgKHJ4X3Byb3YgIT0gcHJvdikg ewo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBsX3RpbWVvdXRfcmVtb3ZlKHRpbWVv dXQpOwo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqByZXR1cm47Cj4gK8KgwqDCoMKg wqDCoMKgfQo+ICsKPiArwqDCoMKgwqDCoMKgwqBpbnRfcHJvdl9jbG9zZSh1c2VyX2RhdGEsIFBS T1ZfRVJSX1RJTUVPVVQpOwo+ICt9Cj4gKwo+ICtib29sIGluaXRpYXRvcl9zdGFydCh1aW50OF90 IHRyYW5zcG9ydCwgdWludDE2X3Qgc2VydmVyLCB1aW50MTZfdAo+IHN2cl9pZHgsCj4gK8KgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoHVpbnQ4X3QgdXVpZFsxNl0sIHVpbnQxNl90IG1heF9l bGUsIHVpbnQzMl90IHRpbWVvdXQsCj4gwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBz dHJ1Y3QgbWVzaF9hZ2VudCAqYWdlbnQsCj4gwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqBtZXNoX3Byb3ZfaW5pdGlhdG9yX3N0YXJ0X2Z1bmNfdCBzdGFydF9jYiwKPiDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoG1lc2hfcHJvdl9pbml0aWF0b3JfZGF0YV9yZXFfZnVuY190 IGRhdGFfcmVxX2NiLAo+IEBAIC05MDQsNiArOTU4LDEwIEBAIGJvb2wgaW5pdGlhdG9yX3N0YXJ0 KGVudW0gdHJhbnNfdHlwZSB0cmFuc3BvcnQsCj4gwqDCoMKgwqDCoMKgwqDCoHByb3YtPmRhdGFf cmVxX2NiID0gZGF0YV9yZXFfY2I7Cj4gwqDCoMKgwqDCoMKgwqDCoHByb3YtPmNhbGxlcl9kYXRh ID0gY2FsbGVyX2RhdGE7Cj4gwqDCoMKgwqDCoMKgwqDCoHByb3YtPnByZXZpb3VzID0gLTE7Cj4g K8KgwqDCoMKgwqDCoMKgcHJvdi0+c2VydmVyID0gc2VydmVyOwo+ICvCoMKgwqDCoMKgwqDCoHBy b3YtPnN2cl9pZHggPSBzdnJfaWR4Owo+ICvCoMKgwqDCoMKgwqDCoHByb3YtPnRyYW5zcG9ydCA9 IHRyYW5zcG9ydDsKPiArwqDCoMKgwqDCoMKgwqBwcm92LT50aW1lb3V0ID0gbF90aW1lb3V0X2Ny ZWF0ZSh0aW1lb3V0LCBpbml0aWF0ZV90bywgcHJvdiwKPiBOVUxMKTsKPiDCoMKgwqDCoMKgwqDC oMKgbWVtY3B5KHByb3YtPnV1aWQsIHV1aWQsIDE2KTsKPiDCoAo+IMKgwqDCoMKgwqDCoMKgwqBt ZXNoX2FnZW50X3JlZnJlc2gocHJvdi0+YWdlbnQsIGluaXRpYXRvcl9vcGVuX2NiLCBwcm92KTsK PiBAQCAtOTE1LDMgKzk3MywxODIgQEAgdm9pZCBpbml0aWF0b3JfY2FuY2VsKHZvaWQgKnVzZXJf ZGF0YSkKPiDCoHsKPiDCoMKgwqDCoMKgwqDCoMKgaW5pdGlhdG9yX2ZyZWUoKTsKPiDCoH0KPiAr Cj4gK3N0YXRpYyB2b2lkIHJwcl90eCh2b2lkICp1c2VyX2RhdGEsIGNvbnN0IHZvaWQgKmRhdGEs IHVpbnQxNl90IGxlbikKPiArewo+ICvCoMKgwqDCoMKgwqDCoHN0cnVjdCBtZXNoX3Byb3ZfaW5p dGlhdG9yICpwcm92ID0gdXNlcl9kYXRhOwo+ICvCoMKgwqDCoMKgwqDCoHVpbnQ4X3QgbXNnWzcy XTsKPiArwqDCoMKgwqDCoMKgwqBpbnQgbjsKPiArCj4gK8KgwqDCoMKgwqDCoMKgbiA9IG1lc2hf bW9kZWxfb3Bjb2RlX3NldChPUF9SRU1fUFJPVl9QRFVfU0VORCwgbXNnKTsKPiArwqDCoMKgwqDC oMKgwqBtc2dbbisrXSA9ICsrcHJvdi0+b3V0X251bTsKPiArwqDCoMKgwqDCoMKgwqBtZW1jcHko bXNnICsgbiwgZGF0YSwgbGVuKTsKPiArwqDCoMKgwqDCoMKgwqBsX2RlYnVnKCJTZW5kIE9CICUy LjJ4LCB3aXRoIHBhY2tldCB0eXBlICVkIiwgbXNnW25dLCBwcm92LQo+ID5vdXRfbnVtKTsKPiAr wqDCoMKgwqDCoMKgwqBuICs9IGxlbjsKPiArCj4gK8KgwqDCoMKgwqDCoMKgcHJvdi0+cnByX3N0 YXRlID0gUEJfUkVNT1RFX1NUQVRFX09CX1BLVF9UWDsKPiArwqDCoMKgwqDCoMKgwqBtZXNoX21v ZGVsX3NlbmQocHJvdi0+bm9kZSwgMCwgcHJvdi0+c2VydmVyLAo+IEFQUF9JRFhfREVWX1JFTU9U RSwKPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqBwcm92LT5zdnJfaWR4LCBERUZBVUxUX1RUTCwgdHJ1ZSwgbiwKPiBtc2cpOwo+ ICt9Cj4gKwo+ICtzdGF0aWMgYm9vbCBtYXRjaF9yZXFfbm9kZShjb25zdCB2b2lkICphLCBjb25z dCB2b2lkICpiKQo+ICt7Cj4gK8KgwqDCoMKgwqDCoMKgY29uc3Qgc3RydWN0IHNjYW5fcmVxICpy ZXEgPSBhOwo+ICvCoMKgwqDCoMKgwqDCoGNvbnN0IHN0cnVjdCBtZXNoX25vZGUgKm5vZGUgPSBi Owo+ICsKPiArwqDCoMKgwqDCoMKgwqByZXR1cm4gcmVxLT5ub2RlID09IG5vZGU7Cj4gK30KPiAr Cj4gK3N0YXRpYyBib29sIHJlbXBydl9jbGlfcGt0KHVpbnQxNl90IHNyYywgdWludDE2X3QgdW5p Y2FzdCwgdWludDE2X3QKPiBhcHBfaWR4LAo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqB1aW50MTZf dCBuZXRfaWR4LCBjb25zdAo+IHVpbnQ4X3QgKmRhdGEsCj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oHVpbnQxNl90IHNpemUsIGNvbnN0IHZvaWQKPiAqdXNlcl9kYXRhKQo+ICt7Cj4gK8KgwqDCoMKg wqDCoMKgc3RydWN0IG1lc2hfbm9kZSAqbm9kZSA9IChzdHJ1Y3QgbWVzaF9ub2RlICopIHVzZXJf ZGF0YTsKPiArwqDCoMKgwqDCoMKgwqBjb25zdCB1aW50OF90ICpwa3QgPSBkYXRhOwo+ICvCoMKg wqDCoMKgwqDCoHN0cnVjdCBzY2FuX3JlcSAqcmVxOwo+ICvCoMKgwqDCoMKgwqDCoHVpbnQzMl90 IG9wY29kZTsKPiArwqDCoMKgwqDCoMKgwqB1aW50MTZfdCBuOwo+ICsKPiArwqDCoMKgwqDCoMKg wqBpZiAobWVzaF9tb2RlbF9vcGNvZGVfZ2V0KHBrdCwgc2l6ZSwgJm9wY29kZSwgJm4pKSB7Cj4g K8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoHNpemUgLT0gbjsKPiArwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgcGt0ICs9IG47Cj4gK8KgwqDCoMKgwqDCoMKgfSBlbHNlCj4gK8Kg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoHJldHVybiBmYWxzZTsKPiArCj4gK8KgwqDCoMKg wqDCoMKgaWYgKG9wY29kZSA8IE9QX1JFTV9QUk9WX1NDQU5fQ0FQX0dFVCB8fAo+ICvCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqBvcGNvZGUgPgo+IE9QX1JFTV9QUk9WX1BEVV9SRVBPUlQpCj4gK8KgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoHJldHVybiBmYWxzZTsKPiArCj4gK8KgwqDCoMKgwqDC oMKgaWYgKGFwcF9pZHggIT0gQVBQX0lEWF9ERVZfUkVNT1RFICYmIGFwcF9pZHggIT0KPiBBUFBf SURYX0RFVl9MT0NBTCkKPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgcmV0dXJuIHRy dWU7Cj4gKwo+ICvCoMKgwqDCoMKgwqDCoC8qIExvY2FsIERldiBrZXkgb25seSBhbGxvd2VkIGZv ciBMb29wLWJhY2tzICovCj4gK8KgwqDCoMKgwqDCoMKgaWYgKGFwcF9pZHggPT0gQVBQX0lEWF9E RVZfTE9DQUwgJiYgdW5pY2FzdCAhPSBzcmMpCj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoHJldHVybiB0cnVlOwo+ICsKPiArwqDCoMKgwqDCoMKgwqBpZiAocHJvdiAmJiAocHJvdi0+ c2VydmVyICE9IHNyYyB8fCBwcm92LT5ub2RlICE9IG5vZGUpKQo+ICvCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqByZXR1cm4gdHJ1ZTsKPiArCj4gK8KgwqDCoMKgwqDCoMKgbiA9IDA7Cj4g Kwo+ICvCoMKgwqDCoMKgwqDCoHN3aXRjaCAob3Bjb2RlKSB7Cj4gK8KgwqDCoMKgwqDCoMKgZGVm YXVsdDoKPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgcmV0dXJuIGZhbHNlOwo+ICsK PiArwqDCoMKgwqDCoMKgwqAvKiBQcm92aXNpb25pbmcgT3Bjb2RlcyAqLwo+ICvCoMKgwqDCoMKg wqDCoGNhc2UgT1BfUkVNX1BST1ZfTElOS19TVEFUVVM6Cj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoGlmIChzaXplICE9IDIgfHwgIXByb3YpCj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBicmVhazsKPiArCj4gK8KgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoGlmIChwa3RbMF0gPT0gUEJfUkVNX0VSUl9TVUNDRVNTKQo+ICvCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgcHJvdi0+cnByX3N0YXRlID0g cGt0WzFdOwo+ICsKPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgYnJlYWs7Cj4gKwo+ ICvCoMKgwqDCoMKgwqDCoGNhc2UgT1BfUkVNX1BST1ZfTElOS19SRVBPUlQ6Cj4gK8KgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoGlmIChzaXplICE9IDIgfHwgIXByb3YpCj4gK8KgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqByZXR1cm4gdHJ1ZTsKPiArCj4g K8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoGlmIChwa3RbMF0gIT0gUEJfUkVNX0VSUl9T VUNDRVNTKSB7Cj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqBpZiAocGt0WzBdID09IFBCX1JFTV9FUlJfQ0xPU0VEX0JZX0RFVklDRSB8fAo+ICvCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoHBr dFswXSA9PQo+IFBCX1JFTV9FUlJfQ0xPU0VEX0JZX1NFUlZFUikKPiArwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBpbnRfcHJvdl9j bG9zZShwcm92LCBwa3RbMV0pOwo+ICsKPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoGJyZWFrOwo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqB9 Cj4gKwo+ICsKPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgaWYgKHByb3YtPnJwcl9z dGF0ZSA9PSBQQl9SRU1PVEVfU1RBVEVfTElOS19PUEVOSU5HKQo+ICvCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgaW50X3Byb3Zfb3Blbihwcm92LCBycHJfdHgs IHByb3YsIHByb3YtCj4gPnRyYW5zcG9ydCk7Cj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoGVsc2UgaWYgKHByb3YtPnJwcl9zdGF0ZSA9PQo+IFBCX1JFTU9URV9TVEFURV9MSU5LX0NM T1NJTkcpIHsKPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oHByb3YtPnJwcl9zdGF0ZSA9IFBCX1JFTU9URV9TVEFURV9JRExFOwo+ICvCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgaW50X3Byb3ZfY2xvc2UocHJvdiwgcGt0 WzFdKTsKPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoGJy ZWFrOwo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqB9Cj4gKwo+ICvCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqBwcm92LT5ycHJfc3RhdGUgPSBwa3RbMV07Cj4gKwo+ICvCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBicmVhazsKPiArCj4gK8KgwqDCoMKgwqDCoMKgY2Fz ZSBPUF9SRU1fUFJPVl9QRFVfUkVQT1JUOgo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqBpbnRfcHJvdl9yeChwcm92LCBwa3QgKyAxLCBzaXplIC0gMSk7Cj4gK8KgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoGJyZWFrOwo+ICsKPiArwqDCoMKgwqDCoMKgwqBjYXNlIE9QX1JFTV9Q Uk9WX1BEVV9PQl9SRVBPUlQ6Cj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoGlmIChz aXplICE9IDEgfHwgIXByb3YpCj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqBicmVhazsKPiArCj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoGxf ZGVidWcoIkdvdCBBY2sgZm9yIE9CICVkIiwgcGt0WzBdKTsKPiArwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgaWYgKHByb3YtPnJwcl9zdGF0ZSA9PSBQQl9SRU1PVEVfU1RBVEVfT0JfUEtU X1RYICYmCj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgcGt0WzBdID09Cj4gcHJvdi0+b3V0X251bSkKPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoGludF9wcm92X2Fjayhwcm92LCBwa3RbMF0pOwo+ICsK PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgYnJlYWs7Cj4gKwo+ICvCoMKgwqDCoMKg wqDCoC8qIFNjYW4gT3Bjb2RlcyAqLwo+ICvCoMKgwqDCoMKgwqDCoGNhc2UgT1BfUkVNX1BST1Zf U0NBTl9DQVBfU1RBVFVTOgo+ICvCoMKgwqDCoMKgwqDCoGNhc2UgT1BfUkVNX1BST1ZfU0NBTl9T VEFUVVM6Cj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoGJyZWFrOwo+ICsKPiArwqDC oMKgwqDCoMKgwqBjYXNlIE9QX1JFTV9QUk9WX1NDQU5fUkVQT1JUOgo+ICvCoMKgwqDCoMKgwqDC oGNhc2UgT1BfUkVNX1BST1ZfRVhUX1NDQU5fUkVQT1JUOgo+ICvCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqByZXEgPSBsX3F1ZXVlX2ZpbmQoc2NhbnMsIG1hdGNoX3JlcV9ub2RlLCBub2Rl KTsKPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgaWYgKHJlcSkgewo+ICvCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgcmVxLT5zY2FuX3Jlc3VsdChu b2RlLCBzcmMsCj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgb3Bjb2RlID09Cj4gT1BfUkVNX1BST1ZfRVhUX1NDQU5fUkVQT1JU LAo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoHBrdCwgc2l6ZSk7Cj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoH0K PiArwqDCoMKgwqDCoMKgwqB9Cj4gKwo+ICvCoMKgwqDCoMKgwqDCoHJldHVybiB0cnVlOwo+ICt9 Cj4gKwo+ICt2b2lkIGluaXRpYXRvcl9zY2FuX3JlZyhtZXNoX3Byb3ZfaW5pdGlhdG9yX3NjYW5f cmVzdWx0X3QKPiBzY2FuX3Jlc3VsdCwKPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgdm9pZAo+ICp1c2VyX2RhdGEp Cj4gK3sKPiArwqDCoMKgwqDCoMKgwqBzdHJ1Y3Qgc2Nhbl9yZXEgKnJlcTsKPiArCj4gK8KgwqDC oMKgwqDCoMKgaWYgKCFzY2FucykKPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgc2Nh bnMgPSBsX3F1ZXVlX25ldygpOwo+ICsKPiArwqDCoMKgwqDCoMKgwqByZXEgPSBsX3F1ZXVlX2Zp bmQoc2NhbnMsIG1hdGNoX3JlcV9ub2RlLCB1c2VyX2RhdGEpOwo+ICvCoMKgwqDCoMKgwqDCoGlm ICghcmVxKSB7Cj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoHJlcSA9IGxfbmV3KHN0 cnVjdCBzY2FuX3JlcSwgMSk7Cj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoGxfcXVl dWVfcHVzaF9oZWFkKHNjYW5zLCByZXEpOwo+ICvCoMKgwqDCoMKgwqDCoH0KPiArCj4gK8KgwqDC oMKgwqDCoMKgcmVxLT5zY2FuX3Jlc3VsdCA9IHNjYW5fcmVzdWx0Owo+ICvCoMKgwqDCoMKgwqDC oHJlcS0+bm9kZSA9IHVzZXJfZGF0YTsKPiArwqDCoMKgwqDCoMKgwqByZXEtPmNvdW50Kys7Cj4g K30KPiArCj4gK3ZvaWQgaW5pdGlhdG9yX3NjYW5fdW5yZWcodm9pZCAqdXNlcl9kYXRhKQo+ICt7 Cj4gK8KgwqDCoMKgwqDCoMKgc3RydWN0IHNjYW5fcmVxICpyZXE7Cj4gKwo+ICvCoMKgwqDCoMKg wqDCoHJlcSA9IGxfcXVldWVfZmluZChzY2FucywgbWF0Y2hfcmVxX25vZGUsIHVzZXJfZGF0YSk7 Cj4gK8KgwqDCoMKgwqDCoMKgaWYgKHJlcSkgewo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqByZXEtPmNvdW50LS07Cj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoGlmICgh cmVxLT5jb3VudCkgewo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgbF9xdWV1ZV9yZW1vdmUoc2NhbnMsIHJlcSk7Cj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBsX2ZyZWUocmVxKTsKPiArwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgfQo+ICvCoMKgwqDCoMKgwqDCoH0KPiArfQo+ICsKPiArc3RhdGljIHZv aWQgcmVtcHJ2X2NsaV91bnJlZ2lzdGVyKHZvaWQgKnVzZXJfZGF0YSkKPiArewo+ICt9Cj4gKwo+ ICtzdGF0aWMgY29uc3Qgc3RydWN0IG1lc2hfbW9kZWxfb3BzIG9wcyA9IHsKPiArwqDCoMKgwqDC oMKgwqAudW5yZWdpc3RlciA9IHJlbXBydl9jbGlfdW5yZWdpc3RlciwKPiArwqDCoMKgwqDCoMKg wqAucmVjdiA9IHJlbXBydl9jbGlfcGt0LAo+ICvCoMKgwqDCoMKgwqDCoC5iaW5kID0gTlVMTCwK PiArwqDCoMKgwqDCoMKgwqAuc3ViID0gTlVMTCwKPiArwqDCoMKgwqDCoMKgwqAucHViID0gTlVM TAo+ICt9Owo+ICsKPiArdm9pZCByZW1vdGVfcHJvdl9jbGllbnRfaW5pdChzdHJ1Y3QgbWVzaF9u b2RlICpub2RlLCB1aW50OF90Cj4gZWxlX2lkeCkKPiArewo+ICvCoMKgwqDCoMKgwqDCoG1lc2hf bW9kZWxfcmVnaXN0ZXIobm9kZSwgZWxlX2lkeCwgUkVNX1BST1ZfQ0xJX01PREVMLCAmb3BzLAo+ IG5vZGUpOwo+ICt9Cj4gZGlmZiAtLWdpdCBhL21lc2gvcHJvdi5oIGIvbWVzaC9wcm92LmgKPiBp bmRleCA5OWU4NjRjNTAuLmU4NjY2OGZlNCAxMDA2NDQKPiAtLS0gYS9tZXNoL3Byb3YuaAo+ICsr KyBiL21lc2gvcHJvdi5oCj4gQEAgLTM5LDE0ICszOSwxNCBAQCBlbnVtIG1lc2hfcHJvdl9tb2Rl IHsKPiDCoAo+IMKgc3RydWN0IG1lc2hfcHJvdjsKPiDCoAo+IC10eXBlZGVmIHZvaWQgKCpwcm92 X3RyYW5zX3R4X3QpKHZvaWQgKnRyYW5zX2RhdGEsIHZvaWQgKmRhdGEsCj4gdWludDE2X3QgbGVu KTsKPiArdHlwZWRlZiB2b2lkICgqcHJvdl90cmFuc190eF90KSh2b2lkICp0eF9kYXRhLCBjb25z dCB2b2lkICpkYXRhLAo+IHVpbnQxNl90IGxlbik7Cj4gwqB0eXBlZGVmIHZvaWQgKCptZXNoX3By b3Zfb3Blbl9mdW5jX3QpKHZvaWQgKnVzZXJfZGF0YSwKPiBwcm92X3RyYW5zX3R4X3QgdHJhbnNf dHgsCj4gwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqB2b2lkICp0cmFuc19kYXRhLCB1aW50OF90Cj4g dHJhbnNfdHlwZSk7Cj4gwqAKPiDCoHR5cGVkZWYgdm9pZCAoKm1lc2hfcHJvdl9jbG9zZV9mdW5j X3QpKHZvaWQgKnVzZXJfZGF0YSwgdWludDhfdAo+IHJlYXNvbik7Cj4gwqB0eXBlZGVmIHZvaWQg KCptZXNoX3Byb3Zfc2VuZF9mdW5jX3QpKGJvb2wgc3VjY2Vzcywgc3RydWN0IG1lc2hfcHJvdgo+ ICpwcm92KTsKPiDCoHR5cGVkZWYgdm9pZCAoKm1lc2hfcHJvdl9hY2tfZnVuY190KSh2b2lkICp1 c2VyX2RhdGEsIHVpbnQ4X3QKPiBtc2dfbnVtKTsKPiAtdHlwZWRlZiB2b2lkICgqbWVzaF9wcm92 X3JlY2VpdmVfZnVuY190KSh2b2lkICp1c2VyX2RhdGEsIGNvbnN0Cj4gdWludDhfdCAqZGF0YSwK PiArdHlwZWRlZiB2b2lkICgqbWVzaF9wcm92X3JlY2VpdmVfZnVuY190KSh2b2lkICp1c2VyX2Rh dGEsIGNvbnN0IHZvaWQKPiAqZGF0YSwKPiDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoHVpbnQxCj4gNl90IHNpemUp Owo+IMKgCj4gwqAKPiBkaWZmIC0tZ2l0IGEvbWVzaC9wcm92aXNpb24uaCBiL21lc2gvcHJvdmlz aW9uLmgKPiBpbmRleCAxNjM0YzRkNDAuLmNmZWI2ZGViYSAxMDA2NDQKPiAtLS0gYS9tZXNoL3By b3Zpc2lvbi5oCj4gKysrIGIvbWVzaC9wcm92aXNpb24uaAo+IEBAIC03MCwxMCArNzAsMTEgQEAg c3RydWN0IG1lc2hfYWdlbnQ7Cj4gwqAjZGVmaW5lIE9PQl9JTkZPX1VSSV9IQVNIwqDCoMKgwqDC oMKgMHgwMDAyCj4gwqAKPiDCoC8qIFBCX1JFTU9URSBub3Qgc3VwcG9ydGVkIGZyb20gdW5wcm92 aXNpb25lZCBzdGF0ZSAqLwo+IC1lbnVtIHRyYW5zX3R5cGUgewo+IC3CoMKgwqDCoMKgwqDCoFBC X0FEViA9IDAsCj4gLcKgwqDCoMKgwqDCoMKgUEJfR0FUVCwKPiAtfTsKPiArI2RlZmluZSBQQl9O UFBJXzAwwqDCoMKgwqDCoDB4MDAKPiArI2RlZmluZSBQQl9OUFBJXzAxwqDCoMKgwqDCoDB4MDEK PiArI2RlZmluZSBQQl9OUFBJXzAywqDCoMKgwqDCoDB4MDIKPiArI2RlZmluZSBQQl9BRFbCoMKg wqDCoMKgwqDCoMKgwqAweDAzIC8qIEludGVybmFsIG9ubHksIGFuZCBtYXkgYmUgcmVhc3NpZ25l ZAo+ICovCj4gKyNkZWZpbmUgUEJfR0FUVMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg MHgwNCAvKiBJbnRlcm5hbCBvbmx5LCBhbmQgbWF5IGJlCj4gcmVhc3NpZ25lZCAqLwo+IMKgCj4g wqAjZGVmaW5lIFBST1ZfRkxBR19LUsKgwqDCoDB4MDEKPiDCoCNkZWZpbmUgUFJPVl9GTEFHX0lW VcKgwqAweDAyCj4gQEAgLTEwMSwxNSArMTAyLDIxIEBAIHR5cGVkZWYgYm9vbAo+ICgqbWVzaF9w cm92X2luaXRpYXRvcl9jb21wbGV0ZV9mdW5jX3QpKHZvaWQgKnVzZXJfZGF0YSwKPiDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoHVpbnQ4X3Qgc3RhdHVzLAo+IMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg c3RydWN0IG1lc2hfcHJvdl9ub2RlX2luZm8KPiAqaW5mbyk7Cj4gwqAKPiArdHlwZWRlZiB2b2lk ICgqbWVzaF9wcm92X2luaXRpYXRvcl9zY2FuX3Jlc3VsdF90KSh2b2lkICp1c2VyX2RhdGEsCj4g K8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoHVpbnQxNl90IHNlcnZlciwgYm9vbAo+IGV4dGVuZGVkLAo+ ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBjb25zdCB1aW50OF90ICpkYXRhLCB1aW50MTZfdAo+IGxl bik7Cj4gKwo+IMKgLyogVGhpcyBzdGFydHMgdW5wcm92aXNpb25lZCBkZXZpY2UgYmVhY29uICov Cj4gLWJvb2wgYWNjZXB0b3Jfc3RhcnQodWludDhfdCBudW1fZWxlLCB1aW50OF90IHV1aWRbMTZd LAo+ICtib29sIGFjY2VwdG9yX3N0YXJ0KHVpbnQ4X3QgbnVtX2VsZSwgdWludDhfdCAqdXVpZCwK PiDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqB1aW50MTZf dCBhbGdvcml0aG1zLCB1aW50MzJfdCB0aW1lb3V0LAo+IMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoHN0cnVjdCBtZXNoX2FnZW50ICphZ2VudCwKPiDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBtZXNoX3Byb3ZfYWNj ZXB0b3JfY29tcGxldGVfZnVuY190Cj4gY29tcGxldGVfY2IsCj4gwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgdm9pZCAqY2FsbGVyX2RhdGEpOwo+IMKgdm9p ZCBhY2NlcHRvcl9jYW5jZWwodm9pZCAqdXNlcl9kYXRhKTsKPiDCoAo+IC1ib29sIGluaXRpYXRv cl9zdGFydChlbnVtIHRyYW5zX3R5cGUgdHJhbnNwb3J0LAo+ICtib29sIGluaXRpYXRvcl9zdGFy dCh1aW50OF90IHRyYW5zcG9ydCwKPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgdWlu dDE2X3Qgc2VydmVyLAo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqB1aW50MTZfdCBz dnJfaWR4LAo+IMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgdWludDhfdCB1dWlkWzE2 XSwKPiDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoHVpbnQxNl90IG1heF9lbGUsCj4g wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqB1aW50MzJfdCB0aW1lb3V0LCAvKiBpbiBz ZWNvbmRzIGZyb20gbWVzaC5jb25mICovCj4gQEAgLTEyMCwzICsxMjcsNyBAQCBib29sIGluaXRp YXRvcl9zdGFydChlbnVtIHRyYW5zX3R5cGUgdHJhbnNwb3J0LAo+IMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgdm9pZCAqbm9kZSwgdm9pZCAqY2FsbGVyX2RhdGEpOwo+IMKgdm9pZCBp bml0aWF0b3JfcHJvdl9kYXRhKHVpbnQxNl90IG5ldF9pZHgsIHVpbnQxNl90IHByaW1hcnksIHZv aWQKPiAqY2FsbGVyX2RhdGEpOwo+IMKgdm9pZCBpbml0aWF0b3JfY2FuY2VsKHZvaWQgKmNhbGxl cl9kYXRhKTsKPiArCj4gK3ZvaWQgaW5pdGlhdG9yX3NjYW5fcmVnKG1lc2hfcHJvdl9pbml0aWF0 b3Jfc2Nhbl9yZXN1bHRfdAo+IHNjYW5fcmVzdWx0LAo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoHZvaWQKPiAqdXNlcl9kYXRhKTsKPiArdm9p ZCBpbml0aWF0b3Jfc2Nhbl91bnJlZyh2b2lkICpjYWxsZXJfZGF0YSk7Cj4gZGlmZiAtLWdpdCBh L21lc2gvcmVtcHJ2LXNlcnZlci5jIGIvbWVzaC9yZW1wcnYtc2VydmVyLmMKPiBuZXcgZmlsZSBt b2RlIDEwMDY0NAo+IGluZGV4IDAwMDAwMDAwMC4uZTI0NzU4MDkzCj4gLS0tIC9kZXYvbnVsbAo+ ICsrKyBiL21lc2gvcmVtcHJ2LXNlcnZlci5jCj4gQEAgLTAsMCArMSw5MDcgQEAKPiArLyoKPiAr ICoKPiArICrCoCBCbHVlWiAtIEJsdWV0b290aCBwcm90b2NvbCBzdGFjayBmb3IgTGludXgKPiAr ICoKPiArICrCoCBDb3B5cmlnaHQgKEMpIDIwMjDCoCBJbnRlbCBDb3Jwb3JhdGlvbi4gQWxsIHJp Z2h0cyByZXNlcnZlZC4KPiArICoKPiArICoKPiArICrCoCBUaGlzIGxpYnJhcnkgaXMgZnJlZSBz b2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCj4gKyAqwqAgbW9kaWZ5IGl0 IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYwo+ICsgKsKg IExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVp dGhlcgo+ICsgKsKgIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRp b24pIGFueSBsYXRlcgo+IHZlcnNpb24uCj4gKyAqCj4gKyAqwqAgVGhpcyBsaWJyYXJ5IGlzIGRp c3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCj4gKyAqwqAgYnV0 IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkg b2YKPiArICrCoCBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBV UlBPU0UuwqAgU2VlIHRoZQo+IEdOVQo+ICsgKsKgIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNl bnNlIGZvciBtb3JlIGRldGFpbHMuCj4gKyAqCj4gKyAqLwo+ICsKPiArI2lmZGVmIEhBVkVfQ09O RklHX0gKPiArI2luY2x1ZGUgPGNvbmZpZy5oPgo+ICsjZW5kaWYKPiArCj4gKyNpbmNsdWRlIDxz eXMvdGltZS5oPgo+ICsjaW5jbHVkZSA8ZWxsL2VsbC5oPgo+ICsKPiArI2luY2x1ZGUgInNyYy9z aGFyZWQvYWQuaCIKPiArCj4gKyNpbmNsdWRlICJtZXNoL21lc2gtZGVmcy5oIgo+ICsjaW5jbHVk ZSAibWVzaC9tZXNoLWlvLmgiCj4gKyNpbmNsdWRlICJtZXNoL3V0aWwuaCIKPiArI2luY2x1ZGUg Im1lc2gvbm9kZS5oIgo+ICsjaW5jbHVkZSAibWVzaC9uZXQuaCIKPiArI2luY2x1ZGUgIm1lc2gv YXBwa2V5LmgiCj4gKyNpbmNsdWRlICJtZXNoL21vZGVsLmgiCj4gKyNpbmNsdWRlICJtZXNoL3By b3YuaCIKPiArI2luY2x1ZGUgIm1lc2gvcHJvdmlzaW9uLmgiCj4gKyNpbmNsdWRlICJtZXNoL3Bi LWFkdi5oIgo+ICsjaW5jbHVkZSAibWVzaC9yZW1wcnYuaCIKPiArCj4gKyNkZWZpbmUgRVhUX0xJ U1RfU0laRcKgwqA2MAo+ICsKPiArI2RlZmluZSBSUFJfREVWX0tFWcKgwqDCoMKgMHgwMAo+ICsj ZGVmaW5lIFJQUl9BRERSwqDCoMKgwqDCoMKgwqAweDAxCj4gKyNkZWZpbmUgUlBSX0NPTVDCoMKg wqDCoMKgwqDCoDB4MDIKPiArI2RlZmluZSBSUFJfQURWwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqAweEZGwqDCoMKgwqAvKiBJbnRlcm5hbCB1c2Ugb25seSovCj4gKwo+ICtzdHJ1Y3Qg cmVtX3NjYW5fZGF0YSB7Cj4gK8KgwqDCoMKgwqDCoMKgc3RydWN0IG1lc2hfbm9kZSAqbm9kZTsK PiArwqDCoMKgwqDCoMKgwqBzdHJ1Y3QgbF90aW1lb3V0ICp0aW1lb3V0Owo+ICvCoMKgwqDCoMKg wqDCoHVpbnQ4X3QgKmxpc3Q7Cj4gK8KgwqDCoMKgwqDCoMKgdWludDE2X3QgY2xpZW50Owo+ICvC oMKgwqDCoMKgwqDCoHVpbnQxNl90IG9vYl9pbmZvOwo+ICvCoMKgwqDCoMKgwqDCoHVpbnQxNl90 IG5ldF9pZHg7Cj4gK8KgwqDCoMKgwqDCoMKgdWludDhfdCBzdGF0ZTsKPiArwqDCoMKgwqDCoMKg wqB1aW50OF90IHNjYW5uZWRfbGltaXQ7Cj4gK8KgwqDCoMKgwqDCoMKgdWludDhfdCBhZGRyWzZd Owo+ICvCoMKgwqDCoMKgwqDCoHVpbnQ4X3QgdXVpZFsxNl07Cj4gK8KgwqDCoMKgwqDCoMKgdWlu dDhfdCB0b19zZWNzOwo+ICvCoMKgwqDCoMKgwqDCoHVpbnQ4X3QgcnhlZF9hZHM7Cj4gK8KgwqDC oMKgwqDCoMKgdWludDhfdCBleHRfY250Owo+ICvCoMKgwqDCoMKgwqDCoGJvb2wgZmx0cjsKPiAr wqDCoMKgwqDCoMKgwqB1aW50OF90IGV4dFswXTsKPiArfTsKPiArCj4gK3N0YXRpYyBzdHJ1Y3Qg cmVtX3NjYW5fZGF0YSAqcnBiX3NjYW47Cj4gKwo+ICtzdHJ1Y3QgcmVtX3Byb3ZfZGF0YSB7Cj4g K8KgwqDCoMKgwqDCoMKgc3RydWN0IG1lc2hfbm9kZSAqbm9kZTsKPiArwqDCoMKgwqDCoMKgwqBz dHJ1Y3QgbF90aW1lb3V0ICp0aW1lb3V0Owo+ICvCoMKgwqDCoMKgwqDCoHZvaWQgKnRyYW5zX2Rh dGE7Cj4gK8KgwqDCoMKgwqDCoMKgdWludDE2X3QgY2xpZW50Owo+ICvCoMKgwqDCoMKgwqDCoHVp bnQxNl90IG5ldF9pZHg7Cj4gK8KgwqDCoMKgwqDCoMKgdWludDhfdCBzdnJfcGR1X251bTsKPiAr wqDCoMKgwqDCoMKgwqB1aW50OF90IGNsaV9wZHVfbnVtOwo+ICvCoMKgwqDCoMKgwqDCoHVpbnQ4 X3Qgc3RhdGU7Cj4gK8KgwqDCoMKgwqDCoMKgdWludDhfdCBucHBpX3Byb2M7Cj4gK8KgwqDCoMKg wqDCoMKgdW5pb24gewo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBzdHJ1Y3Qgewo+ ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgbWVzaF9wcm92 X29wZW5fZnVuY190IG9wZW5fY2I7Cj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqBtZXNoX3Byb3ZfY2xvc2VfZnVuY190IGNsb3NlX2NiOwo+ICvCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgbWVzaF9wcm92X3JlY2VpdmVf ZnVuY190IHJ4X2NiOwo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgbWVzaF9wcm92X2Fja19mdW5jX3QgYWNrX2NiOwo+ICvCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgc3RydWN0IG1lc2hfcHJvdl9ub2RlX2luZm8gaW5m bzsKPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgfSBucHBpOwo+ICvCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqBzdHJ1Y3Qgewo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgdWludDhfdCB1dWlkWzE3XTsKPiArwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoHByb3ZfdHJhbnNfdHhfdCB0eDsKPiArwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgfSBhZHY7Cj4gK8KgwqDCoMKgwqDCoMKgfSB1Owo+ ICt9Owo+ICsKPiArc3RhdGljIHN0cnVjdCByZW1fcHJvdl9kYXRhICpycGJfcHJvdjsKPiArCj4g K3N0YXRpYyBjb25zdCB1aW50OF90IHBydmJbMl0gPSB7QlRfQURfTUVTSF9CRUFDT04sIDB4MDB9 Owo+ICtzdGF0aWMgY29uc3QgdWludDhfdCBwa3RfZmlsdGVyID0gQlRfQURfTUVTSF9QUk9WOwo+ ICtzdGF0aWMgY29uc3QgY2hhciAqbmFtZSA9ICJUZXN0IE5hbWUiOwo+ICsKPiArc3RhdGljIGNv bnN0IHVpbnQ4X3QgemVyb1tdID0gezAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAs Cj4gMCwgMCwgMCwgMH07Cj4gKwo+ICtzdGF0aWMgdm9pZCBzcnZfb3Blbih2b2lkICp1c2VyX2Rh dGEsIHByb3ZfdHJhbnNfdHhfdCBhZHZfdHgsCj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoHZvaWQg KnRyYW5zX2RhdGEsIHVpbnQ4X3QKPiBucHBpX3Byb2MpCj4gK3sKPiArwqDCoMKgwqDCoMKgwqBz dHJ1Y3QgcmVtX3Byb3ZfZGF0YSAqcHJvdiA9IHVzZXJfZGF0YTsKPiArwqDCoMKgwqDCoMKgwqB1 aW50OF90IG1zZ1s1XTsKPiArwqDCoMKgwqDCoMKgwqBpbnQgbjsKPiArCj4gK8KgwqDCoMKgwqDC oMKgaWYgKHByb3YgIT0gcnBiX3Byb3YgfHwgcHJvdi0+c3RhdGUgIT0KPiBQQl9SRU1PVEVfU1RB VEVfTElOS19PUEVOSU5HKQo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqByZXR1cm47 Cj4gKwo+ICvCoMKgwqDCoMKgwqDCoGxfZGVidWcoIlJlbW90ZSBMaW5rIG9wZW4gY29uZmlybWVk Iik7Cj4gK8KgwqDCoMKgwqDCoMKgcHJvdi0+dS5hZHYudHggPSBhZHZfdHg7Cj4gK8KgwqDCoMKg wqDCoMKgcHJvdi0+dHJhbnNfZGF0YSA9IHRyYW5zX2RhdGE7Cj4gK8KgwqDCoMKgwqDCoMKgcHJv di0+c3RhdGUgPSBQQl9SRU1PVEVfU1RBVEVfTElOS19BQ1RJVkU7Cj4gKwo+ICvCoMKgwqDCoMKg wqDCoG4gPSBtZXNoX21vZGVsX29wY29kZV9zZXQoT1BfUkVNX1BST1ZfTElOS19SRVBPUlQsIG1z Zyk7Cj4gK8KgwqDCoMKgwqDCoMKgbXNnW24rK10gPSBQQl9SRU1fRVJSX1NVQ0NFU1M7Cj4gK8Kg wqDCoMKgwqDCoMKgbXNnW24rK10gPSBwcm92LT5zdGF0ZTsKPiArCj4gK8KgwqDCoMKgwqDCoMKg bWVzaF9tb2RlbF9zZW5kKHByb3YtPm5vZGUsIDAsIHByb3YtPmNsaWVudCwKPiBBUFBfSURYX0RF Vl9MT0NBTCwKPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqBwcm92LT5uZXRfaWR4LCBERUZBVUxUX1RUTCwgdHJ1ZSwgbiwKPiBt c2cpOwo+ICt9Cj4gKwo+ICtzdGF0aWMgdm9pZCBzcnZfcngodm9pZCAqdXNlcl9kYXRhLCBjb25z dCB2b2lkICpkcHRyLCB1aW50MTZfdCBsZW4pCj4gK3sKPiArwqDCoMKgwqDCoMKgwqBzdHJ1Y3Qg cmVtX3Byb3ZfZGF0YSAqcHJvdiA9IHVzZXJfZGF0YTsKPiArwqDCoMKgwqDCoMKgwqBjb25zdCB1 aW50OF90ICpkYXRhID0gZHB0cjsKPiArwqDCoMKgwqDCoMKgwqB1aW50OF90IG1zZ1s2OV07Cj4g K8KgwqDCoMKgwqDCoMKgaW50IG47Cj4gKwo+ICvCoMKgwqDCoMKgwqDCoGlmIChwcm92ICE9IHJw Yl9wcm92IHx8IHByb3YtPnN0YXRlIDwKPiBQQl9SRU1PVEVfU1RBVEVfTElOS19BQ1RJVkUgfHwK PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgbGVuID4KPiA2NSkKPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgcmV0dXJuOwo+ICsKPiArwqDCoMKgwqDCoMKgwqBsX2RlYnVnKCJSZW1vdGUgUEIgSUItUERV Iik7Cj4gKwo+ICvCoMKgwqDCoMKgwqDCoHByb3YtPnN2cl9wZHVfbnVtKys7Cj4gK8KgwqDCoMKg wqDCoMKgbiA9IG1lc2hfbW9kZWxfb3Bjb2RlX3NldChPUF9SRU1fUFJPVl9QRFVfUkVQT1JULCBt c2cpOwo+ICvCoMKgwqDCoMKgwqDCoG1zZ1tuKytdID0gcHJvdi0+c3ZyX3BkdV9udW07Cj4gK8Kg wqDCoMKgwqDCoMKgbWVtY3B5KG1zZyArIG4sIGRhdGEsIGxlbik7Cj4gK8KgwqDCoMKgwqDCoMKg biArPSBsZW47Cj4gKwo+ICvCoMKgwqDCoMKgwqDCoG1lc2hfbW9kZWxfc2VuZChwcm92LT5ub2Rl LCAwLCBwcm92LT5jbGllbnQsCj4gQVBQX0lEWF9ERVZfTE9DQUwsCj4gK8KgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgcHJvdi0+bmV0 X2lkeCwgREVGQVVMVF9UVEwsIHRydWUsIG4sCj4gbXNnKTsKPiArfQo+ICsKPiArc3RhdGljIHZv aWQgc3J2X2Fjayh2b2lkICp1c2VyX2RhdGEsIHVpbnQ4X3QgbXNnX251bSkKPiArewo+ICvCoMKg wqDCoMKgwqDCoHN0cnVjdCByZW1fcHJvdl9kYXRhICpwcm92ID0gdXNlcl9kYXRhOwo+ICvCoMKg wqDCoMKgwqDCoHVpbnQ4X3QgbXNnWzRdOwo+ICvCoMKgwqDCoMKgwqDCoGludCBuOwo+ICsKPiAr wqDCoMKgwqDCoMKgwqBpZiAocHJvdiAhPSBycGJfcHJvdiB8fCBwcm92LT5zdGF0ZSAhPQo+IFBC X1JFTU9URV9TVEFURV9PQl9QS1RfVFgpCj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oHJldHVybjsKPiArCj4gK8KgwqDCoMKgwqDCoMKgbF9kZWJ1ZygiUmVtb3RlIFBCIEFDSyIpOwo+ ICsKPiArwqDCoMKgwqDCoMKgwqBwcm92LT5zdGF0ZSA9IFBCX1JFTU9URV9TVEFURV9MSU5LX0FD VElWRTsKPiArwqDCoMKgwqDCoMKgwqBuID0gbWVzaF9tb2RlbF9vcGNvZGVfc2V0KE9QX1JFTV9Q Uk9WX1BEVV9PQl9SRVBPUlQsIG1zZyk7Cj4gK8KgwqDCoMKgwqDCoMKgbXNnW24rK10gPSBwcm92 LT5jbGlfcGR1X251bTsKPiArCj4gK8KgwqDCoMKgwqDCoMKgbWVzaF9tb2RlbF9zZW5kKHByb3Yt Pm5vZGUsIDAsIHByb3YtPmNsaWVudCwKPiBBUFBfSURYX0RFVl9MT0NBTCwKPiArwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBwcm92 LT5uZXRfaWR4LCBERUZBVUxUX1RUTCwgdHJ1ZSwgbiwKPiBtc2cpOwo+ICt9Cj4gKwo+ICtzdGF0 aWMgdm9pZCBzcnZfY2xvc2Uodm9pZCAqdXNlcl9kYXRhLCB1aW50OF90IHJlYXNvbikKPiArewo+ ICvCoMKgwqDCoMKgwqDCoHN0cnVjdCByZW1fcHJvdl9kYXRhICpwcm92ID0gdXNlcl9kYXRhOwo+ ICvCoMKgwqDCoMKgwqDCoHVpbnQ4X3QgbXNnWzRdOwo+ICvCoMKgwqDCoMKgwqDCoGludCBuOwo+ ICsKPiArwqDCoMKgwqDCoMKgwqBpZiAocHJvdiAhPSBycGJfcHJvdiB8fCBwcm92LT5zdGF0ZSA8 Cj4gUEJfUkVNT1RFX1NUQVRFX0xJTktfQUNUSVZFKQo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqByZXR1cm47Cj4gKwo+ICvCoMKgwqDCoMKgwqDCoGxfZGVidWcoIlJlbW90ZSBQQiBD bG9zZSIpOwo+ICsKPiArwqDCoMKgwqDCoMKgwqBwcm92LT5zdGF0ZSA9IFBCX1JFTU9URV9TVEFU RV9MSU5LX0NMT1NJTkc7Cj4gK8KgwqDCoMKgwqDCoMKgbiA9IG1lc2hfbW9kZWxfb3Bjb2RlX3Nl dChPUF9SRU1fUFJPVl9MSU5LX1JFUE9SVCwgbXNnKTsKPiArwqDCoMKgwqDCoMKgwqBtc2dbbisr XSA9IHByb3YtPnN0YXRlOwo+ICvCoMKgwqDCoMKgwqDCoG1zZ1tuKytdID0gcmVhc29uOwo+ICsK PiArwqDCoMKgwqDCoMKgwqBtZXNoX21vZGVsX3NlbmQocHJvdi0+bm9kZSwgMCwgcHJvdi0+Y2xp ZW50LAo+IEFQUF9JRFhfREVWX0xPQ0FMLAo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoHByb3YtPm5ldF9pZHgsIERFRkFVTFRf VFRMLCB0cnVlLCBuLAo+IG1zZyk7Cj4gK30KPiArCj4gK3N0YXRpYyB2b2lkIHNlbmRfcHJvdl9z dGF0dXMoc3RydWN0IHJlbV9wcm92X2RhdGEgKnByb3YsIHVpbnQ4X3QKPiBzdGF0dXMpCj4gK3sK PiArwqDCoMKgwqDCoMKgwqB1aW50MTZfdCBuOwo+ICvCoMKgwqDCoMKgwqDCoHVpbnQ4X3QgbXNn WzVdOwo+ICvCoMKgwqDCoMKgwqDCoGJvb2wgc2VnbWVudGVkID0gcHJvdi0+c3RhdGUgPT0gUEJf UkVNT1RFX1NUQVRFX0xJTktfQ0xPU0lORwo+ID8KPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgdHJ1ZQo+IDogZmFs c2U7Cj4gKwo+ICvCoMKgwqDCoMKgwqDCoG4gPSBtZXNoX21vZGVsX29wY29kZV9zZXQoT1BfUkVN X1BST1ZfTElOS19TVEFUVVMsIG1zZyk7Cj4gK8KgwqDCoMKgwqDCoMKgbXNnW24rK10gPSBzdGF0 dXM7Cj4gK8KgwqDCoMKgwqDCoMKgbXNnW24rK10gPSBwcm92LT5zdGF0ZTsKPiArCj4gK8KgwqDC oMKgwqDCoMKgbF9pbmZvKCJSUEItTGluayBTdGF0dXMoJWQpOiBkc3QgJTQuNHgiLCBwcm92LT5z dGF0ZSwgcHJvdi0KPiA+Y2xpZW50KTsKPiArCj4gK8KgwqDCoMKgwqDCoMKgbWVzaF9tb2RlbF9z ZW5kKHByb3YtPm5vZGUsIDAsIHByb3YtPmNsaWVudCwKPiBBUFBfSURYX0RFVl9MT0NBTCwKPiAr wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqBwcm92LT5uZXRfaWR4LCBERUZBVUxUX1RUTCwKPiBzZWdtZW50ZWQsIG4sIG1zZyk7Cj4g K30KPiArCj4gK3N0YXRpYyB2b2lkIHJlbXBydl9wcm92X2NhbmNlbChzdHJ1Y3QgbF90aW1lb3V0 ICp0aW1lb3V0LAo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgdm9pZCAq dXNlcl9kYXRhKQo+ICt7Cj4gK8KgwqDCoMKgwqDCoMKgc3RydWN0IHJlbV9wcm92X2RhdGEgKnBy b3YgPSB1c2VyX2RhdGE7Cj4gKwo+ICvCoMKgwqDCoMKgwqDCoGlmIChwcm92ICE9IHJwYl9wcm92 KQo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqByZXR1cm47Cj4gKwo+ICvCoMKgwqDC oMKgwqDCoGxfdGltZW91dF9yZW1vdmUocHJvdi0+dGltZW91dCk7Cj4gK8KgwqDCoMKgwqDCoMKg bF9mcmVlKHByb3YpOwo+ICvCoMKgwqDCoMKgwqDCoHJwYl9wcm92ID0gTlVMTDsKPiArfQo+ICsK PiArc3RhdGljIHZvaWQgZGVyZWdpc3Rlcl9leHRfYWRfdHlwZSh1aW50OF90IGFkX3R5cGUpCj4g K3sKPiArwqDCoMKgwqDCoMKgwqB1aW50OF90IHNob3J0X2FkOwo+ICsKPiArwqDCoMKgwqDCoMKg wqBzd2l0Y2ggKGFkX3R5cGUpIHsKPiArwqDCoMKgwqDCoMKgwqBjYXNlIEJUX0FEX01FU0hfQkVB Q09OOgo+ICvCoMKgwqDCoMKgwqDCoGNhc2UgQlRfQURfTUVTSF9EQVRBOgo+ICvCoMKgwqDCoMKg wqDCoGNhc2UgQlRfQURfTUVTSF9QUk9WOgo+ICvCoMKgwqDCoMKgwqDCoGNhc2UgQlRfQURfVVVJ RDE2X1NPTUU6Cj4gK8KgwqDCoMKgwqDCoMKgY2FzZSBCVF9BRF9VVUlEMzJfU09NRToKPiArwqDC oMKgwqDCoMKgwqBjYXNlIEJUX0FEX1VVSUQxMjhfU09NRToKPiArwqDCoMKgwqDCoMKgwqBjYXNl IEJUX0FEX05BTUVfU0hPUlQ6Cj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoHJldHVy bjsKPiArCj4gK8KgwqDCoMKgwqDCoMKgY2FzZSBCVF9BRF9VVUlEMTZfQUxMOgo+ICvCoMKgwqDC oMKgwqDCoGNhc2UgQlRfQURfVVVJRDMyX0FMTDoKPiArwqDCoMKgwqDCoMKgwqBjYXNlIEJUX0FE X1VVSUQxMjhfQUxMOgo+ICvCoMKgwqDCoMKgwqDCoGNhc2UgQlRfQURfTkFNRV9DT01QTEVURToK PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgLyogQXV0b21hdGljYWxseSBnZXQgc2hv cnQgdmVyc2lvbnMgKi8KPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgc2hvcnRfYWQg PSBhZF90eXBlIC0gMTsKPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgbWVzaF9pb19k ZXJlZ2lzdGVyX3JlY3ZfY2IoTlVMTCwgJnNob3J0X2FkLCAxKTsKPiArCj4gK8KgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoC8qIGZhbGwgdGhyb3VnaCAqLwo+ICvCoMKgwqDCoMKgwqDCoGRl ZmF1bHQ6Cj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoG1lc2hfaW9fZGVyZWdpc3Rl cl9yZWN2X2NiKE5VTEwsICZhZF90eXBlLCAxKTsKPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgYnJlYWs7Cj4gK8KgwqDCoMKgwqDCoMKgfQo+ICt9Cj4gKwo+ICtzdGF0aWMgdm9pZCBy ZW1wcnZfc2Nhbl9jYW5jZWwoc3RydWN0IGxfdGltZW91dCAqdGltZW91dCwKPiArwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoHZvaWQgKnVzZXJfZGF0YSkKPiArewo+ICvCoMKg wqDCoMKgwqDCoHN0cnVjdCByZW1fc2Nhbl9kYXRhICpzY2FuID0gdXNlcl9kYXRhOwo+ICvCoMKg wqDCoMKgwqDCoHVpbnQ4X3QgbXNnWzIyICsgRVhUX0xJU1RfU0laRV07Cj4gK8KgwqDCoMKgwqDC oMKgdWludDE2X3QgaSwgbjsKPiArCj4gK8KgwqDCoMKgwqDCoMKgaWYgKCFzY2FuIHx8IHNjYW4g IT0gcnBiX3NjYW4pCj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoHJldHVybjsKPiAr Cj4gK8KgwqDCoMKgwqDCoMKgZm9yIChuID0gMDsgbiA8IHNjYW4tPmV4dF9jbnQ7IG4rKykKPiAr wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgZGVyZWdpc3Rlcl9leHRfYWRfdHlwZShzY2Fu LT5leHRbbl0pOwo+ICsKPiArwqDCoMKgwqDCoMKgwqBpZiAoc2Nhbi0+dGltZW91dCA9PSB0aW1l b3V0KSB7Cj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoC8qIFJldHVybiBFeHRlbmRl ZCBSZXN1bHRzICovCj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoGlmIChzY2FuLT5l eHRfY250KSB7Cj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqAvKiBSZXR1cm4gRXh0ZW5kZWQgUmVzdWx0ICovCj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBuID0gbWVzaF9tb2RlbF9vcGNvZGVfc2V0KAo+ICvCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqBPUF9SRU1fUFJPVl9FWFRfU0NBTl9SRVBPUlQsCj4gbXNnKTsKPiAr wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoG1zZ1tuKytdID0g UEJfUkVNX0VSUl9TVUNDRVNTOwo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgbWVtY3B5KG1zZyArIG4sIHNjYW4tPnV1aWQsIDE2KTsKPiArwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoG4gKz0gMTY7Cj4gKwo+ICvCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgaWYgKHNjYW4tPm9vYl9p bmZvKSB7Cj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgbF9wdXRfbGUxNigwLCBtc2cgKyBuKTsKPiArwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBuICs9IDI7Cj4g K8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqB9Cj4gKwo+ICvC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgaSA9IDA7Cj4gK8Kg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqB3aGlsZSAoc2Nhbi0+ bGlzdFtpXSkgewo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoG1zZ1tuKytdID0gc2Nhbi0+bGlzdFtpXTsKPiArwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBtZW1j cHkobXNnICsgbiwgJnNjYW4tPmxpc3RbaSArIDFdLAo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBzY2FuLQo+ID5s aXN0W2ldKTsKPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqBuICs9IHNjYW4tPmxpc3RbaV07Cj4gK8KgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgaSArPSBzY2FuLT5s aXN0W2ldICsgMTsKPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoH0KPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgfQo+ICvCoMKgwqDCoMKgwqDC oH0KPiArCj4gK8KgwqDCoMKgwqDCoMKgbF90aW1lb3V0X3JlbW92ZShzY2FuLT50aW1lb3V0KTsK PiArwqDCoMKgwqDCoMKgwqBsX2ZyZWUoc2Nhbi0+bGlzdCk7Cj4gK8KgwqDCoMKgwqDCoMKgbF9m cmVlKHNjYW4pOwo+ICvCoMKgwqDCoMKgwqDCoHJwYl9zY2FuID0gTlVMTDsKPiArfQo+ICsKPiAr c3RhdGljIHZvaWQgc2Nhbl9wa3Qodm9pZCAqdXNlcl9kYXRhLCBzdHJ1Y3QgbWVzaF9pb19yZWN2 X2luZm8KPiAqaW5mbywKPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgY29uc3QgdWludDhfdCAqZGF0 YSwgdWludDE2X3QKPiBsZW4pCj4gK3sKPiArwqDCoMKgwqDCoMKgwqBzdHJ1Y3QgcmVtX3NjYW5f ZGF0YSAqc2NhbiA9IHVzZXJfZGF0YTsKPiArwqDCoMKgwqDCoMKgwqB1aW50OF90IG1zZ1syMiAr IEVYVF9MSVNUX1NJWkVdOwo+ICvCoMKgwqDCoMKgwqDCoHVpbnQxNl90IGksIG47Cj4gK8KgwqDC oMKgwqDCoMKgdWludDhfdCBmaWxsZWQgPSAwOwo+ICvCoMKgwqDCoMKgwqDCoGJvb2wgcmVwb3J0 ID0gZmFsc2U7Cj4gKwo+ICvCoMKgwqDCoMKgwqDCoGlmIChzY2FuICE9IHJwYl9zY2FuKQo+ICvC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqByZXR1cm47Cj4gKwo+ICvCoMKgwqDCoMKgwqDC oGlmIChzY2FuLT5leHRfY250KQo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBnb3Rv IGV4dGVuZGVkX3NjYW47Cj4gKwo+ICvCoMKgwqDCoMKgwqDCoC8qIFJYIFVucHJvdmlzaW9uZWQg QmVhY29uICovCj4gK8KgwqDCoMKgwqDCoMKgaWYgKGRhdGFbMF0gIT0gQlRfQURfTUVTSF9CRUFD T04gfHwgZGF0YVsxXSB8fAo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgKGxlbiAhPSAxOCAmJiBsZW4gIT0gMjAgJiYgbGVuICE9IDI0KSkKPiArwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgcmV0dXJuOwo+ICsKPiArwqDCoMKgwqDCoMKgwqBkYXRh ICs9IDI7Cj4gK8KgwqDCoMKgwqDCoMKgbGVuIC09IDI7Cj4gKwo+ICvCoMKgwqDCoMKgwqDCoGZv ciAobiA9IDA7ICFyZXBvcnQgJiYgbiA8IHNjYW4tPnNjYW5uZWRfbGltaXQ7IG4rKykgewo+ICvC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBpZiAoIW1lbWNtcCgmc2Nhbi0+bGlzdFtuICog MTcgKyAxXSwgZGF0YSwgMTYpKSB7Cj4gKwo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgLyogUmVwZWF0IFVVSUQsIGNoZWNrIFJTU0kgKi8KPiArwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoGlmICgoaW50OF90KSBzY2Fu LT5saXN0W24gKiAxN10gPCBpbmZvLT5yc3NpKQo+IHsKPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqByZXBvcnQgPSB0cnVlOwo+ ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoHNjYW4tPmxpc3RbbiAqIDE3XSA9ICh1aW50OF90KSBpbmZvLQo+ID5yc3NpOwo+ICvC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgfQo+ICsKPiArwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgfSBlbHNlIGlmICghbWVtY21wKCZzY2FuLT5saXN0 W24gKiAxNyArIDFdLCB6ZXJvLAo+IDE2KSkgewo+ICsKPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoC8qIEZvdW5kIEVtcHR5IHNsb3QgKi8KPiArwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoHJlcG9ydCA9IHRydWU7Cj4g K8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBzY2FuLT5saXN0 W24gKiAxN10gPSAodWludDhfdCkgaW5mby0+cnNzaTsKPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoG1lbWNweSgmc2Nhbi0+bGlzdFtuICogMTcgKyAxXSwg ZGF0YSwgMTYpOwo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqB9Cj4gKwo+ICvCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBmaWxsZWQrKzsKPiArwqDCoMKgwqDCoMKgwqB9Cj4g Kwo+ICvCoMKgwqDCoMKgwqDCoGlmICghcmVwb3J0KQo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqByZXR1cm47Cj4gKwo+ICvCoMKgwqDCoMKgwqDCoG4gPSBtZXNoX21vZGVsX29wY29k ZV9zZXQoT1BfUkVNX1BST1ZfU0NBTl9SRVBPUlQsIG1zZyk7Cj4gK8KgwqDCoMKgwqDCoMKgbXNn W24rK10gPSAodWludDhfdCkgaW5mby0+cnNzaTsKPiArwqDCoMKgwqDCoMKgwqBtZW1jcHkobXNn ICsgbiwgZGF0YSwgbGVuKTsKPiArwqDCoMKgwqDCoMKgwqBuICs9IGxlbjsKPiArCj4gK8KgwqDC oMKgwqDCoMKgLyogQWx3YXlzIHJldHVybiBvb2JfaW5mbywgZXZlbiBpZiBpdCB3YXNuJ3QgaW4g YmVhY29uICovCj4gK8KgwqDCoMKgwqDCoMKgaWYgKGxlbiA9PSAxNikgewo+ICvCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqBsX3B1dF9sZTE2KDAsIG1zZyArIG4pOwo+ICvCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqBuICs9IDI7Cj4gK8KgwqDCoMKgwqDCoMKgfQo+ICsKPiArwqDC oMKgwqDCoMKgwqBnb3RvIHNlbmRfcmVwb3J0Owo+ICsKPiArZXh0ZW5kZWRfc2NhbjoKPiArwqDC oMKgwqDCoMKgwqBpZiAoZGF0YVswXSA9PSBCVF9BRF9NRVNIX0JFQUNPTiAmJiAhZGF0YVsxXSkg ewo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBpZiAobGVuICE9IDE4ICYmIGxlbiAh PSAyMCAmJiBsZW4gIT0gMjQpCj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqByZXR1cm47Cj4gKwo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAv KiBDaGVjayBVVUlEICovCj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoGlmIChtZW1j bXAoZGF0YSArIDIsIHNjYW4tPnV1aWQsIDE2KSkKPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoHJldHVybjsKPiArCj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoC8qIFplcm8gQUQgbGlzdCBpZiBwcmlvciBkYXRhIFJYZWQgZnJvbSBkaWZmZXJl bnQKPiBiZF9hZGRyICovCj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoGlmIChtZW1j bXAoc2Nhbi0+YWRkciwgaW5mby0+YWRkciwgNikpIHsKPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoHNjYW4tPmxpc3RbMF0gPSAwOwo+ICvCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgc2Nhbi0+cnhlZF9hZHMgPSAwOwo+ ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqB9Cj4gKwo+ICvCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqBtZW1jcHkoc2Nhbi0+YWRkciwgaW5mby0+YWRkciwgNik7Cj4gK8KgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoHNjYW4tPmZsdHIgPSB0cnVlOwo+ICsKPiArwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgaWYgKGxlbiA+PSAyMCkKPiArwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoHNjYW4tPm9vYl9pbmZvID0gbF9nZXRfbGUx NihkYXRhICsgMTgpOwo+ICsKPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgaWYgKHNj YW4tPnJ4ZWRfYWRzICE9IHNjYW4tPmV4dF9jbnQpCj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqByZXR1cm47Cj4gKwo+ICsKPiArwqDCoMKgwqDCoMKgwqB9 IGVsc2UgaWYgKGRhdGFbMF0gIT0gQlRfQURfTUVTSF9CRUFDT04pIHsKPiArwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgaWYgKCFzY2FuLT5mbHRyIHx8ICFtZW1jbXAoc2Nhbi0+YWRkciwg aW5mby0+YWRkciwKPiA2KSkgewo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgaSA9IDA7Cj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqB3aGlsZSAoc2Nhbi0+bGlzdFtpXSkgewo+ICvCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoC8qIGNoZWNrIGlmIHNl ZW4gKi8KPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqBpZiAoc2Nhbi0+bGlzdFtpICsgMV0gPT0gZGF0YVswXSkKPiArwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgcmV0dXJuOwo+ICsKPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBpICs9IHNjYW4tPmxpc3RbaV0gKyAx Owo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgfQo+ICsK PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoC8qIE92ZXJm bG93IFByb3RlY3Rpb24gKi8KPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoGlmIChpICsgbGVuICsgMSA+IEVYVF9MSVNUX1NJWkUpCj4gK8KgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgcmV0dXJu Owo+ICsKPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoHNj YW4tPmxpc3RbaV0gPSBsZW47Cj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqBzY2FuLT5saXN0W2kgKyBsZW4gKyAxXSA9IDA7Cj4gK8KgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBtZW1jcHkoc2Nhbi0+bGlzdCArIGkgKyAx LCBkYXRhLCBsZW4pOwo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgc2Nhbi0+cnhlZF9hZHMrKzsKPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg fQo+ICsKPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgaWYgKHNjYW4tPnJ4ZWRfYWRz ICE9IHNjYW4tPmV4dF9jbnQpCj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqByZXR1cm47Cj4gKwo+ICvCoMKgwqDCoMKgwqDCoH0gZWxzZQo+ICvCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqByZXR1cm47Cj4gKwo+ICvCoMKgwqDCoMKgwqDCoG4gPSBt ZXNoX21vZGVsX29wY29kZV9zZXQoT1BfUkVNX1BST1ZfRVhUX1NDQU5fUkVQT1JULCBtc2cpOwo+ ICvCoMKgwqDCoMKgwqDCoG1zZ1tuKytdID0gUEJfUkVNX0VSUl9TVUNDRVNTOwo+ICvCoMKgwqDC oMKgwqDCoG1lbWNweShtc2cgKyBuLCBzY2FuLT51dWlkLCAxNik7Cj4gK8KgwqDCoMKgwqDCoMKg biArPSAxNjsKPiArwqDCoMKgwqDCoMKgwqBsX3B1dF9sZTE2KHNjYW4tPm9vYl9pbmZvLCBtc2cg KyBuKTsKPiArwqDCoMKgwqDCoMKgwqBuICs9IDI7Cj4gKwo+ICvCoMKgwqDCoMKgwqDCoGkgPSAw Owo+ICvCoMKgwqDCoMKgwqDCoHdoaWxlIChzY2FuLT5saXN0W2ldKSB7Cj4gK8KgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoG1zZ1tuKytdID0gc2Nhbi0+bGlzdFtpXTsKPiArwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgbWVtY3B5KG1zZyArIG4sICZzY2FuLT5saXN0W2kgKyAxXSwg c2Nhbi0+bGlzdFtpXSk7Cj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoG4gKz0gc2Nh bi0+bGlzdFtpXTsKPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgaSArPSBzY2FuLT5s aXN0W2ldOwo+ICvCoMKgwqDCoMKgwqDCoH0KPiArCj4gK3NlbmRfcmVwb3J0Ogo+ICvCoMKgwqDC oMKgwqDCoHByaW50X3BhY2tldCgiQXBwIFR4IiwgbXNnLCBuKTsKPiArwqDCoMKgwqDCoMKgwqBt ZXNoX21vZGVsX3NlbmQoc2Nhbi0+bm9kZSwgMCwgc2Nhbi0+Y2xpZW50LAo+IEFQUF9JRFhfREVW X0xPQ0FMLAo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoHNjYW4tPm5ldF9pZHgsIERFRkFVTFRfVFRMLCB0cnVlLCBuLAo+IG1z Zyk7Cj4gKwo+ICvCoMKgwqDCoMKgwqDCoC8qIENsZWFuLXVwIGlmIHdlIGFyZSBkb25lIHJlcG9y dGluZyovCj4gK8KgwqDCoMKgwqDCoMKgaWYgKGZpbGxlZCA9PSBzY2FuLT5zY2FubmVkX2xpbWl0 IHx8IHNjYW4tPmV4dF9jbnQpCj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoHJlbXBy dl9zY2FuX2NhbmNlbChOVUxMLCBzY2FuKTsKPiArfQo+ICsKPiArc3RhdGljIGJvb2wgcmVnaXN0 ZXJfZXh0X2FkX3R5cGUodWludDhfdCBhZF90eXBlLCBzdHJ1Y3QKPiByZW1fc2Nhbl9kYXRhICpz Y2FuKQo+ICt7Cj4gK8KgwqDCoMKgwqDCoMKgdWludDhfdCBzaG9ydF9hZDsKPiArCj4gK8KgwqDC oMKgwqDCoMKgc3dpdGNoIChhZF90eXBlKSB7Cj4gK8KgwqDCoMKgwqDCoMKgY2FzZSBCVF9BRF9N RVNIX1BST1Y6Cj4gK8KgwqDCoMKgwqDCoMKgY2FzZSBCVF9BRF9VVUlEMTZfU09NRToKPiArwqDC oMKgwqDCoMKgwqBjYXNlIEJUX0FEX1VVSUQzMl9TT01FOgo+ICvCoMKgwqDCoMKgwqDCoGNhc2Ug QlRfQURfVVVJRDEyOF9TT01FOgo+ICvCoMKgwqDCoMKgwqDCoGNhc2UgQlRfQURfTkFNRV9TSE9S VDoKPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgLyogSWxsZWdhbCBSZXF1ZXN0cyAq Lwo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqByZXR1cm4gZmFsc2U7Cj4gKwo+ICvC oMKgwqDCoMKgwqDCoGNhc2UgQlRfQURfVVVJRDE2X0FMTDoKPiArwqDCoMKgwqDCoMKgwqBjYXNl IEJUX0FEX1VVSUQzMl9BTEw6Cj4gK8KgwqDCoMKgwqDCoMKgY2FzZSBCVF9BRF9VVUlEMTI4X0FM TDoKPiArwqDCoMKgwqDCoMKgwqBjYXNlIEJUX0FEX05BTUVfQ09NUExFVEU6Cj4gK8KgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoC8qIEF1dG9tYXRpY2FsbHkgZ2V0IHNob3J0IHZlcnNpb25z ICovCj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoHNob3J0X2FkID0gYWRfdHlwZSAt IDE7Cj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoG1lc2hfaW9fcmVnaXN0ZXJfcmVj dl9jYihOVUxMLCAmc2hvcnRfYWQsIDEsCj4gc2Nhbl9wa3QsIHNjYW4pOwo+ICsKPiArwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgLyogZmFsbCB0aHJvdWdoICovCj4gK8KgwqDCoMKgwqDC oMKgZGVmYXVsdDoKPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgbWVzaF9pb19yZWdp c3Rlcl9yZWN2X2NiKE5VTEwsICZhZF90eXBlLCAxLCBzY2FuX3BrdCwKPiBzY2FuKTsKPiArCj4g K8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoC8qIGZhbGwgdGhyb3VnaCAqLwo+ICsKPiAr wqDCoMKgwqDCoMKgwqBjYXNlIEJUX0FEX01FU0hfQkVBQ09OOgo+ICvCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqAvKiBJZ25vcmVkL2F1dG8gcmVxdWVzdCAqLwo+ICvCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqBicmVhazsKPiArwqDCoMKgwqDCoMKgwqB9Cj4gKwo+ICvCoMKgwqDC oMKgwqDCoHJldHVybiB0cnVlOwo+ICt9Cj4gKwo+ICtzdGF0aWMgdm9pZCBsaW5rX2FjdGl2ZSh2 b2lkICp1c2VyX2RhdGEpCj4gK3sKPiArwqDCoMKgwqDCoMKgwqBzdHJ1Y3QgcmVtX3Byb3ZfZGF0 YSAqcHJvdiA9IHVzZXJfZGF0YTsKPiArwqDCoMKgwqDCoMKgwqB1aW50OF90IG1zZ1s1XTsKPiAr wqDCoMKgwqDCoMKgwqBpbnQgbjsKPiArCj4gK8KgwqDCoMKgwqDCoMKgaWYgKHByb3YgIT0gcnBi X3Byb3YgfHwgcHJvdi0+c3RhdGUgIT0KPiBQQl9SRU1PVEVfU1RBVEVfTElOS19PUEVOSU5HKQo+ ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqByZXR1cm47Cj4gKwo+ICvCoMKgwqDCoMKg wqDCoGxfZGVidWcoIlJlbW90ZSBMaW5rIG9wZW4gY29uZmlybWVkIik7Cj4gK8KgwqDCoMKgwqDC oMKgcHJvdi0+c3RhdGUgPSBQQl9SRU1PVEVfU1RBVEVfTElOS19BQ1RJVkU7Cj4gKwo+ICvCoMKg wqDCoMKgwqDCoG4gPSBtZXNoX21vZGVsX29wY29kZV9zZXQoT1BfUkVNX1BST1ZfTElOS19SRVBP UlQsIG1zZyk7Cj4gK8KgwqDCoMKgwqDCoMKgbXNnW24rK10gPSBQQl9SRU1fRVJSX1NVQ0NFU1M7 Cj4gK8KgwqDCoMKgwqDCoMKgbXNnW24rK10gPSBQQl9SRU1PVEVfU1RBVEVfTElOS19BQ1RJVkU7 Cj4gKwo+ICvCoMKgwqDCoMKgwqDCoG1lc2hfbW9kZWxfc2VuZChwcm92LT5ub2RlLCAwLCBwcm92 LT5jbGllbnQsCj4gQVBQX0lEWF9ERVZfTE9DQUwsCj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgcHJvdi0+bmV0X2lkeCwgREVG QVVMVF9UVEwsIHRydWUsIG4sCj4gbXNnKTsKPiArfQo+ICsKPiArYm9vbCByZWdpc3Rlcl9ucHBp X2FjY2VwdG9yKG1lc2hfcHJvdl9vcGVuX2Z1bmNfdCBvcGVuX2NiLAo+ICvCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqBtZXNoX3Byb3ZfY2xvc2VfZnVuY190Cj4gY2xvc2VfY2IsCj4gK8KgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoG1lc2hfcHJvdl9yZWNlaXZlX2Z1bmNfdAo+IHJ4X2NiLAo+ICvCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqBtZXNoX3Byb3ZfYWNrX2Z1bmNfdCBhY2tfY2IsCj4gK8KgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoHZvaWQgKnVzZXJfZGF0YSkKPiArewo+ICvCoMKgwqDCoMKgwqDCoHN0cnVjdCByZW1f cHJvdl9kYXRhICpwcm92ID0gcnBiX3Byb3Y7Cj4gKwo+ICvCoMKgwqDCoMKgwqDCoGlmICghcHJv diB8fCBwcm92LT5ucHBpX3Byb2MgPT0gUlBSX0FEVikKPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgcmV0dXJuIGZhbHNlOwo+ICsKPiArwqDCoMKgwqDCoMKgwqBwcm92LT51Lm5wcGku b3Blbl9jYiA9IG9wZW5fY2I7Cj4gK8KgwqDCoMKgwqDCoMKgcHJvdi0+dS5ucHBpLmNsb3NlX2Ni ID0gY2xvc2VfY2I7Cj4gK8KgwqDCoMKgwqDCoMKgcHJvdi0+dS5ucHBpLnJ4X2NiID0gcnhfY2I7 Cj4gK8KgwqDCoMKgwqDCoMKgcHJvdi0+dS5ucHBpLmFja19jYiA9IGFja19jYjsKPiArwqDCoMKg wqDCoMKgwqBwcm92LT50cmFuc19kYXRhID0gdXNlcl9kYXRhOwo+ICsKPiArwqDCoMKgwqDCoMKg wqBvcGVuX2NiKHVzZXJfZGF0YSwgc3J2X3J4LCBwcm92LCBwcm92LT5ucHBpX3Byb2MpOwo+ICsK PiArwqDCoMKgwqDCoMKgwqBsX2lkbGVfb25lc2hvdChsaW5rX2FjdGl2ZSwgcHJvdiwgTlVMTCk7 Cj4gKwo+ICvCoMKgwqDCoMKgwqDCoHJldHVybiB0cnVlOwo+ICt9Cj4gKwo+ICtzdGF0aWMgYm9v bCBucHBpX2NtcGx0KHZvaWQgKnVzZXJfZGF0YSwgdWludDhfdCBzdGF0dXMsCj4gK8KgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoHN0cnVjdCBtZXNoX3Byb3Zfbm9kZV9pbmZvCj4gKmluZm8pCj4gK3sKPiAr wqDCoMKgwqDCoMKgwqBzdHJ1Y3QgcmVtX3Byb3ZfZGF0YSAqcHJvdiA9IHVzZXJfZGF0YTsKPiAr Cj4gK8KgwqDCoMKgwqDCoMKgaWYgKHByb3YgIT0gcnBiX3Byb3YpCj4gK8KgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoHJldHVybiBmYWxzZTsKPiArCj4gK8KgwqDCoMKgwqDCoMKgLyogU2F2 ZSBuZXcgaW5mbyB0byBhcHBseSBvbiBMaW5rIENsb3NlICovCj4gK8KgwqDCoMKgwqDCoMKgcHJv di0+dS5ucHBpLmluZm8gPSAqaW5mbzsKPiArwqDCoMKgwqDCoMKgwqByZXR1cm4gdHJ1ZTsKPiAr fQo+ICsKPiArc3RhdGljIGJvb2wgc3RhcnRfZGV2X2tleV9yZWZyZXNoKHN0cnVjdCBtZXNoX25v ZGUgKm5vZGUsIHVpbnQ4X3QKPiBucHBpX3Byb2MsCj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqBzdHJ1Y3QgcmVtX3Byb3ZfZGF0YQo+ICpwcm92KQo+ICt7Cj4gK8KgwqDC oMKgwqDCoMKgdWludDhfdCBudW1fZWxlID0gbm9kZV9nZXRfbnVtX2VsZW1lbnRzKG5vZGUpOwo+ ICsKPiArwqDCoMKgwqDCoMKgwqBwcm92LT5ucHBpX3Byb2MgPSBucHBpX3Byb2M7Cj4gK8KgwqDC oMKgwqDCoMKgcmV0dXJuIGFjY2VwdG9yX3N0YXJ0KG51bV9lbGUsIE5VTEwsIDB4MDAwMSwgNjAs IE5VTEwsCj4gbnBwaV9jbXBsdCwKPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoAo+IMKgwqDCoHBy b3YpOwo+ICt9Cj4gKwo+ICtzdGF0aWMgYm9vbCByZW1wcnZfc3J2X3BrdCh1aW50MTZfdCBzcmMs IHVpbnQxNl90IHVuaWNhc3QsIHVpbnQxNl90Cj4gYXBwX2lkeCwKPiArwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgdWludDE2X3QgbmV0X2lkeCwgY29uc3QKPiB1aW50OF90ICpkYXRhLAo+ICvCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqB1aW50MTZfdCBzaXplLCBjb25zdCB2b2lkCj4gKnVzZXJfZGF0YSkKPiAr ewo+ICvCoMKgwqDCoMKgwqDCoHN0cnVjdCByZW1fcHJvdl9kYXRhICpwcm92ID0gcnBiX3Byb3Y7 Cj4gK8KgwqDCoMKgwqDCoMKgc3RydWN0IHJlbV9zY2FuX2RhdGEgKnNjYW4gPSBycGJfc2NhbjsK PiArwqDCoMKgwqDCoMKgwqBzdHJ1Y3QgbWVzaF9ub2RlICpub2RlID0gKHN0cnVjdCBtZXNoX25v ZGUgKikgdXNlcl9kYXRhOwo+ICvCoMKgwqDCoMKgwqDCoGNvbnN0IHVpbnQ4X3QgKnBrdCA9IGRh dGE7Cj4gK8KgwqDCoMKgwqDCoMKgYm9vbCBzZWdtZW50ZWQgPSBmYWxzZTsKPiArwqDCoMKgwqDC oMKgwqB1aW50MzJfdCBvcGNvZGU7Cj4gK8KgwqDCoMKgwqDCoMKgdWludDhfdCBtc2dbNjldOwo+ ICvCoMKgwqDCoMKgwqDCoHVpbnQ4X3Qgc3RhdHVzOwo+ICvCoMKgwqDCoMKgwqDCoHVpbnQxNl90 IG47Cj4gKwo+ICvCoMKgwqDCoMKgwqDCoGlmIChhcHBfaWR4ICE9IEFQUF9JRFhfREVWX0xPQ0FM KQo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqByZXR1cm4gZmFsc2U7Cj4gKwo+ICvC oMKgwqDCoMKgwqDCoGlmIChtZXNoX21vZGVsX29wY29kZV9nZXQocGt0LCBzaXplLCAmb3Bjb2Rl LCAmbikpIHsKPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgc2l6ZSAtPSBuOwo+ICvC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBwa3QgKz0gbjsKPiArwqDCoMKgwqDCoMKgwqB9 IGVsc2UKPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgcmV0dXJuIGZhbHNlOwo+ICsK PiArwqDCoMKgwqDCoMKgwqBuID0gMDsKPiArCj4gK8KgwqDCoMKgwqDCoMKgc3dpdGNoIChvcGNv ZGUpIHsKPiArwqDCoMKgwqDCoMKgwqBkZWZhdWx0Ogo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqByZXR1cm4gZmFsc2U7Cj4gKwo+ICvCoMKgwqDCoMKgwqDCoGNhc2UgT1BfUkVNX1BS T1ZfU0NBTl9DQVBfR0VUOgo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBpZiAoc2l6 ZSAhPSAwKQo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg cmV0dXJuIHRydWU7Cj4gKwo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAvKiBDb21w b3NlIFNjYW4gSW5mbyBTdGF0dXMgKi8KPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg biA9Cj4gbWVzaF9tb2RlbF9vcGNvZGVfc2V0KE9QX1JFTV9QUk9WX1NDQU5fQ0FQX1NUQVRVUywg bXNnKTsKPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgbXNnW24rK10gPSBQQl9SRU1P VEVfTUFYX1NDQU5fUVVFVUVfU0laRTsKPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg bXNnW24rK10gPSAxOyAvKiBBY3RpdmUgU2Nhbm5pbmcgU3VwcG9ydGVkICovCj4gK8KgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoGJyZWFrOwo+ICsKPiArwqDCoMKgwqDCoMKgwqBjYXNlIE9Q X1JFTV9QUk9WX0VYVF9TQ0FOX1NUQVJUOgo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqBpZiAoIXNpemUgfHwgIXBrdFswXSkKPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoHJldHVybiB0cnVlOwo+ICsKPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgLyogU2l6ZSBjaGVjayB0aGUgbWVzc2FnZSAqLwo+ICvCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqBpZiAocGt0WzBdICsgMTggPT0gc2l6ZSkgewo+ICvCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgLyogUmFuZ2UgY2hlY2sgdGhlIFRpbWVv dXQgKi8KPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoGlm ICghcGt0W3NpemUgLSAxXSB8fCBwa3Rbc2l6ZSAtIDFdID4gNSkKPiArwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqByZXR1cm4gdHJ1 ZTsKPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgfSBlbHNlIGlmIChwa3RbMF0gKyAx ICE9IHNpemUpCj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqByZXR1cm4gdHJ1ZTsKPiArCj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoC8qIEdl dCBsb2NhbCBkZXZpY2UgZXh0ZW5kZWQgaW5mbyAqLwo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqBpZiAocGt0WzBdICsgMTggIT0gc2l6ZSkgewo+ICvCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgbiA9IG1lc2hfbW9kZWxfb3Bjb2RlX3NldCgKPiAr wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgT1BfUkVNX1BST1ZfRVhUX1NDQU5fUkVQT1JULAo+IG1zZyk7 Cj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBtc2dbbisr XSA9IFBCX1JFTV9FUlJfU1VDQ0VTUzsKPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoG1lbWNweShtc2cgKyBuLCBub2RlX3V1aWRfZ2V0KG5vZGUpLCAxNik7 Cj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBuICs9IDE2 Owo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgbF9wdXRf bGUxNigwLCBtc2cgKyBuKTsKPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoG4gKz0gMjsKPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoHNpemUtLTsKPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoHBrdCsrOwo+ICsKPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoHdoaWxlIChzaXplLS0pIHsKPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBpZiAoKnBrdCsrID09IEJUX0FE X05BTUVfQ09NUExFVEUpIHsKPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgbXNnW25dID0gc3RybGVu KG5hbWUpICsgMTsKPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgaWYgKG1zZ1tuXSA+IHNpemVvZiht c2cpIC0gbgo+IC0gMSkKPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoG1z Z1tuXSA9IHNpemVvZihtc2cpCj4gLSBuIC0gMTsKPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgbisr Owo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBtc2dbbisrXSA9Cj4gQlRfQURfTkFNRV9DT01QTEVU RTsKPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgbWVtY3B5KCZtc2dbbl0sIG5hbWUsIG1zZ1tuIC0K PiAyXSAtIDEpOwo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBuICs9IG1zZ1tuIC0gMl0gLSAxOwo+ ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBnb3RvIHNlbmRfcGt0Owo+ICvCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoH0KPiArwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoH0KPiArCj4gK8KgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAvKiBTZW5kIGludGVybmFsIHJl cG9ydCAqLwo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg bF9kZWJ1ZygiU2VuZCBpbnRlcm5hbCBleHRlbmRlZCBpbmZvICVkIiwgbik7Cj4gK8KgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBnb3RvIHNlbmRfcGt0Owo+ICvC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqB9Cj4gKwo+ICvCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqBzdGF0dXMgPSBQQl9SRU1fRVJSX1NVQ0NFU1M7Cj4gK8KgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoGlmIChzY2FuKSB7Cj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqBpZiAoc2Nhbi0+Y2xpZW50ICE9IHNyYyB8fCBzY2FuLT5ub2Rl ICE9IG5vZGUKPiB8fAo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgc2Nh bi0+ZXh0X2NudCAhPQo+IHBrdFswXSkKPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBzdGF0dXMgPQo+IFBCX1JFTV9FUlJfU0NB Tk5JTkdfQ0FOTk9UX1NUQVJUOwo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgZWxzZSBpZiAobWVtY21wKHNjYW4tPmV4dCwgcGt0ICsgMSwgcGt0WzBdKSkK PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqBzdGF0dXMgPQo+IFBCX1JFTV9FUlJfU0NBTk5JTkdfQ0FOTk9UX1NUQVJUOwo+ICvC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgZWxzZSBpZiAobWVt Y21wKHNjYW4tPnV1aWQsIHBrdCArIDIsIDE2KSkKPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBzdGF0dXMgPQo+IFBCX1JFTV9F UlJfU0NBTk5JTkdfQ0FOTk9UX1NUQVJUOwo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqB9Cj4gKwo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBpZiAoc3RhdHVzICE9IFBC X1JFTV9FUlJfU1VDQ0VTUykgewo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgbiA9Cj4gbWVzaF9tb2RlbF9vcGNvZGVfc2V0KE9QX1JFTV9QUk9WX0VYVF9T Q0FOX1JFUE9SVCwKPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoAo+IMKgwqDCoG1zZyk7Cj4gK8Kg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBtc2dbbisrXSA9IHN0 YXR1czsKPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoG1l bXNldChtc2cgKyBuLCAwLCAxNik7Cj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqBuICs9IDE2Owo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgc2VnbWVudGVkID0gdHJ1ZTsKPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoGJyZWFrOwo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqB9Cj4gKwo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAvKiBJZ25vcmUg ZXh0ZW5kZWQgcmVxdWVzdHMgd2hpbGUgYWxyZWFkeSBzY2FubmluZyAqLwo+ICvCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqBpZiAoc2NhbikKPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoHJldHVybiB0cnVlOwo+ICsKPiArwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgc2NhbiA9ICh2b2lkICopIGxfbmV3KHVpbnQ4X3QsCj4gK8KgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoHNpemVvZihzdHJ1Y3QgcmVtX3NjYW5fZGF0YSkKPiArIHBrdFswXSk7Cj4g Kwo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAvKiBWYWxpZGF0ZSBhbmQgcmVnaXN0 ZXIgRXh0ZW5kZWQgQUQgdHlwZXMgKi8KPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg Zm9yIChuID0gMDsgbiA8IHBrdFswXTsgbisrKSB7Cj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBpZiAoIXJlZ2lzdGVyX2V4dF9hZF90eXBlKHBrdFsxICsg bl0sIHNjYW4pKQo+IHsKPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAvKiBJbnZhbGlkIEFEIHR5cGUgZGV0ZWN0ZWQgLS0gVW5k bwo+ICovCj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgd2hpbGUgKG4tLSkKPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgZGVyZWdp c3Rlcl9leHRfYWRfdHlwZShwa3RbMQo+ICsgbl0pOwo+ICsKPiArwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBsX2ZyZWUoc2Nhbik7 Cj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgcmV0dXJuIHRydWU7Cj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqB9Cj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoH0KPiArCj4g K8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoHJwYl9zY2FuID0gc2NhbjsKPiArwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgc2Nhbi0+Y2xpZW50ID0gc3JjOwo+ICvCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqBzY2FuLT5uZXRfaWR4ID0gbmV0X2lkeDsKPiArwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgbWVtY3B5KHNjYW4tPnV1aWQsIHBrdCArIHNpemUgLSAxNywg MTYpOwo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBzY2FuLT5leHRfY250ID0gcGt0 WzBdOwo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBtZW1jcHkoc2Nhbi0+ZXh0LCBw a3QgKyAxLCBwa3RbMF0pOwo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBzY2FuLT5s aXN0ID0gbF9tYWxsb2MoRVhUX0xJU1RfU0laRSk7Cj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoHNjYW4tPmxpc3RbMF0gPSAwOwo+ICsKPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgbWVzaF9pb19yZWdpc3Rlcl9yZWN2X2NiKE5VTEwsIHBydmIsIHNpemVvZihwcnZiKSwK PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgc2Nhbl8KPiBwa3QsIHNjYW4pOwo+ICsKPiArwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgc2Nhbi0+dGltZW91dCA9IGxfdGltZW91dF9jcmVhdGUocGt0W3NpemUt MV0sCj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqByZW1wcnZfc2Nhbl9j YW5jZWwsCj4gc2NhbiwgTlVMTCk7Cj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoHJl dHVybiB0cnVlOwo+ICsKPiArwqDCoMKgwqDCoMKgwqBjYXNlIE9QX1JFTV9QUk9WX1NDQU5fU1RB UlQ6Cj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoGlmIChzaXplICE9IDIgJiYgc2l6 ZSAhPSAxOCkKPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oHJldHVybiB0cnVlOwo+ICsKPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgLyogUmVq ZWN0IFRpbWVvdXQgb2YgWmVybyAqLwo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBp ZiAoIXBrdFsxXSkKPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoHJldHVybiB0cnVlOwo+ICsKPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgc3Rh dHVzID0gUEJfUkVNX0VSUl9TVUNDRVNTOwo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqBpZiAoc2Nhbikgewo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgaWYgKHNjYW4tPmV4dF9jbnQgfHwgc2Nhbi0+Y2xpZW50ICE9IHNyYyB8fAo+ICvCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoHNjYW4tPm5v ZGUgIT0KPiBub2RlKQo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoHN0YXR1cyA9Cj4gUEJfUkVNX0VSUl9TQ0FOTklOR19DQU5O T1RfU1RBUlQ7Cj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqBlbHNlIGlmICghIShzY2FuLT5mbHRyKSAhPSAhIShzaXplICE9IDE4KSkKPiArwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBzdGF0 dXMgPQo+IFBCX1JFTV9FUlJfU0NBTk5JTkdfQ0FOTk9UX1NUQVJUOwo+ICvCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgZWxzZSBpZiAoc2Nhbi0+Zmx0ciAmJiBt ZW1jbXAoc2Nhbi0+dXVpZCwgcGt0Cj4gKyAyLCAxNikpCj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgc3RhdHVzID0KPiBQQl9S RU1fRVJSX1NDQU5OSU5HX0NBTk5PVF9TVEFSVDsKPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgfQo+ICsKPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgaWYgKHN0YXR1cyAh PSBQQl9SRU1fRVJSX1NVQ0NFU1MpIHsKPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoG4gPQo+IG1lc2hfbW9kZWxfb3Bjb2RlX3NldChPUF9SRU1fUFJPVl9T Q0FOX1NUQVRVUywgbXNnKTsKPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoG1zZ1tuKytdID0gc3RhdHVzOwo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgbXNnW24rK10gPSBzY2FuID8gc2Nhbi0+c3RhdGUgOiAwOwo+ ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgbXNnW24rK10g PSBzY2FuID8gc2Nhbi0+c2Nhbm5lZF9saW1pdCA6Cj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqBQQl9SRU1PVEVfTUFYX1NDQU5fUVUKPiBFVUVfU0laRTsKPiArwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoG1zZ1tuKytdID0gc2NhbiA/ IHNjYW4tPnRvX3NlY3MgOiAwOwo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgYnJlYWs7Cj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoH0KPiAr Cj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoGlmICghc2NhbikKPiArwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoHNjYW4gPSBsX25ldyhzdHJ1Y3Qg cmVtX3NjYW5fZGF0YSwgMSk7Cj4gKwo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBy cGJfc2NhbiA9IHNjYW47Cj4gKwo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBpZiAo c2l6ZSA9PSAxOCkgewo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgbWVtY3B5KHNjYW4tPnV1aWQsIHBrdCArIDIsIDE2KTsKPiArwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoHNjYW4tPmZsdHIgPSB0cnVlOwo+ICvCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgc2Nhbi0+c3RhdGUgPSAw eDAyOyAvKiBMaW1pdGVkICovCj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoH0gZWxz ZSB7Cj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBtZW1z ZXQoc2Nhbi0+dXVpZCwgMCwgMTYpOwo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgc2Nhbi0+Zmx0ciA9IGZhbHNlOwo+ICvCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgc2Nhbi0+c3RhdGUgPSAweDAxOyAvKiBVbmxpbWl0 ZWQgKi8KPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgfQo+ICsKPiArwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgc2Nhbi0+Y2xpZW50ID0gc3JjOwo+ICvCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqBzY2FuLT5uZXRfaWR4ID0gbmV0X2lkeDsKPiArwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgc2Nhbi0+bm9kZSA9IG5vZGU7Cj4gKwo+ICvCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqBpZiAoIXNjYW4tPmxpc3QpCj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBzY2FuLT5saXN0ID0gbF9uZXcodWludDhfdCwKPiAr wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgMjMgKgo+IFBCX1JFTU9URV9NQVhfU0NBTl9RVUVVRV9TSVpF KTsKPiArCj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoG1lc2hfaW9fcmVnaXN0ZXJf cmVjdl9jYihOVUxMLCBwcnZiLCAyLCBzY2FuX3BrdCwKPiBzY2FuKTsKPiArCj4gK8KgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoHNjYW4tPnRvX3NlY3MgPSBwa3RbMV07Cj4gKwo+ICvCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBpZiAocGt0WzBdKQo+ICvCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgc2Nhbi0+c2Nhbm5lZF9saW1pdCA9IHBrdFsw XTsKPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgZWxzZQo+ICvCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgc2Nhbi0+c2Nhbm5lZF9saW1pdCA9Cj4g UEJfUkVNT1RFX01BWF9TQ0FOX1FVRVVFX1NJWkU7Cj4gKwo+ICvCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqBzY2FuLT50aW1lb3V0ID0gbF90aW1lb3V0X2NyZWF0ZShwa3RbMV0sCj4gK8Kg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoHJlbXBydl9zY2FuX2NhbmNlbCwgc2NhbiwKPiBOVUxMKTsKPiAr Cj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoC8qIGZhbGwgdGhyb3VnaCAqLwo+ICsK PiArwqDCoMKgwqDCoMKgwqBjYXNlIE9QX1JFTV9QUk9WX1NDQU5fR0VUOgo+ICvCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqAvKiBDb21wb3NlIFNjYW4gU3RhdHVzICovCj4gK8KgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoG4gPSBtZXNoX21vZGVsX29wY29kZV9zZXQoT1BfUkVNX1BS T1ZfU0NBTl9TVEFUVVMsCj4gbXNnKTsKPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg bXNnW24rK10gPSBQQl9SRU1fRVJSX1NVQ0NFU1M7Cj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoG1zZ1tuKytdID0gc2NhbiA/IHNjYW4tPnN0YXRlIDogMDsKPiArwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgbXNnW24rK10gPSBzY2FuID8gc2Nhbi0+c2Nhbm5lZF9saW1pdCA6 Cj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBQQl9SRU1PVEVfTUFYX1ND QU5fUVUKPiBFVUVfU0laRTsKPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgbXNnW24r K10gPSBzY2FuID8gc2Nhbi0+dG9fc2VjcyA6IDA7Cj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoGJyZWFrOwo+ICsKPiArwqDCoMKgwqDCoMKgwqBjYXNlIE9QX1JFTV9QUk9WX1NDQU5f U1RPUDoKPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgaWYgKHNpemUgIT0gMCB8fCAh c2NhbikKPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoHJl dHVybiB0cnVlOwo+ICsKPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgcmVtcHJ2X3Nj YW5fY2FuY2VsKE5VTEwsIHNjYW4pOwo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBy ZXR1cm4gdHJ1ZTsKPiArCj4gK8KgwqDCoMKgwqDCoMKgY2FzZSBPUF9SRU1fUFJPVl9MSU5LX0dF VDoKPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgaWYgKHNpemUgIT0gMCB8fCAhcHJv dikKPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoHJldHVy biB0cnVlOwo+ICsKPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgc2VuZF9wcm92X3N0 YXR1cyhwcm92LCBQQl9SRU1fRVJSX1NVQ0NFU1MpOwo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqByZXR1cm4gdHJ1ZTsKPiArCj4gK8KgwqDCoMKgwqDCoMKgY2FzZSBPUF9SRU1fUFJP Vl9MSU5LX09QRU46Cj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoC8qIFNhbml0eSBj aGVjayBhcmdzICovCj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoGlmIChzaXplICE9 IDE2ICYmIHNpemUgIT0gMTcgJiYgc2l6ZSAhPSAxKQo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgcmV0dXJuIHRydWU7Cj4gKwo+ICvCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqBpZiAoc2l6ZSA9PSAxNyAmJiAocGt0WzE2XSA9PSAwIHx8IHBrdFsx Nl0gPiAweDNjKSkKPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoHJldHVybiB0cnVlOwo+ICsKPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgaWYg KHNpemUgPT0gMSAmJiBwa3RbMF0gPiAweDAyKQo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgcmV0dXJuIHRydWU7Cj4gKwo+ICvCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqBpZiAocHJvdikgewo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgaWYgKHByb3YtPmNsaWVudCAhPSBzcmMgfHwgcHJvdi0+bm9kZSAh PSBub2RlCj4gfHwKPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqAoc2l6ZSA9PSAxICYmIHByb3YtPm5wcGlfcHJvYyAhPQo+IHBr dFswXSkgfHwKPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqAoc2l6ZSA+PSAxNiAmJiAocHJvdi0+bnBwaV9wcm9jICE9Cj4gUlBS X0FEViB8fAo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBtZW1jbXAocHJvdi0+dS5hZHYudXVpZCwg cGt0LAo+IDE2KSkpKSB7Cj4gKwo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoC8qIFNlbmQgUmVqZWN0IChpbiBwcm9ncmVzcykg Ki8KPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqBzZW5kX3Byb3Zfc3RhdHVzKHByb3YsCj4gUEJfUkVNX0VSUl9DQU5OT1RfT1BF Tik7Cj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgbiA9IG1lc2hfbW9kZWxfb3Bjb2RlX3NldCgKPiArwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoE9QX1JFTV9QUk9WX0xJTktfU1RBVAo+IFVTLCBtc2cpOwo+ ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoG1zZ1tuKytdID0gUEJfUkVNX0VSUl9DQU5OT1RfT1BFTjsKPiArwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBtc2dbbisr XSA9Cj4gUEJfUkVNT1RFX1NUQVRFX0xJTktfQUNUSVZFOwo+ICvCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoGJyZWFrOwo+ICvCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgfQo+ICsKPiArwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoC8qIFNlbmQgcmVkdW5kYW50 wqAgU3VjY2VzcyAqLwo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgc2VuZF9wcm92X3N0YXR1cyhwcm92LCBQQl9SRU1fRVJSX1NVQ0NFU1MpOwo+ICvCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgcmV0dXJuIHRydWU7Cj4g K8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoH0KPiArCj4gK8KgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoGlmIChzY2FuICYmIHNjYW4tPmNsaWVudCAhPSBzcmMgJiYgc2Nhbi0+bm9k ZSAhPQo+IG5vZGUpIHsKPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoG4gPQo+IG1lc2hfbW9kZWxfb3Bjb2RlX3NldChPUF9SRU1fUFJPVl9MSU5LX1NUQVRV UywgbXNnKTsKPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oG1zZ1tuKytdID0gUEJfUkVNX0VSUl9DQU5OT1RfT1BFTjsKPiArwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoG1zZ1tuKytdID0gUEJfUkVNT1RFX1NUQVRFX0xJ TktfQUNUSVZFOwo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgYnJlYWs7Cj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoH0KPiArCj4gK8KgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoHByaW50X3BhY2tldCgiUmVtb3RlIFByb3YgTGluayBP cGVuIiwgcGt0LCBzaXplKTsKPiArCj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoHJl bXBydl9zY2FuX2NhbmNlbChOVUxMLCBzY2FuKTsKPiArCj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoHJwYl9wcm92ID0gcHJvdiA9IGxfbmV3KHN0cnVjdCByZW1fcHJvdl9kYXRhLCAx KTsKPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgcHJvdi0+Y2xpZW50ID0gc3JjOwo+ ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBwcm92LT5uZXRfaWR4ID0gbmV0X2lkeDsK PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgcHJvdi0+bm9kZSA9IG5vZGU7Cj4gK8Kg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoHByb3YtPnN0YXRlID0gUEJfUkVNT1RFX1NUQVRF X0xJTktfT1BFTklORzsKPiArCj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoGlmIChz aXplID09IDEpIHsKPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoHN0YXR1cyA9IHN0YXJ0X2Rldl9rZXlfcmVmcmVzaChub2RlLCBwa3RbMF0sCj4gcHJvdik7 Cj4gKwo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqB9IGVsc2Ugewo+ICvCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgaWYgKHNpemUgPT0gMTcpCj4g K8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgcHJvdi0+dGltZW91dCA9Cj4gbF90aW1lb3V0X2NyZWF0ZShwa3RbMTZdLAo+ICvCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgcmVtcHJ2X3Byb3ZfY2FuY2VsLAo+IHBy b3YsIE5VTEwpOwo+ICsKPiArCj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqBwcm92LT5ucHBpX3Byb2MgPSBSUFJfQURWOwo+ICvCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgbWVtY3B5KHByb3YtPnUuYWR2LnV1aWQsIHBr dCwgMTYpOwo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg c3RhdHVzID0gcGJfYWR2X3JlZyh0cnVlLCBzcnZfb3BlbiwKPiBzcnZfY2xvc2UsIHNydl9yeCwK PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBz cnZfYWNrLCBwa3QsCj4gcHJvdik7Cj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoH0K PiArCj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoGlmIChzdGF0dXMpCj4gK8KgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBzZW5kX3Byb3Zfc3RhdHVz KHByb3YsIFBCX1JFTV9FUlJfU1VDQ0VTUyk7Cj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoGVsc2Ugewo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgbiA9Cj4gbWVzaF9tb2RlbF9vcGNvZGVfc2V0KE9QX1JFTV9QUk9WX0xJTktfU1RBVFVTLCBt c2cpOwo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgbXNn W24rK10gPSBQQl9SRU1fRVJSX0NBTk5PVF9PUEVOOwo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgbXNnW24rK10gPSBQQl9SRU1PVEVfU1RBVEVfSURMRTsK PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoHJlbXBydl9w cm92X2NhbmNlbChOVUxMLCBwcm92KTsKPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg fQo+ICsKPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgcmV0dXJuIHRydWU7Cj4gKwo+ ICvCoMKgwqDCoMKgwqDCoGNhc2UgT1BfUkVNX1BST1ZfTElOS19DTE9TRToKPiArwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgaWYgKHNpemUgIT0gMSkKPiArwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoHJldHVybiB0cnVlOwo+ICsKPiArwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgaWYgKCFwcm92IHx8IHByb3YtPm5vZGUgIT0gbm9kZSB8fCBw cm92LT5jbGllbnQgIT0KPiBzcmMpCj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqByZXR1cm4gdHJ1ZTsKPiArCj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoHByb3YtPnN0YXRlID0gUEJfUkVNT1RFX1NUQVRFX0xJTktfQ0xPU0lORzsKPiArwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgbWVzaF9pb19zZW5kX2NhbmNlbChOVUxMLCAmcGt0 X2ZpbHRlciwKPiBzaXplb2YocGt0X2ZpbHRlcikpOwo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqBzZW5kX3Byb3Zfc3RhdHVzKHByb3YsIFBCX1JFTV9FUlJfU1VDQ0VTUyk7Cj4gK8Kg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoGlmIChwa3RbMF0gPT0gMHgwMikgewo+ICvCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgbXNnWzBdID0gUFJPVl9G QUlMRUQ7Cj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBt c2dbMV0gPSBQUk9WX0VSUl9DQU5UX0FTU0lHTl9BRERSOwo+ICvCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgaWYgKHByb3YtPm5wcGlfcHJvYyA9PSBSUFJfQURW KQo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoHByb3YtPnUuYWR2LnR4KHByb3YtPnRyYW5zX2RhdGEsIG1zZywKPiAyKTsKPiAr wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoGVsc2UKPiArwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqBwcm92LT51Lm5wcGkucnhfY2IocHJvdi0+dHJhbnNfZGF0YSwKPiBtc2csIDIpOwo+ICvCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqB9Cj4gKwo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqBpZiAocHJvdi0+bnBwaV9wcm9jID09IFJQUl9BRFYpCj4gK8KgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBwYl9hZHZfdW5yZWcocHJvdik7Cj4gKwo+ ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBlbHNlIGlmIChwcm92LT5ucHBpX3Byb2Mg PD0gUlBSX0NPTVApIHsKPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoC8qIEhhcmQgb3IgU29mdCByZWZyZXNoIG9mIGxvY2FsIG5vZGUsIGJhc2VkCj4gb24g TlBQSSAqLwo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg bm9kZV9yZWZyZXNoKHByb3YtPm5vZGUsIChwcm92LT5ucHBpX3Byb2MgPT0KPiBSUFJfQUREUiks Cj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg JnByb3YtCj4gPnUubnBwaS5pbmZvKTsKPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg fQo+ICsKPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgcmVtcHJ2X3Byb3ZfY2FuY2Vs KE5VTEwsIHByb3YpOwo+ICsKPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgcmV0dXJu IHRydWU7Cj4gKwo+ICvCoMKgwqDCoMKgwqDCoGNhc2UgT1BfUkVNX1BST1ZfUERVX1NFTkQ6Cj4g K8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoGlmICghcHJvdiB8fCBwcm92LT5ub2RlICE9 IG5vZGUgfHwgcHJvdi0+Y2xpZW50ICE9Cj4gc3JjKQo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgcmV0dXJuIHRydWU7Cj4gKwo+ICvCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqBpZiAoc2l6ZSA8IDIpCj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqByZXR1cm4gdHJ1ZTsKPiArCj4gKwo+ICvCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqBwcm92LT5jbGlfcGR1X251bSA9ICpwa3QrKzsKPiArwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgc2l6ZS0tOwo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqBwcm92LT5zdGF0ZSA9IFBCX1JFTU9URV9TVEFURV9PQl9QS1RfVFg7Cj4gKwo+ICvC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBpZiAocHJvdi0+bnBwaV9wcm9jID09IFJQUl9B RFYpCj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBwcm92 LT51LmFkdi50eChwcm92LT50cmFuc19kYXRhLCBwa3QsIHNpemUpOwo+ICvCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqBlbHNlIHsKPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoHNydl9hY2socHJvdiwgcHJvdi0+Y2xpX3BkdV9udW0pOwo+ICvCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgcHJvdi0+dS5ucHBpLnJ4 X2NiKHByb3YtPnRyYW5zX2RhdGEsIHBrdCwKPiBzaXplKTsKPiArwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgfQo+ICsKPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgcmV0dXJu IHRydWU7Cj4gK8KgwqDCoMKgwqDCoMKgfQo+ICsKPiArc2VuZF9wa3Q6Cj4gK8KgwqDCoMKgwqDC oMKgbF9pbmZvKCJQQi1TVlI6IHNyYyAlNC40eCBkc3QgJTQuNHgiLCB1bmljYXN0LCBzcmMpOwo+ ICvCoMKgwqDCoMKgwqDCoHByaW50X3BhY2tldCgiQXBwIFR4IiwgbXNnLCBuKTsKPiArwqDCoMKg wqDCoMKgwqBtZXNoX21vZGVsX3NlbmQobm9kZSwgMCwgc3JjLCBBUFBfSURYX0RFVl9MT0NBTCwK PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqBuZXRfaWR4LCBERUZBVUxUX1RUTCwgc2VnbWVudGVkLCBuLAo+IG1zZyk7Cj4gKwo+ ICvCoMKgwqDCoMKgwqDCoHJldHVybiB0cnVlOwo+ICt9Cj4gKwo+ICtzdGF0aWMgdm9pZCByZW1w cnZfc3J2X3VucmVnaXN0ZXIodm9pZCAqdXNlcl9kYXRhKQo+ICt7Cj4gK30KPiArCj4gK3N0YXRp YyBjb25zdCBzdHJ1Y3QgbWVzaF9tb2RlbF9vcHMgb3BzID0gewo+ICvCoMKgwqDCoMKgwqDCoC51 bnJlZ2lzdGVyID0gcmVtcHJ2X3Nydl91bnJlZ2lzdGVyLAo+ICvCoMKgwqDCoMKgwqDCoC5yZWN2 ID0gcmVtcHJ2X3Nydl9wa3QsCj4gK8KgwqDCoMKgwqDCoMKgLmJpbmQgPSBOVUxMLAo+ICvCoMKg wqDCoMKgwqDCoC5zdWIgPSBOVUxMLAo+ICvCoMKgwqDCoMKgwqDCoC5wdWIgPSBOVUxMCj4gK307 Cj4gKwo+ICt2b2lkIHJlbW90ZV9wcm92X3NlcnZlcl9pbml0KHN0cnVjdCBtZXNoX25vZGUgKm5v ZGUsIHVpbnQ4X3QKPiBlbGVfaWR4KQo+ICt7Cj4gK8KgwqDCoMKgwqDCoMKgbWVzaF9tb2RlbF9y ZWdpc3Rlcihub2RlLCBlbGVfaWR4LCBSRU1fUFJPVl9TUlZfTU9ERUwsICZvcHMsCj4gbm9kZSk7 Cj4gK30KPiBkaWZmIC0tZ2l0IGEvbWVzaC9yZW1wcnYuaCBiL21lc2gvcmVtcHJ2LmgKPiBuZXcg ZmlsZSBtb2RlIDEwMDY0NAo+IGluZGV4IDAwMDAwMDAwMC4uNDliNGUyYzdjCj4gLS0tIC9kZXYv bnVsbAo+ICsrKyBiL21lc2gvcmVtcHJ2LmgKPiBAQCAtMCwwICsxLDc4IEBACj4gKy8qCj4gKyAq Cj4gKyAqwqAgQmx1ZVogLSBCbHVldG9vdGggcHJvdG9jb2wgc3RhY2sgZm9yIExpbnV4Cj4gKyAq Cj4gKyAqwqAgQ29weXJpZ2h0IChDKSAyMDIwwqAgSW50ZWwgQ29ycG9yYXRpb24uIEFsbCByaWdo dHMgcmVzZXJ2ZWQuCj4gKyAqCj4gKyAqCj4gKyAqwqAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29m dHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgo+ICsgKsKgIG1vZGlmeSBpdCB1 bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKPiArICrCoCBM aWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRo ZXIKPiArICrCoCB2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9u KSBhbnkgbGF0ZXIKPiB2ZXJzaW9uLgo+ICsgKgo+ICsgKsKgIFRoaXMgbGlicmFyeSBpcyBkaXN0 cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAo+ICsgKsKgIGJ1dCBX SVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9m Cj4gKyAqwqAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQ T1NFLsKgIFNlZSB0aGUKPiBHTlUKPiArICrCoCBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5z ZSBmb3IgbW9yZSBkZXRhaWxzLgo+ICsgKgo+ICsgKi8KPiArCj4gKyNkZWZpbmUgUkVNX1BST1Zf U1JWX01PREVMwqDCoMKgwqDCoFNFVF9JRChTSUdfVkVORE9SLCAweDAwMDQpCj4gKyNkZWZpbmUg UkVNX1BST1ZfQ0xJX01PREVMwqDCoMKgwqDCoFNFVF9JRChTSUdfVkVORE9SLCAweDAwMDUpCj4g Kwo+ICsjZGVmaW5lIFBCX1JFTU9URV9NQVhfU0NBTl9RVUVVRV9TSVpFwqDCoDUKPiArCj4gKyNk ZWZpbmUgUEJfUkVNT1RFX1NUQVRFX0lETEXCoMKgwqDCoMKgwqDCoMKgwqDCoMKgMHgwMAo+ICsj ZGVmaW5lIFBCX1JFTU9URV9TVEFURV9MSU5LX09QRU5JTkfCoMKgwqAweDAxCj4gKyNkZWZpbmUg UEJfUkVNT1RFX1NUQVRFX0xJTktfQUNUSVZFwqDCoMKgwqAweDAyCj4gKyNkZWZpbmUgUEJfUkVN T1RFX1NUQVRFX09CX1BLVF9UWMKgwqDCoMKgwqDCoDB4MDMKPiArI2RlZmluZSBQQl9SRU1PVEVf U1RBVEVfTElOS19DTE9TSU5HwqDCoMKgMHgwNAo+ICsKPiArI2RlZmluZSBQQl9SRU1PVEVfVFlQ RV9MT0NBTMKgwqDCoDB4MDEKPiArI2RlZmluZSBQQl9SRU1PVEVfVFlQRV9BRFbCoMKgwqDCoMKg MHgwMgo+ICsjZGVmaW5lIFBCX1JFTU9URV9UWVBFX0dBVFTCoMKgwqDCoDB4MDQKPiArCj4gKyNk ZWZpbmUgUEJfUkVNT1RFX1NDQU5fVFlQRV9OT05FwqDCoMKgwqDCoMKgwqAweDAwCj4gKyNkZWZp bmUgUEJfUkVNT1RFX1NDQU5fVFlQRV9VTkxJTUlURUTCoMKgMHgwMQo+ICsjZGVmaW5lIFBCX1JF TU9URV9TQ0FOX1RZUEVfTElNSVRFRMKgwqDCoMKgMHgwMgo+ICsjZGVmaW5lIFBCX1JFTU9URV9T Q0FOX1RZUEVfREVUQUlMRUTCoMKgwqAweDAzCj4gKwo+ICsvKiBSZW1vdGUgUHJvdmlzaW9uaW5n IE9wY29kZSBMaXN0ICovCj4gKyNkZWZpbmUgT1BfUkVNX1BST1ZfU0NBTl9DQVBfR0VUwqDCoMKg wqDCoMKgwqAweDgwNEYKPiArI2RlZmluZSBPUF9SRU1fUFJPVl9TQ0FOX0NBUF9TVEFUVVPCoMKg wqDCoDB4ODA1MAo+ICsjZGVmaW5lIE9QX1JFTV9QUk9WX1NDQU5fR0VUwqDCoMKgwqDCoMKgwqDC oMKgwqDCoDB4ODA1MQo+ICsjZGVmaW5lIE9QX1JFTV9QUk9WX1NDQU5fU1RBUlTCoMKgwqDCoMKg wqDCoMKgwqAweDgwNTIKPiArI2RlZmluZSBPUF9SRU1fUFJPVl9TQ0FOX1NUT1DCoMKgwqDCoMKg wqDCoMKgwqDCoDB4ODA1Mwo+ICsjZGVmaW5lIE9QX1JFTV9QUk9WX1NDQU5fU1RBVFVTwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAweDgwNTQKPiArI2RlZmluZSBPUF9SRU1fUFJPVl9T Q0FOX1JFUE9SVMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgMHg4MDU1Cj4gKyNkZWZp bmUgT1BfUkVNX1BST1ZfRVhUX1NDQU5fU1RBUlTCoMKgwqDCoMKgMHg4MDU2Cj4gKyNkZWZpbmUg T1BfUkVNX1BST1ZfRVhUX1NDQU5fUkVQT1JUwqDCoMKgwqAweDgwNTcKPiArI2RlZmluZSBPUF9S RU1fUFJPVl9MSU5LX0dFVMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAweDgwNTgKPiArI2RlZmluZSBP UF9SRU1fUFJPVl9MSU5LX09QRU7CoMKgwqDCoMKgwqDCoMKgwqDCoDB4ODA1OQo+ICsjZGVmaW5l IE9QX1JFTV9QUk9WX0xJTktfQ0xPU0XCoMKgwqDCoMKgwqDCoMKgwqAweDgwNUEKPiArI2RlZmlu ZSBPUF9SRU1fUFJPVl9MSU5LX1NUQVRVU8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg MHg4MDVCCj4gKyNkZWZpbmUgT1BfUkVNX1BST1ZfTElOS19SRVBPUlTCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoDB4ODA1Qwo+ICsjZGVmaW5lIE9QX1JFTV9QUk9WX1BEVV9TRU5EwqDC oMKgwqDCoMKgwqDCoMKgwqDCoDB4ODA1RAo+ICsjZGVmaW5lIE9QX1JFTV9QUk9WX1BEVV9PQl9S RVBPUlTCoMKgwqDCoMKgwqAweDgwNUUKPiArI2RlZmluZSBPUF9SRU1fUFJPVl9QRFVfUkVQT1JU wqDCoMKgwqDCoMKgwqDCoMKgMHg4MDVGCj4gKwo+ICsvKiBSZW1vdGUgUHJvdmlzaW9uaW5nIEVy cm9ycyAqLwo+ICsjZGVmaW5lIFBCX1JFTV9FUlJfU1VDQ0VTU8KgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoDB4MDAKPiArI2RlZmluZSBQQl9SRU1fRVJSX1NDQU5OSU5H X0NBTk5PVF9TVEFSVMKgwqDCoMKgwqDCoMKgMHgwMQo+ICsjZGVmaW5lIFBCX1JFTV9FUlJfSU5W QUxJRF9TVEFURcKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoDB4MDIKPiArI2RlZmluZSBQ Ql9SRU1fRVJSX0xJTUlURURfUkVTT1VSQ0VTwqDCoMKgwqDCoMKgwqDCoMKgwqDCoDB4MDMKPiAr I2RlZmluZSBQQl9SRU1fRVJSX0NBTk5PVF9PUEVOwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoDB4MDQKPiArI2RlZmluZSBQQl9SRU1fRVJSX09QRU5fRkFJTEVEwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoDB4MDUKPiArI2RlZmluZSBQQl9SRU1fRVJSX0NMT1NFRF9C WV9ERVZJQ0XCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAweDA2Cj4gKyNkZWZpbmUgUEJfUkVNX0VS Ul9DTE9TRURfQllfU0VSVkVSwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgMHgwNwo+ICsjZGVmaW5l IFBCX1JFTV9FUlJfQ0xPU0VEX0JZX0NMSUVOVMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoDB4MDgK PiArI2RlZmluZSBQQl9SRU1fRVJSX0NMT1NFRF9DQU5OT1RfUlhfUERVwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqAweDA5Cj4gKyNkZWZpbmUgUEJfUkVNX0VSUl9DTE9TRURfQ0FOTk9U X1RYX1BEVcKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgMHgwQQo+ICsKPiArdm9pZCBy ZW1vdGVfcHJvdl9zZXJ2ZXJfaW5pdChzdHJ1Y3QgbWVzaF9ub2RlICpub2RlLCB1aW50OF90Cj4g ZWxlX2lkeCk7Cj4gK3ZvaWQgcmVtb3RlX3Byb3ZfY2xpZW50X2luaXQoc3RydWN0IG1lc2hfbm9k ZSAqbm9kZSwgdWludDhfdAo+IGVsZV9pZHgpOwo+ICtib29sIHJlZ2lzdGVyX25wcGlfYWNjZXB0 b3IobWVzaF9wcm92X29wZW5fZnVuY190IG9wZW5fY2IsCj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oG1lc2hfcHJvdl9jbG9zZV9mdW5jX3QKPiBjbG9zZV9jYiwKPiArwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgbWVzaF9wcm92X3JlY2VpdmVfZnVuY190Cj4gcnhfY2IsCj4gK8KgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoG1lc2hfcHJvdl9hY2tfZnVuY190IGFja19jYiwKPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg dm9pZCAqdXNlcl9kYXRhKTsKCg==