Received: from malur.postgresql.org ([217.196.149.56]) by arkaria.postgresql.org with esmtps (TLS1.3:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.92) (envelope-from ) id 1odMKe-0002iX-9K for pgsql-hackers@arkaria.postgresql.org; Wed, 28 Sep 2022 01:57:53 +0000 Received: from localhost ([127.0.0.1] helo=malur.postgresql.org) by malur.postgresql.org with esmtp (Exim 4.92) (envelope-from ) id 1odMKc-0006rC-Bs for pgsql-hackers@arkaria.postgresql.org; Wed, 28 Sep 2022 01:57:50 +0000 Received: from magus.postgresql.org ([2a02:c0:301:0:ffff::29]) by malur.postgresql.org with esmtps (TLS1.3:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.92) (envelope-from ) id 1odMKb-0006r3-B5 for pgsql-hackers@lists.postgresql.org; Wed, 28 Sep 2022 01:57:49 +0000 Received: from smtp-fw-80006.amazon.com ([99.78.197.217]) by magus.postgresql.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.92) (envelope-from ) id 1odMKR-0003MT-VB for pgsql-hackers@postgresql.org; Wed, 28 Sep 2022 01:57:48 +0000 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=amazon.com; i=@amazon.com; q=dns/txt; s=amazon201209; t=1664330260; x=1695866260; h=from:to:cc:subject:date:message-id:references: in-reply-to:mime-version; bh=RzNQTNIJr+cp4bXFT6zPrA8cQzNrOvs+bj1hNFbs5lc=; b=oAniUZ7uGi/0zj+w1cA5gx8dduV5jYGQehfVv30wtTK2O5ERxgWqnKCs 2ERRPNrEZ1PlXAiOCiFlLNQmFK/YhmEx1HfD3KWgSjPaLmKHMIQG+vx34 fuE9W6kTU2ADf903yewY/UXxF2FPm1u725LbHXcr0YJjCayDI6X01I771 0=; X-Amazon-filename: 0001-heikki-munro-plus-page-header.patch X-IronPort-AV: E=Sophos;i="5.93,350,1654560000"; d="scan'208,223";a="134603667" Received: from pdx4-co-svc-p1-lb2-vlan2.amazon.com (HELO email-inbound-relay-pdx-2a-6fd66c4a.us-west-2.amazon.com) ([10.25.36.210]) by smtp-border-fw-80006.pdx80.corp.amazon.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 28 Sep 2022 01:57:36 +0000 Received: from EX13MTAUEE002.ant.amazon.com (pdx1-ws-svc-p6-lb9-vlan2.pdx.amazon.com [10.236.137.194]) by email-inbound-relay-pdx-2a-6fd66c4a.us-west-2.amazon.com (Postfix) with ESMTPS id 32DCF853FC; Wed, 28 Sep 2022 01:57:36 +0000 (UTC) Received: from EX13D35UEE001.ant.amazon.com (10.43.62.13) by EX13MTAUEE002.ant.amazon.com (10.43.62.24) with Microsoft SMTP Server (TLS) id 15.0.1497.38; Wed, 28 Sep 2022 01:57:35 +0000 Received: from EX13D35UEE001.ant.amazon.com (10.43.62.13) by EX13D35UEE001.ant.amazon.com (10.43.62.13) with Microsoft SMTP Server (TLS) id 15.0.1497.38; Wed, 28 Sep 2022 01:57:34 +0000 Received: from EX13D35UEE001.ant.amazon.com ([10.43.62.13]) by EX13D35UEE001.ant.amazon.com ([10.43.62.13]) with mapi id 15.00.1497.040; Wed, 28 Sep 2022 01:57:34 +0000 From: "Bagga, Rishu" To: Thomas Munro , Heikki Linnakangas CC: pgsql-hackers Subject: Re: SLRUs in the main buffer pool - Page Header definitions Thread-Topic: SLRUs in the main buffer pool - Page Header definitions Thread-Index: AQHYhnvxezKTgPNs7k2tXj3iuMBOO630OQiA Date: Wed, 28 Sep 2022 01:57:34 +0000 Message-ID: <7C4D53F1-A156-4ABC-9B89-B2C253D5FF74@amazon.com> References: In-Reply-To: Accept-Language: en-US Content-Language: en-US X-MS-Has-Attach: yes X-MS-TNEF-Correlator: x-ms-exchange-messagesentrepresentingtype: 1 x-ms-exchange-transport-fromentityheader: Hosted x-originating-ip: [10.43.62.213] Content-Type: multipart/mixed; boundary="_002_7C4D53F1A1564ABC9B89B2C253D5FF74amazoncom_" MIME-Version: 1.0 List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Archived-At: Precedence: bulk --_002_7C4D53F1A1564ABC9B89B2C253D5FF74amazoncom_ Content-Type: text/plain; charset="utf-8" Content-ID: <95353B609FE1D64D931E959664D50B80@amazon.com> Content-Transfer-Encoding: base64 SGksIA0KDQpXZSBoYXZlIGJlZW4gd29ya2luZyBvbiBhZGRpbmcgcGFnZSBoZWFkZXJzIHRvIHRo ZSBTTFJVIHBhZ2VzLCBhcyBwYXJ0IG9mIHRoZSBtaWdyYXRpb24gZm9yIFNMUlUgdG8gYnVmZmVy IGNhY2hlLiBXZeKAmXZlIGluY29ycG9yYXRlZCBUaG9tYXMgTXVucm/igJlzIHBhdGNoIGFuZCBI ZWlra2nigJlzIFN0b3JhZ2UgbWFuYWdlciBjaGFuZ2VzWzFdIGFuZCBoYXZlIGEgcGF0Y2ggZm9y IGVhcmx5IGZlZWRiYWNrLiANCg0KQXMgcGFydCBvZiBvdXIgY2hhbmdlcyB3ZSBoYXZlOg0KDQox LiBBZGRlZCBwYWdlIGhlYWRlcnMgdG8gdGhlIGZvbGxvd2luZw0KICANCiAgICAgICAgICAgICAg ICpDb21taXRfVFMNCiAgCSpDTE9HDQogIAkqTXVsdGlYYWN0DQogIAkqU3VidHJhbnMNCiAgCSpT ZXJpYWwgKHByZWRpY2F0ZS5jKQ0KICAJKk5vdGlmeSAoYXN5bmMuYykNCg0KRm9yIGNvbW1pdF90 cywgY2xvZyBhbmQgTXVsdGlYYWN0LCB0aGUgUGFnZVhMb2dSZWNQdHIgZmllbGQgaXMgcG9wdWxh dGVkIHdpdGggdGhlIExTTiByZXR1cm5lZCBkdXJpbmcgdGhlIGNyZWF0aW9uIG9mIGEgbmV3IHBh Z2U7IGFzIHRoZXJlIGlzIG5vIFdBTCByZWNvcmQgZm9yIHRoZSByZXN0LCBQYWdlWExvZ1JlY1B0 ciBpcyBzZXQgdG8g4oCcSW52YWxpZFhsb2dSZWNQdHLigJ0uDQoNClRoZXJlIGlzIG9uZSBmYWls aW5nIGFzc2VydCBpbiBwcmVkaWNhdGUuYyBmb3IgU2VyaWFsUGFnZVByZWNlZGVzIHdpdGggdGhl IHBhZ2UgaGVhZGVyIGNoYW5nZXM7IHdlIGFyZSBsb29raW5nIGludG8gdGhpcyBpc3N1ZS4NCg0K VGhlIHBhZ2VfdmVyc2lvbiBpcyBzZXQgdG8gUEdfTUVUQVBBR0VfTEFZT1VUX1ZFUlNJT04gKHdo aWNoIGlzIDEpDQoNCg0KMi4gQ2hhbmdlIGJsb2NrIG51bWJlciBwYXNzZWQgaW50byBSZWFkU2xy dUJ1ZmZlciBmcm9tIHJlbGF0aXZlIHRvIGFic29sdXRlLCBhbmQgYWNjb3VudCBmb3IgU0xSVeKA mXMgMjU2a2Igc2VnbWVudCBzaXplIGluIG1kLmMuDQoNCg0KDQpUaGUgY2hhbmdlcyBwYXNzIHRo ZSByZWdyZXNzaW9uIHRlc3RzLiBXZSBhcmUgc3RpbGwgd29ya2luZyBvbiBoYW5kbGluZyB0aGUg dXBncmFkZSBzY2VuYXJpbyBhbmQgc2hvdWxkIGhhdmUgYSBwYXRjaCBvdXQgZm9yIHRoYXQgc29v bi4NCg0KQXR0YWNoZWQgaXMgdGhlIHBhdGNoIHdpdGggYWxsIGNoYW5nZXMgKEhlaWtraSBhbmQg TXVucm/igJlzIHBhdGNoIGFuZCBwYWdlIGhlYWRlcnMpIGNvbnNvbGlkYXRlZCANCg0KDQpUaGFu a3MsDQpSaXNodSBCYWdnYSwgQW1hem9uIFdlYiBTZXJ2aWNlcyAoQVdTKQ0KDQpbMV0gaHR0cHM6 Ly93d3cucG9zdGdyZXNxbC5vcmcvbWVzc2FnZS1pZC8xMjg3MDliYy05OTJjLWI1N2EtNzE3NC0w OTg0MzNiN2ZhYTRAaWtpLmZpDQoNClsyXSBodHRwczovL3d3dy5wb3N0Z3Jlc3FsLm9yZy9tZXNz YWdlLWlkL0NBK2hVS0crMDJaRi12anRVRzRwSDhieCsyRG49ZU1oOEdzVDZqYXNpWFpQZ1Z4VVhM d0BtYWlsLmdtYWlsLmNvbQ0KDQoNCg0KDQoNCg0KDQrvu79PbiA5LzI3LzIyLCA2OjU0IFBNLCAi QmFnZ2EsIFJpc2h1IiA8YmFncmlzaHVAYW1hem9uLmNvbT4gd3JvdGU6DQoNCiAgICBIaSBhbGws DQoNCiAgICBQb3N0Z3JlU1FMIGN1cnJlbnRseSBtYWludGFpbnMgc2V2ZXJhbCBkYXRhIHN0cnVj dHVyZXMgaW4gdGhlIFNMUlUNCiAgICBjYWNoZS4gVGhlIFNMUlUgY2FjaGUgaGFzIHNjYWxpbmcg YW5kIHNpemluZyBjaGFsbGVuZ2VzIGJlY2F1c2Ugb2YgaXTigJlzDQogICAgc2ltcGxlIGltcGxl bWVudGF0aW9uLiBUaGUgZ29hbCBpcyB0byBtb3ZlIHRoZXNlIGNhY2hlcyB0byB0aGUgY29tbW9u DQogICAgYnVmZmVyIGNhY2hlIHRvIGJlbmVmaXQgZnJvbSB0aGUgc3Ryb25nZXIgY2FwYWJpbGl0 aWVzIG9mIHRoZSBjb21tb24NCiAgICBidWZmZXJjYWNoZSBjb2RlLiBBdCBBV1MsIHdlIGFyZSBi dWlsZGluZyBvbiB0aGUgcGF0Y2ggc2hhcmVkIGJ5IFRob21hcw0KICAgIE11bnJvIFsxXSwgd2hp Y2ggdHJlYXRzIHRoZSBTTFJVIHBhZ2VzIGFzIHBhcnQgb2YgYSBwc2V1ZG8tZGF0YWJhdGFiZQ0K ICAgIG9mIElEIDkuIFdlIHdpbGwgcmVmZXIgdG8gdGhlIHBhZ2VzIGJlbG9uZ2luZyB0byBTTFJV IGNvbXBvbmVudHMgYXMNCiAgICBCdWZmZXJlZE9iamVjdCBwYWdlcyBnb2luZyBmb3J3YXJkLg0K DQogICAgVGhlIGN1cnJlbnQgU0xSVSBwYWdlcyBkbyBub3QgaGF2ZSBhbnkgaGVhZGVyLCBzbyB0 aGVyZSBpcyBhIG5lZWQgdG8NCiAgICBjcmVhdGUgYSBuZXcgcGFnZSBoZWFkZXIgZm9ybWF0IGZv ciB0aGVzZS4gT3VyIGludmVzdGlnYXRpb25zIHJldmVhbGVkDQogICAgdGhhdCB3ZSBuZWVkIHRv Og0KDQogICAgMS4gdHJhY2sgTFNOIHRvIGVuc3VyZSBkdXJhYmlsaXR5IGFuZCBjb25zaXN0ZW5j eSBvZiBhbGwgcGFnZXMgKGZvciByZWRvDQogICAgICAgYW5kIGZ1bGwgcGFnZSB3cml0ZSBwdXJw b3NlcykNCiAgICAyLiBoYXZlIGEgY2hlY2tzdW0gKGZvciBwYWdlIGNvcnJlY3RuZXNzIHZlcmlm aWNhdGlvbikuDQogICAgMy4gQSBmbGFnIHRvIGlkZW50aWZ5IGlmIHRoZSBwYWdlIGlzIGEgcmVs YXRpb25hbCBvciBCdWZmZXJlZE9iamVjdA0KICAgIDQuIFRyYWNrIHZlcnNpb24gaW5mb3JtYXRp b24uDQoNCiAgICBXZSBhcmUgc3VnZ2VzdGluZyBhIG1pbmltYWwgQnVmZmVyZWRPYmplY3QgcGFn ZSBoZWFkZXINCiAgICB0byBiZSB0aGUgZm9sbG93aW5nLCBvdmVybGFwcGluZyB3aXRoIHRoZSBr ZXkgZmllbGRzIG5lYXIgdGhlIGJlZ2lubmluZw0KICAgIG9mIHRoZSByZWd1bGFyIFBhZ2VIZWFk ZXJEYXRhOg0KDQogICAgdHlwZWRlZiBzdHJ1Y3QgQnVmZmVyZWRPYmplY3RQYWdlSGVhZGVyRGF0 YQ0KICAgIHsNCiAgICAgICAgUGFnZVhMb2dSZWNQdHIgcGRfbHNuOw0KICAgICAgICB1aW50MTZf dCAgICAgICBwZF9jaGVja3N1bTsNCiAgICAgICAgdWludDE2X3QgICAgICAgcGRfZmxhZ3M7DQog ICAgICAgIHVpbnQxNl90ICAgICAgIHBkX3BhZ2VzaXplX3ZlcnNpb247DQogICAgfSBCdWZmZXJl ZE9iamVjdFBhZ2VIZWFkZXJEYXRhOw0KDQogICAgRm9yIHJlZmVyZW5jZSwgdGhlIHJlZ3VsYXIg cGFnZSBoZWFkZXIgbG9va3MgbGlrZSB0aGUgZm9sbG93aW5nOg0KICAgIHR5cGVkZWYgc3RydWN0 IFBhZ2VIZWFkZXJEYXRhDQogICAgew0KICAgICAgICBQYWdlWExvZ1JlY1B0ciAgICBwZF9sc247 DQogICAgICAgIHVpbnQxNl90ICAgIHBkX2NoZWNrc3VtOw0KICAgICAgICB1aW50MTZfdCAgICBw ZF9mbGFnczsNCiAgICAgICAgTG9jYXRpb25JbmRleCAgIHBkX2xvd2VyOw0KICAgICAgICBMb2Nh dGlvbkluZGV4ICAgcGRfdXBwZXI7DQogICAgICAgIExvY2F0aW9uSW5kZXggICBwZF9zcGVjaWFs Ow0KICAgICAgICB1aW50MTZfdCAgICAgICAgICAgcGRfcGFnZXNpemVfdmVyc2lvbjsNCiAgICAg ICAgVHJhbnNhY3Rpb25JZCAgIHBkX3BydW5lX3hpZDsNCiAgICAgICAgSXRlbUlkRGF0YUNvbW1v biAgcGRfbGlucFtdOw0KICAgIH0gUGFnZUhlYWRlckRhdGE7DQoNCiAgICBBZnRlciBjYXJlZnVs IHJldmlldywgd2UgaGF2ZSB0cmltbWVkIG91dCB0aGUgaGVhcCBhbmQgaW5kZXggc3BlY2lmaWMN CiAgICBmaWVsZHMgZnJvbSB0aGUgc3VnZ2VzdGVkIGhlYWRlciB0aGF0IGRvIG5vdCBhZGQgYW55 IHZhbHVlIHRvIFNMUlUNCiAgICBjb21wb25lbnRzLiBXZSBwbGFuIHRvIHVzZSBwZF9sc24sIHBk X2NoZWNrc3VtLCBhbmQgcGRfcGFnZXNpemVfdmVyc2lvbg0KICAgIGluIHRoZSBzYW1lIHdheSB0 aGF0IHRoZXkgYXJlIGluIHJlbGF0aW9uYWwgcGFnZXMuIFRoZXNlIGZpZWxkcyBhcmUNCiAgICBu ZWVkZWQgdG8gZW5zdXJlIGNvbnNpc3RlbmN5LCBkdXJhYmlsaXR5IGFuZCBwYWdlIGNvcnJlY3Ru ZXNzLg0KDQogICAgV2Ugd2lsbCB1c2UgdGhlIDR0aCBiaXQgb2YgcGRfZmxhZ3MgdG8gaWRlbnRp ZnkgYSBCdWZmZXJlZE9iamVjdCBwYWdlLg0KICAgIElmIHRoZSBiaXQgaXMgc2V0IHRoZW4gdGhp cyBkZW5vdGVzIGEgQnVmZmVyZWRPYmplY3QgcGFnZS4gVG9kYXksIGJpdHMNCiAgICAxIC0gMyBh cmUgdXNlZCBmb3IgZGV0ZXJtaW5pbmcgaWYgdGhlcmUgYXJlIGFueSBmcmVlIGxpbmUgcG9pbnRl cnMsIGlmDQogICAgdGhlIHBhZ2UgaXMgZnVsbCwgYW5kIGlmIGFsbCB0dXBsZXMgb24gdGhlIHBh Z2UgYXJlIHZpc2libGUgdG8NCiAgICBldmVyeW9uZSwgcmVzcGVjdGl2ZWx5LiBXZSB3aWxsIHVz ZSB0aGlzIGluZm9ybWF0aW9uIGFjY29yZGluZ2x5IGluIHRoZQ0KICAgIHN0b3JhZ2UgbWFuYWdl ciB0byBkZXRlcm1pbmUgd2hpY2ggY2FsbGJhY2sgZnVuY3Rpb25zIHRvIHVzZSBmb3IgZmlsZQ0K ICAgIEkvTyBvcGVyYXRpb25zLiBUaGlzIGFwcHJvYWNoIGFsbG93cyB0aGUgYnVmZmVyY2FjaGUg dG8gaGF2ZSBhbg0KICAgIHVuaXZlcnNhbCBtZXRob2QgdG8gcXVpY2tseSBkZXRlcm1pbmUgd2hh dCB0eXBlIG9mIHBhZ2UgaXQgaXMgZGVhbGluZw0KICAgIHdpdGggYXQgYW55IHRpbWUuDQoNCiAg ICBVc2luZyB0aGUgbmV3IEJ1ZmZlcmVkT2JqZWN0IHBhZ2UgaGVhZGVyIHdpbGwgYmUgc3BhY2Ug ZWZmaWNpZW50IGJ1dA0KICAgIGludHJvZHVjZXMgYSBzaWduaWZpY2FudCBjaGFuZ2UgaW4gdGhl IGNvZGViYXNlIHRvIG5vdyB0cmFjayB0d28gdHlwZXMNCiAgICBvZiBwYWdlIGhlYWRlciBkYXRh LiBEdXJpbmcgdXBncmFkZSwgYWxsIFNMUlUgZmlsZXMgdGhhdCBleGlzdCBvbiB0aGUNCiAgICBz eXN0ZW0gbXVzdCBiZSBjb252ZXJ0ZWQgdG8gdGhlIG5ldyBmb3JtYXQgd2l0aCBwYWdlIGhlYWRl ci4gVGhpcyB3aWxsDQogICAgcmVxdWlyZSByZXdyaXRpbmcgYWxsIHRoZSBTTFJVIHBhZ2VzIHdp dGggdGhlIHBhZ2UgaGVhZGVyIGFzIHBhcnQgb2YNCiAgICBwZ191cGdyYWRlLg0KDQogICAgV2Ug YmVsaWV2ZSB0aGF0IHRoaXMgaXMgdGhlIGNvcnJlY3QgYXBwcm9hY2ggZm9yIHRoZSBsb25nIHJ1 bi4gV2Ugd291bGQNCiAgICBsb3ZlIGZlZWRiYWNrIGlmIHRoZXJlIGFyZSBhZGRpdGlvbmFsIGl0 ZW1zIG9mIGRhdGEgdGhhdCBzaG91bGQgYmUNCiAgICB0cmFja2VkIGFzIHdlbGwuIEFsdGVybmF0 aXZlbHksIHdlIGNvdWxkIHJlLXVzZSB0aGUgZXhpc3RpbmcgcGFnZQ0KICAgIGhlYWRlciBhbmQg dGhlIHVudXNlZCBmaWVsZHMgY291bGQgYmUgdXNlZCBhcyBhIHBhZGRpbmcuIFRoaXMgZmVlbHMN CiAgICBsaWtlIGFuIHVuY2xlYW4gYXBwcm9hY2ggYnV0IHdvdWxkIGF2b2lkIGhhdmluZyB0d28g cGFnZSBoZWFkZXIgdHlwZXMNCiAgICBpbiB0aGUgZGF0YWJhc2UuDQoNCg0KDQogICAgWzFdIC0g aHR0cHM6Ly93d3cucG9zdGdyZXNxbC5vcmcvbWVzc2FnZS1pZC9mbGF0L0NBK2hVS0dLQVl6ZTk5 Qi1qazlOb01wLTJCRHFBZ2lSQzRvSnYrYkZ4Z2hOZ2RpZXE4UUBtYWlsLmdtYWlsLmNvbQ0KDQoN Cg0KICAgIERpc2N1c3NlZCB3aXRoOiBKb2UgQ29ud2F5LCBOYXRoYW4gQm9zc2FydCwgU2hhd24g RGVibmF0aA0KDQoNCiAgICBSaXNodSBCYWdnYQ0KDQogICAgQW1hem9uIFdlYiBTZXJ2aWNlcyAo QVdTKQ0KDQoNCg0KDQo= --_002_7C4D53F1A1564ABC9B89B2C253D5FF74amazoncom_ Content-Type: application/octet-stream; name="0001-heikki-munro-plus-page-header.patch" Content-Description: 0001-heikki-munro-plus-page-header.patch Content-Disposition: attachment; filename="0001-heikki-munro-plus-page-header.patch"; size=333672; creation-date="Wed, 28 Sep 2022 01:57:34 GMT"; modification-date="Wed, 28 Sep 2022 01:57:34 GMT" Content-ID: <941FAFAAEBE4EB4DBB48C9DDD1588C12@amazon.com> Content-Transfer-Encoding: base64 RnJvbSAwZTY1ZGMzN2Q5YjExMWUxNjliM2RhNDNkNTE5ZjYwYmUwMDE4NmVjIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBSaXNodSBCYWdnYSA8YmFncmlzaHVAYW1hem9uLmNvbT4KRGF0 ZTogVGh1LCAxNSBTZXAgMjAyMiAwMDo1NToyNSArMDAwMApTdWJqZWN0OiBbUEFUQ0hdIGhlaWtr aSBwYXRjaCAwNy8yNQoKY3I6IGh0dHBzOi8vY29kZS5hbWF6b24uY29tL3Jldmlld3MvQ1ItNzU5 OTcyMDUKCmhlaWtraSBwYXRjaCBmaXgKCmNyOiBodHRwczovL2NvZGUuYW1hem9uLmNvbS9yZXZp ZXdzL0NSLTc2NzI5MzY5CgpwYWdlIGhlYWRlcnMgb24gc2xydSBjb21wb25lbnRzCi0tLQogY29u dHJpYi9hbWNoZWNrL3ZlcmlmeV9uYnRyZWUuYyAgICAgICAgICAgICB8ICAgIDIgKy0KIGNvbnRy aWIvYmxvb20vYmxpbnNlcnQuYyAgICAgICAgICAgICAgICAgICAgfCAgICA2ICstCiBjb250cmli L3BnX3ByZXdhcm0vYXV0b3ByZXdhcm0uYyAgICAgICAgICAgIHwgICAgMiArLQogY29udHJpYi9w Z19wcmV3YXJtL3BnX3ByZXdhcm0uYyAgICAgICAgICAgICB8ICAgIDQgKy0KIGNvbnRyaWIvcGdf dmlzaWJpbGl0eS9wZ192aXNpYmlsaXR5LmMgICAgICAgfCAgICA1ICstCiBzcmMvYmFja2VuZC9h Y2Nlc3MvZ2lzdC9naXN0YnVpbGQuYyAgICAgICAgIHwgICAxMSArLQogc3JjL2JhY2tlbmQvYWNj ZXNzL2hhc2gvaGFzaHBhZ2UuYyAgICAgICAgICB8ICAgIDIgKy0KIHNyYy9iYWNrZW5kL2FjY2Vz cy9oZWFwL2hlYXBhbV9oYW5kbGVyLmMgICAgfCAgIDMyICstCiBzcmMvYmFja2VuZC9hY2Nlc3Mv aGVhcC9yZXdyaXRlaGVhcC5jICAgICAgIHwgICAgNiArLQogc3JjL2JhY2tlbmQvYWNjZXNzL2hl YXAvdmlzaWJpbGl0eW1hcC5jICAgICB8ICAgNDEgKy0KIHNyYy9iYWNrZW5kL2FjY2Vzcy9uYnRy ZWUvbmJ0cmVlLmMgICAgICAgICAgfCAgICA2ICstCiBzcmMvYmFja2VuZC9hY2Nlc3MvbmJ0cmVl L25idHNvcnQuYyAgICAgICAgIHwgICAgOCArLQogc3JjL2JhY2tlbmQvYWNjZXNzL3NwZ2lzdC9z cGdpbnNlcnQuYyAgICAgICB8ICAgMTcgKy0KIHNyYy9iYWNrZW5kL2FjY2Vzcy90YWJsZS90YWJs ZWFtLmMgICAgICAgICAgfCAgICA0ICstCiBzcmMvYmFja2VuZC9hY2Nlc3MvdHJhbnNhbS9jbG9n LmMgICAgICAgICAgIHwgIDIyMyArLS0KIHNyYy9iYWNrZW5kL2FjY2Vzcy90cmFuc2FtL2NvbW1p dF90cy5jICAgICAgfCAgMTk0ICstLQogc3JjL2JhY2tlbmQvYWNjZXNzL3RyYW5zYW0vbXVsdGl4 YWN0LmMgICAgICB8ICA0NDQgKysrLS0tCiBzcmMvYmFja2VuZC9hY2Nlc3MvdHJhbnNhbS9zbHJ1 LmMgICAgICAgICAgIHwgMTQ4NyArKy0tLS0tLS0tLS0tLS0tLS0tCiBzcmMvYmFja2VuZC9hY2Nl c3MvdHJhbnNhbS9zdWJ0cmFucy5jICAgICAgIHwgIDEyNSArLQogc3JjL2JhY2tlbmQvYWNjZXNz L3RyYW5zYW0veGFjdC5jICAgICAgICAgICB8ICAgIDIgKwogc3JjL2JhY2tlbmQvYWNjZXNzL3Ry YW5zYW0veGxvZy5jICAgICAgICAgICB8ICAgMTUgKy0KIHNyYy9iYWNrZW5kL2FjY2Vzcy90cmFu c2FtL3hsb2dwcmVmZXRjaGVyLmMgfCAgIDI4ICstCiBzcmMvYmFja2VuZC9hY2Nlc3MvdHJhbnNh bS94bG9ndXRpbHMuYyAgICAgIHwgICAxNyArLQogc3JjL2JhY2tlbmQvY2F0YWxvZy9jYXRhbG9n LmMgICAgICAgICAgICAgICB8ICAgNTMgKy0KIHNyYy9iYWNrZW5kL2NhdGFsb2cvaW5kZXguYyAg ICAgICAgICAgICAgICAgfCAgICA0ICstCiBzcmMvYmFja2VuZC9jYXRhbG9nL3N0b3JhZ2UuYyAg ICAgICAgICAgICAgIHwgIDIwNSArKy0KIHNyYy9iYWNrZW5kL2NvbW1hbmRzL2FzeW5jLmMgICAg ICAgICAgICAgICAgfCAgIDk4ICstCiBzcmMvYmFja2VuZC9jb21tYW5kcy9kYmNvbW1hbmRzLmMg ICAgICAgICAgIHwgICAgMiArLQogc3JjL2JhY2tlbmQvY29tbWFuZHMvc2VxdWVuY2UuYyAgICAg ICAgICAgICB8ICAgIDggKy0KIHNyYy9iYWNrZW5kL2NvbW1hbmRzL3RhYmxlY21kcy5jICAgICAg ICAgICAgfCAgIDE5ICstCiBzcmMvYmFja2VuZC9zdG9yYWdlL2J1ZmZlci9idWZfaW5pdC5jICAg ICAgIHwgICAxNyArLQogc3JjL2JhY2tlbmQvc3RvcmFnZS9idWZmZXIvYnVmbWdyLmMgICAgICAg ICB8ICAzMjEgKystLQogc3JjL2JhY2tlbmQvc3RvcmFnZS9idWZmZXIvbG9jYWxidWYuYyAgICAg ICB8ICAgMjUgKy0KIHNyYy9iYWNrZW5kL3N0b3JhZ2UvZnJlZXNwYWNlL2ZyZWVzcGFjZS5jICAg fCAgIDQxICstCiBzcmMvYmFja2VuZC9zdG9yYWdlL2lwYy9pcGNpLmMgICAgICAgICAgICAgIHwg ICAgNCAtCiBzcmMvYmFja2VuZC9zdG9yYWdlL2xtZ3IvcHJlZGljYXRlLmMgICAgICAgIHwgICA3 NCArLQogc3JjL2JhY2tlbmQvc3RvcmFnZS9zbWdyL21kLmMgICAgICAgICAgICAgICB8ICA0MzYg KysrLS0tCiBzcmMvYmFja2VuZC9zdG9yYWdlL3NtZ3Ivc21nci5jICAgICAgICAgICAgIHwgIDM5 OSArKystLQogc3JjL2JhY2tlbmQvc3RvcmFnZS9zeW5jL3N5bmMuYyAgICAgICAgICAgICB8ICAg MjAgKy0KIHNyYy9iYWNrZW5kL3V0aWxzL2NhY2hlL2ludmFsLmMgICAgICAgICAgICAgfCAgIDE3 ICstCiBzcmMvYmFja2VuZC91dGlscy9jYWNoZS9yZWxjYWNoZS5jICAgICAgICAgIHwgICAxNSAr LQogc3JjL2JhY2tlbmQvdXRpbHMvbW1nci9tY3h0LmMgICAgICAgICAgICAgICB8ICAgMTMgKy0K IHNyYy9iaW4vcGdfcmV3aW5kL2ZpbGVtYXAuYyAgICAgICAgICAgICAgICAgfCAgICA5ICstCiBz cmMvY29tbW9uL3JlbHBhdGguYyAgICAgICAgICAgICAgICAgICAgICAgIHwgICAzMSArLQogc3Jj L2luY2x1ZGUvYWNjZXNzL2Nsb2cuaCAgICAgICAgICAgICAgICAgICB8ICAgIDYgLQogc3JjL2lu Y2x1ZGUvYWNjZXNzL2NvbW1pdF90cy5oICAgICAgICAgICAgICB8ICAgIDMgLQogc3JjL2luY2x1 ZGUvYWNjZXNzL211bHRpeGFjdC5oICAgICAgICAgICAgICB8ICAgIDMgLQogc3JjL2luY2x1ZGUv YWNjZXNzL3NscnUuaCAgICAgICAgICAgICAgICAgICB8ICAxODAgKy0tCiBzcmMvaW5jbHVkZS9h Y2Nlc3Mvc2xydWxpc3QuaCAgICAgICAgICAgICAgIHwgICAzMCArCiBzcmMvaW5jbHVkZS9hY2Nl c3Mvc3VidHJhbnMuaCAgICAgICAgICAgICAgIHwgICAgMyAtCiBzcmMvaW5jbHVkZS9jYXRhbG9n L3N0b3JhZ2UuaCAgICAgICAgICAgICAgIHwgICAxMSArLQogc3JjL2luY2x1ZGUvY29tbW9uL3Jl bHBhdGguaCAgICAgICAgICAgICAgICB8ICAgMTUgKy0KIHNyYy9pbmNsdWRlL3N0b3JhZ2UvYnVm X2ludGVybmFscy5oICAgICAgICAgfCAgIDExICstCiBzcmMvaW5jbHVkZS9zdG9yYWdlL2J1Zm1n ci5oICAgICAgICAgICAgICAgIHwgICAzMyArLQogc3JjL2luY2x1ZGUvc3RvcmFnZS9idWZwYWdl LmggICAgICAgICAgICAgICB8ICAgMTIgKwogc3JjL2luY2x1ZGUvc3RvcmFnZS9tZC5oICAgICAg ICAgICAgICAgICAgICB8ICAgMjkgKy0KIHNyYy9pbmNsdWRlL3N0b3JhZ2UvcmVsZmlsZWxvY2F0 b3IuaCAgICAgICAgfCAgIDI5ICstCiBzcmMvaW5jbHVkZS9zdG9yYWdlL3NtZ3IuaCAgICAgICAg ICAgICAgICAgIHwgICA5OSArLQogc3JjL2luY2x1ZGUvdXRpbHMvaW52YWwuaCAgICAgICAgICAg ICAgICAgICB8ICAgIDIgKy0KIHNyYy9pbmNsdWRlL3V0aWxzL3JlbC5oICAgICAgICAgICAgICAg ICAgICAgfCAgIDM4ICstCiA2MCBmaWxlcyBjaGFuZ2VkLCAxNzg1IGluc2VydGlvbnMoKyksIDMy MTEgZGVsZXRpb25zKC0pCiBjcmVhdGUgbW9kZSAxMDA2NDQgc3JjL2luY2x1ZGUvYWNjZXNzL3Ns cnVsaXN0LmgKCmRpZmYgLS1naXQgYS9jb250cmliL2FtY2hlY2svdmVyaWZ5X25idHJlZS5jIGIv Y29udHJpYi9hbWNoZWNrL3ZlcmlmeV9uYnRyZWUuYwppbmRleCAyYmVlZWJiMTYzNS4uM2FhMjBi YjVjY2MgMTAwNjQ0Ci0tLSBhL2NvbnRyaWIvYW1jaGVjay92ZXJpZnlfbmJ0cmVlLmMKKysrIGIv Y29udHJpYi9hbWNoZWNrL3ZlcmlmeV9uYnRyZWUuYwpAQCAtMzIzLDcgKzMyMyw3IEBAIGJ0X2lu ZGV4X2NoZWNrX2ludGVybmFsKE9pZCBpbmRyZWxpZCwgYm9vbCBwYXJlbnRjaGVjaywgYm9vbCBo ZWFwYWxsaW5kZXhlZCwKIAkJYm9vbAkJaGVhcGtleXNwYWNlLAogCQkJCQlhbGxlcXVhbGltYWdl OwogCi0JCWlmICghc21ncmV4aXN0cyhSZWxhdGlvbkdldFNtZ3IoaW5kcmVsKSwgTUFJTl9GT1JL TlVNKSkKKwkJaWYgKCFzbWdyZXhpc3RzKFJlbGF0aW9uR2V0U21ncihpbmRyZWwsIE1BSU5fRk9S S05VTSkpKQogCQkJZXJlcG9ydChFUlJPUiwKIAkJCQkJKGVycmNvZGUoRVJSQ09ERV9JTkRFWF9D T1JSVVBURUQpLAogCQkJCQkgZXJybXNnKCJpbmRleCBcIiVzXCIgbGFja3MgYSBtYWluIHJlbGF0 aW9uIGZvcmsiLApkaWZmIC0tZ2l0IGEvY29udHJpYi9ibG9vbS9ibGluc2VydC5jIGIvY29udHJp Yi9ibG9vbS9ibGluc2VydC5jCmluZGV4IGU2NDI5MWUwNDlhLi40OWYzYTQ2YzEyNSAxMDA2NDQK LS0tIGEvY29udHJpYi9ibG9vbS9ibGluc2VydC5jCisrKyBiL2NvbnRyaWIvYmxvb20vYmxpbnNl cnQuYwpAQCAtMTc3LDkgKzE3Nyw5IEBAIGJsYnVpbGRlbXB0eShSZWxhdGlvbiBpbmRleCkKIAkg KiB0aGlzIGV2ZW4gd2hlbiB3YWxfbGV2ZWw9bWluaW1hbC4KIAkgKi8KIAlQYWdlU2V0Q2hlY2tz dW1JbnBsYWNlKG1ldGFwYWdlLCBCTE9PTV9NRVRBUEFHRV9CTEtOTyk7Ci0Jc21ncndyaXRlKFJl bGF0aW9uR2V0U21ncihpbmRleCksIElOSVRfRk9SS05VTSwgQkxPT01fTUVUQVBBR0VfQkxLTk8s CisJc21ncndyaXRlKFJlbGF0aW9uR2V0U21ncihpbmRleCwgSU5JVF9GT1JLTlVNKSwgQkxPT01f TUVUQVBBR0VfQkxLTk8sCiAJCQkgIChjaGFyICopIG1ldGFwYWdlLCB0cnVlKTsKLQlsb2dfbmV3 cGFnZSgmKFJlbGF0aW9uR2V0U21ncihpbmRleCkpLT5zbWdyX3Jsb2NhdG9yLmxvY2F0b3IsIElO SVRfRk9SS05VTSwKKwlsb2dfbmV3cGFnZSgmaW5kZXgtPnJkX2xvY2F0b3IsIElOSVRfRk9SS05V TSwKIAkJCQlCTE9PTV9NRVRBUEFHRV9CTEtOTywgbWV0YXBhZ2UsIHRydWUpOwogCiAJLyoKQEAg LTE4Nyw3ICsxODcsNyBAQCBibGJ1aWxkZW1wdHkoUmVsYXRpb24gaW5kZXgpCiAJICogd3JpdGUg ZGlkIG5vdCBnbyB0aHJvdWdoIHNoYXJlZF9idWZmZXJzIGFuZCB0aGVyZWZvcmUgYSBjb25jdXJy ZW50CiAJICogY2hlY2twb2ludCBtYXkgaGF2ZSBtb3ZlZCB0aGUgcmVkbyBwb2ludGVyIHBhc3Qg b3VyIHhsb2cgcmVjb3JkLgogCSAqLwotCXNtZ3JpbW1lZHN5bmMoUmVsYXRpb25HZXRTbWdyKGlu ZGV4KSwgSU5JVF9GT1JLTlVNKTsKKwlzbWdyaW1tZWRzeW5jKFJlbGF0aW9uR2V0U21ncihpbmRl eCwgSU5JVF9GT1JLTlVNKSk7CiB9CiAKIC8qCmRpZmYgLS1naXQgYS9jb250cmliL3BnX3ByZXdh cm0vYXV0b3ByZXdhcm0uYyBiL2NvbnRyaWIvcGdfcHJld2FybS9hdXRvcHJld2FybS5jCmluZGV4 IGIyZDYwMjYwOTM0Li45MmQyM2Y0NWI2MCAxMDA2NDQKLS0tIGEvY29udHJpYi9wZ19wcmV3YXJt L2F1dG9wcmV3YXJtLmMKKysrIGIvY29udHJpYi9wZ19wcmV3YXJtL2F1dG9wcmV3YXJtLmMKQEAg LTUzNSw3ICs1MzUsNyBAQCBhdXRvcHJld2FybV9kYXRhYmFzZV9tYWluKERhdHVtIG1haW5fYXJn KQogCQkJICovCiAJCQlpZiAoYmxrLT5mb3JrbnVtID4gSW52YWxpZEZvcmtOdW1iZXIgJiYKIAkJ CQlibGstPmZvcmtudW0gPD0gTUFYX0ZPUktOVU0gJiYKLQkJCQlzbWdyZXhpc3RzKFJlbGF0aW9u R2V0U21ncihyZWwpLCBibGstPmZvcmtudW0pKQorCQkJCXNtZ3JleGlzdHMoUmVsYXRpb25HZXRT bWdyKHJlbCwgYmxrLT5mb3JrbnVtKSkpCiAJCQkJbmJsb2NrcyA9IFJlbGF0aW9uR2V0TnVtYmVy T2ZCbG9ja3NJbkZvcmsocmVsLCBibGstPmZvcmtudW0pOwogCQkJZWxzZQogCQkJCW5ibG9ja3Mg PSAwOwpkaWZmIC0tZ2l0IGEvY29udHJpYi9wZ19wcmV3YXJtL3BnX3ByZXdhcm0uYyBiL2NvbnRy aWIvcGdfcHJld2FybS9wZ19wcmV3YXJtLmMKaW5kZXggY2FmZjVjNGE4MGYuLjFlNTc0ODFlZjky IDEwMDY0NAotLS0gYS9jb250cmliL3BnX3ByZXdhcm0vcGdfcHJld2FybS5jCisrKyBiL2NvbnRy aWIvcGdfcHJld2FybS9wZ19wcmV3YXJtLmMKQEAgLTEwOSw3ICsxMDksNyBAQCBwZ19wcmV3YXJt KFBHX0ZVTkNUSU9OX0FSR1MpCiAJCWFjbGNoZWNrX2Vycm9yKGFjbHJlc3VsdCwgZ2V0X3JlbGtp bmRfb2JqdHlwZShyZWwtPnJkX3JlbC0+cmVsa2luZCksIGdldF9yZWxfbmFtZShyZWxPaWQpKTsK IAogCS8qIENoZWNrIHRoYXQgdGhlIGZvcmsgZXhpc3RzLiAqLwotCWlmICghc21ncmV4aXN0cyhS ZWxhdGlvbkdldFNtZ3IocmVsKSwgZm9ya051bWJlcikpCisJaWYgKCFzbWdyZXhpc3RzKFJlbGF0 aW9uR2V0U21ncihyZWwsIGZvcmtOdW1iZXIpKSkKIAkJZXJlcG9ydChFUlJPUiwKIAkJCQkoZXJy Y29kZShFUlJDT0RFX0lOVkFMSURfUEFSQU1FVEVSX1ZBTFVFKSwKIAkJCQkgZXJybXNnKCJmb3Jr IFwiJXNcIiBkb2VzIG5vdCBleGlzdCBmb3IgdGhpcyByZWxhdGlvbiIsCkBAIC0xNzcsNyArMTc3 LDcgQEAgcGdfcHJld2FybShQR19GVU5DVElPTl9BUkdTKQogCQlmb3IgKGJsb2NrID0gZmlyc3Rf YmxvY2s7IGJsb2NrIDw9IGxhc3RfYmxvY2s7ICsrYmxvY2spCiAJCXsKIAkJCUNIRUNLX0ZPUl9J TlRFUlJVUFRTKCk7Ci0JCQlzbWdycmVhZChSZWxhdGlvbkdldFNtZ3IocmVsKSwgZm9ya051bWJl ciwgYmxvY2ssIGJsb2NrYnVmZmVyLmRhdGEpOworCQkJc21ncnJlYWQoUmVsYXRpb25HZXRTbWdy KHJlbCwgZm9ya051bWJlciksIGJsb2NrLCBibG9ja2J1ZmZlci5kYXRhKTsKIAkJCSsrYmxvY2tz X2RvbmU7CiAJCX0KIAl9CmRpZmYgLS1naXQgYS9jb250cmliL3BnX3Zpc2liaWxpdHkvcGdfdmlz aWJpbGl0eS5jIGIvY29udHJpYi9wZ192aXNpYmlsaXR5L3BnX3Zpc2liaWxpdHkuYwppbmRleCBh OTVmNzNlYzc5Ni4uMzhjYjU2YzliY2UgMTAwNjQ0Ci0tLSBhL2NvbnRyaWIvcGdfdmlzaWJpbGl0 eS9wZ192aXNpYmlsaXR5LmMKKysrIGIvY29udHJpYi9wZ192aXNpYmlsaXR5L3BnX3Zpc2liaWxp dHkuYwpAQCAtMzg4LDEzICszODgsMTQgQEAgcGdfdHJ1bmNhdGVfdmlzaWJpbGl0eV9tYXAoUEdf RlVOQ1RJT05fQVJHUykKIAljaGVja19yZWxhdGlvbl9yZWxraW5kKHJlbCk7CiAKIAkvKiBGb3Jj aWJseSByZXNldCBjYWNoZWQgZmlsZSBzaXplICovCi0JUmVsYXRpb25HZXRTbWdyKHJlbCktPnNt Z3JfY2FjaGVkX25ibG9ja3NbVklTSUJJTElUWU1BUF9GT1JLTlVNXSA9IEludmFsaWRCbG9ja051 bWJlcjsKKwlSZWxhdGlvbkdldFNtZ3IocmVsLCBWSVNJQklMSVRZTUFQX0ZPUktOVU0pLT5zbWdy X2NhY2hlZF9uYmxvY2tzID0gSW52YWxpZEJsb2NrTnVtYmVyOwogCiAJYmxvY2sgPSB2aXNpYmls aXR5bWFwX3ByZXBhcmVfdHJ1bmNhdGUocmVsLCAwKTsKIAlpZiAoQmxvY2tOdW1iZXJJc1ZhbGlk KGJsb2NrKSkKIAl7CiAJCWZvcmsgPSBWSVNJQklMSVRZTUFQX0ZPUktOVU07Ci0JCXNtZ3J0cnVu Y2F0ZShSZWxhdGlvbkdldFNtZ3IocmVsKSwgJmZvcmssIDEsICZibG9jayk7CisJCURyb3BSZWxh dGlvbkJ1ZmZlcnMocmVsLT5yZF9sb2NhdG9yLCByZWwtPnJkX2JhY2tlbmQsICZmb3JrLCAxLCAm YmxvY2spOworCQlzbWdydHJ1bmNhdGVfbXVsdGkocmVsLT5yZF9sb2NhdG9yLCByZWwtPnJkX2Jh Y2tlbmQsICZmb3JrLCAxLCAmYmxvY2spOwogCX0KIAogCWlmIChSZWxhdGlvbk5lZWRzV0FMKHJl bCkpCmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9hY2Nlc3MvZ2lzdC9naXN0YnVpbGQuYyBiL3Ny Yy9iYWNrZW5kL2FjY2Vzcy9naXN0L2dpc3RidWlsZC5jCmluZGV4IDM3NGU2NGU4MDg2Li4wYTU4 MWNkOGNhYyAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvYWNjZXNzL2dpc3QvZ2lzdGJ1aWxkLmMK KysrIGIvc3JjL2JhY2tlbmQvYWNjZXNzL2dpc3QvZ2lzdGJ1aWxkLmMKQEAgLTQxNSw3ICs0MTUs NyBAQCBnaXN0X2luZGV4c29ydGJ1aWxkKEdJU1RCdWlsZFN0YXRlICpzdGF0ZSkKIAkgKiByZXBs YWNlZCB3aXRoIHRoZSByZWFsIHJvb3QgcGFnZSBhdCB0aGUgZW5kLgogCSAqLwogCXBhZ2UgPSBw YWxsb2MwKEJMQ0tTWik7Ci0Jc21ncmV4dGVuZChSZWxhdGlvbkdldFNtZ3Ioc3RhdGUtPmluZGV4 cmVsKSwgTUFJTl9GT1JLTlVNLCBHSVNUX1JPT1RfQkxLTk8sCisJc21ncmV4dGVuZChSZWxhdGlv bkdldFNtZ3Ioc3RhdGUtPmluZGV4cmVsLCBNQUlOX0ZPUktOVU0pLCBHSVNUX1JPT1RfQkxLTk8s CiAJCQkgICBwYWdlLCB0cnVlKTsKIAlzdGF0ZS0+cGFnZXNfYWxsb2NhdGVkKys7CiAJc3RhdGUt PnBhZ2VzX3dyaXR0ZW4rKzsKQEAgLTQ1OSw3ICs0NTksNyBAQCBnaXN0X2luZGV4c29ydGJ1aWxk KEdJU1RCdWlsZFN0YXRlICpzdGF0ZSkKIAkvKiBXcml0ZSBvdXQgdGhlIHJvb3QgKi8KIAlQYWdl U2V0TFNOKGxldmVsc3RhdGUtPnBhZ2VzWzBdLCBHaXN0QnVpbGRMU04pOwogCVBhZ2VTZXRDaGVj a3N1bUlucGxhY2UobGV2ZWxzdGF0ZS0+cGFnZXNbMF0sIEdJU1RfUk9PVF9CTEtOTyk7Ci0Jc21n cndyaXRlKFJlbGF0aW9uR2V0U21ncihzdGF0ZS0+aW5kZXhyZWwpLCBNQUlOX0ZPUktOVU0sIEdJ U1RfUk9PVF9CTEtOTywKKwlzbWdyd3JpdGUoUmVsYXRpb25HZXRTbWdyKHN0YXRlLT5pbmRleHJl bCwgTUFJTl9GT1JLTlVNKSwgR0lTVF9ST09UX0JMS05PLAogCQkJICBsZXZlbHN0YXRlLT5wYWdl c1swXSwgdHJ1ZSk7CiAJaWYgKFJlbGF0aW9uTmVlZHNXQUwoc3RhdGUtPmluZGV4cmVsKSkKIAkJ bG9nX25ld3BhZ2UoJnN0YXRlLT5pbmRleHJlbC0+cmRfbG9jYXRvciwgTUFJTl9GT1JLTlVNLCBH SVNUX1JPT1RfQkxLTk8sCkBAIC00NzgsNyArNDc4LDcgQEAgZ2lzdF9pbmRleHNvcnRidWlsZChH SVNUQnVpbGRTdGF0ZSAqc3RhdGUpCiAJICogc3RpbGwgbm90IGJlIG9uIGRpc2sgd2hlbiB0aGUg Y3Jhc2ggb2NjdXJzLgogCSAqLwogCWlmIChSZWxhdGlvbk5lZWRzV0FMKHN0YXRlLT5pbmRleHJl bCkpCi0JCXNtZ3JpbW1lZHN5bmMoUmVsYXRpb25HZXRTbWdyKHN0YXRlLT5pbmRleHJlbCksIE1B SU5fRk9SS05VTSk7CisJCXNtZ3JpbW1lZHN5bmMoUmVsYXRpb25HZXRTbWdyKHN0YXRlLT5pbmRl eHJlbCwgTUFJTl9GT1JLTlVNKSk7CiB9CiAKIC8qCkBAIC02NTYsNyArNjU2LDcgQEAgZ2lzdF9p bmRleHNvcnRidWlsZF9mbHVzaF9yZWFkeV9wYWdlcyhHSVNUQnVpbGRTdGF0ZSAqc3RhdGUpCiAK IAkJUGFnZVNldExTTihwYWdlLCBHaXN0QnVpbGRMU04pOwogCQlQYWdlU2V0Q2hlY2tzdW1JbnBs YWNlKHBhZ2UsIGJsa25vKTsKLQkJc21ncmV4dGVuZChSZWxhdGlvbkdldFNtZ3Ioc3RhdGUtPmlu ZGV4cmVsKSwgTUFJTl9GT1JLTlVNLCBibGtubywgcGFnZSwKKwkJc21ncmV4dGVuZChSZWxhdGlv bkdldFNtZ3Ioc3RhdGUtPmluZGV4cmVsLCBNQUlOX0ZPUktOVU0pLCBibGtubywgcGFnZSwKIAkJ CQkgICB0cnVlKTsKIAogCQlzdGF0ZS0+cGFnZXNfd3JpdHRlbisrOwpAQCAtOTQyLDggKzk0Miw3 IEBAIGdpc3RCdWlsZENhbGxiYWNrKFJlbGF0aW9uIGluZGV4LAogCSAqLwogCWlmICgoYnVpbGRz dGF0ZS0+YnVpbGRNb2RlID09IEdJU1RfQlVGRkVSSU5HX0FVVE8gJiYKIAkJIGJ1aWxkc3RhdGUt PmluZHR1cGxlcyAlIEJVRkZFUklOR19NT0RFX1NXSVRDSF9DSEVDS19TVEVQID09IDAgJiYKLQkJ IGVmZmVjdGl2ZV9jYWNoZV9zaXplIDwgc21ncm5ibG9ja3MoUmVsYXRpb25HZXRTbWdyKGluZGV4 KSwKLQkJCQkJCQkJCQkJTUFJTl9GT1JLTlVNKSkgfHwKKwkJIGVmZmVjdGl2ZV9jYWNoZV9zaXpl IDwgc21ncm5ibG9ja3MoUmVsYXRpb25HZXRTbWdyKGluZGV4LCBNQUlOX0ZPUktOVU0pKSkgfHwK IAkJKGJ1aWxkc3RhdGUtPmJ1aWxkTW9kZSA9PSBHSVNUX0JVRkZFUklOR19TVEFUUyAmJgogCQkg YnVpbGRzdGF0ZS0+aW5kdHVwbGVzID49IEJVRkZFUklOR19NT0RFX1RVUExFX1NJWkVfU1RBVFNf VEFSR0VUKSkKIAl7CmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9hY2Nlc3MvaGFzaC9oYXNocGFn ZS5jIGIvc3JjL2JhY2tlbmQvYWNjZXNzL2hhc2gvaGFzaHBhZ2UuYwppbmRleCBkMmVkY2Q0NjE3 Mi4uOTYxMzNiMGZkNDkgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL2FjY2Vzcy9oYXNoL2hhc2hw YWdlLmMKKysrIGIvc3JjL2JhY2tlbmQvYWNjZXNzL2hhc2gvaGFzaHBhZ2UuYwpAQCAtMTAyNiw3 ICsxMDI2LDcgQEAgX2hhc2hfYWxsb2NfYnVja2V0cyhSZWxhdGlvbiByZWwsIEJsb2NrTnVtYmVy IGZpcnN0YmxvY2ssIHVpbnQzMiBuYmxvY2tzKQogCQkJCQl0cnVlKTsKIAogCVBhZ2VTZXRDaGVj a3N1bUlucGxhY2UocGFnZSwgbGFzdGJsb2NrKTsKLQlzbWdyZXh0ZW5kKFJlbGF0aW9uR2V0U21n cihyZWwpLCBNQUlOX0ZPUktOVU0sIGxhc3RibG9jaywgemVyb2J1Zi5kYXRhLAorCXNtZ3JleHRl bmQoUmVsYXRpb25HZXRTbWdyKHJlbCwgTUFJTl9GT1JLTlVNKSwgbGFzdGJsb2NrLCB6ZXJvYnVm LmRhdGEsCiAJCQkgICBmYWxzZSk7CiAKIAlyZXR1cm4gdHJ1ZTsKZGlmZiAtLWdpdCBhL3NyYy9i YWNrZW5kL2FjY2Vzcy9oZWFwL2hlYXBhbV9oYW5kbGVyLmMgYi9zcmMvYmFja2VuZC9hY2Nlc3Mv aGVhcC9oZWFwYW1faGFuZGxlci5jCmluZGV4IGEzNDE0YTc2ZThkLi4wZjE4ZjUxYTU2YiAxMDA2 NDQKLS0tIGEvc3JjL2JhY2tlbmQvYWNjZXNzL2hlYXAvaGVhcGFtX2hhbmRsZXIuYworKysgYi9z cmMvYmFja2VuZC9hY2Nlc3MvaGVhcC9oZWFwYW1faGFuZGxlci5jCkBAIC01NzIsNyArNTcyLDcg QEAgaGVhcGFtX3JlbGF0aW9uX3NldF9uZXdfZmlsZWxvY2F0b3IoUmVsYXRpb24gcmVsLAogCQkJ CQkJCQkJVHJhbnNhY3Rpb25JZCAqZnJlZXplWGlkLAogCQkJCQkJCQkJTXVsdGlYYWN0SWQgKm1p bm11bHRpKQogewotCVNNZ3JSZWxhdGlvbiBzcmVsOworCVNNZ3JGaWxlSGFuZGxlIHNmaWxlOwog CiAJLyoKIAkgKiBJbml0aWFsaXplIHRvIHRoZSBtaW5pbXVtIFhJRCB0aGF0IGNvdWxkIHB1dCB0 dXBsZXMgaW4gdGhlIHRhYmxlLiBXZQpAQCAtNTkxLDcgKzU5MSw3IEBAIGhlYXBhbV9yZWxhdGlv bl9zZXRfbmV3X2ZpbGVsb2NhdG9yKFJlbGF0aW9uIHJlbCwKIAkgKi8KIAkqbWlubXVsdGkgPSBH ZXRPbGRlc3RNdWx0aVhhY3RJZCgpOwogCi0Jc3JlbCA9IFJlbGF0aW9uQ3JlYXRlU3RvcmFnZSgq bmV3cmxvY2F0b3IsIHBlcnNpc3RlbmNlLCB0cnVlKTsKKwlzZmlsZSA9IFJlbGF0aW9uQ3JlYXRl U3RvcmFnZSgqbmV3cmxvY2F0b3IsIHBlcnNpc3RlbmNlLCB0cnVlKTsKIAogCS8qCiAJICogSWYg cmVxdWlyZWQsIHNldCB1cCBhbiBpbml0IGZvcmsgZm9yIGFuIHVubG9nZ2VkIHRhYmxlIHNvIHRo YXQgaXQgY2FuCkBAIC02MDQsMTUgKzYwNCwxOCBAQCBoZWFwYW1fcmVsYXRpb25fc2V0X25ld19m aWxlbG9jYXRvcihSZWxhdGlvbiByZWwsCiAJICovCiAJaWYgKHBlcnNpc3RlbmNlID09IFJFTFBF UlNJU1RFTkNFX1VOTE9HR0VEKQogCXsKKwkJU01nckZpbGVIYW5kbGUgc2ZpbGVfaW5pdDsKKwog CQlBc3NlcnQocmVsLT5yZF9yZWwtPnJlbGtpbmQgPT0gUkVMS0lORF9SRUxBVElPTiB8fAogCQkJ ICAgcmVsLT5yZF9yZWwtPnJlbGtpbmQgPT0gUkVMS0lORF9NQVRWSUVXIHx8CiAJCQkgICByZWwt PnJkX3JlbC0+cmVsa2luZCA9PSBSRUxLSU5EX1RPQVNUVkFMVUUpOwotCQlzbWdyY3JlYXRlKHNy ZWwsIElOSVRfRk9SS05VTSwgZmFsc2UpOworCQlzZmlsZV9pbml0ID0gc21ncm9wZW4oKm5ld3Js b2NhdG9yLCBJbnZhbGlkQmFja2VuZElkLCBJTklUX0ZPUktOVU0pOworCQlzbWdyY3JlYXRlKHNm aWxlX2luaXQsIGZhbHNlKTsKIAkJbG9nX3NtZ3JjcmVhdGUobmV3cmxvY2F0b3IsIElOSVRfRk9S S05VTSk7Ci0JCXNtZ3JpbW1lZHN5bmMoc3JlbCwgSU5JVF9GT1JLTlVNKTsKKwkJc21ncmltbWVk c3luYyhzZmlsZSk7CiAJfQogCi0Jc21ncmNsb3NlKHNyZWwpOworCXNtZ3JjbG9zZShzZmlsZSk7 CiB9CiAKIHN0YXRpYyB2b2lkCkBAIC02MjQsOSArNjI3LDcgQEAgaGVhcGFtX3JlbGF0aW9uX25v bnRyYW5zYWN0aW9uYWxfdHJ1bmNhdGUoUmVsYXRpb24gcmVsKQogc3RhdGljIHZvaWQKIGhlYXBh bV9yZWxhdGlvbl9jb3B5X2RhdGEoUmVsYXRpb24gcmVsLCBjb25zdCBSZWxGaWxlTG9jYXRvciAq bmV3cmxvY2F0b3IpCiB7Ci0JU01nclJlbGF0aW9uIGRzdHJlbDsKLQotCWRzdHJlbCA9IHNtZ3Jv cGVuKCpuZXdybG9jYXRvciwgcmVsLT5yZF9iYWNrZW5kKTsKKwlTTWdyRmlsZUhhbmRsZSBkc3Rt YWluOwogCiAJLyoKIAkgKiBTaW5jZSB3ZSBjb3B5IHRoZSBmaWxlIGRpcmVjdGx5IHdpdGhvdXQg bG9va2luZyBhdCB0aGUgc2hhcmVkIGJ1ZmZlcnMsCkBAIC02NDYsMTYgKzY0NywyMSBAQCBoZWFw YW1fcmVsYXRpb25fY29weV9kYXRhKFJlbGF0aW9uIHJlbCwgY29uc3QgUmVsRmlsZUxvY2F0b3Ig Km5ld3Jsb2NhdG9yKQogCVJlbGF0aW9uQ3JlYXRlU3RvcmFnZSgqbmV3cmxvY2F0b3IsIHJlbC0+ cmRfcmVsLT5yZWxwZXJzaXN0ZW5jZSwgdHJ1ZSk7CiAKIAkvKiBjb3B5IG1haW4gZm9yayAqLwot CVJlbGF0aW9uQ29weVN0b3JhZ2UoUmVsYXRpb25HZXRTbWdyKHJlbCksIGRzdHJlbCwgTUFJTl9G T1JLTlVNLAorCWRzdG1haW4gPSBzbWdyb3BlbigqbmV3cmxvY2F0b3IsIHJlbC0+cmRfYmFja2Vu ZCwgTUFJTl9GT1JLTlVNKTsKKwlSZWxhdGlvbkNvcHlTdG9yYWdlKFJlbGF0aW9uR2V0U21ncihy ZWwsIE1BSU5fRk9SS05VTSksIGRzdG1haW4sCiAJCQkJCQlyZWwtPnJkX3JlbC0+cmVscGVyc2lz dGVuY2UpOwogCiAJLyogY29weSB0aG9zZSBleHRyYSBmb3JrcyB0aGF0IGV4aXN0ICovCiAJZm9y IChGb3JrTnVtYmVyIGZvcmtOdW0gPSBNQUlOX0ZPUktOVU0gKyAxOwogCQkgZm9ya051bSA8PSBN QVhfRk9SS05VTTsgZm9ya051bSsrKQogCXsKLQkJaWYgKHNtZ3JleGlzdHMoUmVsYXRpb25HZXRT bWdyKHJlbCksIGZvcmtOdW0pKQorCQlTTWdyRmlsZUhhbmRsZSBzcmNfZm9yayA9IFJlbGF0aW9u R2V0U21ncihyZWwsIGZvcmtOdW0pOworCisJCWlmIChzbWdyZXhpc3RzKHNyY19mb3JrKSkKIAkJ ewotCQkJc21ncmNyZWF0ZShkc3RyZWwsIGZvcmtOdW0sIGZhbHNlKTsKKwkJCVNNZ3JGaWxlSGFu ZGxlIGRzdF9mb3JrID0gc21ncm9wZW4oKm5ld3Jsb2NhdG9yLCByZWwtPnJkX2JhY2tlbmQsIGZv cmtOdW0pOworCisJCQlzbWdyY3JlYXRlKGRzdF9mb3JrLCBmYWxzZSk7CiAKIAkJCS8qCiAJCQkg KiBXQUwgbG9nIGNyZWF0aW9uIGlmIHRoZSByZWxhdGlvbiBpcyBwZXJzaXN0ZW50LCBvciB0aGlz IGlzIHRoZQpAQCAtNjY1LDcgKzY3MSw3IEBAIGhlYXBhbV9yZWxhdGlvbl9jb3B5X2RhdGEoUmVs YXRpb24gcmVsLCBjb25zdCBSZWxGaWxlTG9jYXRvciAqbmV3cmxvY2F0b3IpCiAJCQkJKHJlbC0+ cmRfcmVsLT5yZWxwZXJzaXN0ZW5jZSA9PSBSRUxQRVJTSVNURU5DRV9VTkxPR0dFRCAmJgogCQkJ CSBmb3JrTnVtID09IElOSVRfRk9SS05VTSkpCiAJCQkJbG9nX3NtZ3JjcmVhdGUobmV3cmxvY2F0 b3IsIGZvcmtOdW0pOwotCQkJUmVsYXRpb25Db3B5U3RvcmFnZShSZWxhdGlvbkdldFNtZ3IocmVs KSwgZHN0cmVsLCBmb3JrTnVtLAorCQkJUmVsYXRpb25Db3B5U3RvcmFnZShSZWxhdGlvbkdldFNt Z3IocmVsLCBmb3JrTnVtKSwgZHN0X2ZvcmssCiAJCQkJCQkJCXJlbC0+cmRfcmVsLT5yZWxwZXJz aXN0ZW5jZSk7CiAJCX0KIAl9CkBAIC02NzMsNyArNjc5LDcgQEAgaGVhcGFtX3JlbGF0aW9uX2Nv cHlfZGF0YShSZWxhdGlvbiByZWwsIGNvbnN0IFJlbEZpbGVMb2NhdG9yICpuZXdybG9jYXRvcikK IAogCS8qIGRyb3Agb2xkIHJlbGF0aW9uLCBhbmQgY2xvc2UgbmV3IG9uZSAqLwogCVJlbGF0aW9u RHJvcFN0b3JhZ2UocmVsKTsKLQlzbWdyY2xvc2UoZHN0cmVsKTsKKwlzbWdyY2xvc2UoZHN0bWFp bik7CiB9CiAKIHN0YXRpYyB2b2lkCmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9hY2Nlc3MvaGVh cC9yZXdyaXRlaGVhcC5jIGIvc3JjL2JhY2tlbmQvYWNjZXNzL2hlYXAvcmV3cml0ZWhlYXAuYwpp bmRleCAxOTdmMDZiNWVjYS4uOGE4NmRjOGFhZWEgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL2Fj Y2Vzcy9oZWFwL3Jld3JpdGVoZWFwLmMKKysrIGIvc3JjL2JhY2tlbmQvYWNjZXNzL2hlYXAvcmV3 cml0ZWhlYXAuYwpAQCAtMzI2LDcgKzMyNiw3IEBAIGVuZF9oZWFwX3Jld3JpdGUoUmV3cml0ZVN0 YXRlIHN0YXRlKQogCiAJCVBhZ2VTZXRDaGVja3N1bUlucGxhY2Uoc3RhdGUtPnJzX2J1ZmZlciwg c3RhdGUtPnJzX2Jsb2Nrbm8pOwogCi0JCXNtZ3JleHRlbmQoUmVsYXRpb25HZXRTbWdyKHN0YXRl LT5yc19uZXdfcmVsKSwgTUFJTl9GT1JLTlVNLAorCQlzbWdyZXh0ZW5kKFJlbGF0aW9uR2V0U21n cihzdGF0ZS0+cnNfbmV3X3JlbCwgTUFJTl9GT1JLTlVNKSwKIAkJCQkgICBzdGF0ZS0+cnNfYmxv Y2tubywgKGNoYXIgKikgc3RhdGUtPnJzX2J1ZmZlciwgdHJ1ZSk7CiAJfQogCkBAIC0zMzgsNyAr MzM4LDcgQEAgZW5kX2hlYXBfcmV3cml0ZShSZXdyaXRlU3RhdGUgc3RhdGUpCiAJICogd3JvdGUg YmVmb3JlIHRoZSBjaGVja3BvaW50LgogCSAqLwogCWlmIChSZWxhdGlvbk5lZWRzV0FMKHN0YXRl LT5yc19uZXdfcmVsKSkKLQkJc21ncmltbWVkc3luYyhSZWxhdGlvbkdldFNtZ3Ioc3RhdGUtPnJz X25ld19yZWwpLCBNQUlOX0ZPUktOVU0pOworCQlzbWdyaW1tZWRzeW5jKFJlbGF0aW9uR2V0U21n cihzdGF0ZS0+cnNfbmV3X3JlbCwgTUFJTl9GT1JLTlVNKSk7CiAKIAlsb2dpY2FsX2VuZF9oZWFw X3Jld3JpdGUoc3RhdGUpOwogCkBAIC02OTIsNyArNjkyLDcgQEAgcmF3X2hlYXBfaW5zZXJ0KFJl d3JpdGVTdGF0ZSBzdGF0ZSwgSGVhcFR1cGxlIHR1cCkKIAkJCSAqLwogCQkJUGFnZVNldENoZWNr c3VtSW5wbGFjZShwYWdlLCBzdGF0ZS0+cnNfYmxvY2tubyk7CiAKLQkJCXNtZ3JleHRlbmQoUmVs YXRpb25HZXRTbWdyKHN0YXRlLT5yc19uZXdfcmVsKSwgTUFJTl9GT1JLTlVNLAorCQkJc21ncmV4 dGVuZChSZWxhdGlvbkdldFNtZ3Ioc3RhdGUtPnJzX25ld19yZWwsIE1BSU5fRk9SS05VTSksCiAJ CQkJCSAgIHN0YXRlLT5yc19ibG9ja25vLCAoY2hhciAqKSBwYWdlLCB0cnVlKTsKIAogCQkJc3Rh dGUtPnJzX2Jsb2Nrbm8rKzsKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL2FjY2Vzcy9oZWFwL3Zp c2liaWxpdHltYXAuYyBiL3NyYy9iYWNrZW5kL2FjY2Vzcy9oZWFwL3Zpc2liaWxpdHltYXAuYwpp bmRleCBlZDcyZWI3YjYzMS4uNzk2ZjU3ZWUwNDYgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL2Fj Y2Vzcy9oZWFwL3Zpc2liaWxpdHltYXAuYworKysgYi9zcmMvYmFja2VuZC9hY2Nlc3MvaGVhcC92 aXNpYmlsaXR5bWFwLmMKQEAgLTQ2MCw3ICs0NjAsNyBAQCB2aXNpYmlsaXR5bWFwX3ByZXBhcmVf dHJ1bmNhdGUoUmVsYXRpb24gcmVsLCBCbG9ja051bWJlciBuaGVhcGJsb2NrcykKIAkgKiBJZiBu byB2aXNpYmlsaXR5IG1hcCBoYXMgYmVlbiBjcmVhdGVkIHlldCBmb3IgdGhpcyByZWxhdGlvbiwg dGhlcmUncwogCSAqIG5vdGhpbmcgdG8gdHJ1bmNhdGUuCiAJICovCi0JaWYgKCFzbWdyZXhpc3Rz KFJlbGF0aW9uR2V0U21ncihyZWwpLCBWSVNJQklMSVRZTUFQX0ZPUktOVU0pKQorCWlmICghc21n cmV4aXN0cyhSZWxhdGlvbkdldFNtZ3IocmVsLCBWSVNJQklMSVRZTUFQX0ZPUktOVU0pKSkKIAkJ cmV0dXJuIEludmFsaWRCbG9ja051bWJlcjsKIAogCS8qCkBAIC01MjcsNyArNTI3LDcgQEAgdmlz aWJpbGl0eW1hcF9wcmVwYXJlX3RydW5jYXRlKFJlbGF0aW9uIHJlbCwgQmxvY2tOdW1iZXIgbmhl YXBibG9ja3MpCiAJZWxzZQogCQluZXduYmxvY2tzID0gdHJ1bmNCbG9jazsKIAotCWlmIChzbWdy bmJsb2NrcyhSZWxhdGlvbkdldFNtZ3IocmVsKSwgVklTSUJJTElUWU1BUF9GT1JLTlVNKSA8PSBu ZXduYmxvY2tzKQorCWlmIChzbWdybmJsb2NrcyhSZWxhdGlvbkdldFNtZ3IocmVsLCBWSVNJQklM SVRZTUFQX0ZPUktOVU0pKSA8PSBuZXduYmxvY2tzKQogCXsKIAkJLyogbm90aGluZyB0byBkbywg dGhlIGZpbGUgd2FzIGFscmVhZHkgc21hbGxlciB0aGFuIHJlcXVlc3RlZCBzaXplICovCiAJCXJl dHVybiBJbnZhbGlkQmxvY2tOdW1iZXI7CkBAIC01NDYsMjkgKzU0NiwyOSBAQCBzdGF0aWMgQnVm ZmVyCiB2bV9yZWFkYnVmKFJlbGF0aW9uIHJlbCwgQmxvY2tOdW1iZXIgYmxrbm8sIGJvb2wgZXh0 ZW5kKQogewogCUJ1ZmZlcgkJYnVmOwotCVNNZ3JSZWxhdGlvbiByZWxuOworCVNNZ3JGaWxlSGFu ZGxlIHZtX3NmaWxlOwogCiAJLyoKIAkgKiBDYXV0aW9uOiByZS11c2luZyB0aGlzIHNtZ3IgcG9p bnRlciBjb3VsZCBmYWlsIGlmIHRoZSByZWxjYWNoZSBlbnRyeQogCSAqIGdldHMgY2xvc2VkLiAg SXQncyBzYWZlIGFzIGxvbmcgYXMgd2Ugb25seSBkbyBzbWdyLWxldmVsIG9wZXJhdGlvbnMKIAkg KiBiZXR3ZWVuIGhlcmUgYW5kIHRoZSBsYXN0IHVzZSBvZiB0aGUgcG9pbnRlci4KIAkgKi8KLQly ZWxuID0gUmVsYXRpb25HZXRTbWdyKHJlbCk7CisJdm1fc2ZpbGUgPSBSZWxhdGlvbkdldFNtZ3Io cmVsLCBWSVNJQklMSVRZTUFQX0ZPUktOVU0pOwogCiAJLyoKIAkgKiBJZiB3ZSBoYXZlbid0IGNh Y2hlZCB0aGUgc2l6ZSBvZiB0aGUgdmlzaWJpbGl0eSBtYXAgZm9yayB5ZXQsIGNoZWNrIGl0CiAJ ICogZmlyc3QuCiAJICovCi0JaWYgKHJlbG4tPnNtZ3JfY2FjaGVkX25ibG9ja3NbVklTSUJJTElU WU1BUF9GT1JLTlVNXSA9PSBJbnZhbGlkQmxvY2tOdW1iZXIpCisJaWYgKHZtX3NmaWxlLT5zbWdy X2NhY2hlZF9uYmxvY2tzID09IEludmFsaWRCbG9ja051bWJlcikKIAl7Ci0JCWlmIChzbWdyZXhp c3RzKHJlbG4sIFZJU0lCSUxJVFlNQVBfRk9SS05VTSkpCi0JCQlzbWdybmJsb2NrcyhyZWxuLCBW SVNJQklMSVRZTUFQX0ZPUktOVU0pOworCQlpZiAoc21ncmV4aXN0cyh2bV9zZmlsZSkpCisJCQlz bWdybmJsb2Nrcyh2bV9zZmlsZSk7CiAJCWVsc2UKLQkJCXJlbG4tPnNtZ3JfY2FjaGVkX25ibG9j a3NbVklTSUJJTElUWU1BUF9GT1JLTlVNXSA9IDA7CisJCQl2bV9zZmlsZS0+c21ncl9jYWNoZWRf bmJsb2NrcyA9IDA7CiAJfQogCiAJLyogSGFuZGxlIHJlcXVlc3RzIGJleW9uZCBFT0YgKi8KLQlp ZiAoYmxrbm8gPj0gcmVsbi0+c21ncl9jYWNoZWRfbmJsb2Nrc1tWSVNJQklMSVRZTUFQX0ZPUktO VU1dKQorCWlmIChibGtubyA+PSB2bV9zZmlsZS0+c21ncl9jYWNoZWRfbmJsb2NrcykKIAl7CiAJ CWlmIChleHRlbmQpCiAJCQl2bV9leHRlbmQocmVsLCBibGtubyArIDEpOwpAQCAtNTk1LDggKzU5 NSw3IEBAIHZtX3JlYWRidWYoUmVsYXRpb24gcmVsLCBCbG9ja051bWJlciBibGtubywgYm9vbCBl eHRlbmQpCiAJICogbG9uZyBhcyBpdCBkb2Vzbid0IGRlcGVuZCBvbiB0aGUgcGFnZSBoZWFkZXIg aGF2aW5nIGNvcnJlY3QgY29udGVudHMuCiAJICogQ3VycmVudCB1c2FnZSBpcyBzYWZlIGJlY2F1 c2UgUGFnZUdldENvbnRlbnRzKCkgZG9lcyBub3QgcmVxdWlyZSB0aGF0LgogCSAqLwotCWJ1ZiA9 IFJlYWRCdWZmZXJFeHRlbmRlZChyZWwsIFZJU0lCSUxJVFlNQVBfRk9SS05VTSwgYmxrbm8sCi0J CQkJCQkJIFJCTV9aRVJPX09OX0VSUk9SLCBOVUxMKTsKKwlidWYgPSBSZWFkQnVmZmVyRXh0ZW5k ZWQocmVsLCBWSVNJQklMSVRZTUFQX0ZPUktOVU0sIGJsa25vLCBSQk1fWkVST19PTl9FUlJPUiwg TlVMTCk7CiAJaWYgKFBhZ2VJc05ldyhCdWZmZXJHZXRQYWdlKGJ1ZikpKQogCXsKIAkJTG9ja0J1 ZmZlcihidWYsIEJVRkZFUl9MT0NLX0VYQ0xVU0lWRSk7CkBAIC02MTYsNyArNjE1LDcgQEAgdm1f ZXh0ZW5kKFJlbGF0aW9uIHJlbCwgQmxvY2tOdW1iZXIgdm1fbmJsb2NrcykKIHsKIAlCbG9ja051 bWJlciB2bV9uYmxvY2tzX25vdzsKIAlQR0FsaWduZWRCbG9jayBwZzsKLQlTTWdyUmVsYXRpb24g cmVsbjsKKwlTTWdyRmlsZUhhbmRsZSB2bV9zZmlsZTsKIAogCVBhZ2VJbml0KChQYWdlKSBwZy5k YXRhLCBCTENLU1osIDApOwogCkBAIC02MzcsMjcgKzYzNiwyNyBAQCB2bV9leHRlbmQoUmVsYXRp b24gcmVsLCBCbG9ja051bWJlciB2bV9uYmxvY2tzKQogCSAqIGdldHMgY2xvc2VkLiAgSXQncyBz YWZlIGFzIGxvbmcgYXMgd2Ugb25seSBkbyBzbWdyLWxldmVsIG9wZXJhdGlvbnMKIAkgKiBiZXR3 ZWVuIGhlcmUgYW5kIHRoZSBsYXN0IHVzZSBvZiB0aGUgcG9pbnRlci4KIAkgKi8KLQlyZWxuID0g UmVsYXRpb25HZXRTbWdyKHJlbCk7CisJdm1fc2ZpbGUgPSBSZWxhdGlvbkdldFNtZ3IocmVsLCBW SVNJQklMSVRZTUFQX0ZPUktOVU0pOwogCiAJLyoKIAkgKiBDcmVhdGUgdGhlIGZpbGUgZmlyc3Qg aWYgaXQgZG9lc24ndCBleGlzdC4gIElmIHNtZ3Jfdm1fbmJsb2NrcyBpcwogCSAqIHBvc2l0aXZl IHRoZW4gaXQgbXVzdCBleGlzdCwgbm8gbmVlZCBmb3IgYW4gc21ncmV4aXN0cyBjYWxsLgogCSAq LwotCWlmICgocmVsbi0+c21ncl9jYWNoZWRfbmJsb2Nrc1tWSVNJQklMSVRZTUFQX0ZPUktOVU1d ID09IDAgfHwKLQkJIHJlbG4tPnNtZ3JfY2FjaGVkX25ibG9ja3NbVklTSUJJTElUWU1BUF9GT1JL TlVNXSA9PSBJbnZhbGlkQmxvY2tOdW1iZXIpICYmCi0JCSFzbWdyZXhpc3RzKHJlbG4sIFZJU0lC SUxJVFlNQVBfRk9SS05VTSkpCi0JCXNtZ3JjcmVhdGUocmVsbiwgVklTSUJJTElUWU1BUF9GT1JL TlVNLCBmYWxzZSk7CisJaWYgKCh2bV9zZmlsZS0+c21ncl9jYWNoZWRfbmJsb2NrcyA9PSAwIHx8 CisJCSB2bV9zZmlsZS0+c21ncl9jYWNoZWRfbmJsb2NrcyA9PSBJbnZhbGlkQmxvY2tOdW1iZXIp ICYmCisJCSFzbWdyZXhpc3RzKHZtX3NmaWxlKSkKKwkJc21ncmNyZWF0ZSh2bV9zZmlsZSwgZmFs c2UpOwogCiAJLyogSW52YWxpZGF0ZSBjYWNoZSBzbyB0aGF0IHNtZ3JuYmxvY2tzKCkgYXNrcyB0 aGUga2VybmVsLiAqLwotCXJlbG4tPnNtZ3JfY2FjaGVkX25ibG9ja3NbVklTSUJJTElUWU1BUF9G T1JLTlVNXSA9IEludmFsaWRCbG9ja051bWJlcjsKLQl2bV9uYmxvY2tzX25vdyA9IHNtZ3JuYmxv Y2tzKHJlbG4sIFZJU0lCSUxJVFlNQVBfRk9SS05VTSk7CisJdm1fc2ZpbGUtPnNtZ3JfY2FjaGVk X25ibG9ja3MgPSBJbnZhbGlkQmxvY2tOdW1iZXI7CisJdm1fbmJsb2Nrc19ub3cgPSBzbWdybmJs b2Nrcyh2bV9zZmlsZSk7CiAKIAkvKiBOb3cgZXh0ZW5kIHRoZSBmaWxlICovCiAJd2hpbGUgKHZt X25ibG9ja3Nfbm93IDwgdm1fbmJsb2NrcykKIAl7CiAJCVBhZ2VTZXRDaGVja3N1bUlucGxhY2Uo KFBhZ2UpIHBnLmRhdGEsIHZtX25ibG9ja3Nfbm93KTsKIAotCQlzbWdyZXh0ZW5kKHJlbG4sIFZJ U0lCSUxJVFlNQVBfRk9SS05VTSwgdm1fbmJsb2Nrc19ub3csIHBnLmRhdGEsIGZhbHNlKTsKKwkJ c21ncmV4dGVuZCh2bV9zZmlsZSwgdm1fbmJsb2Nrc19ub3csIHBnLmRhdGEsIGZhbHNlKTsKIAkJ dm1fbmJsb2Nrc19ub3crKzsKIAl9CiAKQEAgLTY2OCw3ICs2NjcsNyBAQCB2bV9leHRlbmQoUmVs YXRpb24gcmVsLCBCbG9ja051bWJlciB2bV9uYmxvY2tzKQogCSAqIHRvIGtlZXAgY2hlY2tpbmcg Zm9yIGNyZWF0aW9uIG9yIGV4dGVuc2lvbiBvZiB0aGUgZmlsZSwgd2hpY2ggaGFwcGVucwogCSAq IGluZnJlcXVlbnRseS4KIAkgKi8KLQlDYWNoZUludmFsaWRhdGVTbWdyKHJlbG4tPnNtZ3Jfcmxv Y2F0b3IpOworCUNhY2hlSW52YWxpZGF0ZVNtZ3IocmVsLT5yZF9sb2NhdG9yLCByZWwtPnJkX2Jh Y2tlbmQpOwogCiAJVW5sb2NrUmVsYXRpb25Gb3JFeHRlbnNpb24ocmVsLCBFeGNsdXNpdmVMb2Nr KTsKIH0KZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL2FjY2Vzcy9uYnRyZWUvbmJ0cmVlLmMgYi9z cmMvYmFja2VuZC9hY2Nlc3MvbmJ0cmVlL25idHJlZS5jCmluZGV4IGI1MmVjYThmMzhiLi42NDQ0 MzFhN2UzYyAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvYWNjZXNzL25idHJlZS9uYnRyZWUuYwor KysgYi9zcmMvYmFja2VuZC9hY2Nlc3MvbmJ0cmVlL25idHJlZS5jCkBAIC0xNjQsOSArMTY0LDkg QEAgYnRidWlsZGVtcHR5KFJlbGF0aW9uIGluZGV4KQogCSAqIHRoaXMgZXZlbiB3aGVuIHdhbF9s ZXZlbD1taW5pbWFsLgogCSAqLwogCVBhZ2VTZXRDaGVja3N1bUlucGxhY2UobWV0YXBhZ2UsIEJU UkVFX01FVEFQQUdFKTsKLQlzbWdyd3JpdGUoUmVsYXRpb25HZXRTbWdyKGluZGV4KSwgSU5JVF9G T1JLTlVNLCBCVFJFRV9NRVRBUEFHRSwKKwlzbWdyd3JpdGUoUmVsYXRpb25HZXRTbWdyKGluZGV4 LCBJTklUX0ZPUktOVU0pLCBCVFJFRV9NRVRBUEFHRSwKIAkJCSAgKGNoYXIgKikgbWV0YXBhZ2Us IHRydWUpOwotCWxvZ19uZXdwYWdlKCZSZWxhdGlvbkdldFNtZ3IoaW5kZXgpLT5zbWdyX3Jsb2Nh dG9yLmxvY2F0b3IsIElOSVRfRk9SS05VTSwKKwlsb2dfbmV3cGFnZSgmaW5kZXgtPnJkX2xvY2F0 b3IsIElOSVRfRk9SS05VTSwKIAkJCQlCVFJFRV9NRVRBUEFHRSwgbWV0YXBhZ2UsIHRydWUpOwog CiAJLyoKQEAgLTE3NCw3ICsxNzQsNyBAQCBidGJ1aWxkZW1wdHkoUmVsYXRpb24gaW5kZXgpCiAJ ICogd3JpdGUgZGlkIG5vdCBnbyB0aHJvdWdoIHNoYXJlZF9idWZmZXJzIGFuZCB0aGVyZWZvcmUg YSBjb25jdXJyZW50CiAJICogY2hlY2twb2ludCBtYXkgaGF2ZSBtb3ZlZCB0aGUgcmVkbyBwb2lu dGVyIHBhc3Qgb3VyIHhsb2cgcmVjb3JkLgogCSAqLwotCXNtZ3JpbW1lZHN5bmMoUmVsYXRpb25H ZXRTbWdyKGluZGV4KSwgSU5JVF9GT1JLTlVNKTsKKwlzbWdyaW1tZWRzeW5jKFJlbGF0aW9uR2V0 U21ncihpbmRleCwgSU5JVF9GT1JLTlVNKSk7CiB9CiAKIC8qCmRpZmYgLS1naXQgYS9zcmMvYmFj a2VuZC9hY2Nlc3MvbmJ0cmVlL25idHNvcnQuYyBiL3NyYy9iYWNrZW5kL2FjY2Vzcy9uYnRyZWUv bmJ0c29ydC5jCmluZGV4IGJkMTY4NWM0NDFiLi41M2RkZGRmZDY5ZiAxMDA2NDQKLS0tIGEvc3Jj L2JhY2tlbmQvYWNjZXNzL25idHJlZS9uYnRzb3J0LmMKKysrIGIvc3JjL2JhY2tlbmQvYWNjZXNz L25idHJlZS9uYnRzb3J0LmMKQEAgLTY2Miw3ICs2NjIsNyBAQCBfYnRfYmx3cml0ZXBhZ2UoQlRX cml0ZVN0YXRlICp3c3RhdGUsIFBhZ2UgcGFnZSwgQmxvY2tOdW1iZXIgYmxrbm8pCiAJCWlmICgh d3N0YXRlLT5idHdzX3plcm9wYWdlKQogCQkJd3N0YXRlLT5idHdzX3plcm9wYWdlID0gKFBhZ2Up IHBhbGxvYzAoQkxDS1NaKTsKIAkJLyogZG9uJ3Qgc2V0IGNoZWNrc3VtIGZvciBhbGwtemVybyBw YWdlICovCi0JCXNtZ3JleHRlbmQoUmVsYXRpb25HZXRTbWdyKHdzdGF0ZS0+aW5kZXgpLCBNQUlO X0ZPUktOVU0sCisJCXNtZ3JleHRlbmQoUmVsYXRpb25HZXRTbWdyKHdzdGF0ZS0+aW5kZXgsIE1B SU5fRk9SS05VTSksCiAJCQkJICAgd3N0YXRlLT5idHdzX3BhZ2VzX3dyaXR0ZW4rKywKIAkJCQkg ICAoY2hhciAqKSB3c3RhdGUtPmJ0d3NfemVyb3BhZ2UsCiAJCQkJICAgdHJ1ZSk7CkBAIC02Nzcs MTQgKzY3NywxNCBAQCBfYnRfYmx3cml0ZXBhZ2UoQlRXcml0ZVN0YXRlICp3c3RhdGUsIFBhZ2Ug cGFnZSwgQmxvY2tOdW1iZXIgYmxrbm8pCiAJaWYgKGJsa25vID09IHdzdGF0ZS0+YnR3c19wYWdl c193cml0dGVuKQogCXsKIAkJLyogZXh0ZW5kaW5nIHRoZSBmaWxlLi4uICovCi0JCXNtZ3JleHRl bmQoUmVsYXRpb25HZXRTbWdyKHdzdGF0ZS0+aW5kZXgpLCBNQUlOX0ZPUktOVU0sIGJsa25vLAor CQlzbWdyZXh0ZW5kKFJlbGF0aW9uR2V0U21ncih3c3RhdGUtPmluZGV4LCBNQUlOX0ZPUktOVU0p LCBibGtubywKIAkJCQkgICAoY2hhciAqKSBwYWdlLCB0cnVlKTsKIAkJd3N0YXRlLT5idHdzX3Bh Z2VzX3dyaXR0ZW4rKzsKIAl9CiAJZWxzZQogCXsKIAkJLyogb3ZlcndyaXRpbmcgYSBibG9jayB3 ZSB6ZXJvLWZpbGxlZCBiZWZvcmUgKi8KLQkJc21ncndyaXRlKFJlbGF0aW9uR2V0U21ncih3c3Rh dGUtPmluZGV4KSwgTUFJTl9GT1JLTlVNLCBibGtubywKKwkJc21ncndyaXRlKFJlbGF0aW9uR2V0 U21ncih3c3RhdGUtPmluZGV4LCBNQUlOX0ZPUktOVU0pLCBibGtubywKIAkJCQkgIChjaGFyICop IHBhZ2UsIHRydWUpOwogCX0KIApAQCAtMTQzMSw3ICsxNDMxLDcgQEAgX2J0X2xvYWQoQlRXcml0 ZVN0YXRlICp3c3RhdGUsIEJUU3Bvb2wgKmJ0c3Bvb2wsIEJUU3Bvb2wgKmJ0c3Bvb2wyKQogCSAq IHN0aWxsIG5vdCBiZSBvbiBkaXNrIHdoZW4gdGhlIGNyYXNoIG9jY3Vycy4KIAkgKi8KIAlpZiAo d3N0YXRlLT5idHdzX3VzZV93YWwpCi0JCXNtZ3JpbW1lZHN5bmMoUmVsYXRpb25HZXRTbWdyKHdz dGF0ZS0+aW5kZXgpLCBNQUlOX0ZPUktOVU0pOworCQlzbWdyaW1tZWRzeW5jKFJlbGF0aW9uR2V0 U21ncih3c3RhdGUtPmluZGV4LCBNQUlOX0ZPUktOVU0pKTsKIH0KIAogLyoKZGlmZiAtLWdpdCBh L3NyYy9iYWNrZW5kL2FjY2Vzcy9zcGdpc3Qvc3BnaW5zZXJ0LmMgYi9zcmMvYmFja2VuZC9hY2Nl c3Mvc3BnaXN0L3NwZ2luc2VydC5jCmluZGV4IGM2ODIxYjU5NTI0Li43NWViMDk1NDNkOSAxMDA2 NDQKLS0tIGEvc3JjL2JhY2tlbmQvYWNjZXNzL3NwZ2lzdC9zcGdpbnNlcnQuYworKysgYi9zcmMv YmFja2VuZC9hY2Nlc3Mvc3BnaXN0L3NwZ2luc2VydC5jCkBAIC0xNTUsOCArMTU1LDExIEBAIHNw Z2J1aWxkKFJlbGF0aW9uIGhlYXAsIFJlbGF0aW9uIGluZGV4LCBJbmRleEluZm8gKmluZGV4SW5m bykKIHZvaWQKIHNwZ2J1aWxkZW1wdHkoUmVsYXRpb24gaW5kZXgpCiB7CisJU01nckZpbGVIYW5k bGUgc2ZpbGU7CiAJUGFnZQkJcGFnZTsKIAorCXNmaWxlID0gUmVsYXRpb25HZXRTbWdyKGluZGV4 LCBJTklUX0ZPUktOVU0pOworCiAJLyogQ29uc3RydWN0IG1ldGFwYWdlLiAqLwogCXBhZ2UgPSAo UGFnZSkgcGFsbG9jKEJMQ0tTWik7CiAJU3BHaXN0SW5pdE1ldGFwYWdlKHBhZ2UpOwpAQCAtMTY5 LDI3ICsxNzIsMjcgQEAgc3BnYnVpbGRlbXB0eShSZWxhdGlvbiBpbmRleCkKIAkgKiByZXBsYXll ZC4KIAkgKi8KIAlQYWdlU2V0Q2hlY2tzdW1JbnBsYWNlKHBhZ2UsIFNQR0lTVF9NRVRBUEFHRV9C TEtOTyk7Ci0Jc21ncndyaXRlKFJlbGF0aW9uR2V0U21ncihpbmRleCksIElOSVRfRk9SS05VTSwg U1BHSVNUX01FVEFQQUdFX0JMS05PLAorCXNtZ3J3cml0ZShzZmlsZSwgU1BHSVNUX01FVEFQQUdF X0JMS05PLAogCQkJICAoY2hhciAqKSBwYWdlLCB0cnVlKTsKLQlsb2dfbmV3cGFnZSgmKFJlbGF0 aW9uR2V0U21ncihpbmRleCkpLT5zbWdyX3Jsb2NhdG9yLmxvY2F0b3IsIElOSVRfRk9SS05VTSwK Kwlsb2dfbmV3cGFnZSgmaW5kZXgtPnJkX2xvY2F0b3IsIElOSVRfRk9SS05VTSwKIAkJCQlTUEdJ U1RfTUVUQVBBR0VfQkxLTk8sIHBhZ2UsIHRydWUpOwogCiAJLyogTGlrZXdpc2UgZm9yIHRoZSBy b290IHBhZ2UuICovCiAJU3BHaXN0SW5pdFBhZ2UocGFnZSwgU1BHSVNUX0xFQUYpOwogCiAJUGFn ZVNldENoZWNrc3VtSW5wbGFjZShwYWdlLCBTUEdJU1RfUk9PVF9CTEtOTyk7Ci0Jc21ncndyaXRl KFJlbGF0aW9uR2V0U21ncihpbmRleCksIElOSVRfRk9SS05VTSwgU1BHSVNUX1JPT1RfQkxLTk8s CisJc21ncndyaXRlKHNmaWxlLCBTUEdJU1RfUk9PVF9CTEtOTywKIAkJCSAgKGNoYXIgKikgcGFn ZSwgdHJ1ZSk7Ci0JbG9nX25ld3BhZ2UoJihSZWxhdGlvbkdldFNtZ3IoaW5kZXgpKS0+c21ncl9y bG9jYXRvci5sb2NhdG9yLCBJTklUX0ZPUktOVU0sCisJbG9nX25ld3BhZ2UoJmluZGV4LT5yZF9s b2NhdG9yLCBJTklUX0ZPUktOVU0sCiAJCQkJU1BHSVNUX1JPT1RfQkxLTk8sIHBhZ2UsIHRydWUp OwogCiAJLyogTGlrZXdpc2UgZm9yIHRoZSBudWxsLXR1cGxlcyByb290IHBhZ2UuICovCiAJU3BH aXN0SW5pdFBhZ2UocGFnZSwgU1BHSVNUX0xFQUYgfCBTUEdJU1RfTlVMTFMpOwogCiAJUGFnZVNl dENoZWNrc3VtSW5wbGFjZShwYWdlLCBTUEdJU1RfTlVMTF9CTEtOTyk7Ci0Jc21ncndyaXRlKFJl bGF0aW9uR2V0U21ncihpbmRleCksIElOSVRfRk9SS05VTSwgU1BHSVNUX05VTExfQkxLTk8sCisJ c21ncndyaXRlKHNmaWxlLCBTUEdJU1RfTlVMTF9CTEtOTywKIAkJCSAgKGNoYXIgKikgcGFnZSwg dHJ1ZSk7Ci0JbG9nX25ld3BhZ2UoJihSZWxhdGlvbkdldFNtZ3IoaW5kZXgpKS0+c21ncl9ybG9j YXRvci5sb2NhdG9yLCBJTklUX0ZPUktOVU0sCisJbG9nX25ld3BhZ2UoJmluZGV4LT5yZF9sb2Nh dG9yLCBJTklUX0ZPUktOVU0sCiAJCQkJU1BHSVNUX05VTExfQkxLTk8sIHBhZ2UsIHRydWUpOwog CiAJLyoKQEAgLTE5Nyw3ICsyMDAsNyBAQCBzcGdidWlsZGVtcHR5KFJlbGF0aW9uIGluZGV4KQog CSAqIHdyaXRlcyBkaWQgbm90IGdvIHRocm91Z2ggc2hhcmVkIGJ1ZmZlcnMgYW5kIHRoZXJlZm9y ZSBhIGNvbmN1cnJlbnQKIAkgKiBjaGVja3BvaW50IG1heSBoYXZlIG1vdmVkIHRoZSByZWRvIHBv aW50ZXIgcGFzdCBvdXIgeGxvZyByZWNvcmQuCiAJICovCi0Jc21ncmltbWVkc3luYyhSZWxhdGlv bkdldFNtZ3IoaW5kZXgpLCBJTklUX0ZPUktOVU0pOworCXNtZ3JpbW1lZHN5bmMoc2ZpbGUpOwog fQogCiAvKgpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvYWNjZXNzL3RhYmxlL3RhYmxlYW0uYyBi L3NyYy9iYWNrZW5kL2FjY2Vzcy90YWJsZS90YWJsZWFtLmMKaW5kZXggYjNkMWE2YzNmOGYuLjE4 YzRlODdmZjUyIDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9hY2Nlc3MvdGFibGUvdGFibGVhbS5j CisrKyBiL3NyYy9iYWNrZW5kL2FjY2Vzcy90YWJsZS90YWJsZWFtLmMKQEAgLTYzMiwxMCArNjMy LDEwIEBAIHRhYmxlX2Jsb2NrX3JlbGF0aW9uX3NpemUoUmVsYXRpb24gcmVsLCBGb3JrTnVtYmVy IGZvcmtOdW1iZXIpCiAJaWYgKGZvcmtOdW1iZXIgPT0gSW52YWxpZEZvcmtOdW1iZXIpCiAJewog CQlmb3IgKGludCBpID0gMDsgaSA8IE1BWF9GT1JLTlVNOyBpKyspCi0JCQluYmxvY2tzICs9IHNt Z3JuYmxvY2tzKFJlbGF0aW9uR2V0U21ncihyZWwpLCBpKTsKKwkJCW5ibG9ja3MgKz0gc21ncm5i bG9ja3MoUmVsYXRpb25HZXRTbWdyKHJlbCwgaSkpOwogCX0KIAllbHNlCi0JCW5ibG9ja3MgPSBz bWdybmJsb2NrcyhSZWxhdGlvbkdldFNtZ3IocmVsKSwgZm9ya051bWJlcik7CisJCW5ibG9ja3Mg PSBzbWdybmJsb2NrcyhSZWxhdGlvbkdldFNtZ3IocmVsLCBmb3JrTnVtYmVyKSk7CiAKIAlyZXR1 cm4gbmJsb2NrcyAqIEJMQ0tTWjsKIH0KZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL2FjY2Vzcy90 cmFuc2FtL2Nsb2cuYyBiL3NyYy9iYWNrZW5kL2FjY2Vzcy90cmFuc2FtL2Nsb2cuYwppbmRleCAz ZDkwODhhNzA0OC4uYWQ4YWVmNmQ3N2QgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL2FjY2Vzcy90 cmFuc2FtL2Nsb2cuYworKysgYi9zcmMvYmFja2VuZC9hY2Nlc3MvdHJhbnNhbS9jbG9nLmMKQEAg LTQxLDYgKzQxLDggQEAKICNpbmNsdWRlICJtaXNjYWRtaW4uaCIKICNpbmNsdWRlICJwZ190cmFj ZS5oIgogI2luY2x1ZGUgInBnc3RhdC5oIgorI2luY2x1ZGUgInN0b3JhZ2UvYnVmbWdyLmgiCisj aW5jbHVkZSAic3RvcmFnZS9idWZfaW50ZXJuYWxzLmgiCiAjaW5jbHVkZSAic3RvcmFnZS9wcm9j LmgiCiAjaW5jbHVkZSAic3RvcmFnZS9zeW5jLmgiCiAKQEAgLTU5LDcgKzYxLDcgQEAKIC8qIFdl IG5lZWQgdHdvIGJpdHMgcGVyIHhhY3QsIHNvIGZvdXIgeGFjdHMgZml0IGluIGEgYnl0ZSAqLwog I2RlZmluZSBDTE9HX0JJVFNfUEVSX1hBQ1QJMgogI2RlZmluZSBDTE9HX1hBQ1RTX1BFUl9CWVRF IDQKLSNkZWZpbmUgQ0xPR19YQUNUU19QRVJfUEFHRSAoQkxDS1NaICogQ0xPR19YQUNUU19QRVJf QllURSkKKyNkZWZpbmUgQ0xPR19YQUNUU19QRVJfUEFHRSAoKEJMQ0tTWiAtIFNpemVPZlBhZ2VI ZWFkZXJEYXRhKSAqIENMT0dfWEFDVFNfUEVSX0JZVEUpCiAjZGVmaW5lIENMT0dfWEFDVF9CSVRN QVNLCSgoMSA8PCBDTE9HX0JJVFNfUEVSX1hBQ1QpIC0gMSkKIAogI2RlZmluZSBUcmFuc2FjdGlv bklkVG9QYWdlKHhpZCkJKCh4aWQpIC8gKFRyYW5zYWN0aW9uSWQpIENMT0dfWEFDVFNfUEVSX1BB R0UpCkBAIC04MSwxNyArODMsMTAgQEAKICAqLwogI2RlZmluZSBUSFJFU0hPTERfU1VCVFJBTlNf Q0xPR19PUFQJNQogCi0vKgotICogTGluayB0byBzaGFyZWQtbWVtb3J5IGRhdGEgc3RydWN0dXJl cyBmb3IgQ0xPRyBjb250cm9sCi0gKi8KLXN0YXRpYyBTbHJ1Q3RsRGF0YSBYYWN0Q3RsRGF0YTsK LQotI2RlZmluZSBYYWN0Q3RsICgmWGFjdEN0bERhdGEpCiAKLQotc3RhdGljIGludAlaZXJvQ0xP R1BhZ2UoaW50IHBhZ2VubywgYm9vbCB3cml0ZVhsb2cpOworc3RhdGljIEJ1ZmZlciBaZXJvQ0xP R1BhZ2UoaW50IHBhZ2VubywgYm9vbCB3cml0ZVhsb2cpOwogc3RhdGljIGJvb2wgQ0xPR1BhZ2VQ cmVjZWRlcyhpbnQgcGFnZTEsIGludCBwYWdlMik7Ci1zdGF0aWMgdm9pZCBXcml0ZVplcm9QYWdl WGxvZ1JlYyhpbnQgcGFnZW5vKTsKK3N0YXRpYyBYTG9nUmVjUHRyIFdyaXRlWmVyb1BhZ2VYbG9n UmVjKGludCBwYWdlbm8pOwogc3RhdGljIHZvaWQgV3JpdGVUcnVuY2F0ZVhsb2dSZWMoaW50IHBh Z2VubywgVHJhbnNhY3Rpb25JZCBvbGRlc3RYYWN0LAogCQkJCQkJCQkgT2lkIG9sZGVzdFhhY3RE Yik7CiBzdGF0aWMgdm9pZCBUcmFuc2FjdGlvbklkU2V0UGFnZVN0YXR1cyhUcmFuc2FjdGlvbklk IHhpZCwgaW50IG5zdWJ4aWRzLApAQCAtOTksNyArOTQsNyBAQCBzdGF0aWMgdm9pZCBUcmFuc2Fj dGlvbklkU2V0UGFnZVN0YXR1cyhUcmFuc2FjdGlvbklkIHhpZCwgaW50IG5zdWJ4aWRzLAogCQkJ CQkJCQkJICAgWExvZ1JlY1B0ciBsc24sIGludCBwYWdlbm8sCiAJCQkJCQkJCQkgICBib29sIGFs bF94YWN0X3NhbWVfcGFnZSk7CiBzdGF0aWMgdm9pZCBUcmFuc2FjdGlvbklkU2V0U3RhdHVzQml0 KFRyYW5zYWN0aW9uSWQgeGlkLCBYaWRTdGF0dXMgc3RhdHVzLAotCQkJCQkJCQkJICBYTG9nUmVj UHRyIGxzbiwgaW50IHNsb3Rubyk7CisJCQkJCQkJCQkgIFhMb2dSZWNQdHIgbHNuLCBCdWZmZXIg YnVmZmVyKTsKIHN0YXRpYyB2b2lkIHNldF9zdGF0dXNfYnlfcGFnZXMoaW50IG5zdWJ4aWRzLCBU cmFuc2FjdGlvbklkICpzdWJ4aWRzLAogCQkJCQkJCQlYaWRTdGF0dXMgc3RhdHVzLCBYTG9nUmVj UHRyIGxzbik7CiBzdGF0aWMgYm9vbCBUcmFuc2FjdGlvbkdyb3VwVXBkYXRlWGlkU3RhdHVzKFRy YW5zYWN0aW9uSWQgeGlkLApAQCAtMzQxLDEzICszMzYsMTIgQEAgVHJhbnNhY3Rpb25JZFNldFBh Z2VTdGF0dXNJbnRlcm5hbChUcmFuc2FjdGlvbklkIHhpZCwgaW50IG5zdWJ4aWRzLAogCQkJCQkJ CQkgICBUcmFuc2FjdGlvbklkICpzdWJ4aWRzLCBYaWRTdGF0dXMgc3RhdHVzLAogCQkJCQkJCQkg ICBYTG9nUmVjUHRyIGxzbiwgaW50IHBhZ2VubykKIHsKLQlpbnQJCQlzbG90bm87CisJQnVmZmVy CQlidWZmZXI7CiAJaW50CQkJaTsKIAogCUFzc2VydChzdGF0dXMgPT0gVFJBTlNBQ1RJT05fU1RB VFVTX0NPTU1JVFRFRCB8fAogCQkgICBzdGF0dXMgPT0gVFJBTlNBQ1RJT05fU1RBVFVTX0FCT1JU RUQgfHwKIAkJICAgKHN0YXR1cyA9PSBUUkFOU0FDVElPTl9TVEFUVVNfU1VCX0NPTU1JVFRFRCAm JiAhVHJhbnNhY3Rpb25JZElzVmFsaWQoeGlkKSkpOwotCUFzc2VydChMV0xvY2tIZWxkQnlNZUlu TW9kZShYYWN0U0xSVUxvY2ssIExXX0VYQ0xVU0lWRSkpOwogCiAJLyoKIAkgKiBJZiB3ZSdyZSBk b2luZyBhbiBhc3luYyBjb21taXQgKGllLCBsc24gaXMgdmFsaWQpLCB0aGVuIHdlIG11c3Qgd2Fp dApAQCAtMzU4LDcgKzM1Miw4IEBAIFRyYW5zYWN0aW9uSWRTZXRQYWdlU3RhdHVzSW50ZXJuYWwo VHJhbnNhY3Rpb25JZCB4aWQsIGludCBuc3VieGlkcywKIAkgKiB3cml0ZS1idXN5LCBzaW5jZSB3 ZSBkb24ndCBjYXJlIGlmIHRoZSB1cGRhdGUgcmVhY2hlcyBkaXNrIHNvb25lciB0aGFuCiAJICog d2UgdGhpbmsuCiAJICovCi0Jc2xvdG5vID0gU2ltcGxlTHJ1UmVhZFBhZ2UoWGFjdEN0bCwgcGFn ZW5vLCBYTG9nUmVjUHRySXNJbnZhbGlkKGxzbiksIHhpZCk7CisJYnVmZmVyID0gUmVhZFNscnVC dWZmZXIoU0xSVV9DTE9HX0lELCBwYWdlbm8pOworCUxvY2tCdWZmZXIoYnVmZmVyLCBCVUZGRVJf TE9DS19FWENMVVNJVkUpOwogCiAJLyoKIAkgKiBTZXQgdGhlIG1haW4gdHJhbnNhY3Rpb24gaWQs IGlmIGFueS4KQEAgLTM3NiwyNSArMzcxLDI2IEBAIFRyYW5zYWN0aW9uSWRTZXRQYWdlU3RhdHVz SW50ZXJuYWwoVHJhbnNhY3Rpb25JZCB4aWQsIGludCBuc3VieGlkcywKIAkJewogCQkJZm9yIChp ID0gMDsgaSA8IG5zdWJ4aWRzOyBpKyspCiAJCQl7Ci0JCQkJQXNzZXJ0KFhhY3RDdGwtPnNoYXJl ZC0+cGFnZV9udW1iZXJbc2xvdG5vXSA9PSBUcmFuc2FjdGlvbklkVG9QYWdlKHN1YnhpZHNbaV0p KTsKKwkJCQlBc3NlcnQocGFnZW5vID09IFRyYW5zYWN0aW9uSWRUb1BhZ2Uoc3VieGlkc1tpXSkp OwogCQkJCVRyYW5zYWN0aW9uSWRTZXRTdGF0dXNCaXQoc3VieGlkc1tpXSwKIAkJCQkJCQkJCQkg IFRSQU5TQUNUSU9OX1NUQVRVU19TVUJfQ09NTUlUVEVELAotCQkJCQkJCQkJCSAgbHNuLCBzbG90 bm8pOworCQkJCQkJCQkJCSAgbHNuLCBidWZmZXIpOwogCQkJfQogCQl9CiAKIAkJLyogLi4uIHRo ZW4gdGhlIG1haW4gdHJhbnNhY3Rpb24gKi8KLQkJVHJhbnNhY3Rpb25JZFNldFN0YXR1c0JpdCh4 aWQsIHN0YXR1cywgbHNuLCBzbG90bm8pOworCQlUcmFuc2FjdGlvbklkU2V0U3RhdHVzQml0KHhp ZCwgc3RhdHVzLCBsc24sIGJ1ZmZlcik7CiAJfQogCiAJLyogU2V0IHRoZSBzdWJ0cmFuc2FjdGlv bnMgKi8KIAlmb3IgKGkgPSAwOyBpIDwgbnN1YnhpZHM7IGkrKykKIAl7Ci0JCUFzc2VydChYYWN0 Q3RsLT5zaGFyZWQtPnBhZ2VfbnVtYmVyW3Nsb3Rub10gPT0gVHJhbnNhY3Rpb25JZFRvUGFnZShz dWJ4aWRzW2ldKSk7Ci0JCVRyYW5zYWN0aW9uSWRTZXRTdGF0dXNCaXQoc3VieGlkc1tpXSwgc3Rh dHVzLCBsc24sIHNsb3Rubyk7CisJCUFzc2VydChwYWdlbm8gPT0gVHJhbnNhY3Rpb25JZFRvUGFn ZShzdWJ4aWRzW2ldKSk7CisJCVRyYW5zYWN0aW9uSWRTZXRTdGF0dXNCaXQoc3VieGlkc1tpXSwg c3RhdHVzLCBsc24sIGJ1ZmZlcik7CiAJfQogCi0JWGFjdEN0bC0+c2hhcmVkLT5wYWdlX2RpcnR5 W3Nsb3Rub10gPSB0cnVlOworCU1hcmtCdWZmZXJEaXJ0eShidWZmZXIpOworCVVubG9ja1JlbGVh c2VCdWZmZXIoYnVmZmVyKTsKIH0KIAogLyoKQEAgLTU2OCwxNSArNTY0LDE5IEBAIFRyYW5zYWN0 aW9uR3JvdXBVcGRhdGVYaWRTdGF0dXMoVHJhbnNhY3Rpb25JZCB4aWQsIFhpZFN0YXR1cyBzdGF0 dXMsCiAgKiBNdXN0IGJlIGNhbGxlZCB3aXRoIFhhY3RTTFJVTG9jayBoZWxkCiAgKi8KIHN0YXRp YyB2b2lkCi1UcmFuc2FjdGlvbklkU2V0U3RhdHVzQml0KFRyYW5zYWN0aW9uSWQgeGlkLCBYaWRT dGF0dXMgc3RhdHVzLCBYTG9nUmVjUHRyIGxzbiwgaW50IHNsb3RubykKK1RyYW5zYWN0aW9uSWRT ZXRTdGF0dXNCaXQoVHJhbnNhY3Rpb25JZCB4aWQsIFhpZFN0YXR1cyBzdGF0dXMsIFhMb2dSZWNQ dHIgbHNuLCBCdWZmZXIgYnVmZmVyKQogewogCWludAkJCWJ5dGVubyA9IFRyYW5zYWN0aW9uSWRU b0J5dGUoeGlkKTsKKwlpbnQgCQlwYWdlbm8gPSBUcmFuc2FjdGlvbklkVG9QYWdlKHhpZCk7CiAJ aW50CQkJYnNoaWZ0ID0gVHJhbnNhY3Rpb25JZFRvQkluZGV4KHhpZCkgKiBDTE9HX0JJVFNfUEVS X1hBQ1Q7CiAJY2hhcgkgICAqYnl0ZXB0cjsKIAljaGFyCQlieXRldmFsOwogCWNoYXIJCWN1cnZh bDsKIAotCWJ5dGVwdHIgPSBYYWN0Q3RsLT5zaGFyZWQtPnBhZ2VfYnVmZmVyW3Nsb3Rub10gKyBi eXRlbm87CisJQXNzZXJ0KExXTG9ja0hlbGRCeU1lSW5Nb2RlKEJ1ZmZlckRlc2NyaXB0b3JHZXRD b250ZW50TG9jayhHZXRCdWZmZXJEZXNjcmlwdG9yKGJ1ZmZlciAtIDEpKSwKKwkJCQkJCQkJTFdf RVhDTFVTSVZFKSk7CisKKwlieXRlcHRyID0gQnVmZmVyR2V0UGFnZShidWZmZXIpICsgU2l6ZU9m UGFnZUhlYWRlckRhdGEgKyBieXRlbm87CiAJY3VydmFsID0gKCpieXRlcHRyID4+IGJzaGlmdCkg JiBDTE9HX1hBQ1RfQklUTUFTSzsKIAogCS8qCkBAIC02MDMsOSArNjAzLDExIEBAIFRyYW5zYWN0 aW9uSWRTZXRTdGF0dXNCaXQoVHJhbnNhY3Rpb25JZCB4aWQsIFhpZFN0YXR1cyBzdGF0dXMsIFhM b2dSZWNQdHIgbHNuLCBpCiAJYnl0ZXZhbCAmPSB+KCgoMSA8PCBDTE9HX0JJVFNfUEVSX1hBQ1Qp IC0gMSkgPDwgYnNoaWZ0KTsKIAlieXRldmFsIHw9IChzdGF0dXMgPDwgYnNoaWZ0KTsKIAkqYnl0 ZXB0ciA9IGJ5dGV2YWw7CisJUGFnZVNldENoZWNrc3VtSW5wbGFjZShCdWZmZXJHZXRQYWdlKGJ1 ZmZlciksIHBhZ2Vubyk7CisKIAogCS8qCi0JICogVXBkYXRlIHRoZSBncm91cCBMU04gaWYgdGhl IHRyYW5zYWN0aW9uIGNvbXBsZXRpb24gTFNOIGlzIGhpZ2hlci4KKwkgKiBVcGRhdGUgdGhlIGJ1 ZmZlciBMU04gaWYgdGhlIHRyYW5zYWN0aW9uIGNvbXBsZXRpb24gTFNOIGlzIGhpZ2hlci4KIAkg KgogCSAqIE5vdGU6IGxzbiB3aWxsIGJlIGludmFsaWQgd2hlbiBzdXBwbGllZCBkdXJpbmcgSW5S ZWNvdmVyeSBwcm9jZXNzaW5nLAogCSAqIHNvIHdlIGRvbid0IG5lZWQgdG8gZG8gYW55dGhpbmcg c3BlY2lhbCB0byBhdm9pZCBMU04gdXBkYXRlcyBkdXJpbmcKQEAgLTYxNCwxMCArNjE2LDggQEAg VHJhbnNhY3Rpb25JZFNldFN0YXR1c0JpdChUcmFuc2FjdGlvbklkIHhpZCwgWGlkU3RhdHVzIHN0 YXR1cywgWExvZ1JlY1B0ciBsc24sIGkKIAkgKi8KIAlpZiAoIVhMb2dSZWNQdHJJc0ludmFsaWQo bHNuKSkKIAl7Ci0JCWludAkJCWxzbmluZGV4ID0gR2V0TFNOSW5kZXgoc2xvdG5vLCB4aWQpOwot Ci0JCWlmIChYYWN0Q3RsLT5zaGFyZWQtPmdyb3VwX2xzbltsc25pbmRleF0gPCBsc24pCi0JCQlY YWN0Q3RsLT5zaGFyZWQtPmdyb3VwX2xzbltsc25pbmRleF0gPSBsc247CisJCWlmIChCdWZmZXJH ZXRFeHRlcm5hbExTTihHZXRCdWZmZXJEZXNjcmlwdG9yKGJ1ZmZlcikpIDwgbHNuKQorCQkJQnVm ZmVyU2V0RXh0ZXJuYWxMU04oR2V0QnVmZmVyRGVzY3JpcHRvcihidWZmZXIpLCBsc24pOwogCX0K IH0KIApAQCAtNjQyLDY3ICs2NDIsMjIgQEAgVHJhbnNhY3Rpb25JZEdldFN0YXR1cyhUcmFuc2Fj dGlvbklkIHhpZCwgWExvZ1JlY1B0ciAqbHNuKQogCWludAkJCXBhZ2VubyA9IFRyYW5zYWN0aW9u SWRUb1BhZ2UoeGlkKTsKIAlpbnQJCQlieXRlbm8gPSBUcmFuc2FjdGlvbklkVG9CeXRlKHhpZCk7 CiAJaW50CQkJYnNoaWZ0ID0gVHJhbnNhY3Rpb25JZFRvQkluZGV4KHhpZCkgKiBDTE9HX0JJVFNf UEVSX1hBQ1Q7Ci0JaW50CQkJc2xvdG5vOwotCWludAkJCWxzbmluZGV4OwogCWNoYXIJICAgKmJ5 dGVwdHI7CiAJWGlkU3RhdHVzCXN0YXR1czsKKwlCdWZmZXIJCWJ1ZmZlcjsKIAotCS8qIGxvY2sg aXMgYWNxdWlyZWQgYnkgU2ltcGxlTHJ1UmVhZFBhZ2VfUmVhZE9ubHkgKi8KLQotCXNsb3RubyA9 IFNpbXBsZUxydVJlYWRQYWdlX1JlYWRPbmx5KFhhY3RDdGwsIHBhZ2VubywgeGlkKTsKLQlieXRl cHRyID0gWGFjdEN0bC0+c2hhcmVkLT5wYWdlX2J1ZmZlcltzbG90bm9dICsgYnl0ZW5vOworCWJ1 ZmZlciA9IFJlYWRTbHJ1QnVmZmVyKFNMUlVfQ0xPR19JRCwgcGFnZW5vKTsKKwlieXRlcHRyID0g QnVmZmVyR2V0UGFnZShidWZmZXIpICsgU2l6ZU9mUGFnZUhlYWRlckRhdGEgKyBieXRlbm87CiAK IAlzdGF0dXMgPSAoKmJ5dGVwdHIgPj4gYnNoaWZ0KSAmIENMT0dfWEFDVF9CSVRNQVNLOwogCi0J bHNuaW5kZXggPSBHZXRMU05JbmRleChzbG90bm8sIHhpZCk7Ci0JKmxzbiA9IFhhY3RDdGwtPnNo YXJlZC0+Z3JvdXBfbHNuW2xzbmluZGV4XTsKKwkqbHNuID0gQnVmZmVyR2V0RXh0ZXJuYWxMU04o R2V0QnVmZmVyRGVzY3JpcHRvcihidWZmZXIpKTsKIAotCUxXTG9ja1JlbGVhc2UoWGFjdFNMUlVM b2NrKTsKKwlSZWxlYXNlQnVmZmVyKGJ1ZmZlcik7CiAKIAlyZXR1cm4gc3RhdHVzOwogfQogCi0v KgotICogTnVtYmVyIG9mIHNoYXJlZCBDTE9HIGJ1ZmZlcnMuCi0gKgotICogT24gbGFyZ2VyIG11 bHRpLXByb2Nlc3NvciBzeXN0ZW1zLCBpdCBpcyBwb3NzaWJsZSB0byBoYXZlIG1hbnkgQ0xPRyBw YWdlCi0gKiByZXF1ZXN0cyBpbiBmbGlnaHQgYXQgb25lIHRpbWUgd2hpY2ggY291bGQgbGVhZCB0 byBkaXNrIGFjY2VzcyBmb3IgQ0xPRwotICogcGFnZSBpZiB0aGUgcmVxdWlyZWQgcGFnZSBpcyBu b3QgZm91bmQgaW4gbWVtb3J5LiAgVGVzdGluZyByZXZlYWxlZCB0aGF0IHdlCi0gKiBjYW4gZ2V0 IHRoZSBiZXN0IHBlcmZvcm1hbmNlIGJ5IGhhdmluZyAxMjggQ0xPRyBidWZmZXJzLCBtb3JlIHRo YW4gdGhhdCBpdAotICogZG9lc24ndCBpbXByb3ZlIHBlcmZvcm1hbmNlLgotICoKLSAqIFVuY29u ZGl0aW9uYWxseSBrZWVwaW5nIHRoZSBudW1iZXIgb2YgQ0xPRyBidWZmZXJzIHRvIDEyOCBkaWQg bm90IHNlZW0gbGlrZQotICogYSBnb29kIGlkZWEsIGJlY2F1c2UgaXQgd291bGQgaW5jcmVhc2Ug dGhlIG1pbmltdW0gYW1vdW50IG9mIHNoYXJlZCBtZW1vcnkKLSAqIHJlcXVpcmVkIHRvIHN0YXJ0 LCB3aGljaCBjb3VsZCBiZSBhIHByb2JsZW0gZm9yIHBlb3BsZSBydW5uaW5nIHZlcnkgc21hbGwK LSAqIGNvbmZpZ3VyYXRpb25zLiAgVGhlIGZvbGxvd2luZyBmb3JtdWxhIHNlZW1zIHRvIHJlcHJl c2VudCBhIHJlYXNvbmFibGUKLSAqIGNvbXByb21pc2U6IHBlb3BsZSB3aXRoIHZlcnkgbG93IHZh bHVlcyBmb3Igc2hhcmVkX2J1ZmZlcnMgd2lsbCBnZXQgZmV3ZXIKLSAqIENMT0cgYnVmZmVycyBh cyB3ZWxsLCBhbmQgZXZlcnlvbmUgZWxzZSB3aWxsIGdldCAxMjguCi0gKi8KLVNpemUKLUNMT0dT aG1lbUJ1ZmZlcnModm9pZCkKLXsKLQlyZXR1cm4gTWluKDEyOCwgTWF4KDQsIE5CdWZmZXJzIC8g NTEyKSk7Ci19Ci0KLS8qCi0gKiBJbml0aWFsaXphdGlvbiBvZiBzaGFyZWQgbWVtb3J5IGZvciBD TE9HCi0gKi8KLVNpemUKLUNMT0dTaG1lbVNpemUodm9pZCkKLXsKLQlyZXR1cm4gU2ltcGxlTHJ1 U2htZW1TaXplKENMT0dTaG1lbUJ1ZmZlcnMoKSwgQ0xPR19MU05TX1BFUl9QQUdFKTsKLX0KLQot dm9pZAotQ0xPR1NobWVtSW5pdCh2b2lkKQotewotCVhhY3RDdGwtPlBhZ2VQcmVjZWRlcyA9IENM T0dQYWdlUHJlY2VkZXM7Ci0JU2ltcGxlTHJ1SW5pdChYYWN0Q3RsLCAiWGFjdCIsIENMT0dTaG1l bUJ1ZmZlcnMoKSwgQ0xPR19MU05TX1BFUl9QQUdFLAotCQkJCSAgWGFjdFNMUlVMb2NrLCAicGdf eGFjdCIsIExXVFJBTkNIRV9YQUNUX0JVRkZFUiwKLQkJCQkgIFNZTkNfSEFORExFUl9DTE9HKTsK LQlTbHJ1UGFnZVByZWNlZGVzVW5pdFRlc3RzKFhhY3RDdGwsIENMT0dfWEFDVFNfUEVSX1BBR0Up OwotfQotCiAvKgogICogVGhpcyBmdW5jIG11c3QgYmUgY2FsbGVkIE9OQ0Ugb24gc3lzdGVtIGlu c3RhbGwuICBJdCBjcmVhdGVzCiAgKiB0aGUgaW5pdGlhbCBDTE9HIHNlZ21lbnQuICAoVGhlIENM T0cgZGlyZWN0b3J5IGlzIGFzc3VtZWQgdG8KQEAgLTcxMiwxOCArNjY3LDE1IEBAIENMT0dTaG1l bUluaXQodm9pZCkKIHZvaWQKIEJvb3RTdHJhcENMT0codm9pZCkKIHsKLQlpbnQJCQlzbG90bm87 Ci0KLQlMV0xvY2tBY3F1aXJlKFhhY3RTTFJVTG9jaywgTFdfRVhDTFVTSVZFKTsKKwlCdWZmZXIJ CWJ1ZmZlcjsKIAogCS8qIENyZWF0ZSBhbmQgemVybyB0aGUgZmlyc3QgcGFnZSBvZiB0aGUgY29t bWl0IGxvZyAqLwotCXNsb3RubyA9IFplcm9DTE9HUGFnZSgwLCBmYWxzZSk7CisJYnVmZmVyID0g WmVyb0NMT0dQYWdlKDAsIGZhbHNlKTsKIAogCS8qIE1ha2Ugc3VyZSBpdCdzIHdyaXR0ZW4gb3V0 ICovCi0JU2ltcGxlTHJ1V3JpdGVQYWdlKFhhY3RDdGwsIHNsb3Rubyk7Ci0JQXNzZXJ0KCFYYWN0 Q3RsLT5zaGFyZWQtPnBhZ2VfZGlydHlbc2xvdG5vXSk7CisJRmx1c2hPbmVCdWZmZXIoYnVmZmVy KTsKIAotCUxXTG9ja1JlbGVhc2UoWGFjdFNMUlVMb2NrKTsKKwlVbmxvY2tSZWxlYXNlQnVmZmVy KGJ1ZmZlcik7CiB9CiAKIC8qCkBAIC03MzUsMTcgKzY4NywyNiBAQCBCb290U3RyYXBDTE9HKHZv aWQpCiAgKgogICogQ29udHJvbCBsb2NrIG11c3QgYmUgaGVsZCBhdCBlbnRyeSwgYW5kIHdpbGwg YmUgaGVsZCBhdCBleGl0LgogICovCi1zdGF0aWMgaW50CitzdGF0aWMgQnVmZmVyCiBaZXJvQ0xP R1BhZ2UoaW50IHBhZ2VubywgYm9vbCB3cml0ZVhsb2cpCiB7Ci0JaW50CQkJc2xvdG5vOworCUJ1 ZmZlcgkJYnVmZmVyOworCVBhZ2UgCQlwYWdlOworCVhMb2dSZWNQdHIgIGxzbjsKIAotCXNsb3Ru byA9IFNpbXBsZUxydVplcm9QYWdlKFhhY3RDdGwsIHBhZ2Vubyk7CisJYnVmZmVyID0gWmVyb1Ns cnVCdWZmZXIoU0xSVV9DTE9HX0lELCBwYWdlbm8pOworCU1hcmtCdWZmZXJEaXJ0eShidWZmZXIp OwogCiAJaWYgKHdyaXRlWGxvZykKLQkJV3JpdGVaZXJvUGFnZVhsb2dSZWMocGFnZW5vKTsKKwl7 CisJCWxzbiA9IFdyaXRlWmVyb1BhZ2VYbG9nUmVjKHBhZ2Vubyk7CisJCXBhZ2UgPSBCdWZmZXJH ZXRQYWdlKGJ1ZmZlcik7CisJCVBhZ2VTZXRIZWFkZXJEYXRhTm9uUmVsKHBhZ2UsIHBhZ2Vubywg bHNuLCBCTENLU1osIFBHX01FVEFQQUdFX0xBWU9VVF9WRVJTSU9OKTsKKwkJUGFnZVNldENoZWNr c3VtSW5wbGFjZShwYWdlLCBwYWdlbm8pOwogCi0JcmV0dXJuIHNsb3RubzsKKwl9CisJCQorCXJl dHVybiBidWZmZXI7CiB9CiAKIC8qCkBAIC03NTUsMTcgKzcxNiw2IEBAIFplcm9DTE9HUGFnZShp bnQgcGFnZW5vLCBib29sIHdyaXRlWGxvZykKIHZvaWQKIFN0YXJ0dXBDTE9HKHZvaWQpCiB7Ci0J VHJhbnNhY3Rpb25JZCB4aWQgPSBYaWRGcm9tRnVsbFRyYW5zYWN0aW9uSWQoU2htZW1WYXJpYWJs ZUNhY2hlLT5uZXh0WGlkKTsKLQlpbnQJCQlwYWdlbm8gPSBUcmFuc2FjdGlvbklkVG9QYWdlKHhp ZCk7Ci0KLQlMV0xvY2tBY3F1aXJlKFhhY3RTTFJVTG9jaywgTFdfRVhDTFVTSVZFKTsKLQotCS8q Ci0JICogSW5pdGlhbGl6ZSBvdXIgaWRlYSBvZiB0aGUgbGF0ZXN0IHBhZ2UgbnVtYmVyLgotCSAq LwotCVhhY3RDdGwtPnNoYXJlZC0+bGF0ZXN0X3BhZ2VfbnVtYmVyID0gcGFnZW5vOwotCi0JTFdM b2NrUmVsZWFzZShYYWN0U0xSVUxvY2spOwogfQogCiAvKgpAQCAtNzc3LDggKzcyNyw2IEBAIFRy aW1DTE9HKHZvaWQpCiAJVHJhbnNhY3Rpb25JZCB4aWQgPSBYaWRGcm9tRnVsbFRyYW5zYWN0aW9u SWQoU2htZW1WYXJpYWJsZUNhY2hlLT5uZXh0WGlkKTsKIAlpbnQJCQlwYWdlbm8gPSBUcmFuc2Fj dGlvbklkVG9QYWdlKHhpZCk7CiAKLQlMV0xvY2tBY3F1aXJlKFhhY3RTTFJVTG9jaywgTFdfRVhD TFVTSVZFKTsKLQogCS8qCiAJICogWmVybyBvdXQgdGhlIHJlbWFpbmRlciBvZiB0aGUgY3VycmVu dCBjbG9nIHBhZ2UuICBVbmRlciBub3JtYWwKIAkgKiBjaXJjdW1zdGFuY2VzIGl0IHNob3VsZCBi ZSB6ZXJvZXMgYWxyZWFkeSwgYnV0IGl0IHNlZW1zIGF0IGxlYXN0CkBAIC03OTUsNDAgKzc0Mywy NiBAQCBUcmltQ0xPRyh2b2lkKQogCXsKIAkJaW50CQkJYnl0ZW5vID0gVHJhbnNhY3Rpb25JZFRv Qnl0ZSh4aWQpOwogCQlpbnQJCQlic2hpZnQgPSBUcmFuc2FjdGlvbklkVG9CSW5kZXgoeGlkKSAq IENMT0dfQklUU19QRVJfWEFDVDsKLQkJaW50CQkJc2xvdG5vOwogCQljaGFyCSAgICpieXRlcHRy OworCQlCdWZmZXIJCWJ1ZmZlcjsKIAotCQlzbG90bm8gPSBTaW1wbGVMcnVSZWFkUGFnZShYYWN0 Q3RsLCBwYWdlbm8sIGZhbHNlLCB4aWQpOwotCQlieXRlcHRyID0gWGFjdEN0bC0+c2hhcmVkLT5w YWdlX2J1ZmZlcltzbG90bm9dICsgYnl0ZW5vOworCQlidWZmZXIgPSBSZWFkU2xydUJ1ZmZlcihT TFJVX0NMT0dfSUQsIHBhZ2Vubyk7CisJCUxvY2tCdWZmZXIoYnVmZmVyLCBCVUZGRVJfTE9DS19F WENMVVNJVkUpOworCQlieXRlcHRyID0gQnVmZmVyR2V0UGFnZShidWZmZXIpICsgU2l6ZU9mUGFn ZUhlYWRlckRhdGEgKyBieXRlbm87CiAKIAkJLyogWmVybyBzby1mYXItdW51c2VkIHBvc2l0aW9u cyBpbiB0aGUgY3VycmVudCBieXRlICovCiAJCSpieXRlcHRyICY9ICgxIDw8IGJzaGlmdCkgLSAx OwogCQkvKiBaZXJvIHRoZSByZXN0IG9mIHRoZSBwYWdlICovCiAJCU1lbVNldChieXRlcHRyICsg MSwgMCwgQkxDS1NaIC0gYnl0ZW5vIC0gMSk7CisJCVBhZ2VTZXRDaGVja3N1bUlucGxhY2UoQnVm ZmVyR2V0UGFnZShidWZmZXIpLCBwYWdlbm8pOwogCi0JCVhhY3RDdGwtPnNoYXJlZC0+cGFnZV9k aXJ0eVtzbG90bm9dID0gdHJ1ZTsKLQl9CiAKLQlMV0xvY2tSZWxlYXNlKFhhY3RTTFJVTG9jayk7 Ci19CisJCU1hcmtCdWZmZXJEaXJ0eShidWZmZXIpOwogCi0vKgotICogUGVyZm9ybSBhIGNoZWNr cG9pbnQgLS0tIGVpdGhlciBkdXJpbmcgc2h1dGRvd24sIG9yIG9uLXRoZS1mbHkKLSAqLwotdm9p ZAotQ2hlY2tQb2ludENMT0codm9pZCkKLXsKLQkvKgotCSAqIFdyaXRlIGRpcnR5IENMT0cgcGFn ZXMgdG8gZGlzay4gIFRoaXMgbWF5IHJlc3VsdCBpbiBzeW5jIHJlcXVlc3RzCi0JICogcXVldWVk IGZvciBsYXRlciBoYW5kbGluZyBieSBQcm9jZXNzU3luY1JlcXVlc3RzKCksIGFzIHBhcnQgb2Yg dGhlCi0JICogY2hlY2twb2ludC4KLQkgKi8KLQlUUkFDRV9QT1NUR1JFU1FMX0NMT0dfQ0hFQ0tQ T0lOVF9TVEFSVCh0cnVlKTsKLQlTaW1wbGVMcnVXcml0ZUFsbChYYWN0Q3RsLCB0cnVlKTsKLQlU UkFDRV9QT1NUR1JFU1FMX0NMT0dfQ0hFQ0tQT0lOVF9ET05FKHRydWUpOworCQlVbmxvY2tSZWxl YXNlQnVmZmVyKGJ1ZmZlcik7CisJfQogfQogCi0KIC8qCiAgKiBNYWtlIHN1cmUgdGhhdCBDTE9H IGhhcyByb29tIGZvciBhIG5ld2x5LWFsbG9jYXRlZCBYSUQuCiAgKgpAQCAtODUyLDEyICs3ODYs OCBAQCBFeHRlbmRDTE9HKFRyYW5zYWN0aW9uSWQgbmV3ZXN0WGFjdCkKIAogCXBhZ2VubyA9IFRy YW5zYWN0aW9uSWRUb1BhZ2UobmV3ZXN0WGFjdCk7CiAKLQlMV0xvY2tBY3F1aXJlKFhhY3RTTFJV TG9jaywgTFdfRVhDTFVTSVZFKTsKLQogCS8qIFplcm8gdGhlIHBhZ2UgYW5kIG1ha2UgYW4gWExP RyBlbnRyeSBhYm91dCBpdCAqLwotCVplcm9DTE9HUGFnZShwYWdlbm8sIHRydWUpOwotCi0JTFdM b2NrUmVsZWFzZShYYWN0U0xSVUxvY2spOworCVVubG9ja1JlbGVhc2VCdWZmZXIoWmVyb0NMT0dQ YWdlKHBhZ2VubywgdHJ1ZSkpOwogfQogCiAKQEAgLTg4OCw3ICs4MTgsOCBAQCBUcnVuY2F0ZUNM T0coVHJhbnNhY3Rpb25JZCBvbGRlc3RYYWN0LCBPaWQgb2xkZXN0eGlkX2RhdG9pZCkKIAljdXRv ZmZQYWdlID0gVHJhbnNhY3Rpb25JZFRvUGFnZShvbGRlc3RYYWN0KTsKIAogCS8qIENoZWNrIHRv IHNlZSBpZiB0aGVyZSdzIGFueSBmaWxlcyB0aGF0IGNvdWxkIGJlIHJlbW92ZWQgKi8KLQlpZiAo IVNscnVTY2FuRGlyZWN0b3J5KFhhY3RDdGwsIFNscnVTY2FuRGlyQ2JSZXBvcnRQcmVzZW5jZSwg JmN1dG9mZlBhZ2UpKQorCWlmICghU2xydVNjYW5EaXJlY3RvcnkoU0xSVV9DTE9HX0lELCBDTE9H UGFnZVByZWNlZGVzLAorCQkJCQkJICAgU2xydVNjYW5EaXJDYlJlcG9ydFByZXNlbmNlLCAmY3V0 b2ZmUGFnZSkpCiAJCXJldHVybjsJCQkJCS8qIG5vdGhpbmcgdG8gcmVtb3ZlICovCiAKIAkvKgpA QCAtOTA5LDcgKzg0MCw3IEBAIFRydW5jYXRlQ0xPRyhUcmFuc2FjdGlvbklkIG9sZGVzdFhhY3Qs IE9pZCBvbGRlc3R4aWRfZGF0b2lkKQogCVdyaXRlVHJ1bmNhdGVYbG9nUmVjKGN1dG9mZlBhZ2Us IG9sZGVzdFhhY3QsIG9sZGVzdHhpZF9kYXRvaWQpOwogCiAJLyogTm93IHdlIGNhbiByZW1vdmUg dGhlIG9sZCBDTE9HIHNlZ21lbnQocykgKi8KLQlTaW1wbGVMcnVUcnVuY2F0ZShYYWN0Q3RsLCBj dXRvZmZQYWdlKTsKKwlTaW1wbGVMcnVUcnVuY2F0ZShTTFJVX0NMT0dfSUQsIENMT0dQYWdlUHJl Y2VkZXMsIGN1dG9mZlBhZ2UpOwogfQogCiAKQEAgLTk1MCwxMiArODgxLDE1IEBAIENMT0dQYWdl UHJlY2VkZXMoaW50IHBhZ2UxLCBpbnQgcGFnZTIpCiAvKgogICogV3JpdGUgYSBaRVJPUEFHRSB4 bG9nIHJlY29yZAogICovCi1zdGF0aWMgdm9pZAorc3RhdGljIFhMb2dSZWNQdHIgCiBXcml0ZVpl cm9QYWdlWGxvZ1JlYyhpbnQgcGFnZW5vKQogeworCVhMb2dSZWNQdHIgbHNuOwogCVhMb2dCZWdp bkluc2VydCgpOwogCVhMb2dSZWdpc3RlckRhdGEoKGNoYXIgKikgKCZwYWdlbm8pLCBzaXplb2Yo aW50KSk7Ci0JKHZvaWQpIFhMb2dJbnNlcnQoUk1fQ0xPR19JRCwgQ0xPR19aRVJPUEFHRSk7CisJ bHNuID0gWExvZ0luc2VydChSTV9DTE9HX0lELCBDTE9HX1pFUk9QQUdFKTsKKworCXJldHVybiBs c247CiB9CiAKIC8qCkBAIC05OTQsMTcgKzkyOCwxMyBAQCBjbG9nX3JlZG8oWExvZ1JlYWRlclN0 YXRlICpyZWNvcmQpCiAJaWYgKGluZm8gPT0gQ0xPR19aRVJPUEFHRSkKIAl7CiAJCWludAkJCXBh Z2VubzsKLQkJaW50CQkJc2xvdG5vOworCQlCdWZmZXIJCWJ1ZmZlcjsKIAogCQltZW1jcHkoJnBh Z2VubywgWExvZ1JlY0dldERhdGEocmVjb3JkKSwgc2l6ZW9mKGludCkpOwogCi0JCUxXTG9ja0Fj cXVpcmUoWGFjdFNMUlVMb2NrLCBMV19FWENMVVNJVkUpOwotCi0JCXNsb3RubyA9IFplcm9DTE9H UGFnZShwYWdlbm8sIGZhbHNlKTsKLQkJU2ltcGxlTHJ1V3JpdGVQYWdlKFhhY3RDdGwsIHNsb3Ru byk7Ci0JCUFzc2VydCghWGFjdEN0bC0+c2hhcmVkLT5wYWdlX2RpcnR5W3Nsb3Rub10pOwotCi0J CUxXTG9ja1JlbGVhc2UoWGFjdFNMUlVMb2NrKTsKKwkJYnVmZmVyID0gWmVyb0NMT0dQYWdlKHBh Z2VubywgZmFsc2UpOworCQlGbHVzaE9uZUJ1ZmZlcihidWZmZXIpOworCQlVbmxvY2tSZWxlYXNl QnVmZmVyKGJ1ZmZlcik7CiAJfQogCWVsc2UgaWYgKGluZm8gPT0gQ0xPR19UUlVOQ0FURSkKIAl7 CkBAIC0xMDE0LDE3ICs5NDQsOCBAQCBjbG9nX3JlZG8oWExvZ1JlYWRlclN0YXRlICpyZWNvcmQp CiAKIAkJQWR2YW5jZU9sZGVzdENsb2dYaWQoeGxyZWMub2xkZXN0WGFjdCk7CiAKLQkJU2ltcGxl THJ1VHJ1bmNhdGUoWGFjdEN0bCwgeGxyZWMucGFnZW5vKTsKKwkJU2ltcGxlTHJ1VHJ1bmNhdGUo U0xSVV9DTE9HX0lELCBDTE9HUGFnZVByZWNlZGVzLCB4bHJlYy5wYWdlbm8pOwogCX0KIAllbHNl CiAJCWVsb2coUEFOSUMsICJjbG9nX3JlZG86IHVua25vd24gb3AgY29kZSAldSIsIGluZm8pOwog fQotCi0vKgotICogRW50cnlwb2ludCBmb3Igc3luYy5jIHRvIHN5bmMgY2xvZyBmaWxlcy4KLSAq LwotaW50Ci1jbG9nc3luY2ZpbGV0YWcoY29uc3QgRmlsZVRhZyAqZnRhZywgY2hhciAqcGF0aCkK LXsKLQlyZXR1cm4gU2xydVN5bmNGaWxlVGFnKFhhY3RDdGwsIGZ0YWcsIHBhdGgpOwotfQpkaWZm IC0tZ2l0IGEvc3JjL2JhY2tlbmQvYWNjZXNzL3RyYW5zYW0vY29tbWl0X3RzLmMgYi9zcmMvYmFj a2VuZC9hY2Nlc3MvdHJhbnNhbS9jb21taXRfdHMuYwppbmRleCA0ZGM4ZDQwMmJkMy4uMmFhMDdm NjM1NGYgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL2FjY2Vzcy90cmFuc2FtL2NvbW1pdF90cy5j CisrKyBiL3NyYy9iYWNrZW5kL2FjY2Vzcy90cmFuc2FtL2NvbW1pdF90cy5jCkBAIC02NiwxOSAr NjYsMTggQEAgdHlwZWRlZiBzdHJ1Y3QgQ29tbWl0VGltZXN0YW1wRW50cnkKIAkJCQkJCQkJCXNp emVvZihSZXBPcmlnaW5JZCkpCiAKICNkZWZpbmUgQ09NTUlUX1RTX1hBQ1RTX1BFUl9QQUdFIFwK LQkoQkxDS1NaIC8gU2l6ZU9mQ29tbWl0VGltZXN0YW1wRW50cnkpCisJKChCTENLU1ogLSBTaXpl T2ZQYWdlSGVhZGVyRGF0YSkgLyBTaXplT2ZDb21taXRUaW1lc3RhbXBFbnRyeSkKIAogI2RlZmlu ZSBUcmFuc2FjdGlvbklkVG9DVHNQYWdlKHhpZCkgXAogCSgoeGlkKSAvIChUcmFuc2FjdGlvbklk KSBDT01NSVRfVFNfWEFDVFNfUEVSX1BBR0UpCiAjZGVmaW5lIFRyYW5zYWN0aW9uSWRUb0NUc0Vu dHJ5KHhpZCkJXAogCSgoeGlkKSAlIChUcmFuc2FjdGlvbklkKSBDT01NSVRfVFNfWEFDVFNfUEVS X1BBR0UpCiAKLS8qCi0gKiBMaW5rIHRvIHNoYXJlZC1tZW1vcnkgZGF0YSBzdHJ1Y3R1cmVzIGZv ciBDb21taXRUcyBjb250cm9sCi0gKi8KLXN0YXRpYyBTbHJ1Q3RsRGF0YSBDb21taXRUc0N0bERh dGE7Ci0KLSNkZWZpbmUgQ29tbWl0VHNDdGwgKCZDb21taXRUc0N0bERhdGEpCisjZGVmaW5lIENU UGFnZUhlYWRlck9mZnNldCAoaW50KSBcCisJKChTaXplT2ZQYWdlSGVhZGVyRGF0YSAlIFNpemVP ZkNvbW1pdFRpbWVzdGFtcEVudHJ5ID09IDAgPyBcCisJKFNpemVPZlBhZ2VIZWFkZXJEYXRhIC8g U2l6ZU9mQ29tbWl0VGltZXN0YW1wRW50cnkpIDogXAorCShTaXplT2ZQYWdlSGVhZGVyRGF0YSAv IFNpemVPZkNvbW1pdFRpbWVzdGFtcEVudHJ5KSArIDEpICogXAorCVNpemVPZkNvbW1pdFRpbWVz dGFtcEVudHJ5KQogCiAvKgogICogV2Uga2VlcCBhIGNhY2hlIG9mIHRoZSBsYXN0IHZhbHVlIHNl dCBpbiBzaGFyZWQgbWVtb3J5LgpAQCAtMTEwLDExICsxMDksMTIgQEAgc3RhdGljIHZvaWQgU2V0 WGlkQ29tbWl0VHNJblBhZ2UoVHJhbnNhY3Rpb25JZCB4aWQsIGludCBuc3VieGlkcywKIHN0YXRp YyB2b2lkIFRyYW5zYWN0aW9uSWRTZXRDb21taXRUcyhUcmFuc2FjdGlvbklkIHhpZCwgVGltZXN0 YW1wVHogdHMsCiAJCQkJCQkJCQkgUmVwT3JpZ2luSWQgbm9kZWlkLCBpbnQgc2xvdG5vKTsKIHN0 YXRpYyB2b2lkIGVycm9yX2NvbW1pdF90c19kaXNhYmxlZCh2b2lkKTsKLXN0YXRpYyBpbnQJWmVy b0NvbW1pdFRzUGFnZShpbnQgcGFnZW5vLCBib29sIHdyaXRlWGxvZyk7CitzdGF0aWMgQnVmZmVy IFplcm9Db21taXRUc1BhZ2UoaW50IHBhZ2VubywgYm9vbCB3cml0ZVhsb2cpOwogc3RhdGljIGJv b2wgQ29tbWl0VHNQYWdlUHJlY2VkZXMoaW50IHBhZ2UxLCBpbnQgcGFnZTIpOwogc3RhdGljIHZv aWQgQWN0aXZhdGVDb21taXRUcyh2b2lkKTsKIHN0YXRpYyB2b2lkIERlYWN0aXZhdGVDb21taXRU cyh2b2lkKTsKLXN0YXRpYyB2b2lkIFdyaXRlWmVyb1BhZ2VYbG9nUmVjKGludCBwYWdlbm8pOwor c3RhdGljIFhMb2dSZWNQdHIgV3JpdGVaZXJvUGFnZVhsb2dSZWMoaW50IHBhZ2Vubyk7CisKIHN0 YXRpYyB2b2lkIFdyaXRlVHJ1bmNhdGVYbG9nUmVjKGludCBwYWdlbm8sIFRyYW5zYWN0aW9uSWQg b2xkZXN0WGlkKTsKIAogLyoKQEAgLTIxOSwzMiArMjE5LDMxIEBAIFNldFhpZENvbW1pdFRzSW5Q YWdlKFRyYW5zYWN0aW9uSWQgeGlkLCBpbnQgbnN1YnhpZHMsCiAJCQkJCSBUcmFuc2FjdGlvbklk ICpzdWJ4aWRzLCBUaW1lc3RhbXBUeiB0cywKIAkJCQkJIFJlcE9yaWdpbklkIG5vZGVpZCwgaW50 IHBhZ2VubykKIHsKLQlpbnQJCQlzbG90bm87CiAJaW50CQkJaTsKKwlCdWZmZXIJCWJ1ZmZlcjsK IAotCUxXTG9ja0FjcXVpcmUoQ29tbWl0VHNTTFJVTG9jaywgTFdfRVhDTFVTSVZFKTsKLQotCXNs b3RubyA9IFNpbXBsZUxydVJlYWRQYWdlKENvbW1pdFRzQ3RsLCBwYWdlbm8sIHRydWUsIHhpZCk7 CisJYnVmZmVyID0gUmVhZFNscnVCdWZmZXIoU0xSVV9DT01NSVRfVFNfSUQsIHBhZ2Vubyk7CisJ TG9ja0J1ZmZlcihidWZmZXIsIEJVRkZFUl9MT0NLX0VYQ0xVU0lWRSk7CiAKLQlUcmFuc2FjdGlv bklkU2V0Q29tbWl0VHMoeGlkLCB0cywgbm9kZWlkLCBzbG90bm8pOworCVRyYW5zYWN0aW9uSWRT ZXRDb21taXRUcyh4aWQsIHRzLCBub2RlaWQsIGJ1ZmZlcik7CiAJZm9yIChpID0gMDsgaSA8IG5z dWJ4aWRzOyBpKyspCi0JCVRyYW5zYWN0aW9uSWRTZXRDb21taXRUcyhzdWJ4aWRzW2ldLCB0cywg bm9kZWlkLCBzbG90bm8pOworCQlUcmFuc2FjdGlvbklkU2V0Q29tbWl0VHMoc3VieGlkc1tpXSwg dHMsIG5vZGVpZCwgYnVmZmVyKTsKIAotCUNvbW1pdFRzQ3RsLT5zaGFyZWQtPnBhZ2VfZGlydHlb c2xvdG5vXSA9IHRydWU7CisJTWFya0J1ZmZlckRpcnR5KGJ1ZmZlcik7CiAKLQlMV0xvY2tSZWxl YXNlKENvbW1pdFRzU0xSVUxvY2spOworCVVubG9ja1JlbGVhc2VCdWZmZXIoYnVmZmVyKTsKIH0K IAogLyoKICAqIFNldHMgdGhlIGNvbW1pdCB0aW1lc3RhbXAgb2YgYSBzaW5nbGUgdHJhbnNhY3Rp b24uCi0gKgotICogTXVzdCBiZSBjYWxsZWQgd2l0aCBDb21taXRUc1NMUlVMb2NrIGhlbGQKICAq Lwogc3RhdGljIHZvaWQKIFRyYW5zYWN0aW9uSWRTZXRDb21taXRUcyhUcmFuc2FjdGlvbklkIHhp ZCwgVGltZXN0YW1wVHogdHMsCi0JCQkJCQkgUmVwT3JpZ2luSWQgbm9kZWlkLCBpbnQgc2xvdG5v KQorCQkJCQkJIFJlcE9yaWdpbklkIG5vZGVpZCwgQnVmZmVyIGJ1ZmZlcikKIHsKIAlpbnQJCQll bnRyeW5vID0gVHJhbnNhY3Rpb25JZFRvQ1RzRW50cnkoeGlkKTsKKwlpbnQgCQlwYWdlbm8gID0g VHJhbnNhY3Rpb25JZFRvQ1RzUGFnZSh4aWQpOworCQogCUNvbW1pdFRpbWVzdGFtcEVudHJ5IGVu dHJ5OwogCiAJQXNzZXJ0KFRyYW5zYWN0aW9uSWRJc05vcm1hbCh4aWQpKTsKQEAgLTI1Miw5ICsy NTEsMjAgQEAgVHJhbnNhY3Rpb25JZFNldENvbW1pdFRzKFRyYW5zYWN0aW9uSWQgeGlkLCBUaW1l c3RhbXBUeiB0cywKIAllbnRyeS50aW1lID0gdHM7CiAJZW50cnkubm9kZWlkID0gbm9kZWlkOwog Ci0JbWVtY3B5KENvbW1pdFRzQ3RsLT5zaGFyZWQtPnBhZ2VfYnVmZmVyW3Nsb3Rub10gKworCUFz c2VydCh4aWQgPT0gcGFnZW5vICogQ09NTUlUX1RTX1hBQ1RTX1BFUl9QQUdFICsgZW50cnlubyk7 CisKKwkvKiBuYXR1cmFsIGFsaWdubWVudCBhc3NlcnQgKi8gCisJQXNzZXJ0KChpbnQpIChCdWZm ZXJHZXRQYWdlKGJ1ZmZlcikgKworCQkgICAgQ1RQYWdlSGVhZGVyT2Zmc2V0ICsKKwkJICAgIFNp emVPZkNvbW1pdFRpbWVzdGFtcEVudHJ5ICogZW50cnlubykgJQorCQkJU2l6ZU9mQ29tbWl0VGlt ZXN0YW1wRW50cnkgPT0gMCk7CisKKwltZW1jcHkoQnVmZmVyR2V0UGFnZShidWZmZXIpICsKKwkJ ICAgQ1RQYWdlSGVhZGVyT2Zmc2V0ICsKIAkJICAgU2l6ZU9mQ29tbWl0VGltZXN0YW1wRW50cnkg KiBlbnRyeW5vLAogCQkgICAmZW50cnksIFNpemVPZkNvbW1pdFRpbWVzdGFtcEVudHJ5KTsKKwor CVBhZ2VTZXRDaGVja3N1bUlucGxhY2UoQnVmZmVyR2V0UGFnZShidWZmZXIpLCBwYWdlbm8pOwog fQogCiAvKgpAQCAtMjcxLDEwICsyODEsMTAgQEAgVHJhbnNhY3Rpb25JZEdldENvbW1pdFRzRGF0 YShUcmFuc2FjdGlvbklkIHhpZCwgVGltZXN0YW1wVHogKnRzLAogewogCWludAkJCXBhZ2VubyA9 IFRyYW5zYWN0aW9uSWRUb0NUc1BhZ2UoeGlkKTsKIAlpbnQJCQllbnRyeW5vID0gVHJhbnNhY3Rp b25JZFRvQ1RzRW50cnkoeGlkKTsKLQlpbnQJCQlzbG90bm87CiAJQ29tbWl0VGltZXN0YW1wRW50 cnkgZW50cnk7CiAJVHJhbnNhY3Rpb25JZCBvbGRlc3RDb21taXRUc1hpZDsKIAlUcmFuc2FjdGlv bklkIG5ld2VzdENvbW1pdFRzWGlkOworCUJ1ZmZlcgkJYnVmZmVyOwogCiAJaWYgKCFUcmFuc2Fj dGlvbklkSXNWYWxpZCh4aWQpKQogCQllcmVwb3J0KEVSUk9SLApAQCAtMzI4LDEwICszMzgsMTIg QEAgVHJhbnNhY3Rpb25JZEdldENvbW1pdFRzRGF0YShUcmFuc2FjdGlvbklkIHhpZCwgVGltZXN0 YW1wVHogKnRzLAogCQlyZXR1cm4gZmFsc2U7CiAJfQogCi0JLyogbG9jayBpcyBhY3F1aXJlZCBi eSBTaW1wbGVMcnVSZWFkUGFnZV9SZWFkT25seSAqLwotCXNsb3RubyA9IFNpbXBsZUxydVJlYWRQ YWdlX1JlYWRPbmx5KENvbW1pdFRzQ3RsLCBwYWdlbm8sIHhpZCk7CisJYnVmZmVyID0gUmVhZFNs cnVCdWZmZXIoU0xSVV9DT01NSVRfVFNfSUQsIHBhZ2Vubyk7CisJTG9ja0J1ZmZlcihidWZmZXIs IEJVRkZFUl9MT0NLX1NIQVJFKTsKKwogCW1lbWNweSgmZW50cnksCi0JCSAgIENvbW1pdFRzQ3Rs LT5zaGFyZWQtPnBhZ2VfYnVmZmVyW3Nsb3Rub10gKworCQkgICBCdWZmZXJHZXRQYWdlKGJ1ZmZl cikgKworCQkgICBDVFBhZ2VIZWFkZXJPZmZzZXQgKyAKIAkJICAgU2l6ZU9mQ29tbWl0VGltZXN0 YW1wRW50cnkgKiBlbnRyeW5vLAogCQkgICBTaXplT2ZDb21taXRUaW1lc3RhbXBFbnRyeSk7CiAK QEAgLTMzOSw3ICszNTEsNyBAQCBUcmFuc2FjdGlvbklkR2V0Q29tbWl0VHNEYXRhKFRyYW5zYWN0 aW9uSWQgeGlkLCBUaW1lc3RhbXBUeiAqdHMsCiAJaWYgKG5vZGVpZCkKIAkJKm5vZGVpZCA9IGVu dHJ5Lm5vZGVpZDsKIAotCUxXTG9ja1JlbGVhc2UoQ29tbWl0VHNTTFJVTG9jayk7CisJVW5sb2Nr UmVsZWFzZUJ1ZmZlcihidWZmZXIpOwogCXJldHVybiAqdHMgIT0gMDsKIH0KIApAQCAtNTA4LDI3 ICs1MjAsMTMgQEAgcGdfeGFjdF9jb21taXRfdGltZXN0YW1wX29yaWdpbihQR19GVU5DVElPTl9B UkdTKQogCVBHX1JFVFVSTl9EQVRVTShIZWFwVHVwbGVHZXREYXR1bShodHVwKSk7CiB9CiAKLS8q Ci0gKiBOdW1iZXIgb2Ygc2hhcmVkIENvbW1pdFRTIGJ1ZmZlcnMuCi0gKgotICogV2UgdXNlIGEg dmVyeSBzaW1pbGFyIGxvZ2ljIGFzIGZvciB0aGUgbnVtYmVyIG9mIENMT0cgYnVmZmVycyAoZXhj ZXB0IHdlCi0gKiBzY2FsZSB1cCB0d2ljZSBhcyBmYXN0IHdpdGggc2hhcmVkIGJ1ZmZlcnMsIGFu ZCB0aGUgbWF4aW11bSBpcyB0d2ljZSBhcwotICogaGlnaCk7IHNlZSBjb21tZW50cyBpbiBDTE9H U2htZW1CdWZmZXJzLgotICovCi1TaXplCi1Db21taXRUc1NobWVtQnVmZmVycyh2b2lkKQotewot CXJldHVybiBNaW4oMjU2LCBNYXgoNCwgTkJ1ZmZlcnMgLyAyNTYpKTsKLX0KLQogLyoKICAqIFNo YXJlZCBtZW1vcnkgc2l6aW5nIGZvciBDb21taXRUcwogICovCiBTaXplCiBDb21taXRUc1NobWVt U2l6ZSh2b2lkKQogewotCXJldHVybiBTaW1wbGVMcnVTaG1lbVNpemUoQ29tbWl0VHNTaG1lbUJ1 ZmZlcnMoKSwgMCkgKwotCQlzaXplb2YoQ29tbWl0VGltZXN0YW1wU2hhcmVkKTsKKwlyZXR1cm4g c2l6ZW9mKENvbW1pdFRpbWVzdGFtcFNoYXJlZCk7CiB9CiAKIC8qCkBAIC01NDAsMTIgKzUzOCw3 IEBAIENvbW1pdFRzU2htZW1Jbml0KHZvaWQpCiB7CiAJYm9vbAkJZm91bmQ7CiAKLQlDb21taXRU c0N0bC0+UGFnZVByZWNlZGVzID0gQ29tbWl0VHNQYWdlUHJlY2VkZXM7Ci0JU2ltcGxlTHJ1SW5p dChDb21taXRUc0N0bCwgIkNvbW1pdFRzIiwgQ29tbWl0VHNTaG1lbUJ1ZmZlcnMoKSwgMCwKLQkJ CQkgIENvbW1pdFRzU0xSVUxvY2ssICJwZ19jb21taXRfdHMiLAotCQkJCSAgTFdUUkFOQ0hFX0NP TU1JVFRTX0JVRkZFUiwKLQkJCQkgIFNZTkNfSEFORExFUl9DT01NSVRfVFMpOwotCVNscnVQYWdl UHJlY2VkZXNVbml0VGVzdHMoQ29tbWl0VHNDdGwsIENPTU1JVF9UU19YQUNUU19QRVJfUEFHRSk7 CisJU2xydVBhZ2VQcmVjZWRlc1VuaXRUZXN0cyhDb21taXRUc1BhZ2VQcmVjZWRlcywgQ09NTUlU X1RTX1hBQ1RTX1BFUl9QQUdFKTsKIAogCWNvbW1pdFRzU2hhcmVkID0gU2htZW1Jbml0U3RydWN0 KCJDb21taXRUcyBzaGFyZWQiLAogCQkJCQkJCQkJIHNpemVvZihDb21taXRUaW1lc3RhbXBTaGFy ZWQpLApAQCAtNTg5LDE3ICs1ODIsMjQgQEAgQm9vdFN0cmFwQ29tbWl0VHModm9pZCkKICAqCiAg KiBDb250cm9sIGxvY2sgbXVzdCBiZSBoZWxkIGF0IGVudHJ5LCBhbmQgd2lsbCBiZSBoZWxkIGF0 IGV4aXQuCiAgKi8KLXN0YXRpYyBpbnQKK3N0YXRpYyBCdWZmZXIKIFplcm9Db21taXRUc1BhZ2Uo aW50IHBhZ2VubywgYm9vbCB3cml0ZVhsb2cpCiB7Ci0JaW50CQkJc2xvdG5vOworCUJ1ZmZlcgkJ YnVmZmVyOworCVBhZ2UgCQlwYWdlOworCVhMb2dSZWNQdHIgIGxzbjsKIAotCXNsb3RubyA9IFNp bXBsZUxydVplcm9QYWdlKENvbW1pdFRzQ3RsLCBwYWdlbm8pOworCWJ1ZmZlciA9IFplcm9TbHJ1 QnVmZmVyKFNMUlVfQ09NTUlUX1RTX0lELCBwYWdlbm8pOworCU1hcmtCdWZmZXJEaXJ0eShidWZm ZXIpOwogCiAJaWYgKHdyaXRlWGxvZykKLQkJV3JpdGVaZXJvUGFnZVhsb2dSZWMocGFnZW5vKTsK Kwl7CisJCWxzbiA9IFdyaXRlWmVyb1BhZ2VYbG9nUmVjKHBhZ2Vubyk7CisJCXBhZ2UgPSBCdWZm ZXJHZXRQYWdlKGJ1ZmZlcik7CisJCVBhZ2VTZXRIZWFkZXJEYXRhTm9uUmVsKHBhZ2UsIHBhZ2Vu bywgbHNuLCBCTENLU1osIFBHX01FVEFQQUdFX0xBWU9VVF9WRVJTSU9OKTsKKwl9CiAKLQlyZXR1 cm4gc2xvdG5vOworCXJldHVybiBidWZmZXI7CiB9CiAKIC8qCkBAIC02OTcsMTMgKzY5Nyw2IEBA IEFjdGl2YXRlQ29tbWl0VHModm9pZCkKIAl4aWQgPSBYaWRGcm9tRnVsbFRyYW5zYWN0aW9uSWQo U2htZW1WYXJpYWJsZUNhY2hlLT5uZXh0WGlkKTsKIAlwYWdlbm8gPSBUcmFuc2FjdGlvbklkVG9D VHNQYWdlKHhpZCk7CiAKLQkvKgotCSAqIFJlLUluaXRpYWxpemUgb3VyIGlkZWEgb2YgdGhlIGxh dGVzdCBwYWdlIG51bWJlci4KLQkgKi8KLQlMV0xvY2tBY3F1aXJlKENvbW1pdFRzU0xSVUxvY2ss IExXX0VYQ0xVU0lWRSk7Ci0JQ29tbWl0VHNDdGwtPnNoYXJlZC0+bGF0ZXN0X3BhZ2VfbnVtYmVy ID0gcGFnZW5vOwotCUxXTG9ja1JlbGVhc2UoQ29tbWl0VHNTTFJVTG9jayk7Ci0KIAkvKgogCSAq IElmIENvbW1pdFRzIGlzIGVuYWJsZWQsIGJ1dCBpdCB3YXNuJ3QgaW4gdGhlIHByZXZpb3VzIHNl cnZlciBydW4sIHdlCiAJICogbmVlZCB0byBzZXQgdGhlIG9sZGVzdCBhbmQgbmV3ZXN0IHZhbHVl cyB0byB0aGUgbmV4dCBYaWQ7IHRoYXQgd2F5LCB3ZQpAQCAtNzI2LDE1ICs3MTksMTQgQEAgQWN0 aXZhdGVDb21taXRUcyh2b2lkKQogCUxXTG9ja1JlbGVhc2UoQ29tbWl0VHNMb2NrKTsKIAogCS8q IENyZWF0ZSB0aGUgY3VycmVudCBzZWdtZW50IGZpbGUsIGlmIG5lY2Vzc2FyeSAqLwotCWlmICgh U2ltcGxlTHJ1RG9lc1BoeXNpY2FsUGFnZUV4aXN0KENvbW1pdFRzQ3RsLCBwYWdlbm8pKQorCWlm ICghU2ltcGxlTHJ1RG9lc1BoeXNpY2FsUGFnZUV4aXN0KFNMUlVfQ09NTUlUX1RTX0lELCBwYWdl bm8pKQogCXsKLQkJaW50CQkJc2xvdG5vOworCQlCdWZmZXIJCWJ1ZmZlcjsKIAotCQlMV0xvY2tB Y3F1aXJlKENvbW1pdFRzU0xSVUxvY2ssIExXX0VYQ0xVU0lWRSk7Ci0JCXNsb3RubyA9IFplcm9D b21taXRUc1BhZ2UocGFnZW5vLCBmYWxzZSk7Ci0JCVNpbXBsZUxydVdyaXRlUGFnZShDb21taXRU c0N0bCwgc2xvdG5vKTsKLQkJQXNzZXJ0KCFDb21taXRUc0N0bC0+c2hhcmVkLT5wYWdlX2RpcnR5 W3Nsb3Rub10pOwotCQlMV0xvY2tSZWxlYXNlKENvbW1pdFRzU0xSVUxvY2spOworCQlidWZmZXIg PSBaZXJvU2xydUJ1ZmZlcihTTFJVX0NPTU1JVF9UU19JRCwgcGFnZW5vKTsKKwkJTWFya0J1ZmZl ckRpcnR5KGJ1ZmZlcik7CisJCUZsdXNoT25lQnVmZmVyKGJ1ZmZlcik7CisJCVVubG9ja1JlbGVh c2VCdWZmZXIoYnVmZmVyKTsKIAl9CiAKIAkvKiBDaGFuZ2UgdGhlIGFjdGl2YXRpb24gc3RhdHVz IGluIHNoYXJlZCBtZW1vcnkuICovCkBAIC03ODMsMjMgKzc3NSw5IEBAIERlYWN0aXZhdGVDb21t aXRUcyh2b2lkKQogCSAqIGJlIG92ZXJ3cml0dGVuIGFueXdheSB3aGVuIHdlIHdyYXAgYXJvdW5k LCBidXQgaXQgc2VlbXMgYmV0dGVyIHRvIGJlCiAJICogdGlkeS4pCiAJICovCi0JTFdMb2NrQWNx dWlyZShDb21taXRUc1NMUlVMb2NrLCBMV19FWENMVVNJVkUpOwotCSh2b2lkKSBTbHJ1U2NhbkRp cmVjdG9yeShDb21taXRUc0N0bCwgU2xydVNjYW5EaXJDYkRlbGV0ZUFsbCwgTlVMTCk7Ci0JTFdM b2NrUmVsZWFzZShDb21taXRUc1NMUlVMb2NrKTsKLX0KLQotLyoKLSAqIFBlcmZvcm0gYSBjaGVj a3BvaW50IC0tLSBlaXRoZXIgZHVyaW5nIHNodXRkb3duLCBvciBvbi10aGUtZmx5Ci0gKi8KLXZv aWQKLUNoZWNrUG9pbnRDb21taXRUcyh2b2lkKQotewotCS8qCi0JICogV3JpdGUgZGlydHkgQ29t bWl0VHMgcGFnZXMgdG8gZGlzay4gIFRoaXMgbWF5IHJlc3VsdCBpbiBzeW5jIHJlcXVlc3RzCi0J ICogcXVldWVkIGZvciBsYXRlciBoYW5kbGluZyBieSBQcm9jZXNzU3luY1JlcXVlc3RzKCksIGFz IHBhcnQgb2YgdGhlCi0JICogY2hlY2twb2ludC4KLQkgKi8KLQlTaW1wbGVMcnVXcml0ZUFsbChD b21taXRUc0N0bCwgdHJ1ZSk7CisJKHZvaWQpIFNscnVTY2FuRGlyZWN0b3J5KFNMUlVfQ09NTUlU X1RTX0lELAorCQkJCQkJCSBDb21taXRUc1BhZ2VQcmVjZWRlcywKKwkJCQkJCQkgU2xydVNjYW5E aXJDYkRlbGV0ZUFsbCwgTlVMTCk7CiB9CiAKIC8qCkBAIC04MzcsMTIgKzgxNSw4IEBAIEV4dGVu ZENvbW1pdFRzKFRyYW5zYWN0aW9uSWQgbmV3ZXN0WGFjdCkKIAogCXBhZ2VubyA9IFRyYW5zYWN0 aW9uSWRUb0NUc1BhZ2UobmV3ZXN0WGFjdCk7CiAKLQlMV0xvY2tBY3F1aXJlKENvbW1pdFRzU0xS VUxvY2ssIExXX0VYQ0xVU0lWRSk7Ci0KIAkvKiBaZXJvIHRoZSBwYWdlIGFuZCBtYWtlIGFuIFhM T0cgZW50cnkgYWJvdXQgaXQgKi8KLQlaZXJvQ29tbWl0VHNQYWdlKHBhZ2VubywgIUluUmVjb3Zl cnkpOwotCi0JTFdMb2NrUmVsZWFzZShDb21taXRUc1NMUlVMb2NrKTsKKwlVbmxvY2tSZWxlYXNl QnVmZmVyKFplcm9Db21taXRUc1BhZ2UocGFnZW5vLCAhSW5SZWNvdmVyeSkpOwogfQogCiAvKgpA QCAtODYzLDcgKzgzNyw5IEBAIFRydW5jYXRlQ29tbWl0VHMoVHJhbnNhY3Rpb25JZCBvbGRlc3RY YWN0KQogCWN1dG9mZlBhZ2UgPSBUcmFuc2FjdGlvbklkVG9DVHNQYWdlKG9sZGVzdFhhY3QpOwog CiAJLyogQ2hlY2sgdG8gc2VlIGlmIHRoZXJlJ3MgYW55IGZpbGVzIHRoYXQgY291bGQgYmUgcmVt b3ZlZCAqLwotCWlmICghU2xydVNjYW5EaXJlY3RvcnkoQ29tbWl0VHNDdGwsIFNscnVTY2FuRGly Q2JSZXBvcnRQcmVzZW5jZSwKKwlpZiAoIVNscnVTY2FuRGlyZWN0b3J5KFNMUlVfQ09NTUlUX1RT X0lELAorCQkJCQkJICAgQ29tbWl0VHNQYWdlUHJlY2VkZXMsCisJCQkJCQkgICBTbHJ1U2NhbkRp ckNiUmVwb3J0UHJlc2VuY2UsCiAJCQkJCQkgICAmY3V0b2ZmUGFnZSkpCiAJCXJldHVybjsJCQkJ CS8qIG5vdGhpbmcgdG8gcmVtb3ZlICovCiAKQEAgLTg3MSw3ICs4NDcsNyBAQCBUcnVuY2F0ZUNv bW1pdFRzKFRyYW5zYWN0aW9uSWQgb2xkZXN0WGFjdCkKIAlXcml0ZVRydW5jYXRlWGxvZ1JlYyhj dXRvZmZQYWdlLCBvbGRlc3RYYWN0KTsKIAogCS8qIE5vdyB3ZSBjYW4gcmVtb3ZlIHRoZSBvbGQg Q29tbWl0VHMgc2VnbWVudChzKSAqLwotCVNpbXBsZUxydVRydW5jYXRlKENvbW1pdFRzQ3RsLCBj dXRvZmZQYWdlKTsKKwlTaW1wbGVMcnVUcnVuY2F0ZShTTFJVX0NPTU1JVF9UU19JRCwgQ29tbWl0 VHNQYWdlUHJlY2VkZXMsIGN1dG9mZlBhZ2UpOwogfQogCiAvKgpAQCAtOTU3LDEyICs5MzMsMTYg QEAgQ29tbWl0VHNQYWdlUHJlY2VkZXMoaW50IHBhZ2UxLCBpbnQgcGFnZTIpCiAvKgogICogV3Jp dGUgYSBaRVJPUEFHRSB4bG9nIHJlY29yZAogICovCi1zdGF0aWMgdm9pZAorc3RhdGljIFhMb2dS ZWNQdHIgCiBXcml0ZVplcm9QYWdlWGxvZ1JlYyhpbnQgcGFnZW5vKQogeworCVhMb2dSZWNQdHIg bHNuOworCQogCVhMb2dCZWdpbkluc2VydCgpOwogCVhMb2dSZWdpc3RlckRhdGEoKGNoYXIgKikg KCZwYWdlbm8pLCBzaXplb2YoaW50KSk7Ci0JKHZvaWQpIFhMb2dJbnNlcnQoUk1fQ09NTUlUX1RT X0lELCBDT01NSVRfVFNfWkVST1BBR0UpOworCWxzbiA9IFhMb2dJbnNlcnQoUk1fQ09NTUlUX1RT X0lELCBDT01NSVRfVFNfWkVST1BBR0UpOworCQorCXJldHVybiBsc247CiB9CiAKIC8qCkBAIC05 OTUsMTcgKzk3NSwxNCBAQCBjb21taXRfdHNfcmVkbyhYTG9nUmVhZGVyU3RhdGUgKnJlY29yZCkK IAlpZiAoaW5mbyA9PSBDT01NSVRfVFNfWkVST1BBR0UpCiAJewogCQlpbnQJCQlwYWdlbm87Ci0J CWludAkJCXNsb3RubzsKKwkJQnVmZmVyCQlidWZmZXI7CiAKIAkJbWVtY3B5KCZwYWdlbm8sIFhM b2dSZWNHZXREYXRhKHJlY29yZCksIHNpemVvZihpbnQpKTsKIAotCQlMV0xvY2tBY3F1aXJlKENv bW1pdFRzU0xSVUxvY2ssIExXX0VYQ0xVU0lWRSk7Ci0KLQkJc2xvdG5vID0gWmVyb0NvbW1pdFRz UGFnZShwYWdlbm8sIGZhbHNlKTsKLQkJU2ltcGxlTHJ1V3JpdGVQYWdlKENvbW1pdFRzQ3RsLCBz bG90bm8pOwotCQlBc3NlcnQoIUNvbW1pdFRzQ3RsLT5zaGFyZWQtPnBhZ2VfZGlydHlbc2xvdG5v XSk7Ci0KLQkJTFdMb2NrUmVsZWFzZShDb21taXRUc1NMUlVMb2NrKTsKKwkJYnVmZmVyID0gWmVy b1NscnVCdWZmZXIoU0xSVV9DT01NSVRfVFNfSUQsIHBhZ2Vubyk7CisJCU1hcmtCdWZmZXJEaXJ0 eShidWZmZXIpOworCQlGbHVzaE9uZUJ1ZmZlcihidWZmZXIpOworCQlVbmxvY2tSZWxlYXNlQnVm ZmVyKGJ1ZmZlcik7CiAJfQogCWVsc2UgaWYgKGluZm8gPT0gQ09NTUlUX1RTX1RSVU5DQVRFKQog CXsKQEAgLTEwMTMsMjMgKzk5MCw4IEBAIGNvbW1pdF90c19yZWRvKFhMb2dSZWFkZXJTdGF0ZSAq cmVjb3JkKQogCiAJCUFkdmFuY2VPbGRlc3RDb21taXRUc1hpZCh0cnVuYy0+b2xkZXN0WGlkKTsK IAotCQkvKgotCQkgKiBEdXJpbmcgWExPRyByZXBsYXksIGxhdGVzdF9wYWdlX251bWJlciBpc24n dCBzZXQgdXAgeWV0OyBpbnNlcnQgYQotCQkgKiBzdWl0YWJsZSB2YWx1ZSB0byBieXBhc3MgdGhl IHNhbml0eSB0ZXN0IGluIFNpbXBsZUxydVRydW5jYXRlLgotCQkgKi8KLQkJQ29tbWl0VHNDdGwt PnNoYXJlZC0+bGF0ZXN0X3BhZ2VfbnVtYmVyID0gdHJ1bmMtPnBhZ2VubzsKLQotCQlTaW1wbGVM cnVUcnVuY2F0ZShDb21taXRUc0N0bCwgdHJ1bmMtPnBhZ2Vubyk7CisJCVNpbXBsZUxydVRydW5j YXRlKFNMUlVfQ09NTUlUX1RTX0lELCBDb21taXRUc1BhZ2VQcmVjZWRlcywgdHJ1bmMtPnBhZ2Vu byk7CiAJfQogCWVsc2UKIAkJZWxvZyhQQU5JQywgImNvbW1pdF90c19yZWRvOiB1bmtub3duIG9w IGNvZGUgJXUiLCBpbmZvKTsKIH0KLQotLyoKLSAqIEVudHJ5cG9pbnQgZm9yIHN5bmMuYyB0byBz eW5jIGNvbW1pdF90cyBmaWxlcy4KLSAqLwotaW50Ci1jb21taXR0c3N5bmNmaWxldGFnKGNvbnN0 IEZpbGVUYWcgKmZ0YWcsIGNoYXIgKnBhdGgpCi17Ci0JcmV0dXJuIFNscnVTeW5jRmlsZVRhZyhD b21taXRUc0N0bCwgZnRhZywgcGF0aCk7Ci19CmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9hY2Nl c3MvdHJhbnNhbS9tdWx0aXhhY3QuYyBiL3NyYy9iYWNrZW5kL2FjY2Vzcy90cmFuc2FtL211bHRp eGFjdC5jCmluZGV4IDhmN2QxMjk1MGU1Li4wOTJiNjA1ZTM5ZiAxMDA2NDQKLS0tIGEvc3JjL2Jh Y2tlbmQvYWNjZXNzL3RyYW5zYW0vbXVsdGl4YWN0LmMKKysrIGIvc3JjL2JhY2tlbmQvYWNjZXNz L3RyYW5zYW0vbXVsdGl4YWN0LmMKQEAgLTEwNiw3ICsxMDYsMTQgQEAKICAqLwogCiAvKiBXZSBu ZWVkIGZvdXIgYnl0ZXMgcGVyIG9mZnNldCAqLwotI2RlZmluZSBNVUxUSVhBQ1RfT0ZGU0VUU19Q RVJfUEFHRSAoQkxDS1NaIC8gc2l6ZW9mKE11bHRpWGFjdE9mZnNldCkpCisjZGVmaW5lIE1VTFRJ WEFDVF9PRkZTRVRTX1BFUl9QQUdFICgoQkxDS1NaIC0gU2l6ZU9mUGFnZUhlYWRlckRhdGEpLyBz aXplb2YoTXVsdGlYYWN0T2Zmc2V0KSkKKworLyogYnl0ZSBvZmZzZXQgd2hlcmUgbXggb2Zmc2V0 IGVudHJpZXMgYmVnaW4gYWZ0ZXIgcGFnZSBoZWFkZXIgKi8KKyNkZWZpbmUgTVhPZmZzZXRQYWdl SGVhZGVyT2Zmc2V0IChpbnQpIFwKKwkoKFNpemVPZlBhZ2VIZWFkZXJEYXRhICUgc2l6ZW9mKE11 bHRpWGFjdE9mZnNldCkgPT0gMCA/IFwKKwkoU2l6ZU9mUGFnZUhlYWRlckRhdGEgLyBzaXplb2Yo TXVsdGlYYWN0T2Zmc2V0KSkgOiBcCisJKFNpemVPZlBhZ2VIZWFkZXJEYXRhIC8gc2l6ZW9mKE11 bHRpWGFjdE9mZnNldCkpICsgMSkgKiBcCisgCXNpemVvZihNdWx0aVhhY3RPZmZzZXQpKQogCiAj ZGVmaW5lIE11bHRpWGFjdElkVG9PZmZzZXRQYWdlKHhpZCkgXAogCSgoeGlkKSAvIChNdWx0aVhh Y3RPZmZzZXQpIE1VTFRJWEFDVF9PRkZTRVRTX1BFUl9QQUdFKQpAQCAtMTM4LDcgKzE0NSw3IEBA CiAvKiBzaXplIGluIGJ5dGVzIG9mIGEgY29tcGxldGUgZ3JvdXAgKi8KICNkZWZpbmUgTVVMVElY QUNUX01FTUJFUkdST1VQX1NJWkUgXAogCShzaXplb2YoVHJhbnNhY3Rpb25JZCkgKiBNVUxUSVhB Q1RfTUVNQkVSU19QRVJfTUVNQkVSR1JPVVAgKyBNVUxUSVhBQ1RfRkxBR0JZVEVTX1BFUl9HUk9V UCkKLSNkZWZpbmUgTVVMVElYQUNUX01FTUJFUkdST1VQU19QRVJfUEFHRSAoQkxDS1NaIC8gTVVM VElYQUNUX01FTUJFUkdST1VQX1NJWkUpCisjZGVmaW5lIE1VTFRJWEFDVF9NRU1CRVJHUk9VUFNf UEVSX1BBR0UgKChCTENLU1ogLSBTaXplT2ZQYWdlSGVhZGVyRGF0YSkvIE1VTFRJWEFDVF9NRU1C RVJHUk9VUF9TSVpFKQogI2RlZmluZSBNVUxUSVhBQ1RfTUVNQkVSU19QRVJfUEFHRQlcCiAJKE1V TFRJWEFDVF9NRU1CRVJHUk9VUFNfUEVSX1BBR0UgKiBNVUxUSVhBQ1RfTUVNQkVSU19QRVJfTUVN QkVSR1JPVVApCiAKQEAgLTE1NSwxNSArMTYyLDI0IEBACiAjZGVmaW5lIE1BWF9NRU1CRVJTX0lO X0xBU1RfTUVNQkVSU19QQUdFIFwKIAkJKCh1aW50MzIpICgoMHhGRkZGRkZGRiAlIE1VTFRJWEFD VF9NRU1CRVJTX1BFUl9QQUdFKSArIDEpKQogCisvKiBieXRlIG9mZnNldCBhdCB3aGljaCBtdWx0 aXhhY3QgbWVtYmVyIGVudHJpZXMgc3RhcnQgYWZ0ZXIgdGhlIHBhZ2UgaGVhZGVyICovCisjZGVm aW5lIE1YTWVtYmVyUGFnZUhlYWRlck9mZnNldCAoaW50KSBcIAorCSgoU2l6ZU9mUGFnZUhlYWRl ckRhdGEgJSBNVUxUSVhBQ1RfTUVNQkVSR1JPVVBfU0laRSA9PSAwID8gXAorCShTaXplT2ZQYWdl SGVhZGVyRGF0YSAvIE1VTFRJWEFDVF9NRU1CRVJHUk9VUF9TSVpFKSA6IFwKKwkoU2l6ZU9mUGFn ZUhlYWRlckRhdGEgLyBNVUxUSVhBQ1RfTUVNQkVSR1JPVVBfU0laRSkgKyAxKSAqIFwKKwlNVUxU SVhBQ1RfTUVNQkVSR1JPVVBfU0laRSkKKwogLyogcGFnZSBpbiB3aGljaCBhIG1lbWJlciBpcyB0 byBiZSBmb3VuZCAqLwogI2RlZmluZSBNWE9mZnNldFRvTWVtYmVyUGFnZSh4aWQpICgoeGlkKSAv IChUcmFuc2FjdGlvbklkKSBNVUxUSVhBQ1RfTUVNQkVSU19QRVJfUEFHRSkKICNkZWZpbmUgTVhP ZmZzZXRUb01lbWJlclNlZ21lbnQoeGlkKSAoTVhPZmZzZXRUb01lbWJlclBhZ2UoeGlkKSAvIFNM UlVfUEFHRVNfUEVSX1NFR01FTlQpCiAKIC8qIExvY2F0aW9uIChieXRlIG9mZnNldCB3aXRoaW4g cGFnZSkgb2YgZmxhZyB3b3JkIGZvciBhIGdpdmVuIG1lbWJlciAqLwogI2RlZmluZSBNWE9mZnNl dFRvRmxhZ3NPZmZzZXQoeGlkKSBcCisJTVhNZW1iZXJQYWdlSGVhZGVyT2Zmc2V0ICsgXAogCSgo KCh4aWQpIC8gKFRyYW5zYWN0aW9uSWQpIE1VTFRJWEFDVF9NRU1CRVJTX1BFUl9NRU1CRVJHUk9V UCkgJSBcCi0JICAoVHJhbnNhY3Rpb25JZCkgTVVMVElYQUNUX01FTUJFUkdST1VQU19QRVJfUEFH RSkgKiBcCi0JIChUcmFuc2FjdGlvbklkKSBNVUxUSVhBQ1RfTUVNQkVSR1JPVVBfU0laRSkKKwko VHJhbnNhY3Rpb25JZCkgTVVMVElYQUNUX01FTUJFUkdST1VQU19QRVJfUEFHRSkgKiBcCisJKFRy YW5zYWN0aW9uSWQpIE1VTFRJWEFDVF9NRU1CRVJHUk9VUF9TSVpFKSAKKwkgCiAjZGVmaW5lIE1Y T2Zmc2V0VG9GbGFnc0JpdFNoaWZ0KHhpZCkgXAogCSgoKHhpZCkgJSAoVHJhbnNhY3Rpb25JZCkg TVVMVElYQUNUX01FTUJFUlNfUEVSX01FTUJFUkdST1VQKSAqIFwKIAkgTVhBQ1RfTUVNQkVSX0JJ VFNfUEVSX1hBQ1QpCkBAIC0xODEsMTUgKzE5Nyw2IEBACiAjZGVmaW5lIFByZXZpb3VzTXVsdGlY YWN0SWQoeGlkKSBcCiAJKCh4aWQpID09IEZpcnN0TXVsdGlYYWN0SWQgPyBNYXhNdWx0aVhhY3RJ ZCA6ICh4aWQpIC0gMSkKIAotLyoKLSAqIExpbmtzIHRvIHNoYXJlZC1tZW1vcnkgZGF0YSBzdHJ1 Y3R1cmVzIGZvciBNdWx0aVhhY3QgY29udHJvbAotICovCi1zdGF0aWMgU2xydUN0bERhdGEgTXVs dGlYYWN0T2Zmc2V0Q3RsRGF0YTsKLXN0YXRpYyBTbHJ1Q3RsRGF0YSBNdWx0aVhhY3RNZW1iZXJD dGxEYXRhOwotCi0jZGVmaW5lIE11bHRpWGFjdE9mZnNldEN0bAkoJk11bHRpWGFjdE9mZnNldEN0 bERhdGEpCi0jZGVmaW5lIE11bHRpWGFjdE1lbWJlckN0bAkoJk11bHRpWGFjdE1lbWJlckN0bERh dGEpCi0KIC8qCiAgKiBNdWx0aVhhY3Qgc3RhdGUgc2hhcmVkIGFjcm9zcyBhbGwgYmFja2VuZHMu ICBBbGwgdGhpcyBzdGF0ZSBpcyBwcm90ZWN0ZWQKICAqIGJ5IE11bHRpWGFjdEdlbkxvY2suICAo V2UgYWxzbyB1c2UgTXVsdGlYYWN0T2Zmc2V0U0xSVUxvY2sgYW5kCkBAIC0zNTMsMTAgKzM2MCw5 IEBAIHN0YXRpYyB2b2lkIG1YYWN0Q2FjaGVQdXQoTXVsdGlYYWN0SWQgbXVsdGksIGludCBubWVt YmVycywKIHN0YXRpYyBjaGFyICpteHN0YXR1c190b19zdHJpbmcoTXVsdGlYYWN0U3RhdHVzIHN0 YXR1cyk7CiAKIC8qIG1hbmFnZW1lbnQgb2YgU0xSVSBpbmZyYXN0cnVjdHVyZSAqLwotc3RhdGlj IGludAlaZXJvTXVsdGlYYWN0T2Zmc2V0UGFnZShpbnQgcGFnZW5vLCBib29sIHdyaXRlWGxvZyk7 Ci1zdGF0aWMgaW50CVplcm9NdWx0aVhhY3RNZW1iZXJQYWdlKGludCBwYWdlbm8sIGJvb2wgd3Jp dGVYbG9nKTsKK3N0YXRpYyBCdWZmZXIgWmVyb011bHRpWGFjdE9mZnNldFBhZ2UoaW50IHBhZ2Vu bywgYm9vbCB3cml0ZVhsb2cpOworc3RhdGljIEJ1ZmZlciBaZXJvTXVsdGlYYWN0TWVtYmVyUGFn ZShpbnQgcGFnZW5vLCBib29sIHdyaXRlWGxvZyk7CiBzdGF0aWMgYm9vbCBNdWx0aVhhY3RPZmZz ZXRQYWdlUHJlY2VkZXMoaW50IHBhZ2UxLCBpbnQgcGFnZTIpOwotc3RhdGljIGJvb2wgTXVsdGlY YWN0TWVtYmVyUGFnZVByZWNlZGVzKGludCBwYWdlMSwgaW50IHBhZ2UyKTsKIHN0YXRpYyBib29s IE11bHRpWGFjdE9mZnNldFByZWNlZGVzKE11bHRpWGFjdE9mZnNldCBvZmZzZXQxLAogCQkJCQkJ CQkJTXVsdGlYYWN0T2Zmc2V0IG9mZnNldDIpOwogc3RhdGljIHZvaWQgRXh0ZW5kTXVsdGlYYWN0 T2Zmc2V0KE11bHRpWGFjdElkIG11bHRpKTsKQEAgLTM2NSw3ICszNzEsNyBAQCBzdGF0aWMgYm9v bCBNdWx0aVhhY3RPZmZzZXRXb3VsZFdyYXAoTXVsdGlYYWN0T2Zmc2V0IGJvdW5kYXJ5LAogCQkJ CQkJCQkJIE11bHRpWGFjdE9mZnNldCBzdGFydCwgdWludDMyIGRpc3RhbmNlKTsKIHN0YXRpYyBi b29sIFNldE9mZnNldFZhY3V1bUxpbWl0KGJvb2wgaXNfc3RhcnR1cCk7CiBzdGF0aWMgYm9vbCBm aW5kX211bHRpeGFjdF9zdGFydChNdWx0aVhhY3RJZCBtdWx0aSwgTXVsdGlYYWN0T2Zmc2V0ICpy ZXN1bHQpOwotc3RhdGljIHZvaWQgV3JpdGVNWmVyb1BhZ2VYbG9nUmVjKGludCBwYWdlbm8sIHVp bnQ4IGluZm8pOworc3RhdGljIFhMb2dSZWNQdHIgV3JpdGVNWmVyb1BhZ2VYbG9nUmVjKGludCBw YWdlbm8sIHVpbnQ4IGluZm8pOwogc3RhdGljIHZvaWQgV3JpdGVNVHJ1bmNhdGVYbG9nUmVjKE9p ZCBvbGRlc3RNdWx0aURCLAogCQkJCQkJCQkgIE11bHRpWGFjdElkIHN0YXJ0VHJ1bmNPZmYsCiAJ CQkJCQkJCSAgTXVsdGlYYWN0SWQgZW5kVHJ1bmNPZmYsCkBAIC04NjUsMzQgKzg3MSwyOCBAQCBS ZWNvcmROZXdNdWx0aVhhY3QoTXVsdGlYYWN0SWQgbXVsdGksIE11bHRpWGFjdE9mZnNldCBvZmZz ZXQsCiAJaW50CQkJcGFnZW5vOwogCWludAkJCXByZXZfcGFnZW5vOwogCWludAkJCWVudHJ5bm87 Ci0JaW50CQkJc2xvdG5vOwogCU11bHRpWGFjdE9mZnNldCAqb2ZmcHRyOwogCWludAkJCWk7Ci0K LQlMV0xvY2tBY3F1aXJlKE11bHRpWGFjdE9mZnNldFNMUlVMb2NrLCBMV19FWENMVVNJVkUpOwor CUJ1ZmZlcgkJYnVmZmVyOwogCiAJcGFnZW5vID0gTXVsdGlYYWN0SWRUb09mZnNldFBhZ2UobXVs dGkpOwogCWVudHJ5bm8gPSBNdWx0aVhhY3RJZFRvT2Zmc2V0RW50cnkobXVsdGkpOwogCi0JLyoK LQkgKiBOb3RlOiB3ZSBwYXNzIHRoZSBNdWx0aVhhY3RJZCB0byBTaW1wbGVMcnVSZWFkUGFnZSBh cyB0aGUgInRyYW5zYWN0aW9uIgotCSAqIHRvIGNvbXBsYWluIGFib3V0IGlmIHRoZXJlJ3MgYW55 IEkvTyBlcnJvci4gIFRoaXMgaXMga2luZGEgYm9ndXMsIGJ1dAotCSAqIHNpbmNlIHRoZSBlcnJv cnMgd2lsbCBhbHdheXMgZ2l2ZSB0aGUgZnVsbCBwYXRobmFtZSwgaXQgc2hvdWxkIGJlIGNsZWFy Ci0JICogZW5vdWdoIHRoYXQgYSBNdWx0aVhhY3RJZCBpcyByZWFsbHkgaW52b2x2ZWQuICBQZXJo YXBzIHNvbWVkYXkgd2UnbGwKLQkgKiB0YWtlIHRoZSB0cm91YmxlIHRvIGdlbmVyYWxpemUgdGhl IHNscnUuYyBlcnJvciByZXBvcnRpbmcgY29kZS4KLQkgKi8KLQlzbG90bm8gPSBTaW1wbGVMcnVS ZWFkUGFnZShNdWx0aVhhY3RPZmZzZXRDdGwsIHBhZ2VubywgdHJ1ZSwgbXVsdGkpOwotCW9mZnB0 ciA9IChNdWx0aVhhY3RPZmZzZXQgKikgTXVsdGlYYWN0T2Zmc2V0Q3RsLT5zaGFyZWQtPnBhZ2Vf YnVmZmVyW3Nsb3Rub107CisJLyogWFhYIHNldCB1cCBlcnJvciBjb250ZXh0PyAqLworCWJ1ZmZl ciA9IFJlYWRTbHJ1QnVmZmVyKFNMUlVfTVVMVElYQUNUX09GRlNFVF9JRCwgcGFnZW5vKTsKKwlM b2NrQnVmZmVyKGJ1ZmZlciwgQlVGRkVSX0xPQ0tfRVhDTFVTSVZFKTsKKwlvZmZwdHIgPSAoTXVs dGlYYWN0T2Zmc2V0ICopIEJ1ZmZlckdldFBhZ2UoYnVmZmVyKTsKKwlvZmZwdHIgKz0gTVhPZmZz ZXRQYWdlSGVhZGVyT2Zmc2V0OwogCW9mZnB0ciArPSBlbnRyeW5vOwogCiAJKm9mZnB0ciA9IG9m ZnNldDsKKwlQYWdlU2V0Q2hlY2tzdW1JbnBsYWNlKEJ1ZmZlckdldFBhZ2UoYnVmZmVyKSwgcGFn ZW5vKTsKKwkKKwlNYXJrQnVmZmVyRGlydHkoYnVmZmVyKTsKKwkKIAotCU11bHRpWGFjdE9mZnNl dEN0bC0+c2hhcmVkLT5wYWdlX2RpcnR5W3Nsb3Rub10gPSB0cnVlOwotCi0JLyogRXhjaGFuZ2Ug b3VyIGxvY2sgKi8KLQlMV0xvY2tSZWxlYXNlKE11bHRpWGFjdE9mZnNldFNMUlVMb2NrKTsKLQot CUxXTG9ja0FjcXVpcmUoTXVsdGlYYWN0TWVtYmVyU0xSVUxvY2ssIExXX0VYQ0xVU0lWRSk7CisJ VW5sb2NrUmVsZWFzZUJ1ZmZlcihidWZmZXIpOworCWJ1ZmZlciA9IEludmFsaWRCdWZmZXI7CiAK IAlwcmV2X3BhZ2VubyA9IC0xOwogCkBAIC05MTQsMjcgKzkxNCwzMyBAQCBSZWNvcmROZXdNdWx0 aVhhY3QoTXVsdGlYYWN0SWQgbXVsdGksIE11bHRpWGFjdE9mZnNldCBvZmZzZXQsCiAKIAkJaWYg KHBhZ2VubyAhPSBwcmV2X3BhZ2VubykKIAkJewotCQkJc2xvdG5vID0gU2ltcGxlTHJ1UmVhZFBh Z2UoTXVsdGlYYWN0TWVtYmVyQ3RsLCBwYWdlbm8sIHRydWUsIG11bHRpKTsKKwkJCWlmIChCdWZm ZXJJc1ZhbGlkKGJ1ZmZlcikpCisJCQkJVW5sb2NrUmVsZWFzZUJ1ZmZlcihidWZmZXIpOworCQkJ YnVmZmVyID0gUmVhZFNscnVCdWZmZXIoU0xSVV9NVUxUSVhBQ1RfTUVNQkVSX0lELCBwYWdlbm8p OworCQkJTG9ja0J1ZmZlcihidWZmZXIsIEJVRkZFUl9MT0NLX0VYQ0xVU0lWRSk7CiAJCQlwcmV2 X3BhZ2VubyA9IHBhZ2VubzsKIAkJfQotCi0JCW1lbWJlcnB0ciA9IChUcmFuc2FjdGlvbklkICop Ci0JCQkoTXVsdGlYYWN0TWVtYmVyQ3RsLT5zaGFyZWQtPnBhZ2VfYnVmZmVyW3Nsb3Rub10gKyBt ZW1iZXJvZmYpOworCQkKKwkJLyogCisJCU5vdGU6IG1lbWJlcm9mZiBhbmQgZmxhZ3NvZmYgYXJl IGNhbGN1bGF0ZWQgdXNpbmcgbWFjcm9zIGFscmVhZHkgdGFraW5nIHBhZ2UgaGVhZGVyIGludG8g YWNjb3VudCwKKwkJc28gd2UgZG9uJ3QgaGF2ZSB0byBhY2NvdW50IGZvciBpdCBoZXJlIGxpa2Ug d2UgZG8gaW4gbXggb2Zmc2V0IAorCQkqLworCQltZW1iZXJwdHIgPSAoVHJhbnNhY3Rpb25JZCAq KSAoQnVmZmVyR2V0UGFnZShidWZmZXIpICsgbWVtYmVyb2ZmKTsKIAogCQkqbWVtYmVycHRyID0g bWVtYmVyc1tpXS54aWQ7CiAKLQkJZmxhZ3NwdHIgPSAodWludDMyICopCi0JCQkoTXVsdGlYYWN0 TWVtYmVyQ3RsLT5zaGFyZWQtPnBhZ2VfYnVmZmVyW3Nsb3Rub10gKyBmbGFnc29mZik7CisJCWZs YWdzcHRyID0gKHVpbnQzMiAqKSAoQnVmZmVyR2V0UGFnZShidWZmZXIpICsgZmxhZ3NvZmYpOwog CiAJCWZsYWdzdmFsID0gKmZsYWdzcHRyOwogCQlmbGFnc3ZhbCAmPSB+KCgoMSA8PCBNWEFDVF9N RU1CRVJfQklUU19QRVJfWEFDVCkgLSAxKSA8PCBic2hpZnQpOwogCQlmbGFnc3ZhbCB8PSAobWVt YmVyc1tpXS5zdGF0dXMgPDwgYnNoaWZ0KTsKIAkJKmZsYWdzcHRyID0gZmxhZ3N2YWw7CiAKLQkJ TXVsdGlYYWN0TWVtYmVyQ3RsLT5zaGFyZWQtPnBhZ2VfZGlydHlbc2xvdG5vXSA9IHRydWU7CisJ CU1hcmtCdWZmZXJEaXJ0eShidWZmZXIpOwogCX0KIAotCUxXTG9ja1JlbGVhc2UoTXVsdGlYYWN0 TWVtYmVyU0xSVUxvY2spOworCVBhZ2VTZXRDaGVja3N1bUlucGxhY2UoQnVmZmVyR2V0UGFnZShi dWZmZXIpLCBwYWdlbm8pOworCVVubG9ja1JlbGVhc2VCdWZmZXIoYnVmZmVyKTsKIH0KIAogLyoK QEAgLTEyMjYsNyArMTIzMiw2IEBAIEdldE11bHRpWGFjdElkTWVtYmVycyhNdWx0aVhhY3RJZCBt dWx0aSwgTXVsdGlYYWN0TWVtYmVyICoqbWVtYmVycywKIAlpbnQJCQlwYWdlbm87CiAJaW50CQkJ cHJldl9wYWdlbm87CiAJaW50CQkJZW50cnlubzsKLQlpbnQJCQlzbG90bm87CiAJTXVsdGlYYWN0 T2Zmc2V0ICpvZmZwdHI7CiAJTXVsdGlYYWN0T2Zmc2V0IG9mZnNldDsKIAlpbnQJCQlsZW5ndGg7 CkBAIC0xMjM3LDYgKzEyNDIsNyBAQCBHZXRNdWx0aVhhY3RJZE1lbWJlcnMoTXVsdGlYYWN0SWQg bXVsdGksIE11bHRpWGFjdE1lbWJlciAqKm1lbWJlcnMsCiAJTXVsdGlYYWN0SWQgdG1wTVhhY3Q7 CiAJTXVsdGlYYWN0T2Zmc2V0IG5leHRPZmZzZXQ7CiAJTXVsdGlYYWN0TWVtYmVyICpwdHI7CisJ QnVmZmVyCQlidWZmZXI7CiAKIAlkZWJ1Z19lbG9nMyhERUJVRzIsICJHZXRNZW1iZXJzOiBhc2tl ZCBmb3IgJXUiLCBtdWx0aSk7CiAKQEAgLTEzNDAsMTMgKzEzNDYsMTMgQEAgR2V0TXVsdGlYYWN0 SWRNZW1iZXJzKE11bHRpWGFjdElkIG11bHRpLCBNdWx0aVhhY3RNZW1iZXIgKiptZW1iZXJzLAog CSAqIHRpbWUgb24gZXZlcnkgbXVsdGl4YWN0IGNyZWF0aW9uLgogCSAqLwogcmV0cnk6Ci0JTFdM b2NrQWNxdWlyZShNdWx0aVhhY3RPZmZzZXRTTFJVTG9jaywgTFdfRVhDTFVTSVZFKTsKLQogCXBh Z2VubyA9IE11bHRpWGFjdElkVG9PZmZzZXRQYWdlKG11bHRpKTsKIAllbnRyeW5vID0gTXVsdGlY YWN0SWRUb09mZnNldEVudHJ5KG11bHRpKTsKIAotCXNsb3RubyA9IFNpbXBsZUxydVJlYWRQYWdl KE11bHRpWGFjdE9mZnNldEN0bCwgcGFnZW5vLCB0cnVlLCBtdWx0aSk7Ci0Jb2ZmcHRyID0gKE11 bHRpWGFjdE9mZnNldCAqKSBNdWx0aVhhY3RPZmZzZXRDdGwtPnNoYXJlZC0+cGFnZV9idWZmZXJb c2xvdG5vXTsKKwlidWZmZXIgPSBSZWFkU2xydUJ1ZmZlcihTTFJVX01VTFRJWEFDVF9PRkZTRVRf SUQsIHBhZ2Vubyk7CisJTG9ja0J1ZmZlcihidWZmZXIsIEJVRkZFUl9MT0NLX1NIQVJFKTsKKwlv ZmZwdHIgPSAoTXVsdGlYYWN0T2Zmc2V0ICopIEJ1ZmZlckdldFBhZ2UoYnVmZmVyKTsKKwlvZmZw dHIgKz0gTVhPZmZzZXRQYWdlSGVhZGVyT2Zmc2V0OyAKIAlvZmZwdHIgKz0gZW50cnlubzsKIAlv ZmZzZXQgPSAqb2ZmcHRyOwogCkBAIC0xMzc3LDE2ICsxMzgzLDIxIEBAIHJldHJ5OgogCQllbnRy eW5vID0gTXVsdGlYYWN0SWRUb09mZnNldEVudHJ5KHRtcE1YYWN0KTsKIAogCQlpZiAocGFnZW5v ICE9IHByZXZfcGFnZW5vKQotCQkJc2xvdG5vID0gU2ltcGxlTHJ1UmVhZFBhZ2UoTXVsdGlYYWN0 T2Zmc2V0Q3RsLCBwYWdlbm8sIHRydWUsIHRtcE1YYWN0KTsKKwkJeworCQkJVW5sb2NrUmVsZWFz ZUJ1ZmZlcihidWZmZXIpOworCQkJYnVmZmVyID0gUmVhZFNscnVCdWZmZXIoU0xSVV9NVUxUSVhB Q1RfT0ZGU0VUX0lELCBwYWdlbm8pOworCQkJTG9ja0J1ZmZlcihidWZmZXIsIEJVRkZFUl9MT0NL X1NIQVJFKTsKKwkJfQogCi0JCW9mZnB0ciA9IChNdWx0aVhhY3RPZmZzZXQgKikgTXVsdGlYYWN0 T2Zmc2V0Q3RsLT5zaGFyZWQtPnBhZ2VfYnVmZmVyW3Nsb3Rub107CisJCW9mZnB0ciA9IChNdWx0 aVhhY3RPZmZzZXQgKikgQnVmZmVyR2V0UGFnZShidWZmZXIpOworCQlvZmZwdHIgKz0gTVhPZmZz ZXRQYWdlSGVhZGVyT2Zmc2V0OwogCQlvZmZwdHIgKz0gZW50cnlubzsKIAkJbmV4dE1YT2Zmc2V0 ID0gKm9mZnB0cjsKIAogCQlpZiAobmV4dE1YT2Zmc2V0ID09IDApCiAJCXsKIAkJCS8qIENvcm5l ciBjYXNlIDI6IG5leHQgbXVsdGl4YWN0IGlzIHN0aWxsIGJlaW5nIGZpbGxlZCBpbiAqLwotCQkJ TFdMb2NrUmVsZWFzZShNdWx0aVhhY3RPZmZzZXRTTFJVTG9jayk7CisJCQlVbmxvY2tSZWxlYXNl QnVmZmVyKGJ1ZmZlcik7CiAJCQlDSEVDS19GT1JfSU5URVJSVVBUUygpOwogCQkJcGdfdXNsZWVw KDEwMDBMKTsKIAkJCWdvdG8gcmV0cnk7CkBAIC0xMzk0LDE0ICsxNDA1LDExIEBAIHJldHJ5Ogog CiAJCWxlbmd0aCA9IG5leHRNWE9mZnNldCAtIG9mZnNldDsKIAl9Ci0KLQlMV0xvY2tSZWxlYXNl KE11bHRpWGFjdE9mZnNldFNMUlVMb2NrKTsKKwlVbmxvY2tSZWxlYXNlQnVmZmVyKGJ1ZmZlcik7 CisJYnVmZmVyID0gSW52YWxpZEJ1ZmZlcjsKIAogCXB0ciA9IChNdWx0aVhhY3RNZW1iZXIgKikg cGFsbG9jKGxlbmd0aCAqIHNpemVvZihNdWx0aVhhY3RNZW1iZXIpKTsKIAotCS8qIE5vdyBnZXQg dGhlIG1lbWJlcnMgdGhlbXNlbHZlcy4gKi8KLQlMV0xvY2tBY3F1aXJlKE11bHRpWGFjdE1lbWJl clNMUlVMb2NrLCBMV19FWENMVVNJVkUpOwotCiAJdHJ1ZWxlbmd0aCA9IDA7CiAJcHJldl9wYWdl bm8gPSAtMTsKIAlmb3IgKGkgPSAwOyBpIDwgbGVuZ3RoOyBpKyssIG9mZnNldCsrKQpAQCAtMTQx NywxMiArMTQyNSwxNCBAQCByZXRyeToKIAogCQlpZiAocGFnZW5vICE9IHByZXZfcGFnZW5vKQog CQl7Ci0JCQlzbG90bm8gPSBTaW1wbGVMcnVSZWFkUGFnZShNdWx0aVhhY3RNZW1iZXJDdGwsIHBh Z2VubywgdHJ1ZSwgbXVsdGkpOworCQkJaWYgKEJ1ZmZlcklzVmFsaWQoYnVmZmVyKSkKKwkJCQlV bmxvY2tSZWxlYXNlQnVmZmVyKGJ1ZmZlcik7CisJCQlidWZmZXIgPSBSZWFkU2xydUJ1ZmZlcihT TFJVX01VTFRJWEFDVF9NRU1CRVJfSUQsIHBhZ2Vubyk7CisJCQlMb2NrQnVmZmVyKGJ1ZmZlciwg QlVGRkVSX0xPQ0tfU0hBUkUpOwogCQkJcHJldl9wYWdlbm8gPSBwYWdlbm87CiAJCX0KIAotCQl4 YWN0cHRyID0gKFRyYW5zYWN0aW9uSWQgKikKLQkJCShNdWx0aVhhY3RNZW1iZXJDdGwtPnNoYXJl ZC0+cGFnZV9idWZmZXJbc2xvdG5vXSArIG1lbWJlcm9mZik7CisJCXhhY3RwdHIgPSAoVHJhbnNh Y3Rpb25JZCAqKSAoQnVmZmVyR2V0UGFnZShidWZmZXIpICsgbWVtYmVyb2ZmKTsKIAogCQlpZiAo IVRyYW5zYWN0aW9uSWRJc1ZhbGlkKCp4YWN0cHRyKSkKIAkJewpAQCAtMTQzMywxNCArMTQ0Mywx MyBAQCByZXRyeToKIAogCQlmbGFnc29mZiA9IE1YT2Zmc2V0VG9GbGFnc09mZnNldChvZmZzZXQp OwogCQlic2hpZnQgPSBNWE9mZnNldFRvRmxhZ3NCaXRTaGlmdChvZmZzZXQpOwotCQlmbGFnc3B0 ciA9ICh1aW50MzIgKikgKE11bHRpWGFjdE1lbWJlckN0bC0+c2hhcmVkLT5wYWdlX2J1ZmZlcltz bG90bm9dICsgZmxhZ3NvZmYpOworCQlmbGFnc3B0ciA9ICh1aW50MzIgKikgKEJ1ZmZlckdldFBh Z2UoYnVmZmVyKSArIGZsYWdzb2ZmKTsKIAogCQlwdHJbdHJ1ZWxlbmd0aF0ueGlkID0gKnhhY3Rw dHI7CiAJCXB0clt0cnVlbGVuZ3RoXS5zdGF0dXMgPSAoKmZsYWdzcHRyID4+IGJzaGlmdCkgJiBN WEFDVF9NRU1CRVJfWEFDVF9CSVRNQVNLOwogCQl0cnVlbGVuZ3RoKys7CiAJfQotCi0JTFdMb2Nr UmVsZWFzZShNdWx0aVhhY3RNZW1iZXJTTFJVTG9jayk7CisJVW5sb2NrUmVsZWFzZUJ1ZmZlcihi dWZmZXIpOwogCiAJLyogQSBtdWx0aXhpZCB3aXRoIHplcm8gbWVtYmVycyBzaG91bGQgbm90IGhh cHBlbiAqLwogCUFzc2VydCh0cnVlbGVuZ3RoID4gMCk7CkBAIC0xODM0LDggKzE4NDMsNiBAQCBN dWx0aVhhY3RTaG1lbVNpemUodm9pZCkKIAkJCSBtdWxfc2l6ZShzaXplb2YoTXVsdGlYYWN0SWQp ICogMiwgTWF4T2xkZXN0U2xvdCkpCiAKIAlzaXplID0gU0hBUkVEX01VTFRJWEFDVF9TVEFURV9T SVpFOwotCXNpemUgPSBhZGRfc2l6ZShzaXplLCBTaW1wbGVMcnVTaG1lbVNpemUoTlVNX01VTFRJ WEFDVE9GRlNFVF9CVUZGRVJTLCAwKSk7Ci0Jc2l6ZSA9IGFkZF9zaXplKHNpemUsIFNpbXBsZUxy dVNobWVtU2l6ZShOVU1fTVVMVElYQUNUTUVNQkVSX0JVRkZFUlMsIDApKTsKIAogCXJldHVybiBz aXplOwogfQpAQCAtMTg0NywyMiArMTg1NCw2IEBAIE11bHRpWGFjdFNobWVtSW5pdCh2b2lkKQog CiAJZGVidWdfZWxvZzIoREVCVUcyLCAiU2hhcmVkIE1lbW9yeSBJbml0IGZvciBNdWx0aVhhY3Qi KTsKIAotCU11bHRpWGFjdE9mZnNldEN0bC0+UGFnZVByZWNlZGVzID0gTXVsdGlYYWN0T2Zmc2V0 UGFnZVByZWNlZGVzOwotCU11bHRpWGFjdE1lbWJlckN0bC0+UGFnZVByZWNlZGVzID0gTXVsdGlY YWN0TWVtYmVyUGFnZVByZWNlZGVzOwotCi0JU2ltcGxlTHJ1SW5pdChNdWx0aVhhY3RPZmZzZXRD dGwsCi0JCQkJICAiTXVsdGlYYWN0T2Zmc2V0IiwgTlVNX01VTFRJWEFDVE9GRlNFVF9CVUZGRVJT LCAwLAotCQkJCSAgTXVsdGlYYWN0T2Zmc2V0U0xSVUxvY2ssICJwZ19tdWx0aXhhY3Qvb2Zmc2V0 cyIsCi0JCQkJICBMV1RSQU5DSEVfTVVMVElYQUNUT0ZGU0VUX0JVRkZFUiwKLQkJCQkgIFNZTkNf SEFORExFUl9NVUxUSVhBQ1RfT0ZGU0VUKTsKLQlTbHJ1UGFnZVByZWNlZGVzVW5pdFRlc3RzKE11 bHRpWGFjdE9mZnNldEN0bCwgTVVMVElYQUNUX09GRlNFVFNfUEVSX1BBR0UpOwotCVNpbXBsZUxy dUluaXQoTXVsdGlYYWN0TWVtYmVyQ3RsLAotCQkJCSAgIk11bHRpWGFjdE1lbWJlciIsIE5VTV9N VUxUSVhBQ1RNRU1CRVJfQlVGRkVSUywgMCwKLQkJCQkgIE11bHRpWGFjdE1lbWJlclNMUlVMb2Nr LCAicGdfbXVsdGl4YWN0L21lbWJlcnMiLAotCQkJCSAgTFdUUkFOQ0hFX01VTFRJWEFDVE1FTUJF Ul9CVUZGRVIsCi0JCQkJICBTWU5DX0hBTkRMRVJfTVVMVElYQUNUX01FTUJFUik7Ci0JLyogZG9l c24ndCBjYWxsIFNpbXBsZUxydVRydW5jYXRlKCkgb3IgbWVldCBjcml0ZXJpYSBmb3IgdW5pdCB0 ZXN0cyAqLwotCiAJLyogSW5pdGlhbGl6ZSBvdXIgc2hhcmVkIHN0YXRlIHN0cnVjdCAqLwogCU11 bHRpWGFjdFN0YXRlID0gU2htZW1Jbml0U3RydWN0KCJTaGFyZWQgTXVsdGlYYWN0IFN0YXRlIiwK IAkJCQkJCQkJCSBTSEFSRURfTVVMVElYQUNUX1NUQVRFX1NJWkUsCkBAIC0xODkzLDI5ICsxODg0 LDE3IEBAIE11bHRpWGFjdFNobWVtSW5pdCh2b2lkKQogdm9pZAogQm9vdFN0cmFwTXVsdGlYYWN0 KHZvaWQpCiB7Ci0JaW50CQkJc2xvdG5vOwotCi0JTFdMb2NrQWNxdWlyZShNdWx0aVhhY3RPZmZz ZXRTTFJVTG9jaywgTFdfRVhDTFVTSVZFKTsKKwlCdWZmZXIJCWJ1ZmZlcjsKIAogCS8qIENyZWF0 ZSBhbmQgemVybyB0aGUgZmlyc3QgcGFnZSBvZiB0aGUgb2Zmc2V0cyBsb2cgKi8KLQlzbG90bm8g PSBaZXJvTXVsdGlYYWN0T2Zmc2V0UGFnZSgwLCBmYWxzZSk7Ci0KLQkvKiBNYWtlIHN1cmUgaXQn cyB3cml0dGVuIG91dCAqLwotCVNpbXBsZUxydVdyaXRlUGFnZShNdWx0aVhhY3RPZmZzZXRDdGws IHNsb3Rubyk7Ci0JQXNzZXJ0KCFNdWx0aVhhY3RPZmZzZXRDdGwtPnNoYXJlZC0+cGFnZV9kaXJ0 eVtzbG90bm9dKTsKLQotCUxXTG9ja1JlbGVhc2UoTXVsdGlYYWN0T2Zmc2V0U0xSVUxvY2spOwot Ci0JTFdMb2NrQWNxdWlyZShNdWx0aVhhY3RNZW1iZXJTTFJVTG9jaywgTFdfRVhDTFVTSVZFKTsK KwlidWZmZXIgPSBaZXJvTXVsdGlYYWN0T2Zmc2V0UGFnZSgwLCBmYWxzZSk7CisJRmx1c2hPbmVC dWZmZXIoYnVmZmVyKTsKKwlVbmxvY2tSZWxlYXNlQnVmZmVyKGJ1ZmZlcik7CiAKIAkvKiBDcmVh dGUgYW5kIHplcm8gdGhlIGZpcnN0IHBhZ2Ugb2YgdGhlIG1lbWJlcnMgbG9nICovCi0Jc2xvdG5v ID0gWmVyb011bHRpWGFjdE1lbWJlclBhZ2UoMCwgZmFsc2UpOwotCi0JLyogTWFrZSBzdXJlIGl0 J3Mgd3JpdHRlbiBvdXQgKi8KLQlTaW1wbGVMcnVXcml0ZVBhZ2UoTXVsdGlYYWN0TWVtYmVyQ3Rs LCBzbG90bm8pOwotCUFzc2VydCghTXVsdGlYYWN0TWVtYmVyQ3RsLT5zaGFyZWQtPnBhZ2VfZGly dHlbc2xvdG5vXSk7Ci0KLQlMV0xvY2tSZWxlYXNlKE11bHRpWGFjdE1lbWJlclNMUlVMb2NrKTsK KwlidWZmZXIgPSBaZXJvTXVsdGlYYWN0TWVtYmVyUGFnZSgwLCBmYWxzZSk7CisJRmx1c2hPbmVC dWZmZXIoYnVmZmVyKTsKKwlVbmxvY2tSZWxlYXNlQnVmZmVyKGJ1ZmZlcik7CiB9CiAKIC8qCkBA IC0xOTI3LDMzICsxOTA2LDQ2IEBAIEJvb3RTdHJhcE11bHRpWGFjdCh2b2lkKQogICoKICAqIENv bnRyb2wgbG9jayBtdXN0IGJlIGhlbGQgYXQgZW50cnksIGFuZCB3aWxsIGJlIGhlbGQgYXQgZXhp dC4KICAqLwotc3RhdGljIGludAorc3RhdGljIEJ1ZmZlcgogWmVyb011bHRpWGFjdE9mZnNldFBh Z2UoaW50IHBhZ2VubywgYm9vbCB3cml0ZVhsb2cpCiB7Ci0JaW50CQkJc2xvdG5vOworCUJ1ZmZl cgkJYnVmZmVyOworCVBhZ2UgCQlwYWdlOworCVhMb2dSZWNQdHIJbHNuOwogCi0Jc2xvdG5vID0g U2ltcGxlTHJ1WmVyb1BhZ2UoTXVsdGlYYWN0T2Zmc2V0Q3RsLCBwYWdlbm8pOworCWJ1ZmZlciA9 IFplcm9TbHJ1QnVmZmVyKFNMUlVfTVVMVElYQUNUX09GRlNFVF9JRCwgcGFnZW5vKTsKKwlNYXJr QnVmZmVyRGlydHkoYnVmZmVyKTsKIAogCWlmICh3cml0ZVhsb2cpCi0JCVdyaXRlTVplcm9QYWdl WGxvZ1JlYyhwYWdlbm8sIFhMT0dfTVVMVElYQUNUX1pFUk9fT0ZGX1BBR0UpOworCXsKKwkJbHNu ID0gV3JpdGVNWmVyb1BhZ2VYbG9nUmVjKHBhZ2VubywgWExPR19NVUxUSVhBQ1RfWkVST19PRkZf UEFHRSk7CisJCXBhZ2UgPSBCdWZmZXJHZXRQYWdlKGJ1ZmZlcik7CisJCVBhZ2VTZXRIZWFkZXJE YXRhTm9uUmVsKHBhZ2UsIHBhZ2VubywgbHNuLCBCTENLU1osIFBHX01FVEFQQUdFX0xBWU9VVF9W RVJTSU9OKTsKKwl9CiAKLQlyZXR1cm4gc2xvdG5vOworCXJldHVybiBidWZmZXI7CiB9CiAKIC8q CiAgKiBEaXR0bywgZm9yIE11bHRpWGFjdE1lbWJlcgogICovCi1zdGF0aWMgaW50CitzdGF0aWMg QnVmZmVyCiBaZXJvTXVsdGlYYWN0TWVtYmVyUGFnZShpbnQgcGFnZW5vLCBib29sIHdyaXRlWGxv ZykKIHsKLQlpbnQJCQlzbG90bm87Ci0KLQlzbG90bm8gPSBTaW1wbGVMcnVaZXJvUGFnZShNdWx0 aVhhY3RNZW1iZXJDdGwsIHBhZ2Vubyk7CisJQnVmZmVyCQlidWZmZXI7CisJUGFnZSAJCXBhZ2U7 CisJWExvZ1JlY1B0ciAJbHNuOworCQorCWJ1ZmZlciA9IFplcm9TbHJ1QnVmZmVyKFNMUlVfTVVM VElYQUNUX01FTUJFUl9JRCwgcGFnZW5vKTsKKwlNYXJrQnVmZmVyRGlydHkoYnVmZmVyKTsKIAog CWlmICh3cml0ZVhsb2cpCi0JCVdyaXRlTVplcm9QYWdlWGxvZ1JlYyhwYWdlbm8sIFhMT0dfTVVM VElYQUNUX1pFUk9fTUVNX1BBR0UpOwotCi0JcmV0dXJuIHNsb3RubzsKKwl7CisJCWxzbiA9IFdy aXRlTVplcm9QYWdlWGxvZ1JlYyhwYWdlbm8sIFhMT0dfTVVMVElYQUNUX1pFUk9fTUVNX1BBR0Up OworCQlwYWdlID0gQnVmZmVyR2V0UGFnZShidWZmZXIpOworCQlQYWdlU2V0SGVhZGVyRGF0YU5v blJlbChwYWdlLCBwYWdlbm8sIGxzbiwgQkxDS1NaLCBQR19NRVRBUEFHRV9MQVlPVVRfVkVSU0lP Tik7CisJfQorCXJldHVybiBidWZmZXI7CiB9CiAKIC8qCkBAIC0xOTc4LDIyICsxOTcwLDE0IEBA IE1heWJlRXh0ZW5kT2Zmc2V0U2xydSh2b2lkKQogCiAJcGFnZW5vID0gTXVsdGlYYWN0SWRUb09m ZnNldFBhZ2UoTXVsdGlYYWN0U3RhdGUtPm5leHRNWGFjdCk7CiAKLQlMV0xvY2tBY3F1aXJlKE11 bHRpWGFjdE9mZnNldFNMUlVMb2NrLCBMV19FWENMVVNJVkUpOwotCi0JaWYgKCFTaW1wbGVMcnVE b2VzUGh5c2ljYWxQYWdlRXhpc3QoTXVsdGlYYWN0T2Zmc2V0Q3RsLCBwYWdlbm8pKQorCWlmICgh U2ltcGxlTHJ1RG9lc1BoeXNpY2FsUGFnZUV4aXN0KFNMUlVfTVVMVElYQUNUX09GRlNFVF9JRCwg cGFnZW5vKSkKIAl7Ci0JCWludAkJCXNsb3RubzsKKwkJQnVmZmVyCQkJYnVmZmVyOwogCi0JCS8q Ci0JCSAqIEZvcnR1bmF0ZWx5IGZvciB1cywgU2ltcGxlTHJ1V3JpdGVQYWdlIGlzIGFscmVhZHkg cHJlcGFyZWQgdG8gZGVhbAotCQkgKiB3aXRoIGNyZWF0aW5nIGEgbmV3IHNlZ21lbnQgZmlsZSBl dmVuIGlmIHRoZSBwYWdlIHdlJ3JlIHdyaXRpbmcgaXMKLQkJICogbm90IHRoZSBmaXJzdCBpbiBp dCwgc28gdGhpcyBpcyBlbm91Z2guCi0JCSAqLwotCQlzbG90bm8gPSBaZXJvTXVsdGlYYWN0T2Zm c2V0UGFnZShwYWdlbm8sIGZhbHNlKTsKLQkJU2ltcGxlTHJ1V3JpdGVQYWdlKE11bHRpWGFjdE9m ZnNldEN0bCwgc2xvdG5vKTsKKwkJYnVmZmVyID0gWmVyb011bHRpWGFjdE9mZnNldFBhZ2UocGFn ZW5vLCBmYWxzZSk7CisJCUZsdXNoT25lQnVmZmVyKGJ1ZmZlcik7CisJCVVubG9ja1JlbGVhc2VC dWZmZXIoYnVmZmVyKTsKIAl9Ci0KLQlMV0xvY2tSZWxlYXNlKE11bHRpWGFjdE9mZnNldFNMUlVM b2NrKTsKIH0KIAogLyoKQEAgLTIwMDcsMjEgKzE5OTEsNiBAQCBNYXliZUV4dGVuZE9mZnNldFNs cnUodm9pZCkKIHZvaWQKIFN0YXJ0dXBNdWx0aVhhY3Qodm9pZCkKIHsKLQlNdWx0aVhhY3RJZCBt dWx0aSA9IE11bHRpWGFjdFN0YXRlLT5uZXh0TVhhY3Q7Ci0JTXVsdGlYYWN0T2Zmc2V0IG9mZnNl dCA9IE11bHRpWGFjdFN0YXRlLT5uZXh0T2Zmc2V0OwotCWludAkJCXBhZ2VubzsKLQotCS8qCi0J ICogSW5pdGlhbGl6ZSBvZmZzZXQncyBpZGVhIG9mIHRoZSBsYXRlc3QgcGFnZSBudW1iZXIuCi0J ICovCi0JcGFnZW5vID0gTXVsdGlYYWN0SWRUb09mZnNldFBhZ2UobXVsdGkpOwotCU11bHRpWGFj dE9mZnNldEN0bC0+c2hhcmVkLT5sYXRlc3RfcGFnZV9udW1iZXIgPSBwYWdlbm87Ci0KLQkvKgot CSAqIEluaXRpYWxpemUgbWVtYmVyJ3MgaWRlYSBvZiB0aGUgbGF0ZXN0IHBhZ2UgbnVtYmVyLgot CSAqLwotCXBhZ2VubyA9IE1YT2Zmc2V0VG9NZW1iZXJQYWdlKG9mZnNldCk7Ci0JTXVsdGlYYWN0 TWVtYmVyQ3RsLT5zaGFyZWQtPmxhdGVzdF9wYWdlX251bWJlciA9IHBhZ2VubzsKIH0KIAogLyoK QEAgLTIwNDUsMTUgKzIwMTQsOCBAQCBUcmltTXVsdGlYYWN0KHZvaWQpCiAJb2xkZXN0TVhhY3RE QiA9IE11bHRpWGFjdFN0YXRlLT5vbGRlc3RNdWx0aVhhY3REQjsKIAlMV0xvY2tSZWxlYXNlKE11 bHRpWGFjdEdlbkxvY2spOwogCi0JLyogQ2xlYW4gdXAgb2Zmc2V0cyBzdGF0ZSAqLwotCUxXTG9j a0FjcXVpcmUoTXVsdGlYYWN0T2Zmc2V0U0xSVUxvY2ssIExXX0VYQ0xVU0lWRSk7Ci0KLQkvKgot CSAqIChSZS0pSW5pdGlhbGl6ZSBvdXIgaWRlYSBvZiB0aGUgbGF0ZXN0IHBhZ2UgbnVtYmVyIGZv ciBvZmZzZXRzLgotCSAqLwogCXBhZ2VubyA9IE11bHRpWGFjdElkVG9PZmZzZXRQYWdlKG5leHRN WGFjdCk7Ci0JTXVsdGlYYWN0T2Zmc2V0Q3RsLT5zaGFyZWQtPmxhdGVzdF9wYWdlX251bWJlciA9 IHBhZ2VubzsKLQorCQogCS8qCiAJICogWmVybyBvdXQgdGhlIHJlbWFpbmRlciBvZiB0aGUgY3Vy cmVudCBvZmZzZXRzIHBhZ2UuICBTZWUgbm90ZXMgaW4KIAkgKiBUcmltQ0xPRygpIGZvciBiYWNr Z3JvdW5kLiAgVW5saWtlIENMT0csIHNvbWUgV0FMIHJlY29yZCBjb3ZlcnMgZXZlcnkKQEAgLTIw NjUsNDYgKzIwMjcsNTIgQEAgVHJpbU11bHRpWGFjdCh2b2lkKQogCWVudHJ5bm8gPSBNdWx0aVhh Y3RJZFRvT2Zmc2V0RW50cnkobmV4dE1YYWN0KTsKIAlpZiAoZW50cnlubyAhPSAwKQogCXsKLQkJ aW50CQkJc2xvdG5vOwogCQlNdWx0aVhhY3RPZmZzZXQgKm9mZnB0cjsKKwkJQnVmZmVyCQlidWZm ZXI7CiAKLQkJc2xvdG5vID0gU2ltcGxlTHJ1UmVhZFBhZ2UoTXVsdGlYYWN0T2Zmc2V0Q3RsLCBw YWdlbm8sIHRydWUsIG5leHRNWGFjdCk7Ci0JCW9mZnB0ciA9IChNdWx0aVhhY3RPZmZzZXQgKikg TXVsdGlYYWN0T2Zmc2V0Q3RsLT5zaGFyZWQtPnBhZ2VfYnVmZmVyW3Nsb3Rub107CisJCWJ1ZmZl ciA9IFJlYWRTbHJ1QnVmZmVyKFNMUlVfTVVMVElYQUNUX09GRlNFVF9JRCwgcGFnZW5vKTsKKwkJ TG9ja0J1ZmZlcihidWZmZXIsIEJVRkZFUl9MT0NLX0VYQ0xVU0lWRSk7CisJCW9mZnB0ciA9IChN dWx0aVhhY3RPZmZzZXQgKikgQnVmZmVyR2V0UGFnZShidWZmZXIpOworCQlvZmZwdHIgKz0gTVhP ZmZzZXRQYWdlSGVhZGVyT2Zmc2V0OwogCQlvZmZwdHIgKz0gZW50cnlubzsKIAotCQlNZW1TZXQo b2ZmcHRyLCAwLCBCTENLU1ogLSAoZW50cnlubyAqIHNpemVvZihNdWx0aVhhY3RPZmZzZXQpKSk7 CisJCUFzc2VydCgoaW50KSBvZmZwdHIgJSBzaXplb2YoTXVsdGlYYWN0T2Zmc2V0KSA9PSAwKTsg LyogbmF0dXJhbCBhbGlnbm1lbnQgKi8KKwkJQXNzZXJ0KG5leHRNWGFjdCA9PSBwYWdlbm8gKiBN VUxUSVhBQ1RfT0ZGU0VUU19QRVJfUEFHRSArIGVudHJ5bm8pOyAKKwkJTWVtU2V0KG9mZnB0ciwg MCwgQkxDS1NaIC0gKGVudHJ5bm8gKiBzaXplb2YoTXVsdGlYYWN0T2Zmc2V0KSkgLSBNWE9mZnNl dFBhZ2VIZWFkZXJPZmZzZXQpOworCQlQYWdlU2V0Q2hlY2tzdW1JbnBsYWNlKEJ1ZmZlckdldFBh Z2UoYnVmZmVyKSwgcGFnZW5vKTsKIAotCQlNdWx0aVhhY3RPZmZzZXRDdGwtPnNoYXJlZC0+cGFn ZV9kaXJ0eVtzbG90bm9dID0gdHJ1ZTsKKwkJTWFya0J1ZmZlckRpcnR5KGJ1ZmZlcik7CisJCVVu bG9ja1JlbGVhc2VCdWZmZXIoYnVmZmVyKTsKIAl9CiAKLQlMV0xvY2tSZWxlYXNlKE11bHRpWGFj dE9mZnNldFNMUlVMb2NrKTsKLQotCS8qIEFuZCB0aGUgc2FtZSBmb3IgbWVtYmVycyAqLwotCUxX TG9ja0FjcXVpcmUoTXVsdGlYYWN0TWVtYmVyU0xSVUxvY2ssIExXX0VYQ0xVU0lWRSk7Ci0KLQkv KgotCSAqIChSZS0pSW5pdGlhbGl6ZSBvdXIgaWRlYSBvZiB0aGUgbGF0ZXN0IHBhZ2UgbnVtYmVy IGZvciBtZW1iZXJzLgotCSAqLwotCXBhZ2VubyA9IE1YT2Zmc2V0VG9NZW1iZXJQYWdlKG9mZnNl dCk7Ci0JTXVsdGlYYWN0TWVtYmVyQ3RsLT5zaGFyZWQtPmxhdGVzdF9wYWdlX251bWJlciA9IHBh Z2VubzsKLQogCS8qCiAJICogWmVybyBvdXQgdGhlIHJlbWFpbmRlciBvZiB0aGUgY3VycmVudCBt ZW1iZXJzIHBhZ2UuICBTZWUgbm90ZXMgaW4KIAkgKiBUcmltQ0xPRygpIGZvciBtb3RpdmF0aW9u LgogCSAqLworCisJLy9AaGVpa2tpL211bnJvLCBwb3NzaWJsZSBlcnJvcj8gbm93IHdlIHdhbnQg dGhlIG1lbWJlcnMgcGFnZSBoZXJlLCBzbyByZWNhbGN1bGF0ZQorCXBhZ2VubyA9IE1YT2Zmc2V0 VG9NZW1iZXJQYWdlKG9mZnNldCk7CiAJZmxhZ3NvZmYgPSBNWE9mZnNldFRvRmxhZ3NPZmZzZXQo b2Zmc2V0KTsKKwkKIAlpZiAoZmxhZ3NvZmYgIT0gMCkKIAl7Ci0JCWludAkJCXNsb3RubzsKIAkJ VHJhbnNhY3Rpb25JZCAqeGlkcHRyOwogCQlpbnQJCQltZW1iZXJvZmY7CisJCUJ1ZmZlcgkJYnVm ZmVyOwogCiAJCW1lbWJlcm9mZiA9IE1YT2Zmc2V0VG9NZW1iZXJPZmZzZXQob2Zmc2V0KTsKLQkJ c2xvdG5vID0gU2ltcGxlTHJ1UmVhZFBhZ2UoTXVsdGlYYWN0TWVtYmVyQ3RsLCBwYWdlbm8sIHRy dWUsIG9mZnNldCk7Ci0JCXhpZHB0ciA9IChUcmFuc2FjdGlvbklkICopCi0JCQkoTXVsdGlYYWN0 TWVtYmVyQ3RsLT5zaGFyZWQtPnBhZ2VfYnVmZmVyW3Nsb3Rub10gKyBtZW1iZXJvZmYpOworCQli dWZmZXIgPSBSZWFkU2xydUJ1ZmZlcihTTFJVX01VTFRJWEFDVF9NRU1CRVJfSUQsIHBhZ2Vubyk7 CisJCUxvY2tCdWZmZXIoYnVmZmVyLCBCVUZGRVJfTE9DS19FWENMVVNJVkUpOworCQkKKwkJLyog CisJCSAqIE5vdGU6IG1lbWJlcm9mZiBpcyBjYWxjdWxhdGVkIHVzaW5nIG1hY3JvcyBhbHJlYWR5 IHRha2luZyBwYWdlIGhlYWRlciBpbnRvIGFjY291bnQsCisJCSAqIHNvIHdlIGRvbid0IGhhdmUg dG8gYWNjb3VudCBmb3IgaXQgaGVyZSBsaWtlIHdlIGRpZCBpbiBteCBvZmZzZXRlcmEKKwkJICov CisJCXhpZHB0ciA9IChUcmFuc2FjdGlvbklkICopIChCdWZmZXJHZXRQYWdlKGJ1ZmZlcikgKyBt ZW1iZXJvZmYpOwogCiAJCU1lbVNldCh4aWRwdHIsIDAsIEJMQ0tTWiAtIG1lbWJlcm9mZik7CisJ CVBhZ2VTZXRDaGVja3N1bUlucGxhY2UoQnVmZmVyR2V0UGFnZShidWZmZXIpLCBwYWdlbm8pOwor CiAKIAkJLyoKIAkJICogTm90ZTogd2UgZG9uJ3QgbmVlZCB0byB6ZXJvIG91dCB0aGUgZmxhZyBi aXRzIGluIHRoZSByZW1haW5pbmcKQEAgLTIxMTIsMTEgKzIwODAsMTAgQEAgVHJpbU11bHRpWGFj dCh2b2lkKQogCQkgKiB3cml0aW5nLgogCQkgKi8KIAotCQlNdWx0aVhhY3RNZW1iZXJDdGwtPnNo YXJlZC0+cGFnZV9kaXJ0eVtzbG90bm9dID0gdHJ1ZTsKKwkJTWFya0J1ZmZlckRpcnR5KGJ1ZmZl cik7CisJCVVubG9ja1JlbGVhc2VCdWZmZXIoYnVmZmVyKTsKIAl9CiAKLQlMV0xvY2tSZWxlYXNl KE11bHRpWGFjdE1lbWJlclNMUlVMb2NrKTsKLQogCS8qIHNpZ25hbCB0aGF0IHdlJ3JlIG9mZmlj aWFsbHkgdXAgKi8KIAlMV0xvY2tBY3F1aXJlKE11bHRpWGFjdEdlbkxvY2ssIExXX0VYQ0xVU0lW RSk7CiAJTXVsdGlYYWN0U3RhdGUtPmZpbmlzaGVkU3RhcnR1cCA9IHRydWU7CkBAIC0yMTQ4LDI1 ICsyMTE1LDYgQEAgTXVsdGlYYWN0R2V0Q2hlY2twdE11bHRpKGJvb2wgaXNfc2h1dGRvd24sCiAJ CQkJKm5leHRNdWx0aSwgKm5leHRNdWx0aU9mZnNldCwgKm9sZGVzdE11bHRpLCAqb2xkZXN0TXVs dGlEQik7CiB9CiAKLS8qCi0gKiBQZXJmb3JtIGEgY2hlY2twb2ludCAtLS0gZWl0aGVyIGR1cmlu ZyBzaHV0ZG93biwgb3Igb24tdGhlLWZseQotICovCi12b2lkCi1DaGVja1BvaW50TXVsdGlYYWN0 KHZvaWQpCi17Ci0JVFJBQ0VfUE9TVEdSRVNRTF9NVUxUSVhBQ1RfQ0hFQ0tQT0lOVF9TVEFSVCh0 cnVlKTsKLQotCS8qCi0JICogV3JpdGUgZGlydHkgTXVsdGlYYWN0IHBhZ2VzIHRvIGRpc2suICBU aGlzIG1heSByZXN1bHQgaW4gc3luYyByZXF1ZXN0cwotCSAqIHF1ZXVlZCBmb3IgbGF0ZXIgaGFu ZGxpbmcgYnkgUHJvY2Vzc1N5bmNSZXF1ZXN0cygpLCBhcyBwYXJ0IG9mIHRoZQotCSAqIGNoZWNr cG9pbnQuCi0JICovCi0JU2ltcGxlTHJ1V3JpdGVBbGwoTXVsdGlYYWN0T2Zmc2V0Q3RsLCB0cnVl KTsKLQlTaW1wbGVMcnVXcml0ZUFsbChNdWx0aVhhY3RNZW1iZXJDdGwsIHRydWUpOwotCi0JVFJB Q0VfUE9TVEdSRVNRTF9NVUxUSVhBQ1RfQ0hFQ0tQT0lOVF9ET05FKHRydWUpOwotfQotCiAvKgog ICogU2V0IHRoZSBuZXh0LXRvLWJlLWFzc2lnbmVkIE11bHRpWGFjdElkIGFuZCBvZmZzZXQKICAq CkBAIC0yNDE1LDEyICsyMzYzLDggQEAgRXh0ZW5kTXVsdGlYYWN0T2Zmc2V0KE11bHRpWGFjdElk IG11bHRpKQogCiAJcGFnZW5vID0gTXVsdGlYYWN0SWRUb09mZnNldFBhZ2UobXVsdGkpOwogCi0J TFdMb2NrQWNxdWlyZShNdWx0aVhhY3RPZmZzZXRTTFJVTG9jaywgTFdfRVhDTFVTSVZFKTsKLQog CS8qIFplcm8gdGhlIHBhZ2UgYW5kIG1ha2UgYW4gWExPRyBlbnRyeSBhYm91dCBpdCAqLwotCVpl cm9NdWx0aVhhY3RPZmZzZXRQYWdlKHBhZ2VubywgdHJ1ZSk7Ci0KLQlMV0xvY2tSZWxlYXNlKE11 bHRpWGFjdE9mZnNldFNMUlVMb2NrKTsKKwlVbmxvY2tSZWxlYXNlQnVmZmVyKFplcm9NdWx0aVhh Y3RPZmZzZXRQYWdlKHBhZ2VubywgdHJ1ZSkpOwogfQogCiAvKgpAQCAtMjQ1NiwxMiArMjQwMCw4 IEBAIEV4dGVuZE11bHRpWGFjdE1lbWJlcihNdWx0aVhhY3RPZmZzZXQgb2Zmc2V0LCBpbnQgbm1l bWJlcnMpCiAKIAkJCXBhZ2VubyA9IE1YT2Zmc2V0VG9NZW1iZXJQYWdlKG9mZnNldCk7CiAKLQkJ CUxXTG9ja0FjcXVpcmUoTXVsdGlYYWN0TWVtYmVyU0xSVUxvY2ssIExXX0VYQ0xVU0lWRSk7Ci0K IAkJCS8qIFplcm8gdGhlIHBhZ2UgYW5kIG1ha2UgYW4gWExPRyBlbnRyeSBhYm91dCBpdCAqLwot CQkJWmVyb011bHRpWGFjdE1lbWJlclBhZ2UocGFnZW5vLCB0cnVlKTsKLQotCQkJTFdMb2NrUmVs ZWFzZShNdWx0aVhhY3RNZW1iZXJTTFJVTG9jayk7CisJCQlVbmxvY2tSZWxlYXNlQnVmZmVyKFpl cm9NdWx0aVhhY3RNZW1iZXJQYWdlKHBhZ2VubywgdHJ1ZSkpOwogCQl9CiAKIAkJLyoKQEAgLTI3 MzYsOCArMjY3Niw4IEBAIGZpbmRfbXVsdGl4YWN0X3N0YXJ0KE11bHRpWGFjdElkIG11bHRpLCBN dWx0aVhhY3RPZmZzZXQgKnJlc3VsdCkKIAlNdWx0aVhhY3RPZmZzZXQgb2Zmc2V0OwogCWludAkJ CXBhZ2VubzsKIAlpbnQJCQllbnRyeW5vOwotCWludAkJCXNsb3RubzsKIAlNdWx0aVhhY3RPZmZz ZXQgKm9mZnB0cjsKKwlCdWZmZXIJCWJ1ZmZlcjsKIAogCUFzc2VydChNdWx0aVhhY3RTdGF0ZS0+ ZmluaXNoZWRTdGFydHVwKTsKIApAQCAtMjc0NSwyMCArMjY4NSwyMCBAQCBmaW5kX211bHRpeGFj dF9zdGFydChNdWx0aVhhY3RJZCBtdWx0aSwgTXVsdGlYYWN0T2Zmc2V0ICpyZXN1bHQpCiAJZW50 cnlubyA9IE11bHRpWGFjdElkVG9PZmZzZXRFbnRyeShtdWx0aSk7CiAKIAkvKgotCSAqIFdyaXRl IG91dCBkaXJ0eSBkYXRhLCBzbyBQaHlzaWNhbFBhZ2VFeGlzdHMgY2FuIHdvcmsgY29ycmVjdGx5 LgorCSAqIENvcGUgd2l0aCBtaXNzaW5nL2JvZ3VzIG9sZGVzdCBNdWx0aVhhY3QgaW4gaW5jb25z aXN0ZW50IHN0YXRlcyAoc2VlCisJICogY29tbWl0IDA2OGNmYWRmOSkuCiAJICovCi0JU2ltcGxl THJ1V3JpdGVBbGwoTXVsdGlYYWN0T2Zmc2V0Q3RsLCB0cnVlKTsKLQlTaW1wbGVMcnVXcml0ZUFs bChNdWx0aVhhY3RNZW1iZXJDdGwsIHRydWUpOwotCi0JaWYgKCFTaW1wbGVMcnVEb2VzUGh5c2lj YWxQYWdlRXhpc3QoTXVsdGlYYWN0T2Zmc2V0Q3RsLCBwYWdlbm8pKQorCWlmICghUHJvYmVTbHJ1 QnVmZmVyKFNMUlVfTVVMVElYQUNUX09GRlNFVF9JRCwgcGFnZW5vKSAmJgorCQkhU2ltcGxlTHJ1 RG9lc1BoeXNpY2FsUGFnZUV4aXN0KFNMUlVfTVVMVElYQUNUX09GRlNFVF9JRCwgcGFnZW5vKSkK IAkJcmV0dXJuIGZhbHNlOwogCi0JLyogbG9jayBpcyBhY3F1aXJlZCBieSBTaW1wbGVMcnVSZWFk UGFnZV9SZWFkT25seSAqLwotCXNsb3RubyA9IFNpbXBsZUxydVJlYWRQYWdlX1JlYWRPbmx5KE11 bHRpWGFjdE9mZnNldEN0bCwgcGFnZW5vLCBtdWx0aSk7Ci0Jb2ZmcHRyID0gKE11bHRpWGFjdE9m ZnNldCAqKSBNdWx0aVhhY3RPZmZzZXRDdGwtPnNoYXJlZC0+cGFnZV9idWZmZXJbc2xvdG5vXTsK KwlidWZmZXIgPSBSZWFkU2xydUJ1ZmZlcihTTFJVX01VTFRJWEFDVF9PRkZTRVRfSUQsIHBhZ2Vu byk7CisJTG9ja0J1ZmZlcihidWZmZXIsIEJVRkZFUl9MT0NLX1NIQVJFKTsKKwlvZmZwdHIgPSAo TXVsdGlYYWN0T2Zmc2V0ICopIEJ1ZmZlckdldFBhZ2UoYnVmZmVyKTsKKwlvZmZwdHIgKz0gTVhP ZmZzZXRQYWdlSGVhZGVyT2Zmc2V0OwogCW9mZnB0ciArPSBlbnRyeW5vOwogCW9mZnNldCA9ICpv ZmZwdHI7Ci0JTFdMb2NrUmVsZWFzZShNdWx0aVhhY3RPZmZzZXRTTFJVTG9jayk7CisJVW5sb2Nr UmVsZWFzZUJ1ZmZlcihidWZmZXIpOwogCiAJKnJlc3VsdCA9IG9mZnNldDsKIAlyZXR1cm4gdHJ1 ZTsKQEAgLTI4NjUsMTIgKzI4MDUsMTMgQEAgdHlwZWRlZiBzdHJ1Y3QgbXh0cnVuY2luZm8KICAq CQlUaGlzIGNhbGxiYWNrIGRldGVybWluZXMgdGhlIGVhcmxpZXN0IGV4aXN0aW5nIHBhZ2UgbnVt YmVyLgogICovCiBzdGF0aWMgYm9vbAotU2xydVNjYW5EaXJDYkZpbmRFYXJsaWVzdChTbHJ1Q3Rs IGN0bCwgY2hhciAqZmlsZW5hbWUsIGludCBzZWdwYWdlLCB2b2lkICpkYXRhKQorU2xydVNjYW5E aXJDYkZpbmRFYXJsaWVzdChpbnQgc2xydV9pZCwgU2xydVBhZ2VQcmVjZWRlc0Z1bmN0aW9uIFBh Z2VQcmVjZWRlcywKKwkJCQkJCSAgY2hhciAqZmlsZW5hbWUsIGludCBzZWdwYWdlLCB2b2lkICpk YXRhKQogewogCW14dHJ1bmNpbmZvICp0cnVuYyA9IChteHRydW5jaW5mbyAqKSBkYXRhOwogCiAJ aWYgKHRydW5jLT5lYXJsaWVzdEV4aXN0aW5nUGFnZSA9PSAtMSB8fAotCQljdGwtPlBhZ2VQcmVj ZWRlcyhzZWdwYWdlLCB0cnVuYy0+ZWFybGllc3RFeGlzdGluZ1BhZ2UpKQorCQlQYWdlUHJlY2Vk ZXMoc2VncGFnZSwgdHJ1bmMtPmVhcmxpZXN0RXhpc3RpbmdQYWdlKSkKIAl7CiAJCXRydW5jLT5l YXJsaWVzdEV4aXN0aW5nUGFnZSA9IHNlZ3BhZ2U7CiAJfQpAQCAtMjkwMiw3ICsyODQzLDcgQEAg UGVyZm9ybU1lbWJlcnNUcnVuY2F0aW9uKE11bHRpWGFjdE9mZnNldCBvbGRlc3RPZmZzZXQsIE11 bHRpWGFjdE9mZnNldCBuZXdPbGRlc3QKIAl3aGlsZSAoc2VnbWVudCAhPSBlbmRzZWdtZW50KQog CXsKIAkJZWxvZyhERUJVRzIsICJ0cnVuY2F0aW5nIG11bHRpeGFjdCBtZW1iZXJzIHNlZ21lbnQg JXgiLCBzZWdtZW50KTsKLQkJU2xydURlbGV0ZVNlZ21lbnQoTXVsdGlYYWN0TWVtYmVyQ3RsLCBz ZWdtZW50KTsKKwkJU2xydURlbGV0ZVNlZ21lbnQoU0xSVV9NVUxUSVhBQ1RfTUVNQkVSX0lELCBz ZWdtZW50KTsKIAogCQkvKiBtb3ZlIHRvIG5leHQgc2VnbWVudCwgaGFuZGxpbmcgd3JhcGFyb3Vu ZCBjb3JyZWN0bHkgKi8KIAkJaWYgKHNlZ21lbnQgPT0gbWF4c2VnbWVudCkKQEAgLTI5MjUsNyAr Mjg2Niw4IEBAIFBlcmZvcm1PZmZzZXRzVHJ1bmNhdGlvbihNdWx0aVhhY3RJZCBvbGRlc3RNdWx0 aSwgTXVsdGlYYWN0SWQgbmV3T2xkZXN0TXVsdGkpCiAJICogZGlkbid0IHN1YnRyYWN0IG9uZSwg d2UnZCB0cmlnZ2VyIFNpbXBsZUxydVRydW5jYXRlJ3Mgd3JhcGFyb3VuZAogCSAqIGRldGVjdGlv bi4KIAkgKi8KLQlTaW1wbGVMcnVUcnVuY2F0ZShNdWx0aVhhY3RPZmZzZXRDdGwsCisJU2ltcGxl THJ1VHJ1bmNhdGUoU0xSVV9NVUxUSVhBQ1RfT0ZGU0VUX0lELAorCQkJCQkgIE11bHRpWGFjdE9m ZnNldFBhZ2VQcmVjZWRlcywKIAkJCQkJICBNdWx0aVhhY3RJZFRvT2Zmc2V0UGFnZShQcmV2aW91 c011bHRpWGFjdElkKG5ld09sZGVzdE11bHRpKSkpOwogfQogCkBAIC0yOTk5LDcgKzI5NDEsOSBA QCBUcnVuY2F0ZU11bHRpWGFjdChNdWx0aVhhY3RJZCBuZXdPbGRlc3RNdWx0aSwgT2lkIG5ld09s ZGVzdE11bHRpREIpCiAJICogYmVlbiB0cnVuY2F0ZWQgYXdheSwgYW5kIHdlIGNyYXNoZWQgYmVm b3JlIHVwZGF0aW5nIG9sZGVzdE11bHRpLgogCSAqLwogCXRydW5jLmVhcmxpZXN0RXhpc3RpbmdQ YWdlID0gLTE7Ci0JU2xydVNjYW5EaXJlY3RvcnkoTXVsdGlYYWN0T2Zmc2V0Q3RsLCBTbHJ1U2Nh bkRpckNiRmluZEVhcmxpZXN0LCAmdHJ1bmMpOworCVNscnVTY2FuRGlyZWN0b3J5KFNMUlVfTVVM VElYQUNUX09GRlNFVF9JRCwKKwkJCQkJICBNdWx0aVhhY3RPZmZzZXRQYWdlUHJlY2VkZXMsCisJ CQkJCSAgU2xydVNjYW5EaXJDYkZpbmRFYXJsaWVzdCwgJnRydW5jKTsKIAllYXJsaWVzdCA9IHRy dW5jLmVhcmxpZXN0RXhpc3RpbmdQYWdlICogTVVMVElYQUNUX09GRlNFVFNfUEVSX1BBR0U7CiAJ aWYgKGVhcmxpZXN0IDwgRmlyc3RNdWx0aVhhY3RJZCkKIAkJZWFybGllc3QgPSBGaXJzdE11bHRp WGFjdElkOwpAQCAtMzEzMSwyNCArMzA3NSw2IEBAIE11bHRpWGFjdE9mZnNldFBhZ2VQcmVjZWRl cyhpbnQgcGFnZTEsIGludCBwYWdlMikKIAkJCQkJCQkJbXVsdGkyICsgTVVMVElYQUNUX09GRlNF VFNfUEVSX1BBR0UgLSAxKSk7CiB9CiAKLS8qCi0gKiBEZWNpZGUgd2hldGhlciBhIE11bHRpWGFj dE1lbWJlciBwYWdlIG51bWJlciBpcyAib2xkZXIiIGZvciB0cnVuY2F0aW9uCi0gKiBwdXJwb3Nl cy4gIFRoZXJlIGlzIG5vICJpbnZhbGlkIG9mZnNldCBudW1iZXIiIHNvIHVzZSB0aGUgbnVtYmVy cyB2ZXJiYXRpbS4KLSAqLwotc3RhdGljIGJvb2wKLU11bHRpWGFjdE1lbWJlclBhZ2VQcmVjZWRl cyhpbnQgcGFnZTEsIGludCBwYWdlMikKLXsKLQlNdWx0aVhhY3RPZmZzZXQgb2Zmc2V0MTsKLQlN dWx0aVhhY3RPZmZzZXQgb2Zmc2V0MjsKLQotCW9mZnNldDEgPSAoKE11bHRpWGFjdE9mZnNldCkg cGFnZTEpICogTVVMVElYQUNUX01FTUJFUlNfUEVSX1BBR0U7Ci0Jb2Zmc2V0MiA9ICgoTXVsdGlY YWN0T2Zmc2V0KSBwYWdlMikgKiBNVUxUSVhBQ1RfTUVNQkVSU19QRVJfUEFHRTsKLQotCXJldHVy biAoTXVsdGlYYWN0T2Zmc2V0UHJlY2VkZXMob2Zmc2V0MSwgb2Zmc2V0MikgJiYKLQkJCU11bHRp WGFjdE9mZnNldFByZWNlZGVzKG9mZnNldDEsCi0JCQkJCQkJCQlvZmZzZXQyICsgTVVMVElYQUNU X01FTUJFUlNfUEVSX1BBR0UgLSAxKSk7Ci19Ci0KIC8qCiAgKiBEZWNpZGUgd2hpY2ggb2YgdHdv IE11bHRpWGFjdElkcyBpcyBlYXJsaWVyLgogICoKQEAgLTMxOTEsMTQgKzMxMTcsMTggQEAgTXVs dGlYYWN0T2Zmc2V0UHJlY2VkZXMoTXVsdGlYYWN0T2Zmc2V0IG9mZnNldDEsIE11bHRpWGFjdE9m ZnNldCBvZmZzZXQyKQogCiAvKgogICogV3JpdGUgYW4geGxvZyByZWNvcmQgcmVmbGVjdGluZyB0 aGUgemVyb2luZyBvZiBlaXRoZXIgYSBNRU1CRVJzIG9yCi0gKiBPRkZTRVRzIHBhZ2UgKGluZm8g c2hvd3Mgd2hpY2gpCisgKiBPRkZTRVRzIHBhZ2UgKGluZm8gc2hvd3Mgd2hpY2gpLCBhbmQgcmV0 dXJuIHRoZSBjb3JyZXNwb25kaW5nIGxzbi4KICAqLwotc3RhdGljIHZvaWQKK3N0YXRpYyBYTG9n UmVjUHRyIAogV3JpdGVNWmVyb1BhZ2VYbG9nUmVjKGludCBwYWdlbm8sIHVpbnQ4IGluZm8pCiB7 CisJWExvZ1JlY1B0ciBsc247CisJCiAJWExvZ0JlZ2luSW5zZXJ0KCk7CiAJWExvZ1JlZ2lzdGVy RGF0YSgoY2hhciAqKSAoJnBhZ2VubyksIHNpemVvZihpbnQpKTsKLQkodm9pZCkgWExvZ0luc2Vy dChSTV9NVUxUSVhBQ1RfSUQsIGluZm8pOworCWxzbiA9IFhMb2dJbnNlcnQoUk1fTVVMVElYQUNU X0lELCBpbmZvKTsKKworCXJldHVybiBsc247CiB9CiAKIC8qCkBAIC0zMjQzLDMyICszMTczLDE4 IEBAIG11bHRpeGFjdF9yZWRvKFhMb2dSZWFkZXJTdGF0ZSAqcmVjb3JkKQogCWlmIChpbmZvID09 IFhMT0dfTVVMVElYQUNUX1pFUk9fT0ZGX1BBR0UpCiAJewogCQlpbnQJCQlwYWdlbm87Ci0JCWlu dAkJCXNsb3RubzsKIAogCQltZW1jcHkoJnBhZ2VubywgWExvZ1JlY0dldERhdGEocmVjb3JkKSwg c2l6ZW9mKGludCkpOwogCi0JCUxXTG9ja0FjcXVpcmUoTXVsdGlYYWN0T2Zmc2V0U0xSVUxvY2ss IExXX0VYQ0xVU0lWRSk7Ci0KLQkJc2xvdG5vID0gWmVyb011bHRpWGFjdE9mZnNldFBhZ2UocGFn ZW5vLCBmYWxzZSk7Ci0JCVNpbXBsZUxydVdyaXRlUGFnZShNdWx0aVhhY3RPZmZzZXRDdGwsIHNs b3Rubyk7Ci0JCUFzc2VydCghTXVsdGlYYWN0T2Zmc2V0Q3RsLT5zaGFyZWQtPnBhZ2VfZGlydHlb c2xvdG5vXSk7Ci0KLQkJTFdMb2NrUmVsZWFzZShNdWx0aVhhY3RPZmZzZXRTTFJVTG9jayk7CisJ CVVubG9ja1JlbGVhc2VCdWZmZXIoWmVyb011bHRpWGFjdE9mZnNldFBhZ2UocGFnZW5vLCBmYWxz ZSkpOwogCX0KIAllbHNlIGlmIChpbmZvID09IFhMT0dfTVVMVElYQUNUX1pFUk9fTUVNX1BBR0Up CiAJewogCQlpbnQJCQlwYWdlbm87Ci0JCWludAkJCXNsb3RubzsKIAogCQltZW1jcHkoJnBhZ2Vu bywgWExvZ1JlY0dldERhdGEocmVjb3JkKSwgc2l6ZW9mKGludCkpOwogCi0JCUxXTG9ja0FjcXVp cmUoTXVsdGlYYWN0TWVtYmVyU0xSVUxvY2ssIExXX0VYQ0xVU0lWRSk7Ci0KLQkJc2xvdG5vID0g WmVyb011bHRpWGFjdE1lbWJlclBhZ2UocGFnZW5vLCBmYWxzZSk7Ci0JCVNpbXBsZUxydVdyaXRl UGFnZShNdWx0aVhhY3RNZW1iZXJDdGwsIHNsb3Rubyk7Ci0JCUFzc2VydCghTXVsdGlYYWN0TWVt YmVyQ3RsLT5zaGFyZWQtPnBhZ2VfZGlydHlbc2xvdG5vXSk7Ci0KLQkJTFdMb2NrUmVsZWFzZShN dWx0aVhhY3RNZW1iZXJTTFJVTG9jayk7CisJCVVubG9ja1JlbGVhc2VCdWZmZXIoWmVyb011bHRp WGFjdE1lbWJlclBhZ2UocGFnZW5vLCBmYWxzZSkpOwogCX0KIAllbHNlIGlmIChpbmZvID09IFhM T0dfTVVMVElYQUNUX0NSRUFURV9JRCkKIAl7CkBAIC0zMzAyLDcgKzMyMTgsNiBAQCBtdWx0aXhh Y3RfcmVkbyhYTG9nUmVhZGVyU3RhdGUgKnJlY29yZCkKIAllbHNlIGlmIChpbmZvID09IFhMT0df TVVMVElYQUNUX1RSVU5DQVRFX0lEKQogCXsKIAkJeGxfbXVsdGl4YWN0X3RydW5jYXRlIHhscmVj OwotCQlpbnQJCQlwYWdlbm87CiAKIAkJbWVtY3B5KCZ4bHJlYywgWExvZ1JlY0dldERhdGEocmVj b3JkKSwKIAkJCSAgIFNpemVPZk11bHRpWGFjdFRydW5jYXRlKTsKQEAgLTMzMjgsMTMgKzMyNDMs NiBAQCBtdWx0aXhhY3RfcmVkbyhYTG9nUmVhZGVyU3RhdGUgKnJlY29yZCkKIAogCQlQZXJmb3Jt TWVtYmVyc1RydW5jYXRpb24oeGxyZWMuc3RhcnRUcnVuY01lbWIsIHhscmVjLmVuZFRydW5jTWVt Yik7CiAKLQkJLyoKLQkJICogRHVyaW5nIFhMT0cgcmVwbGF5LCBsYXRlc3RfcGFnZV9udW1iZXIg aXNuJ3QgbmVjZXNzYXJpbHkgc2V0IHVwCi0JCSAqIHlldDsgaW5zZXJ0IGEgc3VpdGFibGUgdmFs dWUgdG8gYnlwYXNzIHRoZSBzYW5pdHkgdGVzdCBpbgotCQkgKiBTaW1wbGVMcnVUcnVuY2F0ZS4K LQkJICovCi0JCXBhZ2VubyA9IE11bHRpWGFjdElkVG9PZmZzZXRQYWdlKHhscmVjLmVuZFRydW5j T2ZmKTsKLQkJTXVsdGlYYWN0T2Zmc2V0Q3RsLT5zaGFyZWQtPmxhdGVzdF9wYWdlX251bWJlciA9 IHBhZ2VubzsKIAkJUGVyZm9ybU9mZnNldHNUcnVuY2F0aW9uKHhscmVjLnN0YXJ0VHJ1bmNPZmYs IHhscmVjLmVuZFRydW5jT2ZmKTsKIAogCQlMV0xvY2tSZWxlYXNlKE11bHRpWGFjdFRydW5jYXRp b25Mb2NrKTsKQEAgLTM0MDcsMjEgKzMzMTUsMyBAQCBwZ19nZXRfbXVsdGl4YWN0X21lbWJlcnMo UEdfRlVOQ1RJT05fQVJHUykKIAogCVNSRl9SRVRVUk5fRE9ORShmdW5jY3h0KTsKIH0KLQotLyoK LSAqIEVudHJ5cG9pbnQgZm9yIHN5bmMuYyB0byBzeW5jIG9mZnNldHMgZmlsZXMuCi0gKi8KLWlu dAotbXVsdGl4YWN0b2Zmc2V0c3N5bmNmaWxldGFnKGNvbnN0IEZpbGVUYWcgKmZ0YWcsIGNoYXIg KnBhdGgpCi17Ci0JcmV0dXJuIFNscnVTeW5jRmlsZVRhZyhNdWx0aVhhY3RPZmZzZXRDdGwsIGZ0 YWcsIHBhdGgpOwotfQotCi0vKgotICogRW50cnlwb2ludCBmb3Igc3luYy5jIHRvIHN5bmMgbWVt YmVycyBmaWxlcy4KLSAqLwotaW50Ci1tdWx0aXhhY3RtZW1iZXJzc3luY2ZpbGV0YWcoY29uc3Qg RmlsZVRhZyAqZnRhZywgY2hhciAqcGF0aCkKLXsKLQlyZXR1cm4gU2xydVN5bmNGaWxlVGFnKE11 bHRpWGFjdE1lbWJlckN0bCwgZnRhZywgcGF0aCk7Ci19CmRpZmYgLS1naXQgYS9zcmMvYmFja2Vu ZC9hY2Nlc3MvdHJhbnNhbS9zbHJ1LmMgYi9zcmMvYmFja2VuZC9hY2Nlc3MvdHJhbnNhbS9zbHJ1 LmMKaW5kZXggYjY1Y2I0OWQ3ZmYuLjU5ODE0YTE3YzIxIDEwMDY0NAotLS0gYS9zcmMvYmFja2Vu ZC9hY2Nlc3MvdHJhbnNhbS9zbHJ1LmMKKysrIGIvc3JjL2JhY2tlbmQvYWNjZXNzL3RyYW5zYW0v c2xydS5jCkBAIC0xLDQxICsxLDkgQEAKIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogICoKICAqIHNscnUu YwotICoJCVNpbXBsZSBMUlUgYnVmZmVyaW5nIGZvciB0cmFuc2FjdGlvbiBzdGF0dXMgbG9nZmls ZXMKKyAqCQlTaW1wbGUgYnVmZmVyaW5nIGZvciB0cmFuc2FjdGlvbiBzdGF0dXMgbG9nZmlsZXMK ICAqCi0gKiBXZSB1c2UgYSBzaW1wbGUgbGVhc3QtcmVjZW50bHktdXNlZCBzY2hlbWUgdG8gbWFu YWdlIGEgcG9vbCBvZiBwYWdlCi0gKiBidWZmZXJzLiAgVW5kZXIgb3JkaW5hcnkgY2lyY3Vtc3Rh bmNlcyB3ZSBleHBlY3QgdGhhdCB3cml0ZQotICogdHJhZmZpYyB3aWxsIG9jY3VyIG1vc3RseSB0 byB0aGUgbGF0ZXN0IHBhZ2UgKGFuZCB0byB0aGUganVzdC1wcmlvcgotICogcGFnZSwgc29vbiBh ZnRlciBhIHBhZ2UgdHJhbnNpdGlvbikuICBSZWFkIHRyYWZmaWMgd2lsbCBwcm9iYWJseSB0b3Vj aAotICogYSBsYXJnZXIgc3BhbiBvZiBwYWdlcywgYnV0IGluIGFueSBjYXNlIGEgZmFpcmx5IHNt YWxsIG51bWJlciBvZiBwYWdlCi0gKiBidWZmZXJzIHNob3VsZCBiZSBzdWZmaWNpZW50LiAgU28s IHdlIGp1c3Qgc2VhcmNoIHRoZSBidWZmZXJzIHVzaW5nIHBsYWluCi0gKiBsaW5lYXIgc2VhcmNo OyB0aGVyZSdzIG5vIG5lZWQgZm9yIGEgaGFzaHRhYmxlIG9yIGFueXRoaW5nIGZhbmN5LgotICog VGhlIG1hbmFnZW1lbnQgYWxnb3JpdGhtIGlzIHN0cmFpZ2h0IExSVSBleGNlcHQgdGhhdCB3ZSB3 aWxsIG5ldmVyIHN3YXAKLSAqIG91dCB0aGUgbGF0ZXN0IHBhZ2UgKHNpbmNlIHdlIGtub3cgaXQn cyBnb2luZyB0byBiZSBoaXQgYWdhaW4gZXZlbnR1YWxseSkuCi0gKgotICogV2UgdXNlIGEgY29u dHJvbCBMV0xvY2sgdG8gcHJvdGVjdCB0aGUgc2hhcmVkIGRhdGEgc3RydWN0dXJlcywgcGx1cwot ICogcGVyLWJ1ZmZlciBMV0xvY2tzIHRoYXQgc3luY2hyb25pemUgSS9PIGZvciBlYWNoIGJ1ZmZl ci4gIFRoZSBjb250cm9sIGxvY2sKLSAqIG11c3QgYmUgaGVsZCB0byBleGFtaW5lIG9yIG1vZGlm eSBhbnkgc2hhcmVkIHN0YXRlLiAgQSBwcm9jZXNzIHRoYXQgaXMKLSAqIHJlYWRpbmcgaW4gb3Ig d3JpdGluZyBvdXQgYSBwYWdlIGJ1ZmZlciBkb2VzIG5vdCBob2xkIHRoZSBjb250cm9sIGxvY2ss Ci0gKiBvbmx5IHRoZSBwZXItYnVmZmVyIGxvY2sgZm9yIHRoZSBidWZmZXIgaXQgaXMgd29ya2lu ZyBvbi4KLSAqCi0gKiAiSG9sZGluZyB0aGUgY29udHJvbCBsb2NrIiBtZWFucyBleGNsdXNpdmUg bG9jayBpbiBhbGwgY2FzZXMgZXhjZXB0IGZvcgotICogU2ltcGxlTHJ1UmVhZFBhZ2VfUmVhZE9u bHkoKTsgc2VlIGNvbW1lbnRzIGZvciBTbHJ1UmVjZW50bHlVc2VkKCkgZm9yCi0gKiB0aGUgaW1w bGljYXRpb25zIG9mIHRoYXQuCi0gKgotICogV2hlbiBpbml0aWF0aW5nIEkvTyBvbiBhIGJ1ZmZl ciwgd2UgYWNxdWlyZSB0aGUgcGVyLWJ1ZmZlciBsb2NrIGV4Y2x1c2l2ZWx5Ci0gKiBiZWZvcmUg cmVsZWFzaW5nIHRoZSBjb250cm9sIGxvY2suICBUaGUgcGVyLWJ1ZmZlciBsb2NrIGlzIHJlbGVh c2VkIGFmdGVyCi0gKiBjb21wbGV0aW5nIHRoZSBJL08sIHJlLWFjcXVpcmluZyB0aGUgY29udHJv bCBsb2NrLCBhbmQgdXBkYXRpbmcgdGhlIHNoYXJlZAotICogc3RhdGUuICAoRGVhZGxvY2sgaXMg bm90IHBvc3NpYmxlIGhlcmUsIGJlY2F1c2Ugd2UgbmV2ZXIgdHJ5IHRvIGluaXRpYXRlCi0gKiBJ L08gd2hlbiBzb21lb25lIGVsc2UgaXMgYWxyZWFkeSBkb2luZyBJL08gb24gdGhlIHNhbWUgYnVm ZmVyLikKLSAqIFRvIHdhaXQgZm9yIEkvTyB0byBjb21wbGV0ZSwgcmVsZWFzZSB0aGUgY29udHJv bCBsb2NrLCBhY3F1aXJlIHRoZQotICogcGVyLWJ1ZmZlciBsb2NrIGluIHNoYXJlZCBtb2RlLCBp bW1lZGlhdGVseSByZWxlYXNlIHRoZSBwZXItYnVmZmVyIGxvY2ssCi0gKiByZWFjcXVpcmUgdGhl IGNvbnRyb2wgbG9jaywgYW5kIHRoZW4gcmVjaGVjayBzdGF0ZSAoc2luY2UgYXJiaXRyYXJ5IHRo aW5ncwotICogY291bGQgaGF2ZSBoYXBwZW5lZCB3aGlsZSB3ZSBkaWRuJ3QgaGF2ZSB0aGUgbG9j aykuCi0gKgotICogQXMgd2l0aCB0aGUgcmVndWxhciBidWZmZXIgbWFuYWdlciwgaXQgaXMgcG9z c2libGUgZm9yIGFub3RoZXIgcHJvY2VzcwotICogdG8gcmUtZGlydHkgYSBwYWdlIHRoYXQgaXMg Y3VycmVudGx5IGJlaW5nIHdyaXR0ZW4gb3V0LiAgVGhpcyBpcyBoYW5kbGVkCi0gKiBieSByZS1z ZXR0aW5nIHRoZSBwYWdlJ3MgcGFnZV9kaXJ0eSBmbGFnLgorICogWFhYIHdyaXRlIG1lCiAgKgog ICoKICAqIFBvcnRpb25zIENvcHlyaWdodCAoYykgMTk5Ni0yMDIyLCBQb3N0Z3JlU1FMIEdsb2Jh bCBEZXZlbG9wbWVudCBHcm91cApAQCAtNjAsNTYxICsyOCwzNCBAQAogI2luY2x1ZGUgInN0b3Jh Z2UvZmQuaCIKICNpbmNsdWRlICJzdG9yYWdlL3NobWVtLmgiCiAKLSNkZWZpbmUgU2xydUZpbGVO YW1lKGN0bCwgcGF0aCwgc2VnKSBcCi0Jc25wcmludGYocGF0aCwgTUFYUEdQQVRILCAiJXMvJTA0 WCIsIChjdGwpLT5EaXIsIHNlZykKLQogLyoKLSAqIER1cmluZyBTaW1wbGVMcnVXcml0ZUFsbCgp LCB3ZSB3aWxsIHVzdWFsbHkgbm90IG5lZWQgdG8gd3JpdGUgbW9yZSB0aGFuIG9uZQotICogb3Ig dHdvIHBoeXNpY2FsIGZpbGVzLCBidXQgd2UgbWF5IG5lZWQgdG8gd3JpdGUgc2V2ZXJhbCBwYWdl cyBwZXIgZmlsZS4gIFdlCi0gKiBjYW4gY29uc29saWRhdGUgdGhlIEkvTyByZXF1ZXN0cyBieSBs ZWF2aW5nIGZpbGVzIG9wZW4gdW50aWwgY29udHJvbCByZXR1cm5zCi0gKiB0byBTaW1wbGVMcnVX cml0ZUFsbCgpLiAgVGhpcyBkYXRhIHN0cnVjdHVyZSByZW1lbWJlcnMgd2hpY2ggZmlsZXMgYXJl IG9wZW4uCisgKiBTTFJVIElEIHRvIHBhdGggbWFwcGluZwogICovCi0jZGVmaW5lIE1BWF9XUklU RUFMTF9CVUZGRVJTCTE2CisjZGVmaW5lIFBHX1NMUlUoc3ltbmFtZSxuYW1lLHBhdGgsc3luY2hy b25pemUpIFwKKwlwYXRoLAogCi10eXBlZGVmIHN0cnVjdCBTbHJ1V3JpdGVBbGxEYXRhCitzdGF0 aWMgY2hhciAqc2xydV9kaXJzW10gPQogewotCWludAkJCW51bV9maWxlczsJCS8qICMgZmlsZXMg YWN0dWFsbHkgb3BlbiAqLwotCWludAkJCWZkW01BWF9XUklURUFMTF9CVUZGRVJTXTsJLyogdGhl aXIgRkQncyAqLwotCWludAkJCXNlZ25vW01BWF9XUklURUFMTF9CVUZGRVJTXTsJLyogdGhlaXIg bG9nIHNlZyNzICovCi19IFNscnVXcml0ZUFsbERhdGE7Ci0KLXR5cGVkZWYgc3RydWN0IFNscnVX cml0ZUFsbERhdGEgKlNscnVXcml0ZUFsbDsKKyNpbmNsdWRlICJhY2Nlc3Mvc2xydWxpc3QuaCIK K307CiAKIC8qCi0gKiBQb3B1bGF0ZSBhIGZpbGUgdGFnIGRlc2NyaWJpbmcgYSBzZWdtZW50IGZp bGUuICBXZSBvbmx5IHVzZSB0aGUgc2VnbWVudAotICogbnVtYmVyLCBzaW5jZSB3ZSBjYW4gZGVy aXZlIGV2ZXJ5dGhpbmcgZWxzZSB3ZSBuZWVkIGJ5IGhhdmluZyBzZXBhcmF0ZQotICogc3luYyBo YW5kbGVyIGZ1bmN0aW9ucyBmb3IgY2xvZywgbXVsdGl4YWN0IGV0Yy4KKyAqIFdlJ2xsIG1haW50 YWluIGEgbGl0dGxlIGNhY2hlIG9mIHJlY2VudGx5IHNlZW4gYnVmZmVycywgdG8gdHJ5IHRvIGF2 b2lkIHRoZQorICogYnVmZmVyIG1hcHBpbmcgdGFibGUgb24gcmVwZWF0IGFjY2VzcyAoaWUgdGhl IGJ1c3kgZW5kIG9mIHRoZSBDTE9HKS4gIE9uZQorICogZW50cnkgcGVyIFNMUlUuCiAgKi8KLSNk ZWZpbmUgSU5JVF9TTFJVRklMRVRBRyhhLHh4X2hhbmRsZXIseHhfc2Vnbm8pIFwKLSggXAotCW1l bXNldCgmKGEpLCAwLCBzaXplb2YoRmlsZVRhZykpLCBcCi0JKGEpLmhhbmRsZXIgPSAoeHhfaGFu ZGxlciksIFwKLQkoYSkuc2Vnbm8gPSAoeHhfc2Vnbm8pIFwKLSkKLQotLyoKLSAqIE1hY3JvIHRv IG1hcmsgYSBidWZmZXIgc2xvdCAibW9zdCByZWNlbnRseSB1c2VkIi4gIE5vdGUgbXVsdGlwbGUg ZXZhbHVhdGlvbgotICogb2YgYXJndW1lbnRzIQotICoKLSAqIFRoZSByZWFzb24gZm9yIHRoZSBp Zi10ZXN0IGlzIHRoYXQgdGhlcmUgYXJlIG9mdGVuIG1hbnkgY29uc2VjdXRpdmUKLSAqIGFjY2Vz c2VzIHRvIHRoZSBzYW1lIHBhZ2UgKHBhcnRpY3VsYXJseSB0aGUgbGF0ZXN0IHBhZ2UpLiAgQnkg c3VwcHJlc3NpbmcKLSAqIHVzZWxlc3MgaW5jcmVtZW50cyBvZiBjdXJfbHJ1X2NvdW50LCB3ZSBy ZWR1Y2UgdGhlIHByb2JhYmlsaXR5IHRoYXQgb2xkCi0gKiBwYWdlcycgY291bnRzIHdpbGwgIndy YXAgYXJvdW5kIiBhbmQgbWFrZSB0aGVtIGFwcGVhciByZWNlbnRseSB1c2VkLgotICoKLSAqIFdl IGFsbG93IHRoaXMgY29kZSB0byBiZSBleGVjdXRlZCBjb25jdXJyZW50bHkgYnkgbXVsdGlwbGUg cHJvY2Vzc2VzIHdpdGhpbgotICogU2ltcGxlTHJ1UmVhZFBhZ2VfUmVhZE9ubHkoKS4gIEFzIGxv bmcgYXMgaW50IHJlYWRzIGFuZCB3cml0ZXMgYXJlIGF0b21pYywKLSAqIHRoaXMgc2hvdWxkIG5v dCBjYXVzZSBhbnkgY29tcGxldGVseS1ib2d1cyB2YWx1ZXMgdG8gZW50ZXIgdGhlIGNvbXB1dGF0 aW9uLgotICogSG93ZXZlciwgaXQgaXMgcG9zc2libGUgZm9yIGVpdGhlciBjdXJfbHJ1X2NvdW50 IG9yIGluZGl2aWR1YWwKLSAqIHBhZ2VfbHJ1X2NvdW50IGVudHJpZXMgdG8gYmUgInJlc2V0IiB0 byBsb3dlciB2YWx1ZXMgdGhhbiB0aGV5IHNob3VsZCBoYXZlLAotICogaW4gY2FzZSBhIHByb2Nl c3MgaXMgZGVsYXllZCB3aGlsZSBpdCBleGVjdXRlcyB0aGlzIG1hY3JvLiAgV2l0aCBjYXJlIGlu Ci0gKiBTbHJ1U2VsZWN0TFJVUGFnZSgpLCB0aGlzIGRvZXMgbGl0dGxlIGhhcm0sIGFuZCBpbiBh bnkgY2FzZSB0aGUgYWJzb2x1dGUKLSAqIHdvcnN0IHBvc3NpYmxlIGNvbnNlcXVlbmNlIGlzIGEg bm9ub3B0aW1hbCBjaG9pY2Ugb2YgcGFnZSB0byBldmljdC4gIFRoZQotICogZ2FpbiBmcm9tIGFs bG93aW5nIGNvbmN1cnJlbnQgcmVhZHMgb2YgU0xSVSBwYWdlcyBzZWVtcyB3b3J0aCBpdC4KLSAq LwotI2RlZmluZSBTbHJ1UmVjZW50bHlVc2VkKHNoYXJlZCwgc2xvdG5vKQlcCi0JZG8geyBcCi0J CWludAkJbmV3X2xydV9jb3VudCA9IChzaGFyZWQpLT5jdXJfbHJ1X2NvdW50OyBcCi0JCWlmIChu ZXdfbHJ1X2NvdW50ICE9IChzaGFyZWQpLT5wYWdlX2xydV9jb3VudFtzbG90bm9dKSB7IFwKLQkJ CShzaGFyZWQpLT5jdXJfbHJ1X2NvdW50ID0gKytuZXdfbHJ1X2NvdW50OyBcCi0JCQkoc2hhcmVk KS0+cGFnZV9scnVfY291bnRbc2xvdG5vXSA9IG5ld19scnVfY291bnQ7IFwKLQkJfSBcCi0JfSB3 aGlsZSAoMCkKLQotLyogU2F2ZWQgaW5mbyBmb3IgU2xydVJlcG9ydElPRXJyb3IgKi8KLXR5cGVk ZWYgZW51bQotewotCVNMUlVfT1BFTl9GQUlMRUQsCi0JU0xSVV9TRUVLX0ZBSUxFRCwKLQlTTFJV X1JFQURfRkFJTEVELAotCVNMUlVfV1JJVEVfRkFJTEVELAotCVNMUlVfRlNZTkNfRkFJTEVELAot CVNMUlVfQ0xPU0VfRkFJTEVECi19IFNscnVFcnJvckNhdXNlOworc3RydWN0IFNscnVSZWNlbnRC dWZmZXIgeworCWludAkJCXBhZ2VubzsKKwlCdWZmZXIJCXJlY2VudF9idWZmZXI7Cit9OwogCi1z dGF0aWMgU2xydUVycm9yQ2F1c2Ugc2xydV9lcnJjYXVzZTsKLXN0YXRpYyBpbnQJc2xydV9lcnJu bzsKK3N0YXRpYyBzdHJ1Y3QgU2xydVJlY2VudEJ1ZmZlciBzbHJ1X3JlY2VudF9idWZmZXJzW1NM UlVfTkVYVF9JRF07CiAKLQotc3RhdGljIHZvaWQgU2ltcGxlTHJ1WmVyb0xTTnMoU2xydUN0bCBj dGwsIGludCBzbG90bm8pOwotc3RhdGljIHZvaWQgU2ltcGxlTHJ1V2FpdElPKFNscnVDdGwgY3Rs LCBpbnQgc2xvdG5vKTsKLXN0YXRpYyB2b2lkIFNscnVJbnRlcm5hbFdyaXRlUGFnZShTbHJ1Q3Rs IGN0bCwgaW50IHNsb3RubywgU2xydVdyaXRlQWxsIGZkYXRhKTsKLXN0YXRpYyBib29sIFNscnVQ aHlzaWNhbFJlYWRQYWdlKFNscnVDdGwgY3RsLCBpbnQgcGFnZW5vLCBpbnQgc2xvdG5vKTsKLXN0 YXRpYyBib29sIFNscnVQaHlzaWNhbFdyaXRlUGFnZShTbHJ1Q3RsIGN0bCwgaW50IHBhZ2Vubywg aW50IHNsb3RubywKLQkJCQkJCQkJICBTbHJ1V3JpdGVBbGwgZmRhdGEpOwotc3RhdGljIHZvaWQg U2xydVJlcG9ydElPRXJyb3IoU2xydUN0bCBjdGwsIGludCBwYWdlbm8sIFRyYW5zYWN0aW9uSWQg eGlkKTsKLXN0YXRpYyBpbnQJU2xydVNlbGVjdExSVVBhZ2UoU2xydUN0bCBjdGwsIGludCBwYWdl bm8pOwotCi1zdGF0aWMgYm9vbCBTbHJ1U2NhbkRpckNiRGVsZXRlQ3V0b2ZmKFNscnVDdGwgY3Rs LCBjaGFyICpmaWxlbmFtZSwKK3N0YXRpYyBib29sIFNscnVTY2FuRGlyQ2JEZWxldGVDdXRvZmYo aW50IHNscnVfaWQsCisJCQkJCQkJCQkgIFNscnVQYWdlUHJlY2VkZXNGdW5jdGlvbiBQYWdlUHJl Y2VkZXMsCisJCQkJCQkJCQkgIGNoYXIgKmZpbGVuYW1lLAogCQkJCQkJCQkJICBpbnQgc2VncGFn ZSwgdm9pZCAqZGF0YSk7Ci1zdGF0aWMgdm9pZCBTbHJ1SW50ZXJuYWxEZWxldGVTZWdtZW50KFNs cnVDdGwgY3RsLCBpbnQgc2Vnbm8pOwotCi0vKgotICogSW5pdGlhbGl6YXRpb24gb2Ygc2hhcmVk IG1lbW9yeQotICovCi0KLVNpemUKLVNpbXBsZUxydVNobWVtU2l6ZShpbnQgbnNsb3RzLCBpbnQg bmxzbnMpCi17Ci0JU2l6ZQkJc3o7Ci0KLQkvKiB3ZSBhc3N1bWUgbnNsb3RzIGlzbid0IHNvIGxh cmdlIGFzIHRvIHJpc2sgb3ZlcmZsb3cgKi8KLQlzeiA9IE1BWEFMSUdOKHNpemVvZihTbHJ1U2hh cmVkRGF0YSkpOwotCXN6ICs9IE1BWEFMSUdOKG5zbG90cyAqIHNpemVvZihjaGFyICopKTsJLyog cGFnZV9idWZmZXJbXSAqLwotCXN6ICs9IE1BWEFMSUdOKG5zbG90cyAqIHNpemVvZihTbHJ1UGFn ZVN0YXR1cykpOwkvKiBwYWdlX3N0YXR1c1tdICovCi0Jc3ogKz0gTUFYQUxJR04obnNsb3RzICog c2l6ZW9mKGJvb2wpKTsJLyogcGFnZV9kaXJ0eVtdICovCi0Jc3ogKz0gTUFYQUxJR04obnNsb3Rz ICogc2l6ZW9mKGludCkpOwkvKiBwYWdlX251bWJlcltdICovCi0Jc3ogKz0gTUFYQUxJR04obnNs b3RzICogc2l6ZW9mKGludCkpOwkvKiBwYWdlX2xydV9jb3VudFtdICovCi0Jc3ogKz0gTUFYQUxJ R04obnNsb3RzICogc2l6ZW9mKExXTG9ja1BhZGRlZCkpOwkvKiBidWZmZXJfbG9ja3NbXSAqLwot Ci0JaWYgKG5sc25zID4gMCkKLQkJc3ogKz0gTUFYQUxJR04obnNsb3RzICogbmxzbnMgKiBzaXpl b2YoWExvZ1JlY1B0cikpOwkvKiBncm91cF9sc25bXSAqLwotCi0JcmV0dXJuIEJVRkZFUkFMSUdO KHN6KSArIEJMQ0tTWiAqIG5zbG90czsKLX0KLQotLyoKLSAqIEluaXRpYWxpemUsIG9yIGF0dGFj aCB0bywgYSBzaW1wbGUgTFJVIGNhY2hlIGluIHNoYXJlZCBtZW1vcnkuCi0gKgotICogY3RsOiBh ZGRyZXNzIG9mIGxvY2FsICh1bnNoYXJlZCkgY29udHJvbCBzdHJ1Y3R1cmUuCi0gKiBuYW1lOiBu YW1lIG9mIFNMUlUuICAoVGhpcyBpcyB1c2VyLXZpc2libGUsIHBpY2sgd2l0aCBjYXJlISkKLSAq IG5zbG90czogbnVtYmVyIG9mIHBhZ2Ugc2xvdHMgdG8gdXNlLgotICogbmxzbnM6IG51bWJlciBv ZiBMU04gZ3JvdXBzIHBlciBwYWdlIChzZXQgdG8gemVybyBpZiBub3QgcmVsZXZhbnQpLgotICog Y3RsbG9jazogTFdMb2NrIHRvIHVzZSB0byBjb250cm9sIGFjY2VzcyB0byB0aGUgc2hhcmVkIGNv bnRyb2wgc3RydWN0dXJlLgotICogc3ViZGlyOiBQR0RBVEEtcmVsYXRpdmUgc3ViZGlyZWN0b3J5 IHRoYXQgd2lsbCBjb250YWluIHRoZSBmaWxlcy4KLSAqIHRyYW5jaGVfaWQ6IExXTG9jayB0cmFu Y2hlIElEIHRvIHVzZSBmb3IgdGhlIFNMUlUncyBwZXItYnVmZmVyIExXTG9ja3MuCi0gKi8KLXZv aWQKLVNpbXBsZUxydUluaXQoU2xydUN0bCBjdGwsIGNvbnN0IGNoYXIgKm5hbWUsIGludCBuc2xv dHMsIGludCBubHNucywKLQkJCSAgTFdMb2NrICpjdGxsb2NrLCBjb25zdCBjaGFyICpzdWJkaXIs IGludCB0cmFuY2hlX2lkLAotCQkJICBTeW5jUmVxdWVzdEhhbmRsZXIgc3luY19oYW5kbGVyKQot ewotCVNscnVTaGFyZWQJc2hhcmVkOwotCWJvb2wJCWZvdW5kOwotCi0Jc2hhcmVkID0gKFNscnVT aGFyZWQpIFNobWVtSW5pdFN0cnVjdChuYW1lLAotCQkJCQkJCQkJCSAgU2ltcGxlTHJ1U2htZW1T aXplKG5zbG90cywgbmxzbnMpLAotCQkJCQkJCQkJCSAgJmZvdW5kKTsKLQotCWlmICghSXNVbmRl clBvc3RtYXN0ZXIpCi0JewotCQkvKiBJbml0aWFsaXplIGxvY2tzIGFuZCBzaGFyZWQgbWVtb3J5 IGFyZWEgKi8KLQkJY2hhcgkgICAqcHRyOwotCQlTaXplCQlvZmZzZXQ7Ci0JCWludAkJCXNsb3Ru bzsKLQotCQlBc3NlcnQoIWZvdW5kKTsKLQotCQltZW1zZXQoc2hhcmVkLCAwLCBzaXplb2YoU2xy dVNoYXJlZERhdGEpKTsKLQotCQlzaGFyZWQtPkNvbnRyb2xMb2NrID0gY3RsbG9jazsKLQotCQlz aGFyZWQtPm51bV9zbG90cyA9IG5zbG90czsKLQkJc2hhcmVkLT5sc25fZ3JvdXBzX3Blcl9wYWdl ID0gbmxzbnM7Ci0KLQkJc2hhcmVkLT5jdXJfbHJ1X2NvdW50ID0gMDsKLQotCQkvKiBzaGFyZWQt PmxhdGVzdF9wYWdlX251bWJlciB3aWxsIGJlIHNldCBsYXRlciAqLwotCi0JCXNoYXJlZC0+c2xy dV9zdGF0c19pZHggPSBwZ3N0YXRfZ2V0X3NscnVfaW5kZXgobmFtZSk7Ci0KLQkJcHRyID0gKGNo YXIgKikgc2hhcmVkOwotCQlvZmZzZXQgPSBNQVhBTElHTihzaXplb2YoU2xydVNoYXJlZERhdGEp KTsKLQkJc2hhcmVkLT5wYWdlX2J1ZmZlciA9IChjaGFyICoqKSAocHRyICsgb2Zmc2V0KTsKLQkJ b2Zmc2V0ICs9IE1BWEFMSUdOKG5zbG90cyAqIHNpemVvZihjaGFyICopKTsKLQkJc2hhcmVkLT5w YWdlX3N0YXR1cyA9IChTbHJ1UGFnZVN0YXR1cyAqKSAocHRyICsgb2Zmc2V0KTsKLQkJb2Zmc2V0 ICs9IE1BWEFMSUdOKG5zbG90cyAqIHNpemVvZihTbHJ1UGFnZVN0YXR1cykpOwotCQlzaGFyZWQt PnBhZ2VfZGlydHkgPSAoYm9vbCAqKSAocHRyICsgb2Zmc2V0KTsKLQkJb2Zmc2V0ICs9IE1BWEFM SUdOKG5zbG90cyAqIHNpemVvZihib29sKSk7Ci0JCXNoYXJlZC0+cGFnZV9udW1iZXIgPSAoaW50 ICopIChwdHIgKyBvZmZzZXQpOwotCQlvZmZzZXQgKz0gTUFYQUxJR04obnNsb3RzICogc2l6ZW9m KGludCkpOwotCQlzaGFyZWQtPnBhZ2VfbHJ1X2NvdW50ID0gKGludCAqKSAocHRyICsgb2Zmc2V0 KTsKLQkJb2Zmc2V0ICs9IE1BWEFMSUdOKG5zbG90cyAqIHNpemVvZihpbnQpKTsKLQotCQkvKiBJ bml0aWFsaXplIExXTG9ja3MgKi8KLQkJc2hhcmVkLT5idWZmZXJfbG9ja3MgPSAoTFdMb2NrUGFk ZGVkICopIChwdHIgKyBvZmZzZXQpOwotCQlvZmZzZXQgKz0gTUFYQUxJR04obnNsb3RzICogc2l6 ZW9mKExXTG9ja1BhZGRlZCkpOwotCi0JCWlmIChubHNucyA+IDApCi0JCXsKLQkJCXNoYXJlZC0+ Z3JvdXBfbHNuID0gKFhMb2dSZWNQdHIgKikgKHB0ciArIG9mZnNldCk7Ci0JCQlvZmZzZXQgKz0g TUFYQUxJR04obnNsb3RzICogbmxzbnMgKiBzaXplb2YoWExvZ1JlY1B0cikpOwotCQl9Ci0KLQkJ cHRyICs9IEJVRkZFUkFMSUdOKG9mZnNldCk7Ci0JCWZvciAoc2xvdG5vID0gMDsgc2xvdG5vIDwg bnNsb3RzOyBzbG90bm8rKykKLQkJewotCQkJTFdMb2NrSW5pdGlhbGl6ZSgmc2hhcmVkLT5idWZm ZXJfbG9ja3Nbc2xvdG5vXS5sb2NrLAotCQkJCQkJCSB0cmFuY2hlX2lkKTsKLQotCQkJc2hhcmVk LT5wYWdlX2J1ZmZlcltzbG90bm9dID0gcHRyOwotCQkJc2hhcmVkLT5wYWdlX3N0YXR1c1tzbG90 bm9dID0gU0xSVV9QQUdFX0VNUFRZOwotCQkJc2hhcmVkLT5wYWdlX2RpcnR5W3Nsb3Rub10gPSBm YWxzZTsKLQkJCXNoYXJlZC0+cGFnZV9scnVfY291bnRbc2xvdG5vXSA9IDA7Ci0JCQlwdHIgKz0g QkxDS1NaOwotCQl9Ci0KLQkJLyogU2hvdWxkIGZpdCB0byBlc3RpbWF0ZWQgc2htZW0gc2l6ZSAq LwotCQlBc3NlcnQocHRyIC0gKGNoYXIgKikgc2hhcmVkIDw9IFNpbXBsZUxydVNobWVtU2l6ZShu c2xvdHMsIG5sc25zKSk7Ci0JfQotCWVsc2UKLQkJQXNzZXJ0KGZvdW5kKTsKLQotCS8qCi0JICog SW5pdGlhbGl6ZSB0aGUgdW5zaGFyZWQgY29udHJvbCBzdHJ1Y3QsIGluY2x1ZGluZyBkaXJlY3Rv cnkgcGF0aC4gV2UKLQkgKiBhc3N1bWUgY2FsbGVyIHNldCBQYWdlUHJlY2VkZXMuCi0JICovCi0J Y3RsLT5zaGFyZWQgPSBzaGFyZWQ7Ci0JY3RsLT5zeW5jX2hhbmRsZXIgPSBzeW5jX2hhbmRsZXI7 Ci0Jc3RybGNweShjdGwtPkRpciwgc3ViZGlyLCBzaXplb2YoY3RsLT5EaXIpKTsKLX0KLQotLyoK LSAqIEluaXRpYWxpemUgKG9yIHJlaW5pdGlhbGl6ZSkgYSBwYWdlIHRvIHplcm9lcy4KLSAqCi0g KiBUaGUgcGFnZSBpcyBub3QgYWN0dWFsbHkgd3JpdHRlbiwganVzdCBzZXQgdXAgaW4gc2hhcmVk IG1lbW9yeS4KLSAqIFRoZSBzbG90IG51bWJlciBvZiB0aGUgbmV3IHBhZ2UgaXMgcmV0dXJuZWQu Ci0gKgotICogQ29udHJvbCBsb2NrIG11c3QgYmUgaGVsZCBhdCBlbnRyeSwgYW5kIHdpbGwgYmUg aGVsZCBhdCBleGl0LgotICovCi1pbnQKLVNpbXBsZUxydVplcm9QYWdlKFNscnVDdGwgY3RsLCBp bnQgcGFnZW5vKQotewotCVNscnVTaGFyZWQJc2hhcmVkID0gY3RsLT5zaGFyZWQ7Ci0JaW50CQkJ c2xvdG5vOwotCi0JLyogRmluZCBhIHN1aXRhYmxlIGJ1ZmZlciBzbG90IGZvciB0aGUgcGFnZSAq LwotCXNsb3RubyA9IFNscnVTZWxlY3RMUlVQYWdlKGN0bCwgcGFnZW5vKTsKLQlBc3NlcnQoc2hh cmVkLT5wYWdlX3N0YXR1c1tzbG90bm9dID09IFNMUlVfUEFHRV9FTVBUWSB8fAotCQkgICAoc2hh cmVkLT5wYWdlX3N0YXR1c1tzbG90bm9dID09IFNMUlVfUEFHRV9WQUxJRCAmJgotCQkJIXNoYXJl ZC0+cGFnZV9kaXJ0eVtzbG90bm9dKSB8fAotCQkgICBzaGFyZWQtPnBhZ2VfbnVtYmVyW3Nsb3Ru b10gPT0gcGFnZW5vKTsKLQotCS8qIE1hcmsgdGhlIHNsb3QgYXMgY29udGFpbmluZyB0aGlzIHBh Z2UgKi8KLQlzaGFyZWQtPnBhZ2VfbnVtYmVyW3Nsb3Rub10gPSBwYWdlbm87Ci0Jc2hhcmVkLT5w YWdlX3N0YXR1c1tzbG90bm9dID0gU0xSVV9QQUdFX1ZBTElEOwotCXNoYXJlZC0+cGFnZV9kaXJ0 eVtzbG90bm9dID0gdHJ1ZTsKLQlTbHJ1UmVjZW50bHlVc2VkKHNoYXJlZCwgc2xvdG5vKTsKLQot CS8qIFNldCB0aGUgYnVmZmVyIHRvIHplcm9lcyAqLwotCU1lbVNldChzaGFyZWQtPnBhZ2VfYnVm ZmVyW3Nsb3Rub10sIDAsIEJMQ0tTWik7Ci0KLQkvKiBTZXQgdGhlIExTTnMgZm9yIHRoaXMgbmV3 IHBhZ2UgdG8gemVybyAqLwotCVNpbXBsZUxydVplcm9MU05zKGN0bCwgc2xvdG5vKTsKLQotCS8q IEFzc3VtZSB0aGlzIHBhZ2UgaXMgbm93IHRoZSBsYXRlc3QgYWN0aXZlIHBhZ2UgKi8KLQlzaGFy ZWQtPmxhdGVzdF9wYWdlX251bWJlciA9IHBhZ2VubzsKLQotCS8qIHVwZGF0ZSB0aGUgc3RhdHMg Y291bnRlciBvZiB6ZXJvZWQgcGFnZXMgKi8KLQlwZ3N0YXRfY291bnRfc2xydV9wYWdlX3plcm9l ZChzaGFyZWQtPnNscnVfc3RhdHNfaWR4KTsKLQotCXJldHVybiBzbG90bm87Ci19Ci0KLS8qCi0g KiBaZXJvIGFsbCB0aGUgTFNOcyB3ZSBzdG9yZSBmb3IgdGhpcyBzbHJ1IHBhZ2UuCi0gKgotICog VGhpcyBzaG91bGQgYmUgY2FsbGVkIGVhY2ggdGltZSB3ZSBjcmVhdGUgYSBuZXcgcGFnZSwgYW5k IGVhY2ggdGltZSB3ZSByZWFkCi0gKiBpbiBhIHBhZ2UgZnJvbSBkaXNrIGludG8gYW4gZXhpc3Rp bmcgYnVmZmVyLiAgKFN1Y2ggYW4gb2xkIHBhZ2UgY2Fubm90Ci0gKiBoYXZlIGFueSBpbnRlcmVz dGluZyBMU05zLCBzaW5jZSB3ZSdkIGhhdmUgZmx1c2hlZCB0aGVtIGJlZm9yZSB3cml0aW5nCi0g KiB0aGUgcGFnZSBpbiB0aGUgZmlyc3QgcGxhY2UuKQotICoKLSAqIFRoaXMgYXNzdW1lcyB0aGF0 IEludmFsaWRYTG9nUmVjUHRyIGlzIGJpdHdpc2UtYWxsLTAuCi0gKi8KLXN0YXRpYyB2b2lkCi1T aW1wbGVMcnVaZXJvTFNOcyhTbHJ1Q3RsIGN0bCwgaW50IHNsb3RubykKLXsKLQlTbHJ1U2hhcmVk CXNoYXJlZCA9IGN0bC0+c2hhcmVkOwotCi0JaWYgKHNoYXJlZC0+bHNuX2dyb3Vwc19wZXJfcGFn ZSA+IDApCi0JCU1lbVNldCgmc2hhcmVkLT5ncm91cF9sc25bc2xvdG5vICogc2hhcmVkLT5sc25f Z3JvdXBzX3Blcl9wYWdlXSwgMCwKLQkJCSAgIHNoYXJlZC0+bHNuX2dyb3Vwc19wZXJfcGFnZSAq IHNpemVvZihYTG9nUmVjUHRyKSk7Ci19Ci0KLS8qCi0gKiBXYWl0IGZvciBhbnkgYWN0aXZlIEkv TyBvbiBhIHBhZ2Ugc2xvdCB0byBmaW5pc2guICAoVGhpcyBkb2VzIG5vdAotICogZ3VhcmFudGVl IHRoYXQgbmV3IEkvTyBoYXNuJ3QgYmVlbiBzdGFydGVkIGJlZm9yZSB3ZSByZXR1cm4sIHRob3Vn aC4KLSAqIEluIGZhY3QgdGhlIHNsb3QgbWlnaHQgbm90IGV2ZW4gY29udGFpbiB0aGUgc2FtZSBw YWdlIGFueW1vcmUuKQotICoKLSAqIENvbnRyb2wgbG9jayBtdXN0IGJlIGhlbGQgYXQgZW50cnks IGFuZCB3aWxsIGJlIGhlbGQgYXQgZXhpdC4KLSAqLwotc3RhdGljIHZvaWQKLVNpbXBsZUxydVdh aXRJTyhTbHJ1Q3RsIGN0bCwgaW50IHNsb3RubykKLXsKLQlTbHJ1U2hhcmVkCXNoYXJlZCA9IGN0 bC0+c2hhcmVkOwotCi0JLyogU2VlIG5vdGVzIGF0IHRvcCBvZiBmaWxlICovCi0JTFdMb2NrUmVs ZWFzZShzaGFyZWQtPkNvbnRyb2xMb2NrKTsKLQlMV0xvY2tBY3F1aXJlKCZzaGFyZWQtPmJ1ZmZl cl9sb2Nrc1tzbG90bm9dLmxvY2ssIExXX1NIQVJFRCk7Ci0JTFdMb2NrUmVsZWFzZSgmc2hhcmVk LT5idWZmZXJfbG9ja3Nbc2xvdG5vXS5sb2NrKTsKLQlMV0xvY2tBY3F1aXJlKHNoYXJlZC0+Q29u dHJvbExvY2ssIExXX0VYQ0xVU0lWRSk7Ci0KLQkvKgotCSAqIElmIHRoZSBzbG90IGlzIHN0aWxs IGluIGFuIGlvLWluLXByb2dyZXNzIHN0YXRlLCB0aGVuIGVpdGhlciBzb21lb25lCi0JICogYWxy ZWFkeSBzdGFydGVkIGEgbmV3IEkvTyBvbiB0aGUgc2xvdCwgb3IgYSBwcmV2aW91cyBJL08gZmFp bGVkIGFuZAotCSAqIG5lZ2xlY3RlZCB0byByZXNldCB0aGUgcGFnZSBzdGF0ZS4gIFRoYXQgc2hv dWxkbid0IGhhcHBlbiwgcmVhbGx5LCBidXQKLQkgKiBpdCBzZWVtcyB3b3J0aCBhIGZldyBleHRy YSBjeWNsZXMgdG8gY2hlY2sgYW5kIHJlY292ZXIgZnJvbSBpdC4gV2UgY2FuCi0JICogY2hlYXBs eSB0ZXN0IGZvciBmYWlsdXJlIGJ5IHNlZWluZyBpZiB0aGUgYnVmZmVyIGxvY2sgaXMgc3RpbGwg aGVsZCAod2UKLQkgKiBhc3N1bWUgdGhhdCB0cmFuc2FjdGlvbiBhYm9ydCB3b3VsZCByZWxlYXNl IHRoZSBsb2NrKS4KLQkgKi8KLQlpZiAoc2hhcmVkLT5wYWdlX3N0YXR1c1tzbG90bm9dID09IFNM UlVfUEFHRV9SRUFEX0lOX1BST0dSRVNTIHx8Ci0JCXNoYXJlZC0+cGFnZV9zdGF0dXNbc2xvdG5v XSA9PSBTTFJVX1BBR0VfV1JJVEVfSU5fUFJPR1JFU1MpCi0JewotCQlpZiAoTFdMb2NrQ29uZGl0 aW9uYWxBY3F1aXJlKCZzaGFyZWQtPmJ1ZmZlcl9sb2Nrc1tzbG90bm9dLmxvY2ssIExXX1NIQVJF RCkpCi0JCXsKLQkJCS8qIGluZGVlZCwgdGhlIEkvTyBtdXN0IGhhdmUgZmFpbGVkICovCi0JCQlp ZiAoc2hhcmVkLT5wYWdlX3N0YXR1c1tzbG90bm9dID09IFNMUlVfUEFHRV9SRUFEX0lOX1BST0dS RVNTKQotCQkJCXNoYXJlZC0+cGFnZV9zdGF0dXNbc2xvdG5vXSA9IFNMUlVfUEFHRV9FTVBUWTsK LQkJCWVsc2UJCQkJLyogd3JpdGVfaW5fcHJvZ3Jlc3MgKi8KLQkJCXsKLQkJCQlzaGFyZWQtPnBh Z2Vfc3RhdHVzW3Nsb3Rub10gPSBTTFJVX1BBR0VfVkFMSUQ7Ci0JCQkJc2hhcmVkLT5wYWdlX2Rp cnR5W3Nsb3Rub10gPSB0cnVlOwotCQkJfQotCQkJTFdMb2NrUmVsZWFzZSgmc2hhcmVkLT5idWZm ZXJfbG9ja3Nbc2xvdG5vXS5sb2NrKTsKLQkJfQotCX0KLX0KLQotLyoKLSAqIEZpbmQgYSBwYWdl IGluIGEgc2hhcmVkIGJ1ZmZlciwgcmVhZGluZyBpdCBpbiBpZiBuZWNlc3NhcnkuCi0gKiBUaGUg cGFnZSBudW1iZXIgbXVzdCBjb3JyZXNwb25kIHRvIGFuIGFscmVhZHktaW5pdGlhbGl6ZWQgcGFn ZS4KLSAqCi0gKiBJZiB3cml0ZV9vayBpcyB0cnVlIHRoZW4gaXQgaXMgT0sgdG8gcmV0dXJuIGEg cGFnZSB0aGF0IGlzIGluCi0gKiBXUklURV9JTl9QUk9HUkVTUyBzdGF0ZTsgaXQgaXMgdGhlIGNh bGxlcidzIHJlc3BvbnNpYmlsaXR5IHRvIGJlIHN1cmUKLSAqIHRoYXQgbW9kaWZpY2F0aW9uIG9m IHRoZSBwYWdlIGlzIHNhZmUuICBJZiB3cml0ZV9vayBpcyBmYWxzZSB0aGVuIHdlCi0gKiB3aWxs IG5vdCByZXR1cm4gdGhlIHBhZ2UgdW50aWwgaXQgaXMgbm90IHVuZGVyZ29pbmcgYWN0aXZlIEkv Ty4KLSAqCi0gKiBUaGUgcGFzc2VkLWluIHhpZCBpcyB1c2VkIG9ubHkgZm9yIGVycm9yIHJlcG9y dGluZywgYW5kIG1heSBiZQotICogSW52YWxpZFRyYW5zYWN0aW9uSWQgaWYgbm8gc3BlY2lmaWMg eGlkIGlzIGFzc29jaWF0ZWQgd2l0aCB0aGUgYWN0aW9uLgotICoKLSAqIFJldHVybiB2YWx1ZSBp cyB0aGUgc2hhcmVkLWJ1ZmZlciBzbG90IG51bWJlciBub3cgaG9sZGluZyB0aGUgcGFnZS4KLSAq IFRoZSBidWZmZXIncyBMUlUgYWNjZXNzIGluZm8gaXMgdXBkYXRlZC4KLSAqCi0gKiBDb250cm9s IGxvY2sgbXVzdCBiZSBoZWxkIGF0IGVudHJ5LCBhbmQgd2lsbCBiZSBoZWxkIGF0IGV4aXQuCi0g Ki8KLWludAotU2ltcGxlTHJ1UmVhZFBhZ2UoU2xydUN0bCBjdGwsIGludCBwYWdlbm8sIGJvb2wg d3JpdGVfb2ssCi0JCQkJICBUcmFuc2FjdGlvbklkIHhpZCkKLXsKLQlTbHJ1U2hhcmVkCXNoYXJl ZCA9IGN0bC0+c2hhcmVkOwotCi0JLyogT3V0ZXIgbG9vcCBoYW5kbGVzIHJlc3RhcnQgaWYgd2Ug bXVzdCB3YWl0IGZvciBzb21lb25lIGVsc2UncyBJL08gKi8KLQlmb3IgKDs7KQotCXsKLQkJaW50 CQkJc2xvdG5vOwotCQlib29sCQlvazsKLQotCQkvKiBTZWUgaWYgcGFnZSBhbHJlYWR5IGlzIGlu IG1lbW9yeTsgaWYgbm90LCBwaWNrIHZpY3RpbSBzbG90ICovCi0JCXNsb3RubyA9IFNscnVTZWxl Y3RMUlVQYWdlKGN0bCwgcGFnZW5vKTsKLQotCQkvKiBEaWQgd2UgZmluZCB0aGUgcGFnZSBpbiBt ZW1vcnk/ICovCi0JCWlmIChzaGFyZWQtPnBhZ2VfbnVtYmVyW3Nsb3Rub10gPT0gcGFnZW5vICYm Ci0JCQlzaGFyZWQtPnBhZ2Vfc3RhdHVzW3Nsb3Rub10gIT0gU0xSVV9QQUdFX0VNUFRZKQotCQl7 Ci0JCQkvKgotCQkJICogSWYgcGFnZSBpcyBzdGlsbCBiZWluZyByZWFkIGluLCB3ZSBtdXN0IHdh aXQgZm9yIEkvTy4gIExpa2V3aXNlCi0JCQkgKiBpZiB0aGUgcGFnZSBpcyBiZWluZyB3cml0dGVu IGFuZCB0aGUgY2FsbGVyIHNhaWQgdGhhdCdzIG5vdCBPSy4KLQkJCSAqLwotCQkJaWYgKHNoYXJl ZC0+cGFnZV9zdGF0dXNbc2xvdG5vXSA9PSBTTFJVX1BBR0VfUkVBRF9JTl9QUk9HUkVTUyB8fAot CQkJCShzaGFyZWQtPnBhZ2Vfc3RhdHVzW3Nsb3Rub10gPT0gU0xSVV9QQUdFX1dSSVRFX0lOX1BS T0dSRVNTICYmCi0JCQkJICF3cml0ZV9vaykpCi0JCQl7Ci0JCQkJU2ltcGxlTHJ1V2FpdElPKGN0 bCwgc2xvdG5vKTsKLQkJCQkvKiBOb3cgd2UgbXVzdCByZWNoZWNrIHN0YXRlIGZyb20gdGhlIHRv cCAqLwotCQkJCWNvbnRpbnVlOwotCQkJfQotCQkJLyogT3RoZXJ3aXNlLCBpdCdzIHJlYWR5IHRv IHVzZSAqLwotCQkJU2xydVJlY2VudGx5VXNlZChzaGFyZWQsIHNsb3Rubyk7Ci0KLQkJCS8qIHVw ZGF0ZSB0aGUgc3RhdHMgY291bnRlciBvZiBwYWdlcyBmb3VuZCBpbiB0aGUgU0xSVSAqLwotCQkJ cGdzdGF0X2NvdW50X3NscnVfcGFnZV9oaXQoc2hhcmVkLT5zbHJ1X3N0YXRzX2lkeCk7Ci0KLQkJ CXJldHVybiBzbG90bm87Ci0JCX0KLQotCQkvKiBXZSBmb3VuZCBubyBtYXRjaDsgYXNzZXJ0IHdl IHNlbGVjdGVkIGEgZnJlZWFibGUgc2xvdCAqLwotCQlBc3NlcnQoc2hhcmVkLT5wYWdlX3N0YXR1 c1tzbG90bm9dID09IFNMUlVfUEFHRV9FTVBUWSB8fAotCQkJICAgKHNoYXJlZC0+cGFnZV9zdGF0 dXNbc2xvdG5vXSA9PSBTTFJVX1BBR0VfVkFMSUQgJiYKLQkJCQkhc2hhcmVkLT5wYWdlX2RpcnR5 W3Nsb3Rub10pKTsKLQotCQkvKiBNYXJrIHRoZSBzbG90IHJlYWQtYnVzeSAqLwotCQlzaGFyZWQt PnBhZ2VfbnVtYmVyW3Nsb3Rub10gPSBwYWdlbm87Ci0JCXNoYXJlZC0+cGFnZV9zdGF0dXNbc2xv dG5vXSA9IFNMUlVfUEFHRV9SRUFEX0lOX1BST0dSRVNTOwotCQlzaGFyZWQtPnBhZ2VfZGlydHlb c2xvdG5vXSA9IGZhbHNlOwotCi0JCS8qIEFjcXVpcmUgcGVyLWJ1ZmZlciBsb2NrIChjYW5ub3Qg ZGVhZGxvY2ssIHNlZSBub3RlcyBhdCB0b3ApICovCi0JCUxXTG9ja0FjcXVpcmUoJnNoYXJlZC0+ YnVmZmVyX2xvY2tzW3Nsb3Rub10ubG9jaywgTFdfRVhDTFVTSVZFKTsKLQotCQkvKiBSZWxlYXNl IGNvbnRyb2wgbG9jayB3aGlsZSBkb2luZyBJL08gKi8KLQkJTFdMb2NrUmVsZWFzZShzaGFyZWQt PkNvbnRyb2xMb2NrKTsKLQotCQkvKiBEbyB0aGUgcmVhZCAqLwotCQlvayA9IFNscnVQaHlzaWNh bFJlYWRQYWdlKGN0bCwgcGFnZW5vLCBzbG90bm8pOwotCi0JCS8qIFNldCB0aGUgTFNOcyBmb3Ig dGhpcyBuZXdseSByZWFkLWluIHBhZ2UgdG8gemVybyAqLwotCQlTaW1wbGVMcnVaZXJvTFNOcyhj dGwsIHNsb3Rubyk7Ci0KLQkJLyogUmUtYWNxdWlyZSBjb250cm9sIGxvY2sgYW5kIHVwZGF0ZSBw YWdlIHN0YXRlICovCi0JCUxXTG9ja0FjcXVpcmUoc2hhcmVkLT5Db250cm9sTG9jaywgTFdfRVhD TFVTSVZFKTsKLQotCQlBc3NlcnQoc2hhcmVkLT5wYWdlX251bWJlcltzbG90bm9dID09IHBhZ2Vu byAmJgotCQkJICAgc2hhcmVkLT5wYWdlX3N0YXR1c1tzbG90bm9dID09IFNMUlVfUEFHRV9SRUFE X0lOX1BST0dSRVNTICYmCi0JCQkgICAhc2hhcmVkLT5wYWdlX2RpcnR5W3Nsb3Rub10pOwotCi0J CXNoYXJlZC0+cGFnZV9zdGF0dXNbc2xvdG5vXSA9IG9rID8gU0xSVV9QQUdFX1ZBTElEIDogU0xS VV9QQUdFX0VNUFRZOwotCi0JCUxXTG9ja1JlbGVhc2UoJnNoYXJlZC0+YnVmZmVyX2xvY2tzW3Ns b3Rub10ubG9jayk7Ci0KLQkJLyogTm93IGl0J3Mgb2theSB0byBlcmVwb3J0IGlmIHdlIGZhaWxl ZCAqLwotCQlpZiAoIW9rKQotCQkJU2xydVJlcG9ydElPRXJyb3IoY3RsLCBwYWdlbm8sIHhpZCk7 Ci0KLQkJU2xydVJlY2VudGx5VXNlZChzaGFyZWQsIHNsb3Rubyk7Ci0KLQkJLyogdXBkYXRlIHRo ZSBzdGF0cyBjb3VudGVyIG9mIHBhZ2VzIG5vdCBmb3VuZCBpbiBTTFJVICovCi0JCXBnc3RhdF9j b3VudF9zbHJ1X3BhZ2VfcmVhZChzaGFyZWQtPnNscnVfc3RhdHNfaWR4KTsKLQotCQlyZXR1cm4g c2xvdG5vOwotCX0KLX0KLQotLyoKLSAqIEZpbmQgYSBwYWdlIGluIGEgc2hhcmVkIGJ1ZmZlciwg cmVhZGluZyBpdCBpbiBpZiBuZWNlc3NhcnkuCi0gKiBUaGUgcGFnZSBudW1iZXIgbXVzdCBjb3Jy ZXNwb25kIHRvIGFuIGFscmVhZHktaW5pdGlhbGl6ZWQgcGFnZS4KLSAqIFRoZSBjYWxsZXIgbXVz dCBpbnRlbmQgb25seSByZWFkLW9ubHkgYWNjZXNzIHRvIHRoZSBwYWdlLgotICoKLSAqIFRoZSBw YXNzZWQtaW4geGlkIGlzIHVzZWQgb25seSBmb3IgZXJyb3IgcmVwb3J0aW5nLCBhbmQgbWF5IGJl Ci0gKiBJbnZhbGlkVHJhbnNhY3Rpb25JZCBpZiBubyBzcGVjaWZpYyB4aWQgaXMgYXNzb2NpYXRl ZCB3aXRoIHRoZSBhY3Rpb24uCi0gKgotICogUmV0dXJuIHZhbHVlIGlzIHRoZSBzaGFyZWQtYnVm ZmVyIHNsb3QgbnVtYmVyIG5vdyBob2xkaW5nIHRoZSBwYWdlLgotICogVGhlIGJ1ZmZlcidzIExS VSBhY2Nlc3MgaW5mbyBpcyB1cGRhdGVkLgotICoKLSAqIENvbnRyb2wgbG9jayBtdXN0IE5PVCBi ZSBoZWxkIGF0IGVudHJ5LCBidXQgd2lsbCBiZSBoZWxkIGF0IGV4aXQuCi0gKiBJdCBpcyB1bnNw ZWNpZmllZCB3aGV0aGVyIHRoZSBsb2NrIHdpbGwgYmUgc2hhcmVkIG9yIGV4Y2x1c2l2ZS4KLSAq LwotaW50Ci1TaW1wbGVMcnVSZWFkUGFnZV9SZWFkT25seShTbHJ1Q3RsIGN0bCwgaW50IHBhZ2Vu bywgVHJhbnNhY3Rpb25JZCB4aWQpCi17Ci0JU2xydVNoYXJlZAlzaGFyZWQgPSBjdGwtPnNoYXJl ZDsKLQlpbnQJCQlzbG90bm87Ci0KLQkvKiBUcnkgdG8gZmluZCB0aGUgcGFnZSB3aGlsZSBob2xk aW5nIG9ubHkgc2hhcmVkIGxvY2sgKi8KLQlMV0xvY2tBY3F1aXJlKHNoYXJlZC0+Q29udHJvbExv Y2ssIExXX1NIQVJFRCk7Ci0KLQkvKiBTZWUgaWYgcGFnZSBpcyBhbHJlYWR5IGluIGEgYnVmZmVy ICovCi0JZm9yIChzbG90bm8gPSAwOyBzbG90bm8gPCBzaGFyZWQtPm51bV9zbG90czsgc2xvdG5v KyspCi0JewotCQlpZiAoc2hhcmVkLT5wYWdlX251bWJlcltzbG90bm9dID09IHBhZ2VubyAmJgot CQkJc2hhcmVkLT5wYWdlX3N0YXR1c1tzbG90bm9dICE9IFNMUlVfUEFHRV9FTVBUWSAmJgotCQkJ c2hhcmVkLT5wYWdlX3N0YXR1c1tzbG90bm9dICE9IFNMUlVfUEFHRV9SRUFEX0lOX1BST0dSRVNT KQotCQl7Ci0JCQkvKiBTZWUgY29tbWVudHMgZm9yIFNscnVSZWNlbnRseVVzZWQgbWFjcm8gKi8K LQkJCVNscnVSZWNlbnRseVVzZWQoc2hhcmVkLCBzbG90bm8pOwotCi0JCQkvKiB1cGRhdGUgdGhl IHN0YXRzIGNvdW50ZXIgb2YgcGFnZXMgZm91bmQgaW4gdGhlIFNMUlUgKi8KLQkJCXBnc3RhdF9j b3VudF9zbHJ1X3BhZ2VfaGl0KHNoYXJlZC0+c2xydV9zdGF0c19pZHgpOwotCi0JCQlyZXR1cm4g c2xvdG5vOwotCQl9Ci0JfQotCi0JLyogTm8gbHVjaywgc28gc3dpdGNoIHRvIG5vcm1hbCBleGNs dXNpdmUgbG9jayBhbmQgZG8gcmVndWxhciByZWFkICovCi0JTFdMb2NrUmVsZWFzZShzaGFyZWQt PkNvbnRyb2xMb2NrKTsKLQlMV0xvY2tBY3F1aXJlKHNoYXJlZC0+Q29udHJvbExvY2ssIExXX0VY Q0xVU0lWRSk7Ci0KLQlyZXR1cm4gU2ltcGxlTHJ1UmVhZFBhZ2UoY3RsLCBwYWdlbm8sIHRydWUs IHhpZCk7Ci19Ci0KLS8qCi0gKiBXcml0ZSBhIHBhZ2UgZnJvbSBhIHNoYXJlZCBidWZmZXIsIGlm IG5lY2Vzc2FyeS4KLSAqIERvZXMgbm90aGluZyBpZiB0aGUgc3BlY2lmaWVkIHNsb3QgaXMgbm90 IGRpcnR5LgotICoKLSAqIE5PVEU6IG9ubHkgb25lIHdyaXRlIGF0dGVtcHQgaXMgbWFkZSBoZXJl LiAgSGVuY2UsIGl0IGlzIHBvc3NpYmxlIHRoYXQKLSAqIHRoZSBwYWdlIGlzIHN0aWxsIGRpcnR5 IGF0IGV4aXQgKGlmIHNvbWVvbmUgZWxzZSByZS1kaXJ0aWVkIGl0IGR1cmluZwotICogdGhlIHdy aXRlKS4gIEhvd2V2ZXIsIHdlICpkbyogYXR0ZW1wdCBhIGZyZXNoIHdyaXRlIGV2ZW4gaWYgdGhl IHBhZ2UKLSAqIGlzIGFscmVhZHkgYmVpbmcgd3JpdHRlbjsgdGhpcyBpcyBmb3IgY2hlY2twb2lu dHMuCi0gKgotICogQ29udHJvbCBsb2NrIG11c3QgYmUgaGVsZCBhdCBlbnRyeSwgYW5kIHdpbGwg YmUgaGVsZCBhdCBleGl0LgotICovCi1zdGF0aWMgdm9pZAotU2xydUludGVybmFsV3JpdGVQYWdl KFNscnVDdGwgY3RsLCBpbnQgc2xvdG5vLCBTbHJ1V3JpdGVBbGwgZmRhdGEpCi17Ci0JU2xydVNo YXJlZAlzaGFyZWQgPSBjdGwtPnNoYXJlZDsKLQlpbnQJCQlwYWdlbm8gPSBzaGFyZWQtPnBhZ2Vf bnVtYmVyW3Nsb3Rub107Ci0JYm9vbAkJb2s7Ci0KLQkvKiBJZiBhIHdyaXRlIGlzIGluIHByb2dy ZXNzLCB3YWl0IGZvciBpdCB0byBmaW5pc2ggKi8KLQl3aGlsZSAoc2hhcmVkLT5wYWdlX3N0YXR1 c1tzbG90bm9dID09IFNMUlVfUEFHRV9XUklURV9JTl9QUk9HUkVTUyAmJgotCQkgICBzaGFyZWQt PnBhZ2VfbnVtYmVyW3Nsb3Rub10gPT0gcGFnZW5vKQotCXsKLQkJU2ltcGxlTHJ1V2FpdElPKGN0 bCwgc2xvdG5vKTsKLQl9Ci0KLQkvKgotCSAqIERvIG5vdGhpbmcgaWYgcGFnZSBpcyBub3QgZGly dHksIG9yIGlmIGJ1ZmZlciBubyBsb25nZXIgY29udGFpbnMgdGhlCi0JICogc2FtZSBwYWdlIHdl IHdlcmUgY2FsbGVkIGZvci4KLQkgKi8KLQlpZiAoIXNoYXJlZC0+cGFnZV9kaXJ0eVtzbG90bm9d IHx8Ci0JCXNoYXJlZC0+cGFnZV9zdGF0dXNbc2xvdG5vXSAhPSBTTFJVX1BBR0VfVkFMSUQgfHwK LQkJc2hhcmVkLT5wYWdlX251bWJlcltzbG90bm9dICE9IHBhZ2VubykKLQkJcmV0dXJuOwotCi0J LyoKLQkgKiBNYXJrIHRoZSBzbG90IHdyaXRlLWJ1c3ksIGFuZCBjbGVhciB0aGUgZGlydHliaXQu ICBBZnRlciB0aGlzIHBvaW50LCBhCi0JICogdHJhbnNhY3Rpb24gc3RhdHVzIHVwZGF0ZSBvbiB0 aGlzIHBhZ2Ugd2lsbCBtYXJrIGl0IGRpcnR5IGFnYWluLgotCSAqLwotCXNoYXJlZC0+cGFnZV9z dGF0dXNbc2xvdG5vXSA9IFNMUlVfUEFHRV9XUklURV9JTl9QUk9HUkVTUzsKLQlzaGFyZWQtPnBh Z2VfZGlydHlbc2xvdG5vXSA9IGZhbHNlOwotCi0JLyogQWNxdWlyZSBwZXItYnVmZmVyIGxvY2sg KGNhbm5vdCBkZWFkbG9jaywgc2VlIG5vdGVzIGF0IHRvcCkgKi8KLQlMV0xvY2tBY3F1aXJlKCZz aGFyZWQtPmJ1ZmZlcl9sb2Nrc1tzbG90bm9dLmxvY2ssIExXX0VYQ0xVU0lWRSk7Ci0KLQkvKiBS ZWxlYXNlIGNvbnRyb2wgbG9jayB3aGlsZSBkb2luZyBJL08gKi8KLQlMV0xvY2tSZWxlYXNlKHNo YXJlZC0+Q29udHJvbExvY2spOwotCi0JLyogRG8gdGhlIHdyaXRlICovCi0Jb2sgPSBTbHJ1UGh5 c2ljYWxXcml0ZVBhZ2UoY3RsLCBwYWdlbm8sIHNsb3RubywgZmRhdGEpOwotCi0JLyogSWYgd2Ug ZmFpbGVkLCBhbmQgd2UncmUgaW4gYSBmbHVzaCwgYmV0dGVyIGNsb3NlIHRoZSBmaWxlcyAqLwot CWlmICghb2sgJiYgZmRhdGEpCi0JewotCQlpbnQJCQlpOwotCi0JCWZvciAoaSA9IDA7IGkgPCBm ZGF0YS0+bnVtX2ZpbGVzOyBpKyspCi0JCQlDbG9zZVRyYW5zaWVudEZpbGUoZmRhdGEtPmZkW2ld KTsKLQl9Ci0KLQkvKiBSZS1hY3F1aXJlIGNvbnRyb2wgbG9jayBhbmQgdXBkYXRlIHBhZ2Ugc3Rh dGUgKi8KLQlMV0xvY2tBY3F1aXJlKHNoYXJlZC0+Q29udHJvbExvY2ssIExXX0VYQ0xVU0lWRSk7 Ci0KLQlBc3NlcnQoc2hhcmVkLT5wYWdlX251bWJlcltzbG90bm9dID09IHBhZ2VubyAmJgotCQkg ICBzaGFyZWQtPnBhZ2Vfc3RhdHVzW3Nsb3Rub10gPT0gU0xSVV9QQUdFX1dSSVRFX0lOX1BST0dS RVNTKTsKLQotCS8qIElmIHdlIGZhaWxlZCB0byB3cml0ZSwgbWFyayB0aGUgcGFnZSBkaXJ0eSBh Z2FpbiAqLwotCWlmICghb2spCi0JCXNoYXJlZC0+cGFnZV9kaXJ0eVtzbG90bm9dID0gdHJ1ZTsK LQotCXNoYXJlZC0+cGFnZV9zdGF0dXNbc2xvdG5vXSA9IFNMUlVfUEFHRV9WQUxJRDsKLQotCUxX TG9ja1JlbGVhc2UoJnNoYXJlZC0+YnVmZmVyX2xvY2tzW3Nsb3Rub10ubG9jayk7Ci0KLQkvKiBO b3cgaXQncyBva2F5IHRvIGVyZXBvcnQgaWYgd2UgZmFpbGVkICovCi0JaWYgKCFvaykKLQkJU2xy dVJlcG9ydElPRXJyb3IoY3RsLCBwYWdlbm8sIEludmFsaWRUcmFuc2FjdGlvbklkKTsKLQotCS8q IElmIHBhcnQgb2YgYSBjaGVja3BvaW50LCBjb3VudCB0aGlzIGFzIGEgYnVmZmVyIHdyaXR0ZW4u ICovCi0JaWYgKGZkYXRhKQotCQlDaGVja3BvaW50U3RhdHMuY2twdF9idWZzX3dyaXR0ZW4rKzsK LX0KLQotLyoKLSAqIFdyYXBwZXIgb2YgU2xydUludGVybmFsV3JpdGVQYWdlLCBmb3IgZXh0ZXJu YWwgY2FsbGVycy4KLSAqIGZkYXRhIGlzIGFsd2F5cyBwYXNzZWQgYSBOVUxMIGhlcmUuCi0gKi8K LXZvaWQKLVNpbXBsZUxydVdyaXRlUGFnZShTbHJ1Q3RsIGN0bCwgaW50IHNsb3RubykKLXsKLQlT bHJ1SW50ZXJuYWxXcml0ZVBhZ2UoY3RsLCBzbG90bm8sIE5VTEwpOwotfQorc3RhdGljIHZvaWQg U2xydUludGVybmFsRGVsZXRlU2VnbWVudChpbnQgc2xydV9pZCwgaW50IHNlZ25vKTsKIAogLyoK ICAqIFJldHVybiB3aGV0aGVyIHRoZSBnaXZlbiBwYWdlIGV4aXN0cyBvbiBkaXNrLgpAQCAtNjIz LDU5MiArNjQsMjQgQEAgU2ltcGxlTHJ1V3JpdGVQYWdlKFNscnVDdGwgY3RsLCBpbnQgc2xvdG5v KQogICogbGFyZ2UgZW5vdWdoIHRvIGNvbnRhaW4gdGhlIGdpdmVuIHBhZ2UuCiAgKi8KIGJvb2wK LVNpbXBsZUxydURvZXNQaHlzaWNhbFBhZ2VFeGlzdChTbHJ1Q3RsIGN0bCwgaW50IHBhZ2VubykK LXsKLQlpbnQJCQlzZWdubyA9IHBhZ2VubyAvIFNMUlVfUEFHRVNfUEVSX1NFR01FTlQ7Ci0JaW50 CQkJcnBhZ2VubyA9IHBhZ2VubyAlIFNMUlVfUEFHRVNfUEVSX1NFR01FTlQ7Ci0JaW50CQkJb2Zm c2V0ID0gcnBhZ2VubyAqIEJMQ0tTWjsKLQljaGFyCQlwYXRoW01BWFBHUEFUSF07Ci0JaW50CQkJ ZmQ7Ci0JYm9vbAkJcmVzdWx0OwotCW9mZl90CQllbmRwb3M7Ci0KLQkvKiB1cGRhdGUgdGhlIHN0 YXRzIGNvdW50ZXIgb2YgY2hlY2tlZCBwYWdlcyAqLwotCXBnc3RhdF9jb3VudF9zbHJ1X3BhZ2Vf ZXhpc3RzKGN0bC0+c2hhcmVkLT5zbHJ1X3N0YXRzX2lkeCk7Ci0KLQlTbHJ1RmlsZU5hbWUoY3Rs LCBwYXRoLCBzZWdubyk7Ci0KLQlmZCA9IE9wZW5UcmFuc2llbnRGaWxlKHBhdGgsIE9fUkRPTkxZ IHwgUEdfQklOQVJZKTsKLQlpZiAoZmQgPCAwKQotCXsKLQkJLyogZXhwZWN0ZWQ6IGZpbGUgZG9l c24ndCBleGlzdCAqLwotCQlpZiAoZXJybm8gPT0gRU5PRU5UKQotCQkJcmV0dXJuIGZhbHNlOwot Ci0JCS8qIHJlcG9ydCBlcnJvciBub3JtYWxseSAqLwotCQlzbHJ1X2VycmNhdXNlID0gU0xSVV9P UEVOX0ZBSUxFRDsKLQkJc2xydV9lcnJubyA9IGVycm5vOwotCQlTbHJ1UmVwb3J0SU9FcnJvcihj dGwsIHBhZ2VubywgMCk7Ci0JfQotCi0JaWYgKChlbmRwb3MgPSBsc2VlayhmZCwgMCwgU0VFS19F TkQpKSA8IDApCi0JewotCQlzbHJ1X2VycmNhdXNlID0gU0xSVV9TRUVLX0ZBSUxFRDsKLQkJc2xy dV9lcnJubyA9IGVycm5vOwotCQlTbHJ1UmVwb3J0SU9FcnJvcihjdGwsIHBhZ2VubywgMCk7Ci0J fQotCi0JcmVzdWx0ID0gZW5kcG9zID49IChvZmZfdCkgKG9mZnNldCArIEJMQ0tTWik7Ci0KLQlp ZiAoQ2xvc2VUcmFuc2llbnRGaWxlKGZkKSAhPSAwKQotCXsKLQkJc2xydV9lcnJjYXVzZSA9IFNM UlVfQ0xPU0VfRkFJTEVEOwotCQlzbHJ1X2Vycm5vID0gZXJybm87Ci0JCXJldHVybiBmYWxzZTsK LQl9Ci0KLQlyZXR1cm4gcmVzdWx0OwotfQotCi0vKgotICogUGh5c2ljYWwgcmVhZCBvZiBhIChw cmV2aW91c2x5IGV4aXN0aW5nKSBwYWdlIGludG8gYSBidWZmZXIgc2xvdAotICoKLSAqIE9uIGZh aWx1cmUsIHdlIGNhbm5vdCBqdXN0IGVyZXBvcnQoRVJST1IpIHNpbmNlIGNhbGxlciBoYXMgcHV0 IHN0YXRlIGluCi0gKiBzaGFyZWQgbWVtb3J5IHRoYXQgbXVzdCBiZSB1bmRvbmUuICBTbywgd2Ug cmV0dXJuIGZhbHNlIGFuZCBzYXZlIGVub3VnaAotICogaW5mbyBpbiBzdGF0aWMgdmFyaWFibGVz IHRvIGxldCBTbHJ1UmVwb3J0SU9FcnJvciBtYWtlIHRoZSByZXBvcnQuCi0gKgotICogRm9yIG5v dywgYXNzdW1lIGl0J3Mgbm90IHdvcnRoIGtlZXBpbmcgYSBmaWxlIHBvaW50ZXIgb3BlbiBhY3Jv c3MKLSAqIHJlYWQvd3JpdGUgb3BlcmF0aW9ucy4gIFdlIGNvdWxkIGNhY2hlIG9uZSB2aXJ0dWFs IGZpbGUgcG9pbnRlciAuLi4KLSAqLwotc3RhdGljIGJvb2wKLVNscnVQaHlzaWNhbFJlYWRQYWdl KFNscnVDdGwgY3RsLCBpbnQgcGFnZW5vLCBpbnQgc2xvdG5vKQotewotCVNscnVTaGFyZWQJc2hh cmVkID0gY3RsLT5zaGFyZWQ7Ci0JaW50CQkJc2Vnbm8gPSBwYWdlbm8gLyBTTFJVX1BBR0VTX1BF Ul9TRUdNRU5UOwotCWludAkJCXJwYWdlbm8gPSBwYWdlbm8gJSBTTFJVX1BBR0VTX1BFUl9TRUdN RU5UOwotCW9mZl90CQlvZmZzZXQgPSBycGFnZW5vICogQkxDS1NaOwotCWNoYXIJCXBhdGhbTUFY UEdQQVRIXTsKLQlpbnQJCQlmZDsKLQotCVNscnVGaWxlTmFtZShjdGwsIHBhdGgsIHNlZ25vKTsK LQotCS8qCi0JICogSW4gYSBjcmFzaC1hbmQtcmVzdGFydCBzaXR1YXRpb24sIGl0J3MgcG9zc2li bGUgZm9yIHVzIHRvIHJlY2VpdmUKLQkgKiBjb21tYW5kcyB0byBzZXQgdGhlIGNvbW1pdCBzdGF0 dXMgb2YgdHJhbnNhY3Rpb25zIHdob3NlIGJpdHMgYXJlIGluCi0JICogYWxyZWFkeS10cnVuY2F0 ZWQgc2VnbWVudHMgb2YgdGhlIGNvbW1pdCBsb2cgKHNlZSBub3RlcyBpbgotCSAqIFNscnVQaHlz aWNhbFdyaXRlUGFnZSkuICBIZW5jZSwgaWYgd2UgYXJlIEluUmVjb3ZlcnksIGFsbG93IHRoZSBj YXNlCi0JICogd2hlcmUgdGhlIGZpbGUgZG9lc24ndCBleGlzdCwgYW5kIHJldHVybiB6ZXJvZXMg aW5zdGVhZC4KLQkgKi8KLQlmZCA9IE9wZW5UcmFuc2llbnRGaWxlKHBhdGgsIE9fUkRPTkxZIHwg UEdfQklOQVJZKTsKLQlpZiAoZmQgPCAwKQotCXsKLQkJaWYgKGVycm5vICE9IEVOT0VOVCB8fCAh SW5SZWNvdmVyeSkKLQkJewotCQkJc2xydV9lcnJjYXVzZSA9IFNMUlVfT1BFTl9GQUlMRUQ7Ci0J CQlzbHJ1X2Vycm5vID0gZXJybm87Ci0JCQlyZXR1cm4gZmFsc2U7Ci0JCX0KLQotCQllcmVwb3J0 KExPRywKLQkJCQkoZXJybXNnKCJmaWxlIFwiJXNcIiBkb2Vzbid0IGV4aXN0LCByZWFkaW5nIGFz IHplcm9lcyIsCi0JCQkJCQlwYXRoKSkpOwotCQlNZW1TZXQoc2hhcmVkLT5wYWdlX2J1ZmZlcltz bG90bm9dLCAwLCBCTENLU1opOwotCQlyZXR1cm4gdHJ1ZTsKLQl9Ci0KLQllcnJubyA9IDA7Ci0J cGdzdGF0X3JlcG9ydF93YWl0X3N0YXJ0KFdBSVRfRVZFTlRfU0xSVV9SRUFEKTsKLQlpZiAocGdf cHJlYWQoZmQsIHNoYXJlZC0+cGFnZV9idWZmZXJbc2xvdG5vXSwgQkxDS1NaLCBvZmZzZXQpICE9 IEJMQ0tTWikKLQl7Ci0JCXBnc3RhdF9yZXBvcnRfd2FpdF9lbmQoKTsKLQkJc2xydV9lcnJjYXVz ZSA9IFNMUlVfUkVBRF9GQUlMRUQ7Ci0JCXNscnVfZXJybm8gPSBlcnJubzsKLQkJQ2xvc2VUcmFu c2llbnRGaWxlKGZkKTsKLQkJcmV0dXJuIGZhbHNlOwotCX0KLQlwZ3N0YXRfcmVwb3J0X3dhaXRf ZW5kKCk7Ci0KLQlpZiAoQ2xvc2VUcmFuc2llbnRGaWxlKGZkKSAhPSAwKQotCXsKLQkJc2xydV9l cnJjYXVzZSA9IFNMUlVfQ0xPU0VfRkFJTEVEOwotCQlzbHJ1X2Vycm5vID0gZXJybm87Ci0JCXJl dHVybiBmYWxzZTsKLQl9Ci0KLQlyZXR1cm4gdHJ1ZTsKLX0KLQotLyoKLSAqIFBoeXNpY2FsIHdy aXRlIG9mIGEgcGFnZSBmcm9tIGEgYnVmZmVyIHNsb3QKLSAqCi0gKiBPbiBmYWlsdXJlLCB3ZSBj YW5ub3QganVzdCBlcmVwb3J0KEVSUk9SKSBzaW5jZSBjYWxsZXIgaGFzIHB1dCBzdGF0ZSBpbgot ICogc2hhcmVkIG1lbW9yeSB0aGF0IG11c3QgYmUgdW5kb25lLiAgU28sIHdlIHJldHVybiBmYWxz ZSBhbmQgc2F2ZSBlbm91Z2gKLSAqIGluZm8gaW4gc3RhdGljIHZhcmlhYmxlcyB0byBsZXQgU2xy dVJlcG9ydElPRXJyb3IgbWFrZSB0aGUgcmVwb3J0LgotICoKLSAqIEZvciBub3csIGFzc3VtZSBp dCdzIG5vdCB3b3J0aCBrZWVwaW5nIGEgZmlsZSBwb2ludGVyIG9wZW4gYWNyb3NzCi0gKiBpbmRl cGVuZGVudCByZWFkL3dyaXRlIG9wZXJhdGlvbnMuICBXZSBkbyBiYXRjaCBvcGVyYXRpb25zIGR1 cmluZwotICogU2ltcGxlTHJ1V3JpdGVBbGwsIHRob3VnaC4KLSAqCi0gKiBmZGF0YSBpcyBOVUxM IGZvciBhIHN0YW5kYWxvbmUgd3JpdGUsIHBvaW50ZXIgdG8gb3Blbi1maWxlIGluZm8gZHVyaW5n Ci0gKiBTaW1wbGVMcnVXcml0ZUFsbC4KLSAqLwotc3RhdGljIGJvb2wKLVNscnVQaHlzaWNhbFdy aXRlUGFnZShTbHJ1Q3RsIGN0bCwgaW50IHBhZ2VubywgaW50IHNsb3RubywgU2xydVdyaXRlQWxs IGZkYXRhKQorU2ltcGxlTHJ1RG9lc1BoeXNpY2FsUGFnZUV4aXN0KGludCBzbHJ1X2lkLCBpbnQg cGFnZW5vKQogewotCVNscnVTaGFyZWQJc2hhcmVkID0gY3RsLT5zaGFyZWQ7CiAJaW50CQkJc2Vn bm8gPSBwYWdlbm8gLyBTTFJVX1BBR0VTX1BFUl9TRUdNRU5UOwogCWludAkJCXJwYWdlbm8gPSBw YWdlbm8gJSBTTFJVX1BBR0VTX1BFUl9TRUdNRU5UOwogCW9mZl90CQlvZmZzZXQgPSBycGFnZW5v ICogQkxDS1NaOwotCWNoYXIJCXBhdGhbTUFYUEdQQVRIXTsKLQlpbnQJCQlmZCA9IC0xOwotCi0J LyogdXBkYXRlIHRoZSBzdGF0cyBjb3VudGVyIG9mIHdyaXR0ZW4gcGFnZXMgKi8KLQlwZ3N0YXRf Y291bnRfc2xydV9wYWdlX3dyaXR0ZW4oc2hhcmVkLT5zbHJ1X3N0YXRzX2lkeCk7Ci0KLQkvKgot CSAqIEhvbm9yIHRoZSB3cml0ZS1XQUwtYmVmb3JlLWRhdGEgcnVsZSwgaWYgYXBwcm9wcmlhdGUs IHNvIHRoYXQgd2UgZG8gbm90Ci0JICogd3JpdGUgb3V0IGRhdGEgYmVmb3JlIGFzc29jaWF0ZWQg V0FMIHJlY29yZHMuICBUaGlzIGlzIHRoZSBzYW1lIGFjdGlvbgotCSAqIHBlcmZvcm1lZCBkdXJp bmcgRmx1c2hCdWZmZXIoKSBpbiB0aGUgbWFpbiBidWZmZXIgbWFuYWdlci4KLQkgKi8KLQlpZiAo c2hhcmVkLT5ncm91cF9sc24gIT0gTlVMTCkKLQl7Ci0JCS8qCi0JCSAqIFdlIG11c3QgZGV0ZXJt aW5lIHRoZSBsYXJnZXN0IGFzeW5jLWNvbW1pdCBMU04gZm9yIHRoZSBwYWdlLiBUaGlzCi0JCSAq IGlzIGEgYml0IHRlZGlvdXMsIGJ1dCBzaW5jZSB0aGlzIGVudGlyZSBmdW5jdGlvbiBpcyBhIHNs b3cgcGF0aAotCQkgKiBhbnl3YXksIGl0IHNlZW1zIGJldHRlciB0byBkbyB0aGlzIGhlcmUgdGhh biB0byBtYWludGFpbiBhIHBlci1wYWdlCi0JCSAqIExTTiB2YXJpYWJsZSAod2hpY2gnZCBuZWVk IGFuIGV4dHJhIGNvbXBhcmlzb24gaW4gdGhlCi0JCSAqIHRyYW5zYWN0aW9uLWNvbW1pdCBwYXRo KS4KLQkJICovCi0JCVhMb2dSZWNQdHIJbWF4X2xzbjsKLQkJaW50CQkJbHNuaW5kZXgsCi0JCQkJ CWxzbm9mZjsKLQotCQlsc25pbmRleCA9IHNsb3RubyAqIHNoYXJlZC0+bHNuX2dyb3Vwc19wZXJf cGFnZTsKLQkJbWF4X2xzbiA9IHNoYXJlZC0+Z3JvdXBfbHNuW2xzbmluZGV4KytdOwotCQlmb3Ig KGxzbm9mZiA9IDE7IGxzbm9mZiA8IHNoYXJlZC0+bHNuX2dyb3Vwc19wZXJfcGFnZTsgbHNub2Zm KyspCi0JCXsKLQkJCVhMb2dSZWNQdHIJdGhpc19sc24gPSBzaGFyZWQtPmdyb3VwX2xzbltsc25p bmRleCsrXTsKLQotCQkJaWYgKG1heF9sc24gPCB0aGlzX2xzbikKLQkJCQltYXhfbHNuID0gdGhp c19sc247Ci0JCX0KLQotCQlpZiAoIVhMb2dSZWNQdHJJc0ludmFsaWQobWF4X2xzbikpCi0JCXsK LQkJCS8qCi0JCQkgKiBBcyBub3RlZCBhYm92ZSwgZWxvZyhFUlJPUikgaXMgbm90IGFjY2VwdGFi bGUgaGVyZSwgc28gaWYKLQkJCSAqIFhMb2dGbHVzaCB3ZXJlIHRvIGZhaWwsIHdlIG11c3QgUEFO SUMuICBUaGlzIGlzbid0IG11Y2ggb2YgYQotCQkJICogcmVzdHJpY3Rpb24gYmVjYXVzZSBYTG9n Rmx1c2ggaXMganVzdCBhYm91dCBhbGwgY3JpdGljYWwKLQkJCSAqIHNlY3Rpb24gYW55d2F5LCBi dXQgbGV0J3MgbWFrZSBzdXJlLgotCQkJICovCi0JCQlTVEFSVF9DUklUX1NFQ1RJT04oKTsKLQkJ CVhMb2dGbHVzaChtYXhfbHNuKTsKLQkJCUVORF9DUklUX1NFQ1RJT04oKTsKLQkJfQotCX0KLQot CS8qCi0JICogRHVyaW5nIGEgV3JpdGVBbGwsIHdlIG1heSBhbHJlYWR5IGhhdmUgdGhlIGRlc2ly ZWQgZmlsZSBvcGVuLgotCSAqLwotCWlmIChmZGF0YSkKLQl7Ci0JCWludAkJCWk7Ci0KLQkJZm9y IChpID0gMDsgaSA8IGZkYXRhLT5udW1fZmlsZXM7IGkrKykKLQkJewotCQkJaWYgKGZkYXRhLT5z ZWdub1tpXSA9PSBzZWdubykKLQkJCXsKLQkJCQlmZCA9IGZkYXRhLT5mZFtpXTsKLQkJCQlicmVh azsKLQkJCX0KLQkJfQotCX0KLQotCWlmIChmZCA8IDApCi0JewotCQkvKgotCQkgKiBJZiB0aGUg ZmlsZSBkb2Vzbid0IGFscmVhZHkgZXhpc3QsIHdlIHNob3VsZCBjcmVhdGUgaXQuICBJdCBpcwot CQkgKiBwb3NzaWJsZSBmb3IgdGhpcyB0byBuZWVkIHRvIGhhcHBlbiB3aGVuIHdyaXRpbmcgYSBw YWdlIHRoYXQncyBub3QKLQkJICogZmlyc3QgaW4gaXRzIHNlZ21lbnQ7IHdlIGFzc3VtZSB0aGUg T1MgY2FuIGNvcGUgd2l0aCB0aGF0LiAoTm90ZToKLQkJICogaXQgbWlnaHQgc2VlbSB0aGF0IGl0 J2QgYmUgb2theSB0byBjcmVhdGUgZmlsZXMgb25seSB3aGVuCi0JCSAqIFNpbXBsZUxydVplcm9Q YWdlIGlzIGNhbGxlZCBmb3IgdGhlIGZpcnN0IHBhZ2Ugb2YgYSBzZWdtZW50LgotCQkgKiBIb3dl dmVyLCBpZiBhZnRlciBhIGNyYXNoIGFuZCByZXN0YXJ0IHRoZSBSRURPIGxvZ2ljIGVsZWN0cyB0 bwotCQkgKiByZXBsYXkgdGhlIGxvZyBmcm9tIGEgY2hlY2twb2ludCBiZWZvcmUgdGhlIGxhdGVz dCBvbmUsIHRoZW4gaXQncwotCQkgKiBwb3NzaWJsZSB0aGF0IHdlIHdpbGwgZ2V0IGNvbW1hbmRz IHRvIHNldCB0cmFuc2FjdGlvbiBzdGF0dXMgb2YKLQkJICogdHJhbnNhY3Rpb25zIHRoYXQgaGF2 ZSBhbHJlYWR5IGJlZW4gdHJ1bmNhdGVkIGZyb20gdGhlIGNvbW1pdCBsb2cuCi0JCSAqIEVhc2ll c3Qgd2F5IHRvIGRlYWwgd2l0aCB0aGF0IGlzIHRvIGFjY2VwdCByZWZlcmVuY2VzIHRvCi0JCSAq IG5vbmV4aXN0ZW50IGZpbGVzIGhlcmUgYW5kIGluIFNscnVQaHlzaWNhbFJlYWRQYWdlLikKLQkJ ICoKLQkJICogTm90ZTogaXQgaXMgcG9zc2libGUgZm9yIG1vcmUgdGhhbiBvbmUgYmFja2VuZCB0 byBiZSBleGVjdXRpbmcgdGhpcwotCQkgKiBjb2RlIHNpbXVsdGFuZW91c2x5IGZvciBkaWZmZXJl bnQgcGFnZXMgb2YgdGhlIHNhbWUgZmlsZS4gSGVuY2UsCi0JCSAqIGRvbid0IHVzZSBPX0VYQ0wg b3IgT19UUlVOQyBvciBhbnl0aGluZyBsaWtlIHRoYXQuCi0JCSAqLwotCQlTbHJ1RmlsZU5hbWUo Y3RsLCBwYXRoLCBzZWdubyk7Ci0JCWZkID0gT3BlblRyYW5zaWVudEZpbGUocGF0aCwgT19SRFdS IHwgT19DUkVBVCB8IFBHX0JJTkFSWSk7Ci0JCWlmIChmZCA8IDApCi0JCXsKLQkJCXNscnVfZXJy Y2F1c2UgPSBTTFJVX09QRU5fRkFJTEVEOwotCQkJc2xydV9lcnJubyA9IGVycm5vOwotCQkJcmV0 dXJuIGZhbHNlOwotCQl9Ci0KLQkJaWYgKGZkYXRhKQotCQl7Ci0JCQlpZiAoZmRhdGEtPm51bV9m aWxlcyA8IE1BWF9XUklURUFMTF9CVUZGRVJTKQotCQkJewotCQkJCWZkYXRhLT5mZFtmZGF0YS0+ bnVtX2ZpbGVzXSA9IGZkOwotCQkJCWZkYXRhLT5zZWdub1tmZGF0YS0+bnVtX2ZpbGVzXSA9IHNl Z25vOwotCQkJCWZkYXRhLT5udW1fZmlsZXMrKzsKLQkJCX0KLQkJCWVsc2UKLQkJCXsKLQkJCQkv KgotCQkJCSAqIEluIHRoZSB1bmxpa2VseSBldmVudCB0aGF0IHdlIGV4Y2VlZCBNQVhfRkxVU0hf QlVGRkVSUywKLQkJCQkgKiBmYWxsIGJhY2sgdG8gdHJlYXRpbmcgaXQgYXMgYSBzdGFuZGFsb25l IHdyaXRlLgotCQkJCSAqLwotCQkJCWZkYXRhID0gTlVMTDsKLQkJCX0KLQkJfQotCX0KLQotCWVy cm5vID0gMDsKLQlwZ3N0YXRfcmVwb3J0X3dhaXRfc3RhcnQoV0FJVF9FVkVOVF9TTFJVX1dSSVRF KTsKLQlpZiAocGdfcHdyaXRlKGZkLCBzaGFyZWQtPnBhZ2VfYnVmZmVyW3Nsb3Rub10sIEJMQ0tT Wiwgb2Zmc2V0KSAhPSBCTENLU1opCi0JewotCQlwZ3N0YXRfcmVwb3J0X3dhaXRfZW5kKCk7Ci0J CS8qIGlmIHdyaXRlIGRpZG4ndCBzZXQgZXJybm8sIGFzc3VtZSBwcm9ibGVtIGlzIG5vIGRpc2sg c3BhY2UgKi8KLQkJaWYgKGVycm5vID09IDApCi0JCQllcnJubyA9IEVOT1NQQzsKLQkJc2xydV9l cnJjYXVzZSA9IFNMUlVfV1JJVEVfRkFJTEVEOwotCQlzbHJ1X2Vycm5vID0gZXJybm87Ci0JCWlm ICghZmRhdGEpCi0JCQlDbG9zZVRyYW5zaWVudEZpbGUoZmQpOwotCQlyZXR1cm4gZmFsc2U7Ci0J fQotCXBnc3RhdF9yZXBvcnRfd2FpdF9lbmQoKTsKLQotCS8qIFF1ZXVlIHVwIGEgc3luYyByZXF1 ZXN0IGZvciB0aGUgY2hlY2twb2ludGVyLiAqLwotCWlmIChjdGwtPnN5bmNfaGFuZGxlciAhPSBT WU5DX0hBTkRMRVJfTk9ORSkKLQl7Ci0JCUZpbGVUYWcJCXRhZzsKLQotCQlJTklUX1NMUlVGSUxF VEFHKHRhZywgY3RsLT5zeW5jX2hhbmRsZXIsIHNlZ25vKTsKLQkJaWYgKCFSZWdpc3RlclN5bmNS ZXF1ZXN0KCZ0YWcsIFNZTkNfUkVRVUVTVCwgZmFsc2UpKQotCQl7Ci0JCQkvKiBObyBzcGFjZSB0 byBlbnF1ZXVlIHN5bmMgcmVxdWVzdC4gIERvIGl0IHN5bmNocm9ub3VzbHkuICovCi0JCQlwZ3N0 YXRfcmVwb3J0X3dhaXRfc3RhcnQoV0FJVF9FVkVOVF9TTFJVX1NZTkMpOwotCQkJaWYgKHBnX2Zz eW5jKGZkKSAhPSAwKQotCQkJewotCQkJCXBnc3RhdF9yZXBvcnRfd2FpdF9lbmQoKTsKLQkJCQlz bHJ1X2VycmNhdXNlID0gU0xSVV9GU1lOQ19GQUlMRUQ7Ci0JCQkJc2xydV9lcnJubyA9IGVycm5v OwotCQkJCUNsb3NlVHJhbnNpZW50RmlsZShmZCk7Ci0JCQkJcmV0dXJuIGZhbHNlOwotCQkJfQot CQkJcGdzdGF0X3JlcG9ydF93YWl0X2VuZCgpOwotCQl9Ci0JfQotCi0JLyogQ2xvc2UgZmlsZSwg dW5sZXNzIHBhcnQgb2YgZmx1c2ggcmVxdWVzdC4gKi8KLQlpZiAoIWZkYXRhKQotCXsKLQkJaWYg KENsb3NlVHJhbnNpZW50RmlsZShmZCkgIT0gMCkKLQkJewotCQkJc2xydV9lcnJjYXVzZSA9IFNM UlVfQ0xPU0VfRkFJTEVEOwotCQkJc2xydV9lcnJubyA9IGVycm5vOwotCQkJcmV0dXJuIGZhbHNl OwotCQl9Ci0JfQotCi0JcmV0dXJuIHRydWU7Ci19Ci0KLS8qCi0gKiBJc3N1ZSB0aGUgZXJyb3Ig bWVzc2FnZSBhZnRlciBmYWlsdXJlIG9mIFNscnVQaHlzaWNhbFJlYWRQYWdlIG9yCi0gKiBTbHJ1 UGh5c2ljYWxXcml0ZVBhZ2UuICBDYWxsIHRoaXMgYWZ0ZXIgY2xlYW5pbmcgdXAgc2hhcmVkLW1l bW9yeSBzdGF0ZS4KLSAqLwotc3RhdGljIHZvaWQKLVNscnVSZXBvcnRJT0Vycm9yKFNscnVDdGwg Y3RsLCBpbnQgcGFnZW5vLCBUcmFuc2FjdGlvbklkIHhpZCkKLXsKLQlpbnQJCQlzZWdubyA9IHBh Z2VubyAvIFNMUlVfUEFHRVNfUEVSX1NFR01FTlQ7Ci0JaW50CQkJcnBhZ2VubyA9IHBhZ2VubyAl IFNMUlVfUEFHRVNfUEVSX1NFR01FTlQ7Ci0JaW50CQkJb2Zmc2V0ID0gcnBhZ2VubyAqIEJMQ0tT WjsKLQljaGFyCQlwYXRoW01BWFBHUEFUSF07Ci0KLQlTbHJ1RmlsZU5hbWUoY3RsLCBwYXRoLCBz ZWdubyk7Ci0JZXJybm8gPSBzbHJ1X2Vycm5vOwotCXN3aXRjaCAoc2xydV9lcnJjYXVzZSkKLQl7 Ci0JCWNhc2UgU0xSVV9PUEVOX0ZBSUxFRDoKLQkJCWVyZXBvcnQoRVJST1IsCi0JCQkJCShlcnJj b2RlX2Zvcl9maWxlX2FjY2VzcygpLAotCQkJCQkgZXJybXNnKCJjb3VsZCBub3QgYWNjZXNzIHN0 YXR1cyBvZiB0cmFuc2FjdGlvbiAldSIsIHhpZCksCi0JCQkJCSBlcnJkZXRhaWwoIkNvdWxkIG5v dCBvcGVuIGZpbGUgXCIlc1wiOiAlbS4iLCBwYXRoKSkpOwotCQkJYnJlYWs7Ci0JCWNhc2UgU0xS VV9TRUVLX0ZBSUxFRDoKLQkJCWVyZXBvcnQoRVJST1IsCi0JCQkJCShlcnJjb2RlX2Zvcl9maWxl X2FjY2VzcygpLAotCQkJCQkgZXJybXNnKCJjb3VsZCBub3QgYWNjZXNzIHN0YXR1cyBvZiB0cmFu c2FjdGlvbiAldSIsIHhpZCksCi0JCQkJCSBlcnJkZXRhaWwoIkNvdWxkIG5vdCBzZWVrIGluIGZp bGUgXCIlc1wiIHRvIG9mZnNldCAlZDogJW0uIiwKLQkJCQkJCQkgICBwYXRoLCBvZmZzZXQpKSk7 Ci0JCQlicmVhazsKLQkJY2FzZSBTTFJVX1JFQURfRkFJTEVEOgotCQkJaWYgKGVycm5vKQotCQkJ CWVyZXBvcnQoRVJST1IsCi0JCQkJCQkoZXJyY29kZV9mb3JfZmlsZV9hY2Nlc3MoKSwKLQkJCQkJ CSBlcnJtc2coImNvdWxkIG5vdCBhY2Nlc3Mgc3RhdHVzIG9mIHRyYW5zYWN0aW9uICV1IiwgeGlk KSwKLQkJCQkJCSBlcnJkZXRhaWwoIkNvdWxkIG5vdCByZWFkIGZyb20gZmlsZSBcIiVzXCIgYXQg b2Zmc2V0ICVkOiAlbS4iLAotCQkJCQkJCQkgICBwYXRoLCBvZmZzZXQpKSk7Ci0JCQllbHNlCi0J CQkJZXJlcG9ydChFUlJPUiwKLQkJCQkJCShlcnJtc2coImNvdWxkIG5vdCBhY2Nlc3Mgc3RhdHVz IG9mIHRyYW5zYWN0aW9uICV1IiwgeGlkKSwKLQkJCQkJCSBlcnJkZXRhaWwoIkNvdWxkIG5vdCBy ZWFkIGZyb20gZmlsZSBcIiVzXCIgYXQgb2Zmc2V0ICVkOiByZWFkIHRvbyBmZXcgYnl0ZXMuIiwg cGF0aCwgb2Zmc2V0KSkpOwotCQkJYnJlYWs7Ci0JCWNhc2UgU0xSVV9XUklURV9GQUlMRUQ6Ci0J CQlpZiAoZXJybm8pCi0JCQkJZXJlcG9ydChFUlJPUiwKLQkJCQkJCShlcnJjb2RlX2Zvcl9maWxl X2FjY2VzcygpLAotCQkJCQkJIGVycm1zZygiY291bGQgbm90IGFjY2VzcyBzdGF0dXMgb2YgdHJh bnNhY3Rpb24gJXUiLCB4aWQpLAotCQkJCQkJIGVycmRldGFpbCgiQ291bGQgbm90IHdyaXRlIHRv IGZpbGUgXCIlc1wiIGF0IG9mZnNldCAlZDogJW0uIiwKLQkJCQkJCQkJICAgcGF0aCwgb2Zmc2V0 KSkpOwotCQkJZWxzZQotCQkJCWVyZXBvcnQoRVJST1IsCi0JCQkJCQkoZXJybXNnKCJjb3VsZCBu b3QgYWNjZXNzIHN0YXR1cyBvZiB0cmFuc2FjdGlvbiAldSIsIHhpZCksCi0JCQkJCQkgZXJyZGV0 YWlsKCJDb3VsZCBub3Qgd3JpdGUgdG8gZmlsZSBcIiVzXCIgYXQgb2Zmc2V0ICVkOiB3cm90ZSB0 b28gZmV3IGJ5dGVzLiIsCi0JCQkJCQkJCSAgIHBhdGgsIG9mZnNldCkpKTsKLQkJCWJyZWFrOwot CQljYXNlIFNMUlVfRlNZTkNfRkFJTEVEOgotCQkJZXJlcG9ydChkYXRhX3N5bmNfZWxldmVsKEVS Uk9SKSwKLQkJCQkJKGVycmNvZGVfZm9yX2ZpbGVfYWNjZXNzKCksCi0JCQkJCSBlcnJtc2coImNv dWxkIG5vdCBhY2Nlc3Mgc3RhdHVzIG9mIHRyYW5zYWN0aW9uICV1IiwgeGlkKSwKLQkJCQkJIGVy cmRldGFpbCgiQ291bGQgbm90IGZzeW5jIGZpbGUgXCIlc1wiOiAlbS4iLAotCQkJCQkJCSAgIHBh dGgpKSk7Ci0JCQlicmVhazsKLQkJY2FzZSBTTFJVX0NMT1NFX0ZBSUxFRDoKLQkJCWVyZXBvcnQo RVJST1IsCi0JCQkJCShlcnJjb2RlX2Zvcl9maWxlX2FjY2VzcygpLAotCQkJCQkgZXJybXNnKCJj b3VsZCBub3QgYWNjZXNzIHN0YXR1cyBvZiB0cmFuc2FjdGlvbiAldSIsIHhpZCksCi0JCQkJCSBl cnJkZXRhaWwoIkNvdWxkIG5vdCBjbG9zZSBmaWxlIFwiJXNcIjogJW0uIiwKLQkJCQkJCQkgICBw YXRoKSkpOwotCQkJYnJlYWs7Ci0JCWRlZmF1bHQ6Ci0JCQkvKiBjYW4ndCBnZXQgaGVyZSwgd2Ug dHJ1c3QgKi8KLQkJCWVsb2coRVJST1IsICJ1bnJlY29nbml6ZWQgU2ltcGxlTHJ1IGVycm9yIGNh dXNlOiAlZCIsCi0JCQkJIChpbnQpIHNscnVfZXJyY2F1c2UpOwotCQkJYnJlYWs7Ci0JfQotfQot Ci0vKgotICogU2VsZWN0IHRoZSBzbG90IHRvIHJlLXVzZSB3aGVuIHdlIG5lZWQgYSBmcmVlIHNs b3QuCi0gKgotICogVGhlIHRhcmdldCBwYWdlIG51bWJlciBpcyBwYXNzZWQgYmVjYXVzZSB3ZSBu ZWVkIHRvIGNvbnNpZGVyIHRoZQotICogcG9zc2liaWxpdHkgdGhhdCBzb21lIG90aGVyIHByb2Nl c3MgcmVhZHMgaW4gdGhlIHRhcmdldCBwYWdlIHdoaWxlCi0gKiB3ZSBhcmUgZG9pbmcgSS9PIHRv IGZyZWUgYSBzbG90LiAgSGVuY2UsIGNoZWNrIG9yIHJlY2hlY2sgdG8gc2VlIGlmCi0gKiBhbnkg c2xvdCBhbHJlYWR5IGhvbGRzIHRoZSB0YXJnZXQgcGFnZSwgYW5kIHJldHVybiB0aGF0IHNsb3Qg aWYgc28uCi0gKiBUaHVzLCB0aGUgcmV0dXJuZWQgc2xvdCBpcyAqZWl0aGVyKiBhIHNsb3QgYWxy ZWFkeSBob2xkaW5nIHRoZSBwYWdlbm8KLSAqIChjb3VsZCBiZSBhbnkgc3RhdGUgZXhjZXB0IEVN UFRZKSwgKm9yKiBhIGZyZWVhYmxlIHNsb3QgKHN0YXRlIEVNUFRZCi0gKiBvciBDTEVBTikuCi0g KgotICogQ29udHJvbCBsb2NrIG11c3QgYmUgaGVsZCBhdCBlbnRyeSwgYW5kIHdpbGwgYmUgaGVs ZCBhdCBleGl0LgotICovCi1zdGF0aWMgaW50Ci1TbHJ1U2VsZWN0TFJVUGFnZShTbHJ1Q3RsIGN0 bCwgaW50IHBhZ2VubykKLXsKLQlTbHJ1U2hhcmVkCXNoYXJlZCA9IGN0bC0+c2hhcmVkOwotCi0J LyogT3V0ZXIgbG9vcCBoYW5kbGVzIHJlc3RhcnQgYWZ0ZXIgSS9PICovCi0JZm9yICg7OykKLQl7 Ci0JCWludAkJCXNsb3RubzsKLQkJaW50CQkJY3VyX2NvdW50OwotCQlpbnQJCQliZXN0dmFsaWRz bG90ID0gMDsJLyoga2VlcCBjb21waWxlciBxdWlldCAqLwotCQlpbnQJCQliZXN0X3ZhbGlkX2Rl bHRhID0gLTE7Ci0JCWludAkJCWJlc3RfdmFsaWRfcGFnZV9udW1iZXIgPSAwOyAvKiBrZWVwIGNv bXBpbGVyIHF1aWV0ICovCi0JCWludAkJCWJlc3RpbnZhbGlkc2xvdCA9IDA7CS8qIGtlZXAgY29t cGlsZXIgcXVpZXQgKi8KLQkJaW50CQkJYmVzdF9pbnZhbGlkX2RlbHRhID0gLTE7Ci0JCWludAkJ CWJlc3RfaW52YWxpZF9wYWdlX251bWJlciA9IDA7CS8qIGtlZXAgY29tcGlsZXIgcXVpZXQgKi8K LQotCQkvKiBTZWUgaWYgcGFnZSBhbHJlYWR5IGhhcyBhIGJ1ZmZlciBhc3NpZ25lZCAqLwotCQlm b3IgKHNsb3RubyA9IDA7IHNsb3RubyA8IHNoYXJlZC0+bnVtX3Nsb3RzOyBzbG90bm8rKykKLQkJ ewotCQkJaWYgKHNoYXJlZC0+cGFnZV9udW1iZXJbc2xvdG5vXSA9PSBwYWdlbm8gJiYKLQkJCQlz aGFyZWQtPnBhZ2Vfc3RhdHVzW3Nsb3Rub10gIT0gU0xSVV9QQUdFX0VNUFRZKQotCQkJCXJldHVy biBzbG90bm87Ci0JCX0KLQotCQkvKgotCQkgKiBJZiB3ZSBmaW5kIGFueSBFTVBUWSBzbG90LCBq dXN0IHNlbGVjdCB0aGF0IG9uZS4gRWxzZSBjaG9vc2UgYQotCQkgKiB2aWN0aW0gcGFnZSB0byBy ZXBsYWNlLiAgV2Ugbm9ybWFsbHkgdGFrZSB0aGUgbGVhc3QgcmVjZW50bHkgdXNlZAotCQkgKiB2 YWxpZCBwYWdlLCBidXQgd2Ugd2lsbCBuZXZlciB0YWtlIHRoZSBzbG90IGNvbnRhaW5pbmcKLQkJ ICogbGF0ZXN0X3BhZ2VfbnVtYmVyLCBldmVuIGlmIGl0IGFwcGVhcnMgbGVhc3QgcmVjZW50bHkg dXNlZC4gIFdlCi0JCSAqIHdpbGwgc2VsZWN0IGEgc2xvdCB0aGF0IGlzIGFscmVhZHkgSS9PIGJ1 c3kgb25seSBpZiB0aGVyZSBpcyBubwotCQkgKiBvdGhlciBjaG9pY2U6IGEgcmVhZC1idXN5IHNs b3Qgd2lsbCBub3QgYmUgbGVhc3QgcmVjZW50bHkgdXNlZCBvbmNlCi0JCSAqIHRoZSByZWFkIGZp bmlzaGVzLCBhbmQgd2FpdGluZyBmb3IgYW4gSS9PIG9uIGEgd3JpdGUtYnVzeSBzbG90IGlzCi0J CSAqIGluZmVyaW9yIHRvIGp1c3QgcGlja2luZyBzb21lIG90aGVyIHNsb3QuICBUZXN0aW5nIHNo b3dzIHRoZSBzbG90Ci0JCSAqIHdlIHBpY2sgaW5zdGVhZCB3aWxsIG9mdGVuIGJlIGNsZWFuLCBh bGxvd2luZyB1cyB0byBiZWdpbiBhIHJlYWQgYXQKLQkJICogb25jZS4KLQkJICoKLQkJICogTm9y bWFsbHkgdGhlIHBhZ2VfbHJ1X2NvdW50IHZhbHVlcyB3aWxsIGFsbCBiZSBkaWZmZXJlbnQgYW5k IHNvCi0JCSAqIHRoZXJlIHdpbGwgYmUgYSB3ZWxsLWRlZmluZWQgTFJVIHBhZ2UuICBCdXQgc2lu Y2Ugd2UgYWxsb3cKLQkJICogY29uY3VycmVudCBleGVjdXRpb24gb2YgU2xydVJlY2VudGx5VXNl ZCgpIHdpdGhpbgotCQkgKiBTaW1wbGVMcnVSZWFkUGFnZV9SZWFkT25seSgpLCBpdCBpcyBwb3Nz aWJsZSB0aGF0IG11bHRpcGxlIHBhZ2VzCi0JCSAqIGFjcXVpcmUgdGhlIHNhbWUgbHJ1X2NvdW50 IHZhbHVlcy4gIEluIHRoYXQgY2FzZSB3ZSBicmVhayB0aWVzIGJ5Ci0JCSAqIGNob29zaW5nIHRo ZSBmdXJ0aGVzdC1iYWNrIHBhZ2UuCi0JCSAqCi0JCSAqIE5vdGljZSB0aGF0IHRoaXMgbmV4dCBs aW5lIGZvcmNpYmx5IGFkdmFuY2VzIGN1cl9scnVfY291bnQgdG8gYQotCQkgKiB2YWx1ZSB0aGF0 IGlzIGNlcnRhaW5seSBiZXlvbmQgYW55IHZhbHVlIHRoYXQgd2lsbCBiZSBpbiB0aGUKLQkJICog cGFnZV9scnVfY291bnQgYXJyYXkgYWZ0ZXIgdGhlIGxvb3AgZmluaXNoZXMuICBUaGlzIGVuc3Vy ZXMgdGhhdAotCQkgKiB0aGUgbmV4dCBleGVjdXRpb24gb2YgU2xydVJlY2VudGx5VXNlZCB3aWxs IG1hcmsgdGhlIHBhZ2UgbmV3bHkKLQkJICogdXNlZCwgZXZlbiBpZiBpdCdzIGZvciBhIHBhZ2Ug dGhhdCBoYXMgdGhlIGN1cnJlbnQgY291bnRlciB2YWx1ZS4KLQkJICogVGhhdCBnZXRzIHVzIGJh Y2sgb24gdGhlIHBhdGggdG8gaGF2aW5nIGdvb2QgZGF0YSB3aGVuIHRoZXJlIGFyZQotCQkgKiBt dWx0aXBsZSBwYWdlcyB3aXRoIHRoZSBzYW1lIGxydV9jb3VudC4KLQkJICovCi0JCWN1cl9jb3Vu dCA9IChzaGFyZWQtPmN1cl9scnVfY291bnQpKys7Ci0JCWZvciAoc2xvdG5vID0gMDsgc2xvdG5v IDwgc2hhcmVkLT5udW1fc2xvdHM7IHNsb3RubysrKQotCQl7Ci0JCQlpbnQJCQl0aGlzX2RlbHRh OwotCQkJaW50CQkJdGhpc19wYWdlX251bWJlcjsKLQotCQkJaWYgKHNoYXJlZC0+cGFnZV9zdGF0 dXNbc2xvdG5vXSA9PSBTTFJVX1BBR0VfRU1QVFkpCi0JCQkJcmV0dXJuIHNsb3RubzsKLQkJCXRo aXNfZGVsdGEgPSBjdXJfY291bnQgLSBzaGFyZWQtPnBhZ2VfbHJ1X2NvdW50W3Nsb3Rub107Ci0J CQlpZiAodGhpc19kZWx0YSA8IDApCi0JCQl7Ci0JCQkJLyoKLQkJCQkgKiBDbGVhbiB1cCBpbiBj YXNlIHNoYXJlZCB1cGRhdGVzIGhhdmUgY2F1c2VkIGN1cl9jb3VudAotCQkJCSAqIGluY3JlbWVu dHMgdG8gZ2V0ICJsb3N0Ii4gIFdlIGJhY2sgb2ZmIHRoZSBwYWdlIGNvdW50cywKLQkJCQkgKiBy YXRoZXIgdGhhbiB0cnlpbmcgdG8gaW5jcmVhc2UgY3VyX2NvdW50LCB0byBhdm9pZCBhbnkKLQkJ CQkgKiBxdWVzdGlvbiBvZiBpbmZpbml0ZSBsb29wcyBvciBmYWlsdXJlIGluIHRoZSBwcmVzZW5j ZSBvZgotCQkJCSAqIHdyYXBwZWQtYXJvdW5kIGNvdW50cy4KLQkJCQkgKi8KLQkJCQlzaGFyZWQt PnBhZ2VfbHJ1X2NvdW50W3Nsb3Rub10gPSBjdXJfY291bnQ7Ci0JCQkJdGhpc19kZWx0YSA9IDA7 Ci0JCQl9Ci0JCQl0aGlzX3BhZ2VfbnVtYmVyID0gc2hhcmVkLT5wYWdlX251bWJlcltzbG90bm9d OwotCQkJaWYgKHRoaXNfcGFnZV9udW1iZXIgPT0gc2hhcmVkLT5sYXRlc3RfcGFnZV9udW1iZXIp Ci0JCQkJY29udGludWU7Ci0JCQlpZiAoc2hhcmVkLT5wYWdlX3N0YXR1c1tzbG90bm9dID09IFNM UlVfUEFHRV9WQUxJRCkKLQkJCXsKLQkJCQlpZiAodGhpc19kZWx0YSA+IGJlc3RfdmFsaWRfZGVs dGEgfHwKLQkJCQkJKHRoaXNfZGVsdGEgPT0gYmVzdF92YWxpZF9kZWx0YSAmJgotCQkJCQkgY3Rs LT5QYWdlUHJlY2VkZXModGhpc19wYWdlX251bWJlciwKLQkJCQkJCQkJCSAgIGJlc3RfdmFsaWRf cGFnZV9udW1iZXIpKSkKLQkJCQl7Ci0JCQkJCWJlc3R2YWxpZHNsb3QgPSBzbG90bm87Ci0JCQkJ CWJlc3RfdmFsaWRfZGVsdGEgPSB0aGlzX2RlbHRhOwotCQkJCQliZXN0X3ZhbGlkX3BhZ2VfbnVt YmVyID0gdGhpc19wYWdlX251bWJlcjsKLQkJCQl9Ci0JCQl9Ci0JCQllbHNlCi0JCQl7Ci0JCQkJ aWYgKHRoaXNfZGVsdGEgPiBiZXN0X2ludmFsaWRfZGVsdGEgfHwKLQkJCQkJKHRoaXNfZGVsdGEg PT0gYmVzdF9pbnZhbGlkX2RlbHRhICYmCi0JCQkJCSBjdGwtPlBhZ2VQcmVjZWRlcyh0aGlzX3Bh Z2VfbnVtYmVyLAotCQkJCQkJCQkJICAgYmVzdF9pbnZhbGlkX3BhZ2VfbnVtYmVyKSkpCi0JCQkJ ewotCQkJCQliZXN0aW52YWxpZHNsb3QgPSBzbG90bm87Ci0JCQkJCWJlc3RfaW52YWxpZF9kZWx0 YSA9IHRoaXNfZGVsdGE7Ci0JCQkJCWJlc3RfaW52YWxpZF9wYWdlX251bWJlciA9IHRoaXNfcGFn ZV9udW1iZXI7Ci0JCQkJfQotCQkJfQotCQl9Ci0KLQkJLyoKLQkJICogSWYgYWxsIHBhZ2VzIChl eGNlcHQgcG9zc2libHkgdGhlIGxhdGVzdCBvbmUpIGFyZSBJL08gYnVzeSwgd2UnbGwKLQkJICog aGF2ZSB0byB3YWl0IGZvciBhbiBJL08gdG8gY29tcGxldGUgYW5kIHRoZW4gcmV0cnkuICBJbiB0 aGF0Ci0JCSAqIHVuaGFwcHkgY2FzZSwgd2UgY2hvb3NlIHRvIHdhaXQgZm9yIHRoZSBJL08gb24g dGhlIGxlYXN0IHJlY2VudGx5Ci0JCSAqIHVzZWQgc2xvdCwgb24gdGhlIGFzc3VtcHRpb24gdGhh dCBpdCB3YXMgbGlrZWx5IGluaXRpYXRlZCBmaXJzdCBvZgotCQkgKiBhbGwgdGhlIEkvT3MgaW4g cHJvZ3Jlc3MgYW5kIG1heSB0aGVyZWZvcmUgZmluaXNoIGZpcnN0LgotCQkgKi8KLQkJaWYgKGJl c3RfdmFsaWRfZGVsdGEgPCAwKQotCQl7Ci0JCQlTaW1wbGVMcnVXYWl0SU8oY3RsLCBiZXN0aW52 YWxpZHNsb3QpOwotCQkJY29udGludWU7Ci0JCX0KLQotCQkvKgotCQkgKiBJZiB0aGUgc2VsZWN0 ZWQgcGFnZSBpcyBjbGVhbiwgd2UncmUgc2V0LgotCQkgKi8KLQkJaWYgKCFzaGFyZWQtPnBhZ2Vf ZGlydHlbYmVzdHZhbGlkc2xvdF0pCi0JCQlyZXR1cm4gYmVzdHZhbGlkc2xvdDsKLQotCQkvKgot CQkgKiBXcml0ZSB0aGUgcGFnZS4KLQkJICovCi0JCVNscnVJbnRlcm5hbFdyaXRlUGFnZShjdGws IGJlc3R2YWxpZHNsb3QsIE5VTEwpOwotCi0JCS8qCi0JCSAqIE5vdyBsb29wIGJhY2sgYW5kIHRy eSBhZ2Fpbi4gIFRoaXMgaXMgdGhlIGVhc2llc3Qgd2F5IG9mIGRlYWxpbmcKLQkJICogd2l0aCBj b3JuZXIgY2FzZXMgc3VjaCBhcyB0aGUgdmljdGltIHBhZ2UgYmVpbmcgcmUtZGlydGllZCB3aGls ZSB3ZQotCQkgKiB3cm90ZSBpdC4KLQkJICovCi0JfQotfQotCi0vKgotICogV3JpdGUgZGlydHkg cGFnZXMgdG8gZGlzayBkdXJpbmcgY2hlY2twb2ludCBvciBkYXRhYmFzZSBzaHV0ZG93bi4gIEZs dXNoaW5nCi0gKiBpcyBkZWZlcnJlZCB1bnRpbCB0aGUgbmV4dCBjYWxsIHRvIFByb2Nlc3NTeW5j UmVxdWVzdHMoKSwgdGhvdWdoIHdlIGRvIGZzeW5jCi0gKiB0aGUgY29udGFpbmluZyBkaXJlY3Rv cnkgaGVyZSB0byBtYWtlIHN1cmUgdGhhdCBuZXdseSBjcmVhdGVkIGRpcmVjdG9yeQotICogZW50 cmllcyBhcmUgb24gZGlzay4KLSAqLwotdm9pZAotU2ltcGxlTHJ1V3JpdGVBbGwoU2xydUN0bCBj dGwsIGJvb2wgYWxsb3dfcmVkaXJ0aWVkKQotewotCVNscnVTaGFyZWQJc2hhcmVkID0gY3RsLT5z aGFyZWQ7Ci0JU2xydVdyaXRlQWxsRGF0YSBmZGF0YTsKLQlpbnQJCQlzbG90bm87Ci0JaW50CQkJ cGFnZW5vID0gMDsKLQlpbnQJCQlpOwotCWJvb2wJCW9rOwotCi0JLyogdXBkYXRlIHRoZSBzdGF0 cyBjb3VudGVyIG9mIGZsdXNoZXMgKi8KLQlwZ3N0YXRfY291bnRfc2xydV9mbHVzaChzaGFyZWQt PnNscnVfc3RhdHNfaWR4KTsKLQotCS8qCi0JICogRmluZCBhbmQgd3JpdGUgZGlydHkgcGFnZXMK LQkgKi8KLQlmZGF0YS5udW1fZmlsZXMgPSAwOwotCi0JTFdMb2NrQWNxdWlyZShzaGFyZWQtPkNv bnRyb2xMb2NrLCBMV19FWENMVVNJVkUpOwotCi0JZm9yIChzbG90bm8gPSAwOyBzbG90bm8gPCBz aGFyZWQtPm51bV9zbG90czsgc2xvdG5vKyspCi0JewotCQlTbHJ1SW50ZXJuYWxXcml0ZVBhZ2Uo Y3RsLCBzbG90bm8sICZmZGF0YSk7Ci0KLQkJLyoKLQkJICogSW4gc29tZSBwbGFjZXMgKGUuZy4g Y2hlY2twb2ludHMpLCB3ZSBjYW5ub3QgYXNzZXJ0IHRoYXQgdGhlIHNsb3QKLQkJICogaXMgY2xl YW4gbm93LCBzaW5jZSBhbm90aGVyIHByb2Nlc3MgbWlnaHQgaGF2ZSByZS1kaXJ0aWVkIGl0Ci0J CSAqIGFscmVhZHkuICBUaGF0J3Mgb2theS4KLQkJICovCi0JCUFzc2VydChhbGxvd19yZWRpcnRp ZWQgfHwKLQkJCSAgIHNoYXJlZC0+cGFnZV9zdGF0dXNbc2xvdG5vXSA9PSBTTFJVX1BBR0VfRU1Q VFkgfHwKLQkJCSAgIChzaGFyZWQtPnBhZ2Vfc3RhdHVzW3Nsb3Rub10gPT0gU0xSVV9QQUdFX1ZB TElEICYmCi0JCQkJIXNoYXJlZC0+cGFnZV9kaXJ0eVtzbG90bm9dKSk7Ci0JfQorCW9mZl90CQlz aXplOworCVJlbEZpbGVMb2NhdG9yIHJsb2NhdG9yID0gU2xydVJlbEZpbGVMb2NhdG9yKHNscnVf aWQsIHNlZ25vKTsKKwlTTWdyRmlsZUhhbmRsZSBzZmlsZSA9IHNtZ3JvcGVuKHJsb2NhdG9yLCBJ bnZhbGlkQmFja2VuZElkLCBNQUlOX0ZPUktOVU0pOwogCi0JTFdMb2NrUmVsZWFzZShzaGFyZWQt PkNvbnRyb2xMb2NrKTsKKwkvKiB1cGRhdGUgdGhlIHN0YXRzIGNvdW50ZXIgb2YgY2hlY2tlZCBw YWdlcyAqLworCXBnc3RhdF9jb3VudF9zbHJ1X3BhZ2VfZXhpc3RzKHNscnVfaWQpOwogCi0JLyoK LQkgKiBOb3cgY2xvc2UgYW55IGZpbGVzIHRoYXQgd2VyZSBvcGVuCi0JICovCi0Jb2sgPSB0cnVl OwotCWZvciAoaSA9IDA7IGkgPCBmZGF0YS5udW1fZmlsZXM7IGkrKykKLQl7Ci0JCWlmIChDbG9z ZVRyYW5zaWVudEZpbGUoZmRhdGEuZmRbaV0pICE9IDApCi0JCXsKLQkJCXNscnVfZXJyY2F1c2Ug PSBTTFJVX0NMT1NFX0ZBSUxFRDsKLQkJCXNscnVfZXJybm8gPSBlcnJubzsKLQkJCXBhZ2VubyA9 IGZkYXRhLnNlZ25vW2ldICogU0xSVV9QQUdFU19QRVJfU0VHTUVOVDsKLQkJCW9rID0gZmFsc2U7 Ci0JCX0KLQl9Ci0JaWYgKCFvaykKLQkJU2xydVJlcG9ydElPRXJyb3IoY3RsLCBwYWdlbm8sIElu dmFsaWRUcmFuc2FjdGlvbklkKTsKKwlpZiAoc21ncmV4aXN0cyhzZmlsZSkpCisJCXNpemUgPSBz bWdybmJsb2NrcyhzZmlsZSk7CisJZWxzZQorCQlzaXplID0gMDsKIAotCS8qIEVuc3VyZSB0aGF0 IGRpcmVjdG9yeSBlbnRyaWVzIGZvciBuZXcgZmlsZXMgYXJlIG9uIGRpc2suICovCi0JaWYgKGN0 bC0+c3luY19oYW5kbGVyICE9IFNZTkNfSEFORExFUl9OT05FKQotCQlmc3luY19mbmFtZShjdGwt PkRpciwgdHJ1ZSk7CisJcmV0dXJuIHNpemUgPj0gb2Zmc2V0ICsgQkxDS1NaOwogfQogCiAvKgpA QCAtMTIyMyw3NSArOTYsMTQgQEAgU2ltcGxlTHJ1V3JpdGVBbGwoU2xydUN0bCBjdGwsIGJvb2wg YWxsb3dfcmVkaXJ0aWVkKQogICogYWZ0ZXIgaXQgaGFzIGFjY3J1ZWQgZnJlc2hseS13cml0dGVu IGRhdGEuCiAgKi8KIHZvaWQKLVNpbXBsZUxydVRydW5jYXRlKFNscnVDdGwgY3RsLCBpbnQgY3V0 b2ZmUGFnZSkKK1NpbXBsZUxydVRydW5jYXRlKGludCBzbHJ1X2lkLCBTbHJ1UGFnZVByZWNlZGVz RnVuY3Rpb24gUGFnZVByZWNlZGVzLCBpbnQgY3V0b2ZmUGFnZSkKIHsKLQlTbHJ1U2hhcmVkCXNo YXJlZCA9IGN0bC0+c2hhcmVkOwotCWludAkJCXNsb3RubzsKLQogCS8qIHVwZGF0ZSB0aGUgc3Rh dHMgY291bnRlciBvZiB0cnVuY2F0ZXMgKi8KLQlwZ3N0YXRfY291bnRfc2xydV90cnVuY2F0ZShz aGFyZWQtPnNscnVfc3RhdHNfaWR4KTsKLQotCS8qCi0JICogU2NhbiBzaGFyZWQgbWVtb3J5IGFu ZCByZW1vdmUgYW55IHBhZ2VzIHByZWNlZGluZyB0aGUgY3V0b2ZmIHBhZ2UsIHRvCi0JICogZW5z dXJlIHdlIHdvbid0IHJld3JpdGUgdGhlbSBsYXRlci4gIChTaW5jZSB0aGlzIGlzIG5vcm1hbGx5 IGNhbGxlZCBpbgotCSAqIG9yIGp1c3QgYWZ0ZXIgYSBjaGVja3BvaW50LCBhbnkgZGlydHkgcGFn ZXMgc2hvdWxkIGhhdmUgYmVlbiBmbHVzaGVkCi0JICogYWxyZWFkeSAuLi4gd2UncmUganVzdCBi ZWluZyBleHRyYSBjYXJlZnVsIGhlcmUuKQotCSAqLwotCUxXTG9ja0FjcXVpcmUoc2hhcmVkLT5D b250cm9sTG9jaywgTFdfRVhDTFVTSVZFKTsKLQotcmVzdGFydDo7Ci0KLQkvKgotCSAqIFdoaWxl IHdlIGFyZSBob2xkaW5nIHRoZSBsb2NrLCBtYWtlIGFuIGltcG9ydGFudCBzYWZldHkgY2hlY2s6 IHRoZQotCSAqIGN1cnJlbnQgZW5kcG9pbnQgcGFnZSBtdXN0IG5vdCBiZSBlbGlnaWJsZSBmb3Ig cmVtb3ZhbC4KLQkgKi8KLQlpZiAoY3RsLT5QYWdlUHJlY2VkZXMoc2hhcmVkLT5sYXRlc3RfcGFn ZV9udW1iZXIsIGN1dG9mZlBhZ2UpKQotCXsKLQkJTFdMb2NrUmVsZWFzZShzaGFyZWQtPkNvbnRy b2xMb2NrKTsKLQkJZXJlcG9ydChMT0csCi0JCQkJKGVycm1zZygiY291bGQgbm90IHRydW5jYXRl IGRpcmVjdG9yeSBcIiVzXCI6IGFwcGFyZW50IHdyYXBhcm91bmQiLAotCQkJCQkJY3RsLT5EaXIp KSk7Ci0JCXJldHVybjsKLQl9Ci0KLQlmb3IgKHNsb3RubyA9IDA7IHNsb3RubyA8IHNoYXJlZC0+ bnVtX3Nsb3RzOyBzbG90bm8rKykKLQl7Ci0JCWlmIChzaGFyZWQtPnBhZ2Vfc3RhdHVzW3Nsb3Ru b10gPT0gU0xSVV9QQUdFX0VNUFRZKQotCQkJY29udGludWU7Ci0JCWlmICghY3RsLT5QYWdlUHJl Y2VkZXMoc2hhcmVkLT5wYWdlX251bWJlcltzbG90bm9dLCBjdXRvZmZQYWdlKSkKLQkJCWNvbnRp bnVlOwotCi0JCS8qCi0JCSAqIElmIHBhZ2UgaXMgY2xlYW4sIGp1c3QgY2hhbmdlIHN0YXRlIHRv IEVNUFRZIChleHBlY3RlZCBjYXNlKS4KLQkJICovCi0JCWlmIChzaGFyZWQtPnBhZ2Vfc3RhdHVz W3Nsb3Rub10gPT0gU0xSVV9QQUdFX1ZBTElEICYmCi0JCQkhc2hhcmVkLT5wYWdlX2RpcnR5W3Ns b3Rub10pCi0JCXsKLQkJCXNoYXJlZC0+cGFnZV9zdGF0dXNbc2xvdG5vXSA9IFNMUlVfUEFHRV9F TVBUWTsKLQkJCWNvbnRpbnVlOwotCQl9Ci0KLQkJLyoKLQkJICogSG1tLCB3ZSBoYXZlIChvciBt YXkgaGF2ZSkgSS9PIG9wZXJhdGlvbnMgYWN0aW5nIG9uIHRoZSBwYWdlLCBzbwotCQkgKiB3ZSd2 ZSBnb3QgdG8gd2FpdCBmb3IgdGhlbSB0byBmaW5pc2ggYW5kIHRoZW4gc3RhcnQgYWdhaW4uIFRo aXMgaXMKLQkJICogdGhlIHNhbWUgbG9naWMgYXMgaW4gU2xydVNlbGVjdExSVVBhZ2UuICAoWFhY IGlmIHBhZ2UgaXMgZGlydHksCi0JCSAqIHdvdWxkbid0IGl0IGJlIE9LIHRvIGp1c3QgZGlzY2Fy ZCBpdCB3aXRob3V0IHdyaXRpbmcgaXQ/Ci0JCSAqIFNscnVNYXlEZWxldGVTZWdtZW50KCkgdXNl cyBhIHN0cmljdGVyIHF1YWxpZmljYXRpb24sIHNvIHdlIG1pZ2h0Ci0JCSAqIG5vdCBkZWxldGUg dGhpcyBwYWdlIGluIHRoZSBlbmQ7IGV2ZW4gaWYgd2UgZG9uJ3QgZGVsZXRlIGl0LCB3ZQotCQkg KiB3b24ndCBoYXZlIGNhdXNlIHRvIHJlYWQgaXRzIGRhdGEgYWdhaW4uICBGb3Igbm93LCBrZWVw IHRoZSBsb2dpYwotCQkgKiB0aGUgc2FtZSBhcyBpdCB3YXMuKQotCQkgKi8KLQkJaWYgKHNoYXJl ZC0+cGFnZV9zdGF0dXNbc2xvdG5vXSA9PSBTTFJVX1BBR0VfVkFMSUQpCi0JCQlTbHJ1SW50ZXJu YWxXcml0ZVBhZ2UoY3RsLCBzbG90bm8sIE5VTEwpOwotCQllbHNlCi0JCQlTaW1wbGVMcnVXYWl0 SU8oY3RsLCBzbG90bm8pOwotCQlnb3RvIHJlc3RhcnQ7Ci0JfQotCi0JTFdMb2NrUmVsZWFzZShz aGFyZWQtPkNvbnRyb2xMb2NrKTsKKwlwZ3N0YXRfY291bnRfc2xydV90cnVuY2F0ZShzbHJ1X2lk KTsKIAogCS8qIE5vdyB3ZSBjYW4gcmVtb3ZlIHRoZSBvbGQgc2VnbWVudChzKSAqLwotCSh2b2lk KSBTbHJ1U2NhbkRpcmVjdG9yeShjdGwsIFNscnVTY2FuRGlyQ2JEZWxldGVDdXRvZmYsICZjdXRv ZmZQYWdlKTsKKwkodm9pZCkgU2xydVNjYW5EaXJlY3Rvcnkoc2xydV9pZCwgUGFnZVByZWNlZGVz LCBTbHJ1U2NhbkRpckNiRGVsZXRlQ3V0b2ZmLAorCQkJCQkJCSAmY3V0b2ZmUGFnZSk7CiB9CiAK IC8qCkBAIC0xMzAxLDc3ICsxMTMsMjIgQEAgcmVzdGFydDo7CiAgKiB0aGV5IGVpdGhlciBjYW4n dCB5ZXQgY29udGFpbiBhbnl0aGluZywgb3IgaGF2ZSBhbHJlYWR5IGJlZW4gY2xlYW5lZCBvdXQu CiAgKi8KIHN0YXRpYyB2b2lkCi1TbHJ1SW50ZXJuYWxEZWxldGVTZWdtZW50KFNscnVDdGwgY3Rs LCBpbnQgc2Vnbm8pCitTbHJ1SW50ZXJuYWxEZWxldGVTZWdtZW50KGludCBzbHJ1X2lkLCBpbnQg c2Vnbm8pCiB7Ci0JY2hhcgkJcGF0aFtNQVhQR1BBVEhdOwotCi0JLyogRm9yZ2V0IGFueSBmc3lu YyByZXF1ZXN0cyBxdWV1ZWQgZm9yIHRoaXMgc2VnbWVudC4gKi8KLQlpZiAoY3RsLT5zeW5jX2hh bmRsZXIgIT0gU1lOQ19IQU5ETEVSX05PTkUpCi0JewotCQlGaWxlVGFnCQl0YWc7Ci0KLQkJSU5J VF9TTFJVRklMRVRBRyh0YWcsIGN0bC0+c3luY19oYW5kbGVyLCBzZWdubyk7Ci0JCVJlZ2lzdGVy U3luY1JlcXVlc3QoJnRhZywgU1lOQ19GT1JHRVRfUkVRVUVTVCwgdHJ1ZSk7Ci0JfQorCVJlbEZp bGVMb2NhdG9yIHJsb2NhdG9yID0gU2xydVJlbEZpbGVMb2NhdG9yKHNscnVfaWQsIHNlZ25vKTsK KwlTTWdyRmlsZUhhbmRsZSBzZmlsZSA9IHNtZ3JvcGVuKHJsb2NhdG9yLCBJbnZhbGlkQmFja2Vu ZElkLCBNQUlOX0ZPUktOVU0pOwogCiAJLyogVW5saW5rIHRoZSBmaWxlLiAqLwotCVNscnVGaWxl TmFtZShjdGwsIHBhdGgsIHNlZ25vKTsKLQllcmVwb3J0KERFQlVHMiwgKGVycm1zZ19pbnRlcm5h bCgicmVtb3ZpbmcgZmlsZSBcIiVzXCIiLCBwYXRoKSkpOwotCXVubGluayhwYXRoKTsKKwlzbWdy dW5saW5rKHNmaWxlLCBmYWxzZSk7CiB9CiAKIC8qCiAgKiBEZWxldGUgYW4gaW5kaXZpZHVhbCBT TFJVIHNlZ21lbnQsIGlkZW50aWZpZWQgYnkgdGhlIHNlZ21lbnQgbnVtYmVyLgogICovCiB2b2lk Ci1TbHJ1RGVsZXRlU2VnbWVudChTbHJ1Q3RsIGN0bCwgaW50IHNlZ25vKQorU2xydURlbGV0ZVNl Z21lbnQoaW50IHNscnVfaWQsIGludCBzZWdubykKIHsKLQlTbHJ1U2hhcmVkCXNoYXJlZCA9IGN0 bC0+c2hhcmVkOwotCWludAkJCXNsb3RubzsKLQlib29sCQlkaWRfd3JpdGU7Ci0KLQkvKiBDbGVh biBvdXQgYW55IHBvc3NpYmx5IGV4aXN0aW5nIHJlZmVyZW5jZXMgdG8gdGhlIHNlZ21lbnQuICov Ci0JTFdMb2NrQWNxdWlyZShzaGFyZWQtPkNvbnRyb2xMb2NrLCBMV19FWENMVVNJVkUpOwotcmVz dGFydDoKLQlkaWRfd3JpdGUgPSBmYWxzZTsKLQlmb3IgKHNsb3RubyA9IDA7IHNsb3RubyA8IHNo YXJlZC0+bnVtX3Nsb3RzOyBzbG90bm8rKykKLQl7Ci0JCWludAkJCXBhZ2VzZWdubyA9IHNoYXJl ZC0+cGFnZV9udW1iZXJbc2xvdG5vXSAvIFNMUlVfUEFHRVNfUEVSX1NFR01FTlQ7Ci0KLQkJaWYg KHNoYXJlZC0+cGFnZV9zdGF0dXNbc2xvdG5vXSA9PSBTTFJVX1BBR0VfRU1QVFkpCi0JCQljb250 aW51ZTsKLQotCQkvKiBub3QgdGhlIHNlZ21lbnQgd2UncmUgbG9va2luZyBmb3IgKi8KLQkJaWYg KHBhZ2VzZWdubyAhPSBzZWdubykKLQkJCWNvbnRpbnVlOwotCi0JCS8qIElmIHBhZ2UgaXMgY2xl YW4sIGp1c3QgY2hhbmdlIHN0YXRlIHRvIEVNUFRZIChleHBlY3RlZCBjYXNlKS4gKi8KLQkJaWYg KHNoYXJlZC0+cGFnZV9zdGF0dXNbc2xvdG5vXSA9PSBTTFJVX1BBR0VfVkFMSUQgJiYKLQkJCSFz aGFyZWQtPnBhZ2VfZGlydHlbc2xvdG5vXSkKLQkJewotCQkJc2hhcmVkLT5wYWdlX3N0YXR1c1tz bG90bm9dID0gU0xSVV9QQUdFX0VNUFRZOwotCQkJY29udGludWU7Ci0JCX0KLQotCQkvKiBTYW1l IGxvZ2ljIGFzIFNpbXBsZUxydVRydW5jYXRlKCkgKi8KLQkJaWYgKHNoYXJlZC0+cGFnZV9zdGF0 dXNbc2xvdG5vXSA9PSBTTFJVX1BBR0VfVkFMSUQpCi0JCQlTbHJ1SW50ZXJuYWxXcml0ZVBhZ2Uo Y3RsLCBzbG90bm8sIE5VTEwpOwotCQllbHNlCi0JCQlTaW1wbGVMcnVXYWl0SU8oY3RsLCBzbG90 bm8pOwotCi0JCWRpZF93cml0ZSA9IHRydWU7Ci0JfQotCi0JLyoKLQkgKiBCZSBleHRyYSBjYXJl ZnVsIGFuZCByZS1jaGVjay4gVGhlIElPIGZ1bmN0aW9ucyByZWxlYXNlIHRoZSBjb250cm9sCi0J ICogbG9jaywgc28gbmV3IHBhZ2VzIGNvdWxkIGhhdmUgYmVlbiByZWFkIGluLgotCSAqLwotCWlm IChkaWRfd3JpdGUpCi0JCWdvdG8gcmVzdGFydDsKLQotCVNscnVJbnRlcm5hbERlbGV0ZVNlZ21l bnQoY3RsLCBzZWdubyk7Ci0KLQlMV0xvY2tSZWxlYXNlKHNoYXJlZC0+Q29udHJvbExvY2spOwor CVNscnVJbnRlcm5hbERlbGV0ZVNlZ21lbnQoc2xydV9pZCwgc2Vnbm8pOwogfQogCiAvKgpAQCAt MTM4OCwxOSArMTQ1LDIxIEBAIHJlc3RhcnQ6CiAgKiBmaXJzdD49Y3V0b2ZmICYmIGxhc3Q+PWN1 dG9mZjogbm87IGV2ZXJ5IHBhZ2Ugb2YgdGhpcyBzZWdtZW50IGlzIHRvbyB5b3VuZwogICovCiBz dGF0aWMgYm9vbAotU2xydU1heURlbGV0ZVNlZ21lbnQoU2xydUN0bCBjdGwsIGludCBzZWdwYWdl LCBpbnQgY3V0b2ZmUGFnZSkKK1NscnVNYXlEZWxldGVTZWdtZW50KFNscnVQYWdlUHJlY2VkZXNG dW5jdGlvbiBQYWdlUHJlY2VkZXMsCisJCQkJCSBpbnQgc2VncGFnZSwgaW50IGN1dG9mZlBhZ2Up CiB7CiAJaW50CQkJc2VnX2xhc3RfcGFnZSA9IHNlZ3BhZ2UgKyBTTFJVX1BBR0VTX1BFUl9TRUdN RU5UIC0gMTsKIAogCUFzc2VydChzZWdwYWdlICUgU0xSVV9QQUdFU19QRVJfU0VHTUVOVCA9PSAw KTsKIAotCXJldHVybiAoY3RsLT5QYWdlUHJlY2VkZXMoc2VncGFnZSwgY3V0b2ZmUGFnZSkgJiYK LQkJCWN0bC0+UGFnZVByZWNlZGVzKHNlZ19sYXN0X3BhZ2UsIGN1dG9mZlBhZ2UpKTsKKwlyZXR1 cm4gKFBhZ2VQcmVjZWRlcyhzZWdwYWdlLCBjdXRvZmZQYWdlKSAmJgorCQkJUGFnZVByZWNlZGVz KHNlZ19sYXN0X3BhZ2UsIGN1dG9mZlBhZ2UpKTsKIH0KIAogI2lmZGVmIFVTRV9BU1NFUlRfQ0hF Q0tJTkcKIHN0YXRpYyB2b2lkCi1TbHJ1UGFnZVByZWNlZGVzVGVzdE9mZnNldChTbHJ1Q3RsIGN0 bCwgaW50IHBlcl9wYWdlLCB1aW50MzIgb2Zmc2V0KQorU2xydVBhZ2VQcmVjZWRlc1Rlc3RPZmZz ZXQoU2xydVBhZ2VQcmVjZWRlc0Z1bmN0aW9uIFBhZ2VQcmVjZWRlcywKKwkJCQkJCSAgIGludCBw ZXJfcGFnZSwgdWludDMyIG9mZnNldCkKIHsKIAlUcmFuc2FjdGlvbklkIGxocywKIAkJCQlyaHM7 CkBAIC0xNDI1LDE5ICsxODQsMTkgQEAgU2xydVBhZ2VQcmVjZWRlc1Rlc3RPZmZzZXQoU2xydUN0 bCBjdGwsIGludCBwZXJfcGFnZSwgdWludDMyIG9mZnNldCkKIAlBc3NlcnQoIVRyYW5zYWN0aW9u SWRQcmVjZWRlcyhyaHMsIGxocyArIDEpKTsKIAlBc3NlcnQoIVRyYW5zYWN0aW9uSWRGb2xsb3dz T3JFcXVhbHMobGhzLCByaHMpKTsKIAlBc3NlcnQoIVRyYW5zYWN0aW9uSWRGb2xsb3dzT3JFcXVh bHMocmhzLCBsaHMpKTsKLQlBc3NlcnQoIWN0bC0+UGFnZVByZWNlZGVzKGxocyAvIHBlcl9wYWdl LCBsaHMgLyBwZXJfcGFnZSkpOwotCUFzc2VydCghY3RsLT5QYWdlUHJlY2VkZXMobGhzIC8gcGVy X3BhZ2UsIHJocyAvIHBlcl9wYWdlKSk7Ci0JQXNzZXJ0KCFjdGwtPlBhZ2VQcmVjZWRlcyhyaHMg LyBwZXJfcGFnZSwgbGhzIC8gcGVyX3BhZ2UpKTsKLQlBc3NlcnQoIWN0bC0+UGFnZVByZWNlZGVz KChsaHMgLSBwZXJfcGFnZSkgLyBwZXJfcGFnZSwgcmhzIC8gcGVyX3BhZ2UpKTsKLQlBc3NlcnQo Y3RsLT5QYWdlUHJlY2VkZXMocmhzIC8gcGVyX3BhZ2UsIChsaHMgLSAzICogcGVyX3BhZ2UpIC8g cGVyX3BhZ2UpKTsKLQlBc3NlcnQoY3RsLT5QYWdlUHJlY2VkZXMocmhzIC8gcGVyX3BhZ2UsIChs aHMgLSAyICogcGVyX3BhZ2UpIC8gcGVyX3BhZ2UpKTsKLQlBc3NlcnQoY3RsLT5QYWdlUHJlY2Vk ZXMocmhzIC8gcGVyX3BhZ2UsIChsaHMgLSAxICogcGVyX3BhZ2UpIC8gcGVyX3BhZ2UpCisJQXNz ZXJ0KCFQYWdlUHJlY2VkZXMobGhzIC8gcGVyX3BhZ2UsIGxocyAvIHBlcl9wYWdlKSk7CisJQXNz ZXJ0KCFQYWdlUHJlY2VkZXMobGhzIC8gcGVyX3BhZ2UsIHJocyAvIHBlcl9wYWdlKSk7CisJQXNz ZXJ0KCFQYWdlUHJlY2VkZXMocmhzIC8gcGVyX3BhZ2UsIGxocyAvIHBlcl9wYWdlKSk7CisJQXNz ZXJ0KCFQYWdlUHJlY2VkZXMoKGxocyAtIHBlcl9wYWdlKSAvIHBlcl9wYWdlLCByaHMgLyBwZXJf cGFnZSkpOworCUFzc2VydChQYWdlUHJlY2VkZXMocmhzIC8gcGVyX3BhZ2UsIChsaHMgLSAzICog cGVyX3BhZ2UpIC8gcGVyX3BhZ2UpKTsKKwlBc3NlcnQoUGFnZVByZWNlZGVzKHJocyAvIHBlcl9w YWdlLCAobGhzIC0gMiAqIHBlcl9wYWdlKSAvIHBlcl9wYWdlKSk7CisJQXNzZXJ0KFBhZ2VQcmVj ZWRlcyhyaHMgLyBwZXJfcGFnZSwgKGxocyAtIDEgKiBwZXJfcGFnZSkgLyBwZXJfcGFnZSkKIAkJ ICAgfHwgKDFVIDw8IDMxKSAlIHBlcl9wYWdlICE9IDApOwkvKiBTZWUgQ29tbWl0VHNQYWdlUHJl Y2VkZXMoKSAqLwotCUFzc2VydChjdGwtPlBhZ2VQcmVjZWRlcygobGhzICsgMSAqIHBlcl9wYWdl KSAvIHBlcl9wYWdlLCByaHMgLyBwZXJfcGFnZSkKKwlBc3NlcnQoUGFnZVByZWNlZGVzKChsaHMg KyAxICogcGVyX3BhZ2UpIC8gcGVyX3BhZ2UsIHJocyAvIHBlcl9wYWdlKQogCQkgICB8fCAoMVUg PDwgMzEpICUgcGVyX3BhZ2UgIT0gMCk7Ci0JQXNzZXJ0KGN0bC0+UGFnZVByZWNlZGVzKChsaHMg KyAyICogcGVyX3BhZ2UpIC8gcGVyX3BhZ2UsIHJocyAvIHBlcl9wYWdlKSk7Ci0JQXNzZXJ0KGN0 bC0+UGFnZVByZWNlZGVzKChsaHMgKyAzICogcGVyX3BhZ2UpIC8gcGVyX3BhZ2UsIHJocyAvIHBl cl9wYWdlKSk7Ci0JQXNzZXJ0KCFjdGwtPlBhZ2VQcmVjZWRlcyhyaHMgLyBwZXJfcGFnZSwgKGxo cyArIHBlcl9wYWdlKSAvIHBlcl9wYWdlKSk7CisJQXNzZXJ0KFBhZ2VQcmVjZWRlcygobGhzICsg MiAqIHBlcl9wYWdlKSAvIHBlcl9wYWdlLCByaHMgLyBwZXJfcGFnZSkpOworCUFzc2VydChQYWdl UHJlY2VkZXMoKGxocyArIDMgKiBwZXJfcGFnZSkgLyBwZXJfcGFnZSwgcmhzIC8gcGVyX3BhZ2Up KTsKKwlBc3NlcnQoIVBhZ2VQcmVjZWRlcyhyaHMgLyBwZXJfcGFnZSwgKGxocyArIHBlcl9wYWdl KSAvIHBlcl9wYWdlKSk7CiAKIAkvKgogCSAqIEdldE5ld1RyYW5zYWN0aW9uSWQoKSBoYXMgYXNz aWduZWQgdGhlIGxhc3QgWElEIGl0IGNhbiBzYWZlbHkgdXNlLCBhbmQKQEAgLTE0NTAsNyArMjA5 LDcgQEAgU2xydVBhZ2VQcmVjZWRlc1Rlc3RPZmZzZXQoU2xydUN0bCBjdGwsIGludCBwZXJfcGFn ZSwgdWludDMyIG9mZnNldCkKIAlvbGRlc3RYYWN0ID0gbmV3ZXN0WGFjdCArIDE7CiAJb2xkZXN0 WGFjdCAtPSAxVSA8PCAzMTsKIAlvbGRlc3RQYWdlID0gb2xkZXN0WGFjdCAvIHBlcl9wYWdlOwot CUFzc2VydCghU2xydU1heURlbGV0ZVNlZ21lbnQoY3RsLAorCUFzc2VydCghU2xydU1heURlbGV0 ZVNlZ21lbnQoUGFnZVByZWNlZGVzLAogCQkJCQkJCQkgKG5ld2VzdFBhZ2UgLQogCQkJCQkJCQkg IG5ld2VzdFBhZ2UgJSBTTFJVX1BBR0VTX1BFUl9TRUdNRU5UKSwKIAkJCQkJCQkJIG9sZGVzdFBh Z2UpKTsKQEAgLTE0NjYsNyArMjI1LDcgQEAgU2xydVBhZ2VQcmVjZWRlc1Rlc3RPZmZzZXQoU2xy dUN0bCBjdGwsIGludCBwZXJfcGFnZSwgdWludDMyIG9mZnNldCkKIAlvbGRlc3RYYWN0ID0gbmV3 ZXN0WGFjdCArIDE7CiAJb2xkZXN0WGFjdCAtPSAxVSA8PCAzMTsKIAlvbGRlc3RQYWdlID0gb2xk ZXN0WGFjdCAvIHBlcl9wYWdlOwotCUFzc2VydCghU2xydU1heURlbGV0ZVNlZ21lbnQoY3RsLAor CUFzc2VydCghU2xydU1heURlbGV0ZVNlZ21lbnQoUGFnZVByZWNlZGVzLAogCQkJCQkJCQkgKG5l d2VzdFBhZ2UgLQogCQkJCQkJCQkgIG5ld2VzdFBhZ2UgJSBTTFJVX1BBR0VTX1BFUl9TRUdNRU5U KSwKIAkJCQkJCQkJIG9sZGVzdFBhZ2UpKTsKQEAgLTE0ODIsMTIgKzI0MSwxMiBAQCBTbHJ1UGFn ZVByZWNlZGVzVGVzdE9mZnNldChTbHJ1Q3RsIGN0bCwgaW50IHBlcl9wYWdlLCB1aW50MzIgb2Zm c2V0KQogICogZG8gbm90IGFwcGx5IHRvIHRoZW0uKQogICovCiB2b2lkCi1TbHJ1UGFnZVByZWNl ZGVzVW5pdFRlc3RzKFNscnVDdGwgY3RsLCBpbnQgcGVyX3BhZ2UpCitTbHJ1UGFnZVByZWNlZGVz VW5pdFRlc3RzKFNscnVQYWdlUHJlY2VkZXNGdW5jdGlvbiBQYWdlUHJlY2VkZXMsIGludCBwZXJf cGFnZSkKIHsKIAkvKiBUZXN0IGZpcnN0LCBtaWRkbGUgYW5kIGxhc3QgZW50cmllcyBvZiBhIHBh Z2UuICovCi0JU2xydVBhZ2VQcmVjZWRlc1Rlc3RPZmZzZXQoY3RsLCBwZXJfcGFnZSwgMCk7Ci0J U2xydVBhZ2VQcmVjZWRlc1Rlc3RPZmZzZXQoY3RsLCBwZXJfcGFnZSwgcGVyX3BhZ2UgLyAyKTsK LQlTbHJ1UGFnZVByZWNlZGVzVGVzdE9mZnNldChjdGwsIHBlcl9wYWdlLCBwZXJfcGFnZSAtIDEp OworCVNscnVQYWdlUHJlY2VkZXNUZXN0T2Zmc2V0KFBhZ2VQcmVjZWRlcywgcGVyX3BhZ2UsIDAp OworCVNscnVQYWdlUHJlY2VkZXNUZXN0T2Zmc2V0KFBhZ2VQcmVjZWRlcywgcGVyX3BhZ2UsIHBl cl9wYWdlIC8gMik7CisJU2xydVBhZ2VQcmVjZWRlc1Rlc3RPZmZzZXQoUGFnZVByZWNlZGVzLCBw ZXJfcGFnZSwgcGVyX3BhZ2UgLSAxKTsKIH0KICNlbmRpZgogCkBAIC0xNDk3LDExICsyNTYsMTIg QEAgU2xydVBhZ2VQcmVjZWRlc1VuaXRUZXN0cyhTbHJ1Q3RsIGN0bCwgaW50IHBlcl9wYWdlKQog ICoJCW9uZSBjb250YWluaW5nIHRoZSBwYWdlIHBhc3NlZCBhcyAiZGF0YSIuCiAgKi8KIGJvb2wK LVNscnVTY2FuRGlyQ2JSZXBvcnRQcmVzZW5jZShTbHJ1Q3RsIGN0bCwgY2hhciAqZmlsZW5hbWUs IGludCBzZWdwYWdlLCB2b2lkICpkYXRhKQorU2xydVNjYW5EaXJDYlJlcG9ydFByZXNlbmNlKGlu dCBzbHJ1X2lkLCBTbHJ1UGFnZVByZWNlZGVzRnVuY3Rpb24gUGFnZVByZWNlZGVzLAorCQkJCQkJ CWNoYXIgKmZpbGVuYW1lLCBpbnQgc2VncGFnZSwgdm9pZCAqZGF0YSkKIHsKIAlpbnQJCQljdXRv ZmZQYWdlID0gKihpbnQgKikgZGF0YTsKIAotCWlmIChTbHJ1TWF5RGVsZXRlU2VnbWVudChjdGws IHNlZ3BhZ2UsIGN1dG9mZlBhZ2UpKQorCWlmIChTbHJ1TWF5RGVsZXRlU2VnbWVudChQYWdlUHJl Y2VkZXMsIHNlZ3BhZ2UsIGN1dG9mZlBhZ2UpKQogCQlyZXR1cm4gdHJ1ZTsJCQkvKiBmb3VuZCBv bmU7IGRvbid0IGl0ZXJhdGUgYW55IG1vcmUgKi8KIAogCXJldHVybiBmYWxzZTsJCQkJLyoga2Vl cCBnb2luZyAqLwpAQCAtMTUxMiwxMiArMjcyLDE1IEBAIFNscnVTY2FuRGlyQ2JSZXBvcnRQcmVz ZW5jZShTbHJ1Q3RsIGN0bCwgY2hhciAqZmlsZW5hbWUsIGludCBzZWdwYWdlLCB2b2lkICpkYXRh CiAgKgkJVGhpcyBjYWxsYmFjayBkZWxldGVzIHNlZ21lbnRzIHByaW9yIHRvIHRoZSBvbmUgcGFz c2VkIGluIGFzICJkYXRhIi4KICAqLwogc3RhdGljIGJvb2wKLVNscnVTY2FuRGlyQ2JEZWxldGVD dXRvZmYoU2xydUN0bCBjdGwsIGNoYXIgKmZpbGVuYW1lLCBpbnQgc2VncGFnZSwgdm9pZCAqZGF0 YSkKK1NscnVTY2FuRGlyQ2JEZWxldGVDdXRvZmYoaW50IHNscnVfaWQsIFNscnVQYWdlUHJlY2Vk ZXNGdW5jdGlvbiBQYWdlUHJlY2VkZXMsCisJCQkJCQkgIGNoYXIgKmZpbGVuYW1lLCBpbnQgc2Vn cGFnZSwgdm9pZCAqZGF0YSkKIHsKIAlpbnQJCQljdXRvZmZQYWdlID0gKihpbnQgKikgZGF0YTsK IAotCWlmIChTbHJ1TWF5RGVsZXRlU2VnbWVudChjdGwsIHNlZ3BhZ2UsIGN1dG9mZlBhZ2UpKQot CQlTbHJ1SW50ZXJuYWxEZWxldGVTZWdtZW50KGN0bCwgc2VncGFnZSAvIFNMUlVfUEFHRVNfUEVS X1NFR01FTlQpOworCWlmIChTbHJ1TWF5RGVsZXRlU2VnbWVudChQYWdlUHJlY2VkZXMsIHNlZ3Bh Z2UsIGN1dG9mZlBhZ2UpKQorCXsKKwkJU2xydURlbGV0ZVNlZ21lbnQoc2xydV9pZCwgc2VncGFn ZSAvIFNMUlVfUEFHRVNfUEVSX1NFR01FTlQpOworCX0KIAogCXJldHVybiBmYWxzZTsJCQkJLyog a2VlcCBnb2luZyAqLwogfQpAQCAtMTUyNyw5ICsyOTAsMTAgQEAgU2xydVNjYW5EaXJDYkRlbGV0 ZUN1dG9mZihTbHJ1Q3RsIGN0bCwgY2hhciAqZmlsZW5hbWUsIGludCBzZWdwYWdlLCB2b2lkICpk YXRhKQogICoJCVRoaXMgY2FsbGJhY2sgZGVsZXRlcyBhbGwgc2VnbWVudHMuCiAgKi8KIGJvb2wK LVNscnVTY2FuRGlyQ2JEZWxldGVBbGwoU2xydUN0bCBjdGwsIGNoYXIgKmZpbGVuYW1lLCBpbnQg c2VncGFnZSwgdm9pZCAqZGF0YSkKK1NscnVTY2FuRGlyQ2JEZWxldGVBbGwoaW50IHNscnVfaWQs IFNscnVQYWdlUHJlY2VkZXNGdW5jdGlvbiBQYWdlUHJlY2VkZXMsCisJCQkJCSAgIGNoYXIgKmZp bGVuYW1lLCBpbnQgc2VncGFnZSwgdm9pZCAqZGF0YSkKIHsKLQlTbHJ1SW50ZXJuYWxEZWxldGVT ZWdtZW50KGN0bCwgc2VncGFnZSAvIFNMUlVfUEFHRVNfUEVSX1NFR01FTlQpOworCVNscnVJbnRl cm5hbERlbGV0ZVNlZ21lbnQoc2xydV9pZCwgc2VncGFnZSAvIFNMUlVfUEFHRVNfUEVSX1NFR01F TlQpOwogCiAJcmV0dXJuIGZhbHNlOwkJCQkvKiBrZWVwIGdvaW5nICovCiB9CkBAIC0xNTUwLDE2 ICszMTQsMjAgQEAgU2xydVNjYW5EaXJDYkRlbGV0ZUFsbChTbHJ1Q3RsIGN0bCwgY2hhciAqZmls ZW5hbWUsIGludCBzZWdwYWdlLCB2b2lkICpkYXRhKQogICogTm90ZSB0aGF0IG5vIGxvY2tpbmcg aXMgYXBwbGllZC4KICAqLwogYm9vbAotU2xydVNjYW5EaXJlY3RvcnkoU2xydUN0bCBjdGwsIFNs cnVTY2FuQ2FsbGJhY2sgY2FsbGJhY2ssIHZvaWQgKmRhdGEpCitTbHJ1U2NhbkRpcmVjdG9yeShp bnQgc2xydV9pZCwgU2xydVBhZ2VQcmVjZWRlc0Z1bmN0aW9uIFBhZ2VQcmVjZWRlcywKKwkJCQkg IFNscnVTY2FuQ2FsbGJhY2sgY2FsbGJhY2ssIHZvaWQgKmRhdGEpCiB7CiAJYm9vbAkJcmV0dmFs ID0gZmFsc2U7CiAJRElSCQkgICAqY2xkaXI7CiAJc3RydWN0IGRpcmVudCAqY2xkZTsKIAlpbnQJ CQlzZWdubzsKIAlpbnQJCQlzZWdwYWdlOworCWNvbnN0IGNoYXIgKnBhdGg7CiAKLQljbGRpciA9 IEFsbG9jYXRlRGlyKGN0bC0+RGlyKTsKLQl3aGlsZSAoKGNsZGUgPSBSZWFkRGlyKGNsZGlyLCBj dGwtPkRpcikpICE9IE5VTEwpCisJcGF0aCA9IHNscnVfZGlyc1tzbHJ1X2lkXTsKKworCWNsZGly ID0gQWxsb2NhdGVEaXIocGF0aCk7CisJd2hpbGUgKChjbGRlID0gUmVhZERpcihjbGRpciwgcGF0 aCkpICE9IE5VTEwpCiAJewogCQlzaXplX3QJCWxlbjsKIApAQCAtMTU3Miw4ICszNDAsOCBAQCBT bHJ1U2NhbkRpcmVjdG9yeShTbHJ1Q3RsIGN0bCwgU2xydVNjYW5DYWxsYmFjayBjYWxsYmFjaywg dm9pZCAqZGF0YSkKIAkJCXNlZ3BhZ2UgPSBzZWdubyAqIFNMUlVfUEFHRVNfUEVSX1NFR01FTlQ7 CiAKIAkJCWVsb2coREVCVUcyLCAiU2xydVNjYW5EaXJlY3RvcnkgaW52b2tpbmcgY2FsbGJhY2sg b24gJXMvJXMiLAotCQkJCSBjdGwtPkRpciwgY2xkZS0+ZF9uYW1lKTsKLQkJCXJldHZhbCA9IGNh bGxiYWNrKGN0bCwgY2xkZS0+ZF9uYW1lLCBzZWdwYWdlLCBkYXRhKTsKKwkJCQkgcGF0aCwgY2xk ZS0+ZF9uYW1lKTsKKwkJCXJldHZhbCA9IGNhbGxiYWNrKHNscnVfaWQsIFBhZ2VQcmVjZWRlcywg Y2xkZS0+ZF9uYW1lLCBzZWdwYWdlLCBkYXRhKTsKIAkJCWlmIChyZXR2YWwpCiAJCQkJYnJlYWs7 CiAJCX0KQEAgLTE1ODQsMjkgKzM1Miw3OCBAQCBTbHJ1U2NhbkRpcmVjdG9yeShTbHJ1Q3RsIGN0 bCwgU2xydVNjYW5DYWxsYmFjayBjYWxsYmFjaywgdm9pZCAqZGF0YSkKIH0KIAogLyoKLSAqIElu ZGl2aWR1YWwgU0xSVXMgKGNsb2csIC4uLikgaGF2ZSB0byBwcm92aWRlIGEgc3luYy5jIGhhbmRs ZXIgZnVuY3Rpb24gc28KLSAqIHRoYXQgdGhleSBjYW4gcHJvdmlkZSB0aGUgY29ycmVjdCAiU2xy dUN0bCIgKG90aGVyd2lzZSB3ZSBkb24ndCBrbm93IGhvdyB0bwotICogYnVpbGQgdGhlIHBhdGgp LCBidXQgdGhleSBqdXN0IGZvcndhcmQgdG8gdGhpcyBjb21tb24gaW1wbGVtZW50YXRpb24gdGhh dAotICogcGVyZm9ybXMgdGhlIGZzeW5jLgorICogUmVhZCBhIGJ1ZmZlci4gIEJ1ZmZlciBpcyBw aW5uZWQgb24gcmV0dXJuLgogICovCi1pbnQKLVNscnVTeW5jRmlsZVRhZyhTbHJ1Q3RsIGN0bCwg Y29uc3QgRmlsZVRhZyAqZnRhZywgY2hhciAqcGF0aCkKK0J1ZmZlcgorUmVhZFNscnVCdWZmZXIo aW50IHNscnVfaWQsIGludCBwYWdlbm8pCiB7Ci0JaW50CQkJZmQ7Ci0JaW50CQkJc2F2ZV9lcnJu bzsKLQlpbnQJCQlyZXN1bHQ7CisJaW50CQkJc2Vnbm8gPSBwYWdlbm8gLyBTTFJVX1BBR0VTX1BF Ul9TRUdNRU5UOworCWludAkJCXJwYWdlbm8gPSBwYWdlbm8gJSBTTFJVX1BBR0VTX1BFUl9TRUdN RU5UOworCVJlbEZpbGVMb2NhdG9yIHJsb2NhdG9yID0gU2xydVJlbEZpbGVMb2NhdG9yKHNscnVf aWQsIHNlZ25vKTsKKwlCdWZmZXIJCWJ1ZmZlcjsKKwlib29sCQloaXQ7CisKKwkvKiBUcnkgdG8g YXZvaWQgZG9pbmcgYSBidWZmZXIgbWFwcGluZyB0YWJsZSBsb29rdXAgZm9yIHJlcGVhdGVkIGFj Y2Vzcy4gKi8KKwlidWZmZXIgPSBzbHJ1X3JlY2VudF9idWZmZXJzW3NscnVfaWRdLnJlY2VudF9i dWZmZXI7CisJaWYgKHNscnVfcmVjZW50X2J1ZmZlcnNbc2xydV9pZF0ucGFnZW5vID09IHBhZ2Vu byAmJgorCQlCdWZmZXJJc1ZhbGlkKGJ1ZmZlcikgJiYKKwkJUmVhZFJlY2VudEJ1ZmZlcihybG9j YXRvciwgTUFJTl9GT1JLTlVNLCBwYWdlbm8sIGJ1ZmZlcikpCisJeworCQlwZ3N0YXRfY291bnRf c2xydV9wYWdlX2hpdChzbHJ1X2lkKTsKKwkJcmV0dXJuIGJ1ZmZlcjsKKwl9CisKKwkvKiBSZWd1 bGFyIGxvb2t1cC4gKi8KKwlidWZmZXIgPSBSZWFkQnVmZmVyV2l0aG91dFJlbGNhY2hlV2l0aEhp dChybG9jYXRvciwgTUFJTl9GT1JLTlVNLCBwYWdlbm8sCisJCQkJCQkJCQkJCSAgUkJNX05PUk1B TCwgTlVMTCwgdHJ1ZSwgJmhpdCk7CiAKLQlTbHJ1RmlsZU5hbWUoY3RsLCBwYXRoLCBmdGFnLT5z ZWdubyk7CisJLyogUmVtZW1iZXIgd2hlcmUgdGhpcyBwYWdlIGlzIGZvciBuZXh0IHRpbWUuICov CisJc2xydV9yZWNlbnRfYnVmZmVyc1tzbHJ1X2lkXS5wYWdlbm8gPSBwYWdlbm87CisJc2xydV9y ZWNlbnRfYnVmZmVyc1tzbHJ1X2lkXS5yZWNlbnRfYnVmZmVyID0gYnVmZmVyOwogCi0JZmQgPSBP cGVuVHJhbnNpZW50RmlsZShwYXRoLCBPX1JEV1IgfCBQR19CSU5BUlkpOwotCWlmIChmZCA8IDAp Ci0JCXJldHVybiAtMTsKKwlpZiAoaGl0KQorCQlwZ3N0YXRfY291bnRfc2xydV9wYWdlX2hpdChz bHJ1X2lkKTsKIAotCXJlc3VsdCA9IHBnX2ZzeW5jKGZkKTsKLQlzYXZlX2Vycm5vID0gZXJybm87 CisJcmV0dXJuIGJ1ZmZlcjsKK30KKworLyoKKyAqIFplcm8taW5pdGlhbGl6ZSBhIGJ1ZmZlci4g IEJ1ZmZlciBpcyBwaW5uZWQgYW5kIGV4Y2x1c2l2ZWx5IGxvY2tlZCBvbiByZXR1cm4uCisgKi8K K0J1ZmZlcgorWmVyb1NscnVCdWZmZXIoaW50IHNscnVfaWQsIGludCBwYWdlbm8pCit7CisJaW50 CQkJc2Vnbm8gPSBwYWdlbm8gLyBTTFJVX1BBR0VTX1BFUl9TRUdNRU5UOworCWludAkJCXJwYWdl bm8gPSBwYWdlbm8gJSBTTFJVX1BBR0VTX1BFUl9TRUdNRU5UOworCVJlbEZpbGVMb2NhdG9yIHJs b2NhdG9yID0gU2xydVJlbEZpbGVMb2NhdG9yKHNscnVfaWQsIHNlZ25vKTsKKwlCdWZmZXIJCWJ1 ZmZlcjsKKwlTTWdyRmlsZUhhbmRsZSBzZmlsZTsKIAotCUNsb3NlVHJhbnNpZW50RmlsZShmZCk7 CisJaWYgKHJwYWdlbm8gPT0gMCkKKwl7CisJCXNmaWxlID0gc21ncm9wZW4ocmxvY2F0b3IsIElu dmFsaWRCYWNrZW5kSWQsIE1BSU5fRk9SS05VTSk7CisJCWlmICghc21ncmV4aXN0cyhzZmlsZSkp CisJCQlzbWdyY3JlYXRlKHNmaWxlLCBmYWxzZSk7CisJfQorCisJYnVmZmVyID0gUmVhZEJ1ZmZl cldpdGhvdXRSZWxjYWNoZShybG9jYXRvciwgTUFJTl9GT1JLTlVNLCBwYWdlbm8sCisJCQkJCQkJ CQkgICBSQk1fWkVST19BTkRfTE9DSywgTlVMTCwgdHJ1ZSk7CisKKwkvKiBSZW1lbWJlciB3aGVy ZSB0aGlzIHBhZ2UgaXMgZm9yIG5leHQgdGltZS4gKi8KKwlzbHJ1X3JlY2VudF9idWZmZXJzW3Ns cnVfaWRdLnBhZ2VubyA9IHBhZ2VubzsKKwlzbHJ1X3JlY2VudF9idWZmZXJzW3NscnVfaWRdLnJl Y2VudF9idWZmZXIgPSBidWZmZXI7CisKKwlwZ3N0YXRfY291bnRfc2xydV9wYWdlX3plcm9lZChz bHJ1X2lkKTsKKworCXJldHVybiBidWZmZXI7Cit9CisKK2Jvb2wKK1Byb2JlU2xydUJ1ZmZlcihp bnQgc2xydV9pZCwgaW50IHBhZ2VubykKK3sKKwlpbnQJCQlzZWdubyA9IHBhZ2VubyAvIFNMUlVf UEFHRVNfUEVSX1NFR01FTlQ7CisJaW50CQkJcnBhZ2VubyA9IHBhZ2VubyAlIFNMUlVfUEFHRVNf UEVSX1NFR01FTlQ7CisJUmVsRmlsZUxvY2F0b3IgcmxvY2F0b3IgPSBTbHJ1UmVsRmlsZUxvY2F0 b3Ioc2xydV9pZCwgc2Vnbm8pOwogCi0JZXJybm8gPSBzYXZlX2Vycm5vOwotCXJldHVybiByZXN1 bHQ7CisJcmV0dXJuIEJ1ZmZlclByb2JlKHJsb2NhdG9yLCBNQUlOX0ZPUktOVU0sIHBhZ2Vubyk7 CiB9CmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9hY2Nlc3MvdHJhbnNhbS9zdWJ0cmFucy5jIGIv c3JjL2JhY2tlbmQvYWNjZXNzL3RyYW5zYW0vc3VidHJhbnMuYwppbmRleCA2NmQzNTQ4MTU1Mi4u M2YxY2M1MDU5NzIgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL2FjY2Vzcy90cmFuc2FtL3N1YnRy YW5zLmMKKysrIGIvc3JjL2JhY2tlbmQvYWNjZXNzL3RyYW5zYW0vc3VidHJhbnMuYwpAQCAtMzIs OSArMzIsOSBAQAogI2luY2x1ZGUgImFjY2Vzcy9zdWJ0cmFucy5oIgogI2luY2x1ZGUgImFjY2Vz cy90cmFuc2FtLmgiCiAjaW5jbHVkZSAicGdfdHJhY2UuaCIKKyNpbmNsdWRlICJzdG9yYWdlL2J1 Zm1nci5oIgogI2luY2x1ZGUgInV0aWxzL3NuYXBtZ3IuaCIKIAotCiAvKgogICogRGVmaW5lcyBm b3IgU3ViVHJhbnMgcGFnZSBzaXplcy4gIEEgcGFnZSBpcyB0aGUgc2FtZSBCTENLU1ogYXMgaXMg dXNlZAogICogZXZlcnl3aGVyZSBlbHNlIGluIFBvc3RncmVzLgpAQCAtNDksMjEgKzQ5LDE4IEBA CiAgKi8KIAogLyogV2UgbmVlZCBmb3VyIGJ5dGVzIHBlciB4YWN0ICovCi0jZGVmaW5lIFNVQlRS QU5TX1hBQ1RTX1BFUl9QQUdFIChCTENLU1ogLyBzaXplb2YoVHJhbnNhY3Rpb25JZCkpCisjZGVm aW5lIFNVQlRSQU5TX1hBQ1RTX1BFUl9QQUdFICgoQkxDS1NaIC0gU2l6ZU9mUGFnZUhlYWRlckRh dGEpIC8gc2l6ZW9mKFRyYW5zYWN0aW9uSWQpKQorI2RlZmluZSBQQUdFX0hFQURFUl9PRkZTRVQg XAorCQkoKChTaXplT2ZQYWdlSGVhZGVyRGF0YSAlIHNpemVvZihUcmFuc2FjdGlvbklkKSA9PSAw KSA/IFwKKwkJU2l6ZU9mUGFnZUhlYWRlckRhdGEgLyBzaXplb2YoVHJhbnNhY3Rpb25JZCkgOiBc CisJCVNpemVPZlBhZ2VIZWFkZXJEYXRhIC8gc2l6ZW9mKFRyYW5zYWN0aW9uSWQpICsgMSkgKiBc CisJCXNpemVvZihUcmFuc2FjdGlvbklkKSkKIAogI2RlZmluZSBUcmFuc2FjdGlvbklkVG9QYWdl KHhpZCkgKCh4aWQpIC8gKFRyYW5zYWN0aW9uSWQpIFNVQlRSQU5TX1hBQ1RTX1BFUl9QQUdFKQog I2RlZmluZSBUcmFuc2FjdGlvbklkVG9FbnRyeSh4aWQpICgoeGlkKSAlIChUcmFuc2FjdGlvbklk KSBTVUJUUkFOU19YQUNUU19QRVJfUEFHRSkKIAogCi0vKgotICogTGluayB0byBzaGFyZWQtbWVt b3J5IGRhdGEgc3RydWN0dXJlcyBmb3IgU1VCVFJBTlMgY29udHJvbAotICovCi1zdGF0aWMgU2xy dUN0bERhdGEgU3ViVHJhbnNDdGxEYXRhOwotCi0jZGVmaW5lIFN1YlRyYW5zQ3RsICAoJlN1YlRy YW5zQ3RsRGF0YSkKLQotCi1zdGF0aWMgaW50CVplcm9TVUJUUkFOU1BhZ2UoaW50IHBhZ2Vubyk7 CitzdGF0aWMgQnVmZmVyIFplcm9TVUJUUkFOU1BhZ2UoaW50IHBhZ2Vubyk7CiBzdGF0aWMgYm9v bCBTdWJUcmFuc1BhZ2VQcmVjZWRlcyhpbnQgcGFnZTEsIGludCBwYWdlMik7CiAKIApAQCAtNzUs MTYgKzcyLDE2IEBAIFN1YlRyYW5zU2V0UGFyZW50KFRyYW5zYWN0aW9uSWQgeGlkLCBUcmFuc2Fj dGlvbklkIHBhcmVudCkKIHsKIAlpbnQJCQlwYWdlbm8gPSBUcmFuc2FjdGlvbklkVG9QYWdlKHhp ZCk7CiAJaW50CQkJZW50cnlubyA9IFRyYW5zYWN0aW9uSWRUb0VudHJ5KHhpZCk7Ci0JaW50CQkJ c2xvdG5vOwogCVRyYW5zYWN0aW9uSWQgKnB0cjsKKwlCdWZmZXIJCWJ1ZmZlcjsKIAogCUFzc2Vy dChUcmFuc2FjdGlvbklkSXNWYWxpZChwYXJlbnQpKTsKIAlBc3NlcnQoVHJhbnNhY3Rpb25JZEZv bGxvd3MoeGlkLCBwYXJlbnQpKTsKKwlBc3NlcnQoeGlkID09IHBhZ2VubyAqIFNVQlRSQU5TX1hB Q1RTX1BFUl9QQUdFICsgZW50cnlubyk7CiAKLQlMV0xvY2tBY3F1aXJlKFN1YnRyYW5zU0xSVUxv Y2ssIExXX0VYQ0xVU0lWRSk7Ci0KLQlzbG90bm8gPSBTaW1wbGVMcnVSZWFkUGFnZShTdWJUcmFu c0N0bCwgcGFnZW5vLCB0cnVlLCB4aWQpOwotCXB0ciA9IChUcmFuc2FjdGlvbklkICopIFN1YlRy YW5zQ3RsLT5zaGFyZWQtPnBhZ2VfYnVmZmVyW3Nsb3Rub107CisJYnVmZmVyID0gUmVhZFNscnVC dWZmZXIoU0xSVV9TVUJUUkFOU19JRCwgcGFnZW5vKTsKKwlMb2NrQnVmZmVyKGJ1ZmZlciwgQlVG RkVSX0xPQ0tfRVhDTFVTSVZFKTsKKwlwdHIgPSAoVHJhbnNhY3Rpb25JZCAqKSAoQnVmZmVyR2V0 UGFnZShidWZmZXIpICsgUEFHRV9IRUFERVJfT0ZGU0VUKTsKIAlwdHIgKz0gZW50cnlubzsKIAog CS8qCkBAIC05NiwxMCArOTMsMTEgQEAgU3ViVHJhbnNTZXRQYXJlbnQoVHJhbnNhY3Rpb25JZCB4 aWQsIFRyYW5zYWN0aW9uSWQgcGFyZW50KQogCXsKIAkJQXNzZXJ0KCpwdHIgPT0gSW52YWxpZFRy YW5zYWN0aW9uSWQpOwogCQkqcHRyID0gcGFyZW50OwotCQlTdWJUcmFuc0N0bC0+c2hhcmVkLT5w YWdlX2RpcnR5W3Nsb3Rub10gPSB0cnVlOworCQlNYXJrQnVmZmVyRGlydHkoYnVmZmVyKTsKIAl9 Ci0KLQlMV0xvY2tSZWxlYXNlKFN1YnRyYW5zU0xSVUxvY2spOworCVBhZ2VTZXRDaGVja3N1bUlu cGxhY2UoQnVmZmVyR2V0UGFnZShidWZmZXIpLCBwYWdlbm8pOworCVVubG9ja1JlbGVhc2VCdWZm ZXIoYnVmZmVyKTsKKwlBc3NlcnQocGFyZW50ID09IFN1YlRyYW5zR2V0UGFyZW50KHhpZCkpOwog fQogCiAvKgpAQCAtMTEwLDEwICsxMDgsMTEgQEAgU3ViVHJhbnNHZXRQYXJlbnQoVHJhbnNhY3Rp b25JZCB4aWQpCiB7CiAJaW50CQkJcGFnZW5vID0gVHJhbnNhY3Rpb25JZFRvUGFnZSh4aWQpOwog CWludAkJCWVudHJ5bm8gPSBUcmFuc2FjdGlvbklkVG9FbnRyeSh4aWQpOwotCWludAkJCXNsb3Ru bzsKIAlUcmFuc2FjdGlvbklkICpwdHI7CiAJVHJhbnNhY3Rpb25JZCBwYXJlbnQ7CisJQnVmZmVy CQlidWZmZXI7CiAKKwlBc3NlcnQoeGlkID09IHBhZ2VubyAqIFNVQlRSQU5TX1hBQ1RTX1BFUl9Q QUdFICsgZW50cnlubyk7CiAJLyogQ2FuJ3QgYXNrIGFib3V0IHN0dWZmIHRoYXQgbWlnaHQgbm90 IGJlIGFyb3VuZCBhbnltb3JlICovCiAJQXNzZXJ0KFRyYW5zYWN0aW9uSWRGb2xsb3dzT3JFcXVh bHMoeGlkLCBUcmFuc2FjdGlvblhtaW4pKTsKIApAQCAtMTIxLDE1ICsxMjAsMTQgQEAgU3ViVHJh bnNHZXRQYXJlbnQoVHJhbnNhY3Rpb25JZCB4aWQpCiAJaWYgKCFUcmFuc2FjdGlvbklkSXNOb3Jt YWwoeGlkKSkKIAkJcmV0dXJuIEludmFsaWRUcmFuc2FjdGlvbklkOwogCi0JLyogbG9jayBpcyBh Y3F1aXJlZCBieSBTaW1wbGVMcnVSZWFkUGFnZV9SZWFkT25seSAqLworCWJ1ZmZlciA9IFJlYWRT bHJ1QnVmZmVyKFNMUlVfU1VCVFJBTlNfSUQsIHBhZ2Vubyk7CiAKLQlzbG90bm8gPSBTaW1wbGVM cnVSZWFkUGFnZV9SZWFkT25seShTdWJUcmFuc0N0bCwgcGFnZW5vLCB4aWQpOwotCXB0ciA9IChU cmFuc2FjdGlvbklkICopIFN1YlRyYW5zQ3RsLT5zaGFyZWQtPnBhZ2VfYnVmZmVyW3Nsb3Rub107 CisJcHRyID0gKFRyYW5zYWN0aW9uSWQgKikgKEJ1ZmZlckdldFBhZ2UoYnVmZmVyKSArIFBBR0Vf SEVBREVSX09GRlNFVCk7CiAJcHRyICs9IGVudHJ5bm87CiAKIAlwYXJlbnQgPSAqcHRyOwogCi0J TFdMb2NrUmVsZWFzZShTdWJ0cmFuc1NMUlVMb2NrKTsKKwlSZWxlYXNlQnVmZmVyKGJ1ZmZlcik7 CiAKIAlyZXR1cm4gcGFyZW50OwogfQpAQCAtMTc3LDI2ICsxNzUsNiBAQCBTdWJUcmFuc0dldFRv cG1vc3RUcmFuc2FjdGlvbihUcmFuc2FjdGlvbklkIHhpZCkKIAlyZXR1cm4gcHJldmlvdXNYaWQ7 CiB9CiAKLQotLyoKLSAqIEluaXRpYWxpemF0aW9uIG9mIHNoYXJlZCBtZW1vcnkgZm9yIFNVQlRS QU5TCi0gKi8KLVNpemUKLVNVQlRSQU5TU2htZW1TaXplKHZvaWQpCi17Ci0JcmV0dXJuIFNpbXBs ZUxydVNobWVtU2l6ZShOVU1fU1VCVFJBTlNfQlVGRkVSUywgMCk7Ci19Ci0KLXZvaWQKLVNVQlRS QU5TU2htZW1Jbml0KHZvaWQpCi17Ci0JU3ViVHJhbnNDdGwtPlBhZ2VQcmVjZWRlcyA9IFN1YlRy YW5zUGFnZVByZWNlZGVzOwotCVNpbXBsZUxydUluaXQoU3ViVHJhbnNDdGwsICJTdWJ0cmFucyIs IE5VTV9TVUJUUkFOU19CVUZGRVJTLCAwLAotCQkJCSAgU3VidHJhbnNTTFJVTG9jaywgInBnX3N1 YnRyYW5zIiwKLQkJCQkgIExXVFJBTkNIRV9TVUJUUkFOU19CVUZGRVIsIFNZTkNfSEFORExFUl9O T05FKTsKLQlTbHJ1UGFnZVByZWNlZGVzVW5pdFRlc3RzKFN1YlRyYW5zQ3RsLCBTVUJUUkFOU19Y QUNUU19QRVJfUEFHRSk7Ci19Ci0KIC8qCiAgKiBUaGlzIGZ1bmMgbXVzdCBiZSBjYWxsZWQgT05D RSBvbiBzeXN0ZW0gaW5zdGFsbC4gIEl0IGNyZWF0ZXMKICAqIHRoZSBpbml0aWFsIFNVQlRSQU5T IHNlZ21lbnQuICAoVGhlIFNVQlRSQU5TIGRpcmVjdG9yeSBpcyBhc3N1bWVkIHRvCkBAIC0yMTAs MTggKzE4OCwxNiBAQCBTVUJUUkFOU1NobWVtSW5pdCh2b2lkKQogdm9pZAogQm9vdFN0cmFwU1VC VFJBTlModm9pZCkKIHsKLQlpbnQJCQlzbG90bm87CisJQnVmZmVyCQlidWZmZXI7CiAKLQlMV0xv Y2tBY3F1aXJlKFN1YnRyYW5zU0xSVUxvY2ssIExXX0VYQ0xVU0lWRSk7CisJU2xydVBhZ2VQcmVj ZWRlc1VuaXRUZXN0cyhTdWJUcmFuc1BhZ2VQcmVjZWRlcywgU1VCVFJBTlNfWEFDVFNfUEVSX1BB R0UpOwogCiAJLyogQ3JlYXRlIGFuZCB6ZXJvIHRoZSBmaXJzdCBwYWdlIG9mIHRoZSBzdWJ0cmFu cyBsb2cgKi8KLQlzbG90bm8gPSBaZXJvU1VCVFJBTlNQYWdlKDApOworCWJ1ZmZlciA9IFplcm9T VUJUUkFOU1BhZ2UoMCk7CiAKIAkvKiBNYWtlIHN1cmUgaXQncyB3cml0dGVuIG91dCAqLwotCVNp bXBsZUxydVdyaXRlUGFnZShTdWJUcmFuc0N0bCwgc2xvdG5vKTsKLQlBc3NlcnQoIVN1YlRyYW5z Q3RsLT5zaGFyZWQtPnBhZ2VfZGlydHlbc2xvdG5vXSk7Ci0KLQlMV0xvY2tSZWxlYXNlKFN1YnRy YW5zU0xSVUxvY2spOworCUZsdXNoT25lQnVmZmVyKGJ1ZmZlcik7CisJVW5sb2NrUmVsZWFzZUJ1 ZmZlcihidWZmZXIpOwogfQogCiAvKgpAQCAtMjMyLDEwICsyMDgsMTkgQEAgQm9vdFN0cmFwU1VC VFJBTlModm9pZCkKICAqCiAgKiBDb250cm9sIGxvY2sgbXVzdCBiZSBoZWxkIGF0IGVudHJ5LCBh bmQgd2lsbCBiZSBoZWxkIGF0IGV4aXQuCiAgKi8KLXN0YXRpYyBpbnQKK3N0YXRpYyBCdWZmZXIK IFplcm9TVUJUUkFOU1BhZ2UoaW50IHBhZ2VubykKIHsKLQlyZXR1cm4gU2ltcGxlTHJ1WmVyb1Bh Z2UoU3ViVHJhbnNDdGwsIHBhZ2Vubyk7CisJQnVmZmVyCQlidWZmZXI7CisJUGFnZQkJcGFnZTsK KworCWJ1ZmZlciA9IFplcm9TbHJ1QnVmZmVyKFNMUlVfU1VCVFJBTlNfSUQsIHBhZ2Vubyk7CisJ TWFya0J1ZmZlckRpcnR5KGJ1ZmZlcik7CisJcGFnZSA9IEJ1ZmZlckdldFBhZ2UoYnVmZmVyKTsK KwkvLyBUbyBEbzogTFNOIHZhbHVlIG5lZWRzIHRvIGJlIGNoYW5nZWQgd2hlbiBhcHByb3ByaWF0 ZSB2YWx1ZSBpcyBkZWNpZGVkCisJUGFnZVNldEhlYWRlckRhdGFOb25SZWwocGFnZSwgcGFnZW5v LCBJbnZhbGlkWExvZ1JlY1B0ciwgQkxDS1NaLCBQR19NRVRBUEFHRV9MQVlPVVRfVkVSU0lPTik7 IAorCisJcmV0dXJuIGJ1ZmZlcjsKIH0KIAogLyoKQEAgLTI1OCw3ICsyNDMsNiBAQCBTdGFydHVw U1VCVFJBTlMoVHJhbnNhY3Rpb25JZCBvbGRlc3RBY3RpdmVYSUQpCiAJICogV2hlbmV2ZXIgd2Ug YWR2YW5jZSBpbnRvIGEgbmV3IHBhZ2UsIEV4dGVuZFNVQlRSQU5TIHdpbGwgbGlrZXdpc2UgemVy bwogCSAqIHRoZSBuZXcgcGFnZSB3aXRob3V0IHJlZ2FyZCB0byB3aGF0ZXZlciB3YXMgcHJldmlv dXNseSBvbiBkaXNrLgogCSAqLwotCUxXTG9ja0FjcXVpcmUoU3VidHJhbnNTTFJVTG9jaywgTFdf RVhDTFVTSVZFKTsKIAogCXN0YXJ0UGFnZSA9IFRyYW5zYWN0aW9uSWRUb1BhZ2Uob2xkZXN0QWN0 aXZlWElEKTsKIAluZXh0WGlkID0gU2htZW1WYXJpYWJsZUNhY2hlLT5uZXh0WGlkOwpAQCAtMjY2 LDM2ICsyNTAsMTUgQEAgU3RhcnR1cFNVQlRSQU5TKFRyYW5zYWN0aW9uSWQgb2xkZXN0QWN0aXZl WElEKQogCiAJd2hpbGUgKHN0YXJ0UGFnZSAhPSBlbmRQYWdlKQogCXsKLQkJKHZvaWQpIFplcm9T VUJUUkFOU1BhZ2Uoc3RhcnRQYWdlKTsKKwkJVW5sb2NrUmVsZWFzZUJ1ZmZlcihaZXJvU1VCVFJB TlNQYWdlKHN0YXJ0UGFnZSkpOwogCQlzdGFydFBhZ2UrKzsKIAkJLyogbXVzdCBhY2NvdW50IGZv ciB3cmFwYXJvdW5kICovCiAJCWlmIChzdGFydFBhZ2UgPiBUcmFuc2FjdGlvbklkVG9QYWdlKE1h eFRyYW5zYWN0aW9uSWQpKQogCQkJc3RhcnRQYWdlID0gMDsKIAl9Ci0JKHZvaWQpIFplcm9TVUJU UkFOU1BhZ2Uoc3RhcnRQYWdlKTsKLQotCUxXTG9ja1JlbGVhc2UoU3VidHJhbnNTTFJVTG9jayk7 Ci19Ci0KLS8qCi0gKiBQZXJmb3JtIGEgY2hlY2twb2ludCAtLS0gZWl0aGVyIGR1cmluZyBzaHV0 ZG93biwgb3Igb24tdGhlLWZseQotICovCi12b2lkCi1DaGVja1BvaW50U1VCVFJBTlModm9pZCkK LXsKLQkvKgotCSAqIFdyaXRlIGRpcnR5IFNVQlRSQU5TIHBhZ2VzIHRvIGRpc2sKLQkgKgotCSAq IFRoaXMgaXMgbm90IGFjdHVhbGx5IG5lY2Vzc2FyeSBmcm9tIGEgY29ycmVjdG5lc3MgcG9pbnQg b2Ygdmlldy4gV2UgZG8KLQkgKiBpdCBtZXJlbHkgdG8gaW1wcm92ZSB0aGUgb2RkcyB0aGF0IHdy aXRpbmcgb2YgZGlydHkgcGFnZXMgaXMgZG9uZSBieQotCSAqIHRoZSBjaGVja3BvaW50IHByb2Nl c3MgYW5kIG5vdCBieSBiYWNrZW5kcy4KLQkgKi8KLQlUUkFDRV9QT1NUR1JFU1FMX1NVQlRSQU5T X0NIRUNLUE9JTlRfU1RBUlQodHJ1ZSk7Ci0JU2ltcGxlTHJ1V3JpdGVBbGwoU3ViVHJhbnNDdGws IHRydWUpOwotCVRSQUNFX1BPU1RHUkVTUUxfU1VCVFJBTlNfQ0hFQ0tQT0lOVF9ET05FKHRydWUp OworCVVubG9ja1JlbGVhc2VCdWZmZXIoWmVyb1NVQlRSQU5TUGFnZShzdGFydFBhZ2UpKTsKIH0K IAotCiAvKgogICogTWFrZSBzdXJlIHRoYXQgU1VCVFJBTlMgaGFzIHJvb20gZm9yIGEgbmV3bHkt YWxsb2NhdGVkIFhJRC4KICAqCkBAIC0zMTksMTIgKzI4Miw4IEBAIEV4dGVuZFNVQlRSQU5TKFRy YW5zYWN0aW9uSWQgbmV3ZXN0WGFjdCkKIAogCXBhZ2VubyA9IFRyYW5zYWN0aW9uSWRUb1BhZ2Uo bmV3ZXN0WGFjdCk7CiAKLQlMV0xvY2tBY3F1aXJlKFN1YnRyYW5zU0xSVUxvY2ssIExXX0VYQ0xV U0lWRSk7Ci0KIAkvKiBaZXJvIHRoZSBwYWdlICovCi0JWmVyb1NVQlRSQU5TUGFnZShwYWdlbm8p OwotCi0JTFdMb2NrUmVsZWFzZShTdWJ0cmFuc1NMUlVMb2NrKTsKKwlVbmxvY2tSZWxlYXNlQnVm ZmVyKFplcm9TVUJUUkFOU1BhZ2UocGFnZW5vKSk7CiB9CiAKIApAQCAtMzUwLDcgKzMwOSw3IEBA IFRydW5jYXRlU1VCVFJBTlMoVHJhbnNhY3Rpb25JZCBvbGRlc3RYYWN0KQogCVRyYW5zYWN0aW9u SWRSZXRyZWF0KG9sZGVzdFhhY3QpOwogCWN1dG9mZlBhZ2UgPSBUcmFuc2FjdGlvbklkVG9QYWdl KG9sZGVzdFhhY3QpOwogCi0JU2ltcGxlTHJ1VHJ1bmNhdGUoU3ViVHJhbnNDdGwsIGN1dG9mZlBh Z2UpOworCVNpbXBsZUxydVRydW5jYXRlKFNMUlVfU1VCVFJBTlNfSUQsIFN1YlRyYW5zUGFnZVBy ZWNlZGVzLCBjdXRvZmZQYWdlKTsKIH0KIAogCmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9hY2Nl c3MvdHJhbnNhbS94YWN0LmMgYi9zcmMvYmFja2VuZC9hY2Nlc3MvdHJhbnNhbS94YWN0LmMKaW5k ZXggMTE2ZGUxMTc1YjIuLjYxYzI1YmMwYTgyIDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9hY2Nl c3MvdHJhbnNhbS94YWN0LmMKKysrIGIvc3JjL2JhY2tlbmQvYWNjZXNzL3RyYW5zYW0veGFjdC5j CkBAIC02Nyw2ICs2Nyw3IEBACiAjaW5jbHVkZSAidXRpbHMvaW52YWwuaCIKICNpbmNsdWRlICJ1 dGlscy9tZW11dGlscy5oIgogI2luY2x1ZGUgInV0aWxzL3JlbG1hcHBlci5oIgorI2luY2x1ZGUg InV0aWxzL3Jlc293bmVyX3ByaXZhdGUuaCIKICNpbmNsdWRlICJ1dGlscy9zbmFwbWdyLmgiCiAj aW5jbHVkZSAidXRpbHMvdGltZW91dC5oIgogI2luY2x1ZGUgInV0aWxzL3RpbWVzdGFtcC5oIgpA QCAtMTM5Myw2ICsxMzk0LDcgQEAgUmVjb3JkVHJhbnNhY3Rpb25Db21taXQodm9pZCkKIAkJICog YXJlIGRlbGF5aW5nIHRoZSBjaGVja3BvaW50IGEgYml0IGZ1enp5LCBidXQgaXQgZG9lc24ndCBt YXR0ZXIuCiAJCSAqLwogCQlBc3NlcnQoKE15UHJvYy0+ZGVsYXlDaGtwdEZsYWdzICYgREVMQVlf Q0hLUFRfU1RBUlQpID09IDApOworCiAJCVNUQVJUX0NSSVRfU0VDVElPTigpOwogCQlNeVByb2Mt PmRlbGF5Q2hrcHRGbGFncyB8PSBERUxBWV9DSEtQVF9TVEFSVDsKIApkaWZmIC0tZ2l0IGEvc3Jj L2JhY2tlbmQvYWNjZXNzL3RyYW5zYW0veGxvZy5jIGIvc3JjL2JhY2tlbmQvYWNjZXNzL3RyYW5z YW0veGxvZy5jCmluZGV4IDE1YWI4ZDkwZDRiLi5lOTUwNjE3NTIzOSAxMDA2NDQKLS0tIGEvc3Jj L2JhY2tlbmQvYWNjZXNzL3RyYW5zYW0veGxvZy5jCisrKyBiL3NyYy9iYWNrZW5kL2FjY2Vzcy90 cmFuc2FtL3hsb2cuYwpAQCAtNDUwMSw2ICs0NTAxLDcgQEAgQm9vdFN0cmFwWExPRyh2b2lkKQog CXVpbnQ2NAkJc3lzaWRlbnRpZmllcjsKIAlzdHJ1Y3QgdGltZXZhbCB0djsKIAlwZ19jcmMzMmMJ Y3JjOworCVJlc291cmNlT3duZXIgcmVzb3duZXI7CiAKIAkvKiBhbGxvdyBvcmRpbmFyeSBXQUwg c2VnbWVudCBjcmVhdGlvbiwgbGlrZSBTdGFydHVwWExPRygpIHdvdWxkICovCiAJTFdMb2NrQWNx dWlyZShDb250cm9sRmlsZUxvY2ssIExXX0VYQ0xVU0lWRSk7CkBAIC00NjQyLDEwICs0NjQzLDE0 IEBAIEJvb3RTdHJhcFhMT0codm9pZCkKIAlXcml0ZUNvbnRyb2xGaWxlKCk7CiAKIAkvKiBCb290 c3RyYXAgdGhlIGNvbW1pdCBsb2csIHRvbyAqLworCXJlc293bmVyID0gUmVzb3VyY2VPd25lckNy ZWF0ZShOVUxMLCAiYm9vdHN0cmFwIHJlc293bmVyIik7CisJQ3VycmVudFJlc291cmNlT3duZXIg PSByZXNvd25lcjsKIAlCb290U3RyYXBDTE9HKCk7CiAJQm9vdFN0cmFwQ29tbWl0VHMoKTsKIAlC b290U3RyYXBTVUJUUkFOUygpOwogCUJvb3RTdHJhcE11bHRpWGFjdCgpOworCUN1cnJlbnRSZXNv dXJjZU93bmVyID0gTlVMTDsKKwlSZXNvdXJjZU93bmVyRGVsZXRlKHJlc293bmVyKTsKIAogCXBm cmVlKGJ1ZmZlcik7CiAKQEAgLTQ2NTQsNiArNDY1OSw4IEBAIEJvb3RTdHJhcFhMT0codm9pZCkK IAkgKiBvdGhlcndpc2UgbmV2ZXIgcnVuIHRoZSBjaGVja3MgYW5kIEdVQyByZWxhdGVkIGluaXRp YWxpemF0aW9ucyB0aGVyZWluLgogCSAqLwogCVJlYWRDb250cm9sRmlsZSgpOworCisJc21ncmNs b3NlYWxsKCk7CiB9CiAKIHN0YXRpYyBjaGFyICoKQEAgLTY4NTEsMTUgKzY4NTgsMTEgQEAgQ2hl Y2tQb2ludEd1dHMoWExvZ1JlY1B0ciBjaGVja1BvaW50UmVkbywgaW50IGZsYWdzKQogCUNoZWNr UG9pbnRTbmFwQnVpbGQoKTsKIAlDaGVja1BvaW50TG9naWNhbFJld3JpdGVIZWFwKCk7CiAJQ2hl Y2tQb2ludFJlcGxpY2F0aW9uT3JpZ2luKCk7CisJQ2hlY2tQb2ludFByZWRpY2F0ZSgpOwogCi0J LyogV3JpdGUgb3V0IGFsbCBkaXJ0eSBkYXRhIGluIFNMUlVzIGFuZCB0aGUgbWFpbiBidWZmZXIg cG9vbCAqLworCS8qIFdyaXRlIG91dCBhbGwgZGlydHkgZGF0YSBpbiB0aGUgYnVmZmVyIHBvb2wg Ki8KIAlUUkFDRV9QT1NUR1JFU1FMX0JVRkZFUl9DSEVDS1BPSU5UX1NUQVJUKGZsYWdzKTsKIAlD aGVja3BvaW50U3RhdHMuY2twdF93cml0ZV90ID0gR2V0Q3VycmVudFRpbWVzdGFtcCgpOwotCUNo ZWNrUG9pbnRDTE9HKCk7Ci0JQ2hlY2tQb2ludENvbW1pdFRzKCk7Ci0JQ2hlY2tQb2ludFNVQlRS QU5TKCk7Ci0JQ2hlY2tQb2ludE11bHRpWGFjdCgpOwotCUNoZWNrUG9pbnRQcmVkaWNhdGUoKTsK IAlDaGVja1BvaW50QnVmZmVycyhmbGFncyk7CiAKIAkvKiBQZXJmb3JtIGFsbCBxdWV1ZWQgdXAg ZnN5bmNzICovCmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9hY2Nlc3MvdHJhbnNhbS94bG9ncHJl ZmV0Y2hlci5jIGIvc3JjL2JhY2tlbmQvYWNjZXNzL3RyYW5zYW0veGxvZ3ByZWZldGNoZXIuYwpp bmRleCA4N2QxNDIxMGJlNy4uYmMyZWNlYzIyMDUgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL2Fj Y2Vzcy90cmFuc2FtL3hsb2dwcmVmZXRjaGVyLmMKKysrIGIvc3JjL2JhY2tlbmQvYWNjZXNzL3Ry YW5zYW0veGxvZ3ByZWZldGNoZXIuYwpAQCAtNjUwLDcgKzY1MCw3IEBAIFhMb2dQcmVmZXRjaGVy TmV4dEJsb2NrKHVpbnRwdHJfdCBwZ3NyX3ByaXZhdGUsIFhMb2dSZWNQdHIgKmxzbikKIAkJewog CQkJaW50CQkJYmxvY2tfaWQgPSBwcmVmZXRjaGVyLT5uZXh0X2Jsb2NrX2lkKys7CiAJCQlEZWNv ZGVkQmtwQmxvY2sgKmJsb2NrID0gJnJlY29yZC0+YmxvY2tzW2Jsb2NrX2lkXTsKLQkJCVNNZ3JS ZWxhdGlvbiByZWxuOworCQkJU01nckZpbGVIYW5kbGUgc2ZpbGU7CiAJCQlQcmVmZXRjaEJ1ZmZl clJlc3VsdCByZXN1bHQ7CiAKIAkJCWlmICghYmxvY2stPmluX3VzZSkKQEAgLTcyMCw3ICs3MjAs NyBAQCBYTG9nUHJlZmV0Y2hlck5leHRCbG9jayh1aW50cHRyX3QgcGdzcl9wcml2YXRlLCBYTG9n UmVjUHRyICpsc24pCiAJCQkgKiBzYW1lIHJlbGF0aW9uICh3aXRoIHNvbWUgc2NoZW1lIHRvIGhh bmRsZSBpbnZhbGlkYXRpb25zCiAJCQkgKiBzYWZlbHkpLCBidXQgZm9yIG5vdyB3ZSdsbCBjYWxs IHNtZ3JvcGVuKCkgZXZlcnkgdGltZS4KIAkJCSAqLwotCQkJcmVsbiA9IHNtZ3JvcGVuKGJsb2Nr LT5ybG9jYXRvciwgSW52YWxpZEJhY2tlbmRJZCk7CisJCQlzZmlsZSA9IHNtZ3JvcGVuKGJsb2Nr LT5ybG9jYXRvciwgSW52YWxpZEJhY2tlbmRJZCwgYmxvY2stPmZvcmtudW0pOwogCiAJCQkvKgog CQkJICogSWYgdGhlIHJlbGF0aW9uIGZpbGUgZG9lc24ndCBleGlzdCBvbiBkaXNrLCBmb3IgZXhh bXBsZSBiZWNhdXNlCkBAIC03MjksMTQgKzcyOSwxNCBAQCBYTG9nUHJlZmV0Y2hlck5leHRCbG9j ayh1aW50cHRyX3QgcGdzcl9wcml2YXRlLCBYTG9nUmVjUHRyICpsc24pCiAJCQkgKiBmdXJ0aGVy IHByZWZldGNoaW5nIGluIHRoZSByZWxhdGlvbiB1bnRpbCB0aGlzIHJlY29yZCBpcwogCQkJICog cmVwbGF5ZWQuCiAJCQkgKi8KLQkJCWlmICghc21ncmV4aXN0cyhyZWxuLCBNQUlOX0ZPUktOVU0p KQorCQkJaWYgKCFzbWdyZXhpc3RzKHNmaWxlKSkKIAkJCXsKICNpZmRlZiBYTE9HUFJFRkVUQ0hF Ul9ERUJVR19MRVZFTAogCQkJCWVsb2coWExPR1BSRUZFVENIRVJfREVCVUdfTEVWRUwsCiAJCQkJ CSAic3VwcHJlc3NpbmcgYWxsIHByZWZldGNoIGluIHJlbGF0aW9uICV1LyV1LyV1IHVudGlsICVY LyVYIGlzIHJlcGxheWVkLCBiZWNhdXNlIHRoZSByZWxhdGlvbiBkb2VzIG5vdCBleGlzdCBvbiBk aXNrIiwKLQkJCQkJIHJlbG4tPnNtZ3JfcmxvY2F0b3IubG9jYXRvci5zcGNPaWQsCi0JCQkJCSBy ZWxuLT5zbWdyX3Jsb2NhdG9yLmxvY2F0b3IuZGJPaWQsCi0JCQkJCSByZWxuLT5zbWdyX3Jsb2Nh dG9yLmxvY2F0b3IucmVsTnVtYmVyLAorCQkJCQkgc2ZpbGUtPnNtZ3JfcmxvY2F0b3IubG9jYXRv ci5zcGNPaWQsCisJCQkJCSBzZmlsZS0+c21ncl9ybG9jYXRvci5sb2NhdG9yLmRiT2lkLAorCQkJ CQkgc2ZpbGUtPnNtZ3JfcmxvY2F0b3IubG9jYXRvci5yZWxOdW1iZXIsCiAJCQkJCSBMU05fRk9S TUFUX0FSR1MocmVjb3JkLT5sc24pKTsKICNlbmRpZgogCQkJCVhMb2dQcmVmZXRjaGVyQWRkRmls dGVyKHByZWZldGNoZXIsIGJsb2NrLT5ybG9jYXRvciwgMCwKQEAgLTc1MCwxNCArNzUwLDE0IEBA IFhMb2dQcmVmZXRjaGVyTmV4dEJsb2NrKHVpbnRwdHJfdCBwZ3NyX3ByaXZhdGUsIFhMb2dSZWNQ dHIgKmxzbikKIAkJCSAqIGJsb2NrIHlldCwgc3VwcHJlc3MgcHJlZmV0Y2hpbmcgb2YgdGhpcyBi bG9jayBhbmQgaGlnaGVyIHVudGlsCiAJCQkgKiB0aGlzIHJlY29yZCBpcyByZXBsYXllZC4KIAkJ CSAqLwotCQkJaWYgKGJsb2NrLT5ibGtubyA+PSBzbWdybmJsb2NrcyhyZWxuLCBibG9jay0+Zm9y a251bSkpCisJCQlpZiAoYmxvY2stPmJsa25vID49IHNtZ3JuYmxvY2tzKHNmaWxlKSkKIAkJCXsK ICNpZmRlZiBYTE9HUFJFRkVUQ0hFUl9ERUJVR19MRVZFTAogCQkJCWVsb2coWExPR1BSRUZFVENI RVJfREVCVUdfTEVWRUwsCiAJCQkJCSAic3VwcHJlc3NpbmcgcHJlZmV0Y2ggaW4gcmVsYXRpb24g JXUvJXUvJXUgZnJvbSBibG9jayAldSB1bnRpbCAlWC8lWCBpcyByZXBsYXllZCwgYmVjYXVzZSB0 aGUgcmVsYXRpb24gaXMgdG9vIHNtYWxsIiwKLQkJCQkJIHJlbG4tPnNtZ3JfcmxvY2F0b3IubG9j YXRvci5zcGNPaWQsCi0JCQkJCSByZWxuLT5zbWdyX3Jsb2NhdG9yLmxvY2F0b3IuZGJPaWQsCi0J CQkJCSByZWxuLT5zbWdyX3Jsb2NhdG9yLmxvY2F0b3IucmVsTnVtYmVyLAorCQkJCQkgc2ZpbGUt PnNtZ3JfcmxvY2F0b3IubG9jYXRvci5zcGNPaWQsCisJCQkJCSBzZmlsZS0+c21ncl9ybG9jYXRv ci5sb2NhdG9yLmRiT2lkLAorCQkJCQkgc2ZpbGUtPnNtZ3JfcmxvY2F0b3IubG9jYXRvci5yZWxO dW1iZXIsCiAJCQkJCSBibG9jay0+Ymxrbm8sCiAJCQkJCSBMU05fRk9STUFUX0FSR1MocmVjb3Jk LT5sc24pKTsKICNlbmRpZgpAQCAtNzY4LDcgKzc2OCw3IEBAIFhMb2dQcmVmZXRjaGVyTmV4dEJs b2NrKHVpbnRwdHJfdCBwZ3NyX3ByaXZhdGUsIFhMb2dSZWNQdHIgKmxzbikKIAkJCX0KIAogCQkJ LyogVHJ5IHRvIGluaXRpYXRlIHByZWZldGNoaW5nLiAqLwotCQkJcmVzdWx0ID0gUHJlZmV0Y2hT aGFyZWRCdWZmZXIocmVsbiwgYmxvY2stPmZvcmtudW0sIGJsb2NrLT5ibGtubyk7CisJCQlyZXN1 bHQgPSBQcmVmZXRjaFNoYXJlZEJ1ZmZlcihzZmlsZSwgYmxvY2stPmJsa25vKTsKIAkJCWlmIChC dWZmZXJJc1ZhbGlkKHJlc3VsdC5yZWNlbnRfYnVmZmVyKSkKIAkJCXsKIAkJCQkvKiBDYWNoZSBo aXQsIG5vdGhpbmcgdG8gZG8uICovCkBAIC03OTQsOSArNzk0LDkgQEAgWExvZ1ByZWZldGNoZXJO ZXh0QmxvY2sodWludHB0cl90IHBnc3JfcHJpdmF0ZSwgWExvZ1JlY1B0ciAqbHNuKQogCQkJCSAq LwogCQkJCWVsb2coRVJST1IsCiAJCQkJCSAiY291bGQgbm90IHByZWZldGNoIHJlbGF0aW9uICV1 LyV1LyV1IGJsb2NrICV1IiwKLQkJCQkJIHJlbG4tPnNtZ3JfcmxvY2F0b3IubG9jYXRvci5zcGNP aWQsCi0JCQkJCSByZWxuLT5zbWdyX3Jsb2NhdG9yLmxvY2F0b3IuZGJPaWQsCi0JCQkJCSByZWxu LT5zbWdyX3Jsb2NhdG9yLmxvY2F0b3IucmVsTnVtYmVyLAorCQkJCQkgc2ZpbGUtPnNtZ3JfbG9j YXRvci5sb2NhdG9yLnNwY09pZCwKKwkJCQkJIHNmaWxlLT5zbWdyX2xvY2F0b3IubG9jYXRvci5k Yk9pZCwKKwkJCQkJIHNmaWxlLT5zbWdyX2xvY2F0b3IubG9jYXRvci5yZWxOdW1iZXIsCiAJCQkJ CSBibG9jay0+Ymxrbm8pOwogCQkJfQogCQl9CmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9hY2Nl c3MvdHJhbnNhbS94bG9ndXRpbHMuYyBiL3NyYy9iYWNrZW5kL2FjY2Vzcy90cmFuc2FtL3hsb2d1 dGlscy5jCmluZGV4IDBjZGEyMjU5N2ZlLi43OTAxZmM1ZmZjOCAxMDA2NDQKLS0tIGEvc3JjL2Jh Y2tlbmQvYWNjZXNzL3RyYW5zYW0veGxvZ3V0aWxzLmMKKysrIGIvc3JjL2JhY2tlbmQvYWNjZXNz L3RyYW5zYW0veGxvZ3V0aWxzLmMKQEAgLTQ3NSw3ICs0NzUsNyBAQCBYTG9nUmVhZEJ1ZmZlckV4 dGVuZGVkKFJlbEZpbGVMb2NhdG9yIHJsb2NhdG9yLCBGb3JrTnVtYmVyIGZvcmtudW0sCiB7CiAJ QmxvY2tOdW1iZXIgbGFzdGJsb2NrOwogCUJ1ZmZlcgkJYnVmZmVyOwotCVNNZ3JSZWxhdGlvbiBz bWdyOworCVNNZ3JGaWxlSGFuZGxlIHNmaWxlOwogCiAJQXNzZXJ0KGJsa25vICE9IFBfTkVXKTsK IApAQCAtNDg5LDcgKzQ4OSw3IEBAIFhMb2dSZWFkQnVmZmVyRXh0ZW5kZWQoUmVsRmlsZUxvY2F0 b3IgcmxvY2F0b3IsIEZvcmtOdW1iZXIgZm9ya251bSwKIAl9CiAKIAkvKiBPcGVuIHRoZSByZWxh dGlvbiBhdCBzbWdyIGxldmVsICovCi0Jc21nciA9IHNtZ3JvcGVuKHJsb2NhdG9yLCBJbnZhbGlk QmFja2VuZElkKTsKKwlzZmlsZSA9IHNtZ3JvcGVuKHJsb2NhdG9yLCBJbnZhbGlkQmFja2VuZElk LCBmb3JrbnVtKTsKIAogCS8qCiAJICogQ3JlYXRlIHRoZSB0YXJnZXQgZmlsZSBpZiBpdCBkb2Vz bid0IGFscmVhZHkgZXhpc3QuICBUaGlzIGxldHMgdXMgY29wZQpAQCAtNDk5LDkgKzQ5OSw5IEBA IFhMb2dSZWFkQnVmZmVyRXh0ZW5kZWQoUmVsRmlsZUxvY2F0b3IgcmxvY2F0b3IsIEZvcmtOdW1i ZXIgZm9ya251bSwKIAkgKiBmaWxlc3lzdGVtIGxvc2VzIGFuIGlub2RlIGR1cmluZyBhIGNyYXNo LiAgQmV0dGVyIHRvIHdyaXRlIHRoZSBkYXRhCiAJICogdW50aWwgd2UgYXJlIGFjdHVhbGx5IHRv bGQgdG8gZGVsZXRlIHRoZSBmaWxlLikKIAkgKi8KLQlzbWdyY3JlYXRlKHNtZ3IsIGZvcmtudW0s IHRydWUpOworCXNtZ3JjcmVhdGUoc2ZpbGUsIHRydWUpOwogCi0JbGFzdGJsb2NrID0gc21ncm5i bG9ja3Moc21nciwgZm9ya251bSk7CisJbGFzdGJsb2NrID0gc21ncm5ibG9ja3Moc2ZpbGUpOwog CiAJaWYgKGJsa25vIDwgbGFzdGJsb2NrKQogCXsKQEAgLTYyOSw3ICs2MjksNyBAQCBDcmVhdGVG YWtlUmVsY2FjaGVFbnRyeShSZWxGaWxlTG9jYXRvciBybG9jYXRvcikKIAlyZWwtPnJkX2xvY2tJ bmZvLmxvY2tSZWxJZC5kYklkID0gcmxvY2F0b3IuZGJPaWQ7CiAJcmVsLT5yZF9sb2NrSW5mby5s b2NrUmVsSWQucmVsSWQgPSBybG9jYXRvci5yZWxOdW1iZXI7CiAKLQlyZWwtPnJkX3NtZ3IgPSBO VUxMOworCU1lbVNldChyZWwtPnJkX3NtZ3IsIDAsIHNpemVvZihyZWwtPnJkX3NtZ3IpKTsKIAog CXJldHVybiByZWw7CiB9CkBAIC02NDEsOCArNjQxLDExIEBAIHZvaWQKIEZyZWVGYWtlUmVsY2Fj aGVFbnRyeShSZWxhdGlvbiBmYWtlcmVsKQogewogCS8qIG1ha2Ugc3VyZSB0aGUgZmFrZXJlbCBp cyBub3QgcmVmZXJlbmNlZCBieSB0aGUgU21nclJlbGF0aW9uIGFueW1vcmUgKi8KLQlpZiAoZmFr ZXJlbC0+cmRfc21nciAhPSBOVUxMKQotCQlzbWdyY2xlYXJvd25lcigmZmFrZXJlbC0+cmRfc21n ciwgZmFrZXJlbC0+cmRfc21ncik7CisJZm9yIChpbnQgaSA9IDA7IGkgPD0gTUFYX0ZPUktOVU07 IGkrKykKKwl7CisJCWlmIChmYWtlcmVsLT5yZF9zbWdyW2ldICE9IE5VTEwpCisJCQlzbWdyY2xl YXJvd25lcigmZmFrZXJlbC0+cmRfc21ncltpXSwgZmFrZXJlbC0+cmRfc21ncltpXSk7CisJfQog CXBmcmVlKGZha2VyZWwpOwogfQogCmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9jYXRhbG9nL2Nh dGFsb2cuYyBiL3NyYy9iYWNrZW5kL2NhdGFsb2cvY2F0YWxvZy5jCmluZGV4IDZmNDM4NzA3Nzlm Li4wM2QxNjNmNzg4MiAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvY2F0YWxvZy9jYXRhbG9nLmMK KysrIGIvc3JjL2JhY2tlbmQvY2F0YWxvZy9jYXRhbG9nLmMKQEAgLTQ5OSwxMCArNDk5LDEwIEBA IEdldE5ld09pZFdpdGhJbmRleChSZWxhdGlvbiByZWxhdGlvbiwgT2lkIGluZGV4SWQsIEF0dHJO dW1iZXIgb2lkY29sdW1uKQogUmVsRmlsZU51bWJlcgogR2V0TmV3UmVsRmlsZU51bWJlcihPaWQg cmVsdGFibGVzcGFjZSwgUmVsYXRpb24gcGdfY2xhc3MsIGNoYXIgcmVscGVyc2lzdGVuY2UpCiB7 Ci0JUmVsRmlsZUxvY2F0b3JCYWNrZW5kIHJsb2NhdG9yOwotCWNoYXIJICAgKnJwYXRoOwotCWJv b2wJCWNvbGxpZGVzOworCVJlbEZpbGVMb2NhdG9yIHJsb2NhdG9yOwogCUJhY2tlbmRJZAliYWNr ZW5kOworCVNNZ3JGaWxlSGFuZGxlIHNmaWxlOworCWJvb2wJCWNvbGxpZGVzOwogCiAJLyoKIAkg KiBJZiB3ZSBldmVyIGdldCBoZXJlIGR1cmluZyBwZ191cGdyYWRlLCB0aGVyZSdzIHNvbWV0aGlu ZyB3cm9uZzsgYWxsCkBAIC01MTEsNiArNTExLDExIEBAIEdldE5ld1JlbEZpbGVOdW1iZXIoT2lk IHJlbHRhYmxlc3BhY2UsIFJlbGF0aW9uIHBnX2NsYXNzLCBjaGFyIHJlbHBlcnNpc3RlbmNlKQog CSAqLwogCUFzc2VydCghSXNCaW5hcnlVcGdyYWRlKTsKIAorCS8qCisJICogVGhlIHJlbHBhdGgg d2lsbCB2YXJ5IGJhc2VkIG9uIHRoZSBiYWNrZW5kIElELCBzbyB3ZSBtdXN0IGluaXRpYWxpemUK KwkgKiB0aGF0IHByb3Blcmx5IGhlcmUgdG8gbWFrZSBzdXJlIHRoYXQgYW55IGNvbGxpc2lvbnMg YmFzZWQgb24gZmlsZW5hbWUKKwkgKiBhcmUgcHJvcGVybHkgZGV0ZWN0ZWQuCisJICovCiAJc3dp dGNoIChyZWxwZXJzaXN0ZW5jZSkKIAl7CiAJCWNhc2UgUkVMUEVSU0lTVEVOQ0VfVEVNUDoKQEAg LTUyNiw1MyArNTMxLDI5IEBAIEdldE5ld1JlbEZpbGVOdW1iZXIoT2lkIHJlbHRhYmxlc3BhY2Us IFJlbGF0aW9uIHBnX2NsYXNzLCBjaGFyIHJlbHBlcnNpc3RlbmNlKQogCX0KIAogCS8qIFRoaXMg bG9naWMgc2hvdWxkIG1hdGNoIFJlbGF0aW9uSW5pdFBoeXNpY2FsQWRkciAqLwotCXJsb2NhdG9y LmxvY2F0b3Iuc3BjT2lkID0gcmVsdGFibGVzcGFjZSA/IHJlbHRhYmxlc3BhY2UgOiBNeURhdGFi YXNlVGFibGVTcGFjZTsKLQlybG9jYXRvci5sb2NhdG9yLmRiT2lkID0KLQkJKHJsb2NhdG9yLmxv Y2F0b3Iuc3BjT2lkID09IEdMT0JBTFRBQkxFU1BBQ0VfT0lEKSA/CisJcmxvY2F0b3Iuc3BjT2lk ID0gcmVsdGFibGVzcGFjZSA/IHJlbHRhYmxlc3BhY2UgOiBNeURhdGFiYXNlVGFibGVTcGFjZTsK KwlybG9jYXRvci5kYk9pZCA9CisJCShybG9jYXRvci5zcGNPaWQgPT0gR0xPQkFMVEFCTEVTUEFD RV9PSUQpID8KIAkJSW52YWxpZE9pZCA6IE15RGF0YWJhc2VJZDsKIAotCS8qCi0JICogVGhlIHJl bHBhdGggd2lsbCB2YXJ5IGJhc2VkIG9uIHRoZSBiYWNrZW5kIElELCBzbyB3ZSBtdXN0IGluaXRp YWxpemUKLQkgKiB0aGF0IHByb3Blcmx5IGhlcmUgdG8gbWFrZSBzdXJlIHRoYXQgYW55IGNvbGxp c2lvbnMgYmFzZWQgb24gZmlsZW5hbWUKLQkgKiBhcmUgcHJvcGVybHkgZGV0ZWN0ZWQuCi0JICov Ci0JcmxvY2F0b3IuYmFja2VuZCA9IGJhY2tlbmQ7Ci0KIAlkbwogCXsKIAkJQ0hFQ0tfRk9SX0lO VEVSUlVQVFMoKTsKIAogCQkvKiBHZW5lcmF0ZSB0aGUgT0lEICovCiAJCWlmIChwZ19jbGFzcykK LQkJCXJsb2NhdG9yLmxvY2F0b3IucmVsTnVtYmVyID0gR2V0TmV3T2lkV2l0aEluZGV4KHBnX2Ns YXNzLCBDbGFzc09pZEluZGV4SWQsCisJCQlybG9jYXRvci5yZWxOdW1iZXIgPSBHZXROZXdPaWRX aXRoSW5kZXgocGdfY2xhc3MsIENsYXNzT2lkSW5kZXhJZCwKIAkJCQkJCQkJCQkJCQkJCUFudW1f cGdfY2xhc3Nfb2lkKTsKIAkJZWxzZQotCQkJcmxvY2F0b3IubG9jYXRvci5yZWxOdW1iZXIgPSBH ZXROZXdPYmplY3RJZCgpOworCQkJcmxvY2F0b3IucmVsTnVtYmVyID0gR2V0TmV3T2JqZWN0SWQo KTsKIAogCQkvKiBDaGVjayBmb3IgZXhpc3RpbmcgZmlsZSBvZiBzYW1lIG5hbWUgKi8KLQkJcnBh dGggPSByZWxwYXRoKHJsb2NhdG9yLCBNQUlOX0ZPUktOVU0pOwotCi0JCWlmIChhY2Nlc3MocnBh dGgsIEZfT0spID09IDApCi0JCXsKLQkJCS8qIGRlZmluaXRlIGNvbGxpc2lvbiAqLwotCQkJY29s bGlkZXMgPSB0cnVlOwotCQl9Ci0JCWVsc2UKLQkJewotCQkJLyoKLQkJCSAqIEhlcmUgd2UgaGF2 ZSBhIGxpdHRsZSBiaXQgb2YgYSBkaWxlbW1hOiBpZiBlcnJubyBpcyBzb21ldGhpbmcKLQkJCSAq IG90aGVyIHRoYW4gRU5PRU5ULCBzaG91bGQgd2UgZGVjbGFyZSBhIGNvbGxpc2lvbiBhbmQgbG9v cD8gSW4KLQkJCSAqIHByYWN0aWNlIGl0IHNlZW1zIGJlc3QgdG8gZ28gYWhlYWQgcmVnYXJkbGVz cyBvZiB0aGUgZXJybm8uICBJZgotCQkJICogdGhlcmUgaXMgYSBjb2xsaWRpbmcgZmlsZSB3ZSB3 aWxsIGdldCBhbiBzbWdyIGZhaWx1cmUgd2hlbiB3ZQotCQkJICogYXR0ZW1wdCB0byBjcmVhdGUg dGhlIG5ldyByZWxhdGlvbiBmaWxlLgotCQkJICovCi0JCQljb2xsaWRlcyA9IGZhbHNlOwotCQl9 Ci0KLQkJcGZyZWUocnBhdGgpOworCQlzZmlsZSA9IHNtZ3JvcGVuKHJsb2NhdG9yLCBiYWNrZW5k LCBNQUlOX0ZPUktOVU0pOworCQljb2xsaWRlcyA9IHNtZ3JleGlzdHMoc2ZpbGUpOworCQlzbWdy Y2xvc2Uoc2ZpbGUpOwogCX0gd2hpbGUgKGNvbGxpZGVzKTsKIAotCXJldHVybiBybG9jYXRvci5s b2NhdG9yLnJlbE51bWJlcjsKKwlyZXR1cm4gcmxvY2F0b3IucmVsTnVtYmVyOwogfQogCiAvKgpk aWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvY2F0YWxvZy9pbmRleC5jIGIvc3JjL2JhY2tlbmQvY2F0 YWxvZy9pbmRleC5jCmluZGV4IGQ3MTkyZjM1ZTNmLi4wN2NmN2I2Njc4NyAxMDA2NDQKLS0tIGEv c3JjL2JhY2tlbmQvY2F0YWxvZy9pbmRleC5jCisrKyBiL3NyYy9iYWNrZW5kL2NhdGFsb2cvaW5k ZXguYwpAQCAtMzAyNiw5ICszMDI2LDkgQEAgaW5kZXhfYnVpbGQoUmVsYXRpb24gaGVhcFJlbGF0 aW9uLAogCSAqIHJlbGZpbGVudW1iZXIgd29uJ3QgY2hhbmdlLCBhbmQgbm90aGluZyBuZWVkcyB0 byBiZSBkb25lIGhlcmUuCiAJICovCiAJaWYgKGluZGV4UmVsYXRpb24tPnJkX3JlbC0+cmVscGVy c2lzdGVuY2UgPT0gUkVMUEVSU0lTVEVOQ0VfVU5MT0dHRUQgJiYKLQkJIXNtZ3JleGlzdHMoUmVs YXRpb25HZXRTbWdyKGluZGV4UmVsYXRpb24pLCBJTklUX0ZPUktOVU0pKQorCQkhc21ncmV4aXN0 cyhSZWxhdGlvbkdldFNtZ3IoaW5kZXhSZWxhdGlvbiwgSU5JVF9GT1JLTlVNKSkpCiAJewotCQlz bWdyY3JlYXRlKFJlbGF0aW9uR2V0U21ncihpbmRleFJlbGF0aW9uKSwgSU5JVF9GT1JLTlVNLCBm YWxzZSk7CisJCXNtZ3JjcmVhdGUoUmVsYXRpb25HZXRTbWdyKGluZGV4UmVsYXRpb24sIElOSVRf Rk9SS05VTSksIGZhbHNlKTsKIAkJaW5kZXhSZWxhdGlvbi0+cmRfaW5kYW0tPmFtYnVpbGRlbXB0 eShpbmRleFJlbGF0aW9uKTsKIAl9CiAKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL2NhdGFsb2cv c3RvcmFnZS5jIGIvc3JjL2JhY2tlbmQvY2F0YWxvZy9zdG9yYWdlLmMKaW5kZXggZDcwOGFmMTll ZDIuLjVkNDc4NjRlM2E5IDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9jYXRhbG9nL3N0b3JhZ2Uu YworKysgYi9zcmMvYmFja2VuZC9jYXRhbG9nL3N0b3JhZ2UuYwpAQCAtMTE2LDExICsxMTYsMTEg QEAgQWRkUGVuZGluZ1N5bmMoY29uc3QgUmVsRmlsZUxvY2F0b3IgKnJsb2NhdG9yKQogICogdGhh dCBkb2VzIG5vdCB3YW50IHRoZSBzdG9yYWdlIHRvIGJlIGRlc3Ryb3llZCBpbiBjYXNlIG9mIGFu IGFib3J0IG1heQogICogcGFzcyByZWdpc3Rlcl9kZWxldGUgPSBmYWxzZS4KICAqLwotU01nclJl bGF0aW9uCitTTWdyRmlsZUhhbmRsZQogUmVsYXRpb25DcmVhdGVTdG9yYWdlKFJlbEZpbGVMb2Nh dG9yIHJsb2NhdG9yLCBjaGFyIHJlbHBlcnNpc3RlbmNlLAogCQkJCQkgIGJvb2wgcmVnaXN0ZXJf ZGVsZXRlKQogewotCVNNZ3JSZWxhdGlvbiBzcmVsOworCVNNZ3JGaWxlSGFuZGxlIHNmaWxlOwog CUJhY2tlbmRJZAliYWNrZW5kOwogCWJvb2wJCW5lZWRzX3dhbDsKIApAQCAtMTQ1LDExICsxNDUs MTEgQEAgUmVsYXRpb25DcmVhdGVTdG9yYWdlKFJlbEZpbGVMb2NhdG9yIHJsb2NhdG9yLCBjaGFy IHJlbHBlcnNpc3RlbmNlLAogCQkJcmV0dXJuIE5VTEw7CQkvKiBwbGFjYXRlIGNvbXBpbGVyICov CiAJfQogCi0Jc3JlbCA9IHNtZ3JvcGVuKHJsb2NhdG9yLCBiYWNrZW5kKTsKLQlzbWdyY3JlYXRl KHNyZWwsIE1BSU5fRk9SS05VTSwgZmFsc2UpOworCXNmaWxlID0gc21ncm9wZW4ocmxvY2F0b3Is IGJhY2tlbmQsIE1BSU5fRk9SS05VTSk7CisJc21ncmNyZWF0ZShzZmlsZSwgZmFsc2UpOwogCiAJ aWYgKG5lZWRzX3dhbCkKLQkJbG9nX3NtZ3JjcmVhdGUoJnNyZWwtPnNtZ3JfcmxvY2F0b3IubG9j YXRvciwgTUFJTl9GT1JLTlVNKTsKKwkJbG9nX3NtZ3JjcmVhdGUoJnJsb2NhdG9yLCBNQUlOX0ZP UktOVU0pOwogCiAJLyoKIAkgKiBBZGQgdGhlIHJlbGF0aW9uIHRvIHRoZSBsaXN0IG9mIHN0dWZm IHRvIGRlbGV0ZSBhdCBhYm9ydCwgaWYgd2UgYXJlCkBAIC0xNzUsNyArMTc1LDcgQEAgUmVsYXRp b25DcmVhdGVTdG9yYWdlKFJlbEZpbGVMb2NhdG9yIHJsb2NhdG9yLCBjaGFyIHJlbHBlcnNpc3Rl bmNlLAogCQlBZGRQZW5kaW5nU3luYygmcmxvY2F0b3IpOwogCX0KIAotCXJldHVybiBzcmVsOwor CXJldHVybiBzZmlsZTsKIH0KIAogLyoKQEAgLTI5MiwxNiArMjkyLDE4IEBAIFJlbGF0aW9uVHJ1 bmNhdGUoUmVsYXRpb24gcmVsLCBCbG9ja051bWJlciBuYmxvY2tzKQogCUZvcmtOdW1iZXIJZm9y a3NbTUFYX0ZPUktOVU1dOwogCUJsb2NrTnVtYmVyIGJsb2Nrc1tNQVhfRk9SS05VTV07CiAJaW50 CQkJbmZvcmtzID0gMDsKLQlTTWdyUmVsYXRpb24gcmVsbjsKIAogCS8qCiAJICogTWFrZSBzdXJl IHNtZ3JfdGFyZ2Jsb2NrIGV0YyBhcmVuJ3QgcG9pbnRpbmcgc29tZXdoZXJlIHBhc3QgbmV3IGVu ZC4KIAkgKiAoTm90ZTogZG9uJ3QgcmVseSBvbiB0aGlzIHJlbG4gcG9pbnRlciBiZWxvdyB0aGlz IGxvb3AuKQogCSAqLwotCXJlbG4gPSBSZWxhdGlvbkdldFNtZ3IocmVsKTsKLQlyZWxuLT5zbWdy X3RhcmdibG9jayA9IEludmFsaWRCbG9ja051bWJlcjsKLQlmb3IgKGludCBpID0gMDsgaSA8PSBN QVhfRk9SS05VTTsgKytpKQotCQlyZWxuLT5zbWdyX2NhY2hlZF9uYmxvY2tzW2ldID0gSW52YWxp ZEJsb2NrTnVtYmVyOworCWZvciAoaW50IGkgPSAwOyBpIDw9IE1BWF9GT1JLTlVNOyBpKyspCisJ eworCQlTTWdyRmlsZUhhbmRsZSBzZmlsZSA9IFJlbGF0aW9uR2V0U21ncihyZWwsIGkpOworCisJ CXNmaWxlLT5zbWdyX3RhcmdibG9jayA9IEludmFsaWRCbG9ja051bWJlcjsKKwkJc2ZpbGUtPnNt Z3JfY2FjaGVkX25ibG9ja3MgPSBJbnZhbGlkQmxvY2tOdW1iZXI7CisJfQogCiAJLyogUHJlcGFy ZSBmb3IgdHJ1bmNhdGlvbiBvZiBNQUlOIGZvcmsgb2YgdGhlIHJlbGF0aW9uICovCiAJZm9ya3Nb bmZvcmtzXSA9IE1BSU5fRk9SS05VTTsKQEAgLTMwOSw3ICszMTEsNyBAQCBSZWxhdGlvblRydW5j YXRlKFJlbGF0aW9uIHJlbCwgQmxvY2tOdW1iZXIgbmJsb2NrcykKIAluZm9ya3MrKzsKIAogCS8q IFByZXBhcmUgZm9yIHRydW5jYXRpb24gb2YgdGhlIEZTTSBpZiBpdCBleGlzdHMgKi8KLQlmc20g PSBzbWdyZXhpc3RzKFJlbGF0aW9uR2V0U21ncihyZWwpLCBGU01fRk9SS05VTSk7CisJZnNtID0g c21ncmV4aXN0cyhSZWxhdGlvbkdldFNtZ3IocmVsLCBGU01fRk9SS05VTSkpOwogCWlmIChmc20p CiAJewogCQlibG9ja3NbbmZvcmtzXSA9IEZyZWVTcGFjZU1hcFByZXBhcmVUcnVuY2F0ZVJlbChy ZWwsIG5ibG9ja3MpOwpAQCAtMzIyLDcgKzMyNCw3IEBAIFJlbGF0aW9uVHJ1bmNhdGUoUmVsYXRp b24gcmVsLCBCbG9ja051bWJlciBuYmxvY2tzKQogCX0KIAogCS8qIFByZXBhcmUgZm9yIHRydW5j YXRpb24gb2YgdGhlIHZpc2liaWxpdHkgbWFwIHRvbyBpZiBpdCBleGlzdHMgKi8KLQl2bSA9IHNt Z3JleGlzdHMoUmVsYXRpb25HZXRTbWdyKHJlbCksIFZJU0lCSUxJVFlNQVBfRk9SS05VTSk7CisJ dm0gPSBzbWdyZXhpc3RzKFJlbGF0aW9uR2V0U21ncihyZWwsIFZJU0lCSUxJVFlNQVBfRk9SS05V TSkpOwogCWlmICh2bSkKIAl7CiAJCWJsb2Nrc1tuZm9ya3NdID0gdmlzaWJpbGl0eW1hcF9wcmVw YXJlX3RydW5jYXRlKHJlbCwgbmJsb2Nrcyk7CkBAIC0zOTAsMTEgKzM5MiwxMiBAQCBSZWxhdGlv blRydW5jYXRlKFJlbGF0aW9uIHJlbCwgQmxvY2tOdW1iZXIgbmJsb2NrcykKIAl9CiAKIAkvKgot CSAqIFRoaXMgd2lsbCBmaXJzdCByZW1vdmUgYW55IGJ1ZmZlcnMgZnJvbSB0aGUgYnVmZmVyIHBv b2wgdGhhdCBzaG91bGQgbm8KKwkgKiBGaXJzdCByZW1vdmUgYW55IGJ1ZmZlcnMgZnJvbSB0aGUg YnVmZmVyIHBvb2wgdGhhdCBzaG91bGQgbm8KIAkgKiBsb25nZXIgZXhpc3QgYWZ0ZXIgdHJ1bmNh dGlvbiBpcyBjb21wbGV0ZSwgYW5kIHRoZW4gdHJ1bmNhdGUgdGhlCiAJICogY29ycmVzcG9uZGlu ZyBmaWxlcyBvbiBkaXNrLgogCSAqLwotCXNtZ3J0cnVuY2F0ZShSZWxhdGlvbkdldFNtZ3IocmVs KSwgZm9ya3MsIG5mb3JrcywgYmxvY2tzKTsKKwlEcm9wUmVsYXRpb25CdWZmZXJzKHJlbC0+cmRf bG9jYXRvciwgcmVsLT5yZF9iYWNrZW5kLCBmb3JrcywgbmZvcmtzLCBibG9ja3MpOworCXNtZ3J0 cnVuY2F0ZV9tdWx0aShyZWwtPnJkX2xvY2F0b3IsIHJlbC0+cmRfYmFja2VuZCwgZm9ya3MsIG5m b3JrcywgYmxvY2tzKTsKIAogCS8qIFdlJ3ZlIGRvbmUgYWxsIHRoZSBjcml0aWNhbCB3b3JrLCBz byBjaGVja3BvaW50cyBhcmUgT0sgbm93LiAqLwogCU15UHJvYy0+ZGVsYXlDaGtwdEZsYWdzICY9 IH5ERUxBWV9DSEtQVF9DT01QTEVURTsKQEAgLTQyOCw3ICs0MzEsNyBAQCBSZWxhdGlvblByZVRy dW5jYXRlKFJlbGF0aW9uIHJlbCkKIAkJcmV0dXJuOwogCiAJcGVuZGluZyA9IGhhc2hfc2VhcmNo KHBlbmRpbmdTeW5jSGFzaCwKLQkJCQkJCSAgJihSZWxhdGlvbkdldFNtZ3IocmVsKS0+c21ncl9y bG9jYXRvci5sb2NhdG9yKSwKKwkJCQkJCSAgJnJlbC0+cmRfbG9jYXRvciwKIAkJCQkJCSAgSEFT SF9GSU5ELCBOVUxMKTsKIAlpZiAocGVuZGluZykKIAkJcGVuZGluZy0+aXNfdHJ1bmNhdGVkID0g dHJ1ZTsKQEAgLTQ0NCwxMiArNDQ3LDEyIEBAIFJlbGF0aW9uUHJlVHJ1bmNhdGUoUmVsYXRpb24g cmVsKQogICogQWxzbyBub3RlIHRoYXQgdGhpcyBpcyBmcmVxdWVudGx5IGNhbGxlZCB2aWEgbG9j dXRpb25zIHN1Y2ggYXMKICAqCQlSZWxhdGlvbkNvcHlTdG9yYWdlKFJlbGF0aW9uR2V0U21ncihy ZWwpLCAuLi4pOwogICogVGhhdCdzIHNhZmUgb25seSBiZWNhdXNlIHdlIHBlcmZvcm0gb25seSBz bWdyIGFuZCBXQUwgb3BlcmF0aW9ucyBoZXJlLgotICogSWYgd2UgaW52b2tlZCBhbnl0aGluZyBl bHNlLCBhIHJlbGNhY2hlIGZsdXNoIGNvdWxkIGNhdXNlIG91ciBTTWdyUmVsYXRpb24KKyAqIElm IHdlIGludm9rZWQgYW55dGhpbmcgZWxzZSwgYSByZWxjYWNoZSBmbHVzaCBjb3VsZCBjYXVzZSBv dXIgU01nckZpbGVIYW5kbGUKICAqIGFyZ3VtZW50IHRvIGJlY29tZSBhIGRhbmdsaW5nIHBvaW50 ZXIuCiAgKi8KIHZvaWQKLVJlbGF0aW9uQ29weVN0b3JhZ2UoU01nclJlbGF0aW9uIHNyYywgU01n clJlbGF0aW9uIGRzdCwKLQkJCQkJRm9ya051bWJlciBmb3JrTnVtLCBjaGFyIHJlbHBlcnNpc3Rl bmNlKQorUmVsYXRpb25Db3B5U3RvcmFnZShTTWdyRmlsZUhhbmRsZSBzcmMsIFNNZ3JGaWxlSGFu ZGxlIGRzdCwKKwkJCQkJY2hhciByZWxwZXJzaXN0ZW5jZSkKIHsKIAlQR0FsaWduZWRCbG9jayBi dWY7CiAJUGFnZQkJcGFnZTsKQEAgLTQ2Niw3ICs0NjksNyBAQCBSZWxhdGlvbkNvcHlTdG9yYWdl KFNNZ3JSZWxhdGlvbiBzcmMsIFNNZ3JSZWxhdGlvbiBkc3QsCiAJICogaXQgbmVlZHMgdG8gYmUg c3luY2VkIHRvIGRpc2suCiAJICovCiAJY29weWluZ19pbml0Zm9yayA9IHJlbHBlcnNpc3RlbmNl ID09IFJFTFBFUlNJU1RFTkNFX1VOTE9HR0VEICYmCi0JCWZvcmtOdW0gPT0gSU5JVF9GT1JLTlVN OworCQlzcmMtPnNtZ3JfbG9jYXRvci5mb3JrbnVtID09IElOSVRfRk9SS05VTTsKIAogCS8qCiAJ ICogV2UgbmVlZCB0byBsb2cgdGhlIGNvcGllZCBkYXRhIGluIFdBTCBpZmYgV0FMIGFyY2hpdmlu Zy9zdHJlYW1pbmcgaXMKQEAgLTQ3NywxNCArNDgwLDE0IEBAIFJlbGF0aW9uQ29weVN0b3JhZ2Uo U01nclJlbGF0aW9uIHNyYywgU01nclJlbGF0aW9uIGRzdCwKIAl1c2Vfd2FsID0gWExvZ0lzTmVl ZGVkKCkgJiYKIAkJKHJlbHBlcnNpc3RlbmNlID09IFJFTFBFUlNJU1RFTkNFX1BFUk1BTkVOVCB8 fCBjb3B5aW5nX2luaXRmb3JrKTsKIAotCW5ibG9ja3MgPSBzbWdybmJsb2NrcyhzcmMsIGZvcmtO dW0pOworCW5ibG9ja3MgPSBzbWdybmJsb2NrcyhzcmMpOwogCiAJZm9yIChibGtubyA9IDA7IGJs a25vIDwgbmJsb2NrczsgYmxrbm8rKykKIAl7CiAJCS8qIElmIHdlIGdvdCBhIGNhbmNlbCBzaWdu YWwgZHVyaW5nIHRoZSBjb3B5IG9mIHRoZSBkYXRhLCBxdWl0ICovCiAJCUNIRUNLX0ZPUl9JTlRF UlJVUFRTKCk7CiAKLQkJc21ncnJlYWQoc3JjLCBmb3JrTnVtLCBibGtubywgYnVmLmRhdGEpOwor CQlzbWdycmVhZChzcmMsIGJsa25vLCBidWYuZGF0YSk7CiAKIAkJaWYgKCFQYWdlSXNWZXJpZmll ZEV4dGVuZGVkKHBhZ2UsIGJsa25vLAogCQkJCQkJCQkJUElWX0xPR19XQVJOSU5HIHwgUElWX1JF UE9SVF9TVEFUKSkKQEAgLTQ5Niw5ICs0OTksNyBAQCBSZWxhdGlvbkNvcHlTdG9yYWdlKFNNZ3JS ZWxhdGlvbiBzcmMsIFNNZ3JSZWxhdGlvbiBkc3QsCiAJCQkgKiAoZXJyY29udGV4dCBjYWxsYmFj a3Mgc2hvdWxkbid0IGJlIHJpc2tpbmcgYW55IHN1Y2ggdGhpbmcsIGJ1dAogCQkJICogcGVvcGxl IGhhdmUgYmVlbiBrbm93biB0byBmb3JnZXQgdGhhdCBydWxlLikKIAkJCSAqLwotCQkJY2hhcgkg ICAqcmVscGF0aCA9IHJlbHBhdGhiYWNrZW5kKHNyYy0+c21ncl9ybG9jYXRvci5sb2NhdG9yLAot CQkJCQkJCQkJCQkJIHNyYy0+c21ncl9ybG9jYXRvci5iYWNrZW5kLAotCQkJCQkJCQkJCQkJIGZv cmtOdW0pOworCQkJY2hhcgkgICAqcmVscGF0aCA9IHNtZ3JmaWxlcGF0aChzcmMtPnNtZ3JfbG9j YXRvcik7CiAKIAkJCWVyZXBvcnQoRVJST1IsCiAJCQkJCShlcnJjb2RlKEVSUkNPREVfREFUQV9D T1JSVVBURUQpLApAQCAtNTEyLDcgKzUxMyw3IEBAIFJlbGF0aW9uQ29weVN0b3JhZ2UoU01nclJl bGF0aW9uIHNyYywgU01nclJlbGF0aW9uIGRzdCwKIAkJICogc3BhY2UuCiAJCSAqLwogCQlpZiAo dXNlX3dhbCkKLQkJCWxvZ19uZXdwYWdlKCZkc3QtPnNtZ3JfcmxvY2F0b3IubG9jYXRvciwgZm9y a051bSwgYmxrbm8sIHBhZ2UsIGZhbHNlKTsKKwkJCWxvZ19uZXdwYWdlKCZkc3QtPnNtZ3JfbG9j YXRvci5sb2NhdG9yLCBkc3QtPnNtZ3JfbG9jYXRvci5mb3JrbnVtLCBibGtubywgcGFnZSwgZmFs c2UpOwogCiAJCVBhZ2VTZXRDaGVja3N1bUlucGxhY2UocGFnZSwgYmxrbm8pOwogCkBAIC01MjEs NyArNTIyLDcgQEAgUmVsYXRpb25Db3B5U3RvcmFnZShTTWdyUmVsYXRpb24gc3JjLCBTTWdyUmVs YXRpb24gZHN0LAogCQkgKiBuZWVkIGZvciBzbWdyIHRvIHNjaGVkdWxlIGFuIGZzeW5jIGZvciB0 aGlzIHdyaXRlOyB3ZSdsbCBkbyBpdAogCQkgKiBvdXJzZWx2ZXMgYmVsb3cuCiAJCSAqLwotCQlz bWdyZXh0ZW5kKGRzdCwgZm9ya051bSwgYmxrbm8sIGJ1Zi5kYXRhLCB0cnVlKTsKKwkJc21ncmV4 dGVuZChkc3QsIGJsa25vLCBidWYuZGF0YSwgdHJ1ZSk7CiAJfQogCiAJLyoKQEAgLTUzNCw3ICs1 MzUsNyBAQCBSZWxhdGlvbkNvcHlTdG9yYWdlKFNNZ3JSZWxhdGlvbiBzcmMsIFNNZ3JSZWxhdGlv biBkc3QsCiAJICogdGhleSBtaWdodCBzdGlsbCBub3QgYmUgb24gZGlzayB3aGVuIHRoZSBjcmFz aCBvY2N1cnMuCiAJICovCiAJaWYgKHVzZV93YWwgfHwgY29weWluZ19pbml0Zm9yaykKLQkJc21n cmltbWVkc3luYyhkc3QsIGZvcmtOdW0pOworCQlzbWdyaW1tZWRzeW5jKGRzdCk7CiB9CiAKIC8q CkBAIC02NTMsOSArNjU0LDkgQEAgc21nckRvUGVuZGluZ0RlbGV0ZXMoYm9vbCBpc0NvbW1pdCkK IAlQZW5kaW5nUmVsRGVsZXRlICpwZW5kaW5nOwogCVBlbmRpbmdSZWxEZWxldGUgKnByZXY7CiAJ UGVuZGluZ1JlbERlbGV0ZSAqbmV4dDsKLQlpbnQJCQlucmVscyA9IDAsCi0JCQkJbWF4cmVscyA9 IDA7Ci0JU01nclJlbGF0aW9uICpzcmVscyA9IE5VTEw7CisJaW50CQkJbmxvY2F0b3JzID0gMCwK KwkJCQltYXhsb2NhdG9ycyA9IDA7CisJUmVsRmlsZUxvY2F0b3JCYWNrZW5kICpsb2NhdG9ycyA9 IE5VTEw7CiAKIAlwcmV2ID0gTlVMTDsKIAlmb3IgKHBlbmRpbmcgPSBwZW5kaW5nRGVsZXRlczsg cGVuZGluZyAhPSBOVUxMOyBwZW5kaW5nID0gbmV4dCkKQEAgLTY3NiwyMyArNjc3LDIxIEBAIHNt Z3JEb1BlbmRpbmdEZWxldGVzKGJvb2wgaXNDb21taXQpCiAJCQkvKiBkbyBkZWxldGlvbiBpZiBj YWxsZWQgZm9yICovCiAJCQlpZiAocGVuZGluZy0+YXRDb21taXQgPT0gaXNDb21taXQpCiAJCQl7 Ci0JCQkJU01nclJlbGF0aW9uIHNyZWw7Ci0KLQkJCQlzcmVsID0gc21ncm9wZW4ocGVuZGluZy0+ cmxvY2F0b3IsIHBlbmRpbmctPmJhY2tlbmQpOworCQkJCVJlbEZpbGVMb2NhdG9yQmFja2VuZCBy bG9jYXRvciA9IHsgcGVuZGluZy0+cmxvY2F0b3IsIHBlbmRpbmctPmJhY2tlbmQgfTsKIAogCQkJ CS8qIGFsbG9jYXRlIHRoZSBpbml0aWFsIGFycmF5LCBvciBleHRlbmQgaXQsIGlmIG5lZWRlZCAq LwotCQkJCWlmIChtYXhyZWxzID09IDApCisJCQkJaWYgKG1heGxvY2F0b3JzID09IDApCiAJCQkJ ewotCQkJCQltYXhyZWxzID0gODsKLQkJCQkJc3JlbHMgPSBwYWxsb2Moc2l6ZW9mKFNNZ3JSZWxh dGlvbikgKiBtYXhyZWxzKTsKKwkJCQkJbWF4bG9jYXRvcnMgPSA4OworCQkJCQlsb2NhdG9ycyA9 IHBhbGxvYyhzaXplb2YoUmVsRmlsZUxvY2F0b3JCYWNrZW5kKSAqIG1heGxvY2F0b3JzKTsKIAkJ CQl9Ci0JCQkJZWxzZSBpZiAobWF4cmVscyA8PSBucmVscykKKwkJCQllbHNlIGlmIChtYXhsb2Nh dG9ycyA8PSBubG9jYXRvcnMpCiAJCQkJewotCQkJCQltYXhyZWxzICo9IDI7Ci0JCQkJCXNyZWxz ID0gcmVwYWxsb2Moc3JlbHMsIHNpemVvZihTTWdyUmVsYXRpb24pICogbWF4cmVscyk7CisJCQkJ CW1heGxvY2F0b3JzICo9IDI7CisJCQkJCWxvY2F0b3JzID0gcmVwYWxsb2MobG9jYXRvcnMsIHNp emVvZihSZWxGaWxlTG9jYXRvckJhY2tlbmQpICogbWF4bG9jYXRvcnMpOwogCQkJCX0KIAotCQkJ CXNyZWxzW25yZWxzKytdID0gc3JlbDsKKwkJCQlsb2NhdG9yc1tubG9jYXRvcnMrK10gPSBybG9j YXRvcjsKIAkJCX0KIAkJCS8qIG11c3QgZXhwbGljaXRseSBmcmVlIHRoZSBsaXN0IGVudHJ5ICov CiAJCQlwZnJlZShwZW5kaW5nKTsKQEAgLTcwMCwxNSArNjk5LDU4IEBAIHNtZ3JEb1BlbmRpbmdE ZWxldGVzKGJvb2wgaXNDb21taXQpCiAJCX0KIAl9CiAKLQlpZiAobnJlbHMgPiAwKQorCWlmIChu bG9jYXRvcnMgPiAwKQogCXsKLQkJc21ncmRvdW5saW5rYWxsKHNyZWxzLCBucmVscywgZmFsc2Up OworCQlGb3JrTnVtYmVyIGZvcmtzW01BWF9GT1JLTlVNICsgMV07CisKKwkJZm9yIChpbnQgaSA9 IDA7IGkgPD0gTUFYX0ZPUktOVU07IGkrKykKKwkJCWZvcmtzW2ldID0gaTsKKworCQkvKgorCQkg KiBHZXQgcmlkIG9mIGFueSByZW1haW5pbmcgYnVmZmVycyBmb3IgdGhlIHJlbGF0aW9ucy4gIGJ1 Zm1nciB3aWxsIGp1c3QKKwkJICogZHJvcCB0aGVtIHdpdGhvdXQgYm90aGVyaW5nIHRvIHdyaXRl IHRoZSBjb250ZW50cy4KKwkJICovCisJCURyb3BSZWxhdGlvbnNBbGxCdWZmZXJzKGxvY2F0b3Jz LCBubG9jYXRvcnMpOwogCi0JCWZvciAoaW50IGkgPSAwOyBpIDwgbnJlbHM7IGkrKykKLQkJCXNt Z3JjbG9zZShzcmVsc1tpXSk7CisJCWZvciAoaW50IGkgPSAwOyBpIDwgbmxvY2F0b3JzOyBpKysp CisJCQlzbWdydW5saW5rX211bHRpKGxvY2F0b3JzW2ldLmxvY2F0b3IsIGxvY2F0b3JzW2ldLmJh Y2tlbmQsIGZvcmtzLCBNQVhfRk9SS05VTSArIDEsIGZhbHNlKTsKKwkJcGZyZWUobG9jYXRvcnMp OworCX0KK30KKworLyoKKyAqIERyb3BSZWxhdGlvbkZpbGVzIC0tIGRyb3AgZmlsZXMgb2YgYWxs IGdpdmVuIHJlbGF0aW9ucworICovCit2b2lkCitEcm9wUmVsYXRpb25GaWxlcyhSZWxGaWxlTG9j YXRvciAqZGVscmVscywgaW50IG5kZWxyZWxzLCBib29sIGlzUmVkbykKK3sKKwlSZWxGaWxlTG9j YXRvckJhY2tlbmQgKmxvY2F0b3JzOworCWludAkJCWk7CisJRm9ya051bWJlcglhbGxfZm9ya3Nb TUFYX0ZPUktOVU0gKyAxXTsKIAotCQlwZnJlZShzcmVscyk7CisJbG9jYXRvcnMgPSBwYWxsb2Mo c2l6ZW9mKFJlbEZpbGVMb2NhdG9yQmFja2VuZCkgKiBuZGVscmVscyk7CisJZm9yIChpID0gMDsg aSA8IG5kZWxyZWxzOyBpKyspCisJeworCQlpZiAoaXNSZWRvKQorCQl7CisJCQlmb3IgKGludCBm b3JrID0gMDsgZm9yayA8PSBNQVhfRk9SS05VTTsgZm9yaysrKQorCQkJCVhMb2dEcm9wUmVsYXRp b24oZGVscmVsc1tpXSwgZm9yayk7CisJCX0KKwkJbG9jYXRvcnNbaV0ubG9jYXRvciA9IGRlbHJl bHNbaV07CisJCWxvY2F0b3JzW2ldLmJhY2tlbmQgPSBJbnZhbGlkQmFja2VuZElkOwogCX0KKwor CS8qCisJICogR2V0IHJpZCBvZiBhbnkgcmVtYWluaW5nIGJ1ZmZlcnMgZm9yIHRoZSByZWxhdGlv bnMuICBidWZtZ3Igd2lsbCBqdXN0CisJICogZHJvcCB0aGVtIHdpdGhvdXQgYm90aGVyaW5nIHRv IHdyaXRlIHRoZSBjb250ZW50cy4KKwkgKi8KKwlEcm9wUmVsYXRpb25zQWxsQnVmZmVycyhsb2Nh dG9ycywgbmRlbHJlbHMpOworCisJZm9yIChpbnQgZm9yayA9IDA7IGZvcmsgPD0gTUFYX0ZPUktO VU07IGZvcmsrKykKKwkJYWxsX2ZvcmtzW2ZvcmtdID0gZm9yazsKKworCWZvciAoaSA9IDA7IGkg PCBuZGVscmVsczsgaSsrKQorCQlzbWdydW5saW5rX211bHRpKGxvY2F0b3JzW2ldLmxvY2F0b3Is IGxvY2F0b3JzW2ldLmJhY2tlbmQsIGFsbF9mb3JrcywgTUFYX0ZPUktOVU0gKyAxLCB0cnVlKTsK IH0KIAogLyoKQEAgLTcxOCw5ICs3NjAsOSBAQCB2b2lkCiBzbWdyRG9QZW5kaW5nU3luY3MoYm9v bCBpc0NvbW1pdCwgYm9vbCBpc1BhcmFsbGVsV29ya2VyKQogewogCVBlbmRpbmdSZWxEZWxldGUg KnBlbmRpbmc7Ci0JaW50CQkJbnJlbHMgPSAwLAotCQkJCW1heHJlbHMgPSAwOwotCVNNZ3JSZWxh dGlvbiAqc3JlbHMgPSBOVUxMOworCWludAkJCW5sb2NhdG9ycyA9IDAsCisJCQkJbWF4bG9jYXRv cnMgPSAwOworCVJlbEZpbGVMb2NhdG9yICpsb2NhdG9ycyA9IE5VTEw7CiAJSEFTSF9TRVFfU1RB VFVTIHNjYW47CiAJUGVuZGluZ1JlbFN5bmMgKnBlbmRpbmdzeW5jOwogCkBAIC03NTcsOSArNzk5 LDYgQEAgc21nckRvUGVuZGluZ1N5bmNzKGJvb2wgaXNDb21taXQsIGJvb2wgaXNQYXJhbGxlbFdv cmtlcikKIAkJRm9ya051bWJlcglmb3JrOwogCQlCbG9ja051bWJlciBuYmxvY2tzW01BWF9GT1JL TlVNICsgMV07CiAJCUJsb2NrTnVtYmVyIHRvdGFsX2Jsb2NrcyA9IDA7Ci0JCVNNZ3JSZWxhdGlv biBzcmVsOwotCi0JCXNyZWwgPSBzbWdyb3BlbihwZW5kaW5nc3luYy0+cmxvY2F0b3IsIEludmFs aWRCYWNrZW5kSWQpOwogCiAJCS8qCiAJCSAqIFdlIGVtaXQgbmV3cGFnZSBXQUwgcmVjb3JkcyBm b3Igc21hbGxlciByZWxhdGlvbnMuCkBAIC03NzMsOSArODEyLDEyIEBAIHNtZ3JEb1BlbmRpbmdT eW5jcyhib29sIGlzQ29tbWl0LCBib29sIGlzUGFyYWxsZWxXb3JrZXIpCiAJCXsKIAkJCWZvciAo Zm9yayA9IDA7IGZvcmsgPD0gTUFYX0ZPUktOVU07IGZvcmsrKykKIAkJCXsKLQkJCQlpZiAoc21n cmV4aXN0cyhzcmVsLCBmb3JrKSkKKwkJCQlTTWdyRmlsZUhhbmRsZSBzZmlsZTsKKworCQkJCXNm aWxlID0gc21ncm9wZW4ocGVuZGluZ3N5bmMtPnJsb2NhdG9yLCBJbnZhbGlkQmFja2VuZElkLCBm b3JrKTsKKwkJCQlpZiAoc21ncmV4aXN0cyhzZmlsZSkpCiAJCQkJewotCQkJCQlCbG9ja051bWJl ciBuID0gc21ncm5ibG9ja3Moc3JlbCwgZm9yayk7CisJCQkJCUJsb2NrTnVtYmVyIG4gPSBzbWdy bmJsb2NrcyhzZmlsZSk7CiAKIAkJCQkJLyogd2Ugc2hvdWxkbid0IGNvbWUgaGVyZSBmb3IgdW5s b2dnZWQgcmVsYXRpb25zICovCiAJCQkJCUFzc2VydChmb3JrICE9IElOSVRfRk9SS05VTSk7CkBA IC04MDMsMTggKzg0NSwxOSBAQCBzbWdyRG9QZW5kaW5nU3luY3MoYm9vbCBpc0NvbW1pdCwgYm9v bCBpc1BhcmFsbGVsV29ya2VyKQogCQkJdG90YWxfYmxvY2tzICogQkxDS1NaIC8gMTAyNCA+PSB3 YWxfc2tpcF90aHJlc2hvbGQpCiAJCXsKIAkJCS8qIGFsbG9jYXRlIHRoZSBpbml0aWFsIGFycmF5 LCBvciBleHRlbmQgaXQsIGlmIG5lZWRlZCAqLwotCQkJaWYgKG1heHJlbHMgPT0gMCkKKwkJCWlm IChtYXhsb2NhdG9ycyA9PSAwKQogCQkJewotCQkJCW1heHJlbHMgPSA4OwotCQkJCXNyZWxzID0g cGFsbG9jKHNpemVvZihTTWdyUmVsYXRpb24pICogbWF4cmVscyk7CisJCQkJbWF4bG9jYXRvcnMg PSA4OworCQkJCWxvY2F0b3JzID0gcGFsbG9jKHNpemVvZihSZWxGaWxlTG9jYXRvckJhY2tlbmQp ICogbWF4bG9jYXRvcnMpOwogCQkJfQotCQkJZWxzZSBpZiAobWF4cmVscyA8PSBucmVscykKKwkJ CWVsc2UgaWYgKG1heGxvY2F0b3JzIDw9IG5sb2NhdG9ycykKIAkJCXsKLQkJCQltYXhyZWxzICo9 IDI7Ci0JCQkJc3JlbHMgPSByZXBhbGxvYyhzcmVscywgc2l6ZW9mKFNNZ3JSZWxhdGlvbikgKiBt YXhyZWxzKTsKKwkJCQltYXhsb2NhdG9ycyAqPSAyOworCQkJCWxvY2F0b3JzID0gcmVwYWxsb2Mo bG9jYXRvcnMsIHNpemVvZihSZWxGaWxlTG9jYXRvckJhY2tlbmQpICogbWF4bG9jYXRvcnMpOwog CQkJfQogCi0JCQlzcmVsc1tucmVscysrXSA9IHNyZWw7CisJCQlsb2NhdG9yc1tubG9jYXRvcnNd ID0gcGVuZGluZ3N5bmMtPnJsb2NhdG9yOworCQkJbmxvY2F0b3JzKys7CiAJCX0KIAkJZWxzZQog CQl7CkBAIC04MzMsNyArODc2LDcgQEAgc21nckRvUGVuZGluZ1N5bmNzKGJvb2wgaXNDb21taXQs IGJvb2wgaXNQYXJhbGxlbFdvcmtlcikKIAkJCQkgKiBwYWdlIGluY2x1ZGluZyBhbnkgdW51c2Vk IHNwYWNlLiAgUmVhZEJ1ZmZlckV4dGVuZGVkKCkKIAkJCQkgKiBjb3VudHMgc29tZSBwZ3N0YXQg ZXZlbnRzOyB1bmZvcnR1bmF0ZWx5LCB3ZSBkaXNjYXJkIHRoZW0uCiAJCQkJICovCi0JCQkJcmVs ID0gQ3JlYXRlRmFrZVJlbGNhY2hlRW50cnkoc3JlbC0+c21ncl9ybG9jYXRvci5sb2NhdG9yKTsK KwkJCQlyZWwgPSBDcmVhdGVGYWtlUmVsY2FjaGVFbnRyeShwZW5kaW5nc3luYy0+cmxvY2F0b3Ip OwogCQkJCWxvZ19uZXdwYWdlX3JhbmdlKHJlbCwgZm9yaywgMCwgbiwgZmFsc2UpOwogCQkJCUZy ZWVGYWtlUmVsY2FjaGVFbnRyeShyZWwpOwogCQkJfQpAQCAtODQyLDExICs4ODUsMjAgQEAgc21n ckRvUGVuZGluZ1N5bmNzKGJvb2wgaXNDb21taXQsIGJvb2wgaXNQYXJhbGxlbFdvcmtlcikKIAog CXBlbmRpbmdTeW5jSGFzaCA9IE5VTEw7CiAKLQlpZiAobnJlbHMgPiAwKQorCUZsdXNoUmVsYXRp b25zQWxsQnVmZmVycyhsb2NhdG9ycywgbmxvY2F0b3JzKTsKKworCWZvciAoaW50IGkgPSAwOyBp IDwgbmxvY2F0b3JzOyBpKyspCiAJewotCQlzbWdyZG9zeW5jYWxsKHNyZWxzLCBucmVscyk7Ci0J CXBmcmVlKHNyZWxzKTsKKwkJZm9yIChpbnQgZm9yayA9IDA7IGZvcmsgPD0gTUFYX0ZPUktOVU07 IGZvcmsrKykKKwkJeworCQkJU01nckZpbGVIYW5kbGUgc2ZpbGUgPSBzbWdyb3Blbihsb2NhdG9y c1tpXSwgSW52YWxpZEJhY2tlbmRJZCwgZm9yayk7CisKKwkJCWlmIChzbWdyZXhpc3RzKHNmaWxl KSkKKwkJCQlzbWdyaW1tZWRzeW5jKHNmaWxlKTsKKwkJfQogCX0KKwlpZiAobG9jYXRvcnMgIT0g TlVMTCkKKwkJcGZyZWUobG9jYXRvcnMpOwogfQogCiAvKgpAQCAtOTY2LDIyICsxMDE4LDIyIEBA IHNtZ3JfcmVkbyhYTG9nUmVhZGVyU3RhdGUgKnJlY29yZCkKIAlpZiAoaW5mbyA9PSBYTE9HX1NN R1JfQ1JFQVRFKQogCXsKIAkJeGxfc21ncl9jcmVhdGUgKnhscmVjID0gKHhsX3NtZ3JfY3JlYXRl ICopIFhMb2dSZWNHZXREYXRhKHJlY29yZCk7Ci0JCVNNZ3JSZWxhdGlvbiByZWxuOworCQlTTWdy RmlsZUhhbmRsZSBzZmlsZTsKIAotCQlyZWxuID0gc21ncm9wZW4oeGxyZWMtPnJsb2NhdG9yLCBJ bnZhbGlkQmFja2VuZElkKTsKLQkJc21ncmNyZWF0ZShyZWxuLCB4bHJlYy0+Zm9ya051bSwgdHJ1 ZSk7CisJCXNmaWxlID0gc21ncm9wZW4oeGxyZWMtPnJsb2NhdG9yLCBJbnZhbGlkQmFja2VuZElk LCB4bHJlYy0+Zm9ya051bSk7CisJCXNtZ3JjcmVhdGUoc2ZpbGUsIHRydWUpOwogCX0KIAllbHNl IGlmIChpbmZvID09IFhMT0dfU01HUl9UUlVOQ0FURSkKIAl7CiAJCXhsX3NtZ3JfdHJ1bmNhdGUg KnhscmVjID0gKHhsX3NtZ3JfdHJ1bmNhdGUgKikgWExvZ1JlY0dldERhdGEocmVjb3JkKTsKLQkJ U01nclJlbGF0aW9uIHJlbG47CisJCVNNZ3JGaWxlSGFuZGxlIHNmaWxlOwogCQlSZWxhdGlvbgly ZWw7CiAJCUZvcmtOdW1iZXIJZm9ya3NbTUFYX0ZPUktOVU1dOwogCQlCbG9ja051bWJlciBibG9j a3NbTUFYX0ZPUktOVU1dOwogCQlpbnQJCQluZm9ya3MgPSAwOwogCQlib29sCQluZWVkX2ZzbV92 YWN1dW0gPSBmYWxzZTsKIAotCQlyZWxuID0gc21ncm9wZW4oeGxyZWMtPnJsb2NhdG9yLCBJbnZh bGlkQmFja2VuZElkKTsKKwkJc2ZpbGUgPSBzbWdyb3Blbih4bHJlYy0+cmxvY2F0b3IsIEludmFs aWRCYWNrZW5kSWQsIE1BSU5fRk9SS05VTSk7CiAKIAkJLyoKIAkJICogRm9yY2libHkgY3JlYXRl IHJlbGF0aW9uIGlmIGl0IGRvZXNuJ3QgZXhpc3QgKHdoaWNoIHN1Z2dlc3RzIHRoYXQKQEAgLTk4 OSw3ICsxMDQxLDcgQEAgc21ncl9yZWRvKFhMb2dSZWFkZXJTdGF0ZSAqcmVjb3JkKQogCQkgKiBY TG9nUmVhZEJ1ZmZlckZvclJlZG8sIHdlIHByZWZlciB0byByZWNyZWF0ZSB0aGUgcmVsIGFuZCBy ZXBsYXkgdGhlCiAJCSAqIGxvZyBhcyBiZXN0IHdlIGNhbiB1bnRpbCB0aGUgZHJvcCBpcyBzZWVu LgogCQkgKi8KLQkJc21ncmNyZWF0ZShyZWxuLCBNQUlOX0ZPUktOVU0sIHRydWUpOworCQlzbWdy Y3JlYXRlKHNmaWxlLCB0cnVlKTsKIAogCQkvKgogCQkgKiBCZWZvcmUgd2UgcGVyZm9ybSB0aGUg dHJ1bmNhdGlvbiwgdXBkYXRlIG1pbmltdW0gcmVjb3ZlcnkgcG9pbnQgdG8KQEAgLTEwMjIsOCAr MTA3NCwxMCBAQCBzbWdyX3JlZG8oWExvZ1JlYWRlclN0YXRlICpyZWNvcmQpCiAJCS8qIFByZXBh cmUgZm9yIHRydW5jYXRpb24gb2YgRlNNIGFuZCBWTSB0b28gKi8KIAkJcmVsID0gQ3JlYXRlRmFr ZVJlbGNhY2hlRW50cnkoeGxyZWMtPnJsb2NhdG9yKTsKIAorCQlEcm9wUmVsYXRpb25CdWZmZXJz KHhscmVjLT5ybG9jYXRvciwgSW52YWxpZEJhY2tlbmRJZCwgZm9ya3MsIG5mb3JrcywgYmxvY2tz KTsKKwogCQlpZiAoKHhscmVjLT5mbGFncyAmIFNNR1JfVFJVTkNBVEVfRlNNKSAhPSAwICYmCi0J CQlzbWdyZXhpc3RzKHJlbG4sIEZTTV9GT1JLTlVNKSkKKwkJCXNtZ3JleGlzdHMoc21ncm9wZW4o eGxyZWMtPnJsb2NhdG9yLCBJbnZhbGlkQmFja2VuZElkLCBGU01fRk9SS05VTSkpKQogCQl7CiAJ CQlibG9ja3NbbmZvcmtzXSA9IEZyZWVTcGFjZU1hcFByZXBhcmVUcnVuY2F0ZVJlbChyZWwsIHhs cmVjLT5ibGtubyk7CiAJCQlpZiAoQmxvY2tOdW1iZXJJc1ZhbGlkKGJsb2Nrc1tuZm9ya3NdKSkK QEAgLTEwMzQsNyArMTA4OCw3IEBAIHNtZ3JfcmVkbyhYTG9nUmVhZGVyU3RhdGUgKnJlY29yZCkK IAkJCX0KIAkJfQogCQlpZiAoKHhscmVjLT5mbGFncyAmIFNNR1JfVFJVTkNBVEVfVk0pICE9IDAg JiYKLQkJCXNtZ3JleGlzdHMocmVsbiwgVklTSUJJTElUWU1BUF9GT1JLTlVNKSkKKwkJCXNtZ3Jl eGlzdHMoc21ncm9wZW4oeGxyZWMtPnJsb2NhdG9yLCBJbnZhbGlkQmFja2VuZElkLCBWSVNJQklM SVRZTUFQX0ZPUktOVU0pKSkKIAkJewogCQkJYmxvY2tzW25mb3Jrc10gPSB2aXNpYmlsaXR5bWFw X3ByZXBhcmVfdHJ1bmNhdGUocmVsLCB4bHJlYy0+Ymxrbm8pOwogCQkJaWYgKEJsb2NrTnVtYmVy SXNWYWxpZChibG9ja3NbbmZvcmtzXSkpCkBAIC0xMDQ2LDcgKzExMDAsMTAgQEAgc21ncl9yZWRv KFhMb2dSZWFkZXJTdGF0ZSAqcmVjb3JkKQogCiAJCS8qIERvIHRoZSByZWFsIHdvcmsgdG8gdHJ1 bmNhdGUgcmVsYXRpb24gZm9ya3MgKi8KIAkJaWYgKG5mb3JrcyA+IDApCi0JCQlzbWdydHJ1bmNh dGUocmVsbiwgZm9ya3MsIG5mb3JrcywgYmxvY2tzKTsKKwkJeworCQkJRHJvcFJlbGF0aW9uQnVm ZmVycyh4bHJlYy0+cmxvY2F0b3IsIEludmFsaWRCYWNrZW5kSWQsIGZvcmtzLCBuZm9ya3MsIGJs b2Nrcyk7CisJCQlzbWdydHJ1bmNhdGVfbXVsdGkoeGxyZWMtPnJsb2NhdG9yLCBJbnZhbGlkQmFj a2VuZElkLCBmb3JrcywgbmZvcmtzLCBibG9ja3MpOworCQl9CiAKIAkJLyoKIAkJICogVXBkYXRl IHVwcGVyLWxldmVsIEZTTSBwYWdlcyB0byBhY2NvdW50IGZvciB0aGUgdHJ1bmNhdGlvbi4gVGhp cyBpcwpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvY29tbWFuZHMvYXN5bmMuYyBiL3NyYy9iYWNr ZW5kL2NvbW1hbmRzL2FzeW5jLmMKaW5kZXggM2UxYjkyZGYwMzAuLmI2M2VhOGI4NmFlIDEwMDY0 NAotLS0gYS9zcmMvYmFja2VuZC9jb21tYW5kcy9hc3luYy5jCisrKyBiL3NyYy9iYWNrZW5kL2Nv bW1hbmRzL2FzeW5jLmMKQEAgLTE0MSw2ICsxNDEsNyBAQAogI2luY2x1ZGUgImxpYnBxL2xpYnBx LmgiCiAjaW5jbHVkZSAibGlicHEvcHFmb3JtYXQuaCIKICNpbmNsdWRlICJtaXNjYWRtaW4uaCIK KyNpbmNsdWRlICJzdG9yYWdlL2J1Zm1nci5oIgogI2luY2x1ZGUgInN0b3JhZ2UvaXBjLmgiCiAj aW5jbHVkZSAic3RvcmFnZS9sbWdyLmgiCiAjaW5jbHVkZSAic3RvcmFnZS9wcm9jLmgiCkBAIC0x NjMsNyArMTY0LDcgQEAKICAqIHRoYW4gdGhhdCwgc28gY2hhbmdlcyBpbiB0aGF0IGRhdGEgc3Ry dWN0dXJlIHdvbid0IGFmZmVjdCB1c2VyLXZpc2libGUKICAqIHJlc3RyaWN0aW9ucy4KICAqLwot I2RlZmluZSBOT1RJRllfUEFZTE9BRF9NQVhfTEVOR1RICShCTENLU1ogLSBOQU1FREFUQUxFTiAt IDEyOCkKKyNkZWZpbmUgTk9USUZZX1BBWUxPQURfTUFYX0xFTkdUSAkoQkxDS1NaIC0gTkFNRURB VEFMRU4gLSBTaXplT2ZQYWdlSGVhZGVyRGF0YSAtIDEyOCkKIAogLyoKICAqIFN0cnVjdCByZXBy ZXNlbnRpbmcgYW4gZW50cnkgaW4gdGhlIGdsb2JhbCBub3RpZnkgcXVldWUKQEAgLTIxMyw3ICsy MTQsNyBAQCB0eXBlZGVmIHN0cnVjdCBRdWV1ZVBvc2l0aW9uCiAJKCh4KS5wYWdlID09ICh5KS5w YWdlICYmICh4KS5vZmZzZXQgPT0gKHkpLm9mZnNldCkKIAogI2RlZmluZSBRVUVVRV9QT1NfSVNf WkVSTyh4KSBcCi0JKCh4KS5wYWdlID09IDAgJiYgKHgpLm9mZnNldCA9PSAwKQorCSgoeCkucGFn ZSA9PSAwICYmICh4KS5vZmZzZXQgPT0gU2l6ZU9mUGFnZUhlYWRlckRhdGEpCiAKIC8qIGNob29z ZSBsb2dpY2FsbHkgc21hbGxlciBRdWV1ZVBvc2l0aW9uICovCiAjZGVmaW5lIFFVRVVFX1BPU19N SU4oeCx5KSBcCkBAIC0zMDUsMTIgKzMwNiw2IEBAIHN0YXRpYyBBc3luY1F1ZXVlQ29udHJvbCAq YXN5bmNRdWV1ZUNvbnRyb2w7CiAjZGVmaW5lIFFVRVVFX05FWFRfTElTVEVORVIoaSkJCShhc3lu Y1F1ZXVlQ29udHJvbC0+YmFja2VuZFtpXS5uZXh0TGlzdGVuZXIpCiAjZGVmaW5lIFFVRVVFX0JB Q0tFTkRfUE9TKGkpCQkoYXN5bmNRdWV1ZUNvbnRyb2wtPmJhY2tlbmRbaV0ucG9zKQogCi0vKgot ICogVGhlIFNMUlUgYnVmZmVyIGFyZWEgdGhyb3VnaCB3aGljaCB3ZSBhY2Nlc3MgdGhlIG5vdGlm aWNhdGlvbiBxdWV1ZQotICovCi1zdGF0aWMgU2xydUN0bERhdGEgTm90aWZ5Q3RsRGF0YTsKLQot I2RlZmluZSBOb3RpZnlDdGwJCQkJCSgmTm90aWZ5Q3RsRGF0YSkKICNkZWZpbmUgUVVFVUVfUEFH RVNJWkUJCQkJQkxDS1NaCiAjZGVmaW5lIFFVRVVFX0ZVTExfV0FSTl9JTlRFUlZBTAk1MDAwCS8q IHdhcm4gYXQgbW9zdCBvbmNlIGV2ZXJ5IDVzICovCiAKQEAgLTUyMSw4ICs1MTYsNiBAQCBBc3lu Y1NobWVtU2l6ZSh2b2lkKQogCXNpemUgPSBtdWxfc2l6ZShNYXhCYWNrZW5kcyArIDEsIHNpemVv ZihRdWV1ZUJhY2tlbmRTdGF0dXMpKTsKIAlzaXplID0gYWRkX3NpemUoc2l6ZSwgb2Zmc2V0b2Yo QXN5bmNRdWV1ZUNvbnRyb2wsIGJhY2tlbmQpKTsKIAotCXNpemUgPSBhZGRfc2l6ZShzaXplLCBT aW1wbGVMcnVTaG1lbVNpemUoTlVNX05PVElGWV9CVUZGRVJTLCAwKSk7Ci0KIAlyZXR1cm4gc2l6 ZTsKIH0KIApAQCAtNTUwLDggKzU0Myw4IEBAIEFzeW5jU2htZW1Jbml0KHZvaWQpCiAJaWYgKCFm b3VuZCkKIAl7CiAJCS8qIEZpcnN0IHRpbWUgdGhyb3VnaCwgc28gaW5pdGlhbGl6ZSBpdCAqLwot CQlTRVRfUVVFVUVfUE9TKFFVRVVFX0hFQUQsIDAsIDApOwotCQlTRVRfUVVFVUVfUE9TKFFVRVVF X1RBSUwsIDAsIDApOworCQlTRVRfUVVFVUVfUE9TKFFVRVVFX0hFQUQsIDAsIFNpemVPZlBhZ2VI ZWFkZXJEYXRhKTsKKwkJU0VUX1FVRVVFX1BPUyhRVUVVRV9UQUlMLCAwLCBTaXplT2ZQYWdlSGVh ZGVyRGF0YSk7CiAJCVFVRVVFX1NUT1BfUEFHRSA9IDA7CiAJCVFVRVVFX0ZJUlNUX0xJU1RFTkVS ID0gSW52YWxpZEJhY2tlbmRJZDsKIAkJYXN5bmNRdWV1ZUNvbnRyb2wtPmxhc3RRdWV1ZUZpbGxX YXJuID0gMDsKQEAgLTU2MSwyNCArNTU0LDE3IEBAIEFzeW5jU2htZW1Jbml0KHZvaWQpCiAJCQlR VUVVRV9CQUNLRU5EX1BJRChpKSA9IEludmFsaWRQaWQ7CiAJCQlRVUVVRV9CQUNLRU5EX0RCT0lE KGkpID0gSW52YWxpZE9pZDsKIAkJCVFVRVVFX05FWFRfTElTVEVORVIoaSkgPSBJbnZhbGlkQmFj a2VuZElkOwotCQkJU0VUX1FVRVVFX1BPUyhRVUVVRV9CQUNLRU5EX1BPUyhpKSwgMCwgMCk7CisJ CQlTRVRfUVVFVUVfUE9TKFFVRVVFX0JBQ0tFTkRfUE9TKGkpLCAwLCBTaXplT2ZQYWdlSGVhZGVy RGF0YSk7CiAJCX0KIAl9CiAKLQkvKgotCSAqIFNldCB1cCBTTFJVIG1hbmFnZW1lbnQgb2YgdGhl IHBnX25vdGlmeSBkYXRhLgotCSAqLwotCU5vdGlmeUN0bC0+UGFnZVByZWNlZGVzID0gYXN5bmNR dWV1ZVBhZ2VQcmVjZWRlczsKLQlTaW1wbGVMcnVJbml0KE5vdGlmeUN0bCwgIk5vdGlmeSIsIE5V TV9OT1RJRllfQlVGRkVSUywgMCwKLQkJCQkgIE5vdGlmeVNMUlVMb2NrLCAicGdfbm90aWZ5Iiwg TFdUUkFOQ0hFX05PVElGWV9CVUZGRVIsCi0JCQkJICBTWU5DX0hBTkRMRVJfTk9ORSk7Ci0KIAlp ZiAoIWZvdW5kKQogCXsKIAkJLyoKIAkJICogRHVyaW5nIHN0YXJ0IG9yIHJlYm9vdCwgY2xlYW4g b3V0IHRoZSBwZ19ub3RpZnkgZGlyZWN0b3J5LgogCQkgKi8KLQkJKHZvaWQpIFNscnVTY2FuRGly ZWN0b3J5KE5vdGlmeUN0bCwgU2xydVNjYW5EaXJDYkRlbGV0ZUFsbCwgTlVMTCk7CisJCSh2b2lk KSBTbHJ1U2NhbkRpcmVjdG9yeShTTFJVX05PVElGWV9JRCwgYXN5bmNRdWV1ZVBhZ2VQcmVjZWRl cywKKwkJCQkJCQkJIFNscnVTY2FuRGlyQ2JEZWxldGVBbGwsIE5VTEwpOwogCX0KIH0KIApAQCAt MTM0NSwxOSArMTMzMSwxOSBAQCBhc3luY1F1ZXVlQWR2YW5jZSh2b2xhdGlsZSBRdWV1ZVBvc2l0 aW9uICpwb3NpdGlvbiwgaW50IGVudHJ5TGVuZ3RoKQogCSAqIHdyaXR0ZW4gb3IgcmVhZC4KIAkg Ki8KIAlvZmZzZXQgKz0gZW50cnlMZW5ndGg7Ci0JQXNzZXJ0KG9mZnNldCA8PSBRVUVVRV9QQUdF U0laRSk7CisJQXNzZXJ0KG9mZnNldCA8PSBRVUVVRV9QQUdFU0laRSAtIFNpemVPZlBhZ2VIZWFk ZXJEYXRhKTsKIAogCS8qCiAJICogSW4gYSBzZWNvbmQgc3RlcCBjaGVjayBpZiBhbm90aGVyIGVu dHJ5IGNhbiBwb3NzaWJseSBiZSB3cml0dGVuIHRvIHRoZQogCSAqIHBhZ2UuIElmIHNvLCBzdGF5 IGhlcmUsIHdlIGhhdmUgcmVhY2hlZCB0aGUgbmV4dCBwb3NpdGlvbi4gSWYgbm90LCB0aGVuCiAJ ICogd2UgbmVlZCB0byBtb3ZlIG9uIHRvIHRoZSBuZXh0IHBhZ2UuCiAJICovCi0JaWYgKG9mZnNl dCArIFFVRVVFQUxJR04oQXN5bmNRdWV1ZUVudHJ5RW1wdHlTaXplKSA+IFFVRVVFX1BBR0VTSVpF KQorCWlmIChvZmZzZXQgKyBRVUVVRUFMSUdOKEFzeW5jUXVldWVFbnRyeUVtcHR5U2l6ZSkgPiBR VUVVRV9QQUdFU0laRSAtIFNpemVPZlBhZ2VIZWFkZXJEYXRhKQogCXsKIAkJcGFnZW5vKys7CiAJ CWlmIChwYWdlbm8gPiBRVUVVRV9NQVhfUEFHRSkKIAkJCXBhZ2VubyA9IDA7CQkJLyogd3JhcCBh cm91bmQgKi8KLQkJb2Zmc2V0ID0gMDsKKwkJb2Zmc2V0ID0gU2l6ZU9mUGFnZUhlYWRlckRhdGE7 IC8qIHN0YXJ0IGF0IFNpemVPZlBhZ2VIZWFkZXJEYXRhICovCiAJCXBhZ2VKdW1wID0gdHJ1ZTsK IAl9CiAKQEAgLTE0MTEsMTAgKzEzOTcsNyBAQCBhc3luY1F1ZXVlQWRkRW50cmllcyhMaXN0Q2Vs bCAqbmV4dE5vdGlmeSkKIAlRdWV1ZVBvc2l0aW9uIHF1ZXVlX2hlYWQ7CiAJaW50CQkJcGFnZW5v OwogCWludAkJCW9mZnNldDsKLQlpbnQJCQlzbG90bm87Ci0KLQkvKiBXZSBob2xkIGJvdGggTm90 aWZ5UXVldWVMb2NrIGFuZCBOb3RpZnlTTFJVTG9jayBkdXJpbmcgdGhpcyBvcGVyYXRpb24gKi8K LQlMV0xvY2tBY3F1aXJlKE5vdGlmeVNMUlVMb2NrLCBMV19FWENMVVNJVkUpOworCUJ1ZmZlcgkJ YnVmZmVyOwogCiAJLyoKIAkgKiBXZSB3b3JrIHdpdGggYSBsb2NhbCBjb3B5IG9mIFFVRVVFX0hF QUQsIHdoaWNoIHdlIHdyaXRlIGJhY2sgdG8gc2hhcmVkCkBAIC0xNDM5LDEzICsxNDIyLDIwIEBA IGFzeW5jUXVldWVBZGRFbnRyaWVzKExpc3RDZWxsICpuZXh0Tm90aWZ5KQogCSAqLwogCXBhZ2Vu byA9IFFVRVVFX1BPU19QQUdFKHF1ZXVlX2hlYWQpOwogCWlmIChRVUVVRV9QT1NfSVNfWkVSTyhx dWV1ZV9oZWFkKSkKLQkJc2xvdG5vID0gU2ltcGxlTHJ1WmVyb1BhZ2UoTm90aWZ5Q3RsLCBwYWdl bm8pOworCXsKKwkJYnVmZmVyID0gWmVyb1NscnVCdWZmZXIoU0xSVV9OT1RJRllfSUQsIHBhZ2Vu byk7CisJCVBhZ2VTZXRIZWFkZXJEYXRhTm9uUmVsKEJ1ZmZlckdldFBhZ2UoYnVmZmVyKSwgcGFn ZW5vLCBJbnZhbGlkWExvZ1JlY1B0ciwgQkxDS1NaLCBQR19NRVRBUEFHRV9MQVlPVVRfVkVSU0lP Tik7CisKKwl9CiAJZWxzZQotCQlzbG90bm8gPSBTaW1wbGVMcnVSZWFkUGFnZShOb3RpZnlDdGws IHBhZ2VubywgdHJ1ZSwKLQkJCQkJCQkJICAgSW52YWxpZFRyYW5zYWN0aW9uSWQpOworCXsKKwkJ YnVmZmVyID0gUmVhZFNscnVCdWZmZXIoU0xSVV9OT1RJRllfSUQsIHBhZ2Vubyk7CisJCUxvY2tC dWZmZXIoYnVmZmVyLCBCVUZGRVJfTE9DS19FWENMVVNJVkUpOworCX0KIAorCQogCS8qIE5vdGUg d2UgbWFyayB0aGUgcGFnZSBkaXJ0eSBiZWZvcmUgd3JpdGluZyBpbiBpdCAqLwotCU5vdGlmeUN0 bC0+c2hhcmVkLT5wYWdlX2RpcnR5W3Nsb3Rub10gPSB0cnVlOworCU1hcmtCdWZmZXJEaXJ0eShi dWZmZXIpOwogCiAJd2hpbGUgKG5leHROb3RpZnkgIT0gTlVMTCkKIAl7CkBAIC0xNDU3LDcgKzE0 NDcsNyBAQCBhc3luY1F1ZXVlQWRkRW50cmllcyhMaXN0Q2VsbCAqbmV4dE5vdGlmeSkKIAkJb2Zm c2V0ID0gUVVFVUVfUE9TX09GRlNFVChxdWV1ZV9oZWFkKTsKIAogCQkvKiBDaGVjayB3aGV0aGVy IHRoZSBlbnRyeSByZWFsbHkgZml0cyBvbiB0aGUgY3VycmVudCBwYWdlICovCi0JCWlmIChvZmZz ZXQgKyBxZS5sZW5ndGggPD0gUVVFVUVfUEFHRVNJWkUpCisJCWlmIChvZmZzZXQgKyBxZS5sZW5n dGggPD0gUVVFVUVfUEFHRVNJWkUgLSBTaXplT2ZQYWdlSGVhZGVyRGF0YSkKIAkJewogCQkJLyog T0ssIHNvIGFkdmFuY2UgbmV4dE5vdGlmeSBwYXN0IHRoaXMgaXRlbSAqLwogCQkJbmV4dE5vdGlm eSA9IGxuZXh0KHBlbmRpbmdOb3RpZmllcy0+ZXZlbnRzLCBuZXh0Tm90aWZ5KTsKQEAgLTE0Njks MTcgKzE0NTksMTkgQEAgYXN5bmNRdWV1ZUFkZEVudHJpZXMoTGlzdENlbGwgKm5leHROb3RpZnkp CiAJCQkgKiBvbmx5IGNoZWNrIGRib2lkIGFuZCBzaW5jZSBpdCB3b24ndCBtYXRjaCBhbnkgcmVh ZGVyJ3MgZGF0YWJhc2UKIAkJCSAqIE9JRCwgdGhleSB3aWxsIGlnbm9yZSB0aGlzIGVudHJ5IGFu ZCBtb3ZlIG9uLgogCQkJICovCi0JCQlxZS5sZW5ndGggPSBRVUVVRV9QQUdFU0laRSAtIG9mZnNl dDsKKwkJCXFlLmxlbmd0aCA9IFFVRVVFX1BBR0VTSVpFIC0gU2l6ZU9mUGFnZUhlYWRlckRhdGEg LSBvZmZzZXQ7CiAJCQlxZS5kYm9pZCA9IEludmFsaWRPaWQ7CiAJCQlxZS5kYXRhWzBdID0gJ1ww JzsJLyogZW1wdHkgY2hhbm5lbCAqLwogCQkJcWUuZGF0YVsxXSA9ICdcMCc7CS8qIGVtcHR5IHBh eWxvYWQgKi8KIAkJfQogCiAJCS8qIE5vdyBjb3B5IHFlIGludG8gdGhlIHNoYXJlZCBidWZmZXIg cGFnZSAqLwotCQltZW1jcHkoTm90aWZ5Q3RsLT5zaGFyZWQtPnBhZ2VfYnVmZmVyW3Nsb3Rub10g KyBvZmZzZXQsCisJCW1lbWNweShCdWZmZXJHZXRQYWdlKGJ1ZmZlcikgKyBTaXplT2ZQYWdlSGVh ZGVyRGF0YSArIG9mZnNldCwKIAkJCSAgICZxZSwKIAkJCSAgIHFlLmxlbmd0aCk7CiAKKwkJUGFn ZVNldENoZWNrc3VtSW5wbGFjZShCdWZmZXJHZXRQYWdlKGJ1ZmZlciksIHBhZ2Vubyk7CisKIAkJ LyogQWR2YW5jZSBxdWV1ZV9oZWFkIGFwcHJvcHJpYXRlbHksIGFuZCBkZXRlY3QgaWYgcGFnZSBp cyBmdWxsICovCiAJCWlmIChhc3luY1F1ZXVlQWR2YW5jZSgmKHF1ZXVlX2hlYWQpLCBxZS5sZW5n dGgpKQogCQl7CkBAIC0xNDkxLDcgKzE0ODMsMTAgQEAgYXN5bmNRdWV1ZUFkZEVudHJpZXMoTGlz dENlbGwgKm5leHROb3RpZnkpCiAJCQkgKiBhc3luY1F1ZXVlSXNGdWxsKCkgZW5zdXJlZCB0aGF0 IHRoZXJlIGlzIHJvb20gdG8gY3JlYXRlIHRoaXMKIAkJCSAqIHBhZ2Ugd2l0aG91dCBvdmVycnVu bmluZyB0aGUgcXVldWUuCiAJCQkgKi8KLQkJCXNsb3RubyA9IFNpbXBsZUxydVplcm9QYWdlKE5v dGlmeUN0bCwgUVVFVUVfUE9TX1BBR0UocXVldWVfaGVhZCkpOworCQkJVW5sb2NrUmVsZWFzZUJ1 ZmZlcihidWZmZXIpOworCQkJYnVmZmVyID0gWmVyb1NscnVCdWZmZXIoU0xSVV9OT1RJRllfSUQs CisJCQkJCQkJCQlRVUVVRV9QT1NfUEFHRShxdWV1ZV9oZWFkKSk7CisJCQlNYXJrQnVmZmVyRGly dHkoYnVmZmVyKTsKIAogCQkJLyoKIAkJCSAqIElmIHRoZSBuZXcgcGFnZSBhZGRyZXNzIGlzIGEg bXVsdGlwbGUgb2YgUVVFVUVfQ0xFQU5VUF9ERUxBWSwKQEAgLTE1MDUsMTIgKzE1MDAsMTEgQEAg YXN5bmNRdWV1ZUFkZEVudHJpZXMoTGlzdENlbGwgKm5leHROb3RpZnkpCiAJCQlicmVhazsKIAkJ fQogCX0KKwlVbmxvY2tSZWxlYXNlQnVmZmVyKGJ1ZmZlcik7CiAKIAkvKiBTdWNjZXNzLCBzbyB1 cGRhdGUgdGhlIGdsb2JhbCBRVUVVRV9IRUFEICovCiAJUVVFVUVfSEVBRCA9IHF1ZXVlX2hlYWQ7 CiAKLQlMV0xvY2tSZWxlYXNlKE5vdGlmeVNMUlVMb2NrKTsKLQogCXJldHVybiBuZXh0Tm90aWZ5 OwogfQogCkBAIC0xOTgzLDE3ICsxOTc3LDE2IEBAIGFzeW5jUXVldWVSZWFkQWxsTm90aWZpY2F0 aW9ucyh2b2lkKQogCQl7CiAJCQlpbnQJCQljdXJwYWdlID0gUVVFVUVfUE9TX1BBR0UocG9zKTsK IAkJCWludAkJCWN1cm9mZnNldCA9IFFVRVVFX1BPU19PRkZTRVQocG9zKTsKLQkJCWludAkJCXNs b3RubzsKIAkJCWludAkJCWNvcHlzaXplOworCQkJQnVmZmVyCQlidWZmZXI7CiAKIAkJCS8qCi0J CQkgKiBXZSBjb3B5IHRoZSBkYXRhIGZyb20gU0xSVSBpbnRvIGEgbG9jYWwgYnVmZmVyLCBzbyBh cyB0byBhdm9pZAotCQkJICogaG9sZGluZyB0aGUgTm90aWZ5U0xSVUxvY2sgd2hpbGUgd2UgYXJl IGV4YW1pbmluZyB0aGUgZW50cmllcwotCQkJICogYW5kIHBvc3NpYmx5IHRyYW5zbWl0dGluZyB0 aGVtIHRvIG91ciBmcm9udGVuZC4gIENvcHkgb25seSB0aGUKLQkJCSAqIHBhcnQgb2YgdGhlIHBh Z2Ugd2Ugd2lsbCBhY3R1YWxseSBpbnNwZWN0LgorCQkJICogV2UgY29weSB0aGUgZGF0YSBpbnRv IGEgbG9jYWwgYnVmZmVyLCBzbyBhcyB0byBhdm9pZCBob2xkaW5nIGEKKwkJCSAqIGJ1ZmZlciBw aW4gd2hpbGUgd2UgYXJlIGV4YW1pbmluZyB0aGUgZW50cmllcyBhbmQgcG9zc2libHkKKwkJCSAq IHRyYW5zbWl0dGluZyB0aGVtIHRvIG91ciBmcm9udGVuZC4gIENvcHkgb25seSB0aGUgcGFydCBv ZiB0aGUKKwkJCSAqIHBhZ2Ugd2Ugd2lsbCBhY3R1YWxseSBpbnNwZWN0LgogCQkJICovCi0JCQlz bG90bm8gPSBTaW1wbGVMcnVSZWFkUGFnZV9SZWFkT25seShOb3RpZnlDdGwsIGN1cnBhZ2UsCi0J CQkJCQkJCQkJCQlJbnZhbGlkVHJhbnNhY3Rpb25JZCk7CisJCQlidWZmZXIgPSBSZWFkU2xydUJ1 ZmZlcihTTFJVX05PVElGWV9JRCwgY3VycGFnZSk7CiAJCQlpZiAoY3VycGFnZSA9PSBRVUVVRV9Q T1NfUEFHRShoZWFkKSkKIAkJCXsKIAkJCQkvKiB3ZSBvbmx5IHdhbnQgdG8gcmVhZCBhcyBmYXIg YXMgaGVhZCAqLwpAQCAtMjAwNCwxMyArMTk5NywxMiBAQCBhc3luY1F1ZXVlUmVhZEFsbE5vdGlm aWNhdGlvbnModm9pZCkKIAkJCWVsc2UKIAkJCXsKIAkJCQkvKiBmZXRjaCBhbGwgdGhlIHJlc3Qg b2YgdGhlIHBhZ2UgKi8KLQkJCQljb3B5c2l6ZSA9IFFVRVVFX1BBR0VTSVpFIC0gY3Vyb2Zmc2V0 OworCQkJCWNvcHlzaXplID0gUVVFVUVfUEFHRVNJWkUgLSBTaXplT2ZQYWdlSGVhZGVyRGF0YSAt IGN1cm9mZnNldDsKIAkJCX0KLQkJCW1lbWNweShwYWdlX2J1ZmZlci5idWYgKyBjdXJvZmZzZXQs Ci0JCQkJICAgTm90aWZ5Q3RsLT5zaGFyZWQtPnBhZ2VfYnVmZmVyW3Nsb3Rub10gKyBjdXJvZmZz ZXQsCisJCQltZW1jcHkocGFnZV9idWZmZXIuYnVmICsgU2l6ZU9mUGFnZUhlYWRlckRhdGEgKyBj dXJvZmZzZXQsCisJCQkJICAgQnVmZmVyR2V0UGFnZShidWZmZXIpICsgU2l6ZU9mUGFnZUhlYWRl ckRhdGEgKyBjdXJvZmZzZXQsCiAJCQkJICAgY29weXNpemUpOwotCQkJLyogUmVsZWFzZSBsb2Nr IHRoYXQgd2UgZ290IGZyb20gU2ltcGxlTHJ1UmVhZFBhZ2VfUmVhZE9ubHkoKSAqLwotCQkJTFdM b2NrUmVsZWFzZShOb3RpZnlTTFJVTG9jayk7CisJCQlSZWxlYXNlQnVmZmVyKGJ1ZmZlcik7CiAK IAkJCS8qCiAJCQkgKiBQcm9jZXNzIG1lc3NhZ2VzIHVwIHRvIHRoZSBzdG9wIHBvc2l0aW9uLCBl bmQgb2YgcGFnZSwgb3IgYW4KQEAgLTIwNzgsNyArMjA3MCw3IEBAIGFzeW5jUXVldWVQcm9jZXNz UGFnZUVudHJpZXModm9sYXRpbGUgUXVldWVQb3NpdGlvbiAqY3VycmVudCwKIAkJaWYgKFFVRVVF X1BPU19FUVVBTCh0aGlzZW50cnksIHN0b3ApKQogCQkJYnJlYWs7CiAKLQkJcWUgPSAoQXN5bmNR dWV1ZUVudHJ5ICopIChwYWdlX2J1ZmZlciArIFFVRVVFX1BPU19PRkZTRVQodGhpc2VudHJ5KSk7 CisJCXFlID0gKEFzeW5jUXVldWVFbnRyeSAqKSAocGFnZV9idWZmZXIgKyBTaXplT2ZQYWdlSGVh ZGVyRGF0YSArIFFVRVVFX1BPU19PRkZTRVQodGhpc2VudHJ5KSk7CiAKIAkJLyoKIAkJICogQWR2 YW5jZSAqY3VycmVudCBvdmVyIHRoaXMgbWVzc2FnZSwgcG9zc2libHkgdG8gdGhlIG5leHQgcGFn ZS4gQXMKQEAgLTIyMDcsNyArMjE5OSw3IEBAIGFzeW5jUXVldWVBZHZhbmNlVGFpbCh2b2lkKQog CQkgKiBTaW1wbGVMcnVUcnVuY2F0ZSgpIHdpbGwgYXNrIGZvciBOb3RpZnlTTFJVTG9jayBidXQg d2lsbCBhbHNvCiAJCSAqIHJlbGVhc2UgdGhlIGxvY2sgYWdhaW4uCiAJCSAqLwotCQlTaW1wbGVM cnVUcnVuY2F0ZShOb3RpZnlDdGwsIG5ld3RhaWxwYWdlKTsKKwkJU2ltcGxlTHJ1VHJ1bmNhdGUo U0xSVV9OT1RJRllfSUQsIGFzeW5jUXVldWVQYWdlUHJlY2VkZXMsIG5ld3RhaWxwYWdlKTsKIAog CQkvKgogCQkgKiBVcGRhdGUgUVVFVUVfU1RPUF9QQUdFLiAgVGhpcyBjaGFuZ2VzIGFzeW5jUXVl dWVJc0Z1bGwoKSdzIHZlcmRpY3QKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL2NvbW1hbmRzL2Ri Y29tbWFuZHMuYyBiL3NyYy9iYWNrZW5kL2NvbW1hbmRzL2RiY29tbWFuZHMuYwppbmRleCAwOTlk MzY5YjJmNC4uODBkNTVjMTM3NWYgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL2NvbW1hbmRzL2Ri Y29tbWFuZHMuYworKysgYi9zcmMvYmFja2VuZC9jb21tYW5kcy9kYmNvbW1hbmRzLmMKQEAgLTI4 MCw3ICsyODAsNyBAQCBTY2FuU291cmNlRGF0YWJhc2VQZ0NsYXNzKE9pZCB0YmlkLCBPaWQgZGJp ZCwgY2hhciAqc3JjcGF0aCkKIAkgKiBpbnZhbGlkYXRpb25zLgogCSAqLwogCXJlbCA9IENyZWF0 ZUZha2VSZWxjYWNoZUVudHJ5KHJsb2NhdG9yKTsKLQluYmxvY2tzID0gc21ncm5ibG9ja3MoUmVs YXRpb25HZXRTbWdyKHJlbCksIE1BSU5fRk9SS05VTSk7CisJbmJsb2NrcyA9IHNtZ3JuYmxvY2tz KFJlbGF0aW9uR2V0U21ncihyZWwsIE1BSU5fRk9SS05VTSkpOwogCUZyZWVGYWtlUmVsY2FjaGVF bnRyeShyZWwpOwogCiAJLyogVXNlIGEgYnVmZmVyIGFjY2VzcyBzdHJhdGVneSBzaW5jZSB0aGlz IGlzIGEgYnVsayByZWFkIG9wZXJhdGlvbi4gKi8KZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL2Nv bW1hbmRzL3NlcXVlbmNlLmMgYi9zcmMvYmFja2VuZC9jb21tYW5kcy9zZXF1ZW5jZS5jCmluZGV4 IGIwYjIxMTg5MWMzLi4wODg4YjUxMDdiMyAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvY29tbWFu ZHMvc2VxdWVuY2UuYworKysgYi9zcmMvYmFja2VuZC9jb21tYW5kcy9zZXF1ZW5jZS5jCkBAIC0z NDUsMTQgKzM0NSwxNCBAQCBmaWxsX3NlcV93aXRoX2RhdGEoUmVsYXRpb24gcmVsLCBIZWFwVHVw bGUgdHVwbGUpCiAKIAlpZiAocmVsLT5yZF9yZWwtPnJlbHBlcnNpc3RlbmNlID09IFJFTFBFUlNJ U1RFTkNFX1VOTE9HR0VEKQogCXsKLQkJU01nclJlbGF0aW9uIHNyZWw7CisJCVNNZ3JGaWxlSGFu ZGxlIHNmaWxlOwogCi0JCXNyZWwgPSBzbWdyb3BlbihyZWwtPnJkX2xvY2F0b3IsIEludmFsaWRC YWNrZW5kSWQpOwotCQlzbWdyY3JlYXRlKHNyZWwsIElOSVRfRk9SS05VTSwgZmFsc2UpOworCQlz ZmlsZSA9IHNtZ3JvcGVuKHJlbC0+cmRfbG9jYXRvciwgSW52YWxpZEJhY2tlbmRJZCwgSU5JVF9G T1JLTlVNKTsKKwkJc21ncmNyZWF0ZShzZmlsZSwgZmFsc2UpOwogCQlsb2dfc21ncmNyZWF0ZSgm cmVsLT5yZF9sb2NhdG9yLCBJTklUX0ZPUktOVU0pOwogCQlmaWxsX3NlcV9mb3JrX3dpdGhfZGF0 YShyZWwsIHR1cGxlLCBJTklUX0ZPUktOVU0pOwogCQlGbHVzaFJlbGF0aW9uQnVmZmVycyhyZWwp OwotCQlzbWdyY2xvc2Uoc3JlbCk7CisJCXNtZ3JjbG9zZShzZmlsZSk7CiAJfQogfQogCmRpZmYg LS1naXQgYS9zcmMvYmFja2VuZC9jb21tYW5kcy90YWJsZWNtZHMuYyBiL3NyYy9iYWNrZW5kL2Nv bW1hbmRzL3RhYmxlY21kcy5jCmluZGV4IDdmYmVlMGMxZjcxLi41MTI4NzZhYTk1MyAxMDA2NDQK LS0tIGEvc3JjL2JhY2tlbmQvY29tbWFuZHMvdGFibGVjbWRzLmMKKysrIGIvc3JjL2JhY2tlbmQv Y29tbWFuZHMvdGFibGVjbWRzLmMKQEAgLTE0NTkzLDkgKzE0NTkzLDcgQEAgQWx0ZXJUYWJsZU1v dmVBbGwoQWx0ZXJUYWJsZU1vdmVBbGxTdG10ICpzdG10KQogc3RhdGljIHZvaWQKIGluZGV4X2Nv cHlfZGF0YShSZWxhdGlvbiByZWwsIFJlbEZpbGVMb2NhdG9yIG5ld3Jsb2NhdG9yKQogewotCVNN Z3JSZWxhdGlvbiBkc3RyZWw7Ci0KLQlkc3RyZWwgPSBzbWdyb3BlbihuZXdybG9jYXRvciwgcmVs LT5yZF9iYWNrZW5kKTsKKwlTTWdyRmlsZUhhbmRsZSBkc3RtYWluOwogCiAJLyoKIAkgKiBTaW5j ZSB3ZSBjb3B5IHRoZSBmaWxlIGRpcmVjdGx5IHdpdGhvdXQgbG9va2luZyBhdCB0aGUgc2hhcmVk IGJ1ZmZlcnMsCkBAIC0xNDYxNSwxNiArMTQ2MTMsMjAgQEAgaW5kZXhfY29weV9kYXRhKFJlbGF0 aW9uIHJlbCwgUmVsRmlsZUxvY2F0b3IgbmV3cmxvY2F0b3IpCiAJUmVsYXRpb25DcmVhdGVTdG9y YWdlKG5ld3Jsb2NhdG9yLCByZWwtPnJkX3JlbC0+cmVscGVyc2lzdGVuY2UsIHRydWUpOwogCiAJ LyogY29weSBtYWluIGZvcmsgKi8KLQlSZWxhdGlvbkNvcHlTdG9yYWdlKFJlbGF0aW9uR2V0U21n cihyZWwpLCBkc3RyZWwsIE1BSU5fRk9SS05VTSwKKwlkc3RtYWluID0gc21ncm9wZW4obmV3cmxv Y2F0b3IsIHJlbC0+cmRfYmFja2VuZCwgTUFJTl9GT1JLTlVNKTsKKwlSZWxhdGlvbkNvcHlTdG9y YWdlKFJlbGF0aW9uR2V0U21ncihyZWwsIE1BSU5fRk9SS05VTSksIGRzdG1haW4sCiAJCQkJCQly ZWwtPnJkX3JlbC0+cmVscGVyc2lzdGVuY2UpOwogCiAJLyogY29weSB0aG9zZSBleHRyYSBmb3Jr cyB0aGF0IGV4aXN0ICovCiAJZm9yIChGb3JrTnVtYmVyIGZvcmtOdW0gPSBNQUlOX0ZPUktOVU0g KyAxOwogCQkgZm9ya051bSA8PSBNQVhfRk9SS05VTTsgZm9ya051bSsrKQogCXsKLQkJaWYgKHNt Z3JleGlzdHMoUmVsYXRpb25HZXRTbWdyKHJlbCksIGZvcmtOdW0pKQorCQlpZiAoc21ncmV4aXN0 cyhSZWxhdGlvbkdldFNtZ3IocmVsLCBmb3JrTnVtKSkpCiAJCXsKLQkJCXNtZ3JjcmVhdGUoZHN0 cmVsLCBmb3JrTnVtLCBmYWxzZSk7CisJCQlTTWdyRmlsZUhhbmRsZSBzcmNfZm9yayA9IFJlbGF0 aW9uR2V0U21ncihyZWwsIGZvcmtOdW0pOworCQkJU01nckZpbGVIYW5kbGUgZHN0X2ZvcmsgPSBz bWdyb3BlbihuZXdybG9jYXRvciwgcmVsLT5yZF9iYWNrZW5kLCBmb3JrTnVtKTsKKworCQkJc21n cmNyZWF0ZShkc3RfZm9yaywgZmFsc2UpOwogCiAJCQkvKgogCQkJICogV0FMIGxvZyBjcmVhdGlv biBpZiB0aGUgcmVsYXRpb24gaXMgcGVyc2lzdGVudCwgb3IgdGhpcyBpcyB0aGUKQEAgLTE0NjM0 LDE0ICsxNDYzNiwxNSBAQCBpbmRleF9jb3B5X2RhdGEoUmVsYXRpb24gcmVsLCBSZWxGaWxlTG9j YXRvciBuZXdybG9jYXRvcikKIAkJCQkocmVsLT5yZF9yZWwtPnJlbHBlcnNpc3RlbmNlID09IFJF TFBFUlNJU1RFTkNFX1VOTE9HR0VEICYmCiAJCQkJIGZvcmtOdW0gPT0gSU5JVF9GT1JLTlVNKSkK IAkJCQlsb2dfc21ncmNyZWF0ZSgmbmV3cmxvY2F0b3IsIGZvcmtOdW0pOwotCQkJUmVsYXRpb25D b3B5U3RvcmFnZShSZWxhdGlvbkdldFNtZ3IocmVsKSwgZHN0cmVsLCBmb3JrTnVtLAorCQkJUmVs YXRpb25Db3B5U3RvcmFnZShzcmNfZm9yaywgZHN0X2ZvcmssCiAJCQkJCQkJCXJlbC0+cmRfcmVs LT5yZWxwZXJzaXN0ZW5jZSk7CisJCQlzbWdyY2xvc2UoZHN0X2ZvcmspOwogCQl9CiAJfQogCiAJ LyogZHJvcCBvbGQgcmVsYXRpb24sIGFuZCBjbG9zZSBuZXcgb25lICovCiAJUmVsYXRpb25Ecm9w U3RvcmFnZShyZWwpOwotCXNtZ3JjbG9zZShkc3RyZWwpOworCXNtZ3JjbG9zZShkc3RtYWluKTsK IH0KIAogLyoKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL3N0b3JhZ2UvYnVmZmVyL2J1Zl9pbml0 LmMgYi9zcmMvYmFja2VuZC9zdG9yYWdlL2J1ZmZlci9idWZfaW5pdC5jCmluZGV4IDI4NjJlOWU0 MTJjLi43MTlmMjdhODZhNCAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvc3RvcmFnZS9idWZmZXIv YnVmX2luaXQuYworKysgYi9zcmMvYmFja2VuZC9zdG9yYWdlL2J1ZmZlci9idWZfaW5pdC5jCkBA IC0yMCw2ICsyMCw3IEBACiAKIEJ1ZmZlckRlc2NQYWRkZWQgKkJ1ZmZlckRlc2NyaXB0b3JzOwog Y2hhcgkgICAqQnVmZmVyQmxvY2tzOworWExvZ1JlY1B0ciAqQnVmZmVyRXh0ZXJuYWxMU05zOwog Q29uZGl0aW9uVmFyaWFibGVNaW5pbWFsbHlQYWRkZWQgKkJ1ZmZlcklPQ1ZBcnJheTsKIFdyaXRl YmFja0NvbnRleHQgQmFja2VuZFdyaXRlYmFja0NvbnRleHQ7CiBDa3B0U29ydEl0ZW0gKkNrcHRC dWZmZXJJZHM7CkBAIC02OSw5ICs3MCwxMSBAQCBJbml0QnVmZmVyUG9vbCh2b2lkKQogewogCWJv b2wJCWZvdW5kQnVmcywKIAkJCQlmb3VuZERlc2NzLAorCQkJCWZvdW5kTFNOcywKIAkJCQlmb3Vu ZElPQ1YsCiAJCQkJZm91bmRCdWZDa3B0OwogCisKIAkvKiBBbGlnbiBkZXNjcmlwdG9ycyB0byBh IGNhY2hlbGluZSBib3VuZGFyeS4gKi8KIAlCdWZmZXJEZXNjcmlwdG9ycyA9IChCdWZmZXJEZXNj UGFkZGVkICopCiAJCVNobWVtSW5pdFN0cnVjdCgiQnVmZmVyIERlc2NyaXB0b3JzIiwKQEAgLTg4 LDYgKzkxLDExIEBAIEluaXRCdWZmZXJQb29sKHZvaWQpCiAJCQkJCQlOQnVmZmVycyAqIHNpemVv ZihDb25kaXRpb25WYXJpYWJsZU1pbmltYWxseVBhZGRlZCksCiAJCQkJCQkmZm91bmRJT0NWKTsK IAorCUJ1ZmZlckV4dGVybmFsTFNOcyA9IChYTG9nUmVjUHRyICopCisJCVNobWVtSW5pdFN0cnVj dCgiQnVmZmVyIEV4dGVybmFsIExTTnMiLAorCQkJCQkJTkJ1ZmZlcnMgKiBzaXplb2YoWExvZ1Jl Y1B0ciksCisJCQkJCQkmZm91bmRMU05zKTsKKwogCS8qCiAJICogVGhlIGFycmF5IHVzZWQgdG8g c29ydCB0by1iZS1jaGVja3BvaW50ZWQgYnVmZmVyIGlkcyBpcyBsb2NhdGVkIGluCiAJICogc2hh cmVkIG1lbW9yeSwgdG8gYXZvaWQgaGF2aW5nIHRvIGFsbG9jYXRlIHNpZ25pZmljYW50IGFtb3Vu dHMgb2YKQEAgLTk5LDEwICsxMDcsMTAgQEAgSW5pdEJ1ZmZlclBvb2wodm9pZCkKIAkJU2htZW1J bml0U3RydWN0KCJDaGVja3BvaW50IEJ1ZmZlcklkcyIsCiAJCQkJCQlOQnVmZmVycyAqIHNpemVv ZihDa3B0U29ydEl0ZW0pLCAmZm91bmRCdWZDa3B0KTsKIAotCWlmIChmb3VuZERlc2NzIHx8IGZv dW5kQnVmcyB8fCBmb3VuZElPQ1YgfHwgZm91bmRCdWZDa3B0KQorCWlmIChmb3VuZERlc2NzIHx8 IGZvdW5kQnVmcyB8fCBmb3VuZElPQ1YgfHwgZm91bmRCdWZDa3B0IHx8IGZvdW5kTFNOcykKIAl7 CiAJCS8qIHNob3VsZCBmaW5kIGFsbCBvZiB0aGVzZSwgb3Igbm9uZSBvZiB0aGVtICovCi0JCUFz c2VydChmb3VuZERlc2NzICYmIGZvdW5kQnVmcyAmJiBmb3VuZElPQ1YgJiYgZm91bmRCdWZDa3B0 KTsKKwkJQXNzZXJ0KGZvdW5kRGVzY3MgJiYgZm91bmRCdWZzICYmIGZvdW5kSU9DViAmJiBmb3Vu ZEJ1ZkNrcHQgJiYgZm91bmRMU05zKTsKIAkJLyogbm90ZTogdGhpcyBwYXRoIGlzIG9ubHkgdGFr ZW4gaW4gRVhFQ19CQUNLRU5EIGNhc2UgKi8KIAl9CiAJZWxzZQpAQCAtMTMzLDYgKzE0MSw4IEBA IEluaXRCdWZmZXJQb29sKHZvaWQpCiAJCQkJCQkJIExXVFJBTkNIRV9CVUZGRVJfQ09OVEVOVCk7 CiAKIAkJCUNvbmRpdGlvblZhcmlhYmxlSW5pdChCdWZmZXJEZXNjcmlwdG9yR2V0SU9DVihidWYp KTsKKworCQkJQnVmZmVyRXh0ZXJuYWxMU05zW2ldID0gSW52YWxpZFhMb2dSZWNQdHI7CiAJCX0K IAogCQkvKiBDb3JyZWN0IGxhc3QgZW50cnkgb2YgbGlua2VkIGxpc3QgKi8KQEAgLTE2Niw2ICsx NzYsOSBAQCBCdWZmZXJTaG1lbVNpemUodm9pZCkKIAkvKiBzaXplIG9mIGRhdGEgcGFnZXMgKi8K IAlzaXplID0gYWRkX3NpemUoc2l6ZSwgbXVsX3NpemUoTkJ1ZmZlcnMsIEJMQ0tTWikpOwogCisJ Lyogc2l6ZSBvZiBleHRlcm5hbCBMU05zICovCisJc2l6ZSA9IGFkZF9zaXplKHNpemUsIG11bF9z aXplKE5CdWZmZXJzLCBzaXplb2YoWExvZ1JlY1B0cikpKTsKKwogCS8qIHNpemUgb2Ygc3R1ZmYg Y29udHJvbGxlZCBieSBmcmVlbGlzdC5jICovCiAJc2l6ZSA9IGFkZF9zaXplKHNpemUsIFN0cmF0 ZWd5U2htZW1TaXplKCkpOwogCmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9zdG9yYWdlL2J1ZmZl ci9idWZtZ3IuYyBiL3NyYy9iYWNrZW5kL3N0b3JhZ2UvYnVmZmVyL2J1Zm1nci5jCmluZGV4IGI3 NDg4YjVkODllLi43MTQ0NDc5OGNmMiAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvc3RvcmFnZS9i dWZmZXIvYnVmbWdyLmMKKysrIGIvc3JjL2JhY2tlbmQvc3RvcmFnZS9idWZmZXIvYnVmbWdyLmMK QEAgLTU3LDEwICs1NywyMSBAQAogI2luY2x1ZGUgInV0aWxzL3Jlc293bmVyX3ByaXZhdGUuaCIK ICNpbmNsdWRlICJ1dGlscy90aW1lc3RhbXAuaCIKIAorLyoKKyAqIFhYWCBJZGVhbGx5IHdlJ2Qg c3dpdGNoIHRvIHN0YW5kYXJkIHBhZ2VzIGZvciBTTFJVIGRhdGEsIGJ1dCBpbiB0aGUKKyAqIG1l YW50aW1lIHdlIG5lZWQgc29tZSB3YXkgdG8gaWRlbnRpZnkgYnVmZmVycyB0aGF0IGhvbGQgcmF3 IGRhdGEgKG5vCisgKiBpbnZhc2l2ZSBMU04sIG5vIGNoZWNrc3VtcykuCisgKi8KKyNkZWZpbmUg QnVmZmVySGFzU3RhbmRhcmRQYWdlKGJ1ZkhkcikJCQlcCisJKChidWZIZHIpLT50YWcucmxvY2F0 b3Iuc3BjT2lkICE9IDkpCisKKyNkZWZpbmUgQnVmZmVySGFzRXh0ZXJuYWxMU04oYnVmSGRyKQkJ CVwKKwkhQnVmZmVySGFzU3RhbmRhcmRQYWdlKGJ1ZkhkcikKIAogLyogTm90ZTogdGhlc2UgdHdv IG1hY3JvcyBvbmx5IHdvcmsgb24gc2hhcmVkIGJ1ZmZlcnMsIG5vdCBsb2NhbCBvbmVzISAqLwog I2RlZmluZSBCdWZIZHJHZXRCbG9jayhidWZIZHIpCSgoQmxvY2spIChCdWZmZXJCbG9ja3MgKyAo KFNpemUpIChidWZIZHIpLT5idWZfaWQpICogQkxDS1NaKSkKLSNkZWZpbmUgQnVmZmVyR2V0TFNO KGJ1ZkhkcikJKFBhZ2VHZXRMU04oQnVmSGRyR2V0QmxvY2soYnVmSGRyKSkpCisjZGVmaW5lIEJ1 ZmZlckdldExTTihidWZIZHIpIFwKKwlQYWdlR2V0TFNOKEJ1ZkhkckdldEJsb2NrKGJ1Zkhkcikp CiAKIC8qIE5vdGU6IHRoaXMgbWFjcm8gb25seSB3b3JrcyBvbiBsb2NhbCBidWZmZXJzLCBub3Qg c2hhcmVkIG9uZXMhICovCiAjZGVmaW5lIExvY2FsQnVmSGRyR2V0QmxvY2soYnVmSGRyKSBcCkBA IC0xMTcsMTkgKzEyOCw2IEBAIHR5cGVkZWYgc3RydWN0IENrcHRUc1N0YXR1cwogCWludAkJCWlu ZGV4OwogfSBDa3B0VHNTdGF0dXM7CiAKLS8qCi0gKiBUeXBlIGZvciBhcnJheSB1c2VkIHRvIHNv cnQgU01nclJlbGF0aW9ucwotICoKLSAqIEZsdXNoUmVsYXRpb25zQWxsQnVmZmVycyBzaGFyZXMg dGhlIHNhbWUgY29tcGFyYXRvciBmdW5jdGlvbiB3aXRoCi0gKiBEcm9wUmVsYXRpb25zQWxsQnVm ZmVycy4gUG9pbnRlciB0byB0aGlzIHN0cnVjdCBhbmQgUmVsRmlsZUxvY2F0b3IgbXVzdCBiZQot ICogY29tcGF0aWJsZS4KLSAqLwotdHlwZWRlZiBzdHJ1Y3QgU01nclNvcnRBcnJheQotewotCVJl bEZpbGVMb2NhdG9yIHJsb2NhdG9yOwkvKiBUaGlzIG11c3QgYmUgdGhlIGZpcnN0IG1lbWJlciAq LwotCVNNZ3JSZWxhdGlvbiBzcmVsOwotfSBTTWdyU29ydEFycmF5OwotCiAvKiBHVUMgdmFyaWFi bGVzICovCiBib29sCQl6ZXJvX2RhbWFnZWRfcGFnZXMgPSBmYWxzZTsKIGludAkJCWJnd3JpdGVy X2xydV9tYXhwYWdlcyA9IDEwMDsKQEAgLTQ1OSw4ICs0NTcsOCBAQCBGb3JnZXRQcml2YXRlUmVm Q291bnRFbnRyeShQcml2YXRlUmVmQ291bnRFbnRyeSAqcmVmKQogKQogCiAKLXN0YXRpYyBCdWZm ZXIgUmVhZEJ1ZmZlcl9jb21tb24oU01nclJlbGF0aW9uIHJlbG4sIGNoYXIgcmVscGVyc2lzdGVu Y2UsCi0JCQkJCQkJCUZvcmtOdW1iZXIgZm9ya051bSwgQmxvY2tOdW1iZXIgYmxvY2tOdW0sCitz dGF0aWMgQnVmZmVyIFJlYWRCdWZmZXJfY29tbW9uKFNNZ3JGaWxlSGFuZGxlIHNmaWxlLCBjaGFy IHJlbHBlcnNpc3RlbmNlLAorCQkJCQkJCQlCbG9ja051bWJlciBibG9ja051bSwKIAkJCQkJCQkJ UmVhZEJ1ZmZlck1vZGUgbW9kZSwgQnVmZmVyQWNjZXNzU3RyYXRlZ3kgc3RyYXRlZ3ksCiAJCQkJ CQkJCWJvb2wgKmhpdCk7CiBzdGF0aWMgYm9vbCBQaW5CdWZmZXIoQnVmZmVyRGVzYyAqYnVmLCBC dWZmZXJBY2Nlc3NTdHJhdGVneSBzdHJhdGVneSk7CkBAIC00NzYsMTMgKzQ3NCwxMiBAQCBzdGF0 aWMgdm9pZCBUZXJtaW5hdGVCdWZmZXJJTyhCdWZmZXJEZXNjICpidWYsIGJvb2wgY2xlYXJfZGly dHksCiAJCQkJCQkJICB1aW50MzIgc2V0X2ZsYWdfYml0cyk7CiBzdGF0aWMgdm9pZCBzaGFyZWRf YnVmZmVyX3dyaXRlX2Vycm9yX2NhbGxiYWNrKHZvaWQgKmFyZyk7CiBzdGF0aWMgdm9pZCBsb2Nh bF9idWZmZXJfd3JpdGVfZXJyb3JfY2FsbGJhY2sodm9pZCAqYXJnKTsKLXN0YXRpYyBCdWZmZXJE ZXNjICpCdWZmZXJBbGxvYyhTTWdyUmVsYXRpb24gc21nciwKK3N0YXRpYyBCdWZmZXJEZXNjICpC dWZmZXJBbGxvYyhTTWdyRmlsZUhhbmRsZSBzbWdyLAogCQkJCQkJCSAgIGNoYXIgcmVscGVyc2lz dGVuY2UsCi0JCQkJCQkJICAgRm9ya051bWJlciBmb3JrTnVtLAogCQkJCQkJCSAgIEJsb2NrTnVt YmVyIGJsb2NrTnVtLAogCQkJCQkJCSAgIEJ1ZmZlckFjY2Vzc1N0cmF0ZWd5IHN0cmF0ZWd5LAog CQkJCQkJCSAgIGJvb2wgKmZvdW5kUHRyKTsKLXN0YXRpYyB2b2lkIEZsdXNoQnVmZmVyKEJ1ZmZl ckRlc2MgKmJ1ZiwgU01nclJlbGF0aW9uIHJlbG4pOworc3RhdGljIHZvaWQgRmx1c2hCdWZmZXIo QnVmZmVyRGVzYyAqYnVmLCBTTWdyRmlsZUhhbmRsZSBzZmlsZSk7CiBzdGF0aWMgdm9pZCBGaW5k QW5kRHJvcFJlbGF0aW9uQnVmZmVycyhSZWxGaWxlTG9jYXRvciBybG9jYXRvciwKIAkJCQkJCQkJ CSAgIEZvcmtOdW1iZXIgZm9ya051bSwKIAkJCQkJCQkJCSAgIEJsb2NrTnVtYmVyIG5Gb3JrQmxv Y2ssCkBAIC01MDIsOSArNDk5LDcgQEAgc3RhdGljIGludAl0c19ja3B0X3Byb2dyZXNzX2NvbXBh cmF0b3IoRGF0dW0gYSwgRGF0dW0gYiwgdm9pZCAqYXJnKTsKICAqIEltcGxlbWVudGF0aW9uIG9m IFByZWZldGNoQnVmZmVyKCkgZm9yIHNoYXJlZCBidWZmZXJzLgogICovCiBQcmVmZXRjaEJ1ZmZl clJlc3VsdAotUHJlZmV0Y2hTaGFyZWRCdWZmZXIoU01nclJlbGF0aW9uIHNtZ3JfcmVsbiwKLQkJ CQkJIEZvcmtOdW1iZXIgZm9ya051bSwKLQkJCQkJIEJsb2NrTnVtYmVyIGJsb2NrTnVtKQorUHJl ZmV0Y2hTaGFyZWRCdWZmZXIoU01nckZpbGVIYW5kbGUgc2ZpbGUsIEJsb2NrTnVtYmVyIGJsb2Nr TnVtKQogewogCVByZWZldGNoQnVmZmVyUmVzdWx0IHJlc3VsdCA9IHtJbnZhbGlkQnVmZmVyLCBm YWxzZX07CiAJQnVmZmVyVGFnCW5ld1RhZzsJCQkvKiBpZGVudGl0eSBvZiByZXF1ZXN0ZWQgYmxv Y2sgKi8KQEAgLTUxNSw4ICs1MTAsOCBAQCBQcmVmZXRjaFNoYXJlZEJ1ZmZlcihTTWdyUmVsYXRp b24gc21ncl9yZWxuLAogCUFzc2VydChCbG9ja051bWJlcklzVmFsaWQoYmxvY2tOdW0pKTsKIAog CS8qIGNyZWF0ZSBhIHRhZyBzbyB3ZSBjYW4gbG9va3VwIHRoZSBidWZmZXIgKi8KLQlJTklUX0JV RkZFUlRBRyhuZXdUYWcsIHNtZ3JfcmVsbi0+c21ncl9ybG9jYXRvci5sb2NhdG9yLAotCQkJCSAg IGZvcmtOdW0sIGJsb2NrTnVtKTsKKwlJTklUX0JVRkZFUlRBRyhuZXdUYWcsIHNmaWxlLT5zbWdy X2xvY2F0b3IubG9jYXRvciwKKwkJCQkgICBzZmlsZS0+c21ncl9sb2NhdG9yLmZvcmtudW0sIGJs b2NrTnVtKTsKIAogCS8qIGRldGVybWluZSBpdHMgaGFzaCBjb2RlIGFuZCBwYXJ0aXRpb24gbG9j ayBJRCAqLwogCW5ld0hhc2ggPSBCdWZUYWJsZUhhc2hDb2RlKCZuZXdUYWcpOwpAQCAtNTM1LDcg KzUzMCw3IEBAIFByZWZldGNoU2hhcmVkQnVmZmVyKFNNZ3JSZWxhdGlvbiBzbWdyX3JlbG4sCiAJ CSAqIFRyeSB0byBpbml0aWF0ZSBhbiBhc3luY2hyb25vdXMgcmVhZC4gIFRoaXMgcmV0dXJucyBm YWxzZSBpbgogCQkgKiByZWNvdmVyeSBpZiB0aGUgcmVsYXRpb24gZmlsZSBkb2Vzbid0IGV4aXN0 LgogCQkgKi8KLQkJaWYgKHNtZ3JwcmVmZXRjaChzbWdyX3JlbG4sIGZvcmtOdW0sIGJsb2NrTnVt KSkKKwkJaWYgKHNtZ3JwcmVmZXRjaChzZmlsZSwgYmxvY2tOdW0pKQogCQkJcmVzdWx0LmluaXRp YXRlZF9pbyA9IHRydWU7CiAjZW5kaWYJCQkJCQkJLyogVVNFX1BSRUZFVENIICovCiAJfQpAQCAt NjAzLDEyICs1OTgsMTIgQEAgUHJlZmV0Y2hCdWZmZXIoUmVsYXRpb24gcmVsbiwgRm9ya051bWJl ciBmb3JrTnVtLCBCbG9ja051bWJlciBibG9ja051bSkKIAkJCQkJIGVycm1zZygiY2Fubm90IGFj Y2VzcyB0ZW1wb3JhcnkgdGFibGVzIG9mIG90aGVyIHNlc3Npb25zIikpKTsKIAogCQkvKiBwYXNz IGl0IG9mZiB0byBsb2NhbGJ1Zi5jICovCi0JCXJldHVybiBQcmVmZXRjaExvY2FsQnVmZmVyKFJl bGF0aW9uR2V0U21ncihyZWxuKSwgZm9ya051bSwgYmxvY2tOdW0pOworCQlyZXR1cm4gUHJlZmV0 Y2hMb2NhbEJ1ZmZlcihSZWxhdGlvbkdldFNtZ3IocmVsbiwgZm9ya051bSksIGJsb2NrTnVtKTsK IAl9CiAJZWxzZQogCXsKIAkJLyogcGFzcyBpdCB0byB0aGUgc2hhcmVkIGJ1ZmZlciB2ZXJzaW9u ICovCi0JCXJldHVybiBQcmVmZXRjaFNoYXJlZEJ1ZmZlcihSZWxhdGlvbkdldFNtZ3IocmVsbiks IGZvcmtOdW0sIGJsb2NrTnVtKTsKKwkJcmV0dXJuIFByZWZldGNoU2hhcmVkQnVmZmVyKFJlbGF0 aW9uR2V0U21ncihyZWxuLCBmb3JrTnVtKSwgYmxvY2tOdW0pOwogCX0KIH0KIApAQCAtNzc3LDgg Kzc3Miw5IEBAIFJlYWRCdWZmZXJFeHRlbmRlZChSZWxhdGlvbiByZWxuLCBGb3JrTnVtYmVyIGZv cmtOdW0sIEJsb2NrTnVtYmVyIGJsb2NrTnVtLAogCSAqIG1pc3MuCiAJICovCiAJcGdzdGF0X2Nv dW50X2J1ZmZlcl9yZWFkKHJlbG4pOwotCWJ1ZiA9IFJlYWRCdWZmZXJfY29tbW9uKFJlbGF0aW9u R2V0U21ncihyZWxuKSwgcmVsbi0+cmRfcmVsLT5yZWxwZXJzaXN0ZW5jZSwKLQkJCQkJCQlmb3Jr TnVtLCBibG9ja051bSwgbW9kZSwgc3RyYXRlZ3ksICZoaXQpOworCWJ1ZiA9IFJlYWRCdWZmZXJf Y29tbW9uKFJlbGF0aW9uR2V0U21ncihyZWxuLCBmb3JrTnVtKSwKKwkJCQkJCQlyZWxuLT5yZF9y ZWwtPnJlbHBlcnNpc3RlbmNlLAorCQkJCQkJCWJsb2NrTnVtLCBtb2RlLCBzdHJhdGVneSwgJmhp dCk7CiAJaWYgKGhpdCkKIAkJcGdzdGF0X2NvdW50X2J1ZmZlcl9oaXQocmVsbik7CiAJcmV0dXJu IGJ1ZjsKQEAgLTgwMiwxMyArNzk4LDI1IEBAIFJlYWRCdWZmZXJXaXRob3V0UmVsY2FjaGUoUmVs RmlsZUxvY2F0b3IgcmxvY2F0b3IsIEZvcmtOdW1iZXIgZm9ya051bSwKIHsKIAlib29sCQloaXQ7 CiAKLQlTTWdyUmVsYXRpb24gc21nciA9IHNtZ3JvcGVuKHJsb2NhdG9yLCBJbnZhbGlkQmFja2Vu ZElkKTsKKwlTTWdyRmlsZUhhbmRsZSBzZmlsZSA9IHNtZ3JvcGVuKHJsb2NhdG9yLCBJbnZhbGlk QmFja2VuZElkLCBmb3JrTnVtKTsKIAotCXJldHVybiBSZWFkQnVmZmVyX2NvbW1vbihzbWdyLCBw ZXJtYW5lbnQgPyBSRUxQRVJTSVNURU5DRV9QRVJNQU5FTlQgOgotCQkJCQkJCSBSRUxQRVJTSVNU RU5DRV9VTkxPR0dFRCwgZm9ya051bSwgYmxvY2tOdW0sCisJcmV0dXJuIFJlYWRCdWZmZXJfY29t bW9uKHNmaWxlLCBwZXJtYW5lbnQgPyBSRUxQRVJTSVNURU5DRV9QRVJNQU5FTlQgOgorCQkJCQkJ CSBSRUxQRVJTSVNURU5DRV9VTkxPR0dFRCwgYmxvY2tOdW0sCiAJCQkJCQkJIG1vZGUsIHN0cmF0 ZWd5LCAmaGl0KTsKIH0KIAorQnVmZmVyCitSZWFkQnVmZmVyV2l0aG91dFJlbGNhY2hlV2l0aEhp dChSZWxGaWxlTG9jYXRvciBybG9jYXRvciwgRm9ya051bWJlciBmb3JrTnVtLAorCQkJCQkJCQkg QmxvY2tOdW1iZXIgYmxvY2tOdW0sIFJlYWRCdWZmZXJNb2RlIG1vZGUsCisJCQkJCQkJCSBCdWZm ZXJBY2Nlc3NTdHJhdGVneSBzdHJhdGVneSwgYm9vbCBwZXJtYW5lbnQsIGJvb2wgKmhpdCkKK3sK KwlTTWdyRmlsZUhhbmRsZSBzZmlsZSA9IHNtZ3JvcGVuKHJsb2NhdG9yLCBJbnZhbGlkQmFja2Vu ZElkLCBmb3JrTnVtKTsKKworCXJldHVybiBSZWFkQnVmZmVyX2NvbW1vbihzZmlsZSwgcGVybWFu ZW50ID8gUkVMUEVSU0lTVEVOQ0VfUEVSTUFORU5UIDoKKwkJCQkJCQkgUkVMUEVSU0lTVEVOQ0Vf VU5MT0dHRUQsIGJsb2NrTnVtLAorCQkJCQkJCSBtb2RlLCBzdHJhdGVneSwgaGl0KTsKK30KKwog CiAvKgogICogUmVhZEJ1ZmZlcl9jb21tb24gLS0gY29tbW9uIGxvZ2ljIGZvciBhbGwgUmVhZEJ1 ZmZlciB2YXJpYW50cwpAQCAtODE2LDcgKzgyNCw3IEBAIFJlYWRCdWZmZXJXaXRob3V0UmVsY2Fj aGUoUmVsRmlsZUxvY2F0b3IgcmxvY2F0b3IsIEZvcmtOdW1iZXIgZm9ya051bSwKICAqICpoaXQg aXMgc2V0IHRvIHRydWUgaWYgdGhlIHJlcXVlc3Qgd2FzIHNhdGlzZmllZCBmcm9tIHNoYXJlZCBi dWZmZXIgY2FjaGUuCiAgKi8KIHN0YXRpYyBCdWZmZXIKLVJlYWRCdWZmZXJfY29tbW9uKFNNZ3JS ZWxhdGlvbiBzbWdyLCBjaGFyIHJlbHBlcnNpc3RlbmNlLCBGb3JrTnVtYmVyIGZvcmtOdW0sCitS ZWFkQnVmZmVyX2NvbW1vbihTTWdyRmlsZUhhbmRsZSBzZmlsZSwgY2hhciByZWxwZXJzaXN0ZW5j ZSwKIAkJCQkgIEJsb2NrTnVtYmVyIGJsb2NrTnVtLCBSZWFkQnVmZmVyTW9kZSBtb2RlLAogCQkJ CSAgQnVmZmVyQWNjZXNzU3RyYXRlZ3kgc3RyYXRlZ3ksIGJvb2wgKmhpdCkKIHsKQEAgLTgyNCw3 ICs4MzIsNyBAQCBSZWFkQnVmZmVyX2NvbW1vbihTTWdyUmVsYXRpb24gc21nciwgY2hhciByZWxw ZXJzaXN0ZW5jZSwgRm9ya051bWJlciBmb3JrTnVtLAogCUJsb2NrCQlidWZCbG9jazsKIAlib29s CQlmb3VuZDsKIAlib29sCQlpc0V4dGVuZDsKLQlib29sCQlpc0xvY2FsQnVmID0gU21ncklzVGVt cChzbWdyKTsKKwlib29sCQlpc0xvY2FsQnVmID0gU21ncklzVGVtcChzZmlsZSk7CiAKIAkqaGl0 ID0gZmFsc2U7CiAKQEAgLTgzMywyOSArODQxLDMwIEBAIFJlYWRCdWZmZXJfY29tbW9uKFNNZ3JS ZWxhdGlvbiBzbWdyLCBjaGFyIHJlbHBlcnNpc3RlbmNlLCBGb3JrTnVtYmVyIGZvcmtOdW0sCiAK IAlpc0V4dGVuZCA9IChibG9ja051bSA9PSBQX05FVyk7CiAKLQlUUkFDRV9QT1NUR1JFU1FMX0JV RkZFUl9SRUFEX1NUQVJUKGZvcmtOdW0sIGJsb2NrTnVtLAotCQkJCQkJCQkJICAgc21nci0+c21n cl9ybG9jYXRvci5sb2NhdG9yLnNwY09pZCwKLQkJCQkJCQkJCSAgIHNtZ3ItPnNtZ3JfcmxvY2F0 b3IubG9jYXRvci5kYk9pZCwKLQkJCQkJCQkJCSAgIHNtZ3ItPnNtZ3JfcmxvY2F0b3IubG9jYXRv ci5yZWxOdW1iZXIsCi0JCQkJCQkJCQkgICBzbWdyLT5zbWdyX3Jsb2NhdG9yLmJhY2tlbmQsCisJ VFJBQ0VfUE9TVEdSRVNRTF9CVUZGRVJfUkVBRF9TVEFSVChzbWdyLT5zbWdyX2xvY2F0b3IuZm9y a051bSwKKwkJCQkJCQkJCSAgIGJsb2NrTnVtLAorCQkJCQkJCQkJICAgc21nci0+c21ncl9sb2Nh dG9yLmxvY2F0b3Iuc3BjT2lkLAorCQkJCQkJCQkJICAgc21nci0+c21ncl9sb2NhdG9yLmxvY2F0 b3IuZGJPaWQsCisJCQkJCQkJCQkgICBzbWdyLT5zbWdyX2xvY2F0b3IubG9jYXRvci5yZWxOdW1i ZXIsCisJCQkJCQkJCQkgICBzbWdyLT5zbWdyX2xvY2F0b3IuYmFja2VuZCwKIAkJCQkJCQkJCSAg IGlzRXh0ZW5kKTsKIAogCS8qIFN1YnN0aXR1dGUgcHJvcGVyIGJsb2NrIG51bWJlciBpZiBjYWxs ZXIgYXNrZWQgZm9yIFBfTkVXICovCiAJaWYgKGlzRXh0ZW5kKQogCXsKLQkJYmxvY2tOdW0gPSBz bWdybmJsb2NrcyhzbWdyLCBmb3JrTnVtKTsKKwkJYmxvY2tOdW0gPSBzbWdybmJsb2NrcyhzZmls ZSk7CiAJCS8qIEZhaWwgaWYgcmVsYXRpb24gaXMgYWxyZWFkeSBhdCBtYXhpbXVtIHBvc3NpYmxl IGxlbmd0aCAqLwogCQlpZiAoYmxvY2tOdW0gPT0gUF9ORVcpCiAJCQllcmVwb3J0KEVSUk9SLAog CQkJCQkoZXJyY29kZShFUlJDT0RFX1BST0dSQU1fTElNSVRfRVhDRUVERUQpLAogCQkJCQkgZXJy bXNnKCJjYW5ub3QgZXh0ZW5kIHJlbGF0aW9uICVzIGJleW9uZCAldSBibG9ja3MiLAotCQkJCQkJ CXJlbHBhdGgoc21nci0+c21ncl9ybG9jYXRvciwgZm9ya051bSksCisJCQkJCQkJc21ncmZpbGVw YXRoKHNmaWxlLT5zbWdyX2xvY2F0b3IpLAogCQkJCQkJCVBfTkVXKSkpOwogCX0KIAogCWlmIChp c0xvY2FsQnVmKQogCXsKLQkJYnVmSGRyID0gTG9jYWxCdWZmZXJBbGxvYyhzbWdyLCBmb3JrTnVt LCBibG9ja051bSwgJmZvdW5kKTsKKwkJYnVmSGRyID0gTG9jYWxCdWZmZXJBbGxvYyhzZmlsZSwg YmxvY2tOdW0sICZmb3VuZCk7CiAJCWlmIChmb3VuZCkKIAkJCXBnQnVmZmVyVXNhZ2UubG9jYWxf Ymxrc19oaXQrKzsKIAkJZWxzZSBpZiAoaXNFeHRlbmQpCkBAIC04NzAsNyArODc5LDcgQEAgUmVh ZEJ1ZmZlcl9jb21tb24oU01nclJlbGF0aW9uIHNtZ3IsIGNoYXIgcmVscGVyc2lzdGVuY2UsIEZv cmtOdW1iZXIgZm9ya051bSwKIAkJICogbG9va3VwIHRoZSBidWZmZXIuICBJT19JTl9QUk9HUkVT UyBpcyBzZXQgaWYgdGhlIHJlcXVlc3RlZCBibG9jayBpcwogCQkgKiBub3QgY3VycmVudGx5IGlu IG1lbW9yeS4KIAkJICovCi0JCWJ1ZkhkciA9IEJ1ZmZlckFsbG9jKHNtZ3IsIHJlbHBlcnNpc3Rl bmNlLCBmb3JrTnVtLCBibG9ja051bSwKKwkJYnVmSGRyID0gQnVmZmVyQWxsb2Moc2ZpbGUsIHJl bHBlcnNpc3RlbmNlLCBibG9ja051bSwKIAkJCQkJCQkgc3RyYXRlZ3ksICZmb3VuZCk7CiAJCWlm IChmb3VuZCkKIAkJCXBnQnVmZmVyVXNhZ2Uuc2hhcmVkX2Jsa3NfaGl0Kys7CkBAIC04OTUsMTEg KzkwNCwxMiBAQCBSZWFkQnVmZmVyX2NvbW1vbihTTWdyUmVsYXRpb24gc21nciwgY2hhciByZWxw ZXJzaXN0ZW5jZSwgRm9ya051bWJlciBmb3JrTnVtLAogCQkJaWYgKFZhY3V1bUNvc3RBY3RpdmUp CiAJCQkJVmFjdXVtQ29zdEJhbGFuY2UgKz0gVmFjdXVtQ29zdFBhZ2VIaXQ7CiAKLQkJCVRSQUNF X1BPU1RHUkVTUUxfQlVGRkVSX1JFQURfRE9ORShmb3JrTnVtLCBibG9ja051bSwKLQkJCQkJCQkJ CQkJICBzbWdyLT5zbWdyX3Jsb2NhdG9yLmxvY2F0b3Iuc3BjT2lkLAotCQkJCQkJCQkJCQkgIHNt Z3ItPnNtZ3JfcmxvY2F0b3IubG9jYXRvci5kYk9pZCwKLQkJCQkJCQkJCQkJICBzbWdyLT5zbWdy X3Jsb2NhdG9yLmxvY2F0b3IucmVsTnVtYmVyLAotCQkJCQkJCQkJCQkgIHNtZ3ItPnNtZ3Jfcmxv Y2F0b3IuYmFja2VuZCwKKwkJCVRSQUNFX1BPU1RHUkVTUUxfQlVGRkVSX1JFQURfRE9ORShzZmls ZS0+c21ncl9mb3JrbnVtLAorCQkJCQkJCQkJCQkgIGJsb2NrTnVtLAorCQkJCQkJCQkJCQkgIHNm aWxlLT5zbWdyX3Jsb2NhdG9yLmxvY2F0b3Iuc3BjT2lkLAorCQkJCQkJCQkJCQkgIHNmaWxlLT5z bWdyX3Jsb2NhdG9yLmxvY2F0b3IuZGJPaWQsCisJCQkJCQkJCQkJCSAgc2ZpbGUtPnNtZ3Jfcmxv Y2F0b3IubG9jYXRvci5yZWxOdW1iZXIsCisJCQkJCQkJCQkJCSAgc2ZpbGUtPnNtZ3JfcmxvY2F0 b3IuYmFja2VuZCwKIAkJCQkJCQkJCQkJICBpc0V4dGVuZCwKIAkJCQkJCQkJCQkJICBmb3VuZCk7 CiAKQEAgLTkzNiw3ICs5NDYsNyBAQCBSZWFkQnVmZmVyX2NvbW1vbihTTWdyUmVsYXRpb24gc21n ciwgY2hhciByZWxwZXJzaXN0ZW5jZSwgRm9ya051bWJlciBmb3JrTnVtLAogCQlpZiAoIVBhZ2VJ c05ldygoUGFnZSkgYnVmQmxvY2spKQogCQkJZXJlcG9ydChFUlJPUiwKIAkJCQkJKGVycm1zZygi dW5leHBlY3RlZCBkYXRhIGJleW9uZCBFT0YgaW4gYmxvY2sgJXUgb2YgcmVsYXRpb24gJXMiLAot CQkJCQkJCWJsb2NrTnVtLCByZWxwYXRoKHNtZ3ItPnNtZ3JfcmxvY2F0b3IsIGZvcmtOdW0pKSwK KwkJCQkJCQlibG9ja051bSwgc21ncmZpbGVwYXRoKHNmaWxlLT5zbWdyX2xvY2F0b3IpKSwKIAkJ CQkJIGVycmhpbnQoIlRoaXMgaGFzIGJlZW4gc2VlbiB0byBvY2N1ciB3aXRoIGJ1Z2d5IGtlcm5l bHM7IGNvbnNpZGVyIHVwZGF0aW5nIHlvdXIgc3lzdGVtLiIpKSk7CiAKIAkJLyoKQEAgLTk5Myw3 ICsxMDAzLDcgQEAgUmVhZEJ1ZmZlcl9jb21tb24oU01nclJlbGF0aW9uIHNtZ3IsIGNoYXIgcmVs cGVyc2lzdGVuY2UsIEZvcmtOdW1iZXIgZm9ya051bSwKIAkJLyogbmV3IGJ1ZmZlcnMgYXJlIHpl cm8tZmlsbGVkICovCiAJCU1lbVNldCgoY2hhciAqKSBidWZCbG9jaywgMCwgQkxDS1NaKTsKIAkJ LyogZG9uJ3Qgc2V0IGNoZWNrc3VtIGZvciBhbGwtemVybyBwYWdlICovCi0JCXNtZ3JleHRlbmQo c21nciwgZm9ya051bSwgYmxvY2tOdW0sIChjaGFyICopIGJ1ZkJsb2NrLCBmYWxzZSk7CisJCXNt Z3JleHRlbmQoc2ZpbGUsIGJsb2NrTnVtLCAoY2hhciAqKSBidWZCbG9jaywgZmFsc2UpOwogCiAJ CS8qCiAJCSAqIE5COiB3ZSdyZSAqbm90KiBkb2luZyBhIFNjaGVkdWxlQnVmZmVyVGFnRm9yV3Jp dGViYWNrIGhlcmU7CkBAIC0xMDE4LDcgKzEwMjgsNyBAQCBSZWFkQnVmZmVyX2NvbW1vbihTTWdy UmVsYXRpb24gc21nciwgY2hhciByZWxwZXJzaXN0ZW5jZSwgRm9ya051bWJlciBmb3JrTnVtLAog CQkJaWYgKHRyYWNrX2lvX3RpbWluZykKIAkJCQlJTlNUUl9USU1FX1NFVF9DVVJSRU5UKGlvX3N0 YXJ0KTsKIAotCQkJc21ncnJlYWQoc21nciwgZm9ya051bSwgYmxvY2tOdW0sIChjaGFyICopIGJ1 ZkJsb2NrKTsKKwkJCXNtZ3JyZWFkKHNmaWxlLCBibG9ja051bSwgKGNoYXIgKikgYnVmQmxvY2sp OwogCiAJCQlpZiAodHJhY2tfaW9fdGltaW5nKQogCQkJewpAQCAtMTAyOSw3ICsxMDM5LDggQEAg UmVhZEJ1ZmZlcl9jb21tb24oU01nclJlbGF0aW9uIHNtZ3IsIGNoYXIgcmVscGVyc2lzdGVuY2Us IEZvcmtOdW1iZXIgZm9ya051bSwKIAkJCX0KIAogCQkJLyogY2hlY2sgZm9yIGdhcmJhZ2UgZGF0 YSAqLwotCQkJaWYgKCFQYWdlSXNWZXJpZmllZEV4dGVuZGVkKChQYWdlKSBidWZCbG9jaywgYmxv Y2tOdW0sCisJCQlpZiAoQnVmZmVySGFzU3RhbmRhcmRQYWdlKGJ1ZkhkcikgJiYKKwkJCQkhUGFn ZUlzVmVyaWZpZWRFeHRlbmRlZCgoUGFnZSkgYnVmQmxvY2ssIGJsb2NrTnVtLAogCQkJCQkJCQkJ CVBJVl9MT0dfV0FSTklORyB8IFBJVl9SRVBPUlRfU1RBVCkpCiAJCQl7CiAJCQkJaWYgKG1vZGUg PT0gUkJNX1pFUk9fT05fRVJST1IgfHwgemVyb19kYW1hZ2VkX3BhZ2VzKQpAQCAtMTAzOCw3ICsx MDQ5LDcgQEAgUmVhZEJ1ZmZlcl9jb21tb24oU01nclJlbGF0aW9uIHNtZ3IsIGNoYXIgcmVscGVy c2lzdGVuY2UsIEZvcmtOdW1iZXIgZm9ya051bSwKIAkJCQkJCQkoZXJyY29kZShFUlJDT0RFX0RB VEFfQ09SUlVQVEVEKSwKIAkJCQkJCQkgZXJybXNnKCJpbnZhbGlkIHBhZ2UgaW4gYmxvY2sgJXUg b2YgcmVsYXRpb24gJXM7IHplcm9pbmcgb3V0IHBhZ2UiLAogCQkJCQkJCQkJYmxvY2tOdW0sCi0J CQkJCQkJCQlyZWxwYXRoKHNtZ3ItPnNtZ3JfcmxvY2F0b3IsIGZvcmtOdW0pKSkpOworCQkJCQkJ CQkJc21ncmZpbGVwYXRoKHNmaWxlLT5zbWdyX2xvY2F0b3IpKSkpOwogCQkJCQlNZW1TZXQoKGNo YXIgKikgYnVmQmxvY2ssIDAsIEJMQ0tTWik7CiAJCQkJfQogCQkJCWVsc2UKQEAgLTEwNDYsNyAr MTA1Nyw3IEBAIFJlYWRCdWZmZXJfY29tbW9uKFNNZ3JSZWxhdGlvbiBzbWdyLCBjaGFyIHJlbHBl cnNpc3RlbmNlLCBGb3JrTnVtYmVyIGZvcmtOdW0sCiAJCQkJCQkJKGVycmNvZGUoRVJSQ09ERV9E QVRBX0NPUlJVUFRFRCksCiAJCQkJCQkJIGVycm1zZygiaW52YWxpZCBwYWdlIGluIGJsb2NrICV1 IG9mIHJlbGF0aW9uICVzIiwKIAkJCQkJCQkJCWJsb2NrTnVtLAotCQkJCQkJCQkJcmVscGF0aChz bWdyLT5zbWdyX3Jsb2NhdG9yLCBmb3JrTnVtKSkpKTsKKwkJCQkJCQkJCXNtZ3JmaWxlcGF0aChz ZmlsZS0+c21ncl9sb2NhdG9yKSkpKTsKIAkJCX0KIAkJfQogCX0KQEAgLTEwODUsMTEgKzEwOTYs MTIgQEAgUmVhZEJ1ZmZlcl9jb21tb24oU01nclJlbGF0aW9uIHNtZ3IsIGNoYXIgcmVscGVyc2lz dGVuY2UsIEZvcmtOdW1iZXIgZm9ya051bSwKIAlpZiAoVmFjdXVtQ29zdEFjdGl2ZSkKIAkJVmFj dXVtQ29zdEJhbGFuY2UgKz0gVmFjdXVtQ29zdFBhZ2VNaXNzOwogCi0JVFJBQ0VfUE9TVEdSRVNR TF9CVUZGRVJfUkVBRF9ET05FKGZvcmtOdW0sIGJsb2NrTnVtLAotCQkJCQkJCQkJICBzbWdyLT5z bWdyX3Jsb2NhdG9yLmxvY2F0b3Iuc3BjT2lkLAotCQkJCQkJCQkJICBzbWdyLT5zbWdyX3Jsb2Nh dG9yLmxvY2F0b3IuZGJPaWQsCi0JCQkJCQkJCQkgIHNtZ3ItPnNtZ3JfcmxvY2F0b3IubG9jYXRv ci5yZWxOdW1iZXIsCi0JCQkJCQkJCQkgIHNtZ3ItPnNtZ3JfcmxvY2F0b3IuYmFja2VuZCwKKwlU UkFDRV9QT1NUR1JFU1FMX0JVRkZFUl9SRUFEX0RPTkUoc2ZpbGUtPnNtZ3JfbG9jYXRvci5mb3Jr bnVtLAorCQkJCQkJCQkJICBibG9ja051bSwKKwkJCQkJCQkJCSAgc2ZpbGUtPnNtZ3JfbG9jYXRv ci5sb2NhdG9yLnNwY09pZCwKKwkJCQkJCQkJCSAgc2ZpbGUtPnNtZ3JfbG9jYXRvci5sb2NhdG9y LmRiT2lkLAorCQkJCQkJCQkJICBzZmlsZS0+c21ncl9sb2NhdG9yLmxvY2F0b3IucmVsTnVtYmVy LAorCQkJCQkJCQkJICBzZmlsZS0+c21ncl9sb2NhdG9yLmJhY2tlbmQsCiAJCQkJCQkJCQkgIGlz RXh0ZW5kLAogCQkJCQkJCQkJICBmb3VuZCk7CiAKQEAgLTExMTYsNyArMTEyOCw3IEBAIFJlYWRC dWZmZXJfY29tbW9uKFNNZ3JSZWxhdGlvbiBzbWdyLCBjaGFyIHJlbHBlcnNpc3RlbmNlLCBGb3Jr TnVtYmVyIGZvcmtOdW0sCiAgKiBObyBsb2NrcyBhcmUgaGVsZCBlaXRoZXIgYXQgZW50cnkgb3Ig ZXhpdC4KICAqLwogc3RhdGljIEJ1ZmZlckRlc2MgKgotQnVmZmVyQWxsb2MoU01nclJlbGF0aW9u IHNtZ3IsIGNoYXIgcmVscGVyc2lzdGVuY2UsIEZvcmtOdW1iZXIgZm9ya051bSwKK0J1ZmZlckFs bG9jKFNNZ3JGaWxlSGFuZGxlIHNmaWxlLCBjaGFyIHJlbHBlcnNpc3RlbmNlLAogCQkJQmxvY2tO dW1iZXIgYmxvY2tOdW0sCiAJCQlCdWZmZXJBY2Nlc3NTdHJhdGVneSBzdHJhdGVneSwKIAkJCWJv b2wgKmZvdW5kUHRyKQpAQCAtMTEzNCw3ICsxMTQ2LDcgQEAgQnVmZmVyQWxsb2MoU01nclJlbGF0 aW9uIHNtZ3IsIGNoYXIgcmVscGVyc2lzdGVuY2UsIEZvcmtOdW1iZXIgZm9ya051bSwKIAl1aW50 MzIJCWJ1Zl9zdGF0ZTsKIAogCS8qIGNyZWF0ZSBhIHRhZyBzbyB3ZSBjYW4gbG9va3VwIHRoZSBi dWZmZXIgKi8KLQlJTklUX0JVRkZFUlRBRyhuZXdUYWcsIHNtZ3ItPnNtZ3JfcmxvY2F0b3IubG9j YXRvciwgZm9ya051bSwgYmxvY2tOdW0pOworCUlOSVRfQlVGRkVSVEFHKG5ld1RhZywgc2ZpbGUt PnNtZ3JfbG9jYXRvci5sb2NhdG9yLCBzZmlsZS0+c21ncl9sb2NhdG9yLmZvcmtudW0sIGJsb2Nr TnVtKTsKIAogCS8qIGRldGVybWluZSBpdHMgaGFzaCBjb2RlIGFuZCBwYXJ0aXRpb24gbG9jayBJ RCAqLwogCW5ld0hhc2ggPSBCdWZUYWJsZUhhc2hDb2RlKCZuZXdUYWcpOwpAQCAtMTI2NCwxMCAr MTI3NiwxMSBAQCBCdWZmZXJBbGxvYyhTTWdyUmVsYXRpb24gc21nciwgY2hhciByZWxwZXJzaXN0 ZW5jZSwgRm9ya051bWJlciBmb3JrTnVtLAogCQkJCX0KIAogCQkJCS8qIE9LLCBkbyB0aGUgSS9P ICovCi0JCQkJVFJBQ0VfUE9TVEdSRVNRTF9CVUZGRVJfV1JJVEVfRElSVFlfU1RBUlQoZm9ya051 bSwgYmxvY2tOdW0sCi0JCQkJCQkJCQkJCQkJCSAgc21nci0+c21ncl9ybG9jYXRvci5sb2NhdG9y LnNwY09pZCwKLQkJCQkJCQkJCQkJCQkJICBzbWdyLT5zbWdyX3Jsb2NhdG9yLmxvY2F0b3IuZGJP aWQsCi0JCQkJCQkJCQkJCQkJCSAgc21nci0+c21ncl9ybG9jYXRvci5sb2NhdG9yLnJlbE51bWJl cik7CisJCQkJVFJBQ0VfUE9TVEdSRVNRTF9CVUZGRVJfV1JJVEVfRElSVFlfU1RBUlQoc2ZpbGUt PnNtZ3JfbG9jYXRvci5mb3JrbnVtLAorCQkJCQkJCQkJCQkJCQkgIGJsb2NrTnVtLAorCQkJCQkJ CQkJCQkJCQkgIHNmaWxlLT5zbWdyX2xvY2F0b3IubG9jYXRvci5zcGNPaWQsCisJCQkJCQkJCQkJ CQkJCSAgc2ZpbGUtPnNtZ3JfbG9jYXRvci5sb2NhdG9yLmRiT2lkLAorCQkJCQkJCQkJCQkJCQkg IHNmaWxlLT5zbWdyX2xvY2F0b3IubG9jYXRvci5yZWxOdW1iZXIpOwogCiAJCQkJRmx1c2hCdWZm ZXIoYnVmLCBOVUxMKTsKIAkJCQlMV0xvY2tSZWxlYXNlKEJ1ZmZlckRlc2NyaXB0b3JHZXRDb250 ZW50TG9jayhidWYpKTsKQEAgLTEyNzUsMTAgKzEyODgsMTEgQEAgQnVmZmVyQWxsb2MoU01nclJl bGF0aW9uIHNtZ3IsIGNoYXIgcmVscGVyc2lzdGVuY2UsIEZvcmtOdW1iZXIgZm9ya051bSwKIAkJ CQlTY2hlZHVsZUJ1ZmZlclRhZ0ZvcldyaXRlYmFjaygmQmFja2VuZFdyaXRlYmFja0NvbnRleHQs CiAJCQkJCQkJCQkJCSAgJmJ1Zi0+dGFnKTsKIAotCQkJCVRSQUNFX1BPU1RHUkVTUUxfQlVGRkVS X1dSSVRFX0RJUlRZX0RPTkUoZm9ya051bSwgYmxvY2tOdW0sCi0JCQkJCQkJCQkJCQkJCSBzbWdy LT5zbWdyX3Jsb2NhdG9yLmxvY2F0b3Iuc3BjT2lkLAotCQkJCQkJCQkJCQkJCQkgc21nci0+c21n cl9ybG9jYXRvci5sb2NhdG9yLmRiT2lkLAotCQkJCQkJCQkJCQkJCQkgc21nci0+c21ncl9ybG9j YXRvci5sb2NhdG9yLnJlbE51bWJlcik7CisJCQkJVFJBQ0VfUE9TVEdSRVNRTF9CVUZGRVJfV1JJ VEVfRElSVFlfRE9ORShzZmlsZS0+c21ncl9sb2NhdG9yLmZvcmtudW0sCisJCQkJCQkJCQkJCQkJ CSBibG9ja051bSwKKwkJCQkJCQkJCQkJCQkJIHNmaWxlLT5zbWdyX2xvY2F0b3IubG9jYXRvci5z cGNPaWQsCisJCQkJCQkJCQkJCQkJCSBzZmlsZS0+c21ncl9sb2NhdG9yLmxvY2F0b3IuZGJPaWQs CisJCQkJCQkJCQkJCQkJCSBzZmlsZS0+c21ncl9sb2NhdG9yLmxvY2F0b3IucmVsTnVtYmVyKTsK IAkJCX0KIAkJCWVsc2UKIAkJCXsKQEAgLTE0MzQsNyArMTQ0OCw3IEBAIEJ1ZmZlckFsbG9jKFNN Z3JSZWxhdGlvbiBzbWdyLCBjaGFyIHJlbHBlcnNpc3RlbmNlLCBGb3JrTnVtYmVyIGZvcmtOdW0s CiAJYnVmX3N0YXRlICY9IH4oQk1fVkFMSUQgfCBCTV9ESVJUWSB8IEJNX0pVU1RfRElSVElFRCB8 CiAJCQkJICAgQk1fQ0hFQ0tQT0lOVF9ORUVERUQgfCBCTV9JT19FUlJPUiB8IEJNX1BFUk1BTkVO VCB8CiAJCQkJICAgQlVGX1VTQUdFQ09VTlRfTUFTSyk7Ci0JaWYgKHJlbHBlcnNpc3RlbmNlID09 IFJFTFBFUlNJU1RFTkNFX1BFUk1BTkVOVCB8fCBmb3JrTnVtID09IElOSVRfRk9SS05VTSkKKwlp ZiAocmVscGVyc2lzdGVuY2UgPT0gUkVMUEVSU0lTVEVOQ0VfUEVSTUFORU5UIHx8IHNmaWxlLT5z bWdyX2xvY2F0b3IuZm9ya251bSA9PSBJTklUX0ZPUktOVU0pCiAJCWJ1Zl9zdGF0ZSB8PSBCTV9U QUdfVkFMSUQgfCBCTV9QRVJNQU5FTlQgfCBCVUZfVVNBR0VDT1VOVF9PTkU7CiAJZWxzZQogCQli dWZfc3RhdGUgfD0gQk1fVEFHX1ZBTElEIHwgQlVGX1VTQUdFQ09VTlRfT05FOwpAQCAtMTQ1MCw2 ICsxNDY0LDcgQEAgQnVmZmVyQWxsb2MoU01nclJlbGF0aW9uIHNtZ3IsIGNoYXIgcmVscGVyc2lz dGVuY2UsIEZvcmtOdW1iZXIgZm9ya051bSwKIAogCUxXTG9ja1JlbGVhc2UobmV3UGFydGl0aW9u TG9jayk7CiAKKwogCS8qCiAJICogQnVmZmVyIGNvbnRlbnRzIGFyZSBjdXJyZW50bHkgaW52YWxp ZC4gIFRyeSB0byBvYnRhaW4gdGhlIHJpZ2h0IHRvCiAJICogc3RhcnQgSS9PLiAgSWYgU3RhcnRC dWZmZXJJTyByZXR1cm5zIGZhbHNlLCB0aGVuIHNvbWVvbmUgZWxzZSBtYW5hZ2VkCkBAIC0yODIy LDcgKzI4MzcsNyBAQCBCdWZmZXJHZXRUYWcoQnVmZmVyIGJ1ZmZlciwgUmVsRmlsZUxvY2F0b3Ig KnJsb2NhdG9yLCBGb3JrTnVtYmVyICpmb3JrbnVtLAogICogYXMgdGhlIHNlY29uZCBwYXJhbWV0 ZXIuICBJZiBub3QsIHBhc3MgTlVMTC4KICAqLwogc3RhdGljIHZvaWQKLUZsdXNoQnVmZmVyKEJ1 ZmZlckRlc2MgKmJ1ZiwgU01nclJlbGF0aW9uIHJlbG4pCitGbHVzaEJ1ZmZlcihCdWZmZXJEZXNj ICpidWYsIFNNZ3JGaWxlSGFuZGxlIHNmaWxlKQogewogCVhMb2dSZWNQdHIJcmVjcHRyOwogCUVy cm9yQ29udGV4dENhbGxiYWNrIGVycmNhbGxiYWNrOwpAQCAtMjg0NywxNCArMjg2MiwxNCBAQCBG bHVzaEJ1ZmZlcihCdWZmZXJEZXNjICpidWYsIFNNZ3JSZWxhdGlvbiByZWxuKQogCWVycm9yX2Nv bnRleHRfc3RhY2sgPSAmZXJyY2FsbGJhY2s7CiAKIAkvKiBGaW5kIHNtZ3IgcmVsYXRpb24gZm9y IGJ1ZmZlciAqLwotCWlmIChyZWxuID09IE5VTEwpCi0JCXJlbG4gPSBzbWdyb3BlbihidWYtPnRh Zy5ybG9jYXRvciwgSW52YWxpZEJhY2tlbmRJZCk7CisJaWYgKHNmaWxlID09IE5VTEwpCisJCXNm aWxlID0gc21ncm9wZW4oYnVmLT50YWcucmxvY2F0b3IsIEludmFsaWRCYWNrZW5kSWQsIGJ1Zi0+ dGFnLmZvcmtOdW0pOwogCi0JVFJBQ0VfUE9TVEdSRVNRTF9CVUZGRVJfRkxVU0hfU1RBUlQoYnVm LT50YWcuZm9ya051bSwKKwlUUkFDRV9QT1NUR1JFU1FMX0JVRkZFUl9GTFVTSF9TVEFSVChzZmls ZS0+c21ncl9sb2NhdG9yLmZvcmtudW0sCiAJCQkJCQkJCQkJYnVmLT50YWcuYmxvY2tOdW0sCi0J CQkJCQkJCQkJcmVsbi0+c21ncl9ybG9jYXRvci5sb2NhdG9yLnNwY09pZCwKLQkJCQkJCQkJCQly ZWxuLT5zbWdyX3Jsb2NhdG9yLmxvY2F0b3IuZGJPaWQsCi0JCQkJCQkJCQkJcmVsbi0+c21ncl9y bG9jYXRvci5sb2NhdG9yLnJlbE51bWJlcik7CisJCQkJCQkJCQkJc2ZpbGUtPnNtZ3JfbG9jYXRv ci5sb2NhdG9yLnNwY09pZCwKKwkJCQkJCQkJCQlzZmlsZS0+c21ncl9sb2NhdG9yLmxvY2F0b3Iu ZGJPaWQsCisJCQkJCQkJCQkJc2ZpbGUtPnNtZ3JfbG9jYXRvci5sb2NhdG9yLnJlbE51bWJlcik7 CiAKIAlidWZfc3RhdGUgPSBMb2NrQnVmSGRyKGJ1Zik7CiAKQEAgLTI5MDgsOCArMjkyMyw3IEBA IEZsdXNoQnVmZmVyKEJ1ZmZlckRlc2MgKmJ1ZiwgU01nclJlbGF0aW9uIHJlbG4pCiAJLyoKIAkg KiBidWZUb1dyaXRlIGlzIGVpdGhlciB0aGUgc2hhcmVkIGJ1ZmZlciBvciBhIGNvcHksIGFzIGFw cHJvcHJpYXRlLgogCSAqLwotCXNtZ3J3cml0ZShyZWxuLAotCQkJICBidWYtPnRhZy5mb3JrTnVt LAorCXNtZ3J3cml0ZShzZmlsZSwKIAkJCSAgYnVmLT50YWcuYmxvY2tOdW0sCiAJCQkgIGJ1ZlRv V3JpdGUsCiAJCQkgIGZhbHNlKTsKQEAgLTI5MzAsMTEgKzI5NDQsMTEgQEAgRmx1c2hCdWZmZXIo QnVmZmVyRGVzYyAqYnVmLCBTTWdyUmVsYXRpb24gcmVsbikKIAkgKi8KIAlUZXJtaW5hdGVCdWZm ZXJJTyhidWYsIHRydWUsIDApOwogCi0JVFJBQ0VfUE9TVEdSRVNRTF9CVUZGRVJfRkxVU0hfRE9O RShidWYtPnRhZy5mb3JrTnVtLAorCVRSQUNFX1BPU1RHUkVTUUxfQlVGRkVSX0ZMVVNIX0RPTkUo c2ZpbGUtPnNtZ3JfbG9jYXRvci5mb3JrbnVtLAogCQkJCQkJCQkJICAgYnVmLT50YWcuYmxvY2tO dW0sCi0JCQkJCQkJCQkgICByZWxuLT5zbWdyX3Jsb2NhdG9yLmxvY2F0b3Iuc3BjT2lkLAotCQkJ CQkJCQkJICAgcmVsbi0+c21ncl9ybG9jYXRvci5sb2NhdG9yLmRiT2lkLAotCQkJCQkJCQkJICAg cmVsbi0+c21ncl9ybG9jYXRvci5sb2NhdG9yLnJlbE51bWJlcik7CisJCQkJCQkJCQkgICBzZmls ZS0+c21ncl9sb2NhdG9yLmxvY2F0b3Iuc3BjT2lkLAorCQkJCQkJCQkJICAgc2ZpbGUtPnNtZ3Jf bG9jYXRvci5sb2NhdG9yLmRiT2lkLAorCQkJCQkJCQkJICAgc2ZpbGUtPnNtZ3JfbG9jYXRvci5s b2NhdG9yLnJlbE51bWJlcik7CiAKIAkvKiBQb3AgdGhlIGVycm9yIGNvbnRleHQgc3RhY2sgKi8K IAllcnJvcl9jb250ZXh0X3N0YWNrID0gZXJyY2FsbGJhY2sucHJldmlvdXM7CkBAIC0yOTY3LDcg KzI5ODEsNyBAQCBSZWxhdGlvbkdldE51bWJlck9mQmxvY2tzSW5Gb3JrKFJlbGF0aW9uIHJlbGF0 aW9uLCBGb3JrTnVtYmVyIGZvcmtOdW0pCiAJfQogCWVsc2UgaWYgKFJFTEtJTkRfSEFTX1NUT1JB R0UocmVsYXRpb24tPnJkX3JlbC0+cmVsa2luZCkpCiAJewotCQlyZXR1cm4gc21ncm5ibG9ja3Mo UmVsYXRpb25HZXRTbWdyKHJlbGF0aW9uKSwgZm9ya051bSk7CisJCXJldHVybiBzbWdybmJsb2Nr cyhSZWxhdGlvbkdldFNtZ3IocmVsYXRpb24sIGZvcmtOdW0pKTsKIAl9CiAJZWxzZQogCQlBc3Nl cnQoZmFsc2UpOwpAQCAtMzAyOSw3ICszMDQzLDcgQEAgQnVmZmVyR2V0TFNOQXRvbWljKEJ1ZmZl ciBidWZmZXIpCiAJQXNzZXJ0KEJ1ZmZlcklzUGlubmVkKGJ1ZmZlcikpOwogCiAJYnVmX3N0YXRl ID0gTG9ja0J1ZkhkcihidWZIZHIpOwotCWxzbiA9IFBhZ2VHZXRMU04ocGFnZSk7CisJCWxzbiA9 IFBhZ2VHZXRMU04ocGFnZSk7CiAJVW5sb2NrQnVmSGRyKGJ1ZkhkciwgYnVmX3N0YXRlKTsKIAog CXJldHVybiBsc247CkBAIC0zMDU3LDI2ICszMDcxLDIwIEBAIEJ1ZmZlckdldExTTkF0b21pYyhC dWZmZXIgYnVmZmVyKQogICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICAqLwogdm9pZAotRHJvcFJlbGF0aW9uQnVm ZmVycyhTTWdyUmVsYXRpb24gc21ncl9yZWxuLCBGb3JrTnVtYmVyICpmb3JrTnVtLAorRHJvcFJl bGF0aW9uQnVmZmVycyhSZWxGaWxlTG9jYXRvciBybG9jYXRvciwgQmFja2VuZElkIGJhY2tlbmQs IEZvcmtOdW1iZXIgKmZvcmtOdW0sCiAJCQkJCWludCBuZm9ya3MsIEJsb2NrTnVtYmVyICpmaXJz dERlbEJsb2NrKQogewogCWludAkJCWk7CiAJaW50CQkJajsKLQlSZWxGaWxlTG9jYXRvckJhY2tl bmQgcmxvY2F0b3I7CiAJQmxvY2tOdW1iZXIgbkZvcmtCbG9ja1tNQVhfRk9SS05VTV07CiAJdWlu dDY0CQluQmxvY2tzVG9JbnZhbGlkYXRlID0gMDsKIAotCXJsb2NhdG9yID0gc21ncl9yZWxuLT5z bWdyX3Jsb2NhdG9yOwotCiAJLyogSWYgaXQncyBhIGxvY2FsIHJlbGF0aW9uLCBpdCdzIGxvY2Fs YnVmLmMncyBwcm9ibGVtLiAqLwotCWlmIChSZWxGaWxlTG9jYXRvckJhY2tlbmRJc1RlbXAocmxv Y2F0b3IpKQorCWlmIChiYWNrZW5kID09IE15QmFja2VuZElkKQogCXsKLQkJaWYgKHJsb2NhdG9y LmJhY2tlbmQgPT0gTXlCYWNrZW5kSWQpCi0JCXsKLQkJCWZvciAoaiA9IDA7IGogPCBuZm9ya3M7 IGorKykKLQkJCQlEcm9wUmVsYXRpb25Mb2NhbEJ1ZmZlcnMocmxvY2F0b3IubG9jYXRvciwgZm9y a051bVtqXSwKLQkJCQkJCQkJCQkgZmlyc3REZWxCbG9ja1tqXSk7Ci0JCX0KKwkJZm9yIChqID0g MDsgaiA8IG5mb3JrczsgaisrKQorCQkJRHJvcFJlbGF0aW9uTG9jYWxCdWZmZXJzKHJsb2NhdG9y LCBmb3JrTnVtW2pdLAorCQkJCQkJCQkJIGZpcnN0RGVsQmxvY2tbal0pOwogCQlyZXR1cm47CiAJ fQogCkBAIC0zMTA1LDcgKzMxMTMsMTAgQEAgRHJvcFJlbGF0aW9uQnVmZmVycyhTTWdyUmVsYXRp b24gc21ncl9yZWxuLCBGb3JrTnVtYmVyICpmb3JrTnVtLAogCWZvciAoaSA9IDA7IGkgPCBuZm9y a3M7IGkrKykKIAl7CiAJCS8qIEdldCB0aGUgbnVtYmVyIG9mIGJsb2NrcyBmb3IgYSByZWxhdGlv bidzIGZvcmsgKi8KLQkJbkZvcmtCbG9ja1tpXSA9IHNtZ3JuYmxvY2tzX2NhY2hlZChzbWdyX3Jl bG4sIGZvcmtOdW1baV0pOworCQlTTWdyRmlsZUhhbmRsZSBzZmlsZTsKKworCQlzZmlsZSA9IHNt Z3JvcGVuKHJsb2NhdG9yLCBiYWNrZW5kLCBmb3JrTnVtW2ldKTsKKwkJbkZvcmtCbG9ja1tpXSA9 IHNtZ3JuYmxvY2tzX2NhY2hlZChzZmlsZSk7CiAKIAkJaWYgKG5Gb3JrQmxvY2tbaV0gPT0gSW52 YWxpZEJsb2NrTnVtYmVyKQogCQl7CkBAIC0zMTI1LDcgKzMxMzYsNyBAQCBEcm9wUmVsYXRpb25C dWZmZXJzKFNNZ3JSZWxhdGlvbiBzbWdyX3JlbG4sIEZvcmtOdW1iZXIgKmZvcmtOdW0sCiAJCW5C bG9ja3NUb0ludmFsaWRhdGUgPCBCVUZfRFJPUF9GVUxMX1NDQU5fVEhSRVNIT0xEKQogCXsKIAkJ Zm9yIChqID0gMDsgaiA8IG5mb3JrczsgaisrKQotCQkJRmluZEFuZERyb3BSZWxhdGlvbkJ1ZmZl cnMocmxvY2F0b3IubG9jYXRvciwgZm9ya051bVtqXSwKKwkJCUZpbmRBbmREcm9wUmVsYXRpb25C dWZmZXJzKHJsb2NhdG9yLCBmb3JrTnVtW2pdLAogCQkJCQkJCQkJICAgbkZvcmtCbG9ja1tqXSwg Zmlyc3REZWxCbG9ja1tqXSk7CiAJCXJldHVybjsKIAl9CkBAIC0zMTUxLDE0ICszMTYyLDE0IEBA IERyb3BSZWxhdGlvbkJ1ZmZlcnMoU01nclJlbGF0aW9uIHNtZ3JfcmVsbiwgRm9ya051bWJlciAq Zm9ya051bSwKIAkJICogV2UgY291bGQgY2hlY2sgZm9ya051bSBhbmQgYmxvY2tOdW0gYXMgd2Vs bCBhcyB0aGUgcmxvY2F0b3IsIGJ1dAogCQkgKiB0aGUgaW5jcmVtZW50YWwgd2luIGZyb20gZG9p bmcgc28gc2VlbXMgc21hbGwuCiAJCSAqLwotCQlpZiAoIVJlbEZpbGVMb2NhdG9yRXF1YWxzKGJ1 Zkhkci0+dGFnLnJsb2NhdG9yLCBybG9jYXRvci5sb2NhdG9yKSkKKwkJaWYgKCFSZWxGaWxlTG9j YXRvckVxdWFscyhidWZIZHItPnRhZy5ybG9jYXRvciwgcmxvY2F0b3IpKQogCQkJY29udGludWU7 CiAKIAkJYnVmX3N0YXRlID0gTG9ja0J1ZkhkcihidWZIZHIpOwogCiAJCWZvciAoaiA9IDA7IGog PCBuZm9ya3M7IGorKykKIAkJewotCQkJaWYgKFJlbEZpbGVMb2NhdG9yRXF1YWxzKGJ1Zkhkci0+ dGFnLnJsb2NhdG9yLCBybG9jYXRvci5sb2NhdG9yKSAmJgorCQkJaWYgKFJlbEZpbGVMb2NhdG9y RXF1YWxzKGJ1Zkhkci0+dGFnLnJsb2NhdG9yLCBybG9jYXRvcikgJiYKIAkJCQlidWZIZHItPnRh Zy5mb3JrTnVtID09IGZvcmtOdW1bal0gJiYKIAkJCQlidWZIZHItPnRhZy5ibG9ja051bSA+PSBm aXJzdERlbEJsb2NrW2pdKQogCQkJewpAQCAtMzE4MCwxMiArMzE5MSwxMSBAQCBEcm9wUmVsYXRp b25CdWZmZXJzKFNNZ3JSZWxhdGlvbiBzbWdyX3JlbG4sIEZvcmtOdW1iZXIgKmZvcmtOdW0sCiAg KgkJLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0KICAqLwogdm9pZAotRHJvcFJlbGF0aW9uc0FsbEJ1ZmZlcnMoU01nclJl bGF0aW9uICpzbWdyX3JlbG4sIGludCBubG9jYXRvcnMpCitEcm9wUmVsYXRpb25zQWxsQnVmZmVy cyhSZWxGaWxlTG9jYXRvckJhY2tlbmQgKnJsb2NhdG9ycywgaW50IG5sb2NhdG9ycykKIHsKIAlp bnQJCQlpOwogCWludAkJCWo7CiAJaW50CQkJbiA9IDA7Ci0JU01nclJlbGF0aW9uICpyZWxzOwog CUJsb2NrTnVtYmVyICgqYmxvY2spW01BWF9GT1JLTlVNICsgMV07CiAJdWludDY0CQluQmxvY2tz VG9JbnZhbGlkYXRlID0gMDsKIAlSZWxGaWxlTG9jYXRvciAqbG9jYXRvcnM7CkBAIC0zMTk1LDE4 ICszMjA1LDE4IEBAIERyb3BSZWxhdGlvbnNBbGxCdWZmZXJzKFNNZ3JSZWxhdGlvbiAqc21ncl9y ZWxuLCBpbnQgbmxvY2F0b3JzKQogCWlmIChubG9jYXRvcnMgPT0gMCkKIAkJcmV0dXJuOwogCi0J cmVscyA9IHBhbGxvYyhzaXplb2YoU01nclJlbGF0aW9uKSAqIG5sb2NhdG9ycyk7CS8qIG5vbi1s b2NhbCByZWxhdGlvbnMgKi8KKwlsb2NhdG9ycyA9IHBhbGxvYyhzaXplb2YoUmVsRmlsZUxvY2F0 b3IpICogbmxvY2F0b3JzKTsJLyogbm9uLWxvY2FsIHJlbGF0aW9ucyAqLwogCiAJLyogSWYgaXQn cyBhIGxvY2FsIHJlbGF0aW9uLCBpdCdzIGxvY2FsYnVmLmMncyBwcm9ibGVtLiAqLwogCWZvciAo aSA9IDA7IGkgPCBubG9jYXRvcnM7IGkrKykKIAl7Ci0JCWlmIChSZWxGaWxlTG9jYXRvckJhY2tl bmRJc1RlbXAoc21ncl9yZWxuW2ldLT5zbWdyX3Jsb2NhdG9yKSkKKwkJaWYgKHJsb2NhdG9yc1tp XS5iYWNrZW5kICE9IEludmFsaWRCYWNrZW5kSWQpCiAJCXsKLQkJCWlmIChzbWdyX3JlbG5baV0t PnNtZ3JfcmxvY2F0b3IuYmFja2VuZCA9PSBNeUJhY2tlbmRJZCkKLQkJCQlEcm9wUmVsYXRpb25B bGxMb2NhbEJ1ZmZlcnMoc21ncl9yZWxuW2ldLT5zbWdyX3Jsb2NhdG9yLmxvY2F0b3IpOworCQkJ aWYgKHJsb2NhdG9yc1tpXS5iYWNrZW5kID09IE15QmFja2VuZElkKQorCQkJCURyb3BSZWxhdGlv bkFsbExvY2FsQnVmZmVycyhybG9jYXRvcnNbaV0ubG9jYXRvcik7CiAJCX0KIAkJZWxzZQotCQkJ cmVsc1tuKytdID0gc21ncl9yZWxuW2ldOworCQkJbG9jYXRvcnNbbisrXSA9IHJsb2NhdG9yc1tp XS5sb2NhdG9yOwogCX0KIAogCS8qCkBAIC0zMjE1LDcgKzMyMjUsNyBAQCBEcm9wUmVsYXRpb25z QWxsQnVmZmVycyhTTWdyUmVsYXRpb24gKnNtZ3JfcmVsbiwgaW50IG5sb2NhdG9ycykKIAkgKi8K IAlpZiAobiA9PSAwKQogCXsKLQkJcGZyZWUocmVscyk7CisJCXBmcmVlKGxvY2F0b3JzKTsKIAkJ cmV0dXJuOwogCX0KIApAQCAtMzIzNSwxMiArMzI0NSwxMyBAQCBEcm9wUmVsYXRpb25zQWxsQnVm ZmVycyhTTWdyUmVsYXRpb24gKnNtZ3JfcmVsbiwgaW50IG5sb2NhdG9ycykKIAkJZm9yIChqID0g MDsgaiA8PSBNQVhfRk9SS05VTTsgaisrKQogCQl7CiAJCQkvKiBHZXQgdGhlIG51bWJlciBvZiBi bG9ja3MgZm9yIGEgcmVsYXRpb24ncyBmb3JrLiAqLwotCQkJYmxvY2tbaV1bal0gPSBzbWdybmJs b2Nrc19jYWNoZWQocmVsc1tpXSwgaik7CisJCQlTTWdyRmlsZUhhbmRsZSBzZmlsZSA9IHNtZ3Jv cGVuKGxvY2F0b3JzW2ldLCBJbnZhbGlkQmFja2VuZElkLCBqKTsKKwkJCWJsb2NrW2ldW2pdID0g c21ncm5ibG9ja3NfY2FjaGVkKHNmaWxlKTsKIAogCQkJLyogV2UgbmVlZCB0byBvbmx5IGNvbnNp ZGVyIHRoZSByZWxhdGlvbiBmb3JrcyB0aGF0IGV4aXN0cy4gKi8KIAkJCWlmIChibG9ja1tpXVtq XSA9PSBJbnZhbGlkQmxvY2tOdW1iZXIpCiAJCQl7Ci0JCQkJaWYgKCFzbWdyZXhpc3RzKHJlbHNb aV0sIGopKQorCQkJCWlmICghc21ncmV4aXN0cyhzZmlsZSkpCiAJCQkJCWNvbnRpbnVlOwogCQkJ CWNhY2hlZCA9IGZhbHNlOwogCQkJCWJyZWFrOwpAQCAtMzI2NiwyMCArMzI3NywxNyBAQCBEcm9w UmVsYXRpb25zQWxsQnVmZmVycyhTTWdyUmVsYXRpb24gKnNtZ3JfcmVsbiwgaW50IG5sb2NhdG9y cykKIAkJCQkJY29udGludWU7CiAKIAkJCQkvKiBkcm9wIGFsbCB0aGUgYnVmZmVycyBmb3IgYSBw YXJ0aWN1bGFyIHJlbGF0aW9uIGZvcmsgKi8KLQkJCQlGaW5kQW5kRHJvcFJlbGF0aW9uQnVmZmVy cyhyZWxzW2ldLT5zbWdyX3Jsb2NhdG9yLmxvY2F0b3IsCisJCQkJRmluZEFuZERyb3BSZWxhdGlv bkJ1ZmZlcnMobG9jYXRvcnNbaV0sCiAJCQkJCQkJCQkJICAgaiwgYmxvY2tbaV1bal0sIDApOwog CQkJfQogCQl9CiAKIAkJcGZyZWUoYmxvY2spOwotCQlwZnJlZShyZWxzKTsKKwkJcGZyZWUobG9j YXRvcnMpOwogCQlyZXR1cm47CiAJfQogCiAJcGZyZWUoYmxvY2spOwotCWxvY2F0b3JzID0gcGFs bG9jKHNpemVvZihSZWxGaWxlTG9jYXRvcikgKiBuKTsJLyogbm9uLWxvY2FsIHJlbGF0aW9ucyAq LwotCWZvciAoaSA9IDA7IGkgPCBuOyBpKyspCi0JCWxvY2F0b3JzW2ldID0gcmVsc1tpXS0+c21n cl9ybG9jYXRvci5sb2NhdG9yOwogCiAJLyoKIAkgKiBGb3IgbG93IG51bWJlciBvZiByZWxhdGlv bnMgdG8gZHJvcCBqdXN0IHVzZSBhIHNpbXBsZSB3YWxrIHRocm91Z2gsIHRvCkBAIC0zMzM2LDcg KzMzNDQsNiBAQCBEcm9wUmVsYXRpb25zQWxsQnVmZmVycyhTTWdyUmVsYXRpb24gKnNtZ3JfcmVs biwgaW50IG5sb2NhdG9ycykKIAl9CiAKIAlwZnJlZShsb2NhdG9ycyk7Ci0JcGZyZWUocmVscyk7 CiB9CiAKIC8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpAQCAtMzU0Myw4ICszNTUwLDcgQEAgRmx1c2hSZWxhdGlv bkJ1ZmZlcnMoUmVsYXRpb24gcmVsKQogCiAJCQkJUGFnZVNldENoZWNrc3VtSW5wbGFjZShsb2Nh bHBhZ2UsIGJ1Zkhkci0+dGFnLmJsb2NrTnVtKTsKIAotCQkJCXNtZ3J3cml0ZShSZWxhdGlvbkdl dFNtZ3IocmVsKSwKLQkJCQkJCSAgYnVmSGRyLT50YWcuZm9ya051bSwKKwkJCQlzbWdyd3JpdGUo UmVsYXRpb25HZXRTbWdyKHJlbCwgYnVmSGRyLT50YWcuZm9ya051bSksCiAJCQkJCQkgIGJ1Zkhk ci0+dGFnLmJsb2NrTnVtLAogCQkJCQkJICBsb2NhbHBhZ2UsCiAJCQkJCQkgIGZhbHNlKTsKQEAg LTM1ODQsNyArMzU5MCw3IEBAIEZsdXNoUmVsYXRpb25CdWZmZXJzKFJlbGF0aW9uIHJlbCkKIAkJ ewogCQkJUGluQnVmZmVyX0xvY2tlZChidWZIZHIpOwogCQkJTFdMb2NrQWNxdWlyZShCdWZmZXJE ZXNjcmlwdG9yR2V0Q29udGVudExvY2soYnVmSGRyKSwgTFdfU0hBUkVEKTsKLQkJCUZsdXNoQnVm ZmVyKGJ1ZkhkciwgUmVsYXRpb25HZXRTbWdyKHJlbCkpOworCQkJRmx1c2hCdWZmZXIoYnVmSGRy LCBSZWxhdGlvbkdldFNtZ3IocmVsLCBidWZIZHItPnRhZy5mb3JrTnVtKSk7CiAJCQlMV0xvY2tS ZWxlYXNlKEJ1ZmZlckRlc2NyaXB0b3JHZXRDb250ZW50TG9jayhidWZIZHIpKTsKIAkJCVVucGlu QnVmZmVyKGJ1ZkhkciwgdHJ1ZSk7CiAJCX0KQEAgLTM2MDMsMjUgKzM2MDksMjAgQEAgRmx1c2hS ZWxhdGlvbkJ1ZmZlcnMoUmVsYXRpb24gcmVsKQogICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICAqLwogdm9pZAot Rmx1c2hSZWxhdGlvbnNBbGxCdWZmZXJzKFNNZ3JSZWxhdGlvbiAqc21ncnMsIGludCBucmVscykK K0ZsdXNoUmVsYXRpb25zQWxsQnVmZmVycyhSZWxGaWxlTG9jYXRvciAqcmVscywgaW50IG5yZWxz KQogewogCWludAkJCWk7Ci0JU01nclNvcnRBcnJheSAqc3JlbHM7CisJUmVsRmlsZUxvY2F0b3Ig KmxvY2F0b3JzID0gTlVMTDsKIAlib29sCQl1c2VfYnNlYXJjaDsKIAogCWlmIChucmVscyA9PSAw KQogCQlyZXR1cm47CiAKIAkvKiBmaWxsLWluIGFycmF5IGZvciBxc29ydCAqLwotCXNyZWxzID0g cGFsbG9jKHNpemVvZihTTWdyU29ydEFycmF5KSAqIG5yZWxzKTsKKwlsb2NhdG9ycyA9IHBhbGxv YyhzaXplb2YoUmVsRmlsZUxvY2F0b3IpICogbnJlbHMpOwogCiAJZm9yIChpID0gMDsgaSA8IG5y ZWxzOyBpKyspCi0JewotCQlBc3NlcnQoIVJlbEZpbGVMb2NhdG9yQmFja2VuZElzVGVtcChzbWdy c1tpXS0+c21ncl9ybG9jYXRvcikpOwotCi0JCXNyZWxzW2ldLnJsb2NhdG9yID0gc21ncnNbaV0t PnNtZ3JfcmxvY2F0b3IubG9jYXRvcjsKLQkJc3JlbHNbaV0uc3JlbCA9IHNtZ3JzW2ldOwotCX0K KwkJbG9jYXRvcnNbaV0gPSByZWxzW2ldOwogCiAJLyoKIAkgKiBTYXZlIHRoZSBic2VhcmNoIG92 ZXJoZWFkIGZvciBsb3cgbnVtYmVyIG9mIHJlbGF0aW9ucyB0byBzeW5jLiBTZWUKQEAgLTM2Mjks MTYgKzM2MzAsMTYgQEAgRmx1c2hSZWxhdGlvbnNBbGxCdWZmZXJzKFNNZ3JSZWxhdGlvbiAqc21n cnMsIGludCBucmVscykKIAkgKi8KIAl1c2VfYnNlYXJjaCA9IG5yZWxzID4gUkVMU19CU0VBUkNI X1RIUkVTSE9MRDsKIAotCS8qIHNvcnQgdGhlIGxpc3Qgb2YgU01nclJlbGF0aW9ucyBpZiBuZWNl c3NhcnkgKi8KKwkvKiBzb3J0IHRoZSBsaXN0IG9mIGxvY2F0b3JzIGlmIG5lY2Vzc2FyeSAqLwog CWlmICh1c2VfYnNlYXJjaCkKLQkJcGdfcXNvcnQoc3JlbHMsIG5yZWxzLCBzaXplb2YoU01nclNv cnRBcnJheSksIHJsb2NhdG9yX2NvbXBhcmF0b3IpOworCQlwZ19xc29ydChsb2NhdG9ycywgbnJl bHMsIHNpemVvZihSZWxGaWxlTG9jYXRvciksIHJsb2NhdG9yX2NvbXBhcmF0b3IpOwogCiAJLyog TWFrZSBzdXJlIHdlIGNhbiBoYW5kbGUgdGhlIHBpbiBpbnNpZGUgdGhlIGxvb3AgKi8KIAlSZXNv dXJjZU93bmVyRW5sYXJnZUJ1ZmZlcnMoQ3VycmVudFJlc291cmNlT3duZXIpOwogCiAJZm9yIChp ID0gMDsgaSA8IE5CdWZmZXJzOyBpKyspCiAJewotCQlTTWdyU29ydEFycmF5ICpzcmVsZW50ID0g TlVMTDsKKwkJUmVsRmlsZUxvY2F0b3IgKmZvdW5kID0gTlVMTDsKIAkJQnVmZmVyRGVzYyAqYnVm SGRyID0gR2V0QnVmZmVyRGVzY3JpcHRvcihpKTsKIAkJdWludDMyCQlidWZfc3RhdGU7CiAKQEAg LTM2NTMsMzMgKzM2NTQsMzUgQEAgRmx1c2hSZWxhdGlvbnNBbGxCdWZmZXJzKFNNZ3JSZWxhdGlv biAqc21ncnMsIGludCBucmVscykKIAogCQkJZm9yIChqID0gMDsgaiA8IG5yZWxzOyBqKyspCiAJ CQl7Ci0JCQkJaWYgKFJlbEZpbGVMb2NhdG9yRXF1YWxzKGJ1Zkhkci0+dGFnLnJsb2NhdG9yLCBz cmVsc1tqXS5ybG9jYXRvcikpCisJCQkJaWYgKFJlbEZpbGVMb2NhdG9yRXF1YWxzKGJ1Zkhkci0+ dGFnLnJsb2NhdG9yLCBsb2NhdG9yc1tqXSkpCiAJCQkJewotCQkJCQlzcmVsZW50ID0gJnNyZWxz W2pdOworCQkJCQlmb3VuZCA9ICZsb2NhdG9yc1tqXTsKIAkJCQkJYnJlYWs7CiAJCQkJfQogCQkJ fQogCQl9CiAJCWVsc2UKIAkJewotCQkJc3JlbGVudCA9IGJzZWFyY2goKGNvbnN0IHZvaWQgKikg JihidWZIZHItPnRhZy5ybG9jYXRvciksCi0JCQkJCQkJICBzcmVscywgbnJlbHMsIHNpemVvZihT TWdyU29ydEFycmF5KSwKLQkJCQkJCQkgIHJsb2NhdG9yX2NvbXBhcmF0b3IpOworCQkJZm91bmQg PSBic2VhcmNoKChjb25zdCB2b2lkICopICYoYnVmSGRyLT50YWcucmxvY2F0b3IpLAorCQkJCQkJ CWxvY2F0b3JzLCBucmVscywgc2l6ZW9mKFJlbEZpbGVMb2NhdG9yKSwKKwkJCQkJCQlybG9jYXRv cl9jb21wYXJhdG9yKTsKIAkJfQogCiAJCS8qIGJ1ZmZlciBkb2Vzbid0IGJlbG9uZyB0byBhbnkg b2YgdGhlIGdpdmVuIHJlbGZpbGVsb2NhdG9yczsgc2tpcCBpdCAqLwotCQlpZiAoc3JlbGVudCA9 PSBOVUxMKQorCQlpZiAoZm91bmQgPT0gTlVMTCkKIAkJCWNvbnRpbnVlOwogCisJCS8qIEZJWE1F OiBjYWNoZSBTTWdyRmlsZUhhbmRsZXMgZm9yIHRoZSByZWxzLCBhbmQgcGFzcyB0byBGbHVzaEJ1 ZmZlciAqLworCiAJCVJlc2VydmVQcml2YXRlUmVmQ291bnRFbnRyeSgpOwogCiAJCWJ1Zl9zdGF0 ZSA9IExvY2tCdWZIZHIoYnVmSGRyKTsKLQkJaWYgKFJlbEZpbGVMb2NhdG9yRXF1YWxzKGJ1Zkhk ci0+dGFnLnJsb2NhdG9yLCBzcmVsZW50LT5ybG9jYXRvcikgJiYKKwkJaWYgKFJlbEZpbGVMb2Nh dG9yRXF1YWxzKGJ1Zkhkci0+dGFnLnJsb2NhdG9yLCAqZm91bmQpICYmCiAJCQkoYnVmX3N0YXRl ICYgKEJNX1ZBTElEIHwgQk1fRElSVFkpKSA9PSAoQk1fVkFMSUQgfCBCTV9ESVJUWSkpCiAJCXsK IAkJCVBpbkJ1ZmZlcl9Mb2NrZWQoYnVmSGRyKTsKIAkJCUxXTG9ja0FjcXVpcmUoQnVmZmVyRGVz Y3JpcHRvckdldENvbnRlbnRMb2NrKGJ1ZkhkciksIExXX1NIQVJFRCk7Ci0JCQlGbHVzaEJ1ZmZl cihidWZIZHIsIHNyZWxlbnQtPnNyZWwpOworCQkJRmx1c2hCdWZmZXIoYnVmSGRyLCBOVUxMKTsK IAkJCUxXTG9ja1JlbGVhc2UoQnVmZmVyRGVzY3JpcHRvckdldENvbnRlbnRMb2NrKGJ1Zkhkcikp OwogCQkJVW5waW5CdWZmZXIoYnVmSGRyLCB0cnVlKTsKIAkJfQpAQCAtMzY4Nyw3ICszNjkwLDcg QEAgRmx1c2hSZWxhdGlvbnNBbGxCdWZmZXJzKFNNZ3JSZWxhdGlvbiAqc21ncnMsIGludCBucmVs cykKIAkJCVVubG9ja0J1ZkhkcihidWZIZHIsIGJ1Zl9zdGF0ZSk7CiAJfQogCi0JcGZyZWUoc3Jl bHMpOworCXBmcmVlKGxvY2F0b3JzKTsKIH0KIAogLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCkBAIC0zNzIyLDcg KzM3MjUsNyBAQCBSZWxhdGlvbkNvcHlTdG9yYWdlVXNpbmdCdWZmZXIoUmVsYXRpb24gc3JjLCBS ZWxhdGlvbiBkc3QsIEZvcmtOdW1iZXIgZm9ya051bSwKIAl1c2Vfd2FsID0gWExvZ0lzTmVlZGVk KCkgJiYgKHBlcm1hbmVudCB8fCBmb3JrTnVtID09IElOSVRfRk9SS05VTSk7CiAKIAkvKiBHZXQg bnVtYmVyIG9mIGJsb2NrcyBpbiB0aGUgc291cmNlIHJlbGF0aW9uLiAqLwotCW5ibG9ja3MgPSBz bWdybmJsb2NrcyhSZWxhdGlvbkdldFNtZ3Ioc3JjKSwgZm9ya051bSk7CisJbmJsb2NrcyA9IHNt Z3JuYmxvY2tzKFJlbGF0aW9uR2V0U21ncihzcmMsIGZvcmtOdW0pKTsKIAogCS8qIE5vdGhpbmcg dG8gY29weTsganVzdCByZXR1cm4uICovCiAJaWYgKG5ibG9ja3MgPT0gMCkKQEAgLTM4MjAsOSAr MzgyMyw5IEBAIENyZWF0ZUFuZENvcHlSZWxhdGlvbkRhdGEoUmVsRmlsZUxvY2F0b3Igc3JjX3Js b2NhdG9yLAogCWZvciAoRm9ya051bWJlciBmb3JrTnVtID0gTUFJTl9GT1JLTlVNICsgMTsKIAkJ IGZvcmtOdW0gPD0gTUFYX0ZPUktOVU07IGZvcmtOdW0rKykKIAl7Ci0JCWlmIChzbWdyZXhpc3Rz KFJlbGF0aW9uR2V0U21ncihzcmNfcmVsKSwgZm9ya051bSkpCisJCWlmIChzbWdyZXhpc3RzKFJl bGF0aW9uR2V0U21ncihzcmNfcmVsLCBmb3JrTnVtKSkpCiAJCXsKLQkJCXNtZ3JjcmVhdGUoUmVs YXRpb25HZXRTbWdyKGRzdF9yZWwpLCBmb3JrTnVtLCBmYWxzZSk7CisJCQlzbWdyY3JlYXRlKFJl bGF0aW9uR2V0U21ncihkc3RfcmVsLCBmb3JrTnVtKSwgZmFsc2UpOwogCiAJCQkvKgogCQkJICog V0FMIGxvZyBjcmVhdGlvbiBpZiB0aGUgcmVsYXRpb24gaXMgcGVyc2lzdGVudCwgb3IgdGhpcyBp cyB0aGUKQEAgLTQ5NTIsNyArNDk1NSw3IEBAIElzc3VlUGVuZGluZ1dyaXRlYmFja3MoV3JpdGVi YWNrQ29udGV4dCAqY29udGV4dCkKIAl7CiAJCVBlbmRpbmdXcml0ZWJhY2sgKmN1cjsKIAkJUGVu ZGluZ1dyaXRlYmFjayAqbmV4dDsKLQkJU01nclJlbGF0aW9uIHJlbG47CisJCVNNZ3JGaWxlSGFu ZGxlIHNmaWxlOwogCQlpbnQJCQlhaGVhZDsKIAkJQnVmZmVyVGFnCXRhZzsKIAkJU2l6ZQkJbmJs b2NrcyA9IDE7CkBAIC00OTg4LDggKzQ5OTEsOCBAQCBJc3N1ZVBlbmRpbmdXcml0ZWJhY2tzKFdy aXRlYmFja0NvbnRleHQgKmNvbnRleHQpCiAJCWkgKz0gYWhlYWQ7CiAKIAkJLyogYW5kIGZpbmFs bHkgdGVsbCB0aGUga2VybmVsIHRvIHdyaXRlIHRoZSBkYXRhIHRvIHN0b3JhZ2UgKi8KLQkJcmVs biA9IHNtZ3JvcGVuKHRhZy5ybG9jYXRvciwgSW52YWxpZEJhY2tlbmRJZCk7Ci0JCXNtZ3J3cml0 ZWJhY2socmVsbiwgdGFnLmZvcmtOdW0sIHRhZy5ibG9ja051bSwgbmJsb2Nrcyk7CisJCXNmaWxl ID0gc21ncm9wZW4odGFnLnJsb2NhdG9yLCBJbnZhbGlkQmFja2VuZElkLCB0YWcuZm9ya051bSk7 CisJCXNtZ3J3cml0ZWJhY2soc2ZpbGUsIHRhZy5ibG9ja051bSwgbmJsb2Nrcyk7CiAJfQogCiAJ Y29udGV4dC0+bnJfcGVuZGluZyA9IDA7CkBAIC01MDExLDMgKzUwMTQsMjkgQEAgVGVzdEZvck9s ZFNuYXBzaG90X2ltcGwoU25hcHNob3Qgc25hcHNob3QsIFJlbGF0aW9uIHJlbGF0aW9uKQogCQkJ CShlcnJjb2RlKEVSUkNPREVfU05BUFNIT1RfVE9PX09MRCksCiAJCQkJIGVycm1zZygic25hcHNo b3QgdG9vIG9sZCIpKSk7CiB9CisKKy8qCisgKiBDaGVjayBpZiBhIGJ1ZmZlciB0YWcgaXMgY3Vy cmVudGx5IG1hcHBlZC4KKyAqCisgKiBYWFggRHViaW91cyBzZW1hbnRpY3M7IG5lZWRlZCBvbmx5 IGZvciBtdWx0aXhhY3QncyBoYW5kbGluZyBmb3IKKyAqIGluY29uc2lzdGVudCBzdGF0ZXMuCisg Ki8KK2Jvb2wKK0J1ZmZlclByb2JlKFJlbEZpbGVMb2NhdG9yIHJsb2NhdG9yLCBGb3JrTnVtYmVy IGZvcmtOdW0sIEJsb2NrTnVtYmVyIGJsb2NrTnVtKQoreworCUJ1ZmZlclRhZwl0YWc7CisJdWlu dDMyCQloYXNoOworCUxXTG9jawkgICAqcGFydGl0aW9uTG9jazsKKwlpbnQJCQlidWZfaWQ7CisK KwlJTklUX0JVRkZFUlRBRyh0YWcsIHJsb2NhdG9yLCBmb3JrTnVtLCBibG9ja051bSk7CisKKwlo YXNoID0gQnVmVGFibGVIYXNoQ29kZSgmdGFnKTsKKwlwYXJ0aXRpb25Mb2NrID0gQnVmTWFwcGlu Z1BhcnRpdGlvbkxvY2soaGFzaCk7CisKKwlMV0xvY2tBY3F1aXJlKHBhcnRpdGlvbkxvY2ssIExX X1NIQVJFRCk7CisJYnVmX2lkID0gQnVmVGFibGVMb29rdXAoJnRhZywgaGFzaCk7CisJTFdMb2Nr UmVsZWFzZShwYXJ0aXRpb25Mb2NrKTsKKworCXJldHVybiBidWZfaWQgPj0gMDsKK30KZGlmZiAt LWdpdCBhL3NyYy9iYWNrZW5kL3N0b3JhZ2UvYnVmZmVyL2xvY2FsYnVmLmMgYi9zcmMvYmFja2Vu ZC9zdG9yYWdlL2J1ZmZlci9sb2NhbGJ1Zi5jCmluZGV4IDljMDM4ODUxZDc1Li45Mjc2NzEyMjc5 NyAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvc3RvcmFnZS9idWZmZXIvbG9jYWxidWYuYworKysg Yi9zcmMvYmFja2VuZC9zdG9yYWdlL2J1ZmZlci9sb2NhbGJ1Zi5jCkBAIC02MSwxNCArNjEsMTMg QEAgc3RhdGljIEJsb2NrIEdldExvY2FsQnVmZmVyU3RvcmFnZSh2b2lkKTsKICAqIE5vLW9wIGlm IHByZWZldGNoaW5nIGlzbid0IGNvbXBpbGVkIGluLgogICovCiBQcmVmZXRjaEJ1ZmZlclJlc3Vs dAotUHJlZmV0Y2hMb2NhbEJ1ZmZlcihTTWdyUmVsYXRpb24gc21nciwgRm9ya051bWJlciBmb3Jr TnVtLAotCQkJCQlCbG9ja051bWJlciBibG9ja051bSkKK1ByZWZldGNoTG9jYWxCdWZmZXIoU01n ckZpbGVIYW5kbGUgc2ZpbGUsIEJsb2NrTnVtYmVyIGJsb2NrTnVtKQogewogCVByZWZldGNoQnVm ZmVyUmVzdWx0IHJlc3VsdCA9IHtJbnZhbGlkQnVmZmVyLCBmYWxzZX07CiAJQnVmZmVyVGFnCW5l d1RhZzsJCQkvKiBpZGVudGl0eSBvZiByZXF1ZXN0ZWQgYmxvY2sgKi8KIAlMb2NhbEJ1ZmZlckxv b2t1cEVudCAqaHJlc3VsdDsKIAotCUlOSVRfQlVGRkVSVEFHKG5ld1RhZywgc21nci0+c21ncl9y bG9jYXRvci5sb2NhdG9yLCBmb3JrTnVtLCBibG9ja051bSk7CisJSU5JVF9CVUZGRVJUQUcobmV3 VGFnLCBzZmlsZS0+c21ncl9sb2NhdG9yLmxvY2F0b3IsIHNmaWxlLT5zbWdyX2xvY2F0b3IuZm9y a251bSwgYmxvY2tOdW0pOwogCiAJLyogSW5pdGlhbGl6ZSBsb2NhbCBidWZmZXJzIGlmIGZpcnN0 IHJlcXVlc3QgaW4gdGhpcyBzZXNzaW9uICovCiAJaWYgKExvY2FsQnVmSGFzaCA9PSBOVUxMKQpA QCAtODcsNyArODYsNyBAQCBQcmVmZXRjaExvY2FsQnVmZmVyKFNNZ3JSZWxhdGlvbiBzbWdyLCBG b3JrTnVtYmVyIGZvcmtOdW0sCiAJewogI2lmZGVmIFVTRV9QUkVGRVRDSAogCQkvKiBOb3QgaW4g YnVmZmVycywgc28gaW5pdGlhdGUgcHJlZmV0Y2ggKi8KLQkJc21ncnByZWZldGNoKHNtZ3IsIGZv cmtOdW0sIGJsb2NrTnVtKTsKKwkJc21ncnByZWZldGNoKHNmaWxlLCBibG9ja051bSk7CiAJCXJl c3VsdC5pbml0aWF0ZWRfaW8gPSB0cnVlOwogI2VuZGlmCQkJCQkJCS8qIFVTRV9QUkVGRVRDSCAq LwogCX0KQEAgLTEwNiw4ICsxMDUsNyBAQCBQcmVmZXRjaExvY2FsQnVmZmVyKFNNZ3JSZWxhdGlv biBzbWdyLCBGb3JrTnVtYmVyIGZvcmtOdW0sCiAgKiAoaGVuY2UsIHVzYWdlX2NvdW50IGlzIGFs d2F5cyBhZHZhbmNlZCkuCiAgKi8KIEJ1ZmZlckRlc2MgKgotTG9jYWxCdWZmZXJBbGxvYyhTTWdy UmVsYXRpb24gc21nciwgRm9ya051bWJlciBmb3JrTnVtLCBCbG9ja051bWJlciBibG9ja051bSwK LQkJCQkgYm9vbCAqZm91bmRQdHIpCitMb2NhbEJ1ZmZlckFsbG9jKFNNZ3JGaWxlSGFuZGxlIHNm aWxlLCBCbG9ja051bWJlciBibG9ja051bSwgYm9vbCAqZm91bmRQdHIpCiB7CiAJQnVmZmVyVGFn CW5ld1RhZzsJCQkvKiBpZGVudGl0eSBvZiByZXF1ZXN0ZWQgYmxvY2sgKi8KIAlMb2NhbEJ1ZmZl ckxvb2t1cEVudCAqaHJlc3VsdDsKQEAgLTExNyw3ICsxMTUsNyBAQCBMb2NhbEJ1ZmZlckFsbG9j KFNNZ3JSZWxhdGlvbiBzbWdyLCBGb3JrTnVtYmVyIGZvcmtOdW0sIEJsb2NrTnVtYmVyIGJsb2Nr TnVtLAogCWJvb2wJCWZvdW5kOwogCXVpbnQzMgkJYnVmX3N0YXRlOwogCi0JSU5JVF9CVUZGRVJU QUcobmV3VGFnLCBzbWdyLT5zbWdyX3Jsb2NhdG9yLmxvY2F0b3IsIGZvcmtOdW0sIGJsb2NrTnVt KTsKKwlJTklUX0JVRkZFUlRBRyhuZXdUYWcsIHNmaWxlLT5zbWdyX2xvY2F0b3IubG9jYXRvciwg c2ZpbGUtPnNtZ3JfbG9jYXRvci5mb3JrbnVtLCBibG9ja051bSk7CiAKIAkvKiBJbml0aWFsaXpl IGxvY2FsIGJ1ZmZlcnMgaWYgZmlyc3QgcmVxdWVzdCBpbiB0aGlzIHNlc3Npb24gKi8KIAlpZiAo TG9jYWxCdWZIYXNoID09IE5VTEwpCkBAIC0xMzQsNyArMTMyLDcgQEAgTG9jYWxCdWZmZXJBbGxv YyhTTWdyUmVsYXRpb24gc21nciwgRm9ya051bWJlciBmb3JrTnVtLCBCbG9ja051bWJlciBibG9j a051bSwKIAkJQXNzZXJ0KEJVRkZFUlRBR1NfRVFVQUwoYnVmSGRyLT50YWcsIG5ld1RhZykpOwog I2lmZGVmIExCREVCVUcKIAkJZnByaW50ZihzdGRlcnIsICJMQiBBTExPQyAoJXUsJWQsJWQpICVk XG4iLAotCQkJCXNtZ3ItPnNtZ3JfcmxvY2F0b3IubG9jYXRvci5yZWxOdW1iZXIsIGZvcmtOdW0s IGJsb2NrTnVtLCAtYiAtIDEpOworCQkJCXNmaWxlLT5zbWdyX2xvY2F0b3IubG9jYXRvci5yZWxO dW1iZXIsIHNmaWxlLT5zbWdyX2xvY2F0b3IuZm9ya251bSwgYmxvY2tOdW0sIC1iIC0gMSk7CiAj ZW5kaWYKIAkJYnVmX3N0YXRlID0gcGdfYXRvbWljX3JlYWRfdTMyKCZidWZIZHItPnN0YXRlKTsK IApAQCAtMTYyLDcgKzE2MCw3IEBAIExvY2FsQnVmZmVyQWxsb2MoU01nclJlbGF0aW9uIHNtZ3Is IEZvcmtOdW1iZXIgZm9ya051bSwgQmxvY2tOdW1iZXIgYmxvY2tOdW0sCiAKICNpZmRlZiBMQkRF QlVHCiAJZnByaW50ZihzdGRlcnIsICJMQiBBTExPQyAoJXUsJWQsJWQpICVkXG4iLAotCQkJc21n ci0+c21ncl9ybG9jYXRvci5sb2NhdG9yLnJlbE51bWJlciwgZm9ya051bSwgYmxvY2tOdW0sCisJ CQlzZmlsZS0+c21ncl9sb2NhdG9yLmxvY2F0b3IucmVsTnVtYmVyLCBzZmlsZS0+c21ncl9sb2Nh dG9yLmZvcmtudW0sIGJsb2NrTnVtLAogCQkJLW5leHRGcmVlTG9jYWxCdWYgLSAxKTsKICNlbmRp ZgogCkBAIC0yMTEsMTcgKzIwOSwxNiBAQCBMb2NhbEJ1ZmZlckFsbG9jKFNNZ3JSZWxhdGlvbiBz bWdyLCBGb3JrTnVtYmVyIGZvcmtOdW0sIEJsb2NrTnVtYmVyIGJsb2NrTnVtLAogCSAqLwogCWlm IChidWZfc3RhdGUgJiBCTV9ESVJUWSkKIAl7Ci0JCVNNZ3JSZWxhdGlvbiBvcmVsbjsKKwkJU01n ckZpbGVIYW5kbGUgb2ZpbGU7CiAJCVBhZ2UJCWxvY2FscGFnZSA9IChjaGFyICopIExvY2FsQnVm SGRyR2V0QmxvY2soYnVmSGRyKTsKIAotCQkvKiBGaW5kIHNtZ3IgcmVsYXRpb24gZm9yIGJ1ZmZl ciAqLwotCQlvcmVsbiA9IHNtZ3JvcGVuKGJ1Zkhkci0+dGFnLnJsb2NhdG9yLCBNeUJhY2tlbmRJ ZCk7CisJCS8qIEZpbmQgc21nciBmaWxlIGhhbmRsZSBmb3IgYnVmZmVyICovCisJCW9maWxlID0g c21ncm9wZW4oYnVmSGRyLT50YWcucmxvY2F0b3IsIE15QmFja2VuZElkLCBidWZIZHItPnRhZy5m b3JrTnVtKTsKIAogCQlQYWdlU2V0Q2hlY2tzdW1JbnBsYWNlKGxvY2FscGFnZSwgYnVmSGRyLT50 YWcuYmxvY2tOdW0pOwogCiAJCS8qIEFuZCB3cml0ZS4uLiAqLwotCQlzbWdyd3JpdGUob3JlbG4s Ci0JCQkJICBidWZIZHItPnRhZy5mb3JrTnVtLAorCQlzbWdyd3JpdGUob2ZpbGUsCiAJCQkJICBi dWZIZHItPnRhZy5ibG9ja051bSwKIAkJCQkgIGxvY2FscGFnZSwKIAkJCQkgIGZhbHNlKTsKZGlm ZiAtLWdpdCBhL3NyYy9iYWNrZW5kL3N0b3JhZ2UvZnJlZXNwYWNlL2ZyZWVzcGFjZS5jIGIvc3Jj L2JhY2tlbmQvc3RvcmFnZS9mcmVlc3BhY2UvZnJlZXNwYWNlLmMKaW5kZXggMDA1ZGVmNTZkY2Iu LjczMTczODQ5YmZkIDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9zdG9yYWdlL2ZyZWVzcGFjZS9m cmVlc3BhY2UuYworKysgYi9zcmMvYmFja2VuZC9zdG9yYWdlL2ZyZWVzcGFjZS9mcmVlc3BhY2Uu YwpAQCAtMjcxLDcgKzI3MSw3IEBAIEZyZWVTcGFjZU1hcFByZXBhcmVUcnVuY2F0ZVJlbChSZWxh dGlvbiByZWwsIEJsb2NrTnVtYmVyIG5ibG9ja3MpCiAJICogSWYgbm8gRlNNIGhhcyBiZWVuIGNy ZWF0ZWQgeWV0IGZvciB0aGlzIHJlbGF0aW9uLCB0aGVyZSdzIG5vdGhpbmcgdG8KIAkgKiB0cnVu Y2F0ZS4KIAkgKi8KLQlpZiAoIXNtZ3JleGlzdHMoUmVsYXRpb25HZXRTbWdyKHJlbCksIEZTTV9G T1JLTlVNKSkKKwlpZiAoIXNtZ3JleGlzdHMoUmVsYXRpb25HZXRTbWdyKHJlbCwgRlNNX0ZPUktO VU0pKSkKIAkJcmV0dXJuIEludmFsaWRCbG9ja051bWJlcjsKIAogCS8qIEdldCB0aGUgbG9jYXRp b24gaW4gdGhlIEZTTSBvZiB0aGUgZmlyc3QgcmVtb3ZlZCBoZWFwIGJsb2NrICovCkBAIC0zMTcs NyArMzE3LDcgQEAgRnJlZVNwYWNlTWFwUHJlcGFyZVRydW5jYXRlUmVsKFJlbGF0aW9uIHJlbCwg QmxvY2tOdW1iZXIgbmJsb2NrcykKIAllbHNlCiAJewogCQluZXdfbmZzbWJsb2NrcyA9IGZzbV9s b2dpY2FsX3RvX3BoeXNpY2FsKGZpcnN0X3JlbW92ZWRfYWRkcmVzcyk7Ci0JCWlmIChzbWdybmJs b2NrcyhSZWxhdGlvbkdldFNtZ3IocmVsKSwgRlNNX0ZPUktOVU0pIDw9IG5ld19uZnNtYmxvY2tz KQorCQlpZiAoc21ncm5ibG9ja3MoUmVsYXRpb25HZXRTbWdyKHJlbCwgRlNNX0ZPUktOVU0pKSA8 PSBuZXdfbmZzbWJsb2NrcykKIAkJCXJldHVybiBJbnZhbGlkQmxvY2tOdW1iZXI7CS8qIG5vdGhp bmcgdG8gZG87IHRoZSBGU00gd2FzIGFscmVhZHkKIAkJCQkJCQkJCQkgKiBzbWFsbGVyICovCiAJ fQpAQCAtNTMyLDE0ICs1MzIsMTQgQEAgZnNtX3JlYWRidWYoUmVsYXRpb24gcmVsLCBGU01BZGRy ZXNzIGFkZHIsIGJvb2wgZXh0ZW5kKQogewogCUJsb2NrTnVtYmVyIGJsa25vID0gZnNtX2xvZ2lj YWxfdG9fcGh5c2ljYWwoYWRkcik7CiAJQnVmZmVyCQlidWY7Ci0JU01nclJlbGF0aW9uIHJlbG47 CisJU01nckZpbGVIYW5kbGUgZnNtX2ZpbGU7CiAKIAkvKgogCSAqIENhdXRpb246IHJlLXVzaW5n IHRoaXMgc21nciBwb2ludGVyIGNvdWxkIGZhaWwgaWYgdGhlIHJlbGNhY2hlIGVudHJ5CiAJICog Z2V0cyBjbG9zZWQuICBJdCdzIHNhZmUgYXMgbG9uZyBhcyB3ZSBvbmx5IGRvIHNtZ3ItbGV2ZWwg b3BlcmF0aW9ucwogCSAqIGJldHdlZW4gaGVyZSBhbmQgdGhlIGxhc3QgdXNlIG9mIHRoZSBwb2lu dGVyLgogCSAqLwotCXJlbG4gPSBSZWxhdGlvbkdldFNtZ3IocmVsKTsKKwlmc21fZmlsZSA9IFJl bGF0aW9uR2V0U21ncihyZWwsIEZTTV9GT1JLTlVNKTsKIAogCS8qCiAJICogSWYgd2UgaGF2ZW4n dCBjYWNoZWQgdGhlIHNpemUgb2YgdGhlIEZTTSB5ZXQsIGNoZWNrIGl0IGZpcnN0LiAgQWxzbwpA QCAtNTQ3LDE5ICs1NDcsMTkgQEAgZnNtX3JlYWRidWYoUmVsYXRpb24gcmVsLCBGU01BZGRyZXNz IGFkZHIsIGJvb2wgZXh0ZW5kKQogCSAqIHZhbHVlIG1pZ2h0IGJlIHN0YWxlLiAgKFdlIHNlbmQg c21nciBpbnZhbCBtZXNzYWdlcyBvbiB0cnVuY2F0aW9uLCBidXQKIAkgKiBub3Qgb24gZXh0ZW5z aW9uLikKIAkgKi8KLQlpZiAocmVsbi0+c21ncl9jYWNoZWRfbmJsb2Nrc1tGU01fRk9SS05VTV0g PT0gSW52YWxpZEJsb2NrTnVtYmVyIHx8Ci0JCWJsa25vID49IHJlbG4tPnNtZ3JfY2FjaGVkX25i bG9ja3NbRlNNX0ZPUktOVU1dKQorCWlmIChmc21fZmlsZS0+c21ncl9jYWNoZWRfbmJsb2NrcyA9 PSBJbnZhbGlkQmxvY2tOdW1iZXIgfHwKKwkJYmxrbm8gPj0gZnNtX2ZpbGUtPnNtZ3JfY2FjaGVk X25ibG9ja3MpCiAJewogCQkvKiBJbnZhbGlkYXRlIHRoZSBjYWNoZSBzbyBzbWdybmJsb2NrcyBh c2tzIHRoZSBrZXJuZWwuICovCi0JCXJlbG4tPnNtZ3JfY2FjaGVkX25ibG9ja3NbRlNNX0ZPUktO VU1dID0gSW52YWxpZEJsb2NrTnVtYmVyOwotCQlpZiAoc21ncmV4aXN0cyhyZWxuLCBGU01fRk9S S05VTSkpCi0JCQlzbWdybmJsb2NrcyhyZWxuLCBGU01fRk9SS05VTSk7CisJCWZzbV9maWxlLT5z bWdyX2NhY2hlZF9uYmxvY2tzID0gSW52YWxpZEJsb2NrTnVtYmVyOworCQlpZiAoc21ncmV4aXN0 cyhmc21fZmlsZSkpCisJCQlzbWdybmJsb2Nrcyhmc21fZmlsZSk7CiAJCWVsc2UKLQkJCXJlbG4t PnNtZ3JfY2FjaGVkX25ibG9ja3NbRlNNX0ZPUktOVU1dID0gMDsKKwkJCWZzbV9maWxlLT5zbWdy X2NhY2hlZF9uYmxvY2tzID0gMDsKIAl9CiAKIAkvKiBIYW5kbGUgcmVxdWVzdHMgYmV5b25kIEVP RiAqLwotCWlmIChibGtubyA+PSByZWxuLT5zbWdyX2NhY2hlZF9uYmxvY2tzW0ZTTV9GT1JLTlVN XSkKKwlpZiAoYmxrbm8gPj0gZnNtX2ZpbGUtPnNtZ3JfY2FjaGVkX25ibG9ja3MpCiAJewogCQlp ZiAoZXh0ZW5kKQogCQkJZnNtX2V4dGVuZChyZWwsIGJsa25vICsgMSk7CkBAIC02MDksNyArNjA5 LDcgQEAgZnNtX2V4dGVuZChSZWxhdGlvbiByZWwsIEJsb2NrTnVtYmVyIGZzbV9uYmxvY2tzKQog ewogCUJsb2NrTnVtYmVyIGZzbV9uYmxvY2tzX25vdzsKIAlQR0FsaWduZWRCbG9jayBwZzsKLQlT TWdyUmVsYXRpb24gcmVsbjsKKwlTTWdyRmlsZUhhbmRsZSBmc21fZmlsZTsKIAogCVBhZ2VJbml0 KChQYWdlKSBwZy5kYXRhLCBCTENLU1osIDApOwogCkBAIC02MzAsMjkgKzYzMCwyOCBAQCBmc21f ZXh0ZW5kKFJlbGF0aW9uIHJlbCwgQmxvY2tOdW1iZXIgZnNtX25ibG9ja3MpCiAJICogZ2V0cyBj bG9zZWQuICBJdCdzIHNhZmUgYXMgbG9uZyBhcyB3ZSBvbmx5IGRvIHNtZ3ItbGV2ZWwgb3BlcmF0 aW9ucwogCSAqIGJldHdlZW4gaGVyZSBhbmQgdGhlIGxhc3QgdXNlIG9mIHRoZSBwb2ludGVyLgog CSAqLwotCXJlbG4gPSBSZWxhdGlvbkdldFNtZ3IocmVsKTsKKwlmc21fZmlsZSA9IFJlbGF0aW9u R2V0U21ncihyZWwsIEZTTV9GT1JLTlVNKTsKIAogCS8qCiAJICogQ3JlYXRlIHRoZSBGU00gZmls ZSBmaXJzdCBpZiBpdCBkb2Vzbid0IGV4aXN0LiAgSWYKIAkgKiBzbWdyX2NhY2hlZF9uYmxvY2tz W0ZTTV9GT1JLTlVNXSBpcyBwb3NpdGl2ZSB0aGVuIGl0IG11c3QgZXhpc3QsIG5vCiAJICogbmVl ZCBmb3IgYW4gc21ncmV4aXN0cyBjYWxsLgogCSAqLwotCWlmICgocmVsbi0+c21ncl9jYWNoZWRf bmJsb2Nrc1tGU01fRk9SS05VTV0gPT0gMCB8fAotCQkgcmVsbi0+c21ncl9jYWNoZWRfbmJsb2Nr c1tGU01fRk9SS05VTV0gPT0gSW52YWxpZEJsb2NrTnVtYmVyKSAmJgotCQkhc21ncmV4aXN0cyhy ZWxuLCBGU01fRk9SS05VTSkpCi0JCXNtZ3JjcmVhdGUocmVsbiwgRlNNX0ZPUktOVU0sIGZhbHNl KTsKKwlpZiAoKGZzbV9maWxlLT5zbWdyX2NhY2hlZF9uYmxvY2tzID09IDAgfHwKKwkJIGZzbV9m aWxlLT5zbWdyX2NhY2hlZF9uYmxvY2tzID09IEludmFsaWRCbG9ja051bWJlcikgJiYKKwkJIXNt Z3JleGlzdHMoZnNtX2ZpbGUpKQorCQlzbWdyY3JlYXRlKGZzbV9maWxlLCBmYWxzZSk7CiAKIAkv KiBJbnZhbGlkYXRlIGNhY2hlIHNvIHRoYXQgc21ncm5ibG9ja3MoKSBhc2tzIHRoZSBrZXJuZWwu ICovCi0JcmVsbi0+c21ncl9jYWNoZWRfbmJsb2Nrc1tGU01fRk9SS05VTV0gPSBJbnZhbGlkQmxv Y2tOdW1iZXI7Ci0JZnNtX25ibG9ja3Nfbm93ID0gc21ncm5ibG9ja3MocmVsbiwgRlNNX0ZPUktO VU0pOworCWZzbV9maWxlLT5zbWdyX2NhY2hlZF9uYmxvY2tzID0gSW52YWxpZEJsb2NrTnVtYmVy OworCWZzbV9uYmxvY2tzX25vdyA9IHNtZ3JuYmxvY2tzKGZzbV9maWxlKTsKIAogCS8qIEV4dGVu ZCBhcyBuZWVkZWQuICovCiAJd2hpbGUgKGZzbV9uYmxvY2tzX25vdyA8IGZzbV9uYmxvY2tzKQog CXsKIAkJUGFnZVNldENoZWNrc3VtSW5wbGFjZSgoUGFnZSkgcGcuZGF0YSwgZnNtX25ibG9ja3Nf bm93KTsKIAotCQlzbWdyZXh0ZW5kKHJlbG4sIEZTTV9GT1JLTlVNLCBmc21fbmJsb2Nrc19ub3cs Ci0JCQkJICAgcGcuZGF0YSwgZmFsc2UpOworCQlzbWdyZXh0ZW5kKGZzbV9maWxlLCBmc21fbmJs b2Nrc19ub3csIHBnLmRhdGEsIGZhbHNlKTsKIAkJZnNtX25ibG9ja3Nfbm93Kys7CiAJfQogCmRp ZmYgLS1naXQgYS9zcmMvYmFja2VuZC9zdG9yYWdlL2lwYy9pcGNpLmMgYi9zcmMvYmFja2VuZC9z dG9yYWdlL2lwYy9pcGNpLmMKaW5kZXggMWE2ZjUyNzA1MTguLmMwNjNhMjAxYTRmIDEwMDY0NAot LS0gYS9zcmMvYmFja2VuZC9zdG9yYWdlL2lwYy9pcGNpLmMKKysrIGIvc3JjL2JhY2tlbmQvc3Rv cmFnZS9pcGMvaXBjaS5jCkBAIC0xMTYsOSArMTE2LDcgQEAgQ2FsY3VsYXRlU2htZW1TaXplKGlu dCAqbnVtX3NlbWFwaG9yZXMpCiAJc2l6ZSA9IGFkZF9zaXplKHNpemUsIFhMb2dQcmVmZXRjaFNo bWVtU2l6ZSgpKTsKIAlzaXplID0gYWRkX3NpemUoc2l6ZSwgWExPR1NobWVtU2l6ZSgpKTsKIAlz aXplID0gYWRkX3NpemUoc2l6ZSwgWExvZ1JlY292ZXJ5U2htZW1TaXplKCkpOwotCXNpemUgPSBh ZGRfc2l6ZShzaXplLCBDTE9HU2htZW1TaXplKCkpOwogCXNpemUgPSBhZGRfc2l6ZShzaXplLCBD b21taXRUc1NobWVtU2l6ZSgpKTsKLQlzaXplID0gYWRkX3NpemUoc2l6ZSwgU1VCVFJBTlNTaG1l bVNpemUoKSk7CiAJc2l6ZSA9IGFkZF9zaXplKHNpemUsIFR3b1BoYXNlU2htZW1TaXplKCkpOwog CXNpemUgPSBhZGRfc2l6ZShzaXplLCBCYWNrZ3JvdW5kV29ya2VyU2htZW1TaXplKCkpOwogCXNp emUgPSBhZGRfc2l6ZShzaXplLCBNdWx0aVhhY3RTaG1lbVNpemUoKSk7CkBAIC0yNDAsOSArMjM4 LDcgQEAgQ3JlYXRlU2hhcmVkTWVtb3J5QW5kU2VtYXBob3Jlcyh2b2lkKQogCVhMT0dTaG1lbUlu aXQoKTsKIAlYTG9nUHJlZmV0Y2hTaG1lbUluaXQoKTsKIAlYTG9nUmVjb3ZlcnlTaG1lbUluaXQo KTsKLQlDTE9HU2htZW1Jbml0KCk7CiAJQ29tbWl0VHNTaG1lbUluaXQoKTsKLQlTVUJUUkFOU1No bWVtSW5pdCgpOwogCU11bHRpWGFjdFNobWVtSW5pdCgpOwogCUluaXRCdWZmZXJQb29sKCk7CiAK ZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL3N0b3JhZ2UvbG1nci9wcmVkaWNhdGUuYyBiL3NyYy9i YWNrZW5kL3N0b3JhZ2UvbG1nci9wcmVkaWNhdGUuYwppbmRleCA1MTM2ZGE2ZWEzNi4uMTExMmQz ZTg5NTMgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL3N0b3JhZ2UvbG1nci9wcmVkaWNhdGUuYwor KysgYi9zcmMvYmFja2VuZC9zdG9yYWdlL2xtZ3IvcHJlZGljYXRlLmMKQEAgLTMxMiwxNyArMzEy LDkgQEAKIAkoKHRhcmdldGhhc2gpIF4gKCh1aW50MzIpIFBvaW50ZXJHZXREYXR1bSgocHJlZGlj YXRlbG9ja3RhZyktPm15WGFjdCkpIFwKIAkgPDwgTE9HMl9OVU1fUFJFRElDQVRFTE9DS19QQVJU SVRJT05TKQogCi0KLS8qCi0gKiBUaGUgU0xSVSBidWZmZXIgYXJlYSB0aHJvdWdoIHdoaWNoIHdl IGFjY2VzcyB0aGUgb2xkIHhpZHMuCi0gKi8KLXN0YXRpYyBTbHJ1Q3RsRGF0YSBTZXJpYWxTbHJ1 Q3RsRGF0YTsKLQotI2RlZmluZSBTZXJpYWxTbHJ1Q3RsCQkJKCZTZXJpYWxTbHJ1Q3RsRGF0YSkK LQogI2RlZmluZSBTRVJJQUxfUEFHRVNJWkUJCQlCTENLU1oKICNkZWZpbmUgU0VSSUFMX0VOVFJZ U0laRQkJCXNpemVvZihTZXJDb21taXRTZXFObykKLSNkZWZpbmUgU0VSSUFMX0VOVFJJRVNQRVJQ QUdFCShTRVJJQUxfUEFHRVNJWkUgLyBTRVJJQUxfRU5UUllTSVpFKQorI2RlZmluZSBTRVJJQUxf RU5UUklFU1BFUlBBR0UJKChTRVJJQUxfUEFHRVNJWkUgLSBTaXplT2ZQYWdlSGVhZGVyRGF0YSkg LyBTRVJJQUxfRU5UUllTSVpFKQogCiAvKgogICogU2V0IG1heGltdW0gcGFnZXMgYmFzZWQgb24g dGhlIG51bWJlciBuZWVkZWQgdG8gdHJhY2sgYWxsIHRyYW5zYWN0aW9ucy4KQEAgLTMzMSwxMiAr MzIzLDIwIEBAIHN0YXRpYyBTbHJ1Q3RsRGF0YSBTZXJpYWxTbHJ1Q3RsRGF0YTsKIAogI2RlZmlu ZSBTZXJpYWxOZXh0UGFnZShwYWdlKSAoKChwYWdlKSA+PSBTRVJJQUxfTUFYX1BBR0UpID8gMCA6 IChwYWdlKSArIDEpCiAKLSNkZWZpbmUgU2VyaWFsVmFsdWUoc2xvdG5vLCB4aWQpICgqKChTZXJD b21taXRTZXFObyAqKSBcCi0JKFNlcmlhbFNscnVDdGwtPnNoYXJlZC0+cGFnZV9idWZmZXJbc2xv dG5vXSArIFwKKyNkZWZpbmUgU2VyaWFsUGFnZUhlYWRlck9mZnNldCAoaW50KSBcCisJKChTaXpl T2ZQYWdlSGVhZGVyRGF0YSAlIFNFUklBTF9FTlRSWVNJWkUgPT0gMCA/IFwKKwkoU2l6ZU9mUGFn ZUhlYWRlckRhdGEgLyBTRVJJQUxfRU5UUllTSVpFKSA6IFwKKwkoU2l6ZU9mUGFnZUhlYWRlckRh dGEgLyBTRVJJQUxfRU5UUllTSVpFICkgKyAxKSAqIFwKKwlTRVJJQUxfRU5UUllTSVpFKQorCisj ZGVmaW5lIFNlcmlhbFZhbHVlKGJ1ZmZlciwgeGlkKSAoKigoU2VyQ29tbWl0U2VxTm8gKikgXAor CShCdWZmZXJHZXRQYWdlKGJ1ZmZlcikgKyBcCisJU2VyaWFsUGFnZUhlYWRlck9mZnNldCArIFwg CiAJKCgoKHVpbnQzMikgKHhpZCkpICUgU0VSSUFMX0VOVFJJRVNQRVJQQUdFKSAqIFNFUklBTF9F TlRSWVNJWkUpKSkpCiAKICNkZWZpbmUgU2VyaWFsUGFnZSh4aWQpCSgoKHVpbnQzMikgKHhpZCkp IC8gU0VSSUFMX0VOVFJJRVNQRVJQQUdFKQogCisKIHR5cGVkZWYgc3RydWN0IFNlcmlhbENvbnRy b2xEYXRhCiB7CiAJaW50CQkJaGVhZFBhZ2U7CQkvKiBuZXdlc3QgaW5pdGlhbGl6ZWQgcGFnZSAq LwpAQCAtODY3LDE3ICs4NjcsMTAgQEAgU2VyaWFsSW5pdCh2b2lkKQogewogCWJvb2wJCWZvdW5k OwogCi0JLyoKLQkgKiBTZXQgdXAgU0xSVSBtYW5hZ2VtZW50IG9mIHRoZSBwZ19zZXJpYWwgZGF0 YS4KLQkgKi8KLQlTZXJpYWxTbHJ1Q3RsLT5QYWdlUHJlY2VkZXMgPSBTZXJpYWxQYWdlUHJlY2Vk ZXNMb2dpY2FsbHk7Ci0JU2ltcGxlTHJ1SW5pdChTZXJpYWxTbHJ1Q3RsLCAiU2VyaWFsIiwKLQkJ CQkgIE5VTV9TRVJJQUxfQlVGRkVSUywgMCwgU2VyaWFsU0xSVUxvY2ssICJwZ19zZXJpYWwiLAot CQkJCSAgTFdUUkFOQ0hFX1NFUklBTF9CVUZGRVIsIFNZTkNfSEFORExFUl9OT05FKTsKICNpZmRl ZiBVU0VfQVNTRVJUX0NIRUNLSU5HCiAJU2VyaWFsUGFnZVByZWNlZGVzTG9naWNhbGx5VW5pdFRl c3RzKCk7CiAjZW5kaWYKLQlTbHJ1UGFnZVByZWNlZGVzVW5pdFRlc3RzKFNlcmlhbFNscnVDdGws IFNFUklBTF9FTlRSSUVTUEVSUEFHRSk7CisJU2xydVBhZ2VQcmVjZWRlc1VuaXRUZXN0cyhTZXJp YWxQYWdlUHJlY2VkZXNMb2dpY2FsbHksIFNFUklBTF9FTlRSSUVTUEVSUEFHRSk7CiAKIAkvKgog CSAqIENyZWF0ZSBvciBhdHRhY2ggdG8gdGhlIFNlcmlhbENvbnRyb2wgc3RydWN0dXJlLgpAQCAt OTA3LDkgKzkwMCw5IEBAIFNlcmlhbEFkZChUcmFuc2FjdGlvbklkIHhpZCwgU2VyQ29tbWl0U2Vx Tm8gbWluQ29uZmxpY3RDb21taXRTZXFObykKIHsKIAlUcmFuc2FjdGlvbklkIHRhaWxYaWQ7CiAJ aW50CQkJdGFyZ2V0UGFnZTsKLQlpbnQJCQlzbG90bm87CiAJaW50CQkJZmlyc3RaZXJvUGFnZTsK IAlib29sCQlpc05ld1BhZ2U7CisJQnVmZmVyCQlidWZmZXI7CiAKIAlBc3NlcnQoVHJhbnNhY3Rp b25JZElzVmFsaWQoeGlkKSk7CiAKQEAgLTk1NCwxNiArOTQ3LDI0IEBAIFNlcmlhbEFkZChUcmFu c2FjdGlvbklkIHhpZCwgU2VyQ29tbWl0U2VxTm8gbWluQ29uZmxpY3RDb21taXRTZXFObykKIAkJ LyogSW5pdGlhbGl6ZSBpbnRlcnZlbmluZyBwYWdlcy4gKi8KIAkJd2hpbGUgKGZpcnN0WmVyb1Bh Z2UgIT0gdGFyZ2V0UGFnZSkKIAkJewotCQkJKHZvaWQpIFNpbXBsZUxydVplcm9QYWdlKFNlcmlh bFNscnVDdGwsIGZpcnN0WmVyb1BhZ2UpOworCQkJYnVmZmVyID0gWmVyb1NscnVCdWZmZXIoU0xS VV9TRVJJQUxfSUQsIGZpcnN0WmVyb1BhZ2UpOworCQkJUGFnZVNldEhlYWRlckRhdGFOb25SZWwo QnVmZmVyR2V0UGFnZShidWZmZXIpLCBmaXJzdFplcm9QYWdlLCBJbnZhbGlkWExvZ1JlY1B0ciwg QkxDS1NaLCBQR19NRVRBUEFHRV9MQVlPVVRfVkVSU0lPTik7CisJCQlNYXJrQnVmZmVyRGlydHko YnVmZmVyKTsKKwkJCVVubG9ja1JlbGVhc2VCdWZmZXIoYnVmZmVyKTsKIAkJCWZpcnN0WmVyb1Bh Z2UgPSBTZXJpYWxOZXh0UGFnZShmaXJzdFplcm9QYWdlKTsKIAkJfQotCQlzbG90bm8gPSBTaW1w bGVMcnVaZXJvUGFnZShTZXJpYWxTbHJ1Q3RsLCB0YXJnZXRQYWdlKTsKKwkJYnVmZmVyID0gWmVy b1NscnVCdWZmZXIoU0xSVV9TRVJJQUxfSUQsIHRhcmdldFBhZ2UpOwogCX0KIAllbHNlCi0JCXNs b3RubyA9IFNpbXBsZUxydVJlYWRQYWdlKFNlcmlhbFNscnVDdGwsIHRhcmdldFBhZ2UsIHRydWUs IHhpZCk7CisJeworCQlidWZmZXIgPSBSZWFkU2xydUJ1ZmZlcihTTFJVX1NFUklBTF9JRCwgdGFy Z2V0UGFnZSk7CisJCUxvY2tCdWZmZXIoYnVmZmVyLCBCVUZGRVJfTE9DS19FWENMVVNJVkUpOwor CX0KIAotCVNlcmlhbFZhbHVlKHNsb3RubywgeGlkKSA9IG1pbkNvbmZsaWN0Q29tbWl0U2VxTm87 Ci0JU2VyaWFsU2xydUN0bC0+c2hhcmVkLT5wYWdlX2RpcnR5W3Nsb3Rub10gPSB0cnVlOworCVNl cmlhbFZhbHVlKGJ1ZmZlciwgeGlkKSA9IG1pbkNvbmZsaWN0Q29tbWl0U2VxTm87CisJUGFnZVNl dENoZWNrc3VtSW5wbGFjZShCdWZmZXJHZXRQYWdlKGJ1ZmZlciksIFNlcmlhbFBhZ2UoeGlkKSk7 CisJTWFya0J1ZmZlckRpcnR5KGJ1ZmZlcik7CisJVW5sb2NrUmVsZWFzZUJ1ZmZlcihidWZmZXIp OwogCiAJTFdMb2NrUmVsZWFzZShTZXJpYWxTTFJVTG9jayk7CiB9CkBAIC05NzksNyArOTgwLDcg QEAgU2VyaWFsR2V0TWluQ29uZmxpY3RDb21taXRTZXFObyhUcmFuc2FjdGlvbklkIHhpZCkKIAlU cmFuc2FjdGlvbklkIGhlYWRYaWQ7CiAJVHJhbnNhY3Rpb25JZCB0YWlsWGlkOwogCVNlckNvbW1p dFNlcU5vIHZhbDsKLQlpbnQJCQlzbG90bm87CisJQnVmZmVyCQlidWZmZXI7CiAKIAlBc3NlcnQo VHJhbnNhY3Rpb25JZElzVmFsaWQoeGlkKSk7CiAKQEAgLTEwMDEsOSArMTAwMiw5IEBAIFNlcmlh bEdldE1pbkNvbmZsaWN0Q29tbWl0U2VxTm8oVHJhbnNhY3Rpb25JZCB4aWQpCiAJICogVGhlIGZv bGxvd2luZyBmdW5jdGlvbiBtdXN0IGJlIGNhbGxlZCB3aXRob3V0IGhvbGRpbmcgU2VyaWFsU0xS VUxvY2ssCiAJICogYnV0IHdpbGwgcmV0dXJuIHdpdGggdGhhdCBsb2NrIGhlbGQsIHdoaWNoIG11 c3QgdGhlbiBiZSByZWxlYXNlZC4KIAkgKi8KLQlzbG90bm8gPSBTaW1wbGVMcnVSZWFkUGFnZV9S ZWFkT25seShTZXJpYWxTbHJ1Q3RsLAotCQkJCQkJCQkJCVNlcmlhbFBhZ2UoeGlkKSwgeGlkKTsK LQl2YWwgPSBTZXJpYWxWYWx1ZShzbG90bm8sIHhpZCk7CisJYnVmZmVyID0gUmVhZFNscnVCdWZm ZXIoU0xSVV9TRVJJQUxfSUQsIFNlcmlhbFBhZ2UoeGlkKSk7CisJdmFsID0gU2VyaWFsVmFsdWUo YnVmZmVyLCB4aWQpOworCVJlbGVhc2VCdWZmZXIoYnVmZmVyKTsKIAlMV0xvY2tSZWxlYXNlKFNl cmlhbFNMUlVMb2NrKTsKIAlyZXR1cm4gdmFsOwogfQpAQCAtMTEyMiwxOSArMTEyMyw3IEBAIENo ZWNrUG9pbnRQcmVkaWNhdGUodm9pZCkKIAlMV0xvY2tSZWxlYXNlKFNlcmlhbFNMUlVMb2NrKTsK IAogCS8qIFRydW5jYXRlIGF3YXkgcGFnZXMgdGhhdCBhcmUgbm8gbG9uZ2VyIHJlcXVpcmVkICov Ci0JU2ltcGxlTHJ1VHJ1bmNhdGUoU2VyaWFsU2xydUN0bCwgdGFpbFBhZ2UpOwotCi0JLyoKLQkg KiBXcml0ZSBkaXJ0eSBTTFJVIHBhZ2VzIHRvIGRpc2sKLQkgKgotCSAqIFRoaXMgaXMgbm90IGFj dHVhbGx5IG5lY2Vzc2FyeSBmcm9tIGEgY29ycmVjdG5lc3MgcG9pbnQgb2Ygdmlldy4gV2UgZG8K LQkgKiBpdCBtZXJlbHkgYXMgYSBkZWJ1Z2dpbmcgYWlkLgotCSAqCi0JICogV2UncmUgZG9pbmcg dGhpcyBhZnRlciB0aGUgdHJ1bmNhdGlvbiB0byBhdm9pZCB3cml0aW5nIHBhZ2VzIHJpZ2h0Ci0J ICogYmVmb3JlIGRlbGV0aW5nIHRoZSBmaWxlIGluIHdoaWNoIHRoZXkgc2l0LCB3aGljaCB3b3Vs ZCBiZSBjb21wbGV0ZWx5Ci0JICogcG9pbnRsZXNzLgotCSAqLwotCVNpbXBsZUxydVdyaXRlQWxs KFNlcmlhbFNscnVDdGwsIHRydWUpOworCVNpbXBsZUxydVRydW5jYXRlKFNMUlVfU0VSSUFMX0lE LCBTZXJpYWxQYWdlUHJlY2VkZXNMb2dpY2FsbHksIHRhaWxQYWdlKTsKIH0KIAogLyotLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0qLwpAQCAtMTM5Niw3ICsxMzg1LDYgQEAgUHJlZGljYXRlTG9ja1NobWVtU2l6ZSh2 b2lkKQogCiAJLyogU2hhcmVkIG1lbW9yeSBzdHJ1Y3R1cmVzIGZvciBTTFJVIHRyYWNraW5nIG9m IG9sZCBjb21taXR0ZWQgeGlkcy4gKi8KIAlzaXplID0gYWRkX3NpemUoc2l6ZSwgc2l6ZW9mKFNl cmlhbENvbnRyb2xEYXRhKSk7Ci0Jc2l6ZSA9IGFkZF9zaXplKHNpemUsIFNpbXBsZUxydVNobWVt U2l6ZShOVU1fU0VSSUFMX0JVRkZFUlMsIDApKTsKIAogCXJldHVybiBzaXplOwogfQpkaWZmIC0t Z2l0IGEvc3JjL2JhY2tlbmQvc3RvcmFnZS9zbWdyL21kLmMgYi9zcmMvYmFja2VuZC9zdG9yYWdl L3NtZ3IvbWQuYwppbmRleCAzOTk4Mjk2YTYyZi4uYWM0MzJlZGFhZWUgMTAwNjQ0Ci0tLSBhL3Ny Yy9iYWNrZW5kL3N0b3JhZ2Uvc21nci9tZC5jCisrKyBiL3NyYy9iYWNrZW5kL3N0b3JhZ2Uvc21n ci9tZC5jCkBAIC00NywxMyArNDcsMTQgQEAKICAqCWVhc2llciB0byBzdXBwb3J0IHJlbGF0aW9u cyB0aGF0IGFyZSBsYXJnZXIgdGhhbiB0aGUgb3BlcmF0aW5nCiAgKglzeXN0ZW0ncyBmaWxlIHNp emUgbGltaXQgKG9mdGVuIDJHQnl0ZXMpLiAgSW4gb3JkZXIgdG8gZG8gdGhhdCwKICAqCXdlIGJy ZWFrIHJlbGF0aW9ucyB1cCBpbnRvICJzZWdtZW50IiBmaWxlcyB0aGF0IGFyZSBlYWNoIHNob3J0 ZXIgdGhhbgotICoJdGhlIE9TIGZpbGUgc2l6ZSBsaW1pdC4gIFRoZSBzZWdtZW50IHNpemUgaXMg c2V0IGJ5IHRoZSBSRUxTRUdfU0laRQotICoJY29uZmlndXJhdGlvbiBjb25zdGFudCBpbiBwZ19j b25maWcuaC4KKyAqCXRoZSBPUyBmaWxlIHNpemUgbGltaXQuICBUaGUgc2VnbWVudCBzaXplIGlz IHNldCBieSAKKyAqCXRoZSBSRUxTRUdfU0laRSBjb25maWd1cmF0aW9uIGNvbnN0YW50IGluIHBn X2NvbmZpZy5oLiBvciBieSAKKyAqICBTTFJVX1BBR0VTX1BFUl9TRUdNRU5UIGRlcGVuZGluZyBv biB0aGUgdHlwZSBvZiBkYXRhLgogICoKICAqCU9uIGRpc2ssIGEgcmVsYXRpb24gbXVzdCBjb25z aXN0IG9mIGNvbnNlY3V0aXZlbHkgbnVtYmVyZWQgc2VnbWVudAogICoJZmlsZXMgaW4gdGhlIHBh dHRlcm4KLSAqCQktLSBaZXJvIG9yIG1vcmUgZnVsbCBzZWdtZW50cyBvZiBleGFjdGx5IFJFTFNF R19TSVpFIGJsb2NrcyBlYWNoCi0gKgkJLS0gRXhhY3RseSBvbmUgcGFydGlhbCBzZWdtZW50IG9m IHNpemUgMCA8PSBzaXplIDwgUkVMU0VHX1NJWkUgYmxvY2tzCisgKgkJLS0gWmVybyBvciBtb3Jl IGZ1bGwgc2VnbWVudHMgb2YgZXhhY3RseSBTRUdTSVpFKHNmaWxlKSBibG9ja3MgZWFjaAorICoJ CS0tIEV4YWN0bHkgb25lIHBhcnRpYWwgc2VnbWVudCBvZiBzaXplIDAgPD0gc2l6ZSA8IFNFR1NJ WkUoc2ZpbGUpIGJsb2NrcwogICoJCS0tIE9wdGlvbmFsbHksIGFueSBudW1iZXIgb2YgaW5hY3Rp dmUgc2VnbWVudHMgb2Ygc2l6ZSAwIGJsb2Nrcy4KICAqCVRoZSBmdWxsIGFuZCBwYXJ0aWFsIHNl Z21lbnRzIGFyZSBjb2xsZWN0aXZlbHkgdGhlICJhY3RpdmUiIHNlZ21lbnRzLgogICoJSW5hY3Rp dmUgc2VnbWVudHMgYXJlIHRob3NlIHRoYXQgb25jZSBjb250YWluZWQgZGF0YSBidXQgYXJlIGN1 cnJlbnRseQpAQCAtNjYsMTAgKzY3LDEwIEBACiAgKglvdXQgdG8gYW4gdW5saW5rZWQgb2xkIGNv cHkgb2YgYSBzZWdtZW50IGZpbGUgdGhhdCB3aWxsIGV2ZW50dWFsbHkKICAqCWRpc2FwcGVhci4K ICAqCi0gKglGaWxlIGRlc2NyaXB0b3JzIGFyZSBzdG9yZWQgaW4gdGhlIHBlci1mb3JrIG1kX3Nl Z19mZHMgYXJyYXlzIGluc2lkZQotICoJU01nclJlbGF0aW9uLiBUaGUgbGVuZ3RoIG9mIHRoZXNl IGFycmF5cyBpcyBzdG9yZWQgaW4gbWRfbnVtX29wZW5fc2Vncy4KLSAqCU5vdGUgdGhhdCBhIGZv cmsncyBtZF9udW1fb3Blbl9zZWdzIGhhdmluZyBhIHNwZWNpZmljIHZhbHVlIGRvZXMgbm90Ci0g KgluZWNlc3NhcmlseSBtZWFuIHRoZSByZWxhdGlvbiBkb2Vzbid0IGhhdmUgYWRkaXRpb25hbCBz ZWdtZW50czsgd2UgbWF5CisgKglGaWxlIGRlc2NyaXB0b3JzIGFyZSBzdG9yZWQgaW4gdGhlIG1k X3NlZ19mZHMgYXJyYXkgaW5zaWRlCisgKglTTWdyRmlsZURhdGEuIFRoZSBsZW5ndGggb2YgdGhl IGFycmF5IGlzIHN0b3JlZCBpbiBtZF9udW1fb3Blbl9zZWdzLgorICoJTm90ZSB0aGF0IG1kX251 bV9vcGVuX3NlZ3MgaGF2aW5nIGEgc3BlY2lmaWMgdmFsdWUgZG9lcyBub3QKKyAqCW5lY2Vzc2Fy aWx5IG1lYW4gdGhlIGZpbGUgZG9lc24ndCBoYXZlIGFkZGl0aW9uYWwgc2VnbWVudHM7IHdlIG1h eQogICoJanVzdCBub3QgaGF2ZSBvcGVuZWQgdGhlIG5leHQgc2VnbWVudCB5ZXQuICAoV2UgY291 bGQgbm90IGhhdmUgImFsbAogICoJc2VnbWVudHMgYXJlIGluIHRoZSBhcnJheSIgYXMgYW4gaW52 YXJpYW50IGFueXdheSwgc2luY2UgYW5vdGhlciBiYWNrZW5kCiAgKgljb3VsZCBleHRlbmQgdGhl IHJlbGF0aW9uIHdoaWxlIHdlIGFyZW4ndCBsb29raW5nLikgIFdlIGRvIG5vdCBoYXZlCkBAIC0x MTAsNyArMTExLDcgQEAgc3RhdGljIE1lbW9yeUNvbnRleHQgTWRDeHQ7CQkvKiBjb250ZXh0IGZv ciBhbGwgTWRmZFZlYyBvYmplY3RzICovCiAjZGVmaW5lIEVYVEVOU0lPTl9DUkVBVEVfUkVDT1ZF UlkJKDEgPDwgMykKIC8qCiAgKiBBbGxvdyBvcGVuaW5nIHNlZ21lbnRzIHdoaWNoIGFyZSBwcmVj ZWRlZCBieSBzZWdtZW50cyBzbWFsbGVyIHRoYW4KLSAqIFJFTFNFR19TSVpFLCBlLmcuIGluYWN0 aXZlIHNlZ21lbnRzIChzZWUgYWJvdmUpLiBOb3RlIHRoYXQgdGhpcyBicmVha3MKKyAqIFNFR1NJ WkUsIGUuZy4gaW5hY3RpdmUgc2VnbWVudHMgKHNlZSBhYm92ZSkuIE5vdGUgdGhhdCB0aGlzIGJy ZWFrcwogICogbWRuYmxvY2tzKCkgYW5kIHJlbGF0ZWQgZnVuY3Rpb25hbGl0eSBoZW5jZWZvcnRo IC0gd2hpY2ggY3VycmVudGx5IGlzIG9rLAogICogYmVjYXVzZSB0aGlzIGlzIG9ubHkgcmVxdWly ZWQgaW4gdGhlIGNoZWNrcG9pbnRlciB3aGljaCBuZXZlciB1c2VzCiAgKiBtZG5ibG9ja3MoKS4K QEAgLTExOSwyOCArMTIwLDI1IEBAIHN0YXRpYyBNZW1vcnlDb250ZXh0IE1kQ3h0OwkJLyogY29u dGV4dCBmb3IgYWxsIE1kZmRWZWMgb2JqZWN0cyAqLwogLyogZG9uJ3QgdHJ5IHRvIG9wZW4gYSBz ZWdtZW50LCBpZiBub3QgYWxyZWFkeSBvcGVuICovCiAjZGVmaW5lIEVYVEVOU0lPTl9ET05UX09Q RU4JCQkoMSA8PCA1KQogCisvKiBzZWdtZW50IHNpemUgZGVwZW5kaW5nIG9uIGRhdGEgdHlwZSAq LworI2RlZmluZSBTRUdTSVpFKHNmaWxlKSAoc2ZpbGUtPnNtZ3JfbG9jYXRvci5sb2NhdG9yLnNw Y09pZCA9PSA5ID8gXAorCVNMUlVfUEFHRVNfUEVSX1NFR01FTlQgOiBcCisJUkVMU0VHX1NJWkUp CisKIAogLyogbG9jYWwgcm91dGluZXMgKi8KLXN0YXRpYyB2b2lkIG1kdW5saW5rZm9yayhSZWxG aWxlTG9jYXRvckJhY2tlbmQgcmxvY2F0b3IsIEZvcmtOdW1iZXIgZm9ya051bSwKLQkJCQkJCSBi b29sIGlzUmVkbyk7Ci1zdGF0aWMgTWRmZFZlYyAqbWRvcGVuZm9yayhTTWdyUmVsYXRpb24gcmVs biwgRm9ya051bWJlciBmb3JrbnVtLCBpbnQgYmVoYXZpb3IpOwotc3RhdGljIHZvaWQgcmVnaXN0 ZXJfZGlydHlfc2VnbWVudChTTWdyUmVsYXRpb24gcmVsbiwgRm9ya051bWJlciBmb3JrbnVtLAot CQkJCQkJCQkgICBNZGZkVmVjICpzZWcpOwotc3RhdGljIHZvaWQgcmVnaXN0ZXJfdW5saW5rX3Nl Z21lbnQoUmVsRmlsZUxvY2F0b3JCYWNrZW5kIHJsb2NhdG9yLCBGb3JrTnVtYmVyIGZvcmtudW0s Ci0JCQkJCQkJCQlCbG9ja051bWJlciBzZWdubyk7Ci1zdGF0aWMgdm9pZCByZWdpc3Rlcl9mb3Jn ZXRfcmVxdWVzdChSZWxGaWxlTG9jYXRvckJhY2tlbmQgcmxvY2F0b3IsIEZvcmtOdW1iZXIgZm9y a251bSwKLQkJCQkJCQkJCUJsb2NrTnVtYmVyIHNlZ25vKTsKLXN0YXRpYyB2b2lkIF9mZHZlY19y ZXNpemUoU01nclJlbGF0aW9uIHJlbG4sCi0JCQkJCQkgIEZvcmtOdW1iZXIgZm9ya251bSwKLQkJ CQkJCSAgaW50IG5zZWcpOwotc3RhdGljIGNoYXIgKl9tZGZkX3NlZ3BhdGgoU01nclJlbGF0aW9u IHJlbG4sIEZvcmtOdW1iZXIgZm9ya251bSwKLQkJCQkJCSAgIEJsb2NrTnVtYmVyIHNlZ25vKTsK LXN0YXRpYyBNZGZkVmVjICpfbWRmZF9vcGVuc2VnKFNNZ3JSZWxhdGlvbiByZWxuLCBGb3JrTnVt YmVyIGZvcmtubywKK3N0YXRpYyB2b2lkIG1kdW5saW5rZm9yayhTTWdyRmlsZUxvY2F0b3Igc2xv Y2F0b3IsIGJvb2wgaXNSZWRvKTsKK3N0YXRpYyBNZGZkVmVjICptZG9wZW5mb3JrKFNNZ3JGaWxl SGFuZGxlIHNmaWxlLCBpbnQgYmVoYXZpb3IpOworc3RhdGljIHZvaWQgcmVnaXN0ZXJfZGlydHlf c2VnbWVudChTTWdyRmlsZUhhbmRsZSBzZmlsZSwgTWRmZFZlYyAqc2VnKTsKK3N0YXRpYyB2b2lk IHJlZ2lzdGVyX3VubGlua19zZWdtZW50KFNNZ3JGaWxlTG9jYXRvciBzbG9jYXRvciwgQmxvY2tO dW1iZXIgc2Vnbm8pOworc3RhdGljIHZvaWQgcmVnaXN0ZXJfZm9yZ2V0X3JlcXVlc3QoU01nckZp bGVMb2NhdG9yIHNsb2NhdG9yLCBCbG9ja051bWJlciBzZWdubyk7CitzdGF0aWMgdm9pZCBfZmR2 ZWNfcmVzaXplKFNNZ3JGaWxlSGFuZGxlIHNmaWxlLCBpbnQgbnNlZyk7CitzdGF0aWMgY2hhciAq X21kZmRfc2VncGF0aChTTWdyRmlsZUhhbmRsZSBzZmlsZSwgQmxvY2tOdW1iZXIgc2Vnbm8pOwor c3RhdGljIE1kZmRWZWMgKl9tZGZkX29wZW5zZWcoU01nckZpbGVIYW5kbGUgc2ZpbGUsCiAJCQkJ CQkJICBCbG9ja051bWJlciBzZWdubywgaW50IG9mbGFncyk7Ci1zdGF0aWMgTWRmZFZlYyAqX21k ZmRfZ2V0c2VnKFNNZ3JSZWxhdGlvbiByZWxuLCBGb3JrTnVtYmVyIGZvcmtubywKK3N0YXRpYyBN ZGZkVmVjICpfbWRmZF9nZXRzZWcoU01nckZpbGVIYW5kbGUgc2ZpbGUsCiAJCQkJCQkJIEJsb2Nr TnVtYmVyIGJsa25vLCBib29sIHNraXBGc3luYywgaW50IGJlaGF2aW9yKTsKLXN0YXRpYyBCbG9j a051bWJlciBfbWRuYmxvY2tzKFNNZ3JSZWxhdGlvbiByZWxuLCBGb3JrTnVtYmVyIGZvcmtudW0s Ci0JCQkJCQkJICBNZGZkVmVjICpzZWcpOworc3RhdGljIEJsb2NrTnVtYmVyIF9tZG5ibG9ja3Mo U01nckZpbGVIYW5kbGUgc2ZpbGUsIE1kZmRWZWMgKnNlZyk7CiAKIAogLyoKQEAgLTE2MCw3ICsx NTgsNyBAQCBtZGluaXQodm9pZCkKICAqIE5vdGU6IHRoaXMgd2lsbCByZXR1cm4gdHJ1ZSBmb3Ig bGluZ2VyaW5nIGZpbGVzLCB3aXRoIHBlbmRpbmcgZGVsZXRpb25zCiAgKi8KIGJvb2wKLW1kZXhp c3RzKFNNZ3JSZWxhdGlvbiByZWxuLCBGb3JrTnVtYmVyIGZvcmtOdW0pCittZGV4aXN0cyhTTWdy RmlsZUhhbmRsZSBzZmlsZSkKIHsKIAkvKgogCSAqIENsb3NlIGl0IGZpcnN0LCB0byBlbnN1cmUg dGhhdCB3ZSBub3RpY2UgaWYgdGhlIGZvcmsgaGFzIGJlZW4gdW5saW5rZWQKQEAgLTE2OCw5ICsx NjYsOSBAQCBtZGV4aXN0cyhTTWdyUmVsYXRpb24gcmVsbiwgRm9ya051bWJlciBmb3JrTnVtKQog CSAqIHdoaWNoIGFscmVhZHkgY2xvc2VzIHJlbGF0aW9ucyB3aGVuIGRyb3BwaW5nIHRoZW0uCiAJ ICovCiAJaWYgKCFJblJlY292ZXJ5KQotCQltZGNsb3NlKHJlbG4sIGZvcmtOdW0pOworCQltZGNs b3NlKHNmaWxlKTsKIAotCXJldHVybiAobWRvcGVuZm9yayhyZWxuLCBmb3JrTnVtLCBFWFRFTlNJ T05fUkVUVVJOX05VTEwpICE9IE5VTEwpOworCXJldHVybiAobWRvcGVuZm9yayhzZmlsZSwgRVhU RU5TSU9OX1JFVFVSTl9OVUxMKSAhPSBOVUxMKTsKIH0KIAogLyoKQEAgLTE3OSwxNiArMTc3LDE2 IEBAIG1kZXhpc3RzKFNNZ3JSZWxhdGlvbiByZWxuLCBGb3JrTnVtYmVyIGZvcmtOdW0pCiAgKiBJ ZiBpc1JlZG8gaXMgdHJ1ZSwgaXQncyBva2F5IGZvciB0aGUgcmVsYXRpb24gdG8gZXhpc3QgYWxy ZWFkeS4KICAqLwogdm9pZAotbWRjcmVhdGUoU01nclJlbGF0aW9uIHJlbG4sIEZvcmtOdW1iZXIg Zm9ya051bSwgYm9vbCBpc1JlZG8pCittZGNyZWF0ZShTTWdyRmlsZUhhbmRsZSBzZmlsZSwgYm9v bCBpc1JlZG8pCiB7CiAJTWRmZFZlYyAgICAqbWRmZDsKIAljaGFyCSAgICpwYXRoOwogCUZpbGUJ CWZkOwogCi0JaWYgKGlzUmVkbyAmJiByZWxuLT5tZF9udW1fb3Blbl9zZWdzW2ZvcmtOdW1dID4g MCkKKwlpZiAoaXNSZWRvICYmIHNmaWxlLT5tZF9udW1fb3Blbl9zZWdzID4gMCkKIAkJcmV0dXJu OwkJCQkJLyogY3JlYXRlZCBhbmQgb3BlbmVkIGFscmVhZHkuLi4gKi8KIAotCUFzc2VydChyZWxu LT5tZF9udW1fb3Blbl9zZWdzW2ZvcmtOdW1dID09IDApOworCUFzc2VydChzZmlsZS0+bWRfbnVt X29wZW5fc2VncyA9PSAwKTsKIAogCS8qCiAJICogV2UgbWF5IGJlIHVzaW5nIHRoZSB0YXJnZXQg dGFibGUgc3BhY2UgZm9yIHRoZSBmaXJzdCB0aW1lIGluIHRoaXMKQEAgLTE5OSwxMSArMTk3LDE0 IEBAIG1kY3JlYXRlKFNNZ3JSZWxhdGlvbiByZWxuLCBGb3JrTnVtYmVyIGZvcmtOdW0sIGJvb2wg aXNSZWRvKQogCSAqIHNob3VsZCBiZSBoZXJlIGFuZCBub3QgaW4gY29tbWFuZHMvdGFibGVzcGFj ZS5jPyAgQnV0IHRoYXQgd291bGQgaW1wbHkKIAkgKiBpbXBvcnRpbmcgYSBsb3Qgb2Ygc3R1ZmYg dGhhdCBzbWdyLmMgb3VnaHRuJ3Qga25vdywgZWl0aGVyLgogCSAqLwotCVRhYmxlc3BhY2VDcmVh dGVEYnNwYWNlKHJlbG4tPnNtZ3JfcmxvY2F0b3IubG9jYXRvci5zcGNPaWQsCi0JCQkJCQkJcmVs bi0+c21ncl9ybG9jYXRvci5sb2NhdG9yLmRiT2lkLAotCQkJCQkJCWlzUmVkbyk7CisJaWYgKHNm aWxlLT5zbWdyX2xvY2F0b3IubG9jYXRvci5zcGNPaWQgIT0gU0xSVV9TUENfT0lEKQorCXsKKwkJ VGFibGVzcGFjZUNyZWF0ZURic3BhY2Uoc2ZpbGUtPnNtZ3JfbG9jYXRvci5sb2NhdG9yLnNwY09p ZCwKKwkJCQkJCQkJc2ZpbGUtPnNtZ3JfbG9jYXRvci5sb2NhdG9yLmRiT2lkLAorCQkJCQkJCQlp c1JlZG8pOworCX0KIAotCXBhdGggPSByZWxwYXRoKHJlbG4tPnNtZ3JfcmxvY2F0b3IsIGZvcmtO dW0pOworCXBhdGggPSBzbWdyZmlsZXBhdGgoc2ZpbGUtPnNtZ3JfbG9jYXRvcik7CiAKIAlmZCA9 IFBhdGhOYW1lT3BlbkZpbGUocGF0aCwgT19SRFdSIHwgT19DUkVBVCB8IE9fRVhDTCB8IFBHX0JJ TkFSWSk7CiAKQEAgLTIyNSw4ICsyMjYsOCBAQCBtZGNyZWF0ZShTTWdyUmVsYXRpb24gcmVsbiwg Rm9ya051bWJlciBmb3JrTnVtLCBib29sIGlzUmVkbykKIAogCXBmcmVlKHBhdGgpOwogCi0JX2Zk dmVjX3Jlc2l6ZShyZWxuLCBmb3JrTnVtLCAxKTsKLQltZGZkID0gJnJlbG4tPm1kX3NlZ19mZHNb Zm9ya051bV1bMF07CisJX2ZkdmVjX3Jlc2l6ZShzZmlsZSwgMSk7CisJbWRmZCA9ICZzZmlsZS0+ bWRfc2VnX2Zkc1swXTsKIAltZGZkLT5tZGZkX3ZmZCA9IGZkOwogCW1kZmQtPm1kZmRfc2Vnbm8g PSAwOwogfQpAQCAtMjc4LDE2ICsyNzksOSBAQCBtZGNyZWF0ZShTTWdyUmVsYXRpb24gcmVsbiwg Rm9ya051bWJlciBmb3JrTnVtLCBib29sIGlzUmVkbykKICAqIHdlIGFyZSB1c3VhbGx5IG5vdCBp biBhIHRyYW5zYWN0aW9uIGFueW1vcmUgd2hlbiB0aGlzIGlzIGNhbGxlZC4KICAqLwogdm9pZAot bWR1bmxpbmsoUmVsRmlsZUxvY2F0b3JCYWNrZW5kIHJsb2NhdG9yLCBGb3JrTnVtYmVyIGZvcmtO dW0sIGJvb2wgaXNSZWRvKQorbWR1bmxpbmsoU01nckZpbGVMb2NhdG9yIHNsb2NhdG9yLCBib29s IGlzUmVkbykKIHsKLQkvKiBOb3cgZG8gdGhlIHBlci1mb3JrIHdvcmsgKi8KLQlpZiAoZm9ya051 bSA9PSBJbnZhbGlkRm9ya051bWJlcikKLQl7Ci0JCWZvciAoZm9ya051bSA9IDA7IGZvcmtOdW0g PD0gTUFYX0ZPUktOVU07IGZvcmtOdW0rKykKLQkJCW1kdW5saW5rZm9yayhybG9jYXRvciwgZm9y a051bSwgaXNSZWRvKTsKLQl9Ci0JZWxzZQotCQltZHVubGlua2ZvcmsocmxvY2F0b3IsIGZvcmtO dW0sIGlzUmVkbyk7CisJbWR1bmxpbmtmb3JrKHNsb2NhdG9yLCBpc1JlZG8pOwogfQogCiAvKgpA QCAtMzE1LDI1ICszMDksMjUgQEAgZG9fdHJ1bmNhdGUoY29uc3QgY2hhciAqcGF0aCkKIH0KIAog c3RhdGljIHZvaWQKLW1kdW5saW5rZm9yayhSZWxGaWxlTG9jYXRvckJhY2tlbmQgcmxvY2F0b3Is IEZvcmtOdW1iZXIgZm9ya051bSwgYm9vbCBpc1JlZG8pCittZHVubGlua2ZvcmsoU01nckZpbGVM b2NhdG9yIHNsb2NhdG9yLCBib29sIGlzUmVkbykKIHsKIAljaGFyCSAgICpwYXRoOwogCWludAkJ CXJldDsKIAotCXBhdGggPSByZWxwYXRoKHJsb2NhdG9yLCBmb3JrTnVtKTsKKwlwYXRoID0gc21n cmZpbGVwYXRoKHNsb2NhdG9yKTsKIAogCS8qCiAJICogRGVsZXRlIG9yIHRydW5jYXRlIHRoZSBm aXJzdCBzZWdtZW50LgogCSAqLwotCWlmIChpc1JlZG8gfHwgZm9ya051bSAhPSBNQUlOX0ZPUktO VU0gfHwgUmVsRmlsZUxvY2F0b3JCYWNrZW5kSXNUZW1wKHJsb2NhdG9yKSkKKwlpZiAoaXNSZWRv IHx8IHNsb2NhdG9yLmZvcmtudW0gIT0gTUFJTl9GT1JLTlVNIHx8IFNNZ3JGaWxlTG9jYXRvcklz VGVtcChzbG9jYXRvcikpCiAJewotCQlpZiAoIVJlbEZpbGVMb2NhdG9yQmFja2VuZElzVGVtcChy bG9jYXRvcikpCisJCWlmICghU01nckZpbGVMb2NhdG9ySXNUZW1wKHNsb2NhdG9yKSkKIAkJewog CQkJLyogUHJldmVudCBvdGhlciBiYWNrZW5kcycgZmRzIGZyb20gaG9sZGluZyBvbiB0byB0aGUg ZGlzayBzcGFjZSAqLwogCQkJcmV0ID0gZG9fdHJ1bmNhdGUocGF0aCk7CiAKIAkJCS8qIEZvcmdl dCBhbnkgcGVuZGluZyBzeW5jIHJlcXVlc3RzIGZvciB0aGUgZmlyc3Qgc2VnbWVudCAqLwotCQkJ cmVnaXN0ZXJfZm9yZ2V0X3JlcXVlc3QocmxvY2F0b3IsIGZvcmtOdW0sIDAgLyogZmlyc3Qgc2Vn ICovICk7CisJCQlyZWdpc3Rlcl9mb3JnZXRfcmVxdWVzdChzbG9jYXRvciwgMCAvKiBmaXJzdCBz ZWcgKi8gKTsKIAkJfQogCQllbHNlCiAJCQlyZXQgPSAwOwpAQCAtMzU0LDcgKzM0OCw3IEBAIG1k dW5saW5rZm9yayhSZWxGaWxlTG9jYXRvckJhY2tlbmQgcmxvY2F0b3IsIEZvcmtOdW1iZXIgZm9y a051bSwgYm9vbCBpc1JlZG8pCiAJCXJldCA9IGRvX3RydW5jYXRlKHBhdGgpOwogCiAJCS8qIFJl Z2lzdGVyIHJlcXVlc3QgdG8gdW5saW5rIGZpcnN0IHNlZ21lbnQgbGF0ZXIgKi8KLQkJcmVnaXN0 ZXJfdW5saW5rX3NlZ21lbnQocmxvY2F0b3IsIGZvcmtOdW0sIDAgLyogZmlyc3Qgc2VnICovICk7 CisJCXJlZ2lzdGVyX3VubGlua19zZWdtZW50KHNsb2NhdG9yLCAwIC8qIGZpcnN0IHNlZyAqLyAp OwogCX0KIAogCS8qCkBAIC0zNzMsNyArMzY3LDcgQEAgbWR1bmxpbmtmb3JrKFJlbEZpbGVMb2Nh dG9yQmFja2VuZCBybG9jYXRvciwgRm9ya051bWJlciBmb3JrTnVtLCBib29sIGlzUmVkbykKIAkJ ewogCQkJc3ByaW50ZihzZWdwYXRoLCAiJXMuJXUiLCBwYXRoLCBzZWdubyk7CiAKLQkJCWlmICgh UmVsRmlsZUxvY2F0b3JCYWNrZW5kSXNUZW1wKHJsb2NhdG9yKSkKKwkJCWlmICghU01nckZpbGVM b2NhdG9ySXNUZW1wKHNsb2NhdG9yKSkKIAkJCXsKIAkJCQkvKgogCQkJCSAqIFByZXZlbnQgb3Ro ZXIgYmFja2VuZHMnIGZkcyBmcm9tIGhvbGRpbmcgb24gdG8gdGhlIGRpc2sKQEAgLTM4Niw3ICsz ODAsNyBAQCBtZHVubGlua2ZvcmsoUmVsRmlsZUxvY2F0b3JCYWNrZW5kIHJsb2NhdG9yLCBGb3Jr TnVtYmVyIGZvcmtOdW0sIGJvb2wgaXNSZWRvKQogCQkJCSAqIEZvcmdldCBhbnkgcGVuZGluZyBz eW5jIHJlcXVlc3RzIGZvciB0aGlzIHNlZ21lbnQgYmVmb3JlIHdlCiAJCQkJICogdHJ5IHRvIHVu bGluay4KIAkJCQkgKi8KLQkJCQlyZWdpc3Rlcl9mb3JnZXRfcmVxdWVzdChybG9jYXRvciwgZm9y a051bSwgc2Vnbm8pOworCQkJCXJlZ2lzdGVyX2ZvcmdldF9yZXF1ZXN0KHNsb2NhdG9yLCBzZWdu byk7CiAJCQl9CiAKIAkJCWlmICh1bmxpbmsoc2VncGF0aCkgPCAwKQpAQCAtNDE1LDcgKzQwOSw3 IEBAIG1kdW5saW5rZm9yayhSZWxGaWxlTG9jYXRvckJhY2tlbmQgcmxvY2F0b3IsIEZvcmtOdW1i ZXIgZm9ya051bSwgYm9vbCBpc1JlZG8pCiAgKgkJY2F1c2VzIGludGVydmVuaW5nIGZpbGUgc3Bh Y2UgdG8gYmVjb21lIGZpbGxlZCB3aXRoIHplcm9lcy4KICAqLwogdm9pZAotbWRleHRlbmQoU01n clJlbGF0aW9uIHJlbG4sIEZvcmtOdW1iZXIgZm9ya251bSwgQmxvY2tOdW1iZXIgYmxvY2tudW0s CittZGV4dGVuZChTTWdyRmlsZUhhbmRsZSBzZmlsZSwgQmxvY2tOdW1iZXIgYmxvY2tudW0sCiAJ CSBjaGFyICpidWZmZXIsIGJvb2wgc2tpcEZzeW5jKQogewogCW9mZl90CQlzZWVrcG9zOwpAQCAt NDI0LDcgKzQxOCw3IEBAIG1kZXh0ZW5kKFNNZ3JSZWxhdGlvbiByZWxuLCBGb3JrTnVtYmVyIGZv cmtudW0sIEJsb2NrTnVtYmVyIGJsb2NrbnVtLAogCiAJLyogVGhpcyBhc3NlcnQgaXMgdG9vIGV4 cGVuc2l2ZSB0byBoYXZlIG9uIG5vcm1hbGx5IC4uLiAqLwogI2lmZGVmIENIRUNLX1dSSVRFX1ZT X0VYVEVORAotCUFzc2VydChibG9ja251bSA+PSBtZG5ibG9ja3MocmVsbiwgZm9ya251bSkpOwor CUFzc2VydChibG9ja251bSA+PSBtZG5ibG9ja3Moc2ZpbGUpKTsKICNlbmRpZgogCiAJLyoKQEAg LTQzNywxNCArNDMxLDE0IEBAIG1kZXh0ZW5kKFNNZ3JSZWxhdGlvbiByZWxuLCBGb3JrTnVtYmVy IGZvcmtudW0sIEJsb2NrTnVtYmVyIGJsb2NrbnVtLAogCQllcmVwb3J0KEVSUk9SLAogCQkJCShl cnJjb2RlKEVSUkNPREVfUFJPR1JBTV9MSU1JVF9FWENFRURFRCksCiAJCQkJIGVycm1zZygiY2Fu bm90IGV4dGVuZCBmaWxlIFwiJXNcIiBiZXlvbmQgJXUgYmxvY2tzIiwKLQkJCQkJCXJlbHBhdGgo cmVsbi0+c21ncl9ybG9jYXRvciwgZm9ya251bSksCisJCQkJCQlzbWdyZmlsZXBhdGgoc2ZpbGUt PnNtZ3JfbG9jYXRvciksCiAJCQkJCQlJbnZhbGlkQmxvY2tOdW1iZXIpKSk7CiAKLQl2ID0gX21k ZmRfZ2V0c2VnKHJlbG4sIGZvcmtudW0sIGJsb2NrbnVtLCBza2lwRnN5bmMsIEVYVEVOU0lPTl9D UkVBVEUpOworCXYgPSBfbWRmZF9nZXRzZWcoc2ZpbGUsIGJsb2NrbnVtLCBza2lwRnN5bmMsIEVY VEVOU0lPTl9DUkVBVEUpOwogCi0Jc2Vla3BvcyA9IChvZmZfdCkgQkxDS1NaICogKGJsb2NrbnVt ICUgKChCbG9ja051bWJlcikgUkVMU0VHX1NJWkUpKTsKKwlzZWVrcG9zID0gKG9mZl90KSBCTENL U1ogKiAoYmxvY2tudW0gJSAoKEJsb2NrTnVtYmVyKSBTRUdTSVpFKHNmaWxlKSkpOwogCi0JQXNz ZXJ0KHNlZWtwb3MgPCAob2ZmX3QpIEJMQ0tTWiAqIFJFTFNFR19TSVpFKTsKKwlBc3NlcnQoc2Vl a3BvcyA8IChvZmZfdCkgQkxDS1NaICogU0VHU0laRShzZmlsZSkpOwogCiAJaWYgKChuYnl0ZXMg PSBGaWxlV3JpdGUodi0+bWRmZF92ZmQsIGJ1ZmZlciwgQkxDS1NaLCBzZWVrcG9zLCBXQUlUX0VW RU5UX0RBVEFfRklMRV9FWFRFTkQpKSAhPSBCTENLU1opCiAJewpAQCAtNDYzLDEwICs0NTcsMTAg QEAgbWRleHRlbmQoU01nclJlbGF0aW9uIHJlbG4sIEZvcmtOdW1iZXIgZm9ya251bSwgQmxvY2tO dW1iZXIgYmxvY2tudW0sCiAJCQkJIGVycmhpbnQoIkNoZWNrIGZyZWUgZGlzayBzcGFjZS4iKSkp OwogCX0KIAotCWlmICghc2tpcEZzeW5jICYmICFTbWdySXNUZW1wKHJlbG4pKQotCQlyZWdpc3Rl cl9kaXJ0eV9zZWdtZW50KHJlbG4sIGZvcmtudW0sIHYpOworCWlmICghc2tpcEZzeW5jICYmICFT bWdySXNUZW1wKHNmaWxlKSkKKwkJcmVnaXN0ZXJfZGlydHlfc2VnbWVudChzZmlsZSwgdik7CiAK LQlBc3NlcnQoX21kbmJsb2NrcyhyZWxuLCBmb3JrbnVtLCB2KSA8PSAoKEJsb2NrTnVtYmVyKSBS RUxTRUdfU0laRSkpOworCUFzc2VydChfbWRuYmxvY2tzKHNmaWxlLCB2KSA8PSAoKEJsb2NrTnVt YmVyKSBTRUdTSVpFKHNmaWxlKSkpOwogfQogCiAvKgpAQCAtNDgwLDE3ICs0NzQsMTcgQEAgbWRl eHRlbmQoU01nclJlbGF0aW9uIHJlbG4sIEZvcmtOdW1iZXIgZm9ya251bSwgQmxvY2tOdW1iZXIg YmxvY2tudW0sCiAgKiBpbnZlbnQgb25lIG91dCBvZiB3aG9sZSBjbG90aC4KICAqLwogc3RhdGlj IE1kZmRWZWMgKgotbWRvcGVuZm9yayhTTWdyUmVsYXRpb24gcmVsbiwgRm9ya051bWJlciBmb3Jr bnVtLCBpbnQgYmVoYXZpb3IpCittZG9wZW5mb3JrKFNNZ3JGaWxlSGFuZGxlIHNmaWxlLCBpbnQg YmVoYXZpb3IpCiB7CiAJTWRmZFZlYyAgICAqbWRmZDsKIAljaGFyCSAgICpwYXRoOwogCUZpbGUJ CWZkOwogCiAJLyogTm8gd29yayBpZiBhbHJlYWR5IG9wZW4gKi8KLQlpZiAocmVsbi0+bWRfbnVt X29wZW5fc2Vnc1tmb3JrbnVtXSA+IDApCi0JCXJldHVybiAmcmVsbi0+bWRfc2VnX2Zkc1tmb3Jr bnVtXVswXTsKKwlpZiAoc2ZpbGUtPm1kX251bV9vcGVuX3NlZ3MgPiAwKQorCQlyZXR1cm4gJnNm aWxlLT5tZF9zZWdfZmRzWzBdOwogCi0JcGF0aCA9IHJlbHBhdGgocmVsbi0+c21ncl9ybG9jYXRv ciwgZm9ya251bSk7CisJcGF0aCA9IHNtZ3JmaWxlcGF0aChzZmlsZS0+c21ncl9sb2NhdG9yKTsK IAogCWZkID0gUGF0aE5hbWVPcGVuRmlsZShwYXRoLCBPX1JEV1IgfCBQR19CSU5BUlkpOwogCkBA IC01MDksMTIgKzUwMywxMiBAQCBtZG9wZW5mb3JrKFNNZ3JSZWxhdGlvbiByZWxuLCBGb3JrTnVt YmVyIGZvcmtudW0sIGludCBiZWhhdmlvcikKIAogCXBmcmVlKHBhdGgpOwogCi0JX2ZkdmVjX3Jl c2l6ZShyZWxuLCBmb3JrbnVtLCAxKTsKLQltZGZkID0gJnJlbG4tPm1kX3NlZ19mZHNbZm9ya251 bV1bMF07CisJX2ZkdmVjX3Jlc2l6ZShzZmlsZSwgMSk7CisJbWRmZCA9ICZzZmlsZS0+bWRfc2Vn X2Zkc1swXTsKIAltZGZkLT5tZGZkX3ZmZCA9IGZkOwogCW1kZmQtPm1kZmRfc2Vnbm8gPSAwOwog Ci0JQXNzZXJ0KF9tZG5ibG9ja3MocmVsbiwgZm9ya251bSwgbWRmZCkgPD0gKChCbG9ja051bWJl cikgUkVMU0VHX1NJWkUpKTsKKwlBc3NlcnQoX21kbmJsb2NrcyhzZmlsZSwgbWRmZCkgPD0gKChC bG9ja051bWJlcikgU0VHU0laRShzZmlsZSkpKTsKIAogCXJldHVybiBtZGZkOwogfQpAQCAtNTIz LDIwICs1MTcsMTkgQEAgbWRvcGVuZm9yayhTTWdyUmVsYXRpb24gcmVsbiwgRm9ya051bWJlciBm b3JrbnVtLCBpbnQgYmVoYXZpb3IpCiAgKiAgbWRvcGVuKCkgLS0gSW5pdGlhbGl6ZSBuZXdseS1v cGVuZWQgcmVsYXRpb24uCiAgKi8KIHZvaWQKLW1kb3BlbihTTWdyUmVsYXRpb24gcmVsbikKK21k b3BlbihTTWdyRmlsZUhhbmRsZSBzZmlsZSkKIHsKIAkvKiBtYXJrIGl0IG5vdCBvcGVuICovCi0J Zm9yIChpbnQgZm9ya251bSA9IDA7IGZvcmtudW0gPD0gTUFYX0ZPUktOVU07IGZvcmtudW0rKykK LQkJcmVsbi0+bWRfbnVtX29wZW5fc2Vnc1tmb3JrbnVtXSA9IDA7CisJc2ZpbGUtPm1kX251bV9v cGVuX3NlZ3MgPSAwOwogfQogCiAvKgogICoJbWRjbG9zZSgpIC0tIENsb3NlIHRoZSBzcGVjaWZp ZWQgcmVsYXRpb24sIGlmIGl0IGlzbid0IGNsb3NlZCBhbHJlYWR5LgogICovCiB2b2lkCi1tZGNs b3NlKFNNZ3JSZWxhdGlvbiByZWxuLCBGb3JrTnVtYmVyIGZvcmtudW0pCittZGNsb3NlKFNNZ3JG aWxlSGFuZGxlIHNmaWxlKQogewotCWludAkJCW5vcGVuc2VncyA9IHJlbG4tPm1kX251bV9vcGVu X3NlZ3NbZm9ya251bV07CisJaW50CQkJbm9wZW5zZWdzID0gc2ZpbGUtPm1kX251bV9vcGVuX3Nl Z3M7CiAKIAkvKiBObyB3b3JrIGlmIGFscmVhZHkgY2xvc2VkICovCiAJaWYgKG5vcGVuc2VncyA9 PSAwKQpAQCAtNTQ1LDEwICs1MzgsMTAgQEAgbWRjbG9zZShTTWdyUmVsYXRpb24gcmVsbiwgRm9y a051bWJlciBmb3JrbnVtKQogCS8qIGNsb3NlIHNlZ21lbnRzIHN0YXJ0aW5nIGZyb20gdGhlIGVu ZCAqLwogCXdoaWxlIChub3BlbnNlZ3MgPiAwKQogCXsKLQkJTWRmZFZlYyAgICAqdiA9ICZyZWxu LT5tZF9zZWdfZmRzW2ZvcmtudW1dW25vcGVuc2VncyAtIDFdOworCQlNZGZkVmVjICAgICp2ID0g JnNmaWxlLT5tZF9zZWdfZmRzW25vcGVuc2VncyAtIDFdOwogCiAJCUZpbGVDbG9zZSh2LT5tZGZk X3ZmZCk7Ci0JCV9mZHZlY19yZXNpemUocmVsbiwgZm9ya251bSwgbm9wZW5zZWdzIC0gMSk7CisJ CV9mZHZlY19yZXNpemUoc2ZpbGUsIG5vcGVuc2VncyAtIDEpOwogCQlub3BlbnNlZ3MtLTsKIAl9 CiB9CkBAIC01NTcsMjAgKzU1MCwyMCBAQCBtZGNsb3NlKFNNZ3JSZWxhdGlvbiByZWxuLCBGb3Jr TnVtYmVyIGZvcmtudW0pCiAgKgltZHByZWZldGNoKCkgLS0gSW5pdGlhdGUgYXN5bmNocm9ub3Vz IHJlYWQgb2YgdGhlIHNwZWNpZmllZCBibG9jayBvZiBhIHJlbGF0aW9uCiAgKi8KIGJvb2wKLW1k cHJlZmV0Y2goU01nclJlbGF0aW9uIHJlbG4sIEZvcmtOdW1iZXIgZm9ya251bSwgQmxvY2tOdW1i ZXIgYmxvY2tudW0pCittZHByZWZldGNoKFNNZ3JGaWxlSGFuZGxlIHNmaWxlLCBCbG9ja051bWJl ciBibG9ja251bSkKIHsKICNpZmRlZiBVU0VfUFJFRkVUQ0gKIAlvZmZfdAkJc2Vla3BvczsKIAlN ZGZkVmVjICAgICp2OwogCi0JdiA9IF9tZGZkX2dldHNlZyhyZWxuLCBmb3JrbnVtLCBibG9ja251 bSwgZmFsc2UsCisJdiA9IF9tZGZkX2dldHNlZyhzZmlsZSwgYmxvY2tudW0sIGZhbHNlLAogCQkJ CQkgSW5SZWNvdmVyeSA/IEVYVEVOU0lPTl9SRVRVUk5fTlVMTCA6IEVYVEVOU0lPTl9GQUlMKTsK IAlpZiAodiA9PSBOVUxMKQogCQlyZXR1cm4gZmFsc2U7CiAKLQlzZWVrcG9zID0gKG9mZl90KSBC TENLU1ogKiAoYmxvY2tudW0gJSAoKEJsb2NrTnVtYmVyKSBSRUxTRUdfU0laRSkpOworCXNlZWtw b3MgPSAob2ZmX3QpIEJMQ0tTWiAqIChibG9ja251bSAlICgoQmxvY2tOdW1iZXIpIFNFR1NJWkUo c2ZpbGUpKSk7CiAKLQlBc3NlcnQoc2Vla3BvcyA8IChvZmZfdCkgQkxDS1NaICogUkVMU0VHX1NJ WkUpOworCUFzc2VydChzZWVrcG9zIDwgKG9mZl90KSBCTENLU1ogKiBTRUdTSVpFKHNmaWxlKSk7 CiAKIAkodm9pZCkgRmlsZVByZWZldGNoKHYtPm1kZmRfdmZkLCBzZWVrcG9zLCBCTENLU1osIFdB SVRfRVZFTlRfREFUQV9GSUxFX1BSRUZFVENIKTsKICNlbmRpZgkJCQkJCQkvKiBVU0VfUFJFRkVU Q0ggKi8KQEAgLTU4NSw4ICs1NzgsNyBAQCBtZHByZWZldGNoKFNNZ3JSZWxhdGlvbiByZWxuLCBG b3JrTnVtYmVyIGZvcmtudW0sIEJsb2NrTnVtYmVyIGJsb2NrbnVtKQogICogY29uc2lkZXJhYmx5 IG1vcmUgZWZmaWNpZW50IHRoYW4gZG9pbmcgc28gaW5kaXZpZHVhbGx5LgogICovCiB2b2lkCi1t ZHdyaXRlYmFjayhTTWdyUmVsYXRpb24gcmVsbiwgRm9ya051bWJlciBmb3JrbnVtLAotCQkJQmxv Y2tOdW1iZXIgYmxvY2tudW0sIEJsb2NrTnVtYmVyIG5ibG9ja3MpCittZHdyaXRlYmFjayhTTWdy RmlsZUhhbmRsZSBzZmlsZSwgQmxvY2tOdW1iZXIgYmxvY2tudW0sIEJsb2NrTnVtYmVyIG5ibG9j a3MpCiB7CiAJLyoKIAkgKiBJc3N1ZSBmbHVzaCByZXF1ZXN0cyBpbiBhcyBmZXcgcmVxdWVzdHMg YXMgcG9zc2libGU7IGhhdmUgdG8gc3BsaXQgYXQKQEAgLTYwMCw3ICs1OTIsNyBAQCBtZHdyaXRl YmFjayhTTWdyUmVsYXRpb24gcmVsbiwgRm9ya051bWJlciBmb3JrbnVtLAogCQlpbnQJCQlzZWdu dW1fc3RhcnQsCiAJCQkJCXNlZ251bV9lbmQ7CiAKLQkJdiA9IF9tZGZkX2dldHNlZyhyZWxuLCBm b3JrbnVtLCBibG9ja251bSwgdHJ1ZSAvKiBub3QgdXNlZCAqLyAsCisJCXYgPSBfbWRmZF9nZXRz ZWcoc2ZpbGUsIGJsb2NrbnVtLCB0cnVlIC8qIG5vdCB1c2VkICovICwKIAkJCQkJCSBFWFRFTlNJ T05fRE9OVF9PUEVOKTsKIAogCQkvKgpAQCAtNjE0LDE3ICs2MDYsMTcgQEAgbWR3cml0ZWJhY2so U01nclJlbGF0aW9uIHJlbG4sIEZvcmtOdW1iZXIgZm9ya251bSwKIAkJCXJldHVybjsKIAogCQkv KiBjb21wdXRlIG9mZnNldCBpbnNpZGUgdGhlIGN1cnJlbnQgc2VnbWVudCAqLwotCQlzZWdudW1f c3RhcnQgPSBibG9ja251bSAvIFJFTFNFR19TSVpFOworCQlzZWdudW1fc3RhcnQgPSBibG9ja251 bSAvIFNFR1NJWkUoc2ZpbGUpOwogCiAJCS8qIGNvbXB1dGUgbnVtYmVyIG9mIGRlc2lyZWQgd3Jp dGVzIHdpdGhpbiB0aGUgY3VycmVudCBzZWdtZW50ICovCi0JCXNlZ251bV9lbmQgPSAoYmxvY2tu dW0gKyBuYmxvY2tzIC0gMSkgLyBSRUxTRUdfU0laRTsKKwkJc2VnbnVtX2VuZCA9IChibG9ja251 bSArIG5ibG9ja3MgLSAxKSAvIFNFR1NJWkUoc2ZpbGUpOwogCQlpZiAoc2VnbnVtX3N0YXJ0ICE9 IHNlZ251bV9lbmQpCi0JCQluZmx1c2ggPSBSRUxTRUdfU0laRSAtIChibG9ja251bSAlICgoQmxv Y2tOdW1iZXIpIFJFTFNFR19TSVpFKSk7CisJCQluZmx1c2ggPSBTRUdTSVpFKHNmaWxlKSAtIChi bG9ja251bSAlICgoQmxvY2tOdW1iZXIpIFNFR1NJWkUoc2ZpbGUpKSk7CiAKIAkJQXNzZXJ0KG5m bHVzaCA+PSAxKTsKIAkJQXNzZXJ0KG5mbHVzaCA8PSBuYmxvY2tzKTsKIAotCQlzZWVrcG9zID0g KG9mZl90KSBCTENLU1ogKiAoYmxvY2tudW0gJSAoKEJsb2NrTnVtYmVyKSBSRUxTRUdfU0laRSkp OworCQlzZWVrcG9zID0gKG9mZl90KSBCTENLU1ogKiAoYmxvY2tudW0gJSAoKEJsb2NrTnVtYmVy KSBTRUdTSVpFKHNmaWxlKSkpOwogCiAJCUZpbGVXcml0ZWJhY2sodi0+bWRmZF92ZmQsIHNlZWtw b3MsIChvZmZfdCkgQkxDS1NaICogbmZsdXNoLCBXQUlUX0VWRU5UX0RBVEFfRklMRV9GTFVTSCk7 CiAKQEAgLTYzNywzMyArNjI5LDM1IEBAIG1kd3JpdGViYWNrKFNNZ3JSZWxhdGlvbiByZWxuLCBG b3JrTnVtYmVyIGZvcmtudW0sCiAgKgltZHJlYWQoKSAtLSBSZWFkIHRoZSBzcGVjaWZpZWQgYmxv Y2sgZnJvbSBhIHJlbGF0aW9uLgogICovCiB2b2lkCi1tZHJlYWQoU01nclJlbGF0aW9uIHJlbG4s IEZvcmtOdW1iZXIgZm9ya251bSwgQmxvY2tOdW1iZXIgYmxvY2tudW0sCittZHJlYWQoU01nckZp bGVIYW5kbGUgc2ZpbGUsIEJsb2NrTnVtYmVyIGJsb2NrbnVtLAogCSAgIGNoYXIgKmJ1ZmZlcikK IHsKIAlvZmZfdAkJc2Vla3BvczsKIAlpbnQJCQluYnl0ZXM7CiAJTWRmZFZlYyAgICAqdjsKIAot CVRSQUNFX1BPU1RHUkVTUUxfU01HUl9NRF9SRUFEX1NUQVJUKGZvcmtudW0sIGJsb2NrbnVtLAot CQkJCQkJCQkJCXJlbG4tPnNtZ3JfcmxvY2F0b3IubG9jYXRvci5zcGNPaWQsCi0JCQkJCQkJCQkJ cmVsbi0+c21ncl9ybG9jYXRvci5sb2NhdG9yLmRiT2lkLAotCQkJCQkJCQkJCXJlbG4tPnNtZ3Jf cmxvY2F0b3IubG9jYXRvci5yZWxOdW1iZXIsCi0JCQkJCQkJCQkJcmVsbi0+c21ncl9ybG9jYXRv ci5iYWNrZW5kKTsKKwlUUkFDRV9QT1NUR1JFU1FMX1NNR1JfTURfUkVBRF9TVEFSVChzZmlsZS0+ c21ncl9mb3JrbnVtLAorCQkJCQkJCQkJCWJsb2NrbnVtLAorCQkJCQkJCQkJCXNmaWxlLT5zbWdy X3Jsb2NhdG9yLmxvY2F0b3Iuc3BjT2lkLAorCQkJCQkJCQkJCXNmaWxlLT5zbWdyX3Jsb2NhdG9y LmxvY2F0b3IuZGJPaWQsCisJCQkJCQkJCQkJc2ZpbGUtPnNtZ3JfcmxvY2F0b3IubG9jYXRvci5y ZWxOdW1iZXIsCisJCQkJCQkJCQkJc2ZpbGUtPnNtZ3JfcmxvY2F0b3IuYmFja2VuZCk7CiAKLQl2 ID0gX21kZmRfZ2V0c2VnKHJlbG4sIGZvcmtudW0sIGJsb2NrbnVtLCBmYWxzZSwKKwl2ID0gX21k ZmRfZ2V0c2VnKHNmaWxlLCBibG9ja251bSwgZmFsc2UsCiAJCQkJCSBFWFRFTlNJT05fRkFJTCB8 IEVYVEVOU0lPTl9DUkVBVEVfUkVDT1ZFUlkpOwogCi0Jc2Vla3BvcyA9IChvZmZfdCkgQkxDS1Na ICogKGJsb2NrbnVtICUgKChCbG9ja051bWJlcikgUkVMU0VHX1NJWkUpKTsKKwlzZWVrcG9zID0g KG9mZl90KSBCTENLU1ogKiAoYmxvY2tudW0gJSAoKEJsb2NrTnVtYmVyKSBTRUdTSVpFKHNmaWxl KSkpOwogCi0JQXNzZXJ0KHNlZWtwb3MgPCAob2ZmX3QpIEJMQ0tTWiAqIFJFTFNFR19TSVpFKTsK KwlBc3NlcnQoc2Vla3BvcyA8IChvZmZfdCkgQkxDS1NaICogU0VHU0laRShzZmlsZSkpOwogCiAJ bmJ5dGVzID0gRmlsZVJlYWQodi0+bWRmZF92ZmQsIGJ1ZmZlciwgQkxDS1NaLCBzZWVrcG9zLCBX QUlUX0VWRU5UX0RBVEFfRklMRV9SRUFEKTsKIAotCVRSQUNFX1BPU1RHUkVTUUxfU01HUl9NRF9S RUFEX0RPTkUoZm9ya251bSwgYmxvY2tudW0sCi0JCQkJCQkJCQkgICByZWxuLT5zbWdyX3Jsb2Nh dG9yLmxvY2F0b3Iuc3BjT2lkLAotCQkJCQkJCQkJICAgcmVsbi0+c21ncl9ybG9jYXRvci5sb2Nh dG9yLmRiT2lkLAotCQkJCQkJCQkJICAgcmVsbi0+c21ncl9ybG9jYXRvci5sb2NhdG9yLnJlbE51 bWJlciwKLQkJCQkJCQkJCSAgIHJlbG4tPnNtZ3JfcmxvY2F0b3IuYmFja2VuZCwKKwlUUkFDRV9Q T1NUR1JFU1FMX1NNR1JfTURfUkVBRF9ET05FKHNmaWxlLT5zbWdyX2ZvcmtudW0sCisJCQkJCQkJ CQkgICBibG9ja251bSwKKwkJCQkJCQkJCSAgIHNmaWxlLT5zbWdyX3Jsb2NhdG9yLmxvY2F0b3Iu c3BjT2lkLAorCQkJCQkJCQkJICAgc2ZpbGUtPnNtZ3JfcmxvY2F0b3IubG9jYXRvci5kYk9pZCwK KwkJCQkJCQkJCSAgIHNmaWxlLT5zbWdyX3Jsb2NhdG9yLmxvY2F0b3IucmVsTnVtYmVyLAorCQkJ CQkJCQkJICAgc2ZpbGUtPnNtZ3JfcmxvY2F0b3IuYmFja2VuZCwKIAkJCQkJCQkJCSAgIG5ieXRl cywKIAkJCQkJCQkJCSAgIEJMQ0tTWik7CiAKQEAgLTcwMiw3ICs2OTYsNyBAQCBtZHJlYWQoU01n clJlbGF0aW9uIHJlbG4sIEZvcmtOdW1iZXIgZm9ya251bSwgQmxvY2tOdW1iZXIgYmxvY2tudW0s CiAgKgkJdXNlIG1kZXh0ZW5kKCkuCiAgKi8KIHZvaWQKLW1kd3JpdGUoU01nclJlbGF0aW9uIHJl bG4sIEZvcmtOdW1iZXIgZm9ya251bSwgQmxvY2tOdW1iZXIgYmxvY2tudW0sCittZHdyaXRlKFNN Z3JGaWxlSGFuZGxlIHNmaWxlLCBCbG9ja051bWJlciBibG9ja251bSwKIAkJY2hhciAqYnVmZmVy LCBib29sIHNraXBGc3luYykKIHsKIAlvZmZfdAkJc2Vla3BvczsKQEAgLTcxMSwyOSArNzA1LDMx IEBAIG1kd3JpdGUoU01nclJlbGF0aW9uIHJlbG4sIEZvcmtOdW1iZXIgZm9ya251bSwgQmxvY2tO dW1iZXIgYmxvY2tudW0sCiAKIAkvKiBUaGlzIGFzc2VydCBpcyB0b28gZXhwZW5zaXZlIHRvIGhh dmUgb24gbm9ybWFsbHkgLi4uICovCiAjaWZkZWYgQ0hFQ0tfV1JJVEVfVlNfRVhURU5ECi0JQXNz ZXJ0KGJsb2NrbnVtIDwgbWRuYmxvY2tzKHJlbG4sIGZvcmtudW0pKTsKKwlBc3NlcnQoYmxvY2tu dW0gPCBtZG5ibG9ja3Moc2ZpbGUpKTsKICNlbmRpZgogCi0JVFJBQ0VfUE9TVEdSRVNRTF9TTUdS X01EX1dSSVRFX1NUQVJUKGZvcmtudW0sIGJsb2NrbnVtLAotCQkJCQkJCQkJCSByZWxuLT5zbWdy X3Jsb2NhdG9yLmxvY2F0b3Iuc3BjT2lkLAotCQkJCQkJCQkJCSByZWxuLT5zbWdyX3Jsb2NhdG9y LmxvY2F0b3IuZGJPaWQsCi0JCQkJCQkJCQkJIHJlbG4tPnNtZ3JfcmxvY2F0b3IubG9jYXRvci5y ZWxOdW1iZXIsCi0JCQkJCQkJCQkJIHJlbG4tPnNtZ3JfcmxvY2F0b3IuYmFja2VuZCk7CisJVFJB Q0VfUE9TVEdSRVNRTF9TTUdSX01EX1dSSVRFX1NUQVJUKHNmaWxlLT5zbWdyX2ZvcmtudW0sCisJ CQkJCQkJCQkJIGJsb2NrbnVtLAorCQkJCQkJCQkJCSBzZmlsZS0+c21ncl9ybG9jYXRvci5sb2Nh dG9yLnNwY09pZCwKKwkJCQkJCQkJCQkgc2ZpbGUtPnNtZ3JfcmxvY2F0b3IubG9jYXRvci5kYk9p ZCwKKwkJCQkJCQkJCQkgc2ZpbGUtPnNtZ3JfcmxvY2F0b3IubG9jYXRvci5yZWxOdW1iZXIsCisJ CQkJCQkJCQkJIHNmaWxlLT5zbWdyX3Jsb2NhdG9yLmJhY2tlbmQpOwogCi0JdiA9IF9tZGZkX2dl dHNlZyhyZWxuLCBmb3JrbnVtLCBibG9ja251bSwgc2tpcEZzeW5jLAorCXYgPSBfbWRmZF9nZXRz ZWcoc2ZpbGUsIGJsb2NrbnVtLCBza2lwRnN5bmMsCiAJCQkJCSBFWFRFTlNJT05fRkFJTCB8IEVY VEVOU0lPTl9DUkVBVEVfUkVDT1ZFUlkpOwogCi0Jc2Vla3BvcyA9IChvZmZfdCkgQkxDS1NaICog KGJsb2NrbnVtICUgKChCbG9ja051bWJlcikgUkVMU0VHX1NJWkUpKTsKKwlzZWVrcG9zID0gKG9m Zl90KSBCTENLU1ogKiAoYmxvY2tudW0gJSAoKEJsb2NrTnVtYmVyKSBTRUdTSVpFKHNmaWxlKSkp OwogCi0JQXNzZXJ0KHNlZWtwb3MgPCAob2ZmX3QpIEJMQ0tTWiAqIFJFTFNFR19TSVpFKTsKKwlB c3NlcnQoc2Vla3BvcyA8IChvZmZfdCkgQkxDS1NaICogU0VHU0laRShzZmlsZSkpOwogCiAJbmJ5 dGVzID0gRmlsZVdyaXRlKHYtPm1kZmRfdmZkLCBidWZmZXIsIEJMQ0tTWiwgc2Vla3BvcywgV0FJ VF9FVkVOVF9EQVRBX0ZJTEVfV1JJVEUpOwogCi0JVFJBQ0VfUE9TVEdSRVNRTF9TTUdSX01EX1dS SVRFX0RPTkUoZm9ya251bSwgYmxvY2tudW0sCi0JCQkJCQkJCQkJcmVsbi0+c21ncl9ybG9jYXRv ci5sb2NhdG9yLnNwY09pZCwKLQkJCQkJCQkJCQlyZWxuLT5zbWdyX3Jsb2NhdG9yLmxvY2F0b3Iu ZGJPaWQsCi0JCQkJCQkJCQkJcmVsbi0+c21ncl9ybG9jYXRvci5sb2NhdG9yLnJlbE51bWJlciwK LQkJCQkJCQkJCQlyZWxuLT5zbWdyX3Jsb2NhdG9yLmJhY2tlbmQsCisJVFJBQ0VfUE9TVEdSRVNR TF9TTUdSX01EX1dSSVRFX0RPTkUoc2ZpbGUtPnNtZ3JfZm9ya251bSwKKwkJCQkJCQkJCQlibG9j a251bSwKKwkJCQkJCQkJCQlzZmlsZS0+c21ncl9ybG9jYXRvci5sb2NhdG9yLnNwY09pZCwKKwkJ CQkJCQkJCQlzZmlsZS0+c21ncl9ybG9jYXRvci5sb2NhdG9yLmRiT2lkLAorCQkJCQkJCQkJCXNm aWxlLT5zbWdyX3Jsb2NhdG9yLmxvY2F0b3IucmVsTnVtYmVyLAorCQkJCQkJCQkJCXNmaWxlLT5z bWdyX3Jsb2NhdG9yLmJhY2tlbmQsCiAJCQkJCQkJCQkJbmJ5dGVzLAogCQkJCQkJCQkJCUJMQ0tT Wik7CiAKQEAgLTc1NCw4ICs3NTAsOCBAQCBtZHdyaXRlKFNNZ3JSZWxhdGlvbiByZWxuLCBGb3Jr TnVtYmVyIGZvcmtudW0sIEJsb2NrTnVtYmVyIGJsb2NrbnVtLAogCQkJCSBlcnJoaW50KCJDaGVj ayBmcmVlIGRpc2sgc3BhY2UuIikpKTsKIAl9CiAKLQlpZiAoIXNraXBGc3luYyAmJiAhU21ncklz VGVtcChyZWxuKSkKLQkJcmVnaXN0ZXJfZGlydHlfc2VnbWVudChyZWxuLCBmb3JrbnVtLCB2KTsK KwlpZiAoIXNraXBGc3luYyAmJiAhU21ncklzVGVtcChzZmlsZSkpCisJCXJlZ2lzdGVyX2RpcnR5 X3NlZ21lbnQoc2ZpbGUsIHYpOwogfQogCiAvKgpAQCAtNzY3LDIwICs3NjMsMjAgQEAgbWR3cml0 ZShTTWdyUmVsYXRpb24gcmVsbiwgRm9ya051bWJlciBmb3JrbnVtLCBCbG9ja051bWJlciBibG9j a251bSwKICAqCQlhcmUgcHJlc2VudCBpbiB0aGUgYXJyYXkuCiAgKi8KIEJsb2NrTnVtYmVyCi1t ZG5ibG9ja3MoU01nclJlbGF0aW9uIHJlbG4sIEZvcmtOdW1iZXIgZm9ya251bSkKK21kbmJsb2Nr cyhTTWdyRmlsZUhhbmRsZSBzZmlsZSkKIHsKIAlNZGZkVmVjICAgICp2OwogCUJsb2NrTnVtYmVy IG5ibG9ja3M7CiAJQmxvY2tOdW1iZXIgc2Vnbm87CiAKLQltZG9wZW5mb3JrKHJlbG4sIGZvcmtu dW0sIEVYVEVOU0lPTl9GQUlMKTsKKwltZG9wZW5mb3JrKHNmaWxlLCBFWFRFTlNJT05fRkFJTCk7 CiAKIAkvKiBtZG9wZW4gaGFzIG9wZW5lZCB0aGUgZmlyc3Qgc2VnbWVudCAqLwotCUFzc2VydChy ZWxuLT5tZF9udW1fb3Blbl9zZWdzW2ZvcmtudW1dID4gMCk7CisJQXNzZXJ0KHNmaWxlLT5tZF9u dW1fb3Blbl9zZWdzID4gMCk7CiAKIAkvKgogCSAqIFN0YXJ0IGZyb20gdGhlIGxhc3Qgb3BlbiBz ZWdtZW50cywgdG8gYXZvaWQgcmVkdW5kYW50IHNlZWtzLiAgV2UgaGF2ZQotCSAqIHByZXZpb3Vz bHkgdmVyaWZpZWQgdGhhdCB0aGVzZSBzZWdtZW50cyBhcmUgZXhhY3RseSBSRUxTRUdfU0laRSBs b25nLAorCSAqIHByZXZpb3VzbHkgdmVyaWZpZWQgdGhhdCB0aGVzZSBzZWdtZW50cyBhcmUgZXhh Y3RseSBTRUdTSVpFIGxvbmcsCiAJICogYW5kIGl0J3MgdXNlbGVzcyB0byByZWNoZWNrIHRoYXQg ZWFjaCB0aW1lLgogCSAqCiAJICogTk9URTogdGhpcyBhc3N1bXB0aW9uIGNvdWxkIG9ubHkgYmUg d3JvbmcgaWYgYW5vdGhlciBiYWNrZW5kIGhhcwpAQCAtNzkxLDE5ICs3ODcsMTkgQEAgbWRuYmxv Y2tzKFNNZ3JSZWxhdGlvbiByZWxuLCBGb3JrTnVtYmVyIGZvcmtudW0pCiAJICogdGhhdCdzIE9L IGJlY2F1c2UgdGhlIGNoZWNrcG9pbnRlciBuZXZlciBuZWVkcyB0byBjb21wdXRlIHJlbGF0aW9u CiAJICogc2l6ZS4pCiAJICovCi0Jc2Vnbm8gPSByZWxuLT5tZF9udW1fb3Blbl9zZWdzW2Zvcmtu dW1dIC0gMTsKLQl2ID0gJnJlbG4tPm1kX3NlZ19mZHNbZm9ya251bV1bc2Vnbm9dOworCXNlZ25v ID0gc2ZpbGUtPm1kX251bV9vcGVuX3NlZ3MgLSAxOworCXYgPSAmc2ZpbGUtPm1kX3NlZ19mZHNb c2Vnbm9dOwogCiAJZm9yICg7OykKIAl7Ci0JCW5ibG9ja3MgPSBfbWRuYmxvY2tzKHJlbG4sIGZv cmtudW0sIHYpOwotCQlpZiAobmJsb2NrcyA+ICgoQmxvY2tOdW1iZXIpIFJFTFNFR19TSVpFKSkK KwkJbmJsb2NrcyA9IF9tZG5ibG9ja3Moc2ZpbGUsIHYpOworCQlpZiAobmJsb2NrcyA+ICgoQmxv Y2tOdW1iZXIpIFNFR1NJWkUoc2ZpbGUpKSkKIAkJCWVsb2coRkFUQUwsICJzZWdtZW50IHRvbyBi aWciKTsKLQkJaWYgKG5ibG9ja3MgPCAoKEJsb2NrTnVtYmVyKSBSRUxTRUdfU0laRSkpCi0JCQly ZXR1cm4gKHNlZ25vICogKChCbG9ja051bWJlcikgUkVMU0VHX1NJWkUpKSArIG5ibG9ja3M7CisJ CWlmIChuYmxvY2tzIDwgKChCbG9ja051bWJlcikgU0VHU0laRShzZmlsZSkpKQorCQkJcmV0dXJu IChzZWdubyAqICgoQmxvY2tOdW1iZXIpIFNFR1NJWkUoc2ZpbGUpKSkgKyBuYmxvY2tzOwogCiAJ CS8qCi0JCSAqIElmIHNlZ21lbnQgaXMgZXhhY3RseSBSRUxTRUdfU0laRSwgYWR2YW5jZSB0byBu ZXh0IG9uZS4KKwkJICogSWYgc2VnbWVudCBpcyBleGFjdGx5IFNFR1NJWkUsIGFkdmFuY2UgdG8g bmV4dCBvbmUuCiAJCSAqLwogCQlzZWdubysrOwogCkBAIC04MTQsOSArODEwLDkgQEAgbWRuYmxv Y2tzKFNNZ3JSZWxhdGlvbiByZWxuLCBGb3JrTnVtYmVyIGZvcmtudW0pCiAJCSAqIHVuZGVybWlu ZXMgX21kZmRfZ2V0c2VnJ3MgYXR0ZW1wdHMgdG8gbm90aWNlIGFuZCByZXBvcnQgYW4gZXJyb3IK IAkJICogdXBvbiBhY2Nlc3MgdG8gYSBtaXNzaW5nIHNlZ21lbnQuCiAJCSAqLwotCQl2ID0gX21k ZmRfb3BlbnNlZyhyZWxuLCBmb3JrbnVtLCBzZWdubywgMCk7CisJCXYgPSBfbWRmZF9vcGVuc2Vn KHNmaWxlLCBzZWdubywgMCk7CiAJCWlmICh2ID09IE5VTEwpCi0JCQlyZXR1cm4gc2Vnbm8gKiAo KEJsb2NrTnVtYmVyKSBSRUxTRUdfU0laRSk7CisJCQlyZXR1cm4gc2Vnbm8gKiAoKEJsb2NrTnVt YmVyKSBTRUdTSVpFKHNmaWxlKSk7CiAJfQogfQogCkBAIC04MjQsNyArODIwLDcgQEAgbWRuYmxv Y2tzKFNNZ3JSZWxhdGlvbiByZWxuLCBGb3JrTnVtYmVyIGZvcmtudW0pCiAgKgltZHRydW5jYXRl KCkgLS0gVHJ1bmNhdGUgcmVsYXRpb24gdG8gc3BlY2lmaWVkIG51bWJlciBvZiBibG9ja3MuCiAg Ki8KIHZvaWQKLW1kdHJ1bmNhdGUoU01nclJlbGF0aW9uIHJlbG4sIEZvcmtOdW1iZXIgZm9ya251 bSwgQmxvY2tOdW1iZXIgbmJsb2NrcykKK21kdHJ1bmNhdGUoU01nckZpbGVIYW5kbGUgc2ZpbGUs IEJsb2NrTnVtYmVyIG5ibG9ja3MpCiB7CiAJQmxvY2tOdW1iZXIgY3VybmJsazsKIAlCbG9ja051 bWJlciBwcmlvcmJsb2NrczsKQEAgLTgzNCw3ICs4MzAsNyBAQCBtZHRydW5jYXRlKFNNZ3JSZWxh dGlvbiByZWxuLCBGb3JrTnVtYmVyIGZvcmtudW0sIEJsb2NrTnVtYmVyIG5ibG9ja3MpCiAJICog Tk9URTogbWRuYmxvY2tzIG1ha2VzIHN1cmUgd2UgaGF2ZSBvcGVuZWQgYWxsIGFjdGl2ZSBzZWdt ZW50cywgc28gdGhhdAogCSAqIHRydW5jYXRpb24gbG9vcCB3aWxsIGdldCB0aGVtIGFsbCEKIAkg Ki8KLQljdXJuYmxrID0gbWRuYmxvY2tzKHJlbG4sIGZvcmtudW0pOworCWN1cm5ibGsgPSBtZG5i bG9ja3Moc2ZpbGUpOwogCWlmIChuYmxvY2tzID4gY3VybmJsaykKIAl7CiAJCS8qIEJvZ3VzIHJl cXVlc3QgLi4uIGJ1dCBubyBjb21wbGFpbnQgaWYgSW5SZWNvdmVyeSAqLwpAQCAtODQyLDcgKzgz OCw3IEBAIG1kdHJ1bmNhdGUoU01nclJlbGF0aW9uIHJlbG4sIEZvcmtOdW1iZXIgZm9ya251bSwg QmxvY2tOdW1iZXIgbmJsb2NrcykKIAkJCXJldHVybjsKIAkJZXJlcG9ydChFUlJPUiwKIAkJCQko ZXJybXNnKCJjb3VsZCBub3QgdHJ1bmNhdGUgZmlsZSBcIiVzXCIgdG8gJXUgYmxvY2tzOiBpdCdz IG9ubHkgJXUgYmxvY2tzIG5vdyIsCi0JCQkJCQlyZWxwYXRoKHJlbG4tPnNtZ3JfcmxvY2F0b3Is IGZvcmtudW0pLAorCQkJCQkJc21ncmZpbGVwYXRoKHNmaWxlLT5zbWdyX2xvY2F0b3IpLAogCQkJ CQkJbmJsb2NrcywgY3VybmJsaykpKTsKIAl9CiAJaWYgKG5ibG9ja3MgPT0gY3VybmJsaykKQEAg LTg1MiwxNCArODQ4LDE0IEBAIG1kdHJ1bmNhdGUoU01nclJlbGF0aW9uIHJlbG4sIEZvcmtOdW1i ZXIgZm9ya251bSwgQmxvY2tOdW1iZXIgbmJsb2NrcykKIAkgKiBUcnVuY2F0ZSBzZWdtZW50cywg c3RhcnRpbmcgYXQgdGhlIGxhc3Qgb25lLiBTdGFydGluZyBhdCB0aGUgZW5kIG1ha2VzCiAJICog bWFuYWdpbmcgdGhlIG1lbW9yeSBmb3IgdGhlIGZkIGFycmF5IGVhc2llciwgc2hvdWxkIHRoZXJl IGJlIGVycm9ycy4KIAkgKi8KLQljdXJvcGVuc2VncyA9IHJlbG4tPm1kX251bV9vcGVuX3NlZ3Nb Zm9ya251bV07CisJY3Vyb3BlbnNlZ3MgPSBzZmlsZS0+bWRfbnVtX29wZW5fc2VnczsKIAl3aGls ZSAoY3Vyb3BlbnNlZ3MgPiAwKQogCXsKIAkJTWRmZFZlYyAgICAqdjsKIAotCQlwcmlvcmJsb2Nr cyA9IChjdXJvcGVuc2VncyAtIDEpICogUkVMU0VHX1NJWkU7CisJCXByaW9yYmxvY2tzID0gKGN1 cm9wZW5zZWdzIC0gMSkgKiBTRUdTSVpFKHNmaWxlKTsKIAotCQl2ID0gJnJlbG4tPm1kX3NlZ19m ZHNbZm9ya251bV1bY3Vyb3BlbnNlZ3MgLSAxXTsKKwkJdiA9ICZzZmlsZS0+bWRfc2VnX2Zkc1tj dXJvcGVuc2VncyAtIDFdOwogCiAJCWlmIChwcmlvcmJsb2NrcyA+IG5ibG9ja3MpCiAJCXsKQEAg LTg3MywyMSArODY5LDIxIEBAIG1kdHJ1bmNhdGUoU01nclJlbGF0aW9uIHJlbG4sIEZvcmtOdW1i ZXIgZm9ya251bSwgQmxvY2tOdW1iZXIgbmJsb2NrcykKIAkJCQkJCSBlcnJtc2coImNvdWxkIG5v dCB0cnVuY2F0ZSBmaWxlIFwiJXNcIjogJW0iLAogCQkJCQkJCQlGaWxlUGF0aE5hbWUodi0+bWRm ZF92ZmQpKSkpOwogCi0JCQlpZiAoIVNtZ3JJc1RlbXAocmVsbikpCi0JCQkJcmVnaXN0ZXJfZGly dHlfc2VnbWVudChyZWxuLCBmb3JrbnVtLCB2KTsKKwkJCWlmICghU21ncklzVGVtcChzZmlsZSkp CisJCQkJcmVnaXN0ZXJfZGlydHlfc2VnbWVudChzZmlsZSwgdik7CiAKIAkJCS8qIHdlIG5ldmVy IGRyb3AgdGhlIDFzdCBzZWdtZW50ICovCi0JCQlBc3NlcnQodiAhPSAmcmVsbi0+bWRfc2VnX2Zk c1tmb3JrbnVtXVswXSk7CisJCQlBc3NlcnQodiAhPSAmc2ZpbGUtPm1kX3NlZ19mZHNbMF0pOwog CiAJCQlGaWxlQ2xvc2Uodi0+bWRmZF92ZmQpOwotCQkJX2ZkdmVjX3Jlc2l6ZShyZWxuLCBmb3Jr bnVtLCBjdXJvcGVuc2VncyAtIDEpOworCQkJX2ZkdmVjX3Jlc2l6ZShzZmlsZSwgY3Vyb3BlbnNl Z3MgLSAxKTsKIAkJfQotCQllbHNlIGlmIChwcmlvcmJsb2NrcyArICgoQmxvY2tOdW1iZXIpIFJF TFNFR19TSVpFKSA+IG5ibG9ja3MpCisJCWVsc2UgaWYgKHByaW9yYmxvY2tzICsgKChCbG9ja051 bWJlcikgU0VHU0laRShzZmlsZSkpID4gbmJsb2NrcykKIAkJewogCQkJLyoKIAkJCSAqIFRoaXMg aXMgdGhlIGxhc3Qgc2VnbWVudCB3ZSB3YW50IHRvIGtlZXAuIFRydW5jYXRlIHRoZSBmaWxlIHRv CiAJCQkgKiB0aGUgcmlnaHQgbGVuZ3RoLiBOT1RFOiBpZiBuYmxvY2tzIGlzIGV4YWN0bHkgYSBt dWx0aXBsZSBLIG9mCi0JCQkgKiBSRUxTRUdfU0laRSwgd2Ugd2lsbCB0cnVuY2F0ZSB0aGUgSysx c3Qgc2VnbWVudCB0byAwIGxlbmd0aCBidXQKKwkJCSAqIFNFR1NJWkUsIHdlIHdpbGwgdHJ1bmNh dGUgdGhlIEsrMXN0IHNlZ21lbnQgdG8gMCBsZW5ndGggYnV0CiAJCQkgKiBrZWVwIGl0LiBUaGlz IGFkaGVyZXMgdG8gdGhlIGludmFyaWFudCBnaXZlbiBpbiB0aGUgaGVhZGVyCiAJCQkgKiBjb21t ZW50cy4KIAkJCSAqLwpAQCAtODk5LDggKzg5NSw4IEBAIG1kdHJ1bmNhdGUoU01nclJlbGF0aW9u IHJlbG4sIEZvcmtOdW1iZXIgZm9ya251bSwgQmxvY2tOdW1iZXIgbmJsb2NrcykKIAkJCQkJCSBl cnJtc2coImNvdWxkIG5vdCB0cnVuY2F0ZSBmaWxlIFwiJXNcIiB0byAldSBibG9ja3M6ICVtIiwK IAkJCQkJCQkJRmlsZVBhdGhOYW1lKHYtPm1kZmRfdmZkKSwKIAkJCQkJCQkJbmJsb2NrcykpKTsK LQkJCWlmICghU21ncklzVGVtcChyZWxuKSkKLQkJCQlyZWdpc3Rlcl9kaXJ0eV9zZWdtZW50KHJl bG4sIGZvcmtudW0sIHYpOworCQkJaWYgKCFTbWdySXNUZW1wKHNmaWxlKSkKKwkJCQlyZWdpc3Rl cl9kaXJ0eV9zZWdtZW50KHNmaWxlLCB2KTsKIAkJfQogCQllbHNlCiAJCXsKQEAgLTkyNiw3ICs5 MjIsNyBAQCBtZHRydW5jYXRlKFNNZ3JSZWxhdGlvbiByZWxuLCBGb3JrTnVtYmVyIGZvcmtudW0s IEJsb2NrTnVtYmVyIG5ibG9ja3MpCiAgKiBzZWdtZW50IG1heSBzdXJ2aXZlIHJlY292ZXJ5LCBy ZWludHJvZHVjaW5nIHVud2FudGVkIGRhdGEgaW50byB0aGUgdGFibGUuCiAgKi8KIHZvaWQKLW1k aW1tZWRzeW5jKFNNZ3JSZWxhdGlvbiByZWxuLCBGb3JrTnVtYmVyIGZvcmtudW0pCittZGltbWVk c3luYyhTTWdyRmlsZUhhbmRsZSBzZmlsZSkKIHsKIAlpbnQJCQlzZWdubzsKIAlpbnQJCQltaW5f aW5hY3RpdmVfc2VnOwpAQCAtOTM1LDkgKzkzMSw5IEBAIG1kaW1tZWRzeW5jKFNNZ3JSZWxhdGlv biByZWxuLCBGb3JrTnVtYmVyIGZvcmtudW0pCiAJICogTk9URTogbWRuYmxvY2tzIG1ha2VzIHN1 cmUgd2UgaGF2ZSBvcGVuZWQgYWxsIGFjdGl2ZSBzZWdtZW50cywgc28gdGhhdAogCSAqIGZzeW5j IGxvb3Agd2lsbCBnZXQgdGhlbSBhbGwhCiAJICovCi0JbWRuYmxvY2tzKHJlbG4sIGZvcmtudW0p OworCW1kbmJsb2NrcyhzZmlsZSk7CiAKLQltaW5faW5hY3RpdmVfc2VnID0gc2Vnbm8gPSByZWxu LT5tZF9udW1fb3Blbl9zZWdzW2ZvcmtudW1dOworCW1pbl9pbmFjdGl2ZV9zZWcgPSBzZWdubyA9 IHNmaWxlLT5tZF9udW1fb3Blbl9zZWdzOwogCiAJLyoKIAkgKiBUZW1wb3JhcmlseSBvcGVuIGlu YWN0aXZlIHNlZ21lbnRzLCB0aGVuIGNsb3NlIHRoZW0gYWZ0ZXIgc3luYy4gIFRoZXJlCkBAIC05 NDUsMTIgKzk0MSwxMiBAQCBtZGltbWVkc3luYyhTTWdyUmVsYXRpb24gcmVsbiwgRm9ya051bWJl ciBmb3JrbnVtKQogCSAqIGlzIGhhcm1sZXNzLiAgV2UgZG9uJ3QgYm90aGVyIHRvIGNsZWFuIHRo ZW0gdXAgYW5kIHRha2UgYSByaXNrIG9mCiAJICogZnVydGhlciB0cm91YmxlLiAgVGhlIG5leHQg bWRjbG9zZSgpIHdpbGwgc29vbiBjbG9zZSB0aGVtLgogCSAqLwotCXdoaWxlIChfbWRmZF9vcGVu c2VnKHJlbG4sIGZvcmtudW0sIHNlZ25vLCAwKSAhPSBOVUxMKQorCXdoaWxlIChfbWRmZF9vcGVu c2VnKHNmaWxlLCBzZWdubywgMCkgIT0gTlVMTCkKIAkJc2Vnbm8rKzsKIAogCXdoaWxlIChzZWdu byA+IDApCiAJewotCQlNZGZkVmVjICAgICp2ID0gJnJlbG4tPm1kX3NlZ19mZHNbZm9ya251bV1b c2Vnbm8gLSAxXTsKKwkJTWRmZFZlYyAgICAqdiA9ICZzZmlsZS0+bWRfc2VnX2Zkc1tzZWdubyAt IDFdOwogCiAJCWlmIChGaWxlU3luYyh2LT5tZGZkX3ZmZCwgV0FJVF9FVkVOVF9EQVRBX0ZJTEVf SU1NRURJQVRFX1NZTkMpIDwgMCkKIAkJCWVyZXBvcnQoZGF0YV9zeW5jX2VsZXZlbChFUlJPUiks CkBAIC05NjIsNyArOTU4LDcgQEAgbWRpbW1lZHN5bmMoU01nclJlbGF0aW9uIHJlbG4sIEZvcmtO dW1iZXIgZm9ya251bSkKIAkJaWYgKHNlZ25vID4gbWluX2luYWN0aXZlX3NlZykKIAkJewogCQkJ RmlsZUNsb3NlKHYtPm1kZmRfdmZkKTsKLQkJCV9mZHZlY19yZXNpemUocmVsbiwgZm9ya251bSwg c2Vnbm8gLSAxKTsKKwkJCV9mZHZlY19yZXNpemUoc2ZpbGUsIHNlZ25vIC0gMSk7CiAJCX0KIAog CQlzZWduby0tOwpAQCAtOTc5LDE0ICs5NzUsMTQgQEAgbWRpbW1lZHN5bmMoU01nclJlbGF0aW9u IHJlbG4sIEZvcmtOdW1iZXIgZm9ya251bSkKICAqIGVub3VnaCB0byBiZSBhIHBlcmZvcm1hbmNl IHByb2JsZW0pLgogICovCiBzdGF0aWMgdm9pZAotcmVnaXN0ZXJfZGlydHlfc2VnbWVudChTTWdy UmVsYXRpb24gcmVsbiwgRm9ya051bWJlciBmb3JrbnVtLCBNZGZkVmVjICpzZWcpCityZWdpc3Rl cl9kaXJ0eV9zZWdtZW50KFNNZ3JGaWxlSGFuZGxlIHNmaWxlLCBNZGZkVmVjICpzZWcpCiB7CiAJ RmlsZVRhZwkJdGFnOwogCi0JSU5JVF9NRF9GSUxFVEFHKHRhZywgcmVsbi0+c21ncl9ybG9jYXRv ci5sb2NhdG9yLCBmb3JrbnVtLCBzZWctPm1kZmRfc2Vnbm8pOworCUlOSVRfTURfRklMRVRBRyh0 YWcsIHNmaWxlLT5zbWdyX2xvY2F0b3IubG9jYXRvciwgc2ZpbGUtPnNtZ3JfbG9jYXRvci5mb3Jr bnVtLCBzZWctPm1kZmRfc2Vnbm8pOwogCiAJLyogVGVtcCByZWxhdGlvbnMgc2hvdWxkIG5ldmVy IGJlIGZzeW5jJ2QgKi8KLQlBc3NlcnQoIVNtZ3JJc1RlbXAocmVsbikpOworCUFzc2VydCghU21n cklzVGVtcChzZmlsZSkpOwogCiAJaWYgKCFSZWdpc3RlclN5bmNSZXF1ZXN0KCZ0YWcsIFNZTkNf UkVRVUVTVCwgZmFsc2UgLyogcmV0cnlPbkVycm9yICovICkpCiAJewpAQCAtMTAwNSwxNSArMTAw MSwxNCBAQCByZWdpc3Rlcl9kaXJ0eV9zZWdtZW50KFNNZ3JSZWxhdGlvbiByZWxuLCBGb3JrTnVt YmVyIGZvcmtudW0sIE1kZmRWZWMgKnNlZykKICAqIHJlZ2lzdGVyX3VubGlua19zZWdtZW50KCkg LS0gU2NoZWR1bGUgYSBmaWxlIHRvIGJlIGRlbGV0ZWQgYWZ0ZXIgbmV4dCBjaGVja3BvaW50CiAg Ki8KIHN0YXRpYyB2b2lkCi1yZWdpc3Rlcl91bmxpbmtfc2VnbWVudChSZWxGaWxlTG9jYXRvckJh Y2tlbmQgcmxvY2F0b3IsIEZvcmtOdW1iZXIgZm9ya251bSwKLQkJCQkJCUJsb2NrTnVtYmVyIHNl Z25vKQorcmVnaXN0ZXJfdW5saW5rX3NlZ21lbnQoU01nckZpbGVMb2NhdG9yIHNsb2NhdG9yLCBC bG9ja051bWJlciBzZWdubykKIHsKIAlGaWxlVGFnCQl0YWc7CiAKLQlJTklUX01EX0ZJTEVUQUco dGFnLCBybG9jYXRvci5sb2NhdG9yLCBmb3JrbnVtLCBzZWdubyk7CisJSU5JVF9NRF9GSUxFVEFH KHRhZywgc2xvY2F0b3IubG9jYXRvciwgc2xvY2F0b3IuZm9ya251bSwgc2Vnbm8pOwogCiAJLyog U2hvdWxkIG5ldmVyIGJlIHVzZWQgd2l0aCB0ZW1wIHJlbGF0aW9ucyAqLwotCUFzc2VydCghUmVs RmlsZUxvY2F0b3JCYWNrZW5kSXNUZW1wKHJsb2NhdG9yKSk7CisJQXNzZXJ0KCFTTWdyRmlsZUxv Y2F0b3JJc1RlbXAoc2xvY2F0b3IpKTsKIAogCVJlZ2lzdGVyU3luY1JlcXVlc3QoJnRhZywgU1lO Q19VTkxJTktfUkVRVUVTVCwgdHJ1ZSAvKiByZXRyeU9uRXJyb3IgKi8gKTsKIH0KQEAgLTEwMjIs MTIgKzEwMTcsMTEgQEAgcmVnaXN0ZXJfdW5saW5rX3NlZ21lbnQoUmVsRmlsZUxvY2F0b3JCYWNr ZW5kIHJsb2NhdG9yLCBGb3JrTnVtYmVyIGZvcmtudW0sCiAgKiByZWdpc3Rlcl9mb3JnZXRfcmVx dWVzdCgpIC0tIGZvcmdldCBhbnkgZnN5bmNzIGZvciBhIHJlbGF0aW9uIGZvcmsncyBzZWdtZW50 CiAgKi8KIHN0YXRpYyB2b2lkCi1yZWdpc3Rlcl9mb3JnZXRfcmVxdWVzdChSZWxGaWxlTG9jYXRv ckJhY2tlbmQgcmxvY2F0b3IsIEZvcmtOdW1iZXIgZm9ya251bSwKLQkJCQkJCUJsb2NrTnVtYmVy IHNlZ25vKQorcmVnaXN0ZXJfZm9yZ2V0X3JlcXVlc3QoU01nckZpbGVMb2NhdG9yIHNsb2NhdG9y LCBCbG9ja051bWJlciBzZWdubykKIHsKIAlGaWxlVGFnCQl0YWc7CiAKLQlJTklUX01EX0ZJTEVU QUcodGFnLCBybG9jYXRvci5sb2NhdG9yLCBmb3JrbnVtLCBzZWdubyk7CisJSU5JVF9NRF9GSUxF VEFHKHRhZywgc2xvY2F0b3IubG9jYXRvciwgc2xvY2F0b3IuZm9ya251bSwgc2Vnbm8pOwogCiAJ UmVnaXN0ZXJTeW5jUmVxdWVzdCgmdGFnLCBTWU5DX0ZPUkdFVF9SRVFVRVNULCB0cnVlIC8qIHJl dHJ5T25FcnJvciAqLyApOwogfQpAQCAtMTA1MCw1NyArMTA0NCwyNSBAQCBGb3JnZXREYXRhYmFz ZVN5bmNSZXF1ZXN0cyhPaWQgZGJpZCkKIAlSZWdpc3RlclN5bmNSZXF1ZXN0KCZ0YWcsIFNZTkNf RklMVEVSX1JFUVVFU1QsIHRydWUgLyogcmV0cnlPbkVycm9yICovICk7CiB9CiAKLS8qCi0gKiBE cm9wUmVsYXRpb25GaWxlcyAtLSBkcm9wIGZpbGVzIG9mIGFsbCBnaXZlbiByZWxhdGlvbnMKLSAq Lwotdm9pZAotRHJvcFJlbGF0aW9uRmlsZXMoUmVsRmlsZUxvY2F0b3IgKmRlbHJlbHMsIGludCBu ZGVscmVscywgYm9vbCBpc1JlZG8pCi17Ci0JU01nclJlbGF0aW9uICpzcmVsczsKLQlpbnQJCQlp OwotCi0Jc3JlbHMgPSBwYWxsb2Moc2l6ZW9mKFNNZ3JSZWxhdGlvbikgKiBuZGVscmVscyk7Ci0J Zm9yIChpID0gMDsgaSA8IG5kZWxyZWxzOyBpKyspCi0JewotCQlTTWdyUmVsYXRpb24gc3JlbCA9 IHNtZ3JvcGVuKGRlbHJlbHNbaV0sIEludmFsaWRCYWNrZW5kSWQpOwotCi0JCWlmIChpc1JlZG8p Ci0JCXsKLQkJCUZvcmtOdW1iZXIJZm9yazsKLQotCQkJZm9yIChmb3JrID0gMDsgZm9yayA8PSBN QVhfRk9SS05VTTsgZm9yaysrKQotCQkJCVhMb2dEcm9wUmVsYXRpb24oZGVscmVsc1tpXSwgZm9y ayk7Ci0JCX0KLQkJc3JlbHNbaV0gPSBzcmVsOwotCX0KLQotCXNtZ3Jkb3VubGlua2FsbChzcmVs cywgbmRlbHJlbHMsIGlzUmVkbyk7Ci0KLQlmb3IgKGkgPSAwOyBpIDwgbmRlbHJlbHM7IGkrKykK LQkJc21ncmNsb3NlKHNyZWxzW2ldKTsKLQlwZnJlZShzcmVscyk7Ci19Ci0KIAogLyoKICAqCV9m ZHZlY19yZXNpemUoKSAtLSBSZXNpemUgdGhlIGZvcmsncyBvcGVuIHNlZ21lbnRzIGFycmF5CiAg Ki8KIHN0YXRpYyB2b2lkCi1fZmR2ZWNfcmVzaXplKFNNZ3JSZWxhdGlvbiByZWxuLAotCQkJICBG b3JrTnVtYmVyIGZvcmtudW0sCitfZmR2ZWNfcmVzaXplKFNNZ3JGaWxlSGFuZGxlIHNmaWxlLAog CQkJICBpbnQgbnNlZykKIHsKIAlpZiAobnNlZyA9PSAwKQogCXsKLQkJaWYgKHJlbG4tPm1kX251 bV9vcGVuX3NlZ3NbZm9ya251bV0gPiAwKQorCQlpZiAoc2ZpbGUtPm1kX251bV9vcGVuX3NlZ3Mg PiAwKQogCQl7Ci0JCQlwZnJlZShyZWxuLT5tZF9zZWdfZmRzW2ZvcmtudW1dKTsKLQkJCXJlbG4t Pm1kX3NlZ19mZHNbZm9ya251bV0gPSBOVUxMOworCQkJcGZyZWUoc2ZpbGUtPm1kX3NlZ19mZHMp OworCQkJc2ZpbGUtPm1kX3NlZ19mZHMgPSBOVUxMOwogCQl9CiAJfQotCWVsc2UgaWYgKHJlbG4t Pm1kX251bV9vcGVuX3NlZ3NbZm9ya251bV0gPT0gMCkKKwllbHNlIGlmIChzZmlsZS0+bWRfbnVt X29wZW5fc2VncyA9PSAwKQogCXsKLQkJcmVsbi0+bWRfc2VnX2Zkc1tmb3JrbnVtXSA9CisJCXNm aWxlLT5tZF9zZWdfZmRzID0KIAkJCU1lbW9yeUNvbnRleHRBbGxvYyhNZEN4dCwgc2l6ZW9mKE1k ZmRWZWMpICogbnNlZyk7CiAJfQogCWVsc2UKQEAgLTExMTEsMTIgKzEwNzMsMTIgQEAgX2ZkdmVj X3Jlc2l6ZShTTWdyUmVsYXRpb24gcmVsbiwKIAkJICogRmlsZUNsb3NlKCksIGFuZCB0aGUgbWVt b3J5IGNvbnRleHQgaW50ZXJuYWxseSB3aWxsIHNvbWV0aW1lcyBhdm9pZAogCQkgKiBkb2luZyBh biBhY3R1YWwgcmVhbGxvY2F0aW9uLgogCQkgKi8KLQkJcmVsbi0+bWRfc2VnX2Zkc1tmb3JrbnVt XSA9Ci0JCQlyZXBhbGxvYyhyZWxuLT5tZF9zZWdfZmRzW2ZvcmtudW1dLAorCQlzZmlsZS0+bWRf c2VnX2ZkcyA9CisJCQlyZXBhbGxvYyhzZmlsZS0+bWRfc2VnX2ZkcywKIAkJCQkJIHNpemVvZihN ZGZkVmVjKSAqIG5zZWcpOwogCX0KIAotCXJlbG4tPm1kX251bV9vcGVuX3NlZ3NbZm9ya251bV0g PSBuc2VnOworCXNmaWxlLT5tZF9udW1fb3Blbl9zZWdzID0gbnNlZzsKIH0KIAogLyoKQEAgLTEx MjQsMTIgKzEwODYsMTIgQEAgX2ZkdmVjX3Jlc2l6ZShTTWdyUmVsYXRpb24gcmVsbiwKICAqIHJl dHVybmVkIHN0cmluZyBpcyBwYWxsb2MnZC4KICAqLwogc3RhdGljIGNoYXIgKgotX21kZmRfc2Vn cGF0aChTTWdyUmVsYXRpb24gcmVsbiwgRm9ya051bWJlciBmb3JrbnVtLCBCbG9ja051bWJlciBz ZWdubykKK19tZGZkX3NlZ3BhdGgoU01nckZpbGVIYW5kbGUgc2ZpbGUsIEJsb2NrTnVtYmVyIHNl Z25vKQogewogCWNoYXIJICAgKnBhdGgsCiAJCQkgICAqZnVsbHBhdGg7CiAKLQlwYXRoID0gcmVs cGF0aChyZWxuLT5zbWdyX3Jsb2NhdG9yLCBmb3JrbnVtKTsKKwlwYXRoID0gc21ncmZpbGVwYXRo KHNmaWxlLT5zbWdyX2xvY2F0b3IpOwogCiAJaWYgKHNlZ25vID4gMCkKIAl7CkBAIC0xMTQ3LDE0 ICsxMTA5LDE0IEBAIF9tZGZkX3NlZ3BhdGgoU01nclJlbGF0aW9uIHJlbG4sIEZvcmtOdW1iZXIg Zm9ya251bSwgQmxvY2tOdW1iZXIgc2Vnbm8pCiAgKiBhbmQgbWFrZSBhIE1kZmRWZWMgb2JqZWN0 IGZvciBpdC4gIFJldHVybnMgTlVMTCBvbiBmYWlsdXJlLgogICovCiBzdGF0aWMgTWRmZFZlYyAq Ci1fbWRmZF9vcGVuc2VnKFNNZ3JSZWxhdGlvbiByZWxuLCBGb3JrTnVtYmVyIGZvcmtudW0sIEJs b2NrTnVtYmVyIHNlZ25vLAorX21kZmRfb3BlbnNlZyhTTWdyRmlsZUhhbmRsZSBzZmlsZSwgQmxv Y2tOdW1iZXIgc2Vnbm8sCiAJCQkgIGludCBvZmxhZ3MpCiB7CiAJTWRmZFZlYyAgICAqdjsKIAlG aWxlCQlmZDsKIAljaGFyCSAgICpmdWxscGF0aDsKIAotCWZ1bGxwYXRoID0gX21kZmRfc2VncGF0 aChyZWxuLCBmb3JrbnVtLCBzZWdubyk7CisJZnVsbHBhdGggPSBfbWRmZF9zZWdwYXRoKHNmaWxl LCBzZWdubyk7CiAKIAkvKiBvcGVuIHRoZSBmaWxlICovCiAJZmQgPSBQYXRoTmFtZU9wZW5GaWxl KGZ1bGxwYXRoLCBPX1JEV1IgfCBQR19CSU5BUlkgfCBvZmxhZ3MpOwpAQCAtMTE2OCwxNiArMTEz MCwxNiBAQCBfbWRmZF9vcGVuc2VnKFNNZ3JSZWxhdGlvbiByZWxuLCBGb3JrTnVtYmVyIGZvcmtu dW0sIEJsb2NrTnVtYmVyIHNlZ25vLAogCSAqIFNlZ21lbnRzIGFyZSBhbHdheXMgb3BlbmVkIGlu IG9yZGVyIGZyb20gbG93ZXN0IHRvIGhpZ2hlc3QsIHNvIHdlIG11c3QKIAkgKiBiZSBhZGRpbmcg YSBuZXcgb25lIGF0IHRoZSBlbmQuCiAJICovCi0JQXNzZXJ0KHNlZ25vID09IHJlbG4tPm1kX251 bV9vcGVuX3NlZ3NbZm9ya251bV0pOworCUFzc2VydChzZWdubyA9PSBzZmlsZS0+bWRfbnVtX29w ZW5fc2Vncyk7CiAKLQlfZmR2ZWNfcmVzaXplKHJlbG4sIGZvcmtudW0sIHNlZ25vICsgMSk7CisJ X2ZkdmVjX3Jlc2l6ZShzZmlsZSwgc2Vnbm8gKyAxKTsKIAogCS8qIGZpbGwgdGhlIGVudHJ5ICov Ci0JdiA9ICZyZWxuLT5tZF9zZWdfZmRzW2ZvcmtudW1dW3NlZ25vXTsKKwl2ID0gJnNmaWxlLT5t ZF9zZWdfZmRzW3NlZ25vXTsKIAl2LT5tZGZkX3ZmZCA9IGZkOwogCXYtPm1kZmRfc2Vnbm8gPSBz ZWdubzsKIAotCUFzc2VydChfbWRuYmxvY2tzKHJlbG4sIGZvcmtudW0sIHYpIDw9ICgoQmxvY2tO dW1iZXIpIFJFTFNFR19TSVpFKSk7CisJQXNzZXJ0KF9tZG5ibG9ja3Moc2ZpbGUsIHYpIDw9ICgo QmxvY2tOdW1iZXIpIFNFR1NJWkUoc2ZpbGUpKSk7CiAKIAkvKiBhbGwgZG9uZSAqLwogCXJldHVy biB2OwpAQCAtMTE5Miw3ICsxMTU0LDcgQEAgX21kZmRfb3BlbnNlZyhTTWdyUmVsYXRpb24gcmVs biwgRm9ya051bWJlciBmb3JrbnVtLCBCbG9ja051bWJlciBzZWdubywKICAqIEVYVEVOU0lPTl9D UkVBVEUgY2FzZS4KICAqLwogc3RhdGljIE1kZmRWZWMgKgotX21kZmRfZ2V0c2VnKFNNZ3JSZWxh dGlvbiByZWxuLCBGb3JrTnVtYmVyIGZvcmtudW0sIEJsb2NrTnVtYmVyIGJsa25vLAorX21kZmRf Z2V0c2VnKFNNZ3JGaWxlSGFuZGxlIHNmaWxlLCBCbG9ja051bWJlciBibGtubywKIAkJCSBib29s IHNraXBGc3luYywgaW50IGJlaGF2aW9yKQogewogCU1kZmRWZWMgICAgKnY7CkBAIC0xMjA0LDEy ICsxMTY2LDEyIEBAIF9tZGZkX2dldHNlZyhTTWdyUmVsYXRpb24gcmVsbiwgRm9ya051bWJlciBm b3JrbnVtLCBCbG9ja051bWJlciBibGtubywKIAkJICAgKEVYVEVOU0lPTl9GQUlMIHwgRVhURU5T SU9OX0NSRUFURSB8IEVYVEVOU0lPTl9SRVRVUk5fTlVMTCB8CiAJCQlFWFRFTlNJT05fRE9OVF9P UEVOKSk7CiAKLQl0YXJnZXRzZWcgPSBibGtubyAvICgoQmxvY2tOdW1iZXIpIFJFTFNFR19TSVpF KTsKKwl0YXJnZXRzZWcgPSBibGtubyAvICgoQmxvY2tOdW1iZXIpIFNFR1NJWkUoc2ZpbGUpKTsK IAogCS8qIGlmIGFuIGV4aXN0aW5nIGFuZCBvcGVuZWQgc2VnbWVudCwgd2UncmUgZG9uZSAqLwot CWlmICh0YXJnZXRzZWcgPCByZWxuLT5tZF9udW1fb3Blbl9zZWdzW2ZvcmtudW1dKQorCWlmICh0 YXJnZXRzZWcgPCBzZmlsZS0+bWRfbnVtX29wZW5fc2VncykKIAl7Ci0JCXYgPSAmcmVsbi0+bWRf c2VnX2Zkc1tmb3JrbnVtXVt0YXJnZXRzZWddOworCQl2ID0gJnNmaWxlLT5tZF9zZWdfZmRzW3Rh cmdldHNlZ107CiAJCXJldHVybiB2OwogCX0KIApAQCAtMTIyNCwyNCArMTE4NiwyNCBAQCBfbWRm ZF9nZXRzZWcoU01nclJlbGF0aW9uIHJlbG4sIEZvcmtOdW1iZXIgZm9ya251bSwgQmxvY2tOdW1i ZXIgYmxrbm8sCiAJICogJ2JlaGF2aW9yJykuIFN0YXJ0IHdpdGggZWl0aGVyIHRoZSBsYXN0IG9w ZW5lZCwgb3IgdGhlIGZpcnN0IHNlZ21lbnQgaWYKIAkgKiBub25lIHdhcyBvcGVuZWQgYmVmb3Jl LgogCSAqLwotCWlmIChyZWxuLT5tZF9udW1fb3Blbl9zZWdzW2ZvcmtudW1dID4gMCkKLQkJdiA9 ICZyZWxuLT5tZF9zZWdfZmRzW2ZvcmtudW1dW3JlbG4tPm1kX251bV9vcGVuX3NlZ3NbZm9ya251 bV0gLSAxXTsKKwlpZiAoc2ZpbGUtPm1kX251bV9vcGVuX3NlZ3MgPiAwKQorCQl2ID0gJnNmaWxl LT5tZF9zZWdfZmRzW3NmaWxlLT5tZF9udW1fb3Blbl9zZWdzIC0gMV07CiAJZWxzZQogCXsKLQkJ diA9IG1kb3BlbmZvcmsocmVsbiwgZm9ya251bSwgYmVoYXZpb3IpOworCQl2ID0gbWRvcGVuZm9y ayhzZmlsZSwgYmVoYXZpb3IpOwogCQlpZiAoIXYpCiAJCQlyZXR1cm4gTlVMTDsJCS8qIGlmIGJl aGF2aW9yICYgRVhURU5TSU9OX1JFVFVSTl9OVUxMICovCiAJfQogCi0JZm9yIChuZXh0c2Vnbm8g PSByZWxuLT5tZF9udW1fb3Blbl9zZWdzW2ZvcmtudW1dOworCWZvciAobmV4dHNlZ25vID0gc2Zp bGUtPm1kX251bV9vcGVuX3NlZ3M7CiAJCSBuZXh0c2Vnbm8gPD0gdGFyZ2V0c2VnOyBuZXh0c2Vn bm8rKykKIAl7Ci0JCUJsb2NrTnVtYmVyIG5ibG9ja3MgPSBfbWRuYmxvY2tzKHJlbG4sIGZvcmtu dW0sIHYpOworCQlCbG9ja051bWJlciBuYmxvY2tzID0gX21kbmJsb2NrcyhzZmlsZSwgdik7CiAJ CWludAkJCWZsYWdzID0gMDsKIAogCQlBc3NlcnQobmV4dHNlZ25vID09IHYtPm1kZmRfc2Vnbm8g KyAxKTsKIAotCQlpZiAobmJsb2NrcyA+ICgoQmxvY2tOdW1iZXIpIFJFTFNFR19TSVpFKSkKKwkJ aWYgKG5ibG9ja3MgPiAoKEJsb2NrTnVtYmVyKSBTRUdTSVpFKHNmaWxlKSkpCiAJCQllbG9nKEZB VEFMLCAic2VnbWVudCB0b28gYmlnIik7CiAKIAkJaWYgKChiZWhhdmlvciAmIEVYVEVOU0lPTl9D UkVBVEUpIHx8CkBAIC0xMjU2LDI5ICsxMjE4LDI5IEBAIF9tZGZkX2dldHNlZyhTTWdyUmVsYXRp b24gcmVsbiwgRm9ya051bWJlciBmb3JrbnVtLCBCbG9ja051bWJlciBibGtubywKIAkJCSAqIGFo ZWFkIGFuZCBjcmVhdGUgdGhlIHNlZ21lbnRzIHNvIHdlIGNhbiBmaW5pc2ggb3V0IHRoZSByZXBs YXkuCiAJCQkgKgogCQkJICogV2UgaGF2ZSB0byBtYWludGFpbiB0aGUgaW52YXJpYW50IHRoYXQg c2VnbWVudHMgYmVmb3JlIHRoZSBsYXN0Ci0JCQkgKiBhY3RpdmUgc2VnbWVudCBhcmUgb2Ygc2l6 ZSBSRUxTRUdfU0laRTsgdGhlcmVmb3JlLCBpZgorCQkJICogYWN0aXZlIHNlZ21lbnQgYXJlIG9m IHNpemUgU0VHU0laRTsgdGhlcmVmb3JlLCBpZgogCQkJICogZXh0ZW5kaW5nLCBwYWQgdGhlbSBv dXQgd2l0aCB6ZXJvZXMgaWYgbmVlZGVkLiAgKFRoaXMgb25seQogCQkJICogbWF0dGVycyBpZiBp biByZWNvdmVyeSwgb3IgaWYgdGhlIGNhbGxlciBpcyBleHRlbmRpbmcgdGhlCiAJCQkgKiByZWxh dGlvbiBkaXNjb250aWd1b3VzbHksIGJ1dCB0aGF0IGNhbiBoYXBwZW4gaW4gaGFzaCBpbmRleGVz LikKIAkJCSAqLwotCQkJaWYgKG5ibG9ja3MgPCAoKEJsb2NrTnVtYmVyKSBSRUxTRUdfU0laRSkp CisJCQlpZiAobmJsb2NrcyA8ICgoQmxvY2tOdW1iZXIpIFNFR1NJWkUoc2ZpbGUpKSkKIAkJCXsK IAkJCQljaGFyCSAgICp6ZXJvYnVmID0gcGFsbG9jMChCTENLU1opOwogCi0JCQkJbWRleHRlbmQo cmVsbiwgZm9ya251bSwKLQkJCQkJCSBuZXh0c2Vnbm8gKiAoKEJsb2NrTnVtYmVyKSBSRUxTRUdf U0laRSkgLSAxLAorCQkJCW1kZXh0ZW5kKHNmaWxlLAorCQkJCQkJIG5leHRzZWdubyAqICgoQmxv Y2tOdW1iZXIpIFNFR1NJWkUoc2ZpbGUpKSAtIDEsCiAJCQkJCQkgemVyb2J1Ziwgc2tpcEZzeW5j KTsKIAkJCQlwZnJlZSh6ZXJvYnVmKTsKIAkJCX0KIAkJCWZsYWdzID0gT19DUkVBVDsKIAkJfQog CQllbHNlIGlmICghKGJlaGF2aW9yICYgRVhURU5TSU9OX0RPTlRfQ0hFQ0tfU0laRSkgJiYKLQkJ CQkgbmJsb2NrcyA8ICgoQmxvY2tOdW1iZXIpIFJFTFNFR19TSVpFKSkKKwkJCQkgbmJsb2NrcyA8 ICgoQmxvY2tOdW1iZXIpIFNFR1NJWkUoc2ZpbGUpKSkKIAkJewogCQkJLyoKIAkJCSAqIFdoZW4g bm90IGV4dGVuZGluZyAob3IgZXhwbGljaXRseSBpbmNsdWRpbmcgdHJ1bmNhdGVkCiAJCQkgKiBz ZWdtZW50cyksIG9ubHkgb3BlbiB0aGUgbmV4dCBzZWdtZW50IGlmIHRoZSBjdXJyZW50IG9uZSBp cwotCQkJICogZXhhY3RseSBSRUxTRUdfU0laRS4gIElmIG5vdCAodGhpcyBicmFuY2gpLCBlaXRo ZXIgcmV0dXJuIE5VTEwKKwkJCSAqIGV4YWN0bHkgU0VHU0laRS4gIElmIG5vdCAodGhpcyBicmFu Y2gpLCBlaXRoZXIgcmV0dXJuIE5VTEwKIAkJCSAqIG9yIGZhaWwuCiAJCQkgKi8KIAkJCWlmIChi ZWhhdmlvciAmIEVYVEVOU0lPTl9SRVRVUk5fTlVMTCkKQEAgLTEyOTYsMTEgKzEyNTgsMTEgQEAg X21kZmRfZ2V0c2VnKFNNZ3JSZWxhdGlvbiByZWxuLCBGb3JrTnVtYmVyIGZvcmtudW0sIEJsb2Nr TnVtYmVyIGJsa25vLAogCQkJZXJlcG9ydChFUlJPUiwKIAkJCQkJKGVycmNvZGVfZm9yX2ZpbGVf YWNjZXNzKCksCiAJCQkJCSBlcnJtc2coImNvdWxkIG5vdCBvcGVuIGZpbGUgXCIlc1wiICh0YXJn ZXQgYmxvY2sgJXUpOiBwcmV2aW91cyBzZWdtZW50IGlzIG9ubHkgJXUgYmxvY2tzIiwKLQkJCQkJ CQlfbWRmZF9zZWdwYXRoKHJlbG4sIGZvcmtudW0sIG5leHRzZWdubyksCisJCQkJCQkJX21kZmRf c2VncGF0aChzZmlsZSwgbmV4dHNlZ25vKSwKIAkJCQkJCQlibGtubywgbmJsb2NrcykpKTsKIAkJ fQogCi0JCXYgPSBfbWRmZF9vcGVuc2VnKHJlbG4sIGZvcmtudW0sIG5leHRzZWdubywgZmxhZ3Mp OworCQl2ID0gX21kZmRfb3BlbnNlZyhzZmlsZSwgbmV4dHNlZ25vLCBmbGFncyk7CiAKIAkJaWYg KHYgPT0gTlVMTCkKIAkJewpAQCAtMTMxMCw3ICsxMjcyLDcgQEAgX21kZmRfZ2V0c2VnKFNNZ3JS ZWxhdGlvbiByZWxuLCBGb3JrTnVtYmVyIGZvcmtudW0sIEJsb2NrTnVtYmVyIGJsa25vLAogCQkJ ZXJlcG9ydChFUlJPUiwKIAkJCQkJKGVycmNvZGVfZm9yX2ZpbGVfYWNjZXNzKCksCiAJCQkJCSBl cnJtc2coImNvdWxkIG5vdCBvcGVuIGZpbGUgXCIlc1wiICh0YXJnZXQgYmxvY2sgJXUpOiAlbSIs Ci0JCQkJCQkJX21kZmRfc2VncGF0aChyZWxuLCBmb3JrbnVtLCBuZXh0c2Vnbm8pLAorCQkJCQkJ CV9tZGZkX3NlZ3BhdGgoc2ZpbGUsIG5leHRzZWdubyksCiAJCQkJCQkJYmxrbm8pKSk7CiAJCX0K IAl9CkBAIC0xMzIyLDcgKzEyODQsNyBAQCBfbWRmZF9nZXRzZWcoU01nclJlbGF0aW9uIHJlbG4s IEZvcmtOdW1iZXIgZm9ya251bSwgQmxvY2tOdW1iZXIgYmxrbm8sCiAgKiBHZXQgbnVtYmVyIG9m IGJsb2NrcyBwcmVzZW50IGluIGEgc2luZ2xlIGRpc2sgZmlsZQogICovCiBzdGF0aWMgQmxvY2tO dW1iZXIKLV9tZG5ibG9ja3MoU01nclJlbGF0aW9uIHJlbG4sIEZvcmtOdW1iZXIgZm9ya251bSwg TWRmZFZlYyAqc2VnKQorX21kbmJsb2NrcyhTTWdyRmlsZUhhbmRsZSBzZmlsZSwgTWRmZFZlYyAq c2VnKQogewogCW9mZl90CQlsZW47CiAKQEAgLTEzNDUsMTYgKzEzMDcsMTYgQEAgX21kbmJsb2Nr cyhTTWdyUmVsYXRpb24gcmVsbiwgRm9ya051bWJlciBmb3JrbnVtLCBNZGZkVmVjICpzZWcpCiBp bnQKIG1kc3luY2ZpbGV0YWcoY29uc3QgRmlsZVRhZyAqZnRhZywgY2hhciAqcGF0aCkKIHsKLQlT TWdyUmVsYXRpb24gcmVsbiA9IHNtZ3JvcGVuKGZ0YWctPnJsb2NhdG9yLCBJbnZhbGlkQmFja2Vu ZElkKTsKKwlTTWdyRmlsZUhhbmRsZSBzZmlsZSA9IHNtZ3JvcGVuKGZ0YWctPnJsb2NhdG9yLCBJ bnZhbGlkQmFja2VuZElkLCBmdGFnLT5mb3JrbnVtKTsKIAlGaWxlCQlmaWxlOwogCWJvb2wJCW5l ZWRfdG9fY2xvc2U7CiAJaW50CQkJcmVzdWx0LAogCQkJCXNhdmVfZXJybm87CiAKIAkvKiBTZWUg aWYgd2UgYWxyZWFkeSBoYXZlIHRoZSBmaWxlIG9wZW4sIG9yIG5lZWQgdG8gb3BlbiBpdC4gKi8K LQlpZiAoZnRhZy0+c2Vnbm8gPCByZWxuLT5tZF9udW1fb3Blbl9zZWdzW2Z0YWctPmZvcmtudW1d KQorCWlmIChmdGFnLT5zZWdubyA8IHNmaWxlLT5tZF9udW1fb3Blbl9zZWdzKQogCXsKLQkJZmls ZSA9IHJlbG4tPm1kX3NlZ19mZHNbZnRhZy0+Zm9ya251bV1bZnRhZy0+c2Vnbm9dLm1kZmRfdmZk OworCQlmaWxlID0gc2ZpbGUtPm1kX3NlZ19mZHNbZnRhZy0+c2Vnbm9dLm1kZmRfdmZkOwogCQlz dHJsY3B5KHBhdGgsIEZpbGVQYXRoTmFtZShmaWxlKSwgTUFYUEdQQVRIKTsKIAkJbmVlZF90b19j bG9zZSA9IGZhbHNlOwogCX0KQEAgLTEzNjIsNyArMTMyNCw3IEBAIG1kc3luY2ZpbGV0YWcoY29u c3QgRmlsZVRhZyAqZnRhZywgY2hhciAqcGF0aCkKIAl7CiAJCWNoYXIJICAgKnA7CiAKLQkJcCA9 IF9tZGZkX3NlZ3BhdGgocmVsbiwgZnRhZy0+Zm9ya251bSwgZnRhZy0+c2Vnbm8pOworCQlwID0g X21kZmRfc2VncGF0aChzZmlsZSwgZnRhZy0+c2Vnbm8pOwogCQlzdHJsY3B5KHBhdGgsIHAsIE1B WFBHUEFUSCk7CiAJCXBmcmVlKHApOwogCmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9zdG9yYWdl L3NtZ3Ivc21nci5jIGIvc3JjL2JhY2tlbmQvc3RvcmFnZS9zbWdyL3NtZ3IuYwppbmRleCBjMWE1 ZmViY2JmZC4uZGUxMDMzMjA1NzQgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL3N0b3JhZ2Uvc21n ci9zbWdyLmMKKysrIGIvc3JjL2JhY2tlbmQvc3RvcmFnZS9zbWdyL3NtZ3IuYwpAQCAtNDEsMjcg KzQxLDI0IEBAIHR5cGVkZWYgc3RydWN0IGZfc21ncgogewogCXZvaWQJCSgqc21ncl9pbml0KSAo dm9pZCk7CS8qIG1heSBiZSBOVUxMICovCiAJdm9pZAkJKCpzbWdyX3NodXRkb3duKSAodm9pZCk7 CS8qIG1heSBiZSBOVUxMICovCi0Jdm9pZAkJKCpzbWdyX29wZW4pIChTTWdyUmVsYXRpb24gcmVs bik7Ci0Jdm9pZAkJKCpzbWdyX2Nsb3NlKSAoU01nclJlbGF0aW9uIHJlbG4sIEZvcmtOdW1iZXIg Zm9ya251bSk7Ci0Jdm9pZAkJKCpzbWdyX2NyZWF0ZSkgKFNNZ3JSZWxhdGlvbiByZWxuLCBGb3Jr TnVtYmVyIGZvcmtudW0sCi0JCQkJCQkJCWJvb2wgaXNSZWRvKTsKLQlib29sCQkoKnNtZ3JfZXhp c3RzKSAoU01nclJlbGF0aW9uIHJlbG4sIEZvcmtOdW1iZXIgZm9ya251bSk7Ci0Jdm9pZAkJKCpz bWdyX3VubGluaykgKFJlbEZpbGVMb2NhdG9yQmFja2VuZCBybG9jYXRvciwgRm9ya051bWJlciBm b3JrbnVtLAotCQkJCQkJCQlib29sIGlzUmVkbyk7Ci0Jdm9pZAkJKCpzbWdyX2V4dGVuZCkgKFNN Z3JSZWxhdGlvbiByZWxuLCBGb3JrTnVtYmVyIGZvcmtudW0sCisJdm9pZAkJKCpzbWdyX29wZW4p IChTTWdyRmlsZUhhbmRsZSBzZmlsZSk7CisJdm9pZAkJKCpzbWdyX2Nsb3NlKSAoU01nckZpbGVI YW5kbGUgc2ZpbGUpOworCXZvaWQJCSgqc21ncl9jcmVhdGUpIChTTWdyRmlsZUhhbmRsZSBzZmls ZSwgYm9vbCBpc1JlZG8pOworCWJvb2wJCSgqc21ncl9leGlzdHMpIChTTWdyRmlsZUhhbmRsZSBz ZmlsZSk7CisJdm9pZAkJKCpzbWdyX3VubGluaykgKFNNZ3JGaWxlTG9jYXRvciBzbG9jYXRvciwg Ym9vbCBpc1JlZG8pOworCXZvaWQJCSgqc21ncl9leHRlbmQpIChTTWdyRmlsZUhhbmRsZSBzZmls ZSwKIAkJCQkJCQkJQmxvY2tOdW1iZXIgYmxvY2tudW0sIGNoYXIgKmJ1ZmZlciwgYm9vbCBza2lw RnN5bmMpOwotCWJvb2wJCSgqc21ncl9wcmVmZXRjaCkgKFNNZ3JSZWxhdGlvbiByZWxuLCBGb3Jr TnVtYmVyIGZvcmtudW0sCisJYm9vbAkJKCpzbWdyX3ByZWZldGNoKSAoU01nckZpbGVIYW5kbGUg c2ZpbGUsCiAJCQkJCQkJCSAgQmxvY2tOdW1iZXIgYmxvY2tudW0pOwotCXZvaWQJCSgqc21ncl9y ZWFkKSAoU01nclJlbGF0aW9uIHJlbG4sIEZvcmtOdW1iZXIgZm9ya251bSwKKwl2b2lkCQkoKnNt Z3JfcmVhZCkgKFNNZ3JGaWxlSGFuZGxlIHNmaWxlLAogCQkJCQkJCSAgQmxvY2tOdW1iZXIgYmxv Y2tudW0sIGNoYXIgKmJ1ZmZlcik7Ci0Jdm9pZAkJKCpzbWdyX3dyaXRlKSAoU01nclJlbGF0aW9u IHJlbG4sIEZvcmtOdW1iZXIgZm9ya251bSwKKwl2b2lkCQkoKnNtZ3Jfd3JpdGUpIChTTWdyRmls ZUhhbmRsZSBzZmlsZSwKIAkJCQkJCQkgICBCbG9ja051bWJlciBibG9ja251bSwgY2hhciAqYnVm ZmVyLCBib29sIHNraXBGc3luYyk7Ci0Jdm9pZAkJKCpzbWdyX3dyaXRlYmFjaykgKFNNZ3JSZWxh dGlvbiByZWxuLCBGb3JrTnVtYmVyIGZvcmtudW0sCisJdm9pZAkJKCpzbWdyX3dyaXRlYmFjaykg KFNNZ3JGaWxlSGFuZGxlIHNmaWxlLAogCQkJCQkJCQkgICBCbG9ja051bWJlciBibG9ja251bSwg QmxvY2tOdW1iZXIgbmJsb2Nrcyk7Ci0JQmxvY2tOdW1iZXIgKCpzbWdyX25ibG9ja3MpIChTTWdy UmVsYXRpb24gcmVsbiwgRm9ya051bWJlciBmb3JrbnVtKTsKLQl2b2lkCQkoKnNtZ3JfdHJ1bmNh dGUpIChTTWdyUmVsYXRpb24gcmVsbiwgRm9ya051bWJlciBmb3JrbnVtLAotCQkJCQkJCQkgIEJs b2NrTnVtYmVyIG5ibG9ja3MpOwotCXZvaWQJCSgqc21ncl9pbW1lZHN5bmMpIChTTWdyUmVsYXRp b24gcmVsbiwgRm9ya051bWJlciBmb3JrbnVtKTsKKwlCbG9ja051bWJlciAoKnNtZ3JfbmJsb2Nr cykgKFNNZ3JGaWxlSGFuZGxlIHNmaWxlKTsKKwl2b2lkCQkoKnNtZ3JfdHJ1bmNhdGUpIChTTWdy RmlsZUhhbmRsZSBzZmlsZSwgQmxvY2tOdW1iZXIgbmJsb2Nrcyk7CisJdm9pZAkJKCpzbWdyX2lt bWVkc3luYykgKFNNZ3JGaWxlSGFuZGxlIHNmaWxlKTsKIH0gZl9zbWdyOwogCiBzdGF0aWMgY29u c3QgZl9zbWdyIHNtZ3Jzd1tdID0gewpAQCAtODgsMTIgKzg1LDEyIEBAIHN0YXRpYyBjb25zdCBm X3NtZ3Igc21ncnN3W10gPSB7CiBzdGF0aWMgY29uc3QgaW50IE5TbWdyID0gbGVuZ3Rob2Yoc21n cnN3KTsKIAogLyoKLSAqIEVhY2ggYmFja2VuZCBoYXMgYSBoYXNodGFibGUgdGhhdCBzdG9yZXMg YWxsIGV4dGFudCBTTWdyUmVsYXRpb24gb2JqZWN0cy4KLSAqIEluIGFkZGl0aW9uLCAidW5vd25l ZCIgU01nclJlbGF0aW9uIG9iamVjdHMgYXJlIGNoYWluZWQgdG9nZXRoZXIgaW4gYSBsaXN0Lgor ICogRWFjaCBiYWNrZW5kIGhhcyBhIGhhc2h0YWJsZSB0aGF0IHN0b3JlcyBhbGwgZXh0YW50IFNN Z3JGaWxlRGF0YSBvYmplY3RzLgorICogSW4gYWRkaXRpb24sICJ1bm93bmVkIiBTTWdyRmlsZSBv YmplY3RzIGFyZSBjaGFpbmVkIHRvZ2V0aGVyIGluIGEgbGlzdC4KICAqLwotc3RhdGljIEhUQUIg KlNNZ3JSZWxhdGlvbkhhc2ggPSBOVUxMOworc3RhdGljIEhUQUIgKlNNZ3JGaWxlSGFzaCA9IE5V TEw7CiAKLXN0YXRpYyBkbGlzdF9oZWFkIHVub3duZWRfcmVsbnM7CitzdGF0aWMgZGxpc3RfaGVh ZCB1bm93bmVkX3NmaWxlczsKIAogLyogbG9jYWwgZnVuY3Rpb24gcHJvdG90eXBlcyAqLwogc3Rh dGljIHZvaWQgc21ncnNodXRkb3duKGludCBjb2RlLCBEYXR1bSBhcmcpOwpAQCAtMTQyLDUwICsx MzksNTAgQEAgc21ncnNodXRkb3duKGludCBjb2RlLCBEYXR1bSBhcmcpCiAgKgogICoJCVRoaXMg ZG9lcyBub3QgYXR0ZW1wdCB0byBhY3R1YWxseSBvcGVuIHRoZSB1bmRlcmx5aW5nIGZpbGUuCiAg Ki8KLVNNZ3JSZWxhdGlvbgotc21ncm9wZW4oUmVsRmlsZUxvY2F0b3IgcmxvY2F0b3IsIEJhY2tl bmRJZCBiYWNrZW5kKQorU01nckZpbGVIYW5kbGUKK3NtZ3JvcGVuKFJlbEZpbGVMb2NhdG9yIHJs b2NhdG9yLCBCYWNrZW5kSWQgYmFja2VuZCwgRm9ya051bWJlciBmb3JrTnVtKQogewotCVJlbEZp bGVMb2NhdG9yQmFja2VuZCBicmxvY2F0b3I7Ci0JU01nclJlbGF0aW9uIHJlbG47CisJU01nckZp bGVMb2NhdG9yIHNsb2NhdG9yOworCVNNZ3JGaWxlSGFuZGxlIHNmaWxlOwogCWJvb2wJCWZvdW5k OwogCi0JaWYgKFNNZ3JSZWxhdGlvbkhhc2ggPT0gTlVMTCkKKwlpZiAoU01nckZpbGVIYXNoID09 IE5VTEwpCiAJewogCQkvKiBGaXJzdCB0aW1lIHRocm91Z2g6IGluaXRpYWxpemUgdGhlIGhhc2gg dGFibGUgKi8KIAkJSEFTSENUTAkJY3RsOwogCi0JCWN0bC5rZXlzaXplID0gc2l6ZW9mKFJlbEZp bGVMb2NhdG9yQmFja2VuZCk7Ci0JCWN0bC5lbnRyeXNpemUgPSBzaXplb2YoU01nclJlbGF0aW9u RGF0YSk7Ci0JCVNNZ3JSZWxhdGlvbkhhc2ggPSBoYXNoX2NyZWF0ZSgic21nciByZWxhdGlvbiB0 YWJsZSIsIDQwMCwKKwkJY3RsLmtleXNpemUgPSBzaXplb2YoU01nckZpbGVMb2NhdG9yKTsKKwkJ Y3RsLmVudHJ5c2l6ZSA9IHNpemVvZihTTWdyRmlsZURhdGEpOworCQlTTWdyRmlsZUhhc2ggPSBo YXNoX2NyZWF0ZSgic21nciByZWxhdGlvbiB0YWJsZSIsIDQwMCwKIAkJCQkJCQkJCSAgICZjdGws IEhBU0hfRUxFTSB8IEhBU0hfQkxPQlMpOwotCQlkbGlzdF9pbml0KCZ1bm93bmVkX3JlbG5zKTsK KwkJZGxpc3RfaW5pdCgmdW5vd25lZF9zZmlsZXMpOwogCX0KIAogCS8qIExvb2sgdXAgb3IgY3Jl YXRlIGFuIGVudHJ5ICovCi0JYnJsb2NhdG9yLmxvY2F0b3IgPSBybG9jYXRvcjsKLQlicmxvY2F0 b3IuYmFja2VuZCA9IGJhY2tlbmQ7Ci0JcmVsbiA9IChTTWdyUmVsYXRpb24pIGhhc2hfc2VhcmNo KFNNZ3JSZWxhdGlvbkhhc2gsCi0JCQkJCQkJCQkgICh2b2lkICopICZicmxvY2F0b3IsCi0JCQkJ CQkJCQkgIEhBU0hfRU5URVIsICZmb3VuZCk7CisJc2xvY2F0b3IubG9jYXRvciA9IHJsb2NhdG9y OworCXNsb2NhdG9yLmJhY2tlbmQgPSBiYWNrZW5kOworCXNsb2NhdG9yLmZvcmtudW0gPSBmb3Jr TnVtOworCXNmaWxlID0gKFNNZ3JGaWxlSGFuZGxlKSBoYXNoX3NlYXJjaChTTWdyRmlsZUhhc2gs CisJCQkJCQkJCQkJICh2b2lkICopICZzbG9jYXRvciwKKwkJCQkJCQkJCQkgSEFTSF9FTlRFUiwg JmZvdW5kKTsKIAogCS8qIEluaXRpYWxpemUgaXQgaWYgbm90IHByZXNlbnQgYmVmb3JlICovCiAJ aWYgKCFmb3VuZCkKIAl7CiAJCS8qIGhhc2hfc2VhcmNoIGFscmVhZHkgZmlsbGVkIGluIHRoZSBs b29rdXAga2V5ICovCi0JCXJlbG4tPnNtZ3Jfb3duZXIgPSBOVUxMOwotCQlyZWxuLT5zbWdyX3Rh cmdibG9jayA9IEludmFsaWRCbG9ja051bWJlcjsKLQkJZm9yIChpbnQgaSA9IDA7IGkgPD0gTUFY X0ZPUktOVU07ICsraSkKLQkJCXJlbG4tPnNtZ3JfY2FjaGVkX25ibG9ja3NbaV0gPSBJbnZhbGlk QmxvY2tOdW1iZXI7Ci0JCXJlbG4tPnNtZ3Jfd2hpY2ggPSAwOwkvKiB3ZSBvbmx5IGhhdmUgbWQu YyBhdCBwcmVzZW50ICovCisJCXNmaWxlLT5zbWdyX293bmVyID0gTlVMTDsKKwkJc2ZpbGUtPnNt Z3JfdGFyZ2Jsb2NrID0gSW52YWxpZEJsb2NrTnVtYmVyOworCQlzZmlsZS0+c21ncl9jYWNoZWRf bmJsb2NrcyA9IEludmFsaWRCbG9ja051bWJlcjsKKwkJc2ZpbGUtPnNtZ3Jfd2hpY2ggPSAwOwkv KiB3ZSBvbmx5IGhhdmUgbWQuYyBhdCBwcmVzZW50ICovCiAKIAkJLyogaW1wbGVtZW50YXRpb24t c3BlY2lmaWMgaW5pdGlhbGl6YXRpb24gKi8KLQkJc21ncnN3W3JlbG4tPnNtZ3Jfd2hpY2hdLnNt Z3Jfb3BlbihyZWxuKTsKKwkJc21ncnN3W3NmaWxlLT5zbWdyX3doaWNoXS5zbWdyX29wZW4oc2Zp bGUpOwogCiAJCS8qIGl0IGhhcyBubyBvd25lciB5ZXQgKi8KLQkJZGxpc3RfcHVzaF90YWlsKCZ1 bm93bmVkX3JlbG5zLCAmcmVsbi0+bm9kZSk7CisJCWRsaXN0X3B1c2hfdGFpbCgmdW5vd25lZF9z ZmlsZXMsICZzZmlsZS0+bm9kZSk7CiAJfQogCi0JcmV0dXJuIHJlbG47CisJcmV0dXJuIHNmaWxl OwogfQogCiAvKgpAQCAtMTk1LDcgKzE5Miw3IEBAIHNtZ3JvcGVuKFJlbEZpbGVMb2NhdG9yIHJs b2NhdG9yLCBCYWNrZW5kSWQgYmFja2VuZCkKICAqIHRoZSBvbmx5IHN1Y2ggb3duZXJzIGV4aXN0 IGluIHRoZSByZWxjYWNoZS4KICAqLwogdm9pZAotc21ncnNldG93bmVyKFNNZ3JSZWxhdGlvbiAq b3duZXIsIFNNZ3JSZWxhdGlvbiByZWxuKQorc21ncnNldG93bmVyKFNNZ3JGaWxlSGFuZGxlICpv d25lciwgU01nckZpbGVIYW5kbGUgc2ZpbGUpCiB7CiAJLyogV2UgZG9uJ3Qgc3VwcG9ydCAiZGlz b3duaW5nIiBhbiBTTWdyUmVsYXRpb24gaGVyZSwgdXNlIHNtZ3JjbGVhcm93bmVyICovCiAJQXNz ZXJ0KG93bmVyICE9IE5VTEwpOwpAQCAtMjA2LDY4ICsyMDMsNjYgQEAgc21ncnNldG93bmVyKFNN Z3JSZWxhdGlvbiAqb3duZXIsIFNNZ3JSZWxhdGlvbiByZWxuKQogCSAqIGRlcGVuZGluZyBvbiB0 aGUgb3JkZXIgb2YgcHJvY2Vzc2luZy4gIEl0J3Mgb2sgdG8gY2xvc2UgdGhlIG9sZAogCSAqIHJl bGNhY2hlIGVudHJ5IGVhcmx5IGluIHRoYXQgY2FzZS4pCiAJICoKLQkgKiBJZiB0aGVyZSBpc24n dCBhbiBvbGQgb3duZXIsIHRoZW4gdGhlIHJlbG4gc2hvdWxkIGJlIGluIHRoZSB1bm93bmVkCisJ ICogSWYgdGhlcmUgaXNuJ3QgYW4gb2xkIG93bmVyLCB0aGVuIHRoZSBzZmlsZSBzaG91bGQgYmUg aW4gdGhlIHVub3duZWQKIAkgKiBsaXN0LCBhbmQgd2UgbmVlZCB0byByZW1vdmUgaXQuCiAJICov Ci0JaWYgKHJlbG4tPnNtZ3Jfb3duZXIpCi0JCSoocmVsbi0+c21ncl9vd25lcikgPSBOVUxMOwor CWlmIChzZmlsZS0+c21ncl9vd25lcikKKwkJKihzZmlsZS0+c21ncl9vd25lcikgPSBOVUxMOwog CWVsc2UKLQkJZGxpc3RfZGVsZXRlKCZyZWxuLT5ub2RlKTsKKwkJZGxpc3RfZGVsZXRlKCZzZmls ZS0+bm9kZSk7CiAKIAkvKiBOb3cgZXN0YWJsaXNoIHRoZSBvd25lcnNoaXAgcmVsYXRpb25zaGlw LiAqLwotCXJlbG4tPnNtZ3Jfb3duZXIgPSBvd25lcjsKLQkqb3duZXIgPSByZWxuOworCXNmaWxl LT5zbWdyX293bmVyID0gb3duZXI7CisJKm93bmVyID0gc2ZpbGU7CiB9CiAKIC8qCi0gKiBzbWdy Y2xlYXJvd25lcigpIC0tIFJlbW92ZSBsb25nLWxpdmVkIHJlZmVyZW5jZSB0byBhbiBTTWdyUmVs YXRpb24gb2JqZWN0CisgKiBzbWdyY2xlYXJvd25lcigpIC0tIFJlbW92ZSBsb25nLWxpdmVkIHJl ZmVyZW5jZSB0byBhbiBTTWdyRmlsZUhhbmRsZSBvYmplY3QKICAqCQkJCQkgICBpZiBvbmUgZXhp c3RzCiAgKi8KIHZvaWQKLXNtZ3JjbGVhcm93bmVyKFNNZ3JSZWxhdGlvbiAqb3duZXIsIFNNZ3JS ZWxhdGlvbiByZWxuKQorc21ncmNsZWFyb3duZXIoU01nckZpbGVIYW5kbGUgKm93bmVyLCBTTWdy RmlsZUhhbmRsZSBzZmlsZSkKIHsKIAkvKiBEbyBub3RoaW5nIGlmIHRoZSBTTWdyUmVsYXRpb24g b2JqZWN0IGlzIG5vdCBvd25lZCBieSB0aGUgb3duZXIgKi8KLQlpZiAocmVsbi0+c21ncl9vd25l ciAhPSBvd25lcikKKwlpZiAoc2ZpbGUtPnNtZ3Jfb3duZXIgIT0gb3duZXIpCiAJCXJldHVybjsK IAogCS8qIHVuc2V0IHRoZSBvd25lcidzIHJlZmVyZW5jZSAqLwogCSpvd25lciA9IE5VTEw7CiAK IAkvKiB1bnNldCBvdXIgcmVmZXJlbmNlIHRvIHRoZSBvd25lciAqLwotCXJlbG4tPnNtZ3Jfb3du ZXIgPSBOVUxMOworCXNmaWxlLT5zbWdyX293bmVyID0gTlVMTDsKIAogCS8qIGFkZCB0byBsaXN0 IG9mIHVub3duZWQgcmVsYXRpb25zICovCi0JZGxpc3RfcHVzaF90YWlsKCZ1bm93bmVkX3JlbG5z LCAmcmVsbi0+bm9kZSk7CisJZGxpc3RfcHVzaF90YWlsKCZ1bm93bmVkX3NmaWxlcywgJnNmaWxl LT5ub2RlKTsKIH0KIAogLyoKLSAqCXNtZ3JleGlzdHMoKSAtLSBEb2VzIHRoZSB1bmRlcmx5aW5n IGZpbGUgZm9yIGEgZm9yayBleGlzdD8KKyAqCXNtZ3JleGlzdHMoKSAtLSBEb2VzIHRoZSB1bmRl cmx5aW5nIGZpbGUgZXhpc3Q/CiAgKi8KIGJvb2wKLXNtZ3JleGlzdHMoU01nclJlbGF0aW9uIHJl bG4sIEZvcmtOdW1iZXIgZm9ya251bSkKK3NtZ3JleGlzdHMoU01nckZpbGVIYW5kbGUgc2ZpbGUp CiB7Ci0JcmV0dXJuIHNtZ3Jzd1tyZWxuLT5zbWdyX3doaWNoXS5zbWdyX2V4aXN0cyhyZWxuLCBm b3JrbnVtKTsKKwlyZXR1cm4gc21ncnN3W3NmaWxlLT5zbWdyX3doaWNoXS5zbWdyX2V4aXN0cyhz ZmlsZSk7CiB9CiAKIC8qCi0gKglzbWdyY2xvc2UoKSAtLSBDbG9zZSBhbmQgZGVsZXRlIGFuIFNN Z3JSZWxhdGlvbiBvYmplY3QuCisgKglzbWdyY2xvc2UoKSAtLSBDbG9zZSBhbmQgZGVsZXRlIGFu IFNNZ3JGaWxlIG9iamVjdC4KICAqLwogdm9pZAotc21ncmNsb3NlKFNNZ3JSZWxhdGlvbiByZWxu KQorc21ncmNsb3NlKFNNZ3JGaWxlSGFuZGxlIHNmaWxlKQogewotCVNNZ3JSZWxhdGlvbiAqb3du ZXI7Ci0JRm9ya051bWJlcglmb3JrbnVtOworCVNNZ3JGaWxlSGFuZGxlICpvd25lcjsKIAotCWZv ciAoZm9ya251bSA9IDA7IGZvcmtudW0gPD0gTUFYX0ZPUktOVU07IGZvcmtudW0rKykKLQkJc21n cnN3W3JlbG4tPnNtZ3Jfd2hpY2hdLnNtZ3JfY2xvc2UocmVsbiwgZm9ya251bSk7CisJc21ncnN3 W3NmaWxlLT5zbWdyX3doaWNoXS5zbWdyX2Nsb3NlKHNmaWxlKTsKIAotCW93bmVyID0gcmVsbi0+ c21ncl9vd25lcjsKKwlvd25lciA9IHNmaWxlLT5zbWdyX293bmVyOwogCiAJaWYgKCFvd25lcikK LQkJZGxpc3RfZGVsZXRlKCZyZWxuLT5ub2RlKTsKKwkJZGxpc3RfZGVsZXRlKCZzZmlsZS0+bm9k ZSk7CiAKLQlpZiAoaGFzaF9zZWFyY2goU01nclJlbGF0aW9uSGFzaCwKLQkJCQkJKHZvaWQgKikg JihyZWxuLT5zbWdyX3Jsb2NhdG9yKSwKKwlpZiAoaGFzaF9zZWFyY2goU01nckZpbGVIYXNoLAor CQkJCQkodm9pZCAqKSAmKHNmaWxlLT5zbWdyX2xvY2F0b3IpLAogCQkJCQlIQVNIX1JFTU9WRSwg TlVMTCkgPT0gTlVMTCkKIAkJZWxvZyhFUlJPUiwgIlNNZ3JSZWxhdGlvbiBoYXNodGFibGUgY29y cnVwdGVkIik7CiAKQEAgLTI4NCwxNCArMjc5LDExIEBAIHNtZ3JjbG9zZShTTWdyUmVsYXRpb24g cmVsbikKICAqCiAgKglUaGUgb2JqZWN0IHJlbWFpbnMgdmFsaWQuCiAgKi8KLXZvaWQKLXNtZ3Jy ZWxlYXNlKFNNZ3JSZWxhdGlvbiByZWxuKQorc3RhdGljIHZvaWQKK3NtZ3JyZWxlYXNlKFNNZ3JG aWxlSGFuZGxlIHNmaWxlKQogewotCWZvciAoRm9ya051bWJlciBmb3JrbnVtID0gMDsgZm9ya251 bSA8PSBNQVhfRk9SS05VTTsgZm9ya251bSsrKQotCXsKLQkJc21ncnN3W3JlbG4tPnNtZ3Jfd2hp Y2hdLnNtZ3JfY2xvc2UocmVsbiwgZm9ya251bSk7Ci0JCXJlbG4tPnNtZ3JfY2FjaGVkX25ibG9j a3NbZm9ya251bV0gPSBJbnZhbGlkQmxvY2tOdW1iZXI7Ci0JfQorCXNtZ3Jzd1tzZmlsZS0+c21n cl93aGljaF0uc21ncl9jbG9zZShzZmlsZSk7CisJc2ZpbGUtPnNtZ3JfY2FjaGVkX25ibG9ja3Mg PSBJbnZhbGlkQmxvY2tOdW1iZXI7CiB9CiAKIC8qCkBAIC0zMDMsMTYgKzI5NSwxNiBAQCB2b2lk CiBzbWdycmVsZWFzZWFsbCh2b2lkKQogewogCUhBU0hfU0VRX1NUQVRVUyBzdGF0dXM7Ci0JU01n clJlbGF0aW9uIHJlbG47CisJU01nckZpbGVIYW5kbGUgc2ZpbGU7CiAKIAkvKiBOb3RoaW5nIHRv IGRvIGlmIGhhc2h0YWJsZSBub3Qgc2V0IHVwICovCi0JaWYgKFNNZ3JSZWxhdGlvbkhhc2ggPT0g TlVMTCkKKwlpZiAoU01nckZpbGVIYXNoID09IE5VTEwpCiAJCXJldHVybjsKIAotCWhhc2hfc2Vx X2luaXQoJnN0YXR1cywgU01nclJlbGF0aW9uSGFzaCk7CisJaGFzaF9zZXFfaW5pdCgmc3RhdHVz LCBTTWdyRmlsZUhhc2gpOwogCi0Jd2hpbGUgKChyZWxuID0gKFNNZ3JSZWxhdGlvbikgaGFzaF9z ZXFfc2VhcmNoKCZzdGF0dXMpKSAhPSBOVUxMKQotCQlzbWdycmVsZWFzZShyZWxuKTsKKwl3aGls ZSAoKHNmaWxlID0gKFNNZ3JGaWxlSGFuZGxlKSBoYXNoX3NlcV9zZWFyY2goJnN0YXR1cykpICE9 IE5VTEwpCisJCXNtZ3JyZWxlYXNlKHNmaWxlKTsKIH0KIAogLyoKQEAgLTMyMiwxNiArMzE0LDE2 IEBAIHZvaWQKIHNtZ3JjbG9zZWFsbCh2b2lkKQogewogCUhBU0hfU0VRX1NUQVRVUyBzdGF0dXM7 Ci0JU01nclJlbGF0aW9uIHJlbG47CisJU01nckZpbGVIYW5kbGUgc2ZpbGU7CiAKIAkvKiBOb3Ro aW5nIHRvIGRvIGlmIGhhc2h0YWJsZSBub3Qgc2V0IHVwICovCi0JaWYgKFNNZ3JSZWxhdGlvbkhh c2ggPT0gTlVMTCkKKwlpZiAoU01nckZpbGVIYXNoID09IE5VTEwpCiAJCXJldHVybjsKIAotCWhh c2hfc2VxX2luaXQoJnN0YXR1cywgU01nclJlbGF0aW9uSGFzaCk7CisJaGFzaF9zZXFfaW5pdCgm c3RhdHVzLCBTTWdyRmlsZUhhc2gpOwogCi0Jd2hpbGUgKChyZWxuID0gKFNNZ3JSZWxhdGlvbikg aGFzaF9zZXFfc2VhcmNoKCZzdGF0dXMpKSAhPSBOVUxMKQotCQlzbWdyY2xvc2UocmVsbik7CisJ d2hpbGUgKChzZmlsZSA9IChTTWdyRmlsZUhhbmRsZSkgaGFzaF9zZXFfc2VhcmNoKCZzdGF0dXMp KSAhPSBOVUxMKQorCQlzbWdyY2xvc2Uoc2ZpbGUpOwogfQogCiAvKgpAQCAtMzQzLDExMSArMzM1 LDExMiBAQCBzbWdyY2xvc2VhbGwodm9pZCkKICAqIHN1Y2ggZW50cnkgZXhpc3RzIGFscmVhZHku CiAgKi8KIHZvaWQKLXNtZ3JjbG9zZXJlbGxvY2F0b3IoUmVsRmlsZUxvY2F0b3JCYWNrZW5kIHJs b2NhdG9yKQorc21ncmNsb3NlcmVsbG9jYXRvcihSZWxGaWxlTG9jYXRvciBybG9jYXRvciwgQmFj a2VuZElkIGJhY2tlbmQpCiB7Ci0JU01nclJlbGF0aW9uIHJlbG47CisJU01nckZpbGVIYW5kbGUg c2ZpbGU7CiAKIAkvKiBOb3RoaW5nIHRvIGRvIGlmIGhhc2h0YWJsZSBub3Qgc2V0IHVwICovCi0J aWYgKFNNZ3JSZWxhdGlvbkhhc2ggPT0gTlVMTCkKKwlpZiAoU01nckZpbGVIYXNoID09IE5VTEwp CiAJCXJldHVybjsKIAotCXJlbG4gPSAoU01nclJlbGF0aW9uKSBoYXNoX3NlYXJjaChTTWdyUmVs YXRpb25IYXNoLAotCQkJCQkJCQkJICAodm9pZCAqKSAmcmxvY2F0b3IsCi0JCQkJCQkJCQkgIEhB U0hfRklORCwgTlVMTCk7Ci0JaWYgKHJlbG4gIT0gTlVMTCkKLQkJc21ncmNsb3NlKHJlbG4pOwor CWZvciAoaW50IGkgPSAwOyBpIDw9IE1BWF9GT1JLTlVNOyBpKyspCisJeworCQlTTWdyRmlsZUxv Y2F0b3Igc2xvY2F0b3IgPSB7IHJsb2NhdG9yLCBiYWNrZW5kLCBpIH07CisKKwkJc2ZpbGUgPSAo U01nckZpbGVIYW5kbGUpIGhhc2hfc2VhcmNoKFNNZ3JGaWxlSGFzaCwKKwkJCQkJCQkJCQkJICh2 b2lkICopICZzbG9jYXRvciwKKwkJCQkJCQkJCQkJIEhBU0hfRklORCwgTlVMTCk7CisJCWlmIChz ZmlsZSAhPSBOVUxMKQorCQkJc21ncmNsb3NlKHNmaWxlKTsKKwl9CiB9CiAKIC8qCi0gKglzbWdy Y3JlYXRlKCkgLS0gQ3JlYXRlIGEgbmV3IHJlbGF0aW9uLgorICoJc21ncmNyZWF0ZSgpIC0tIENy ZWF0ZSBhIG5ldyBmaWxlLgogICoKLSAqCQlHaXZlbiBhbiBhbHJlYWR5LWNyZWF0ZWQgKGJ1dCBw cmVzdW1hYmx5IHVudXNlZCkgU01nclJlbGF0aW9uLAorICoJCUdpdmVuIGFuIGFscmVhZHktY3Jl YXRlZCAoYnV0IHByZXN1bWFibHkgdW51c2VkKSBTTWdyRmlsZUhhbmRsZSwKICAqCQljYXVzZSB0 aGUgdW5kZXJseWluZyBkaXNrIGZpbGUgb3Igb3RoZXIgc3RvcmFnZSBmb3IgdGhlIGZvcmsKICAq CQl0byBiZSBjcmVhdGVkLgogICovCiB2b2lkCi1zbWdyY3JlYXRlKFNNZ3JSZWxhdGlvbiByZWxu LCBGb3JrTnVtYmVyIGZvcmtudW0sIGJvb2wgaXNSZWRvKQorc21ncmNyZWF0ZShTTWdyRmlsZUhh bmRsZSBzZmlsZSwgYm9vbCBpc1JlZG8pCiB7Ci0Jc21ncnN3W3JlbG4tPnNtZ3Jfd2hpY2hdLnNt Z3JfY3JlYXRlKHJlbG4sIGZvcmtudW0sIGlzUmVkbyk7CisJc21ncnN3W3NmaWxlLT5zbWdyX3do aWNoXS5zbWdyX2NyZWF0ZShzZmlsZSwgaXNSZWRvKTsKIH0KIAogLyoKLSAqCXNtZ3Jkb3N5bmNh bGwoKSAtLSBJbW1lZGlhdGVseSBzeW5jIGFsbCBmb3JrcyBvZiBhbGwgZ2l2ZW4gcmVsYXRpb25z CisgKglzbWdydW5saW5rX211bHRpKCkgLS0gSW1tZWRpYXRlbHkgdW5saW5rIGdpdmVuIGZvcmtz IG9mIGdpdmVuIHJlbGF0aW9uCiAgKgotICoJCUFsbCBmb3JrcyBvZiBhbGwgZ2l2ZW4gcmVsYXRp b25zIGFyZSBzeW5jZWQgb3V0IHRvIHRoZSBzdG9yZS4KKyAqCQlUaGUgZ2l2ZW4gZm9ya3Mgb2Yg dGhlIHJlbGF0aW9uIGFyZSByZW1vdmVkIGZyb20gdGhlIHN0b3JlLiAgVGhpcworICoJCXNob3Vs ZCBub3QgYmUgdXNlZCBkdXJpbmcgdHJhbnNhY3Rpb25hbCBvcGVyYXRpb25zLCBzaW5jZSBpdCBj YW4ndCBiZQorICoJCXVuZG9uZS4KKyAqCisgKgkJVGhpcyBoYW5kbGVzIG11bHRpcGxlIGZvcmtz IGluIG9uZSBjYWxsLCBiZWNhdXNlIHRoZSBjYWNoZSBpbnZhbGlkYXRpb24KKyAqCQloYXBwZW5z IGF0IHJlbGF0aW9uIGdyYW51bGFyaXR5LiBJZiB3ZSBoYWQgYW4gc21ncnVubGluaygpIGZ1bmN0 aW9uCisgKgkJdG8gdW5saW5rIGp1c3QgYSBzaW5nbGUgc21nciBmaWxlLCBhbmQgdGhlIGNhbGxl ciB3YW50ZWQgdG8gZGVsZXRlCisgKgkJbXVsdGlwbGUgZm9ya3Mgb2YgYSBzaW5nbGUgcmVsYXRp b24sIGVhY2ggY2FsbCB3b3VsZCBzZW5kIGEgbmV3CisgKgkJY2FjaGUgaW52YWxpZGF0aW9uIGV2 ZW50LCB3aGljaCB3b3VsZCBiZSB3YXN0ZWZ1bC4KICAqCi0gKgkJVGhpcyBpcyBlcXVpdmFsZW50 IHRvIEZsdXNoUmVsYXRpb25CdWZmZXJzKCkgZm9yIGVhY2ggc21nciByZWxhdGlvbiwKLSAqCQl0 aGVuIGNhbGxpbmcgc21ncmltbWVkc3luYygpIGZvciBhbGwgZm9ya3Mgb2YgZWFjaCByZWxhdGlv biwgYnV0IGl0J3MKLSAqCQlzaWduaWZpY2FudGx5IHF1aWNrZXIgc28gc2hvdWxkIGJlIHByZWZl cnJlZCB3aGVuIHBvc3NpYmxlLgorICoJCUlmIGlzUmVkbyBpcyB0cnVlLCBpdCBpcyBva2F5IGZv ciB0aGUgdW5kZXJseWluZyBmaWxlKHMpIHRvIGJlIGdvbmUKKyAqCQlhbHJlYWR5LgogICovCiB2 b2lkCi1zbWdyZG9zeW5jYWxsKFNNZ3JSZWxhdGlvbiAqcmVscywgaW50IG5yZWxzKQorc21ncnVu bGlua19tdWx0aShSZWxGaWxlTG9jYXRvciBybG9jYXRvciwgQmFja2VuZElkIGJhY2tlbmQsIEZv cmtOdW1iZXIgKmZvcmtzLCBpbnQgbmZvcmtzLCBib29sIGlzUmVkbykKIHsKKwlpbnQJCQl3aGlj aDsKIAlpbnQJCQlpID0gMDsKLQlGb3JrTnVtYmVyCWZvcmtudW07CiAKLQlpZiAobnJlbHMgPT0g MCkKLQkJcmV0dXJuOworCXdoaWNoID0gMDsJLyogd2Ugb25seSBoYXZlIG1kLmMgYXQgcHJlc2Vu dCAqLwogCi0JRmx1c2hSZWxhdGlvbnNBbGxCdWZmZXJzKHJlbHMsIG5yZWxzKTsKKwkvKiBDbG9z ZSB0aGUgZm9ya3MgYXQgc21nciBsZXZlbCAqLworCXNtZ3JjbG9zZXJlbGxvY2F0b3IocmxvY2F0 b3IsIGJhY2tlbmQpOwogCiAJLyoKLQkgKiBTeW5jIHRoZSBwaHlzaWNhbCBmaWxlKHMpLgorCSAq IFNlbmQgYSBzaGFyZWQtaW52YWwgbWVzc2FnZSB0byBmb3JjZSBvdGhlciBiYWNrZW5kcyB0byBj bG9zZSBhbnkKKwkgKiBkYW5nbGluZyBzbWdyIHJlZmVyZW5jZXMgdGhleSBtYXkgaGF2ZSBmb3Ig dGhlc2UgcmVscy4gIFdlIHNob3VsZCBkbworCSAqIHRoaXMgYmVmb3JlIHN0YXJ0aW5nIHRoZSBh Y3R1YWwgdW5saW5raW5nLCBpbiBjYXNlIHdlIGZhaWwgcGFydHdheQorCSAqIHRocm91Z2ggdGhh dCBzdGVwLiAgTm90ZSB0aGF0IHRoZSBzaW52YWwgbWVzc2FnZXMgd2lsbCBldmVudHVhbGx5IGNv bWUKKwkgKiBiYWNrIHRvIHRoaXMgYmFja2VuZCwgdG9vLCBhbmQgdGhlcmVieSBwcm92aWRlIGEg YmFja3N0b3AgdGhhdCB3ZQorCSAqIGNsb3NlZCBvdXIgb3duIHNtZ3IgcmVsLgogCSAqLwotCWZv ciAoaSA9IDA7IGkgPCBucmVsczsgaSsrKQotCXsKLQkJaW50CQkJd2hpY2ggPSByZWxzW2ldLT5z bWdyX3doaWNoOworCUNhY2hlSW52YWxpZGF0ZVNtZ3IocmxvY2F0b3IsIGJhY2tlbmQpOwogCi0J CWZvciAoZm9ya251bSA9IDA7IGZvcmtudW0gPD0gTUFYX0ZPUktOVU07IGZvcmtudW0rKykKLQkJ ewotCQkJaWYgKHNtZ3Jzd1t3aGljaF0uc21ncl9leGlzdHMocmVsc1tpXSwgZm9ya251bSkpCi0J CQkJc21ncnN3W3doaWNoXS5zbWdyX2ltbWVkc3luYyhyZWxzW2ldLCBmb3JrbnVtKTsKLQkJfQor CS8qCisJICogRGVsZXRlIHRoZSBwaHlzaWNhbCBmaWxlKHMpLgorCSAqCisJICogTm90ZTogc21n cl91bmxpbmsgbXVzdCB0cmVhdCBkZWxldGlvbiBmYWlsdXJlIGFzIGEgV0FSTklORywgbm90IGFu CisJICogRVJST1IsIGJlY2F1c2Ugd2UndmUgYWxyZWFkeSBkZWNpZGVkIHRvIGNvbW1pdCBvciBh Ym9ydCB0aGUgY3VycmVudAorCSAqIHhhY3QuCisJICovCisJZm9yIChpID0gMDsgaSA8IG5mb3Jr czsgaSsrKQorCXsKKwkJU01nckZpbGVMb2NhdG9yIHNsb2NhdG9yID0geyBybG9jYXRvciwgYmFj a2VuZCwgZm9ya3NbaV0gfTsKKwkJc21ncnN3W3doaWNoXS5zbWdyX3VubGluayhzbG9jYXRvciwg aXNSZWRvKTsKIAl9CiB9CiAKIC8qCi0gKglzbWdyZG91bmxpbmthbGwoKSAtLSBJbW1lZGlhdGVs eSB1bmxpbmsgYWxsIGZvcmtzIG9mIGFsbCBnaXZlbiByZWxhdGlvbnMKLSAqCi0gKgkJQWxsIGZv cmtzIG9mIGFsbCBnaXZlbiByZWxhdGlvbnMgYXJlIHJlbW92ZWQgZnJvbSB0aGUgc3RvcmUuICBU aGlzCi0gKgkJc2hvdWxkIG5vdCBiZSB1c2VkIGR1cmluZyB0cmFuc2FjdGlvbmFsIG9wZXJhdGlv bnMsIHNpbmNlIGl0IGNhbid0IGJlCi0gKgkJdW5kb25lLgorICoJc21ncmRvdW5saW5rKCkgLS0g SW1tZWRpYXRlbHkgdW5saW5rIGEgZmlsZQogICoKICAqCQlJZiBpc1JlZG8gaXMgdHJ1ZSwgaXQg aXMgb2theSBmb3IgdGhlIHVuZGVybHlpbmcgZmlsZShzKSB0byBiZSBnb25lCiAgKgkJYWxyZWFk eS4KKyAqCisgKiBUbyByZW1vdmUgYSByZWxhdGlvbiB0cmFuc2FjdGlvbmFsbHksIHNlZSBSZWxh dGlvbkRyb3BTdG9yYWdlKCkgaW5zdGVhZC4KKyAqIFRoaXMgd2lsbCBjYXVzZSBjYWNoZSBpbnZh bGlkYXRpb24gb2YgYWxsIGZvcmtzIG9mIHRoZSByZWxhdGlvbiwgbm90IGp1c3QKKyAqIHRoaXMg b25lLgogICovCiB2b2lkCi1zbWdyZG91bmxpbmthbGwoU01nclJlbGF0aW9uICpyZWxzLCBpbnQg bnJlbHMsIGJvb2wgaXNSZWRvKQorc21ncnVubGluayhTTWdyRmlsZUhhbmRsZSBzZmlsZSwgYm9v bCBpc1JlZG8pCiB7Ci0JaW50CQkJaSA9IDA7Ci0JUmVsRmlsZUxvY2F0b3JCYWNrZW5kICpybG9j YXRvcnM7Ci0JRm9ya051bWJlcglmb3JrbnVtOwotCi0JaWYgKG5yZWxzID09IDApCi0JCXJldHVy bjsKLQotCS8qCi0JICogR2V0IHJpZCBvZiBhbnkgcmVtYWluaW5nIGJ1ZmZlcnMgZm9yIHRoZSBy ZWxhdGlvbnMuICBidWZtZ3Igd2lsbCBqdXN0Ci0JICogZHJvcCB0aGVtIHdpdGhvdXQgYm90aGVy aW5nIHRvIHdyaXRlIHRoZSBjb250ZW50cy4KLQkgKi8KLQlEcm9wUmVsYXRpb25zQWxsQnVmZmVy cyhyZWxzLCBucmVscyk7Ci0KLQkvKgotCSAqIGNyZWF0ZSBhbiBhcnJheSB3aGljaCBjb250YWlu cyBhbGwgcmVsYXRpb25zIHRvIGJlIGRyb3BwZWQsIGFuZCBjbG9zZQotCSAqIGVhY2ggcmVsYXRp b24ncyBmb3JrcyBhdCB0aGUgc21nciBsZXZlbCB3aGlsZSBhdCBpdAotCSAqLwotCXJsb2NhdG9y cyA9IHBhbGxvYyhzaXplb2YoUmVsRmlsZUxvY2F0b3JCYWNrZW5kKSAqIG5yZWxzKTsKLQlmb3Ig KGkgPSAwOyBpIDwgbnJlbHM7IGkrKykKLQl7Ci0JCVJlbEZpbGVMb2NhdG9yQmFja2VuZCBybG9j YXRvciA9IHJlbHNbaV0tPnNtZ3JfcmxvY2F0b3I7Ci0JCWludAkJCXdoaWNoID0gcmVsc1tpXS0+ c21ncl93aGljaDsKKwlTTWdyRmlsZUxvY2F0b3IgbG9jYXRvcjsKKwlpbnQJCQl3aGljaDsKIAot CQlybG9jYXRvcnNbaV0gPSBybG9jYXRvcjsKKwkvKiByZW1lbWJlciBiZWZvcmUgY2xvc2luZyAq LworCXdoaWNoID0gc2ZpbGUtPnNtZ3Jfd2hpY2g7CisJbG9jYXRvciA9IHNmaWxlLT5zbWdyX2xv Y2F0b3I7CiAKLQkJLyogQ2xvc2UgdGhlIGZvcmtzIGF0IHNtZ3IgbGV2ZWwgKi8KLQkJZm9yIChm b3JrbnVtID0gMDsgZm9ya251bSA8PSBNQVhfRk9SS05VTTsgZm9ya251bSsrKQotCQkJc21ncnN3 W3doaWNoXS5zbWdyX2Nsb3NlKHJlbHNbaV0sIGZvcmtudW0pOwotCX0KKwkvKiBDbG9zZSB0aGUg ZmlsZSBhdCBzbWdyIGxldmVsICovCisJc21ncmNsb3NlKHNmaWxlKTsKIAogCS8qCiAJICogU2Vu ZCBhIHNoYXJlZC1pbnZhbCBtZXNzYWdlIHRvIGZvcmNlIG90aGVyIGJhY2tlbmRzIHRvIGNsb3Nl IGFueQpAQCAtNDU3LDggKzQ1MCw3IEBAIHNtZ3Jkb3VubGlua2FsbChTTWdyUmVsYXRpb24gKnJl bHMsIGludCBucmVscywgYm9vbCBpc1JlZG8pCiAJICogYmFjayB0byB0aGlzIGJhY2tlbmQsIHRv bywgYW5kIHRoZXJlYnkgcHJvdmlkZSBhIGJhY2tzdG9wIHRoYXQgd2UKIAkgKiBjbG9zZWQgb3Vy IG93biBzbWdyIHJlbC4KIAkgKi8KLQlmb3IgKGkgPSAwOyBpIDwgbnJlbHM7IGkrKykKLQkJQ2Fj aGVJbnZhbGlkYXRlU21ncihybG9jYXRvcnNbaV0pOworCUNhY2hlSW52YWxpZGF0ZVNtZ3IobG9j YXRvci5sb2NhdG9yLCBsb2NhdG9yLmJhY2tlbmQpOwogCiAJLyoKIAkgKiBEZWxldGUgdGhlIHBo eXNpY2FsIGZpbGUocykuCkBAIC00NjcsMTYgKzQ1OSw3IEBAIHNtZ3Jkb3VubGlua2FsbChTTWdy UmVsYXRpb24gKnJlbHMsIGludCBucmVscywgYm9vbCBpc1JlZG8pCiAJICogRVJST1IsIGJlY2F1 c2Ugd2UndmUgYWxyZWFkeSBkZWNpZGVkIHRvIGNvbW1pdCBvciBhYm9ydCB0aGUgY3VycmVudAog CSAqIHhhY3QuCiAJICovCi0KLQlmb3IgKGkgPSAwOyBpIDwgbnJlbHM7IGkrKykKLQl7Ci0JCWlu dAkJCXdoaWNoID0gcmVsc1tpXS0+c21ncl93aGljaDsKLQotCQlmb3IgKGZvcmtudW0gPSAwOyBm b3JrbnVtIDw9IE1BWF9GT1JLTlVNOyBmb3JrbnVtKyspCi0JCQlzbWdyc3dbd2hpY2hdLnNtZ3Jf dW5saW5rKHJsb2NhdG9yc1tpXSwgZm9ya251bSwgaXNSZWRvKTsKLQl9Ci0KLQlwZnJlZShybG9j YXRvcnMpOworCXNtZ3Jzd1t3aGljaF0uc21ncl91bmxpbmsobG9jYXRvciwgaXNSZWRvKTsKIH0K IAogCkBAIC00OTAsMjEgKzQ3MywyMSBAQCBzbWdyZG91bmxpbmthbGwoU01nclJlbGF0aW9uICpy ZWxzLCBpbnQgbnJlbHMsIGJvb2wgaXNSZWRvKQogICoJCWNhdXNlcyBpbnRlcnZlbmluZyBmaWxl IHNwYWNlIHRvIGJlY29tZSBmaWxsZWQgd2l0aCB6ZXJvZXMuCiAgKi8KIHZvaWQKLXNtZ3JleHRl bmQoU01nclJlbGF0aW9uIHJlbG4sIEZvcmtOdW1iZXIgZm9ya251bSwgQmxvY2tOdW1iZXIgYmxv Y2tudW0sCitzbWdyZXh0ZW5kKFNNZ3JGaWxlSGFuZGxlIHNmaWxlLCBCbG9ja051bWJlciBibG9j a251bSwKIAkJICAgY2hhciAqYnVmZmVyLCBib29sIHNraXBGc3luYykKIHsKLQlzbWdyc3dbcmVs bi0+c21ncl93aGljaF0uc21ncl9leHRlbmQocmVsbiwgZm9ya251bSwgYmxvY2tudW0sCi0JCQkJ CQkJCQkJIGJ1ZmZlciwgc2tpcEZzeW5jKTsKKwlzbWdyc3dbc2ZpbGUtPnNtZ3Jfd2hpY2hdLnNt Z3JfZXh0ZW5kKHNmaWxlLCBibG9ja251bSwKKwkJCQkJCQkJCQkgIGJ1ZmZlciwgc2tpcEZzeW5j KTsKIAogCS8qCiAJICogTm9ybWFsbHkgd2UgZXhwZWN0IHRoaXMgdG8gaW5jcmVhc2UgbmJsb2Nr cyBieSBvbmUsIGJ1dCBpZiB0aGUgY2FjaGVkCiAJICogdmFsdWUgaXNuJ3QgYXMgZXhwZWN0ZWQs IGp1c3QgaW52YWxpZGF0ZSBpdCBzbyB0aGUgbmV4dCBjYWxsIGFza3MgdGhlCiAJICoga2VybmVs LgogCSAqLwotCWlmIChyZWxuLT5zbWdyX2NhY2hlZF9uYmxvY2tzW2ZvcmtudW1dID09IGJsb2Nr bnVtKQotCQlyZWxuLT5zbWdyX2NhY2hlZF9uYmxvY2tzW2ZvcmtudW1dID0gYmxvY2tudW0gKyAx OworCWlmIChzZmlsZS0+c21ncl9jYWNoZWRfbmJsb2NrcyA9PSBibG9ja251bSkKKwkJc2ZpbGUt PnNtZ3JfY2FjaGVkX25ibG9ja3MgPSBibG9ja251bSArIDE7CiAJZWxzZQotCQlyZWxuLT5zbWdy X2NhY2hlZF9uYmxvY2tzW2ZvcmtudW1dID0gSW52YWxpZEJsb2NrTnVtYmVyOworCQlzZmlsZS0+ c21ncl9jYWNoZWRfbmJsb2NrcyA9IEludmFsaWRCbG9ja051bWJlcjsKIH0KIAogLyoKQEAgLTUx NSwxMyArNDk4LDEzIEBAIHNtZ3JleHRlbmQoU01nclJlbGF0aW9uIHJlbG4sIEZvcmtOdW1iZXIg Zm9ya251bSwgQmxvY2tOdW1iZXIgYmxvY2tudW0sCiAgKgkJcmVjb3JkKS4KICAqLwogYm9vbAot c21ncnByZWZldGNoKFNNZ3JSZWxhdGlvbiByZWxuLCBGb3JrTnVtYmVyIGZvcmtudW0sIEJsb2Nr TnVtYmVyIGJsb2NrbnVtKQorc21ncnByZWZldGNoKFNNZ3JGaWxlSGFuZGxlIHNmaWxlLCBCbG9j a051bWJlciBibG9ja251bSkKIHsKLQlyZXR1cm4gc21ncnN3W3JlbG4tPnNtZ3Jfd2hpY2hdLnNt Z3JfcHJlZmV0Y2gocmVsbiwgZm9ya251bSwgYmxvY2tudW0pOworCXJldHVybiBzbWdyc3dbc2Zp bGUtPnNtZ3Jfd2hpY2hdLnNtZ3JfcHJlZmV0Y2goc2ZpbGUsIGJsb2NrbnVtKTsKIH0KIAogLyoK LSAqCXNtZ3JyZWFkKCkgLS0gcmVhZCBhIHBhcnRpY3VsYXIgYmxvY2sgZnJvbSBhIHJlbGF0aW9u IGludG8gdGhlIHN1cHBsaWVkCisgKglzbWdycmVhZCgpIC0tIHJlYWQgYSBwYXJ0aWN1bGFyIGJs b2NrIGZyb20gYSBmaWxlIGludG8gdGhlIHN1cHBsaWVkCiAgKgkJCQkgIGJ1ZmZlci4KICAqCiAg KgkJVGhpcyByb3V0aW5lIGlzIGNhbGxlZCBmcm9tIHRoZSBidWZmZXIgbWFuYWdlciBpbiBvcmRl ciB0bwpAQCAtNTI5LDEwICs1MTIsOSBAQCBzbWdycHJlZmV0Y2goU01nclJlbGF0aW9uIHJlbG4s IEZvcmtOdW1iZXIgZm9ya251bSwgQmxvY2tOdW1iZXIgYmxvY2tudW0pCiAgKgkJcmV0dXJuIHBh Z2VzIGluIHRoZSBmb3JtYXQgdGhhdCBQT1NUR1JFUyBleHBlY3RzLgogICovCiB2b2lkCi1zbWdy cmVhZChTTWdyUmVsYXRpb24gcmVsbiwgRm9ya051bWJlciBmb3JrbnVtLCBCbG9ja051bWJlciBi bG9ja251bSwKLQkJIGNoYXIgKmJ1ZmZlcikKK3NtZ3JyZWFkKFNNZ3JGaWxlSGFuZGxlIHNmaWxl LCBCbG9ja051bWJlciBibG9ja251bSwgY2hhciAqYnVmZmVyKQogewotCXNtZ3Jzd1tyZWxuLT5z bWdyX3doaWNoXS5zbWdyX3JlYWQocmVsbiwgZm9ya251bSwgYmxvY2tudW0sIGJ1ZmZlcik7CisJ c21ncnN3W3NmaWxlLT5zbWdyX3doaWNoXS5zbWdyX3JlYWQoc2ZpbGUsIGJsb2NrbnVtLCBidWZm ZXIpOwogfQogCiAvKgpAQCAtNTUxLDExICs1MzMsMTEgQEAgc21ncnJlYWQoU01nclJlbGF0aW9u IHJlbG4sIEZvcmtOdW1iZXIgZm9ya251bSwgQmxvY2tOdW1iZXIgYmxvY2tudW0sCiAgKgkJZG8g bm90IHJlcXVpcmUgZnN5bmMuCiAgKi8KIHZvaWQKLXNtZ3J3cml0ZShTTWdyUmVsYXRpb24gcmVs biwgRm9ya051bWJlciBmb3JrbnVtLCBCbG9ja051bWJlciBibG9ja251bSwKK3NtZ3J3cml0ZShT TWdyRmlsZUhhbmRsZSBzZmlsZSwgQmxvY2tOdW1iZXIgYmxvY2tudW0sCiAJCSAgY2hhciAqYnVm ZmVyLCBib29sIHNraXBGc3luYykKIHsKLQlzbWdyc3dbcmVsbi0+c21ncl93aGljaF0uc21ncl93 cml0ZShyZWxuLCBmb3JrbnVtLCBibG9ja251bSwKLQkJCQkJCQkJCQlidWZmZXIsIHNraXBGc3lu Yyk7CisJc21ncnN3W3NmaWxlLT5zbWdyX3doaWNoXS5zbWdyX3dyaXRlKHNmaWxlLCBibG9ja251 bSwKKwkJCQkJCQkJCQkgYnVmZmVyLCBza2lwRnN5bmMpOwogfQogCiAKQEAgLTU2NCwxMSArNTQ2 LDExIEBAIHNtZ3J3cml0ZShTTWdyUmVsYXRpb24gcmVsbiwgRm9ya051bWJlciBmb3JrbnVtLCBC bG9ja051bWJlciBibG9ja251bSwKICAqCQkJCQkgICBibG9ja3MuCiAgKi8KIHZvaWQKLXNtZ3J3 cml0ZWJhY2soU01nclJlbGF0aW9uIHJlbG4sIEZvcmtOdW1iZXIgZm9ya251bSwgQmxvY2tOdW1i ZXIgYmxvY2tudW0sCitzbWdyd3JpdGViYWNrKFNNZ3JGaWxlSGFuZGxlIHNmaWxlLCBCbG9ja051 bWJlciBibG9ja251bSwKIAkJCSAgQmxvY2tOdW1iZXIgbmJsb2NrcykKIHsKLQlzbWdyc3dbcmVs bi0+c21ncl93aGljaF0uc21ncl93cml0ZWJhY2socmVsbiwgZm9ya251bSwgYmxvY2tudW0sCi0J CQkJCQkJCQkJCW5ibG9ja3MpOworCXNtZ3Jzd1tzZmlsZS0+c21ncl93aGljaF0uc21ncl93cml0 ZWJhY2soc2ZpbGUsIGJsb2NrbnVtLAorCQkJCQkJCQkJCQkgbmJsb2Nrcyk7CiB9CiAKIC8qCkBA IC01NzYsMTggKzU1OCwxOCBAQCBzbWdyd3JpdGViYWNrKFNNZ3JSZWxhdGlvbiByZWxuLCBGb3Jr TnVtYmVyIGZvcmtudW0sIEJsb2NrTnVtYmVyIGJsb2NrbnVtLAogICoJCQkJCSBzdXBwbGllZCBy ZWxhdGlvbi4KICAqLwogQmxvY2tOdW1iZXIKLXNtZ3JuYmxvY2tzKFNNZ3JSZWxhdGlvbiByZWxu LCBGb3JrTnVtYmVyIGZvcmtudW0pCitzbWdybmJsb2NrcyhTTWdyRmlsZUhhbmRsZSBzZmlsZSkK IHsKIAlCbG9ja051bWJlciByZXN1bHQ7CiAKIAkvKiBDaGVjayBhbmQgcmV0dXJuIGlmIHdlIGdl dCB0aGUgY2FjaGVkIHZhbHVlIGZvciB0aGUgbnVtYmVyIG9mIGJsb2Nrcy4gKi8KLQlyZXN1bHQg PSBzbWdybmJsb2Nrc19jYWNoZWQocmVsbiwgZm9ya251bSk7CisJcmVzdWx0ID0gc21ncm5ibG9j a3NfY2FjaGVkKHNmaWxlKTsKIAlpZiAocmVzdWx0ICE9IEludmFsaWRCbG9ja051bWJlcikKIAkJ cmV0dXJuIHJlc3VsdDsKIAotCXJlc3VsdCA9IHNtZ3Jzd1tyZWxuLT5zbWdyX3doaWNoXS5zbWdy X25ibG9ja3MocmVsbiwgZm9ya251bSk7CisJcmVzdWx0ID0gc21ncnN3W3NmaWxlLT5zbWdyX3do aWNoXS5zbWdyX25ibG9ja3Moc2ZpbGUpOwogCi0JcmVsbi0+c21ncl9jYWNoZWRfbmJsb2Nrc1tm b3JrbnVtXSA9IHJlc3VsdDsKKwlzZmlsZS0+c21ncl9jYWNoZWRfbmJsb2NrcyA9IHJlc3VsdDsK IAogCXJldHVybiByZXN1bHQ7CiB9CkBAIC02MDAsMzggKzU4Miw0MSBAQCBzbWdybmJsb2NrcyhT TWdyUmVsYXRpb24gcmVsbiwgRm9ya051bWJlciBmb3JrbnVtKQogICogZm9yayBzaXplIGlzIG5v dCBjYWNoZWQuCiAgKi8KIEJsb2NrTnVtYmVyCi1zbWdybmJsb2Nrc19jYWNoZWQoU01nclJlbGF0 aW9uIHJlbG4sIEZvcmtOdW1iZXIgZm9ya251bSkKK3NtZ3JuYmxvY2tzX2NhY2hlZChTTWdyRmls ZUhhbmRsZSBzZmlsZSkKIHsKIAkvKgogCSAqIEZvciBub3csIHdlIG9ubHkgdXNlIGNhY2hlZCB2 YWx1ZXMgaW4gcmVjb3ZlcnkgZHVlIHRvIGxhY2sgb2YgYSBzaGFyZWQKIAkgKiBpbnZhbGlkYXRp b24gbWVjaGFuaXNtIGZvciBjaGFuZ2VzIGluIGZpbGUgc2l6ZS4KIAkgKi8KLQlpZiAoSW5SZWNv dmVyeSAmJiByZWxuLT5zbWdyX2NhY2hlZF9uYmxvY2tzW2ZvcmtudW1dICE9IEludmFsaWRCbG9j a051bWJlcikKLQkJcmV0dXJuIHJlbG4tPnNtZ3JfY2FjaGVkX25ibG9ja3NbZm9ya251bV07CisJ aWYgKEluUmVjb3ZlcnkgJiYgc2ZpbGUtPnNtZ3JfY2FjaGVkX25ibG9ja3MgIT0gSW52YWxpZEJs b2NrTnVtYmVyKQorCQlyZXR1cm4gc2ZpbGUtPnNtZ3JfY2FjaGVkX25ibG9ja3M7CiAKIAlyZXR1 cm4gSW52YWxpZEJsb2NrTnVtYmVyOwogfQogCiAvKgotICoJc21ncnRydW5jYXRlKCkgLS0gVHJ1 bmNhdGUgdGhlIGdpdmVuIGZvcmtzIG9mIHN1cHBsaWVkIHJlbGF0aW9uIHRvCi0gKgkJCQkJICBl YWNoIHNwZWNpZmllZCBudW1iZXJzIG9mIGJsb2NrcworICoJc21ncnRydW5jYXRlX211bHRpKCkg LS0gVHJ1bmNhdGUgdGhlIGdpdmVuIGZvcmtzIG9mIHN1cHBsaWVkIHJlbGF0aW9uIHRvCisgKgkJ CQkJCQllYWNoIHNwZWNpZmllZCBudW1iZXJzIG9mIGJsb2NrcwogICoKICAqIFRoZSB0cnVuY2F0 aW9uIGlzIGRvbmUgaW1tZWRpYXRlbHksIHNvIHRoaXMgY2FuJ3QgYmUgcm9sbGVkIGJhY2suCiAg KgogICogVGhlIGNhbGxlciBtdXN0IGhvbGQgQWNjZXNzRXhjbHVzaXZlTG9jayBvbiB0aGUgcmVs YXRpb24sIHRvIGVuc3VyZSB0aGF0CiAgKiBvdGhlciBiYWNrZW5kcyByZWNlaXZlIHRoZSBzbWdy IGludmFsaWRhdGlvbiBldmVudCB0aGF0IHRoaXMgZnVuY3Rpb24gc2VuZHMKICAqIGJlZm9yZSB0 aGV5IGFjY2VzcyBhbnkgZm9ya3Mgb2YgdGhlIHJlbGF0aW9uIGFnYWluLgorICoKKyAqIExpa2Ug c21ncnVubGlua19tdWx0aSgpLCB0aGlzIGhhbmRsZXMgbXVsdGlwbGUgZm9ya3MgaW4gb25lIGNh bGwgYmVjYXVzZQorICogdGhlIGNhY2hlIGludmFsaWRhdGlvbiBoYXBwZW5zIGF0IHJlbGF0aW9u IGdyYW51bGFyaXR5LgorICoKKyAqIE5COiBUaGUgY2FsbGVyIGlzIHJlc3BvbnNpYmxlIGZvciBk cm9wcGluZyBidWZmZXJzISBCZWZvcmUgdjE2LCB0aGlzCisgKiBmdW5jdGlvbiBkaWQgaXQuCiAg Ki8KIHZvaWQKLXNtZ3J0cnVuY2F0ZShTTWdyUmVsYXRpb24gcmVsbiwgRm9ya051bWJlciAqZm9y a251bSwgaW50IG5mb3JrcywgQmxvY2tOdW1iZXIgKm5ibG9ja3MpCitzbWdydHJ1bmNhdGVfbXVs dGkoUmVsRmlsZUxvY2F0b3IgcmxvY2F0b3IsIEJhY2tlbmRJZCBiYWNrZW5kLCBGb3JrTnVtYmVy ICpmb3JrcywKKwkJCQkgICBpbnQgbmZvcmtzLCBCbG9ja051bWJlciAqbmJsb2NrcykKIHsKIAlp bnQJCQlpOwogCi0JLyoKLQkgKiBHZXQgcmlkIG9mIGFueSBidWZmZXJzIGZvciB0aGUgYWJvdXQt dG8tYmUtZGVsZXRlZCBibG9ja3MuIGJ1Zm1nciB3aWxsCi0JICoganVzdCBkcm9wIHRoZW0gd2l0 aG91dCBib3RoZXJpbmcgdG8gd3JpdGUgdGhlIGNvbnRlbnRzLgotCSAqLwotCURyb3BSZWxhdGlv bkJ1ZmZlcnMocmVsbiwgZm9ya251bSwgbmZvcmtzLCBuYmxvY2tzKTsKKwlBc3NlcnQobmZvcmtz IDwgTUFYX0ZPUktOVU0gKyAxKTsKIAogCS8qCiAJICogU2VuZCBhIHNoYXJlZC1pbnZhbCBtZXNz YWdlIHRvIGZvcmNlIG90aGVyIGJhY2tlbmRzIHRvIGNsb3NlIGFueSBzbWdyCkBAIC02NDMsMTUg KzYyOCwxOSBAQCBzbWdydHJ1bmNhdGUoU01nclJlbGF0aW9uIHJlbG4sIEZvcmtOdW1iZXIgKmZv cmtudW0sIGludCBuZm9ya3MsIEJsb2NrTnVtYmVyICpuYgogCSAqIGlzIGEgcGVyZm9ybWFuY2Ut Y3JpdGljYWwgcGF0aC4pICBBcyBpbiB0aGUgdW5saW5rIGNvZGUsIHdlIHdhbnQgdG8gYmUKIAkg KiBzdXJlIHRoZSBtZXNzYWdlIGlzIHNlbnQgYmVmb3JlIHdlIHN0YXJ0IGNoYW5naW5nIHRoaW5n cyBvbi1kaXNrLgogCSAqLwotCUNhY2hlSW52YWxpZGF0ZVNtZ3IocmVsbi0+c21ncl9ybG9jYXRv cik7CisJQ2FjaGVJbnZhbGlkYXRlU21ncihybG9jYXRvciwgYmFja2VuZCk7CiAKLQkvKiBEbyB0 aGUgdHJ1bmNhdGlvbiAqLworCS8qIERvIHRoZSB0cnVuY2F0aW9ucyAqLwogCWZvciAoaSA9IDA7 IGkgPCBuZm9ya3M7IGkrKykKIAl7CisJCVNNZ3JGaWxlSGFuZGxlIHNmaWxlOworCisJCXNmaWxl ID0gc21ncm9wZW4ocmxvY2F0b3IsIGJhY2tlbmQsIGZvcmtzW2ldKTsKKwogCQkvKiBNYWtlIHRo ZSBjYWNoZWQgc2l6ZSBpcyBpbnZhbGlkIGlmIHdlIGVuY291bnRlciBhbiBlcnJvci4gKi8KLQkJ cmVsbi0+c21ncl9jYWNoZWRfbmJsb2Nrc1tmb3JrbnVtW2ldXSA9IEludmFsaWRCbG9ja051bWJl cjsKKwkJc2ZpbGUtPnNtZ3JfY2FjaGVkX25ibG9ja3MgPSBJbnZhbGlkQmxvY2tOdW1iZXI7CiAK LQkJc21ncnN3W3JlbG4tPnNtZ3Jfd2hpY2hdLnNtZ3JfdHJ1bmNhdGUocmVsbiwgZm9ya251bVtp XSwgbmJsb2Nrc1tpXSk7CisJCXNtZ3Jzd1tzZmlsZS0+c21ncl93aGljaF0uc21ncl90cnVuY2F0 ZShzZmlsZSwgbmJsb2Nrc1tpXSk7CiAKIAkJLyoKIAkJICogV2UgbWlnaHQgYXMgd2VsbCB1cGRh dGUgdGhlIGxvY2FsIHNtZ3JfY2FjaGVkX25ibG9ja3MgdmFsdWVzLiBUaGUKQEAgLTY2MCw3ICs2 NDksNyBAQCBzbWdydHJ1bmNhdGUoU01nclJlbGF0aW9uIHJlbG4sIEZvcmtOdW1iZXIgKmZvcmtu dW0sIGludCBuZm9ya3MsIEJsb2NrTnVtYmVyICpuYgogCQkgKiBzbWdyX3ZtX25ibG9ja3MsIGFu ZCB0aGVzZSBvbmVzIHRvbyBhdCB0aGUgbmV4dCBjb21tYW5kIGJvdW5kYXJ5LgogCQkgKiBCdXQg dGhlc2UgZW5zdXJlIHRoZXkgYXJlbid0IG91dHJpZ2h0IHdyb25nIHVudGlsIHRoZW4uCiAJCSAq LwotCQlyZWxuLT5zbWdyX2NhY2hlZF9uYmxvY2tzW2ZvcmtudW1baV1dID0gbmJsb2Nrc1tpXTsK KwkJc2ZpbGUtPnNtZ3JfY2FjaGVkX25ibG9ja3MgPSBuYmxvY2tzW2ldOwogCX0KIH0KIApAQCAt Njg4LDkgKzY3Nyw5IEBAIHNtZ3J0cnVuY2F0ZShTTWdyUmVsYXRpb24gcmVsbiwgRm9ya051bWJl ciAqZm9ya251bSwgaW50IG5mb3JrcywgQmxvY2tOdW1iZXIgKm5iCiAgKgkJb3RoZXJ3aXNlIHRo ZSBzeW5jIGlzIG5vdCB2ZXJ5IG1lYW5pbmdmdWwuCiAgKi8KIHZvaWQKLXNtZ3JpbW1lZHN5bmMo U01nclJlbGF0aW9uIHJlbG4sIEZvcmtOdW1iZXIgZm9ya251bSkKK3NtZ3JpbW1lZHN5bmMoU01n ckZpbGVIYW5kbGUgc2ZpbGUpCiB7Ci0Jc21ncnN3W3JlbG4tPnNtZ3Jfd2hpY2hdLnNtZ3JfaW1t ZWRzeW5jKHJlbG4sIGZvcmtudW0pOworCXNtZ3Jzd1tzZmlsZS0+c21ncl93aGljaF0uc21ncl9p bW1lZHN5bmMoc2ZpbGUpOwogfQogCiAvKgpAQCAtNzE0LDE0ICs3MDMsMTQgQEAgQXRFT1hhY3Rf U01ncih2b2lkKQogCSAqIFphcCBhbGwgdW5vd25lZCBTTWdyUmVsYXRpb25zLiAgV2UgcmVseSBv biBzbWdyY2xvc2UoKSB0byByZW1vdmUgZWFjaAogCSAqIG9uZSBmcm9tIHRoZSBsaXN0LgogCSAq LwotCWRsaXN0X2ZvcmVhY2hfbW9kaWZ5KGl0ZXIsICZ1bm93bmVkX3JlbG5zKQorCWRsaXN0X2Zv cmVhY2hfbW9kaWZ5KGl0ZXIsICZ1bm93bmVkX3NmaWxlcykKIAl7Ci0JCVNNZ3JSZWxhdGlvbiBy ZWwgPSBkbGlzdF9jb250YWluZXIoU01nclJlbGF0aW9uRGF0YSwgbm9kZSwKLQkJCQkJCQkJCQkg ICBpdGVyLmN1cik7CisJCVNNZ3JGaWxlSGFuZGxlIHNmaWxlID0gZGxpc3RfY29udGFpbmVyKFNN Z3JGaWxlRGF0YSwgbm9kZSwKKwkJCQkJCQkJCQkJICAgaXRlci5jdXIpOwogCi0JCUFzc2VydChy ZWwtPnNtZ3Jfb3duZXIgPT0gTlVMTCk7CisJCUFzc2VydChzZmlsZS0+c21ncl9vd25lciA9PSBO VUxMKTsKIAotCQlzbWdyY2xvc2UocmVsKTsKKwkJc21ncmNsb3NlKHNmaWxlKTsKIAl9CiB9CiAK ZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL3N0b3JhZ2Uvc3luYy9zeW5jLmMgYi9zcmMvYmFja2Vu ZC9zdG9yYWdlL3N5bmMvc3luYy5jCmluZGV4IDlkNmE5ZTkxMDkwLi4zNTcyMDc4YmE3OSAxMDA2 NDQKLS0tIGEvc3JjL2JhY2tlbmQvc3RvcmFnZS9zeW5jL3N5bmMuYworKysgYi9zcmMvYmFja2Vu ZC9zdG9yYWdlL3N5bmMvc3luYy5jCkBAIC0xOCw5ICsxOCw3IEBACiAjaW5jbHVkZSA8ZmNudGwu aD4KICNpbmNsdWRlIDxzeXMvZmlsZS5oPgogCi0jaW5jbHVkZSAiYWNjZXNzL2NvbW1pdF90cy5o IgotI2luY2x1ZGUgImFjY2Vzcy9jbG9nLmgiCi0jaW5jbHVkZSAiYWNjZXNzL211bHRpeGFjdC5o IgorI2luY2x1ZGUgImFjY2Vzcy9zbHJ1LmgiCiAjaW5jbHVkZSAiYWNjZXNzL3hsb2cuaCIKICNp bmNsdWRlICJhY2Nlc3MveGxvZ3V0aWxzLmgiCiAjaW5jbHVkZSAiY29tbWFuZHMvdGFibGVzcGFj ZS5oIgpAQCAtMTA2LDIyICsxMDQsNiBAQCBzdGF0aWMgY29uc3QgU3luY09wcyBzeW5jc3dbXSA9 IHsKIAkJLnN5bmNfdW5saW5rZmlsZXRhZyA9IG1kdW5saW5rZmlsZXRhZywKIAkJLnN5bmNfZmls ZXRhZ21hdGNoZXMgPSBtZGZpbGV0YWdtYXRjaGVzCiAJfSwKLQkvKiBwZ194YWN0ICovCi0JW1NZ TkNfSEFORExFUl9DTE9HXSA9IHsKLQkJLnN5bmNfc3luY2ZpbGV0YWcgPSBjbG9nc3luY2ZpbGV0 YWcKLQl9LAotCS8qIHBnX2NvbW1pdF90cyAqLwotCVtTWU5DX0hBTkRMRVJfQ09NTUlUX1RTXSA9 IHsKLQkJLnN5bmNfc3luY2ZpbGV0YWcgPSBjb21taXR0c3N5bmNmaWxldGFnCi0JfSwKLQkvKiBw Z19tdWx0aXhhY3Qvb2Zmc2V0cyAqLwotCVtTWU5DX0hBTkRMRVJfTVVMVElYQUNUX09GRlNFVF0g PSB7Ci0JCS5zeW5jX3N5bmNmaWxldGFnID0gbXVsdGl4YWN0b2Zmc2V0c3N5bmNmaWxldGFnCi0J fSwKLQkvKiBwZ19tdWx0aXhhY3QvbWVtYmVycyAqLwotCVtTWU5DX0hBTkRMRVJfTVVMVElYQUNU X01FTUJFUl0gPSB7Ci0JCS5zeW5jX3N5bmNmaWxldGFnID0gbXVsdGl4YWN0bWVtYmVyc3N5bmNm aWxldGFnCi0JfQogfTsKIAogLyoKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL3V0aWxzL2NhY2hl L2ludmFsLmMgYi9zcmMvYmFja2VuZC91dGlscy9jYWNoZS9pbnZhbC5jCmluZGV4IGViNTc4MmY4 MmE0Li5iZDQzNTIxNWRjYSAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvdXRpbHMvY2FjaGUvaW52 YWwuYworKysgYi9zcmMvYmFja2VuZC91dGlscy9jYWNoZS9pbnZhbC5jCkBAIC02NjEsMTEgKzY2 MSwxMiBAQCBMb2NhbEV4ZWN1dGVJbnZhbGlkYXRpb25NZXNzYWdlKFNoYXJlZEludmFsaWRhdGlv bk1lc3NhZ2UgKm1zZykKIAkJICogV2UgY291bGQgaGF2ZSBzbWdyIGVudHJpZXMgZm9yIHJlbGF0 aW9ucyBvZiBvdGhlciBkYXRhYmFzZXMsIHNvIG5vCiAJCSAqIHNob3J0LWNpcmN1aXQgdGVzdCBp cyBwb3NzaWJsZSBoZXJlLgogCQkgKi8KLQkJUmVsRmlsZUxvY2F0b3JCYWNrZW5kIHJsb2NhdG9y OworCQlSZWxGaWxlTG9jYXRvciBybG9jYXRvcjsKKwkJQmFja2VuZElkIGJhY2tlbmQ7CiAKLQkJ cmxvY2F0b3IubG9jYXRvciA9IG1zZy0+c20ucmxvY2F0b3I7Ci0JCXJsb2NhdG9yLmJhY2tlbmQg PSAobXNnLT5zbS5iYWNrZW5kX2hpIDw8IDE2KSB8IChpbnQpIG1zZy0+c20uYmFja2VuZF9sbzsK LQkJc21ncmNsb3NlcmVsbG9jYXRvcihybG9jYXRvcik7CisJCXJsb2NhdG9yID0gbXNnLT5zbS5y bG9jYXRvcjsKKwkJYmFja2VuZCA9IChtc2ctPnNtLmJhY2tlbmRfaGkgPDwgMTYpIHwgKGludCkg bXNnLT5zbS5iYWNrZW5kX2xvOworCQlzbWdyY2xvc2VyZWxsb2NhdG9yKHJsb2NhdG9yLCBiYWNr ZW5kKTsKIAl9CiAJZWxzZSBpZiAobXNnLT5pZCA9PSBTSEFSRURJTlZBTFJFTE1BUF9JRCkKIAl7 CkBAIC0xNDU5LDE0ICsxNDYwLDE0IEBAIENhY2hlSW52YWxpZGF0ZVJlbGNhY2hlQnlSZWxpZChP aWQgcmVsaWQpCiAgKiBUaHVzLCB0aGUgbWF4aW11bSBwb3NzaWJsZSBiYWNrZW5kIElEIGlzIDJe MjMtMS4KICAqLwogdm9pZAotQ2FjaGVJbnZhbGlkYXRlU21ncihSZWxGaWxlTG9jYXRvckJhY2tl bmQgcmxvY2F0b3IpCitDYWNoZUludmFsaWRhdGVTbWdyKFJlbEZpbGVMb2NhdG9yIHJsb2NhdG9y LCBCYWNrZW5kSWQgYmFja2VuZCkKIHsKIAlTaGFyZWRJbnZhbGlkYXRpb25NZXNzYWdlIG1zZzsK IAogCW1zZy5zbS5pZCA9IFNIQVJFRElOVkFMU01HUl9JRDsKLQltc2cuc20uYmFja2VuZF9oaSA9 IHJsb2NhdG9yLmJhY2tlbmQgPj4gMTY7Ci0JbXNnLnNtLmJhY2tlbmRfbG8gPSBybG9jYXRvci5i YWNrZW5kICYgMHhmZmZmOwotCW1zZy5zbS5ybG9jYXRvciA9IHJsb2NhdG9yLmxvY2F0b3I7CisJ bXNnLnNtLmJhY2tlbmRfaGkgPSBiYWNrZW5kID4+IDE2OworCW1zZy5zbS5iYWNrZW5kX2xvID0g YmFja2VuZCAmIDB4ZmZmZjsKKwltc2cuc20ucmxvY2F0b3IgPSBybG9jYXRvcjsKIAkvKiBjaGVj ayBBZGRDYXRjYWNoZUludmFsaWRhdGlvbk1lc3NhZ2UoKSBmb3IgYW4gZXhwbGFuYXRpb24gKi8K IAlWQUxHUklORF9NQUtFX01FTV9ERUZJTkVEKCZtc2csIHNpemVvZihtc2cpKTsKIApkaWZmIC0t Z2l0IGEvc3JjL2JhY2tlbmQvdXRpbHMvY2FjaGUvcmVsY2FjaGUuYyBiL3NyYy9iYWNrZW5kL3V0 aWxzL2NhY2hlL3JlbGNhY2hlLmMKaW5kZXggYmRiNzcxZDI3OGYuLjkwYTFlYjkxOTgwIDEwMDY0 NAotLS0gYS9zcmMvYmFja2VuZC91dGlscy9jYWNoZS9yZWxjYWNoZS5jCisrKyBiL3NyYy9iYWNr ZW5kL3V0aWxzL2NhY2hlL3JlbGNhY2hlLmMKQEAgLTQxOCw3ICs0MTgsNyBAQCBBbGxvY2F0ZVJl bGF0aW9uRGVzYyhGb3JtX3BnX2NsYXNzIHJlbHApCiAJcmVsYXRpb24gPSAoUmVsYXRpb24pIHBh bGxvYzAoc2l6ZW9mKFJlbGF0aW9uRGF0YSkpOwogCiAJLyogbWFrZSBzdXJlIHJlbGF0aW9uIGlz IG1hcmtlZCBhcyBoYXZpbmcgbm8gb3BlbiBmaWxlIHlldCAqLwotCXJlbGF0aW9uLT5yZF9zbWdy ID0gTlVMTDsKKwlNZW1TZXQocmVsYXRpb24tPnJkX3NtZ3IsIDAsIHNpemVvZihyZWxhdGlvbi0+ cmRfc21ncikpOwogCiAJLyoKIAkgKiBDb3B5IHRoZSByZWxhdGlvbiB0dXBsZSBmb3JtCkBAIC0x MjQ3LDcgKzEyNDcsNyBAQCByZXRyeToKIAlSZWxhdGlvbkluaXRQaHlzaWNhbEFkZHIocmVsYXRp b24pOwogCiAJLyogbWFrZSBzdXJlIHJlbGF0aW9uIGlzIG1hcmtlZCBhcyBoYXZpbmcgbm8gb3Bl biBmaWxlIHlldCAqLwotCXJlbGF0aW9uLT5yZF9zbWdyID0gTlVMTDsKKwlNZW1TZXQocmVsYXRp b24tPnJkX3NtZ3IsIDAsIHNpemVvZihyZWxhdGlvbi0+cmRfc21ncikpOwogCiAJLyoKIAkgKiBu b3cgd2UgY2FuIGZyZWUgdGhlIG1lbW9yeSBhbGxvY2F0ZWQgZm9yIHBnX2NsYXNzX3R1cGxlCkBA IC0xODc2LDcgKzE4NzYsNyBAQCBmb3JtcmRlc2MoY29uc3QgY2hhciAqcmVsYXRpb25OYW1lLCBP aWQgcmVsYXRpb25SZWx0eXBlLAogCXJlbGF0aW9uID0gKFJlbGF0aW9uKSBwYWxsb2MwKHNpemVv ZihSZWxhdGlvbkRhdGEpKTsKIAogCS8qIG1ha2Ugc3VyZSByZWxhdGlvbiBpcyBtYXJrZWQgYXMg aGF2aW5nIG5vIG9wZW4gZmlsZSB5ZXQgKi8KLQlyZWxhdGlvbi0+cmRfc21nciA9IE5VTEw7CisJ TWVtU2V0KHJlbGF0aW9uLT5yZF9zbWdyLCAwLCBzaXplb2YocmVsYXRpb24tPnJkX3NtZ3IpKTsK IAogCS8qCiAJICogaW5pdGlhbGl6ZSByZWZlcmVuY2UgY291bnQ6IDEgYmVjYXVzZSBpdCBpcyBu YWlsZWQgaW4gY2FjaGUKQEAgLTI2OTMsNyArMjY5Myw4IEBAIFJlbGF0aW9uQ2xlYXJSZWxhdGlv bihSZWxhdGlvbiByZWxhdGlvbiwgYm9vbCByZWJ1aWxkKQogCQl9CiAKIAkJLyogcmRfc21nciBt dXN0IG5vdCBiZSBzd2FwcGVkLCBkdWUgdG8gYmFjay1saW5rcyBmcm9tIHNtZ3IgbGV2ZWwgKi8K LQkJU1dBUEZJRUxEKFNNZ3JSZWxhdGlvbiwgcmRfc21ncik7CisJCWZvciAoaW50IGkgPSAwOyBp IDw9IE1BWF9GT1JLTlVNOyBpKyspCisJCQlTV0FQRklFTEQoU01nckZpbGVIYW5kbGUsIHJkX3Nt Z3JbaV0pOwogCQkvKiByZF9yZWZjbnQgbXVzdCBiZSBwcmVzZXJ2ZWQgKi8KIAkJU1dBUEZJRUxE KGludCwgcmRfcmVmY250KTsKIAkJLyogaXNuYWlsZWQgc2hvdWxkbid0IGNoYW5nZSAqLwpAQCAt MzUyNCw3ICszNTI1LDcgQEAgUmVsYXRpb25CdWlsZExvY2FsUmVsYXRpb24oY29uc3QgY2hhciAq cmVsbmFtZSwKIAlyZWwgPSAoUmVsYXRpb24pIHBhbGxvYzAoc2l6ZW9mKFJlbGF0aW9uRGF0YSkp OwogCiAJLyogbWFrZSBzdXJlIHJlbGF0aW9uIGlzIG1hcmtlZCBhcyBoYXZpbmcgbm8gb3BlbiBm aWxlIHlldCAqLwotCXJlbC0+cmRfc21nciA9IE5VTEw7CisJTWVtU2V0KHJlbC0+cmRfc21nciwg MCwgc2l6ZW9mKHJlbC0+cmRfc21ncikpOwogCiAJLyogbWFyayBpdCBuYWlsZWQgaWYgYXBwcm9w cmlhdGUgKi8KIAlyZWwtPnJkX2lzbmFpbGVkID0gbmFpbGl0OwpAQCAtMzc0OCw3ICszNzQ5LDcg QEAgUmVsYXRpb25TZXROZXdSZWxmaWxlbnVtYmVyKFJlbGF0aW9uIHJlbGF0aW9uLCBjaGFyIHBl cnNpc3RlbmNlKQogCWVsc2UgaWYgKFJFTEtJTkRfSEFTX1NUT1JBR0UocmVsYXRpb24tPnJkX3Jl bC0+cmVsa2luZCkpCiAJewogCQkvKiBoYW5kbGUgdGhlc2UgZGlyZWN0bHksIGF0IGxlYXN0IGZv ciBub3cgKi8KLQkJU01nclJlbGF0aW9uIHNyZWw7CisJCVNNZ3JGaWxlSGFuZGxlIHNyZWw7CiAK IAkJc3JlbCA9IFJlbGF0aW9uQ3JlYXRlU3RvcmFnZShuZXdybG9jYXRvciwgcGVyc2lzdGVuY2Us IHRydWUpOwogCQlzbWdyY2xvc2Uoc3JlbCk7CkBAIC02MjM1LDcgKzYyMzYsNyBAQCBsb2FkX3Jl bGNhY2hlX2luaXRfZmlsZShib29sIHNoYXJlZCkKIAkJLyoKIAkJICogUmVzZXQgdHJhbnNpZW50 LXN0YXRlIGZpZWxkcyBpbiB0aGUgcmVsY2FjaGUgZW50cnkKIAkJICovCi0JCXJlbC0+cmRfc21n ciA9IE5VTEw7CisJCU1lbVNldChyZWwtPnJkX3NtZ3IsIDAsIHNpemVvZihyZWwtPnJkX3NtZ3Ip KTsKIAkJaWYgKHJlbC0+cmRfaXNuYWlsZWQpCiAJCQlyZWwtPnJkX3JlZmNudCA9IDE7CiAJCWVs c2UKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL3V0aWxzL21tZ3IvbWN4dC5jIGIvc3JjL2JhY2tl bmQvdXRpbHMvbW1nci9tY3h0LmMKaW5kZXggZTEyYmUxYjliZDguLmYwMjU1Zjg5NWM2IDEwMDY0 NAotLS0gYS9zcmMvYmFja2VuZC91dGlscy9tbWdyL21jeHQuYworKysgYi9zcmMvYmFja2VuZC91 dGlscy9tbWdyL21jeHQuYwpAQCAtNjksOSArNjksMjAgQEAgc3RhdGljIHZvaWQgTWVtb3J5Q29u dGV4dFN0YXRzUHJpbnQoTWVtb3J5Q29udGV4dCBjb250ZXh0LCB2b2lkICpwYXNzdGhydSwKICAq IFlvdSBzaG91bGQgbm90IGRvIG1lbW9yeSBhbGxvY2F0aW9ucyB3aXRoaW4gYSBjcml0aWNhbCBz ZWN0aW9uLCBiZWNhdXNlCiAgKiBhbiBvdXQtb2YtbWVtb3J5IGVycm9yIHdpbGwgYmUgZXNjYWxh dGVkIHRvIGEgUEFOSUMuIFRvIGVuZm9yY2UgdGhhdAogICogcnVsZSwgdGhlIGFsbG9jYXRpb24g ZnVuY3Rpb25zIEFzc2VydCB0aGF0LgorICoKKyAqIEZJWE1FOiBieXBhc3MgdGhpcyBmb3IgdGhl IGNyaXRpY2FsIHNlY3Rpb24gaW4gUmVjb3JkVHJhbnNhY3Rpb25Db21taXQoKQorICogZm9yIG5v dy4gSXQgZG9lcyBhIGxvdCBvZiB0aGluZ3MgdGhhdCBjYW4gYWxsb2NhdGU6CisgKiAtIGNhbGxz IFRyYW5zYWN0aW9uSWRDb21taXRUcmVlLCB3aGljaCBwaW5zIGJ1ZmZlcnMsIHdoaWNoIHJlcXVp cmVzCisgKiAgIHNwYWNlIGluIHRoZSBSZXNvdXJjZU93bmVyIGZvciB0aGUgcGluIChSZXNvdXJj ZU93bmVyRW5sYXJnZUJ1ZmZlcnMoKSkKKyAqIC0gc2FtZSBmb3IgVHJhbnNhY3Rpb25UcmVlU2V0 Q29tbWl0VHNEYXRhKCkgY2FsbC4KKyAqIC0gcmVhZGluZyBhIHBhZ2UgY2FuIHJlcXVpcmUgZmx1 c2hpbmcgb3RoZXIgcGFnZXMsIHdoaWNoIGluIHR1cm4KKyAqICAgY2FuIGNhbGwgQ29tcGFjdENo ZWNrcG9pbnRlclJlcXVlc3RRdWV1ZSgpLCB3aGljaCBhbGxvY2F0ZXMKKyAqIC0gcmVhZGluZyBh IHBhZ2UgY2FsbHMgc21ncm9wZW4oKSwgd2hpY2ggYWxsb2NhdGVzIHRoZSBTTWdyRmlsZSBlbnRy eQorICogICBpZiBpdCdzIG5vdCBvcGVuIGFscmVhZHkKICAqLwogI2RlZmluZSBBc3NlcnROb3RJ bkNyaXRpY2FsU2VjdGlvbihjb250ZXh0KSBcCi0JQXNzZXJ0KENyaXRTZWN0aW9uQ291bnQgPT0g MCB8fCAoY29udGV4dCktPmFsbG93SW5Dcml0U2VjdGlvbikKKwlBc3NlcnQoQ3JpdFNlY3Rpb25D b3VudCA9PSAwIHx8IChjb250ZXh0KS0+YWxsb3dJbkNyaXRTZWN0aW9uIHx8IFwKKwkJICAgKE15 UHJvYyAhPSBOVUxMICYmIChNeVByb2MtPmRlbGF5Q2hrcHRGbGFncyAmIERFTEFZX0NIS1BUX1NU QVJUICE9IDApKSkKIAogCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKZGlmZiAtLWdpdCBhL3NyYy9i aW4vcGdfcmV3aW5kL2ZpbGVtYXAuYyBiL3NyYy9iaW4vcGdfcmV3aW5kL2ZpbGVtYXAuYwppbmRl eCAyNjllZDY0NDZlNi4uNDRmMmJkMWE5YzEgMTAwNjQ0Ci0tLSBhL3NyYy9iaW4vcGdfcmV3aW5k L2ZpbGVtYXAuYworKysgYi9zcmMvYmluL3BnX3Jld2luZC9maWxlbWFwLmMKQEAgLTI1LDcgKzI1 LDYgQEAKIAogI2luY2x1ZGUgPHN5cy9zdGF0Lmg+CiAjaW5jbHVkZSA8dW5pc3RkLmg+Ci0KICNp bmNsdWRlICJjYXRhbG9nL3BnX3RhYmxlc3BhY2VfZC5oIgogI2luY2x1ZGUgImNvbW1vbi9oYXNo Zm4uaCIKICNpbmNsdWRlICJjb21tb24vc3RyaW5nLmgiCkBAIC01Myw2ICs1MiwxMCBAQCBzdGF0 aWMgdWludDMyIGhhc2hfc3RyaW5nX3BvaW50ZXIoY29uc3QgY2hhciAqcyk7CiAKICNkZWZpbmUg RklMRUhBU0hfSU5JVElBTF9TSVpFCTEwMDAKIAorI2RlZmluZSBTRUdTSVpFKHJsb2NhdG9yKSBy bG9jYXRvci5zcGNPaWQgPT0gU0xSVV9TUENfT0lEID8gXAorCTMyIDogXAorCVJFTFNFR19TSVpF CisKIHN0YXRpYyBmaWxlaGFzaF9oYXNoICpmaWxlaGFzaDsKIAogc3RhdGljIGJvb2wgaXNSZWxE YXRhRmlsZShjb25zdCBjaGFyICpwYXRoKTsKQEAgLTI5Niw4ICsyOTksOCBAQCBwcm9jZXNzX3Rh cmdldF93YWxfYmxvY2tfY2hhbmdlKEZvcmtOdW1iZXIgZm9ya251bSwgUmVsRmlsZUxvY2F0b3Ig cmxvY2F0b3IsCiAJQmxvY2tOdW1iZXIgYmxrbm9faW5zZWc7CiAJaW50CQkJc2Vnbm87CiAKLQlz ZWdubyA9IGJsa25vIC8gUkVMU0VHX1NJWkU7Ci0JYmxrbm9faW5zZWcgPSBibGtubyAlIFJFTFNF R19TSVpFOworCXNlZ25vID0gYmxrbm8gLyBTRUdTSVpFKHJsb2NhdG9yKTsKKwlibGtub19pbnNl ZyA9IGJsa25vICUgU0VHU0laRShybG9jYXRvcik7CiAKIAlwYXRoID0gZGF0YXNlZ3BhdGgocmxv Y2F0b3IsIGZvcmtudW0sIHNlZ25vKTsKIAllbnRyeSA9IGxvb2t1cF9maWxlaGFzaF9lbnRyeShw YXRoKTsKZGlmZiAtLWdpdCBhL3NyYy9jb21tb24vcmVscGF0aC5jIGIvc3JjL2NvbW1vbi9yZWxw YXRoLmMKaW5kZXggMWI2YjYyMGNlODMuLjAwN2IwODk4MDQ5IDEwMDY0NAotLS0gYS9zcmMvY29t bW9uL3JlbHBhdGguYworKysgYi9zcmMvY29tbW9uL3JlbHBhdGguYwpAQCAtMjIsNiArMjIsMTYg QEAKICNpbmNsdWRlICJjb21tb24vcmVscGF0aC5oIgogI2luY2x1ZGUgInN0b3JhZ2UvYmFja2Vu ZGlkLmgiCiAKKy8qCisgKiBTTFJVIElEIHRvIHBhdGggbWFwcGluZworICovCisjZGVmaW5lIFBH X1NMUlUoc3ltbmFtZSxuYW1lLHBhdGgsc3luY2hyb25pemUpIFwKKwlwYXRoLAorCitzdGF0aWMg Y2hhciAqc2xydV9kaXJzW10gPQoreworI2luY2x1ZGUgImFjY2Vzcy9zbHJ1bGlzdC5oIgorfTsK IAogLyoKICAqIExvb2t1cCB0YWJsZSBvZiBmb3JrIG5hbWUgYnkgZm9yayBudW1iZXIuCkBAIC0x MjksNyArMTM5LDcgQEAgR2V0RGF0YWJhc2VQYXRoKE9pZCBkYk9pZCwgT2lkIHNwY09pZCkKIH0K IAogLyoKLSAqIEdldFJlbGF0aW9uUGF0aCAtIGNvbnN0cnVjdCBwYXRoIHRvIGEgcmVsYXRpb24n cyBmaWxlCisgKiBHZXRTTWdyRmlsZVBhdGggLSBjb25zdHJ1Y3QgcGF0aCB0byBhIHJlbGF0aW9u J3MgZmlsZQogICoKICAqIFJlc3VsdCBpcyBhIHBhbGxvYydkIHN0cmluZy4KICAqCkBAIC0xMzgs MTIgKzE0OCwyNyBAQCBHZXREYXRhYmFzZVBhdGgoT2lkIGRiT2lkLCBPaWQgc3BjT2lkKQogICog dGhlIHRyb3VibGUgY29uc2lkZXJpbmcgQmFja2VuZElkIGlzIGp1c3QgaW50IGFueXdheS4KICAq LwogY2hhciAqCi1HZXRSZWxhdGlvblBhdGgoT2lkIGRiT2lkLCBPaWQgc3BjT2lkLCBSZWxGaWxl TnVtYmVyIHJlbE51bWJlciwKK0dldFNNZ3JGaWxlUGF0aChPaWQgZGJPaWQsIE9pZCBzcGNPaWQs IFJlbEZpbGVOdW1iZXIgcmVsTnVtYmVyLAogCQkJCWludCBiYWNrZW5kSWQsIEZvcmtOdW1iZXIg Zm9ya051bWJlcikKIHsKIAljaGFyCSAgICpwYXRoOwogCi0JaWYgKHNwY09pZCA9PSBHTE9CQUxU QUJMRVNQQUNFX09JRCkKKwlpZiAoc3BjT2lkID09IFNMUlVfU1BDX09JRCkKKwl7CisJCWlmIChk Yk9pZCA+PSBsZW5ndGhvZihzbHJ1X2RpcnMpIHx8IGZvcmtOdW1iZXIgIT0gMCB8fCBiYWNrZW5k SWQgIT0gSW52YWxpZEJhY2tlbmRJZCkKKwkJeworI2lmbmRlZiBGUk9OVEVORAorCQkJZXJlcG9y dChFUlJPUiwKKwkJCQkJKGVycmNvZGUoRVJSQ09ERV9JTlZBTElEX1BBUkFNRVRFUl9WQUxVRSks CisJCQkJCSBlcnJtc2coImludmFsaWQgU0xSVSBmaWxlIGxvY2F0b3IgJXUvJXUvJXUvJXUvJXUi LAorCQkJCQkJCXNwY09pZCwgZGJPaWQsIHJlbE51bWJlciwgYmFja2VuZElkLCBmb3JrTnVtYmVy KSkpOworI2Vsc2UKKwkJCXJldHVybiBOVUxMOworI2VuZGlmCisJCX0KKwkJcGF0aCA9IHBzcHJp bnRmKCIlcy8ldSIsIHNscnVfZGlyc1tkYk9pZF0sIHJlbE51bWJlcik7CisJfQorCWVsc2UgaWYg KHNwY09pZCA9PSBHTE9CQUxUQUJMRVNQQUNFX09JRCkKIAl7CiAJCS8qIFNoYXJlZCBzeXN0ZW0g cmVsYXRpb25zIGxpdmUgaW4ge2RhdGFkaXJ9L2dsb2JhbCAqLwogCQlBc3NlcnQoZGJPaWQgPT0g MCk7CmRpZmYgLS1naXQgYS9zcmMvaW5jbHVkZS9hY2Nlc3MvY2xvZy5oIGIvc3JjL2luY2x1ZGUv YWNjZXNzL2Nsb2cuaAppbmRleCA1NDNmMmUyNjQzYS4uYWYxNmEyYWZjYjkgMTAwNjQ0Ci0tLSBh L3NyYy9pbmNsdWRlL2FjY2Vzcy9jbG9nLmgKKysrIGIvc3JjL2luY2x1ZGUvYWNjZXNzL2Nsb2cu aApAQCAtNDAsMTggKzQwLDEyIEBAIGV4dGVybiB2b2lkIFRyYW5zYWN0aW9uSWRTZXRUcmVlU3Rh dHVzKFRyYW5zYWN0aW9uSWQgeGlkLCBpbnQgbnN1YnhpZHMsCiAJCQkJCQkJCQkgICBUcmFuc2Fj dGlvbklkICpzdWJ4aWRzLCBYaWRTdGF0dXMgc3RhdHVzLCBYTG9nUmVjUHRyIGxzbik7CiBleHRl cm4gWGlkU3RhdHVzIFRyYW5zYWN0aW9uSWRHZXRTdGF0dXMoVHJhbnNhY3Rpb25JZCB4aWQsIFhM b2dSZWNQdHIgKmxzbik7CiAKLWV4dGVybiBTaXplIENMT0dTaG1lbUJ1ZmZlcnModm9pZCk7Ci1l eHRlcm4gU2l6ZSBDTE9HU2htZW1TaXplKHZvaWQpOwotZXh0ZXJuIHZvaWQgQ0xPR1NobWVtSW5p dCh2b2lkKTsKIGV4dGVybiB2b2lkIEJvb3RTdHJhcENMT0codm9pZCk7CiBleHRlcm4gdm9pZCBT dGFydHVwQ0xPRyh2b2lkKTsKIGV4dGVybiB2b2lkIFRyaW1DTE9HKHZvaWQpOwotZXh0ZXJuIHZv aWQgQ2hlY2tQb2ludENMT0codm9pZCk7CiBleHRlcm4gdm9pZCBFeHRlbmRDTE9HKFRyYW5zYWN0 aW9uSWQgbmV3ZXN0WGFjdCk7CiBleHRlcm4gdm9pZCBUcnVuY2F0ZUNMT0coVHJhbnNhY3Rpb25J ZCBvbGRlc3RYYWN0LCBPaWQgb2xkZXN0eGlkX2RhdG9pZCk7CiAKLWV4dGVybiBpbnQJY2xvZ3N5 bmNmaWxldGFnKGNvbnN0IEZpbGVUYWcgKmZ0YWcsIGNoYXIgKnBhdGgpOwotCiAvKiBYTE9HIHN0 dWZmICovCiAjZGVmaW5lIENMT0dfWkVST1BBR0UJCTB4MDAKICNkZWZpbmUgQ0xPR19UUlVOQ0FU RQkJMHgxMApkaWZmIC0tZ2l0IGEvc3JjL2luY2x1ZGUvYWNjZXNzL2NvbW1pdF90cy5oIGIvc3Jj L2luY2x1ZGUvYWNjZXNzL2NvbW1pdF90cy5oCmluZGV4IDc2NjJmOGUxYTljLi40ZTk4NmZjMDIz ZCAxMDA2NDQKLS0tIGEvc3JjL2luY2x1ZGUvYWNjZXNzL2NvbW1pdF90cy5oCisrKyBiL3NyYy9p bmNsdWRlL2FjY2Vzcy9jb21taXRfdHMuaApAQCAtMjcsNyArMjcsNiBAQCBleHRlcm4gYm9vbCBU cmFuc2FjdGlvbklkR2V0Q29tbWl0VHNEYXRhKFRyYW5zYWN0aW9uSWQgeGlkLAogZXh0ZXJuIFRy YW5zYWN0aW9uSWQgR2V0TGF0ZXN0Q29tbWl0VHNEYXRhKFRpbWVzdGFtcFR6ICp0cywKIAkJCQkJ CQkJCQkgICBSZXBPcmlnaW5JZCAqbm9kZWlkKTsKIAotZXh0ZXJuIFNpemUgQ29tbWl0VHNTaG1l bUJ1ZmZlcnModm9pZCk7CiBleHRlcm4gU2l6ZSBDb21taXRUc1NobWVtU2l6ZSh2b2lkKTsKIGV4 dGVybiB2b2lkIENvbW1pdFRzU2htZW1Jbml0KHZvaWQpOwogZXh0ZXJuIHZvaWQgQm9vdFN0cmFw Q29tbWl0VHModm9pZCk7CkBAIC00MSw4ICs0MCw2IEBAIGV4dGVybiB2b2lkIFNldENvbW1pdFRz TGltaXQoVHJhbnNhY3Rpb25JZCBvbGRlc3RYYWN0LAogCQkJCQkJCSBUcmFuc2FjdGlvbklkIG5l d2VzdFhhY3QpOwogZXh0ZXJuIHZvaWQgQWR2YW5jZU9sZGVzdENvbW1pdFRzWGlkKFRyYW5zYWN0 aW9uSWQgb2xkZXN0WGFjdCk7CiAKLWV4dGVybiBpbnQJY29tbWl0dHNzeW5jZmlsZXRhZyhjb25z dCBGaWxlVGFnICpmdGFnLCBjaGFyICpwYXRoKTsKLQogLyogWExPRyBzdHVmZiAqLwogI2RlZmlu ZSBDT01NSVRfVFNfWkVST1BBR0UJCTB4MDAKICNkZWZpbmUgQ09NTUlUX1RTX1RSVU5DQVRFCQkw eDEwCmRpZmYgLS1naXQgYS9zcmMvaW5jbHVkZS9hY2Nlc3MvbXVsdGl4YWN0LmggYi9zcmMvaW5j bHVkZS9hY2Nlc3MvbXVsdGl4YWN0LmgKaW5kZXggYTU2MDBhMzIwYWUuLmE2YmJlNTNlMWJiIDEw MDY0NAotLS0gYS9zcmMvaW5jbHVkZS9hY2Nlc3MvbXVsdGl4YWN0LmgKKysrIGIvc3JjL2luY2x1 ZGUvYWNjZXNzL211bHRpeGFjdC5oCkBAIC0xMTgsOSArMTE4LDYgQEAgZXh0ZXJuIGJvb2wgTXVs dGlYYWN0SWRQcmVjZWRlcyhNdWx0aVhhY3RJZCBtdWx0aTEsIE11bHRpWGFjdElkIG11bHRpMik7 CiBleHRlcm4gYm9vbCBNdWx0aVhhY3RJZFByZWNlZGVzT3JFcXVhbHMoTXVsdGlYYWN0SWQgbXVs dGkxLAogCQkJCQkJCQkJCU11bHRpWGFjdElkIG11bHRpMik7CiAKLWV4dGVybiBpbnQJbXVsdGl4 YWN0b2Zmc2V0c3N5bmNmaWxldGFnKGNvbnN0IEZpbGVUYWcgKmZ0YWcsIGNoYXIgKnBhdGgpOwot ZXh0ZXJuIGludAltdWx0aXhhY3RtZW1iZXJzc3luY2ZpbGV0YWcoY29uc3QgRmlsZVRhZyAqZnRh ZywgY2hhciAqcGF0aCk7Ci0KIGV4dGVybiB2b2lkIEF0RU9YYWN0X011bHRpWGFjdCh2b2lkKTsK IGV4dGVybiB2b2lkIEF0UHJlcGFyZV9NdWx0aVhhY3Qodm9pZCk7CiBleHRlcm4gdm9pZCBQb3N0 UHJlcGFyZV9NdWx0aVhhY3QoVHJhbnNhY3Rpb25JZCB4aWQpOwpkaWZmIC0tZ2l0IGEvc3JjL2lu Y2x1ZGUvYWNjZXNzL3NscnUuaCBiL3NyYy9pbmNsdWRlL2FjY2Vzcy9zbHJ1LmgKaW5kZXggMTMw YzQxYzg2MzIuLmVlMWIyZjQwYzdlIDEwMDY0NAotLS0gYS9zcmMvaW5jbHVkZS9hY2Nlc3Mvc2xy dS5oCisrKyBiL3NyYy9pbmNsdWRlL2FjY2Vzcy9zbHJ1LmgKQEAgLTEsNyArMSw3IEBACiAvKi0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0KICAqCiAgKiBzbHJ1LmgKLSAqCQlTaW1wbGUgTFJVIGJ1ZmZlcmluZyBm b3IgdHJhbnNhY3Rpb24gc3RhdHVzIGxvZ2ZpbGVzCisgKgkJQnVmZmVyaW5nIGZvciB0cmFuc2Fj dGlvbiBzdGF0dXMgbG9nZmlsZXMKICAqCiAgKiBQb3J0aW9ucyBDb3B5cmlnaHQgKGMpIDE5OTYt MjAyMiwgUG9zdGdyZVNRTCBHbG9iYWwgRGV2ZWxvcG1lbnQgR3JvdXAKICAqIFBvcnRpb25zIENv cHlyaWdodCAoYykgMTk5NCwgUmVnZW50cyBvZiB0aGUgVW5pdmVyc2l0eSBvZiBDYWxpZm9ybmlh CkBAIC0xNCw5ICsxNCwzNSBAQAogI2RlZmluZSBTTFJVX0gKIAogI2luY2x1ZGUgImFjY2Vzcy94 bG9nZGVmcy5oIgorI2luY2x1ZGUgImNhdGFsb2cvcGdfdGFibGVzcGFjZV9kLmgiCisjaW5jbHVk ZSAic3RvcmFnZS9idWYuaCIKICNpbmNsdWRlICJzdG9yYWdlL2x3bG9jay5oIgorI2luY2x1ZGUg InN0b3JhZ2Uvc21nci5oIgogI2luY2x1ZGUgInN0b3JhZ2Uvc3luYy5oIgogCisvKiBQc2V1ZG8g ZGF0YWJhc2UgSUQgdXNlZCBmb3IgU0xSVSBkYXRhLiAqLworI2RlZmluZSBTTFJVX1NQQ19JRCA5 CisKKy8qIFBzZXVkbyBkYXRhYmFzZSBJRHMgdXNlZCBieSBlYWNoIGNhY2hlLiAqLworI2RlZmlu ZSBQR19TTFJVKHN5bW5hbWUsbmFtZSxwYXRoLCBzeW5jaHJvbml6ZSkgXAorCXN5bW5hbWUsCisK K3R5cGVkZWYgZW51bSBTbHJ1SWRzCit7CisjaW5jbHVkZSAiYWNjZXNzL3NscnVsaXN0LmgiCisJ U0xSVV9ORVhUX0lECit9CQkJU2xydUlkczsKKyN1bmRlZiBQR19TTFJVCisKK3R5cGVkZWYgYm9v bCAoKlNscnVQYWdlUHJlY2VkZXNGdW5jdGlvbikgKGludCwgaW50KTsKKworc3RhdGljIGlubGlu ZSBSZWxGaWxlTG9jYXRvcgorU2xydVJlbEZpbGVMb2NhdG9yKHVpbnQzMiBzbHJ1X2RiX2lkLCB1 aW50MzIgc2VnbWVudF9pZCkKK3sKKwlSZWxGaWxlTG9jYXRvciBybG9jYXRvciA9IHtTTFJVX1NQ Q19JRCwgc2xydV9kYl9pZCwgc2VnbWVudF9pZH07CisJcmV0dXJuIHJsb2NhdG9yOworfQorCiAK IC8qCiAgKiBEZWZpbmUgU0xSVSBzZWdtZW50IHNpemUuICBBIHBhZ2UgaXMgdGhlIHNhbWUgQkxD S1NaIGFzIGlzIHVzZWQgZXZlcnl3aGVyZQpAQCAtMzMsMTQyICs1OSw0MCBAQAogICovCiAjZGVm aW5lIFNMUlVfUEFHRVNfUEVSX1NFR01FTlQJMzIKIAotLyoKLSAqIFBhZ2Ugc3RhdHVzIGNvZGVz LiAgTm90ZSB0aGF0IHRoZXNlIGRvIG5vdCBpbmNsdWRlIHRoZSAiZGlydHkiIGJpdC4KLSAqIHBh Z2VfZGlydHkgY2FuIGJlIHRydWUgb25seSBpbiB0aGUgVkFMSUQgb3IgV1JJVEVfSU5fUFJPR1JF U1Mgc3RhdGVzOwotICogaW4gdGhlIGxhdHRlciBjYXNlIGl0IGltcGxpZXMgdGhhdCB0aGUgcGFn ZSBoYXMgYmVlbiByZS1kaXJ0aWVkIHNpbmNlCi0gKiB0aGUgd3JpdGUgc3RhcnRlZC4KLSAqLwot dHlwZWRlZiBlbnVtCi17Ci0JU0xSVV9QQUdFX0VNUFRZLAkJCS8qIGJ1ZmZlciBpcyBub3QgaW4g dXNlICovCi0JU0xSVV9QQUdFX1JFQURfSU5fUFJPR1JFU1MsIC8qIHBhZ2UgaXMgYmVpbmcgcmVh ZCBpbiAqLwotCVNMUlVfUEFHRV9WQUxJRCwJCQkvKiBwYWdlIGlzIHZhbGlkIGFuZCBub3QgYmVp bmcgd3JpdHRlbiAqLwotCVNMUlVfUEFHRV9XUklURV9JTl9QUk9HUkVTUyAvKiBwYWdlIGlzIGJl aW5nIHdyaXR0ZW4gb3V0ICovCi19IFNscnVQYWdlU3RhdHVzOwotCi0vKgotICogU2hhcmVkLW1l bW9yeSBzdGF0ZQotICovCi10eXBlZGVmIHN0cnVjdCBTbHJ1U2hhcmVkRGF0YQotewotCUxXTG9j awkgICAqQ29udHJvbExvY2s7Ci0KLQkvKiBOdW1iZXIgb2YgYnVmZmVycyBtYW5hZ2VkIGJ5IHRo aXMgU0xSVSBzdHJ1Y3R1cmUgKi8KLQlpbnQJCQludW1fc2xvdHM7Ci0KLQkvKgotCSAqIEFycmF5 cyBob2xkaW5nIGluZm8gZm9yIGVhY2ggYnVmZmVyIHNsb3QuICBQYWdlIG51bWJlciBpcyB1bmRl ZmluZWQKLQkgKiB3aGVuIHN0YXR1cyBpcyBFTVBUWSwgYXMgaXMgcGFnZV9scnVfY291bnQuCi0J ICovCi0JY2hhcgkgICoqcGFnZV9idWZmZXI7Ci0JU2xydVBhZ2VTdGF0dXMgKnBhZ2Vfc3RhdHVz OwotCWJvb2wJICAgKnBhZ2VfZGlydHk7Ci0JaW50CQkgICAqcGFnZV9udW1iZXI7Ci0JaW50CQkg ICAqcGFnZV9scnVfY291bnQ7Ci0JTFdMb2NrUGFkZGVkICpidWZmZXJfbG9ja3M7Ci0KLQkvKgot CSAqIE9wdGlvbmFsIGFycmF5IG9mIFdBTCBmbHVzaCBMU05zIGFzc29jaWF0ZWQgd2l0aCBlbnRy aWVzIGluIHRoZSBTTFJVCi0JICogcGFnZXMuICBJZiBub3QgemVyby9OVUxMLCB3ZSBtdXN0IGZs dXNoIFdBTCBiZWZvcmUgd3JpdGluZyBwYWdlcyAodHJ1ZQotCSAqIGZvciBwZ194YWN0LCBmYWxz ZSBmb3IgbXVsdGl4YWN0LCBwZ19zdWJ0cmFucywgcGdfbm90aWZ5KS4gIGdyb3VwX2xzbltdCi0J ICogaGFzIGxzbl9ncm91cHNfcGVyX3BhZ2UgZW50cmllcyBwZXIgYnVmZmVyIHNsb3QsIGVhY2gg Y29udGFpbmluZyB0aGUKLQkgKiBoaWdoZXN0IExTTiBrbm93biBmb3IgYSBjb250aWd1b3VzIGdy b3VwIG9mIFNMUlUgZW50cmllcyBvbiB0aGF0IHNsb3QncwotCSAqIHBhZ2UuCi0JICovCi0JWExv Z1JlY1B0ciAqZ3JvdXBfbHNuOwotCWludAkJCWxzbl9ncm91cHNfcGVyX3BhZ2U7Ci0KLQkvKi0t LS0tLS0tLS0KLQkgKiBXZSBtYXJrIGEgcGFnZSAibW9zdCByZWNlbnRseSB1c2VkIiBieSBzZXR0 aW5nCi0JICoJCXBhZ2VfbHJ1X2NvdW50W3Nsb3Rub10gPSArK2N1cl9scnVfY291bnQ7Ci0JICog VGhlIG9sZGVzdCBwYWdlIGlzIHRoZXJlZm9yZSB0aGUgb25lIHdpdGggdGhlIGhpZ2hlc3QgdmFs dWUgb2YKLQkgKgkJY3VyX2xydV9jb3VudCAtIHBhZ2VfbHJ1X2NvdW50W3Nsb3Rub10KLQkgKiBU aGUgY291bnRzIHdpbGwgZXZlbnR1YWxseSB3cmFwIGFyb3VuZCwgYnV0IHRoaXMgY2FsY3VsYXRp b24gc3RpbGwKLQkgKiB3b3JrcyBhcyBsb25nIGFzIG5vIHBhZ2UncyBhZ2UgZXhjZWVkcyBJTlRf TUFYIGNvdW50cy4KLQkgKi0tLS0tLS0tLS0KLQkgKi8KLQlpbnQJCQljdXJfbHJ1X2NvdW50Owot Ci0JLyoKLQkgKiBsYXRlc3RfcGFnZV9udW1iZXIgaXMgdGhlIHBhZ2UgbnVtYmVyIG9mIHRoZSBj dXJyZW50IGVuZCBvZiB0aGUgbG9nOwotCSAqIHRoaXMgaXMgbm90IGNyaXRpY2FsIGRhdGEsIHNp bmNlIHdlIHVzZSBpdCBvbmx5IHRvIGF2b2lkIHN3YXBwaW5nIG91dAotCSAqIHRoZSBsYXRlc3Qg cGFnZS4KLQkgKi8KLQlpbnQJCQlsYXRlc3RfcGFnZV9udW1iZXI7Ci0KLQkvKiBTTFJVJ3MgaW5k ZXggZm9yIHN0YXRpc3RpY3MgcHVycG9zZXMgKG1pZ2h0IG5vdCBiZSB1bmlxdWUpICovCi0JaW50 CQkJc2xydV9zdGF0c19pZHg7Ci19IFNscnVTaGFyZWREYXRhOwotCi10eXBlZGVmIFNscnVTaGFy ZWREYXRhICpTbHJ1U2hhcmVkOwotCi0vKgotICogU2xydUN0bERhdGEgaXMgYW4gdW5zaGFyZWQg c3RydWN0dXJlIHRoYXQgcG9pbnRzIHRvIHRoZSBhY3RpdmUgaW5mb3JtYXRpb24KLSAqIGluIHNo YXJlZCBtZW1vcnkuCi0gKi8KLXR5cGVkZWYgc3RydWN0IFNscnVDdGxEYXRhCi17Ci0JU2xydVNo YXJlZAlzaGFyZWQ7Ci0KLQkvKgotCSAqIFdoaWNoIHN5bmMgaGFuZGxlciBmdW5jdGlvbiB0byB1 c2Ugd2hlbiBoYW5kaW5nIHN5bmMgcmVxdWVzdHMgb3ZlciB0bwotCSAqIHRoZSBjaGVja3BvaW50 ZXIuICBTWU5DX0hBTkRMRVJfTk9ORSB0byBkaXNhYmxlIGZzeW5jIChlZyBwZ19ub3RpZnkpLgot CSAqLwotCVN5bmNSZXF1ZXN0SGFuZGxlciBzeW5jX2hhbmRsZXI7Ci0KLQkvKgotCSAqIERlY2lk ZSB3aGV0aGVyIGEgcGFnZSBpcyAib2xkZXIiIGZvciB0cnVuY2F0aW9uIGFuZCBhcyBhIGhpbnQg Zm9yCi0JICogZXZpY3RpbmcgcGFnZXMgaW4gTFJVIG9yZGVyLiAgUmV0dXJuIHRydWUgaWYgZXZl cnkgZW50cnkgb2YgdGhlIGZpcnN0Ci0JICogYXJndW1lbnQgaXMgb2xkZXIgdGhhbiBldmVyeSBl bnRyeSBvZiB0aGUgc2Vjb25kIGFyZ3VtZW50LiAgTm90ZSB0aGF0Ci0JICogIVBhZ2VQcmVjZWRl cyhhLGIpICYmICFQYWdlUHJlY2VkZXMoYixhKSBuZWVkIG5vdCBpbXBseSBhPT1iOyBpdCBhbHNv Ci0JICogYXJpc2VzIHdoZW4gc29tZSBlbnRyaWVzIGFyZSBvbGRlciBhbmQgc29tZSBhcmUgbm90 LiAgRm9yIFNMUlVzIHVzaW5nCi0JICogU2ltcGxlTHJ1VHJ1bmNhdGUoKSwgdGhpcyBtdXN0IHVz ZSBtb2R1bGFyIGFyaXRobWV0aWMuICAoRm9yIG90aGVycywKLQkgKiB0aGUgYmVoYXZpb3Igb2Yg dGhpcyBjYWxsYmFjayBoYXMgbm8gZnVuY3Rpb25hbCBpbXBsaWNhdGlvbnMuKSAgVXNlCi0JICog U2xydVBhZ2VQcmVjZWRlc1VuaXRUZXN0cygpIGluIFNMUlVzIG1lZXRpbmcgaXRzIGNyaXRlcmlh LgotCSAqLwotCWJvb2wJCSgqUGFnZVByZWNlZGVzKSAoaW50LCBpbnQpOwotCi0JLyoKLQkgKiBE aXIgaXMgc2V0IGR1cmluZyBTaW1wbGVMcnVJbml0IGFuZCBkb2VzIG5vdCBjaGFuZ2UgdGhlcmVh ZnRlci4gU2luY2UKLQkgKiBpdCdzIGFsd2F5cyB0aGUgc2FtZSwgaXQgZG9lc24ndCBuZWVkIHRv IGJlIGluIHNoYXJlZCBtZW1vcnkuCi0JICovCi0JY2hhcgkJRGlyWzY0XTsKLX0gU2xydUN0bERh dGE7Ci0KLXR5cGVkZWYgU2xydUN0bERhdGEgKlNscnVDdGw7Ci0KLQotZXh0ZXJuIFNpemUgU2lt cGxlTHJ1U2htZW1TaXplKGludCBuc2xvdHMsIGludCBubHNucyk7Ci1leHRlcm4gdm9pZCBTaW1w bGVMcnVJbml0KFNscnVDdGwgY3RsLCBjb25zdCBjaGFyICpuYW1lLCBpbnQgbnNsb3RzLCBpbnQg bmxzbnMsCi0JCQkJCQkgIExXTG9jayAqY3RsbG9jaywgY29uc3QgY2hhciAqc3ViZGlyLCBpbnQg dHJhbmNoZV9pZCwKLQkJCQkJCSAgU3luY1JlcXVlc3RIYW5kbGVyIHN5bmNfaGFuZGxlcik7Ci1l eHRlcm4gaW50CVNpbXBsZUxydVplcm9QYWdlKFNscnVDdGwgY3RsLCBpbnQgcGFnZW5vKTsKLWV4 dGVybiBpbnQJU2ltcGxlTHJ1UmVhZFBhZ2UoU2xydUN0bCBjdGwsIGludCBwYWdlbm8sIGJvb2wg d3JpdGVfb2ssCi0JCQkJCQkJICBUcmFuc2FjdGlvbklkIHhpZCk7Ci1leHRlcm4gaW50CVNpbXBs ZUxydVJlYWRQYWdlX1JlYWRPbmx5KFNscnVDdGwgY3RsLCBpbnQgcGFnZW5vLAotCQkJCQkJCQkJ ICAgVHJhbnNhY3Rpb25JZCB4aWQpOwotZXh0ZXJuIHZvaWQgU2ltcGxlTHJ1V3JpdGVQYWdlKFNs cnVDdGwgY3RsLCBpbnQgc2xvdG5vKTsKLWV4dGVybiB2b2lkIFNpbXBsZUxydVdyaXRlQWxsKFNs cnVDdGwgY3RsLCBib29sIGFsbG93X3JlZGlydGllZCk7CiAjaWZkZWYgVVNFX0FTU0VSVF9DSEVD S0lORwotZXh0ZXJuIHZvaWQgU2xydVBhZ2VQcmVjZWRlc1VuaXRUZXN0cyhTbHJ1Q3RsIGN0bCwg aW50IHBlcl9wYWdlKTsKK2V4dGVybiB2b2lkIFNscnVQYWdlUHJlY2VkZXNVbml0VGVzdHMoU2xy dVBhZ2VQcmVjZWRlc0Z1bmN0aW9uIFBhZ2VQcmVjZWRlcywKKwkJCQkJCQkJCSAgaW50IHBlcl9w YWdlKTsKICNlbHNlCiAjZGVmaW5lIFNscnVQYWdlUHJlY2VkZXNVbml0VGVzdHMoY3RsLCBwZXJf cGFnZSkgZG8ge30gd2hpbGUgKDApCiAjZW5kaWYKLWV4dGVybiB2b2lkIFNpbXBsZUxydVRydW5j YXRlKFNscnVDdGwgY3RsLCBpbnQgY3V0b2ZmUGFnZSk7Ci1leHRlcm4gYm9vbCBTaW1wbGVMcnVE b2VzUGh5c2ljYWxQYWdlRXhpc3QoU2xydUN0bCBjdGwsIGludCBwYWdlbm8pOworZXh0ZXJuIHZv aWQgU2ltcGxlTHJ1VHJ1bmNhdGUoaW50IHNscnVfaWQsIFNscnVQYWdlUHJlY2VkZXNGdW5jdGlv biBQYWdlUHJlY2VkZXMsCisJCQkJCQkJICBpbnQgY3V0b2ZmUGFnZSk7CitleHRlcm4gYm9vbCBT aW1wbGVMcnVEb2VzUGh5c2ljYWxQYWdlRXhpc3QoaW50IHNscnVfaWQsIGludCBwYWdlbm8pOwog Ci10eXBlZGVmIGJvb2wgKCpTbHJ1U2NhbkNhbGxiYWNrKSAoU2xydUN0bCBjdGwsIGNoYXIgKmZp bGVuYW1lLCBpbnQgc2VncGFnZSwKK3R5cGVkZWYgYm9vbCAoKlNscnVTY2FuQ2FsbGJhY2spIChp bnQgc2xydV9pZCwKKwkJCQkJCQkJICBTbHJ1UGFnZVByZWNlZGVzRnVuY3Rpb24gUGFnZVByZWNl ZGVzLAorCQkJCQkJCQkgIGNoYXIgKmZpbGVuYW1lLCBpbnQgc2VncGFnZSwKIAkJCQkJCQkJICB2 b2lkICpkYXRhKTsKLWV4dGVybiBib29sIFNscnVTY2FuRGlyZWN0b3J5KFNscnVDdGwgY3RsLCBT bHJ1U2NhbkNhbGxiYWNrIGNhbGxiYWNrLCB2b2lkICpkYXRhKTsKLWV4dGVybiB2b2lkIFNscnVE ZWxldGVTZWdtZW50KFNscnVDdGwgY3RsLCBpbnQgc2Vnbm8pOwotCi1leHRlcm4gaW50CVNscnVT eW5jRmlsZVRhZyhTbHJ1Q3RsIGN0bCwgY29uc3QgRmlsZVRhZyAqZnRhZywgY2hhciAqcGF0aCk7 CitleHRlcm4gYm9vbCBTbHJ1U2NhbkRpcmVjdG9yeShpbnQgc2xydV9pZCwgU2xydVBhZ2VQcmVj ZWRlc0Z1bmN0aW9uIFBhZ2VQcmVjZWRlcywKKwkJCQkJCQkgIFNscnVTY2FuQ2FsbGJhY2sgY2Fs bGJhY2ssIHZvaWQgKmRhdGEpOworZXh0ZXJuIHZvaWQgU2xydURlbGV0ZVNlZ21lbnQoaW50IHNs cnVfaWQsIGludCBzZWdubyk7CiAKIC8qIFNscnVTY2FuRGlyZWN0b3J5IHB1YmxpYyBjYWxsYmFj a3MgKi8KLWV4dGVybiBib29sIFNscnVTY2FuRGlyQ2JSZXBvcnRQcmVzZW5jZShTbHJ1Q3RsIGN0 bCwgY2hhciAqZmlsZW5hbWUsCitleHRlcm4gYm9vbCBTbHJ1U2NhbkRpckNiUmVwb3J0UHJlc2Vu Y2UoaW50IHNscnVfaWQsCisJCQkJCQkJCQkJU2xydVBhZ2VQcmVjZWRlc0Z1bmN0aW9uIFBhZ2VQ cmVjZWRlcywKKwkJCQkJCQkJCQljaGFyICpmaWxlbmFtZSwKIAkJCQkJCQkJCQlpbnQgc2VncGFn ZSwgdm9pZCAqZGF0YSk7Ci1leHRlcm4gYm9vbCBTbHJ1U2NhbkRpckNiRGVsZXRlQWxsKFNscnVD dGwgY3RsLCBjaGFyICpmaWxlbmFtZSwgaW50IHNlZ3BhZ2UsCitleHRlcm4gYm9vbCBTbHJ1U2Nh bkRpckNiRGVsZXRlQWxsKGludCBzbHJ1X2lkLCBTbHJ1UGFnZVByZWNlZGVzRnVuY3Rpb24gUGFn ZVByZWNlZGVzLAorCQkJCQkJCQkgICBjaGFyICpmaWxlbmFtZSwgaW50IHNlZ3BhZ2UsCiAJCQkJ CQkJCSAgIHZvaWQgKmRhdGEpOwogCisvKiBCdWZmZXIgYWNjZXNzICovCitleHRlcm4gQnVmZmVy IFJlYWRTbHJ1QnVmZmVyKGludCBzbHJ1X2lkLCBpbnQgcGFnZW5vKTsKK2V4dGVybiBCdWZmZXIg WmVyb1NscnVCdWZmZXIoaW50IHNscnVfaWQsIGludCBwYWdlbm8pOworZXh0ZXJuIGJvb2wgUHJv YmVTbHJ1QnVmZmVyKGludCBzbHJ1X2lkLCBpbnQgcGFnZW5vKTsKKworLyogSW50ZXJmYWNlcyB1 c2UgYnkgc3RhdHMgdmlldyAqLworZXh0ZXJuIE9pZCBTbHJ1UmVsSWRCeU5hbWUoY29uc3QgY2hh ciAqbmFtZSk7CitleHRlcm4gY29uc3QgY2hhciAqU2xydU5hbWUoaW50IHNscnVfaWQpOworCiAj ZW5kaWYJCQkJCQkJLyogU0xSVV9IICovCmRpZmYgLS1naXQgYS9zcmMvaW5jbHVkZS9hY2Nlc3Mv c2xydWxpc3QuaCBiL3NyYy9pbmNsdWRlL2FjY2Vzcy9zbHJ1bGlzdC5oCm5ldyBmaWxlIG1vZGUg MTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwLi5jMTI4OWExMzI2YwotLS0gL2Rldi9udWxsCisrKyBi L3NyYy9pbmNsdWRlL2FjY2Vzcy9zbHJ1bGlzdC5oCkBAIC0wLDAgKzEsMzAgQEAKKy8qLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tCisgKiBzbHJ1bGlzdC5oCisgKgorICogVGhlIFNMUlUgbGlzdCBpcyBrZXB0 IGluIGl0cyBvd24gc291cmNlIGZpbGUgZm9yIHBvc3NpYmxlCisgKiB1c2UgYnkgYXV0b21hdGlj IHRvb2xzLiAgVGhlIGV4YWN0IHJlcHJlc2VudGF0aW9uIG9mIGEgcm1nciBpcyBkZXRlcm1pbmVk CisgKiBieSB0aGUgUEdfU0xSVSBtYWNybywgd2hpY2ggaXMgbm90IGRlZmluZWQgaW4gdGhpcyBm aWxlOyBpdCBjYW4gYmUKKyAqIGRlZmluZWQgYnkgdGhlIGNhbGxlciBmb3Igc3BlY2lhbCBwdXJw b3Nlcy4KKyAqCisgKiBQb3J0aW9ucyBDb3B5cmlnaHQgKGMpIDE5OTYtMjAyMiwgUG9zdGdyZVNR TCBHbG9iYWwgRGV2ZWxvcG1lbnQgR3JvdXAKKyAqIFBvcnRpb25zIENvcHlyaWdodCAoYykgMTk5 NCwgUmVnZW50cyBvZiB0aGUgVW5pdmVyc2l0eSBvZiBDYWxpZm9ybmlhCisgKgorICogc3JjL2lu Y2x1ZGUvYWNjZXNzL3NscnVsaXN0LmgKKyAqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKi8KKworLyog dGhlcmUgaXMgZGVsaWJlcmF0ZWx5IG5vdCBhbiAjaWZuZGVmIFNMUlVMSVNUX0ggaGVyZSAqLwor CisvKgorICogTGlzdCBvZiBTTFJVIGVudHJpZXMuICBOb3RlIHRoYXQgb3JkZXIgb2YgZW50cmll cyBkZWZpbmVzIHRoZQorICogbnVtZXJpY2FsIHZhbHVlcyBvZiBlYWNoIFNMUlUncyBJRCwgd2hp Y2ggaXMgdXNlZCBpbiBpbi1tZW1vcnkgc3RydWN0dXMuCisgKi8KKworLyogc3ltYm9sIG5hbWUs IHRleHR1YWwgbmFtZSwgcGF0aCwgc3luY2hyb25pemUgKi8KK1BHX1NMUlUoU0xSVV9DTE9HX0lE LCAiWGFjdCIsICJwZ194YWN0IiwgdHJ1ZSkKK1BHX1NMUlUoU0xSVV9TVUJUUkFOU19JRCwgIlN1 YnRyYW5zIiwgInBnX3N1YnRyYW5zIiwgZmFsc2UpCitQR19TTFJVKFNMUlVfTVVMVElYQUNUX09G RlNFVF9JRCwgIk11bHRpWGFjdE9mZnNldCIsICJwZ19tdWx0aXhhY3Qvb2Zmc2V0cyIsIHRydWUp CitQR19TTFJVKFNMUlVfTVVMVElYQUNUX01FTUJFUl9JRCwgIk11bHRpWGFjdE1lbWJlciIsICJw Z19tdWx0aXhhY3QvbWVtYmVycyIsIHRydWUpCitQR19TTFJVKFNMUlVfQ09NTUlUX1RTX0lELCAi Q29tbWl0VHMiLCAicGdfY29tbWl0X3RzIiwgdHJ1ZSkKK1BHX1NMUlUoU0xSVV9TRVJJQUxfSUQs ICJTZXJpYWwiLCAicGdfc2VyaWFsIiwgZmFsc2UpCitQR19TTFJVKFNMUlVfTk9USUZZX0lELCAi Tm90aWZ5IiwgInBnX25vdGlmeSIsIGZhbHNlKQpkaWZmIC0tZ2l0IGEvc3JjL2luY2x1ZGUvYWNj ZXNzL3N1YnRyYW5zLmggYi9zcmMvaW5jbHVkZS9hY2Nlc3Mvc3VidHJhbnMuaAppbmRleCBmOTRl MTE2NjQwYi4uNDY4NWEwNWJjOTIgMTAwNjQ0Ci0tLSBhL3NyYy9pbmNsdWRlL2FjY2Vzcy9zdWJ0 cmFucy5oCisrKyBiL3NyYy9pbmNsdWRlL2FjY2Vzcy9zdWJ0cmFucy5oCkBAIC0xOCwxMSArMTgs OCBAQCBleHRlcm4gdm9pZCBTdWJUcmFuc1NldFBhcmVudChUcmFuc2FjdGlvbklkIHhpZCwgVHJh bnNhY3Rpb25JZCBwYXJlbnQpOwogZXh0ZXJuIFRyYW5zYWN0aW9uSWQgU3ViVHJhbnNHZXRQYXJl bnQoVHJhbnNhY3Rpb25JZCB4aWQpOwogZXh0ZXJuIFRyYW5zYWN0aW9uSWQgU3ViVHJhbnNHZXRU b3Btb3N0VHJhbnNhY3Rpb24oVHJhbnNhY3Rpb25JZCB4aWQpOwogCi1leHRlcm4gU2l6ZSBTVUJU UkFOU1NobWVtU2l6ZSh2b2lkKTsKLWV4dGVybiB2b2lkIFNVQlRSQU5TU2htZW1Jbml0KHZvaWQp OwogZXh0ZXJuIHZvaWQgQm9vdFN0cmFwU1VCVFJBTlModm9pZCk7CiBleHRlcm4gdm9pZCBTdGFy dHVwU1VCVFJBTlMoVHJhbnNhY3Rpb25JZCBvbGRlc3RBY3RpdmVYSUQpOwotZXh0ZXJuIHZvaWQg Q2hlY2tQb2ludFNVQlRSQU5TKHZvaWQpOwogZXh0ZXJuIHZvaWQgRXh0ZW5kU1VCVFJBTlMoVHJh bnNhY3Rpb25JZCBuZXdlc3RYYWN0KTsKIGV4dGVybiB2b2lkIFRydW5jYXRlU1VCVFJBTlMoVHJh bnNhY3Rpb25JZCBvbGRlc3RYYWN0KTsKIApkaWZmIC0tZ2l0IGEvc3JjL2luY2x1ZGUvY2F0YWxv Zy9zdG9yYWdlLmggYi9zcmMvaW5jbHVkZS9jYXRhbG9nL3N0b3JhZ2UuaAppbmRleCA5OTY0YzMx MmFhMi4uMDQxMTQzMDU1NDcgMTAwNjQ0Ci0tLSBhL3NyYy9pbmNsdWRlL2NhdGFsb2cvc3RvcmFn ZS5oCisrKyBiL3NyYy9pbmNsdWRlL2NhdGFsb2cvc3RvcmFnZS5oCkBAIC0yMiwxOSArMjIsMjAg QEAKIC8qIEdVQyB2YXJpYWJsZXMgKi8KIGV4dGVybiBQR0RMTElNUE9SVCBpbnQgd2FsX3NraXBf dGhyZXNob2xkOwogCi1leHRlcm4gU01nclJlbGF0aW9uIFJlbGF0aW9uQ3JlYXRlU3RvcmFnZShS ZWxGaWxlTG9jYXRvciBybG9jYXRvciwKLQkJCQkJCQkJCQkgIGNoYXIgcmVscGVyc2lzdGVuY2Us Ci0JCQkJCQkJCQkJICBib29sIHJlZ2lzdGVyX2RlbGV0ZSk7CitleHRlcm4gU01nckZpbGVIYW5k bGUgUmVsYXRpb25DcmVhdGVTdG9yYWdlKFJlbEZpbGVMb2NhdG9yIHJsb2NhdG9yLAorCQkJCQkJ CQkJCQljaGFyIHJlbHBlcnNpc3RlbmNlLAorCQkJCQkJCQkJCQlib29sIHJlZ2lzdGVyX2RlbGV0 ZSk7CiBleHRlcm4gdm9pZCBSZWxhdGlvbkRyb3BTdG9yYWdlKFJlbGF0aW9uIHJlbCk7CiBleHRl cm4gdm9pZCBSZWxhdGlvblByZXNlcnZlU3RvcmFnZShSZWxGaWxlTG9jYXRvciBybG9jYXRvciwg Ym9vbCBhdENvbW1pdCk7CiBleHRlcm4gdm9pZCBSZWxhdGlvblByZVRydW5jYXRlKFJlbGF0aW9u IHJlbCk7CiBleHRlcm4gdm9pZCBSZWxhdGlvblRydW5jYXRlKFJlbGF0aW9uIHJlbCwgQmxvY2tO dW1iZXIgbmJsb2Nrcyk7Ci1leHRlcm4gdm9pZCBSZWxhdGlvbkNvcHlTdG9yYWdlKFNNZ3JSZWxh dGlvbiBzcmMsIFNNZ3JSZWxhdGlvbiBkc3QsCi0JCQkJCQkJCUZvcmtOdW1iZXIgZm9ya051bSwg Y2hhciByZWxwZXJzaXN0ZW5jZSk7CitleHRlcm4gdm9pZCBSZWxhdGlvbkNvcHlTdG9yYWdlKFNN Z3JGaWxlSGFuZGxlIHNyYywgU01nckZpbGVIYW5kbGUgZHN0LAorCQkJCQkJCQljaGFyIHJlbHBl cnNpc3RlbmNlKTsKIGV4dGVybiBib29sIFJlbEZpbGVMb2NhdG9yU2tpcHBpbmdXQUwoUmVsRmls ZUxvY2F0b3IgcmxvY2F0b3IpOwogZXh0ZXJuIFNpemUgRXN0aW1hdGVQZW5kaW5nU3luY3NTcGFj ZSh2b2lkKTsKIGV4dGVybiB2b2lkIFNlcmlhbGl6ZVBlbmRpbmdTeW5jcyhTaXplIG1heFNpemUs IGNoYXIgKnN0YXJ0QWRkcmVzcyk7CiBleHRlcm4gdm9pZCBSZXN0b3JlUGVuZGluZ1N5bmNzKGNo YXIgKnN0YXJ0QWRkcmVzcyk7CitleHRlcm4gdm9pZCBEcm9wUmVsYXRpb25GaWxlcyhSZWxGaWxl TG9jYXRvciAqZGVscmVscywgaW50IG5kZWxyZWxzLCBib29sIGlzUmVkbyk7CiAKIC8qCiAgKiBU aGVzZSBmdW5jdGlvbnMgdXNlZCB0byBiZSBpbiBzdG9yYWdlL3NtZ3Ivc21nci5jLCB3aGljaCBl eHBsYWlucyB0aGUKZGlmZiAtLWdpdCBhL3NyYy9pbmNsdWRlL2NvbW1vbi9yZWxwYXRoLmggYi9z cmMvaW5jbHVkZS9jb21tb24vcmVscGF0aC5oCmluZGV4IDNhYjcxMzI0N2YzLi4xZWQwYzhlZDEy NyAxMDA2NDQKLS0tIGEvc3JjL2luY2x1ZGUvY29tbW9uL3JlbHBhdGguaAorKysgYi9zcmMvaW5j bHVkZS9jb21tb24vcmVscGF0aC5oCkBAIC01Niw2ICs1Niw5IEBAIHR5cGVkZWYgZW51bSBGb3Jr TnVtYmVyCiAKICNkZWZpbmUgRk9SS05BTUVDSEFSUwk0CQkvKiBtYXggY2hhcnMgZm9yIGEgZm9y ayBuYW1lICovCiAKKy8qIFBzZXVkbyB0YWJsZXNwYWNlIElEIHVzZWQgZm9yIFNMUlVzLiAqLwor I2RlZmluZSBTTFJVX1NQQ19PSUQgOQorCiBleHRlcm4gUEdETExJTVBPUlQgY29uc3QgY2hhciAq Y29uc3QgZm9ya05hbWVzW107CiAKIGV4dGVybiBGb3JrTnVtYmVyIGZvcmtuYW1lX3RvX251bWJl cihjb25zdCBjaGFyICpmb3JrTmFtZSk7CkBAIC02NiwyNSArNjksMjUgQEAgZXh0ZXJuIGludAlm b3JrbmFtZV9jaGFycyhjb25zdCBjaGFyICpzdHIsIEZvcmtOdW1iZXIgKmZvcmspOwogICovCiBl eHRlcm4gY2hhciAqR2V0RGF0YWJhc2VQYXRoKE9pZCBkYk9pZCwgT2lkIHNwY09pZCk7CiAKLWV4 dGVybiBjaGFyICpHZXRSZWxhdGlvblBhdGgoT2lkIGRiT2lkLCBPaWQgc3BjT2lkLCBSZWxGaWxl TnVtYmVyIHJlbE51bWJlciwKK2V4dGVybiBjaGFyICpHZXRTTWdyRmlsZVBhdGgoT2lkIGRiT2lk LCBPaWQgc3BjT2lkLCBSZWxGaWxlTnVtYmVyIHJlbE51bWJlciwKIAkJCQkJCQkgaW50IGJhY2tl bmRJZCwgRm9ya051bWJlciBmb3JrTnVtYmVyKTsKIAogLyoKICAqIFdyYXBwZXIgbWFjcm9zIGZv ciBHZXRSZWxhdGlvblBhdGguICBCZXdhcmUgb2YgbXVsdGlwbGUKLSAqIGV2YWx1YXRpb24gb2Yg dGhlIFJlbEZpbGVMb2NhdG9yIG9yIFJlbEZpbGVMb2NhdG9yQmFja2VuZCBhcmd1bWVudCEKKyAq IGV2YWx1YXRpb24gb2YgdGhlIFJlbEZpbGVMb2NhdG9yIG9yIFNNZ3JGaWxlTG9jYXRvciBhcmd1 bWVudCEKICAqLwogCiAvKiBGaXJzdCBhcmd1bWVudCBpcyBhIFJlbEZpbGVMb2NhdG9yICovCiAj ZGVmaW5lIHJlbHBhdGhiYWNrZW5kKHJsb2NhdG9yLCBiYWNrZW5kLCBmb3JrbnVtKSBcCi0JR2V0 UmVsYXRpb25QYXRoKChybG9jYXRvcikuZGJPaWQsIChybG9jYXRvcikuc3BjT2lkLCAocmxvY2F0 b3IpLnJlbE51bWJlciwgXAorCUdldFNNZ3JGaWxlUGF0aCgocmxvY2F0b3IpLmRiT2lkLCAocmxv Y2F0b3IpLnNwY09pZCwgKHJsb2NhdG9yKS5yZWxOdW1iZXIsIFwKIAkJCQkJYmFja2VuZCwgZm9y a251bSkKIAogLyogRmlyc3QgYXJndW1lbnQgaXMgYSBSZWxGaWxlTG9jYXRvciAqLwogI2RlZmlu ZSByZWxwYXRocGVybShybG9jYXRvciwgZm9ya251bSkgXAogCXJlbHBhdGhiYWNrZW5kKHJsb2Nh dG9yLCBJbnZhbGlkQmFja2VuZElkLCBmb3JrbnVtKQogCi0vKiBGaXJzdCBhcmd1bWVudCBpcyBh IFJlbEZpbGVMb2NhdG9yQmFja2VuZCAqLwotI2RlZmluZSByZWxwYXRoKHJsb2NhdG9yLCBmb3Jr bnVtKSBcCi0JcmVscGF0aGJhY2tlbmQoKHJsb2NhdG9yKS5sb2NhdG9yLCAocmxvY2F0b3IpLmJh Y2tlbmQsIGZvcmtudW0pCisvKiBGaXJzdCBhcmd1bWVudCBpcyBhIFNNZ3JGaWxlTG9jYXRvciAq LworI2RlZmluZSBzbWdyZmlsZXBhdGgoc2xvY2F0b3IpIFwKKwlHZXRTTWdyRmlsZVBhdGgoKHNs b2NhdG9yKS5sb2NhdG9yLmRiT2lkLCAoc2xvY2F0b3IpLmxvY2F0b3Iuc3BjT2lkLCAoc2xvY2F0 b3IpLmxvY2F0b3IucmVsTnVtYmVyLCAoc2xvY2F0b3IpLmJhY2tlbmQsIChzbG9jYXRvcikuZm9y a251bSkKIAogI2VuZGlmCQkJCQkJCS8qIFJFTFBBVEhfSCAqLwpkaWZmIC0tZ2l0IGEvc3JjL2lu Y2x1ZGUvc3RvcmFnZS9idWZfaW50ZXJuYWxzLmggYi9zcmMvaW5jbHVkZS9zdG9yYWdlL2J1Zl9p bnRlcm5hbHMuaAppbmRleCA2OWU0NTkwMGJhZS4uYTkzYTc3NzFjYTggMTAwNjQ0Ci0tLSBhL3Ny Yy9pbmNsdWRlL3N0b3JhZ2UvYnVmX2ludGVybmFscy5oCisrKyBiL3NyYy9pbmNsdWRlL3N0b3Jh Z2UvYnVmX2ludGVybmFscy5oCkBAIC0yMzAsNiArMjMwLDExIEBAIHR5cGVkZWYgdW5pb24gQnVm ZmVyRGVzY1BhZGRlZAogI2RlZmluZSBCdWZmZXJEZXNjcmlwdG9yR2V0Q29udGVudExvY2soYmRl c2MpIFwKIAkoKExXTG9jayopICgmKGJkZXNjKS0+Y29udGVudF9sb2NrKSkKIAorI2RlZmluZSBC dWZmZXJHZXRFeHRlcm5hbExTTihidWZIZHIpIFwKKwlCdWZmZXJFeHRlcm5hbExTTnNbKGJ1Zkhk ciktPmJ1Zl9pZF0KKyNkZWZpbmUgQnVmZmVyU2V0RXh0ZXJuYWxMU04oYnVmSGRyLCBsc24pIFwK KwlCdWZmZXJFeHRlcm5hbExTTnNbKGJ1ZkhkciktPmJ1Zl9pZF0gPSAobHNuKQorCiBleHRlcm4g UEdETExJTVBPUlQgQ29uZGl0aW9uVmFyaWFibGVNaW5pbWFsbHlQYWRkZWQgKkJ1ZmZlcklPQ1ZB cnJheTsKIAogLyoKQEAgLTI3Niw2ICsyODEsNyBAQCB0eXBlZGVmIHN0cnVjdCBXcml0ZWJhY2tD b250ZXh0CiAKIC8qIGluIGJ1Zl9pbml0LmMgKi8KIGV4dGVybiBQR0RMTElNUE9SVCBCdWZmZXJE ZXNjUGFkZGVkICpCdWZmZXJEZXNjcmlwdG9yczsKK2V4dGVybiBQR0RMTElNUE9SVCBYTG9nUmVj UHRyICpCdWZmZXJFeHRlcm5hbExTTnM7CiBleHRlcm4gUEdETExJTVBPUlQgV3JpdGViYWNrQ29u dGV4dCBCYWNrZW5kV3JpdGViYWNrQ29udGV4dDsKIAogLyogaW4gbG9jYWxidWYuYyAqLwpAQCAt MzMxLDEwICszMzcsOSBAQCBleHRlcm4gaW50CUJ1ZlRhYmxlSW5zZXJ0KEJ1ZmZlclRhZyAqdGFn UHRyLCB1aW50MzIgaGFzaGNvZGUsIGludCBidWZfaWQpOwogZXh0ZXJuIHZvaWQgQnVmVGFibGVE ZWxldGUoQnVmZmVyVGFnICp0YWdQdHIsIHVpbnQzMiBoYXNoY29kZSk7CiAKIC8qIGxvY2FsYnVm LmMgKi8KLWV4dGVybiBQcmVmZXRjaEJ1ZmZlclJlc3VsdCBQcmVmZXRjaExvY2FsQnVmZmVyKFNN Z3JSZWxhdGlvbiBzbWdyLAotCQkJCQkJCQkJCQkJRm9ya051bWJlciBmb3JrTnVtLAorZXh0ZXJu IFByZWZldGNoQnVmZmVyUmVzdWx0IFByZWZldGNoTG9jYWxCdWZmZXIoU01nckZpbGVIYW5kbGUg c21nciwKIAkJCQkJCQkJCQkJCUJsb2NrTnVtYmVyIGJsb2NrTnVtKTsKLWV4dGVybiBCdWZmZXJE ZXNjICpMb2NhbEJ1ZmZlckFsbG9jKFNNZ3JSZWxhdGlvbiBzbWdyLCBGb3JrTnVtYmVyIGZvcmtO dW0sCitleHRlcm4gQnVmZmVyRGVzYyAqTG9jYWxCdWZmZXJBbGxvYyhTTWdyRmlsZUhhbmRsZSBz bWdyLAogCQkJCQkJCQkJQmxvY2tOdW1iZXIgYmxvY2tOdW0sIGJvb2wgKmZvdW5kUHRyKTsKIGV4 dGVybiB2b2lkIE1hcmtMb2NhbEJ1ZmZlckRpcnR5KEJ1ZmZlciBidWZmZXIpOwogZXh0ZXJuIHZv aWQgRHJvcFJlbGF0aW9uTG9jYWxCdWZmZXJzKFJlbEZpbGVMb2NhdG9yIHJsb2NhdG9yLApkaWZm IC0tZ2l0IGEvc3JjL2luY2x1ZGUvc3RvcmFnZS9idWZtZ3IuaCBiL3NyYy9pbmNsdWRlL3N0b3Jh Z2UvYnVmbWdyLmgKaW5kZXggYmY4Y2NlN2NjZjYuLmU1OTU3YzU5NjVkIDEwMDY0NAotLS0gYS9z cmMvaW5jbHVkZS9zdG9yYWdlL2J1Zm1nci5oCisrKyBiL3NyYy9pbmNsdWRlL3N0b3JhZ2UvYnVm bWdyLmgKQEAgLTU5LDcgKzU5LDcgQEAgdHlwZWRlZiBzdHJ1Y3QgUHJlZmV0Y2hCdWZmZXJSZXN1 bHQKIHN0cnVjdCBXcml0ZWJhY2tDb250ZXh0OwogCiAvKiBmb3J3YXJkIGRlY2xhcmVkLCB0byBh dm9pZCBpbmNsdWRpbmcgc21nci5oIGhlcmUgKi8KLXN0cnVjdCBTTWdyUmVsYXRpb25EYXRhOwor c3RydWN0IFNNZ3JGaWxlRGF0YTsKIAogLyogaW4gZ2xvYmFscy5jIC4uLiB0aGlzIGR1cGxpY2F0 ZXMgbWlzY2FkbWluLmggKi8KIGV4dGVybiBQR0RMTElNUE9SVCBpbnQgTkJ1ZmZlcnM7CkBAIC0x MDEsOCArMTAxLDcgQEAgZXh0ZXJuIFBHRExMSU1QT1JUIGludDMyICpMb2NhbFJlZkNvdW50Owog LyoKICAqIHByb3RvdHlwZXMgZm9yIGZ1bmN0aW9ucyBpbiBidWZtZ3IuYwogICovCi1leHRlcm4g UHJlZmV0Y2hCdWZmZXJSZXN1bHQgUHJlZmV0Y2hTaGFyZWRCdWZmZXIoc3RydWN0IFNNZ3JSZWxh dGlvbkRhdGEgKnNtZ3JfcmVsbiwKLQkJCQkJCQkJCQkJCSBGb3JrTnVtYmVyIGZvcmtOdW0sCitl eHRlcm4gUHJlZmV0Y2hCdWZmZXJSZXN1bHQgUHJlZmV0Y2hTaGFyZWRCdWZmZXIoc3RydWN0IFNN Z3JGaWxlRGF0YSAqc21ncl9maWxlLAogCQkJCQkJCQkJCQkJIEJsb2NrTnVtYmVyIGJsb2NrTnVt KTsKIGV4dGVybiBQcmVmZXRjaEJ1ZmZlclJlc3VsdCBQcmVmZXRjaEJ1ZmZlcihSZWxhdGlvbiBy ZWxuLCBGb3JrTnVtYmVyIGZvcmtOdW0sCiAJCQkJCQkJCQkJICAgQmxvY2tOdW1iZXIgYmxvY2tO dW0pOwpAQCAtMTE2LDEzICsxMTUsMTkgQEAgZXh0ZXJuIEJ1ZmZlciBSZWFkQnVmZmVyV2l0aG91 dFJlbGNhY2hlKFJlbEZpbGVMb2NhdG9yIHJsb2NhdG9yLAogCQkJCQkJCQkJCUZvcmtOdW1iZXIg Zm9ya051bSwgQmxvY2tOdW1iZXIgYmxvY2tOdW0sCiAJCQkJCQkJCQkJUmVhZEJ1ZmZlck1vZGUg bW9kZSwgQnVmZmVyQWNjZXNzU3RyYXRlZ3kgc3RyYXRlZ3ksCiAJCQkJCQkJCQkJYm9vbCBwZXJt YW5lbnQpOworZXh0ZXJuIEJ1ZmZlciBSZWFkQnVmZmVyV2l0aG91dFJlbGNhY2hlV2l0aEhpdChS ZWxGaWxlTG9jYXRvciBybG9jYXRvciwKKwkJCQkJCQkJCQlGb3JrTnVtYmVyIGZvcmtOdW0sIEJs b2NrTnVtYmVyIGJsb2NrTnVtLAorCQkJCQkJCQkJCVJlYWRCdWZmZXJNb2RlIG1vZGUsIEJ1ZmZl ckFjY2Vzc1N0cmF0ZWd5IHN0cmF0ZWd5LAorCQkJCQkJCQkJCQkgICBib29sIHBlcm1hbmVudCwg Ym9vbCAqaGl0KTsKIGV4dGVybiB2b2lkIFJlbGVhc2VCdWZmZXIoQnVmZmVyIGJ1ZmZlcik7CiBl eHRlcm4gdm9pZCBVbmxvY2tSZWxlYXNlQnVmZmVyKEJ1ZmZlciBidWZmZXIpOwogZXh0ZXJuIHZv aWQgTWFya0J1ZmZlckRpcnR5KEJ1ZmZlciBidWZmZXIpOwogZXh0ZXJuIHZvaWQgSW5jckJ1ZmZl clJlZkNvdW50KEJ1ZmZlciBidWZmZXIpOwogZXh0ZXJuIEJ1ZmZlciBSZWxlYXNlQW5kUmVhZEJ1 ZmZlcihCdWZmZXIgYnVmZmVyLCBSZWxhdGlvbiByZWxhdGlvbiwKIAkJCQkJCQkJICAgQmxvY2tO dW1iZXIgYmxvY2tOdW0pOwotCitleHRlcm4gYm9vbCBCdWZmZXJQcm9iZShSZWxGaWxlTG9jYXRv ciBybG9jYXRvciwgRm9ya051bWJlciBmb3JrTnVtLAorCQkJCQkJQmxvY2tOdW1iZXIgYmxvY2tO dW0pOworIAogZXh0ZXJuIHZvaWQgSW5pdEJ1ZmZlclBvb2wodm9pZCk7CiBleHRlcm4gdm9pZCBJ bml0QnVmZmVyUG9vbEFjY2Vzcyh2b2lkKTsKIGV4dGVybiB2b2lkIEF0RU9YYWN0X0J1ZmZlcnMo Ym9vbCBpc0NvbW1pdCk7CkBAIC0xMzEsMTggKzEzNiwyNiBAQCBleHRlcm4gdm9pZCBDaGVja1Bv aW50QnVmZmVycyhpbnQgZmxhZ3MpOwogZXh0ZXJuIEJsb2NrTnVtYmVyIEJ1ZmZlckdldEJsb2Nr TnVtYmVyKEJ1ZmZlciBidWZmZXIpOwogZXh0ZXJuIEJsb2NrTnVtYmVyIFJlbGF0aW9uR2V0TnVt YmVyT2ZCbG9ja3NJbkZvcmsoUmVsYXRpb24gcmVsYXRpb24sCiAJCQkJCQkJCQkJCQkgICBGb3Jr TnVtYmVyIGZvcmtOdW0pOwotZXh0ZXJuIHZvaWQgRmx1c2hPbmVCdWZmZXIoQnVmZmVyIGJ1ZmZl cik7Ci1leHRlcm4gdm9pZCBGbHVzaFJlbGF0aW9uQnVmZmVycyhSZWxhdGlvbiByZWwpOwotZXh0 ZXJuIHZvaWQgRmx1c2hSZWxhdGlvbnNBbGxCdWZmZXJzKHN0cnVjdCBTTWdyUmVsYXRpb25EYXRh ICoqc21ncnMsIGludCBucmVscyk7CiBleHRlcm4gdm9pZCBDcmVhdGVBbmRDb3B5UmVsYXRpb25E YXRhKFJlbEZpbGVMb2NhdG9yIHNyY19ybG9jYXRvciwKIAkJCQkJCQkJCSAgUmVsRmlsZUxvY2F0 b3IgZHN0X3Jsb2NhdG9yLAogCQkJCQkJCQkJICBib29sIHBlcm1hbmVudCk7CisKK2V4dGVybiB2 b2lkIEZsdXNoT25lQnVmZmVyKEJ1ZmZlciBidWZmZXIpOworZXh0ZXJuIHZvaWQgRmx1c2hSZWxh dGlvbkJ1ZmZlcnMoUmVsYXRpb24gcmVsKTsKK2V4dGVybiB2b2lkIEZsdXNoUmVsYXRpb25zQWxs QnVmZmVycyhSZWxGaWxlTG9jYXRvciAqbG9jYXRvcnMsIGludCBubG9jYXRvcnMpOwogZXh0ZXJu IHZvaWQgRmx1c2hEYXRhYmFzZUJ1ZmZlcnMoT2lkIGRiaWQpOwotZXh0ZXJuIHZvaWQgRHJvcFJl bGF0aW9uQnVmZmVycyhzdHJ1Y3QgU01nclJlbGF0aW9uRGF0YSAqc21ncl9yZWxuLAorCitleHRl cm4gdm9pZCBEcm9wUmVsYXRpb25CdWZmZXJzKFJlbEZpbGVMb2NhdG9yIHJsb2NhdG9yLCBCYWNr ZW5kSWQgYmFja2VuZCwKIAkJCQkJCQkJRm9ya051bWJlciAqZm9ya051bSwKIAkJCQkJCQkJaW50 IG5mb3JrcywgQmxvY2tOdW1iZXIgKmZpcnN0RGVsQmxvY2spOwotZXh0ZXJuIHZvaWQgRHJvcFJl bGF0aW9uc0FsbEJ1ZmZlcnMoc3RydWN0IFNNZ3JSZWxhdGlvbkRhdGEgKipzbWdyX3JlbG4sCi0J CQkJCQkJCQlpbnQgbmxvY2F0b3JzKTsKKwordHlwZWRlZiBzdHJ1Y3QgUmVsRmlsZUxvY2F0b3JC YWNrZW5kCit7CisJUmVsRmlsZUxvY2F0b3IgbG9jYXRvcjsKKwlCYWNrZW5kSWQJYmFja2VuZDsK K30gUmVsRmlsZUxvY2F0b3JCYWNrZW5kOworCitleHRlcm4gdm9pZCBEcm9wUmVsYXRpb25zQWxs QnVmZmVycyhSZWxGaWxlTG9jYXRvckJhY2tlbmQgKmxvY2F0b3JzLCBpbnQgbmxvY2F0b3JzKTsK IGV4dGVybiB2b2lkIERyb3BEYXRhYmFzZUJ1ZmZlcnMoT2lkIGRiaWQpOwogCiAjZGVmaW5lIFJl bGF0aW9uR2V0TnVtYmVyT2ZCbG9ja3MocmVsbikgXApkaWZmIC0tZ2l0IGEvc3JjL2luY2x1ZGUv c3RvcmFnZS9idWZwYWdlLmggYi9zcmMvaW5jbHVkZS9zdG9yYWdlL2J1ZnBhZ2UuaAppbmRleCA2 YTk0NzAyMWFjYS4uZTZiMWQ3YmUxNWQgMTAwNjQ0Ci0tLSBhL3NyYy9pbmNsdWRlL3N0b3JhZ2Uv YnVmcGFnZS5oCisrKyBiL3NyYy9pbmNsdWRlL3N0b3JhZ2UvYnVmcGFnZS5oCkBAIC0yMDEsNiAr MjAxLDcgQEAgdHlwZWRlZiBQYWdlSGVhZGVyRGF0YSAqUGFnZUhlYWRlcjsKICAqIGhhbmRsaW5n IHBhZ2VzLgogICovCiAjZGVmaW5lIFBHX1BBR0VfTEFZT1VUX1ZFUlNJT04JCTQKKyNkZWZpbmUg UEdfTUVUQVBBR0VfTEFZT1VUX1ZFUlNJT04gIDEKICNkZWZpbmUgUEdfREFUQV9DSEVDS1NVTV9W RVJTSU9OCTEKIAogLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpAQCAtMzAyLDYgKzMwMywxNyBAQCBQYWdlU2V0UGFnZVNp emVBbmRWZXJzaW9uKFBhZ2UgcGFnZSwgU2l6ZSBzaXplLCB1aW50OCB2ZXJzaW9uKQogCSgoUGFn ZUhlYWRlcikgcGFnZSktPnBkX3BhZ2VzaXplX3ZlcnNpb24gPSBzaXplIHwgdmVyc2lvbjsKIH0K IAorLyoKKyAqIFBhZ2VTZXRIZWFkZXJEYXRhTWluaW1hbCAKKyAqIFNldHMgdGhlIExTTiwgcGFn ZSBzaXplIGFuZCB2ZXJzaW9uLCBhbmQgY2hlY2tzdW0KKyAqLworI2RlZmluZSBQYWdlU2V0SGVh ZGVyRGF0YU5vblJlbChwYWdlLCBwYWdlbm8sIGxzbiwgc2l6ZSwgdmVyc2lvbikgXAorKCBcCisJ UGFnZVNldExTTihwYWdlLCBsc24pLCBcCisJUGFnZVNldENoZWNrc3VtSW5wbGFjZShwYWdlLCBw YWdlbm8pLCBcCisJUGFnZVNldFBhZ2VTaXplQW5kVmVyc2lvbihwYWdlLCBzaXplLCB2ZXJzaW9u KVwKKykKKwogLyogLS0tLS0tLS0tLS0tLS0tLQogICoJCXBhZ2Ugc3BlY2lhbCBkYXRhIGZ1bmN0 aW9ucwogICogLS0tLS0tLS0tLS0tLS0tLQpkaWZmIC0tZ2l0IGEvc3JjL2luY2x1ZGUvc3RvcmFn ZS9tZC5oIGIvc3JjL2luY2x1ZGUvc3RvcmFnZS9tZC5oCmluZGV4IDEwYWExYjAxMDliLi44ZmZj MGY4YjhmNCAxMDA2NDQKLS0tIGEvc3JjL2luY2x1ZGUvc3RvcmFnZS9tZC5oCisrKyBiL3NyYy9p bmNsdWRlL3N0b3JhZ2UvbWQuaApAQCAtMTQsNiArMTQsNyBAQAogI2lmbmRlZiBNRF9ICiAjZGVm aW5lIE1EX0gKIAorI2luY2x1ZGUgImFjY2Vzcy9zbHJ1LmgiCiAjaW5jbHVkZSAic3RvcmFnZS9i bG9jay5oIgogI2luY2x1ZGUgInN0b3JhZ2UvcmVsZmlsZWxvY2F0b3IuaCIKICNpbmNsdWRlICJz dG9yYWdlL3NtZ3IuaCIKQEAgLTIxLDI4ICsyMiwyNiBAQAogCiAvKiBtZCBzdG9yYWdlIG1hbmFn ZXIgZnVuY3Rpb25hbGl0eSAqLwogZXh0ZXJuIHZvaWQgbWRpbml0KHZvaWQpOwotZXh0ZXJuIHZv aWQgbWRvcGVuKFNNZ3JSZWxhdGlvbiByZWxuKTsKLWV4dGVybiB2b2lkIG1kY2xvc2UoU01nclJl bGF0aW9uIHJlbG4sIEZvcmtOdW1iZXIgZm9ya251bSk7Ci1leHRlcm4gdm9pZCBtZGNyZWF0ZShT TWdyUmVsYXRpb24gcmVsbiwgRm9ya051bWJlciBmb3JrbnVtLCBib29sIGlzUmVkbyk7Ci1leHRl cm4gYm9vbCBtZGV4aXN0cyhTTWdyUmVsYXRpb24gcmVsbiwgRm9ya051bWJlciBmb3JrbnVtKTsK LWV4dGVybiB2b2lkIG1kdW5saW5rKFJlbEZpbGVMb2NhdG9yQmFja2VuZCBybG9jYXRvciwgRm9y a051bWJlciBmb3JrbnVtLCBib29sIGlzUmVkbyk7Ci1leHRlcm4gdm9pZCBtZGV4dGVuZChTTWdy UmVsYXRpb24gcmVsbiwgRm9ya051bWJlciBmb3JrbnVtLAorZXh0ZXJuIHZvaWQgbWRvcGVuKFNN Z3JGaWxlSGFuZGxlIHNmaWxlKTsKK2V4dGVybiB2b2lkIG1kY2xvc2UoU01nckZpbGVIYW5kbGUg c2ZpbGUpOworZXh0ZXJuIHZvaWQgbWRjcmVhdGUoU01nckZpbGVIYW5kbGUgc2ZpbGUsIGJvb2wg aXNSZWRvKTsKK2V4dGVybiBib29sIG1kZXhpc3RzKFNNZ3JGaWxlSGFuZGxlIHNmaWxlKTsKK2V4 dGVybiB2b2lkIG1kdW5saW5rKFNNZ3JGaWxlTG9jYXRvciBzbG9jYXRvciwgYm9vbCBpc1JlZG8p OworZXh0ZXJuIHZvaWQgbWRleHRlbmQoU01nckZpbGVIYW5kbGUgc2ZpbGUsCiAJCQkJCSBCbG9j a051bWJlciBibG9ja251bSwgY2hhciAqYnVmZmVyLCBib29sIHNraXBGc3luYyk7Ci1leHRlcm4g Ym9vbCBtZHByZWZldGNoKFNNZ3JSZWxhdGlvbiByZWxuLCBGb3JrTnVtYmVyIGZvcmtudW0sCitl eHRlcm4gYm9vbCBtZHByZWZldGNoKFNNZ3JGaWxlSGFuZGxlIHNmaWxlLAogCQkJCQkgICBCbG9j a051bWJlciBibG9ja251bSk7Ci1leHRlcm4gdm9pZCBtZHJlYWQoU01nclJlbGF0aW9uIHJlbG4s IEZvcmtOdW1iZXIgZm9ya251bSwgQmxvY2tOdW1iZXIgYmxvY2tudW0sCitleHRlcm4gdm9pZCBt ZHJlYWQoU01nckZpbGVIYW5kbGUgc2ZpbGUsIEJsb2NrTnVtYmVyIGJsb2NrbnVtLAogCQkJCSAg IGNoYXIgKmJ1ZmZlcik7Ci1leHRlcm4gdm9pZCBtZHdyaXRlKFNNZ3JSZWxhdGlvbiByZWxuLCBG b3JrTnVtYmVyIGZvcmtudW0sCitleHRlcm4gdm9pZCBtZHdyaXRlKFNNZ3JGaWxlSGFuZGxlIHNm aWxlLAogCQkJCQlCbG9ja051bWJlciBibG9ja251bSwgY2hhciAqYnVmZmVyLCBib29sIHNraXBG c3luYyk7Ci1leHRlcm4gdm9pZCBtZHdyaXRlYmFjayhTTWdyUmVsYXRpb24gcmVsbiwgRm9ya051 bWJlciBmb3JrbnVtLAorZXh0ZXJuIHZvaWQgbWR3cml0ZWJhY2soU01nckZpbGVIYW5kbGUgc2Zp bGUsCiAJCQkJCQlCbG9ja051bWJlciBibG9ja251bSwgQmxvY2tOdW1iZXIgbmJsb2Nrcyk7Ci1l eHRlcm4gQmxvY2tOdW1iZXIgbWRuYmxvY2tzKFNNZ3JSZWxhdGlvbiByZWxuLCBGb3JrTnVtYmVy IGZvcmtudW0pOwotZXh0ZXJuIHZvaWQgbWR0cnVuY2F0ZShTTWdyUmVsYXRpb24gcmVsbiwgRm9y a051bWJlciBmb3JrbnVtLAotCQkJCQkgICBCbG9ja051bWJlciBuYmxvY2tzKTsKLWV4dGVybiB2 b2lkIG1kaW1tZWRzeW5jKFNNZ3JSZWxhdGlvbiByZWxuLCBGb3JrTnVtYmVyIGZvcmtudW0pOwor ZXh0ZXJuIEJsb2NrTnVtYmVyIG1kbmJsb2NrcyhTTWdyRmlsZUhhbmRsZSBzZmlsZSk7CitleHRl cm4gdm9pZCBtZHRydW5jYXRlKFNNZ3JGaWxlSGFuZGxlIHNmaWxlLCBCbG9ja051bWJlciBuYmxv Y2tzKTsKK2V4dGVybiB2b2lkIG1kaW1tZWRzeW5jKFNNZ3JGaWxlSGFuZGxlIHNmaWxlKTsKIAog ZXh0ZXJuIHZvaWQgRm9yZ2V0RGF0YWJhc2VTeW5jUmVxdWVzdHMoT2lkIGRiaWQpOwotZXh0ZXJu IHZvaWQgRHJvcFJlbGF0aW9uRmlsZXMoUmVsRmlsZUxvY2F0b3IgKmRlbHJlbHMsIGludCBuZGVs cmVscywgYm9vbCBpc1JlZG8pOwogCiAvKiBtZCBzeW5jIGNhbGxiYWNrcyAqLwogZXh0ZXJuIGlu dAltZHN5bmNmaWxldGFnKGNvbnN0IEZpbGVUYWcgKmZ0YWcsIGNoYXIgKnBhdGgpOwpkaWZmIC0t Z2l0IGEvc3JjL2luY2x1ZGUvc3RvcmFnZS9yZWxmaWxlbG9jYXRvci5oIGIvc3JjL2luY2x1ZGUv c3RvcmFnZS9yZWxmaWxlbG9jYXRvci5oCmluZGV4IDEwZjQxZjNhYmIzLi4yOTZjYjFiOGU1MSAx MDA2NDQKLS0tIGEvc3JjL2luY2x1ZGUvc3RvcmFnZS9yZWxmaWxlbG9jYXRvci5oCisrKyBiL3Ny Yy9pbmNsdWRlL3N0b3JhZ2UvcmVsZmlsZWxvY2F0b3IuaApAQCAtNTMsNiArNTMsOCBAQAogICog Tm90ZTogdmFyaW91cyBwbGFjZXMgdXNlIFJlbEZpbGVMb2NhdG9yIGluIGhhc2h0YWJsZSBrZXlz LiAgVGhlcmVmb3JlLAogICogdGhlcmUgKm11c3Qgbm90KiBiZSBhbnkgdW51c2VkIHBhZGRpbmcg Ynl0ZXMgaW4gdGhpcyBzdHJ1Y3QuICBUaGF0CiAgKiBzaG91bGQgYmUgc2FmZSBhcyBsb25nIGFz IGFsbCB0aGUgZmllbGRzIGFyZSBvZiB0eXBlIE9pZC4KKyAqCisgKiBTZWUgYWxzbyBTTWdyRmls ZUxvY2F0b3IgaW4gc21nci5oLgogICovCiB0eXBlZGVmIHN0cnVjdCBSZWxGaWxlTG9jYXRvcgog ewpAQCAtNjIsMzggKzY0LDE1IEBAIHR5cGVkZWYgc3RydWN0IFJlbEZpbGVMb2NhdG9yCiB9IFJl bEZpbGVMb2NhdG9yOwogCiAvKgotICogQXVnbWVudGluZyBhIHJlbGZpbGVsb2NhdG9yIHdpdGgg dGhlIGJhY2tlbmQgSUQgcHJvdmlkZXMgYWxsIHRoZSBpbmZvcm1hdGlvbgotICogd2UgbmVlZCB0 byBsb2NhdGUgdGhlIHBoeXNpY2FsIHN0b3JhZ2UuICBUaGUgYmFja2VuZCBJRCBpcyBJbnZhbGlk QmFja2VuZElkCi0gKiBmb3IgcmVndWxhciByZWxhdGlvbnMgKHRob3NlIGFjY2Vzc2libGUgdG8g bW9yZSB0aGFuIG9uZSBiYWNrZW5kKSwgb3IgdGhlCi0gKiBvd25pbmcgYmFja2VuZCdzIElEIGZv ciBiYWNrZW5kLWxvY2FsIHJlbGF0aW9ucy4gIEJhY2tlbmQtbG9jYWwgcmVsYXRpb25zCi0gKiBh cmUgYWx3YXlzIHRyYW5zaWVudCBhbmQgcmVtb3ZlZCBpbiBjYXNlIG9mIGEgZGF0YWJhc2UgY3Jh c2g7IHRoZXkgYXJlCi0gKiBuZXZlciBXQUwtbG9nZ2VkIG9yIGZzeW5jJ2QuCi0gKi8KLXR5cGVk ZWYgc3RydWN0IFJlbEZpbGVMb2NhdG9yQmFja2VuZAotewotCVJlbEZpbGVMb2NhdG9yIGxvY2F0 b3I7Ci0JQmFja2VuZElkCWJhY2tlbmQ7Ci19IFJlbEZpbGVMb2NhdG9yQmFja2VuZDsKLQotI2Rl ZmluZSBSZWxGaWxlTG9jYXRvckJhY2tlbmRJc1RlbXAocmxvY2F0b3IpIFwKLQkoKHJsb2NhdG9y KS5iYWNrZW5kICE9IEludmFsaWRCYWNrZW5kSWQpCi0KLS8qCi0gKiBOb3RlOiBSZWxGaWxlTG9j YXRvckVxdWFscyBhbmQgUmVsRmlsZUxvY2F0b3JCYWNrZW5kRXF1YWxzIGNvbXBhcmUgcmVsTnVt YmVyCisgKiBOb3RlOiBSZWxGaWxlTG9jYXRvckVxdWFscyBjb21wYXJlcyByZWxOdW1iZXIKICAq IGZpcnN0IHNpbmNlIHRoYXQgaXMgbW9zdCBsaWtlbHkgdG8gYmUgZGlmZmVyZW50IGluIHR3byB1 bmVxdWFsCiAgKiBSZWxGaWxlTG9jYXRvcnMuICBJdCBpcyBwcm9iYWJseSByZWR1bmRhbnQgdG8g Y29tcGFyZSBzcGNPaWQgaWYgdGhlIG90aGVyCiAgKiBmaWVsZHMgYXJlIGZvdW5kIGVxdWFsLCBi dXQgZG8gaXQgYW55d2F5IHRvIGJlIHN1cmUuICBMaWtld2lzZSBmb3IgY2hlY2tpbmcKLSAqIHRo ZSBiYWNrZW5kIElEIGluIFJlbEZpbGVMb2NhdG9yQmFja2VuZEVxdWFscy4KKyAqIHRoZSBiYWNr ZW5kIElEIGluIFNNZ3JGaWxlTG9jYXRvckJhY2tlbmRFcXVhbHMuCiAgKi8KICNkZWZpbmUgUmVs RmlsZUxvY2F0b3JFcXVhbHMobG9jYXRvcjEsIGxvY2F0b3IyKSBcCiAJKChsb2NhdG9yMSkucmVs TnVtYmVyID09IChsb2NhdG9yMikucmVsTnVtYmVyICYmIFwKIAkgKGxvY2F0b3IxKS5kYk9pZCA9 PSAobG9jYXRvcjIpLmRiT2lkICYmIFwKIAkgKGxvY2F0b3IxKS5zcGNPaWQgPT0gKGxvY2F0b3Iy KS5zcGNPaWQpCiAKLSNkZWZpbmUgUmVsRmlsZUxvY2F0b3JCYWNrZW5kRXF1YWxzKGxvY2F0b3Ix LCBsb2NhdG9yMikgXAotCSgobG9jYXRvcjEpLmxvY2F0b3IucmVsTnVtYmVyID09IChsb2NhdG9y MikubG9jYXRvci5yZWxOdW1iZXIgJiYgXAotCSAobG9jYXRvcjEpLmxvY2F0b3IuZGJPaWQgPT0g KGxvY2F0b3IyKS5sb2NhdG9yLmRiT2lkICYmIFwKLQkgKGxvY2F0b3IxKS5iYWNrZW5kID09IChs b2NhdG9yMikuYmFja2VuZCAmJiBcCi0JIChsb2NhdG9yMSkubG9jYXRvci5zcGNPaWQgPT0gKGxv Y2F0b3IyKS5sb2NhdG9yLnNwY09pZCkKLQogI2VuZGlmCQkJCQkJCS8qIFJFTEZJTEVMT0NBVE9S X0ggKi8KZGlmZiAtLWdpdCBhL3NyYy9pbmNsdWRlL3N0b3JhZ2Uvc21nci5oIGIvc3JjL2luY2x1 ZGUvc3RvcmFnZS9zbWdyLmgKaW5kZXggYTA3NzE1MzU2YmEuLjBlZDU2OWIyODM2IDEwMDY0NAot LS0gYS9zcmMvaW5jbHVkZS9zdG9yYWdlL3NtZ3IuaAorKysgYi9zcmMvaW5jbHVkZS9zdG9yYWdl L3NtZ3IuaApAQCAtMTgsMzEgKzE4LDU2IEBACiAjaW5jbHVkZSAic3RvcmFnZS9ibG9jay5oIgog I2luY2x1ZGUgInN0b3JhZ2UvcmVsZmlsZWxvY2F0b3IuaCIKIAorCiAvKgotICogc21nci5jIG1h aW50YWlucyBhIHRhYmxlIG9mIFNNZ3JSZWxhdGlvbiBvYmplY3RzLCB3aGljaCBhcmUgZXNzZW50 aWFsbHkKLSAqIGNhY2hlZCBmaWxlIGhhbmRsZXMuICBBbiBTTWdyUmVsYXRpb24gaXMgY3JlYXRl ZCAoaWYgbm90IGFscmVhZHkgcHJlc2VudCkKKyAqIFNNZ3JGaWxlTG9jYXRvciBjb250YWlucyBh bGwgdGhlIGluZm9ybWF0aW9uIG5lZWRlZCB0byBsb2NhdGUgdGhlIHBoeXNpY2FsCisgKiBzdG9y YWdlIG9mIGEgcmVsYXRpb24gZm9yaywgb3Igc29tZSBvdGhlciBmaWxlIHRoYXQgaXMgbWFuYWdl ZCBieSB0aGUgYnVmZmVyCisgKiBtYW5hZ2VyLgorICoKKyAqIFRoZSBiYWNrZW5kIElEIGlzIElu dmFsaWRCYWNrZW5kSWQgZm9yIHJlZ3VsYXIgcmVsYXRpb25zICh0aG9zZSBhY2Nlc3NpYmxlCisg KiB0byBtb3JlIHRoYW4gb25lIGJhY2tlbmQpLCBvciB0aGUgb3duaW5nIGJhY2tlbmQncyBJRCBm b3IgYmFja2VuZC1sb2NhbAorICogcmVsYXRpb25zLiBCYWNrZW5kLWxvY2FsIHJlbGF0aW9ucyBh cmUgYWx3YXlzIHRyYW5zaWVudCBhbmQgcmVtb3ZlZCBpbgorICogY2FzZSBvZiBhIGRhdGFiYXNl IGNyYXNoOyB0aGV5IGFyZSBuZXZlciBXQUwtbG9nZ2VkIG9yIGZzeW5jJ2QuCisgKi8KK3R5cGVk ZWYgc3RydWN0IFNNZ3JGaWxlTG9jYXRvcgoreworCVJlbEZpbGVMb2NhdG9yIGxvY2F0b3I7CisJ QmFja2VuZElkCWJhY2tlbmQ7CisJRm9ya051bWJlcglmb3JrbnVtOworfSBTTWdyRmlsZUxvY2F0 b3I7CisKKyNkZWZpbmUgU01nckZpbGVMb2NhdG9ySXNUZW1wKHNsb2NhdG9yKSBcCisJKChzbG9j YXRvcikuYmFja2VuZCAhPSBJbnZhbGlkQmFja2VuZElkKQorCisvKgorICogc21nci5jIG1haW50 YWlucyBhIHRhYmxlIG9mIFNNZ3JGaWxlRGF0YSBvYmplY3RzLCB3aGljaCBhcmUgZXNzZW50aWFs bHkKKyAqIGNhY2hlZCBmaWxlIGhhbmRsZXMuICBBbiBTTWdyRmlsZSBpcyBjcmVhdGVkIChpZiBu b3QgYWxyZWFkeSBwcmVzZW50KQogICogYnkgc21ncm9wZW4oKSwgYW5kIGRlc3Ryb3llZCBieSBz bWdyY2xvc2UoKS4gIE5vdGUgdGhhdCBuZWl0aGVyIG9mIHRoZXNlCiAgKiBvcGVyYXRpb25zIGlt cGx5IEkvTywgdGhleSBqdXN0IGNyZWF0ZSBvciBkZXN0cm95IGEgaGFzaHRhYmxlIGVudHJ5Lgog ICogKEJ1dCBzbWdyY2xvc2UoKSBtYXkgcmVsZWFzZSBhc3NvY2lhdGVkIHJlc291cmNlcywgc3Vj aCBhcyBPUy1sZXZlbCBmaWxlCiAgKiBkZXNjcmlwdG9ycy4pCiAgKgotICogQW4gU01nclJlbGF0 aW9uIG1heSBoYXZlIGFuICJvd25lciIsIHdoaWNoIGlzIGp1c3QgYSBwb2ludGVyIHRvIGl0IGZy b20KLSAqIHNvbWV3aGVyZSBlbHNlOyBzbWdyLmMgd2lsbCBjbGVhciB0aGlzIHBvaW50ZXIgaWYg dGhlIFNNZ3JSZWxhdGlvbiBpcworICogQW4gU01nckZpbGUgbWF5IGhhdmUgYW4gIm93bmVyIiwg d2hpY2ggaXMganVzdCBhIHBvaW50ZXIgdG8gaXQgZnJvbQorICogc29tZXdoZXJlIGVsc2U7IHNt Z3IuYyB3aWxsIGNsZWFyIHRoaXMgcG9pbnRlciBpZiB0aGUgU01nckZpbGUgaXMKICAqIGNsb3Nl ZC4gIFdlIHVzZSB0aGlzIHRvIGF2b2lkIGRhbmdsaW5nIHBvaW50ZXJzIGZyb20gcmVsY2FjaGUg dG8gc21ncgogICogd2l0aG91dCBoYXZpbmcgdG8gbWFrZSB0aGUgc21nciBleHBsaWNpdGx5IGF3 YXJlIG9mIHJlbGNhY2hlLiAgVGhlcmUKICAqIGNhbid0IGJlIG1vcmUgdGhhbiBvbmUgIm93bmVy IiBwb2ludGVyIHBlciBTTWdyUmVsYXRpb24sIGJ1dCB0aGF0J3MKICAqIGFsbCB3ZSBuZWVkLgog ICoKLSAqIFNNZ3JSZWxhdGlvbnMgdGhhdCBkbyBub3QgaGF2ZSBhbiAib3duZXIiIGFyZSBjb25z aWRlcmVkIHRvIGJlIHRyYW5zaWVudCwKKyAqIFNNZ3JGaWxlcyB0aGF0IGRvIG5vdCBoYXZlIGFu ICJvd25lciIgYXJlIGNvbnNpZGVyZWQgdG8gYmUgdHJhbnNpZW50LAogICogYW5kIGFyZSBkZWxl dGVkIGF0IGVuZCBvZiB0cmFuc2FjdGlvbi4KKyAqCisgKiBBIGZpbGUgdGhhdCBpcyByZXByZXNl bnRlZCBieSBhbiBTTWdyRmlsZSBjYW4gYmUgbWFuYWdlZCBieSB0aGUgYnVmZmVyCisgKiBtYW5h Z2VyLiBDdXJyZW50bHksIGl0J3Mgb25seSB1c2VkIGZvciByZWxhdGlvbiBmaWxlcywgYnV0IGNv dWxkIGJlIHVzZWQKKyAqIGZvciBTTFJVcyBhbmQgb3RoZXIgdGhpbmdzIGluIHRoZSBmdXR1cmUu CiAgKi8KLXR5cGVkZWYgc3RydWN0IFNNZ3JSZWxhdGlvbkRhdGEKK3R5cGVkZWYgc3RydWN0IFNN Z3JGaWxlRGF0YQogewotCS8qIHJsb2NhdG9yIGlzIHRoZSBoYXNodGFibGUgbG9va3VwIGtleSwg c28gaXQgbXVzdCBiZSBmaXJzdCEgKi8KLQlSZWxGaWxlTG9jYXRvckJhY2tlbmQgc21ncl9ybG9j YXRvcjsJLyogcmVsYXRpb24gcGh5c2ljYWwgaWRlbnRpZmllciAqLworCS8qIGxvY2F0b3IgaXMg dGhlIGhhc2h0YWJsZSBsb29rdXAga2V5LCBzbyBtdXN0IGJlIGZpcnN0ISAqLworCVNNZ3JGaWxl TG9jYXRvciBzbWdyX2xvY2F0b3I7CS8qIGZpbGUgcGh5c2ljYWwgaWRlbnRpZmllciAqLwogCiAJ LyogcG9pbnRlciB0byBvd25pbmcgcG9pbnRlciwgb3IgTlVMTCBpZiBub25lICovCi0Jc3RydWN0 IFNNZ3JSZWxhdGlvbkRhdGEgKipzbWdyX293bmVyOworCXN0cnVjdCBTTWdyRmlsZURhdGEgKipz bWdyX293bmVyOwogCiAJLyoKIAkgKiBUaGUgZm9sbG93aW5nIGZpZWxkcyBhcmUgcmVzZXQgdG8g SW52YWxpZEJsb2NrTnVtYmVyIHVwb24gYSBjYWNoZSBmbHVzaApAQCAtNTEsNyArNzYsNyBAQCB0 eXBlZGVmIHN0cnVjdCBTTWdyUmVsYXRpb25EYXRhCiAJICogaW52YWxpZGF0aW9uIGZvciBmb3Jr IGV4dGVuc2lvbi4KIAkgKi8KIAlCbG9ja051bWJlciBzbWdyX3RhcmdibG9jazsgLyogY3VycmVu dCBpbnNlcnRpb24gdGFyZ2V0IGJsb2NrICovCi0JQmxvY2tOdW1iZXIgc21ncl9jYWNoZWRfbmJs b2Nrc1tNQVhfRk9SS05VTSArIDFdOwkvKiBsYXN0IGtub3duIHNpemUgKi8KKwlCbG9ja051bWJl ciBzbWdyX2NhY2hlZF9uYmxvY2tzOwkvKiBsYXN0IGtub3duIHNpemUgKi8KIAogCS8qIGFkZGl0 aW9uYWwgcHVibGljIGZpZWxkcyBtYXkgc29tZWRheSBleGlzdCBoZXJlICovCiAKQEAgLTY1LDQ2 ICs5MCw0NiBAQCB0eXBlZGVmIHN0cnVjdCBTTWdyUmVsYXRpb25EYXRhCiAJICogZm9yIG1kLmM7 IHBlci1mb3JrIGFycmF5cyBvZiB0aGUgbnVtYmVyIG9mIG9wZW4gc2VnbWVudHMKIAkgKiAobWRf bnVtX29wZW5fc2VncykgYW5kIHRoZSBzZWdtZW50cyB0aGVtc2VsdmVzIChtZF9zZWdfZmRzKS4K IAkgKi8KLQlpbnQJCQltZF9udW1fb3Blbl9zZWdzW01BWF9GT1JLTlVNICsgMV07Ci0Jc3RydWN0 IF9NZGZkVmVjICptZF9zZWdfZmRzW01BWF9GT1JLTlVNICsgMV07CisJaW50CQkJbWRfbnVtX29w ZW5fc2VnczsKKwlzdHJ1Y3QgX01kZmRWZWMgKm1kX3NlZ19mZHM7CiAKLQkvKiBpZiB1bm93bmVk LCBsaXN0IGxpbmsgaW4gbGlzdCBvZiBhbGwgdW5vd25lZCBTTWdyUmVsYXRpb25zICovCisJLyog aWYgdW5vd25lZCwgbGlzdCBsaW5rIGluIGxpc3Qgb2YgYWxsIHVub3duZWQgU01nckZpbGVzICov CiAJZGxpc3Rfbm9kZQlub2RlOwotfSBTTWdyUmVsYXRpb25EYXRhOworfSBTTWdyRmlsZURhdGE7 CiAKLXR5cGVkZWYgU01nclJlbGF0aW9uRGF0YSAqU01nclJlbGF0aW9uOwordHlwZWRlZiBTTWdy RmlsZURhdGEgKlNNZ3JGaWxlSGFuZGxlOwogCiAjZGVmaW5lIFNtZ3JJc1RlbXAoc21ncikgXAot CVJlbEZpbGVMb2NhdG9yQmFja2VuZElzVGVtcCgoc21nciktPnNtZ3JfcmxvY2F0b3IpCisJU01n ckZpbGVMb2NhdG9ySXNUZW1wKChzbWdyKS0+c21ncl9sb2NhdG9yKQogCiBleHRlcm4gdm9pZCBz bWdyaW5pdCh2b2lkKTsKLWV4dGVybiBTTWdyUmVsYXRpb24gc21ncm9wZW4oUmVsRmlsZUxvY2F0 b3IgcmxvY2F0b3IsIEJhY2tlbmRJZCBiYWNrZW5kKTsKLWV4dGVybiBib29sIHNtZ3JleGlzdHMo U01nclJlbGF0aW9uIHJlbG4sIEZvcmtOdW1iZXIgZm9ya251bSk7Ci1leHRlcm4gdm9pZCBzbWdy c2V0b3duZXIoU01nclJlbGF0aW9uICpvd25lciwgU01nclJlbGF0aW9uIHJlbG4pOwotZXh0ZXJu IHZvaWQgc21ncmNsZWFyb3duZXIoU01nclJlbGF0aW9uICpvd25lciwgU01nclJlbGF0aW9uIHJl bG4pOwotZXh0ZXJuIHZvaWQgc21ncmNsb3NlKFNNZ3JSZWxhdGlvbiByZWxuKTsKK2V4dGVybiBT TWdyRmlsZUhhbmRsZSBzbWdyb3BlbihSZWxGaWxlTG9jYXRvciBybG9jYXRvciwgQmFja2VuZElk IGJhY2tlbmQsIEZvcmtOdW1iZXIgZm9ya051bSk7CitleHRlcm4gYm9vbCBzbWdyZXhpc3RzKFNN Z3JGaWxlSGFuZGxlIHNmaWxlKTsKK2V4dGVybiB2b2lkIHNtZ3JzZXRvd25lcihTTWdyRmlsZUhh bmRsZSAqb3duZXIsIFNNZ3JGaWxlSGFuZGxlIHNmaWxlKTsKK2V4dGVybiB2b2lkIHNtZ3JjbGVh cm93bmVyKFNNZ3JGaWxlSGFuZGxlICpvd25lciwgU01nckZpbGVIYW5kbGUgc2ZpbGUpOworZXh0 ZXJuIHZvaWQgc21ncmNsb3NlKFNNZ3JGaWxlSGFuZGxlIHNmaWxlKTsKIGV4dGVybiB2b2lkIHNt Z3JjbG9zZWFsbCh2b2lkKTsKLWV4dGVybiB2b2lkIHNtZ3JjbG9zZXJlbGxvY2F0b3IoUmVsRmls ZUxvY2F0b3JCYWNrZW5kIHJsb2NhdG9yKTsKLWV4dGVybiB2b2lkIHNtZ3JyZWxlYXNlKFNNZ3JS ZWxhdGlvbiByZWxuKTsKIGV4dGVybiB2b2lkIHNtZ3JyZWxlYXNlYWxsKHZvaWQpOwotZXh0ZXJu IHZvaWQgc21ncmNyZWF0ZShTTWdyUmVsYXRpb24gcmVsbiwgRm9ya051bWJlciBmb3JrbnVtLCBi b29sIGlzUmVkbyk7Ci1leHRlcm4gdm9pZCBzbWdyZG9zeW5jYWxsKFNNZ3JSZWxhdGlvbiAqcmVs cywgaW50IG5yZWxzKTsKLWV4dGVybiB2b2lkIHNtZ3Jkb3VubGlua2FsbChTTWdyUmVsYXRpb24g KnJlbHMsIGludCBucmVscywgYm9vbCBpc1JlZG8pOwotZXh0ZXJuIHZvaWQgc21ncmV4dGVuZChT TWdyUmVsYXRpb24gcmVsbiwgRm9ya051bWJlciBmb3JrbnVtLAorZXh0ZXJuIHZvaWQgc21ncmNy ZWF0ZShTTWdyRmlsZUhhbmRsZSBzZmlsZSwgYm9vbCBpc1JlZG8pOworZXh0ZXJuIHZvaWQgc21n cmV4dGVuZChTTWdyRmlsZUhhbmRsZSBzZmlsZSwKIAkJCQkJICAgQmxvY2tOdW1iZXIgYmxvY2tu dW0sIGNoYXIgKmJ1ZmZlciwgYm9vbCBza2lwRnN5bmMpOwotZXh0ZXJuIGJvb2wgc21ncnByZWZl dGNoKFNNZ3JSZWxhdGlvbiByZWxuLCBGb3JrTnVtYmVyIGZvcmtudW0sCi0JCQkJCQkgQmxvY2tO dW1iZXIgYmxvY2tudW0pOwotZXh0ZXJuIHZvaWQgc21ncnJlYWQoU01nclJlbGF0aW9uIHJlbG4s IEZvcmtOdW1iZXIgZm9ya251bSwKK2V4dGVybiBib29sIHNtZ3JwcmVmZXRjaChTTWdyRmlsZUhh bmRsZSBzZmlsZSwgQmxvY2tOdW1iZXIgYmxvY2tudW0pOworZXh0ZXJuIHZvaWQgc21ncnJlYWQo U01nckZpbGVIYW5kbGUgc2ZpbGUsCiAJCQkJCSBCbG9ja051bWJlciBibG9ja251bSwgY2hhciAq YnVmZmVyKTsKLWV4dGVybiB2b2lkIHNtZ3J3cml0ZShTTWdyUmVsYXRpb24gcmVsbiwgRm9ya051 bWJlciBmb3JrbnVtLAorZXh0ZXJuIHZvaWQgc21ncndyaXRlKFNNZ3JGaWxlSGFuZGxlIHNmaWxl LAogCQkJCQkgIEJsb2NrTnVtYmVyIGJsb2NrbnVtLCBjaGFyICpidWZmZXIsIGJvb2wgc2tpcEZz eW5jKTsKLWV4dGVybiB2b2lkIHNtZ3J3cml0ZWJhY2soU01nclJlbGF0aW9uIHJlbG4sIEZvcmtO dW1iZXIgZm9ya251bSwKK2V4dGVybiB2b2lkIHNtZ3J3cml0ZWJhY2soU01nckZpbGVIYW5kbGUg c2ZpbGUsCiAJCQkJCQkgIEJsb2NrTnVtYmVyIGJsb2NrbnVtLCBCbG9ja051bWJlciBuYmxvY2tz KTsKLWV4dGVybiBCbG9ja051bWJlciBzbWdybmJsb2NrcyhTTWdyUmVsYXRpb24gcmVsbiwgRm9y a051bWJlciBmb3JrbnVtKTsKLWV4dGVybiBCbG9ja051bWJlciBzbWdybmJsb2Nrc19jYWNoZWQo U01nclJlbGF0aW9uIHJlbG4sIEZvcmtOdW1iZXIgZm9ya251bSk7Ci1leHRlcm4gdm9pZCBzbWdy dHJ1bmNhdGUoU01nclJlbGF0aW9uIHJlbG4sIEZvcmtOdW1iZXIgKmZvcmtudW0sCi0JCQkJCQkg aW50IG5mb3JrcywgQmxvY2tOdW1iZXIgKm5ibG9ja3MpOwotZXh0ZXJuIHZvaWQgc21ncmltbWVk c3luYyhTTWdyUmVsYXRpb24gcmVsbiwgRm9ya051bWJlciBmb3JrbnVtKTsKK2V4dGVybiBCbG9j a051bWJlciBzbWdybmJsb2NrcyhTTWdyRmlsZUhhbmRsZSBzZmlsZSk7CitleHRlcm4gQmxvY2tO dW1iZXIgc21ncm5ibG9ja3NfY2FjaGVkKFNNZ3JGaWxlSGFuZGxlIHNmaWxlKTsKK2V4dGVybiB2 b2lkIHNtZ3JpbW1lZHN5bmMoU01nckZpbGVIYW5kbGUgc2ZpbGUpOworZXh0ZXJuIHZvaWQgc21n cnVubGluayhTTWdyRmlsZUhhbmRsZSBzZmlsZSwgYm9vbCBpc1JlZG8pOworCitleHRlcm4gdm9p ZCBzbWdydHJ1bmNhdGVfbXVsdGkoUmVsRmlsZUxvY2F0b3IgcmxvY2F0b3IsIEJhY2tlbmRJZCBi YWNrZW5kLCBGb3JrTnVtYmVyICpmb3JrcywgaW50IG5mb3JrcywgQmxvY2tOdW1iZXIgKm5ibG9j a3MpOworZXh0ZXJuIHZvaWQgc21ncnVubGlua19tdWx0aShSZWxGaWxlTG9jYXRvciBybG9jYXRv ciwgQmFja2VuZElkIGJhY2tlbmQsIEZvcmtOdW1iZXIgKmZvcmtzLCBpbnQgbmZvcmtzLCBib29s IGlzUmVkbyk7CisKK2V4dGVybiB2b2lkIHNtZ3JjbG9zZXJlbGxvY2F0b3IoUmVsRmlsZUxvY2F0 b3IgcmxvY2F0b3IsIEJhY2tlbmRJZCBiYWNrZW5kKTsKKwogZXh0ZXJuIHZvaWQgQXRFT1hhY3Rf U01ncih2b2lkKTsKIGV4dGVybiBib29sIFByb2Nlc3NCYXJyaWVyU21nclJlbGVhc2Uodm9pZCk7 CiAKZGlmZiAtLWdpdCBhL3NyYy9pbmNsdWRlL3V0aWxzL2ludmFsLmggYi9zcmMvaW5jbHVkZS91 dGlscy9pbnZhbC5oCmluZGV4IDIzNzQ4YjcyY2FmLi5jNDk0YzAxMDU2ZiAxMDA2NDQKLS0tIGEv c3JjL2luY2x1ZGUvdXRpbHMvaW52YWwuaAorKysgYi9zcmMvaW5jbHVkZS91dGlscy9pbnZhbC5o CkBAIC00OCw3ICs0OCw3IEBAIGV4dGVybiB2b2lkIENhY2hlSW52YWxpZGF0ZVJlbGNhY2hlQnlU dXBsZShIZWFwVHVwbGUgY2xhc3NUdXBsZSk7CiAKIGV4dGVybiB2b2lkIENhY2hlSW52YWxpZGF0 ZVJlbGNhY2hlQnlSZWxpZChPaWQgcmVsaWQpOwogCi1leHRlcm4gdm9pZCBDYWNoZUludmFsaWRh dGVTbWdyKFJlbEZpbGVMb2NhdG9yQmFja2VuZCBybG9jYXRvcik7CitleHRlcm4gdm9pZCBDYWNo ZUludmFsaWRhdGVTbWdyKFJlbEZpbGVMb2NhdG9yIHJsb2NhdG9yLCBCYWNrZW5kSWQgYmFja2Vu ZCk7CiAKIGV4dGVybiB2b2lkIENhY2hlSW52YWxpZGF0ZVJlbG1hcChPaWQgZGF0YWJhc2VJZCk7 CiAKZGlmZiAtLWdpdCBhL3NyYy9pbmNsdWRlL3V0aWxzL3JlbC5oIGIvc3JjL2luY2x1ZGUvdXRp bHMvcmVsLmgKaW5kZXggN2RjNDAxY2YwZGYuLjZlODQ5YTkwMWNlIDEwMDY0NAotLS0gYS9zcmMv aW5jbHVkZS91dGlscy9yZWwuaAorKysgYi9zcmMvaW5jbHVkZS91dGlscy9yZWwuaApAQCAtNTQs NyArNTQsNyBAQCB0eXBlZGVmIExvY2tJbmZvRGF0YSAqTG9ja0luZm87CiB0eXBlZGVmIHN0cnVj dCBSZWxhdGlvbkRhdGEKIHsKIAlSZWxGaWxlTG9jYXRvciByZF9sb2NhdG9yOwkvKiByZWxhdGlv biBwaHlzaWNhbCBpZGVudGlmaWVyICovCi0JU01nclJlbGF0aW9uIHJkX3NtZ3I7CQkvKiBjYWNo ZWQgZmlsZSBoYW5kbGUsIG9yIE5VTEwgKi8KKwlTTWdyRmlsZUhhbmRsZSByZF9zbWdyW01BWF9G T1JLTlVNICsgMV07CQkvKiBjYWNoZWQgZmlsZSBoYW5kbGVzLCBvciBOVUxMcyAqLwogCWludAkJ CXJkX3JlZmNudDsJCS8qIHJlZmVyZW5jZSBjb3VudCAqLwogCUJhY2tlbmRJZAlyZF9iYWNrZW5k OwkJLyogb3duaW5nIGJhY2tlbmQgaWQsIGlmIHRlbXBvcmFyeSByZWxhdGlvbiAqLwogCWJvb2wJ CXJkX2lzbG9jYWx0ZW1wOyAvKiByZWwgaXMgYSB0ZW1wIHJlbCBvZiB0aGlzIHNlc3Npb24gKi8K QEAgLTU2MiwxNSArNTYyLDE1IEBAIHR5cGVkZWYgc3RydWN0IFZpZXdPcHRpb25zCiAgKiBOb3Rl OiBzaW5jZSBhIHJlbGNhY2hlIGZsdXNoIGNhbiBjYXVzZSB0aGUgZmlsZSBoYW5kbGUgdG8gYmUg Y2xvc2VkIGFnYWluLAogICogaXQncyB1bndpc2UgdG8gaG9sZCBvbnRvIHRoZSBwb2ludGVyIHJl dHVybmVkIGJ5IHRoaXMgZnVuY3Rpb24gZm9yIGFueQogICogbG9uZyBwZXJpb2QuICBSZWNvbW1l bmRlZCBwcmFjdGljZSBpcyB0byBqdXN0IHJlLWV4ZWN1dGUgUmVsYXRpb25HZXRTbWdyCi0gKiBl YWNoIHRpbWUgeW91IG5lZWQgdG8gYWNjZXNzIHRoZSBTTWdyUmVsYXRpb24uICBJdCdzIHF1aXRl IGNoZWFwIGluCisgKiBlYWNoIHRpbWUgeW91IG5lZWQgdG8gYWNjZXNzIHRoZSBTTWdyRmlsZUhh bmRsZS4gIEl0J3MgcXVpdGUgY2hlYXAgaW4KICAqIGNvbXBhcmlzb24gdG8gd2hhdGV2ZXIgYW4g c21nciBmdW5jdGlvbiBpcyBnb2luZyB0byBkby4KICAqLwotc3RhdGljIGlubGluZSBTTWdyUmVs YXRpb24KLVJlbGF0aW9uR2V0U21ncihSZWxhdGlvbiByZWwpCitzdGF0aWMgaW5saW5lIFNNZ3JG aWxlSGFuZGxlCitSZWxhdGlvbkdldFNtZ3IoUmVsYXRpb24gcmVsLCBGb3JrTnVtYmVyIGZvcmtO dW0pCiB7Ci0JaWYgKHVubGlrZWx5KHJlbC0+cmRfc21nciA9PSBOVUxMKSkKLQkJc21ncnNldG93 bmVyKCYocmVsLT5yZF9zbWdyKSwgc21ncm9wZW4ocmVsLT5yZF9sb2NhdG9yLCByZWwtPnJkX2Jh Y2tlbmQpKTsKLQlyZXR1cm4gcmVsLT5yZF9zbWdyOworCWlmICh1bmxpa2VseShyZWwtPnJkX3Nt Z3JbZm9ya051bV0gPT0gTlVMTCkpCisJCXNtZ3JzZXRvd25lcigmKHJlbC0+cmRfc21ncltmb3Jr TnVtXSksIHNtZ3JvcGVuKHJlbC0+cmRfbG9jYXRvciwgcmVsLT5yZF9iYWNrZW5kLCBmb3JrTnVt KSk7CisJcmV0dXJuIHJlbC0+cmRfc21ncltmb3JrTnVtXTsKIH0KICNlbmRpZgogCkBAIC01ODAs MTQgKzU4MCwxOCBAQCBSZWxhdGlvbkdldFNtZ3IoUmVsYXRpb24gcmVsKQogICoKICAqIE5vdGU6 IHNtZ3JjbG9zZSBzaG91bGQgdW5ob29rIGZyb20gb3duZXIgcG9pbnRlciwgaGVuY2UgdGhlIEFz c2VydC4KICAqLwotI2RlZmluZSBSZWxhdGlvbkNsb3NlU21ncihyZWxhdGlvbikgXAotCWRvIHsg XAotCQlpZiAoKHJlbGF0aW9uKS0+cmRfc21nciAhPSBOVUxMKSBcCi0JCXsgXAotCQkJc21ncmNs b3NlKChyZWxhdGlvbiktPnJkX3NtZ3IpOyBcCi0JCQlBc3NlcnQoKHJlbGF0aW9uKS0+cmRfc21n ciA9PSBOVUxMKTsgXAotCQl9IFwKLQl9IHdoaWxlICgwKQorc3RhdGljIGlubGluZSB2b2lkCitS ZWxhdGlvbkNsb3NlU21ncihSZWxhdGlvbiByZWxhdGlvbikKK3sKKwlmb3IgKGludCBpID0gMDsg aSA8PSBNQVhfRk9SS05VTTsgaSsrKQorCXsKKwkJaWYgKHJlbGF0aW9uLT5yZF9zbWdyW2ldICE9 IE5VTEwpCisJCXsKKwkJCXNtZ3JjbG9zZShyZWxhdGlvbi0+cmRfc21ncltpXSk7CisJCQlBc3Nl cnQocmVsYXRpb24tPnJkX3NtZ3JbaV0gPT0gTlVMTCk7CisJCX0KKwl9Cit9CiAKIC8qCiAgKiBS ZWxhdGlvbkdldFRhcmdldEJsb2NrCkBAIC01OTgsNyArNjAyLDcgQEAgUmVsYXRpb25HZXRTbWdy KFJlbGF0aW9uIHJlbCkKICAqIHNvIHRoZXJlJ3Mgbm8gbmVlZCB0byByZS1vcGVuIHRoZSBzbWdy IGhhbmRsZSBpZiBpdCdzIG5vdCBjdXJyZW50bHkgb3Blbi4KICAqLwogI2RlZmluZSBSZWxhdGlv bkdldFRhcmdldEJsb2NrKHJlbGF0aW9uKSBcCi0JKCAocmVsYXRpb24pLT5yZF9zbWdyICE9IE5V TEwgPyAocmVsYXRpb24pLT5yZF9zbWdyLT5zbWdyX3RhcmdibG9jayA6IEludmFsaWRCbG9ja051 bWJlciApCisJKCAocmVsYXRpb24pLT5yZF9zbWdyW01BSU5fRk9SS05VTV0gIT0gTlVMTCA/IChy ZWxhdGlvbiktPnJkX3NtZ3JbTUFJTl9GT1JLTlVNXS0+c21ncl90YXJnYmxvY2sgOiBJbnZhbGlk QmxvY2tOdW1iZXIgKQogCiAvKgogICogUmVsYXRpb25TZXRUYXJnZXRCbG9jawpAQCAtNjA2LDcg KzYxMCw3IEBAIFJlbGF0aW9uR2V0U21ncihSZWxhdGlvbiByZWwpCiAgKi8KICNkZWZpbmUgUmVs YXRpb25TZXRUYXJnZXRCbG9jayhyZWxhdGlvbiwgdGFyZ2Jsb2NrKSBcCiAJZG8geyBcCi0JCVJl bGF0aW9uR2V0U21ncihyZWxhdGlvbiktPnNtZ3JfdGFyZ2Jsb2NrID0gKHRhcmdibG9jayk7IFwK KwkJUmVsYXRpb25HZXRTbWdyKHJlbGF0aW9uLCBNQUlOX0ZPUktOVU0pLT5zbWdyX3RhcmdibG9j ayA9ICh0YXJnYmxvY2spOyBcCiAJfSB3aGlsZSAoMCkKIAogLyoKLS0gCjIuMzcuMQoK --_002_7C4D53F1A1564ABC9B89B2C253D5FF74amazoncom_--